@openclaw/whatsapp 2026.9.6 → 2026.9.8
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.
- package/assets/icon.png +0 -0
- package/dist/.setup/{accounts-D_NGDjCx.mjs → accounts-CtRPAQCL.mjs} +3 -9
- package/dist/.setup/{action-runtime-DZZFamfl.mjs → action-runtime-DeVk5V7r.mjs} +2 -2
- package/dist/.setup/{approval-handler.runtime-C0hzmMSj.mjs → approval-handler.runtime-CjqMlPOX.mjs} +6 -26
- package/dist/.setup/{approval-reactions-BnXw-UZI.mjs → approval-reactions-DiOFvb1s.mjs} +8 -14
- package/dist/.setup/{auth-store-Dh8a3cba.mjs → auth-store-BBonwKks.mjs} +9 -33
- package/dist/.setup/{channel-Bg_fS2iF.mjs → channel-CJFE0kD_.mjs} +82 -154
- package/dist/.setup/{channel-react-action-1iBiEnq7.mjs → channel-react-action-2r_hjLZV.mjs} +4 -8
- package/dist/.setup/{channel.runtime-rurG-kbr.mjs → channel.runtime-C94goLw9.mjs} +4 -4
- package/dist/.setup/{channel.setup-C8P5q8uD.mjs → channel.setup-CfN1UfdY.mjs} +1 -1
- package/dist/.setup/{connection-controller-C60mU7j7.mjs → connection-controller-CHo1oRJA.mjs} +13 -63
- package/dist/.setup/{creds-files-Drg3usj1.mjs → creds-files-CDATZWWM.mjs} +5 -11
- package/dist/.setup/{directory-config-BHPoBklt.mjs → directory-config-DUiJ5d8I.mjs} +13 -14
- package/dist/.setup/doctor-iMwg0Vhr.mjs +222 -0
- package/dist/.setup/group-config-path-DZr3ucUO.mjs +40 -0
- package/dist/.setup/{group-session-key-D22hYMdE.mjs → group-session-key-2-mja4OF.mjs} +3 -9
- package/dist/.setup/{login-2dmd1TfE.mjs → login-BFlvSh9h.mjs} +9 -11
- package/dist/.setup/{login-qr-CgKtO_ef.mjs → login-qr-Ayb8i25J.mjs} +29 -77
- package/dist/.setup/{monitor-By82ehLA.mjs → monitor-CGpV2VNN.mjs} +376 -504
- package/dist/.setup/{question-reactions-D3Zq9Gbn.mjs → question-reactions-CPyyi5AY.mjs} +2 -2
- package/dist/.setup/rolldown-runtime-BBjsoOtd.mjs +27 -0
- package/dist/.setup/{send-C6jDmcL9.mjs → send-BGdvf5cC.mjs} +31 -80
- package/dist/.setup/{send-api-B4DOt2RJ.mjs → send-api-H4AkQJjT.mjs} +45 -109
- package/dist/.setup/{session-errors-JuazczrA.mjs → session-errors-B8UcAnZN.mjs} +1 -4
- package/dist/.setup/{session.runtime-DcJuO42v.mjs → session.runtime-st1konFI.mjs} +1 -1
- package/dist/.setup/{setup-finalize-pGqWOiFX.mjs → setup-finalize-DmPX4EaW.mjs} +32 -70
- package/dist/.setup/setup-plugin-api-vJlxKzca.mjs +3 -0
- package/dist/.setup/{setup-surface-B9CYwDPZ.mjs → setup-surface-43fj197P.mjs} +3 -3
- package/dist/.setup/{shared-DVgQ8kRG.mjs → shared-DgOG5Iqr.mjs} +26 -37
- package/dist/.setup/{socket-close-CCVSFufF.mjs → socket-close-CT__V2fz.mjs} +80 -92
- package/dist/.setup/{targets-runtime-RBjx3pg_.mjs → targets-runtime-DmiqXIXO.mjs} +2 -7
- package/dist/action-runtime-api.js +1 -1
- package/dist/action-runtime.runtime.js +1 -1
- package/dist/agent-tools-api.js +5 -12
- package/dist/api.js +10 -10
- package/dist/auth-presence.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/contract-api.js +2 -2
- package/dist/directory-contract-api.js +1 -1
- package/dist/doctor-contract-api.js +9 -10
- package/dist/light-runtime-api.js +2 -2
- package/dist/login-qr-runtime.js +1 -1
- package/dist/runtime-api.js +9 -9
- package/dist/setup-entry.js +1 -1
- package/dist/setup-plugin-api.js +1 -1
- package/node_modules/audio-decode/LICENSE +9 -10
- package/node_modules/audio-decode/README.md +16 -0
- package/node_modules/audio-decode/audio-decode.d.ts +2 -14
- package/node_modules/audio-decode/audio-decode.js +4 -92
- package/node_modules/audio-decode/meta.js +1 -0
- package/node_modules/audio-decode/node_modules/{audio-buffer → @audio/decode}/LICENSE +1 -1
- package/node_modules/audio-decode/node_modules/@audio/decode/audio-decode.d.ts +52 -0
- package/node_modules/audio-decode/node_modules/@audio/decode/audio-decode.js +242 -0
- package/node_modules/audio-decode/node_modules/@audio/decode/meta.js +14 -0
- package/node_modules/audio-decode/node_modules/@audio/decode/package.json +114 -0
- package/node_modules/audio-decode/node_modules/@audio/decode/readme.md +191 -0
- package/node_modules/audio-decode/node_modules/@audio/decode/stream.d.ts +12 -0
- package/node_modules/audio-decode/node_modules/@audio/decode/stream.js +1 -0
- package/node_modules/audio-decode/node_modules/@audio/decode/test.html +52 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-aac/LICENSE +9 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-aac/README.md +80 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-aac/alac.js +326 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-aac/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-aac/audio.js +10 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-aac/decode-aac.d.ts +24 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-aac/decode-aac.js +452 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-aac/meta.js +81 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-aac/package.json +63 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-aac/src/aac.wasm.js +0 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-ac3/LICENSE +12 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-ac3/LICENSE.liba52 +340 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-ac3/README.md +41 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-ac3/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-ac3/audio.js +9 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-ac3/decode-ac3.d.ts +20 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-ac3/decode-ac3.js +131 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-ac3/package.json +64 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-ac3/src/ac3.wasm.js +0 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-aiff/LICENSE +21 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-aiff/README.md +46 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-aiff/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-aiff/audio.js +10 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-aiff/decode-aiff.d.ts +16 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-aiff/decode-aiff.js +583 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-aiff/package.json +52 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-amr/LICENSE +191 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-amr/README.md +65 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-amr/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-amr/audio.js +10 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-amr/decode-amr.d.ts +16 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-amr/decode-amr.js +150 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-amr/package.json +58 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-amr/src/amr.wasm.js +0 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-avi/LICENSE +21 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-avi/README.md +53 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-avi/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-avi/audio.js +9 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-avi/decode-avi.d.ts +21 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-avi/decode-avi.js +241 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-avi/package.json +66 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-caf/LICENSE +21 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-caf/README.md +48 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-caf/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-caf/audio.js +10 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-caf/decode-caf.d.ts +16 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-caf/decode-caf.js +238 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-caf/package.json +53 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-dsd/LICENSE +21 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-dsd/README.md +73 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-dsd/audio.d.ts +21 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-dsd/audio.js +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-dsd/decode-dsd.d.ts +29 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-dsd/decode-dsd.js +423 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-dsd/meta.js +40 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-dsd/package.json +64 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-dts/LICENSE +12 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-dts/LICENSE.libdca +339 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-dts/README.md +41 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-dts/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-dts/audio.js +9 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-dts/decode-dts.d.ts +20 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-dts/decode-dts.js +139 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-dts/package.json +64 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-dts/src/dts.wasm.js +0 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-eac3/LICENSE +12 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-eac3/LICENSE.ffmpeg +502 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-eac3/README.md +45 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-eac3/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-eac3/audio.js +9 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-eac3/decode-eac3.d.ts +20 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-eac3/decode-eac3.js +124 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-eac3/package.json +68 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-eac3/src/eac3.wasm.js +0 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-flac/LICENSE +25 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-flac/README.md +23 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-flac/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-flac/audio.js +10 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-flac/decode-flac.d.ts +18 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-flac/decode-flac.js +3172 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-flac/meta.js +115 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-flac/package.json +60 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mod/LICENSE +23 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mod/LICENSE.libopenmpt +25 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mod/README.md +86 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mod/audio.d.ts +20 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mod/audio.js +12 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mod/decode-mod.d.ts +58 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mod/decode-mod.js +148 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mod/package.json +68 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mod/src/mod.wasm.js +0 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mp3/LICENSE +25 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mp3/README.md +20 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mp3/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mp3/audio.js +10 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mp3/decode-mp3.d.ts +16 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mp3/decode-mp3.js +793 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mp3/meta.js +143 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mp3/package.json +60 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mp4/LICENSE +21 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mp4/README.md +58 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mp4/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mp4/audio.js +9 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mp4/decode-mp4.d.ts +21 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mp4/decode-mp4.js +455 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mp4/package.json +74 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mpc/LICENSE +31 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mpc/LICENSE.libmpcdec +31 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mpc/README.md +60 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mpc/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mpc/audio.js +9 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mpc/decode-mpc.d.ts +20 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mpc/decode-mpc.js +158 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mpc/package.json +64 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-mpc/src/mpc.wasm.js +0 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-opus/LICENSE +25 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-opus/LICENSE.libopus +44 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-opus/README.md +32 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-opus/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-opus/audio.js +10 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-opus/core.d.ts +33 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-opus/core.js +147 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-opus/decode-opus.d.ts +18 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-opus/decode-opus.js +1 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-opus/meta.js +103 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-opus/package.json +68 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-opus/src/decode-opus.js +2 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-opus/src/opus.wasm.js +0 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-qoa/LICENSE +25 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-qoa/README.md +19 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-qoa/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-qoa/audio.js +10 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-qoa/decode-qoa.d.ts +16 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-qoa/decode-qoa.js +275 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-qoa/package.json +56 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-tta/LICENSE +21 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-tta/LICENSE.ttadec +39 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-tta/README.md +58 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-tta/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-tta/audio.js +9 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-tta/decode-tta.d.ts +17 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-tta/decode-tta.js +302 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-tta/package.json +58 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-vorbis/LICENSE +25 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-vorbis/README.md +33 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-vorbis/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-vorbis/audio.js +10 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-vorbis/decode-vorbis.d.ts +18 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-vorbis/decode-vorbis.js +2984 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-vorbis/meta.js +102 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-vorbis/package.json +60 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wav/LICENSE +21 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wav/README.md +23 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wav/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wav/audio.js +10 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wav/decode-wav.d.ts +8 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wav/decode-wav.js +256 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wav/meta.js +114 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wav/package.json +52 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/LICENSE +29 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/LICENSE.wavpack +25 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/README.md +41 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/audio.js +9 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/decode-wavpack.d.ts +18 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/decode-wavpack.js +140 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/package.json +62 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/src/wavpack.wasm.js +0 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-webm/LICENSE +21 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-webm/LICENSE.libopus +44 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-webm/README.md +59 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-webm/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-webm/audio.js +10 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-webm/decode-webm.d.ts +18 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-webm/decode-webm.js +141 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-webm/package.json +76 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-webm/src/opus.wasm.js +0 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wma/LICENSE +12 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wma/README.md +74 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wma/audio.d.ts +15 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wma/audio.js +10 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wma/decode-wma.d.ts +33 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wma/decode-wma.js +516 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wma/package.json +57 -0
- package/node_modules/audio-decode/node_modules/@audio/decode-wma/src/wma.wasm.js +0 -0
- package/node_modules/audio-decode/package.json +37 -39
- package/node_modules/audio-decode/stream.d.ts +2 -0
- package/node_modules/audio-decode/stream.js +2 -0
- package/node_modules/baileys/lib/Utils/messages-media.js +1 -1
- package/node_modules/baileys/node_modules/file-type/package.json +1 -1
- package/node_modules/baileys/node_modules/file-type/readme.md +2 -0
- package/node_modules/baileys/node_modules/file-type/source/detectors/zip.js +9 -4
- package/node_modules/baileys/package.json +1 -1
- package/node_modules/typebox/build/compile/code.mjs +1 -2
- package/node_modules/typebox/build/compile/validator.mjs +5 -1
- package/node_modules/typebox/build/format/iri.mjs +16 -9
- package/node_modules/typebox/build/guard/emit.mjs +2 -2
- package/node_modules/typebox/build/guard/guard.d.mts +7 -5
- package/node_modules/typebox/build/guard/guard.mjs +14 -9
- package/node_modules/typebox/build/guard/index.mjs +6 -0
- package/node_modules/typebox/build/guard/unicode/unicode.d.mts +6 -0
- package/node_modules/typebox/build/guard/unicode/unicode.mjs +35 -0
- package/node_modules/typebox/build/guard/{string.mjs → unicode/unicode_segment.mjs} +16 -19
- package/node_modules/typebox/build/schema/build.mjs +2 -3
- package/node_modules/typebox/build/schema/engine/_pathing.d.mts +1 -0
- package/node_modules/typebox/build/schema/engine/_pathing.mjs +11 -0
- package/node_modules/typebox/build/schema/engine/_refine.mjs +13 -5
- package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/dependencies.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/dependentSchemas.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/dynamicRef.d.mts +1 -1
- package/node_modules/typebox/build/schema/engine/dynamicRef.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/format.mjs +9 -2
- package/node_modules/typebox/build/schema/engine/patternProperties.mjs +3 -2
- package/node_modules/typebox/build/schema/engine/properties.mjs +3 -2
- package/node_modules/typebox/build/schema/engine/propertyNames.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/recursiveRef.d.mts +1 -1
- package/node_modules/typebox/build/schema/engine/recursiveRef.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/ref.d.mts +1 -1
- package/node_modules/typebox/build/schema/engine/ref.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/schema.mjs +24 -24
- package/node_modules/typebox/build/schema/parse.mjs +3 -0
- package/node_modules/typebox/build/schema/pointer/pointer.d.mts +1 -6
- package/node_modules/typebox/build/schema/pointer/pointer.mjs +47 -64
- package/node_modules/typebox/build/system/settings/internal.d.mts +2 -0
- package/node_modules/typebox/build/system/settings/internal.mjs +20 -0
- package/node_modules/typebox/build/system/settings/settings.d.mts +11 -0
- package/node_modules/typebox/build/system/settings/settings.mjs +14 -0
- package/node_modules/typebox/build/type/extends/inference.d.mts +1 -1
- package/node_modules/typebox/build/type/extends/inference.mjs +15 -2
- package/node_modules/typebox/build/type/extends/tuple.d.mts +2 -1
- package/node_modules/typebox/build/type/extends/tuple.mjs +21 -1
- package/node_modules/typebox/build/value/parse/parse.mjs +10 -4
- package/node_modules/typebox/package.json +1 -1
- package/node_modules/typebox/readme.md +3 -1
- package/package.json +6 -6
- package/dist/.setup/doctor-BPb-SjdE.mjs +0 -65
- package/dist/.setup/group-config-path-BGyzT9Lg.mjs +0 -54
- package/dist/.setup/normalize-DdsROMMa.mjs +0 -2
- package/dist/.setup/rolldown-runtime-D7D4PA-g.mjs +0 -13
- package/dist/.setup/runtime-group-policy-DeSRFXEV.mjs +0 -11
- package/dist/.setup/setup-plugin-api-2wUapweU.mjs +0 -3
- package/dist/.setup/text-runtime-CHl0iPYe.mjs +0 -4
- package/node_modules/audio-decode/.eslintrc.json +0 -43
- package/node_modules/audio-decode/.github/workflows/test.js.yml +0 -31
- package/node_modules/audio-decode/.travis.yml +0 -13
- package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/README.md +0 -293
- package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/dist/opus-ml-decoder.min.js +0 -11646
- package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/dist/opus-ml-decoder.min.js.map +0 -1
- package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/index.js +0 -8
- package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/package.json +0 -58
- package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/src/EmscriptenWasm.js +0 -0
- package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/src/OpusMLDecoder.js +0 -253
- package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/src/OpusMLDecoderWebWorker.js +0 -17
- package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/types.d.ts +0 -77
- package/node_modules/audio-decode/node_modules/audio-buffer/.eslintrc.json +0 -44
- package/node_modules/audio-decode/node_modules/audio-buffer/.github/workflows/node.js.yml +0 -31
- package/node_modules/audio-decode/node_modules/audio-buffer/.travis.yml +0 -7
- package/node_modules/audio-decode/node_modules/audio-buffer/index.js +0 -76
- package/node_modules/audio-decode/node_modules/audio-buffer/package.json +0 -37
- package/node_modules/audio-decode/node_modules/audio-buffer/readme.md +0 -56
- package/node_modules/audio-decode/node_modules/node-wav/README.md +0 -35
- package/node_modules/audio-decode/node_modules/node-wav/file.wav +0 -0
- package/node_modules/audio-decode/node_modules/node-wav/index.js +0 -291
- package/node_modules/audio-decode/node_modules/node-wav/package.json +0 -29
- package/node_modules/audio-decode/node_modules/node-wav/tests/file1.wav +0 -0
- package/node_modules/audio-decode/node_modules/node-wav/tests/test.js +0 -66
- package/node_modules/audio-decode/node_modules/node-wav/x.js +0 -12
- package/node_modules/audio-decode/node_modules/node-wav/x.json +0 -86702
- package/node_modules/audio-decode/node_modules/node-wav/x.js~ +0 -13
- package/node_modules/audio-decode/node_modules/ogg-opus-decoder/README.md +0 -320
- package/node_modules/audio-decode/node_modules/ogg-opus-decoder/dist/ogg-opus-decoder.min.js +0 -232
- package/node_modules/audio-decode/node_modules/ogg-opus-decoder/dist/ogg-opus-decoder.min.js.map +0 -1
- package/node_modules/audio-decode/node_modules/ogg-opus-decoder/dist/ogg-opus-decoder.opus-ml.min.js +0 -0
- package/node_modules/audio-decode/node_modules/ogg-opus-decoder/dist/ogg-opus-decoder.opus-ml.min.js.map +0 -1
- package/node_modules/audio-decode/node_modules/ogg-opus-decoder/index.js +0 -8
- package/node_modules/audio-decode/node_modules/ogg-opus-decoder/package.json +0 -74
- package/node_modules/audio-decode/node_modules/ogg-opus-decoder/src/OggOpusDecoder.js +0 -226
- package/node_modules/audio-decode/node_modules/ogg-opus-decoder/src/OggOpusDecoderWebWorker.js +0 -17
- package/node_modules/audio-decode/node_modules/ogg-opus-decoder/types.d.ts +0 -37
- package/node_modules/audio-decode/node_modules/opus-decoder/README.md +0 -265
- package/node_modules/audio-decode/node_modules/opus-decoder/dist/opus-decoder.min.js +0 -232
- package/node_modules/audio-decode/node_modules/opus-decoder/dist/opus-decoder.min.js.map +0 -1
- package/node_modules/audio-decode/node_modules/opus-decoder/index.js +0 -8
- package/node_modules/audio-decode/node_modules/opus-decoder/package.json +0 -56
- package/node_modules/audio-decode/node_modules/opus-decoder/src/EmscriptenWasm.js +0 -0
- package/node_modules/audio-decode/node_modules/opus-decoder/src/OpusDecoder.js +0 -239
- package/node_modules/audio-decode/node_modules/opus-decoder/src/OpusDecoderWebWorker.js +0 -17
- package/node_modules/audio-decode/node_modules/opus-decoder/types.d.ts +0 -74
- package/node_modules/audio-decode/readme.md +0 -49
- package/node_modules/audio-decode/tea.yaml +0 -6
- package/node_modules/audio-decode/test-case.js +0 -11
- package/node_modules/audio-decode/test.html +0 -15
- package/node_modules/audio-decode/test.js +0 -107
- /package/node_modules/typebox/build/guard/{string.d.mts → unicode/unicode_segment.d.mts} +0 -0
|
@@ -0,0 +1,2984 @@
|
|
|
1
|
+
// ../../node_modules/simple-yenc/dist/esm.js
|
|
2
|
+
var t = (t2, n = 4294967295, e2 = 79764919) => {
|
|
3
|
+
const r = new Int32Array(256);
|
|
4
|
+
let o, s, i, c = n;
|
|
5
|
+
for (o = 0; o < 256; o++) {
|
|
6
|
+
for (i = o << 24, s = 8; s > 0; --s) i = 2147483648 & i ? i << 1 ^ e2 : i << 1;
|
|
7
|
+
r[o] = i;
|
|
8
|
+
}
|
|
9
|
+
for (o = 0; o < t2.length; o++) c = c << 8 ^ r[255 & (c >> 24 ^ t2[o])];
|
|
10
|
+
return c;
|
|
11
|
+
};
|
|
12
|
+
var e = (n, e2 = t) => {
|
|
13
|
+
const r = (t2) => new Uint8Array(t2.length / 2).map(((n2, e3) => parseInt(t2.substring(2 * e3, 2 * (e3 + 1)), 16))), o = (t2) => r(t2)[0], s = /* @__PURE__ */ new Map();
|
|
14
|
+
[, 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(((t2, n2) => s.set(t2, n2)));
|
|
15
|
+
const i = new Uint8Array(n.length);
|
|
16
|
+
let c, a, l, f = false, g = 0, h = 42, p = n.length > 13 && "dynEncode" === n.substring(0, 9), u = 0;
|
|
17
|
+
p && (u = 11, a = o(n.substring(9, u)), a <= 1 && (u += 2, h = o(n.substring(11, u))), 1 === a && (u += 8, l = ((t2) => new DataView(r(t2).buffer).getInt32(0, true))(n.substring(13, u))));
|
|
18
|
+
const d = 256 - h;
|
|
19
|
+
for (let t2 = u; t2 < n.length; t2++) if (c = n.charCodeAt(t2), 61 !== c || f) {
|
|
20
|
+
if (92 === c && t2 < n.length - 5 && p) {
|
|
21
|
+
const e3 = n.charCodeAt(t2 + 1);
|
|
22
|
+
117 !== e3 && 85 !== e3 || (c = parseInt(n.substring(t2 + 2, t2 + 6), 16), t2 += 5);
|
|
23
|
+
}
|
|
24
|
+
if (c > 255) {
|
|
25
|
+
const t3 = s.get(c);
|
|
26
|
+
t3 && (c = t3 + 127);
|
|
27
|
+
}
|
|
28
|
+
f && (f = false, c -= 64), i[g++] = c < h && c > 0 ? c + d : c - h;
|
|
29
|
+
} else f = true;
|
|
30
|
+
const m = i.subarray(0, g);
|
|
31
|
+
if (p && 1 === a) {
|
|
32
|
+
const t2 = e2(m);
|
|
33
|
+
if (t2 !== l) {
|
|
34
|
+
const n2 = "Decode failed crc32 validation";
|
|
35
|
+
throw console.error("`simple-yenc`\n", n2 + "\n", "Expected: " + l + "; Got: " + t2 + "\n", "Visit https://github.com/eshaz/simple-yenc for more information"), Error(n2);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return m;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// ../../node_modules/@wasm-audio-decoders/common/src/WASMAudioDecoderCommon.js
|
|
42
|
+
function WASMAudioDecoderCommon() {
|
|
43
|
+
const uint8Array2 = Uint8Array;
|
|
44
|
+
const float32Array = Float32Array;
|
|
45
|
+
if (!WASMAudioDecoderCommon.modules) {
|
|
46
|
+
Object.defineProperties(WASMAudioDecoderCommon, {
|
|
47
|
+
modules: {
|
|
48
|
+
value: /* @__PURE__ */ new WeakMap()
|
|
49
|
+
},
|
|
50
|
+
setModule: {
|
|
51
|
+
value(Ref, module) {
|
|
52
|
+
WASMAudioDecoderCommon.modules.set(Ref, Promise.resolve(module));
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
getModule: {
|
|
56
|
+
value(Ref, wasmString) {
|
|
57
|
+
let module = WASMAudioDecoderCommon.modules.get(Ref);
|
|
58
|
+
if (!module) {
|
|
59
|
+
if (!wasmString) {
|
|
60
|
+
wasmString = Ref.wasm;
|
|
61
|
+
module = WASMAudioDecoderCommon.inflateDynEncodeString(
|
|
62
|
+
wasmString
|
|
63
|
+
).then((data3) => WebAssembly.compile(data3));
|
|
64
|
+
} else {
|
|
65
|
+
module = WebAssembly.compile(e(wasmString));
|
|
66
|
+
}
|
|
67
|
+
WASMAudioDecoderCommon.modules.set(Ref, module);
|
|
68
|
+
}
|
|
69
|
+
return module;
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
concatFloat32: {
|
|
73
|
+
value(buffers, length2) {
|
|
74
|
+
let ret = new float32Array(length2), i = 0, offset = 0;
|
|
75
|
+
while (i < buffers.length) {
|
|
76
|
+
ret.set(buffers[i], offset);
|
|
77
|
+
offset += buffers[i++].length;
|
|
78
|
+
}
|
|
79
|
+
return ret;
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
getDecodedAudio: {
|
|
83
|
+
value: (errors, channelData, samplesDecoded, sampleRate2, bitDepth2) => ({
|
|
84
|
+
errors,
|
|
85
|
+
channelData,
|
|
86
|
+
samplesDecoded,
|
|
87
|
+
sampleRate: sampleRate2,
|
|
88
|
+
bitDepth: bitDepth2
|
|
89
|
+
})
|
|
90
|
+
},
|
|
91
|
+
getDecodedAudioMultiChannel: {
|
|
92
|
+
value(errors, input, channelsDecoded, samplesDecoded, sampleRate2, bitDepth2) {
|
|
93
|
+
let channelData = [], i, j;
|
|
94
|
+
for (i = 0; i < channelsDecoded; i++) {
|
|
95
|
+
const channel2 = [];
|
|
96
|
+
for (j = 0; j < input.length; ) channel2.push(input[j++][i] || []);
|
|
97
|
+
channelData.push(
|
|
98
|
+
WASMAudioDecoderCommon.concatFloat32(channel2, samplesDecoded)
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
return WASMAudioDecoderCommon.getDecodedAudio(
|
|
102
|
+
errors,
|
|
103
|
+
channelData,
|
|
104
|
+
samplesDecoded,
|
|
105
|
+
sampleRate2,
|
|
106
|
+
bitDepth2
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
/*
|
|
111
|
+
******************
|
|
112
|
+
* Compression Code
|
|
113
|
+
******************
|
|
114
|
+
*/
|
|
115
|
+
inflateDynEncodeString: {
|
|
116
|
+
value(source) {
|
|
117
|
+
source = e(source);
|
|
118
|
+
return new Promise((resolve) => {
|
|
119
|
+
const puffString = String.raw`dynEncode012804c7886d()((()>+*§§)§,§§§§)§+§§§)§+.-()(*)-+)(.7*§)i¸¸,3§(i¸¸,3/G+.¡*(,(,3+)2å:-),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)^*<H,H(P*4U((I-H(H*i0J,^*DH+H-H*I+H,I*4)33H(H*H)^*DH(H+H)^*@H+i§H)i§3æ*).§K(iHI/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)J.H.W)(i)c)(H,i)I,H-i*I-4)33i(I.*hH(V)(H+n5(H(i*I-i(I,i)I.+hH,i*J+iHn,hi(I-i*I,+hH,H/H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)J(H(V)(J(i)c)(H)H(i)H,c)(3H*i*I*H,i)I,4(3(-H(H,W)(H-I-H,i*I,4)3(3(3H,H-I1H+I,H.i)H1V)(J.i(v5(33H.-H(H,i(c)(H,i*I,4)333)-§i*I*+§H*iHn,hi73H,H(i)8(H+J+H)P*(H*V)(J-r,§H)P*,H.i)H+H,i)V)(-H*i*I*H+i)I+H-H.I.H,H-i)I,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7H,c)(i)H+i´8W)(H,I,H+i*I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,H-b((3H(P*0i)I.4)3H-i¨*n5*H-iÅ*s,hi73H-i)J+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)J+i¸7V)(H(H+iø7V)(8(J/H(P*0J+s,hi73H+H,H.J,I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+H.H+H/U((b((H(H(P*0i)J+^*0H,i)I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)c)(H,i*I,H+i)I+4)33i)I-3H-3!2)0§K(i2J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,J(H,P*8J/s50H,H.i+J0^*<i¦I*H.H,P*4J1J.U(*H.U((J2i')o5/H.U()I.H,H(^*<H0H1U((H.i0J.i§i0i')o5/H/H.H2J*H(J.q50H,P*0J/H*I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0H(H1U((b((H/i)I/H(i)I(H*i)I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-H(i0c)(H(i*I(4)33iè1i1H,i-iÈ*8)Bi(I(+hH(ido,hH,i-H(i-c)(H(i*I(4)33iÈ6iè6H,i-iF8)BiØ1i)b((41-H,i-H(i/c)(H(i*I(4)3(3(-H,i-H(i1c)(H(i*I(4)3(3(-H,i-H(i0c)(H(i*I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)^*TH,H,iø-^*PH,H,iX^*LH,H,i(^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iEr5)H(i©*I1H-i)I0i(i;H.i,J(i(H(i(rCJ(J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-H-V)(i)H,i+8(c)(H/i)I/H-i*I-H*i)I*4)-H(i)i¨1I/+hH(H*o,hH,i-H/V)(i)i(c)(H/i*I/H(i)I(4)33i¤I*H,iø-H,i¸)H,i-i;8)5+H0H1I2i(I-+hH-H2p,hH,H,iP8*J*i(p5-H*i7u,hH,i-H-i)H*c)(H-i)I-4*3i(I/i+I.i+I(*h*h*hH*i86*(*)3H-m,hi£I*403H-i)H,W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.J(H-J.p,hi¢I*4.3H,i-H-i)I*+hH(,hH*H/c)(H*i*I*H(i)I(4)-H.I-4+3(3(33H,W)1m,hiI*4,3H,iø-H,i¸)H,i-H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-o5,3H,i(H,iXH,i-H1i)H08)J(,hi I*H(i(p5,H0H,V)H,V)o5,3H,H,iPH,iH8+I*4+3(3(3H,i$6i¬78+I*3H*H3m5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(((«(Ë(ë((*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7*S7US0U `;
|
|
120
|
+
WASMAudioDecoderCommon.getModule(WASMAudioDecoderCommon, puffString).then((wasm) => WebAssembly.instantiate(wasm, {})).then(({ exports }) => {
|
|
121
|
+
const instanceExports = new Map(Object.entries(exports));
|
|
122
|
+
const puff = instanceExports.get("puff");
|
|
123
|
+
const memory = instanceExports.get("memory")["buffer"];
|
|
124
|
+
const dataArray = new uint8Array2(memory);
|
|
125
|
+
const heapView = new DataView(memory);
|
|
126
|
+
let heapPos = instanceExports.get("__heap_base");
|
|
127
|
+
const sourceLength = source.length;
|
|
128
|
+
const sourceLengthPtr = heapPos;
|
|
129
|
+
heapPos += 4;
|
|
130
|
+
heapView.setInt32(sourceLengthPtr, sourceLength, true);
|
|
131
|
+
const sourcePtr = heapPos;
|
|
132
|
+
heapPos += sourceLength;
|
|
133
|
+
dataArray.set(source, sourcePtr);
|
|
134
|
+
const destLengthPtr = heapPos;
|
|
135
|
+
heapPos += 4;
|
|
136
|
+
heapView.setInt32(
|
|
137
|
+
destLengthPtr,
|
|
138
|
+
dataArray.byteLength - heapPos,
|
|
139
|
+
true
|
|
140
|
+
);
|
|
141
|
+
puff(heapPos, destLengthPtr, sourcePtr, sourceLengthPtr);
|
|
142
|
+
resolve(
|
|
143
|
+
dataArray.slice(
|
|
144
|
+
heapPos,
|
|
145
|
+
heapPos + heapView.getInt32(destLengthPtr, true)
|
|
146
|
+
)
|
|
147
|
+
);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
Object.defineProperty(this, "wasm", {
|
|
155
|
+
enumerable: true,
|
|
156
|
+
get: () => this._wasm
|
|
157
|
+
});
|
|
158
|
+
this.getOutputChannels = (outputData, channelsDecoded, samplesDecoded) => {
|
|
159
|
+
let output = [], i = 0;
|
|
160
|
+
while (i < channelsDecoded)
|
|
161
|
+
output.push(
|
|
162
|
+
outputData.slice(
|
|
163
|
+
i * samplesDecoded,
|
|
164
|
+
i++ * samplesDecoded + samplesDecoded
|
|
165
|
+
)
|
|
166
|
+
);
|
|
167
|
+
return output;
|
|
168
|
+
};
|
|
169
|
+
this.allocateTypedArray = (len, TypedArray, setPointer = true) => {
|
|
170
|
+
const ptr = this._wasm.malloc(TypedArray.BYTES_PER_ELEMENT * len);
|
|
171
|
+
if (setPointer) this._pointers.add(ptr);
|
|
172
|
+
return {
|
|
173
|
+
ptr,
|
|
174
|
+
len,
|
|
175
|
+
buf: new TypedArray(this._wasm.HEAP, ptr, len)
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
this.free = () => {
|
|
179
|
+
this._pointers.forEach((ptr) => {
|
|
180
|
+
this._wasm.free(ptr);
|
|
181
|
+
});
|
|
182
|
+
this._pointers.clear();
|
|
183
|
+
};
|
|
184
|
+
this.codeToString = (ptr) => {
|
|
185
|
+
const characters = [], heap = new Uint8Array(this._wasm.HEAP);
|
|
186
|
+
for (let character = heap[ptr]; character !== 0; character = heap[++ptr])
|
|
187
|
+
characters.push(character);
|
|
188
|
+
return String.fromCharCode.apply(null, characters);
|
|
189
|
+
};
|
|
190
|
+
this.addError = (errors, message, frameLength2, frameNumber2, inputBytes, outputSamples) => {
|
|
191
|
+
errors.push({
|
|
192
|
+
message,
|
|
193
|
+
frameLength: frameLength2,
|
|
194
|
+
frameNumber: frameNumber2,
|
|
195
|
+
inputBytes,
|
|
196
|
+
outputSamples
|
|
197
|
+
});
|
|
198
|
+
};
|
|
199
|
+
this.instantiate = (_EmscriptenWASM, _module) => {
|
|
200
|
+
if (_module) WASMAudioDecoderCommon.setModule(_EmscriptenWASM, _module);
|
|
201
|
+
this._wasm = new _EmscriptenWASM(WASMAudioDecoderCommon).instantiate();
|
|
202
|
+
this._pointers = /* @__PURE__ */ new Set();
|
|
203
|
+
return this._wasm.ready.then(() => this);
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// ../../node_modules/codec-parser/src/constants.js
|
|
208
|
+
var symbol = Symbol;
|
|
209
|
+
var mappingJoin = ", ";
|
|
210
|
+
var channelMappings = (() => {
|
|
211
|
+
const front = "front";
|
|
212
|
+
const side = "side";
|
|
213
|
+
const rear = "rear";
|
|
214
|
+
const left = "left";
|
|
215
|
+
const center = "center";
|
|
216
|
+
const right = "right";
|
|
217
|
+
return ["", front + " ", side + " ", rear + " "].map(
|
|
218
|
+
(x) => [
|
|
219
|
+
[left, right],
|
|
220
|
+
[left, right, center],
|
|
221
|
+
[left, center, right],
|
|
222
|
+
[center, left, right],
|
|
223
|
+
[center]
|
|
224
|
+
].flatMap((y) => y.map((z) => x + z).join(mappingJoin))
|
|
225
|
+
);
|
|
226
|
+
})();
|
|
227
|
+
var lfe = "LFE";
|
|
228
|
+
var monophonic = "monophonic (mono)";
|
|
229
|
+
var stereo = "stereo";
|
|
230
|
+
var surround = "surround";
|
|
231
|
+
var getChannelMapping = (channelCount, ...mappings) => `${[
|
|
232
|
+
monophonic,
|
|
233
|
+
stereo,
|
|
234
|
+
`linear ${surround}`,
|
|
235
|
+
"quadraphonic",
|
|
236
|
+
`5.0 ${surround}`,
|
|
237
|
+
`5.1 ${surround}`,
|
|
238
|
+
`6.1 ${surround}`,
|
|
239
|
+
`7.1 ${surround}`
|
|
240
|
+
][channelCount - 1]} (${mappings.join(mappingJoin)})`;
|
|
241
|
+
var vorbisOpusChannelMapping = [
|
|
242
|
+
monophonic,
|
|
243
|
+
getChannelMapping(2, channelMappings[0][0]),
|
|
244
|
+
getChannelMapping(3, channelMappings[0][2]),
|
|
245
|
+
getChannelMapping(4, channelMappings[1][0], channelMappings[3][0]),
|
|
246
|
+
getChannelMapping(5, channelMappings[1][2], channelMappings[3][0]),
|
|
247
|
+
getChannelMapping(6, channelMappings[1][2], channelMappings[3][0], lfe),
|
|
248
|
+
getChannelMapping(7, channelMappings[1][2], channelMappings[2][0], channelMappings[3][4], lfe),
|
|
249
|
+
getChannelMapping(8, channelMappings[1][2], channelMappings[2][0], channelMappings[3][0], lfe)
|
|
250
|
+
];
|
|
251
|
+
var rate192000 = 192e3;
|
|
252
|
+
var rate176400 = 176400;
|
|
253
|
+
var rate96000 = 96e3;
|
|
254
|
+
var rate88200 = 88200;
|
|
255
|
+
var rate64000 = 64e3;
|
|
256
|
+
var rate48000 = 48e3;
|
|
257
|
+
var rate44100 = 44100;
|
|
258
|
+
var rate32000 = 32e3;
|
|
259
|
+
var rate24000 = 24e3;
|
|
260
|
+
var rate22050 = 22050;
|
|
261
|
+
var rate16000 = 16e3;
|
|
262
|
+
var rate12000 = 12e3;
|
|
263
|
+
var rate11025 = 11025;
|
|
264
|
+
var rate8000 = 8e3;
|
|
265
|
+
var rate7350 = 7350;
|
|
266
|
+
var absoluteGranulePosition = "absoluteGranulePosition";
|
|
267
|
+
var bandwidth = "bandwidth";
|
|
268
|
+
var bitDepth = "bitDepth";
|
|
269
|
+
var bitrate = "bitrate";
|
|
270
|
+
var bitrateMaximum = bitrate + "Maximum";
|
|
271
|
+
var bitrateMinimum = bitrate + "Minimum";
|
|
272
|
+
var bitrateNominal = bitrate + "Nominal";
|
|
273
|
+
var buffer = "buffer";
|
|
274
|
+
var bufferFullness = buffer + "Fullness";
|
|
275
|
+
var codec = "codec";
|
|
276
|
+
var codecFrames = codec + "Frames";
|
|
277
|
+
var coupledStreamCount = "coupledStreamCount";
|
|
278
|
+
var crc = "crc";
|
|
279
|
+
var crc16 = crc + "16";
|
|
280
|
+
var crc32 = crc + "32";
|
|
281
|
+
var data = "data";
|
|
282
|
+
var description = "description";
|
|
283
|
+
var duration = "duration";
|
|
284
|
+
var emphasis = "emphasis";
|
|
285
|
+
var hasOpusPadding = "hasOpusPadding";
|
|
286
|
+
var header = "header";
|
|
287
|
+
var isContinuedPacket = "isContinuedPacket";
|
|
288
|
+
var isCopyrighted = "isCopyrighted";
|
|
289
|
+
var isFirstPage = "isFirstPage";
|
|
290
|
+
var isHome = "isHome";
|
|
291
|
+
var isLastPage = "isLastPage";
|
|
292
|
+
var isOriginal = "isOriginal";
|
|
293
|
+
var isPrivate = "isPrivate";
|
|
294
|
+
var isVbr = "isVbr";
|
|
295
|
+
var layer = "layer";
|
|
296
|
+
var length = "length";
|
|
297
|
+
var mode = "mode";
|
|
298
|
+
var modeExtension = mode + "Extension";
|
|
299
|
+
var mpeg = "mpeg";
|
|
300
|
+
var mpegVersion = mpeg + "Version";
|
|
301
|
+
var numberAACFrames = "numberAACFrames";
|
|
302
|
+
var outputGain = "outputGain";
|
|
303
|
+
var preSkip = "preSkip";
|
|
304
|
+
var profile = "profile";
|
|
305
|
+
var profileBits = symbol();
|
|
306
|
+
var protection = "protection";
|
|
307
|
+
var rawData = "rawData";
|
|
308
|
+
var segments = "segments";
|
|
309
|
+
var subarray = "subarray";
|
|
310
|
+
var version = "version";
|
|
311
|
+
var vorbis = "vorbis";
|
|
312
|
+
var vorbisComments = vorbis + "Comments";
|
|
313
|
+
var vorbisSetup = vorbis + "Setup";
|
|
314
|
+
var block = "block";
|
|
315
|
+
var blockingStrategy = block + "ingStrategy";
|
|
316
|
+
var blockingStrategyBits = symbol();
|
|
317
|
+
var blockSize = block + "Size";
|
|
318
|
+
var blocksize0 = block + "size0";
|
|
319
|
+
var blocksize1 = block + "size1";
|
|
320
|
+
var blockSizeBits = symbol();
|
|
321
|
+
var channel = "channel";
|
|
322
|
+
var channelMappingFamily = channel + "MappingFamily";
|
|
323
|
+
var channelMappingTable = channel + "MappingTable";
|
|
324
|
+
var channelMode = channel + "Mode";
|
|
325
|
+
var channelModeBits = symbol();
|
|
326
|
+
var channels = channel + "s";
|
|
327
|
+
var copyright = "copyright";
|
|
328
|
+
var copyrightId = copyright + "Id";
|
|
329
|
+
var copyrightIdStart = copyright + "IdStart";
|
|
330
|
+
var frame = "frame";
|
|
331
|
+
var frameCount = frame + "Count";
|
|
332
|
+
var frameLength = frame + "Length";
|
|
333
|
+
var Number2 = "Number";
|
|
334
|
+
var frameNumber = frame + Number2;
|
|
335
|
+
var framePadding = frame + "Padding";
|
|
336
|
+
var frameSize = frame + "Size";
|
|
337
|
+
var Rate = "Rate";
|
|
338
|
+
var inputSampleRate = "inputSample" + Rate;
|
|
339
|
+
var page = "page";
|
|
340
|
+
var pageChecksum = page + "Checksum";
|
|
341
|
+
var pageSegmentBytes = symbol();
|
|
342
|
+
var pageSegmentTable = page + "SegmentTable";
|
|
343
|
+
var pageSequenceNumber = page + "Sequence" + Number2;
|
|
344
|
+
var sample = "sample";
|
|
345
|
+
var sampleNumber = sample + Number2;
|
|
346
|
+
var sampleRate = sample + Rate;
|
|
347
|
+
var sampleRateBits = symbol();
|
|
348
|
+
var samples = sample + "s";
|
|
349
|
+
var stream = "stream";
|
|
350
|
+
var streamCount = stream + "Count";
|
|
351
|
+
var streamInfo = stream + "Info";
|
|
352
|
+
var streamSerialNumber = stream + "Serial" + Number2;
|
|
353
|
+
var streamStructureVersion = stream + "StructureVersion";
|
|
354
|
+
var total = "total";
|
|
355
|
+
var totalBytesOut = total + "BytesOut";
|
|
356
|
+
var totalDuration = total + "Duration";
|
|
357
|
+
var totalSamples = total + "Samples";
|
|
358
|
+
var readRawData = symbol();
|
|
359
|
+
var incrementRawData = symbol();
|
|
360
|
+
var mapCodecFrameStats = symbol();
|
|
361
|
+
var mapFrameStats = symbol();
|
|
362
|
+
var logWarning = symbol();
|
|
363
|
+
var logError2 = symbol();
|
|
364
|
+
var syncFrame = symbol();
|
|
365
|
+
var fixedLengthFrameSync = symbol();
|
|
366
|
+
var getHeader = symbol();
|
|
367
|
+
var setHeader = symbol();
|
|
368
|
+
var getFrame = symbol();
|
|
369
|
+
var parseFrame = symbol();
|
|
370
|
+
var parseOggPage = symbol();
|
|
371
|
+
var checkCodecUpdate = symbol();
|
|
372
|
+
var reset = symbol();
|
|
373
|
+
var enable = symbol();
|
|
374
|
+
var getHeaderFromUint8Array = symbol();
|
|
375
|
+
var checkFrameFooterCrc16 = symbol();
|
|
376
|
+
var uint8Array = Uint8Array;
|
|
377
|
+
var dataView = DataView;
|
|
378
|
+
var reserved = "reserved";
|
|
379
|
+
var bad = "bad";
|
|
380
|
+
var free = "free";
|
|
381
|
+
var none = "none";
|
|
382
|
+
var sixteenBitCRC = "16bit CRC";
|
|
383
|
+
|
|
384
|
+
// ../../node_modules/codec-parser/src/utilities.js
|
|
385
|
+
var getCrcTable = (crcTable, crcInitialValueFunction, crcFunction) => {
|
|
386
|
+
for (let byte = 0; byte < crcTable[length]; byte++) {
|
|
387
|
+
let crc2 = crcInitialValueFunction(byte);
|
|
388
|
+
for (let bit = 8; bit > 0; bit--) crc2 = crcFunction(crc2);
|
|
389
|
+
crcTable[byte] = crc2;
|
|
390
|
+
}
|
|
391
|
+
return crcTable;
|
|
392
|
+
};
|
|
393
|
+
var crc8Table = getCrcTable(
|
|
394
|
+
new uint8Array(256),
|
|
395
|
+
(b) => b,
|
|
396
|
+
(crc2) => crc2 & 128 ? 7 ^ crc2 << 1 : crc2 << 1
|
|
397
|
+
);
|
|
398
|
+
var flacCrc16Table = [
|
|
399
|
+
getCrcTable(
|
|
400
|
+
new Uint16Array(256),
|
|
401
|
+
(b) => b << 8,
|
|
402
|
+
(crc2) => crc2 << 1 ^ (crc2 & 1 << 15 ? 32773 : 0)
|
|
403
|
+
)
|
|
404
|
+
];
|
|
405
|
+
var crc32Table = [
|
|
406
|
+
getCrcTable(
|
|
407
|
+
new Uint32Array(256),
|
|
408
|
+
(b) => b,
|
|
409
|
+
(crc2) => crc2 >>> 1 ^ (crc2 & 1) * 3988292384
|
|
410
|
+
)
|
|
411
|
+
];
|
|
412
|
+
for (let i = 0; i < 15; i++) {
|
|
413
|
+
flacCrc16Table.push(new Uint16Array(256));
|
|
414
|
+
crc32Table.push(new Uint32Array(256));
|
|
415
|
+
for (let j = 0; j <= 255; j++) {
|
|
416
|
+
flacCrc16Table[i + 1][j] = flacCrc16Table[0][flacCrc16Table[i][j] >>> 8] ^ flacCrc16Table[i][j] << 8;
|
|
417
|
+
crc32Table[i + 1][j] = crc32Table[i][j] >>> 8 ^ crc32Table[0][crc32Table[i][j] & 255];
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
var crc8 = (data3) => {
|
|
421
|
+
let crc2 = 0;
|
|
422
|
+
const dataLength = data3[length];
|
|
423
|
+
for (let i = 0; i !== dataLength; i++) crc2 = crc8Table[crc2 ^ data3[i]];
|
|
424
|
+
return crc2;
|
|
425
|
+
};
|
|
426
|
+
var flacCrc16 = (data3) => {
|
|
427
|
+
const dataLength = data3[length];
|
|
428
|
+
const crcChunkSize = dataLength - 16;
|
|
429
|
+
let crc2 = 0;
|
|
430
|
+
let i = 0;
|
|
431
|
+
while (i <= crcChunkSize) {
|
|
432
|
+
crc2 ^= data3[i++] << 8 | data3[i++];
|
|
433
|
+
crc2 = flacCrc16Table[15][crc2 >> 8] ^ flacCrc16Table[14][crc2 & 255] ^ flacCrc16Table[13][data3[i++]] ^ flacCrc16Table[12][data3[i++]] ^ flacCrc16Table[11][data3[i++]] ^ flacCrc16Table[10][data3[i++]] ^ flacCrc16Table[9][data3[i++]] ^ flacCrc16Table[8][data3[i++]] ^ flacCrc16Table[7][data3[i++]] ^ flacCrc16Table[6][data3[i++]] ^ flacCrc16Table[5][data3[i++]] ^ flacCrc16Table[4][data3[i++]] ^ flacCrc16Table[3][data3[i++]] ^ flacCrc16Table[2][data3[i++]] ^ flacCrc16Table[1][data3[i++]] ^ flacCrc16Table[0][data3[i++]];
|
|
434
|
+
}
|
|
435
|
+
while (i !== dataLength)
|
|
436
|
+
crc2 = (crc2 & 255) << 8 ^ flacCrc16Table[0][crc2 >> 8 ^ data3[i++]];
|
|
437
|
+
return crc2;
|
|
438
|
+
};
|
|
439
|
+
var crc32Function = (data3) => {
|
|
440
|
+
const dataLength = data3[length];
|
|
441
|
+
const crcChunkSize = dataLength - 16;
|
|
442
|
+
let crc2 = 0;
|
|
443
|
+
let i = 0;
|
|
444
|
+
while (i <= crcChunkSize)
|
|
445
|
+
crc2 = crc32Table[15][(data3[i++] ^ crc2) & 255] ^ crc32Table[14][(data3[i++] ^ crc2 >>> 8) & 255] ^ crc32Table[13][(data3[i++] ^ crc2 >>> 16) & 255] ^ crc32Table[12][data3[i++] ^ crc2 >>> 24] ^ crc32Table[11][data3[i++]] ^ crc32Table[10][data3[i++]] ^ crc32Table[9][data3[i++]] ^ crc32Table[8][data3[i++]] ^ crc32Table[7][data3[i++]] ^ crc32Table[6][data3[i++]] ^ crc32Table[5][data3[i++]] ^ crc32Table[4][data3[i++]] ^ crc32Table[3][data3[i++]] ^ crc32Table[2][data3[i++]] ^ crc32Table[1][data3[i++]] ^ crc32Table[0][data3[i++]];
|
|
446
|
+
while (i !== dataLength)
|
|
447
|
+
crc2 = crc32Table[0][(crc2 ^ data3[i++]) & 255] ^ crc2 >>> 8;
|
|
448
|
+
return crc2 ^ -1;
|
|
449
|
+
};
|
|
450
|
+
var concatBuffers = (...buffers) => {
|
|
451
|
+
const buffer2 = new uint8Array(
|
|
452
|
+
buffers.reduce((acc, buf) => acc + buf[length], 0)
|
|
453
|
+
);
|
|
454
|
+
buffers.reduce((offset, buf) => {
|
|
455
|
+
buffer2.set(buf, offset);
|
|
456
|
+
return offset + buf[length];
|
|
457
|
+
}, 0);
|
|
458
|
+
return buffer2;
|
|
459
|
+
};
|
|
460
|
+
var bytesToString = (bytes) => String.fromCharCode(...bytes);
|
|
461
|
+
var reverseTable = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15];
|
|
462
|
+
var reverse = (val) => reverseTable[val & 15] << 4 | reverseTable[val >> 4];
|
|
463
|
+
var BitReader = class {
|
|
464
|
+
constructor(data3) {
|
|
465
|
+
this._data = data3;
|
|
466
|
+
this._pos = data3[length] * 8;
|
|
467
|
+
}
|
|
468
|
+
set position(position) {
|
|
469
|
+
this._pos = position;
|
|
470
|
+
}
|
|
471
|
+
get position() {
|
|
472
|
+
return this._pos;
|
|
473
|
+
}
|
|
474
|
+
read(bits) {
|
|
475
|
+
const byte = Math.floor(this._pos / 8);
|
|
476
|
+
const bit = this._pos % 8;
|
|
477
|
+
this._pos -= bits;
|
|
478
|
+
const window = (reverse(this._data[byte - 1]) << 8) + reverse(this._data[byte]);
|
|
479
|
+
return window >> 7 - bit & 255;
|
|
480
|
+
}
|
|
481
|
+
};
|
|
482
|
+
var readInt64le = (view, offset) => {
|
|
483
|
+
try {
|
|
484
|
+
return view.getBigInt64(offset, true);
|
|
485
|
+
} catch {
|
|
486
|
+
const sign = view.getUint8(offset + 7) & 128 ? -1 : 1;
|
|
487
|
+
let firstPart = view.getUint32(offset, true);
|
|
488
|
+
let secondPart = view.getUint32(offset + 4, true);
|
|
489
|
+
if (sign === -1) {
|
|
490
|
+
firstPart = ~firstPart + 1;
|
|
491
|
+
secondPart = ~secondPart + 1;
|
|
492
|
+
}
|
|
493
|
+
if (secondPart > 1048575) {
|
|
494
|
+
console.warn("This platform does not support BigInt");
|
|
495
|
+
}
|
|
496
|
+
return sign * (firstPart + secondPart * 2 ** 32);
|
|
497
|
+
}
|
|
498
|
+
};
|
|
499
|
+
|
|
500
|
+
// ../../node_modules/codec-parser/src/codecs/HeaderCache.js
|
|
501
|
+
var HeaderCache = class {
|
|
502
|
+
constructor(onCodecHeader, onCodecUpdate) {
|
|
503
|
+
this._onCodecHeader = onCodecHeader;
|
|
504
|
+
this._onCodecUpdate = onCodecUpdate;
|
|
505
|
+
this[reset]();
|
|
506
|
+
}
|
|
507
|
+
[enable]() {
|
|
508
|
+
this._isEnabled = true;
|
|
509
|
+
}
|
|
510
|
+
[reset]() {
|
|
511
|
+
this._headerCache = /* @__PURE__ */ new Map();
|
|
512
|
+
this._codecUpdateData = /* @__PURE__ */ new WeakMap();
|
|
513
|
+
this._codecHeaderSent = false;
|
|
514
|
+
this._codecShouldUpdate = false;
|
|
515
|
+
this._bitrate = null;
|
|
516
|
+
this._isEnabled = false;
|
|
517
|
+
}
|
|
518
|
+
[checkCodecUpdate](bitrate2, totalDuration2) {
|
|
519
|
+
if (this._onCodecUpdate) {
|
|
520
|
+
if (this._bitrate !== bitrate2) {
|
|
521
|
+
this._bitrate = bitrate2;
|
|
522
|
+
this._codecShouldUpdate = true;
|
|
523
|
+
}
|
|
524
|
+
const codecData = this._codecUpdateData.get(
|
|
525
|
+
this._headerCache.get(this._currentHeader)
|
|
526
|
+
);
|
|
527
|
+
if (this._codecShouldUpdate && codecData) {
|
|
528
|
+
this._onCodecUpdate(
|
|
529
|
+
{
|
|
530
|
+
bitrate: bitrate2,
|
|
531
|
+
...codecData
|
|
532
|
+
},
|
|
533
|
+
totalDuration2
|
|
534
|
+
);
|
|
535
|
+
}
|
|
536
|
+
this._codecShouldUpdate = false;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
[getHeader](key) {
|
|
540
|
+
const header3 = this._headerCache.get(key);
|
|
541
|
+
if (header3) {
|
|
542
|
+
this._updateCurrentHeader(key);
|
|
543
|
+
}
|
|
544
|
+
return header3;
|
|
545
|
+
}
|
|
546
|
+
[setHeader](key, header3, codecUpdateFields) {
|
|
547
|
+
if (this._isEnabled) {
|
|
548
|
+
if (!this._codecHeaderSent) {
|
|
549
|
+
this._onCodecHeader({ ...header3 });
|
|
550
|
+
this._codecHeaderSent = true;
|
|
551
|
+
}
|
|
552
|
+
this._updateCurrentHeader(key);
|
|
553
|
+
this._headerCache.set(key, header3);
|
|
554
|
+
this._codecUpdateData.set(header3, codecUpdateFields);
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
_updateCurrentHeader(key) {
|
|
558
|
+
if (this._onCodecUpdate && key !== this._currentHeader) {
|
|
559
|
+
this._codecShouldUpdate = true;
|
|
560
|
+
this._currentHeader = key;
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
};
|
|
564
|
+
|
|
565
|
+
// ../../node_modules/codec-parser/src/globals.js
|
|
566
|
+
var headerStore = /* @__PURE__ */ new WeakMap();
|
|
567
|
+
var frameStore = /* @__PURE__ */ new WeakMap();
|
|
568
|
+
|
|
569
|
+
// ../../node_modules/codec-parser/src/codecs/Parser.js
|
|
570
|
+
var Parser = class {
|
|
571
|
+
constructor(codecParser, headerCache) {
|
|
572
|
+
this._codecParser = codecParser;
|
|
573
|
+
this._headerCache = headerCache;
|
|
574
|
+
}
|
|
575
|
+
*[syncFrame]() {
|
|
576
|
+
let frameData;
|
|
577
|
+
do {
|
|
578
|
+
frameData = yield* this.Frame[getFrame](
|
|
579
|
+
this._codecParser,
|
|
580
|
+
this._headerCache,
|
|
581
|
+
0
|
|
582
|
+
);
|
|
583
|
+
if (frameData) return frameData;
|
|
584
|
+
this._codecParser[incrementRawData](1);
|
|
585
|
+
} while (true);
|
|
586
|
+
}
|
|
587
|
+
/**
|
|
588
|
+
* @description Searches for Frames within bytes containing a sequence of known codec frames.
|
|
589
|
+
* @param {boolean} ignoreNextFrame Set to true to return frames even if the next frame may not exist at the expected location
|
|
590
|
+
* @returns {Frame}
|
|
591
|
+
*/
|
|
592
|
+
*[fixedLengthFrameSync](ignoreNextFrame) {
|
|
593
|
+
let frameData = yield* this[syncFrame]();
|
|
594
|
+
const frameLength2 = frameStore.get(frameData)[length];
|
|
595
|
+
if (ignoreNextFrame || this._codecParser._flushing || // check if there is a frame right after this one
|
|
596
|
+
(yield* this.Header[getHeader](
|
|
597
|
+
this._codecParser,
|
|
598
|
+
this._headerCache,
|
|
599
|
+
frameLength2
|
|
600
|
+
))) {
|
|
601
|
+
this._headerCache[enable]();
|
|
602
|
+
this._codecParser[incrementRawData](frameLength2);
|
|
603
|
+
this._codecParser[mapFrameStats](frameData);
|
|
604
|
+
return frameData;
|
|
605
|
+
}
|
|
606
|
+
this._codecParser[logWarning](
|
|
607
|
+
`Missing ${frame} at ${frameLength2} bytes from current position.`,
|
|
608
|
+
`Dropping current ${frame} and trying again.`
|
|
609
|
+
);
|
|
610
|
+
this._headerCache[reset]();
|
|
611
|
+
this._codecParser[incrementRawData](1);
|
|
612
|
+
}
|
|
613
|
+
};
|
|
614
|
+
|
|
615
|
+
// ../../node_modules/codec-parser/src/containers/Frame.js
|
|
616
|
+
var Frame = class {
|
|
617
|
+
constructor(headerValue, dataValue) {
|
|
618
|
+
frameStore.set(this, { [header]: headerValue });
|
|
619
|
+
this[data] = dataValue;
|
|
620
|
+
}
|
|
621
|
+
};
|
|
622
|
+
|
|
623
|
+
// ../../node_modules/codec-parser/src/codecs/CodecFrame.js
|
|
624
|
+
var CodecFrame = class extends Frame {
|
|
625
|
+
static *[getFrame](Header, Frame2, codecParser, headerCache, readOffset) {
|
|
626
|
+
const headerValue = yield* Header[getHeader](
|
|
627
|
+
codecParser,
|
|
628
|
+
headerCache,
|
|
629
|
+
readOffset
|
|
630
|
+
);
|
|
631
|
+
if (headerValue) {
|
|
632
|
+
const frameLengthValue = headerStore.get(headerValue)[frameLength];
|
|
633
|
+
const samplesValue = headerStore.get(headerValue)[samples];
|
|
634
|
+
const frame2 = (yield* codecParser[readRawData](
|
|
635
|
+
frameLengthValue,
|
|
636
|
+
readOffset
|
|
637
|
+
))[subarray](0, frameLengthValue);
|
|
638
|
+
return new Frame2(headerValue, frame2, samplesValue);
|
|
639
|
+
} else {
|
|
640
|
+
return null;
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
constructor(headerValue, dataValue, samplesValue) {
|
|
644
|
+
super(headerValue, dataValue);
|
|
645
|
+
this[header] = headerValue;
|
|
646
|
+
this[samples] = samplesValue;
|
|
647
|
+
this[duration] = samplesValue / headerValue[sampleRate] * 1e3;
|
|
648
|
+
this[frameNumber] = null;
|
|
649
|
+
this[totalBytesOut] = null;
|
|
650
|
+
this[totalSamples] = null;
|
|
651
|
+
this[totalDuration] = null;
|
|
652
|
+
frameStore.get(this)[length] = dataValue[length];
|
|
653
|
+
}
|
|
654
|
+
};
|
|
655
|
+
|
|
656
|
+
// ../../node_modules/codec-parser/src/metadata/ID3v2.js
|
|
657
|
+
var unsynchronizationFlag = "unsynchronizationFlag";
|
|
658
|
+
var extendedHeaderFlag = "extendedHeaderFlag";
|
|
659
|
+
var experimentalFlag = "experimentalFlag";
|
|
660
|
+
var footerPresent = "footerPresent";
|
|
661
|
+
var ID3v2 = class _ID3v2 {
|
|
662
|
+
static *getID3v2Header(codecParser, headerCache, readOffset) {
|
|
663
|
+
const headerLength = 10;
|
|
664
|
+
const header3 = {};
|
|
665
|
+
let data3 = yield* codecParser[readRawData](3, readOffset);
|
|
666
|
+
if (data3[0] !== 73 || data3[1] !== 68 || data3[2] !== 51) return null;
|
|
667
|
+
data3 = yield* codecParser[readRawData](headerLength, readOffset);
|
|
668
|
+
header3[version] = `id3v2.${data3[3]}.${data3[4]}`;
|
|
669
|
+
if (data3[5] & 15) return null;
|
|
670
|
+
header3[unsynchronizationFlag] = !!(data3[5] & 128);
|
|
671
|
+
header3[extendedHeaderFlag] = !!(data3[5] & 64);
|
|
672
|
+
header3[experimentalFlag] = !!(data3[5] & 32);
|
|
673
|
+
header3[footerPresent] = !!(data3[5] & 16);
|
|
674
|
+
if (data3[6] & 128 || data3[7] & 128 || data3[8] & 128 || data3[9] & 128)
|
|
675
|
+
return null;
|
|
676
|
+
const dataLength = data3[6] << 21 | data3[7] << 14 | data3[8] << 7 | data3[9];
|
|
677
|
+
header3[length] = headerLength + dataLength;
|
|
678
|
+
return new _ID3v2(header3);
|
|
679
|
+
}
|
|
680
|
+
constructor(header3) {
|
|
681
|
+
this[version] = header3[version];
|
|
682
|
+
this[unsynchronizationFlag] = header3[unsynchronizationFlag];
|
|
683
|
+
this[extendedHeaderFlag] = header3[extendedHeaderFlag];
|
|
684
|
+
this[experimentalFlag] = header3[experimentalFlag];
|
|
685
|
+
this[footerPresent] = header3[footerPresent];
|
|
686
|
+
this[length] = header3[length];
|
|
687
|
+
}
|
|
688
|
+
};
|
|
689
|
+
|
|
690
|
+
// ../../node_modules/codec-parser/src/codecs/CodecHeader.js
|
|
691
|
+
var CodecHeader = class {
|
|
692
|
+
/**
|
|
693
|
+
* @private
|
|
694
|
+
*/
|
|
695
|
+
constructor(header3) {
|
|
696
|
+
headerStore.set(this, header3);
|
|
697
|
+
this[bitDepth] = header3[bitDepth];
|
|
698
|
+
this[bitrate] = null;
|
|
699
|
+
this[channels] = header3[channels];
|
|
700
|
+
this[channelMode] = header3[channelMode];
|
|
701
|
+
this[sampleRate] = header3[sampleRate];
|
|
702
|
+
}
|
|
703
|
+
};
|
|
704
|
+
|
|
705
|
+
// ../../node_modules/codec-parser/src/codecs/mpeg/MPEGHeader.js
|
|
706
|
+
var bitrateMatrix = {
|
|
707
|
+
// bits | V1,L1 | V1,L2 | V1,L3 | V2,L1 | V2,L2 & L3
|
|
708
|
+
0: [free, free, free, free, free],
|
|
709
|
+
16: [32, 32, 32, 32, 8],
|
|
710
|
+
// 0b00100000: [64, 48, 40, 48, 16,],
|
|
711
|
+
// 0b00110000: [96, 56, 48, 56, 24,],
|
|
712
|
+
// 0b01000000: [128, 64, 56, 64, 32,],
|
|
713
|
+
// 0b01010000: [160, 80, 64, 80, 40,],
|
|
714
|
+
// 0b01100000: [192, 96, 80, 96, 48,],
|
|
715
|
+
// 0b01110000: [224, 112, 96, 112, 56,],
|
|
716
|
+
// 0b10000000: [256, 128, 112, 128, 64,],
|
|
717
|
+
// 0b10010000: [288, 160, 128, 144, 80,],
|
|
718
|
+
// 0b10100000: [320, 192, 160, 160, 96,],
|
|
719
|
+
// 0b10110000: [352, 224, 192, 176, 112,],
|
|
720
|
+
// 0b11000000: [384, 256, 224, 192, 128,],
|
|
721
|
+
// 0b11010000: [416, 320, 256, 224, 144,],
|
|
722
|
+
// 0b11100000: [448, 384, 320, 256, 160,],
|
|
723
|
+
240: [bad, bad, bad, bad, bad]
|
|
724
|
+
};
|
|
725
|
+
var calcBitrate = (idx, interval, intervalOffset) => 8 * ((idx + intervalOffset) % interval + interval) * (1 << (idx + intervalOffset) / interval) - 8 * interval * (interval / 8 | 0);
|
|
726
|
+
for (let i = 2; i < 15; i++)
|
|
727
|
+
bitrateMatrix[i << 4] = [
|
|
728
|
+
i * 32,
|
|
729
|
+
// V1,L1
|
|
730
|
+
calcBitrate(i, 4, 0),
|
|
731
|
+
// V1,L2
|
|
732
|
+
calcBitrate(i, 4, -1),
|
|
733
|
+
// V1,L3
|
|
734
|
+
calcBitrate(i, 8, 4),
|
|
735
|
+
// V2,L1
|
|
736
|
+
calcBitrate(i, 8, 0)
|
|
737
|
+
// V2,L2 & L3
|
|
738
|
+
];
|
|
739
|
+
var v1Layer1 = 0;
|
|
740
|
+
var v1Layer2 = 1;
|
|
741
|
+
var v1Layer3 = 2;
|
|
742
|
+
var v2Layer1 = 3;
|
|
743
|
+
var v2Layer23 = 4;
|
|
744
|
+
var bands = "bands ";
|
|
745
|
+
var to31 = " to 31";
|
|
746
|
+
var layer12ModeExtensions = {
|
|
747
|
+
0: bands + 4 + to31,
|
|
748
|
+
16: bands + 8 + to31,
|
|
749
|
+
32: bands + 12 + to31,
|
|
750
|
+
48: bands + 16 + to31
|
|
751
|
+
};
|
|
752
|
+
var bitrateIndex = "bitrateIndex";
|
|
753
|
+
var v2 = "v2";
|
|
754
|
+
var v1 = "v1";
|
|
755
|
+
var intensityStereo = "Intensity stereo ";
|
|
756
|
+
var msStereo = ", MS stereo ";
|
|
757
|
+
var on = "on";
|
|
758
|
+
var off = "off";
|
|
759
|
+
var layer3ModeExtensions = {
|
|
760
|
+
0: intensityStereo + off + msStereo + off,
|
|
761
|
+
16: intensityStereo + on + msStereo + off,
|
|
762
|
+
32: intensityStereo + off + msStereo + on,
|
|
763
|
+
48: intensityStereo + on + msStereo + on
|
|
764
|
+
};
|
|
765
|
+
var layersValues = {
|
|
766
|
+
0: { [description]: reserved },
|
|
767
|
+
2: {
|
|
768
|
+
[description]: "Layer III",
|
|
769
|
+
[framePadding]: 1,
|
|
770
|
+
[modeExtension]: layer3ModeExtensions,
|
|
771
|
+
[v1]: {
|
|
772
|
+
[bitrateIndex]: v1Layer3,
|
|
773
|
+
[samples]: 1152
|
|
774
|
+
},
|
|
775
|
+
[v2]: {
|
|
776
|
+
[bitrateIndex]: v2Layer23,
|
|
777
|
+
[samples]: 576
|
|
778
|
+
}
|
|
779
|
+
},
|
|
780
|
+
4: {
|
|
781
|
+
[description]: "Layer II",
|
|
782
|
+
[framePadding]: 1,
|
|
783
|
+
[modeExtension]: layer12ModeExtensions,
|
|
784
|
+
[samples]: 1152,
|
|
785
|
+
[v1]: {
|
|
786
|
+
[bitrateIndex]: v1Layer2
|
|
787
|
+
},
|
|
788
|
+
[v2]: {
|
|
789
|
+
[bitrateIndex]: v2Layer23
|
|
790
|
+
}
|
|
791
|
+
},
|
|
792
|
+
6: {
|
|
793
|
+
[description]: "Layer I",
|
|
794
|
+
[framePadding]: 4,
|
|
795
|
+
[modeExtension]: layer12ModeExtensions,
|
|
796
|
+
[samples]: 384,
|
|
797
|
+
[v1]: {
|
|
798
|
+
[bitrateIndex]: v1Layer1
|
|
799
|
+
},
|
|
800
|
+
[v2]: {
|
|
801
|
+
[bitrateIndex]: v2Layer1
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
};
|
|
805
|
+
var mpegVersionDescription = "MPEG Version ";
|
|
806
|
+
var isoIec = "ISO/IEC ";
|
|
807
|
+
var mpegVersions = {
|
|
808
|
+
0: {
|
|
809
|
+
[description]: `${mpegVersionDescription}2.5 (later extension of MPEG 2)`,
|
|
810
|
+
[layer]: v2,
|
|
811
|
+
[sampleRate]: {
|
|
812
|
+
0: rate11025,
|
|
813
|
+
4: rate12000,
|
|
814
|
+
8: rate8000,
|
|
815
|
+
12: reserved
|
|
816
|
+
}
|
|
817
|
+
},
|
|
818
|
+
8: { [description]: reserved },
|
|
819
|
+
16: {
|
|
820
|
+
[description]: `${mpegVersionDescription}2 (${isoIec}13818-3)`,
|
|
821
|
+
[layer]: v2,
|
|
822
|
+
[sampleRate]: {
|
|
823
|
+
0: rate22050,
|
|
824
|
+
4: rate24000,
|
|
825
|
+
8: rate16000,
|
|
826
|
+
12: reserved
|
|
827
|
+
}
|
|
828
|
+
},
|
|
829
|
+
24: {
|
|
830
|
+
[description]: `${mpegVersionDescription}1 (${isoIec}11172-3)`,
|
|
831
|
+
[layer]: v1,
|
|
832
|
+
[sampleRate]: {
|
|
833
|
+
0: rate44100,
|
|
834
|
+
4: rate48000,
|
|
835
|
+
8: rate32000,
|
|
836
|
+
12: reserved
|
|
837
|
+
}
|
|
838
|
+
},
|
|
839
|
+
length
|
|
840
|
+
};
|
|
841
|
+
var protectionValues = {
|
|
842
|
+
0: sixteenBitCRC,
|
|
843
|
+
1: none
|
|
844
|
+
};
|
|
845
|
+
var emphasisValues = {
|
|
846
|
+
0: none,
|
|
847
|
+
1: "50/15 ms",
|
|
848
|
+
2: reserved,
|
|
849
|
+
3: "CCIT J.17"
|
|
850
|
+
};
|
|
851
|
+
var channelModes = {
|
|
852
|
+
0: { [channels]: 2, [description]: stereo },
|
|
853
|
+
64: { [channels]: 2, [description]: "joint " + stereo },
|
|
854
|
+
128: { [channels]: 2, [description]: "dual channel" },
|
|
855
|
+
192: { [channels]: 1, [description]: monophonic }
|
|
856
|
+
};
|
|
857
|
+
var MPEGHeader = class _MPEGHeader extends CodecHeader {
|
|
858
|
+
static *[getHeader](codecParser, headerCache, readOffset) {
|
|
859
|
+
const header3 = {};
|
|
860
|
+
const id3v2Header = yield* ID3v2.getID3v2Header(
|
|
861
|
+
codecParser,
|
|
862
|
+
headerCache,
|
|
863
|
+
readOffset
|
|
864
|
+
);
|
|
865
|
+
if (id3v2Header) {
|
|
866
|
+
yield* codecParser[readRawData](id3v2Header[length], readOffset);
|
|
867
|
+
codecParser[incrementRawData](id3v2Header[length]);
|
|
868
|
+
}
|
|
869
|
+
const data3 = yield* codecParser[readRawData](4, readOffset);
|
|
870
|
+
const key = bytesToString(data3[subarray](0, 4));
|
|
871
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
872
|
+
if (cachedHeader) return new _MPEGHeader(cachedHeader);
|
|
873
|
+
if (data3[0] !== 255 || data3[1] < 224) return null;
|
|
874
|
+
const mpegVersionValues2 = mpegVersions[data3[1] & 24];
|
|
875
|
+
if (mpegVersionValues2[description] === reserved) return null;
|
|
876
|
+
const layerBits = data3[1] & 6;
|
|
877
|
+
if (layersValues[layerBits][description] === reserved) return null;
|
|
878
|
+
const layerValues2 = {
|
|
879
|
+
...layersValues[layerBits],
|
|
880
|
+
...layersValues[layerBits][mpegVersionValues2[layer]]
|
|
881
|
+
};
|
|
882
|
+
header3[mpegVersion] = mpegVersionValues2[description];
|
|
883
|
+
header3[layer] = layerValues2[description];
|
|
884
|
+
header3[samples] = layerValues2[samples];
|
|
885
|
+
header3[protection] = protectionValues[data3[1] & 1];
|
|
886
|
+
header3[length] = 4;
|
|
887
|
+
header3[bitrate] = bitrateMatrix[data3[2] & 240][layerValues2[bitrateIndex]];
|
|
888
|
+
if (header3[bitrate] === bad) return null;
|
|
889
|
+
header3[sampleRate] = mpegVersionValues2[sampleRate][data3[2] & 12];
|
|
890
|
+
if (header3[sampleRate] === reserved) return null;
|
|
891
|
+
header3[framePadding] = data3[2] & 2 && layerValues2[framePadding];
|
|
892
|
+
header3[isPrivate] = !!(data3[2] & 1);
|
|
893
|
+
header3[frameLength] = Math.floor(
|
|
894
|
+
125 * header3[bitrate] * header3[samples] / header3[sampleRate] + header3[framePadding]
|
|
895
|
+
);
|
|
896
|
+
if (!header3[frameLength]) return null;
|
|
897
|
+
const channelModeBits2 = data3[3] & 192;
|
|
898
|
+
header3[channelMode] = channelModes[channelModeBits2][description];
|
|
899
|
+
header3[channels] = channelModes[channelModeBits2][channels];
|
|
900
|
+
header3[modeExtension] = layerValues2[modeExtension][data3[3] & 48];
|
|
901
|
+
header3[isCopyrighted] = !!(data3[3] & 8);
|
|
902
|
+
header3[isOriginal] = !!(data3[3] & 4);
|
|
903
|
+
header3[emphasis] = emphasisValues[data3[3] & 3];
|
|
904
|
+
if (header3[emphasis] === reserved) return null;
|
|
905
|
+
header3[bitDepth] = 16;
|
|
906
|
+
{
|
|
907
|
+
const { length: length2, frameLength: frameLength2, samples: samples2, ...codecUpdateFields } = header3;
|
|
908
|
+
headerCache[setHeader](key, header3, codecUpdateFields);
|
|
909
|
+
}
|
|
910
|
+
return new _MPEGHeader(header3);
|
|
911
|
+
}
|
|
912
|
+
/**
|
|
913
|
+
* @private
|
|
914
|
+
* Call MPEGHeader.getHeader(Array<Uint8>) to get instance
|
|
915
|
+
*/
|
|
916
|
+
constructor(header3) {
|
|
917
|
+
super(header3);
|
|
918
|
+
this[bitrate] = header3[bitrate];
|
|
919
|
+
this[emphasis] = header3[emphasis];
|
|
920
|
+
this[framePadding] = header3[framePadding];
|
|
921
|
+
this[isCopyrighted] = header3[isCopyrighted];
|
|
922
|
+
this[isOriginal] = header3[isOriginal];
|
|
923
|
+
this[isPrivate] = header3[isPrivate];
|
|
924
|
+
this[layer] = header3[layer];
|
|
925
|
+
this[modeExtension] = header3[modeExtension];
|
|
926
|
+
this[mpegVersion] = header3[mpegVersion];
|
|
927
|
+
this[protection] = header3[protection];
|
|
928
|
+
}
|
|
929
|
+
};
|
|
930
|
+
|
|
931
|
+
// ../../node_modules/codec-parser/src/codecs/mpeg/MPEGFrame.js
|
|
932
|
+
var MPEGFrame = class _MPEGFrame extends CodecFrame {
|
|
933
|
+
static *[getFrame](codecParser, headerCache, readOffset) {
|
|
934
|
+
return yield* super[getFrame](
|
|
935
|
+
MPEGHeader,
|
|
936
|
+
_MPEGFrame,
|
|
937
|
+
codecParser,
|
|
938
|
+
headerCache,
|
|
939
|
+
readOffset
|
|
940
|
+
);
|
|
941
|
+
}
|
|
942
|
+
constructor(header3, frame2, samples2) {
|
|
943
|
+
super(header3, frame2, samples2);
|
|
944
|
+
}
|
|
945
|
+
};
|
|
946
|
+
|
|
947
|
+
// ../../node_modules/codec-parser/src/codecs/mpeg/MPEGParser.js
|
|
948
|
+
var MPEGParser = class extends Parser {
|
|
949
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
950
|
+
super(codecParser, headerCache);
|
|
951
|
+
this.Frame = MPEGFrame;
|
|
952
|
+
this.Header = MPEGHeader;
|
|
953
|
+
onCodec(this[codec]);
|
|
954
|
+
}
|
|
955
|
+
get [codec]() {
|
|
956
|
+
return mpeg;
|
|
957
|
+
}
|
|
958
|
+
*[parseFrame]() {
|
|
959
|
+
return yield* this[fixedLengthFrameSync]();
|
|
960
|
+
}
|
|
961
|
+
};
|
|
962
|
+
|
|
963
|
+
// ../../node_modules/codec-parser/src/codecs/aac/AACHeader.js
|
|
964
|
+
var mpegVersionValues = {
|
|
965
|
+
0: "MPEG-4",
|
|
966
|
+
8: "MPEG-2"
|
|
967
|
+
};
|
|
968
|
+
var layerValues = {
|
|
969
|
+
0: "valid",
|
|
970
|
+
2: bad,
|
|
971
|
+
4: bad,
|
|
972
|
+
6: bad
|
|
973
|
+
};
|
|
974
|
+
var protectionValues2 = {
|
|
975
|
+
0: sixteenBitCRC,
|
|
976
|
+
1: none
|
|
977
|
+
};
|
|
978
|
+
var profileValues = {
|
|
979
|
+
0: "AAC Main",
|
|
980
|
+
64: "AAC LC (Low Complexity)",
|
|
981
|
+
128: "AAC SSR (Scalable Sample Rate)",
|
|
982
|
+
192: "AAC LTP (Long Term Prediction)"
|
|
983
|
+
};
|
|
984
|
+
var sampleRates = {
|
|
985
|
+
0: rate96000,
|
|
986
|
+
4: rate88200,
|
|
987
|
+
8: rate64000,
|
|
988
|
+
12: rate48000,
|
|
989
|
+
16: rate44100,
|
|
990
|
+
20: rate32000,
|
|
991
|
+
24: rate24000,
|
|
992
|
+
28: rate22050,
|
|
993
|
+
32: rate16000,
|
|
994
|
+
36: rate12000,
|
|
995
|
+
40: rate11025,
|
|
996
|
+
44: rate8000,
|
|
997
|
+
48: rate7350,
|
|
998
|
+
52: reserved,
|
|
999
|
+
56: reserved,
|
|
1000
|
+
60: "frequency is written explicitly"
|
|
1001
|
+
};
|
|
1002
|
+
var channelModeValues = {
|
|
1003
|
+
0: { [channels]: 0, [description]: "Defined in AOT Specific Config" },
|
|
1004
|
+
/*
|
|
1005
|
+
'monophonic (mono)'
|
|
1006
|
+
'stereo (left, right)'
|
|
1007
|
+
'linear surround (front center, front left, front right)'
|
|
1008
|
+
'quadraphonic (front center, front left, front right, rear center)'
|
|
1009
|
+
'5.0 surround (front center, front left, front right, rear left, rear right)'
|
|
1010
|
+
'5.1 surround (front center, front left, front right, rear left, rear right, LFE)'
|
|
1011
|
+
'7.1 surround (front center, front left, front right, side left, side right, rear left, rear right, LFE)'
|
|
1012
|
+
*/
|
|
1013
|
+
64: { [channels]: 1, [description]: monophonic },
|
|
1014
|
+
128: { [channels]: 2, [description]: getChannelMapping(2, channelMappings[0][0]) },
|
|
1015
|
+
192: { [channels]: 3, [description]: getChannelMapping(3, channelMappings[1][3]) },
|
|
1016
|
+
256: { [channels]: 4, [description]: getChannelMapping(4, channelMappings[1][3], channelMappings[3][4]) },
|
|
1017
|
+
320: { [channels]: 5, [description]: getChannelMapping(5, channelMappings[1][3], channelMappings[3][0]) },
|
|
1018
|
+
384: { [channels]: 6, [description]: getChannelMapping(6, channelMappings[1][3], channelMappings[3][0], lfe) },
|
|
1019
|
+
448: { [channels]: 8, [description]: getChannelMapping(8, channelMappings[1][3], channelMappings[2][0], channelMappings[3][0], lfe) }
|
|
1020
|
+
};
|
|
1021
|
+
var AACHeader = class _AACHeader extends CodecHeader {
|
|
1022
|
+
static *[getHeader](codecParser, headerCache, readOffset) {
|
|
1023
|
+
const header3 = {};
|
|
1024
|
+
const data3 = yield* codecParser[readRawData](7, readOffset);
|
|
1025
|
+
const key = bytesToString([
|
|
1026
|
+
data3[0],
|
|
1027
|
+
data3[1],
|
|
1028
|
+
data3[2],
|
|
1029
|
+
data3[3] & 252 | data3[6] & 3
|
|
1030
|
+
// frame length, buffer fullness varies so don't cache it
|
|
1031
|
+
]);
|
|
1032
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
1033
|
+
if (!cachedHeader) {
|
|
1034
|
+
if (data3[0] !== 255 || data3[1] < 240) return null;
|
|
1035
|
+
header3[mpegVersion] = mpegVersionValues[data3[1] & 8];
|
|
1036
|
+
header3[layer] = layerValues[data3[1] & 6];
|
|
1037
|
+
if (header3[layer] === bad) return null;
|
|
1038
|
+
const protectionBit = data3[1] & 1;
|
|
1039
|
+
header3[protection] = protectionValues2[protectionBit];
|
|
1040
|
+
header3[length] = protectionBit ? 7 : 9;
|
|
1041
|
+
header3[profileBits] = data3[2] & 192;
|
|
1042
|
+
header3[sampleRateBits] = data3[2] & 60;
|
|
1043
|
+
const privateBit = data3[2] & 2;
|
|
1044
|
+
header3[profile] = profileValues[header3[profileBits]];
|
|
1045
|
+
header3[sampleRate] = sampleRates[header3[sampleRateBits]];
|
|
1046
|
+
if (header3[sampleRate] === reserved) return null;
|
|
1047
|
+
header3[isPrivate] = !!privateBit;
|
|
1048
|
+
header3[channelModeBits] = (data3[2] << 8 | data3[3]) & 448;
|
|
1049
|
+
header3[channelMode] = channelModeValues[header3[channelModeBits]][description];
|
|
1050
|
+
header3[channels] = channelModeValues[header3[channelModeBits]][channels];
|
|
1051
|
+
header3[isOriginal] = !!(data3[3] & 32);
|
|
1052
|
+
header3[isHome] = !!(data3[3] & 8);
|
|
1053
|
+
header3[copyrightId] = !!(data3[3] & 8);
|
|
1054
|
+
header3[copyrightIdStart] = !!(data3[3] & 4);
|
|
1055
|
+
header3[bitDepth] = 16;
|
|
1056
|
+
header3[samples] = 1024;
|
|
1057
|
+
header3[numberAACFrames] = data3[6] & 3;
|
|
1058
|
+
{
|
|
1059
|
+
const {
|
|
1060
|
+
length: length2,
|
|
1061
|
+
channelModeBits: channelModeBits2,
|
|
1062
|
+
profileBits: profileBits2,
|
|
1063
|
+
sampleRateBits: sampleRateBits2,
|
|
1064
|
+
frameLength: frameLength2,
|
|
1065
|
+
samples: samples2,
|
|
1066
|
+
numberAACFrames: numberAACFrames2,
|
|
1067
|
+
...codecUpdateFields
|
|
1068
|
+
} = header3;
|
|
1069
|
+
headerCache[setHeader](key, header3, codecUpdateFields);
|
|
1070
|
+
}
|
|
1071
|
+
} else {
|
|
1072
|
+
Object.assign(header3, cachedHeader);
|
|
1073
|
+
}
|
|
1074
|
+
header3[frameLength] = (data3[3] << 11 | data3[4] << 3 | data3[5] >> 5) & 8191;
|
|
1075
|
+
if (!header3[frameLength]) return null;
|
|
1076
|
+
const bufferFullnessBits = (data3[5] << 6 | data3[6] >> 2) & 2047;
|
|
1077
|
+
header3[bufferFullness] = bufferFullnessBits === 2047 ? "VBR" : bufferFullnessBits;
|
|
1078
|
+
return new _AACHeader(header3);
|
|
1079
|
+
}
|
|
1080
|
+
/**
|
|
1081
|
+
* @private
|
|
1082
|
+
* Call AACHeader.getHeader(Array<Uint8>) to get instance
|
|
1083
|
+
*/
|
|
1084
|
+
constructor(header3) {
|
|
1085
|
+
super(header3);
|
|
1086
|
+
this[copyrightId] = header3[copyrightId];
|
|
1087
|
+
this[copyrightIdStart] = header3[copyrightIdStart];
|
|
1088
|
+
this[bufferFullness] = header3[bufferFullness];
|
|
1089
|
+
this[isHome] = header3[isHome];
|
|
1090
|
+
this[isOriginal] = header3[isOriginal];
|
|
1091
|
+
this[isPrivate] = header3[isPrivate];
|
|
1092
|
+
this[layer] = header3[layer];
|
|
1093
|
+
this[length] = header3[length];
|
|
1094
|
+
this[mpegVersion] = header3[mpegVersion];
|
|
1095
|
+
this[numberAACFrames] = header3[numberAACFrames];
|
|
1096
|
+
this[profile] = header3[profile];
|
|
1097
|
+
this[protection] = header3[protection];
|
|
1098
|
+
}
|
|
1099
|
+
get audioSpecificConfig() {
|
|
1100
|
+
const header3 = headerStore.get(this);
|
|
1101
|
+
const audioSpecificConfig = header3[profileBits] + 64 << 5 | header3[sampleRateBits] << 5 | header3[channelModeBits] >> 3;
|
|
1102
|
+
const bytes = new uint8Array(2);
|
|
1103
|
+
new dataView(bytes[buffer]).setUint16(0, audioSpecificConfig, false);
|
|
1104
|
+
return bytes;
|
|
1105
|
+
}
|
|
1106
|
+
};
|
|
1107
|
+
|
|
1108
|
+
// ../../node_modules/codec-parser/src/codecs/aac/AACFrame.js
|
|
1109
|
+
var AACFrame = class _AACFrame extends CodecFrame {
|
|
1110
|
+
static *[getFrame](codecParser, headerCache, readOffset) {
|
|
1111
|
+
return yield* super[getFrame](
|
|
1112
|
+
AACHeader,
|
|
1113
|
+
_AACFrame,
|
|
1114
|
+
codecParser,
|
|
1115
|
+
headerCache,
|
|
1116
|
+
readOffset
|
|
1117
|
+
);
|
|
1118
|
+
}
|
|
1119
|
+
constructor(header3, frame2, samples2) {
|
|
1120
|
+
super(header3, frame2, samples2);
|
|
1121
|
+
}
|
|
1122
|
+
};
|
|
1123
|
+
|
|
1124
|
+
// ../../node_modules/codec-parser/src/codecs/aac/AACParser.js
|
|
1125
|
+
var AACParser = class extends Parser {
|
|
1126
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
1127
|
+
super(codecParser, headerCache);
|
|
1128
|
+
this.Frame = AACFrame;
|
|
1129
|
+
this.Header = AACHeader;
|
|
1130
|
+
onCodec(this[codec]);
|
|
1131
|
+
}
|
|
1132
|
+
get [codec]() {
|
|
1133
|
+
return "aac";
|
|
1134
|
+
}
|
|
1135
|
+
*[parseFrame]() {
|
|
1136
|
+
return yield* this[fixedLengthFrameSync]();
|
|
1137
|
+
}
|
|
1138
|
+
};
|
|
1139
|
+
|
|
1140
|
+
// ../../node_modules/codec-parser/src/codecs/flac/FLACFrame.js
|
|
1141
|
+
var FLACFrame = class _FLACFrame extends CodecFrame {
|
|
1142
|
+
static _getFrameFooterCrc16(data3) {
|
|
1143
|
+
return (data3[data3[length] - 2] << 8) + data3[data3[length] - 1];
|
|
1144
|
+
}
|
|
1145
|
+
// check frame footer crc
|
|
1146
|
+
// https://xiph.org/flac/format.html#frame_footer
|
|
1147
|
+
static [checkFrameFooterCrc16](data3) {
|
|
1148
|
+
const expectedCrc16 = _FLACFrame._getFrameFooterCrc16(data3);
|
|
1149
|
+
const actualCrc16 = flacCrc16(data3[subarray](0, -2));
|
|
1150
|
+
return expectedCrc16 === actualCrc16;
|
|
1151
|
+
}
|
|
1152
|
+
constructor(data3, header3, streamInfoValue) {
|
|
1153
|
+
header3[streamInfo] = streamInfoValue;
|
|
1154
|
+
header3[crc16] = _FLACFrame._getFrameFooterCrc16(data3);
|
|
1155
|
+
super(header3, data3, headerStore.get(header3)[samples]);
|
|
1156
|
+
}
|
|
1157
|
+
};
|
|
1158
|
+
|
|
1159
|
+
// ../../node_modules/codec-parser/src/codecs/flac/FLACHeader.js
|
|
1160
|
+
var getFromStreamInfo = "get from STREAMINFO metadata block";
|
|
1161
|
+
var blockingStrategyValues = {
|
|
1162
|
+
0: "Fixed",
|
|
1163
|
+
1: "Variable"
|
|
1164
|
+
};
|
|
1165
|
+
var blockSizeValues = {
|
|
1166
|
+
0: reserved,
|
|
1167
|
+
16: 192
|
|
1168
|
+
// 0b00100000: 576,
|
|
1169
|
+
// 0b00110000: 1152,
|
|
1170
|
+
// 0b01000000: 2304,
|
|
1171
|
+
// 0b01010000: 4608,
|
|
1172
|
+
// 0b01100000: "8-bit (blocksize-1) from end of header",
|
|
1173
|
+
// 0b01110000: "16-bit (blocksize-1) from end of header",
|
|
1174
|
+
// 0b10000000: 256,
|
|
1175
|
+
// 0b10010000: 512,
|
|
1176
|
+
// 0b10100000: 1024,
|
|
1177
|
+
// 0b10110000: 2048,
|
|
1178
|
+
// 0b11000000: 4096,
|
|
1179
|
+
// 0b11010000: 8192,
|
|
1180
|
+
// 0b11100000: 16384,
|
|
1181
|
+
// 0b11110000: 32768,
|
|
1182
|
+
};
|
|
1183
|
+
for (let i = 2; i < 16; i++)
|
|
1184
|
+
blockSizeValues[i << 4] = i < 6 ? 576 * 2 ** (i - 2) : 2 ** i;
|
|
1185
|
+
var sampleRateValues = {
|
|
1186
|
+
0: getFromStreamInfo,
|
|
1187
|
+
1: rate88200,
|
|
1188
|
+
2: rate176400,
|
|
1189
|
+
3: rate192000,
|
|
1190
|
+
4: rate8000,
|
|
1191
|
+
5: rate16000,
|
|
1192
|
+
6: rate22050,
|
|
1193
|
+
7: rate24000,
|
|
1194
|
+
8: rate32000,
|
|
1195
|
+
9: rate44100,
|
|
1196
|
+
10: rate48000,
|
|
1197
|
+
11: rate96000,
|
|
1198
|
+
// 0b00001100: "8-bit sample rate (in kHz) from end of header",
|
|
1199
|
+
// 0b00001101: "16-bit sample rate (in Hz) from end of header",
|
|
1200
|
+
// 0b00001110: "16-bit sample rate (in tens of Hz) from end of header",
|
|
1201
|
+
15: bad
|
|
1202
|
+
};
|
|
1203
|
+
var channelAssignments = {
|
|
1204
|
+
/*'
|
|
1205
|
+
'monophonic (mono)'
|
|
1206
|
+
'stereo (left, right)'
|
|
1207
|
+
'linear surround (left, right, center)'
|
|
1208
|
+
'quadraphonic (front left, front right, rear left, rear right)'
|
|
1209
|
+
'5.0 surround (front left, front right, front center, rear left, rear right)'
|
|
1210
|
+
'5.1 surround (front left, front right, front center, LFE, rear left, rear right)'
|
|
1211
|
+
'6.1 surround (front left, front right, front center, LFE, rear center, side left, side right)'
|
|
1212
|
+
'7.1 surround (front left, front right, front center, LFE, rear left, rear right, side left, side right)'
|
|
1213
|
+
*/
|
|
1214
|
+
0: { [channels]: 1, [description]: monophonic },
|
|
1215
|
+
16: { [channels]: 2, [description]: getChannelMapping(2, channelMappings[0][0]) },
|
|
1216
|
+
32: { [channels]: 3, [description]: getChannelMapping(3, channelMappings[0][1]) },
|
|
1217
|
+
48: { [channels]: 4, [description]: getChannelMapping(4, channelMappings[1][0], channelMappings[3][0]) },
|
|
1218
|
+
64: { [channels]: 5, [description]: getChannelMapping(5, channelMappings[1][1], channelMappings[3][0]) },
|
|
1219
|
+
80: { [channels]: 6, [description]: getChannelMapping(6, channelMappings[1][1], lfe, channelMappings[3][0]) },
|
|
1220
|
+
96: { [channels]: 7, [description]: getChannelMapping(7, channelMappings[1][1], lfe, channelMappings[3][4], channelMappings[2][0]) },
|
|
1221
|
+
112: { [channels]: 8, [description]: getChannelMapping(8, channelMappings[1][1], lfe, channelMappings[3][0], channelMappings[2][0]) },
|
|
1222
|
+
128: { [channels]: 2, [description]: `${stereo} (left, diff)` },
|
|
1223
|
+
144: { [channels]: 2, [description]: `${stereo} (diff, right)` },
|
|
1224
|
+
160: { [channels]: 2, [description]: `${stereo} (avg, diff)` },
|
|
1225
|
+
176: reserved,
|
|
1226
|
+
192: reserved,
|
|
1227
|
+
208: reserved,
|
|
1228
|
+
224: reserved,
|
|
1229
|
+
240: reserved
|
|
1230
|
+
};
|
|
1231
|
+
var bitDepthValues = {
|
|
1232
|
+
0: getFromStreamInfo,
|
|
1233
|
+
2: 8,
|
|
1234
|
+
4: 12,
|
|
1235
|
+
6: reserved,
|
|
1236
|
+
8: 16,
|
|
1237
|
+
10: 20,
|
|
1238
|
+
12: 24,
|
|
1239
|
+
14: reserved
|
|
1240
|
+
};
|
|
1241
|
+
var FLACHeader = class _FLACHeader extends CodecHeader {
|
|
1242
|
+
// https://datatracker.ietf.org/doc/html/rfc3629#section-3
|
|
1243
|
+
// Char. number range | UTF-8 octet sequence
|
|
1244
|
+
// (hexadecimal) | (binary)
|
|
1245
|
+
// --------------------+---------------------------------------------
|
|
1246
|
+
// 0000 0000-0000 007F | 0xxxxxxx
|
|
1247
|
+
// 0000 0080-0000 07FF | 110xxxxx 10xxxxxx
|
|
1248
|
+
// 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
|
|
1249
|
+
// 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
|
|
1250
|
+
static _decodeUTF8Int(data3) {
|
|
1251
|
+
if (data3[0] > 254) {
|
|
1252
|
+
return null;
|
|
1253
|
+
}
|
|
1254
|
+
if (data3[0] < 128) return { value: data3[0], length: 1 };
|
|
1255
|
+
let length2 = 1;
|
|
1256
|
+
for (let zeroMask = 64; zeroMask & data3[0]; zeroMask >>= 1) length2++;
|
|
1257
|
+
let idx = length2 - 1, value = 0, shift = 0;
|
|
1258
|
+
for (; idx > 0; shift += 6, idx--) {
|
|
1259
|
+
if ((data3[idx] & 192) !== 128) {
|
|
1260
|
+
return null;
|
|
1261
|
+
}
|
|
1262
|
+
value |= (data3[idx] & 63) << shift;
|
|
1263
|
+
}
|
|
1264
|
+
value |= (data3[idx] & 127 >> length2) << shift;
|
|
1265
|
+
return { value, length: length2 };
|
|
1266
|
+
}
|
|
1267
|
+
static [getHeaderFromUint8Array](data3, headerCache) {
|
|
1268
|
+
const codecParserStub = {
|
|
1269
|
+
[readRawData]: function* () {
|
|
1270
|
+
return data3;
|
|
1271
|
+
}
|
|
1272
|
+
};
|
|
1273
|
+
return _FLACHeader[getHeader](codecParserStub, headerCache, 0).next().value;
|
|
1274
|
+
}
|
|
1275
|
+
static *[getHeader](codecParser, headerCache, readOffset) {
|
|
1276
|
+
let data3 = yield* codecParser[readRawData](6, readOffset);
|
|
1277
|
+
if (data3[0] !== 255 || !(data3[1] === 248 || data3[1] === 249)) {
|
|
1278
|
+
return null;
|
|
1279
|
+
}
|
|
1280
|
+
const header3 = {};
|
|
1281
|
+
const key = bytesToString(data3[subarray](0, 4));
|
|
1282
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
1283
|
+
if (!cachedHeader) {
|
|
1284
|
+
header3[blockingStrategyBits] = data3[1] & 1;
|
|
1285
|
+
header3[blockingStrategy] = blockingStrategyValues[header3[blockingStrategyBits]];
|
|
1286
|
+
header3[blockSizeBits] = data3[2] & 240;
|
|
1287
|
+
header3[sampleRateBits] = data3[2] & 15;
|
|
1288
|
+
header3[blockSize] = blockSizeValues[header3[blockSizeBits]];
|
|
1289
|
+
if (header3[blockSize] === reserved) {
|
|
1290
|
+
return null;
|
|
1291
|
+
}
|
|
1292
|
+
header3[sampleRate] = sampleRateValues[header3[sampleRateBits]];
|
|
1293
|
+
if (header3[sampleRate] === bad) {
|
|
1294
|
+
return null;
|
|
1295
|
+
}
|
|
1296
|
+
if (data3[3] & 1) {
|
|
1297
|
+
return null;
|
|
1298
|
+
}
|
|
1299
|
+
const channelAssignment = channelAssignments[data3[3] & 240];
|
|
1300
|
+
if (channelAssignment === reserved) {
|
|
1301
|
+
return null;
|
|
1302
|
+
}
|
|
1303
|
+
header3[channels] = channelAssignment[channels];
|
|
1304
|
+
header3[channelMode] = channelAssignment[description];
|
|
1305
|
+
header3[bitDepth] = bitDepthValues[data3[3] & 14];
|
|
1306
|
+
if (header3[bitDepth] === reserved) {
|
|
1307
|
+
return null;
|
|
1308
|
+
}
|
|
1309
|
+
} else {
|
|
1310
|
+
Object.assign(header3, cachedHeader);
|
|
1311
|
+
}
|
|
1312
|
+
header3[length] = 5;
|
|
1313
|
+
data3 = yield* codecParser[readRawData](header3[length] + 8, readOffset);
|
|
1314
|
+
const decodedUtf8 = _FLACHeader._decodeUTF8Int(data3[subarray](4));
|
|
1315
|
+
if (!decodedUtf8) {
|
|
1316
|
+
return null;
|
|
1317
|
+
}
|
|
1318
|
+
if (header3[blockingStrategyBits]) {
|
|
1319
|
+
header3[sampleNumber] = decodedUtf8.value;
|
|
1320
|
+
} else {
|
|
1321
|
+
header3[frameNumber] = decodedUtf8.value;
|
|
1322
|
+
}
|
|
1323
|
+
header3[length] += decodedUtf8[length];
|
|
1324
|
+
if (header3[blockSizeBits] === 96) {
|
|
1325
|
+
if (data3[length] < header3[length])
|
|
1326
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1327
|
+
header3[blockSize] = data3[header3[length] - 1] + 1;
|
|
1328
|
+
header3[length] += 1;
|
|
1329
|
+
} else if (header3[blockSizeBits] === 112) {
|
|
1330
|
+
if (data3[length] < header3[length])
|
|
1331
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1332
|
+
header3[blockSize] = (data3[header3[length] - 1] << 8) + data3[header3[length]] + 1;
|
|
1333
|
+
header3[length] += 2;
|
|
1334
|
+
}
|
|
1335
|
+
header3[samples] = header3[blockSize];
|
|
1336
|
+
if (header3[sampleRateBits] === 12) {
|
|
1337
|
+
if (data3[length] < header3[length])
|
|
1338
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1339
|
+
header3[sampleRate] = data3[header3[length] - 1] * 1e3;
|
|
1340
|
+
header3[length] += 1;
|
|
1341
|
+
} else if (header3[sampleRateBits] === 13) {
|
|
1342
|
+
if (data3[length] < header3[length])
|
|
1343
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1344
|
+
header3[sampleRate] = (data3[header3[length] - 1] << 8) + data3[header3[length]];
|
|
1345
|
+
header3[length] += 2;
|
|
1346
|
+
} else if (header3[sampleRateBits] === 14) {
|
|
1347
|
+
if (data3[length] < header3[length])
|
|
1348
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1349
|
+
header3[sampleRate] = ((data3[header3[length] - 1] << 8) + data3[header3[length]]) * 10;
|
|
1350
|
+
header3[length] += 2;
|
|
1351
|
+
}
|
|
1352
|
+
if (data3[length] < header3[length])
|
|
1353
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1354
|
+
header3[crc] = data3[header3[length] - 1];
|
|
1355
|
+
if (header3[crc] !== crc8(data3[subarray](0, header3[length] - 1))) {
|
|
1356
|
+
return null;
|
|
1357
|
+
}
|
|
1358
|
+
{
|
|
1359
|
+
if (!cachedHeader) {
|
|
1360
|
+
const {
|
|
1361
|
+
blockingStrategyBits: blockingStrategyBits2,
|
|
1362
|
+
frameNumber: frameNumber2,
|
|
1363
|
+
sampleNumber: sampleNumber2,
|
|
1364
|
+
samples: samples2,
|
|
1365
|
+
sampleRateBits: sampleRateBits2,
|
|
1366
|
+
blockSizeBits: blockSizeBits2,
|
|
1367
|
+
crc: crc2,
|
|
1368
|
+
length: length2,
|
|
1369
|
+
...codecUpdateFields
|
|
1370
|
+
} = header3;
|
|
1371
|
+
headerCache[setHeader](key, header3, codecUpdateFields);
|
|
1372
|
+
}
|
|
1373
|
+
}
|
|
1374
|
+
return new _FLACHeader(header3);
|
|
1375
|
+
}
|
|
1376
|
+
/**
|
|
1377
|
+
* @private
|
|
1378
|
+
* Call FLACHeader.getHeader(Array<Uint8>) to get instance
|
|
1379
|
+
*/
|
|
1380
|
+
constructor(header3) {
|
|
1381
|
+
super(header3);
|
|
1382
|
+
this[crc16] = null;
|
|
1383
|
+
this[blockingStrategy] = header3[blockingStrategy];
|
|
1384
|
+
this[blockSize] = header3[blockSize];
|
|
1385
|
+
this[frameNumber] = header3[frameNumber];
|
|
1386
|
+
this[sampleNumber] = header3[sampleNumber];
|
|
1387
|
+
this[streamInfo] = null;
|
|
1388
|
+
}
|
|
1389
|
+
};
|
|
1390
|
+
|
|
1391
|
+
// ../../node_modules/codec-parser/src/codecs/flac/FLACParser.js
|
|
1392
|
+
var MIN_FLAC_FRAME_SIZE = 2;
|
|
1393
|
+
var MAX_FLAC_FRAME_SIZE = 512 * 1024;
|
|
1394
|
+
var FLACParser = class extends Parser {
|
|
1395
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
1396
|
+
super(codecParser, headerCache);
|
|
1397
|
+
this.Frame = FLACFrame;
|
|
1398
|
+
this.Header = FLACHeader;
|
|
1399
|
+
onCodec(this[codec]);
|
|
1400
|
+
}
|
|
1401
|
+
get [codec]() {
|
|
1402
|
+
return "flac";
|
|
1403
|
+
}
|
|
1404
|
+
*_getNextFrameSyncOffset(offset) {
|
|
1405
|
+
const data3 = yield* this._codecParser[readRawData](2, 0);
|
|
1406
|
+
const dataLength = data3[length] - 2;
|
|
1407
|
+
while (offset < dataLength) {
|
|
1408
|
+
const firstByte = data3[offset];
|
|
1409
|
+
if (firstByte === 255) {
|
|
1410
|
+
const secondByte = data3[offset + 1];
|
|
1411
|
+
if (secondByte === 248 || secondByte === 249) break;
|
|
1412
|
+
if (secondByte !== 255) offset++;
|
|
1413
|
+
}
|
|
1414
|
+
offset++;
|
|
1415
|
+
}
|
|
1416
|
+
return offset;
|
|
1417
|
+
}
|
|
1418
|
+
*[parseFrame]() {
|
|
1419
|
+
do {
|
|
1420
|
+
const header3 = yield* FLACHeader[getHeader](
|
|
1421
|
+
this._codecParser,
|
|
1422
|
+
this._headerCache,
|
|
1423
|
+
0
|
|
1424
|
+
);
|
|
1425
|
+
if (header3) {
|
|
1426
|
+
let nextHeaderOffset = headerStore.get(header3)[length] + MIN_FLAC_FRAME_SIZE;
|
|
1427
|
+
while (nextHeaderOffset <= MAX_FLAC_FRAME_SIZE) {
|
|
1428
|
+
if (this._codecParser._flushing || (yield* FLACHeader[getHeader](
|
|
1429
|
+
this._codecParser,
|
|
1430
|
+
this._headerCache,
|
|
1431
|
+
nextHeaderOffset
|
|
1432
|
+
))) {
|
|
1433
|
+
let frameData = yield* this._codecParser[readRawData](nextHeaderOffset);
|
|
1434
|
+
if (!this._codecParser._flushing)
|
|
1435
|
+
frameData = frameData[subarray](0, nextHeaderOffset);
|
|
1436
|
+
if (FLACFrame[checkFrameFooterCrc16](frameData)) {
|
|
1437
|
+
const frame2 = new FLACFrame(frameData, header3);
|
|
1438
|
+
this._headerCache[enable]();
|
|
1439
|
+
this._codecParser[incrementRawData](nextHeaderOffset);
|
|
1440
|
+
this._codecParser[mapFrameStats](frame2);
|
|
1441
|
+
return frame2;
|
|
1442
|
+
}
|
|
1443
|
+
}
|
|
1444
|
+
nextHeaderOffset = yield* this._getNextFrameSyncOffset(
|
|
1445
|
+
nextHeaderOffset + 1
|
|
1446
|
+
);
|
|
1447
|
+
}
|
|
1448
|
+
this._codecParser[logWarning](
|
|
1449
|
+
`Unable to sync FLAC frame after searching ${nextHeaderOffset} bytes.`
|
|
1450
|
+
);
|
|
1451
|
+
this._codecParser[incrementRawData](nextHeaderOffset);
|
|
1452
|
+
} else {
|
|
1453
|
+
this._codecParser[incrementRawData](
|
|
1454
|
+
yield* this._getNextFrameSyncOffset(1)
|
|
1455
|
+
);
|
|
1456
|
+
}
|
|
1457
|
+
} while (true);
|
|
1458
|
+
}
|
|
1459
|
+
[parseOggPage](oggPage) {
|
|
1460
|
+
if (oggPage[pageSequenceNumber] === 0) {
|
|
1461
|
+
this._headerCache[enable]();
|
|
1462
|
+
this._streamInfo = oggPage[data][subarray](13);
|
|
1463
|
+
} else if (oggPage[pageSequenceNumber] === 1) {
|
|
1464
|
+
} else {
|
|
1465
|
+
oggPage[codecFrames] = frameStore.get(oggPage)[segments].map((segment) => {
|
|
1466
|
+
const header3 = FLACHeader[getHeaderFromUint8Array](
|
|
1467
|
+
segment,
|
|
1468
|
+
this._headerCache
|
|
1469
|
+
);
|
|
1470
|
+
if (header3) {
|
|
1471
|
+
return new FLACFrame(segment, header3, this._streamInfo);
|
|
1472
|
+
} else {
|
|
1473
|
+
this._codecParser[logWarning](
|
|
1474
|
+
"Failed to parse Ogg FLAC frame",
|
|
1475
|
+
"Skipping invalid FLAC frame"
|
|
1476
|
+
);
|
|
1477
|
+
}
|
|
1478
|
+
}).filter((frame2) => !!frame2);
|
|
1479
|
+
}
|
|
1480
|
+
return oggPage;
|
|
1481
|
+
}
|
|
1482
|
+
};
|
|
1483
|
+
|
|
1484
|
+
// ../../node_modules/codec-parser/src/containers/ogg/OggPageHeader.js
|
|
1485
|
+
var OggPageHeader = class _OggPageHeader {
|
|
1486
|
+
static *[getHeader](codecParser, headerCache, readOffset) {
|
|
1487
|
+
const header3 = {};
|
|
1488
|
+
let data3 = yield* codecParser[readRawData](28, readOffset);
|
|
1489
|
+
if (data3[0] !== 79 || // O
|
|
1490
|
+
data3[1] !== 103 || // g
|
|
1491
|
+
data3[2] !== 103 || // g
|
|
1492
|
+
data3[3] !== 83) {
|
|
1493
|
+
return null;
|
|
1494
|
+
}
|
|
1495
|
+
header3[streamStructureVersion] = data3[4];
|
|
1496
|
+
const zeros = data3[5] & 248;
|
|
1497
|
+
if (zeros) return null;
|
|
1498
|
+
header3[isLastPage] = !!(data3[5] & 4);
|
|
1499
|
+
header3[isFirstPage] = !!(data3[5] & 2);
|
|
1500
|
+
header3[isContinuedPacket] = !!(data3[5] & 1);
|
|
1501
|
+
const view = new dataView(uint8Array.from(data3[subarray](0, 28))[buffer]);
|
|
1502
|
+
header3[absoluteGranulePosition] = readInt64le(view, 6);
|
|
1503
|
+
header3[streamSerialNumber] = view.getInt32(14, true);
|
|
1504
|
+
header3[pageSequenceNumber] = view.getInt32(18, true);
|
|
1505
|
+
header3[pageChecksum] = view.getInt32(22, true);
|
|
1506
|
+
const pageSegmentTableLength = data3[26];
|
|
1507
|
+
header3[length] = pageSegmentTableLength + 27;
|
|
1508
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1509
|
+
header3[frameLength] = 0;
|
|
1510
|
+
header3[pageSegmentTable] = [];
|
|
1511
|
+
header3[pageSegmentBytes] = uint8Array.from(
|
|
1512
|
+
data3[subarray](27, header3[length])
|
|
1513
|
+
);
|
|
1514
|
+
for (let i = 0, segmentLength = 0; i < pageSegmentTableLength; i++) {
|
|
1515
|
+
const segmentByte = header3[pageSegmentBytes][i];
|
|
1516
|
+
header3[frameLength] += segmentByte;
|
|
1517
|
+
segmentLength += segmentByte;
|
|
1518
|
+
if (segmentByte !== 255 || i === pageSegmentTableLength - 1) {
|
|
1519
|
+
header3[pageSegmentTable].push(segmentLength);
|
|
1520
|
+
segmentLength = 0;
|
|
1521
|
+
}
|
|
1522
|
+
}
|
|
1523
|
+
return new _OggPageHeader(header3);
|
|
1524
|
+
}
|
|
1525
|
+
/**
|
|
1526
|
+
* @private
|
|
1527
|
+
* Call OggPageHeader.getHeader(Array<Uint8>) to get instance
|
|
1528
|
+
*/
|
|
1529
|
+
constructor(header3) {
|
|
1530
|
+
headerStore.set(this, header3);
|
|
1531
|
+
this[absoluteGranulePosition] = header3[absoluteGranulePosition];
|
|
1532
|
+
this[isContinuedPacket] = header3[isContinuedPacket];
|
|
1533
|
+
this[isFirstPage] = header3[isFirstPage];
|
|
1534
|
+
this[isLastPage] = header3[isLastPage];
|
|
1535
|
+
this[pageSegmentTable] = header3[pageSegmentTable];
|
|
1536
|
+
this[pageSequenceNumber] = header3[pageSequenceNumber];
|
|
1537
|
+
this[pageChecksum] = header3[pageChecksum];
|
|
1538
|
+
this[streamSerialNumber] = header3[streamSerialNumber];
|
|
1539
|
+
}
|
|
1540
|
+
};
|
|
1541
|
+
|
|
1542
|
+
// ../../node_modules/codec-parser/src/containers/ogg/OggPage.js
|
|
1543
|
+
var OggPage = class _OggPage extends Frame {
|
|
1544
|
+
static *[getFrame](codecParser, headerCache, readOffset) {
|
|
1545
|
+
const header3 = yield* OggPageHeader[getHeader](
|
|
1546
|
+
codecParser,
|
|
1547
|
+
headerCache,
|
|
1548
|
+
readOffset
|
|
1549
|
+
);
|
|
1550
|
+
if (header3) {
|
|
1551
|
+
const frameLengthValue = headerStore.get(header3)[frameLength];
|
|
1552
|
+
const headerLength = headerStore.get(header3)[length];
|
|
1553
|
+
const totalLength = headerLength + frameLengthValue;
|
|
1554
|
+
const rawDataValue = (yield* codecParser[readRawData](totalLength, 0))[subarray](0, totalLength);
|
|
1555
|
+
const frame2 = rawDataValue[subarray](headerLength, totalLength);
|
|
1556
|
+
return new _OggPage(header3, frame2, rawDataValue);
|
|
1557
|
+
} else {
|
|
1558
|
+
return null;
|
|
1559
|
+
}
|
|
1560
|
+
}
|
|
1561
|
+
constructor(header3, frame2, rawDataValue) {
|
|
1562
|
+
super(header3, frame2);
|
|
1563
|
+
frameStore.get(this)[length] = rawDataValue[length];
|
|
1564
|
+
this[codecFrames] = [];
|
|
1565
|
+
this[rawData] = rawDataValue;
|
|
1566
|
+
this[absoluteGranulePosition] = header3[absoluteGranulePosition];
|
|
1567
|
+
this[crc32] = header3[pageChecksum];
|
|
1568
|
+
this[duration] = 0;
|
|
1569
|
+
this[isContinuedPacket] = header3[isContinuedPacket];
|
|
1570
|
+
this[isFirstPage] = header3[isFirstPage];
|
|
1571
|
+
this[isLastPage] = header3[isLastPage];
|
|
1572
|
+
this[pageSequenceNumber] = header3[pageSequenceNumber];
|
|
1573
|
+
this[samples] = 0;
|
|
1574
|
+
this[streamSerialNumber] = header3[streamSerialNumber];
|
|
1575
|
+
}
|
|
1576
|
+
};
|
|
1577
|
+
|
|
1578
|
+
// ../../node_modules/codec-parser/src/codecs/opus/OpusFrame.js
|
|
1579
|
+
var OpusFrame = class extends CodecFrame {
|
|
1580
|
+
constructor(data3, header3, samples2) {
|
|
1581
|
+
super(header3, data3, samples2);
|
|
1582
|
+
}
|
|
1583
|
+
};
|
|
1584
|
+
|
|
1585
|
+
// ../../node_modules/codec-parser/src/codecs/opus/OpusHeader.js
|
|
1586
|
+
var channelMappingFamilies = {
|
|
1587
|
+
0: vorbisOpusChannelMapping.slice(0, 2),
|
|
1588
|
+
/*
|
|
1589
|
+
0: "monophonic (mono)"
|
|
1590
|
+
1: "stereo (left, right)"
|
|
1591
|
+
*/
|
|
1592
|
+
1: vorbisOpusChannelMapping
|
|
1593
|
+
/*
|
|
1594
|
+
0: "monophonic (mono)"
|
|
1595
|
+
1: "stereo (left, right)"
|
|
1596
|
+
2: "linear surround (left, center, right)"
|
|
1597
|
+
3: "quadraphonic (front left, front right, rear left, rear right)"
|
|
1598
|
+
4: "5.0 surround (front left, front center, front right, rear left, rear right)"
|
|
1599
|
+
5: "5.1 surround (front left, front center, front right, rear left, rear right, LFE)"
|
|
1600
|
+
6: "6.1 surround (front left, front center, front right, side left, side right, rear center, LFE)"
|
|
1601
|
+
7: "7.1 surround (front left, front center, front right, side left, side right, rear left, rear right, LFE)"
|
|
1602
|
+
*/
|
|
1603
|
+
// additional channel mappings are user defined
|
|
1604
|
+
};
|
|
1605
|
+
var silkOnly = "SILK-only";
|
|
1606
|
+
var celtOnly = "CELT-only";
|
|
1607
|
+
var hybrid = "Hybrid";
|
|
1608
|
+
var narrowBand = "narrowband";
|
|
1609
|
+
var mediumBand = "medium-band";
|
|
1610
|
+
var wideBand = "wideband";
|
|
1611
|
+
var superWideBand = "super-wideband";
|
|
1612
|
+
var fullBand = "fullband";
|
|
1613
|
+
var configTable = {
|
|
1614
|
+
0: { [mode]: silkOnly, [bandwidth]: narrowBand, [frameSize]: 10 },
|
|
1615
|
+
8: { [mode]: silkOnly, [bandwidth]: narrowBand, [frameSize]: 20 },
|
|
1616
|
+
16: { [mode]: silkOnly, [bandwidth]: narrowBand, [frameSize]: 40 },
|
|
1617
|
+
24: { [mode]: silkOnly, [bandwidth]: narrowBand, [frameSize]: 60 },
|
|
1618
|
+
32: { [mode]: silkOnly, [bandwidth]: mediumBand, [frameSize]: 10 },
|
|
1619
|
+
40: { [mode]: silkOnly, [bandwidth]: mediumBand, [frameSize]: 20 },
|
|
1620
|
+
48: { [mode]: silkOnly, [bandwidth]: mediumBand, [frameSize]: 40 },
|
|
1621
|
+
56: { [mode]: silkOnly, [bandwidth]: mediumBand, [frameSize]: 60 },
|
|
1622
|
+
64: { [mode]: silkOnly, [bandwidth]: wideBand, [frameSize]: 10 },
|
|
1623
|
+
72: { [mode]: silkOnly, [bandwidth]: wideBand, [frameSize]: 20 },
|
|
1624
|
+
80: { [mode]: silkOnly, [bandwidth]: wideBand, [frameSize]: 40 },
|
|
1625
|
+
88: { [mode]: silkOnly, [bandwidth]: wideBand, [frameSize]: 60 },
|
|
1626
|
+
96: { [mode]: hybrid, [bandwidth]: superWideBand, [frameSize]: 10 },
|
|
1627
|
+
104: { [mode]: hybrid, [bandwidth]: superWideBand, [frameSize]: 20 },
|
|
1628
|
+
112: { [mode]: hybrid, [bandwidth]: fullBand, [frameSize]: 10 },
|
|
1629
|
+
120: { [mode]: hybrid, [bandwidth]: fullBand, [frameSize]: 20 },
|
|
1630
|
+
128: { [mode]: celtOnly, [bandwidth]: narrowBand, [frameSize]: 2.5 },
|
|
1631
|
+
136: { [mode]: celtOnly, [bandwidth]: narrowBand, [frameSize]: 5 },
|
|
1632
|
+
144: { [mode]: celtOnly, [bandwidth]: narrowBand, [frameSize]: 10 },
|
|
1633
|
+
152: { [mode]: celtOnly, [bandwidth]: narrowBand, [frameSize]: 20 },
|
|
1634
|
+
160: { [mode]: celtOnly, [bandwidth]: wideBand, [frameSize]: 2.5 },
|
|
1635
|
+
168: { [mode]: celtOnly, [bandwidth]: wideBand, [frameSize]: 5 },
|
|
1636
|
+
176: { [mode]: celtOnly, [bandwidth]: wideBand, [frameSize]: 10 },
|
|
1637
|
+
184: { [mode]: celtOnly, [bandwidth]: wideBand, [frameSize]: 20 },
|
|
1638
|
+
192: { [mode]: celtOnly, [bandwidth]: superWideBand, [frameSize]: 2.5 },
|
|
1639
|
+
200: { [mode]: celtOnly, [bandwidth]: superWideBand, [frameSize]: 5 },
|
|
1640
|
+
208: { [mode]: celtOnly, [bandwidth]: superWideBand, [frameSize]: 10 },
|
|
1641
|
+
216: { [mode]: celtOnly, [bandwidth]: superWideBand, [frameSize]: 20 },
|
|
1642
|
+
224: { [mode]: celtOnly, [bandwidth]: fullBand, [frameSize]: 2.5 },
|
|
1643
|
+
232: { [mode]: celtOnly, [bandwidth]: fullBand, [frameSize]: 5 },
|
|
1644
|
+
240: { [mode]: celtOnly, [bandwidth]: fullBand, [frameSize]: 10 },
|
|
1645
|
+
248: { [mode]: celtOnly, [bandwidth]: fullBand, [frameSize]: 20 }
|
|
1646
|
+
};
|
|
1647
|
+
var OpusHeader = class _OpusHeader extends CodecHeader {
|
|
1648
|
+
static [getHeaderFromUint8Array](dataValue, packetData, headerCache) {
|
|
1649
|
+
const header3 = {};
|
|
1650
|
+
header3[channels] = dataValue[9];
|
|
1651
|
+
header3[channelMappingFamily] = dataValue[18];
|
|
1652
|
+
header3[length] = header3[channelMappingFamily] !== 0 ? 21 + header3[channels] : 19;
|
|
1653
|
+
if (dataValue[length] < header3[length])
|
|
1654
|
+
throw new Error("Out of data while inside an Ogg Page");
|
|
1655
|
+
const packetMode = packetData[0] & 3;
|
|
1656
|
+
const packetLength = packetMode === 3 ? 2 : 1;
|
|
1657
|
+
const key = bytesToString(dataValue[subarray](0, header3[length])) + bytesToString(packetData[subarray](0, packetLength));
|
|
1658
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
1659
|
+
if (cachedHeader) return new _OpusHeader(cachedHeader);
|
|
1660
|
+
if (key.substr(0, 8) !== "OpusHead") {
|
|
1661
|
+
return null;
|
|
1662
|
+
}
|
|
1663
|
+
if (dataValue[8] !== 1) return null;
|
|
1664
|
+
header3[data] = uint8Array.from(dataValue[subarray](0, header3[length]));
|
|
1665
|
+
const view = new dataView(header3[data][buffer]);
|
|
1666
|
+
header3[bitDepth] = 16;
|
|
1667
|
+
header3[preSkip] = view.getUint16(10, true);
|
|
1668
|
+
header3[inputSampleRate] = view.getUint32(12, true);
|
|
1669
|
+
header3[sampleRate] = rate48000;
|
|
1670
|
+
header3[outputGain] = view.getInt16(16, true);
|
|
1671
|
+
if (header3[channelMappingFamily] in channelMappingFamilies) {
|
|
1672
|
+
header3[channelMode] = channelMappingFamilies[header3[channelMappingFamily]][header3[channels] - 1];
|
|
1673
|
+
if (!header3[channelMode]) return null;
|
|
1674
|
+
}
|
|
1675
|
+
if (header3[channelMappingFamily] !== 0) {
|
|
1676
|
+
header3[streamCount] = dataValue[19];
|
|
1677
|
+
header3[coupledStreamCount] = dataValue[20];
|
|
1678
|
+
header3[channelMappingTable] = [
|
|
1679
|
+
...dataValue[subarray](21, header3[channels] + 21)
|
|
1680
|
+
];
|
|
1681
|
+
}
|
|
1682
|
+
const packetConfig = configTable[248 & packetData[0]];
|
|
1683
|
+
header3[mode] = packetConfig[mode];
|
|
1684
|
+
header3[bandwidth] = packetConfig[bandwidth];
|
|
1685
|
+
header3[frameSize] = packetConfig[frameSize];
|
|
1686
|
+
switch (packetMode) {
|
|
1687
|
+
case 0:
|
|
1688
|
+
header3[frameCount] = 1;
|
|
1689
|
+
break;
|
|
1690
|
+
case 1:
|
|
1691
|
+
// 1: 2 frames in the packet, each with equal compressed size
|
|
1692
|
+
case 2:
|
|
1693
|
+
header3[frameCount] = 2;
|
|
1694
|
+
break;
|
|
1695
|
+
case 3:
|
|
1696
|
+
header3[isVbr] = !!(128 & packetData[1]);
|
|
1697
|
+
header3[hasOpusPadding] = !!(64 & packetData[1]);
|
|
1698
|
+
header3[frameCount] = 63 & packetData[1];
|
|
1699
|
+
break;
|
|
1700
|
+
default:
|
|
1701
|
+
return null;
|
|
1702
|
+
}
|
|
1703
|
+
{
|
|
1704
|
+
const {
|
|
1705
|
+
length: length2,
|
|
1706
|
+
data: headerData,
|
|
1707
|
+
channelMappingFamily: channelMappingFamily2,
|
|
1708
|
+
...codecUpdateFields
|
|
1709
|
+
} = header3;
|
|
1710
|
+
headerCache[setHeader](key, header3, codecUpdateFields);
|
|
1711
|
+
}
|
|
1712
|
+
return new _OpusHeader(header3);
|
|
1713
|
+
}
|
|
1714
|
+
/**
|
|
1715
|
+
* @private
|
|
1716
|
+
* Call OpusHeader.getHeader(Array<Uint8>) to get instance
|
|
1717
|
+
*/
|
|
1718
|
+
constructor(header3) {
|
|
1719
|
+
super(header3);
|
|
1720
|
+
this[data] = header3[data];
|
|
1721
|
+
this[bandwidth] = header3[bandwidth];
|
|
1722
|
+
this[channelMappingFamily] = header3[channelMappingFamily];
|
|
1723
|
+
this[channelMappingTable] = header3[channelMappingTable];
|
|
1724
|
+
this[coupledStreamCount] = header3[coupledStreamCount];
|
|
1725
|
+
this[frameCount] = header3[frameCount];
|
|
1726
|
+
this[frameSize] = header3[frameSize];
|
|
1727
|
+
this[hasOpusPadding] = header3[hasOpusPadding];
|
|
1728
|
+
this[inputSampleRate] = header3[inputSampleRate];
|
|
1729
|
+
this[isVbr] = header3[isVbr];
|
|
1730
|
+
this[mode] = header3[mode];
|
|
1731
|
+
this[outputGain] = header3[outputGain];
|
|
1732
|
+
this[preSkip] = header3[preSkip];
|
|
1733
|
+
this[streamCount] = header3[streamCount];
|
|
1734
|
+
}
|
|
1735
|
+
};
|
|
1736
|
+
|
|
1737
|
+
// ../../node_modules/codec-parser/src/codecs/opus/OpusParser.js
|
|
1738
|
+
var OpusParser = class extends Parser {
|
|
1739
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
1740
|
+
super(codecParser, headerCache);
|
|
1741
|
+
this.Frame = OpusFrame;
|
|
1742
|
+
this.Header = OpusHeader;
|
|
1743
|
+
onCodec(this[codec]);
|
|
1744
|
+
this._identificationHeader = null;
|
|
1745
|
+
this._preSkipRemaining = null;
|
|
1746
|
+
}
|
|
1747
|
+
get [codec]() {
|
|
1748
|
+
return "opus";
|
|
1749
|
+
}
|
|
1750
|
+
/**
|
|
1751
|
+
* @todo implement continued page support
|
|
1752
|
+
*/
|
|
1753
|
+
[parseOggPage](oggPage) {
|
|
1754
|
+
if (oggPage[pageSequenceNumber] === 0) {
|
|
1755
|
+
this._headerCache[enable]();
|
|
1756
|
+
this._identificationHeader = oggPage[data];
|
|
1757
|
+
} else if (oggPage[pageSequenceNumber] === 1) {
|
|
1758
|
+
} else {
|
|
1759
|
+
oggPage[codecFrames] = frameStore.get(oggPage)[segments].map((segment) => {
|
|
1760
|
+
const header3 = OpusHeader[getHeaderFromUint8Array](
|
|
1761
|
+
this._identificationHeader,
|
|
1762
|
+
segment,
|
|
1763
|
+
this._headerCache
|
|
1764
|
+
);
|
|
1765
|
+
if (header3) {
|
|
1766
|
+
if (this._preSkipRemaining === null)
|
|
1767
|
+
this._preSkipRemaining = header3[preSkip];
|
|
1768
|
+
let samples2 = header3[frameSize] * header3[frameCount] / 1e3 * header3[sampleRate];
|
|
1769
|
+
if (this._preSkipRemaining > 0) {
|
|
1770
|
+
this._preSkipRemaining -= samples2;
|
|
1771
|
+
samples2 = this._preSkipRemaining < 0 ? -this._preSkipRemaining : 0;
|
|
1772
|
+
}
|
|
1773
|
+
return new OpusFrame(segment, header3, samples2);
|
|
1774
|
+
}
|
|
1775
|
+
this._codecParser[logError2](
|
|
1776
|
+
"Failed to parse Ogg Opus Header",
|
|
1777
|
+
"Not a valid Ogg Opus file"
|
|
1778
|
+
);
|
|
1779
|
+
});
|
|
1780
|
+
}
|
|
1781
|
+
return oggPage;
|
|
1782
|
+
}
|
|
1783
|
+
};
|
|
1784
|
+
|
|
1785
|
+
// ../../node_modules/codec-parser/src/codecs/vorbis/VorbisFrame.js
|
|
1786
|
+
var VorbisFrame = class extends CodecFrame {
|
|
1787
|
+
constructor(data3, header3, samples2) {
|
|
1788
|
+
super(header3, data3, samples2);
|
|
1789
|
+
}
|
|
1790
|
+
};
|
|
1791
|
+
|
|
1792
|
+
// ../../node_modules/codec-parser/src/codecs/vorbis/VorbisHeader.js
|
|
1793
|
+
var blockSizes = {
|
|
1794
|
+
// 0b0110: 64,
|
|
1795
|
+
// 0b0111: 128,
|
|
1796
|
+
// 0b1000: 256,
|
|
1797
|
+
// 0b1001: 512,
|
|
1798
|
+
// 0b1010: 1024,
|
|
1799
|
+
// 0b1011: 2048,
|
|
1800
|
+
// 0b1100: 4096,
|
|
1801
|
+
// 0b1101: 8192
|
|
1802
|
+
};
|
|
1803
|
+
for (let i = 0; i < 8; i++) blockSizes[i + 6] = 2 ** (6 + i);
|
|
1804
|
+
var VorbisHeader = class _VorbisHeader extends CodecHeader {
|
|
1805
|
+
static [getHeaderFromUint8Array](dataValue, headerCache, vorbisCommentsData, vorbisSetupData) {
|
|
1806
|
+
if (dataValue[length] < 30)
|
|
1807
|
+
throw new Error("Out of data while inside an Ogg Page");
|
|
1808
|
+
const key = bytesToString(dataValue[subarray](0, 30));
|
|
1809
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
1810
|
+
if (cachedHeader) return new _VorbisHeader(cachedHeader);
|
|
1811
|
+
const header3 = { [length]: 30 };
|
|
1812
|
+
if (key.substr(0, 7) !== "vorbis") {
|
|
1813
|
+
return null;
|
|
1814
|
+
}
|
|
1815
|
+
header3[data] = uint8Array.from(dataValue[subarray](0, 30));
|
|
1816
|
+
const view = new dataView(header3[data][buffer]);
|
|
1817
|
+
header3[version] = view.getUint32(7, true);
|
|
1818
|
+
if (header3[version] !== 0) return null;
|
|
1819
|
+
header3[channels] = dataValue[11];
|
|
1820
|
+
header3[channelMode] = vorbisOpusChannelMapping[header3[channels] - 1] || "application defined";
|
|
1821
|
+
header3[sampleRate] = view.getUint32(12, true);
|
|
1822
|
+
header3[bitrateMaximum] = view.getInt32(16, true);
|
|
1823
|
+
header3[bitrateNominal] = view.getInt32(20, true);
|
|
1824
|
+
header3[bitrateMinimum] = view.getInt32(24, true);
|
|
1825
|
+
header3[blocksize1] = blockSizes[(dataValue[28] & 240) >> 4];
|
|
1826
|
+
header3[blocksize0] = blockSizes[dataValue[28] & 15];
|
|
1827
|
+
if (header3[blocksize0] > header3[blocksize1]) return null;
|
|
1828
|
+
if (dataValue[29] !== 1) return null;
|
|
1829
|
+
header3[bitDepth] = 32;
|
|
1830
|
+
header3[vorbisSetup] = vorbisSetupData;
|
|
1831
|
+
header3[vorbisComments] = vorbisCommentsData;
|
|
1832
|
+
{
|
|
1833
|
+
const {
|
|
1834
|
+
length: length2,
|
|
1835
|
+
data: data3,
|
|
1836
|
+
version: version2,
|
|
1837
|
+
vorbisSetup: vorbisSetup3,
|
|
1838
|
+
vorbisComments: vorbisComments3,
|
|
1839
|
+
...codecUpdateFields
|
|
1840
|
+
} = header3;
|
|
1841
|
+
headerCache[setHeader](key, header3, codecUpdateFields);
|
|
1842
|
+
}
|
|
1843
|
+
return new _VorbisHeader(header3);
|
|
1844
|
+
}
|
|
1845
|
+
/**
|
|
1846
|
+
* @private
|
|
1847
|
+
* Call VorbisHeader.getHeader(Array<Uint8>) to get instance
|
|
1848
|
+
*/
|
|
1849
|
+
constructor(header3) {
|
|
1850
|
+
super(header3);
|
|
1851
|
+
this[bitrateMaximum] = header3[bitrateMaximum];
|
|
1852
|
+
this[bitrateMinimum] = header3[bitrateMinimum];
|
|
1853
|
+
this[bitrateNominal] = header3[bitrateNominal];
|
|
1854
|
+
this[blocksize0] = header3[blocksize0];
|
|
1855
|
+
this[blocksize1] = header3[blocksize1];
|
|
1856
|
+
this[data] = header3[data];
|
|
1857
|
+
this[vorbisComments] = header3[vorbisComments];
|
|
1858
|
+
this[vorbisSetup] = header3[vorbisSetup];
|
|
1859
|
+
}
|
|
1860
|
+
};
|
|
1861
|
+
|
|
1862
|
+
// ../../node_modules/codec-parser/src/codecs/vorbis/VorbisParser.js
|
|
1863
|
+
var VorbisParser = class extends Parser {
|
|
1864
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
1865
|
+
super(codecParser, headerCache);
|
|
1866
|
+
this.Frame = VorbisFrame;
|
|
1867
|
+
onCodec(this[codec]);
|
|
1868
|
+
this._identificationHeader = null;
|
|
1869
|
+
this._setupComplete = false;
|
|
1870
|
+
this._prevBlockSize = null;
|
|
1871
|
+
}
|
|
1872
|
+
get [codec]() {
|
|
1873
|
+
return vorbis;
|
|
1874
|
+
}
|
|
1875
|
+
[parseOggPage](oggPage) {
|
|
1876
|
+
oggPage[codecFrames] = [];
|
|
1877
|
+
for (const oggPageSegment of frameStore.get(oggPage)[segments]) {
|
|
1878
|
+
if (oggPageSegment[0] === 1) {
|
|
1879
|
+
this._headerCache[enable]();
|
|
1880
|
+
this._identificationHeader = oggPage[data];
|
|
1881
|
+
this._setupComplete = false;
|
|
1882
|
+
} else if (oggPageSegment[0] === 3) {
|
|
1883
|
+
this._vorbisComments = oggPageSegment;
|
|
1884
|
+
} else if (oggPageSegment[0] === 5) {
|
|
1885
|
+
this._vorbisSetup = oggPageSegment;
|
|
1886
|
+
this._mode = this._parseSetupHeader(oggPageSegment);
|
|
1887
|
+
this._setupComplete = true;
|
|
1888
|
+
} else if (this._setupComplete) {
|
|
1889
|
+
const header3 = VorbisHeader[getHeaderFromUint8Array](
|
|
1890
|
+
this._identificationHeader,
|
|
1891
|
+
this._headerCache,
|
|
1892
|
+
this._vorbisComments,
|
|
1893
|
+
this._vorbisSetup
|
|
1894
|
+
);
|
|
1895
|
+
if (header3) {
|
|
1896
|
+
oggPage[codecFrames].push(
|
|
1897
|
+
new VorbisFrame(
|
|
1898
|
+
oggPageSegment,
|
|
1899
|
+
header3,
|
|
1900
|
+
this._getSamples(oggPageSegment, header3)
|
|
1901
|
+
)
|
|
1902
|
+
);
|
|
1903
|
+
} else {
|
|
1904
|
+
this._codecParser[logError](
|
|
1905
|
+
"Failed to parse Ogg Vorbis Header",
|
|
1906
|
+
"Not a valid Ogg Vorbis file"
|
|
1907
|
+
);
|
|
1908
|
+
}
|
|
1909
|
+
}
|
|
1910
|
+
}
|
|
1911
|
+
return oggPage;
|
|
1912
|
+
}
|
|
1913
|
+
_getSamples(segment, header3) {
|
|
1914
|
+
const blockFlag = this._mode.blockFlags[segment[0] >> 1 & this._mode.mask];
|
|
1915
|
+
const currentBlockSize = blockFlag ? header3[blocksize1] : header3[blocksize0];
|
|
1916
|
+
const samplesValue = this._prevBlockSize === null ? 0 : (this._prevBlockSize + currentBlockSize) / 4;
|
|
1917
|
+
this._prevBlockSize = currentBlockSize;
|
|
1918
|
+
return samplesValue;
|
|
1919
|
+
}
|
|
1920
|
+
// https://gitlab.xiph.org/xiph/liboggz/-/blob/master/src/liboggz/oggz_auto.c#L911
|
|
1921
|
+
// https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/vorbis_parser.c
|
|
1922
|
+
/*
|
|
1923
|
+
* This is the format of the mode data at the end of the packet for all
|
|
1924
|
+
* Vorbis Version 1 :
|
|
1925
|
+
*
|
|
1926
|
+
* [ 6:number_of_modes ]
|
|
1927
|
+
* [ 1:size | 16:window_type(0) | 16:transform_type(0) | 8:mapping ]
|
|
1928
|
+
* [ 1:size | 16:window_type(0) | 16:transform_type(0) | 8:mapping ]
|
|
1929
|
+
* [ 1:size | 16:window_type(0) | 16:transform_type(0) | 8:mapping ]
|
|
1930
|
+
* [ 1:framing(1) ]
|
|
1931
|
+
*
|
|
1932
|
+
* e.g.:
|
|
1933
|
+
*
|
|
1934
|
+
* MsB LsB
|
|
1935
|
+
* <-
|
|
1936
|
+
* 0 0 0 0 0 1 0 0
|
|
1937
|
+
* 0 0 1 0 0 0 0 0
|
|
1938
|
+
* 0 0 1 0 0 0 0 0
|
|
1939
|
+
* 0 0 1|0 0 0 0 0
|
|
1940
|
+
* 0 0 0 0|0|0 0 0
|
|
1941
|
+
* 0 0 0 0 0 0 0 0
|
|
1942
|
+
* 0 0 0 0|0 0 0 0
|
|
1943
|
+
* 0 0 0 0 0 0 0 0
|
|
1944
|
+
* 0 0 0 0|0 0 0 0
|
|
1945
|
+
* 0 0 0|1|0 0 0 0 |
|
|
1946
|
+
* 0 0 0 0 0 0 0 0 V
|
|
1947
|
+
* 0 0 0|0 0 0 0 0
|
|
1948
|
+
* 0 0 0 0 0 0 0 0
|
|
1949
|
+
* 0 0|1 0 0 0 0 0
|
|
1950
|
+
*
|
|
1951
|
+
* The simplest way to approach this is to start at the end
|
|
1952
|
+
* and read backwards to determine the mode configuration.
|
|
1953
|
+
*
|
|
1954
|
+
* liboggz and ffmpeg both use this method.
|
|
1955
|
+
*/
|
|
1956
|
+
_parseSetupHeader(setup) {
|
|
1957
|
+
const bitReader = new BitReader(setup);
|
|
1958
|
+
const mode2 = {
|
|
1959
|
+
count: 0,
|
|
1960
|
+
blockFlags: []
|
|
1961
|
+
};
|
|
1962
|
+
while ((bitReader.read(1) & 1) !== 1) {
|
|
1963
|
+
}
|
|
1964
|
+
let modeBits;
|
|
1965
|
+
while (mode2.count < 64 && bitReader.position > 0) {
|
|
1966
|
+
reverse(bitReader.read(8));
|
|
1967
|
+
let currentByte = 0;
|
|
1968
|
+
while (bitReader.read(8) === 0 && currentByte++ < 3) {
|
|
1969
|
+
}
|
|
1970
|
+
if (currentByte === 4) {
|
|
1971
|
+
modeBits = bitReader.read(7);
|
|
1972
|
+
mode2.blockFlags.unshift(modeBits & 1);
|
|
1973
|
+
bitReader.position += 6;
|
|
1974
|
+
mode2.count++;
|
|
1975
|
+
} else {
|
|
1976
|
+
if (((reverse(modeBits) & 126) >> 1) + 1 !== mode2.count) {
|
|
1977
|
+
this._codecParser[logWarning](
|
|
1978
|
+
"vorbis derived mode count did not match actual mode count"
|
|
1979
|
+
);
|
|
1980
|
+
}
|
|
1981
|
+
break;
|
|
1982
|
+
}
|
|
1983
|
+
}
|
|
1984
|
+
mode2.mask = (1 << Math.log2(mode2.count)) - 1;
|
|
1985
|
+
return mode2;
|
|
1986
|
+
}
|
|
1987
|
+
};
|
|
1988
|
+
|
|
1989
|
+
// ../../node_modules/codec-parser/src/containers/ogg/OggParser.js
|
|
1990
|
+
var OggStream = class {
|
|
1991
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
1992
|
+
this._codecParser = codecParser;
|
|
1993
|
+
this._headerCache = headerCache;
|
|
1994
|
+
this._onCodec = onCodec;
|
|
1995
|
+
this._continuedPacket = new uint8Array();
|
|
1996
|
+
this._codec = null;
|
|
1997
|
+
this._isSupported = null;
|
|
1998
|
+
this._previousAbsoluteGranulePosition = null;
|
|
1999
|
+
}
|
|
2000
|
+
get [codec]() {
|
|
2001
|
+
return this._codec || "";
|
|
2002
|
+
}
|
|
2003
|
+
_updateCodec(codec2, Parser2) {
|
|
2004
|
+
if (this._codec !== codec2) {
|
|
2005
|
+
this._headerCache[reset]();
|
|
2006
|
+
this._parser = new Parser2(
|
|
2007
|
+
this._codecParser,
|
|
2008
|
+
this._headerCache,
|
|
2009
|
+
this._onCodec
|
|
2010
|
+
);
|
|
2011
|
+
this._codec = codec2;
|
|
2012
|
+
}
|
|
2013
|
+
}
|
|
2014
|
+
_checkCodecSupport({ data: data3 }) {
|
|
2015
|
+
const idString = bytesToString(data3[subarray](0, 8));
|
|
2016
|
+
switch (idString) {
|
|
2017
|
+
case "fishead\0":
|
|
2018
|
+
return false;
|
|
2019
|
+
// ignore ogg skeleton packets
|
|
2020
|
+
case "OpusHead":
|
|
2021
|
+
this._updateCodec("opus", OpusParser);
|
|
2022
|
+
return true;
|
|
2023
|
+
case (/^\x7fFLAC/.test(idString) && idString):
|
|
2024
|
+
this._updateCodec("flac", FLACParser);
|
|
2025
|
+
return true;
|
|
2026
|
+
case (/^\x01vorbis/.test(idString) && idString):
|
|
2027
|
+
this._updateCodec(vorbis, VorbisParser);
|
|
2028
|
+
return true;
|
|
2029
|
+
default:
|
|
2030
|
+
return false;
|
|
2031
|
+
}
|
|
2032
|
+
}
|
|
2033
|
+
_checkPageSequenceNumber(oggPage) {
|
|
2034
|
+
if (oggPage[pageSequenceNumber] !== this._pageSequenceNumber + 1 && this._pageSequenceNumber > 1 && oggPage[pageSequenceNumber] > 1) {
|
|
2035
|
+
this._codecParser[logWarning](
|
|
2036
|
+
"Unexpected gap in Ogg Page Sequence Number.",
|
|
2037
|
+
`Expected: ${this._pageSequenceNumber + 1}, Got: ${oggPage[pageSequenceNumber]}`
|
|
2038
|
+
);
|
|
2039
|
+
}
|
|
2040
|
+
this._pageSequenceNumber = oggPage[pageSequenceNumber];
|
|
2041
|
+
}
|
|
2042
|
+
_parsePage(oggPage) {
|
|
2043
|
+
if (this._isSupported === null) {
|
|
2044
|
+
this._pageSequenceNumber = oggPage[pageSequenceNumber];
|
|
2045
|
+
this._isSupported = this._checkCodecSupport(oggPage);
|
|
2046
|
+
}
|
|
2047
|
+
this._checkPageSequenceNumber(oggPage);
|
|
2048
|
+
const oggPageStore = frameStore.get(oggPage);
|
|
2049
|
+
const headerData = headerStore.get(oggPageStore[header]);
|
|
2050
|
+
let offset = 0;
|
|
2051
|
+
oggPageStore[segments] = headerData[pageSegmentTable].map(
|
|
2052
|
+
(segmentLength) => oggPage[data][subarray](offset, offset += segmentLength)
|
|
2053
|
+
);
|
|
2054
|
+
if (this._continuedPacket[length]) {
|
|
2055
|
+
oggPageStore[segments][0] = concatBuffers(
|
|
2056
|
+
this._continuedPacket,
|
|
2057
|
+
oggPageStore[segments][0]
|
|
2058
|
+
);
|
|
2059
|
+
this._continuedPacket = new uint8Array();
|
|
2060
|
+
}
|
|
2061
|
+
if (headerData[pageSegmentBytes][headerData[pageSegmentBytes][length] - 1] === 255) {
|
|
2062
|
+
this._continuedPacket = concatBuffers(
|
|
2063
|
+
this._continuedPacket,
|
|
2064
|
+
oggPageStore[segments].pop()
|
|
2065
|
+
);
|
|
2066
|
+
}
|
|
2067
|
+
if (this._previousAbsoluteGranulePosition !== null) {
|
|
2068
|
+
oggPage[samples] = Number(
|
|
2069
|
+
oggPage[absoluteGranulePosition] - this._previousAbsoluteGranulePosition
|
|
2070
|
+
);
|
|
2071
|
+
}
|
|
2072
|
+
this._previousAbsoluteGranulePosition = oggPage[absoluteGranulePosition];
|
|
2073
|
+
if (this._isSupported) {
|
|
2074
|
+
const frame2 = this._parser[parseOggPage](oggPage);
|
|
2075
|
+
this._codecParser[mapFrameStats](frame2);
|
|
2076
|
+
return frame2;
|
|
2077
|
+
} else {
|
|
2078
|
+
return oggPage;
|
|
2079
|
+
}
|
|
2080
|
+
}
|
|
2081
|
+
};
|
|
2082
|
+
var OggParser = class extends Parser {
|
|
2083
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
2084
|
+
super(codecParser, headerCache);
|
|
2085
|
+
this._onCodec = onCodec;
|
|
2086
|
+
this.Frame = OggPage;
|
|
2087
|
+
this.Header = OggPageHeader;
|
|
2088
|
+
this._streams = /* @__PURE__ */ new Map();
|
|
2089
|
+
this._currentSerialNumber = null;
|
|
2090
|
+
}
|
|
2091
|
+
get [codec]() {
|
|
2092
|
+
const oggStream = this._streams.get(this._currentSerialNumber);
|
|
2093
|
+
return oggStream ? oggStream.codec : "";
|
|
2094
|
+
}
|
|
2095
|
+
*[parseFrame]() {
|
|
2096
|
+
const oggPage = yield* this[fixedLengthFrameSync](true);
|
|
2097
|
+
this._currentSerialNumber = oggPage[streamSerialNumber];
|
|
2098
|
+
let oggStream = this._streams.get(this._currentSerialNumber);
|
|
2099
|
+
if (!oggStream) {
|
|
2100
|
+
oggStream = new OggStream(
|
|
2101
|
+
this._codecParser,
|
|
2102
|
+
this._headerCache,
|
|
2103
|
+
this._onCodec
|
|
2104
|
+
);
|
|
2105
|
+
this._streams.set(this._currentSerialNumber, oggStream);
|
|
2106
|
+
}
|
|
2107
|
+
if (oggPage[isLastPage]) this._streams.delete(this._currentSerialNumber);
|
|
2108
|
+
return oggStream._parsePage(oggPage);
|
|
2109
|
+
}
|
|
2110
|
+
};
|
|
2111
|
+
|
|
2112
|
+
// ../../node_modules/codec-parser/src/CodecParser.js
|
|
2113
|
+
var noOp = () => {
|
|
2114
|
+
};
|
|
2115
|
+
var CodecParser = class {
|
|
2116
|
+
constructor(mimeType2, {
|
|
2117
|
+
onCodec,
|
|
2118
|
+
onCodecHeader,
|
|
2119
|
+
onCodecUpdate,
|
|
2120
|
+
enableLogging = false,
|
|
2121
|
+
enableFrameCRC32 = true
|
|
2122
|
+
} = {}) {
|
|
2123
|
+
this._inputMimeType = mimeType2;
|
|
2124
|
+
this._onCodec = onCodec || noOp;
|
|
2125
|
+
this._onCodecHeader = onCodecHeader || noOp;
|
|
2126
|
+
this._onCodecUpdate = onCodecUpdate;
|
|
2127
|
+
this._enableLogging = enableLogging;
|
|
2128
|
+
this._crc32 = enableFrameCRC32 ? crc32Function : noOp;
|
|
2129
|
+
this[reset]();
|
|
2130
|
+
}
|
|
2131
|
+
/**
|
|
2132
|
+
* @public
|
|
2133
|
+
* @returns The detected codec
|
|
2134
|
+
*/
|
|
2135
|
+
get [codec]() {
|
|
2136
|
+
return this._parser ? this._parser[codec] : "";
|
|
2137
|
+
}
|
|
2138
|
+
[reset]() {
|
|
2139
|
+
this._headerCache = new HeaderCache(
|
|
2140
|
+
this._onCodecHeader,
|
|
2141
|
+
this._onCodecUpdate
|
|
2142
|
+
);
|
|
2143
|
+
this._generator = this._getGenerator();
|
|
2144
|
+
this._generator.next();
|
|
2145
|
+
}
|
|
2146
|
+
/**
|
|
2147
|
+
* @public
|
|
2148
|
+
* @description Generator function that yields any buffered CodecFrames and resets the CodecParser
|
|
2149
|
+
* @returns {Iterable<CodecFrame|OggPage>} Iterator that operates over the codec data.
|
|
2150
|
+
* @yields {CodecFrame|OggPage} Parsed codec or ogg page data
|
|
2151
|
+
*/
|
|
2152
|
+
*flush() {
|
|
2153
|
+
this._flushing = true;
|
|
2154
|
+
for (let i = this._generator.next(); i.value; i = this._generator.next()) {
|
|
2155
|
+
yield i.value;
|
|
2156
|
+
}
|
|
2157
|
+
this._flushing = false;
|
|
2158
|
+
this[reset]();
|
|
2159
|
+
}
|
|
2160
|
+
/**
|
|
2161
|
+
* @public
|
|
2162
|
+
* @description Generator function takes in a Uint8Array of data and returns a CodecFrame from the data for each iteration
|
|
2163
|
+
* @param {Uint8Array} chunk Next chunk of codec data to read
|
|
2164
|
+
* @returns {Iterable<CodecFrame|OggPage>} Iterator that operates over the codec data.
|
|
2165
|
+
* @yields {CodecFrame|OggPage} Parsed codec or ogg page data
|
|
2166
|
+
*/
|
|
2167
|
+
*parseChunk(chunk) {
|
|
2168
|
+
for (let i = this._generator.next(chunk); i.value; i = this._generator.next()) {
|
|
2169
|
+
yield i.value;
|
|
2170
|
+
}
|
|
2171
|
+
}
|
|
2172
|
+
/**
|
|
2173
|
+
* @public
|
|
2174
|
+
* @description Parses an entire file and returns all of the contained frames.
|
|
2175
|
+
* @param {Uint8Array} fileData Coded data to read
|
|
2176
|
+
* @returns {Array<CodecFrame|OggPage>} CodecFrames
|
|
2177
|
+
*/
|
|
2178
|
+
parseAll(fileData) {
|
|
2179
|
+
return [...this.parseChunk(fileData), ...this.flush()];
|
|
2180
|
+
}
|
|
2181
|
+
/**
|
|
2182
|
+
* @private
|
|
2183
|
+
*/
|
|
2184
|
+
*_getGenerator() {
|
|
2185
|
+
if (this._inputMimeType.match(/aac/)) {
|
|
2186
|
+
this._parser = new AACParser(this, this._headerCache, this._onCodec);
|
|
2187
|
+
} else if (this._inputMimeType.match(/mpeg/)) {
|
|
2188
|
+
this._parser = new MPEGParser(this, this._headerCache, this._onCodec);
|
|
2189
|
+
} else if (this._inputMimeType.match(/flac/)) {
|
|
2190
|
+
this._parser = new FLACParser(this, this._headerCache, this._onCodec);
|
|
2191
|
+
} else if (this._inputMimeType.match(/ogg/)) {
|
|
2192
|
+
this._parser = new OggParser(this, this._headerCache, this._onCodec);
|
|
2193
|
+
} else {
|
|
2194
|
+
throw new Error(`Unsupported Codec ${mimeType}`);
|
|
2195
|
+
}
|
|
2196
|
+
this._frameNumber = 0;
|
|
2197
|
+
this._currentReadPosition = 0;
|
|
2198
|
+
this._totalBytesIn = 0;
|
|
2199
|
+
this._totalBytesOut = 0;
|
|
2200
|
+
this._totalSamples = 0;
|
|
2201
|
+
this._sampleRate = void 0;
|
|
2202
|
+
this._rawData = new Uint8Array(0);
|
|
2203
|
+
while (true) {
|
|
2204
|
+
const frame2 = yield* this._parser[parseFrame]();
|
|
2205
|
+
if (frame2) yield frame2;
|
|
2206
|
+
}
|
|
2207
|
+
}
|
|
2208
|
+
/**
|
|
2209
|
+
* @protected
|
|
2210
|
+
* @param {number} minSize Minimum bytes to have present in buffer
|
|
2211
|
+
* @returns {Uint8Array} rawData
|
|
2212
|
+
*/
|
|
2213
|
+
*[readRawData](minSize = 0, readOffset = 0) {
|
|
2214
|
+
let rawData2;
|
|
2215
|
+
while (this._rawData[length] <= minSize + readOffset) {
|
|
2216
|
+
rawData2 = yield;
|
|
2217
|
+
if (this._flushing) return this._rawData[subarray](readOffset);
|
|
2218
|
+
if (rawData2) {
|
|
2219
|
+
this._totalBytesIn += rawData2[length];
|
|
2220
|
+
this._rawData = concatBuffers(this._rawData, rawData2);
|
|
2221
|
+
}
|
|
2222
|
+
}
|
|
2223
|
+
return this._rawData[subarray](readOffset);
|
|
2224
|
+
}
|
|
2225
|
+
/**
|
|
2226
|
+
* @protected
|
|
2227
|
+
* @param {number} increment Bytes to increment codec data
|
|
2228
|
+
*/
|
|
2229
|
+
[incrementRawData](increment) {
|
|
2230
|
+
this._currentReadPosition += increment;
|
|
2231
|
+
this._rawData = this._rawData[subarray](increment);
|
|
2232
|
+
}
|
|
2233
|
+
/**
|
|
2234
|
+
* @protected
|
|
2235
|
+
*/
|
|
2236
|
+
[mapCodecFrameStats](frame2) {
|
|
2237
|
+
this._sampleRate = frame2[header][sampleRate];
|
|
2238
|
+
frame2[header][bitrate] = frame2[duration] > 0 ? Math.round(frame2[data][length] / frame2[duration]) * 8 : 0;
|
|
2239
|
+
frame2[frameNumber] = this._frameNumber++;
|
|
2240
|
+
frame2[totalBytesOut] = this._totalBytesOut;
|
|
2241
|
+
frame2[totalSamples] = this._totalSamples;
|
|
2242
|
+
frame2[totalDuration] = this._totalSamples / this._sampleRate * 1e3;
|
|
2243
|
+
frame2[crc32] = this._crc32(frame2[data]);
|
|
2244
|
+
this._headerCache[checkCodecUpdate](
|
|
2245
|
+
frame2[header][bitrate],
|
|
2246
|
+
frame2[totalDuration]
|
|
2247
|
+
);
|
|
2248
|
+
this._totalBytesOut += frame2[data][length];
|
|
2249
|
+
this._totalSamples += frame2[samples];
|
|
2250
|
+
}
|
|
2251
|
+
/**
|
|
2252
|
+
* @protected
|
|
2253
|
+
*/
|
|
2254
|
+
[mapFrameStats](frame2) {
|
|
2255
|
+
if (frame2[codecFrames]) {
|
|
2256
|
+
if (frame2[isLastPage]) {
|
|
2257
|
+
let absoluteGranulePositionSamples = frame2[samples];
|
|
2258
|
+
frame2[codecFrames].forEach((codecFrame) => {
|
|
2259
|
+
const untrimmedCodecSamples = codecFrame[samples];
|
|
2260
|
+
if (absoluteGranulePositionSamples < untrimmedCodecSamples) {
|
|
2261
|
+
codecFrame[samples] = absoluteGranulePositionSamples > 0 ? absoluteGranulePositionSamples : 0;
|
|
2262
|
+
codecFrame[duration] = codecFrame[samples] / codecFrame[header][sampleRate] * 1e3;
|
|
2263
|
+
}
|
|
2264
|
+
absoluteGranulePositionSamples -= untrimmedCodecSamples;
|
|
2265
|
+
this[mapCodecFrameStats](codecFrame);
|
|
2266
|
+
});
|
|
2267
|
+
} else {
|
|
2268
|
+
frame2[samples] = 0;
|
|
2269
|
+
frame2[codecFrames].forEach((codecFrame) => {
|
|
2270
|
+
frame2[samples] += codecFrame[samples];
|
|
2271
|
+
this[mapCodecFrameStats](codecFrame);
|
|
2272
|
+
});
|
|
2273
|
+
}
|
|
2274
|
+
frame2[duration] = frame2[samples] / this._sampleRate * 1e3 || 0;
|
|
2275
|
+
frame2[totalSamples] = this._totalSamples;
|
|
2276
|
+
frame2[totalDuration] = this._totalSamples / this._sampleRate * 1e3 || 0;
|
|
2277
|
+
frame2[totalBytesOut] = this._totalBytesOut;
|
|
2278
|
+
} else {
|
|
2279
|
+
this[mapCodecFrameStats](frame2);
|
|
2280
|
+
}
|
|
2281
|
+
}
|
|
2282
|
+
/**
|
|
2283
|
+
* @private
|
|
2284
|
+
*/
|
|
2285
|
+
_log(logger, messages) {
|
|
2286
|
+
if (this._enableLogging) {
|
|
2287
|
+
const stats = [
|
|
2288
|
+
`${codec}: ${this[codec]}`,
|
|
2289
|
+
`inputMimeType: ${this._inputMimeType}`,
|
|
2290
|
+
`readPosition: ${this._currentReadPosition}`,
|
|
2291
|
+
`totalBytesIn: ${this._totalBytesIn}`,
|
|
2292
|
+
`${totalBytesOut}: ${this._totalBytesOut}`
|
|
2293
|
+
];
|
|
2294
|
+
const width = Math.max(...stats.map((s) => s[length]));
|
|
2295
|
+
messages.push(
|
|
2296
|
+
`--stats--${"-".repeat(width - 9)}`,
|
|
2297
|
+
...stats,
|
|
2298
|
+
"-".repeat(width)
|
|
2299
|
+
);
|
|
2300
|
+
logger(
|
|
2301
|
+
"codec-parser",
|
|
2302
|
+
messages.reduce((acc, message) => acc + "\n " + message, "")
|
|
2303
|
+
);
|
|
2304
|
+
}
|
|
2305
|
+
}
|
|
2306
|
+
/**
|
|
2307
|
+
* @protected
|
|
2308
|
+
*/
|
|
2309
|
+
[logWarning](...messages) {
|
|
2310
|
+
this._log(console.warn, messages);
|
|
2311
|
+
}
|
|
2312
|
+
/**
|
|
2313
|
+
* @protected
|
|
2314
|
+
*/
|
|
2315
|
+
[logError2](...messages) {
|
|
2316
|
+
this._log(console.error, messages);
|
|
2317
|
+
}
|
|
2318
|
+
};
|
|
2319
|
+
|
|
2320
|
+
// ../../node_modules/codec-parser/index.js
|
|
2321
|
+
var codec_parser_default = CodecParser;
|
|
2322
|
+
var codecFrames2 = codecFrames;
|
|
2323
|
+
var data2 = data;
|
|
2324
|
+
var header2 = header;
|
|
2325
|
+
var isLastPage2 = isLastPage;
|
|
2326
|
+
var vorbisSetup2 = vorbisSetup;
|
|
2327
|
+
var totalSamples2 = totalSamples;
|
|
2328
|
+
|
|
2329
|
+
// ../../node_modules/@wasm-audio-decoders/ogg-vorbis/src/EmscriptenWasm.js
|
|
2330
|
+
function EmscriptenWASM(WASMAudioDecoderCommon2) {
|
|
2331
|
+
var Module = Module;
|
|
2332
|
+
function ready() {
|
|
2333
|
+
}
|
|
2334
|
+
Module = {};
|
|
2335
|
+
function abort(what) {
|
|
2336
|
+
throw what;
|
|
2337
|
+
}
|
|
2338
|
+
var HEAP8, HEAP16, HEAP32, HEAPU8, HEAPU16, HEAPU32, HEAPF32, HEAPF64, HEAP64, HEAPU64, wasmMemory;
|
|
2339
|
+
function updateMemoryViews() {
|
|
2340
|
+
var b = wasmMemory.buffer;
|
|
2341
|
+
HEAP8 = new Int8Array(b);
|
|
2342
|
+
HEAP16 = new Int16Array(b);
|
|
2343
|
+
HEAPU8 = new Uint8Array(b);
|
|
2344
|
+
HEAPU16 = new Uint16Array(b);
|
|
2345
|
+
HEAP32 = new Int32Array(b);
|
|
2346
|
+
HEAPU32 = new Uint32Array(b);
|
|
2347
|
+
HEAPF32 = new Float32Array(b);
|
|
2348
|
+
HEAPF64 = new Float64Array(b);
|
|
2349
|
+
HEAP64 = new BigInt64Array(b);
|
|
2350
|
+
HEAPU64 = new BigUint64Array(b);
|
|
2351
|
+
}
|
|
2352
|
+
var base64Decode = (b64) => {
|
|
2353
|
+
var b1, b2, i2 = 0, j = 0, bLength = b64.length;
|
|
2354
|
+
var output = new Uint8Array((bLength * 3 >> 2) - (b64[bLength - 2] == "=") - (b64[bLength - 1] == "="));
|
|
2355
|
+
for (; i2 < bLength; i2 += 4, j += 3) {
|
|
2356
|
+
b1 = base64ReverseLookup[b64.charCodeAt(i2 + 1)];
|
|
2357
|
+
b2 = base64ReverseLookup[b64.charCodeAt(i2 + 2)];
|
|
2358
|
+
output[j] = base64ReverseLookup[b64.charCodeAt(i2)] << 2 | b1 >> 4;
|
|
2359
|
+
output[j + 1] = b1 << 4 | b2 >> 2;
|
|
2360
|
+
output[j + 2] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i2 + 3)];
|
|
2361
|
+
}
|
|
2362
|
+
return output;
|
|
2363
|
+
};
|
|
2364
|
+
var __abort_js = () => abort("");
|
|
2365
|
+
var __emscripten_runtime_keepalive_clear = () => {
|
|
2366
|
+
};
|
|
2367
|
+
var timers = {};
|
|
2368
|
+
var callUserCallback = (func) => func();
|
|
2369
|
+
var _emscripten_get_now = () => performance.now();
|
|
2370
|
+
var __setitimer_js = (which, timeout_ms) => {
|
|
2371
|
+
if (timers[which]) {
|
|
2372
|
+
clearTimeout(timers[which].id);
|
|
2373
|
+
delete timers[which];
|
|
2374
|
+
}
|
|
2375
|
+
if (!timeout_ms) return 0;
|
|
2376
|
+
var id = setTimeout(() => {
|
|
2377
|
+
delete timers[which];
|
|
2378
|
+
callUserCallback(() => __emscripten_timeout(which, _emscripten_get_now()));
|
|
2379
|
+
}, timeout_ms);
|
|
2380
|
+
timers[which] = {
|
|
2381
|
+
id,
|
|
2382
|
+
timeout_ms
|
|
2383
|
+
};
|
|
2384
|
+
return 0;
|
|
2385
|
+
};
|
|
2386
|
+
var _emscripten_math_atan = Math.atan;
|
|
2387
|
+
var _emscripten_math_cos = Math.cos;
|
|
2388
|
+
var _emscripten_math_exp = Math.exp;
|
|
2389
|
+
var _emscripten_math_log = Math.log;
|
|
2390
|
+
var _emscripten_math_pow = Math.pow;
|
|
2391
|
+
var _emscripten_math_sin = Math.sin;
|
|
2392
|
+
var _emscripten_resize_heap = (requestedSize) => {
|
|
2393
|
+
var oldSize = HEAPU8.length;
|
|
2394
|
+
requestedSize >>>= 0;
|
|
2395
|
+
return false;
|
|
2396
|
+
};
|
|
2397
|
+
var _proc_exit = (code) => {
|
|
2398
|
+
throw `exit(${code})`;
|
|
2399
|
+
};
|
|
2400
|
+
for (var base64ReverseLookup = new Uint8Array(123), i = 25; i >= 0; --i) {
|
|
2401
|
+
base64ReverseLookup[48 + i] = 52 + i;
|
|
2402
|
+
base64ReverseLookup[65 + i] = i;
|
|
2403
|
+
base64ReverseLookup[97 + i] = 26 + i;
|
|
2404
|
+
}
|
|
2405
|
+
base64ReverseLookup[43] = 62;
|
|
2406
|
+
base64ReverseLookup[47] = 63;
|
|
2407
|
+
var wasmImports = {
|
|
2408
|
+
/** @export */
|
|
2409
|
+
"e": __abort_js,
|
|
2410
|
+
/** @export */
|
|
2411
|
+
"d": __emscripten_runtime_keepalive_clear,
|
|
2412
|
+
/** @export */
|
|
2413
|
+
"f": __setitimer_js,
|
|
2414
|
+
/** @export */
|
|
2415
|
+
"b": _emscripten_math_atan,
|
|
2416
|
+
/** @export */
|
|
2417
|
+
"a": _emscripten_math_cos,
|
|
2418
|
+
/** @export */
|
|
2419
|
+
"i": _emscripten_math_exp,
|
|
2420
|
+
/** @export */
|
|
2421
|
+
"h": _emscripten_math_log,
|
|
2422
|
+
/** @export */
|
|
2423
|
+
"g": _emscripten_math_pow,
|
|
2424
|
+
/** @export */
|
|
2425
|
+
"c": _emscripten_math_sin,
|
|
2426
|
+
/** @export */
|
|
2427
|
+
"k": _emscripten_resize_heap,
|
|
2428
|
+
/** @export */
|
|
2429
|
+
"j": _proc_exit
|
|
2430
|
+
};
|
|
2431
|
+
function assignWasmExports(wasmExports) {
|
|
2432
|
+
_create_decoder = wasmExports["n"];
|
|
2433
|
+
_malloc = wasmExports["o"];
|
|
2434
|
+
_send_setup = wasmExports["p"];
|
|
2435
|
+
_init_dsp = wasmExports["q"];
|
|
2436
|
+
_decode_packets = wasmExports["r"];
|
|
2437
|
+
_destroy_decoder = wasmExports["s"];
|
|
2438
|
+
_free = wasmExports["t"];
|
|
2439
|
+
__emscripten_timeout = wasmExports["v"];
|
|
2440
|
+
}
|
|
2441
|
+
var _create_decoder, _malloc, _send_setup, _init_dsp, _decode_packets, _destroy_decoder, _free, __emscripten_timeout;
|
|
2442
|
+
function initRuntime(wasmExports) {
|
|
2443
|
+
wasmExports["m"]();
|
|
2444
|
+
}
|
|
2445
|
+
if (!EmscriptenWASM.wasm) Object.defineProperty(EmscriptenWASM, "wasm", { get: () => String.raw`dynEncode012091253f87dì%nä= 4&¿nÝØäÂLÚªã9ÚØ[äº\ ¼¡³R=}L]Èÿ2 ÿù¶J1jj¡é,zäV|i¸Qk¹=
|
|
2446
|
+
¨¨%ýv²±»oúâLa:ê±ÊäÌÓ.÷Øý×>àW>z¯°8¯ñ\Ñós9\§ôÊ@Ü (tÃø4° ¢7fqÓg²Jè6x[zç®&4=} p.(°tÍÞã¾>÷CõË"*k?¿~7~H2ÛÜâ.ÏQä;6{ÜãFÑá'DD¤±°HQ>MínÎÏÎöʵÑÓ
ÞÌP¼P¨Þ*X²E=M¦qíxMñ=MÌë4/<gNO/¢ ¢>a~Ï®ììììì0ìa笡çëOÓÇM Q9tùµyuéµµÞÏ/±Óõò}E{òÓJ¹Û|·ôfÒ c¬Wêaûÿlʽp¹|)ÖEL¦ }ypÕSϹI]¢ºãæ°ÿo¶7ÛRq¾ÔÅEߨ]æËwÚ{óçVwó1¾EØpàe"Æùû¡Áª Ààð´LõÎxEÓ¢N¦
9ëùi& Ò§Ø!ÇFçS=MbäO?߷縪7ùa}5ðûÕtsUþ£KïgN¾)ø§\V0uSIö:ÌU4ж¯´Õn9ÔèE£ZƼ{hµmÙ¾6ÆÑ+xñ´«þ¸=Mߤ·å®«ïÆGFÝì|H?äE"þ!9«Æïpæ'][¯ù·£W÷O§&#ax$qf=}ø ô bÏ×W÷LôoÝWQÕÓ)u÷½èV|¥Gà¨Ö¸@ê|ÇK5ò A·Â9CS2¸¼¿,äÝÑÝy!ÑR%ÆÝÎ0Âv§ qTcó±hØÉã=}Z=}Ælüën¯ð(-°ÜwVÏï.th¥íS~SÏ»ZZÔZ
|
|
2447
|
+
3BÌÛ¬<éæO)ÎyÚ¯O*®uìÛ$öI¥Ý9ôø³\¤ò³Ù¹ÇP¸J×y@ÔyOÇmô½ü¾|S?2àú¤F?½ûoo3ô;<àáûÜ8ì²7ïë¨RäY¹|ÓºÌF,Ð-¸*\P!FJÒ8= o6HwLrúº¶ÐÛ\Ù¬o¢9IqÝ.ôf¶ÎÈ{Ī×N|Mfs
¤ÉÝàâ§*+ã§ô¯î¬7ç×§ä)!Z¨É,Äp~ý·wsSGóäsE\ýïé§Ö:Ò'Cç(_X$\¦½eÒ8$XF|eíÙÓ¡¤Û<ØÞÛ¸9¿ðÃÎ#b~× 4éîÿÏq
|
|
2448
|
+
ód|0wU&®è·vh6¨{ÚçÚ18Ó(ÓY\0¦= çèíß)Ø=}[xü-v?N(Kkg0}âÚ´ð¬ÕQNÍ¢usѳ=}. ëg
û= ÍMBp'²¨ x4è@9t§eݵ¾âð½ z?Z¹FH'̯¿<K,üµ<{ ¶JãývåàÆeù0Ð"F¥ÃÒÞþÔÉvCzl}ðN£ Í^P%²¸FX»WÎêô¶
äÉJ^g×SÃã.Ät*'ªG«ÒB<ÜÓ
¿ºp\àuV¯£ÅݽáÞ ùß=}ÎÚ^ÿí>¥!¨ â=M·?*/¤"å)â·ÿîÿî*(%*2[½"üríÔ4l½»a}¯CwpCÓèìGc-ã6®=M32k?Êg
!So-x>³G+ã@ò, ÁïáåN0þÙè.~È÷¡vTr¶Ã[üB±º»ávëw¹{pܺû"Aæ±9Æ^¹³òïRIAy5GÂwÉf4@Tù|qý7ðªwBL|Ôqv!ª°|]KiÐJVQ5¸åõ§å"H¼0e¬<óBîÚSÏUìHPÙA+çÉ'seÌNf°@ÈM,ð½egÖ¬x©û½2~«Ò1;Ö«
¯°4&90èE»Ó׺çʧJ<Æ¿&~Nu¼ãÙµ¢.UÇä(qQô^ö·%!É
|
|
2449
|
+
w¬= Îôª«
Ùת
JIS;õa rx×£.6¤°>5²Åà,õ°°h6ûUp©²v#}%é= R¢hõ@ëQiJÙ\Ûp»©[vsiÙLE UG*sGÄ%V¸§;º_]cØp#¡:oZ{ãS5I¥]ÓaÎg+n×ýÿTxy]²ö°k¦kêju¼xÐTá©#h>Ù]u\EA+§
í¤u¦üØlQPdëNòzyÞ¼XÐ]ÝøÝg¸BI¿BÕð_Ël¶Cuyºr|<¾¨Támo5êÿú>Æ[ã±G¨²)ü&áòüåBFou!Íí.jÖìß½8¥YëìáÈÁi)qÀ:ÎüÐÖ¤Gͳô>°ú¯øâ?R£k~&ÑãÞ~A¢;Ð'àÆUÀ»L×)-!ÿkýíÙ
|
|
2450
|
+
§Û\{¤ólW^næzk?G~?_5uÝñ7-ß«6YPðGßÚù\Êê -ûp¥èÓtM×hKȯÒBAê"ïx×HÍ0Ôcè+èçÛÅf (§¢õ®%K£7éÞQ'MxãxÐúÑ
2!8_6̶Ì6ÌrûùS¥ZóAIüå6¿jÿ_°(ÿä9©CCÄ!bq5Öô×x{ÍbÆÚmÒ@«µ××~ÒD;*ü ùeÀÞ·xv¾;¤7¾[W\ýüb@'qãµÙâÉE¾}}tq-g=}Üs¢5Ó=}$ħ£Ó~SFÎgÑnN>1§/¥¸G5àM8#Ò;2¢/K%xVÓ(XH>µ¬ü;_j~Æw<¾ô*»ô= fAËbM¼iÀIIp'c*:oY¡VÖ3ûIdû®4ÚûýÆð}ûN¥ûI
|
|
2451
|
+
¥ÎÛK*]Ø=M>t×ý³MwEè®"Û4]]ÓgØ×EÈ.pN°¡»¤ç/I.ÿ+6r@«Âz@§Bz@¯ÂIê-tíÜ«°·GföjÏÕì:gÕUÖ=}÷¦|§EõÌ$a*¸s¬´«£¯JÞàãËt$ GSÚ³Ë1¯©&|±c!\åvçϷѸãßñ]á¸?ùää%6´= #e¬Â;IÚ¡õckCÀò*\ï0À¿<>ªÈåJA'ï´¾ME.@OüÐ0ex÷#2ÒùúµÇ½>o{«ó= Ôï;ǽ¶óÐ/ÔÍܤ±¢Ê
w>ÃâС¯®Üa£¹6Vý váÂhôàÍ8D!Æ!ÆI;¢áÜ!oÑÙ
OÏKôò=}w<0rT= 5J_±3×Ì;ôYÐ<aÞê¹¾7ßz\˼ÛÛ@>Â{å%K¯º'ÊmÚòÁjRÒ×úw@'( =}QU«ÐÁÑ,/?úYEyºQì¬ {ÇLÕæõNáð#f>_ò#Îv]/øÏ¾TUà/øÀAÔ'w]Ã]Ww]Ã]X÷Þnð·TbAåÉ r¨4?t²>1Ç[áüx $-ÒÂMÄ
§·µwsú>üÂ&³÷.dgA¦h²*G× öcG×µF5¸Êqª$ñ?¦vÿ<ã;ÿsÒiÇXòku®vUòõcuæÊ¦á«þ¸Í
|
|
2452
|
+
ÑÊuãE"þ!6Ø Êæ}}onË:W½¶«ÊFuÃÝUS-1ÀÕHòzµö?ov»®¦
|
|
2453
|
+
CyÈçaÆ
|
|
2454
|
+
pÛ¢&{µ¨«±1EXÆÂu.7÷²ÛJÊÂy[å²µ»bL?·×øèìCp:æÕé§·rUèésÜ[o²ÛòDòDÞ]ªä#çN;Ïð)â´*z80Úèóª1çE¯´Rì,D4H(øË)gp=Mý«û»=Mþt8º-HxH}Æ3Rt?ïɤC
|
|
2455
|
+
§ßìéõmõ,;æðk=M6ЦuSÝ^è´®Ù6=}æóO«>
|
|
2456
|
+
yÒîÐ7a'ûLUöø>ò -6Y(¬ÀMZ¾ZHpu°c«à±[t*Ç*jwÇÍ$Áíqx©SwÑËR¥é®[XJÓ8=}üµnt9ÚÏ3z½¼¢[Q2Þ¸/=MP§Y&y=}ÚÛwëý¡àߥۧÃþòýÁÝÈìûê(±¹4'ïÌ:Ûùk=}eªãä ÒCKA¤Æy×nvȧmÿ;=M]¿ÕÕjÔª sF>úÔ©áÄ:cÀÆ<$|ê'!×Sb¢V¿oÇåGð¢UÊ u¤ZJýæÔÿÿ 2çì¯h£f¾QZãÁ ® ìÇ'ÎÅ[¸¨{?¢ÉhS5oU½c¢ÈÂÜ»JZmUí\áùµV6Bète
~Ãw÷0Õà®ísÆk,{ý¦ûiK+xvÅå
ºñ a[Sé»Û Nõòý¬ßà¨= 7på^ÿÃW,¿*M½áR±Ì³FcË<üiÏ2|ö^vKÏHò¹uYbk¿mZ¡O^ÿç©~ïj°È7 l©¨ç_ó¼'½ßªåÏn\ O,wòi,Ū-¿?ð}òÁá=MÍ®ÿ²EÍñÂ}¨³ô-ýƳúù56MÃ6ÓJz=}p³ûê9õàå«TM×Ve>G~Ù»Vü²öHByf<õ©+QWF+.ßAGÔ¦ÏèÚ½3âÏYÀ¿T¢¸6ÌéÉÐ*¸ÖªÏrÍëá=}6/U´Ã×ZþðóW.½ÞQ¼¾ÆqŽoâäB-ÓUJ¬má8øªK.y±>.Q¡a0Þ#!,¥BÞ¼S?Ìr^¿_Ö.¹ó{=}/äÈAt}Æè̼4¡Ôîgl]ÌUEý{}|DÏä:°-Ñÿ°=}àØéÕ}Êñøðº~¹¯4Yqm¹]!ºÿ=Mõ« :Nl"SÇps¸Gåȧá+'M¿ÓîÁ.î¤=}mÅ8)¶rrHá"ÈøÂìËøÍí4ô72bbߺq¿2ô=}A5.YV¬ÑÚã«Þ[F
|
|
2457
|
+
)ºhXûÇÓ>È?p¤ðoUÊÓ(³FpÊi¡Ð}SÚ~E !|ðí,Ç9½Ãë¸Üì!¤ÓÃX%DBãu&dÔËôg¥á¾l¿AÉ)Á±ÑßÈßý¹ód;|¤Z»#ñscµ|¡
ÝOOe^ãÂxÝÍ]¯òbÏ£÷ð4½ïÖ³;û/ºsñÆðFØIn²q¢©*× kdO+÷åÒiÉݱîBr]LÜ|8~7vts÷9l|aë»EânÓ´GGò$ÍR,<e0i¿ª
|
|
2458
|
+
±¾
àsÓZJ¨?&%Æ~-ǵªö±;ól"=MLgÿt#
|
|
2459
|
+
ü2 <Àn¬ÉäÍôÿ®É1SÄà= ôñZ¥-@z;¯üà¹ìJÍ=}ÊSeBÞ¯´~¢smÿ-¨CozÀ/;Çël&uñZÖPV«¤¼´ÀïYÒ~=}DrâgC §ýçrÆ7âÃ$ÿ¤Ý~ÞÝo@°³Ùs;ozûÀ~R§ú"¶ü/ôcæ<°^Ôã/éow×ër¦_UgûÀøäâkHÈ{&ÏMëqÀYÈLÁÊGbÙé:·q]ä\PÔëÒ¤a£1è]á
^Y[Sw¶å²¹gÒ0ód^ÈT.WÄÜ[ÕÙ*Hi®z¹µu}ýuý}#ú=}ÇÌRSûçMø=}¹¹>±ÿì¨áØ[R?ÿ^¦ñê¾xZRS^PSSSç1ù}ÝZá4fffdf¨ÕËw&eÜ$hä'{»Moöyg8¹ê¶@ìÛª0-ó¯:¹ e{%<ÎÖ}Þ¤vª6¡Àõ÷Gh8= FºKVñ.ºHÅ)<Ñ= xs¥BE;;áF¡·!¡-ÀYÔå^Ö'l̯ßûç¥køÞ?[ë>" -9±/ÊÛGÇ 6OY4VÕ»º[öBÿ:B¡WÍ&½ÇÎç»Î= 0yæ§§5àÁFiAͲ®Ê\¿<î!xÞ³E =M¬U/þssæ¶µ·OÌ0§Gûúñò¯{^/~ä׫ÊB= ;4¤þû^Öï÷L÷ï_ñíx<õ;ó5ËÇ~¾V+ä
l¼Ñ°«Ôí¾)Âfżo¼ÖùWa1køìFvûëûRQø]q| ï0g
ºúîy["FÐþ7^ÒRµÚèæøÔyÚ
|
|
2460
|
+
«ãi Þ@
U¾¸»* è#ò-ì¶HÛé¢ùL;}·O7
7ÅsLæþý8¿Óùñ£}.= <¾=M£ðQKTà^O|¸üggH«0³i£im¼_2ÿöúÕ¨LaO+&]L¤Þ+,k Þ¶Ñ~T¤ÂHì ÊèèÕÀíÒ³MÜô~J<¤0Yð¢´."»âèÄxqe%oÝyåæâ¹25UÐ/Þe.×´Øì_æ¯_zRÏíÑ@ÿôLc¥Íðy@YΦ}µZ:ÑÂgZÒÒ(©¢9ß Y«¦:vÙëÎZJâÀVsOtUÖ Ò¬¹1ûÚG´OÃóG©)niÇí
|
|
2461
|
+
Ô}½3:.k]ý²ÂB=M~ ùÚYp95½qýãë ÐÞ/¡(ä'§úºE/ê«Ì9ý%Ú!<ÏJP&|[,gzű¡\o0Ôhûóþ¶[KêÍð= TjÃVñ¸D¼Ð_Ò
|
|
2462
|
+
0Ø_1dPðt ýtZ¾rù àJf^;Ô2éÐ=}è¤B~Dñ7ûÓÁ9³ýbA6ZØ´èÃg½ñóø.:~ï ]bªZì¿Ö²2QÄßo¥-¼Öá5uu/u³òD;gjÀêÃÇ|eÁ9¬u$*ÐÁ'ÓDelÀëäì¥Ò¤Zí6OÂ@âF0-J÷¤=}_Õ߬ÒlÚM½Çôó~ð76DEÖ'ds´ÙïÝßøaÊbÑ «^Í}&àØå?¾ÍF\2HD5òèÁÆdËdÈ·6ÙPÑ|¬Ôq*Ê>0¸Cì(ÛXYV
²ýIpÑíM kÖů}Íóôc7ÅbrñÐeQXæ©Æ¯ü_Û»ÂÝMþ©.ckg fq ôo@qRL°ÅYÎÈ»d'<±+±î,Z-GG»ø$âGvÇû µA~YF5"§)ðfßÐé¸oJRRÅ¿ôXÝaú.QMw1 1þøiSo¾®È²¸hÌ/Î })fBr.G1£º×cÎ𥰹&WÈüAno#g ÃàLi²¥8ó=}dä¥$Å(³0h¢0OjfÀr¡6*#àæ"ãûQ?ñ±«²Xóä*hïx=}ÎÞ¬výÞV÷{u²cöê¡h¯QÏYaêL$¦ûÈçIGßþEýWöºýëÛßý×Ïði G´ì=M¦ßÁý'þºeâNÖ7Ï/Ñu·6rÛF¾¾aUÌÓiÜúÒ]¶éUY*= g[ 2-_ c:ðY)
|
|
2463
|
+
¼9îK¨£8oSå¶K4U>+¯Ãî[H\wâRVê/÷~Ðnm¨s8CÏö©Ø%ÀaªS]ý¼§ r_¸k
|
|
2464
|
+
ªµfÄéÒQæ2¹Ão¹&3Ç¢u c5ë6}Í:B£´1uièÑfa&]ävCOx·"³LTè.I.ÊÍzB!:FÏëxS´Q{ÊõZ7Uh8yÝfDÎ dÔX3Q± ½=MnØnÅc"@;f?ª¬nû0Lp´h,¸#Mà->+C= Ê¡±^Ù= ®Â¬QôÅùî
|
|
2465
|
+
öqòbß=}±ÕAË/8RzT³
ÃÌ/_îMvÛ«;7S ìN4
|
|
2466
|
+
ìo7è_¤ÀÜñÜ©è^U±A{ÉöìXtnÝÇvz
|
|
2467
|
+
½½Ùo¨çaúâ?EHÄ»ë"±cÀÁEB]acgdck
|
|
2468
|
+
ËÁEvÇÚM:¸2¼"ûc³Ï1mA]ø[à= Ý|«oÒ&¡® ¡K$ÚiPÚÛaº!ÊI#?3ÄLoxJò¹<$$»¢¸h.ÕY¡g Û30× ¶~ÃtéR0 ni6ôeìaz(¸9°Ù=}ocî#üR{¶ù*×<Ç\Èsa>#¿]¤(R F×X#¢¯mVRòºÃ 0ã51ïíDÅVst°YÎ=}ø´·ÇF ØÕÓ¡ð(B
|
|
2469
|
+
YS= '0#×KB<rÔôþMz8ï³tíYS\¿©æ s¢3~ÏcÉÜ[öÝ-y£îu(´{©ueØÝª g×»c*5죡Ð>¢9®ïîêzr{½¢j|W¯Cú²"Ƽ¦Xçt,òYCIVµX#¥_æ)3è "9ûã)e
0߸Ûͤ³.¥>å*ÁpepQkîtÎÚ Å¶ïoÔ¸>³55Î= Á¿rà3S\ÌÒªs0 iæméQúR|ë²FAè Áç-ÚýFå3$qÏ3+wØ<üªUþvü£b)Ný¯j;0õ}áª[6k WÇíH® ¨{2Jþ!y+(-òÉýÎl SÆ_¼òu8¼z¸Rîùq_fGHî?{vTgeÒU<S^£(îl=MéáDÛ¶ùM·Ä7^õÿ
|
|
2470
|
+
Ø£ $\ öv=M¦px6+ã*àÀìî{ølÊEy9² hϳ!ÕÑjú¸ò5pG£¸fëp N_::û\RQ[⣮M¿L#8¢ÑPk5]ý«¢zg»güåÐÒöí<ôâ~ÂÔîtýXÙñµE®:¼VBͼçtnHç|Ï0[óoûM>h}ìAö
":Vk=M©l\äÓröQR}8qeV<J"ÈFäíûI_Óã«DûëôzïåJNHeÛpµ
×8æÆPI¦û-t£sp£i¼äsç)ç%0eq#ôFør\ÃÁs×CP÷ú½ÿqH²}EéÏtjTi.Òþ¡=M%ä¸ÕÙe½_ëÝ;+ÏÁ9ó+ä·9:×´irxb@åÄä*Ý
|
|
2471
|
+
²íCKÝ»@;ö4Päü
|
|
2472
|
+
cãJ1«õãLPµêYàn12ȯÙI
r+= ¶/gýZ³#³}~å0´ú¾dÈwû{èÒYuvëNôºô[í&öõ¼[9Ø6
|
|
2473
|
+
>ßNçRÆÛeíu?ìýhWõM^8<ã*lkê@uú.FzFë=M-ûhêlT±ÏÌÚ®Eã¾d¹P±¨à<ÛÉÊ6åÉìÎ7Qv¬ÎÊýì$ºÑzØ'¨mÐØÒº´ZM°o9=}óÃQ·»¾LW·:+¯©p §àÕ<Ïí2gþá1é9|RówàutHý8ºï@¬^¢W¶©ê ]ð½6ÏOô¼<±GãQ~V§xâü1éUM&CÞÍ|A<^ES¸34
|
|
2474
|
+
Z!¡ÚÜa7Î0¤q1çÖ'©~É ÙWüã)¼ðÁê1
¡é)&n¬'eÚ!6¹¾P;<dm-T©ÂñPÿoà¿§Úì4¢Î³¬¬iTÑ9ËÀêIqþdiÉNì=MWH&¨rÅ«q,ì9C6/¤t«ô= ªK5Â#f¿%Î)¦k Aù4jFv7üÃ*-Ð\éÌ:IJ21 .¨½ü,= åÔ3VI¯¾¸þ¼¥ÂÆÏç^g°(QÿiÕ¬ª|ï
|
|
2475
|
+
Êáu¹ÎÖ¥UUÁYE¸ã²öÌÐm®~wø%þzêÑ5\5oFn$»9³mi6zj1séGd¯ÉØå2(0¬>nE¥âVÇú°ÜéÕî£]þ´Ýs×7ãû<Þë§¶§V"íÙC'aÓXK£¯üYüúl^~¦¡Rû!=MÜPa´
_Cë.0£\}À±QP9woÙæQù§jKõ û@É+gI4
wÖü.Û_é4GÆ·#ÛxEh6;L]¥2¥á5üP4õuÅ >çò-ç»ëé;]÷ÑÑY¶ v
Pö%!̧8÷PÛ'rö§ÙßÏËí»kæ@æ{¨ËC4¬P¶ óÚÈsåÍý£Îx)ÜØNóÐ3õÜMüB¡Åø×½»#»Ã-á;Ì'Æz{ãMòÆ0в>v©Ø¯³û#iàBé]á¹F{srPZá:óöCܱÀÃÊõp^kñþv1_Lç9νdض+u¥æÌ·ól~«ÙîûµÕÔebyÞ«880L²5ìæôvZÉQ¦HV/ïF{8M*Áý¶ºÂØO~ü3|Øx¨>¹
çûÖú;ê$hÌz~ç1Hún41eÆOXØ&É¡:h'¢yÓSvðxåÊ:µÆ-Ð)ì_ä;k@%"w¨s
|
|
2476
|
+
ËØJÂV+á~àé4È'QØÇÝøÄ|^ Ç)"¥0ǤÐñ kÂe\0¤|>ÿI÷äÒÝýÔ]¶;L qìÅR¥-bE]ÂrÊý#8n°»ØÑGø,RmâAê_Ãpá%/BU#tÎq>ò*öú(Â$âeò|=M)!Ð'¼¹¼R
ÐzsÑx
|
|
2477
|
+
ß+.¼¢7â%²0ÿPàiÝPñ¸MÏå:Lå
-ügß=MÅ#MÚ+üfmi®= µ¬³ñ}$¨9<og"Ø[x«Æ¯+_Ð N׿jV¦¥#Dw$¢ø"ÂK**¨N]EB®°ËßSâ^í%Í(æé¸ÞögÝ¢´Q{Ý»b§Õ×±±hÙ^6«GàýQÃe]tÉ¡Q¯¡ñ⸸a·12À I¼Æ÷nZQ:bùh<c£5yÞ§è~xWÀÛý$õAXÁÓ4KóÝ×¼µ@ߺøz¶Ñ1s7=MÇ5ö¹k±R%×¶Hâð/
|
|
2478
|
+
+Å»ºDó(=Mj$×JD ò¡Æÿ¼"@ºqJº&ÏþIÑKÍPçüzDjIö
|
|
2479
|
+
¼ììoìì¯íì÷;#¶º8l¾k#:âõØ÷¢ ü_WNì¹tjÏuÐÆ>I¿y Hø@u¬BÄÃ5Ûy:LU&ùð£Rn̵5ZGù<§h¿ËhÙâ²zí¾¸?JàçªIx6ìÚËìV£áø¡h²'ºéÞXQÍÐSÝdÖ8ÙßM9S}À4To0ömeΦ\ܳtQÖç'Ñ"Á©là¿ö&.ÓÚçï±í¥£ds¿ý= ìZÔOäþr;Z©êÜÔÐó>B:½î-t®«d¶LÓ¨$QèÔDÏ:!ì Ûq*sª4xã´®X&(\À¾ÊØXA¸¨Åe2PB
*S{éÔce YÆBº©¦lÍX;O²:Àd¿fQCnMË-ÂÂðǣﶡSÚÁdC,KÂÍõÞ=}=}ß 2y3R¤Ö3=}cÐ'Z®¦}±)\(YàP8?ÈÚÂԺǶïiXEßÊè= êèÅDÐ&sÙ¦R÷_{Ù±4Ë2 ÆzãT!gU¯CÀ@¼û7"ÌfÆúX«à-öRÄêP$#¹oü³ãq¿«í³= sü§{ÿ«·=}ßÍ q?¡ÏÙ¨½Ãç×å?gÆôÝi,×¾Ö³G¾»= ÙM9jA¿¬R¶Æ'sÖæe4æ+6ªÀUùxGÂ+YbçÅÉM"äéÁZ]&ý¡9å(¡nn¶1Í^¡<ÞÍeæ:WæéÓ#4ÒªzBËÿ:°5G¬ÛÂÒ(âÄGÿö*ë¶.ï\¶l^Iì°ÔüZÖKXSý¨' M¾b]±>0lùX(^^¼òçHÂSîÃçàó+!mû¤Âp= w¢·nHµÔHÅ
pÈXw]©5"1ü>
|
|
2480
|
+
±XZ^Î9â¦gþ=}oäíçY÷Wé[~Ñ;=M㪶&$óÅßah
|
|
2481
|
+
ÂãtÛókÿ^Û7z¶#X@ùrÏ8FG"5ÄÐÄ~áUÒ8ÌËÌe3ÎñA´ºÌ=M¸óÆ~2Î,ô®dmÖ=}»u¸Æw:á!@
-¾ *ïr±F¿/Í;öMÅÂ1¨:4>&YÏ= ¬]ÜèÁ/4&øö0aMÞjR»5bãXq=}A%è9= i©¸¡l¥nô@ÃOPz»wÓÝlX
|
|
2482
|
+
:ÎÛÝ(.Tɬ|©Î¾²ð¬ðÉçiå_*&F×[ oô8B¦Brþ=M¼-ò»ËÍF?<@üønÍ|ãxÔr6hÚpÌöç#5íl÷.à@]ð{¹ø÷ì<Î<ÂuwNLO"_u7°Ïa ÿ\ÌrîÔdðó¶§Ô67¤p£"ªCËu@ïfcOò¯x¸3 ²#lf1}U¬q±ýx¾jõ×»ó±ñ ÀR³.ÙýåÐéIcÎÿ;F? ÛÝkØýóÎóø6¸'áû=}t8Ô]&ã°¿|%BÆ<þ·ÎÜ«ëÍ>YUÐgæE¡ã(Á
|
|
2483
|
+
8ÔXÀvÏʨ¿6bnµ¤GÔÁ¹§\)é«®~î¿w"Þñ£à/o¯ëOïr(ÿ
|
|
2484
|
+
õOá4¥àyáz¼}·æÌ²ìB#Ùø }
JÏìN\]=}Înü4VáaÉlIA Í<â:^&q/nõ×n5;=}Ù,ìâ|0Bõ=}l;Á¶®äÓ=}a&¼½ó
ß@ÂU¨¯ÜüHÝØ¯Cþ6ýjÒX_16¿X]~Y~;×*½ÿÊí²2
|
|
2485
|
+
=MQ·ämòjyÂbá]ÜÍl#à(Kð5ÅôIJßqE|sª±×ÿe¼SÐo^[ØÞôXYá4ô@1³¢[#ïQ½,CèoJ 9Û«ÐKvnC&Â0 »¼°SäcÑ07 »4NòÚhr/#ÉReÊø?°Oíÿójà!c³hziÕ§nËGY³ÿòò,8ä¹àø¸¡µ¨X[|.ôóv3<÷£Û1²a<>G¦»
=Mlf*-¨>9C1TQÂñ¬ì(*ø×d²¬p ?n=}ê{ÕÊd\ø\*·×RéÕR_Y>7Û!èc.¢V;$|òè¯+/UcMX?é9ÀÌéZm&
,ôvõÓé¶ZÍ<VÓü° Ti{êC§)ÐCU·RsV$gÖ¦îÁ ÖPö4fÃÑ>פkc1W\åÅ$Çp,%j1âÂ>¦¹Ð¨XþùïäRÜJ¿o{FúйÝÚ³ó£ëî¸QE@mj6¹e¢Ñír»{Sg½ÍRâl¦í"C÷Ö]§@¸±ë:Â(íQó9È«Ëîqw±º{i"ÁjêévVÏ¿KÐ÷±ñ´ìp¦o.è<wÕʾØ/iºdr2S£ú~&Oãè.¹
|
|
2486
|
+
x*qT·gÀúÛx¢/Ã}ÜYñ-XlEìøöt¢Ù6ÀùG
|
|
2487
|
+
;%eU àQ-ðÁÆô+wcq÷æÍ¸S©l¹¾!Û¬O ISüu9=MÊ- !²;ÅUº¿v¶å±ØÆá¾ @ë]Lke1³,#o¸òÄéξ$ê¯3eI Nö+ãsQøÙöá9¬Çì<= !#\
]ôÅvÉplñEÚt^ÍUMAϼÆüÓú}Sú",Ú}Î>P=M¡nOcùÀÑþQ{¹ËÂM{ppÝ5o;Úþ¨Wå7°S'1Ê= Eºg"¦^H m?P¾ æcà à°!£!f fT(Ø#ö%P!»3àc= ic ðü3p £"Øä¨3ðE= "( Íè±Sàçg>W 9μ5'¹ñ3!©Ý¬kD«êíSãEèí«òªý+Lo~EhÿÙ%á¸ÞÓ®©ÆPq²@¨Ø@ù£u/§>®\è¹'ÙÞ'ë>ϰcLX«züèCõNÃöq«OëÞk^ÁÞO}a=}¼eaþ²ï.5pf°²/²Ú±Ë=}lZOÁÐÊSy5xLQSSOwø¹¹Aìì¸;ÔZ$O0\6kÃÎrÉÅÆlØ2²_(z¤&ìL¥âð¼[¬ºIPN¬¸/3ö¸4=}s¦Sgù0ÆíÛàÆ¹(â¬Ôÿ²ÍÒ
ÁOøVSä®PþWì»9wx^Ôx<Ô¥KL¹ihx\ÜpÿÕ;<V³¨Ðòõ«çÛ®6¥ÃXF<ÿCà)Ss¼4n9ÁƤ%çÊe×X&¼1öÜe¯¢«.iXɾHù;%wìØJ|ûCàS-(Wú®{®û®Zñ¢0Zå¤Â,Yðu@lð T*¨%ëXæ¤%tÑM̾¨ÒsH*sHµ= ͨ_T5t|Ìö¯ö"XöNV£mYöÇzÿqovÕÀþ.V *z©æJ:ó4pÝH®qû§ÃE¬\Ú®T±*W¯2¦<Û¸àÄaxâPf<§PªQçhÐù*öÑXªìX»$vÐ
|
|
2488
|
+
X©eL ؤóa³ÝÆõLÕæÔº¬ôô»ÿ4)D=}¯)3Èød;=}ýÐNÀ"=}{Ó¬IC¬¼õâh@±óRF¢òZbs9°ö§¦1³az8ì>+âTªH[Ql|¸ç6¶¥å@i§C˾LêËGdÔð3Ö¤]äp2ºþW¾d¿µ(H&b3Õ;ë°9Ûeôó®jdúQÂÑTÆûd7.uo{Ø<Züºæ:'!î»Ø:iÄ4ÓÂÀ,¬ôQÁ]v=}/·tæ5&06
,ø$ʸt¶ØMõô[ªVÓÆ=}Éæ¨@A¬K¢§«Kä>N¬È]w5øÚ®dC{¼æs ÿÛ3_Æ
OSLMÔkí¦
ú¿
{¦YæÕ»QÿEL$1îì4:6Æ=MrZ¾6Ày{øA<(Ål1 dbm7ÎN !¬Ûlî1_= ©néµÂåÅd¹¬Vk.d,4Þ3~LòôÞ1ú¦·½d=}q©7vzaY6én±Æó¯Ã=Mµ\^F>ÞªëàwÞ»ÏÂËþúækéy¡½ãyÝ÷¥³jp'ò
°;c9¡Zs&×]Ñ]ÝUî«>_<(¬Ov Q×*xuòRN*k;*0ä
«¦øÄ
üЩ{ÖÔYå!1è;å&ÜÃFUfmü&r3ÄèÄQñb)2ãT#À·ÿ¼%TqËZs>cU´zuÏ ¸ÚuQ=}óÐ-G»ªM(e²ZVꬽv¸ ͦOT·S°{@R0MðaÀfȵÌ_Òú|â<ñ¡îйAéÜb+!¡O#*¾ï3¨0âO"ÍxÔûÝ
|
|
2489
|
+
ÃÝ'´Güír-|zþçWæ¯$×[ÙÉJuøAD!>'o0K¸5×=}þ\e8
|
|
2490
|
+
?»þÆüÜ=M3íúPþræ M×Öq&@ýÑWnBÓ>7ÜÉTùÜQ¿^®ñ-,å!'9ìsùÃ4?BTu&éçãÃ,?(&ój /¤£Eà'â£= R(/¤¼=}Íf÷I³HZépôSGÅQ¦+^@]ñïGXg¶ò¤ssÀ /µ¨/6ÊbÏ´%°/³~å¨5|e¦U9¢$BFp´¢cë±²êÒý´f]ð®ÆÆÓÎa.$ªó=}´Y_óìõXó¢Ëï|3;-%ÏS
)÷ iTlWôáµa6m u¢Þ>q9 'I±N}ÞC>hïGÒ*Æ·¸Pب)Åéø¯Ë¡yèZ?1^B\püõôÞç¹Ã Ôð4ÚIsmQÚÆû¡u°|î(®±Ø¬$©+=M°8ggÒòCÆKâåþ6
Ä¬Ú \Yý°-дXÇÌíÁÚË2ñ=MdÑkhhÉÃd6ñ«Qt»|Z³ÜuÖUhϽçØÛ}½SýË}©)ÛÑÛÇwßC ¾ã't¡a.ÍJãpa/ ÁâÿTVÚ´ý·ñ¬?{«<
|
|
2491
|
+
M2I©O}³&ÿ¬øu®:º}ëßGnêtF@1«=MÉØ &Õeî%~ïNõI'Oöz:?*<á°TEŲ{Ï¡xÔ©ä¬É®ò%}Iù$§ = s~;ÀíT/¢¤ö
ìpg ££»¬údl°yçðÖïfʶúÜÃï¸F÷ÌìÊÝ}}yÑ^Ö½Ì~HíÒÈÙ¥¶kmzkk£%&¡ËmsÖ>ÀA}Ô?ºRË%]\:&D¾[,¦Ñ$ÃÐÎìn´cÓ5ÆÑO[}=}áÖ(N¡ñígµâ9c&=}Ä®ÒξQ,öÔ?è³K'VL¡](ÂVÚCê0ø##{ºÿ3¡6®L(¡mÕ"ÕlÆzÉØÌÝ;Aª¸_ÛÕñXã0î|ò IUÂâwļÃú®[,ÊZH«§/nPäõ]eÿõuóuqú´Å³n=}¸@Ö,ñ«À7¸£Å½ïoàõ .®<òò£àzÏq=}þõaé¼ù^Ò\¡Êáä®ù!MGÓ& adePõUáßá=M tï¸
|
|
2492
|
+
¿.Ç_ò$U+å¯
|
|
2493
|
+
w§ÆËp;t'Q$2%$}¬ ^(f%e_0^ Ò¯°j¸kª2{m4c@U4N-LCæª!3gâùã¾Fm¬EÇtîÏ6Þ¤äxN8a©Y(O}=}ÔWñµÖê= W¹5(¹~o»%V´¼ÒJÓ°ú:Îų§0V÷zî!°¦¡øðÃL!¦]èd< ÛN´= C¤(Æý>ñmÇs=}ïû&NK<ë'»é_È!ôâ[õ³"¸ÐNV캪6°Â*v=}7%ÇHßDÌ/2Þ= 5ßK9'ën"?¿lØdmçþ¼S3µ¡BÁÞø|4ìX6!ôE¢z@ù}ï<|à@T¢#\âCËêéÙdUè®8ÂrãÚ·AÙvq¤A4ÌÈAäv¤ Ä,½ÛVq^ºÞéçÐ3'Á69÷[ÎxÈ»áTyþÎÍeúî<=}ÕØq¿ñ²9y×m²càSÀÌëxéc¢b9¤¡1c7ÈHD À!xÚÁáò-[xÚ¡xÚÁ¥Å;úxÚÁ¥Å;zxÚ¦Â:zÚÁ¥ÇëîAÓûäd¢í"äü;ö'¦&Úlvs¥æ~cQ±¡K¤ÐáXÕnIÆÛ!£à¿N;Ý&T,){lH:_}3 Ãø½óÿ{ÎÝxöD= eËjv)j-KtÚF7ÀÍãÃòeS³1Ð{!ëwH«1¬È¸Øýi¸0mOPüéyMmOXÂh
¡º<¡!øÎÀ+ÓÿÀU!4¹nð?4¬²Ôj FØ»ãw;pÃøÐ"ËT'b[[ݹ?°#O·Õ·O%·¹¾É³ä,}èÚöÝvýÝsÁÝÑ*z¼wôõÆãúÛ³~t±üOá±Ë2¸[
|
|
2494
|
+
ÁÔ(û6ùé2oeÅê½úLÁVqR ÔI7ÐHh=M*àCY¬Ñp#¸ÞYvGà¹8 <co[³KiRGj&õÕu6:ÿ¹C;´ÕÝèÂËjÒOõ*W±[Åk¤íknXâ±vRa¢¯IC¶Ñh}£]ÆãZµ*StÂmÔkøòÖ¾Ö¯w<
|
|
2495
|
+
¥ñͪÊw)*èÑ;fy>6z'ÚsFaãì(¶õêÁöcÔ@ni±c'ëA>QоñBù$JCv
b9|U3q³Ø8:Lw(ô¾îMàaSåÁ®bGÎβÖÍÞ=
|
|
2496
|
+
<Ò!¯É."îRUéwºÌÊaq_Ë;e]¼.ã1ØÄ~qØ´¨
|
|
2497
|
+
©pz½¬ÓsÐü¹Ø:2R%3§ü+ f=}?@Õ,zèz%øíaj*Mô
ÈÍ$w§îyfhEáeD¬
|
|
2498
|
+
ÿtáоÁÚãèV¦eÖ>I[Bë+V(mÀ®TBã:ê{AÓà½WWºÎ.®yj{µ¶y/5kÙ×¹wð¾ÒäÄ-¦ pþ*-+i} Ë}}ÈiÅa<ûceÒ¢]ùá¾vÿ¡+øtÂçm=}qI7hyPÄH±ÒlظjuOÔ×ûÊ86
|
|
2499
|
+
%W=MñàÎ{_bØÓçõÓÿ%$|Dì£ZL3F
8VãWu";¼×H°×kyPøÑâëp®=M1¿ëAp:U>2{íØíwK1-<êJÜÌùksöK&êB.3_g§%ÄÅBÆ_®Õ¡o8C@Ao= #±®Pïf|§áÓñØ)¿G4¦ÎïVYÿjMa9)õç[\Ã]= QßÃ\pn,ra7©ô35 õH¬mµ[ÁÏ¿¨îÂëqç¸ñïy>
°ã¨áP4ú¬Pi;Ò_çÂø^büZ°d!j©^/i¼CpÏb0üö¬FE´ôU$iÀâ´v+)ñ×"¢:Ë=M¦.Ur{ å=MÕ
|
|
2500
|
+
IÝFÆFÄÄãç©Tùýl=}<Azào.ûy2£xá3yhUuj½ù¹c-¦&í-tüßùo¹ÊËElßµÕx¬îfFeþ|)¬æ«Ô¬æ=}f[8mí ÝÁ¡Þ¼]"dÃ>PÅß?F^ßÁVä¬Õ¾F ¶»,L±>4"=}8º¦Á
ØØJ:عJ%ãJÙ/WuØ©*ã¥<^|M½©S3
<sd#ÖXæ<@ÍÃNÚÿõú^úÑ]þ¦ÀÿÓ³ÜÃBåç¥ð òS,çT à@ àÖd"r°¦öFUlëü9Æ
[,óÒ=}¦ùîùƪÌ(@zØ[«+ì=}æý
ûÔQ9iÅí)X&7Ø%µ²´Ã_ @´ê>ìÎÝc {À·ÖdzC /zïç %ZzßÔ,NØ/Sw,¥¬$µ²*¬^S=}ÆØ ã:iÈ#eEȬÍþ õ{É;^c÷Ô§ìgÁ°^ºø»´ömìéÆxÿ%3&.·ÉƱl·Ó=}-p,Cóó£l[dNÆT¥R³=M¾¹5Ùýb6Ý
r¸MéWB$Á/í1ðm¿ÁOñÔXLþ4¾kK½É¢PgsáäÜðSö¤ö9ÍKzotõ= ó}O,LàænÐ6®=M^5;{°fÚ['[Ö^Äýª¯Í´M"&¸´¥øM½&}þýç;ÇȬvyÀÆV= mFyÖpc½o(±Òk.Óv%ÌôpÚvÜ¢®Â5?I].íý¹2RúHåÑ':ô¦ T°éåXñë(xj¬3B¦_×'~H>¶ãðy©'+XÅÜËXùêñ·w¹Ï- ¨ rF}tÐrJlxËã¶&¹Ð?Ðî±lqýànïm.^Î\RðÐÄÉ?ÒÔ]hûîqç¯WH÷CJvÞFñîBÙ®Ô|Z@ä}#Püt'-F:¿&
¨8§F"¶Q+à-æU|ÎÍ£ùu+y£¶ý.Ø¢Z\:
|
|
2501
|
+
-ï*°s .ç$áås¦.
|
|
2502
|
+
Á89¦cRY4Uh©Ñj|:èÑô½9®MY<¥<ÝX®W·cm#ôU
»UDaI ²ùlZùqä¨RͳΠ'SA¹g(ò©bÕÿKáFÒm¸\Å?˼â®E7g6ö3«úå6][éæLÁóöó]ct5Ëig×nò¦Ï ¦r·îêÆr= Ö´"6s´×QÙÇøñúõ^mÄDÏ)ûÈåRªÚFÅágéôIQ¨ÃæKÄ_¥Ì®ð¾=}y4äò-I¿= 9Õß»BrºÈùÁ=}ýôQ÷ÃKì|Õ0ó+öËÔq\@ªÕ§brZ"/Ob Xð iðÝQ53ï Ú>Úm¶= Ôpî<S e¨ö}ªJ=MEÖü|£gUáfÙY¤"kï|¯V{ôeøÃ~gøæhKw=}®G>Öâ±þZç7Ûй_õ'@bS(õzáh)f[9廊mH¦a^,Çxs®35ðúÃàí%*J6ÎdÆ2í<e<KìXãX<X©ö#®
|
|
2503
|
+
\.«Ï<ÕÅ<SZ.3ç½6.ÃV®YYrtÊtúOêóð?H}ÿ[³´u>µ8[¶iä7Åï^¸iO¯°nزHõÒè·KÕ8øºB2RF;*gÚ(sW+ÿÒ(×½1ú9ý4W)¯_+g(¯ZÒe]yóÔAL÷XT«eEí±>ËxqÖ5¾Ü±¼Õt
£j¸öììYÒM©õþov
Ð7¹ù^«Pâ·Ò鸬Vó±~ jî]pz0%d¯À!Hù2 ½n2åŲhþ"Ò¬SÄ÷ð¿4sÑyo&Zñå"/ú²oϤòÍ;Hû+-ÊùnÎq1D»2c½þÆÜ H[lc»¯q¿Û²_±ù%¼²=
|
|
2504
|
+
ýNóÈÒÄL¹"³óÈùà#Ú3¤íÁÄ-ï »5I{ºÙ CEj×B+Èo)U<ÉÀÇrb-9üÀKzhÿ~-§¼úg(½@¢n>ýàm3îýÑâÞGæzæhÞðV§ïT FÂaÐ<^$¯U¦AÐX<)íÚØTTµñR>NsFÛé8*F>1¦ý?]3_ÁùÝv?õÅhØL£9aö"H/復!Ì>ï§Ú¥(Ò(kÀI|L¶Á÷Óð
KÑìJLÒ&¦®ÑIí(åz¢aÑÆù,#L0Þì2ÞÁvÐZ5/öãË-DÖð/o'8¤
G=M¬gMî8}
|
|
2505
|
+
¢ï|é-Bü¡×s]1û©ìû~еC¶/·!캧w_àV DG%Àª"Aî,düª@¸_sQ,æÝ¬¼¼E£9dýcðE@$WcÐfHêCcHB¦ÆP8¦áÉÏ<}mP]H§{Þ
|
|
2506
|
+
ýc!éb%æ§J= *äÜs= o})ãIj48IQXd©îg´Ø³Â¤ {EJHÑs«ãT§Ý´CE§â®¶_çí<ÛXfå,ªÈÚîNg3.<fXpá±sÌj{îÑߺuMçî.ïf®ÚF.Ý6®ùÍ<=MúX®ÊëÌjEgÅpÅfÅeÿ¯ÀIóýÆA³¹NH¯
|
|
2507
|
+
'µ wÅj;íDCºCDV3EZE=}ËiÌ O½Ë0iÕ;jÛ<±¶^ùL=MKùK9oÕ .ÃïøOòÀOUò¬ã¨~â[ñpA^ܾ¾PÞ°Áßf¸¹C?6lûÓïAx¬PÁaâ)áG¢ð_ªp÷Em3pÈFûnXºcÖÖjÎýHLú¾}^ó¹ÅÎ÷Ën³&ÒB:îÅÉ3ùÂQóyv¢¸ùÎ!ËÓ°¥~æ~vÎ
_õMxÊ䮨
}º¸õ69ûÂÝ¡Uö»ªÖÓ^%1LÖZ¦-
|
|
2508
|
+
Ú·%«.Ò+®gùÉG¸¶¡Åüoëø5Öá-vºê~Tý
ÝO^'½R¹ÑI3îÂW
|
|
2509
|
+
ç¯lWöppäI:CQýU}lSótC÷!=}È^s½2WÁÍð@ÿ.ýéE×Gù<cKñ¤µ#ÉdT¤#¦óG=}ûPªþ:k_G°ÂRí3±¿ölºÌS»l%)µxPÞ.¨SÀÀ+p¯ÅtØY]þÞªÎÏųm¨û¹3Î{qÞÆMmÀEyîÄIG¯ã~ùõ¯Ò¡´pCÃ^*å
|
|
2510
|
+
fÚãW³åâÍôÑçÚ'¹½-Çú hrN¨ÆÒ[åNz±Ñ§.ÃÏ'êcU (-÷Xf»ê¯3ï]a:·oòÇ ÒLÅX¼ÇÉKNrwÂñ©ÈEúÿ*½µÊÞG§»ô6}ݽjÁwóò«é^ehZQ¯IZ\³Ò×
s|ªü¬z+:àÅR¿fWôâÿ± æ/TGù¥f#C°gAÉNÆ/jÉpY?ÏDdzõ´7ipbrMËGfZ½öl÷Õò'x¡:¾5Ö£üH Å=}Æl=}Ûë[aÓÂSuáªÎèJ¦^:xÆ©#Ezrô=}Û*À{oü+f?»^ÒOÒÕá¾£nf$Æ.à#<_(n-æãcpÑH"×-ãÐ>¡÷CÁTö¡ãB}2¯âËÃR,ô[¯å§ºÑèV.õÙQ
|
|
2511
|
+
ö$¾º¨7±³PGRòLÇ &s¼(KÔÆATÌê»®÷Þ¹(-¸¥UXV*UäzDæÞð[Da¯4+%/{íU£@ú+Zìaà¬Ù¸ý>îca#Õ»¯37%Hj~¨Ãªe½Ó8½[LaEÞIZíUdËAþDOcÜÿ,¹Ø"ÞÏà#KñØ*¹ËPòÓy£ý÷
|
|
2512
|
+
zàù(îݬQHå8÷h3Øæ¹ v¸ÕIQTù<¯ÒìQýé"CõLÑÀEÖmÕb#KVÕ¦ÙUaã&§Ð¬M¶}ÖeÆä.¯SЩ]6]Õgö'\ï ɱC<<qÓê)}½±Sÿ¦Ûø%§3}Ðf÷5ÛâÆ«;²
Xv¦¾æ³®Ó3]°Ý÷#{z\âî3÷>bTñ+ÃÜps ¥YëÝQAî;÷[»½/NǬÖO,\ñMã7äõ/ÉHóç+ݯzõ C"ð²7 #£#q;¨a"ñÅ\0 ³£Ðø[(ÑiaèÊ*bÄ:,ÃSáH2,¡R¼Mã=}RØKcï:9Tæ¥Àþ\$Bc°[$ªê0L92ªÞkc]H4÷o¦H¢
|
|
2513
|
+
c^B,^«ã0=}¦´po-£·PôÖ·äY7éBç¾=}´¾³ã±<Â"YæÔsàÈ"¹%5têV%¤x%ütÝ¿J°|À= d³
|
|
2514
|
+
ýc©Ã´¸DvbÈädE6H±Óq©¬ýj¬_ÅdçËjÌëpb¥ruß2ÓKµøüĤ®Ä^<§¾èñm¯ä<®üÅ<ÛX{t[d\-ØîY,ÖèÃYô?GYäYj3Xö~°E¸ÿix¨{6gàs®OYîôÜðÈê¹
|
|
2515
|
+
Wu%ÊB®â2u¾R®ê*®ÔJ.÷¿<ßX<üÌÈÊðÈùàñÆÚ±h3çÒ®*5«JߪwKg¾êÄV®0µûJJ38ÉètËDÉüwésÊrÆkÅnÅiÅuÅ=MýMΧö =M:Óß
ÆïO
-gåÉÁ
!õìå=MB+ßE
|
|
2516
|
+
»¾ì÷7fÊi&ø·D=M4iD9j~ý±äþL©QþK1]X(¢' Q¢H*ÕûVËûÖÖûÖûÖ[o2ÙÄrNgWÇ[¹)ý¿ï|íNoúáöN^ê4ìïQ[÷öÞ7Cê6ÆèRIÌ~h¯E=MSWWXÐO×]ùª°@s,{KÝàöuÑÛÍÌ 3»= ƱþYÔBÚÐ%MÜÔ®d´×°Nz@½~ìqoöIZ±Z}ð¡äôX YÍ®"RßrìÇßäÍ2ÄÉÜÔÇT±ÇLE
ÁnÕ§!*»ð´R+Zû¶Æ[rKWúY
|
|
2517
|
+
e&nÔ(<ªÄehÛO©6Ödz.ïIÂÛ§êés-ZVrï;ßÁ´ajÖ9'3±êÆ óR3e9;R?¹«âIîÙÌ ÔÌ©{§y
;+êW= ôýý´û§ñ'Ñq<Ýçaâ&¸[T*~½ceüe\5fNW÷=}߯ìßï°5^î§þ?ñKJwdw?ÌQáËÏ"YA"õyØ\L!¥IüÌ·¡nµ<~tJàÖz)ÿ;uúŦUU;W¢¯QÁAöW¦Á®I"íqq)ÙVHX§ß=}ïö)%
NÐx=M®¾3Þ°X0 ax²>¢W»ãQaX2ýÙñXD.©Ú)Ð?jbÛt¼kkçð©LÛø¶¹4ª2ôO£êjìQϦZhW= |SbzÑ{'|FÍyOæ(¢' Ð" ¢ùÖûÝ|ÓûÖûÖ[ûÖ=M(
|
|
2518
|
+
(,ì*<ßc(<ÀMj÷\QÞ©C8hRÅ4®©ò<±
aYI:Ìè¤j¬ösA
³J)
?Âaäm~ùÄ.ªòtÍôGÄâ )fnTÆÃ×I&ìØáÝ7¶Ø{sè&W7[Ò>ùsè7n$ÛÐÓKfÝýQl=MXOÜêÜ ×ü·×]:à5+ð9dn¿0úc¹ÒB<#ÅhìfÑ\ÄWù}ý/½!<Y°^Ã&3úQ¤õ§q7R¢ËÅCYTÜæÂ·W®çFÐî2*GtÄcÆÔ&Ïîâä<ÜQþN¨Û5Oûå
¬9Ó¢ÞzË8¾Øºu§÷ðÚuVT3óæâ+ÓµÖqßµMiû8[×ï=M½DïøåýÛ1ü0ÏÛ73ñ´·=MãI_uÏ/@.ñÔP'F?|ßÃ8<cõXKtnðÏ$§Jn2¶ªÉ_ns,Ewï2<Ê{ï3Ö"¹sO²Q2!±·1Ù¢Ýýu¾;|²êåØ&çKò¼«g©×.?ò>ÊÓò#Bn^¡gû¸¿ÐsÒ_ó¬Lº¢ÛÃ~\5}Ã:¦á±gÍÔ|_ÐáCvV¿pÔ¬Ûé7n8åc;*zÿQráLµ¿´KÂèÖúEÑvB:'8åñ1Ðh\ï¥b¥$ú2iiBÍG9ÁG¥ÞbJϤTÂdR6éË6åÒF¾cªdNÊrl·îGnÆ á¥´ê7hѸêEʶòÌvf¾fY z5trÅw¥ÄUöæU,TÍ
Ý=}¯LIÑàøÎ±q.m<·k+ýÍXÖQêÛ½Þ=}¼~7ï£Ú:òãõP¡ÏB)¢'àX4$ ¢Ñ{«øÑyûÞÊÛûÖû¾Á¹*3]t±ÍpEôkKõøÍnóT%:ì{á§p³eUQ0ÁöÓh»/íúب¨ñAyÌkt«N.]¾WÑ|ÄofÓ^w¤&ÏUÀsèõ¦¨¬hy
dÒ·Q¢5æÜW r3b}myªÆ³9)íÈÓSÇÖYÑv6¸á\skFyòïàªöÌøÏ
íÆy·ª-ãxõ&Ó!ÖÞÓÅʧ=}Iïð²ùÓÎ]fU.4À±CÇ<èçG¼±°+µMN8ÙR±K¯üð»
|
|
2519
|
+
æo]ï½¼?Ì á7><±R¦Gvå~XåÄd¦æ_à§¶µ^Ü0Ê ZbÚ0ݰ*1ת¸tHfиâúgß¹òP¦ßgÕQ ´+!ÄÇ&Â×E°¢@®í-°PC§% eP^UAx½,lH>MÁDú§_V¬ÖOµ¥bXû3C¨ÀêQ2æfsD¢ÆH"ngBJººµñ¬QÁx,ï?å@N¨åLg]¿8gàX~õa=M1810oî®g}¾à£³)/iüd¶ÉD1OküD7°¬fRãÞFSÔF%ÝI¬hÄ2Lµ©ùlkCùD½eÝóyN½Â,zÆ
ð^£ªÂlz÷
ÒæT«¼~yì]µåDVÂÑù¼me.ï6S'µª|ú°k§>ÃÚ = >î¼;´oäÙ2e%Ü!IW*¨-I
|
|
2520
|
+
Øb7CÒ¨mNÂ=Mq1cªQÅ8µçå®Ná)&/jx;~êÑżÚyjq= 9£ç´±Á¬6ïÖ,Hgؼ-ö5L·w0ÚÙ"¥vEñEµÔOËûj¦råÙu<Ýze£wUtówUOðNÉÿÂ:<¿õ3rëÕÜ^tëZòë°LÎãi=}C9ZÀ>»½´ÈW0¼ñ= ä&n¿¢mCOÊ;ÞØ±Ñ/:YýäúNm({»èý¤À¤¾DyOᣤê0I³Ý´7Ä(´øk¦»¬ï
Ø(8ëLzJMYë=M4øµJ(¼Â%zjrµ\:ÌdØ~©é+?&ä!ªÍM¨Â;ÕûæÎû®qûÖûÖûV®¹´Ñ;zøÔ;ÉÞ¸¯¢?¥ØågæwSwÙÚüïæûªE.ðÆ ¼JàÔ!öý,ä/Þ°{°ñ¢\Z7A¦7*Åc¨sb$§xRäìô*÷(zî/¸_âäî1Ã(eøØTbÅ+16Å®H:déý]jÂ%q6½¨c´,Bµ-V&-¶SÈÓõ£yºôéÒÜÞé6÷ä¹·ém®qC·¥ÌñâÐ^îÂàf«·MîÑè»êÆl»_zû¨>Vøÿ³¦mç߸êAei§!í<6Ù.æ[DxðôO^h8ãÅ6·}fÕéMNvÙÔY
|
|
2521
|
+
ÞkÖÿ\RÇØqðÃM¯¡½]ü¾>¹F¬|Ñ °çÌ{>u^L¯KX»eÐÉÔÀmcá¿Oáå)¢^ë$Ï+ò}4DFX»Äbi²ÅEUiN´=McE h.β4üK ~òÁDëéú8ªrIÒväcÑ×ÖÂ;åÀÐo¥:ÉèRsQ¥åûªSw5]¿HÞrtwóJÑÆfí¯º¡õðäÆÇÓÌÁQ-õ¿ÄIWo³µvm£ºGTùj]öÇÙc³=M( b) PûìÖïÖûGûÖûÖûíU<Þëúy/¡ø'Òe-Ä®?R
æ= ü¡Îe"Kê&Öu+ìË?üB= ¡k#¬(ä¸0fü= ¡¿ö'º+Ìþ;ØDÅ= ß»¡/"¾Yï'ÂìWîoü?ÂùBa4Ñ[Æö©åiä§ÉdâB{±Y§¨¶wüIådÒòqo5q˦8g@V1{¨qÍd÷nw±ÒǸùgU= 49L,ýCåºQQ
²[u½A~ì=}SkLxDÂL5½¶«cKådΣÝiøBâVq§hÓkÕgûKz7±.ª5§¼¨øôçå3³sÂø÷f¼\KÞ_O²0eOªº·dóëÂ5qÊHíßÞÿ0þ4[ÌÿM±Ö®x5ª¯©ñ¶ÞxY?¨}¶Áx©>Yþ^LÊûF©=MÛǨ-ÓûS±ïZú2Û_]7ÉͲÑÖõNû§Oä¶ðÒziËMͧ-ÓiV÷vøfû'¸½Ñ«õø=}Û/=M±]ÑÇÏ=MÍ÷ÝD(> ã¦âP îÖûkþíÖûVúÆÖûÖûÖýÛ¸q×y+¼©*üwÙ}Ûîî ?u[÷&L,§|§èGkØótN @þl~pýä_[á-ê¯L1¿ýtl1û]ÊñÓúÎvþCXSÛ_¹)ßÓSöÐñR;ï£g>Z¶¬ã¶´ªSÍe*Ìs£½]èÄ/{QÛîìËê§y¦Ñb"®yL
I[3pïìmÚøËAi4]Û_¡®½½fsíÁ©eP%u]}(ýjFO9
ùgíS¯rüS4ÓRiÝeK*?²ý·ôù¡öÀQhQr¬þÅi²o³LÝ{Àdª÷ô®©6óÃço¬u¡Y½c.´jËqé2:ò1lBY1HA¶L²³yZ½<µkV1]~nBqUôÙÚ©ÂTúÉfOxM:¦°Ö1°l9nï¸^19úshZ
|
|
2522
|
+
ìâ<«ÙÝ «È9,¶Î¢ñÅÕXFß!Ê)»AV[\N¨Ðé>xhgçA(®ÁÌDê_¼¥PBbõÎà-ìëØÂqÑQØx
|
|
2523
|
+
*vÿA
|
|
2524
|
+
G¨Ì¦Ôßç8/ÛWÂ0þ(xa"ÊÿÅ0KF£X5Y¸K½¿2DRtûÆ&ÍyºXÝ{;qoQ~u?Sã,qþ
¬{í°æ"½vèÖ¡DùÃ}äÊTì=M¦ô_>X»%9î7rzX^H(qïbPV],®fBöG:ÇÖçaæQ!²»³èU5Þè= 6êNbÕR?£6¼r¬H§éÕJõÔe]²NVâvèÖÛNÌ|ÿ+ÁÆ?#$á#5 = áûÖ=M·ûÓ=}^ÒÖûÖû±ÒæÍ7zS¾vÅ!$-áÚáÄ9.ääl[¼þÝgC8åÙñ$Ȭ
påXKnråduFÄ*¢]#Ù×SÙ^Vk0Ù>Û¢òbìÊ72ÎïxfÓDîÍdÛ5v÷ZÅÍGáfÆLøì®¸M0ÅáÞD=MÀN¶úã
|
|
2525
|
+
êÝõÿ¯Å£¬9¸ñgØ8K/¿@èIg½áÓ\ß¾«SOò|©;®w:?oþ)ª;Dù1JÄÖLgèóÄBâÅêØ/rEÀdOÁ:LÔð çû8þÞë»bö?0Ø^5?>@A¡/>ñw¸Ùºo¸Ï´¡*ï(·®Êô+
|
|
2526
|
+
E~~5E~C& ×8éÝc~ ]£õ_gjå¿xSÛþ¡9Ã0ó|a¸oFdwqçj¦ézw
|
|
2527
|
+
¯N¢+\rög
|
|
2528
|
+
©!Ó;äPdFºÂWñ<ñz+¶¿Ôämåª ÌÙ£z¤MwK=M¸]â!u®ÌYä¡Sú}9ªÙ;cç«GIr~ÝÆõõ§ðbtfsÒ] J¡|7äñèæ¥×B¬ù2h«D÷Û¸ØV&¥xåÑTM¾E2[²äÏ7é,o¯TN°î&&¥N¹hÔÙQ§aNöhsÒÓ°mï«X?~ìîqÅÔ¼OcÄ}nx%¥KË(7vC.ÌÁ
=}ûÎöìÌ¡eMdë6ô«zqÿðîÆw=}¤ÆRÒ» ,ba Ó{èV¶ëÖ]ûÖ=MºûÖÍÛ§i£¸=}\(£ÙW(.ácøHÛÆ,ãI8/¿.çö(æ¯= ýhÎM9åyÃxÄT:~Q&ãÑù[.ÉÎxØ(¢@Ï$¥/4B=MÉP+eî6ásc4¡=}d¨q?R÷æãÄ)ܪ¿ Ðdf»ä¥¶i(ÛnÖì4ÔÇnr
|
|
2529
|
+
t´õÇAÒZ=M£Ð ,R¾ïD
õL¶öîÂðVmRØXN+Òÿ>ñ_!YI+ØÇÓ°Óç6IÜ8©äåõz¢öñŨ«LR|·ô*þl|i
öj\ív1UÛÎå:ÖÛÎãÍ{oh÷%¡fî?ødÙèBRWSÙ%»{Ü;Î=}ûø:ؽ¹ê@|¼êÉ2ä¶iPük2½Wr\ýÕ#G½Ìîý©ÀóNÖ»©]8)EHOû½Qå¶=M\ Åa«.æ0e?/(S¯Rð4·àX?Çú)ô÷½¨s
¾büT³_¼aøyî³cÇTÚÑÓZ¯+øßhìkHÖ}ì
LÍÏPõuÊ."90k³eðZGpFa;qA»Óu×1+ÙãDÛü¯¡I| ÑÃ>ÁA{">¡ t^éÇÌæláÈô\ô+öYÞÉKZ
~3J¦ÔùyV=}±¥)oÂõ'ÖhûÊo\Ôäxñïd¬së¼
ß0»%Á]K]«ÐQµÎ \G_êÑi>E9%²ó4øÞw±èª\{Τص2kä´yÇÀìÅN
¼É@rÈ¢)uDBt9Ñu:/U:ÈCÈîÑ:ôeË&q×T²Ç©M.g
»VºþúNð×¹.BÚ\vô
m¿Nâo8}ÅçÌë<oóç !¢-ðùèocz;1d°¸QiJæ.Va
|
|
2530
|
+
Õ)ÖFìÜ
ª¡I÷ï¸ÑJá¬ìOà¼;MØ¡ûbkdÍLñ¾åKÒg{å:Å>¾ùtcø-{æ4úsú®ü[?ÔgPü¾'LZÀÜö1ug6Z±=MäôîÜVÆnø¥·ÊNl:jGwl|âmÙ®¥[÷\x²¡ºÔGcò\ñX
|
|
2531
|
+
åªxOª2ÂØ/OÃOÞÞ$ÌÃÿõ¯Ã«×PæÉIÿ9½(Ñ?¸«àoþÊdOÌ1_W"?ÑW~uç?¾
Ê>ãÜ?÷&ÐÁJ IW#1L+ddF¨eaÞ<ìëܼ/(Òcij/àÉPrsâØ\<Äb®d@7?ác±L¯¡HæfgAÐOº ±ñú3ãõ8å²>:ë¼½Ü-©Ã= J¾CádkFLH¡©d^&FÒ= B©ì Dä³Y?°ìR4f&ÄpcJùriF´³nߤäSx?°¡¬FF!¹©QKP«g2ùd$Ó= R'ÕÀ<ÚE4¼kÍt>¯bþ±¯^508v b$C*ÛǨDZeÌøwlctQk8sâ±£Åì«KÅp9Y
[r®}Y:çJ¿|áã3µèÆvt5ò lUSËÙB}ãÍ:¾¼ÏcM
|
|
2532
|
+
7ÐèÏã]Á¥ÀÉØ¡QÒìM¤;mhwTvSúuíØÿAÚÆ¥Í,Í
ãVÖVÖ[¯ºûqú¡'_¾2ÿþiëNz[Û8Æ;ñ¾Üq/K_ÒÀ·-¿xWØ¿uyT #¯@ # @xçÕÍøÓûÖûÖûåûÖWJà¯ßeVì¯ÇçÈ9喝gS¤_¡A!ÔJ9àù±!n%Pj0è£r¡Øf'R@¥aê$ñl0§î$1H.Æù¦®-ù^ªcèN7bÕA,ì-¥dàÉ"¾®3¿G@nJd}~¨Ü0¤4³ªHv~dî1Ö\1ɸè¬3Kw쩤éDT=}Gá¸KËxêÒrÚ¯µÂ]K¶hæèRRÔ¼]MÃÉP´OÅb9RJ4áÉpf¥¤wR¬ÎCâØ\¬aLI6î¯Á´Y:îT(Î4®@$E.eð$Ó*eÒÃDÙBÙS²'H>®ÎHnÓ]ºiýÃÕM:çç¸øÿI¦Î;h3ã)LmûæLc¾å2Ȩ= XþLãXÖÆåC8oÕìØ9oa"F°UC!NEpUB±Úµ2ÉSA±ªÙ©ØeiD´jD?mÀR®¼>k¾rßEÓþ¶¢Ñ*ËVÅ0F¥¾ºt*zŲØBµ/s¹²¶æüº³æÛË«j¾nhGZK$9K¾¡h&Ï.P&VFGÛ
rFG~qQÕe6o·Ø»e»äõìïô+ÒÙB¶Þļ£cL\HÇoYN§¢/}4LøÀàba~Ö²jµ¼¸ÇdméÈh5·JȨ<ÃÂ5MÉqSاºþ»õTÅFgÁaòdãù:~õ°<Á
sYMÖ±zö>ö2kk;ۮͽÜ~ÃCÑ.ʾâÕ4ºÊg»Çg<F&Qp»¡wÏ-w8ûèhYfN~T²MUñÒ¤©ù#mý
BݩչcmíL¾Æë
S¹¥'EL,>A·¥)LrzÉõøêÒùv¾×B4ùèLcóçfæ6;¢7VÅûytûnµé^¾ÒS¿½.'=M[ZXÙâa=}'ŽHèpGãX þiuÅ«ô¦NlQD÷e| »NWÒnúÏÓ¶»ï1>²kÐ,ÿaòcpÚ·Uܬ:eäëÏ~*cPëgå\?9*'àX ¨íÖûÖÖûÖ}íÖûÖh¦Æoy³$²úEÐ"sOG0ë±hu2ÙôM±®Ë3K±XB¥aÙ1Z\ ¡e$u)(/4ðLyà×ç"v47²È5аfÉbF_5ͤ¨üZ1Õ¦¨¶JÂs1%j¨ÙÇ1S°8aÒ¸¯ä«jhujèú¢Ã¤nD,K@
¸djç¾rDËÅÞAEIÇ,e¢¬3=}
T}Lò97Rèûpnñȼ2S[JþwYëÊIPZ5\?ÃÀý.%÷~HÈwriwÕ²¥´ÄÍ»j¶tñÓŪF=Mtü»ËÂ)5?ÞËuwÓáÁHU×ÊIdm©â:¨U¼
|
|
2533
|
+
Ê2-uîhÿÕÕ¬YSfkÚzj]ñrÁ°®B=}OZ xß= §Ä®WÿÔÏÂÒyoµA¢;¬ÜÉzV#;;7Rð²¡Ç[-,@{CݤfîP²Î±g¬^8±·Qqk
g/3ikl8o»Øí¤Æ²¹µSOºIÒòlÍR³ßÊ¥f+{ÑêâÁ6ºÒPÕªµK&K9yIÖâj±ÓvÓÊ¢:;µúxßèf¹VÐÑÃĽç2[ÿZøTóîÕÝv\Óê{'#c.~@nPÆ£U9½Ï Déj_GÎ
n¾Ò£³êE|l2ÚØÿúeééN2×ÚpüñRÓ»BÕü|WÙ9ñçmÑåÆ?=Mµ;ia/Ý»¸P¤§±\ØïHõãr~tBO~jm2jR Ê·5ßÜLMÔì§Í½¯¼³ÌiqÚ¯%ßLÇÞì¯ÃÍ¿ød_¾_MÏiãïÆò!â §B!®.ð} í"¼?jÁ@§»&¹*:0D@³/$éXh\¨õcüv§üAäÇiAE¥xQd¨¬eã¬6ÇS¬Ù¸ãú=}ô½P§¦yyNbg¤Á(û§fÑLâ£1^_¬pWs4sÅH>i4}Djq~M«R´º/ÃÌê0C¥8¬¡8Ë'åøØPæÜýQÚüªq¬Kåd»åÙ
«óÒg¼óÄFX<À ê"@Ú»;'ùöíÖ^ûÖûÖûÖQ¾.¼Zó¡óÏZÐUÆãì.JX\ðÑß¾8ýû7§S©|îù|ý
¨rÈëÝ¥Ná^·[×|ª ³ä
>¯#õ]>ë&»±×çÅ>M_|¬³K»o*^«zÓÊï²-^ýn] ³FnÁ
|
|
2534
|
+
$,-#,)Ø\Oæ® ·"Ý)5]Dæ°Yåbrö/ Gcî--©^_Dû®°b7cÒß*©5eQaaº¢å®@_¡¸FxÛn¸ýÝFØ>ÒJÓäKE©÷hRoir-µ½CYÓy2ÔDëCi¡¿²)5ÒHεt¬ÀèA4{'JÒîp,ÇXd1ÖBge¶8ºô Tÿuñ¸vºØ}T³gÂî÷ÔùÂyr¾ûíÑ,ó9îWlÉÈôâä:ôp㣹¦ò,C/9}Sü
ßaëÁì¶åMµy~×Õ
|
|
2535
|
+
Zâò®
íëëc¶ä÷L¹¦å!pÈH&ãùÖû
ûÖË£
ûÖûÖûö»è=}çZ§%=}ºwþôÁ/§/#<n¸Ùô§¯G=}bÿöH·M|¼NI+ØËrÔ±ëÊîN±ÌkÍQNãÚÌxÒßëÆ+NÓ>Ú²G¼ç>FÝgø">a¯;]R¬>Ѻç²
>sÖ^qºç·Ç>Sß«ÓZÞo²^^¿]
^õiðúGsO¿¬®[ç¿ÎÛ½yýGíS¿~§-H8GÀgÊ ÉY"v6+x{Y~ã =M#ÊY!q&&97pnàÕµ!õ×'^20 r= õ!ÿ$ì9«Èx3oQKÕâïÁHst×¢}e vª³ýbÖvÌ8Ê(Uiq¾âÎrLøÆøhÑ|¨¶âSeûoªl4×ÂFðäjù´}3ÁÐÆsyí:ºUû
|
|
2536
|
+
òÖº>ãTFJîñÄxÎÜqS¯Æíí«Aü=}í½º*?U+þfP´ô0ÄW¬è8yøë8zvSýòÐÉÓÁÉF¦aã,ÁG8îT|xh׿ðË^ãñ¦7,Ï:~^RüøåPÏÁdk¬x¶=}©Ls{¾ÖìÙ}ärƬ
5ëZ¶¬mM-ûzwëDçRçz,Ö¬8 RùrÖEë±u6³EáNë
|
|
2537
|
+
£¶GMOxrýÐ,ÚÙì²½Åõwëä_¶¤q¥[bZÑAµÐCÃPU§ð^߰ŸÈÔPβ°ËÆÄÞpݹÚpÂÓÐÄÇ0ê7ªP°¤¼°Ê°ÖpÁpÙpͰÓ0ǿШð´0¢ÐÊðÖ¡¿)ß~+]_*Wß)e(âGí>"åh£@ Ï5ûÖtûÖ=MåÖûÖGïÖíÚMæÍûì¦Ïß:ÆRÔk6㼦K,¯*;¾µP\LØxéÐÃÚZ,Í:8ÒTUxþîpÝÓáÁÛr?ãO#ȯq&;¹^ýЯ¦ÐÙ¦«,³·9®ÎRx¨ùhßýp×Ác©ã¦ç-o;Bï9þ~R<Ü8ëp¾AÁàscû·Zxá°«È£Á´«ÀÛAÛ×¾¿áKðpOôÐ^â<H8³x#âWÇ´d®Tddl²µH±£èµ»M? |¸øq¬8y²Èt¦¨Lg¼ÌhÏbÄÉn¼ÏiÔ§¾ÍkìÀØæäÆdª6äüvô×/ñÛ]×C±Ï+QÕ;Ô'±ÅWñÃOÑÕ_À¦0µ§1]g0<Ũóô$]_©U¥Ymì@Î;6Ñ.Q
>ñ!q1ã2ryi|Íü¨å¨;(×äÂídñÍäÝd×=}
|
|
2538
|
+
Çúmß·¸×¯ Xh¤>ò¬gtHqXÑ$1²ºX¦¨[kT]oÌÙ= ÜhÝlÜÂùÏʪßnÞiTÞe,ßmLÛc<Ú˨/)Ï'däcB 13÷ÇäOïôçõ± 7¤kíªXºø¦{Â[ÂæB'âwÎtíoºSq+Cçß2Cß1E<(/ùhÔòîä9 ÂÎä)f¤é:ÂÔ'pʹeFi?åjuÊôó~Ê3ÇÅx Ñsò'JnâÄo0lJ%Ë'^¤8H/ÄpHQw<Å8ÑjÜÄfXÑb¼Ä$Qc>i¦hÂÛ5?I5e¬¶ó2L
©1p|D¬³em¢ELñ~ê9¶´ºaê2YC¿Ei*æ3mØL·|"De"qt:j?¹N¤\4g©°´©d^ÉLíÄǬ±YÒnëÙOämbDqrD1yÅÀ´±:òpzkw OC¢ì°Òlöê6ùE'¸¼±«mëBOÕÜ·om¼äeüåsäo"Dh¢EtâDbBEjÂEfEn$Bh0aD'ÍO/PÅbßeIJÛr;¿zµOfË|¦Ra HV4e!Öûÿ]ÓûÖûÖûÖûl $Ïúgýñ|yÙC¹áÝS¢wQ¿¯ñüáï^ç©í_Ì0·^tK2MKî»7ö®Ô4®¢1y«¹¹r¶Ô3[Ô½açùÒËl3öS¸CäêÅøÌêЩVç¤É~Ò
>LËã¿xdÒ
|
|
2539
|
+
éuNûÖÉ¢ÑôFÖÿÛ·M<e¬FðôoóäãYô1ÏÀKïùm÷d©ö¾]bí[n³Þkþmú *gÞ@ÑÔí*Og{jdÈÅh¢VêpezëtI§F-õEçÅf´Bf?g{³Ä¢]Mxb²]èfú·N'ñê-T,)®mÄdzóHeVÉ¿HÀ²_Å9pe
S:h{K¥wñËw#hè¼?#¥UìDdömaôÅì¢f|
Nàªå}& %˰Mªþ ©ñLíÿ¦KÝÈ-Ü2\$ô<eôݳ¸²&³= hé
=}WÇüæ~§¨ß(«æ]ãªà·H4«ËG^bîw\ɡ޸_XL iâ¸0Kªðüª³dªTë¢Ëµ'÷ϨyÓt0Õy-×î@Í6æIͯ>¶u:À
¾Q,ï¹ÍØYD£M1\â& ç=M0B ¹Gü*Óhäê^xǧQí!Ý9¬SAÁù>¡v³Hlz0«^µ¤ooâkµ44íkçnlüýº£¡øÍ0
åG}¦¸-µ8ªÏæ´?~ñ(Û<0£%Zqþù~¯^t>äPa 8$ = PûÖÓûÖýûÖûÖûÛkö;à¢Á£ØP_r¦@Ú8¦îhöê¬ÂÄT¿çRÕ<R¯Fp·S±ýWGQ*j÷ÇÁ»Y=}ÅÛSt\+~ïÁÞ
NR"¹RABÚ«èߤEakÙYO
|
|
2540
|
+
vr5·7Ï¥zjÎgÊ#Ó,WÁ+mõ{ùÃÒ½B}Õ+%-O·ÛQé >¯/î1s®RXïî¾dïÏ.Ë7V2kOµCÎ
|
|
2541
|
+
FCüx=M=}~%þ»#~Þä³o8Ú9V£= ñk<£SîM7þgÄfwîÂE_©º»»ã2ÿ¯=}ùöBàéfaî÷+Ân¸ÍBlÎ7ÅÄa,«ÕkPÂg2aò:I£$y¶î´c±\¥4xÓc±§µpÝÀ¬]5BþÊ2wYÌ-T0örØ63Ô)ôh]z6Ç!-7-Ùæ(g¬mø9êÓSdìq»©KÄ>znä¦ã6Ö¬ªÕCÀé¾7Ó<9ð)É·î,s£ÏKQ5ìºáÕc¾¨âhÿ;§?<&Áßù¿o#XÏ9è¤Ø@"¦¤H?ã5nq$§gÁSºDõ8&GçÒr\;ODÐaA±©ionAJBºìkGiFw
1¸í®Î</±J»ï¸ì"VLKðÇ®$´Ðb9s·s¡ÀJn}ÉÆøÜ¦÷]Õ4~ÌÈe#:#ºèÜþì(ç6¶®ãÓv&Pa7åÚQí*X[ïÞÞ¢!Ð- ûÖ´ÖûVûÖû<rûÖGÃO¶ÿíÙÑ)ã¨/ñ}ö/Ãülqïð£#E8è)¡x\:äY£i;ì#A>8êö^ãX[¬÷ãÉzQ¢§
CØV²¨ÃP¿ZºñâõæPxg®ÃL<Q[T¡ÕcGÒQBnÒ³PZ\¹Cư³X¥µJsZ]u³Æ³·Q½¡fSPÝ]3×åÓørS«-ÓÑT'|j'ïã[>ýúÞÙ ÒÅ+qz¨
BVèLë¹EØîzªqrOC}YoÍÀöjÆöÌDü5¥Ë-·ÍÅÝM5XؾåOVfVoøäÓÒmlÿìMäþùjê6XZ;ûª××½Ê[(س?â}Øm1Éaè»ØýÕ0Ã]ÚØ·û1\_êµ7 Y£\ä¹§Ù×(5ó®rø´9çx¼ÚG0²ïwnÑçä¿ÿÓÄ5¿ìYV[¼g}"×ÿ}äEN*Oñ5Æ®ÜêâËx}cSZ=MWhòØéÄ×V¢óPø7çåxS^«_= Ñ
|
|
2542
|
+
!ó?:¨¯QTânµÇ¼,ñäá3O9AåÕÏ9_-â©é;®îÜÎïÝâ/äÆäX3EA¿Qb´ãwv½¦gW~?îãaÏ ?8é[ï¿hÎe²O®ÏíÿÔO1¾ÕX+E¸Aaý\iZlEùVw*o3I>ì±´©Tè°BãíÙÒLS³
Yyè±Öp¾¿öüzÊà%wJæe±)µ8ÅäÖÍê¸%HC4ÊPYb¥%'u¼ÀjùiUehvçNo½!TðÊôækmÖÂu«áÕ´õf¬.FúZtïò¥µNkw Qík/ѽ¸e Ó¤!#ó-8ë°µ¦ßQÆà8ÁÔQ7æºÁâ²eÆ4Ù¸Bú¦@ú¬ËÇíìQG±%ÁM6ÒéHKæ
|
|
2543
|
+
{qÛøºÞ¾ö<1ÓA^ù¦ÿ÷~
«úG[Ê&ûeë>b'ÖX¯C=}û©ãn¼=M¬X7f¸ÛÓþ5(wüïÙñ×ì-ɯ(§Ðúà£Ë\)9O¦´Q³W»f#99=MëäK¼ÎCrü¿s"X8àÑ= Ìó"yL¨Ôá$$³ÓJ¤õ±A)Hãp¸3nÙX¿ndÐËL"d4iîq\X8íÆ¢Ö®x<Þ_®S|<¯á¤$æXGH1dLDqYM¹Û~é¬[½bkm*ãñd±Ý¯·ýpðoF1W«¸Zµ!ò¸´æ§Ã ÎjçoV#ÛE¹DfÒa6î£ÒµíYh¶°Gµëóą̊éîÃ.,KàìÞ Õç*ÌMÄlŨQ«BJÆc)!ój-LE9;'´3}®±*^÷uÊ~iJÓËX˺=M«Ø=}£ÿëzoÊ= = =}í×
|
|
2544
|
+
¹\Ä¡n-Ô¼äÅË1cÓF"/USÚÁ9-½6.+{ùpþê)µV,ÖÔSÃÀ½Dù.üö2³õé8éNvÓIÝ;ù}¢Ê:¢5¢>¦á!@,%!ÀÙ
ûÖÍ·ûÖÍùÖ=MûÖû#O%¿Iè¢X$(Æ0\7BQp8ÏùßIlrÐ(í51¼ãdyÕ= ´ÀÂÜ©42Q6¼X&åùc<ñ´1L?ái1)òÓDÖv¢r²¬I´Ä
ËD=}jrìÈ´~IôÕÅ ²ëQF¹è= ¯,B7
ØGëqÒ\ÚM«¼·<QóN§È\7ée¾÷©*~Îà°ØB£ªøÊè5E¼
|
|
2545
|
+
´¸d))3
Je¹ÏîJ¼¾Èâ®GJ-vöButÞɲ¿ÊæUéÊÖ|½¾
|
|
2546
|
+
9ÀùÍ¡ô
-´}T¾ÌiõmÖ¦XÀåBA|ÕÙÓu»!=}öÁ ¬.]ÚL<ÇëåçÚ¸¥
|
|
2547
|
+
QÞo/IA6
|
|
2548
|
+
3Õ}?M#¾Ô9¢!¼-1¾¨cfæ:Ù1ÅòæÎPé*ìm?¢ #3L£m)SÅuø¬}%=MQÚ¡Y&ºÓ¶Y]6äNÒàuà2Ç\kâyòÀåú_̰ÚeÛßUÿ7{Skè¦b;ùâø¶[ú¡MR$-ûQyò¾µô<×§Í#kGY°æ!§DgTVXÂÆ¤u§3é÷¼¸¦So6Y³BâÅ7/ÙÀêíÎêÂ;ëVØÑã½}ýfÀ'£>¬·äÂæ³ËÇ]yeïO
|
|
2549
|
+
Þñ¶íþ<Ôa¢/uر"E{axÿ·òø·¬8_B÷±Èo×_«PT !Ìu,äÃM°Ó÷#[P¨ð@,¢±.fP¶AÄ.¦P{F´wÁ~)Ê8Õ£è¦ÑI¼Ël*¨ü$Cùý:é÷;±¤§dÑ4¦JñLªF
|
|
2550
|
+
~T"qQ<z;c¿vLó®
îóxöFæ<¦æÔ«ÛÓ3Ý_¡¹Ö©äïldo@)áD^¾nbàK9ýÞ
r¸þ²â«»I¦ÇmJúÈ·æù·LmoßÝ ùÿì,$SY¹©¥l:ÒØßLÒtÒù»íÔGùdGÀÙK§ï¶Ù\»¾ë;¡\ÄÊÛ¸g= ^g¶Çqàð_%XßJlA<LDüÉ(¥ehi5SÂÕ8Ûåå¶pßÕ¤MÅÈlK¡R¤Ëë¸Ù,°þÏI·~%çuP%³jJ _{éQßJävt±ÀuíÊqõ8ÈÆÏÐ&¯óUüƶYÏÅdÓ®ÀqXÈãÍȾèSôUPÜ¡×úäçfêºXÁ©æì÷UòÐ¥c³{xKðêêúvÖÿ;Òûû¨ÓÇ[²r=}õñ¡³.ò[©[ü©¬çO¦ã!Þ*f¡¿½íÕ
ïÖùÖÖ=MûÖûÖZ^IÔjàXJãÙ;/ßsµ½¹gäÙ Onñ)æ¿°¤Ì$úá2´kÐÕDE96hLw²
|
|
2551
|
+
rü_Le«¤42rì°BÙThSýdºìLæèÀ,;å
¸Gc»,5ëéÙMkÆÑLyÒt¯±À<óDø Oç.Yìvèsw¾%"~ê3S~¡%g5p´vÀWh¡Ç]*ô«I±Bc6ª6IÒÊ2¹Ç´0wtcÄ2cjrfÅR=}´1Ër|5¦OÉðÊÉbÂ*ßËòÝkµ_^ËBÅêÎ6u>LucÖ:éF·Ëæù)
|
|
2552
|
+
(¯ÉóMËî¹PÜ'ô1ýÈ¡+-æZÀ~Åá,1mÏÒgg³Ò4möãM
|
|
2553
|
+
ß=MÏåÃÎ?l»_>sÅmÉVÖSðÛÀ£Ò¦.*©ZÈÁ«á>}<Þ
|
|
2554
|
+
2 Ëk
§NÎöC]~x xÊgëlÖ|ôgis¿ªD
=M^#F©;@?àï]&hÍU¿¦8ú9Bv
h¨1ïÏ9Q}ÿ¨Ø,Cäç:ÓÈQßè9³<¬ø¸/{mØî¤=MFLVæRsFþsÆ7»Ò¦ í7$¼ö4Ry þÿbB/( ±4B6Bå 0Ïmæ¬ÎXUºr~þUÇðì¼3ådíÐe+ÔLX³aß¶XéykâMÙQé¸=Mvdл·5[ûÍÕU¯ÍÑÐÕkµUwdøý¦EæVlëÓßIÖö¶ßô9·ëß=Mxð®£òü-Ócø.´ÐÒ×]G[q5@É#<<v= bgd[BNÄÆè±SS½¨Øäv}GÜS¼øTþ¹3î<qÆ@î¹wØPß+N²N|(Ç7ü×ÙÃK+|ÉåÍ;ØÑÿù9NGÞ[^v¸uØÃVï#é>Rc᯾©äeot\QíäÜ7éGÝrÂ7{áA¬Ýi¯ìO^¼ü=M£?ª£xY£v_Òáç7ýN&÷µ?yÎ<CÅ_û¿3ï¾Z26'~ ¶!hv$P{T°À;¡ü0$@~Ó¢ØU¨9¦a&Á^U¸ó7¢¹Ê3lfPî3b0_=}â%0ärb8SF´öÁK¥2:?ª(/¥ÁK7¦8ÊߥÃÞO<=}É$X4aðÎ(òßgð0<á?ã1Lþ1éñO±Ü*¨äÔ_²ÄMq¬¨£4ïÂü8móûöeÉSºÈQl=}ã8¢ú¸ÒF¶÷Oé©
skLÆËy<¼È¬
|
|
2555
|
+
ªò?çüA¾¤®Mk@=M"·=M2ÈÈm²d°¨ÎmBË2©}´äýi½¤}u2G7FóG9KëîuF¢4"ÇúB¥u5IT¨ÆKµÉHo
~:WóðSkay:ûÅSZ-âjóÑ2é= f&/¥9¼LíÓhFÂWR9GìÔD³Ùyô|ïÂx°ei6¹Óiß¾m¦@»²*p]§Fa.EYI²ë;ÙL7ÒËT·kBÜܱ§ÒP/ò\dرïxÓö·~!ÒW+SKÀÄÌ QÂ¥Úuèbë+I1Mú=MBîz4ÁvqdòÛsìiëÔJ«é}pâ¼ÛEü×JáÍʤÁ¥Å<Ùwª¡IõÅ{|¦úRJêøz{¦²:>´àÎ<Úf·vq%A5ìÈ= EÕ¯KYx©EÓvvAÔª6ÇJÎVw1Ûʺ-ïËÑÉrUÒUÞÈÑ{-EU¼{{kâËzôÿqëÚXÝÉÑw=}6}¨Ìç}]S
|
|
2556
|
+
QÉæ&,_TPóÏ!³Þ&dÖVɱå!X,TBÖÝ)Om/BÈ©C[»iöìµ°JfºÒË¥6äãzvÔRoÊ5ç¨vVúfôÞVnëÔq<õæÿû ]ð®¬|[3ûQÓ£u§[(t'G}j½hGRßN¤çÛxÍúep7gç³Ò»
|
|
2557
|
+
ýÅCYÞ§Pñyf/^3ùηt=M~Î
r[Ù¯W78ñ=McAǯióQÝôï£|ùR ÐK#<V:@Õ «Ó&IÚVèM³aª&\¨¶-jPdé0d¦ ÞQìÓ?}Vì{ñ1úü¤æª1O8ÅîHwÍféÌ:åoÛê÷¿ K! H8ûn~¬Í=MVû{ûÖûÖûÎûÖ=MY<1b1ÕÚ«¸R}äÑ=MBD7e4H»mìúüö0IÆâlQcªùiìÓoÜ.)µj8rkâÖ~2ï²ùMÁ5)}Þhx´B¿´OÕÅdhÉTgj¿$IkÏjYuê·,!9ôµñÒϬÑ
l´º¬/ÿø\7´sþ¼l½G²¼÷\N¯g¡Ë°¢5´ ÏÀñ%]²5¬ÙÁ/%»$E*IY{é½j~íw]y©Æ2ëoE~Ϫx|e&J-pq¡ªst4ÙÉÂo5EÜjäõ4ÀÆè U%ÅÈésm¦¿b~-îØ&}#-_ã£-7øcãFaëÜbzfö÷òÉß¶zÕä³Õ¤±ðäÃa=}
|
|
2558
|
+
8õogÓZ*G ~÷»®C]+* rwoÑÞÌ\hðÓʾ¡´9PWÕÖ¡åÝ-T¿ßý&¾~VÐÓ¡¶.CÜfõTRËDZjSè:iØÄýgC¢íä|FtW1=MT3ÝÖ¹¾Wѽ©6Sª<vvQsÜ«¹[³íýææì
|
|
2559
|
+
÷&+ÇÓx|ñâ.6oÐÀüê)+î766Ì$SzyvöjØÍµåÌ(Ìì\eäê¥OQ;júØúâfÉ1VÖM×A<ÐQÞ[5bV5ÑÃÇý[§6ù)Äù ëî¿~'=}+YhÉ= õïaÕÙ.FXØåa«£6.GëXÙsã©Ç§³ó½¬ùD¼³w½mNêñݲ«=}}»7ª3NÂï}4uÛÉ¿þmòæÔSÄ»KüD>Þ»ó/·¢>ÎfC/÷'ØÒàã/çÏøíãV·àÒ"s)Ið¦= Ù=M"yï+8ÿ)ÜRY¶õëÒª~rÜ·àZOÏ®i
ØâgÙ¸/c)?º¸Tÿ·°±ëgÇ¿^"¢¿s%ÍGüûïñ¹úÃÛý[_Em!
-ðÍ § Sæ%(Í-Ðh ¼¯#²%é?)Ò˰¼m¢Ì;4DØPè@òaÚ-ý1¾0K˧p+ñj¨]»bXo¥BdºZ¬^¸ÚÅâL1 ÐP¹¶¦ßGì
|
|
2560
|
+
{(dH¿_bz1ö¨z¤{BîdHJb´~9ÂlL=}
ëH{§gùÓTêÑ]qîþªg´k8åXySæ¡QoѬ9Ç,1ë X Ð1àpÔÓÛÖîÓûÖûÖûÖûéWsIðtDÈ_];9Òko;*ó\«¡U>#=Mê;Ð×U´¡K,tZ@3#;29Éyàh"¬LÊ
dtCýV;iñè¼fLmѸ¨6WÑÏ©)&¹øYÿ¤Ï©×lxVS?ÜÊwPÓË͹üÃí}üqS¥?» ¼ðâ¡6rçLtÈrw+7GyhÛá¢öb×w6¶ÅÐi·Å= Kr?Kz Öíê¸ëvÐÒZ½v;ªûøÿäæþ¡VìÓÑ×åWlÃ[m}j¶ÑGùP[6ùùÔÿîÀ[êÔ³SÛ£[~'ë[Èõæa¶±.nLð°#'[²óiÖ ³m5½´áHG=}·[ñ=}R¡³Ô½¬éBuðåÀjNÞÕñÔ«Kë}䝨xàeâßN
|
|
2561
|
+
ÓEF
EWUúÙyRêí
¼§ýÔÝåWè@uðʧ)C\z!/Oð°^»·\>OeêQÕïÁbOÙióëO~¾
æ})?ûRàg®¯t[|Ý?-òIkSÁ¾?Å·¿sìø§ÓÞóS ¬%#L®%v/ÐÇs | cK#¨g#0àGàÌ<a²¢ÔN7ë@öÁa&O(0@=}_%ù±NäO¨°6Âc0k¥ØRUd¢A¬b´>ÂP¥¹4.ÓиU=Mâ:9ë²P;§yKìüÏæ¬ðí6ÁnÑ(T¬°Ëo¤¯óB<þ8ò¹(Õ¿gH¸Xê£Üq§ÂtÊ4EiûH;¦gÉÙHê¿]q"¿Â¼j;ÃÖIæSYfûZQþ«ñ¬ÇËô\6£8¾ÿQÆ
«ý5ÇrÉXK»äõOn¹æ® ¼lO´j,âÚ@üÌ ÚöpHäcŽðR+]s(MDð[FðÅÊ= «"Uf*H«%ì%r~7aw±ñ±:¢h¡:B¯Zªì?MrÉhºB[¨TD²\Íär£¤Hj|ÉAñijäñ2}·jûGñ¦ä«¯2Uóè<õëX$¹õ
þ°qgél{L¯¬ºlRsJ\Kİ[ÆpÒªbÇÖ*ó§I»Ï§â³«*~I²ÊDé¿a5}µïíu¾,pY_s
ëFµÉÇuZ\qIwEgçnµåUzUðPôØSqJè'×U&ñè·ÎH{,eIJ4?£ eu0eñûÖ}kîlÖûÖûÖûÖëëõTÔ÷ØU|Ãú"Ó[Tê~ôxrC,½n9î·ðé=MÌØ×nIZî:½gþñeGc£Ù-:ð×ÊáÖ&k¦:Ì¿Ð]ÐÉáÒß&ór»,LòlSñº¬éñEF¸ÈKFIþ¸¼©Q@Ãeñ²6W«^LRÒø\ñb e=M;6þNÑñêøòUÕ õçú»bË>ÒYóFég;_¾ãèÌ.êXܼy§h?§ú³=}ÚÌ8ð
|
|
2562
|
+
-§=}6æ¹·ù
I·®k·fNÕÚdFØÄ}ÏëÞKNC~ÛQ\2ÇX~ôÃ×±ßÎçÅî>}gÄ|ÑÛ'\n^(|lY|öÇu¿ÙÍ,XãZ¿Dg
|
|
2563
|
+
üyñü |y"·*8'0ß{= ôÑ!96'4ù9p Tà=}E/ɰWÄDAùthü¶AO¥<¹2Ruhë#ÝA_~§¯N¿v°ÓÐbea:¢=M=d{'+¼¹¢[$í®(~ÿ4ÔO2kr]£qiAmRÞ¶i¥Á²iÓD÷kÒ?µTÜE¹~V¶eîÂ*ÍÒÂmeª1£5³HÆÏul[ĸ}QçÀX (µ= qWûÖ;ÿÖûÖûÖûª®q%´t"+ÄÊLv0øûj¡Ús$Î4XÜwÀE¡Ìï%n6½xD.±ù
dU0ù
|
|
2564
|
+
ª´ NÒÔhá%B+רDXIòÎ赯±zl©áEN5´hwuâ´D×®EÂm±HØbÂù>©î7Dæ^±xc}¹¹
4·ùrkµNSË£ìðARMèô|C³ ìÇëR¿ë,MsC±b´*ûjJ$42º*;[JT8ʦb×U*q/H,ßÌ0Ùâ *¿3ÈXytn4wé{k
¸ÆÛ½jÞaJ}ÇÊ|Á×jáJCµQuVåöؼnaHuT2):ÉzÄ Í±¼f¥:V\_ÆÆæÊW:£ó1²
|
|
2565
|
+
éÁ´îªZZ¾Á³Ê£îÑaZ=MÇ
|
|
2566
|
+
DyÁÓ·nÓZ÷ø¿¾fWs9üíðÈÜáþ&&ù<£A½-/UH^ãJ£S,2½WÈP²Vø2ãJ³mÒµWIÿàÄÁÂR§¸$ól5FâN³l*üSiá}4«ÃéLÆÐjyÊlÕ¸ÿæÂ_«GxLqÓå³C6]ÏyäQ ÇeªV³óûäMóÇÂífV|»U½,ÕqÆùL{§mÁsVÍûLÏíϤ.9R[´KðÔª£ÿôÁ£ðÍ._ýá{ðÇc¹s. [=M¯ã¼$Nf·Ü¥|~tyðèÅ©ÏÃë²aNõFÛüò«k´ÃNCÏÚäR{FÆgt>WtH=MQǶçwùÃk¯I]]hWëc|Q·çîs>¯ä=M±×g¹^ò(ô±{÷ÇÉsÃÕoþ^ f½µïÚ}^oôÜ3µïé¿^#$4k3_àðò!Y%<°"ºU/ôMÀÐ ×s#zM-ØEÀé± Ý·#Ò^.8Iv´°"ib.YtHDå°ª-bÚ:Akû¤¼=}th²yAv¦´ÿ1rh$£ )5eñûÖ=MZûVÞ±]xûÖûÖû\~5ù°ùÕéN³ßc¢~3|dÐ)áèb¢eaAC?áúf¢=}%ù&(n®3ºKmFÛk0n*ÝAÀñ7DÍþ³üÍD±{ÌÄÄ-餿EoÄDÊ¥jWé}cEGkºL´ì}OÙØwö9iÁ{5eÓ75þw¬vQC×éìvwl«ªq)e¯ª&}4°B÷$å«4çwKFtD®KØÊØÏøóº|S@«FgAí¶:KU·÷D
|
|
2567
|
+
ÔòýcÈÆòí¢%ºö:ö\ÁºF¿ó¦þTì7¦a%,ê:NöR\˳´AgcÑN¦#-5æ9êîV4yèÚõAã-ÓLøò%ëïzêkëâ¶_Jxþ³¶-ßy2ëËMLóÚxj,Ô;©ÓL7¶
»MÇ{¿ÑÌßé ÃS®ûÿ´ôQgçÕÜ®¼Å<-ÊYZçõß=}?V´h:¸VáÑ®ï*çM®S'R榾uoFß Ñß]EþMÙpéScòßhSïÀn¾r\÷flßðÓÇ.ï©ã¾ÿîîÿ:áà¡"
þ(ìXî¡fÙ"ª&ÞÉ8H"Ë)\½(´<õNPϰàk3"ù'ÊN+ÓQðoÀûà k¡Ad&]< |Ä»±Ú¿d±ÂÙB?7üsAÒÅv¬Ë&±ÓÍBãÚfÊ,¨\TZRÄ¢èÅu±ö{C>¨¬Y5RL.p= $!0íÖûοûíÖûÖûÖ=MÚ§p/§34«Iø¶x°Y½.aâ¢
$gÊ)²W4èö¢£}%±ÝÀú@áØQ¢ó$6(ÒÌ6ôûJÕPÄ
áÉÛ¢{ï%o_*~6Ü.G6cG±:éî²%D#kjºv¶ÍK)ÿ|Ù£¶,Ò^²äãD·æk¦î´y<÷h³D_@ùrrÒ=}iû²wE½j¾¦vT®ÊX=}oq@¥~fe¨üªFe4»ëHâusôÎϸýbÏÃBÉrôÃ8UtѼe䥪¬Ë4ÅWK:=Mq^Ê4ÎK&\(ÅârÍ0vsRºF}mØ4º'9T{¦5òôJÅityÛÖf3mÖºPýT»ÌÆmè1º3T¥NLôÔ|Å×i<.lÏzýõ|ÊInÓ»F(cÓ(¦ÍQ,12:
|
|
2568
|
+
ÆTìë´ó°Ê°Áiã䪦cU-::ÕR44ÄÁOãa¦éÃ,G9¶ìRL}xÔêP³Nc¿c¦Ç,µO9ÒþRdØòÐÃÁocåp¶±LzfDÔ4o¸áR_§Å!ë;LÃëyòwÓÍÉöôÛÅm7ë+
ðû°ÅHë ©¶¢SM+7xâÍ(VM×y+gM{ïx}Ö´Þ9èÒÅ'kæ?¶A<#â[¶f<´äSÕCzg²|®%=}y«[ÒµÉ
|
|
2569
|
+
hsç±ÐÑCKç.®{ý=}ͧ9È\ú±²,çÆ.Ûì±Íçª}®æ'=}±oXÖ¼TÚ
|
|
2570
|
+
ûQ±CkçÑ®ÿ<¯XZ§Ü¯ 6óRÞÇeRïÅT¾²¹]Ë5Ⱦ+Å]¹Jõ¼ÏiúôóÆÕ
ç÷ý³îºl8YPâ¼GtoÞù¾Z+]ý·¦ÎìøyÖóÓßqïîó!,&è!+@&ãùÖûûÖ=M{ÖûÖûÖCàª!])Pu ?"ô6@ÿ¿ bXþ§<¸6óñRÞCrçt®M9<ýÒYR\H¸tìa9ç몮õ=}ù
|
|
2571
|
+
ZîUÔûöQÞÓCoç ÏñÿѨÿgYv¬D¹
|
|
2572
|
+
¸XëÞÃrçåu®|;<³×}®ò'<Ó®Z~½Ùõ¶C#gñÇ®àKçÚ®<±YT*E/OìB¨I¼¯G\nLjAkK¤éLdèAdìK¤KD$OFOEÜLO|ÏB<ÌIÌÈG¬LA´KD=MDF< Ml2Áá ApéhXÁAî,ô<áM4òN3NÌ2Ï71Ö0Ê8'%[FdYMì^OÄÚBÌÚAÞK̾))Qÿ+c^+¿Þ+-(§£IbKcãK¯BK%H3"E{rerJ§óJSI
ÓIãI'Iÿ+I9ªIkIãëI;JI÷ÊI_I
|
|
2573
|
+
KÙ:KµºKí{K]ûK£[KÚKóKÓ½R׿ÿ'P^j9TîçmóþL¿_o©×hÙtÙÞrùÔv9ÙqÜuéÚsÛgY= 9dÉb©fÙ~9yI}kyoÉh)lyrÉva¹eéãv:wþ§P§QBfPÆdV2fWåR²äSGTGUæÄP¢ÅQÚÇW>RJSVTU|!CoQi9C%
¾8é9:;8;;yº;=M{9«ûÜ.fÄNfÍ·QÕÏÑw¬g¬p£¬tcÂC¬ÃάÁ3s¬Eó-Ó¬½+¬c«|<x~ÙÍWv×:Ã8;M9/:ù®8Q®;?o:î8Kï;#N9ÕÎ:8ÿ9g:>×çf¢æ½7æ¼÷fÝfì¯æ ï^»±Ç×%Q= n!= Q0ÌûÖýnûÖ=MûÖûÖûÞëçSÒSl_ aGáqÁ¬,ÓÖ±¬pqñ¼Ñ¬³¬Ú·)i¬é¬I¬Ñ ¬(9CdVÃ.NÃe~ÃAC~Qp)IÃy
CEÃ5wUCmÃy{}Ç¡qűQÇ©ÄÔÌÜÄ T=Mì|$<\</ÛC¬Rìö¬Á¬%3¬=}³¼ªÿ¹º$¹d¼ä¹DyÄzÄ{
|
|
2574
|
+
^¶{ w;I÷:©ö;QWZÿ6V.ôNë>ïÛï9/XAÃô1CQïâ¼T¿VF½Uz½W}·[wüãUÃû-ÃMÞýÇ*/î3ìHâòxúöÝWO¿¬ø¬c½Û1 ÇÑ·q¯Ï÷*Bn&5£«?Aä¸pBq8ÑAÌH4~¼©@f2/B«vqåÛÂ,YÆ6{ªCZæ3Ï«Æ)åÍdÂ2XÉè±|LmAÂÅ2jM~Ç1õò©ý e²¬hF\ÓH¹uLëF¢0-ª=MÙdÄ\Â~ÑK¿¨pà+ªÕ¥ä1QÉÈ÷JF²¶0MkªõÅäûòByñÞ¼xu~\Ë@2w2ÕK«)uäñÊU±Î¦Èws¬ÎEö6oÝBñС8úðÿWæîûäWWíeÉ6îørEÆÖ6ú¨£åõîñþ0ÁZ©8½]w7±ÁËèùm4Nª0
ª*ÝdÅþÂ?ýu_qÎßS-0¥mµèRpÄ:D/|cd°ÁÃ×'ãäÙ¤=}Iæ¯2]gÛ»QÂøx±¼(_þS[WaÌ»Hæl2ÍF4±Ê=MüT_}¹ÚÃy³×cÓåäYÿ|½GÞ[P¬|¹7ªx«ä=}+6Û§EBåréROvÙ×KJ1ÕøÍç:ÍØZ%2/PÖ½! &ûÖ×ïÖûÖûÖûÖÑÖQÕ1³éf®ßT ×i3îY»Til»÷FmÁòDS
¡ÿOTwfNÒO«cEöØôÅêRÝüøÄy|:ÍÔ:éÛúÙpóÍ6v³Ü°¬Ú#´÷F§ðÃÙ
|
|
2575
|
+
³ÿ½ÞðJÏBýV§ìûÕÎù_¹
|
|
2576
|
+
ÜiÛk;ì:ÜÕçÏÑÙ¿(ÁÜÎ0¹/s}ÿ\¸{TîYm½B~XÂF¼gýW~_ÆE¬bçý¾^~ªðÃhÀøI=MPûe7ýºCÜöÞª¯ï9«sȳä1þôjW'oÆËÓ¬ûOã9g0|ÆùåZ
|
|
2577
|
+
ÒlE¤ïÎìùà=}º
|
|
2578
|
+
¼@¯Ë«Q¼3\ÃÑNé(®¤öÚP#øãýa¿ÌDºÕ÷u9ëq/VÔ>·ZôÝÂ]«ÙêsbKºâ=MAU9îvÂIâá±è±Qí8ï.BZê}Ç:xä)¨ö¢³zAg¨9´ÁMyçY¨î®rÔH«Y= HäGÄ,í9ä<Ö¡D>«×ÁLm ãv° lfÜcªp³Ö,JKùë%ÂÙCñ·TÃ\-è@FѸí<2±üÌA¨7¿èiQÊð°$syäZ¬«¤²àÚ'¦÷°Ïéd>ªq¾ºTÂU}ëpæQL=}ûøëqî¹@BiÆ4à\êóÜèÜëgá×@KÙèo1jr¶jtÃVlzó¾îÇW8äpfP¦lJS¸í|6иÅÌ5yïfVÓ=}/øïa.´¼DÇóñ¿"·Øì5Î$0h0áßã?Ý¿»¿äDG_©¤ÿhÄ_h;I±vn~>á;ò=Móýå¯7¯Éý#{} ·Zë´ÎÆNÏRǽûV«A¹³ìÖûÖyíû¼9g:&@*!e*$£vËbáª;Vpc,ÈåEUV!4yø Ô#Û%î%i[óX¢î¾Ù@àÀG!þ¨@ÝIÐNZ= Ýóá¤àYá /Vâ ÷6XH\Øü&ð8ûwâ6õ2@ý Êù.=M+ç-n¢ò|øM/<ýNÌSY¬Ý)z¿¥CoáÎã± ÐÁïXÙ£!õÜd?¯xðì
|
|
2579
|
+
Ái;ªäÀ%n= =M+W= ÓÖc[aS
|
|
2580
|
+
FÁð]NôÝ'= qr(¶ù¤nü«òÿ¿d&ÿÈõT4Þ=}z|ö ¿OW×SMtdH.ÏãRX&§o3ØÜXÍ^ÊMí£W´iâ]NüOå£S£Å·ç÷ݧ½GÑUy¹¦ß§/6P0(Cúýb"þ¥°VÙÄá£ÓÙ@¾YýòD{òÃv?EP©=MBé\ĽYäýRò øfâëEEf¼D+gC×úDZGÅÿ±Ç?TzÙ¡±ÏÁÕ¯¦ðvZmT}3xËz×cºrÑM=Mc-É©Ô7½wæc§Î»cû¾yfÙWòÆÝÔc¥³ôØf«Äñ·9ø%g:y^+{U]¤þ
[&fÓÏYë«Gªõ¹¦Öðþ¬moÛø?/ÛS.[S9ÛùC
/û2²Y£ÎÑ%/sy¢×ÌùJW6Oí\g0^JùêßÏ0í[Ü'ÏÔ>À-¿[ÔW?Y]±ØÙÃî<~ÎëR~Ìf¾Z/×¼_á¾Þê+îoÐñ{Þ\e3K%©¹§íB¹§(c=}ËÈ·SzÔnf§èx}o\9öf|%Ýå¥~©IÇüñY8}Ffú@Rú1éþ3÷ËótQøvû|³Îaá,Óé>BG6Òê}ÃJ|¶=}°öf6õk¶ÌºHgNjÒ{æ¾M;9·é§WèO±Ä3ÒËÒyt ;ù´à©a|Ó^!ÝøûÂÄ
|
|
2581
|
+
(VV¸ÇÙcÏ>yoçzÃvòG{3Þ£½c×ôíÅé;°OÛGØ<wÜW> rU]q{û'ùÝír{*øï?t-ígùWÿ
&§]m}×ût¥Ë~ß&>&Õv!b#ÅÌq¢µ|jÍüùÉ^Æ&ôþ~sIµ"]d)uâ´ºvk Å\<Íÿöê½Â
|
|
2582
|
+
ïBçϧmÙIólÜoëVb¦¯éWÇû3` });
|
|
2583
|
+
var imports = {
|
|
2584
|
+
"a": wasmImports
|
|
2585
|
+
};
|
|
2586
|
+
this.setModule = (data3) => {
|
|
2587
|
+
WASMAudioDecoderCommon2.setModule(EmscriptenWASM, data3);
|
|
2588
|
+
};
|
|
2589
|
+
this.getModule = () => WASMAudioDecoderCommon2.getModule(EmscriptenWASM);
|
|
2590
|
+
this.instantiate = () => {
|
|
2591
|
+
this.getModule().then((wasm) => WebAssembly.instantiate(wasm, imports)).then((instance) => {
|
|
2592
|
+
const wasmExports = instance.exports;
|
|
2593
|
+
assignWasmExports(wasmExports);
|
|
2594
|
+
wasmMemory = wasmExports["l"];
|
|
2595
|
+
updateMemoryViews();
|
|
2596
|
+
initRuntime(wasmExports);
|
|
2597
|
+
ready();
|
|
2598
|
+
});
|
|
2599
|
+
this.ready = new Promise((resolve) => {
|
|
2600
|
+
ready = resolve;
|
|
2601
|
+
}).then(() => {
|
|
2602
|
+
this.HEAP = wasmMemory.buffer;
|
|
2603
|
+
this.malloc = _malloc;
|
|
2604
|
+
this.free = _free;
|
|
2605
|
+
this.create_decoder = _create_decoder;
|
|
2606
|
+
this.send_setup = _send_setup;
|
|
2607
|
+
this.init_dsp = _init_dsp;
|
|
2608
|
+
this.decode_packets = _decode_packets;
|
|
2609
|
+
this.destroy_decoder = _destroy_decoder;
|
|
2610
|
+
});
|
|
2611
|
+
return this;
|
|
2612
|
+
};
|
|
2613
|
+
}
|
|
2614
|
+
|
|
2615
|
+
// ../../node_modules/@wasm-audio-decoders/ogg-vorbis/src/OggVorbisDecoder.js
|
|
2616
|
+
function Decoder() {
|
|
2617
|
+
this._init = () => {
|
|
2618
|
+
return new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM, this._module).then((common) => {
|
|
2619
|
+
this._common = common;
|
|
2620
|
+
this._input = this._common.allocateTypedArray(
|
|
2621
|
+
this._inputSize,
|
|
2622
|
+
Uint8Array
|
|
2623
|
+
);
|
|
2624
|
+
this._firstPage = true;
|
|
2625
|
+
this._inputLen = this._common.allocateTypedArray(1, Uint32Array);
|
|
2626
|
+
this._outputBufferPtr = this._common.allocateTypedArray(1, Uint32Array);
|
|
2627
|
+
this._channels = this._common.allocateTypedArray(1, Uint32Array);
|
|
2628
|
+
this._sampleRate = this._common.allocateTypedArray(1, Uint32Array);
|
|
2629
|
+
this._samplesDecoded = this._common.allocateTypedArray(1, Uint32Array);
|
|
2630
|
+
const maxErrors = 128 * 2;
|
|
2631
|
+
this._errors = this._common.allocateTypedArray(maxErrors, Uint32Array);
|
|
2632
|
+
this._errorsLength = this._common.allocateTypedArray(1, Int32Array);
|
|
2633
|
+
this._frameNumber = 0;
|
|
2634
|
+
this._inputBytes = 0;
|
|
2635
|
+
this._outputSamples = 0;
|
|
2636
|
+
this._decoder = this._common.wasm.create_decoder(
|
|
2637
|
+
this._input.ptr,
|
|
2638
|
+
this._inputLen.ptr,
|
|
2639
|
+
this._outputBufferPtr.ptr,
|
|
2640
|
+
this._channels.ptr,
|
|
2641
|
+
this._sampleRate.ptr,
|
|
2642
|
+
this._samplesDecoded.ptr,
|
|
2643
|
+
this._errors.ptr,
|
|
2644
|
+
this._errorsLength.ptr,
|
|
2645
|
+
maxErrors
|
|
2646
|
+
);
|
|
2647
|
+
});
|
|
2648
|
+
};
|
|
2649
|
+
Object.defineProperty(this, "ready", {
|
|
2650
|
+
enumerable: true,
|
|
2651
|
+
get: () => this._ready
|
|
2652
|
+
});
|
|
2653
|
+
this.reset = () => {
|
|
2654
|
+
this.free();
|
|
2655
|
+
return this._init();
|
|
2656
|
+
};
|
|
2657
|
+
this.free = () => {
|
|
2658
|
+
this._common.wasm.destroy_decoder(this._decoder);
|
|
2659
|
+
this._common.free();
|
|
2660
|
+
};
|
|
2661
|
+
this.sendSetupHeader = (data3) => {
|
|
2662
|
+
this._input.buf.set(data3);
|
|
2663
|
+
this._inputLen.buf[0] = data3.length;
|
|
2664
|
+
this._common.wasm.send_setup(this._decoder, this._firstPage);
|
|
2665
|
+
this._firstPage = false;
|
|
2666
|
+
};
|
|
2667
|
+
this.initDsp = () => {
|
|
2668
|
+
this._common.wasm.init_dsp(this._decoder);
|
|
2669
|
+
};
|
|
2670
|
+
this.decodePackets = (packets) => {
|
|
2671
|
+
let outputBuffers = [], outputSamples = 0, errors = [];
|
|
2672
|
+
for (let packetIdx = 0; packetIdx < packets.length; packetIdx++) {
|
|
2673
|
+
const packet = packets[packetIdx];
|
|
2674
|
+
this._input.buf.set(packet);
|
|
2675
|
+
this._inputLen.buf[0] = packet.length;
|
|
2676
|
+
this._common.wasm.decode_packets(this._decoder);
|
|
2677
|
+
const samplesDecoded = this._samplesDecoded.buf[0];
|
|
2678
|
+
const channels2 = [];
|
|
2679
|
+
const outputBufferChannels = new Uint32Array(
|
|
2680
|
+
this._common.wasm.HEAP,
|
|
2681
|
+
this._outputBufferPtr.buf[0],
|
|
2682
|
+
this._channels.buf[0]
|
|
2683
|
+
);
|
|
2684
|
+
for (let channel2 = 0; channel2 < this._channels.buf[0]; channel2++) {
|
|
2685
|
+
const output = new Float32Array(samplesDecoded);
|
|
2686
|
+
if (samplesDecoded) {
|
|
2687
|
+
output.set(
|
|
2688
|
+
new Float32Array(
|
|
2689
|
+
this._common.wasm.HEAP,
|
|
2690
|
+
outputBufferChannels[channel2],
|
|
2691
|
+
samplesDecoded
|
|
2692
|
+
)
|
|
2693
|
+
);
|
|
2694
|
+
}
|
|
2695
|
+
channels2.push(output);
|
|
2696
|
+
}
|
|
2697
|
+
outputBuffers.push(channels2);
|
|
2698
|
+
outputSamples += samplesDecoded;
|
|
2699
|
+
this._frameNumber++;
|
|
2700
|
+
this._inputBytes += packet.length;
|
|
2701
|
+
this._outputSamples += samplesDecoded;
|
|
2702
|
+
for (let i = 0; i < this._errorsLength.buf; i += 2) {
|
|
2703
|
+
const errorDescription = this._common.codeToString(this._errors.buf[i]);
|
|
2704
|
+
const functionName = this._common.codeToString(this._errors.buf[i + 1]);
|
|
2705
|
+
errors.push({
|
|
2706
|
+
message: errorDescription + " vorbis_synthesis" + functionName,
|
|
2707
|
+
frameLength: packet.length,
|
|
2708
|
+
frameNumber: this._frameNumber,
|
|
2709
|
+
inputBytes: this._inputBytes,
|
|
2710
|
+
outputSamples: this._outputSamples
|
|
2711
|
+
});
|
|
2712
|
+
}
|
|
2713
|
+
this._errorsLength.buf[0] = 0;
|
|
2714
|
+
}
|
|
2715
|
+
return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(
|
|
2716
|
+
errors,
|
|
2717
|
+
outputBuffers,
|
|
2718
|
+
this._channels.buf[0],
|
|
2719
|
+
outputSamples,
|
|
2720
|
+
this._sampleRate.buf[0],
|
|
2721
|
+
16
|
|
2722
|
+
);
|
|
2723
|
+
};
|
|
2724
|
+
this._isWebWorker = Decoder.isWebWorker;
|
|
2725
|
+
this._WASMAudioDecoderCommon = Decoder.WASMAudioDecoderCommon || WASMAudioDecoderCommon;
|
|
2726
|
+
this._EmscriptenWASM = Decoder.EmscriptenWASM || EmscriptenWASM;
|
|
2727
|
+
this._module = Decoder.module;
|
|
2728
|
+
this._inputSize = 128 * 1024;
|
|
2729
|
+
this._ready = this._init();
|
|
2730
|
+
return this;
|
|
2731
|
+
}
|
|
2732
|
+
var setDecoderClass = /* @__PURE__ */ Symbol();
|
|
2733
|
+
var OggVorbisDecoder = class {
|
|
2734
|
+
constructor() {
|
|
2735
|
+
this._onCodec = (codec2) => {
|
|
2736
|
+
if (codec2 !== "vorbis")
|
|
2737
|
+
throw new Error(
|
|
2738
|
+
"@wasm-audio-decoders/ogg-vorbis does not support this codec " + codec2
|
|
2739
|
+
);
|
|
2740
|
+
};
|
|
2741
|
+
new WASMAudioDecoderCommon();
|
|
2742
|
+
this._init();
|
|
2743
|
+
this._ready = this[setDecoderClass](Decoder);
|
|
2744
|
+
}
|
|
2745
|
+
_init() {
|
|
2746
|
+
this._vorbisSetupInProgress = true;
|
|
2747
|
+
this._totalSamplesDecoded = 0;
|
|
2748
|
+
this._codecParser = new codec_parser_default("audio/ogg", {
|
|
2749
|
+
onCodec: this._onCodec,
|
|
2750
|
+
enableFrameCRC32: false
|
|
2751
|
+
});
|
|
2752
|
+
}
|
|
2753
|
+
async [setDecoderClass](decoderClass) {
|
|
2754
|
+
if (this._decoder) {
|
|
2755
|
+
const oldDecoder = this._decoder;
|
|
2756
|
+
await oldDecoder.ready.then(() => oldDecoder.free());
|
|
2757
|
+
}
|
|
2758
|
+
this._decoder = new decoderClass();
|
|
2759
|
+
return this._decoder.ready;
|
|
2760
|
+
}
|
|
2761
|
+
get ready() {
|
|
2762
|
+
return this._ready;
|
|
2763
|
+
}
|
|
2764
|
+
async reset() {
|
|
2765
|
+
this._init();
|
|
2766
|
+
return this._decoder.reset();
|
|
2767
|
+
}
|
|
2768
|
+
free() {
|
|
2769
|
+
this._decoder.free();
|
|
2770
|
+
}
|
|
2771
|
+
async decodeOggPages(oggPages) {
|
|
2772
|
+
const packets = [];
|
|
2773
|
+
for (let i = 0; i < oggPages.length; i++) {
|
|
2774
|
+
const oggPage2 = oggPages[i];
|
|
2775
|
+
if (this._vorbisSetupInProgress) {
|
|
2776
|
+
if (oggPage2[data2][0] === 1) {
|
|
2777
|
+
this._decoder.sendSetupHeader(oggPage2[data2]);
|
|
2778
|
+
}
|
|
2779
|
+
if (oggPage2[codecFrames2].length) {
|
|
2780
|
+
const headerData = oggPage2[codecFrames2][0][header2];
|
|
2781
|
+
this._decoder.sendSetupHeader(headerData[vorbisSetup2]);
|
|
2782
|
+
this._decoder.initDsp();
|
|
2783
|
+
this._vorbisSetupInProgress = false;
|
|
2784
|
+
}
|
|
2785
|
+
}
|
|
2786
|
+
packets.push(...oggPage2[codecFrames2].map((f) => f[data2]));
|
|
2787
|
+
}
|
|
2788
|
+
const decoded = await this._decoder.decodePackets(packets);
|
|
2789
|
+
this._totalSamplesDecoded += decoded.samplesDecoded;
|
|
2790
|
+
const oggPage = oggPages[oggPages.length - 1];
|
|
2791
|
+
if (oggPage && oggPage[isLastPage2]) {
|
|
2792
|
+
const samplesToTrim = this._totalSamplesDecoded - oggPage[totalSamples2];
|
|
2793
|
+
if (samplesToTrim > 0) {
|
|
2794
|
+
for (let i = 0; i < decoded.channelData.length; i++)
|
|
2795
|
+
decoded.channelData[i] = decoded.channelData[i].subarray(
|
|
2796
|
+
0,
|
|
2797
|
+
decoded.samplesDecoded - samplesToTrim
|
|
2798
|
+
);
|
|
2799
|
+
decoded.samplesDecoded -= samplesToTrim;
|
|
2800
|
+
this._totalSamplesDecoded -= samplesToTrim;
|
|
2801
|
+
}
|
|
2802
|
+
}
|
|
2803
|
+
return decoded;
|
|
2804
|
+
}
|
|
2805
|
+
async decode(vorbisData) {
|
|
2806
|
+
return this.decodeOggPages([...this._codecParser.parseChunk(vorbisData)]);
|
|
2807
|
+
}
|
|
2808
|
+
async flush() {
|
|
2809
|
+
const decoded = await this.decodeOggPages([...this._codecParser.flush()]);
|
|
2810
|
+
await this.reset();
|
|
2811
|
+
return decoded;
|
|
2812
|
+
}
|
|
2813
|
+
async decodeFile(vorbisData) {
|
|
2814
|
+
const decoded = await this.decodeOggPages([
|
|
2815
|
+
...this._codecParser.parseAll(vorbisData)
|
|
2816
|
+
]);
|
|
2817
|
+
await this.reset();
|
|
2818
|
+
return decoded;
|
|
2819
|
+
}
|
|
2820
|
+
};
|
|
2821
|
+
|
|
2822
|
+
// src/decode-vorbis.src.js
|
|
2823
|
+
var EMPTY = Object.freeze({ channelData: Object.freeze([]), sampleRate: 0 });
|
|
2824
|
+
async function decode(src) {
|
|
2825
|
+
let buf = src instanceof Uint8Array ? src : new Uint8Array(src);
|
|
2826
|
+
let dec = await decoder();
|
|
2827
|
+
try {
|
|
2828
|
+
let a = dec.decode(buf);
|
|
2829
|
+
let b = dec.flush();
|
|
2830
|
+
return hasAudio(b) ? merge(a, b) : a;
|
|
2831
|
+
} finally {
|
|
2832
|
+
dec.free();
|
|
2833
|
+
}
|
|
2834
|
+
}
|
|
2835
|
+
async function decoder() {
|
|
2836
|
+
let upstream = new OggVorbisDecoder();
|
|
2837
|
+
await upstream.ready;
|
|
2838
|
+
let codec2 = upstream._decoder, wasm = codec2?._common?.wasm;
|
|
2839
|
+
if (typeof codec2?.sendSetupHeader !== "function" || typeof codec2.initDsp !== "function" || typeof codec2.decodePackets !== "function" || typeof wasm?.malloc !== "function" || typeof wasm.free !== "function" || !(wasm.HEAP instanceof ArrayBuffer)) {
|
|
2840
|
+
upstream.free();
|
|
2841
|
+
throw Error("Unsupported @wasm-audio-decoders/ogg-vorbis internals");
|
|
2842
|
+
}
|
|
2843
|
+
let heapEnd = wasm.malloc(1);
|
|
2844
|
+
if (!heapEnd) {
|
|
2845
|
+
upstream.free();
|
|
2846
|
+
throw Error("Could not initialize Ogg Vorbis decoder");
|
|
2847
|
+
}
|
|
2848
|
+
wasm.free(heapEnd);
|
|
2849
|
+
heapEnd = Math.min(wasm.HEAP.byteLength, Math.ceil((heapEnd + 65536) / 65536) * 65536);
|
|
2850
|
+
let initialMemory = new Uint8Array(wasm.HEAP, 0, heapEnd).slice();
|
|
2851
|
+
let createParser = () => new codec_parser_default("audio/ogg", {
|
|
2852
|
+
onCodec: (c) => {
|
|
2853
|
+
if (c !== "vorbis") throw Error("@audio/decode-vorbis does not support this codec " + c);
|
|
2854
|
+
},
|
|
2855
|
+
enableFrameCRC32: false
|
|
2856
|
+
});
|
|
2857
|
+
let parser = createParser(), setup = true, total2 = 0, fresh = true;
|
|
2858
|
+
let resetPending = false, ended = false, freed = false;
|
|
2859
|
+
let resetCodec = () => {
|
|
2860
|
+
if (wasm.HEAP.byteLength < initialMemory.length)
|
|
2861
|
+
throw Error("Could not reset Ogg Vorbis decoder");
|
|
2862
|
+
new Uint8Array(wasm.HEAP, 0, initialMemory.length).set(initialMemory);
|
|
2863
|
+
codec2._firstPage = true;
|
|
2864
|
+
codec2._frameNumber = codec2._inputBytes = codec2._outputSamples = 0;
|
|
2865
|
+
};
|
|
2866
|
+
let startStream = () => {
|
|
2867
|
+
resetCodec();
|
|
2868
|
+
parser = createParser();
|
|
2869
|
+
setup = true;
|
|
2870
|
+
total2 = 0;
|
|
2871
|
+
fresh = true;
|
|
2872
|
+
resetPending = false;
|
|
2873
|
+
};
|
|
2874
|
+
let decodePages = (pages) => {
|
|
2875
|
+
if (!pages.length) return null;
|
|
2876
|
+
let packets = [];
|
|
2877
|
+
for (let page3 of pages) {
|
|
2878
|
+
if (setup) {
|
|
2879
|
+
if (page3[data2][0] === 1) codec2.sendSetupHeader(page3[data2]);
|
|
2880
|
+
if (page3[codecFrames2].length) {
|
|
2881
|
+
let setupHeader = page3[codecFrames2][0][header2][vorbisSetup2];
|
|
2882
|
+
codec2.sendSetupHeader(setupHeader);
|
|
2883
|
+
codec2.initDsp();
|
|
2884
|
+
setup = false;
|
|
2885
|
+
}
|
|
2886
|
+
}
|
|
2887
|
+
packets.push(...page3[codecFrames2].map((f) => f[data2]));
|
|
2888
|
+
}
|
|
2889
|
+
if (!packets.length) return null;
|
|
2890
|
+
let decoded = codec2.decodePackets(packets);
|
|
2891
|
+
total2 += decoded.samplesDecoded;
|
|
2892
|
+
let page2 = pages[pages.length - 1];
|
|
2893
|
+
if (page2?.[isLastPage2]) {
|
|
2894
|
+
let trim = total2 - page2[totalSamples2];
|
|
2895
|
+
if (trim > 0) {
|
|
2896
|
+
let keep = Math.max(0, decoded.samplesDecoded - trim);
|
|
2897
|
+
for (let i = 0; i < decoded.channelData.length; i++)
|
|
2898
|
+
decoded.channelData[i] = decoded.channelData[i].subarray(0, keep);
|
|
2899
|
+
total2 -= decoded.samplesDecoded - keep;
|
|
2900
|
+
decoded.samplesDecoded = keep;
|
|
2901
|
+
}
|
|
2902
|
+
}
|
|
2903
|
+
return decoded;
|
|
2904
|
+
};
|
|
2905
|
+
upstream.decode = (chunk) => {
|
|
2906
|
+
if (freed) throw Error("Decoder already freed");
|
|
2907
|
+
if (ended) throw Error("Decoder already flushed");
|
|
2908
|
+
if (!chunk) return EMPTY;
|
|
2909
|
+
let buf = chunk instanceof Uint8Array ? chunk : new Uint8Array(chunk);
|
|
2910
|
+
if (!buf.length) return EMPTY;
|
|
2911
|
+
if (resetPending) startStream();
|
|
2912
|
+
if (fresh && isCompleteOggStream(buf)) {
|
|
2913
|
+
let r2 = decodePages([...parser.parseAll(buf)]);
|
|
2914
|
+
parser = null;
|
|
2915
|
+
resetPending = true;
|
|
2916
|
+
return hasAudio(r2) ? r2 : EMPTY;
|
|
2917
|
+
}
|
|
2918
|
+
fresh = false;
|
|
2919
|
+
let r = decodePages([...parser.parseChunk(buf)]);
|
|
2920
|
+
return hasAudio(r) ? r : EMPTY;
|
|
2921
|
+
};
|
|
2922
|
+
upstream.flush = () => {
|
|
2923
|
+
if (freed || ended) return EMPTY;
|
|
2924
|
+
ended = true;
|
|
2925
|
+
if (resetPending) {
|
|
2926
|
+
parser = null;
|
|
2927
|
+
return EMPTY;
|
|
2928
|
+
}
|
|
2929
|
+
try {
|
|
2930
|
+
let r = decodePages([...parser.flush()]);
|
|
2931
|
+
return hasAudio(r) ? r : EMPTY;
|
|
2932
|
+
} finally {
|
|
2933
|
+
parser = null;
|
|
2934
|
+
}
|
|
2935
|
+
};
|
|
2936
|
+
let free2 = upstream.free.bind(upstream);
|
|
2937
|
+
upstream.free = () => {
|
|
2938
|
+
if (freed) return;
|
|
2939
|
+
freed = true;
|
|
2940
|
+
parser = null;
|
|
2941
|
+
free2();
|
|
2942
|
+
initialMemory = null;
|
|
2943
|
+
};
|
|
2944
|
+
return upstream;
|
|
2945
|
+
}
|
|
2946
|
+
function hasAudio(result) {
|
|
2947
|
+
return !!result?.channelData?.[0]?.length;
|
|
2948
|
+
}
|
|
2949
|
+
function isCompleteOggStream(buf) {
|
|
2950
|
+
let offset = 0, first = true;
|
|
2951
|
+
while (offset < buf.length) {
|
|
2952
|
+
if (offset + 27 > buf.length || buf[offset] !== 79 || buf[offset + 1] !== 103 || buf[offset + 2] !== 103 || buf[offset + 3] !== 83 || buf[offset + 4] !== 0)
|
|
2953
|
+
return false;
|
|
2954
|
+
let flags = buf[offset + 5], segments2 = buf[offset + 26];
|
|
2955
|
+
if (first && !(flags & 2)) return false;
|
|
2956
|
+
let body = offset + 27 + segments2;
|
|
2957
|
+
if (body > buf.length) return false;
|
|
2958
|
+
let end = body;
|
|
2959
|
+
for (let i = offset + 27; i < body; i++) end += buf[i];
|
|
2960
|
+
if (end > buf.length) return false;
|
|
2961
|
+
if (flags & 4) return end === buf.length;
|
|
2962
|
+
offset = end;
|
|
2963
|
+
first = false;
|
|
2964
|
+
}
|
|
2965
|
+
return false;
|
|
2966
|
+
}
|
|
2967
|
+
function merge(a, b) {
|
|
2968
|
+
if (!hasAudio(b)) return a;
|
|
2969
|
+
if (!hasAudio(a)) return b;
|
|
2970
|
+
return {
|
|
2971
|
+
channelData: a.channelData.map((ch, i) => {
|
|
2972
|
+
let bc = b.channelData[i] || b.channelData[0];
|
|
2973
|
+
let m = new Float32Array(ch.length + bc.length);
|
|
2974
|
+
m.set(ch);
|
|
2975
|
+
m.set(bc, ch.length);
|
|
2976
|
+
return m;
|
|
2977
|
+
}),
|
|
2978
|
+
sampleRate: a.sampleRate
|
|
2979
|
+
};
|
|
2980
|
+
}
|
|
2981
|
+
export {
|
|
2982
|
+
decoder,
|
|
2983
|
+
decode as default
|
|
2984
|
+
};
|