-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathicecast-metadata-player-1.12.3.min.js
380 lines (376 loc) · 227 KB
/
icecast-metadata-player-1.12.3.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
/*! For license information please see icecast-metadata-player-1.12.3.min.js.LICENSE.txt */
/*!
* Copyright 2021-2022 Ethan Halsall
* https://github.com/eshaz/icecast-metadata-js
*
* This file is part of icecast-metadata-player.
*
* icecast-metadata-player free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* icecast-metadata-player distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>
*/
var IcecastMetadataPlayer;(()=>{var t={785:t=>{t.exports={encode:t=>{const e=[];for(const s of t){let t=(s+42)%256;0===t||10===t||13===t||61===t?e.push("="+String.fromCharCode((t+64)%256)):e.push(String.fromCharCode(t))}return e.join("")},dynamicEncode:(t,e='"')=>{let s,i=1/0,n=0;'"'===e&&(s=t=>0===t||8===t||9===t||10===t||11===t||12===t||13===t||34===t||92===t||61===t),"'"===e&&(s=t=>0===t||8===t||9===t||10===t||11===t||12===t||13===t||39===t||92===t||61===t),"`"===e&&(s=(t,e)=>61===t||13===t||96===t||36===t&&123===e);for(let e=0;e<256;e++){let r=0;for(let i=0;i<t.length;i++){s((t[i]+e)%256|0,(t[i+1]+e)%256|0)&&r++,r++}r<i&&(i=r,n=e)}const r=["dynEncode","00",n.toString(16).padStart(2,"0")];for(let e=0;e<t.length;e++){const i=(t[e]+n)%256;s(i,(t[e+1]+n)%256)?r.push("=",String.fromCharCode((i+64)%256)):r.push(String.fromCharCode(i))}return r.join("")},decode:t=>{const e=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach(((t,s)=>e.set(t,s)));const s=new Uint8Array(t.length);let i,n=!1,r=0,h=42,a=0;if(t.length>13&&"dynEncode"===t.substring(0,9)){0===parseInt(t.substring(9,11),16)&&(h=parseInt(t.substring(11,13),16),a=13)}const o=256-h;for(let c=a;c<t.length;c++)if(i=t.charCodeAt(c),61!==i||n){if(i>255){const t=e.get(i);t&&(i=t+127)}n&&(n=!1,i-=64),s[r++]=i<h&&i>0?i+o:i-h}else n=!0;return s.subarray(0,r)},stringify:t=>t.replace(/[\\]/g,"\\\\").replace(/[`]/g,"\\`").replace(/\${/g,"\\${")}},763:t=>{t.exports=Worker}},e={};function s(i){var n=e[i];if(void 0!==n)return n.exports;var r=e[i]={exports:{}};return t[i](r,r.exports,s),r.exports}s.d=(t,e)=>{for(var i in e)s.o(e,i)&&!s.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var i={};(()=>{"use strict";s.d(i,{default:()=>ci});const t=()=>{},e=new WeakMap,n={LOADING:"loading",PLAYING:"playing",STOPPING:"stopping",STOPPED:"stopped",RETRYING:"retrying",SWITCHING:"switching"},r={BUFFER:"buffer",PLAY:"play",PLAY_READY:"playready",LOAD:"load",STREAM_START:"streamstart",STREAM:"stream",STREAM_END:"streamend",METADATA:"metadata",METADATA_ENQUEUE:"metadataenqueue",CODEC_UPDATE:"codecupdate",STOP:"stop",RETRY:"retry",RETRY_TIMEOUT:"retrytimeout",SWITCH:"switch",WARN:"warn",ERROR:"error"},h=Symbol(),a=Symbol(),o=Symbol(),c=Symbol(),d=Symbol(),u=Symbol(),l=Symbol(),y=Symbol(),m=Symbol(),f=Symbol(),M=Symbol(),p=Symbol(),w=Symbol(),U=Symbol(),g=Symbol(),b=Symbol(),O=Symbol(),A=Symbol(),S=Symbol(),V=Symbol(),q=Symbol(),E=Symbol("synced"),x=Symbol("syncing"),T=Symbol("pcm_synced"),P=Symbol("not_synced"),v=t=>{const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));return t.reduce(((t,s)=>(e.set(s,t),t+s.length)),0),e};class ${constructor(){this.t=[]}hasEventListener(t,e){return this.t.some((s=>s.type===t&&s.listener===e))}addEventListener(t,e,s={}){return this.hasEventListener(t,e)||this.t.push({type:t,listener:e,options:s}),this}removeEventListener(t,e){const s=this.t.findIndex((s=>s.type===t&&s.listener===e));return s>=0&&this.t.splice(s,1),this}removeEventListeners(){return this.t=[],this}dispatchEvent(t){return this.t.filter((e=>e.type===t.type)).forEach((e=>{const{type:s,listener:i,options:{once:n}}=e;i.call(this,t),!0===n&&this.removeEventListener(s,i)})),this}}class F{constructor(){this.u=0,this.M=0,this.p=0,this.U=0,this.O=0,this.A=0,this.S=0}get stats(){return{totalBytesRead:this.u,streamBytesRead:this.M,metadataLengthBytesRead:this.p,metadataBytesRead:this.U,currentBytesRemaining:this.O,currentStreamBytesRemaining:this.A,currentMetadataBytesRemaining:this.S}}set currentStreamBytesRemaining(t){this.A+=t}set currentMetadataBytesRemaining(t){this.S=t}addBytes(t){this.u+=t,this.O-=t}addStreamBytes(t){this.M+=t,this.A-=t}addMetadataLengthBytes(t){this.p+=t}addMetadataBytes(t){this.U+=t,this.S-=t}addCurrentBytesRemaining(t){this.O+=t}}const N=()=>{};class C{constructor(t){this.V=0,this.q=0,this.T=new Uint8Array(0),this.P=[],this.v=0,this.$=new F,this.F=t.onStream||N,this.N=t.onMetadata||N,this.C=t.onMetadataFailed||N,this.I=t.onError||N,this._=t.enableLogging||!1,this.L=Promise.resolve(),this.D=Promise.resolve(),this.R=this.B(),this.R.next()}*B(){for(this.V=1/0;;)this.K(yield*this.X()),yield*this.W()}static Z(...t){const e=t.reduce(((t,e)=>t+e.length),0);return this.H(t,e)}static H(t,e){const s=new Uint8Array(e);return t.reduce(((t,e)=>(s.set(e,t),t+e.length)),0),s}*iterator(t){for(let e=this.R.next(t);e.value;e=this.R.next())yield e.value}readAll(t){for(let e=this.R.next(t);e.value;e=this.R.next());}async*asyncIterator(t){for(let e=this.R.next(t);e.value;e=this.R.next())await this.L,await this.D,yield e.value}async asyncReadAll(t){for(let e=this.R.next(t);e.value;e=this.R.next())await this.L,await this.D}Y(...t){this._&&console.warn("icecast-metadata-js",t.reduce(((t,e)=>t+"\n "+e),"")),this.I(...t)}K(t){this.P.push(t),this.v+=t.length}*W(){if(this.P.length){const t=C.H(this.P,this.v);this.P=[],this.v=0,this.$.addStreamBytes(t.length);const e={stream:t,stats:this.$.stats};this.L=this.F(e),yield e}}*G(t){yield*this.W();const e={metadata:t,stats:this.$.stats};this.D=this.N(e),yield e}*X(t=0){for(this.q===this.T.length&&(this.T=yield*this.J(),this.q=0);this.T.length-this.q<t;)this.T=C.Z(this.T,yield*this.J());const e=this.T.subarray(this.q,(t||this.V)+this.q);return this.$.addBytes(e.length),this.V=e.length<this.V?this.V-e.length:0,this.q+=e.length,e}*J(){let t;yield*this.W();do{t=yield}while(!t||0===t.length);return this.$.addCurrentBytesRemaining(t.length),t}}class I extends C{constructor({icyMetaInt:t,icyDetectionTimeout:e=2e3,icyCharacterEncoding:s="utf-8",...i}){super(i),this.tt=new globalThis.TextDecoder(s),this.et=t,this.st=e,this.R=this.it(),this.R.next()}*it(){if(yield*this.nt())for(;;)this.V=this.et,yield*this.rt(),yield*this.ht(),this.V&&(yield*this.ot());this.V=1/0,yield*this.rt()}static parseIcyMetadata(t){const e=/(?<key>[^\0]+?)='(?<val>[^\0]*?)(;$|';|'$|$)/,s={};for(const i of t.match(new RegExp(e,"g"))||[]){const t=i.match(e);t&&(s[t.groups.key]=t.groups.val)}return s}get icyMetaInt(){return this.et}*nt(){if(this.et>0)return!0;if(!this.st)return!1;this.Y("Passed in Icy-MetaInt is invalid. Attempting to detect ICY Metadata.","See https://github.com/eshaz/icecast-metadata-js for information on how to properly request ICY Metadata.");const t=[null,83,116,114,101,97,109,84,105,116,108,101,61],e=Date.now();let s=0;for(;e+this.st>Date.now();){this.T=C.Z(this.T,yield*this.J());t:for(;s<this.T.length-t.length;){for(let e=1;e<t.length;e++)if(this.T[e+s]!==t[e]){s++;continue t}return this.Y(`Found ICY Metadata! Setting Icy-MetaInt to ${s}.`),this.et=s,!0}}return this.Y("ICY Metadata not detected, but continuing anyway. Audio errors will occur if there is ICY metadata.",`Searched ${this.T.length} bytes for ${(Date.now()-e)/1e3} seconds.`,"Try increasing the `icyDetectionTimeout` value if ICY metadata is present in the stream."),this.C("icy"),!1}*rt(){for(this.$.currentStreamBytesRemaining=this.V;this.V;)this.K(yield*super.X())}*ht(){this.V=1;do{this.V=16*(yield*this.X())[0]}while(1===this.V);this.$.addMetadataLengthBytes(1)}*ot(){this.$.currentMetadataBytesRemaining=this.V;const t=yield*this.X(this.V);this.$.addMetadataBytes(t.length),yield*this.G(I.parseIcyMetadata(this.tt.decode(t)))}}class _ extends C{constructor(t){super(t),this.tt=new globalThis.TextDecoder("utf-8"),this.R=this.ct(),this.R.next(),this.dt=!1}*ct(){if(yield*this.ut()){const t=yield*this.lt();if(t)for(;yield*this.ut();)this.dt||(yield*this.ot(t)),yield*this.rt()}this.V=1/0,yield*this.rt()}yt(t,e=0){return new DataView(Uint8Array.from([...t.subarray(e,e+4)]).buffer).getUint32(0,!0)}ft(t,e){return String.fromCharCode(...e).match(t)}*ut(){let t=[];for(;t.length<=65307;){const e=yield*super.X(6);if(79===e[0]&&103===e[1]&&103===e[2]&&83===e[3]&&!(248&e[5])){this.dt=1&e[5],this.q-=6,this.V+=6,this.$.u-=6,this.$.O+=6;break}t.push(e[0]),this.q-=4,this.$.u-=4,this.$.O+=4}if(t.length&&this.K(Uint8Array.from(t)),t.length>65307)return this.Y("This stream is not an OGG stream. No OGG metadata will be returned.","See https://github.com/eshaz/icecast-metadata-js for information on OGG metadata."),this.C("ogg"),!1;const e=yield*this.X(27),s=yield*this.X(e[26]);return this.V=s.reduce(((t,e)=>t+e),0),!0}*lt(){const t=yield*this.X(8);return yield*this.rt(),this.ft(/\x7fFLAC/,t.subarray(0,5))?{regex:/^[\x84|\x04]/,length:4}:this.ft(/OpusHead/,t.subarray(0,8))?{regex:/OpusTags/,length:8}:this.ft(/\x01vorbis/,t.subarray(0,7))?{regex:/\x03vorbis/,length:7}:void 0}*ot({regex:t,length:e}){this.ft(t,yield*this.X(e))&&(yield*this.G(yield*this.Mt()))}*rt(){for(;this.V;)yield*this.X()}*X(t){const e=yield*super.X(t);return this.K(e),e}*J(){const t=yield*super.J();return this.$.currentStreamBytesRemaining=t.length,t}*Mt(){const t=this.yt(yield*this.X(4));this.$.addMetadataBytes(4);const e=this.tt.decode(yield*this.X(t));this.$.addMetadataBytes(t);const s=this.yt(yield*this.X(4));this.$.addMetadataBytes(4);const i=[];for(let t=0;t<s;t++){const t=yield*this.X(4);this.$.addMetadataBytes(4),i.push(yield*this.X(this.yt(t))),this.$.addMetadataBytes(i[i.length-1].length)}return this.$.currentMetadataBytesRemaining=0,i.reduce(((t,e)=>{const s=e.indexOf(61),i=String.fromCharCode(...e.subarray(0,s)).toUpperCase(),n=this.tt.decode(e.subarray(s+1));return t[i]=t[i]?`${t[i]}; ${n}`:n,t}),{VENDOR_STRING:e})}}class L{constructor(t){const{onStream:e,...s}=t;this.wt=new _(t),this.Ut=new I(s)}get icyMetaInt(){return this.Ut.icyMetaInt}*iterator(t){for(const e of this.Ut.iterator(t))e.stream?yield*this.wt.iterator(e.stream):yield e}readAll(t){for(const e of this.Ut.iterator(t))e.stream&&this.wt.readAll(e.stream)}async*asyncIterator(t){for await(const e of this.Ut.asyncIterator(t))if(e.stream)for await(const t of this.wt.asyncIterator(e.stream))yield t;else yield e}async asyncReadAll(t){for await(const e of this.Ut.iterator(t))e.stream&&await this.wt.asyncReadAll(e.stream)}}class z{constructor({metadataTypes:t=["icy"],...e}={}){const s=t.includes("icy"),i=t.includes("ogg");this.gt=s&&i?new L(e):i?new _(e):s?new I(e):new C(e)}static parseIcyMetadata(t){return I.parseIcyMetadata(t)}get icyMetaInt(){return this.gt.icyMetaInt}*iterator(t){yield*this.gt.iterator(t)}readAll(t){this.gt.readAll(t)}async*asyncIterator(t){return yield*this.gt.asyncIterator(t)}async asyncReadAll(t){return this.gt.asyncReadAll(t)}}const D=()=>{};class R{constructor(t,{onStream:e=D,...s}){let i;this.bt=new ReadableStream({async start(n){i=new z({icyMetaInt:parseInt(t.headers.get("Icy-MetaInt")),...s,onStream:async t=>(n.enqueue(t.stream),e(t))});for await(const e of R.asyncIterator(t.body))await i.asyncReadAll(e);n.close()}}),this.Ot=i}get icyMetaInt(){return this.Ot.icyMetaInt}get readableStream(){return this.bt}async startReading(){try{for await(const t of R.asyncIterator(this.bt));}catch(t){if("AbortError"!==t.name)throw t}}static asyncIterator(t){const e=t.getReader();return{[Symbol.asyncIterator]:()=>({next:()=>e.read()})}}}const B=()=>{};class K{constructor({icyBr:t,onMetadataUpdate:e=B,onMetadataEnqueue:s=B,paused:i=!1}){this.At=t,this.St=e,this.Vt=s,this.qt=i,this.Et=i,this.xt=!0,this.Tt=[],this.Pt=[]}get metadataQueue(){return this.Pt.map((({vt:t,...e})=>e))}addMetadata({metadata:t,stats:e},s,i=0){const n={metadata:t,timestampOffset:s,timestamp:i+=e?this.getTimeByBytes(e.currentStreamPosition):0};this.Et?this.Tt.push(n):this.$t(n)}getTimeByBytes(t){return this.At?t/(125*this.At):0}startQueue(t){this.Et&&(this.Tt.forEach((e=>{void 0!==t&&(e.timestamp=t),(void 0===t||e.timestampOffset>=e.timestamp)&&this.$t(e)})),this.Tt=[],this.Et=!1)}purgeMetadataQueue(){this.Pt.forEach((t=>clearTimeout(t.vt))),this.Pt=[],this.Tt=[],this.Et=this.qt,this.xt=!0}$t(t){this.Pt.push(t),this.Vt(t.metadata,t.timestampOffset,t.timestamp),this.xt?(this.Ft(),this.xt=!1):t.vt=setTimeout((()=>{this.Ft()}),1e3*(t.timestampOffset-t.timestamp))}Ft(){if(this.Pt.length){const{metadata:t,timestampOffset:e,timestamp:s}=this.Pt.shift();this.St(t,e,s)}}}const Q=(t,e,s)=>{for(let i=0;i<t.length;i++){let n=e(i);for(let t=8;t>0;t--)n=s(n);t[i]=n}return t},k=Q(new Uint8Array(256),(t=>t),(t=>128&t?7^t<<1:t<<1)),X=[Q(new Uint16Array(256),(t=>t<<8),(t=>t<<1^(32768&t?32773:0)))],j=[Q(new Uint32Array(256),(t=>t),(t=>t>>>1^3988292384*(1&t)))];for(let t=0;t<15;t++){X.push(new Uint16Array(256)),j.push(new Uint32Array(256));for(let e=0;e<=255;e++)X[t+1][e]=X[0][X[t][e]>>>8]^X[t][e]<<8,j[t+1][e]=j[t][e]>>>8^j[0][255&j[t][e]]}const W=t=>{const e=t.length,s=e-16;let i=0,n=0;for(;n<=s;)i=j[15][255&(t[n++]^i)]^j[14][255&(t[n++]^i>>>8)]^j[13][255&(t[n++]^i>>>16)]^j[12][t[n++]^i>>>24]^j[11][t[n++]]^j[10][t[n++]]^j[9][t[n++]]^j[8][t[n++]]^j[7][t[n++]]^j[6][t[n++]]^j[5][t[n++]]^j[4][t[n++]]^j[3][t[n++]]^j[2][t[n++]]^j[1][t[n++]]^j[0][t[n++]];for(;n!==e;)i=j[0][255&(i^t[n++])]^i>>>8;return-1^i},Z=(...t)=>{const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));return t.reduce(((t,s)=>(e.set(s,t),t+s.length)),0),e},H=t=>String.fromCharCode(...t),Y=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],G=t=>Y[15&t]<<4|Y[t>>4];class J{constructor(t){this.Nt=t,this.Ct=8*t.length}set position(t){this.Ct=t}get position(){return this.Ct}read(t){const e=Math.floor(this.Ct/8),s=this.Ct%8;this.Ct-=t;return(G(this.Nt[e-1])<<8)+G(this.Nt[e])>>7-s&255}}class tt{constructor(t){this.It=t,this.reset()}enable(){this._t=!0}reset(){this.Lt=new Map,this.zt=new WeakMap,this.Dt=!1,this.Rt=null,this._t=!1}checkCodecUpdate(t,e){if(this.It){this.Rt!==t&&(this.Rt=t,this.Dt=!0);const s=this.zt.get(this.Lt.get(this.Bt));this.Dt&&s&&this.It({bitrate:t,...s},e),this.Dt=!1}}updateCurrentHeader(t){this.It&&t!==this.Bt&&(this.Dt=!0,this.Bt=t)}getHeader(t){const e=this.Lt.get(t);return e&&this.updateCurrentHeader(t),e}setHeader(t,e,s){this._t&&(this.updateCurrentHeader(t),this.Lt.set(t,e),this.zt.set(e,s))}}const et=new WeakMap,st=new WeakMap;class it{constructor(t,e){this.Kt=t,this.Lt=e}*syncFrame(){let t;for(;;){if(t=yield*this.Frame.getFrame(this.Kt,this.Lt,0),t)return t;this.Kt.incrementRawData(1)}}*fixedLengthFrameSync(t){let e=yield*this.syncFrame();const s=st.get(e).length;if(t||this.Kt.Qt||(yield*this.Header.getHeader(this.Kt,this.Lt,s)))return this.Lt.enable(),this.Kt.incrementRawData(s),this.Kt.mapFrameStats(e),e;this.Kt.logWarning(`Missing frame frame at ${s} bytes from current position.`,"Dropping current frame and trying again."),this.Lt.reset(),this.Kt.incrementRawData(1)}}class nt{constructor(t,e){st.set(this,{header:t}),this.data=e}}class rt extends nt{static*getFrame(t,e,s,i,n){const r=yield*t.getHeader(s,i,n);if(r){const t=et.get(r).frameLength,i=et.get(r).samples;return new e(r,(yield*s.readRawData(t,n)).subarray(0,t),i)}return null}constructor(t,e,s){super(t,e),this.header=t,this.samples=s,this.duration=s/t.sampleRate*1e3,this.frameNumber=null,this.totalBytesOut=null,this.totalSamples=null,this.totalDuration=null,st.get(this).length=e.length}}const ht="reserved",at="bad",ot="free",ct="none",dt="16bit CRC",ut="left",lt="center",yt="right",mt=["","front ","side ","rear "].map((t=>[[ut,yt],[ut,yt,lt],[ut,lt,yt],[lt,ut,yt],[lt]].flatMap((e=>e.map((e=>t+e)).join(", "))))),ft="LFE",Mt="monophonic (mono)",pt="stereo",wt=[Mt,pt,"linear surround","quadraphonic","5.0 surround","5.1 surround","6.1 surround","7.1 surround"],Ut=(t,...e)=>`${wt[t-1]} (${e.join(", ")})`,gt=[Mt,Ut(2,mt[0][0]),Ut(3,mt[0][2]),Ut(4,mt[1][0],mt[3][0]),Ut(5,mt[1][2],mt[3][0]),Ut(6,mt[1][2],mt[3][0],ft),Ut(7,mt[1][2],mt[2][0],mt[3][4],ft),Ut(8,mt[1][2],mt[2][0],mt[3][0],ft)],bt=48e3,Ot=44100,At=32e3,St=24e3,Vt=22050,qt=16e3,Et=8e3;class xt{static*getID3v2Header(t,e,s){const i={headerLength:10};let n=yield*t.readRawData(3,s);return 73!==n[0]||68!==n[1]||51!==n[2]?null:(n=yield*t.readRawData(i.headerLength,s),i.version=`id3v2.${n[3]}.${n[4]}`,15&n[5]?null:(i.unsynchronizationFlag=Boolean(128&n[5]),i.extendedHeaderFlag=Boolean(64&n[5]),i.experimentalFlag=Boolean(32&n[5]),i.footerPresent=Boolean(16&n[5]),128&n[6]||128&n[7]||128&n[8]||128&n[9]?null:(i.dataLength=n[6]<<21|n[7]<<14|n[8]<<7|n[9],i.length=i.headerLength+i.dataLength,new xt(i))))}constructor(t){this.version=t.version,this.unsynchronizationFlag=t.unsynchronizationFlag,this.extendedHeaderFlag=t.extendedHeaderFlag,this.experimentalFlag=t.experimentalFlag,this.footerPresent=t.footerPresent,this.length=t.length}}class Tt{constructor(t){et.set(this,t),this.bitDepth=t.bitDepth,this.bitrate=null,this.channels=t.channels,this.channelMode=t.channelMode,this.sampleRate=t.sampleRate}}const Pt={0:[ot,ot,ot,ot,ot],16:[32,32,32,32,8],240:[at,at,at,at,at]},vt=(t,e,s)=>8*((t+s)%e+e)*(1<<(t+s)/e)-8*e*(e/8|0);for(let t=2;t<15;t++)Pt[t<<4]=[32*t,vt(t,4,0),vt(t,4,-1),vt(t,8,4),vt(t,8,0)];const $t="bands ",Ft=" to 31",Nt={0:$t+4+Ft,16:$t+8+Ft,32:$t+12+Ft,48:$t+16+Ft},Ct="Intensity stereo ",It=", MS stereo ",_t="on",Lt="off",zt={0:{description:ht},2:{description:"Layer III",framePadding:1,modeExtensions:{0:Ct+Lt+It+Lt,16:Ct+_t+It+Lt,32:Ct+Lt+It+_t,48:Ct+_t+It+_t},v1:{bitrateIndex:2,samples:1152},v2:{bitrateIndex:4,samples:576}},4:{description:"Layer II",framePadding:1,modeExtensions:Nt,samples:1152,v1:{bitrateIndex:1},v2:{bitrateIndex:4}},6:{description:"Layer I",framePadding:4,modeExtensions:Nt,samples:384,v1:{bitrateIndex:0},v2:{bitrateIndex:3}}},Dt={0:{description:"MPEG Version 2.5 (later extension of MPEG 2)",layers:"v2",sampleRates:{0:11025,4:12e3,8:Et,12:ht}},8:{description:ht},16:{description:"MPEG Version 2 (ISO/IEC 13818-3)",layers:"v2",sampleRates:{0:Vt,4:St,8:qt,12:ht}},24:{description:"MPEG Version 1 (ISO/IEC 11172-3)",layers:"v1",sampleRates:{0:Ot,4:bt,8:At,12:ht}}},Rt={0:dt,1:ct},Bt={0:ct,1:"50/15 ms",2:ht,3:"CCIT J.17"},Kt={0:{channels:2,description:pt},64:{channels:2,description:"joint stereo"},128:{channels:2,description:"dual channel"},192:{channels:1,description:Mt}};class Qt extends Tt{static*getHeader(t,e,s){const i={},n=yield*xt.getID3v2Header(t,e,s);n&&(yield*t.readRawData(n.length,s),t.incrementRawData(n.length));const r=yield*t.readRawData(4,s),h=H(r.subarray(0,4)),a=e.getHeader(h);if(a)return new Qt(a);if(255!==r[0]||r[1]<224)return null;const o=Dt[24&r[1]];if(o.description===ht)return null;const c=6&r[1];if(zt[c].description===ht)return null;const d={...zt[c],...zt[c][o.layers]};if(i.mpegVersion=o.description,i.layer=d.description,i.samples=d.samples,i.protection=Rt[1&r[1]],i.length=4,i.bitrate=Pt[240&r[2]][d.bitrateIndex],i.bitrate===at)return null;if(i.sampleRate=o.sampleRates[12&r[2]],i.sampleRate===ht)return null;if(i.framePadding=2&r[2]&&d.framePadding,i.isPrivate=Boolean(1&r[2]),i.frameLength=Math.floor(125*i.bitrate*i.samples/i.sampleRate+i.framePadding),!i.frameLength)return null;const u=192&r[3];if(i.channelMode=Kt[u].description,i.channels=Kt[u].channels,i.modeExtension=d.modeExtensions[48&r[3]],i.isCopyrighted=Boolean(8&r[3]),i.isOriginal=Boolean(4&r[3]),i.emphasis=Bt[3&r[3]],i.emphasis===ht)return null;i.bitDepth=16;const{length:l,frameLength:y,samples:m,...f}=i;return e.setHeader(h,i,f),new Qt(i)}constructor(t){super(t),this.bitrate=t.bitrate,this.emphasis=t.emphasis,this.framePadding=t.framePadding,this.isCopyrighted=t.isCopyrighted,this.isOriginal=t.isOriginal,this.isPrivate=t.isPrivate,this.layer=t.layer,this.modeExtension=t.modeExtension,this.mpegVersion=t.mpegVersion,this.protection=t.protection}}class kt extends rt{static*getFrame(t,e,s){return yield*super.getFrame(Qt,kt,t,e,s)}constructor(t,e,s){super(t,e,s)}}class Xt extends it{constructor(t,e,s){super(t,e),this.Frame=kt,this.Header=Qt,s(this.codec)}get codec(){return"mpeg"}*parseFrame(){return yield*this.fixedLengthFrameSync()}}const jt={0:"MPEG-4",8:"MPEG-2"},Wt={0:"valid",2:at,4:at,6:at},Zt={0:dt,1:ct},Ht={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},Yt={0:96e3,4:88200,8:64e3,12:bt,16:Ot,20:At,24:St,28:Vt,32:qt,36:12e3,40:11025,44:Et,48:7350,52:ht,56:ht,60:"frequency is written explicitly"},Gt={0:{channels:0,description:"Defined in AOT Specific Config"},64:{channels:1,description:Mt},128:{channels:2,description:Ut(2,mt[0][0])},192:{channels:3,description:Ut(3,mt[1][3])},256:{channels:4,description:Ut(4,mt[1][3],mt[3][4])},320:{channels:5,description:Ut(5,mt[1][3],mt[3][0])},384:{channels:6,description:Ut(6,mt[1][3],mt[3][0],ft)},448:{channels:8,description:Ut(8,mt[1][3],mt[2][0],mt[3][0],ft)}};class Jt extends Tt{static*getHeader(t,e,s){const i={},n=yield*t.readRawData(7,s),r=H([n[0],n[1],n[2],252&n[3]|3&n[6]]),h=e.getHeader(r);if(h)Object.assign(i,h);else{if(255!==n[0]||n[1]<240)return null;if(i.mpegVersion=jt[8&n[1]],i.layer=Wt[6&n[1]],i.layer===at)return null;const t=1&n[1];i.protection=Zt[t],i.length=t?7:9,i.profileBits=192&n[2],i.sampleRateBits=60&n[2];const s=2&n[2];if(i.profile=Ht[i.profileBits],i.sampleRate=Yt[i.sampleRateBits],i.sampleRate===ht)return null;i.isPrivate=Boolean(s),i.channelModeBits=448&(n[2]<<8|n[3]),i.channelMode=Gt[i.channelModeBits].description,i.channels=Gt[i.channelModeBits].channels,i.isOriginal=Boolean(32&n[3]),i.isHome=Boolean(8&n[3]),i.copyrightId=Boolean(8&n[3]),i.copyrightIdStart=Boolean(4&n[3]),i.bitDepth=16,i.samples=1024,i.numberAACFrames=3&n[6];const{length:h,channelModeBits:a,profileBits:o,sampleRateBits:c,frameLength:d,samples:u,numberAACFrames:l,...y}=i;e.setHeader(r,i,y)}if(i.frameLength=8191&(n[3]<<11|n[4]<<3|n[5]>>5),!i.frameLength)return null;const a=2047&(n[5]<<6|n[6]>>2);return i.bufferFullness=2047===a?"VBR":a,new Jt(i)}constructor(t){super(t),this.copyrightId=t.copyrightId,this.copyrightIdStart=t.copyrightIdStart,this.bufferFullness=t.bufferFullness,this.isHome=t.isHome,this.isOriginal=t.isOriginal,this.isPrivate=t.isPrivate,this.layer=t.layer,this.length=t.length,this.mpegVersion=t.mpegVersion,this.numberAACFrames=t.numberAACFrames,this.profile=t.profile,this.protection=t.protection}get audioSpecificConfig(){const t=et.get(this),e=t.profileBits+64<<5|t.sampleRateBits<<5|t.channelModeBits>>3,s=new Uint8Array(2);return new DataView(s.buffer).setUint16(0,e,!1),s}}class te extends rt{static*getFrame(t,e,s){return yield*super.getFrame(Jt,te,t,e,s)}constructor(t,e,s){super(t,e,s)}}class ee extends it{constructor(t,e,s){super(t,e),this.Frame=te,this.Header=Jt,s(this.codec)}get codec(){return"aac"}*parseFrame(){return yield*this.fixedLengthFrameSync()}}class se extends rt{static getFrameFooterCrc16(t){return(t[t.length-2]<<8)+t[t.length-1]}static checkFrameFooterCrc16(t){return se.getFrameFooterCrc16(t)===(t=>{const e=t.length,s=e-16;let i=0,n=0;for(;n<=s;)i^=t[n++]<<8|t[n++],i=X[15][i>>8]^X[14][255&i]^X[13][t[n++]]^X[12][t[n++]]^X[11][t[n++]]^X[10][t[n++]]^X[9][t[n++]]^X[8][t[n++]]^X[7][t[n++]]^X[6][t[n++]]^X[5][t[n++]]^X[4][t[n++]]^X[3][t[n++]]^X[2][t[n++]]^X[1][t[n++]]^X[0][t[n++]];for(;n!==e;)i=(255&i)<<8^X[0][i>>8^t[n++]];return i})(t.subarray(0,-2))}constructor(t,e,s){e.streamInfo=s,e.crc16=se.getFrameFooterCrc16(t),super(e,t,et.get(e).samples)}}const ie="get from STREAMINFO metadata block",ne={0:"Fixed",1:"Variable"},re={0:ht,16:192};for(let t=2;t<16;t++)re[t<<4]=t<6?576*2**(t-2):2**t;const he={0:ie,1:88200,2:176400,3:192e3,4:Et,5:qt,6:Vt,7:St,8:At,9:Ot,10:bt,11:96e3,15:at},ae={0:{channels:1,description:Mt},16:{channels:2,description:Ut(2,mt[0][0])},32:{channels:3,description:Ut(3,mt[0][1])},48:{channels:4,description:Ut(4,mt[1][0],mt[3][0])},64:{channels:5,description:Ut(5,mt[1][1],mt[3][0])},80:{channels:6,description:Ut(6,mt[1][1],ft,mt[3][0])},96:{channels:7,description:Ut(7,mt[1][1],ft,mt[3][4],mt[2][0])},112:{channels:8,description:Ut(8,mt[1][1],ft,mt[3][0],mt[2][0])},128:{channels:2,description:"stereo (left, diff)"},144:{channels:2,description:"stereo (diff, right)"},160:{channels:2,description:"stereo (avg, diff)"},176:ht,192:ht,208:ht,224:ht,240:ht},oe={0:ie,2:8,4:12,6:ht,8:16,10:20,12:24,14:ht};class ce extends Tt{static decodeUTF8Int(t){if(t[0]>254)return null;if(t[0]<128)return{value:t[0],length:1};let e=1;for(let s=64;s&t[0];s>>=1)e++;let s=e-1,i=0,n=0;for(;s>0;n+=6,s--){if(128!=(192&t[s]))return null;i|=(63&t[s])<<n}return i|=(t[s]&127>>e)<<n,{value:i,length:e}}static getHeaderFromUint8Array(t,e){const s={readRawData:function*(){return t}};return ce.getHeader(s,e,0).next().value}static*getHeader(t,e,s){let i=yield*t.readRawData(6,s);if(255!==i[0]||248!==i[1]&&249!==i[1])return null;const n={},r=H(i.subarray(0,4)),h=e.getHeader(r);if(h)Object.assign(n,h);else{if(n.blockingStrategyBits=1&i[1],n.blockingStrategy=ne[n.blockingStrategyBits],n.blockSizeBits=240&i[2],n.sampleRateBits=15&i[2],n.blockSize=re[n.blockSizeBits],n.blockSize===ht)return null;if(n.sampleRate=he[n.sampleRateBits],n.sampleRate===at)return null;if(1&i[3])return null;const t=ae[240&i[3]];if(t===ht)return null;if(n.channels=t.channels,n.channelMode=t.description,n.bitDepth=oe[14&i[3]],n.bitDepth===ht)return null}n.length=5,i=yield*t.readRawData(n.length+8,s);const a=ce.decodeUTF8Int(i.subarray(4));if(!a)return null;if(n.blockingStrategyBits?n.sampleNumber=a.value:n.frameNumber=a.value,n.length+=a.length,96===n.blockSizeBits?(i.length<n.length&&(i=yield*t.readRawData(n.length,s)),n.blockSize=i[n.length-1]+1,n.length+=1):112===n.blockSizeBits&&(i.length<n.length&&(i=yield*t.readRawData(n.length,s)),n.blockSize=(i[n.length-1]<<8)+i[n.length]+1,n.length+=2),n.samples=n.blockSize,12===n.sampleRateBits?(i.length<n.length&&(i=yield*t.readRawData(n.length,s)),n.sampleRate=1e3*i[n.length-1],n.length+=1):13===n.sampleRateBits?(i.length<n.length&&(i=yield*t.readRawData(n.length,s)),n.sampleRate=(i[n.length-1]<<8)+i[n.length],n.length+=2):14===n.sampleRateBits&&(i.length<n.length&&(i=yield*t.readRawData(n.length,s)),n.sampleRate=10*((i[n.length-1]<<8)+i[n.length]),n.length+=2),i.length<n.length&&(i=yield*t.readRawData(n.length,s)),n.crc=i[n.length-1],n.crc!==(t=>{let e=0;const s=t.length;for(let i=0;i!==s;i++)e=k[e^t[i]];return e})(i.subarray(0,n.length-1)))return null;if(!h){const{blockingStrategyBits:t,frameNumber:s,sampleNumber:i,samples:h,sampleRateBits:a,blockSizeBits:o,crc:c,length:d,...u}=n;e.setHeader(r,n,u)}return new ce(n)}constructor(t){super(t),this.crc16=null,this.blockingStrategy=t.blockingStrategy,this.blockSize=t.blockSize,this.frameNumber=t.frameNumber,this.sampleNumber=t.sampleNumber,this.streamInfo=null}}class de extends it{constructor(t,e){super(t,e),this.Frame=se,this.Header=ce}get codec(){return"flac"}*kt(t){const e=yield*this.Kt.readRawData(2,0),s=e.length-2;for(;t<s;){if(255===e[t]){const s=e[t+1];if(248===s||249===s)break;255!==s&&t++}t++}return t}*parseFrame(){for(;;){const t=yield*ce.getHeader(this.Kt,this.Lt,0);if(t){let e=et.get(t).length+2;for(;e<=524288;){if(this.Kt.Qt||(yield*ce.getHeader(this.Kt,this.Lt,e))){let s=yield*this.Kt.readRawData(e);if(this.Kt.Qt||(s=s.subarray(0,e)),se.checkFrameFooterCrc16(s)){const i=new se(s,t);return this.Lt.enable(),this.Kt.incrementRawData(e),this.Kt.mapFrameStats(i),i}}e=yield*this.kt(e+1)}this.Kt.logWarning(`Unable to sync FLAC frame after searching ${e} bytes.`),this.Kt.incrementRawData(e)}else this.Kt.incrementRawData(yield*this.kt(1))}}parseOggPage(t){return 0===t.pageSequenceNumber?(this.Lt.enable(),this.Xt=t.data.subarray(13)):1===t.pageSequenceNumber||(t.codecFrames=st.get(t).segments.map((t=>{const e=ce.getHeaderFromUint8Array(t,this.Lt);if(e)return new se(t,e,this.Xt);this.Kt.logWarning("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")})).filter((t=>Boolean(t)))),t}}class ue{static*getHeader(t,e,s){const i={};let n=yield*t.readRawData(28,s);if(79!==n[0]||103!==n[1]||103!==n[2]||83!==n[3])return null;i.streamStructureVersion=n[4];if(248&n[5])return null;i.isLastPage=Boolean(4&n[5]),i.isFirstPage=Boolean(2&n[5]),i.isContinuedPacket=Boolean(1&n[5]);const r=new DataView(Uint8Array.from(n.subarray(0,28)).buffer);try{i.absoluteGranulePosition=r.getBigInt64(6,!0)}catch{}i.streamSerialNumber=r.getInt32(14,!0),i.pageSequenceNumber=r.getInt32(18,!0),i.pageChecksum=r.getInt32(22,!0);const h=n[26];i.length=h+27,n=yield*t.readRawData(i.length,s),i.frameLength=0,i.pageSegmentTable=[],i.pageSegmentBytes=Uint8Array.from(n.subarray(27,i.length));for(let t=0,e=0;t<h;t++){const s=i.pageSegmentBytes[t];i.frameLength+=s,e+=s,255===s&&t!==h-1||(i.pageSegmentTable.push(e),e=0)}return new ue(i)}constructor(t){et.set(this,t),this.absoluteGranulePosition=t.absoluteGranulePosition,this.isContinuedPacket=t.isContinuedPacket,this.isFirstPage=t.isFirstPage,this.isLastPage=t.isLastPage,this.pageSegmentTable=t.pageSegmentTable,this.pageSequenceNumber=t.pageSequenceNumber,this.pageChecksum=t.pageChecksum,this.streamSerialNumber=t.streamSerialNumber}}class le extends nt{static*getFrame(t,e,s){const i=yield*ue.getHeader(t,e,s);if(i){const e=et.get(i).frameLength,s=et.get(i).length,n=s+e,r=(yield*t.readRawData(n,0)).subarray(0,n),h=r.subarray(s,n);return new le(i,h,r)}return null}constructor(t,e,s){super(t,e),st.get(this).length=s.length,this.codecFrames=[],this.rawData=s,this.absoluteGranulePosition=t.absoluteGranulePosition,this.crc32=t.pageChecksum,this.duration=0,this.isContinuedPacket=t.isContinuedPacket,this.isFirstPage=t.isFirstPage,this.isLastPage=t.isLastPage,this.pageSequenceNumber=t.pageSequenceNumber,this.samples=0,this.streamSerialNumber=t.streamSerialNumber}}class ye extends rt{constructor(t,e){super(e,t,e.frameSize*e.frameCount/1e3*e.sampleRate)}}const me={0:gt.slice(0,2),1:gt},fe="SILK-only",Me="CELT-only",pe="Hybrid",we="narrowband",Ue="medium-band",ge="wideband",be="super-wideband",Oe="fullband",Ae={0:{mode:fe,bandwidth:we,frameSize:10},8:{mode:fe,bandwidth:we,frameSize:20},16:{mode:fe,bandwidth:we,frameSize:40},24:{mode:fe,bandwidth:we,frameSize:60},32:{mode:fe,bandwidth:Ue,frameSize:10},40:{mode:fe,bandwidth:Ue,frameSize:20},48:{mode:fe,bandwidth:Ue,frameSize:40},56:{mode:fe,bandwidth:Ue,frameSize:60},64:{mode:fe,bandwidth:ge,frameSize:10},72:{mode:fe,bandwidth:ge,frameSize:20},80:{mode:fe,bandwidth:ge,frameSize:40},88:{mode:fe,bandwidth:ge,frameSize:60},96:{mode:pe,bandwidth:be,frameSize:10},104:{mode:pe,bandwidth:be,frameSize:20},112:{mode:pe,bandwidth:Oe,frameSize:10},120:{mode:pe,bandwidth:Oe,frameSize:20},128:{mode:Me,bandwidth:we,frameSize:2.5},136:{mode:Me,bandwidth:we,frameSize:5},144:{mode:Me,bandwidth:we,frameSize:10},152:{mode:Me,bandwidth:we,frameSize:20},160:{mode:Me,bandwidth:ge,frameSize:2.5},168:{mode:Me,bandwidth:ge,frameSize:5},176:{mode:Me,bandwidth:ge,frameSize:10},184:{mode:Me,bandwidth:ge,frameSize:20},192:{mode:Me,bandwidth:be,frameSize:2.5},200:{mode:Me,bandwidth:be,frameSize:5},208:{mode:Me,bandwidth:be,frameSize:10},216:{mode:Me,bandwidth:be,frameSize:20},224:{mode:Me,bandwidth:Oe,frameSize:2.5},232:{mode:Me,bandwidth:Oe,frameSize:5},240:{mode:Me,bandwidth:Oe,frameSize:10},248:{mode:Me,bandwidth:Oe,frameSize:20}};class Se extends Tt{static getHeaderFromUint8Array(t,e,s){const i={};if(i.channels=t[9],i.channelMappingFamily=t[18],i.length=0!==i.channelMappingFamily?21+i.channels:19,t.length<i.length)throw new Error("Out of data while inside an Ogg Page");const n=3&e[0],r=3===n?2:1,h=H(t.subarray(0,i.length))+H(e.subarray(0,r)),a=s.getHeader(h);if(a)return new Se(a);if("OpusHead"!==h.substr(0,8))return null;if(1!==t[8])return null;i.data=Uint8Array.from(t.subarray(0,i.length));const o=new DataView(i.data.buffer);if(i.bitDepth=16,i.preSkip=o.getUint16(10,!0),i.inputSampleRate=o.getUint32(12,!0),i.sampleRate=bt,i.outputGain=o.getInt16(16,!0),i.channelMappingFamily in me&&(i.channelMode=me[i.channelMappingFamily][i.channels-1],!i.channelMode))return null;0!==i.channelMappingFamily&&(i.streamCount=t[19],i.coupledStreamCount=t[20],i.channelMappingTable=[...t.subarray(21,i.channels+21)]);const c=Ae[248&e[0]];switch(i.mode=c.mode,i.bandwidth=c.bandwidth,i.frameSize=c.frameSize,n){case 0:i.frameCount=1;break;case 1:case 2:i.frameCount=2;break;case 3:i.isVbr=Boolean(128&e[1]),i.hasOpusPadding=Boolean(64&e[1]),i.frameCount=63&e[1];break;default:return null}const{length:d,data:u,channelMappingFamily:l,...y}=i;return s.setHeader(h,i,y),new Se(i)}constructor(t){super(t),this.data=t.data,this.bandwidth=t.bandwidth,this.channelMappingFamily=t.channelMappingFamily,this.channelMappingTable=t.channelMappingTable,this.coupledStreamCount=t.coupledStreamCount,this.frameCount=t.frameCount,this.frameSize=t.frameSize,this.hasOpusPadding=t.hasOpusPadding,this.inputSampleRate=t.inputSampleRate,this.isVbr=t.isVbr,this.mode=t.mode,this.outputGain=t.outputGain,this.preSkip=t.preSkip,this.streamCount=t.streamCount}}class Ve extends it{constructor(t,e){super(t,e),this.Frame=ye,this.Header=Se,this.jt=null}get codec(){return"opus"}parseOggPage(t){return 0===t.pageSequenceNumber?(this.Lt.enable(),this.jt=t.data):1===t.pageSequenceNumber||(t.codecFrames=st.get(t).segments.map((t=>{const e=Se.getHeaderFromUint8Array(this.jt,t,this.Lt);if(e)return new ye(t,e);this.Kt.logError("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")}))),t}}class qe extends rt{constructor(t,e,s){super(e,t,s)}}const Ee={};for(let t=0;t<8;t++)Ee[t+6]=2**(6+t);class xe extends Tt{static getHeaderFromUint8Array(t,e){if(t.length<30)throw new Error("Out of data while inside an Ogg Page");const s=H(t.subarray(0,30)),i=e.getHeader(s);if(i)return new xe(i);const n={length:30};if("vorbis"!==s.substr(0,7))return null;n.data=Uint8Array.from(t.subarray(0,30));const r=new DataView(n.data.buffer);if(n.version=r.getUint32(7,!0),0!==n.version)return null;if(n.channels=t[11],n.channelMode=gt[n.channels-1]||"application defined",n.sampleRate=r.getUint32(12,!0),n.bitrateMaximum=r.getInt32(16,!0),n.bitrateNominal=r.getInt32(20,!0),n.bitrateMinimum=r.getInt32(24,!0),n.blocksize1=Ee[(240&t[28])>>4],n.blocksize0=Ee[15&t[28]],n.blocksize0>n.blocksize1)return null;if(1!==t[29])return null;n.bitDepth=32;{const{length:t,data:i,version:r,...h}=n;e.setHeader(s,n,h)}return new xe(n)}constructor(t){super(t),this.bitrateMaximum=t.bitrateMaximum,this.bitrateMinimum=t.bitrateMinimum,this.bitrateNominal=t.bitrateNominal,this.blocksize0=t.blocksize0,this.blocksize1=t.blocksize1,this.data=t.data,this.vorbisComments=null,this.vorbisSetup=null}}class Te extends it{constructor(t,e){super(t,e),this.Frame=qe,this.jt=null,this.Wt={count:0},this.Zt=0,this.Ht=0}get codec(){return"vorbis"}parseOggPage(t){const e=st.get(t).segments;return 0===t.pageSequenceNumber?(this.Lt.enable(),this.jt=t.data):1===t.pageSequenceNumber?e[1]&&(this.Yt=e[0],this.Gt=e[1],this.Wt=this.Jt(e[1])):t.codecFrames=e.map((t=>{const e=xe.getHeaderFromUint8Array(this.jt,this.Lt);if(e)return e.vorbisComments=this.Yt,e.vorbisSetup=this.Gt,new qe(t,e,this.te(t,e));this.Kt.logError("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")})),t}te(t,e){const s=t[0]>>1,i=this.Wt[s&this.Wt.mask];i&&(this.Zt=s&this.Wt.prevMask?e.blocksize1:e.blocksize0),this.Ht=i?e.blocksize1:e.blocksize0;const n=this.Zt+this.Ht>>2;return this.Zt=this.Ht,n}Jt(t){const e=new J(t),s="Failed to read Vorbis stream",i=", failed to parse vorbis modes";let n,r={count:0};for(;1!=(1&e.read(1)););for(;r.count<64&&e.position>0;){const t=G(e.read(8));if(t in r&&(1!==r.count||0!==t))throw this.Kt.logError("received duplicate mode mapping"+i),new Error(s);let h=0;for(;0===e.read(8)&&h++<3;);if(4!==h){if(1+((126&G(n))>>1)!==r.count)throw this.Kt.logError("mode count did not match actual modes"+i),new Error(s);break}n=e.read(7),r[t]=1&n,e.position+=6,r.count++}return r.mask=(1<<Math.log2(r.count))-1,r.prevMask=1+(1|r.mask),r}}class Pe extends it{constructor(t,e,s){super(t,e),this.ee=s,this.Frame=le,this.Header=ue,this.se=null,this.ie=new Uint8Array,this.ne=0}get codec(){return this.se||""}re(t,e){this.se!==t&&(this.he=new e(this.Kt,this.Lt),this.se=t,this.ee(t))}ae({data:t}){const e=H(t.subarray(0,8));switch(e){case"fishead\0":case"fisbone\0":case"index\0\0\0":return!1;case"OpusHead":return this.re("opus",Ve),!0;case/^\x7fFLAC/.test(e)&&e:return this.re("flac",de),!0;case/^\x01vorbis/.test(e)&&e:return this.re("vorbis",Te),!0}}oe(t){t.pageSequenceNumber!==this.ne+1&&this.ne>1&&t.pageSequenceNumber>1&&this.Kt.logWarning("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this.ne+1}, Got: ${t.pageSequenceNumber}`),this.ne=t.pageSequenceNumber}*parseFrame(){const t=yield*this.fixedLengthFrameSync(!0);this.oe(t);const e=st.get(t),{pageSegmentBytes:s,pageSegmentTable:i}=et.get(e.header);let n=0;if(e.segments=i.map((e=>t.data.subarray(n,n+=e))),255===s[s.length-1]?this.ie=Z(this.ie,e.segments.pop()):this.ie.length&&(e.segments[0]=Z(this.ie,e.segments[0]),this.ie=new Uint8Array),this.se||this.ae(t)){const e=this.he.parseOggPage(t);return this.Kt.mapFrameStats(e),e}}}const ve=()=>{};const $e=class{constructor(t,{onCodecUpdate:e,onCodec:s,enableLogging:i=!1,enableFrameCRC32:n=!0}={}){this.ce=t,this.ee=s||ve,this.It=e,this._=i,this.de=n?W:ve,this.R=this.ue(),this.R.next()}get codec(){return this.he.codec}*flush(){this.Qt=!0;for(let t=this.R.next();t.value;t=this.R.next())yield t.value;this.Qt=!1,this.R=this.ue(),this.R.next()}*parseChunk(t){for(let e=this.R.next(t);e.value;e=this.R.next())yield e.value}parseAll(t){return[...this.parseChunk(t),...this.flush()]}*ue(){if(this.Lt=new tt(this.It),this.ce.match(/aac/))this.he=new ee(this,this.Lt,this.ee);else if(this.ce.match(/mpeg/))this.he=new Xt(this,this.Lt,this.ee);else if(this.ce.match(/flac/))this.he=new de(this,this.Lt,this.ee);else{if(!this.ce.match(/ogg/))throw new Error(`Unsupported Codec ${mimeType}`);this.he=new Pe(this,this.Lt,this.ee)}for(this.le=0,this.ye=0,this.me=0,this.fe=0,this.Me=0,this.pe=void 0,this.we=new Uint8Array(0);;){const t=yield*this.he.parseFrame();t&&(yield t)}}*readRawData(t=0,e=0){let s;for(;this.we.length<=t+e;){if(s=yield,this.Qt)return this.we.subarray(e);s&&(this.me+=s.length,this.we=Z(this.we,s))}return this.we.subarray(e)}incrementRawData(t){this.ye+=t,this.we=this.we.subarray(t)}mapCodecFrameStats(t){this.pe=t.header.sampleRate,t.header.bitrate=8*Math.round(t.data.length/t.duration),t.frameNumber=this.le++,t.totalBytesOut=this.fe,t.totalSamples=this.Me,t.totalDuration=this.Me/this.pe*1e3,t.crc32=this.de(t.data),this.Lt.checkCodecUpdate(t.header.bitrate,t.totalDuration),this.fe+=t.data.length,this.Me+=t.samples}mapFrameStats(t){t.codecFrames?(t.codecFrames.forEach((e=>{t.duration+=e.duration,t.samples+=e.samples,this.mapCodecFrameStats(e)})),t.totalSamples=this.Me,t.totalDuration=this.Me/this.pe*1e3||0,t.totalBytesOut=this.fe):this.mapCodecFrameStats(t)}Ue(t,e){if(this._){const s=[`codec: ${this.codec}`,`inputMimeType: ${this.ce}`,`readPosition: ${this.ye}`,`totalBytesIn: ${this.me}`,`totalBytesOut: ${this.fe}`],i=Math.max(...s.map((t=>t.length)));e.push(`--stats--${"-".repeat(i-9)}`,...s,"-".repeat(i)),t("codec-parser",e.reduce(((t,e)=>t+"\n "+e),""))}}logWarning(...t){this.Ue(console.warn,t)}logError(...t){this.Ue(console.error,t)}};var Fe=s(785),Ne=s(763);const Ce=new WeakMap,Ie=String.raw`dynEncode0015v,uu$zzV 0xzvz tt}zv
twvz 'ÿ"5V&]V5V%65(6(5(6'U5+5575'ú7&5575(ú7%ûù5%5'ú7$5%5(ú7#ûù555'ú7"555(ú7!ûù5E5'ú7 5E5(ú7ûù6+5*5%5%ûù5#5#ûù5!5!ûù55ûù6*5)5&5&ûù5$5$ûù5"5"ûù5 5 ûù6)5VU65V%75]" 5VV
65*45*45*45*4§§§6-5)45)45)45)4§§§6,U55a"5V6U5VZU56! 5V655V7?5¨7.5.©5-§6-55?5¨7.5.©5,§6, 5V5["55655V76556U5?5¨7.5.©5?5¨7.5.©5-§§6-5?5¨7.5.©5?5¨7.5.©5,§§6,5V65V65V7" 5+45+45+45+4§§§5ÇXÔ§7ªÐ5,5ªÐ´5-5ªÐ´·¸Ë #'Y68U5555]07$V6%U5Va"5V]"5V6)V56*5V6+5V6 55V7,6-5V7.VV7V6!5V6/5V^6'U55&6"V6UU5'"5555"V^55"V5-^"V65.VdU5!656U555#7(5ù 55(%5%ù %5V565V65V7" 5/U55V7555"V5ù 55 7[" 5V65+55V7555"V?5?§M5V5 655*["5565#5V7"6(56U55"755(70?5?§M550?5?§M5V65V7" 5#5,6#5&V7&5)\" 5$5%6 U5V]"55 55 ]07!Va"5V6)5!V6*5!V655!V7+6,5!V7-VV7V65V6.V6#5!V^6/V6&U5!5&6"V6UU5/"555!5"V^55"V5,^"V65-VdU5656U555#7'5ù 55'%5%ù %5V565V65V7" 5.U55V7555"V5ù 575![" 5V65*55V7555"V?5?§M55 655!["5!565#5V7"6'56U55"755'7(?5?§M55(?5?§M5V65V7" 5#5+6#5&V7&5)\" V65VK5VK55 6U5 Va"5 V6U5$5%V7V^UV6#! 565 V7#6U545?е5?е5?е5?!е645V%65V7" 5U55#V656U545?е645V65V7" U5V^UV6! 565 V76U555?е5?е5?е5?!е655V%65V7" 5Z"55V6U555?е655V65V7" 555 ÇиË635V_U5$V5%V65V65 Ì6556V6U545?ж6655?Ð6752555455¸Ë535 %71r55K551M516255 65657µ645565575]" U5Va"55577555_06557V5V_06U5 VaU5864! 5$5%V65 V7ZU58645! 55V6586456U545?е645V65V7" 55 65V^"55V655$55%6U545?е5?е5?е5?!е645V%65V7" 55a"55V6555$5%V65 Ì65U545?ж665?Ð6752555455¸Ë535 %71r55K551M5152 625657µ645V65V65V75\" /$v|zt{zvz@~yFGM`,_e=String.raw`dynEncode000eo{%nns|{s{}O)q}szosmmvso~mpos±ÛN.0OVO.Oy/N..x08.¡0..x08.¡0¢.8.¡0.8.¡0¢.8.¡0.8.¡0¢.8.¡0 .8.¡0!¢." /"..¢..¢..¢.!.!¢. /..¢..¢..¢. . ¢. /.Ox/.Ox0.V.OyO0.\.O/N.OSN./.O/..O0x8.¡0.¢. /..x8.¡0.¢. /.O.yT..y/..O0x/..x/N.8.¡0.¢.8.¡0.¢. /.8.¡0.¢.8.¡0.¢. /.Ox/.Ox/.Oy0.".ÀQÍ 0£É..£É..£É°±ÄßR/(N..V/N.OZ.OV.Oy/.O/.O/.O/NO/.OUN./N...x0 8.8 F.. 8.8 F.Ox/.Ox0.U.N..Ox0....zxOx8.8 F..x/.Ox0.U...)/N.OV....V)0OZ.Oy/.O/.O/.O/O/O/NO/.OUN./N...x08.8 F..8.8 F.Ox/.Ox0.U.N..Ox0....zxOx8.8 F..x/.Ox0.UO/.OD.OD..y/N.OZ.O/N.Oy0OWNO/./.O0/N.$.8É®.8É®.8É®.8É®/$.Ox/.Oy0.N..Ox/./N.$.8É®/$.Ox/.Oy0N.OWNO/./.O0/N.%.8É®.8É®.8É®.8É®/%.Ox/.Oy0.S..Ox/N.%.8É®/%.Ox/.Oy0.%.ÀɱÄ/#.OXN.O/.O/.Å/%./O/N.$.8ɯ/&..x8É/'."...$.%±Ä.#.0!k..D..!F.!/"../.&.'®/$..x/..x0.VN.OZ...z0x0...V)/..y0O.OX)/N.OZN.(/$.Oy/.O0SN.(/$...Ox/.(/$./N.$.8É®/$.Ox/.Oy0..x/.OW..Ox/..x.y/N.$.8É®.8É®.8É®.8É®/$.Ox/.Oy0..\..Ox/...xOx/.Å/%N.$.8ɯ/&.8É/'."...$.%±Ä.#.0!k..D..!F.!."/".&.'®/$.Ox/.Ox/.Ox0.U`;class Le{constructor(t={}){this.ge=t.correlationSampleSize||11025,this.be=t.initialGranularity||16,this.Oe=Ce.get(Le),this.Oe||(this.Oe=(async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11])))().then((t=>t?WebAssembly.compile((0,Fe.decode)(Ie)):WebAssembly.compile((0,Fe.decode)(_e)))),Ce.set(this.Oe)),this.SynAudioWorker=function t(e,s,i){this.Ae=new Map,this.Se=(t,e,s)=>{const i=e.BYTES_PER_ELEMENT;let n=s/i;for(let r=0;r<t.length;r++)s+=t[r].length*i,e.set(t[r],n),n+=t[r].length;return s},this.Ve=(e,s)=>{let i=this.Ae.get(e);if(!i){const s=`'use strict';(${((t,e,s,i)=>{self.onmessage=n=>{new t(Promise.resolve(n.data.module),s,i).qe.get(e).apply(null,n.data.params).then((t=>{self.postMessage(t)}))}}).toString()})(${t.toString()}, "${e}", ${this.ge}, ${this.be})`,n="text/javascript";try{i=URL.createObjectURL(new Blob([s],{type:n}))}catch{i=`data:${n};base64,${Buffer.from(s).toString("base64")}`}this.Ae.set(e,i)}const n=new(globalThis.Worker||Ne)(i,{name:"SynAudio"}),r=new Promise((t=>{n.onmessage=e=>{n.terminate(),t(e.data)}}));return this.Oe.then((t=>{n.postMessage({module:t,params:s})})),r},this.Ee=(t,e)=>{const s=Float32Array.BYTES_PER_ELEMENT,i=new WebAssembly.Memory({initial:(t.samplesDecoded*t.channelData.length+e.samplesDecoded*e.channelData.length)*s/65536+4});return this.Oe.then((t=>WebAssembly.instantiate(t,{env:{memory:i}}))).then((({exports:n})=>{const r=new Map(Object.entries(n)),h=r.get("correlate"),a=new Float32Array(i.buffer),o=new DataView(i.buffer),c=r.get("__heap_base").value,d=this.Se(t.channelData,a,c),u=this.Se(e.channelData,a,d),l=u+s;h(c,t.samplesDecoded,t.channelData.length,d,e.samplesDecoded,e.channelData.length,this.ge,this.be,u,l);return{correlation:o.getFloat32(u,!0),sampleOffset:o.getInt32(l,!0)}}))},this.xe=(t,e,s)=>{const i=[],n=[0],r=Math.ceil(t.samplesDecoded/this.ge/2);s=Math.min(s,r);const h=Math.ceil(t.samplesDecoded/s);let a=0;for(let r=1;r<=s;r++){const s={channelData:[]};for(let e=0;e<t.channelData.length;e++){const i=t.channelData[e].subarray(a,a+h+this.ge);s.channelData.push(i),s.samplesDecoded=i.length}a+=h-this.ge,n.push(a),i.push(this.Te(s,e))}return Promise.all(i).then((t=>{let e=0,s=-1;for(let i=0;i<t.length;i++)t[i].correlation>s&&(e=i,s=t[i].correlation);return{correlation:t[e].correlation,sampleOffset:t[e].sampleOffset+n[e]}}))},this.Te=(t,e)=>this.Ve("_sync",[t,e]),this.Pe=(t,e,s)=>globalThis.Worker?this.Ve("_syncWorkerConcurrent",[t,e,s]):this.xe(t,e,s),this.qe=new Map([["_sync",this.Ee],["_syncWorker",this.Te],["_syncWorkerConcurrent",this.xe]]),this.Oe=e,this.ge=s,this.be=i},this.ve=new this.SynAudioWorker(this.Oe,this.ge,this.be)}async syncWorkerConcurrent(t,e,s=1){return this.ve.Pe(t,e,s)}async syncWorker(t,e){return this.ve.Te(t,e)}async sync(t,e){return this.ve.Ee(t,e)}}const ze=Le;class De{constructor(t,e){this.CRC_DURATION=3e5,this.PCM_DURATION=6e4,this.Ot=t,this.$e=e,this.initSync(),this.initQueue()}initSync(){clearTimeout(this.Fe),this.Fe=null,this.Ne=null,this.Ce=!1,this.Ie=[],this._e=0,this.Le=null,this.ze=null,this.De=null}initQueue(){this.Re=0,this.Be=0,this.Ke=0,this.Qe=[],this.ke=0,this.Xe={},this.je=[],this.We=0}get buffered(){return this.Be/this.Ke-this.$e.currentTime||0}add(t){const{crc32:e,duration:s,samples:i}=t;this.Be+=i,this.Ke=t.header.sampleRate,this.Qe.push({crc32:e,duration:s}),this.ke+=s;let n=this.Xe[e];if(n||(n=[],this.Xe[e]=n),n.push(this.Re++),this.ke>=this.CRC_DURATION){const{crc32:t,duration:e}=this.Qe.shift();this.ke-=e;const s=this.Xe[t];s.shift(),s.length||delete this.Xe[t]}this.je.push(t),this.We+=s,this.We>=this.PCM_DURATION&&(this.We-=this.je.shift().duration)}addAll(t){t.forEach((t=>this.add(t)))}Ze(t){for(const e of t)this._e+=e.duration,this.Ie.push(e)}async sync(e){if(null===this.Fe){const e=this.buffered;this.He=t,this.Fe=setTimeout((()=>{this.Ne=`Buffer underrun after syncing for ${e.toFixed(2)} seconds.`,this.He(this.Ne)}),1e3*e)}return this.Ze(e),new Promise((async(t,e)=>{let s;null!==this.Ne?e(this.Ne):this.He=e,this.Ce&&(s=this.Ye()),s||(this.Ce=!1,s=await this.Ge()),s?t(s):e("Old and new request do not match.")})).catch((t=>{this.Ot.state!==n.STOPPING&&this.Ot.state!==n.STOPPED&&this.Ot[g](r.WARN,`Reconnected successfully after ${this.Ot.state}.`,"Unable to sync old and new request.",t);const e=this.Ie;return this.initSync(),this.initQueue(),[e,P]})).then((t=>([E,T].includes(t[1])&&this.initSync(),t)))}Ye(){if(!this.Ie.length)return[[],x];const t=this.Ie[0].crc32,e=this.Xe[t];let s,i,n;if(e){t:for(const t of e){n=t-(this.Re-this.Qe.length);for(let t=0;t<this.Ie.length&&n+t<this.Qe.length;t++)if(this.Qe[n+t].crc32!==this.Ie[t].crc32)continue t;i=n+this.Ie.length<=this.Qe.length,s=!0;break}if(i)return[[],x];if(s){const t=this.Qe.length-n;return this.Ot[g](r.WARN,`Reconnected successfully after ${this.Ot.state}.`,`Found ${t} frames (${(this.Qe.slice(n).reduce(((t,{duration:e})=>t+e),0)/1e3).toFixed(3)} seconds) of overlapping audio data in new request.`,"Synchronized old and new request."),[this.Ie.slice(t),E]}}}async Ge(){try{const t=1,e=16,s=(t,e)=>t/e;if(!this.Le){const[i,n,r]=await this.Je(),h=r*t;if(n.samplesDecoded<=h)return[[],x];const a=new ze({correlationSampleSize:h,initialGranularity:e});this.Le=await a.syncWorkerConcurrent(i,n,Math.max(navigator.hardwareConcurrency-1,1)),this.Le.offsetFromEnd=s(i.samplesDecoded-this.Le.sampleOffset,r)}const{correlation:i,offsetFromEnd:n}=this.Le;let h=1e3*(this.buffered-n);if(-h>this._e)return[[],x];const a=0;if(h<0){let t=0;for(let e=0;t<this.Ie.length-a&&e>h;t++)e-=this.Ie[t].duration;this.Ie=this.Ie.slice(t-a)}else for(let t=0;t<a&&t<this.Ie.length;t++)h-=this.Ie[t].duration;return this.Ot[g](r.WARN,`Reconnected successfully after ${this.Ot.state}.`,`Synchronized old and new request with ${(Math.round(1e4*i)/100).toFixed(2)}% confidence.`),this.initQueue(),[this.Ie,T,h]}catch{}}async Je(){const t=(t,e)=>{let s=t.length-1;for(let i=0;i<e&&s>0;s--)i+=t[s].duration;return Zs.constructor.audioContext.decodeAudioData(v(t.slice(s).map((({data:t})=>t))).buffer)};[this.ze,this.De]=await Promise.all([this.ze?this.ze:t(this.je,2e3*this.buffered),t(this.Ie,1/0)]);const e=t=>{const e={channelData:[],samplesDecoded:t.length};for(let s=0;s<t.numberOfChannels;s++)e.channelData.push(Float32Array.from(t.getChannelData(s)));return e};return[e(this.ze),e(this.De),this.ze.sampleRate]}}class Re{constructor(t,s,i){this.Ot=t,this.ce=s,this.se=i;const n=e.get(this.Ot);this.ts=n[c],this.es=n[h],this.ss=n[d],this.ns=0,this.rs=0,this.hs=()=>{this.syncState=P}}static parseMimeType(t){return t.match(/^(?:application\/|audio\/|)(?<mime>[a-zA-Z]+)(?:$|;[ ]*codecs=(?:\'|\")(?<codecs>[a-zA-Z,]+)(?:\'|\"))/)}static canPlayType(t,e,s){const i=Re.parseMimeType(e),n=e=>e.reduce(((e,s)=>{if(""===e)return"";const i=t(s);return i?"maybe"===i||"maybe"===e?"maybe":!0===i||"probably"===i?"probably":void 0:""}),null);if(i){const{mime:t,codecs:r}=i.groups,h=s&&s[t];if(!h||Array.isArray(h))return n(h||[e])||n([`audio/${t}`]);if("object"==typeof h){if(r){const t=r.split(",");return t.length>1?"":h[t[0]]?n(h[t[0]]):""}return"maybe"}}return""}enablePlayButton(t){this.ts.removeAttribute("src"),this.ts.srcObject=null,t.includes("mediasource")?this.ts.src=URL.createObjectURL(new MediaSource):t.includes("webaudio")?(this.os=new MediaStream,this.ts.srcObject=this.os):t.includes("html5")&&(this.ts.src="data:audio/mpeg;base64,//sQxAAABFgC/SCEYACCgB9AAAAAppppVCAHBAEIgBByw9WD5+J8ufwxiDEDsMfE+D4fwG/RUGCx6VO4awVxV3qDtQNPiXKnZUNSwKuUDR6IgaeoGg7Fg6pMQU1FMy4xMDCqqqqqqqr/+xLEB4PAAAGkAAAAIAAANIAAAASqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=",this.ts.loop=!0)}get syncStateUpdate(){return this.cs}get syncState(){return this.ds}set syncState(t){this.ds=t,this.us&&this.us(t),this.cs=new Promise((t=>{this.us=t}))}get isSupported(){return!1}get isAudioPlayer(){return!1}get metadataTimestamp(){return 0}get currentTime(){return 0}get icecastMetadataQueue(){return this.ls}set icecastMetadataQueue(t){this.ls=t}get codecUpdateQueue(){return this.ys}set codecUpdateQueue(t){this.ys=t}get metadataQueue(){return this.ls?this.ls.metadataQueue:[]}fs(){this.ls.startQueue(this.Ms),this.ys.startQueue(this.Ms)}async ps(){this.syncState=E,this.syncFrames=[],this.syncDelay=null,this.ws=new De(this.Ot,this)}async start(t){let e;this.Ms=t,[r.RETRY,r.SWITCH].forEach((t=>this.Ot.addEventListener(t,this.hs)));const s=new Promise((t=>{e=t,[n.PLAYING,n.STOPPING].forEach((t=>this.Ot.addEventListener(t,e,{once:!0})))})).finally((()=>{[n.PLAYING,n.STOPPING].forEach((t=>this.Ot.removeEventListener(t,e)))}));await s}async end(){[r.RETRY,r.SWITCH].forEach((t=>this.Ot.removeEventListener(t,this.hs))),this.ls.purgeMetadataQueue(),this.ys.purgeMetadataQueue()}onStream(t){return t}onMetadata(t){this.ls.addMetadata(t,this.metadataTimestamp,this.currentTime)}onCodecUpdate(t,e){const s=this.currentTime;e<s&&(this.rs+=this.ns),this.ns=e,this.ys.addMetadata({metadata:t},(e+this.rs)/1e3,s)}}class Be extends Re{constructor(t){super(t),this.ts.crossOrigin="anonymous",this.ts.loop=!1,this.ts.preload="none",this.Ot.addEventListener(r.STREAM_START,(()=>{this.Us||this.end()})),this.ps()}static canPlayType(t){return Be.isSupported?super.canPlayType((t=>(new Audio).canPlayType(t)),t):""}static get isSupported(){return Boolean(window.Audio)}static get name(){return"html5"}get isAudioPlayer(){return!0}get metadataTimestamp(){return this.gs?(this.gs.totalDuration+this.bs)/1e3:0}get currentTime(){return this.Os&&(performance.now()-this.Os)/1e3}async ps(){super.ps(),this.gs=null,this.Os=0,this.bs=0,this.Us=!1}async start(t){const e=super.start(t);this.As=performance.now(),this.ts.src=null,this.ts.srcObject=null,this.ts.src=this.es,this.Ot.state!==n.STOPPING&&this.Ot.state!==n.STOPPED&&(this.ts.addEventListener("playing",(()=>{this.Os=performance.now(),this.bs=performance.now()-this.As,this.fs(),this.Ot[g](r.PLAY)}),{once:!0}),this.Ot[g](r.PLAY_READY),this.Us=!0),await e}async end(){super.end(),this.ts.src=null,this.ts.srcObject=null,this.ps()}onStream(t){this.gs=t[t.length-1]||this.gs,this.syncState===P&&(this.syncState=P)}}const Ke="webm",Qe="mp3",ke="mp4a.40.2",Xe="flac",je="vorbis",We="opus",Ze="audio/",He=";codecs=",Ye="audio/mp4"+He,Ge=Ze+Ke+He,Je="mse-audio-wrapper";class ts{constructor({name:t,contents:e=[],children:s=[]}){this.Ss=t,this.Vs=e,this.qs=s}static stringToByteArray(t){return[...t].map((t=>t.charCodeAt(0)))}static getFloat64(t){const e=new Uint8Array(8);return new DataView(e.buffer).setFloat64(0,t),e}static getUint64(t){const e=new Uint8Array(8);return new DataView(e.buffer).setBigUint64(0,BigInt(t)),e}static getUint32(t){const e=new Uint8Array(4);return new DataView(e.buffer).setUint32(0,t),e}static getUint16(t){const e=new Uint8Array(2);return new DataView(e.buffer).setUint16(0,t),e}static getInt16(t){const e=new Uint8Array(2);return new DataView(e.buffer).setInt16(0,t),e}static*flatten(t){for(const e of t)Array.isArray(e)?yield*ts.flatten(e):yield e}get contents(){const t=new Uint8Array(this.length),e=this.Es();let s=0;for(const i of ts.flatten(e))"object"!=typeof i?(t[s]=i,s++):(t.set(i,s),s+=i.length);return t}get length(){return this.xs()}Es(){return[this.Vs,...this.qs.map((t=>t.Es()))]}xs(){let t;return t=Array.isArray(this.Vs)?this.Vs.reduce(((t,e)=>t+(void 0===e.length?1:e.length)),0):void 0===this.Vs.length?1:this.Vs.length,t+this.qs.reduce(((t,e)=>t+e.length),0)}addChild(t){this.qs.push(t)}}class es extends ts{constructor(t,{contents:e,children:s}={}){super({name:t,contents:e,children:s})}Es(){return[...this.Ts,...ts.stringToByteArray(this.Ss),...super.Es()]}xs(){return this.Ps||(this.Ps=4+this.Ss.length+super.xs(),this.Ts=ts.getUint32(this.Ps)),this.Ps}}class ss extends ts{constructor(t,{contents:e,tags:s}={}){super({name:t,contents:e,children:s})}static getLength(t){const e=ts.getUint32(t);return e.every(((t,e,s)=>0===t&&(s[e]=128,!0))),e}Es(){return[this.Ss,...this.Ts,...super.Es()]}xs(){if(!this.Ps){const t=super.xs();this.Ts=ss.getLength(t),this.Ps=1+t+this.Ts.length}return this.Ps}addTag(t){this.addChild(t)}}class is{constructor(t){this.se=t}getCodecBox(t){switch(this.se){case Qe:return this.getMp4a(t,107);case ke:return this.getMp4a(t,64);case We:return this.getOpus(t);case Xe:return this.getFlaC(t)}}getOpus(t){return new es("Opus",{contents:[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channels,0,t.bitDepth,0,0,0,0,es.getUint16(t.sampleRate),0,0],children:[new es("dOps",{contents:[0,t.channels,es.getUint16(t.preSkip),es.getUint32(t.inputSampleRate),es.getInt16(t.outputGain),t.channelMappingFamily,0!==t.channelMappingFamily?[t.streamCount,t.coupledStreamCount,t.channelMappingTable]:[]]})]})}getFlaC(t){return new es("fLaC",{contents:[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channels,0,t.bitDepth,0,0,0,0,es.getUint16(t.sampleRate),0,0],children:[new es("dfLa",{contents:[0,0,0,0,...t.streamInfo||[128,0,0,34,es.getUint16(t.blockSize),es.getUint16(t.blockSize),0,0,0,0,0,0,es.getUint32(t.sampleRate<<12|t.channels<<8|t.bitDepth-1<<4),0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]})]})}getMp4a(t,e){const s=new ss(4,{contents:[e,21,0,0,0,0,0,0,0,0,0,0,0]});return 64===e&&s.addTag(new ss(5,{contents:t.audioSpecificConfig})),new es("mp4a",{contents:[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channels,0,16,0,0,0,0,es.getUint16(t.sampleRate),0,0],children:[new es("esds",{contents:[0,0,0,0],children:[new ss(3,{contents:[0,1,0],tags:[s,new ss(6,{contents:2})]})]})]})}getInitializationSegment({header:t,samples:e}){return new ts({children:[new es("ftyp",{contents:[es.stringToByteArray("iso5"),0,0,2,0,es.stringToByteArray("iso6mp41")]}),new es("moov",{children:[new es("mvhd",{contents:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,232,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2]}),new es("trak",{children:[new es("tkhd",{contents:[0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0]}),new es("mdia",{children:[new es("mdhd",{contents:[0,0,0,0,0,0,0,0,0,0,0,0,es.getUint32(t.sampleRate),0,0,0,0,85,196,0,0]}),new es("hdlr",{contents:[0,0,0,0,es.stringToByteArray("mhlr"),es.stringToByteArray("soun"),0,0,0,0,0,0,0,0,0,0,0,0,0]}),new es("minf",{children:[new es("stbl",{children:[new es("stsd",{contents:[0,0,0,0,0,0,0,1],children:[this.getCodecBox(t)]}),new es("stts",{contents:[0,0,0,0,0,0,0,0]}),new es("stsc",{contents:[0,0,0,0,0,0,0,0]}),new es("stsz",{contents:[0,0,0,0,0,0,0,0,0,0,0,0]}),new es("stco",{contents:[0,0,0,0,0,0,0,0]})]})]})]})]}),new es("mvex",{children:[new es("trex",{contents:[0,0,0,0,0,0,0,1,0,0,0,1,es.getUint32(e),0,0,0,0,0,0,0,0]})]})]})]}).contents}getSamplesPerFrame(t){return this.se===ke?t.map((({data:t,header:e})=>es.getUint32(t.length-e.length))):t.map((({data:t})=>es.getUint32(t.length)))}getFrameData(t){return this.se===ke?t.map((({data:t,header:e})=>t.subarray(e.length))):t.map((({data:t})=>t))}getMediaSegment(t){return new ts({children:[new es("moof",{children:[new es("mfhd",{contents:[0,0,0,0,0,0,0,0]}),new es("traf",{children:[new es("tfhd",{contents:[0,2,0,0,0,0,0,1]}),new es("tfdt",{contents:[0,0,0,0,0,0,0,0]}),new es("trun",{contents:[0,0,2,1,es.getUint32(t.length),es.getUint32(92+4*t.length),...this.getSamplesPerFrame(t)]})]})]}),new es("mdat",{contents:this.getFrameData(t)})]}).contents}}const ns=(...t)=>t.flatMap((t=>{const e=[];for(let s=t.length;s>=0;s-=255)e.push(s>=255?255:s);return e}));class rs extends ts{constructor(t,{contents:e,children:s,isUnknownLength:i=!1}={}){super({name:t,contents:e,children:s}),this.vs=i}static getUintVariable(t){let e;if(t<127)e=[128|t];else if(t<16383)e=ts.getUint16(t),e[0]|=64;else if(t<2097151)e=ts.getUint32(t).subarray(1),e[0]|=32;else if(t<268435455)e=ts.getUint32(t),e[0]|=16;else if(t<34359738367)e=ts.getUint64(t).subarray(3),e[0]|=8;else if(t<4398046511103)e=ts.getUint64(t).subarray(2),e[0]|=4;else if(t<562949953421311)e=ts.getUint64(t).subarray(1),e[0]|=2;else if(t<72057594037927940)e=ts.getUint64(t),e[0]|=1;else if("number"!=typeof t||isNaN(t))throw((...t)=>{console.error(Je,t.reduce(((t,e)=>t+"\n "+e),""))})(`EBML Variable integer must be a number, instead received ${t}`),new Error("mse-audio-wrapper: Unable to encode WEBM");return e}Es(){return[...this.Ss,...this.Ts,...super.Es()]}xs(){return this.Ps||(this.$s=super.xs(),this.Ts=this.vs?[1,255,255,255,255,255,255,255]:rs.getUintVariable(this.$s),this.Ps=this.Ss.length+this.Ts.length+this.$s),this.Ps}}const hs=[225],as=[98,100],os=[159],cs=[31,67,182,117],ds=[86,170],us=[134],ls=[99,162],ys=[66,130],ms=[66,133],fs=[66,135],Ms=[26,69,223,163],ps=[66,242],ws=[66,243],Us=[66,247],gs=[66,134],bs=[156],Os=[21,73,169,102],As=[77,128],Ss=[181],Vs=[86,187],qs=[24,83,128,103],Es=[163],xs=[231],Ts=[42,215,177],Ps=[174],vs=[215],$s=[22,84,174,107],Fs=[131],Ns=[115,197],Cs=[87,65];class Is{constructor(t){switch(t){case We:this.Fs="A_OPUS",this.Ns=t=>[new rs(ds,{contents:rs.getUint32(Math.round(t.preSkip*this.Cs))}),new rs(Vs,{contents:rs.getUint32(Math.round(3840*this.Cs))}),new rs(ls,{contents:t.data})];break;case je:this.Fs="A_VORBIS",this.Ns=t=>[new rs(ls,{contents:[2,ns(t.data,t.vorbisComments),t.data,t.vorbisComments,t.vorbisSetup]})]}}getInitializationSegment({header:t}){return this.Cs=1e9/t.sampleRate,new ts({children:[new rs(Ms,{children:[new rs(gs,{contents:1}),new rs(Us,{contents:1}),new rs(ps,{contents:4}),new rs(ws,{contents:8}),new rs(ys,{contents:rs.stringToByteArray(Ke)}),new rs(fs,{contents:4}),new rs(ms,{contents:2})]}),new rs(qs,{isUnknownLength:!0,children:[new rs(Os,{children:[new rs(Ts,{contents:rs.getUint32(Math.floor(this.Cs))}),new rs(As,{contents:rs.stringToByteArray(Je)}),new rs(Cs,{contents:rs.stringToByteArray(Je)})]}),new rs($s,{children:[new rs(Ps,{children:[new rs(vs,{contents:1}),new rs(Ns,{contents:1}),new rs(bs,{contents:0}),new rs(us,{contents:rs.stringToByteArray(this.Fs)}),new rs(Fs,{contents:2}),new rs(hs,{children:[new rs(os,{contents:t.channels}),new rs(Ss,{contents:rs.getFloat64(t.sampleRate)}),new rs(as,{contents:t.bitDepth})]}),...this.Ns(t)]})]})]})]}).contents}getMediaSegment(t){const e=t[0].totalSamples;return new rs(cs,{children:[new rs(xs,{contents:rs.getUintVariable(e)}),...t.map((({data:t,totalSamples:s})=>new rs(Es,{contents:[129,rs.getInt16(s-e),128,t]})))]}).contents}}const _s=()=>{};class Ls{constructor(t,e={}){this.ce=t,this.PREFERRED_CONTAINER=e.preferredContainer||Ke,this.MIN_FRAMES=e.minFramesPerSegment||4,this.MAX_FRAMES=e.maxFramesPerSegment||50,this.MIN_FRAMES_LENGTH=e.minBytesPerSegment||1022,this.MAX_SAMPLES_PER_SEGMENT=1/0,this.Is=e.onMimeType||_s,e.codec&&(this._s=this.Ls(e.codec),this.Is(this.zs)),this.Ds=[],this.Kt=new $e(t,{onCodec:t=>{this._s=this.Ls(t),this.Is(this.zs)},onCodecUpdate:e.onCodecUpdate,enableLogging:e.enableLogging,enableFrameCRC32:!1})}get mimeType(){return this.zs}get inputMimeType(){return this.ce}*iterator(t){t.constructor===Uint8Array?yield*this.Rs([...this.Kt.parseChunk(t)].flatMap((t=>t.codecFrames||t))):Array.isArray(t)&&(yield*this.Rs(t))}*Rs(t){if(this.Ds.push(...t),this.Ds.length){const t=this.Bs();if(t.length){this.Ks||(this.Ks=!0,yield this._s.getInitializationSegment(t[0][0]));for(const e of t)yield this._s.getMediaSegment(e)}}}Bs(){const t=[[]];let e=t[0],s=0;for(const i of this.Ds)(e.length===this.MAX_FRAMES||s>=this.MAX_SAMPLES_PER_SEGMENT)&&(s=0,t.push(e=[])),e.push(i),s+=i.samples;return this.Ds=e.length<this.MIN_FRAMES||e.reduce(((t,e)=>t+e.data.length),0)<this.MIN_FRAMES_LENGTH?t.pop():[],t}Ls(t){switch(t){case"mpeg":return this.zs=`${Ye}"mp3"`,new is(Qe);case"aac":return this.zs=`${Ye}"mp4a.40.2`,new is(ke);case"flac":return this.zs=`${Ye}"flac"`,new is(Xe);case"vorbis":return this.zs=`${Ge}"vorbis"`,this.MAX_SAMPLES_PER_SEGMENT=32767,new Is(je);case"opus":return this.PREFERRED_CONTAINER===Ke?(this.zs=`${Ge}"opus"`,this.MAX_SAMPLES_PER_SEGMENT=32767,new Is(We)):(this.zs=`${Ye}"opus"`,new is(We))}}}class zs extends Re{constructor(t,e,s){super(t,e,s),this.ps()}static canPlayType(t){return zs.isSupported?MediaSource.isTypeSupported(t)?"probably":super.canPlayType(MediaSource.isTypeSupported,t,{mpeg:['audio/mp4;codecs="mp3"'],aac:['audio/mp4;codecs="mp4a.40.2"'],aacp:['audio/mp4;codecs="mp4a.40.2"'],flac:['audio/mp4;codecs="flac"'],ogg:{flac:['audio/mp4;codecs="flac"'],opus:['audio/mp4;codecs="opus"','audio/webm;codecs="opus"'],vorbis:['audio/webm;codecs="vorbis"']}}):""}static get isSupported(){return Boolean(window.MediaSource)}static get name(){return"mediasource"}get isAudioPlayer(){return!0}get metadataTimestamp(){return this.Qs&&this.Qs.sourceBuffers.length&&Math.max(this.Qs.sourceBuffers[0].timestampOffset,this.Qs.sourceBuffers[0].buffered.length?this.Qs.sourceBuffers[0].buffered.end(0):0)||0}get currentTime(){return this.ts.currentTime}async ps(){super.ps(),this.ks=[],this.Us=!1,this.Xs=this.js(this.ce,this.se),await this.Xs}async start(t){const e=super.start(t);await this.Ws(),await e}async end(){super.end(),await this.ps()}async onStream(t){if((t=t.flatMap((t=>t.codecFrames||t))).length){switch(this.syncState){case P:this.ws.initSync(),this.syncState=x;case x:[this.syncFrames,this.syncState,this.syncDelay]=await this.ws.sync(t),t=this.syncFrames}switch(this.syncState){case T:break;case E:await(await this.Xs)(t),this.ws.addAll(t)}}}async js(t,e){if(MediaSource.isTypeSupported(t))return await this.Zs(t),async t=>this.Hs(v(t.map((t=>t.data))));{const s=new Ls(t,{codec:e});if(!MediaSource.isTypeSupported(s.mimeType))throw this.Ot[g](r.ERROR,`Media Source Extensions API in your browser does not support ${t} or ${s.mimeType}.See: https://caniuse.com/mediasource and https://developer.mozilla.org/en-US/docs/Web/API/Media_Source_Extensions_API`),new Error(`Unsupported Media Source Codec ${s.mimeType}`);return await this.Zs(s.mimeType),async t=>{const e=v([...s.iterator(t)]);await this.Hs(e)}}}async Zs(t){await new Promise((async t=>{this.Qs=new MediaSource,this.Qs.addEventListener("sourceopen",t,{once:!0})})),this.Ys=0,this.Qs.addSourceBuffer(t).mode="sequence"}async Gs(){return new Promise((t=>{const e=this.Qs.sourceBuffers[0];e.updating?e.addEventListener("updateend",t,{once:!0}):t()}))}async Ws(){this.ts.loop=!1,this.ts.src=URL.createObjectURL(this.Qs),await this.Xs}async Hs(t){if(this.Ot[g](r.STREAM,t),this.Qs.sourceBuffers.length||this.Ot[g](r.WARN,"Attempting to append audio, but MediaSource has not been or is no longer initialized","Please be sure that `detachAudioElement()` was called and awaited before reusing the element with a new IcecastMetadataPlayer instance"),this.Ot.state!==n.STOPPING&&this.Qs.sourceBuffers.length){this.ks.push(t);try{for(;this.ks.length;)this.Qs.sourceBuffers[0].appendBuffer(this.ks.shift()),await this.Gs()}catch(t){if("QuotaExceededError"!==t.name)throw t}this.Us||(this.ss<=this.metadataTimestamp?(this.ts.addEventListener("playing",(()=>{this.fs(),this.Ot[g](r.PLAY)}),{once:!0}),this.Ot[g](r.PLAY_READY),this.Us=!0):this.Ot[g](r.BUFFER,this.metadataTimestamp)),this.ts.currentTime>5+this.ss&&this.Ys+5e3<performance.now()&&(this.Ys=performance.now(),this.Qs.sourceBuffers[0].remove(0,this.ts.currentTime-5+this.ss),await this.Gs())}}}function Ds(t){const e=Uint8Array,s=Float32Array;Ds.modules||Object.defineProperties(Ds,{modules:{value:new WeakMap},setModule:{value(t,e){Ds.modules.set(t,Promise.resolve(e))}},getModule:{value(t,e){let s=Ds.modules.get(t);return s||(e?s=WebAssembly.compile(Ds.decodeDynString(e)):(e=t.wasm,s=Ds.inflateDynEncodeString(e).then((t=>WebAssembly.compile(t)))),Ds.modules.set(t,s)),s}},concatFloat32:{value(t,e){let i=new s(e),n=0,r=0;for(;n<t.length;)i.set(t[n],r),r+=t[n++].length;return i}},getDecodedAudio:{value:(t,e,s)=>({channelData:t,samplesDecoded:e,sampleRate:s})},getDecodedAudioMultiChannel:{value(t,e,s,i){let n,r,h=[];for(n=0;n<e;n++){const e=[];for(r=0;r<t.length;)e.push(t[r++][n]);h.push(Ds.concatFloat32(e,s))}return Ds.getDecodedAudio(h,s,i)}},decodeDynString:{value(t){const s=new e(t.length),i=parseInt(t.substring(11,13),16),n=256-i;let r,h=!1,a=0,o=13;for(;o<t.length;)r=t.charCodeAt(o++),61!==r||h?(h&&(h=!1,r-=64),s[a++]=r<i&&r>0?r+n:r-i):h=!0;return s.subarray(0,a)}},inflateDynEncodeString:{value:t=>(t=Ds.decodeDynString(t),new Promise((s=>{const i=String.raw`dynEncode0014u*ttt$#U¤¤U¤¤3yzzss|yusvuyÚ&4<054<,5T44^T44<(6U~J(44< ~A544U~6J0444545 444J0444J,4U4U
Ò7U454U4Z4U4U^/6545T4T44BU~64CU~O4U54U~5 U5T4B4Z!4U~5U5U5T4U~6U4ZTU5U5T44~4O4U2ZTU5T44Z!4B6T44U~64B6U~O44U~4O4U~54U~5 44~C4~54U~5 44~5454U4B6Ub!444~UO4U~5 U54U4ZTU#44U$464<4~B6^4<444~U~B4U~54U544~544~U5 µUä#UJUè#5TT4U0ZTTUX5U5T4T4Uà#~4OU4U $~C4~54U~5 T44$6U\!TTT4UaT4<6T4<64<Z!44~4N4<U~5 4UZ!4U±_TU#44UU6UÔ~B$544$6U\!4U6U¤#~B44Uä#~B$~64<6_TU#444U~B~6~54<Y!44<_!T4Y!4<64~444~AN44<U~6J4U5 44J4U[!U#44UO4U~54U~5 U54 7U6844J44J 4UJ4UJ04VK(44<J44<J$4U´~54U~5 4U¤~5!TTT4U$5"U5TTTTTTT4U$"4VK,U54<(6U~64<$6_!4< 64~6A54A544U~6#J(U54A4U[!44J(44#~A4U6UUU
[!4464~64_!4<64~54<6T4<4]TU5 T4Y!44~44~AN4U~54U~54U5 44J(44J UÄA!U5U#UôJU"UÔJU#UÔ"JU#U´"JT4U´ZTU5T4UôZTU5T4UDZTU5T4U$[T44~UO4U~5 UÔUô4U~U´$.U5T4UP[T4U~4~UO4U~5 U#<U#<4U~U2$.UÄUN 44 ~UO4U~5 44!~UO4U~5 4U~4~UO4U~5 44J44J(U5 44U¤~J@44Uä~J<44UD~J844U~J44U$54U$5U54U$54U1^4U1^!4U~54U~5U54U~6U4U^/65T4T4U$54U~4BU~4O4U54U~5 UU'464U'_/54UU~5T4T4U~4BU~UO4U54U~5 U54Uä~4U¤~4U~U'$!44~5U5T44\T44U<~$6U\!4U#aT4U~4U~4O4U~5 U5U5U5TTT4U$"4YTU5 4U4~C5U5 U5U5444$4~64~\TU5 4U~4U~5T4Y!44O4U~54U~54U5 4CYTU5 4Uä~4U¤~4U~4$6TU54U\!44Bæ4Bä~[!4U~4UD~4U~4U~4$6TU54U\!44B4B~[!44U<~4U4~$5 4U"U#$544"Y!454U^!44<J44<(J454U~84UN!#%'+/37?GOWgw·×÷Uä;U9$%& !"#`;Ds.getModule(Ds,i).then((t=>WebAssembly.instantiate(t,{}))).then((({exports:i})=>{const n=new Map(Object.entries(i)),r=n.get("puff"),h=n.get("memory").buffer,a=new e(h),o=new DataView(h);let c=n.get("__heap_base");const d=t.length,u=c;c+=4,o.setInt32(u,d,!0);const l=c;c+=d,a.set(t,l);const y=c;c+=4,o.setInt32(y,a.byteLength-c,!0),r(c,y,l,u),s(a.slice(c,c+o.getInt32(y,!0)))}))})))}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this.Js}),this.getOutputChannels=(t,e,s)=>{let i=[],n=0;for(;n<e;)i.push(t.slice(n*s,n++*s+s));return i},this.allocateTypedArray=(t,e)=>{const s=this.Js.ti(e.BYTES_PER_ELEMENT*t);return this.ei.add(s),{ptr:s,len:t,buf:new e(this.Js.HEAP,s,t)}},this.free=()=>{this.ei.forEach((t=>{this.Js.si(t)})),this.ei.clear()},this.instantiate=()=>{const i=t.Oe,n=t.ii,r=t.ni,h=t.ri,a=t.hi;return i&&Ds.setModule(n,i),this.Js=new n(Ds).instantiate(),this.ei=new Set,this.Js.ready.then((()=>(t.ai=this.allocateTypedArray(r,e),t.oi=this.allocateTypedArray(h*a,s),this)))}}class Rs extends Ne{constructor(t,e,s,i){Ds.modules||new Ds;let n=Ds.modules.get(s);if(!n){const t=`'use strict';(${((t,e,s)=>{let i,n,r=new Promise((t=>{n=t}));self.onmessage=({data:{id:h,command:a,data:o}})=>{let c,d=r,u={id:h};"init"===a?(Object.defineProperties(t,{WASMAudioDecoderCommon:{value:e},EmscriptenWASM:{value:s},module:{value:o.module},isWebWorker:{value:!0}}),i=new t(o.options),n()):"free"===a?i.free():"ready"===a?d=d.then((()=>i.ready)):"reset"===a?d=d.then((()=>i.reset())):(Object.assign(u,i[a](Array.isArray(o)?o.map((t=>new Uint8Array(t))):new Uint8Array(o))),c=u.channelData.map((t=>t.buffer))),d.then((()=>self.postMessage(u,c)))}}).toString()})(${s}, ${Ds}, ${i})`,e="text/javascript";try{n=URL.createObjectURL(new Blob([t],{type:e}))}catch{n=`data:${e};base64,${Buffer.from(t).toString("base64")}`}Ds.modules.set(s,n)}super(n,{name:e}),this.ci=Number.MIN_SAFE_INTEGER,this.di=new Map,this.onmessage=({data:t})=>{const{id:e,...s}=t;this.di.get(e)(s),this.di.delete(e)},new i(Ds).getModule().then((e=>{this.ui("init",{module:e,options:t})}))}async ui(t,e){return new Promise((s=>{this.postMessage({command:t,id:this.ci,data:e}),this.di.set(this.ci++,s)}))}get ready(){return this.ui("ready")}async free(){await this.ui("free").finally((()=>{this.terminate()}))}async reset(){await this.ui("reset")}}function Bs(t){var e,s,i;function n(){}for(var r=new Uint8Array(123),h=25;h>=0;--h)r[48+h]=52+h,r[65+h]=h,r[97+h]=26+h;r[43]=62,r[47]=63,Bs.wasm||Object.defineProperty(Bs,"wasm",{get:()=>String.raw`dynEncode0095 %j©Ö¥Õ= [ücò¬qrØÍTÑ®]µ+¡]ÚÿKM&ìÃÅFJ´õ1_§= ¾A-T¸½Ê"ÖþkÝä8
Äå¼?ÙqV2;CÚxC:ëañjk©(4'êÅ<i)+ñ¸+ÉFÞA+yDÉàXÕ¨Í.3(bÝdþ=M»×
ï5Âõ5UÅÜ%Í=}8}y+-ε¥}£çÙ5-'ÑN¦Ù¾âX¥83sS%6Ôþ¦²¦XàQvh_7ï!ÈÍ ÈÍHͤrMMM8M!%SWÈN "Q+У±ÏÿxB.IíøÿÿL[ØNèÛ£ÿ)ø{}Ìk Í=Mu¯ýiòñAþ×Réª=}ëïÕ+þ»SPHæ,P¢åz2Z
Q= )U¨¼ÆÒZÛN<q=}bè0æ,<Ã8ÓäÛØ3!1¼ü ehÖ883#¯2 g}A<HÛ¬ÒòÉOw~f¢äÌ GÐàjùj^Ä@iÁD R¨pÁ?4é(|-~yLJêçò3PÞ¸QýÙl!¯
tê Xïx°vó²´\F:prhÉhr8ý¹X½k>CB%²2CÚ£Ñû{lȬyÝï#=M®QaQa!ø....®CiI\£±âêì2Ïé?O;~À£Ã½´Ýân3Ù»öôáq±Í»»*Ù{@ï5/Ã[Ó&éè½RmÙ$W}±ó?áÏ<"ø¸ýÑÌIu"«\Þ=}LÍ¥ÅèU=M1÷Æ#¼âöóKÜ¿@ÐEÄ#í=}XÒòv÷5^
¯RGÑo³fûAâBâuOðËÜOso±ª®tþ#ñHR¾í¦Êó@ÐÆ=MQÙ0ï0ñ°§¬+rêTðdeôNØK<0êäR%åÍô#µfÐ9©Û8]¬¨/Ë ´1oË2mu>%Ý>HX$¾
𩼠atè¡eËR«/ÃSÌ(=}ZË1qåè6»3@¥
t Ų£wsűÛXö+°~ÅâXÅ¢ÑÀ385¿Põþ9õixÅ¥êm¯¿zÄx÷_VðC¦ÝPêp=M@#)Lï£DëÂ= óíy°¦?Y·mÎÜø(}µø%ÌËðÖÔkN"èb{Iã$ÞÍtN9NóýkÙPý/´¤ûÂòÿl»XÖ ÷g/óTànn3-©i9×ÁI.´öu¢ G¼X¹ö7¦t×]é¯à= yâ6§Dû×ZDæÌLës©ØäƧØ+pªE9¡t©ò=}}}Û8Ä&ÅÛlÂaÍ¿SÈ cx#-º\P>~ËU¡®©Ä oÙ¥_\0¥ðùßüpTÔ}äX»qNYÀÐ=M0ý@Þ.âátv&÷¿Lg¯I-ÒüFðÄø¶¤¢/:2{Hdh:f$´mD.©qk׿rkí?Ò(ÍóçoGV«¾Sa[±=}+' {¤¸»)&õf³)&Ue¡]àGÀ%W=MIèÚ=}ÎmÇ= ýÝ-ye)Gö^*;½]- óÿ§³Ú¾U1)V@Dcj§íV¹)= 5ÓÙPVÐÅc=ME1fÃêf¢á´Õñù¨La[ÈOÿ+o{Ðè0ßeX¥Á×Þe-G<¨[.>ÆtXç·qçkû<o
´!aiä§ëëÓÚ$üÇ
|ðè'=}ç@Nª9Ô¶Óí·^ÃT¾nzL¼@䶫´çx(ÛÓsÝ2oÅÒoÝôI@Òði= ¨pläݺ&&8×c'²»0Þ= .ýLû3q¥Øü 9Ý*¨f×(ôfX©¡ùÒ¼Ç*»z"Q6À3Ö¤s£órÆѪdÒ4?W¢,p= ª*
ö7{ÉR{ûþ)¶{lKÂ}à;gYáêkK§Ë<\¥[ÉÜ÷0QÕô×Fõ6\ä¾Ê¬vûìw ^e+ÞeyÊmÅdJÃBl}Æt E+F (ãUw»=MÅ!é8~SÊzS= ¾µ¦v<úÕO("}©=}0t¤<ZBÛzÖvå!á&¸ 7~¶»@ÙªÈéôúÄä\¡mèMÙøym!Éé³ïÝ'Ë¡,*)õLäàRóV£Êßøýåjá_«Kj3kkçHÙV´Ë 0F<ßç$Ò$?µÌyÕ9-ïÄÁ¥þ.Çÿu¤;eGtÛ ©h$ñyN£¾}wEî ÎoÏ+-=MÅ=M9BÌ^ÄÉ^4r éjr °ù62-0bpb¿pF¾n)»¼¬a¡sLÍÊFd!!Îݺ'ã;»¼qþ(=}JþHS¼~#Ö+ó³üÌÖùê¹XÞ|¾<K9÷ÉIuÇöGÞrÔ)YfPcskY;-YtË5= V,P¥1ß©Òî*»¾±F¶÷ÚîÿVè'©v[ª\Ç-uy²± ìMËÙ£@¤ælP'ñÈ«ºô诿ú7¸(t¶×»Qgf Ö=}çç¹iøõ6tgðJ®jWE®pD´I2ÎÆØÛ±Tÿÿ~øè ´W;hùʲ5^/¯osÓE»gÜ &ØzôzGe¶Í¸îsáÉ°o¼"ãÛا¯MÞ´/¯N{½0Å»})r¿öX[i¡j,ÿrÒ¦Àö²Î1á"º0AGf!48ÅÏeÚçWêbÞGÁ5ýìmü0°-ôñ¸^|ÓÂtw°ûj¦O7
ÓvYt¬¾àcÔ©OàÂÍ3ÅÛZÁN}î¾ùjùztsÉÖNnPkìN¥ú£hÕ^Òxܨ*Tß@4!¶J´ém¥.m%ÍÓlC_¢ßÙ#_b°{$QèíÆq©>ä&¿§ªòéµ%$¦DÕÿP·ÀÌ9»ìkþ¹É= 'Wå"ãS°-XÚõýqV¦E×UzXMxâÝí£tIk_m¢×T£L8q¨TÆ= )ÿ·'Eê×½X{sÁi»3P6Ku«Fù[·À_r?ß*8ó·å¨õY^Ùø¨^fÅeáôÊÂ>ÌÕÞD¼õíÁ6C×åÈÕW&T³bUrâu.¡!gTÏÞC¨Ô\Í~a×»n«ÙñßÖ¤½ôuqgñ ù7}r"IutòÝ F"A-Õå+º×9ʬjÜøõW"ÎQ5\T×ríÜ=}B4+_jX>Ù¡Ê}Uù[øÞÓ£
ÍæàIå_{!¢qÚõ@ü2®>(Úg{ôÜ/^T5TXµ10 ¢ù³õçRÝSâg±ÉéõßPí=M¶"°A'?ì»;!=Mær!³·%søsÃÏ«+±SéìÀ°©ßv±%¥Ie¿å×
ÅZÌèþ©=}Hg;þ*6A+s'0Dùü\ûwÎ.0LP"'àý¯ÐØÙýÝDH¨pt./¯öO> *áÂ4Çr0ºLxþï-SëÍù·
w>LâR´elâ¼7ââ^7¹ew'ê¦ÎÒ¼¢åÆX Ð5ÕRQÅÖ.OUïa!aÉ
¡1ÏX«¢ìc ÒÅÂ@ Á×HOJ#Hc¯R= Í˦ÇFN×ÙÑ0o Ùq[MjAoÿQÔô»R²Ky¥áñeNRJ^!ÍÉäæÌe6Òs|sP3@Eú;þë4õ"
éfÄóà~À,ÀA=}JƯöL;Ä
ìçÆT#|jQCvò$µ;çûvSÜëfÅëó?=}lôä"¤éÒÁèî¸5x¶©ÑCúÙµE"Ýãï$]D7ÅըŻ5hP³c?¤ì9Õ¦ìÙf?sR¬~ÒËÒºEgÑù¹¶X½ÎÓ±ÑϪn³y!= 8Â(ñ<[µ{$.q^o[Å:|À|0»¬oÅÃs]þí£EÞrXËté) ¶K9-ñT[rCÕ}vN{Ð5¬m)&ëÄö0±RfyuAÛ ãR= Rä¡rwìòá0ËT¯Ie
=}Ï\H¦üØaòUÝÖ
W9Efüb!¿·(ئ» óx®uL«G ²Ä k;Ã6¨1<½Ý[[ê[¢"qR_öÀRØZS/|2bgM#Ò ÀÑ}÷¦¥ ß
MëÓx¸cÎD0ò¡±)~<âã¶æV4&&ø¨×R~Úëô=}{<¥~9}VÄj¨Wã- Ó©Ðì®<È/UmE,?ÈP3#IJ޽ùÜÚ#íÜ<¸¥&ØçAgs"Q »#9Ä-Ón!=M! \ FpÈâdÓIZ¡ÚöD}n¸,ÈâIü³ÕÀQÀÃËÜtrû ×Ñâ´ÊÃV$Îà!KF#»¬ë¯b4KNYb³bU
ñ *56PÃEaËF-m:XÁüLÊ>ìrrÓÂ-ÜeG· rL¶¹É¥P°kW8Nª0Ý·¸ÃáavÇÀyS{|H= Ödq¼¸!ø¨³U'18²^p¨¡<#H[³E)e±+Ô¶òÍ= 5ëº!¾éAÏ*ôaEî§8RAϬAyβÕïs®¿é7û{²Õµ#È=}·¥B<öMÑQ¦åÃÇ9= zÒQzón"¹Cc§e±|צ-VáéT®[NWk@\ÛÆ%&³Ína»2b/EX,an8±ñ®«Of Ãò,=M¿Îud×Ía
y£¢^ªUÿÿL¬é½QC¤ø4üc¨s"â¯K¼ÑW4:Þ÷Ä\bÔôcBC+1Æ·O9´H{kHÂòÄõUïØpiBÎ]¶ð
÷³Á$yö/EoNô÷ãë u<4%áåcÒø§Î[,l¨Î×áÖ~Ç7+Ö^ûk§PÜ'Ãi©QDÌ8´T½¾bPñðÔ©¢&² ·ÓSyU\!=}+= = &úGoæ\S:b¬Qû-\G¯_í<Ì&^㦠®ÆÁÃe¯ö³b;ËxÀªW.^EE;Cr³MyGù|70É8ñ8{ ²ÎºíËÒ0ÊZ -±myAVsc{M)6¿8ë+îÊ^ñôÛÇѪ/ÑXYa±sNÁØ¿Ëc¼!¹Á\Cx_h8Ïq¢ãÚÊnäÔãý»o´CõªÕ{´PoÅå¶ïá7ØpbÄgcBÄ NéçÃRrp1 Ü9°E®uåk¡ûŪ2¶2yýªj>wPOtËÌX¡zÙÁº¶{«+'PÌÈ)«»¥æ¦¯¦ÐØ
@£5\¦^= Öùònf¼Ü]$Ì%´dѳr%ya«Zôô*Úå¥~5Üv65P6NÊÔD^ÑBÌ^0 »× þ*ª«Åd1~E+PûÁNo&¶#:P+Íp¡Dß}[¹AÞPÈõuça¹(:î ¼¶3Æo_=MàïE04u]O¡³Û=M]i¥²û×Ñ´z]^Èb´1VÑ9ÄpùgqÏh_®Þ»Gqy,¦ZSyßèuA/¡ÛÉWGäSDÜ6=}Fõ4SvÖèøºøiþ(b¨ÍàMí¥ö©·÷?I9ZF×T£*j×ä´Ö÷Ô"^£án= ó·|Ýñ±9ÖP¡ [ç/kÉÃÝnÅhHþùøC ·û5üÃ=}´S}Ã|®áÝèÌ?^hôipnn«Ts0xøÓ½GÖX°ÁÜ èë²ãg<bBÄû]/ΤjV¦ØÓÉ÷|ñÅ6¤ù0ô=}Ý/´J»c1h8ëW¯ß¡Qi'®ocdýC.¶öi¡BùÆ´ù3±gÛp¸ex&shg|ÌZ9ø[^ú\c¹jT¡î¡þkQuX¡*öÿÓ ±
, Çmî%·>]HBÍ°¿Jxö5{T1â>(éÇèSº±nzké©«= 'ÅxÛa¶XtAN3Iô*HuøÅ
l1×±Ýî©EvÆýJ=}Ï,ÕîömÙ|ð£í"»*ÚFé¿oeõö$Q&ÛS¬@j±~$Îàgi#ä³jªuÆB®Áj<WT=MÃO3ýÐf,»Ë^?·>£ÞɲW¾h´Ã=}Ó= ¢ïüÔ+~ÅM\é_ zan= 0±Th¡´Û>æÔâi_õF£°/D¡ªE58z¡ý´gñeMut°JÜC £Q6)e¨=}¡q³^
óYcïi¯ÆÇM¹ìDÎ= ?hLZ5 Ý£Êhî{WÐ/=}Å®å3ùâ(XÇDö½,¦îkÈ)GÜø©_Ltc=MÁKUm\ÓH#;ù9äèGÄgø@ÆaB2õvÇ [4RÕ¦¸â¶fúØüd:d\ÌzK»,w¯¾2wZÒkº~
Ó¹ÈËz0xºAêXrZ*µÌ#äö¶ÉÛ$ËÜÕõ| áív£$ËzÞzGé-½06°|&gåüÿrïᱬ}pV«/L>·¡SêÑËmÆõRt3mJ ±ð¾Ó^6ùhî2DÆâÊÎFpù^°bAöAý m&óa|ÇkEÈþ9J°é|»ç1À\ðOTÒ-o¨eÛ0tþà p-3= 'ÇaBÞ¿!â^»GhODWñÁï8§<Øif¡{ü>
/
ªçRèúÖvÔÁNä[ïÜa/D]¦hþbíãMzÓA¸@;%çåÃz:éó߶PÈ'L;õðß= çY8H®t*ÌXò^ùaPîá&.»pQZʾ?+PÐit¬»ùY6yÊÎméìÏ\:÷éñXØIúë¸oþ«GH®äjVò¶@,i#6£HÃÎåùy
H Yù2/.ob÷×m¾+çÒ|ÒB±¼
îØnËr (ôbgà¾
ù¨Oãzérò§¨NrêÝ@öóklùÍÑ'¿Ù÷[u((ê4|¼æÅ@°ÅBz«%dÍËâ6
Òª´´w9ñ@¾RíUa¾/°üÊFé)âÉÊ$_Ïj½®EµKØIº5dú(¿fL c%ËUÔ×d ±Ãñ\ é§CáM}phÕ$×ë½vßxÑ"GÐâyqþ^ÒTÅ91®Î²Xørdn0UÖÓàvb 0§/YnÎL}µç×=}ËÛzá?³ð7|Ë)pØói-íL9cv ÓõÛ¦@L\w&søñ c7Ï 0k\ª¿>±~ñëò£©«}Þ{}ÜíÚäy[¿Þ±¨âBàd4Ì¥På&l¤øÕ賓ؽ:Ê\0^upqpxX}mWRbfêË4|[IåÞ^ænË4ÑPü*ÞÀ* (çá?¾ä»fÓÌ.
é1Äw§.ÝóÔA\Vᾶýe»ãZx¾¡4òßcôj$ Àrè¶= fûÛ6ÝÚ[ª\ô#ÌPÑ^¥c(%^ÀêE´d0dÎXd¼0ð^=MCÞ¼eõ[˺\ÆY½4öÄEÐàm²eþÛH(F¨Ç;lb¥ÞPªÄà6Î$¦~Â};
8øÕ-ÅÃv÷á=Mõïr/ÅÊbQª>/ä½LÐÆî¤ìÇËÍdè¦WÕzL .ð¾X¡{ä\ó(=}Ï
Y0åé=}dSÉ
âk,*¾|ðÍ-6åé«r|=}"î]ÐÒÿãeæ8E¡ö½XµLüâ6qY;±l'\=}0ï\iϼ >pÓÓ[Íø~Lñw®K7»&6oÂÙ¢rÎÐó *@½TrÞpìì<Ãα·ôË®í_&´6K>
/9ÙSʹ»çÖ<-Ö$k´ûbÄd¤Örß»×â*¿ÁÈ:¿Y±|®LdÈE>NªiFÆdåÉä×ükÚ¨.,6ñoU8m/(uTÐÐB@ý«dÁ§0 ùÔ÷Ã|q´Å¹CWÞ×üäó\b~C@Ü_P¿RVw5ëûç}ªÚw?&;/«þ¯74NbYKWjõ|U±¡uú=}ëQ».otä ¹îÞÝþ áªeÿS@æ:m }½lÞuÆ6IäNÃñËæîë2ÁÎwt
<
-Eh0Êúoc~hôP=MtÜ{õþN¼À¶¬)êF1T$n>(GêßVã_ê\?(:('I@+CÉüµ=}êûêÝiíôG®ÊãWÔ;AhèG·«^?xܳKÚî= Í8+lisjúÖÖ8V'ûD«Òµÿ
³ä7cÙHPY$ÊT²ê$ѪÞN}ô#{ÄÏÏCÖÓ|é¬Ríi÷Pã[9çÞR¡gÿO3vØ3S¿Q /ÍL7åÁ¹- o¾ÞyI!= ê³£Ke=M÷×
yCrËQ³lc=M
?Sò:ËBlûRáþ~ËcSó0Gsy:oH3c.òþ<çTjç:D]ÞïpL¶ÕÈ**ºÎ~£#<W$wÑýÐ @;½éQUä×ïC-ãaâu<-*©ñ\2uÁʽüãóE*= z,ýÂ_LÂÉ-³,JGsËÎõí¨(FÜ»ü¤á_{.¢Ë\Az4ª@45èx@ <J.AÏæe¸¬5²äPn"î<fh2~I0Ûlä,;¯òÔòt.cOþ ÎD¯u øF-8Ûõ¾õ°¤-yÈ',Û-gdÀóôf¬ûâQ3»bU.hÀsaÀÁà$Ô/Êøn±È<m±Æ$FîÊäE®0¼n!aþËJbeÑb;ÉdE®-üny{±0iÑd»Ë÷¨.ànðw4¶ÔÀÛÔzÚHöˤ0ºËüâ[{þ(Rß=}3= ÈHBÔjwV~d}»óì,|,5[×òç=}!XJf
Xí[ON|PÎ rq§dbefvr'â{3{e
Î4.
F.ý9O0Ølb:±ÿ[£f2ÄÎ÷rq~£òc.i^ñLSgÈâó·bílÑnBÖ#DkN¼OÎ |:cÒkb6Ð4=
éÌÃkÎücÝ1ð2
ÐKÄðn|Ð,ÄËð¨eÔ+ Âf9BReMD[Ä1L¦«GÓôumÊ#ªË6è)G×tV }#ßÃUó¶Ø £¡®Ç±rS6ð¨0#2%ØzàÑZX˼»P\Z¡ª"=}@)#^Þc3iÿ\Ù?k²÷GYpGÜîÆֶijtæ^G±àI¦û=MÀ\¬¬%qXª´|Z/âÖ fq{SÞë'ÅÄܪa´+â¶÷+é[øPÙ«=MĬ= 2ô)S#4 SñáÌ«
AòdNãàíå9?TRJÑ£Ø$*9ãàoÅ;yôK ,Ïãùm¬957ê±å×ÂiV >Z"ôKEFÿWѾ®Ðnrí|®fOê©¥0+p'afÆÑFiØb±íq'jNU$?uZ¹r>+ûdq3²ùíðFäI^뿪®ä)»!:×Õà«zT¯Rzfnëáa.09M|½ >%ìÐ= µs2å?"5>rVÔ
Çô #î0 }q,ü1
,\jª³¡0HkGƾ7ï lÈiÒð'f̬qzͼAéè{Zù?Lμ0Ðcû¹jCkÕt(sü/¹V?9x¢ íw|»úÈ&Õ¸Q̪sËs£QqÌÉúïù¡!3ôÜ¥Ýi=MOHi¦
GxÄiIG(D9±ñ'ÓBSPµ>
p
<õº31E
Käg¨u'h/9äý'óh¹R7ÞM»þ8Þ9»~
âg0/9´j¹RVû5>Ólé4ÿ?$ÊjÜ/9
tüÝî¦âgW¹òGmùc/1bh;??É]HÉ}ZØ¢U.7\ÉÉSÀ¢z/mîaÕªèI0Ðjb6¼@pÐ.pàËÊ@D}ONçÐ/Oº÷rq8r±Oçû,wejºòó{ej©Übþ9|üÉÒìác|Å^ÿÐz1W4uÇrñ>\PÎ
CàdÀr±OÏl:|J£rñ5¼OÎ tÁÒ</3h¡%hÃ12¸C?J<ÊÜ4k±bÕä#ÓbÆbf;'çfÎ#OYjEPGëÐ/u÷= ªáÿß=M3¼N,TÃîøkBTU~Z,ðÃ0,c7ÛÑËÒÓ) )Ó,ëÔúÔuy?CÑQóAì?OôLOðrò|Òù¡GùU-饯üc(ØêÈÐ'úË÷x^üf3±n±»|"c{òp= y1m1Ò{dPòê"n}OsR|3Ó|ñÙݵõîÈJ óûçA¢|M@ÑK{éPDÏäosRʵz|º?Y¥ïíYÿÆkê*»ù_(ö
ùÓd"tDüËá;.3ÆÚ¾è½2~ÿÓ=M /ñ¢1"j/ÀÆë +pGÏ[ÊxÔ´DóDK3oS\Ö>/lɶQü= ì«Ó2×èÍÊÔ®ÍB¢QçqèÈ8Zb¼âÄW3*¨QñÇ ªu1îÞÉmÄs+w÷®fxÝÂÉÄ.*~¨ÔWTC3È·Uä³}ï´?÷¿0¯¼SàORëuôV1
RÃqÅ«óÖ Ôµ´
áÀß.}Mv@uì#]'Ì.ÇçùqÒï5À(9Çë8á#gn6Ⱥ¤è!w;1 NÅj Ëù±oP"H÷ÃëÐØdEë¿wM¨9µluW.7¦ÿhÓûXäü5 w=}>Ü*Qf¾ð9ÛÝ*ös÷ÄÃÃãuÂÄ#4rëâ-p%©~÷<EäAÄÅ)¦H:CAtÈ]Ò#¡Á1¤Mÿú{M;Äò%®å:x¬ü²à½'å1ügjéã¡âB>:ê¸)1Øå<BKãö£ã'Wj½óÊPì #lÛÆ16[<Z\g±ô¬\fÿ,ÞHÅ]£·-¶¢ãRj6Og·ÓH³EWc½Tv'+$ùÜ-= ÎcT¾ÛÜ}®¼Õ ú¬_ÅÞôyÃy]ÚÈ
©MmkB¤¿ÿ°é¾ËÇ&Ç1ËÂÁØÙÆg?teÔÒçá}ôw{_
áNIaY#ì×'}B}Ïi©BѧGcZ"