pax_global_header00006660000000000000000000000064151653306650014524gustar00rootroot0000000000000052 comment=57bed56ef669132c0f906e1d064680bf2c4b2205 puremagic-2.2.0/000077500000000000000000000000001516533066500135015ustar00rootroot00000000000000puremagic-2.2.0/.claude/000077500000000000000000000000001516533066500150145ustar00rootroot00000000000000puremagic-2.2.0/.claude/skills/000077500000000000000000000000001516533066500163155ustar00rootroot00000000000000puremagic-2.2.0/.claude/skills/changelog.md000066400000000000000000000033511516533066500205700ustar00rootroot00000000000000--- name: changelog description: Update the CHANGELOG.md changelog file with new entries user_invocable: true --- # Changelog Skill When updating the `CHANGELOG.md` file, follow these rules: ## Entry Format Each entry is a single bullet point starting with `- `: ``` - {Verb} {description} ``` ## Verbs and Ordering Entries MUST use one of these four starting verbs, and MUST appear in this order within each version section: 1. **Adding** — new features 2. **Changing** — modifications to existing behavior 3. **Fixing** — bug fixes 4. **Removing** — removed features or deprecated items ## GitHub Issue Entries - Entries that reference a GitHub issue include the issue number after the verb: `* Fixing #725 description...` - Within each verb group, entries WITH issue numbers come FIRST, sorted by issue number ascending (smallest to largest) - Entries WITHOUT issue numbers follow after ## Thanks Attribution - When an entry references a GitHub issue, thank the issue author by their **GitHub display name** (not username) - Look up the display name via `gh api users/{username} --jq '.name // .login'` - Format: `(thanks to {display name})` - If multiple people contributed (e.g., reporter and commenter with the fix), thank all of them - The thanks attribution goes at the end of the entry ## Example ``` Version 1.27 ------------ - Adding #92 include py.typed in sdist (thanks to Nicholas Bollweg - bollwyvl) - Adding #93 Improve PDF file detection, fix json description (thanks to Péter - peterekepeter) - Adding new verbose output to command line with `-v` or `--verbose` - Fixing #96 #86 stream does not work properly on opened small files (thanks to Felipe Lema and Andy - NebularNerd) - Removing expected invalid WinZip signature ``` puremagic-2.2.0/.coveragerc000066400000000000000000000003061516533066500156210ustar00rootroot00000000000000[report] omit = */python?.?/* */site-packages/* */test/* */pypy/* */venv/* */.*/* */*.egg-info/* */.ty/* */.pytest_cache/* exclude_lines = command_line_entry puremagic-2.2.0/.github/000077500000000000000000000000001516533066500150415ustar00rootroot00000000000000puremagic-2.2.0/.github/workflows/000077500000000000000000000000001516533066500170765ustar00rootroot00000000000000puremagic-2.2.0/.github/workflows/pythonpublish.yml000066400000000000000000000015701516533066500225340ustar00rootroot00000000000000# This workflows will upload a Python Package using Twine when a release is created # For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries name: Upload Python Package on: release: types: [created] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.14' - name: Install the latest version of uv and activate the environment uses: astral-sh/setup-uv@v6 - name: Install dependencies run: uv sync --frozen - name: Build and publish env: TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} run: | uv build uv run twine upload dist/* puremagic-2.2.0/.github/workflows/tests.yml000066400000000000000000000027151516533066500207700ustar00rootroot00000000000000# This workflow will install Python dependencies, run tests and lint with a variety of Python versions # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions name: Tests on: push: branches: [ master, develop ] pull_request: branches: [ master, develop ] jobs: build: strategy: fail-fast: false matrix: os: [ubuntu-latest] python-version: ["3.12", "3.13", "3.14"] include: - os: macos-latest python-version: '3.14' - os: windows-latest python-version: '3.14' runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} allow-prereleases: true - name: Install the latest version of uv and activate the environment uses: astral-sh/setup-uv@v6 - name: Install dependencies run: uv sync --frozen - name: Verify Code with Ruff run: uv run ruff check - name: Type check with ty run: uv run ty check - name: Test with pytest run: uv run pytest --cov=puremagic test/ - name: Check distribution log description shell: bash run: | uv build uv run twine check dist/* ls -lah "dist/" WHL=$(find dist -name *.whl -print -quit) echo ${WHL} puremagic-2.2.0/.gitignore000066400000000000000000000042101516533066500154660ustar00rootroot00000000000000# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ pip-wheel-metadata/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ cover/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder .pybuilder/ target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv # For a library or package, you might want to ignore these files since the code is # intended to run in multiple environments; otherwise, check them in: # .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. #Pipfile.lock # PEP 582; used by e.g. github.com/David-OConnor/pyflow __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # ty .ty/ # Pyre type checker .pyre/ # pytype static type analyzer .pytype/ # Cython debug symbols cython_debug/ # static files generated from Django application using `collectstatic` media static .idea/ # Ignore VS Code related files and folders .vscode *.code-workspace puremagic-2.2.0/.pre-commit-config.yaml000066400000000000000000000034401516533066500177630ustar00rootroot00000000000000repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v6.0.0 hooks: # Identify invalid files - id: check-ast - id: check-yaml - id: check-json - id: check-toml # git checks - id: check-merge-conflict - id: check-added-large-files exclude: ^test/resources/.+ - id: detect-private-key - id: check-case-conflict # Python checks - id: check-docstring-first - id: debug-statements - id: requirements-txt-fixer - id: fix-byte-order-marker # General quality checks - id: mixed-line-ending args: [--fix=lf] exclude: ^test/resources/ - id: trailing-whitespace args: [--markdown-linebreak-ext=md] exclude: | (?x)^( ^test/resources/.+| ^puremagic/magic_data.json )$ - id: check-executables-have-shebangs - id: end-of-file-fixer exclude: ^test/resources/.+ - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. rev: v0.15.5 hooks: # Run the linter. - id: ruff-check args: [ --fix ] # Run the formatter. - id: ruff-format - repo: local hooks: - id: ty name: ty entry: uv run ty check language: system types: [python] pass_filenames: false - repo: https://github.com/codespell-project/codespell rev: v2.4.1 hooks: - id: codespell args: [--ignore-words-list, "addin,caf,tye,wors"] exclude: | (?x)^( test/resources/| .*\.json$ ) - repo: https://github.com/tox-dev/pyproject-fmt rev: v2.16.2 hooks: - id: pyproject-fmt - repo: https://github.com/abravalheri/validate-pyproject rev: v0.25 hooks: - id: validate-pyproject puremagic-2.2.0/AUTHORS.rst000066400000000000000000000012271516533066500153620ustar00rootroot00000000000000puremagic is written and maintained by Chris Griffith . A big thank you to everyone that has helped! - Jonathan Barratt (reduxionist) - jiel - Victor Domingos (victordomingos) - David Shunfenthal (dshunfen) - Andrey Zakharevich (andreyz4k) - Sergey Ponomarev (stokito) - andrewpmk - bannsec - Don Tsang (DonaldTsang) - Oleksandr (msdinit) - Robbert Korving (robkorv) - Sean Stallbaum (CSBaum) - phithon - Gerhard Schmidt - R. Singh (Gr3atWh173) - Andy (NebularNerd) - Raphaël Vinot (Rafiot) - Sebastian Kreft (sk-) - William Bonnaventure (Aztorius) - Nicholas Bollweg (bollwyvl) - Péter (peterekepeter) - mara004 - Markus (tvads-markus) puremagic-2.2.0/CHANGELOG.md000066400000000000000000000173651516533066500153260ustar00rootroot00000000000000Changelog ========= Version 2.2.0 ------------- - Adding Ogg scanner to distinguish Vorbis, Opus, Theora, FLAC, Speex, and OGM codecs - Adding ASF scanner to distinguish WMV (video) from WMA (audio) files - Adding EBML scanner to distinguish Matroska (.mkv) from WebM (.webm) files - Adding MSI (Windows Installer) and MPP (Microsoft Project) detection to CFBF scanner - Fixing #146 OOXML detection now uses `[Content_Types].xml` content types as primary method, correctly identifying docx/xlsx/pptx files from LibreOffice, Google Docs, and other non-Microsoft tools (thanks to jonasdeboeck79) - Fixing ZIP deep scan now inspects all ZIP files instead of short-circuiting on .zip extension - Fixing text scanner now treats files containing NUL bytes as binary data instead of misidentifying them as text - Fixing mz5 HDF5 scanner typo in chromatogram dataset name Version 2.1.1 ------------- - Fixing #141 deep scan no longer overrides valid binary format matches (e.g. JPEG) for files without extensions (thanks to marph91) Version 2.1.0 ------------- - Adding #6 `from_extension()` and `magic_extension()` to look up MIME types by file extension - Adding #119 CFBF/OLE2 scanner to distinguish Word, Excel, PowerPoint, Outlook MSG, Visio, and Publisher files (thanks to Simeon Stoykov and Andy - NebularNerd) - Adding #139 codespell check (thanks to Christian Clauss) - Adding `-e`/`--extension` CLI flag for extension-based MIME type lookup - Fixing #104 WAV MIME type changed from `audio/wave` to `audio/wav` (thanks to Simon Willison and Andy - NebularNerd) Version 2.0.2 ------------- - Fixing #137 passing non-existent filename to from_string()/from_stream() no longer raises FileNotFoundError (thanks to denisw) Version 2.0.1 ------------- - Fixing #126 Python scanner false positives — now uses AST node walking instead of regex to verify real Python constructs (thanks to ahobson) - Fixing #134 UTF-16 LE BOM (FF FE) no longer misidentified as .mp1 audio, added UTF-16 BOM detection to text scanner (thanks to tomazfs) - Fixing #135 from_string(), from_stream(), magic_string(), and magic_stream() now perform deep scan when filename is provided (thanks to denisw) Version 2.0.0 ------------- - Adding deep scan for improved accuracy #102 #94 #85 #70 #69 #12 #3 - Changing to full semantic versioning to be able to denote bugfixes vs minor features - Changing to use uv instead of requirements - Removing support for python 3.7, 3.8, 3.9, 3.10 and 3.11 please stick to 1.x release chain to support older versions Version 1.30 ------------ - Adding #109 Halt on non-regular files like /dev/zero and /dev/random (thanks to Yuri Schaeffer) Version 1.29 ------------ - Changing to publishing to pypi with Python 3.9 - Fixing #105 fsspec/gcsfs throws an ValueError instead of a OSError (thanks to Markus) - Fixing github actions due to updates Version 1.28 ------------ - Adding #99 New file support (thanks to Andy - NebularNerd) - Fixing #100 FITS files no longer had mime type (thanks to ejeschke) Version 1.27 ------------ - Adding new verbose output to command line with `-v` or `--verbose` - Adding #92 include py.typed in sdist (thanks to Nicholas Bollweg - bollwyvl) - Adding #93 Improve PDF file detection, fix json description (thanks to Péter - peterekepeter) - Fixing #96 #86 stream does not work properly on opened small files (thanks to Felipe Lema and Andy - NebularNerd) - Removing expected invalid WinZip signature Version 1.26 ------------ - Adding #87 sndhdr update and HD/CD/DVD Image files (thanks to Andy - NebularNerd) - Adding #88 Add .caf mime type (thanks to William Bonnaventure) - Fixing #89 add py.typed to package_data (thanks to Sebastian Kreft) Version 1.25 ------------ - Changing to support Python 3.7 again Version 1.24 ------------ - Adding #72 #75 #76 #81 `.what()` to be a drop in replacement for `imghdr.what()` (thanks to Christian Clauss and Andy - NebularNerd) - Adding #67 Test on Python 3.13 beta (thanks to Christian Clauss) - Adding #77 from __future__ import annotations (thanks to Christian Clauss - Changing all HTML extensions to full `.html` - Fixing #66 Confidence sorting (thanks to Andy - NebularNerd) Version 1.23 ------------ - Fixing #32 MP3 Detection improvements (thanks to Andy - NebularNerd and Sander) Version 1.22 ------------ - Adding #52 magic data for JPEG XS (thanks to Andy - NebularNerd) - Adding #57 Multi-part checks with negative offsets (thanks to Andy - NebularNerd) - Fixing #60 encoding warning (thanks to Andy - NebularNerd and Jason R. Coombs) Version 1.21 ------------ - Adding #50 details for ZSoft .pcx files (thanks to Andy - NebularNerd) - Adding #51 details for JXL files (thanks to Andy - NebularNerd) - Adding #54 missing py.typed file (thanks to Raphaël Vinot) - Fixing #53 magic data for GIF images (thanks to Andy - NebularNerd) Version 1.20 ------------ - Adding support for multi-part header checks (thanks to Andy) - Fixing matches for webp (thanks to Nicolas Wicht) - Fixing matches for epub (thanks to Alexander Walters) Version 1.15 ------------ - Adding fix for resetting the stream after reading part of it (thanks to R. Singh) Version 1.14 ------------ - Adding generic extension mapping for common file types - Adding #36 details to readme about magic_stream and magic_string (thanks to Martin) - Fixing multiple bad extensions and mimetypes - Removing bad entry for 3gp5 selecting multiple things Version 1.13 ------------ - Adding support for Path for filename - Adding details for mp4 - Adding details for avif and heif images Version 1.12 ------------ - Adding #38 webp mimetype (thanks to phith0n) - Adding #37 SVG images (thanks to Gerhard Schmidt) - Adding missing mimetypes for aac, vmdk, wmv and xcf Version 1.11 ------------ - Adding #34 test files to build (thanks to James French) - Adding #33 install from pypi details (thanks to Sander) - Removing #31 unsupported Python items in setup.py (thanks to Safihre) Version 1.10 ------------ - Fixing how confidence works (thanks to Sean Stallbaum) Version 1.9 ----------- - Adding new methods for stream handling (from_stream, magic_stream) (thanks to Robbert Korving) Version 1.8 ----------- - Adding support for various other files (thanks to Don Tsang) - Adding missing mime types (thanks to Oleksandr) Version 1.7 ----------- - Adding support for PCAPNG files (thanks to bannsec) - Adding support for numerous other files updated by Gary C. Kessler - Adding script for parsing FTK GCK sigs - Changing test suites to github workflows instead of TravisCI - Removing official support, new packages and test for python 2 Version 1.6 ----------- - Adding support for LZ4 and ZSTD archives (Thanks to Sergey Ponomarev) - Adding support for more office formats (Thanks to andrewpmk) Version 1.5 ----------- - Adding full magic info in results (Thanks to David Shunfenthal) - Fixing magic_data.json not being added to sdist dist (Thanks to Andrey Zakharevich) Version 1.4 ----------- - Fixing how `__main__` was implemented (Thanks to Victor Domingos) Version 1.3 ----------- - Adding filename extension hinting for string (Thanks to jiel) - Adding open office MIME types (Thanks to jiel) Version 1.2 ----------- - Adding setup file - Adding changelog - Adding CI tests support for 3.4, 3.5, 3.6 and pypy - Adding more basic documentation - Adding magic detection from https://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec/ - Removing testing on 3.2 due to Travis CI and coverage not getting along - Changing to argparse instead of optparse - Changing magic_file to not raise error on empty, simple provide an empty list - Changing magic_data py file to a json file so it's easier to understand and modify - Updating data to be a python file, so there is no dangerous eval Version 1.1 ----------- - Adding tests - Changing to MIT License Version 1.0 ----------- - Initial release puremagic-2.2.0/LICENSE000066400000000000000000000020761516533066500145130ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2013-2025 Chris Griffith Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. puremagic-2.2.0/MANIFEST.in000066400000000000000000000002611516533066500152360ustar00rootroot00000000000000include puremagic/*.json include puremagic/py.typed include puremagic/scanners/*.py include LICENSE include AUTHORS.rst include CHANGELOG.md graft test global-exclude *.py[cod] puremagic-2.2.0/README.rst000066400000000000000000000144131516533066500151730ustar00rootroot00000000000000========= puremagic ========= puremagic is a pure python module that will identify a file based off its magic numbers. It has zero runtime dependencies and serves as a lightweight, cross-platform alternative to python-magic/libmagic. It is designed to be minimalistic and inherently cross platform compatible. It is also designed to be a stand in for python-magic. It implements the functions :code:`from_file(filename[, mime])` and :code:`from_string(string[, mime])` however the :code:`magic_file()` and :code:`magic_string()` are more powerful and will also display confidence and duplicate matches. Starting with version 2.0, puremagic includes a **deep scan** system that performs content-aware analysis beyond simple magic number matching. This improves accuracy for formats like Office documents, text files, CSV, MP3, Python source, JSON, HDF5, email, and many scientific formats. Deep scan is enabled by default and can be disabled by setting the environment variable :code:`PUREMAGIC_DEEPSCAN=0`. Advantages over using a wrapper for 'file' or 'libmagic': - Faster - Lightweight - Cross platform compatible - No dependencies Disadvantages: - Does not have as many file types - No multilingual comments - Duplications due to small or reused magic numbers (Help fix the first two disadvantages by contributing!) Compatibility ~~~~~~~~~~~~~ - Python 3.12+ For use with Python 3.7–3.11, use the 1.x release chain. Using github ci to run continuous integration tests on listed platforms. Install from PyPI ----------------- .. code:: bash $ pip install puremagic On linux environments, you may want to be clear you are using python3 .. code:: bash $ python3 -m pip install puremagic Usage ----- "from_file" will return the most likely file extension. "magic_file" will give you every possible result it finds, as well as the confidence. .. code:: python import puremagic filename = "test/resources/images/test.gif" ext = puremagic.from_file(filename) # '.gif' puremagic.magic_file(filename) # [['.gif', 'image/gif', 'Graphics interchange format file (GIF87a)', 0.7], # ['.gif', '', 'GIF file', 0.5]] With "magic_file" it gives each match, highest confidence first: - possible extension(s) - mime type - description - confidence (All headers have to perfectly match to make the list, however this orders it by longest header, therefore most precise, first) If you already have a file open, or raw byte string, you could also use: * from_string * from_stream * magic_string * magic_stream .. code:: python with open(r"test\resources\video\test.mp4", "rb") as file: print(puremagic.magic_stream(file)) # [PureMagicWithConfidence(byte_match=b'ftypisom', offset=4, extension='.mp4', mime_type='video/mp4', name='MPEG-4 video', confidence=0.8), # PureMagicWithConfidence(byte_match=b'iso2avc1mp4', offset=20, extension='.mp4', mime_type='video/mp4', name='MP4 Video', confidence=0.8)] Deep Scan --------- Deep scan performs content-aware analysis when magic number matching alone is not enough. It is enabled by default and runs automatically as part of the normal identification pipeline. The following format-specific scanners are included: - **ZIP** — Distinguishes Office formats (xlsx/docx/pptx), OpenDocument (odt/ods/odp), and their macro-enabled variants by inspecting ZIP internals - **MPEG Audio** — Parses MP3/MPEG audio frames to validate and identify audio files - **Text** — Detects text encodings, line endings (CRLF/LF/CR), CSV files with automatic delimiter detection, and email messages (.eml) - **Python** — Validates Python source via :code:`ast.parse()` and keyword analysis - **PDF** — Format-specific PDF validation - **JSON** — JSON format validation - **HDF5** — Identifies HDF5 subtypes used in scientific computing (AnnData, Loom, Cooler, BIOM v2, mz5, and more) - **Audio** — Identifies HCOM and SNDR audio formats - **Dynamic text checks** — Recognizes many scientific and bioinformatics text formats including VCF, SAM, GFF, PLY, VTK, and others To disable deep scan, set the environment variable: .. code:: bash $ export PUREMAGIC_DEEPSCAN=0 Script ------ *Usage* .. code:: bash $ python -m puremagic [options] filename ... *Options* - :code:`-m, --mime` — Return the MIME type instead of file extension - :code:`-v, --verbose` — Print verbose output with all possible matches - :code:`--version` — Show program version Directories can be passed as arguments; all files within will be scanned. *Examples* .. code:: bash $ python -m puremagic test/resources/images/test.gif 'test/resources/images/test.gif' : .gif $ python -m puremagic -m test/resources/images/test.gif test/resources/audio/test.mp3 'test/resources/images/test.gif' : image/gif 'test/resources/audio/test.mp3' : audio/mpeg Upgrading from 1.x ------------------- Version 2.0 includes the following breaking changes: - **Python 3.12+ required** — Python 3.7–3.11 are no longer supported. Use the 1.x release chain for older Python versions. - **Removed** :code:`puremagic.what()` — The :code:`imghdr` drop-in replacement has been removed. Use :code:`puremagic.from_file()` instead. - **Removed** :code:`magic_header_array`, :code:`magic_footer_array`, and :code:`multi_part_dict` from the public API. - **Removed** :code:`setup.py` — The project now uses :code:`pyproject.toml` exclusively. - Internal functions have been renamed from private (e.g. :code:`_magic_data`) to public (e.g. :code:`magic_data`). FAQ --- *The file type is actually X but it's showing up as Y with higher confidence?* This can happen when the file's signature happens to match a subset of a file standard. The subset signature will be longer, therefore report with greater confidence, because it will have both the base file type signature plus the additional subset one. Acknowledgements ---------------- Gary C. Kessler For use of his File Signature Tables, available at: https://filesig.search.org/ Freedesktop.org For use of their shared-mime-info file, available at: https://cgit.freedesktop.org/xdg/shared-mime-info/ License ------- MIT Licenced, see LICENSE, Copyright (c) 2013-2026 Chris Griffith puremagic-2.2.0/puremagic/000077500000000000000000000000001516533066500154555ustar00rootroot00000000000000puremagic-2.2.0/puremagic/__init__.py000066400000000000000000000002021516533066500175600ustar00rootroot00000000000000#!/usr/bin/env python from puremagic.main import * # noqa: F403 from puremagic.main import __author__, __version__ # noqa: F401 puremagic-2.2.0/puremagic/__main__.py000077500000000000000000000001321516533066500175460ustar00rootroot00000000000000#!/usr/bin/env python from puremagic.main import command_line_entry command_line_entry() puremagic-2.2.0/puremagic/magic_data.json000066400000000000000000005150231516533066500204270ustar00rootroot00000000000000{ "extension_only": [ ["", 0, ".txt", "text/plain", "Text File"], ["", 0, ".log", "text/plain", "Logger File"], ["", 0, ".yaml", "application/x-yaml", "YAML File"], ["", 0, ".yml", "application/x-yaml", "YAML File"], ["", 0, ".toml", "application/toml", "TOML File"], ["", 0, ".py", "text/x-python", "Python File"], ["", 0, ".pyc", "application/x-python", "Python Complied File"], ["", 0, ".pyd", "application/x-python", "Python Complied File"], ["", 0, ".python_history", "text/plain", "Python History File"], ["", 0, ".bat", "application/x-script", "Windows BAT file"], ["", 0, ".gitconfig", "text/plain", "Git Ignore File"], ["", 0, ".rdp", "", "Windows Remote Desktop File"], ["", 0, ".ini", "text/plain", "INI Config file"], ["", 0, ".key", "", "Encryption Key"], ["", 0, ".pem", "application/x-pem-file", "X.509 Certificate"], ["", 0, ".ps1", "text/plain", "Powershell Script"], ["", 0, ".ipynb", "", "Jupyter Notebook File"], ["", 0, ".crt", "text/plain", "X.509 Certificate"], ["", 0, ".reg", "", "Windows Registry File"], ["", 0, ".md", "text/plain", "Markdown File"], ["", 0, ".json", "application/json", "JSON File"], ["", 0, ".rst", "text/plain", "Restructured Text File"], ["", 0, ".cfg", "text/plain", "Configuration File"], ["", 0, ".flake8", "text/plain", "Flake 8 Configuration File"], ["", 0, ".coveragerc", "text/plain", "Coverage File"], ["", 0, ".c", "text/x-csrc", "C Code File"], ["", 0, ".cc", "text/x-csrc", "C Code File"], ["", 0, ".h", "text/x-csrc", "C Header File"], ["", 0, ".pdf", "application/pdf", "Adobe Portable Document Format file"], ["", 0, ".stl", "model/stl", "stereolithography CAD software"], ["", 0, ".srt", "application/x-subrip", "SubRip subtitles"], ["", 0, ".obj", "", "Relocatable object code"], ["", 0, ".asx", "video/x-ms-asf", "Advanced Stream Redirector"], ["", 0, ".com", "application/octet-stream", "Windows executable file"], ["", 0, ".sys", "application/octet-stream", "Windows executable file"], ["", 0, ".db4", "", "dBASE IV file"], ["", 0, ".sys", "", "Windows executable"], ["", 0, ".db3", "", "dBASE III file"], ["", 0, ".dat", "", "MapInfo Native Data Format"], ["", 0, ".drw", "application/drafting", "Generic drawing programs"], ["", 0, ".gpg", "", "GPG public keyring"], ["", 0, ".cat", "application/vnd.ms-pki.seccat", "MS security catalog file"], ["", 0, ".xdr", "video/x-amt-demorun", "BizTalk XML-Data Reduced Schema"], ["", 0, ".db", "", "Database, dBASE IV, or dBFast configuration file"], ["", 0, ".bsb", "", "MapInfo Sea Chart"], ["", 0, ".js", "application/javascript", "JavaScript File"], ["", 0, ".jsx", "application/javascript", "JavaScript File"], ["", 0, ".ts", "application/x-typescript", "Transport Stream File"], ["", 0, ".tsx", "application/x-typescript", "Typescript File"], ["", 0, ".conf", "text/plain", "Configuration File"], ["", 0, ".okta", "", "Oktalyzer tracker module (Memory dump format)"], ["", 0, ".jxsi", "image/jxsi", "JPEG XS image"], ["", 0, ".jxss", "image/jxss", "JPEG XS image"], ["", 0, ".jxsv", "video/jxsv", "JPEG XS video"], ["", 0, ".hc", "", "VeraCrypt File Container"], ["", 0, ".cdi", "", "DiscJuggler image"], ["", 0, ".bws", "", "BlindRead Sub Channel Data"], ["", 0, ".bwt", "", "BlindRead Control File"], ["", 0, ".bwi", "", "BlindRead Image File"], ["", 0, ".b5i", "", "BlindWrite 5 Image File"], ["", 0, ".b6i", "", "BlindWrite 6 Image File"], ["", 0, ".cl2", "", "Adaptec Easy CD/DVD Creator image file"], ["", 0, ".cl3", "", "Adaptec Easy CD/DVD Creator image file"], ["", 0, ".cl4", "", "Adaptec Easy CD/DVD Creator image file"], ["", 0, ".vba", "", "Visual Basic Script"], ["", 0, "README", "text/plain", "README File"], ["", 0, ".azw1", "", "Amazon Kindle eBook with Topaz DRM"], ["", 0, ".tpz", "", "Amazon Kindle eBook with Topaz DRM"], ["", 0, ".mbp", "", "Mobipocket/Kindle eBook metadata file"], ["", 0, ".kcr", "", "Kindle Cloud Reader or Kindle for Mac file"], ["", 0, ".azk", "", "Kindle Previewer or Kindle for iOS file"], ["", 0, ".azw9.res", "", "Amazon Kindle for MAC Resource Container file"], ["", 0, ".azw9.ms", "", "Amazon Kindle for MAC Metadata Container file"], ["", 0, ".prc", "", "Palm OS Resource File"], ["", 0, ".lrx", "", "Sony Broad Band (BBeB) DRM encrypted eBook file"], ["", 0, ".lrf", "", "Sony Librie Reader Source eBook file"], ["", 0, ".lmp", "", "Quake image file"], ["", 0, ".rc", "", "Quake resource file"], ["", 0, ".hdp", "", "Microsoft HD Photo image"] ], "multi-part": { "7b22": [["227d", -2, ".json", "application/json", "JSON File"]], "7b": [["22", -1, ".json", "application/json", "JSON File"]], "464f524d": [ ["494c424d", 8, ".iff", "image/x-ilbm", "IFF Interleaved Bitmap Image"], ["38535658", 8, ".iff", "audio/x-8svx", "IFF 8-Bit Sampled Voice"], ["4143424d", 8, ".iff", "application/x-iff", "Amiga Contiguous Bitmap"], ["414e424d", 8, ".iff", "application/x-iff", "IFF Animated Bitmap"], ["414e494d", 8, ".iff", "application/x-iff", "IFF CEL Animation"], ["46415858", 8, ".iff", "application/x-iff", "IFF Facsimile Image"], ["46545854", 8, ".iff", "application/x-iff", "IFF Formatted Text"], ["534d5553", 8, ".iff", "application/x-iff", "IFF Facsimile Image"], ["434d5553", 8, ".iff", "application/x-iff", "IFF Formatted Text"], ["5955564e", 8, ".iff", "application/x-iff", "IFF YUV Image"], ["46414e54", 8, ".iff", "application/x-iff", "Amiga Fantavision Movie"], ["41494646", 8, ".aiff", "audio/x-aiff", "Audio Interchange File Format"], ["41494643", 8, ".aifc", "audio/x-aiff", "Audio Interchange File Format (Compressed)"], ["53434448", 8, ".sc2", "", "SimCity 2000 Map File"] ], "52494646": [ ["57415645", 8, ".wav", "audio/wav", "Waveform Audio File Format"], ["41564920", 8, ".avi", "video/avi", "Audio Video Interleave"], ["57454250", 8, ".webp", "image/webp", "WebP graphics file format"], ["41434f4e", 8, ".ani", "", "Animated cursor"], ["43444441", 8, ".cda", "", "CD-DA stub file"], ["514c434d", 8, ".qcp", "audio/qcelp", "Qualcomm PureVoice"], ["5644524d", 8, ".vdr", "", "VirtualDub"], ["54524944", 8, ".trd", "", "TrID"], ["73687734", 8, ".shw", "", "Corel SHOW! 4.0"], ["73687735", 8, ".shw", "", "Corel SHOW! 5.0"], ["73687235", 8, ".shr", "", "Corel SHOW! 5.0 player"], ["73686235", 8, ".shb", "", " Corel SHOW! 5.0 background"], ["524d4d50", 8, ".mmm", "", "MacroMind Multimedia Movie or Microsoft Multimedia Movie"], ["7366626b4c495354", 8, ".sbk", "", "Creative Labs AWE Soundbank"], ["5745425056503820", 8, ".webp", "image/webp", "RIFF WebP File (VP8 Lossy Compression)"], ["574542505650384c", 8, ".webp", "image/webp", "RIFF WebP File (VP8 Lossless)"], ["5745425056503858", 8, ".webp", "image/webp", "RIFF WebP File (VP8 Extended File Format)"], ["57454250", 8, ".webp", "image/webp", "RIFF WebP File"], ["696d6167", 8, ".cif", "application/x-cif", "Adaptec Easy CD/DVD Creator image file"] ], "41542654464f524d": [ ["444a5655", 12, ".djvu", "image/vnd.djvu", "DjVu single page document or image"], ["444a564d", 12, ".djvu", "image/vnd.djvu+multipage", "DjVu document multi-page document"] ], "52494658": [ ["4647444d", 8, ".dcr", "", "Adobe Shockwave"], ["4d563933", 8, ".dir", "", "Macromedia Director file format"] ], "4352454d": [ ["444f4e4500000000", -8, ".ctm", "", "CreamTracker module"] ], "3c747261636b206e616d653d22": [ ["3c2f747261636b3e0a", -9, ".pt2", "", "PicaTune 2 module"] ], "3c6d6c74": [ ["3c2f6d6c743e0a", -7, ".mlt", "", "Shotcut project"] ], "4efa": [ ["4efa", 12, ".fred", "", "FRED Editor module"] ], "5354312e": [ ["4d6f64756c65494e464f", 6, ".nt", "", "StarTrekker FM Synth Pattern file"] ], "494d504d": [ ["0300", 41, ".mptm", "", "OpenMPT 1.17.02.20 to OpenMPT 1.17.02.25 module"], ["0888", 41, ".mptm", "", "OpenMPT 1.17.02.26 to OpenMPT 1.18 module"], ["14021402", 40, ".it", "audio/x-it", "UNMO3 Impulse Tracker module"], ["04020002", 40, ".it", "audio/x-it", "Unknown XM to IT converter module"], ["14020002", 40, ".it", "audio/x-it", "OpenSPC Impulse Tracker module"], ["02020002", 40, ".mptm", "", "ModPlug Tracker 1.0 pre-alpha module"], ["14020002", 40, ".mptm", "", "ModPlug Tracker 1.0 alpha module"], ["14020202", 40, ".mptm", "", "ModPlug Tracker 1.0 beta module"], ["17020002", 40, ".mptm", "", "ModPlug Tracker / OpenMPT 1.17 module"], ["14021402", 40, ".ct", "", "CheeseTracker module"], ["43484249", 60, ".ct", "", "ChibiTracker module"], ["2551", 40, ".mptm", "", "OpenMPT 1.22 module"], ["2551", 40, ".mptm", "", "OpenMPT 1.25 module"], ["2651", 40, ".mptm", "", "OpenMPT 1.26 module"], ["2851", 40, ".mptm", "", "OpenMPT 1.28+ module"], ["1402", 40, ".it", "audio/x-it", "Impulse Tracker 2.14 module"], ["1702", 40, ".it", "audio/x-it", "Impulse Tracker 2.14a3 module"], ["6000", 40, ".it", "", "BeRo Tracker module"], ["17020002", 40, ".it", "", "BeRo Tracker (old) module"], ["17021402", 40, ".it", "", "BeRo Tracker (old) module"] ], "30313233343536373839": [["30313233343536373839", -62, ".puremagic_multi_footer", "text/ascii", "TESTFILE"]], "494433": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer 3 (MP3) audio file"] ], "4944330200": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["41454e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["425546", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["434e54", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["434f4d", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["435241", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["43524d", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["455443", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["455155", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["47454f", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["4c4e4b", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["4d4349", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["4d4c4c", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["504943", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["504f50", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["524556", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["525641", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["534c54", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["535443", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["54414c", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["544250", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["54434d", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["54434f", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["544352", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["544441", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["544459", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["54454e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["544654", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["54494d", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["544b45", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["544c41", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["544c45", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["544d54", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["544f41", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["544f46", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["544f4c", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["544f52", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["544f54", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["545031", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["545032", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["545033", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["545034", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["545041", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["545042", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["545243", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["545244", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["54524b", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["545353", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["545431", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["545432", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["545433", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["545854", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["545858", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["545945", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["554649", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["554c54", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["574146", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["574152", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["574153", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["57434d", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["574350", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["575042", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["575858", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["574952", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"], ["55494e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.2.0 audio file"] ], "4944330300": [ ["41454e43", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["41504943", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["41535049", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["434f4d4d", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["434f4d52", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["454e4352", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["45515532", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["4554434f", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["47454f42", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["47524944", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["4c494e4b", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["4d434449", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["4d4c4c54", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["4f574e45", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["50524956", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["50434e54", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["504f504d", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["504f5353", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["52425546", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["52564132", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["52565242", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["5345454b", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["5349474e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["53594c54", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["53595443", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["55464944", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["55534552", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["55534c54", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["57434f4d", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["57434f50", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["574f4146", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["574f4152", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["574f4153", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["574f5253", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["57504159", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["57505542", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["57585858", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54594552", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54444154", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54494d45", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["544f5259", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54414c42", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["5442504d", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54434f4d", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54434f4e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54434f50", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["5444454e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54444c59", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54444f52", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54445243", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["5444524c", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54445447", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54454e43", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54455854", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54464c54", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["5449504c", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54495431", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54495432", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54495433", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["544b4559", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["544c414e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["544c454e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["544d434c", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["544d4544", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["544d4f4f", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["544f414c", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["544f464e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["544f4c59", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["544f5045", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["544f574e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54504531", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54504532", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54504533", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54504534", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54504f53", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["5450524f", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54505542", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["5452434b", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["5452534e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["5452534f", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54534f41", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54534f43", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54534f50", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54534f54", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54535243", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54535345", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54535354", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["54585858", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["574146", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["574952", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["575959", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"], ["544147", -128, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.3.0 audio file"] ], "4944330400": [ ["41454e43", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["41504943", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["41535049", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["434f4d4d", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["434f4d52", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["454e4352", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["45515532", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["4554434f", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["47454f42", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["47524944", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["4c494e4b", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["4d434449", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["4d4c4c54", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["4f574e45", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["50524956", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["50434e54", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["504f504d", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["504f5353", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["52425546", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["52564132", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["52565242", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["5345454b", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["5349474e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["53594c54", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["53595443", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["55464944", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["55534552", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["55534c54", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["57434f4d", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["57434f50", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["574f4146", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["574f4152", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["574f4153", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["574f5253", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["57504159", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["57505542", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["57585858", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54594552", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54444154", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54494d45", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["544f5259", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54414c42", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["5442504d", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54434f4d", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54434f4e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54434f50", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["5444454e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54444c59", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54444f52", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54445243", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["5444524c", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54445447", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54454e43", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54455854", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54464c54", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["5449504c", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54495431", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54495432", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54495433", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["544b4559", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["544c414e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["544c454e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["544d434c", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["544d4544", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["544d4f4f", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["544f414c", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["544f464e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["544f4c59", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["544f5045", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["544f574e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54504531", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54504532", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54504533", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54504534", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54504f53", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["5450524f", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54505542", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["5452434b", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["5452534e", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["5452534f", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54534f41", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54534f43", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54534f50", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54534f54", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54535243", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54535345", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54535354", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["54585858", 10, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"], ["544147", -128, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) ID3v2.4.0 audio file"] ], "01da" : [ ["00010001", 2, ".rgb", "image/x-rgb", "Silicon Graphics RGB Bitmap (Uncompressed, 1bpc, single row)"], ["01010001", 2, ".rgb", "image/x-rgb", "Silicon Graphics RGB Bitmap (RLE compressed, 1bpc, single row)"], ["00020001", 2, ".rgb", "image/x-rgb", "Silicon Graphics RGB Bitmap (Uncompressed, 2bpc, single row)"], ["01020001", 2, ".rgb", "image/x-rgb", "Silicon Graphics RGB Bitmap (RLE compressed, 2bpc, single row)"], ["00010002", 2, ".rgb", "image/x-rgb", "Silicon Graphics RGB Bitmap (Uncompressed, 1bpc, 2D Image)"], ["01010002", 2, ".rgb", "image/x-rgb", "Silicon Graphics RGB Bitmap (RLE compressed, 1bpc, 2D Image)"], ["00020002", 2, ".rgb", "image/x-rgb", "Silicon Graphics RGB Bitmap (Uncompressed, 2bpc, 2D Image)"], ["01020002", 2, ".rgb", "image/x-rgb", "Silicon Graphics RGB Bitmap (RLE compressed, 2bpc, Multiple 2D Images)"], ["00010003", 2, ".rgb", "image/x-rgb", "Silicon Graphics RGB Bitmap (Uncompressed, 1bpc, Multiple 2D Images)"], ["01010003", 2, ".rgb", "image/x-rgb", "Silicon Graphics RGB Bitmap (RLE compressed, 1bpc, Multiple 2D Images)"], ["00020003", 2, ".rgb", "image/x-rgb", "Silicon Graphics RGB Bitmap (Uncompressed, 2bpc, Multiple 2D Images)"], ["01020003", 2, ".rgb", "image/x-rgb", "Silicon Graphics RGB Bitmap (RLE compressed, 2bpc, Multiple 2D Images)"] ], "59a66a95" : [ ["00000000", 22, ".sun", "image/x-sun-raster", "Sun raster image (Old, No color map)"], ["00010000", 22, ".sun", "image/x-sun-raster", "Sun raster image (Standard, No color map)"], ["00020000", 22, ".sun", "image/x-sun-raster", "Sun raster image (Byte-Encoded, No color map)"], ["00030000", 22, ".sun", "image/x-sun-raster", "Sun raster image (RGB format, No color map)"], ["00040000", 22, ".sun", "image/x-sun-raster", "Sun raster image (TIFF format, No color map)"], ["00050000", 22, ".sun", "image/x-sun-raster", "Sun raster image (IFF format, No color map)"], ["FFFF0000", 22, ".sun", "image/x-sun-raster", "Sun raster image (Experimental, No color map)"], ["00000001", 22, ".sun", "image/x-sun-raster", "Sun raster image (Old, RGB color map)"], ["00010001", 22, ".sun", "image/x-sun-raster", "Sun raster image (Standard, RGB color map)"], ["00020001", 22, ".sun", "image/x-sun-raster", "Sun raster image (Byte-Encoded, RGB color map)"], ["00030001", 22, ".sun", "image/x-sun-raster", "Sun raster image (RGB format, RGB color map)"], ["00040001", 22, ".sun", "image/x-sun-raster", "Sun raster image (TIFF format, RGB color map)"], ["00050001", 22, ".sun", "image/x-sun-raster", "Sun raster image (IFF format, RGB color map)"], ["FFFF0001", 22, ".sun", "image/x-sun-raster", "Sun raster image (Experimental, RGB color map)"], ["00000002", 22, ".sun", "image/x-sun-raster", "Sun raster image (Old, RAW color map)"], ["00010002", 22, ".sun", "image/x-sun-raster", "Sun raster image (Standard, RAW color map)"], ["00020002", 22, ".sun", "image/x-sun-raster", "Sun raster image (Byte-Encoded, RAW color map)"], ["00030002", 22, ".sun", "image/x-sun-raster", "Sun raster image (RGB format, RAW color map)"], ["00040002", 22, ".sun", "image/x-sun-raster", "Sun raster image (TIFF format, RAW color map)"], ["00050002", 22, ".sun", "image/x-sun-raster", "Sun raster image (IFF format, RAW color map)"], ["FFFF0002", 22, ".sun", "image/x-sun-raster", "Sun raster image (Experimental, RAW color map)"] ], "716f6966" : [ ["0300", 12, ".qoi", "", "Quite OK image (RGB, sRGB with linear alpha)"], ["0301", 12, ".qoi", "", "Quite OK image (RGB, All channels alpha)"], ["0400", 12, ".qoi", "", "Quite OK image (RGBA, sRGB with linear alpha)"], ["0401", 12, ".qoi", "", "Quite OK image (RGBA, All channels alpha)"] ], "5031" : [ ["20", 2, ".pbm", "image/x-portable-bitmap", "PBM image (Ascii)"], ["0a", 2, ".pbm", "image/x-portable-bitmap", "PBM image (Ascii)"], ["0d", 2, ".pbm", "image/x-portable-bitmap", "PBM image (Ascii)"], ["09", 2, ".pbm", "image/x-portable-bitmap", "PBM image (Ascii)"], ["2023", 2, ".pbm", "image/x-portable-bitmap", "PBM image (Ascii)"], ["0a23", 2, ".pbm", "image/x-portable-bitmap", "PBM image (Ascii)"], ["0d23", 2, ".pbm", "image/x-portable-bitmap", "PBM image (Ascii)"], ["0923", 2, ".pbm", "image/x-portable-bitmap", "PBM image (Ascii)"] ], "5034" : [ ["20", 2, ".pbm", "image/x-portable-bitmap", "PBM image (Binary)"], ["0a", 2, ".pbm", "image/x-portable-bitmap", "PBM image (Binary)"], ["0d", 2, ".pbm", "image/x-portable-bitmap", "PBM image (Binary)"], ["09", 2, ".pbm", "image/x-portable-bitmap", "PBM image (Binary)"], ["2023", 2, ".pbm", "image/x-portable-bitmap", "PBM image (Binary)"], ["0a23", 2, ".pbm", "image/x-portable-bitmap", "PBM image (Binary)"], ["0d23", 2, ".pbm", "image/x-portable-bitmap", "PBM image (Binary)"], ["0923", 2, ".pbm", "image/x-portable-bitmap", "PBM image (Binary)"] ], "5032" : [ ["20", 2, ".pgm", "image/x-portable-graymap", "PGM image (Ascii)"], ["0a", 2, ".pgm", "image/x-portable-graymap", "PGM image (Ascii)"], ["0d", 2, ".pgm", "image/x-portable-graymap", "PGM image (Ascii)"], ["09", 2, ".pgm", "image/x-portable-graymap", "PGM image (Ascii)"], ["2023", 2, ".pgm", "image/x-portable-graymap", "PGM image (Ascii)"], ["0a23", 2, ".pgm", "image/x-portable-graymap", "PGM image (Ascii)"], ["0d23", 2, ".pgm", "image/x-portable-graymap", "PGM image (Ascii)"], ["0923", 2, ".pgm", "image/x-portable-graymap", "PGM image (Ascii)"] ], "5035" : [ ["20", 2, ".pgm", "image/x-portable-graymap", "PGM image (Binary)"], ["0a", 2, ".pgm", "image/x-portable-graymap", "PGM image (Binary)"], ["0d", 2, ".pgm", "image/x-portable-graymap", "PGM image (Binary)"], ["09", 2, ".pgm", "image/x-portable-graymap", "PGM image (Binary)"], ["2023", 2, ".pgm", "image/x-portable-graymap", "PGM image (Binary)"], ["0a23", 2, ".pgm", "image/x-portable-graymap", "PGM image (Binary)"], ["0d23", 2, ".pgm", "image/x-portable-graymap", "PGM image (Binary)"], ["0923", 2, ".pgm", "image/x-portable-graymap", "PGM image (Binary)"] ], "5033" : [ ["20", 2, ".ppm", "image/x-portable-pixmap", "PPM image (Ascii)"], ["0a", 2, ".ppm", "image/x-portable-pixmap", "PPM image (Ascii)"], ["0d", 2, ".ppm", "image/x-portable-pixmap", "PPM image (Ascii)"], ["09", 2, ".ppm", "image/x-portable-pixmap", "PPM image (Ascii)"], ["2023", 2, ".ppm", "image/x-portable-pixmap", "PPM image (Ascii)"], ["0a23", 2, ".ppm", "image/x-portable-pixmap", "PPM image (Ascii)"], ["0d23", 2, ".ppm", "image/x-portable-pixmap", "PPM image (Ascii)"], ["0923", 2, ".ppm", "image/x-portable-pixmap", "PPM image (Ascii)"] ], "5036" : [ ["20", 2, ".ppm", "image/x-portable-pixmap", "PPM image (Binary)"], ["0a", 2, ".ppm", "image/x-portable-pixmap", "PPM image (Binary)"], ["0d", 2, ".ppm", "image/x-portable-pixmap", "PPM image (Binary)"], ["09", 2, ".ppm", "image/x-portable-pixmap", "PPM image (Binary)"], ["2023", 2, ".ppm", "image/x-portable-pixmap", "PPM image (Binary)"], ["0a23", 2, ".ppm", "image/x-portable-pixmap", "PPM image (Binary)"], ["0d23", 2, ".ppm", "image/x-portable-pixmap", "PPM image (Binary)"], ["0923", 2, ".ppm", "image/x-portable-pixmap", "PPM image (Binary)"] ], "5046" : [ ["0a", 2, ".pfm", "", "Portable Float Map (Colour)"], ["0d", 2, ".pbm", "", "Portable Float Map (Colour)"] ], "5066" : [ ["0a", 2, ".pfm", "", "Portable Float Map (Greyscale)"], ["0d", 2, ".pfm", "", "Portable Float Map (Greyscale)"] ], "504634" : [ ["0a", 3, ".pfm", "", "Augmented Portable Float Map"], ["0d", 3, ".pfm", "", "Augmented Portable Float Map"] ], "5037" : [ ["0a", 2, ".pam", "image/x-portable-arbitrarymap", "Portable Arbitrary Map"], ["0d", 2, ".pam", "image/x-portable-arbitrarymap", "Portable Arbitrary Map"], ["0a5749445448", 2, ".pam", "image/x-portable-arbitrarymap", "Portable Arbitrary Map"], ["0d5749445448", 2, ".pam", "image/x-portable-arbitrarymap", "Portable Arbitrary Map"], ["0a484549474854", 2, ".pam", "image/x-portable-arbitrarymap", "Portable Arbitrary Map"], ["0d484549474854", 2, ".pam", "image/x-portable-arbitrarymap", "Portable Arbitrary Map"] ], "73696262" : [ ["72686c62", 8, ".uif", "", "MagicISO Disk Image (Encrypted)"] ], "49492a00" : [ ["435202", 8, ".cr2", "", "Canon Camera RAW 2 image"] ], "424f4f4b4d4f4249" : [ ["e98e0d0a", -4, ".mobi", "application/x-mobipocket-ebook", "Mobipocket eBook file"], ["e98e0d0a", -4, ".azw", "application/vnd.amazon.mobi8-ebook", "Amazon Kindle eBook file"], ["434f4e54424f554e44415259e98e0d0a", -16, ".azw3", "application/vnd.amazon.mobi8-ebook", "Amazon Kindle Format 8 eBook file (KF8 Dual MOBI/EPUB Format)"] ], "3f5f0300" : [ ["0000ffffffff", 6, ".hlp", "application/winhlp", "Windows Help file"], ["0000ffffffff", 6, ".gid", "", "Windows Help Global Index file"] ], "5041434b" : [ ["4944504f", 12, ".pak", "", "Quake archive file"], ["52494646", 12, ".pak", "", "Quake archive file"], ["49425350", 12, ".pak", "", "Quake archive file"] ], "28" : [ ["2e", -1, ".pickle", "", "Python Pickle file (Protocol 0)"] ], "7d71" : [ ["2e", -1, ".pickle", "", "Python Pickle file (Protocol 1)"] ], "8002" : [ ["2e", -1, ".pickle", "", "Python Pickle file (Protocol 2)"] ], "8003" : [ ["2e", -1, ".pickle", "", "Python Pickle file (Protocol 3)"] ], "8004" : [ ["2e", -1, ".pickle", "", "Python Pickle file (Protocol 4)"] ], "8005" : [ ["2e", -1, ".pickle", "", "Python Pickle file (Protocol 5)"] ], "464c5601" : [ ["04", 4, ".flv", "video/x-flv", "Adobe Flash video file (Audio only)"], ["01", 4, ".flv", "video/x-flv", "Adobe Flash video file (Video only)"], ["05", 4, ".flv", "video/x-flv", "Adobe Flash video file (Audio and Video)"] ], "4949bc01" : [ ["574d50484f544f00", 90, ".jxr", "image/jxr", "JPEG XR image"] ], "444f53" : [ ["00", 3, ".adf", "application/x-amiga-disk-format", "Amiga disk image (OFS)"], ["01", 3, ".adf", "application/x-amiga-disk-format", "Amiga disk image (FFS)"], ["02", 3, ".adf", "application/x-amiga-disk-format", "Amiga disk image (OFS International)"], ["03", 3, ".adf", "application/x-amiga-disk-format", "Amiga disk image (FFS International)"], ["04", 3, ".adf", "application/x-amiga-disk-format", "Amiga disk image (OFS International and Directory Cache)"], ["05", 3, ".adf", "application/x-amiga-disk-format", "Amiga disk image (FFS International and Directory Cache)"], ["06", 3, ".adf", "application/x-amiga-disk-format", "Amiga disk image (OFS Long Filename)"], ["07", 3, ".adf", "application/x-amiga-disk-format", "Amiga disk image (FFS Long Filename)"] ], "ffd0": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer Reserved/Illegal file"] ], "ffd1": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer Reserved/Illegal file"] ], "ffd6": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer III (MP3) file"] ], "ffd7": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer III (MP3) file"] ], "ffda": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer III (MP3) file"] ], "ffdb": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer III (MP3) file"] ], "ffde": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer III (MP3) file"] ], "ffdf": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer III (MP3) file"] ], "ffe0": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-2 Audio Layer Reserved/Illegal file"] ], "ffe1": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-2 Audio Layer Reserved/Illegal file"] ], "ffe2": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer III (MP3) file"] ], "ffe3": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer III (MP3) file"] ], "ffe4": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-2 Audio Layer III (MP3) file"] ], "ffe5": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-2 Audio Layer III (MP3) file"] ], "ffe6": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-2 Audio Layer III (MP3) file"] ], "ffe7": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-2 Audio Layer III (MP3) file"] ], "ffe8": [ ["544147", -128, ".mp2", "audio/mpeg", "MPEG-2 Audio Layer II (MP2) file"] ], "ffe9": [ ["544147", -128, ".mp2", "audio/mpeg", "MPEG-2 Audio Layer II (MP2) file"] ], "ffea": [ ["544147", -128, ".mp2", "audio/mpeg", "MPEG-2 Audio Layer II (MP2) file"] ], "ffeb": [ ["544147", -128, ".mp2", "audio/mpeg", "MPEG-2 Audio Layer II (MP2) file"] ], "ffec": [ ["544147", -128, ".mp2", "audio/mpeg", "MPEG-2 Audio Layer II (MP2) file"] ], "ffed": [ ["544147", -128, ".mp2", "audio/mpeg", "MPEG-2 Audio Layer II (MP2) file"] ], "ffee": [ ["544147", -128, ".mp1", "audio/mpeg", "MPEG-2 Audio Layer I (MP1) file"] ], "ffef": [ ["544147", -128, ".mp1", "audio/mpeg", "MPEG-2 Audio Layer I (MP1) file"] ], "fff0": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer Reserved/Illegal file"] ], "fff1": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer Reserved/Illegal file"] ], "fff2": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) file"] ], "fff3": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) file"] ], "fff4": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) file"] ], "fff5": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) file"] ], "fff6": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) file"] ], "fff7": [ ["544147", -128, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) file"] ], "fff8": [ ["544147", -128, ".mp2", "audio/mpeg", "MPEG-1 Audio Layer II (MP2) file"] ], "fff9": [ ["544147", -128, ".mp2", "audio/mpeg", "MPEG-1 Audio Layer II (MP2) file"] ], "fffa": [ ["544147", -128, ".mp1", "audio/mpeg", "MPEG-1 Audio Layer I (MP1) file"] ], "fffb": [ ["544147", -128, ".mp1", "audio/mpeg", "MPEG-1 Audio Layer I (MP1) file"] ], "fffc": [ ["544147", -128, ".mp1", "audio/mpeg", "MPEG-1 Audio Layer I (MP1) file"] ], "fffd": [ ["544147", -128, ".mp1", "audio/mpeg", "MPEG-1 Audio Layer I (MP1) file"] ], "ffff": [ ["544147", -128, ".mp1", "audio/mpeg", "MPEG-1 Audio Layer I (MP1) file"] ] }, "footers": [ ["54525545564953494f4e2d5846494c452e00", -18, ".tga", "image/tga", "Truevision Targa Graphic file"], ["000001b7", -4, ".mpeg", "video/mpeg", "MPEG video file"], ["3c2f7376673e", -8, ".svg", "image/svg+xml", "Scalable Vector Graphics Image"], ["3c2f7376673e", -7, ".svg", "image/svg+xml", "Scalable Vector Graphics Image"], ["3c2f7376673e", -6, ".svg", "image/svg+xml", "Scalable Vector Graphics Image"], ["6b6f6c79", -512, ".dmg", "application/x-apple-diskimage", "MacOS X image file"], ["4e45524f", -8, ".nrg", "", "Nero Disk Image (Version 1)"], ["4e455235", -12, ".nrg", "", "Nero Disk Image (Version 2)"] ], "headers": [ ["0000", 0, ".sndr", "audio/x-sndr", "Macintosh SNDR Resource"], ["437265617469766520566f6963652046696c651a", 0, ".voc", "audio/x-voc", "Creative Voice File"], ["595556344d504547",0, ".y4m", "video/x-yuv4mpeg", "YUV4MPEG2 video file"], ["3c68746d6c", 0, ".html", "text/html", "HTML File"], ["424c5545", 0, ".bvr", "", "Blue Iris Video File"], ["2d2d2d2d2d424547494e20504b4353372d2d2d2d2d", 0, ".p7b", "", "PKCS 7 Certificate File" ], ["7b22", 0, ".json", "application/json", "JSON File"], ["7b", 0, ".json", "application/json", "JSON File"], ["50755454592d557365722d4b65792d46696c65", 0, ".ppk", "", "PuTTY User Key File"], ["2d2d2d2d20424547494e2053534832205055424c4943204b4559202d2d2d2d", 0, "", "", "SSH Public Key"], ["2d2d2d2d424547494e", 0, "", "", "Key or Cert File"], ["2d2d2d2d20424547494e", 0, "", "", "Key or Cert File"], ["30313233343536373839", 0, ".puremagic_multi_footer", "text/ascii", "TESTFILE"], ["ff0a", 0, ".jxl", "image/jxl", "JPEG XL image (Raw stream)"], ["0000000c4a584c200d0a870a", 0, ".jxl", "image/jxl", "JPEG XL image (ISOBMFF container)"], ["3c3f786d6c", 0, ".xml", "application/xml", "XML Document"], ["454c46", 1, ".AppImage", "application/x-iso9660-appimage", "AppImage application bundle"], ["4341434845204d414e4946455354", 0, ".manifest", "text/cache-manifest", "Web application cache manifest"], ["425a68", 0, ".tar.bz2", "application/x-bzip2", "bzip2 compressed archive"], ["64383a616e6e6f756e6365", 0, ".torrent", "application/x-bittorrent", "BitTorrent seed file"], ["504b5c3030335c303034", 0, ".fb2.zip", "application/x-zip-compressed-fb2", "Compressed FictionBook document"], ["3c3f786d6c", 0, ".docbook", "application/x-docbook+xml", "DocBook document"], ["302048454144", 0, ".gedcom", "application/x-gedcom", "GEDCOM family history"], ["5b4465736b746f7020416374696f6e", 0, ".kdelnk", "application/x-desktop", "desktop configuration file"], ["5b4b4445204465736b746f7020456e7472795d", 0, ".kdelnk", "application/x-desktop", "desktop configuration file"], ["2320436f6e6669672046696c65", 0, ".kdelnk", "application/x-desktop", "desktop configuration file"], ["23204b444520436f6e6669672046696c65", 0, ".kdelnk", "application/x-desktop", "desktop configuration file"], ["5c303031666370", 0, ".pcf.gz", "application/x-font-pcf", "PCF font"], ["5c3033375c323133", 0, ".karbon", "application/x-karbon", "Karbon14 drawing"], ["504b5c3030335c303034", 0, ".karbon", "application/x-karbon", "Karbon14 drawing"], ["517469506c6f74", 0, ".qti.gz", "application/x-qtiplot", "QtiPlot document"], ["4253444946463430", 0, ".bsdiff", "application/x-bsdiff", "binary differences between files"], ["42534449464e3430", 0, ".bsdiff", "application/x-bsdiff", "binary differences between files"], [ "7864672d6170705c7830305c7830315c7830305c7838395c786535", 0, ".xdgapp", "application/vnd.flatpak", "Flatpak application bundle" ], [ "666c617470616b5c7830305c7830315c7830305c7838395c786535", 0, ".xdgapp", "application/vnd.flatpak", "Flatpak application bundle" ], ["000100005374616e6461726420414345204442", 0, ".accdb", "application/msaccess", "Microsoft Access 2007 file"], ["62706c697374", 0, ".plist", "application/x-plist", "Binary Property list"], ["cafebabe", 0, ".class", "application/java", "Java bytecode"], ["4d52564e", 0, ".nvram", "", "VMware BIOS state file"], ["1f9d90", 0, ".tar.z", "", "Compressed tape archive"], ["1fa0", 0, ".tar.z", "", "Compressed tape archive"], ["424c454e444552", 0, ".blend", "application/x-blender", "Blender scene"], ["66747970336732", 4, ".3gpp2", "video/3gpp2", "3GPP2 multimedia file"], ["646966665c74", 0, ".patch", "text/x-patch", "differences between files"], ["6469666620", 0, ".patch", "text/x-patch", "differences between files"], ["2a2a2a5c74", 0, ".patch", "text/x-patch", "differences between files"], ["2a2a2a20", 0, ".patch", "text/x-patch", "differences between files"], ["3d3d3d20", 0, ".patch", "text/x-patch", "differences between files"], ["2d2d2d20", 0, ".patch", "text/x-patch", "differences between files"], ["4f6e6c7920696e5c74", 0, ".patch", "text/x-patch", "differences between files"], ["4f6e6c7920696e20", 0, ".patch", "text/x-patch", "differences between files"], ["436f6d6d6f6e207375626469726563746f726965733a20", 0, ".patch", "text/x-patch", "differences between files"], ["496e6465783a", 0, ".patch", "text/x-patch", "differences between files"], ["646f63756d656e74636c617373", 1, ".latex", "text/x-tex", "TeX document"], ["4d4f5649", 0, ".movie", "video/x-sgi-movie", "SGI video"], ["425a68", 0, ".bzip2", "application/x-bzip2", "BZIP2 Compressed Archive file"], ["664c614300000022", 0, ".flac", "audio/flac", "Free Lossless Audio Codec file"], ["434f5744", 0, ".vmdk", "application/octet-stream", "VMware Sparse Extent Image file"], ["23204469736b2044657363726970746f7246696c65", 0, ".vmdk", "application/octet-stream", "VMware Image Descriptor File"], ["4b444d56", 0, ".vmdk", "application/octet-stream", "VMware Virtual Single Disk file"], ["e310000100000000", 0, ".info", "", "Amiga icon"], ["5468697320697320", 0, ".info", "", "GNU Info Reader file"], ["456c6646696c6500", 0, ".evtx", "", "Windows Vista event log"], ["4d444d5093a7", 0, ".hdmp", "", "Windows dump file"], ["464f524d", 0, ".aiff", "audio/aiff", "Audio Interchange File"], ["2e524d46", 0, ".rmvb", "", "RealMedia streaming media"], [ "504b0304", 0, ".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "MS Office Open XML Format Document" ], [ "504b0304", 0, ".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation", "MS Office Open XML Format Document" ], [ "504b0304", 0, ".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "MS Office Open XML Format Document" ], [ "504b0304", 0, ".xlsb", "application/vnd.ms-excel.sheet.binary.macroenabled.12", "Microsoft Excel - Binary Workbook" ], [ "504b0304", 0, ".xltm", "application/vnd.ms-excel.template.macroenabled.12", "Microsoft Excel - Macro-Enabled Template File" ], [ "504b0304", 0, ".xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template", "Microsoft Office - OOXML - Spreadsheet Template" ], ["504b0304", 0, ".xlam", "application/vnd.ms-excel.addin.macroenabled.12", "Microsoft Excel - Add-In File"], [ "504b0304", 0, ".docm", "application/vnd.ms-word.document.macroEnabled.12", "Microsoft Word - Macro-Enabled Document" ], [ "504b0304", 0, ".dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template", "Microsoft Office - OOXML - Word Document Template" ], [ "504b0304", 0, ".dotm", "application/vnd.ms-word.template.macroenabled.12", "Microsoft Word - Macro-Enabled Template" ], [ "504b0304", 0, ".pptm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12", "Microsoft PowerPoint - Macro-Enabled Presentation File" ], [ "504b0304", 0, ".potx", "application/vnd.openxmlformats-officedocument.presentationml.template", "Microsoft Office - OOXML - Presentation Template" ], [ "504b0304", 0, ".potm", "application/vnd.ms-powerpoint.template.macroenabled.12", "Microsoft PowerPoint - Macro-Enabled Template File" ], [ "504b0304", 0, ".xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12", "Microsoft Excel - Macro-Enabled Workbook" ], ["7a626578", 0, ".info", "", "ZoomBrowser Image Index"], ["425a68", 0, ".tbz2", "application/x-bzip2", "bzip2 compressed archive"], ["ffd8ff", 0, ".jfif", "image/jpeg", "JPEG|EXIF|SPIFF images"], ["514649", 0, ".qemu", "", "Qcow Disk Image"], ["504b5c3030335c303034", 0, ".epub", "application/epub+zip", "electronic book document"], [ "6d696d65747970656170706c69636174696f6e2f657075622b7a6970", 30, ".epub", "application/epub+zip", "electronic book document" ], ["46726f6d20", 0, ".mbox", "application/mbox", "mailbox file"], ["232552414d4c20", 0, ".raml", "application/raml+yaml", "RAML document"], ["7a1a2010", 0, ".sisx", "x-epoc/x-sisx-app", "SISX package"], ["24464c32", 0, ".zsav", "application/x-spss-sav", "SPSS Data File"], ["24464c33", 0, ".zsav", "application/x-spss-sav", "SPSS Data File"], ["303730373031", 0, ".cpio", "application/x-cpio", "CPIO archive"], ["303730373032", 0, ".cpio", "application/x-cpio", "CPIO archive"], ["213c617263683e", 0, ".udeb", "application/vnd.debian.binary-package", "Debian package"], ["774f4646", 0, ".woff", "application/font-woff", "WOFF font"], ["cafed00d", 0, ".pack", "application/x-java-pack200", "Pack200 Java archive"], ["5c3033375c323133", 0, ".chrt", "application/x-kchart", "KChart chart"], ["504b5c3030335c303034", 0, ".chrt", "application/x-kchart", "KChart chart"], ["1a45dfa3", 0, ".webm", "video/webm", "WebM video"], ["4f676753", 0, ".opus", "audio/ogg", "Ogg Audio"], ["4f676753", 0, ".opus", "audio/x-opus+ogg", "Opus audio"], ["4f6c656f", 31, ".oleo", "application/x-oleo", "GNU Oleo spreadsheet"], ["50415232", 0, ".par2", "application/x-par2", "Parchive archive"], ["4d4d4d44", 0, ".smaf", "application/x-smaf", "SMAF audio"], ["50534944", 0, ".psid", "audio/prs.sid", "Commodore 64 audio"], ["664c6143", 0, ".flac", "audio/flac", "FLAC audio"], ["234558544d3355", 0, ".m3u8", "application/vnd.apple.mpegurl", "HTTP Live Streaming playlist"], ["2521", 0, ".epsf", "image/x-eps", "EPS image"], ["5c3030342521", 0, ".epsf", "image/x-eps", "EPS image"], ["53494d504c4520203d", 0, ".fits", "image/fits", "FITS document"], ["69636e73", 0, ".icns", "image/x-icns", "MacOS X icon"], ["53202020202020315c783061", 72, ".iges", "model/iges", "IGES document"], ["53303030303030315c783061", 72, ".iges", "model/iges", "IGES document"], ["424547494e3a5643415244", 0, ".gcrd", "text/vcard", "electronic business card"], ["626567696e3a7663617264", 0, ".gcrd", "text/vcard", "electronic business card"], ["646e3a20636e3d", 0, ".ldif", "text/x-ldif", "LDIF address book"], ["646e3a206d61696c3d", 0, ".ldif", "text/x-ldif", "LDIF address book"], ["23212f62696e2f707974686f6e", 0, ".wsgi", "text/x-python", "Python script"], ["2321202f62696e2f707974686f6e", 0, ".wsgi", "text/x-python", "Python script"], ["6576616c205c2265786563202f62696e2f707974686f6e", 0, ".wsgi", "text/x-python", "Python script"], ["23212f7573722f62696e2f707974686f6e", 0, ".wsgi", "text/x-python", "Python script"], ["2321202f7573722f62696e2f707974686f6e", 0, ".wsgi", "text/x-python", "Python script"], ["6576616c205c2265786563202f7573722f62696e2f707974686f6e", 0, ".wsgi", "text/x-python", "Python script"], ["23212f7573722f6c6f63616c2f62696e2f707974686f6e", 0, ".wsgi", "text/x-python", "Python script"], ["2321202f7573722f6c6f63616c2f62696e2f707974686f6e", 0, ".wsgi", "text/x-python", "Python script"], ["6576616c205c2265786563202f7573722f6c6f63616c2f62696e2f707974686f6e", 0, ".wsgi", "text/x-python", "Python script"], ["53756d6d6172793a20", 0, ".spec", "text/x-rpm-spec", "RPM spec file"], ["25646566696e6520", 0, ".spec", "text/x-rpm-spec", "RPM spec file"], ["667479707174", 4, ".qtvr", "video/quicktime", "QuickTime video"], ["41564630", 0, ".divx", "video/x-msvideo", "AVI video"], ["4954382e37", 0, ".it87", "application/x-it87", "IT 8.7 color calibration file"], ["43434d58", 0, ".ccmx", "application/x-ccmx", "CCMX color correction file"], ["73717368", 0, ".sqsh", "application/vnd.squashfs", "Squashfs filesystem"], ["68737173", 0, ".sqsh", "application/vnd.squashfs", "Squashfs filesystem"], ["0000002066747970336770", 0, ".3g2", "video/3gpp2", "3GPP2 3rd Generation Partnership Project video file"], ["0000002066747970336770", 0, ".3gpp", "video/3gpp2", "3GPP2 3rd Generation Partnership Project video file"], ["492049", 0, ".tiff", "image/tiff", "Tagged Image File Format file"], ["49492a00", 0, ".tiff", "image/tiff", "Tagged Image File Format file (Intel)"], ["4d4d002a", 0, ".tiff", "image/tiff", "Tagged Image File Format file (Motorola)"], ["4d4d002b", 0, ".tiff", "image/tiff", "BigTIFF files, Tagged Image File Format file larger than 4 GB"], ["ffd8ff", 0, ".jpeg", "image/jpeg", "JPEG/JFIF graphics file"], ["000000146674797069736f6d", 0, ".mp4", "video/mp4", "MPEG-4 video file"], ["0000001c667479704d534e56012900464d534e566d703432", 0, ".mp4", "video/mp4", "MPEG-4 video file"], ["000000146674797071742020", 0, ".mov", "video/quicktime", "QuickTime movie file"], ["000000186674797033677035", 0, ".mp4", "video/mp4", "MPEG-4 video files"], ["00000018667479706d703432", 0, ".mp4", "video/mp4", "MPEG-4 video file"], ["3026b2758e66cf11a6d900aa0062ce6c", 0, ".wmv", "video/x-ms-wmv", "Microsoft Windows Media Video File"], ["464c5601", 0, ".flv", "video/x-flv", "Adobe flash video file"], ["415649204c495354", 8, ".avi", "video/x-msvideo", "Windows Audio Video Interleave file"], ["2e524543", 0, ".ivr", "i-world/i-vrml", "RealPlayer video file"], ["6d6f6f76", 4, ".mov", "video/quicktime", "QuickTime movie file"], ["3026b2758e66cf11a6d900aa0062ce6c", 0, ".wma", "audio/x-ms-wma", "Microsoft Windows Media Audio file"], ["494433", 0, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) audio file"], ["4944330200", 0, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III ID3v2.2.0 (MP3) audio file"], ["4944330300", 0, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III ID3v2.3.0 (MP3) audio file"], ["4944330400", 0, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III ID3v2.4.0 (MP3) audio file"], ["ffd0", 0, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer Reserved/Illegal"], ["ffd1", 0, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer Reserved/Illegal"], ["ffd6", 0, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer III (MP3) file"], ["ffd7", 0, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer III (MP3) file"], ["ffda", 0, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer III (MP3) file"], ["ffdb", 0, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer III (MP3) file"], ["ffde", 0, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer III (MP3) file"], ["ffdf", 0, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer III (MP3) file"], ["ffe0", 0, ".mp3", "audio/mpeg", "MPEG-2 Audio Layer Reserved/Illegal"], ["ffe1", 0, ".mp3", "audio/mpeg", "MPEG-2 Audio Layer Reserved/Illegal"], ["ffe2", 0, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer III (MP3) file"], ["ffe3", 0, ".mp3", "audio/mpeg", "MPEG-2.5 Audio Layer III (MP3) file"], ["ffe4", 0, ".mp3", "audio/mpeg", "MPEG-2 Audio Layer III (MP3) file"], ["ffe5", 0, ".mp3", "audio/mpeg", "MPEG-2 Audio Layer III (MP3) file"], ["ffe6", 0, ".mp3", "audio/mpeg", "MPEG-2 Audio Layer III (MP3) file"], ["ffe7", 0, ".mp3", "audio/mpeg", "MPEG-2 Audio Layer III (MP3) file"], ["ffe8", 0, ".mp2", "audio/mpeg", "MPEG-2 Audio Layer II (MP2) file"], ["ffe9", 0, ".mp2", "audio/mpeg", "MPEG-2 Audio Layer II (MP2) file"], ["ffea", 0, ".mp2", "audio/mpeg", "MPEG-2 Audio Layer II (MP2) file"], ["ffeb", 0, ".mp2", "audio/mpeg", "MPEG-2 Audio Layer II (MP2) file"], ["ffec", 0, ".mp2", "audio/mpeg", "MPEG-2 Audio Layer II (MP2) file"], ["ffed", 0, ".mp2", "audio/mpeg", "MPEG-2 Audio Layer II (MP2) file"], ["ffee", 0, ".mp1", "audio/mpeg", "MPEG-2 Audio Layer I (MP1) file"], ["ffef", 0, ".mp1", "audio/mpeg", "MPEG-2 Audio Layer I (MP1) file"], ["fff0", 0, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer Reserved/Illegal"], ["fff1", 0, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer Reserved/Illegal"], ["fff2", 0, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) file"], ["fff3", 0, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) file"], ["fff4", 0, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) file"], ["fff5", 0, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) file"], ["fff6", 0, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) file"], ["fff7", 0, ".mp3", "audio/mpeg", "MPEG-1 Audio Layer III (MP3) file"], ["fff8", 0, ".mp2", "audio/mpeg", "MPEG-1 Audio Layer II (MP2) file"], ["fff9", 0, ".mp2", "audio/mpeg", "MPEG-1 Audio Layer II (MP2) file"], ["fffa", 0, ".mp1", "audio/mpeg", "MPEG-1 Audio Layer I (MP1) file"], ["fffb", 0, ".mp1", "audio/mpeg", "MPEG-1 Audio Layer I (MP1) file"], ["fffc", 0, ".mp1", "audio/mpeg", "MPEG-1 Audio Layer I (MP1) file"], ["fffd", 0, ".mp1", "audio/mpeg", "MPEG-1 Audio Layer I (MP1) file"], ["ffff", 0, ".mp1", "audio/mpeg", "MPEG-1 Audio Layer I (MP1) file"], ["4f67675300020000000000000000", 0, ".ogg", "application/ogg", "Ogg Vorbis audio file"], ["57415645666d7420", 8, ".wav", "audio/x-wav", "Windows audio file "], ["464f524d", 0, ".aif", "audio/x-aiff", "Audio Interchange File"], ["fff94c80", 0, ".aac", "audio/aac", "AAC audio file"], ["474946383761", 0, ".gif", "image/gif", "Graphics interchange format file (GIF87a)"], ["474946383961", 0, ".gif", "image/gif", "Graphics interchange format file (GIF89a)"], ["00000100", 0, ".ico", "image/x-icon", "Icon Image file"], ["0100000001", 0, ".pic", "image/x-pict", "PICT Image file"], ["424d", 0, ".bmp", "image/x-ms-bmp", "Microsoft Windows Bitmap image"], ["4241", 0, ".bga", "", "OS/2 struct bitmap array"], ["4349", 0, ".ico", "", "OS/2 struct color icon"], ["4350", 0, ".cp", "", "OS/2 const color pointer"], ["4943", 0, ".ico", "", "OS/2 struct icon"], ["5054", 0, ".pt", "", "OS/2 pointer"], ["38425053", 0, ".psd", "image/vnd.adobe.photoshop", "Photoshop Image file"], ["89504e470d0a1a0a", 0, ".png", "image/png", "Portable Network Graphics file"], ["67696d702078636620", 0, ".xcf", "image/x-xcf", "XCF Gimp Image file"], ["eca5c100", 512, ".doc", "application/msword", "Microsoft Office Word Document file"], ["006e1ef0", 512, ".ppt", "application/vnd.ms-powerpoint", "Microsoft Office PowerPoint Presentation file"], ["0f00e803", 512, ".ppt", "application/vnd.ms-powerpoint", "Microsoft Office PowerPoint Presentation file"], ["000100004d534953414d204461746162617365", 0, ".mny", "application/x-msmoney", "Microsoft Money file"], ["000100005374616e64617264204a6574204442", 0, ".mdb", "application/x-msaccess", "Microsoft Access file"], ["25504446", 0, ".pdf", "application/pdf", "Adobe Portable Document Format file"], ["0d0a25504446", 0, ".pdf", "application/pdf", "Adobe Portable Document Format file"], ["a0461df0", 512, ".ppt", "application/vnd.ms-powerpoint", "Microsoft Office PowerPoint Presentation file"], ["cf11e0a1b11ae100", 0, ".doc", "application/msword", "Perfect Office Document file"], ["d0cf11e0a1b11ae1", 0, ".doc", "application/msword", "Microsoft Office Document file"], ["fdffffff", 512, ".ppt", "application/vnd.ms-powerpoint", "Microsoft Office PowerPoint presentation subheader"], ["1a0000040000", 0, ".nsf", "application/vnd.lotus-notes", "Lotus Notes database"], ["0000020006040600080000000000", 0, ".wk1", "application/vnd.lotus-1-2-3", "Lotus 1-2-3 spreadsheet (v1) file"], ["00001a000010040000000000", 0, ".wk3", "application/vnd.lotus-1-2-3", "Lotus 1-2-3 spreadsheet (v3) file"], ["00001a000210040000000000", 0, ".wk5", "application/vnd.lotus-1-2-3", "Lotus 1-2-3 spreadsheet (v4 or v5) file"], ["00001a00051004", 0, ".123", "application/vnd.lotus-1-2-3", "Lotus 1-2-3 spreadsheet (v9) file"], ["00ffffffffffffffffffff0000020001", 0, ".mdf", "application/octet-stream", "Alcohol 120% Virtual CD image"], ["435753", 0, ".swf", "application/x-shockwave-flash", "Adobe Shockwave Flash file"], ["465753", 0, ".swf", "application/x-shockwave-flash", "Macromedia Shockwave Flash file"], ["1a0b", 0, ".pak", "application/pak", "Compressed archive file (often associated with Quake Engine games)"], ["7573746172", 257, ".tar", "application/x-tar", "Tape Archive file"], ["7573746172", 257, ".cbt", "application/x-tar", "Comic Book in TAR Format"], ["2d6c68", 2, ".lzh", "application/octet-stream", "Compressed archive file"], ["504b0304", 0, ".zip", "application/zip", "PKZIP Archive file"], ["504b030414000100630000000000", 0, ".zip", "application/zip", "ZLock Pro Encrypted ZIP file"], ["504b4c495445", 30, ".zip", "application/zip", "PKLITE Compressed ZIP Archive file"], ["504b537058", 526, ".zip", "application/zip", "Self-Extracting Executable PKSFX Compressed file"], ["526172211a0700", 0, ".rar", "application/x-rar-compressed", "WinRAR Compressed Archive file"], ["4d534346", 0, ".cab", "application/vnd.ms-cab-compressed", "Microsoft cabinet file"], ["49536328", 0, ".cab", " application/vnd.ms-cab-compressed", "Install Shield v5.x or 6.x compressed file"], ["4d5a", 0, ".exe", "application/octet-stream", "Windows Executable file"], ["504b0304140008000800", 0, ".jar", "application/java-archive", "Java Archive file"], ["5f27a889", 0, ".jar", "application/java-archive", "Jar Archive file"], ["edabeedb", 0, ".rpm", "application/x-rpm", "RedHat Package Manager file"], ["fffe", 0, ".txt", "text/plain", "UTF-16 LE text file"], ["fffe23006c0069006e00650020003100", 0, ".mof", "text/plain", "Windows MSinfo file"], ["ffffffff", 0, ".sys", "text/plain", "DOS system driver"], [ "3c3f786d6c2076657273696f6e3d22312e30223f3e0d0a3c4d4d435f436f6e736f6c6546696c6520436f6e736f6c6556657273696f6e3d22", 0, ".msc", "", "MMC Snap-in Control file" ], [ "4d6963726f736f66742057696e646f7773204d6564696120506c61796572202d2d20", 84, ".wpl", "", "Windows Media Player playlist" ], ["4d6963726f736f66742056697375616c", 0, ".sln", "", "Visual Studio .NET file"], ["4d6963726f736f667420432f432b2b20", 0, ".pdb", "", "MS C++ debugging symbols file"], ["4d5a90000300000004000000ffff", 0, ".zap", "", "ZoneAlam data file"], ["00000020667479704d3441", 0, ".m4a", "", "Apple audio and video files"], ["40404020000040404040", 32, ".enl", "", "EndNote Library File"], ["3e000300feff090006", 24, ".wb3", "", "Quatro Pro for Windows 7.0"], ["2a2a2a2020496e73", 0, ".log", "text/plain", "Symantec Wise Installer log"], ["0e4e65726f49534f", 0, ".nri", "", "Nero CD compilation"], ["504750644d41494e", 0, ".pgd", "", "PGP disk image"], ["0300000041505052", 0, ".adx", "", "Approach index file"], ["414f4c564d313030", 0, ".org", "", "AOL personal file cabinet"], ["414f4c564d313030", 0, ".pfc", "", "AOL personal file cabinet"], ["300000004c664c65", 0, ".evt", "", "Windows Event Viewer file"], ["d0cf11e0a1b11ae1", 0, ".spo", "", "SPSS output file"], ["001e849000000000", 0, ".snm", "", "Netscape Communicator (v4) mail folder"], ["ff00020004040554", 0, ".wks", "application/vnd.ms-works", "Microsoft Works spreadsheet (Version 1-5)"], ["0000020004040554", 0, ".wks", "application/vnd.ms-works", "Microsoft Works spreadsheet (Version 1-5)"], ["d0cf11e0a1b11ae1", 0, ".opt", "", "Developer Studio File Options file"], ["3026b2758e66cf11", 0, ".wmv", "video/x-ms-wmv", "Windows Media Audio|Video File"], ["3026b2758e66cf11", 0, ".asf", "video/x-ms-asf", "Windows Media Audio|Video File"], ["3026b2758e66cf11", 0, ".wma", "", "Windows Media Audio|Video File"], ["4c00000001140200", 0, ".lnk", "", "Windows shortcut file"], ["fdffffff43000000", 512, ".ppt", "application/mspowerpoint", "PowerPoint presentation subheader"], ["5b47656e6572616c", 0, ".ecf", "", "MS Exchange configuration file"], ["4d2d5720506f636b", 0, ".pdb", "", "Merriam-Webster Pocket Dictionary"], ["4d535f564f494345", 0, ".cdr", "", "Sony Compressed Voice File"], ["4d535f564f494345", 0, ".dvf", "", "Sony Compressed Voice File"], ["4d535f564f494345", 0, ".msv", "", "Sony Compressed Voice File"], ["414f4c2046656564", 0, ".bag", "", "AOL and AIM buddy list"], ["53494554524f4e49", 0, ".cpi", "", "Sietronics CPI XRD document"], ["5157205665722e20", 0, ".abd", "", "Quicken data file"], ["5157205665722e20", 0, ".qsd", "", "Quicken data file"], ["0000000c6a502020", 0, ".jp2", "image/jpeg", "JPEG2000 image files"], ["496e6e6f20536574", 0, ".dat", "", "Inno Setup Uninstall Log"], ["49544f4c49544c53", 0, ".lit", "application/x-ms-reader", "MS Reader eBook"], ["424547494e3a5643", 0, ".vcf", "", "vCard"], ["0908100000060500", 512, ".xls", "application/excel", "Excel spreadsheet subheader"], ["464158434f564552", 0, ".cpe", "", "MS Fax Cover Sheet"], ["4d53465402000100", 0, ".tlb", "", "OLE|SPSS|Visual C++ library file"], ["454e545259564344", 0, ".vcd", "application/x-cdlink", "VideoVCD|VCDImager file"], ["fdffffff1c000000", 512, ".ppt", "application/mspowerpoint", "PowerPoint presentation subheader"], ["d0cf11e0a1b11ae1", 0, ".rvt", "", "Revit Project file"], ["74424d504b6e5772", 60, ".prc", "", "PathWay Map file"], ["56455253494f4e20", 0, ".ctl", "", "Visual Basic User-defined Control file"], ["5374756666497420", 0, ".sit", "application/x-sit", "StuffIt compressed archive"], ["fdffffff0e000000", 512, ".ppt", "application/mspowerpoint", "PowerPoint presentation subheader"], ["d0cf11e0a1b11ae1", 0, ".vsd", "application/x-visio", "Visio file"], ["d0cf11e0a1b11ae1", 0, ".msi", "", "Microsoft Installer package"], ["233f52414449414e", 0, ".hdr", "", "Radiance High Dynamic Range image file"], ["636f6e6563746978", 0, ".vhd", "", "Virtual PC HD image"], ["455646090d0aff00", 0, ".e01", "", "Expert Witness Compression Format"], ["49491a0000004845", 0, ".crw", "", "Canon RAW file"], ["6d6174726f736b61", 24, ".mkv", "video/x-matroska", "Matroska stream file"], ["aced000573720012", 0, ".pdb", "", "BGBlitz position database file"], ["4c5646090d0aff00", 0, ".e01", "", "Logical File Evidence Format"], ["6375736800000002", 0, ".csh", "application/x-csh", "Photoshop Custom Shape"], ["d0cf11e0a1b11ae1", 0, ".pub", "", "MS Publisher file"], ["504b030414000800", 0, ".jar", "application/java-archive", "Java archive"], ["ff4b455942202020", 0, ".sys", "", "Keyboard driver file"], ["504b030414000100", 0, ".zip", "application/zip", "ZLock Pro encrypted ZIP"], ["4350543746494c45", 0, ".cpt", "application/x-cpt", "Corel Photopaint file"], ["0000020006040600", 0, ".wk1", "application/x-123", "Lotus 1-2-3 (v1)"], ["52657475726e2d50", 0, ".eml", "", "Generic e-mail"], ["fffe23006c006900", 0, ".mof", "", "MSinfo file"], ["3c21646f63747970", 0, ".dci", "", "AOL HTML mail"], ["d0cf11e0a1b11ae1", 0, ".mtw", "", "Minitab data file"], ["737263646f636964", 0, ".cal", "", "CALS raster bitmap"], ["2854686973206669", 0, ".hqx", "application/binhex", "BinHex 4 Compressed Archive"], ["436c69656e742055", 0, ".dat", "", "IE History file"], ["43232b44a4434da5", 0, ".rtd", "", "RagTime document"], ["4d5a900003000000", 0, ".flt", "", "Audition graphic filter"], ["53514c4f434f4e56", 0, ".cnv", "", "DB2 conversion file"], ["4b47425f61726368", 0, ".kgb", "", "KGB archive"], ["3a56455253494f4e", 0, ".sle", "", "Surfplan kite project file"], ["00001a0000100400", 0, ".wk3", "", "Lotus 1-2-3 (v3)"], ["55464f4f72626974", 0, ".dat", "", "UFO Capture map file"], ["9ccbcb8d1375d211", 0, ".wab", "", "Outlook address file"], ["24464c3240282329", 0, ".sav", "", "SPSS Data file"], ["6465780a30303900", 0, ".dex", "", "Dalvik (Android) executable file"], ["4d5a900003000000", 0, ".api", "", "Acrobat plug-in"], ["d0cf11e0a1b11ae1", 0, ".ac_", "", "CaseWare Working Papers"], ["436174616c6f6720", 0, ".ctf", "", "WhereIsIt Catalog"], ["415647365f496e74", 0, ".dat", "", "AVG6 Integrity database"], ["30314f52444e414e", 0, ".ntf", "", "National Transfer Format Map"], ["e4525c7b8cd8a74d", 0, ".one", "", "MS OneNote note"], ["4f67675300020000", 0, ".oga", "", "Ogg Vorbis Codec compressed file"], ["4f67675300020000", 0, ".ogg", "", "Ogg Vorbis Codec compressed file"], ["4f67675300020000", 0, ".ogv", "", "Ogg Vorbis Codec compressed file"], ["4f67675300020000", 0, ".ogx", "", "Ogg Vorbis Codec compressed file"], ["1a52545320434f4d", 0, ".dat", "", "Runtime Software disk image"], ["d0cf11e0a1b11ae1", 0, ".dot", "application/msword", "Microsoft Office document"], ["d0cf11e0a1b11ae1", 0, ".pps", "application/mspowerpoint", "Microsoft Office document"], ["d0cf11e0a1b11ae1", 0, ".ppt", "application/mspowerpoint", "Microsoft Office document"], ["d0cf11e0a1b11ae1", 0, ".xla", "application/excel", "Microsoft Office document"], ["d0cf11e0a1b11ae1", 0, ".xls", "application/excel", "Microsoft Office document"], ["d0cf11e0a1b11ae1", 0, ".wiz", "application/msword", "Microsoft Office document"], ["0764743264647464", 0, ".dtd", "", "DesignTools 2D Design file"], ["5850434f4d0a5479", 0, ".xpt", "", "XPCOM libraries"], ["4e41565452414646", 0, ".dat", "", "TomTom traffic data"], ["d0cf11e0a1b11ae1", 0, ".sou", "", "Visual Studio Solution User Options file"], ["56657273696f6e20", 0, ".mif", "application/x-mif", "MapInfo Interchange Format file"], ["4552465353415645", 0, ".dat", "", "EasyRecovery Saved State file"], ["5b666c7473696d2e", 0, ".cfg", "", "Flight Simulator Aircraft Configuration"], ["213c617263683e0a", 0, ".lib", "", "Unix archiver (ar)|MS Program Library Common Object File Format (COFF)"], ["252150532d41646f", 0, ".eps", "application/postscript", "Encapsulated PostScript file"], ["813284c18505d011", 0, ".wab", "", "Outlook Express address book (Win95)"], ["d0cf11e0a1b11ae1", 0, ".wps", "application/vnd.ms-works", "Microsoft Works Word document (Version 3+)"], ["b5a2b0b3b3b0a5b5", 0, ".cal", "", "Windows calendar"], ["537570657243616c", 0, ".cal", "", "SuperCalc worksheet"], ["504e4349554e444f", 0, ".dat", "", "Norton Disk Doctor undo file"], ["0000001466747970", 0, ".3gp", "", "3GPP multimedia files"], ["5b57696e646f7773", 0, ".cpx", "", "Microsoft Code Page Translation file"], ["a90d000000000000", 0, ".dat", "", "Access Data FTK evidence"], ["424f4f4b4d4f4249", 0, ".prc", "", "Palmpilot resource file"], ["4f504c4461746162", 0, ".dbf", "", "Psion Series 3 Database"], ["52415a4154444231", 0, ".dat", "", "Shareaza (P2P) thumbnail"], ["00001a0002100400", 0, ".wk4", "", "Lotus 1-2-3 (v4|v5)"], ["00001a0002100400", 0, ".wk5", "", "Lotus 1-2-3 (v4|v5)"], ["d0cf11e0a1b11ae1", 0, ".apr", "", "Lotus|IBM Approach 97 file"], ["454c49544520436f", 0, ".cdr", "", "Elite Plus Commander game file"], ["5000000020000000", 0, ".idx", "", "Quicken QuickFinder Information File"], ["d0cf11e0a1b11ae1", 0, ".msc", "", "Microsoft Common Console Document"], ["414f4c494e444558", 0, ".abi", "", "AOL address book index"], ["23204d6963726f73", 0, ".dsp", "", "MS Developer Studio project file"], ["76323030332e3130", 0, ".flt", "", "Qimage filter"], ["3c4d616b65724669", 0, ".mif", "application/x-mif", "Adobe FrameMaker"], ["534d415254445257", 0, ".sdr", "application/sounder", "SmartDraw Drawing file"], ["d0cf11e0a1b11ae1", 0, ".adp", "", "Access project file"], ["80000020031204", 0, ".adx", "", "Dreamcast audio"], ["43525553482076", 0, ".cru", "", "Crush compressed archive"], ["00004949585052", 0, ".qxd", "", "Quark Express (Intel)"], ["52454745444954", 0, ".reg", "", "WinNT Registry|Registry Undo files"], ["52454745444954", 0, ".sud", "", "WinNT Registry|Registry Undo files"], ["576f726450726f", 0, ".lwp", "", "Lotus WordPro file"], ["727473703a2f2f", 0, ".ram", "", "RealMedia metafile"], ["64737766696c65", 0, ".dsw", "", "MS Visual Studio workspace file"], ["5b50686f6e655d", 0, ".dun", "", "Dial-up networking file"], ["00004d4d585052", 0, ".qxd", "", "Quark Express (Motorola)"], ["424c4932323351", 0, ".bin", "application/octet-stream", "Speedtouch router firmware"], ["43505446494c45", 0, ".cpt", "application/x-cpt", "Corel Photopaint file"], ["575332303030", 0, ".ws2", "", "WordStar for Windows file"], ["414f4c494458", 0, ".ind", "", "AOL client preferences|settings file"], ["564350434830", 0, ".pch", "", "Visual C PreCompiled header"], ["554641c6d2c1", 0, ".ufa", "", "UFA compressed archive"], ["ac9ebd8f0000", 0, ".qdf", "", "Quicken data"], ["504147454455", 0, ".dmp", "", "Windows memory dump"], ["4d444d5093a7", 0, ".dmp", "", "Windows dump file"], ["458600000600", 0, ".qbb", "", "QuickBooks backup"], ["7b5c72746631", 0, ".rtf", "application/rtf", "RTF file"], ["5f434153455f", 0, ".cas", "", "EnCase case file"], ["5f434153455f", 0, ".cbk", "", "EnCase case file"], ["4e45534d1a01", 0, ".nsf", "", "NES Sound file"], ["01da", 0, ".rgb", "image/x-rgb", "Silicon Graphics RGB Bitmap"], ["0000ffffffff", 7, ".hlp", "application/x-helpfile", "Windows Help file"], ["4d4d4d440000", 0, ".mmf", "", "Yamaha Synthetic music Mobile Application Format"], ["504943540008", 0, ".img", "", "ChromaGraph Graphics Card Bitmap"], ["4e616d653a20", 0, ".cod", "", "Agent newsreader character map"], ["01ff02040302", 0, ".drw", "application/drafting", "Micrografx vector graphic file"], ["4a4152435300", 0, ".jar", "", "JARCS compressed archive"], ["434246494c45", 0, ".cbd", "", "WordPerfect dictionary"], ["2321414d52", 0, ".amr", "", "Adaptive Multi-Rate ACELP Codec (GSM)"], ["414f4c4442", 0, ".aby", "", "AOL address book"], ["5349542100", 0, ".sit", "application/x-sit", "StuffIt archive"], ["7b0d0a6f20", 0, ".lgc", "", "Windows application log"], ["7b0d0a6f20", 0, ".lgd", "", "Windows application log"], ["5b7665725d", 0, ".sam", "", "Lotus AMI Pro document"], ["7b5c707769", 0, ".pwi", "", "MS WinMobile personal note"], ["4d56323134", 0, ".mls", "", "Milestones project management file"], ["4848474231", 0, ".sh3", "", "Harvard Graphics presentation file"], ["fdffffff04", 512, ".suo", "", "Visual Studio Solution subheader"], ["fdffffff1f", 512, ".xls", "application/excel", "Excel spreadsheet subheader"], ["4d41723000", 0, ".mar", "text/plain", "MAr compressed archive"], ["4344303031", 0, ".iso", "", "ISO-9660 CD Disc Image"], ["fdffffff23", 512, ".xls", "application/excel", "Excel spreadsheet subheader"], ["4d494c4553", 0, ".mls", "", "Milestones project management file"], ["be000000ab", 0, ".wri", "application/mswrite", "MS Write file"], ["5b5645525d", 0, ".sam", "", "Lotus AMI Pro document"], ["4d41523100", 0, ".mar", "text/plain", "Mozilla archive"], ["fdffffff29", 512, ".xls", "application/excel", "Excel spreadsheet subheader"], ["fdffffff22", 512, ".xls", "application/excel", "Excel spreadsheet subheader"], ["ff464f4e54", 0, ".cpi", "", "Windows international code page"], ["5b4d535643", 0, ".vcw", "", "Visual C++ Workbench Info File"], ["4e49544630", 0, ".ntf", "", "National Imagery Transmission Format file"], ["fdffffff10", 512, ".xls", "application/excel", "Excel spreadsheet subheader"], ["414f4c4442", 0, ".idx", "", "AOL user configuration"], ["fdffffff20", 512, ".opt", "", "Developer Studio subheader"], ["fdffffff28", 512, ".xls", "application/excel", "Excel spreadsheet subheader"], ["504b0304", 0, ".xpi", "", "Mozilla Browser Archive"], ["504b0304", 0, ".wmz", "", "Windows Media compressed skin file"], ["0a000101", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.5, fixed EGA palette, 1bpp)"], ["0a020101", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.5, modified EGA palette, 1bpp)"], ["0a030101", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.8, 1bpp)"], ["0a040101", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (Paintbrush for Windows, 1bpp)"], ["0a050101", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (3.0, 1bpp)"], ["0a000001", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.5, fixed EGA palette, no encoding, 1bpp)"], ["0a020001", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.5, modified EGA palette, no encoding, 1bpp)"], ["0a030001", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.8, no encoding, 1bpp)"], ["0a040001", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (Paintbrush for Windows, no encoding, 1bpp)"], ["0a050001", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (3.0, no encoding, 1bpp)"], ["0a000102", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.5, fixed EGA palette, 2bpp)"], ["0a020102", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.5, modified EGA palette, 2bpp)"], ["0a030102", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.8, 2bpp)"], ["0a040102", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (Paintbrush for Windows, 2bpp)"], ["0a050102", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (3.0, 2bpp)"], ["0a000002", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.5, fixed EGA palette, no encoding, 2bpp)"], ["0a020002", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.5, modified EGA palette, no encoding, 2bpp)"], ["0a030002", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.8, no encoding, 2bpp)"], ["0a040002", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (Paintbrush for Windows, no encoding, 2bpp)"], ["0a050002", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (3.0, no encoding, 2bpp)"], ["0a030104", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.8, 4bpp)"], ["0a040104", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (Paintbrush for Windows, 4bpp)"], ["0a050104", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (3.0, 4bpp)"], ["0a000004", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.5, fixed EGA palette, no encoding, 4bpp)"], ["0a020004", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.5, modified EGA palette, no encoding, 4bpp)"], ["0a030004", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.8, no encoding, 4bpp)"], ["0a040004", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (Paintbrush for Windows, no encoding, 4bpp)"], ["0a050004", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (3.0, no encoding, 4bpp)"], ["0a030108", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.8, 8bpp)"], ["0a040108", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (Paintbrush for Windows, 8bpp)"], ["0a050108", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (3.0, 8bpp)"], ["0a000008", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.5, fixed EGA palette, no encoding, 8bpp)"], ["0a020008", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.5, modified EGA palette, no encoding, 8bpp)"], ["0a030008", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (2.8, no encoding, 8bpp)"], ["0a040008", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (Paintbrush for Windows, no encoding, 8bpp)"], ["0a050008", 0, ".pcx", "image/x-pcx", "ZSOFT Paintbrush file (3.0, no encoding, 8bpp)"], ["eb3c902a", 0, ".img", "", "GEM Raster file"], ["72656766", 0, ".dat", "", "WinNT registry file"], ["4d4c5357", 0, ".mls", "", "Skype localization data file"], ["504d4343", 0, ".grp", "", "Windows Program Manager group file"], ["47504154", 0, ".pat", "", "GIMP pattern file"], ["706e6f74", 4, ".mov", "video/quicktime", "QuickTime movie"], ["5041434b", 0, ".pak", "", "Quake archive file"], ["4d534346", 0, ".ppz", "application/mspowerpoint", "Powerpoint Packaged Presentation"], ["504b0304", 0, ".xpt", "", "eXact Packager Models"], ["4d415243", 0, ".mar", "text/plain", "Microsoft|MSN MARC archive"], ["0d444f43", 0, ".doc", "application/msword", "DeskMate Document"], ["504b0506", 0, ".zip", "application/zip", "PKZIP archive"], ["52494646", 0, ".4xm", "", "4X Movie video"], ["010f0000", 0, ".mdf", "", "SQL Data Base"], ["58435000", 0, ".cap", "", "Packet sniffer files"], ["02647373", 0, ".dss", "", "Digital Speech Standard file"], ["b168de3a", 0, ".dcx", "image/x-dcx", "PCX bitmap"], ["52494646", 0, ".cdr", "", "CorelDraw document"], ["736b6970", 4, ".mov", "video/quicktime", "QuickTime movie"], ["07534b46", 0, ".skf", "", "SkinCrafter skin"], ["49545346", 0, ".chi", "", "MS Compiled HTML Help File"], ["49545346", 0, ".chm", "", "MS Compiled HTML Help File"], ["43524547", 0, ".dat", "", "Win9x registry hive"], ["91334846", 0, ".hap", "", "Hamarsoft compressed archive"], ["52494646", 0, ".avi", "video/avi", "Resource Interchange File Format"], ["52494646", 0, ".cda", "", "Resource Interchange File Format"], ["52494646", 0, ".qcp", "audio/vnd.qcelp", "Resource Interchange File Format"], ["52494646", 0, ".rmi", "audio/mid", "Resource Interchange File Format"], ["52494646", 0, ".wav", "audio/wav", "Resource Interchange File Format"], ["504b0304", 0, ".kwd", "", "KWord document"], ["434d5831", 0, ".clb", "", "Corel Binary metafile"], ["25504446", 0, ".fdf", "application/vnd.fdf", "PDF file"], ["64000000", 0, ".p10", "application/pkcs10", "Intel PROset|Wireless Profile"], ["c3abcdab", 0, ".acs", "", "MS Agent Character file"], ["5343486c", 0, ".ast", "", "Underground Audio"], ["49536328", 0, ".hdr", "", "Install Shield compressed file"], ["41433130", 0, ".dwg", "image/x-dwg", "Generic AutoCAD drawing"], ["4e422a00", 0, ".jnt", "", "MS Windows journal"], ["4e422a00", 0, ".jtp", "", "MS Windows journal"], ["52494646", 0, ".ds4", "", "Micrografx Designer graphic"], ["52494646", 0, ".ani", "application/x-navi-animation", "Windows animated cursor"], ["53484f57", 0, ".shw", "", "Harvard Graphics presentation"], ["dba52d00", 0, ".doc", "application/msword", "Word 2.0 file"], ["50455354", 0, ".dat", "", "PestPatrol data|scan strings"], ["736c682e", 0, ".dat", "", "Allegro Generic Packfile (uncompressed)"], ["574d4d50", 0, ".dat", "", "Walkman MP3 file"], ["000001b3", 0, ".mpg", "video/mpeg", "MPEG video file"], ["00000200", 0, ".wb2", "", "QuattroPro spreadsheet"], ["49492a00", 0, ".tif", "image/tiff", "TIFF file"], ["6c33336c", 0, ".dbb", "", "Skype user data file"], ["52494646", 0, ".dat", "video/mpeg", "Video CD MPEG movie"], ["0e574b53", 0, ".wks", "", "DeskMate Worksheet"], ["6d646174", 4, ".mov", "video/quicktime", "QuickTime movie"], ["3f5f0300", 0, ".gid", "", "Windows Help Global Index file"], ["3f5f0300", 0, ".hlp", "application/x-helpfile", "Windows Help file"], ["68490000", 0, ".shd", "", "Win Server 2003 printer spool file"], ["00000100", 0, ".spl", "application/futuresplash", "Windows icon|printer spool file"], ["53434d49", 0, ".img", "", "Img Software Bitmap"], ["51454c20", 92, ".qel", "", "Quicken data"], ["737a657a", 0, ".pdb", "", "PowerBASIC Debugger Symbols"], ["00000200", 0, ".cur", "", "Windows cursor"], ["77696465", 4, ".mov", "video/quicktime", "QuickTime movie"], ["4b490000", 0, ".shd", "", "Win9x printer spool file"], ["ff575043", 0, ".wpd", "application/wordperfect", "WordPerfect text and graphics"], ["ff575043", 0, ".wpg", "application/wordperfect", "WordPerfect text and graphics"], ["ff575043", 0, ".wpp", "application/wordperfect", "WordPerfect text and graphics"], ["ff575043", 0, ".wp5", "application/wordperfect", "WordPerfect text and graphics"], ["ff575043", 0, ".wp6", "application/wordperfect", "WordPerfect text and graphics"], ["1a350100", 0, ".eth", "", "WinPharoah capture file"], ["66490000", 0, ".shd", "", "WinNT printer spool file"], ["444d5321", 0, ".dms", "", "Amiga DiskMasher compressed archive"], ["d7cdc69a", 0, ".wmf", "windows/metafile", "Windows graphics metafile"], ["52494646", 0, ".cmx", "", "Corel Presentation Exchange metadata"], ["4d563243", 0, ".mls", "", "Milestones project management file"], ["b46e6844", 0, ".tib", "", "Acronis True Image"], ["4d534346", 0, ".snp", "", "MS Access Snapshot Viewer file"], ["434f4d2b", 0, ".clb", "", "COM+ Catalog"], ["03000000", 0, ".qph", "", "Quicken price history"], ["504b0304", 0, ".xps", "", "XML paper specification file"], ["504b0304", 0, ".jar", "application/java-archive", "Java archive"], ["67490000", 0, ".shd", "", "Win2000|XP printer spool file"], ["7e424b00", 0, ".psp", "", "Corel Paint Shop Pro image"], ["414d594f", 0, ".syw", "", "Harvard Graphics symbol graphic"], ["d20a0000", 0, ".ftr", "", "WinPharoah filter file"], ["504b0304", 0, ".odt", "application/vnd.oasis.opendocument.text", "OpenDocument template"], ["504b0304", 0, ".odp", "application/vnd.oasis.opendocument.presentation", "OpenDocument template"], ["504b0304", 0, ".ott", "application/vnd.oasis.opendocument.text-template", "OpenDocument template"], ["c5d0d3c6", 0, ".eps", "application/postscript", "Adobe encapsulated PostScript"], ["c8007900", 0, ".lbk", "", "Jeppesen FliteLog file"], ["4c4e0200", 0, ".gid", "", "Windows help file"], ["4c4e0200", 0, ".hlp", "application/x-helpfile", "Windows help file"], ["55434558", 0, ".uce", "", "Unicode extensions"], ["41724301", 0, ".arc", "application/octet-stream", "FreeArc compressed file"], ["b04d4643", 0, ".pwl", "", "Win95 password file"], ["5a4f4f20", 0, ".zoo", "application/octet-stream", "ZOO compressed archive"], ["52545353", 0, ".cap", "", "WinNT Netmon capture file"], ["46726f6d", 0, ".eml", "", "Generic e-mail"], ["66726565", 4, ".mov", "video/quicktime", "QuickTime movie"], ["e3828596", 0, ".pwl", "", "Win98 password file"], ["736c6821", 0, ".dat", "", "Allegro Generic Packfile (compressed)"], ["00014244", 0, ".dba", "", "Palm DateBook Archive"], ["cfad12fe", 0, ".dbx", "", "Outlook Express e-mail folder"], ["00014241", 0, ".aba", "", "Palm Address Book Archive"], ["504b0708", 0, ".zip", "application/zip", "PKZIP archive"], ["504b0304", 0, ".sxd", "", "OpenOffice documents"], ["504b0304", 0, ".sxi", "", "OpenOffice documents"], ["504b0304", 0, ".sxw", "", "OpenOffice documents"], ["81cdab", 0, ".wpf", "", "WordPerfect text"], ["504158", 0, ".pax", "", "PAX password protected bitmap"], ["445644", 0, ".ifo", "", "DVD info file"], ["492049", 0, ".tif", "image/tiff", "TIFF file"], ["414376", 0, ".sle", "", "Steganos virtual secure drive"], ["414f4c", 0, ".abi", "", "AOL config files"], ["414f4c", 0, ".aby", "", "AOL config files"], ["414f4c", 0, ".bag", "", "AOL config files"], ["414f4c", 0, ".idx", "", "AOL config files"], ["414f4c", 0, ".ind", "", "AOL config files"], ["414f4c", 0, ".pfc", "", "AOL config files"], ["425a68", 0, ".bz2", "application/x-bzip2", "bzip2 compressed archive"], ["425a68", 0, ".tb2", "application/x-bzip2", "bzip2 compressed archive"], ["ffd8ff", 0, ".jpe", "image/jpeg", "JPEG|EXIF|SPIFF images"], ["ffd8ff", 0, ".jpg", "image/jpeg", "JPEG|EXIF|SPIFF images"], ["2d6c68", 2, ".lha", "application/x-lha", "Compressed archive"], ["445644", 0, ".dvr", "", "DVR-Studio stream file"], ["1a0000", 0, ".ntf", "", "Lotus Notes database template"], ["736d5f", 0, ".pdb", "", "PalmOS SuperMemo"], ["475832", 0, ".gx2", "", "Show Partner graphics file"], ["0110", 0, ".tr1", "", "Novell LANalyzer capture file"], ["4c01", 0, ".obj", "", "MS COFF relocatable object code"], ["4d5a", 0, ".ocx", "", "ActiveX|OLE Custom Control"], ["1a04", 0, ".arc", "application/octet-stream", "LH archive (old vers.|type 3)"], ["4d56", 0, ".dsn", "", "CD Stomper Pro label file"], ["1a09", 0, ".arc", "application/octet-stream", "LH archive (old vers.|type 5)"], ["582d", 0, ".eml", "", "Exchange e-mail"], ["1a02", 0, ".arc", "application/octet-stream", "LH archive (old vers.|type 1)"], ["60ea", 0, ".arj", "application/arj", "Compressed archive file"], ["4d5a", 0, ".scr", "", "Screen saver"], ["4d5a", 0, ".acm", "", "MS audio compression manager driver"], ["1a08", 0, ".arc", "application/octet-stream", "LH archive (old vers.|type 4)"], ["4d5a", 0, ".olb", "", "OLE object library"], ["9901", 0, ".pkr", "", "PGP public keyring"], ["4550", 0, ".mdi", "", "MS Document Imaging file"], ["9500", 0, ".skr", "", "PGP secret keyring"], ["4d5a", 0, ".fon", "", "Font file"], ["2112", 0, ".ain", "", "AIN Compressed Archive"], ["4d5a", 0, ".vxd", "", "Windows virtual device drivers"], ["4d5a", 0, ".386", "", "Windows virtual device drivers"], ["5854", 0, ".bdr", "", "MS Publisher"], ["4d5a", 0, ".cpl", "", "Control panel application"], ["32be", 0, ".wri", "application/mswrite", "MS Write file"], ["0011", 0, ".fli", "video/fli", "FLIC animation"], ["d42a", 0, ".arl", "", "AOL history|typed URL files"], ["d42a", 0, ".aut", "", "AOL history|typed URL files"], ["9501", 0, ".skr", "", "PGP secret keyring"], ["424d", 0, ".dib", "", "Bitmap image"], ["1a03", 0, ".arc", "application/octet-stream", "LH archive (old vers.|type 2)"], ["dcfe", 0, ".efx", "", "eFax file"], ["dcdc", 0, ".cpl", "", "Corel color palette"], ["31be", 0, ".wri", "application/mswrite", "MS Write file"], ["4d5a", 0, ".com", "application/octet-stream", "Windows|DOS executable file"], ["4d5a", 0, ".dll", "application/octet-stream", "Windows|DOS executable file"], ["4d5a", 0, ".drv", "application/octet-stream", "Windows|DOS executable file"], ["4d5a", 0, ".pif", "application/octet-stream", "Windows|DOS executable file"], ["4d5a", 0, ".qts", "application/octet-stream", "Windows|DOS executable file"], ["4d5a", 0, ".qtx", "application/octet-stream", "Windows|DOS executable file"], ["4d5a", 0, ".sys", "application/octet-stream", "Windows|DOS executable file"], ["4d5a", 0, ".vbx", "application/octet-stream", "VisualBASIC application"], ["feef", 0, ".gho", "application/octet-stream", "Symantex Ghost image file"], ["feef", 0, ".ghs", "application/octet-stream", "Symantex Ghost image file"], ["4f7b", 0, ".dw4", "", "Visio|DisplayWrite 4 text file"], ["415441524937383030", 1, ".a78", "application/x-atari-7800-rom", "Atari 7800"], ["69726976657220554d5320504c41", 4, ".pla", "audio/x-iriver-pla", "iRiver Playlist"], [ "2d2d2d2d2d424547494e20504750204d4553534147452d2d2d2d2d", 0, ".asc", "application/pgp-encrypted", "PGP/MIME-encrypted message header" ], [ "2d2d2d2d2d424547494e20504750205055424c4943204b455920424c4f434b2d2d2d2d2d", 0, ".gpg", "application/pgp-keys", "PGP keys" ], [ "2d2d2d2d2d424547494e205047502050524956415445204b455920424c4f434b2d2d2d2d2d", 0, ".gpg", "application/pgp-keys", "PGP keys" ], ["9900", 0, ".gpg", "application/pgp-keys", "PGP keys"], [ "2d2d2d2d2d424547494e20504750205349474e41545552452d2d2d2d2d", 0, ".gpg", "application/pgp-signature", "detached OpenPGP signature" ], ["7b5c5c727466", 0, ".rtf", "application/rtf", "RTF document"], ["283b46465b335d", 0, ".sgf", "application/x-go-sgf", "SGF record"], ["283b46465b345d", 0, ".sgf", "application/x-go-sgf", "SGF record"], ["2559414d4c", 0, ".yml", "application/x-yaml", "YAML document"], ["434452587672736e", 8, ".cdr", "application/vnd.corel-draw", "Corel Draw drawing"], [ "5c7830305c7830305c7830325c7830305c7830365c7830345c7830365c7830305c7830385c7830305c7830305c7830305c7830305c783030", 0, ".wks", "application/vnd.lotus-1-2-3", "Lotus 1-2-3 spreadsheet" ], [ "5c7830305c7830315c7830305c7830305374616e64617264204a6574204442", 0, ".mdb", "application/vnd.ms-access", "JET database" ], ["4d5343465c305c305c305c30", 0, ".cab", "application/vnd.ms-cab-compressed", "Microsoft Cabinet archive"], [ "4d6963726f736f667420457863656c20352e3020576f726b7368656574", 2080, ".xld", "application/vnd.ms-excel", "Excel spreadsheet" ], ["5c7833315c7862655c7830305c783030", 0, ".doc", "application/msword", "Word document"], ["504f5e5160", 0, ".doc", "application/msword", "Word document"], ["5c3337365c3036375c305c303433", 0, ".doc", "application/msword", "Word document"], ["5c3333335c3234352d5c305c305c30", 0, ".doc", "application/msword", "Word document"], ["4d6963726f736f667420576f726420646f63756d656e742064617461", 2112, ".doc", "application/msword", "Word document"], ["626a626a", 546, ".doc", "application/msword", "Word document"], ["6a626a62", 546, ".doc", "application/msword", "Word document"], ["5c323131474e445c725c6e5c3033325c6e", 0, ".gnd", "application/gnunet-directory", "GNUnet search file"], ["53746172577269746572", 2089, ".sgl", "application/vnd.stardivision.writer", "StarWriter document"], ["504b5c3030335c303034", 0, ".sxc", "application/vnd.sun.xml.calc", "OpenOffice Calc spreadsheet"], ["504b5c3030335c303034", 0, ".stc", "application/vnd.sun.xml.calc.template", "OpenOffice Calc template"], ["504b5c3030335c303034", 0, ".sxd", "application/vnd.sun.xml.draw", "OpenOffice Draw drawing"], ["504b5c3030335c303034", 0, ".std", "application/vnd.sun.xml.draw.template", "OpenOffice Draw template"], ["504b5c3030335c303034", 0, ".sxi", "application/vnd.sun.xml.impress", "OpenOffice Impress presentation"], ["504b5c3030335c303034", 0, ".sti", "application/vnd.sun.xml.impress.template", "OpenOffice Impress template"], ["504b5c3030335c303034", 0, ".sxm", "application/vnd.sun.xml.math", "OpenOffice Math formula"], ["504b5c3030335c303034", 0, ".sxw", "application/vnd.sun.xml.writer", "OpenOffice Writer document"], ["504b5c3030335c303034", 0, ".sxg", "application/vnd.sun.xml.writer.global", "OpenOffice Writer global document"], ["504b5c3030335c303034", 0, ".stw", "application/vnd.sun.xml.writer.template", "OpenOffice Writer template"], ["504b5c3030335c303034", 0, ".odt", "application/vnd.oasis.opendocument.text", "ODT document"], ["504b5c3030335c303034", 0, ".ott", "application/vnd.oasis.opendocument.text-template", "ODT template"], ["504b5c3030335c303034", 0, ".oth", "application/vnd.oasis.opendocument.text-web", "OTH template"], ["504b5c3030335c303034", 0, ".odm", "application/vnd.oasis.opendocument.text-master", "ODM document"], ["504b5c3030335c303034", 0, ".odg", "application/vnd.oasis.opendocument.graphics", "ODG drawing"], ["504b5c3030335c303034", 0, ".otg", "application/vnd.oasis.opendocument.graphics-template", "ODG template"], ["504b5c3030335c303034", 0, ".odp", "application/vnd.oasis.opendocument.presentation", "ODP presentation"], ["504b5c3030335c303034", 0, ".otp", "application/vnd.oasis.opendocument.presentation-template", "ODP template"], ["504b5c3030335c303034", 0, ".ods", "application/vnd.oasis.opendocument.spreadsheet", "ODS spreadsheet"], ["504b5c3030335c303034", 0, ".ots", "application/vnd.oasis.opendocument.spreadsheet-template", "ODS template"], ["504b5c3030335c303034", 0, ".odc", "application/vnd.oasis.opendocument.chart", "ODC chart"], ["504b5c3030335c303034", 0, ".otc", "application/vnd.oasis.opendocument.chart-template", "ODC template"], ["504b5c3030335c303034", 0, ".odf", "application/vnd.oasis.opendocument.formula", "ODF formula"], ["504b5c3030335c303034", 0, ".otf", "application/vnd.oasis.opendocument.formula-template", "ODF template"], ["504b5c3030335c303034", 0, ".odb", "application/vnd.oasis.opendocument.database", "ODB database"], ["504b5c3030335c303034", 0, ".odi", "application/vnd.oasis.opendocument.image", "ODI image"], ["19040010", 8, ".sis", "application/vnd.symbian.install", "SIS package"], ["575043", 1, ".wpp", "application/vnd.wordperfect", "WordPerfect document"], ["4153434949205350535320504f52542046494c45", 40, ".por", "application/x-spss-por", "SPSS Portable Data File"], ["5445587452454164", 60, ".pdc", "application/x-aportisdoc", "AportisDoc document"], ["54455874546c4463", 60, ".pdc", "application/x-aportisdoc", "AportisDoc document"], ["23212f62696e2f6761776b", 0, ".awk", "application/x-awk", "AWK script"], ["2321202f62696e2f6761776b", 0, ".awk", "application/x-awk", "AWK script"], ["23212f7573722f62696e2f6761776b", 0, ".awk", "application/x-awk", "AWK script"], ["2321202f7573722f62696e2f6761776b", 0, ".awk", "application/x-awk", "AWK script"], ["23212f7573722f6c6f63616c2f62696e2f6761776b", 0, ".awk", "application/x-awk", "AWK script"], ["2321202f7573722f6c6f63616c2f62696e2f6761776b", 0, ".awk", "application/x-awk", "AWK script"], ["23212f62696e2f61776b", 0, ".awk", "application/x-awk", "AWK script"], ["2321202f62696e2f61776b", 0, ".awk", "application/x-awk", "AWK script"], ["23212f7573722f62696e2f61776b", 0, ".awk", "application/x-awk", "AWK script"], ["2321202f7573722f62696e2f61776b", 0, ".awk", "application/x-awk", "AWK script"], ["4c525a49", 0, ".lrz", "application/x-lrzip", "Lrzip archive"], ["43445f524f4d5c6e", 0, ".toc", "application/x-cdrdao-toc", "CD Table Of Contents"], ["43445f44415c6e", 0, ".toc", "application/x-cdrdao-toc", "CD Table Of Contents"], ["43445f524f4d5f58415c6e", 0, ".toc", "application/x-cdrdao-toc", "CD Table Of Contents"], ["43445f5445585420", 0, ".toc", "application/x-cdrdao-toc", "CD Table Of Contents"], ["434154414c4f472022", 0, ".toc", "application/x-cdrdao-toc", "CD Table Of Contents"], ["5b4576656e7420", 0, ".pgn", "application/vnd.chess-pgn", "PGN chess game notation"], ["5d1c9ea3", 24, ".iso", "application/x-wii-rom", "Wii disc image"], ["57424653", 0, ".iso", "application/x-wii-rom", "Wii disc image"], ["5749495c30303144495343", 0, ".iso", "application/x-wii-rom", "Wii disc image"], ["49735c305c30", 4, ".wad", "application/x-wii-wad", "WiiWare bundle"], ["69625c305c30", 4, ".wad", "application/x-wii-wad", "WiiWare bundle"], ["426b5c305c30", 4, ".wad", "application/x-wii-wad", "WiiWare bundle"], ["c2339f3d", 28, ".iso", "application/x-gamecube-rom", "GameCube disc image"], ["4858435049434645", 0, ".hfe", "application/x-hfe-floppy-image", "HFE floppy disk image"], [ "53595354454d452044274152434849564147452050554b414c4c20532e412e502e2028632920416c6578616e6472652050554b414c4c20417672696c2031393938", 1, ".sap", "application/x-thomson-sap-image", "SAP Thomson floppy disk image" ], ["f702", 0, ".dvi", "application/x-dvi", "TeX DVI document"], ["5354415254464f4e545c303430", 0, ".bdf", "application/x-font-bdf", "BDF font"], ["5c7833365c783034", 0, ".psf", "application/x-font-linux-psf", "Linux PSF console font"], ["4f54544f", 0, ".otf", "application/x-font-otf", "OpenType font"], ["44312e305c303135", 0, ".spd", "application/x-font-speedo", "Speedo font"], ["5c3030305c3030315c3030305c3030305c303030", 0, ".ttc", "application/x-font-ttf", "TrueType font"], [ "5c7863655c7865645c7836365c7836365c7863635c7830645c7830305c7830625c7830335c7837335c7830305c7838335c7830305c7830635c7830305c7830645c7830305c7830385c7831315c7831665c7838385c7838395c7830305c783065", 260, ".sgb", "application/x-gameboy-rom", "Game Boy ROM" ], [ "5c7863655c7865645c7836365c7836365c7863635c7830645c7830305c7830625c7830335c7837335c7830305c7838335c7830305c7830635c7830305c7830645c7830305c783038", 260, ".cgb", "application/x-gameboy-color-rom", "Game Boy Color ROM" ], ["534547412047454e45534953", 256, ".smd", "application/x-genesis-rom", "Genesis ROM"], ["53454741204d454741204452495645", 256, ".smd", "application/x-genesis-rom", "Genesis ROM"], ["4541474e", 640, ".smd", "application/x-genesis-rom", "Genesis ROM"], ["45414d47", 640, ".smd", "application/x-genesis-rom", "Genesis ROM"], ["5345474120333258", 256, ".mdx", "application/x-genesis-32x-rom", "Genesis 32X ROM"], ["5c3033375c323133", 0, ".kfo", "application/x-kformula", "KFormula formula"], ["504b5c3030335c303034", 0, ".kfo", "application/x-kformula", "KFormula formula"], ["5c3033375c323133", 0, ".kil", "application/x-killustrator", "KIllustrator drawing"], ["5c3033375c323133", 0, ".flw", "application/x-kivio", "Kivio flowchart"], ["504b5c3030335c303034", 0, ".flw", "application/x-kivio", "Kivio flowchart"], ["5c3033375c323133", 0, ".kon", "application/x-kontour", "Kontour drawing"], ["504b5c3030335c303034", 0, ".kon", "application/x-kontour", "Kontour drawing"], ["5c3033375c323133", 0, ".kpt", "application/x-kpresenter", "KPresenter presentation"], ["504b5c3030335c303034", 0, ".kpt", "application/x-kpresenter", "KPresenter presentation"], ["5c3033375c323133", 0, ".kra", "application/x-krita", "Krita document"], ["504b5c3030335c303034", 0, ".kra", "application/x-krita", "Krita document"], ["5c3033375c323133", 0, ".ksp", "application/x-kspread", "KSpread spreadsheet"], ["504b5c3030335c303034", 0, ".ksp", "application/x-kspread", "KSpread spreadsheet"], ["5c3033375c323133", 0, ".kwt", "application/x-kword", "KWord document"], ["504b5c3030335c303034", 0, ".kwt", "application/x-kword", "KWord document"], ["2d6c68202d", 2, ".lzh", "application/x-lha", "LHA archive"], ["2d6c68302d", 2, ".lzh", "application/x-lha", "LHA archive"], ["2d6c68312d", 2, ".lzh", "application/x-lha", "LHA archive"], ["2d6c68322d", 2, ".lzh", "application/x-lha", "LHA archive"], ["2d6c68332d", 2, ".lzh", "application/x-lha", "LHA archive"], ["2d6c68342d", 2, ".lzh", "application/x-lha", "LHA archive"], ["2d6c68352d", 2, ".lzh", "application/x-lha", "LHA archive"], ["2d6c6834302d", 2, ".lzh", "application/x-lha", "LHA archive"], ["2d6c68642d", 2, ".lzh", "application/x-lha", "LHA archive"], ["2d6c7a342d", 2, ".lzh", "application/x-lha", "LHA archive"], ["2d6c7a352d", 2, ".lzh", "application/x-lha", "LHA archive"], ["2d6c7a732d", 2, ".lzh", "application/x-lha", "LHA archive"], ["234c7958", 0, ".lyx", "application/x-lyx", "LyX document"], ["04224d18", 0, ".lz4", "application/x-lz4", "LZ4 archive"], ["02214c18", 0, ".lz4", "application/x-lz4", "LZ4 archive"], [ "5c7838395c7834635c7835615c7834665c7830305c7830645c7830615c7831615c783061", 0, ".lzo", "application/x-lzop", "LZO archive" ], ["78617221", 0, ".pkg", "application/x-xar", "XAR archive"], ["496e7465726e657453686f7274637574", 1, ".url", "application/x-mswinurl", "Internet shortcut"], ["44454641554c54", 1, ".url", "application/x-mswinurl", "Internet shortcut"], ["80371240", 0, ".v64", "application/x-n64-rom", "Nintendo64 ROM"], ["37804012", 0, ".v64", "application/x-n64-rom", "Nintendo64 ROM"], ["40123780", 0, ".v64", "application/x-n64-rom", "Nintendo64 ROM"], [ "434f5059524947485420425920534e4b20434f52504f524154494f4e", 0, ".ngp", "application/x-neo-geo-pocket-rom", "Neo-Geo Pocket ROM" ], ["4f676753", 0, ".anx", "application/annodex", "Annodex exchange format"], ["4f676753", 0, ".axv", "video/annodex", "Annodex Video"], ["4f676753", 0, ".axa", "audio/annodex", "Annodex Audio"], ["4f676753", 0, ".ogx", "application/ogg", "Ogg multimedia file"], ["4f676753", 0, ".ogg", "video/ogg", "Ogg Video"], ["4f676753", 0, ".ogg", "audio/x-vorbis+ogg", "Ogg Vorbis audio"], ["4f676753", 0, ".ogg", "audio/x-flac+ogg", "Ogg FLAC audio"], ["4f676753", 0, ".ogg", "audio/x-speex+ogg", "Ogg Speex audio"], ["5370656578", 0, ".spx", "audio/x-speex", "Speex audio"], ["4f676753", 0, ".ogg", "video/x-theora+ogg", "Ogg Theora video"], ["4f676753", 0, ".ogm", "video/x-ogm+ogg", "OGM video"], ["7b5c5c707769", 0, ".psw", "application/x-pocket-word", "Pocket Word document"], ["994e0d0a", 0, ".pyo", "application/x-python-bytecode", "Python bytecode"], ["3c3f786d6c", 0, ".qtl", "application/x-quicktime-media-link", "QuickTime metalink playlist"], ["5254535074657874", 0, ".qtl", "application/x-quicktime-media-link", "QuickTime metalink playlist"], ["7274737074657874", 0, ".qtl", "application/x-quicktime-media-link", "QuickTime metalink playlist"], ["534d494c74657874", 0, ".qtl", "application/x-quicktime-media-link", "QuickTime metalink playlist"], ["52617221", 0, ".rar", "application/vnd.rar", "RAR archive"], ["414c5a", 0, ".alz", "application/x-alz", "Alzip archive"], ["5c7865645c7861625c7865655c786462", 0, ".rpm", "application/x-rpm", "RPM package"], ["616a6b67", 0, ".shn", "application/x-shorten", "Shorten audio"], ["2323536b65746368", 0, ".sk1", "image/x-skencil", "Skencil document"], ["53495421", 0, ".sit", "application/x-stuffit", "StuffIt archive"], ["574542565454", 0, ".vtt", "text/vtt", "WebVTT subtitles"], ["7b317d", 0, ".sub", "text/x-microdvd", "MicroDVD subtitles"], ["7b307d", 0, ".sub", "text/x-microdvd", "MicroDVD subtitles"], ["5b494e464f524d4154494f4e5d", 0, ".sub", "text/x-subviewer", "SubViewer subtitles"], ["424547494e3a494d454c4f4459", 0, ".ime", "text/x-iMelody", "iMelody ringtone"], ["3c6d726d6c20", 0, ".mrl", "text/x-mrml", "MRML playlist"], ["584d465f", 0, ".xmf", "audio/x-xmf", "XMF audio"], [ "5c3133305c3131355c3130365c3133375c3036325c3035365c3036305c3036305c3030305c3030305c3030305c303032", 0, ".xmf", "audio/x-xmf", "XMF audio" ], ["75737461725c30", 257, ".gem", "application/x-tar", "Tar archive"], ["75737461725c3034305c3034305c30", 257, ".gem", "application/x-tar", "Tar archive"], ["2554474946", 0, ".obj", "application/x-tgif", "TGIF document"], ["dca7c4fd", 20, ".zoo", "application/x-zoo", "Zoo archive"], ["504b5c3030335c303034", 0, ".zip", "application/zip", "Zip archive"], ["4d5357494d5c3030305c3030305c303030", 0, ".swm", "application/x-ms-wim", "WIM disk Image"], ["0b77", 0, ".ac3", "audio/ac3", "Dolby Digital audio"], ["7ffe8001", 0, ".dts", "audio/vnd.dts", "DTS audio"], ["80017ffe", 0, ".dts", "audio/vnd.dts", "DTS audio"], ["1fffe800", 0, ".dts", "audio/vnd.dts", "DTS audio"], ["e8001fff", 0, ".dts", "audio/vnd.dts", "DTS audio"], ["2321414d525c6e", 0, ".amr", "audio/AMR", "AMR audio"], ["2321414d525f4d43312e305c6e", 0, ".amr", "audio/AMR", "AMR audio"], ["2321414d522d57425c6e", 0, ".awb", "audio/AMR-WB", "AMR-WB audio"], ["2321414d522d57425f4d43312e305c6e", 0, ".awb", "audio/AMR-WB", "AMR-WB audio"], ["4d414320", 0, ".ape", "audio/x-ape", "Monkey's audio"], ["7776706b", 0, ".wvp", "audio/x-wavpack", "WavPack audio"], ["7776706b", 0, ".wvc", "audio/x-wavpack-correction", "WavPack audio correction file"], ["4d4f33", 0, ".mo3", "audio/x-mo3", "MO3 compressed Tracker audio"], ["41444946", 0, ".aac", "audio/aac", "AAC audio"], ["fff0", 0, ".aac", "audio/aac", "AAC audio"], ["667479704d3441", 4, ".f4a", "audio/mp4", "MPEG-4 audio"], ["6674797069736f6d", 4, ".mp4", "video/mp4", "MPEG-4 video"], ["667479706d703432", 4, ".mp4", "video/mp4", "MPEG-4 video"], ["667479704d534e56", 4, ".mp4", "video/mp4", "MPEG-4 video"], ["667479704d345620", 4, ".mp4", "video/mp4", "MPEG-4 video"], ["6674797066347620", 4, ".mp4", "video/mp4", "MPEG-4 video"], ["667479704d3442", 4, ".f4b", "audio/x-m4b", "MPEG-4 audio book"], ["66747970336765", 4, ".3ga", "video/3gpp", "3GPP multimedia file"], ["66747970336767", 4, ".3ga", "video/3gpp", "3GPP multimedia file"], ["66747970336770", 4, ".3ga", "video/3gpp", "3GPP multimedia file"], ["66747970336773", 4, ".3ga", "video/3gpp", "3GPP multimedia file"], ["234558544d3355", 0, ".vlc", "audio/x-mpegurl", "MP3 audio (streamed)"], ["41534620", 0, ".wmx", "audio/x-ms-asx", "Microsoft ASX playlist"], ["505346", 0, ".psf", "audio/x-psf", "PSF audio"], ["4d502b", 0, ".mp+", "audio/x-musepack", "Musepack audio"], ["5343524d", 44, ".s3m", "audio/x-s3m", "Scream Tracker 3 audio"], ["5b706c61796c6973745d", 0, ".pls", "audio/x-scpls", "MP3 ShoutCast playlist"], ["5b506c61796c6973745d", 0, ".pls", "audio/x-scpls", "MP3 ShoutCast playlist"], ["5b504c41594c4953545d", 0, ".pls", "audio/x-scpls", "MP3 ShoutCast playlist"], ["2153637265616d215c783141", 20, ".stm", "audio/x-stm", "Scream Tracker audio"], ["2153435245414d215c783141", 20, ".stm", "audio/x-stm", "Scream Tracker audio"], ["424d4f443253544d5c783141", 20, ".stm", "audio/x-stm", "Scream Tracker audio"], ["57415645", 8, ".wav", "audio/x-wav", "WAV audio"], ["57415620", 8, ".wav", "audio/x-wav", "WAV audio"], ["54544131", 0, ".tta", "audio/x-tta", "TrueAudio audio"], ["424d787878785c3030305c303030", 0, ".dib", "image/bmp", "Windows BMP image"], ["5c3337375c3333305c333737", 0, ".jpe", "image/jpeg", "JPEG image"], ["ffd8", 0, ".jpe", "image/jpeg", "JPEG image"], ["5c7846465c7834465c7846465c7835315c783030", 0, ".jpf", "image/jp2", "JPEG-2000 image"], ["0c6a5020", 3, ".jpf", "image/jp2", "JPEG-2000 image"], ["6a7032", 20, ".jpf", "image/jp2", "JPEG-2000 image"], ["504b5c3030335c303034", 0, ".ora", "image/openraster", "OpenRaster archiving image"], ["444453", 0, ".dds", "image/x-dds", "DirectDraw surface"], ["300600", 0, ".exr", "image/x-exr", "EXR image"], ["49495c7831615c7830305c7830305c7830304845415043434452", 0, ".crw", "image/x-canon-crw", "Canon CRW raw image"], ["46554a4946494c4d4343442d52415720", 0, ".raf", "image/x-fuji-raf", "Fuji RAF raw image"], ["454153544d414e204b4f44414b20434f4d50414e59", 242, ".kdc", "image/x-kodak-kdc", "Kodak KDC raw image"], ["5c7830304d524d", 0, ".mrw", "image/x-minolta-mrw", "Minolta MRW raw image"], ["4949524f5c7830385c7830305c7830305c783030", 0, ".orf", "image/x-olympus-orf", "Olympus ORF raw image"], ["4949555c7830305c7830385c7830305c7830305c783030", 0, ".raw", "image/x-panasonic-raw", "Panasonic raw image"], ["4949555c7830305c7831385c7830305c7830305c783030", 0, ".rw2", "image/x-panasonic-raw2", "Panasonic raw2 image"], ["49495500", 0, ".rw2", "image/x-panasonic-raw2", "Panasonic raw2 image"], ["49495500", 0, ".rwl", "image/x-panasonic-raw2", "Leica raw image"], ["464f5662", 0, ".x3f", "image/x-sigma-x3f", "Sigma X3F raw image"], ["5c783839504e47", 0, ".png", "image/png", "PNG image"], ["5c7834355c7835305c7832415c783030", 0, ".mdi", "image/vnd.ms-modi", "Microsoft Document Imaging format"], ["4449434d", 128, ".dcm", "application/dicom", "DICOM image"], ["41542654464f524d", 0, ".djv", "image/vnd.djvu", "DjVu image"], ["464f524d", 0, ".djv", "image/vnd.djvu", "DjVu image"], ["41542654464f524d", 0, ".djv", "image/vnd.djvu+multipage", "DjVu document"], ["464f524d", 0, ".djv", "image/vnd.djvu+multipage", "DjVu document"], ["5c305c305c315c30", 0, ".ico", "image/vnd.microsoft.icon", "Windows icon"], ["494c424d", 8, ".lbm", "image/x-ilbm", "ILBM image"], ["50424d20", 8, ".lbm", "image/x-ilbm", "ILBM image"], ["5031", 0, ".pbm", "image/x-portable-bitmap", "PBM image (Ascii)"], ["5034", 0, ".pbm", "image/x-portable-bitmap", "PBM image (Binary)"], ["5032", 0, ".pgm", "image/x-portable-graymap", "PGM image (Ascii)"], ["5035", 0, ".pgm", "image/x-portable-graymap", "PGM image (Binary)"], ["5033", 0, ".ppm", "image/x-portable-pixmap", "PPM image (Ascii)"], ["5036", 0, ".ppm", "image/x-portable-pixmap", "PPM image (Binary)"], ["3842505320205c3030305c3030305c3030305c303030", 0, ".psd", "image/vnd.adobe.photoshop", "Photoshop image"], ["59a66a95", 0, ".sun", "image/x-sun-raster", "Sun raster image"], ["5c305c32", 1, ".vst", "image/x-tga", "TGA image"], ["5c305c305c325c30", 0, ".cur", "image/x-win-bitmap", "Windows cursor"], ["01000000", 0, ".emf", "image/emf", "EMF image"], ["0100", 0, ".wmf", "image/wmf", "WMF image"], ["67696d70207863662066696c65", 0, ".xcf", "image/x-xcf", "GIMP image"], ["67696d70207863662076", 0, ".xcf", "image/x-xcf", "GIMP image"], ["23464947", 0, ".fig", "image/x-xfig", "XFig image"], ["2f2a2058504d", 0, ".xpm", "image/x-xpixmap", "XPM image"], ["232120726e657773", 0, ".eml", "message/rfc822", "email message"], ["466f727761726420746f", 0, ".eml", "message/rfc822", "email message"], ["46726f6d3a", 0, ".eml", "message/rfc822", "email message"], ["4e232120726e657773", 0, ".eml", "message/rfc822", "email message"], ["5069706520746f", 0, ".eml", "message/rfc822", "email message"], ["52656365697665643a", 0, ".eml", "message/rfc822", "email message"], ["52656c61792d56657273696f6e3a", 0, ".eml", "message/rfc822", "email message"], ["52657475726e2d506174683a", 0, ".eml", "message/rfc822", "email message"], ["52657475726e2d706174683a", 0, ".eml", "message/rfc822", "email message"], ["5375626a6563743a20", 0, ".eml", "message/rfc822", "email message"], ["2356524d4c20", 0, ".wrl", "model/vrml", "VRML document"], ["424547494e3a5643414c454e444152", 0, ".ics", "text/calendar", "VCS/ICS calendar"], ["626567696e3a7663616c656e646172", 0, ".ics", "text/calendar", "VCS/ICS calendar"], ["2521706f737470726f63", 0, ".t2t", "text/x-txt2tags", "txt2tags document"], ["2521656e636f64696e67", 0, ".t2t", "text/x-txt2tags", "txt2tags document"], ["49443b", 0, ".slk", "text/spreadsheet", "spreadsheet interchange document"], ["6469677261706820", 0, ".dot", "text/vnd.graphviz", "Graphviz DOT graph"], ["737472696374206469677261706820", 0, ".dot", "text/vnd.graphviz", "Graphviz DOT graph"], ["677261706820", 0, ".dot", "text/vnd.graphviz", "Graphviz DOT graph"], ["73747269637420677261706820", 0, ".dot", "text/vnd.graphviz", "Graphviz DOT graph"], ["4d49446c65742d", 0, ".jad", "text/vnd.sun.j2me.app-descriptor", "JAD document"], ["2a2a4143452a2a", 7, ".ace", "application/x-ace", "ACE archive"], [ "2520546869732066696c652077617320637265617465642077697468204a6162526566", 0, ".bib", "text/x-bibtex", "BibTeX document" ], ["3c424f4459", 0, ".html", "text/html", "HTML document"], ["3c21444f4354595045", 0, ".html", "text/html", "HTML document"], ["3c21646f6374797065", 0, ".html", "text/html", "HTML document"], ["3c21446f6354797065", 0, ".html", "text/html", "HTML document"], ["3c21446f6374797065", 0, ".html", "text/html", "HTML document"], ["3c626f6479", 0, ".html", "text/html", "HTML document"], ["3c212d2d", 0, ".html", "text/html", "HTML document"], ["3c6831", 0, ".html", "text/html", "HTML document"], ["3c4831", 0, ".html", "text/html", "HTML document"], ["3c21646f63747970652048544d4c", 0, ".html", "text/html", "HTML document"], ["3c21444f43545950452068746d6c", 0, ".html", "text/html", "HTML document"], [ "232e646f776e6c6f61642e7468652e667265652e476f6f676c652e566964656f2e506c61796572", 0, ".gvp", "text/x-google-video-pointer", "Google Video Pointer" ], [ "2320646f776e6c6f616420746865206672656520476f6f676c6520566964656f20506c61796572", 0, ".gvp", "text/x-google-video-pointer", "Google Video Pointer" ], [ "57696e646f777320526567697374727920456469746f722056657273696f6e20352e3030", 0, ".reg", "text/x-ms-regedit", "Windows Registry extract" ], [ "5c7866665c786665575c783030695c7830306e5c783030645c7830306f5c783030775c783030735c783030205c783030525c783030655c783030675c783030695c783030735c783030745c783030725c783030795c783030205c783030455c783030645c783030695c783030745c7830306f5c783030725c783030", 0, ".reg", "text/x-ms-regedit", "Windows Registry extract" ], ["2f2f214d7570", 0, ".not", "text/x-mup", "Mup publication"], ["626567696e20", 0, ".uue", "text/x-uuencode", "uuencoded file"], ["3c3f786d6c", 0, ".rng", "application/xml", "XML document"], ["3c212d2d", 0, ".rng", "application/xml", "XML document"], ["234558544d3455", 0, ".mxu", "video/vnd.mpegurl", "MPEG video (streamed)"], ["69646174", 4, ".qif", "image/x-quicktime", "QuickTime image"], ["11af", 0, ".flc", "video/x-flic", "FLIC animation"], ["12af", 0, ".flc", "video/x-flic", "FLIC animation"], ["48575020446f63756d656e742046696c65", 0, ".hwp", "application/x-hwp", "Haansoft Hangul document"], ["5c7838414d4e475c7830445c7830415c7831415c783041", 0, ".mng", "video/x-mng", "MNG animation"], ["3026b275", 0, ".asf", "application/vnd.ms-asf", "ASF video"], ["5b5265666572656e63655d", 0, ".asf", "application/vnd.ms-asf", "ASF video"], ["5b416464726573735d", 0, ".nsc", "application/x-netshow-channel", "Windows Media Station file"], ["4e535666", 0, ".nsv", "video/x-nsv", "NullSoft video"], ["763d", 0, ".sdp", "application/sdp", "SDP multicast stream file"], ["6e4637594c616f", 0, ".emp", "application/vnd.emusic-emusic_package", "eMusic download package"], ["4043542030", 0, ".602", "application/x-t602", "T602 document"], ["4043542031", 0, ".602", "application/x-t602", "T602 document"], ["4043542032", 0, ".602", "application/x-t602", "T602 document"], ["5b6d61696e5d", 0, ".pcf", "application/x-cisco-vpn-settings", "Cisco VPN Settings"], ["61637370", 36, ".icm", "application/vnd.iccprofile", "ICC profile"], ["504b5c3030335c303034", 0, ".key", "application/x-iwork-keynote-sffkey", "Apple Keynote 5 presentation"], ["49574144", 0, ".wad", "application/x-doom-wad", "Doom WAD"], ["50574144", 0, ".wad", "application/x-doom-wad", "Doom WAD"], ["444f53", 0, ".adf", "application/x-amiga-disk-format", "Amiga disk image"], ["0000001466747970336770", 0, ".3g2", "video/3gpp", "3GPP 3rd Generation Partnership Project video file"], ["000001ba", 0, ".vob", "video/dvd", "DVD video file"], ["000001ba", 0, ".mpg", "video/mpeg", "DVD video file"], [ "504b030414000600", 0, "xlsx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "Microsoft Office 2007+ Open XML Format Document file" ], ["4d546864", 0, ".mid", "audio/x-midi", "Musical Instrument Digital Interface (MIDI) sound file"], ["1f9d", 0, ".tgz", "application/x-tgz", "Compressed tape archive file using standard compression"], ["1fa0", 0, ".tgz", "application/x-tgz", "Compressed tape archive file using LZH compression"], ["2e524d46", 0, ".rm", "application/vnd.rn-realmedia", "RealMedia media file"], ["2e524d460000001200", 0, ".ra", "audio/x-pn-realaudio", "RealAudio file"], ["2e7261fd00", 0, ".ra", "audio/x-pn-realaudio", "RealAudio media file"], ["1f8b08", 0, ".gz", "application/x-gzip", "GZIP Archive file"], ["fd377a585a00", 0, ".xz", "application/x-xz", "LMZA XZ Archive file"], ["377abcaf271c", 0, ".7z", "application/x-7z-compressed", "7-Zip Compressed file"], ["377abcaf271c", 0, ".cb7", "application/x-7z-compressed", "Comic Book Archive 7z format"], ["04000000", 524, ".db", "application/octet-stream", "Windows Thumbs.db file"], ["23212f7573722f62696e2f656e7620707974686f6e", 0, ".py", "text/x-python", "Python file"], ["23202d2a2d20636f64696e67", 0, ".py", "text/x-python", "Python file"], ["23202d2a2d20636f64696e67", 0, ".py", "text/x-python", "Python file"], ["696d706f727420", 0, ".py", "text/x-python", "Python file"], ["0006156100000002000004d200001000", 0, ".db", "", "Netscape Navigator (v4) database"], ["53514c69746520666f726d6174203300", 0, ".db", "", "SQLite database file"], ["d0cf11e0a1b11ae1", 0, ".db", "", "MSWorks database file"], ["5245564e554d3a2c", 0, ".ad", "", "Antenna data file"], ["2e524d4600000012", 0, ".ra", "audio/x-pn-realaudio", "RealAudio file"], ["8a0109000000e108", 0, ".aw", "", "MS Answer Wizard"], ["4d5a900003000000", 0, ".ax", "", "DirectShow filter"], ["1100000053434341", 0, ".pf", "", "Windows prefetch file"], ["3c4d616b65724669", 0, ".fm", "", "Adobe FrameMaker"], ["72696666", 0, ".ac", "", "Sonic Foundry Acid Music File"], ["fdffffff", 512, ".db", "", "Thumbs.db subheader"], ["4a47030e", 0, ".jg", "", "AOL ART file"], ["4a47040e", 0, ".jg", "", "AOL ART file"], ["44424648", 0, ".db", "", "Palm Zire photo database"], ["ff575043", 0, ".wp", "application/wordperfect", "WordPerfect text and graphics"], ["646e732e", 0, ".au", "audio/x-au", "Audacity audio file"], ["2e736e64", 0, ".au", "audio/x-au", "NeXT|Sun Microsystems audio file"], ["1d7d", 0, ".ws", "", "WordStar Version 5.0|6.0 document"], ["4d5a", 0, ".ax", "", "Library cache file"], ["0ced", 0, ".mp", "", "Monochrome Picture TIFF bitmap"], [ "282a2a2a2a2a2a2a2a2a2a2a2a2a2a20436f6e74656e742d747970653a206170706c69636174696f6e2f6d617468656d6174696361", 0, ".nb", "application/mathematica", "Mathematica Notebook" ], ["5c3030342521", 0, ".ps", "application/postscript", "PS document"], ["2521", 0, ".ps", "application/postscript", "PS document"], ["377a5c3237345c3235375c3034375c303334", 0, ".7z", "application/x-7z-compressed", "7-zip archive"], [ "2a424547494e20535052454144534845455453", 0, ".as", "application/x-applix-spreadsheet", "Applix Spreadsheets spreadsheet" ], ["2a424547494e", 0, ".as", "application/x-applix-spreadsheet", "Applix Spreadsheets spreadsheet"], ["2a424547494e", 0, ".aw", "application/x-applix-word", "Applix Words document"], ["3c61723e", 0, ".ar", "application/x-archive", "AR archive"], ["213c617263683e", 0, ".ar", "application/x-archive", "AR archive"], ["2320646174612066696c6520666f722074686520466c746b", 0, ".fl", "application/x-fluid", "FLTK Fluid file"], ["3c4d616b657246696c65", 0, ".fm", "application/vnd.framemaker", "Adobe FrameMaker document"], ["3c4d494646696c65", 0, ".fm", "application/vnd.framemaker", "Adobe FrameMaker document"], ["3c4d616b657244696374696f6e617279", 0, ".fm", "application/vnd.framemaker", "Adobe FrameMaker document"], ["3c4d616b657253637265656e466f6e", 0, ".fm", "application/vnd.framemaker", "Adobe FrameMaker document"], ["3c4d4d4c", 0, ".fm", "application/vnd.framemaker", "Adobe FrameMaker document"], ["3c426f6f6b", 0, ".fm", "application/vnd.framemaker", "Adobe FrameMaker document"], ["3c4d616b6572", 0, ".fm", "application/vnd.framemaker", "Adobe FrameMaker document"], [ "5c3333365c32325c345c323235", 0, ".mo", "application/x-gettext-translation", "translated messages (machine-readable)" ], [ "5c3232355c345c32325c333336", 0, ".mo", "application/x-gettext-translation", "translated messages (machine-readable)" ], ["5c3033375c323133", 0, ".gz", "application/gzip", "Gzip archive"], ["894844460d0a1a0a", 0, ".h5", "application/x-hdf5", "HDF5 document"], ["50415231", 0, ".parquet", "application/vnd.apache.parquet", "Apache Parquet columnar data"], ["934e554d5059", 0, ".npy", "application/x-numpy", "NumPy array file"], ["47524942", 0, ".grib", "application/x-grib", "GRIB meteorological data"], ["4243460204", 0, ".bcf", "application/x-bcf", "BCF (Binary VCF) v2"], ["464353332e31", 0, ".fcs", "application/vnd.isac.fcs", "Flow Cytometry Standard 3.1"], ["464353332e30", 0, ".fcs", "application/vnd.isac.fcs", "Flow Cytometry Standard 3.0"], ["464353322e30", 0, ".fcs", "application/vnd.isac.fcs", "Flow Cytometry Standard 2.0"], ["6e2b32000d0a1a0a", 4, ".nii2", "application/x-nifti2", "NIfTI-2 neuroimaging data"], ["4000000004000000", 0, ".cel", "application/x-cel", "Affymetrix CEL microarray v4"], ["4c5a4950", 0, ".lz", "application/x-lzip", "Lzip archive"], ["7170726573733130", 0, ".qp", "application/x-qpress", "Qpress archive"], ["5c313737454c46", 0, ".so", "application/x-sharedlib", "shared library"], ["5c313737454c462020202020202020202020205c303033", 0, ".so", "application/x-sharedlib", "shared library"], ["2320546869732069732061207368656c6c2061726368697665", 10, ".sh", "application/x-shellscript", "shell script"], ["5c7866645c7833375c7837615c7835385c7835615c783030", 0, ".xz", "application/x-xz", "XZ archive"], ["494d504d", 0, ".it", "audio/x-it", "Impulse Tracker (and clones) audio"], ["457874656e64656420496e737472756d656e743a", 0, ".xi", "audio/x-xi", "Scream Tracker instrument"], ["457874656e646564204d6f64756c653a", 0, ".xm", "audio/x-xm", "FastTracker II audio"], ["2a424547494e", 0, ".ag", "image/x-applix-graphics", "Applix Graphics image"], ["5c30313228", 0, ".el", "text/x-emacs-lisp", "Emacs Lisp source code"], ["3b454c435c3032335c3030305c3030305c303030", 0, ".el", "text/x-emacs-lisp", "Emacs Lisp source code"], ["7265636f7264", 0, ".mo", "text/x-modelica", "Modelica model"], ["1f070000", 0, ".dv", "video/dv", "DV video"], ["5c3033375c323335", 0, ".Z", "application/x-compress", "UNIX-compressed file"], ["5c313737454c46", 0, ".o", "application/x-object", "object code"], ["2e5c5c5c22", 0, ".t", "text/troff", "Troff document"], ["275c5c5c22", 0, ".t", "text/troff", "Troff document"], ["272e5c5c5c22", 0, ".t", "text/troff", "Troff document"], ["5c5c5c22", 0, ".t", "text/troff", "Troff document"], ["23696d706f7274", 0, ".m", "text/x-objcsrc", "Objective-C source code"], ["66756e6374696f6e", 0, ".m", "text/x-matlab", "MATLAB script/function"], ["cd20aaaa02000000", 0, "", "", "NAV quarantined virus file"], ["535a2088f02733d1", 0, "", "", "QBASIC SZDD file"], ["4b57414a88f027d1", 0, "", "", "KWAJ (compressed) file"], ["37e45396c9dbd607", 0, "", "", "zisofs compressed file"], ["535a444488f02733", 0, "", "", "SZDD file format"], ["001400000102", 0, "", "", "BIOS details in RAM"], ["626567696e", 0, "", "", "UUencoded file"], ["3037303730", 0, "", "", "cpio archive"], ["04000000", 0, "", "", "INFO2 Windows recycle bin"], ["41435344", 0, "", "", "AOL parameter|info files"], ["a1b2c3d4", 0, "", "", "tcpdump (libpcap) capture file"], ["7f454c46", 0, "", "", "ELF executable"], ["d4c3b2a1", 0, "", "", "WinDump (winpcap) capture file"], ["a1b2cd34", 0, "", "", "Extended tcpdump (libpcap) capture file"], ["0a0d0d0a", 0, ".pcapng", "application/octet-stream", "pcapng capture file"], ["05000000", 0, "", "", "INFO2 Windows recycle bin"], ["34cdb2a1", 0, "", "", "Tcpdump capture file"], ["6f3c", 0, "", "", "SMS text (SIM)"], ["aced", 0, "", "", "Java serialization data"], [ "6d75737420626520636f6e76657274656420776974682042696e486578", 11, "", "application/mac-binhex40", "Macintosh BinHex-encoded file" ], ["44617461506c6b72", 60, "", "application/prs.plucker", "Plucker document"], [ "2a2a20546869732066696c6520636f6e7461696e7320616e2053514c697465", 0, "", "application/x-sqlite2", "SQLite2 database" ], ["53514c69746520666f726d61742033", 0, "", "application/x-sqlite3", "SQLite3 database"], ["1a080000", 0, "", "application/x-arc", "ARC archive"], ["1a090000", 0, "", "application/x-arc", "ARC archive"], ["1a020000", 0, "", "application/x-arc", "ARC archive"], ["1a030000", 0, "", "application/x-arc", "ARC archive"], ["1a040000", 0, "", "application/x-arc", "ARC archive"], ["1a060000", 0, "", "application/x-arc", "ARC archive"], ["53454741205049434f", 256, "", "application/x-sega-pico-rom", "Sega Pico ROM"], ["5c313737454c46", 0, "", "application/x-executable", "executable"], ["1c52", 0, "", "application/x-executable", "executable"], ["5c7866665c7834365c7834665c783465", 0, "", "application/x-font-dos", "DOS font"], ["5c7830305c7834355c7834375c783431", 7, "", "application/x-font-dos", "DOS font"], ["5c7830305c7835365c7834395c783434", 7, "", "application/x-font-dos", "DOS font"], ["3c4d616b657253637265656e466f6e74", 0, "", "application/x-font-framemaker", "Adobe FrameMaker font"], ["5c7831345c7830325c7835395c783139", 0, "", "application/x-font-libgrx", "LIBGRX font"], ["5374617274466f6e74", 0, "", "application/x-font-sunos-news", "SunOS News font"], ["5c7831335c7837415c783239", 0, "", "application/x-font-sunos-news", "SunOS News font"], ["5c7831335c7837415c783242", 8, "", "application/x-font-sunos-news", "SunOS News font"], ["5c3336375c323033", 0, "", "application/x-font-tex", "TeX font"], ["5c3336375c313331", 0, "", "application/x-font-tex", "TeX font"], ["5c3336375c333132", 0, "", "application/x-font-tex", "TeX font"], ["5c3030305c303231", 2, "", "application/x-font-tex-tfm", "TeX font metrics"], ["5c3030305c303232", 2, "", "application/x-font-tex-tfm", "TeX font metrics"], ["464f4e54", 0, "", "application/x-font-vfont", "V font"], ["13579ace", 0, "", "application/x-gdbm", "GDBM database"], ["ce9a5713", 0, "", "application/x-gdbm", "GDBM database"], ["4744424d", 0, "", "application/x-gdbm", "GDBM database"], ["67746b74616c6f6720", 4, "", "application/x-gtktalog", "GTKtalog catalog"], ["464f524d", 0, "", "application/x-iff", "IFF file"], ["532054204f2050", 0, "", "application/x-ipod-firmware", "iPod firmware"], ["0d1a2702", 0, "", "application/x-kspread-crypt", "KSpread spreadsheet (encrypted)"], ["4b53797356", 4, "", "application/x-ksysv-package", "KSysV init package"], ["0d1a2701", 0, "", "application/x-kword-crypt", "KWord document (encrypted)"], ["6d42494e", 102, "", "application/x-macbinary", "Macintosh MacBinary file"], ["1a45dfa3", 0, "", "application/x-matroska", "Matroska stream"], [ "5c3332305c3331375c3032315c3334305c3234315c3236315c3033325c333431", 0, "", "application/x-ole-storage", "OLE2 compound document storage" ], ["d0cf11e0", 0, "", "application/x-ole-storage", "OLE2 compound document storage"], ["4a6f7921", 0, "", "application/x-pef-executable", "PEF executable"], ["5370726561647368656574", 38, "", "application/x-sc", "SC/Xspread spreadsheet"], ["2e736400", 0, "", "audio/x-adpcm", "PCM audio"], ["58637572", 0, "", "image/x-xcursor", "X11 cursor"], ["5c7832385c30305c30305c3030", 0, "", "image/x-dib", "DIB image"], ["53445058", 0, "", "image/dpx", "DPX image"], ["46506978", 0, "", "image/x-fpx", "FPX image"], ["49494e31", 0, "", "image/x-niff", "NIFF image"], ["41727469636c65", 0, "", "message/news", "Usenet news message"], ["506174683a", 0, "", "message/news", "Usenet news message"], ["587265663a", 0, "", "message/news", "Usenet news message"], ["2320786d6364", 0, "", "text/xmcd", "XMCD CD database"], ["4344303031", 32769, ".iso", "application/octet-stream", "ISO-9660 CD Disc Image file"], ["4344303031", 34817, ".iso", "application/octet-stream", "ISO-9660 CD Disc Image file"], ["4344303031", 36865, ".iso", "application/octet-stream", "ISO-9660 CD Disc Image file"], ["28b52ffd", 0, ".zst", "application/zstd", "ZStandard Archive"], ["28b52ffd", 0, ".tzst", "application/x-zstd-compressed-tar", "ZStandard Tar Archive"], ["28b52ffd", 0, ".tar.zst", "application/x-zstd-compressed-tar", "ZStandard Tar Archive"], ["04224d18", 0, ".lz4", "application/x-lz4", "LZ4 Archive"], ["04224d18", 0, ".tlz4", "application/x-lz4-compressed-tar", "LZ4 Tar Archive"], ["04224d18", 0, ".tar.lz4", "application/x-lz4-compressed-tar", "LZ4 Tar Archive"], ["4f50434c444154", 0, ".attachment", "", "1Password 4 Cloud Keychain"], ["63616666", 0, ".caf", "audio/x-caf", "Apple Core Audio File"], ["667479704d344120", 4, ".m4a", "", "Apple Lossless Audio Codec file"], ["3c7e363c5c255f30675371683b", 0, ".b85", "", "BASE85 file"], ["425047fb", 0, ".bpg", "", "Better Portable Graphics"], ["000000006231050009000000002000000009000000000000", 8, ".dat", "", "Bitcoin Core wallet.dat file"], ["f9beb4d9", 0, ".dat", "", "Bitcoin-Qt blockchain block file"], ["426c696e6b", 0, ".bli", "", "Blink compressed archive"], ["2350454330303031", 0, ".pec", "", "Brother-Babylock-Bernina Home Embroidery"], ["2350455330", 0, ".pes", "", "Brother-Babylock-Bernina Home Embroidery"], ["43616c63756c757820496e646f6f7220", 0, ".cin", "", "Calculux Indoor lighting project file"], ["4349534f", 0, ".cso", "", "Compressed ISO CD image"], ["00000000000000000000000000000000", 0, ".xxx", "", "Compucon-Singer embroidery design file"], ["437265617469766520566f6963652046", 0, ".voc", "audio/voc", "Creative Voice"], ["3c43736f756e6453796e74686573697a", 0, ".csd", "", "Csound music"], ["6465780a", 0, ".dex", "", "Dalvik (Android) executable file"], ["44415800", 0, ".dax", "", "DAX Compressed CD image"], ["7e742c015070024d52", 0, ".img", "", "Digital Watchdog DW-TP-500G audio"], ["44535462", 0, ".dst", "", "DST Compression"], ["10000000", 0, ".cl5", "", "Easy CD Creator 5 Layout file"], ["455646320d0a81", 0, ".ex01", "", "EnCase Evidence File Format V2"], ["4644424800", 0, ".fdb", "", "Fiasco database definition file"], ["01003930", 0, ".fdb", "", "Firebird and Interbase database files"], ["01003930", 0, ".gdb", "", "Firebird and Interbase database files"], [ "53494d504c4520203d202020202020202020202020202020202020202054", 0, ".fits", "image/fits", "Flexible Image Transport System (FITS) file" ], ["256269746d6170", 0, ".fbm", "", "Fuzzy bitmap (FBM) file"], ["47656e65746563204f6d6e6963617374", 0, ".g64", "", "Genetec video archive"], ["67696d7020786366", 0, ".xcf", "image/x-xcf", "GIMP file"], ["3c6770782076657273696f6e3d22312e", 0, ".gpx", "", "GPS Exchange (v1.1)"], ["5dfcc800", 0, ".hus", "", "Husqvarna Designer"], ["496e7465724063746976652050616765", 0, ".ipd", "", "Inter@ctive Pager Backup (BlackBerry file"], ["cececece", 0, ".jceks", "", "Java Cryptography Extension keystore"], ["974a42320d0a1a0a", 0, ".jb2", "", "JBIG2 image file"], ["802a5fd7", 0, ".cin", "", "Kodak Cineon image"], ["5a5753", 0, ".swf", "application/x-shockwave-flash", "Macromedia Shockwave Flash"], ["2142444e", 0, ".ost", "", "Microsoft Outlook Exchange Offline Storage Folder"], ["4d5357494d", 0, ".wim", "", "Microsoft Windows Imaging Format"], ["504d4f43434d4f43", 0, ".pmoccmoc", "", "Microsoft Windows User State Migration Tool"], ["fff9", 0, ".aac", "audio/aac", "MPEG-2 AAC audio"], ["fff1", 0, ".aac", "audio/aac", "MPEG-4 AAC audio"], ["6674797033677035", 4, ".mp4", "video/mp4", "MPEG-4 video file"], ["0000001c66747970", 0, ".mp4", "video/mp4", "MPEG-4 video"], ["fdffffff02", 512, ".pub", "", "MS Publisher file subheader"], ["53505642", 0, ".spvb", "", "MultiBit Bitcoin blockchain file"], ["0a166f72672e626974636f696e2e7072", 0, ".wallet", "", "MultiBit Bitcoin wallet file"], ["6d756c74694269742e696e666f", 0, ".info", "", "MultiBit Bitcoin wallet information"], ["504b03040a000200", 0, ".epub", "", "Open Publication Structure eBook"], ["762f3101", 0, ".exr", "image/x-exr", "OpenEXR bitmap image"], ["bebafeca0f50616c6d53472044617461", 0, ".dat", "", "Palm Desktop DateBook"], ["3203100000000000000080000000ff00", 0, ".pcs", "", "Pfaff Home Embroidery"], ["426567696e20507566666572", 0, ".apuf", "", "Puffer ASCII encrypted archive"], ["50554658", 0, ".puf", "", "Puffer encrypted archive"], ["ff0a00", 0, ".qrp", "", "QuickReport Report"], ["6674797071742020", 4, ".mov", "video/quicktime", "QuickTime movie"], ["43444441666d7420", 8, ".cda", "", "RIFF CD audio"], ["514c434d666d7420", 8, ".qcp", "audio/vnd.qcelp", "RIFF Qualcomm PureVoice"], ["52494646", 0, ".webp", "image/webp", "RIFF WebP"], ["524d494464617461", 8, ".rmi", "", "RIFF Windows MIDI"], ["484541444552205245434f52442a2a2a", 0, ".xpt", "", "SAS Transport dataset"], ["232153494c4b0a", 0, ".sil", "", "Skype audio compression"], ["58504453", 0, ".dpx", "", "SMPTE DPX file (little endian)"], ["424c49323233", 0, ".bin", "application/x-binary", "Speedtouch router firmware"], ["424c49323233", 0, ".bli", "application/octet-stream", "Speedtouch router firmware"], ["424c49323233", 0, ".rbi", "application/octet-stream", "Speedtouch router firmware"], ["49443303000000", 0, ".koz", "audio/vnd.audiokoz", "Sprint Music Store audio"], ["5350464900", 0, ".spf", "", "StorageCraft ShadownProtect backup file"], ["4c413a", 0, ".dst", "", "Tajima emboridery"], ["4d435720546563686e6f676f6c696573", 0, ".mte", "", "TargetExpress target file"], ["01014719a400000000000000", 0, ".tbi", "", "The Bat! Message Base Index"], ["2f2f203c212d2d203c6d64623a6d6f726b3a7a", 0, ".msf", "", "Thunderbird|Mozilla Mail Summary File"], ["0001000000", 0, ".ttf", "", "TrueType font file"], ["626567696e2d626173653634", 0, ".b64", "", "UUencoded BASE64 file"], ["4d73526366", 0, ".gdb", "", "VMapSource GPS Waypoint Database"], ["5b564d445d", 0, ".vmd", "application/vocaltec-media-desc", "VocalTec VoIP media file"], ["54485000", 0, ".thp", "", "Wii-GameCube"], ["69736f32617663316d7034", 20, ".mp4", "video/mp4", "MP4 Video"], ["434d4d4d15000000", 0, ".db", "", "Windows 7 thumbnail"], ["494d4d4d15000000", 0, ".db", "", "Windows 7 thumbnail"], ["0000000014000000", 0, ".tbi", "", "Windows Disk Image"], ["53434341", 4, ".pf", "", "Windows prefetch"], ["6f70646174613031", 0, "", "", "1Password 4 Cloud Keychain encrypted data"], ["eb52902d4656452d", 0, "", "", "BitLocker boot sector (Vista)"], ["eb58902d4656452d", 0, "", "", "BitLocker boot sector (Win7)"], ["f0ffff", 0, "", "", "FAT12 File Allocation Table"], ["f8ffffff", 0, "", "", "FAT16 File Allocation Table"], ["f8ffff0fffffff0f", 0, "", "", "FAT32 File Allocation Table"], ["f8ffff0fffffffff", 0, "", "", "FAT32 File Allocation Table"], ["feedfeed", 0, "", "", "JavaKeyStore"], ["000dbba0", 0, "", "", "Mbox table of contents file"], ["42414144", 0, "", "", "NTFS MFT (BAAD)"], ["46494c45", 0, "", "", "NTFS MFT (FILE)"], ["cefaedfe", 0, "", "", "OS X ABI Mach-O binary (32-bit reverse)"], ["feedface", 0, "", "", "OS X ABI Mach-O binary (32-bit)"], ["cffaedfe", 0, "", "", "OS X ABI Mach-O binary (64-bit reverse)"], ["feedfacf", 0, "", "", "OS X ABI Mach-O binary (64-bit)"], ["7c4bc374e1c853a479b9011dfc4fdd13", 0, ".csd", "", "Huskygram Poem or Singer embroidery"], ["49495500", 0, ".raw", "application/octet-stream", "Raw Image File"], ["49495500", 0, ".rw2", "application/octet-stream", "Raw Image File"], ["49495253", 0, ".orf", "application/octet-stream", "Raw Image File"], ["4d6178324f626a", 2, ".obj", "text/plain", "Wavefront geometry definition file format"], ["426c656e646572", 2, ".obj", "text/plain", "Wavefront geometry definition file format"], ["4d6178324d746c", 2, ".mtl", "text/plain", "Material Definitions for OBJ Files"], ["426c656e646572204d544c2046696c65", 2, ".mtl", "text/plain", "Material Definitions for OBJ Files"], ["787369", 0, ".xsi", "text/plain", "Softimage XSI 3D Image"], ["706c79", 50, ".ply", "text/plain", "Finale Playback File"], ["4d617961", 2, ".ma", "text/plain", "Maya Project File"], ["56524d4c", 1, ".wrl", "text/plain", "VRML World"], ["583344", 50, ".x3d", "application/xml", "Xara3D Project"], ["464258", 2, ".fbx", "application/octet-stream", "Autodesk FBX Interchange File"], ["4d533344", 0, ".ms3d", "application/octet-stream", "MilkShape 3D Model"], ["5843344443344436", 0, ".c4d", "application/octet-stream", "Cinema 4D Model File"], ["2321414d", 0, ".amr", "application/octet-stream", "Adaptive Multi-Rate Codec File"], ["4372656174697665", 0, ".voc", "application/octet-stream", "Creative Labs Audio File"], ["6d6174726f736b61", 31, ".mka", "audio/x-matroska", "Matroska Audio File"], ["6d6174726f736b61", 31, ".mkv", "video/x-matroska", "Matroska Video File"], ["74657874", 73, ".odt", "application/vnd.oasis.opendocument.text", "OpenDocument Text File"], [ "70726573656e746174696f6e", 73, ".odp", "application/vnd.oasis.opendocument.presentation", "OpenDocument Presentation" ], [ "7370726561647368656574", 73, ".ods", "application/vnd.oasis.opendocument.spreadsheet", "OpenDocument Spreadsheet" ], ["526172211a070100", 0, ".rar", "application/vnd.rar", "RAR Archive"], ["4d5a9000", 0, ".exe", "application/vnd.microsoft.portable-executable", "Windows Executable"], ["00010000", 0, ".ttf", "font/ttf", "TTF Font"], ["774f4632", 0, ".woff2", "font/woff2", "WOFF2 Font"], ["3082", 0, ".cat", "application/vnd.ms-pki.seccat", "Windows System File"], ["4d5a9000", 0, ".dll", "application/vnd.microsoft.portable-executable", "Windows DLL File"], ["4d5a9000", 0, ".drv", "application/vnd.microsoft.portable-executable", "Windows Driver File"], ["73646266", 8, ".sdb", "application/vnd.microsoft.portable-executable", "Windows System File"], ["4d5a8000", 0, ".sys", "application/vnd.microsoft.portable-executable", "Windows System File"], ["4d5a9000", 0, ".sys", "application/vnd.microsoft.portable-executable", "Windows System File"], [ "57696e646f7773205265676973747279", 0, ".reg", "application/vnd.microsoft.portable-executable", "Windows Registry File" ], ["3c73766720", 0, ".svg", "image/svg+xml", "Scalable Vector Graphics Image"], [ "3c3f786d6c2076657273696f6e3d22312e3022207374616e64616c6f6e653d22796573223f3e0a3c73766720", 0, ".svg", "image/svg+xml", "Scalable Vector Graphics Image" ], [ "3c3f786d6c2076657273696f6e3d22312e3022207374616e64616c6f6e653d22796573223f3e3c73766720", 0, ".svg", "image/svg+xml", "Scalable Vector Graphics Image" ], ["6674797061766966", 4, ".avif", "image/avif", "AV1 Image format"], ["6674797061766973", 4, ".avif", "image/avif", "AV1 Image format sequence (AVIS)"], ["6674797068656963", 4, ".heif", "image/heif", "HEIF Image format"], ["6674797068656978", 4, ".heic", "image/heic", "HEIC Image format (HEIX)"], ["6674797068657663", 4, ".heic", "image/heic", "HEIC Animated Image format (HEVC)"], ["6674797068657678", 4, ".heic", "image/heic", "HEIC Animated Image format (HEVX)"], ["6674797068656973", 4, ".heic", "image/heic", "HEIC Image format (HEIS scalable)"], ["667479706865696d", 4, ".heic", "image/heic", "HEIC Image format (HEIM multiview)"], ["667479706865766d", 4, ".heic", "image/heic", "HEIC Animated Image format (HEIM multiview)"], ["6674797068657673", 4, ".heic", "image/heic", "HEIC Animated Image format (HEIS scalable)"], ["4352454D", 44, ".ctm", "", "CreamTracker module"], ["3c747261636b206e616d653d22", 0, ".pt2", "", "PicaTune 2 module"], ["3c6d6c74", 38, ".mlt", "", "Shotcut project"], ["50503230", 0, ".pp", "", "PowerPacker compressed file (PP20)"], ["50503131", 0, ".pp", "", "PowerPacker compressed file (PP11)"], ["50583230", 0, ".pp", "", "PowerPacker encrypted compressed file (PX20)"], ["4efa", 0, ".fred", "", "FRED Editor tracker module"], ["4672656420456469746f7220", 0, ".fred", "", "FRED Editor song"], ["5a584159454d554c", 0, ".ay", "", "ZXAYEMUL AY audio"], ["70ff4e7544454c495249554d", 36, ".cust", "", "Custom Amiga Module audio"], ["70ff4e7544454c495249554d", 32, ".cust", "", "Custom Amiga Module audio"], ["4d454402", 0, ".med", "audio/x-mod", "MED module (MED2)"], ["4d454403", 0, ".med", "audio/x-mod", "MED module (MED3)"], ["4d454404", 0, ".med", "audio/x-mod", "MED module (MED4)"], ["4d4d4430", 0, ".med", "audio/x-mod", "Amiga MED tracker module (MMD0)"], ["4d4d4431", 0, ".med", "audio/x-mod", "Amiga OctaMED Professional tracker module (MMD1)"], ["4d4d4432", 0, ".med", "audio/x-mod", "Amiga OctaMED Professional V5 tracker module (MMD2)"], ["4d4d4433", 0, ".med", "audio/x-mod", "OctaMED Soundstudio tracker module (MMD3)"], ["4d544d", 0, ".mtm", "audio/x-mod", "Multi Track Module tracker audio"], ["6966", 0, ".669", "audio/x-mod", "669 Tracker Module audio"], ["4a4e", 0, ".669", "audio/x-mod", "Extended 669 Tracker Module audio"], ["4d41535f55547261636b5f5630", 0, ".ult", "audio/x-mod", "UltraTracker audio"], ["54485800", 0, ".ahx", "", "AHX-Module (formerly THX Music Tracker) audio (AHX0)"], ["54485801", 0, ".ahx", "", "AHX-Module (formerly THX Music Tracker) audio (AHX1)"], ["594D5354", 0, ".myst", "", "MYST YM audio"], ["48e7f1fe6100", 0, ".dw", "", "David Whittaker audio"], ["562E32", 26, ".bp", "", "Brian Postma SoundMon audio (V.2)"], ["562E33", 26, ".bp", "", "Brian Postma SoundMon audio (V.3)"], ["534F4E47", 60, ".sfx", "", "SoundFX tracker audio"], ["534f3331", 124, ".sfx2", "", "SoundFX 2.0 tracker audio"], ["ffffe002e102", 0, ".pn", "", "PokeyNoise Chiptune audio"], ["585041434b", 0, ".xpack", "", "XPACK compressed file"], ["4d2e4b2e", 1080, ".mod", "", "Soundtracker (and clones) module"], ["464c5434", 1080, ".mod", "", "StarTrekker 4 Channel module"], ["464c5438", 1080, ".mod", "", "StarTrekker 8 Channel module"], ["5354312e", 0, ".nt", "", "StarTrekker FM Synth Pattern file"], ["4f435441", 1080, ".mod", "", "OctaComposer module"], ["3243484e", 1080, ".mod", "", "Fast Tracker 2 Channel module"], ["3443484e", 1080, ".mod", "", "Fast Tracker 4 Channel module"], ["3643484e", 1080, ".mod", "", "Fast Tracker 6 Channel module"], ["3843484e", 1080, ".mod", "", "Fast Tracker 8 Channel module"], ["31304348", 1080, ".mod", "", "Fast Tracker 10 Channel module"], ["31324348", 1080, ".mod", "", "Fast Tracker 12 Channel module"], ["31344348", 1080, ".mod", "", "Fast Tracker 14 Channel module"], ["31364348", 1080, ".mod", "", "Fast Tracker 16 Channel module"], ["31384348", 1080, ".mod", "", "Fast Tracker 18 Channel module"], ["32304348", 1080, ".mod", "", "Fast Tracker 20 Channel module"], ["32324348", 1080, ".mod", "", "Fast Tracker 22 Channel module"], ["32344348", 1080, ".mod", "", "Fast Tracker 24 Channel module"], ["32364348", 1080, ".mod", "", "Fast Tracker 26 Channel module"], ["32384348", 1080, ".mod", "", "Fast Tracker 28 Channel module"], ["33304348", 1080, ".mod", "", "Fast Tracker 30 Channel module"], ["33324348", 1080, ".mod", "", "Fast Tracker 32 Channel module"], ["43443831", 1080, ".mod", "", "Falcon 8 channel module"], ["54445a31", 1080, ".mod", "", "TakeTracker 1 channel module"], ["54445a32", 1080, ".mod", "", "TakeTracker 2 channel module"], ["54445A33", 1080, ".mod", "", "TakeTracker 3 channel module"], ["3543484E", 1080, ".mod", "", "TakeTracker 5 channel module"], ["3743484E", 1080, ".mod", "", "TakeTracker 7 channel module"], ["3943484E", 1080, ".mod", "", "TakeTracker 9 channel module"], ["31314348", 1080, ".mod", "", "TakeTracker 11 channel module"], ["31334348", 1080, ".mod", "", "TakeTracker 13 channel module"], ["31354348", 1080, ".mod", "", "TakeTracker 15 channel module"], ["4D264B21", 1080, ".mod", "", "fleg's module train-er module"], ["4d214b21", 1080, ".mod", "", "ProTracker 2.3 >64 Patterns module"], ["4e2e542e", 1080, ".mod", "", "NoiseTracker module module"], ["5041434b", 0, ".mod", "", "SoundTracker compressed song data"], ["534d4f44", 0, ".fc", "", "Future Composer module (1.0-1.3)"], ["46433134", 0, ".fc", "", "Future Composer module (1.4)"], ["414E20434F4F4C2E", 0, ".mod", "", "TCB Tracker module"], ["414E20434F4F4C21", 0, ".mod", "", "TCB Tracker module"], ["53464844", 0, ".pmc", "", "PowerplayerMusic Cruncher file (1.0)"], ["53464344", 0, ".pmc", "", "PowerplayerMusic Cruncher file (2.0)"], ["4d544e", 1464, ".mod", "", "SoundTracker 2.6 module"], ["4f4b5441534f4e47", 0, ".okt", "", "Oktalyzer tracker module (IFF Style)"], ["504b0304", 0, ".apk", "", "Android Application Package"], ["0000000c4a5853200d0a870a", 0, ".jxs", "image/jxs", "JPEG XS image"], ["ff10ff50", 0, ".jxsc", "image/jxsc", "JPEG XS codestream"], ["ff10ff50", 0, ".jxsv", "video/jxsv", "JPEG XS video"], ["23646566696e6520", 0, ".xbm", "image/x-xbitmap", "X BitMap image"], ["716f6966", 0, ".qoi", "", "Quite OK image"], ["716f6166", 0, ".qoa", "", "Quite OK audio"], ["464f524d", 0, ".sc2", "", "SimCity 2000 Map File"], ["5a585461706521", 0, ".tzx", "", "TZX Cassette Tape File"], ["5046", 0, ".pfm", "", "Portable Float Map (Colour)"], ["5066", 0, ".pfm", "", "Portable Float Map (Greyscale)"], ["504634", 0, ".pfm", "", "Augmented Portable Float Map"], ["5037", 0, ".pam", "image/x-portable-arbitrarymap", "Portable Arbitrary Map"], ["46535344", 65, ".hcom", "", "HCOM Audio File (FSSD Header)"], ["48434f4d", 128, ".hcom", "", "HCOM Audio File"], ["534f554e44", 0, ".sndt", "", "SoundTool/SNDTOOL Audio File"], ["3030", 0, ".sndr", "", "Sounder Audio File"], ["7668647866696c65", 0, ".vhdx", "", "Virtual PC HD image (VHDX)"], ["514649fb00000001", 0, ".qcow", "", "QEMU HD Image"], ["514649fb00000002", 0, ".qcow2", "", "QEMU HD Image (QCOW2)"], ["514649fb00000003", 0, ".qcow2", "", "QEMU HD Image (QCOW3)"], ["514544", 0, ".qed", "", "QEMU Enhanced Disk Image"], ["4c554b53babe0001", 0, ".luks", "", "Linux Unified Key Setup Image (LUKS1)"], ["4c554b53babe0002", 0, ".luks", "", "Linux Unified Key Setup Image (LUKS2)"], ["3c3c3c2053756e2078564d205669727475616c426f78204469736b20496d616765203e3e3e", 0, ".vdi", "", "VirtualBox Disk Image (SUN)"], ["3c3c3c204f7261636c6520564d205669727475616c426f78204469736b20496d616765203e3e3e", 0, ".vdi", "", "VirtualBox Disk Image (ORACLE)"], ["73696262", 0, ".uif", "", "MagicISO Disk Image"], ["444141", 0, ".daa", "", "PowerISO Direct Access Archive"], ["474249", 0, ".gbi", "", "gBurner Disk Image"], ["5354414b", 4, ".hc", "", "Apple HyperCard Stack"], ["49735a21", 0, ".isz", "", "Compressed ISO image"], ["5b436c6f6e6543445d", 0, ".ccd", "", "CloneCD Control File"], ["ffffffffffffffffffffffff", 0, ".sub", "", "CloneCD Sub Channel File"], ["00ffffffffffffffffffff", 0, ".img", "", "CloneCD Image File"], ["f7fff9fffdfffbfff6fff7fff7fff5fff8fff7fff5fff0fffcfffafffafff7fff8fff6fff7fff7fff2fff2fff8", 0, ".img", "", "CloneCD Image File"], ["ffffffffffffffffffffffff", 0, ".b5i", "", "BlindWrite 5 Image File"], ["425754352053545245414d205349474e", 0, ".b5t", "", "BlindWrite 5 Stream File"], ["425754352053545245414d205349474e", 0, ".b6t", "", "BlindWrite 6 Stream File"], ["4164617074656320436551756164726174205669727475616c43442046696c65", 0, ".c2d", "", "WinOnCD Image file (Adaptec version)"], ["526f78696f20496d6167652046696c6520466f726d617420332e30", 0, ".c2d", "", "WinOnCD Image file (Roxio version)"], ["4d454449412044455343524950544f5201", 0, ".mds", "", "Alcohol 120% Image Data File"], ["4d454449412044455343524950544f5201", 0, ".xmd", "", "GameJack Image Data File"], ["4d454449412044455343524950544f5202", 0, ".mdx", "", "Daemon Tools image file"], ["45520200", 0, ".toast", "", "Apple CD Image File"], ["504b0304", 0, ".cbz", "application/vnd.comicbook+zip", "Comic Book Archive (ZIP compression)"], ["377abcaf271c", 0, ".cb7", "", "Comic Book Archive (7-Zip compression)"], ["7573746172", 257, ".cbt", "", "Comic Book Archive (TAR compression)"], ["2a2a4143452a2a", 7, ".cba", "", "Comic Book Archive (ACE compression)"], ["526172211a0700", 0, ".cbr", "application/vnd.comicbook-rar", "Comic Book Archive (RAR compression)"], ["424f4f4b4d4f4249", 60, ".mobi", "application/x-mobipocket-ebook", "Mobipocket eBook file"], ["5445587452454164", 60, ".prc", "application/vnd.palm", "PalmDOC eBook file"], ["424f4f4b4d4f4249", 60, ".azw", "application/vnd.amazon.mobi8-ebook", "Amazon Kindle eBook file"], ["424f4f4b4d4f4249", 60, ".azw3", "application/vnd.amazon.mobi8-ebook", "Amazon Kindle Format 8 eBook file (KF8 MOBI Format)"], ["ea44524d494f4eeee00100eaee9e8183de9a86be97de95848d50726f74656374656444617461", 0, ".azw4", "application/vnd.amazon.mobi8-ebook", "Amazon Print Replica ebook file (KFX/KF10)"], ["ea44524d494f4eeee00100eaee9e8183de9a86be97de95848d50726f74656374656444617461", 0, ".kfx", "application/vnd.amazon.mobi8-ebook", "Amazon Print Replica ebook file (KFX/KF10)"], ["e00100eaee9e8183de9a86be97de95848d50726f74656374656444617461", 0, ".voucher", "", "Amazon Print Replica ebook DRM file"], ["7b226d6435223a22", 0, ".voucher", "", "Amazon Print Replica ebook metadata file"], ["3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e", 0, ".phl", "", "Amazon Kindle Popular Highlights file"], ["434f4e540200", 0, ".azw.res", "", "Amazon Kindle Resource Container file"], ["434f4e540200", 0, ".azw.md", "", "Amazon Kindle Metadata Container file"], ["2e70646641444245", 60, ".pdb", "application/vnd.palm", "PalmDB Adobe Reader file"], ["42566f6b42444943", 60, ".pdb", "application/vnd.palm", "PalmDB BDicty Dictionary Reader file"], ["4442393944424f53", 60, ".pdb", "application/vnd.palm", "PalmDB DB file"], ["504e526450507273", 60, ".pdb", "application/vnd.palm", "PalmDB eReader / Palm Reader file"], ["4461746150507273", 60, ".pdb", "application/vnd.palm", "PalmDB eReader file"], ["76494d4756696577", 60, ".pdb", "application/vnd.palm", "PalmDB FireViewer/ImageViewer file"], ["506d4442506d4442", 60, ".pdb", "application/vnd.palm", "PalmDB HanDBase file"], ["496e666f494e4442", 60, ".pdb", "application/vnd.palm", "PalmDB InfoView file"], ["546f476f546f476f", 60, ".pdb", "application/vnd.palm", "PalmDB iSilo file"], ["53446f6353696c58", 60, ".pdb", "application/vnd.palm", "PalmDB iSilo 3 file"], ["4a6244624a426173", 60, ".pdb", "application/vnd.palm", "PalmDB JFile file"], ["4a6644624a46696c", 60, ".pdb", "application/vnd.palm", "PalmDB JFile Pro file"], ["444154414c536462", 60, ".pdb", "application/vnd.palm", "PalmDB LIST file"], ["4d6f62696c654442", 60, ".pdb", "application/vnd.palm", "PalmDB MobileDB file"], ["44617461506c6b72", 60, ".pdb", "application/vnd.palm", "PalmDB Plucker file"], ["4461746153707264", 60, ".pdb", "application/vnd.palm", "PalmDB QuickSheet file"], ["534d3031534d656d", 60, ".pdb", "application/vnd.palm", "PalmDB SuperMemo file"], ["54455874546c4463", 60, ".pdb", "application/vnd.palm", "PalmDB TealDoc file"], ["496e666f546c4966", 60, ".pdb", "application/vnd.palm", "PalmDB TealInfo file"], ["44617461546c4d6c", 60, ".pdb", "application/vnd.palm", "PalmDB TealMeal file"], ["44617461546c5074", 60, ".pdb", "application/vnd.palm", "PalmDB TealPaint file"], ["6461746154444250", 60, ".pdb", "application/vnd.palm", "PalmDB ThinkDB file"], ["5464617454696465", 60, ".pdb", "application/vnd.palm", "PalmDB Tides file"], ["546f526154525057", 60, ".pdb", "application/vnd.palm", "PalmDB TomeRaider file"], ["7a54585447506c6d", 60, ".pdb", "application/vnd.palm", "PalmDB TealInfo file"], ["42444f4357726453", 60, ".pdb", "application/vnd.palm", "PalmDB WordSmith file"], ["70716120636c7072", 60, ".pdb", "application/vnd.palm", "PalmDB Palm Query Application file"], ["444154414772503f", 60, ".pdb", "application/vnd.palm", "PalmDB GrayPaint file"], ["6170706c", 60, ".pdb", "application/vnd.palm", "PalmDB Palm Application file"], ["7a545854", 60, ".pdb", "application/vnd.palm", "PalmDB zTXT compressed file"], ["370000106d000010d2160010dcf4ddfcd1", 0, ".tr", "", "TomeRaider2 eBook file"], ["370000106d000010d2160010dcf4ddfcd1", 0, ".tr2", "", "TomeRaider2 eBook file"], ["5452334454523343", 60, ".tr3", "", "TomeRaider3 eBook file"], ["3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d38223f3e0a3c46696374696f6e426f6f6b", 0, ".fb2", "application/fictionbook2+zip", "FictionBook 2.0 eBook file"], ["504b0304", 0, ".fb2.zip", "application/fictionbook2+zip", "FictionBook 2 eBook file (Zip compressed)"], ["504b0304", 0, ".fbz", "application/fictionbook2+zip", "FictionBook 2 eBook file (Zip compressed)"], ["504b0304", 0, ".fb3", "application/fictionbook3+zip", "FictionBook 3 eBook file"], ["3a42617365", 0, ".cnt", "", "Windows Help CoNTent file "], ["4c00520046000000", 0, ".lrf", "application/x-ext-lrf", "Sony Broad Band (BBeB) eBook file"], ["2121382d4269742121", 0, ".tcr", "", "Sony Broad Band (BBeB) eBook file"], ["b00cb00c", 0, ".rb", "application/x-rocketbook", "Rocket eBook file"], ["b00cc0de", 0, ".rb", "", "Rocket eBook system file"], ["b00cf00d", 0, ".rb", "", "Rocket eBook system file"], ["534e425030303042", 0, ".snb", "application/x-snb-ebook", "Shanda Bambook eBook file"], ["3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d227574662d38223f3e0d0a3c43686561745461626c65", 0, ".CETRAINER", "", "Cheat Engine Trainer file"], ["1d000000", 0, ".bsp", "", "Quake level file"], ["1c000000", 0, ".bsp", "", "Quake model file"], ["4944504f", 0, ".mdl", "", "Quake model file"], ["7b0a22", 0, ".map", "", "Quake map file"], ["49445350", 0, ".spr", "", "Quake sprite file"], ["28", 0, ".pickle", "", "Python Pickle file (Protocol 0)"], ["7d71", 0, ".pickle", "", "Python Pickle file (Protocol 1)"], ["8002", 0, ".pickle", "", "Python Pickle file (Protocol 2)"], ["8003", 0, ".pickle", "", "Python Pickle file (Protocol 3)"], ["8004", 0, ".pickle", "", "Python Pickle file (Protocol 4)"], ["8005", 0, ".pickle", "", "Python Pickle file (Protocol 5)"], ["534d4b32", 0, ".smk", "video/vnd.radgamettools.smacker", "Smacker video file (Early format)"], ["534d4b34", 0, ".smk", "video/vnd.radgamettools.smacker", "Smacker video file (Later format)"] , ["42494b", 0, ".bik", "video/vnd.radgametools.bink", "Bink video file"], ["40646174616261736520616d69676167756964652e6775696465", 0, ".guide", "", "AmigaGuide document file"], ["43524944", 0, ".usm", "", "CRI Movie 2 file"], ["20540200000005540200", 0, ".wdb", "application/vnd.ms-works", "Microsoft Works Database file (Early version)"], ["d0cf11e0a1b11ae1", 0, ".wdb", "application/vnd.ms-works", "Microsoft Works Database file (Later version)"], ["d0cf11e0a1b11ae1", 0, ".xlr", "application/vnd.ms-works", "Microsoft Works spreadsheet (Version 6+)"], ["01fe", 0, ".wps", "application/vnd.ms-works", "Microsoft Works Word document (Version 1-2)"], ["4949bc01", 0, ".jxr", "image/jxr", "JPEG XR image"], ["4949bc01", 0, ".wdp", "image/vnd.ms-photo", "JPEG XR image"], ["ffd8fff7", 0, ".jls", "image/jls", "JPEG-LS image"], ["5244534b", 0, ".hdf", "", "Amiga Harddisk image"], ["504653", 0, ".hdf", "", "Amiga Harddisk image (Professional Filesystem 3)"], ["504453", 0, ".hdf", "", "Amiga Harddisk image (Professional Filesystem 3)"], ["534653", 0, ".hdf", "", "Amiga Harddisk image (Smart File System)"], ["d0cf11e0a1b11ae1", 0, ".msg", "application/vnd.ms-outlook", "Outlook 97-2003 Item File"] ] } puremagic-2.2.0/puremagic/main.py000066400000000000000000000606401516533066500167610ustar00rootroot00000000000000#!/usr/bin/env python """ puremagic is a pure python module that will identify a file based off it's magic numbers. It is designed to be minimalistic and inherently cross-platform compatible, with no imports when used as a module. © 2013-2025 Chris Griffith - License: MIT (see LICENSE) Acknowledgements Gary C. Kessler For use of his File Signature Tables, available at: https://filesig.search.org/ """ import json import os from binascii import unhexlify from collections import namedtuple from itertools import chain from pathlib import Path import puremagic if os.getenv("PUREMAGIC_DEEPSCAN") != "0": from puremagic.scanners import ( zip_scanner, pdf_scanner, text_scanner, json_scanner, python_scanner, sndhdr_scanner, mpeg_audio_scanner, hdf5_scanner, cfbf_scanner, ogg_scanner, asf_scanner, ebml_scanner, ) __author__ = "Chris Griffith" __version__ = "2.2.0" __all__ = [ "magic_file", "magic_string", "magic_stream", "magic_extension", "from_file", "from_string", "from_stream", "from_extension", "ext_from_filename", "PureError", "PureMagic", "PureMagicWithConfidence", ] here = os.path.abspath(os.path.dirname(__file__)) PureMagic = namedtuple( "PureMagic", ( "byte_match", "offset", "extension", "mime_type", "name", ), ) PureMagicWithConfidence = namedtuple( "PureMagicWithConfidence", ( "byte_match", "offset", "extension", "mime_type", "name", "confidence", ), ) class PureError(LookupError): """Do not have that type of file in our databanks""" class PureValueError(ValueError): """Invalid input""" def magic_data( filename: os.PathLike | str = os.path.join(here, "magic_data.json"), ) -> tuple[list[PureMagic], list[PureMagic], list[PureMagic], dict[bytes, list[PureMagic]]]: """Read the magic file""" with open(filename, encoding="utf-8") as f: data = json.load(f) headers = sorted((create_puremagic(x) for x in data["headers"]), key=lambda x: x.byte_match) footers = sorted((create_puremagic(x) for x in data["footers"]), key=lambda x: x.byte_match) extensions = [create_puremagic(x) for x in data["extension_only"]] multi_part_extensions = {} for file_match, option_list in data["multi-part"].items(): multi_part_extensions[unhexlify(file_match.encode("ascii"))] = [create_puremagic(x) for x in option_list] return headers, footers, extensions, multi_part_extensions def create_puremagic(x: list) -> PureMagic: return PureMagic( byte_match=unhexlify(x[0].encode("ascii")), offset=x[1], extension=x[2], mime_type=x[3], name=x[4], ) magic_header_array, magic_footer_array, extension_only_array, multi_part_dict = magic_data() def get_max_lengths() -> tuple[int, int]: """The length of the largest magic string + its offset""" max_header_length = max([len(x.byte_match) + x.offset for x in magic_header_array]) max_footer_length = max([len(x.byte_match) + abs(x.offset) for x in magic_footer_array]) for options in multi_part_dict.values(): for option in options: if option.offset < 0: max_footer_length = max(max_footer_length, len(option.byte_match) + abs(option.offset)) else: max_header_length = max(max_header_length, len(option.byte_match) + option.offset) return max_header_length, max_footer_length max_head, max_foot = get_max_lengths() def determine_confidence(matches, ext=None) -> list[PureMagicWithConfidence]: """Rough confidence based on string length and file extension""" results = [] for match in matches: con = 0.8 if len(match.byte_match) >= 9 else float(f"0.{len(match.byte_match)}") if con >= 0.1 and ext and ext == match.extension: con = 0.9 results.append(PureMagicWithConfidence(confidence=con, **match._asdict())) if not results and ext: results = [ PureMagicWithConfidence(confidence=0.1, **magic_row._asdict()) for magic_row in extension_only_array if ext == magic_row.extension ] return sorted(results, key=lambda x: (x.confidence, len(x.byte_match)), reverse=True) def identify_all(header: bytes, footer: bytes, ext=None) -> list[PureMagicWithConfidence]: """Attempt to identify 'data' by its magic numbers""" # Capture the length of the data # That way we do not try to identify bytes that don't exist matches = [] for magic_row in magic_header_array: start = magic_row.offset end = magic_row.offset + len(magic_row.byte_match) if end > len(header): continue if header[start:end] == magic_row.byte_match: matches.append(magic_row) for magic_row in magic_footer_array: start = magic_row.offset end = magic_row.offset + len(magic_row.byte_match) match_area = footer[start:end] if end != 0 else footer[start:] if match_area == magic_row.byte_match: matches.append(magic_row) new_matches = set() for matched in matches: if matched.byte_match in multi_part_dict: for magic_row in multi_part_dict[matched.byte_match]: start = magic_row.offset end = magic_row.offset + len(magic_row.byte_match) if magic_row.offset < 0: match_area = footer[start:end] if end != 0 else footer[start:] if match_area == magic_row.byte_match: new_matches.add( PureMagic( byte_match=matched.byte_match + magic_row.byte_match, offset=magic_row.offset, extension=magic_row.extension, mime_type=magic_row.mime_type, name=magic_row.name, ) ) else: if end > len(header): continue if header[start:end] == magic_row.byte_match: new_matches.add( PureMagic( byte_match=header[matched.offset : end], offset=magic_row.offset, extension=magic_row.extension, mime_type=magic_row.mime_type, name=magic_row.name, ) ) matches.extend(list(new_matches)) return determine_confidence(matches, ext) def perform_magic(header: bytes | None, footer: bytes | None, mime: bool | None, ext=None, filename=None) -> str: """Discover what type of file it is based on the incoming string""" if not header: raise PureValueError("Input was empty") if not footer: footer = b"" infos = identify_all(header, footer, ext) if filename and os.path.isfile(filename) and os.getenv("PUREMAGIC_DEEPSCAN") != "0": results = run_deep_scan(infos, filename, header, footer, raise_on_none=not infos) if results and results[0].extension != "": if mime: return results[0].mime_type return results[0].extension or "" # Deep scan returned empty extension or no results — fall through to original matches if not infos: raise PureError("Could not identify file") info = infos[0] if mime: return info.mime_type return info.extension if not isinstance(info.extension, list) else info[0].extension def file_details(filename: os.PathLike | str) -> tuple[bytes, bytes]: """Grab the start and end of the file""" if not os.path.isfile(filename): raise PureError("Not a regular file") with open(filename, "rb") as fin: head = fin.read(max_head) try: fin.seek(-max_foot, os.SEEK_END) except OSError: fin.seek(0) foot = fin.read() return head, foot def string_details(string): """Grab the start and end of the string""" return string[:max_head], string[-max_foot:] def stream_details(stream): """Grab the start and end of the stream""" head = stream.read(max_head) try: stream.seek(-max_foot, os.SEEK_END) except (OSError, ValueError): # fsspec throws ValueError # File is smaller than the max_foot size, jump to beginning stream.seek(0) foot = stream.read() stream.seek(0) return head, foot def ext_from_filename(filename: os.PathLike | str) -> str: """Scan a filename for its extension. :param filename: string of the filename :return: the extension off the end (empty string if it can't find one) """ try: base, ext = str(filename).lower().rsplit(".", 1) except ValueError: return "" ext = f".{ext}" all_exts = [x.extension for x in chain(magic_header_array, magic_footer_array)] if base[-4:].startswith("."): # For double extensions like .tar.gz long_ext = base[-4:] + ext if long_ext in all_exts: return long_ext return ext def from_file(filename: os.PathLike | str, mime: bool = False) -> str: """Opens file, attempts to identify content based off magic number and will return the file extension. If mime is True it will return the mime type instead. :param filename: path to file :param mime: Return mime, not extension :return: guessed extension or mime """ head, foot = file_details(filename) return perform_magic(head, foot, mime, ext_from_filename(filename), filename=filename) def from_string(string: str | bytes, mime: bool = False, filename: os.PathLike | str | None = None) -> str: """Reads in string, attempts to identify content based off magic number and will return the file extension. If mime is True it will return the mime type instead. If filename is provided it will be used in the computation. :param string: string representation to check :param mime: Return mime, not extension :param filename: original filename :return: guessed extension or mime """ if isinstance(string, str): string = string.encode("utf-8") head, foot = string_details(string) ext = ext_from_filename(filename) if filename else None return perform_magic(head, foot, mime, ext, filename=filename) def from_stream(stream, mime: bool = False, filename: os.PathLike | str | None = None) -> str: """Reads in stream, attempts to identify content based off magic number and will return the file extension. If mime is True it will return the mime type instead. If filename is provided it will be used in the computation. :param stream: stream representation to check :param mime: Return mime, not extension :param filename: original filename :return: guessed extension or mime """ head, foot = stream_details(stream) ext = ext_from_filename(filename) if filename else None return perform_magic(head, foot, mime, ext, filename=filename) def magic_file(filename: os.PathLike | str) -> list[PureMagicWithConfidence]: """ Returns list of (num_of_matches, array_of_matches) arranged by highest confidence match first. :param filename: path to file :return: list of possible matches, highest confidence first """ head, foot = file_details(filename) if not head: raise PureValueError("Input was empty") try: info = identify_all(head, foot, ext_from_filename(filename)) except PureError: info = [] info.sort(key=lambda x: x.confidence, reverse=True) if os.getenv("PUREMAGIC_DEEPSCAN") != "0": return run_deep_scan(info, filename, head, foot, raise_on_none=False) return info def magic_string(string, filename: os.PathLike | str | None = None) -> list[PureMagicWithConfidence]: """ Returns tuple of (num_of_matches, array_of_matches) arranged by highest confidence match first If filename is provided it will be used in the computation. :param string: string representation to check :param filename: original filename :return: list of possible matches, highest confidence first """ if not string: raise PureValueError("Input was empty") head, foot = string_details(string) ext = ext_from_filename(filename) if filename else None info = identify_all(head, foot, ext) info.sort(key=lambda x: x.confidence, reverse=True) if filename and os.path.isfile(filename) and os.getenv("PUREMAGIC_DEEPSCAN") != "0": return run_deep_scan(info, filename, head, foot, raise_on_none=False) return info def magic_stream( stream, filename: os.PathLike | str | None = None, ) -> list[PureMagicWithConfidence]: """Returns tuple of (num_of_matches, array_of_matches) arranged by highest confidence match first If filename is provided it will be used in the computation. :param stream: stream representation to check :param filename: original filename :return: list of possible matches, highest confidence first """ head, foot = stream_details(stream) if not head: raise PureValueError("Input was empty") ext = ext_from_filename(filename) if filename else None info = identify_all(head, foot, ext) info.sort(key=lambda x: x.confidence, reverse=True) if filename and os.path.isfile(filename) and os.getenv("PUREMAGIC_DEEPSCAN") != "0": return run_deep_scan(info, filename, head, foot, raise_on_none=False) return info def from_extension(extension: str, mime: bool = True) -> str: """Look up a file type by its extension and return the MIME type or name. :param extension: file extension with or without leading dot (e.g. ".pdf" or "pdf") :param mime: Return mime type (default True), or human-readable name if False :return: MIME type string or name :raises PureError: if no match is found """ ext = extension.strip().lower() if not ext.startswith("."): ext = f".{ext}" matches = [] for entry in chain(magic_header_array, magic_footer_array, extension_only_array): if entry.extension == ext: matches.append(entry) if not matches: raise PureError(f"Could not find extension {ext!r} in magic database") # Prefer entries with longer byte_match (more specific signatures) matches.sort(key=lambda x: len(x.byte_match), reverse=True) best = matches[0] return best.mime_type if mime else best.name def magic_extension(extension: str) -> list[PureMagicWithConfidence]: """Return all matches for a given file extension. :param extension: file extension with or without leading dot (e.g. ".pdf" or "pdf") :return: list of PureMagicWithConfidence sorted by confidence descending """ ext = extension.strip().lower() if not ext.startswith("."): ext = f".{ext}" matches = [] for entry in chain(magic_header_array, magic_footer_array, extension_only_array): if entry.extension == ext: con = 0.8 if len(entry.byte_match) >= 9 else float(f"0.{len(entry.byte_match)}") matches.append(PureMagicWithConfidence(confidence=con, **entry._asdict())) return sorted(matches, key=lambda x: (x.confidence, len(x.byte_match)), reverse=True) def single_deep_scan( bytes_match: bytes | bytearray | None, filename: os.PathLike | str, head: bytes | None = None, foot: bytes | None = None, confidence: float = 0, ): if os.getenv("PUREMAGIC_DEEPSCAN") == "0": return None if head is None or foot is None: return None if not isinstance(filename, os.PathLike): filename = Path(filename) match bytes_match: case zip_scanner.match_bytes: return zip_scanner.main(filename, head, foot) case pdf_scanner.match_bytes: return pdf_scanner.main(filename, head, foot) case sndhdr_scanner.hcom_match_bytes | sndhdr_scanner.fssd_match_bytes | sndhdr_scanner.sndr_match_bytes: # sndr is a loose confidence and other results may be better result = sndhdr_scanner.main(filename, head, foot) if result and result.confidence > confidence: return result case mpeg_bytes if mpeg_bytes in mpeg_audio_scanner.mpeg_audio_signatures: result = mpeg_audio_scanner.main(filename, head, foot) if result and result.confidence > confidence: return result case cfbf_scanner.match_bytes | cfbf_scanner.match_bytes_short: return cfbf_scanner.main(filename, head, foot) case ogg_scanner.match_bytes: result = ogg_scanner.main(filename, head, foot) if result and result.confidence > confidence: return result case asf_scanner.match_bytes: return asf_scanner.main(filename, head, foot) case ebml_scanner.match_bytes: return ebml_scanner.main(filename, head, foot) if eml_result := text_scanner.eml_check(head): return eml_result # The first match wins for scanner in (pdf_scanner, python_scanner, json_scanner, hdf5_scanner): result = scanner.main(filename, head, foot) if result: return result return None def catch_all_deep_scan( filename: os.PathLike | str, head: bytes | None = None, foot: bytes | None = None, ): if os.getenv("PUREMAGIC_DEEPSCAN") == "0": return None if head is None or foot is None: return None if not isinstance(filename, os.PathLike): filename = Path(filename) return text_scanner.main(filename, head, foot) def run_deep_scan( matches: list[PureMagicWithConfidence], filename: os.PathLike | str, head: bytes | None = None, foot: bytes | None = None, raise_on_none: bool = True, ): if not matches or matches[0].byte_match == b"": try: result = single_deep_scan(None, filename, head, foot) except Exception: pass else: if result: return [ PureMagicWithConfidence( confidence=result.confidence, byte_match=None, offset=None, extension=result.extension, mime_type=result.mime_type, name=result.name, ) ] try: result = catch_all_deep_scan(filename, head, foot) except Exception: raise else: if result: return [ PureMagicWithConfidence( confidence=result.confidence, byte_match=None, offset=None, extension=result.extension, mime_type=result.mime_type, name=result.name, ) ] if raise_on_none: raise PureError("Could not identify file") for pure_magic_match in matches: # noinspection PyBroadException try: result = single_deep_scan(pure_magic_match.byte_match, filename, head, foot, pure_magic_match.confidence) except Exception: continue if result: return [ PureMagicWithConfidence( confidence=result.confidence, byte_match=pure_magic_match.byte_match, offset=pure_magic_match.offset, extension=result.extension, mime_type=result.mime_type, name=result.name, ) ] # No specific scanner matched — try the catch-all text scanner # Only override when existing matches are very low confidence (e.g. 2-byte BOM signatures) # Only let the catch-all text scanner override when existing matches are # generic text types (e.g. BOM-only signatures). If the magic database # already identified a specific non-text file type, trust it over a generic text guess. best_mime = matches[0].mime_type or "" is_generic = best_mime.startswith("text/") or best_mime == "application/octet-stream" or not best_mime if matches[0].confidence < 0.5 and is_generic: try: result = catch_all_deep_scan(filename, head, foot) except Exception: pass else: if result and result.extension and result.confidence > matches[0].confidence: return [ PureMagicWithConfidence( confidence=result.confidence, byte_match=None, offset=None, extension=result.extension, mime_type=result.mime_type, name=result.name, ) ] return matches def command_line_entry(*args): import sys # noqa: PLC0415 from argparse import ArgumentParser # noqa: PLC0415 parser = ArgumentParser( description=( """puremagic is a pure python file identification module. It looks for matching magic numbers in the file to locate the file type.""" ), ) parser.add_argument( "-m", "--mime", action="store_true", dest="mime", help="Return the mime type instead of file type", ) parser.add_argument("-v", "--verbose", action="store_true", dest="verbose", help="Print verbose output") parser.add_argument( "-e", "--extension", dest="extension", help="Look up MIME type for a file extension (e.g. pdf or .pdf)", ) parser.add_argument("files", nargs="*", type=Path) parser.add_argument("--version", action="version", version=puremagic.__version__) args = parser.parse_args(args if args else sys.argv[1:]) if args.extension: if args.verbose: matches = magic_extension(args.extension) if not matches: print(f"No matches found for extension '{args.extension}'") else: print(f"Total Possible Matches: {len(matches)}") for i, result in enumerate(matches): if i == 0: print("\n\tBest Match") else: print(f"\tAlternative Match #{i}") print(f"\tName: {result.name}") print(f"\tConfidence: {int(result.confidence * 100)}%") print(f"\tExtension: {result.extension}") print(f"\tMime Type: {result.mime_type}") print(f"\tByte Match: {result.byte_match}\n") else: try: print(from_extension(args.extension, mime=not args.mime)) except PureError as e: print(str(e)) return if not args.files: parser.error("the following arguments are required: files (or use -e/--extension)") for fn in args.files: if not fn.exists(): print(f"File '{fn}' does not exist!") continue if fn.is_dir(): for file in fn.iterdir(): if not file.is_file(): continue try: print(f"'{file}' : {from_file(file, args.mime)}") except (PureError, PureValueError): print(f"'{file}' : could not be Identified") continue else: try: print(f"'{fn}' : {from_file(fn, args.mime)}") except (PureError, PureValueError): print(f"'{fn}' : could not be Identified") continue if args.verbose: matches = magic_file(fn) print(f"Total Possible Matches: {len(matches)}") for i, result in enumerate(matches): if i == 0: print("\n\tDeepscan Match" if result.confidence == 1.0 else "\n\tBest Match") else: print(f"\tAlternative Match #{i}") print(f"\tName: {result.name}") print(f"\tConfidence: {int(result.confidence * 100)}%") print(f"\tExtension: {result.extension}") print(f"\tMime Type: {result.mime_type}") print(f"\tByte Match: {result.byte_match}") print(f"\tOffset: {result.offset}\n") if __name__ == "__main__": # pragma: no cover command_line_entry() puremagic-2.2.0/puremagic/py.typed000066400000000000000000000000001516533066500171420ustar00rootroot00000000000000puremagic-2.2.0/puremagic/scanners/000077500000000000000000000000001516533066500172715ustar00rootroot00000000000000puremagic-2.2.0/puremagic/scanners/__init__.py000066400000000000000000000000001516533066500213700ustar00rootroot00000000000000puremagic-2.2.0/puremagic/scanners/asf_scanner.py000066400000000000000000000037141516533066500221320ustar00rootroot00000000000000import os import struct from puremagic.scanners.helpers import Match # ASF Header Object GUID match_bytes = b"\x30\x26\xb2\x75\x8e\x66\xcf\x11\xa6\xd9\x00\xaa\x00\x62\xce\x6c" _STREAM_PROPS_GUID = b"\x91\x07\xdc\xb7\xb7\xa9\xcf\x11\x8e\xe6\x00\xc0\x0c\x20\x53\x65" _AUDIO_MEDIA_GUID = b"\x40\x9e\x69\xf8\x4d\x5b\xcf\x11\xa8\xfd\x00\x80\x5f\x5c\x44\x2b" _VIDEO_MEDIA_GUID = b"\xc0\xef\x19\xbc\x4d\x5b\xcf\x11\xa8\xfd\x00\x80\x5f\x5c\x44\x2b" def main(file_path: os.PathLike, head: bytes, foot: bytes) -> Match | None: if not head or len(head) < 30: return None if head[:16] != match_bytes: return None header_size = struct.unpack_from(" len(head): try: with open(file_path, "rb") as f: data = f.read(min(int(header_size), 65536)) except (OSError, ValueError): return None else: data = head has_audio = False has_video = False offset = 30 # Past header GUID(16) + size(8) + count(4) + reserved(2) for _ in range(min(obj_count, 50)): if offset + 24 > len(data): break obj_guid = data[offset : offset + 16] obj_size = struct.unpack_from(" set[str]: """Parse CFBF directory entries and return the set of stream/storage names.""" names: set[str] = set() for i in range(0, len(dir_data), 128): entry = dir_data[i : i + 128] if len(entry) < 128: break name_size = struct.unpack_from(" 64: continue obj_type = entry[66] # obj_type: 0=unknown, 1=storage, 2=stream, 5=root if obj_type not in (1, 2, 5): continue name = entry[: name_size - 2].decode("utf-16-le", errors="ignore") if name: names.add(name) return names def _extract_root_clsid(dir_data: bytes) -> bytes | None: """Extract the CLSID from the root directory entry (obj_type 5).""" for i in range(0, len(dir_data), 128): entry = dir_data[i : i + 128] if len(entry) < 96: break if entry[66] == 5: # Root storage return entry[80:96] return None def _identify_format(stream_names: set[str], dir_data: bytes) -> Match | None: """Match stream names and CLSIDs against known CFBF format signatures.""" # Check prefix matches first (e.g. __substg1.0_ for MSG) for name in stream_names: for prefix, ext, fmt_name, mime in _PREFIX_MATCHES: if name.startswith(prefix): return Match(ext, fmt_name, mime) # Check exact stream name matches in priority order for stream_name, ext, fmt_name, mime in _STREAM_MATCHES: if stream_name in stream_names: return Match(ext, fmt_name, mime) # Check multi-stream matches (all required streams must be present) for required_streams, ext, fmt_name, mime in _MULTI_STREAM_MATCHES: if all(s in stream_names for s in required_streams): return Match(ext, fmt_name, mime) # Check root CLSID root_clsid = _extract_root_clsid(dir_data) if root_clsid: for clsid, ext, fmt_name, mime in _CLSID_MATCHES: if root_clsid == clsid: return Match(ext, fmt_name, mime) return None def main(file_path: os.PathLike, head: bytes, foot: bytes) -> Match | None: if len(head) < 76: return None # Verify magic bytes if head[:8] != match_bytes: if head[:4] != match_bytes_short: return None # Parse CFBF header sector_shift = struct.unpack_from(" Match | None: if not head or len(head) < 8: return None if head[:4] != match_bytes: return None # Search for DocType string in the EBML header (first 64 bytes) search_area = head[:64] if b"webm" in search_area: return Match(".webm", "WebM Video", "video/webm") if b"matroska" in search_area: return Match(".mkv", "Matroska Video", "video/x-matroska") return None puremagic-2.2.0/puremagic/scanners/hdf5_scanner.py000066400000000000000000000041401516533066500222010ustar00rootroot00000000000000import os from puremagic.scanners.helpers import Match HDF5_MAGIC = b"\x89HDF\r\n\x1a\n" # HDF5 subtype signatures: (mandatory, optional, min_optional, ext, name, mime) # All mandatory strings must be present, plus at least min_optional of the optional strings. _SUBTYPES = [ # AnnData - single-cell genomics (h5ad) ([], [b"/obs", b"/var", b"/X"], 2, ".h5ad", "AnnData", "application/x-anndata"), # Loom - single-cell genomics ([], [b"/matrix", b"/row_attrs", b"/col_attrs"], 2, ".loom", "Loom single-cell data", "application/x-loom"), # Multi-resolution Cooler (must check before single-resolution) ( [b"/resolutions"], [b"/bins", b"/chroms"], 1, ".mcool", "Multi-resolution Cooler contact matrix", "application/x-mcool", ), # Cooler - genomic contact matrices ([], [b"/bins", b"/chroms", b"/pixels"], 2, ".cool", "Cooler contact matrix", "application/x-cooler"), # BIOM v2 - biological observation matrix ( [], [b"BIOM", b"/observation", b"/sample"], 2, ".biom2", "BIOM v2 biological observation matrix", "application/x-biom2", ), # mz5 - mass spectrometry ([], [b"/SpectrumMetaData", b"/ChromatogramList"], 1, ".mz5", "mz5 mass spectrometry data", "application/x-mz5"), # h5mlm - ML model ([], [b"model_type", b"h5mlm"], 1, ".h5mlm", "HDF5 ML model", "application/x-h5mlm"), ] def main(file_path: os.PathLike | str, head: bytes, foot: bytes) -> Match | None: if not head or not head.startswith(HDF5_MAGIC): return None # Read a larger chunk to find group/dataset names with open(file_path, "rb") as f: data = f.read(65536) for mandatory, optional, min_optional, ext, name, mime in _SUBTYPES: if not all(s in data for s in mandatory): continue opt_matches = sum(1 for s in optional if s in data) if opt_matches >= min_optional: return Match( extension=ext, name=name, mime_type=mime, confidence=0.9, ) return None puremagic-2.2.0/puremagic/scanners/helpers.py000066400000000000000000000002121516533066500213000ustar00rootroot00000000000000from dataclasses import dataclass @dataclass class Match: extension: str name: str mime_type: str confidence: float = 1 puremagic-2.2.0/puremagic/scanners/json_scanner.py000066400000000000000000000012061516533066500223240ustar00rootroot00000000000000import os import json from puremagic.scanners.helpers import Match match_bytes = b"{" def main(file_path: os.PathLike | str, head: bytes, foot: bytes) -> Match | None: if not (head.strip().startswith(b"{") and foot.strip().endswith(b"}")) and not ( head.strip().startswith(b"[") and foot.strip().endswith(b"]") ): return None try: with open(file_path, "rb") as file: json.load(file) except (json.decoder.JSONDecodeError, OSError): return None return Match( extension=".json", name="JSON File", mime_type="application/json", confidence=1.0, ) puremagic-2.2.0/puremagic/scanners/mpeg_audio_scanner.py000066400000000000000000001341621516533066500234740ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # cSpell:disable """ MPEG Audio Deep Scanner (.mp1, .mp2, .mp3). This performs a deepscan to confirm if a file is a bonafide MP3 A successful match is only returned if the main MPEG audio data stream can be decoded correctly. *AND* if present an ID3v2 (which needs decoding to find the audio afterwards). The scanner quickly pulls out all the crucial stream details: * MPEG Version and Layer (MPEG 1/2/2.5 - Layer I/II/III) * Sample Rate, Bit Rate, Stereo/Mono * Detects and checks LAME Xing/Info and Fraunhofer VBRI frames * Detects CBR vs. VBR encoding through frame analysis (does not rely on above tags) * Frame analysis also confirms validity of MP3 stream * Detects and checks ID3v2, ID3v1, APE v1/v2, Lyrics3 v1/v2, ID3v1.2 EXT, ID3v1 TAG+ and 3DI tags Note on Tags: * End-of-file metadata tags (like ID3v1 or APE) are checked purely for informational purposes and do not influence the file's pass/fail status. You may have a perfectly valid audio stream, but have horrifically malformed tags at the end, if the audio data is valid we pass the file. * LAME Xing/Info and Fraunhofer VBRI tags are checked for validity and are used for informational purposes only, they should not affect pass/fail status unless they are so badly malformed they cause the main audio decoder to fail finding valid frames. """ import os import struct from typing import IO, Any, Dict, List, Optional from puremagic.scanners.helpers import Match mpeg_audio_signatures = [ # These are all the valid signatures for raw MPEG Audio streams (Layers I, II, III), # or those starting with a ID3v2 tag. You may spot some duplicates, this is fine, # MPEG audio is full of little joys like this where the same header may mean # different things when the stream is actually decoded. b"ID3", # ID3 Tag (Metadata header, often precedes the audio stream) # ILLEGAL/RESERVED COMBINATIONS (Layer Bits = 00) # These represent reserved/illegal layer combinations for the three valid versions. b"\xff\xf0", # MPEG-1, Layer Reserved, Protected (CRC used) b"\xff\xf1", # MPEG-1, Layer Reserved, No Protection (CRC not used) b"\xff\xe0", # MPEG-2, Layer Reserved, Protected (CRC used) b"\xff\xe1", # MPEG-2, Layer Reserved, No Protection (CRC not used) b"\xff\xd0", # MPEG-2.5, Layer Reserved, Protected (CRC used) b"\xff\xd1", # MPEG-2.5, Layer Reserved, No Protection (CRC not used) b"\xff\xf2", # MPEG-1, Layer III (MP3), No Protection (CRC not used) # MPEG-1 HEADERS (Version Bits = 11) # Layer III (MP3) - Layer Bits = 01 b"\xff\xfb", # MPEG-1, Layer III (MP3), Protected (CRC used) b"\xff\xfa", # MPEG-1, Layer III (MP3), Protected (CRC used) b"\xff\xf7", # MPEG-1, Layer III (MP3), No Protection (CRC not used) b"\xff\xf6", # MPEG-1, Layer III (MP3), Protected (CRC used) b"\xff\xf5", # MPEG-1, Layer III (MP3), No Protection (CRC not used) b"\xff\xf4", # MPEG-1, Layer III (MP3), Protected (CRC used) b"\xff\xf3", # MPEG-1, Layer III (MP3), No Protection (CRC not used) # Layer II (MP2) - Layer Bits = 10 b"\xff\xfd", # MPEG-1, Layer II (MP2), Protected (CRC used) b"\xff\xfc", # MPEG-1, Layer II (MP2), Protected (CRC used) b"\xff\xf9", # MPEG-1, Layer II (MP2), No Protection (CRC not used) b"\xff\xf8", # MPEG-1, Layer II (MP2), No Protection (CRC not used) # Layer I (MP1) - Layer Bits = 11 b"\xff\xff", # MPEG-1, Layer I (MP1), Protected (CRC used) # b"\xff\xfe" excluded — conflicts with UTF-16 LE BOM (GH #134) b"\xff\xfd", # MPEG-1, Layer I (MP1), No Protection (CRC not used) b"\xff\xfc", # MPEG-1, Layer I (MP1), No Protection (CRC not used) b"\xff\xfb", # MPEG-1, Layer I (MP1), Protected (CRC used) b"\xff\xfa", # MPEG-1, Layer I (MP1), Protected (CRC used) b"\xff\xf9", # MPEG-1, Layer I (MP1), No Protection (CRC not used) b"\xff\xf8", # MPEG-1, Layer I (MP1), No Protection (CRC not used) # MPEG-2 HEADERS (Version Bits = 10) # Layer III (MP3) - Layer Bits = 01 b"\xff\xef", # MPEG-2, Layer III (MP3), Protected (CRC used) b"\xff\xee", # MPEG-2, Layer III (MP3), Protected (CRC used) b"\xff\xe7", # MPEG-2, Layer III (MP3), No Protection (CRC not used) b"\xff\xe6", # MPEG-2, Layer III (MP3), No Protection (CRC not used) b"\xff\xeb", # MPEG-2, Layer III (MP3), Protected (CRC used) b"\xff\xea", # MPEG-2, Layer III (MP3), Protected (CRC used) b"\xff\xe5", # MPEG-2, Layer III (MP3), No Protection (CRC not used) b"\xff\xe4", # MPEG-2, Layer III (MP3), No Protection (CRC not used) # Layer II (MP2) - Layer Bits = 10 b"\xff\xed", # MPEG-2, Layer II (MP2), Protected (CRC used) b"\xff\xec", # MPEG-2, Layer II (MP2), Protected (CRC used) b"\xff\xe9", # MPEG-2, Layer II (MP2), No Protection (CRC not used) b"\xff\xe8", # MPEG-2, Layer II (MP2), No Protection (CRC not used) # Layer I (MP1) - Layer Bits = 11 b"\xff\xef", # MPEG-2, Layer I (MP1), Protected (CRC used) b"\xff\xee", # MPEG-2, Layer I (MP1), Protected (CRC used) b"\xff\xe7", # MPEG-2, Layer I (MP1), No Protection (CRC not used) b"\xff\xe6", # MPEG-2, Layer I (MP1), No Protection (CRC not used) b"\xff\xeb", # MPEG-2, Layer I (MP1), Protected (CRC used) b"\xff\xea", # MPEG-2, Layer I (MP1), Protected (CRC used) b"\xff\xe5", # MPEG-2, Layer I (MP1), No Protection (CRC not used) b"\xff\xe4", # MPEG-2, Layer I (MP1), No Protection (CRC not used) # MPEG-2.5 HEADERS (Version Bits = 00) # Layer III (MP3) - Layer Bits = 01 b"\xff\xe3", # MPEG-2.5, Layer III (MP3), Protected (CRC used) b"\xff\xe2", # MPEG-2.5, Layer III (MP3), Protected (CRC used) b"\xff\xdb", # MPEG-2.5, Layer III (MP3), No Protection (CRC not used) b"\xff\xda", # MPEG-2.5, Layer III (MP3), No Protection (CRC not used) b"\xff\xdf", # MPEG-2.5, Layer III (MP3), Protected (CRC used) b"\xff\xde", # MPEG-2.5, Layer III (MP3), Protected (CRC used) b"\xff\xd7", # MPEG-2.5, Layer III (MP3), No Protection (CRC not used) b"\xff\xd6", # MPEG-2.5, Layer III (MP3), No Protection (CRC not used) ] class DataCache: """ We use a data cache as puremagic calls the script more than once. Work is performed on first call, cached output is returned in subsequent calls. This saves doing everything twice. """ _processed_result = None _file_path = None _matched = False @classmethod def set_result(cls, result): """Stores the result after processing.""" cls._processed_result = result cls._matched = True @classmethod def set_file_path(cls, file_path: os.PathLike | str): """Stores the file_path and resets results.""" cls._file_path = file_path cls._processed_result = None cls._matched = False @classmethod def get_result(cls): """Retrieves the stored result.""" return cls._processed_result @classmethod def is_matched(cls) -> bool: """Retrieves the stored result.""" return cls._matched @classmethod def get_file_path(cls) -> os.PathLike | str | None: """Retrieves the file path.""" return cls._file_path @classmethod def is_cached(cls): """Checks if the result has been processed yet.""" return cls._processed_result is not None class EndOfFileTags: """Processes all end of file tags.""" def __init__(self, file_size: int): self.tags = [] self.file_size = file_size self.foot_string = None self.foot_size = 1572864 # 1.5MB in bytes, changes if file is smaller def _id3v1(self) -> bool | None: """ Searches for ID3v1 TAG in last 128 bytes. Validation relies on the 'TAG' signature *AND* either a 4-digit year (1700-3000 seems sensible) *OR* four null bytes in the Year field *OR* four spaces (hex 20 used by non compliant encoders/taggers). Returns True so we can check for TAG+ or EXT. Returns None if tag is not valid, no point then checking above. """ assert self.foot_string is not None tag_size = 128 if self.foot_size < tag_size: return False # Too small to contain ID3v1 tag. try: find_tag_loc = self.foot_string.rfind(b"TAG") if find_tag_loc == -1: return False # Tag not found tag_calc_size = self.foot_size - find_tag_loc if tag_calc_size != tag_size: return False # Tag not 128 bytes # Year is stored at byte 93 and 97 of TAG # this should be a 4 digit number, or 4 nulls/spaces year = self.foot_string[find_tag_loc + 93 : find_tag_loc + 97] if year == b"\x00\x00\x00\x00" or year == b"\x20\x20\x20\x20": # Check for empty year (all nulls/spaces) self.tags.append("ID3v1") return True try: year_str = year.decode("ascii", errors="ignore").replace("\x00", "").replace("\x20", "").strip() if len(year_str) == 4 and year_str.isdigit(): # Check for a plausible 4-digit year 1700-3000 year_int = int(year_str) if 1700 <= year_int <= 3000: self.tags.append("ID3v1") return True except ValueError: pass return None # Year could not be found except Exception: return None # Other unexpected issues def _tag_plus(self) -> None: """ Checks for the ID3v1 Enhanced Tag ('TAG+'). This should be located in at 355 bytes from end of file. There is a chance another tag (like APE or EXT) can push it around, which means the data could be there, but in the wrong place. Validation relies on the 'TAG+' signature, correct tag size, *AND* either the approved speed bytes (01=slow, 02=medium, 03=fast, 04=hardcore) *OR* a null byte (00) if unpopulated. Returns None as a graceful exit if TAG+ not found """ assert self.foot_string is not None tag_size = 128 tag_plus_size = 227 speed_loc = 184 # Speed byte position in tag combined_size = tag_plus_size + tag_size if self.foot_size < combined_size: # TAG+ + ID3v1 return None # Too small to contain TAG+ try: # Scan only calculated tag area, try to avoid false positives tag_start = self.foot_size - combined_size tag_end = tag_start + tag_plus_size find_tag_loc = self.foot_string.rfind(b"TAG+", tag_start, tag_end) if find_tag_loc == -1: return None # Tag not found tag_calc_size = self.foot_size - find_tag_loc if tag_calc_size != combined_size: return None # Tag+ not valid size speed_position = find_tag_loc + speed_loc if 0 <= self.foot_string[speed_position] <= 4: self.tags.append("TAG+") else: return None # Speed byte not in range except Exception: return None # Other unexpected issues def _ext_tag(self) -> None: """ Checks for the ID3v1.2 Enhanced Tag ('EXT'). This should be located at 256 bytes from end of file. There is a chance another tag (like APE or EXT) can push it around, which means the data could be there, but in the wrong place. Validation relies on the 'EXT' signature and correct tag size. Unable to validate further as tag has no fixed content. Returns None as a graceful exit if EXT not found """ assert self.foot_string is not None tag_size = 128 ext_tag_size = 128 combined_size = ext_tag_size + tag_size if self.foot_size < combined_size: # EXT + ID3v1 return None # Too small to contain EXT try: # Scan only calculated tag area, try to avoid false positives tag_start = self.foot_size - combined_size tag_end = tag_start + ext_tag_size find_tag_loc = self.foot_string.rfind(b"EXT", tag_start, tag_end) if find_tag_loc == -1: return None # Tag not found tag_calc_size = self.foot_size - find_tag_loc if tag_calc_size != combined_size: return None # EXT not valid size else: self.tags.append("EXT") except Exception: return None # Other unexpected issues def _3di(self, id3v1: bool | None) -> None: """ Checks for the rare ID3v1 3DI tag ('3DI'). This should be located in either. a) 10 bytes from end of file if no ID3v1 b) 10 bytes in front of ID3v1 There is a chance another tag (like APE or EXT) can push it around, which means the data could be there, but in the wrong place. Validation relies on the '3DI' signature and correct tag size. Unable to validate further as tag has no fixed content. Returns None as a graceful exit if 3DI not found """ assert self.foot_string is not None tag_size = 128 size_3di = 10 combined_size = (size_3di + tag_size) if id3v1 else size_3di if self.foot_size < combined_size: # 3DI OR 3DI + ID3v1 return None # Too small to contain 3DI try: # Scan only calculated tag area, try to avoid false positives tag_start = self.foot_size - combined_size tag_end = tag_start + size_3di find_tag_loc = self.foot_string.rfind(b"3DI", tag_start, tag_end) if find_tag_loc == -1: return None # Tag not found tag_calc_size = self.foot_size - find_tag_loc if tag_calc_size != combined_size: return None # 3DI not valid size else: self.tags.append("3DI") except Exception: return None # Other unexpected issues def _lyrics3(self, id3v1: bool | None) -> None: """ Checks for the Lyrics3 v1 and v2. These are large tags (upto 1MB) and should be located at either: a) Upto 1024 bytes from end of file if no ID3v1 b) Upto 1152 bytes from end of file if ID3v1 present There is a chance another tag (like APE or EXT) can push it around, which means the data could be there, but in the wrong place. Validation relies on: a) For v1: LYRICSBEGIN and LYRICSEND AND a scan for metatag to see if any are present Unable to validate further as tag has no fixed content. b) For v2: LYRICSBEGIN and LYRICS200 AND a scan for metatag to see if any are present AND check the size of the found tag, matches the size metatag. Returns None as a graceful exit if tag block not found """ assert self.foot_string is not None id3v1_size = 128 max_tag_size = 1048576 # This is on paper the max a Lyrics3 tag could be (v1 in theory has no limit) combined_size = (max_tag_size + id3v1_size) if id3v1 else max_tag_size if self.foot_size < combined_size: # LYRICS OR LYRICS + ID3v1 combined_size = self.foot_size try: # Scan only calculated tag area, try to avoid false positives # This just checks for LYRICSEND or LYRICS200 marker immediately # before EOF or TAG lyricsend_size = 9 # This is for LYRICSEND or LYRICS200 end_size = (lyricsend_size + id3v1_size) if id3v1 else lyricsend_size end_tag_start = self.foot_size - end_size end_tag_end = end_tag_start + lyricsend_size found_lyric = None for lyric_end in (b"LYRICSEND", b"LYRICS200"): find_tag_end = self.foot_string.rfind(lyric_end, end_tag_start, end_tag_end) if find_tag_end != -1: found_lyric = lyric_end if found_lyric is None: return None # No end marker found # Now we can scan for the start marker, # as we cannot overly target a scan we go for a broad # search of the last 1MB (or smaller) of the file. max_allowed_search_size = min(self.foot_size, self.file_size) tag_start_start = max_allowed_search_size - combined_size tag_start_end = tag_start_start + max_tag_size find_tag_start = self.foot_string.rfind(b"LYRICSBEGIN", tag_start_start, tag_start_end) if find_tag_start == -1: return None # Tag start not found # Now we have the tag size and can scan inside the tag lyric3_tags = [b"IND", b"LYR", b"INF", b"AUT", b"EAL", b"EAR", b"ETT", b"IMG", b"GRE"] tag_block = self.foot_string[find_tag_start:end_tag_end] if found_lyric == b"LYRICSEND": # v1 if any(tag in tag_block for tag in lyric3_tags): # This is the best we can do for v1 self.tags.append("Lyricsv1") if found_lyric == b"LYRICS200": # v2 # Get the v2 size data tag_size = len(tag_block) # This matches Hex editors so length is correct size_tag_size = 6 v2_tag_data = self.foot_string[end_tag_start - size_tag_size : end_tag_end - lyricsend_size] v2_tag_size_calc = int(v2_tag_data) + size_tag_size + lyricsend_size if any(tag in tag_block for tag in lyric3_tags) and tag_size == v2_tag_size_calc: self.tags.append("Lyricsv2") return None # Could not find a valid tag block except Exception: return None # Other unexpected issues def _ape(self, id3v1: bool | None) -> None: """ Checks for the Ape v1 and v2. These are complicated tags, we currently test for the most common variants. a) v1 with APETAGEX footer, at end of file or before ID3v1 b) v2 with APETAGEX header and footer, at end of file or before ID3v1 There is a chance another tag (like Lyrics3 or EXT) can push it around, which means the data could be there, but in the wrong place. We currently do not test for weird variants such as: a) v1 lacking the APETAGEX footer b) v2 lacking the APETAGEX header, footer or both (crazy, but apparently valid) c) v2 placed at the start of the file If sample files with these ever appear we can look to test. Validation relies on: a) For v1: finding the APETAGEX footer AND decode the tag for size and fixed marker checks. b) For v2: finding the APETAGEX header and footer AND decode the tag for size and fixed marker checks. Returns None as a graceful exit if tag block not found """ assert self.foot_string is not None common_ape_keys = ( b"Title", b"Artist", b"Album", b"Track", b"Year", b"Genre", b"Comment", b"Album Artist", b"Composer", b"Copyright", b"Disc", b"Grouping", b"Lyrics", b"Publisher", b"Subtitle", b"Performer", b"Conductor", b"Rating", b"File", b"URL", b"Cover Art (Front)", # front Titled to match search b"Cover Art (Back)", # back Titled to match search b"Media", b"Language", b"ReplayGain Track Gain", b"ReplayGain Track Peak", b"ReplayGain Album Gain", b"ReplayGain Album Peak", b"ISRC", b"MCN", ) id3v1_size = 128 max_tag_size = 1048576 # This is a practical scan range of 1MB, Ape v2 in theory can be 4GB combined_size = (max_tag_size + id3v1_size) if id3v1 else max_tag_size if self.foot_size < combined_size: # APE OR APE + ID3v1 combined_size = self.foot_size try: # Scan only calculated tag area, try to avoid false positives # This just checks for APETAGEX marker immediately before EOF or ID3v1 TAG apextag_size = 32 # This is for APETAGEX and data bytes end_size = (apextag_size + id3v1_size) if id3v1 else apextag_size end_tag_start = self.foot_size - end_size end_tag_end = end_tag_start + apextag_size find_tag_end = self.foot_string.rfind(b"APETAGEX", end_tag_start, end_tag_end) if find_tag_end == -1: return None # Tag not found # Footer tag # Check Version (bytes 8-11, Little-Endian) f_version = struct.unpack(" None: """Read last 1.5MB of file and look for tags.""" file.seek(max(0, self.file_size - self.foot_size)) self.foot_string = file.read() self.foot_size = len(self.foot_string) if len(self.foot_string) < self.foot_size else self.foot_size file.seek(0) id3v1 = self._id3v1() if id3v1: # These two require an ID3v1 TAG to be present self._tag_plus() self._ext_tag() self._3di(id3v1) self._lyrics3(id3v1) self._ape(id3v1) class MpegAudioDecoder: """ Decodes the raw mpeg audio stream. This handles Layers I, II and III, with CBR and VBR encodings. Returns None if any part of the decoding fails. """ def __init__(self): # --- STATE AND OUTPUT --- self.tags = [] self.header_results = {} self.first_frame_offset = 0 # VBR self.vbr_info = None # Stores detected VBR tag string ("Xing", "VBRI", etc.) self.VBRI_OFFSET = 36 # Constant for VBRI tag offset # --- LOOKUP TABLES --- self.sample_rate_table = { 3: [44100, 48000, 32000, 0], # MPEG 1 2: [22050, 24000, 16000, 0], # MPEG 2 0: [11025, 12000, 8000, 0], # MPEG 2.5 } self.bitrate_table = { # MPEG 1 3: { 3: [0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 0], # Layer I 2: [0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 0], # Layer II 1: [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 0], # Layer III }, # MPEG 2/2.5 2: { 3: [0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 0], # Layer I 2: [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0], # Layer II 1: [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0], # Layer III }, 0: { 3: [0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 0], # Layer I 2: [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0], # Layer II 1: [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0], # Layer III }, } self.mpeg_version_map = {3: "MPEG 1", 2: "MPEG 2", 0: "MPEG 2.5", 1: "Reserved"} self.mpeg_version_reverse = {"MPEG 1": 3, "MPEG 2": 2, "MPEG 2.5": 0} self.layer_map = {3: "Layer I (MP1)", 2: "Layer II (MP2)", 1: "Layer III (MP3)", 0: "Reserved"} self.channel_mode_map = {3: "Mono", 2: "Dual-Channel", 1: "Joint-Stereo", 0: "Stereo"} self.vbr_offsets = { # (MPEG_VERSION_INDEX, IS_MONO) -> Offset from byte 0 (3, False): 36, # MPEG 1, Stereo/Joint Stereo (3, True): 21, # MPEG 1, Mono (2, False): 21, # MPEG 2/2.5, Stereo/Joint Stereo (2, True): 13, # MPEG 2/2.5, Mono (0, False): 21, # MPEG 2.5, Stereo (0, True): 13, # MPEG 2.5, Mono } def _parse_vbr_header(self, frame_bytes: bytes, header_results: Dict[str, Any]) -> Optional[str]: """ Checks the first frame for Xing/Info (LAME) and VBRI (Fraunhofer) VBR tags. This function relies on self._decode_mp3_header having already passed its validity checks (sync word, reserved bits, valid rates). Returns the tag identifier string ("Xing", "Info", or "VBRI") if a tag is found, otherwise returns None. """ # 1. Basic Validity Checks if not header_results.get("sync_word") or header_results.get("layer") == "Reserved": return None # VBR headers are for Layer III only if header_results.get("layer") != "Layer III (MP3)": return None # 2. Determine Offsets using validated results mpeg_version_str = header_results.get("mpeg_version") if mpeg_version_str is None: return None mpeg_version_index = self.mpeg_version_reverse.get(mpeg_version_str) if mpeg_version_index is None: return None channel_mode_str = header_results.get("chanel_mode", "Stereo") is_mono = channel_mode_str == "Mono" found_tag = None # --- 3. Check Xing/Info Tag --- key = (mpeg_version_index, is_mono) xing_vbr_offset = self.vbr_offsets.get(key) if xing_vbr_offset is not None and len(frame_bytes) >= xing_vbr_offset + 4: identifier_bytes = frame_bytes[xing_vbr_offset : xing_vbr_offset + 4] identifier = identifier_bytes.decode("ascii", errors="ignore") if identifier in ("Xing", "Info"): found_tag = identifier # --- 4. Check VBRI Tag --- vbri_vbr_offset = self.VBRI_OFFSET # Only check VBRI if Xing/Info was not found if found_tag is None and len(frame_bytes) >= vbri_vbr_offset + 4: identifier_bytes = frame_bytes[vbri_vbr_offset : vbri_vbr_offset + 4] identifier = identifier_bytes.decode("ascii", errors="ignore") if identifier == "VBRI": found_tag = "VBRI" # --- 5. Return --- return found_tag def _decode_mp3_header(self, header_bytes: bytes) -> None: """ Decodes the 4-byte header. Raises ValueError if invalid. Performs frame size calculation based on MPEG version and Layer. """ header_int = struct.unpack(">I", header_bytes)[0] # Extract Fields sync_word = (header_int >> 20) & 0xFFF mpeg_version_index = (header_int >> 19) & 0b11 layer_index = (header_int >> 17) & 0b11 bit_rate_index = (header_int >> 12) & 0b1111 sample_rate_index = (header_int >> 10) & 0b11 padding_bit = (header_int >> 9) & 0b1 channel_mode_index = (header_int >> 6) & 0b11 # --- 1. Basic Validation --- # Sync word can be 0xFFE or 0xFFF if sync_word < 0xFFE: raise ValueError("Sync word not fully set.") if mpeg_version_index == 1 or layer_index == 0: raise ValueError("Reserved MPEG version or Layer used.") if bit_rate_index == 0 or bit_rate_index == 15 or sample_rate_index == 3: raise ValueError("Reserved bit rate, index 0, or sample rate index used.") # --- 2. Lookup Values --- sr_list = self.sample_rate_table.get(mpeg_version_index) if not sr_list: raise ValueError("MPEG version not supported for Sample Rate lookup.") sample_rate_hz = sr_list[sample_rate_index] br_version_table = self.bitrate_table.get(mpeg_version_index) if not br_version_table: raise ValueError("MPEG version not supported for Bit Rate lookup.") br_layer_list = br_version_table.get(layer_index) if not br_layer_list: raise ValueError("Layer not supported for Bit Rate lookup.") bit_rate_kbps = br_layer_list[bit_rate_index] if bit_rate_kbps == 0 or sample_rate_hz == 0: raise ValueError("Calculated bit rate or sample rate is zero.") # --- 3. Frame Size Calculation --- if layer_index == 3: # Layer I slot_size = 12 elif layer_index == 2 or layer_index == 1: # Layer II or Layer III # MPEG 1 uses 144, MPEG 2/2.5 use 72 if mpeg_version_index == 3: # MPEG 1 slot_size = 144 else: # MPEG 2/2.5 slot_size = 72 # Frame Size Formula: frame_size_val = int((slot_size * bit_rate_kbps * 1000) / sample_rate_hz + padding_bit) if layer_index == 3: # Layer I requires multiplication by 4 frame_size_val *= 4 if frame_size_val < 4 or frame_size_val > 5000: raise ValueError("Calculated frame size is out of expected bounds.") # Compile the results dictionary self.header_results = { "sync_word": True, "mpeg_version": self.mpeg_version_map.get(mpeg_version_index), "layer": self.layer_map.get(layer_index), "bit_rate": f"{bit_rate_kbps}k", "sample_rate": f"{sample_rate_hz / 1000:.1f}Khz", "padding": padding_bit, "chanel_mode": self.channel_mode_map.get(channel_mode_index, "Reserved"), "frame_size": f"{frame_size_val} bytes", "raw_frame_size": frame_size_val, # CRUCIAL for seeking "bit_rate_index": bit_rate_index, "mpeg_version_index": mpeg_version_index, } def _check_stream_consistency( self, file_handle, frame1_bit_rate_index, frame2_start_abs_offset, frame1_size ) -> str | None: """ Checks the bit rate index of the next few frames (up to 3 total) against the first frame to determine stream consistency, using a small search window to overcome frame 'wobble' found in some Layer II encodings. """ frames_to_check = 2 current_offset = frame2_start_abs_offset step_size = frame1_size # Loop for Frame 2 and Frame 3 for i in range(1, frames_to_check + 1): found_match = False # Search window of 4 bytes (0, 1, 2, 3 bytes ahead) for search_offset in range(4): seek_pos = current_offset + search_offset try: file_handle.seek(seek_pos, os.SEEK_SET) frame_header_bytes = file_handle.read(4) if len(frame_header_bytes) < 4: # End of file reached before full consistency check. # Assume CBR based on checks passed so far. return "CBR" frame_bit_rate_index = self.extract_bit_rate_index(frame_header_bytes) # Check 1: Must be a valid header (not -1) AND # Check 2: Must have the same bit rate index as Frame 1 (frame1_bit_rate_index) if frame_bit_rate_index != -1 and frame_bit_rate_index == frame1_bit_rate_index: # Found the next frame at the expected bit rate (CBR). # Break the inner search loop and prepare for the next frame check. # Update the current offset to the *actual* start of the found frame # plus the expected frame size, for the next check. current_offset = seek_pos + step_size found_match = True break except Exception: continue # Try the next search_offset # If we failed to find a consistent frame nearby after checking the window: if not found_match: # The bit rate index is inconsistent over a small range. return "VBR" # If the loop completed (F1, F2, and F3 were consistent or found nearby) return "CBR" def extract_bit_rate_index(self, header_bytes): """Utility to quickly get the bit rate index for stream consistency check.""" if len(header_bytes) < 4: return -1 # Check for sync word (FF Ex) before extracting if header_bytes[0] != 0xFF or (header_bytes[1] & 0xE0) != 0xE0: return -1 header_int = struct.unpack(">I", header_bytes)[0] return (header_int >> 12) & 0b1111 def decoder(self, head: bytes, file: IO[bytes]): """Decodes the MPEG Audios Stream.""" # Seek to start (start of file or after ID3v2) file.seek(self.first_frame_offset, os.SEEK_SET) # Decode the first frame header (H1) header_bytes_frame1 = file.read(4) if len(header_bytes_frame1) < 4: return None try: # Fills self.header_results self._decode_mp3_header(header_bytes_frame1) except ValueError: return None raw_frame_size = self.header_results["raw_frame_size"] assert isinstance(raw_frame_size, int) # Read the area for VBR check read_size_for_vbr_check = min(raw_frame_size - 4, 150) frame_body_for_vbr = file.read(read_size_for_vbr_check) # Combine header and body bytes for easy slicing in the VBR parser frame_bytes_for_vbr = header_bytes_frame1 + frame_body_for_vbr # Check for VBR Header (Xing/Info/VBRI) # This is only an informative check, we do not determine VBR/CBR from this. # These headers are for Layer III only, Layers I and II do not have them. self.vbr_info = self._parse_vbr_header(frame_bytes_for_vbr, self.header_results) frame_step_size = raw_frame_size # Check Stream Consistency by seeking to Frame 2 and 3 # This determines VBR/CBR for all MPEG versions and Layers. if raw_frame_size > 0: frame2_start_abs_offset = self.first_frame_offset + frame_step_size frame1_bit_rate_index = self.header_results["bit_rate_index"] stream_type_deduction = self._check_stream_consistency( file, frame1_bit_rate_index, frame2_start_abs_offset, frame_step_size, ) else: stream_type_deduction = None # Final Result Compilation if stream_type_deduction is not None and self.header_results.get("sync_word"): self.tags = [ self.header_results["bit_rate"], self.header_results["sample_rate"], self.header_results["chanel_mode"], ] self.tags.append(stream_type_deduction) return self.tags return None class ID3v2Decoder: """Decodes the ID3v2 tag and calculates the file offset where the audio stream begins.""" def __init__(self, file_size: int, mpega: MpegAudioDecoder): self.id3v2_tag = None self.file_size = file_size self.id3_tag_size = None # Total tag size (10-byte header + content) self.tagsv22 = [ # Tag list for ID3v2.2 b"AEN", b"BUF", b"CNT", b"COM", b"CRA", b"CRM", b"ETC", b"EQU", b"GEO", b"LNK", b"MCI", b"MLL", b"PIC", b"POP", b"REV", b"RVA", b"SLT", b"STC", b"TAL", b"TBP", b"TCM", b"TCO", b"TCR", b"TDA", b"TDY", b"TEN", b"TFT", b"TIM", b"TKE", b"TLA", b"TLE", b"TMT", b"TOA", b"TOF", b"TOL", b"TOR", b"TOT", b"TP1", b"TP2", b"TP3", b"TP4", b"TPA", b"TPB", b"TRC", b"TRD", b"TRK", b"TSS", b"TT1", b"TT2", b"TT3", b"TXT", b"TXX", b"TYE", b"UFI", b"ULT", b"WAF", b"WAR", b"WAS", b"WCM", b"WCP", b"WPB", b"WXX", b"WIR", b"UIN", ] # Tag list for ID3v2.3 and 2.4, there are some uniques to both, but not enough # to make repeating the list beneficial to speed or validity. self.tagsv23 = [ b"AENC", b"APIC", b"ASPI", b"COMM", b"COMR", b"ENCR", b"EQU2", b"ETCO", b"GEOB", b"GRID", b"LINK", b"MCDI", b"MLLT", b"OWNE", b"PRIV", b"PCNT", b"POPM", b"POSS", b"RBUF", b"RVA2", b"RVRB", b"SEEK", b"SIGN", b"SYLT", b"SYTC", b"UFID", b"USER", b"USLT", b"WCOM", b"WCOP", b"WOAF", b"WOAR", b"WOAS", b"WORS", b"WPAY", b"WPUB", b"WXXX", b"TYER", b"TDAT", b"TIME", b"TORY", b"TALB", b"TBPM", b"TCOM", b"TCON", b"TCOP", b"TDEN", b"TDLY", b"TDOR", b"TDRC", b"TDRL", b"TDTG", b"TENC", b"TEXT", b"TFLT", b"TIPL", b"TIT1", b"TIT2", b"TIT3", b"TKEY", b"TLAN", b"TLEN", b"TMCL", b"TMED", b"TMOO", b"TOAL", b"TOFN", b"TOLY", b"TOPE", b"TOWN", b"TPE1", b"TPE2", b"TPE3", b"TPE4", b"TPOS", b"TPRO", b"TPUB", b"TRCK", b"TRSN", b"TRSO", b"TSOA", b"TSOC", b"TSOP", b"TSOT", b"TSRC", b"TSSE", b"TSST", b"TXXX", ] self.tagsv23_3letter = [ # Super niche 3 letter tags used in ID3v2.3 only b"WAF", b"WIR", b"WYY", ] def _check_id3v2_tag(self, head: bytes) -> Optional[int]: """ Checks for ID3v2 tags. Calculates the size of the ID3v2 tag from the synchsafe size field (bytes 6-9). Returns the total tag size (header + content) on success, or None on failure. """ if len(head) < 10: return None # Header too small if head[0:3] != b"ID3": return None # This should never happen size_field = head[6:10] tag_content_size = 0 tag = None # ID3v2.2 if head[0:5] == b"ID3\x02\x00": if head[10:13] not in self.tagsv22: return None # ID3v2.2 uses a standard 4-byte big-endian integer for size tag_content_size = (size_field[0] << 24) | (size_field[1] << 16) | (size_field[2] << 8) | size_field[3] tag = "ID3v2.2" # ID3v2.3 or ID3v2.4 elif head[0:5] == b"ID3\x03\x00" or head[0:5] == b"ID3\x04\x00": # Quick tag scan for v2.3/v2.4 (4-letter frames) if head[10:14] not in self.tagsv23: # Check for niche 3-letter v2.3 frames if head[10:13] not in self.tagsv23_3letter: return None # ID3v2.3 and ID3v2.4 use the Synchsafe Integer for size tag_content_size = (size_field[0] << 21) | (size_field[1] << 14) | (size_field[2] << 7) | size_field[3] tag = "ID3v2.3" if head[0:5] == b"ID3\x03\x00" else "ID3v2.4" else: return None # Invalid tag version self.id3v2_tag = tag self.id3_tag_size = 10 + tag_content_size # Total tag size plus 10-byte header # Return the offset where the audio stream starts return self.id3_tag_size def decode_id3v2(self, head: bytes) -> int: """ Decodes the ID3v2 tag header (if present at offset 0). Returns the absolute file offset where the first audio frame should be (0 if no ID3v2 tag is found). """ audio_start_offset = self._check_id3v2_tag(head) # If _check_id3v2_tag was successful, it returns the tag size (the starting offset). # Otherwise, it returns None, meaning the audio starts at offset 0. return audio_start_offset if audio_start_offset is not None else 0 def build_name(mpega, id3v2_tags: str | None, eof_tags: List) -> tuple[str, str] | tuple[None, None]: """ Build an return the full name string and extension. Name is constructed from scan results, some examples of final output: MPEG-1 Audio Layer III (MP3) file [64k 44.1Khz Stereo VBR LAME(Xing) ID3v1 TAG+] MPEG-1 Audio Layer II (MP2) file [64k 44.1Khz Mono CBR] MPEG-2 Audio Layer III (MP3) file [64k 24.0Khz Stereo CBR LAME(Info) ID3v2.4] MPEG-1 Audio Layer I (MP1) file [384k 32.0Khz Stereo CBR] MPEG-2.5 Audio Layer III (MP3) file [32k 12.0Khz Stereo CBR LAME(Info) ID3v2.4] MPEG-1 Audio Layer III (MP3) file [160k 44.1Khz Stereo VBR VBRI ID3v2.3] """ mpega_results = mpega.header_results mpega_tags = mpega.tags vbr_type = mpega.vbr_info # Set version: MPEG-1, MPEG-2, MPEG-2.5 # Reserved if a super rare fringe case that should never happen version = ( mpega_results["mpeg_version"].replace(" ", "-") if mpega_results["mpeg_version"] != "Reserved" else "MPEG-Unknown Version" ) if mpega_results["layer"] == "Layer I (MP1)": layer = mpega_results["layer"] ext = ".mp1" elif mpega_results["layer"] == "Layer II (MP2)": layer = mpega_results["layer"] ext = ".mp2" elif mpega_results["layer"] == "Layer III (MP3)": layer = mpega_results["layer"] ext = ".mp3" else: # This should never happen layer = "Unknown Layer" ext = ".mpga" name = f"{version} Audio {layer} file" name_end = "" name_list = [] try: if mpega_tags: name_list.extend(mpega_tags) # This adds sample, bitrate etc.. if vbr_type: tag_name = f"LAME({vbr_type})" if vbr_type in ("Xing", "Info") else vbr_type name_list.append(tag_name) # Add VBR encoder info for LAME or Fraunhofer if id3v2_tags: name_list.append(id3v2_tags) # This adds ID3v2 tag if eof_tags: name_list.extend(eof_tags) # This adds tags such as ID3v1, APE, TAG+ etc... name_end += f" [{' '.join(name_list)}]" full_name = name + name_end except Exception: return None, None # Really should not happen return full_name, ext def test_mpega(file_path: os.PathLike | str, head: bytes) -> Optional[Match]: """Main workflow""" if DataCache.is_cached() and DataCache.get_file_path() == file_path: if DataCache.is_matched(): return DataCache.get_result() # Send cached results else: return None # No match was made else: DataCache.set_file_path(file_path) eof = EndOfFileTags(os.path.getsize(file_path)) mpega = MpegAudioDecoder() id3v2 = ID3v2Decoder(os.path.getsize(file_path), mpega) try: with open(file_path, "rb") as file: eof.find_tags(file) # If ID3v2 present, test and then adjust frame offset if b"ID3" == head[0:3]: mpega.first_frame_offset = id3v2.decode_id3v2(head) mpega.decoder(head, file) except Exception: return None # If the decode process fails for any unknown reason full_name, ext = build_name(mpega, id3v2.id3v2_tag, eof.tags) if full_name is None or ext is None: return None # Name building failed for some reason # Store the result for future calls, then return result = Match(extension=ext, name=full_name, mime_type="audio/mpeg", confidence=1.0) DataCache.set_result(result) return result def main(file_path: os.PathLike | str, head: bytes, _) -> Optional[Match]: return test_mpega(file_path, head) puremagic-2.2.0/puremagic/scanners/ogg_scanner.py000066400000000000000000000024051516533066500221310ustar00rootroot00000000000000import os from puremagic.scanners.helpers import Match match_bytes = b"OggS" # Ogg codec identification signatures found at the start of the first page payload. # Each entry: (codec_id_bytes, extension, name, mime_type) _OGG_CODEC_MAP = [ (b"\x01vorbis", ".ogg", "Ogg Vorbis Audio", "audio/ogg"), (b"OpusHead", ".opus", "Ogg Opus Audio", "audio/ogg"), (b"\x80theora", ".ogv", "Ogg Theora Video", "video/ogg"), (b"\x7fFLAC", ".oga", "Ogg FLAC Audio", "audio/ogg"), (b"Speex ", ".spx", "Ogg Speex Audio", "audio/ogg"), (b"fishead\x00", ".ogv", "Ogg Annodex", "video/ogg"), (b"\x01video", ".ogm", "OGM Video", "video/x-ogm+ogg"), ] def main(file_path: os.PathLike, head: bytes, foot: bytes) -> Match | None: if not head or len(head) < 28: return None # Verify OggS capture pattern, version 0, and beginning-of-stream flag if head[:4] != match_bytes or head[4] != 0 or not (head[5] & 0x02): return None seg_count = head[26] payload_start = 27 + seg_count if payload_start >= len(head): return None payload = head[payload_start:] for codec_id, ext, name, mime in _OGG_CODEC_MAP: if payload.startswith(codec_id): return Match(ext, name, mime, confidence=0.9) return None puremagic-2.2.0/puremagic/scanners/pdf_scanner.py000066400000000000000000000003771516533066500221340ustar00rootroot00000000000000from puremagic.scanners.helpers import Match match_bytes = b"%PDF" def main(_, head: bytes, foot: bytes) -> Match | None: if b"%PDF-" in head and b"startxref" in foot: return Match(".pdf", "PDF document", "application/pdf") return None puremagic-2.2.0/puremagic/scanners/python_scanner.py000066400000000000000000000032511516533066500226760ustar00rootroot00000000000000import ast import os from puremagic.scanners.helpers import Match # AST node types that are strong indicators of real Python code _PYTHON_NODE_TYPES = ( ast.Import, ast.ImportFrom, ast.FunctionDef, ast.AsyncFunctionDef, ast.ClassDef, ast.For, ast.AsyncFor, ast.While, ast.With, ast.AsyncWith, ast.Try, ast.Raise, ast.Assert, ) def _has_python_constructs(tree: ast.Module, threshold: int = 4) -> bool: """Walk the AST and check for node types that indicate real Python code. Simple expressions (tuples, names, constants) can appear in CSV, config files, and other non-Python text that happens to parse. Real Python code will contain imports, function/class definitions, control flow, etc. """ count = 0 for node in ast.walk(tree): if isinstance(node, _PYTHON_NODE_TYPES): count += 1 if count >= threshold: return True return False def main(file_path: os.PathLike | str, _, __) -> Match | None: file_size = os.path.getsize(file_path) if file_size > 1_000_000: return None if not str(file_path).endswith(".py") and file_size < 100: return None try: with open(file_path, "r", encoding="utf-8") as file: content = file.read() tree = ast.parse(content) if not str(file_path).endswith(".py"): if not _has_python_constructs(tree): return None except (SyntaxError, UnicodeDecodeError, PermissionError, OSError): return None return Match( extension=".py", name="Python Script", mime_type="text/x-python", confidence=1.0, ) puremagic-2.2.0/puremagic/scanners/sndhdr_scanner.py000066400000000000000000000023561516533066500226440ustar00rootroot00000000000000""" Scanner for audio file formats, replacing the functionality of the legacy sndhdr module. Other formats are already handled via standard magic_data logic. """ import struct from typing import Optional from puremagic.scanners.helpers import Match fssd_match_bytes = b"FSSD" hcom_match_bytes = b"HCOM" sndr_match_bytes = b"\0\0" def get_short_le(b: bytes) -> int: """Get a 2-byte little-endian integer from bytes.""" return struct.unpack(" Optional[Match]: """Test for HCOM format.""" if head[65:69] == b"FSSD" and head[128:132] == b"HCOM": return Match( extension=".hcom", name="Macintosh HCOM Audio File", mime_type="audio/x-hcom", confidence=1.0, ) return None def main(_, head: bytes, __) -> Optional[Match]: try: rate = get_short_le(head[2:4]) if 4000 <= rate <= 48000: return Match( extension=".sndr", name=f"Macintosh SNDR Resource - {rate} rate", mime_type="audio/x-sndr", confidence=0.1, # Lower confidence due to simple format ) except (IndexError, struct.error): pass return test_hcom(head) puremagic-2.2.0/puremagic/scanners/text_scanner.py000066400000000000000000000221301516533066500223360ustar00rootroot00000000000000import csv import re import os from puremagic.scanners.helpers import Match crlf_pattern = re.compile(r"\r\n") lf_pattern = re.compile(r"(? tuple[str, str]: if unicode[:2] == b"\xff\xfe": try: return unicode.decode("utf-16-le").lstrip("\ufeff"), "utf-16-le" except UnicodeDecodeError: pass elif unicode[:2] == b"\xfe\xff": try: return unicode.decode("utf-16-be").lstrip("\ufeff"), "utf-16-be" except UnicodeDecodeError: pass try: return unicode.decode("ascii"), "ascii" except UnicodeDecodeError: pass for encoding in {"utf-8", "cp1252"}: try: return unicode.decode(encoding), encoding except UnicodeDecodeError: pass raise TypeError("No encoding found") def csv_check(file_path, text) -> Match | None: """ Validate if content appears to be CSV format. """ if not text or len(text.strip()) == 0: return None # Split the text into lines lines = text.splitlines() if len(lines) < 2: # Need at least 2 lines to detect a pattern # If filename ends with .csv, give it the benefit of the doubt if str(file_path).lower().endswith(".csv"): return Match(".csv", "Comma-separated values (single line)", "text/csv", confidence=0.7) return None # Remove any blank lines lines = [line for line in lines if line.strip()] if len(lines) < 2: return None if len(lines) > 100: lines = lines[:-1] # Remove last line in case it's been truncated # Try to determine the delimiter by checking common ones potential_delimiters = [",", ";", "\t", "|", ":"] delimiter_scores = {} for delimiter in potential_delimiters: # Skip if delimiter isn't in the text if delimiter not in text: continue # Count fields in each line using this delimiter field_counts = [len(line.split(delimiter)) for line in lines] # Calculate consistency score (higher is better) if len(field_counts) >= 2: # Check if most lines have the same number of fields most_common_count = max(set(field_counts), key=field_counts.count) matching_lines = sum(1 for count in field_counts if count == most_common_count) consistency = matching_lines / len(field_counts) # More than one field required if most_common_count > 1: # Score based on consistency and number of fields delimiter_scores[delimiter] = (consistency, most_common_count) # Try using csv module's Sniffer as a fallback csv_sniffer_result = None try: dialect = csv.Sniffer().sniff(text, delimiters="".join(potential_delimiters)) csv_sniffer_result = dialect.delimiter except Exception: pass # If csv.Sniffer found a delimiter, give it priority if csv_sniffer_result and csv_sniffer_result in potential_delimiters: best_delimiter = csv_sniffer_result confidence = 0.95 elif delimiter_scores: # Find best delimiter based on consistency and field count best_delimiter = max(delimiter_scores.items(), key=lambda x: (x[1][0], x[1][1]))[0] consistency, field_count = delimiter_scores[best_delimiter] # Calculate confidence based on consistency and number of fields confidence = 0.6 + (consistency * 0.3) + min(0.1, (field_count - 1) * 0.02) else: # No clear delimiter pattern found return None delimiter_counts = [] for line in lines: delim_count = line.count(best_delimiter) if delim_count == 0: return None delimiter_counts.append(delim_count) average = sum(delimiter_counts) / len(delimiter_counts) max_percentage = 5 / 100 allowed_deviation = average * max_percentage for num in delimiter_counts: if abs(num - average) > allowed_deviation: return None # Boost confidence if filename ends with .csv if str(file_path).lower().endswith(".csv"): confidence = min(1.0, confidence + 0.1) # Return match with appropriate confidence delimiter_name = {",": "comma", ";": "semicolon", "\t": "tab", "|": "pipe", ":": "colon"}.get( best_delimiter, best_delimiter ) return Match(".csv", f"{delimiter_name}-separated values", "text/csv", confidence=confidence) def file_ending_match(extension, text, mime, file_path): return Match(extension, text, mime, confidence=1.0 if str(file_path).lower().endswith(extension) else 0.9) def eml_check(head: bytes) -> Match | None: """Check if raw bytes look like an RFC 2822 email message.""" matches = EMAIL_HEADERS.findall(head) if len(matches) < 2: return None if b"\r\n\r\n" not in head and b"\n\n" not in head: return None return Match(".eml", "RFC 2822 Email Message", "message/rfc822", confidence=1.0) def dynamic_checks(text, file_path) -> Match | None: text = text.strip() if text.startswith("$MeshFormat"): return file_ending_match(".msh", "Gmsh mesh format", "text/plain", file_path) if "GenePix ArrayList" in text[:256]: return file_ending_match(".gal", "Gal GenePix ArrayList", "text/plain", file_path) if text.startswith("##gff-version"): return file_ending_match(".gff", "GFF3", "text/plain", file_path) if "GenePix Results" in text[:256]: return file_ending_match(".gpr", "GenePix Results", "text/plain", file_path) if "mzTab-version" in text[:256]: if "mzTab-version 2" in text[:256]: return file_ending_match(".mztab2", "mzTab version 2", "text/plain", file_path) return file_ending_match(".mztab", "mzTab", "text/plain", file_path) if text.startswith("***tesr"): return file_ending_match(".tesr", "Neper tesr format", "text/plain", file_path) if text.startswith("***tess"): return file_ending_match(".tess", "Neper tess format", "text/plain", file_path) if text.startswith("# PEFF "): # consider adding r"# PEFF \d+.\d+" return file_ending_match(".peff", "PSI Extended FASTA Format", "text/plain", file_path) if text.startswith("ply") and "format ascii" in text[:128]: return file_ending_match(".plyascii", "PLY mesh format", "text/plain", file_path) if text.startswith("RBT_PARAMETER_FILE_V"): return file_ending_match(".prm", "prm", "text/plain", file_path) if "# vtk DataFile" in text[:256]: return file_ending_match(".vtkascii", "vtk", "text/plain", file_path) if " Match | None: with open(file_path, "rb") as file: head = file.read(1_000_000) if len(head) < 8: return Match("", "very short file", "application/octet-stream", confidence=0.5) # NUL bytes indicate binary data, but skip this check for UTF-16 (which has NUL bytes naturally) if b"\x00" in head and head[:2] not in (b"\xff\xfe", b"\xfe\xff"): return Match("", "data", "application/octet-stream", confidence=0.5) try: text, encoding = decode_any(head) except TypeError: return Match("", "data", "application/octet-stream", confidence=0.5) if csv_match := csv_check(file_path, text): return csv_match if obscure_match := dynamic_checks(text, file_path): return obscure_match crlf = len(crlf_pattern.findall(text)) lf = len(lf_pattern.findall(text)) cr = len(cr_pattern.findall(text)) if crlf + lf + cr == 0: return Match(".txt", f"{encoding} text", "text/plain", confidence=0.9) if crlf > lf and crlf > cr: return Match(".txt", f"{encoding} text, with CRLF line terminators", "text/plain", confidence=0.9) if cr > lf and cr > crlf: return Match(".txt", f"{encoding} text, with CR line terminators", "text/plain", confidence=0.9) if lf > cr and lf > crlf: return Match(".txt", f"{encoding} text, with LF line terminators", "text/plain", confidence=0.9) return Match(".txt", f"{encoding} text", "text/plain", confidence=0.9) puremagic-2.2.0/puremagic/scanners/zip_scanner.py000066400000000000000000000313601516533066500221610ustar00rootroot00000000000000import re import os from zipfile import ZipFile from puremagic.scanners.helpers import Match match_bytes = b"PK\x03\x04" office_macro_enable_match = b"macroEnabled" application_re = re.compile(b"(.*)") _content_type_re = re.compile(rb'ContentType="([^"]*main[^"]*)"') # Maps OOXML main content type fragments (from [Content_Types].xml) to # (extension, name, mime_type). Based on ECMA-376 Part 2. _OOXML_CONTENT_TYPE_MAP: dict[str, tuple[str, str, str]] = { # Word "wordprocessingml.document.main+xml": ( ".docx", "Word Document", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", ), "wordprocessingml.template.main+xml": ( ".dotx", "Word Template", "application/vnd.openxmlformats-officedocument.wordprocessingml.template", ), "ms-word.document.macroEnabled.main+xml": ( ".docm", "Word Document (Macro-Enabled)", "application/vnd.ms-word.document.macroEnabled.12", ), "ms-word.template.macroEnabledTemplate.main+xml": ( ".dotm", "Word Template (Macro-Enabled)", "application/vnd.ms-word.template.macroEnabled.12", ), # Excel "spreadsheetml.sheet.main+xml": ( ".xlsx", "Excel Spreadsheet", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ), "spreadsheetml.template.main+xml": ( ".xltx", "Excel Template", "application/vnd.openxmlformats-officedocument.spreadsheetml.template", ), "ms-excel.sheet.macroEnabled.main+xml": ( ".xlsm", "Excel Spreadsheet (Macro-Enabled)", "application/vnd.ms-excel.sheet.macroEnabled.12", ), "ms-excel.template.macroEnabled.main+xml": ( ".xltm", "Excel Template (Macro-Enabled)", "application/vnd.ms-excel.template.macroEnabled.12", ), "ms-excel.sheet.binary.macroEnabled.main": ( ".xlsb", "Excel Binary Workbook", "application/vnd.ms-excel.sheet.binary.macroEnabled.12", ), "ms-excel.addin.macroEnabled.main+xml": ( ".xlam", "Excel Add-In (Macro-Enabled)", "application/vnd.ms-excel.addin.macroEnabled.12", ), # PowerPoint "presentationml.presentation.main+xml": ( ".pptx", "PowerPoint Presentation", "application/vnd.openxmlformats-officedocument.presentationml.presentation", ), "presentationml.template.main+xml": ( ".potx", "PowerPoint Template", "application/vnd.openxmlformats-officedocument.presentationml.template", ), "ms-powerpoint.presentation.macroEnabled.main+xml": ( ".pptm", "PowerPoint Presentation (Macro-Enabled)", "application/vnd.ms-powerpoint.presentation.macroEnabled.12", ), "ms-powerpoint.template.macroEnabled.main+xml": ( ".potm", "PowerPoint Template (Macro-Enabled)", "application/vnd.ms-powerpoint.template.macroEnabled.12", ), "presentationml.slideshow.main+xml": ( ".ppsx", "PowerPoint Slideshow", "application/vnd.openxmlformats-officedocument.presentationml.slideshow", ), "ms-powerpoint.slideshow.macroEnabled.main+xml": ( ".ppsm", "PowerPoint Slideshow (Macro-Enabled)", "application/vnd.ms-powerpoint.slideshow.macroEnabled.12", ), "ms-powerpoint.addin.macroEnabled.main+xml": ( ".ppam", "PowerPoint Add-In (Macro-Enabled)", "application/vnd.ms-powerpoint.addin.macroEnabled", ), } def _detect_from_content_types(zip_file: ZipFile) -> Match | None: """Detect OOXML format from [Content_Types].xml main content types. This is the ECMA-376 standard approach, working with all compliant implementations (Microsoft Office, LibreOffice, Google Docs, etc.). """ try: ct_data = zip_file.read("[Content_Types].xml") except KeyError: return None for match in _content_type_re.finditer(ct_data): content_type = match.group(1).decode("utf-8") for key, (ext, name, mime) in _OOXML_CONTENT_TYPE_MAP.items(): if key in content_type: return Match(ext, name, mime) return None def open_office_check(internal_files: list[str], zip_file: ZipFile, extension: str | None = None) -> Match | None: if "content.xml" not in internal_files: return None if "mimetype" not in internal_files: return None known_extensions = ["odt", "ods", "odp", "sxd", "sxi", "sxw"] mime_type = zip_file.read("mimetype").decode("utf-8").strip() if "application/vnd.oasis.opendocument.text" in mime_type: return Match(".odt", "OpenDocument Text Document", "application/vnd.oasis.opendocument.text") if "application/vnd.oasis.opendocument.spreadsheet" in mime_type: return Match(".ods", "OpenDocument Spreadsheet", "application/vnd.oasis.opendocument.spreadsheet") if "application/vnd.oasis.opendocument.presentation" in mime_type: return Match(".odp", "OpenDocument Presentation", "application/vnd.oasis.opendocument.presentation") if extension in known_extensions and mime_type.startswith("application/vnd.oasis.opendocument"): return Match(extension, "OpenDocument", mime_type) return None def _detect_from_application( internal_files: list[str], zip_file: ZipFile, extension: str | None = None ) -> Match | None: """Fallback detection using docProps/app.xml Application tag.""" if "docProps/app.xml" not in internal_files: return None app_type_matches = application_re.search(zip_file.read("docProps/app.xml")) if not app_type_matches: return None application_type = app_type_matches.group(1).decode("utf-8") if "PowerPoint" in application_type: if extension: if extension == "pptm": return Match(".pptm", application_type, "application/vnd.ms-powerpoint.presentation.macroEnabled.12") if extension == "ppsm": return Match(".ppsm", application_type, "application/vnd.ms-powerpoint.slideshow.macroEnabled.12") if extension == "ppsx": return Match( ".ppsx", application_type, "application/vnd.openxmlformats-officedocument.presentationml.slideshow", ) if extension == "potm": return Match(".potm", application_type, "application/vnd.ms-powerpoint.template.macroEnabled.12") if extension == "potx": return Match( ".potx", application_type, "application/vnd.openxmlformats-officedocument.presentationml.template", ) if extension == "ppam": return Match(".ppam", application_type, "application/vnd.ms-powerpoint.addin.macroEnabled") if office_macro_enable_match in zip_file.read("[Content_Types].xml"): return Match(".pptm", application_type, "application/vnd.ms-powerpoint.presentation.macroEnabled.12") return Match( ".pptx", application_type, "application/vnd.openxmlformats-officedocument.presentationml.presentation", ) if "Excel" in application_type: if extension: if extension == "xlsm": return Match(".xlsm", application_type, "application/vnd.ms-excel.sheet.macroEnabled.12") if extension == "xlsb": return Match(".xlsb", application_type, "application/vnd.ms-excel.sheet.binary.macroEnabled.12") if extension == "xlam": return Match(".xlam", application_type, "application/vnd.ms-excel.addin.macroEnabled.12") if extension == "xltm": return Match(".xltm", application_type, "application/vnd.ms-excel.template.macroEnabled.12") if extension == "xltx": return Match( ".xltx", application_type, "application/vnd.openxmlformats-officedocument.spreadsheetml.template", ) if office_macro_enable_match in zip_file.read("[Content_Types].xml"): return Match(".xlsm", application_type, "application/vnd.ms-excel.sheet.macroEnabled.12") return Match(".xlsx", application_type, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") if "Word" in application_type: if extension: if extension == "docm": return Match(".docm", application_type, "application/vnd.ms-word.document.macroEnabled.12") if extension == "dotm": return Match(".dotm", application_type, "application/vnd.ms-word.template.macroEnabled.12") if extension == "dotx": return Match( ".dotx", application_type, "application/vnd.openxmlformats-officedocument.wordprocessingml.template", ) if office_macro_enable_match in zip_file.read("[Content_Types].xml"): return Match(".docm", application_type, "application/vnd.ms-word.document.macroEnabled.12") return Match( ".docx", application_type, "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ) return None def office_check(internal_files: list[str], zip_file: ZipFile, extension: str | None = None) -> Match | None: if "[Content_Types].xml" not in internal_files: return None # Primary: content-type-based detection (works with all OOXML creators) result = _detect_from_content_types(zip_file) if result: return result # Fallback: application-based detection for non-standard OOXML packages return _detect_from_application(internal_files, zip_file, extension) def jar_check(internal_files: list[str], zip_file: ZipFile) -> Match | None: if "META-INF/MANIFEST.MF" not in internal_files: return None if "version.json" not in internal_files: return None if b'"java_version":' in zip_file.read("version.json"): return Match(".jar", "Java Archive", "application/java-archive") return None def apk_check(internal_files: list[str]) -> Match | None: if "META-INF/MANIFEST.MF" not in internal_files: return None if "AndroidManifest.xml" in internal_files: return Match(".apk", "Android Package", "application/vnd.android.package-archive") return None def xpi_check(internal_files: list[str], zip_file: ZipFile) -> Match | None: if "install.rdf" in internal_files and b"mozilla:install-manifest" in zip_file.read("install.rdf"): return Match(".xpi", "Mozilla Firefox Add-on", "application/x-xpinstall") return None def fb2_check(internal_files: list[str], zip_file: ZipFile, file_path: os.PathLike) -> Match | None: if ( len(internal_files) == 1 and internal_files[0].endswith(".fb2") and b" Match | None: if extension != "cbz": return None image_extensions = (".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".tif") for file in internal_files: if not file.lower().endswith(image_extensions): return None return Match(".cbz", "Comic Book Archive", "application/vnd.comicbook+zip") def main(file_path: os.PathLike, _, __) -> Match | None: extension = str(file_path).split(".")[-1].lower() with ZipFile(file_path) as myzip: internal_files = myzip.namelist() office_result = office_check(internal_files, myzip, extension) if office_result: return office_result open_office_result = open_office_check(internal_files, myzip) if open_office_result: return open_office_result jar_result = jar_check(internal_files, myzip) if jar_result: return jar_result apk_result = apk_check(internal_files) if apk_result: return apk_result xpi_result = xpi_check(internal_files, myzip) if xpi_result: return xpi_result fb_result = fb2_check(internal_files, myzip, file_path) if fb_result: return fb_result cbz_result = cbz_check(internal_files, extension) if cbz_result: return cbz_result # No specific format detected — return generic ZIP (same confidence as other matches) return Match(".zip", "ZIP archive", "application/zip") puremagic-2.2.0/pyproject.toml000066400000000000000000000057071516533066500164260ustar00rootroot00000000000000[build-system] build-backend = "setuptools.build_meta" requires = [ "setuptools", "setuptools-scm[toml]>=6.2" ] [project] name = "puremagic" description = "Pure python implementation of magic file detection" readme = "README.rst" license = "MIT" authors = [ { name = "Chris Griffith", email = "chris@cdgriffith.com" }, ] requires-python = ">=3.12" classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Utilities", ] dynamic = [ "version" ] urls.Homepage = "https://github.com/cdgriffith/puremagic" scripts.puremagic = "puremagic.main:command_line_entry" [dependency-groups] dev = [ "codespell>=2.4.2", "coverage>=7.13.4", "poethepoet>=0.42.1", "pre-commit>=4.5.1", "pytest>=9.0.2", "pytest-cov>=7", "ruff>=0.15.5", "setuptools>=82", "twine>=6.2", "ty>=0.0.21", "wheel>=0.46.3", ] [tool.setuptools] dynamic.version = { attr = "puremagic.main.__version__" } package-data."*" = [ "*.json" ] packages.find.where = [ "." ] packages.find.include = [ "puremagic*" ] [tool.black] # Prevent black from linting as we use Ruff now force-exclude = ".*\\.py$" [tool.ruff] target-version = "py312" line-length = 120 indent-width = 4 # Exclude a variety of commonly ignored directories. exclude = [ ".direnv", ".eggs", ".git", ".git-rewrite", ".ipynb_checkpoints", ".pytest_cache", ".pytype", ".ruff_cache", ".ty", ".venv", ".vscode", "__pypackages__", "_build", "buck-out", "build", "dist", "venv", ] # Like Black, indent with spaces, rather than tabs. format.indent-style = "space" # Like Black, use double quotes for strings. format.quote-style = "double" format.line-ending = "lf" # Like Black, respect magic trailing commas. format.skip-magic-trailing-comma = false # Set the line length limit used when formatting code snippets in # docstrings. # # This only has an effect when the `docstring-code-format` setting is # enabled. format.docstring-code-line-length = "dynamic" # Enable auto-formatting of code examples in docstrings. Markdown, # reStructuredText code/literal blocks and doctests are all supported. # # This is currently disabled by default, but it is planned for this # to be opt-out in the future. format.docstring-code-format = true lint.fixable = [ "F541" ] lint.unfixable = [ "F401" ] [tool.flake8] # Prevent flake8 from linting as we use Ruff now exclude = [ "*" ] [tool.poe] executor.type = "uv" tasks.test = "pytest --cov=puremagic test/" tasks.lint = "ruff check --fix" tasks.format = "ruff format" tasks.typecheck = "ty check" tasks.spellcheck = "codespell --ignore-words-list=addin,caf,tye,wors --skip='*.json' puremagic/" puremagic-2.2.0/requirements-test.txt000066400000000000000000000000601516533066500177360ustar00rootroot00000000000000coverage>=7.8.0 pytest>=8.3.5 pytest-cov>=6.1.1 puremagic-2.2.0/scripts/000077500000000000000000000000001516533066500151705ustar00rootroot00000000000000puremagic-2.2.0/scripts/parse_ftk_kessler_sigs.py000066400000000000000000000036101516533066500222750ustar00rootroot00000000000000#!/usr/bin/env python3 """ This is a very ugly helper script to keep up to date with file types in Gary C. Kessler's FTK_sigs_GCK archive. """ import binascii import json import os import xml.etree.ElementTree as ET import puremagic folder = "FTK_sigs_GCK" sigs = [] for file in os.listdir(folder): if file.endswith(".xml"): tree = ET.parse(os.path.join(folder, file)) root = tree.getroot() sig = {} for child in root[0]: if child.text: sig[child.tag] = child.text else: for grandchild in child: if grandchild.tag == "EXT_NAME": sig[grandchild.tag] = grandchild.text.lower().split("|") # type: ignore else: sig[grandchild.tag] = grandchild.text sigs.append(sig) known_sigs = {binascii.hexlify(x[0]).decode("ascii") for x in puremagic.main.magic_header_array} for sig in sigs: sig["SIG"] = sig["SIG"].lower().strip() try: offset = int(sig.get("OFFSET", 0)) except Exception: continue if sig["SIG"] not in known_sigs and len(sig["EXT_NAME"]) == 1 and len(sig["EXT_NAME"][0]) < 5: print( "\t\t{},".format( json.dumps( [ sig["SIG"], int(sig.get("OFFSET", 0)), ".{}".format(sig.get("EXT_NAME", "")[0]), "", sig["DESCRIPTION"], ] ) ) ) elif sig["SIG"] not in known_sigs: for ext in sig["EXT_NAME"]: if ext != "(none)": print("\t\t{},".format(json.dumps([sig["SIG"], offset, f".{ext}", "", sig["DESCRIPTION"]]))) else: print("\t\t{},".format(json.dumps([sig["SIG"], offset, "", "", sig["DESCRIPTION"]]))) puremagic-2.2.0/setup.cfg000066400000000000000000000000431516533066500153170ustar00rootroot00000000000000[metadata] license_files = LICENSE puremagic-2.2.0/test/000077500000000000000000000000001516533066500144605ustar00rootroot00000000000000puremagic-2.2.0/test/__init__.py000066400000000000000000000000001516533066500165570ustar00rootroot00000000000000puremagic-2.2.0/test/common.py000066400000000000000000000011451516533066500163230ustar00rootroot00000000000000import os from pathlib import Path LOCAL_DIR = Path(os.path.realpath(os.path.dirname(__file__))) RESOURCE_DIR = Path(os.path.join(LOCAL_DIR, "resources")) IMAGE_DIR = Path(os.path.join(LOCAL_DIR, "resources", "images")) VIDEO_DIR = Path(os.path.join(LOCAL_DIR, "resources", "video")) AUDIO_DIR = Path(os.path.join(LOCAL_DIR, "resources", "audio")) OFFICE_DIR = Path(os.path.join(LOCAL_DIR, "resources", "office")) ARCHIVE_DIR = Path(os.path.join(LOCAL_DIR, "resources", "archive")) MEDIA_DIR = Path(os.path.join(LOCAL_DIR, "resources", "media")) SYSTEM_DIR = Path(os.path.join(LOCAL_DIR, "resources", "system")) puremagic-2.2.0/test/resources/000077500000000000000000000000001516533066500164725ustar00rootroot00000000000000puremagic-2.2.0/test/resources/archive/000077500000000000000000000000001516533066500201135ustar00rootroot00000000000000puremagic-2.2.0/test/resources/archive/test.7z000066400000000000000000000002311516533066500213500ustar00rootroot000000000000007z'@)Pq#D/&ֲ/ -{7rXWȘܲ[z ) #] 1 +%2test.gif Y puremagic-2.2.0/test/resources/archive/test.big_endian.pcapng000066400000000000000000000027741516533066500243540ustar00rootroot00000000000000 +Ć~JhzOʁ NuTzR0MOډuvīqTeYPy&y&dm5@@( Ԝ|%  `m*(-ⴤYa09 j+DSd5̵f ˆk| 2q33r-}2,( F 蜣= 0;|e`0 3䙽K g"=+EƝ.߼nCޢ0lttR^z-:Q %b܄up54S:mZ+dRk9B@mIp{q~Lf8{H@mzeCfڨ[利>cn M/ >E^&ڍa8? {Qxi˺XGU 4D?E[Q y,,-ԅ1WmuBv J V6FEA9Jgp:zwFthLNۻq3la&YyLم[b״66ʸqu(}+91o9~kzf IɱkʼSݢBH^"^ҦD׬dz~ZPd;Vzzv4nj 0@m EH#?LSHs s }e}-ao:]/c(jY*piٞ"\ֹ)P^_r4PY #(9կ$+K8N˟Qin)o]J^>3 }Q |5vl(y#na| m75ທK5`Ucd[u}: -Bv3xi~zT-X%6R[7a`}պ~\zA-1luYNz5V%qPdkn8'";!=PzH.(E_%]*̀6#mh^wߝ`>{UxgwZ ;|֎ըteerq)&Hyg0NE_M4rIgH>P3ʬu^-VUM$*O΄^q"̱_xzqT:)Z*«K; j lN,.)L'kڭӎtnJ CoA [ ujcTw!FI1=lP+]Z.Sj3αj-h5aJPGJG аoʸ=6IY +`m/eZHry,'~ ,Da23,&OSZtY) kPU K.d]ҊֱKk[ 4~Y$؂W]?(;dž.%ނ.\i*_V|X_%Sb6{<_R< nD9_5ވ"m*r xdn2'ݏltBؓM2$Q _l}=whM(u& uxV6w_k3G(gqǍp(( lrI/wpabo'-lxݼșzj׿[d=_ݦ|׉{f#=`oF}]аP.xQe4w~woD_.?XgᆿBaؒ&́j vdH"Ss`]b0c!Lkq.EyłzJ dH`F|ڰ`o-Z{?;f HLЪY'^?hǷoAQ=db  ߷F SEvv,_]kiZ.B7YsMܗZ!\+V7;EL|mi?"xPV#kܡ<8VzU?A]Y/ (7/F*”uNO<ԧ! o}V#{o'2 ?PB$f0z"#+Sv0Ԕ/jq5@%,8eb,_-<#m*8|Wb 6AhO?ưƣjۨx{ͯgD,h4s,}_76$8&J c>ЇTJA[~{Ar}iY!cx{4آm75ztqϵAfHfP|;L>e_XivQkL .>UHZ2 W1/iq]in6IRV1YM1j5ղ/H -}-ٰז];J\ G[FJ$*Y;ȩMHw.7.d΢iCuF' Z}huZI n{6ѢMNV0e\_c|q8)[qT tYcf4hqWk|]t08et+1!BE i[tdw:e>[#~~PM햦;k=J#0(_}K5j > ۥOYנjd_ʹkh\&! _;>JD ?%uߐPf +B*gUŷꈃC~5`ጚ q?)U^Q舔S;{7EHK\$C˿aQNHz&-|ea@y]1#.Fj.Z3j>&W  !!  @ܳ* test.jpg J[  puremagic-2.2.0/test/resources/archive/test.cbt000066400000000000000000000320001516533066500215570ustar00rootroot00000000000000test.jpg0000777000000000000000000002676115005030323007437 0ustar MExifMM*bj(1r2i ' 'Adobe Photoshop CS5 Windows2013:01:05 22:49:13&(.HH Adobe_CMAdobed            "?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?Tʩ$ \Photoshop 3.08BIM%8BIM: printOutputClrSenumClrSRGBCInteenumInteClrmMpBlboolprintSixteenBitbool printerNameTEXT8BIM;printOutputOptionsCptnboolClbrboolRgsMboolCrnCboolCntCboolLblsboolNgtvboolEmlDboolIntrboolBckgObjcRGBCRd doub@oGrn doub@oBl doub@oBrdTUntF#RltBld UntF#RltRsltUntF#Pxl@R vectorDataboolPgPsenumPgPsPgPCLeftUntF#RltTop UntF#RltScl UntF#Prc@Y8BIMHH8BIM&?8BIM x8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM8BIM=testnullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM 3 Adobe_CMAdobed            "?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?Tʩ$8BIM!UAdobe PhotoshopAdobe Photoshop CS58BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlongXFStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslongXLCntlong8BIMRoll8BIMmfri8BIM~http://ns.adobe.com/xap/1.0/ XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmAdobed@         s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?*puremagic-2.2.0/test/resources/archive/test.cbz000066400000000000000000000121061516533066500215720ustar00rootroot00000000000000PK,Z@ܳ*-test.jpgVGA~jbLH"X[5񷀱$"HktݍM'x_'{EEA3-1 ēf}{͛I**Odb @2 nx!@ NPK_>"(F6o*?H5h}5@ߠ9+(9!<}mR 'ME, :8982rpS89dH {^Ίo@}!3Y$͑T $CPXa==z!_+_]M :L{A}ց@ IG>OTBCţBG ]Dc1]x@r{|*ě 9t}/&ou̕Hlb)tu hpFliK]{ݚHkCv} IPh9 O~A_;lϙ]W:R_yoбax|rVtHn3!_I-xZʘ@'Scjb4n;F!r1Co\v^i  H Ƭ4vK#*i#*QZ&q@۴< L<bx v$Fvr]ΏIn;G<]7{f&gE[#kh.aL!oM֦K^~g4LHXz/ EY &[%)tG(SY}OuޠDUs<-^J9,V6z4>xokɔ:]lh\u!ǯWΥ\Rav&rlw _R S+GMz mkuyq?7EL諂ZI:k<FXw8K՜{B l*WLg)CGY-g9%G8'FDG"dFdJʅ%d5eٛmKxSMe8³'⃪4AfPQrK,eg(1f{o̟a /U lQ\:Rb4QMҴ! 8@M6"yM{B}sXB *T -<8OJ EnY˭-"%3Zdȴ\)Ep{KdBPlE7y \\)u92`sYfefݴtpl|>n6$x >j߃Նi߹)uAs`)E`5.,n5Ŵ6#`DVzU麉<_Lls5,$;k˦.G99Q9SCc7?#ú]0 %PQ0I 7 EyuR$:/ {4s 2I Pin4(İdM#4I%.R2ĄD"C$*!00Q % P*AE-Ugqwgu~9룿~U*uF) ѸCx - ?l:&O6 q -Džɭ..{Sb{9 }%Ԋ) ,X5XLd!y؂B~ *p Fш&4 Ѕn!) Cxq|" 0ODCɔBiAYC0(DTORݦnz@OhIL ^^^ky#V~>3|/s;wr8O4 W$U"SqIN+k1&&Sj鑩2S"GV [d+K9&'\P jPjڧN56uG=Rj\EԜ:Il]t>[ }_#5$ o|9iucQ1?,JmV[m=5jMYvf>>m]v=lGyg;~itڝ^g|w]wsn)  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNO)OIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DbScs 2F[p(@Xr4Pm8WwWi |  3I`},,llll\@\ OA5@ȫ XXkqA`bdA`cg1321 0!8 '!M\. YX,JQGUgI6%2uQxxHJK8Ԛ9$$[-v9TCϠUS!+p,EȨ蘱blj/~hZzFfVv\͗?fu֫_5 ̬@?p03—M8]V8h"/>Tv J*hb$6)XuQCŗL4L9UUJ=$͇54/?2eT'!^fbYZr IW|t4rUer~܉,Y,R_[5PK?|ZT(}$ test.fb2 4K3PKZpuremagic-2.2.0/test/resources/archive/test.fbz000066400000000000000000000004231516533066500215740ustar00rootroot00000000000000PK|ZT(}test.fb2UA0Eэ%@/ڀvyOk(5!<p) k`G >bYZr IW|t4rUer~܉,Y,R_[5PK?|ZT(}$ test.fb2 4K3PKZpuremagic-2.2.0/test/resources/archive/test.gz000066400000000000000000000001131516533066500214270ustar00rootroot00000000000000dPtest.gif DљF@܉DJR%" xCu6+%21puremagic-2.2.0/test/resources/archive/test.little_endian.pcapng000066400000000000000000000027741516533066500251100ustar00rootroot00000000000000 M<+$localhost$\^A:: BE,6DCY= BcSc5= B27*\x^A sVV BtEHE CD4"3=  BcSc5:; N36x\^A`:: BE,7DC= BcSc5= B2 67*\x^ASVV BtEHF CD4= BcSc5:; N36xpuremagic-2.2.0/test/resources/archive/test.pcapng000066400000000000000000000027441516533066500222730ustar00rootroot00000000000000 M<+   \ 35:: BE,6DCY= BcSc5= B27*\x435VV BtEHE CD4"3=  BcSc5:; N36x\45:: BE,7DC= BcSc5= B2 67*\x֜45VV BtEHF CD4= BcSc5:; N36xpuremagic-2.2.0/test/resources/archive/test.rar000066400000000000000000000001711516533066500215770ustar00rootroot00000000000000Rar!ϐs "t -11+%2<%B0 test.gifY7GIF89a!,L;={@puremagic-2.2.0/test/resources/archive/test.tar000066400000000000000000000240001516533066500215760ustar00rootroot00000000000000test.txt0000664000175000017500000000000512072363426011602 0ustar chrischristest puremagic-2.2.0/test/resources/archive/test.txt.lz4000066400000000000000000000000171516533066500223410ustar00rootroot00000000000000"Md@]puremagic-2.2.0/test/resources/archive/test.txt.zst000066400000000000000000000000151516533066500224460ustar00rootroot00000000000000(/$Qpuremagic-2.2.0/test/resources/archive/test.xz000066400000000000000000000001401516533066500214500ustar00rootroot000000000000007zXZi"6!GX:C0(]#D/&ֲ/ -{7rXWȘܲ[z+%2@1!B YZpuremagic-2.2.0/test/resources/archive/test.zip000066400000000000000000000002321516533066500216130ustar00rootroot00000000000000PK<%B+%2(1test.gifstLdd`dPĠ30102XPK<%B+%2(1 test.gifPK6Npuremagic-2.2.0/test/resources/audio/000077500000000000000000000000001516533066500175735ustar00rootroot00000000000000puremagic-2.2.0/test/resources/audio/test.aac000066400000000000000000000405261516533066500212270ustar00rootroot00000000000000L*T!7L*T!7~L*T!7L*T!7~L*T!7}L*T!7sL*T!7}L*T!7sL*T!7}L*T!7qL*T!7}L*T!7~L*T!7~L*T!7rL*T!7L*T!7{L*T!7}L*T!7yL*T!7yL*T!7rL*T!7L*T!7xL*T!7yL*T!7xL*T!7yL*T!7rL*T!7~L*T!7rL*T!7|L*T!7sL*T!7}L*T!7pL*T!7yL*T!7rL*T!7L*T!7xL*T!7xL*T!7zL*T!7zL*T!7pL*T!7yL*T!7zL*T!7zL*T!7pL*T!7yL*T!7zL*T!7yL*T!7rL*T!7}puremagic-2.2.0/test/resources/audio/test.aif000066400000000000000000005673661516533066500212620ustar00rootroot00000000000000FORMAIFFCOMM@SSND|\WOl[|dB %n!5DkWsSo52SGjB bEL0{OLF28">}ysxehQJ>(;`"Tv{.BCD<:!# w]MJ=l 9cbM\$*)$!#"'IsuN/9C! YDNp4U&X4aIZHC4.1?Ut/$RP:1|wylZ_YRqyS1Cm|U'&Ibv!pB |dv_zij-2ozjZS~GNMw.r$~+q&|y7>p)H| Z@v &~+J82Aw<3Lz'VHn#x/:|9bY:._T,jE|(C!;X;Z:8V@_$BTp~gA]xl_|Da (.+G#+]vXo !ES+:M[[i. "+* '0INOS24! 63\W'H?2%3#`Nh rq|_S%= = (+NVSr(@8AolJZiYczC|*{'.G?b1*'}vRq`DK?9kxBH-I?h2g #3I-ag/vfIHK3E}~`pkfvFDhmQ:2=M0 zbc}`=i=5YLtei&~ <[}k# csCZ,fQ&-$; gV^3TjuA8wN5'}w0(c@bCYW3t]1\2LKpR9XMewXgqA_{XH^ZJQSI;>b_K%$6DptQgmyNSGMMB.}&{bms J "4:2m{Ovlah }Y-;8'QY x07B^[Rz^Q /UI>aV tV SRD eIb[{q""4&-JRU^TZ#pk*%WL,)62%.=) qE3S<[O!q eaOI4BNKX.jdt" )*D,k;! NF*a),MUD'&*  (I&]P>,gC]j<8T:#{5~$r@2 ) `;Fs_:{C{ \K=.;Yi{&3J@m/5J(#auYgyZa n |Q_;0,U ';@Qi . 9cQN}@%IYO\e'aw -j$:"Gs }yQOgVrIR.*#_f!rez+0jTv.dzc%X d9HDf(%FO&!#Aj,_ma\l$jGAVQqkL@R$n?Z077=*0f3Vsp`vQh/Y .!4'-X( m"MieJGLVL9Ib  7-vNDU}PG++)6/$=V6O#A38BKwg"!4ENkP.H7Ri3s=rph{4IC44:B1SY[EwJSG@0vr~xbZRAcRcS2Y~XZ a%+5N*l+Y} TRI|WH~hU&E 4;?3,*  )PX$tW8($=95`|T1Iw% |"ZtzIYQ.dx?<~,|%G:g:}T1va3. " _"p3J( "!%3!!!lwF@*9 GKo(h3|(V r;}Ea=~;(T#'T) <_[|GpB`  \6g4SVWrpqWTG\;FQwGj{gw{^E!<5Q&))& !18JBM^zqpZ~IDfKb ~cwrgeinsR{A;)+2#.9?m<03!>2<+VJ"1-1$>:Z8Q=1C4E7\3dXJ`uudF\^dwqivq|U\y[zbh/-'\"FclZ Xhi=#Ab]hwbY~ # !#%|xjDMsyjY{Bi,(IjT5sHY\z|MKo=c 3fFEsfXmSwDwNP1!?@3\ud]Y,csRmd%((gpMYkzXXW8E{uG)6 {\C h-aR@5l[kc,&Z m8f-V#qtWD|F ~kXEi$ArK3]gb])m!}c gxuz!;\O\0/_4e)WeL<#00JTFoTaHy c@& &% 2;Nd\O*d=.%)'OBd vhPb$ 4, -N+ Dp!G!>_U<(zi85N`V5"ssD7um^*bfQx#WC{/eDJ,f %.b?u-P3+6x?eM>sNnY{axVr%\)3>DA 4~Q!E k-z y?H_GA& 5 ;\doT x*(@O T OO `@uxPVZ}!+y,x&o#%qo`ed8k)w1WY$8hI`X:hznu_>E)?;LHZpnmIKo T0X q_&Rv+okQhj?L\LAI>*F9=tEop  .8@2!U&]a=x}^\NRxTD~KTLwIakQO}oGP{PGV^I{69' X7C?"6t/EMUKMD68M[?'2m|uOUM=@&d6`=[B"~bOvYS&;-5-|puZ88%=5=%*18F ZV6BGG5IKl{YZ<4J:U:[Jvs`mkf^88! 1E+%*N=YO^8{KlY282h8lUF3j*cI44 d:I&hgw\BT@b=wAAD<8[l8u"wgT Lc1JMed{,_$D%(    J&_+c:K#(0LE;D=8MN3D Q@#J1F (2P2;audUrAa_2;ke_w|plputtTp8Jq:K O&wDgQY_V<6SjeYlP`bA/?84CWO) #G YXXSB# #LW:&:zNN0; aoqv6O%?iB"\c"s!o\uP (g$cZ5 =/t(>@TT-)GmeA;PpR|qj &sP#c`q"RijTII-F-IrZCgd_>lrhIT_T$&Faon9Xsx{^#1g(&dbc:WqL4?A0!0G*c@ZR'>K G&}#{xvJK"(K|/6:HVero=c%.74Sr<l+fGkw l0f0E:-l,5lX{LZ^~7.^6:6qmD|/j"@:c0P|>WXB5p/s*BQ0r4tkT$o6ei- *'"  ,!*C7oz'#_Y ]R>4*bRQ3O(( |]>o3Bz||2#9QOq ewT+ | j@O}$TnmPC|u2c@Fw-wJi*X97Nr,- P6;*Q q~RXU`h)9y! f5Zunuz)O7 |5,zjEri4X]Mb9S/[&KVmWM$m6o[R&(=OocyI[Wf%AN[VSYUg  a7g0&<[4f4CZLE2#ifFLD4 wj{x_ 65X/0U$O91coY$t439HW qfe5z h;6]n^F-#mWmy`2WL (G2Jq,RaOF\v!)pG|fNa} RTY& n.PmNa_=BYKTAUA~ ]@rT2Wi$q{URO%R6D02x- K,|duf)dqM2LSOgEkXj;6>G<)>Uz82rU2XZ}Nn6x_=:0Q/}:/r;ayIC| dd#MEYZI+sSCP1q;qMho>-:Hx/\DhaXTJ2bT9GRZYVRCaL([k(\&F%OS;6j-'Gm=PJY3J2'UpIIrhl=2ED|1j*Zs/lU-,49=h:fJ[1{p\6&N)@>"+,,F 57:EVjJheWuWpf,D OsVmOg5|=,$gpJ.^c&e L1m(L:7}Wt)T &#Pb^N#Uk p MKN/U?OJQ (MyYmR_$q:o]}8(*[}ZJr|/^w&okAqz| Ej"XGVWHaFe63S4esF^8n#~wyAYT2# 4$6< |d {j(wz`u7_rF?s,w-~2I@k2a-$`>JLCSNwz-'w)$#[)9_G>%^z'[ A'#F7Yf2p9'zZ&- @>&cg\UrhH.8cXNy?BF~HI.Z 0>)P-v;);nX5P9="ha80VN{:zd8Ppt;FlpXd;fB}HNiyzWO9a,~te+R4Q4Pn_5'=s={ `cvmAtR\91 dm,D5 ;d(5w-l+:m}>Z`s+zc(+B<3;RFq9unn0B1Y,mxI?9spWm)GsNq:<i4-UZ:98#K7$.<.W;WjbLC_Kx_o^zqdru0bLpN@!d LNb9k$n x=K(ik3!Epcqqfr~o{%`_,9?R#Krpk@;K$~.)ST[6 \{i NHM\tv*g$nmd#"^CqKA:"2wD# ;8YBH,+jfc7o.I1e-N8=`8D>=*)ZO#SK|mJBpepj\zOjXdjB?zkf {Ol=9k,;(nd%.YDhw}i98Sm3u +\qx\9_ + {2N)7 @JC5 9y?=qB1[?( gb+Kc~I1Ilnpz<=s{ON ,X L@- 8#~ #  /g| 8#z!gUp6deruUqY|F\cLrdtj}K|A2k5&!$+,;Yy0LG~y Z 'WR=OG @E~}qniXB(y*&u YqDxI[*?u repI4J{"% p9GiS(*NimV|A`|+3"CRG glVWacx_\vNRL$"n6K`kF5z?a-JCk9v8Z|"7_z{86c] ak4LDA'ss?v2r iZ(M5_~v1_ mqO4Qx3AY=op#1D*i)q.@Geob /Ny(bkkN< f %3!  -,$(Fpm.qlIKNG ZOQ3?" 1(.?S4o4gXm>m.1AC48:*O ?Hzdy jHIG !Sm\ >=MM"JL>AqB/NY9l?q Y,R%`VASrb:3$2f/HWO47*nkk.A 1JYFt?7r1hs9r \ }(BJcvLv)0N=J(F\xL>o;~lb %3iVb h.I2LZ?5 T'TFX. XI9fb !XIlbLkpo} PS#%LT Qgw`5%B]K-<%) )?~oyaDI&p O 4boz`qWyf &[OVyrw FB% :]G,(:I&G56fk,V*`G w#55 `'o7d(n,W=@ = |fM~YjkSlTp t#4!Wl]YF 6MR ;OY5 C3^t-Q@%oGMq)w!eA0OP5= d AiCg-k y ~(CX0V%bMeZtefK.ITNw{s,W.N{0+p|2ojweo_Q.^\ )R% 76$6:(l0+CZ3%&  Y6C0\"bESH{w+?~uXyT,@Sr$?<:Yw]9%}3JL_coFJ)MyOT(]u+p5Y8%Mu M\~0B|xeby6wN#[vN=90_(d3FFQ;H)H!NT2&A[] NFEw/5g,D I]I5IF8CVV`~N/FVyI$R%0#?RP Rguw%s q~~5;cz &as%TO@-# nW3<hWutH4Lz-?zz+,Af)\$`3QDP{ uz . aMf\E$w!nL !N5$Nf*d$&$ 0`G^+Urw'};vnr9YjN``z8rq xTRpz2\#[k^fC'|4}uu W8Sx.k3c9Ts543c`>Ik5AXgS7.,C$.JG' nhg>7"h.# *)/i1NF-q';t -1#+*)TQ 6  D_b*az`Vd@YZ8?%k!z5|([ ' C0Jy}J'|V1"=@z\:KzsZL'8&}V;bOD]:kP[-I<#/ d3K:vcq!} q HsoF!2Xr:rJL>8leFRT-p9p}*,|r:m$M?ggFi q ~#:8\|muWLA"ToJ(doHU,=LK;E,1{jD?t&k}2%@|:@ t OJQr[2Des-EHrj}PNufUSzpPi_YfFQ< =dM* )$?3 ]W[8n@I( F=M!S|UX s rI^b:m)|1ee#GS)fiwNPecLOkoVj7> " wOSZg7)?RI(tr" 759HX638!>wFVfY75o8L, u D(hW{O6`2|W>&fmUc$h-Sw3`!-!>1"GZ@$O$ZgXkm70.4.2[9U #\Iqz{kfkjaMe1jMiCQG?:?&%\)k-Ty 9;Cs8U>;:"W ^;,$[URL^pk_Nl-stz,7A_^km}ygGT~aaR>O5- n! )~,8*=r_) @M4 .(mpH 2MEp<1 N-U| >M &0Vo| !|,\B-)i8-"x:b<4ENY{7}(exf=H;!6j!F`9q}SrR?b3(7yVwOi4[ %-8?P9[(`_U{toUxh0^fjukYe{yl,tX3CG:l8cG9QMh "Ug3c \*[8V4/]]7 (2ow}wa]Z8iNftCR)*"z F#@&{;WSH?*,/+^c/"e[ eb0u27nq^(9H^U1TjinKy-bW-4u(R?G BK$\6PdE.0 0I$ [*1\xu_JGEv2o(4%;;XE%(YaY\WB?`,vcM >)8`/G1[Qc ]#@)tlN8V^F2%&NnK>q##u!u=XU=|xLd-2 QmZo 0BM$%f5w/wUjlxdOF>P9x$2@DigK;DuBUhtvu'@Pz1U{10(-;&CO]PxQ6CVeVXnrmrfa]&Febpe4g|TufuBwq+?G V_tc^M>H~3]s+x@^/^rM0rj8P rupooB\ as@< Y}H1W\Lhx_e~%M3ai 8cfq\npp di 1#6#lMVOqT]| i:H{ :d /'VFTw$j3tQzWP\T1.N|ZY]H.~1\)QO<#)D</vyYZ$Zt$~9fLW?DO^GqrEbmVko{ -Cb$s&79.& =4zwI'~^)"pTs5?459-#+A0Fo,N.~% 6nb$D[1q3eo_tqmkF3)M3A-8W.QSCxy:8cu`fJP We/&y'`7$=Q^ZB<4B/,h2TE-"G6T>gpX_P &1"O4@chNt-!# Mbz1{)S\]!OUUd+6x~ HE2GY=f ..Gfkjw|NfARieVz[]*-s'&ezbW J>z8=m"UTn:9:kDp|VNp;Q ?\siL=Toe ]\@?nFl+;1!3E;P:7}O 4vS*O9^ ^byL%#K%yx qkO.#Vb-BcL40+hT1o;2G]$5Ekr]^h_]hy9/y=a9m`WKJ^|zTMx(cS `1^CQJgbKAIdMLI!25=2$'dr4#Q-QI]VhC~# )9o_=5"b [hWvl -J*imQm2w=zybtT1]/qI+u+G:hP YpPm`|{Sr=-|HJPreOk'd~4EwSoz=,")DOOmvZla ",V+d2\i 6Y"{HR+(lHH-icvu(F}Ah^O]oo@j_lO:xdqz1h7/e Q )"eNev!x~ MH { 1W+=wl|Mfsux[Y81N"nfJ?]e20@eaw MrleJ r!J$DH7<[ O):dKpV&2cQ%d\wZ*7Kj?Q08 o7mWrx~b_xul0+  w273%F-?L~V B#@}w;,MmRpJc;}pwy?T}Pa73TDQy!sG[aWZY4R=h2&4>%{15|Bm%_* #Gl?F*c8m;O9~J}$TSu @Cg^v(ebF$nii*7(X-H/G=Ob,puceeUx>0/c'>m~ZUbz&F'&)+s%{I5O=b"!;b{WYrkEnFA<;c BE_1J@?RelqQp]s4FR} Rq8E[Hc\>TY0i%'y+.248N^xOeTt".9BN}I!E% KMHFGW_o-2 82zS;Idv;C: >5'=qt#HD[> /tsVd N " tFBQee8^APY]O -^*sZO?o,]O V[]w?|5rk} kwMN0us$zTX9RS#|7PcF< )o yMA6 }]dK)FV*4osiM:_3~0hoo {1s^\bR$e k>< XE4` _RWb{j{aO( Ia F.&8G$ 7qk)g 'RP=(I >9~Jtx 7!( 0IOKSm~m TM:'Jt d_KH{7;M O`4Cgs9NNbqe$3nhLGA{CS3f:uRoTT}D|__aoFcI>udOhuR*7Z8_vEm*]gpohk|!J_QI%U-IwgaP`z$$J4B+?}{Xk7dC #"S%T9Y91@X-;KL;+31Eo>{Ua>LK^J^J+:ox=2qYB&SC}ygiPIY/hW Nc*QO"yPO_brMLe#_XEE@}-;}fooRb\rjEHa=Pbh:U*~tX\jdlvVHf\6EcQ40?PvFEtz]{:|:>SfDJ%9NBB5 tT C"4 2Vnwp_.iGA/5DQboc!2Sy`S?PD]}tWh%k8ayBlutsb(UUNJmGq8=E/Y>u?|y=k,[L[4\ 3Lbin$>\av;%!V n=nn>Rt6Nd*8M\o1k9s1MvW`(XDKre[O . ".4Id,?7(W%k)3=Zp|dz[! o2cg},S6b+a/77 1_9aD>3FUFWs2i{:rG,yfYlTFbiXN;F^s=IF2S9&C >2Zvc(*=Dk|pSAdj_{za6$W ~'K2 5)k3E38b QnNX15$`[@a=f%Ofs:?ZB/s,^p*TMx/J$F4h,'3?O|aI P$\>snt&Qv(MfWl72\G.>ZnqF9PL" ,QgY7'5L=%X_JM4=,``rcGSDa$UGsbiP}.7HUg\Kh![YH?~>miRVq[W*w@yRq'gJBSUB4) q|7 F oBL<>`!'ctR'[=rCp;H}CRN]`,cY"*A>K4$|h@sb49F@K+O&BHx4QzM$5(( kzc C4f8s)&" =xih?uD`m>t^f_t1JtyqyN&/4"B&fl+LuU=ph g0d6A*Y5WB :ud|c_zc|LlxP{&, 67"4KUaZ\$h}`]~rQX7M:{OwJd/|%9hr)|*yXm>r[#$H1%/[H |6(YBWfJ Kl472?G5:fd,~4pRc5KLJn|=e+#$/H6/Fgay? R. 4-`@^r/W$I N2X!1.N* )$ 3bKzzgFIZCZ-kCkbLUX[zpgWb%uH^5 L0zlQ,1)X0d-L7(01#^(c"FD @ /:;Y S %Kb_@iVh13Xf$ )6/?cHQ{P{dsz >X[_L472 |sjd^goyUCyY|j<@B0xDsG/(4#r>Jy}{p#I^UPfw{RN![(dj6jRi>RsR)1>P'c=)A tbJJPK&XA9Tf}kkW;KoMt*5l^ajai)sUsa=Ze$/Rfe9i9[j$9jw@X7*2tQjy_7';&u'jPmTeR9>@m =J1(" ,^0C`Wp*WC.'6I;?Q'!5#)B>%   LD(,_r )C#  7fnk}1f~w~kViz^I+(P.^wxcolD5];R0|B}@Qtxz{R A@*) j).Q$MxMUmvwocRIo|eUG+K^6#{Fx06"'BI[99&o+&=xp7,h&eqL|c4]Y( 3/}t'7 #Xxg?Et\H\|-Yy~!/pgt$MSdd82J 9#rP=Xy |v,9O,.YSAG7.alPuPJ>APf(j~sJ-NmL2Ji'1De| -v,UhA_~\[`]lBiWf&9 O jZkr*PS*o1>nyA_I$ Jv kb#j*DuD-;2Na {:K:UDR\}!koGY.FNR C=GA(&=@4?J:,22*.1-" s 5G z  !:!T4($9_phg|cOZgs$.rd;F@~)JoxuhOx$-pch[D+l]V_&!+oQoaIYhq~}x>c]X}uq_N1W_^X?2U'b)ZB@?Vfq}PVxocFVy`jc9*9.2a rJ.4:38H>&2H1-brhe_LEUfhjd3lY iAHXP4]i^dP7YoUsKrh"f#j? /GSp+D?Hex5_P>$-Q Y&Yw+\R,KvV0LodV]r k*V1$r!=)FLtKyQK[l)^ gE] YR"v9v_cgeL*6jtXR^e{-C9!"AL<&(<+qtknzXt4)Cu@VZ& 58;5hV[QxG %N3}\i: &D<U8x}_! 0M=N5i-}!H ,&AC/C{?d!Ge>afv>dm,r% CZ5.V$N$36 KQ 9 }dkc8q3f "cNjw|n]~ls|Ul~fqqoyt|rumkssrSO *90H%I1P;?'"YFltv   & #K@n_fm!3(*#C0o ov{zqh~`tg^0D4O=g%2{^VCYg;bBnCF9\'H,g;>D]X\dT9z:{adjD8$%i?*.2K]vwoWW6^HbR>9()./C>&&2!3""#+'4@I6\EmK1 4ln 9 O2lFk9F9H5TIdkwTnM)"YMSCAA&"  (4- v$J_gr1:$'X\ovE@)`<3_~iZs|#TJSjRe%%|"lu%&*0~z]-g HLZt:[\M\Nb9U:J@HjUt]E>@//\Br=]AP ~%zk9!e(Xiv}@j+~=?9IY\da>jXo$i}UZT<FC0KWK :$ 9e&c)H>;8M'k>_9)$&7>@fbL q%f'&1G27QB"1UqN1xl#&rv1e@a/(j,rBFapxSS%R",K6!$?, !59-63TM~ifxn  8E4 7TY|~Sj>YBW@OMTS[/$;%-)G[3H&5G)LG_.?RsIo@gEnD^AVSv-/[#4 :'1XI6Y8^%5 "3FlAr$n }Kt6I$mjlQ9Y7>?p/QC>RdB9BHV/KHr^,;KM+urrXFLJ;M{ylkvu? 1CnC1z i?CJ(BQ IF I*L,H!7A` h].e+v gXBw?&2a')GVfmTX1% psZZKR2=*/7fVhb<^;[fRzLjPZXdnSA@,iZdI5"6C$# M(Dzqy0(SWjVx[gaa>I%C7_@f#F<3QFZ1UU(=.-@:*&1#R+_MGB@"0&'WUv4I $0:+F4Z4]9WVjr}_s7k9yUoHF# ((S#FU|I[TPjwy|x^KeA,($ J >1)kGUI 5 5$; +0Yftk" @Zdk|}s YUyWmo q,E@;ZQOt&A 2^ r`PdwIoWWv]KI~~ y !IKUz jkiE-FlqT]1:'<759o{^Xi~WU% 096L1tRaueG!z@;1i0lKI7ra_G}O /?g#6(&OZJ"5d>S+? +azQ*jySSAj5rc}XhojxZQ/,4d ovn~&22+!*1%", #  ,+(-.'"           puremagic-2.2.0/test/resources/audio/test.flac000066400000000000000000001044361516533066500214110ustar00rootroot00000000000000fLaC" B\e:m{f1Xs reference libFLAC 1.4.3 20230623 title=testgenre=Genre_000comment=Encoded with LameXPtrack=1 ɨN !nOƊ DCA BU$KMӷR.J$IFM48à g'eoB pGo'r (Œ*s.=𙜋vpmhKH(%oFAM[T+Tz#5Dr3;H+R(AM@Jl:)f[YĐp`3( R)BRz#4/(gt ]8"Tqf&P'ۂ:H7?1/j! _%Y(!u:W!NYCZ%>N8|0zgʪ^WLZ0zA2W- 砲P\ʿ1iJ7?IVCP5DlEt*Vʦ:6{7Qꐔ>~(x02?ѯAOQ=hcW=f^тn%ըB $ק'h8Y&/I3.*@8BU"Hn< IFH{G$}\h%# LZ _k`C8{INH\5c "Y'3VL1aiǬAt`K Y>g .ʑq"Cv;B=LaK*(4e ~ E <V{)) 0^e711ģIb6q(Pjt1mgԄ( >.iAb(MI‰2*2"`AN'M6:xҮ<6`NR-_&DDCC qhkY8H0&TБhyQaccFطz%(fs`ΣBg@.s;xH۠m<撳=E}+wi"Huņvpb|SyQ/%h8ZL.Hx+*`rǔu;ԁȩ}F$XKe+4^e8)u|J)!!՗6:#Zd[f0ܕ"K[ /oXD1A%Y% gyr^}& ܛ-zk'_jQw3YD$W/!S锫fxN$3@46 4!a s2zNwa>mæi֓  ~0ou2tkU$JxXKMݤSeV:喭;B_dL)^X|_bHe'A xοr1ݒ^s2cL}7*NnKFK:gz:F ƙAY֬j'%&y5lFIOw̉` mfF$yF RR.tdH[3:#V"HwT/|Ve%4LVdpXNaPT9Gׂ;,}E6O,uꦩ,)w?1Q>t l\m3pR%1sٛz3$WAӬEUVE|XSĒnk[k $*7ukjsihh-K$;$F||RȦfv"ϴg pEq,bn6)zt(ŵDb:/p T9RUa5Z'6}sRXcYui =fL4^cEyTGvfo@bZNZ`,#N0rLnRDgd򦃤Z%Z#Uq4%Q2cuOU.:jU%H* # TccWlChՊ0T |rNNn-p4Ųu(pÄ* a?.FOL/$^F`AxD@j]#d3iPrϨHϒ7`ஃBA!_PVF%:,T҂TeMRy4RW«&nk̙$ .+_ 2Z y7B W@ *|ӛ>lb?qa(w=GV`.P%961RX4(MW`8#SI=T;KvI`V|?$bR>) g#N: ToMD4mQ*jt>/ A "Ȣ0&3dz )HZɆ˴ȅcmhey m1dI2lxB$ս5X~\Q:PhS8h9Ji,oDugc$%];8/V%vc'ShYҋɡQ-s˗ Ä)(ĈA$RQm o0i :h-%v+_u SH &k6E"GOMf+\a< ?q*#Ф,7f+TaeF+]2>\ʄOLtQcoB>MBxʛy3"i/UFx)u`Ģ ͆\oYU^" ,vN5(9e ʩ~q35ȯGjK W.!d]pSWT8?=/"uhUZ „k-Pz  ɿP$ɗ\9N·:k떗mP<2΄Zh7Q!8'#&N 1J3/5cBY1naWNO4׶m0@F4URJjm~sLA IUxXTjq!Ad'B. DB Mȭښ2 4z:}UQBI%ҔQK6)˃I^b79%fu \t;sS?kvJq c^/IYo%mRC aD"t] )=b|m A(8(&[u5{IiO%zey^WuwBj`G@ H pV+Ed_uQ^;gǴIO!lN=ʿWy-ıoU0#D4p࣊d$4|{usJpݿBQB p8UV4M{[iD !q̼n$żZֲ qC )C8j^տɇnҰS__ ɮSG}4гCM 4YdyA80@QCgwl'Mi}dR_4m$;icSez7I)oS 1(1 Fd}]/U J7#BRVJEcb;UZ\v9 N!c Jh׻X۫9cc'EGBgb[ոgPB Aq?\<*Ð$'&٣T""""&MTrRvؐ4Ku]jG6)ovK4o&V"ݙz5$S$6:CA [sgʎ搴;PzBp1XVUJ0J!1k*NCVu0F.ovaĠ(YJɹ%neDqZ|1U+ljpgM80]˃HTDY7x Hb}&0 yQ"rxA$[pQ'>̢[ɦr d؋fWDH]w Ji1nDM ႪZ%E'y[ Go)}zo+I=4q6~$HܵĔ窹$ENE2UuITWѯ{ыY2JyU}y# M7ޒ8+3̤\ݸIgs"Q-I?4O D"HTPҽr9,EElbFȇ5Z1^$]GnsI9+LIJ }i2NsY,yȲGttQ ':+y ˯&ʂ*%QrQ.4&**5 yb MUJl ?`JK̶Td6#(AY1d0N NŬ|YAY]V#|.pAC"(=4+hPd< dR%\8T]$%^{Hjr :0mWhd"QϮ@3I DAMY1 Q̆.U@5P'9w tߐ^{&jI'P9Dd:Ζ`m1{ qqR$d\hdmr*HI- u\$ 7uKqiGj%ͺdKn5b,ɤҘZZP"ug,E"Lt/*iAx7,sYтƙv3o~'#dN@~(D͢Dd+PQ6,h =.0pB.5:lx,[ <(a #Zkm9KxIf-L>M$,+.T4ވRd\B47&K`m.@Uͅ($#Ok*ɰE"% pK\>[M"%Q3h2VS12}B±@HKu,Kz`6ȑ$&չp +~бi pY!UlGM!A@cc>aUM"'mzDyEM (Ufn&%,E:s[X4D-w,aR6#2qI J$ 6,,OeeAT^ [CEe*Ml۟a&x}87.ɲX\%EQdr=g$|^Yw,:T!5!^ /2hs:ŗ(cA`೅6\|lY+R<JئvXQBd~LU >̶`̰(j HՍYA'Ly>!=.СVEyr$j^CDD>2A Ŵu xS7l-!.v(&H\eԭ)Hg27DH@=%>gʿ>ډrnj,YedAXR&\H{L~1TJCDwknf27$hE ˹&y}AǮm^z3 e3(ڌj"$D /.E0r}iKJi/C@`0VGFL(.eSgu8&zW `@DA8uͤAb' M)C W?68"=D kǫČHM3' C yG҆FYxd'  &O q*(-0iAwܓL|GU1Au$|ʈ4529 NjONӈi`@1"e8** %Ƌ,(Cuzx`iײ f$aнHlIk@}'p eSghbESYT=&"ܤ8ҕstAS8˾PY^`nٗ*SIay\BƜTfUbz"r ]BV[26\\Ai kQ GfEfs `@i}fL M8<4D] " Pp4a2Ad@؞1L lhXg}\*EO( >* g|wx#kVQ",,zH)G4H= kň6_,(Oč<PqQZ,HQ&VM}VlMcj1-CbkC ;AVa z&s8o牾zΘͣ, %i(U'&L. |0)F'H^_aSIq|8яfTPmZ]e!֟Wu!OIp,"M%Y(4} xX'!dH M~ u[gzUb#"wJ dI )*oaogBA!V_ kg0EA+R.[ܐ>4hT 7%ZQ/BAȉ\:gi,sO|b ]n z]W1$du8i,"7p084Z k%׭[EB$ -aUH gjYbmMw,W'F#Gw OACQQSH^P- bx|s"!kCG#F[ccsa2/:| )ڕ5IO7:e 'D}7*bzYڍhهzO *}X-GKMfZRm7]6Gԑ6Y'JH%' K4 )f`=!a ɋ)NO PS0)N6oBHVD%0Q6)0PH@Y&Lr)#wӌEPEt$8qX~);~}+9M,G`r dAU%K ~b݈ވ(~eqL裓' "(yb"JS$pIJ䲅JFwEH?xk0T Vg aY%q .$Hh"M 5u&u g"X&6|!uEِBi[hK 0H!"X! }CIhǐ&/Cܫ%4mesDfYC ?b5Ck4[n ;]b}{$7Jg"ܮD,P&B 2R̵EJHE%sY 3DӢm#Jn ^(pjdjIFjZMXv%E 8 }x]z{3MbKzMs^"e|H:F]9ZlD?fTW!,xYڑY%)X_FZoWيBm9yT(ɔǑWdW~q12*C6W=9eEI,G;%+±<őq7)2 L"H`qb(//n6Jz1w3s LcEFsLi<窩$j}z(u 夨/,6UJLn177]5 u[4^f7CRԑBQH㮤e8wpozrKNϰmz;LcWk"<=0  H\or_~د_h{0*CDċΪ1#i[[_I-VjFIZu$YX"}(<~"Wj'k=\*_aEDy@HTv<-y6O0E٤xzP$oQ.is(p!]eG" ,YrCX.ˌTJ(mhˑ6$aqAKWiJ‰ayu .UL6跗A!ckB*Mq-Eʿr}Q5ld"j:nl[B&UdUE$r6 hDwCEo" v'X2+!P]рň.Y,N":P*TBÙ*6 ɔsx<"! eYQ&ᵆ G4 M: ^߈d]# kQD{-Q!gneg-[=MW#bwXw> đeS'J =,۝] )c2ؖxƍK&EH8=GlELbx"Mn|Æt@n[iF Ug-n-a%[Y('JfZK)PnɮH3sRv*DE gc ť[$\•U]Pi)}|kir;H,huI8֒s)Bʳ!16]vD0;tT6 #;<GMD&R[tOBU!E edyk&rIF>|#I.jgyZ_$7Ћuz8]gX"HPztFۅ ߑw^MB_Xڕ_FzZ]I\3E %JX߯u8 iA߳C d2c¼1:=!r'? nU}ĉ),l2M6a0>A ihmZ\tHcy,PK(a@|7a.S=s%)Ԇ叴9Siʈ.P$:dW$ &G|Id]Lql5:ETx["%:l[~W4= 6]l9S2E.nYlZQ1M1 *mVF)i 0l*O]N5/}Ne{DesqAb X?^i]u3%DW #!Vz׉"/j,bI dU)( LY&^eY4&g|% S2\Z O2$` I>F-AŜ/2˲IUVQ‰~/8u"N _O/ y^u!EcLq,pڦ1#,FY;%=.j0۫ḍWzdnR8ZmΡx9HFM R0l uu g^zxZ-jZKQr.Qa^)AĕH[mx$֞ʒCYUšʜ$ h-H%rIӞQ3EoɨN^F"Mδ?ȈLKHa0&hhBв(p2.ʥ /J!+Q "v6uK-3r&-{Z)%BjJ-Ć~~[UTDyM)F x&&L$RTKP.eΞ+]mf2l\ADqRrWpc?l,U$$BKJVG d>W̦C8NDA/J[HHrs^#xghI#N e62b$?ROYW}6vNj! 4)Ŏ1B)\T3_!%NffZOe|[#q%6gW4`pOHpz *DM@$#WS'&v R9 iq|~F_BTk=<FV9Ht(`_(H#1˂U'K a J-PIm |W*bNO m8S6̌Y_r$_UUsfCDf$ $vBuuScw<ҸZn#*]Q*1pB"NŻu!ҾRt @hl \?23bPc d0hE"PԱA'c6G*9U"(TH`[k 魙5 )8F>#- X`"F7V2ۇe1Oue.Ѻ0ЊFZ^xdg)<u.]@-ZK/W=`9.^^a,'E`d md"ZBLo|xYe]xb> $~BQH2/m,IG&`XBjVشV\"v,r$4qE䶬4Y&_/ں(rY0).>JW+PQ|{FLh:r*̍fn4w/wڗX-it!,=c ȇFqB.=K#eRC 5FځƢ"~ 4q(wT^$l=pDV2$6C|Lhf`G3FR2mq-oym  FW\Xr#@^w$mEk0T+]"L܂ȢIwvOpbKFtfDܔ)gF`sjho4 I V^7yw4)Gʄ(5FSvA3H;*o2HA̫uP#?44:*DQ*1|:6  huiǸR/'ۆ|W~#$р`yS ᝂ _Q `]KaKrTʻFgKMGYyQw4p ] |uB6DQ2JA %Y5_aT,"uTS5Ba\IPMA ЈVF]G q\ 62r.jHIEɞ"pK- PBau(!V*$@Q\$8)uA.{Do"L}Hr0&i0D#OT@䘋tI24r۪wn $Rڢr`ApH;DNHge j) Dr\@ 3KHwϝ|JٴNZe$*uJ2sZX@i =$<d7e]6JܤExCӹV|3].vb\NsddȳJ\BrXV5*&a- IelI&$:" Dx^LֱOCiAu`UON \p C nWF_>YW䐯xAt;JA?Ljw5ta'rL3ye)ץF7?"/5M"w2iXWS}މyr|h/::n~ZJam[Py1rys8Qin@XB/疍6K:^qw91ߟEimoe - U ˼Xk誄[CUXm}h^haTD$ 8DBb‶PMI!ϝT$Q)A2t<)&N AYΦh!_&+HA\N^ ArPkh]4ó!Rw3G<8Sb>W@ʐ4t+2(UKJ^6_AA^lܱat WUَ-l'B0!<LЖ;G@RŐ7R$NOe(",#v]z& )Yy&J(K*cB"gM8FGBH( #ogFSEo`V@QqK+މ%ʒ!y q8q)>Ɇ4tεEz]J c=% VdaPW"4)L>~4 y$kV 1\S>c W9~_=jMmQZ^n[ǠNI:jTJ1N*bqWEj܈\K,6̔Q2`Ή$iUM,be~4Em$ 98_D#:Y_d#ڳuaԄviK/m&W '%g aA/Ϯf:S=*#FWH!AzszxJ[,oco!O;pGȖQ%"V&eq$\۠ 2;ZYdۏWm/I "GpfP)'n($әFK~,ZexvIeްשFXq.Q}drS3 UA>5%J\OɄii5eP@oQ/zW9`Rdtxȷ􆢋]t6m9&0|P@nDXtpG.Lm x'c` ' 0:FcWy$k9ꁅ~$V^Sϭ߄E1'mJܱ,WnU- U)P1gH0oJ_!3{[;|v4'f2ĎmUb/2r-W{:Q7җR(0IRJ-32VzuC_$mQMCK F5o.S0al-?ץ7l%j<_4KdcH U%%" O{e.%^PMa*ӿW([tppNnޜbeg^M'Z/CK[C6[JuL`8{4lί1Uu }0bP=dHagQ )cՅ [ V&'X.WJsT7Fa |9*/4DO Eͨ5dH]N5li}%&.:ˆ)/#0E ) FZXҥ?QeNFP; atТ/)xKMD8@qh}qYP@ʷr6Φ\hUl Xv(ڵß ӊ.ɧeQkR}6ifVωJT+ȹn!bp4[]LjuފS.{FDjADm6l|gR8Z=%'[t ؒJ.VqA${ja3]rK nBǎߓhkkd8I$M1]_sTb MXJ!))߱KRDGe%ĥmv&v ae)D]caIԗk6X#TvID tw^18ws΋s'T#z$d&|:H?éތX 1(Eh6 F tVh4-&&Eő^\@Y ~9/r[qaDzimLr qݪ2<$XFimf<侚tXYBϤ-V¹J*xctHk:DR2\Ie);XHCp%L_ZZkxtnG#abRD<)o7ppҏ5eTQ/ox)QSM&S,CJIdr[_[掕%^Eh/di $ɱF~ϊI۴TGigB8%")NI]WL[Ø-(`,kKoDw"\,2h_TIB"Q -ONEz^!hDCTo(FІUH"@rha i^Q0zWILӍbexA:XdϘא4%ߨl1- ZumiEb2EmGZw/o#x^\녱SG "UҁG~Xğ&ԥxZ'p= VbV~* #N݋?,]iWi{"\1lt^z{+#k$6xHtV0QMEQ#h4uхԣ|PLQ/(NH-2)(ZC3E3Rl*'S۞V[ˊv(NE4h,\s̮Uv$% H˫]]gC/rwZ*i·R3Djas $?s5] *ky-s?HT+㋤ ު2 ,TYs)b"I|ɨNq^IfwNػ,0ōX3}㌉ɥlð yEV(H K]pN. 2'Tmc,E-;f["c&]DS84G$]D ^r [ArNTT%|EF1x d%c K/2l`:0,PP @"EFJ `7Ezc q+V)7EvHRd`\ʷ&xS\F!jM!Ѝg!pwt0;Ehc}H4'P)1v pmh1g$8z!m= rҏ!a\V"iJ )n.x!& %_/`iY"bNgA0wibѪhI?,yJ"U#E^n,-SbiBE"RcsfOHEJEU46@aZDKK:c443ҝPZM2C- "Fۯ UPָ (wHT.aвA<* X}J̱ܴ&  @ A0 !*w-K ."q @DFQb,*~ 2-D]hLfDʡbH,BMAbGUU!qYQwz٭d^Zqh0'q !Q**.k\BLDel cCG)pxhg* ޲c+9\" ZOAӤX2H<E&1a`Bn`QaY(`6XP>øarr.YT _J,LK@p(|%J 4be9lU;Y0ty2 Ф(Z pT[DeðXWZ!jUT"QR;ևAdVd@<ݖi- rmUd.B~H|#]Cda4+# M (d!aoN<ѭ\k[&sb54Ũ#a,۰ͱb-ןE2Iz{c2[jsh$ta@ADVB8}z3zwGˮܤhbV&"٬) Ch!RfRàN 3L2C( p-Kݪ2"m8|[t"@X^E ?)-]tpyb3VQr!=02 zKlPQ%hL_C!t':3T Esoxkg4,p4B!;[bv! HKcMZ\:&B+,P$Am.jʍ%+#a'9XU R<{ïƔ?we Vxp,m"ݪ1ב̋,w@e_hHqGrFʩS'|V 3_宑˜-iu?(8EaOԍ|BSeU* cX`]1JfdlJ:Lu{;4wC>({l(;+kQ z,&O "&le駸X*ML[&UM(L_4XzR.F8k$ TC? n<}ГEm H9JIG?'jQx*Dl|e.dY-&zIgS,! @g LT:Vg5&`_l'm:k2H؃!H "+ zhfwWt^W 4Ar-Vonc (Uzf YIF!mr=vSDa4#w0AA.n-AQ7w $JO63.]I z٦UdMkXHrGa!I}AT^ie׏M*oXOikVke\n;G0)-VSF33A"003GȷE!־?E`/$/$YS*i_U IA./5%P.w/: =\%n'I[`Ĩ>~§Ro/c Y^?=&Ud}?5I>&]`K9a*wy '-H0t'.Ee/,|E! +mCv%Q[1Ԛ2#,Ɩ*V!3,< FAaIHFXR vz,ΨIOQ* >XjɆ q<'Ü*ܠhn-MSoag5&߶ۥ׃̂ı:CB04FQRC4"TckiMq!nH#2g q~e9k] LqTR&-|ʅj3_)i< Em2ޕ[+{\hQʮcDm:”9?񽸽 %c^r/!0J33WlˊbiBnc9r\ ~aA4lL 9Lma[m%Nf-]h>gx0d.:, ,fSN8qΕYyR >oZyUGoH(b&[hˊ.e=%>l􋴡t{Ojɺب ]k{iȟH@9Rf+LY/5'n8vA+ۛ%ͻy&egRI_c!@IDBj"K};D"OY/y"r=\I(:dI!%6/I'P3vUz(vp)wُjOgt+M)p|fcX:_z) 4'B}4Ȉ*eAêlBEVȑڼH.;N8S^2)VG;=/cɴXm+Q"L qɷf(B\|. q$6rSqBV8' ԋ^HeOIhg[@hR댗UqbFVcvbBCdeB G$Fx8W9Q $B_6l.x%,xddA'X}RHs-d=Ҏ^fyJ Y,OKlVճۣ,H 4ЙS,0$(u"ɸra%ÜDRVm$iX1v.37(atWz2Rq=@SDۓdRM&G&ʴ0L `dJQk>̰#elj ZтZ1&J"D_v3N5۽! \!+zu,X;[P$8) 4x7ǩPՐ)i? !&K9hۃ=ZZ/u~Cls$!Ob"'Eu!ETfLRG9ĒQ5B k y!m>ad%!"DS0jP[RPg zQrv~B?$%S^7<H0Gi 3&dT15;EsnlFHU9"fjq*Gf4̱VsP{E,,` ;߽ꩶ'͙>ڽ KiɘhBz/fG :Qa?qeHLMzb)paګ(ȶKX]dx#džZ,~bFUUP&[; Vf[c$NiE\\AuVlYC 3rG!Qw Vni_ bZsy涕Ң83YHD%,XgdLn1m$kzl8(+ul0%gͰ@h @ [=ij֎1@!74}!kĴAiLo9*RSMB `(ǍާP㣑Ti/,1CI}OGMQxEIBDFXMBqZe2!w Ddݩ'yɍ1dCBDXafAXf $qD@"Y6r4/v"E2{8)Gp"KDK㦲XJۡ@6mH6&ga cfB s@Z2($"^K͙$JX!b{%TCF} hm!Qw (ì]sXsjH2.'6yIb^P SA!2)&]>TOLYih0 wN !ς#eRU: pʁDMCۘB9 ,Lrİ (T |2bo"HL%cK)amoEiMTPü 8K>C~ܩ{iir[^09ӄ[uS[$=4o5oBu)ϏU4#[d,}CoKjHpLl5|Ji(ND P 9 9;0@:D OpUD~A E dY9 -֓gq%1-iYiؚڂNYe)2jt'\;lٓf(BCq:GIvU#l jG%g2gfJH0!}bQ9]ޮ[r'9"AѱxBsq::` `oPK Kj`zd$A[Lm,kаUUYY@ ozaš5& DVNd.H(aqCr $l& 6Vڂ (aq[jm$QQHI.TA .TA 6Nx=QGm9N{H\b!Q$BMt;@O#VZ!`$pZjVG%fȢĶHEܣH33M2:uFIؕk6 cP0V “ *F8*PÒQORaRrՕI-ݵSo=Kn1.Oe(Rg1(d.rFY48d Ix_hwBr!SL̈/̭`-"dU)3h@:4@Lx]khlֹwwi\.m9nQ,`7.'}]_u.?)qDdUUmgdM*DR"#-dJj\s-#S$;I#=a;{"uRL6b ν[YCF/WByouh llLFZ䳰rEvjV`nC*hQFq8t%*JqL1ٗ$ph d(|X?oE˟i,?ԋ)2.^tĸ15Ց;K&!ptڣ]c=tʨ:kLTLˮmvq_;Iy\abðXb`9`^JZk#j0<[m̠dQ]*HrGo S=DNAWsdIzy䤛EId]լɪLÁۄrzh\́F  4K~i'iFB@2[mmGL=V&֬Uam"0Q+E"e7 (*'V]fx`8~Å4,X8TDP\Q#dmmr6[}[A;.Kx$m$K|l=*w]&R I*kiyE!AImݮ0Q KJ8'f‚p$jI aGf.l<ܨbZoE=36Cg5s7Zٿ`^#j0'4EY ͨk̰&/C;w90, o1R@ۅY(Vn;bcz Kse߬3 XUUfkD%$7Au"]E֎Et F]#ғe1$yi?z[`Ԛs 1.1|? Ȋm۵?sڥŹ7hzrY;+0QصXSBӊAW`A@Ts{<D23 =eE$< ,0oE` yZB ){e, GR/RD`dV{Fj/ 4ՋWmѰl pW߬!{kԙ9OuЉ|*!vwPNl2]FVw#Pl.^_K#Y1fO*2DPHƻ|bє a J0 {4`5NVsipK#9~oR ˅AnH"[&| alߑ6H XYZHQv<12HU/6bIudT <C@BKvmCU<9TQLd~0杓H`6?14P,ʷ 臻Ƴ;R7p~rğgg۷.U-{SzMϔ3e|} nM_Veӻ[>`dkFh5'4ʼnYͩЉiLUT2FUy H$ʇQdQo}-]R4h%T3Z@ԽLJ=y+iȮRgEδ>E0Hm!Ab*I "ᔫv 4rqer6"!&e xe,axFpW[7nV]e!uzw׵[g*\0m ofEYZ+vm(b+al@KTA3xIJ1M1g"xcM[&c^ZlGl2YąQ wT3j0RggN MiSlڶWz7S`dVk&j@ ;'4"mmyY$m- ӕ5+pK%/Mu]OcW!2(iUc$")g *kj(HPe6Q nnͭ*VS}I< sveb!溹Yr}E})MFvmuבw7I%܇nL_ֲLH#G! a,hS`Y'- A2@2pߑysWL5r^;)}GOfZ=enM`W&3jE)-4"m5Yͨ0l P镵wЎ &›2kmmR%҉[)tlW5$8ɱȜQ7N e:Yf;?ߞ_<"\"Y Om+/Z2<>6TMZvfywc&ZW~@m%ߦD#[zlƳPKlɷov:U孨ӞG9|$wݮmrrԟX ?qg'5sdHTܛS=$fN4\deMSOiCJᝣO^"Zxmfkiev{4-ѿp*M$ÿ}Qiui, /D ™:4{OgZ7Br`aVkF3j6['4myY$ͨ隬 o{m]>,@Rik0rW F`@E˹E\9HQ `H2xbH:UR(s Z!c BBv6oc"L X!"|33gJfYnapW1:[J~'۟ήG;5UC݁70giCK-lBRkycuyU9HdhÖx.'+t"K&F캑 0rG_+RMTDSH;9H%TV}v|;P]V+KPέc K1.tn)EXK]Gq` _UFj8k'4"mWͨ ܎rAV%R{AGCnCWg4ʴ=nEWibm.hk>b\oJO Yb z1g[qO^c %Ȼdt_+]+nsrSs??j\T&^Ҍq0s0bu_4RFY{R$[km[5E_7PBrM#9RhrƅV )PM'HJEAnreCW߷Gw$7`Ai.blЗىNK~YU޴8䰹 EJi&GQu|Bir5(H/Cv9˵ /ue02ŵ4U@)rY:,unn/37K`À#bUF3j34]W͠րl\p84 j.HJ ah!HKxDSk*j4>pNmSiF4Z*S,i :@{,XUZYd|Wڄe3pQN׆C+iIy&=#fb@iHk4*KzwϴHE*.oaRوr\g"h}KMEv$ (Ѣn0oo9*f vQ̏7,*E'C-r RYy94~&DA&UR̶n"4D@ھq&fN6%l-:T?&(GWi` I@fo~RTEnYұGUg}mARxM)`ɀ|`VFKn,<1wW%-,( S*p See5͐K Y*6^Zrae|6.t;G\+bxjS/*OɍV<*˷h;0-5o&iLLt6]mXuWkk9CXvp|J,*@`@^pH$YvO%X4dhd aO (7)( ݛWmO2}Y_뮁EC.AL|ۅ-7x>T예*(oYq7<0Ywwq`㸀?Հ5ˮ`2%ךK``U{Lch$J4]=Y- pJ  $ Dմ:2% Q$I1=[kiɉ$I[jiɐXT*&DԶ BP 1$HB 1(Pf1jCVD[/R))JRYcRBPg.1U b * AS\jXw, "@`ɀQk Kh%`J(%@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %@ K p. %TAG2013puremagic-2.2.0/test/resources/audio/test.oga000066400000000000000000000644141516533066500212530ustar00rootroot00000000000000OggSvT7* 3FLACfLaC"JX BOggSvT7F Lavf62.12.100encoder=Lavc62.28.100 flac title=testgenre=Genre_000DESCRIPTION=Encoded with LameXP TRACKNUMBER=1OggSDvT7-SO:o!Y$NHɊfQ֍lb~T@ SD?@ hM )@@# $#siQ)Q ⴛR!eNgNEEֲ3ݔc 6 2W*D"Ɯ%nHB9#2E,Q&qQ|fRRiC[@q! `1J .D(د&pO !jas35hhƲd uY8!%#6 /a@"&z+ A A F?Hp` >.c0* %T@ 0gq5r²9\C= HhvgwXmixk"{K2:QL(Gq*}@% km QiK<|pV? ;Mӟ_%}$ZCzpa2F،u c|"U1,%.$.+s{N00M0bp!χ&TSjB9vB@"*oYP *aE;[:< 6@(UHŚk[M:z%Y?KWЛic:o>v2?;j) ̌U"炋[4o!Rz@"聅$o nݠ"ض-Mm]%yBmRW4UhvAK jJEW;BI.$04;(8Bc&+\ځrT6ڡg:uݺOjO%.rd*gw3:*$պ7voHKfs.R~w(j_TVU3pE,6a4(Ayԣ/|IL5be9"& oA|f $d4חc}AbV ')m2dĖS7"DN"΂ь̴[^{:7nt 4D%ӨzN+ӸLʊ+`{>߶R*b7,T,4I,JxI+ _+%VTWo2KSۨ[I`Q3DĪ,أ uZ$Ҩӵ+Eէ݇ △JYB2s3fu4G5vF$ \' |Lyꤽ51 aQMb H5p|&y)\u|\Gy嶐"4"C>U2ADx| :%DՁ/Ii53lU=񷳂i[܉.\)T N.* KC_07} -FA_$"F"X/'0mYlF&Lp\M|Dٱ: Si((K  d$fbNHW,-&>d'#Ay# m1vh%pyNr%(cUfZM)q!~=T\e1oՖ^X`s0e=qYddؑN+{=&uWܻ3` Dʅ<42l`P;[2(H M-0DL2@|8%tؒ,OW}Ǩ"D\^t*!aX">kFf %]TfAF9Xd !:B$ ;H-Pwװ6BinH&,ZMIz b">;Ҵ7ђQCQ0!Q]H@6PHꦺ`a`P]WI' Ks/VDG"ЅP= ].$!.ʂ "?ilPZ&Q,cfN,e7qm%L/B_X"Yd*sR3ȡR#zexP&o 9C Ex  &.( ĉj>B ˋa161QA  ,hɂ|K ϣ^a@GJ!uxd"Gr$ǔl枡,,uUQ0['0B =(NIÆq"'m4"Iڤ@PDɭO bbd*ZL'ڮ6@IAivq'Zh\|Ke&eL&"o/HZ\EExHF0;rY v-6 i+ d2QRzB5E`,<]X)FZ>\ϐi^}Y ʦb-J3k{JDz8D"j,B-ǧifS8DD@%-%&\4~,Sh+ed9@WI}}oz̒ s[OwPRʶI))F떧 f8 Ʌ| 3(umiub򢈅 &XS 2h ڜ..XQwň^b<IYz)au!4mQ'H #\w  //'sjY-ҳӘdϘp  D  NA@ pD8|PJQ"H>vSR2 f@ZD&ɢSQ8E< v-#fYIcQ&)aHqBj>dLYf -9u*jiGJn74՜n @L`&hҡ0]Y #HJ\grR.4_}MiY.)ܨϗ2(09~n'ZjMi|8Q)$ָ1D)1a I$Iy0@ LimMnU uNɲy]3swRBCDL+۹>RLZ/F9~>(B!ohk8W^m(!nHFiЄceyܮ hץBs &Rq V^oK[I*p-;ڈj^ԮoÈ`Qv+e,y~8„(L)Йdh^ȘA (K=}R,;dBڤ)ZVuw'8@@`r]m6ׇ:k yQnzR[sfʶ\Iuˈ0cCCDž {N]zUкJԹNF 0ĔipO 9誺yFW5-,#mW&ҩQy P sSjJKq0ØCukkBc/4Б`HH -d԰ApP +.I-%dfػԾwy 018GM&,1(Q0bCɘjJ&d:!ȦRYٙӕ\>ԯN* H01 M^rt)cCCF[PVUzE2p2 `@@54V:.4j46ffffFDF6s##!lkvȐmIb)OtK5o&R+lyzcT"IRt0{ˏ"!)I:"V\) Ң[E"LFbYd*LQ:OF>lNҡ+*fF/j;8DCh40A۝ɢL(9cʐ|A#"xjM7fE"WZG;MR5y˻u7a VZb0{4S)d_$>1a7 Ig<* GWqb#saq#b5,('LMINluO.<,Nk|DAS),cN t]5s1ڱ;wSIJٌq"vl8Smx5[lxLNһ=Ѝ Zu*IM82:(.2it u:;q.3b,4ʩ@5-$'VӜC&%M`AR$8v,)  Ā덿K+є A۔t`4^dIUcm4W s/xMalSd0mgO;_AnIUTU5 :+ .8!7r@3MsX AR+.^"&]3>8kAgSj) E{`2&B2-RɈ+xS"6%CD+<Ѻ6vxYҥ.DHHLxXQu0 l*K&ĄNb:$ISZ#Ë0*Ȱ\Kε x,`ټ#A6&1pm_L$F+l%+$Һ R+~ C28+U>Ki%C6dY/5\_H:ݑ$xUSƣdZG۸А:\Y 'aB/?QM|ɱ AEq ewlqdwIb(K+^ʊ ꖎ $nG 4KDQP1E R4aX'EcGcwLC^̙FQ`kq˶ ʯ C b|iM!~Fa(fq56EĪ-&eMh=2rX!G duYSU)UYMCDTkIAM&/ \"%f(ct0R%t"8a de j9S9:Ig"W*#4ʐ%pPDPM"fURGDQREL :3DR p:APaNf*KN{aDz&2$6Z'@ Óq>B(f'=_ߜ CDjoѣb]\ّ3n4ᙴF(d`h?HCAs6(1A-p6 `ܮMD|A"LX"-xA y :UꅃYͥBo-L V`&p㉄ lw$09>Jx%sc}Ik83(h0X(0RaT F$e @XΚ:>`  С$[|$|EףU Ƽ1JYv9ڿ A:$Nf'e ` 3d#':] AsfOW'Y#NQT~"D {s b$ 3bQ:0= I"GI .qxVb,$E H<QPXܶ Gzԑȹs=N)K6)XW fPocdI+Pavr:>tQ  #:'0 FAma-w"f\`LMrT5Gb'&Q' "\-bkNc) 4ӺHn8*NAzdKUSgD(P=NuE,Nb@kIȴ|M•WzI S/ŅC16Mh5=ՈFp[JiicLbyjm7oceNYQS  oOU_eռn9&o@aNH=/J"ht]mƊ@dXD\`9`B o46kx٪xPq:>jbvnm$iԒݾ[}7U0'.\̰ARt\B8ࠑ7z*K`n/Pͅ('ѥOЙmlED F2l< b>d*r2^ j,Zetj !e'T,+d:UInRC 8o T'ߴ(sʤs@!2#WQæפxjPCy0.[-H!sH>tLPBvebp `bZ /1CA,H")r3!'^ 62A!3x5@!#fE?.x}p )hLɱqwZuǂ(ٖMBH,eGz/{ xXt)ZrC?H_dվdfɺIlsEK]g x_Hеx!X66lH}Q'V.' neFXOA&I'M/_w¸r EQKh '24}A^$2̴M%%28K)tV3]߾ډr ,Y%bB B-%D.(9b??p;wBlP3]X7$pE* &"a GFaͦ d&|ըkJhGHKy@2&S*3֔%"CMb,HD  e^QM 5ytV p`lԩ3y0=bBNӨaPGX@urتa"D_!_l^$ͩwp%H ;GZA|L3@dNYI㫤ży雑 H-;!X M}#H' ?1HdfOr ,Uݽv Ul++y1j \`ЙC;,Aqs.T@4m]o>X¼MsD`ntbD%Ijx(%D-BHQb!`kEDX% B o,{5=qu`%dYAVeJ_0s4tLq]'փ"BH[^8 ̱ap[g|V4ȑEGknPU7*! ߕy脀GJFfJYxd+s &q'8b@G,LX]{$(kƓ?寧ʺCXY$twBط829ɶMjNȳhHhbDL~pUfK٦ЕC >}BX(עb faϢѼȢ졘Ak}@"P؍YDŰ$>tZ~ETU$OcɈ){Jʺ 7CAwUuxܠ WV^:9-ͳ92Ja;'vpP =JdX/G|UMHI2aQ=TK=V<*:JB2y}QЉ B9lpmIo,RR>Eਜ਼{yV ,'fbDZ($BCG1~MeY* 'Q3,IW*NbYg/II#BEh<5 6Y, eDyOؤP&MRp%\ UmTTQ@l"Ā~Y%VC\|5# 03L’|޸'ּaJ%)#SN.'TEu[ 24ZOݝImE}Eq;aN],J 928xs#'/ޖr]C&%Ff_:>T0(^_i~й $K8Μ`=z^ShAS$H|貀DGE3)PzIB=?-\OgE.*THq6t2\1VbB{j("0P,ʡ׉#; #)lN3PHS)2b99WYęeOY`n6c}_6c"N)ةL ^vc"f?ĆNlu9ycHTVc)nXX(ҌYVc[DR02ڶ׺j%x$h<}G>(r|q,wMW˩CvaOs5A,F_-$DJŔ*jmrG .9fpa.W Gȉd6' >jD]Q<,"}#j&@n%eaF 83Kڤq-^]bA1WxU{{Tf ah0^n20$On솪0 \7*b .DWq D[@P8|)HC}MkTy^P8)f}zh)5fA*LCegdlWDkKhi.X$JQCccyĮ ҡp}9OC8)\>@ho&=n3D "϶8D3.ʣUe޸.~,Cc"Q.68)BIv ۥ%N 8P6Od?A!x0~>na׬*A7X`W~s{J5,ň]wWAjVopTaOYQt_4vȦ`H-W)iw}ZȘKx/pY %LC>V%E#{1_8`Lbbɓ13e/݂F-æviçы|'[f&6yUOSYAE >a&kyL/$ 7P0¦փArb M8ʠQ*;4 )rbB;PHR`@BJVX5#FMHG8ذPmrB얿K3%<)ը@[$B*~`yWX&x1O<]6ӱ$Do`ktQe`Pc^YH@ZxlP)<&,Ĩ۔''fḐ1&AbvFVTXpv [s7rEeh)S&MSUK*E''8@GWaKS$~O F˭Dz!l 7ț-TH~7_m ²FRIbw͎@ ?9|ltH Sn2FYZQ.Ђ*Ҷ>]̊Q͏R8gs҆W8HV'4GUqㄲ8Fw["saÂwP*ZΜ$b|O$[G\c"G$T]ҷi\Y+3G6%T46XU͢8 ]3-t, Ozz(U,_}%WS k4e3FF{a;SG˴ ª)!QOW."Q$#ԍWH^J.ۍHcOeL\Bi}QoMQОe5 *R(f[/=il#$:GO %O/1͕56r͓b)^k֫'1o;҂meDgI@)z8n.XQU?;!(ѽ$_Ω)g?ɥ$m*Wq{BfXL/u蒆\┏өŃʾ.UR9bN8g`'!$R<`y?!tO^;2ImuF95R{kO\c2̈ܖHqTU1Q[Y {4\/83v=c£(Աd _b,곮aq2ig&4)u.مu$$D-GR8 ":p5R FdPvBHQze\ >MDCc"b ffob"hk:\U+jj8ۂ԰ODLq6#q^Ǽ`۾3b RjgV1&ӢQљ7lk,1VKDƈ+Af?* lp-%ZK)1Ӫu"ХN5gCXN e՘ηx#H(H lOd8*ʥKr?]A}VXq2R>g'уhR_E&ɨH65G*sYzHm 5Dt ).ۊbXE_D&;H](1ikE$M-:w)~]pG$\4%fݸ\]rL)AוCkH&}GK&+ I?E&^amޭE0-v8yܒ~Y_y0yЏ &Fw>J[6e4'دG)xAZd2lg A-SwVZ$5Իt*$Ev:f;~K=th}o^"qmYBH-k#}tM)@ľJJ_.l(c>Y· l&jz>$[2>+" wnq $2'H@yH+z+J"SNITpz{潦CCmCȜiYdюޥ?6&iYt,IĈ/T  ]1&ӅHmYڡ#;+ jN5#Qn',1[a! /%Be dwt`)A"5]GoBY_UY  P,/kXs1$i7mSA Ѷ퇊gJyB! O? PAE"#^ $evaD+?ydAx5 Rhw6q(H\JѬ\Rii vhh']=ҐOb0W/Hȭ`d Rq#,^M֠ڴ!fhFcGg.ˬpH]?&]kU$YE 7PPMIYSrKWNFSDdiҜE)CI ۽dG"G&WaTd[#i{$QDM"Dz+(WV k=-<+2 2(C,"OB@e9`fotWDF K&i{q51Ųr!QVkg-X5|Xj)=d_&Y^mťDӹFY'g$h` _GK+-=IJ7!Ӓ }90!.U`ĸO|m7w*#ܵ_V*h@I1vDz>D"'BJLS?A720Yψ5Y*N2]" Ȱ~k^{.ET&(z.K^Ě4Kyp8lz%1! x#P,%c|D`+Ki|ce dY1K%_9c܎_O(s%.8Z|h$,.bvFP/QB{46hdH8EQk*=ML49؈t7D8"FʪYeoxlSZV9V-Q%#!<*ȡסaNo*@o)1nubQtv XJX62-!. /C6dh{օE 2?!d#qc!t0ф@#RTك\e2#eeBvB1:Eϔ8fBp=LAbbNacLAj0k7<=+ ZqZ<$Sup@F~+˩ljʾe*@O᭲2gja[T2^4b뭅<"Ń|*m%I=_G8`,9=~k*L hÊ/DU9l,5VL}] e\Q2 IɻaZ&㍔ JT Ι⎗:G-,yMS!"-8ß\K=Bd2qa(5 l%.>hP oΓ7Tw0P 5,4$$nUIVA nEPG0].O'U]԰+ڹ){(dĴ~l,5u3l{_ASZ(IC_HJ$!a$%fYPțVD!jA `Ӈsؕd6؎EHbQNJAR͒h44gnm1tQrd T+'n`Bڱ">̴ (h.E"1=.NM"n>TD S͐kze$P:E2|/Bl0qu>u:[Ƞ5x/ep1%E:P> &oD&C8F9`BW48zލKbȈ*"Rs(OBXpj8NC#qg&8.X9@6'%p®2ٟ$K-"L n]P*&ps<{.ua4O)wlLY=ldDOP 3.*,UGhh@-."4G#:UH!bxv4+4+֓:0B\$j]#tQoh qЉsīFl8# M>>IxR[x !M32x Dz"Aɤl.wGf-M<!@( S=\yRʼno1!j &i@Izhz"8$B f T}G]g`Uxo{Y$)mD9Ppm_'Y$'sBJO3$OAa0| d{Z#.H1#T< W,[Ʌ=QQ ?ƒG`SɶOH`=iacAFU18Pk; QxB &5he0B:p , qw"ڸS߂M*HPH}C㏅źV)\̀D@IECddHQȨ -2[}P"aTL2`W`plցb ۇ&tКC {\*EMWt[urRbheӃ.*3J(8nˤ<<Æ=N S!P@KsTx]3 Q݂@Hrn2Q0n:eHQx"ȁ8#.t |,- ') |q4Sw-Xsª_* HRbeÇOtH5_l2)<߰k.Êa䰩~;m3y- pqwT$E6MoXe$0b#D֟I"g‚.@S,2:8xϡI`fK4@R6@>ч҄AT~g@)!d @a8sRD] !+y=)WpʿeutX܈6F;QthF9{ $U\0>V4c$u:8d`JVjI^Ozv<,Q?k6d~ҳlldj]TL+7;RߏB0[^|:JiL7e3 ep<1n.%X0g$p}M&(_RNe&&YТDː[Ŏp[TcZ4]9<䩀TLkߝU 5є;V!)'g6h,vf`Jȯa~HdaIxIJHJYٔes~ sKW)c᚜*k]13 +'t6[$G2e"0GB9 9@mXt,tH0B\wQ3R G|H9ޠ!$P2ţikn*Uꬣ7b'WsM!(w ;PJBZ/ .*c{n'n" fX=;JK]: 3oB h,xrm"U"f+:&YEH,THwYLpm@KnQ* .J`@A;AR1.$[2 }9]˓![3 iC-u!;_[DWzfbCZ>UKucVF0*upcFB]|FglҞ}vq0qDzGr*(6_%%KZ i1 B|ET P.LLiw _+ G˜襻+G TktJB7KHEIQjM@0:.I&YK(9d>֋Ys2en&t0#vKm_y+4g׃U4}Q/QDalhwaict͍ YJ5m١č2.g Nu`0(HQ1ظNI#D;*L>bJ*A D>IVL9;)QTRDuJ6)!ޗ6'<䱙z|VFJ&K2:iIgif%q4y-ɒ^3"eg RTȥ)¾gZFh&zfaQ١K##/]7:L[ǜ,4lA%L[ܒ&`_TA r}!ǂ[eHn1lADYjKYKhm*a1Jy]2k,f~(g3_3 RJVSv!1ߨ|*1) d)\\4TCW&`Ovo"> XMx>px!KX0؁!*BE&_Ma QXu2h$'yktsU&W`_ǥ\ ^Jj׼yLQ>yk*.Dh$m0 m;\)HtғU3 _MNU82R"sh(cMb0%D;QfvmUP)vZ6-tY\~ ͱ*y⻕3늱fM0+J(A۞QWq,DE"h]C"X-*(2.tZ@x&\sOXz C,Mn\&&(!gs,^U6qmxEr!N*=1,Zlb<}D<ӄZAEtSiSkMLXK]U*Y-dc@n$(;@8h8VE;"oS>k3CM:c^{ySzȯ생1{\O=$yD/(7MDʘSުnQe/ռE>PI]ie Ia>NfyDf\}`djY?n`6m|/]K^`O?vb,ío8_VNQ`#(7 IBe"BW#Rb4"( ML+ȥռ4J#SMfY$d׳lk ^aVWd]#GE-ݼnڤ0RBU[-\܃6$ʗPFf"BID9rxםY G  mۡl=}k/BLFOM=`S&;2S]"*JC{ȋ\c K 7фΨ6 hSCPeET |4$Wg[5&c 38 .YA >Rjʫvk7WFCPPATv@F@à \t9ਘ }p(_L~ ۠|d(ty&a @SI2%d@UH* T%I(" aϾ>9 i?N^)9${Qmg UyA: BdJB"h %Ɖ41J,TB(Ϗn*2@Q '0#c?N^]TQYUS$\dRJ&\-fƲN, "l?ՅƴL 5y 2ŶXI(8IyCFV1.l #`tј(XB#/,F Г?r-q{$5ƈ^N!U "ZRLR(z i 蔋0MIV n#?Uc3o/ySfpR7f=Mc0`~A7 -8+v,ч/OR"'ˬ>H݁ &qB;sWLb(ymJ9+)xj+7SD Mk Tp8D[dP gŊ)|'< ѡs,ZMChrHU7ܑ>BFmLj(¦ݰJIX\PyAږoPLbjT?Dy1Ē&)j|ciQp Íp/9ЍŠ@XES@pa#qObbw3HC 8x#qF$dfBiӒso4_fBAڿ&fHDbsϖI 8'vx0p KuJ+Me!e2q-g*} 4ѡoԍT?ܖ [|0`ʡG؃PL%6$Fz(A9FRE2. Nzbҗ{ IA tP酃0m-{@MH"|[i 9wMkn bһg{bh$J!]0ƩHWMUKuB"𚇙ё)jU]Ԓ8E8cRr+9K QnaD8aFrC !LPKG"N7o"FQ (Ҳ8cꜝ'kee"̩2HI???ӀI#B=Eyeqn%6yYМ/A}ƌT2/B' 5f"Ќh8䔪EAP܁PdSjJSh;K7ˊ 'T8&VN!v%ͯTOvYfʪNU7*Rfy sszmGe,6bL?7Sd$Vx>}ۼsL=)R/dۑ&V,e3;BĻO2)yyK$*+!^GdIPg\[uz[p̳s*M;'cj%,޿.D/Jn7LpXJNSX!pJd@b5oP|2j`өB12NLު85)gqz _Zȫ+.O%%MlVD\κ$ډ*L#Җdߠm-t6W$aNړ>6͞oG+tI-L^xɗ*lgkO>fw7pBkѶSYD{+ņˣKcGĀ+cCȯ{& Jlwrk Dr[t3ǫ&j$帚rı;&>^W/p$Ԋ P|i 5W;Ev,6ɿ=S r1ڤ0l6%0Z+1#AY .MCYt:TD`)'UtSw"v^h_ 6Za+udQw㽠 &jIKD)=VVZ ./_#\CƄv.Oѿ*~Eit',jR]yq[Mu=Ӓً9Qi)4<pu2x\aLCUyX2`>@pK2 ؂EQ_ 6 |Qn"v0 "|.YǒK~ ^"H^RG!aI}gL_4_l6Cb'] ojur$E[pIto羴LE#֗]PI4 Eඛ-uo7,AL-u*yjl(J#qApBCBk 毒U'bWn7R9RIER䪛1 1oIJc,cܣWUqN9եb0ǵ/yLxnao/ErA@Ǣv*,H 0) 'Jl@[N}xD¨Xh N waw+ֆ%!^$tIAD*(' CE( L(83ÞgYfB$/Yfb^AD`EeZ"t k%jl50ߔ*:BCcԂ P=\57z6PA1`pP= 炨al (J8{Xr =n>uZ' +Kab jj**")Dxj3a +fԨCe ,BgR_aPX Q,aKBkK8!Ͽ @6!Hvn 5,|=eT, Y0H@e1 \҄ _ ,yF աT' Nt ŞQ˄2g_1Q^4D)cIb+-*5-dA((S)#6[_MlW&}~ndޅmبRwKlvE6x1CA7SdG|/So!T.\ 6ۓa˩Vi93D0efz1BՌe bvS51d$20Q{ֺcRJDI 3<0i'M/3 #BJo]G%"U=}D"usH8J'1رg4!9C9(b!+"8As1 s0 (q,aLvRsRTXXV(b$Ms~Hd(714˞yۑM̢88F9&&d;<#(C)5f3 QPSF7cVcq+LUkba) -~FČ;C8ѓX8E7{AqHP!DÐMȜj4"T|JegmDPpe&Ħp#D&9H8EBpأcLg1H&nnˆ(C(E[q1;^G$RmR܊E'k+ZG3jb R p 80*]4!c|8aMiH#Q eI[Rko"9&HYwQYpZ$YycY~YS+9y Cppuremagic-2.2.0/test/resources/audio/test.ogg000066400000000000000000000200241516533066500212460ustar00rootroot00000000000000OggS ;g93vorbisDwOggS ;D?vorbis Lavf62.12.100encoder=Lavc62.28.100 libvorbis title=testgenre=Genre_000DESCRIPTION=Encoded with LameXP TRACKNUMBER=1vorbis%BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CSذ:IX`!+TrNB)B9&!+sNJJ19Z,sB)XT꜔Z2))b”Zk *ĖZkA]Sj)؂R1჏Xj > [+1ZfD # Q1s9$c1sBd1sB!9sB!RJǜsB!PRsBJ*sB!RJIsBPBI%9!B))B!B(%R!B(R !RBRJ)JRI)J !RRI)B%RJ*)J RJ)RJ!PB)8A'Ua BCVdRJ(U@"BGs,s Zͥb)12RLJ %uL)'-ŘJ眤ssA3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggSD ;887-.*/,+:28(RsfupaQ"C{V%:,}x:9͛~Uar[c8LpKs}ճ]Ts]}0\|%|vF~1f?\ nIs,skɰDQܐ~!'@D+Qב#ׯ_a"#1TBv.߰!/V k`}η+u}2͍pXr 2}ǂ1#,84Qsgq֫eff",!XNOt:Gxň>א=LaHK L_=}jl@3-K@[,2+:^zuԘqt2cFD4 >ݧFۥ59팢5 AGu$@ddh蜽qq%1xG+͑+[ͲwcO9;ܻ IJjڽ7{= IK +))ţ\Ɓ׈KQ( 6̗=dNۮbX_Ԩڃ"YTTtsݺ>a#gZVY6D+\  Ϻ' QNIM{[E]`T|.="G+7@ k0tA@vu.Y93TrFFf4mhaah1C'ҡ%鷺D_[y6bHgff^גWQkաkA o:LzFFjrB+{t~ X*>s 5N/s|6ըWb&h$VݶZB80*hǾ A@.5BġJ4*l$K3H&$$̎)=EˁcŐ*U!YSv7&Q‚gc-"IIEblnEC>vRIc&PE{m]+g."]3c.ڴ׵,'3i1wËŖ+T2_>I ,x=K Kr@|0e`4OaejZ(UĚ-=!!{#fdː!gdDNf 4Umz-dgl4HNWRn@D.YNV*B(MC_^*_ߊnZ}J>%u|y5̳) 7l3ֹՖlsuYD G 9y ^km   `2(0`aZsb )1Qb[2Cd$I,M%mHBf3"cB<Qgbx@B!HKpP]1%Z ,:\ai83gP teFW2حi]F7ZS|rgXsoد2C ]k&r FzIc3dkڈʛO >[-_Z/M&C"r ?wp0%Shz,]',ue:doʲ0`H26y>.r$jmF¡Ahi$Z!::KM% r!a髑qX+#YUE D%'UB][- U|Qygo7O Z Jhp@Mƈ0Pd8y]s^d3C*"dر0 5ct2m3I 3FP`&*AH!i h2W#& Iir%ՋcTӐE-.5ޜgMQZˎ\<"{Nۉ1VQ6}/xƩɧF d <΋> 4t|j@)$4f?>kq]WG?E UEPḆ3df!`0:&CDҢaJ:g5 S%hCbYܕF0Y`ﺥ:>kjnk دNң ku"Ng_#귯 yy( {QO2 k/VPD>x(q+2ram94LCLi.cYD#Kfff$eiH*IO Q[[/6$v"^*1QHCQ c ![9E.*ap:3pH}n.bãWaVEmy_-#s9<0Rϵ`yW2 >j+amPx{WSRJB@ r%eaU#gTF iYd$$2d2ۊf'iEmm6H^r us;0Ft hl,D ( ;жN*zгȋ6+mSdOW@iiyݒU↌mvoh5dڈFmGZ> Uقshy1  >ZB:P:.5"֐z5`&bq iF9,#1YӉä3ЁIdӴ$z4̊Krj_"6z UIQ10WЙYK=ު*ƪ^=@{w4)D#BسOa[E"2/oN]qj|s¬^ ގ521NǗ1|0 `(w3L0ATMQe4ɞE*k-*l+iIJh6ޯ-7e?Tq~AWj5TrRo.@YZM$5Eh&&/^qȀy ϥbo\v?ZyUޜ~e*.Tw{Җ%i1h6Za Ǟ92dA(ʃmM$K ̘ɤ`Hd:I`$d*!=pwu}yjέ6ǴdR$LR.) Sc[W:[Dz#q#':eP4E1Aԫ_]3Z\er(Ux6W:=*ݠqy73;ogm2r2sn=gm`61&1(i? T̔B!泆zwسsX4aU%3ZfҬJ08IXxV!Rh4_F h,ڧ< ?F*. 9~-ƌR,m-,wS<գr{DdLH)/əKo1c\w g6OQ2>wԘqD+-ow8f6 tr΃}O6-U/f{F$C޿ z'-} uڧ7Qh7?ǮzR/\yy Fo׾9{ֲFߙuqOn.77lXYm,fTL?C/?il.4 5UFgw>I~ml? ] Az $|=4 y{WF+!y+趽B 0,pPnʬŽG;!l^'(_nNYt`puremagic-2.2.0/test/resources/audio/test.opus000066400000000000000000000130131516533066500214600ustar00rootroot00000000000000OggSBɎtOpusHead8DOggSBeσOpusTags[libopus 1.4-9-gc8549975 AVX2 [Dec 11 2023], libopusenc 0.2.1-18-gd53a41b AVX2 [Dec 11 2023]BENCODER=opusenc from opus-tools 0.2-34-g98f3ddc AVX2 [Dec 11 2023] title=testgenre=Genre_000 tracknumber=1comment=Encoded with LameXP;ENCODER_OPTIONS=--vbr --comp 10 --framesize 20 --bitrate 48OggSBG2ffg[faZ[]\Ya_vmveKFFDHBCDHBDAADCJBM@BCE>8888888еQy1tՙVͼuT![\NV2 +A(GbKliF˓ Ruy3<(Fu>% 8(*oD'ey ; E DQ#_<*:xPwpʇ"Kߠ9VIyΠs =ժ;U5iDC"7[ȕ@@%"%9ID;Py o<ڡ^2^4ʯZ-ڷѰ} m^mzie]!L%D\ȺHf⮘4(p<|m3w3,,KZQ}V۩ b{⎖ Mndןf]-W!Յ)rj$ ˨$A,'3: ˸*^X(xFI4kܱ/{zrhM#7i &Tw9Y8] 5Ŏ?;E34Y QE-O: XhTQr]nL:2cy&^U tfv*%侢#.E+gH p?8;-a )V}ʓXTJDPɻp7c}dP_ QDN+fʞWD%4f)<q@ Ԝ 4nEh]f fn+ o2;X*!Y?04Ĥ %&U%jwL%O~fN@tۼع5bj%-v}G6uEod<;.kTAS *?'~~櫀ݥ/8^r6ze8oC)Ěa!rܳj:Ac`IX;r?K#UcKIt&&cl1pVybU83K6`8fOP8mXuF_8i¸:|o9fa|[l&)|oξqzPqxkJ1q1p8+KE37}Txń˾ѾD:. dřtDR @J|+C˩:)iod>PNG~.-xg@P`S֙MB?X&R J>s@CY/|n"cQhZmZr!| b8*˶q4+E $XɆԑht,ãjr 0; )FZk:G2@̡?Mֆ8.9A|![TZ],'hfMqFRˆ>o$&I>ϧm|v/_š"𖙑Rm8WVoX2B[pvTlr=ܣۿ&$&L>ϳ퍍rlušHw0$헺LKsb8sE^B_O4 qsO2lu4š/NgYoKF.{oI^&úKZi e&sO: ltٍ?W 7x(\Cm<l2+ov Y;ƨ4VqᤉQ4 оqsO5l3āF`l2̦:%#]GoK2@ONG3!Q!Y4о qsO7l2̦:%#]GoK2@ONGH!Q!Y4 оqsO>l2̦:%#]GoK2@OOќH!Q!Y4 оqsO5l2̦:%#]GoK2@OOџ]!Q!Y4 оqsO 30000 1001 00;00;00;00 2997DropTimecode 00;00;00;00 2997DropTimecode movie 8000 16Int Stereo 2013-01-05T23:54:25-05:00 Adobe Premiere Pro 5.0 2013-01-05T23:54:25.00126-05:00 2013-01-05T23:54:25.0025-05:00 xmp.did:04064495BA57E211A259A0B1B857FE34 saved xmp.iid:04064495BA57E211A259A0B1B857FE34 2013-01-05T23:36:42-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:05064495BA57E211A259A0B1B857FE34 2013-01-05T23:37:20-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:08064495BA57E211A259A0B1B857FE34 2013-01-05T23:38:30-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:0B064495BA57E211A259A0B1B857FE34 2013-01-05T23:39:04-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:ACBFC60FBB57E211A259A0B1B857FE34 2013-01-05T23:39:30-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:AFBFC60FBB57E211A259A0B1B857FE34 2013-01-05T23:39:59-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:B2BFC60FBB57E211A259A0B1B857FE34 2013-01-05T23:41:21-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:B5BFC60FBB57E211A259A0B1B857FE34 2013-01-05T23:42:02-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:13358D8FBB57E211A259A0B1B857FE34 2013-01-05T23:43:06-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:17358D8FBB57E211A259A0B1B857FE34 2013-01-05T23:45:33-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:19358D8FBB57E211A259A0B1B857FE34 2013-01-05T23:45:52-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:739ECF90BC57E211A259A0B1B857FE34 2013-01-05T23:50:16-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:769ECF90BC57E211A259A0B1B857FE34 2013-01-05T23:51:28-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:789ECF90BC57E211A259A0B1B857FE34 2013-01-05T23:53:19-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:7A9ECF90BC57E211A259A0B1B857FE34 2013-01-05T23:53:52-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:7D9ECF90BC57E211A259A0B1B857FE34 2013-01-05T23:54:08-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks created xmp.iid:8B14BB24BD57E211A259A0B1B857FE34 2013-01-05T23:54:25-05:00 Adobe Premiere Pro 5.0 saved xmp.iid:8C14BB24BD57E211A259A0B1B857FE34 2013-01-05T23:54:25-05:00 Adobe Premiere Pro 5.0 xmp.iid:759ECF90BC57E211A259A0B1B857FE34 xmp.did:759ECF90BC57E211A259A0B1B857FE34 time:0d254270016000f254016000000 time:0d254270016000f254016000000 test.avi None 30000 1001 00;00;00;00 2997DropTimecode 00;00;00;00 2997DropTimecode movie 320 214 pixel 29.970030 Lower 10/11 48000 16Int Stereo 2013-01-05T23:51:28-05:00 Adobe Premiere Pro 5.0 2013-01-05T23:51:28.00582-05:00 2013-01-05T23:51:28.00587-05:00 xmp.did:04064495BA57E211A259A0B1B857FE34 saved xmp.iid:04064495BA57E211A259A0B1B857FE34 2013-01-05T23:36:42-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:05064495BA57E211A259A0B1B857FE34 2013-01-05T23:37:20-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:08064495BA57E211A259A0B1B857FE34 2013-01-05T23:38:30-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:0B064495BA57E211A259A0B1B857FE34 2013-01-05T23:39:04-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:ACBFC60FBB57E211A259A0B1B857FE34 2013-01-05T23:39:30-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:AFBFC60FBB57E211A259A0B1B857FE34 2013-01-05T23:39:59-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:B2BFC60FBB57E211A259A0B1B857FE34 2013-01-05T23:41:21-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:B5BFC60FBB57E211A259A0B1B857FE34 2013-01-05T23:42:02-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:13358D8FBB57E211A259A0B1B857FE34 2013-01-05T23:43:06-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:17358D8FBB57E211A259A0B1B857FE34 2013-01-05T23:45:33-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:19358D8FBB57E211A259A0B1B857FE34 2013-01-05T23:45:52-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks saved xmp.iid:739ECF90BC57E211A259A0B1B857FE34 2013-01-05T23:50:16-05:00 Adobe Premiere Pro 5.0 /metadata/xmpDM/Tracks created xmp.iid:749ECF90BC57E211A259A0B1B857FE34 2013-01-05T23:51:28-05:00 Adobe Premiere Pro 5.0 saved xmp.iid:759ECF90BC57E211A259A0B1B857FE34 2013-01-05T23:51:28-05:00 Adobe Premiere Pro 5.0 xmp.iid:759ECF90BC57E211A259A0B1B857FE34 xmp.did:759ECF90BC57E211A259A0B1B857FE34 .prproj /L \\?\C:\Users\Chris\Documents\Adobe\Premiere Pro\5.0\test.prproj 1347449455 1129468018 Microsoft AVI xmp.iid:8C14BB24BD57E211A259A0B1B857FE34 xmp.did:8C14BB24BD57E211A259A0B1B857FE34 .prproj /L \\?\C:\Users\Chris\Documents\Adobe\Premiere Pro\5.0\test.prproj 1347449455 1129468018 Windows Waveform puremagic-2.2.0/test/resources/audio/test.wma000066400000000000000000000242021516533066500212600ustar00rootroot000000000000000&ufblܫG Seh(>ޱ@q  _. Se.ӫ Se3&ufbl, test@^P title testWM/GenreGenre_000Description(Encoded with LameXPWM/TrackNumber1(WM/EncodingSettingsLavf62.12.100ܷ Ser@iM[_\D+Pÿa aD@s ss@Rц1HdARц1HWindows Media Audio V8a6&ufbl% ]SEs s<]>I=kەYYj< #":[[ mzyO!j~_'ȚxRZZ}E _[[~->}E S>|_JKC(B)JJ! JRI0  R)JRL )I:I)I*dni$TI$y$4N 6lIdY%@ $J~d I΀,qVRJ8ypc6 5  'd7y Ԃ!Xx\Nq%e!6smKf!$NNNNsJ s<.b?oNtHSo\R)ⷭqSE/б E/B)БR&QJ1J) BjD%  uB ͂-A0 ܂؂؂`:2:" ¸f_h! #WN]G_wd/1nךm9^q.Oh *{;'xhiYhia)NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNsx s<o[[|VV?A4jH/"Rg#!TBIIL>`SY24`mlsTf˲uq85=A˪NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNs s<7?3P(Ia B)EZ4$qT d2 $Y[!H 31lw=_lq^+oVa^ʠ/NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNs s<6e/U>@E 4ADKnM$bR$$ DA- VDi,$ծWa]_Ycdbzӿ"@#SNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNs s<[ͬmɤ>$,`&eAB*ⲒJ!(uF%LFdI%3c'g8|'j.w&ϫ+;{G)lNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNs2 s<m[tFd$@PTI&*`" - mVA6A$*C@*7.̰np,hnNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNsa s<܅K!%2&(('M$0TRi B CR#5J$ $N빗}l5?y Jηʅ@#`X'lNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN ]SsE s s<4O\j<zq 7 X)tV7\(\O2%`!O|/є& }B2-U(|4 FB_ԡb()5)B*"B%"I@VH@)*MD&SPL`K `H`K`4$"L`L !LK@Y0%0%Uu,K%]LNn᪰LAq0ŘlKri95VEvV<>潣Gh]3#:Y&_"sy(ָRěH}(OM lQ8ć@b1NNNNNNNNNN s s>_={x ]?VaW&Y`o߂K~:_V9l@V FRKtz8͹":-gZM/‘CbA~٠?B)/!)4$ДJ*)ET @MD MBPJ*UQTIAJ*%@L1"@0`"`"D 1"@0`"`ĉ H0bD"Dp`ĉl0karV d djL"`«L^b޷zAHƙ)7D•ȧz RCq:4|o<CCCm11 Rb045`֡deNNNNNNNNNNNNN s s?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN ss?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN sIs?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNsws?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNss?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNss?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN]Zss?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNs1s?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNs_s?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNss?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNss?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNss?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNpuremagic-2.2.0/test/resources/audio/test_mp3_vbr_info_128k_notags.mp3000066400000000000000000001455021516533066500257650ustar00rootroot00000000000000PInfo|B #&(*.0248:<>BDFHKOQSUY[]_ceginprtxz|~Lavc57.10$@B^PXd;#0 Y40} `>!A@>h $,`"x4(1>;Lsb!䆠"hԓ&Gk P[g'/d*W\-/+zI[4'[fh87Ƶӌf,!*lvI\[Yq z G?lEmZwLÚI0R f&a˹eIjKsK @D 0XhxAQ-IJ ]Vb⢮d `Vi _XUH4#lJFAbŊMSwKSj|\F4w|Rcw, F+2t[k0Rz\k՞KRµCҰ47F%u+`vΔ.Hb ;g!{j[wv$"x)-ZE~x^O8\FLT)T9b|ĥG> [!hR2 UJo9=Q8בe5-vBӟh fpCbCu&0jfJut;QJlu,`d@Pd ]RE E~+’ÃtQXesʹ~@D7QrdcB) mT-45B)]?ٵ1b[Nfвb̨$äRޅEi kWAyV2e+ N {͐ 1i^+WUTuhpz%Pp`D?ۥmCKhYufY-rRrx sk)rCoxõK\^[F:ϯU-wK/yxO=&*r%% -eF}Cm FA5{f[u&h`[r_;~wws_bJLAME3.100NJN< ^q!XK8in0%$arاTg‰EH J_Lvd AԳOB @X̰4k'YIO7S~`ܾRAH:N37y WMskZNgƐmCx/-x )ַPAl+ !/rniE' aqjdo}ިxäq5!ai&`8yrDfs%<\[BR {V$P  (EiPBQ #X;4d&dX*kC,g(5Ҕ-yb#Vr͵=JpiRc>LAME3.100aހMP0 ƒȬh"JQ#0$2&EYC_Z0JhՔ ):Ȋ MǵOmKOV܊xkm*R9$"dvERl5 I-@4(ʺcSW\Cl'$wu]TUCxwu9z ȸщ0[0дrx&8 I rq-V8@JQP\иY82k veD7i8+iL_}V} 8B8d2K94O/MJ&d3[D>Q}ǟULAME3.100UUUs l@4D*@a@"DX PPhj ۨ!L#8bR/!u`P B7ULقE$'PӊE,,Ckz!ziYb:VKQdgP l7 @ ^4ΖEMOoŪz]E%7K:# KM_߿(Nnq X`.3BbF% *+f\oJkY'2L`ALtXi (u{_d 2/ 3*ۡ]] 9dI2,(yo IN ʱ҃@x+ \E?4dtʰ_=VحBdgPoE 1<ao4=9uQ\+DC I*> ˼t(O*YqE/:㲲XX͗V^~ZF0aAB'04c#ML,h/p-[ (:cUz! F#5fg2 $ f ;ާ.6Gr\̦\EJkT;ϰx ]j%wu=^2a!#j5~qхkdsC|.^q@qO`esԥL~]`o XE+IhW&^vv㡁D6HEf'OFZo J:mB?2,^NpUHxHdbjP o= DLH48#3vF<Xnx!S*)Xt5 UDqP_Mw4ȥe'}# qto)ᷳ ĊG8|G,LNԓfpĬmдHSo,AI@ pUyDdZP2L*jK)p=+mZ&WSF 3Yѵ+{=60]&Wm7)it͈95NP--JPiKWDռgG L}*Vrbe,%f;]LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUU"1JGu c)ih V:Q{ޙx~uQKcrw065@[:"U!Oe)4gMi23d/iVkL{ QYM04aKG 6ʤoP#u5:A0HdfDhg/gضyE'@ᆮ Hꇌ0ɂLT00!RDmd*f?K RfH0(KOӋ)# 늒;쬎EUrqw "F#L6aY  X׭'=KNy,G6IU r,a-ohqzM8u;ֽWK|. SGsLAME3.100UUUUUUUU3"d4 `!(K+6rd0~k.ii,_ό5nKR^/=Hd?ER"NĥmuIi$rmGϵ6:<W 4GdL+IR Nͽ+4gZ,()&iǜM3796Fԑ9Np8ZW`KrgS3ѽ~wG`&XP6"3D<, \5a *Am'2$Y,jE`騆>2ؔh<$F[v$1jw>G9kZ](tqD֩zCѺu-BO~hϴ}[CŰH)A֓Qz>uP 4`wF$dh*LAM*s xb88 8SVJ@́ ۺpE3%|=d 09;RS:ڶդ!<| &Y! V^ѡ%CE7B)(8X0Jf`A!D(u ," 㤜 "gL^1_D .0k1kNPu* -p:ҲYde3l5r %D0(h`!I Qp0 b@ jD*7M4( HE{d.e4{9͟|G 6)J[zw qv&w9L,j||zh&Ί}v],bGtzo/RgSe5Ŗd.?l B`$3Q /9@x >5"+ Yj BAU4,5G $!xdԏo CT5`RƟTצ_W|[j V/[VCP)DfYEdfז n>t43ĂqBȯ`Vg .vm} QPr$T| 0i(PDM! pdd\W*m-[r %X(\F4 }П۬*ZdHhcp ]< 4;և9VbS A5p)ߐ/ :%X6a"r|\,٬7ˎ\ӎ-oy,w ULzoU@Kw4t aRX0R(* !i;;;0nVq|j/|Py&{v@W3?Ӻyb:۫o BoW'VC+/H|tɫ5Z~QCnm{te;F6:6PTpiL,L`XP 55B %he`@:w"!]9X6"rMzu\>x{w9ϠMj/NEz(e_V>ڠ*djOx[t OL4%q՛VF"[#K,}Q"b1{Jw,Gv׷}$55hυ20 C EFI.Z ` $`6Z ;Oe i BSl\VLHG-a;,^/.`nb=s]n-RY%hhp{(m{lP &X:0K X !Nkc*˄Ȍ  @g Lʅ$b"kӉqb޲k{zS}d ~(2(2* YI%#!J]Td'ϋ Z3US( cCNbdgϋOV4 Ba4I2sTNc11Irg{ HXh$h@xG7? =ReY^ڣ*|fҋȝ~m+ Zafn꾹Z sӃm LF]q[h;q,`E&h(K<`eca1hY)K"$Dy9O0We TvPʺ$z&q"6WWd.+$!Q1%h#88sJ3IRi%E:fȌ/OȷPi`EZ*O0u`iʅAZY~Yk!+e&L+ 8ZtaFDM:SPh-etp9Rz%duhӳOcr Q#R H4L躄M4y2r PvL>h\ o [eGlJ-q@w!б|NŊTU:.u64fC,g0[#\چ3.UR*S$NWD;j\EVwO!iaFOZ>1 p"H*A8")OBRՉ(/?T!j8.+0 "iq 4 &2D+ 3 EYbmHbj!  Cg㚉%SZ3S11ztvcXu)֤V_Dd jQo4 F=4$jW qǀ]3JSSpg~VfTqQΚxtP`hh}_)a2 ΋[pRq ^tUH2Ǫ3&dRM=LL kdgPoM I@ͽ74P?J x$縷9'iCK5%_V퐖 B:knX樼Gkr}R`ʕw_ֆ|ID..#0&,X^hX)LyxڝW7&4JI ,(vTjLUP:$JOZ3Nepuvb{{5'ZJ2m3Db,1 FE*2Z`KaMx#2^6Tә{ŇgB]f x.""_{J^ڌMddh;i7 D64_Ш8xfҜ7vzd<'~LS,Ǹr;sƞ9T5"pE3ԣ/kժt) S[6ym%L M4Pa T'y*W0i"H lh/+{NM  .۰+Nt)5gID4fguZIT-{Tl,c5HĪ\ɁǛ.,8?yI9GT3Wdmxy7ċqSٌ8jz~k U@HQlёPf FfS)Sdqhbu` B`0HeY.fNf=f@!  ]BQ-YdhLO0 >mo4m@< & @(cTa]P 2N}/pd 0LBaq[}r}u @$Ѝd"h,p(%^KvJ48줰(yZKA{T Y{E[H(Y9()Gpp (J|*&ZP5gyN%"&Ёܮg kg4xV:˅ %<ĦTĶʰr?jXJ%u)cO'-hj0>*@P&*B N 2㥔7-1(]l$YM0 Hf, :m_oUJȍIXH)a6$P>b:ӏHYƒGfd:hSH JM74Z3̿nDY}"c-K?>z1^ :) MjA&CNjD D3Ǭ⪒/O,?5Lx 10yt]R;D)kjxx:dEG]Ix\wGG_]w*!2"s12ؘP %Fp@A)2C^Fx“0i}"7"5 ktvaѝW eĈLki]h>,q^=Xih@:<$1dsQVCI L 4'#VI0D(,)+$nur1$lPh Ű #R ~+&qo+^k0sdĜɢQeY\6%CW1Yir#Q[0I)j%֝lyFRlID"̤Ғ]ű<.Nr:H9HFPt R6' S%֔-d>~ۤ^ jLAME3.100#$dRb#GXiuBW~K1 -4:F&Dfκe[QIO&A'djCl5 mJ-4X Z5 '4{4ʳgrG KBs?NUF]4RRH2y(>@-$MDԥ FzƇ\ WAO3ojgFӲ,Z">0[ez#VJ~䌌|zuO+Q禄ʪѪ'.{'uC ͈. F$3`B/``Ĉ$#$`יKuBT@bKu4P Oh-5.SOU:R(%*69cqHEIf)*EBc`u^DcہzBYY|dgUL5 M-0@4ڇ2XV*‰aHU\D49%ܜvU*jd" )2QF1&9(xs (D(lx&[@ىB 34x%pDK ELP FF(WiMߌ5k76` ʵEZe2eN> ҹm{EL7յQ-j| aTALJFfTHUfz!@ѽ  ~5ݢx6CJnJC$d-S:1+K3#=,3V\>'ZS-aƼ fMdd,*bB!A"1\dFPǁdQr# [uɋ[f7s+Z"#,`5)ʊ5ض$2`E3fDmwDsATdDiQoLb mKM164\k wbf%ԲapAAz;}TWE$gQ%mpƆ:a^\ 7`0㑑$N[ȓn27۳U֎4*)9 ^>!G^#F\ HlJXI4zxn]rCRe)'!L} Y~e30DA Lb[E9f\sIL: !)eRWT@u4 1rΝݖ$ ̡<#Ivv2hfP!? @@dhI| P4+!b Z!P?Sעn-/Txէܒ^eLŔ)*j,> H}1@&8$NJuL6/JhFJj%@uhF X NoèBQNqNLxZ,6rh9) d+kуl6` MF4}'ȴ,T,ˆI^䚡RQ0#.F&ϓ=L^MfQ@Q|ӝ/L0ZުQ3 b6Sj(BM)&Jy ֯ `PPY0DP#`JjP1rjfM"CDJ"P J9;/?Uƚsm\n -Y 4wn9S: 6(/D՘:o NdZbG.K1k*x:|+7X%>*8+0!Go  M08)zT^3./ҎHRYg }RAGwBwO$iRԛקd*~!%dgN2 qG H4) ,Bplh2UWQ֊fxA,ۄ4D¬ǵ REU/}^^P&ۢޙ{wк HK,ŀA0n J:0)7"KBi1QE ,BBB1«C CM9?oUYv}0eC'vPtNky}zQj]-KmHkbq-.eZzieGV/ˢ:Z%4%z?$l%vj3#+qDA6.`(  z1a3E @LU=/ am5 ג1'>pFNۼϊ'q@ZaIJQd!jPl7" IGM4-+p r] Զ'f3e4IxT>Pnf"5)N g]-=xQPJaZP_!ĉR2+f*(`DG@%p@EtX@¤E 5+<@+V$A1ŀ}>m`:Oη 'VJuV64BO37tY4;΍p͙sXiyV7sO e&My>@zuğ88"l5=l+>Wji^:j̢!IS'&3IjaTɤ`(@EJFK;L<)H9$!eM}SJPhRMͨ}]Z{c(mG KGqF`Z|!8OeC~Ud]jOoF ]C,x4 D@; Y-yJ 3{X,.<+,tItRFXGh~L6#e{Rg;P#1^̌ɧZC6 UP(\ȀʫWcZ)3 ŁE6:$h-kԂ* 'LH@!h ܘsQP~4V8cHe[ )$M$3;`J,zȃ#pv~y`j{\% _\%Mʙ<'<[YU緑1͹Uˠ;dپo7B[[nU [(j*t-kMeh24m\ AԊ6ўEqN7a(lMR*S($poݻdhгX[p :-<4"v}O}d3Hu&<.kW\ۄiC,;rB}M ọu I8ϝYYlO qڀX?ړ@HU5ЉJcK <:^(}) 8Q#BIqu#m9 ǥs40wn0{J\W.< 778v; 2gpB'=.5]\<_k 60 P9w`0{%3pAhnme9HD(  Q#+ 0|57PsQQ],vbj8Eׄt8b+Kh6%*9b{&|xJ tdv'{ UÎBwOOW4d`gKLN2 F H45 q< Ϗ7h?xJY*~sYXf{L筀`a#V'BVAcA5!)EzEr*DžLH$P%'T027*A\ёr{lfV;r,{j--xbqRCFAĒiDBh8wqMu@0X"$ϫd龇[47iޝz2$`۹ڋʺ.w>M]rS%K6^ 0s U0Djӈ)%BK#e2NQ@:C;Ll ICp@h얰DZqw G1.td˃tWFg !V'O%~O]T."armLL@%!qZCErQnH[TA]%K9:jrY):w) 5 -f%'KB8E;3 0oĕDC\qGb̹ѣ`A#űMrB)@M2xW"!qE''yKW:Tæi9d@N")_"8txB:EdJhPoFB E,54* VDh>[(OӃТA?ܱǍC`#ݓjݗ#elVV/neΥ:MlX*GJVe&+$Q*D2kH-豋1B,1T@PC4S.yjgRY)t t~t8ư󨑨܉E? oUV+(Â-e| + q)z Pīo Cե)W)b{}V&N@3r AY2%ɊUŁ&"YM) ]3hxIĂ>[l QT4 A@$@٤Eɵ3}HDqJavo&k;db΃Of"  Ḇ<4.s. ,0AYye3je*,2\"!rL~DxCy(HE;Էfbs5ؿJPpBJ34`21-$dߕ2PJc6*# T}D[EL?3'S"OVND*ۂ83}M4k1*Ge>"}Ghy5unIB C҇2|QG3p 0`k5dfP/eB <-=x4Ճ׬C2=Unkjєq=-DL 䈘-p5(iLeŒA3Yީi&Vq=-5i普5>!L0 4w-r[2! vIYgMe!R:# i3#͞C,uTBfx+6%K^yr)&āގo/?d]U+l2 ɑJ 4bvgЕ[g= F&"0Z«QCHA$v]2U`sz/i_*P FpST|`SZH/PuviԒǥ%$eۆp|=}wK|_cNiԔuqksxr"tT33'W0uMLhP92[ILg(ES%rЮ|kvv3TQ rjĤ ώYqPf0!dlRl6 F1{Ge'B/OI"IKկy*А QҠ0 QXXLF" Ivm\EۚюDUlźCVP¤K#JWÇq9+2omSfQQȍ/1XAMd:VC Әh4mXdZ-z0N$ևWJGC1ߟq2Ju"+vhxE5ӻ) -぀b@QfԬh]Ͽ "#D'2y /<#N>5YLŇazF^0a{ʼnpHqdfRc6B B.=84ΗM=F\>Y⬀)f`4(FDd 0Q7h$HDVPA:IR:޿HPV $0M0q'!'a6j35\dc'Ds{;UhFTG}@H(0$LBXT[A`jOTsuoISRjJŽQfɖ"paRդnk!U㺨 'AhRt R9#D6@@JCF bKNKHH6(yk(PZ $&ڝ- &YۂgYi՗\L/#Bx.՞gYLdfCl6B @M84"8j52€~VIYfea ™I Xrlyd|b1B3j)<$G[I)aH\hk8Y!~U f/,( ;@Vly5VcHGGFcxT#[f dJr X"@7^ CF$JS1~:v Fyڄvz#NSp,M7ǩDvG }Wg_m\,P /˧NKgiW8kg{ PvE<4/TQM[1|aZ0ACCEMU8 ~<)*4U` 1\pƣ"h֋bU+0fT; 4&|.J女?OyDdgS N2 -:-=94(X޻=3|4C2Om_#v.H5A5I{En[OsjUSឺh.vg՝V=i䲡fQ]f>NFjH b%B.daƂhs1JED]nbѰ 9f2n4̘@@ED<(<*PMmp]%i&аCkSDFkg$9xFĞXizĆϕAl0VC»~s4Mhʾ1>l!j(}2L qw T"s"#LF rLIFBPÅ&buqF@5V),4$"5tx%z`dfOO>P O`;OZ CdtHjK$ EW(HմYsvKGQ?%Ywbx2eӲm9,0!ND=.Iv~%yZ1@Q&k@nvW1Eޞ>g WZ-.1lj49Y]LUٔ,rP/Jj$i#dhӳxx SS $4ģ{BVW.2 II-TZ$I8 ʅz>$էLJײq"kܙfۥJ0!GuBQx phP2lkx;Y] xt8ql " 16å>O8+RFNXI'*pLu%&|8R_5U;tu^d4 ( 43P2b JISӉ&k ܘ֊Zs8E xYʇ8LɷVɨ50\D8I]+`A@%9kdX@t~Wsq$ L 8|MJ[YdZhU%v}Jy+D!"-B|nSSd^USO4 5H=5H4;ȍ:,r>/%⓮AMՙV\q,IRlndž&7`UΧȚAIڜ"ҟSjnk6o/3n2VL<$@4 aa8(HY3 oD%W|3vCTd+M?35"8.4yTf=c]O܎ͧpfĬ d5C*-H]}pk@aGnmDy C G%mʗOzFlw5R/*PPǰx^`:GB sh׸aj}UHh\2qns:@+9yCs0li0ZT1Hz0&:8q. dlR6 yF܈4B9ҌU86D?ҧHMgM8k &qxHj-,jΈ)ex$rj&v4@$5DH(`!_ EHVɕ#0Dr A? -^16CO^YCajbI+S؀]*E<XFWUVtL@,JT,)hK8 NwINMK!g+Aۺ DJɡj/w,qחCnӎ/pSUz.r{S>b<&gc2 YNG6PifHrebliELAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@InG ZZiI)BN^ ޠlPՔu_d/T@n_>Ezv>iW1dhг/^ B̼4vAZ{*pr.|:L6J]+@jL =J-LZQ!biW2HdJZ+Ma,fJ?quzYB%d3x,7C<,۔LAMEPJ,*B0 JmQ.pa#-:-B8DZ28#ģu=316ճjFyFrZ3r_Xwub1 0zb8LG*juN.dfk >@ @,|4[ӡ9k7%~gwUBM~G!Fqas:'&bBE#  DY0-((b!P)yđ=*"l !6`8euGghX,emz +ʕzi}(&M@9L֛\yYjXKbh`3*k_"l(8HXfG;٪=z,e u|ړ,D[Q ~_S[Cu$ D) 4@p hGTbIXIql6uEVTTtEmHiV f*E 8D=WאqUr_4ڥ(̀_ Dǎؑz(QMd#hQE 8WH4 uY2pelyt:w涏7 G"LAME3.100UUUUUUUUUUUUVi:f2ж#IW JJ3vDR.&Rj//BGF^D ݨ\w.D)=ђ  x9y Qd&dj/V@ : aX4RޮS]@ՉR|-ܻS;pgpr[:On2u6H{|6`n>'-ˬZLJHBThTT:fZ p#jXq Q^.T G)R#'J̓i$@W'CA-_Ȇ]}nUv~m LDGTz?J-%6MgyA؀q pWh+ cG1S$\"q0+7h%TZ.O4OW5ơnݺ6zPnK]TOv)c&&&\]<}v[c }y(?#)"-*2u5dl /> IY4V%L2N,XQ1t&LՁ !ˉ28V/%d]@DS DP 0 ; =z4lUTΔQ|SkRAr%#}"|%9J\j0eULJv:i[ nx˫i,(1D.v=ei^Ua7}4%(@rtP}v;^$3s.!X4`W;eģBt~I48d2DZZɺYVX&`M(Ir!S÷sKžc\Nlg8oZW۷*LAMED0%(c̳fepJR:zl T8^Mphnq9 `%^*ȝ|0ֹړx enj$B3tgg,4C[pRk%dl+O> 1> Z4BuvOK7(nͿoMlXq$k@ IPʌ"fQ NEjIJ\bڿ+~TA:LB 8@XDJ3S2j(Rl)q cߐۉ1mU E<tnM%URS{G !rIf[µW`mV_H`Ȕ k#[ѹ _ 2T`躸xLש#0 ұ}5nEț3*J48Tz*fmQ ,@:8l L13m8K <FA q2/joYZ NJVmވ)/~YwRR2VHU۽^i5dl+OV >Z4l_YxÖ%~ P*IušK?)J9n4rܖml2)QLY-:Z/"ؿL8Bԓt&b?e48XcN9eXsnbIrE 0E[ J,Wʠt*dk54{d 3*nyE䐋JG).~mY %sZ!emS4EҶvYvV2Gnr~CGc䟟~J?;1^477'>F̾WbsX# h \ fsڥ5L&L. c蹕 mᳰIs#“2ʺ)`\> )LsMmda΃Ydr c< =<4BV+QxPb[xw'<|4*sb UrEWu]٣=RH?/蜽B/)<~l]]?is)|13 td-.ûK"+N0(s4L8]Sh0A-X#;5w oFR 0cxF*L<}­DO0)1>ad+kY8G5J^`T"j--c gܡKWViX>,6Ou0#Ve3*HʓjK}BΤI/nY9\7@jF@EX5`DT$*%*eHKd&-` t) F$쥝‰F(>ddgK/^ 8 Y4#5*EbMp02b7ѵTDm @ʑ }l@:tG(>##?eeEhzKrɉM?㏫hF"$!R%HD(9 9  ;h ֚jCҡ8舺@dD܌{E6HEG^PU$5Rq]ڲ B&BZAG{֑ss2_)k)IH/yGmƔdo7 k?ÉO}:jb=qKP8΢"MI7FeIxuV R&,MtI2XAZB0b0ArfbI aTCd`jVȹ)qɘ `\üɆae[Rb&Mȴd:e+/>4 m; =YH4]6j]_aIT`p,OZqw?lc >\T)'2#N8T:07>1.th4ndB}͓<-I= CK,(S|kޟaz0y1z]ȮQx%JQ[]eK1u*=[ӊ3[b- )Bp%34Hr1ͻ@,4$rZi=wL*DQ 氩c@Y}BJg?⽾D_:K=rb_֤>+N62rQ\GN . `-nPn 3h\G28˃$\sLe@0Sɇt&Z(X83`9VPrCT 4CV9BO"'LyAZa0Ev_)\4f-| djO/>@ iC,Y4Dmnj='O_Qn" _޳‹m+yJ]kq"ˆi z\bLPE<>E36iЀ$Cؿt~?N 2xh1"(xCRN)ZjeL9VU Y6KT6{I!VYrWV>Sz_On3R:5t]>f/&D@q"9. ',BVw8d!@Kw-9~Q3뇎2s,~؂Z̐3u *@$u,@IA(ר}6'=NSu\' GYIAw-,==ڄgw3c} [{pWdsiΫOW GY4$Pa_O^pӵ˲KB]-\{T煩u)P!H =dll"7{YOL_zɪ,M/'zoހMBZʛ D1t4IaF !`?k-%GpFzdʔlE*34"O (*pPB]tܹ4 瓝[^ 7֋+CzZ>Q+[a"6{.1je]Qj2wR)%}:?-R5S $G@LV!ds pA$`$.`ɦ8|ȯ e${F3)|qd\AXv}dyjΫXn2 >-=Z4`~֧XM+ 5\*[t{dJ#Q!,5[KW liSQ%$3# ga gcS?"Y9#q}cͲӹ4b0I,t1I#0qK]-<j+ى#`'R,qJ2vhE MmRuHDW:[vX#|r$f:䁰oGfmEȗ6e0exdIj+Ylr 9kD 4ZA7ڤɲ1.y߅"qu(nZ(ӫ_Dy+dVŞί{ED ФŌRdV^K 5 ]KL194*2=!0{]jd#?g aAE=-ȥD7lB2?㍡[^C(7P‘$#Ct9' ̨H @~2 5=K" eBco,)@ >x40Xd1Gˌj %FL;'R=޳ bǭq|ܜʺCp` BiCi;U AdW~8-,y„AT%tΩ*l%)2{`co{-g MfQp3cGH'>FjY w'.V>6IFH.΢ RoMxVʦ֘#ӕ3yωLAM@Lz wCʋw[ *d|H,2R'Z_.k'q"K!k D/V@4iNK,_37AhWҏyEU!qj pT6k\%S1oɗeSdi+:mP y< <4qO hj\OZe)u4NcȚ !5unNŶKFܙsRݽqU{Li(I*pvJ4=LF@Uf*-KK+B4Zxs(#%m(դ'X5:%]"-05w`e0u}a]' 6C[B {6neUWЇkrfHX]j27ÿ0#g9q&:9n~14B_*LAME3.100 2J.X6 I?8d 0R 0s5X@1J$$1oT˟(<)5/B\, Yv̇PWdlϫ/V0 M< <4"qGn5*'ܾMΨpj|Vz!Ȓ8[@,;}mpUdSPqb$) ,4F!TD)cÆ;$&m×S9qf4^.r9jϨe 0 ysCJy0)(1!H*<~66B!XooVïQӵب?jggFti ;e -,K<[^8P 2@$YA%I! wGLgG1DYwSIwr"٘%8¥{Pb]D@]cuw <4ȉKsմ9ꓓ]וqԶp 2̧Fm@0rf\c#cc0tc"(|][fGZO)vY9\MV(2[30HMy?XF!%ׯYTeEVzQKFA2|#)%z:&7.rRz ZވP~7'}eRސ,w5ͬe28I.mr\X1z \}+[)F)'B V>2 @AY (FH2d l XCj0RjF_!,Bu^S !&ob<].㯽ĩ WQزl daг/>0 ŇF0{4o#슋ŏ ()e Θ]$jgC) ϫca K^SXGQc' ͎|fb0sT0!m& \b@ %EdGgJ<{O%  N/LTh6SJLƜO]t AҵONgJFZYY aǝ-JG{tg(&sgkDA Ys18g>/5-cDpREʶ]44.X Cz X2QS`a0J6^(JAzp02[<dYDX!UÇ̾€7g F2lAnhG fdngл/e A-=Y4@#Em͇ER8Z9a0LaXB}CDWly(y /s& 羾ӛq>i*yk5>Sg+BZ B١/!hʝױ$ . IlQyz. PYBk:Gяգ"8gQ`:9kdeuCiQk A =J@ZViQ_~Le @ $, (EqO@6d(ZQc6,FȞ024)lw/*G zl#HmKYט jhju$>dj+O? ͙A 4/*Ivǐ,jxW:Sԙ"}=d虡tK6u7B'B\OZIhZ4n[Aо鉋H$TcKl @I<i؀6. ddɨL5q_F>]p$ yխ_B"iI.$$V.3+ ǗmiO͝aq}ljpP*ǣ}Πּz:5RGsg1Vη6wW"-z+mzD \ .t[" NeY@qXUgh$\EJܞJ(C\ziL'i"P[3YMQ3o}6r5qG?ym.6+H",| d`LWDVPZ7Q_B@@2F#Z 4<d%Y (xPpцd,M(i[ %@(v#8' W68[l C݄ qmlD9j9+vK %d[jOCO^ AGL4rl*Y~[" nUt4 ~NVSu9(:k0ngQ#WHN3dէ_)º4g幜sK#<(y T*ڵ!(j4U9k,y* G"x0qv 0xĖVjTp"i` s>[*I"EVR[Tߟ=Ma ,PL:"A+&H|`XPM%0L͠CIhTU:IE#G= JDu\i{w!3IZVnwnlN {45yj}璉mP#n*=3^ mוּ5hJ$^ ` 8(q&N>x]zr^/^oQJ0B )jK҇(g1 VJ h$Dx7Er.|M-ADYL B):L:Xd(dbjPKOnP E< =Z4TW16[hwjߠg+%"=#zƉZv$qc_j8! =Xi:XTLTg*A-C  "&Wvvd)-A iŚ1b&<QOz0Z-"&`\YMI_k}qkwCk{J7–bt+GN8>+SrEHmUu Kzbb  徯J"W|-MnU@!I %F$(г1nJ- `-̡LW() 2XWxVd< }7lk(?"h2da[ A-=y@4ΟW*SaUj tKU@?aU9e0nPQ? )?S'\1e~@>uwJ2gc;>?bNs]p)ș *C \ a P@0X $lɐ H dB;B 6۾29?%K1fPn2!dgV@ :eYP4r3QM(74#p.k_DQ#1ZǍXXM&UٟzHRQ+I2g@֑ P}G(~ER]HfHqbȭ'[vC8B h=,({j*eK HR۲gph̅ 5Ju|Qa1H?_E F$RЧֱ"Xn4Y;T978(d6t_BflZpӏy,0|Xfpɕ$D/G/ʗjElC@ 0C&h΍* X$ؤ\xaP-R2U ҉N +&lG,&dl+OW ݧ= =[4Sh/Ps 9 |aqf *MHJ/ G߼g֢8nļ5"tL"-ʷQGT_ƾ <~H;оEPF\ V$C,{(4K:E[veWsɐ ś ҭ(T -az6Ib|wRgg?˿W%XbPgYݩu$f@j(^ cAW*˕o<)z 8(⇈zQ: F7e3p'% CT]&@6b3TDD8ɂ- 4YaSS>6eP]djOYT B4G9mfToѽvQ'Zw lrl>կr^x8}qlDuZS΋ 6 0̫BnMvv"& Mlw, N3SiFr0u I H0DwD"0+V y 2P$ɔNc*D*nA>wQa}f3JNCH! Xy^;ԍ VI6-v$l,RJK]P_8&P's1zԧ-J])R(R3I,XC#9H 2Xd$ہb†@H(8V-;faL( K[`MγdmNXn 1? Z4XqT*j! BhZQӓ؏+CH?'e,.PL^6W<۫YnL}X.n#DeH=\4dĈ{UHh2ο_.}[M3ԆUkj+7u,Q+DaͭJ mEu-=^JUƄ;>0,Xb&\D11B>bVQ0dzpe + u( ݛ!s!V {S>4B=1L =,A=ۢo,n=1ƫP%gaJ[ohbQ[Qw:kk꭯u#~^_J78ZJŚlTos·YgyJ3:&/{\䪵!`gEP$È%$5exN@( X,xb$Ȕe Mpʙ2_v< /#^CԸkf@Ư.X:p) dsb!_,:0C"Hȱ-68(*j052B0,\q1ooO#O2ƀ,Q0RACVSla26fnXѢ! [P2H8g8C8"*DÇO!zKDYZj^Rf䬌*ԔT@ ;S ˜sT*_! #?W\ѢC͜)'.'RÝabmɱXМN塥Ds; )m0kC,!g"'רz$F=WX , xP Druq0a5c ٳ: =@4 .B檡 (L߶W==l|B%"oǧDL VW.}1ICbNȂdR *e 64UA |RO`Z$׌H 2e\n,26Ɋ0@<갅b (-*B,hKMj>M-'hRdlYT -> =Z49@"Hd!+/ skgϘT)4lM/ _6Y賭g ]!{Nm _LJ~OMfA D@p `b2JeìyTH14#T$$6q Y* l @,$ӿ&wCY,5MHSXH`Yu/x`*B"8] gc3FX: 6dtl6J RILO=s@D^`GPcHdӿv@sU~KAdmO/> ><4共dVRJrQQxYi\opz =\4=wbFIsv5*)= ?#-9T|A]@jBJnIBFH-c $nܣ%]֭X jb.+\oYi+'dPHp>X]蔟>~DE tL,RsqCX5S %RM9R%Cd:'O`*ʀ r`A&.@ % M ,?Z '۰ dL |,.X-CJb2ܳ.n-9qc~WMe+zGڽBR N=ڄ_z5 dlP+/W Q$y4tڛOFE. inOe#`HluXdC<3pH0@)Z[D,`+1vh^+.NW ]?+kE,A&A̾b{?v*9bE(6d^h38cr = <4yf oZypȑʣn~/d9B˽ (=j\)>Tm^gV!ZmU' $'AJФת<کQ]#:R̯*;y-Vhn]`{/*@]P`-2Hw1D-ӌ0G($5+ w$ L\F50BCV@Kt*,P 2<Ā):h7ܧdl+yn@ 5B4O{c劉`0,=*A{E@_^a49XL\7ysv}۱W5 EidT.sP:L=#qd:oyRVrF];,^vbtEfpL Y}$-%5O D4A580"i: .8B}W6VR]tњE_Gm2[(EDefP/BZ;\ka*F<Aquox>1ta :R1*F :nqeԿz;qV}@$<sF0 kY7#PxDZ PL /M:8EJrݢ@d wdlNXn %> =Z4\r4(fL#W<ف+X["߹_z^h^".+qpdIK:̌MKl/dwRl%񯏛vuJRbz !ؘɨ.^fRWЯ@ |ʕg)·6ɚe(qs}"J-ok'AL@w3i!vt\C:rdIc2C̵"!Lg)ZfK69%s{?Glz^qLb'>]\:.#/3^u:Zuՠ\&I3 Q@bSp+1U%ĪJF oJ!BK`d*ET2!*7U+´YQ.<kL*ldlϫ/V )< =4 \* ?(=\4{j &S)ipJ\l+N:`Q}}˱_W,p1pwtI4WU Gd&(;I@p[AԨB3g+xcI8q@ekP!C%$`C*JoCQ ;`0lBT#,WY^D$ZgqE@kz+T&⌜-+Oo6njy,lCBVRqmW틷WwdYe>/&= $[kjMR@(1PBH=Y`R1(%,T˫q hjb4+D28+bCD8mH\"CT ZdR">dlO/W" ><4%  ?,A8v|[8D1eiX 0"^Ğs8I[}iTG5j.;Be/cX.ac量QޢǥdK6qn#3$C Lb/J8Tȣb!IN^WYrtxk0|GKmY Dٖ)H<x$c84WuaB ݮҺujL'fn0g}"篹= G%;TBY5wFƆHpl?AWͦoۉ$n#B #TEW'Ȑj8UA W"=rdQ?@pD!HWͬc:dċ"[Arc-ءI"d mOOW 9> =\4c.D-0: :mYŁbL5 Q0)%I>?N׹+\E{(Ժ*U7y\L^qAwC@!(j*h ׵T1i"ARA&Z^K@] fG Fw4 x/ 7e-5z I^̳d%7c HZ#u5t׋ ŀI30WnXNEfUL'dEgRK/DP De445n8jswg)]_# X/PL)7ڛplkWdαk^G3 bj0Ÿ*6L*O'q4 `My8A TU hp,dkf:H1$Y X wńY@RLjH4B qŇϙbPÓTwAX+Vn[eq 6L&MΟoa (Xkw: gZ]:-}%K a~ʒt-#74mЕ*/ШeDA̸p.0Ĉ8S =ꚙ6 rD C#c!'CUY$A2I%Pd1lO> %:=^4UN K 8Q4yYPn_DiL\iDå[ Gf-DQ8w }_507!dlOOn Y> =Z4&f(KK wc♑l@+\Îo* ؗ}OXlhKШ^҂Mnb^Mmy/ۇ?(ZBtVA [ vxf (0;902iJ$3P9*a 2P:J"-2C֢tf%Bb[w-=O]GO|ь>S 2GѢ~9/OGY1) ^A#z$抩bTKh!6^E=//JQRRP@|@Q>&D`12<بBo5XaGF oɅ)MxBEQ$c/#ϚȶEgdlO/W" 9<=4. UneecoYx=n..$:uåB'v|T]h(~ לl ͅ#T^[k$H/yF\ 'T+,blm)fp90\pDiLiQ25js!hXWg !=l*mf5N&b3Xd}eErO5$GS4Vo@.ǒ촆fUDAU#t2P㺢c&9GK:ejC=ʨ@ JdB@Ƽ`1D~%^V.en(-%Rݶ4F( DDRe 2 -dlOOV ]>a4ޚN2r ^bA ǚce/~׆L]qo#y= *,}DQ*x.60[?t&0<$ɫL IRA*UH?"ٙBxʱ! (CMVYI`j˒DLMcR%k,Qeސ= nќ3Rc ,m#3dž"'tlMOq{ bi|+A7h 1OIkQ #=Cz^g:@`xPæ*M1da CXى (J@xG2q@ _\-bD;@ p '#OF AdlOO?" M><48@;%crl<\QfC N @Hր (r)nE]1t-MLfL>G;QvQnOv*L}z48jFdrdYe gXPA SFxPEd!$pp2] 61 BogD` )aHR-0fs7زXUdȹH+ԙ!gxusrxʙ4#C()T}D$U22VFIڌMQXlT| e#Eh7: tVBӈ,ye̩QEHlfujLAME3.100dvmP-j` Jٙ42QR5Tr$.]BJBr_r0R l93j \7 꾪l[7ʯ"DON**v (;:TP4h6 LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUduABDFHKOQSUY[]_ceginprtxz|~Lavc57.10$@B^PXd;#0 Y40} `>!A@>h $,`"x4(1>;Lsb!䆠"hԓ&Gk P[g'/d*W\-/+zI[4'[fh87Ƶӌf,!*lvI\[Yq z G?lEmZwLÚI0R f&a˹eIjKsK @D 0XhxAQ-IJ ]Vb⢮d `Vi _XUH4#lJFAbŊMSwKSj|\F4w|Rcw, F+2t[k0Rz\k՞KRµCҰ47F%u+`vΔ.Hb ;g!{j[wv$"x)-ZE~x^O8\FLT)T9b|ĥG> [!hR2 UJo9=Q8בe5-vBӟh fpCbCu&0jfJut;QJlu,`d@Pd ]RE E~+’ÃtQXesʹ~@D7QrdcB) mT-45B)]?ٵ1b[Nfвb̨$äRޅEi kWAyV2e+ N {͐ 1i^+WUTuhpz%Pp`D?ۥmCKhYufY-rRrx sk)rCoxõK\^[F:ϯU-wK/yxO=&*r%% -eF}Cm FA5{f[u&h`[r_;~wws_bJLAME3.100NJN< ^q!XK8in0%$arاTg‰EH J_Lvd AԳOB @X̰4k'YIO7S~`ܾRAH:N37y WMskZNgƐmCx/-x )ַPAl+ !/rniE' aqjdo}ިxäq5!ai&`8yrDfs%<\[BR {V$P  (EiPBQ #X;4d&dX*kC,g(5Ҕ-yb#Vr͵=JpiRc>LAME3.100aހMP0 ƒȬh"JQ#0$2&EYC_Z0JhՔ ):Ȋ MǵOmKOV܊xkm*R9$"dvERl5 I-@4(ʺcSW\Cl'$wu]TUCxwu9z ȸщ0[0дrx&8 I rq-V8@JQP\иY82k veD7i8+iL_}V} 8B8d2K94O/MJ&d3[D>Q}ǟULAME3.100UUUs l@4D*@a@"DX PPhj ۨ!L#8bR/!u`P B7ULقE$'PӊE,,Ckz!ziYb:VKQdgP l7 @ ^4ΖEMOoŪz]E%7K:# KM_߿(Nnq X`.3BbF% *+f\oJkY'2L`ALtXi (u{_d 2/ 3*ۡ]] 9dI2,(yo IN ʱ҃@x+ \E?4dtʰ_=VحBdgPoE 1<ao4=9uQ\+DC I*> ˼t(O*YqE/:㲲XX͗V^~ZF0aAB'04c#ML,h/p-[ (:cUz! F#5fg2 $ f ;ާ.6Gr\̦\EJkT;ϰx ]j%wu=^2a!#j5~qхkdsC|.^q@qO`esԥL~]`o XE+IhW&^vv㡁D6HEf'OFZo J:mB?2,^NpUHxHdbjP o= DLH48#3vF<Xnx!S*)Xt5 UDqP_Mw4ȥe'}# qto)ᷳ ĊG8|G,LNԓfpĬmдHSo,AI@ pUyDdZP2L*jK)p=+mZ&WSF 3Yѵ+{=60]&Wm7)it͈95NP--JPiKWDռgG L}*Vrbe,%f;]LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUU"1JGu c)ih V:Q{ޙx~uQKcrw065@[:"U!Oe)4gMi23d/iVkL{ QYM04aKG 6ʤoP#u5:A0HdfDhg/gضyE'@ᆮ Hꇌ0ɂLT00!RDmd*f?K RfH0(KOӋ)# 늒;쬎EUrqw "F#L6aY  X׭'=KNy,G6IU r,a-ohqzM8u;ֽWK|. SGsLAME3.100UUUUUUUU3"d4 `!(K+6rd0~k.ii,_ό5nKR^/=Hd?ER"NĥmuIi$rmGϵ6:<W 4GdL+IR Nͽ+4gZ,()&iǜM3796Fԑ9Np8ZW`KrgS3ѽ~wG`&XP6"3D<, \5a *Am'2$Y,jE`騆>2ؔh<$F[v$1jw>G9kZ](tqD֩zCѺu-BO~hϴ}[CŰH)A֓Qz>uP 4`wF$dh*LAM*s xb88 8SVJ@́ ۺpE3%|=d 09;RS:ڶդ!<| &Y! V^ѡ%CE7B)(8X0Jf`A!D(u ," 㤜 "gL^1_D .0k1kNPu* -p:ҲYde3l5r %D0(h`!I Qp0 b@ jD*7M4( HE{d.e4{9͟|G 6)J[zw qv&w9L,j||zh&Ί}v],bGtzo/RgSe5Ŗd.?l B`$3Q /9@x >5"+ Yj BAU4,5G $!xdԏo CT5`RƟTצ_W|[j V/[VCP)DfYEdfז n>t43ĂqBȯ`Vg .vm} QPr$T| 0i(PDM! pdd\W*m-[r %X(\F4 }П۬*ZdHhcp ]< 4;և9VbS A5p)ߐ/ :%X6a"r|\,٬7ˎ\ӎ-oy,w ULzoU@Kw4t aRX0R(* !i;;;0nVq|j/|Py&{v@W3?Ӻyb:۫o BoW'VC+/H|tɫ5Z~QCnm{te;F6:6PTpiL,L`XP 55B %he`@:w"!]9X6"rMzu\>x{w9ϠMj/NEz(e_V>ڠ*djOx[t OL4%q՛VF"[#K,}Q"b1{Jw,Gv׷}$55hυ20 C EFI.Z ` $`6Z ;Oe i BSl\VLHG-a;,^/.`nb=s]n-RY%hhp{(m{lP &X:0K X !Nkc*˄Ȍ  @g Lʅ$b"kӉqb޲k{zS}d ~(2(2* YI%#!J]Td'ϋ Z3US( cCNbdgϋOV4 Ba4I2sTNc11Irg{ HXh$h@xG7? =ReY^ڣ*|fҋȝ~m+ Zafn꾹Z sӃm LF]q[h;q,`E&h(K<`eca1hY)K"$Dy9O0We TvPʺ$z&q"6WWd.+$!Q1%h#88sJ3IRi%E:fȌ/OȷPi`EZ*O0u`iʅAZY~Yk!+e&L+ 8ZtaFDM:SPh-etp9Rz%duhӳOcr Q#R H4L躄M4y2r PvL>h\ o [eGlJ-q@w!б|NŊTU:.u64fC,g0[#\چ3.UR*S$NWD;j\EVwO!iaFOZ>1 p"H*A8")OBRՉ(/?T!j8.+0 "iq 4 &2D+ 3 EYbmHbj!  Cg㚉%SZ3S11ztvcXu)֤V_Dd jQo4 F=4$jW qǀ]3JSSpg~VfTqQΚxtP`hh}_)a2 ΋[pRq ^tUH2Ǫ3&dRM=LL kdgPoM I@ͽ74P?J x$縷9'iCK5%_V퐖 B:knX樼Gkr}R`ʕw_ֆ|ID..#0&,X^hX)LyxڝW7&4JI ,(vTjLUP:$JOZ3Nepuvb{{5'ZJ2m3Db,1 FE*2Z`KaMx#2^6Tә{ŇgB]f x.""_{J^ڌMddh;i7 D64_Ш8xfҜ7vzd<'~LS,Ǹr;sƞ9T5"pE3ԣ/kժt) S[6ym%L M4Pa T'y*W0i"H lh/+{NM  .۰+Nt)5gID4fguZIT-{Tl,c5HĪ\ɁǛ.,8?yI9GT3Wdmxy7ċqSٌ8jz~k U@HQlёPf FfS)Sdqhbu` B`0HeY.fNf=f@!  ]BQ-YdhLO0 >mo4m@< & @(cTa]P 2N}/pd 0LBaq[}r}u @$Ѝd"h,p(%^KvJ48줰(yZKA{T Y{E[H(Y9()Gpp (J|*&ZP5gyN%"&Ёܮg kg4xV:˅ %<ĦTĶʰr?jXJ%u)cO'-hj0>*@P&*B N 2㥔7-1(]l$YM0 Hf, :m_oUJȍIXH)a6$P>b:ӏHYƒGfd:hSH JM74Z3̿nDY}"c-K?>z1^ :) MjA&CNjD D3Ǭ⪒/O,?5Lx 10yt]R;D)kjxx:dEG]Ix\wGG_]w*!2"s12ؘP %Fp@A)2C^Fx“0i}"7"5 ktvaѝW eĈLki]h>,q^=Xih@:<$1dsQVCI L 4'#VI0D(,)+$nur1$lPh Ű #R ~+&qo+^k0sdĜɢQeY\6%CW1Yir#Q[0I)j%֝lyFRlID"̤Ғ]ű<.Nr:H9HFPt R6' S%֔-d>~ۤ^ jLAME3.100#$dRb#GXiuBW~K1 -4:F&Dfκe[QIO&A'djCl5 mJ-4X Z5 '4{4ʳgrG KBs?NUF]4RRH2y(>@-$MDԥ FzƇ\ WAO3ojgFӲ,Z">0[ez#VJ~䌌|zuO+Q禄ʪѪ'.{'uC ͈. F$3`B/``Ĉ$#$`יKuBT@bKu4P Oh-5.SOU:R(%*69cqHEIf)*EBc`u^DcہzBYY|dgUL5 M-0@4ڇ2XV*‰aHU\D49%ܜvU*jd" )2QF1&9(xs (D(lx&[@ىB 34x%pDK ELP FF(WiMߌ5k76` ʵEZe2eN> ҹm{EL7յQ-j| aTALJFfTHUfz!@ѽ  ~5ݢx6CJnJC$d-S:1+K3#=,3V\>'ZS-aƼ fMdd,*bB!A"1\dFPǁdQr# [uɋ[f7s+Z"#,`5)ʊ5ض$2`E3fDmwDsATdDiQoLb mKM164\k wbf%ԲapAAz;}TWE$gQ%mpƆ:a^\ 7`0㑑$N[ȓn27۳U֎4*)9 ^>!G^#F\ HlJXI4zxn]rCRe)'!L} Y~e30DA Lb[E9f\sIL: !)eRWT@u4 1rΝݖ$ ̡<#Ivv2hfP!? @@dhI| P4+!b Z!P?Sעn-/Txէܒ^eLŔ)*j,> H}1@&8$NJuL6/JhFJj%@uhF X NoèBQNqNLxZ,6rh9) d+kуl6` MF4}'ȴ,T,ˆI^䚡RQ0#.F&ϓ=L^MfQ@Q|ӝ/L0ZުQ3 b6Sj(BM)&Jy ֯ `PPY0DP#`JjP1rjfM"CDJ"P J9;/?Uƚsm\n -Y 4wn9S: 6(/D՘:o NdZbG.K1k*x:|+7X%>*8+0!Go  M08)zT^3./ҎHRYg }RAGwBwO$iRԛקd*~!%dgN2 qG H4) ,Bplh2UWQ֊fxA,ۄ4D¬ǵ REU/}^^P&ۢޙ{wк HK,ŀA0n J:0)7"KBi1QE ,BBB1«C CM9?oUYv}0eC'vPtNky}zQj]-KmHkbq-.eZzieGV/ˢ:Z%4%z?$l%vj3#+qDA6.`(  z1a3E @LU=/ am5 ג1'>pFNۼϊ'q@ZaIJQd!jPl7" IGM4-+p r] Զ'f3e4IxT>Pnf"5)N g]-=xQPJaZP_!ĉR2+f*(`DG@%p@EtX@¤E 5+<@+V$A1ŀ}>m`:Oη 'VJuV64BO37tY4;΍p͙sXiyV7sO e&My>@zuğ88"l5=l+>Wji^:j̢!IS'&3IjaTɤ`(@EJFK;L<)H9$!eM}SJPhRMͨ}]Z{c(mG KGqF`Z|!8OeC~Ud]jOoF ]C,x4 D@; Y-yJ 3{X,.<+,tItRFXGh~L6#e{Rg;P#1^̌ɧZC6 UP(\ȀʫWcZ)3 ŁE6:$h-kԂ* 'LH@!h ܘsQP~4V8cHe[ )$M$3;`J,zȃ#pv~y`j{\% _\%Mʙ<'<[YU緑1͹Uˠ;dپo7B[[nU [(j*t-kMeh24m\ AԊ6ўEqN7a(lMR*S($poݻdhгX[p :-<4"v}O}d3Hu&<.kW\ۄiC,;rB}M ọu I8ϝYYlO qڀX?ړ@HU5ЉJcK <:^(}) 8Q#BIqu#m9 ǥs40wn0{J\W.< 778v; 2gpB'=.5]\<_k 60 P9w`0{%3pAhnme9HD(  Q#+ 0|57PsQQ],vbj8Eׄt8b+Kh6%*9b{&|xJ tdv'{ UÎBwOOW4d`gKLN2 F H45 q< Ϗ7h?xJY*~sYXf{L筀`a#V'BVAcA5!)EzEr*DžLH$P%'T027*A\ёr{lfV;r,{j--xbqRCFAĒiDBh8wqMu@0X"$ϫd龇[47iޝz2$`۹ڋʺ.w>M]rS%K6^ 0s U0Djӈ)%BK#e2NQ@:C;Ll ICp@h얰DZqw G1.td˃tWFg !V'O%~O]T."armLL@%!qZCErQnH[TA]%K9:jrY):w) 5 -f%'KB8E;3 0oĕDC\qGb̹ѣ`A#űMrB)@M2xW"!qE''yKW:Tæi9d@N")_"8txB:EdJhPoFB E,54* VDh>[(OӃТA?ܱǍC`#ݓjݗ#elVV/neΥ:MlX*GJVe&+$Q*D2kH-豋1B,1T@PC4S.yjgRY)t t~t8ư󨑨܉E? oUV+(Â-e| + q)z Pīo Cե)W)b{}V&N@3r AY2%ɊUŁ&"YM) ]3hxIĂ>[l QT4 A@$@٤Eɵ3}HDqJavo&k;db΃Of"  Ḇ<4.s. ,0AYye3je*,2\"!rL~DxCy(HE;Էfbs5ؿJPpBJ34`21-$dߕ2PJc6*# T}D[EL?3'S"OVND*ۂ83}M4k1*Ge>"}Ghy5unIB C҇2|QG3p 0`k5dfP/eB <-=x4Ճ׬C2=Unkjєq=-DL 䈘-p5(iLeŒA3Yީi&Vq=-5i普5>!L0 4w-r[2! vIYgMe!R:# i3#͞C,uTBfx+6%K^yr)&āގo/?d]U+l2 ɑJ 4bvgЕ[g= F&"0Z«QCHA$v]2U`sz/i_*P FpST|`SZH/PuviԒǥ%$eۆp|=}wK|_cNiԔuqksxr"tT33'W0uMLhP92[ILg(ES%rЮ|kvv3TQ rjĤ ώYqPf0!dlRl6 F1{Ge'B/OI"IKկy*А QҠ0 QXXLF" Ivm\EۚюDUlźCVP¤K#JWÇq9+2omSfQQȍ/1XAMd:VC Әh4mXdZ-z0N$ևWJGC1ߟq2Ju"+vhxE5ӻ) -぀b@QfԬh]Ͽ "#D'2y /<#N>5YLŇazF^0a{ʼnpHqdfRc6B B.=84ΗM=F\>Y⬀)f`4(FDd 0Q7h$HDVPA:IR:޿HPV $0M0q'!'a6j35\dc'Ds{;UhFTG}@H(0$LBXT[A`jOTsuoISRjJŽQfɖ"paRդnk!U㺨 'AhRt R9#D6@@JCF bKNKHH6(yk(PZ $&ڝ- &YۂgYi՗\L/#Bx.՞gYLdfCl6B @M84"8j52€~VIYfea ™I Xrlyd|b1B3j)<$G[I)aH\hk8Y!~U f/,( ;@Vly5VcHGGFcxT#[f dJr X"@7^ CF$JS1~:v Fyڄvz#NSp,M7ǩDvG }Wg_m\,P /˧NKgiW8kg{ PvE<4/TQM[1|aZ0ACCEMU8 ~<)*4U` 1\pƣ"h֋bU+0fT; 4&|.J女?OyDdgS N2 -:-=94(X޻=3|4C2Om_#v.H5A5I{En[OsjUSឺh.vg՝V=i䲡fQ]f>NFjH b%B.daƂhs1JED]nbѰ 9f2n4̘@@ED<(<*PMmp]%i&аCkSDFkg$9xFĞXizĆϕAl0VC»~s4Mhʾ1>l!j(}2L qw T"s"#LF rLIFBPÅ&buqF@5V),4$"5tx%z`dfOO>P O`;OZ CdtHjK$ EW(HմYsvKGQ?%Ywbx2eӲm9,0!ND=.Iv~%yZ1@Q&k@nvW1Eޞ>g WZ-.1lj49Y]LUٔ,rP/Jj$i#dhӳxx SS $4ģ{BVW.2 II-TZ$I8 ʅz>$էLJײq"kܙfۥJ0!GuBQx phP2lkx;Y] xt8ql " 16å>O8+RFNXI'*pLu%&|8R_5U;tu^d4 ( 43P2b JISӉ&k ܘ֊Zs8E xYʇ8LɷVɨ50\D8I]+`A@%9kdX@t~Wsq$ L 8|MJ[YdZhU%v}Jy+D!"-B|nSSd^USO4 5H=5H4;ȍ:,r>/%⓮AMՙV\q,IRlndž&7`UΧȚAIڜ"ҟSjnk6o/3n2VL<$@4 aa8(HY3 oD%W|3vCTd+M?35"8.4yTf=c]O܎ͧpfĬ d5C*-H]}pk@aGnmDy C G%mʗOzFlw5R/*PPǰx^`:GB sh׸aj}UHh\2qns:@+9yCs0li0ZT1Hz0&:8q. dlR6 yF܈4B9ҌU86D?ҧHMgM8k &qxHj-,jΈ)ex$rj&v4@$5DH(`!_ EHVɕ#0Dr A? -^16CO^YCajbI+S؀]*E<XFWUVtL@,JT,)hK8 NwINMK!g+Aۺ DJɡj/w,qחCnӎ/pSUz.r{S>b<&gc2 YNG6PifHrebliELAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@InG ZZiI)BN^ ޠlPՔu_d/T@n_>Ezv>iW1dhг/^ B̼4vAZ{*pr.|:L6J]+@jL =J-LZQ!biW2HdJZ+Ma,fJ?quzYB%d3x,7C<,۔LAMEPJ,*B0 JmQ.pa#-:-B8DZ28#ģu=316ճjFyFrZ3r_Xwub1 0zb8LG*juN.dfk >@ @,|4[ӡ9k7%~gwUBM~G!Fqas:'&bBE#  DY0-((b!P)yđ=*"l !6`8euGghX,emz +ʕzi}(&M@9L֛\yYjXKbh`3*k_"l(8HXfG;٪=z,e u|ړ,D[Q ~_S[Cu$ D) 4@p hGTbIXIql6uEVTTtEmHiV f*E 8D=WאqUr_4ڥ(̀_ Dǎؑz(QMd#hQE 8WH4 uY2pelyt:w涏7 G"LAME3.100UUUUUUUUUUUUVi:f2ж#IW JJ3vDR.&Rj//BGF^D ݨ\w.D)=ђ  x9y Qd&dj/V@ : aX4RޮS]@ՉR|-ܻS;pgpr[:On2u6H{|6`n>'-ˬZLJHBThTT:fZ p#jXq Q^.T G)R#'J̓i$@W'CA-_Ȇ]}nUv~m LDGTz?J-%6MgyA؀q pWh+ cG1S$\"q0+7h%TZ.O4OW5ơnݺ6zPnK]TOv)c&&&\]<}v[c }y(?#)"-*2u5dl /> IY4V%L2N,XQ1t&LՁ !ˉ28V/%d]@DS DP 0 ; =z4lUTΔQ|SkRAr%#}"|%9J\j0eULJv:i[ nx˫i,(1D.v=ei^Ua7}4%(@rtP}v;^$3s.!X4`W;eģBt~I48d2DZZɺYVX&`M(Ir!S÷sKžc\Nlg8oZW۷*LAMED0%(c̳fepJR:zl T8^Mphnq9 `%^*ȝ|0ֹړx enj$B3tgg,4C[pRk%dl+O> 1> Z4BuvOK7(nͿoMlXq$k@ IPʌ"fQ NEjIJ\bڿ+~TA:LB 8@XDJ3S2j(Rl)q cߐۉ1mU E<tnM%URS{G !rIf[µW`mV_H`Ȕ k#[ѹ _ 2T`躸xLש#0 ұ}5nEț3*J48Tz*fmQ ,@:8l L13m8K <FA q2/joYZ NJVmވ)/~YwRR2VHU۽^i5dl+OV >Z4l_YxÖ%~ P*IušK?)J9n4rܖml2)QLY-:Z/"ؿL8Bԓt&b?e48XcN9eXsnbIrE 0E[ J,Wʠt*dk54{d 3*nyE䐋JG).~mY %sZ!emS4EҶvYvV2Gnr~CGc䟟~J?;1^477'>F̾WbsX# h \ fsڥ5L&L. c蹕 mᳰIs#“2ʺ)`\> )LsMmda΃Ydr c< =<4BV+QxPb[xw'<|4*sb UrEWu]٣=RH?/蜽B/)<~l]]?is)|13 td-.ûK"+N0(s4L8]Sh0A-X#;5w oFR 0cxF*L<}­DO0)1>ad+kY8G5J^`T"j--c gܡKWViX>,6Ou0#Ve3*HʓjK}BΤI/nY9\7@jF@EX5`DT$*%*eHKd&-` t) F$쥝‰F(>ddgK/^ 8 Y4#5*EbMp02b7ѵTDm @ʑ }l@:tG(>##?eeEhzKrɉM?㏫hF"$!R%HD(9 9  ;h ֚jCҡ8舺@dD܌{E6HEG^PU$5Rq]ڲ B&BZAG{֑ss2_)k)IH/yGmƔdo7 k?ÉO}:jb=qKP8΢"MI7FeIxuV R&,MtI2XAZB0b0ArfbI aTCd`jVȹ)qɘ `\üɆae[Rb&Mȴd:e+/>4 m; =YH4]6j]_aIT`p,OZqw?lc >\T)'2#N8T:07>1.th4ndB}͓<-I= CK,(S|kޟaz0y1z]ȮQx%JQ[]eK1u*=[ӊ3[b- )Bp%34Hr1ͻ@,4$rZi=wL*DQ 氩c@Y}BJg?⽾D_:K=rb_֤>+N62rQ\GN . `-nPn 3h\G28˃$\sLe@0Sɇt&Z(X83`9VPrCT 4CV9BO"'LyAZa0Ev_)\4f-| djO/>@ iC,Y4Dmnj='O_Qn" _޳‹m+yJ]kq"ˆi z\bLPE<>E36iЀ$Cؿt~?N 2xh1"(xCRN)ZjeL9VU Y6KT6{I!VYrWV>Sz_On3R:5t]>f/&D@q"9. ',BVw8d!@Kw-9~Q3뇎2s,~؂Z̐3u *@$u,@IA(ר}6'=NSu\' GYIAw-,==ڄgw3c} [{pWdsiΫOW GY4$Pa_O^pӵ˲KB]-\{T煩u)P!H =dll"7{YOL_zɪ,M/'zoހMBZʛ D1t4IaF !`?k-%GpFzdʔlE*34"O (*pPB]tܹ4 瓝[^ 7֋+CzZ>Q+[a"6{.1je]Qj2wR)%}:?-R5S $G@LV!ds pA$`$.`ɦ8|ȯ e${F3)|qd\AXv}dyjΫXn2 >-=Z4`~֧XM+ 5\*[t{dJ#Q!,5[KW liSQ%$3# ga gcS?"Y9#q}cͲӹ4b0I,t1I#0qK]-<j+ى#`'R,qJ2vhE MmRuHDW:[vX#|r$f:䁰oGfmEȗ6e0exdIj+Ylr 9kD 4ZA7ڤɲ1.y߅"qu(nZ(ӫ_Dy+dVŞί{ED ФŌRdV^K 5 ]KL194*2=!0{]jd#?g aAE=-ȥD7lB2?㍡[^C(7P‘$#Ct9' ̨H @~2 5=K" eBco,)@ >x40Xd1Gˌj %FL;'R=޳ bǭq|ܜʺCp` BiCi;U AdW~8-,y„AT%tΩ*l%)2{`co{-g MfQp3cGH'>FjY w'.V>6IFH.΢ RoMxVʦ֘#ӕ3yωLAM@Lz wCʋw[ *d|H,2R'Z_.k'q"K!k D/V@4iNK,_37AhWҏyEU!qj pT6k\%S1oɗeSdi+:mP y< <4qO hj\OZe)u4NcȚ !5unNŶKFܙsRݽqU{Li(I*pvJ4=LF@Uf*-KK+B4Zxs(#%m(դ'X5:%]"-05w`e0u}a]' 6C[B {6neUWЇkrfHX]j27ÿ0#g9q&:9n~14B_*LAME3.100 2J.X6 I?8d 0R 0s5X@1J$$1oT˟(<)5/B\, Yv̇PWdlϫ/V0 M< <4"qGn5*'ܾMΨpj|Vz!Ȓ8[@,;}mpUdSPqb$) ,4F!TD)cÆ;$&m×S9qf4^.r9jϨe 0 ysCJy0)(1!H*<~66B!XooVïQӵب?jggFti ;e -,K<[^8P 2@$YA%I! wGLgG1DYwSIwr"٘%8¥{Pb]D@]cuw <4ȉKsմ9ꓓ]וqԶp 2̧Fm@0rf\c#cc0tc"(|][fGZO)vY9\MV(2[30HMy?XF!%ׯYTeEVzQKFA2|#)%z:&7.rRz ZވP~7'}eRސ,w5ͬe28I.mr\X1z \}+[)F)'B V>2 @AY (FH2d l XCj0RjF_!,Bu^S !&ob<].㯽ĩ WQزl daг/>0 ŇF0{4o#슋ŏ ()e Θ]$jgC) ϫca K^SXGQc' ͎|fb0sT0!m& \b@ %EdGgJ<{O%  N/LTh6SJLƜO]t AҵONgJFZYY aǝ-JG{tg(&sgkDA Ys18g>/5-cDpREʶ]44.X Cz X2QS`a0J6^(JAzp02[<dYDX!UÇ̾€7g F2lAnhG fdngл/e A-=Y4@#Em͇ER8Z9a0LaXB}CDWly(y /s& 羾ӛq>i*yk5>Sg+BZ B١/!hʝױ$ . IlQyz. PYBk:Gяգ"8gQ`:9kdeuCiQk A =J@ZViQ_~Le @ $, (EqO@6d(ZQc6,FȞ024)lw/*G zl#HmKYט jhju$>dj+O? ͙A 4/*Ivǐ,jxW:Sԙ"}=d虡tK6u7B'B\OZIhZ4n[Aо鉋H$TcKl @I<i؀6. ddɨL5q_F>]p$ yխ_B"iI.$$V.3+ ǗmiO͝aq}ljpP*ǣ}Πּz:5RGsg1Vη6wW"-z+mzD \ .t[" NeY@qXUgh$\EJܞJ(C\ziL'i"P[3YMQ3o}6r5qG?ym.6+H",| d`LWDVPZ7Q_B@@2F#Z 4<d%Y (xPpцd,M(i[ %@(v#8' W68[l C݄ qmlD9j9+vK %d[jOCO^ AGL4rl*Y~[" nUt4 ~NVSu9(:k0ngQ#WHN3dէ_)º4g幜sK#<(y T*ڵ!(j4U9k,y* G"x0qv 0xĖVjTp"i` s>[*I"EVR[Tߟ=Ma ,PL:"A+&H|`XPM%0L͠CIhTU:IE#G= JDu\i{w!3IZVnwnlN {45yj}璉mP#n*=3^ mוּ5hJ$^ ` 8(q&N>x]zr^/^oQJ0B )jK҇(g1 VJ h$Dx7Er.|M-ADYL B):L:Xd(dbjPKOnP E< =Z4TW16[hwjߠg+%"=#zƉZv$qc_j8! =Xi:XTLTg*A-C  "&Wvvd)-A iŚ1b&<QOz0Z-"&`\YMI_k}qkwCk{J7–bt+GN8>+SrEHmUu Kzbb  徯J"W|-MnU@!I %F$(г1nJ- `-̡LW() 2XWxVd< }7lk(?"h2da[ A-=y@4ΟW*SaUj tKU@?aU9e0nPQ? )?S'\1e~@>uwJ2gc;>?bNs]p)ș *C \ a P@0X $lɐ H dB;B 6۾29?%K1fPn2!dgV@ :eYP4r3QM(74#p.k_DQ#1ZǍXXM&UٟzHRQ+I2g@֑ P}G(~ER]HfHqbȭ'[vC8B h=,({j*eK HR۲gph̅ 5Ju|Qa1H?_E F$RЧֱ"Xn4Y;T978(d6t_BflZpӏy,0|Xfpɕ$D/G/ʗjElC@ 0C&h΍* X$ؤ\xaP-R2U ҉N +&lG,&dl+OW ݧ= =[4Sh/Ps 9 |aqf *MHJ/ G߼g֢8nļ5"tL"-ʷQGT_ƾ <~H;оEPF\ V$C,{(4K:E[veWsɐ ś ҭ(T -az6Ib|wRgg?˿W%XbPgYݩu$f@j(^ cAW*˕o<)z 8(⇈zQ: F7e3p'% CT]&@6b3TDD8ɂ- 4YaSS>6eP]djOYT B4G9mfToѽvQ'Zw lrl>կr^x8}qlDuZS΋ 6 0̫BnMvv"& Mlw, N3SiFr0u I H0DwD"0+V y 2P$ɔNc*D*nA>wQa}f3JNCH! Xy^;ԍ VI6-v$l,RJK]P_8&P's1zԧ-J])R(R3I,XC#9H 2Xd$ہb†@H(8V-;faL( K[`MγdmNXn 1? Z4XqT*j! BhZQӓ؏+CH?'e,.PL^6W<۫YnL}X.n#DeH=\4dĈ{UHh2ο_.}[M3ԆUkj+7u,Q+DaͭJ mEu-=^JUƄ;>0,Xb&\D11B>bVQ0dzpe + u( ݛ!s!V {S>4B=1L =,A=ۢo,n=1ƫP%gaJ[ohbQ[Qw:kk꭯u#~^_J78ZJŚlTos·YgyJ3:&/{\䪵!`gEP$È%$5exN@( X,xb$Ȕe Mpʙ2_v< /#^CԸkf@Ư.X:p) dsb!_,:0C"Hȱ-68(*j052B0,\q1ooO#O2ƀ,Q0RACVSla26fnXѢ! [P2H8g8C8"*DÇO!zKDYZj^Rf䬌*ԔT@ ;S ˜sT*_! #?W\ѢC͜)'.'RÝabmɱXМN塥Ds; )m0kC,!g"'רz$F=WX , xP Druq0a5c ٳ: =@4 .B檡 (L߶W==l|B%"oǧDL VW.}1ICbNȂdR *e 64UA |RO`Z$׌H 2e\n,26Ɋ0@<갅b (-*B,hKMj>M-'hRdlYT -> =Z49@"Hd!+/ skgϘT)4lM/ _6Y賭g ]!{Nm _LJ~OMfA D@p `b2JeìyTH14#T$$6q Y* l @,$ӿ&wCY,5MHSXH`Yu/x`*B"8] gc3FX: 6dtl6J RILO=s@D^`GPcHdӿv@sU~KAdmO/> ><4共dVRJrQQxYi\opz =\4=wbFIsv5*)= ?#-9T|A]@jBJnIBFH-c $nܣ%]֭X jb.+\oYi+'dPHp>X]蔟>~DE tL,RsqCX5S %RM9R%Cd:'O`*ʀ r`A&.@ % M ,?Z '۰ dL |,.X-CJb2ܳ.n-9qc~WMe+zGڽBR N=ڄ_z5 dlP+/W Q$y4tڛOFE. inOe#`HluXdC<3pH0@)Z[D,`+1vh^+.NW ]?+kE,A&A̾b{?v*9bE(6d^h38cr = <4yf oZypȑʣn~/d9B˽ (=j\)>Tm^gV!ZmU' $'AJФת<کQ]#:R̯*;y-Vhn]`{/*@]P`-2Hw1D-ӌ0G($5+ w$ L\F50BCV@Kt*,P 2<Ā):h7ܧdl+yn@ 5B4O{c劉`0,=*A{E@_^a49XL\7ysv}۱W5 EidT.sP:L=#qd:oyRVrF];,^vbtEfpL Y}$-%5O D4A580"i: .8B}W6VR]tњE_Gm2[(EDefP/BZ;\ka*F<Aquox>1ta :R1*F :nqeԿz;qV}@$<sF0 kY7#PxDZ PL /M:8EJrݢ@d wdlNXn %> =Z4\r4(fL#W<ف+X["߹_z^h^".+qpdIK:̌MKl/dwRl%񯏛vuJRbz !ؘɨ.^fRWЯ@ |ʕg)·6ɚe(qs}"J-ok'AL@w3i!vt\C:rdIc2C̵"!Lg)ZfK69%s{?Glz^qLb'>]\:.#/3^u:Zuՠ\&I3 Q@bSp+1U%ĪJF oJ!BK`d*ET2!*7U+´YQ.<kL*ldlϫ/V )< =4 \* ?(=\4{j &S)ipJ\l+N:`Q}}˱_W,p1pwtI4WU Gd&(;I@p[AԨB3g+xcI8q@ekP!C%$`C*JoCQ ;`0lBT#,WY^D$ZgqE@kz+T&⌜-+Oo6njy,lCBVRqmW틷WwdYe>/&= $[kjMR@(1PBH=Y`R1(%,T˫q hjb4+D28+bCD8mH\"CT ZdR">dlO/W" ><4%  ?,A8v|[8D1eiX 0"^Ğs8I[}iTG5j.;Be/cX.ac量QޢǥdK6qn#3$C Lb/J8Tȣb!IN^WYrtxk0|GKmY Dٖ)H<x$c84WuaB ݮҺujL'fn0g}"篹= G%;TBY5wFƆHpl?AWͦoۉ$n#B #TEW'Ȑj8UA W"=rdQ?@pD!HWͬc:dċ"[Arc-ءI"d mOOW 9> =\4c.D-0: :mYŁbL5 Q0)%I>?N׹+\E{(Ժ*U7y\L^qAwC@!(j*h ׵T1i"ARA&Z^K@] fG Fw4 x/ 7e-5z I^̳d%7c HZ#u5t׋ ŀI30WnXNEfUL'dEgRK/DP De445n8jswg)]_# X/PL)7ڛplkWdαk^G3 bj0Ÿ*6L*O'q4 `My8A TU hp,dkf:H1$Y X wńY@RLjH4B qŇϙbPÓTwAX+Vn[eq 6L&MΟoa (Xkw: gZ]:-}%K a~ʒt-#74mЕ*/ШeDA̸p.0Ĉ8S =ꚙ6 rD C#c!'CUY$A2I%Pd1lO> %:=^4UN K 8Q4yYPn_DiL\iDå[ Gf-DQ8w }_507!dlOOn Y> =Z4&f(KK wc♑l@+\Îo* ؗ}OXlhKШ^҂Mnb^Mmy/ۇ?(ZBtVA [ vxf (0;902iJ$3P9*a 2P:J"-2C֢tf%Bb[w-=O]GO|ь>S 2GѢ~9/OGY1) ^A#z$抩bTKh!6^E=//JQRRP@|@Q>&D`12<بBo5XaGF oɅ)MxBEQ$c/#ϚȶEgdlO/W" 9<=4. UneecoYx=n..$:uåB'v|T]h(~ לl ͅ#T^[k$H/yF\ 'T+,blm)fp90\pDiLiQ25js!hXWg !=l*mf5N&b3Xd}eErO5$GS4Vo@.ǒ촆fUDAU#t2P㺢c&9GK:ejC=ʨ@ JdB@Ƽ`1D~%^V.en(-%Rݶ4F( DDRe 2 -dlOOV ]>a4ޚN2r ^bA ǚce/~׆L]qo#y= *,}DQ*x.60[?t&0<$ɫL IRA*UH?"ٙBxʱ! (CMVYI`j˒DLMcR%k,Qeސ= nќ3Rc ,m#3dž"'tlMOq{ bi|+A7h 1OIkQ #=Cz^g:@`xPæ*M1da CXى (J@xG2q@ _\-bD;@ p '#OF AdlOO?" M><48@;%crl<\QfC N @Hր (r)nE]1t-MLfL>G;QvQnOv*L}z48jFdrdYe gXPA SFxPEd!$pp2] 61 BogD` )aHR-0fs7زXUdȹH+ԙ!gxusrxʙ4#C()T}D$U22VFIڌMQXlT| e#Eh7: tVBӈ,ye̩QEHlfujLAME3.100dvmP-j` Jٙ42QR5Tr$.]BJBr_r0R l93j \7 꾪l[7ʯ"DON**v (;:TP4h6 LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUduABDFHKOQSUY[]_ceginprtxz|~Lavc57.10$@B^PXd;#0 Y40} `>!A@>h $,`"x4(1>;Lsb!䆠"hԓ&Gk P[g'/d*W\-/+zI[4'[fh87Ƶӌf,!*lvI\[Yq z G?lEmZwLÚI0R f&a˹eIjKsK @D 0XhxAQ-IJ ]Vb⢮d `Vi _XUH4#lJFAbŊMSwKSj|\F4w|Rcw, F+2t[k0Rz\k՞KRµCҰ47F%u+`vΔ.Hb ;g!{j[wv$"x)-ZE~x^O8\FLT)T9b|ĥG> [!hR2 UJo9=Q8בe5-vBӟh fpCbCu&0jfJut;QJlu,`d@Pd ]RE E~+’ÃtQXesʹ~@D7QrdcB) mT-45B)]?ٵ1b[Nfвb̨$äRޅEi kWAyV2e+ N {͐ 1i^+WUTuhpz%Pp`D?ۥmCKhYufY-rRrx sk)rCoxõK\^[F:ϯU-wK/yxO=&*r%% -eF}Cm FA5{f[u&h`[r_;~wws_bJLAME3.100NJN< ^q!XK8in0%$arاTg‰EH J_Lvd AԳOB @X̰4k'YIO7S~`ܾRAH:N37y WMskZNgƐmCx/-x )ַPAl+ !/rniE' aqjdo}ިxäq5!ai&`8yrDfs%<\[BR {V$P  (EiPBQ #X;4d&dX*kC,g(5Ҕ-yb#Vr͵=JpiRc>LAME3.100aހMP0 ƒȬh"JQ#0$2&EYC_Z0JhՔ ):Ȋ MǵOmKOV܊xkm*R9$"dvERl5 I-@4(ʺcSW\Cl'$wu]TUCxwu9z ȸщ0[0дrx&8 I rq-V8@JQP\иY82k veD7i8+iL_}V} 8B8d2K94O/MJ&d3[D>Q}ǟULAME3.100UUUs l@4D*@a@"DX PPhj ۨ!L#8bR/!u`P B7ULقE$'PӊE,,Ckz!ziYb:VKQdgP l7 @ ^4ΖEMOoŪz]E%7K:# KM_߿(Nnq X`.3BbF% *+f\oJkY'2L`ALtXi (u{_d 2/ 3*ۡ]] 9dI2,(yo IN ʱ҃@x+ \E?4dtʰ_=VحBdgPoE 1<ao4=9uQ\+DC I*> ˼t(O*YqE/:㲲XX͗V^~ZF0aAB'04c#ML,h/p-[ (:cUz! F#5fg2 $ f ;ާ.6Gr\̦\EJkT;ϰx ]j%wu=^2a!#j5~qхkdsC|.^q@qO`esԥL~]`o XE+IhW&^vv㡁D6HEf'OFZo J:mB?2,^NpUHxHdbjP o= DLH48#3vF<Xnx!S*)Xt5 UDqP_Mw4ȥe'}# qto)ᷳ ĊG8|G,LNԓfpĬmдHSo,AI@ pUyDdZP2L*jK)p=+mZ&WSF 3Yѵ+{=60]&Wm7)it͈95NP--JPiKWDռgG L}*Vrbe,%f;]LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUU"1JGu c)ih V:Q{ޙx~uQKcrw065@[:"U!Oe)4gMi23d/iVkL{ QYM04aKG 6ʤoP#u5:A0HdfDhg/gضyE'@ᆮ Hꇌ0ɂLT00!RDmd*f?K RfH0(KOӋ)# 늒;쬎EUrqw "F#L6aY  X׭'=KNy,G6IU r,a-ohqzM8u;ֽWK|. SGsLAME3.100UUUUUUUU3"d4 `!(K+6rd0~k.ii,_ό5nKR^/=Hd?ER"NĥmuIi$rmGϵ6:<W 4GdL+IR Nͽ+4gZ,()&iǜM3796Fԑ9Np8ZW`KrgS3ѽ~wG`&XP6"3D<, \5a *Am'2$Y,jE`騆>2ؔh<$F[v$1jw>G9kZ](tqD֩zCѺu-BO~hϴ}[CŰH)A֓Qz>uP 4`wF$dh*LAM*s xb88 8SVJ@́ ۺpE3%|=d 09;RS:ڶդ!<| &Y! V^ѡ%CE7B)(8X0Jf`A!D(u ," 㤜 "gL^1_D .0k1kNPu* -p:ҲYde3l5r %D0(h`!I Qp0 b@ jD*7M4( HE{d.e4{9͟|G 6)J[zw qv&w9L,j||zh&Ί}v],bGtzo/RgSe5Ŗd.?l B`$3Q /9@x >5"+ Yj BAU4,5G $!xdԏo CT5`RƟTצ_W|[j V/[VCP)DfYEdfז n>t43ĂqBȯ`Vg .vm} QPr$T| 0i(PDM! pdd\W*m-[r %X(\F4 }П۬*ZdHhcp ]< 4;և9VbS A5p)ߐ/ :%X6a"r|\,٬7ˎ\ӎ-oy,w ULzoU@Kw4t aRX0R(* !i;;;0nVq|j/|Py&{v@W3?Ӻyb:۫o BoW'VC+/H|tɫ5Z~QCnm{te;F6:6PTpiL,L`XP 55B %he`@:w"!]9X6"rMzu\>x{w9ϠMj/NEz(e_V>ڠ*djOx[t OL4%q՛VF"[#K,}Q"b1{Jw,Gv׷}$55hυ20 C EFI.Z ` $`6Z ;Oe i BSl\VLHG-a;,^/.`nb=s]n-RY%hhp{(m{lP &X:0K X !Nkc*˄Ȍ  @g Lʅ$b"kӉqb޲k{zS}d ~(2(2* YI%#!J]Td'ϋ Z3US( cCNbdgϋOV4 Ba4I2sTNc11Irg{ HXh$h@xG7? =ReY^ڣ*|fҋȝ~m+ Zafn꾹Z sӃm LF]q[h;q,`E&h(K<`eca1hY)K"$Dy9O0We TvPʺ$z&q"6WWd.+$!Q1%h#88sJ3IRi%E:fȌ/OȷPi`EZ*O0u`iʅAZY~Yk!+e&L+ 8ZtaFDM:SPh-etp9Rz%duhӳOcr Q#R H4L躄M4y2r PvL>h\ o [eGlJ-q@w!б|NŊTU:.u64fC,g0[#\چ3.UR*S$NWD;j\EVwO!iaFOZ>1 p"H*A8")OBRՉ(/?T!j8.+0 "iq 4 &2D+ 3 EYbmHbj!  Cg㚉%SZ3S11ztvcXu)֤V_Dd jQo4 F=4$jW qǀ]3JSSpg~VfTqQΚxtP`hh}_)a2 ΋[pRq ^tUH2Ǫ3&dRM=LL kdgPoM I@ͽ74P?J x$縷9'iCK5%_V퐖 B:knX樼Gkr}R`ʕw_ֆ|ID..#0&,X^hX)LyxڝW7&4JI ,(vTjLUP:$JOZ3Nepuvb{{5'ZJ2m3Db,1 FE*2Z`KaMx#2^6Tә{ŇgB]f x.""_{J^ڌMddh;i7 D64_Ш8xfҜ7vzd<'~LS,Ǹr;sƞ9T5"pE3ԣ/kժt) S[6ym%L M4Pa T'y*W0i"H lh/+{NM  .۰+Nt)5gID4fguZIT-{Tl,c5HĪ\ɁǛ.,8?yI9GT3Wdmxy7ċqSٌ8jz~k U@HQlёPf FfS)Sdqhbu` B`0HeY.fNf=f@!  ]BQ-YdhLO0 >mo4m@< & @(cTa]P 2N}/pd 0LBaq[}r}u @$Ѝd"h,p(%^KvJ48줰(yZKA{T Y{E[H(Y9()Gpp (J|*&ZP5gyN%"&Ёܮg kg4xV:˅ %<ĦTĶʰr?jXJ%u)cO'-hj0>*@P&*B N 2㥔7-1(]l$YM0 Hf, :m_oUJȍIXH)a6$P>b:ӏHYƒGfd:hSH JM74Z3̿nDY}"c-K?>z1^ :) MjA&CNjD D3Ǭ⪒/O,?5Lx 10yt]R;D)kjxx:dEG]Ix\wGG_]w*!2"s12ؘP %Fp@A)2C^Fx“0i}"7"5 ktvaѝW eĈLki]h>,q^=Xih@:<$1dsQVCI L 4'#VI0D(,)+$nur1$lPh Ű #R ~+&qo+^k0sdĜɢQeY\6%CW1Yir#Q[0I)j%֝lyFRlID"̤Ғ]ű<.Nr:H9HFPt R6' S%֔-d>~ۤ^ jLAME3.100#$dRb#GXiuBW~K1 -4:F&Dfκe[QIO&A'djCl5 mJ-4X Z5 '4{4ʳgrG KBs?NUF]4RRH2y(>@-$MDԥ FzƇ\ WAO3ojgFӲ,Z">0[ez#VJ~䌌|zuO+Q禄ʪѪ'.{'uC ͈. F$3`B/``Ĉ$#$`יKuBT@bKu4P Oh-5.SOU:R(%*69cqHEIf)*EBc`u^DcہzBYY|dgUL5 M-0@4ڇ2XV*‰aHU\D49%ܜvU*jd" )2QF1&9(xs (D(lx&[@ىB 34x%pDK ELP FF(WiMߌ5k76` ʵEZe2eN> ҹm{EL7յQ-j| aTALJFfTHUfz!@ѽ  ~5ݢx6CJnJC$d-S:1+K3#=,3V\>'ZS-aƼ fMdd,*bB!A"1\dFPǁdQr# [uɋ[f7s+Z"#,`5)ʊ5ض$2`E3fDmwDsATdDiQoLb mKM164\k wbf%ԲapAAz;}TWE$gQ%mpƆ:a^\ 7`0㑑$N[ȓn27۳U֎4*)9 ^>!G^#F\ HlJXI4zxn]rCRe)'!L} Y~e30DA Lb[E9f\sIL: !)eRWT@u4 1rΝݖ$ ̡<#Ivv2hfP!? @@dhI| P4+!b Z!P?Sעn-/Txէܒ^eLŔ)*j,> H}1@&8$NJuL6/JhFJj%@uhF X NoèBQNqNLxZ,6rh9) d+kуl6` MF4}'ȴ,T,ˆI^䚡RQ0#.F&ϓ=L^MfQ@Q|ӝ/L0ZުQ3 b6Sj(BM)&Jy ֯ `PPY0DP#`JjP1rjfM"CDJ"P J9;/?Uƚsm\n -Y 4wn9S: 6(/D՘:o NdZbG.K1k*x:|+7X%>*8+0!Go  M08)zT^3./ҎHRYg }RAGwBwO$iRԛקd*~!%dgN2 qG H4) ,Bplh2UWQ֊fxA,ۄ4D¬ǵ REU/}^^P&ۢޙ{wк HK,ŀA0n J:0)7"KBi1QE ,BBB1«C CM9?oUYv}0eC'vPtNky}zQj]-KmHkbq-.eZzieGV/ˢ:Z%4%z?$l%vj3#+qDA6.`(  z1a3E @LU=/ am5 ג1'>pFNۼϊ'q@ZaIJQd!jPl7" IGM4-+p r] Զ'f3e4IxT>Pnf"5)N g]-=xQPJaZP_!ĉR2+f*(`DG@%p@EtX@¤E 5+<@+V$A1ŀ}>m`:Oη 'VJuV64BO37tY4;΍p͙sXiyV7sO e&My>@zuğ88"l5=l+>Wji^:j̢!IS'&3IjaTɤ`(@EJFK;L<)H9$!eM}SJPhRMͨ}]Z{c(mG KGqF`Z|!8OeC~Ud]jOoF ]C,x4 D@; Y-yJ 3{X,.<+,tItRFXGh~L6#e{Rg;P#1^̌ɧZC6 UP(\ȀʫWcZ)3 ŁE6:$h-kԂ* 'LH@!h ܘsQP~4V8cHe[ )$M$3;`J,zȃ#pv~y`j{\% _\%Mʙ<'<[YU緑1͹Uˠ;dپo7B[[nU [(j*t-kMeh24m\ AԊ6ўEqN7a(lMR*S($poݻdhгX[p :-<4"v}O}d3Hu&<.kW\ۄiC,;rB}M ọu I8ϝYYlO qڀX?ړ@HU5ЉJcK <:^(}) 8Q#BIqu#m9 ǥs40wn0{J\W.< 778v; 2gpB'=.5]\<_k 60 P9w`0{%3pAhnme9HD(  Q#+ 0|57PsQQ],vbj8Eׄt8b+Kh6%*9b{&|xJ tdv'{ UÎBwOOW4d`gKLN2 F H45 q< Ϗ7h?xJY*~sYXf{L筀`a#V'BVAcA5!)EzEr*DžLH$P%'T027*A\ёr{lfV;r,{j--xbqRCFAĒiDBh8wqMu@0X"$ϫd龇[47iޝz2$`۹ڋʺ.w>M]rS%K6^ 0s U0Djӈ)%BK#e2NQ@:C;Ll ICp@h얰DZqw G1.td˃tWFg !V'O%~O]T."armLL@%!qZCErQnH[TA]%K9:jrY):w) 5 -f%'KB8E;3 0oĕDC\qGb̹ѣ`A#űMrB)@M2xW"!qE''yKW:Tæi9d@N")_"8txB:EdJhPoFB E,54* VDh>[(OӃТA?ܱǍC`#ݓjݗ#elVV/neΥ:MlX*GJVe&+$Q*D2kH-豋1B,1T@PC4S.yjgRY)t t~t8ư󨑨܉E? oUV+(Â-e| + q)z Pīo Cե)W)b{}V&N@3r AY2%ɊUŁ&"YM) ]3hxIĂ>[l QT4 A@$@٤Eɵ3}HDqJavo&k;db΃Of"  Ḇ<4.s. ,0AYye3je*,2\"!rL~DxCy(HE;Էfbs5ؿJPpBJ34`21-$dߕ2PJc6*# T}D[EL?3'S"OVND*ۂ83}M4k1*Ge>"}Ghy5unIB C҇2|QG3p 0`k5dfP/eB <-=x4Ճ׬C2=Unkjєq=-DL 䈘-p5(iLeŒA3Yީi&Vq=-5i普5>!L0 4w-r[2! vIYgMe!R:# i3#͞C,uTBfx+6%K^yr)&āގo/?d]U+l2 ɑJ 4bvgЕ[g= F&"0Z«QCHA$v]2U`sz/i_*P FpST|`SZH/PuviԒǥ%$eۆp|=}wK|_cNiԔuqksxr"tT33'W0uMLhP92[ILg(ES%rЮ|kvv3TQ rjĤ ώYqPf0!dlRl6 F1{Ge'B/OI"IKկy*А QҠ0 QXXLF" Ivm\EۚюDUlźCVP¤K#JWÇq9+2omSfQQȍ/1XAMd:VC Әh4mXdZ-z0N$ևWJGC1ߟq2Ju"+vhxE5ӻ) -぀b@QfԬh]Ͽ "#D'2y /<#N>5YLŇazF^0a{ʼnpHqdfRc6B B.=84ΗM=F\>Y⬀)f`4(FDd 0Q7h$HDVPA:IR:޿HPV $0M0q'!'a6j35\dc'Ds{;UhFTG}@H(0$LBXT[A`jOTsuoISRjJŽQfɖ"paRդnk!U㺨 'AhRt R9#D6@@JCF bKNKHH6(yk(PZ $&ڝ- &YۂgYi՗\L/#Bx.՞gYLdfCl6B @M84"8j52€~VIYfea ™I Xrlyd|b1B3j)<$G[I)aH\hk8Y!~U f/,( ;@Vly5VcHGGFcxT#[f dJr X"@7^ CF$JS1~:v Fyڄvz#NSp,M7ǩDvG }Wg_m\,P /˧NKgiW8kg{ PvE<4/TQM[1|aZ0ACCEMU8 ~<)*4U` 1\pƣ"h֋bU+0fT; 4&|.J女?OyDdgS N2 -:-=94(X޻=3|4C2Om_#v.H5A5I{En[OsjUSឺh.vg՝V=i䲡fQ]f>NFjH b%B.daƂhs1JED]nbѰ 9f2n4̘@@ED<(<*PMmp]%i&аCkSDFkg$9xFĞXizĆϕAl0VC»~s4Mhʾ1>l!j(}2L qw T"s"#LF rLIFBPÅ&buqF@5V),4$"5tx%z`dfOO>P O`;OZ CdtHjK$ EW(HմYsvKGQ?%Ywbx2eӲm9,0!ND=.Iv~%yZ1@Q&k@nvW1Eޞ>g WZ-.1lj49Y]LUٔ,rP/Jj$i#dhӳxx SS $4ģ{BVW.2 II-TZ$I8 ʅz>$էLJײq"kܙfۥJ0!GuBQx phP2lkx;Y] xt8ql " 16å>O8+RFNXI'*pLu%&|8R_5U;tu^d4 ( 43P2b JISӉ&k ܘ֊Zs8E xYʇ8LɷVɨ50\D8I]+`A@%9kdX@t~Wsq$ L 8|MJ[YdZhU%v}Jy+D!"-B|nSSd^USO4 5H=5H4;ȍ:,r>/%⓮AMՙV\q,IRlndž&7`UΧȚAIڜ"ҟSjnk6o/3n2VL<$@4 aa8(HY3 oD%W|3vCTd+M?35"8.4yTf=c]O܎ͧpfĬ d5C*-H]}pk@aGnmDy C G%mʗOzFlw5R/*PPǰx^`:GB sh׸aj}UHh\2qns:@+9yCs0li0ZT1Hz0&:8q. dlR6 yF܈4B9ҌU86D?ҧHMgM8k &qxHj-,jΈ)ex$rj&v4@$5DH(`!_ EHVɕ#0Dr A? -^16CO^YCajbI+S؀]*E<XFWUVtL@,JT,)hK8 NwINMK!g+Aۺ DJɡj/w,qחCnӎ/pSUz.r{S>b<&gc2 YNG6PifHrebliELAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@InG ZZiI)BN^ ޠlPՔu_d/T@n_>Ezv>iW1dhг/^ B̼4vAZ{*pr.|:L6J]+@jL =J-LZQ!biW2HdJZ+Ma,fJ?quzYB%d3x,7C<,۔LAMEPJ,*B0 JmQ.pa#-:-B8DZ28#ģu=316ճjFyFrZ3r_Xwub1 0zb8LG*juN.dfk >@ @,|4[ӡ9k7%~gwUBM~G!Fqas:'&bBE#  DY0-((b!P)yđ=*"l !6`8euGghX,emz +ʕzi}(&M@9L֛\yYjXKbh`3*k_"l(8HXfG;٪=z,e u|ړ,D[Q ~_S[Cu$ D) 4@p hGTbIXIql6uEVTTtEmHiV f*E 8D=WאqUr_4ڥ(̀_ Dǎؑz(QMd#hQE 8WH4 uY2pelyt:w涏7 G"LAME3.100UUUUUUUUUUUUVi:f2ж#IW JJ3vDR.&Rj//BGF^D ݨ\w.D)=ђ  x9y Qd&dj/V@ : aX4RޮS]@ՉR|-ܻS;pgpr[:On2u6H{|6`n>'-ˬZLJHBThTT:fZ p#jXq Q^.T G)R#'J̓i$@W'CA-_Ȇ]}nUv~m LDGTz?J-%6MgyA؀q pWh+ cG1S$\"q0+7h%TZ.O4OW5ơnݺ6zPnK]TOv)c&&&\]<}v[c }y(?#)"-*2u5dl /> IY4V%L2N,XQ1t&LՁ !ˉ28V/%d]@DS DP 0 ; =z4lUTΔQ|SkRAr%#}"|%9J\j0eULJv:i[ nx˫i,(1D.v=ei^Ua7}4%(@rtP}v;^$3s.!X4`W;eģBt~I48d2DZZɺYVX&`M(Ir!S÷sKžc\Nlg8oZW۷*LAMED0%(c̳fepJR:zl T8^Mphnq9 `%^*ȝ|0ֹړx enj$B3tgg,4C[pRk%dl+O> 1> Z4BuvOK7(nͿoMlXq$k@ IPʌ"fQ NEjIJ\bڿ+~TA:LB 8@XDJ3S2j(Rl)q cߐۉ1mU E<tnM%URS{G !rIf[µW`mV_H`Ȕ k#[ѹ _ 2T`躸xLש#0 ұ}5nEț3*J48Tz*fmQ ,@:8l L13m8K <FA q2/joYZ NJVmވ)/~YwRR2VHU۽^i5dl+OV >Z4l_YxÖ%~ P*IušK?)J9n4rܖml2)QLY-:Z/"ؿL8Bԓt&b?e48XcN9eXsnbIrE 0E[ J,Wʠt*dk54{d 3*nyE䐋JG).~mY %sZ!emS4EҶvYvV2Gnr~CGc䟟~J?;1^477'>F̾WbsX# h \ fsڥ5L&L. c蹕 mᳰIs#“2ʺ)`\> )LsMmda΃Ydr c< =<4BV+QxPb[xw'<|4*sb UrEWu]٣=RH?/蜽B/)<~l]]?is)|13 td-.ûK"+N0(s4L8]Sh0A-X#;5w oFR 0cxF*L<}­DO0)1>ad+kY8G5J^`T"j--c gܡKWViX>,6Ou0#Ve3*HʓjK}BΤI/nY9\7@jF@EX5`DT$*%*eHKd&-` t) F$쥝‰F(>ddgK/^ 8 Y4#5*EbMp02b7ѵTDm @ʑ }l@:tG(>##?eeEhzKrɉM?㏫hF"$!R%HD(9 9  ;h ֚jCҡ8舺@dD܌{E6HEG^PU$5Rq]ڲ B&BZAG{֑ss2_)k)IH/yGmƔdo7 k?ÉO}:jb=qKP8΢"MI7FeIxuV R&,MtI2XAZB0b0ArfbI aTCd`jVȹ)qɘ `\üɆae[Rb&Mȴd:e+/>4 m; =YH4]6j]_aIT`p,OZqw?lc >\T)'2#N8T:07>1.th4ndB}͓<-I= CK,(S|kޟaz0y1z]ȮQx%JQ[]eK1u*=[ӊ3[b- )Bp%34Hr1ͻ@,4$rZi=wL*DQ 氩c@Y}BJg?⽾D_:K=rb_֤>+N62rQ\GN . `-nPn 3h\G28˃$\sLe@0Sɇt&Z(X83`9VPrCT 4CV9BO"'LyAZa0Ev_)\4f-| djO/>@ iC,Y4Dmnj='O_Qn" _޳‹m+yJ]kq"ˆi z\bLPE<>E36iЀ$Cؿt~?N 2xh1"(xCRN)ZjeL9VU Y6KT6{I!VYrWV>Sz_On3R:5t]>f/&D@q"9. ',BVw8d!@Kw-9~Q3뇎2s,~؂Z̐3u *@$u,@IA(ר}6'=NSu\' GYIAw-,==ڄgw3c} [{pWdsiΫOW GY4$Pa_O^pӵ˲KB]-\{T煩u)P!H =dll"7{YOL_zɪ,M/'zoހMBZʛ D1t4IaF !`?k-%GpFzdʔlE*34"O (*pPB]tܹ4 瓝[^ 7֋+CzZ>Q+[a"6{.1je]Qj2wR)%}:?-R5S $G@LV!ds pA$`$.`ɦ8|ȯ e${F3)|qd\AXv}dyjΫXn2 >-=Z4`~֧XM+ 5\*[t{dJ#Q!,5[KW liSQ%$3# ga gcS?"Y9#q}cͲӹ4b0I,t1I#0qK]-<j+ى#`'R,qJ2vhE MmRuHDW:[vX#|r$f:䁰oGfmEȗ6e0exdIj+Ylr 9kD 4ZA7ڤɲ1.y߅"qu(nZ(ӫ_Dy+dVŞί{ED ФŌRdV^K 5 ]KL194*2=!0{]jd#?g aAE=-ȥD7lB2?㍡[^C(7P‘$#Ct9' ̨H @~2 5=K" eBco,)@ >x40Xd1Gˌj %FL;'R=޳ bǭq|ܜʺCp` BiCi;U AdW~8-,y„AT%tΩ*l%)2{`co{-g MfQp3cGH'>FjY w'.V>6IFH.΢ RoMxVʦ֘#ӕ3yωLAM@Lz wCʋw[ *d|H,2R'Z_.k'q"K!k D/V@4iNK,_37AhWҏyEU!qj pT6k\%S1oɗeSdi+:mP y< <4qO hj\OZe)u4NcȚ !5unNŶKFܙsRݽqU{Li(I*pvJ4=LF@Uf*-KK+B4Zxs(#%m(դ'X5:%]"-05w`e0u}a]' 6C[B {6neUWЇkrfHX]j27ÿ0#g9q&:9n~14B_*LAME3.100 2J.X6 I?8d 0R 0s5X@1J$$1oT˟(<)5/B\, Yv̇PWdlϫ/V0 M< <4"qGn5*'ܾMΨpj|Vz!Ȓ8[@,;}mpUdSPqb$) ,4F!TD)cÆ;$&m×S9qf4^.r9jϨe 0 ysCJy0)(1!H*<~66B!XooVïQӵب?jggFti ;e -,K<[^8P 2@$YA%I! wGLgG1DYwSIwr"٘%8¥{Pb]D@]cuw <4ȉKsմ9ꓓ]וqԶp 2̧Fm@0rf\c#cc0tc"(|][fGZO)vY9\MV(2[30HMy?XF!%ׯYTeEVzQKFA2|#)%z:&7.rRz ZވP~7'}eRސ,w5ͬe28I.mr\X1z \}+[)F)'B V>2 @AY (FH2d l XCj0RjF_!,Bu^S !&ob<].㯽ĩ WQزl daг/>0 ŇF0{4o#슋ŏ ()e Θ]$jgC) ϫca K^SXGQc' ͎|fb0sT0!m& \b@ %EdGgJ<{O%  N/LTh6SJLƜO]t AҵONgJFZYY aǝ-JG{tg(&sgkDA Ys18g>/5-cDpREʶ]44.X Cz X2QS`a0J6^(JAzp02[<dYDX!UÇ̾€7g F2lAnhG fdngл/e A-=Y4@#Em͇ER8Z9a0LaXB}CDWly(y /s& 羾ӛq>i*yk5>Sg+BZ B١/!hʝױ$ . IlQyz. PYBk:Gяգ"8gQ`:9kdeuCiQk A =J@ZViQ_~Le @ $, (EqO@6d(ZQc6,FȞ024)lw/*G zl#HmKYט jhju$>dj+O? ͙A 4/*Ivǐ,jxW:Sԙ"}=d虡tK6u7B'B\OZIhZ4n[Aо鉋H$TcKl @I<i؀6. ddɨL5q_F>]p$ yխ_B"iI.$$V.3+ ǗmiO͝aq}ljpP*ǣ}Πּz:5RGsg1Vη6wW"-z+mzD \ .t[" NeY@qXUgh$\EJܞJ(C\ziL'i"P[3YMQ3o}6r5qG?ym.6+H",| d`LWDVPZ7Q_B@@2F#Z 4<d%Y (xPpцd,M(i[ %@(v#8' W68[l C݄ qmlD9j9+vK %d[jOCO^ AGL4rl*Y~[" nUt4 ~NVSu9(:k0ngQ#WHN3dէ_)º4g幜sK#<(y T*ڵ!(j4U9k,y* G"x0qv 0xĖVjTp"i` s>[*I"EVR[Tߟ=Ma ,PL:"A+&H|`XPM%0L͠CIhTU:IE#G= JDu\i{w!3IZVnwnlN {45yj}璉mP#n*=3^ mוּ5hJ$^ ` 8(q&N>x]zr^/^oQJ0B )jK҇(g1 VJ h$Dx7Er.|M-ADYL B):L:Xd(dbjPKOnP E< =Z4TW16[hwjߠg+%"=#zƉZv$qc_j8! =Xi:XTLTg*A-C  "&Wvvd)-A iŚ1b&<QOz0Z-"&`\YMI_k}qkwCk{J7–bt+GN8>+SrEHmUu Kzbb  徯J"W|-MnU@!I %F$(г1nJ- `-̡LW() 2XWxVd< }7lk(?"h2da[ A-=y@4ΟW*SaUj tKU@?aU9e0nPQ? )?S'\1e~@>uwJ2gc;>?bNs]p)ș *C \ a P@0X $lɐ H dB;B 6۾29?%K1fPn2!dgV@ :eYP4r3QM(74#p.k_DQ#1ZǍXXM&UٟzHRQ+I2g@֑ P}G(~ER]HfHqbȭ'[vC8B h=,({j*eK HR۲gph̅ 5Ju|Qa1H?_E F$RЧֱ"Xn4Y;T978(d6t_BflZpӏy,0|Xfpɕ$D/G/ʗjElC@ 0C&h΍* X$ؤ\xaP-R2U ҉N +&lG,&dl+OW ݧ= =[4Sh/Ps 9 |aqf *MHJ/ G߼g֢8nļ5"tL"-ʷQGT_ƾ <~H;оEPF\ V$C,{(4K:E[veWsɐ ś ҭ(T -az6Ib|wRgg?˿W%XbPgYݩu$f@j(^ cAW*˕o<)z 8(⇈zQ: F7e3p'% CT]&@6b3TDD8ɂ- 4YaSS>6eP]djOYT B4G9mfToѽvQ'Zw lrl>կr^x8}qlDuZS΋ 6 0̫BnMvv"& Mlw, N3SiFr0u I H0DwD"0+V y 2P$ɔNc*D*nA>wQa}f3JNCH! Xy^;ԍ VI6-v$l,RJK]P_8&P's1zԧ-J])R(R3I,XC#9H 2Xd$ہb†@H(8V-;faL( K[`MγdmNXn 1? Z4XqT*j! BhZQӓ؏+CH?'e,.PL^6W<۫YnL}X.n#DeH=\4dĈ{UHh2ο_.}[M3ԆUkj+7u,Q+DaͭJ mEu-=^JUƄ;>0,Xb&\D11B>bVQ0dzpe + u( ݛ!s!V {S>4B=1L =,A=ۢo,n=1ƫP%gaJ[ohbQ[Qw:kk꭯u#~^_J78ZJŚlTos·YgyJ3:&/{\䪵!`gEP$È%$5exN@( X,xb$Ȕe Mpʙ2_v< /#^CԸkf@Ư.X:p) dsb!_,:0C"Hȱ-68(*j052B0,\q1ooO#O2ƀ,Q0RACVSla26fnXѢ! [P2H8g8C8"*DÇO!zKDYZj^Rf䬌*ԔT@ ;S ˜sT*_! #?W\ѢC͜)'.'RÝabmɱXМN塥Ds; )m0kC,!g"'רz$F=WX , xP Druq0a5c ٳ: =@4 .B檡 (L߶W==l|B%"oǧDL VW.}1ICbNȂdR *e 64UA |RO`Z$׌H 2e\n,26Ɋ0@<갅b (-*B,hKMj>M-'hRdlYT -> =Z49@"Hd!+/ skgϘT)4lM/ _6Y賭g ]!{Nm _LJ~OMfA D@p `b2JeìyTH14#T$$6q Y* l @,$ӿ&wCY,5MHSXH`Yu/x`*B"8] gc3FX: 6dtl6J RILO=s@D^`GPcHdӿv@sU~KAdmO/> ><4共dVRJrQQxYi\opz =\4=wbFIsv5*)= ?#-9T|A]@jBJnIBFH-c $nܣ%]֭X jb.+\oYi+'dPHp>X]蔟>~DE tL,RsqCX5S %RM9R%Cd:'O`*ʀ r`A&.@ % M ,?Z '۰ dL |,.X-CJb2ܳ.n-9qc~WMe+zGڽBR N=ڄ_z5 dlP+/W Q$y4tڛOFE. inOe#`HluXdC<3pH0@)Z[D,`+1vh^+.NW ]?+kE,A&A̾b{?v*9bE(6d^h38cr = <4yf oZypȑʣn~/d9B˽ (=j\)>Tm^gV!ZmU' $'AJФת<کQ]#:R̯*;y-Vhn]`{/*@]P`-2Hw1D-ӌ0G($5+ w$ L\F50BCV@Kt*,P 2<Ā):h7ܧdl+yn@ 5B4O{c劉`0,=*A{E@_^a49XL\7ysv}۱W5 EidT.sP:L=#qd:oyRVrF];,^vbtEfpL Y}$-%5O D4A580"i: .8B}W6VR]tњE_Gm2[(EDefP/BZ;\ka*F<Aquox>1ta :R1*F :nqeԿz;qV}@$<sF0 kY7#PxDZ PL /M:8EJrݢ@d wdlNXn %> =Z4\r4(fL#W<ف+X["߹_z^h^".+qpdIK:̌MKl/dwRl%񯏛vuJRbz !ؘɨ.^fRWЯ@ |ʕg)·6ɚe(qs}"J-ok'AL@w3i!vt\C:rdIc2C̵"!Lg)ZfK69%s{?Glz^qLb'>]\:.#/3^u:Zuՠ\&I3 Q@bSp+1U%ĪJF oJ!BK`d*ET2!*7U+´YQ.<kL*ldlϫ/V )< =4 \* ?(=\4{j &S)ipJ\l+N:`Q}}˱_W,p1pwtI4WU Gd&(;I@p[AԨB3g+xcI8q@ekP!C%$`C*JoCQ ;`0lBT#,WY^D$ZgqE@kz+T&⌜-+Oo6njy,lCBVRqmW틷WwdYe>/&= $[kjMR@(1PBH=Y`R1(%,T˫q hjb4+D28+bCD8mH\"CT ZdR">dlO/W" ><4%  ?,A8v|[8D1eiX 0"^Ğs8I[}iTG5j.;Be/cX.ac量QޢǥdK6qn#3$C Lb/J8Tȣb!IN^WYrtxk0|GKmY Dٖ)H<x$c84WuaB ݮҺujL'fn0g}"篹= G%;TBY5wFƆHpl?AWͦoۉ$n#B #TEW'Ȑj8UA W"=rdQ?@pD!HWͬc:dċ"[Arc-ءI"d mOOW 9> =\4c.D-0: :mYŁbL5 Q0)%I>?N׹+\E{(Ժ*U7y\L^qAwC@!(j*h ׵T1i"ARA&Z^K@] fG Fw4 x/ 7e-5z I^̳d%7c HZ#u5t׋ ŀI30WnXNEfUL'dEgRK/DP De445n8jswg)]_# X/PL)7ڛplkWdαk^G3 bj0Ÿ*6L*O'q4 `My8A TU hp,dkf:H1$Y X wńY@RLjH4B qŇϙbPÓTwAX+Vn[eq 6L&MΟoa (Xkw: gZ]:-}%K a~ʒt-#74mЕ*/ШeDA̸p.0Ĉ8S =ꚙ6 rD C#c!'CUY$A2I%Pd1lO> %:=^4UN K 8Q4yYPn_DiL\iDå[ Gf-DQ8w }_507!dlOOn Y> =Z4&f(KK wc♑l@+\Îo* ؗ}OXlhKШ^҂Mnb^Mmy/ۇ?(ZBtVA [ vxf (0;902iJ$3P9*a 2P:J"-2C֢tf%Bb[w-=O]GO|ь>S 2GѢ~9/OGY1) ^A#z$抩bTKh!6^E=//JQRRP@|@Q>&D`12<بBo5XaGF oɅ)MxBEQ$c/#ϚȶEgdlO/W" 9<=4. UneecoYx=n..$:uåB'v|T]h(~ לl ͅ#T^[k$H/yF\ 'T+,blm)fp90\pDiLiQ25js!hXWg !=l*mf5N&b3Xd}eErO5$GS4Vo@.ǒ촆fUDAU#t2P㺢c&9GK:ejC=ʨ@ JdB@Ƽ`1D~%^V.en(-%Rݶ4F( DDRe 2 -dlOOV ]>a4ޚN2r ^bA ǚce/~׆L]qo#y= *,}DQ*x.60[?t&0<$ɫL IRA*UH?"ٙBxʱ! (CMVYI`j˒DLMcR%k,Qeސ= nќ3Rc ,m#3dž"'tlMOq{ bi|+A7h 1OIkQ #=Cz^g:@`xPæ*M1da CXى (J@xG2q@ _\-bD;@ p '#OF AdlOO?" M><48@;%crl<\QfC N @Hր (r)nE]1t-MLfL>G;QvQnOv*L}z48jFdrdYe gXPA SFxPEd!$pp2] 61 BogD` )aHR-0fs7زXUdȹH+ԙ!gxusrxʙ4#C()T}D$U22VFIڌMQXlT| e#Eh7: tVBӈ,ye̩QEHlfujLAME3.100dvmP-j` Jٙ42QR5Tr$.]BJBr_r0R l93j \7 꾪l[7ʯ"DON**v (;:TP4h6 LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUduABDFHKOQSUY[]_ceginprtxz|~Lavc57.10$@B^PXd;#0 Y40} `>!A@>h $,`"x4(1>;Lsb!䆠"hԓ&Gk P[g'/d*W\-/+zI[4'[fh87Ƶӌf,!*lvI\[Yq z G?lEmZwLÚI0R f&a˹eIjKsK @D 0XhxAQ-IJ ]Vb⢮d `Vi _XUH4#lJFAbŊMSwKSj|\F4w|Rcw, F+2t[k0Rz\k՞KRµCҰ47F%u+`vΔ.Hb ;g!{j[wv$"x)-ZE~x^O8\FLT)T9b|ĥG> [!hR2 UJo9=Q8בe5-vBӟh fpCbCu&0jfJut;QJlu,`d@Pd ]RE E~+’ÃtQXesʹ~@D7QrdcB) mT-45B)]?ٵ1b[Nfвb̨$äRޅEi kWAyV2e+ N {͐ 1i^+WUTuhpz%Pp`D?ۥmCKhYufY-rRrx sk)rCoxõK\^[F:ϯU-wK/yxO=&*r%% -eF}Cm FA5{f[u&h`[r_;~wws_bJLAME3.100NJN< ^q!XK8in0%$arاTg‰EH J_Lvd AԳOB @X̰4k'YIO7S~`ܾRAH:N37y WMskZNgƐmCx/-x )ַPAl+ !/rniE' aqjdo}ިxäq5!ai&`8yrDfs%<\[BR {V$P  (EiPBQ #X;4d&dX*kC,g(5Ҕ-yb#Vr͵=JpiRc>LAME3.100aހMP0 ƒȬh"JQ#0$2&EYC_Z0JhՔ ):Ȋ MǵOmKOV܊xkm*R9$"dvERl5 I-@4(ʺcSW\Cl'$wu]TUCxwu9z ȸщ0[0дrx&8 I rq-V8@JQP\иY82k veD7i8+iL_}V} 8B8d2K94O/MJ&d3[D>Q}ǟULAME3.100UUUs l@4D*@a@"DX PPhj ۨ!L#8bR/!u`P B7ULقE$'PӊE,,Ckz!ziYb:VKQdgP l7 @ ^4ΖEMOoŪz]E%7K:# KM_߿(Nnq X`.3BbF% *+f\oJkY'2L`ALtXi (u{_d 2/ 3*ۡ]] 9dI2,(yo IN ʱ҃@x+ \E?4dtʰ_=VحBdgPoE 1<ao4=9uQ\+DC I*> ˼t(O*YqE/:㲲XX͗V^~ZF0aAB'04c#ML,h/p-[ (:cUz! F#5fg2 $ f ;ާ.6Gr\̦\EJkT;ϰx ]j%wu=^2a!#j5~qхkdsC|.^q@qO`esԥL~]`o XE+IhW&^vv㡁D6HEf'OFZo J:mB?2,^NpUHxHdbjP o= DLH48#3vF<Xnx!S*)Xt5 UDqP_Mw4ȥe'}# qto)ᷳ ĊG8|G,LNԓfpĬmдHSo,AI@ pUyDdZP2L*jK)p=+mZ&WSF 3Yѵ+{=60]&Wm7)it͈95NP--JPiKWDռgG L}*Vrbe,%f;]LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUU"1JGu c)ih V:Q{ޙx~uQKcrw065@[:"U!Oe)4gMi23d/iVkL{ QYM04aKG 6ʤoP#u5:A0HdfDhg/gضyE'@ᆮ Hꇌ0ɂLT00!RDmd*f?K RfH0(KOӋ)# 늒;쬎EUrqw "F#L6aY  X׭'=KNy,G6IU r,a-ohqzM8u;ֽWK|. SGsLAME3.100UUUUUUUU3"d4 `!(K+6rd0~k.ii,_ό5nKR^/=Hd?ER"NĥmuIi$rmGϵ6:<W 4GdL+IR Nͽ+4gZ,()&iǜM3796Fԑ9Np8ZW`KrgS3ѽ~wG`&XP6"3D<, \5a *Am'2$Y,jE`騆>2ؔh<$F[v$1jw>G9kZ](tqD֩zCѺu-BO~hϴ}[CŰH)A֓Qz>uP 4`wF$dh*LAM*s xb88 8SVJ@́ ۺpE3%|=d 09;RS:ڶդ!<| &Y! V^ѡ%CE7B)(8X0Jf`A!D(u ," 㤜 "gL^1_D .0k1kNPu* -p:ҲYde3l5r %D0(h`!I Qp0 b@ jD*7M4( HE{d.e4{9͟|G 6)J[zw qv&w9L,j||zh&Ί}v],bGtzo/RgSe5Ŗd.?l B`$3Q /9@x >5"+ Yj BAU4,5G $!xdԏo CT5`RƟTצ_W|[j V/[VCP)DfYEdfז n>t43ĂqBȯ`Vg .vm} QPr$T| 0i(PDM! pdd\W*m-[r %X(\F4 }П۬*ZdHhcp ]< 4;և9VbS A5p)ߐ/ :%X6a"r|\,٬7ˎ\ӎ-oy,w ULzoU@Kw4t aRX0R(* !i;;;0nVq|j/|Py&{v@W3?Ӻyb:۫o BoW'VC+/H|tɫ5Z~QCnm{te;F6:6PTpiL,L`XP 55B %he`@:w"!]9X6"rMzu\>x{w9ϠMj/NEz(e_V>ڠ*djOx[t OL4%q՛VF"[#K,}Q"b1{Jw,Gv׷}$55hυ20 C EFI.Z ` $`6Z ;Oe i BSl\VLHG-a;,^/.`nb=s]n-RY%hhp{(m{lP &X:0K X !Nkc*˄Ȍ  @g Lʅ$b"kӉqb޲k{zS}d ~(2(2* YI%#!J]Td'ϋ Z3US( cCNbdgϋOV4 Ba4I2sTNc11Irg{ HXh$h@xG7? =ReY^ڣ*|fҋȝ~m+ Zafn꾹Z sӃm LF]q[h;q,`E&h(K<`eca1hY)K"$Dy9O0We TvPʺ$z&q"6WWd.+$!Q1%h#88sJ3IRi%E:fȌ/OȷPi`EZ*O0u`iʅAZY~Yk!+e&L+ 8ZtaFDM:SPh-etp9Rz%duhӳOcr Q#R H4L躄M4y2r PvL>h\ o [eGlJ-q@w!б|NŊTU:.u64fC,g0[#\چ3.UR*S$NWD;j\EVwO!iaFOZ>1 p"H*A8")OBRՉ(/?T!j8.+0 "iq 4 &2D+ 3 EYbmHbj!  Cg㚉%SZ3S11ztvcXu)֤V_Dd jQo4 F=4$jW qǀ]3JSSpg~VfTqQΚxtP`hh}_)a2 ΋[pRq ^tUH2Ǫ3&dRM=LL kdgPoM I@ͽ74P?J x$縷9'iCK5%_V퐖 B:knX樼Gkr}R`ʕw_ֆ|ID..#0&,X^hX)LyxڝW7&4JI ,(vTjLUP:$JOZ3Nepuvb{{5'ZJ2m3Db,1 FE*2Z`KaMx#2^6Tә{ŇgB]f x.""_{J^ڌMddh;i7 D64_Ш8xfҜ7vzd<'~LS,Ǹr;sƞ9T5"pE3ԣ/kժt) S[6ym%L M4Pa T'y*W0i"H lh/+{NM  .۰+Nt)5gID4fguZIT-{Tl,c5HĪ\ɁǛ.,8?yI9GT3Wdmxy7ċqSٌ8jz~k U@HQlёPf FfS)Sdqhbu` B`0HeY.fNf=f@!  ]BQ-YdhLO0 >mo4m@< & @(cTa]P 2N}/pd 0LBaq[}r}u @$Ѝd"h,p(%^KvJ48줰(yZKA{T Y{E[H(Y9()Gpp (J|*&ZP5gyN%"&Ёܮg kg4xV:˅ %<ĦTĶʰr?jXJ%u)cO'-hj0>*@P&*B N 2㥔7-1(]l$YM0 Hf, :m_oUJȍIXH)a6$P>b:ӏHYƒGfd:hSH JM74Z3̿nDY}"c-K?>z1^ :) MjA&CNjD D3Ǭ⪒/O,?5Lx 10yt]R;D)kjxx:dEG]Ix\wGG_]w*!2"s12ؘP %Fp@A)2C^Fx“0i}"7"5 ktvaѝW eĈLki]h>,q^=Xih@:<$1dsQVCI L 4'#VI0D(,)+$nur1$lPh Ű #R ~+&qo+^k0sdĜɢQeY\6%CW1Yir#Q[0I)j%֝lyFRlID"̤Ғ]ű<.Nr:H9HFPt R6' S%֔-d>~ۤ^ jLAME3.100#$dRb#GXiuBW~K1 -4:F&Dfκe[QIO&A'djCl5 mJ-4X Z5 '4{4ʳgrG KBs?NUF]4RRH2y(>@-$MDԥ FzƇ\ WAO3ojgFӲ,Z">0[ez#VJ~䌌|zuO+Q禄ʪѪ'.{'uC ͈. F$3`B/``Ĉ$#$`יKuBT@bKu4P Oh-5.SOU:R(%*69cqHEIf)*EBc`u^DcہzBYY|dgUL5 M-0@4ڇ2XV*‰aHU\D49%ܜvU*jd" )2QF1&9(xs (D(lx&[@ىB 34x%pDK ELP FF(WiMߌ5k76` ʵEZe2eN> ҹm{EL7յQ-j| aTALJFfTHUfz!@ѽ  ~5ݢx6CJnJC$d-S:1+K3#=,3V\>'ZS-aƼ fMdd,*bB!A"1\dFPǁdQr# [uɋ[f7s+Z"#,`5)ʊ5ض$2`E3fDmwDsATdDiQoLb mKM164\k wbf%ԲapAAz;}TWE$gQ%mpƆ:a^\ 7`0㑑$N[ȓn27۳U֎4*)9 ^>!G^#F\ HlJXI4zxn]rCRe)'!L} Y~e30DA Lb[E9f\sIL: !)eRWT@u4 1rΝݖ$ ̡<#Ivv2hfP!? @@dhI| P4+!b Z!P?Sעn-/Txէܒ^eLŔ)*j,> H}1@&8$NJuL6/JhFJj%@uhF X NoèBQNqNLxZ,6rh9) d+kуl6` MF4}'ȴ,T,ˆI^䚡RQ0#.F&ϓ=L^MfQ@Q|ӝ/L0ZުQ3 b6Sj(BM)&Jy ֯ `PPY0DP#`JjP1rjfM"CDJ"P J9;/?Uƚsm\n -Y 4wn9S: 6(/D՘:o NdZbG.K1k*x:|+7X%>*8+0!Go  M08)zT^3./ҎHRYg }RAGwBwO$iRԛקd*~!%dgN2 qG H4) ,Bplh2UWQ֊fxA,ۄ4D¬ǵ REU/}^^P&ۢޙ{wк HK,ŀA0n J:0)7"KBi1QE ,BBB1«C CM9?oUYv}0eC'vPtNky}zQj]-KmHkbq-.eZzieGV/ˢ:Z%4%z?$l%vj3#+qDA6.`(  z1a3E @LU=/ am5 ג1'>pFNۼϊ'q@ZaIJQd!jPl7" IGM4-+p r] Զ'f3e4IxT>Pnf"5)N g]-=xQPJaZP_!ĉR2+f*(`DG@%p@EtX@¤E 5+<@+V$A1ŀ}>m`:Oη 'VJuV64BO37tY4;΍p͙sXiyV7sO e&My>@zuğ88"l5=l+>Wji^:j̢!IS'&3IjaTɤ`(@EJFK;L<)H9$!eM}SJPhRMͨ}]Z{c(mG KGqF`Z|!8OeC~Ud]jOoF ]C,x4 D@; Y-yJ 3{X,.<+,tItRFXGh~L6#e{Rg;P#1^̌ɧZC6 UP(\ȀʫWcZ)3 ŁE6:$h-kԂ* 'LH@!h ܘsQP~4V8cHe[ )$M$3;`J,zȃ#pv~y`j{\% _\%Mʙ<'<[YU緑1͹Uˠ;dپo7B[[nU [(j*t-kMeh24m\ AԊ6ўEqN7a(lMR*S($poݻdhгX[p :-<4"v}O}d3Hu&<.kW\ۄiC,;rB}M ọu I8ϝYYlO qڀX?ړ@HU5ЉJcK <:^(}) 8Q#BIqu#m9 ǥs40wn0{J\W.< 778v; 2gpB'=.5]\<_k 60 P9w`0{%3pAhnme9HD(  Q#+ 0|57PsQQ],vbj8Eׄt8b+Kh6%*9b{&|xJ tdv'{ UÎBwOOW4d`gKLN2 F H45 q< Ϗ7h?xJY*~sYXf{L筀`a#V'BVAcA5!)EzEr*DžLH$P%'T027*A\ёr{lfV;r,{j--xbqRCFAĒiDBh8wqMu@0X"$ϫd龇[47iޝz2$`۹ڋʺ.w>M]rS%K6^ 0s U0Djӈ)%BK#e2NQ@:C;Ll ICp@h얰DZqw G1.td˃tWFg !V'O%~O]T."armLL@%!qZCErQnH[TA]%K9:jrY):w) 5 -f%'KB8E;3 0oĕDC\qGb̹ѣ`A#űMrB)@M2xW"!qE''yKW:Tæi9d@N")_"8txB:EdJhPoFB E,54* VDh>[(OӃТA?ܱǍC`#ݓjݗ#elVV/neΥ:MlX*GJVe&+$Q*D2kH-豋1B,1T@PC4S.yjgRY)t t~t8ư󨑨܉E? oUV+(Â-e| + q)z Pīo Cե)W)b{}V&N@3r AY2%ɊUŁ&"YM) ]3hxIĂ>[l QT4 A@$@٤Eɵ3}HDqJavo&k;db΃Of"  Ḇ<4.s. ,0AYye3je*,2\"!rL~DxCy(HE;Էfbs5ؿJPpBJ34`21-$dߕ2PJc6*# T}D[EL?3'S"OVND*ۂ83}M4k1*Ge>"}Ghy5unIB C҇2|QG3p 0`k5dfP/eB <-=x4Ճ׬C2=Unkjєq=-DL 䈘-p5(iLeŒA3Yީi&Vq=-5i普5>!L0 4w-r[2! vIYgMe!R:# i3#͞C,uTBfx+6%K^yr)&āގo/?d]U+l2 ɑJ 4bvgЕ[g= F&"0Z«QCHA$v]2U`sz/i_*P FpST|`SZH/PuviԒǥ%$eۆp|=}wK|_cNiԔuqksxr"tT33'W0uMLhP92[ILg(ES%rЮ|kvv3TQ rjĤ ώYqPf0!dlRl6 F1{Ge'B/OI"IKկy*А QҠ0 QXXLF" Ivm\EۚюDUlźCVP¤K#JWÇq9+2omSfQQȍ/1XAMd:VC Әh4mXdZ-z0N$ևWJGC1ߟq2Ju"+vhxE5ӻ) -぀b@QfԬh]Ͽ "#D'2y /<#N>5YLŇazF^0a{ʼnpHqdfRc6B B.=84ΗM=F\>Y⬀)f`4(FDd 0Q7h$HDVPA:IR:޿HPV $0M0q'!'a6j35\dc'Ds{;UhFTG}@H(0$LBXT[A`jOTsuoISRjJŽQfɖ"paRդnk!U㺨 'AhRt R9#D6@@JCF bKNKHH6(yk(PZ $&ڝ- &YۂgYi՗\L/#Bx.՞gYLdfCl6B @M84"8j52€~VIYfea ™I Xrlyd|b1B3j)<$G[I)aH\hk8Y!~U f/,( ;@Vly5VcHGGFcxT#[f dJr X"@7^ CF$JS1~:v Fyڄvz#NSp,M7ǩDvG }Wg_m\,P /˧NKgiW8kg{ PvE<4/TQM[1|aZ0ACCEMU8 ~<)*4U` 1\pƣ"h֋bU+0fT; 4&|.J女?OyDdgS N2 -:-=94(X޻=3|4C2Om_#v.H5A5I{En[OsjUSឺh.vg՝V=i䲡fQ]f>NFjH b%B.daƂhs1JED]nbѰ 9f2n4̘@@ED<(<*PMmp]%i&аCkSDFkg$9xFĞXizĆϕAl0VC»~s4Mhʾ1>l!j(}2L qw T"s"#LF rLIFBPÅ&buqF@5V),4$"5tx%z`dfOO>P O`;OZ CdtHjK$ EW(HմYsvKGQ?%Ywbx2eӲm9,0!ND=.Iv~%yZ1@Q&k@nvW1Eޞ>g WZ-.1lj49Y]LUٔ,rP/Jj$i#dhӳxx SS $4ģ{BVW.2 II-TZ$I8 ʅz>$էLJײq"kܙfۥJ0!GuBQx phP2lkx;Y] xt8ql " 16å>O8+RFNXI'*pLu%&|8R_5U;tu^d4 ( 43P2b JISӉ&k ܘ֊Zs8E xYʇ8LɷVɨ50\D8I]+`A@%9kdX@t~Wsq$ L 8|MJ[YdZhU%v}Jy+D!"-B|nSSd^USO4 5H=5H4;ȍ:,r>/%⓮AMՙV\q,IRlndž&7`UΧȚAIڜ"ҟSjnk6o/3n2VL<$@4 aa8(HY3 oD%W|3vCTd+M?35"8.4yTf=c]O܎ͧpfĬ d5C*-H]}pk@aGnmDy C G%mʗOzFlw5R/*PPǰx^`:GB sh׸aj}UHh\2qns:@+9yCs0li0ZT1Hz0&:8q. dlR6 yF܈4B9ҌU86D?ҧHMgM8k &qxHj-,jΈ)ex$rj&v4@$5DH(`!_ EHVɕ#0Dr A? -^16CO^YCajbI+S؀]*E<XFWUVtL@,JT,)hK8 NwINMK!g+Aۺ DJɡj/w,qחCnӎ/pSUz.r{S>b<&gc2 YNG6PifHrebliELAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@InG ZZiI)BN^ ޠlPՔu_d/T@n_>Ezv>iW1dhг/^ B̼4vAZ{*pr.|:L6J]+@jL =J-LZQ!biW2HdJZ+Ma,fJ?quzYB%d3x,7C<,۔LAMEPJ,*B0 JmQ.pa#-:-B8DZ28#ģu=316ճjFyFrZ3r_Xwub1 0zb8LG*juN.dfk >@ @,|4[ӡ9k7%~gwUBM~G!Fqas:'&bBE#  DY0-((b!P)yđ=*"l !6`8euGghX,emz +ʕzi}(&M@9L֛\yYjXKbh`3*k_"l(8HXfG;٪=z,e u|ړ,D[Q ~_S[Cu$ D) 4@p hGTbIXIql6uEVTTtEmHiV f*E 8D=WאqUr_4ڥ(̀_ Dǎؑz(QMd#hQE 8WH4 uY2pelyt:w涏7 G"LAME3.100UUUUUUUUUUUUVi:f2ж#IW JJ3vDR.&Rj//BGF^D ݨ\w.D)=ђ  x9y Qd&dj/V@ : aX4RޮS]@ՉR|-ܻS;pgpr[:On2u6H{|6`n>'-ˬZLJHBThTT:fZ p#jXq Q^.T G)R#'J̓i$@W'CA-_Ȇ]}nUv~m LDGTz?J-%6MgyA؀q pWh+ cG1S$\"q0+7h%TZ.O4OW5ơnݺ6zPnK]TOv)c&&&\]<}v[c }y(?#)"-*2u5dl /> IY4V%L2N,XQ1t&LՁ !ˉ28V/%d]@DS DP 0 ; =z4lUTΔQ|SkRAr%#}"|%9J\j0eULJv:i[ nx˫i,(1D.v=ei^Ua7}4%(@rtP}v;^$3s.!X4`W;eģBt~I48d2DZZɺYVX&`M(Ir!S÷sKžc\Nlg8oZW۷*LAMED0%(c̳fepJR:zl T8^Mphnq9 `%^*ȝ|0ֹړx enj$B3tgg,4C[pRk%dl+O> 1> Z4BuvOK7(nͿoMlXq$k@ IPʌ"fQ NEjIJ\bڿ+~TA:LB 8@XDJ3S2j(Rl)q cߐۉ1mU E<tnM%URS{G !rIf[µW`mV_H`Ȕ k#[ѹ _ 2T`躸xLש#0 ұ}5nEț3*J48Tz*fmQ ,@:8l L13m8K <FA q2/joYZ NJVmވ)/~YwRR2VHU۽^i5dl+OV >Z4l_YxÖ%~ P*IušK?)J9n4rܖml2)QLY-:Z/"ؿL8Bԓt&b?e48XcN9eXsnbIrE 0E[ J,Wʠt*dk54{d 3*nyE䐋JG).~mY %sZ!emS4EҶvYvV2Gnr~CGc䟟~J?;1^477'>F̾WbsX# h \ fsڥ5L&L. c蹕 mᳰIs#“2ʺ)`\> )LsMmda΃Ydr c< =<4BV+QxPb[xw'<|4*sb UrEWu]٣=RH?/蜽B/)<~l]]?is)|13 td-.ûK"+N0(s4L8]Sh0A-X#;5w oFR 0cxF*L<}­DO0)1>ad+kY8G5J^`T"j--c gܡKWViX>,6Ou0#Ve3*HʓjK}BΤI/nY9\7@jF@EX5`DT$*%*eHKd&-` t) F$쥝‰F(>ddgK/^ 8 Y4#5*EbMp02b7ѵTDm @ʑ }l@:tG(>##?eeEhzKrɉM?㏫hF"$!R%HD(9 9  ;h ֚jCҡ8舺@dD܌{E6HEG^PU$5Rq]ڲ B&BZAG{֑ss2_)k)IH/yGmƔdo7 k?ÉO}:jb=qKP8΢"MI7FeIxuV R&,MtI2XAZB0b0ArfbI aTCd`jVȹ)qɘ `\üɆae[Rb&Mȴd:e+/>4 m; =YH4]6j]_aIT`p,OZqw?lc >\T)'2#N8T:07>1.th4ndB}͓<-I= CK,(S|kޟaz0y1z]ȮQx%JQ[]eK1u*=[ӊ3[b- )Bp%34Hr1ͻ@,4$rZi=wL*DQ 氩c@Y}BJg?⽾D_:K=rb_֤>+N62rQ\GN . `-nPn 3h\G28˃$\sLe@0Sɇt&Z(X83`9VPrCT 4CV9BO"'LyAZa0Ev_)\4f-| djO/>@ iC,Y4Dmnj='O_Qn" _޳‹m+yJ]kq"ˆi z\bLPE<>E36iЀ$Cؿt~?N 2xh1"(xCRN)ZjeL9VU Y6KT6{I!VYrWV>Sz_On3R:5t]>f/&D@q"9. ',BVw8d!@Kw-9~Q3뇎2s,~؂Z̐3u *@$u,@IA(ר}6'=NSu\' GYIAw-,==ڄgw3c} [{pWdsiΫOW GY4$Pa_O^pӵ˲KB]-\{T煩u)P!H =dll"7{YOL_zɪ,M/'zoހMBZʛ D1t4IaF !`?k-%GpFzdʔlE*34"O (*pPB]tܹ4 瓝[^ 7֋+CzZ>Q+[a"6{.1je]Qj2wR)%}:?-R5S $G@LV!ds pA$`$.`ɦ8|ȯ e${F3)|qd\AXv}dyjΫXn2 >-=Z4`~֧XM+ 5\*[t{dJ#Q!,5[KW liSQ%$3# ga gcS?"Y9#q}cͲӹ4b0I,t1I#0qK]-<j+ى#`'R,qJ2vhE MmRuHDW:[vX#|r$f:䁰oGfmEȗ6e0exdIj+Ylr 9kD 4ZA7ڤɲ1.y߅"qu(nZ(ӫ_Dy+dVŞί{ED ФŌRdV^K 5 ]KL194*2=!0{]jd#?g aAE=-ȥD7lB2?㍡[^C(7P‘$#Ct9' ̨H @~2 5=K" eBco,)@ >x40Xd1Gˌj %FL;'R=޳ bǭq|ܜʺCp` BiCi;U AdW~8-,y„AT%tΩ*l%)2{`co{-g MfQp3cGH'>FjY w'.V>6IFH.΢ RoMxVʦ֘#ӕ3yωLAM@Lz wCʋw[ *d|H,2R'Z_.k'q"K!k D/V@4iNK,_37AhWҏyEU!qj pT6k\%S1oɗeSdi+:mP y< <4qO hj\OZe)u4NcȚ !5unNŶKFܙsRݽqU{Li(I*pvJ4=LF@Uf*-KK+B4Zxs(#%m(դ'X5:%]"-05w`e0u}a]' 6C[B {6neUWЇkrfHX]j27ÿ0#g9q&:9n~14B_*LAME3.100 2J.X6 I?8d 0R 0s5X@1J$$1oT˟(<)5/B\, Yv̇PWdlϫ/V0 M< <4"qGn5*'ܾMΨpj|Vz!Ȓ8[@,;}mpUdSPqb$) ,4F!TD)cÆ;$&m×S9qf4^.r9jϨe 0 ysCJy0)(1!H*<~66B!XooVïQӵب?jggFti ;e -,K<[^8P 2@$YA%I! wGLgG1DYwSIwr"٘%8¥{Pb]D@]cuw <4ȉKsմ9ꓓ]וqԶp 2̧Fm@0rf\c#cc0tc"(|][fGZO)vY9\MV(2[30HMy?XF!%ׯYTeEVzQKFA2|#)%z:&7.rRz ZވP~7'}eRސ,w5ͬe28I.mr\X1z \}+[)F)'B V>2 @AY (FH2d l XCj0RjF_!,Bu^S !&ob<].㯽ĩ WQزl daг/>0 ŇF0{4o#슋ŏ ()e Θ]$jgC) ϫca K^SXGQc' ͎|fb0sT0!m& \b@ %EdGgJ<{O%  N/LTh6SJLƜO]t AҵONgJFZYY aǝ-JG{tg(&sgkDA Ys18g>/5-cDpREʶ]44.X Cz X2QS`a0J6^(JAzp02[<dYDX!UÇ̾€7g F2lAnhG fdngл/e A-=Y4@#Em͇ER8Z9a0LaXB}CDWly(y /s& 羾ӛq>i*yk5>Sg+BZ B١/!hʝױ$ . IlQyz. PYBk:Gяգ"8gQ`:9kdeuCiQk A =J@ZViQ_~Le @ $, (EqO@6d(ZQc6,FȞ024)lw/*G zl#HmKYט jhju$>dj+O? ͙A 4/*Ivǐ,jxW:Sԙ"}=d虡tK6u7B'B\OZIhZ4n[Aо鉋H$TcKl @I<i؀6. ddɨL5q_F>]p$ yխ_B"iI.$$V.3+ ǗmiO͝aq}ljpP*ǣ}Πּz:5RGsg1Vη6wW"-z+mzD \ .t[" NeY@qXUgh$\EJܞJ(C\ziL'i"P[3YMQ3o}6r5qG?ym.6+H",| d`LWDVPZ7Q_B@@2F#Z 4<d%Y (xPpцd,M(i[ %@(v#8' W68[l C݄ qmlD9j9+vK %d[jOCO^ AGL4rl*Y~[" nUt4 ~NVSu9(:k0ngQ#WHN3dէ_)º4g幜sK#<(y T*ڵ!(j4U9k,y* G"x0qv 0xĖVjTp"i` s>[*I"EVR[Tߟ=Ma ,PL:"A+&H|`XPM%0L͠CIhTU:IE#G= JDu\i{w!3IZVnwnlN {45yj}璉mP#n*=3^ mוּ5hJ$^ ` 8(q&N>x]zr^/^oQJ0B )jK҇(g1 VJ h$Dx7Er.|M-ADYL B):L:Xd(dbjPKOnP E< =Z4TW16[hwjߠg+%"=#zƉZv$qc_j8! =Xi:XTLTg*A-C  "&Wvvd)-A iŚ1b&<QOz0Z-"&`\YMI_k}qkwCk{J7–bt+GN8>+SrEHmUu Kzbb  徯J"W|-MnU@!I %F$(г1nJ- `-̡LW() 2XWxVd< }7lk(?"h2da[ A-=y@4ΟW*SaUj tKU@?aU9e0nPQ? )?S'\1e~@>uwJ2gc;>?bNs]p)ș *C \ a P@0X $lɐ H dB;B 6۾29?%K1fPn2!dgV@ :eYP4r3QM(74#p.k_DQ#1ZǍXXM&UٟzHRQ+I2g@֑ P}G(~ER]HfHqbȭ'[vC8B h=,({j*eK HR۲gph̅ 5Ju|Qa1H?_E F$RЧֱ"Xn4Y;T978(d6t_BflZpӏy,0|Xfpɕ$D/G/ʗjElC@ 0C&h΍* X$ؤ\xaP-R2U ҉N +&lG,&dl+OW ݧ= =[4Sh/Ps 9 |aqf *MHJ/ G߼g֢8nļ5"tL"-ʷQGT_ƾ <~H;оEPF\ V$C,{(4K:E[veWsɐ ś ҭ(T -az6Ib|wRgg?˿W%XbPgYݩu$f@j(^ cAW*˕o<)z 8(⇈zQ: F7e3p'% CT]&@6b3TDD8ɂ- 4YaSS>6eP]djOYT B4G9mfToѽvQ'Zw lrl>կr^x8}qlDuZS΋ 6 0̫BnMvv"& Mlw, N3SiFr0u I H0DwD"0+V y 2P$ɔNc*D*nA>wQa}f3JNCH! Xy^;ԍ VI6-v$l,RJK]P_8&P's1zԧ-J])R(R3I,XC#9H 2Xd$ہb†@H(8V-;faL( K[`MγdmNXn 1? Z4XqT*j! BhZQӓ؏+CH?'e,.PL^6W<۫YnL}X.n#DeH=\4dĈ{UHh2ο_.}[M3ԆUkj+7u,Q+DaͭJ mEu-=^JUƄ;>0,Xb&\D11B>bVQ0dzpe + u( ݛ!s!V {S>4B=1L =,A=ۢo,n=1ƫP%gaJ[ohbQ[Qw:kk꭯u#~^_J78ZJŚlTos·YgyJ3:&/{\䪵!`gEP$È%$5exN@( X,xb$Ȕe Mpʙ2_v< /#^CԸkf@Ư.X:p) dsb!_,:0C"Hȱ-68(*j052B0,\q1ooO#O2ƀ,Q0RACVSla26fnXѢ! [P2H8g8C8"*DÇO!zKDYZj^Rf䬌*ԔT@ ;S ˜sT*_! #?W\ѢC͜)'.'RÝabmɱXМN塥Ds; )m0kC,!g"'רz$F=WX , xP Druq0a5c ٳ: =@4 .B檡 (L߶W==l|B%"oǧDL VW.}1ICbNȂdR *e 64UA |RO`Z$׌H 2e\n,26Ɋ0@<갅b (-*B,hKMj>M-'hRdlYT -> =Z49@"Hd!+/ skgϘT)4lM/ _6Y賭g ]!{Nm _LJ~OMfA D@p `b2JeìyTH14#T$$6q Y* l @,$ӿ&wCY,5MHSXH`Yu/x`*B"8] gc3FX: 6dtl6J RILO=s@D^`GPcHdӿv@sU~KAdmO/> ><4共dVRJrQQxYi\opz =\4=wbFIsv5*)= ?#-9T|A]@jBJnIBFH-c $nܣ%]֭X jb.+\oYi+'dPHp>X]蔟>~DE tL,RsqCX5S %RM9R%Cd:'O`*ʀ r`A&.@ % M ,?Z '۰ dL |,.X-CJb2ܳ.n-9qc~WMe+zGڽBR N=ڄ_z5 dlP+/W Q$y4tڛOFE. inOe#`HluXdC<3pH0@)Z[D,`+1vh^+.NW ]?+kE,A&A̾b{?v*9bE(6d^h38cr = <4yf oZypȑʣn~/d9B˽ (=j\)>Tm^gV!ZmU' $'AJФת<کQ]#:R̯*;y-Vhn]`{/*@]P`-2Hw1D-ӌ0G($5+ w$ L\F50BCV@Kt*,P 2<Ā):h7ܧdl+yn@ 5B4O{c劉`0,=*A{E@_^a49XL\7ysv}۱W5 EidT.sP:L=#qd:oyRVrF];,^vbtEfpL Y}$-%5O D4A580"i: .8B}W6VR]tњE_Gm2[(EDefP/BZ;\ka*F<Aquox>1ta :R1*F :nqeԿz;qV}@$<sF0 kY7#PxDZ PL /M:8EJrݢ@d wdlNXn %> =Z4\r4(fL#W<ف+X["߹_z^h^".+qpdIK:̌MKl/dwRl%񯏛vuJRbz !ؘɨ.^fRWЯ@ |ʕg)·6ɚe(qs}"J-ok'AL@w3i!vt\C:rdIc2C̵"!Lg)ZfK69%s{?Glz^qLb'>]\:.#/3^u:Zuՠ\&I3 Q@bSp+1U%ĪJF oJ!BK`d*ET2!*7U+´YQ.<kL*ldlϫ/V )< =4 \* ?(=\4{j &S)ipJ\l+N:`Q}}˱_W,p1pwtI4WU Gd&(;I@p[AԨB3g+xcI8q@ekP!C%$`C*JoCQ ;`0lBT#,WY^D$ZgqE@kz+T&⌜-+Oo6njy,lCBVRqmW틷WwdYe>/&= $[kjMR@(1PBH=Y`R1(%,T˫q hjb4+D28+bCD8mH\"CT ZdR">dlO/W" ><4%  ?,A8v|[8D1eiX 0"^Ğs8I[}iTG5j.;Be/cX.ac量QޢǥdK6qn#3$C Lb/J8Tȣb!IN^WYrtxk0|GKmY Dٖ)H<x$c84WuaB ݮҺujL'fn0g}"篹= G%;TBY5wFƆHpl?AWͦoۉ$n#B #TEW'Ȑj8UA W"=rdQ?@pD!HWͬc:dċ"[Arc-ءI"d mOOW 9> =\4c.D-0: :mYŁbL5 Q0)%I>?N׹+\E{(Ժ*U7y\L^qAwC@!(j*h ׵T1i"ARA&Z^K@] fG Fw4 x/ 7e-5z I^̳d%7c HZ#u5t׋ ŀI30WnXNEfUL'dEgRK/DP De445n8jswg)]_# X/PL)7ڛplkWdαk^G3 bj0Ÿ*6L*O'q4 `My8A TU hp,dkf:H1$Y X wńY@RLjH4B qŇϙbPÓTwAX+Vn[eq 6L&MΟoa (Xkw: gZ]:-}%K a~ʒt-#74mЕ*/ШeDA̸p.0Ĉ8S =ꚙ6 rD C#c!'CUY$A2I%Pd1lO> %:=^4UN K 8Q4yYPn_DiL\iDå[ Gf-DQ8w }_507!dlOOn Y> =Z4&f(KK wc♑l@+\Îo* ؗ}OXlhKШ^҂Mnb^Mmy/ۇ?(ZBtVA [ vxf (0;902iJ$3P9*a 2P:J"-2C֢tf%Bb[w-=O]GO|ь>S 2GѢ~9/OGY1) ^A#z$抩bTKh!6^E=//JQRRP@|@Q>&D`12<بBo5XaGF oɅ)MxBEQ$c/#ϚȶEgdlO/W" 9<=4. UneecoYx=n..$:uåB'v|T]h(~ לl ͅ#T^[k$H/yF\ 'T+,blm)fp90\pDiLiQ25js!hXWg !=l*mf5N&b3Xd}eErO5$GS4Vo@.ǒ촆fUDAU#t2P㺢c&9GK:ejC=ʨ@ JdB@Ƽ`1D~%^V.en(-%Rݶ4F( DDRe 2 -dlOOV ]>a4ޚN2r ^bA ǚce/~׆L]qo#y= *,}DQ*x.60[?t&0<$ɫL IRA*UH?"ٙBxʱ! (CMVYI`j˒DLMcR%k,Qeސ= nќ3Rc ,m#3dž"'tlMOq{ bi|+A7h 1OIkQ #=Cz^g:@`xPæ*M1da CXى (J@xG2q@ _\-bD;@ p '#OF AdlOO?" M><48@;%crl<\QfC N @Hր (r)nE]1t-MLfL>G;QvQnOv*L}z48jFdrdYe gXPA SFxPEd!$pp2] 61 BogD` )aHR-0fs7زXUdȹH+ԙ!gxusrxʙ4#C()T}D$U22VFIڌMQXlT| e#Eh7: tVBӈ,ye̩QEHlfujLAME3.100dvmP-j` Jٙ42QR5Tr$.]BJBr_r0R l93j \7 꾪l[7ʯ"DON**v (;:TP4h6 LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUduABDFHKOQSUY[]_ceginprtxz|~Lavc57.10$@B^PXd;#0 Y40} `>!A@>h $,`"x4(1>;Lsb!䆠"hԓ&Gk P[g'/d*W\-/+zI[4'[fh87Ƶӌf,!*lvI\[Yq z G?lEmZwLÚI0R f&a˹eIjKsK @D 0XhxAQ-IJ ]Vb⢮d `Vi _XUH4#lJFAbŊMSwKSj|\F4w|Rcw, F+2t[k0Rz\k՞KRµCҰ47F%u+`vΔ.Hb ;g!{j[wv$"x)-ZE~x^O8\FLT)T9b|ĥG> [!hR2 UJo9=Q8בe5-vBӟh fpCbCu&0jfJut;QJlu,`d@Pd ]RE E~+’ÃtQXesʹ~@D7QrdcB) mT-45B)]?ٵ1b[Nfвb̨$äRޅEi kWAyV2e+ N {͐ 1i^+WUTuhpz%Pp`D?ۥmCKhYufY-rRrx sk)rCoxõK\^[F:ϯU-wK/yxO=&*r%% -eF}Cm FA5{f[u&h`[r_;~wws_bJLAME3.100NJN< ^q!XK8in0%$arاTg‰EH J_Lvd AԳOB @X̰4k'YIO7S~`ܾRAH:N37y WMskZNgƐmCx/-x )ַPAl+ !/rniE' aqjdo}ިxäq5!ai&`8yrDfs%<\[BR {V$P  (EiPBQ #X;4d&dX*kC,g(5Ҕ-yb#Vr͵=JpiRc>LAME3.100aހMP0 ƒȬh"JQ#0$2&EYC_Z0JhՔ ):Ȋ MǵOmKOV܊xkm*R9$"dvERl5 I-@4(ʺcSW\Cl'$wu]TUCxwu9z ȸщ0[0дrx&8 I rq-V8@JQP\иY82k veD7i8+iL_}V} 8B8d2K94O/MJ&d3[D>Q}ǟULAME3.100UUUs l@4D*@a@"DX PPhj ۨ!L#8bR/!u`P B7ULقE$'PӊE,,Ckz!ziYb:VKQdgP l7 @ ^4ΖEMOoŪz]E%7K:# KM_߿(Nnq X`.3BbF% *+f\oJkY'2L`ALtXi (u{_d 2/ 3*ۡ]] 9dI2,(yo IN ʱ҃@x+ \E?4dtʰ_=VحBdgPoE 1<ao4=9uQ\+DC I*> ˼t(O*YqE/:㲲XX͗V^~ZF0aAB'04c#ML,h/p-[ (:cUz! F#5fg2 $ f ;ާ.6Gr\̦\EJkT;ϰx ]j%wu=^2a!#j5~qхkdsC|.^q@qO`esԥL~]`o XE+IhW&^vv㡁D6HEf'OFZo J:mB?2,^NpUHxHdbjP o= DLH48#3vF<Xnx!S*)Xt5 UDqP_Mw4ȥe'}# qto)ᷳ ĊG8|G,LNԓfpĬmдHSo,AI@ pUyDdZP2L*jK)p=+mZ&WSF 3Yѵ+{=60]&Wm7)it͈95NP--JPiKWDռgG L}*Vrbe,%f;]LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUU"1JGu c)ih V:Q{ޙx~uQKcrw065@[:"U!Oe)4gMi23d/iVkL{ QYM04aKG 6ʤoP#u5:A0HdfDhg/gضyE'@ᆮ Hꇌ0ɂLT00!RDmd*f?K RfH0(KOӋ)# 늒;쬎EUrqw "F#L6aY  X׭'=KNy,G6IU r,a-ohqzM8u;ֽWK|. SGsLAME3.100UUUUUUUU3"d4 `!(K+6rd0~k.ii,_ό5nKR^/=Hd?ER"NĥmuIi$rmGϵ6:<W 4GdL+IR Nͽ+4gZ,()&iǜM3796Fԑ9Np8ZW`KrgS3ѽ~wG`&XP6"3D<, \5a *Am'2$Y,jE`騆>2ؔh<$F[v$1jw>G9kZ](tqD֩zCѺu-BO~hϴ}[CŰH)A֓Qz>uP 4`wF$dh*LAM*s xb88 8SVJ@́ ۺpE3%|=d 09;RS:ڶդ!<| &Y! V^ѡ%CE7B)(8X0Jf`A!D(u ," 㤜 "gL^1_D .0k1kNPu* -p:ҲYde3l5r %D0(h`!I Qp0 b@ jD*7M4( HE{d.e4{9͟|G 6)J[zw qv&w9L,j||zh&Ί}v],bGtzo/RgSe5Ŗd.?l B`$3Q /9@x >5"+ Yj BAU4,5G $!xdԏo CT5`RƟTצ_W|[j V/[VCP)DfYEdfז n>t43ĂqBȯ`Vg .vm} QPr$T| 0i(PDM! pdd\W*m-[r %X(\F4 }П۬*ZdHhcp ]< 4;և9VbS A5p)ߐ/ :%X6a"r|\,٬7ˎ\ӎ-oy,w ULzoU@Kw4t aRX0R(* !i;;;0nVq|j/|Py&{v@W3?Ӻyb:۫o BoW'VC+/H|tɫ5Z~QCnm{te;F6:6PTpiL,L`XP 55B %he`@:w"!]9X6"rMzu\>x{w9ϠMj/NEz(e_V>ڠ*djOx[t OL4%q՛VF"[#K,}Q"b1{Jw,Gv׷}$55hυ20 C EFI.Z ` $`6Z ;Oe i BSl\VLHG-a;,^/.`nb=s]n-RY%hhp{(m{lP &X:0K X !Nkc*˄Ȍ  @g Lʅ$b"kӉqb޲k{zS}d ~(2(2* YI%#!J]Td'ϋ Z3US( cCNbdgϋOV4 Ba4I2sTNc11Irg{ HXh$h@xG7? =ReY^ڣ*|fҋȝ~m+ Zafn꾹Z sӃm LF]q[h;q,`E&h(K<`eca1hY)K"$Dy9O0We TvPʺ$z&q"6WWd.+$!Q1%h#88sJ3IRi%E:fȌ/OȷPi`EZ*O0u`iʅAZY~Yk!+e&L+ 8ZtaFDM:SPh-etp9Rz%duhӳOcr Q#R H4L躄M4y2r PvL>h\ o [eGlJ-q@w!б|NŊTU:.u64fC,g0[#\چ3.UR*S$NWD;j\EVwO!iaFOZ>1 p"H*A8")OBRՉ(/?T!j8.+0 "iq 4 &2D+ 3 EYbmHbj!  Cg㚉%SZ3S11ztvcXu)֤V_Dd jQo4 F=4$jW qǀ]3JSSpg~VfTqQΚxtP`hh}_)a2 ΋[pRq ^tUH2Ǫ3&dRM=LL kdgPoM I@ͽ74P?J x$縷9'iCK5%_V퐖 B:knX樼Gkr}R`ʕw_ֆ|ID..#0&,X^hX)LyxڝW7&4JI ,(vTjLUP:$JOZ3Nepuvb{{5'ZJ2m3Db,1 FE*2Z`KaMx#2^6Tә{ŇgB]f x.""_{J^ڌMddh;i7 D64_Ш8xfҜ7vzd<'~LS,Ǹr;sƞ9T5"pE3ԣ/kժt) S[6ym%L M4Pa T'y*W0i"H lh/+{NM  .۰+Nt)5gID4fguZIT-{Tl,c5HĪ\ɁǛ.,8?yI9GT3Wdmxy7ċqSٌ8jz~k U@HQlёPf FfS)Sdqhbu` B`0HeY.fNf=f@!  ]BQ-YdhLO0 >mo4m@< & @(cTa]P 2N}/pd 0LBaq[}r}u @$Ѝd"h,p(%^KvJ48줰(yZKA{T Y{E[H(Y9()Gpp (J|*&ZP5gyN%"&Ёܮg kg4xV:˅ %<ĦTĶʰr?jXJ%u)cO'-hj0>*@P&*B N 2㥔7-1(]l$YM0 Hf, :m_oUJȍIXH)a6$P>b:ӏHYƒGfd:hSH JM74Z3̿nDY}"c-K?>z1^ :) MjA&CNjD D3Ǭ⪒/O,?5Lx 10yt]R;D)kjxx:dEG]Ix\wGG_]w*!2"s12ؘP %Fp@A)2C^Fx“0i}"7"5 ktvaѝW eĈLki]h>,q^=Xih@:<$1dsQVCI L 4'#VI0D(,)+$nur1$lPh Ű #R ~+&qo+^k0sdĜɢQeY\6%CW1Yir#Q[0I)j%֝lyFRlID"̤Ғ]ű<.Nr:H9HFPt R6' S%֔-d>~ۤ^ jLAME3.100#$dRb#GXiuBW~K1 -4:F&Dfκe[QIO&A'djCl5 mJ-4X Z5 '4{4ʳgrG KBs?NUF]4RRH2y(>@-$MDԥ FzƇ\ WAO3ojgFӲ,Z">0[ez#VJ~䌌|zuO+Q禄ʪѪ'.{'uC ͈. F$3`B/``Ĉ$#$`יKuBT@bKu4P Oh-5.SOU:R(%*69cqHEIf)*EBc`u^DcہzBYY|dgUL5 M-0@4ڇ2XV*‰aHU\D49%ܜvU*jd" )2QF1&9(xs (D(lx&[@ىB 34x%pDK ELP FF(WiMߌ5k76` ʵEZe2eN> ҹm{EL7յQ-j| aTALJFfTHUfz!@ѽ  ~5ݢx6CJnJC$d-S:1+K3#=,3V\>'ZS-aƼ fMdd,*bB!A"1\dFPǁdQr# [uɋ[f7s+Z"#,`5)ʊ5ض$2`E3fDmwDsATdDiQoLb mKM164\k wbf%ԲapAAz;}TWE$gQ%mpƆ:a^\ 7`0㑑$N[ȓn27۳U֎4*)9 ^>!G^#F\ HlJXI4zxn]rCRe)'!L} Y~e30DA Lb[E9f\sIL: !)eRWT@u4 1rΝݖ$ ̡<#Ivv2hfP!? @@dhI| P4+!b Z!P?Sעn-/Txէܒ^eLŔ)*j,> H}1@&8$NJuL6/JhFJj%@uhF X NoèBQNqNLxZ,6rh9) d+kуl6` MF4}'ȴ,T,ˆI^䚡RQ0#.F&ϓ=L^MfQ@Q|ӝ/L0ZުQ3 b6Sj(BM)&Jy ֯ `PPY0DP#`JjP1rjfM"CDJ"P J9;/?Uƚsm\n -Y 4wn9S: 6(/D՘:o NdZbG.K1k*x:|+7X%>*8+0!Go  M08)zT^3./ҎHRYg }RAGwBwO$iRԛקd*~!%dgN2 qG H4) ,Bplh2UWQ֊fxA,ۄ4D¬ǵ REU/}^^P&ۢޙ{wк HK,ŀA0n J:0)7"KBi1QE ,BBB1«C CM9?oUYv}0eC'vPtNky}zQj]-KmHkbq-.eZzieGV/ˢ:Z%4%z?$l%vj3#+qDA6.`(  z1a3E @LU=/ am5 ג1'>pFNۼϊ'q@ZaIJQd!jPl7" IGM4-+p r] Զ'f3e4IxT>Pnf"5)N g]-=xQPJaZP_!ĉR2+f*(`DG@%p@EtX@¤E 5+<@+V$A1ŀ}>m`:Oη 'VJuV64BO37tY4;΍p͙sXiyV7sO e&My>@zuğ88"l5=l+>Wji^:j̢!IS'&3IjaTɤ`(@EJFK;L<)H9$!eM}SJPhRMͨ}]Z{c(mG KGqF`Z|!8OeC~Ud]jOoF ]C,x4 D@; Y-yJ 3{X,.<+,tItRFXGh~L6#e{Rg;P#1^̌ɧZC6 UP(\ȀʫWcZ)3 ŁE6:$h-kԂ* 'LH@!h ܘsQP~4V8cHe[ )$M$3;`J,zȃ#pv~y`j{\% _\%Mʙ<'<[YU緑1͹Uˠ;dپo7B[[nU [(j*t-kMeh24m\ AԊ6ўEqN7a(lMR*S($poݻdhгX[p :-<4"v}O}d3Hu&<.kW\ۄiC,;rB}M ọu I8ϝYYlO qڀX?ړ@HU5ЉJcK <:^(}) 8Q#BIqu#m9 ǥs40wn0{J\W.< 778v; 2gpB'=.5]\<_k 60 P9w`0{%3pAhnme9HD(  Q#+ 0|57PsQQ],vbj8Eׄt8b+Kh6%*9b{&|xJ tdv'{ UÎBwOOW4d`gKLN2 F H45 q< Ϗ7h?xJY*~sYXf{L筀`a#V'BVAcA5!)EzEr*DžLH$P%'T027*A\ёr{lfV;r,{j--xbqRCFAĒiDBh8wqMu@0X"$ϫd龇[47iޝz2$`۹ڋʺ.w>M]rS%K6^ 0s U0Djӈ)%BK#e2NQ@:C;Ll ICp@h얰DZqw G1.td˃tWFg !V'O%~O]T."armLL@%!qZCErQnH[TA]%K9:jrY):w) 5 -f%'KB8E;3 0oĕDC\qGb̹ѣ`A#űMrB)@M2xW"!qE''yKW:Tæi9d@N")_"8txB:EdJhPoFB E,54* VDh>[(OӃТA?ܱǍC`#ݓjݗ#elVV/neΥ:MlX*GJVe&+$Q*D2kH-豋1B,1T@PC4S.yjgRY)t t~t8ư󨑨܉E? oUV+(Â-e| + q)z Pīo Cե)W)b{}V&N@3r AY2%ɊUŁ&"YM) ]3hxIĂ>[l QT4 A@$@٤Eɵ3}HDqJavo&k;db΃Of"  Ḇ<4.s. ,0AYye3je*,2\"!rL~DxCy(HE;Էfbs5ؿJPpBJ34`21-$dߕ2PJc6*# T}D[EL?3'S"OVND*ۂ83}M4k1*Ge>"}Ghy5unIB C҇2|QG3p 0`k5dfP/eB <-=x4Ճ׬C2=Unkjєq=-DL 䈘-p5(iLeŒA3Yީi&Vq=-5i普5>!L0 4w-r[2! vIYgMe!R:# i3#͞C,uTBfx+6%K^yr)&āގo/?d]U+l2 ɑJ 4bvgЕ[g= F&"0Z«QCHA$v]2U`sz/i_*P FpST|`SZH/PuviԒǥ%$eۆp|=}wK|_cNiԔuqksxr"tT33'W0uMLhP92[ILg(ES%rЮ|kvv3TQ rjĤ ώYqPf0!dlRl6 F1{Ge'B/OI"IKկy*А QҠ0 QXXLF" Ivm\EۚюDUlźCVP¤K#JWÇq9+2omSfQQȍ/1XAMd:VC Әh4mXdZ-z0N$ևWJGC1ߟq2Ju"+vhxE5ӻ) -぀b@QfԬh]Ͽ "#D'2y /<#N>5YLŇazF^0a{ʼnpHqdfRc6B B.=84ΗM=F\>Y⬀)f`4(FDd 0Q7h$HDVPA:IR:޿HPV $0M0q'!'a6j35\dc'Ds{;UhFTG}@H(0$LBXT[A`jOTsuoISRjJŽQfɖ"paRդnk!U㺨 'AhRt R9#D6@@JCF bKNKHH6(yk(PZ $&ڝ- &YۂgYi՗\L/#Bx.՞gYLdfCl6B @M84"8j52€~VIYfea ™I Xrlyd|b1B3j)<$G[I)aH\hk8Y!~U f/,( ;@Vly5VcHGGFcxT#[f dJr X"@7^ CF$JS1~:v Fyڄvz#NSp,M7ǩDvG }Wg_m\,P /˧NKgiW8kg{ PvE<4/TQM[1|aZ0ACCEMU8 ~<)*4U` 1\pƣ"h֋bU+0fT; 4&|.J女?OyDdgS N2 -:-=94(X޻=3|4C2Om_#v.H5A5I{En[OsjUSឺh.vg՝V=i䲡fQ]f>NFjH b%B.daƂhs1JED]nbѰ 9f2n4̘@@ED<(<*PMmp]%i&аCkSDFkg$9xFĞXizĆϕAl0VC»~s4Mhʾ1>l!j(}2L qw T"s"#LF rLIFBPÅ&buqF@5V),4$"5tx%z`dfOO>P O`;OZ CdtHjK$ EW(HմYsvKGQ?%Ywbx2eӲm9,0!ND=.Iv~%yZ1@Q&k@nvW1Eޞ>g WZ-.1lj49Y]LUٔ,rP/Jj$i#dhӳxx SS $4ģ{BVW.2 II-TZ$I8 ʅz>$էLJײq"kܙfۥJ0!GuBQx phP2lkx;Y] xt8ql " 16å>O8+RFNXI'*pLu%&|8R_5U;tu^d4 ( 43P2b JISӉ&k ܘ֊Zs8E xYʇ8LɷVɨ50\D8I]+`A@%9kdX@t~Wsq$ L 8|MJ[YdZhU%v}Jy+D!"-B|nSSd^USO4 5H=5H4;ȍ:,r>/%⓮AMՙV\q,IRlndž&7`UΧȚAIڜ"ҟSjnk6o/3n2VL<$@4 aa8(HY3 oD%W|3vCTd+M?35"8.4yTf=c]O܎ͧpfĬ d5C*-H]}pk@aGnmDy C G%mʗOzFlw5R/*PPǰx^`:GB sh׸aj}UHh\2qns:@+9yCs0li0ZT1Hz0&:8q. dlR6 yF܈4B9ҌU86D?ҧHMgM8k &qxHj-,jΈ)ex$rj&v4@$5DH(`!_ EHVɕ#0Dr A? -^16CO^YCajbI+S؀]*E<XFWUVtL@,JT,)hK8 NwINMK!g+Aۺ DJɡj/w,qחCnӎ/pSUz.r{S>b<&gc2 YNG6PifHrebliELAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@InG ZZiI)BN^ ޠlPՔu_d/T@n_>Ezv>iW1dhг/^ B̼4vAZ{*pr.|:L6J]+@jL =J-LZQ!biW2HdJZ+Ma,fJ?quzYB%d3x,7C<,۔LAMEPJ,*B0 JmQ.pa#-:-B8DZ28#ģu=316ճjFyFrZ3r_Xwub1 0zb8LG*juN.dfk >@ @,|4[ӡ9k7%~gwUBM~G!Fqas:'&bBE#  DY0-((b!P)yđ=*"l !6`8euGghX,emz +ʕzi}(&M@9L֛\yYjXKbh`3*k_"l(8HXfG;٪=z,e u|ړ,D[Q ~_S[Cu$ D) 4@p hGTbIXIql6uEVTTtEmHiV f*E 8D=WאqUr_4ڥ(̀_ Dǎؑz(QMd#hQE 8WH4 uY2pelyt:w涏7 G"LAME3.100UUUUUUUUUUUUVi:f2ж#IW JJ3vDR.&Rj//BGF^D ݨ\w.D)=ђ  x9y Qd&dj/V@ : aX4RޮS]@ՉR|-ܻS;pgpr[:On2u6H{|6`n>'-ˬZLJHBThTT:fZ p#jXq Q^.T G)R#'J̓i$@W'CA-_Ȇ]}nUv~m LDGTz?J-%6MgyA؀q pWh+ cG1S$\"q0+7h%TZ.O4OW5ơnݺ6zPnK]TOv)c&&&\]<}v[c }y(?#)"-*2u5dl /> IY4V%L2N,XQ1t&LՁ !ˉ28V/%d]@DS DP 0 ; =z4lUTΔQ|SkRAr%#}"|%9J\j0eULJv:i[ nx˫i,(1D.v=ei^Ua7}4%(@rtP}v;^$3s.!X4`W;eģBt~I48d2DZZɺYVX&`M(Ir!S÷sKžc\Nlg8oZW۷*LAMED0%(c̳fepJR:zl T8^Mphnq9 `%^*ȝ|0ֹړx enj$B3tgg,4C[pRk%dl+O> 1> Z4BuvOK7(nͿoMlXq$k@ IPʌ"fQ NEjIJ\bڿ+~TA:LB 8@XDJ3S2j(Rl)q cߐۉ1mU E<tnM%URS{G !rIf[µW`mV_H`Ȕ k#[ѹ _ 2T`躸xLש#0 ұ}5nEț3*J48Tz*fmQ ,@:8l L13m8K <FA q2/joYZ NJVmވ)/~YwRR2VHU۽^i5dl+OV >Z4l_YxÖ%~ P*IušK?)J9n4rܖml2)QLY-:Z/"ؿL8Bԓt&b?e48XcN9eXsnbIrE 0E[ J,Wʠt*dk54{d 3*nyE䐋JG).~mY %sZ!emS4EҶvYvV2Gnr~CGc䟟~J?;1^477'>F̾WbsX# h \ fsڥ5L&L. c蹕 mᳰIs#“2ʺ)`\> )LsMmda΃Ydr c< =<4BV+QxPb[xw'<|4*sb UrEWu]٣=RH?/蜽B/)<~l]]?is)|13 td-.ûK"+N0(s4L8]Sh0A-X#;5w oFR 0cxF*L<}­DO0)1>ad+kY8G5J^`T"j--c gܡKWViX>,6Ou0#Ve3*HʓjK}BΤI/nY9\7@jF@EX5`DT$*%*eHKd&-` t) F$쥝‰F(>ddgK/^ 8 Y4#5*EbMp02b7ѵTDm @ʑ }l@:tG(>##?eeEhzKrɉM?㏫hF"$!R%HD(9 9  ;h ֚jCҡ8舺@dD܌{E6HEG^PU$5Rq]ڲ B&BZAG{֑ss2_)k)IH/yGmƔdo7 k?ÉO}:jb=qKP8΢"MI7FeIxuV R&,MtI2XAZB0b0ArfbI aTCd`jVȹ)qɘ `\üɆae[Rb&Mȴd:e+/>4 m; =YH4]6j]_aIT`p,OZqw?lc >\T)'2#N8T:07>1.th4ndB}͓<-I= CK,(S|kޟaz0y1z]ȮQx%JQ[]eK1u*=[ӊ3[b- )Bp%34Hr1ͻ@,4$rZi=wL*DQ 氩c@Y}BJg?⽾D_:K=rb_֤>+N62rQ\GN . `-nPn 3h\G28˃$\sLe@0Sɇt&Z(X83`9VPrCT 4CV9BO"'LyAZa0Ev_)\4f-| djO/>@ iC,Y4Dmnj='O_Qn" _޳‹m+yJ]kq"ˆi z\bLPE<>E36iЀ$Cؿt~?N 2xh1"(xCRN)ZjeL9VU Y6KT6{I!VYrWV>Sz_On3R:5t]>f/&D@q"9. ',BVw8d!@Kw-9~Q3뇎2s,~؂Z̐3u *@$u,@IA(ר}6'=NSu\' GYIAw-,==ڄgw3c} [{pWdsiΫOW GY4$Pa_O^pӵ˲KB]-\{T煩u)P!H =dll"7{YOL_zɪ,M/'zoހMBZʛ D1t4IaF !`?k-%GpFzdʔlE*34"O (*pPB]tܹ4 瓝[^ 7֋+CzZ>Q+[a"6{.1je]Qj2wR)%}:?-R5S $G@LV!ds pA$`$.`ɦ8|ȯ e${F3)|qd\AXv}dyjΫXn2 >-=Z4`~֧XM+ 5\*[t{dJ#Q!,5[KW liSQ%$3# ga gcS?"Y9#q}cͲӹ4b0I,t1I#0qK]-<j+ى#`'R,qJ2vhE MmRuHDW:[vX#|r$f:䁰oGfmEȗ6e0exdIj+Ylr 9kD 4ZA7ڤɲ1.y߅"qu(nZ(ӫ_Dy+dVŞί{ED ФŌRdV^K 5 ]KL194*2=!0{]jd#?g aAE=-ȥD7lB2?㍡[^C(7P‘$#Ct9' ̨H @~2 5=K" eBco,)@ >x40Xd1Gˌj %FL;'R=޳ bǭq|ܜʺCp` BiCi;U AdW~8-,y„AT%tΩ*l%)2{`co{-g MfQp3cGH'>FjY w'.V>6IFH.΢ RoMxVʦ֘#ӕ3yωLAM@Lz wCʋw[ *d|H,2R'Z_.k'q"K!k D/V@4iNK,_37AhWҏyEU!qj pT6k\%S1oɗeSdi+:mP y< <4qO hj\OZe)u4NcȚ !5unNŶKFܙsRݽqU{Li(I*pvJ4=LF@Uf*-KK+B4Zxs(#%m(դ'X5:%]"-05w`e0u}a]' 6C[B {6neUWЇkrfHX]j27ÿ0#g9q&:9n~14B_*LAME3.100 2J.X6 I?8d 0R 0s5X@1J$$1oT˟(<)5/B\, Yv̇PWdlϫ/V0 M< <4"qGn5*'ܾMΨpj|Vz!Ȓ8[@,;}mpUdSPqb$) ,4F!TD)cÆ;$&m×S9qf4^.r9jϨe 0 ysCJy0)(1!H*<~66B!XooVïQӵب?jggFti ;e -,K<[^8P 2@$YA%I! wGLgG1DYwSIwr"٘%8¥{Pb]D@]cuw <4ȉKsմ9ꓓ]וqԶp 2̧Fm@0rf\c#cc0tc"(|][fGZO)vY9\MV(2[30HMy?XF!%ׯYTeEVzQKFA2|#)%z:&7.rRz ZވP~7'}eRސ,w5ͬe28I.mr\X1z \}+[)F)'B V>2 @AY (FH2d l XCj0RjF_!,Bu^S !&ob<].㯽ĩ WQزl daг/>0 ŇF0{4o#슋ŏ ()e Θ]$jgC) ϫca K^SXGQc' ͎|fb0sT0!m& \b@ %EdGgJ<{O%  N/LTh6SJLƜO]t AҵONgJFZYY aǝ-JG{tg(&sgkDA Ys18g>/5-cDpREʶ]44.X Cz X2QS`a0J6^(JAzp02[<dYDX!UÇ̾€7g F2lAnhG fdngл/e A-=Y4@#Em͇ER8Z9a0LaXB}CDWly(y /s& 羾ӛq>i*yk5>Sg+BZ B١/!hʝױ$ . IlQyz. PYBk:Gяգ"8gQ`:9kdeuCiQk A =J@ZViQ_~Le @ $, (EqO@6d(ZQc6,FȞ024)lw/*G zl#HmKYט jhju$>dj+O? ͙A 4/*Ivǐ,jxW:Sԙ"}=d虡tK6u7B'B\OZIhZ4n[Aо鉋H$TcKl @I<i؀6. ddɨL5q_F>]p$ yխ_B"iI.$$V.3+ ǗmiO͝aq}ljpP*ǣ}Πּz:5RGsg1Vη6wW"-z+mzD \ .t[" NeY@qXUgh$\EJܞJ(C\ziL'i"P[3YMQ3o}6r5qG?ym.6+H",| d`LWDVPZ7Q_B@@2F#Z 4<d%Y (xPpцd,M(i[ %@(v#8' W68[l C݄ qmlD9j9+vK %d[jOCO^ AGL4rl*Y~[" nUt4 ~NVSu9(:k0ngQ#WHN3dէ_)º4g幜sK#<(y T*ڵ!(j4U9k,y* G"x0qv 0xĖVjTp"i` s>[*I"EVR[Tߟ=Ma ,PL:"A+&H|`XPM%0L͠CIhTU:IE#G= JDu\i{w!3IZVnwnlN {45yj}璉mP#n*=3^ mוּ5hJ$^ ` 8(q&N>x]zr^/^oQJ0B )jK҇(g1 VJ h$Dx7Er.|M-ADYL B):L:Xd(dbjPKOnP E< =Z4TW16[hwjߠg+%"=#zƉZv$qc_j8! =Xi:XTLTg*A-C  "&Wvvd)-A iŚ1b&<QOz0Z-"&`\YMI_k}qkwCk{J7–bt+GN8>+SrEHmUu Kzbb  徯J"W|-MnU@!I %F$(г1nJ- `-̡LW() 2XWxVd< }7lk(?"h2da[ A-=y@4ΟW*SaUj tKU@?aU9e0nPQ? )?S'\1e~@>uwJ2gc;>?bNs]p)ș *C \ a P@0X $lɐ H dB;B 6۾29?%K1fPn2!dgV@ :eYP4r3QM(74#p.k_DQ#1ZǍXXM&UٟzHRQ+I2g@֑ P}G(~ER]HfHqbȭ'[vC8B h=,({j*eK HR۲gph̅ 5Ju|Qa1H?_E F$RЧֱ"Xn4Y;T978(d6t_BflZpӏy,0|Xfpɕ$D/G/ʗjElC@ 0C&h΍* X$ؤ\xaP-R2U ҉N +&lG,&dl+OW ݧ= =[4Sh/Ps 9 |aqf *MHJ/ G߼g֢8nļ5"tL"-ʷQGT_ƾ <~H;оEPF\ V$C,{(4K:E[veWsɐ ś ҭ(T -az6Ib|wRgg?˿W%XbPgYݩu$f@j(^ cAW*˕o<)z 8(⇈zQ: F7e3p'% CT]&@6b3TDD8ɂ- 4YaSS>6eP]djOYT B4G9mfToѽvQ'Zw lrl>կr^x8}qlDuZS΋ 6 0̫BnMvv"& Mlw, N3SiFr0u I H0DwD"0+V y 2P$ɔNc*D*nA>wQa}f3JNCH! Xy^;ԍ VI6-v$l,RJK]P_8&P's1zԧ-J])R(R3I,XC#9H 2Xd$ہb†@H(8V-;faL( K[`MγdmNXn 1? Z4XqT*j! BhZQӓ؏+CH?'e,.PL^6W<۫YnL}X.n#DeH=\4dĈ{UHh2ο_.}[M3ԆUkj+7u,Q+DaͭJ mEu-=^JUƄ;>0,Xb&\D11B>bVQ0dzpe + u( ݛ!s!V {S>4B=1L =,A=ۢo,n=1ƫP%gaJ[ohbQ[Qw:kk꭯u#~^_J78ZJŚlTos·YgyJ3:&/{\䪵!`gEP$È%$5exN@( X,xb$Ȕe Mpʙ2_v< /#^CԸkf@Ư.X:p) dsb!_,:0C"Hȱ-68(*j052B0,\q1ooO#O2ƀ,Q0RACVSla26fnXѢ! [P2H8g8C8"*DÇO!zKDYZj^Rf䬌*ԔT@ ;S ˜sT*_! #?W\ѢC͜)'.'RÝabmɱXМN塥Ds; )m0kC,!g"'רz$F=WX , xP Druq0a5c ٳ: =@4 .B檡 (L߶W==l|B%"oǧDL VW.}1ICbNȂdR *e 64UA |RO`Z$׌H 2e\n,26Ɋ0@<갅b (-*B,hKMj>M-'hRdlYT -> =Z49@"Hd!+/ skgϘT)4lM/ _6Y賭g ]!{Nm _LJ~OMfA D@p `b2JeìyTH14#T$$6q Y* l @,$ӿ&wCY,5MHSXH`Yu/x`*B"8] gc3FX: 6dtl6J RILO=s@D^`GPcHdӿv@sU~KAdmO/> ><4共dVRJrQQxYi\opz =\4=wbFIsv5*)= ?#-9T|A]@jBJnIBFH-c $nܣ%]֭X jb.+\oYi+'dPHp>X]蔟>~DE tL,RsqCX5S %RM9R%Cd:'O`*ʀ r`A&.@ % M ,?Z '۰ dL |,.X-CJb2ܳ.n-9qc~WMe+zGڽBR N=ڄ_z5 dlP+/W Q$y4tڛOFE. inOe#`HluXdC<3pH0@)Z[D,`+1vh^+.NW ]?+kE,A&A̾b{?v*9bE(6d^h38cr = <4yf oZypȑʣn~/d9B˽ (=j\)>Tm^gV!ZmU' $'AJФת<کQ]#:R̯*;y-Vhn]`{/*@]P`-2Hw1D-ӌ0G($5+ w$ L\F50BCV@Kt*,P 2<Ā):h7ܧdl+yn@ 5B4O{c劉`0,=*A{E@_^a49XL\7ysv}۱W5 EidT.sP:L=#qd:oyRVrF];,^vbtEfpL Y}$-%5O D4A580"i: .8B}W6VR]tњE_Gm2[(EDefP/BZ;\ka*F<Aquox>1ta :R1*F :nqeԿz;qV}@$<sF0 kY7#PxDZ PL /M:8EJrݢ@d wdlNXn %> =Z4\r4(fL#W<ف+X["߹_z^h^".+qpdIK:̌MKl/dwRl%񯏛vuJRbz !ؘɨ.^fRWЯ@ |ʕg)·6ɚe(qs}"J-ok'AL@w3i!vt\C:rdIc2C̵"!Lg)ZfK69%s{?Glz^qLb'>]\:.#/3^u:Zuՠ\&I3 Q@bSp+1U%ĪJF oJ!BK`d*ET2!*7U+´YQ.<kL*ldlϫ/V )< =4 \* ?(=\4{j &S)ipJ\l+N:`Q}}˱_W,p1pwtI4WU Gd&(;I@p[AԨB3g+xcI8q@ekP!C%$`C*JoCQ ;`0lBT#,WY^D$ZgqE@kz+T&⌜-+Oo6njy,lCBVRqmW틷WwdYe>/&= $[kjMR@(1PBH=Y`R1(%,T˫q hjb4+D28+bCD8mH\"CT ZdR">dlO/W" ><4%  ?,A8v|[8D1eiX 0"^Ğs8I[}iTG5j.;Be/cX.ac量QޢǥdK6qn#3$C Lb/J8Tȣb!IN^WYrtxk0|GKmY Dٖ)H<x$c84WuaB ݮҺujL'fn0g}"篹= G%;TBY5wFƆHpl?AWͦoۉ$n#B #TEW'Ȑj8UA W"=rdQ?@pD!HWͬc:dċ"[Arc-ءI"d mOOW 9> =\4c.D-0: :mYŁbL5 Q0)%I>?N׹+\E{(Ժ*U7y\L^qAwC@!(j*h ׵T1i"ARA&Z^K@] fG Fw4 x/ 7e-5z I^̳d%7c HZ#u5t׋ ŀI30WnXNEfUL'dEgRK/DP De445n8jswg)]_# X/PL)7ڛplkWdαk^G3 bj0Ÿ*6L*O'q4 `My8A TU hp,dkf:H1$Y X wńY@RLjH4B qŇϙbPÓTwAX+Vn[eq 6L&MΟoa (Xkw: gZ]:-}%K a~ʒt-#74mЕ*/ШeDA̸p.0Ĉ8S =ꚙ6 rD C#c!'CUY$A2I%Pd1lO> %:=^4UN K 8Q4yYPn_DiL\iDå[ Gf-DQ8w }_507!dlOOn Y> =Z4&f(KK wc♑l@+\Îo* ؗ}OXlhKШ^҂Mnb^Mmy/ۇ?(ZBtVA [ vxf (0;902iJ$3P9*a 2P:J"-2C֢tf%Bb[w-=O]GO|ь>S 2GѢ~9/OGY1) ^A#z$抩bTKh!6^E=//JQRRP@|@Q>&D`12<بBo5XaGF oɅ)MxBEQ$c/#ϚȶEgdlO/W" 9<=4. UneecoYx=n..$:uåB'v|T]h(~ לl ͅ#T^[k$H/yF\ 'T+,blm)fp90\pDiLiQ25js!hXWg !=l*mf5N&b3Xd}eErO5$GS4Vo@.ǒ촆fUDAU#t2P㺢c&9GK:ejC=ʨ@ JdB@Ƽ`1D~%^V.en(-%Rݶ4F( DDRe 2 -dlOOV ]>a4ޚN2r ^bA ǚce/~׆L]qo#y= *,}DQ*x.60[?t&0<$ɫL IRA*UH?"ٙBxʱ! (CMVYI`j˒DLMcR%k,Qeސ= nќ3Rc ,m#3dž"'tlMOq{ bi|+A7h 1OIkQ #=Cz^g:@`xPæ*M1da CXى (J@xG2q@ _\-bD;@ p '#OF AdlOO?" M><48@;%crl<\QfC N @Hր (r)nE]1t-MLfL>G;QvQnOv*L}z48jFdrdYe gXPA SFxPEd!$pp2] 61 BogD` )aHR-0fs7زXUdȹH+ԙ!gxusrxʙ4#C()T}D$U22VFIڌMQXlT| e#Eh7: tVBӈ,ye̩QEHlfujLAME3.100dvmP-j` Jٙ42QR5Tr$.]BJBr_r0R l93j \7 꾪l[7ʯ"DON**v (;:TP4h6 LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUduABDFHKOQSUY[]_ceginprtxz|~Lavc57.10$@B^PXd;#0 Y40} `>!A@>h $,`"x4(1>;Lsb!䆠"hԓ&Gk P[g'/d*W\-/+zI[4'[fh87Ƶӌf,!*lvI\[Yq z G?lEmZwLÚI0R f&a˹eIjKsK @D 0XhxAQ-IJ ]Vb⢮d `Vi _XUH4#lJFAbŊMSwKSj|\F4w|Rcw, F+2t[k0Rz\k՞KRµCҰ47F%u+`vΔ.Hb ;g!{j[wv$"x)-ZE~x^O8\FLT)T9b|ĥG> [!hR2 UJo9=Q8בe5-vBӟh fpCbCu&0jfJut;QJlu,`d@Pd ]RE E~+’ÃtQXesʹ~@D7QrdcB) mT-45B)]?ٵ1b[Nfвb̨$äRޅEi kWAyV2e+ N {͐ 1i^+WUTuhpz%Pp`D?ۥmCKhYufY-rRrx sk)rCoxõK\^[F:ϯU-wK/yxO=&*r%% -eF}Cm FA5{f[u&h`[r_;~wws_bJLAME3.100NJN< ^q!XK8in0%$arاTg‰EH J_Lvd AԳOB @X̰4k'YIO7S~`ܾRAH:N37y WMskZNgƐmCx/-x )ַPAl+ !/rniE' aqjdo}ިxäq5!ai&`8yrDfs%<\[BR {V$P  (EiPBQ #X;4d&dX*kC,g(5Ҕ-yb#Vr͵=JpiRc>LAME3.100aހMP0 ƒȬh"JQ#0$2&EYC_Z0JhՔ ):Ȋ MǵOmKOV܊xkm*R9$"dvERl5 I-@4(ʺcSW\Cl'$wu]TUCxwu9z ȸщ0[0дrx&8 I rq-V8@JQP\иY82k veD7i8+iL_}V} 8B8d2K94O/MJ&d3[D>Q}ǟULAME3.100UUUs l@4D*@a@"DX PPhj ۨ!L#8bR/!u`P B7ULقE$'PӊE,,Ckz!ziYb:VKQdgP l7 @ ^4ΖEMOoŪz]E%7K:# KM_߿(Nnq X`.3BbF% *+f\oJkY'2L`ALtXi (u{_d 2/ 3*ۡ]] 9dI2,(yo IN ʱ҃@x+ \E?4dtʰ_=VحBdgPoE 1<ao4=9uQ\+DC I*> ˼t(O*YqE/:㲲XX͗V^~ZF0aAB'04c#ML,h/p-[ (:cUz! F#5fg2 $ f ;ާ.6Gr\̦\EJkT;ϰx ]j%wu=^2a!#j5~qхkdsC|.^q@qO`esԥL~]`o XE+IhW&^vv㡁D6HEf'OFZo J:mB?2,^NpUHxHdbjP o= DLH48#3vF<Xnx!S*)Xt5 UDqP_Mw4ȥe'}# qto)ᷳ ĊG8|G,LNԓfpĬmдHSo,AI@ pUyDdZP2L*jK)p=+mZ&WSF 3Yѵ+{=60]&Wm7)it͈95NP--JPiKWDռgG L}*Vrbe,%f;]LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUU"1JGu c)ih V:Q{ޙx~uQKcrw065@[:"U!Oe)4gMi23d/iVkL{ QYM04aKG 6ʤoP#u5:A0HdfDhg/gضyE'@ᆮ Hꇌ0ɂLT00!RDmd*f?K RfH0(KOӋ)# 늒;쬎EUrqw "F#L6aY  X׭'=KNy,G6IU r,a-ohqzM8u;ֽWK|. SGsLAME3.100UUUUUUUU3"d4 `!(K+6rd0~k.ii,_ό5nKR^/=Hd?ER"NĥmuIi$rmGϵ6:<W 4GdL+IR Nͽ+4gZ,()&iǜM3796Fԑ9Np8ZW`KrgS3ѽ~wG`&XP6"3D<, \5a *Am'2$Y,jE`騆>2ؔh<$F[v$1jw>G9kZ](tqD֩zCѺu-BO~hϴ}[CŰH)A֓Qz>uP 4`wF$dh*LAM*s xb88 8SVJ@́ ۺpE3%|=d 09;RS:ڶդ!<| &Y! V^ѡ%CE7B)(8X0Jf`A!D(u ," 㤜 "gL^1_D .0k1kNPu* -p:ҲYde3l5r %D0(h`!I Qp0 b@ jD*7M4( HE{d.e4{9͟|G 6)J[zw qv&w9L,j||zh&Ί}v],bGtzo/RgSe5Ŗd.?l B`$3Q /9@x >5"+ Yj BAU4,5G $!xdԏo CT5`RƟTצ_W|[j V/[VCP)DfYEdfז n>t43ĂqBȯ`Vg .vm} QPr$T| 0i(PDM! pdd\W*m-[r %X(\F4 }П۬*ZdHhcp ]< 4;և9VbS A5p)ߐ/ :%X6a"r|\,٬7ˎ\ӎ-oy,w ULzoU@Kw4t aRX0R(* !i;;;0nVq|j/|Py&{v@W3?Ӻyb:۫o BoW'VC+/H|tɫ5Z~QCnm{te;F6:6PTpiL,L`XP 55B %he`@:w"!]9X6"rMzu\>x{w9ϠMj/NEz(e_V>ڠ*djOx[t OL4%q՛VF"[#K,}Q"b1{Jw,Gv׷}$55hυ20 C EFI.Z ` $`6Z ;Oe i BSl\VLHG-a;,^/.`nb=s]n-RY%hhp{(m{lP &X:0K X !Nkc*˄Ȍ  @g Lʅ$b"kӉqb޲k{zS}d ~(2(2* YI%#!J]Td'ϋ Z3US( cCNbdgϋOV4 Ba4I2sTNc11Irg{ HXh$h@xG7? =ReY^ڣ*|fҋȝ~m+ Zafn꾹Z sӃm LF]q[h;q,`E&h(K<`eca1hY)K"$Dy9O0We TvPʺ$z&q"6WWd.+$!Q1%h#88sJ3IRi%E:fȌ/OȷPi`EZ*O0u`iʅAZY~Yk!+e&L+ 8ZtaFDM:SPh-etp9Rz%duhӳOcr Q#R H4L躄M4y2r PvL>h\ o [eGlJ-q@w!б|NŊTU:.u64fC,g0[#\چ3.UR*S$NWD;j\EVwO!iaFOZ>1 p"H*A8")OBRՉ(/?T!j8.+0 "iq 4 &2D+ 3 EYbmHbj!  Cg㚉%SZ3S11ztvcXu)֤V_Dd jQo4 F=4$jW qǀ]3JSSpg~VfTqQΚxtP`hh}_)a2 ΋[pRq ^tUH2Ǫ3&dRM=LL kdgPoM I@ͽ74P?J x$縷9'iCK5%_V퐖 B:knX樼Gkr}R`ʕw_ֆ|ID..#0&,X^hX)LyxڝW7&4JI ,(vTjLUP:$JOZ3Nepuvb{{5'ZJ2m3Db,1 FE*2Z`KaMx#2^6Tә{ŇgB]f x.""_{J^ڌMddh;i7 D64_Ш8xfҜ7vzd<'~LS,Ǹr;sƞ9T5"pE3ԣ/kժt) S[6ym%L M4Pa T'y*W0i"H lh/+{NM  .۰+Nt)5gID4fguZIT-{Tl,c5HĪ\ɁǛ.,8?yI9GT3Wdmxy7ċqSٌ8jz~k U@HQlёPf FfS)Sdqhbu` B`0HeY.fNf=f@!  ]BQ-YdhLO0 >mo4m@< & @(cTa]P 2N}/pd 0LBaq[}r}u @$Ѝd"h,p(%^KvJ48줰(yZKA{T Y{E[H(Y9()Gpp (J|*&ZP5gyN%"&Ёܮg kg4xV:˅ %<ĦTĶʰr?jXJ%u)cO'-hj0>*@P&*B N 2㥔7-1(]l$YM0 Hf, :m_oUJȍIXH)a6$P>b:ӏHYƒGfd:hSH JM74Z3̿nDY}"c-K?>z1^ :) MjA&CNjD D3Ǭ⪒/O,?5Lx 10yt]R;D)kjxx:dEG]Ix\wGG_]w*!2"s12ؘP %Fp@A)2C^Fx“0i}"7"5 ktvaѝW eĈLki]h>,q^=Xih@:<$1dsQVCI L 4'#VI0D(,)+$nur1$lPh Ű #R ~+&qo+^k0sdĜɢQeY\6%CW1Yir#Q[0I)j%֝lyFRlID"̤Ғ]ű<.Nr:H9HFPt R6' S%֔-d>~ۤ^ jLAME3.100#$dRb#GXiuBW~K1 -4:F&Dfκe[QIO&A'djCl5 mJ-4X Z5 '4{4ʳgrG KBs?NUF]4RRH2y(>@-$MDԥ FzƇ\ WAO3ojgFӲ,Z">0[ez#VJ~䌌|zuO+Q禄ʪѪ'.{'uC ͈. F$3`B/``Ĉ$#$`יKuBT@bKu4P Oh-5.SOU:R(%*69cqHEIf)*EBc`u^DcہzBYY|dgUL5 M-0@4ڇ2XV*‰aHU\D49%ܜvU*jd" )2QF1&9(xs (D(lx&[@ىB 34x%pDK ELP FF(WiMߌ5k76` ʵEZe2eN> ҹm{EL7յQ-j| aTALJFfTHUfz!@ѽ  ~5ݢx6CJnJC$d-S:1+K3#=,3V\>'ZS-aƼ fMdd,*bB!A"1\dFPǁdQr# [uɋ[f7s+Z"#,`5)ʊ5ض$2`E3fDmwDsATdDiQoLb mKM164\k wbf%ԲapAAz;}TWE$gQ%mpƆ:a^\ 7`0㑑$N[ȓn27۳U֎4*)9 ^>!G^#F\ HlJXI4zxn]rCRe)'!L} Y~e30DA Lb[E9f\sIL: !)eRWT@u4 1rΝݖ$ ̡<#Ivv2hfP!? @@dhI| P4+!b Z!P?Sעn-/Txէܒ^eLŔ)*j,> H}1@&8$NJuL6/JhFJj%@uhF X NoèBQNqNLxZ,6rh9) d+kуl6` MF4}'ȴ,T,ˆI^䚡RQ0#.F&ϓ=L^MfQ@Q|ӝ/L0ZުQ3 b6Sj(BM)&Jy ֯ `PPY0DP#`JjP1rjfM"CDJ"P J9;/?Uƚsm\n -Y 4wn9S: 6(/D՘:o NdZbG.K1k*x:|+7X%>*8+0!Go  M08)zT^3./ҎHRYg }RAGwBwO$iRԛקd*~!%dgN2 qG H4) ,Bplh2UWQ֊fxA,ۄ4D¬ǵ REU/}^^P&ۢޙ{wк HK,ŀA0n J:0)7"KBi1QE ,BBB1«C CM9?oUYv}0eC'vPtNky}zQj]-KmHkbq-.eZzieGV/ˢ:Z%4%z?$l%vj3#+qDA6.`(  z1a3E @LU=/ am5 ג1'>pFNۼϊ'q@ZaIJQd!jPl7" IGM4-+p r] Զ'f3e4IxT>Pnf"5)N g]-=xQPJaZP_!ĉR2+f*(`DG@%p@EtX@¤E 5+<@+V$A1ŀ}>m`:Oη 'VJuV64BO37tY4;΍p͙sXiyV7sO e&My>@zuğ88"l5=l+>Wji^:j̢!IS'&3IjaTɤ`(@EJFK;L<)H9$!eM}SJPhRMͨ}]Z{c(mG KGqF`Z|!8OeC~Ud]jOoF ]C,x4 D@; Y-yJ 3{X,.<+,tItRFXGh~L6#e{Rg;P#1^̌ɧZC6 UP(\ȀʫWcZ)3 ŁE6:$h-kԂ* 'LH@!h ܘsQP~4V8cHe[ )$M$3;`J,zȃ#pv~y`j{\% _\%Mʙ<'<[YU緑1͹Uˠ;dپo7B[[nU [(j*t-kMeh24m\ AԊ6ўEqN7a(lMR*S($poݻdhгX[p :-<4"v}O}d3Hu&<.kW\ۄiC,;rB}M ọu I8ϝYYlO qڀX?ړ@HU5ЉJcK <:^(}) 8Q#BIqu#m9 ǥs40wn0{J\W.< 778v; 2gpB'=.5]\<_k 60 P9w`0{%3pAhnme9HD(  Q#+ 0|57PsQQ],vbj8Eׄt8b+Kh6%*9b{&|xJ tdv'{ UÎBwOOW4d`gKLN2 F H45 q< Ϗ7h?xJY*~sYXf{L筀`a#V'BVAcA5!)EzEr*DžLH$P%'T027*A\ёr{lfV;r,{j--xbqRCFAĒiDBh8wqMu@0X"$ϫd龇[47iޝz2$`۹ڋʺ.w>M]rS%K6^ 0s U0Djӈ)%BK#e2NQ@:C;Ll ICp@h얰DZqw G1.td˃tWFg !V'O%~O]T."armLL@%!qZCErQnH[TA]%K9:jrY):w) 5 -f%'KB8E;3 0oĕDC\qGb̹ѣ`A#űMrB)@M2xW"!qE''yKW:Tæi9d@N")_"8txB:EdJhPoFB E,54* VDh>[(OӃТA?ܱǍC`#ݓjݗ#elVV/neΥ:MlX*GJVe&+$Q*D2kH-豋1B,1T@PC4S.yjgRY)t t~t8ư󨑨܉E? oUV+(Â-e| + q)z Pīo Cե)W)b{}V&N@3r AY2%ɊUŁ&"YM) ]3hxIĂ>[l QT4 A@$@٤Eɵ3}HDqJavo&k;db΃Of"  Ḇ<4.s. ,0AYye3je*,2\"!rL~DxCy(HE;Էfbs5ؿJPpBJ34`21-$dߕ2PJc6*# T}D[EL?3'S"OVND*ۂ83}M4k1*Ge>"}Ghy5unIB C҇2|QG3p 0`k5dfP/eB <-=x4Ճ׬C2=Unkjєq=-DL 䈘-p5(iLeŒA3Yީi&Vq=-5i普5>!L0 4w-r[2! vIYgMe!R:# i3#͞C,uTBfx+6%K^yr)&āގo/?d]U+l2 ɑJ 4bvgЕ[g= F&"0Z«QCHA$v]2U`sz/i_*P FpST|`SZH/PuviԒǥ%$eۆp|=}wK|_cNiԔuqksxr"tT33'W0uMLhP92[ILg(ES%rЮ|kvv3TQ rjĤ ώYqPf0!dlRl6 F1{Ge'B/OI"IKկy*А QҠ0 QXXLF" Ivm\EۚюDUlźCVP¤K#JWÇq9+2omSfQQȍ/1XAMd:VC Әh4mXdZ-z0N$ևWJGC1ߟq2Ju"+vhxE5ӻ) -぀b@QfԬh]Ͽ "#D'2y /<#N>5YLŇazF^0a{ʼnpHqdfRc6B B.=84ΗM=F\>Y⬀)f`4(FDd 0Q7h$HDVPA:IR:޿HPV $0M0q'!'a6j35\dc'Ds{;UhFTG}@H(0$LBXT[A`jOTsuoISRjJŽQfɖ"paRդnk!U㺨 'AhRt R9#D6@@JCF bKNKHH6(yk(PZ $&ڝ- &YۂgYi՗\L/#Bx.՞gYLdfCl6B @M84"8j52€~VIYfea ™I Xrlyd|b1B3j)<$G[I)aH\hk8Y!~U f/,( ;@Vly5VcHGGFcxT#[f dJr X"@7^ CF$JS1~:v Fyڄvz#NSp,M7ǩDvG }Wg_m\,P /˧NKgiW8kg{ PvE<4/TQM[1|aZ0ACCEMU8 ~<)*4U` 1\pƣ"h֋bU+0fT; 4&|.J女?OyDdgS N2 -:-=94(X޻=3|4C2Om_#v.H5A5I{En[OsjUSឺh.vg՝V=i䲡fQ]f>NFjH b%B.daƂhs1JED]nbѰ 9f2n4̘@@ED<(<*PMmp]%i&аCkSDFkg$9xFĞXizĆϕAl0VC»~s4Mhʾ1>l!j(}2L qw T"s"#LF rLIFBPÅ&buqF@5V),4$"5tx%z`dfOO>P O`;OZ CdtHjK$ EW(HմYsvKGQ?%Ywbx2eӲm9,0!ND=.Iv~%yZ1@Q&k@nvW1Eޞ>g WZ-.1lj49Y]LUٔ,rP/Jj$i#dhӳxx SS $4ģ{BVW.2 II-TZ$I8 ʅz>$էLJײq"kܙfۥJ0!GuBQx phP2lkx;Y] xt8ql " 16å>O8+RFNXI'*pLu%&|8R_5U;tu^d4 ( 43P2b JISӉ&k ܘ֊Zs8E xYʇ8LɷVɨ50\D8I]+`A@%9kdX@t~Wsq$ L 8|MJ[YdZhU%v}Jy+D!"-B|nSSd^USO4 5H=5H4;ȍ:,r>/%⓮AMՙV\q,IRlndž&7`UΧȚAIڜ"ҟSjnk6o/3n2VL<$@4 aa8(HY3 oD%W|3vCTd+M?35"8.4yTf=c]O܎ͧpfĬ d5C*-H]}pk@aGnmDy C G%mʗOzFlw5R/*PPǰx^`:GB sh׸aj}UHh\2qns:@+9yCs0li0ZT1Hz0&:8q. dlR6 yF܈4B9ҌU86D?ҧHMgM8k &qxHj-,jΈ)ex$rj&v4@$5DH(`!_ EHVɕ#0Dr A? -^16CO^YCajbI+S؀]*E<XFWUVtL@,JT,)hK8 NwINMK!g+Aۺ DJɡj/w,qחCnӎ/pSUz.r{S>b<&gc2 YNG6PifHrebliELAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@InG ZZiI)BN^ ޠlPՔu_d/T@n_>Ezv>iW1dhг/^ B̼4vAZ{*pr.|:L6J]+@jL =J-LZQ!biW2HdJZ+Ma,fJ?quzYB%d3x,7C<,۔LAMEPJ,*B0 JmQ.pa#-:-B8DZ28#ģu=316ճjFyFrZ3r_Xwub1 0zb8LG*juN.dfk >@ @,|4[ӡ9k7%~gwUBM~G!Fqas:'&bBE#  DY0-((b!P)yđ=*"l !6`8euGghX,emz +ʕzi}(&M@9L֛\yYjXKbh`3*k_"l(8HXfG;٪=z,e u|ړ,D[Q ~_S[Cu$ D) 4@p hGTbIXIql6uEVTTtEmHiV f*E 8D=WאqUr_4ڥ(̀_ Dǎؑz(QMd#hQE 8WH4 uY2pelyt:w涏7 G"LAME3.100UUUUUUUUUUUUVi:f2ж#IW JJ3vDR.&Rj//BGF^D ݨ\w.D)=ђ  x9y Qd&dj/V@ : aX4RޮS]@ՉR|-ܻS;pgpr[:On2u6H{|6`n>'-ˬZLJHBThTT:fZ p#jXq Q^.T G)R#'J̓i$@W'CA-_Ȇ]}nUv~m LDGTz?J-%6MgyA؀q pWh+ cG1S$\"q0+7h%TZ.O4OW5ơnݺ6zPnK]TOv)c&&&\]<}v[c }y(?#)"-*2u5dl /> IY4V%L2N,XQ1t&LՁ !ˉ28V/%d]@DS DP 0 ; =z4lUTΔQ|SkRAr%#}"|%9J\j0eULJv:i[ nx˫i,(1D.v=ei^Ua7}4%(@rtP}v;^$3s.!X4`W;eģBt~I48d2DZZɺYVX&`M(Ir!S÷sKžc\Nlg8oZW۷*LAMED0%(c̳fepJR:zl T8^Mphnq9 `%^*ȝ|0ֹړx enj$B3tgg,4C[pRk%dl+O> 1> Z4BuvOK7(nͿoMlXq$k@ IPʌ"fQ NEjIJ\bڿ+~TA:LB 8@XDJ3S2j(Rl)q cߐۉ1mU E<tnM%URS{G !rIf[µW`mV_H`Ȕ k#[ѹ _ 2T`躸xLש#0 ұ}5nEț3*J48Tz*fmQ ,@:8l L13m8K <FA q2/joYZ NJVmވ)/~YwRR2VHU۽^i5dl+OV >Z4l_YxÖ%~ P*IušK?)J9n4rܖml2)QLY-:Z/"ؿL8Bԓt&b?e48XcN9eXsnbIrE 0E[ J,Wʠt*dk54{d 3*nyE䐋JG).~mY %sZ!emS4EҶvYvV2Gnr~CGc䟟~J?;1^477'>F̾WbsX# h \ fsڥ5L&L. c蹕 mᳰIs#“2ʺ)`\> )LsMmda΃Ydr c< =<4BV+QxPb[xw'<|4*sb UrEWu]٣=RH?/蜽B/)<~l]]?is)|13 td-.ûK"+N0(s4L8]Sh0A-X#;5w oFR 0cxF*L<}­DO0)1>ad+kY8G5J^`T"j--c gܡKWViX>,6Ou0#Ve3*HʓjK}BΤI/nY9\7@jF@EX5`DT$*%*eHKd&-` t) F$쥝‰F(>ddgK/^ 8 Y4#5*EbMp02b7ѵTDm @ʑ }l@:tG(>##?eeEhzKrɉM?㏫hF"$!R%HD(9 9  ;h ֚jCҡ8舺@dD܌{E6HEG^PU$5Rq]ڲ B&BZAG{֑ss2_)k)IH/yGmƔdo7 k?ÉO}:jb=qKP8΢"MI7FeIxuV R&,MtI2XAZB0b0ArfbI aTCd`jVȹ)qɘ `\üɆae[Rb&Mȴd:e+/>4 m; =YH4]6j]_aIT`p,OZqw?lc >\T)'2#N8T:07>1.th4ndB}͓<-I= CK,(S|kޟaz0y1z]ȮQx%JQ[]eK1u*=[ӊ3[b- )Bp%34Hr1ͻ@,4$rZi=wL*DQ 氩c@Y}BJg?⽾D_:K=rb_֤>+N62rQ\GN . `-nPn 3h\G28˃$\sLe@0Sɇt&Z(X83`9VPrCT 4CV9BO"'LyAZa0Ev_)\4f-| djO/>@ iC,Y4Dmnj='O_Qn" _޳‹m+yJ]kq"ˆi z\bLPE<>E36iЀ$Cؿt~?N 2xh1"(xCRN)ZjeL9VU Y6KT6{I!VYrWV>Sz_On3R:5t]>f/&D@q"9. ',BVw8d!@Kw-9~Q3뇎2s,~؂Z̐3u *@$u,@IA(ר}6'=NSu\' GYIAw-,==ڄgw3c} [{pWdsiΫOW GY4$Pa_O^pӵ˲KB]-\{T煩u)P!H =dll"7{YOL_zɪ,M/'zoހMBZʛ D1t4IaF !`?k-%GpFzdʔlE*34"O (*pPB]tܹ4 瓝[^ 7֋+CzZ>Q+[a"6{.1je]Qj2wR)%}:?-R5S $G@LV!ds pA$`$.`ɦ8|ȯ e${F3)|qd\AXv}dyjΫXn2 >-=Z4`~֧XM+ 5\*[t{dJ#Q!,5[KW liSQ%$3# ga gcS?"Y9#q}cͲӹ4b0I,t1I#0qK]-<j+ى#`'R,qJ2vhE MmRuHDW:[vX#|r$f:䁰oGfmEȗ6e0exdIj+Ylr 9kD 4ZA7ڤɲ1.y߅"qu(nZ(ӫ_Dy+dVŞί{ED ФŌRdV^K 5 ]KL194*2=!0{]jd#?g aAE=-ȥD7lB2?㍡[^C(7P‘$#Ct9' ̨H @~2 5=K" eBco,)@ >x40Xd1Gˌj %FL;'R=޳ bǭq|ܜʺCp` BiCi;U AdW~8-,y„AT%tΩ*l%)2{`co{-g MfQp3cGH'>FjY w'.V>6IFH.΢ RoMxVʦ֘#ӕ3yωLAM@Lz wCʋw[ *d|H,2R'Z_.k'q"K!k D/V@4iNK,_37AhWҏyEU!qj pT6k\%S1oɗeSdi+:mP y< <4qO hj\OZe)u4NcȚ !5unNŶKFܙsRݽqU{Li(I*pvJ4=LF@Uf*-KK+B4Zxs(#%m(դ'X5:%]"-05w`e0u}a]' 6C[B {6neUWЇkrfHX]j27ÿ0#g9q&:9n~14B_*LAME3.100 2J.X6 I?8d 0R 0s5X@1J$$1oT˟(<)5/B\, Yv̇PWdlϫ/V0 M< <4"qGn5*'ܾMΨpj|Vz!Ȓ8[@,;}mpUdSPqb$) ,4F!TD)cÆ;$&m×S9qf4^.r9jϨe 0 ysCJy0)(1!H*<~66B!XooVïQӵب?jggFti ;e -,K<[^8P 2@$YA%I! wGLgG1DYwSIwr"٘%8¥{Pb]D@]cuw <4ȉKsմ9ꓓ]וqԶp 2̧Fm@0rf\c#cc0tc"(|][fGZO)vY9\MV(2[30HMy?XF!%ׯYTeEVzQKFA2|#)%z:&7.rRz ZވP~7'}eRސ,w5ͬe28I.mr\X1z \}+[)F)'B V>2 @AY (FH2d l XCj0RjF_!,Bu^S !&ob<].㯽ĩ WQزl daг/>0 ŇF0{4o#슋ŏ ()e Θ]$jgC) ϫca K^SXGQc' ͎|fb0sT0!m& \b@ %EdGgJ<{O%  N/LTh6SJLƜO]t AҵONgJFZYY aǝ-JG{tg(&sgkDA Ys18g>/5-cDpREʶ]44.X Cz X2QS`a0J6^(JAzp02[<dYDX!UÇ̾€7g F2lAnhG fdngл/e A-=Y4@#Em͇ER8Z9a0LaXB}CDWly(y /s& 羾ӛq>i*yk5>Sg+BZ B١/!hʝױ$ . IlQyz. PYBk:Gяգ"8gQ`:9kdeuCiQk A =J@ZViQ_~Le @ $, (EqO@6d(ZQc6,FȞ024)lw/*G zl#HmKYט jhju$>dj+O? ͙A 4/*Ivǐ,jxW:Sԙ"}=d虡tK6u7B'B\OZIhZ4n[Aо鉋H$TcKl @I<i؀6. ddɨL5q_F>]p$ yխ_B"iI.$$V.3+ ǗmiO͝aq}ljpP*ǣ}Πּz:5RGsg1Vη6wW"-z+mzD \ .t[" NeY@qXUgh$\EJܞJ(C\ziL'i"P[3YMQ3o}6r5qG?ym.6+H",| d`LWDVPZ7Q_B@@2F#Z 4<d%Y (xPpцd,M(i[ %@(v#8' W68[l C݄ qmlD9j9+vK %d[jOCO^ AGL4rl*Y~[" nUt4 ~NVSu9(:k0ngQ#WHN3dէ_)º4g幜sK#<(y T*ڵ!(j4U9k,y* G"x0qv 0xĖVjTp"i` s>[*I"EVR[Tߟ=Ma ,PL:"A+&H|`XPM%0L͠CIhTU:IE#G= JDu\i{w!3IZVnwnlN {45yj}璉mP#n*=3^ mוּ5hJ$^ ` 8(q&N>x]zr^/^oQJ0B )jK҇(g1 VJ h$Dx7Er.|M-ADYL B):L:Xd(dbjPKOnP E< =Z4TW16[hwjߠg+%"=#zƉZv$qc_j8! =Xi:XTLTg*A-C  "&Wvvd)-A iŚ1b&<QOz0Z-"&`\YMI_k}qkwCk{J7–bt+GN8>+SrEHmUu Kzbb  徯J"W|-MnU@!I %F$(г1nJ- `-̡LW() 2XWxVd< }7lk(?"h2da[ A-=y@4ΟW*SaUj tKU@?aU9e0nPQ? )?S'\1e~@>uwJ2gc;>?bNs]p)ș *C \ a P@0X $lɐ H dB;B 6۾29?%K1fPn2!dgV@ :eYP4r3QM(74#p.k_DQ#1ZǍXXM&UٟzHRQ+I2g@֑ P}G(~ER]HfHqbȭ'[vC8B h=,({j*eK HR۲gph̅ 5Ju|Qa1H?_E F$RЧֱ"Xn4Y;T978(d6t_BflZpӏy,0|Xfpɕ$D/G/ʗjElC@ 0C&h΍* X$ؤ\xaP-R2U ҉N +&lG,&dl+OW ݧ= =[4Sh/Ps 9 |aqf *MHJ/ G߼g֢8nļ5"tL"-ʷQGT_ƾ <~H;оEPF\ V$C,{(4K:E[veWsɐ ś ҭ(T -az6Ib|wRgg?˿W%XbPgYݩu$f@j(^ cAW*˕o<)z 8(⇈zQ: F7e3p'% CT]&@6b3TDD8ɂ- 4YaSS>6eP]djOYT B4G9mfToѽvQ'Zw lrl>կr^x8}qlDuZS΋ 6 0̫BnMvv"& Mlw, N3SiFr0u I H0DwD"0+V y 2P$ɔNc*D*nA>wQa}f3JNCH! Xy^;ԍ VI6-v$l,RJK]P_8&P's1zԧ-J])R(R3I,XC#9H 2Xd$ہb†@H(8V-;faL( K[`MγdmNXn 1? Z4XqT*j! BhZQӓ؏+CH?'e,.PL^6W<۫YnL}X.n#DeH=\4dĈ{UHh2ο_.}[M3ԆUkj+7u,Q+DaͭJ mEu-=^JUƄ;>0,Xb&\D11B>bVQ0dzpe + u( ݛ!s!V {S>4B=1L =,A=ۢo,n=1ƫP%gaJ[ohbQ[Qw:kk꭯u#~^_J78ZJŚlTos·YgyJ3:&/{\䪵!`gEP$È%$5exN@( X,xb$Ȕe Mpʙ2_v< /#^CԸkf@Ư.X:p) dsb!_,:0C"Hȱ-68(*j052B0,\q1ooO#O2ƀ,Q0RACVSla26fnXѢ! [P2H8g8C8"*DÇO!zKDYZj^Rf䬌*ԔT@ ;S ˜sT*_! #?W\ѢC͜)'.'RÝabmɱXМN塥Ds; )m0kC,!g"'רz$F=WX , xP Druq0a5c ٳ: =@4 .B檡 (L߶W==l|B%"oǧDL VW.}1ICbNȂdR *e 64UA |RO`Z$׌H 2e\n,26Ɋ0@<갅b (-*B,hKMj>M-'hRdlYT -> =Z49@"Hd!+/ skgϘT)4lM/ _6Y賭g ]!{Nm _LJ~OMfA D@p `b2JeìyTH14#T$$6q Y* l @,$ӿ&wCY,5MHSXH`Yu/x`*B"8] gc3FX: 6dtl6J RILO=s@D^`GPcHdӿv@sU~KAdmO/> ><4共dVRJrQQxYi\opz =\4=wbFIsv5*)= ?#-9T|A]@jBJnIBFH-c $nܣ%]֭X jb.+\oYi+'dPHp>X]蔟>~DE tL,RsqCX5S %RM9R%Cd:'O`*ʀ r`A&.@ % M ,?Z '۰ dL |,.X-CJb2ܳ.n-9qc~WMe+zGڽBR N=ڄ_z5 dlP+/W Q$y4tڛOFE. inOe#`HluXdC<3pH0@)Z[D,`+1vh^+.NW ]?+kE,A&A̾b{?v*9bE(6d^h38cr = <4yf oZypȑʣn~/d9B˽ (=j\)>Tm^gV!ZmU' $'AJФת<کQ]#:R̯*;y-Vhn]`{/*@]P`-2Hw1D-ӌ0G($5+ w$ L\F50BCV@Kt*,P 2<Ā):h7ܧdl+yn@ 5B4O{c劉`0,=*A{E@_^a49XL\7ysv}۱W5 EidT.sP:L=#qd:oyRVrF];,^vbtEfpL Y}$-%5O D4A580"i: .8B}W6VR]tњE_Gm2[(EDefP/BZ;\ka*F<Aquox>1ta :R1*F :nqeԿz;qV}@$<sF0 kY7#PxDZ PL /M:8EJrݢ@d wdlNXn %> =Z4\r4(fL#W<ف+X["߹_z^h^".+qpdIK:̌MKl/dwRl%񯏛vuJRbz !ؘɨ.^fRWЯ@ |ʕg)·6ɚe(qs}"J-ok'AL@w3i!vt\C:rdIc2C̵"!Lg)ZfK69%s{?Glz^qLb'>]\:.#/3^u:Zuՠ\&I3 Q@bSp+1U%ĪJF oJ!BK`d*ET2!*7U+´YQ.<kL*ldlϫ/V )< =4 \* ?(=\4{j &S)ipJ\l+N:`Q}}˱_W,p1pwtI4WU Gd&(;I@p[AԨB3g+xcI8q@ekP!C%$`C*JoCQ ;`0lBT#,WY^D$ZgqE@kz+T&⌜-+Oo6njy,lCBVRqmW틷WwdYe>/&= $[kjMR@(1PBH=Y`R1(%,T˫q hjb4+D28+bCD8mH\"CT ZdR">dlO/W" ><4%  ?,A8v|[8D1eiX 0"^Ğs8I[}iTG5j.;Be/cX.ac量QޢǥdK6qn#3$C Lb/J8Tȣb!IN^WYrtxk0|GKmY Dٖ)H<x$c84WuaB ݮҺujL'fn0g}"篹= G%;TBY5wFƆHpl?AWͦoۉ$n#B #TEW'Ȑj8UA W"=rdQ?@pD!HWͬc:dċ"[Arc-ءI"d mOOW 9> =\4c.D-0: :mYŁbL5 Q0)%I>?N׹+\E{(Ժ*U7y\L^qAwC@!(j*h ׵T1i"ARA&Z^K@] fG Fw4 x/ 7e-5z I^̳d%7c HZ#u5t׋ ŀI30WnXNEfUL'dEgRK/DP De445n8jswg)]_# X/PL)7ڛplkWdαk^G3 bj0Ÿ*6L*O'q4 `My8A TU hp,dkf:H1$Y X wńY@RLjH4B qŇϙbPÓTwAX+Vn[eq 6L&MΟoa (Xkw: gZ]:-}%K a~ʒt-#74mЕ*/ШeDA̸p.0Ĉ8S =ꚙ6 rD C#c!'CUY$A2I%Pd1lO> %:=^4UN K 8Q4yYPn_DiL\iDå[ Gf-DQ8w }_507!dlOOn Y> =Z4&f(KK wc♑l@+\Îo* ؗ}OXlhKШ^҂Mnb^Mmy/ۇ?(ZBtVA [ vxf (0;902iJ$3P9*a 2P:J"-2C֢tf%Bb[w-=O]GO|ь>S 2GѢ~9/OGY1) ^A#z$抩bTKh!6^E=//JQRRP@|@Q>&D`12<بBo5XaGF oɅ)MxBEQ$c/#ϚȶEgdlO/W" 9<=4. UneecoYx=n..$:uåB'v|T]h(~ לl ͅ#T^[k$H/yF\ 'T+,blm)fp90\pDiLiQ25js!hXWg !=l*mf5N&b3Xd}eErO5$GS4Vo@.ǒ촆fUDAU#t2P㺢c&9GK:ejC=ʨ@ JdB@Ƽ`1D~%^V.en(-%Rݶ4F( DDRe 2 -dlOOV ]>a4ޚN2r ^bA ǚce/~׆L]qo#y= *,}DQ*x.60[?t&0<$ɫL IRA*UH?"ٙBxʱ! (CMVYI`j˒DLMcR%k,Qeސ= nќ3Rc ,m#3dž"'tlMOq{ bi|+A7h 1OIkQ #=Cz^g:@`xPæ*M1da CXى (J@xG2q@ _\-bD;@ p '#OF AdlOO?" M><48@;%crl<\QfC N @Hր (r)nE]1t-MLfL>G;QvQnOv*L}z48jFdrdYe gXPA SFxPEd!$pp2] 61 BogD` )aHR-0fs7زXUdȹH+ԙ!gxusrxʙ4#C()T}D$U22VFIڌMQXlT| e#Eh7: tVBӈ,ye̩QEHlfujLAME3.100dvmP-j` Jٙ42QR5Tr$.]BJBr_r0R l93j \7 꾪l[7ʯ"DON**v (;:TP4h6 LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUduABDFHKOQSUY[]_ceginprtxz|~Lavc57.10$@B^PXd;#0 Y40} `>!A@>h $,`"x4(1>;Lsb!䆠"hԓ&Gk P[g'/d*W\-/+zI[4'[fh87Ƶӌf,!*lvI\[Yq z G?lEmZwLÚI0R f&a˹eIjKsK @D 0XhxAQ-IJ ]Vb⢮d `Vi _XUH4#lJFAbŊMSwKSj|\F4w|Rcw, F+2t[k0Rz\k՞KRµCҰ47F%u+`vΔ.Hb ;g!{j[wv$"x)-ZE~x^O8\FLT)T9b|ĥG> [!hR2 UJo9=Q8בe5-vBӟh fpCbCu&0jfJut;QJlu,`d@Pd ]RE E~+’ÃtQXesʹ~@D7QrdcB) mT-45B)]?ٵ1b[Nfвb̨$äRޅEi kWAyV2e+ N {͐ 1i^+WUTuhpz%Pp`D?ۥmCKhYufY-rRrx sk)rCoxõK\^[F:ϯU-wK/yxO=&*r%% -eF}Cm FA5{f[u&h`[r_;~wws_bJLAME3.100NJN< ^q!XK8in0%$arاTg‰EH J_Lvd AԳOB @X̰4k'YIO7S~`ܾRAH:N37y WMskZNgƐmCx/-x )ַPAl+ !/rniE' aqjdo}ިxäq5!ai&`8yrDfs%<\[BR {V$P  (EiPBQ #X;4d&dX*kC,g(5Ҕ-yb#Vr͵=JpiRc>LAME3.100aހMP0 ƒȬh"JQ#0$2&EYC_Z0JhՔ ):Ȋ MǵOmKOV܊xkm*R9$"dvERl5 I-@4(ʺcSW\Cl'$wu]TUCxwu9z ȸщ0[0дrx&8 I rq-V8@JQP\иY82k veD7i8+iL_}V} 8B8d2K94O/MJ&d3[D>Q}ǟULAME3.100UUUs l@4D*@a@"DX PPhj ۨ!L#8bR/!u`P B7ULقE$'PӊE,,Ckz!ziYb:VKQdgP l7 @ ^4ΖEMOoŪz]E%7K:# KM_߿(Nnq X`.3BbF% *+f\oJkY'2L`ALtXi (u{_d 2/ 3*ۡ]] 9dI2,(yo IN ʱ҃@x+ \E?4dtʰ_=VحBdgPoE 1<ao4=9uQ\+DC I*> ˼t(O*YqE/:㲲XX͗V^~ZF0aAB'04c#ML,h/p-[ (:cUz! F#5fg2 $ f ;ާ.6Gr\̦\EJkT;ϰx ]j%wu=^2a!#j5~qхkdsC|.^q@qO`esԥL~]`o XE+IhW&^vv㡁D6HEf'OFZo J:mB?2,^NpUHxHdbjP o= DLH48#3vF<Xnx!S*)Xt5 UDqP_Mw4ȥe'}# qto)ᷳ ĊG8|G,LNԓfpĬmдHSo,AI@ pUyDdZP2L*jK)p=+mZ&WSF 3Yѵ+{=60]&Wm7)it͈95NP--JPiKWDռgG L}*Vrbe,%f;]LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUU"1JGu c)ih V:Q{ޙx~uQKcrw065@[:"U!Oe)4gMi23d/iVkL{ QYM04aKG 6ʤoP#u5:A0HdfDhg/gضyE'@ᆮ Hꇌ0ɂLT00!RDmd*f?K RfH0(KOӋ)# 늒;쬎EUrqw "F#L6aY  X׭'=KNy,G6IU r,a-ohqzM8u;ֽWK|. SGsLAME3.100UUUUUUUU3"d4 `!(K+6rd0~k.ii,_ό5nKR^/=Hd?ER"NĥmuIi$rmGϵ6:<W 4GdL+IR Nͽ+4gZ,()&iǜM3796Fԑ9Np8ZW`KrgS3ѽ~wG`&XP6"3D<, \5a *Am'2$Y,jE`騆>2ؔh<$F[v$1jw>G9kZ](tqD֩zCѺu-BO~hϴ}[CŰH)A֓Qz>uP 4`wF$dh*LAM*s xb88 8SVJ@́ ۺpE3%|=d 09;RS:ڶդ!<| &Y! V^ѡ%CE7B)(8X0Jf`A!D(u ," 㤜 "gL^1_D .0k1kNPu* -p:ҲYde3l5r %D0(h`!I Qp0 b@ jD*7M4( HE{d.e4{9͟|G 6)J[zw qv&w9L,j||zh&Ί}v],bGtzo/RgSe5Ŗd.?l B`$3Q /9@x >5"+ Yj BAU4,5G $!xdԏo CT5`RƟTצ_W|[j V/[VCP)DfYEdfז n>t43ĂqBȯ`Vg .vm} QPr$T| 0i(PDM! pdd\W*m-[r %X(\F4 }П۬*ZdHhcp ]< 4;և9VbS A5p)ߐ/ :%X6a"r|\,٬7ˎ\ӎ-oy,w ULzoU@Kw4t aRX0R(* !i;;;0nVq|j/|Py&{v@W3?Ӻyb:۫o BoW'VC+/H|tɫ5Z~QCnm{te;F6:6PTpiL,L`XP 55B %he`@:w"!]9X6"rMzu\>x{w9ϠMj/NEz(e_V>ڠ*djOx[t OL4%q՛VF"[#K,}Q"b1{Jw,Gv׷}$55hυ20 C EFI.Z ` $`6Z ;Oe i BSl\VLHG-a;,^/.`nb=s]n-RY%hhp{(m{lP &X:0K X !Nkc*˄Ȍ  @g Lʅ$b"kӉqb޲k{zS}d ~(2(2* YI%#!J]Td'ϋ Z3US( cCNbdgϋOV4 Ba4I2sTNc11Irg{ HXh$h@xG7? =ReY^ڣ*|fҋȝ~m+ Zafn꾹Z sӃm LF]q[h;q,`E&h(K<`eca1hY)K"$Dy9O0We TvPʺ$z&q"6WWd.+$!Q1%h#88sJ3IRi%E:fȌ/OȷPi`EZ*O0u`iʅAZY~Yk!+e&L+ 8ZtaFDM:SPh-etp9Rz%duhӳOcr Q#R H4L躄M4y2r PvL>h\ o [eGlJ-q@w!б|NŊTU:.u64fC,g0[#\چ3.UR*S$NWD;j\EVwO!iaFOZ>1 p"H*A8")OBRՉ(/?T!j8.+0 "iq 4 &2D+ 3 EYbmHbj!  Cg㚉%SZ3S11ztvcXu)֤V_Dd jQo4 F=4$jW qǀ]3JSSpg~VfTqQΚxtP`hh}_)a2 ΋[pRq ^tUH2Ǫ3&dRM=LL kdgPoM I@ͽ74P?J x$縷9'iCK5%_V퐖 B:knX樼Gkr}R`ʕw_ֆ|ID..#0&,X^hX)LyxڝW7&4JI ,(vTjLUP:$JOZ3Nepuvb{{5'ZJ2m3Db,1 FE*2Z`KaMx#2^6Tә{ŇgB]f x.""_{J^ڌMddh;i7 D64_Ш8xfҜ7vzd<'~LS,Ǹr;sƞ9T5"pE3ԣ/kժt) S[6ym%L M4Pa T'y*W0i"H lh/+{NM  .۰+Nt)5gID4fguZIT-{Tl,c5HĪ\ɁǛ.,8?yI9GT3Wdmxy7ċqSٌ8jz~k U@HQlёPf FfS)Sdqhbu` B`0HeY.fNf=f@!  ]BQ-YdhLO0 >mo4m@< & @(cTa]P 2N}/pd 0LBaq[}r}u @$Ѝd"h,p(%^KvJ48줰(yZKA{T Y{E[H(Y9()Gpp (J|*&ZP5gyN%"&Ёܮg kg4xV:˅ %<ĦTĶʰr?jXJ%u)cO'-hj0>*@P&*B N 2㥔7-1(]l$YM0 Hf, :m_oUJȍIXH)a6$P>b:ӏHYƒGfd:hSH JM74Z3̿nDY}"c-K?>z1^ :) MjA&CNjD D3Ǭ⪒/O,?5Lx 10yt]R;D)kjxx:dEG]Ix\wGG_]w*!2"s12ؘP %Fp@A)2C^Fx“0i}"7"5 ktvaѝW eĈLki]h>,q^=Xih@:<$1dsQVCI L 4'#VI0D(,)+$nur1$lPh Ű #R ~+&qo+^k0sdĜɢQeY\6%CW1Yir#Q[0I)j%֝lyFRlID"̤Ғ]ű<.Nr:H9HFPt R6' S%֔-d>~ۤ^ jLAME3.100#$dRb#GXiuBW~K1 -4:F&Dfκe[QIO&A'djCl5 mJ-4X Z5 '4{4ʳgrG KBs?NUF]4RRH2y(>@-$MDԥ FzƇ\ WAO3ojgFӲ,Z">0[ez#VJ~䌌|zuO+Q禄ʪѪ'.{'uC ͈. F$3`B/``Ĉ$#$`יKuBT@bKu4P Oh-5.SOU:R(%*69cqHEIf)*EBc`u^DcہzBYY|dgUL5 M-0@4ڇ2XV*‰aHU\D49%ܜvU*jd" )2QF1&9(xs (D(lx&[@ىB 34x%pDK ELP FF(WiMߌ5k76` ʵEZe2eN> ҹm{EL7յQ-j| aTALJFfTHUfz!@ѽ  ~5ݢx6CJnJC$d-S:1+K3#=,3V\>'ZS-aƼ fMdd,*bB!A"1\dFPǁdQr# [uɋ[f7s+Z"#,`5)ʊ5ض$2`E3fDmwDsATdDiQoLb mKM164\k wbf%ԲapAAz;}TWE$gQ%mpƆ:a^\ 7`0㑑$N[ȓn27۳U֎4*)9 ^>!G^#F\ HlJXI4zxn]rCRe)'!L} Y~e30DA Lb[E9f\sIL: !)eRWT@u4 1rΝݖ$ ̡<#Ivv2hfP!? @@dhI| P4+!b Z!P?Sעn-/Txէܒ^eLŔ)*j,> H}1@&8$NJuL6/JhFJj%@uhF X NoèBQNqNLxZ,6rh9) d+kуl6` MF4}'ȴ,T,ˆI^䚡RQ0#.F&ϓ=L^MfQ@Q|ӝ/L0ZުQ3 b6Sj(BM)&Jy ֯ `PPY0DP#`JjP1rjfM"CDJ"P J9;/?Uƚsm\n -Y 4wn9S: 6(/D՘:o NdZbG.K1k*x:|+7X%>*8+0!Go  M08)zT^3./ҎHRYg }RAGwBwO$iRԛקd*~!%dgN2 qG H4) ,Bplh2UWQ֊fxA,ۄ4D¬ǵ REU/}^^P&ۢޙ{wк HK,ŀA0n J:0)7"KBi1QE ,BBB1«C CM9?oUYv}0eC'vPtNky}zQj]-KmHkbq-.eZzieGV/ˢ:Z%4%z?$l%vj3#+qDA6.`(  z1a3E @LU=/ am5 ג1'>pFNۼϊ'q@ZaIJQd!jPl7" IGM4-+p r] Զ'f3e4IxT>Pnf"5)N g]-=xQPJaZP_!ĉR2+f*(`DG@%p@EtX@¤E 5+<@+V$A1ŀ}>m`:Oη 'VJuV64BO37tY4;΍p͙sXiyV7sO e&My>@zuğ88"l5=l+>Wji^:j̢!IS'&3IjaTɤ`(@EJFK;L<)H9$!eM}SJPhRMͨ}]Z{c(mG KGqF`Z|!8OeC~Ud]jOoF ]C,x4 D@; Y-yJ 3{X,.<+,tItRFXGh~L6#e{Rg;P#1^̌ɧZC6 UP(\ȀʫWcZ)3 ŁE6:$h-kԂ* 'LH@!h ܘsQP~4V8cHe[ )$M$3;`J,zȃ#pv~y`j{\% _\%Mʙ<'<[YU緑1͹Uˠ;dپo7B[[nU [(j*t-kMeh24m\ AԊ6ўEqN7a(lMR*S($poݻdhгX[p :-<4"v}O}d3Hu&<.kW\ۄiC,;rB}M ọu I8ϝYYlO qڀX?ړ@HU5ЉJcK <:^(}) 8Q#BIqu#m9 ǥs40wn0{J\W.< 778v; 2gpB'=.5]\<_k 60 P9w`0{%3pAhnme9HD(  Q#+ 0|57PsQQ],vbj8Eׄt8b+Kh6%*9b{&|xJ tdv'{ UÎBwOOW4d`gKLN2 F H45 q< Ϗ7h?xJY*~sYXf{L筀`a#V'BVAcA5!)EzEr*DžLH$P%'T027*A\ёr{lfV;r,{j--xbqRCFAĒiDBh8wqMu@0X"$ϫd龇[47iޝz2$`۹ڋʺ.w>M]rS%K6^ 0s U0Djӈ)%BK#e2NQ@:C;Ll ICp@h얰DZqw G1.td˃tWFg !V'O%~O]T."armLL@%!qZCErQnH[TA]%K9:jrY):w) 5 -f%'KB8E;3 0oĕDC\qGb̹ѣ`A#űMrB)@M2xW"!qE''yKW:Tæi9d@N")_"8txB:EdJhPoFB E,54* VDh>[(OӃТA?ܱǍC`#ݓjݗ#elVV/neΥ:MlX*GJVe&+$Q*D2kH-豋1B,1T@PC4S.yjgRY)t t~t8ư󨑨܉E? oUV+(Â-e| + q)z Pīo Cե)W)b{}V&N@3r AY2%ɊUŁ&"YM) ]3hxIĂ>[l QT4 A@$@٤Eɵ3}HDqJavo&k;db΃Of"  Ḇ<4.s. ,0AYye3je*,2\"!rL~DxCy(HE;Էfbs5ؿJPpBJ34`21-$dߕ2PJc6*# T}D[EL?3'S"OVND*ۂ83}M4k1*Ge>"}Ghy5unIB C҇2|QG3p 0`k5dfP/eB <-=x4Ճ׬C2=Unkjєq=-DL 䈘-p5(iLeŒA3Yީi&Vq=-5i普5>!L0 4w-r[2! vIYgMe!R:# i3#͞C,uTBfx+6%K^yr)&āގo/?d]U+l2 ɑJ 4bvgЕ[g= F&"0Z«QCHA$v]2U`sz/i_*P FpST|`SZH/PuviԒǥ%$eۆp|=}wK|_cNiԔuqksxr"tT33'W0uMLhP92[ILg(ES%rЮ|kvv3TQ rjĤ ώYqPf0!dlRl6 F1{Ge'B/OI"IKկy*А QҠ0 QXXLF" Ivm\EۚюDUlźCVP¤K#JWÇq9+2omSfQQȍ/1XAMd:VC Әh4mXdZ-z0N$ևWJGC1ߟq2Ju"+vhxE5ӻ) -぀b@QfԬh]Ͽ "#D'2y /<#N>5YLŇazF^0a{ʼnpHqdfRc6B B.=84ΗM=F\>Y⬀)f`4(FDd 0Q7h$HDVPA:IR:޿HPV $0M0q'!'a6j35\dc'Ds{;UhFTG}@H(0$LBXT[A`jOTsuoISRjJŽQfɖ"paRդnk!U㺨 'AhRt R9#D6@@JCF bKNKHH6(yk(PZ $&ڝ- &YۂgYi՗\L/#Bx.՞gYLdfCl6B @M84"8j52€~VIYfea ™I Xrlyd|b1B3j)<$G[I)aH\hk8Y!~U f/,( ;@Vly5VcHGGFcxT#[f dJr X"@7^ CF$JS1~:v Fyڄvz#NSp,M7ǩDvG }Wg_m\,P /˧NKgiW8kg{ PvE<4/TQM[1|aZ0ACCEMU8 ~<)*4U` 1\pƣ"h֋bU+0fT; 4&|.J女?OyDdgS N2 -:-=94(X޻=3|4C2Om_#v.H5A5I{En[OsjUSឺh.vg՝V=i䲡fQ]f>NFjH b%B.daƂhs1JED]nbѰ 9f2n4̘@@ED<(<*PMmp]%i&аCkSDFkg$9xFĞXizĆϕAl0VC»~s4Mhʾ1>l!j(}2L qw T"s"#LF rLIFBPÅ&buqF@5V),4$"5tx%z`dfOO>P O`;OZ CdtHjK$ EW(HմYsvKGQ?%Ywbx2eӲm9,0!ND=.Iv~%yZ1@Q&k@nvW1Eޞ>g WZ-.1lj49Y]LUٔ,rP/Jj$i#dhӳxx SS $4ģ{BVW.2 II-TZ$I8 ʅz>$էLJײq"kܙfۥJ0!GuBQx phP2lkx;Y] xt8ql " 16å>O8+RFNXI'*pLu%&|8R_5U;tu^d4 ( 43P2b JISӉ&k ܘ֊Zs8E xYʇ8LɷVɨ50\D8I]+`A@%9kdX@t~Wsq$ L 8|MJ[YdZhU%v}Jy+D!"-B|nSSd^USO4 5H=5H4;ȍ:,r>/%⓮AMՙV\q,IRlndž&7`UΧȚAIڜ"ҟSjnk6o/3n2VL<$@4 aa8(HY3 oD%W|3vCTd+M?35"8.4yTf=c]O܎ͧpfĬ d5C*-H]}pk@aGnmDy C G%mʗOzFlw5R/*PPǰx^`:GB sh׸aj}UHh\2qns:@+9yCs0li0ZT1Hz0&:8q. dlR6 yF܈4B9ҌU86D?ҧHMgM8k &qxHj-,jΈ)ex$rj&v4@$5DH(`!_ EHVɕ#0Dr A? -^16CO^YCajbI+S؀]*E<XFWUVtL@,JT,)hK8 NwINMK!g+Aۺ DJɡj/w,qחCnӎ/pSUz.r{S>b<&gc2 YNG6PifHrebliELAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@InG ZZiI)BN^ ޠlPՔu_d/T@n_>Ezv>iW1dhг/^ B̼4vAZ{*pr.|:L6J]+@jL =J-LZQ!biW2HdJZ+Ma,fJ?quzYB%d3x,7C<,۔LAMEPJ,*B0 JmQ.pa#-:-B8DZ28#ģu=316ճjFyFrZ3r_Xwub1 0zb8LG*juN.dfk >@ @,|4[ӡ9k7%~gwUBM~G!Fqas:'&bBE#  DY0-((b!P)yđ=*"l !6`8euGghX,emz +ʕzi}(&M@9L֛\yYjXKbh`3*k_"l(8HXfG;٪=z,e u|ړ,D[Q ~_S[Cu$ D) 4@p hGTbIXIql6uEVTTtEmHiV f*E 8D=WאqUr_4ڥ(̀_ Dǎؑz(QMd#hQE 8WH4 uY2pelyt:w涏7 G"LAME3.100UUUUUUUUUUUUVi:f2ж#IW JJ3vDR.&Rj//BGF^D ݨ\w.D)=ђ  x9y Qd&dj/V@ : aX4RޮS]@ՉR|-ܻS;pgpr[:On2u6H{|6`n>'-ˬZLJHBThTT:fZ p#jXq Q^.T G)R#'J̓i$@W'CA-_Ȇ]}nUv~m LDGTz?J-%6MgyA؀q pWh+ cG1S$\"q0+7h%TZ.O4OW5ơnݺ6zPnK]TOv)c&&&\]<}v[c }y(?#)"-*2u5dl /> IY4V%L2N,XQ1t&LՁ !ˉ28V/%d]@DS DP 0 ; =z4lUTΔQ|SkRAr%#}"|%9J\j0eULJv:i[ nx˫i,(1D.v=ei^Ua7}4%(@rtP}v;^$3s.!X4`W;eģBt~I48d2DZZɺYVX&`M(Ir!S÷sKžc\Nlg8oZW۷*LAMED0%(c̳fepJR:zl T8^Mphnq9 `%^*ȝ|0ֹړx enj$B3tgg,4C[pRk%dl+O> 1> Z4BuvOK7(nͿoMlXq$k@ IPʌ"fQ NEjIJ\bڿ+~TA:LB 8@XDJ3S2j(Rl)q cߐۉ1mU E<tnM%URS{G !rIf[µW`mV_H`Ȕ k#[ѹ _ 2T`躸xLש#0 ұ}5nEț3*J48Tz*fmQ ,@:8l L13m8K <FA q2/joYZ NJVmވ)/~YwRR2VHU۽^i5dl+OV >Z4l_YxÖ%~ P*IušK?)J9n4rܖml2)QLY-:Z/"ؿL8Bԓt&b?e48XcN9eXsnbIrE 0E[ J,Wʠt*dk54{d 3*nyE䐋JG).~mY %sZ!emS4EҶvYvV2Gnr~CGc䟟~J?;1^477'>F̾WbsX# h \ fsڥ5L&L. c蹕 mᳰIs#“2ʺ)`\> )LsMmda΃Ydr c< =<4BV+QxPb[xw'<|4*sb UrEWu]٣=RH?/蜽B/)<~l]]?is)|13 td-.ûK"+N0(s4L8]Sh0A-X#;5w oFR 0cxF*L<}­DO0)1>ad+kY8G5J^`T"j--c gܡKWViX>,6Ou0#Ve3*HʓjK}BΤI/nY9\7@jF@EX5`DT$*%*eHKd&-` t) F$쥝‰F(>ddgK/^ 8 Y4#5*EbMp02b7ѵTDm @ʑ }l@:tG(>##?eeEhzKrɉM?㏫hF"$!R%HD(9 9  ;h ֚jCҡ8舺@dD܌{E6HEG^PU$5Rq]ڲ B&BZAG{֑ss2_)k)IH/yGmƔdo7 k?ÉO}:jb=qKP8΢"MI7FeIxuV R&,MtI2XAZB0b0ArfbI aTCd`jVȹ)qɘ `\üɆae[Rb&Mȴd:e+/>4 m; =YH4]6j]_aIT`p,OZqw?lc >\T)'2#N8T:07>1.th4ndB}͓<-I= CK,(S|kޟaz0y1z]ȮQx%JQ[]eK1u*=[ӊ3[b- )Bp%34Hr1ͻ@,4$rZi=wL*DQ 氩c@Y}BJg?⽾D_:K=rb_֤>+N62rQ\GN . `-nPn 3h\G28˃$\sLe@0Sɇt&Z(X83`9VPrCT 4CV9BO"'LyAZa0Ev_)\4f-| djO/>@ iC,Y4Dmnj='O_Qn" _޳‹m+yJ]kq"ˆi z\bLPE<>E36iЀ$Cؿt~?N 2xh1"(xCRN)ZjeL9VU Y6KT6{I!VYrWV>Sz_On3R:5t]>f/&D@q"9. ',BVw8d!@Kw-9~Q3뇎2s,~؂Z̐3u *@$u,@IA(ר}6'=NSu\' GYIAw-,==ڄgw3c} [{pWdsiΫOW GY4$Pa_O^pӵ˲KB]-\{T煩u)P!H =dll"7{YOL_zɪ,M/'zoހMBZʛ D1t4IaF !`?k-%GpFzdʔlE*34"O (*pPB]tܹ4 瓝[^ 7֋+CzZ>Q+[a"6{.1je]Qj2wR)%}:?-R5S $G@LV!ds pA$`$.`ɦ8|ȯ e${F3)|qd\AXv}dyjΫXn2 >-=Z4`~֧XM+ 5\*[t{dJ#Q!,5[KW liSQ%$3# ga gcS?"Y9#q}cͲӹ4b0I,t1I#0qK]-<j+ى#`'R,qJ2vhE MmRuHDW:[vX#|r$f:䁰oGfmEȗ6e0exdIj+Ylr 9kD 4ZA7ڤɲ1.y߅"qu(nZ(ӫ_Dy+dVŞί{ED ФŌRdV^K 5 ]KL194*2=!0{]jd#?g aAE=-ȥD7lB2?㍡[^C(7P‘$#Ct9' ̨H @~2 5=K" eBco,)@ >x40Xd1Gˌj %FL;'R=޳ bǭq|ܜʺCp` BiCi;U AdW~8-,y„AT%tΩ*l%)2{`co{-g MfQp3cGH'>FjY w'.V>6IFH.΢ RoMxVʦ֘#ӕ3yωLAM@Lz wCʋw[ *d|H,2R'Z_.k'q"K!k D/V@4iNK,_37AhWҏyEU!qj pT6k\%S1oɗeSdi+:mP y< <4qO hj\OZe)u4NcȚ !5unNŶKFܙsRݽqU{Li(I*pvJ4=LF@Uf*-KK+B4Zxs(#%m(դ'X5:%]"-05w`e0u}a]' 6C[B {6neUWЇkrfHX]j27ÿ0#g9q&:9n~14B_*LAME3.100 2J.X6 I?8d 0R 0s5X@1J$$1oT˟(<)5/B\, Yv̇PWdlϫ/V0 M< <4"qGn5*'ܾMΨpj|Vz!Ȓ8[@,;}mpUdSPqb$) ,4F!TD)cÆ;$&m×S9qf4^.r9jϨe 0 ysCJy0)(1!H*<~66B!XooVïQӵب?jggFti ;e -,K<[^8P 2@$YA%I! wGLgG1DYwSIwr"٘%8¥{Pb]D@]cuw <4ȉKsմ9ꓓ]וqԶp 2̧Fm@0rf\c#cc0tc"(|][fGZO)vY9\MV(2[30HMy?XF!%ׯYTeEVzQKFA2|#)%z:&7.rRz ZވP~7'}eRސ,w5ͬe28I.mr\X1z \}+[)F)'B V>2 @AY (FH2d l XCj0RjF_!,Bu^S !&ob<].㯽ĩ WQزl daг/>0 ŇF0{4o#슋ŏ ()e Θ]$jgC) ϫca K^SXGQc' ͎|fb0sT0!m& \b@ %EdGgJ<{O%  N/LTh6SJLƜO]t AҵONgJFZYY aǝ-JG{tg(&sgkDA Ys18g>/5-cDpREʶ]44.X Cz X2QS`a0J6^(JAzp02[<dYDX!UÇ̾€7g F2lAnhG fdngл/e A-=Y4@#Em͇ER8Z9a0LaXB}CDWly(y /s& 羾ӛq>i*yk5>Sg+BZ B١/!hʝױ$ . IlQyz. PYBk:Gяգ"8gQ`:9kdeuCiQk A =J@ZViQ_~Le @ $, (EqO@6d(ZQc6,FȞ024)lw/*G zl#HmKYט jhju$>dj+O? ͙A 4/*Ivǐ,jxW:Sԙ"}=d虡tK6u7B'B\OZIhZ4n[Aо鉋H$TcKl @I<i؀6. ddɨL5q_F>]p$ yխ_B"iI.$$V.3+ ǗmiO͝aq}ljpP*ǣ}Πּz:5RGsg1Vη6wW"-z+mzD \ .t[" NeY@qXUgh$\EJܞJ(C\ziL'i"P[3YMQ3o}6r5qG?ym.6+H",| d`LWDVPZ7Q_B@@2F#Z 4<d%Y (xPpцd,M(i[ %@(v#8' W68[l C݄ qmlD9j9+vK %d[jOCO^ AGL4rl*Y~[" nUt4 ~NVSu9(:k0ngQ#WHN3dէ_)º4g幜sK#<(y T*ڵ!(j4U9k,y* G"x0qv 0xĖVjTp"i` s>[*I"EVR[Tߟ=Ma ,PL:"A+&H|`XPM%0L͠CIhTU:IE#G= JDu\i{w!3IZVnwnlN {45yj}璉mP#n*=3^ mוּ5hJ$^ ` 8(q&N>x]zr^/^oQJ0B )jK҇(g1 VJ h$Dx7Er.|M-ADYL B):L:Xd(dbjPKOnP E< =Z4TW16[hwjߠg+%"=#zƉZv$qc_j8! =Xi:XTLTg*A-C  "&Wvvd)-A iŚ1b&<QOz0Z-"&`\YMI_k}qkwCk{J7–bt+GN8>+SrEHmUu Kzbb  徯J"W|-MnU@!I %F$(г1nJ- `-̡LW() 2XWxVd< }7lk(?"h2da[ A-=y@4ΟW*SaUj tKU@?aU9e0nPQ? )?S'\1e~@>uwJ2gc;>?bNs]p)ș *C \ a P@0X $lɐ H dB;B 6۾29?%K1fPn2!dgV@ :eYP4r3QM(74#p.k_DQ#1ZǍXXM&UٟzHRQ+I2g@֑ P}G(~ER]HfHqbȭ'[vC8B h=,({j*eK HR۲gph̅ 5Ju|Qa1H?_E F$RЧֱ"Xn4Y;T978(d6t_BflZpӏy,0|Xfpɕ$D/G/ʗjElC@ 0C&h΍* X$ؤ\xaP-R2U ҉N +&lG,&dl+OW ݧ= =[4Sh/Ps 9 |aqf *MHJ/ G߼g֢8nļ5"tL"-ʷQGT_ƾ <~H;оEPF\ V$C,{(4K:E[veWsɐ ś ҭ(T -az6Ib|wRgg?˿W%XbPgYݩu$f@j(^ cAW*˕o<)z 8(⇈zQ: F7e3p'% CT]&@6b3TDD8ɂ- 4YaSS>6eP]djOYT B4G9mfToѽvQ'Zw lrl>կr^x8}qlDuZS΋ 6 0̫BnMvv"& Mlw, N3SiFr0u I H0DwD"0+V y 2P$ɔNc*D*nA>wQa}f3JNCH! Xy^;ԍ VI6-v$l,RJK]P_8&P's1zԧ-J])R(R3I,XC#9H 2Xd$ہb†@H(8V-;faL( K[`MγdmNXn 1? Z4XqT*j! BhZQӓ؏+CH?'e,.PL^6W<۫YnL}X.n#DeH=\4dĈ{UHh2ο_.}[M3ԆUkj+7u,Q+DaͭJ mEu-=^JUƄ;>0,Xb&\D11B>bVQ0dzpe + u( ݛ!s!V {S>4B=1L =,A=ۢo,n=1ƫP%gaJ[ohbQ[Qw:kk꭯u#~^_J78ZJŚlTos·YgyJ3:&/{\䪵!`gEP$È%$5exN@( X,xb$Ȕe Mpʙ2_v< /#^CԸkf@Ư.X:p) dsb!_,:0C"Hȱ-68(*j052B0,\q1ooO#O2ƀ,Q0RACVSla26fnXѢ! [P2H8g8C8"*DÇO!zKDYZj^Rf䬌*ԔT@ ;S ˜sT*_! #?W\ѢC͜)'.'RÝabmɱXМN塥Ds; )m0kC,!g"'רz$F=WX , xP Druq0a5c ٳ: =@4 .B檡 (L߶W==l|B%"oǧDL VW.}1ICbNȂdR *e 64UA |RO`Z$׌H 2e\n,26Ɋ0@<갅b (-*B,hKMj>M-'hRdlYT -> =Z49@"Hd!+/ skgϘT)4lM/ _6Y賭g ]!{Nm _LJ~OMfA D@p `b2JeìyTH14#T$$6q Y* l @,$ӿ&wCY,5MHSXH`Yu/x`*B"8] gc3FX: 6dtl6J RILO=s@D^`GPcHdӿv@sU~KAdmO/> ><4共dVRJrQQxYi\opz =\4=wbFIsv5*)= ?#-9T|A]@jBJnIBFH-c $nܣ%]֭X jb.+\oYi+'dPHp>X]蔟>~DE tL,RsqCX5S %RM9R%Cd:'O`*ʀ r`A&.@ % M ,?Z '۰ dL |,.X-CJb2ܳ.n-9qc~WMe+zGڽBR N=ڄ_z5 dlP+/W Q$y4tڛOFE. inOe#`HluXdC<3pH0@)Z[D,`+1vh^+.NW ]?+kE,A&A̾b{?v*9bE(6d^h38cr = <4yf oZypȑʣn~/d9B˽ (=j\)>Tm^gV!ZmU' $'AJФת<کQ]#:R̯*;y-Vhn]`{/*@]P`-2Hw1D-ӌ0G($5+ w$ L\F50BCV@Kt*,P 2<Ā):h7ܧdl+yn@ 5B4O{c劉`0,=*A{E@_^a49XL\7ysv}۱W5 EidT.sP:L=#qd:oyRVrF];,^vbtEfpL Y}$-%5O D4A580"i: .8B}W6VR]tњE_Gm2[(EDefP/BZ;\ka*F<Aquox>1ta :R1*F :nqeԿz;qV}@$<sF0 kY7#PxDZ PL /M:8EJrݢ@d wdlNXn %> =Z4\r4(fL#W<ف+X["߹_z^h^".+qpdIK:̌MKl/dwRl%񯏛vuJRbz !ؘɨ.^fRWЯ@ |ʕg)·6ɚe(qs}"J-ok'AL@w3i!vt\C:rdIc2C̵"!Lg)ZfK69%s{?Glz^qLb'>]\:.#/3^u:Zuՠ\&I3 Q@bSp+1U%ĪJF oJ!BK`d*ET2!*7U+´YQ.<kL*ldlϫ/V )< =4 \* ?(=\4{j &S)ipJ\l+N:`Q}}˱_W,p1pwtI4WU Gd&(;I@p[AԨB3g+xcI8q@ekP!C%$`C*JoCQ ;`0lBT#,WY^D$ZgqE@kz+T&⌜-+Oo6njy,lCBVRqmW틷WwdYe>/&= $[kjMR@(1PBH=Y`R1(%,T˫q hjb4+D28+bCD8mH\"CT ZdR">dlO/W" ><4%  ?,A8v|[8D1eiX 0"^Ğs8I[}iTG5j.;Be/cX.ac量QޢǥdK6qn#3$C Lb/J8Tȣb!IN^WYrtxk0|GKmY Dٖ)H<x$c84WuaB ݮҺujL'fn0g}"篹= G%;TBY5wFƆHpl?AWͦoۉ$n#B #TEW'Ȑj8UA W"=rdQ?@pD!HWͬc:dċ"[Arc-ءI"d mOOW 9> =\4c.D-0: :mYŁbL5 Q0)%I>?N׹+\E{(Ժ*U7y\L^qAwC@!(j*h ׵T1i"ARA&Z^K@] fG Fw4 x/ 7e-5z I^̳d%7c HZ#u5t׋ ŀI30WnXNEfUL'dEgRK/DP De445n8jswg)]_# X/PL)7ڛplkWdαk^G3 bj0Ÿ*6L*O'q4 `My8A TU hp,dkf:H1$Y X wńY@RLjH4B qŇϙbPÓTwAX+Vn[eq 6L&MΟoa (Xkw: gZ]:-}%K a~ʒt-#74mЕ*/ШeDA̸p.0Ĉ8S =ꚙ6 rD C#c!'CUY$A2I%Pd1lO> %:=^4UN K 8Q4yYPn_DiL\iDå[ Gf-DQ8w }_507!dlOOn Y> =Z4&f(KK wc♑l@+\Îo* ؗ}OXlhKШ^҂Mnb^Mmy/ۇ?(ZBtVA [ vxf (0;902iJ$3P9*a 2P:J"-2C֢tf%Bb[w-=O]GO|ь>S 2GѢ~9/OGY1) ^A#z$抩bTKh!6^E=//JQRRP@|@Q>&D`12<بBo5XaGF oɅ)MxBEQ$c/#ϚȶEgdlO/W" 9<=4. UneecoYx=n..$:uåB'v|T]h(~ לl ͅ#T^[k$H/yF\ 'T+,blm)fp90\pDiLiQ25js!hXWg !=l*mf5N&b3Xd}eErO5$GS4Vo@.ǒ촆fUDAU#t2P㺢c&9GK:ejC=ʨ@ JdB@Ƽ`1D~%^V.en(-%Rݶ4F( DDRe 2 -dlOOV ]>a4ޚN2r ^bA ǚce/~׆L]qo#y= *,}DQ*x.60[?t&0<$ɫL IRA*UH?"ٙBxʱ! (CMVYI`j˒DLMcR%k,Qeސ= nќ3Rc ,m#3dž"'tlMOq{ bi|+A7h 1OIkQ #=Cz^g:@`xPæ*M1da CXى (J@xG2q@ _\-bD;@ p '#OF AdlOO?" M><48@;%crl<\QfC N @Hր (r)nE]1t-MLfL>G;QvQnOv*L}z48jFdrdYe gXPA SFxPEd!$pp2] 61 BogD` )aHR-0fs7زXUdȹH+ԙ!gxusrxʙ4#C()T}D$U22VFIڌMQXlT| e#Eh7: tVBӈ,ye̩QEHlfujLAME3.100dvmP-j` Jٙ42QR5Tr$.]BJBr_r0R l93j \7 꾪l[7ʯ"DON**v (;:TP4h6 LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUduA