video-fps-probe 0.3.0 → 0.4.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/README.md +19 -11
  3. package/dist/analyze.js +10 -1
  4. package/dist/api/codes.d.ts +6 -0
  5. package/dist/api/codes.js +90 -0
  6. package/dist/aspect/index.d.ts +13 -0
  7. package/dist/aspect/index.js +180 -0
  8. package/dist/aspect/rational.js +61 -0
  9. package/dist/cjs/analyze.d.cts +9 -0
  10. package/dist/cjs/api/agreement.d.cts +18 -0
  11. package/dist/cjs/api/codes.d.cts +6 -0
  12. package/dist/cjs/api/errors.d.cts +12 -0
  13. package/dist/cjs/api/guards.d.cts +4 -0
  14. package/dist/cjs/api/summary.d.cts +22 -0
  15. package/dist/cjs/aspect/index.d.cts +13 -0
  16. package/dist/cjs/aspect.cjs +1 -0
  17. package/dist/cjs/check/index.d.cts +60 -0
  18. package/dist/cjs/check.cjs +1 -0
  19. package/dist/cjs/chunks/boxes-B0T2nt3e.cjs +1 -0
  20. package/dist/cjs/chunks/build-DhETwJLO.cjs +1 -0
  21. package/dist/cjs/chunks/color-xqJHSfhZ.cjs +1 -0
  22. package/dist/cjs/chunks/compare-B_HKNwqg.cjs +1 -0
  23. package/dist/cjs/chunks/config-CSbXzEqr.cjs +1 -0
  24. package/dist/cjs/chunks/errors-0oBg1Ai6.cjs +1 -0
  25. package/dist/cjs/chunks/fallback-CyPIR3RM.cjs +1 -0
  26. package/dist/cjs/chunks/guards-DbQNcAZS.cjs +1 -0
  27. package/dist/cjs/chunks/inline-Bx-TQg8f.cjs +1 -0
  28. package/dist/cjs/chunks/isobmff-4RrRf9N-.cjs +1 -0
  29. package/dist/cjs/chunks/matroska-BhgWtuPU.cjs +1 -0
  30. package/dist/cjs/chunks/metadata-ECdzNLkE.cjs +1 -0
  31. package/dist/cjs/chunks/options-B_vLHxHd.cjs +1 -0
  32. package/dist/cjs/chunks/probe-Cn1DtL-C.cjs +1 -0
  33. package/dist/cjs/chunks/rational-Dq5Vza-Q.cjs +1 -0
  34. package/dist/cjs/chunks/reader-Dw11ozVU.cjs +1 -0
  35. package/dist/cjs/chunks/rfps-C-pyKnu8.cjs +1 -0
  36. package/dist/cjs/chunks/runtime-BgAlQQee.cjs +1 -0
  37. package/dist/cjs/chunks/segments-B1H6bDz-.cjs +1 -0
  38. package/dist/cjs/chunks/sniff-CXwqOGwh.cjs +1 -0
  39. package/dist/cjs/chunks/stats-DW7dVdFa.cjs +1 -0
  40. package/dist/cjs/client/types.d.cts +96 -0
  41. package/dist/cjs/color/index.d.cts +7 -0
  42. package/dist/cjs/color.cjs +1 -0
  43. package/dist/cjs/core/reader.d.cts +47 -0
  44. package/dist/cjs/core/types.d.cts +194 -0
  45. package/dist/cjs/engines/types.d.cts +69 -0
  46. package/dist/cjs/header/index.d.cts +28 -0
  47. package/dist/cjs/header/limits.d.cts +26 -0
  48. package/dist/cjs/header.cjs +1 -0
  49. package/dist/cjs/index.cjs +1 -0
  50. package/dist/cjs/index.d.cts +13 -0
  51. package/dist/cjs/plugins/types.d.cts +17 -0
  52. package/dist/cjs/presets/index.d.cts +19 -0
  53. package/dist/cjs/presets.cjs +1 -0
  54. package/dist/cjs/probe.d.cts +3 -0
  55. package/dist/cjs/url/index.d.cts +47 -0
  56. package/dist/cjs/url.cjs +1 -0
  57. package/dist/cjs/worker/protocol.d.cts +47 -0
  58. package/dist/color/codec-string.js +121 -0
  59. package/dist/color/config.js +199 -0
  60. package/dist/color/index.d.ts +7 -0
  61. package/dist/color/index.js +139 -0
  62. package/dist/color/names.js +33 -0
  63. package/dist/color/sps.js +275 -0
  64. package/dist/core/dispatch.js +18 -29
  65. package/dist/core/isobmff/boxes.js +6 -5
  66. package/dist/core/isobmff/build.js +401 -0
  67. package/dist/core/isobmff/config.js +34 -0
  68. package/dist/core/isobmff/header.js +677 -0
  69. package/dist/core/isobmff/index.js +9 -381
  70. package/dist/core/isobmff/moof.js +2 -2
  71. package/dist/core/isobmff/moov.js +3 -3
  72. package/dist/core/matroska/header.js +10 -4
  73. package/dist/core/matroska/index.js +11 -5
  74. package/dist/core/options.js +1 -0
  75. package/dist/core/reader.d.ts +3 -0
  76. package/dist/core/reader.js +13 -7
  77. package/dist/core/result.js +1 -0
  78. package/dist/core/stats.js +3 -0
  79. package/dist/core/types.d.ts +60 -1
  80. package/dist/engines/common.js +2 -0
  81. package/dist/header/index.d.ts +28 -0
  82. package/dist/header/index.js +182 -0
  83. package/dist/header/limits.d.ts +26 -0
  84. package/dist/header/limits.js +144 -0
  85. package/dist/header/metadata.js +2 -0
  86. package/dist/index.d.ts +1 -0
  87. package/dist/index.js +1 -0
  88. package/dist/standalone/own-isobmff.worker.js +1 -1
  89. package/dist/standalone/own-matroska.worker.js +1 -1
  90. package/dist/standalone/own.worker.js +1 -1
  91. package/dist/url/index.d.ts +47 -0
  92. package/dist/url/index.js +335 -0
  93. package/dist/worker/single.js +2 -1
  94. package/package.json +117 -2
@@ -1 +1 @@
1
- (function(){var e=Object.defineProperty,t=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},n=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r};function r(e,t=null){return{container:e,brand:null,formatDurationSec:null,scan:null,videoTracks:[],audioTrackCount:0,primaryTrackId:null,error:t,warnings:[]}}function i(e){return{trackId:e,fourccOrCodecId:``,codecName:``,width:0,height:0,rotation:0,timescale:0,frames:null,presentedFrames:null,durationSec:null,startSec:null,avgFps:null,avgFpsFfprobe:null,rFpsFfprobe:null,nominalFps:null,dominantFps:null,minFps:null,maxFps:null,isVfr:null,vfrRatio:0,distinctDeltas:0,duplicateTimestamps:0,timestampsQuantized:!1,isStill:!1,rateProfile:null,provenance:{},warnings:[]}}function a(e){return e<0n?-e:e}function o(e,t){for(;t!==0n;){let n=e%t;e=t,t=n}return e}function s(e,t){if(typeof e==`bigint`)return e;if(!Number.isSafeInteger(e))throw RangeError(`${t} must be a safe integer, got ${e}`);return BigInt(e)}function c(e,t,n=p){let r=s(e,`num`),i=s(t,`den`),c=s(n,`max`),l=0n,u=1n,d=1n,f=0n,m=r<0n!=i<0n,h=o(a(r),a(i));for(h!==0n&&(r=a(r)/h,i=a(i)/h),r<=c&&i<=c&&(d=r,f=i,i=0n);i!==0n;){let e=r/i,t=r-i*e,n=e*d+l,a=e*f+u;if(n>c||a>c){if(d!==0n&&(e=(c-l)/d),f!==0n){let t=(c-u)/f;t<e&&(e=t)}i*(2n*e*f+u)>r*f&&(d=e*d+l,f=e*f+u);break}l=d,u=f,d=n,f=a,r=i,i=t}let g=Number(d);return{num:m?-g:g,den:Number(f),exact:i===0n}}function l(e){return e.den===0?0:e.num/e.den}function u(e){return e?`${e.num}/${e.den}`:`0/0`}function d(e,t){return{num:e,den:t,value:l({num:e,den:t})}}function f(e,t,n=p){let r=c(e,t,n);return d(r.num,r.den)}var p,m=t((()=>{p=2147483647}));function h(e,t){let n={...e};if(!t)return n;for(let e of Object.keys(t)){let r=t[e];r!==void 0&&(n[e]=r)}return n}function g(e={}){return{signal:e.signal??null,matroskaMode:e.matroskaMode??`auto`,exactBudgetMs:e.exactBudgetMs??150,readAhead:h(_,e.readAhead),costModel:h(v,e.costModel),maxExpandedSamples:e.maxExpandedSamples??5e6,onProgress:e.onProgress??null}}var _,v,y=t((()=>{_={head:65536,fragment:1048576,matroskaScan:1048576,tail:262144},v={perReadMs:.8,bytesPerMs:5e5,perBlockMs:2e-4}})),b=n({CUSUM_ALARM_PERIODS:()=>2,FREEZE_FACTOR:()=>4,FREEZE_MIN_SEC:()=>we,MAX_ANOMALIES:()=>50,MAX_BUCKETS:()=>120,MAX_SEGMENTS:()=>50,MIN_SEGMENT_FRAMES:()=>5,MIN_SEGMENT_SEC:()=>S,UNEVEN_DOMINANT_SHARE:()=>C,rateProfile:()=>D});function x(e,t,n){e.t0=Math.min(e.t0,t.t0),e.t1=Math.max(e.t1,t.t1),e.frames+=t.frames,n?(e.n+=t.n,e.sum+=t.sum,e.ex+=t.ex):e.ex+=t.t1-t.t0}var S,C,w,T,E,D,ee=t((()=>{Ee(),S=.5,C=.8,w=1+Se,T=e=>String(+e.toPrecision(4)),E=e=>({t0:e,t1:e,n:0,sum:0,frames:0,ex:0,d:0,kind:`steady`}),D=(e,t,n,r)=>{let i=t,a=we*i,o=e=>i*e.n/e.sum,s=e=>e.n>=5&&e.t1-e.t0>=.5*i,c=[],l=e=>{let t=c[c.length-1];s(e)?c.push(e):t?.kind===`short`?x(t,e,!0):c.push({...e,kind:`short`})},u=E(0),d=E(0),f=E(0),p=0,m=0,h=0,g=0,_=0,v=!1,y=()=>{u.t1=p,v?c.push({...u,kind:`hold`}):l(u),u=E(p),v=!1,g=_=0},b=Math.min(120,Math.floor(n/2)),S=r/b,C=new Float64Array(b),D=(e,t)=>{u.n+=e,u.sum+=e*t,u.frames+=e,p+=e*t},ee=(e,t)=>{let n=e;if(t<=0)u.frames+=n,h+=n;else{for(let e=p,r=e+n*t,i=Math.floor(e/S);e<r&&i<b;i++){let n=Math.min(r,(i+1)*S);n>e&&(C[i]+=(n-e)/t),e=Math.max(e,n)}for(;n>0;){let e=u.sum/u.n;if(u.n&&t>=Math.max(a,4*e)){y(),v=!0,D(1,t),n--;continue}if(v&&Math.abs(t-e)>.075*e&&y(),v=!1,!u.n){D(n,t);return}let r=t-e,i=Ce*e,o=2*e,s=Math.abs(r)>i,c=s?1:n;if(s&&(r>0?!g||r-i>o:!_)){let e={...u,t1:p,d:t};r>0?d=e:f=e}if(g=Math.max(0,g+c*(r-i)),_=Math.max(0,_-c*(r+i)),D(c,t),n-=c,g>o||_>o){let e=g>o?d:f,t=u.n-e.n-1;t>0&&Math.abs(Math.log(e.d*e.n/e.sum))<Math.abs(Math.log(e.d*t/(u.sum-e.sum-e.d)))&&(e.t1+=e.d,e.n++,e.sum+=e.d,e.frames++),u.t0=e.t1,u.n-=e.n,u.sum-=e.sum,u.frames-=e.frames,l(e),g=_=0}}}},O=0,k=0;if(e((e,t)=>{e>0&&(m+=e,O&&t!==k&&(ee(O,k),O=0),O+=e,k=t)}),O&&ee(O,k),!(p>0))return null;u.n?y():c[c.length-1].frames+=u.frames;let A=[],te=(e,t,n,r,a=t.t1-t.t0)=>{A.push({kind:e,atSec:t.t0/i,durationSec:a/i,fromFps:n,toFps:r})},j=[],ne=(e,t)=>e?Math.abs(Math.log(o(e)/t)):1/0;c.forEach((e,t)=>{let n=j[j.length-1];if(e.kind===`short`||e.kind===`hold`){let r=o(e),i=c[t+1]?.kind===`steady`?c[t+1]:void 0,l=ne(n,r)<=ne(i,r)?n:i;if(e.kind=s(e)?`variable`:`steady`,e.kind===`steady`&&l){let t=o(l),n=e.sum>=e.n*Math.max(a,4*l.sum/l.n)?`freeze`:r*w<t?`gap`:r>t*w?`burst`:null;n&&te(n,e,t,r),x(l,e,!n);return}}let r=n?o(e)/o(n):0;n?.kind===`steady`&&e.kind===`steady`&&r<w&&r*w>1?x(n,e,!0):j.push(e)});let M=j[j.length-1],N=p+M.sum/M.n;M.frames+=n-m,M.t1=N;for(let e=1;e<j.length;e++){let t=j[e-1],n=j[e],r=o(n)/o(t);(t.kind===`steady`&&n.kind===`steady`||r>=w||r*w<=1)&&te(`rate-change`,n,o(t),o(n),0)}A.sort((e,t)=>e.atSec-t.atSec);let P=j.filter(e=>e.kind===`steady`).map(e=>[o(e),e.t1-e.t0-e.ex,e.n]).sort((e,t)=>e[0]-t[0]),F=0,I=0,L=0,re=0,R=0;for(let[e,t,n]of P){for(L+=t,re+=n;e>=P[R][0]*w;R++)L-=P[R][1],re-=P[R][2];F=Math.max(F,L),I=Math.max(I,re)}let ie=F/N,ae=ie<.8||I<.8*(m-h)||P.length>1&&P[P.length-1][0]>=P[0][0]*w,z=j.slice(0,3).map(e=>`${e.kind===`variable`?`~`:``}${T(o(e))} fps for ${T((e.t1-e.t0)/i)} s`);j.length>3&&z.push(`+${j.length-3} more`);let B=``,oe=(e,t)=>{e&&(B+=`${B?`, `:`; `}${e} ${t}${e>1?`s`:``}`)};for(let e of[`freeze`,`gap`,`burst`])oe(A.filter(t=>t.kind===e).length,e);return oe(h,`duplicate timestamp`),{segments:j.slice(0,50).map(e=>({startSec:e.t0/i,endSec:e.t1/i,frames:e.frames,fps:o(e),kind:e.kind})),moreSegments:Math.max(0,j.length-50),anomalies:A.slice(0,50),moreAnomalies:Math.max(0,A.length-50),buckets:{bucketSec:S/i,fps:Array.from(C,e=>e*i/S)},uneven:ae,dominantShare:ie,summary:`${ae?`Uneven`:B?`Mostly steady`:`Steady`}: ${z.join(`, `)}${B}`}}})),O=n({CUSUM_DRIFT:()=>Ce,FREEZE_FACTOR:()=>4,FREEZE_MIN_SEC:()=>we,MAX_REORDER_DEPTH:()=>16,RATE_CHANGE_RELATIVE:()=>Se,SNAP_RELATIVE_TOLERANCE:()=>be,VFR_RELATIVE_TOLERANCE:()=>xe,analyzeTimeline:()=>N,msGridTicks:()=>A,rateFromTicks:()=>M,rateProfileOf:()=>ce,reorderDepthFromCts:()=>j,snapToStandardRate:()=>k,vfrTolerance:()=>te});function k(e,t=be){if(!(e>0))return null;let n=null,r=1/0;for(let t of Te){let i=Math.abs(e-t.value)/t.value;i<r&&(r=i,n=t)}return r<=t?n:null}function A(e,t){if(!(e>1e3)||t.length===0)return 0;for(let n of t){let t=n*1e3;if(!Number.isSafeInteger(t)||t%e!==0)return 0}return e/1e3}function te(e,t,n){return Math.max(1,Math.round(xe*e),A(t,n))}function j(e,t,n){return!(t>e)||!(n>0)?0:Math.min(16,Math.ceil((t-e)/n))}function ne(e){if(Number.isInteger(e)||!(e>0))return null;let t=1e9/e,n=Math.round(t);return n>0&&Math.abs(t-n)<=1e-6*n?n:null}function M(e,t){let n=ne(e);return n!==null&&t>0&&Number.isSafeInteger(n*t)?f(1e9,n*t,2**53-1):I(e,t,2**53-1)}function N(e){let t=[],n=re(e.timescale,t);return`segments`in e?he(e,n,t):ye(e,n,t)}function P(e){return`counts`in e&&`deltas`in e?{n:Math.min(e.counts.length,e.deltas.length),counts:e.counts,values:e.deltas}:{n:e.length,counts:null,values:e}}function F(e){return e?`counts`in e&&`offsets`in e?{n:Math.min(e.counts.length,e.offsets.length),counts:e.counts,values:e.offsets}:{n:e.length,counts:null,values:e}:null}function I(e,t,n=p){if(!(e>0)||!(t>0))return null;if(Number.isSafeInteger(e)&&Number.isSafeInteger(t))return f(e,t,n);let r=1e6,i=Math.round(e*r),a=Math.round(t*r);return Number.isSafeInteger(i)&&Number.isSafeInteger(a)?f(i,a,n):d(e/t,1)}function L(e,t,n){if(!(t>0)||!(n>0))return null;let r=ne(e);return r!==null&&Number.isSafeInteger(t)&&Number.isSafeInteger(n)?f(BigInt(t)*1000000000n,BigInt(r)*BigInt(n),p):Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&Number.isSafeInteger(n)?f(BigInt(e)*BigInt(t),n,p):I(e*t,n)}function re(e,t){return e>0&&Number.isFinite(e)?e:(t.push(`invalid timescale ${e}, using 1`),1)}function R(e){return e?{ws:e.start,we:e.end>e.start?e.end:1/0}:{ws:-1/0,we:1/0}}function ie(e,t){return{timescale:e,sampleCount:0,durationSum:0,avgFps:null,avgFpsString:`0/0`,presentedAvgFps:null,presentedFrames:null,firstPts:null,lastPts:null,deltaCount:0,excludedTailDeltas:0,reorderDepth:0,duplicateTimestamps:0,discontinuities:0,histogram:[],distinctDeltas:0,minDelta:null,maxDelta:null,medianDelta:null,meanDelta:null,tolerance:null,minFps:null,maxFps:null,isVfr:null,vfrRatio:0,nominalFps:null,dominantFps:null,timestampsQuantized:!1,profile:null,fastPath:!1,warnings:t}}function ae(e,t,n,r,i,a){let o=e.timescale,s=e.isVfr===!1&&n-t<=(e.tolerance??0)&&n<2*t;return n>t*1.075&&!s?e=>e(r,o,i,a):null}function z(e,t){let n=e.medianDelta,r=e.timescale;!n||!t||t<4*n||t<.5*r||e.warnings.push(`last frame held ${(t/r).toFixed(3)} s (${(t/n).toFixed(1)}x the median frame interval): the average is below the frame rate`)}function B(e,t){if(z(e,t),e.presentedFrames===null||e.presentedFrames<=0||e.firstPts===null||e.lastPts===null)return;let n=t>0?t:e.medianDelta??0;e.presentedAvgFps=L(e.timescale,e.presentedFrames,e.lastPts-e.firstPts+n)}function oe(e,t){let n=0;for(let[r,i]of V(e)){if(t<n+r)return i;n+=r}return 0}async function se(){try{let{rateProfile:e}=await Promise.resolve().then(()=>(ee(),b));return e}catch{return null}}async function ce(e){let t=e&&await se();return t?e(t):null}function le(e,t){return e-t>=2?e-t:e}function ue(e,t,n){let r=e.timescale,i=[...t.keys()].sort((e,t)=>e-t),a=i.map(e=>[e,t.get(e)??0]),o=0,s=0;for(let[e,t]of a)o+=t,s+=e*t;if(e.histogram=a,e.distinctDeltas=i.length,o===0)return;let c=0,l=i[0];for(let[e,t]of a)if(c+=t,c*2>=o){l=e;break}let u=i[0],d=0;for(let[e,t]of a)t>d&&(u=e,d=t);let f=A(r,i),p=Math.max(1,Math.round(xe*l),f),m=0;for(let[e,t]of a)Math.abs(e-l)>p&&(m+=t);let h=i[0],g=i[i.length-1],_=o>=2&&m>0;if(e.minDelta=h,e.maxDelta=g,e.medianDelta=l,e.meanDelta=s/o,e.tolerance=p,e.minFps=M(r,g),e.maxFps=M(r,h),e.isVfr=_,e.vfrRatio=m/o,i.length===1){let t=M(r,h);t&&(e.nominalFps={...t,kind:`exact`})}else if(_&&d*2>=o){let t=M(r,u);t&&(e.dominantFps={rate:t,share:d/o})}e.timestampsQuantized=(n||f>0)&&!_&&i.length>1}function de(e){if(e.nominalFps||e.isVfr!==!1||e.distinctDeltas<2||!e.avgFps)return;let t=k(e.meanDelta?e.timescale/e.meanDelta:e.avgFps.value);t&&(e.nominalFps={...t,kind:`snapped`})}function fe(e){let t={n:0,d:0,constantCts:!0,ctsValue:0,ctsMin:1/0,ctsMax:-1/0,firstDelta:0,negativeDurations:!1,discontinuities:0,startDts:0,ctsMismatch:0},n=!1,r=e=>{n?e!==t.ctsValue&&(t.constantCts=!1):(t.ctsValue=e,n=!0),e<t.ctsMin&&(t.ctsMin=e),e>t.ctsMax&&(t.ctsMax=e)},i=0;for(let n=0;n<e.length;n++){let a=e[n];a.baseDts!==void 0&&a.baseDts!==null&&(n===0?t.startDts=a.baseDts:a.baseDts!==i&&t.discontinuities++,i=a.baseDts);let o=P(a.durations),s=0;for(let e=0;e<o.n;e++){let n=o.counts?o.counts[e]:1;if(n<=0)continue;let r=o.values[e];s+=n,t.d+=n*r,i+=n*r,r<0&&(t.negativeDurations=!0),t.firstDelta===0&&r>0&&(t.firstDelta=r)}t.n+=s;let c=F(a.cts),l=0,u=0;if(c){for(let e=0;e<c.n;e++){let t=c.counts?c.counts[e]:1;if(t<=0)continue;u+=t;let n=Math.min(t,s-l);n<=0||(l+=n,r(c.values[e]))}u!==s&&t.ctsMismatch++}l<s&&r(0)}return n||(t.ctsMin=0,t.ctsMax=0),t}function*V(e){for(let t of e){let e=P(t.durations);for(let t=0;t<e.n;t++){let n=e.counts?e.counts[t]:1;n>0&&(yield[n,e.values[t]])}}}function pe(e,t,n,r){if(n===-1/0)return 0;if(n===1/0)return r;let i=t,a=0;for(let[t,r]of V(e)){if(r===0){if(i<n){a+=t;continue}return a}if(i+(t-1)*r<n)a+=t,i+=t*r;else return a+Math.max(0,Math.min(t,Math.ceil((n-i)/r)))}return a}function me(e,t,n){let r=t,i=0;for(let[t,a]of V(e)){if(n<i+t)return r+(n-i)*a;i+=t,r+=t*a}return r}function he(e,t,n){let r=e.segments,i=fe(r);i.ctsMismatch>0&&n.push(`composition offsets do not match the sample count in ${i.ctsMismatch} segment(s)`),i.discontinuities>0&&n.push(`decode timestamp discontinuities: ${i.discontinuities}`),i.negativeDurations&&n.push(`negative sample durations`),Number.isSafeInteger(i.d)||n.push(`duration sum exceeds 2^53-1`);let a=ie(t,n);if(a.sampleCount=i.n,a.durationSum=i.d,a.discontinuities=i.discontinuities,a.avgFps=L(t,i.n,i.d),a.avgFpsString=u(a.avgFps),i.n===0)return a.presentedFrames=0,a;let o=e.reorderDepth??j(i.ctsMin,i.ctsMax,i.firstDelta);a.reorderDepth=o;let s=1+o,{ws:c,we:l}=R(e.editWindow),d=e.tickQuantized??!1;if(!e.forceExpand&&i.constantCts&&i.discontinuities===0&&!i.negativeDurations){a.fastPath=!0;let e=i.startDts+i.ctsValue,t=pe(r,e,c,i.n),n=Math.max(t,pe(r,e,l,i.n));if(a.presentedFrames=n-t,n===t)return a;let o=me(r,e,t),u=me(r,e,n-1);a.firstPts=o,a.lastPts=u;let f=n-t-1,p=le(f,s),m=new Map,h=0,g=1/0,_=0;for(let[e,n]of V(r)){if(h>=t+f)break;let r=Math.max(h,t),i=Math.min(h+e,t+f);if(i>r){if(n===0)a.duplicateTimestamps+=i-r;else{g=Math.min(g,n),_=Math.max(_,n);let i=Math.min(h+e,t+p);i>r&&(m.set(n,(m.get(n)??0)+(i-r)),a.deltaCount+=i-r)}}h+=e}return a.excludedTailDeltas=f-p,ue(a,m,d),de(a),B(a,oe(r,n-1)),a.profile=ae(a,g,_,e=>{let n=0;for(let[i,a]of V(r)){if(n>=t+f)break;let r=Math.max(n,t),o=Math.min(n+i,t+f);o>r&&e(o-r,a),n+=i}},n-t,u-o),a}let f=e.maxExpandedSamples??5e6;if(i.n>f)return n.push(`per-sample analysis skipped: ${i.n} samples exceed the limit of ${f}`),a;let p=new Float64Array(i.n),m=0,h=0;for(let e of r){e.baseDts!==void 0&&e.baseDts!==null&&(h=e.baseDts);let t=m,n=P(e.durations);for(let e=0;e<n.n;e++){let t=n.counts?n.counts[e]:1,r=n.values[e];for(let e=0;e<t;e++)p[m++]=h,h+=r}let r=F(e.cts);if(r){let e=t;for(let t=0;t<r.n&&e<m;t++){let n=r.counts?r.counts[t]:1,i=r.values[t];for(let t=0;t<n&&e<m;t++)p[e++]+=i}}}let g=-1;for(let e=0;e<p.length;e++){let t=p[e];t>=c&&t<l&&(g<0||t>=p[g])&&(g=e)}let _=g>=0?oe(r,g):0;return _e(a,ge(p,c,l),s,d),B(a,_),de(a),a}function ge(e,t,n){let r=e.length;if(t!==-1/0||n!==1/0){r=0;for(let i=0;i<e.length;i++){let a=e[i];a>=t&&a<n&&(e[r++]=a)}}let i=e.subarray(0,r);for(let e=1;e<r;e++)if(i[e]<i[e-1]){i.sort();break}return i}function _e(e,t,n,r){let i=t.length;if(e.presentedFrames=i,i===0)return;e.firstPts=t[0],e.lastPts=t[i-1];let a=i-1,o=le(a,n),s=new Map,c=1/0,l=0;for(let n=1;n<=a;n++){let r=t[n]-t[n-1];r<=0?e.duplicateTimestamps++:(c=Math.min(c,r),l=Math.max(l,r),n<=o&&(s.set(r,(s.get(r)??0)+1),e.deltaCount++))}e.excludedTailDeltas=a-o,ue(e,s,r),e.profile=ae(e,c,l,e=>{for(let n=1;n<=a;n++)e(1,t[n]-t[n-1])},i,t[a]-t[0])}function ve(e){let t=-1/0,n=0;for(let r=0;r<e.length;r++){let i=e[r];i>t?t=i:t-i>n&&(n=t-i)}return n}function ye(e,t,n){let r=e.pts,i=r.length,a=ie(t,n);if(a.sampleCount=i,i===0)return a.presentedFrames=0,a;let o=1/0,s=-1/0;for(let e=0;e<i;e++){let t=r[e];t<o&&(o=t),t>s&&(s=t)}let{ws:c,we:l}=R(e.editWindow),d=ge(Float64Array.from(r),c,l),f=e.reorderDepth;if(f===void 0){let t=0;for(let e=1;e<d.length;e++){let n=d[e]-d[e-1];if(n>0){t=n;break}}f=e.ctsRange?j(e.ctsRange.min,e.ctsRange.max,t):j(0,ve(r),t)}a.reorderDepth=f,_e(a,d,1+f,e.tickQuantized??!1),z(a,e.lastDuration);let p=e.lastDuration??a.medianDelta??0;return a.durationSum=s-o+p,a.avgFps=L(t,i,a.durationSum),a.avgFpsString=u(a.avgFps),a.presentedAvgFps=a.avgFps,de(a),a}var be,xe,Se,Ce,we,Te,Ee=t((()=>{m(),y(),be=.001,xe=.005,Se=.15,Ce=Se/2,we=.5,Te=(()=>{let e=[];for(let t of[24,30,48,60,120,240])e.push(d(t*1e3,1001));for(let t=1;t<=240;t++)e.push(d(t,1));return e})()}));function De(e){if(e?.aborted)throw e.reason??new DOMException(`Aborted`,`AbortError`)}function H(e,t){if(!Number.isSafeInteger(e)||e<0)throw RangeError(`${t} must be a non-negative safe integer, got ${e}`)}var Oe=class{size;headWindow;maxWindows;signal;#e;#t=[];#n=[];#r=0;#i=0;constructor(e,t={}){H(e.size,`blob size`),this.#e=e,this.size=e.size,this.headWindow=t.headWindow??65536,this.maxWindows=Math.max(1,t.maxWindows??4),this.signal=t.signal??null,H(this.headWindow,`headWindow`)}get reads(){return this.#r}get bytesFetched(){return this.#i}checkAbort(){De(this.signal)}async read(e,t){if(H(e,`offset`),H(t,`length`),e>this.size)throw RangeError(`offset ${e} is beyond the end of the file (${this.size})`);let n=Math.min(this.size,e+t);if(n===e)return new Uint8Array;this.checkAbort();let r;try{r=await this.#e.slice(e,n).arrayBuffer()}catch(e){throw this.checkAbort(),e?.name===`AbortError`?e:Error(`file read failed: ${e}`)}if(this.checkAbort(),this.#r++,r.byteLength!==n-e)throw Error(`file read failed: short read at ${e}: expected ${n-e} bytes, got ${r.byteLength}`);return this.#a(e,n),new Uint8Array(r)}async readMany(e,t=4){let n=Array(e.length),r=0,i=async()=>{for(;r<e.length;){let t=r++,[i,a]=e[t],o=this.peek(i,a);n[t]=o?new Uint8Array(o.buffer,o.byteOffset,o.byteLength):await this.read(i,a)}},a=[];for(let n=0;n<Math.max(1,Math.min(t,e.length));n++)a.push(i());return await Promise.all(a),n}peek(e,t){let n=Math.min(this.size,e+t);for(let t=0;t<this.#t.length;t++){let r=this.#t[t];if(e>=r.off&&n<=r.off+r.buf.length)return t>0&&(this.#t.splice(t,1),this.#t.unshift(r)),new DataView(r.buf.buffer,r.buf.byteOffset+(e-r.off),n-e)}return null}async view(e,t,n=this.headWindow){if(H(e,`offset`),H(t,`length`),H(n,`readAhead`),e>this.size)throw RangeError(`offset ${e} is beyond the end of the file (${this.size})`);let r=Math.min(this.size,e+t);if(r===e)return new DataView(new ArrayBuffer(0));let i=this.peek(e,r-e);if(i)return i;let a=Math.min(this.size,Math.max(r,e+n)),o=this.#t.find(t=>e>=t.off&&e<t.off+t.buf.length),s;if(o){let t=o.buf.subarray(e-o.off),n=await this.read(o.off+o.buf.length,a-(o.off+o.buf.length));s=new Uint8Array(t.length+n.length),s.set(t,0),s.set(n,t.length)}else s=await this.read(e,a-e);return this.#t.unshift({off:e,buf:s}),this.#t.length>this.maxWindows&&(this.#t.length=this.maxWindows),new DataView(s.buffer,s.byteOffset,r-e)}async bytes(e,t,n=this.headWindow){let r=await this.view(e,t,n);return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}#a(e,t){let n=this.#n,r=0,i=n.length;for(;r<i;){let t=r+i>>>1;n[t].end<e?r=t+1:i=t}let a=r,o=e,s=t,c=0;for(;a<n.length&&n[a].start<=t;){let r=n[a],i=Math.min(t,r.end)-Math.max(e,r.start);i>0&&(c+=i),r.start<o&&(o=r.start),r.end>s&&(s=r.end),a++}n.splice(r,a-r,{start:o,end:s}),this.#i+=t-e-c}};function ke(e,t){return e.getUint8(t)*65536+e.getUint16(t+1)}function Ae(e,t,n){let r=``;for(let i=0;i<n;i++)r+=String.fromCharCode(e.getUint8(t+i));return r}function U(e,t){return Ae(e,t,4).replace(/[^ -~]/g,`?`)}var W=class extends Error{constructor(e){super(e),this.name=`IsoBmffError`}};function G(e,t,n,r=0){let i=Math.min(e.byteLength,n);if(t+8>i)return null;let a=e.getUint32(t),o=U(e,t+4),s=8,c=a;if(a===1){if(t+16>i)return null;let n=e.getBigUint64(t+8);if(n>BigInt(2**53-1))throw new W(`corrupt file: box '${o}' at ${r+t} has a size above 2^53-1`);c=Number(n),s=16}else a===0&&(c=n-t);if(o===`uuid`&&(s+=16),c<s)throw new W(`corrupt file: box '${o}' at ${r+t} is smaller than its header`);let l=t+c;return{type:o,start:t,size:c,headerSize:s,end:Math.min(l,n),truncated:l>n}}function*K(e,t,n,r){let i=t;for(;i+8<=n;){let t;try{t=G(e,i,n)}catch(e){r?.push(e.message.replace(/^corrupt file: /,`ignored invalid child: `));return}if(!t)return;yield t,i=t.start+t.size}}function q(e,t,n,r){let i=e.getBigUint64(t);if(i>BigInt(2**53-1))throw new W(`unsupported: box '${n}' at ${r} holds a value above 2^53-1`);return Number(i)}function je(e,t,n,r){let i=e.getBigInt64(t);if(i>BigInt(2**53-1)||i<-BigInt(2**53-1))throw new W(`unsupported: box '${n}' at ${r} holds a value beyond 2^53-1`);return Number(i)}function Me(e,t,n,r,i){let a=Math.max(0,Math.floor(t/n));return e>a?(i.push(`${r} declares ${e} entries but its box holds only ${a}`),a):e}let J=null;function Ne(){if(J)return J;J=new Map;for(let e of`rawvideo:raw yuv22vuyyuvs|v210:v210|mjpeg:jpegmjpaAVDJAVRndmb1|mpeg4:mp4vDIVXXVID3IV2|h263:h263s263H263|dvvideo:dvcpdvc dvppdv5pdv5nAVdvAVd1dvhqdvhpdvh1dvh2dvh3dvh4dvh5dvh6|qtrle:rle |cinepak:cvid|svq1:SVQ1svq1svqi|svq3:SVQ3|vvc:vvc1vvi1|hevc:hev1hvc1dvhe|h264:avc1avc2avc3avc4ai5pai5qai52ai53ai55ai56ai1pai1qai12ai13ai15ai16AVinaivxdva1dvav|evc:evc1|vp8:vp08|vp9:vp09|av1:av01|mpeg1video:m1v m1v1mpegmp1v|mpeg2video:m2v1hdv1hdv2hdv3hdv4hdv5hdv6hdv7hdv8hdv9hdvamx5nmx5pmx4nmx4pmx3nmx3pxd51xd54xd55xd59xd5axd5bxd5cxd5dxd5exd5fxdv1xdv2xdv3xdv4xdv5xdv6xdv7xdv8xdv9xdvaxdvbxdvcxdvdxdvexdvfxdhdxdh2AVmpmp2v|jpeg2000:mjp2|png:png MNG |gif:gif |tiff:tiff|vc1:vc-1|cavs:avs2|avs3:avs3|dirac:drac|dnxhd:AVdnAVdh|prores:apchapcnapcsapcoap4hap4x|prores_raw:aprnaprh|hap:Hap1Hap5HapYHapAHapM|cfhd:CFHD|lcevc:lvc1|apv:apv1`.split(`|`)){let t=e.indexOf(`:`),n=e.slice(0,t);for(let r=t+1;r+4<=e.length;r+=4)J.set(e.slice(r,r+4),n)}return J}let Pe={32:`mpeg4`,33:`h264`,35:`hevc`,51:`vvc`,96:`mpeg2video`,97:`mpeg2video`,98:`mpeg2video`,99:`mpeg2video`,100:`mpeg2video`,101:`mpeg2video`,106:`mpeg1video`,108:`mjpeg`,109:`png`,110:`jpeg2000`,163:`vc1`,164:`dirac`,177:`vp9`};function Fe(e){return Ne().has(e)}function Ie(e,t=null,n=!1){return t!==null&&Pe[t]?Pe[t]:e===`dvh1`&&n?`hevc`:Ne().get(e)??`unknown`}let Le=2**53-1,Re=[65536,0,0,0,65536,0,0,0,1<<30];function ze(e){return{fileSize:e,brand:null,compatibleBrands:[],hasFtyp:!1,hasMvhd:!1,timescale:1,duration:0,matrix:Int32Array.from(Re),tracks:[],chapterTrackIds:new Set,hasMvex:!1,trex:new Map,moofCount:0,topLevel:[],truncated:!1,ffprobeMoofLimit:1/0,ffprobeReject:null,warnings:[]}}function Be(){return{id:0,enabled:!1,handler:``,timescale:0,hasMdhd:!1,mdhdDuration:0,matrix:Int32Array.from(Re),sampleEntry:``,originalFormat:null,stsdCount:0,width:0,height:0,esdsObjectType:null,hasHvcc:!1,sttsCounts:new Uint32Array,sttsDeltas:new Uint32Array,cttsCounts:null,cttsOffsets:null,dtsShift:0,sampleCount:null,sampleSize:0,overruns:[],edits:[],fragments:[],warnings:[],dv:null,stss:null,stsz:null,stz2:null,stsc:null,stco:null,co64:null}}let Ve=`no trex: sample defaults taken from tfhd`;function He(e){let t=0;for(let n=256;n<=2048;n<<=1)e&n&&(t+=4);return t}function Ue(e,t,n,r,i,a,o=i+t-8){if(t+8>n)return null;let s=ke(e,t+1),c=e.getUint32(t+4),l=r.trex.get(c),u=t+8,d=e=>u+e<=n,f=s&131072?i:a;if(s&1){if(!d(8))return null;f=q(e,u,`tfhd`,o),u+=8}s&2&&(u+=4);let p=l?l.duration:null;if(s&8){if(!d(4))return null;p=e.getUint32(u),u+=4}let m=l?l.size:0;if(s&16){if(!d(4))return null;m=e.getUint32(u)}return{flags:s,trackId:c,baseDataOffset:f,defaultDuration:p,defaultSize:m,trexMissing:!l}}function We(e,t,n,r,i,a,o,s){let c=ke(e,t+1),l=e.getUint32(t+4),u=t+8,d=i;c&1&&(d=r.baseDataOffset+e.getInt32(u),u+=4),c&4&&(u+=4);let f=He(c),p;f>0?p=Me(l,n-u,f,`trun`,o):(p=l,p>s&&(o.push(`trun count ${l} limited to ${s}`),p=s));let m=f>0&&p<l,h=!!(c&256);if(!h&&r.defaultDuration===null&&p>0)throw new W(`corrupt file: no sample duration for track ${r.trackId}`);let g=r.defaultDuration??0,_=h?new Uint32Array(p):null,v=c&2048?new Int32Array(p):null,y=!!(c&512),b=h?0:g*p,x=d,S=0,C=0;if(f>0)for(let t=0;t<p;t++){if(h){let n=e.getUint32(u);_[t]=n,b+=n,u+=4}let n=r.defaultSize;y&&(n=e.getUint32(u),u+=4),c&1024&&(u+=4),v&&(v[t]=e.getInt32(u),u+=4),x<a&&S++,C===t&&x+n<=a&&C++,x+=n}if(!y){let e=r.defaultSize,t=Math.max(0,a-d);S=e>0?Math.min(p,Math.ceil(t/e)):Math.min(p,t),C=e>0?Math.min(p,Math.floor(t/e)):S,x=d+e*p}return{fragment:{moofIndex:0,baseDts:null,count:p,durations:_,defaultDuration:g,cts:v,durationSum:b,present:S,complete:C,trexMissing:r.trexMissing,overrun:m},dataEnd:x}}function Ge(e,t,n,r,i,a){let o=n,s=!1,c=e=>{i.ffprobeReject||={moof:r,reason:e}},l=new Map;for(let e of i.tracks)l.has(e.id)||l.set(e.id,e);for(let u of K(e,t.start+t.headerSize,t.end,i.warnings)){if(u.type!==`traf`)continue;let t=null,d,f=null,p=0;for(let m of K(e,u.start+u.headerSize,u.end,i.warnings)){let u=m.start+m.headerSize;if(m.type===`tfhd`){if(t=Ue(e,u,m.end,i,n,o,n+m.start),!t)continue;t.trackId===0?c(`rejects this file: tfhd with track_ID 0`):t.trexMissing||(s=!0),p=t.baseDataOffset,d=l.get(t.trackId),d||i.warnings.push(`fragment for unknown track ${t.trackId}`)}else if(m.type===`tfdt`&&u+8<=m.end)f=e.getUint8(u)===1&&u+12<=m.end?q(e,u+4,`tfdt`,n+m.start):e.getUint32(u+4);else if(m.type===`trun`&&u+8<=m.end){if(s?(!t||t.trexMissing)&&c(`misreads this file: a traf without trex is read as another track`):c(`rejects this file: trun without a tfhd that has a trex`),!t||!d)continue;let n=d,{fragment:l,dataEnd:h}=We(e,u,m.end,t,p,i.fileSize,n.warnings,a);l.moofIndex=r,l.baseDts=f,f=null,p=h,o=h,l.trexMissing&&!n.warnings.includes(Ve)&&n.warnings.push(Ve),n.fragments.push(l)}}}}function Ke(e,t,n){let r=t.start+t.headerSize,i=r<t.end&&e.getUint8(r)===1;if(r+(i?32:24)>t.end)throw new W(`corrupt file: box 'sidx' at ${n} is truncated`);let a=r+12,o=i?q(e,a,`sidx`,n):e.getUint32(a),s=i?q(e,a+8,`sidx`,n):e.getUint32(a+4);a+=i?16:8;let c=e.getUint16(a+2);a+=4;let l=n+(t.end-t.start),u=l+s,d=0,f=!1,p=[];for(let n=0;n<c&&a+12<=t.end;n++,a+=12){let t=e.getUint32(a);t&2147483648&&(f=!0);let n=t&2147483647;p.push([u,n]),u+=n,d+=e.getUint32(a+4)}return{start:n,end:l,referenceId:e.getUint32(r+4),timescale:e.getUint32(r+8),earliestPts:o,firstOffset:s,coverageEnd:u,durationSum:d,subsegments:p,hierarchical:f}}function Y(e,t,n,r=0){return qe(K(e,t.start+t.headerSize+r,t.end,n.warnings),n,t.type)}function*qe(e,t,n){for(let r of e){if(r.truncated){if(t.strict)throw new W(`incomplete file: moov is truncated`);t.warnings.push(`'${r.type}' overruns '${n}'`)}yield r}}function X(e){return e.start+e.headerSize}function Je(e,t){let n=new Int32Array(9);for(let r=0;r<9;r++)n[r]=e.getInt32(t+r*4);return n}function Ye(e){return e>0&&e<=2147483647?e:1}function Z(e){return{start:X(e),end:e.end}}function Xe(e,t,n){let r=X(t);if(r+8>t.end)return;let i=e.getUint32(r+4),a=Me(i,t.end-r-8,8,`stts`,n.warnings);a<i&&n.overruns.push(`stts`);let o=new Uint32Array(a),s=new Uint32Array(a),c=!1;for(let t=0;t<a;t++)o[t]=e.getUint32(r+8+t*8),s[t]=e.getUint32(r+12+t*8),s[t]>4294487295&&(c=!0);c&&Ze(o,s,n.warnings),n.sttsCounts=o,n.sttsDeltas=s}function Ze(e,t,n){let r=0n,i=0n;for(let a=0;a<e.length;a++){let o=BigInt(e[a]),s=t[a];if(s>4294487295){n.push(`stts delta ${s} clipped to 1`);let e=s|0;s=1,i+=BigInt(e<0?e:1)*o}else i+=BigInt(s)*o;if(r+=BigInt(s)*o,r>i){let e=(r-i)/(o>0n?o:1n),t=BigInt(s)>e?e:BigInt(s-1>>>0);r-=t*o,s=Number(BigInt(s)-t&4294967295n)}t[a]=s}}function Qe(e,t,n){let r=X(t);if(r+8>t.end)return;let i=e.getUint32(r+4),a=Me(i,t.end-r-8,8,`ctts`,n.warnings);if(a<i&&n.overruns.push(`ctts`),a===0)return;let o=[],s=[],c=0;for(let t=0;t<a;t++){let n=e.getInt32(r+8+t*8),a=e.getInt32(r+12+t*8);n<=0||(o.push(n),s.push(a),t+2<i&&a<0&&(c=Math.max(c,a===-2147483648?2147483647:-a)))}n.cttsCounts=Uint32Array.from(o),n.cttsOffsets=Int32Array.from(s),n.dtsShift=c}function $e(e,t,n,r,i){let a=X(t);if(a+8>t.end)return;let o=e.getUint8(a),s=o===1?20:12,c=e.getUint32(a+4),l=t.end-a-8,u=c*s===l?c:Math.floor(l/s);if(u!==c&&n.warnings.push(`elst declares ${c} entries but its box holds ${u}`),u===0)return;n.edits.length&&(n.warnings.push(`duplicated elst: the last one is used`),n.edits=[]);let d=r.base+t.start;for(let t=0;t<u;t++){let r=a+8+t*s;if(o===1){let t=je(e,r+8,`elst`,d),a=e.getBigInt64(r)===-1n;a&&(n.warnings.push(`unknown elst duration: ${t===-1?`the empty edit is ignored`:`the edit lasts to the end`}`),i.ffprobeReject??={moof:-1,reason:`rejects this file: an elst duration of -1`}),n.edits.push({duration:a?t===-1?0:Le:q(e,r,`elst`,d),mediaTime:t,rate:e.getInt32(r+16)/65536})}else n.edits.push({duration:e.getUint32(r),mediaTime:e.getInt32(r+4),rate:e.getInt32(r+8)/65536})}}function et(e,t,n){let r=t+4,i=()=>{if(r+2>n)return null;let t=e.getUint8(r++),i=0;for(let t=0;t<4&&r<n;t++){let t=e.getUint8(r++);if(i=i*128+(t&127),!(t&128))break}return[t,i]},a=i();if(a&&a[0]===3){if(r+3>n)return null;let t=e.getUint8(r+2);r+=3,t&128&&(r+=2),t&64&&r<n&&(r+=1+e.getUint8(r)),t&32&&(r+=2),a=i()}return a&&a[0]===4&&r<n?e.getUint8(r):null}function tt(e,t,n,r){let i=X(t);if(i+8>t.end||(n.stsdCount=e.getUint32(i+4),n.stsdCount===0))return;let a;try{a=G(e,i+8,t.end)}catch(e){n.warnings.push(e.message);return}if(a&&(n.sampleEntry=a.type,!(n.handler===`soun`||a.start+86>a.end))){n.width=e.getUint16(a.start+32),n.height=e.getUint16(a.start+34);for(let t of K(e,a.start+86,a.end,r.warnings))if(t.type===`esds`)n.esdsObjectType=et(e,X(t),t.end);else if(t.type===`hvcC`)n.hasHvcc=!0;else if(t.type===`sinf`)for(let i of K(e,X(t),t.end,r.warnings))i.type===`frma`&&X(i)+4<=i.end&&(n.originalFormat=U(e,X(i)))}}function nt(e,t,n,r){n.dv=e;for(let i of Y(e,t,r)){let t=X(i);switch(i.type){case`stsd`:tt(e,i,n,r);break;case`stts`:Xe(e,i,n);break;case`ctts`:Qe(e,i,n);break;case`stsz`:case`stz2`:t+12<=i.end&&(n.sampleCount=e.getUint32(t+8),n.sampleSize=i.type===`stsz`?e.getUint32(t+4):0),i.type===`stsz`?n.stsz=Z(i):n.stz2=Z(i);break;case`stss`:n.stss=Z(i),t+8<=i.end&&e.getUint32(t+4)>Math.floor((i.end-t-8)/4)&&n.overruns.push(`stss`);break;case`stsc`:n.stsc=Z(i);break;case`stco`:n.stco=Z(i);break;case`co64`:n.co64=Z(i)}}}function rt(e,t,n,r){for(let i of Y(e,t,r)){let t=X(i);if(i.type===`mdhd`&&t+24<=i.end){let r=e.getUint8(t)===1;if(r&&t+32>i.end)continue;n.hasMdhd=!0;let a=e.getUint32(t+(r?20:12));if(n.timescale=Ye(a),n.timescale!==a&&n.warnings.push(`invalid mdhd timescale ${a}, using 1`),r){let r=e.getBigUint64(t+24);n.mdhdDuration=r===18446744073709551615n?0:Number(r)}else{let r=e.getUint32(t+16);n.mdhdDuration=r===4294967295?0:r}}else if(i.type===`hdlr`&&t+12<=i.end)n.handler=U(e,t+8);else if(i.type===`minf`)for(let t of Y(e,i,r))t.type===`stbl`&&nt(e,t,n,r)}}function it(e,t,n,r){let i=Be();for(let a of Y(e,t,r)){let t=X(a);if(a.type===`tkhd`&&t+84<=a.end){let n=e.getUint8(t)===1;if(n&&t+96>a.end)continue;i.enabled=(e.getUint8(t+3)&1)==1,i.id=e.getUint32(t+(n?20:12)),i.matrix=Je(e,t+(n?52:40))}else if(a.type===`edts`)for(let t of Y(e,a,r))t.type===`elst`&&$e(e,t,i,r,n);else if(a.type===`mdia`)rt(e,a,i,r);else if(a.type===`tref`){for(let t of Y(e,a,r))if(t.type===`chap`)for(let r=X(t);r+4<=t.end;r+=4)n.chapterTrackIds.add(e.getUint32(r))}}return i}function at(e,t,n,r,i=0){let a={strict:r,warnings:n.warnings,base:i};for(let r of Y(e,t,a)){let t=X(r);switch(r.type){case`mvhd`:{if(t+24>r.end)break;let i=e.getUint8(t)===1;if(i&&t+84>r.end)break;n.hasMvhd=!0,n.timescale=Ye(e.getUint32(t+(i?20:12))),n.duration=i?Number(e.getBigUint64(t+24)):e.getUint32(t+16),t+(i?84:72)<=r.end&&(n.matrix=Je(e,t+(i?48:36)));break}case`trak`:n.tracks.push(it(e,r,n,a));break;case`mvex`:n.hasMvex=!0;for(let t of Y(e,r,a)){let r=X(t);t.type===`trex`&&r+24<=t.end&&n.trex.set(e.getUint32(r+4),{duration:e.getUint32(r+12),size:e.getUint32(r+16)})}break;case`cmov`:throw new W(`unsupported: compressed movie header (cmov)`)}}}let ot=new Set([`moof`,`styp`,`sidx`,`ssix`,`emsg`,`prft`,`free`,`skip`,`uuid`]);function st(){return{windows:[],hints:[],next:0,mfraTried:!1}}function ct(e,t,n){for(let[r,i]of e.windows)if(t>=r&&t+n<=r+i.byteLength)return new DataView(i.buffer,i.byteOffset+t-r,n);return null}async function lt(e,t,n,r){for(;t.next<t.hints.length&&t.hints[t.next]<=n;)t.next++;let i=[];for(let n=t.next;n<t.hints.length&&i.length<8;n++)t.hints[n]<e.size&&i.push([t.hints[n],Math.min(r,e.size-t.hints[n])]);if(t.next+=i.length,!i.length)return;let a=await e.readMany(i,4);t.windows=i.map(([e],t)=>[e,new DataView(a[t].buffer,a[t].byteOffset,a[t].byteLength)]),t.windows.every(([,e])=>ut(e))||(t.hints=[],t.next=0)}function ut(e){return e.byteLength>=8&&e.getUint32(0)>=8&&ot.has(U(e,4))}function dt(e,t,n,r,i=2**53-1){for(let a of K(e,t,n)){let t=a.start+a.headerSize;if(a.type!==`tfra`||t+16>a.end)continue;let n=e.getUint8(t)===1,o=e.getUint32(t+8),s=(n?16:8)+(o>>4&3)+(o>>2&3)+(o&3)+3,c=Math.min(e.getUint32(t+12),Math.floor((a.end-t-16)/s));for(let a=0;a<c;a++){let o=t+16+a*s,c=n?e.getBigUint64(o+8):BigInt(e.getUint32(o+4));c>0n&&c<BigInt(i)&&r.add(Number(c))}}}async function ft(e){try{return await pt(e)}catch(t){if(e.signal?.aborted||t?.name===`AbortError`)throw t;return[]}}async function pt(e){let t=e.size,n=Math.min(t,65536);if(n<16)return[];let r=await e.view(t-n,n,0);if(U(r,n-12)!==`mfro`)return[];let i=r.getUint32(n-4);if(i<24||i>Math.min(t,16777216))return[];let a=i<=n?new DataView(r.buffer,r.byteOffset+n-i,i):await e.view(t-i,i,0),o;try{o=G(a,0,i)}catch{return[]}if(!o||o.type!==`mfra`)return[];let s=new Set;return dt(a,o.headerSize,o.end,s,t),[...s].sort((e,t)=>e-t)}m();function Q(e,t,n){if(!(n>0))return 0;let r=BigInt(Math.abs(e))*BigInt(t),i=BigInt(n),a=Number((r+i/2n)/i);return e<0?-a:a}function mt(e){let t=0,n=0;for(let r=0;r<e.sttsCounts.length;r++)t+=e.sttsCounts[r],n+=e.sttsCounts[r]*e.sttsDeltas[r];let r=0;for(let t of e.fragments)r+=t.count;return{moovSamples:t,moovDuration:n,fragmentSamples:r}}function ht(e,t,n){let r=0n,i=0n;if(n){for(let t=0;t<e.sttsCounts.length;t++)r+=BigInt(e.sttsCounts[t]),i+=BigInt(e.sttsCounts[t])*BigInt(e.sttsDeltas[t]);i<=0n&&(r=0n,i=0n)}for(let n of e.fragments)t(n.moofIndex,n.trexMissing)&&(r+=BigInt(n.count),i+=BigInt(n.durationSum));return[r,i]}function gt(e,t,n){return t<=0n||n<=0n?null:f(BigInt(e)*t,n,p)}function _t(e,t){let n=e.timescale,r=(e,n)=>e<t.ffprobeMoofLimit&&!n,[i,a]=ht(e,()=>!0,!0),[o,s]=ht(e,r,!0),c=e.overruns.includes(`stts`)||e.fragments.some(e=>e.overrun&&r(e.moofIndex,e.trexMissing))?null:gt(n,o,s);return{avg:gt(n,i,a),ffprobe:c?u(c):null}}function vt(e){let t=e.dv,n=e=>t&&e&&e.start+8<=e.end?t.getUint32(e.start+4):0,r=n(e.co64??e.stco),i=e.sttsCounts.length>0||e.overruns.includes(`stts`),a=e.sampleCount??0;return r>0&&(!i||n(e.stsc)===0||e.sampleSize===0&&a===0)||a>0&&r===0}function yt(e,t,n){let r=0,i=0,a=0,o=null,s=(e.cttsOffsets?.[0]??0)+n.moovDuration;for(let n of e.edits){let c=n.duration===Le?Math.max(0,s-n.mediaTime):Q(n.duration,e.timescale,t);i+=c,n.mediaTime===-1?o||(r+=c):(a++,o||={mediaTime:n.mediaTime,duration:c,rate:n.rate})}return{emptyBefore:r,firstMedia:o,editSum:i,mediaEdits:a}}function bt(e,t,n,r){let i=e.mdhdDuration;n.moovDuration>0&&(i=Math.min(i,n.moovDuration));let a=e.edits.length>0&&n.moovSamples>0;a&&(i=Math.min(i,r.editSum));let o=n.moovDuration,s=null,c=St(e,t);for(let t of e.fragments)t.baseDts!==null&&(o=t.baseDts),s===null&&t.count>0&&(s=o-c+(t.cts?t.cts[0]:0)),o+=t.durationSum,o>i&&(i=o);let l=xt(e,t);l!==null&&l>i&&(i=l);let u=null;return u=a?r.emptyBefore:n.moovSamples>0?e.cttsOffsets&&e.cttsOffsets.length?e.cttsOffsets[0]:0:s,{durationTs:i,startPts:u}}function xt(e,t){if(t.ffprobeMoofLimit===1/0)return null;let n=0,r=null;for(let i of t.topLevel){if(i.type===`moof`&&++n>t.ffprobeMoofLimit)break;let a=i.sidx;a&&!a.hierarchical&&a.referenceId===e.id&&a.timescale===e.timescale&&(r=a.earliestPts+a.durationSum)}return r}function St(e,t){let n=0,r=0,i=0;return e.edits.forEach((e,t)=>{t===0&&e.mediaTime===-1?(n=e.duration,i=1):t===i&&e.mediaTime>=0&&(r=e.mediaTime)}),!n&&!r?0:r-Q(n,e.timescale,t.timescale)}function Ct(e,t,n){let r=new Float64Array(e.length+1),i=new Float64Array(e.length),a=0,o=0;for(let s=0;s<e.length&&o<n;s++)e[s]<=0||(r[a]=o,i[a]=t[s],o+=Math.min(e[s],n-o),a++);return r[a]=o,{count:a,starts:r,values:i,total:o}}function wt(e){let t=e.starts,n=0;return r=>{if(r>=t[n]&&r<t[n+1])return n;let i=0,a=e.count-1;for(;i<a;){let e=Math.ceil((i+a)/2);t[e]<=r?i=e:a=e-1}return n=i,i}}function Tt(e,t){let n=e.stss;if(!n||!e.dv)return{all:!0,list:new Float64Array};let r=e.dv,i=n.start+8<=n.end?Math.min(r.getUint32(n.start+4),Math.floor((n.end-n.start-8)/4)):0;if(i===0)return{all:!1,list:Float64Array.of(0)};let a=+(r.getUint32(n.start+8)>0),o=new Float64Array(i),s=0,c=-1;for(let e=0;e<i;e++){let i=r.getUint32(n.start+8+e*4)-a;if(i<=c||i>=t)break;o[s++]=i,c=i}return{all:!1,list:o.subarray(0,s)}}function Et(e,t,n){if(n>=t)return-1;if(e.all)return n;let r=e.list,i=0,a=r.length;for(;i<a;){let e=Math.floor((i+a)/2);r[e]<n?i=e+1:a=e}return i<r.length?r[i]:-1}function Dt(e,t){if(t<0)return-1;if(e.all)return t;let n=e.list,r=0,i=n.length;for(;r<i;){let e=Math.floor((r+i)/2);n[e]<=t?r=e+1:i=e}return r>0?n[r-1]:-1}function Ot(e,t,n){let r=n;r<=0||e.len===0&&(e.first=t,e.last=t,e.len=1,r--,r===0)||((e.len>=2&&e.last!==e.first||r>=2&&t!==e.first)&&(e.bad=!0),e.last=t,e.len+=r)}function kt(e,t,n,r,i){let a=r,o=Math.min(i,t.total-r),s=0;for(;o>0&&!e.bad;){let r=n(a),i=Math.min(t.starts[r+1]-a,o);Ot(e,t.values[r],i),a+=i,o-=i,s++}return s}function At(e,t){return e.bad||e.len===0||!(e.first>0)?null:f(t,e.first,p)}function jt(e,t,n,r,i){let a=Math.min(n,e.sampleCount??0);if(a<=0||e.sttsCounts.length===0||e.overruns.length>0)return null;let o=e.timescale,s=Ct(e.sttsCounts,e.sttsDeltas,a),c=wt(s),l={len:0,first:0,last:0,bad:!1};if(e.edits.length===0)return kt(l,s,c,0,a),At(l,o);if(!e.edits.some(e=>e.mediaTime!==-1))return null;let u=!0;for(let e=1;e<s.count&&u;e++)u=s.values[e]===s.values[0];if(u)return s.values[0]>0?f(o,s.values[0],p):null;let d=Math.min(r,2e6),m=0,h=!1,g=e=>(m+=e,m>d&&(h=!0),h),_=new Float64Array(s.count+1);for(let e=0;e<s.count;e++)_[e+1]=_[e]+(s.starts[e+1]-s.starts[e])*s.values[e];let v=e=>{let t=c(e);return _[t]+(e-s.starts[t])*s.values[t]},y=e=>s.values[c(e)],b=!!e.cttsCounts&&e.cttsCounts.length>0,x=b?Ct(e.cttsCounts,e.cttsOffsets,a):null,S=x?wt(x):null,C=e=>x&&e<x.total?x.values[S(e)]:0,w=Tt(e,a),T=e=>Et(w,a,e),E=e=>Dt(w,e),D=e.dtsShift,ee=(e,t)=>{let n=0,r=t;for(;n<r;){let t=Math.floor((n+r)/2);v(t)>=e?r=t:n=t+1}return n},O=(e,t)=>{let n=D>0?e-D:e,r=-1,i=a;for(v(a-1)-D<n&&(r=a-1);i-r>1;){let e=Math.floor((r+i)/2),t=v(e)-D;t>=n&&(i=e),t<=n&&(r=e)}let o=t?r:E(r);if(o>0){let e=ee(v(o),o);if(e<o){if(t)o=e;else{let t=T(e);t>=0&&t<o&&(o=t)}}}if(b&&o>=0){let e=E(o);for(;e>=0&&!g(1)&&v(e)-D+C(e)>n;)e=E(e-1);o=e}return o},k=0,A=!1;for(let n of e.edits){let r=n.mediaTime;if(!A&&r===-1)continue;if(A=!0,g(64))break;let i=Q(n.duration,e.timescale,t.timescale),o=O(r,!1);if(o<0&&!h&&(o=O(r,!0)),h)break;o<0&&(o=0,k=0),b&&(k=o);let u=-1;if(b){let e=!1;for(let t=T(o);t>=0&&!g(1);t=T(t+1)){let n=t+1<a?y(t):i;if(v(t)+C(t)+n>=i+r){if(e){u=t;break}e=!0}}if(h)break}else{let e=o,t=a;for(;e<t;){let n=Math.floor((e+t)/2);(n+1<a?v(n+1):v(a-1)+i)>=i+r?t=n:e=n+1}e<a&&(u=T(e))}let d=u<0?a-o:u-o+1,f=Math.min(d,a-k);if(f>0&&(g(kt(l,s,c,k,f)),k+=f),l.bad)return null;if(h)break}return h?(i?.push(`r_frame_rate not reproduced: edit list walk limit reached`),null):At(l,o)}function Mt(e,t,n){let r=[],i=[],a=n;for(let n=0;n<e.length&&a>0;n++){let o=Math.min(e[n],a);o<=0||(r.push(o),i.push(t[n]),a-=o)}return{counts:r,values:i}}function Nt(e,t){let n=[];if(t>0){let r=Mt(e.sttsCounts,e.sttsDeltas,t),i=e.cttsCounts&&e.cttsOffsets?Mt(e.cttsCounts,e.cttsOffsets,t):null;n.push({durations:{counts:r.counts,deltas:r.values},cts:i?{counts:i.counts,offsets:i.values}:null})}for(let t of e.fragments){let e=t.complete;n.push({baseDts:t.baseDts,durations:t.durations?t.durations.subarray(0,e):{counts:[e],deltas:[t.defaultDuration]},cts:t.cts?t.cts.subarray(0,e):null})}return n}function Pt(e,t,n){let r=t.firstMedia;if(!r)return e.edits.length&&n.push(`edit list has no media edit`),null;t.mediaEdits>1&&n.push(`edit list has ${t.mediaEdits} media edits, only the first is applied`),r.rate!==1&&n.push(`edit rate ${r.rate} is not applied`);let i=e.fragments.length>0||r.duration<=0?r.mediaTime:r.mediaTime+r.duration;return{start:r.mediaTime,end:i}}function Ft(e,t,n){let r=e.dv,i=e.co64??e.stco,a=e.stsz??e.stz2;if(!r||!i||!a||!e.stsc||i.start+8>i.end||e.stsc.start+8>e.stsc.end||a.start+12>a.end)return null;let o=!!e.co64,s=Math.min(r.getUint32(i.start+4),Math.floor((i.end-i.start-8)/(o?8:4))),c=Math.min(r.getUint32(e.stsc.start+4),Math.floor((e.stsc.end-e.stsc.start-8)/12)),l=e.stsz?r.getUint32(a.start+4):0,u=e.stz2?r.getUint8(a.start+7):32,d=Math.min(r.getUint32(a.start+8),n),f=a.end-a.start-12,p=e=>{if(l)return l;let t=a.start+12;if(u===32)return(e+1)*4<=f?r.getUint32(t+e*4):0;if(u===16)return(e+1)*2<=f?r.getUint16(t+e*2):0;if(u===8)return e<f?r.getUint8(t+e):0;let n=e>>1<f?r.getUint8(t+(e>>1)):0;return e&1?n&15:n>>4},m=0,h=0,g=0,_=0;for(let n=0;n<s&&g<d;n++){for(;_+1<c&&r.getUint32(e.stsc.start+8+(_+1)*12)<=n+1;)_++;let a=c?r.getUint32(e.stsc.start+12+_*12):0,s=o?Number(r.getBigUint64(i.start+8+n*8)):r.getUint32(i.start+8+n*4);for(let e=0;e<a&&g<d;e++,g++){let e=p(g);s<t&&m++,s+e<=t&&h===g&&h++,s+=e}}return{present:m,complete:h}}function It(e,t){let n=[16n,16n,30n],r=new Int32Array(9);for(let i=0;i<3;i++)for(let a=0;a<3;a++){let o=0n;for(let r=0;r<3;r++)o+=BigInt(e[i*3+r])*BigInt(t[r*3+a])>>n[r];r[i*3+a]=Number(BigInt.asIntN(32,o))}if(r[0]===65536&&r[4]===65536&&r[8]===1<<30&&!r[1]&&!r[2]&&!r[3]&&!r[5]&&!r[6]&&!r[7])return 0;let i=r[0]/65536,a=r[1]/65536,o=Math.hypot(i,r[3]/65536),s=Math.hypot(a,r[4]/65536);return o===0||s===0?0:Math.trunc(-(Math.atan2(a/s,i/o)*180/Math.PI))||0}Ee(),m();let Lt=65536;function Rt(e,t){return t.signal?.aborted===!0||e?.name===`AbortError`}function zt(e){return e.brand===`qt `||!e.hasFtyp&&e.topLevel.length>0?`mov`:`mp4`}async function Bt(e,t,n){let r=e.size,i=t.start+t.size>r;if(!i&&t.size>268435456)throw new W(`unsupported: moov larger than 256 MiB`);let a=i?Math.min(r-t.start,16777216):t.size,o=await e.view(t.start,a,0),s=G(o,0,o.byteLength);if(!s)throw new W(`incomplete file: moov is truncated`);at(o,s,n,i,t.start),i&&n.warnings.push(`moov size exceeds the file; parsed what is there`)}async function Vt(e,t,n){let r=e.size,i=0,a=t.readAhead.head,o=!1,s=0,c=!1,l=st(),u=async(t,n,r)=>ct(l,t,n)??e.view(t,n,r);for(;i+8<=r;){if(e.checkAbort(),++s>4e6){n.warnings.push(`too many top-level boxes`);break}let d=c&&!o&&r-i<=16777216?r-i:a,f=await u(i,Math.min(16,r-i),d),p;try{p=G(f,0,r-i,i)}catch(e){if(!o)throw e;n.warnings.push(`ignored trailing data at ${i}: ${e.message}`);break}if(!p)break;let m={...p,start:i,end:Math.min(i+p.size,r)},h=i+p.size,g=p.truncated&&o&&m.type!==`mdat`&&m.type!==`moof`;p.truncated&&(n.truncated=!0,n.warnings.push(g?`ignored trailing data at ${i}: not a box`:`'${m.type}' at ${i} is truncated`));let _={type:m.type,start:i,end:m.end,sidx:null};if(n.topLevel.push(_),g)break;if(m.type===`ftyp`){let t=await e.view(i,Math.min(m.size,1024)),r=m.headerSize;if(r+4<=t.byteLength){n.hasFtyp=!0,n.brand=String.fromCharCode(t.getUint8(r),t.getUint8(r+1),t.getUint8(r+2),t.getUint8(r+3));for(let e=r+8;e+4<=t.byteLength;e+=4)n.compatibleBrands.push(String.fromCharCode(t.getUint8(e),t.getUint8(e+1),t.getUint8(e+2),t.getUint8(e+3)))}}else if(m.type===`moov`)o?n.warnings.push(`ignored a second moov at ${i}`):(await Bt(e,m,n),o=!0);else if(m.type===`moof`){if(!o)throw new W(`corrupt file: movie fragment (moof) before moov`);if(m.size>67108864)throw new W(`corrupt file: moof larger than 64 MiB at ${i}`);let s=Math.min(m.size+16,r-i),c=await u(i,s,0),d=G(c,0,Math.min(m.size,c.byteLength));d&&Ge(c,d,i,n.moofCount,n,t.maxExpandedSamples),n.moofCount++;let f=0;try{let e=G(c,m.size,c.byteLength);e&&e.type===`mdat`&&(f=e.size)}catch{f=0}a=f<=Lt?t.readAhead.fragment:Math.min(65536,Math.max(1024,2*m.size+64)),f>Lt&&(!l.hints.length&&!l.mfraTried&&(r-i)/(m.size+f)>16&&(l.mfraTried=!0,l.hints=await ft(e)),l.next<l.hints.length&&!ct(l,i+m.size+f,16)&&await lt(e,l,i,a)),t.onProgress&&n.moofCount%64==0&&t.onProgress({phase:`fragments`,done:i,total:r})}else if(m.type===`sidx`&&!p.truncated){let e=await u(i,m.size,0),t=G(e,0,e.byteLength);t&&(_.sidx=Ke(e,t,i)),_.sidx&&_.sidx.subsegments.length>1&&!l.hints.length&&(l.hints=_.sidx.subsegments.map(([e])=>e))}else if(m.type===`mfra`)break;c=m.type===`mdat`,i=h}if(!o)throw new W(`incomplete file: no moov`)}async function Ht(e,t){let n=e.size,r=new Set(t.tracks.map(e=>e.id)),i=!1,a=!1,o=!1,s=null,c=0;for(let l of t.topLevel){if(l.type===`moof`)c++;else if(l.type===`moov`)i=!0;else if(l.type===`mdat`&&l.end-l.start>8)a=!0;else if(l.type===`sidx`&&i&&l.sidx&&!l.sidx.hierarchical&&r.has(l.sidx.referenceId)){let t=l.sidx.coverageEnd===n;!t&&n>=4&&(s===null&&(s=(await e.view(n-4,4,0)).getUint32(0)),t=l.sidx.coverageEnd===n-s),t&&l.sidx.firstOffset===0&&(o=!0)}if(i&&a&&(o||l.end===n)){t.ffprobeMoofLimit=c;return}}}function Ut(e,t){return t.chapterTrackIds.has(e.id)?!1:e.handler===`vide`||e.handler!==`soun`&&Fe(e.originalFormat??e.sampleEntry)}function Wt(e,t,n,r){let a=i(r.reportedId),o=a.warnings;r.reportedId!==e.id&&o.push(`duplicate track_ID ${e.id}: reported as ${r.reportedId}`),o.push(...e.warnings);let s=e.handler===`auxv`;s&&o.push(`auxiliary video track (handler 'auxv')`);let c=vt(e);c&&o.push(`missing mandatory sample tables: ffprobe ignores the samples and timing of this track`);let l=e.hasMdhd?e.timescale:t.timescale;e.hasMdhd||(o.push(`no mdhd: using the movie timescale`),e.timescale=l),a.fourccOrCodecId=e.sampleEntry,a.codecName=Ie(e.originalFormat??e.sampleEntry,e.esdsObjectType,e.hasHvcc),e.originalFormat&&o.push(`encrypted: ${e.sampleEntry} of ${e.originalFormat}`),e.stsdCount>1&&o.push(`${e.stsdCount} sample descriptions, first used`),a.width=e.width,a.height=e.height,a.rotation=It(e.matrix,t.matrix),a.timescale=l;let d=mt(e),f=t.truncated,p=0;for(let t of e.fragments)p+=t.present;let m=d.moovSamples+d.fragmentSamples,h=d.moovSamples+p;a.frames=h,a.isStill=h<=1,d.moovSamples>0&&e.fragments.length>0&&o.push(`hybrid fragmented file: moov holds ${d.moovSamples} of ${m} samples`),h<m&&o.push(`truncated: ${m-h} of ${m} samples missing`);let g=_t(e,t);a.avgFps=g.avg,a.avgFpsFfprobe=r.ffprobeFails?null:g.ffprobe,a.avgFpsFfprobe!==null&&a.avgFpsFfprobe!==u(g.avg)&&o.push(`ffprobe reads part of the fragments: avg_frame_rate ${a.avgFpsFfprobe}`),g.ffprobe===null&&!r.ffprobeFails&&m>0&&o.push(`avg_frame_rate of ffprobe is not reproduced: its header values are incomplete or overrun a box`);let _=r.ffprobeFails||c?null:jt(e,t,d.moovSamples,n.maxExpandedSamples,o);a.rFpsFfprobe=_?u(_):null;let v=yt(e,t.timescale,d);if(!c){let n=bt(e,t,d,v);a.durationSec=n.durationTs/l,a.startSec=n.startPts===null?null:n.startPts/l}let y=d.moovSamples;if(e.sampleCount!==null&&e.sampleCount<y&&(o.push(`stts describes ${y} samples but the sample size table holds ${e.sampleCount}`),y=e.sampleCount),c)return a.presentedFrames=0,Gt(a),{result:a,enabled:e.enabled,auxiliary:s};if(f&&y>0){let n=Ft(e,t.fileSize,d.moovSamples);n&&n.complete<y&&(o.push(`truncated: ${n.complete} of ${y} samples complete`),y=n.complete)}let b=Pt(e,v,o);b&&!e.cttsCounts&&!e.fragments.length&&b.start<=0&&(b.end<=b.start||b.end>=d.moovDuration)&&(b=null);let x=N({segments:Nt(e,y),timescale:l,editWindow:b,maxExpandedSamples:n.maxExpandedSamples});return o.push(...x.warnings),a.presentedFrames=x.presentedFrames,a.minFps=x.minFps,a.maxFps=x.maxFps,a.isVfr=x.isVfr,a.vfrRatio=x.vfrRatio,a.distinctDeltas=x.distinctDeltas,a.duplicateTimestamps=x.duplicateTimestamps,a.nominalFps=x.nominalFps,a.dominantFps=x.dominantFps,a.timestampsQuantized=x.timestampsQuantized,x.presentedAvgFps&&(a.avgFps=x.presentedAvgFps),a.duplicateTimestamps>0&&o.push(`${a.duplicateTimestamps} duplicate timestamps`),Gt(a),x.presentedAvgFps&&(a.provenance.avgFps=`exact`),{result:a,enabled:e.enabled,auxiliary:s,profile:x.profile}}function Gt(e){let t=e.provenance;for(let e of[`codec`,`dimensions`,`rotation`,`frames`,`avgFps`])t[e]=`header`;e.durationSec!==null&&(t.durationSec=`header`),e.startSec!==null&&(t.startSec=`header`),e.presentedFrames!==null&&(t.presentedFrames=`exact`),e.isVfr!==null&&(t.minFps=`exact`,t.maxFps=`exact`,t.isVfr=`exact`,t.duplicateTimestamps=`exact`),e.nominalFps&&(t.nominalFps=`exact`),e.dominantFps&&(t.dominantFps=`exact`)}function Kt(e){let t=null,n=e=>(e.result.frames??0)>1?e.auxiliary?.5:e.enabled?2:1:0;for(let r of e)(!t||n(r)>n(t)||n(r)===n(t)&&(r.result.frames??0)>(t.result.frames??0))&&(t=r);return t?t.result.trackId:null}function qt(e,t){let n=2**53-1,r=n,i=n,a=-n,o=-n,s=-n,c=-n;for(let n of e.tracks){if(!n.hasMdhd)continue;let l=t.has(n)||n.handler===`soun`;if(vt(n)){let e=Q(n.mdhdDuration,1e6,9e4);l?s=Math.max(s,e):c=Math.max(c,e);continue}let u=mt(n),d=bt(n,e,u,yt(n,e.timescale,u)),f=Q(d.durationTs,1e6,n.timescale);if(d.startPts!==null){let e=Q(d.startPts,1e6,n.timescale);l?(r=Math.min(r,e),a=Math.max(a,e+f)):(i=Math.min(i,e),o=Math.max(o,e+f))}l?s=Math.max(s,f):c=Math.max(c,f)}return(r===n||r>i&&r-i<1e6)&&(r=i),(a===-n||a<o&&o-a<1e6)&&(a=o),(s===-n||s<c&&c-s<1e6)&&(s=c),r!==n&&a!==-n&&a>=r&&(s=Math.max(s,a-r)),s>0?s/1e6:null}function Jt(e){let t=new Map,n=new Set,r=e.reduce((e,t)=>Math.max(e,t.id),0)+1;for(let i of e)n.has(i.id)?t.set(i,r++):(n.add(i.id),t.set(i,i.id));return t}async function Yt(e,t){let n=ze(e.size),i=t=>{if(Rt(t,e))throw t;let i=t instanceof Error?t.message:String(t),a=r(zt(n),t instanceof W||i.startsWith(`file read failed`)?i:`corrupt file: ${i}`);return a.brand=n.brand,a.warnings=n.warnings,{analysis:a,movie:n}};try{await Vt(e,t,n),await Ht(e,n);let i=r(zt(n));i.brand=n.brand,i.scan=`exact`,i.warnings=n.warnings;let a=n.ffprobeReject,o=a!==null&&a.moof<n.ffprobeMoofLimit;o&&n.warnings.push(`ffprobe 8.1.1 ${a.reason}`);let s=Jt(n.tracks);[...s].some(([e,t])=>e.id!==t)&&n.warnings.push(`duplicate track_ID values`);let c=n.tracks.filter(e=>Ut(e,n)),l=c.map(e=>Wt(e,n,t,{reportedId:s.get(e)??e.id,ffprobeFails:o}));for(let e of l)e.result.rateProfile=await ce(e.profile??null);return i.videoTracks=l.map(e=>e.result),i.audioTrackCount=n.tracks.filter(e=>e.handler===`soun`).length,i.primaryTrackId=Kt(l),i.formatDurationSec=qt(n,new Set(c)),{analysis:i,movie:n}}catch(e){return i(e)}}async function Xt(e,t){return(await Yt(e,t)).analysis}let Zt=new Set([`ftyp`,`moov`,`mdat`,`free`,`skip`,`wide`,`pnot`,`uuid`,`moof`,`styp`,`sidx`]),Qt=[26,69,223,163],$t=[{bytes:[137,80,78,71,13,10,26,10],offset:0,label:`PNG image`},{bytes:[255,216,255],offset:0,label:`JPEG image`},{bytes:[71,73,70,56],offset:0,label:`GIF image`},{bytes:[82,73,70,70],offset:0,label:`RIFF file (AVI/WAV/WebP)`},{bytes:[79,103,103,83],offset:0,label:`Ogg file`},{bytes:[70,76,86,1],offset:0,label:`FLV file`},{bytes:[0,0,1,186],offset:0,label:`MPEG program stream`},{bytes:[37,80,68,70],offset:0,label:`PDF document`},{bytes:[80,75,3,4],offset:0,label:`ZIP archive`},{bytes:[73,68,51],offset:0,label:`MP3 file`}];function en(e,t,n){if(e.length<n+t.length)return!1;for(let r=0;r<t.length;r++)if(e[n+r]!==t[r])return!1;return!0}function tn(e){for(let t=4;t<8;t++){let n=e[t];if(n<32||n>126)return!1}return!0}function nn(e){let t=Math.min(e.length,512);if(t===0)return!1;for(let n=0;n<t;n++){let t=e[n];if(t!==9&&t!==10&&t!==13&&(t<32||t===127))return!1}return!0}function rn(e){for(let t of $t)if(en(e,t.bytes,t.offset))return t.label;return e.length>=188&&e[0]===71&&e[188]===71?`MPEG transport stream`:nn(e)?`text file`:`no known signature`}function an(e){if(e.length===0)return{kind:`unknown`,reason:`empty file`};if(en(e,Qt,0))return{kind:`matroska`,reason:`EBML header 1A45DFA3`};if(e.length>=8&&tn(e)){let t=String.fromCharCode(e[4],e[5],e[6],e[7]);if(Zt.has(t)){let n=e[0]*16777216+e[1]*65536+e[2]*256+e[3];if(n===0)return{kind:`isobmff`,reason:`top-level '${t}' box running to end of file`};if(n>=8)return{kind:`isobmff`,reason:`top-level '${t}' box`};if(n===1){if(e.length<16)return{kind:`unknown`,reason:`'${t}' box with a truncated 64-bit size`};let n=0;for(let t=8;t<16;t++)n=n*256+e[t];if(n>=16)return{kind:`isobmff`,reason:`top-level '${t}' box with 64-bit size`}}return{kind:`unknown`,reason:`'${t}' box with invalid size ${n}`}}}return e.length<8?{kind:`unknown`,reason:`too small (${e.length} bytes)`}:{kind:`unknown`,reason:rn(e)}}async function on(e){let{kind:t}=an(new Uint8Array(await e.slice(0,Math.min(1024,e.size)).arrayBuffer()));return t===`unknown`?null:t}y();function sn(e,t){let{perReadMs:n,bytesPerMs:r}=t.costModel,i=t.readAhead.head;return e<Math.max(i,Math.min(i+n*r,1048576))?e:i}function cn(e){return e?.name===`AbortError`}function ln(e){return e instanceof Error?e.message||e.name:String(e)}function un(e,t){e.container=t.container,e.brand=t.brand,e.formatDurationSec=t.formatDurationSec,e.scan=t.scan,e.videoTracks=t.videoTracks,e.audioTrackCount=t.audioTrackCount,e.primaryTrackId=t.primaryTrackId,e.error=t.error,e.warnings=t.warnings}async function dn(e,t,n,i){let a=performance.now(),o=g(n);De(o.signal);let s={name:t,size:e.size,...r(`unknown`),io:{reads:0,bytesRead:0,ms:0},engine:`own`},c=null,l=0;try{if(c=new Oe(e,{headWindow:o.readAhead.head,signal:o.signal}),c.size===0)s.error=`not a recognised container: empty file`;else{let e=an(await c.bytes(0,Math.min(1024,c.size),sn(c.size,o)));if(e.kind===`unknown`)s.error=`not a recognised container: ${e.reason}`;else{s.container=e.kind===`isobmff`?`mp4`:`matroska`;let t=performance.now(),n=await i(e.kind);l=performance.now()-t,un(s,await n(c,o))}}}catch(e){if(o.signal?.aborted||cn(e))throw e;s.error=ln(e)}return c&&(s.io.reads=c.reads,s.io.bytesRead=c.bytesFetched),s.io.ms=performance.now()-a-l,s}let $=(e,t)=>Object.assign(Error(e),{code:t}),fn=e=>e===`isobmff`||e===`matroska`;function pn(e){let t=self,n=new Map,r=new Map,i=e=>t.postMessage({v:1,...e}),a=t=>{let r=n.get(t);if(!r){let i=Object.hasOwn(e,t)?e[t]:void 0;if(!i)return Promise.reject($(`unknown engine ${t}`,`unknown-engine`));r=(typeof i==`function`?Promise.all([i(),Promise.resolve().then(()=>(Ee(),O))]).then(([e])=>e):Promise.resolve(i)).catch(e=>{throw n.delete(t),e}),n.set(t,r)}return r},o=(e,t,n=!1,r=!1)=>{let a=t?.code,o=a===`unknown-engine`||a===`protocol`;i({type:`error`,id:e,message:ln(t),aborted:n||cn(t),...o?{code:a}:r&&{reason:`load`}})},s=async e=>{let t=new AbortController;r.set(e.id,t);let n=0,s=!0;try{if(!(e.file instanceof Blob))throw $(`malformed analyze request`,`protocol`);let r=await a(e.engine);if(s=!1,r.containers!==`any`){let t=await on(e.file);if(!t||!r.containers.includes(t))return i({type:`skipped`,id:e.id,reason:`unsupported-container`,family:t})}let o=await r.run(e.file,e.name,{...e.options,signal:t.signal,onProgress:t=>{let r=performance.now();r-n<50||(n=r,i({type:`progress`,id:e.id,progress:t}))}});i({type:`result`,id:e.id,result:o})}catch(n){o(e.id,n,t.signal.aborted,s)}finally{r.delete(e.id)}},c=async e=>{try{if(![e.engines,e.containers].every(Array.isArray)||!e.containers.every(fn))throw $(`malformed warm request`,`protocol`);await Promise.all(e.engines.map(async t=>(await a(t)).warm?.(e.containers))),i({type:`warmed`,id:e.id})}catch(t){o(e.id,t,!1,!0)}};t.onmessage=({data:e})=>{if(e?.v!==1)return o(e?.id??0,$(`unsupported protocol version ${e?.v}`,`protocol`));if(e.type===`cancel`)r.get(e.id)?.abort();else if(e.type===`analyze`)s(e);else if(e.type===`warm`)c(e);else{let t=e;o(t.id,$(`unknown request type ${t.type}`,`protocol`))}}}let mn={isobmff:`ISO BMFF`,matroska:`Matroska`},hn=(e,t)=>`the own ${mn[e]} worker does not read ${mn[t]}`;function gn(e,t){return{containers:`any`,run:(n,r,i)=>dn(n,r,i,n=>{if(n!==e)throw Error(hn(e,n));return t})}}pn({own:gn(`isobmff`,Xt)})})();
1
+ (function(){var e=Object.defineProperty,t=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},n=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r};function r(e,t=null){return{container:e,brand:null,formatDurationSec:null,scan:null,videoTracks:[],audioTrackCount:0,primaryTrackId:null,error:t,warnings:[]}}function i(e){return{trackId:e,fourccOrCodecId:``,codecName:``,width:0,height:0,rotation:0,timescale:0,frames:null,presentedFrames:null,durationSec:null,startSec:null,avgFps:null,avgFpsFfprobe:null,rFpsFfprobe:null,nominalFps:null,dominantFps:null,minFps:null,maxFps:null,isVfr:null,vfrRatio:0,distinctDeltas:0,duplicateTimestamps:0,timestampsQuantized:!1,isStill:!1,rateProfile:null,medianFrameInterval:null,provenance:{},warnings:[]}}function a(e){return e<0n?-e:e}function o(e,t){for(;t!==0n;){let n=e%t;e=t,t=n}return e}function s(e,t){if(typeof e==`bigint`)return e;if(!Number.isSafeInteger(e))throw RangeError(`${t} must be a safe integer, got ${e}`);return BigInt(e)}function c(e,t,n=p){let r=s(e,`num`),i=s(t,`den`),c=s(n,`max`),l=0n,u=1n,d=1n,f=0n,m=r<0n!=i<0n,h=o(a(r),a(i));for(h!==0n&&(r=a(r)/h,i=a(i)/h),r<=c&&i<=c&&(d=r,f=i,i=0n);i!==0n;){let e=r/i,t=r-i*e,n=e*d+l,a=e*f+u;if(n>c||a>c){if(d!==0n&&(e=(c-l)/d),f!==0n){let t=(c-u)/f;t<e&&(e=t)}i*(2n*e*f+u)>r*f&&(d=e*d+l,f=e*f+u);break}l=d,u=f,d=n,f=a,r=i,i=t}let g=Number(d);return{num:m?-g:g,den:Number(f),exact:i===0n}}function l(e){return e.den===0?0:e.num/e.den}function u(e){return e?`${e.num}/${e.den}`:`0/0`}function d(e,t){return{num:e,den:t,value:l({num:e,den:t})}}function f(e,t,n=p){let r=c(e,t,n);return d(r.num,r.den)}var p,m=t((()=>{p=2147483647}));function h(e,t){let n={...e};if(!t)return n;for(let e of Object.keys(t)){let r=t[e];r!==void 0&&(n[e]=r)}return n}function g(e={}){return{...e,signal:e.signal??null,matroskaMode:e.matroskaMode??`auto`,exactBudgetMs:e.exactBudgetMs??150,readAhead:h(_,e.readAhead),costModel:h(v,e.costModel),maxExpandedSamples:e.maxExpandedSamples??5e6,onProgress:e.onProgress??null}}var _,v,y=t((()=>{_={head:65536,fragment:1048576,matroskaScan:1048576,tail:262144},v={perReadMs:.8,bytesPerMs:5e5,perBlockMs:2e-4}})),b=n({CUSUM_ALARM_PERIODS:()=>2,FREEZE_FACTOR:()=>4,FREEZE_MIN_SEC:()=>Te,MAX_ANOMALIES:()=>50,MAX_BUCKETS:()=>120,MAX_SEGMENTS:()=>50,MIN_SEGMENT_FRAMES:()=>5,MIN_SEGMENT_SEC:()=>S,UNEVEN_DOMINANT_SHARE:()=>C,rateProfile:()=>D});function x(e,t,n){e.t0=Math.min(e.t0,t.t0),e.t1=Math.max(e.t1,t.t1),e.frames+=t.frames,n?(e.n+=t.n,e.sum+=t.sum,e.ex+=t.ex):e.ex+=t.t1-t.t0}var S,C,w,T,E,D,ee=t((()=>{De(),S=.5,C=.8,w=1+Ce,T=e=>String(+e.toPrecision(4)),E=e=>({t0:e,t1:e,n:0,sum:0,frames:0,ex:0,d:0,kind:`steady`}),D=(e,t,n,r)=>{let i=t,a=Te*i,o=e=>i*e.n/e.sum,s=e=>e.n>=5&&e.t1-e.t0>=.5*i,c=[],l=e=>{let t=c[c.length-1];s(e)?c.push(e):t?.kind===`short`?x(t,e,!0):c.push({...e,kind:`short`})},u=E(0),d=E(0),f=E(0),p=0,m=0,h=0,g=0,_=0,v=!1,y=()=>{u.t1=p,v?c.push({...u,kind:`hold`}):l(u),u=E(p),v=!1,g=_=0},b=Math.min(120,Math.floor(n/2)),S=r/b,C=new Float64Array(b),D=(e,t)=>{u.n+=e,u.sum+=e*t,u.frames+=e,p+=e*t},ee=(e,t)=>{let n=e;if(t<=0)u.frames+=n,h+=n;else{for(let e=p,r=e+n*t,i=Math.floor(e/S);e<r&&i<b;i++){let n=Math.min(r,(i+1)*S);n>e&&(C[i]+=(n-e)/t),e=Math.max(e,n)}for(;n>0;){let e=u.sum/u.n;if(u.n&&t>=Math.max(a,4*e)){y(),v=!0,D(1,t),n--;continue}if(v&&Math.abs(t-e)>.075*e&&y(),v=!1,!u.n){D(n,t);return}let r=t-e,i=we*e,o=2*e,s=Math.abs(r)>i,c=s?1:n;if(s&&(r>0?!g||r-i>o:!_)){let e={...u,t1:p,d:t};r>0?d=e:f=e}if(g=Math.max(0,g+c*(r-i)),_=Math.max(0,_-c*(r+i)),D(c,t),n-=c,g>o||_>o){let e=g>o?d:f,t=u.n-e.n-1;t>0&&Math.abs(Math.log(e.d*e.n/e.sum))<Math.abs(Math.log(e.d*t/(u.sum-e.sum-e.d)))&&(e.t1+=e.d,e.n++,e.sum+=e.d,e.frames++),u.t0=e.t1,u.n-=e.n,u.sum-=e.sum,u.frames-=e.frames,l(e),g=_=0}}}},O=0,k=0;if(e((e,t)=>{e>0&&(m+=e,O&&t!==k&&(ee(O,k),O=0),O+=e,k=t)}),O&&ee(O,k),!(p>0))return null;u.n?y():c[c.length-1].frames+=u.frames;let A=[],te=(e,t,n,r,a=t.t1-t.t0)=>{A.push({kind:e,atSec:t.t0/i,durationSec:a/i,fromFps:n,toFps:r})},j=[],ne=(e,t)=>e?Math.abs(Math.log(o(e)/t)):1/0;c.forEach((e,t)=>{let n=j[j.length-1];if(e.kind===`short`||e.kind===`hold`){let r=o(e),i=c[t+1]?.kind===`steady`?c[t+1]:void 0,l=ne(n,r)<=ne(i,r)?n:i;if(e.kind=s(e)?`variable`:`steady`,e.kind===`steady`&&l){let t=o(l),n=e.sum>=e.n*Math.max(a,4*l.sum/l.n)?`freeze`:r*w<t?`gap`:r>t*w?`burst`:null;n&&te(n,e,t,r),x(l,e,!n);return}}let r=n?o(e)/o(n):0;n?.kind===`steady`&&e.kind===`steady`&&r<w&&r*w>1?x(n,e,!0):j.push(e)});let M=j[j.length-1],re=p+M.sum/M.n;M.frames+=n-m,M.t1=re;for(let e=1;e<j.length;e++){let t=j[e-1],n=j[e],r=o(n)/o(t);(t.kind===`steady`&&n.kind===`steady`||r>=w||r*w<=1)&&te(`rate-change`,n,o(t),o(n),0)}A.sort((e,t)=>e.atSec-t.atSec);let N=j.filter(e=>e.kind===`steady`).map(e=>[o(e),e.t1-e.t0-e.ex,e.n]).sort((e,t)=>e[0]-t[0]),P=0,F=0,I=0,ie=0,L=0;for(let[e,t,n]of N){for(I+=t,ie+=n;e>=N[L][0]*w;L++)I-=N[L][1],ie-=N[L][2];P=Math.max(P,I),F=Math.max(F,ie)}let R=P/re,ae=R<.8||F<.8*(m-h)||N.length>1&&N[N.length-1][0]>=N[0][0]*w,oe=j.slice(0,3).map(e=>`${e.kind===`variable`?`~`:``}${T(o(e))} fps for ${T((e.t1-e.t0)/i)} s`);j.length>3&&oe.push(`+${j.length-3} more`);let z=``,se=(e,t)=>{e&&(z+=`${z?`, `:`; `}${e} ${t}${e>1?`s`:``}`)};for(let e of[`freeze`,`gap`,`burst`])se(A.filter(t=>t.kind===e).length,e);return se(h,`duplicate timestamp`),{segments:j.slice(0,50).map(e=>({startSec:e.t0/i,endSec:e.t1/i,frames:e.frames,fps:o(e),kind:e.kind})),moreSegments:Math.max(0,j.length-50),anomalies:A.slice(0,50),moreAnomalies:Math.max(0,A.length-50),buckets:{bucketSec:S/i,fps:Array.from(C,e=>e*i/S)},uneven:ae,dominantShare:R,summary:`${ae?`Uneven`:z?`Mostly steady`:`Steady`}: ${oe.join(`, `)}${z}`}}})),O=n({CUSUM_DRIFT:()=>we,FREEZE_FACTOR:()=>4,FREEZE_MIN_SEC:()=>Te,MAX_REORDER_DEPTH:()=>16,RATE_CHANGE_RELATIVE:()=>Ce,SNAP_RELATIVE_TOLERANCE:()=>xe,VFR_RELATIVE_TOLERANCE:()=>Se,analyzeTimeline:()=>re,msGridTicks:()=>A,rateFromTicks:()=>M,rateProfileOf:()=>le,reorderDepthFromCts:()=>j,snapToStandardRate:()=>k,vfrTolerance:()=>te});function k(e,t=xe){if(!(e>0))return null;let n=null,r=1/0;for(let t of Ee){let i=Math.abs(e-t.value)/t.value;i<r&&(r=i,n=t)}return r<=t?n:null}function A(e,t){if(!(e>1e3)||t.length===0)return 0;for(let n of t){let t=n*1e3;if(!Number.isSafeInteger(t)||t%e!==0)return 0}return e/1e3}function te(e,t,n){return Math.max(1,Math.round(Se*e),A(t,n))}function j(e,t,n){return!(t>e)||!(n>0)?0:Math.min(16,Math.ceil((t-e)/n))}function ne(e){if(Number.isInteger(e)||!(e>0))return null;let t=1e9/e,n=Math.round(t);return n>0&&Math.abs(t-n)<=1e-6*n?n:null}function M(e,t){let n=ne(e);return n!==null&&t>0&&Number.isSafeInteger(n*t)?f(1e9,n*t,2**53-1):F(e,t,2**53-1)}function re(e){let t=[],n=ie(e.timescale,t);return`segments`in e?ge(e,n,t):be(e,n,t)}function N(e){return`counts`in e&&`deltas`in e?{n:Math.min(e.counts.length,e.deltas.length),counts:e.counts,values:e.deltas}:{n:e.length,counts:null,values:e}}function P(e){return e?`counts`in e&&`offsets`in e?{n:Math.min(e.counts.length,e.offsets.length),counts:e.counts,values:e.offsets}:{n:e.length,counts:null,values:e}:null}function F(e,t,n=p){if(!(e>0)||!(t>0))return null;if(Number.isSafeInteger(e)&&Number.isSafeInteger(t))return f(e,t,n);let r=1e6,i=Math.round(e*r),a=Math.round(t*r);return Number.isSafeInteger(i)&&Number.isSafeInteger(a)?f(i,a,n):d(e/t,1)}function I(e,t,n){if(!(t>0)||!(n>0))return null;let r=ne(e);return r!==null&&Number.isSafeInteger(t)&&Number.isSafeInteger(n)?f(BigInt(t)*1000000000n,BigInt(r)*BigInt(n),p):Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&Number.isSafeInteger(n)?f(BigInt(e)*BigInt(t),n,p):F(e*t,n)}function ie(e,t){return e>0&&Number.isFinite(e)?e:(t.push(`invalid timescale ${e}, using 1`),1)}function L(e){return e?{ws:e.start,we:e.end>e.start?e.end:1/0}:{ws:-1/0,we:1/0}}function R(e,t){return{timescale:e,sampleCount:0,durationSum:0,avgFps:null,avgFpsString:`0/0`,presentedAvgFps:null,presentedFrames:null,firstPts:null,lastPts:null,deltaCount:0,excludedTailDeltas:0,reorderDepth:0,duplicateTimestamps:0,discontinuities:0,histogram:[],distinctDeltas:0,minDelta:null,maxDelta:null,medianDelta:null,medianFrameInterval:null,meanDelta:null,tolerance:null,minFps:null,maxFps:null,isVfr:null,vfrRatio:0,nominalFps:null,dominantFps:null,timestampsQuantized:!1,profile:null,fastPath:!1,warnings:t}}function ae(e,t,n,r,i,a){let o=e.timescale,s=e.isVfr===!1&&n-t<=(e.tolerance??0)&&n<2*t;return n>t*1.075&&!s?e=>e(r,o,i,a):null}function oe(e,t){let n=e.medianDelta,r=e.timescale;!n||!t||t<4*n||t<.5*r||e.warnings.push(`last frame held ${(t/r).toFixed(3)} s (${(t/n).toFixed(1)}x the median frame interval): the average is below the frame rate`)}function z(e,t){if(oe(e,t),e.presentedFrames===null||e.presentedFrames<=0||e.firstPts===null||e.lastPts===null)return;let n=t>0?t:e.medianDelta??0;e.presentedAvgFps=I(e.timescale,e.presentedFrames,e.lastPts-e.firstPts+n)}function se(e,t){let n=0;for(let[r,i]of B(e)){if(t<n+r)return i;n+=r}return 0}async function ce(){try{let{rateProfile:e}=await Promise.resolve().then(()=>(ee(),b));return e}catch{return null}}async function le(e){let t=e&&await ce();return t?e(t):null}function ue(e,t){return e-t>=2?e-t:e}function de(e,t,n){let r=e.timescale,i=[...t.keys()].sort((e,t)=>e-t),a=i.map(e=>[e,t.get(e)??0]),o=0,s=0;for(let[e,t]of a)o+=t,s+=e*t;if(e.histogram=a,e.distinctDeltas=i.length,o===0)return;let c=0,l=i[0];for(let[e,t]of a)if(c+=t,c*2>=o){l=e;break}let u=i[0],f=0;for(let[e,t]of a)t>f&&(u=e,f=t);let p=A(r,i),m=Math.max(1,Math.round(Se*l),p),h=0;for(let[e,t]of a)Math.abs(e-l)>m&&(h+=t);let g=i[0],_=i[i.length-1],v=o>=2&&h>0;e.minDelta=g,e.maxDelta=_,e.medianDelta=l;let y=M(r,l);if(e.medianFrameInterval=y&&d(y.den,y.num),e.meanDelta=s/o,e.tolerance=m,e.minFps=M(r,_),e.maxFps=M(r,g),e.isVfr=v,e.vfrRatio=h/o,i.length===1){let t=M(r,g);t&&(e.nominalFps={...t,kind:`exact`})}else if(v&&f*2>=o){let t=M(r,u);t&&(e.dominantFps={rate:t,share:f/o})}e.timestampsQuantized=(n||p>0)&&!v&&i.length>1}function fe(e){if(e.nominalFps||e.isVfr!==!1||e.distinctDeltas<2||!e.avgFps)return;let t=k(e.meanDelta?e.timescale/e.meanDelta:e.avgFps.value);t&&(e.nominalFps={...t,kind:`snapped`})}function pe(e){let t={n:0,d:0,constantCts:!0,ctsValue:0,ctsMin:1/0,ctsMax:-1/0,firstDelta:0,negativeDurations:!1,discontinuities:0,startDts:0,ctsMismatch:0},n=!1,r=e=>{n?e!==t.ctsValue&&(t.constantCts=!1):(t.ctsValue=e,n=!0),e<t.ctsMin&&(t.ctsMin=e),e>t.ctsMax&&(t.ctsMax=e)},i=0;for(let n=0;n<e.length;n++){let a=e[n];a.baseDts!==void 0&&a.baseDts!==null&&(n===0?t.startDts=a.baseDts:a.baseDts!==i&&t.discontinuities++,i=a.baseDts);let o=N(a.durations),s=0;for(let e=0;e<o.n;e++){let n=o.counts?o.counts[e]:1;if(n<=0)continue;let r=o.values[e];s+=n,t.d+=n*r,i+=n*r,r<0&&(t.negativeDurations=!0),t.firstDelta===0&&r>0&&(t.firstDelta=r)}t.n+=s;let c=P(a.cts),l=0,u=0;if(c){for(let e=0;e<c.n;e++){let t=c.counts?c.counts[e]:1;if(t<=0)continue;u+=t;let n=Math.min(t,s-l);n<=0||(l+=n,r(c.values[e]))}u!==s&&t.ctsMismatch++}l<s&&r(0)}return n||(t.ctsMin=0,t.ctsMax=0),t}function*B(e){for(let t of e){let e=N(t.durations);for(let t=0;t<e.n;t++){let n=e.counts?e.counts[t]:1;n>0&&(yield[n,e.values[t]])}}}function me(e,t,n,r){if(n===-1/0)return 0;if(n===1/0)return r;let i=t,a=0;for(let[t,r]of B(e)){if(r===0){if(i<n){a+=t;continue}return a}if(i+(t-1)*r<n)a+=t,i+=t*r;else return a+Math.max(0,Math.min(t,Math.ceil((n-i)/r)))}return a}function he(e,t,n){let r=t,i=0;for(let[t,a]of B(e)){if(n<i+t)return r+(n-i)*a;i+=t,r+=t*a}return r}function ge(e,t,n){let r=e.segments,i=pe(r);i.ctsMismatch>0&&n.push(`composition offsets do not match the sample count in ${i.ctsMismatch} segment(s)`),i.discontinuities>0&&n.push(`decode timestamp discontinuities: ${i.discontinuities}`),i.negativeDurations&&n.push(`negative sample durations`),Number.isSafeInteger(i.d)||n.push(`duration sum exceeds 2^53-1`);let a=R(t,n);if(a.sampleCount=i.n,a.durationSum=i.d,a.discontinuities=i.discontinuities,a.avgFps=I(t,i.n,i.d),a.avgFpsString=u(a.avgFps),i.n===0)return a.presentedFrames=0,a;let o=e.reorderDepth??j(i.ctsMin,i.ctsMax,i.firstDelta);a.reorderDepth=o;let s=1+o,{ws:c,we:l}=L(e.editWindow),d=e.tickQuantized??!1;if(!e.forceExpand&&i.constantCts&&i.discontinuities===0&&!i.negativeDurations){a.fastPath=!0;let e=i.startDts+i.ctsValue,t=me(r,e,c,i.n),n=Math.max(t,me(r,e,l,i.n));if(a.presentedFrames=n-t,n===t)return a;let o=he(r,e,t),u=he(r,e,n-1);a.firstPts=o,a.lastPts=u;let f=n-t-1,p=ue(f,s),m=new Map,h=0,g=1/0,_=0;for(let[e,n]of B(r)){if(h>=t+f)break;let r=Math.max(h,t),i=Math.min(h+e,t+f);if(i>r){if(n===0)a.duplicateTimestamps+=i-r;else{g=Math.min(g,n),_=Math.max(_,n);let i=Math.min(h+e,t+p);i>r&&(m.set(n,(m.get(n)??0)+(i-r)),a.deltaCount+=i-r)}}h+=e}return a.excludedTailDeltas=f-p,de(a,m,d),fe(a),z(a,se(r,n-1)),a.profile=ae(a,g,_,e=>{let n=0;for(let[i,a]of B(r)){if(n>=t+f)break;let r=Math.max(n,t),o=Math.min(n+i,t+f);o>r&&e(o-r,a),n+=i}},n-t,u-o),a}let f=e.maxExpandedSamples??5e6;if(i.n>f)return n.push(`per-sample analysis skipped: ${i.n} samples exceed the limit of ${f}`),a;let p=new Float64Array(i.n),m=0,h=0;for(let e of r){e.baseDts!==void 0&&e.baseDts!==null&&(h=e.baseDts);let t=m,n=N(e.durations);for(let e=0;e<n.n;e++){let t=n.counts?n.counts[e]:1,r=n.values[e];for(let e=0;e<t;e++)p[m++]=h,h+=r}let r=P(e.cts);if(r){let e=t;for(let t=0;t<r.n&&e<m;t++){let n=r.counts?r.counts[t]:1,i=r.values[t];for(let t=0;t<n&&e<m;t++)p[e++]+=i}}}let g=-1;for(let e=0;e<p.length;e++){let t=p[e];t>=c&&t<l&&(g<0||t>=p[g])&&(g=e)}let _=g>=0?se(r,g):0;return ve(a,_e(p,c,l),s,d),z(a,_),fe(a),a}function _e(e,t,n){let r=e.length;if(t!==-1/0||n!==1/0){r=0;for(let i=0;i<e.length;i++){let a=e[i];a>=t&&a<n&&(e[r++]=a)}}let i=e.subarray(0,r);for(let e=1;e<r;e++)if(i[e]<i[e-1]){i.sort();break}return i}function ve(e,t,n,r){let i=t.length;if(e.presentedFrames=i,i===0)return;e.firstPts=t[0],e.lastPts=t[i-1];let a=i-1,o=ue(a,n),s=new Map,c=1/0,l=0;for(let n=1;n<=a;n++){let r=t[n]-t[n-1];r<=0?e.duplicateTimestamps++:(c=Math.min(c,r),l=Math.max(l,r),n<=o&&(s.set(r,(s.get(r)??0)+1),e.deltaCount++))}e.excludedTailDeltas=a-o,de(e,s,r),e.profile=ae(e,c,l,e=>{for(let n=1;n<=a;n++)e(1,t[n]-t[n-1])},i,t[a]-t[0])}function ye(e){let t=-1/0,n=0;for(let r=0;r<e.length;r++){let i=e[r];i>t?t=i:t-i>n&&(n=t-i)}return n}function be(e,t,n){let r=e.pts,i=r.length,a=R(t,n);if(a.sampleCount=i,i===0)return a.presentedFrames=0,a;let o=1/0,s=-1/0;for(let e=0;e<i;e++){let t=r[e];t<o&&(o=t),t>s&&(s=t)}let{ws:c,we:l}=L(e.editWindow),d=_e(Float64Array.from(r),c,l),f=e.reorderDepth;if(f===void 0){let t=0;for(let e=1;e<d.length;e++){let n=d[e]-d[e-1];if(n>0){t=n;break}}f=e.ctsRange?j(e.ctsRange.min,e.ctsRange.max,t):j(0,ye(r),t)}a.reorderDepth=f,ve(a,d,1+f,e.tickQuantized??!1),oe(a,e.lastDuration);let p=e.lastDuration??a.medianDelta??0;return a.durationSum=s-o+p,a.avgFps=I(t,i,a.durationSum),a.avgFpsString=u(a.avgFps),a.presentedAvgFps=a.avgFps,fe(a),a}var xe,Se,Ce,we,Te,Ee,De=t((()=>{m(),y(),xe=.001,Se=.005,Ce=.15,we=Ce/2,Te=.5,Ee=(()=>{let e=[];for(let t of[24,30,48,60,120,240])e.push(d(t*1e3,1001));for(let t=1;t<=240;t++)e.push(d(t,1));return e})()}));function Oe(e){if(e?.aborted)throw e.reason??new DOMException(`Aborted`,`AbortError`)}function V(e,t,n=RangeError){if(!Number.isSafeInteger(e)||e<0)throw new n(`${t} must be a non-negative safe integer, got ${e}`)}var ke=class{size;headWindow;maxWindows;signal;#e;#t=[];#n=[];#r=0;#i=0;constructor(e,t={}){V(e.size,`blob size`,TypeError),this.#e=e,this.size=e.size,this.headWindow=t.headWindow??65536,this.maxWindows=Math.max(1,t.maxWindows??4),this.signal=t.signal??null,V(this.headWindow,`headWindow`,TypeError)}get reads(){return this.#r}get bytesFetched(){return this.#i}checkAbort(){Oe(this.signal)}async read(e,t){if(V(e,`offset`),V(t,`length`),e>this.size)throw RangeError(`offset ${e} is beyond the end of the file (${this.size})`);let n=Math.min(this.size,e+t);if(n===e)return new Uint8Array;this.checkAbort();let r;try{r=await this.#e.slice(e,n).arrayBuffer()}catch(e){throw this.checkAbort(),e?.name===`AbortError`?e:U(`read-failed`,`file read failed: ${e}`)}if(this.checkAbort(),this.#r++,r.byteLength!==n-e)throw U(`read-failed`,`file read failed: short read at ${e}: expected ${n-e} bytes, got ${r.byteLength}`);return this.#a(e,n),new Uint8Array(r)}async readMany(e,t=4){let n=Array(e.length),r=0,i=async()=>{for(;r<e.length;){let t=r++,[i,a]=e[t],o=this.peek(i,a);n[t]=o?new Uint8Array(o.buffer,o.byteOffset,o.byteLength):await this.read(i,a)}},a=[];for(let n=0;n<Math.max(1,Math.min(t,e.length));n++)a.push(i());return await Promise.all(a),n}peek(e,t){let n=Math.min(this.size,e+t);for(let t=0;t<this.#t.length;t++){let r=this.#t[t];if(e>=r.off&&n<=r.off+r.buf.length)return t>0&&(this.#t.splice(t,1),this.#t.unshift(r)),new DataView(r.buf.buffer,r.buf.byteOffset+(e-r.off),n-e)}return null}async view(e,t,n=this.headWindow){if(V(e,`offset`),V(t,`length`),V(n,`readAhead`,TypeError),e>this.size)throw RangeError(`offset ${e} is beyond the end of the file (${this.size})`);let r=Math.min(this.size,e+t);if(r===e)return new DataView(new ArrayBuffer(0));let i=this.peek(e,r-e);if(i)return i;let a=Math.min(this.size,Math.max(r,e+n)),o=this.#t.find(t=>e>=t.off&&e<t.off+t.buf.length),s;if(o){let t=o.buf.subarray(e-o.off),n=await this.read(o.off+o.buf.length,a-(o.off+o.buf.length));s=new Uint8Array(t.length+n.length),s.set(t,0),s.set(n,t.length)}else s=await this.read(e,a-e);return this.#t.unshift({off:e,buf:s}),this.#t.length>this.maxWindows&&(this.#t.length=this.maxWindows),new DataView(s.buffer,s.byteOffset,r-e)}async bytes(e,t,n=this.headWindow){let r=await this.view(e,t,n);return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}#a(e,t){let n=this.#n,r=0,i=n.length;for(;r<i;){let t=r+i>>>1;n[t].end<e?r=t+1:i=t}let a=r,o=e,s=t,c=0;for(;a<n.length&&n[a].start<=t;){let r=n[a],i=Math.min(t,r.end)-Math.max(e,r.start);i>0&&(c+=i),r.start<o&&(o=r.start),r.end>s&&(s=r.end),a++}n.splice(r,a-r,{start:o,end:s}),this.#i+=t-e-c}};function Ae(e,t){return e.getUint8(t)*65536+e.getUint16(t+1)}function je(e,t,n){let r=``;for(let i=0;i<n;i++)r+=String.fromCharCode(e.getUint8(t+i));return r}function H(e,t){return je(e,t,4).replace(/[^ -~]/g,`?`)}function U(e,t){return Object.assign(Error(t),{errorCode:e})}function Me(e,t=`internal`){return e?.errorCode??(e instanceof RangeError?`corrupt`:t)}var W=class extends Error{constructor(e,t){super(t),this.name=`IsoBmffError`,this.errorCode=e}};function G(e,t,n,r=0){let i=Math.min(e.byteLength,n);if(t+8>i)return null;let a=e.getUint32(t),o=H(e,t+4),s=8,c=a;if(a===1){if(t+16>i)return null;let n=e.getBigUint64(t+8);if(n>BigInt(2**53-1))throw new W(`corrupt`,`corrupt file: box '${o}' at ${r+t} has a size above 2^53-1`);c=Number(n),s=16}else a===0&&(c=n-t);if(o===`uuid`&&(s+=16),c<s)throw new W(`corrupt`,`corrupt file: box '${o}' at ${r+t} is smaller than its header`);let l=t+c;return{type:o,start:t,size:c,headerSize:s,end:Math.min(l,n),truncated:l>n}}function*K(e,t,n,r){let i=t;for(;i+8<=n;){let t;try{t=G(e,i,n)}catch(e){r?.push(e.message.replace(/^corrupt file: /,`ignored invalid child: `));return}if(!t)return;yield t,i=t.start+t.size}}function q(e,t,n,r){let i=e.getBigUint64(t);if(i>BigInt(2**53-1))throw new W(`unsupported`,`unsupported: box '${n}' at ${r} holds a value above 2^53-1`);return Number(i)}function Ne(e,t,n,r){let i=e.getBigInt64(t);if(i>BigInt(2**53-1)||i<-BigInt(2**53-1))throw new W(`unsupported`,`unsupported: box '${n}' at ${r} holds a value beyond 2^53-1`);return Number(i)}function Pe(e,t,n,r,i){let a=Math.max(0,Math.floor(t/n));return e>a?(i.push(`${r} declares ${e} entries but its box holds only ${a}`),a):e}let J=null;function Fe(){if(J)return J;J=new Map;for(let e of`rawvideo:raw yuv22vuyyuvs|v210:v210|mjpeg:jpegmjpaAVDJAVRndmb1|mpeg4:mp4vDIVXXVID3IV2|h263:h263s263H263|dvvideo:dvcpdvc dvppdv5pdv5nAVdvAVd1dvhqdvhpdvh1dvh2dvh3dvh4dvh5dvh6|qtrle:rle |cinepak:cvid|svq1:SVQ1svq1svqi|svq3:SVQ3|vvc:vvc1vvi1|hevc:hev1hvc1dvhe|h264:avc1avc2avc3avc4ai5pai5qai52ai53ai55ai56ai1pai1qai12ai13ai15ai16AVinaivxdva1dvav|evc:evc1|vp8:vp08|vp9:vp09|av1:av01|mpeg1video:m1v m1v1mpegmp1v|mpeg2video:m2v1hdv1hdv2hdv3hdv4hdv5hdv6hdv7hdv8hdv9hdvamx5nmx5pmx4nmx4pmx3nmx3pxd51xd54xd55xd59xd5axd5bxd5cxd5dxd5exd5fxdv1xdv2xdv3xdv4xdv5xdv6xdv7xdv8xdv9xdvaxdvbxdvcxdvdxdvexdvfxdhdxdh2AVmpmp2v|jpeg2000:mjp2|png:png MNG |gif:gif |tiff:tiff|vc1:vc-1|cavs:avs2|avs3:avs3|dirac:drac|dnxhd:AVdnAVdh|prores:apchapcnapcsapcoap4hap4x|prores_raw:aprnaprh|hap:Hap1Hap5HapYHapAHapM|cfhd:CFHD|lcevc:lvc1|apv:apv1`.split(`|`)){let t=e.indexOf(`:`),n=e.slice(0,t);for(let r=t+1;r+4<=e.length;r+=4)J.set(e.slice(r,r+4),n)}return J}let Ie={32:`mpeg4`,33:`h264`,35:`hevc`,51:`vvc`,96:`mpeg2video`,97:`mpeg2video`,98:`mpeg2video`,99:`mpeg2video`,100:`mpeg2video`,101:`mpeg2video`,106:`mpeg1video`,108:`mjpeg`,109:`png`,110:`jpeg2000`,163:`vc1`,164:`dirac`,177:`vp9`};function Le(e){return Fe().has(e)}function Re(e,t=null,n=!1){return t!==null&&Ie[t]?Ie[t]:e===`dvh1`&&n?`hevc`:Fe().get(e)??`unknown`}let ze=`no trex: sample defaults taken from tfhd`;function Be(e){let t=0;for(let n=256;n<=2048;n<<=1)e&n&&(t+=4);return t}function Ve(e,t,n,r,i,a,o=i+t-8){if(t+8>n)return null;let s=Ae(e,t+1),c=e.getUint32(t+4),l=r.trex.get(c),u=t+8,d=e=>u+e<=n,f=s&131072?i:a;if(s&1){if(!d(8))return null;f=q(e,u,`tfhd`,o),u+=8}s&2&&(u+=4);let p=l?l.duration:null;if(s&8){if(!d(4))return null;p=e.getUint32(u),u+=4}let m=l?l.size:0;if(s&16){if(!d(4))return null;m=e.getUint32(u)}return{flags:s,trackId:c,baseDataOffset:f,defaultDuration:p,defaultSize:m,trexMissing:!l}}function He(e,t,n,r,i,a,o,s){let c=Ae(e,t+1),l=e.getUint32(t+4),u=t+8,d=i;c&1&&(d=r.baseDataOffset+e.getInt32(u),u+=4),c&4&&(u+=4);let f=Be(c),p;f>0?p=Pe(l,n-u,f,`trun`,o):(p=l,p>s&&(o.push(`trun count ${l} limited to ${s}`),p=s));let m=f>0&&p<l,h=!!(c&256);if(!h&&r.defaultDuration===null&&p>0)throw new W(`corrupt`,`corrupt file: no sample duration for track ${r.trackId}`);let g=r.defaultDuration??0,_=h?new Uint32Array(p):null,v=c&2048?new Int32Array(p):null,y=!!(c&512),b=h?0:g*p,x=d,S=0,C=0;if(f>0)for(let t=0;t<p;t++){if(h){let n=e.getUint32(u);_[t]=n,b+=n,u+=4}let n=r.defaultSize;y&&(n=e.getUint32(u),u+=4),c&1024&&(u+=4),v&&(v[t]=e.getInt32(u),u+=4),x<a&&S++,C===t&&x+n<=a&&C++,x+=n}if(!y){let e=r.defaultSize,t=Math.max(0,a-d);S=e>0?Math.min(p,Math.ceil(t/e)):Math.min(p,t),C=e>0?Math.min(p,Math.floor(t/e)):S,x=d+e*p}return{fragment:{moofIndex:0,baseDts:null,count:p,durations:_,defaultDuration:g,cts:v,durationSum:b,present:S,complete:C,trexMissing:r.trexMissing,overrun:m},dataEnd:x}}function Ue(e,t,n,r,i,a){let o=n,s=!1,c=e=>{i.ffprobeReject||={moof:r,reason:e}},l=new Map;for(let e of i.tracks)l.has(e.id)||l.set(e.id,e);for(let u of K(e,t.start+t.headerSize,t.end,i.warnings)){if(u.type!==`traf`)continue;let t=null,d,f=null,p=0;for(let m of K(e,u.start+u.headerSize,u.end,i.warnings)){let u=m.start+m.headerSize;if(m.type===`tfhd`){if(t=Ve(e,u,m.end,i,n,o,n+m.start),!t)continue;t.trackId===0?c(`rejects this file: tfhd with track_ID 0`):t.trexMissing||(s=!0),p=t.baseDataOffset,d=l.get(t.trackId),d||i.warnings.push(`fragment for unknown track ${t.trackId}`)}else if(m.type===`tfdt`&&u+8<=m.end)f=e.getUint8(u)===1&&u+12<=m.end?q(e,u+4,`tfdt`,n+m.start):e.getUint32(u+4);else if(m.type===`trun`&&u+8<=m.end){if(s?(!t||t.trexMissing)&&c(`misreads this file: a traf without trex is read as another track`):c(`rejects this file: trun without a tfhd that has a trex`),!t||!d)continue;let n=d,{fragment:l,dataEnd:h}=He(e,u,m.end,t,p,i.fileSize,n.warnings,a);l.moofIndex=r,l.baseDts=f,f=null,p=h,o=h,l.trexMissing&&!n.warnings.includes(ze)&&n.warnings.push(ze),n.fragments.push(l)}}}}function We(e,t,n){let r=t.start+t.headerSize,i=r<t.end&&e.getUint8(r)===1;if(r+(i?32:24)>t.end)throw new W(`corrupt`,`corrupt file: box 'sidx' at ${n} is truncated`);let a=r+12,o=i?q(e,a,`sidx`,n):e.getUint32(a),s=i?q(e,a+8,`sidx`,n):e.getUint32(a+4);a+=i?16:8;let c=e.getUint16(a+2);a+=4;let l=n+(t.end-t.start),u=l+s,d=0,f=!1,p=[];for(let n=0;n<c&&a+12<=t.end;n++,a+=12){let t=e.getUint32(a);t&2147483648&&(f=!0);let n=t&2147483647;p.push([u,n]),u+=n,d+=e.getUint32(a+4)}return{start:n,end:l,referenceId:e.getUint32(r+4),timescale:e.getUint32(r+8),earliestPts:o,firstOffset:s,coverageEnd:u,durationSum:d,subsegments:p,hierarchical:f}}let Ge=2**53-1,Ke=[65536,0,0,0,65536,0,0,0,1<<30];function qe(e){return{fileSize:e,brand:null,compatibleBrands:[],hasFtyp:!1,hasMvhd:!1,timescale:1,duration:0,matrix:Int32Array.from(Ke),tracks:[],chapterTrackIds:new Set,hasMvex:!1,trex:new Map,moofCount:0,topLevel:[],truncated:!1,ffprobeMoofLimit:1/0,ffprobeReject:null,warnings:[]}}function Je(){return{id:0,enabled:!1,handler:``,timescale:0,hasMdhd:!1,mdhdDuration:0,matrix:Int32Array.from(Ke),sampleEntry:``,originalFormat:null,stsdCount:0,width:0,height:0,esdsObjectType:null,hasHvcc:!1,sttsCounts:new Uint32Array,sttsDeltas:new Uint32Array,cttsCounts:null,cttsOffsets:null,dtsShift:0,sampleCount:null,sampleSize:0,overruns:[],edits:[],fragments:[],warnings:[],dv:null,stss:null,stsz:null,stz2:null,stsc:null,stco:null,co64:null}}function Y(e,t,n,r=0){return Ye(K(e,t.start+t.headerSize+r,t.end,n.warnings),n,t.type)}function*Ye(e,t,n){for(let r of e){if(r.truncated){if(t.strict)throw new W(`truncated`,`incomplete file: moov is truncated`);t.warnings.push(`'${r.type}' overruns '${n}'`)}yield r}}function X(e){return e.start+e.headerSize}function Xe(e,t){let n=new Int32Array(9);for(let r=0;r<9;r++)n[r]=e.getInt32(t+r*4);return n}function Ze(e){return e>0&&e<=2147483647?e:1}function Z(e){return{start:X(e),end:e.end}}function Qe(e,t,n){let r=X(t);if(r+8>t.end)return;let i=e.getUint32(r+4),a=Pe(i,t.end-r-8,8,`stts`,n.warnings);a<i&&n.overruns.push(`stts`);let o=new Uint32Array(a),s=new Uint32Array(a),c=!1;for(let t=0;t<a;t++)o[t]=e.getUint32(r+8+t*8),s[t]=e.getUint32(r+12+t*8),s[t]>4294487295&&(c=!0);c&&$e(o,s,n.warnings),n.sttsCounts=o,n.sttsDeltas=s}function $e(e,t,n){let r=0n,i=0n;for(let a=0;a<e.length;a++){let o=BigInt(e[a]),s=t[a];if(s>4294487295){n.push(`stts delta ${s} clipped to 1`);let e=s|0;s=1,i+=BigInt(e<0?e:1)*o}else i+=BigInt(s)*o;if(r+=BigInt(s)*o,r>i){let e=(r-i)/(o>0n?o:1n),t=BigInt(s)>e?e:BigInt(s-1>>>0);r-=t*o,s=Number(BigInt(s)-t&4294967295n)}t[a]=s}}function et(e,t,n){let r=X(t);if(r+8>t.end)return;let i=e.getUint32(r+4),a=Pe(i,t.end-r-8,8,`ctts`,n.warnings);if(a<i&&n.overruns.push(`ctts`),a===0)return;let o=[],s=[],c=0;for(let t=0;t<a;t++){let n=e.getInt32(r+8+t*8),a=e.getInt32(r+12+t*8);n<=0||(o.push(n),s.push(a),t+2<i&&a<0&&(c=Math.max(c,a===-2147483648?2147483647:-a)))}n.cttsCounts=Uint32Array.from(o),n.cttsOffsets=Int32Array.from(s),n.dtsShift=c}function tt(e,t,n,r,i){let a=X(t);if(a+8>t.end)return;let o=e.getUint8(a),s=o===1?20:12,c=e.getUint32(a+4),l=t.end-a-8,u=c*s===l?c:Math.floor(l/s);if(u!==c&&n.warnings.push(`elst declares ${c} entries but its box holds ${u}`),u===0)return;n.edits.length&&(n.warnings.push(`duplicated elst: the last one is used`),n.edits=[]);let d=r.base+t.start;for(let t=0;t<u;t++){let r=a+8+t*s;if(o===1){let t=Ne(e,r+8,`elst`,d),a=e.getBigInt64(r)===-1n;a&&(n.warnings.push(`unknown elst duration: ${t===-1?`the empty edit is ignored`:`the edit lasts to the end`}`),i.ffprobeReject??={moof:-1,reason:`rejects this file: an elst duration of -1`}),n.edits.push({duration:a?t===-1?0:Ge:q(e,r,`elst`,d),mediaTime:t,rate:e.getInt32(r+16)/65536})}else n.edits.push({duration:e.getUint32(r),mediaTime:e.getInt32(r+4),rate:e.getInt32(r+8)/65536})}}function nt(e,t,n){let r=t+4,i=()=>{if(r+2>n)return null;let t=e.getUint8(r++),i=0;for(let t=0;t<4&&r<n;t++){let t=e.getUint8(r++);if(i=i*128+(t&127),!(t&128))break}return[t,i]},a=i();if(a&&a[0]===3){if(r+3>n)return null;let t=e.getUint8(r+2);r+=3,t&128&&(r+=2),t&64&&r<n&&(r+=1+e.getUint8(r)),t&32&&(r+=2),a=i()}return a&&a[0]===4&&r<n?e.getUint8(r):null}function rt(e,t,n,r){let i=X(t);if(i+8>t.end||(n.stsdCount=e.getUint32(i+4),n.stsdCount===0))return;let a;try{a=G(e,i+8,t.end)}catch(e){n.warnings.push(e.message);return}if(a&&(n.sampleEntry=a.type,!(n.handler===`soun`||a.start+86>a.end))){n.width=e.getUint16(a.start+32),n.height=e.getUint16(a.start+34);for(let t of K(e,a.start+86,a.end,r.warnings))if(t.type===`esds`)n.esdsObjectType=nt(e,X(t),t.end);else if(t.type===`hvcC`)n.hasHvcc=!0;else if(t.type===`sinf`)for(let i of K(e,X(t),t.end,r.warnings))i.type===`frma`&&X(i)+4<=i.end&&(n.originalFormat=H(e,X(i)))}}function it(e,t,n,r){for(let i of Y(e,t,r)){let t=X(i);switch(i.type){case`stsd`:rt(e,i,n,r);break;case`stts`:Qe(e,i,n);break;case`ctts`:et(e,i,n);break;case`stsz`:case`stz2`:t+12<=i.end&&(n.sampleCount=e.getUint32(t+8),n.sampleSize=i.type===`stsz`?e.getUint32(t+4):0),i.type===`stsz`?n.stsz=Z(i):n.stz2=Z(i);break;case`stss`:n.stss=Z(i),t+8<=i.end&&e.getUint32(t+4)>Math.floor((i.end-t-8)/4)&&n.overruns.push(`stss`);break;case`stsc`:n.stsc=Z(i);break;case`stco`:n.stco=Z(i);break;case`co64`:n.co64=Z(i)}}}function at(e,t,n,r){for(let i of Y(e,t,r)){let t=X(i);if(i.type===`mdhd`&&t+24<=i.end){let r=e.getUint8(t)===1;if(r&&t+32>i.end)continue;n.hasMdhd=!0;let a=e.getUint32(t+(r?20:12));if(n.timescale=Ze(a),n.timescale!==a&&n.warnings.push(`invalid mdhd timescale ${a}, using 1`),r){let r=e.getBigUint64(t+24);n.mdhdDuration=r===18446744073709551615n?0:Number(r)}else{let r=e.getUint32(t+16);n.mdhdDuration=r===4294967295?0:r}}else if(i.type===`hdlr`&&t+12<=i.end)n.handler=H(e,t+8);else if(i.type===`minf`)for(let t of Y(e,i,r))t.type===`stbl`&&it(e,t,n,r)}}function ot(e,t,n,r){let i=Je();i.dv=e;for(let a of Y(e,t,r)){let t=X(a);if(a.type===`tkhd`&&t+84<=a.end){let n=e.getUint8(t)===1;if(n&&t+96>a.end)continue;i.enabled=(e.getUint8(t+3)&1)==1,i.id=e.getUint32(t+(n?20:12)),i.matrix=Xe(e,t+(n?52:40))}else if(a.type===`edts`)for(let t of Y(e,a,r))t.type===`elst`&&tt(e,t,i,r,n);else if(a.type===`mdia`)at(e,a,i,r);else if(a.type===`tref`){for(let t of Y(e,a,r))if(t.type===`chap`)for(let r=X(t);r+4<=t.end;r+=4)n.chapterTrackIds.add(e.getUint32(r))}}return i}function st(e,t,n,r,i=0){let a={strict:r,warnings:n.warnings,base:i};for(let r of Y(e,t,a)){let t=X(r);switch(r.type){case`mvhd`:{if(t+24>r.end)break;let i=e.getUint8(t)===1;if(i&&t+84>r.end)break;n.hasMvhd=!0,n.timescale=Ze(e.getUint32(t+(i?20:12))),n.duration=i?Number(e.getBigUint64(t+24)):e.getUint32(t+16),t+(i?84:72)<=r.end&&(n.matrix=Xe(e,t+(i?48:36)));break}case`trak`:n.tracks.push(ot(e,r,n,a));break;case`mvex`:n.hasMvex=!0;for(let t of Y(e,r,a)){let r=X(t);t.type===`trex`&&r+24<=t.end&&n.trex.set(e.getUint32(r+4),{duration:e.getUint32(r+12),size:e.getUint32(r+16)})}break;case`cmov`:throw new W(`unsupported`,`unsupported: compressed movie header (cmov)`)}}}let ct=new Set([`moof`,`styp`,`sidx`,`ssix`,`emsg`,`prft`,`free`,`skip`,`uuid`]);function lt(){return{windows:[],hints:[],next:0,mfraTried:!1}}function ut(e,t,n){for(let[r,i]of e.windows)if(t>=r&&t+n<=r+i.byteLength)return new DataView(i.buffer,i.byteOffset+t-r,n);return null}async function dt(e,t,n,r){for(;t.next<t.hints.length&&t.hints[t.next]<=n;)t.next++;let i=[];for(let n=t.next;n<t.hints.length&&i.length<8;n++)t.hints[n]<e.size&&i.push([t.hints[n],Math.min(r,e.size-t.hints[n])]);if(t.next+=i.length,!i.length)return;let a=await e.readMany(i,4);t.windows=i.map(([e],t)=>[e,new DataView(a[t].buffer,a[t].byteOffset,a[t].byteLength)]),t.windows.every(([,e])=>ft(e))||(t.hints=[],t.next=0)}function ft(e){return e.byteLength>=8&&e.getUint32(0)>=8&&ct.has(H(e,4))}function pt(e,t,n,r,i=2**53-1){for(let a of K(e,t,n)){let t=a.start+a.headerSize;if(a.type!==`tfra`||t+16>a.end)continue;let n=e.getUint8(t)===1,o=e.getUint32(t+8),s=(n?16:8)+(o>>4&3)+(o>>2&3)+(o&3)+3,c=Math.min(e.getUint32(t+12),Math.floor((a.end-t-16)/s));for(let a=0;a<c;a++){let o=t+16+a*s,c=n?e.getBigUint64(o+8):BigInt(e.getUint32(o+4));c>0n&&c<BigInt(i)&&r.add(Number(c))}}}async function mt(e){try{return await ht(e)}catch(t){if(e.signal?.aborted||t?.name===`AbortError`)throw t;return[]}}async function ht(e){let t=e.size,n=Math.min(t,65536);if(n<16)return[];let r=await e.view(t-n,n,0);if(H(r,n-12)!==`mfro`)return[];let i=r.getUint32(n-4);if(i<24||i>Math.min(t,16777216))return[];let a=i<=n?new DataView(r.buffer,r.byteOffset+n-i,i):await e.view(t-i,i,0),o;try{o=G(a,0,i)}catch{return[]}if(!o||o.type!==`mfra`)return[];let s=new Set;return pt(a,o.headerSize,o.end,s,t),[...s].sort((e,t)=>e-t)}m();function Q(e,t,n){if(!(n>0))return 0;let r=BigInt(Math.abs(e))*BigInt(t),i=BigInt(n),a=Number((r+i/2n)/i);return e<0?-a:a}function gt(e){let t=0,n=0;for(let r=0;r<e.sttsCounts.length;r++)t+=e.sttsCounts[r],n+=e.sttsCounts[r]*e.sttsDeltas[r];let r=0;for(let t of e.fragments)r+=t.count;return{moovSamples:t,moovDuration:n,fragmentSamples:r}}function _t(e,t,n){let r=0n,i=0n;if(n){for(let t=0;t<e.sttsCounts.length;t++)r+=BigInt(e.sttsCounts[t]),i+=BigInt(e.sttsCounts[t])*BigInt(e.sttsDeltas[t]);i<=0n&&(r=0n,i=0n)}for(let n of e.fragments)t(n.moofIndex,n.trexMissing)&&(r+=BigInt(n.count),i+=BigInt(n.durationSum));return[r,i]}function vt(e,t,n){return t<=0n||n<=0n?null:f(BigInt(e)*t,n,p)}function yt(e,t){let n=e.timescale,r=(e,n)=>e<t.ffprobeMoofLimit&&!n,[i,a]=_t(e,()=>!0,!0),[o,s]=_t(e,r,!0),c=e.overruns.includes(`stts`)||e.fragments.some(e=>e.overrun&&r(e.moofIndex,e.trexMissing))?null:vt(n,o,s);return{avg:vt(n,i,a),ffprobe:c?u(c):null}}function bt(e){let t=e.dv,n=e=>t&&e&&e.start+8<=e.end?t.getUint32(e.start+4):0,r=n(e.co64??e.stco),i=e.sttsCounts.length>0||e.overruns.includes(`stts`),a=e.sampleCount??0;return r>0&&(!i||n(e.stsc)===0||e.sampleSize===0&&a===0)||a>0&&r===0}function xt(e,t,n){let r=0,i=0,a=0,o=null,s=(e.cttsOffsets?.[0]??0)+n.moovDuration;for(let n of e.edits){let c=n.duration===Ge?Math.max(0,s-n.mediaTime):Q(n.duration,e.timescale,t);i+=c,n.mediaTime===-1?o||(r+=c):(a++,o||={mediaTime:n.mediaTime,duration:c,rate:n.rate})}return{emptyBefore:r,firstMedia:o,editSum:i,mediaEdits:a}}function St(e,t,n,r){let i=e.mdhdDuration;n.moovDuration>0&&(i=Math.min(i,n.moovDuration));let a=e.edits.length>0&&n.moovSamples>0;a&&(i=Math.min(i,r.editSum));let o=n.moovDuration,s=null,c=wt(e,t);for(let t of e.fragments)t.baseDts!==null&&(o=t.baseDts),s===null&&t.count>0&&(s=o-c+(t.cts?t.cts[0]:0)),o+=t.durationSum,o>i&&(i=o);let l=Ct(e,t);l!==null&&l>i&&(i=l);let u=null;return u=a?r.emptyBefore:n.moovSamples>0?e.cttsOffsets&&e.cttsOffsets.length?e.cttsOffsets[0]:0:s,{durationTs:i,startPts:u}}function Ct(e,t){if(t.ffprobeMoofLimit===1/0)return null;let n=0,r=null;for(let i of t.topLevel){if(i.type===`moof`&&++n>t.ffprobeMoofLimit)break;let a=i.sidx;a&&!a.hierarchical&&a.referenceId===e.id&&a.timescale===e.timescale&&(r=a.earliestPts+a.durationSum)}return r}function wt(e,t){let n=0,r=0,i=0;return e.edits.forEach((e,t)=>{t===0&&e.mediaTime===-1?(n=e.duration,i=1):t===i&&e.mediaTime>=0&&(r=e.mediaTime)}),!n&&!r?0:r-Q(n,e.timescale,t.timescale)}function Tt(e,t,n){let r=new Float64Array(e.length+1),i=new Float64Array(e.length),a=0,o=0;for(let s=0;s<e.length&&o<n;s++)e[s]<=0||(r[a]=o,i[a]=t[s],o+=Math.min(e[s],n-o),a++);return r[a]=o,{count:a,starts:r,values:i,total:o}}function Et(e){let t=e.starts,n=0;return r=>{if(r>=t[n]&&r<t[n+1])return n;let i=0,a=e.count-1;for(;i<a;){let e=Math.ceil((i+a)/2);t[e]<=r?i=e:a=e-1}return n=i,i}}function Dt(e,t){let n=e.stss;if(!n||!e.dv)return{all:!0,list:new Float64Array};let r=e.dv,i=n.start+8<=n.end?Math.min(r.getUint32(n.start+4),Math.floor((n.end-n.start-8)/4)):0;if(i===0)return{all:!1,list:Float64Array.of(0)};let a=+(r.getUint32(n.start+8)>0),o=new Float64Array(i),s=0,c=-1;for(let e=0;e<i;e++){let i=r.getUint32(n.start+8+e*4)-a;if(i<=c||i>=t)break;o[s++]=i,c=i}return{all:!1,list:o.subarray(0,s)}}function Ot(e,t,n){if(n>=t)return-1;if(e.all)return n;let r=e.list,i=0,a=r.length;for(;i<a;){let e=Math.floor((i+a)/2);r[e]<n?i=e+1:a=e}return i<r.length?r[i]:-1}function kt(e,t){if(t<0)return-1;if(e.all)return t;let n=e.list,r=0,i=n.length;for(;r<i;){let e=Math.floor((r+i)/2);n[e]<=t?r=e+1:i=e}return r>0?n[r-1]:-1}function At(e,t,n){let r=n;r<=0||e.len===0&&(e.first=t,e.last=t,e.len=1,r--,r===0)||((e.len>=2&&e.last!==e.first||r>=2&&t!==e.first)&&(e.bad=!0),e.last=t,e.len+=r)}function jt(e,t,n,r,i){let a=r,o=Math.min(i,t.total-r),s=0;for(;o>0&&!e.bad;){let r=n(a),i=Math.min(t.starts[r+1]-a,o);At(e,t.values[r],i),a+=i,o-=i,s++}return s}function Mt(e,t){return e.bad||e.len===0||!(e.first>0)?null:f(t,e.first,p)}function Nt(e,t,n,r,i){let a=Math.min(n,e.sampleCount??0);if(a<=0||e.sttsCounts.length===0||e.overruns.length>0)return null;let o=e.timescale,s=Tt(e.sttsCounts,e.sttsDeltas,a),c=Et(s),l={len:0,first:0,last:0,bad:!1};if(e.edits.length===0)return jt(l,s,c,0,a),Mt(l,o);if(!e.edits.some(e=>e.mediaTime!==-1))return null;let u=!0;for(let e=1;e<s.count&&u;e++)u=s.values[e]===s.values[0];if(u)return s.values[0]>0?f(o,s.values[0],p):null;let d=Math.min(r,2e6),m=0,h=!1,g=e=>(m+=e,m>d&&(h=!0),h),_=new Float64Array(s.count+1);for(let e=0;e<s.count;e++)_[e+1]=_[e]+(s.starts[e+1]-s.starts[e])*s.values[e];let v=e=>{let t=c(e);return _[t]+(e-s.starts[t])*s.values[t]},y=e=>s.values[c(e)],b=!!e.cttsCounts&&e.cttsCounts.length>0,x=b?Tt(e.cttsCounts,e.cttsOffsets,a):null,S=x?Et(x):null,C=e=>x&&e<x.total?x.values[S(e)]:0,w=Dt(e,a),T=e=>Ot(w,a,e),E=e=>kt(w,e),D=e.dtsShift,ee=(e,t)=>{let n=0,r=t;for(;n<r;){let t=Math.floor((n+r)/2);v(t)>=e?r=t:n=t+1}return n},O=(e,t)=>{let n=D>0?e-D:e,r=-1,i=a;for(v(a-1)-D<n&&(r=a-1);i-r>1;){let e=Math.floor((r+i)/2),t=v(e)-D;t>=n&&(i=e),t<=n&&(r=e)}let o=t?r:E(r);if(o>0){let e=ee(v(o),o);if(e<o){if(t)o=e;else{let t=T(e);t>=0&&t<o&&(o=t)}}}if(b&&o>=0){let e=E(o);for(;e>=0&&!g(1)&&v(e)-D+C(e)>n;)e=E(e-1);o=e}return o},k=0,A=!1;for(let n of e.edits){let r=n.mediaTime;if(!A&&r===-1)continue;if(A=!0,g(64))break;let i=Q(n.duration,e.timescale,t.timescale),o=O(r,!1);if(o<0&&!h&&(o=O(r,!0)),h)break;o<0&&(o=0,k=0),b&&(k=o);let u=-1;if(b){let e=!1;for(let t=T(o);t>=0&&!g(1);t=T(t+1)){let n=t+1<a?y(t):i;if(v(t)+C(t)+n>=i+r){if(e){u=t;break}e=!0}}if(h)break}else{let e=o,t=a;for(;e<t;){let n=Math.floor((e+t)/2);(n+1<a?v(n+1):v(a-1)+i)>=i+r?t=n:e=n+1}e<a&&(u=T(e))}let d=u<0?a-o:u-o+1,f=Math.min(d,a-k);if(f>0&&(g(jt(l,s,c,k,f)),k+=f),l.bad)return null;if(h)break}return h?(i?.push(`r_frame_rate not reproduced: edit list walk limit reached`),null):Mt(l,o)}function Pt(e,t,n){let r=[],i=[],a=n;for(let n=0;n<e.length&&a>0;n++){let o=Math.min(e[n],a);o<=0||(r.push(o),i.push(t[n]),a-=o)}return{counts:r,values:i}}function Ft(e,t){let n=[];if(t>0){let r=Pt(e.sttsCounts,e.sttsDeltas,t),i=e.cttsCounts&&e.cttsOffsets?Pt(e.cttsCounts,e.cttsOffsets,t):null;n.push({durations:{counts:r.counts,deltas:r.values},cts:i?{counts:i.counts,offsets:i.values}:null})}for(let t of e.fragments){let e=t.complete;n.push({baseDts:t.baseDts,durations:t.durations?t.durations.subarray(0,e):{counts:[e],deltas:[t.defaultDuration]},cts:t.cts?t.cts.subarray(0,e):null})}return n}function It(e,t,n){let r=t.firstMedia;if(!r)return e.edits.length&&n.push(`edit list has no media edit`),null;t.mediaEdits>1&&n.push(`edit list has ${t.mediaEdits} media edits, only the first is applied`),r.rate!==1&&n.push(`edit rate ${r.rate} is not applied`);let i=e.fragments.length>0||r.duration<=0?r.mediaTime:r.mediaTime+r.duration;return{start:r.mediaTime,end:i}}function Lt(e,t,n){let r=e.dv,i=e.co64??e.stco,a=e.stsz??e.stz2;if(!r||!i||!a||!e.stsc||i.start+8>i.end||e.stsc.start+8>e.stsc.end||a.start+12>a.end)return null;let o=!!e.co64,s=Math.min(r.getUint32(i.start+4),Math.floor((i.end-i.start-8)/(o?8:4))),c=Math.min(r.getUint32(e.stsc.start+4),Math.floor((e.stsc.end-e.stsc.start-8)/12)),l=e.stsz?r.getUint32(a.start+4):0,u=e.stz2?r.getUint8(a.start+7):32,d=Math.min(r.getUint32(a.start+8),n),f=a.end-a.start-12,p=e=>{if(l)return l;let t=a.start+12;if(u===32)return(e+1)*4<=f?r.getUint32(t+e*4):0;if(u===16)return(e+1)*2<=f?r.getUint16(t+e*2):0;if(u===8)return e<f?r.getUint8(t+e):0;let n=e>>1<f?r.getUint8(t+(e>>1)):0;return e&1?n&15:n>>4},m=0,h=0,g=0,_=0;for(let n=0;n<s&&g<d;n++){for(;_+1<c&&r.getUint32(e.stsc.start+8+(_+1)*12)<=n+1;)_++;let a=c?r.getUint32(e.stsc.start+12+_*12):0,s=o?Number(r.getBigUint64(i.start+8+n*8)):r.getUint32(i.start+8+n*4);for(let e=0;e<a&&g<d;e++,g++){let e=p(g);s<t&&m++,s+e<=t&&h===g&&h++,s+=e}}return{present:m,complete:h}}function Rt(e,t){let n=[16n,16n,30n],r=new Int32Array(9);for(let i=0;i<3;i++)for(let a=0;a<3;a++){let o=0n;for(let r=0;r<3;r++)o+=BigInt(e[i*3+r])*BigInt(t[r*3+a])>>n[r];r[i*3+a]=Number(BigInt.asIntN(32,o))}if(r[0]===65536&&r[4]===65536&&r[8]===1<<30&&!r[1]&&!r[2]&&!r[3]&&!r[5]&&!r[6]&&!r[7])return 0;let i=r[0]/65536,a=r[1]/65536,o=Math.hypot(i,r[3]/65536),s=Math.hypot(a,r[4]/65536);return o===0||s===0?0:Math.trunc(-(Math.atan2(a/s,i/o)*180/Math.PI))||0}m();let zt=65536;function Bt(e,t){return t.signal?.aborted===!0||e?.name===`AbortError`}function Vt(e){return e.brand===`qt `||!e.hasFtyp&&e.topLevel.length>0?`mov`:`mp4`}async function Ht(e,t,n,r){let i=e.size,a=t.start+t.size>i;if(!a&&t.size>268435456)throw new W(`too-large`,`unsupported: moov larger than 256 MiB`);let o=a?Math.min(i-t.start,16777216):t.size,s=await e.view(t.start,o,0),c=r?new DataView(s.buffer.slice(s.byteOffset,s.byteOffset+o)):s,l=G(c,0,c.byteLength);if(!l)throw new W(`truncated`,`incomplete file: moov is truncated`);st(c,l,n,a,t.start),a&&n.warnings.push(`moov size exceeds the file; parsed what is there`)}async function Ut(e,t,n){let r=e.size,i=0,a=t.readAhead.head,o=!1,s=0,c=!1,l=lt(),u=async(t,n,r)=>ut(l,t,n)??e.view(t,n,r);for(;i+8<=r;){if(e.checkAbort(),++s>4e6){n.warnings.push(`too many top-level boxes`);break}let d=c&&!o&&r-i<=16777216?r-i:a,f=await u(i,Math.min(16,r-i),d),p;try{p=G(f,0,r-i,i)}catch(e){if(!o)throw e;n.warnings.push(`ignored trailing data at ${i}: ${e.message}`);break}if(!p)break;let m={...p,start:i,end:Math.min(i+p.size,r)},h=i+p.size,g=p.truncated&&o&&m.type!==`mdat`&&m.type!==`moof`;p.truncated&&(n.truncated=!0,n.warnings.push(g?`ignored trailing data at ${i}: not a box`:`'${m.type}' at ${i} is truncated`));let _={type:m.type,start:i,end:m.end,sidx:null};if(n.topLevel.push(_),g)break;if(m.type===`ftyp`){let t=await e.view(i,Math.min(m.size,1024)),r=m.headerSize;if(r+4<=t.byteLength){n.hasFtyp=!0,n.brand=String.fromCharCode(t.getUint8(r),t.getUint8(r+1),t.getUint8(r+2),t.getUint8(r+3));for(let e=r+8;e+4<=t.byteLength;e+=4)n.compatibleBrands.push(String.fromCharCode(t.getUint8(e),t.getUint8(e+1),t.getUint8(e+2),t.getUint8(e+3)))}}else if(m.type===`moov`)o?n.warnings.push(`ignored a second moov at ${i}`):(n.moov=[i,p.size],await Ht(e,m,n,t.codecConfig),o=!0);else if(m.type===`moof`){if(!o)throw new W(`corrupt`,`corrupt file: movie fragment (moof) before moov`);if(m.size>67108864)throw new W(`too-large`,`corrupt file: moof larger than 64 MiB at ${i}`);let s=Math.min(m.size+16,r-i),c=await u(i,s,0),d=G(c,0,Math.min(m.size,c.byteLength));d&&Ue(c,d,i,n.moofCount,n,t.maxExpandedSamples),n.moofCount++;let f=0;try{let e=G(c,m.size,c.byteLength);e&&e.type===`mdat`&&(f=e.size)}catch{f=0}a=f<=zt?t.readAhead.fragment:Math.min(65536,Math.max(1024,2*m.size+64)),f>zt&&(!l.hints.length&&!l.mfraTried&&(r-i)/(m.size+f)>16&&(l.mfraTried=!0,l.hints=await mt(e)),l.next<l.hints.length&&!ut(l,i+m.size+f,16)&&await dt(e,l,i,a)),t.onProgress&&n.moofCount%64==0&&t.onProgress({phase:`fragments`,done:i,total:r})}else if(m.type===`sidx`&&!p.truncated){let e=await u(i,m.size,0),t=G(e,0,e.byteLength);t&&(_.sidx=We(e,t,i)),_.sidx&&_.sidx.subsegments.length>1&&!l.hints.length&&(l.hints=_.sidx.subsegments.map(([e])=>e))}else if(m.type===`mfra`)break;c=m.type===`mdat`,i=h}if(!o)throw new W(`no-header`,`incomplete file: no moov`)}async function Wt(e,t){let n=e.size,r=new Set(t.tracks.map(e=>e.id)),i=!1,a=!1,o=!1,s=null,c=0;for(let l of t.topLevel){if(l.type===`moof`)c++;else if(l.type===`moov`)i=!0;else if(l.type===`mdat`&&l.end-l.start>8)a=!0;else if(l.type===`sidx`&&i&&l.sidx&&!l.sidx.hierarchical&&r.has(l.sidx.referenceId)){let t=l.sidx.coverageEnd===n;!t&&n>=4&&(s===null&&(s=(await e.view(n-4,4,0)).getUint32(0)),t=l.sidx.coverageEnd===n-s),t&&l.sidx.firstOffset===0&&(o=!0)}if(i&&a&&(o||l.end===n)){t.ffprobeMoofLimit=c;return}}}function Gt(e){let t=1/0,n=!1,r=!1;for(let i of e.topLevel)i.type===`mdat`&&(t=Math.min(t,i.start)),n||=i.type===`moof`,r||=!n&&i.type===`sidx`;let i=e.moov,a=i?i[0]:1/0;if(a===t)return null;let o=e.hasMvex?`fragmented`:t<a?`moov-at-end`:`faststart`;return{kind:o,moovOffset:i?a:null,moovSize:i?i[1]:null,sidx:r,emptyMoov:o===`fragmented`&&e.tracks.every(t=>!Kt(t,e)||!t.sampleCount)}}function Kt(e,t){return t.chapterTrackIds.has(e.id)?!1:e.handler===`vide`||e.handler!==`soun`&&Le(e.originalFormat??e.sampleEntry)}let qt=[`presentedFrames`,`minFps`,`maxFps`,`medianFrameInterval`,`isVfr`,`vfrRatio`,`distinctDeltas`,`duplicateTimestamps`,`nominalFps`,`dominantFps`,`timestampsQuantized`];function Jt(e,t,n,r,a){let o=i(r.reportedId),s=o.warnings;r.reportedId!==e.id&&s.push(`duplicate track_ID ${e.id}: reported as ${r.reportedId}`),s.push(...e.warnings);let c=e.handler===`auxv`;c&&s.push(`auxiliary video track (handler 'auxv')`);let l=bt(e);l&&s.push(`missing mandatory sample tables: ffprobe ignores the samples and timing of this track`);let d=e.hasMdhd?e.timescale:t.timescale;e.hasMdhd||(s.push(`no mdhd: using the movie timescale`),e.timescale=d),o.fourccOrCodecId=e.sampleEntry,o.codecName=Re(e.originalFormat??e.sampleEntry,e.esdsObjectType,e.hasHvcc),e.originalFormat&&s.push(`encrypted: ${e.sampleEntry} of ${e.originalFormat}`),e.stsdCount>1&&s.push(`${e.stsdCount} sample descriptions, first used`),o.width=e.width,o.height=e.height,o.rotation=Rt(e.matrix,t.matrix),o.enabled=e.enabled,o.timescale=d,n.codecConfig&&(o.codecConfig={family:`isobmff-moov`,moov:e.dv,trak:t.tracks.indexOf(e)});let f=gt(e),p=t.truncated,m=0;for(let t of e.fragments)m+=t.present;let h=f.moovSamples+f.fragmentSamples,g=f.moovSamples+m;o.frames=g,o.isStill=g<=1,f.moovSamples>0&&e.fragments.length>0&&s.push(`hybrid fragmented file: moov holds ${f.moovSamples} of ${h} samples`),g<h&&s.push(`truncated: ${h-g} of ${h} samples missing`);let _=yt(e,t);o.avgFps=_.avg,o.avgFpsFfprobe=r.ffprobeFails?null:_.ffprobe,o.avgFpsFfprobe!==null&&o.avgFpsFfprobe!==u(_.avg)&&s.push(`ffprobe reads part of the fragments: avg_frame_rate ${o.avgFpsFfprobe}`),_.ffprobe===null&&!r.ffprobeFails&&h>0&&s.push(`avg_frame_rate of ffprobe is not reproduced: its header values are incomplete or overrun a box`);let v=!a||r.ffprobeFails||l?null:Nt(e,t,f.moovSamples,n.maxExpandedSamples,s);o.rFpsFfprobe=v?u(v):null;let y=xt(e,t.timescale,f);if(!l){let n=St(e,t,f,y);o.durationSec=n.durationTs/d,o.startSec=n.startPts===null?null:n.startPts/d}let b=f.moovSamples;if(e.sampleCount!==null&&e.sampleCount<b&&(s.push(`stts describes ${b} samples but the sample size table holds ${e.sampleCount}`),b=e.sampleCount),l||!a)return o.presentedFrames=0,Yt(o),{result:o,enabled:e.enabled,auxiliary:c};if(p&&b>0){let n=Lt(e,t.fileSize,f.moovSamples);n&&n.complete<b&&(s.push(`truncated: ${n.complete} of ${b} samples complete`),b=n.complete)}let x=It(e,y,s);x&&!e.cttsCounts&&!e.fragments.length&&x.start<=0&&(x.end<=x.start||x.end>=f.moovDuration)&&(x=null);let S=a({segments:Ft(e,b),timescale:d,editWindow:x,maxExpandedSamples:n.maxExpandedSamples});s.push(...S.warnings);for(let e of qt)o[e]=S[e];return S.presentedAvgFps&&(o.avgFps=S.presentedAvgFps),o.duplicateTimestamps>0&&s.push(`${o.duplicateTimestamps} duplicate timestamps`),Yt(o),S.presentedAvgFps&&(o.provenance.avgFps=`exact`),{result:o,enabled:e.enabled,auxiliary:c,profile:S.profile}}function Yt(e){let t=e.provenance;for(let e of[`codec`,`dimensions`,`rotation`,`frames`,`avgFps`])t[e]=`header`;e.durationSec!==null&&(t.durationSec=`header`),e.startSec!==null&&(t.startSec=`header`),e.presentedFrames!==null&&(t.presentedFrames=`exact`),e.isVfr!==null&&(t.minFps=`exact`,t.maxFps=`exact`,t.isVfr=`exact`,t.duplicateTimestamps=`exact`,t.medianFrameInterval=`exact`),e.nominalFps&&(t.nominalFps=`exact`),e.dominantFps&&(t.dominantFps=`exact`)}function Xt(e){let t=null,n=e=>(e.result.frames??0)>1?e.auxiliary?.5:e.enabled?2:1:0;for(let r of e)(!t||n(r)>n(t)||n(r)===n(t)&&(r.result.frames??0)>(t.result.frames??0))&&(t=r);return t?t.result.trackId:null}function Zt(e,t){let n=2**53-1,r=n,i=n,a=-n,o=-n,s=-n,c=-n;for(let n of e.tracks){if(!n.hasMdhd)continue;let l=t.has(n)||n.handler===`soun`;if(bt(n)){let e=Q(n.mdhdDuration,1e6,9e4);l?s=Math.max(s,e):c=Math.max(c,e);continue}let u=gt(n),d=St(n,e,u,xt(n,e.timescale,u)),f=Q(d.durationTs,1e6,n.timescale);if(d.startPts!==null){let e=Q(d.startPts,1e6,n.timescale);l?(r=Math.min(r,e),a=Math.max(a,e+f)):(i=Math.min(i,e),o=Math.max(o,e+f))}l?s=Math.max(s,f):c=Math.max(c,f)}return(r===n||r>i&&r-i<1e6)&&(r=i),(a===-n||a<o&&o-a<1e6)&&(a=o),(s===-n||s<c&&c-s<1e6)&&(s=c),r!==n&&a!==-n&&a>=r&&(s=Math.max(s,a-r)),s>0?s/1e6:null}function Qt(e){let t=new Map,n=new Set,r=e.reduce((e,t)=>Math.max(e,t.id),0)+1;for(let i of e)n.has(i.id)?t.set(i,r++):(n.add(i.id),t.set(i,i.id));return t}De();async function $t(e,t){let n=qe(e.size),i=t=>{if(Bt(t,e))throw t;let i=t instanceof Error?t.message:String(t),a=r(Vt(n),t?.errorCode?i:`corrupt file: ${i}`);return a.errorCode=Me(t),a.layout=Gt(n),a.brand=n.brand,a.warnings=n.warnings,{analysis:a,movie:n}};try{await Ut(e,t,n),await Wt(e,n);let i=r(Vt(n));i.brand=n.brand,i.scan=`exact`,i.warnings=n.warnings;let a=n.ffprobeReject,o=a!==null&&a.moof<n.ffprobeMoofLimit;o&&n.warnings.push(`ffprobe 8.1.1 ${a.reason}`);let s=Qt(n.tracks);[...s].some(([e,t])=>e.id!==t)&&n.warnings.push(`duplicate track_ID values`);let c=n.tracks.filter(e=>Kt(e,n)),l=c.map(e=>Jt(e,n,t,{reportedId:s.get(e)??e.id,ffprobeFails:o},re));for(let e of l)e.result.rateProfile=await le(e.profile??null);return i.videoTracks=l.map(e=>e.result),i.audioTrackCount=n.tracks.filter(e=>e.handler===`soun`).length,i.primaryTrackId=Xt(l),i.formatDurationSec=Zt(n,new Set(c)),i.layout=Gt(n),{analysis:i,movie:n}}catch(e){return i(e)}}async function en(e,t){return(await $t(e,t)).analysis}let tn=new Set([`ftyp`,`moov`,`mdat`,`free`,`skip`,`wide`,`pnot`,`uuid`,`moof`,`styp`,`sidx`]),nn=[26,69,223,163],rn=[{bytes:[137,80,78,71,13,10,26,10],offset:0,label:`PNG image`},{bytes:[255,216,255],offset:0,label:`JPEG image`},{bytes:[71,73,70,56],offset:0,label:`GIF image`},{bytes:[82,73,70,70],offset:0,label:`RIFF file (AVI/WAV/WebP)`},{bytes:[79,103,103,83],offset:0,label:`Ogg file`},{bytes:[70,76,86,1],offset:0,label:`FLV file`},{bytes:[0,0,1,186],offset:0,label:`MPEG program stream`},{bytes:[37,80,68,70],offset:0,label:`PDF document`},{bytes:[80,75,3,4],offset:0,label:`ZIP archive`},{bytes:[73,68,51],offset:0,label:`MP3 file`}];function an(e,t,n){if(e.length<n+t.length)return!1;for(let r=0;r<t.length;r++)if(e[n+r]!==t[r])return!1;return!0}function on(e){for(let t=4;t<8;t++){let n=e[t];if(n<32||n>126)return!1}return!0}function sn(e){let t=Math.min(e.length,512);if(t===0)return!1;for(let n=0;n<t;n++){let t=e[n];if(t!==9&&t!==10&&t!==13&&(t<32||t===127))return!1}return!0}function cn(e){for(let t of rn)if(an(e,t.bytes,t.offset))return t.label;return e.length>=188&&e[0]===71&&e[188]===71?`MPEG transport stream`:sn(e)?`text file`:`no known signature`}function ln(e){if(e.length===0)return{kind:`unknown`,reason:`empty file`};if(an(e,nn,0))return{kind:`matroska`,reason:`EBML header 1A45DFA3`};if(e.length>=8&&on(e)){let t=String.fromCharCode(e[4],e[5],e[6],e[7]);if(tn.has(t)){let n=e[0]*16777216+e[1]*65536+e[2]*256+e[3];if(n===0)return{kind:`isobmff`,reason:`top-level '${t}' box running to end of file`};if(n>=8)return{kind:`isobmff`,reason:`top-level '${t}' box`};if(n===1){if(e.length<16)return{kind:`unknown`,reason:`'${t}' box with a truncated 64-bit size`};let n=0;for(let t=8;t<16;t++)n=n*256+e[t];if(n>=16)return{kind:`isobmff`,reason:`top-level '${t}' box with 64-bit size`}}return{kind:`unknown`,reason:`'${t}' box with invalid size ${n}`}}}return e.length<8?{kind:`unknown`,reason:`too small (${e.length} bytes)`}:{kind:`unknown`,reason:cn(e)}}async function un(e){let{kind:t}=ln(new Uint8Array(await e.slice(0,Math.min(1024,e.size)).arrayBuffer()));return t===`unknown`?null:t}y();function dn(e,t){let{perReadMs:n,bytesPerMs:r}=t.costModel,i=t.readAhead.head;return e<Math.max(i,Math.min(i+n*r,1048576))?e:i}function fn(e){return e?.name===`AbortError`}function pn(e){return e instanceof Error?e.message||e.name:String(e)}async function mn(e,t,n,i){let a=performance.now(),o=g(n);Oe(o.signal);let s={name:t,size:e.size,...r(`unknown`),errorCode:null,layout:null,io:{reads:0,bytesRead:0,ms:0},engine:`own`},c=null,l=0,u=!1;try{if(c=new ke(e,{headWindow:o.readAhead.head,signal:o.signal}),c.size===0)throw U(`empty-file`,`not a recognised container: empty file`);let t=ln(await c.bytes(0,Math.min(1024,c.size),dn(c.size,o)));if(t.kind===`unknown`)throw U(`unrecognised`,`not a recognised container: ${t.reason}`);s.container=t.kind===`isobmff`?`mp4`:`matroska`;let n=performance.now();u=!0;let r=await i(t.kind);u=!1,l=performance.now()-n,Object.assign(s,await r(c,o))}catch(e){if(o.signal?.aborted||fn(e))throw e;s.error=pn(e),s.errorCode=Me(e,u?`load-failed`:`internal`)}return c&&(s.io.reads=c.reads,s.io.bytesRead=c.bytesFetched),s.io.ms=performance.now()-a-l,s}let $=(e,t)=>Object.assign(Error(e),{code:t}),hn=e=>e===`isobmff`||e===`matroska`;function gn(e){let t=self,n=new Map,r=new Map,i=e=>t.postMessage({v:1,...e}),a=t=>{let r=n.get(t);if(!r){let i=Object.hasOwn(e,t)?e[t]:void 0;if(!i)return Promise.reject($(`unknown engine ${t}`,`unknown-engine`));r=(typeof i==`function`?Promise.all([i(),Promise.resolve().then(()=>(De(),O))]).then(([e])=>e):Promise.resolve(i)).catch(e=>{throw n.delete(t),e}),n.set(t,r)}return r},o=(e,t,n=!1,r=!1)=>{let a=t?.code,o=a===`unknown-engine`||a===`protocol`;i({type:`error`,id:e,message:pn(t),aborted:n||fn(t),...o?{code:a}:r&&{reason:`load`}})},s=async e=>{let t=new AbortController;r.set(e.id,t);let n=0,s=!0;try{if(!(e.file instanceof Blob))throw $(`malformed analyze request`,`protocol`);let r=await a(e.engine);if(s=!1,r.containers!==`any`){let t=await un(e.file);if(!t||!r.containers.includes(t))return i({type:`skipped`,id:e.id,reason:`unsupported-container`,family:t})}let o=await r.run(e.file,e.name,{...e.options,signal:t.signal,onProgress:t=>{let r=performance.now();r-n<50||(n=r,i({type:`progress`,id:e.id,progress:t}))}});i({type:`result`,id:e.id,result:o})}catch(n){o(e.id,n,t.signal.aborted,s)}finally{r.delete(e.id)}},c=async e=>{try{if(![e.engines,e.containers].every(Array.isArray)||!e.containers.every(hn))throw $(`malformed warm request`,`protocol`);await Promise.all(e.engines.map(async t=>(await a(t)).warm?.(e.containers))),i({type:`warmed`,id:e.id})}catch(t){o(e.id,t,!1,!0)}};t.onmessage=({data:e})=>{if(e?.v!==1)return o(e?.id??0,$(`unsupported protocol version ${e?.v}`,`protocol`));if(e.type===`cancel`)r.get(e.id)?.abort();else if(e.type===`analyze`)s(e);else if(e.type===`warm`)c(e);else{let t=e;o(t.id,$(`unknown request type ${t.type}`,`protocol`))}}}let _n={isobmff:`ISO BMFF`,matroska:`Matroska`},vn=(e,t)=>`the own ${_n[e]} worker does not read ${_n[t]}`;function yn(e,t){return{containers:`any`,run:(n,r,i)=>mn(n,r,i,n=>{if(n!==e)throw U(`unsupported-container`,vn(e,n));return t})}}gn({own:yn(`isobmff`,en)})})();
@@ -1 +1 @@
1
- (function(){var e=Object.defineProperty,t=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},n=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r};function r(e,t){let n={...e};if(!t)return n;for(let e of Object.keys(t)){let r=t[e];r!==void 0&&(n[e]=r)}return n}function i(e={}){return{signal:e.signal??null,matroskaMode:e.matroskaMode??`auto`,exactBudgetMs:e.exactBudgetMs??150,readAhead:r(o,e.readAhead),costModel:r(s,e.costModel),maxExpandedSamples:e.maxExpandedSamples??5e6,onProgress:e.onProgress??null}}function a(e,t,n){return t*e.perReadMs+n/e.bytesPerMs}var o,s,c=t((()=>{o={head:65536,fragment:1048576,matroskaScan:1048576,tail:262144},s={perReadMs:.8,bytesPerMs:5e5,perBlockMs:2e-4}}));function l(e){return e<0n?-e:e}function u(e,t){for(;t!==0n;){let n=e%t;e=t,t=n}return e}function d(e,t){if(typeof e==`bigint`)return e;if(!Number.isSafeInteger(e))throw RangeError(`${t} must be a safe integer, got ${e}`);return BigInt(e)}function f(e,t,n=v){let r=d(e,`num`),i=d(t,`den`),a=d(n,`max`),o=0n,s=1n,c=1n,f=0n,p=r<0n!=i<0n,m=u(l(r),l(i));for(m!==0n&&(r=l(r)/m,i=l(i)/m),r<=a&&i<=a&&(c=r,f=i,i=0n);i!==0n;){let e=r/i,t=r-i*e,n=e*c+o,l=e*f+s;if(n>a||l>a){if(c!==0n&&(e=(a-o)/c),f!==0n){let t=(a-s)/f;t<e&&(e=t)}i*(2n*e*f+s)>r*f&&(c=e*c+o,f=e*f+s);break}o=c,s=f,c=n,f=l,r=i,i=t}let h=Number(c);return{num:p?-h:h,den:Number(f),exact:i===0n}}function p(e){return e.den===0?0:e.num/e.den}function m(e){return e?`${e.num}/${e.den}`:`0/0`}function h(e,t){return{num:e,den:t,value:p({num:e,den:t})}}function g(e,t,n=v){let r=f(e,t,n);return h(r.num,r.den)}function _(e,t,n){return t<=0||n<=0||e<=0?null:g(BigInt(e)*BigInt(t),n,v)}var v,y=t((()=>{v=2147483647}));c(),y();function b(e,t=null){return{container:e,brand:null,formatDurationSec:null,scan:null,videoTracks:[],audioTrackCount:0,primaryTrackId:null,error:t,warnings:[]}}function x(e){return{trackId:e,fourccOrCodecId:``,codecName:``,width:0,height:0,rotation:0,timescale:0,frames:null,presentedFrames:null,durationSec:null,startSec:null,avgFps:null,avgFpsFfprobe:null,rFpsFfprobe:null,nominalFps:null,dominantFps:null,minFps:null,maxFps:null,isVfr:null,vfrRatio:0,distinctDeltas:0,duplicateTimestamps:0,timestampsQuantized:!1,isStill:!1,rateProfile:null,provenance:{},warnings:[]}}var S=n({CUSUM_ALARM_PERIODS:()=>2,FREEZE_FACTOR:()=>4,FREEZE_MIN_SEC:()=>De,MAX_ANOMALIES:()=>50,MAX_BUCKETS:()=>120,MAX_SEGMENTS:()=>50,MIN_SEGMENT_FRAMES:()=>5,MIN_SEGMENT_SEC:()=>w,UNEVEN_DOMINANT_SHARE:()=>T,rateProfile:()=>k});function C(e,t,n){e.t0=Math.min(e.t0,t.t0),e.t1=Math.max(e.t1,t.t1),e.frames+=t.frames,n?(e.n+=t.n,e.sum+=t.sum,e.ex+=t.ex):e.ex+=t.t1-t.t0}var w,T,E,D,O,k,ee=t((()=>{ke(),w=.5,T=.8,E=1+Te,D=e=>String(+e.toPrecision(4)),O=e=>({t0:e,t1:e,n:0,sum:0,frames:0,ex:0,d:0,kind:`steady`}),k=(e,t,n,r)=>{let i=t,a=De*i,o=e=>i*e.n/e.sum,s=e=>e.n>=5&&e.t1-e.t0>=.5*i,c=[],l=e=>{let t=c[c.length-1];s(e)?c.push(e):t?.kind===`short`?C(t,e,!0):c.push({...e,kind:`short`})},u=O(0),d=O(0),f=O(0),p=0,m=0,h=0,g=0,_=0,v=!1,y=()=>{u.t1=p,v?c.push({...u,kind:`hold`}):l(u),u=O(p),v=!1,g=_=0},b=Math.min(120,Math.floor(n/2)),x=r/b,S=new Float64Array(b),w=(e,t)=>{u.n+=e,u.sum+=e*t,u.frames+=e,p+=e*t},T=(e,t)=>{let n=e;if(t<=0)u.frames+=n,h+=n;else{for(let e=p,r=e+n*t,i=Math.floor(e/x);e<r&&i<b;i++){let n=Math.min(r,(i+1)*x);n>e&&(S[i]+=(n-e)/t),e=Math.max(e,n)}for(;n>0;){let e=u.sum/u.n;if(u.n&&t>=Math.max(a,4*e)){y(),v=!0,w(1,t),n--;continue}if(v&&Math.abs(t-e)>.075*e&&y(),v=!1,!u.n){w(n,t);return}let r=t-e,i=Ee*e,o=2*e,s=Math.abs(r)>i,c=s?1:n;if(s&&(r>0?!g||r-i>o:!_)){let e={...u,t1:p,d:t};r>0?d=e:f=e}if(g=Math.max(0,g+c*(r-i)),_=Math.max(0,_-c*(r+i)),w(c,t),n-=c,g>o||_>o){let e=g>o?d:f,t=u.n-e.n-1;t>0&&Math.abs(Math.log(e.d*e.n/e.sum))<Math.abs(Math.log(e.d*t/(u.sum-e.sum-e.d)))&&(e.t1+=e.d,e.n++,e.sum+=e.d,e.frames++),u.t0=e.t1,u.n-=e.n,u.sum-=e.sum,u.frames-=e.frames,l(e),g=_=0}}}},k=0,ee=0;if(e((e,t)=>{e>0&&(m+=e,k&&t!==ee&&(T(k,ee),k=0),k+=e,ee=t)}),k&&T(k,ee),!(p>0))return null;u.n?y():c[c.length-1].frames+=u.frames;let A=[],te=(e,t,n,r,a=t.t1-t.t0)=>{A.push({kind:e,atSec:t.t0/i,durationSec:a/i,fromFps:n,toFps:r})},j=[],ne=(e,t)=>e?Math.abs(Math.log(o(e)/t)):1/0;c.forEach((e,t)=>{let n=j[j.length-1];if(e.kind===`short`||e.kind===`hold`){let r=o(e),i=c[t+1]?.kind===`steady`?c[t+1]:void 0,l=ne(n,r)<=ne(i,r)?n:i;if(e.kind=s(e)?`variable`:`steady`,e.kind===`steady`&&l){let t=o(l),n=e.sum>=e.n*Math.max(a,4*l.sum/l.n)?`freeze`:r*E<t?`gap`:r>t*E?`burst`:null;n&&te(n,e,t,r),C(l,e,!n);return}}let r=n?o(e)/o(n):0;n?.kind===`steady`&&e.kind===`steady`&&r<E&&r*E>1?C(n,e,!0):j.push(e)});let M=j[j.length-1],re=p+M.sum/M.n;M.frames+=n-m,M.t1=re;for(let e=1;e<j.length;e++){let t=j[e-1],n=j[e],r=o(n)/o(t);(t.kind===`steady`&&n.kind===`steady`||r>=E||r*E<=1)&&te(`rate-change`,n,o(t),o(n),0)}A.sort((e,t)=>e.atSec-t.atSec);let N=j.filter(e=>e.kind===`steady`).map(e=>[o(e),e.t1-e.t0-e.ex,e.n]).sort((e,t)=>e[0]-t[0]),P=0,F=0,I=0,L=0,R=0;for(let[e,t,n]of N){for(I+=t,L+=n;e>=N[R][0]*E;R++)I-=N[R][1],L-=N[R][2];P=Math.max(P,I),F=Math.max(F,L)}let ie=P/re,ae=ie<.8||F<.8*(m-h)||N.length>1&&N[N.length-1][0]>=N[0][0]*E,oe=j.slice(0,3).map(e=>`${e.kind===`variable`?`~`:``}${D(o(e))} fps for ${D((e.t1-e.t0)/i)} s`);j.length>3&&oe.push(`+${j.length-3} more`);let z=``,se=(e,t)=>{e&&(z+=`${z?`, `:`; `}${e} ${t}${e>1?`s`:``}`)};for(let e of[`freeze`,`gap`,`burst`])se(A.filter(t=>t.kind===e).length,e);return se(h,`duplicate timestamp`),{segments:j.slice(0,50).map(e=>({startSec:e.t0/i,endSec:e.t1/i,frames:e.frames,fps:o(e),kind:e.kind})),moreSegments:Math.max(0,j.length-50),anomalies:A.slice(0,50),moreAnomalies:Math.max(0,A.length-50),buckets:{bucketSec:x/i,fps:Array.from(S,e=>e*i/x)},uneven:ae,dominantShare:ie,summary:`${ae?`Uneven`:z?`Mostly steady`:`Steady`}: ${oe.join(`, `)}${z}`}}})),A=n({CUSUM_DRIFT:()=>Ee,FREEZE_FACTOR:()=>4,FREEZE_MIN_SEC:()=>De,MAX_REORDER_DEPTH:()=>16,RATE_CHANGE_RELATIVE:()=>Te,SNAP_RELATIVE_TOLERANCE:()=>Ce,VFR_RELATIVE_TOLERANCE:()=>we,analyzeTimeline:()=>P,msGridTicks:()=>j,rateFromTicks:()=>N,rateProfileOf:()=>de,reorderDepthFromCts:()=>M,snapToStandardRate:()=>te,vfrTolerance:()=>ne});function te(e,t=Ce){if(!(e>0))return null;let n=null,r=1/0;for(let t of Oe){let i=Math.abs(e-t.value)/t.value;i<r&&(r=i,n=t)}return r<=t?n:null}function j(e,t){if(!(e>1e3)||t.length===0)return 0;for(let n of t){let t=n*1e3;if(!Number.isSafeInteger(t)||t%e!==0)return 0}return e/1e3}function ne(e,t,n){return Math.max(1,Math.round(we*e),j(t,n))}function M(e,t,n){return!(t>e)||!(n>0)?0:Math.min(16,Math.ceil((t-e)/n))}function re(e){if(Number.isInteger(e)||!(e>0))return null;let t=1e9/e,n=Math.round(t);return n>0&&Math.abs(t-n)<=1e-6*n?n:null}function N(e,t){let n=re(e);return n!==null&&t>0&&Number.isSafeInteger(n*t)?g(1e9,n*t,2**53-1):L(e,t,2**53-1)}function P(e){let t=[],n=ie(e.timescale,t);return`segments`in e?ve(e,n,t):Se(e,n,t)}function F(e){return`counts`in e&&`deltas`in e?{n:Math.min(e.counts.length,e.deltas.length),counts:e.counts,values:e.deltas}:{n:e.length,counts:null,values:e}}function I(e){return e?`counts`in e&&`offsets`in e?{n:Math.min(e.counts.length,e.offsets.length),counts:e.counts,values:e.offsets}:{n:e.length,counts:null,values:e}:null}function L(e,t,n=v){if(!(e>0)||!(t>0))return null;if(Number.isSafeInteger(e)&&Number.isSafeInteger(t))return g(e,t,n);let r=1e6,i=Math.round(e*r),a=Math.round(t*r);return Number.isSafeInteger(i)&&Number.isSafeInteger(a)?g(i,a,n):h(e/t,1)}function R(e,t,n){if(!(t>0)||!(n>0))return null;let r=re(e);return r!==null&&Number.isSafeInteger(t)&&Number.isSafeInteger(n)?g(BigInt(t)*1000000000n,BigInt(r)*BigInt(n),v):Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&Number.isSafeInteger(n)?g(BigInt(e)*BigInt(t),n,v):L(e*t,n)}function ie(e,t){return e>0&&Number.isFinite(e)?e:(t.push(`invalid timescale ${e}, using 1`),1)}function ae(e){return e?{ws:e.start,we:e.end>e.start?e.end:1/0}:{ws:-1/0,we:1/0}}function oe(e,t){return{timescale:e,sampleCount:0,durationSum:0,avgFps:null,avgFpsString:`0/0`,presentedAvgFps:null,presentedFrames:null,firstPts:null,lastPts:null,deltaCount:0,excludedTailDeltas:0,reorderDepth:0,duplicateTimestamps:0,discontinuities:0,histogram:[],distinctDeltas:0,minDelta:null,maxDelta:null,medianDelta:null,meanDelta:null,tolerance:null,minFps:null,maxFps:null,isVfr:null,vfrRatio:0,nominalFps:null,dominantFps:null,timestampsQuantized:!1,profile:null,fastPath:!1,warnings:t}}function z(e,t,n,r,i,a){let o=e.timescale,s=e.isVfr===!1&&n-t<=(e.tolerance??0)&&n<2*t;return n>t*1.075&&!s?e=>e(r,o,i,a):null}function se(e,t){let n=e.medianDelta,r=e.timescale;!n||!t||t<4*n||t<.5*r||e.warnings.push(`last frame held ${(t/r).toFixed(3)} s (${(t/n).toFixed(1)}x the median frame interval): the average is below the frame rate`)}function ce(e,t){if(se(e,t),e.presentedFrames===null||e.presentedFrames<=0||e.firstPts===null||e.lastPts===null)return;let n=t>0?t:e.medianDelta??0;e.presentedAvgFps=R(e.timescale,e.presentedFrames,e.lastPts-e.firstPts+n)}function le(e,t){let n=0;for(let[r,i]of B(e)){if(t<n+r)return i;n+=r}return 0}async function ue(){try{let{rateProfile:e}=await Promise.resolve().then(()=>(ee(),S));return e}catch{return null}}async function de(e){let t=e&&await ue();return t?e(t):null}function fe(e,t){return e-t>=2?e-t:e}function pe(e,t,n){let r=e.timescale,i=[...t.keys()].sort((e,t)=>e-t),a=i.map(e=>[e,t.get(e)??0]),o=0,s=0;for(let[e,t]of a)o+=t,s+=e*t;if(e.histogram=a,e.distinctDeltas=i.length,o===0)return;let c=0,l=i[0];for(let[e,t]of a)if(c+=t,c*2>=o){l=e;break}let u=i[0],d=0;for(let[e,t]of a)t>d&&(u=e,d=t);let f=j(r,i),p=Math.max(1,Math.round(we*l),f),m=0;for(let[e,t]of a)Math.abs(e-l)>p&&(m+=t);let h=i[0],g=i[i.length-1],_=o>=2&&m>0;if(e.minDelta=h,e.maxDelta=g,e.medianDelta=l,e.meanDelta=s/o,e.tolerance=p,e.minFps=N(r,g),e.maxFps=N(r,h),e.isVfr=_,e.vfrRatio=m/o,i.length===1){let t=N(r,h);t&&(e.nominalFps={...t,kind:`exact`})}else if(_&&d*2>=o){let t=N(r,u);t&&(e.dominantFps={rate:t,share:d/o})}e.timestampsQuantized=(n||f>0)&&!_&&i.length>1}function me(e){if(e.nominalFps||e.isVfr!==!1||e.distinctDeltas<2||!e.avgFps)return;let t=te(e.meanDelta?e.timescale/e.meanDelta:e.avgFps.value);t&&(e.nominalFps={...t,kind:`snapped`})}function he(e){let t={n:0,d:0,constantCts:!0,ctsValue:0,ctsMin:1/0,ctsMax:-1/0,firstDelta:0,negativeDurations:!1,discontinuities:0,startDts:0,ctsMismatch:0},n=!1,r=e=>{n?e!==t.ctsValue&&(t.constantCts=!1):(t.ctsValue=e,n=!0),e<t.ctsMin&&(t.ctsMin=e),e>t.ctsMax&&(t.ctsMax=e)},i=0;for(let n=0;n<e.length;n++){let a=e[n];a.baseDts!==void 0&&a.baseDts!==null&&(n===0?t.startDts=a.baseDts:a.baseDts!==i&&t.discontinuities++,i=a.baseDts);let o=F(a.durations),s=0;for(let e=0;e<o.n;e++){let n=o.counts?o.counts[e]:1;if(n<=0)continue;let r=o.values[e];s+=n,t.d+=n*r,i+=n*r,r<0&&(t.negativeDurations=!0),t.firstDelta===0&&r>0&&(t.firstDelta=r)}t.n+=s;let c=I(a.cts),l=0,u=0;if(c){for(let e=0;e<c.n;e++){let t=c.counts?c.counts[e]:1;if(t<=0)continue;u+=t;let n=Math.min(t,s-l);n<=0||(l+=n,r(c.values[e]))}u!==s&&t.ctsMismatch++}l<s&&r(0)}return n||(t.ctsMin=0,t.ctsMax=0),t}function*B(e){for(let t of e){let e=F(t.durations);for(let t=0;t<e.n;t++){let n=e.counts?e.counts[t]:1;n>0&&(yield[n,e.values[t]])}}}function ge(e,t,n,r){if(n===-1/0)return 0;if(n===1/0)return r;let i=t,a=0;for(let[t,r]of B(e)){if(r===0){if(i<n){a+=t;continue}return a}if(i+(t-1)*r<n)a+=t,i+=t*r;else return a+Math.max(0,Math.min(t,Math.ceil((n-i)/r)))}return a}function _e(e,t,n){let r=t,i=0;for(let[t,a]of B(e)){if(n<i+t)return r+(n-i)*a;i+=t,r+=t*a}return r}function ve(e,t,n){let r=e.segments,i=he(r);i.ctsMismatch>0&&n.push(`composition offsets do not match the sample count in ${i.ctsMismatch} segment(s)`),i.discontinuities>0&&n.push(`decode timestamp discontinuities: ${i.discontinuities}`),i.negativeDurations&&n.push(`negative sample durations`),Number.isSafeInteger(i.d)||n.push(`duration sum exceeds 2^53-1`);let a=oe(t,n);if(a.sampleCount=i.n,a.durationSum=i.d,a.discontinuities=i.discontinuities,a.avgFps=R(t,i.n,i.d),a.avgFpsString=m(a.avgFps),i.n===0)return a.presentedFrames=0,a;let o=e.reorderDepth??M(i.ctsMin,i.ctsMax,i.firstDelta);a.reorderDepth=o;let s=1+o,{ws:c,we:l}=ae(e.editWindow),u=e.tickQuantized??!1;if(!e.forceExpand&&i.constantCts&&i.discontinuities===0&&!i.negativeDurations){a.fastPath=!0;let e=i.startDts+i.ctsValue,t=ge(r,e,c,i.n),n=Math.max(t,ge(r,e,l,i.n));if(a.presentedFrames=n-t,n===t)return a;let o=_e(r,e,t),d=_e(r,e,n-1);a.firstPts=o,a.lastPts=d;let f=n-t-1,p=fe(f,s),m=new Map,h=0,g=1/0,_=0;for(let[e,n]of B(r)){if(h>=t+f)break;let r=Math.max(h,t),i=Math.min(h+e,t+f);if(i>r){if(n===0)a.duplicateTimestamps+=i-r;else{g=Math.min(g,n),_=Math.max(_,n);let i=Math.min(h+e,t+p);i>r&&(m.set(n,(m.get(n)??0)+(i-r)),a.deltaCount+=i-r)}}h+=e}return a.excludedTailDeltas=f-p,pe(a,m,u),me(a),ce(a,le(r,n-1)),a.profile=z(a,g,_,e=>{let n=0;for(let[i,a]of B(r)){if(n>=t+f)break;let r=Math.max(n,t),o=Math.min(n+i,t+f);o>r&&e(o-r,a),n+=i}},n-t,d-o),a}let d=e.maxExpandedSamples??5e6;if(i.n>d)return n.push(`per-sample analysis skipped: ${i.n} samples exceed the limit of ${d}`),a;let f=new Float64Array(i.n),p=0,h=0;for(let e of r){e.baseDts!==void 0&&e.baseDts!==null&&(h=e.baseDts);let t=p,n=F(e.durations);for(let e=0;e<n.n;e++){let t=n.counts?n.counts[e]:1,r=n.values[e];for(let e=0;e<t;e++)f[p++]=h,h+=r}let r=I(e.cts);if(r){let e=t;for(let t=0;t<r.n&&e<p;t++){let n=r.counts?r.counts[t]:1,i=r.values[t];for(let t=0;t<n&&e<p;t++)f[e++]+=i}}}let g=-1;for(let e=0;e<f.length;e++){let t=f[e];t>=c&&t<l&&(g<0||t>=f[g])&&(g=e)}let _=g>=0?le(r,g):0;return be(a,ye(f,c,l),s,u),ce(a,_),me(a),a}function ye(e,t,n){let r=e.length;if(t!==-1/0||n!==1/0){r=0;for(let i=0;i<e.length;i++){let a=e[i];a>=t&&a<n&&(e[r++]=a)}}let i=e.subarray(0,r);for(let e=1;e<r;e++)if(i[e]<i[e-1]){i.sort();break}return i}function be(e,t,n,r){let i=t.length;if(e.presentedFrames=i,i===0)return;e.firstPts=t[0],e.lastPts=t[i-1];let a=i-1,o=fe(a,n),s=new Map,c=1/0,l=0;for(let n=1;n<=a;n++){let r=t[n]-t[n-1];r<=0?e.duplicateTimestamps++:(c=Math.min(c,r),l=Math.max(l,r),n<=o&&(s.set(r,(s.get(r)??0)+1),e.deltaCount++))}e.excludedTailDeltas=a-o,pe(e,s,r),e.profile=z(e,c,l,e=>{for(let n=1;n<=a;n++)e(1,t[n]-t[n-1])},i,t[a]-t[0])}function xe(e){let t=-1/0,n=0;for(let r=0;r<e.length;r++){let i=e[r];i>t?t=i:t-i>n&&(n=t-i)}return n}function Se(e,t,n){let r=e.pts,i=r.length,a=oe(t,n);if(a.sampleCount=i,i===0)return a.presentedFrames=0,a;let o=1/0,s=-1/0;for(let e=0;e<i;e++){let t=r[e];t<o&&(o=t),t>s&&(s=t)}let{ws:c,we:l}=ae(e.editWindow),u=ye(Float64Array.from(r),c,l),d=e.reorderDepth;if(d===void 0){let t=0;for(let e=1;e<u.length;e++){let n=u[e]-u[e-1];if(n>0){t=n;break}}d=e.ctsRange?M(e.ctsRange.min,e.ctsRange.max,t):M(0,xe(r),t)}a.reorderDepth=d,be(a,u,1+d,e.tickQuantized??!1),se(a,e.lastDuration);let f=e.lastDuration??a.medianDelta??0;return a.durationSum=s-o+f,a.avgFps=R(t,i,a.durationSum),a.avgFpsString=m(a.avgFps),a.presentedAvgFps=a.avgFps,me(a),a}var Ce,we,Te,Ee,De,Oe,ke=t((()=>{Ce=.001,we=.005,Te=.15,Ee=Te/2,De=.5,Oe=(()=>{let e=[];for(let t of[24,30,48,60,120,240])e.push(h(t*1e3,1001));for(let t=1;t<=240;t++)e.push(h(t,1));return e})()}));let Ae=408125543,V=290298740,je=19899,Me=21419,Ne=21420,H=357149030,Pe=2807729,Fe=17545,U=374648427,Ie=29637,Le=2352003,Re=2306383,ze=22186,Be=25506,Ve=28032,He=2327523,Ue=475249515,W=307544935,We=29555,Ge=25536,Ke=25541,qe=26568,Je=17827,Ye=17543,Xe=423732329,Ze=24999,Qe=18016,$e=272869232,et=30114,tt=new Set([V,H,U,Ue,W,524531317,$e,Xe]);function G(e){return e===0?0:Math.clz32(e)-23}function nt(e,t){if(t>=e.length)return null;let n=G(e[t]);if(n<1||n>4||t+n>e.length)return null;let r=0;for(let i=0;i<n;i++)r=r*256+e[t+i];return{id:r,length:n}}function rt(e,t){if(t>=e.length)return null;let n=e[t],r=G(n);if(r<1||t+r>e.length)return null;let i=255>>r,a=(n&i)===i,o=n&i;for(let n=1;n<r;n++){let r=e[t+n];r!==255&&(a=!1),o=o*256+r}return a?{size:-1,length:r}:o>2**53-1?null:{size:o,length:r}}function K(e,t,n){let r=nt(e,t);if(!r)return null;let i=rt(e,t+r.length);return i?{id:r.id,pos:n+t,size:i.size,dataStart:n+t+r.length+i.length}:null}function it(e,t){if(t>=e.length)return!0;let n=G(e[t]);if(n<1||n>4)return!1;let r=t+n;return r>=e.length||e[r]!==0&&r+G(e[r])>e.length}function at(e,t,n){let r=t<n?G(e[t]):0;if(r<1||t+r>n)return null;let i=e[t]&255>>r;for(let n=1;n<r;n++)i=i*256+e[t+n];return{value:i,length:r}}function ot(e,t,n){let r=0;for(let i=0;i<n;i++)r=r*256+e[t+i];return r}function st(e,t,n){let r=0n;for(let i=0;i<n;i++)r=r<<8n|BigInt(e[t+i]);return r}function ct(e,t,n){if(n===0)return 0;let r=new DataView(e.buffer,e.byteOffset+t,n);return n===4?r.getFloat32(0):n===8?r.getFloat64(0):NaN}let lt=new TextDecoder;function q(e,t,n){let r=t;for(;r<t+n&&e[r]!==0;)r++;return lt.decode(e.subarray(t,r)).replace(/[^\x20-\x7e\xa0-\uffff]/g,`?`)}function*ut(e,t,n){let r=t,i=Math.min(n,e.length);for(;r<i;){let t=K(e,r,0);if(!t||t.size===-1||t.dataStart+t.size>i)return;yield{id:t.id,start:t.dataStart,size:t.size},r=t.dataStart+t.size}}function dt(e,t){return t.size>6?Number(st(e,t.start,t.size)):ot(e,t.start,t.size)}var ft=class{reader;size;window;buf=new Uint8Array;base=0;#e=[];constructor(e,t){this.reader=e,this.size=e.size,this.window=t;let n=e.peek(0,Math.min(e.size,e.headWindow));n&&n.byteLength>0&&this.#t({base:0,buf:new Uint8Array(n.buffer,n.byteOffset,n.byteLength)})}has(e,t){return e>=this.base&&Math.min(this.size,e+t)<=this.base+this.buf.length}cached(e,t){let n=Math.min(this.size,e+t);return this.#e.some(t=>e>=t.base&&n<=t.base+t.buf.length)||this.reader.peek(e,n-e)!==null}async load(e,t,n=this.window){if(this.has(e,t))return;let r=Math.min(this.size,e+t);for(let t of this.#e)if(e>=t.base&&r<=t.base+t.buf.length){this.#t(t);return}let i=Math.max(t,n),a=await this.reader.view(e,i,i);this.#t({base:e,buf:new Uint8Array(a.buffer,a.byteOffset,a.byteLength)})}chunkAt(e){return this.#e.find(t=>e>=t.base&&e<t.base+t.buf.length)??null}async header(e){return this.has(e,12)||await this.load(e,12),K(this.buf,e-this.base,this.base)}#t(e){this.buf=e.buf,this.base=e.base;let t=this.#e.indexOf(e);t>=0&&this.#e.splice(t,1),this.#e.unshift(e),this.#e.length>4&&(this.#e.length=4)}};let pt=new Map([[V,[je]],[H,[Pe,Fe,19840,22337,29604,17505,31657,29572,3979555,3965867,4110627,4096955,17476,26916]],[U,[174]],[Ue,[187]],[W,[We]],[$e,[17849]],[Xe,[Ze]]]),mt=new Uint8Array(256);for(let e of tt)mt[e>>>24]=1;let ht=new Uint8Array(256);ht[31]=1;function gt(e,t,n){if(e[t]!==31||e[t+1]!==67||e[t+2]!==182||e[t+3]!==117)return!1;let r=rt(e,t+4);if(!r)return!1;let i=t+4+r.length,a=r.size===-1?e.length:Math.min(e.length,i+r.size);if(r.size!==-1&&i+r.size>n)return!1;for(let t=0;t<4&&i<a;t++){let t=nt(e,i);if(!t)return!1;let n=rt(e,i+t.length);if(!n||n.size===-1)return!1;if(t.id===231)return n.size<=8;if(t.id!==191&&t.id!==236&&t.id!==167&&t.id!==171)return!1;i+=t.length+n.length+n.size}return!1}function _t(e,t,n,r){let i=nt(e,t);if(i?.length!==4)return!1;if(i.id===524531317)return gt(e,t,n);let a=pt.get(i.id),o=rt(e,t+4);if(!a||!o||o.size<2)return!1;let s=t+4+o.length+o.size,c=s<=r?K(e,t+4+o.length,0):null;return!!c&&c.size!==-1&&c.dataStart+c.size<=s&&(a.includes(c.id)||c.id===236||c.id===191)}async function vt(e,t,n,r,i={}){let a=i.clustersOnly?ht:mt,o=i.step??Math.max(e.window,65536),s=Math.max(0,t),c=Math.min(n,e.size);for(;s<c;){let t=e.chunkAt(s);if(!t||t.base+t.buf.length<e.size&&t.base+t.buf.length-s<128){if(i.canLoad&&!i.canLoad())return-1;let n=Math.min(o,c-s+64);await e.load(s,Math.min(n,e.size-s),n),t={base:e.base,buf:e.buf}}let n=t.buf,l=t.base,u=Math.min(l+n.length>=e.size?n.length:n.length-64,c-l);if(u<=s-l)break;for(let e=s-l;e<u;e++)if(a[n[e]]&&r(n,e,l))return l+e;s=l+u}return-1}function yt(e,t,n,r,i={}){return vt(e,t,n,(e,t,n)=>gt(e,t,r-n),{...i,clustersOnly:!0})}function bt(e,t,n,r,i={}){let a=e.size;return vt(e,t,n,(e,t,n)=>_t(e,t,r-n,a-n),i)}let xt=new Map([[V,`SeekHead`],[H,`Info`],[W,`Tags`]]),St=new Set([V,H,U,W,Xe]),Ct=new Map([[V,[je]],[je,[Me,Ne]],[H,[Pe,Fe]],[U,[174]],[174,[215,Ie,131,134,Be,Ve,Le,Re,ze,224]],[224,[176,186,He]],[W,[We]],[We,[Ge,qe]],[Ge,[Ke]],[qe,[Je,Ye,qe]],[Xe,[Ze]],[Ze,[Qe]],[Ue,[187]],[187,[183]],[183,[241]]]),wt=e=>e.toString(16).toUpperCase();function J(e,t=0){return e.reader.reads<5&&e.reader.bytesFetched+Math.max(t,e.window)<=1048576}function Tt(e){let t=/^\s*(\d+):(\d{1,2}):(\d{1,2}(?:\.\d+)?)\s*$/.exec(e);return t?Number(t[1])*3600+Number(t[2])*60+Number(t[3]):null}function Et(){return{number:0,uid:0n,type:0,codecId:``,defaultDuration:0,frameRate:0,trackTimestampScale:1,codecDelay:0,codecPrivate:null,encoded:!1,width:0,height:0}}function Dt(e,t){t.trackTimestampScale>=.01||(t.trackTimestampScale=1),!t.defaultDuration&&t.frameRate>0&&(t.defaultDuration=Math.trunc(1e9/t.frameRate)),Number.isSafeInteger(t.defaultDuration)||(t.defaultDuration=0),e.tracks.push(t)}function Ot(e,t,n,r,i,a=null,o=null){let s=o??Et(),c=-1,l=-1,u=[],d=[],f=``,p=``,m=!1,h=(n,r,i,o)=>{let g=Ct.get(n)??[];if(o>16)m=!0;else for(let m of ut(t,r,i)){if(!g.includes(m.id))continue;let r=m.start,i=m.size,_=()=>dt(t,m),v=()=>h(m.id,r,r+i,o+1);switch(m.id){case 174:s=Et(),v(),Dt(e,s);break;case We:u=[],d=[],v();for(let t of d)for(let n of u.length?u:[0n])e.tagDurations.has(n)||e.tagDurations.set(n,t);break;case qe:{let e=[f,p];f=p=``,v();let t=n===29555&&(f===`DURATION`||f.startsWith(`DURATION-`))?Tt(p):null;t!==null&&d.push(t),[f,p]=e;break}case je:c=l=-1,v(),c>=0&&l>=0&&!e.seek.has(c)&&e.seek.set(c,e.segmentData+l);break;case 215:s.number=_();break;case Ie:s.uid=st(t,r,i);break;case 131:s.type=_();break;case 134:s.codecId=q(t,r,i);break;case Le:s.defaultDuration=_();break;case Re:s.trackTimestampScale=ct(t,r,i);break;case ze:s.codecDelay=_();break;case Ve:s.encoded=!0;break;case Be:s.codecPrivate=t.slice(r,r+Math.min(i,4096));break;case 176:s.width=_();break;case 186:s.height=_();break;case He:s.frameRate=ct(t,r,i);break;case Pe:_()>0&&(e.timestampScale=_());break;case Fe:{let n=ct(t,r,i);i!==0&&i!==4&&i!==8?e.warnings.push(`Duration has an invalid size of ${i} bytes`):Number.isFinite(n)?e.duration=n:e.warnings.push(`invalid Duration value ${n}`);break}case Me:c=i<=4?_():-1;break;case Ne:l=_();break;case Ke:u.push(st(t,r,i));break;case Je:f=q(t,r,i).toUpperCase();break;case Ye:p=q(t,r,i);break;case Qe:q(t,r,i).startsWith(`image/`)&&e.attachedImages++;break;case 241:a?.push(e.segmentData+_());break;default:v()}}};h(i,n,r,2),m&&e.warnings.push(`elements nested deeper than 16 levels ignored`)}async function kt(e,t){return e.cached(t,12)||J(e)?e.header(t):null}async function At(e,t,n){let r=Math.min(n.dataStart+n.size,e.size),i=n.dataStart;for(;i<r;){let n=await kt(e,i);if(!n||n.size===-1)break;let a=Math.min(n.dataStart+n.size,r);if(n.id===174){let r=Et();for(let i=n.dataStart;i<a;){let n=await kt(e,i);if(!n||n.size===-1)break;let o=n.dataStart+n.size-n.pos;n.size<=65536&&n.pos+o<=a&&(e.cached(n.pos,o)||J(e,o))&&(await e.load(n.pos,o),Ot(t,e.buf,n.pos-e.base,n.pos-e.base+o,174,null,r)),i=n.pos+o}Dt(t,r)}i=n.dataStart+n.size}i<r&&t.warnings.push(`Tracks at ${n.pos} only partly read (header budget)`)}async function jt(e,t,n,r){if(r.at.add(n.pos),n.id===475249515&&(t.cuesPos??=n.pos),!St.has(n.id))return;let i=Math.max(0,Math.min(n.size,e.size-n.dataStart)),a=Math.min(i,1048576),o=e.cached(n.dataStart,a);if(n.id===374648427&&a<i&&!o){r.ids.add(n.id),await At(e,t,n);return}if(!o&&(!J(e,a)||n.id===423732329)){n.id===374648427?(r.ids.add(n.id),await At(e,t,n)):n.id!==423732329&&t.warnings.push(`${xt.get(n.id)??wt(n.id)} element at byte ${n.pos} not read (header budget)`);return}r.ids.add(n.id),await e.load(n.dataStart,a);let s=n.dataStart-e.base;Ot(t,e.buf,s,s+a,n.id)}function Mt(e,t,n){e.segmentUnknownSize||e.segmentExtended||(e.segmentExtended=!0,e.segmentEnd=t.size,e.declaredEnd=Math.max(e.declaredEnd,t.size),e.warnings.push(`${n}: the Segment size is wrong, reading to the end of the file like ffprobe`))}async function Nt(e,t,n){let r=n;for(let n=0;n<16&&r<e.size;n++){if(!e.cached(r,12)&&!J(e))return t.warnings.push(`Segment search stopped at ${r} (header budget)`),null;let n=await e.header(r),i=e.buf,a=r-e.base;if(i[a]===24&&i[a+1]===83&&i[a+2]===128&&i[a+3]===103)return n||(t.warnings.push(`corrupt Segment size at ${r}`),t.segmentExtended=!0,{id:Ae,pos:r,size:-1,dataStart:r+4+(G(i[a+4])||8)});if(!n||n.size===-1)return null;r=n.dataStart+n.size}return null}async function Pt(e){let t={docType:`matroska`,segmentData:0,segmentEnd:0,declaredEnd:0,segmentUnknownSize:!1,segmentExtended:!1,timestampScale:1e6,duration:0,tracks:[],tagDurations:new Map,firstCluster:null,walkEnd:0,cuesPos:null,seek:new Map,attachedImages:0,warnings:[]},n=await e.header(0);if(!n||n.id!==440786851||n.size===-1||n.dataStart+n.size>e.size)throw Error(`invalid EBML header`);await e.load(n.dataStart,Math.min(n.size,4096));let r=n.dataStart-e.base;for(let i of ut(e.buf,r,r+n.size))i.id===17026&&(t.docType=q(e.buf,i.start,i.size));let i=()=>J(e),a=await Nt(e,t,n.dataStart+n.size);if(!a){let r=await bt(e,n.dataStart+n.size,e.size,e.size,{canLoad:i});if(r<0)throw Error(`no Segment element`);t.warnings.push(`no valid Segment header: reading level-1 elements from ${r}`),t.segmentExtended=!0,a={id:Ae,pos:r,size:-1,dataStart:r}}t.segmentData=a.dataStart,t.segmentUnknownSize=a.size===-1&&!t.segmentExtended,t.declaredEnd=a.size===-1?2**53-1:a.dataStart+a.size,t.segmentEnd=Math.min(e.size,t.declaredEnd),t.declaredEnd>e.size&&a.size!==-1&&t.warnings.push(`truncated file: Segment ends ${t.declaredEnd-e.size} bytes after EOF`);let o={ids:new Set,at:new Set},s=t.segmentData,c=s,l=-1;for(;!(s>=t.segmentEnd&&(s>=e.size||(Mt(t,e,`Segment ends at ${s} before any Cluster`),s>=t.segmentEnd)));){if(!e.cached(s,12)&&!i()){t.warnings.push(`header walk stopped at ${s} (header budget)`),l=s;break}let n=await e.header(s);if(n?.id===524531317){t.firstCluster=s;break}let r=`invalid data at ${s} before the first Cluster`;if(n&&n.size!==-1&&(tt.has(n.id)||n.id===236||n.id===191)){let i=n.dataStart+n.size;if(i>t.segmentEnd&&i<=e.size&&Mt(t,e,`${wt(n.id)} at ${s} ends after the Segment`),await jt(e,t,n,o),c=s+1,i<=e.size){s=i;continue}r=`${wt(n.id)} at ${s} ends after the end of the file`}let a=await bt(e,c,e.size,Math.max(t.declaredEnd,e.size),{canLoad:i});if(t.warnings.push(a<0?r:`${r}: resynchronised at ${a}`),a<0)break;a>=t.segmentEnd&&Mt(t,e,`level-1 element at ${a} after the Segment end`),c=a+1,s=a}t.walkEnd=t.firstCluster??(l>=0?l:c);for(let n of[V,H,U,W]){let r=t.seek.get(n);if(r===void 0||o.at.has(r)||n!==290298740&&o.ids.has(n)||r>=t.segmentEnd)continue;let i=await kt(e,r);i?.id===n?await jt(e,t,i,o):t.warnings.push(`SeekHead entry ${wt(n)} not followed`)}if(t.cuesPos??=t.seek.get(475249515)??null,o.ids.has(357149030)||t.warnings.push(`no Info element: TimestampScale 1000000 assumed`),!t.tracks.length)throw Error(o.ids.has(374648427)?`no complete TrackEntry in Tracks`:`no Tracks element found`);return t}let Ft=2147483647n,It=new Set([231,163,160,167,171,236,191]),Lt=new Set([161,155,251,et,30113,164,236,191]),Rt=new Set([231,155,251,et]);function Y(e,t,n,r=1/0){let i=new Map;for(let t of n){let n=Math.trunc(e.timestampScale*t.trackTimestampScale)||e.timestampScale;i.set(t.number,{track:t,tickNs:n,codecDelayTicks:Math.round(t.codecDelay/n),pts:new Float64Array(256),n:0,blocks:0,frames:0,invisible:0,missingPts:0,noPtsFrames:0,nextPts:NaN,pending:[],overLimit:0,maxPts:-1/0,maxPtsDur:0})}return{header:e,tracks:i,known:new Set(e.tracks.map(e=>e.number)),fileSize:t,maxSamples:r,clusters:0,truncated:!1,missingClusterTs:0,maxAnyTicks:-1/0,lastGood:-1,resyncs:0,afterSegment:-1,switchReads:1/0,largeWindow:0,warnings:[]}}function zt(e,t,n){if(e.n===e.pts.length){let t=new Float64Array(Math.max(e.n+1,Math.min(e.pts.length*2,n)));t.set(e.pts),e.pts=t}e.pts[e.n++]=t}function Bt(e,t,n){let r=Math.min(e.length,t+n),i=at(e,t,r);if(!i)return null;let a=t+i.length;if(a+3>r)return null;let o=e[a]<<24>>16|e[a+1],s=e[a+2],c=1;if(s&6){if(a+4>r)return null;c=e[a+3]+1}return{track:i.value,rel:o,flags:s,laces:c}}function Vt(e,t,n,r){if(t>=n)return`invalid`;if(t>=r)return`more`;let i=G(e[t]);if(!i||t+i>n)return`invalid`;if(t+i>r)return`more`;let a=BigInt(e[t]&255>>i);for(let n=1;n<i;n++)a=a*256n+BigInt(e[t+n]);return{v:a,n:i}}function Ht(e,t,n,r){let i=t+n,a=Math.min(i,e.length),o=Bt(e,t,a-t);if(!o){let n=t<a?G(e[t]):0;return a<i&&(t>=a||n>0&&t+n+4>a)?`more`:`invalid`}let s=t+G(e[t]);if(r&&!r.has(o.track))return`invalid`;let c=o.flags>>1&3;if(!c)return o;let l=i-s-4;if(l<0)return`invalid`;let u=o.laces,d=s+4;if(c===2)return l%u?`invalid`:o;if(c===1){let t=0;for(let n=0;n<u-1;n++){let n;do{if(l<=t)return`invalid`;if(d>=a)return`more`;n=e[d++],t+=n,l--}while(n===255)}return l<t?`invalid`:o}let f=Vt(e,d,i,a);if(typeof f==`string`)return f;if(f.v>Ft)return`invalid`;let p=f.v,m=f.v;d+=f.n;for(let t=1;t<u-1;t++){if(f=Vt(e,d,i,a),typeof f==`string`)return f;let t=p+f.v-((1n<<BigInt(7*f.n-1))-1n);if(t<0n||t>Ft)return`invalid`;p=t,m+=t,d+=f.n}return BigInt(i-d)<m?`invalid`:o}function Ut(e,t,n,r){t.n<e.maxSamples?zt(t,n,e.maxSamples):t.overLimit++,n>=t.maxPts&&(t.maxPts=n,t.maxPtsDur=r),t.nextPts=n+r}function Wt(e,t,n,r){let i=n+t.rel;i>e.maxAnyTicks&&(e.maxAnyTicks=i);let a=e.tracks.get(t.track);if(!a)return null;let o=t.laces;a.blocks++,a.frames+=o,t.flags&8&&a.invisible++;let s=r>0?r:Math.floor(a.track.defaultDuration*o/e.header.timestampScale),c=e=>Math.floor(s*e/o);if(i<0){a.noPtsFrames+=o;for(let t=0;t<o;t++)Number.isNaN(a.nextPts)?a.pending.push(c(t+1)-c(t)):Ut(e,a,a.nextPts,c(t+1)-c(t));return a}let l=a.track.trackTimestampScale,u=(l===1?n:Math.floor(n/l))+t.rel-a.codecDelayTicks,d=u;for(let e of a.pending)d-=e;for(let t of a.pending.splice(0))Ut(e,a,d,t),d+=t;for(let t=0;t<o;t++){if(t>0&&s===0){a.missingPts+=o-t;break}Ut(e,a,u+c(t),c(t+1)-c(t))}return a}async function Gt(e,t,n){let r=Math.min(n.size,16);for(;;){e.has(n.dataStart,r)||await e.load(n.dataStart,r);let i=Ht(e.buf,n.dataStart-e.base,n.size,t.known);if(i!==`more`)return i;if(r>=n.size)return`invalid`;r=Math.min(n.size,r*8)}}function Kt(e,t){return e.has(t,12)?K(e.buf,t-e.base,e.base):void 0}async function qt(e,t){return(Kt(e,t)??await e.header(t))||(it(e.buf,t-e.base)?`eof`:`invalid`)}function Jt(e,t){return e.has(t.dataStart,t.size)?ot(e.buf,t.dataStart-e.base,t.size):void 0}async function Yt(e,t){return await e.load(t.dataStart,t.size),ot(e.buf,t.dataStart-e.base,t.size)}function Xt(e,t){return e.size===-1||e.dataStart+e.size>t||Rt.has(e.id)&&e.size>8||(e.id===163||e.id===161)&&e.size>268435456?`invalid`:null}async function Zt(e,t,n,r=1/0){let i=Kt(e,n)??await e.header(n);if(!i||i.id!==524531317)return null;let a=t.fileSize,o=i.size===-1?1/0:i.dataStart+i.size;t.clusters++;let s=-1,c=0,l=i.dataStart,u=e=>({next:l,videoBlocks:c,error:e});for(;l<o;){if(c>=r||t.stop)return{next:Math.min(o,l),videoBlocks:c,error:null};if(t.switchReads<=e.reader.reads&&(e.window=t.largeWindow,t.switchReads=1/0),l>=a)return o===1/0?{next:l,videoBlocks:c,error:null}:u(`eof`);let n=Kt(e,l);if(n||=await qt(e,l),typeof n==`string`)return u(n);let i=It.has(n.id);if(!i&&o===1/0&&(tt.has(n.id)||n.id===408125543))return{next:l,videoBlocks:c,error:null};let d=Xt(n,o);if(d)return u(d);i&&(t.lastGood=l);let f=n.dataStart+n.size;if(f>a)return u(`eof`);if(n.id===231)s=Jt(e,n)??await Yt(e,n);else if(n.id===163||n.id===160){let r=n,i=0;if(n.id===160){r=null;for(let a=n.dataStart;a<f;){let n=Kt(e,a)||await qt(e,a),o=typeof n==`string`?n:Xt(n,f);if(o||typeof n==`string`)return l=a,u(o??`invalid`);Lt.has(n.id)&&(t.lastGood=a),n.id===161?r=n:n.id===155&&(i=Jt(e,n)??await Yt(e,n)),a=n.dataStart+n.size}}if(r){let n=e.has(r.dataStart,Math.min(r.size,16))?Ht(e.buf,r.dataStart-e.base,r.size,t.known):`more`;if(n===`more`&&(n=await Gt(e,t,r)),n===`invalid`)return u(`invalid`);s<0&&(t.missingClusterTs++,s=0);let a=Wt(t,n,s,i);t.onBlock?.(n,s,i,r),a&&a.track.type===1&&c++}}l=f}return{next:o,videoBlocks:c,error:null}}function Qt(e,t,n,r){n<0&&r===`eof`?e.truncated=!0:++e.resyncs>5||(n<0?e.warnings.push(`invalid data at ${t}, no further level-1 element`):n>=t?e.warnings.push(`skipped ${n-t} bytes of invalid data at ${t}`):e.warnings.push(`invalid data at ${t}: resynchronised at ${n}`))}async function $t(e,t,n,r){let i=t.header,a=t.fileSize,o=i.segmentUnknownSize||i.segmentExtended?1/0:i.declaredEnd,s=n;for(t.lastGood=n-1;!t.stop;){e.reader.checkAbort(),r?.(s,Math.min(a,o));let n=null,i=s;if(s>=a){s<o&&o!==1/0&&(t.truncated=!0);break}if(s>=o){o=1/0;let n=await bt(e,Math.max(t.lastGood+1,s),a,1/0);if(n<0)break;t.afterSegment<0&&(t.afterSegment=s),s=n;continue}let c=await qt(e,s);if(typeof c==`string`)n=c;else{let r=tt.has(c.id)||c.id===236||c.id===191;if(c.id===408125543&&o===1/0?(t.afterSegment<0&&(t.afterSegment=s),n=`invalid`):c.size===-1?c.id===524531317?o=1/0:n=`invalid`:c.dataStart+c.size>o&&(n=`invalid`),!n){if(r&&(t.lastGood=s),c.id===524531317){let r=await Zt(e,t,s);r.error?(n=r.error,i=r.next):s=r.next}else c.dataStart+c.size>a?n=`eof`:s=c.dataStart+c.size}}if(!n)continue;o=1/0;let l=await bt(e,t.lastGood+1,a,1/0);if((n!==`invalid`||i!==t.afterSegment)&&Qt(t,i,l,n),l<0)break;s=l}t.resyncs>5&&t.warnings.push(`${t.resyncs-5} more resynchronisation(s) after invalid data`),t.afterSegment>=0&&t.warnings.push(`data after the Segment end at ${t.afterSegment} was scanned like ffprobe does (concatenated files?)`)}async function en(e,t,n,r){await e.load(t,n-t,n-t);let i=e.buf,a=e.base,o=[];for(let e=n-a-4;e>=t-a;e--)i[e]===31&&gt(i,e,r-a)&&o.push(a+e);return o}var tn=n({attachEstimate:()=>pn,av1TimingInfo:()=>un,h264Sps:()=>sn,setupUnsupported:()=>fn});function nn(e){let t=Math.floor(e),n=e-t;return n>.5||n===.5&&t%2!=0?t+1:t}function rn(e,t){for(;t;)[e,t]=[t,e%t];return e}function an(e,t){let n=e>>3,r=n<12?[480,960,1920,2880][n&3]:n<16?[480,960][n&1]:[120,240,480,960][n&3],i=e&3,a=i===0?1:i<3?2:t&63;return a>0&&r*a<=5760?r*a:0}function on(e){let t=[];for(let n=1,r=0;n<e.length;n++)r>=2&&e[n]===3?r=0:(t.push(e[n]),r=e[n]?0:r+1);let n=0,r=e=>{let r=0;for(let i=n+e;n<i;n++){if(n>>3>=t.length)throw RangeError();r=r*2+(t[n>>3]>>7-(n&7)&1)}return r};return{u:r,ue:()=>{let e=0;for(;!r(1);)if(++e>31)throw RangeError();return 2**e-1+r(e)}}}function sn(e){let{u:t,ue:n}=on(e);try{let e=t(8);if(e!==66)return`H.264 profile ${e}`;t(16),n();let r={frameNumBits:n()+4,pocType:n(),pocLsbBits:0,fixedDelay:!1};if(r.pocType===0&&(r.pocLsbBits=n()+4),r.pocType===1){t(1),n(),n();for(let e=n();e>0;e--)n()}if(r.frameNumBits>16||r.pocLsbBits>16||r.pocType>2)return`bad H.264 SPS`;n(),t(1),n(),n();let i=t(1)||(t(1),0);if(t(1),t(1))for(let e=0;e<4;e++)n();if(t(1)){if(t(1)&&t(8)===255&&t(32),t(1)&&t(1),t(1)&&(t(4),t(1))&&t(24),t(1)&&(n(),n()),t(1))return`H.264 timing info`;if(t(1)||t(1)||t(1))return`H.264 HRD or pic_struct`;if(t(1)){t(1);for(let e=0;e<4;e++)n();if(n())return`H.264 reordering`;r.fixedDelay=!0}}return r.pocType===1?`H.264 pic_order_cnt_type 1`:i?r:`H.264 field coding`}catch{return`bad H.264 SPS`}}function cn(e,t){let n=[];if(t)for(let r=0;r+t<=e.length;){let i=0;for(let n=r+t;r<n;r++)i=i*256+e[r];n.push(e.subarray(r,r+=i))}else for(let t=0,r=-1;t<=e.length;t++)t<e.length&&(e[t]||e[t+1]||e[t+2]!==1)||(r>=0&&n.push(e.subarray(r,t)),r=t+3,t+=2);return n}function ln(e,t){let n=e?(e[4]&3)+1:0,r=e?[]:cn(t[0],0);if(e){let t=5;for(let n of[31,255])for(let i=e[t++]&n,a=0;i-->0&&t+2<=e.length;t+=2+a)a=e[t]<<8|e[t+1],r.push(e.subarray(t+2,t+2+a))}let i=e=>e[0]&31,a=r.find(e=>i(e)===7),o=a?sn(a):`no H.264 SPS`;if(typeof o==`string`)return o;let s=[];for(let e of t){let t=cn(e,n).find(e=>i(e)===1||i(e)===5);if(!t)return`no H.264 slice header`;s.push(t)}if(i(s[0])!==5)return`H.264 does not start with an IDR`;let c=r.filter(e=>i(e)===8);if(!c.length)return`no H.264 PPS`;let l=2**o.frameNumBits,u=0,d=NaN,f=-1,p=0,m=null;try{for(let e of c){let{u:t,ue:n}=on(e);if(n(),n(),t(1),t(1)&&!o.pocType)return`H.264 bottom field POC`}for(let e of s){let{u:t,ue:n}=on(e);n(),n(),n();let r=t(o.frameNumBits);if(i(e)===5)n(),u=p=0,d=NaN,m=null;else if(f>=0&&r!==f&&r!==(f+1)%l)return`H.264 frame_num gap`;else r<f&&(p+=l);f=r;let a=2*(p+r)-(e[0]&96?0:1);if(!o.pocType){let n=t(o.pocLsbBits),r=2**o.pocLsbBits;d>=0||(d=n);let i=n<d&&d-n>=r/2?u+r:n>d&&n-d>r/2?u-r:u;a=i+n,e[0]&96&&([u,d]=[i,n])}if(m!==null&&(o.fixedDelay?a<m:a-m!==1&&a-m!==2))return`H.264 POC step ${a-m}`;m=a}}catch{return`bad H.264 PPS or slice header`}return null}function un(e){for(let t=0;t<e.length;){let n=e[t],r=t+1+(n>>2&1),i=e.length-r;if(n&2)for(let t=0,n=128;n&128;t+=7)i=(t?i:0)+((n=e[r++]??0)&127)*2**t;if((n>>3&15)==1)return r<e.length?(e[r]&12)==4:null;t=r+i}return null}function dn(e,t){let n=e.codecPrivate;if(e.codecId===yn){let e=un(n&&n.length>4?n.subarray(4):t[0]);return e===null?`no AV1 sequence header`:e?`AV1 timing info`:null}return e.codecId===vn?ln(n,t):null}function fn(e){let t=e.tracks.filter(e=>e.type===1);if(t.length!==1)return`${t.length} video tracks`;if(new Set(e.tracks.map(e=>e.number)).size<e.tracks.length)return`duplicate track numbers`;if(e.attachedImages)return`attached pictures`;if(![`V_VP8`,`V_VP9`,yn,vn].includes(t[0].codecId))return`codec ${t[0].codecId}`;for(let t of e.tracks){if(t.trackTimestampScale!==1||t.encoded)return`track ${t.number} scale or encoding`;let e=t.codecPrivate;if(t.type!==1&&(t.codecId!==`A_OPUS`||!e||String.fromCharCode(...e.subarray(0,8))!==`OpusHead`||e[18]!==0))return`track ${t.number} (${t.codecId||t.type})`}return null}function pn(e,t,n,r,i=!1){let a=fn(t);if(a)return a;let o=new Map;for(let e of t.tracks){let n=f(Math.trunc(t.timestampScale*e.trackTimestampScale),1e9,v);o.set(e.number,{tb:n,nb:0,cid:0,durs:0,seen:!1,first:null,firstIdx:0,last:null,lastIdx:0})}let s=t.tracks.find(e=>e.type===1),c=o.get(s.number),l=c.tb,u=l.num/l.den,d=s.codecId===vn,p=d||l.den>=101*l.num||l.den<5*l.num,m=p?u>5e-4?40:20:0,h=new Float64Array(4*X),g=(e,t)=>{let n=h[2*e*X+t]/y;return h[(2*e+1)*X+t]/y-n*n},_=null,y=0,b=0,x=0,S=0,C=null,w=null,T=null,E=()=>r.resyncs||r.truncated||r.missingClusterTs,D=[],O=n.newScanState(t,e.size,t.tracks),k=(r,i,a,s)=>{let f=n.addBlock(O,r,i,a);if(S>=mn||c.nb&&y>=m&&[...o.values()].every(e=>e.seen||e.nb>=hn))return!1;let p=o.get(f.track.number),v=s.dataStart+Math.clz32(e.buf[s.dataStart-e.base])-20,w=s.dataStart+s.size-v,T=p===c,E=a||Math.floor(f.track.defaultDuration*r.laces/t.timestampScale);if(r.laces>1||f.noPtsFrames?C=`laced or untimed blocks`:!E&&!T?(E=Math.floor(an(e.buf[v-e.base],w>1?e.buf[v+1-e.base]:0)*p.tb.den/(48e3*p.tb.num)),(!E||w<1)&&(C=`a bad Opus packet`)):!E&&l.num*1e3>l.den&&(E=1),T&&!c.nb&&s.id===163&&!(r.flags&128)&&(C=`no keyframe first`),C)return!1;S+=w;let k=T&&d&&c.nb<gn?null:f.pts[f.n-1];if(k!==null&&p.nb>1&&(p.last!==null&&(p.last>=k||p.first!==null&&p.lastIdx>p.firstIdx&&Math.floor((k-p.last)/1e3)>Math.floor((p.last-p.first)/(p.lastIdx-p.firstIdx)))&&(p.first=null),p.first===null&&(p.first=k,p.firstIdx=p.nb),p.last=k,p.lastIdx=p.nb),p.nb>1){let e=xn(p.cid,p.tb);if(!e&&p.nb>30&&p.first!==null&&p.last!==null&&(e=xn(p.last-p.first,p.tb)),e>=mn)return!1;E>0&&(p.cid+=E,p.durs++)}if(T&&k!==null&&_!==null&&k>_){let e=k*u;for(let t=0;t<X;t++){if(!(h[X+t]<1e10))continue;let n=e*bn(t)/12012;for(let e=0;e<2;e++){let r=n-nn(n+e*.5)+e*.5;h[2*e*X+t]+=r,h[(2*e+1)*X+t]+=r*r}}if(y++,b+=k-_,y%10==0)for(let e=0;e<X;e++)h[X+e]<1e10&&g(0,e)>.04&&g(1,e)>.04&&(h[X+e]=h[3*X+e]=2e10);y>3&&(x=rn(x,k-_))}if(T&&k!==null&&(_=k),k!==null&&(p.seen=!0),T&&c.nb<(d?gn:1)){let t=Math.min(w,_n);D.push(e.has(v,t)?e.buf.slice(v-e.base,v+t-e.base):[v,t])}return p.nb++,!0};return r.onBlock=(e,t,n,a)=>{if(T===null){try{if(k(e,t,n,a))return}catch(e){w=[e]}T=E(),i&&(r.stop=!0)}},async()=>{if(w)throw w[0];if(C)return C;if(!c.nb||(T??E()))return`damaged first Clusters`;let t=[];for(let n of D)t.push(n instanceof Uint8Array?n:(await e.load(n[0],n[1],n[1]),e.buf.slice(n[0]-e.base,n[0]+n[1]-e.base)));let n=dn(s,t);if(n)return n;let r=null,i=null;if(p&&y>15&&x>Math.max(1,Math.floor(l.den/(500*l.num)))&&(r=f(l.den,BigInt(l.num)*BigInt(x),v)),y>1&&!r&&p){let e=0,t=.01;for(let n=0;n<X;n++){let r=bn(n);if(!((c.cid?c.cid*u<11511.5/r:r<12012)||u*b/y<9609.6/r))for(let i=0;i<2;i++){let a=g(i,n);a<t&&t>1e-9&&(t=a,e=r)}}e&&e/12012<1.01*(l.den/l.num)&&(r=f(e,12012,v))}if(r&&b&&c.cid<=0&&y>2&&Math.abs(1/(r.num/r.den*u)-b/y)<=1&&(i=r),c.durs&&!i&&c.cid){i=f(BigInt(c.durs)*BigInt(l.den),BigInt(c.cid)*BigInt(l.num),6e4);let e=.01,t=0;for(let n=0;n<X;n++){let r=Math.abs(i.num/i.den/(bn(n)/12012)-1);r<e&&(e=r,t=bn(n))}t&&(i=f(t,12012,v))}return r??={num:l.den,den:l.num},{avg:i?`${i.num}/${i.den}`:`0/0`,r:`${r.num}/${r.den}`,packets:c.nb}}}var X,mn,hn,gn,_n,vn,yn,bn,xn,Sn=t((()=>{y(),X=399,mn=5e6,hn=50,gn=7,_n=1024,vn=`V_MPEG4/ISO/AVC`,yn=`V_AV1`,bn=e=>e<360?(e+1)*1001:e<390?(e-329)*12012:e<393?[80,120,240][e-390]*12012:[24,30,60,12,15,48][e-393]*12e3,xn=(e,t)=>Number((BigInt(e)*BigInt(t.num)*1000000n+BigInt(t.den>>1))/BigInt(t.den))}));c(),y(),ke();let Z=4096,Cn=262144,wn=5e6,Tn=new Set([231,236,191,167,171]);s.perBlockMs;let En=`no DefaultDuration: avg_frame_rate and r_frame_rate `,Dn=`${En}come from the first packets, which header mode does not read`;function On(e){for(let t of`V_AV1:av1 V_VP8:vp8 V_VP9:vp9 V_MPEG4/ISO/AVC:h264 V_MPEGH/ISO/HEVC:hevc V_MPEGI/ISO/VVC:vvc V_MPEG4/ISO/ASP:mpeg4 V_MPEG4/ISO/AP:mpeg4 V_MPEG4/ISO/SP:mpeg4 V_MPEG4/MS/V3:msmpeg4v3 V_MPEG1:mpeg1video V_MPEG2:mpeg2video V_PRORES:prores V_MJPEG:mjpeg V_FFV1:ffv1 V_THEORA:theora V_UNCOMPRESSED:rawvideo V_DIRAC:dirac`.split(` `)){let[n,r]=t.split(`:`);if(e.startsWith(n))return r}return``}function kn(e){if(!(e>0))return null;let t=g(1e9,e,3e4),n=m(t);return{avg:n,r:t.num<t.den*1e3&&t.num>t.den*5?n:null}}function An(e,t){let n=new Map,r={minFps:null,maxFps:null,isVfr:null,vfrRatio:0,distinctDeltas:0,duplicateTimestamps:0,timestampsQuantized:!1,medianDelta:null},i=0;for(let e of t){r.duplicateTimestamps+=e.duplicateTimestamps;for(let[t,r]of e.histogram)n.set(t,(n.get(t)??0)+r),i+=r}let a=[...n.keys()].sort((e,t)=>e-t);if(r.distinctDeltas=a.length,i===0)return r;let o=0,s=a.find(e=>(o+=n.get(e)??0)*2>=i)??a[0],c=ne(s,e,a),l=0;for(let e of a)Math.abs(e-s)>c&&(l+=n.get(e)??0);return r.medianDelta=s,r.minFps=N(e,a[a.length-1]),r.maxFps=N(e,a[0]),r.isVfr=i>=2&&l>0,r.vfrRatio=l/i,r.timestampsQuantized=!r.isVfr&&a.length>1,r}function jn(e,t,n){e.minFps=t.minFps,e.maxFps=t.maxFps,e.isVfr=t.isVfr,e.vfrRatio=t.vfrRatio,e.distinctDeltas=t.distinctDeltas,e.duplicateTimestamps=t.duplicateTimestamps,e.timestampsQuantized=t.timestampsQuantized;for(let t of[`minFps`,`maxFps`,`isVfr`,`duplicateTimestamps`])e.provenance[t]=n}function Mn(e,t){let n=x(t.number);n.fourccOrCodecId=t.codecId,n.codecName=On(t.codecId),n.width=t.width,n.height=t.height,n.timescale=1e9/(Math.trunc(e.timestampScale*t.trackTimestampScale)||e.timestampScale),n.provenance.codec=n.provenance.dimensions=`header`;let r=kn(t.defaultDuration);r?(n.avgFpsFfprobe=r.avg,n.rFpsFfprobe=r.r,n.nominalFps={...g(1e9,t.defaultDuration,3e4),kind:`declared`},n.provenance.nominalFps=`header`,t.frameRate>0&&t.defaultDuration===Math.trunc(1e9/t.frameRate)&&n.warnings.push(`DefaultDuration derived from Video FrameRate ${t.frameRate}`)):n.warnings.push(Dn);let i=e.tagDurations.get(t.uid);return i!==void 0&&(n.durationSec=i,n.provenance.durationSec=`header`),n}function Nn(e){return e.duration*e.timestampScale/1e9}function Pn(e,t,n){let r=n.durationSec??Nn(e);r>0&&t.defaultDuration>0&&n.warnings.push(`about ${Math.round(r*1e9/t.defaultDuration)} frames (estimated from duration x DefaultDuration, assumes CFR)`)}function Fn(e,t,n){let r=Nn(e),i=t*e.timestampScale/1e9;r>0&&Number.isFinite(i)&&r-i>Math.max(.5,.02*r)&&n.push(`Info Duration ${r.toFixed(3)} s exceeds the last block at ${i.toFixed(3)} s (false Duration or truncated file)`)}function In(e,t,n){e.provenance.durationSec===`header`&&e.durationSec!==null&&Math.abs(e.durationSec-t)>Math.max(2/e.timescale,1/(e.nominalFps?.value||1/0))&&e.warnings.push(`DURATION tag ${e.durationSec.toFixed(3)} s differs from the scanned ${t.toFixed(3)} s`),e.durationSec=t,e.provenance.durationSec=n}async function Ln(e,t,n,r){let i=Math.min(r,16384);await e.load(n,i,i);let a=e.chunkAt(n);if(!a)return null;let o=a.buf,s=a.base,c=s+o.length,l={bytes:0,blocks:0,video:0,large:0,smallBytes:0},u=n;for(;u<c;){let e=K(o,u-s,s);if(e?.id===524531317){u=e.dataStart;continue}if(!e||e.size===-1)break;let i=e.dataStart+e.size,a=e.id===163||e.id===160;if(a?e.size>268435456||i>n+r:i>c||!Tn.has(e.id))break;if(a){let n=e.id===160?K(o,e.dataStart-s,s):e,r=n&&(n.id===163||n.id===161)?Bt(o,n.dataStart-s,n.size):null,a=r&&t.some(e=>e.number===r.track)?r.laces:0;l.blocks+=Math.max(1,a),l.video+=a,i-e.pos>=4096?l.large++:l.smallBytes+=i-e.pos}l.bytes=i-n,u=i}return l.blocks&&l.bytes>0?l:null}function Rn(e,t,n){if(!t){if(!(n>0))return null;let t=e/n>=Z;return{blocks:n,large:t?n:0,smallBytes:t?0:e}}let r=e/t.bytes,i=t.video*r;return{blocks:t.blocks*r*(t.video>0&&n>i?n/i:1),large:t.large*r,smallBytes:t.smallBytes*r}}function zn(e,t,n){let r=Math.min(e,wn,t?.video?Math.ceil(48*t.bytes/t.video):wn);return a(n.costModel,Math.ceil(r/n.readAhead.head),r)}function Bn(e,t,n){let r=(t?.blocks??0)*n.costModel.perBlockMs,i=(e,t,i)=>({window:e,reads:t,bytes:i,ms:a(n.costModel,t,i)+r}),o=n.readAhead.matroskaScan,s=i(o,Math.ceil(e/o),e);if(!t)return s;let c=Math.ceil(t.large+t.smallBytes/Z),l=i(Z,c,Math.min(e,c*Z));return l.ms<s.ms?l:s}let Vn={newScanState:Y,addBlock:Wt};async function Hn(){try{return await Promise.resolve().then(()=>(Sn(),tn))}catch{return`the estimate code did not load`}}async function Un(e,t){try{return await t()}catch(t){return e.reader.checkAbort(),`the estimate failed: ${t instanceof Error?t.message:String(t)}`}}async function Wn(e,t,n,r){let i=e.reader,a=r.onProgress,o=i.reads,s=t.header.segmentEnd-n;a?.({phase:`matroska-exact`,done:0,total:s}),await $t(e,t,n,(e,t)=>{s=Math.max(s,t-n),a&&i.reads!==o&&(o=i.reads,a({phase:`matroska-exact`,done:Math.min(e-n,s),total:s}))}),a?.({phase:`matroska-exact`,done:s,total:s})}async function Gn(e,t){let n=t.firstCluster===null?null:await e.header(t.firstCluster);if(n?.id===524531317)return n.pos;let r=Math.max(t.segmentData,t.walkEnd),i=await yt(e,r,Math.min(t.segmentEnd,r+16777216),t.declaredEnd,{step:Cn});if(i>=0)return i;for(let n of(await Kn(e,t)).slice(0,4))if((await e.header(n))?.id===524531317)return n;return null}async function Kn(e,t){let n=t.cuesPos===null||t.cuesPos>=t.segmentEnd?null:await e.header(t.cuesPos);if(n?.id!==475249515||n.size===-1)return[];let r=Math.min(n.size,524288,e.size-n.dataStart);await e.load(n.dataStart,r,r);let i=[];return Ot(t,e.buf,n.dataStart-e.base,n.dataStart-e.base+r,Ue,i),[...new Set(i)].filter(e=>e<t.segmentEnd).sort((e,t)=>e-t)}function qn(e,t){return e.length<=t?[...e]:[...new Set(Array.from({length:t},(n,r)=>e[Math.round(r*(e.length-1)/(t-1))]))]}async function Jn(e,t,n,r,i){let a=Math.max(i.readAhead.tail,4096),o=t.segmentEnd,s=-1/0;for(;;){let i=Math.max(r,t.segmentEnd-a);for(let r of i<o?await en(e,i,o,t.declaredEnd):[]){let i=Y(t,e.size,n);if(await Zt(e,i,r),s=Math.max(s,i.maxAnyTicks),i.tracks.get(n[0].number)?.n)return{st:i,maxAnyTicks:s}}if(i<=r||a>=16777216)return null;o=i+4,a=Math.min(a*4,16777216)}}async function Yn(e,t,n,r,i,a,o){let s=await Jn(e,t,n,i,a),c=await Kn(e,t),l=qn(c[0]===i||!c.length?c:[i,...c.filter(e=>e>i)],8);if(!c.length){l=[i];let n=t.segmentEnd-i;for(let r=1;r<8;r++){let a=i+Math.floor(r*n/8),o=await yt(e,a,Math.min(t.segmentEnd,a+1048576),t.declaredEnd,{step:Cn});o>l[l.length-1]&&l.push(o)}}let u=new Map,d=null,f=0;for(let r of l){let a=Y(t,e.size,n);if(await Zt(e,a,r,32)){f++,r===i&&(d=a);for(let e of a.tracks.values()){if(e.n<2)continue;let t=u.get(e.track.number)??[];t.push(P({timescale:1e9/e.tickNs,pts:e.pts.subarray(0,e.n),tickQuantized:!0})),u.set(e.track.number,t)}}}o.push(`probe: ${f} cluster(s) sampled via ${c.length?`Cues`:`sync search`}, up to 32 video blocks each`),s||o.push(`probe: no video block found in the tail`),Fn(t,s?.maxAnyTicks??-1/0,o),n.forEach((e,n)=>{let i=r[n],a=i.timescale,o=An(a,u.get(e.number)??[]);o.isVfr===null?f>0&&i.warnings.push(`probe: every sampled cluster holds fewer than 2 frames of this track, so no frame interval was measured; scan all frames for min, max and VFR`):jn(i,o,`sampled`);let c=d?.tracks.get(e.number),l=c?.n?Math.min(...c.pts.subarray(0,c.n)):null;l!==null&&(i.startSec=l/a,i.provenance.startSec=`sampled`);let p=s?.st.tracks.get(e.number);p?.n&&In(i,(p.maxPts+(p.maxPtsDur>0?p.maxPtsDur:o.medianDelta??0)-(l??0))/a,`sampled`),Pn(t,e,i)})}function Xn(e,t){let n=e.timescale;if(e.frames=e.presentedFrames=t.frames,e.provenance.frames=e.provenance.presentedFrames=`computed`,e.isStill=t.frames===1,t.invisible&&e.warnings.push(`${t.invisible} invisible block(s) counted as frames`),t.missingPts&&e.warnings.push(`${t.missingPts} laced frame(s) without a timestamp`),t.noPtsFrames&&e.warnings.push(`${t.noPtsFrames} frame(s) before time 0 have no timestamp; interpolated from the neighbouring frames like ffmpeg`),t.overLimit&&e.warnings.push(`per-frame statistics skipped: more than ${t.n} frames`),!t.n||t.overLimit)return t.n||e.warnings.push(`no blocks for this track`),null;let r=P({timescale:n,pts:t.pts.subarray(0,t.n),lastDuration:t.maxPtsDur>0?t.maxPtsDur:null,tickQuantized:!0});return e.warnings.push(...r.warnings),In(e,r.durationSum/n,`exact`),jn(e,r,`exact`),e.avgFps=t.frames!==t.n&&Number.isSafeInteger(n)&&Number.isSafeInteger(r.durationSum)?_(n,t.frames,r.durationSum):r.avgFps,e.startSec=r.firstPts===null?null:r.firstPts/n,e.dominantFps=r.dominantFps,e.provenance.avgFps=e.provenance.startSec=e.provenance.dominantFps=`exact`,!e.nominalFps&&r.nominalFps?(e.nominalFps=r.nominalFps,e.provenance.nominalFps=`exact`):e.nominalFps&&e.avgFps&&Math.abs(e.avgFps.value/e.nominalFps.value-1)>.005&&e.warnings.push(`declared rate ${e.avgFpsFfprobe} differs from the measured average ${e.avgFps.value.toFixed(3)}`),r.duplicateTimestamps&&e.warnings.push(`${r.duplicateTimestamps} duplicate block timestamp(s) excluded from the instantaneous rates`),r.profile}async function Zn(e,t){let n=new ft(e,t.readAhead.head),r=await Pt(n),i=b(r.docType===`webm`?`webm`:`matroska`),a=i.warnings;i.brand=r.docType,i.scan=`header`,a.push(...r.warnings),r.docType!==`webm`&&r.docType!==`matroska`&&a.push(`unexpected DocType '${r.docType}'`),r.segmentUnknownSize&&a.push(`Segment has an unknown size (live or unfinished recording)`),i.formatDurationSec=r.duration===0?null:Math.trunc(r.duration*r.timestampScale*1e3/1e6)/1e6,i.audioTrackCount=r.tracks.filter(e=>e.type===2).length,r.attachedImages&&a.push(`${r.attachedImages} attached image(s) ignored: ffprobe lists them as attached_pic video streams`);let o=r.tracks.filter(e=>e.type===1);if(!o.length)return a.push(`no video track`),i;i.primaryTrackId=o[0].number,i.videoTracks=o.map(e=>Mn(r,e));let s=t.matroskaMode,c=null;if(s!==`header`&&(c=await Gn(n,r),c===null&&a.push(`no Cluster found: nothing to scan`)),c===null)return o.forEach((e,t)=>Pn(r,e,i.videoTracks[t])),i;let l=r.segmentEnd-c,u=o[0],d=r.tagDurations.get(u.uid)??Nn(r),f=d>0&&u.defaultDuration>0?d*1e9/u.defaultDuration:0,p=await Ln(n,o,c,l),m=Bn(l,Rn(l,p,f),t),h=u.defaultDuration?null:await Hn();if(s===`auto`){let e=typeof h==`object`&&h&&!h.setupUnsupported(r)?zn(l,p,t):0;s=m.ms<=t.exactBudgetMs+e?`exact`:`probe`;let n=e?` plus the ${e.toFixed(0)} ms that probe mode reads for the ffprobe estimate`:``;s===`probe`&&a.push(`exact block scan skipped: predicted ${m.ms.toFixed(0)} ms exceeds the ${t.exactBudgetMs} ms budget${n}`)}let g=i.videoTracks[0],_=e=>{typeof e!=`string`&&(g.avgFpsFfprobe=e.avg,g.rFpsFfprobe=e.r),g.warnings[g.warnings.indexOf(Dn)]=typeof e==`string`?`${En}not reproduced (${e})`:`${En}estimated like ffprobe from ${e.packets} video packets`};if(s===`exact`){n.window=m.window;let s=Y(r,n.size,o,t.maxExpandedSamples);m.window<t.readAhead.matroskaScan&&(s.switchReads=e.reads+2*m.reads+16,s.largeWindow=t.readAhead.matroskaScan);let l=typeof h==`object`&&h?h.attachEstimate(n,r,Vn,s):h;await Wn(n,s,c,t),l!==null&&_(typeof l==`function`?await Un(n,l):l),i.scan=`exact`,a.push(...s.warnings),s.truncated&&a.push(`truncated file: the last Cluster or block ends beyond EOF`),s.missingClusterTs&&a.push(`${s.missingClusterTs} block(s) in Clusters without a Timestamp`),Fn(r,s.maxAnyTicks,a);for(let[e,t]of o.entries()){let n=i.videoTracks[e];n.rateProfile=await de(Xn(n,s.tracks.get(t.number)))}return i}if(h!==null){let e=Y(r,n.size,[]),t=typeof h==`string`?h:h.attachEstimate(n,r,Vn,e,!0);_(typeof t==`string`?t:await Un(n,()=>$t(n,e,c).then(t)))}return n.window=m.window===4096?Z:t.readAhead.head,await Yn(n,r,o,i.videoTracks,c,t,a),i.scan=`probe`,i}function Qn(e){if(e?.aborted)throw e.reason??new DOMException(`Aborted`,`AbortError`)}function Q(e,t){if(!Number.isSafeInteger(e)||e<0)throw RangeError(`${t} must be a non-negative safe integer, got ${e}`)}var $n=class{size;headWindow;maxWindows;signal;#e;#t=[];#n=[];#r=0;#i=0;constructor(e,t={}){Q(e.size,`blob size`),this.#e=e,this.size=e.size,this.headWindow=t.headWindow??65536,this.maxWindows=Math.max(1,t.maxWindows??4),this.signal=t.signal??null,Q(this.headWindow,`headWindow`)}get reads(){return this.#r}get bytesFetched(){return this.#i}checkAbort(){Qn(this.signal)}async read(e,t){if(Q(e,`offset`),Q(t,`length`),e>this.size)throw RangeError(`offset ${e} is beyond the end of the file (${this.size})`);let n=Math.min(this.size,e+t);if(n===e)return new Uint8Array;this.checkAbort();let r;try{r=await this.#e.slice(e,n).arrayBuffer()}catch(e){throw this.checkAbort(),e?.name===`AbortError`?e:Error(`file read failed: ${e}`)}if(this.checkAbort(),this.#r++,r.byteLength!==n-e)throw Error(`file read failed: short read at ${e}: expected ${n-e} bytes, got ${r.byteLength}`);return this.#a(e,n),new Uint8Array(r)}async readMany(e,t=4){let n=Array(e.length),r=0,i=async()=>{for(;r<e.length;){let t=r++,[i,a]=e[t],o=this.peek(i,a);n[t]=o?new Uint8Array(o.buffer,o.byteOffset,o.byteLength):await this.read(i,a)}},a=[];for(let n=0;n<Math.max(1,Math.min(t,e.length));n++)a.push(i());return await Promise.all(a),n}peek(e,t){let n=Math.min(this.size,e+t);for(let t=0;t<this.#t.length;t++){let r=this.#t[t];if(e>=r.off&&n<=r.off+r.buf.length)return t>0&&(this.#t.splice(t,1),this.#t.unshift(r)),new DataView(r.buf.buffer,r.buf.byteOffset+(e-r.off),n-e)}return null}async view(e,t,n=this.headWindow){if(Q(e,`offset`),Q(t,`length`),Q(n,`readAhead`),e>this.size)throw RangeError(`offset ${e} is beyond the end of the file (${this.size})`);let r=Math.min(this.size,e+t);if(r===e)return new DataView(new ArrayBuffer(0));let i=this.peek(e,r-e);if(i)return i;let a=Math.min(this.size,Math.max(r,e+n)),o=this.#t.find(t=>e>=t.off&&e<t.off+t.buf.length),s;if(o){let t=o.buf.subarray(e-o.off),n=await this.read(o.off+o.buf.length,a-(o.off+o.buf.length));s=new Uint8Array(t.length+n.length),s.set(t,0),s.set(n,t.length)}else s=await this.read(e,a-e);return this.#t.unshift({off:e,buf:s}),this.#t.length>this.maxWindows&&(this.#t.length=this.maxWindows),new DataView(s.buffer,s.byteOffset,r-e)}async bytes(e,t,n=this.headWindow){let r=await this.view(e,t,n);return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}#a(e,t){let n=this.#n,r=0,i=n.length;for(;r<i;){let t=r+i>>>1;n[t].end<e?r=t+1:i=t}let a=r,o=e,s=t,c=0;for(;a<n.length&&n[a].start<=t;){let r=n[a],i=Math.min(t,r.end)-Math.max(e,r.start);i>0&&(c+=i),r.start<o&&(o=r.start),r.end>s&&(s=r.end),a++}n.splice(r,a-r,{start:o,end:s}),this.#i+=t-e-c}};let er=new Set([`ftyp`,`moov`,`mdat`,`free`,`skip`,`wide`,`pnot`,`uuid`,`moof`,`styp`,`sidx`]),tr=[26,69,223,163],nr=[{bytes:[137,80,78,71,13,10,26,10],offset:0,label:`PNG image`},{bytes:[255,216,255],offset:0,label:`JPEG image`},{bytes:[71,73,70,56],offset:0,label:`GIF image`},{bytes:[82,73,70,70],offset:0,label:`RIFF file (AVI/WAV/WebP)`},{bytes:[79,103,103,83],offset:0,label:`Ogg file`},{bytes:[70,76,86,1],offset:0,label:`FLV file`},{bytes:[0,0,1,186],offset:0,label:`MPEG program stream`},{bytes:[37,80,68,70],offset:0,label:`PDF document`},{bytes:[80,75,3,4],offset:0,label:`ZIP archive`},{bytes:[73,68,51],offset:0,label:`MP3 file`}];function rr(e,t,n){if(e.length<n+t.length)return!1;for(let r=0;r<t.length;r++)if(e[n+r]!==t[r])return!1;return!0}function ir(e){for(let t=4;t<8;t++){let n=e[t];if(n<32||n>126)return!1}return!0}function ar(e){let t=Math.min(e.length,512);if(t===0)return!1;for(let n=0;n<t;n++){let t=e[n];if(t!==9&&t!==10&&t!==13&&(t<32||t===127))return!1}return!0}function or(e){for(let t of nr)if(rr(e,t.bytes,t.offset))return t.label;return e.length>=188&&e[0]===71&&e[188]===71?`MPEG transport stream`:ar(e)?`text file`:`no known signature`}function sr(e){if(e.length===0)return{kind:`unknown`,reason:`empty file`};if(rr(e,tr,0))return{kind:`matroska`,reason:`EBML header 1A45DFA3`};if(e.length>=8&&ir(e)){let t=String.fromCharCode(e[4],e[5],e[6],e[7]);if(er.has(t)){let n=e[0]*16777216+e[1]*65536+e[2]*256+e[3];if(n===0)return{kind:`isobmff`,reason:`top-level '${t}' box running to end of file`};if(n>=8)return{kind:`isobmff`,reason:`top-level '${t}' box`};if(n===1){if(e.length<16)return{kind:`unknown`,reason:`'${t}' box with a truncated 64-bit size`};let n=0;for(let t=8;t<16;t++)n=n*256+e[t];if(n>=16)return{kind:`isobmff`,reason:`top-level '${t}' box with 64-bit size`}}return{kind:`unknown`,reason:`'${t}' box with invalid size ${n}`}}}return e.length<8?{kind:`unknown`,reason:`too small (${e.length} bytes)`}:{kind:`unknown`,reason:or(e)}}async function cr(e){let{kind:t}=sr(new Uint8Array(await e.slice(0,Math.min(1024,e.size)).arrayBuffer()));return t===`unknown`?null:t}c();function lr(e,t){let{perReadMs:n,bytesPerMs:r}=t.costModel,i=t.readAhead.head;return e<Math.max(i,Math.min(i+n*r,1048576))?e:i}function ur(e){return e?.name===`AbortError`}function dr(e){return e instanceof Error?e.message||e.name:String(e)}function fr(e,t){e.container=t.container,e.brand=t.brand,e.formatDurationSec=t.formatDurationSec,e.scan=t.scan,e.videoTracks=t.videoTracks,e.audioTrackCount=t.audioTrackCount,e.primaryTrackId=t.primaryTrackId,e.error=t.error,e.warnings=t.warnings}async function pr(e,t,n,r){let a=performance.now(),o=i(n);Qn(o.signal);let s={name:t,size:e.size,...b(`unknown`),io:{reads:0,bytesRead:0,ms:0},engine:`own`},c=null,l=0;try{if(c=new $n(e,{headWindow:o.readAhead.head,signal:o.signal}),c.size===0)s.error=`not a recognised container: empty file`;else{let e=sr(await c.bytes(0,Math.min(1024,c.size),lr(c.size,o)));if(e.kind===`unknown`)s.error=`not a recognised container: ${e.reason}`;else{s.container=e.kind===`isobmff`?`mp4`:`matroska`;let t=performance.now(),n=await r(e.kind);l=performance.now()-t,fr(s,await n(c,o))}}}catch(e){if(o.signal?.aborted||ur(e))throw e;s.error=dr(e)}return c&&(s.io.reads=c.reads,s.io.bytesRead=c.bytesFetched),s.io.ms=performance.now()-a-l,s}let $=(e,t)=>Object.assign(Error(e),{code:t}),mr=e=>e===`isobmff`||e===`matroska`;function hr(e){let t=self,n=new Map,r=new Map,i=e=>t.postMessage({v:1,...e}),a=t=>{let r=n.get(t);if(!r){let i=Object.hasOwn(e,t)?e[t]:void 0;if(!i)return Promise.reject($(`unknown engine ${t}`,`unknown-engine`));r=(typeof i==`function`?Promise.all([i(),Promise.resolve().then(()=>(ke(),A))]).then(([e])=>e):Promise.resolve(i)).catch(e=>{throw n.delete(t),e}),n.set(t,r)}return r},o=(e,t,n=!1,r=!1)=>{let a=t?.code,o=a===`unknown-engine`||a===`protocol`;i({type:`error`,id:e,message:dr(t),aborted:n||ur(t),...o?{code:a}:r&&{reason:`load`}})},s=async e=>{let t=new AbortController;r.set(e.id,t);let n=0,s=!0;try{if(!(e.file instanceof Blob))throw $(`malformed analyze request`,`protocol`);let r=await a(e.engine);if(s=!1,r.containers!==`any`){let t=await cr(e.file);if(!t||!r.containers.includes(t))return i({type:`skipped`,id:e.id,reason:`unsupported-container`,family:t})}let o=await r.run(e.file,e.name,{...e.options,signal:t.signal,onProgress:t=>{let r=performance.now();r-n<50||(n=r,i({type:`progress`,id:e.id,progress:t}))}});i({type:`result`,id:e.id,result:o})}catch(n){o(e.id,n,t.signal.aborted,s)}finally{r.delete(e.id)}},c=async e=>{try{if(![e.engines,e.containers].every(Array.isArray)||!e.containers.every(mr))throw $(`malformed warm request`,`protocol`);await Promise.all(e.engines.map(async t=>(await a(t)).warm?.(e.containers))),i({type:`warmed`,id:e.id})}catch(t){o(e.id,t,!1,!0)}};t.onmessage=({data:e})=>{if(e?.v!==1)return o(e?.id??0,$(`unsupported protocol version ${e?.v}`,`protocol`));if(e.type===`cancel`)r.get(e.id)?.abort();else if(e.type===`analyze`)s(e);else if(e.type===`warm`)c(e);else{let t=e;o(t.id,$(`unknown request type ${t.type}`,`protocol`))}}}let gr={isobmff:`ISO BMFF`,matroska:`Matroska`},_r=(e,t)=>`the own ${gr[e]} worker does not read ${gr[t]}`;function vr(e,t){return{containers:`any`,run:(n,r,i)=>pr(n,r,i,n=>{if(n!==e)throw Error(_r(e,n));return t})}}hr({own:vr(`matroska`,Zn)})})();
1
+ (function(){var e=Object.defineProperty,t=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},n=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r};function r(e,t){let n={...e};if(!t)return n;for(let e of Object.keys(t)){let r=t[e];r!==void 0&&(n[e]=r)}return n}function i(e={}){return{...e,signal:e.signal??null,matroskaMode:e.matroskaMode??`auto`,exactBudgetMs:e.exactBudgetMs??150,readAhead:r(o,e.readAhead),costModel:r(s,e.costModel),maxExpandedSamples:e.maxExpandedSamples??5e6,onProgress:e.onProgress??null}}function a(e,t,n){return t*e.perReadMs+n/e.bytesPerMs}var o,s,c=t((()=>{o={head:65536,fragment:1048576,matroskaScan:1048576,tail:262144},s={perReadMs:.8,bytesPerMs:5e5,perBlockMs:2e-4}}));function l(e){return e<0n?-e:e}function u(e,t){for(;t!==0n;){let n=e%t;e=t,t=n}return e}function d(e,t){if(typeof e==`bigint`)return e;if(!Number.isSafeInteger(e))throw RangeError(`${t} must be a safe integer, got ${e}`);return BigInt(e)}function f(e,t,n=v){let r=d(e,`num`),i=d(t,`den`),a=d(n,`max`),o=0n,s=1n,c=1n,f=0n,p=r<0n!=i<0n,m=u(l(r),l(i));for(m!==0n&&(r=l(r)/m,i=l(i)/m),r<=a&&i<=a&&(c=r,f=i,i=0n);i!==0n;){let e=r/i,t=r-i*e,n=e*c+o,l=e*f+s;if(n>a||l>a){if(c!==0n&&(e=(a-o)/c),f!==0n){let t=(a-s)/f;t<e&&(e=t)}i*(2n*e*f+s)>r*f&&(c=e*c+o,f=e*f+s);break}o=c,s=f,c=n,f=l,r=i,i=t}let h=Number(c);return{num:p?-h:h,den:Number(f),exact:i===0n}}function p(e){return e.den===0?0:e.num/e.den}function m(e){return e?`${e.num}/${e.den}`:`0/0`}function h(e,t){return{num:e,den:t,value:p({num:e,den:t})}}function g(e,t,n=v){let r=f(e,t,n);return h(r.num,r.den)}function _(e,t,n){return t<=0||n<=0||e<=0?null:g(BigInt(e)*BigInt(t),n,v)}var v,y=t((()=>{v=2147483647}));c(),y();function b(e,t=null){return{container:e,brand:null,formatDurationSec:null,scan:null,videoTracks:[],audioTrackCount:0,primaryTrackId:null,error:t,warnings:[]}}function x(e){return{trackId:e,fourccOrCodecId:``,codecName:``,width:0,height:0,rotation:0,timescale:0,frames:null,presentedFrames:null,durationSec:null,startSec:null,avgFps:null,avgFpsFfprobe:null,rFpsFfprobe:null,nominalFps:null,dominantFps:null,minFps:null,maxFps:null,isVfr:null,vfrRatio:0,distinctDeltas:0,duplicateTimestamps:0,timestampsQuantized:!1,isStill:!1,rateProfile:null,medianFrameInterval:null,provenance:{},warnings:[]}}var S=n({CUSUM_ALARM_PERIODS:()=>2,FREEZE_FACTOR:()=>4,FREEZE_MIN_SEC:()=>De,MAX_ANOMALIES:()=>50,MAX_BUCKETS:()=>120,MAX_SEGMENTS:()=>50,MIN_SEGMENT_FRAMES:()=>5,MIN_SEGMENT_SEC:()=>w,UNEVEN_DOMINANT_SHARE:()=>T,rateProfile:()=>k});function C(e,t,n){e.t0=Math.min(e.t0,t.t0),e.t1=Math.max(e.t1,t.t1),e.frames+=t.frames,n?(e.n+=t.n,e.sum+=t.sum,e.ex+=t.ex):e.ex+=t.t1-t.t0}var w,T,E,D,O,k,ee=t((()=>{ke(),w=.5,T=.8,E=1+Te,D=e=>String(+e.toPrecision(4)),O=e=>({t0:e,t1:e,n:0,sum:0,frames:0,ex:0,d:0,kind:`steady`}),k=(e,t,n,r)=>{let i=t,a=De*i,o=e=>i*e.n/e.sum,s=e=>e.n>=5&&e.t1-e.t0>=.5*i,c=[],l=e=>{let t=c[c.length-1];s(e)?c.push(e):t?.kind===`short`?C(t,e,!0):c.push({...e,kind:`short`})},u=O(0),d=O(0),f=O(0),p=0,m=0,h=0,g=0,_=0,v=!1,y=()=>{u.t1=p,v?c.push({...u,kind:`hold`}):l(u),u=O(p),v=!1,g=_=0},b=Math.min(120,Math.floor(n/2)),x=r/b,S=new Float64Array(b),w=(e,t)=>{u.n+=e,u.sum+=e*t,u.frames+=e,p+=e*t},T=(e,t)=>{let n=e;if(t<=0)u.frames+=n,h+=n;else{for(let e=p,r=e+n*t,i=Math.floor(e/x);e<r&&i<b;i++){let n=Math.min(r,(i+1)*x);n>e&&(S[i]+=(n-e)/t),e=Math.max(e,n)}for(;n>0;){let e=u.sum/u.n;if(u.n&&t>=Math.max(a,4*e)){y(),v=!0,w(1,t),n--;continue}if(v&&Math.abs(t-e)>.075*e&&y(),v=!1,!u.n){w(n,t);return}let r=t-e,i=Ee*e,o=2*e,s=Math.abs(r)>i,c=s?1:n;if(s&&(r>0?!g||r-i>o:!_)){let e={...u,t1:p,d:t};r>0?d=e:f=e}if(g=Math.max(0,g+c*(r-i)),_=Math.max(0,_-c*(r+i)),w(c,t),n-=c,g>o||_>o){let e=g>o?d:f,t=u.n-e.n-1;t>0&&Math.abs(Math.log(e.d*e.n/e.sum))<Math.abs(Math.log(e.d*t/(u.sum-e.sum-e.d)))&&(e.t1+=e.d,e.n++,e.sum+=e.d,e.frames++),u.t0=e.t1,u.n-=e.n,u.sum-=e.sum,u.frames-=e.frames,l(e),g=_=0}}}},k=0,ee=0;if(e((e,t)=>{e>0&&(m+=e,k&&t!==ee&&(T(k,ee),k=0),k+=e,ee=t)}),k&&T(k,ee),!(p>0))return null;u.n?y():c[c.length-1].frames+=u.frames;let A=[],te=(e,t,n,r,a=t.t1-t.t0)=>{A.push({kind:e,atSec:t.t0/i,durationSec:a/i,fromFps:n,toFps:r})},j=[],ne=(e,t)=>e?Math.abs(Math.log(o(e)/t)):1/0;c.forEach((e,t)=>{let n=j[j.length-1];if(e.kind===`short`||e.kind===`hold`){let r=o(e),i=c[t+1]?.kind===`steady`?c[t+1]:void 0,l=ne(n,r)<=ne(i,r)?n:i;if(e.kind=s(e)?`variable`:`steady`,e.kind===`steady`&&l){let t=o(l),n=e.sum>=e.n*Math.max(a,4*l.sum/l.n)?`freeze`:r*E<t?`gap`:r>t*E?`burst`:null;n&&te(n,e,t,r),C(l,e,!n);return}}let r=n?o(e)/o(n):0;n?.kind===`steady`&&e.kind===`steady`&&r<E&&r*E>1?C(n,e,!0):j.push(e)});let M=j[j.length-1],re=p+M.sum/M.n;M.frames+=n-m,M.t1=re;for(let e=1;e<j.length;e++){let t=j[e-1],n=j[e],r=o(n)/o(t);(t.kind===`steady`&&n.kind===`steady`||r>=E||r*E<=1)&&te(`rate-change`,n,o(t),o(n),0)}A.sort((e,t)=>e.atSec-t.atSec);let N=j.filter(e=>e.kind===`steady`).map(e=>[o(e),e.t1-e.t0-e.ex,e.n]).sort((e,t)=>e[0]-t[0]),P=0,F=0,I=0,L=0,R=0;for(let[e,t,n]of N){for(I+=t,L+=n;e>=N[R][0]*E;R++)I-=N[R][1],L-=N[R][2];P=Math.max(P,I),F=Math.max(F,L)}let ie=P/re,ae=ie<.8||F<.8*(m-h)||N.length>1&&N[N.length-1][0]>=N[0][0]*E,oe=j.slice(0,3).map(e=>`${e.kind===`variable`?`~`:``}${D(o(e))} fps for ${D((e.t1-e.t0)/i)} s`);j.length>3&&oe.push(`+${j.length-3} more`);let z=``,se=(e,t)=>{e&&(z+=`${z?`, `:`; `}${e} ${t}${e>1?`s`:``}`)};for(let e of[`freeze`,`gap`,`burst`])se(A.filter(t=>t.kind===e).length,e);return se(h,`duplicate timestamp`),{segments:j.slice(0,50).map(e=>({startSec:e.t0/i,endSec:e.t1/i,frames:e.frames,fps:o(e),kind:e.kind})),moreSegments:Math.max(0,j.length-50),anomalies:A.slice(0,50),moreAnomalies:Math.max(0,A.length-50),buckets:{bucketSec:x/i,fps:Array.from(S,e=>e*i/x)},uneven:ae,dominantShare:ie,summary:`${ae?`Uneven`:z?`Mostly steady`:`Steady`}: ${oe.join(`, `)}${z}`}}})),A=n({CUSUM_DRIFT:()=>Ee,FREEZE_FACTOR:()=>4,FREEZE_MIN_SEC:()=>De,MAX_REORDER_DEPTH:()=>16,RATE_CHANGE_RELATIVE:()=>Te,SNAP_RELATIVE_TOLERANCE:()=>Ce,VFR_RELATIVE_TOLERANCE:()=>we,analyzeTimeline:()=>P,msGridTicks:()=>j,rateFromTicks:()=>N,rateProfileOf:()=>de,reorderDepthFromCts:()=>M,snapToStandardRate:()=>te,vfrTolerance:()=>ne});function te(e,t=Ce){if(!(e>0))return null;let n=null,r=1/0;for(let t of Oe){let i=Math.abs(e-t.value)/t.value;i<r&&(r=i,n=t)}return r<=t?n:null}function j(e,t){if(!(e>1e3)||t.length===0)return 0;for(let n of t){let t=n*1e3;if(!Number.isSafeInteger(t)||t%e!==0)return 0}return e/1e3}function ne(e,t,n){return Math.max(1,Math.round(we*e),j(t,n))}function M(e,t,n){return!(t>e)||!(n>0)?0:Math.min(16,Math.ceil((t-e)/n))}function re(e){if(Number.isInteger(e)||!(e>0))return null;let t=1e9/e,n=Math.round(t);return n>0&&Math.abs(t-n)<=1e-6*n?n:null}function N(e,t){let n=re(e);return n!==null&&t>0&&Number.isSafeInteger(n*t)?g(1e9,n*t,2**53-1):L(e,t,2**53-1)}function P(e){let t=[],n=ie(e.timescale,t);return`segments`in e?ve(e,n,t):Se(e,n,t)}function F(e){return`counts`in e&&`deltas`in e?{n:Math.min(e.counts.length,e.deltas.length),counts:e.counts,values:e.deltas}:{n:e.length,counts:null,values:e}}function I(e){return e?`counts`in e&&`offsets`in e?{n:Math.min(e.counts.length,e.offsets.length),counts:e.counts,values:e.offsets}:{n:e.length,counts:null,values:e}:null}function L(e,t,n=v){if(!(e>0)||!(t>0))return null;if(Number.isSafeInteger(e)&&Number.isSafeInteger(t))return g(e,t,n);let r=1e6,i=Math.round(e*r),a=Math.round(t*r);return Number.isSafeInteger(i)&&Number.isSafeInteger(a)?g(i,a,n):h(e/t,1)}function R(e,t,n){if(!(t>0)||!(n>0))return null;let r=re(e);return r!==null&&Number.isSafeInteger(t)&&Number.isSafeInteger(n)?g(BigInt(t)*1000000000n,BigInt(r)*BigInt(n),v):Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&Number.isSafeInteger(n)?g(BigInt(e)*BigInt(t),n,v):L(e*t,n)}function ie(e,t){return e>0&&Number.isFinite(e)?e:(t.push(`invalid timescale ${e}, using 1`),1)}function ae(e){return e?{ws:e.start,we:e.end>e.start?e.end:1/0}:{ws:-1/0,we:1/0}}function oe(e,t){return{timescale:e,sampleCount:0,durationSum:0,avgFps:null,avgFpsString:`0/0`,presentedAvgFps:null,presentedFrames:null,firstPts:null,lastPts:null,deltaCount:0,excludedTailDeltas:0,reorderDepth:0,duplicateTimestamps:0,discontinuities:0,histogram:[],distinctDeltas:0,minDelta:null,maxDelta:null,medianDelta:null,medianFrameInterval:null,meanDelta:null,tolerance:null,minFps:null,maxFps:null,isVfr:null,vfrRatio:0,nominalFps:null,dominantFps:null,timestampsQuantized:!1,profile:null,fastPath:!1,warnings:t}}function z(e,t,n,r,i,a){let o=e.timescale,s=e.isVfr===!1&&n-t<=(e.tolerance??0)&&n<2*t;return n>t*1.075&&!s?e=>e(r,o,i,a):null}function se(e,t){let n=e.medianDelta,r=e.timescale;!n||!t||t<4*n||t<.5*r||e.warnings.push(`last frame held ${(t/r).toFixed(3)} s (${(t/n).toFixed(1)}x the median frame interval): the average is below the frame rate`)}function ce(e,t){if(se(e,t),e.presentedFrames===null||e.presentedFrames<=0||e.firstPts===null||e.lastPts===null)return;let n=t>0?t:e.medianDelta??0;e.presentedAvgFps=R(e.timescale,e.presentedFrames,e.lastPts-e.firstPts+n)}function le(e,t){let n=0;for(let[r,i]of B(e)){if(t<n+r)return i;n+=r}return 0}async function ue(){try{let{rateProfile:e}=await Promise.resolve().then(()=>(ee(),S));return e}catch{return null}}async function de(e){let t=e&&await ue();return t?e(t):null}function fe(e,t){return e-t>=2?e-t:e}function pe(e,t,n){let r=e.timescale,i=[...t.keys()].sort((e,t)=>e-t),a=i.map(e=>[e,t.get(e)??0]),o=0,s=0;for(let[e,t]of a)o+=t,s+=e*t;if(e.histogram=a,e.distinctDeltas=i.length,o===0)return;let c=0,l=i[0];for(let[e,t]of a)if(c+=t,c*2>=o){l=e;break}let u=i[0],d=0;for(let[e,t]of a)t>d&&(u=e,d=t);let f=j(r,i),p=Math.max(1,Math.round(we*l),f),m=0;for(let[e,t]of a)Math.abs(e-l)>p&&(m+=t);let g=i[0],_=i[i.length-1],v=o>=2&&m>0;e.minDelta=g,e.maxDelta=_,e.medianDelta=l;let y=N(r,l);if(e.medianFrameInterval=y&&h(y.den,y.num),e.meanDelta=s/o,e.tolerance=p,e.minFps=N(r,_),e.maxFps=N(r,g),e.isVfr=v,e.vfrRatio=m/o,i.length===1){let t=N(r,g);t&&(e.nominalFps={...t,kind:`exact`})}else if(v&&d*2>=o){let t=N(r,u);t&&(e.dominantFps={rate:t,share:d/o})}e.timestampsQuantized=(n||f>0)&&!v&&i.length>1}function me(e){if(e.nominalFps||e.isVfr!==!1||e.distinctDeltas<2||!e.avgFps)return;let t=te(e.meanDelta?e.timescale/e.meanDelta:e.avgFps.value);t&&(e.nominalFps={...t,kind:`snapped`})}function he(e){let t={n:0,d:0,constantCts:!0,ctsValue:0,ctsMin:1/0,ctsMax:-1/0,firstDelta:0,negativeDurations:!1,discontinuities:0,startDts:0,ctsMismatch:0},n=!1,r=e=>{n?e!==t.ctsValue&&(t.constantCts=!1):(t.ctsValue=e,n=!0),e<t.ctsMin&&(t.ctsMin=e),e>t.ctsMax&&(t.ctsMax=e)},i=0;for(let n=0;n<e.length;n++){let a=e[n];a.baseDts!==void 0&&a.baseDts!==null&&(n===0?t.startDts=a.baseDts:a.baseDts!==i&&t.discontinuities++,i=a.baseDts);let o=F(a.durations),s=0;for(let e=0;e<o.n;e++){let n=o.counts?o.counts[e]:1;if(n<=0)continue;let r=o.values[e];s+=n,t.d+=n*r,i+=n*r,r<0&&(t.negativeDurations=!0),t.firstDelta===0&&r>0&&(t.firstDelta=r)}t.n+=s;let c=I(a.cts),l=0,u=0;if(c){for(let e=0;e<c.n;e++){let t=c.counts?c.counts[e]:1;if(t<=0)continue;u+=t;let n=Math.min(t,s-l);n<=0||(l+=n,r(c.values[e]))}u!==s&&t.ctsMismatch++}l<s&&r(0)}return n||(t.ctsMin=0,t.ctsMax=0),t}function*B(e){for(let t of e){let e=F(t.durations);for(let t=0;t<e.n;t++){let n=e.counts?e.counts[t]:1;n>0&&(yield[n,e.values[t]])}}}function ge(e,t,n,r){if(n===-1/0)return 0;if(n===1/0)return r;let i=t,a=0;for(let[t,r]of B(e)){if(r===0){if(i<n){a+=t;continue}return a}if(i+(t-1)*r<n)a+=t,i+=t*r;else return a+Math.max(0,Math.min(t,Math.ceil((n-i)/r)))}return a}function _e(e,t,n){let r=t,i=0;for(let[t,a]of B(e)){if(n<i+t)return r+(n-i)*a;i+=t,r+=t*a}return r}function ve(e,t,n){let r=e.segments,i=he(r);i.ctsMismatch>0&&n.push(`composition offsets do not match the sample count in ${i.ctsMismatch} segment(s)`),i.discontinuities>0&&n.push(`decode timestamp discontinuities: ${i.discontinuities}`),i.negativeDurations&&n.push(`negative sample durations`),Number.isSafeInteger(i.d)||n.push(`duration sum exceeds 2^53-1`);let a=oe(t,n);if(a.sampleCount=i.n,a.durationSum=i.d,a.discontinuities=i.discontinuities,a.avgFps=R(t,i.n,i.d),a.avgFpsString=m(a.avgFps),i.n===0)return a.presentedFrames=0,a;let o=e.reorderDepth??M(i.ctsMin,i.ctsMax,i.firstDelta);a.reorderDepth=o;let s=1+o,{ws:c,we:l}=ae(e.editWindow),u=e.tickQuantized??!1;if(!e.forceExpand&&i.constantCts&&i.discontinuities===0&&!i.negativeDurations){a.fastPath=!0;let e=i.startDts+i.ctsValue,t=ge(r,e,c,i.n),n=Math.max(t,ge(r,e,l,i.n));if(a.presentedFrames=n-t,n===t)return a;let o=_e(r,e,t),d=_e(r,e,n-1);a.firstPts=o,a.lastPts=d;let f=n-t-1,p=fe(f,s),m=new Map,h=0,g=1/0,_=0;for(let[e,n]of B(r)){if(h>=t+f)break;let r=Math.max(h,t),i=Math.min(h+e,t+f);if(i>r){if(n===0)a.duplicateTimestamps+=i-r;else{g=Math.min(g,n),_=Math.max(_,n);let i=Math.min(h+e,t+p);i>r&&(m.set(n,(m.get(n)??0)+(i-r)),a.deltaCount+=i-r)}}h+=e}return a.excludedTailDeltas=f-p,pe(a,m,u),me(a),ce(a,le(r,n-1)),a.profile=z(a,g,_,e=>{let n=0;for(let[i,a]of B(r)){if(n>=t+f)break;let r=Math.max(n,t),o=Math.min(n+i,t+f);o>r&&e(o-r,a),n+=i}},n-t,d-o),a}let d=e.maxExpandedSamples??5e6;if(i.n>d)return n.push(`per-sample analysis skipped: ${i.n} samples exceed the limit of ${d}`),a;let f=new Float64Array(i.n),p=0,h=0;for(let e of r){e.baseDts!==void 0&&e.baseDts!==null&&(h=e.baseDts);let t=p,n=F(e.durations);for(let e=0;e<n.n;e++){let t=n.counts?n.counts[e]:1,r=n.values[e];for(let e=0;e<t;e++)f[p++]=h,h+=r}let r=I(e.cts);if(r){let e=t;for(let t=0;t<r.n&&e<p;t++){let n=r.counts?r.counts[t]:1,i=r.values[t];for(let t=0;t<n&&e<p;t++)f[e++]+=i}}}let g=-1;for(let e=0;e<f.length;e++){let t=f[e];t>=c&&t<l&&(g<0||t>=f[g])&&(g=e)}let _=g>=0?le(r,g):0;return be(a,ye(f,c,l),s,u),ce(a,_),me(a),a}function ye(e,t,n){let r=e.length;if(t!==-1/0||n!==1/0){r=0;for(let i=0;i<e.length;i++){let a=e[i];a>=t&&a<n&&(e[r++]=a)}}let i=e.subarray(0,r);for(let e=1;e<r;e++)if(i[e]<i[e-1]){i.sort();break}return i}function be(e,t,n,r){let i=t.length;if(e.presentedFrames=i,i===0)return;e.firstPts=t[0],e.lastPts=t[i-1];let a=i-1,o=fe(a,n),s=new Map,c=1/0,l=0;for(let n=1;n<=a;n++){let r=t[n]-t[n-1];r<=0?e.duplicateTimestamps++:(c=Math.min(c,r),l=Math.max(l,r),n<=o&&(s.set(r,(s.get(r)??0)+1),e.deltaCount++))}e.excludedTailDeltas=a-o,pe(e,s,r),e.profile=z(e,c,l,e=>{for(let n=1;n<=a;n++)e(1,t[n]-t[n-1])},i,t[a]-t[0])}function xe(e){let t=-1/0,n=0;for(let r=0;r<e.length;r++){let i=e[r];i>t?t=i:t-i>n&&(n=t-i)}return n}function Se(e,t,n){let r=e.pts,i=r.length,a=oe(t,n);if(a.sampleCount=i,i===0)return a.presentedFrames=0,a;let o=1/0,s=-1/0;for(let e=0;e<i;e++){let t=r[e];t<o&&(o=t),t>s&&(s=t)}let{ws:c,we:l}=ae(e.editWindow),u=ye(Float64Array.from(r),c,l),d=e.reorderDepth;if(d===void 0){let t=0;for(let e=1;e<u.length;e++){let n=u[e]-u[e-1];if(n>0){t=n;break}}d=e.ctsRange?M(e.ctsRange.min,e.ctsRange.max,t):M(0,xe(r),t)}a.reorderDepth=d,be(a,u,1+d,e.tickQuantized??!1),se(a,e.lastDuration);let f=e.lastDuration??a.medianDelta??0;return a.durationSum=s-o+f,a.avgFps=R(t,i,a.durationSum),a.avgFpsString=m(a.avgFps),a.presentedAvgFps=a.avgFps,me(a),a}var Ce,we,Te,Ee,De,Oe,ke=t((()=>{Ce=.001,we=.005,Te=.15,Ee=Te/2,De=.5,Oe=(()=>{let e=[];for(let t of[24,30,48,60,120,240])e.push(h(t*1e3,1001));for(let t=1;t<=240;t++)e.push(h(t,1));return e})()}));let Ae=408125543,V=290298740,je=19899,Me=21419,Ne=21420,H=357149030,Pe=2807729,Fe=17545,U=374648427,Ie=29637,Le=2352003,Re=2306383,ze=22186,Be=25506,Ve=28032,He=2327523,Ue=475249515,W=307544935,We=29555,Ge=25536,Ke=25541,qe=26568,Je=17827,Ye=17543,Xe=423732329,Ze=24999,Qe=18016,$e=272869232,et=30114,tt=new Set([V,H,U,Ue,W,524531317,$e,Xe]);function G(e){return e===0?0:Math.clz32(e)-23}function nt(e,t){if(t>=e.length)return null;let n=G(e[t]);if(n<1||n>4||t+n>e.length)return null;let r=0;for(let i=0;i<n;i++)r=r*256+e[t+i];return{id:r,length:n}}function rt(e,t){if(t>=e.length)return null;let n=e[t],r=G(n);if(r<1||t+r>e.length)return null;let i=255>>r,a=(n&i)===i,o=n&i;for(let n=1;n<r;n++){let r=e[t+n];r!==255&&(a=!1),o=o*256+r}return a?{size:-1,length:r}:o>2**53-1?null:{size:o,length:r}}function K(e,t,n){let r=nt(e,t);if(!r)return null;let i=rt(e,t+r.length);return i?{id:r.id,pos:n+t,size:i.size,dataStart:n+t+r.length+i.length}:null}function it(e,t){if(t>=e.length)return!0;let n=G(e[t]);if(n<1||n>4)return!1;let r=t+n;return r>=e.length||e[r]!==0&&r+G(e[r])>e.length}function at(e,t,n){let r=t<n?G(e[t]):0;if(r<1||t+r>n)return null;let i=e[t]&255>>r;for(let n=1;n<r;n++)i=i*256+e[t+n];return{value:i,length:r}}function ot(e,t,n){let r=0;for(let i=0;i<n;i++)r=r*256+e[t+i];return r}function st(e,t,n){let r=0n;for(let i=0;i<n;i++)r=r<<8n|BigInt(e[t+i]);return r}function ct(e,t,n){if(n===0)return 0;let r=new DataView(e.buffer,e.byteOffset+t,n);return n===4?r.getFloat32(0):n===8?r.getFloat64(0):NaN}let lt=new TextDecoder;function q(e,t,n){let r=t;for(;r<t+n&&e[r]!==0;)r++;return lt.decode(e.subarray(t,r)).replace(/[^\x20-\x7e\xa0-\uffff]/g,`?`)}function*ut(e,t,n){let r=t,i=Math.min(n,e.length);for(;r<i;){let t=K(e,r,0);if(!t||t.size===-1||t.dataStart+t.size>i)return;yield{id:t.id,start:t.dataStart,size:t.size},r=t.dataStart+t.size}}function dt(e,t){return t.size>6?Number(st(e,t.start,t.size)):ot(e,t.start,t.size)}function ft(e){if(e?.aborted)throw e.reason??new DOMException(`Aborted`,`AbortError`)}function J(e,t,n=RangeError){if(!Number.isSafeInteger(e)||e<0)throw new n(`${t} must be a non-negative safe integer, got ${e}`)}var pt=class{size;headWindow;maxWindows;signal;#e;#t=[];#n=[];#r=0;#i=0;constructor(e,t={}){J(e.size,`blob size`,TypeError),this.#e=e,this.size=e.size,this.headWindow=t.headWindow??65536,this.maxWindows=Math.max(1,t.maxWindows??4),this.signal=t.signal??null,J(this.headWindow,`headWindow`,TypeError)}get reads(){return this.#r}get bytesFetched(){return this.#i}checkAbort(){ft(this.signal)}async read(e,t){if(J(e,`offset`),J(t,`length`),e>this.size)throw RangeError(`offset ${e} is beyond the end of the file (${this.size})`);let n=Math.min(this.size,e+t);if(n===e)return new Uint8Array;this.checkAbort();let r;try{r=await this.#e.slice(e,n).arrayBuffer()}catch(e){throw this.checkAbort(),e?.name===`AbortError`?e:Y(`read-failed`,`file read failed: ${e}`)}if(this.checkAbort(),this.#r++,r.byteLength!==n-e)throw Y(`read-failed`,`file read failed: short read at ${e}: expected ${n-e} bytes, got ${r.byteLength}`);return this.#a(e,n),new Uint8Array(r)}async readMany(e,t=4){let n=Array(e.length),r=0,i=async()=>{for(;r<e.length;){let t=r++,[i,a]=e[t],o=this.peek(i,a);n[t]=o?new Uint8Array(o.buffer,o.byteOffset,o.byteLength):await this.read(i,a)}},a=[];for(let n=0;n<Math.max(1,Math.min(t,e.length));n++)a.push(i());return await Promise.all(a),n}peek(e,t){let n=Math.min(this.size,e+t);for(let t=0;t<this.#t.length;t++){let r=this.#t[t];if(e>=r.off&&n<=r.off+r.buf.length)return t>0&&(this.#t.splice(t,1),this.#t.unshift(r)),new DataView(r.buf.buffer,r.buf.byteOffset+(e-r.off),n-e)}return null}async view(e,t,n=this.headWindow){if(J(e,`offset`),J(t,`length`),J(n,`readAhead`,TypeError),e>this.size)throw RangeError(`offset ${e} is beyond the end of the file (${this.size})`);let r=Math.min(this.size,e+t);if(r===e)return new DataView(new ArrayBuffer(0));let i=this.peek(e,r-e);if(i)return i;let a=Math.min(this.size,Math.max(r,e+n)),o=this.#t.find(t=>e>=t.off&&e<t.off+t.buf.length),s;if(o){let t=o.buf.subarray(e-o.off),n=await this.read(o.off+o.buf.length,a-(o.off+o.buf.length));s=new Uint8Array(t.length+n.length),s.set(t,0),s.set(n,t.length)}else s=await this.read(e,a-e);return this.#t.unshift({off:e,buf:s}),this.#t.length>this.maxWindows&&(this.#t.length=this.maxWindows),new DataView(s.buffer,s.byteOffset,r-e)}async bytes(e,t,n=this.headWindow){let r=await this.view(e,t,n);return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}#a(e,t){let n=this.#n,r=0,i=n.length;for(;r<i;){let t=r+i>>>1;n[t].end<e?r=t+1:i=t}let a=r,o=e,s=t,c=0;for(;a<n.length&&n[a].start<=t;){let r=n[a],i=Math.min(t,r.end)-Math.max(e,r.start);i>0&&(c+=i),r.start<o&&(o=r.start),r.end>s&&(s=r.end),a++}n.splice(r,a-r,{start:o,end:s}),this.#i+=t-e-c}};function Y(e,t){return Object.assign(Error(t),{errorCode:e})}function mt(e,t=`internal`){return e?.errorCode??(e instanceof RangeError?`corrupt`:t)}var ht=class{reader;size;window;buf=new Uint8Array;base=0;#e=[];constructor(e,t){this.reader=e,this.size=e.size,this.window=t;let n=e.peek(0,Math.min(e.size,e.headWindow));n&&n.byteLength>0&&this.#t({base:0,buf:new Uint8Array(n.buffer,n.byteOffset,n.byteLength)})}has(e,t){return e>=this.base&&Math.min(this.size,e+t)<=this.base+this.buf.length}cached(e,t){let n=Math.min(this.size,e+t);return this.#e.some(t=>e>=t.base&&n<=t.base+t.buf.length)||this.reader.peek(e,n-e)!==null}async load(e,t,n=this.window){if(this.has(e,t))return;let r=Math.min(this.size,e+t);for(let t of this.#e)if(e>=t.base&&r<=t.base+t.buf.length){this.#t(t);return}let i=Math.max(t,n),a=await this.reader.view(e,i,i);this.#t({base:e,buf:new Uint8Array(a.buffer,a.byteOffset,a.byteLength)})}chunkAt(e){return this.#e.find(t=>e>=t.base&&e<t.base+t.buf.length)??null}async header(e){return this.has(e,12)||await this.load(e,12),K(this.buf,e-this.base,this.base)}#t(e){this.buf=e.buf,this.base=e.base;let t=this.#e.indexOf(e);t>=0&&this.#e.splice(t,1),this.#e.unshift(e),this.#e.length>4&&(this.#e.length=4)}};let gt=new Map([[V,[je]],[H,[Pe,Fe,19840,22337,29604,17505,31657,29572,3979555,3965867,4110627,4096955,17476,26916]],[U,[174]],[Ue,[187]],[W,[We]],[$e,[17849]],[Xe,[Ze]]]),_t=new Uint8Array(256);for(let e of tt)_t[e>>>24]=1;let vt=new Uint8Array(256);vt[31]=1;function yt(e,t,n){if(e[t]!==31||e[t+1]!==67||e[t+2]!==182||e[t+3]!==117)return!1;let r=rt(e,t+4);if(!r)return!1;let i=t+4+r.length,a=r.size===-1?e.length:Math.min(e.length,i+r.size);if(r.size!==-1&&i+r.size>n)return!1;for(let t=0;t<4&&i<a;t++){let t=nt(e,i);if(!t)return!1;let n=rt(e,i+t.length);if(!n||n.size===-1)return!1;if(t.id===231)return n.size<=8;if(t.id!==191&&t.id!==236&&t.id!==167&&t.id!==171)return!1;i+=t.length+n.length+n.size}return!1}function bt(e,t,n,r){let i=nt(e,t);if(i?.length!==4)return!1;if(i.id===524531317)return yt(e,t,n);let a=gt.get(i.id),o=rt(e,t+4);if(!a||!o||o.size<2)return!1;let s=t+4+o.length+o.size,c=s<=r?K(e,t+4+o.length,0):null;return!!c&&c.size!==-1&&c.dataStart+c.size<=s&&(a.includes(c.id)||c.id===236||c.id===191)}async function xt(e,t,n,r,i={}){let a=i.clustersOnly?vt:_t,o=i.step??Math.max(e.window,65536),s=Math.max(0,t),c=Math.min(n,e.size);for(;s<c;){let t=e.chunkAt(s);if(!t||t.base+t.buf.length<e.size&&t.base+t.buf.length-s<128){if(i.canLoad&&!i.canLoad())return-1;let n=Math.min(o,c-s+64);await e.load(s,Math.min(n,e.size-s),n),t={base:e.base,buf:e.buf}}let n=t.buf,l=t.base,u=Math.min(l+n.length>=e.size?n.length:n.length-64,c-l);if(u<=s-l)break;for(let e=s-l;e<u;e++)if(a[n[e]]&&r(n,e,l))return l+e;s=l+u}return-1}function St(e,t,n,r,i={}){return xt(e,t,n,(e,t,n)=>yt(e,t,r-n),{...i,clustersOnly:!0})}function Ct(e,t,n,r,i={}){let a=e.size;return xt(e,t,n,(e,t,n)=>bt(e,t,r-n,a-n),i)}let wt=new Map([[V,`SeekHead`],[H,`Info`],[W,`Tags`]]),Tt=new Set([V,H,U,W,Xe]),Et=new Map([[V,[je]],[je,[Me,Ne]],[H,[Pe,Fe]],[U,[174]],[174,[215,Ie,131,185,134,Be,Ve,Le,Re,ze,224]],[224,[176,186,He]],[W,[We]],[We,[Ge,qe]],[Ge,[Ke]],[qe,[Je,Ye,qe]],[Xe,[Ze]],[Ze,[Qe]],[Ue,[187]],[187,[183]],[183,[241]]]),Dt=e=>e.toString(16).toUpperCase();function X(e,t=0){return e.reader.reads<5&&e.reader.bytesFetched+Math.max(t,e.window)<=1048576}function Ot(e){let t=/^\s*(\d+):(\d{1,2}):(\d{1,2}(?:\.\d+)?)\s*$/.exec(e);return t?Number(t[1])*3600+Number(t[2])*60+Number(t[3]):null}function kt(){return{number:0,uid:0n,type:0,codecId:``,defaultDuration:0,frameRate:0,trackTimestampScale:1,codecDelay:0,codecPrivate:null,encoded:!1,width:0,height:0}}function At(e,t){t.trackTimestampScale>=.01||(t.trackTimestampScale=1),!t.defaultDuration&&t.frameRate>0&&(t.defaultDuration=Math.trunc(1e9/t.frameRate)),Number.isSafeInteger(t.defaultDuration)||(t.defaultDuration=0),e.tracks.push(t)}function jt(e,t,n,r,i,a=null,o=null){let s=o??kt(),c=-1,l=-1,u=[],d=[],f=``,p=``,m=!1,h=(n,r,i,o)=>{let g=Et.get(n)??[];if(o>16)m=!0;else for(let m of ut(t,r,i)){if(!g.includes(m.id))continue;let r=m.start,i=m.size,_=()=>dt(t,m),v=()=>h(m.id,r,r+i,o+1);switch(m.id){case 174:s=kt(),s.entry=t.slice(r,r+i),v(),At(e,s);break;case We:u=[],d=[],v();for(let t of d)for(let n of u.length?u:[0n])e.tagDurations.has(n)||e.tagDurations.set(n,t);break;case qe:{let e=[f,p];f=p=``,v();let t=n===29555&&(f===`DURATION`||f.startsWith(`DURATION-`))?Ot(p):null;t!==null&&d.push(t),[f,p]=e;break}case je:c=l=-1,v(),c>=0&&l>=0&&!e.seek.has(c)&&e.seek.set(c,e.segmentData+l);break;case 215:s.number=_();break;case Ie:s.uid=st(t,r,i);break;case 131:s.type=_();break;case 185:s.disabled=!_();break;case 134:s.codecId=q(t,r,i);break;case Le:s.defaultDuration=_();break;case Re:s.trackTimestampScale=ct(t,r,i);break;case ze:s.codecDelay=_();break;case Ve:s.encoded=!0;break;case Be:s.codecPrivate=t.slice(r,r+Math.min(i,4096));break;case 176:s.width=_();break;case 186:s.height=_();break;case He:s.frameRate=ct(t,r,i);break;case Pe:_()>0&&(e.timestampScale=_());break;case Fe:{let n=ct(t,r,i);i!==0&&i!==4&&i!==8?e.warnings.push(`Duration has an invalid size of ${i} bytes`):Number.isFinite(n)?e.duration=n:e.warnings.push(`invalid Duration value ${n}`);break}case Me:c=i<=4?_():-1;break;case Ne:l=_();break;case Ke:u.push(st(t,r,i));break;case Je:f=q(t,r,i).toUpperCase();break;case Ye:p=q(t,r,i);break;case Qe:q(t,r,i).startsWith(`image/`)&&e.attachedImages++;break;case 241:a?.push(e.segmentData+_());break;default:v()}}};h(i,n,r,2),m&&e.warnings.push(`elements nested deeper than 16 levels ignored`)}async function Mt(e,t){return e.cached(t,12)||X(e)?e.header(t):null}async function Nt(e,t,n){let r=Math.min(n.dataStart+n.size,e.size),i=n.dataStart;for(;i<r;){let n=await Mt(e,i);if(!n||n.size===-1)break;let a=Math.min(n.dataStart+n.size,r);if(n.id===174){let r=kt();for(let i=n.dataStart;i<a;){let n=await Mt(e,i);if(!n||n.size===-1)break;let o=n.dataStart+n.size-n.pos;n.size<=65536&&n.pos+o<=a&&(e.cached(n.pos,o)||X(e,o))&&(await e.load(n.pos,o),jt(t,e.buf,n.pos-e.base,n.pos-e.base+o,174,null,r)),i=n.pos+o}At(t,r)}i=n.dataStart+n.size}i<r&&t.warnings.push(`Tracks at ${n.pos} only partly read (header budget)`)}async function Pt(e,t,n,r){if(r.at.add(n.pos),n.id===475249515&&(t.cuesPos??=n.pos),!Tt.has(n.id))return;let i=Math.max(0,Math.min(n.size,e.size-n.dataStart)),a=Math.min(i,1048576),o=e.cached(n.dataStart,a);if(n.id===374648427&&a<i&&!o){r.ids.add(n.id),await Nt(e,t,n);return}if(!o&&(!X(e,a)||n.id===423732329)){n.id===374648427?(r.ids.add(n.id),await Nt(e,t,n)):n.id!==423732329&&t.warnings.push(`${wt.get(n.id)??Dt(n.id)} element at byte ${n.pos} not read (header budget)`);return}r.ids.add(n.id),await e.load(n.dataStart,a);let s=n.dataStart-e.base;jt(t,e.buf,s,s+a,n.id)}function Ft(e,t,n){e.segmentUnknownSize||e.segmentExtended||(e.segmentExtended=!0,e.segmentEnd=t.size,e.declaredEnd=Math.max(e.declaredEnd,t.size),e.warnings.push(`${n}: the Segment size is wrong, reading to the end of the file like ffprobe`))}async function It(e,t,n){let r=n;for(let n=0;n<16&&r<e.size;n++){if(!e.cached(r,12)&&!X(e))return t.warnings.push(`Segment search stopped at ${r} (header budget)`),null;let n=await e.header(r),i=e.buf,a=r-e.base;if(i[a]===24&&i[a+1]===83&&i[a+2]===128&&i[a+3]===103)return n||(t.warnings.push(`corrupt Segment size at ${r}`),t.segmentExtended=!0,{id:Ae,pos:r,size:-1,dataStart:r+4+(G(i[a+4])||8)});if(!n||n.size===-1)return null;r=n.dataStart+n.size}return null}async function Lt(e){let t={docType:`matroska`,segmentData:0,segmentEnd:0,declaredEnd:0,segmentUnknownSize:!1,segmentExtended:!1,timestampScale:1e6,duration:0,tracks:[],tagDurations:new Map,firstCluster:null,walkEnd:0,cuesPos:null,seek:new Map,attachedImages:0,warnings:[]},n=await e.header(0);if(!n||n.id!==440786851||n.size===-1||n.dataStart+n.size>e.size)throw Y(`corrupt`,`invalid EBML header`);await e.load(n.dataStart,Math.min(n.size,4096));let r=n.dataStart-e.base;for(let i of ut(e.buf,r,r+n.size))i.id===17026&&(t.docType=q(e.buf,i.start,i.size));let i=()=>X(e),a=await It(e,t,n.dataStart+n.size);if(!a){let r=await Ct(e,n.dataStart+n.size,e.size,e.size,{canLoad:i});if(r<0)throw Y(`no-header`,`no Segment element`);t.warnings.push(`no valid Segment header: reading level-1 elements from ${r}`),t.segmentExtended=!0,a={id:Ae,pos:r,size:-1,dataStart:r}}t.segmentData=a.dataStart,t.segmentUnknownSize=a.size===-1&&!t.segmentExtended,t.declaredEnd=a.size===-1?2**53-1:a.dataStart+a.size,t.segmentEnd=Math.min(e.size,t.declaredEnd),t.declaredEnd>e.size&&a.size!==-1&&t.warnings.push(`truncated file: Segment ends ${t.declaredEnd-e.size} bytes after EOF`);let o={ids:new Set,at:new Set},s=t.segmentData,c=s,l=-1;for(;!(s>=t.segmentEnd&&(s>=e.size||(Ft(t,e,`Segment ends at ${s} before any Cluster`),s>=t.segmentEnd)));){if(!e.cached(s,12)&&!i()){t.warnings.push(`header walk stopped at ${s} (header budget)`),l=s;break}let n=await e.header(s);if(n?.id===524531317){t.firstCluster=s;break}let r=`invalid data at ${s} before the first Cluster`;if(n&&n.size!==-1&&(tt.has(n.id)||n.id===236||n.id===191)){let i=n.dataStart+n.size;if(i>t.segmentEnd&&i<=e.size&&Ft(t,e,`${Dt(n.id)} at ${s} ends after the Segment`),await Pt(e,t,n,o),c=s+1,i<=e.size){s=i;continue}r=`${Dt(n.id)} at ${s} ends after the end of the file`}let a=await Ct(e,c,e.size,Math.max(t.declaredEnd,e.size),{canLoad:i});if(t.warnings.push(a<0?r:`${r}: resynchronised at ${a}`),a<0)break;a>=t.segmentEnd&&Ft(t,e,`level-1 element at ${a} after the Segment end`),c=a+1,s=a}t.walkEnd=t.firstCluster??(l>=0?l:c);for(let n of[V,H,U,W]){let r=t.seek.get(n);if(r===void 0||o.at.has(r)||n!==290298740&&o.ids.has(n)||r>=t.segmentEnd)continue;let i=await Mt(e,r);i?.id===n?await Pt(e,t,i,o):t.warnings.push(`SeekHead entry ${Dt(n)} not followed`)}if(t.cuesPos??=t.seek.get(475249515)??null,o.ids.has(357149030)||t.warnings.push(`no Info element: TimestampScale 1000000 assumed`),!t.tracks.length)throw o.ids.has(374648427)?Y(`truncated`,`no complete TrackEntry in Tracks`):Y(`no-header`,`no Tracks element found`);return t}let Rt=2147483647n,zt=new Set([231,163,160,167,171,236,191]),Bt=new Set([161,155,251,et,30113,164,236,191]),Vt=new Set([231,155,251,et]);function Ht(e,t,n,r=1/0){let i=new Map;for(let t of n){let n=Math.trunc(e.timestampScale*t.trackTimestampScale)||e.timestampScale;i.set(t.number,{track:t,tickNs:n,codecDelayTicks:Math.round(t.codecDelay/n),pts:new Float64Array(256),n:0,blocks:0,frames:0,invisible:0,missingPts:0,noPtsFrames:0,nextPts:NaN,pending:[],overLimit:0,maxPts:-1/0,maxPtsDur:0})}return{header:e,tracks:i,known:new Set(e.tracks.map(e=>e.number)),fileSize:t,maxSamples:r,clusters:0,truncated:!1,missingClusterTs:0,maxAnyTicks:-1/0,lastGood:-1,resyncs:0,afterSegment:-1,switchReads:1/0,largeWindow:0,warnings:[]}}function Ut(e,t,n){if(e.n===e.pts.length){let t=new Float64Array(Math.max(e.n+1,Math.min(e.pts.length*2,n)));t.set(e.pts),e.pts=t}e.pts[e.n++]=t}function Wt(e,t,n){let r=Math.min(e.length,t+n),i=at(e,t,r);if(!i)return null;let a=t+i.length;if(a+3>r)return null;let o=e[a]<<24>>16|e[a+1],s=e[a+2],c=1;if(s&6){if(a+4>r)return null;c=e[a+3]+1}return{track:i.value,rel:o,flags:s,laces:c}}function Gt(e,t,n,r){if(t>=n)return`invalid`;if(t>=r)return`more`;let i=G(e[t]);if(!i||t+i>n)return`invalid`;if(t+i>r)return`more`;let a=BigInt(e[t]&255>>i);for(let n=1;n<i;n++)a=a*256n+BigInt(e[t+n]);return{v:a,n:i}}function Kt(e,t,n,r){let i=t+n,a=Math.min(i,e.length),o=Wt(e,t,a-t);if(!o){let n=t<a?G(e[t]):0;return a<i&&(t>=a||n>0&&t+n+4>a)?`more`:`invalid`}let s=t+G(e[t]);if(r&&!r.has(o.track))return`invalid`;let c=o.flags>>1&3;if(!c)return o;let l=i-s-4;if(l<0)return`invalid`;let u=o.laces,d=s+4;if(c===2)return l%u?`invalid`:o;if(c===1){let t=0;for(let n=0;n<u-1;n++){let n;do{if(l<=t)return`invalid`;if(d>=a)return`more`;n=e[d++],t+=n,l--}while(n===255)}return l<t?`invalid`:o}let f=Gt(e,d,i,a);if(typeof f==`string`)return f;if(f.v>Rt)return`invalid`;let p=f.v,m=f.v;d+=f.n;for(let t=1;t<u-1;t++){if(f=Gt(e,d,i,a),typeof f==`string`)return f;let t=p+f.v-((1n<<BigInt(7*f.n-1))-1n);if(t<0n||t>Rt)return`invalid`;p=t,m+=t,d+=f.n}return BigInt(i-d)<m?`invalid`:o}function qt(e,t,n,r){t.n<e.maxSamples?Ut(t,n,e.maxSamples):t.overLimit++,n>=t.maxPts&&(t.maxPts=n,t.maxPtsDur=r),t.nextPts=n+r}function Jt(e,t,n,r){let i=n+t.rel;i>e.maxAnyTicks&&(e.maxAnyTicks=i);let a=e.tracks.get(t.track);if(!a)return null;let o=t.laces;a.blocks++,a.frames+=o,t.flags&8&&a.invisible++;let s=r>0?r:Math.floor(a.track.defaultDuration*o/e.header.timestampScale),c=e=>Math.floor(s*e/o);if(i<0){a.noPtsFrames+=o;for(let t=0;t<o;t++)Number.isNaN(a.nextPts)?a.pending.push(c(t+1)-c(t)):qt(e,a,a.nextPts,c(t+1)-c(t));return a}let l=a.track.trackTimestampScale,u=(l===1?n:Math.floor(n/l))+t.rel-a.codecDelayTicks,d=u;for(let e of a.pending)d-=e;for(let t of a.pending.splice(0))qt(e,a,d,t),d+=t;for(let t=0;t<o;t++){if(t>0&&s===0){a.missingPts+=o-t;break}qt(e,a,u+c(t),c(t+1)-c(t))}return a}async function Yt(e,t,n){let r=Math.min(n.size,16);for(;;){e.has(n.dataStart,r)||await e.load(n.dataStart,r);let i=Kt(e.buf,n.dataStart-e.base,n.size,t.known);if(i!==`more`)return i;if(r>=n.size)return`invalid`;r=Math.min(n.size,r*8)}}function Xt(e,t){return e.has(t,12)?K(e.buf,t-e.base,e.base):void 0}async function Zt(e,t){return(Xt(e,t)??await e.header(t))||(it(e.buf,t-e.base)?`eof`:`invalid`)}function Qt(e,t){return e.has(t.dataStart,t.size)?ot(e.buf,t.dataStart-e.base,t.size):void 0}async function $t(e,t){return await e.load(t.dataStart,t.size),ot(e.buf,t.dataStart-e.base,t.size)}function en(e,t){return e.size===-1||e.dataStart+e.size>t||Vt.has(e.id)&&e.size>8||(e.id===163||e.id===161)&&e.size>268435456?`invalid`:null}async function tn(e,t,n,r=1/0){let i=Xt(e,n)??await e.header(n);if(!i||i.id!==524531317)return null;let a=t.fileSize,o=i.size===-1?1/0:i.dataStart+i.size;t.clusters++;let s=-1,c=0,l=i.dataStart,u=e=>({next:l,videoBlocks:c,error:e});for(;l<o;){if(c>=r||t.stop)return{next:Math.min(o,l),videoBlocks:c,error:null};if(t.switchReads<=e.reader.reads&&(e.window=t.largeWindow,t.switchReads=1/0),l>=a)return o===1/0?{next:l,videoBlocks:c,error:null}:u(`eof`);let n=Xt(e,l);if(n||=await Zt(e,l),typeof n==`string`)return u(n);let i=zt.has(n.id);if(!i&&o===1/0&&(tt.has(n.id)||n.id===408125543))return{next:l,videoBlocks:c,error:null};let d=en(n,o);if(d)return u(d);i&&(t.lastGood=l);let f=n.dataStart+n.size;if(f>a)return u(`eof`);if(n.id===231)s=Qt(e,n)??await $t(e,n);else if(n.id===163||n.id===160){let r=n,i=0;if(n.id===160){r=null;for(let a=n.dataStart;a<f;){let n=Xt(e,a)||await Zt(e,a),o=typeof n==`string`?n:en(n,f);if(o||typeof n==`string`)return l=a,u(o??`invalid`);Bt.has(n.id)&&(t.lastGood=a),n.id===161?r=n:n.id===155&&(i=Qt(e,n)??await $t(e,n)),a=n.dataStart+n.size}}if(r){let n=e.has(r.dataStart,Math.min(r.size,16))?Kt(e.buf,r.dataStart-e.base,r.size,t.known):`more`;if(n===`more`&&(n=await Yt(e,t,r)),n===`invalid`)return u(`invalid`);s<0&&(t.missingClusterTs++,s=0);let a=Jt(t,n,s,i);t.onBlock?.(n,s,i,r),a&&a.track.type===1&&c++}}l=f}return{next:o,videoBlocks:c,error:null}}function nn(e,t,n,r){n<0&&r===`eof`?e.truncated=!0:++e.resyncs>5||(n<0?e.warnings.push(`invalid data at ${t}, no further level-1 element`):n>=t?e.warnings.push(`skipped ${n-t} bytes of invalid data at ${t}`):e.warnings.push(`invalid data at ${t}: resynchronised at ${n}`))}async function rn(e,t,n,r){let i=t.header,a=t.fileSize,o=i.segmentUnknownSize||i.segmentExtended?1/0:i.declaredEnd,s=n;for(t.lastGood=n-1;!t.stop;){e.reader.checkAbort(),r?.(s,Math.min(a,o));let n=null,i=s;if(s>=a){s<o&&o!==1/0&&(t.truncated=!0);break}if(s>=o){o=1/0;let n=await Ct(e,Math.max(t.lastGood+1,s),a,1/0);if(n<0)break;t.afterSegment<0&&(t.afterSegment=s),s=n;continue}let c=await Zt(e,s);if(typeof c==`string`)n=c;else{let r=tt.has(c.id)||c.id===236||c.id===191;if(c.id===408125543&&o===1/0?(t.afterSegment<0&&(t.afterSegment=s),n=`invalid`):c.size===-1?c.id===524531317?o=1/0:n=`invalid`:c.dataStart+c.size>o&&(n=`invalid`),!n){if(r&&(t.lastGood=s),c.id===524531317){let r=await tn(e,t,s);r.error?(n=r.error,i=r.next):s=r.next}else c.dataStart+c.size>a?n=`eof`:s=c.dataStart+c.size}}if(!n)continue;o=1/0;let l=await Ct(e,t.lastGood+1,a,1/0);if((n!==`invalid`||i!==t.afterSegment)&&nn(t,i,l,n),l<0)break;s=l}t.resyncs>5&&t.warnings.push(`${t.resyncs-5} more resynchronisation(s) after invalid data`),t.afterSegment>=0&&t.warnings.push(`data after the Segment end at ${t.afterSegment} was scanned like ffprobe does (concatenated files?)`)}async function an(e,t,n,r){await e.load(t,n-t,n-t);let i=e.buf,a=e.base,o=[];for(let e=n-a-4;e>=t-a;e--)i[e]===31&&yt(i,e,r-a)&&o.push(a+e);return o}var on=n({attachEstimate:()=>_n,av1TimingInfo:()=>mn,h264Sps:()=>dn,setupUnsupported:()=>gn});function sn(e){let t=Math.floor(e),n=e-t;return n>.5||n===.5&&t%2!=0?t+1:t}function cn(e,t){for(;t;)[e,t]=[t,e%t];return e}function ln(e,t){let n=e>>3,r=n<12?[480,960,1920,2880][n&3]:n<16?[480,960][n&1]:[120,240,480,960][n&3],i=e&3,a=i===0?1:i<3?2:t&63;return a>0&&r*a<=5760?r*a:0}function un(e){let t=[];for(let n=1,r=0;n<e.length;n++)r>=2&&e[n]===3?r=0:(t.push(e[n]),r=e[n]?0:r+1);let n=0,r=e=>{let r=0;for(let i=n+e;n<i;n++){if(n>>3>=t.length)throw RangeError();r=r*2+(t[n>>3]>>7-(n&7)&1)}return r};return{u:r,ue:()=>{let e=0;for(;!r(1);)if(++e>31)throw RangeError();return 2**e-1+r(e)}}}function dn(e){let{u:t,ue:n}=un(e);try{let e=t(8);if(e!==66)return`H.264 profile ${e}`;t(16),n();let r={frameNumBits:n()+4,pocType:n(),pocLsbBits:0,fixedDelay:!1};if(r.pocType===0&&(r.pocLsbBits=n()+4),r.pocType===1){t(1),n(),n();for(let e=n();e>0;e--)n()}if(r.frameNumBits>16||r.pocLsbBits>16||r.pocType>2)return`bad H.264 SPS`;n(),t(1),n(),n();let i=t(1)||(t(1),0);if(t(1),t(1))for(let e=0;e<4;e++)n();if(t(1)){if(t(1)&&t(8)===255&&t(32),t(1)&&t(1),t(1)&&(t(4),t(1))&&t(24),t(1)&&(n(),n()),t(1))return`H.264 timing info`;if(t(1)||t(1)||t(1))return`H.264 HRD or pic_struct`;if(t(1)){t(1);for(let e=0;e<4;e++)n();if(n())return`H.264 reordering`;r.fixedDelay=!0}}return r.pocType===1?`H.264 pic_order_cnt_type 1`:i?r:`H.264 field coding`}catch{return`bad H.264 SPS`}}function fn(e,t){let n=[];if(t)for(let r=0;r+t<=e.length;){let i=0;for(let n=r+t;r<n;r++)i=i*256+e[r];n.push(e.subarray(r,r+=i))}else for(let t=0,r=-1;t<=e.length;t++)t<e.length&&(e[t]||e[t+1]||e[t+2]!==1)||(r>=0&&n.push(e.subarray(r,t)),r=t+3,t+=2);return n}function pn(e,t){let n=e?(e[4]&3)+1:0,r=e?[]:fn(t[0],0);if(e){let t=5;for(let n of[31,255])for(let i=e[t++]&n,a=0;i-->0&&t+2<=e.length;t+=2+a)a=e[t]<<8|e[t+1],r.push(e.subarray(t+2,t+2+a))}let i=e=>e[0]&31,a=r.find(e=>i(e)===7),o=a?dn(a):`no H.264 SPS`;if(typeof o==`string`)return o;let s=[];for(let e of t){let t=fn(e,n).find(e=>i(e)===1||i(e)===5);if(!t)return`no H.264 slice header`;s.push(t)}if(i(s[0])!==5)return`H.264 does not start with an IDR`;let c=r.filter(e=>i(e)===8);if(!c.length)return`no H.264 PPS`;let l=2**o.frameNumBits,u=0,d=NaN,f=-1,p=0,m=null;try{for(let e of c){let{u:t,ue:n}=un(e);if(n(),n(),t(1),t(1)&&!o.pocType)return`H.264 bottom field POC`}for(let e of s){let{u:t,ue:n}=un(e);n(),n(),n();let r=t(o.frameNumBits);if(i(e)===5)n(),u=p=0,d=NaN,m=null;else if(f>=0&&r!==f&&r!==(f+1)%l)return`H.264 frame_num gap`;else r<f&&(p+=l);f=r;let a=2*(p+r)-(e[0]&96?0:1);if(!o.pocType){let n=t(o.pocLsbBits),r=2**o.pocLsbBits;d>=0||(d=n);let i=n<d&&d-n>=r/2?u+r:n>d&&n-d>r/2?u-r:u;a=i+n,e[0]&96&&([u,d]=[i,n])}if(m!==null&&(o.fixedDelay?a<m:a-m!==1&&a-m!==2))return`H.264 POC step ${a-m}`;m=a}}catch{return`bad H.264 PPS or slice header`}return null}function mn(e){for(let t=0;t<e.length;){let n=e[t],r=t+1+(n>>2&1),i=e.length-r;if(n&2)for(let t=0,n=128;n&128;t+=7)i=(t?i:0)+((n=e[r++]??0)&127)*2**t;if((n>>3&15)==1)return r<e.length?(e[r]&12)==4:null;t=r+i}return null}function hn(e,t){let n=e.codecPrivate;if(e.codecId===Cn){let e=mn(n&&n.length>4?n.subarray(4):t[0]);return e===null?`no AV1 sequence header`:e?`AV1 timing info`:null}return e.codecId===Sn?pn(n,t):null}function gn(e){let t=e.tracks.filter(e=>e.type===1);if(t.length!==1)return`${t.length} video tracks`;if(new Set(e.tracks.map(e=>e.number)).size<e.tracks.length)return`duplicate track numbers`;if(e.attachedImages)return`attached pictures`;if(![`V_VP8`,`V_VP9`,Cn,Sn].includes(t[0].codecId))return`codec ${t[0].codecId}`;for(let t of e.tracks){if(t.trackTimestampScale!==1||t.encoded)return`track ${t.number} scale or encoding`;let e=t.codecPrivate;if(t.type!==1&&(t.codecId!==`A_OPUS`||!e||String.fromCharCode(...e.subarray(0,8))!==`OpusHead`||e[18]!==0))return`track ${t.number} (${t.codecId||t.type})`}return null}function _n(e,t,n,r,i=!1){let a=gn(t);if(a)return a;let o=new Map;for(let e of t.tracks){let n=f(Math.trunc(t.timestampScale*e.trackTimestampScale),1e9,v);o.set(e.number,{tb:n,nb:0,cid:0,durs:0,seen:!1,first:null,firstIdx:0,last:null,lastIdx:0})}let s=t.tracks.find(e=>e.type===1),c=o.get(s.number),l=c.tb,u=l.num/l.den,d=s.codecId===Sn,p=d||l.den>=101*l.num||l.den<5*l.num,m=p?u>5e-4?40:20:0,h=new Float64Array(4*Z),g=(e,t)=>{let n=h[2*e*Z+t]/y;return h[(2*e+1)*Z+t]/y-n*n},_=null,y=0,b=0,x=0,S=0,C=null,w=null,T=null,E=()=>r.resyncs||r.truncated||r.missingClusterTs,D=[],O=n.newScanState(t,e.size,t.tracks),k=(r,i,a,s)=>{let f=n.addBlock(O,r,i,a);if(S>=vn||c.nb&&y>=m&&[...o.values()].every(e=>e.seen||e.nb>=yn))return!1;let p=o.get(f.track.number),v=s.dataStart+Math.clz32(e.buf[s.dataStart-e.base])-20,w=s.dataStart+s.size-v,T=p===c,E=a||Math.floor(f.track.defaultDuration*r.laces/t.timestampScale);if(r.laces>1||f.noPtsFrames?C=`laced or untimed blocks`:!E&&!T?(E=Math.floor(ln(e.buf[v-e.base],w>1?e.buf[v+1-e.base]:0)*p.tb.den/(48e3*p.tb.num)),(!E||w<1)&&(C=`a bad Opus packet`)):!E&&l.num*1e3>l.den&&(E=1),T&&!c.nb&&s.id===163&&!(r.flags&128)&&(C=`no keyframe first`),C)return!1;S+=w;let k=T&&d&&c.nb<bn?null:f.pts[f.n-1];if(k!==null&&p.nb>1&&(p.last!==null&&(p.last>=k||p.first!==null&&p.lastIdx>p.firstIdx&&Math.floor((k-p.last)/1e3)>Math.floor((p.last-p.first)/(p.lastIdx-p.firstIdx)))&&(p.first=null),p.first===null&&(p.first=k,p.firstIdx=p.nb),p.last=k,p.lastIdx=p.nb),p.nb>1){let e=Tn(p.cid,p.tb);if(!e&&p.nb>30&&p.first!==null&&p.last!==null&&(e=Tn(p.last-p.first,p.tb)),e>=vn)return!1;E>0&&(p.cid+=E,p.durs++)}if(T&&k!==null&&_!==null&&k>_){let e=k*u;for(let t=0;t<Z;t++){if(!(h[Z+t]<1e10))continue;let n=e*wn(t)/12012;for(let e=0;e<2;e++){let r=n-sn(n+e*.5)+e*.5;h[2*e*Z+t]+=r,h[(2*e+1)*Z+t]+=r*r}}if(y++,b+=k-_,y%10==0)for(let e=0;e<Z;e++)h[Z+e]<1e10&&g(0,e)>.04&&g(1,e)>.04&&(h[Z+e]=h[3*Z+e]=2e10);y>3&&(x=cn(x,k-_))}if(T&&k!==null&&(_=k),k!==null&&(p.seen=!0),T&&c.nb<(d?bn:1)){let t=Math.min(w,xn);D.push(e.has(v,t)?e.buf.slice(v-e.base,v+t-e.base):[v,t])}return p.nb++,!0};return r.onBlock=(e,t,n,a)=>{if(T===null){try{if(k(e,t,n,a))return}catch(e){w=[e]}T=E(),i&&(r.stop=!0)}},async()=>{if(w)throw w[0];if(C)return C;if(!c.nb||(T??E()))return`damaged first Clusters`;let t=[];for(let n of D)t.push(n instanceof Uint8Array?n:(await e.load(n[0],n[1],n[1]),e.buf.slice(n[0]-e.base,n[0]+n[1]-e.base)));let n=hn(s,t);if(n)return n;let r=null,i=null;if(p&&y>15&&x>Math.max(1,Math.floor(l.den/(500*l.num)))&&(r=f(l.den,BigInt(l.num)*BigInt(x),v)),y>1&&!r&&p){let e=0,t=.01;for(let n=0;n<Z;n++){let r=wn(n);if(!((c.cid?c.cid*u<11511.5/r:r<12012)||u*b/y<9609.6/r))for(let i=0;i<2;i++){let a=g(i,n);a<t&&t>1e-9&&(t=a,e=r)}}e&&e/12012<1.01*(l.den/l.num)&&(r=f(e,12012,v))}if(r&&b&&c.cid<=0&&y>2&&Math.abs(1/(r.num/r.den*u)-b/y)<=1&&(i=r),c.durs&&!i&&c.cid){i=f(BigInt(c.durs)*BigInt(l.den),BigInt(c.cid)*BigInt(l.num),6e4);let e=.01,t=0;for(let n=0;n<Z;n++){let r=Math.abs(i.num/i.den/(wn(n)/12012)-1);r<e&&(e=r,t=wn(n))}t&&(i=f(t,12012,v))}return r??={num:l.den,den:l.num},{avg:i?`${i.num}/${i.den}`:`0/0`,r:`${r.num}/${r.den}`,packets:c.nb}}}var Z,vn,yn,bn,xn,Sn,Cn,wn,Tn,En=t((()=>{y(),Z=399,vn=5e6,yn=50,bn=7,xn=1024,Sn=`V_MPEG4/ISO/AVC`,Cn=`V_AV1`,wn=e=>e<360?(e+1)*1001:e<390?(e-329)*12012:e<393?[80,120,240][e-390]*12012:[24,30,60,12,15,48][e-393]*12e3,Tn=(e,t)=>Number((BigInt(e)*BigInt(t.num)*1000000n+BigInt(t.den>>1))/BigInt(t.den))}));c(),y(),ke();let Q=4096,Dn=262144,On=5e6,kn=new Set([231,236,191,167,171]);s.perBlockMs;let An=`no DefaultDuration: avg_frame_rate and r_frame_rate `,jn=`${An}come from the first packets, which header mode does not read`;function Mn(e){for(let t of`V_AV1:av1 V_VP8:vp8 V_VP9:vp9 V_MPEG4/ISO/AVC:h264 V_MPEGH/ISO/HEVC:hevc V_MPEGI/ISO/VVC:vvc V_MPEG4/ISO/ASP:mpeg4 V_MPEG4/ISO/AP:mpeg4 V_MPEG4/ISO/SP:mpeg4 V_MPEG4/MS/V3:msmpeg4v3 V_MPEG1:mpeg1video V_MPEG2:mpeg2video V_PRORES:prores V_MJPEG:mjpeg V_FFV1:ffv1 V_THEORA:theora V_UNCOMPRESSED:rawvideo V_DIRAC:dirac`.split(` `)){let[n,r]=t.split(`:`);if(e.startsWith(n))return r}return``}function Nn(e){if(!(e>0))return null;let t=g(1e9,e,3e4),n=m(t);return{avg:n,r:t.num<t.den*1e3&&t.num>t.den*5?n:null}}function Pn(e,t){let n=new Map,r={minFps:null,maxFps:null,isVfr:null,vfrRatio:0,distinctDeltas:0,duplicateTimestamps:0,timestampsQuantized:!1,medianDelta:null,medianFrameInterval:null},i=0;for(let e of t){r.duplicateTimestamps+=e.duplicateTimestamps;for(let[t,r]of e.histogram)n.set(t,(n.get(t)??0)+r),i+=r}let a=[...n.keys()].sort((e,t)=>e-t);if(r.distinctDeltas=a.length,i===0)return r;let o=0,s=a.find(e=>(o+=n.get(e)??0)*2>=i)??a[0],c=ne(s,e,a),l=0;for(let e of a)Math.abs(e-s)>c&&(l+=n.get(e)??0);r.medianDelta=s;let u=N(e,s);return r.medianFrameInterval=u&&{num:u.den,den:u.num,value:u.den/u.num},r.minFps=N(e,a[a.length-1]),r.maxFps=N(e,a[0]),r.isVfr=i>=2&&l>0,r.vfrRatio=l/i,r.timestampsQuantized=!r.isVfr&&a.length>1,r}function Fn(e,t,n){e.minFps=t.minFps,e.maxFps=t.maxFps,e.isVfr=t.isVfr,e.vfrRatio=t.vfrRatio,e.distinctDeltas=t.distinctDeltas,e.duplicateTimestamps=t.duplicateTimestamps,e.timestampsQuantized=t.timestampsQuantized,e.medianFrameInterval=t.medianFrameInterval;for(let t of[`minFps`,`maxFps`,`isVfr`,`duplicateTimestamps`,`medianFrameInterval`])e.provenance[t]=n}function In(e,t,n){let r=x(t.number);n.codecConfig&&(r.codecConfig={family:`matroska`,trackEntry:t.entry??null}),r.fourccOrCodecId=t.codecId,r.codecName=Mn(t.codecId),r.width=t.width,r.height=t.height,r.enabled=!t.disabled,r.timescale=1e9/(Math.trunc(e.timestampScale*t.trackTimestampScale)||e.timestampScale),r.provenance.codec=r.provenance.dimensions=`header`;let i=Nn(t.defaultDuration);i?(r.avgFpsFfprobe=i.avg,r.rFpsFfprobe=i.r,r.nominalFps={...g(1e9,t.defaultDuration,3e4),kind:`declared`},r.provenance.nominalFps=`header`,t.frameRate>0&&t.defaultDuration===Math.trunc(1e9/t.frameRate)&&r.warnings.push(`DefaultDuration derived from Video FrameRate ${t.frameRate}`)):r.warnings.push(jn);let a=e.tagDurations.get(t.uid);return a!==void 0&&(r.durationSec=a,r.provenance.durationSec=`header`),r}function Ln(e){return e.duration*e.timestampScale/1e9}function Rn(e,t,n){let r=n.durationSec??Ln(e);r>0&&t.defaultDuration>0&&n.warnings.push(`about ${Math.round(r*1e9/t.defaultDuration)} frames (estimated from duration x DefaultDuration, assumes CFR)`)}function zn(e,t,n){let r=Ln(e),i=t*e.timestampScale/1e9;r>0&&Number.isFinite(i)&&r-i>Math.max(.5,.02*r)&&n.push(`Info Duration ${r.toFixed(3)} s exceeds the last block at ${i.toFixed(3)} s (false Duration or truncated file)`)}function Bn(e,t,n){e.provenance.durationSec===`header`&&e.durationSec!==null&&Math.abs(e.durationSec-t)>Math.max(2/e.timescale,1/(e.nominalFps?.value||1/0))&&e.warnings.push(`DURATION tag ${e.durationSec.toFixed(3)} s differs from the scanned ${t.toFixed(3)} s`),e.durationSec=t,e.provenance.durationSec=n}async function Vn(e,t,n,r){let i=Math.min(r,16384);await e.load(n,i,i);let a=e.chunkAt(n);if(!a)return null;let o=a.buf,s=a.base,c=s+o.length,l={bytes:0,blocks:0,video:0,large:0,smallBytes:0},u=n;for(;u<c;){let e=K(o,u-s,s);if(e?.id===524531317){u=e.dataStart;continue}if(!e||e.size===-1)break;let i=e.dataStart+e.size,a=e.id===163||e.id===160;if(a?e.size>268435456||i>n+r:i>c||!kn.has(e.id))break;if(a){let n=e.id===160?K(o,e.dataStart-s,s):e,r=n&&(n.id===163||n.id===161)?Wt(o,n.dataStart-s,n.size):null,a=r&&t.some(e=>e.number===r.track)?r.laces:0;l.blocks+=Math.max(1,a),l.video+=a,i-e.pos>=4096?l.large++:l.smallBytes+=i-e.pos}l.bytes=i-n,u=i}return l.blocks&&l.bytes>0?l:null}function Hn(e,t,n){if(!t){if(!(n>0))return null;let t=e/n>=Q;return{blocks:n,large:t?n:0,smallBytes:t?0:e}}let r=e/t.bytes,i=t.video*r;return{blocks:t.blocks*r*(t.video>0&&n>i?n/i:1),large:t.large*r,smallBytes:t.smallBytes*r}}function Un(e,t,n){let r=Math.min(e,On,t?.video?Math.ceil(48*t.bytes/t.video):On);return a(n.costModel,Math.ceil(r/n.readAhead.head),r)}function Wn(e,t,n){let r=(t?.blocks??0)*n.costModel.perBlockMs,i=(e,t,i)=>({window:e,reads:t,bytes:i,ms:a(n.costModel,t,i)+r}),o=n.readAhead.matroskaScan,s=i(o,Math.ceil(e/o),e);if(!t)return s;let c=Math.ceil(t.large+t.smallBytes/Q),l=i(Q,c,Math.min(e,c*Q));return l.ms<s.ms?l:s}let Gn={newScanState:Ht,addBlock:Jt};async function Kn(){try{return await Promise.resolve().then(()=>(En(),on))}catch{return`the estimate code did not load`}}async function qn(e,t){try{return await t()}catch(t){return e.reader.checkAbort(),`the estimate failed: ${t instanceof Error?t.message:String(t)}`}}async function Jn(e,t,n,r){let i=e.reader,a=r.onProgress,o=i.reads,s=t.header.segmentEnd-n;a?.({phase:`matroska-exact`,done:0,total:s}),await rn(e,t,n,(e,t)=>{s=Math.max(s,t-n),a&&i.reads!==o&&(o=i.reads,a({phase:`matroska-exact`,done:Math.min(e-n,s),total:s}))}),a?.({phase:`matroska-exact`,done:s,total:s})}async function Yn(e,t){let n=t.firstCluster===null?null:await e.header(t.firstCluster);if(n?.id===524531317)return n.pos;let r=Math.max(t.segmentData,t.walkEnd),i=await St(e,r,Math.min(t.segmentEnd,r+16777216),t.declaredEnd,{step:Dn});if(i>=0)return i;for(let n of(await Xn(e,t)).slice(0,4))if((await e.header(n))?.id===524531317)return n;return null}async function Xn(e,t){let n=t.cuesPos===null||t.cuesPos>=t.segmentEnd?null:await e.header(t.cuesPos);if(n?.id!==475249515||n.size===-1)return[];let r=Math.min(n.size,524288,e.size-n.dataStart);await e.load(n.dataStart,r,r);let i=[];return jt(t,e.buf,n.dataStart-e.base,n.dataStart-e.base+r,Ue,i),[...new Set(i)].filter(e=>e<t.segmentEnd).sort((e,t)=>e-t)}function Zn(e,t){return e.length<=t?[...e]:[...new Set(Array.from({length:t},(n,r)=>e[Math.round(r*(e.length-1)/(t-1))]))]}async function Qn(e,t,n,r,i){let a=Math.max(i.readAhead.tail||0,4096),o=t.segmentEnd,s=-1/0;for(;;){let i=Math.max(r,t.segmentEnd-a);for(let r of i<o?await an(e,i,o,t.declaredEnd):[]){let i=Ht(t,e.size,n);if(await tn(e,i,r),s=Math.max(s,i.maxAnyTicks),i.tracks.get(n[0].number)?.n)return{st:i,maxAnyTicks:s}}if(i<=r||a>=16777216)return null;o=i+4,a=Math.min(a*4,16777216)}}async function $n(e,t,n,r,i,a,o){let s=await Qn(e,t,n,i,a),c=await Xn(e,t),l=Zn(c[0]===i||!c.length?c:[i,...c.filter(e=>e>i)],8);if(!c.length){l=[i];let n=t.segmentEnd-i;for(let r=1;r<8;r++){let a=i+Math.floor(r*n/8),o=await St(e,a,Math.min(t.segmentEnd,a+1048576),t.declaredEnd,{step:Dn});o>l[l.length-1]&&l.push(o)}}let u=new Map,d=null,f=0;for(let r of l){let a=Ht(t,e.size,n);if(await tn(e,a,r,32)){f++,r===i&&(d=a);for(let e of a.tracks.values()){if(e.n<2)continue;let t=u.get(e.track.number)??[];t.push(P({timescale:1e9/e.tickNs,pts:e.pts.subarray(0,e.n),tickQuantized:!0})),u.set(e.track.number,t)}}}o.push(`probe: ${f} cluster(s) sampled via ${c.length?`Cues`:`sync search`}, up to 32 video blocks each`),s||o.push(`probe: no video block found in the tail`),zn(t,s?.maxAnyTicks??-1/0,o),n.forEach((e,n)=>{let i=r[n],a=i.timescale,o=Pn(a,u.get(e.number)??[]);o.isVfr===null?f>0&&i.warnings.push(`probe: every sampled cluster holds fewer than 2 frames of this track, so no frame interval was measured; scan all frames for min, max and VFR`):Fn(i,o,`sampled`);let c=d?.tracks.get(e.number),l=c?.n?Math.min(...c.pts.subarray(0,c.n)):null;l!==null&&(i.startSec=l/a,i.provenance.startSec=`sampled`);let p=s?.st.tracks.get(e.number);p?.n&&Bn(i,(p.maxPts+(p.maxPtsDur>0?p.maxPtsDur:o.medianDelta??0)-(l??0))/a,`sampled`),Rn(t,e,i)})}function er(e,t){let n=e.timescale;if(e.frames=e.presentedFrames=t.frames,e.provenance.frames=e.provenance.presentedFrames=`computed`,e.isStill=t.frames===1,t.invisible&&e.warnings.push(`${t.invisible} invisible block(s) counted as frames`),t.missingPts&&e.warnings.push(`${t.missingPts} laced frame(s) without a timestamp`),t.noPtsFrames&&e.warnings.push(`${t.noPtsFrames} frame(s) before time 0 have no timestamp; interpolated from the neighbouring frames like ffmpeg`),t.overLimit&&e.warnings.push(`per-frame statistics skipped: more than ${t.n} frames`),!t.n||t.overLimit)return t.n||e.warnings.push(`no blocks for this track`),null;let r=P({timescale:n,pts:t.pts.subarray(0,t.n),lastDuration:t.maxPtsDur>0?t.maxPtsDur:null,tickQuantized:!0});return e.warnings.push(...r.warnings),Bn(e,r.durationSum/n,`exact`),Fn(e,r,`exact`),e.avgFps=t.frames!==t.n&&Number.isSafeInteger(n)&&Number.isSafeInteger(r.durationSum)?_(n,t.frames,r.durationSum):r.avgFps,e.startSec=r.firstPts===null?null:r.firstPts/n,e.dominantFps=r.dominantFps,e.provenance.avgFps=e.provenance.startSec=e.provenance.dominantFps=`exact`,!e.nominalFps&&r.nominalFps?(e.nominalFps=r.nominalFps,e.provenance.nominalFps=`exact`):e.nominalFps&&e.avgFps&&Math.abs(e.avgFps.value/e.nominalFps.value-1)>.005&&e.warnings.push(`declared rate ${e.avgFpsFfprobe} differs from the measured average ${e.avgFps.value.toFixed(3)}`),r.duplicateTimestamps&&e.warnings.push(`${r.duplicateTimestamps} duplicate block timestamp(s) excluded from the instantaneous rates`),r.profile}async function tr(e,t){let n=new ht(e,t.readAhead.head),r=await Lt(n),i=b(r.docType===`webm`?`webm`:`matroska`),a=i.warnings;i.brand=r.docType,i.scan=`header`,a.push(...r.warnings),r.docType!==`webm`&&r.docType!==`matroska`&&a.push(`unexpected DocType '${r.docType}'`),r.segmentUnknownSize&&a.push(`Segment has an unknown size (live or unfinished recording)`),i.formatDurationSec=r.duration===0?null:Math.trunc(r.duration*r.timestampScale*1e3/1e6)/1e6,i.audioTrackCount=r.tracks.filter(e=>e.type===2).length,r.attachedImages&&a.push(`${r.attachedImages} attached image(s) ignored: ffprobe lists them as attached_pic video streams`);let o=r.tracks.filter(e=>e.type===1);if(!o.length)return a.push(`no video track`),i;i.primaryTrackId=o[0].number,i.videoTracks=o.map(e=>In(r,e,t));let s=t.matroskaMode,c=null;if(s!==`header`&&(c=await Yn(n,r),c===null&&a.push(`no Cluster found: nothing to scan`)),c===null)return o.forEach((e,t)=>Rn(r,e,i.videoTracks[t])),i;let l=r.segmentEnd-c,u=o[0],d=r.tagDurations.get(u.uid)??Ln(r),f=d>0&&u.defaultDuration>0?d*1e9/u.defaultDuration:0,p=await Vn(n,o,c,l),m=Wn(l,Hn(l,p,f),t),h=u.defaultDuration?null:await Kn();if(s===`auto`){let e=typeof h==`object`&&h&&!h.setupUnsupported(r)?Un(l,p,t):0;s=m.ms<=t.exactBudgetMs+e?`exact`:`probe`;let n=e?` plus the ${e.toFixed(0)} ms that probe mode reads for the ffprobe estimate`:``;s===`probe`&&a.push(`exact block scan skipped: predicted ${m.ms.toFixed(0)} ms exceeds the ${t.exactBudgetMs} ms budget${n}`)}let g=i.videoTracks[0],_=e=>{typeof e!=`string`&&(g.avgFpsFfprobe=e.avg,g.rFpsFfprobe=e.r),g.warnings[g.warnings.indexOf(jn)]=typeof e==`string`?`${An}not reproduced (${e})`:`${An}estimated like ffprobe from ${e.packets} video packets`};if(s===`exact`){n.window=m.window;let s=Ht(r,n.size,o,t.maxExpandedSamples);m.window<t.readAhead.matroskaScan&&(s.switchReads=e.reads+2*m.reads+16,s.largeWindow=t.readAhead.matroskaScan);let l=typeof h==`object`&&h?h.attachEstimate(n,r,Gn,s):h;await Jn(n,s,c,t),l!==null&&_(typeof l==`function`?await qn(n,l):l),i.scan=`exact`,a.push(...s.warnings),s.truncated&&a.push(`truncated file: the last Cluster or block ends beyond EOF`),s.missingClusterTs&&a.push(`${s.missingClusterTs} block(s) in Clusters without a Timestamp`),zn(r,s.maxAnyTicks,a);for(let[e,t]of o.entries()){let n=i.videoTracks[e];n.rateProfile=await de(er(n,s.tracks.get(t.number)))}return i}if(h!==null){let e=Ht(r,n.size,[]),t=typeof h==`string`?h:h.attachEstimate(n,r,Gn,e,!0);_(typeof t==`string`?t:await qn(n,()=>rn(n,e,c).then(t)))}return n.window=m.window===4096?Q:t.readAhead.head,await $n(n,r,o,i.videoTracks,c,t,a),i.scan=`probe`,i}let nr=new Set([`ftyp`,`moov`,`mdat`,`free`,`skip`,`wide`,`pnot`,`uuid`,`moof`,`styp`,`sidx`]),rr=[26,69,223,163],ir=[{bytes:[137,80,78,71,13,10,26,10],offset:0,label:`PNG image`},{bytes:[255,216,255],offset:0,label:`JPEG image`},{bytes:[71,73,70,56],offset:0,label:`GIF image`},{bytes:[82,73,70,70],offset:0,label:`RIFF file (AVI/WAV/WebP)`},{bytes:[79,103,103,83],offset:0,label:`Ogg file`},{bytes:[70,76,86,1],offset:0,label:`FLV file`},{bytes:[0,0,1,186],offset:0,label:`MPEG program stream`},{bytes:[37,80,68,70],offset:0,label:`PDF document`},{bytes:[80,75,3,4],offset:0,label:`ZIP archive`},{bytes:[73,68,51],offset:0,label:`MP3 file`}];function ar(e,t,n){if(e.length<n+t.length)return!1;for(let r=0;r<t.length;r++)if(e[n+r]!==t[r])return!1;return!0}function or(e){for(let t=4;t<8;t++){let n=e[t];if(n<32||n>126)return!1}return!0}function sr(e){let t=Math.min(e.length,512);if(t===0)return!1;for(let n=0;n<t;n++){let t=e[n];if(t!==9&&t!==10&&t!==13&&(t<32||t===127))return!1}return!0}function cr(e){for(let t of ir)if(ar(e,t.bytes,t.offset))return t.label;return e.length>=188&&e[0]===71&&e[188]===71?`MPEG transport stream`:sr(e)?`text file`:`no known signature`}function lr(e){if(e.length===0)return{kind:`unknown`,reason:`empty file`};if(ar(e,rr,0))return{kind:`matroska`,reason:`EBML header 1A45DFA3`};if(e.length>=8&&or(e)){let t=String.fromCharCode(e[4],e[5],e[6],e[7]);if(nr.has(t)){let n=e[0]*16777216+e[1]*65536+e[2]*256+e[3];if(n===0)return{kind:`isobmff`,reason:`top-level '${t}' box running to end of file`};if(n>=8)return{kind:`isobmff`,reason:`top-level '${t}' box`};if(n===1){if(e.length<16)return{kind:`unknown`,reason:`'${t}' box with a truncated 64-bit size`};let n=0;for(let t=8;t<16;t++)n=n*256+e[t];if(n>=16)return{kind:`isobmff`,reason:`top-level '${t}' box with 64-bit size`}}return{kind:`unknown`,reason:`'${t}' box with invalid size ${n}`}}}return e.length<8?{kind:`unknown`,reason:`too small (${e.length} bytes)`}:{kind:`unknown`,reason:cr(e)}}async function ur(e){let{kind:t}=lr(new Uint8Array(await e.slice(0,Math.min(1024,e.size)).arrayBuffer()));return t===`unknown`?null:t}c();function dr(e,t){let{perReadMs:n,bytesPerMs:r}=t.costModel,i=t.readAhead.head;return e<Math.max(i,Math.min(i+n*r,1048576))?e:i}function fr(e){return e?.name===`AbortError`}function pr(e){return e instanceof Error?e.message||e.name:String(e)}async function mr(e,t,n,r){let a=performance.now(),o=i(n);ft(o.signal);let s={name:t,size:e.size,...b(`unknown`),errorCode:null,layout:null,io:{reads:0,bytesRead:0,ms:0},engine:`own`},c=null,l=0,u=!1;try{if(c=new pt(e,{headWindow:o.readAhead.head,signal:o.signal}),c.size===0)throw Y(`empty-file`,`not a recognised container: empty file`);let t=lr(await c.bytes(0,Math.min(1024,c.size),dr(c.size,o)));if(t.kind===`unknown`)throw Y(`unrecognised`,`not a recognised container: ${t.reason}`);s.container=t.kind===`isobmff`?`mp4`:`matroska`;let n=performance.now();u=!0;let i=await r(t.kind);u=!1,l=performance.now()-n,Object.assign(s,await i(c,o))}catch(e){if(o.signal?.aborted||fr(e))throw e;s.error=pr(e),s.errorCode=mt(e,u?`load-failed`:`internal`)}return c&&(s.io.reads=c.reads,s.io.bytesRead=c.bytesFetched),s.io.ms=performance.now()-a-l,s}let $=(e,t)=>Object.assign(Error(e),{code:t}),hr=e=>e===`isobmff`||e===`matroska`;function gr(e){let t=self,n=new Map,r=new Map,i=e=>t.postMessage({v:1,...e}),a=t=>{let r=n.get(t);if(!r){let i=Object.hasOwn(e,t)?e[t]:void 0;if(!i)return Promise.reject($(`unknown engine ${t}`,`unknown-engine`));r=(typeof i==`function`?Promise.all([i(),Promise.resolve().then(()=>(ke(),A))]).then(([e])=>e):Promise.resolve(i)).catch(e=>{throw n.delete(t),e}),n.set(t,r)}return r},o=(e,t,n=!1,r=!1)=>{let a=t?.code,o=a===`unknown-engine`||a===`protocol`;i({type:`error`,id:e,message:pr(t),aborted:n||fr(t),...o?{code:a}:r&&{reason:`load`}})},s=async e=>{let t=new AbortController;r.set(e.id,t);let n=0,s=!0;try{if(!(e.file instanceof Blob))throw $(`malformed analyze request`,`protocol`);let r=await a(e.engine);if(s=!1,r.containers!==`any`){let t=await ur(e.file);if(!t||!r.containers.includes(t))return i({type:`skipped`,id:e.id,reason:`unsupported-container`,family:t})}let o=await r.run(e.file,e.name,{...e.options,signal:t.signal,onProgress:t=>{let r=performance.now();r-n<50||(n=r,i({type:`progress`,id:e.id,progress:t}))}});i({type:`result`,id:e.id,result:o})}catch(n){o(e.id,n,t.signal.aborted,s)}finally{r.delete(e.id)}},c=async e=>{try{if(![e.engines,e.containers].every(Array.isArray)||!e.containers.every(hr))throw $(`malformed warm request`,`protocol`);await Promise.all(e.engines.map(async t=>(await a(t)).warm?.(e.containers))),i({type:`warmed`,id:e.id})}catch(t){o(e.id,t,!1,!0)}};t.onmessage=({data:e})=>{if(e?.v!==1)return o(e?.id??0,$(`unsupported protocol version ${e?.v}`,`protocol`));if(e.type===`cancel`)r.get(e.id)?.abort();else if(e.type===`analyze`)s(e);else if(e.type===`warm`)c(e);else{let t=e;o(t.id,$(`unknown request type ${t.type}`,`protocol`))}}}let _r={isobmff:`ISO BMFF`,matroska:`Matroska`},vr=(e,t)=>`the own ${_r[e]} worker does not read ${_r[t]}`;function yr(e,t){return{containers:`any`,run:(n,r,i)=>mr(n,r,i,n=>{if(n!==e)throw Y(`unsupported-container`,vr(e,n));return t})}}gr({own:yr(`matroska`,tr)})})();