diff --git a/.github/workflows/LICENSE.txt b/.github/workflows/LICENSE.txt index e8059f3..443dc52 100644 --- a/.github/workflows/LICENSE.txt +++ b/.github/workflows/LICENSE.txt @@ -1,5 +1,9 @@ -# End User License Agreement for squares-and-circles firmware +-------- Copyright -------- + +Copyright 2021 E.Heidt +https://github.com/eh2k/squares-and-circles +# End User License Agreement for squares-and-circles firmware ___ ## 1. USE @@ -7,20 +11,17 @@ ___ This software is licensed, not sold. The purchase of this software by a user grants the user one license for the software. -A license grants use on all operating systems on all computers owned by the user, provided the primary user is the license holder. - -Businesses and organizations must purchase a license for each user of the software. +A license grants use on all devices owned by the user, provided the primary user is the license holder. You must not remove or alter any copyright notices on any copy of this software. - You must not disassemble, decompile, or reverse engineer the software, in whole or in part. ## 2. DISTRIBUTION You must not distribute or sell licenses of this software to third parties. +You must not distribute or sell devices with this software to third parties. Licenses are revoked if distributed or sold to third parties. - ## 3. WARRANTIES THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b854bf5..10535ad 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,4 @@ -name: PlatformIO CI +name: Build on: [push] @@ -16,35 +16,32 @@ jobs: git push secondary --all --force - name: Set up Python uses: actions/setup-python@v2 - - name: Install PlatformIO - run: | - python -m pip install --upgrade pip - pip install --upgrade platformio - - name: build_SC_DSM0 + - name: build run: | set -x - git submodule update --init - pio pkg install --environment SC_DSM0 - pio run -v --environment SC_DSM0 - pio run -v --environment SC_DSM0 -t upload || true - hex=$(echo .pio/build/*/*.hex) - rm -f $hex; - mv .pio/build/*/*.eh2k $hex; - - name: build_OC_T40 - run: | - git submodule update --init - pio run --environment OC_T40 + python -m pip install --upgrade pip + curl -fLO https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases/download/v10.3.1-2.1/xpack-arm-none-eabi-gcc-10.3.1-2.1-linux-x64.tar.gz + cat xpack-arm-none-eabi-gcc-10.3.1-2.1-linux-x64.tar.gz | tar xvz -C . > /dev/null + export GCC_PATH=/$(realpath .)/xpack-arm-none-eabi-gcc-10.3.1-2.1/bin/ + export PATH="${PATH}:/$(realpath .)/xpack-arm-none-eabi-gcc-10.3.1-2.1/bin/" + arm-none-eabi-gcc --version + pip install intelhex subprocess32 pyelftools Jinja2 + find ./app -type f -name *.bin -exec touch {} + + git submodule update --init + sh ./app/build.sh + git status + pip install --upgrade platformio mido python-rtmidi intelhex + pio run -v --environment squares-and-circles - name: pack_artifacts run: | export hash=$(git rev-parse --short HEAD) - mv .github/workflows/LICENSE.txt ./LICENSE.txt for f in .pio/build/*/*.hex; do FIRMWARE=$(basename $(dirname ${f%.*})) - HEX_FILE=./firmware_${FIRMWARE}_$hash.hex - ZIP_FILE=./firmware_${FIRMWARE}_$hash.zip + HEX_FILE=./${FIRMWARE}_engines_$hash.hex + ZIP_FILE=./${FIRMWARE}_engines_$hash.zip mv -v "$f" $HEX_FILE - zip -j $ZIP_FILE $HEX_FILE ./LICENSE.txt + zip -j -9 $ZIP_FILE $HEX_FILE .github/workflows/LICENSE.txt $(dirname ${f%.*})/loader.sha sha256sum $ZIP_FILE - curl -fs -X PUT -u ${{ secrets.UPLOAD_KEY }} ${{ secrets.LATEST_DROP_FOLDER }}/${FIRMWARE}_latest.zip --upload-file $ZIP_FILE || true - curl -fs -X PUT -u ${{ secrets.UPLOAD_KEY }} ${{ secrets.LATEST_DROP_FOLDER }}/${FIRMWARE}_latest.sha -d "$hash" + curl -fs -X PUT -u ${{ secrets.UPLOAD_KEY }} ${{ secrets.LATEST_DROP_FOLDER }}/${FIRMWARE}_engines_latest.zip --upload-file $ZIP_FILE || true + curl -fs -X PUT -u ${{ secrets.UPLOAD_KEY }} ${{ secrets.LATEST_DROP_FOLDER }}/${FIRMWARE}_engines_latest.sha -d "$hash" done \ No newline at end of file diff --git a/.gitignore b/.gitignore index 8f790fd..529942d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ *.elf *.log *.txt -*.bin +*.bin.h +src/__pycache__/app_hex.cpython-310.pyc diff --git a/.pre_build.py b/.pre_build.py deleted file mode 100644 index 99ce6b7..0000000 --- a/.pre_build.py +++ /dev/null @@ -1,17 +0,0 @@ -import subprocess -from SCons.Script import DefaultEnvironment - -env = DefaultEnvironment() - -commit_sha = subprocess.run('git rev-parse --short HEAD', shell=True, capture_output=True).stdout.strip().upper().decode("utf-8") - -if subprocess.run('git diff-index --name-status --exit-code HEAD', shell=True).returncode != 0: - commit_sha = commit_sha[:6] + "~" - -print("GIT_COMMIT_SHA:", commit_sha) - -env.Append(CPPDEFINES=[ - ("GIT_COMMIT_SHA", env.StringifyMacro(commit_sha)), -]) - - diff --git a/README.md b/README.md index 11ce3e9..691378a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -> WORK-IN-PROGRESS: Feel free to leave me a message / feedback or any hints in the ["General Feedback"](https://github.com/eh2k/squares-and-circles/issues/1) issue. +> Feedback welcome: Feel free to leave me a message or any hints in the ["General Feedback"](https://github.com/eh2k/squares-and-circles/issues/1) issue. -# □︎●︎ [![CI](https://github.com/eh2k/squares-and-circles/actions/workflows/build.yml/badge.svg)](https://github.com/eh2k/squares-and-circles/actions/workflows/build.yml) [![WebFlasher](https://img.shields.io/badge/Firmware-WebFlasher-blue)](https://eh2k.github.io/□●/flash/?firmware) [![MODULAGrid](https://img.shields.io/badge/MODULAR-Grid-white)](https://www.modulargrid.net/e/modules/browser?SearchName=squares+and+circles&SearchShowothers=1) +# □︎●︎ [![WebFlasher](https://img.shields.io/badge/Web-Flasher-blue)](https://eh2k.github.io/□●/flash/?firmware) [![MODULAGrid](https://img.shields.io/badge/MODULAR-Grid-white)](https://www.modulargrid.net/e/modules/browser?SearchName=squares+and+circles&SearchShowothers=1) **squares-and-circles** is an alternate firmware for the Eurorack module O_C, targeting Teensy 4.0. @@ -9,6 +9,14 @@ ChangeLog ```` +== 2024-03-28 + * Enhancement: Turing Machine Modulation + * Enhancement: FV1emu (cleanup + 16bit delay optimization) + * Bugfix: Crash on Midi-CC + * Refactoring MIDI-Settings / Clock-Settings + * Enhancement: Midi-Channel moved to IO-Settings + * ***New Analysis Engines: GND/Scope, GND/FFT + * OC_T41 Support == 2024-02-14 * Enhancement/Bugfix: No usb midi response while 5sec startup #66 == 2024-02-12 @@ -128,55 +136,63 @@ E.g you can chain the mono audio signal from an oscillator machine to the neighb # Machines [wiki](https://github.com/eh2k/squares-and-circles/wiki/%E2%96%A1%EF%B8%8E%E2%97%8F%EF%B8%8E-Machines-&-Engines) - + >[Long press [LEFT]] enters the machine-selection-page.
->[Short press [R-ENCODER]] loads the selected engine.
+>[Short press [R-ENCODER]] loads the selected engine.
>[Long press [R-ENCODER]] loads the selected engine (default IO-settings).
-* **GND** +--- +###### Screenshots + + +--- + +## Engines +* **GND** * `---` + * Scope + * FFT * **CV** - * [V/OCT](https://github.com/eh2k/squares-and-circles/wiki/V_OCT) - + * [V/OCT](https://github.com/eh2k/squares-and-circles/wiki/V_OCT) * EnvGen_AD * EnvGen_ADSR * LFO * EnvFollower * **Drums** * Analog-BD, Analog SD, Analog HH, Analog HH2 - * 909ish-BD, 909ish-SD, [TR909-HiHat, TR909-Ride](https://github.com/eh2k/squares-and-circles/wiki/TR909_HiHats) + * 909ish-BD, 909ish-SD, [TR909-HiHat, TR909-Ride](https://github.com/eh2k/squares-and-circles/wiki/TR909_HiHats) * 808ish-BD, 808ish-SD, 808ish-HiHat * TR707, TR707-HiHat * [FM-Drum](https://github.com/eh2k/squares-and-circles/wiki/FM-Drum) * Djembe * [Claps](https://github.com/eh2k/squares-and-circles/wiki/Claps) -* **M-OSC** +* **M-OSC** * [Waveforms](https://github.com/eh2k/squares-and-circles/wiki/Waveforms) * Virt.Analog, Waveshaping, FM, Grain, Additive, Wavetable, Chord - * Resonator * **SYNTH** + * Resonator * [DxFM](https://github.com/eh2k/squares-and-circles/wiki/DxFM) * [DxFM_BNK1-3](lib/plaits/resources.cc#L41) - * [Open303](https://github.com/eh2k/squares-and-circles/wiki/Open303) + * [Open303](https://github.com/eh2k/squares-and-circles/wiki/Open303) * [ClassicVAVCF](lib/plaits/dsp/engine2/virtual_analog_vcf_engine.cc) * **Stereo-FX** * [Reverb](https://github.com/eh2k/squares-and-circles/wiki/clouds_reverb) * ReverbSC - * Rev-Dattorro + * Rev-Dattorro * Delay * Gated-Reverb * Reverb-HP-LP * [JU60_chorus](https://github.com/eh2k/squares-and-circles/wiki/JU60_chorus) * **NOISE** * [White/Pink](https://github.com/eh2k/squares-and-circles/wiki/White_Pink_noise) - * [NES_noise](https://github.com/eh2k/squares-and-circles/wiki/NES_noise) + * [NES_noise](https://github.com/eh2k/squares-and-circles/wiki/NES_noise) * [808_squares](https://github.com/eh2k/squares-and-circles/wiki/808_squares) * **SPEECH** * LPC * [SAM](https://github.com/eh2k/squares-and-circles/wiki/SAM) * **MIDI** - * Monitor + * Monitor * Clock * VAx6 @@ -206,23 +222,29 @@ For each parameter a modulation can be assigned: * Parameter 0 (top-left) is mainly used for V/OCT control. Thus, one single V/OCT signal / CV-Input can be shared by using modulation on parameter-0 with attenuverter = +1 (-3V..+6V) range. It is also possible to select the V/OCT input in the io-configuration page. * All other parameters can be modulated via CV-input with a assumed voltage-range of -4V..4V at 2kHz sample rate. * Be aware the CV-range is probably limited by hardware to: -3.5v..6.5V - * **RND**: Trigger generates a random voltage + * **RND**: Trigger generates a random voltage * TRIG: `!`, `T1`, `T2`, `T3`, `T4`, `C1`, `C2`, `C3`, `C4` - * **ENV**: Triggered Envelope (Attack, Decay) +
+
+ * **ENV**: Triggered Envelope (Attack, Decay) * TRIG: `!`, `T1`, `T2`, `T3`, `T4`, `C1`, `C2`, `C3`, `C4` * ATTACK * DECAY - * **LFO**: Free/Triggered Sine-LFO + * **LFO**: Free/Triggered Sine-LFO * TRIG: `-`, `!`, `T1`, `T2`, `T3`, `T4`, `C1`, `C2`, `C3`, `C4` * SHAPE * FREQUENCY - * **EF**: Envelope Follower + * **EF**: Envelope Follower * SRC: `C1`, `C2`, `C3`, `C4` * ATTACK * RELEASE - >`!` = current engine trigger - + * **TM**: Turing Machine + * TRIG: `!`, `CLK`, `T1`, `T2`, `T3`, `T4` + * PROB: `0-9` (0-100%) + * STEPS: `1-16` + >`!` = current engine trigger
+ >`CLK` = internal clock
All modulations have an attenuverter parameter (-/+). * The modulation-voltage is attenuverted/multiplied by -1..+1; @@ -251,7 +273,7 @@ The I/O-Configuration page lets you virtually patch the engine with the hardware * **Quantizer**: [Off, Semitones, Ionian, Dorian, ...](lib/braids/quantizer_scales.h) * **Transpose**: -48 to 24 (default -24) -*In case the Engine supports Accents (Closed/Open HighHat) - Accent Input is configurable:* +*In case the Engine supports Accents (Closed/Open HiHat) - Accent Input is configurable:* * **Accent-Input**: * `-` @@ -286,19 +308,33 @@ The I/O-Configuration page lets you virtually patch the engine with the hardware
-## MIDI-Settings +## MIDI/CLOCK-Settings >[Long press [LEFT] + [RIGHT]] for getting to the MIDI-Settings page. + +The MIDI&Clock-Settings page lets you select the MIDI-Control. + + + +- **MIDI-Control**: + - `-` disabled + - In case OC_T40 + - `USB+T1` [T1 input can be used as MIDI-Input](#-midi-expander) + - else + - `MIDI/USB` the USB-MIDI and/or hardware Midi-Input -The MIDI-Settings page lets you select the MIDI-Input. MIDI via USB is active by default - alternatively the [T1 input can be used as MIDI-Input](#-midi-expander). Each engine can be assigned to a MIDI-Channel - it is possible to control single mono engines together polyphonically (for this all engines have to be set to the same midi channel). [Midi-Engines](src/polyVA.cxx) consume the MIDI-Stream directly, therefore the MIDI-Messages are not converted as incoming CVs or triggers. +In case the MIDI-Control is enabled, you can setup the Midi-Channel in the engine IO-settings. +> Each engine can be assigned to a MIDI-Channel - it is possible to control single mono engines together polyphonically (for this all engines have to be set to the same midi channel). [Midi-Engines](app/MIDI/VAx6.cpp) consume the MIDI-Stream directly, therefore the MIDI-Messages are not converted as incoming CVs or triggers. - + - * **MIDI-CLK/INT-CLK**: BPM - * *In case clock is send via MIDI the internal clock is feed by midi, else the internal clock is active and can be set* - * **MIDI-Input**: USB, T1 - * *In case T1 is set - T1 is working in Midi-Mode (Serial) - Triggering is not available on T1* - * **MIDI_CH #**: 1-16, single channel on multiple engines, for polyphony + * **CLOCK-Source**: BPM + * `-` none + * `INT` Internal Clock-Source (BPM) + * `T1` T1 as Clock-Input (4ppqn) + * `MIDI` Clock received from MIDI + +> Clock-Source is used by engines like `FX/Delay` (clocked sync) or `MIDI/Clock` #### Midi-Control * Engines can be loaded/selected by midi program change @@ -317,23 +353,24 @@ The MIDI-Settings page lets you select the MIDI-Input. MIDI via USB is active by ```` # Supported Hardware - * [Ornament-and-Crime](https://github.com/eh2k/squares-and-circles/wiki/Ornament%E2%80%90and%E2%80%90Crime) + * [Ornament-and-Crime T4.0](https://github.com/eh2k/squares-and-circles/wiki/Ornament%E2%80%90and%E2%80%90Crime) * [Squares-and-Circles DSM0](https://github.com/eh2k/squares-and-circles/wiki/Squares&Circles-D_SM-Prototype) + * [O_C T4.1](https://github.com/eh2k/squares-and-circles/wiki/OC_T41) ## Hardware setup procedure - > Use [![WebFlasher](https://img.shields.io/badge/Firmware-WebFlasher-blue)](https://eh2k.github.io/□●/flash/?firmware) to enter callibration mode, or execute advanced setup commands
+ > Use [![WebFlasher](https://img.shields.io/badge/Web-Flasher-blue)](https://eh2k.github.io/□●/flash/?firmware) to enter callibration mode, or execute advanced setup commands
>Power on the module with the [LEFT] button pressed for entering the setup procedure. ### Display setup - + * Press left encoder to flip180. * Press right encoder for changing display brightness (50%, maximal). ### Encoder setup - + * Check the encoder rotation direction. * Press encoder for reversed setup. @@ -343,7 +380,7 @@ The MIDI-Settings page lets you select the MIDI-Input. MIDI via USB is active by ### DAC calibration - + To calibrate the DAC, you need a multimeter. Besides the reference voltage of `0V`, the voltages `-2V` and `+2V` should be calibrated as accurately as possible. Start with DAC1 (channel A) - connect the multimeter typically using alligator clip on a patch cable inserted in the jack. Use the right encoder to set the voltage as accurately as possible (press the encoder for coarse adjustment). Do it on all outputs - use the left encoder for channel selection. After calibrating `0V` on all outputs, press [right] to step to the `-2V` calibration. Repeat the procedure and press [right] to calibrating `+2V`. @@ -351,13 +388,13 @@ Start with DAC1 (channel A) - connect the multimeter typically using alligator c ### ADC calibration - + To calibrate the ADC `0V` reference, remove all patch cables from the module. Use the right encoder to adjust the offset (press the encoder for fast adjustment). Do it on all cv-inputs, select the channel with the left encoder. Press [right] to enter the `-2V` calibration. Now you need to connect the DAC outputs to the cv-inputs. The DAC output produces the reference voltage, that is calibrated on the input. Repeat the calibration procedure and step to the `+2V` calibration. ### I/O Test: - + * Test/Verify your TRIG or CV inputs. * The output voltage is set by the cv input voltage (DACx = ADCx). @@ -375,7 +412,7 @@ Regarding the user interface and the concept of firmware, I am a bit torn. On th The application code respectively the suite of machines/engines and the third-party source files are published under permissive software licenses. For the exact license and copyright holder - see the header of individual source code files or readme/license file in the sub folder. -The firmware as a whole and the hardware abstraction layer "libmachine" is for personal non-commercial use only. +The firmware as a whole is for personal use only. If you are considering commercial distributing hardware with this firmware, please contact me (eh2k◯gmx.de). - diff --git a/app/DRUMS/Djembe.bin b/app/DRUMS/Djembe.bin new file mode 100644 index 0000000..97a345c Binary files /dev/null and b/app/DRUMS/Djembe.bin differ diff --git a/app/DRUMS/Djembe.bin.h b/app/DRUMS/Djembe.bin.h deleted file mode 100644 index 275020f..0000000 --- a/app/DRUMS/Djembe.bin.h +++ /dev/null @@ -1,545 +0,0 @@ -const uint8_t __DRUMS_Djembe_bin[] FLASHMEM __attribute__((aligned(32))) = { - 0x55, 0x44, 0x4c, 0x4d, 0x13, 0x00, 0x13, 0x00, 0xac, 0x01, 0x00, 0x00, - 0xec, 0x16, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0xc4, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x50, - 0xd1, 0x16, 0x00, 0x00, 0xde, 0x00, 0x00, 0x50, 0x7d, 0x16, 0x00, 0x00, - 0xf1, 0x00, 0x00, 0x50, 0xb5, 0x16, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x50, - 0x99, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0xff, 0x00, 0x00, 0x10, 0x18, 0x00, 0x00, 0x00, 0x13, 0x01, 0x00, 0x10, - 0x18, 0x00, 0x00, 0x00, 0x29, 0x01, 0x00, 0x10, 0x18, 0x00, 0x00, 0x00, - 0x3a, 0x01, 0x00, 0x10, 0x18, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x54, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x59, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x64, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x71, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x7e, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x8a, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x8f, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x94, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x9b, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x52, 0x55, 0x4d, 0x53, 0x2f, 0x44, 0x6a, 0x65, 0x6d, 0x62, 0x65, - 0x00, 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, - 0x79, 0x00, 0x5f, 0x5f, 0x75, 0x69, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00, 0x70, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x73, 0x00, 0x73, 0x65, 0x74, 0x75, 0x70, 0x00, 0x5f, - 0x5f, 0x70, 0x72, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, - 0x61, 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x65, - 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x00, 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, - 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x00, 0x5f, 0x5f, - 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x00, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x00, - 0x66, 0x72, 0x65, 0x65, 0x00, 0x5f, 0x5f, 0x75, 0x69, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x00, 0x61, 0x64, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x5f, 0x69, 0x33, 0x32, 0x00, 0x61, 0x64, 0x64, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x5f, 0x66, 0x33, 0x32, 0x00, 0x70, 0x6f, 0x77, 0x66, 0x00, 0x63, - 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x74, 0x61, 0x6e, 0x66, 0x00, 0x63, - 0x6f, 0x73, 0x66, 0x00, 0x5f, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x00, 0x5f, - 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6c, 0x5f, 0x66, 0x70, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x04, 0x00, 0x00, 0x00, 0x38, 0xb5, 0x08, 0x4b, 0x59, 0xf8, 0x03, 0x30, - 0x1d, 0x68, 0x55, 0xb1, 0x06, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x1c, 0x68, - 0xe3, 0x88, 0xb4, 0xf9, 0x04, 0x20, 0x61, 0x88, 0x20, 0x88, 0xa8, 0x47, - 0x20, 0x72, 0x38, 0xbd, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x10, 0xb4, 0x03, 0x4c, 0x59, 0xf8, 0x04, 0x40, 0xa4, 0x46, 0x5d, 0xf8, - 0x04, 0x4b, 0x60, 0x47, 0x10, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x14, 0x00, 0x00, 0x00, 0x08, 0xb5, 0xdf, 0xed, - 0x09, 0x7a, 0xdf, 0xed, 0x09, 0x0a, 0x0a, 0x4b, 0x30, 0xee, 0x67, 0x0a, - 0x59, 0xf8, 0x03, 0x30, 0x60, 0xee, 0x20, 0x0a, 0xb0, 0xee, 0x00, 0x0a, - 0x98, 0x47, 0xdf, 0xed, 0x04, 0x7a, 0x20, 0xee, 0x27, 0x0a, 0x08, 0xbd, - 0x00, 0x00, 0x8a, 0x42, 0xab, 0xaa, 0xaa, 0x3d, 0x00, 0x00, 0xdc, 0x43, - 0x18, 0x00, 0x00, 0x00, 0x03, 0x4b, 0x4f, 0xf4, 0x00, 0x71, 0x59, 0xf8, - 0x03, 0x30, 0x01, 0x20, 0x18, 0x47, 0x00, 0xbf, 0x1c, 0x00, 0x00, 0x00, - 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, - 0x70, 0x47, 0x00, 0xbf, 0x80, 0x68, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, - 0x01, 0x20, 0x70, 0x47, 0x70, 0x47, 0x00, 0xbf, 0x4f, 0xf0, 0x7c, 0x53, - 0x00, 0x22, 0x43, 0x61, 0xc2, 0x63, 0x43, 0x65, 0x83, 0x66, 0x70, 0x47, - 0x00, 0x23, 0x00, 0x22, 0xc0, 0xe9, 0x00, 0x22, 0xc0, 0xe9, 0x12, 0x22, - 0xc3, 0x61, 0x03, 0x62, 0x43, 0x62, 0x83, 0x62, 0xc3, 0x62, 0x03, 0x63, - 0x43, 0x63, 0x83, 0x63, 0x03, 0x64, 0x43, 0x64, 0x83, 0x65, 0xc3, 0x65, - 0xc3, 0x66, 0x03, 0x67, 0x83, 0x67, 0xc3, 0x67, 0xc0, 0xf8, 0x80, 0x30, - 0xc0, 0xf8, 0x8c, 0x30, 0xc0, 0xf8, 0x90, 0x30, 0xc0, 0xf8, 0x94, 0x30, - 0xc0, 0xf8, 0xa0, 0x30, 0xc0, 0xf8, 0xa4, 0x30, 0xc0, 0xf8, 0xa8, 0x30, - 0xc0, 0xf8, 0xb4, 0x30, 0xc0, 0xf8, 0xb8, 0x30, 0xc0, 0xf8, 0xbc, 0x30, - 0xc0, 0xf8, 0xc8, 0x30, 0xc0, 0xf8, 0xcc, 0x30, 0xc0, 0xf8, 0xd0, 0x30, - 0xc0, 0xf8, 0xdc, 0x30, 0xc0, 0xf8, 0xe0, 0x30, 0xc0, 0xf8, 0xe4, 0x30, - 0xc0, 0xf8, 0xf0, 0x30, 0xc0, 0xf8, 0xf4, 0x30, 0xc0, 0xf8, 0xf8, 0x30, - 0xc0, 0xf8, 0x04, 0x31, 0xc0, 0xf8, 0x08, 0x31, 0xc0, 0xf8, 0x0c, 0x31, - 0xc0, 0xf8, 0x18, 0x31, 0xc0, 0xf8, 0x1c, 0x31, 0xc0, 0xf8, 0x20, 0x31, - 0xc0, 0xf8, 0x2c, 0x31, 0xc0, 0xf8, 0x30, 0x31, 0xc0, 0xf8, 0x34, 0x31, - 0xc0, 0xf8, 0x40, 0x31, 0xc0, 0xf8, 0x44, 0x31, 0xc0, 0xf8, 0x48, 0x31, - 0xc0, 0xf8, 0x54, 0x31, 0xc0, 0xf8, 0x58, 0x31, 0xc0, 0xf8, 0x5c, 0x31, - 0xc0, 0xf8, 0x68, 0x31, 0xc0, 0xf8, 0x6c, 0x31, 0xc0, 0xf8, 0x70, 0x31, - 0xc0, 0xf8, 0x7c, 0x31, 0xc0, 0xf8, 0x80, 0x31, 0xc0, 0xf8, 0x84, 0x31, - 0xc0, 0xf8, 0x90, 0x31, 0xc0, 0xf8, 0x94, 0x31, 0xc0, 0xf8, 0x98, 0x31, - 0xc0, 0xf8, 0xa4, 0x31, 0xc0, 0xf8, 0xa8, 0x31, 0xc0, 0xf8, 0xac, 0x31, - 0xc0, 0xf8, 0xb8, 0x31, 0xc0, 0xf8, 0xbc, 0x31, 0xc0, 0xf8, 0xc0, 0x31, - 0xc0, 0xf8, 0xcc, 0x31, 0xc0, 0xf8, 0xd0, 0x31, 0xc0, 0xf8, 0xd4, 0x31, - 0xc0, 0xf8, 0xe0, 0x31, 0xc0, 0xf8, 0xe4, 0x31, 0xc0, 0xf8, 0xe8, 0x31, - 0xc0, 0xf8, 0xf4, 0x31, 0xc0, 0xf8, 0xf8, 0x31, 0xc0, 0xf8, 0xfc, 0x31, - 0x70, 0x47, 0x00, 0xbf, 0x30, 0xb5, 0x07, 0xee, 0x90, 0x1a, 0xdf, 0xed, - 0xeb, 0x6a, 0xdf, 0xed, 0xeb, 0x5a, 0x9f, 0xed, 0xeb, 0x6a, 0xdf, 0xed, - 0xeb, 0x0a, 0xdf, 0xf8, 0x00, 0x34, 0x81, 0x60, 0xb7, 0xee, 0x00, 0x7a, - 0x2d, 0xed, 0x04, 0x8b, 0xf8, 0xee, 0xe7, 0x7a, 0xc7, 0xfe, 0x87, 0x7a, - 0xc7, 0xfe, 0xe6, 0x7a, 0x87, 0xee, 0x27, 0x8a, 0x83, 0xb0, 0x04, 0x46, - 0x67, 0xee, 0xa5, 0x7a, 0xdf, 0xed, 0xe1, 0x6a, 0xc0, 0xed, 0x14, 0x7a, - 0x68, 0xee, 0x26, 0x7a, 0x68, 0xee, 0x06, 0x6a, 0x37, 0xee, 0x67, 0x7a, - 0x9f, 0xed, 0xdd, 0x9a, 0xc0, 0xed, 0x04, 0x7a, 0x80, 0xed, 0x06, 0x7a, - 0xc0, 0xed, 0x03, 0x6a, 0x68, 0xee, 0x20, 0x0a, 0x59, 0xf8, 0x03, 0x50, - 0xcd, 0xed, 0x01, 0x0a, 0xb0, 0xee, 0x49, 0x0a, 0xa8, 0x47, 0x9f, 0xed, - 0xd6, 0x7a, 0xdf, 0xed, 0xd6, 0x8a, 0xdd, 0xed, 0x01, 0x0a, 0x30, 0xee, - 0x00, 0x0a, 0x28, 0xee, 0x07, 0x7a, 0xf1, 0xee, 0x40, 0x7a, 0x84, 0xed, - 0x19, 0x7a, 0xc4, 0xed, 0x18, 0x7a, 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, - 0xdf, 0xed, 0xce, 0x0a, 0xf0, 0xee, 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, - 0xc4, 0xed, 0x1d, 0x7a, 0xb0, 0xee, 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, - 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, - 0x67, 0x7a, 0xc4, 0xed, 0x21, 0x7a, 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, - 0xdf, 0xed, 0xc3, 0x0a, 0xf0, 0xee, 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, - 0xc4, 0xed, 0x22, 0x7a, 0xb0, 0xee, 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, - 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, - 0x67, 0x7a, 0xc4, 0xed, 0x26, 0x7a, 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, - 0xdf, 0xed, 0xb8, 0x0a, 0xf0, 0xee, 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, - 0xc4, 0xed, 0x27, 0x7a, 0xb0, 0xee, 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, - 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, - 0x67, 0x7a, 0xc4, 0xed, 0x2b, 0x7a, 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, - 0xdf, 0xed, 0xad, 0x0a, 0xf0, 0xee, 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, - 0xc4, 0xed, 0x2c, 0x7a, 0xb0, 0xee, 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, - 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, - 0x67, 0x7a, 0xc4, 0xed, 0x30, 0x7a, 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, - 0xdf, 0xed, 0xa2, 0x0a, 0xf0, 0xee, 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, - 0xc4, 0xed, 0x31, 0x7a, 0xb0, 0xee, 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, - 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, - 0x67, 0x7a, 0xc4, 0xed, 0x35, 0x7a, 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, - 0xdf, 0xed, 0x97, 0x0a, 0xf0, 0xee, 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, - 0xc4, 0xed, 0x36, 0x7a, 0xb0, 0xee, 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, - 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, - 0x67, 0x7a, 0xc4, 0xed, 0x3a, 0x7a, 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, - 0xdf, 0xed, 0x8c, 0x0a, 0xf0, 0xee, 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, - 0xc4, 0xed, 0x3b, 0x7a, 0xb0, 0xee, 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, - 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, - 0x67, 0x7a, 0xc4, 0xed, 0x3f, 0x7a, 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, - 0xdf, 0xed, 0x81, 0x0a, 0xf0, 0xee, 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, - 0xc4, 0xed, 0x40, 0x7a, 0xb0, 0xee, 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, - 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, - 0x67, 0x7a, 0xc4, 0xed, 0x44, 0x7a, 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, - 0xdf, 0xed, 0x76, 0x0a, 0xf0, 0xee, 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, - 0xc4, 0xed, 0x45, 0x7a, 0xb0, 0xee, 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, - 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, - 0x67, 0x7a, 0xc4, 0xed, 0x49, 0x7a, 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, - 0xdf, 0xed, 0x6b, 0x0a, 0x68, 0xee, 0x20, 0x0a, 0xf0, 0xee, 0x40, 0x7a, - 0xb0, 0xee, 0x49, 0x0a, 0xc4, 0xed, 0x4a, 0x7a, 0xcd, 0xed, 0x01, 0x0a, - 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, - 0x67, 0x7a, 0xc4, 0xed, 0x4e, 0x7a, 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, - 0xdf, 0xed, 0x60, 0x0a, 0xf0, 0xee, 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, - 0xc4, 0xed, 0x4f, 0x7a, 0xb0, 0xee, 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, - 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, - 0x67, 0x7a, 0xc4, 0xed, 0x53, 0x7a, 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, - 0xdf, 0xed, 0x55, 0x0a, 0xf0, 0xee, 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, - 0xc4, 0xed, 0x54, 0x7a, 0xb0, 0xee, 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, - 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, - 0x67, 0x7a, 0xc4, 0xed, 0x58, 0x7a, 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, - 0xdf, 0xed, 0x4a, 0x0a, 0xf0, 0xee, 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, - 0xc4, 0xed, 0x59, 0x7a, 0xb0, 0xee, 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, - 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, - 0x67, 0x7a, 0xc4, 0xed, 0x5d, 0x7a, 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, - 0xdf, 0xed, 0x3f, 0x0a, 0xf0, 0xee, 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, - 0xc4, 0xed, 0x5e, 0x7a, 0xb0, 0xee, 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, - 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, - 0x67, 0x7a, 0xc4, 0xed, 0x62, 0x7a, 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, - 0xdf, 0xed, 0x34, 0x0a, 0xf0, 0xee, 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, - 0xc4, 0xed, 0x63, 0x7a, 0xb0, 0xee, 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, - 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, - 0x67, 0x7a, 0xc4, 0xed, 0x67, 0x7a, 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, - 0xdf, 0xed, 0x29, 0x0a, 0xf0, 0xee, 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, - 0xc4, 0xed, 0x68, 0x7a, 0xb0, 0xee, 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, - 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, - 0x67, 0x7a, 0xc4, 0xed, 0x6c, 0x7a, 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, - 0xdf, 0xed, 0x1e, 0x0a, 0xf0, 0xee, 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, - 0xc4, 0xed, 0x6d, 0x7a, 0xb0, 0xee, 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, - 0xa8, 0x47, 0x37, 0xe0, 0x00, 0x80, 0x3b, 0x48, 0x6f, 0x12, 0x03, 0x3b, - 0xdb, 0x0f, 0x49, 0x40, 0x55, 0x55, 0xd5, 0x3f, 0x66, 0x66, 0x30, 0x42, - 0x6f, 0x12, 0x83, 0x3a, 0xdb, 0x0f, 0xc9, 0x40, 0xbe, 0x37, 0x86, 0x35, - 0xb8, 0x8f, 0xe0, 0x3f, 0x7b, 0x09, 0xed, 0x3f, 0xfb, 0xfa, 0xfa, 0x3f, - 0x55, 0x55, 0x05, 0x40, 0xe4, 0x38, 0x0e, 0x40, 0x86, 0x61, 0x18, 0x40, - 0x42, 0x1a, 0x24, 0x40, 0x1c, 0xc7, 0x31, 0x40, 0x7c, 0xf0, 0x41, 0x40, - 0x55, 0x55, 0x55, 0x40, 0x7b, 0x09, 0x6d, 0x40, 0x55, 0x55, 0x85, 0x40, - 0x86, 0x61, 0x98, 0x40, 0x1c, 0xc7, 0xb1, 0x40, 0x55, 0x55, 0xd5, 0x40, - 0x55, 0x55, 0x05, 0x41, 0x1c, 0xc7, 0x31, 0x41, 0x18, 0x00, 0x00, 0x00, - 0x55, 0x55, 0x85, 0x41, 0x55, 0x55, 0x05, 0x42, 0x70, 0xee, 0x00, 0x7a, - 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, 0x67, 0x7a, 0xc4, 0xed, 0x71, 0x7a, - 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, 0x5f, 0xed, 0x08, 0x0a, 0xf0, 0xee, - 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, 0xc4, 0xed, 0x72, 0x7a, 0xb0, 0xee, - 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, - 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, 0x67, 0x7a, 0xc4, 0xed, 0x76, 0x7a, - 0xb0, 0xee, 0x68, 0x0a, 0xa8, 0x47, 0x5f, 0xed, 0x13, 0x0a, 0xf0, 0xee, - 0x40, 0x7a, 0x68, 0xee, 0x20, 0x0a, 0xc4, 0xed, 0x77, 0x7a, 0xb0, 0xee, - 0x49, 0x0a, 0xcd, 0xed, 0x01, 0x0a, 0xa8, 0x47, 0x70, 0xee, 0x00, 0x7a, - 0xdd, 0xed, 0x01, 0x0a, 0xf1, 0xee, 0x67, 0x7a, 0xb0, 0xee, 0x68, 0x0a, - 0xc4, 0xed, 0x7b, 0x7a, 0xa8, 0x47, 0x84, 0xed, 0x7c, 0x0a, 0x03, 0xb0, - 0xbd, 0xec, 0x04, 0x8b, 0x30, 0xbd, 0x00, 0xbf, 0x10, 0xb5, 0x04, 0x46, - 0xff, 0xf7, 0xa8, 0xfd, 0x4f, 0xf0, 0x7c, 0x53, 0x00, 0x22, 0x63, 0x61, - 0xe2, 0x63, 0x63, 0x65, 0xa3, 0x66, 0x20, 0x46, 0xbd, 0xe8, 0x10, 0x40, - 0xff, 0xf7, 0x10, 0xbd, 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0x98, 0xfd, - 0x4f, 0xf0, 0x7c, 0x53, 0x00, 0x22, 0x63, 0x61, 0xe2, 0x63, 0x63, 0x65, - 0xa3, 0x66, 0x20, 0x46, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0x00, 0xbd, - 0x70, 0xb5, 0x01, 0x46, 0x4f, 0xf0, 0x7c, 0x56, 0x41, 0xf8, 0x68, 0x6f, - 0x17, 0x4b, 0xdf, 0xed, 0x15, 0x0a, 0x9f, 0xed, 0x15, 0x0a, 0x04, 0x46, - 0x59, 0xf8, 0x03, 0x00, 0x14, 0x4b, 0x59, 0xf8, 0x03, 0x50, 0xa8, 0x47, - 0x21, 0x46, 0x13, 0x4b, 0x41, 0xf8, 0x14, 0x6f, 0x9f, 0xed, 0x0e, 0x0a, - 0x59, 0xf8, 0x03, 0x00, 0xf7, 0xee, 0x00, 0x0a, 0xa8, 0x47, 0x21, 0x46, - 0x0e, 0x4b, 0x41, 0xf8, 0x54, 0x6f, 0x9f, 0xed, 0x09, 0x0a, 0x59, 0xf8, - 0x03, 0x00, 0xf1, 0xee, 0x04, 0x0a, 0xa8, 0x47, 0x0a, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x5a, 0x68, 0x02, 0xb1, 0x70, 0xbd, 0x3c, 0x34, 0x5c, 0x60, - 0x70, 0xbd, 0x00, 0xbf, 0x00, 0x00, 0x7a, 0x44, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4d, - 0xd0, 0xed, 0x04, 0x7a, 0x90, 0xed, 0x05, 0x6a, 0xd0, 0xed, 0x15, 0x6a, - 0x90, 0xed, 0x1a, 0x7a, 0x1b, 0x68, 0x2d, 0xed, 0x10, 0x8b, 0x27, 0xee, - 0x86, 0x6a, 0xae, 0xb0, 0x67, 0xee, 0xa6, 0x6a, 0x8d, 0xed, 0x2a, 0x6a, - 0x67, 0xee, 0x87, 0x7a, 0x90, 0xed, 0x0f, 0x6a, 0xcd, 0xed, 0x2c, 0x6a, - 0x00, 0x29, 0x8d, 0xed, 0x2b, 0x6a, 0xcd, 0xed, 0x2d, 0x7a, 0x40, 0xf3, - 0x8e, 0x85, 0xd0, 0xed, 0x20, 0x6a, 0x90, 0xed, 0x3e, 0x2a, 0xcd, 0xed, - 0x00, 0x6a, 0xd0, 0xed, 0x25, 0x6a, 0xd0, 0xed, 0x11, 0x2a, 0xcd, 0xed, - 0x01, 0x6a, 0xd0, 0xed, 0x2a, 0x6a, 0xd0, 0xed, 0x1f, 0x3a, 0xcd, 0xed, - 0x02, 0x6a, 0xd0, 0xed, 0x2f, 0x6a, 0x90, 0xed, 0x24, 0x4a, 0xcd, 0xed, - 0x03, 0x6a, 0xd0, 0xed, 0x34, 0x6a, 0xd0, 0xed, 0x29, 0x4a, 0xcd, 0xed, - 0x04, 0x6a, 0xd0, 0xed, 0x39, 0x6a, 0xd0, 0xed, 0x42, 0xfa, 0x90, 0xed, - 0x17, 0x3a, 0xcd, 0xed, 0x05, 0x6a, 0xd0, 0xf8, 0x04, 0xa0, 0xc6, 0x6c, - 0x90, 0xed, 0x08, 0x7a, 0x90, 0xed, 0x0a, 0xca, 0x90, 0xed, 0x0b, 0x9a, - 0xd0, 0xed, 0x0d, 0xba, 0xd0, 0xed, 0x0e, 0x9a, 0xd0, 0xed, 0x1c, 0x7a, - 0x90, 0xed, 0x2e, 0x5a, 0xd0, 0xed, 0x33, 0x5a, 0x90, 0xed, 0x38, 0x6a, - 0xd0, 0xed, 0x3d, 0x6a, 0x8d, 0xed, 0x06, 0x2a, 0x90, 0xed, 0x43, 0x2a, - 0x90, 0xed, 0x47, 0xfa, 0x8d, 0xed, 0x07, 0x2a, 0x90, 0xed, 0x48, 0x2a, - 0xd0, 0xed, 0x4c, 0xea, 0x8d, 0xed, 0x08, 0x2a, 0x90, 0xed, 0x4d, 0x2a, - 0x90, 0xed, 0x56, 0xea, 0x8d, 0xed, 0x09, 0x2a, 0x90, 0xed, 0x51, 0x2a, - 0x8d, 0xed, 0x12, 0x2a, 0x90, 0xed, 0x52, 0x2a, 0x03, 0xeb, 0x81, 0x08, - 0x8d, 0xed, 0x0a, 0x2a, 0xdf, 0xf8, 0xe0, 0x14, 0x90, 0xed, 0x57, 0x2a, - 0x59, 0xf8, 0x01, 0x70, 0x9b, 0x46, 0xdf, 0xf8, 0xd8, 0x34, 0x59, 0xf8, - 0x03, 0x50, 0x8d, 0xed, 0x0b, 0x2a, 0x90, 0xed, 0x5b, 0x2a, 0x8d, 0xed, - 0x13, 0x2a, 0x90, 0xed, 0x5c, 0x2a, 0x8d, 0xed, 0x0c, 0x2a, 0x90, 0xed, - 0x60, 0x2a, 0x8d, 0xed, 0x14, 0x2a, 0x90, 0xed, 0x61, 0x2a, 0x8d, 0xed, - 0x0d, 0x2a, 0x90, 0xed, 0x65, 0x2a, 0x8d, 0xed, 0x15, 0x2a, 0x90, 0xed, - 0x66, 0x2a, 0x8d, 0xed, 0x0e, 0x2a, 0x90, 0xed, 0x6a, 0x2a, 0x8d, 0xed, - 0x16, 0x2a, 0x90, 0xed, 0x6b, 0x2a, 0x8d, 0xed, 0x0f, 0x2a, 0x90, 0xed, - 0x6f, 0x2a, 0x90, 0xed, 0x7a, 0xaa, 0x8d, 0xed, 0x17, 0x2a, 0x90, 0xed, - 0x70, 0x2a, 0xd0, 0xed, 0x7f, 0xca, 0x8d, 0xed, 0x10, 0x2a, 0x90, 0xed, - 0x74, 0x2a, 0xd0, 0xed, 0x75, 0xaa, 0x8d, 0xed, 0x18, 0x2a, 0x90, 0xed, - 0x79, 0x2a, 0x8d, 0xed, 0x11, 0xaa, 0x8d, 0xed, 0x19, 0x2a, 0x90, 0xed, - 0x7e, 0x2a, 0xcd, 0xed, 0x1b, 0xca, 0xb0, 0xee, 0x6f, 0x1a, 0xf0, 0xee, - 0x4f, 0x1a, 0x8d, 0xed, 0x1a, 0x2a, 0xb0, 0xee, 0x6e, 0x2a, 0xf0, 0xee, - 0x62, 0xda, 0xf0, 0xee, 0x64, 0xfa, 0xb0, 0xee, 0x44, 0xfa, 0xf0, 0xee, - 0x63, 0xea, 0xf0, 0xee, 0x4e, 0x2a, 0x04, 0x46, 0xb0, 0xee, 0x43, 0xea, - 0xf0, 0xee, 0x42, 0x3a, 0xb0, 0xee, 0x61, 0x4a, 0xf0, 0xee, 0x41, 0x4a, - 0x94, 0xed, 0x06, 0xda, 0xdd, 0xed, 0x2a, 0x8a, 0x9d, 0xed, 0x2d, 0x8a, - 0x9f, 0xed, 0xf1, 0x0a, 0x94, 0xed, 0x03, 0xba, 0xf0, 0x4a, 0xcd, 0xed, - 0x29, 0x2a, 0xed, 0xee, 0x07, 0x8a, 0x43, 0xf2, 0x39, 0x03, 0x02, 0xfb, - 0x0a, 0x3a, 0xad, 0xee, 0x27, 0x8a, 0x00, 0x2e, 0xc8, 0xbf, 0x01, 0x36, - 0xdf, 0xed, 0xea, 0x7a, 0xc4, 0xed, 0x07, 0x8a, 0xa8, 0xee, 0xa7, 0x0a, - 0xcd, 0xed, 0x28, 0x3a, 0x2b, 0xee, 0x00, 0x0a, 0x8d, 0xed, 0x27, 0x4a, - 0xcd, 0xed, 0x26, 0x4a, 0xcd, 0xed, 0x1e, 0x5a, 0x8d, 0xed, 0x1d, 0x5a, - 0x8d, 0xed, 0x24, 0x6a, 0xcd, 0xed, 0x25, 0x6a, 0xb8, 0x47, 0xdf, 0xed, - 0xe0, 0x7a, 0xdf, 0xed, 0xe0, 0x6a, 0xb0, 0xee, 0x40, 0x7a, 0x9f, 0xed, - 0xdc, 0x0a, 0xa8, 0xee, 0xa7, 0x0a, 0xf7, 0xee, 0x00, 0x8a, 0xc8, 0xee, - 0x87, 0x7a, 0x07, 0xee, 0x10, 0xaa, 0x36, 0xee, 0xe7, 0x2a, 0x2b, 0xee, - 0x00, 0x0a, 0xbf, 0xee, 0x00, 0xba, 0xb8, 0xee, 0xc7, 0x1a, 0xb0, 0xee, - 0x4b, 0x7a, 0xa2, 0xee, 0x27, 0x7a, 0x77, 0xee, 0xa6, 0x0a, 0x67, 0xee, - 0xa7, 0x1a, 0xf0, 0xee, 0x68, 0xca, 0xe0, 0xee, 0xa7, 0xca, 0x3c, 0xee, - 0x0c, 0xca, 0x71, 0xee, 0xe8, 0x7a, 0x27, 0xee, 0x09, 0x7a, 0xcd, 0xed, - 0x1c, 0x1a, 0xa7, 0xee, 0x8c, 0x7a, 0x7b, 0xee, 0xab, 0xba, 0xc7, 0xee, - 0x2c, 0x7a, 0x9f, 0xed, 0xc9, 0x7a, 0xe1, 0xee, 0x07, 0x7a, 0xb0, 0xee, - 0x08, 0xaa, 0xc4, 0xed, 0x09, 0x7a, 0x37, 0xee, 0x89, 0x9a, 0xb8, 0x47, - 0xdd, 0xed, 0x2b, 0x7a, 0x9d, 0xed, 0x2c, 0x7a, 0xc4, 0xed, 0x10, 0x7a, - 0xf4, 0xee, 0xed, 0x7a, 0xad, 0xee, 0x0e, 0x7a, 0xf1, 0xee, 0x10, 0xfa, - 0x94, 0xbf, 0x01, 0x21, 0x00, 0x21, 0xcc, 0xbf, 0x01, 0x23, 0x00, 0x23, - 0xd4, 0xed, 0x14, 0x7a, 0x84, 0xed, 0x16, 0x7a, 0x01, 0xfb, 0x06, 0x36, - 0x27, 0xee, 0x27, 0x7a, 0x07, 0xee, 0x90, 0x6a, 0x87, 0xfe, 0x28, 0x7a, - 0xf8, 0xee, 0xe7, 0x7a, 0x88, 0xee, 0x80, 0x2a, 0xc7, 0xee, 0x87, 0x0a, - 0xdf, 0xed, 0xb0, 0x6a, 0x9f, 0xed, 0xb1, 0x7a, 0xdd, 0xed, 0x1c, 0x1a, - 0x84, 0xed, 0x1b, 0x8a, 0xf0, 0xee, 0x00, 0x7a, 0x77, 0xee, 0xe0, 0x7a, - 0xc7, 0xfe, 0xe0, 0x7a, 0x76, 0xee, 0xc2, 0x0a, 0xc7, 0xfe, 0x87, 0x7a, - 0xb0, 0xee, 0x4b, 0x7a, 0xa0, 0xee, 0x82, 0x7a, 0xa2, 0xee, 0x02, 0xba, - 0x72, 0xee, 0x26, 0x0a, 0x27, 0xee, 0x29, 0x7a, 0xe0, 0xee, 0x82, 0x8a, - 0xab, 0xee, 0x2b, 0x7a, 0x39, 0xee, 0x4c, 0x9a, 0x87, 0xee, 0x28, 0x2a, - 0x29, 0xee, 0x21, 0x9a, 0x7b, 0xee, 0xa9, 0x1a, 0x89, 0xee, 0x2c, 0x1a, - 0x32, 0xee, 0x01, 0x2a, 0x71, 0xee, 0x82, 0x1a, 0x84, 0xed, 0x0c, 0x2a, - 0x67, 0xee, 0xa1, 0x1a, 0xc1, 0xee, 0xa8, 0xca, 0xd4, 0xed, 0x19, 0x8a, - 0x28, 0xee, 0x28, 0x0a, 0xa8, 0x47, 0xdd, 0xed, 0x00, 0x6a, 0xd4, 0xed, - 0x18, 0x7a, 0x94, 0xed, 0x1d, 0x7a, 0x20, 0xee, 0x27, 0x0a, 0x26, 0xee, - 0x87, 0x7a, 0xdf, 0xed, 0x92, 0x7a, 0xa0, 0xee, 0x2e, 0x7a, 0x38, 0xee, - 0x27, 0x0a, 0x9c, 0xee, 0x8a, 0x7a, 0x20, 0xee, 0x28, 0x0a, 0x84, 0xed, - 0x1e, 0x7a, 0x8d, 0xed, 0x23, 0x7a, 0xa8, 0x47, 0xd4, 0xed, 0x21, 0x7a, - 0x9d, 0xed, 0x01, 0x7a, 0x20, 0xee, 0x27, 0x0a, 0xd4, 0xed, 0x22, 0x7a, - 0x67, 0xee, 0x27, 0x7a, 0xe0, 0xee, 0x0f, 0x7a, 0x9f, 0xed, 0x85, 0x0a, - 0xb0, 0xee, 0x67, 0x3a, 0x9c, 0xee, 0x8a, 0x3a, 0x38, 0xee, 0x00, 0x0a, - 0x84, 0xed, 0x23, 0x3a, 0x20, 0xee, 0x28, 0x0a, 0x8d, 0xed, 0x22, 0x3a, - 0xa8, 0x47, 0x9d, 0xed, 0x02, 0x6a, 0xd4, 0xed, 0x26, 0x7a, 0xd4, 0xed, - 0x27, 0x0a, 0x20, 0xee, 0x27, 0x0a, 0x66, 0xee, 0x20, 0x0a, 0xe0, 0xee, - 0x2f, 0x0a, 0x9f, 0xed, 0x79, 0x0a, 0xdc, 0xee, 0x8a, 0x0a, 0x38, 0xee, - 0x00, 0x0a, 0xc4, 0xed, 0x28, 0x0a, 0x20, 0xee, 0x28, 0x0a, 0xcd, 0xed, - 0x21, 0x0a, 0xa8, 0x47, 0xd4, 0xed, 0x2b, 0x7a, 0xdd, 0xed, 0x03, 0x5a, - 0x94, 0xed, 0x2c, 0x1a, 0x9d, 0xed, 0x1d, 0x5a, 0x20, 0xee, 0x27, 0x0a, - 0x25, 0xee, 0x81, 0x1a, 0xa0, 0xee, 0x05, 0x1a, 0x9f, 0xed, 0x6c, 0x0a, - 0x9c, 0xee, 0x8a, 0x1a, 0x38, 0xee, 0x00, 0x0a, 0x84, 0xed, 0x2d, 0x1a, - 0x20, 0xee, 0x28, 0x0a, 0x8d, 0xed, 0x20, 0x1a, 0xa8, 0x47, 0xd4, 0xed, - 0x30, 0x7a, 0x9d, 0xed, 0x04, 0x5a, 0x20, 0xee, 0x27, 0x0a, 0xd4, 0xed, - 0x31, 0x7a, 0xdd, 0xed, 0x1e, 0x5a, 0x65, 0xee, 0x27, 0x7a, 0xe0, 0xee, - 0x25, 0x7a, 0x9f, 0xed, 0x60, 0x0a, 0xdc, 0xee, 0x8a, 0x7a, 0x38, 0xee, - 0x00, 0x0a, 0xc4, 0xed, 0x32, 0x7a, 0x20, 0xee, 0x28, 0x0a, 0xcd, 0xed, - 0x1f, 0x7a, 0xa8, 0x47, 0xdd, 0xed, 0x05, 0x4a, 0xd4, 0xed, 0x35, 0x7a, - 0x94, 0xed, 0x36, 0x5a, 0x9d, 0xed, 0x24, 0x6a, 0x20, 0xee, 0x27, 0x0a, - 0x24, 0xee, 0x85, 0x5a, 0xa0, 0xee, 0x06, 0x5a, 0x9f, 0xed, 0x53, 0x0a, - 0x9c, 0xee, 0x8a, 0x5a, 0x38, 0xee, 0x00, 0x0a, 0x84, 0xed, 0x37, 0x5a, - 0x20, 0xee, 0x28, 0x0a, 0x8d, 0xed, 0x1e, 0x5a, 0xa8, 0x47, 0x9d, 0xed, - 0x06, 0x4a, 0xd4, 0xed, 0x3a, 0x7a, 0xd4, 0xed, 0x3b, 0x1a, 0xdd, 0xed, - 0x25, 0x6a, 0x20, 0xee, 0x27, 0x0a, 0x64, 0xee, 0x21, 0x1a, 0xe0, 0xee, - 0x26, 0x1a, 0x9f, 0xed, 0x47, 0x0a, 0xdc, 0xee, 0x8a, 0x1a, 0x38, 0xee, - 0x00, 0x0a, 0xc4, 0xed, 0x3c, 0x1a, 0x20, 0xee, 0x28, 0x0a, 0xcd, 0xed, - 0x1d, 0x1a, 0xa8, 0x47, 0xdd, 0xed, 0x07, 0x3a, 0xd4, 0xed, 0x3f, 0x7a, - 0x94, 0xed, 0x40, 0x2a, 0xdd, 0xed, 0x26, 0x4a, 0x20, 0xee, 0x27, 0x0a, - 0x23, 0xee, 0x82, 0x2a, 0xa0, 0xee, 0x24, 0x2a, 0x9f, 0xed, 0x3a, 0x0a, - 0x9c, 0xee, 0x8a, 0x2a, 0x38, 0xee, 0x00, 0x0a, 0x84, 0xed, 0x41, 0x2a, - 0x20, 0xee, 0x28, 0x0a, 0x8d, 0xed, 0x1c, 0x2a, 0xa8, 0x47, 0x9d, 0xed, - 0x08, 0x3a, 0xd4, 0xed, 0x44, 0x7a, 0xd4, 0xed, 0x45, 0xfa, 0x9d, 0xed, - 0x27, 0x4a, 0x63, 0xee, 0x2f, 0xfa, 0x20, 0xee, 0x27, 0x0a, 0xe0, 0xee, - 0x04, 0xfa, 0x9f, 0xed, 0x2e, 0x0a, 0xdc, 0xee, 0x8a, 0xfa, 0x38, 0xee, - 0x00, 0x0a, 0xc4, 0xed, 0x46, 0xfa, 0x20, 0xee, 0x28, 0x0a, 0xa8, 0x47, - 0xd4, 0xed, 0x49, 0x7a, 0xdd, 0xed, 0x09, 0x2a, 0xd4, 0xed, 0x4a, 0x9a, - 0xdd, 0xed, 0x28, 0x3a, 0x20, 0xee, 0x27, 0x0a, 0x62, 0xee, 0xa9, 0x9a, - 0xe0, 0xee, 0x23, 0x9a, 0x9f, 0xed, 0x22, 0x0a, 0xdc, 0xee, 0x8a, 0x9a, - 0x38, 0xee, 0x00, 0x0a, 0xc4, 0xed, 0x4b, 0x9a, 0x20, 0xee, 0x28, 0x0a, - 0xa8, 0x47, 0x9d, 0xed, 0x0a, 0x2a, 0xd4, 0xed, 0x4e, 0x7a, 0x94, 0xed, - 0x4f, 0xba, 0xdd, 0xed, 0x12, 0x1a, 0x22, 0xee, 0x0b, 0xba, 0x20, 0xee, - 0x27, 0x0a, 0xa0, 0xee, 0x21, 0xba, 0x9f, 0xed, 0x17, 0x0a, 0x9c, 0xee, - 0x8a, 0xba, 0x38, 0xee, 0x00, 0x0a, 0x84, 0xed, 0x50, 0xba, 0x20, 0xee, - 0x28, 0x0a, 0xa8, 0x47, 0x5e, 0xe0, 0x00, 0xbf, 0x00, 0x00, 0x20, 0x42, - 0x6d, 0x4e, 0xc6, 0x41, 0x00, 0x00, 0xfa, 0x43, 0x00, 0x60, 0x6a, 0x46, - 0xf3, 0x04, 0xb5, 0x3f, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x48, 0x43, 0x00, 0x00, 0xc8, 0x43, 0x00, 0x00, 0x16, 0x44, - 0x00, 0x00, 0x48, 0x44, 0x00, 0x00, 0x7a, 0x44, 0x00, 0x00, 0x96, 0x44, - 0x00, 0x00, 0xaf, 0x44, 0x00, 0x00, 0xc8, 0x44, 0x00, 0x00, 0xe1, 0x44, - 0x00, 0x00, 0xfa, 0x44, 0x00, 0x80, 0x09, 0x45, 0x2c, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x45, 0x00, 0x80, 0x22, 0x45, - 0x00, 0x00, 0x2f, 0x45, 0x00, 0x80, 0x3b, 0x45, 0x00, 0x00, 0x48, 0x45, - 0x00, 0x80, 0x54, 0x45, 0x00, 0x00, 0x61, 0x45, 0x00, 0x80, 0x6d, 0x45, - 0x39, 0x8e, 0xe3, 0x3d, 0x00, 0x00, 0x80, 0x3d, 0x00, 0x00, 0x80, 0x3c, - 0x0a, 0xd7, 0x23, 0x3d, 0xab, 0x67, 0x07, 0x3c, 0x39, 0x8e, 0xe3, 0x3c, - 0x0a, 0xd7, 0x23, 0x3c, 0x05, 0x2f, 0xa7, 0x3c, 0xa7, 0xc4, 0x62, 0x3b, - 0x88, 0x45, 0x4a, 0x3c, 0x00, 0x00, 0x80, 0x3b, 0x39, 0x8e, 0xe3, 0x3b, - 0xbc, 0xe4, 0xc1, 0x3b, 0x05, 0x2f, 0xa7, 0x3b, 0xb4, 0xa2, 0x91, 0x3b, - 0x88, 0x45, 0x4a, 0x3b, 0x0a, 0xd7, 0x23, 0x3b, 0x48, 0x8a, 0x35, 0x3b, - 0xcd, 0xcc, 0x4c, 0x3d, 0xdd, 0xed, 0x0b, 0x1a, 0xd4, 0xed, 0x53, 0x7a, - 0xd4, 0xed, 0x54, 0xba, 0xdd, 0xed, 0x29, 0x2a, 0x61, 0xee, 0xab, 0xba, - 0x20, 0xee, 0x27, 0x0a, 0xe0, 0xee, 0x22, 0xba, 0x1f, 0xed, 0x23, 0x0a, - 0xdc, 0xee, 0x8a, 0xba, 0x38, 0xee, 0x00, 0x0a, 0xc4, 0xed, 0x55, 0xba, - 0x20, 0xee, 0x28, 0x0a, 0xa8, 0x47, 0x9d, 0xed, 0x0c, 0x1a, 0xd4, 0xed, - 0x58, 0x7a, 0x94, 0xed, 0x59, 0xca, 0xdd, 0xed, 0x13, 0x0a, 0x21, 0xee, - 0x0c, 0xca, 0x20, 0xee, 0x27, 0x0a, 0xa0, 0xee, 0x20, 0xca, 0x1f, 0xed, - 0x2e, 0x0a, 0x9c, 0xee, 0x8a, 0xca, 0x38, 0xee, 0x00, 0x0a, 0x84, 0xed, - 0x5a, 0xca, 0x20, 0xee, 0x28, 0x0a, 0xa8, 0x47, 0xdd, 0xed, 0x0d, 0x0a, - 0xd4, 0xed, 0x5d, 0x7a, 0x94, 0xed, 0x5e, 0xda, 0x9d, 0xed, 0x14, 0x9a, - 0x20, 0xee, 0x8d, 0xda, 0x20, 0xee, 0x27, 0x0a, 0xa0, 0xee, 0x09, 0xda, - 0x1f, 0xed, 0x3a, 0x0a, 0x9c, 0xee, 0x8a, 0xda, 0x38, 0xee, 0x00, 0x0a, - 0x84, 0xed, 0x5f, 0xda, 0x20, 0xee, 0x28, 0x0a, 0xa8, 0x47, 0xd4, 0xed, - 0x62, 0x7a, 0x9d, 0xed, 0x0e, 0x9a, 0xd4, 0xed, 0x63, 0xda, 0x9d, 0xed, - 0x15, 0xea, 0x20, 0xee, 0x27, 0x0a, 0x69, 0xee, 0x2d, 0xda, 0xe0, 0xee, - 0x0e, 0xda, 0x1f, 0xed, 0x45, 0x0a, 0xdc, 0xee, 0x8a, 0xda, 0x38, 0xee, - 0x00, 0x0a, 0xc4, 0xed, 0x64, 0xda, 0x20, 0xee, 0x28, 0x0a, 0xa8, 0x47, - 0xd4, 0xed, 0x67, 0x7a, 0xdd, 0xed, 0x0f, 0xea, 0x94, 0xed, 0x68, 0xea, - 0x9d, 0xed, 0x16, 0xfa, 0x20, 0xee, 0x27, 0x0a, 0x2e, 0xee, 0x8e, 0xea, - 0xa0, 0xee, 0x0f, 0xea, 0x1f, 0xed, 0x51, 0x0a, 0x9c, 0xee, 0x8a, 0xea, - 0x38, 0xee, 0x00, 0x0a, 0x84, 0xed, 0x69, 0xea, 0x20, 0xee, 0x28, 0x0a, - 0xa8, 0x47, 0xd4, 0xed, 0x6c, 0x7a, 0xd4, 0xed, 0x6d, 0xea, 0x9d, 0xed, - 0x10, 0xfa, 0x20, 0xee, 0x27, 0x0a, 0x6f, 0xee, 0x2e, 0xea, 0xdd, 0xed, - 0x17, 0x7a, 0xe0, 0xee, 0x27, 0xea, 0x1f, 0xed, 0x5c, 0x0a, 0xdc, 0xee, - 0x8a, 0xea, 0x38, 0xee, 0x00, 0x0a, 0xc4, 0xed, 0x6e, 0xea, 0x20, 0xee, - 0x28, 0x0a, 0xa8, 0x47, 0xd4, 0xed, 0x71, 0x7a, 0x94, 0xed, 0x72, 0xfa, - 0x20, 0xee, 0x27, 0x0a, 0x2a, 0xee, 0x8f, 0xfa, 0xdd, 0xed, 0x18, 0x7a, - 0xa0, 0xee, 0x27, 0xfa, 0x1f, 0xed, 0x67, 0x0a, 0x9c, 0xee, 0x8a, 0xfa, - 0x38, 0xee, 0x00, 0x0a, 0x84, 0xed, 0x73, 0xfa, 0x20, 0xee, 0x28, 0x0a, - 0xa8, 0x47, 0xd4, 0xed, 0x76, 0x7a, 0x94, 0xed, 0x77, 0x9a, 0x9d, 0xed, - 0x19, 0x7a, 0x20, 0xee, 0x27, 0x0a, 0xdd, 0xed, 0x11, 0x7a, 0x27, 0xee, - 0x89, 0x9a, 0x7f, 0xee, 0x6a, 0xaa, 0xa0, 0xee, 0x07, 0x9a, 0x1f, 0xed, - 0x73, 0x0a, 0x9c, 0xee, 0x8a, 0x9a, 0x38, 0xee, 0x00, 0x0a, 0x84, 0xed, - 0x78, 0x9a, 0x20, 0xee, 0x28, 0x0a, 0xa8, 0x47, 0x9d, 0xed, 0x22, 0x3a, - 0xdd, 0xed, 0x01, 0x7a, 0x9d, 0xed, 0x04, 0x5a, 0xdd, 0xed, 0x1f, 0x5a, - 0xdd, 0xed, 0x00, 0x6a, 0xdd, 0xed, 0x05, 0x4a, 0x9d, 0xed, 0x23, 0x7a, - 0xdd, 0xed, 0x21, 0x0a, 0x9d, 0xed, 0x20, 0x1a, 0xdd, 0xed, 0x1d, 0x1a, - 0x9d, 0xed, 0x1c, 0x2a, 0x9d, 0xed, 0x03, 0x6a, 0x9d, 0xed, 0x07, 0x4a, - 0xdd, 0xed, 0x09, 0x2a, 0x73, 0xee, 0x67, 0x7a, 0x9d, 0xed, 0x08, 0x3a, - 0x75, 0xee, 0xc5, 0x5a, 0x7f, 0xee, 0xc3, 0x3a, 0x9d, 0xed, 0x1e, 0x5a, - 0x9d, 0xed, 0x0e, 0x3a, 0x35, 0xee, 0x64, 0x5a, 0x7d, 0xee, 0xc3, 0xda, - 0x37, 0xee, 0x66, 0x7a, 0xdd, 0xed, 0x06, 0x4a, 0xdd, 0xed, 0x02, 0x6a, - 0x9d, 0xed, 0x0f, 0x3a, 0x70, 0xee, 0xe6, 0x6a, 0x31, 0xee, 0x46, 0x6a, - 0x71, 0xee, 0xe4, 0x4a, 0x32, 0xee, 0x44, 0x4a, 0x3e, 0xee, 0x43, 0xea, - 0x9d, 0xed, 0x0a, 0x2a, 0xdd, 0xed, 0x0b, 0x1a, 0x9d, 0xed, 0x0c, 0x1a, - 0xdd, 0xed, 0x0d, 0x0a, 0x9d, 0xed, 0x10, 0x3a, 0x7e, 0xee, 0xc3, 0xea, - 0x9d, 0xed, 0x11, 0x3a, 0x39, 0xee, 0x43, 0x9a, 0xb5, 0xee, 0x00, 0x3a, - 0xa7, 0xee, 0x83, 0x7a, 0x1f, 0xed, 0xa1, 0x3a, 0xf0, 0xee, 0x47, 0x7a, - 0xe6, 0xee, 0x83, 0x7a, 0x1f, 0xed, 0xa3, 0x7a, 0x5f, 0xed, 0xa3, 0x6a, - 0xe6, 0xee, 0x07, 0x7a, 0x1f, 0xed, 0xa4, 0x7a, 0x1f, 0xed, 0xa4, 0x6a, - 0xe5, 0xee, 0x87, 0x7a, 0x1f, 0xed, 0xa5, 0x7a, 0x5f, 0xed, 0xa5, 0x5a, - 0xe5, 0xee, 0x07, 0x7a, 0x1f, 0xed, 0xa6, 0x7a, 0x1f, 0xed, 0xa6, 0x5a, - 0xe4, 0xee, 0x87, 0x7a, 0x1f, 0xed, 0xa7, 0x7a, 0x5f, 0xed, 0xa7, 0x4a, - 0xe4, 0xee, 0x26, 0x7a, 0x79, 0xee, 0xe2, 0x9a, 0xe3, 0xee, 0x87, 0x7a, - 0x3b, 0xee, 0x42, 0xba, 0xe9, 0xee, 0xa5, 0x7a, 0x7b, 0xee, 0xe1, 0xba, - 0xeb, 0xee, 0x06, 0x7a, 0x1f, 0xed, 0xae, 0x7a, 0x5f, 0xed, 0xae, 0x6a, - 0x5f, 0xed, 0xae, 0x3a, 0x1f, 0xed, 0xae, 0x4a, 0x5f, 0xed, 0xae, 0x5a, - 0x1f, 0xed, 0xae, 0x6a, 0xeb, 0xee, 0x87, 0x7a, 0x3c, 0xee, 0x41, 0xca, - 0x3d, 0xee, 0x60, 0xda, 0xec, 0xee, 0x26, 0x7a, 0x1f, 0xed, 0xb2, 0x7a, - 0x5f, 0xed, 0xb2, 0x6a, 0xed, 0xee, 0x23, 0x7a, 0xed, 0xee, 0x84, 0x7a, - 0xee, 0xee, 0x24, 0x7a, 0xee, 0xee, 0x85, 0x7a, 0x9d, 0xed, 0x1a, 0x5a, - 0xea, 0xee, 0xa5, 0x7a, 0xd4, 0xed, 0x7b, 0x5a, 0xe9, 0xee, 0x07, 0x7a, - 0x20, 0xee, 0x25, 0x0a, 0x94, 0xed, 0x7c, 0x7a, 0xdd, 0xed, 0x1b, 0x5a, - 0x25, 0xee, 0x87, 0x7a, 0xa0, 0xee, 0x05, 0x7a, 0x9c, 0xee, 0x8a, 0x7a, - 0x77, 0xee, 0x65, 0xca, 0x84, 0xed, 0x7d, 0x7a, 0xec, 0xee, 0x86, 0x7a, - 0x67, 0xee, 0xa6, 0x7a, 0xeb, 0xec, 0x01, 0x7a, 0xd4, 0xed, 0x1f, 0x6a, - 0x94, 0xed, 0x24, 0x6a, 0xd4, 0xed, 0x29, 0x5a, 0x94, 0xed, 0x0a, 0x9a, - 0xd4, 0xed, 0x0d, 0x9a, 0x94, 0xed, 0x07, 0x7a, 0x94, 0xed, 0x09, 0xca, - 0xd4, 0xed, 0x0c, 0xba, 0xd4, 0xed, 0x10, 0xda, 0x94, 0xed, 0x16, 0xea, - 0xd4, 0xed, 0x1b, 0x7a, 0xd4, 0xed, 0x1e, 0xea, 0x94, 0xed, 0x23, 0xfa, - 0xd4, 0xed, 0x28, 0xfa, 0xcd, 0xed, 0x00, 0x6a, 0x8d, 0xed, 0x01, 0x6a, - 0xcd, 0xed, 0x02, 0x5a, 0x84, 0xed, 0x08, 0x7a, 0x84, 0xed, 0x0b, 0x9a, - 0x84, 0xed, 0x0a, 0xca, 0xc4, 0xed, 0x0e, 0x9a, 0xc4, 0xed, 0x0d, 0xba, - 0xc4, 0xed, 0x11, 0xda, 0x84, 0xed, 0x17, 0xea, 0xc4, 0xed, 0x1c, 0x7a, - 0xc4, 0xed, 0x20, 0x6a, 0xd4, 0xed, 0x2e, 0x6a, 0xd4, 0xed, 0x3d, 0x4a, - 0xcd, 0xed, 0x03, 0x6a, 0xc4, 0xed, 0x2f, 0x6a, 0xd4, 0xed, 0x47, 0x6a, - 0x94, 0xed, 0x42, 0x4a, 0xcd, 0xed, 0x08, 0x6a, 0xc4, 0xed, 0x48, 0x6a, - 0xd4, 0xed, 0x4c, 0x6a, 0x94, 0xed, 0x2d, 0x5a, 0x84, 0xed, 0x25, 0x6a, - 0xc4, 0xed, 0x2a, 0x5a, 0x94, 0xed, 0x33, 0x6a, 0xd4, 0xed, 0x38, 0x5a, - 0xcd, 0xed, 0x09, 0x6a, 0xc4, 0xed, 0x4d, 0x6a, 0xd4, 0xed, 0x51, 0x6a, - 0x8d, 0xed, 0x04, 0x6a, 0xcd, 0xed, 0x06, 0x4a, 0x8d, 0xed, 0x07, 0x4a, - 0x84, 0xed, 0x34, 0x6a, 0xc4, 0xed, 0x3e, 0x4a, 0x84, 0xed, 0x43, 0x4a, - 0xcd, 0xed, 0x0a, 0x6a, 0xc4, 0xed, 0x52, 0x6a, 0xc4, 0xed, 0x1f, 0xea, - 0x84, 0xed, 0x24, 0xfa, 0xc4, 0xed, 0x29, 0xfa, 0xcd, 0xed, 0x05, 0x5a, - 0x84, 0xed, 0x2e, 0x5a, 0xc4, 0xed, 0x39, 0x5a, 0xd4, 0xed, 0x32, 0x5a, - 0x94, 0xed, 0x50, 0x3a, 0x94, 0xed, 0x37, 0x6a, 0x8d, 0xed, 0x12, 0x3a, - 0x84, 0xed, 0x51, 0x3a, 0x94, 0xed, 0x56, 0x3a, 0xd4, 0xed, 0x3c, 0x6a, - 0x8d, 0xed, 0x0b, 0x3a, 0x84, 0xed, 0x57, 0x3a, 0x94, 0xed, 0x5b, 0x3a, - 0xd4, 0xed, 0x41, 0x4a, 0x8d, 0xed, 0x0c, 0x3a, 0x84, 0xed, 0x5c, 0x3a, - 0x94, 0xed, 0x60, 0x3a, 0x94, 0xed, 0x46, 0x4a, 0x8d, 0xed, 0x0d, 0x3a, - 0x84, 0xed, 0x61, 0x3a, 0x94, 0xed, 0x65, 0x3a, 0xd4, 0xed, 0x4b, 0x3a, - 0x8d, 0xed, 0x0e, 0x3a, 0x84, 0xed, 0x66, 0x3a, 0x94, 0xed, 0x6a, 0x3a, - 0xc4, 0xed, 0x33, 0x5a, 0x8d, 0xed, 0x0f, 0x3a, 0x84, 0xed, 0x6b, 0x3a, - 0x94, 0xed, 0x6f, 0x3a, 0x84, 0xed, 0x38, 0x6a, 0x8d, 0xed, 0x10, 0x3a, - 0xc4, 0xed, 0x3d, 0x6a, 0xc4, 0xed, 0x42, 0x4a, 0x84, 0xed, 0x47, 0x4a, - 0xc4, 0xed, 0x4c, 0x3a, 0x84, 0xed, 0x70, 0x3a, 0x94, 0xed, 0x79, 0x3a, - 0xd4, 0xed, 0x74, 0xaa, 0x8d, 0xed, 0x11, 0x3a, 0x84, 0xed, 0x7a, 0x3a, - 0x94, 0xed, 0x5a, 0x3a, 0xd4, 0xed, 0x55, 0x2a, 0x8d, 0xed, 0x13, 0x3a, - 0x84, 0xed, 0x5b, 0x3a, 0x94, 0xed, 0x5f, 0x3a, 0xc4, 0xed, 0x75, 0xaa, - 0x8d, 0xed, 0x14, 0x3a, 0x84, 0xed, 0x60, 0x3a, 0x94, 0xed, 0x64, 0x3a, - 0xc4, 0xed, 0x56, 0x2a, 0x8d, 0xed, 0x15, 0x3a, 0x84, 0xed, 0x65, 0x3a, - 0x94, 0xed, 0x69, 0x3a, 0x8d, 0xed, 0x16, 0x3a, 0x84, 0xed, 0x6a, 0x3a, - 0x94, 0xed, 0x6e, 0x3a, 0x8d, 0xed, 0x17, 0x3a, 0x84, 0xed, 0x6f, 0x3a, - 0x94, 0xed, 0x73, 0x3a, 0x8d, 0xed, 0x18, 0x3a, 0x84, 0xed, 0x74, 0x3a, - 0x94, 0xed, 0x78, 0x3a, 0x8d, 0xed, 0x19, 0x3a, 0x84, 0xed, 0x79, 0x3a, - 0x94, 0xed, 0x7e, 0x3a, 0x8d, 0xed, 0x1b, 0x3a, 0x84, 0xed, 0x7f, 0x3a, - 0x94, 0xed, 0x7d, 0x3a, 0xd8, 0x45, 0x8d, 0xed, 0x1a, 0x3a, 0x84, 0xed, - 0x7e, 0x3a, 0x7f, 0xf4, 0x35, 0xab, 0xc4, 0xe9, 0x00, 0xaa, 0xc4, 0xe9, - 0x12, 0x66, 0x2e, 0xb0, 0xbd, 0xec, 0x10, 0x8b, 0xbd, 0xe8, 0xf0, 0x8d, - 0x03, 0x4a, 0x59, 0xf8, 0x02, 0x20, 0x51, 0x68, 0x01, 0xb1, 0x70, 0x47, - 0x53, 0x60, 0x70, 0x47, 0x08, 0x00, 0x00, 0x00, 0x70, 0x47, 0x00, 0xbf, - 0x10, 0x46, 0x19, 0x46, 0x4b, 0xb1, 0x9f, 0xed, 0x05, 0x0a, 0x05, 0x4a, - 0x83, 0xed, 0x00, 0x0a, 0x59, 0xf8, 0x02, 0x20, 0xf7, 0xee, 0x00, 0x0a, - 0x10, 0x47, 0x70, 0x47, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x82, 0xb0, 0x01, 0x93, 0x73, 0xb1, 0x19, 0x46, 0x07, 0x4b, 0x81, 0xed, - 0x00, 0x0a, 0xf0, 0xee, 0x60, 0x7a, 0x59, 0xf8, 0x03, 0x30, 0xf0, 0xee, - 0x41, 0x0a, 0x10, 0x46, 0xb0, 0xee, 0x67, 0x0a, 0x02, 0xb0, 0x18, 0x47, - 0x02, 0xb0, 0x70, 0x47, 0x14, 0x00, 0x00, 0x00, 0xf0, 0xee, 0x60, 0x7a, - 0x10, 0x46, 0xf0, 0xee, 0x41, 0x0a, 0x19, 0x46, 0x3b, 0xb1, 0x04, 0x4a, - 0x83, 0xed, 0x00, 0x0a, 0x59, 0xf8, 0x02, 0x20, 0xb0, 0xee, 0x67, 0x0a, - 0x10, 0x47, 0x70, 0x47, 0x14, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x8f, 0x4b, - 0x5f, 0x4a, 0x59, 0xf8, 0x03, 0x40, 0x5f, 0x4b, 0x23, 0x62, 0x5f, 0x4b, - 0xa3, 0x66, 0x5f, 0x4b, 0xe3, 0x67, 0x5f, 0x4b, 0xc4, 0xf8, 0x90, 0x30, - 0x5e, 0x4b, 0xc4, 0xf8, 0xa4, 0x30, 0x5e, 0x4b, 0xc4, 0xf8, 0xb8, 0x30, - 0x5d, 0x4b, 0x5e, 0x49, 0xc4, 0xf8, 0xcc, 0x30, 0x5d, 0x4b, 0x62, 0x61, - 0xa1, 0x61, 0x5d, 0x4a, 0x5d, 0x49, 0xc4, 0xf8, 0xe0, 0x30, 0x5d, 0x4b, - 0xa2, 0x65, 0xe1, 0x66, 0x5c, 0x4a, 0x5d, 0x49, 0xc4, 0xf8, 0xf4, 0x30, - 0x5c, 0x4b, 0xc4, 0xf8, 0x8c, 0x20, 0xc4, 0xf8, 0xa0, 0x10, 0x5b, 0x4a, - 0x5b, 0x49, 0xc4, 0xf8, 0x08, 0x31, 0x5b, 0x4b, 0xc4, 0xf8, 0xb4, 0x20, - 0xc4, 0xf8, 0xc8, 0x10, 0x59, 0x4a, 0x5a, 0x49, 0xc4, 0xf8, 0x1c, 0x31, - 0x59, 0x4b, 0xc4, 0xf8, 0xdc, 0x20, 0xc4, 0xf8, 0xf0, 0x10, 0x58, 0x4a, - 0x58, 0x49, 0xc4, 0xf8, 0x30, 0x31, 0x58, 0x4b, 0xc4, 0xf8, 0x04, 0x21, - 0xc4, 0xf8, 0x18, 0x11, 0x56, 0x4a, 0x57, 0x49, 0xc4, 0xf8, 0x44, 0x31, - 0x56, 0x4b, 0xc4, 0xf8, 0x2c, 0x21, 0x4b, 0xf6, 0x80, 0x30, 0x55, 0x4a, - 0xc4, 0xf8, 0x40, 0x11, 0xc4, 0xf8, 0x58, 0x31, 0x53, 0x49, 0x54, 0x4b, - 0x20, 0x61, 0xc4, 0xf8, 0x54, 0x21, 0xc4, 0xf8, 0x68, 0x11, 0xc4, 0xf8, - 0x6c, 0x31, 0x51, 0x4b, 0xc4, 0xf8, 0x80, 0x31, 0x50, 0x4b, 0x51, 0x49, - 0xc4, 0xf8, 0x94, 0x31, 0x50, 0x4b, 0x51, 0x4a, 0xc4, 0xf8, 0x90, 0x11, - 0xc4, 0xf8, 0xa8, 0x31, 0x4f, 0x49, 0x50, 0x4b, 0xc4, 0xf8, 0x7c, 0x21, - 0xc4, 0xf8, 0xb8, 0x11, 0x4e, 0x4a, 0x4f, 0x49, 0xc4, 0xf8, 0xbc, 0x31, - 0x4e, 0x4b, 0x9f, 0xed, 0x4f, 0x0a, 0xc4, 0xf8, 0xa4, 0x21, 0xc4, 0xf8, - 0xd0, 0x31, 0x4d, 0x4a, 0x4d, 0x4b, 0xc4, 0xf8, 0xe0, 0x11, 0x21, 0x46, - 0x82, 0xb0, 0x4f, 0xf0, 0x7c, 0x55, 0xc4, 0xf8, 0xcc, 0x21, 0xc4, 0xf8, - 0xe4, 0x31, 0x49, 0x4a, 0x49, 0x4b, 0xc4, 0xf8, 0xf4, 0x21, 0x04, 0xf1, - 0x08, 0x00, 0x84, 0xed, 0x11, 0x0a, 0xc4, 0xf8, 0xf8, 0x31, 0xe5, 0x61, - 0xe5, 0x65, 0x25, 0x67, 0xfe, 0xf7, 0x30, 0xfe, 0x41, 0xf8, 0x70, 0x5f, - 0x44, 0x4b, 0xdf, 0xed, 0x42, 0x0a, 0x59, 0xf8, 0x03, 0x00, 0x43, 0x4b, - 0x8d, 0xed, 0x01, 0x0a, 0x59, 0xf8, 0x03, 0x60, 0xb0, 0x47, 0x21, 0x46, - 0x40, 0x4b, 0x41, 0xf8, 0x1c, 0x5f, 0x9d, 0xed, 0x01, 0x0a, 0x59, 0xf8, - 0x03, 0x00, 0xf7, 0xee, 0x00, 0x0a, 0xb0, 0x47, 0x21, 0x46, 0x3c, 0x4b, - 0x41, 0xf8, 0x5c, 0x5f, 0x9d, 0xed, 0x01, 0x0a, 0x59, 0xf8, 0x03, 0x00, - 0xf1, 0xee, 0x04, 0x0a, 0xb0, 0x47, 0x63, 0x68, 0x0b, 0xb1, 0x02, 0xb0, - 0x70, 0xbd, 0x04, 0xf1, 0x44, 0x03, 0x63, 0x60, 0x02, 0xb0, 0x70, 0xbd, - 0x1f, 0x42, 0x89, 0x38, 0xca, 0xc3, 0x7f, 0x3f, 0x48, 0xf0, 0xff, 0xbf, - 0x92, 0xe0, 0x7f, 0x3f, 0xea, 0xde, 0x7f, 0x3f, 0x14, 0xdd, 0x7f, 0x3f, - 0x06, 0xdb, 0x7f, 0x3f, 0xb7, 0xd8, 0x7f, 0x3f, 0x44, 0xd8, 0x70, 0x3a, - 0x19, 0xd6, 0x7f, 0x3f, 0x01, 0x00, 0xc0, 0x42, 0x1f, 0x42, 0x09, 0x39, - 0x1b, 0xd3, 0x7f, 0x3f, 0x75, 0xef, 0xff, 0xbf, 0x89, 0xee, 0xff, 0xbf, - 0xa7, 0xcf, 0x7f, 0x3f, 0x82, 0xed, 0xff, 0xbf, 0x5b, 0xec, 0xff, 0xbf, - 0xa0, 0xcb, 0x7f, 0x3f, 0x0b, 0xeb, 0xff, 0xbf, 0x8c, 0xe9, 0xff, 0xbf, - 0xdd, 0xc6, 0x7f, 0x3f, 0xd2, 0xe7, 0xff, 0xbf, 0xcf, 0xe5, 0xff, 0xbf, - 0x27, 0xc1, 0x7f, 0x3f, 0x6d, 0xe3, 0xff, 0xbf, 0x92, 0xe0, 0xff, 0xbf, - 0x2d, 0xba, 0x7f, 0x3f, 0x14, 0xdd, 0xff, 0xbf, 0xb7, 0xd8, 0xff, 0xbf, - 0x74, 0xb1, 0x7f, 0x3f, 0x3d, 0xa6, 0x7f, 0x3f, 0x4a, 0x97, 0x7f, 0x3f, - 0xa0, 0xcb, 0xff, 0xbf, 0x5e, 0x82, 0x7f, 0x3f, 0x1b, 0xd3, 0xff, 0xbf, - 0x74, 0xb1, 0xff, 0xbf, 0x00, 0x63, 0x7f, 0x3f, 0x27, 0xc1, 0xff, 0xbf, - 0x00, 0x63, 0xff, 0xbf, 0xc0, 0x2e, 0x7f, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x4a, 0x97, 0xff, 0xbf, 0x60, 0xc6, 0x7e, 0x3f, 0x60, 0xc6, 0xfe, 0xbf, - 0x3f, 0x8e, 0x7d, 0x3f, 0x00, 0x00, 0x7a, 0x44, 0x08, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x10, 0x4b, 0x59, 0xf8, 0x03, 0x00, - 0x43, 0x68, 0x83, 0xb0, 0x53, 0xb1, 0x0e, 0x4a, 0x59, 0xf8, 0x02, 0x20, - 0x12, 0x68, 0x12, 0x78, 0x07, 0xee, 0x90, 0x2a, 0xf8, 0xee, 0x67, 0x7a, - 0xc3, 0xed, 0x00, 0x7a, 0x09, 0x4b, 0x59, 0xf8, 0x03, 0x10, 0x09, 0x68, - 0x00, 0x22, 0xcd, 0xe9, 0x00, 0x12, 0x6b, 0x46, 0x08, 0x30, 0x18, 0x21, - 0xff, 0xf7, 0xbe, 0xf8, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x00, 0xbf, - 0x08, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x70, 0xb5, 0x10, 0x4a, 0x10, 0x4b, 0x59, 0xf8, 0x02, 0x60, 0x59, 0xf8, - 0x03, 0x50, 0x76, 0x1b, 0xb6, 0x10, 0x06, 0xd0, 0x00, 0x24, 0x55, 0xf8, - 0x04, 0x3b, 0x01, 0x34, 0x98, 0x47, 0xa6, 0x42, 0xf9, 0xd1, 0x0a, 0x4a, - 0x0a, 0x4b, 0x59, 0xf8, 0x02, 0x60, 0x59, 0xf8, 0x03, 0x50, 0x76, 0x1b, - 0xb6, 0x10, 0x06, 0xd0, 0x00, 0x24, 0x55, 0xf8, 0x04, 0x3b, 0x01, 0x34, - 0x98, 0x47, 0xa6, 0x42, 0xf9, 0xd1, 0x70, 0xbd, 0x3c, 0x00, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, - 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, - 0x00, 0x90, 0x02, 0xbc, 0xfe, 0xf7, 0xdc, 0xfc, 0xbd, 0xe8, 0x00, 0x82, - 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, - 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0x6c, 0xfe, - 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, - 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, - 0xff, 0xf7, 0x88, 0xff, 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, - 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, - 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0xa2, 0xff, 0xbd, 0xe8, 0x00, 0x82, - 0x00, 0x00, 0x00, 0x20, 0x46, 0x72, 0x65, 0x71, 0x00, 0x00, 0x00, 0x00, - 0x50, 0x6f, 0x73, 0x00, 0x53, 0x68, 0x61, 0x72, 0x70, 0x6e, 0x65, 0x73, - 0x73, 0x00, 0x00, 0x00 -}; -unsigned int __DRUMS_Djembe_bin_len = 6496; diff --git a/app/DRUMS/TR707-HiHat.bin b/app/DRUMS/TR707-HiHat.bin new file mode 100644 index 0000000..55f7343 Binary files /dev/null and b/app/DRUMS/TR707-HiHat.bin differ diff --git a/app/DRUMS/TR707-HiHat.cpp b/app/DRUMS/TR707-HiHat.cpp new file mode 100644 index 0000000..96f6bc2 --- /dev/null +++ b/app/DRUMS/TR707-HiHat.cpp @@ -0,0 +1,33 @@ +#include "../squares-and-circles-api.h" + +// #include "eproms/tr707/IC35_TR707_SNDROM.h" +const uint8_t *IC35_TR707_SNDROM_bin = machine::fs_read("707_IC35"); + +constexpr static int ch_start = 24576; + +static float _ch_vol = 1.f; +static float _ch_dec = 0.2f; +static float _oh_dec = 0.5f; + +int32_t _select = 0; +void *_ch; +void *_oh; + +void engine::setup() +{ + const uint8_t *HH = &IC35_TR707_SNDROM_bin[0x2000]; + _ch = dsp_sample_u8(HH, 0x2000, 25000, 0); + _oh = dsp_sample_u8(HH, 0x2000, 25000, 0); + + engine::addParam("", &_select, 0, 0); // . = hidden + engine::addParam("CH-Lev", &_ch_vol); + engine::addParam("CH-Dec", &_ch_dec); + engine::addParam("OH-Dec", &_oh_dec); +} + +void engine::process() +{ + auto outputL = engine::outputBuffer<0>(); + memset(outputL, 0, sizeof(float) * FRAME_BUFFER_SIZE); + dsp_process_hihats(_ch, _oh, _ch_vol, _ch_dec, _oh_dec, outputL); +} \ No newline at end of file diff --git a/app/DRUMS/TR707.bin b/app/DRUMS/TR707.bin new file mode 100644 index 0000000..365f7d1 Binary files /dev/null and b/app/DRUMS/TR707.bin differ diff --git a/app/DRUMS/TR707.cpp b/app/DRUMS/TR707.cpp new file mode 100644 index 0000000..ad27f34 --- /dev/null +++ b/app/DRUMS/TR707.cpp @@ -0,0 +1,65 @@ +#include "../squares-and-circles-api.h" +#include + +// #include "eproms/tr707/IC34_TR707_SNDROM.h" +// #include "eproms/tr707/IC35_TR707_SNDROM.h" +static auto IC34_TR707_SNDROM_bin = machine::fs_read("707_IC34"); +static auto IC35_TR707_SNDROM_bin = machine::fs_read("707_IC35"); + +static float _pitch = 0.5f; +static float _start = 0.f; +static float _end = 1.f; +static float _amp = 1.f; + +int32_t _select = 0; +const char *sample_names[12]; +void *sample_ptr[12]; +#define SETUP_SAMPLE(name, ptr) \ + sample_names[_select] = name; \ + sample_ptr[_select] = ptr; \ + ++_select + +void engine::setup() +{ + auto BD0 = &IC34_TR707_SNDROM_bin[0x0000]; + auto BD1 = &IC34_TR707_SNDROM_bin[0x0001]; + auto SD0 = &IC34_TR707_SNDROM_bin[0x2000]; + auto SD1 = &IC34_TR707_SNDROM_bin[0x2001]; + auto RM = &IC35_TR707_SNDROM_bin[0x4000]; + auto CB = &IC35_TR707_SNDROM_bin[0x4001]; + auto CP = &IC35_TR707_SNDROM_bin[0x6000]; + auto TMB = &IC35_TR707_SNDROM_bin[0x6001]; + auto LT = &IC34_TR707_SNDROM_bin[0x4000]; + auto MT = &IC34_TR707_SNDROM_bin[0x6000]; + auto HT = &IC35_TR707_SNDROM_bin[0x0000]; + auto HH = &IC35_TR707_SNDROM_bin[0x2000]; + + SETUP_SAMPLE("BD0", dsp_sample_u8(BD0, 0x1000, 25000, 1)); + SETUP_SAMPLE("BD1", dsp_sample_u8(BD1, 0x1000, 25000, 1)); + SETUP_SAMPLE("SD0", dsp_sample_u8(SD0, 0x1000, 25000, 1)); + SETUP_SAMPLE("SD1", dsp_sample_u8(SD1, 0x1000, 25000, 1)); + + SETUP_SAMPLE("CP", dsp_sample_u8(CP, 0x1000, 25000, 1)); + SETUP_SAMPLE("TMB", dsp_sample_u8(TMB, 0x1000, 25000, 1)); + SETUP_SAMPLE("RM", dsp_sample_u8(RM, 0x1000, 25000, 1)); + SETUP_SAMPLE("CB", dsp_sample_u8(CB, 0x1000, 25000, 1)); + + SETUP_SAMPLE("LT", dsp_sample_u8(LT, 0x1000, 25000, 0)); + SETUP_SAMPLE("MT", dsp_sample_u8(MT, 0x1000, 25000, 0)); + SETUP_SAMPLE("HT", dsp_sample_u8(HT, 0x1000, 25000, 0)); + SETUP_SAMPLE("HH", dsp_sample_u8(HH, 0x1000, 25000, 0)); + + engine::addParam("Pitch", &_pitch); + engine::addParam(">Sample", &_select, 0, LEN_OF(sample_names) - 1, sample_names); // . = hidden + _select = 0; + + engine::addParam("Start", &_start); + engine::addParam("End", &_end); +} + +void engine::process() +{ + auto outputL = engine::outputBuffer<0>(); + memset(outputL, 0, sizeof(float) * FRAME_BUFFER_SIZE); + dsp_process_sample(sample_ptr[_select], _start, _end, _pitch, outputL); +} \ No newline at end of file diff --git a/app/DRUMS/TR909-HiHat.bin b/app/DRUMS/TR909-HiHat.bin new file mode 100644 index 0000000..7062416 Binary files /dev/null and b/app/DRUMS/TR909-HiHat.bin differ diff --git a/app/DRUMS/TR909-HiHat.cpp b/app/DRUMS/TR909-HiHat.cpp new file mode 100644 index 0000000..c6a50f7 --- /dev/null +++ b/app/DRUMS/TR909-HiHat.cpp @@ -0,0 +1,31 @@ +#include "../squares-and-circles-api.h" + +// #include "eproms/tr909/hihats.h" +static const uint8_t *HiHats_bin = machine::fs_read("909_HIGH"); + +static float _ch_vol = 1.f; +static float _ch_dec = 0.2f; +static float _oh_dec = 0.5f; + +int32_t _select = 0; +void *_ch; +void *_oh; + +void engine::setup() +{ + _oh = dsp_sample_u8(HiHats_bin, 24576, 32000, 0); + const int ch_start = 24576; + _ch = dsp_sample_u8(HiHats_bin + ch_start, 32768 - ch_start, 32000, 0); + + engine::addParam("", &_select, 0, 0); // . = hidden + engine::addParam("CH-Lev", &_ch_vol); + engine::addParam("CH-Dec", &_ch_dec); + engine::addParam("OH-Dec", &_oh_dec); +} + +void engine::process() +{ + auto outputL = engine::outputBuffer<0>(); + memset(outputL, 0, sizeof(float) * FRAME_BUFFER_SIZE); + dsp_process_hihats(_ch, _oh, _ch_vol, _ch_dec, _oh_dec, outputL); +} \ No newline at end of file diff --git a/app/DRUMS/TR909-Ride.bin b/app/DRUMS/TR909-Ride.bin new file mode 100644 index 0000000..d43aee1 Binary files /dev/null and b/app/DRUMS/TR909-Ride.bin differ diff --git a/app/DRUMS/TR909-Ride.cpp b/app/DRUMS/TR909-Ride.cpp new file mode 100644 index 0000000..c85b9e2 --- /dev/null +++ b/app/DRUMS/TR909-Ride.cpp @@ -0,0 +1,32 @@ +#include "../squares-and-circles-api.h" + +// #include "eproms/tr909/ride.h" +static const uint8_t *Ride_bin = machine::fs_read("909_RIDE"); + +constexpr static int ch_start = 24576; + +static float _ch_vol = 1.f; +static float _ch_dec = 0.2f; +static float _oh_dec = 0.5f; + +int32_t _select = 0; +void *_ch; +void *_oh; + +void engine::setup() +{ + _ch = dsp_sample_u8(Ride_bin, 32768, 32000, 0); + _oh = dsp_sample_u8(Ride_bin, 32768, 32000, 0); + + engine::addParam("", &_select, 0, 0); // . = hidden + engine::addParam("CH-Lev", &_ch_vol); + engine::addParam("CH-Dec", &_ch_dec); + engine::addParam("OH-Dec", &_oh_dec); +} + +void engine::process() +{ + auto outputL = engine::outputBuffer<0>(); + memset(outputL, 0, sizeof(float) * FRAME_BUFFER_SIZE); + dsp_process_hihats(_ch, _oh, _ch_vol, _ch_dec, _oh_dec, outputL); +} \ No newline at end of file diff --git a/app/FX/Delay.bin b/app/FX/Delay.bin new file mode 100644 index 0000000..885436d Binary files /dev/null and b/app/FX/Delay.bin differ diff --git a/app/FX/Delay.bin.h b/app/FX/Delay.bin.h deleted file mode 100644 index 37d1072..0000000 --- a/app/FX/Delay.bin.h +++ /dev/null @@ -1,261 +0,0 @@ -const uint8_t __FX_Delay_bin[] FLASHMEM __attribute__((aligned(32))) = { - 0x55, 0x44, 0x4c, 0x4d, 0x19, 0x00, 0x19, 0x00, 0x1c, 0x02, 0x00, 0x00, - 0xa0, 0x08, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x50, 0xee, 0x02, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x19, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0xfc, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x50, - 0x85, 0x08, 0x00, 0x00, 0x12, 0x01, 0x00, 0x50, 0x15, 0x08, 0x00, 0x00, - 0x25, 0x01, 0x00, 0x50, 0x69, 0x08, 0x00, 0x00, 0x2a, 0x01, 0x00, 0x50, - 0x4d, 0x08, 0x00, 0x00, 0x32, 0x01, 0x00, 0x50, 0x31, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x10, - 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x42, 0x01, 0x00, 0x10, 0x7c, 0x00, 0x00, 0x00, - 0x56, 0x01, 0x00, 0x10, 0x7c, 0x00, 0x00, 0x00, 0x6c, 0x01, 0x00, 0x10, - 0x7c, 0x00, 0x00, 0x00, 0x7d, 0x01, 0x00, 0x10, 0x7c, 0x00, 0x00, 0x00, - 0x90, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x9c, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0xa7, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0xc1, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0xc8, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xce, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0xd3, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0xe4, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xf5, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x02, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x46, 0x58, 0x2f, 0x44, - 0x65, 0x6c, 0x61, 0x79, 0x00, 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, - 0x61, 0x72, 0x72, 0x61, 0x79, 0x00, 0x5f, 0x5f, 0x75, 0x69, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, - 0x00, 0x64, 0x72, 0x61, 0x77, 0x00, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x00, 0x73, 0x65, 0x74, 0x75, 0x70, 0x00, 0x64, 0x65, 0x6c, 0x61, - 0x79, 0x5f, 0x6d, 0x65, 0x6d, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x65, 0x69, - 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x65, 0x6e, - 0x64, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x5f, - 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, - 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, - 0x5f, 0x65, 0x6e, 0x64, 0x00, 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, - 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, - 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x66, 0x72, 0x65, 0x65, 0x00, - 0x5f, 0x5f, 0x75, 0x69, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x00, 0x61, - 0x64, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x69, 0x33, 0x32, 0x00, - 0x61, 0x64, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x66, 0x33, 0x32, - 0x00, 0x6d, 0x65, 0x6d, 0x73, 0x65, 0x74, 0x00, 0x5f, 0x5f, 0x62, 0x70, - 0x6d, 0x00, 0x70, 0x6f, 0x77, 0x66, 0x00, 0x5f, 0x5f, 0x61, 0x75, 0x64, - 0x69, 0x6f, 0x5f, 0x69, 0x6e, 0x5f, 0x6c, 0x5f, 0x66, 0x70, 0x70, 0x00, - 0x5f, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x5f, 0x69, 0x6e, 0x5f, 0x72, - 0x5f, 0x66, 0x70, 0x70, 0x00, 0x5f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x5f, 0x6c, 0x5f, 0x66, 0x70, 0x00, 0x5f, 0x5f, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x5f, 0x72, 0x5f, 0x66, 0x70, 0x00, 0x73, 0x70, 0x72, - 0x69, 0x6e, 0x74, 0x66, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, 0x38, 0xb5, 0x08, 0x4b, - 0x59, 0xf8, 0x03, 0x30, 0x1d, 0x68, 0x55, 0xb1, 0x06, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x1c, 0x68, 0xe3, 0x88, 0xb4, 0xf9, 0x04, 0x20, 0x61, 0x88, - 0x20, 0x88, 0xa8, 0x47, 0x20, 0x72, 0x38, 0xbd, 0x08, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x10, 0xb4, 0x03, 0x4c, 0x59, 0xf8, 0x04, 0x40, - 0xa4, 0x46, 0x5d, 0xf8, 0x04, 0x4b, 0x60, 0x47, 0x10, 0x00, 0x00, 0x00, - 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x14, 0x00, 0x00, 0x00, - 0xf0, 0xb5, 0x2a, 0x4b, 0x27, 0x4a, 0x59, 0xf8, 0x03, 0x40, 0x29, 0x4b, - 0x85, 0xb0, 0x00, 0x21, 0x03, 0x92, 0x59, 0xf8, 0x03, 0x50, 0x04, 0xf1, - 0x08, 0x00, 0xa8, 0x47, 0x00, 0x26, 0x01, 0x27, 0x04, 0xf5, 0xbb, 0x30, - 0xc4, 0xe9, 0x00, 0x67, 0x03, 0x9a, 0x00, 0x21, 0x04, 0xf5, 0xbb, 0x34, - 0x00, 0xf5, 0x88, 0x70, 0xa8, 0x47, 0xc4, 0xe9, 0x42, 0x67, 0x1e, 0x4a, - 0x1e, 0x4c, 0x59, 0xf8, 0x02, 0x50, 0x00, 0x21, 0x00, 0x91, 0x01, 0x22, - 0x59, 0xf8, 0x04, 0x40, 0x29, 0x46, 0x28, 0x1d, 0x40, 0x23, 0xa0, 0x47, - 0x19, 0x4b, 0x9f, 0xed, 0x14, 0x0a, 0x59, 0xf8, 0x03, 0x00, 0x18, 0x4b, - 0x8d, 0xed, 0x03, 0x0a, 0x59, 0xf8, 0x03, 0x40, 0x05, 0xf1, 0x44, 0x01, - 0xf7, 0xee, 0x00, 0x0a, 0xa0, 0x47, 0x14, 0x4b, 0x9d, 0xed, 0x03, 0x0a, - 0x59, 0xf8, 0x03, 0x00, 0x05, 0xf1, 0x48, 0x01, 0xf7, 0xee, 0x00, 0x0a, - 0xa0, 0x47, 0x10, 0x4b, 0x9d, 0xed, 0x03, 0x0a, 0x59, 0xf8, 0x03, 0x00, - 0xf7, 0xee, 0x00, 0x0a, 0x05, 0xf1, 0x4c, 0x01, 0x23, 0x46, 0x05, 0xb0, - 0xbd, 0xe8, 0xf0, 0x40, 0x18, 0x47, 0x00, 0xbf, 0x00, 0x77, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, - 0x30, 0xb5, 0x1f, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x1b, 0x68, 0x1c, 0x68, - 0x83, 0xb0, 0xdc, 0xb1, 0x1c, 0x4b, 0x1d, 0x4d, 0x59, 0xf8, 0x03, 0x10, - 0x00, 0x22, 0x00, 0x92, 0x08, 0x1d, 0x59, 0xf8, 0x05, 0x50, 0x80, 0x23, - 0x01, 0x22, 0xa8, 0x47, 0x07, 0xee, 0x90, 0x4a, 0xdf, 0xed, 0x12, 0x6a, - 0x16, 0x4b, 0xb8, 0xee, 0x67, 0x7a, 0x59, 0xf8, 0x03, 0x30, 0xc6, 0xee, - 0x87, 0x7a, 0x01, 0x20, 0xc3, 0xed, 0x01, 0x7a, 0x03, 0xb0, 0x30, 0xbd, - 0x0e, 0x4a, 0x11, 0x4b, 0x59, 0xf8, 0x02, 0x00, 0x59, 0xf8, 0x03, 0x30, - 0x9f, 0xed, 0x09, 0x0a, 0x00, 0xf1, 0x50, 0x01, 0xf7, 0xee, 0x00, 0x0a, - 0x04, 0x30, 0x98, 0x47, 0x09, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x4f, 0xf0, - 0x6e, 0x52, 0x20, 0x46, 0x5a, 0x60, 0x03, 0xb0, 0x30, 0xbd, 0x00, 0xbf, - 0x00, 0x80, 0x3b, 0x43, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x70, 0x4b, 0x59, 0xf8, 0x03, 0x30, - 0x1b, 0x68, 0x1c, 0x68, 0x82, 0xb0, 0x00, 0x2c, 0x57, 0xd0, 0x6d, 0x4b, - 0x6d, 0x48, 0x59, 0xf8, 0x03, 0x50, 0x00, 0x22, 0x00, 0x92, 0x59, 0xf8, - 0x00, 0x60, 0x80, 0x23, 0x01, 0x22, 0x29, 0x46, 0x28, 0x1d, 0xb0, 0x47, - 0x07, 0xee, 0x90, 0x4a, 0xdf, 0xed, 0x57, 0x6a, 0x66, 0x4b, 0xf8, 0xee, - 0x67, 0x7a, 0x59, 0xf8, 0x03, 0x40, 0x86, 0xee, 0xa7, 0x7a, 0xd5, 0xed, - 0x00, 0x7a, 0x84, 0xed, 0x01, 0x7a, 0xf8, 0xee, 0xe7, 0x7a, 0x67, 0xee, - 0x87, 0x7a, 0xc5, 0xed, 0x14, 0x7a, 0x95, 0xed, 0x12, 0x7a, 0x5e, 0x4b, - 0x9f, 0xed, 0x4d, 0x0a, 0x59, 0xf8, 0x03, 0x30, 0xf0, 0xee, 0x00, 0x7a, - 0xff, 0xee, 0x00, 0x0a, 0xe7, 0xee, 0x27, 0x0a, 0x98, 0x47, 0xb7, 0xee, - 0x00, 0x6a, 0xb4, 0xee, 0xc6, 0x0a, 0xf1, 0xee, 0x10, 0xfa, 0x4a, 0xd9, - 0xdf, 0xed, 0x45, 0x7a, 0xdf, 0xed, 0x45, 0x6a, 0x9f, 0xed, 0x45, 0x7a, - 0xb4, 0xee, 0xe7, 0x0a, 0xf1, 0xee, 0x10, 0xfa, 0x2a, 0xd9, 0xf0, 0xee, - 0x66, 0x7a, 0xb0, 0xee, 0x47, 0x0a, 0x84, 0xed, 0x02, 0x7a, 0xc4, 0xed, - 0x03, 0x6a, 0x84, 0xed, 0x05, 0x7a, 0xc4, 0xed, 0x06, 0x6a, 0x84, 0xed, - 0x08, 0x0a, 0xc4, 0xed, 0x09, 0x7a, 0x84, 0xed, 0x0b, 0x0a, 0xc4, 0xed, - 0x0c, 0x7a, 0x02, 0xb0, 0x70, 0xbd, 0x41, 0x4a, 0x44, 0x4b, 0x59, 0xf8, - 0x02, 0x50, 0x59, 0xf8, 0x03, 0x30, 0x9f, 0xed, 0x35, 0x0a, 0xf7, 0xee, - 0x00, 0x0a, 0x05, 0xf1, 0x50, 0x01, 0x28, 0x1d, 0x98, 0x47, 0x3c, 0x4b, - 0x59, 0xf8, 0x03, 0x40, 0x4f, 0xf0, 0x6e, 0x52, 0x62, 0x60, 0xb4, 0xe7, - 0xdf, 0xed, 0x2e, 0x7a, 0xdf, 0xed, 0x2e, 0x5a, 0x60, 0xee, 0x27, 0x7a, - 0x9f, 0xed, 0x2d, 0x0a, 0x27, 0xee, 0xa7, 0x5a, 0xb7, 0xee, 0x00, 0x6a, - 0xa5, 0xee, 0x25, 0x0a, 0x27, 0xee, 0x80, 0x0a, 0x70, 0xee, 0x06, 0x5a, - 0xc6, 0xee, 0x25, 0x7a, 0xc3, 0xe7, 0xdf, 0xed, 0x27, 0x7a, 0xb4, 0xee, - 0xe7, 0x0a, 0xf1, 0xee, 0x10, 0xfa, 0x24, 0xdb, 0x9f, 0xed, 0x24, 0x7a, - 0xdf, 0xed, 0x20, 0x6a, 0x60, 0xee, 0x07, 0x7a, 0x9f, 0xed, 0x1f, 0x7a, - 0x67, 0xee, 0xa7, 0x5a, 0xa5, 0xee, 0xa6, 0x7a, 0x27, 0xee, 0x87, 0x7a, - 0x77, 0xee, 0x06, 0x7a, 0xc6, 0xee, 0x27, 0x6a, 0xdf, 0xed, 0x13, 0x7a, - 0xb4, 0xee, 0xe7, 0x0a, 0xf1, 0xee, 0x10, 0xfa, 0x16, 0xd8, 0xf7, 0xee, - 0x00, 0x7a, 0xb4, 0xee, 0x67, 0x0a, 0xf1, 0xee, 0x10, 0xfa, 0xc3, 0xd0, - 0xdf, 0xed, 0x15, 0x7a, 0x9f, 0xed, 0x15, 0x0a, 0x97, 0xe7, 0xdf, 0xed, - 0x0a, 0x7a, 0xdf, 0xed, 0x12, 0x6a, 0x9f, 0xed, 0x12, 0x7a, 0xb4, 0xee, - 0xe7, 0x0a, 0xf1, 0xee, 0x10, 0xfa, 0xe8, 0xd9, 0xdf, 0xed, 0x05, 0x7a, - 0x9f, 0xed, 0x05, 0x0a, 0x87, 0xe7, 0x00, 0xbf, 0x00, 0x80, 0x3b, 0x43, - 0x00, 0x00, 0xc8, 0x42, 0x00, 0x00, 0x7a, 0x44, 0x68, 0xb2, 0xa2, 0x3e, - 0xba, 0x67, 0x09, 0x40, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x74, 0xda, 0x39, - 0xd7, 0x57, 0x39, 0x41, 0xdb, 0x0f, 0x49, 0x40, 0x6f, 0x12, 0x83, 0x3a, - 0x55, 0x55, 0xd5, 0x3e, 0x53, 0xaa, 0x7f, 0x3f, 0xad, 0x92, 0xab, 0x3a, - 0x30, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x2d, 0xe9, 0xf0, 0x4d, 0x2d, 0xed, 0x04, 0x8b, 0x86, 0xb0, 0xff, 0xf7, - 0x0b, 0xff, 0xb9, 0x4b, 0xb9, 0x4a, 0x59, 0xf8, 0x03, 0x30, 0x59, 0xf8, - 0x02, 0xb0, 0xd3, 0xed, 0x01, 0x7a, 0xdb, 0xed, 0x14, 0x6a, 0x9f, 0xed, - 0xae, 0x7a, 0x86, 0xee, 0xa7, 0x6a, 0x67, 0xee, 0x87, 0x7a, 0xbd, 0xee, - 0xc6, 0x6a, 0x93, 0xed, 0x0e, 0x7a, 0xdf, 0xed, 0xaa, 0x6a, 0xb8, 0xee, - 0xc6, 0x6a, 0x26, 0xee, 0x27, 0x6a, 0x76, 0xee, 0x47, 0x7a, 0xf0, 0xee, - 0xe7, 0x5a, 0xf4, 0xee, 0xe6, 0x5a, 0xf1, 0xee, 0x10, 0xfa, 0x05, 0xdc, - 0xdf, 0xed, 0xa3, 0x6a, 0xa7, 0xee, 0xa6, 0x7a, 0xb0, 0xee, 0x47, 0x6a, - 0xa6, 0x4a, 0x83, 0xed, 0x0e, 0x6a, 0x59, 0xf8, 0x02, 0x20, 0x02, 0x92, - 0x02, 0xf5, 0xb8, 0x36, 0x10, 0x68, 0xa3, 0x4a, 0xdf, 0xed, 0x9c, 0x5a, - 0x59, 0xf8, 0x02, 0x20, 0xdf, 0xed, 0x9b, 0x4a, 0x12, 0x68, 0x9b, 0x4d, - 0x17, 0x68, 0x9f, 0x4a, 0x59, 0xf8, 0x02, 0x20, 0x12, 0x68, 0xd2, 0xf8, - 0x00, 0xa0, 0x9d, 0x4a, 0x59, 0xf8, 0x02, 0x20, 0x12, 0x68, 0x04, 0x92, - 0x9b, 0x4a, 0x59, 0xf8, 0x02, 0x20, 0x01, 0x97, 0x12, 0x68, 0x03, 0x92, - 0x07, 0xf1, 0x60, 0x01, 0x05, 0x91, 0xd6, 0xf8, 0x08, 0x27, 0xb7, 0xee, - 0x00, 0x5a, 0x4b, 0xf6, 0x80, 0x34, 0x39, 0x46, 0x02, 0xe0, 0x93, 0xed, - 0x0e, 0x6a, 0x39, 0x46, 0x91, 0xed, 0x00, 0x1a, 0x9a, 0xed, 0x00, 0x2a, - 0xd3, 0xed, 0x02, 0x9a, 0xd3, 0xed, 0x04, 0x6a, 0xd3, 0xed, 0x05, 0x8a, - 0x93, 0xed, 0x07, 0x7a, 0xd3, 0xed, 0x06, 0x7a, 0x93, 0xed, 0x08, 0x4a, - 0xd3, 0xed, 0x0a, 0x1a, 0xd3, 0xed, 0x0d, 0x2a, 0x93, 0xed, 0x09, 0x9a, - 0x93, 0xed, 0x0c, 0x8a, 0xdb, 0xed, 0x13, 0x3a, 0xe1, 0xee, 0x29, 0x6a, - 0xa2, 0xee, 0x28, 0x7a, 0xbd, 0xee, 0xc6, 0x6a, 0x27, 0xee, 0x27, 0x7a, - 0xb8, 0xee, 0xc6, 0x3a, 0x93, 0xed, 0x03, 0x6a, 0x66, 0xee, 0x86, 0x6a, - 0x93, 0xed, 0x0b, 0x6a, 0xe4, 0xee, 0x26, 0x1a, 0xe6, 0xee, 0x07, 0x2a, - 0xb0, 0xee, 0x66, 0x0a, 0xf0, 0xee, 0x47, 0x0a, 0xe2, 0xee, 0xc8, 0x0a, - 0xa1, 0xee, 0xc9, 0x0a, 0x32, 0xee, 0x47, 0x2a, 0x31, 0xee, 0x66, 0x1a, - 0x24, 0xee, 0x00, 0x4a, 0x26, 0xee, 0x20, 0x6a, 0xa8, 0xee, 0x82, 0x7a, - 0xa2, 0xee, 0x88, 0x6a, 0xe9, 0xee, 0x81, 0x6a, 0xa1, 0xee, 0x89, 0x4a, - 0xc3, 0xed, 0x04, 0x6a, 0x83, 0xed, 0x0a, 0x4a, 0x83, 0xed, 0x07, 0x7a, - 0x83, 0xed, 0x0d, 0x6a, 0xb1, 0xec, 0x01, 0x2a, 0xdb, 0xed, 0x11, 0x6a, - 0x01, 0x91, 0xbd, 0xee, 0xc3, 0x7a, 0x66, 0xee, 0xa4, 0x2a, 0x17, 0xee, - 0x10, 0x1a, 0x0a, 0x44, 0x01, 0x44, 0xa5, 0xfb, 0x01, 0x7e, 0x4f, 0xea, - 0x9e, 0x2e, 0x01, 0xf1, 0x01, 0x0c, 0x04, 0xfb, 0x1e, 0x11, 0x02, 0x9f, - 0x04, 0x31, 0xb8, 0xee, 0xc7, 0x6a, 0x37, 0xf8, 0x11, 0xe0, 0xa5, 0xfb, - 0x0c, 0x71, 0x89, 0x0a, 0x04, 0xfb, 0x11, 0xcc, 0x02, 0x9f, 0x0c, 0xf1, - 0x04, 0x0c, 0x07, 0xee, 0x10, 0xea, 0x37, 0xf8, 0x1c, 0x10, 0xa1, 0xeb, - 0x0e, 0x01, 0xf8, 0xee, 0xc7, 0x6a, 0x07, 0xee, 0x10, 0x1a, 0xa5, 0xfb, - 0x02, 0xc1, 0x89, 0x0a, 0x02, 0xf1, 0x01, 0x08, 0x04, 0xfb, 0x11, 0x22, - 0x06, 0xeb, 0x42, 0x02, 0x33, 0xee, 0x46, 0x6a, 0xb2, 0xf8, 0x10, 0x17, - 0xa5, 0xfb, 0x08, 0xc2, 0x92, 0x0a, 0x04, 0xfb, 0x12, 0x88, 0x06, 0xeb, - 0x48, 0x08, 0xb8, 0xee, 0xc7, 0x7a, 0xb8, 0xf8, 0x10, 0x27, 0x52, 0x1a, - 0xe6, 0xee, 0x07, 0x6a, 0x00, 0xf1, 0x04, 0x0e, 0x00, 0xf5, 0x3b, 0x4c, - 0x07, 0xee, 0x10, 0x1a, 0x04, 0xee, 0x10, 0x2a, 0xb8, 0xee, 0xc7, 0x7a, - 0xb8, 0xee, 0xc4, 0x4a, 0xfc, 0xee, 0xe6, 0x6a, 0xa4, 0xee, 0x06, 0x7a, - 0x0c, 0xf1, 0x7f, 0x0c, 0x16, 0xee, 0x90, 0x2a, 0xbc, 0xee, 0xc7, 0x7a, - 0x12, 0xb2, 0x75, 0xee, 0x63, 0x7a, 0x06, 0xee, 0x90, 0x2a, 0x17, 0xee, - 0x10, 0x2a, 0x73, 0xee, 0xa3, 0x3a, 0x12, 0xb2, 0x77, 0xee, 0xa7, 0x7a, - 0x07, 0xee, 0x10, 0x2a, 0xf8, 0xee, 0xe6, 0x6a, 0x63, 0xee, 0x80, 0x3a, - 0x67, 0xee, 0xa0, 0x7a, 0xb8, 0xee, 0xc7, 0x7a, 0xb0, 0xee, 0x42, 0x6a, - 0xe6, 0xee, 0xa5, 0x7a, 0xd6, 0xf8, 0x08, 0x27, 0xa6, 0xee, 0xa5, 0x6a, - 0x02, 0xf5, 0x3b, 0x41, 0x7f, 0x31, 0xf0, 0xee, 0x63, 0x6a, 0xe7, 0xee, - 0x25, 0x6a, 0x06, 0xeb, 0x42, 0x00, 0xa5, 0xfb, 0x01, 0x82, 0x67, 0xee, - 0xa2, 0x7a, 0x66, 0xee, 0xa2, 0x6a, 0xfd, 0xee, 0xe7, 0x7a, 0xfd, 0xee, - 0xe6, 0x6a, 0x92, 0x0a, 0x04, 0xfb, 0x12, 0x12, 0x16, 0xee, 0x90, 0x1a, - 0x01, 0xf3, 0x0f, 0x01, 0x27, 0xf8, 0x1e, 0x10, 0x17, 0xee, 0x90, 0x1a, - 0x01, 0xf3, 0x0f, 0x01, 0xc6, 0xf8, 0x08, 0x27, 0xa0, 0xf8, 0x10, 0x17, - 0x04, 0x99, 0x01, 0x9f, 0xa1, 0xec, 0x01, 0x6a, 0xfa, 0xec, 0x01, 0x7a, - 0x04, 0x91, 0xe7, 0xee, 0x25, 0x7a, 0x03, 0x99, 0xe1, 0xec, 0x01, 0x7a, - 0x03, 0x91, 0xa5, 0xfb, 0x0c, 0x10, 0x05, 0x99, 0x80, 0x0a, 0xb9, 0x42, - 0x04, 0xfb, 0x10, 0xc0, 0x7f, 0xf4, 0xf9, 0xae, 0x02, 0x9b, 0x18, 0x60, - 0x06, 0xb0, 0xbd, 0xec, 0x04, 0x8b, 0xbd, 0xe8, 0xf0, 0x8d, 0x00, 0xbf, - 0x00, 0x80, 0x3b, 0x47, 0x00, 0x00, 0x96, 0x45, 0x0a, 0xd7, 0x23, 0x3c, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x47, 0xf1, 0x19, 0x76, 0x05, - 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x44, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x2f, 0x4b, 0x59, 0xf8, 0x03, 0x30, - 0x1b, 0x68, 0x1c, 0x68, 0x84, 0xb0, 0x34, 0xb3, 0x2c, 0x4b, 0x2d, 0x4e, - 0x59, 0xf8, 0x03, 0x50, 0x00, 0x22, 0x00, 0x92, 0x28, 0x1d, 0x59, 0xf8, - 0x06, 0x60, 0x03, 0x90, 0x29, 0x46, 0x01, 0x22, 0x80, 0x23, 0xb0, 0x47, - 0x07, 0xee, 0x90, 0x4a, 0xdf, 0xed, 0x20, 0x6a, 0x25, 0x4b, 0x26, 0x4c, - 0x59, 0xf8, 0x03, 0x10, 0x25, 0x4b, 0x2a, 0x68, 0x03, 0x98, 0xf8, 0xee, - 0x67, 0x7a, 0x86, 0xee, 0xa7, 0x7a, 0x81, 0xed, 0x01, 0x7a, 0x59, 0xf8, - 0x04, 0x10, 0x59, 0xf8, 0x03, 0x30, 0x04, 0xb0, 0xbd, 0xe8, 0x70, 0x40, - 0x18, 0x47, 0x19, 0x4a, 0x1d, 0x4b, 0x59, 0xf8, 0x02, 0x40, 0x9f, 0xed, - 0x14, 0x0a, 0x20, 0x1d, 0x03, 0x90, 0x59, 0xf8, 0x03, 0x30, 0x04, 0xf1, - 0x50, 0x01, 0xf7, 0xee, 0x00, 0x0a, 0x98, 0x47, 0x13, 0x4b, 0xd4, 0xed, - 0x14, 0x7a, 0x9f, 0xed, 0x0e, 0x7a, 0x59, 0xf8, 0x03, 0x20, 0x14, 0x4b, - 0x03, 0x98, 0x67, 0xee, 0x87, 0x7a, 0x4f, 0xf0, 0x6e, 0x51, 0x51, 0x60, - 0x59, 0xf8, 0x03, 0x10, 0x0d, 0x4b, 0xfd, 0xee, 0xe7, 0x7a, 0x59, 0xf8, - 0x03, 0x30, 0x17, 0xee, 0x90, 0x2a, 0x04, 0xb0, 0xbd, 0xe8, 0x70, 0x40, - 0x18, 0x47, 0x00, 0xbf, 0x00, 0x80, 0x3b, 0x43, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7a, 0x44, 0x30, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, - 0x4c, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x70, 0xb5, 0x10, 0x4a, 0x10, 0x4b, 0x59, 0xf8, 0x02, 0x60, 0x59, 0xf8, - 0x03, 0x50, 0x76, 0x1b, 0xb6, 0x10, 0x06, 0xd0, 0x00, 0x24, 0x55, 0xf8, - 0x04, 0x3b, 0x01, 0x34, 0x98, 0x47, 0xa6, 0x42, 0xf9, 0xd1, 0x0a, 0x4a, - 0x0a, 0x4b, 0x59, 0xf8, 0x02, 0x60, 0x59, 0xf8, 0x03, 0x50, 0x76, 0x1b, - 0xb6, 0x10, 0x06, 0xd0, 0x00, 0x24, 0x55, 0xf8, 0x04, 0x3b, 0x01, 0x34, - 0x98, 0x47, 0xa6, 0x42, 0xf9, 0xd1, 0x70, 0xbd, 0x54, 0x00, 0x00, 0x00, - 0x58, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, - 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0x10, 0xfc, 0xbd, 0xe8, 0x00, 0x82, - 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, - 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0x28, 0xfc, - 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, - 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, - 0xff, 0xf7, 0xb8, 0xfd, 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, - 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, - 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0x32, 0xff, 0xbd, 0xe8, 0x00, 0x82, - 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, - 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0x94, 0xff, - 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, 0x10, 0x00, 0x00, 0x00, - 0x54, 0x69, 0x6d, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3f, - 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3f, 0x46, 0x65, 0x65, 0x64, - 0x62, 0x00, 0x00, 0x00, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, - 0x50, 0x61, 0x6e, 0x00, 0x3e, 0x74, 0x3d, 0x25, 0x64, 0x00, 0x00, 0x00, - 0x3e, 0x54, 0x3a, 0x25, 0x64, 0x20, 0x6d, 0x73, 0x00, 0x00, 0x00, 0x00 -}; -unsigned int __FX_Delay_bin_len = 3096; diff --git a/app/FX/Delay.cpp b/app/FX/Delay.cpp index 19c4ed1..602f0b4 100644 --- a/app/FX/Delay.cpp +++ b/app/FX/Delay.cpp @@ -73,13 +73,14 @@ void engine::setup() float delay = 0; float t_32 = 0; + bool calc_t_step32() { - uint32_t midi_bpm = machine::midi_bpm();// / 100; - if (midi_bpm > 0) + uint32_t clk_bpm = machine::clk_bpm();// / 100; + if (clk_bpm > 0) { engine::addParam(time_info, &time_steps, 1, 128); - uint32_t bpm = midi_bpm; + uint32_t bpm = clk_bpm; auto t_per_beat = 6000.f / bpm; // * machine::SAMPLE_RATE t_32 = t_per_beat / 32; return true; diff --git a/app/FX/Gated-Reverb.bin b/app/FX/Gated-Reverb.bin new file mode 100644 index 0000000..91e9048 Binary files /dev/null and b/app/FX/Gated-Reverb.bin differ diff --git a/app/FX/Gated-Reverb.bin.h b/app/FX/Gated-Reverb.bin.h deleted file mode 100644 index 3ea2cc8..0000000 --- a/app/FX/Gated-Reverb.bin.h +++ /dev/null @@ -1,468 +0,0 @@ -const uint8_t __FX_Gated_Reverb_bin[] FLASHMEM __attribute__((aligned(32))) = { - 0x55, 0x44, 0x4c, 0x4d, 0x15, 0x00, 0x15, 0x00, 0xd8, 0x01, 0x00, 0x00, - 0x14, 0x13, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x6c, 0x01, 0x01, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, - 0x1a, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, - 0xe4, 0x00, 0x00, 0x50, 0xf9, 0x12, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x50, - 0xa5, 0x12, 0x00, 0x00, 0x04, 0x01, 0x00, 0x50, 0xdd, 0x12, 0x00, 0x00, - 0x0c, 0x01, 0x00, 0x50, 0xc1, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x12, 0x01, 0x00, 0x10, 0x1c, 0x00, 0x00, 0x00, - 0x26, 0x01, 0x00, 0x10, 0x1c, 0x00, 0x00, 0x00, 0x3c, 0x01, 0x00, 0x10, - 0x1c, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x10, 0x1c, 0x00, 0x00, 0x00, - 0x60, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x67, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x6c, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x77, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x91, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x98, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xa9, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0xba, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0xc8, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x46, 0x58, 0x2f, 0x47, - 0x61, 0x74, 0x65, 0x64, 0x2d, 0x52, 0x65, 0x76, 0x65, 0x72, 0x62, 0x00, - 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, - 0x00, 0x5f, 0x5f, 0x75, 0x69, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, - 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00, 0x70, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x00, 0x73, 0x65, 0x74, 0x75, 0x70, 0x00, 0x5f, 0x5f, - 0x70, 0x72, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, - 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x65, 0x69, - 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x00, 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, - 0x72, 0x72, 0x61, 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x00, 0x5f, 0x5f, 0x69, - 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x00, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x66, - 0x72, 0x65, 0x65, 0x00, 0x5f, 0x5f, 0x75, 0x69, 0x5f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x00, 0x61, 0x64, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, - 0x69, 0x33, 0x32, 0x00, 0x61, 0x64, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x5f, 0x66, 0x33, 0x32, 0x00, 0x6d, 0x65, 0x6d, 0x73, 0x65, 0x74, 0x00, - 0x5f, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x5f, 0x69, 0x6e, 0x5f, 0x6c, - 0x5f, 0x66, 0x70, 0x70, 0x00, 0x5f, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x6f, - 0x5f, 0x69, 0x6e, 0x5f, 0x72, 0x5f, 0x66, 0x70, 0x70, 0x00, 0x5f, 0x5f, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x72, 0x5f, 0x66, 0x70, 0x00, - 0x5f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6c, 0x5f, 0x66, - 0x70, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4d, 0x00, 0xf5, 0x80, 0x35, - 0x82, 0xb0, 0x95, 0xf8, 0x48, 0x31, 0x00, 0x2b, 0x00, 0xf0, 0xdc, 0x86, - 0x00, 0x23, 0x03, 0xf3, 0x17, 0x02, 0x03, 0xf3, 0x17, 0x02, 0xd2, 0x4f, - 0x02, 0x62, 0x9c, 0x46, 0x01, 0x26, 0xc5, 0xf8, 0x30, 0x31, 0x1a, 0x46, - 0x01, 0x68, 0xc4, 0x6d, 0x4f, 0xf4, 0x00, 0x1e, 0x84, 0xfb, 0x0e, 0x38, - 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xd3, 0x53, 0x0b, 0x44, 0x03, 0xf3, - 0x17, 0x03, 0x04, 0x6e, 0x84, 0xfb, 0x0e, 0x18, 0x4f, 0xea, 0x48, 0x28, - 0x48, 0xea, 0xd1, 0x51, 0x0b, 0x44, 0x03, 0xf3, 0x17, 0x01, 0xd5, 0xf8, - 0x0c, 0x31, 0xc3, 0xf3, 0x0e, 0x04, 0x00, 0xeb, 0x44, 0x04, 0x0d, 0x12, - 0xa4, 0xf8, 0x0c, 0x51, 0x00, 0x25, 0x81, 0xfb, 0x05, 0x4e, 0x4f, 0xea, - 0x4e, 0x2e, 0x4e, 0xea, 0xd4, 0x54, 0x04, 0xf3, 0x17, 0x04, 0x03, 0xeb, - 0x0c, 0x01, 0xc1, 0xf3, 0x0e, 0x01, 0x00, 0xeb, 0x41, 0x01, 0x44, 0x60, - 0xb1, 0xf9, 0x0c, 0x11, 0x09, 0x02, 0x01, 0xf3, 0x17, 0x0c, 0x81, 0xfb, - 0x07, 0xce, 0x4f, 0xea, 0x4e, 0x2e, 0x4e, 0xea, 0xdc, 0x5c, 0x64, 0x44, - 0x04, 0xf3, 0x17, 0x04, 0x99, 0x19, 0xc1, 0xf3, 0x0e, 0x01, 0x00, 0xeb, - 0x41, 0x01, 0xb1, 0xf9, 0x0c, 0x11, 0x09, 0x02, 0x01, 0xf3, 0x17, 0x06, - 0x86, 0x60, 0x81, 0xfb, 0x02, 0x67, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, - 0xd6, 0x56, 0x34, 0x44, 0x04, 0xf3, 0x17, 0x04, 0x03, 0xf5, 0x80, 0x51, - 0x05, 0x31, 0xc1, 0xf3, 0x0e, 0x01, 0x00, 0xeb, 0x41, 0x06, 0x44, 0xf3, - 0x0f, 0x21, 0xa6, 0xf8, 0x0c, 0x11, 0x84, 0xfb, 0x05, 0x67, 0x4f, 0xea, - 0x47, 0x27, 0x47, 0xea, 0xd6, 0x56, 0x06, 0xf3, 0x17, 0x06, 0x02, 0xf3, - 0x17, 0x02, 0x9c, 0x4c, 0x06, 0x6d, 0x86, 0xfb, 0x04, 0x7c, 0x4f, 0xea, - 0x4c, 0x2c, 0x4c, 0xea, 0xd7, 0x57, 0x3a, 0x44, 0x02, 0xf3, 0x17, 0x02, - 0xc2, 0x61, 0x82, 0xfb, 0x05, 0x46, 0x4f, 0xea, 0x46, 0x26, 0x46, 0xea, - 0xd4, 0x54, 0x04, 0xf3, 0x17, 0x02, 0x4f, 0xf4, 0x00, 0x05, 0xc4, 0x6c, - 0x84, 0xfb, 0x05, 0x67, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xd6, 0x56, - 0x32, 0x44, 0x02, 0xf3, 0x17, 0x02, 0x02, 0xf4, 0x70, 0x04, 0x12, 0x02, - 0x48, 0xbf, 0x44, 0xf0, 0x7f, 0x44, 0x04, 0xf3, 0x17, 0x02, 0x4f, 0xf4, - 0x00, 0x05, 0x82, 0xfb, 0x05, 0x46, 0x4f, 0xea, 0x46, 0x26, 0x46, 0xea, - 0xd4, 0x54, 0xa4, 0xf5, 0xf0, 0x04, 0x04, 0xf3, 0x17, 0x04, 0x00, 0x2c, - 0x26, 0x46, 0x00, 0xf3, 0x12, 0x81, 0x84, 0xfb, 0x05, 0x26, 0x4f, 0xea, - 0x46, 0x26, 0x46, 0xea, 0xd2, 0x52, 0x02, 0xf5, 0x00, 0x24, 0x04, 0xf3, - 0x17, 0x04, 0x00, 0x2c, 0x22, 0x46, 0x00, 0xf3, 0x1a, 0x81, 0x84, 0xfb, - 0x05, 0x26, 0x4f, 0xea, 0x46, 0x26, 0x46, 0xea, 0xd2, 0x52, 0x02, 0xf5, - 0x00, 0x22, 0x02, 0xf3, 0x17, 0x02, 0x00, 0x2a, 0x14, 0x46, 0x00, 0xf3, - 0x23, 0x81, 0x82, 0xfb, 0x05, 0x46, 0x4f, 0xea, 0x46, 0x26, 0x46, 0xea, - 0xd4, 0x54, 0x04, 0xf5, 0x00, 0x22, 0x02, 0xf3, 0x17, 0x02, 0x00, 0x2a, - 0x14, 0x46, 0x00, 0xf3, 0x2b, 0x81, 0x82, 0xfb, 0x05, 0x46, 0x4f, 0xea, - 0x46, 0x26, 0x46, 0xea, 0xd4, 0x54, 0x04, 0xf5, 0x00, 0x22, 0x02, 0xf3, - 0x17, 0x02, 0x00, 0x2a, 0x14, 0x46, 0x00, 0xf3, 0x34, 0x81, 0x82, 0xfb, - 0x05, 0x46, 0x4f, 0xea, 0x46, 0x26, 0x46, 0xea, 0xd4, 0x54, 0x04, 0xf5, - 0x00, 0x22, 0x02, 0xf3, 0x17, 0x02, 0x00, 0x2a, 0x14, 0x46, 0x00, 0xf3, - 0x3d, 0x81, 0x82, 0xfb, 0x05, 0x46, 0x4f, 0xea, 0x46, 0x26, 0x46, 0xea, - 0xd4, 0x54, 0x04, 0xf5, 0x00, 0x22, 0x02, 0xf3, 0x17, 0x02, 0x00, 0x2a, - 0x14, 0x46, 0x00, 0xf3, 0x45, 0x81, 0x82, 0xfb, 0x05, 0x46, 0x4f, 0xea, - 0x46, 0x26, 0x46, 0xea, 0xd4, 0x54, 0x04, 0xf5, 0x00, 0x22, 0x02, 0xf3, - 0x17, 0x02, 0x00, 0x2a, 0x14, 0x46, 0x00, 0xf3, 0x4e, 0x81, 0x82, 0xfb, - 0x05, 0x46, 0x4f, 0xea, 0x46, 0x26, 0x46, 0xea, 0xd4, 0x54, 0x04, 0xf5, - 0x00, 0x22, 0x02, 0xf3, 0x17, 0x02, 0x00, 0x2a, 0x14, 0x46, 0x00, 0xf3, - 0x57, 0x81, 0x82, 0xfb, 0x05, 0x46, 0x4f, 0xea, 0x46, 0x26, 0x46, 0xea, - 0xd4, 0x54, 0x04, 0xf5, 0x00, 0x24, 0x04, 0xf3, 0x17, 0x04, 0x00, 0x2c, - 0x00, 0xf3, 0x61, 0x81, 0x2e, 0x46, 0x84, 0xfb, 0x06, 0x25, 0x4f, 0xea, - 0x45, 0x25, 0x45, 0xea, 0xd2, 0x52, 0x02, 0xf5, 0x00, 0x22, 0x02, 0xf3, - 0x17, 0x02, 0x00, 0x2a, 0x14, 0x46, 0x00, 0xf3, 0x69, 0x81, 0x82, 0xfb, - 0x06, 0x45, 0x4f, 0xea, 0x45, 0x25, 0x45, 0xea, 0xd4, 0x54, 0x04, 0xf5, - 0x00, 0x22, 0x02, 0xf3, 0x17, 0x02, 0x00, 0x2a, 0x14, 0x46, 0x00, 0xf3, - 0x72, 0x81, 0x82, 0xfb, 0x06, 0x45, 0x4f, 0xea, 0x45, 0x25, 0x45, 0xea, - 0xd4, 0x54, 0x04, 0xf5, 0x00, 0x22, 0x02, 0xf3, 0x17, 0x02, 0x00, 0x2a, - 0x15, 0x46, 0x00, 0xf3, 0x7b, 0x81, 0x82, 0xfb, 0x06, 0x45, 0x4f, 0xea, - 0x45, 0x25, 0x45, 0xea, 0xd4, 0x54, 0x04, 0xf5, 0x00, 0x22, 0x02, 0xf3, - 0x17, 0x02, 0x00, 0x2a, 0x15, 0x46, 0x00, 0xf3, 0x83, 0x81, 0x82, 0xfb, - 0x06, 0x45, 0x4f, 0xea, 0x45, 0x25, 0x45, 0xea, 0xd4, 0x54, 0x04, 0xf5, - 0x00, 0x22, 0x02, 0xf3, 0x17, 0x02, 0x00, 0x2a, 0x15, 0x46, 0x00, 0xf3, - 0x8c, 0x81, 0x82, 0xfb, 0x06, 0x45, 0x4f, 0xea, 0x45, 0x25, 0x45, 0xea, - 0xd4, 0x54, 0x04, 0xf5, 0x00, 0x22, 0x02, 0xf3, 0x17, 0x02, 0x00, 0x2a, - 0x15, 0x46, 0x00, 0xf3, 0x95, 0x81, 0x82, 0xfb, 0x06, 0x45, 0x4f, 0xea, - 0x45, 0x25, 0x45, 0xea, 0xd4, 0x54, 0x04, 0xf5, 0x00, 0x22, 0x02, 0xf3, - 0x17, 0x02, 0x00, 0x2a, 0x15, 0x46, 0x00, 0xf3, 0x9d, 0x81, 0x82, 0xfb, - 0x06, 0x45, 0x4f, 0xea, 0x45, 0x25, 0x45, 0xea, 0xd4, 0x54, 0x04, 0xf5, - 0x00, 0x24, 0x04, 0xf3, 0x17, 0x04, 0x00, 0x2c, 0x25, 0x46, 0x00, 0xf3, - 0xa6, 0x81, 0x84, 0xfb, 0x06, 0x25, 0x4f, 0xea, 0x45, 0x25, 0x45, 0xea, - 0xd2, 0x52, 0x02, 0xf5, 0x00, 0x22, 0x02, 0xf3, 0x17, 0x02, 0x00, 0x2a, - 0x02, 0x60, 0x15, 0x46, 0x00, 0xf3, 0xae, 0x81, 0x04, 0xe0, 0x00, 0xbf, - 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x82, 0xfb, 0x06, 0x45, - 0x4f, 0xea, 0x45, 0x25, 0x45, 0xea, 0xd4, 0x54, 0x42, 0x60, 0x04, 0xf5, - 0x00, 0x22, 0x02, 0xf3, 0x17, 0x06, 0x00, 0x2e, 0x06, 0x60, 0x00, 0xf3, - 0xb3, 0x81, 0x03, 0xf5, 0x90, 0x42, 0x03, 0x32, 0xc2, 0xf3, 0x0e, 0x02, - 0x00, 0xeb, 0x42, 0x02, 0xb2, 0xf9, 0x0c, 0x51, 0x2d, 0x02, 0x05, 0xf3, - 0x17, 0x02, 0xd2, 0x4c, 0x85, 0xfb, 0x04, 0x27, 0x4f, 0xea, 0x47, 0x27, - 0x47, 0xea, 0xd2, 0x52, 0x32, 0x44, 0x02, 0xf3, 0x17, 0x02, 0x03, 0xf5, - 0x8d, 0x44, 0x4c, 0x34, 0xc4, 0xf3, 0x0e, 0x04, 0x00, 0xeb, 0x44, 0x04, - 0xb4, 0xf9, 0x0c, 0x51, 0x2d, 0x02, 0x05, 0xf3, 0x17, 0x04, 0x4f, 0xf4, - 0x80, 0x06, 0x85, 0xfb, 0x06, 0x47, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, - 0xd4, 0x54, 0x14, 0x44, 0x04, 0xf3, 0x17, 0x04, 0x03, 0xf5, 0x89, 0x42, - 0x49, 0x32, 0xc2, 0xf3, 0x0e, 0x02, 0x00, 0xeb, 0x42, 0x02, 0xb2, 0xf9, - 0x0c, 0x21, 0x12, 0x02, 0x02, 0xf3, 0x17, 0x05, 0xbb, 0x4e, 0x82, 0xfb, - 0x06, 0x57, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xd5, 0x55, 0x2c, 0x44, - 0x04, 0xf3, 0x17, 0x04, 0x03, 0xf5, 0x86, 0x42, 0x32, 0x32, 0xc2, 0xf3, - 0x0e, 0x02, 0x00, 0xeb, 0x42, 0x02, 0xb2, 0xf9, 0x0c, 0x21, 0x12, 0x02, - 0x02, 0xf3, 0x17, 0x05, 0x4f, 0xf4, 0x80, 0x06, 0x82, 0xfb, 0x06, 0x57, - 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xd5, 0x55, 0x2c, 0x44, 0x04, 0xf3, - 0x17, 0x04, 0x03, 0xf5, 0x83, 0x42, 0x5d, 0x32, 0xc2, 0xf3, 0x0e, 0x02, - 0x00, 0xeb, 0x42, 0x02, 0xb2, 0xf9, 0x0c, 0x21, 0x12, 0x02, 0x02, 0xf3, - 0x17, 0x05, 0x4f, 0xf4, 0x80, 0x06, 0x82, 0xfb, 0x06, 0x57, 0x4f, 0xea, - 0x47, 0x27, 0x47, 0xea, 0xd5, 0x55, 0x2c, 0x44, 0x04, 0xf3, 0x17, 0x04, - 0x03, 0xf5, 0x7d, 0x52, 0x1d, 0x32, 0xc2, 0xf3, 0x0e, 0x02, 0x00, 0xeb, - 0x42, 0x02, 0xb2, 0xf9, 0x0c, 0x21, 0x12, 0x02, 0x02, 0xf3, 0x17, 0x05, - 0x99, 0x4e, 0x82, 0xfb, 0x06, 0x57, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, - 0xd5, 0x55, 0x2c, 0x44, 0x04, 0xf3, 0x17, 0x04, 0x03, 0xf5, 0x77, 0x52, - 0x3a, 0x32, 0xc2, 0xf3, 0x0e, 0x02, 0x00, 0xeb, 0x42, 0x02, 0xb2, 0xf9, - 0x0c, 0x21, 0x12, 0x02, 0x02, 0xf3, 0x17, 0x05, 0x4f, 0xf4, 0x80, 0x06, - 0x82, 0xfb, 0x06, 0x57, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xd5, 0x55, - 0x2c, 0x44, 0x04, 0xf3, 0x17, 0x04, 0x03, 0xf5, 0x70, 0x52, 0x35, 0x32, - 0xc2, 0xf3, 0x0e, 0x02, 0x00, 0xeb, 0x42, 0x02, 0xb2, 0xf9, 0x0c, 0x21, - 0x12, 0x02, 0x02, 0xf3, 0x17, 0x05, 0x4f, 0xf4, 0x80, 0x06, 0x82, 0xfb, - 0x06, 0x57, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xd5, 0x55, 0x2c, 0x44, - 0x04, 0xf3, 0x17, 0x04, 0x03, 0xf5, 0x68, 0x52, 0x03, 0x32, 0xc2, 0xf3, - 0x0e, 0x02, 0x00, 0xeb, 0x42, 0x02, 0xb2, 0xf9, 0x0c, 0x21, 0x12, 0x02, - 0x02, 0xf3, 0x17, 0x05, 0x4f, 0xf4, 0x80, 0x06, 0x82, 0xfb, 0x06, 0x57, - 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xd5, 0x55, 0x2c, 0x44, 0x04, 0xf3, - 0x17, 0x04, 0x03, 0xf5, 0x5f, 0x52, 0x29, 0x32, 0xc2, 0xf3, 0x0e, 0x02, - 0x00, 0xeb, 0x42, 0x02, 0xb2, 0xf9, 0x0c, 0x21, 0x12, 0x02, 0x02, 0xf3, - 0x17, 0x05, 0x4f, 0xf4, 0x80, 0x06, 0x82, 0xfb, 0x06, 0x57, 0x4f, 0xea, - 0x47, 0x27, 0x47, 0xea, 0xd5, 0x55, 0x2c, 0x44, 0x04, 0xf3, 0x17, 0x04, - 0x03, 0xf5, 0x57, 0x52, 0x2e, 0x32, 0xc2, 0xf3, 0x0e, 0x02, 0x00, 0xeb, - 0x42, 0x02, 0xb2, 0xf9, 0x0c, 0x21, 0x12, 0x02, 0x02, 0xf3, 0x17, 0x05, - 0x4f, 0xf4, 0x80, 0x06, 0x82, 0xfb, 0x06, 0x57, 0x4f, 0xea, 0x47, 0x27, - 0x47, 0xea, 0xd5, 0x55, 0x2a, 0x19, 0x02, 0xf3, 0x17, 0x04, 0x03, 0xf5, - 0x52, 0x52, 0x1c, 0x32, 0xc2, 0xf3, 0x0e, 0x02, 0x00, 0xeb, 0x42, 0x02, - 0xb2, 0xf9, 0x0c, 0x21, 0x12, 0x02, 0x02, 0xf3, 0x17, 0x05, 0x4f, 0xf4, - 0x80, 0x06, 0x82, 0xfb, 0x06, 0x57, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, - 0xd5, 0x55, 0x2a, 0x19, 0x02, 0xf3, 0x17, 0x05, 0x03, 0xf5, 0x4b, 0x52, - 0x0e, 0x32, 0xc2, 0xf3, 0x0e, 0x02, 0x00, 0xeb, 0x42, 0x02, 0xb2, 0xf9, - 0x0c, 0x21, 0x12, 0x02, 0x02, 0xf3, 0x17, 0x04, 0x49, 0x4e, 0x82, 0xfb, - 0x06, 0x47, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xd4, 0x54, 0x62, 0x19, - 0x02, 0xf3, 0x17, 0x05, 0x03, 0xf5, 0x46, 0x52, 0x04, 0x32, 0xc2, 0xf3, - 0x0e, 0x02, 0x00, 0xeb, 0x42, 0x02, 0xb2, 0xf9, 0x0c, 0x21, 0x12, 0x02, - 0x02, 0xf3, 0x17, 0x04, 0x4f, 0xf4, 0x80, 0x06, 0x82, 0xfb, 0x06, 0x47, - 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xd4, 0x54, 0x62, 0x19, 0x02, 0xf3, - 0x17, 0x05, 0x03, 0xf5, 0x40, 0x52, 0x1c, 0x32, 0xc2, 0xf3, 0x0e, 0x02, - 0x00, 0xeb, 0x42, 0x02, 0xb2, 0xf9, 0x0c, 0x21, 0x12, 0x02, 0x02, 0xf3, - 0x17, 0x04, 0x4f, 0xf4, 0x80, 0x06, 0x82, 0xfb, 0x06, 0x47, 0x4f, 0xea, - 0x47, 0x27, 0x47, 0xea, 0xd4, 0x54, 0x62, 0x19, 0x02, 0xf3, 0x17, 0x05, - 0x03, 0xf5, 0x33, 0x52, 0x39, 0x32, 0xc2, 0xf3, 0x0e, 0x02, 0x00, 0xeb, - 0x42, 0x02, 0xb2, 0xf9, 0x0c, 0x21, 0x12, 0x02, 0x02, 0xf3, 0x17, 0x04, - 0x27, 0x4e, 0x82, 0xfb, 0x06, 0x47, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, - 0xd4, 0x54, 0x62, 0x19, 0x02, 0xf3, 0x17, 0x05, 0x03, 0xf5, 0x2f, 0x52, - 0x2d, 0x32, 0xc2, 0xf3, 0x0e, 0x02, 0x00, 0xeb, 0x42, 0x02, 0xb2, 0xf9, - 0x0c, 0x21, 0x12, 0x02, 0x02, 0xf3, 0x17, 0x04, 0x4f, 0xf4, 0x80, 0x06, - 0x82, 0xfb, 0x06, 0x47, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xd4, 0x54, - 0x62, 0x19, 0x02, 0xf3, 0x17, 0x05, 0x03, 0xf5, 0x25, 0x52, 0x36, 0x32, - 0xc2, 0xf3, 0x0e, 0x02, 0x00, 0xeb, 0x42, 0x02, 0xb2, 0xf9, 0x0c, 0x21, - 0x12, 0x02, 0x02, 0xf3, 0x17, 0x04, 0x4f, 0xf4, 0x80, 0x06, 0x82, 0xfb, - 0x06, 0x47, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xd4, 0x54, 0x62, 0x19, - 0x02, 0xf3, 0x17, 0x05, 0x03, 0xf5, 0x1b, 0x54, 0x03, 0x34, 0xc4, 0xf3, - 0x0e, 0x04, 0x00, 0xeb, 0x44, 0x04, 0xb4, 0xf9, 0x0c, 0x41, 0x24, 0x02, - 0x04, 0xf3, 0x17, 0x02, 0x4f, 0xf4, 0x80, 0x06, 0x84, 0xfb, 0x06, 0x27, - 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xd2, 0x52, 0x2a, 0x44, 0x02, 0xf3, - 0x17, 0x06, 0x01, 0xe0, 0x00, 0x20, 0x33, 0x00, 0x03, 0xf5, 0x13, 0x54, - 0x0d, 0x34, 0xc4, 0xf3, 0x0e, 0x04, 0x00, 0xeb, 0x44, 0x04, 0xb4, 0xf9, - 0x0c, 0x41, 0x24, 0x02, 0x04, 0xf3, 0x17, 0x02, 0x4f, 0xf4, 0x80, 0x05, - 0x84, 0xfb, 0x05, 0x27, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xd2, 0x52, - 0x32, 0x44, 0x02, 0xf3, 0x17, 0x02, 0x03, 0xf5, 0x10, 0x54, 0x17, 0x34, - 0xc4, 0xf3, 0x0e, 0x04, 0x00, 0xeb, 0x44, 0x04, 0xb4, 0xf9, 0x0c, 0x41, - 0x24, 0x02, 0x04, 0xf3, 0x17, 0x06, 0x84, 0xfb, 0x05, 0x67, 0x4f, 0xea, - 0x47, 0x27, 0x47, 0xea, 0xd6, 0x56, 0x32, 0x44, 0x02, 0xf3, 0x17, 0x02, - 0x03, 0xf5, 0x07, 0x54, 0x25, 0x34, 0xc4, 0xf3, 0x0e, 0x04, 0x00, 0xeb, - 0x44, 0x04, 0xb4, 0xf9, 0x0c, 0x41, 0x24, 0x02, 0x04, 0xf3, 0x17, 0x06, - 0x84, 0xfb, 0x05, 0x67, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xd6, 0x56, - 0x32, 0x44, 0x02, 0xf3, 0x17, 0x02, 0x03, 0xf5, 0xfa, 0x54, 0x08, 0x34, - 0xc4, 0xf3, 0x0e, 0x04, 0x00, 0xeb, 0x44, 0x04, 0xb4, 0xf9, 0x0c, 0x41, - 0x24, 0x02, 0x04, 0xf3, 0x17, 0x06, 0xe4, 0x4e, 0x84, 0xfb, 0x06, 0x7c, - 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, 0xd7, 0x57, 0x3a, 0x44, 0x02, 0xf3, - 0x17, 0x02, 0x03, 0xf5, 0xeb, 0x54, 0x01, 0x34, 0xc4, 0xf3, 0x0e, 0x04, - 0x00, 0xeb, 0x44, 0x04, 0xb4, 0xf9, 0x0c, 0x41, 0x24, 0x02, 0x04, 0xf3, - 0x17, 0x06, 0x84, 0xfb, 0x05, 0x67, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, - 0xd6, 0x56, 0x32, 0x44, 0x02, 0xf3, 0x17, 0x02, 0x03, 0xf5, 0xdd, 0x54, - 0x03, 0x34, 0xc4, 0xf3, 0x0e, 0x04, 0x00, 0xeb, 0x44, 0x04, 0xb4, 0xf9, - 0x0c, 0x41, 0x24, 0x02, 0x04, 0xf3, 0x17, 0x06, 0x84, 0xfb, 0x05, 0x67, - 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xd6, 0x56, 0x32, 0x44, 0x02, 0xf3, - 0x17, 0x02, 0x03, 0xf5, 0xcf, 0x54, 0x07, 0x34, 0xc4, 0xf3, 0x0e, 0x04, - 0x00, 0xeb, 0x44, 0x04, 0xb4, 0xf9, 0x0c, 0x41, 0x24, 0x02, 0x04, 0xf3, - 0x17, 0x06, 0x84, 0xfb, 0x05, 0x67, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, - 0xd6, 0x56, 0x32, 0x44, 0x02, 0xf3, 0x17, 0x02, 0x03, 0xf5, 0xc2, 0x54, - 0x03, 0x34, 0xc4, 0xf3, 0x0e, 0x04, 0x00, 0xeb, 0x44, 0x04, 0xb4, 0xf9, - 0x0c, 0x41, 0x24, 0x02, 0x04, 0xf3, 0x17, 0x06, 0x84, 0xfb, 0x05, 0x67, - 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xd6, 0x56, 0x32, 0x44, 0x02, 0xf3, - 0x17, 0x02, 0x03, 0xf5, 0xaa, 0x54, 0x01, 0x34, 0xc4, 0xf3, 0x0e, 0x04, - 0x00, 0xeb, 0x44, 0x04, 0xb4, 0xf9, 0x0c, 0x41, 0x24, 0x02, 0x04, 0xf3, - 0x17, 0x06, 0x84, 0xfb, 0x05, 0x67, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, - 0xd6, 0x56, 0x32, 0x44, 0x02, 0xf3, 0x17, 0x02, 0x03, 0xf5, 0x9d, 0x54, - 0xc4, 0xf3, 0x0e, 0x04, 0x00, 0xeb, 0x44, 0x04, 0xb4, 0xf9, 0x0c, 0x41, - 0x24, 0x02, 0x04, 0xf3, 0x17, 0x06, 0x84, 0xfb, 0x05, 0x67, 0x4f, 0xea, - 0x47, 0x27, 0x47, 0xea, 0xd6, 0x56, 0x32, 0x44, 0x02, 0xf3, 0x17, 0x02, - 0x03, 0xf5, 0x8f, 0x54, 0x19, 0x34, 0xc4, 0xf3, 0x0e, 0x04, 0x00, 0xeb, - 0x44, 0x04, 0xb4, 0xf9, 0x0c, 0x41, 0x24, 0x02, 0x04, 0xf3, 0x17, 0x06, - 0x84, 0xfb, 0x05, 0x67, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xd6, 0x56, - 0x32, 0x44, 0x02, 0xf3, 0x17, 0x02, 0x09, 0x02, 0x01, 0xf3, 0x17, 0x04, - 0x95, 0x4e, 0x81, 0xfb, 0x06, 0x47, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, - 0xd4, 0x54, 0x22, 0x44, 0x02, 0xf3, 0x17, 0x02, 0x4f, 0xf4, 0x00, 0x04, - 0xc0, 0xf8, 0x90, 0x20, 0x82, 0xfb, 0x04, 0x71, 0x4f, 0xea, 0x41, 0x21, - 0x41, 0xea, 0xd7, 0x57, 0x07, 0xf3, 0x17, 0x07, 0x03, 0xf5, 0x97, 0x41, - 0x08, 0x31, 0xc1, 0xf3, 0x0e, 0x01, 0x00, 0xeb, 0x41, 0x01, 0xb1, 0xf9, - 0x0c, 0x11, 0x09, 0x02, 0x01, 0xf3, 0x17, 0x0c, 0x81, 0xfb, 0x06, 0xe8, - 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xde, 0x5e, 0x77, 0x44, 0x07, 0xf3, - 0x17, 0x07, 0x03, 0xf5, 0x95, 0x41, 0x1e, 0x31, 0xc1, 0xf3, 0x0e, 0x01, - 0x00, 0xeb, 0x41, 0x01, 0x4f, 0xea, 0x27, 0x2e, 0xa1, 0xf8, 0x0c, 0xe1, - 0x7b, 0x49, 0x87, 0xfb, 0x01, 0xe8, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, - 0xde, 0x5e, 0x0e, 0xf3, 0x17, 0x07, 0xbc, 0x44, 0x0c, 0xf3, 0x17, 0x0c, - 0x03, 0xf5, 0x9a, 0x47, 0x47, 0x37, 0xc7, 0xf3, 0x0e, 0x07, 0x00, 0xeb, - 0x47, 0x07, 0xb7, 0xf9, 0x0c, 0x71, 0x3f, 0x02, 0x07, 0xf3, 0x17, 0x0e, - 0x87, 0xfb, 0x06, 0x8a, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, - 0xc4, 0x44, 0x0c, 0xf3, 0x17, 0x0c, 0x03, 0xf5, 0x97, 0x47, 0x09, 0x37, - 0xc7, 0xf3, 0x0e, 0x07, 0x00, 0xeb, 0x47, 0x07, 0x4f, 0xea, 0x2c, 0x28, - 0xa7, 0xf8, 0x0c, 0x81, 0x8c, 0xfb, 0x01, 0x78, 0x4f, 0xea, 0x48, 0x28, - 0x48, 0xea, 0xd7, 0x57, 0x07, 0xf3, 0x17, 0x07, 0xbe, 0x44, 0x0e, 0xf3, - 0x17, 0x0e, 0x03, 0xf5, 0x9e, 0x47, 0x70, 0x37, 0xc7, 0xf3, 0x0e, 0x07, - 0x00, 0xeb, 0x47, 0x07, 0xb7, 0xf9, 0x0c, 0xc1, 0x4f, 0xea, 0x0c, 0x2c, - 0x0c, 0xf3, 0x17, 0x07, 0x8c, 0xfb, 0x06, 0x8a, 0x4f, 0xea, 0x4a, 0x2a, - 0x4a, 0xea, 0xd8, 0x58, 0xc6, 0x44, 0x0e, 0xf3, 0x17, 0x0e, 0x03, 0xf5, - 0x9a, 0x4c, 0x0c, 0xf1, 0x48, 0x0c, 0xcc, 0xf3, 0x0e, 0x0c, 0x00, 0xeb, - 0x4c, 0x0c, 0x4f, 0xea, 0x2e, 0x28, 0xac, 0xf8, 0x0c, 0x81, 0x8e, 0xfb, - 0x01, 0xc8, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xdc, 0x5c, 0x0c, 0xf3, - 0x17, 0x0c, 0x67, 0x44, 0x07, 0xf3, 0x17, 0x07, 0x4f, 0xf0, 0x00, 0x0e, - 0x47, 0x66, 0x87, 0xfb, 0x0e, 0xc8, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, - 0xdc, 0x5c, 0x0c, 0xf3, 0x17, 0x07, 0x82, 0xfb, 0x04, 0xc8, 0x4f, 0xea, - 0x48, 0x28, 0x48, 0xea, 0xdc, 0x5c, 0x07, 0xeb, 0x0c, 0x02, 0x02, 0xf3, - 0x17, 0x07, 0x03, 0xf5, 0xa0, 0x42, 0x3a, 0x32, 0xc2, 0xf3, 0x0e, 0x02, - 0x00, 0xeb, 0x42, 0x02, 0xb2, 0xf9, 0x0c, 0x21, 0x12, 0x02, 0x02, 0xf3, - 0x17, 0x0c, 0x82, 0xfb, 0x06, 0x8a, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, - 0xd8, 0x58, 0x07, 0xeb, 0x08, 0x02, 0x02, 0xf3, 0x17, 0x07, 0x03, 0xf5, - 0x9e, 0x42, 0x71, 0x32, 0xc2, 0xf3, 0x0e, 0x02, 0x00, 0xeb, 0x42, 0x02, - 0x4f, 0xea, 0x27, 0x28, 0xa2, 0xf8, 0x0c, 0x81, 0x87, 0xfb, 0x01, 0x28, - 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xd2, 0x52, 0x02, 0xf3, 0x17, 0x02, - 0x94, 0x44, 0x0c, 0xf3, 0x17, 0x0c, 0x03, 0xf5, 0xa3, 0x42, 0x40, 0x32, - 0xc2, 0xf3, 0x0e, 0x02, 0x00, 0xeb, 0x42, 0x02, 0xb2, 0xf9, 0x0c, 0x71, - 0x3f, 0x02, 0x07, 0xf3, 0x17, 0x02, 0x87, 0xfb, 0x06, 0x8a, 0x4f, 0xea, - 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, 0xc4, 0x44, 0x0c, 0xf3, 0x17, 0x0c, - 0x03, 0xf5, 0xa0, 0x47, 0x3b, 0x37, 0xc7, 0xf3, 0x0e, 0x07, 0x00, 0xeb, - 0x47, 0x07, 0x4f, 0xea, 0x2c, 0x28, 0xa7, 0xf8, 0x0c, 0x81, 0x8c, 0xfb, - 0x01, 0x78, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xd7, 0x57, 0x07, 0xf3, - 0x17, 0x07, 0x3a, 0x44, 0x02, 0xf3, 0x17, 0x02, 0x03, 0xf5, 0xa8, 0x47, - 0x34, 0x37, 0xc7, 0xf3, 0x0e, 0x07, 0x00, 0xeb, 0x47, 0x07, 0xb7, 0xf9, - 0x0c, 0xc1, 0x4f, 0xea, 0x0c, 0x2c, 0x0c, 0xf3, 0x17, 0x07, 0x8c, 0xfb, - 0x06, 0x8a, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, 0x42, 0x44, - 0x02, 0xf3, 0x17, 0x02, 0x82, 0xfb, 0x01, 0x6c, 0x4f, 0xea, 0x4c, 0x2c, - 0x4c, 0xea, 0xd6, 0x56, 0x03, 0xf5, 0xa3, 0x41, 0x41, 0x31, 0xc1, 0xf3, - 0x0e, 0x01, 0x00, 0xeb, 0x41, 0x01, 0x05, 0xe0, 0x00, 0x20, 0x33, 0x00, - 0x00, 0xc0, 0x4c, 0x00, 0x00, 0x20, 0xb3, 0xff, 0x12, 0x12, 0xa1, 0xf8, - 0x0c, 0x21, 0x06, 0xf3, 0x17, 0x02, 0x3a, 0x44, 0x02, 0xf3, 0x17, 0x02, - 0x82, 0x66, 0x82, 0xfb, 0x0e, 0xc1, 0x4f, 0xea, 0x41, 0x21, 0x41, 0xea, - 0xdc, 0x5c, 0x0c, 0xf3, 0x17, 0x0c, 0x03, 0xf5, 0xce, 0x57, 0x09, 0x37, - 0xc7, 0xf3, 0x0e, 0x07, 0x00, 0xeb, 0x47, 0x07, 0xb7, 0xf9, 0x0c, 0x81, - 0x4f, 0xea, 0x08, 0x28, 0x08, 0xf3, 0x17, 0x02, 0x9d, 0x49, 0x88, 0xfb, - 0x01, 0x26, 0x4f, 0xea, 0x46, 0x26, 0x46, 0xea, 0xd2, 0x52, 0x94, 0x44, - 0x0c, 0xf3, 0x17, 0x0c, 0xd0, 0xf8, 0x94, 0x20, 0xac, 0xeb, 0x02, 0x06, - 0x86, 0xfb, 0x05, 0xab, 0x4f, 0xea, 0x4b, 0x2b, 0x4b, 0xea, 0xda, 0x5a, - 0x52, 0x44, 0x02, 0xf3, 0x17, 0x02, 0x82, 0xfb, 0x01, 0x56, 0x4f, 0xea, - 0x46, 0x26, 0x46, 0xea, 0xd5, 0x55, 0x01, 0x92, 0xac, 0x44, 0x0c, 0xf3, - 0x17, 0x0c, 0x45, 0x6d, 0x8c, 0xfb, 0x05, 0x6a, 0x4f, 0xea, 0x4a, 0x2a, - 0x4a, 0xea, 0xd6, 0x56, 0x06, 0xf3, 0x17, 0x06, 0x08, 0xf3, 0x17, 0x0c, - 0x88, 0xfb, 0x04, 0xca, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xdc, 0x5c, - 0x66, 0x44, 0x06, 0xf3, 0x17, 0x06, 0x4f, 0xea, 0x26, 0x2c, 0xa7, 0xf8, - 0x0c, 0xc1, 0x86, 0xfb, 0x0e, 0xc7, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, - 0xdc, 0x5c, 0x0c, 0xf3, 0x17, 0x0c, 0x03, 0xf5, 0x06, 0x56, 0x19, 0x36, - 0xc6, 0xf3, 0x0e, 0x06, 0x00, 0xeb, 0x46, 0x06, 0xb6, 0xf9, 0x0c, 0x71, - 0x3f, 0x02, 0x07, 0xf3, 0x17, 0x08, 0x87, 0xfb, 0x01, 0x8a, 0x4f, 0xea, - 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, 0xc4, 0x44, 0x0c, 0xf3, 0x17, 0x0c, - 0xd0, 0xf8, 0x98, 0x20, 0xdf, 0xf8, 0xcc, 0xa1, 0xac, 0xeb, 0x02, 0x08, - 0x88, 0xfb, 0x0a, 0xb2, 0x4f, 0xea, 0x42, 0x22, 0x42, 0xea, 0xdb, 0x5b, - 0xd0, 0xf8, 0x98, 0x20, 0x02, 0xeb, 0x0b, 0x08, 0x08, 0xf3, 0x17, 0x08, - 0x88, 0xfb, 0x01, 0xab, 0x4f, 0xea, 0x4b, 0x2b, 0x4b, 0xea, 0xda, 0x5a, - 0xc0, 0xf8, 0x98, 0x80, 0xd4, 0x44, 0x0c, 0xf3, 0x17, 0x08, 0x88, 0xfb, - 0x05, 0xca, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xdc, 0x5c, 0x0c, 0xf3, - 0x17, 0x0c, 0x07, 0xf3, 0x17, 0x08, 0x87, 0xfb, 0x04, 0x8a, 0x4f, 0xea, - 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, 0x0c, 0xeb, 0x08, 0x07, 0x07, 0xf3, - 0x17, 0x07, 0x4f, 0xea, 0x27, 0x2c, 0xa6, 0xf8, 0x0c, 0xc1, 0x87, 0xfb, - 0x0e, 0x6c, 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, 0xd6, 0x56, 0x06, 0xf3, - 0x17, 0x06, 0x03, 0xf5, 0x2d, 0x57, 0x1d, 0x37, 0xc7, 0xf3, 0x0e, 0x07, - 0x00, 0xeb, 0x47, 0x07, 0xb7, 0xf9, 0x0c, 0xc1, 0x4f, 0xea, 0x0c, 0x2c, - 0x0c, 0xf3, 0x17, 0x08, 0x8c, 0xfb, 0x01, 0x8a, 0x4f, 0xea, 0x4a, 0x2a, - 0x4a, 0xea, 0xd8, 0x58, 0x46, 0x44, 0x06, 0xf3, 0x17, 0x06, 0x01, 0x9a, - 0xdf, 0xf8, 0x2c, 0xa1, 0xa6, 0xeb, 0x02, 0x08, 0x88, 0xfb, 0x0a, 0xb2, - 0x4f, 0xea, 0x42, 0x22, 0x42, 0xea, 0xdb, 0x5b, 0x01, 0x9a, 0x5a, 0x44, - 0x02, 0xf3, 0x17, 0x02, 0x82, 0xfb, 0x01, 0x8a, 0x4f, 0xea, 0x4a, 0x2a, - 0x4a, 0xea, 0xd8, 0x58, 0x46, 0x44, 0x06, 0xf3, 0x17, 0x08, 0x88, 0xfb, - 0x05, 0x6a, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd6, 0x56, 0x06, 0xf3, - 0x17, 0x06, 0x0c, 0xf3, 0x17, 0x08, 0x8c, 0xfb, 0x04, 0x8a, 0x4f, 0xea, - 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, 0x46, 0x44, 0x06, 0xf3, 0x17, 0x06, - 0x4f, 0xea, 0x26, 0x2c, 0xa7, 0xf8, 0x0c, 0xc1, 0x86, 0xfb, 0x0e, 0x7c, - 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, 0xd7, 0x57, 0x07, 0xf3, 0x17, 0x07, - 0x03, 0xf5, 0x5c, 0x53, 0x15, 0x33, 0xc3, 0xf3, 0x0e, 0x03, 0x00, 0xeb, - 0x43, 0x03, 0xb3, 0xf9, 0x0c, 0x61, 0x36, 0x02, 0x06, 0xf3, 0x17, 0x0c, - 0x86, 0xfb, 0x01, 0xc8, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xdc, 0x5c, - 0x67, 0x44, 0x07, 0xf3, 0x17, 0x07, 0xdf, 0xf8, 0x9c, 0x80, 0xa7, 0xeb, - 0x02, 0x0c, 0x8c, 0xfb, 0x08, 0xab, 0x4f, 0xea, 0x4b, 0x2b, 0x4b, 0xea, - 0xda, 0x5a, 0x52, 0x44, 0x02, 0xf3, 0x17, 0x02, 0x82, 0xfb, 0x01, 0xc8, - 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xdc, 0x5c, 0xc0, 0xf8, 0x94, 0x20, - 0x07, 0xeb, 0x0c, 0x01, 0x01, 0xf3, 0x17, 0x01, 0x81, 0xfb, 0x05, 0x27, - 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xd2, 0x52, 0x02, 0xf3, 0x17, 0x02, - 0x06, 0xf3, 0x17, 0x05, 0x86, 0xfb, 0x04, 0x17, 0x4f, 0xea, 0x47, 0x27, - 0x47, 0xea, 0xd1, 0x51, 0x85, 0x60, 0x0a, 0x44, 0x02, 0xf3, 0x17, 0x02, - 0x14, 0x12, 0x42, 0x60, 0x82, 0xfb, 0x0e, 0x15, 0x4f, 0xea, 0x45, 0x25, - 0x45, 0xea, 0xd1, 0x51, 0xa3, 0xf8, 0x0c, 0x41, 0x01, 0xf3, 0x17, 0x01, - 0x01, 0x60, 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x8d, 0xd5, 0xf8, 0x30, 0x21, - 0x04, 0x4f, 0x4f, 0xea, 0xa2, 0x2c, 0xbf, 0x1a, 0x0c, 0xf1, 0x01, 0x06, - 0xff, 0xf7, 0x26, 0xb9, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x3f, 0x00, - 0x00, 0x33, 0x33, 0x00, 0x00, 0x66, 0x26, 0x00, 0x00, 0x99, 0x19, 0x00, - 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, - 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, - 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, - 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, - 0x38, 0xb5, 0x08, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x1d, 0x68, 0x55, 0xb1, - 0x06, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x1c, 0x68, 0xe3, 0x88, 0xb4, 0xf9, - 0x04, 0x20, 0x61, 0x88, 0x20, 0x88, 0xa8, 0x47, 0x20, 0x72, 0x38, 0xbd, - 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x10, 0xb4, 0x03, 0x4c, - 0x59, 0xf8, 0x04, 0x40, 0xa4, 0x46, 0x5d, 0xf8, 0x04, 0x4b, 0x60, 0x47, - 0x10, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x14, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x41, 0x58, 0x4b, 0x59, 0xf8, - 0x03, 0x40, 0x58, 0x4b, 0x00, 0x25, 0xc4, 0xe9, 0x02, 0x55, 0xc4, 0xe9, - 0x04, 0x55, 0xc4, 0xe9, 0x06, 0x55, 0xc4, 0xe9, 0x08, 0x55, 0xc4, 0xe9, - 0x0a, 0x55, 0xc4, 0xe9, 0x0c, 0x55, 0xc4, 0xe9, 0x0e, 0x55, 0xc4, 0xe9, - 0x10, 0x55, 0xc4, 0xe9, 0x12, 0x55, 0xc4, 0xe9, 0x14, 0x55, 0xc4, 0xe9, - 0x16, 0x55, 0xc4, 0xe9, 0x18, 0x55, 0xc4, 0xe9, 0x1a, 0x55, 0xc4, 0xe9, - 0x1c, 0x55, 0xc4, 0xe9, 0x1e, 0x55, 0xc4, 0xe9, 0x20, 0x55, 0xc4, 0xf8, - 0x88, 0x50, 0xc4, 0xf8, 0x08, 0x51, 0x82, 0xb0, 0x59, 0xf8, 0x03, 0x80, - 0x29, 0x46, 0x4f, 0xf4, 0x80, 0x32, 0x04, 0xf5, 0x86, 0x70, 0xc0, 0x47, - 0x04, 0xf5, 0x80, 0x36, 0x3c, 0x4b, 0xc6, 0xf8, 0x14, 0x31, 0xc6, 0xe9, - 0x48, 0x53, 0x01, 0x23, 0x86, 0xf8, 0x48, 0x31, 0x04, 0xf1, 0x10, 0x03, - 0xc6, 0xf8, 0x18, 0x31, 0x04, 0xf1, 0x0c, 0x03, 0xc6, 0xf8, 0x1c, 0x31, - 0x04, 0xf1, 0x18, 0x03, 0xc6, 0xf8, 0x28, 0x31, 0x04, 0xf1, 0x14, 0x03, - 0xc6, 0xf8, 0x2c, 0x31, 0x04, 0xf1, 0x20, 0x03, 0xc6, 0xf8, 0x34, 0x31, - 0x04, 0xf1, 0x1c, 0x03, 0xc6, 0xf8, 0x38, 0x31, 0x04, 0xf1, 0x28, 0x03, - 0xc6, 0xf8, 0x40, 0x31, 0xc6, 0xe9, 0x43, 0x55, 0x04, 0xf1, 0x24, 0x03, - 0xc6, 0xf8, 0x44, 0x31, 0x2b, 0x4b, 0xc6, 0xf8, 0x30, 0x51, 0xc6, 0xf8, - 0x3c, 0x51, 0xc6, 0xf8, 0x50, 0x51, 0x59, 0xf8, 0x03, 0x70, 0x25, 0x60, - 0x65, 0x60, 0x29, 0x46, 0x04, 0xf1, 0x8c, 0x00, 0x7c, 0x22, 0x7c, 0x60, - 0xc0, 0x47, 0x24, 0x4b, 0x9f, 0xed, 0x1f, 0x0a, 0x59, 0xf8, 0x03, 0x20, - 0xc6, 0xf8, 0x4c, 0x21, 0x4f, 0xf0, 0x7c, 0x53, 0xfb, 0x60, 0x3b, 0x61, - 0x7b, 0x61, 0xf7, 0xee, 0x00, 0x0a, 0x1e, 0x4b, 0xc7, 0xed, 0x02, 0x0a, - 0x59, 0xf8, 0x03, 0x00, 0x1c, 0x4b, 0xcd, 0xed, 0x01, 0x0a, 0x8d, 0xed, - 0x00, 0x0a, 0x59, 0xf8, 0x03, 0x40, 0x07, 0xf1, 0x08, 0x01, 0xa0, 0x47, - 0x18, 0x4b, 0xdd, 0xed, 0x01, 0x0a, 0x59, 0xf8, 0x03, 0x00, 0x9d, 0xed, - 0x00, 0x0a, 0x07, 0xf1, 0x0c, 0x01, 0xa0, 0x47, 0x14, 0x4b, 0xdd, 0xed, - 0x01, 0x0a, 0x59, 0xf8, 0x03, 0x00, 0x9d, 0xed, 0x00, 0x0a, 0x07, 0xf1, - 0x10, 0x01, 0xa0, 0x47, 0x10, 0x4b, 0xdd, 0xed, 0x01, 0x0a, 0x59, 0xf8, - 0x03, 0x00, 0x9d, 0xed, 0x00, 0x0a, 0x07, 0xf1, 0x14, 0x01, 0x23, 0x46, - 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x41, 0x18, 0x47, 0x01, 0x00, 0x80, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4d, 0x2d, 0xed, 0x02, 0x8b, - 0x87, 0x4b, 0x88, 0x4a, 0x59, 0xf8, 0x03, 0x80, 0x87, 0x4b, 0x59, 0xf8, - 0x02, 0x00, 0x59, 0xf8, 0x03, 0x10, 0x86, 0x4b, 0x86, 0x4a, 0x59, 0xf8, - 0x03, 0x30, 0xd8, 0xed, 0x03, 0x6a, 0x98, 0xed, 0x04, 0x7a, 0x09, 0x68, - 0xd8, 0xed, 0x05, 0x7a, 0x00, 0x68, 0x59, 0xf8, 0x02, 0x20, 0xd0, 0xf8, - 0x00, 0xa0, 0x1e, 0x68, 0xd1, 0xf8, 0x00, 0xb0, 0xd8, 0xf8, 0x04, 0x70, - 0x15, 0x68, 0x9f, 0xed, 0x76, 0x8a, 0xb0, 0xee, 0x66, 0x6a, 0xf0, 0xee, - 0x47, 0x6a, 0xb0, 0xee, 0x67, 0x7a, 0x8a, 0xb0, 0xbe, 0xee, 0xe4, 0x6a, - 0xfe, 0xee, 0xe4, 0x6a, 0xbe, 0xee, 0xe4, 0x7a, 0xb4, 0x46, 0x59, 0x46, - 0x0a, 0xf1, 0x60, 0x03, 0xcd, 0xe9, 0x06, 0x6a, 0xcd, 0xf8, 0x14, 0xb0, - 0xcd, 0xf8, 0x24, 0x80, 0xd3, 0x46, 0x8d, 0xed, 0x02, 0x6a, 0xcd, 0xed, - 0x03, 0x6a, 0x8d, 0xed, 0x04, 0x7a, 0x07, 0xf5, 0x80, 0x34, 0x08, 0x95, - 0x01, 0x91, 0x2e, 0x46, 0x9a, 0x46, 0xe0, 0x46, 0xfb, 0xec, 0x01, 0x7a, - 0xfe, 0xee, 0xe4, 0x7a, 0x17, 0xee, 0x90, 0x3a, 0x03, 0xf3, 0x17, 0x03, - 0xfb, 0x65, 0x01, 0x9b, 0xf3, 0xec, 0x01, 0x7a, 0xfe, 0xee, 0xe4, 0x7a, - 0x01, 0x93, 0x17, 0xee, 0x90, 0x3a, 0x03, 0xf3, 0x17, 0x03, 0x3b, 0x66, - 0x02, 0x9b, 0x03, 0xf3, 0x17, 0x03, 0xfb, 0x64, 0x03, 0x9b, 0x03, 0xf3, - 0x17, 0x03, 0x3b, 0x65, 0x04, 0x9b, 0x03, 0xf3, 0x17, 0x03, 0x7b, 0x65, - 0x38, 0x46, 0xd4, 0xf8, 0x4c, 0x31, 0x98, 0x47, 0x4f, 0xf0, 0x00, 0x03, - 0x84, 0xf8, 0x48, 0x31, 0xd4, 0xf8, 0x1c, 0x31, 0x19, 0x68, 0xd4, 0xf8, - 0x0c, 0x31, 0x01, 0x3b, 0xc4, 0xf8, 0x0c, 0x31, 0xd4, 0xe9, 0x44, 0x23, - 0x09, 0x12, 0x82, 0xfb, 0x01, 0x0c, 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, - 0xd0, 0x50, 0x03, 0x44, 0x03, 0xf3, 0x17, 0x03, 0x83, 0xfb, 0x01, 0x0c, - 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, 0xd0, 0x50, 0xc4, 0xf8, 0x14, 0x31, - 0x12, 0x1a, 0x02, 0xf3, 0x17, 0x02, 0xd4, 0xf8, 0x2c, 0x31, 0xc4, 0xf8, - 0x10, 0x21, 0x18, 0x68, 0xd4, 0xe9, 0x48, 0x23, 0x00, 0x12, 0x82, 0xfb, - 0x00, 0x1c, 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, 0xd1, 0x51, 0x0b, 0x44, - 0x03, 0xf3, 0x17, 0x03, 0x83, 0xfb, 0x00, 0x1c, 0x4f, 0xea, 0x4c, 0x2c, - 0x4c, 0xea, 0xd1, 0x51, 0xc4, 0xf8, 0x24, 0x31, 0x52, 0x1a, 0x02, 0xf3, - 0x17, 0x02, 0xd4, 0xf8, 0x34, 0x31, 0xc4, 0xf8, 0x20, 0x21, 0x18, 0x68, - 0xd4, 0xf8, 0x40, 0x31, 0x2e, 0x4a, 0x19, 0x68, 0xd4, 0xf8, 0x38, 0x31, - 0xd7, 0xed, 0x19, 0x7a, 0xd4, 0xf8, 0x30, 0x51, 0x40, 0x15, 0x49, 0x15, - 0x42, 0xfa, 0x00, 0xf0, 0x42, 0xfa, 0x01, 0xf1, 0x1a, 0x68, 0xd4, 0xf8, - 0x44, 0x31, 0xb8, 0xee, 0xe7, 0x7a, 0xa5, 0xeb, 0x22, 0x32, 0xd7, 0xed, - 0x1a, 0x7a, 0x1b, 0x68, 0x02, 0x40, 0xc4, 0xf8, 0x30, 0x21, 0xf8, 0xee, - 0xe7, 0x7a, 0xd4, 0xf8, 0x3c, 0x21, 0x27, 0xee, 0x08, 0x7a, 0x67, 0xee, - 0x88, 0x7a, 0xa2, 0xeb, 0x23, 0x33, 0x19, 0x40, 0xd3, 0x45, 0xc4, 0xf8, - 0x3c, 0x11, 0xa6, 0xec, 0x01, 0x7a, 0xe8, 0xec, 0x01, 0x7a, 0x7f, 0xf4, - 0x67, 0xaf, 0xdd, 0xe9, 0x07, 0xa5, 0xdd, 0xe9, 0x05, 0xb6, 0xdd, 0xf8, - 0x24, 0x80, 0xf7, 0xee, 0x00, 0x6a, 0x05, 0xf1, 0x60, 0x03, 0x98, 0xed, - 0x02, 0x7a, 0xfa, 0xec, 0x01, 0x5a, 0x95, 0xed, 0x00, 0x6a, 0x76, 0xee, - 0xc7, 0x7a, 0x67, 0xee, 0xa5, 0x7a, 0xe6, 0xee, 0x07, 0x7a, 0xe5, 0xec, - 0x01, 0x7a, 0x98, 0xed, 0x02, 0x7a, 0xfb, 0xec, 0x01, 0x5a, 0x96, 0xed, - 0x00, 0x6a, 0x76, 0xee, 0xc7, 0x7a, 0xab, 0x42, 0x67, 0xee, 0xa5, 0x7a, - 0xe6, 0xee, 0x07, 0x7a, 0xe6, 0xec, 0x01, 0x7a, 0xe1, 0xd1, 0x0a, 0xb0, - 0xbd, 0xec, 0x02, 0x8b, 0xbd, 0xe8, 0xf0, 0x8d, 0x00, 0x00, 0x00, 0x34, - 0xff, 0xff, 0x3f, 0x00, 0x08, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x70, 0xb5, 0x10, 0x4a, 0x10, 0x4b, 0x59, 0xf8, 0x02, 0x60, 0x59, 0xf8, - 0x03, 0x50, 0x76, 0x1b, 0xb6, 0x10, 0x06, 0xd0, 0x00, 0x24, 0x55, 0xf8, - 0x04, 0x3b, 0x01, 0x34, 0x98, 0x47, 0xa6, 0x42, 0xf9, 0xd1, 0x0a, 0x4a, - 0x0a, 0x4b, 0x59, 0xf8, 0x02, 0x60, 0x59, 0xf8, 0x03, 0x50, 0x76, 0x1b, - 0xb6, 0x10, 0x06, 0xd0, 0x00, 0x24, 0x55, 0xf8, 0x04, 0x3b, 0x01, 0x34, - 0x98, 0x47, 0xa6, 0x42, 0xf9, 0xd1, 0x70, 0xbd, 0x44, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, - 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0xc2, 0xfd, 0xbd, 0xe8, 0x00, 0x82, - 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, - 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0xda, 0xfd, - 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, - 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, - 0xff, 0xf7, 0x92, 0xfe, 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, - 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, - 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0xa2, 0xff, 0xbd, 0xe8, 0x00, 0x82, - 0x00, 0x00, 0x00, 0x20, 0x44, 0x2f, 0x57, 0x00, 0x50, 0x72, 0x65, 0x44, - 0x00, 0x00, 0x00, 0x00, 0x47, 0x2d, 0x54, 0x69, 0x6d, 0x65, 0x00, 0x00, - 0x44, 0x61, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00 -}; -unsigned int __FX_Gated_Reverb_bin_len = 5576; diff --git a/app/FX/JU60_chorus.bin b/app/FX/JU60_chorus.bin new file mode 100644 index 0000000..9216440 Binary files /dev/null and b/app/FX/JU60_chorus.bin differ diff --git a/src/fx_juno60_chorus.cxx b/app/FX/JU60_chorus.cpp similarity index 59% rename from src/fx_juno60_chorus.cxx rename to app/FX/JU60_chorus.cpp index e5ac287..13bfe28 100644 --- a/src/fx_juno60_chorus.cxx +++ b/app/FX/JU60_chorus.cpp @@ -29,18 +29,25 @@ // https://github.com/jpcima/rc-effect-playground/issues/2#issuecomment-541340615 // https://github.com/jpcima/string-machine/tree/master/sources/bbd +#include "../squares-and-circles-api.h" +#ifdef ONE_POLE +#undef ONE_POLE +#endif + +#include + +#include "bbd/bbd_line.h" + #include "stmlib/dsp/filter.h" #include "stmlib/dsp/delay_line.h" #include "stmlib/dsp/dsp.h" -#include "bbd/bbd_line.h" -#include "machine.h" - -constexpr int samplerate = machine::SAMPLE_RATE; +#include "bbd/bbd_line.cc" +#include "bbd/bbd_filter.cc" struct Juno60_Chorus { - static constexpr size_t delay_size = (1 + samplerate * 0.0054); // max delay time + static constexpr size_t delay_size = (1 + SAMPLE_RATE * 0.0054); // max delay time stmlib::DelayLine delay_; stmlib::Svf pre_lpf, post_lpf_l, post_lpf_r; @@ -83,10 +90,10 @@ struct Juno60_Chorus void setMode(const Mode &mode) { mode_ = mode; - lmin = mode_.minDelayL * samplerate; - la = (mode_.maxDelayL - mode_.minDelayL) * samplerate; - rmin = mode_.minDelayR * samplerate; - ra = (mode_.maxDelayR - mode_.minDelayR) * samplerate; + lmin = mode_.minDelayL * SAMPLE_RATE; + la = (mode_.maxDelayL - mode_.minDelayL) * SAMPLE_RATE; + rmin = mode_.minDelayR * SAMPLE_RATE; + ra = (mode_.maxDelayR - mode_.minDelayR) * SAMPLE_RATE; } Juno60_Chorus() @@ -95,15 +102,15 @@ struct Juno60_Chorus pre_lpf.Init(); post_lpf_l.Init(); post_lpf_r.Init(); - pre_lpf.set_f_q(7237.f / samplerate, 1.f); - post_lpf_l.set_f_q(10644.f / samplerate, 1.f); - post_lpf_r.set_f_q(10644.f / samplerate, 1.f); + pre_lpf.set_f_q(7237.f / SAMPLE_RATE, 1.f); + post_lpf_l.set_f_q(10644.f / SAMPLE_RATE, 1.f); + post_lpf_r.set_f_q(10644.f / SAMPLE_RATE, 1.f); } void process(float *inOut, float *outR, uint32_t len) { float wet = 1.f - mode_.dry; - float f = mode_.freq / samplerate; + float f = mode_.freq / SAMPLE_RATE; while (len-- > 0) { float lfo_val = lfo_tri(f); @@ -160,17 +167,17 @@ struct Juno60_Chorus_BBD void setMode(const Mode &mode) { mode_ = mode; - minL = BBD_Line::hz_rate_for_delay(mode_.minDelayL, bbd_stages) / machine::SAMPLE_RATE; - maxL = BBD_Line::hz_rate_for_delay(mode_.maxDelayL, bbd_stages) / machine::SAMPLE_RATE; - minR = BBD_Line::hz_rate_for_delay(mode_.minDelayR, bbd_stages) / machine::SAMPLE_RATE; - maxR = BBD_Line::hz_rate_for_delay(mode_.maxDelayR, bbd_stages) / machine::SAMPLE_RATE; + minL = BBD_Line::hz_rate_for_delay(mode_.minDelayL, bbd_stages) / SAMPLE_RATE; + maxL = BBD_Line::hz_rate_for_delay(mode_.maxDelayL, bbd_stages) / SAMPLE_RATE; + minR = BBD_Line::hz_rate_for_delay(mode_.minDelayR, bbd_stages) / SAMPLE_RATE; + maxR = BBD_Line::hz_rate_for_delay(mode_.maxDelayR, bbd_stages) / SAMPLE_RATE; } Juno60_Chorus_BBD() { const unsigned interp_size = 128; - fin = BBD::compute_filter(machine::SAMPLE_RATE, interp_size, bbd_fin_j60); - fout = BBD::compute_filter(machine::SAMPLE_RATE, interp_size, bbd_fout_j60); + fin = BBD::compute_filter(SAMPLE_RATE, interp_size, bbd_fin_j60); + fout = BBD::compute_filter(SAMPLE_RATE, interp_size, bbd_fout_j60); _delayL.setup(bbd_stages, fin, fout); _delayR.setup(bbd_stages, fin, fout); @@ -178,12 +185,12 @@ struct Juno60_Chorus_BBD _delayR.clear(); } - float dry[machine::FRAME_BUFFER_SIZE]; + float dry[FRAME_BUFFER_SIZE]; float phase_ = 0; void lfo_tri(float phase_inc_, float *out) { - for (size_t i = 0; i < machine::FRAME_BUFFER_SIZE; i++) + for (size_t i = 0; i < FRAME_BUFFER_SIZE; i++) { float t = -1.0f + (2.0f * phase_); *out++ = fabsf(t); @@ -194,18 +201,18 @@ struct Juno60_Chorus_BBD } } - float clockL[machine::FRAME_BUFFER_SIZE]; - float clockR[machine::FRAME_BUFFER_SIZE]; + float clockL[FRAME_BUFFER_SIZE]; + float clockR[FRAME_BUFFER_SIZE]; void process(float *inOut, float *outR, uint32_t len) { float wet = 1.f - mode_.dry; - float f = mode_.freq / samplerate; + float f = mode_.freq / SAMPLE_RATE; memcpy(dry, inOut, len * sizeof(float)); lfo_tri(f, clockL); - for (size_t i = 0; i < machine::FRAME_BUFFER_SIZE; i++) + for (size_t i = 0; i < FRAME_BUFFER_SIZE; i++) { dry[i] = stmlib::SoftLimit(dry[i]); @@ -214,10 +221,10 @@ struct Juno60_Chorus_BBD clockR[i] = minR + (mode_.stereo ? (1.f - lfo) : lfo) * (maxR - minR); } - _delayL.process(machine::FRAME_BUFFER_SIZE, dry, inOut, clockL); - _delayR.process(machine::FRAME_BUFFER_SIZE, dry, outR, clockR); + _delayL.process(FRAME_BUFFER_SIZE, dry, inOut, clockL); + _delayR.process(FRAME_BUFFER_SIZE, dry, outR, clockR); - for (size_t i = 0; i < machine::FRAME_BUFFER_SIZE; i++) + for (size_t i = 0; i < FRAME_BUFFER_SIZE; i++) { inOut[i] = inOut[i] * wet + dry[i] * mode_.dry; outR[i] = outR[i] * wet + dry[i] * mode_.dry; @@ -225,115 +232,95 @@ struct Juno60_Chorus_BBD } }; -using namespace machine; - -template -struct Juno60Chorus : public Engine -{ - T _chorus; - - float bufferL[FRAME_BUFFER_SIZE]; - float bufferR[FRAME_BUFFER_SIZE]; +static Juno60_Chorus_BBD _chorus = {}; - uint8_t mode = 1.f; - float raw = 1.f; +static int32_t mode = 1; +static const char *modes[] = { + "Off", "Mode I", "Mode II", "Mode I+II"}; +static float raw = 1.f; - Juno60Chorus() : Engine(AUDIO_PROCESSOR) - { - param[0].init("Amount", &raw, raw); - param[1].init("Mode", &mode, 1, 0, 3); - param[1].print_value = [&](char *name) - { - switch (mode) - { - case 0: - sprintf(name, ">Off"); - break; - case 1: - sprintf(name, ">Mode I"); - break; - case 2: - sprintf(name, ">Mode II"); - break; - case 3: - sprintf(name, ">Mode I+II"); - break; - } - }; - } +void engine::setup() +{ + engine::addParam("Amount", &raw); + engine::addParam(">Modes", &mode, 0, 3, modes); +} - void process(const ControlFrame &frame, OutputFrame &of) override - { - memset(bufferL, 0, sizeof(bufferL)); - memset(bufferR, 0, sizeof(bufferL)); - machine::get_audio(AUX_L, bufferL, raw); - machine::get_audio(AUX_R, bufferR, raw); +void set(float *target, const float *src, float amp) +{ + for (size_t i = 0; i < FRAME_BUFFER_SIZE; i++) + target[i] = src[i] * amp; +} - _chorus.setMode(_chorus.modes_[mode]); - _chorus.process(bufferL, bufferR, machine::FRAME_BUFFER_SIZE); +void mix(float *target, const float *src, float amp) +{ + for (size_t i = 0; i < FRAME_BUFFER_SIZE; i++) + target[i] += src[i] * amp; +} - machine::get_audio(AUX_L, bufferL, 1.f - raw); - machine::get_audio(AUX_R, bufferR, 1.f - raw); +void engine::process() +{ + auto inputL = engine::inputBuffer<0>(); + auto inputR = engine::inputBuffer<1>(); + auto outputL = engine::outputBuffer<0>(); + auto outputR = engine::outputBuffer<1>(); - of.out = bufferL; - of.aux = bufferR; - } -}; + set(outputL, inputL, raw); + set(outputR, inputR, raw); -#include "plaits/dsp/oscillator/oscillator.h" + _chorus.setMode(_chorus.modes_[mode]); + _chorus.process(outputL, outputR, FRAME_BUFFER_SIZE); -template -struct Juno60Chorus_TEST : public Engine -{ - plaits::Oscillator _osc; - stmlib::DCBlocker _dc_blockerL; - stmlib::DCBlocker _dc_blockerR; - T _chorus; + mix(outputL, inputL, 1.f - raw); + mix(outputR, inputR, 1.f - raw); +} - float bufferL[FRAME_BUFFER_SIZE]; - float bufferR[FRAME_BUFFER_SIZE]; +// #include "plaits/dsp/oscillator/oscillator.h" - uint8_t mode = 1; - float raw = 1.f; +// template +// struct Juno60Chorus_TEST : public Engine +// { +// plaits::Oscillator _osc; +// stmlib::DCBlocker _dc_blockerL; +// stmlib::DCBlocker _dc_blockerR; +// T _chorus; - Juno60Chorus_TEST() : Engine() - { - _dc_blockerL.Init(0.999f); - _dc_blockerR.Init(0.999f); - _osc.Init(); - _chorus.setMode(_chorus.modes_[mode]); - } +// float bufferL[FRAME_BUFFER_SIZE]; +// float bufferR[FRAME_BUFFER_SIZE]; - void process(const ControlFrame &frame, OutputFrame &of) override - { - memset(bufferL, 0, sizeof(bufferL)); - memset(bufferR, 0, sizeof(bufferL)); - machine::get_audio(AUX_L, bufferL, raw); - machine::get_audio(AUX_R, bufferR, raw); +// uint8_t mode = 1; +// float raw = 1.f; - _osc.Render(111.11f / machine::SAMPLE_RATE, 0.5f, bufferL, machine::FRAME_BUFFER_SIZE); +// Juno60Chorus_TEST() : Engine() +// { +// _dc_blockerL.Init(0.999f); +// _dc_blockerR.Init(0.999f); +// _osc.Init(); +// _chorus.setMode(_chorus.modes_[mode]); +// } - for (size_t i = 0; i < machine::FRAME_BUFFER_SIZE; i++) - { - bufferL[i] *= 0.5f; - } +// void process(const ControlFrame &frame, OutputFrame &of) override +// { +// memset(bufferL, 0, sizeof(bufferL)); +// memset(bufferR, 0, sizeof(bufferL)); +// get_audio(AUX_L, bufferL, raw); +// get_audio(AUX_R, bufferR, raw); - _chorus.process(bufferL, bufferR, machine::FRAME_BUFFER_SIZE); +// _osc.Render(111.11f / SAMPLE_RATE, 0.5f, bufferL, FRAME_BUFFER_SIZE); - _dc_blockerL.Process(bufferL, machine::FRAME_BUFFER_SIZE); - _dc_blockerR.Process(bufferR, machine::FRAME_BUFFER_SIZE); +// for (size_t i = 0; i < FRAME_BUFFER_SIZE; i++) +// { +// bufferL[i] *= 0.5f; +// } - machine::get_audio(AUX_L, bufferL, 1.f - raw); - machine::get_audio(AUX_R, bufferR, 1.f - raw); +// _chorus.process(bufferL, bufferR, FRAME_BUFFER_SIZE); - of.out = bufferL; - of.aux = bufferR; - } -}; +// _dc_blockerL.Process(bufferL, FRAME_BUFFER_SIZE); +// _dc_blockerR.Process(bufferR, FRAME_BUFFER_SIZE); -void init_juno60_chorus() -{ - machine::add>(FX, "JU60_chorus"); -} +// get_audio(AUX_L, bufferL, 1.f - raw); +// get_audio(AUX_R, bufferR, 1.f - raw); -MACHINE_INIT(init_juno60_chorus); \ No newline at end of file +// of.out = bufferL; +// of.aux = bufferR; +// } +// }; \ No newline at end of file diff --git a/app/FX/Rev-Dattorro.bin b/app/FX/Rev-Dattorro.bin new file mode 100644 index 0000000..f8d9359 Binary files /dev/null and b/app/FX/Rev-Dattorro.bin differ diff --git a/app/FX/Rev-Dattorro.bin.h b/app/FX/Rev-Dattorro.bin.h deleted file mode 100644 index 5528ef1..0000000 --- a/app/FX/Rev-Dattorro.bin.h +++ /dev/null @@ -1,332 +0,0 @@ -const uint8_t __FX_Rev_Dattorro_bin[] FLASHMEM __attribute__((aligned(32))) = { - 0x55, 0x44, 0x4c, 0x4d, 0x19, 0x00, 0x19, 0x00, 0x04, 0x02, 0x00, 0x00, - 0x58, 0x0c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x48, 0xf7, 0x01, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x1b, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0xf4, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x50, - 0x3d, 0x0c, 0x00, 0x00, 0x11, 0x01, 0x00, 0x50, 0xe9, 0x0b, 0x00, 0x00, - 0x24, 0x01, 0x00, 0x50, 0x21, 0x0c, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x50, - 0x05, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x32, 0x01, 0x00, 0x10, 0x30, 0x00, 0x00, 0x00, - 0x46, 0x01, 0x00, 0x10, 0x30, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x10, - 0x30, 0x00, 0x00, 0x00, 0x6d, 0x01, 0x00, 0x10, 0x30, 0x00, 0x00, 0x00, - 0x80, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x97, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0xb1, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0xb6, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0xc4, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0xd5, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x58, 0x2f, 0x52, 0x65, 0x76, 0x2d, 0x44, 0x61, 0x74, 0x74, 0x6f, - 0x72, 0x72, 0x6f, 0x00, 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, - 0x72, 0x72, 0x61, 0x79, 0x00, 0x5f, 0x5f, 0x75, 0x69, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00, - 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x00, 0x73, 0x65, 0x74, 0x75, - 0x70, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x5f, - 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x00, 0x5f, 0x5f, - 0x70, 0x72, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, - 0x79, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, 0x5f, 0x5f, 0x69, 0x6e, - 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x65, 0x6e, 0x64, - 0x00, 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, - 0x79, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, 0x6d, 0x61, 0x6c, 0x6c, - 0x6f, 0x63, 0x00, 0x66, 0x72, 0x65, 0x65, 0x00, 0x5f, 0x5f, 0x75, 0x69, - 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x00, 0x61, 0x64, 0x64, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x5f, 0x69, 0x33, 0x32, 0x00, 0x61, 0x64, 0x64, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x66, 0x33, 0x32, 0x00, 0x70, 0x6f, 0x77, - 0x66, 0x00, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x6d, 0x65, 0x6d, - 0x73, 0x65, 0x74, 0x00, 0x5f, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x5f, - 0x69, 0x6e, 0x5f, 0x6c, 0x5f, 0x66, 0x70, 0x70, 0x00, 0x5f, 0x5f, 0x61, - 0x75, 0x64, 0x69, 0x6f, 0x5f, 0x69, 0x6e, 0x5f, 0x72, 0x5f, 0x66, 0x70, - 0x70, 0x00, 0x5f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6c, - 0x5f, 0x66, 0x70, 0x00, 0x5f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x5f, 0x72, 0x5f, 0x66, 0x70, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, 0x38, 0xb5, 0x08, 0x4b, - 0x59, 0xf8, 0x03, 0x30, 0x1d, 0x68, 0x55, 0xb1, 0x06, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x1c, 0x68, 0xe3, 0x88, 0xb4, 0xf9, 0x04, 0x20, 0x61, 0x88, - 0x20, 0x88, 0xa8, 0x47, 0x20, 0x72, 0x38, 0xbd, 0x08, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x10, 0xb4, 0x03, 0x4c, 0x59, 0xf8, 0x04, 0x40, - 0xa4, 0x46, 0x5d, 0xf8, 0x04, 0x4b, 0x60, 0x47, 0x10, 0x00, 0x00, 0x00, - 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x14, 0x00, 0x00, 0x00, - 0x08, 0xb5, 0xdf, 0xed, 0x09, 0x7a, 0xdf, 0xed, 0x09, 0x0a, 0x0a, 0x4b, - 0x30, 0xee, 0x67, 0x0a, 0x59, 0xf8, 0x03, 0x30, 0x60, 0xee, 0x20, 0x0a, - 0xb0, 0xee, 0x00, 0x0a, 0x98, 0x47, 0xdf, 0xed, 0x04, 0x7a, 0x20, 0xee, - 0x27, 0x0a, 0x08, 0xbd, 0x00, 0x00, 0x8a, 0x42, 0xab, 0xaa, 0xaa, 0x3d, - 0x00, 0x00, 0xdc, 0x43, 0x18, 0x00, 0x00, 0x00, 0x03, 0x4b, 0x02, 0x49, - 0x59, 0xf8, 0x03, 0x30, 0x01, 0x20, 0x18, 0x47, 0x44, 0xf7, 0x01, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x04, 0x00, 0x00, 0x00, 0x70, 0x47, 0x00, 0xbf, 0x00, 0x68, 0x70, 0x47, - 0x02, 0x20, 0x70, 0x47, 0x02, 0x20, 0x70, 0x47, 0x70, 0x47, 0x00, 0xbf, - 0x4f, 0xf0, 0x7c, 0x53, 0x00, 0xf5, 0x80, 0x52, 0x83, 0x60, 0xc0, 0xf8, - 0xa8, 0x30, 0x00, 0xf5, 0xfb, 0x31, 0x02, 0xf2, 0xd4, 0x6c, 0x00, 0xf5, - 0xb7, 0x50, 0x02, 0xf2, 0xec, 0x62, 0xcc, 0xf8, 0x00, 0x30, 0x03, 0x60, - 0x13, 0x60, 0xc1, 0xf8, 0x38, 0x31, 0x70, 0x47, 0x2d, 0xe9, 0xf0, 0x45, - 0x6d, 0x4b, 0x00, 0x25, 0x00, 0x26, 0x04, 0x46, 0x05, 0x61, 0x45, 0x61, - 0x86, 0x61, 0x83, 0xb0, 0x59, 0xf8, 0x03, 0x70, 0x31, 0x46, 0x80, 0x22, - 0x1c, 0x30, 0xb8, 0x47, 0xc4, 0xf8, 0x9c, 0x50, 0xc4, 0xf8, 0xa0, 0x50, - 0xc4, 0xf8, 0xa4, 0x50, 0xc4, 0xf8, 0xac, 0x50, 0xc4, 0xf8, 0xb0, 0x50, - 0x31, 0x46, 0x4f, 0xf4, 0x80, 0x62, 0x04, 0xf1, 0xb4, 0x00, 0xb8, 0x47, - 0x04, 0xf2, 0xb4, 0x43, 0x31, 0x46, 0x1d, 0x60, 0x04, 0xf5, 0x97, 0x63, - 0x4f, 0xf4, 0x00, 0x72, 0x1d, 0x60, 0x04, 0xf2, 0xbc, 0x40, 0xb8, 0x47, - 0x04, 0xf2, 0xbc, 0x63, 0x4f, 0xf4, 0x00, 0x62, 0x1d, 0x60, 0x04, 0xf5, - 0xd8, 0x63, 0x31, 0x46, 0x1d, 0x60, 0x04, 0xf2, 0xc4, 0x60, 0x01, 0x92, - 0xb8, 0x47, 0x04, 0xf6, 0xc4, 0x63, 0x01, 0x9a, 0x1d, 0x60, 0x04, 0xf6, - 0xc8, 0x63, 0x31, 0x46, 0x1d, 0x60, 0x04, 0xf6, 0xcc, 0x60, 0xb8, 0x47, - 0x04, 0xf5, 0x80, 0x53, 0x03, 0xf2, 0xcc, 0x62, 0x4f, 0xf4, 0x80, 0x5a, - 0x15, 0x60, 0x03, 0xf5, 0xda, 0x62, 0x04, 0xf5, 0xb7, 0x50, 0x15, 0x60, - 0x03, 0xf5, 0xdb, 0x62, 0x31, 0x46, 0x15, 0x60, 0x03, 0xf2, 0xdc, 0x62, - 0x18, 0x30, 0x15, 0x60, 0x03, 0xf2, 0xe4, 0x62, 0x4f, 0xf4, 0x00, 0x48, - 0x15, 0x60, 0x03, 0xf5, 0xdd, 0x62, 0x15, 0x60, 0x03, 0xf5, 0xde, 0x62, - 0x03, 0xf2, 0xf4, 0x63, 0x15, 0x60, 0x1d, 0x60, 0x52, 0x46, 0xb8, 0x47, - 0x04, 0xf5, 0x00, 0x53, 0x03, 0xf5, 0xdf, 0x62, 0x03, 0xf2, 0xfc, 0x63, - 0x15, 0x60, 0x31, 0x46, 0x1d, 0x60, 0x42, 0x46, 0x04, 0xf5, 0x1c, 0x50, - 0xb8, 0x47, 0x04, 0xf5, 0x27, 0x43, 0x18, 0x46, 0x4f, 0xf4, 0x80, 0x42, - 0x1d, 0x60, 0x5d, 0x60, 0x31, 0x46, 0x08, 0x30, 0x01, 0x92, 0xb8, 0x47, - 0x04, 0xf5, 0x60, 0x43, 0x03, 0xf5, 0xe1, 0x61, 0x03, 0xf2, 0x0c, 0x73, - 0x04, 0xf5, 0x67, 0x40, 0x0d, 0x60, 0x01, 0x9a, 0x1d, 0x60, 0x31, 0x46, - 0x10, 0x30, 0xb8, 0x47, 0x04, 0xf5, 0x90, 0x33, 0x03, 0xf5, 0xe2, 0x61, - 0x03, 0xf2, 0x14, 0x73, 0x04, 0xf5, 0x93, 0x30, 0x0d, 0x60, 0x52, 0x46, - 0x1d, 0x60, 0x31, 0x46, 0x00, 0xf5, 0x8c, 0x70, 0xb8, 0x47, 0x04, 0xf5, - 0x98, 0x33, 0x03, 0xf5, 0xe3, 0x61, 0x03, 0xf2, 0x1c, 0x73, 0x04, 0xf5, - 0x9b, 0x30, 0x0d, 0x60, 0x42, 0x46, 0x1d, 0x60, 0x31, 0x46, 0x00, 0xf5, - 0x90, 0x70, 0xb8, 0x47, 0x04, 0xf5, 0xd8, 0x33, 0x03, 0xf5, 0xe4, 0x62, - 0x03, 0xf2, 0x24, 0x73, 0x04, 0xf5, 0xdb, 0x30, 0x15, 0x60, 0x31, 0x46, - 0x1d, 0x60, 0x4f, 0xf4, 0x00, 0x52, 0x00, 0xf5, 0x94, 0x70, 0x01, 0x92, - 0xb8, 0x47, 0x04, 0xf5, 0xe8, 0x33, 0x03, 0xf5, 0xe5, 0x60, 0x03, 0xf2, - 0x2c, 0x73, 0x05, 0x60, 0x04, 0xf5, 0xeb, 0x30, 0x01, 0x9a, 0x1d, 0x60, - 0x31, 0x46, 0x00, 0xf5, 0x98, 0x70, 0xb8, 0x47, 0x04, 0xf5, 0xf8, 0x34, - 0x04, 0xf5, 0xe6, 0x61, 0x04, 0xf2, 0x34, 0x72, 0x04, 0xf2, 0x3c, 0x73, - 0x04, 0xf5, 0xe8, 0x64, 0x0d, 0x60, 0x15, 0x60, 0x1d, 0x60, 0x25, 0x60, - 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x85, 0x00, 0xbf, 0x20, 0x00, 0x00, 0x00, - 0xdf, 0xed, 0x0b, 0x6a, 0x9f, 0xed, 0x0b, 0x6a, 0x01, 0x60, 0x07, 0xee, - 0x90, 0x1a, 0xb7, 0xee, 0x00, 0x7a, 0xf8, 0xee, 0xe7, 0x7a, 0xc7, 0xfe, - 0x87, 0x7a, 0xc7, 0xfe, 0xe6, 0x7a, 0xc6, 0xee, 0x27, 0x6a, 0x37, 0xee, - 0x66, 0x7a, 0xc0, 0xed, 0x01, 0x6a, 0x80, 0xed, 0x03, 0x7a, 0x70, 0x47, - 0x00, 0x80, 0x3b, 0x48, 0x66, 0x66, 0x30, 0x42, 0xdf, 0xed, 0x16, 0x6a, - 0x9f, 0xed, 0x16, 0x6a, 0x01, 0x60, 0x07, 0xee, 0x90, 0x1a, 0xb7, 0xee, - 0x00, 0x7a, 0xf8, 0xee, 0xe7, 0x7a, 0xc7, 0xfe, 0x87, 0x7a, 0xc7, 0xfe, - 0xe6, 0x7a, 0xc6, 0xee, 0x27, 0x6a, 0x00, 0xf5, 0x80, 0x5c, 0x0c, 0xf2, - 0xd4, 0x61, 0x4f, 0xf0, 0x7c, 0x52, 0x82, 0x60, 0xc0, 0xf8, 0xa8, 0x20, - 0x0c, 0xf2, 0xec, 0x6c, 0x00, 0xf5, 0xfb, 0x33, 0x37, 0xee, 0x66, 0x7a, - 0xc0, 0xed, 0x01, 0x6a, 0x80, 0xed, 0x03, 0x7a, 0x0a, 0x60, 0x00, 0xf5, - 0xb7, 0x51, 0x0a, 0x60, 0xcc, 0xf8, 0x00, 0x20, 0xc3, 0xf8, 0x38, 0x21, - 0xff, 0xf7, 0xd6, 0xbe, 0x00, 0x80, 0x3b, 0x48, 0x66, 0x66, 0x30, 0x42, - 0xdf, 0xed, 0x16, 0x6a, 0x9f, 0xed, 0x16, 0x6a, 0x01, 0x60, 0x07, 0xee, - 0x90, 0x1a, 0xb7, 0xee, 0x00, 0x7a, 0xf8, 0xee, 0xe7, 0x7a, 0xc7, 0xfe, - 0x87, 0x7a, 0xc7, 0xfe, 0xe6, 0x7a, 0xc6, 0xee, 0x27, 0x6a, 0x00, 0xf5, - 0x80, 0x5c, 0x0c, 0xf2, 0xd4, 0x61, 0x4f, 0xf0, 0x7c, 0x52, 0x82, 0x60, - 0xc0, 0xf8, 0xa8, 0x20, 0x0c, 0xf2, 0xec, 0x6c, 0x00, 0xf5, 0xfb, 0x33, - 0x37, 0xee, 0x66, 0x7a, 0xc0, 0xed, 0x01, 0x6a, 0x80, 0xed, 0x03, 0x7a, - 0x0a, 0x60, 0x00, 0xf5, 0xb7, 0x51, 0x0a, 0x60, 0xcc, 0xf8, 0x00, 0x20, - 0xc3, 0xf8, 0x38, 0x21, 0xff, 0xf7, 0xa4, 0xbe, 0x00, 0x80, 0x3b, 0x48, - 0x66, 0x66, 0x30, 0x42, 0xf0, 0xb5, 0x00, 0xf5, 0xfb, 0x33, 0x4f, 0xf0, - 0x7c, 0x56, 0x30, 0x4a, 0x9f, 0xed, 0x2c, 0x0a, 0xc3, 0xf8, 0x38, 0x61, - 0x83, 0xb0, 0x03, 0xf5, 0x9c, 0x71, 0x2d, 0x4b, 0x04, 0x46, 0x59, 0xf8, - 0x02, 0x00, 0x8d, 0xed, 0x00, 0x0a, 0x59, 0xf8, 0x03, 0x50, 0x04, 0xf5, - 0x80, 0x57, 0xf7, 0xee, 0x00, 0x0a, 0xa8, 0x47, 0x07, 0xf2, 0xd4, 0x62, - 0x26, 0x4b, 0x16, 0x60, 0x04, 0xf5, 0xb6, 0x51, 0x59, 0xf8, 0x03, 0x00, - 0x9d, 0xed, 0x00, 0x0a, 0xf7, 0xee, 0x00, 0x0a, 0x14, 0x31, 0xa8, 0x47, - 0x04, 0xf5, 0xb7, 0x51, 0x20, 0x4b, 0x0e, 0x60, 0x59, 0xf8, 0x03, 0x00, - 0x9d, 0xed, 0x00, 0x0a, 0xf7, 0xee, 0x00, 0x0a, 0xa8, 0x47, 0x21, 0x46, - 0x1c, 0x4b, 0x41, 0xf8, 0x08, 0x6f, 0x9d, 0xed, 0x00, 0x0a, 0x59, 0xf8, - 0x03, 0x00, 0xf7, 0xee, 0x00, 0x0a, 0xa8, 0x47, 0x07, 0xf2, 0xec, 0x67, - 0xdf, 0xed, 0x10, 0x0a, 0x16, 0x4b, 0xcd, 0xed, 0x01, 0x0a, 0x9f, 0xed, - 0x0f, 0x0a, 0x3e, 0x60, 0x04, 0xf5, 0xb7, 0x51, 0x59, 0xf8, 0x03, 0x00, - 0x8d, 0xed, 0x00, 0x0a, 0x0c, 0x31, 0xa8, 0x47, 0x21, 0x46, 0x10, 0x4b, - 0x41, 0xf8, 0xa8, 0x6f, 0xdd, 0xed, 0x01, 0x0a, 0x59, 0xf8, 0x03, 0x00, - 0x9d, 0xed, 0x00, 0x0a, 0x2b, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x40, - 0x18, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x70, 0x7d, 0x3f, - 0x0a, 0xd7, 0x23, 0x3c, 0x24, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4d, - 0x00, 0xf5, 0x80, 0x5c, 0x2d, 0xed, 0x10, 0x8b, 0xd2, 0xe9, 0x00, 0x54, - 0xd0, 0xed, 0x01, 0xda, 0xd0, 0xed, 0x02, 0x7a, 0x90, 0xed, 0x2a, 0xea, - 0x0c, 0xf2, 0xd4, 0x62, 0xd2, 0xed, 0x00, 0xea, 0x00, 0xf5, 0xb7, 0x52, - 0x6d, 0xee, 0xa7, 0x7a, 0x92, 0xed, 0x00, 0xfa, 0x00, 0xf5, 0xf8, 0x3e, - 0x0c, 0xf2, 0xec, 0x62, 0xd2, 0xed, 0x00, 0xfa, 0x98, 0xb0, 0x0e, 0xf5, - 0xe7, 0x62, 0xcd, 0xed, 0x11, 0x7a, 0xd2, 0xed, 0x00, 0x7a, 0x00, 0x29, - 0x2d, 0xee, 0x8e, 0xea, 0x6d, 0xee, 0xae, 0xea, 0x2d, 0xee, 0x8f, 0xfa, - 0x6d, 0xee, 0xaf, 0xfa, 0xd3, 0xe9, 0x00, 0x23, 0x6d, 0xee, 0xa7, 0xda, - 0x40, 0xf3, 0x7b, 0x82, 0xcd, 0xe9, 0x00, 0x32, 0x83, 0x69, 0xd0, 0xed, - 0x05, 0x7a, 0xd0, 0xed, 0x29, 0xba, 0xd0, 0xed, 0x2c, 0x6a, 0xca, 0x18, - 0x10, 0x92, 0x00, 0xf5, 0x97, 0x62, 0xd2, 0xed, 0x00, 0x8a, 0x14, 0x92, - 0x00, 0xf5, 0xd8, 0x62, 0xd2, 0xed, 0x00, 0x5a, 0x16, 0x92, 0x00, 0xf6, - 0xc8, 0x62, 0x92, 0xed, 0x00, 0x7a, 0x15, 0x92, 0x0c, 0xf5, 0xda, 0x62, - 0x92, 0xed, 0x00, 0x6a, 0x0c, 0xf2, 0xdc, 0x62, 0x92, 0xed, 0x00, 0x0a, - 0x0c, 0xf5, 0xdd, 0x62, 0xcd, 0xe9, 0x02, 0x45, 0x92, 0xed, 0x00, 0x9a, - 0x00, 0xf5, 0x00, 0x54, 0x0c, 0xf2, 0xf4, 0x62, 0x92, 0xed, 0x00, 0x5a, - 0x17, 0x94, 0x04, 0xf2, 0xfc, 0x62, 0xd2, 0xed, 0x00, 0x1a, 0x00, 0xf5, - 0x20, 0x46, 0x0e, 0xf2, 0x34, 0x72, 0x00, 0xf5, 0x60, 0x45, 0x92, 0xed, - 0x00, 0x2a, 0x12, 0x95, 0x06, 0xf2, 0x04, 0x72, 0xd2, 0xed, 0x00, 0xaa, - 0x13, 0x96, 0x05, 0xf2, 0x0c, 0x72, 0x00, 0xf5, 0x98, 0x3b, 0xd2, 0xed, - 0x00, 0x2a, 0x00, 0xf5, 0x90, 0x3a, 0x0b, 0xf2, 0x1c, 0x72, 0x92, 0xed, - 0x00, 0x3a, 0x00, 0xf5, 0xd8, 0x38, 0x0a, 0xf2, 0x14, 0x72, 0xd2, 0xed, - 0x00, 0x3a, 0x00, 0xf5, 0xe8, 0x37, 0x08, 0xf2, 0x24, 0x72, 0x92, 0xed, - 0x00, 0xaa, 0x0e, 0x97, 0x07, 0xf2, 0x2c, 0x72, 0x92, 0xed, 0x00, 0x4a, - 0x0e, 0xf5, 0xe8, 0x62, 0xd2, 0xed, 0x00, 0x9a, 0x00, 0xf2, 0xb4, 0x42, - 0x0a, 0x92, 0x00, 0xf2, 0xbc, 0x62, 0x0d, 0x92, 0x00, 0xf6, 0xc4, 0x62, - 0x0b, 0x92, 0x00, 0xf5, 0x27, 0x42, 0x0c, 0x92, 0x0c, 0xf2, 0xcc, 0x62, - 0x04, 0x92, 0x0c, 0xf5, 0xdb, 0x62, 0x05, 0x92, 0x0c, 0xf2, 0xe4, 0x62, - 0x06, 0x92, 0x0c, 0xf5, 0xde, 0x62, 0x07, 0x92, 0x04, 0xf5, 0xdf, 0x62, - 0x08, 0x92, 0x05, 0xf5, 0xe1, 0x62, 0xb7, 0xee, 0x00, 0xba, 0x09, 0x92, - 0xf0, 0xee, 0x40, 0x4a, 0x90, 0xed, 0x03, 0x1a, 0x9d, 0xed, 0x11, 0x0a, - 0x03, 0x9a, 0x0a, 0x99, 0x0d, 0x9d, 0x0b, 0x9e, 0x04, 0x9f, 0xa1, 0xee, - 0x27, 0x0a, 0xf0, 0xee, 0x4e, 0x7a, 0x80, 0xed, 0x04, 0x0a, 0xe1, 0xee, - 0x26, 0x7a, 0xf0, 0xee, 0x6f, 0x6a, 0xe1, 0xee, 0x05, 0x6a, 0xb2, 0xec, - 0x01, 0x5a, 0x03, 0x92, 0x02, 0x9a, 0xf2, 0xec, 0x01, 0xca, 0x35, 0xee, - 0x2c, 0xda, 0x02, 0x92, 0x03, 0xf0, 0x1f, 0x02, 0x00, 0xeb, 0x82, 0x02, - 0x82, 0xed, 0x07, 0xda, 0xa3, 0xf1, 0x18, 0x02, 0xf0, 0xee, 0x6e, 0x0a, - 0xb0, 0xee, 0x4f, 0x8a, 0x02, 0xf0, 0x1f, 0x02, 0xe1, 0xee, 0x24, 0x0a, - 0x00, 0xeb, 0x82, 0x02, 0xa1, 0xee, 0x09, 0x8a, 0xf6, 0xee, 0x00, 0x4a, - 0xb0, 0xee, 0x6d, 0x9a, 0xa1, 0xee, 0x29, 0x9a, 0x60, 0xee, 0x24, 0x4a, - 0xd2, 0xed, 0x07, 0x9a, 0xc0, 0xed, 0x2b, 0x7a, 0x3b, 0xee, 0x40, 0x0a, - 0x64, 0xee, 0xa9, 0x4a, 0xda, 0xb2, 0xe0, 0xee, 0x2b, 0x4a, 0x00, 0xeb, - 0x82, 0x02, 0xb0, 0xee, 0x68, 0xca, 0xf0, 0xee, 0x64, 0xba, 0xe7, 0xee, - 0xe8, 0xba, 0xc0, 0xed, 0x27, 0x4a, 0xa7, 0xee, 0xe5, 0xca, 0xc2, 0xed, - 0x2d, 0xba, 0xa3, 0xf1, 0x8e, 0x02, 0xd2, 0xb2, 0x00, 0xeb, 0x82, 0x02, - 0xa7, 0xee, 0xab, 0xca, 0xd2, 0xf8, 0xb4, 0x20, 0x0a, 0x60, 0x03, 0xf0, - 0x7f, 0x02, 0x02, 0xf5, 0x97, 0x72, 0x00, 0xeb, 0x82, 0x02, 0x82, 0xed, - 0x01, 0xca, 0xa3, 0xf1, 0x6b, 0x02, 0xe7, 0xee, 0xc7, 0x5a, 0x02, 0xf0, - 0x7f, 0x02, 0x02, 0xf5, 0x97, 0x72, 0x00, 0xeb, 0x82, 0x02, 0xe7, 0xee, - 0x8c, 0x5a, 0x52, 0x68, 0x2a, 0x60, 0xa7, 0xee, 0xc6, 0x7a, 0x6f, 0xf4, - 0xbd, 0x72, 0x9a, 0x18, 0xc3, 0xf3, 0x08, 0x01, 0xc2, 0xf3, 0x08, 0x02, - 0xa7, 0xee, 0xa5, 0x7a, 0x00, 0xeb, 0x81, 0x01, 0x02, 0xf5, 0xd8, 0x72, - 0x01, 0xf2, 0xc4, 0x64, 0x00, 0xeb, 0x82, 0x02, 0xc4, 0xed, 0x00, 0x5a, - 0x52, 0x68, 0x32, 0x60, 0x01, 0xf6, 0xcc, 0x61, 0x81, 0xed, 0x00, 0x7a, - 0x6f, 0xf4, 0x8a, 0x71, 0x5a, 0x18, 0xc2, 0xf3, 0x08, 0x02, 0x02, 0xf2, - 0xb2, 0x32, 0x00, 0xeb, 0x82, 0x02, 0x06, 0x99, 0x52, 0x68, 0x3a, 0x60, - 0x05, 0x9a, 0xc2, 0xed, 0x00, 0x0a, 0x81, 0xed, 0x00, 0x8a, 0x07, 0x9d, - 0x08, 0x9e, 0xc5, 0xed, 0x00, 0x6a, 0xa6, 0xee, 0xa1, 0x2a, 0xa3, 0xf5, - 0x63, 0x72, 0xc3, 0xf3, 0x09, 0x05, 0xc2, 0xf3, 0x09, 0x02, 0x00, 0xeb, - 0x85, 0x05, 0x02, 0xf2, 0xbe, 0x52, 0x05, 0xf5, 0xb7, 0x51, 0x00, 0xeb, - 0x82, 0x02, 0x81, 0xed, 0x06, 0x2a, 0x12, 0x68, 0x32, 0x60, 0xe6, 0xee, - 0xc2, 0x1a, 0xa3, 0xf5, 0x83, 0x52, 0xc3, 0xf3, 0x0c, 0x04, 0x19, 0x3a, - 0x00, 0xeb, 0x84, 0x04, 0xc2, 0xf3, 0x0c, 0x02, 0x04, 0xf5, 0x1c, 0x51, - 0x02, 0xf5, 0x1c, 0x62, 0xc1, 0xed, 0x00, 0x1a, 0x00, 0xeb, 0x82, 0x02, - 0xd2, 0xed, 0x00, 0x5a, 0x0c, 0x9a, 0x3b, 0xee, 0x48, 0x0a, 0x62, 0xee, - 0xe6, 0x9a, 0x60, 0xee, 0x25, 0x5a, 0xc3, 0xf3, 0x0b, 0x01, 0xe8, 0xee, - 0x2a, 0x5a, 0x00, 0xeb, 0x81, 0x01, 0x01, 0xf5, 0x27, 0x46, 0x01, 0xf5, - 0x67, 0x41, 0xe0, 0xee, 0xa5, 0x9a, 0x05, 0xf5, 0x93, 0x35, 0x04, 0xf5, - 0x9b, 0x34, 0xc2, 0xed, 0x00, 0x5a, 0xa3, 0xf5, 0x26, 0x62, 0xc2, 0xf3, - 0x0b, 0x02, 0x00, 0xeb, 0x82, 0x02, 0xc6, 0xed, 0x02, 0x9a, 0xe6, 0xee, - 0xa9, 0x2a, 0x02, 0xf5, 0x27, 0x46, 0x02, 0xf5, 0x67, 0x42, 0xb7, 0x68, - 0x09, 0x9e, 0x37, 0x60, 0xc1, 0xed, 0x04, 0x2a, 0xd2, 0xed, 0x04, 0x2a, - 0xf0, 0xee, 0x46, 0x5a, 0xe0, 0xee, 0xa2, 0x5a, 0xa3, 0xf5, 0x28, 0x71, - 0xc1, 0xf3, 0x09, 0x01, 0xe6, 0xee, 0x83, 0x3a, 0xa3, 0xf5, 0x8b, 0x52, - 0x01, 0xf5, 0x93, 0x41, 0xe7, 0xee, 0x87, 0x5a, 0x46, 0x31, 0x05, 0x3a, - 0xa6, 0xee, 0xe3, 0x3a, 0x0a, 0xf5, 0xe2, 0x67, 0x00, 0xeb, 0x81, 0x01, - 0x3b, 0xee, 0x49, 0x1a, 0xc2, 0xf3, 0x0c, 0x02, 0xc7, 0xed, 0x00, 0x5a, - 0x0b, 0xf5, 0xe3, 0x66, 0xc5, 0xed, 0x46, 0x3a, 0x02, 0xf5, 0x9b, 0x42, - 0x09, 0x68, 0x31, 0x60, 0x25, 0xee, 0x01, 0x5a, 0x48, 0x32, 0x84, 0xed, - 0x48, 0x3a, 0x00, 0xeb, 0x82, 0x02, 0xa5, 0xee, 0x89, 0x5a, 0xc3, 0xf3, - 0x0a, 0x01, 0x00, 0xeb, 0x81, 0x01, 0xd2, 0xed, 0x00, 0x5a, 0x60, 0xee, - 0x25, 0x5a, 0x64, 0xee, 0x66, 0x4a, 0xe8, 0xee, 0x0a, 0x5a, 0xa3, 0xf5, - 0xe1, 0x62, 0xc2, 0xf3, 0x0a, 0x02, 0x01, 0xf5, 0xdb, 0x34, 0xe0, 0xee, - 0xa5, 0x4a, 0x08, 0xf5, 0xe4, 0x65, 0x00, 0xeb, 0x82, 0x02, 0xc5, 0xed, - 0x00, 0x5a, 0xa6, 0xee, 0xa4, 0x4a, 0x01, 0xf5, 0xeb, 0x31, 0x01, 0x33, - 0xc4, 0xed, 0x4a, 0x4a, 0x02, 0xf5, 0xdb, 0x34, 0xd4, 0xed, 0x4a, 0x6a, - 0x0e, 0x9c, 0x04, 0xf5, 0xe5, 0x64, 0xc4, 0xed, 0x00, 0x6a, 0x02, 0xf5, - 0xeb, 0x32, 0x81, 0xed, 0x4c, 0x4a, 0xd2, 0xed, 0x4c, 0x6a, 0x0f, 0x94, - 0xa0, 0xee, 0xa6, 0x6a, 0x0e, 0xf5, 0xe6, 0x61, 0x0e, 0xf2, 0x3c, 0x72, - 0xa7, 0xee, 0x87, 0x6a, 0x81, 0xed, 0x00, 0x6a, 0x82, 0xed, 0x00, 0x9a, - 0x01, 0x9c, 0xa4, 0xec, 0x01, 0x5a, 0x91, 0xed, 0x00, 0x7a, 0xd2, 0xed, - 0x00, 0x7a, 0x01, 0x94, 0x67, 0xee, 0x87, 0x7a, 0x00, 0x9c, 0xec, 0xee, - 0x81, 0x7a, 0xe4, 0xec, 0x01, 0x7a, 0x00, 0x94, 0x0a, 0x9c, 0xd0, 0xed, - 0x28, 0xba, 0xd4, 0xed, 0x00, 0x8a, 0x0d, 0x9c, 0x90, 0xed, 0x27, 0x6a, - 0xd4, 0xed, 0x00, 0x5a, 0x0b, 0x9c, 0xd0, 0xed, 0x04, 0x7a, 0x94, 0xed, - 0x00, 0x7a, 0xd0, 0xed, 0x2b, 0x6a, 0x14, 0x9c, 0x80, 0xed, 0x28, 0x6a, - 0xc0, 0xed, 0x05, 0x7a, 0xc0, 0xed, 0x29, 0xba, 0xc0, 0xed, 0x2c, 0x6a, - 0xc4, 0xed, 0x00, 0x8a, 0x16, 0x9c, 0xd7, 0xed, 0x00, 0x3a, 0xc4, 0xed, - 0x00, 0x5a, 0x15, 0x9c, 0x96, 0xed, 0x00, 0x3a, 0x84, 0xed, 0x00, 0x7a, - 0x0f, 0x9c, 0x95, 0xed, 0x00, 0xaa, 0x94, 0xed, 0x00, 0x4a, 0xd2, 0xed, - 0x00, 0x9a, 0x05, 0x9a, 0x08, 0x9e, 0x04, 0x9f, 0xd2, 0xed, 0x00, 0x4a, - 0x0c, 0x9a, 0x91, 0xed, 0x00, 0x2a, 0xd6, 0xed, 0x00, 0x1a, 0x97, 0xed, - 0x00, 0x6a, 0x06, 0x99, 0x07, 0x9d, 0x09, 0x9e, 0xd2, 0xed, 0x00, 0xaa, - 0x91, 0xed, 0x00, 0x9a, 0x95, 0xed, 0x00, 0x5a, 0xd6, 0xed, 0x00, 0x2a, - 0x0e, 0x9c, 0x0c, 0xf5, 0xda, 0x62, 0x82, 0xed, 0x00, 0x6a, 0x0c, 0xf2, - 0xdc, 0x62, 0xc2, 0xed, 0x00, 0x4a, 0x0c, 0xf5, 0xdd, 0x62, 0x82, 0xed, - 0x00, 0x9a, 0x0c, 0xf2, 0xf4, 0x62, 0x82, 0xed, 0x00, 0x5a, 0x17, 0x9a, - 0x02, 0xf2, 0xfc, 0x62, 0xc2, 0xed, 0x00, 0x1a, 0x13, 0x9a, 0x02, 0xf2, - 0x04, 0x72, 0xc2, 0xed, 0x00, 0xaa, 0x12, 0x9a, 0x02, 0xf2, 0x0c, 0x72, - 0xc2, 0xed, 0x00, 0x2a, 0x0a, 0xf2, 0x14, 0x72, 0xc2, 0xed, 0x00, 0x3a, - 0x0b, 0xf2, 0x1c, 0x72, 0x82, 0xed, 0x00, 0x3a, 0x08, 0xf2, 0x24, 0x72, - 0x82, 0xed, 0x00, 0xaa, 0x04, 0xf2, 0x2c, 0x72, 0x82, 0xed, 0x00, 0x4a, - 0x0e, 0xf2, 0x34, 0x72, 0x82, 0xed, 0x00, 0x2a, 0x0e, 0xf5, 0xe8, 0x62, - 0xc2, 0xed, 0x00, 0x9a, 0x10, 0x9a, 0x9a, 0x42, 0x7f, 0xf4, 0x0a, 0xae, - 0x82, 0x61, 0x18, 0xb0, 0xbd, 0xec, 0x10, 0x8b, 0xbd, 0xe8, 0xf0, 0x8d, - 0x06, 0x49, 0x07, 0x4a, 0x59, 0xf8, 0x01, 0x00, 0x9f, 0xed, 0x03, 0x0a, - 0x59, 0xf8, 0x02, 0x20, 0xf7, 0xee, 0x00, 0x0a, 0x19, 0x46, 0x10, 0x47, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x70, 0x47, 0x00, 0xbf, 0x10, 0x46, 0x19, 0x46, 0x4b, 0xb1, 0x9f, 0xed, - 0x05, 0x0a, 0x05, 0x4a, 0x83, 0xed, 0x00, 0x0a, 0x59, 0xf8, 0x02, 0x20, - 0xf7, 0xee, 0x00, 0x0a, 0x10, 0x47, 0x70, 0x47, 0x00, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x82, 0xb0, 0x01, 0x93, 0x73, 0xb1, 0x19, 0x46, - 0x07, 0x4b, 0x81, 0xed, 0x00, 0x0a, 0xf0, 0xee, 0x60, 0x7a, 0x59, 0xf8, - 0x03, 0x30, 0xf0, 0xee, 0x41, 0x0a, 0x10, 0x46, 0xb0, 0xee, 0x67, 0x0a, - 0x02, 0xb0, 0x18, 0x47, 0x02, 0xb0, 0x70, 0x47, 0x14, 0x00, 0x00, 0x00, - 0xf0, 0xee, 0x60, 0x7a, 0x10, 0x46, 0xf0, 0xee, 0x41, 0x0a, 0x19, 0x46, - 0x3b, 0xb1, 0x04, 0x4a, 0x83, 0xed, 0x00, 0x0a, 0x59, 0xf8, 0x02, 0x20, - 0xb0, 0xee, 0x67, 0x0a, 0x10, 0x47, 0x70, 0x47, 0x14, 0x00, 0x00, 0x00, - 0x10, 0xb5, 0x16, 0x4b, 0x14, 0x49, 0x59, 0xf8, 0x03, 0x40, 0xdf, 0xf8, - 0x54, 0xc0, 0x61, 0x60, 0x04, 0xf5, 0x80, 0x52, 0x4b, 0xf6, 0x80, 0x30, - 0x20, 0x60, 0x02, 0xf2, 0xd4, 0x60, 0x02, 0xf2, 0xec, 0x62, 0x4f, 0xf0, - 0x7c, 0x53, 0x13, 0x60, 0x04, 0xf5, 0xfb, 0x31, 0x04, 0xf5, 0xb7, 0x52, - 0x82, 0xb0, 0x03, 0x60, 0x20, 0x46, 0xc1, 0xf8, 0x38, 0x31, 0xc4, 0xf8, - 0x0c, 0xc0, 0xa3, 0x60, 0xc4, 0xf8, 0xa8, 0x30, 0x13, 0x60, 0xff, 0xf7, - 0x05, 0xfb, 0x01, 0xa9, 0x20, 0x46, 0xff, 0xf7, 0x61, 0xfc, 0x02, 0xb0, - 0x10, 0xbd, 0x00, 0xbf, 0x44, 0xd8, 0x70, 0x3a, 0x40, 0x00, 0x00, 0x00, - 0xca, 0xc3, 0x7f, 0x3f, 0x10, 0xb5, 0x10, 0x4a, 0x10, 0x4b, 0x59, 0xf8, - 0x02, 0x20, 0x10, 0x48, 0x11, 0x68, 0x10, 0x4a, 0x09, 0x68, 0x84, 0xb0, - 0x00, 0x91, 0x59, 0xf8, 0x03, 0x30, 0x0e, 0x49, 0x1c, 0x68, 0x24, 0x68, - 0x01, 0x94, 0x59, 0xf8, 0x00, 0x00, 0x00, 0x68, 0x02, 0x90, 0x59, 0xf8, - 0x02, 0x00, 0x00, 0x68, 0x03, 0x90, 0x59, 0xf8, 0x01, 0x00, 0x02, 0xab, - 0x6a, 0x46, 0x18, 0x21, 0xff, 0xf7, 0xac, 0xfc, 0x04, 0xb0, 0x10, 0xbd, - 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x10, 0x4a, - 0x10, 0x4b, 0x59, 0xf8, 0x02, 0x60, 0x59, 0xf8, 0x03, 0x50, 0x76, 0x1b, - 0xb6, 0x10, 0x06, 0xd0, 0x00, 0x24, 0x55, 0xf8, 0x04, 0x3b, 0x01, 0x34, - 0x98, 0x47, 0xa6, 0x42, 0xf9, 0xd1, 0x0a, 0x4a, 0x0a, 0x4b, 0x59, 0xf8, - 0x02, 0x60, 0x59, 0xf8, 0x03, 0x50, 0x76, 0x1b, 0xb6, 0x10, 0x06, 0xd0, - 0x00, 0x24, 0x55, 0xf8, 0x04, 0x3b, 0x01, 0x34, 0x98, 0x47, 0xa6, 0x42, - 0xf9, 0xd1, 0x70, 0xbd, 0x54, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, - 0x5c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0x00, 0x42, - 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, - 0xff, 0xf7, 0x26, 0xfa, 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, - 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, - 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0x60, 0xff, 0xbd, 0xe8, 0x00, 0x82, - 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, - 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0x84, 0xff, - 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, - 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, - 0xff, 0xf7, 0xa2, 0xff, 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, - 0x44, 0x2f, 0x57, 0x00, 0x44, 0x65, 0x63, 0x61, 0x79, 0x00, 0x00, 0x00, - 0x44, 0x61, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x42, 0x57, 0x00, 0x00, - 0x44, 0x44, 0x69, 0x66, 0x66, 0x00, 0x00, 0x00, 0x49, 0x44, 0x69, 0x66, - 0x66, 0x00, 0x00, 0x00, 0x54, 0x52, 0x49, 0x47, 0x00, 0x00, 0x00, 0x00 -}; -unsigned int __FX_Rev_Dattorro_bin_len = 3948; diff --git a/app/FX/Reverb-HP-LP.bin b/app/FX/Reverb-HP-LP.bin new file mode 100644 index 0000000..89904d8 Binary files /dev/null and b/app/FX/Reverb-HP-LP.bin differ diff --git a/app/FX/Reverb-HP-LP.bin.h b/app/FX/Reverb-HP-LP.bin.h deleted file mode 100644 index 6aeee5c..0000000 --- a/app/FX/Reverb-HP-LP.bin.h +++ /dev/null @@ -1,432 +0,0 @@ -const uint8_t __FX_Reverb_HP_LP_bin[] FLASHMEM __attribute__((aligned(32))) = { - 0x55, 0x44, 0x4c, 0x4d, 0x16, 0x00, 0x16, 0x00, 0xe4, 0x01, 0x00, 0x00, - 0x54, 0x11, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x6c, 0x01, 0x01, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, - 0xdc, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, 0x50, - 0x39, 0x11, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x50, 0xe5, 0x10, 0x00, 0x00, - 0x0c, 0x01, 0x00, 0x50, 0x1d, 0x11, 0x00, 0x00, 0x14, 0x01, 0x00, 0x50, - 0x01, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x1a, 0x01, 0x00, 0x10, 0x14, 0x00, 0x00, 0x00, 0x2e, 0x01, 0x00, 0x10, - 0x14, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x10, 0x14, 0x00, 0x00, 0x00, - 0x55, 0x01, 0x00, 0x10, 0x14, 0x00, 0x00, 0x00, 0x68, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x6e, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x75, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x85, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x92, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0xa6, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0xb7, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0xd6, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x58, 0x2f, 0x52, 0x65, 0x76, 0x65, 0x72, 0x62, 0x2d, 0x48, 0x50, - 0x2d, 0x4c, 0x50, 0x00, 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, - 0x72, 0x72, 0x61, 0x79, 0x00, 0x5f, 0x5f, 0x75, 0x69, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00, - 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x00, 0x73, 0x65, 0x74, 0x75, - 0x70, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x5f, - 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x00, 0x5f, 0x5f, - 0x70, 0x72, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, - 0x79, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, 0x5f, 0x5f, 0x69, 0x6e, - 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x65, 0x6e, 0x64, - 0x00, 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, - 0x79, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, 0x65, 0x78, 0x70, 0x32, - 0x66, 0x00, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x66, 0x72, 0x65, - 0x65, 0x00, 0x5f, 0x5f, 0x75, 0x69, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x00, 0x61, 0x64, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x69, 0x33, - 0x32, 0x00, 0x61, 0x64, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x66, - 0x33, 0x32, 0x00, 0x6d, 0x65, 0x6d, 0x73, 0x65, 0x74, 0x00, 0x5f, 0x5f, - 0x61, 0x75, 0x64, 0x69, 0x6f, 0x5f, 0x69, 0x6e, 0x5f, 0x6c, 0x5f, 0x66, - 0x70, 0x70, 0x00, 0x5f, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x5f, 0x69, - 0x6e, 0x5f, 0x72, 0x5f, 0x66, 0x70, 0x70, 0x00, 0x5f, 0x5f, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x5f, 0x72, 0x5f, 0x66, 0x70, 0x00, 0x5f, 0x5f, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6c, 0x5f, 0x66, 0x70, 0x00, - 0x2d, 0xe9, 0xf0, 0x4d, 0x02, 0x68, 0xc7, 0x6c, 0xcf, 0x4d, 0x87, 0xfb, - 0x05, 0x31, 0x4f, 0xea, 0x41, 0x21, 0x41, 0xea, 0xd3, 0x53, 0x88, 0xb0, - 0x04, 0x46, 0x02, 0x97, 0x13, 0x44, 0x03, 0xf3, 0x17, 0x03, 0x00, 0x20, - 0xc4, 0xf8, 0x94, 0x30, 0x83, 0xfb, 0x00, 0x12, 0x4f, 0xea, 0x42, 0x22, - 0x42, 0xea, 0xd1, 0x51, 0x01, 0xf3, 0x17, 0x01, 0xc4, 0x4b, 0x87, 0xfb, - 0x03, 0x26, 0x4f, 0xea, 0x46, 0x26, 0x46, 0xea, 0xd2, 0x52, 0x11, 0x44, - 0x01, 0xf3, 0x17, 0x01, 0x4f, 0xf4, 0x00, 0x03, 0x81, 0xfb, 0x03, 0x26, - 0x4f, 0xea, 0x46, 0x26, 0x46, 0xea, 0xd2, 0x52, 0x02, 0xf5, 0xff, 0x02, - 0x02, 0xf5, 0xbe, 0x42, 0x02, 0xf3, 0x17, 0x02, 0x82, 0xfb, 0x05, 0x81, - 0x4f, 0xea, 0x41, 0x21, 0x41, 0xea, 0xd8, 0x58, 0x08, 0xf3, 0x17, 0x08, - 0xc4, 0xf8, 0x90, 0x80, 0x88, 0xfb, 0x00, 0x52, 0x4f, 0xea, 0x42, 0x22, - 0x42, 0xea, 0xd5, 0x55, 0x05, 0xf3, 0x17, 0x05, 0x87, 0xfb, 0x03, 0x21, - 0x4f, 0xea, 0x41, 0x21, 0x41, 0xea, 0xd2, 0x52, 0x15, 0x44, 0x05, 0xf3, - 0x17, 0x05, 0xc4, 0xf8, 0x8c, 0x50, 0x85, 0xfb, 0x03, 0x12, 0x4f, 0xea, - 0x42, 0x22, 0x42, 0xea, 0xd1, 0x51, 0x01, 0xf3, 0x17, 0x01, 0x81, 0xfb, - 0x03, 0x26, 0x4f, 0xea, 0x46, 0x26, 0x46, 0xea, 0xd2, 0x52, 0xa2, 0xf5, - 0x80, 0x03, 0x03, 0xf3, 0x17, 0x03, 0x83, 0x42, 0x13, 0xdc, 0x83, 0xfb, - 0x00, 0x52, 0x4f, 0xea, 0x42, 0x22, 0x42, 0xea, 0xd5, 0x55, 0x05, 0xf5, - 0x80, 0x05, 0x05, 0xf3, 0x17, 0x05, 0xc4, 0xf8, 0x8c, 0x50, 0x85, 0xfb, - 0x00, 0x32, 0x4f, 0xea, 0x42, 0x22, 0x42, 0xea, 0xd3, 0x53, 0x03, 0xf3, - 0x17, 0x03, 0x00, 0x23, 0x03, 0xf3, 0x17, 0x03, 0x4f, 0xf4, 0x00, 0x02, - 0xd4, 0xf8, 0x50, 0xa0, 0x8a, 0xfb, 0x02, 0x10, 0x4f, 0xea, 0x40, 0x20, - 0x40, 0xea, 0xd1, 0x51, 0x0b, 0x44, 0x03, 0xf3, 0x17, 0x03, 0x4f, 0xf4, - 0x80, 0x01, 0x83, 0xfb, 0x01, 0x20, 0x4f, 0xea, 0x40, 0x20, 0x40, 0xea, - 0xd2, 0x52, 0xa2, 0xf5, 0x80, 0x03, 0x03, 0xf3, 0x17, 0x03, 0x00, 0x2b, - 0xc0, 0xf2, 0x5d, 0x85, 0x87, 0x4b, 0x4f, 0xf4, 0x00, 0x02, 0x83, 0xfb, - 0x02, 0x10, 0x4f, 0xea, 0x40, 0x20, 0x40, 0xea, 0xd1, 0x51, 0x01, 0xf3, - 0x17, 0x03, 0x00, 0x21, 0x05, 0x93, 0xc4, 0xf8, 0xb8, 0x30, 0x1e, 0x46, - 0x86, 0xfb, 0x01, 0x30, 0x4f, 0xea, 0x40, 0x20, 0x40, 0xea, 0xd3, 0x53, - 0x03, 0xf3, 0x17, 0x03, 0x66, 0x6d, 0x86, 0xfb, 0x02, 0x10, 0x4f, 0xea, - 0x40, 0x20, 0x40, 0xea, 0xd1, 0x51, 0x0b, 0x44, 0x03, 0xf3, 0x17, 0x03, - 0x4f, 0xf4, 0x80, 0x01, 0x83, 0xfb, 0x01, 0x20, 0x4f, 0xea, 0x40, 0x20, - 0x40, 0xea, 0xd2, 0x52, 0xa2, 0xf5, 0x80, 0x03, 0x03, 0xf3, 0x17, 0x03, - 0x00, 0x2b, 0xc0, 0xf2, 0x3c, 0x85, 0x6f, 0x4a, 0x4f, 0xf4, 0x00, 0x03, - 0x82, 0xfb, 0x03, 0x10, 0x4f, 0xea, 0x40, 0x20, 0x40, 0xea, 0xd1, 0x51, - 0x01, 0xf3, 0x17, 0x01, 0x00, 0x22, 0xc4, 0xf8, 0xbc, 0x10, 0x01, 0x91, - 0x0f, 0x46, 0x87, 0xfb, 0x02, 0x01, 0x4f, 0xea, 0x41, 0x21, 0x41, 0xea, - 0xd0, 0x50, 0x00, 0xf3, 0x17, 0x00, 0x62, 0x49, 0x8a, 0xfb, 0x01, 0xce, - 0x4f, 0xea, 0x4e, 0x2e, 0x4e, 0xea, 0xdc, 0x5c, 0x84, 0x44, 0x0c, 0xf3, - 0x17, 0x0c, 0x8c, 0xfb, 0x03, 0x0e, 0x4f, 0xea, 0x4e, 0x2e, 0x4e, 0xea, - 0xd0, 0x50, 0x00, 0xf5, 0xff, 0x00, 0x00, 0xf5, 0xbe, 0x40, 0x00, 0xf3, - 0x17, 0x00, 0x80, 0xfb, 0x03, 0xec, 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, - 0xde, 0x5e, 0x0e, 0xf3, 0x17, 0x0e, 0x8e, 0xfb, 0x00, 0xca, 0x4f, 0xea, - 0x4a, 0x2a, 0x4a, 0xea, 0xdc, 0x5c, 0x0c, 0xf3, 0x17, 0x0c, 0x8c, 0xfb, - 0x00, 0xea, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xde, 0x5e, 0x0e, 0xf3, - 0x17, 0x00, 0xc4, 0xf8, 0xd4, 0x00, 0x06, 0x90, 0x07, 0x46, 0x87, 0xfb, - 0x02, 0x0c, 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, 0xd0, 0x50, 0x00, 0xf3, - 0x17, 0x00, 0x86, 0xfb, 0x03, 0xce, 0x4f, 0xea, 0x4e, 0x2e, 0x4e, 0xea, - 0xdc, 0x5c, 0x60, 0x44, 0x00, 0xf3, 0x17, 0x00, 0x80, 0xfb, 0x06, 0xce, - 0x4f, 0xea, 0x4e, 0x2e, 0x4e, 0xea, 0xdc, 0x5c, 0x0c, 0xf3, 0x17, 0x0c, - 0x8c, 0xfb, 0x06, 0x0e, 0x4f, 0xea, 0x4e, 0x2e, 0x4e, 0xea, 0xd0, 0x50, - 0x00, 0xf3, 0x17, 0x00, 0x80, 0xfb, 0x06, 0xce, 0x4f, 0xea, 0x4e, 0x2e, - 0x4e, 0xea, 0xdc, 0x5c, 0x0c, 0xf3, 0x17, 0x06, 0xc4, 0xf8, 0xd8, 0x60, - 0x07, 0x96, 0x37, 0x46, 0x87, 0xfb, 0x02, 0x06, 0x4f, 0xea, 0x46, 0x26, - 0x46, 0xea, 0xd0, 0x50, 0x00, 0xf3, 0x17, 0x00, 0xe7, 0x6d, 0x04, 0x97, - 0x4f, 0xf4, 0x00, 0x16, 0x87, 0xfb, 0x06, 0xce, 0x4f, 0xea, 0x4e, 0x2e, - 0x4e, 0xea, 0xdc, 0x5c, 0x60, 0x44, 0x00, 0xf3, 0x17, 0x00, 0x27, 0x6e, - 0x03, 0x97, 0x87, 0xfb, 0x06, 0xce, 0x4f, 0xea, 0x4e, 0x2e, 0x4e, 0xea, - 0xdc, 0x5c, 0x60, 0x44, 0x00, 0xf3, 0x17, 0x00, 0x80, 0xfb, 0x08, 0xc6, - 0x4f, 0xea, 0x46, 0x26, 0x46, 0xea, 0xdc, 0x5c, 0x0c, 0xf3, 0x17, 0x0c, - 0x04, 0xf5, 0x80, 0x30, 0xd0, 0xf8, 0x0c, 0x01, 0x00, 0xf1, 0xca, 0x06, - 0xc6, 0xf3, 0x0e, 0x06, 0x04, 0xeb, 0x46, 0x06, 0xb6, 0xf9, 0x0c, 0xe1, - 0x4f, 0xea, 0x0e, 0x2e, 0x0e, 0xf3, 0x17, 0x06, 0xdf, 0xf8, 0x64, 0xb0, - 0x8e, 0xfb, 0x0b, 0x8a, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, - 0xc4, 0x44, 0x0c, 0xf3, 0x17, 0x0c, 0xc0, 0xf3, 0x0e, 0x0e, 0x04, 0xeb, - 0x4e, 0x0e, 0x4f, 0xea, 0x2c, 0x28, 0x10, 0x4f, 0xae, 0xf8, 0x0c, 0x81, - 0x8c, 0xfb, 0x07, 0xe8, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xde, 0x5e, - 0x0e, 0xf3, 0x17, 0x0e, 0x76, 0x44, 0x06, 0xf3, 0x17, 0x06, 0x00, 0xf5, - 0x3a, 0x7c, 0xcc, 0xf3, 0x0e, 0x0c, 0x04, 0xeb, 0x4c, 0x0c, 0xbc, 0xf9, - 0x0c, 0xe1, 0x4f, 0xea, 0x0e, 0x2e, 0x0e, 0xf3, 0x17, 0x0c, 0x09, 0xe0, - 0x00, 0xdf, 0xff, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x7f, 0x00, - 0x00, 0x20, 0xb3, 0xff, 0x00, 0xc0, 0x4c, 0x00, 0x8e, 0xfb, 0x0b, 0x8a, - 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, 0x46, 0x44, 0x06, 0xf3, - 0x17, 0x06, 0x00, 0xf1, 0xcb, 0x0e, 0xce, 0xf3, 0x0e, 0x0e, 0x04, 0xeb, - 0x4e, 0x0e, 0x4f, 0xea, 0x26, 0x28, 0xae, 0xf8, 0x0c, 0x81, 0x86, 0xfb, - 0x07, 0xe8, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xde, 0x5e, 0x0e, 0xf3, - 0x17, 0x0e, 0xf4, 0x44, 0x0c, 0xf3, 0x17, 0x0c, 0x00, 0xf2, 0x6e, 0x76, - 0xc6, 0xf3, 0x0e, 0x06, 0x04, 0xeb, 0x46, 0x06, 0xb6, 0xf9, 0x0c, 0xe1, - 0x4f, 0xea, 0x0e, 0x2e, 0x0e, 0xf3, 0x17, 0x06, 0x8e, 0xfb, 0x0b, 0x8a, - 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, 0xc4, 0x44, 0x0c, 0xf3, - 0x17, 0x0c, 0x00, 0xf2, 0xe9, 0x2e, 0xce, 0xf3, 0x0e, 0x0e, 0x04, 0xeb, - 0x4e, 0x0e, 0x4f, 0xea, 0x2c, 0x28, 0xae, 0xf8, 0x0c, 0x81, 0x8c, 0xfb, - 0x07, 0xe8, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xde, 0x5e, 0x0e, 0xf3, - 0x17, 0x0e, 0x76, 0x44, 0x06, 0xf3, 0x17, 0x06, 0x00, 0xf6, 0xde, 0x6c, - 0xcc, 0xf3, 0x0e, 0x0c, 0x04, 0xeb, 0x4c, 0x0c, 0xbc, 0xf9, 0x0c, 0xc1, - 0x4f, 0xea, 0x0c, 0x2c, 0x0c, 0xf3, 0x17, 0x0e, 0x8c, 0xfb, 0x0b, 0x8a, - 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, 0x46, 0x44, 0x06, 0xf3, - 0x17, 0x06, 0x00, 0xf2, 0x6f, 0x7c, 0xcc, 0xf3, 0x0e, 0x0c, 0x04, 0xeb, - 0x4c, 0x0c, 0x4f, 0xea, 0x26, 0x28, 0xac, 0xf8, 0x0c, 0x81, 0x86, 0xfb, - 0x07, 0xc8, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xdc, 0x5c, 0x0c, 0xf3, - 0x17, 0x0c, 0xf4, 0x44, 0x0c, 0xf3, 0x17, 0x0a, 0xc4, 0xf8, 0xc0, 0xa0, - 0x8a, 0xfb, 0x02, 0x6c, 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, 0xd6, 0x56, - 0x06, 0xf3, 0x17, 0x06, 0x00, 0xf5, 0xd1, 0x4c, 0x0c, 0xf1, 0x4f, 0x0c, - 0xcc, 0xf3, 0x0e, 0x0c, 0x04, 0xeb, 0x4c, 0x0c, 0xbc, 0xf9, 0x0c, 0xc1, - 0x4f, 0xea, 0x0c, 0x2c, 0x0c, 0xf3, 0x17, 0x0e, 0x8c, 0xfb, 0x03, 0xe8, - 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xde, 0x5e, 0xb6, 0x44, 0x0e, 0xf3, - 0x17, 0x0e, 0x8e, 0xfb, 0x05, 0x6c, 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, - 0xd6, 0x56, 0x06, 0xf3, 0x17, 0x06, 0x8a, 0xfb, 0x03, 0xce, 0x4f, 0xea, - 0x4e, 0x2e, 0x4e, 0xea, 0xdc, 0x5c, 0x66, 0x44, 0x06, 0xf3, 0x17, 0x06, - 0x00, 0xf5, 0xbb, 0x5c, 0x0c, 0xf1, 0x1b, 0x0c, 0xcc, 0xf3, 0x0e, 0x0c, - 0x04, 0xeb, 0x4c, 0x0c, 0xbc, 0xf9, 0x0c, 0xe1, 0x4f, 0xea, 0x0e, 0x2e, - 0x0e, 0xf3, 0x17, 0x02, 0x8e, 0xfb, 0x0b, 0x8c, 0x4f, 0xea, 0x4c, 0x2c, - 0x4c, 0xea, 0xd8, 0x58, 0xb0, 0x44, 0x08, 0xf3, 0x17, 0x08, 0x00, 0xf6, - 0xdf, 0x66, 0xc6, 0xf3, 0x0e, 0x06, 0x04, 0xeb, 0x46, 0x06, 0x4f, 0xea, - 0x28, 0x2e, 0xa6, 0xf8, 0x0c, 0xe1, 0x88, 0xfb, 0x07, 0x6e, 0x4f, 0xea, - 0x4e, 0x2e, 0x4e, 0xea, 0xd6, 0x56, 0x06, 0xf3, 0x17, 0x06, 0x16, 0x44, - 0x06, 0xf3, 0x17, 0x06, 0x00, 0xf5, 0x11, 0x5c, 0x0c, 0xf1, 0x21, 0x0c, - 0xcc, 0xf3, 0x0e, 0x0c, 0x04, 0xeb, 0x4c, 0x0c, 0xbc, 0xf9, 0x0c, 0xe1, - 0x4f, 0xea, 0x0e, 0x2e, 0x0e, 0xf3, 0x17, 0x02, 0x8e, 0xfb, 0x0b, 0x8c, - 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, 0xd8, 0x58, 0x46, 0x44, 0x06, 0xf3, - 0x17, 0x06, 0x00, 0xf5, 0xbb, 0x5e, 0x0e, 0xf1, 0x1c, 0x0e, 0xce, 0xf3, - 0x0e, 0x0e, 0x04, 0xeb, 0x4e, 0x0e, 0x4f, 0xea, 0x26, 0x28, 0xae, 0xf8, - 0x0c, 0x81, 0x86, 0xfb, 0x07, 0xe8, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, - 0xde, 0x5e, 0x0e, 0xf3, 0x17, 0x0e, 0x96, 0x44, 0x0e, 0xf3, 0x17, 0x0e, - 0x00, 0xf5, 0x11, 0x5c, 0x0c, 0xf1, 0x22, 0x0c, 0xcc, 0xf3, 0x0e, 0x0c, - 0x04, 0xeb, 0x4c, 0x0c, 0x4f, 0xea, 0x2e, 0x26, 0xac, 0xf8, 0x0c, 0x61, - 0x00, 0x22, 0x8e, 0xfb, 0x02, 0x68, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, - 0xd6, 0x56, 0x06, 0xf3, 0x17, 0x02, 0x00, 0xf5, 0x57, 0x5e, 0x0e, 0xf1, - 0x0a, 0x0e, 0xce, 0xf3, 0x0e, 0x0e, 0x04, 0xeb, 0x4e, 0x0e, 0xbe, 0xf9, - 0x0c, 0xe1, 0x4f, 0xea, 0x0e, 0x2e, 0x0e, 0xf3, 0x17, 0x08, 0x8e, 0xfb, - 0x03, 0x86, 0x4f, 0xea, 0x46, 0x26, 0x46, 0xea, 0xd8, 0x58, 0x90, 0x44, - 0x08, 0xf3, 0x17, 0x08, 0x88, 0xfb, 0x05, 0x6e, 0x4f, 0xea, 0x4e, 0x2e, - 0x4e, 0xea, 0xd6, 0x56, 0x06, 0xf3, 0x17, 0x06, 0x8a, 0xfb, 0x03, 0x5e, - 0x4f, 0xea, 0x4e, 0x2e, 0x4e, 0xea, 0xd5, 0x55, 0x2e, 0x44, 0x06, 0xf3, - 0x17, 0x06, 0x00, 0xf5, 0x87, 0x45, 0x17, 0x35, 0xc5, 0xf3, 0x0e, 0x05, - 0x04, 0xeb, 0x45, 0x05, 0xb5, 0xf9, 0x0c, 0xe1, 0x4f, 0xea, 0x0e, 0x2e, - 0x0e, 0xf3, 0x17, 0x05, 0x8e, 0xfb, 0x0b, 0x8a, 0x4f, 0xea, 0x4a, 0x2a, - 0x4a, 0xea, 0xd8, 0x58, 0x46, 0x44, 0x06, 0xf3, 0x17, 0x06, 0x00, 0xf5, - 0x57, 0x5e, 0x0e, 0xf1, 0x0b, 0x0e, 0xce, 0xf3, 0x0e, 0x0e, 0x04, 0xeb, - 0x4e, 0x0e, 0x4f, 0xea, 0x26, 0x28, 0xae, 0xf8, 0x0c, 0x81, 0x86, 0xfb, - 0x07, 0xe8, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xde, 0x5e, 0x0e, 0xf3, - 0x17, 0x0e, 0x75, 0x44, 0x05, 0xf3, 0x17, 0x05, 0x00, 0xf5, 0xa0, 0x46, - 0x19, 0x36, 0xc6, 0xf3, 0x0e, 0x06, 0x04, 0xeb, 0x46, 0x06, 0xb6, 0xf9, - 0x0c, 0xe1, 0x4f, 0xea, 0x0e, 0x2e, 0x0e, 0xf3, 0x17, 0x06, 0x8e, 0xfb, - 0x0b, 0x8a, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, 0x45, 0x44, - 0x05, 0xf3, 0x17, 0x05, 0x85, 0xfb, 0x07, 0xae, 0x4f, 0xea, 0x4e, 0x2e, - 0x4e, 0xea, 0xda, 0x5a, 0x00, 0xf5, 0x87, 0x4e, 0x0e, 0xf1, 0x18, 0x0e, - 0xce, 0xf3, 0x0e, 0x0e, 0x04, 0xeb, 0x4e, 0x0e, 0x2d, 0x12, 0xae, 0xf8, - 0x0c, 0x51, 0x0a, 0xf3, 0x17, 0x0a, 0x56, 0x44, 0x06, 0xf3, 0x17, 0x06, - 0x00, 0xf5, 0xa0, 0x40, 0x1a, 0x30, 0xc0, 0xf3, 0x0e, 0x00, 0x04, 0xeb, - 0x40, 0x00, 0x46, 0xf3, 0x0f, 0x2a, 0xa0, 0xf8, 0x0c, 0xa1, 0x00, 0x22, - 0x86, 0xfb, 0x02, 0x0e, 0x4f, 0xea, 0x4e, 0x2e, 0x4e, 0xea, 0xd0, 0x50, - 0x00, 0xf3, 0x17, 0x00, 0x04, 0x9f, 0x87, 0xfb, 0x01, 0x6e, 0x4f, 0xea, - 0x4e, 0x2e, 0x4e, 0xea, 0xd6, 0x56, 0x30, 0x44, 0x00, 0xf3, 0x17, 0x00, - 0xbc, 0xf9, 0x0c, 0x61, 0x36, 0x02, 0x06, 0xf3, 0x17, 0x0c, 0x4f, 0xf4, - 0x40, 0x0c, 0x86, 0xfb, 0x0c, 0xe8, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, - 0xde, 0x5e, 0x70, 0x44, 0x00, 0xf3, 0x17, 0x00, 0x02, 0x9a, 0x80, 0xfb, - 0x02, 0x6e, 0x4f, 0xea, 0x4e, 0x2e, 0x4e, 0xea, 0xd6, 0x56, 0x06, 0xf3, - 0x17, 0x06, 0x87, 0xfb, 0x03, 0x0e, 0x4f, 0xea, 0x4e, 0x2e, 0x4e, 0xea, - 0xd0, 0x50, 0x06, 0x44, 0x06, 0xf3, 0x17, 0x06, 0x00, 0x25, 0xc4, 0xf8, - 0xc4, 0x60, 0x02, 0x96, 0x86, 0xfb, 0x05, 0x0e, 0x4f, 0xea, 0x4e, 0x2e, - 0x4e, 0xea, 0xd0, 0x50, 0x00, 0xf3, 0x17, 0x00, 0x03, 0x9e, 0x86, 0xfb, - 0x01, 0xe8, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xde, 0x5e, 0x70, 0x44, - 0x00, 0xf3, 0x17, 0x00, 0x4f, 0xea, 0x0a, 0x25, 0x05, 0xf3, 0x17, 0x08, - 0x85, 0xfb, 0x0c, 0xea, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xde, 0x5e, - 0xc4, 0xf8, 0x08, 0x80, 0x70, 0x44, 0x00, 0xf3, 0x17, 0x00, 0x80, 0xfb, - 0x02, 0x5c, 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, 0xd5, 0x55, 0x05, 0xf3, - 0x17, 0x05, 0x86, 0xfb, 0x03, 0x07, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, - 0xd0, 0x50, 0x05, 0x44, 0x05, 0xf3, 0x17, 0x05, 0x00, 0x22, 0xc4, 0xf8, - 0xc8, 0x50, 0x85, 0xfb, 0x02, 0x07, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, - 0xd0, 0x50, 0x00, 0xf3, 0x17, 0x00, 0xd4, 0xf8, 0x98, 0xe0, 0x8e, 0xfb, - 0x03, 0x7c, 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, 0xd7, 0x57, 0x38, 0x44, - 0x00, 0xf3, 0x17, 0x00, 0x05, 0x9e, 0x80, 0xfb, 0x06, 0x7c, 0x4f, 0xea, - 0x4c, 0x2c, 0x4c, 0xea, 0xd7, 0x57, 0x07, 0xf3, 0x17, 0x07, 0xd4, 0xf8, - 0x9c, 0x00, 0x80, 0xfb, 0x03, 0xc8, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, - 0xdc, 0x5c, 0x67, 0x44, 0x07, 0xf3, 0x17, 0x07, 0xc4, 0xf8, 0x9c, 0x70, - 0x87, 0xfb, 0x01, 0xc0, 0x4f, 0xea, 0x40, 0x20, 0x40, 0xea, 0xdc, 0x5c, - 0x0c, 0xf3, 0x17, 0x0c, 0xa2, 0xf5, 0xcc, 0x12, 0xa2, 0xf5, 0xd0, 0x52, - 0x8e, 0xfb, 0x02, 0x08, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xd0, 0x50, - 0x84, 0x44, 0x0c, 0xf3, 0x17, 0x0c, 0x02, 0x9f, 0x87, 0xfb, 0x03, 0x08, - 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xd0, 0x50, 0x84, 0x44, 0x0c, 0xf3, - 0x17, 0x0c, 0x8c, 0xfb, 0x03, 0x80, 0x4f, 0xea, 0x40, 0x20, 0x40, 0xea, - 0xd8, 0x58, 0x08, 0xf3, 0x17, 0x08, 0x88, 0xfb, 0x06, 0x0a, 0x4f, 0xea, - 0x4a, 0x2a, 0x4a, 0xea, 0xd0, 0x50, 0x00, 0xf3, 0x17, 0x00, 0x8e, 0xfb, - 0x03, 0x8a, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, 0x40, 0x44, - 0x00, 0xf3, 0x17, 0x00, 0x00, 0x27, 0xc4, 0xf8, 0x98, 0x00, 0x80, 0xfb, - 0x07, 0xe8, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xde, 0x5e, 0x0e, 0xf3, - 0x17, 0x00, 0xd4, 0xf8, 0xa8, 0x80, 0x88, 0xfb, 0x03, 0xea, 0x4f, 0xea, - 0x4a, 0x2a, 0x4a, 0xea, 0xde, 0x5e, 0x70, 0x44, 0x00, 0xf3, 0x17, 0x00, - 0x37, 0x46, 0x80, 0xfb, 0x06, 0xea, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, - 0xde, 0x5e, 0x0e, 0xf3, 0x17, 0x0e, 0xd4, 0xf8, 0xac, 0x60, 0x86, 0xfb, - 0x03, 0xa0, 0x4f, 0xea, 0x40, 0x20, 0x40, 0xea, 0xda, 0x5a, 0xd6, 0x44, - 0x0e, 0xf3, 0x17, 0x0e, 0xc4, 0xf8, 0xac, 0xe0, 0x8e, 0xfb, 0x01, 0x0a, - 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd0, 0x50, 0x00, 0xf3, 0x17, 0x00, - 0x88, 0xfb, 0x02, 0xea, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xde, 0x5e, - 0x70, 0x44, 0x00, 0xf3, 0x17, 0x00, 0x85, 0xfb, 0x03, 0xea, 0x4f, 0xea, - 0x4a, 0x2a, 0x4a, 0xea, 0xde, 0x5e, 0x70, 0x44, 0x00, 0xf3, 0x17, 0x00, - 0x80, 0xfb, 0x03, 0xae, 0x4f, 0xea, 0x4e, 0x2e, 0x4e, 0xea, 0xda, 0x5a, - 0x0a, 0xf3, 0x17, 0x0a, 0x8a, 0xfb, 0x07, 0xeb, 0x4f, 0xea, 0x4b, 0x2b, - 0x4b, 0xea, 0xde, 0x5e, 0x0e, 0xf3, 0x17, 0x0e, 0x88, 0xfb, 0x03, 0xab, - 0x4f, 0xea, 0x4b, 0x2b, 0x4b, 0xea, 0xda, 0x5a, 0xd6, 0x44, 0x0e, 0xf3, - 0x17, 0x0a, 0x00, 0x26, 0xc4, 0xf8, 0xa8, 0xa0, 0x8a, 0xfb, 0x06, 0xe8, - 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xde, 0x5e, 0x0e, 0xf3, 0x17, 0x0e, - 0x8c, 0xfb, 0x01, 0x8a, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, - 0xc6, 0x44, 0x0e, 0xf3, 0x17, 0x0e, 0x02, 0x9e, 0x86, 0xfb, 0x03, 0x8a, - 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, 0xf0, 0x44, 0x08, 0xf3, - 0x17, 0x08, 0x06, 0x9f, 0x88, 0xfb, 0x07, 0xe6, 0x4f, 0xea, 0x46, 0x26, - 0x46, 0xea, 0xde, 0x5e, 0x0e, 0xf3, 0x17, 0x0e, 0x8c, 0xfb, 0x03, 0x68, - 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xd6, 0x56, 0xb6, 0x44, 0x0e, 0xf3, - 0x17, 0x0e, 0x4f, 0xf0, 0x00, 0x08, 0xc4, 0xf8, 0xcc, 0xe0, 0x8e, 0xfb, - 0x08, 0x6c, 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, 0xd6, 0x56, 0x06, 0xf3, - 0x17, 0x06, 0x80, 0xfb, 0x01, 0xc8, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, - 0xdc, 0x5c, 0x66, 0x44, 0x06, 0xf3, 0x17, 0x06, 0x85, 0xfb, 0x03, 0xc8, - 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xdc, 0x5c, 0x66, 0x44, 0x06, 0xf3, - 0x17, 0x06, 0x86, 0xfb, 0x07, 0x5c, 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, - 0xd5, 0x55, 0x05, 0xf3, 0x17, 0x05, 0x80, 0xfb, 0x03, 0x6c, 0x4f, 0xea, - 0x4c, 0x2c, 0x4c, 0xea, 0xd6, 0x56, 0x35, 0x44, 0x05, 0xf3, 0x17, 0x05, - 0x00, 0x27, 0xc4, 0xf8, 0xd0, 0x50, 0x85, 0xfb, 0x07, 0x06, 0x4f, 0xea, - 0x46, 0x26, 0x46, 0xea, 0xd0, 0x50, 0x00, 0xf3, 0x17, 0x00, 0xd4, 0xf8, - 0xa0, 0x60, 0x86, 0xfb, 0x03, 0xc8, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, - 0xdc, 0x5c, 0x60, 0x44, 0x00, 0xf3, 0x17, 0x00, 0x01, 0x9f, 0x80, 0xfb, - 0x07, 0xc8, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xdc, 0x5c, 0x0c, 0xf3, - 0x17, 0x0c, 0xd4, 0xf8, 0xa4, 0x00, 0x80, 0xfb, 0x03, 0x8a, 0x4f, 0xea, - 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, 0xc4, 0x44, 0x0c, 0xf3, 0x17, 0x0c, - 0xc4, 0xf8, 0xa4, 0xc0, 0x8c, 0xfb, 0x01, 0x08, 0x4f, 0xea, 0x48, 0x28, - 0x48, 0xea, 0xd0, 0x50, 0x00, 0xf3, 0x17, 0x00, 0x86, 0xfb, 0x02, 0x8a, - 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, 0x40, 0x44, 0x00, 0xf3, - 0x17, 0x00, 0x8e, 0xfb, 0x03, 0x8a, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, - 0xd8, 0x58, 0x40, 0x44, 0x00, 0xf3, 0x17, 0x00, 0x80, 0xfb, 0x07, 0x8a, - 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, 0x08, 0xf3, 0x17, 0x00, - 0x86, 0xfb, 0x03, 0x8a, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd8, 0x58, - 0x40, 0x44, 0x00, 0xf3, 0x17, 0x00, 0x00, 0x22, 0xc4, 0xf8, 0xa0, 0x00, - 0x80, 0xfb, 0x02, 0x68, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xd6, 0x56, - 0x06, 0xf3, 0x17, 0x06, 0xd4, 0xf8, 0xb0, 0x80, 0x88, 0xfb, 0x03, 0x0a, - 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd0, 0x50, 0x06, 0x44, 0x06, 0xf3, - 0x17, 0x06, 0x86, 0xfb, 0x07, 0x0a, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, - 0xd0, 0x50, 0x00, 0xf3, 0x17, 0x00, 0xd4, 0xf8, 0xb4, 0x60, 0x86, 0xfb, - 0x03, 0xab, 0x4f, 0xea, 0x4b, 0x2b, 0x4b, 0xea, 0xda, 0x5a, 0x50, 0x44, - 0x00, 0xf3, 0x17, 0x00, 0x02, 0x46, 0xc4, 0xf8, 0xb4, 0x00, 0x80, 0xfb, - 0x01, 0x6a, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd6, 0x56, 0x06, 0xf3, - 0x17, 0x06, 0x58, 0x4f, 0x88, 0xfb, 0x07, 0xab, 0x4f, 0xea, 0x4b, 0x2b, - 0x4b, 0xea, 0xda, 0x5a, 0x56, 0x44, 0x06, 0xf3, 0x17, 0x06, 0x85, 0xfb, - 0x03, 0xa7, 0x4f, 0xea, 0x47, 0x27, 0x47, 0xea, 0xda, 0x5a, 0x56, 0x44, - 0x06, 0xf3, 0x17, 0x06, 0x01, 0x98, 0x86, 0xfb, 0x00, 0x7a, 0x4f, 0xea, - 0x4a, 0x2a, 0x4a, 0xea, 0xd7, 0x57, 0x07, 0xf3, 0x17, 0x07, 0x88, 0xfb, - 0x03, 0x6a, 0x4f, 0xea, 0x4a, 0x2a, 0x4a, 0xea, 0xd6, 0x56, 0x37, 0x44, - 0x07, 0xf3, 0x17, 0x07, 0x00, 0x20, 0xc4, 0xf8, 0xb0, 0x70, 0x87, 0xfb, - 0x00, 0x68, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xd6, 0x56, 0x06, 0xf3, - 0x17, 0x06, 0x8c, 0xfb, 0x01, 0x78, 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, - 0xd7, 0x57, 0x3e, 0x44, 0x06, 0xf3, 0x17, 0x06, 0x8e, 0xfb, 0x03, 0x78, - 0x4f, 0xea, 0x48, 0x28, 0x48, 0xea, 0xd7, 0x57, 0x3e, 0x44, 0x06, 0xf3, - 0x17, 0x06, 0x07, 0x98, 0x86, 0xfb, 0x00, 0x7e, 0x4f, 0xea, 0x4e, 0x2e, - 0x4e, 0xea, 0xd7, 0x57, 0x07, 0xf3, 0x17, 0x07, 0x8c, 0xfb, 0x03, 0x6e, - 0x4f, 0xea, 0x4e, 0x2e, 0x4e, 0xea, 0xd6, 0x56, 0x37, 0x44, 0x07, 0xf3, - 0x17, 0x07, 0x4f, 0xf0, 0x00, 0x0e, 0x67, 0x66, 0x87, 0xfb, 0x0e, 0x6c, - 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, 0xd6, 0x56, 0x06, 0xf3, 0x17, 0x06, - 0x82, 0xfb, 0x01, 0x7c, 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, 0xd7, 0x57, - 0xf1, 0x19, 0x01, 0xf3, 0x17, 0x01, 0x85, 0xfb, 0x03, 0x67, 0x4f, 0xea, - 0x47, 0x27, 0x47, 0xea, 0xd6, 0x56, 0x31, 0x44, 0x01, 0xf3, 0x17, 0x01, - 0x81, 0xfb, 0x00, 0x56, 0x4f, 0xea, 0x46, 0x26, 0x46, 0xea, 0xd5, 0x55, - 0x05, 0xf3, 0x17, 0x01, 0x82, 0xfb, 0x03, 0x56, 0x4f, 0xea, 0x46, 0x26, - 0x46, 0xea, 0xd5, 0x55, 0x4b, 0x19, 0x03, 0xf3, 0x17, 0x03, 0x63, 0x60, - 0xa3, 0x66, 0x83, 0xfb, 0x0e, 0x10, 0x4f, 0xea, 0x40, 0x20, 0x40, 0xea, - 0xd1, 0x51, 0x01, 0xf3, 0x17, 0x01, 0x21, 0x60, 0x08, 0xb0, 0xbd, 0xe8, - 0xf0, 0x8d, 0x00, 0xee, 0x10, 0x3a, 0x10, 0x4b, 0xba, 0xee, 0xe6, 0x0a, - 0x59, 0xf8, 0x03, 0x30, 0x98, 0x47, 0xbe, 0xee, 0xe4, 0x0a, 0x10, 0xee, - 0x10, 0x3a, 0x03, 0xf3, 0x17, 0x03, 0xff, 0xf7, 0x94, 0xba, 0x00, 0xee, - 0x10, 0x3a, 0x08, 0x4b, 0xba, 0xee, 0xe6, 0x0a, 0x59, 0xf8, 0x03, 0x30, - 0x98, 0x47, 0xbe, 0xee, 0xe4, 0x0a, 0x10, 0xee, 0x10, 0x3a, 0x03, 0xf3, - 0x17, 0x02, 0xff, 0xf7, 0xb5, 0xba, 0x00, 0xbf, 0x00, 0x66, 0xe6, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x08, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x08, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x08, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x08, 0x00, 0x00, 0x00, 0x38, 0xb5, 0x08, 0x4b, 0x59, 0xf8, 0x03, 0x30, - 0x1d, 0x68, 0x55, 0xb1, 0x06, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x1c, 0x68, - 0xe3, 0x88, 0xb4, 0xf9, 0x04, 0x20, 0x61, 0x88, 0x20, 0x88, 0xa8, 0x47, - 0x20, 0x72, 0x38, 0xbd, 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x10, 0xb4, 0x03, 0x4c, 0x59, 0xf8, 0x04, 0x40, 0xa4, 0x46, 0x5d, 0xf8, - 0x04, 0x4b, 0x60, 0x47, 0x14, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x18, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x41, - 0x58, 0x4b, 0x59, 0xf8, 0x03, 0x40, 0x58, 0x4b, 0x00, 0x25, 0xc4, 0xe9, - 0x02, 0x55, 0xc4, 0xe9, 0x04, 0x55, 0xc4, 0xe9, 0x06, 0x55, 0xc4, 0xe9, - 0x08, 0x55, 0xc4, 0xe9, 0x0a, 0x55, 0xc4, 0xe9, 0x0c, 0x55, 0xc4, 0xe9, - 0x0e, 0x55, 0xc4, 0xe9, 0x10, 0x55, 0xc4, 0xe9, 0x12, 0x55, 0xc4, 0xe9, - 0x14, 0x55, 0xc4, 0xe9, 0x16, 0x55, 0xc4, 0xe9, 0x18, 0x55, 0xc4, 0xe9, - 0x1a, 0x55, 0xc4, 0xe9, 0x1c, 0x55, 0xc4, 0xe9, 0x1e, 0x55, 0xc4, 0xe9, - 0x20, 0x55, 0xc4, 0xf8, 0x88, 0x50, 0xc4, 0xf8, 0x08, 0x51, 0x82, 0xb0, - 0x59, 0xf8, 0x03, 0x80, 0x29, 0x46, 0x4f, 0xf4, 0x80, 0x32, 0x04, 0xf5, - 0x86, 0x70, 0xc0, 0x47, 0x04, 0xf5, 0x80, 0x36, 0x3c, 0x4b, 0xc6, 0xf8, - 0x14, 0x31, 0xc6, 0xe9, 0x48, 0x53, 0x01, 0x23, 0x86, 0xf8, 0x48, 0x31, - 0x04, 0xf1, 0x10, 0x03, 0xc6, 0xf8, 0x18, 0x31, 0x04, 0xf1, 0x0c, 0x03, - 0xc6, 0xf8, 0x1c, 0x31, 0x04, 0xf1, 0x18, 0x03, 0xc6, 0xf8, 0x28, 0x31, - 0x04, 0xf1, 0x14, 0x03, 0xc6, 0xf8, 0x2c, 0x31, 0x04, 0xf1, 0x20, 0x03, - 0xc6, 0xf8, 0x34, 0x31, 0x04, 0xf1, 0x1c, 0x03, 0xc6, 0xf8, 0x38, 0x31, - 0x04, 0xf1, 0x28, 0x03, 0xc6, 0xf8, 0x40, 0x31, 0xc6, 0xe9, 0x43, 0x55, - 0x04, 0xf1, 0x24, 0x03, 0xc6, 0xf8, 0x44, 0x31, 0x2b, 0x4b, 0xc6, 0xf8, - 0x30, 0x51, 0xc6, 0xf8, 0x3c, 0x51, 0xc6, 0xf8, 0x50, 0x51, 0x59, 0xf8, - 0x03, 0x70, 0x25, 0x60, 0x65, 0x60, 0x29, 0x46, 0x04, 0xf1, 0x8c, 0x00, - 0x7c, 0x22, 0x7c, 0x60, 0xc0, 0x47, 0x24, 0x4b, 0x9f, 0xed, 0x1f, 0x0a, - 0x59, 0xf8, 0x03, 0x20, 0xc6, 0xf8, 0x4c, 0x21, 0x4f, 0xf0, 0x7c, 0x53, - 0xfb, 0x60, 0x3b, 0x61, 0x7b, 0x61, 0xf7, 0xee, 0x00, 0x0a, 0x1e, 0x4b, - 0xc7, 0xed, 0x02, 0x0a, 0x59, 0xf8, 0x03, 0x00, 0x1c, 0x4b, 0xcd, 0xed, - 0x01, 0x0a, 0x8d, 0xed, 0x00, 0x0a, 0x59, 0xf8, 0x03, 0x40, 0x07, 0xf1, - 0x08, 0x01, 0xa0, 0x47, 0x18, 0x4b, 0xdd, 0xed, 0x01, 0x0a, 0x59, 0xf8, - 0x03, 0x00, 0x9d, 0xed, 0x00, 0x0a, 0x07, 0xf1, 0x0c, 0x01, 0xa0, 0x47, - 0x14, 0x4b, 0xdd, 0xed, 0x01, 0x0a, 0x59, 0xf8, 0x03, 0x00, 0x9d, 0xed, - 0x00, 0x0a, 0x07, 0xf1, 0x10, 0x01, 0xa0, 0x47, 0x10, 0x4b, 0xdd, 0xed, - 0x01, 0x0a, 0x59, 0xf8, 0x03, 0x00, 0x9d, 0xed, 0x00, 0x0a, 0x07, 0xf1, - 0x14, 0x01, 0x23, 0x46, 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x41, 0x18, 0x47, - 0x01, 0x00, 0x80, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4d, - 0x2d, 0xed, 0x02, 0x8b, 0x87, 0x4b, 0x88, 0x4a, 0x59, 0xf8, 0x03, 0x80, - 0x87, 0x4b, 0x59, 0xf8, 0x02, 0x00, 0x59, 0xf8, 0x03, 0x10, 0x86, 0x4b, - 0x86, 0x4a, 0x59, 0xf8, 0x03, 0x30, 0xd8, 0xed, 0x03, 0x6a, 0x98, 0xed, - 0x04, 0x7a, 0x09, 0x68, 0xd8, 0xed, 0x05, 0x7a, 0x00, 0x68, 0x59, 0xf8, - 0x02, 0x20, 0xd0, 0xf8, 0x00, 0xa0, 0x1e, 0x68, 0xd1, 0xf8, 0x00, 0xb0, - 0xd8, 0xf8, 0x04, 0x70, 0x15, 0x68, 0x9f, 0xed, 0x76, 0x8a, 0xb0, 0xee, - 0x66, 0x6a, 0xf0, 0xee, 0x47, 0x6a, 0xb0, 0xee, 0x67, 0x7a, 0x8a, 0xb0, - 0xbe, 0xee, 0xe4, 0x6a, 0xfe, 0xee, 0xe4, 0x6a, 0xbe, 0xee, 0xe4, 0x7a, - 0xb4, 0x46, 0x59, 0x46, 0x0a, 0xf1, 0x60, 0x03, 0xcd, 0xe9, 0x06, 0x6a, - 0xcd, 0xf8, 0x14, 0xb0, 0xcd, 0xf8, 0x24, 0x80, 0xd3, 0x46, 0x8d, 0xed, - 0x02, 0x6a, 0xcd, 0xed, 0x03, 0x6a, 0x8d, 0xed, 0x04, 0x7a, 0x07, 0xf5, - 0x80, 0x34, 0x08, 0x95, 0x01, 0x91, 0x2e, 0x46, 0x9a, 0x46, 0xe0, 0x46, - 0xfb, 0xec, 0x01, 0x7a, 0xfe, 0xee, 0xe4, 0x7a, 0x17, 0xee, 0x90, 0x3a, - 0x03, 0xf3, 0x17, 0x03, 0xfb, 0x65, 0x01, 0x9b, 0xf3, 0xec, 0x01, 0x7a, - 0xfe, 0xee, 0xe4, 0x7a, 0x01, 0x93, 0x17, 0xee, 0x90, 0x3a, 0x03, 0xf3, - 0x17, 0x03, 0x3b, 0x66, 0x02, 0x9b, 0x03, 0xf3, 0x17, 0x03, 0xfb, 0x64, - 0x03, 0x9b, 0x03, 0xf3, 0x17, 0x03, 0x3b, 0x65, 0x04, 0x9b, 0x03, 0xf3, - 0x17, 0x03, 0x7b, 0x65, 0x38, 0x46, 0xd4, 0xf8, 0x4c, 0x31, 0x98, 0x47, - 0x4f, 0xf0, 0x00, 0x03, 0x84, 0xf8, 0x48, 0x31, 0xd4, 0xf8, 0x1c, 0x31, - 0x19, 0x68, 0xd4, 0xf8, 0x0c, 0x31, 0x01, 0x3b, 0xc4, 0xf8, 0x0c, 0x31, - 0xd4, 0xe9, 0x44, 0x23, 0x09, 0x12, 0x82, 0xfb, 0x01, 0x0c, 0x4f, 0xea, - 0x4c, 0x2c, 0x4c, 0xea, 0xd0, 0x50, 0x03, 0x44, 0x03, 0xf3, 0x17, 0x03, - 0x83, 0xfb, 0x01, 0x0c, 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, 0xd0, 0x50, - 0xc4, 0xf8, 0x14, 0x31, 0x12, 0x1a, 0x02, 0xf3, 0x17, 0x02, 0xd4, 0xf8, - 0x2c, 0x31, 0xc4, 0xf8, 0x10, 0x21, 0x18, 0x68, 0xd4, 0xe9, 0x48, 0x23, - 0x00, 0x12, 0x82, 0xfb, 0x00, 0x1c, 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, - 0xd1, 0x51, 0x0b, 0x44, 0x03, 0xf3, 0x17, 0x03, 0x83, 0xfb, 0x00, 0x1c, - 0x4f, 0xea, 0x4c, 0x2c, 0x4c, 0xea, 0xd1, 0x51, 0xc4, 0xf8, 0x24, 0x31, - 0x52, 0x1a, 0x02, 0xf3, 0x17, 0x02, 0xd4, 0xf8, 0x34, 0x31, 0xc4, 0xf8, - 0x20, 0x21, 0x18, 0x68, 0xd4, 0xf8, 0x40, 0x31, 0x2e, 0x4a, 0x19, 0x68, - 0xd4, 0xf8, 0x38, 0x31, 0xd7, 0xed, 0x19, 0x7a, 0xd4, 0xf8, 0x30, 0x51, - 0x40, 0x15, 0x49, 0x15, 0x42, 0xfa, 0x00, 0xf0, 0x42, 0xfa, 0x01, 0xf1, - 0x1a, 0x68, 0xd4, 0xf8, 0x44, 0x31, 0xb8, 0xee, 0xe7, 0x7a, 0xa5, 0xeb, - 0x22, 0x32, 0xd7, 0xed, 0x1a, 0x7a, 0x1b, 0x68, 0x02, 0x40, 0xc4, 0xf8, - 0x30, 0x21, 0xf8, 0xee, 0xe7, 0x7a, 0xd4, 0xf8, 0x3c, 0x21, 0x27, 0xee, - 0x08, 0x7a, 0x67, 0xee, 0x88, 0x7a, 0xa2, 0xeb, 0x23, 0x33, 0x19, 0x40, - 0xd3, 0x45, 0xc4, 0xf8, 0x3c, 0x11, 0xa6, 0xec, 0x01, 0x7a, 0xe8, 0xec, - 0x01, 0x7a, 0x7f, 0xf4, 0x67, 0xaf, 0xdd, 0xe9, 0x07, 0xa5, 0xdd, 0xe9, - 0x05, 0xb6, 0xdd, 0xf8, 0x24, 0x80, 0xf7, 0xee, 0x00, 0x6a, 0x05, 0xf1, - 0x60, 0x03, 0x98, 0xed, 0x02, 0x7a, 0xfa, 0xec, 0x01, 0x5a, 0x95, 0xed, - 0x00, 0x6a, 0x76, 0xee, 0xc7, 0x7a, 0x67, 0xee, 0xa5, 0x7a, 0xe6, 0xee, - 0x07, 0x7a, 0xe5, 0xec, 0x01, 0x7a, 0x98, 0xed, 0x02, 0x7a, 0xfb, 0xec, - 0x01, 0x5a, 0x96, 0xed, 0x00, 0x6a, 0x76, 0xee, 0xc7, 0x7a, 0xab, 0x42, - 0x67, 0xee, 0xa5, 0x7a, 0xe6, 0xee, 0x07, 0x7a, 0xe6, 0xec, 0x01, 0x7a, - 0xe1, 0xd1, 0x0a, 0xb0, 0xbd, 0xec, 0x02, 0x8b, 0xbd, 0xe8, 0xf0, 0x8d, - 0x00, 0x00, 0x00, 0x34, 0xff, 0xff, 0x3f, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x44, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x10, 0x4a, 0x10, 0x4b, 0x59, 0xf8, - 0x02, 0x60, 0x59, 0xf8, 0x03, 0x50, 0x76, 0x1b, 0xb6, 0x10, 0x06, 0xd0, - 0x00, 0x24, 0x55, 0xf8, 0x04, 0x3b, 0x01, 0x34, 0x98, 0x47, 0xa6, 0x42, - 0xf9, 0xd1, 0x0a, 0x4a, 0x0a, 0x4b, 0x59, 0xf8, 0x02, 0x60, 0x59, 0xf8, - 0x03, 0x50, 0x76, 0x1b, 0xb6, 0x10, 0x06, 0xd0, 0x00, 0x24, 0x55, 0xf8, - 0x04, 0x3b, 0x01, 0x34, 0x98, 0x47, 0xa6, 0x42, 0xf9, 0xd1, 0x70, 0xbd, - 0x48, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x54, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, - 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0xc2, 0xfd, - 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, - 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, - 0xff, 0xf7, 0xda, 0xfd, 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, - 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, - 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0x92, 0xfe, 0xbd, 0xe8, 0x00, 0x82, - 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, - 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0xa2, 0xff, - 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, 0x44, 0x2f, 0x57, 0x00, - 0x52, 0x65, 0x76, 0x65, 0x72, 0x62, 0x00, 0x00, 0x48, 0x50, 0x00, 0x00, - 0x4c, 0x50, 0x00, 0x00 -}; -unsigned int __FX_Reverb_HP_LP_bin_len = 5140; diff --git a/app/FX/Reverb.bin b/app/FX/Reverb.bin new file mode 100644 index 0000000..a5f0787 Binary files /dev/null and b/app/FX/Reverb.bin differ diff --git a/app/FX/Reverb.cpp b/app/FX/Reverb.cpp new file mode 100644 index 0000000..f8181ef --- /dev/null +++ b/app/FX/Reverb.cpp @@ -0,0 +1,75 @@ +// Copyright (C)2021 - Eduard Heidt +// +// Author: Eduard Heidt (eh2k@gmx.de) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// + +#include "../squares-and-circles-api.h" +#include "stmlib/stmlib.h" +#include "stmlib/dsp/filter.h" +#include "clouds/dsp/fx/reverb.h" + +float raw = 1.f; +float reverb_amount = 0.75f; +float feedback = 0.5f; +float gain = 1.f; + +uint16_t buffer[16384] = {}; +clouds::Reverb fx_; + +void engine::setup() +{ + fx_.Init(buffer); + + engine::addParam("D/W", &raw); + engine::addParam("Reverb", &reverb_amount); + engine::addParam("Damp", &feedback); + engine::addParam("Gain", &gain); +} + +void engine::process() +{ + auto inputL = engine::inputBuffer<0>(); + auto inputR = engine::inputBuffer<1>(); + auto outputL = engine::outputBuffer<0>(); + auto outputR = engine::outputBuffer<1>(); + + fx_.set_amount(reverb_amount * 0.54f); + fx_.set_diffusion(0.7f); + fx_.set_time(0.35f + 0.63f * reverb_amount); + fx_.set_input_gain(gain * 0.1f); // 0.1f); + fx_.set_lp(0.6f + 0.37f * feedback); + + for (int i = 0; i < FRAME_BUFFER_SIZE; i++) + { + outputL[i] = inputL[i]; + outputR[i] = inputR[i]; + } + + fx_.Process(outputL, outputR, FRAME_BUFFER_SIZE); + + for (int i = 0; i < FRAME_BUFFER_SIZE; ++i) + { + outputL[i] = raw * outputL[i] + (1 - raw) * inputL[i]; + outputR[i] = raw * outputR[i] + (1 - raw) * inputR[i]; + } +} diff --git a/app/FX/ReverbSC.bin b/app/FX/ReverbSC.bin new file mode 100644 index 0000000..f37fdcf Binary files /dev/null and b/app/FX/ReverbSC.bin differ diff --git a/app/FX/ReverbSC.cpp b/app/FX/ReverbSC.cpp new file mode 100644 index 0000000..55485c3 --- /dev/null +++ b/app/FX/ReverbSC.cpp @@ -0,0 +1,67 @@ +// Copyright (C)2022 - Eduard Heidt +// +// Author: Eduard Heidt (eh2k@gmx.de) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// + +#include "../squares-and-circles-api.h" + +extern "C" +{ +#include "soundpipe/revsc.c" +} + +static sp_data sp_data_ = {}; +static sp_revsc sp_revsc_ = {}; +static uint8_t mem[107440]; // sp_revsc_.aux.size + +static float raw = 1.f; + +void engine::setup() +{ + sp_data_.sr = SAMPLE_RATE; + sp_data_.aux.ptr = &mem[0]; + sp_data_.aux.size = sizeof(mem); + sp_revsc_init(&sp_data_, &sp_revsc_); + + sp_revsc_.feedback = 0.97f; + sp_revsc_.lpfreq = 10000; + + engine::addParam("D/W", &raw); + engine::addParam("Feedback", &sp_revsc_.feedback); + engine::addParam("LpFreq", &sp_revsc_.lpfreq, 0, (SAMPLE_RATE / 2)); +} + +void engine::process() +{ + auto inputL = engine::inputBuffer<0>(); + auto inputR = engine::inputBuffer<1>(); + auto outputL = engine::outputBuffer<0>(); + auto outputR = engine::outputBuffer<1>(); + + for (int i = 0; i < FRAME_BUFFER_SIZE; ++i) + { + sp_revsc_compute(&sp_data_, &sp_revsc_, &inputL[i], &inputR[i], &outputL[i], &outputR[i]); + outputL[i] = raw * outputL[i] + (1 - raw) * inputL[i]; + outputR[i] = raw * outputR[i] + (1 - raw) * inputR[i]; + } +} \ No newline at end of file diff --git a/app/GND/FFT.bin b/app/GND/FFT.bin new file mode 100644 index 0000000..7583f9d Binary files /dev/null and b/app/GND/FFT.bin differ diff --git a/app/GND/FFT.cpp b/app/GND/FFT.cpp new file mode 100644 index 0000000..f813765 --- /dev/null +++ b/app/GND/FFT.cpp @@ -0,0 +1,191 @@ +// Copyright (C)2024 - E.Heidt +// +// Author: E.Heidt (eh2k@gmx.de) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// + +#include "../squares-and-circles-api.h" +#include "../lib/stmlib/utils/ring_buffer.h" + +extern "C" +{ +#include "../lib/fft/fft4g.h" +#include "../lib/fft/fft4g.c" +} + +#include +#include + +static float apmlitude = 1.f; +static int32_t band = 0; +static const char *sbands[3] = {" 16", " 32", " 64"}; + +struct Complex +{ + float re; + float im; +}; + +const size_t N = 1024; +stmlib::RingBuffer spectrum; +float w[N * 2]; +constexpr int sq_n = 32; // sqrt(N); +int ip[4 + sq_n]; // new int[(int)ceil(4.0 + sqrt((real_t)N))]; +float magnitudes[N / 2] = {}; +float window[N]; +int count = 0; + +void engine::setup() +{ + apmlitude = 1.f; + engine::addParam("_Scale", &apmlitude, 0.f, 2.f); + engine::addParam("_Bands", &band, 0, 2, sbands); + engine::setMode(ENGINE_MODE_COMPACT); + ip[0] = 0; // indicate that re-initialization is necesarry + spectrum.Init(); + + for (int n = 0; n < N; n++) + window[n] = 0.5f * (1.f - cosf((2.f * M_PI * n) / N)); +} + +void set(float *target, const float *src, float amp, float offset) +{ + for (size_t i = 0; i < FRAME_BUFFER_SIZE; i++) + target[i] = src[i] * amp + offset; +} + +void engine::process() +{ + const float m_offset = log10f(N); + + auto inputL = engine::inputBuffer<0>(); + auto outputL = engine::outputBuffer<0>(); + set(outputL, inputL, apmlitude, 0); + + for (size_t i = 0; i < FRAME_BUFFER_SIZE; i += 2) + { + if (spectrum.readable() == (N / 2)) + { + float *buff = const_cast(&spectrum.ImmediateReadPtr(0)->re); + rdft(N, 1, buff, ip, w); + + // for some reason, this routine returns the second half of the spectrum (the complex conjugate + // values of the desired first half), so we need to take the complex conjugates: + for (int n = 3; n < N; n += 2) // start at n=3 (imaginary part of the first bin after DC) + buff[n] = -buff[n]; + + magnitudes[0] = buff[0]; + + for (int k = 1; k < N / 2; k++) + { + float re = buff[2 * k]; + float im = buff[2 * k + 1]; + magnitudes[k] += sqrtf(re * re + im * im); + // auto db = sqrtf(re * re + im * im); + // auto db = 20 * log10f(db); + // auto db = logf(re * re + im * im); + // magnitudes[k] = db; + } + count++; + spectrum.Flush(); + } + else + { + float h = (float)window[spectrum.readable() * 2]; + float h2 = (float)window[spectrum.readable() * 2 + 1]; + Complex v = { + outputL[i] * h / sq_n, + outputL[i + 1] * h2 / sq_n, + }; + spectrum.Overwrite(v); + } + } +} + +float fft_read(int s, int e) +{ + float sum = 0; + while (s <= e) + sum += magnitudes[s++]; + + return (sum / count); +} + +float level2[64]; +float level[64]; + +void draw_spectrum(int yy, int hh) +{ + float logN2 = logf(N / 2); + + int bands = 16; + if (band == 1) + bands = 32; + else if (band == 2) + bands = 64; + + int to = int(expf(logN2 * 0 / bands)); + for (int b = 0; b < bands; b++) + { + int fr = to; + to = int(expf(logN2 * (b + 1) / bands)); + + if (level2[b] > 0) + level2[b] -= 0.1f; + else + level2[b] = 0; + + level[b] = 10.f / hh + log10f(fft_read(fr, to)); + level2[b] = std::max(level[b], level2[b]); + } + + int w = (128 / bands); + for (size_t i = 0; i < bands; i++) + { + auto y = level[i] * hh; + gfx::fillRect(i * w, yy - y, w - 1, y); + + y = level2[i] * hh; + gfx::fillRect(i * w, yy - 1 - y, w - 1, 1); + } + + // uint32_t ylim = 58; + // for (uint32_t i = 0; i < 128; i++) + // { + // auto y = 40 + -(magnitudes[i] / 2); + // gfx::drawLine(i, 58, i, y); + // }; + + for (uint32_t i = 0; i < (N / 2); i++) + magnitudes[i] = 0; + count = 0; +} + +void engine::draw() +{ + draw_spectrum(60, 32); +} +void engine::screensaver() +{ + gfx::clearRect(0, 0, 128, 64); + draw_spectrum(64, 48); +} \ No newline at end of file diff --git a/app/GND/Scope.bin b/app/GND/Scope.bin new file mode 100644 index 0000000..3d08637 Binary files /dev/null and b/app/GND/Scope.bin differ diff --git a/app/GND/Scope.cpp b/app/GND/Scope.cpp new file mode 100644 index 0000000..c7fdc40 --- /dev/null +++ b/app/GND/Scope.cpp @@ -0,0 +1,85 @@ +// Copyright (C)2024 - E.Heidt +// +// Author: E.Heidt (eh2k@gmx.de) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// + +#include "../squares-and-circles-api.h" + +static float apmlitude = 1.f; +static float offset = 0.f; +static float input = 0.f; +static float output = 0.f; + +uint32_t i = 0; +static int8_t scope[128] = {}; + +void engine::setup() +{ + apmlitude = 1.f; + engine::addParam("_Scale", &apmlitude, 0.f, 2.f); + engine::addParam("_Offset", &offset, -1.f, 1.f); + engine::setMode(ENGINE_MODE_COMPACT); +} + +void push_scope(int8_t scope[128], int8_t y) +{ + scope[i++ % 128] = y; + if (i > 128) + i = 0; +} + +void set(float *target, const float *src, float amp, float offset) +{ + for (size_t i = 0; i < FRAME_BUFFER_SIZE; i++) + target[i] = src[i] * amp + offset; +} + +void engine::process() +{ + auto inputL = engine::inputBuffer<0>(); + auto outputL = engine::outputBuffer<0>(); + + input = inputL[0]; + set(outputL, inputL, apmlitude, offset); + output = outputL[0]; + + if ((engine::t() % 50) == 0) + push_scope(scope, outputL[0] * 20); +} + +void engine::draw() +{ + int y = 38; + for (int x = 0; x < 127; x++) + { + if (x % 3 == 0) + gfx::setPixel(x, y); + gfx::drawLine(x, y - scope[(i + x) % 128], x + 1, y - scope[(1 + i + x) % 128]); + } + + char tmp[64]; + sprintf(tmp, "IN:%+1.2fV", input * 5); + gfx::drawString(0, 54, tmp, 0); + sprintf(tmp, "OUT:%+1.2fV", output * 5); + gfx::drawString(64, 54, tmp, 0); +} \ No newline at end of file diff --git a/app/MIDI/Clock.bin b/app/MIDI/Clock.bin new file mode 100644 index 0000000..f44b1fe Binary files /dev/null and b/app/MIDI/Clock.bin differ diff --git a/app/MIDI/Clock.cpp b/app/MIDI/Clock.cpp new file mode 100644 index 0000000..4810f10 --- /dev/null +++ b/app/MIDI/Clock.cpp @@ -0,0 +1,92 @@ +// Copyright (C)2021 - Eduard Heidt +// +// Author: Eduard Heidt (eh2k@gmx.de) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// + +// build_flags: -fno-inline -mfloat-abi=soft -mfpu=fpv5-d16 + +#include "../squares-and-circles-api.h" +#include + +static int32_t bpm = 120; +static int32_t ppqn = 0; +static const char *ppqn_names[]{ + "4ppqn", "8ppqn", "24ppqn"}; +static int32_t offset = 0; +static int32_t impulse = 1; +static int count_down = 0; +static uint32_t next = UINT32_MAX; +static uint32_t last_t = 0; + +void engine::setup() +{ + // 24, 8 or 4 ppqn + bpm = 120; // machine::midi_bpm() / 100; + engine::addParam("@BPM\n%d", &bpm, 60, 250); + engine::addParam("@ppqn", &ppqn, 0, 2, ppqn_names); + engine::addParam("@Impulse\n%dms", &impulse, 1, 5); + engine::addParam("@Offset\n%dms", &offset, 0, 127); + engine::setMode(ENGINE_MODE_CV_OUT); +} + +uint8_t last_clk = 0; +uint8_t clk_change(uint8_t clk) +{ + if (last_clk != clk) + { + last_clk = clk; + return last_clk; + } + else + return 0; +} + +void engine::process() +{ + machine::clk_bpm(bpm * 100); + uint8_t clk = clk_change(engine::clock()); + + if (clk) + last_t = engine::t(); + + uint32_t div = ppqn == 0 ? 6 : (ppqn == 1 ? 3 : 1); + + if ((clk % div) == 1 || (ppqn > 1 && clk)) + { + next = engine::t() + (offset * 2); + } + + if (engine::t() == next) + { + next = UINT32_MAX; + count_down = (impulse * 2); + } + + int16_t a = count_down-- > 0 ? (5 * PITCH_PER_OCTAVE) : 0; + std::fill_n(engine::outputBuffer_i16<0>(), FRAME_BUFFER_SIZE, a); + std::fill_n(engine::outputBuffer_i16<1>(), FRAME_BUFFER_SIZE, a); +} + +void engine::draw() +{ +} diff --git a/app/MIDI/Monitor.bin b/app/MIDI/Monitor.bin new file mode 100644 index 0000000..fa9aa52 Binary files /dev/null and b/app/MIDI/Monitor.bin differ diff --git a/app/MIDI/Monitor.cpp b/app/MIDI/Monitor.cpp new file mode 100644 index 0000000..ad78ad9 --- /dev/null +++ b/app/MIDI/Monitor.cpp @@ -0,0 +1,87 @@ +#include "../squares-and-circles-api.h" +#include "../lib/stmlib/algorithms/voice_allocator.h" +#include + +static uint8_t voice[4] = {}; +static stmlib::VoiceAllocator allocator = {}; +static int16_t pitch = 0; +static uint8_t cc[128] = {}; + +void engine::setup() +{ + allocator.Init(); + allocator.set_size(LEN_OF(voice)); + engine::setMode(ENGINE_MODE_MIDI_IN); + for (auto &c : cc) + c = 0xFF; +} + +void engine::process() +{ +} + +void engine::draw() +{ + gfx::drawString(2, 12, "VOICE KEY", 0); + gfx::drawString(66, 12, "CONTROL", 0); + + for (int x = 0; x < 128; x += 3) + gfx::setPixel(x, 18); + + char tmp[30]; + for (size_t i = 0; i < LEN_OF(voice); i++) + { + sprintf(tmp, "#%d %4d", i, voice[i]); + gfx::drawString(2, 20 + i * 6, tmp, 0); + } + + for (int y = 12; y < 60; y += 3) + gfx::setPixel(64, y); + + int bpm = machine::clk_bpm(); + int bpm2 = ((bpm % 100) / 10); + sprintf(tmp, "clock: %3d.%d", bpm / 100, bpm2); + gfx::drawString(66, 20, tmp, 0); + + sprintf(tmp, "pitch: %4d", pitch); + gfx::drawString(66, 26, tmp, 0); + + int y = 32; + for (int i = 0; i < 128; i++) + { + if (cc[i] < 0xFF) + { + sprintf(tmp, "cc-%d: %4d", i, cc[i]); + gfx::drawString(66, y, tmp, 0); + y += 6; + } + } +} + +void engine::onMidiNote(uint8_t key, uint8_t velocity) // NoteOff: velocity == 0 +{ + if (velocity > 0) + { + auto ni = allocator.NoteOn(key); + voice[ni] = key; + } + else + { + auto ni = allocator.NoteOff(key); + voice[ni] = 0; + } +} + +void engine::onMidiPitchbend(int16_t value) +{ + pitch = value; +} + +void engine::onMidiCC(uint8_t ccc, uint8_t value) +{ + cc[ccc % 128] = value; +} + +void engine::onMidiSysex(uint8_t byte) +{ +} diff --git a/app/MIDI/VAx6.bin b/app/MIDI/VAx6.bin new file mode 100644 index 0000000..54ffdd6 Binary files /dev/null and b/app/MIDI/VAx6.bin differ diff --git a/app/MIDI/VAx6.cpp b/app/MIDI/VAx6.cpp new file mode 100644 index 0000000..55e298b --- /dev/null +++ b/app/MIDI/VAx6.cpp @@ -0,0 +1,202 @@ +// Copyright (C)2021 - E.Heidt +// +// Author: E.Heidt (eh2k@gmx.de) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// + +#include "../squares-and-circles-api.h" +#define FLASHMEM __attribute__((section(".text"))) + +// #include "../lib/plaits/dsp/engine/virtual_analog_engine.h" +// no virtual functions hack + +#define PLAITS_DSP_ENGINE_VIRTUAL_ANALOG_ENGINE_H_ + +#include "plaits/dsp/engine/engine.h" +#include "plaits/dsp/oscillator/variable_saw_oscillator.h" +#include "plaits/dsp/oscillator/variable_shape_oscillator.h" + +#define VA_VARIANT 2 + +namespace plaits +{ + class VirtualAnalogEngine + { + public: + VirtualAnalogEngine() {} + ~VirtualAnalogEngine() {} + + void Init(stmlib::BufferAllocator *allocator); + void Reset(); + void LoadUserData(const uint8_t *user_data) {} + void Render(const EngineParameters ¶meters, + float *out, + float *aux, + size_t size, + bool *already_enveloped); + + private: + float ComputeDetuning(float detune) const; + + VariableShapeOscillator primary_; + VariableShapeOscillator auxiliary_; + + VariableShapeOscillator sync_; + VariableSawOscillator variable_saw_; + + float auxiliary_amount_; + float xmod_amount_; + float *temp_buffer_; + + DISALLOW_COPY_AND_ASSIGN(VirtualAnalogEngine); + }; + +} // namespace plaits + +#include "../lib/plaits/dsp/envelope.h" +#include "../lib/stmlib/algorithms/voice_allocator.h" +#include "../lib/stmlib/utils/random.h" + +#include "stmlib/dsp/units.cc" +#include "stmlib/utils/random.cc" +#include "../lib/plaits/dsp/engine/virtual_analog_engine.cc" + +plaits::VirtualAnalogEngine voice[6] = {}; + +uint8_t buffer[LEN_OF(voice) * plaits::kMaxBlockSize * sizeof(float)] = {}; +plaits::EngineParameters parameters[LEN_OF(voice)] = {}; +plaits::LPGEnvelope lpg[LEN_OF(voice)] = {}; +bool enveloped[LEN_OF(voice)] = {}; + +stmlib::VoiceAllocator allocator; + +float timbre = 0.5f; +float morph = 0.5f; +float harmonics = 0.5f; +float pitch = 0; +float pitch_bend = 0; + +float decay = 0.5f; +float hf = 1.f; +float pan[LEN_OF(voice)] = {}; +float stereo = 0.5f; + +float voiceBuff[FRAME_BUFFER_SIZE] = {}; +float dummy[FRAME_BUFFER_SIZE] = {}; + +void engine::setup() +{ + allocator.Init(); + allocator.set_size(LEN_OF(voice)); + engine::addParam(V_OCT, &pitch); + engine::addParam("Harmo", &harmonics); + engine::addParam("Timbre", &timbre); + engine::addParam("Morph", &morph); + engine::addParam("Decay", &decay); + engine::addParam("Stereo", &stereo); + engine::setMode(ENGINE_MODE_MIDI_IN); + stmlib::BufferAllocator buffAllocator; + buffAllocator.Init(buffer, sizeof(buffer)); + + for (size_t i = 0; i < LEN_OF(voice); i++) + { + lpg[i].Init(); + voice[i].Init(&buffAllocator); + } +} + +void engine::process() +{ + auto polyBuffL = engine::outputBuffer<0>(); + auto polyBuffR = engine::outputBuffer<1>(); + + std::fill_n(polyBuffL, FRAME_BUFFER_SIZE, 0); + std::fill_n(polyBuffR, FRAME_BUFFER_SIZE, 0); + + const float short_decay = (200.0f * FRAME_BUFFER_SIZE) / SAMPLE_RATE * + stmlib::SemitonesToRatio(-96.0f * decay); + + const float decay_tail = (20.0f * FRAME_BUFFER_SIZE) / SAMPLE_RATE * + stmlib::SemitonesToRatio(-72.0f * decay + 12.0f * hf) - + short_decay; + + for (size_t i = 0; i < LEN_OF(voice); i++) + { + auto p = parameters[i]; + p.note += (pitch * 12.f) + pitch_bend; + p.timbre = timbre; + p.morph = morph; + p.harmonics = harmonics; + + voice[i].Render(p, voiceBuff, dummy, FRAME_BUFFER_SIZE, &enveloped[i]); + + lpg[i].ProcessPing(0.5f, short_decay, decay_tail, hf); + + float l = cosf(pan[i] * M_PI / 2); + float r = sinf(pan[i] * M_PI / 2); + + for (int s = 0; s < FRAME_BUFFER_SIZE; s++) + { + polyBuffL[s] += (voiceBuff[s] * lpg[i].gain()) * l; + polyBuffR[s] += (voiceBuff[s] * lpg[i].gain()) * r; + } + + parameters[i].trigger = plaits::TriggerState::TRIGGER_LOW; + } +} + +void engine::draw() +{ +} + +void engine::onMidiNote(uint8_t key, uint8_t velocity) // NoteOff: velocity == 0 +{ + if (velocity > 0) + { + auto ni = allocator.NoteOn(key); + parameters[ni].trigger = plaits::TriggerState::TRIGGER_RISING_EDGE; + parameters[ni].note = key; + parameters[ni].accent = velocity > 100; + + pan[ni] = 0.5f + stereo * (stmlib::Random::GetFloat() - 0.5f); + + lpg[ni].Trigger(); + } + else + { + allocator.NoteOff(key); + } +} + +void engine::onMidiPitchbend(int16_t pitch) +{ + pitch_bend = ((float)pitch / 8192) * 12; +} + +void engine::onMidiCC(uint8_t ccc, uint8_t value) +{ + // nothing implemented.. +} + +void engine::onMidiSysex(uint8_t byte) +{ +} \ No newline at end of file diff --git a/app/NOISE/808_squares.bin b/app/NOISE/808_squares.bin new file mode 100644 index 0000000..104858e Binary files /dev/null and b/app/NOISE/808_squares.bin differ diff --git a/app/NOISE/808_squares.bin.h b/app/NOISE/808_squares.bin.h deleted file mode 100644 index 2b6ec8b..0000000 --- a/app/NOISE/808_squares.bin.h +++ /dev/null @@ -1,181 +0,0 @@ -const uint8_t __NOISE_808_squares_bin[] FLASHMEM __attribute__((aligned(32))) = { - 0x55, 0x44, 0x4c, 0x4d, 0x12, 0x00, 0x12, 0x00, 0x94, 0x01, 0x00, 0x00, - 0xa8, 0x05, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x17, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, - 0xce, 0x00, 0x00, 0x50, 0x8d, 0x05, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x50, - 0x39, 0x05, 0x00, 0x00, 0xee, 0x00, 0x00, 0x50, 0x71, 0x05, 0x00, 0x00, - 0xf6, 0x00, 0x00, 0x50, 0x55, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x10, - 0x74, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x10, 0x74, 0x00, 0x00, 0x00, - 0x26, 0x01, 0x00, 0x10, 0x74, 0x00, 0x00, 0x00, 0x37, 0x01, 0x00, 0x10, - 0x74, 0x00, 0x00, 0x00, 0x4a, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x51, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x56, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x6e, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x8e, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x49, 0x53, - 0x45, 0x2f, 0x38, 0x30, 0x38, 0x5f, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, - 0x73, 0x00, 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, - 0x61, 0x79, 0x00, 0x5f, 0x5f, 0x75, 0x69, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00, 0x70, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x00, 0x73, 0x65, 0x74, 0x75, 0x70, 0x00, - 0x5f, 0x5f, 0x70, 0x72, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, - 0x72, 0x61, 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x00, 0x5f, 0x5f, 0x70, 0x72, - 0x65, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, - 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x00, 0x5f, - 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, - 0x00, 0x66, 0x72, 0x65, 0x65, 0x00, 0x5f, 0x5f, 0x75, 0x69, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x00, 0x61, 0x64, 0x64, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x5f, 0x69, 0x33, 0x32, 0x00, 0x61, 0x64, 0x64, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x5f, 0x66, 0x33, 0x32, 0x00, 0x5f, 0x5f, 0x63, 0x76, 0x00, - 0x5f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6c, 0x5f, 0x66, - 0x70, 0x00, 0x70, 0x6f, 0x77, 0x66, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, 0x38, 0xb5, 0x08, 0x4b, - 0x59, 0xf8, 0x03, 0x30, 0x1d, 0x68, 0x55, 0xb1, 0x06, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x1c, 0x68, 0xe3, 0x88, 0xb4, 0xf9, 0x04, 0x20, 0x61, 0x88, - 0x20, 0x88, 0xa8, 0x47, 0x20, 0x72, 0x38, 0xbd, 0x08, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x10, 0xb4, 0x03, 0x4c, 0x59, 0xf8, 0x04, 0x40, - 0xa4, 0x46, 0x5d, 0xf8, 0x04, 0x4b, 0x60, 0x47, 0x10, 0x00, 0x00, 0x00, - 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x14, 0x00, 0x00, 0x00, - 0x1d, 0x4b, 0xdf, 0xed, 0x18, 0x4a, 0x59, 0xf8, 0x03, 0x30, 0x9f, 0xed, - 0x17, 0x5a, 0xd3, 0xed, 0x00, 0x7a, 0x93, 0xed, 0x14, 0x6a, 0xd3, 0xed, - 0x13, 0x6a, 0xdf, 0xed, 0x14, 0x5a, 0x9f, 0xed, 0x14, 0x4a, 0x27, 0xee, - 0xa4, 0x7a, 0x67, 0xee, 0xa6, 0x6a, 0x67, 0xee, 0x86, 0x7a, 0x9f, 0xed, - 0x11, 0x6a, 0x27, 0xee, 0x05, 0x5a, 0x67, 0xee, 0x25, 0x5a, 0x27, 0xee, - 0x06, 0x6a, 0x66, 0xee, 0xa4, 0x6a, 0x67, 0xee, 0xa4, 0x7a, 0x27, 0xee, - 0x04, 0x7a, 0xc3, 0xed, 0x02, 0x6a, 0xc3, 0xed, 0x05, 0x7a, 0x83, 0xed, - 0x08, 0x5a, 0xc3, 0xed, 0x0b, 0x5a, 0x83, 0xed, 0x0e, 0x6a, 0x83, 0xed, - 0x11, 0x7a, 0x70, 0x47, 0x3e, 0xc3, 0xae, 0x37, 0xcd, 0x4c, 0x4d, 0x43, - 0xcd, 0xcc, 0xb8, 0x43, 0xcd, 0xac, 0x02, 0x44, 0x33, 0x33, 0xca, 0x43, - 0x18, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x40, 0x4b, 0x9f, 0xed, 0x34, 0x0a, - 0x59, 0xf8, 0x03, 0x10, 0x3e, 0x4a, 0x33, 0x48, 0x3e, 0x4b, 0x81, 0xed, - 0x02, 0x0a, 0x81, 0xed, 0x03, 0x0a, 0x48, 0x60, 0x59, 0xf8, 0x02, 0x40, - 0x59, 0xf8, 0x03, 0x00, 0x3a, 0x4b, 0x82, 0xb0, 0x59, 0xf8, 0x03, 0x50, - 0xf7, 0xee, 0x00, 0x0a, 0x04, 0xf1, 0x54, 0x01, 0xa8, 0x47, 0x37, 0x4b, - 0x37, 0x49, 0x59, 0xf8, 0x03, 0x00, 0x00, 0x22, 0x00, 0x92, 0x59, 0xf8, - 0x01, 0x60, 0x02, 0x22, 0x04, 0xf1, 0x58, 0x01, 0x06, 0x23, 0xb0, 0x47, - 0x32, 0x4b, 0xdf, 0xed, 0x23, 0x0a, 0x59, 0xf8, 0x03, 0x00, 0x9f, 0xed, - 0x22, 0x0a, 0x04, 0xf1, 0x4c, 0x01, 0xa8, 0x47, 0x2e, 0x4b, 0xdf, 0xed, - 0x20, 0x0a, 0x59, 0xf8, 0x03, 0x00, 0x9f, 0xed, 0x1f, 0x0a, 0x04, 0xf1, - 0x50, 0x01, 0xa8, 0x47, 0xd4, 0xed, 0x00, 0x7a, 0xdf, 0xed, 0x1c, 0x4a, - 0x94, 0xed, 0x14, 0x6a, 0xd4, 0xed, 0x13, 0x6a, 0x9f, 0xed, 0x1a, 0x4a, - 0x9f, 0xed, 0x1a, 0x5a, 0xdf, 0xed, 0x1a, 0x5a, 0x27, 0xee, 0xa4, 0x7a, - 0x67, 0xee, 0xa6, 0x6a, 0x67, 0xee, 0x86, 0x7a, 0x9f, 0xed, 0x17, 0x6a, - 0x27, 0xee, 0x05, 0x5a, 0x67, 0xee, 0x25, 0x5a, 0x27, 0xee, 0x06, 0x6a, - 0x66, 0xee, 0xa4, 0x6a, 0x67, 0xee, 0xa4, 0x7a, 0x27, 0xee, 0x04, 0x7a, - 0xc4, 0xed, 0x02, 0x6a, 0xc4, 0xed, 0x05, 0x7a, 0x84, 0xed, 0x08, 0x5a, - 0xc4, 0xed, 0x0b, 0x5a, 0x84, 0xed, 0x0e, 0x6a, 0x84, 0xed, 0x11, 0x7a, - 0x02, 0xb0, 0x70, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x77, 0xbe, 0x7f, 0x3f, - 0xcd, 0xcc, 0x1c, 0x44, 0xcd, 0x4c, 0x7e, 0x43, 0xcd, 0xbc, 0x8f, 0x44, - 0x33, 0xb3, 0xb3, 0x43, 0x3e, 0xc3, 0xae, 0x37, 0xcd, 0xac, 0x02, 0x44, - 0xcd, 0x4c, 0x4d, 0x43, 0xcd, 0xcc, 0xb8, 0x43, 0x33, 0x33, 0xca, 0x43, - 0x08, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x24, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0xb5, 0xa6, 0x4b, - 0xa6, 0x4a, 0x59, 0xf8, 0x03, 0x10, 0xa6, 0x4b, 0x09, 0x68, 0x59, 0xf8, - 0x02, 0x20, 0xd1, 0xed, 0x00, 0x0a, 0x59, 0xf8, 0x03, 0x30, 0x14, 0x68, - 0xb0, 0xee, 0x00, 0x0a, 0x98, 0x47, 0xa1, 0x4b, 0xdf, 0xed, 0x97, 0x5a, - 0x59, 0xf8, 0x03, 0x30, 0xdf, 0xed, 0x96, 0x3a, 0x99, 0x6d, 0x93, 0xed, - 0x13, 0x6a, 0xd3, 0xed, 0x14, 0x6a, 0x9f, 0xed, 0x94, 0x4a, 0xdf, 0xed, - 0x94, 0x4a, 0x83, 0xed, 0x00, 0x0a, 0x07, 0xee, 0x90, 0x1a, 0xf8, 0xee, - 0xe7, 0x7a, 0xb7, 0xee, 0x00, 0x7a, 0x26, 0xee, 0x25, 0x6a, 0x66, 0xee, - 0xa5, 0x6a, 0x87, 0xee, 0x27, 0x5a, 0x22, 0x46, 0x04, 0xf1, 0x60, 0x00, - 0x60, 0xee, 0x25, 0x7a, 0xdf, 0xed, 0x8a, 0x5a, 0x26, 0xee, 0x00, 0x6a, - 0x67, 0xee, 0xa3, 0x3a, 0x27, 0xee, 0x84, 0x4a, 0x67, 0xee, 0xa4, 0x4a, - 0x66, 0xee, 0x80, 0x6a, 0x67, 0xee, 0xa5, 0x7a, 0x83, 0xed, 0x02, 0x6a, - 0xdf, 0xed, 0x83, 0x5a, 0xc3, 0xed, 0x05, 0x6a, 0xc3, 0xed, 0x08, 0x3a, - 0x83, 0xed, 0x0b, 0x4a, 0xc3, 0xed, 0x0e, 0x4a, 0xc3, 0xed, 0x11, 0x7a, - 0xbf, 0xee, 0x00, 0x6a, 0xcc, 0xe0, 0xd3, 0xed, 0x01, 0x6a, 0xd3, 0xed, - 0x02, 0x7a, 0xd3, 0xed, 0x03, 0x4a, 0xf4, 0xee, 0xe6, 0x4a, 0x76, 0xee, - 0xa7, 0x6a, 0xf1, 0xee, 0x10, 0xfa, 0xf4, 0xee, 0xc7, 0x6a, 0x77, 0xfe, - 0x06, 0x7a, 0xf1, 0xee, 0x10, 0xfa, 0xc8, 0xbf, 0x76, 0xee, 0xc7, 0x6a, - 0x01, 0x29, 0xc3, 0xed, 0x01, 0x6a, 0x52, 0xed, 0x01, 0x6a, 0x77, 0xee, - 0xa6, 0x7a, 0x42, 0xed, 0x01, 0x7a, 0x00, 0xf0, 0xa3, 0x80, 0xd3, 0xed, - 0x04, 0x7a, 0xd3, 0xed, 0x05, 0x6a, 0xd3, 0xed, 0x06, 0x4a, 0x77, 0xee, - 0xa6, 0x6a, 0xf4, 0xee, 0xe7, 0x4a, 0xf1, 0xee, 0x10, 0xfa, 0xf4, 0xee, - 0xc7, 0x6a, 0x77, 0xfe, 0x06, 0x7a, 0xf1, 0xee, 0x10, 0xfa, 0xc8, 0xbf, - 0x76, 0xee, 0xc7, 0x6a, 0x02, 0x29, 0xc3, 0xed, 0x04, 0x6a, 0x52, 0xed, - 0x01, 0x6a, 0x77, 0xee, 0xa6, 0x7a, 0x42, 0xed, 0x01, 0x7a, 0x00, 0xf0, - 0x83, 0x80, 0xd3, 0xed, 0x07, 0x7a, 0xd3, 0xed, 0x08, 0x6a, 0xd3, 0xed, - 0x09, 0x4a, 0x77, 0xee, 0xa6, 0x6a, 0xf4, 0xee, 0xe4, 0x7a, 0xf1, 0xee, - 0x10, 0xfa, 0xf4, 0xee, 0xc7, 0x6a, 0x54, 0xbf, 0xf0, 0xee, 0x46, 0x7a, - 0xf0, 0xee, 0x47, 0x7a, 0xf1, 0xee, 0x10, 0xfa, 0xc8, 0xbf, 0x76, 0xee, - 0xc7, 0x6a, 0x03, 0x29, 0xc3, 0xed, 0x07, 0x6a, 0x52, 0xed, 0x01, 0x6a, - 0x77, 0xee, 0xa6, 0x7a, 0x42, 0xed, 0x01, 0x7a, 0x60, 0xd0, 0xd3, 0xed, - 0x0a, 0x7a, 0xd3, 0xed, 0x0b, 0x6a, 0xd3, 0xed, 0x0c, 0x4a, 0x77, 0xee, - 0xa6, 0x6a, 0xf4, 0xee, 0xe4, 0x7a, 0xf1, 0xee, 0x10, 0xfa, 0xf4, 0xee, - 0xc7, 0x6a, 0x54, 0xbf, 0xf0, 0xee, 0x46, 0x7a, 0xf0, 0xee, 0x47, 0x7a, - 0xf1, 0xee, 0x10, 0xfa, 0xc8, 0xbf, 0x76, 0xee, 0xc7, 0x6a, 0x04, 0x29, - 0xc3, 0xed, 0x0a, 0x6a, 0x52, 0xed, 0x01, 0x6a, 0x77, 0xee, 0xa6, 0x7a, - 0x42, 0xed, 0x01, 0x7a, 0x3e, 0xd0, 0xd3, 0xed, 0x0d, 0x6a, 0xd3, 0xed, - 0x0e, 0x7a, 0xd3, 0xed, 0x0f, 0x4a, 0xf4, 0xee, 0xe4, 0x6a, 0x76, 0xee, - 0xa7, 0x6a, 0xf1, 0xee, 0x10, 0xfa, 0xf4, 0xee, 0xc7, 0x6a, 0x54, 0xbf, - 0xf0, 0xee, 0x46, 0x7a, 0xf0, 0xee, 0x47, 0x7a, 0xf1, 0xee, 0x10, 0xfa, - 0xc8, 0xbf, 0x76, 0xee, 0xc7, 0x6a, 0x05, 0x29, 0xc3, 0xed, 0x0d, 0x6a, - 0x52, 0xed, 0x01, 0x6a, 0x77, 0xee, 0xa6, 0x7a, 0x42, 0xed, 0x01, 0x7a, - 0x1c, 0xd0, 0xd3, 0xed, 0x10, 0x6a, 0xd3, 0xed, 0x11, 0x7a, 0xd3, 0xed, - 0x12, 0x4a, 0xf4, 0xee, 0xe6, 0x4a, 0x76, 0xee, 0xa7, 0x6a, 0xf1, 0xee, - 0x10, 0xfa, 0xf4, 0xee, 0xc7, 0x6a, 0x77, 0xfe, 0x06, 0x7a, 0xf1, 0xee, - 0x10, 0xfa, 0xc8, 0xbf, 0x76, 0xee, 0xc7, 0x6a, 0xc3, 0xed, 0x10, 0x6a, - 0x52, 0xed, 0x01, 0x6a, 0x77, 0xee, 0xa6, 0x7a, 0x42, 0xed, 0x01, 0x7a, - 0xd3, 0xed, 0x15, 0x6a, 0x65, 0xee, 0x26, 0x6a, 0x82, 0x42, 0x66, 0xee, - 0xa7, 0x7a, 0x42, 0xed, 0x01, 0x7a, 0x07, 0xd0, 0xe2, 0xec, 0x01, 0x5a, - 0x00, 0x29, 0x7f, 0xf4, 0x2e, 0xaf, 0xf0, 0xee, 0x65, 0x7a, 0xed, 0xe7, - 0x16, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0xd3, 0xed, 0x02, 0x6a, 0x93, 0xed, - 0x03, 0x7a, 0x93, 0xed, 0x01, 0x6a, 0xf0, 0xee, 0x66, 0x7a, 0xd6, 0xee, - 0x07, 0x7a, 0xd4, 0xed, 0x00, 0x6a, 0x37, 0xee, 0xa6, 0x7a, 0xa4, 0xec, - 0x01, 0x7a, 0x84, 0x42, 0xf3, 0xd1, 0xc3, 0xed, 0x02, 0x6a, 0x83, 0xed, - 0x03, 0x7a, 0x10, 0xbd, 0x3e, 0xc3, 0xae, 0x37, 0xcd, 0x4c, 0x4d, 0x43, - 0xcd, 0xcc, 0xb8, 0x43, 0x33, 0x33, 0xca, 0x43, 0xcd, 0xac, 0x02, 0x44, - 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x70, 0xb5, 0x10, 0x4a, 0x10, 0x4b, 0x59, 0xf8, 0x02, 0x60, 0x59, 0xf8, - 0x03, 0x50, 0x76, 0x1b, 0xb6, 0x10, 0x06, 0xd0, 0x00, 0x24, 0x55, 0xf8, - 0x04, 0x3b, 0x01, 0x34, 0x98, 0x47, 0xa6, 0x42, 0xf9, 0xd1, 0x0a, 0x4a, - 0x0a, 0x4b, 0x59, 0xf8, 0x02, 0x60, 0x59, 0xf8, 0x03, 0x50, 0x76, 0x1b, - 0xb6, 0x10, 0x06, 0xd0, 0x00, 0x24, 0x55, 0xf8, 0x04, 0x3b, 0x01, 0x34, - 0x98, 0x47, 0xa6, 0x42, 0xf9, 0xd1, 0x70, 0xbd, 0x38, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, - 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, - 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0x7e, 0xfd, 0xbd, 0xe8, 0x00, 0x82, - 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, - 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0xd4, 0xfd, - 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, - 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, - 0xff, 0xf7, 0x58, 0xfe, 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, - 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, - 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0xa2, 0xff, 0xbd, 0xe8, 0x00, 0x82, - 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x07, 0x44, - 0x00, 0x00, 0x48, 0x44, 0x00, 0x00, 0x80, 0x3f, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x00, 0x00, 0x00, - 0x40, 0x4e, 0x00, 0x00, 0x46, 0x30, 0x00, 0x00, 0x46, 0x31, 0x00, 0x00 -}; -unsigned int __NOISE_808_squares_bin_len = 2136; diff --git a/app/NOISE/NES.bin b/app/NOISE/NES.bin new file mode 100644 index 0000000..3ee368f Binary files /dev/null and b/app/NOISE/NES.bin differ diff --git a/app/NOISE/NES.bin.h b/app/NOISE/NES.bin.h deleted file mode 100644 index 97d5ce7..0000000 --- a/app/NOISE/NES.bin.h +++ /dev/null @@ -1,179 +0,0 @@ -const uint8_t __NOISE_NES_bin[] FLASHMEM __attribute__((aligned(32))) = { - 0x55, 0x44, 0x4c, 0x4d, 0x12, 0x00, 0x13, 0x00, 0xa8, 0x01, 0x00, 0x00, - 0x7c, 0x05, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, - 0x2a, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, - 0xcc, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x50, - 0xf1, 0x04, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x50, 0x81, 0x04, 0x00, 0x00, - 0xf6, 0x00, 0x00, 0x50, 0xd5, 0x04, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x50, - 0xb9, 0x04, 0x00, 0x00, 0x03, 0x01, 0x00, 0x50, 0x9d, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x54, 0x00, 0x00, 0x00, 0x09, 0x01, 0x00, 0x10, 0x60, 0x00, 0x00, 0x00, - 0x1d, 0x01, 0x00, 0x10, 0x60, 0x00, 0x00, 0x00, 0x33, 0x01, 0x00, 0x10, - 0x64, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x10, 0x60, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x57, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x5e, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x63, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x7b, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x96, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x9f, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x40, 0x0d, 0x05, 0x00, 0x00, 0x4e, 0x4f, 0x49, 0x53, - 0x45, 0x2f, 0x4e, 0x45, 0x53, 0x00, 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, - 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x00, 0x5f, 0x5f, 0x75, 0x69, 0x5f, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, - 0x72, 0x00, 0x64, 0x72, 0x61, 0x77, 0x00, 0x70, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x00, 0x73, 0x65, 0x74, 0x75, 0x70, 0x00, 0x5f, 0x5f, 0x70, - 0x72, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, - 0x5f, 0x65, 0x6e, 0x64, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x65, 0x69, 0x6e, - 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x00, 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, - 0x72, 0x61, 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x00, 0x5f, 0x5f, 0x69, 0x6e, - 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x00, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x66, 0x72, - 0x65, 0x65, 0x00, 0x5f, 0x5f, 0x75, 0x69, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x00, 0x61, 0x64, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x69, - 0x33, 0x32, 0x00, 0x61, 0x64, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, - 0x66, 0x33, 0x32, 0x00, 0x5f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x5f, 0x6c, 0x5f, 0x66, 0x70, 0x00, 0x64, 0x72, 0x61, 0x77, 0x52, 0x65, - 0x63, 0x74, 0x00, 0x66, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x63, 0x74, 0x00, - 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, - 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, - 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, - 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x04, 0x00, 0x00, 0x00, - 0x38, 0xb5, 0x08, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x1d, 0x68, 0x55, 0xb1, - 0x06, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x1c, 0x68, 0xe3, 0x88, 0xb4, 0xf9, - 0x04, 0x20, 0x61, 0x88, 0x20, 0x88, 0xa8, 0x47, 0x20, 0x72, 0x38, 0xbd, - 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x10, 0xb4, 0x03, 0x4c, - 0x59, 0xf8, 0x04, 0x40, 0xa4, 0x46, 0x5d, 0xf8, 0x04, 0x4b, 0x60, 0x47, - 0x10, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x14, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x18, 0x4a, 0x18, 0x4b, 0x19, 0x4c, - 0x59, 0xf8, 0x02, 0x10, 0x59, 0xf8, 0x03, 0x00, 0x82, 0xb0, 0x00, 0x25, - 0x00, 0x95, 0x59, 0xf8, 0x04, 0x60, 0x2a, 0x46, 0x0f, 0x23, 0xb0, 0x47, - 0x13, 0x4a, 0x14, 0x4b, 0x59, 0xf8, 0x02, 0x40, 0x59, 0xf8, 0x03, 0x00, - 0x00, 0x95, 0x2a, 0x46, 0x21, 0x1d, 0x0f, 0x23, 0xb0, 0x47, 0x10, 0x4a, - 0x04, 0xf1, 0x08, 0x01, 0x59, 0xf8, 0x02, 0x00, 0x00, 0x95, 0x2a, 0x46, - 0x01, 0x23, 0xb0, 0x47, 0x04, 0x4a, 0x05, 0x49, 0xe1, 0x60, 0x00, 0x23, - 0x23, 0x66, 0x63, 0x66, 0xe2, 0x65, 0x02, 0xb0, 0x70, 0xbd, 0x00, 0xbf, - 0x77, 0xbe, 0x7f, 0x3f, 0x01, 0x08, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4d, - 0x4b, 0x4b, 0x4c, 0x4a, 0x59, 0xf8, 0x03, 0xc0, 0xdf, 0xed, 0x46, 0x7a, - 0x9c, 0xf8, 0x04, 0x30, 0x9c, 0xf8, 0x08, 0x80, 0x8c, 0xf8, 0x0d, 0x30, - 0x8c, 0xf8, 0x0c, 0x80, 0x59, 0xf8, 0x02, 0x20, 0xbc, 0xf8, 0x0e, 0xe0, - 0x14, 0x68, 0x44, 0x4a, 0x9f, 0xed, 0x3f, 0x6a, 0x59, 0xf8, 0x02, 0x20, - 0xbc, 0xf8, 0x10, 0x00, 0xd2, 0xed, 0x00, 0x5a, 0x9f, 0xed, 0x3c, 0x5a, - 0xf8, 0xee, 0xe5, 0x5a, 0x03, 0xf0, 0x0f, 0x06, 0x08, 0x36, 0x00, 0x27, - 0xdc, 0xf8, 0x18, 0x30, 0x65, 0xee, 0xa7, 0x5a, 0x0c, 0xeb, 0x46, 0x06, - 0x21, 0x46, 0x04, 0xf1, 0x60, 0x05, 0xba, 0x46, 0x0e, 0xf0, 0x01, 0x02, - 0xdc, 0xed, 0x05, 0x7a, 0xf7, 0xee, 0x00, 0x6a, 0x02, 0xe0, 0x13, 0xf0, - 0x01, 0x0f, 0x35, 0xd0, 0xb0, 0xee, 0x67, 0x7a, 0xb4, 0xee, 0xe6, 0x7a, - 0xf1, 0xee, 0x10, 0xfa, 0x77, 0xee, 0xe6, 0x7a, 0x03, 0xf1, 0x01, 0x03, - 0xf1, 0xd5, 0x37, 0xee, 0x06, 0x7a, 0x8c, 0xed, 0x05, 0x7a, 0x6a, 0xbb, - 0xe1, 0xec, 0x01, 0x5a, 0xa9, 0x42, 0xe3, 0xd1, 0xcc, 0xf8, 0x18, 0x30, - 0xba, 0xf1, 0x00, 0x0f, 0x01, 0xd0, 0xac, 0xf8, 0x10, 0x00, 0x0f, 0xb1, - 0xac, 0xf8, 0x0e, 0xe0, 0xdc, 0xed, 0x18, 0x6a, 0x9c, 0xed, 0x19, 0x7a, - 0x9c, 0xed, 0x17, 0x6a, 0xf0, 0xee, 0x66, 0x7a, 0xd7, 0xee, 0x06, 0x7a, - 0xd4, 0xed, 0x00, 0x6a, 0x36, 0xee, 0xa7, 0x7a, 0xa4, 0xec, 0x01, 0x7a, - 0xa5, 0x42, 0xf3, 0xd1, 0xcc, 0xed, 0x18, 0x6a, 0x8c, 0xed, 0x19, 0x7a, - 0xbd, 0xe8, 0xf0, 0x8d, 0x00, 0xf1, 0xff, 0x3a, 0x48, 0xb1, 0x1f, 0xfa, - 0x8a, 0xf0, 0x4f, 0xf0, 0x01, 0x0a, 0xc1, 0xe7, 0xa1, 0xec, 0x01, 0x5a, - 0x8d, 0x42, 0xb5, 0xd1, 0xd0, 0xe7, 0xb0, 0x89, 0x92, 0xb2, 0xb8, 0xf1, - 0x00, 0x0f, 0x0b, 0xd1, 0xce, 0xf3, 0x80, 0x1b, 0x4f, 0xea, 0x5e, 0x0a, - 0x82, 0xea, 0x0b, 0x02, 0x01, 0x27, 0x4a, 0xea, 0x82, 0x3e, 0x0a, 0xea, - 0x07, 0x02, 0xe6, 0xe7, 0x4f, 0xea, 0x5e, 0x0a, 0xce, 0xf3, 0x40, 0x0b, - 0xf2, 0xe7, 0x00, 0xbf, 0x89, 0x88, 0x88, 0x3d, 0xd3, 0x25, 0x11, 0x42, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x73, 0x4a, 0x0e, 0x23, 0x59, 0xf8, - 0x02, 0x40, 0x25, 0x21, 0x2f, 0x22, 0x4b, 0x20, 0xa0, 0x47, 0x70, 0x4b, - 0x59, 0xf8, 0x03, 0x40, 0xe3, 0x89, 0xd9, 0x07, 0x2e, 0xd4, 0xe3, 0x89, - 0x9a, 0x07, 0x36, 0xd4, 0xe3, 0x89, 0x5b, 0x07, 0x3e, 0xd4, 0xe3, 0x89, - 0x1e, 0x07, 0x46, 0xd4, 0xe3, 0x89, 0xdd, 0x06, 0x4e, 0xd4, 0xe3, 0x89, - 0x98, 0x06, 0x56, 0xd4, 0xe3, 0x89, 0x59, 0x06, 0x5e, 0xd4, 0xe3, 0x89, - 0x1a, 0x06, 0x66, 0xd4, 0xe3, 0x89, 0xdb, 0x05, 0x6e, 0xd4, 0xe3, 0x89, - 0x9e, 0x05, 0x76, 0xd4, 0xe3, 0x89, 0x5d, 0x05, 0x7e, 0xd4, 0xe3, 0x89, - 0x18, 0x05, 0x00, 0xf1, 0x87, 0x80, 0xe3, 0x89, 0xd9, 0x04, 0x00, 0xf1, - 0x8f, 0x80, 0xe3, 0x89, 0x9a, 0x04, 0x00, 0xf1, 0x97, 0x80, 0xe3, 0x89, - 0x5b, 0x04, 0x00, 0xf1, 0x9f, 0x80, 0x70, 0xbd, 0x56, 0x4d, 0x0c, 0x23, - 0x03, 0x22, 0x59, 0xf8, 0x05, 0x50, 0x26, 0x21, 0x4c, 0x20, 0xa8, 0x47, - 0xe3, 0x89, 0x9a, 0x07, 0xc8, 0xd5, 0x51, 0x4d, 0x0c, 0x23, 0x59, 0xf8, - 0x05, 0x50, 0x03, 0x22, 0x26, 0x21, 0x4f, 0x20, 0xa8, 0x47, 0xe3, 0x89, - 0x5b, 0x07, 0xc0, 0xd5, 0x4b, 0x4d, 0x0c, 0x23, 0x59, 0xf8, 0x05, 0x50, - 0x03, 0x22, 0x26, 0x21, 0x52, 0x20, 0xa8, 0x47, 0xe3, 0x89, 0x1e, 0x07, - 0xb8, 0xd5, 0x46, 0x4d, 0x0c, 0x23, 0x59, 0xf8, 0x05, 0x50, 0x03, 0x22, - 0x26, 0x21, 0x55, 0x20, 0xa8, 0x47, 0xe3, 0x89, 0xdd, 0x06, 0xb0, 0xd5, - 0x40, 0x4d, 0x0c, 0x23, 0x58, 0x20, 0x59, 0xf8, 0x05, 0x50, 0x03, 0x22, - 0x26, 0x21, 0xa8, 0x47, 0xe3, 0x89, 0x98, 0x06, 0xa8, 0xd5, 0x3b, 0x4d, - 0x0c, 0x23, 0x26, 0x21, 0x59, 0xf8, 0x05, 0x50, 0x03, 0x22, 0x5b, 0x20, - 0xa8, 0x47, 0xe3, 0x89, 0x59, 0x06, 0xa0, 0xd5, 0x35, 0x4d, 0x0c, 0x23, - 0x03, 0x22, 0x59, 0xf8, 0x05, 0x50, 0x26, 0x21, 0x5e, 0x20, 0xa8, 0x47, - 0xe3, 0x89, 0x1a, 0x06, 0x98, 0xd5, 0x30, 0x4d, 0x0c, 0x23, 0x59, 0xf8, - 0x05, 0x50, 0x03, 0x22, 0x26, 0x21, 0x61, 0x20, 0xa8, 0x47, 0xe3, 0x89, - 0xdb, 0x05, 0x90, 0xd5, 0x2a, 0x4d, 0x0c, 0x23, 0x59, 0xf8, 0x05, 0x50, - 0x03, 0x22, 0x26, 0x21, 0x64, 0x20, 0xa8, 0x47, 0xe3, 0x89, 0x9e, 0x05, - 0x88, 0xd5, 0x25, 0x4d, 0x0c, 0x23, 0x59, 0xf8, 0x05, 0x50, 0x03, 0x22, - 0x26, 0x21, 0x67, 0x20, 0xa8, 0x47, 0xe3, 0x89, 0x5d, 0x05, 0x80, 0xd5, - 0x1f, 0x4d, 0x0c, 0x23, 0x6a, 0x20, 0x59, 0xf8, 0x05, 0x50, 0x03, 0x22, - 0x26, 0x21, 0xa8, 0x47, 0xe3, 0x89, 0x18, 0x05, 0x7f, 0xf5, 0x79, 0xaf, - 0x19, 0x4d, 0x0c, 0x23, 0x26, 0x21, 0x59, 0xf8, 0x05, 0x50, 0x03, 0x22, - 0x6d, 0x20, 0xa8, 0x47, 0xe3, 0x89, 0xd9, 0x04, 0x7f, 0xf5, 0x71, 0xaf, - 0x13, 0x4d, 0x0c, 0x23, 0x03, 0x22, 0x59, 0xf8, 0x05, 0x50, 0x26, 0x21, - 0x70, 0x20, 0xa8, 0x47, 0xe3, 0x89, 0x9a, 0x04, 0x7f, 0xf5, 0x69, 0xaf, - 0x0d, 0x4d, 0x0c, 0x23, 0x59, 0xf8, 0x05, 0x50, 0x03, 0x22, 0x26, 0x21, - 0x73, 0x20, 0xa8, 0x47, 0xe3, 0x89, 0x5b, 0x04, 0x7f, 0xf5, 0x61, 0xaf, - 0x07, 0x4a, 0x59, 0xf8, 0x02, 0x40, 0x0c, 0x23, 0xa4, 0x46, 0x03, 0x22, - 0xbd, 0xe8, 0x70, 0x40, 0x26, 0x21, 0x76, 0x20, 0x60, 0x47, 0x00, 0xbf, - 0x2c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x70, 0xb5, 0x10, 0x4a, 0x10, 0x4b, 0x59, 0xf8, 0x02, 0x60, 0x59, 0xf8, - 0x03, 0x50, 0x76, 0x1b, 0xb6, 0x10, 0x06, 0xd0, 0x00, 0x24, 0x55, 0xf8, - 0x04, 0x3b, 0x01, 0x34, 0x98, 0x47, 0xa6, 0x42, 0xf9, 0xd1, 0x0a, 0x4a, - 0x0a, 0x4b, 0x59, 0xf8, 0x02, 0x60, 0x59, 0xf8, 0x03, 0x50, 0x76, 0x1b, - 0xb6, 0x10, 0x06, 0xd0, 0x00, 0x24, 0x55, 0xf8, 0x04, 0x3b, 0x01, 0x34, - 0x98, 0x47, 0xa6, 0x42, 0xf9, 0xd1, 0x70, 0xbd, 0x34, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, - 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0xda, 0xfd, 0xbd, 0xe8, 0x00, 0x82, - 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, - 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0xf2, 0xfd, - 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, - 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, - 0xff, 0xf7, 0x22, 0xfe, 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, - 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, - 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0xb4, 0xfe, 0xbd, 0xe8, 0x00, 0x82, - 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, - 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0x94, 0xff, - 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0xf0, 0x4d, - 0x18, 0x4b, 0x59, 0xf8, 0x03, 0x60, 0x18, 0x4b, 0x00, 0x22, 0x00, 0x21, - 0x32, 0x82, 0x71, 0x61, 0xb2, 0x61, 0x59, 0xf8, 0x03, 0x30, 0x9c, 0x46, - 0x03, 0xf1, 0x20, 0x04, 0xbc, 0xe8, 0x0f, 0x00, 0x06, 0xf1, 0x1c, 0x05, - 0x0f, 0xc5, 0x9c, 0xe8, 0x0f, 0x00, 0x85, 0xe8, 0x0f, 0x00, 0x0f, 0xcc, - 0x06, 0xf1, 0x3c, 0x0e, 0xae, 0xe8, 0x0f, 0x00, 0x37, 0x46, 0x94, 0xe8, - 0x0f, 0x00, 0x40, 0xf6, 0x01, 0x0b, 0x27, 0xf8, 0x0c, 0xbf, 0x4f, 0xf0, - 0x01, 0x08, 0x4f, 0xf0, 0x08, 0x0a, 0x47, 0xea, 0x08, 0x07, 0x8e, 0xe8, - 0x0f, 0x00, 0xc6, 0xf8, 0x04, 0xa0, 0xf7, 0x81, 0xc6, 0xf8, 0x08, 0x80, - 0xbd, 0xe8, 0xf0, 0x8d, 0x08, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, - 0x40, 0x00, 0x60, 0x00, 0x80, 0x00, 0xa0, 0x00, 0xca, 0x00, 0xfe, 0x00, - 0x7c, 0x01, 0xfc, 0x01, 0xfa, 0x02, 0xf8, 0x03, 0xf2, 0x07, 0xe4, 0x0f, - 0x04, 0x00, 0x08, 0x00, 0x0e, 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x58, 0x00, - 0x76, 0x00, 0x94, 0x00, 0xbc, 0x00, 0xec, 0x00, 0x62, 0x01, 0xd8, 0x01, - 0xc4, 0x02, 0xb0, 0x03, 0x62, 0x07, 0xc2, 0x0e, 0x40, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x00, 0x00, 0x40, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x00, - 0x40, 0x4d, 0x6f, 0x64, 0x65, 0x42, 0x69, 0x74, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x05, 0x00, 0x00 -}; -unsigned int __NOISE_NES_bin_len = 2104; diff --git a/app/NOISE/WhitePink.bin b/app/NOISE/WhitePink.bin new file mode 100644 index 0000000..98014e9 Binary files /dev/null and b/app/NOISE/WhitePink.bin differ diff --git a/app/NOISE/WhitePink.bin.h b/app/NOISE/WhitePink.bin.h deleted file mode 100644 index 45a349f..0000000 --- a/app/NOISE/WhitePink.bin.h +++ /dev/null @@ -1,164 +0,0 @@ -const uint8_t __NOISE_WhitePink_bin[] FLASHMEM __attribute__((aligned(32))) = { - 0x55, 0x44, 0x4c, 0x4d, 0x10, 0x00, 0x13, 0x00, 0x88, 0x01, 0x00, 0x00, - 0x24, 0x05, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x24, 0x05, 0x00, 0x80, 0x12, 0x00, 0x00, 0x00, 0x24, 0x05, 0x00, 0x80, - 0x1b, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0xb4, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x50, - 0xe1, 0x04, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x50, 0x8d, 0x04, 0x00, 0x00, - 0xe4, 0x00, 0x00, 0x50, 0xc5, 0x04, 0x00, 0x00, 0xec, 0x00, 0x00, 0x50, - 0xa9, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x10, - 0x2c, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x10, 0x2c, 0x00, 0x00, 0x00, - 0x1c, 0x01, 0x00, 0x10, 0x30, 0x00, 0x00, 0x00, 0x2d, 0x01, 0x00, 0x10, - 0x2c, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x47, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x57, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x64, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x71, 0x01, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x7f, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x40, 0xfd, 0x04, 0x00, 0x00, 0x4e, 0x4f, 0x49, 0x53, - 0x45, 0x2f, 0x57, 0x68, 0x69, 0x74, 0x65, 0x50, 0x69, 0x6e, 0x6b, 0x00, - 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, - 0x00, 0x5f, 0x5f, 0x75, 0x69, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, - 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00, 0x70, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x00, 0x73, 0x65, 0x74, 0x75, 0x70, 0x00, 0x5f, 0x5f, - 0x70, 0x72, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, - 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x65, 0x69, - 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x00, 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, - 0x72, 0x72, 0x61, 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x00, 0x5f, 0x5f, 0x69, - 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x00, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x66, - 0x72, 0x65, 0x65, 0x00, 0x5f, 0x5f, 0x75, 0x69, 0x5f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x00, 0x61, 0x64, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, - 0x69, 0x33, 0x32, 0x00, 0x61, 0x64, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x5f, 0x66, 0x33, 0x32, 0x00, 0x5f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x5f, 0x6c, 0x5f, 0x66, 0x70, 0x00, 0x6d, 0x65, 0x6d, 0x73, 0x65, - 0x74, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, - 0x04, 0x00, 0x00, 0x00, 0x38, 0xb5, 0x08, 0x4b, 0x59, 0xf8, 0x03, 0x30, - 0x1d, 0x68, 0x55, 0xb1, 0x06, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x1c, 0x68, - 0xe3, 0x88, 0xb4, 0xf9, 0x04, 0x20, 0x61, 0x88, 0x20, 0x88, 0xa8, 0x47, - 0x20, 0x72, 0x38, 0xbd, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x10, 0xb4, 0x03, 0x4c, 0x59, 0xf8, 0x04, 0x40, 0xa4, 0x46, 0x5d, 0xf8, - 0x04, 0x4b, 0x60, 0x47, 0x10, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x14, 0x00, 0x00, 0x00, 0x10, 0xb5, 0x12, 0x4b, - 0x12, 0x4a, 0x59, 0xf8, 0x03, 0x00, 0x12, 0x4b, 0x59, 0xf8, 0x02, 0x10, - 0x9f, 0xed, 0x0d, 0x0a, 0x59, 0xf8, 0x03, 0x30, 0x82, 0xb0, 0xf7, 0xee, - 0x00, 0x0a, 0x98, 0x47, 0x0d, 0x4a, 0x0e, 0x4b, 0x0e, 0x49, 0x59, 0xf8, - 0x02, 0x00, 0x59, 0xf8, 0x01, 0x10, 0x59, 0xf8, 0x03, 0x20, 0x0c, 0x4b, - 0x00, 0x92, 0x59, 0xf8, 0x03, 0x40, 0x00, 0x22, 0x01, 0x23, 0x04, 0x31, - 0xa0, 0x47, 0x02, 0xb0, 0x10, 0xbd, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4d, 0xca, 0x4a, 0xcb, 0x4b, - 0x59, 0xf8, 0x02, 0x20, 0x59, 0xf8, 0x03, 0x50, 0x11, 0x68, 0xc9, 0x4a, - 0xd5, 0xf8, 0x04, 0x80, 0xdf, 0xed, 0xc3, 0x6a, 0x59, 0xf8, 0x02, 0xe0, - 0xc2, 0x4f, 0xd5, 0xe9, 0x02, 0x34, 0x4f, 0xf0, 0x00, 0x0a, 0xbf, 0xee, - 0x00, 0x7a, 0xb4, 0xee, 0x00, 0x5a, 0x01, 0xf1, 0x60, 0x0c, 0x56, 0x46, - 0x44, 0xf2, 0xa7, 0x10, 0xb8, 0xf1, 0x00, 0x0f, 0x28, 0xd1, 0x1a, 0x0c, - 0x00, 0xfb, 0x02, 0xf2, 0x9b, 0xb2, 0x4f, 0xea, 0xd2, 0x3b, 0x00, 0xfb, - 0x03, 0xbb, 0x07, 0xea, 0x02, 0x43, 0x5b, 0x44, 0x23, 0xf0, 0x00, 0x42, - 0x02, 0xeb, 0xd3, 0x73, 0x06, 0xee, 0x10, 0x3a, 0xf8, 0xee, 0xc6, 0x5a, - 0xb0, 0xee, 0x47, 0x6a, 0xa5, 0xee, 0xa6, 0x6a, 0x01, 0x26, 0xde, 0xed, - 0x00, 0x7a, 0x67, 0xee, 0x86, 0x7a, 0xc1, 0xed, 0x00, 0x7a, 0x04, 0x31, - 0x8c, 0x45, 0xdb, 0xd1, 0x06, 0xb1, 0xab, 0x60, 0xba, 0xf1, 0x00, 0x0f, - 0x00, 0xd0, 0xec, 0x60, 0xbd, 0xe8, 0xf0, 0x8d, 0x04, 0xf1, 0x01, 0x0a, - 0xba, 0xf5, 0x80, 0x7f, 0x40, 0xf3, 0x0f, 0x81, 0xe2, 0x07, 0x4f, 0xf0, - 0x00, 0x0a, 0x40, 0xf1, 0x0f, 0x81, 0x1a, 0x0c, 0x00, 0xfb, 0x02, 0xf2, - 0x9e, 0xb2, 0xd3, 0x0b, 0x00, 0xfb, 0x06, 0x36, 0x07, 0xea, 0x02, 0x43, - 0x33, 0x44, 0x23, 0xf0, 0x00, 0x42, 0x02, 0xeb, 0xd3, 0x73, 0x07, 0xee, - 0x90, 0x3a, 0xb8, 0xee, 0xe7, 0x6a, 0xf0, 0xee, 0x47, 0x7a, 0xe6, 0xee, - 0x26, 0x7a, 0xa2, 0x07, 0x4f, 0xf0, 0x01, 0x06, 0x27, 0xee, 0x85, 0x6a, - 0x85, 0xed, 0x04, 0x6a, 0x40, 0xf1, 0xf5, 0x80, 0x1a, 0x0c, 0x00, 0xfb, - 0x02, 0xf2, 0x9e, 0xb2, 0xd3, 0x0b, 0x00, 0xfb, 0x06, 0x36, 0x07, 0xea, - 0x02, 0x43, 0x33, 0x44, 0x23, 0xf0, 0x00, 0x42, 0x02, 0xeb, 0xd3, 0x73, - 0x07, 0xee, 0x90, 0x3a, 0xf8, 0xee, 0xe7, 0x5a, 0xf0, 0xee, 0x47, 0x7a, - 0xe5, 0xee, 0xa6, 0x7a, 0x62, 0x07, 0x4f, 0xf0, 0x01, 0x06, 0x67, 0xee, - 0x85, 0x7a, 0xc5, 0xed, 0x05, 0x7a, 0x77, 0xee, 0x86, 0x7a, 0x40, 0xf1, - 0xdb, 0x80, 0x1a, 0x0c, 0x00, 0xfb, 0x02, 0xf2, 0x9e, 0xb2, 0xd3, 0x0b, - 0x00, 0xfb, 0x06, 0x36, 0x07, 0xea, 0x02, 0x43, 0x33, 0x44, 0x23, 0xf0, - 0x00, 0x42, 0x02, 0xeb, 0xd3, 0x73, 0x06, 0xee, 0x10, 0x3a, 0xf8, 0xee, - 0xc6, 0x5a, 0xb0, 0xee, 0x47, 0x6a, 0xa5, 0xee, 0xa6, 0x6a, 0x22, 0x07, - 0x4f, 0xf0, 0x01, 0x06, 0x26, 0xee, 0x05, 0x6a, 0x76, 0xee, 0x27, 0x7a, - 0x85, 0xed, 0x06, 0x6a, 0x40, 0xf1, 0xc1, 0x80, 0x1a, 0x0c, 0x00, 0xfb, - 0x02, 0xf2, 0x9e, 0xb2, 0xd3, 0x0b, 0x00, 0xfb, 0x06, 0x36, 0x07, 0xea, - 0x02, 0x43, 0x33, 0x44, 0x23, 0xf0, 0x00, 0x42, 0x02, 0xeb, 0xd3, 0x73, - 0x06, 0xee, 0x10, 0x3a, 0xf8, 0xee, 0xc6, 0x5a, 0xb0, 0xee, 0x47, 0x6a, - 0xa5, 0xee, 0xa6, 0x6a, 0xe2, 0x06, 0x4f, 0xf0, 0x01, 0x06, 0x26, 0xee, - 0x05, 0x6a, 0x76, 0xee, 0x27, 0x7a, 0x85, 0xed, 0x07, 0x6a, 0x40, 0xf1, - 0xa7, 0x80, 0x1a, 0x0c, 0x00, 0xfb, 0x02, 0xf2, 0x9e, 0xb2, 0xd3, 0x0b, - 0x00, 0xfb, 0x06, 0x36, 0x07, 0xea, 0x02, 0x43, 0x33, 0x44, 0x23, 0xf0, - 0x00, 0x42, 0x02, 0xeb, 0xd3, 0x73, 0x06, 0xee, 0x10, 0x3a, 0xf8, 0xee, - 0xc6, 0x5a, 0xb0, 0xee, 0x47, 0x6a, 0xa5, 0xee, 0xa6, 0x6a, 0xa2, 0x06, - 0x4f, 0xf0, 0x01, 0x06, 0x26, 0xee, 0x05, 0x6a, 0x85, 0xed, 0x08, 0x6a, - 0x36, 0xee, 0x27, 0x6a, 0x40, 0xf1, 0x8d, 0x80, 0x1a, 0x0c, 0x00, 0xfb, - 0x02, 0xf2, 0x9e, 0xb2, 0xd3, 0x0b, 0x00, 0xfb, 0x06, 0x36, 0x07, 0xea, - 0x02, 0x43, 0x33, 0x44, 0x23, 0xf0, 0x00, 0x42, 0x02, 0xeb, 0xd3, 0x73, - 0x07, 0xee, 0x90, 0x3a, 0xf8, 0xee, 0xe7, 0x5a, 0xf0, 0xee, 0x47, 0x7a, - 0xe5, 0xee, 0xa6, 0x7a, 0x62, 0x06, 0x4f, 0xf0, 0x01, 0x06, 0x67, 0xee, - 0x85, 0x7a, 0x37, 0xee, 0x86, 0x6a, 0xc5, 0xed, 0x09, 0x7a, 0x72, 0xd5, - 0x1a, 0x0c, 0x00, 0xfb, 0x02, 0xf2, 0x9e, 0xb2, 0xd3, 0x0b, 0x00, 0xfb, - 0x06, 0x36, 0x07, 0xea, 0x02, 0x43, 0x33, 0x44, 0x23, 0xf0, 0x00, 0x42, - 0x02, 0xeb, 0xd3, 0x73, 0x07, 0xee, 0x90, 0x3a, 0xf8, 0xee, 0xe7, 0x5a, - 0xf0, 0xee, 0x47, 0x7a, 0xe5, 0xee, 0xa6, 0x7a, 0x22, 0x06, 0x4f, 0xf0, - 0x01, 0x06, 0x67, 0xee, 0x85, 0x7a, 0x37, 0xee, 0x86, 0x6a, 0xc5, 0xed, - 0x0a, 0x7a, 0x58, 0xd5, 0x1a, 0x0c, 0x00, 0xfb, 0x02, 0xf2, 0x9c, 0xb2, - 0xd3, 0x0b, 0x00, 0xfb, 0x04, 0x34, 0x07, 0xea, 0x02, 0x43, 0x23, 0x44, - 0x23, 0xf0, 0x00, 0x42, 0x02, 0xeb, 0xd3, 0x73, 0x07, 0xee, 0x90, 0x3a, - 0xf8, 0xee, 0xe7, 0x5a, 0xf0, 0xee, 0x47, 0x7a, 0xe5, 0xee, 0xa6, 0x7a, - 0x01, 0x26, 0x67, 0xee, 0x85, 0x7a, 0xc5, 0xed, 0x0b, 0x7a, 0xde, 0xed, - 0x00, 0x5a, 0x77, 0xee, 0x86, 0x7a, 0x54, 0x46, 0x65, 0xee, 0xa7, 0x7a, - 0x4f, 0xf0, 0x01, 0x0a, 0xc1, 0xed, 0x00, 0x7a, 0xdf, 0xe6, 0x84, 0xea, - 0x0a, 0x04, 0xe2, 0x07, 0x3f, 0xf5, 0xf1, 0xae, 0xa2, 0x07, 0x95, 0xed, - 0x04, 0x6a, 0x3f, 0xf5, 0x0b, 0xaf, 0xd5, 0xed, 0x05, 0x7a, 0x62, 0x07, - 0x77, 0xee, 0x86, 0x7a, 0x3f, 0xf5, 0x25, 0xaf, 0x95, 0xed, 0x06, 0x6a, - 0x22, 0x07, 0x76, 0xee, 0x27, 0x7a, 0x3f, 0xf5, 0x3f, 0xaf, 0x95, 0xed, - 0x07, 0x6a, 0xe2, 0x06, 0x76, 0xee, 0x27, 0x7a, 0x3f, 0xf5, 0x59, 0xaf, - 0x95, 0xed, 0x08, 0x6a, 0xa2, 0x06, 0x36, 0xee, 0x27, 0x6a, 0x3f, 0xf5, - 0x73, 0xaf, 0xd5, 0xed, 0x09, 0x7a, 0x62, 0x06, 0x37, 0xee, 0x86, 0x6a, - 0x8c, 0xd4, 0xd5, 0xed, 0x0a, 0x7a, 0x22, 0x06, 0x37, 0xee, 0x86, 0x6a, - 0xa6, 0xd4, 0xd5, 0xed, 0x0b, 0x7a, 0xbe, 0xe7, 0x00, 0x00, 0x80, 0x30, - 0x00, 0x00, 0xff, 0x7f, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x10, 0x4a, 0x10, 0x4b, 0x59, 0xf8, - 0x02, 0x60, 0x59, 0xf8, 0x03, 0x50, 0x76, 0x1b, 0xb6, 0x10, 0x06, 0xd0, - 0x00, 0x24, 0x55, 0xf8, 0x04, 0x3b, 0x01, 0x34, 0x98, 0x47, 0xa6, 0x42, - 0xf9, 0xd1, 0x0a, 0x4a, 0x0a, 0x4b, 0x59, 0xf8, 0x02, 0x60, 0x59, 0xf8, - 0x03, 0x50, 0x76, 0x1b, 0xb6, 0x10, 0x06, 0xd0, 0x00, 0x24, 0x55, 0xf8, - 0x04, 0x3b, 0x01, 0x34, 0x98, 0x47, 0xa6, 0x42, 0xf9, 0xd1, 0x70, 0xbd, - 0x2c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, - 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0xd4, 0xfd, - 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, - 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, - 0xff, 0xf7, 0xec, 0xfd, 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, - 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, - 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0x12, 0xfe, 0xbd, 0xe8, 0x00, 0x82, - 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, - 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0xa2, 0xff, - 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, 0x08, 0xb5, 0x07, 0x4b, - 0x59, 0xf8, 0x03, 0x00, 0x00, 0x21, 0x00, 0xf1, 0x08, 0x03, 0xc0, 0xe9, - 0x02, 0x31, 0x04, 0x4b, 0x20, 0x22, 0x59, 0xf8, 0x03, 0x30, 0x10, 0x30, - 0x98, 0x47, 0x08, 0xbd, 0x08, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x40, 0x05, 0x00, 0x00, 0x48, 0x05, 0x00, 0x00, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x00, 0x00, 0x00, 0x40, 0x4d, 0x6f, 0x64, - 0x65, 0x00, 0x00, 0x00, 0x3e, 0x57, 0x68, 0x69, 0x74, 0x65, 0x00, 0x00, - 0x3e, 0x50, 0x69, 0x6e, 0x6b, 0x00, 0x00, 0x00, 0xfd, 0x04, 0x00, 0x00 -}; -unsigned int __NOISE_WhitePink_bin_len = 1932; diff --git a/app/SPEECH/LPC.bin b/app/SPEECH/LPC.bin new file mode 100644 index 0000000..34f519d Binary files /dev/null and b/app/SPEECH/LPC.bin differ diff --git a/app/SPEECH/LPC.cpp b/app/SPEECH/LPC.cpp new file mode 100644 index 0000000..97ee2f9 --- /dev/null +++ b/app/SPEECH/LPC.cpp @@ -0,0 +1,268 @@ + +#include "../squares-and-circles-api.h" +#include "stmlib/stmlib.h" +#include "stmlib/dsp/units.h" +#include + +#define private public +#include "plaits/dsp/speech/lpc_speech_synth_controller.h" +#include "plaits/dsp/speech/lpc_speech_synth_words.h" + +#define FLASHMEM __attribute__((section(".text"))) + +#include "plaits/dsp/speech/lpc_speech_synth_controller.cc" +#include "plaits/dsp/speech/lpc_speech_synth_words.cc" +#include "plaits/dsp/speech/lpc_speech_synth_phonemes.cc" +#include "plaits/dsp/speech/lpc_speech_synth.cc" + +#include "stmlib/dsp/units.cc" +#include "stmlib/utils/random.cc" + +// from #include "plaits/resources.cc" +namespace plaits +{ +const int8_t lut_lpc_excitation_pulse[] FLASHMEM = { + 0, 0, 0, 0, + 1, 1, 1, 2, + 3, 3, 4, 5, + 6, 7, 8, 9, + 10, 12, 13, 15, + 17, 19, 21, 23, + 25, 28, 30, 33, + 36, 38, 41, 44, + 48, 51, 54, 57, + 61, 64, 68, 71, + 75, 78, 82, 85, + 89, 92, 95, 99, + 102, 105, 108, 110, + 113, 115, 118, 120, + 121, 123, 124, 125, + 126, 127, 127, 127, + 127, 126, 125, 124, + 122, 121, 118, 116, + 113, 110, 107, 104, + 100, 96, 92, 87, + 83, 78, 73, 68, + 63, 58, 53, 47, + 42, 37, 31, 26, + 21, 16, 11, 6, + 1, -3, -8, -12, + -16, -20, -23, -26, + -29, -32, -35, -37, + -39, -40, -42, -43, + -43, -44, -44, -44, + -44, -44, -43, -42, + -41, -40, -39, -38, + -36, -35, -33, -32, + -30, -29, -27, -26, + -24, -23, -22, -20, + -19, -18, -18, -17, + -16, -16, -16, -16, + -16, -16, -17, -17, + -18, -19, -20, -21, + -23, -24, -26, -27, + -29, -30, -32, -34, + -35, -37, -39, -40, + -42, -43, -44, -46, + -47, -48, -48, -49, + -49, -50, -50, -50, + -49, -49, -48, -47, + -46, -45, -44, -42, + -41, -39, -37, -35, + -33, -31, -29, -27, + -25, -23, -20, -18, + -16, -14, -13, -11, + -9, -8, -7, -6, + -5, -4, -3, -3, + -3, -3, -3, -4, + -5, -6, -7, -9, + -10, -12, -14, -16, + -18, -21, -23, -26, + -29, -32, -34, -37, + -40, -43, -46, -49, + -51, -54, -56, -59, + -61, -63, -65, -67, + -68, -70, -71, -72, + -72, -73, -73, -73, + -73, -72, -72, -71, + -70, -69, -67, -66, + -64, -63, -61, -59, + -57, -54, -52, -50, + -48, -45, -43, -41, + -39, -37, -35, -33, + -31, -29, -27, -26, + -25, -23, -22, -21, + -20, -20, -19, -19, + -19, -18, -18, -18, + -19, -19, -19, -20, + -20, -21, -21, -22, + -22, -23, -23, -24, + -24, -25, -25, -25, + -26, -26, -26, -25, + -25, -25, -24, -24, + -23, -22, -21, -20, + -19, -18, -16, -15, + -13, -12, -10, -8, + -6, -4, -3, -1, + 1, 3, 5, 7, + 8, 10, 12, 13, + 15, 16, 17, 18, + 19, 20, 21, 21, + 22, 22, 22, 22, + 22, 22, 22, 22, + 21, 21, 20, 19, + 19, 18, 17, 16, + 15, 14, 14, 13, + 12, 11, 10, 10, + 9, 9, 8, 8, + 8, 8, 8, 8, + 8, 8, 8, 9, + 9, 10, 11, 12, + 13, 14, 15, 16, + 17, 18, 19, 21, + 22, 23, 24, 26, + 27, 28, 29, 30, + 31, 32, 33, 33, + 34, 35, 35, 35, + 36, 36, 36, 36, + 35, 35, 35, 34, + 34, 33, 33, 32, + 31, 30, 30, 29, + 28, 27, 26, 25, + 25, 24, 23, 22, + 22, 21, 20, 20, + 19, 19, 19, 19, + 19, 19, 19, 19, + 19, 19, 20, 20, + 21, 21, 22, 22, + 23, 23, 24, 25, + 25, 26, 27, 27, + 28, 29, 29, 29, + 30, 30, 30, 31, + 31, 31, 31, 30, + 30, 30, 29, 29, + 28, 28, 27, 26, + 26, 25, 24, 23, + 22, 21, 20, 19, + 18, 17, 16, 15, + 15, 14, 13, 12, + 12, 11, 10, 10, + 10, 9, 9, 9, + 9, 9, 9, 9, + 9, 10, 10, 10, + 11, 11, 12, 12, + 12, 13, 13, 14, + 14, 14, 15, 15, + 15, 15, 15, 15, + 15, 15, 15, 15, + 14, 14, 14, 13, + 12, 12, 11, 10, + 9, 8, 8, 7, + 6, 5, 4, 3, + 2, 1, 0, -1, + -2, -3, -4, -4, + -5, -6, -6, -7, + -7, -8, -8, -8, + -9, -9, -9, -9, + -9, -9, -9, -9, + -8, -8, -8, -7, + -7, -7, -6, -6, + -5, -5, -5, -4, + -4, -4, -3, -3, + -3, -2, -2, -2, + -2, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -2, -2, + -2, -2, -2, -2, + -2, -2, -2, -2, + -2, -2, -2, -2, + -2, -2, -2, -2, + -2, -2, -2, -2, + -2, -1, -1, -1, + -1, -1, -1, 0, + 0, 0, 0, 0, +}; +} + +const float a0 = (440.0f / 8.0f) / 48000.0f; + +inline float NoteToFrequency(float midi_note) +{ + midi_note -= 9.0f; + CONSTRAIN(midi_note, -128.0f, 127.0f); + return a0 * 0.25f * stmlib::SemitonesToRatio(midi_note); +} + +static float _pitch = 0.f; +static int32_t _word = 0; +static float _speed = 0.3f; +static float _formant_shift = 0.5f; +static float _prosody = 0.5f; +static float _out_aux_mix = 0.0f; + +struct +{ + uint8_t bank; + float addr; +} _words[92]; + +static plaits::LPCSpeechSynthController lpc_speech_synth_controller_; +static plaits::LPCSpeechSynthWordBank lpc_speech_synth_word_bank_; + +static uint8_t buffer[16384] = {}; +static stmlib::BufferAllocator allocator; + +void engine::setup() +{ + allocator.Init(buffer, 16384); + + lpc_speech_synth_word_bank_.Init(plaits::word_banks_, + LPC_SPEECH_SYNTH_NUM_WORD_BANKS, + &allocator); + int j = 0; + for (uint8_t i = 0; i < LPC_SPEECH_SYNTH_NUM_WORD_BANKS; i++) + { + lpc_speech_synth_word_bank_.Load(i); + + for (int l = 0; l < lpc_speech_synth_word_bank_.num_words_; l++) + _words[j++] = {i, 1.f / lpc_speech_synth_word_bank_.num_words_ * l}; + } + + lpc_speech_synth_controller_.Init(&lpc_speech_synth_word_bank_); + + engine::addParam(V_OCT, &_pitch); + engine::addParam("Word", &_word, 0, LEN_OF(_words) - 1); + engine::addParam("Speed", &_speed); + engine::addParam("Form.Shift", &_formant_shift); + engine::addParam("Prosody", &_prosody); + engine::addParam("AuxMix", &_out_aux_mix); +} + +void engine::process() +{ + auto note = (float)DEFAULT_NOTE; + + note += engine::cv() * 12; + + const float f0 = NoteToFrequency(note); + + auto _out = engine::outputBuffer<0>(); + auto _aux = engine::outputBuffer<1>(); + + lpc_speech_synth_controller_.Render(false, + engine::trig(), + _words[_word].bank, // Bank + f0, + _prosody, + _speed, // Speed + _words[_word].addr, // Word + _formant_shift, + 1.0f, + _aux, + _out, + FRAME_BUFFER_SIZE); + + for (int i = 0; i < FRAME_BUFFER_SIZE; i++) + _out[i] = stmlib::Crossfade(_out[i], _aux[i], _out_aux_mix); +} \ No newline at end of file diff --git a/app/SPEECH/SAM.bin b/app/SPEECH/SAM.bin new file mode 100644 index 0000000..3e24549 Binary files /dev/null and b/app/SPEECH/SAM.bin differ diff --git a/app/SPEECH/SAM.bin.h b/app/SPEECH/SAM.bin.h deleted file mode 100644 index aa1c21e..0000000 --- a/app/SPEECH/SAM.bin.h +++ /dev/null @@ -1,2308 +0,0 @@ -const uint8_t __SPEECH_SAM_bin[] FLASHMEM __attribute__((aligned(32))) = { - 0x55, 0x44, 0x4c, 0x4d, 0x44, 0x00, 0x4b, 0x00, 0x5c, 0x03, 0x00, 0x00, - 0x54, 0x41, 0x00, 0x00, 0xec, 0x24, 0x00, 0x00, 0x70, 0xd0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x1b, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, - 0x24, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, - 0x27, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x2e, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, - 0x2a, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, - 0x31, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, - 0x2d, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, - 0x35, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, - 0x3a, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, - 0x33, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, - 0x39, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3f, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, - 0x45, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x54, 0x41, 0x00, 0x80, - 0x9f, 0x00, 0x00, 0x00, 0x54, 0x41, 0x00, 0x80, 0xa0, 0x00, 0x00, 0x00, - 0x54, 0x41, 0x00, 0x80, 0xa1, 0x00, 0x00, 0x00, 0x54, 0x41, 0x00, 0x80, - 0xa2, 0x00, 0x00, 0x00, 0x54, 0x41, 0x00, 0x80, 0xa3, 0x00, 0x00, 0x00, - 0x54, 0x41, 0x00, 0x80, 0xa4, 0x00, 0x00, 0x00, 0x54, 0x41, 0x00, 0x80, - 0x49, 0x00, 0x00, 0x00, 0x4c, 0x02, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x57, 0x02, 0x00, 0x50, 0x39, 0x41, 0x00, 0x00, 0x64, 0x02, 0x00, 0x50, - 0xe5, 0x40, 0x00, 0x00, 0x77, 0x02, 0x00, 0x50, 0x1d, 0x41, 0x00, 0x00, - 0x7f, 0x02, 0x00, 0x50, 0x01, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xec, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x39, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x84, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd4, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x21, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x4c, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8c, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x21, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc4, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x74, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x4c, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x21, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x84, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x21, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x22, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6c, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8c, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x22, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4c, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x23, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x94, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xec, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x24, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x24, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x24, 0x00, 0x00, 0x85, 0x02, 0x00, 0x50, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x12, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x40, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe4, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x24, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x24, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x98, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa0, 0x24, 0x00, 0x00, 0x92, 0x02, 0x00, 0x10, 0xec, 0x24, 0x00, 0x00, - 0xa6, 0x02, 0x00, 0x10, 0xec, 0x24, 0x00, 0x00, 0xbc, 0x02, 0x00, 0x10, - 0xec, 0x24, 0x00, 0x00, 0xcd, 0x02, 0x00, 0x10, 0xec, 0x24, 0x00, 0x00, - 0xe0, 0x02, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x02, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0xec, 0x02, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0xf7, 0x02, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x11, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x20, 0x03, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x27, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x3a, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x47, 0x03, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x4e, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x53, 0x50, 0x45, 0x45, 0x43, 0x48, 0x2f, 0x53, 0x41, 0x4d, 0x00, 0x5f, - 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x00, - 0x5f, 0x5f, 0x75, 0x69, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x68, - 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00, 0x70, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x00, 0x73, 0x65, 0x74, 0x75, 0x70, 0x00, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x00, 0x5f, 0x5f, - 0x70, 0x72, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, - 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x65, 0x69, - 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x00, 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x61, - 0x72, 0x72, 0x61, 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x00, 0x5f, 0x5f, 0x69, - 0x6e, 0x69, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x00, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x66, - 0x72, 0x65, 0x65, 0x00, 0x5f, 0x5f, 0x75, 0x69, 0x5f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x00, 0x61, 0x64, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, - 0x69, 0x33, 0x32, 0x00, 0x61, 0x64, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x5f, 0x66, 0x33, 0x32, 0x00, 0x73, 0x74, 0x72, 0x6c, 0x65, 0x6e, 0x00, - 0x6d, 0x65, 0x6d, 0x6d, 0x6f, 0x76, 0x65, 0x00, 0x6d, 0x65, 0x6d, 0x73, - 0x65, 0x74, 0x00, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x00, 0x70, 0x75, - 0x74, 0x73, 0x00, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x00, 0x72, 0x61, - 0x6e, 0x64, 0x00, 0x73, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x00, 0x5f, - 0x5f, 0x74, 0x72, 0x69, 0x67, 0x00, 0x5f, 0x5f, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x5f, 0x6c, 0x5f, 0x66, 0x70, 0x00, 0x02, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x1b, 0x68, 0x19, 0x54, 0x70, 0x47, 0x00, 0x00, 0x00, 0x00, - 0x4b, 0xf6, 0x7f, 0x33, 0x98, 0x42, 0x0c, 0xdc, 0x10, 0xb4, 0x06, 0x4a, - 0x06, 0x4b, 0x59, 0xf8, 0x02, 0x20, 0x44, 0x1c, 0x54, 0x60, 0x59, 0xf8, - 0x03, 0x30, 0x19, 0x54, 0x5d, 0xf8, 0x04, 0x4b, 0x70, 0x47, 0x70, 0x47, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x08, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x08, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x47, 0x0c, 0x00, 0x00, 0x00, 0x38, 0xb5, 0x08, 0x4b, - 0x59, 0xf8, 0x03, 0x30, 0x9d, 0x68, 0x55, 0xb1, 0x06, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x1c, 0x68, 0xe3, 0x88, 0xb4, 0xf9, 0x04, 0x20, 0x61, 0x88, - 0x20, 0x88, 0xa8, 0x47, 0x20, 0x72, 0x38, 0xbd, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x10, 0xb4, 0x03, 0x4c, 0x59, 0xf8, 0x04, 0x40, - 0xa4, 0x46, 0x5d, 0xf8, 0x04, 0x4b, 0x60, 0x47, 0x14, 0x00, 0x00, 0x00, - 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x18, 0x00, 0x00, 0x00, - 0x38, 0xb5, 0x26, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x04, 0x46, 0x98, 0x47, - 0x24, 0x4b, 0xfe, 0x28, 0x84, 0x46, 0x59, 0xf8, 0x03, 0x50, 0xa8, 0xbf, - 0x4f, 0xf0, 0xfe, 0x0c, 0x50, 0xb3, 0x05, 0xf1, 0x0c, 0x02, 0x63, 0x1c, - 0xd3, 0x1a, 0x02, 0x2b, 0x28, 0xd9, 0x08, 0x28, 0x26, 0xdd, 0x00, 0x28, - 0xcc, 0xbf, 0xe6, 0x46, 0x4f, 0xf0, 0x01, 0x0e, 0x2e, 0xf0, 0x03, 0x00, - 0x20, 0x44, 0x23, 0x46, 0x53, 0xf8, 0x04, 0x1b, 0x42, 0xf8, 0x04, 0x1b, - 0x83, 0x42, 0xf9, 0xd1, 0x1e, 0xf0, 0x03, 0x0f, 0x2e, 0xf0, 0x03, 0x03, - 0x0e, 0xd0, 0xea, 0x18, 0xe1, 0x5c, 0x11, 0x73, 0x5a, 0x1c, 0x94, 0x45, - 0x08, 0xdd, 0xa9, 0x18, 0x02, 0x33, 0xa2, 0x5c, 0x0a, 0x73, 0x9c, 0x45, - 0x02, 0xdd, 0xea, 0x18, 0xe3, 0x5c, 0x13, 0x73, 0x65, 0x44, 0x00, 0x23, - 0x2b, 0x73, 0x38, 0xbd, 0x62, 0x1e, 0x05, 0xf1, 0x0c, 0x01, 0x13, 0x46, - 0x02, 0x33, 0x1b, 0x1b, 0x12, 0xf8, 0x01, 0x0f, 0x01, 0xf8, 0x01, 0x0b, - 0x9c, 0x45, 0xf6, 0xdc, 0x65, 0x44, 0x00, 0x23, 0x2b, 0x73, 0x38, 0xbd, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x70, 0x70, 0x47, 0x00, 0xbf, 0x20, 0x00, 0x00, 0x00, - 0x02, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x58, 0x70, 0x70, 0x47, 0x00, 0xbf, - 0x20, 0x00, 0x00, 0x00, 0x02, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x98, 0x70, - 0x70, 0x47, 0x00, 0xbf, 0x20, 0x00, 0x00, 0x00, 0x02, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0xd8, 0x70, 0x70, 0x47, 0x00, 0xbf, 0x20, 0x00, 0x00, 0x00, - 0x03, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x01, 0x22, 0xc3, 0xf8, 0x0c, 0x21, - 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x02, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x18, 0x68, 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0xd3, 0xf8, 0x10, 0x01, 0x70, 0x47, - 0x00, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4d, 0x54, 0x4b, 0x59, 0xf8, - 0x03, 0x50, 0x95, 0xf8, 0x18, 0x11, 0x4f, 0xf0, 0x00, 0x0b, 0xff, 0x29, - 0x84, 0xb0, 0x85, 0xf8, 0x14, 0xb1, 0x6d, 0xd0, 0x95, 0xf8, 0x19, 0x32, - 0x02, 0x93, 0x95, 0xf8, 0x18, 0x32, 0x01, 0x93, 0x5c, 0x46, 0x5b, 0x46, - 0x4f, 0xf0, 0xff, 0x08, 0x5a, 0x46, 0xda, 0x46, 0x16, 0xe0, 0xfe, 0x29, - 0x0c, 0xd0, 0x48, 0x4a, 0x59, 0xf8, 0x02, 0x20, 0x52, 0x5c, 0x12, 0xf0, - 0x01, 0x02, 0x01, 0x92, 0x59, 0xd1, 0x4f, 0xf0, 0x01, 0x0b, 0x00, 0x29, - 0x08, 0xbf, 0xa0, 0x46, 0x01, 0x34, 0xe4, 0xb2, 0x29, 0x19, 0x22, 0x46, - 0x91, 0xf8, 0x18, 0x11, 0xff, 0x29, 0x41, 0xd0, 0x2a, 0x44, 0x92, 0xf8, - 0x1c, 0x22, 0x13, 0x44, 0xdb, 0xb2, 0xe7, 0x2b, 0xe1, 0xd9, 0x08, 0xf1, - 0x01, 0x04, 0x05, 0xeb, 0x08, 0x03, 0xe4, 0xb2, 0x1f, 0x21, 0x04, 0x22, - 0xfd, 0x2c, 0x83, 0xf8, 0x18, 0x11, 0x83, 0xf8, 0x1c, 0x22, 0x83, 0xf8, - 0x1c, 0xa3, 0x17, 0xdc, 0x33, 0x4b, 0x66, 0x1c, 0x05, 0xf5, 0x8c, 0x70, - 0x59, 0xf8, 0x03, 0x70, 0xc4, 0xf1, 0xfe, 0x02, 0x01, 0x19, 0x30, 0x44, - 0x03, 0x92, 0xb8, 0x47, 0x05, 0xf5, 0x07, 0x70, 0x01, 0x19, 0x03, 0x9a, - 0x30, 0x44, 0xb8, 0x47, 0x05, 0xf5, 0x47, 0x71, 0x88, 0x19, 0x03, 0x9a, - 0x21, 0x44, 0xb8, 0x47, 0x2b, 0x19, 0x08, 0xf1, 0x02, 0x04, 0xe4, 0xb2, - 0xfe, 0x22, 0x29, 0x19, 0x83, 0xf8, 0x18, 0x21, 0x91, 0xf8, 0x18, 0x11, - 0x02, 0x9a, 0x83, 0xf8, 0x1c, 0x22, 0xff, 0x29, 0x83, 0xf8, 0x1c, 0xa3, - 0x22, 0x46, 0x4f, 0xf0, 0x00, 0x03, 0xbd, 0xd1, 0x85, 0xf8, 0x14, 0x41, - 0xbb, 0xf1, 0x00, 0x0f, 0x02, 0xd0, 0x01, 0x9b, 0x85, 0xf8, 0x18, 0x32, - 0x04, 0xb0, 0xbd, 0xe8, 0xf0, 0x8d, 0x66, 0x1c, 0xf6, 0xb2, 0xfd, 0x2e, - 0x19, 0xdc, 0x16, 0x4b, 0x06, 0xf1, 0x01, 0x0b, 0x05, 0xf5, 0x8c, 0x70, - 0x59, 0xf8, 0x03, 0x70, 0xc6, 0xf1, 0xfe, 0x02, 0x81, 0x19, 0x58, 0x44, - 0x03, 0x92, 0xb8, 0x47, 0x05, 0xf5, 0x07, 0x70, 0x81, 0x19, 0x03, 0x9a, - 0x58, 0x44, 0xb8, 0x47, 0x05, 0xf5, 0x47, 0x71, 0x01, 0xeb, 0x0b, 0x00, - 0x03, 0x9a, 0x31, 0x44, 0xb8, 0x47, 0x2e, 0x44, 0xfe, 0x23, 0x02, 0x34, - 0x86, 0xf8, 0x18, 0x31, 0x02, 0x9b, 0x86, 0xf8, 0x1c, 0x32, 0x86, 0xf8, - 0x1c, 0xa3, 0xe4, 0xb2, 0x4f, 0xf0, 0x01, 0x0b, 0x00, 0x23, 0x7f, 0xe7, - 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x30, 0xb4, 0x1a, 0x4b, 0x59, 0xf8, 0x03, 0x40, 0x94, 0xf8, 0x18, 0x21, - 0x84, 0xf8, 0x1c, 0x24, 0xff, 0x2a, 0x28, 0xd0, 0x16, 0x4b, 0x59, 0xf8, - 0x03, 0x50, 0x01, 0x21, 0x00, 0x20, 0x2a, 0x44, 0x43, 0x1c, 0x92, 0xf8, - 0x50, 0x20, 0x52, 0x06, 0x23, 0x44, 0x12, 0xd5, 0x93, 0xf8, 0x18, 0x21, - 0xff, 0x2a, 0x05, 0xeb, 0x02, 0x0c, 0x0c, 0xd0, 0x9c, 0xf9, 0x50, 0x20, - 0x00, 0x2a, 0x08, 0xda, 0x93, 0xf8, 0x1c, 0x33, 0x20, 0x44, 0x5a, 0x1c, - 0x1b, 0xb1, 0x1b, 0x06, 0x01, 0xd4, 0x80, 0xf8, 0x1c, 0x23, 0x62, 0x18, - 0x4b, 0x1c, 0x92, 0xf8, 0x18, 0x21, 0xff, 0x2a, 0x08, 0x46, 0xd9, 0xb2, - 0xdd, 0xd1, 0x84, 0xf8, 0x1c, 0x24, 0x30, 0xbc, 0x70, 0x47, 0x00, 0xbf, - 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4d, - 0xfd, 0x28, 0x82, 0xb0, 0x04, 0x46, 0x8a, 0x46, 0x90, 0x46, 0x1f, 0x46, - 0x24, 0xdc, 0x14, 0x4b, 0x59, 0xf8, 0x03, 0x50, 0x13, 0x4b, 0xc0, 0xf1, - 0xfe, 0x02, 0x46, 0x1c, 0x05, 0xf5, 0x8c, 0x70, 0x59, 0xf8, 0x03, 0xb0, - 0x01, 0x92, 0x01, 0x19, 0x30, 0x44, 0xd8, 0x47, 0x05, 0xf5, 0x07, 0x70, - 0x01, 0x19, 0x01, 0x9a, 0x30, 0x44, 0xd8, 0x47, 0x05, 0xf5, 0x47, 0x71, - 0x88, 0x19, 0x01, 0x9a, 0x21, 0x44, 0xd8, 0x47, 0x2c, 0x44, 0x84, 0xf8, - 0x18, 0xa1, 0x84, 0xf8, 0x1c, 0x82, 0x84, 0xf8, 0x1c, 0x73, 0x02, 0xb0, - 0xbd, 0xe8, 0xf0, 0x8d, 0x01, 0x4b, 0x59, 0xf8, 0x03, 0x50, 0xf1, 0xe7, - 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4d, - 0x55, 0x4b, 0x59, 0xf8, 0x03, 0x40, 0x55, 0x4b, 0x00, 0x25, 0x84, 0xf8, - 0x14, 0x51, 0x84, 0xf8, 0x18, 0x52, 0x84, 0xf8, 0x1c, 0x54, 0x59, 0xf8, - 0x03, 0x30, 0x4f, 0xf4, 0x80, 0x72, 0x29, 0x46, 0x04, 0xf5, 0x47, 0x70, - 0x98, 0x47, 0x94, 0xf8, 0x0c, 0xc0, 0xbc, 0xf1, 0x9b, 0x0f, 0x00, 0xf0, - 0x91, 0x80, 0x4b, 0x4b, 0x59, 0xf8, 0x03, 0x80, 0xae, 0x46, 0xab, 0x46, - 0x08, 0xf1, 0xf8, 0x07, 0x08, 0xf1, 0xa4, 0x0a, 0x0b, 0xf1, 0x01, 0x05, - 0xed, 0xb2, 0x63, 0x19, 0x08, 0xf1, 0xa4, 0x01, 0x1e, 0x7b, 0x20, 0x22, - 0x00, 0x23, 0x04, 0xe0, 0x50, 0x2b, 0x2a, 0xd0, 0x11, 0xf8, 0x01, 0x2f, - 0x01, 0x33, 0x94, 0x45, 0xd8, 0xb2, 0xf7, 0xd1, 0xda, 0x5d, 0x2a, 0x2a, - 0xf4, 0xd0, 0xb2, 0x42, 0xf2, 0xd1, 0x0b, 0xf1, 0x02, 0x0b, 0x5f, 0xfa, - 0x8b, 0xfb, 0x04, 0xeb, 0x0b, 0x01, 0x04, 0xeb, 0x0e, 0x03, 0x91, 0xf8, - 0x0c, 0xc0, 0x83, 0xf8, 0x18, 0x01, 0x0e, 0xf1, 0x01, 0x0e, 0x5f, 0xfa, - 0x8e, 0xfe, 0xbc, 0xf1, 0x9b, 0x0f, 0xd5, 0xd1, 0x84, 0xf8, 0x1c, 0x04, - 0x84, 0xf8, 0x18, 0x22, 0x84, 0xf8, 0x14, 0xb1, 0xa6, 0x44, 0xff, 0x23, - 0x8e, 0xf8, 0x18, 0x31, 0x01, 0x20, 0xbd, 0xe8, 0xf0, 0x8d, 0x08, 0xf1, - 0xf8, 0x0b, 0x00, 0x23, 0x2a, 0x21, 0x04, 0xe0, 0x50, 0x2b, 0x14, 0xd0, - 0x1b, 0xf8, 0x01, 0x1f, 0x01, 0x33, 0x2a, 0x29, 0xd8, 0xb2, 0xf7, 0xd1, - 0x13, 0xf8, 0x0a, 0x10, 0x61, 0x45, 0xf3, 0xd1, 0x04, 0xeb, 0x0e, 0x03, - 0x0e, 0xf1, 0x01, 0x0e, 0x83, 0xf8, 0x18, 0x01, 0x5f, 0xfa, 0x8e, 0xfe, - 0xb4, 0x46, 0xab, 0x46, 0xd3, 0xe7, 0xbc, 0xf1, 0x38, 0x0f, 0x1b, 0xd0, - 0xbc, 0xf1, 0x37, 0x0f, 0x20, 0xd0, 0xbc, 0xf1, 0x36, 0x0f, 0x1f, 0xd0, - 0xbc, 0xf1, 0x35, 0x0f, 0x1e, 0xd0, 0xbc, 0xf1, 0x34, 0x0f, 0x1d, 0xd0, - 0xbc, 0xf1, 0x33, 0x0f, 0x1c, 0xd0, 0xbc, 0xf1, 0x32, 0x0f, 0x1b, 0xd0, - 0xbc, 0xf1, 0x31, 0x0f, 0x1a, 0xd0, 0x84, 0xf8, 0x18, 0x22, 0x84, 0xf8, - 0x14, 0x51, 0x00, 0x20, 0xbd, 0xe8, 0xf0, 0x8d, 0x08, 0x20, 0x04, 0xeb, - 0x0e, 0x03, 0xb4, 0x46, 0x83, 0xf8, 0x1b, 0x03, 0xab, 0x46, 0xac, 0xe7, - 0x07, 0x20, 0xf6, 0xe7, 0x06, 0x20, 0xf4, 0xe7, 0x05, 0x20, 0xf2, 0xe7, - 0x04, 0x20, 0xf0, 0xe7, 0x03, 0x20, 0xee, 0xe7, 0x02, 0x20, 0xec, 0xe7, - 0x01, 0x20, 0xea, 0xe7, 0xae, 0x46, 0xa5, 0xe7, 0x00, 0x00, 0x00, 0x00, - 0x2c, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x10, 0xb5, 0x13, 0x4b, - 0x59, 0xf8, 0x03, 0x20, 0x92, 0xf8, 0x18, 0x31, 0xff, 0x2b, 0x16, 0xd0, - 0x10, 0x49, 0x59, 0xf8, 0x01, 0x10, 0x02, 0xf5, 0x47, 0x70, 0x02, 0xf5, - 0x07, 0x7c, 0x02, 0xf5, 0x8c, 0x72, 0x01, 0xeb, 0x03, 0x0e, 0x10, 0xf9, - 0x01, 0x3b, 0x00, 0x2b, 0x12, 0xf8, 0x01, 0x3f, 0x06, 0xdd, 0x9e, 0xf8, - 0x9c, 0x41, 0x0c, 0xf8, 0x01, 0x4b, 0xff, 0x2b, 0xf1, 0xd1, 0x10, 0xbd, - 0x9e, 0xf8, 0x4c, 0x41, 0x0c, 0xf8, 0x01, 0x4b, 0xff, 0x2b, 0xea, 0xd1, - 0x10, 0xbd, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x2d, 0xe9, 0xf0, 0x4d, 0x98, 0x4b, 0x59, 0xf8, 0x03, 0xb0, 0x9b, 0xf8, - 0x18, 0x51, 0xff, 0x2d, 0x8a, 0xb0, 0x00, 0xf0, 0xb3, 0x80, 0x00, 0x23, - 0x19, 0x46, 0x05, 0x93, 0x98, 0x46, 0x93, 0x4b, 0x9b, 0xf8, 0x18, 0xa2, - 0x59, 0xf8, 0x03, 0x20, 0x01, 0x92, 0x0b, 0xf5, 0x8c, 0x73, 0x03, 0x93, - 0x0b, 0xf5, 0x07, 0x73, 0x02, 0x91, 0x04, 0x93, 0x56, 0x46, 0x01, 0x9b, - 0x2b, 0x44, 0x93, 0xf8, 0x50, 0x30, 0x99, 0x07, 0x40, 0xf1, 0x9d, 0x80, - 0xda, 0x07, 0x40, 0xf1, 0xa0, 0x80, 0x08, 0xf1, 0x01, 0x07, 0xff, 0xb2, - 0x3b, 0x46, 0x0b, 0xeb, 0x03, 0x02, 0x1c, 0x46, 0x92, 0xf8, 0x18, 0x61, - 0x01, 0x33, 0xdb, 0xb2, 0x00, 0x2e, 0xf6, 0xd0, 0xff, 0x2e, 0x0b, 0xd0, - 0x01, 0x9b, 0x33, 0x44, 0x93, 0xf8, 0x50, 0x30, 0x1b, 0x07, 0x00, 0xf1, - 0xf2, 0x80, 0xa6, 0xf1, 0x24, 0x03, 0x01, 0x2b, 0x40, 0xf2, 0xed, 0x80, - 0x01, 0x9a, 0x6b, 0x1c, 0xdb, 0xb2, 0x05, 0x93, 0xd3, 0x18, 0xfd, 0x2f, - 0x93, 0xf8, 0x4c, 0x31, 0x06, 0x93, 0x02, 0x9b, 0x5b, 0x44, 0x93, 0xf8, - 0x1c, 0x33, 0x07, 0x93, 0x1b, 0xdc, 0x03, 0x98, 0x72, 0x4b, 0x07, 0xf1, - 0x01, 0x0a, 0x59, 0xf8, 0x03, 0x30, 0x08, 0x93, 0xc7, 0xf1, 0xfe, 0x02, - 0xc1, 0x19, 0x50, 0x44, 0x09, 0x92, 0x98, 0x47, 0x04, 0x9b, 0x09, 0x9a, - 0xd9, 0x19, 0x03, 0xeb, 0x0a, 0x00, 0x08, 0x9b, 0x98, 0x47, 0x0b, 0xf5, - 0x47, 0x71, 0x01, 0xeb, 0x0a, 0x00, 0x09, 0x9a, 0x08, 0x9b, 0x39, 0x44, - 0x98, 0x47, 0x5f, 0x44, 0x07, 0x9b, 0x87, 0xf8, 0x1c, 0x33, 0x01, 0x9a, - 0x05, 0x9b, 0x87, 0xf8, 0x18, 0x31, 0x06, 0x9b, 0x87, 0xf8, 0x1c, 0x32, - 0x2a, 0x44, 0x02, 0x9b, 0x92, 0xf8, 0x4e, 0x21, 0x05, 0x92, 0x08, 0xf1, - 0x02, 0x07, 0x5b, 0x44, 0xff, 0xb2, 0x02, 0x35, 0xea, 0xb2, 0xfd, 0x2f, - 0x93, 0xf8, 0x1c, 0x33, 0x02, 0x92, 0x17, 0xdc, 0x07, 0x93, 0x57, 0x4a, - 0x03, 0x9b, 0x59, 0xf8, 0x02, 0xa0, 0x7d, 0x1c, 0xc7, 0xf1, 0xfe, 0x02, - 0xd9, 0x19, 0x58, 0x19, 0x06, 0x92, 0xd0, 0x47, 0x04, 0x9b, 0x06, 0x9a, - 0xd9, 0x19, 0x58, 0x19, 0xd0, 0x47, 0x0b, 0xf5, 0x47, 0x71, 0x48, 0x19, - 0x06, 0x9a, 0x39, 0x44, 0xd0, 0x47, 0x07, 0x9b, 0x02, 0x9a, 0x5f, 0x44, - 0x08, 0xf1, 0x03, 0x08, 0x87, 0xf8, 0x18, 0x21, 0x87, 0xf8, 0x1c, 0x33, - 0x05, 0x9a, 0x87, 0xf8, 0x1c, 0x22, 0x01, 0x23, 0x5f, 0xfa, 0x88, 0xf8, - 0x05, 0x93, 0x0b, 0xeb, 0x08, 0x03, 0xcd, 0xf8, 0x08, 0x80, 0x93, 0xf8, - 0x18, 0x51, 0xff, 0x2d, 0x7f, 0xf4, 0x65, 0xaf, 0x05, 0x9b, 0x8b, 0xf8, - 0x14, 0x41, 0x0b, 0xb1, 0x8b, 0xf8, 0x18, 0x62, 0x0a, 0xb0, 0xbd, 0xe8, - 0xf0, 0x8d, 0x08, 0xf1, 0x01, 0x03, 0x44, 0x46, 0x5f, 0xfa, 0x83, 0xf8, - 0xe7, 0xe7, 0x01, 0x9a, 0x6b, 0x1c, 0xdb, 0xb2, 0x1a, 0x44, 0x08, 0xf1, - 0x01, 0x04, 0x92, 0xf8, 0x4c, 0x21, 0x06, 0x92, 0x02, 0x9a, 0x5a, 0x44, - 0xe4, 0xb2, 0x92, 0xf8, 0x1c, 0x23, 0x07, 0x92, 0xfd, 0x2c, 0x17, 0xdc, - 0x09, 0x93, 0x2f, 0x4a, 0x03, 0x9b, 0x59, 0xf8, 0x02, 0xa0, 0x67, 0x1c, - 0xc4, 0xf1, 0xfe, 0x02, 0x19, 0x19, 0xd8, 0x19, 0x08, 0x92, 0xd0, 0x47, - 0x04, 0x9b, 0x08, 0x9a, 0x19, 0x19, 0xd8, 0x19, 0xd0, 0x47, 0x0b, 0xf5, - 0x47, 0x71, 0xc8, 0x19, 0x08, 0x9a, 0x21, 0x44, 0xd0, 0x47, 0x09, 0x9b, - 0x07, 0x9a, 0x5c, 0x44, 0x84, 0xf8, 0x18, 0x31, 0x06, 0x9b, 0x84, 0xf8, - 0x1c, 0x32, 0x02, 0x9b, 0x84, 0xf8, 0x1c, 0x23, 0x5b, 0x44, 0x08, 0xf1, - 0x02, 0x04, 0x93, 0xf8, 0x1c, 0xa3, 0x01, 0x9b, 0xe4, 0xb2, 0x2b, 0x44, - 0x02, 0x35, 0xea, 0xb2, 0xfd, 0x2c, 0x93, 0xf8, 0x4e, 0x31, 0x02, 0x92, - 0x17, 0xdc, 0x07, 0x93, 0x16, 0x4a, 0x03, 0x9b, 0x59, 0xf8, 0x02, 0x70, - 0x65, 0x1c, 0xc4, 0xf1, 0xfe, 0x02, 0x19, 0x19, 0x58, 0x19, 0x06, 0x92, - 0xb8, 0x47, 0x04, 0x9b, 0x06, 0x9a, 0x19, 0x19, 0x58, 0x19, 0xb8, 0x47, - 0x0b, 0xf5, 0x47, 0x71, 0x48, 0x19, 0x06, 0x9a, 0x21, 0x44, 0xb8, 0x47, - 0x07, 0x9b, 0x02, 0x9a, 0x5c, 0x44, 0x84, 0xf8, 0x1c, 0x32, 0x08, 0xf1, - 0x03, 0x03, 0x84, 0xf8, 0x18, 0x21, 0x84, 0xf8, 0x1c, 0xa3, 0x44, 0x46, - 0x5f, 0xfa, 0x83, 0xf8, 0x7f, 0xe7, 0x01, 0x23, 0xb8, 0x46, 0x05, 0x93, - 0x7b, 0xe7, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4d, 0xdf, 0xf8, 0xc0, 0x38, - 0x59, 0xf8, 0x03, 0xa0, 0xda, 0xf8, 0x20, 0x84, 0x88, 0xb0, 0xb8, 0xf1, - 0x00, 0x0f, 0x40, 0xf0, 0xed, 0x82, 0x4f, 0xf0, 0x00, 0x0b, 0x46, 0x46, - 0x0a, 0xeb, 0x0b, 0x03, 0x8a, 0xf8, 0x14, 0xb1, 0x93, 0xf8, 0x18, 0x31, - 0x8a, 0xf8, 0x18, 0x32, 0x5c, 0x46, 0xce, 0xb1, 0xff, 0x2b, 0x02, 0xd1, - 0x08, 0xb0, 0xbd, 0xe8, 0xf0, 0x8d, 0xdf, 0xf8, 0x8c, 0x28, 0xdf, 0xf8, - 0x8c, 0x18, 0x59, 0xf8, 0x02, 0x20, 0xdf, 0xf8, 0x88, 0x58, 0x59, 0xf8, - 0x01, 0x00, 0x59, 0xf8, 0x05, 0x50, 0x1a, 0x44, 0x59, 0x46, 0x92, 0xf8, - 0xf8, 0x30, 0x92, 0xf8, 0xa4, 0x20, 0xa8, 0x47, 0x9a, 0xf8, 0x18, 0x32, - 0x00, 0x2b, 0x56, 0xd0, 0xff, 0x2b, 0xe3, 0xd0, 0xdf, 0xf8, 0x58, 0x28, - 0x8a, 0xf8, 0x1c, 0x34, 0x59, 0xf8, 0x02, 0x50, 0x2b, 0x44, 0x93, 0xf8, - 0x50, 0x30, 0xdf, 0x06, 0x50, 0xd4, 0x9a, 0xf8, 0x14, 0x21, 0x0a, 0xeb, - 0x02, 0x01, 0x91, 0xf8, 0x18, 0x31, 0x4e, 0x2b, 0x00, 0xf0, 0x59, 0x81, - 0x4f, 0x2b, 0x00, 0xf0, 0xd1, 0x81, 0x50, 0x2b, 0x00, 0xf0, 0x9e, 0x82, - 0x8a, 0xf8, 0x1c, 0x34, 0x2b, 0x44, 0x93, 0xf9, 0x50, 0x30, 0x00, 0x2b, - 0x04, 0xda, 0x91, 0xf8, 0x1c, 0x33, 0x00, 0x2b, 0x40, 0xf0, 0x0a, 0x82, - 0x0a, 0xeb, 0x04, 0x06, 0x8a, 0xf8, 0x14, 0xb1, 0x96, 0xf8, 0x18, 0x11, - 0x8a, 0xf8, 0x18, 0x12, 0x17, 0x29, 0x00, 0xf0, 0x90, 0x80, 0x18, 0x29, - 0x19, 0xd0, 0x20, 0x29, 0x00, 0xf0, 0xa2, 0x82, 0x48, 0x29, 0x00, 0xf0, - 0xfd, 0x82, 0x3c, 0x29, 0x00, 0xf0, 0xd3, 0x82, 0xda, 0xf8, 0x20, 0x34, - 0x8a, 0xf8, 0x1c, 0x14, 0x6a, 0x18, 0x92, 0xf8, 0x50, 0x00, 0xc0, 0x07, - 0x0a, 0x46, 0x00, 0xf1, 0x10, 0x83, 0x0b, 0xf1, 0x01, 0x07, 0x9a, 0xf8, - 0x14, 0x21, 0xff, 0xb2, 0x5f, 0xe0, 0x96, 0xf8, 0x17, 0x31, 0x1d, 0x44, - 0x95, 0xf9, 0x50, 0x30, 0x00, 0x2b, 0xc0, 0xf2, 0xad, 0x82, 0x0b, 0xf1, - 0x01, 0x0b, 0xda, 0xf8, 0x20, 0x64, 0x5f, 0xfa, 0x8b, 0xfb, 0x7b, 0xe7, - 0x0a, 0xeb, 0x04, 0x02, 0x9e, 0x06, 0x92, 0xf8, 0x1c, 0x23, 0x04, 0x92, - 0xda, 0xf8, 0x20, 0x24, 0x40, 0xf1, 0xe2, 0x80, 0x15, 0x23, 0x8a, 0xf8, - 0x18, 0x32, 0x00, 0x2a, 0x00, 0xf0, 0xe2, 0x80, 0xdf, 0xf8, 0x8c, 0x37, - 0x59, 0xf8, 0x03, 0x70, 0xdf, 0xf8, 0x88, 0x37, 0x59, 0xf8, 0x03, 0x00, - 0xb8, 0x47, 0x9a, 0xf8, 0x18, 0x32, 0x07, 0x93, 0xda, 0xf8, 0x20, 0x34, - 0x9a, 0xf8, 0x19, 0x22, 0x03, 0x92, 0x0b, 0xf1, 0x01, 0x07, 0xff, 0xb2, - 0xfd, 0x2f, 0x1c, 0xdc, 0xdf, 0xf8, 0x68, 0x17, 0x06, 0x93, 0x07, 0xf1, - 0x01, 0x08, 0x0a, 0xf5, 0x8c, 0x70, 0x59, 0xf8, 0x01, 0x60, 0xc7, 0xf1, - 0xfe, 0x02, 0xc1, 0x19, 0x40, 0x44, 0x05, 0x92, 0xb0, 0x47, 0x0a, 0xf5, - 0x07, 0x70, 0xc1, 0x19, 0x05, 0x9a, 0x40, 0x44, 0xb0, 0x47, 0x0a, 0xf5, - 0x47, 0x71, 0x01, 0xeb, 0x08, 0x00, 0x05, 0x9a, 0x39, 0x44, 0xb0, 0x47, - 0x06, 0x9b, 0x07, 0x99, 0x8a, 0xf8, 0x14, 0xb1, 0x0a, 0xeb, 0x07, 0x02, - 0x82, 0xf8, 0x18, 0x11, 0x03, 0x99, 0x82, 0xf8, 0x1c, 0x12, 0x04, 0x99, - 0x82, 0xf8, 0x1c, 0x13, 0x22, 0x46, 0x52, 0x44, 0x92, 0xf8, 0x18, 0x11, - 0x8a, 0xf8, 0x18, 0x12, 0x35, 0x29, 0x00, 0xf0, 0x9c, 0x80, 0x2a, 0x29, - 0x00, 0xf0, 0xf6, 0x80, 0x2c, 0x29, 0x53, 0xd0, 0xbb, 0x46, 0x45, 0x29, - 0x1f, 0xd0, 0x39, 0x29, 0x1d, 0xd0, 0x1e, 0x46, 0x16, 0xe7, 0x66, 0x1e, - 0x56, 0x44, 0x0b, 0xf1, 0xff, 0x33, 0x96, 0xf8, 0x18, 0x11, 0x8a, 0xf8, - 0x14, 0x31, 0x45, 0x29, 0x8a, 0xf8, 0x18, 0x12, 0x00, 0xf0, 0x98, 0x82, - 0x39, 0x29, 0x40, 0xf0, 0x21, 0x81, 0xda, 0xf8, 0x20, 0x34, 0x2c, 0x22, - 0x86, 0xf8, 0x18, 0x21, 0x00, 0x2b, 0x40, 0xf0, 0x4e, 0x82, 0x0b, 0xf1, - 0x01, 0x0b, 0x5f, 0xfa, 0x8b, 0xfb, 0x9a, 0xf8, 0x14, 0x21, 0x0a, 0xeb, - 0x02, 0x01, 0x91, 0xf8, 0x17, 0x11, 0x29, 0x44, 0x91, 0xf9, 0x50, 0x10, - 0x00, 0x29, 0xd6, 0xda, 0x01, 0x32, 0xd2, 0xb2, 0x8a, 0xf8, 0x14, 0x21, - 0x52, 0x44, 0x92, 0xf8, 0x18, 0x11, 0x8a, 0xf8, 0x18, 0x12, 0x00, 0x29, - 0x00, 0xf0, 0x15, 0x81, 0x29, 0x44, 0x91, 0xf9, 0x50, 0x10, 0x00, 0x29, - 0xc5, 0xda, 0x92, 0xf8, 0x1c, 0x23, 0x00, 0x2a, 0xc1, 0xd1, 0x00, 0x2b, - 0x40, 0xf0, 0x93, 0x82, 0x54, 0x44, 0x1e, 0x23, 0x84, 0xf8, 0x18, 0x31, - 0x0a, 0xeb, 0x0b, 0x03, 0x8a, 0xf8, 0x14, 0xb1, 0x93, 0xf8, 0x18, 0x31, - 0x8a, 0xf8, 0x18, 0x32, 0x5c, 0x46, 0xed, 0xe6, 0x1e, 0x46, 0x0b, 0x46, - 0x00, 0x2e, 0x40, 0xf0, 0xd7, 0x81, 0x01, 0x33, 0x5f, 0xfa, 0x83, 0xfb, - 0x9a, 0xf8, 0x14, 0x31, 0x9a, 0xf8, 0x19, 0x22, 0x03, 0x92, 0x5c, 0x1c, - 0xe4, 0xb2, 0x53, 0x44, 0xfd, 0x2c, 0x93, 0xf8, 0x1c, 0x83, 0x1b, 0xdc, - 0xdf, 0xf8, 0x28, 0x36, 0x65, 0x1c, 0x0a, 0xf5, 0x8c, 0x70, 0x59, 0xf8, - 0x03, 0x30, 0x04, 0x93, 0xc4, 0xf1, 0xfe, 0x02, 0x01, 0x19, 0x28, 0x44, - 0x05, 0x92, 0x98, 0x47, 0x0a, 0xf5, 0x07, 0x70, 0x01, 0x19, 0x05, 0x9a, - 0x04, 0x9b, 0x28, 0x44, 0x98, 0x47, 0x0a, 0xf5, 0x47, 0x71, 0x48, 0x19, - 0x05, 0x9a, 0x04, 0x9b, 0x21, 0x44, 0x98, 0x47, 0x54, 0x44, 0x03, 0x9b, - 0x84, 0xf8, 0x18, 0xb1, 0x84, 0xf8, 0x1c, 0x32, 0x84, 0xf8, 0x1c, 0x83, - 0xbb, 0x46, 0x8f, 0xe6, 0x14, 0x23, 0x8a, 0xf8, 0x18, 0x32, 0x00, 0x2a, - 0x40, 0xf0, 0x38, 0x81, 0x07, 0x93, 0x00, 0x23, 0x28, 0xe7, 0x92, 0xf8, - 0x17, 0x11, 0x8a, 0xf8, 0x1c, 0x14, 0x69, 0x5c, 0x01, 0xf0, 0x04, 0x01, - 0x8a, 0xf8, 0x18, 0x12, 0x00, 0x29, 0x4e, 0xd0, 0x00, 0x2b, 0x40, 0xf0, - 0x3a, 0x81, 0x10, 0x23, 0x82, 0xf8, 0x18, 0x31, 0x0a, 0xeb, 0x07, 0x03, - 0x3c, 0x46, 0x93, 0xf8, 0x18, 0x31, 0x8a, 0xf8, 0x14, 0x71, 0x8a, 0xf8, - 0x18, 0x32, 0xbb, 0x46, 0x8e, 0xe6, 0xda, 0xf8, 0x20, 0x64, 0x18, 0x23, - 0x8a, 0xf8, 0x18, 0x32, 0x00, 0x2e, 0x40, 0xf0, 0x35, 0x81, 0x54, 0x1c, - 0x0a, 0xeb, 0x02, 0x01, 0xe4, 0xb2, 0x9a, 0xf8, 0x19, 0x22, 0x91, 0xf8, - 0x1c, 0x83, 0x03, 0x92, 0x0d, 0x20, 0xfd, 0x2c, 0x81, 0xf8, 0x18, 0x01, - 0x1a, 0xdc, 0xdf, 0xf8, 0x68, 0x15, 0x05, 0x93, 0x65, 0x1c, 0x0a, 0xf5, - 0x8c, 0x70, 0x59, 0xf8, 0x01, 0x70, 0xc4, 0xf1, 0xfe, 0x02, 0x01, 0x19, - 0x28, 0x44, 0x04, 0x92, 0xb8, 0x47, 0x0a, 0xf5, 0x07, 0x70, 0x01, 0x19, - 0x04, 0x9a, 0x28, 0x44, 0xb8, 0x47, 0x0a, 0xf5, 0x47, 0x71, 0x48, 0x19, - 0x04, 0x9a, 0x21, 0x44, 0xb8, 0x47, 0x05, 0x9b, 0x54, 0x44, 0x0b, 0xf1, - 0x01, 0x0b, 0x84, 0xf8, 0x18, 0x31, 0x03, 0x9b, 0x84, 0xf8, 0x1c, 0x32, - 0x84, 0xf8, 0x1c, 0x83, 0x5f, 0xfa, 0x8b, 0xfb, 0x2c, 0xe6, 0x1e, 0x46, - 0xbb, 0x46, 0x29, 0xe6, 0x1e, 0x46, 0x0b, 0x46, 0x00, 0x2e, 0x40, 0xf0, - 0x19, 0x81, 0x03, 0xf1, 0x01, 0x0b, 0x9a, 0xf8, 0x14, 0x31, 0x9a, 0xf8, - 0x19, 0x22, 0x03, 0x92, 0x5c, 0x1c, 0x53, 0x44, 0xe4, 0xb2, 0x93, 0xf8, - 0x1c, 0x33, 0x04, 0x93, 0xfd, 0x2c, 0x5f, 0xfa, 0x8b, 0xfb, 0x18, 0xdc, - 0xdf, 0xf8, 0xe4, 0x34, 0x65, 0x1c, 0x0a, 0xf5, 0x8c, 0x70, 0x59, 0xf8, - 0x03, 0x80, 0xc4, 0xf1, 0xfe, 0x02, 0x01, 0x19, 0x28, 0x44, 0x05, 0x92, - 0xc0, 0x47, 0x0a, 0xf5, 0x07, 0x70, 0x01, 0x19, 0x05, 0x9a, 0x28, 0x44, - 0xc0, 0x47, 0x0a, 0xf5, 0x47, 0x71, 0x48, 0x19, 0x05, 0x9a, 0x21, 0x44, - 0xc0, 0x47, 0x54, 0x44, 0x03, 0x9b, 0x84, 0xf8, 0x1c, 0x32, 0x04, 0x9b, - 0x84, 0xf8, 0x18, 0xb1, 0x84, 0xf8, 0x1c, 0x33, 0xbb, 0x46, 0xef, 0xe5, - 0xda, 0xf8, 0x20, 0x64, 0x1b, 0x23, 0x8a, 0xf8, 0x18, 0x32, 0x00, 0x2e, - 0x85, 0xd0, 0xdf, 0xf8, 0x94, 0x24, 0xb8, 0xe0, 0x0b, 0x46, 0x2b, 0x44, - 0xda, 0xf8, 0x20, 0x64, 0x93, 0xf8, 0x50, 0x30, 0x03, 0xf0, 0x80, 0x03, - 0x8a, 0xf8, 0x18, 0x32, 0x00, 0x2e, 0x40, 0xf0, 0xf7, 0x80, 0x1b, 0xb1, - 0x54, 0x44, 0x12, 0x23, 0x84, 0xf8, 0x18, 0x31, 0x0b, 0xf1, 0x01, 0x0b, - 0x5f, 0xfa, 0x8b, 0xfb, 0xce, 0xe5, 0x92, 0xf8, 0x19, 0x21, 0xff, 0x2a, - 0x00, 0xf0, 0x62, 0x81, 0x1e, 0x46, 0x13, 0x46, 0x2b, 0x44, 0x93, 0xf8, - 0x50, 0x20, 0x02, 0xf0, 0x80, 0x03, 0x8a, 0xf8, 0x18, 0x32, 0x7e, 0xb1, - 0x13, 0x06, 0x7f, 0xf5, 0xbd, 0xad, 0xdf, 0xf8, 0x40, 0x34, 0x59, 0xf8, - 0x03, 0x00, 0xdf, 0xf8, 0x28, 0x34, 0x59, 0xf8, 0x03, 0x30, 0x98, 0x47, - 0x9a, 0xf8, 0x18, 0x32, 0xda, 0xf8, 0x20, 0x64, 0x00, 0x2b, 0x3f, 0xf4, - 0xad, 0xad, 0x54, 0x44, 0x1e, 0x23, 0x84, 0xf8, 0x18, 0x31, 0xa7, 0xe5, - 0x53, 0x1c, 0x5a, 0xfa, 0x83, 0xf3, 0x93, 0xf8, 0x18, 0x31, 0x8a, 0xf8, - 0x18, 0x32, 0x00, 0x2b, 0x7f, 0xf4, 0xec, 0xad, 0x93, 0x1c, 0xdb, 0xb2, - 0x0a, 0xeb, 0x03, 0x02, 0x8a, 0xf8, 0x14, 0x31, 0x92, 0xf8, 0x18, 0x21, - 0x8a, 0xf8, 0x1c, 0x24, 0xff, 0x2a, 0x19, 0x46, 0x3f, 0xf4, 0xde, 0xad, - 0x2a, 0x44, 0x92, 0xf9, 0x50, 0x20, 0x00, 0x2a, 0xbf, 0xf6, 0xd8, 0xad, - 0x53, 0x44, 0x93, 0xf8, 0x1c, 0x33, 0x8a, 0xf8, 0x18, 0x32, 0x00, 0x2b, - 0x3f, 0xf4, 0xd0, 0xad, 0xda, 0xf8, 0x20, 0x64, 0x0d, 0x46, 0x00, 0x2e, - 0x40, 0xf0, 0xb2, 0x81, 0xfd, 0x2d, 0x9a, 0xf8, 0x19, 0x72, 0x17, 0xdc, - 0xeb, 0x4b, 0x6c, 0x1c, 0x0a, 0xf5, 0x8c, 0x70, 0x59, 0xf8, 0x03, 0x80, - 0xc5, 0xf1, 0xfe, 0x02, 0x41, 0x19, 0x20, 0x44, 0x03, 0x92, 0xc0, 0x47, - 0x0a, 0xf5, 0x07, 0x70, 0x41, 0x19, 0x03, 0x9a, 0x20, 0x44, 0xc0, 0x47, - 0x0a, 0xf5, 0x47, 0x71, 0x08, 0x19, 0x03, 0x9a, 0x29, 0x44, 0xc0, 0x47, - 0x55, 0x44, 0x1f, 0x23, 0x0b, 0xf1, 0x01, 0x0b, 0x85, 0xf8, 0x18, 0x31, - 0x00, 0x23, 0x85, 0xf8, 0x1c, 0x72, 0x5f, 0xfa, 0x8b, 0xfb, 0x85, 0xf8, - 0x1c, 0x33, 0x51, 0xe5, 0xdb, 0x4b, 0x59, 0xf8, 0x03, 0x00, 0xd5, 0x4b, - 0x59, 0xf8, 0x03, 0x70, 0xb8, 0x47, 0xda, 0xf8, 0x20, 0x34, 0x9a, 0xf8, - 0x18, 0x22, 0x07, 0x92, 0x00, 0x2b, 0x3f, 0xf4, 0xe5, 0xad, 0x15, 0x2a, - 0x7f, 0xf4, 0xe2, 0xad, 0xd6, 0xe5, 0xd3, 0x4a, 0xcc, 0x4b, 0x59, 0xf8, - 0x02, 0x00, 0x59, 0xf8, 0x03, 0x30, 0x98, 0x47, 0x9a, 0xf8, 0x14, 0x31, - 0xda, 0xf8, 0x20, 0x64, 0x53, 0x44, 0x10, 0x22, 0x83, 0xf8, 0x18, 0x21, - 0xbb, 0x46, 0x2d, 0xe5, 0xcb, 0x4a, 0xc4, 0x4b, 0x59, 0xf8, 0x02, 0x00, - 0x59, 0xf8, 0x03, 0x30, 0x98, 0x47, 0x9a, 0xf8, 0x14, 0x21, 0x9a, 0xf8, - 0x18, 0x32, 0xda, 0xf8, 0x20, 0x64, 0xbc, 0xe6, 0xda, 0xf8, 0x20, 0x64, - 0x1c, 0x23, 0x8a, 0xf8, 0x18, 0x32, 0x00, 0x2e, 0x3f, 0xf4, 0xb5, 0xae, - 0xc1, 0x4a, 0xe8, 0xe7, 0xc1, 0x4a, 0xb8, 0x4b, 0x59, 0xf8, 0x02, 0x00, - 0x59, 0xf8, 0x03, 0x30, 0x98, 0x47, 0xda, 0xf8, 0x20, 0x84, 0x08, 0xe5, - 0xbd, 0x4a, 0xb3, 0x4b, 0x59, 0xf8, 0x02, 0x00, 0x59, 0xf8, 0x03, 0x30, - 0x98, 0x47, 0x9a, 0xf8, 0x18, 0x32, 0xda, 0xf8, 0x20, 0x64, 0xda, 0xe6, - 0x96, 0xf8, 0x17, 0x31, 0x3c, 0x2b, 0x7f, 0xf4, 0x78, 0xad, 0xda, 0xf8, - 0x20, 0x34, 0x00, 0x2b, 0x40, 0xf0, 0xc5, 0x80, 0x0b, 0xf1, 0x01, 0x0b, - 0x26, 0x23, 0x5f, 0xfa, 0x8b, 0xfb, 0x86, 0xf8, 0x18, 0x31, 0x19, 0xe6, - 0xaf, 0x4a, 0xa4, 0x4b, 0x59, 0xf8, 0x02, 0x00, 0x59, 0xf8, 0x03, 0x30, - 0x98, 0x47, 0x9a, 0xf8, 0x18, 0x32, 0xda, 0xf8, 0x20, 0x64, 0x1c, 0xe6, - 0xaa, 0x4b, 0x59, 0xf8, 0x03, 0x00, 0x9d, 0x4b, 0x59, 0xf8, 0x03, 0x30, - 0x98, 0x47, 0x9a, 0xf8, 0x18, 0x32, 0xda, 0xf8, 0x20, 0x64, 0xfc, 0xe6, - 0xda, 0xf8, 0x20, 0x34, 0x00, 0x2b, 0x40, 0xf0, 0xd2, 0x80, 0x0b, 0xf1, - 0x01, 0x0b, 0x13, 0x23, 0x5f, 0xfa, 0x8b, 0xfb, 0x86, 0xf8, 0x18, 0x31, - 0xf4, 0xe5, 0x96, 0xf8, 0x19, 0x31, 0xff, 0x2b, 0x3f, 0xf4, 0x41, 0xad, - 0x2b, 0x44, 0x93, 0xf8, 0x50, 0x30, 0x9c, 0x06, 0x3f, 0xf5, 0x3b, 0xad, - 0xda, 0xf8, 0x20, 0x34, 0x00, 0x2b, 0x40, 0xf0, 0xdc, 0x80, 0x0b, 0xf1, - 0x01, 0x0b, 0x3f, 0x23, 0x5f, 0xfa, 0x8b, 0xfb, 0x86, 0xf8, 0x18, 0x31, - 0xdc, 0xe5, 0x93, 0x4b, 0x59, 0xf8, 0x03, 0x00, 0x84, 0x4b, 0x59, 0xf8, - 0x03, 0x70, 0xb8, 0x47, 0x0b, 0xf1, 0x01, 0x07, 0x9a, 0xf8, 0x18, 0x12, - 0xda, 0xf8, 0x20, 0x34, 0xff, 0xb2, 0x81, 0xe5, 0x96, 0xf8, 0x19, 0x31, - 0x8a, 0xf8, 0x1c, 0x34, 0xff, 0x2b, 0x00, 0xf0, 0x95, 0x80, 0x2b, 0x44, - 0x93, 0xf8, 0x50, 0x20, 0xda, 0xf8, 0x20, 0x34, 0x02, 0xf0, 0x20, 0x02, - 0x8a, 0xf8, 0x18, 0x22, 0x00, 0x2b, 0x58, 0xd1, 0x00, 0x2a, 0x40, 0xf0, - 0xcf, 0x80, 0x0a, 0xeb, 0x04, 0x02, 0x4f, 0xf0, 0x4b, 0x01, 0x82, 0xf8, - 0x18, 0x11, 0x4f, 0xf0, 0x4b, 0x02, 0x8a, 0xf8, 0x1c, 0x24, 0x4b, 0x22, - 0x11, 0x46, 0x0a, 0xeb, 0x04, 0x00, 0x90, 0xf8, 0x17, 0x01, 0x8a, 0xf8, - 0x18, 0x02, 0x20, 0x28, 0x27, 0xd0, 0x0b, 0xf1, 0x01, 0x0b, 0x8a, 0xf8, - 0x18, 0x12, 0x5f, 0xfa, 0x8b, 0xfb, 0x54, 0xe5, 0xda, 0xf8, 0x20, 0x34, - 0x5b, 0xb9, 0x0b, 0xf1, 0x01, 0x07, 0x2a, 0x22, 0xff, 0xb2, 0x86, 0xf8, - 0x18, 0x21, 0x49, 0xe5, 0x00, 0x2b, 0x3f, 0xf4, 0x91, 0xad, 0x1e, 0x46, - 0x62, 0xe4, 0x6d, 0x4b, 0x59, 0xf8, 0x03, 0x00, 0x5d, 0x4b, 0x59, 0xf8, - 0x03, 0x70, 0xb8, 0x47, 0x2a, 0x23, 0x0b, 0xf1, 0x01, 0x07, 0x86, 0xf8, - 0x18, 0x31, 0x9a, 0xf8, 0x18, 0x12, 0xda, 0xf8, 0x20, 0x34, 0xff, 0xb2, - 0x2d, 0xe5, 0x1e, 0x46, 0x0b, 0x46, 0x76, 0xbb, 0x54, 0x44, 0x0c, 0x3b, - 0x0b, 0xf1, 0x01, 0x0b, 0x84, 0xf8, 0x18, 0x31, 0x5f, 0xfa, 0x8b, 0xfb, - 0x44, 0xe4, 0x54, 0x4b, 0x59, 0xf8, 0x03, 0x00, 0x4e, 0x4b, 0x54, 0x44, - 0x59, 0xf8, 0x03, 0x30, 0x98, 0x47, 0x1e, 0x23, 0xda, 0xf8, 0x20, 0x64, - 0x84, 0xf8, 0x18, 0x31, 0x36, 0xe4, 0x00, 0x2a, 0x4a, 0xd0, 0x8a, 0xf8, - 0x1c, 0x14, 0x0a, 0x46, 0xaf, 0xe7, 0x55, 0x4b, 0x59, 0xf8, 0x03, 0x00, - 0x44, 0x4b, 0x35, 0x46, 0x59, 0xf8, 0x03, 0x30, 0x98, 0x47, 0x0b, 0xf1, - 0x01, 0x0b, 0x26, 0x23, 0xda, 0xf8, 0x20, 0x64, 0x85, 0xf8, 0x18, 0x31, - 0x5f, 0xfa, 0x8b, 0xfb, 0x1e, 0xe4, 0xa2, 0xf1, 0x0c, 0x03, 0xa9, 0x18, - 0x2b, 0x44, 0x4b, 0x4a, 0x59, 0xf8, 0x02, 0x00, 0x93, 0xf8, 0xf8, 0x20, - 0x00, 0x92, 0x37, 0x4a, 0x93, 0xf8, 0xa4, 0x30, 0x59, 0xf8, 0x02, 0x50, - 0x91, 0xf8, 0xf8, 0x20, 0x91, 0xf8, 0xa4, 0x10, 0xa8, 0x47, 0x9a, 0xf8, - 0x1c, 0x34, 0xda, 0xf8, 0x20, 0x64, 0xb7, 0xe7, 0x4f, 0xf0, 0x4b, 0x03, - 0x86, 0xf8, 0x18, 0x31, 0xda, 0xf8, 0x20, 0x34, 0x77, 0xe7, 0x3e, 0x4a, - 0x2c, 0x4b, 0x59, 0xf8, 0x02, 0x00, 0x59, 0xf8, 0x03, 0x30, 0x98, 0x47, - 0x9a, 0xf8, 0x14, 0x31, 0xda, 0xf8, 0x20, 0x64, 0x53, 0x44, 0x13, 0x22, - 0x0b, 0xf1, 0x01, 0x0b, 0x83, 0xf8, 0x18, 0x21, 0x5f, 0xfa, 0x8b, 0xfb, - 0xff, 0xf7, 0xea, 0xbb, 0x34, 0x4b, 0x59, 0xf8, 0x03, 0x00, 0x21, 0x4b, - 0x59, 0xf8, 0x03, 0x70, 0xb8, 0x47, 0x9a, 0xf8, 0x18, 0x32, 0x73, 0xbb, - 0xda, 0xf8, 0x20, 0x34, 0x4f, 0xe7, 0x2f, 0x4b, 0x59, 0xf8, 0x03, 0x00, - 0x1a, 0x4b, 0x35, 0x46, 0x59, 0xf8, 0x03, 0x30, 0x98, 0x47, 0x0b, 0xf1, - 0x01, 0x0b, 0x3f, 0x23, 0xda, 0xf8, 0x20, 0x64, 0x85, 0xf8, 0x18, 0x31, - 0x5f, 0xfa, 0x8b, 0xfb, 0xff, 0xf7, 0xca, 0xbb, 0x26, 0x4a, 0x12, 0x4b, - 0x59, 0xf8, 0x02, 0x00, 0x59, 0xf8, 0x03, 0x30, 0x98, 0x47, 0x9a, 0xf8, - 0x14, 0x51, 0xda, 0xf8, 0x20, 0x64, 0x41, 0xe6, 0x35, 0x46, 0x8a, 0xf8, - 0x1c, 0x14, 0x95, 0xf8, 0x17, 0x21, 0x8a, 0xf8, 0x18, 0x22, 0x20, 0x2a, - 0x1e, 0x46, 0x0b, 0x46, 0x7f, 0xf4, 0xde, 0xad, 0x62, 0xe7, 0x96, 0xf8, - 0x18, 0x11, 0xda, 0xf8, 0x20, 0x34, 0x11, 0xe4, 0x00, 0x00, 0x00, 0x00, - 0x24, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, - 0x4c, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, - 0x58, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, - 0x7c, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, - 0x2d, 0xe9, 0xf0, 0x4d, 0x2d, 0xed, 0x02, 0x8b, 0xdf, 0xf8, 0xc0, 0x38, - 0x59, 0xf8, 0x03, 0x40, 0x94, 0xf8, 0x18, 0x31, 0x00, 0x26, 0xff, 0x2b, - 0x84, 0xb0, 0x84, 0xf8, 0x14, 0x61, 0x00, 0xf0, 0x9c, 0x80, 0xdf, 0xf8, - 0xac, 0x28, 0x04, 0xf5, 0x8c, 0x7b, 0x59, 0xf8, 0x02, 0x50, 0x08, 0xe0, - 0x01, 0x36, 0xf6, 0xb2, 0x84, 0xf8, 0x14, 0x61, 0xa3, 0x19, 0x93, 0xf8, - 0x18, 0x31, 0xff, 0x2b, 0x18, 0xd0, 0xeb, 0x5c, 0xd8, 0x07, 0xf3, 0xd5, - 0x73, 0x1e, 0xdb, 0xb2, 0x58, 0x1c, 0x58, 0x44, 0x0c, 0xe0, 0x10, 0xf8, - 0x01, 0x2d, 0xff, 0x2a, 0x05, 0xeb, 0x02, 0x07, 0x00, 0xf0, 0xa1, 0x80, - 0x97, 0xf9, 0x50, 0x70, 0x00, 0x2f, 0xc0, 0xf2, 0x9c, 0x80, 0x0b, 0x46, - 0x5a, 0x1e, 0xd1, 0xb2, 0x00, 0x2b, 0xee, 0xd1, 0x94, 0xf8, 0x18, 0x31, - 0x00, 0x26, 0xff, 0x2b, 0x84, 0xf8, 0x14, 0x61, 0x6b, 0xd0, 0x04, 0xf5, - 0x07, 0x72, 0xb3, 0x46, 0x03, 0x92, 0xea, 0x18, 0x92, 0xf8, 0x50, 0x20, - 0x22, 0xf0, 0x7f, 0x01, 0x17, 0x06, 0x84, 0xf8, 0x18, 0x12, 0x37, 0xd5, - 0x06, 0xf1, 0x01, 0x0a, 0x5f, 0xfa, 0x8a, 0xfa, 0x04, 0xeb, 0x0a, 0x07, - 0x84, 0xf8, 0x14, 0xa1, 0x97, 0xf8, 0x18, 0x31, 0xff, 0x2b, 0x51, 0x46, - 0x56, 0xd0, 0xea, 0x18, 0x92, 0xf8, 0x50, 0x20, 0x84, 0xf8, 0x24, 0x24, - 0x50, 0x06, 0x00, 0xf1, 0xf3, 0x80, 0xa3, 0xf1, 0x12, 0x02, 0x01, 0x2a, - 0x19, 0xd8, 0x02, 0x36, 0xf6, 0xb2, 0x84, 0xf8, 0x14, 0x61, 0x26, 0x44, - 0x96, 0xf8, 0x18, 0x21, 0x2a, 0x44, 0x92, 0xf8, 0x50, 0x20, 0x56, 0x06, - 0x0d, 0xd5, 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, 0x40, 0xf0, 0x26, 0x83, - 0xa3, 0x44, 0x9b, 0xf8, 0x1c, 0x32, 0x01, 0x3b, 0x8b, 0xf8, 0x1c, 0x32, - 0x4a, 0xe0, 0x31, 0x46, 0xb2, 0x46, 0x84, 0xf8, 0x14, 0xa1, 0x8b, 0x46, - 0x56, 0x46, 0xbe, 0xe7, 0xeb, 0x5c, 0x19, 0x07, 0x00, 0xf1, 0xe1, 0x80, - 0x92, 0x07, 0x00, 0xf1, 0x01, 0x81, 0xdf, 0x06, 0x13, 0xd5, 0xa3, 0x44, - 0x9b, 0xf8, 0x17, 0x31, 0x2b, 0x44, 0x93, 0xf8, 0x50, 0x30, 0x98, 0x07, - 0x0b, 0xd5, 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, 0x40, 0xf0, 0x58, 0x83, - 0x33, 0x46, 0x23, 0x44, 0x93, 0xf8, 0x1c, 0x22, 0x02, 0x3a, 0x83, 0xf8, - 0x1c, 0x22, 0x01, 0x36, 0xf6, 0xb2, 0xa3, 0x19, 0xb3, 0x46, 0x93, 0xf8, - 0x18, 0x31, 0x84, 0xf8, 0x14, 0x61, 0xff, 0x2b, 0x97, 0xd1, 0x04, 0xb0, - 0xbd, 0xec, 0x02, 0x8b, 0xbd, 0xe8, 0xf0, 0x8d, 0x41, 0x23, 0x84, 0xf8, - 0x24, 0x34, 0x95, 0xf8, 0x4f, 0x31, 0x59, 0x06, 0x40, 0xf1, 0x08, 0x81, - 0xd4, 0xf8, 0x20, 0x34, 0x84, 0xf8, 0x14, 0x61, 0x00, 0x2b, 0x40, 0xf0, - 0x08, 0x81, 0x26, 0x44, 0x96, 0xf8, 0x1c, 0x32, 0xda, 0x08, 0x9b, 0x1a, - 0x86, 0xf8, 0x1c, 0x32, 0x84, 0xf8, 0x24, 0x24, 0x04, 0xeb, 0x0a, 0x03, - 0xd3, 0x46, 0x93, 0xf8, 0x18, 0x31, 0x56, 0x46, 0xd7, 0xe7, 0x84, 0xf8, - 0x14, 0x31, 0x0c, 0xe0, 0xe1, 0x18, 0x81, 0xf8, 0x1c, 0x22, 0x5a, 0x1c, - 0xd2, 0xb2, 0xb2, 0x42, 0x84, 0xf8, 0x14, 0x21, 0x73, 0xd0, 0xa1, 0x18, - 0x13, 0x46, 0x91, 0xf8, 0x18, 0x21, 0xff, 0x2a, 0xf3, 0xd0, 0xa9, 0x5c, - 0x89, 0x06, 0x04, 0xd5, 0x2a, 0x44, 0x92, 0xf8, 0x50, 0x20, 0x52, 0x07, - 0xeb, 0xd5, 0xe2, 0x18, 0xd4, 0xf8, 0x20, 0x14, 0x92, 0xf8, 0x1c, 0x02, - 0x42, 0x1c, 0x02, 0xeb, 0x50, 0x02, 0xd2, 0xb2, 0x84, 0xf8, 0x18, 0x22, - 0x00, 0x29, 0xdb, 0xd0, 0xdf, 0xf8, 0xe0, 0x36, 0xdf, 0xf8, 0xe0, 0x26, - 0x59, 0xf8, 0x03, 0x70, 0x59, 0xf8, 0x02, 0x00, 0xb8, 0x47, 0xd4, 0xf8, - 0x20, 0x34, 0x00, 0x2b, 0x00, 0xf0, 0x4d, 0x83, 0xdf, 0xf8, 0xcc, 0x36, - 0x59, 0xf8, 0x03, 0x00, 0xb8, 0x47, 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, - 0x00, 0xf0, 0x43, 0x83, 0x94, 0xf8, 0x14, 0x11, 0xdf, 0xf8, 0xb8, 0x36, - 0x60, 0x18, 0x59, 0xf8, 0x03, 0xa0, 0x90, 0xf8, 0x18, 0x21, 0x90, 0xf8, - 0x1c, 0x32, 0xdf, 0xf8, 0xac, 0x06, 0x00, 0x93, 0x2a, 0x44, 0x59, 0xf8, - 0x00, 0x80, 0x92, 0xf8, 0xf8, 0x30, 0x92, 0xf8, 0xa4, 0x20, 0x50, 0x46, - 0xc0, 0x47, 0x94, 0xf8, 0x14, 0x31, 0xd4, 0xf8, 0x20, 0x24, 0x94, 0xf8, - 0x18, 0x02, 0xe1, 0x18, 0x81, 0xf8, 0x1c, 0x02, 0x00, 0x2a, 0xa4, 0xd0, - 0xdf, 0xf8, 0x80, 0x36, 0x59, 0xf8, 0x03, 0x00, 0xb8, 0x47, 0xd4, 0xf8, - 0x20, 0x34, 0x73, 0xb1, 0x94, 0xf8, 0x14, 0x11, 0x63, 0x18, 0x50, 0x46, - 0x93, 0xf8, 0x18, 0x21, 0x93, 0xf8, 0x1c, 0x32, 0x00, 0x93, 0x2a, 0x44, - 0x92, 0xf8, 0xf8, 0x30, 0x92, 0xf8, 0xa4, 0x20, 0xc0, 0x47, 0x94, 0xf8, - 0x14, 0x31, 0x5a, 0x1c, 0xd2, 0xb2, 0xb2, 0x42, 0x84, 0xf8, 0x14, 0x21, - 0x8b, 0xd1, 0x02, 0x33, 0xde, 0xb2, 0x84, 0xf8, 0x14, 0x61, 0xc5, 0xe6, - 0x50, 0x07, 0x40, 0xf1, 0xb0, 0x81, 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, - 0x40, 0xf0, 0xc9, 0x80, 0x53, 0x46, 0x01, 0x3b, 0x23, 0x44, 0x93, 0xf8, - 0x1c, 0x12, 0x84, 0xf8, 0x18, 0x12, 0x4a, 0x1c, 0x02, 0xeb, 0x91, 0x02, - 0x83, 0xf8, 0x1c, 0x22, 0x5e, 0xe7, 0x01, 0x36, 0xf6, 0xb2, 0xa3, 0x19, - 0x84, 0xf8, 0x14, 0x61, 0x93, 0xf8, 0x18, 0x31, 0xff, 0x2b, 0xb3, 0x46, - 0x48, 0xd0, 0xea, 0x18, 0x92, 0xf8, 0x50, 0x20, 0x02, 0xf0, 0x02, 0x02, - 0x84, 0xf8, 0x18, 0x22, 0x00, 0x2a, 0x3f, 0xf4, 0x00, 0xaf, 0xd4, 0xf8, - 0x20, 0x34, 0x00, 0x2b, 0x40, 0xf0, 0x04, 0x81, 0x33, 0x46, 0x03, 0x9a, - 0x01, 0x3b, 0x40, 0xf2, 0x05, 0x61, 0xd1, 0x52, 0xa3, 0x19, 0x93, 0xf8, - 0x18, 0x31, 0x1a, 0xe7, 0x06, 0xf1, 0x01, 0x08, 0x5f, 0xfa, 0x88, 0xf8, - 0x43, 0x46, 0xe2, 0x18, 0x59, 0x1c, 0x92, 0xf8, 0x18, 0x21, 0x18, 0x46, - 0xcb, 0xb2, 0x00, 0x2a, 0xf7, 0xd0, 0xff, 0x2a, 0x84, 0xf8, 0x14, 0x01, - 0x17, 0xd0, 0x2a, 0x44, 0x92, 0xf8, 0x50, 0x30, 0x9b, 0x07, 0x12, 0xd5, - 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, 0x40, 0xf0, 0x66, 0x81, 0x20, 0x44, - 0xa3, 0x44, 0x90, 0xf8, 0x1c, 0x32, 0x5b, 0x08, 0x01, 0x33, 0x80, 0xf8, - 0x1c, 0x32, 0x9b, 0xf8, 0x1c, 0x32, 0x5b, 0x08, 0x01, 0x33, 0x8b, 0xf8, - 0x1c, 0x32, 0x04, 0xeb, 0x08, 0x03, 0xc3, 0x46, 0x93, 0xf8, 0x18, 0x31, - 0x46, 0x46, 0xea, 0xe6, 0x00, 0x23, 0x84, 0xf8, 0x18, 0x32, 0xb2, 0x46, - 0x84, 0xf8, 0x14, 0xa1, 0x04, 0xb0, 0xbd, 0xec, 0x02, 0x8b, 0xbd, 0xe8, - 0xf0, 0x8d, 0xdf, 0xf8, 0x58, 0x35, 0x59, 0xf8, 0x03, 0x00, 0xdf, 0xf8, - 0x38, 0x35, 0x59, 0xf8, 0x03, 0x60, 0xb0, 0x47, 0xd4, 0xf8, 0x20, 0x34, - 0x00, 0x2b, 0x00, 0xf0, 0x81, 0x82, 0xdf, 0xf8, 0x2c, 0x35, 0x59, 0xf8, - 0x03, 0x00, 0xb0, 0x47, 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, 0x00, 0xf0, - 0x77, 0x82, 0x94, 0xf8, 0x14, 0x11, 0xdf, 0xf8, 0x18, 0x35, 0x59, 0xf8, - 0x03, 0x80, 0x63, 0x18, 0x40, 0x46, 0x93, 0xf8, 0x18, 0x21, 0x93, 0xf8, - 0x1c, 0x32, 0x00, 0x93, 0x2a, 0x44, 0xdf, 0xf8, 0x04, 0x35, 0x59, 0xf8, - 0x03, 0x70, 0x92, 0xf8, 0xf8, 0x30, 0x92, 0xf8, 0xa4, 0x20, 0xb8, 0x47, - 0x94, 0xf8, 0x14, 0x31, 0xd4, 0xf8, 0x20, 0x14, 0x23, 0x44, 0x93, 0xf8, - 0x1c, 0x22, 0xd0, 0x08, 0x12, 0x1a, 0x83, 0xf8, 0x1c, 0x22, 0x84, 0xf8, - 0x24, 0x04, 0x00, 0x29, 0x3f, 0xf4, 0xc2, 0xae, 0xdf, 0xf8, 0xd4, 0x34, - 0x59, 0xf8, 0x03, 0x00, 0xb0, 0x47, 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, - 0x00, 0xf0, 0x49, 0x82, 0x94, 0xf8, 0x14, 0x11, 0x63, 0x18, 0x56, 0x46, - 0x93, 0xf8, 0x18, 0x21, 0x93, 0xf8, 0x1c, 0x32, 0x00, 0x93, 0x2a, 0x44, - 0xd3, 0x46, 0xa2, 0x44, 0x92, 0xf8, 0xf8, 0x30, 0x92, 0xf8, 0xa4, 0x20, - 0x40, 0x46, 0xb8, 0x47, 0x9a, 0xf8, 0x18, 0x31, 0x81, 0xe6, 0xdf, 0xf8, - 0xa0, 0x34, 0x59, 0xf8, 0x03, 0x00, 0xdf, 0xf8, 0x7c, 0x34, 0x59, 0xf8, - 0x03, 0x60, 0xb0, 0x47, 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, 0x00, 0xf0, - 0x13, 0x82, 0xdf, 0xf8, 0x70, 0x34, 0x59, 0xf8, 0x03, 0x00, 0xb0, 0x47, - 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, 0x00, 0xf0, 0x09, 0x82, 0x94, 0xf8, - 0x14, 0x11, 0xdf, 0xf8, 0x5c, 0x04, 0x01, 0x39, 0x63, 0x18, 0x59, 0xf8, - 0x00, 0xb0, 0x93, 0xf8, 0x18, 0x21, 0x93, 0xf8, 0x1c, 0x32, 0x00, 0x93, - 0x2a, 0x44, 0xdf, 0xf8, 0x48, 0x34, 0x58, 0x46, 0x59, 0xf8, 0x03, 0x80, - 0x92, 0xf8, 0xf8, 0x30, 0x92, 0xf8, 0xa4, 0x20, 0xc0, 0x47, 0x94, 0xf8, - 0x14, 0x31, 0xd4, 0xf8, 0x20, 0x14, 0x01, 0x3b, 0x23, 0x44, 0x93, 0xf8, - 0x1c, 0x02, 0x84, 0xf8, 0x18, 0x02, 0x42, 0x1c, 0x02, 0xeb, 0x90, 0x02, - 0x83, 0xf8, 0x1c, 0x22, 0x00, 0x29, 0x3f, 0xf4, 0x61, 0xae, 0xdf, 0xf8, - 0x14, 0x34, 0x59, 0xf8, 0x03, 0x00, 0xb0, 0x47, 0xd4, 0xf8, 0x20, 0x34, - 0x00, 0x2b, 0x00, 0xf0, 0xd8, 0x81, 0x94, 0xf8, 0x14, 0x11, 0x01, 0x39, - 0x63, 0x18, 0x58, 0x46, 0x93, 0xf8, 0x18, 0x21, 0x93, 0xf8, 0x1c, 0x32, - 0x00, 0x93, 0x2a, 0x44, 0xd3, 0x46, 0x92, 0xf8, 0xf8, 0x30, 0x92, 0xf8, - 0xa4, 0x20, 0xc0, 0x47, 0x56, 0x46, 0x97, 0xf8, 0x18, 0x31, 0x20, 0xe6, - 0xf8, 0x4b, 0x59, 0xf8, 0x03, 0x00, 0xef, 0x4b, 0x59, 0xf8, 0x03, 0xa0, - 0xd0, 0x47, 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, 0x00, 0xf0, 0xbc, 0x81, - 0xef, 0x4b, 0x59, 0xf8, 0x03, 0x80, 0x40, 0x46, 0xd0, 0x47, 0xd4, 0xf8, - 0x20, 0x34, 0x00, 0x2b, 0x00, 0xf0, 0xb2, 0x81, 0xe8, 0x4b, 0x94, 0xf8, - 0x14, 0x11, 0x4b, 0x44, 0x93, 0xed, 0x00, 0x8a, 0x63, 0x18, 0x18, 0xee, - 0x10, 0x0a, 0x93, 0xf8, 0x18, 0x21, 0x93, 0xf8, 0x1c, 0x32, 0x00, 0x93, - 0xe2, 0x4b, 0x2a, 0x44, 0x59, 0xf8, 0x03, 0x30, 0x1f, 0x46, 0x92, 0xf8, - 0xf8, 0x30, 0x92, 0xf8, 0xa4, 0x20, 0xb8, 0x47, 0xd4, 0xf8, 0x20, 0x34, - 0x00, 0x2b, 0x00, 0xf0, 0x95, 0x81, 0x94, 0xf8, 0x14, 0x11, 0x01, 0x39, - 0x63, 0x18, 0x18, 0xee, 0x10, 0x0a, 0x93, 0xf8, 0x18, 0x21, 0x93, 0xf8, - 0x1c, 0x32, 0x00, 0x93, 0x2a, 0x44, 0x92, 0xf8, 0xf8, 0x30, 0x92, 0xf8, - 0xa4, 0x20, 0xb8, 0x47, 0x94, 0xf8, 0x14, 0x31, 0xd4, 0xf8, 0x20, 0x24, - 0x03, 0x99, 0x01, 0x3b, 0x40, 0xf2, 0x05, 0x60, 0xc8, 0x52, 0x00, 0x2a, - 0x3f, 0xf4, 0xb2, 0xae, 0x40, 0x46, 0xd0, 0x47, 0xd4, 0xf8, 0x20, 0x34, - 0x00, 0x2b, 0x3f, 0xf4, 0xab, 0xae, 0x94, 0xf8, 0x14, 0x11, 0x63, 0x18, - 0x18, 0xee, 0x10, 0x0a, 0x93, 0xf8, 0x18, 0x21, 0x93, 0xf8, 0x1c, 0x32, - 0x00, 0x93, 0x2a, 0x44, 0x92, 0xf8, 0xf8, 0x30, 0x92, 0xf8, 0xa4, 0x20, - 0xb8, 0x47, 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, 0x3f, 0xf4, 0x96, 0xae, - 0x94, 0xf8, 0x14, 0x11, 0x01, 0x39, 0x63, 0x18, 0x18, 0xee, 0x10, 0x0a, - 0x93, 0xf8, 0x18, 0x21, 0x93, 0xf8, 0x1c, 0x32, 0x00, 0x93, 0x2a, 0x44, - 0x92, 0xf8, 0xf8, 0x30, 0x92, 0xf8, 0xa4, 0x20, 0xb8, 0x47, 0xa3, 0x19, - 0x93, 0xf8, 0x18, 0x31, 0x9f, 0xe5, 0xd2, 0x07, 0x3f, 0xf5, 0xae, 0xad, - 0xd3, 0x46, 0x56, 0x46, 0x35, 0xe5, 0xb6, 0x4b, 0x59, 0xf8, 0x03, 0x00, - 0xab, 0x4b, 0x59, 0xf8, 0x03, 0xa0, 0xd0, 0x47, 0xd4, 0xf8, 0x20, 0x34, - 0x00, 0x2b, 0x00, 0xf0, 0x2a, 0x81, 0xa9, 0x4b, 0x59, 0xf8, 0x03, 0x00, - 0xd0, 0x47, 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, 0x00, 0xf0, 0x21, 0x81, - 0xa5, 0x4b, 0x94, 0xf8, 0x14, 0x11, 0x4b, 0x44, 0x93, 0xed, 0x00, 0x8a, - 0x63, 0x18, 0x18, 0xee, 0x10, 0x0a, 0x93, 0xf8, 0x18, 0x21, 0x93, 0xf8, - 0x1c, 0x32, 0x00, 0x93, 0x9f, 0x4b, 0x2a, 0x44, 0x59, 0xf8, 0x03, 0x30, - 0x1f, 0x46, 0x92, 0xf8, 0xf8, 0x30, 0x92, 0xf8, 0xa4, 0x20, 0xb8, 0x47, - 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, 0x00, 0xf0, 0x04, 0x81, 0x94, 0xf8, - 0x14, 0x11, 0x01, 0x39, 0x63, 0x18, 0x18, 0xee, 0x10, 0x0a, 0x93, 0xf8, - 0x18, 0x21, 0x93, 0xf8, 0x1c, 0x32, 0x00, 0x93, 0x2a, 0x44, 0x92, 0xf8, - 0xf8, 0x30, 0x92, 0xf8, 0xa4, 0x20, 0xb8, 0x47, 0x04, 0xeb, 0x0b, 0x01, - 0x94, 0xf8, 0x14, 0xb1, 0x84, 0xf8, 0x14, 0x61, 0x04, 0xeb, 0x0b, 0x06, - 0xd4, 0xf8, 0x20, 0x24, 0x96, 0xf8, 0x1c, 0x32, 0x5b, 0x08, 0x01, 0x33, - 0x86, 0xf8, 0x1c, 0x32, 0x91, 0xf8, 0x1c, 0x32, 0x5b, 0x08, 0x01, 0x33, - 0x81, 0xf8, 0x1c, 0x32, 0x00, 0x2a, 0x3f, 0xf4, 0x4c, 0xae, 0x84, 0x4b, - 0x59, 0xf8, 0x03, 0x00, 0xd0, 0x47, 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, - 0x3f, 0xf4, 0x43, 0xae, 0x96, 0xf8, 0x18, 0x21, 0x96, 0xf8, 0x1c, 0x32, - 0x00, 0x93, 0x2a, 0x44, 0x18, 0xee, 0x10, 0x0a, 0x92, 0xf8, 0xf8, 0x30, - 0x92, 0xf8, 0xa4, 0x20, 0x59, 0x46, 0xb8, 0x47, 0xd4, 0xf8, 0x20, 0x34, - 0x00, 0x2b, 0x3f, 0xf4, 0x30, 0xae, 0x0b, 0xf1, 0xff, 0x31, 0x63, 0x18, - 0x18, 0xee, 0x10, 0x0a, 0x93, 0xf8, 0x18, 0x21, 0x93, 0xf8, 0x1c, 0x32, - 0x00, 0x93, 0x2a, 0x44, 0xc3, 0x46, 0x92, 0xf8, 0xf8, 0x30, 0x92, 0xf8, - 0xa4, 0x20, 0xb8, 0x47, 0x04, 0xeb, 0x08, 0x03, 0x46, 0x46, 0x93, 0xf8, - 0x18, 0x31, 0x0a, 0xe5, 0x6f, 0x4b, 0x59, 0xf8, 0x03, 0x00, 0x64, 0x4b, - 0x59, 0xf8, 0x03, 0x80, 0xc0, 0x47, 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, - 0x3f, 0xf4, 0xce, 0xac, 0x61, 0x4b, 0x59, 0xf8, 0x03, 0x00, 0xc0, 0x47, - 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, 0x3f, 0xf4, 0xc5, 0xac, 0x5e, 0x4b, - 0x04, 0xeb, 0x0b, 0x06, 0x4b, 0x44, 0x93, 0xed, 0x00, 0x8a, 0x96, 0xf8, - 0x1c, 0x32, 0x96, 0xf8, 0x18, 0x21, 0x00, 0x93, 0x59, 0x4b, 0x2a, 0x44, - 0x59, 0xf8, 0x03, 0x30, 0x18, 0xee, 0x10, 0x0a, 0x1f, 0x46, 0x59, 0x46, - 0x92, 0xf8, 0xf8, 0x30, 0x92, 0xf8, 0xa4, 0x20, 0xb8, 0x47, 0x96, 0xf8, - 0x1c, 0x32, 0x01, 0x3b, 0x86, 0xf8, 0x1c, 0x32, 0xd4, 0xf8, 0x20, 0x34, - 0x00, 0x2b, 0x3f, 0xf4, 0xf5, 0xac, 0x4f, 0x4b, 0x59, 0xf8, 0x03, 0x00, - 0xc0, 0x47, 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, 0x3f, 0xf4, 0xec, 0xac, - 0x04, 0xeb, 0x0b, 0x03, 0x59, 0x46, 0x93, 0xf8, 0x18, 0x21, 0x93, 0xf8, - 0x1c, 0x32, 0x00, 0x93, 0x2a, 0x44, 0xd3, 0x46, 0xa2, 0x44, 0x92, 0xf8, - 0xf8, 0x30, 0x92, 0xf8, 0xa4, 0x20, 0x18, 0xee, 0x10, 0x0a, 0xb8, 0x47, - 0x5e, 0x46, 0x9a, 0xf8, 0x18, 0x31, 0xb4, 0xe4, 0x45, 0x4b, 0x59, 0xf8, - 0x03, 0x00, 0x39, 0x4b, 0x59, 0xf8, 0x03, 0x80, 0xc0, 0x47, 0xd4, 0xf8, - 0x20, 0x34, 0x00, 0x2b, 0x62, 0xd0, 0x37, 0x4b, 0x59, 0xf8, 0x03, 0x00, - 0xc0, 0x47, 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, 0x5a, 0xd0, 0x34, 0x4b, - 0x94, 0xf8, 0x14, 0x11, 0x4b, 0x44, 0x93, 0xed, 0x00, 0x8a, 0x63, 0x18, - 0x18, 0xee, 0x10, 0x0a, 0x93, 0xf8, 0x18, 0x21, 0x93, 0xf8, 0x1c, 0x32, - 0x00, 0x93, 0x2a, 0x44, 0x2d, 0x4b, 0x59, 0xf8, 0x03, 0x70, 0x92, 0xf8, - 0xf8, 0x30, 0x92, 0xf8, 0xa4, 0x20, 0xb8, 0x47, 0x94, 0xf8, 0x14, 0x31, - 0xd4, 0xf8, 0x20, 0x14, 0x23, 0x44, 0x93, 0xf8, 0x1c, 0x22, 0x02, 0x3a, - 0x83, 0xf8, 0x1c, 0x22, 0x00, 0x29, 0x3f, 0xf4, 0x78, 0xac, 0x24, 0x4b, - 0x59, 0xf8, 0x03, 0x00, 0xc0, 0x47, 0xd4, 0xf8, 0x20, 0x34, 0x00, 0x2b, - 0x3f, 0xf4, 0x6f, 0xac, 0x94, 0xf8, 0x14, 0x11, 0x63, 0x18, 0x18, 0xee, - 0x10, 0x0a, 0x93, 0xf8, 0x18, 0x21, 0x93, 0xf8, 0x1c, 0x32, 0x00, 0x93, - 0x2a, 0x44, 0x92, 0xf8, 0xf8, 0x30, 0x92, 0xf8, 0xa4, 0x20, 0xb8, 0x47, - 0x5d, 0xe4, 0x94, 0xf8, 0x14, 0x01, 0x60, 0xe5, 0x94, 0xf8, 0x14, 0x31, - 0x13, 0xe5, 0x97, 0xf8, 0x18, 0x31, 0xd3, 0x46, 0x56, 0x46, 0x58, 0xe4, - 0x94, 0xf8, 0x14, 0x31, 0x31, 0xe5, 0x94, 0xf8, 0x14, 0x31, 0x94, 0xf8, - 0x18, 0x22, 0x7b, 0xe4, 0x94, 0xf8, 0x14, 0x61, 0x65, 0xe4, 0x04, 0xeb, - 0x0a, 0x03, 0x56, 0x46, 0x93, 0xf8, 0x18, 0x31, 0xd3, 0x46, 0x46, 0xe4, - 0x94, 0xf8, 0x14, 0x31, 0x37, 0xe4, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, - 0x24, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, - 0x8c, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x94, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, - 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, - 0xac, 0x00, 0x00, 0x00, 0x10, 0xb5, 0x5e, 0x4b, 0x59, 0xf8, 0x03, 0x20, - 0x92, 0xf9, 0x25, 0x14, 0x92, 0xf8, 0x25, 0x34, 0x00, 0x24, 0xa1, 0x42, - 0x82, 0xf8, 0x1c, 0x44, 0xc0, 0xf2, 0xa0, 0x80, 0x5b, 0x00, 0x5f, 0xfa, - 0x83, 0xfc, 0x21, 0x46, 0x82, 0xf8, 0x26, 0x44, 0x23, 0x46, 0x98, 0x42, - 0x05, 0xd8, 0x1b, 0x1a, 0x0c, 0xf1, 0x01, 0x0c, 0xdb, 0xb2, 0x5f, 0xfa, - 0x8c, 0xfc, 0x5b, 0x00, 0xdb, 0xb2, 0x1c, 0xf0, 0x80, 0x0f, 0x1c, 0xbf, - 0x01, 0x33, 0xdb, 0xb2, 0x4f, 0xea, 0x4c, 0x04, 0x83, 0x42, 0xe4, 0xb2, - 0x03, 0xd3, 0x1b, 0x1a, 0x01, 0x34, 0xdb, 0xb2, 0xe4, 0xb2, 0x5b, 0x00, - 0xdb, 0xb2, 0x4f, 0xea, 0x44, 0x0e, 0x24, 0x06, 0x44, 0xbf, 0x01, 0x33, - 0xdb, 0xb2, 0x98, 0x42, 0x5f, 0xfa, 0x8e, 0xfe, 0x05, 0xd8, 0x1b, 0x1a, - 0x0e, 0xf1, 0x01, 0x0e, 0xdb, 0xb2, 0x5f, 0xfa, 0x8e, 0xfe, 0x5b, 0x00, - 0xdb, 0xb2, 0x1e, 0xf0, 0x80, 0x0f, 0x1c, 0xbf, 0x01, 0x33, 0xdb, 0xb2, - 0x4f, 0xea, 0x4e, 0x0c, 0x98, 0x42, 0x5f, 0xfa, 0x8c, 0xfc, 0x05, 0xd8, - 0x1b, 0x1a, 0x0c, 0xf1, 0x01, 0x0c, 0xdb, 0xb2, 0x5f, 0xfa, 0x8c, 0xfc, - 0x5b, 0x00, 0xdb, 0xb2, 0x1c, 0xf0, 0x80, 0x0f, 0x1c, 0xbf, 0x01, 0x33, - 0xdb, 0xb2, 0x4f, 0xea, 0x4c, 0x0e, 0x98, 0x42, 0x5f, 0xfa, 0x8e, 0xfe, - 0x05, 0xd8, 0x1b, 0x1a, 0x0e, 0xf1, 0x01, 0x0e, 0xdb, 0xb2, 0x5f, 0xfa, - 0x8e, 0xfe, 0x5b, 0x00, 0xdb, 0xb2, 0x1e, 0xf0, 0x80, 0x0f, 0x1c, 0xbf, - 0x01, 0x33, 0xdb, 0xb2, 0x4f, 0xea, 0x4e, 0x0c, 0x98, 0x42, 0x5f, 0xfa, - 0x8c, 0xfc, 0x05, 0xd8, 0x1b, 0x1a, 0x0c, 0xf1, 0x01, 0x0c, 0xdb, 0xb2, - 0x5f, 0xfa, 0x8c, 0xfc, 0x5b, 0x00, 0xdb, 0xb2, 0x1c, 0xf0, 0x80, 0x0f, - 0x1c, 0xbf, 0x01, 0x33, 0xdb, 0xb2, 0x4f, 0xea, 0x4c, 0x0e, 0x98, 0x42, - 0x5f, 0xfa, 0x8e, 0xfe, 0x05, 0xd8, 0x1b, 0x1a, 0x0e, 0xf1, 0x01, 0x0e, - 0xdb, 0xb2, 0x5f, 0xfa, 0x8e, 0xfe, 0x5b, 0x00, 0xdb, 0xb2, 0x1e, 0xf0, - 0x80, 0x0f, 0x1c, 0xbf, 0x01, 0x33, 0xdb, 0xb2, 0x4f, 0xea, 0x4e, 0x0c, - 0x98, 0x42, 0x5f, 0xfa, 0x8c, 0xfc, 0x05, 0xd8, 0x1b, 0x1a, 0x0c, 0xf1, - 0x01, 0x0c, 0xdb, 0xb2, 0x5f, 0xfa, 0x8c, 0xfc, 0x00, 0x20, 0x82, 0xf8, - 0x25, 0xc4, 0x82, 0xf8, 0x18, 0x32, 0x82, 0xf8, 0x14, 0x01, 0x82, 0xf8, - 0x27, 0x34, 0x01, 0xb9, 0x10, 0xbd, 0xcc, 0xf1, 0x00, 0x0c, 0x82, 0xf8, - 0x25, 0xc4, 0x10, 0xbd, 0x5b, 0x42, 0xdb, 0xb2, 0x80, 0x21, 0x4f, 0xea, - 0x43, 0x0c, 0x82, 0xf8, 0x1c, 0x14, 0x82, 0xf8, 0x26, 0x14, 0x5f, 0xfa, - 0x8c, 0xfc, 0xdb, 0x09, 0x6f, 0xf0, 0x7f, 0x01, 0x57, 0xe7, 0x00, 0xbf, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0xb5, 0x16, 0x4b, 0x16, 0x4a, 0x59, 0xf8, - 0x03, 0x50, 0x59, 0xf8, 0x02, 0x20, 0xd5, 0xf8, 0x28, 0x34, 0x11, 0x4f, - 0xc5, 0xf8, 0x28, 0x04, 0x03, 0xeb, 0x83, 0x03, 0x03, 0x44, 0x02, 0xeb, - 0x83, 0x03, 0xd5, 0xf8, 0x10, 0x21, 0x5b, 0x68, 0x13, 0x44, 0xc5, 0xf8, - 0x10, 0x31, 0x4e, 0x1e, 0x00, 0x24, 0x87, 0xfb, 0x03, 0x20, 0xdb, 0x17, - 0xc3, 0xeb, 0x20, 0x10, 0x20, 0x44, 0xd5, 0xf8, 0x2c, 0x34, 0x16, 0xf8, - 0x01, 0x1f, 0x01, 0x34, 0x98, 0x47, 0x05, 0x2c, 0x02, 0xd0, 0xd5, 0xf8, - 0x10, 0x31, 0xee, 0xe7, 0xf8, 0xbd, 0x00, 0xbf, 0x1f, 0x85, 0xeb, 0x51, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xf0, 0xb5, 0x00, 0x23, - 0x61, 0xf3, 0x07, 0x03, 0x61, 0xf3, 0x0f, 0x23, 0x83, 0xb0, 0x61, 0xf3, - 0x17, 0x43, 0x19, 0x4a, 0x8d, 0xf8, 0x04, 0x10, 0x61, 0xf3, 0x1f, 0x63, - 0x00, 0x93, 0x59, 0xf8, 0x02, 0x50, 0x16, 0x4a, 0xd5, 0xf8, 0x28, 0x34, - 0x59, 0xf8, 0x02, 0x20, 0x11, 0x4e, 0xc5, 0xf8, 0x28, 0x04, 0x03, 0xeb, - 0x83, 0x03, 0x03, 0x44, 0x02, 0xeb, 0x83, 0x03, 0xd5, 0xf8, 0x10, 0x21, - 0x5b, 0x68, 0x13, 0x44, 0xc5, 0xf8, 0x10, 0x31, 0x6f, 0x46, 0x00, 0x24, - 0x86, 0xfb, 0x03, 0x20, 0xdb, 0x17, 0xc3, 0xeb, 0x20, 0x10, 0x20, 0x44, - 0xd5, 0xf8, 0x2c, 0x34, 0x17, 0xf8, 0x01, 0x1b, 0x01, 0x34, 0x98, 0x47, - 0x05, 0x2c, 0x02, 0xd0, 0xd5, 0xf8, 0x10, 0x31, 0xee, 0xe7, 0x03, 0xb0, - 0xf0, 0xbd, 0x00, 0xbf, 0x1f, 0x85, 0xeb, 0x51, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0xa8, 0x38, 0x08, 0xb5, 0x06, 0x28, 0x36, 0xd8, - 0xdf, 0xe8, 0x00, 0xf0, 0x0b, 0x12, 0x19, 0x20, 0x27, 0x2e, 0x04, 0x00, - 0x1c, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x19, 0x44, 0x91, 0xf8, 0x30, 0x0a, - 0x08, 0xbd, 0x19, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x19, 0x44, 0x91, 0xf8, - 0x30, 0x04, 0x08, 0xbd, 0x15, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x19, 0x44, - 0x91, 0xf8, 0x30, 0x05, 0x08, 0xbd, 0x12, 0x4b, 0x59, 0xf8, 0x03, 0x30, - 0x19, 0x44, 0x91, 0xf8, 0x30, 0x06, 0x08, 0xbd, 0x0e, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x19, 0x44, 0x91, 0xf8, 0x30, 0x07, 0x08, 0xbd, 0x0b, 0x4b, - 0x59, 0xf8, 0x03, 0x30, 0x19, 0x44, 0x91, 0xf8, 0x30, 0x08, 0x08, 0xbd, - 0x07, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x19, 0x44, 0x91, 0xf8, 0x30, 0x09, - 0x08, 0xbd, 0x05, 0x4a, 0x05, 0x4b, 0x59, 0xf8, 0x02, 0x00, 0x59, 0xf8, - 0x03, 0x30, 0x98, 0x47, 0x00, 0x20, 0x08, 0xbd, 0x00, 0x00, 0x00, 0x00, - 0xb0, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0xa8, 0x38, 0x06, 0x28, - 0x36, 0xd8, 0xdf, 0xe8, 0x00, 0xf0, 0x0b, 0x12, 0x19, 0x20, 0x27, 0x2e, - 0x04, 0x00, 0x1c, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x19, 0x44, 0x81, 0xf8, - 0x30, 0x2a, 0x70, 0x47, 0x18, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x19, 0x44, - 0x81, 0xf8, 0x30, 0x24, 0x70, 0x47, 0x15, 0x4b, 0x59, 0xf8, 0x03, 0x30, - 0x19, 0x44, 0x81, 0xf8, 0x30, 0x25, 0x70, 0x47, 0x11, 0x4b, 0x59, 0xf8, - 0x03, 0x30, 0x19, 0x44, 0x81, 0xf8, 0x30, 0x26, 0x70, 0x47, 0x0e, 0x4b, - 0x59, 0xf8, 0x03, 0x30, 0x19, 0x44, 0x81, 0xf8, 0x30, 0x27, 0x70, 0x47, - 0x0a, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x19, 0x44, 0x81, 0xf8, 0x30, 0x28, - 0x70, 0x47, 0x07, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x19, 0x44, 0x81, 0xf8, - 0x30, 0x29, 0x70, 0x47, 0x04, 0x4a, 0x05, 0x4b, 0x59, 0xf8, 0x02, 0x00, - 0x59, 0xf8, 0x03, 0x30, 0x18, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, - 0xb4, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4d, - 0xb2, 0x4b, 0x59, 0xf8, 0x03, 0x40, 0x94, 0xf8, 0x31, 0x1b, 0x94, 0xf8, - 0x1c, 0x34, 0x84, 0xf8, 0x30, 0x3b, 0x86, 0xb0, 0x01, 0xf0, 0x07, 0x02, - 0x01, 0x3a, 0xd2, 0xb2, 0x03, 0x90, 0xac, 0x48, 0x84, 0xf8, 0x14, 0x21, - 0x84, 0xf8, 0x24, 0x24, 0x59, 0xf8, 0x00, 0x00, 0x01, 0x90, 0x10, 0x44, - 0x11, 0xf0, 0xf8, 0x01, 0x90, 0xf8, 0xec, 0x01, 0x84, 0xf8, 0x32, 0x2b, - 0x84, 0xf8, 0x25, 0x04, 0x00, 0xf0, 0x9d, 0x80, 0xa3, 0x48, 0xa0, 0x4d, - 0x81, 0xf0, 0xff, 0x03, 0x84, 0xf8, 0x1c, 0x34, 0x59, 0xf8, 0x00, 0x70, - 0x04, 0xae, 0x01, 0x99, 0x01, 0xeb, 0x02, 0x22, 0x13, 0x44, 0x08, 0x22, - 0x93, 0xf8, 0xf4, 0x31, 0x84, 0xf8, 0x24, 0x24, 0x4f, 0xf0, 0x01, 0x08, - 0x5a, 0x00, 0x1b, 0x06, 0x84, 0xf8, 0x18, 0x22, 0x37, 0xd4, 0xd4, 0xf8, - 0x28, 0x34, 0x94, 0xf8, 0x25, 0x14, 0xd4, 0xf8, 0x10, 0x21, 0x84, 0xf8, - 0x14, 0x11, 0x03, 0xeb, 0x83, 0x03, 0x07, 0xeb, 0x83, 0x03, 0xc4, 0xf8, - 0x28, 0x84, 0x98, 0x68, 0x01, 0xf0, 0x0f, 0x03, 0x1b, 0x01, 0x10, 0x44, - 0x8d, 0xf8, 0x10, 0x30, 0x8d, 0xf8, 0x11, 0x30, 0x8d, 0xf8, 0x12, 0x30, - 0x8d, 0xf8, 0x13, 0x30, 0x8d, 0xf8, 0x14, 0x30, 0xc4, 0xf8, 0x10, 0x01, - 0xb2, 0x46, 0x4f, 0xf0, 0x00, 0x0b, 0x85, 0xfb, 0x00, 0x23, 0xc0, 0x17, - 0xc0, 0xeb, 0x23, 0x10, 0x58, 0x44, 0xd4, 0xf8, 0x2c, 0x34, 0x1a, 0xf8, - 0x01, 0x1b, 0x0b, 0xf1, 0x01, 0x0b, 0x98, 0x47, 0xbb, 0xf1, 0x05, 0x0f, - 0x02, 0xd0, 0xd4, 0xf8, 0x10, 0x01, 0xec, 0xe7, 0x94, 0xf8, 0x14, 0x31, - 0x53, 0xbb, 0xd4, 0xf8, 0x28, 0x34, 0x03, 0xeb, 0x83, 0x03, 0x07, 0xeb, - 0x83, 0x03, 0x4f, 0xf0, 0x50, 0x32, 0xd8, 0x68, 0xd4, 0xf8, 0x10, 0x31, - 0x04, 0x92, 0x18, 0x44, 0x50, 0x21, 0x02, 0x23, 0x8d, 0xf8, 0x14, 0x10, - 0xc4, 0xf8, 0x10, 0x01, 0xc4, 0xf8, 0x28, 0x34, 0xb2, 0x46, 0x4f, 0xf0, - 0x00, 0x0b, 0x85, 0xfb, 0x00, 0x23, 0xc0, 0x17, 0xc0, 0xeb, 0x23, 0x10, - 0x58, 0x44, 0xd4, 0xf8, 0x2c, 0x34, 0x1a, 0xf8, 0x01, 0x1b, 0x0b, 0xf1, - 0x01, 0x0b, 0x98, 0x47, 0xbb, 0xf1, 0x05, 0x0f, 0x02, 0xd0, 0xd4, 0xf8, - 0x10, 0x01, 0xec, 0xe7, 0x94, 0xf8, 0x24, 0x34, 0x01, 0x3b, 0x00, 0x22, - 0xdb, 0xb2, 0x84, 0xf8, 0x14, 0x21, 0x84, 0xf8, 0x24, 0x34, 0x13, 0xb1, - 0x94, 0xf8, 0x18, 0x32, 0x8a, 0xe7, 0x94, 0xf8, 0x1c, 0x34, 0x01, 0x33, - 0xdb, 0xb2, 0x84, 0xf8, 0x1c, 0x34, 0x13, 0xb1, 0x94, 0xf8, 0x32, 0x2b, - 0x75, 0xe7, 0x94, 0xf8, 0x30, 0x3b, 0x84, 0xf8, 0x1c, 0x34, 0x01, 0x22, - 0x84, 0xf8, 0x33, 0x2b, 0x06, 0xb0, 0xbd, 0xe8, 0xf0, 0x8d, 0x23, 0x44, - 0x51, 0x4d, 0x93, 0xf8, 0x30, 0x34, 0x1b, 0x09, 0x84, 0xf8, 0x18, 0x32, - 0x83, 0xf0, 0xff, 0x03, 0x02, 0x93, 0x03, 0x9b, 0x19, 0x78, 0x4f, 0x4b, - 0x84, 0xf8, 0x1c, 0x14, 0x59, 0xf8, 0x03, 0x70, 0x04, 0xae, 0x01, 0x9b, - 0x03, 0xeb, 0x02, 0x23, 0x19, 0x44, 0x08, 0x22, 0x91, 0xf8, 0xf4, 0x31, - 0x84, 0xf8, 0x24, 0x24, 0x4f, 0xf0, 0x06, 0x08, 0x5a, 0x00, 0x13, 0xf0, - 0x80, 0x0f, 0x84, 0xf8, 0x18, 0x22, 0xd4, 0xf8, 0x28, 0x34, 0x34, 0xd1, - 0x03, 0xeb, 0x83, 0x03, 0x07, 0xeb, 0x83, 0x03, 0x4f, 0xf0, 0x60, 0x32, - 0x58, 0x69, 0xd4, 0xf8, 0x10, 0x31, 0x84, 0xf8, 0x14, 0x81, 0x18, 0x44, - 0x60, 0x21, 0x04, 0x23, 0x04, 0x92, 0x8d, 0xf8, 0x14, 0x10, 0xc4, 0xf8, - 0x10, 0x01, 0xc4, 0xf8, 0x28, 0x34, 0xb3, 0x46, 0x4f, 0xf0, 0x00, 0x0a, - 0x85, 0xfb, 0x00, 0x23, 0xc0, 0x17, 0xc0, 0xeb, 0x23, 0x10, 0x50, 0x44, - 0xd4, 0xf8, 0x2c, 0x34, 0x1b, 0xf8, 0x01, 0x1b, 0x0a, 0xf1, 0x01, 0x0a, - 0x98, 0x47, 0xba, 0xf1, 0x05, 0x0f, 0x02, 0xd0, 0xd4, 0xf8, 0x10, 0x01, - 0xec, 0xe7, 0x94, 0xf8, 0x24, 0x34, 0x01, 0x3b, 0xdb, 0xb2, 0x84, 0xf8, - 0x24, 0x34, 0x7b, 0xb3, 0x94, 0xf8, 0x18, 0x32, 0xc2, 0xe7, 0x03, 0xeb, - 0x83, 0x03, 0x07, 0xeb, 0x83, 0x03, 0xd4, 0xf8, 0x10, 0x21, 0x18, 0x69, - 0x4f, 0xf0, 0x1a, 0x0c, 0x10, 0x44, 0x4f, 0xf0, 0xa0, 0x31, 0x03, 0x23, - 0xa0, 0x22, 0x84, 0xf8, 0x14, 0xc1, 0x04, 0x91, 0x8d, 0xf8, 0x14, 0x20, - 0xc4, 0xf8, 0x10, 0x01, 0xc4, 0xf8, 0x28, 0x34, 0xb3, 0x46, 0x4f, 0xf0, - 0x00, 0x0a, 0x85, 0xfb, 0x00, 0x23, 0xc0, 0x17, 0xc0, 0xeb, 0x23, 0x10, - 0x50, 0x44, 0xd4, 0xf8, 0x2c, 0x34, 0x1b, 0xf8, 0x01, 0x1b, 0x0a, 0xf1, - 0x01, 0x0a, 0x98, 0x47, 0xba, 0xf1, 0x05, 0x0f, 0xcb, 0xd0, 0xd4, 0xf8, - 0x10, 0x01, 0xec, 0xe7, 0x02, 0x9b, 0x94, 0xf8, 0x1c, 0x14, 0x03, 0xf1, - 0x01, 0x0a, 0x01, 0x31, 0xc9, 0xb2, 0x1a, 0xf0, 0xff, 0x03, 0x84, 0xf8, - 0x1c, 0x14, 0x02, 0x93, 0x02, 0xd0, 0x94, 0xf8, 0x32, 0x2b, 0x7a, 0xe7, - 0x01, 0x23, 0x84, 0xf8, 0x18, 0x32, 0x84, 0xf8, 0x33, 0x3b, 0x03, 0x9b, - 0x19, 0x70, 0x94, 0xf8, 0x30, 0x3b, 0x84, 0xf8, 0x1c, 0x34, 0x06, 0xb0, - 0xbd, 0xe8, 0xf0, 0x8d, 0x1f, 0x85, 0xeb, 0x51, 0x00, 0x00, 0x00, 0x00, - 0x24, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4d, - 0x8e, 0xb0, 0xdf, 0xf8, 0xc8, 0x38, 0x00, 0x21, 0x8d, 0xf8, 0x2f, 0x10, - 0x59, 0xf8, 0x03, 0x40, 0x94, 0xf8, 0x34, 0x2b, 0x06, 0x92, 0xff, 0x2a, - 0x00, 0xf0, 0xbc, 0x80, 0xdf, 0xf8, 0xb0, 0x38, 0x84, 0xf8, 0x14, 0x11, - 0x84, 0xf8, 0x33, 0x1b, 0x84, 0xf8, 0x1c, 0x14, 0x84, 0xf8, 0x18, 0x22, - 0x84, 0xf8, 0x24, 0x24, 0x59, 0xf8, 0x03, 0x30, 0x03, 0x93, 0x5b, 0x78, - 0x04, 0x93, 0xdf, 0xf8, 0x94, 0x38, 0x93, 0x46, 0x59, 0xf8, 0x03, 0x50, - 0x02, 0x95, 0x01, 0x23, 0xbb, 0xf1, 0x01, 0x0f, 0x01, 0x93, 0x05, 0x91, - 0x0f, 0x46, 0x4c, 0xd0, 0x5a, 0x46, 0x02, 0x2a, 0x74, 0xd0, 0x0b, 0x46, - 0x27, 0x44, 0x03, 0x9a, 0x02, 0x9e, 0x97, 0xf8, 0xac, 0x1b, 0x02, 0xeb, - 0x0b, 0x05, 0x97, 0xf8, 0x70, 0x2b, 0x95, 0xf8, 0x68, 0xa0, 0x95, 0xf8, - 0xb8, 0x80, 0x95, 0xf8, 0x08, 0xe1, 0x32, 0x44, 0x19, 0x44, 0x92, 0xf8, - 0x35, 0x08, 0x04, 0x9a, 0x10, 0x44, 0x06, 0xeb, 0x0b, 0x02, 0xc9, 0xb2, - 0x92, 0xf8, 0xf4, 0xc6, 0x92, 0xf8, 0x44, 0x77, 0x92, 0xf8, 0x94, 0x67, - 0x92, 0xf8, 0xe4, 0x57, 0xc0, 0xb2, 0xe2, 0x18, 0x01, 0x33, 0xdb, 0xb2, - 0x99, 0x42, 0x82, 0xf8, 0x30, 0xa5, 0x82, 0xf8, 0x30, 0x86, 0x82, 0xf8, - 0x30, 0xe7, 0x82, 0xf8, 0x30, 0xc8, 0x82, 0xf8, 0x30, 0x79, 0x82, 0xf8, - 0x30, 0x6a, 0x82, 0xf8, 0xe8, 0x5b, 0x82, 0xf8, 0x30, 0x04, 0xea, 0xd1, - 0x01, 0x9b, 0x00, 0x2b, 0x00, 0xf0, 0xa5, 0x83, 0xe2, 0x18, 0x1f, 0x46, - 0x92, 0xf8, 0x34, 0xbb, 0x01, 0x33, 0x01, 0x22, 0xbb, 0xf1, 0xff, 0x0f, - 0xdb, 0xb2, 0x05, 0x92, 0x5d, 0xd0, 0xbb, 0xf1, 0x01, 0x0f, 0x01, 0x93, - 0xb2, 0xd1, 0x1e, 0x29, 0x51, 0xd9, 0xa1, 0xf1, 0x1e, 0x03, 0xdb, 0xb2, - 0x1a, 0x46, 0x22, 0x44, 0x92, 0xf8, 0x30, 0x04, 0x7f, 0x28, 0x09, 0xd1, - 0x01, 0x33, 0xda, 0xb2, 0xa3, 0x18, 0x55, 0x1c, 0x93, 0xf8, 0x30, 0x04, - 0x7f, 0x28, 0x13, 0x46, 0xea, 0xb2, 0xf7, 0xd0, 0x42, 0x1c, 0xd2, 0xb2, - 0x58, 0x1c, 0x23, 0x44, 0x83, 0xf8, 0x30, 0x24, 0xc3, 0xb2, 0x00, 0xe0, - 0x33, 0x46, 0x58, 0x1c, 0x8b, 0x42, 0x04, 0xeb, 0x03, 0x05, 0xc6, 0xb2, - 0x8f, 0xd0, 0x95, 0xf8, 0x30, 0x54, 0xff, 0x2d, 0xf4, 0xd0, 0x01, 0x32, - 0xd2, 0xb2, 0xec, 0xe7, 0x1e, 0x29, 0x29, 0xd9, 0xa1, 0xf1, 0x1e, 0x03, - 0xdb, 0xb2, 0x1a, 0x46, 0x22, 0x44, 0x92, 0xf8, 0x30, 0x24, 0x7f, 0x2a, - 0x09, 0xd1, 0x01, 0x33, 0xd8, 0xb2, 0x23, 0x18, 0x45, 0x1c, 0x93, 0xf8, - 0x30, 0x24, 0x7f, 0x2a, 0x03, 0x46, 0xe8, 0xb2, 0xf7, 0xd0, 0x01, 0x3a, - 0xe0, 0x18, 0xd2, 0xb2, 0x80, 0xf8, 0x30, 0x24, 0x03, 0xe0, 0x90, 0xf8, - 0x30, 0x04, 0xff, 0x28, 0xf5, 0xd1, 0x01, 0x33, 0xdb, 0xb2, 0x99, 0x42, - 0x04, 0xeb, 0x03, 0x00, 0xf5, 0xd1, 0x65, 0xe7, 0x0e, 0xb0, 0xbd, 0xe8, - 0xf0, 0x8d, 0x00, 0x22, 0x13, 0x46, 0xae, 0xe7, 0x00, 0x22, 0x13, 0x46, - 0xd6, 0xe7, 0x02, 0x9d, 0x84, 0xf8, 0x24, 0xb4, 0x94, 0xf8, 0x35, 0x3b, - 0x06, 0x9e, 0x84, 0xf8, 0x1c, 0x64, 0x00, 0x22, 0x01, 0x21, 0xff, 0x2b, - 0x84, 0xf8, 0x33, 0x2b, 0x84, 0xf8, 0x30, 0x2b, 0x84, 0xf8, 0x18, 0x32, - 0x84, 0xf8, 0x14, 0x11, 0x00, 0xf0, 0x89, 0x81, 0x11, 0x46, 0x92, 0x46, - 0x14, 0xe0, 0x0b, 0x46, 0x59, 0x1c, 0xc9, 0xb2, 0x66, 0x18, 0x98, 0x1c, - 0x96, 0xf8, 0x35, 0x3b, 0x96, 0xf8, 0x34, 0x6b, 0x84, 0xf8, 0x14, 0x01, - 0xff, 0x2b, 0x84, 0xf8, 0x33, 0x1b, 0x84, 0xf8, 0x1c, 0x64, 0x84, 0xf8, - 0x18, 0x32, 0x08, 0x46, 0x00, 0xf0, 0x72, 0x81, 0x2b, 0x44, 0x2e, 0x44, - 0x93, 0xf8, 0x40, 0x08, 0x96, 0xf8, 0x40, 0x78, 0x84, 0xf8, 0x24, 0x04, - 0xb8, 0x42, 0x00, 0xf0, 0x61, 0x81, 0x93, 0xbf, 0x96, 0xf8, 0x90, 0x78, - 0x93, 0xf8, 0xe0, 0x78, 0x93, 0xf8, 0x90, 0x68, 0x96, 0xf8, 0xe0, 0x68, - 0x84, 0xf8, 0x1c, 0x14, 0x63, 0x18, 0x06, 0xeb, 0x07, 0x08, 0x93, 0xf8, - 0xac, 0x3b, 0x5f, 0xfa, 0x88, 0xf8, 0xa8, 0xf1, 0x02, 0x00, 0x1a, 0x44, - 0xc0, 0xb2, 0xd2, 0xb2, 0xa8, 0x23, 0x84, 0xf8, 0x14, 0x01, 0x00, 0x06, - 0x84, 0xf8, 0x30, 0x2b, 0x84, 0xf8, 0x32, 0x3b, 0x84, 0xf8, 0x18, 0x82, - 0xbd, 0xd4, 0x16, 0x44, 0xd7, 0x1b, 0xa8, 0x2b, 0x5f, 0xfa, 0x86, 0xfb, - 0xff, 0xb2, 0x00, 0xf0, 0xd9, 0x80, 0xa9, 0x3b, 0x05, 0x2b, 0x00, 0xf2, - 0xeb, 0x82, 0xdf, 0xe8, 0x03, 0xf0, 0x68, 0x5b, 0x4e, 0x41, 0x34, 0x03, - 0x04, 0xeb, 0x0b, 0x03, 0x93, 0xf8, 0x30, 0x3a, 0x84, 0xf8, 0x18, 0x32, - 0xe2, 0x19, 0x92, 0xf8, 0x30, 0x2a, 0x9b, 0x1a, 0xda, 0xb2, 0x06, 0x23, - 0x46, 0x46, 0x51, 0xb2, 0x22, 0xf0, 0x7f, 0x02, 0x84, 0xf8, 0x26, 0x24, - 0x81, 0xea, 0xe1, 0x72, 0xa2, 0xeb, 0xe1, 0x72, 0xd2, 0xb2, 0xb2, 0xfb, - 0xf6, 0xf0, 0x06, 0xfb, 0x10, 0x22, 0x91, 0xfb, 0xf6, 0xf1, 0x84, 0xf8, - 0x27, 0x24, 0x84, 0xf8, 0x25, 0x14, 0x84, 0xf8, 0x14, 0x61, 0x84, 0xf8, - 0x1c, 0x74, 0x84, 0xf8, 0x24, 0xa4, 0x39, 0x46, 0x06, 0x2b, 0x00, 0xf2, - 0xd4, 0x82, 0xdf, 0xe8, 0x03, 0xf0, 0xe4, 0xd4, 0xdc, 0xcc, 0xc4, 0x84, - 0x48, 0x00, 0x04, 0xeb, 0x0b, 0x03, 0x93, 0xf8, 0x30, 0x39, 0x84, 0xf8, - 0x18, 0x32, 0xe2, 0x19, 0x92, 0xf8, 0x30, 0x29, 0x9b, 0x1a, 0xda, 0xb2, - 0x05, 0x23, 0xcd, 0xe7, 0x04, 0xeb, 0x0b, 0x03, 0x93, 0xf8, 0x30, 0x38, - 0x84, 0xf8, 0x18, 0x32, 0xe2, 0x19, 0x92, 0xf8, 0x30, 0x28, 0x9b, 0x1a, - 0xda, 0xb2, 0x04, 0x23, 0xc0, 0xe7, 0x04, 0xeb, 0x0b, 0x03, 0x93, 0xf8, - 0x30, 0x37, 0x84, 0xf8, 0x18, 0x32, 0xe2, 0x19, 0x92, 0xf8, 0x30, 0x27, - 0x9b, 0x1a, 0xda, 0xb2, 0x03, 0x23, 0xb3, 0xe7, 0x04, 0xeb, 0x0b, 0x03, - 0x93, 0xf8, 0x30, 0x36, 0x84, 0xf8, 0x18, 0x32, 0xe2, 0x19, 0x92, 0xf8, - 0x30, 0x26, 0x9b, 0x1a, 0xda, 0xb2, 0x02, 0x23, 0xa6, 0xe7, 0x04, 0xeb, - 0x0b, 0x03, 0x93, 0xf8, 0x30, 0x35, 0x84, 0xf8, 0x18, 0x32, 0xe2, 0x19, - 0x92, 0xf8, 0x30, 0x25, 0x9b, 0x1a, 0xda, 0xb2, 0x01, 0x23, 0x99, 0xe7, - 0x62, 0x18, 0x82, 0xf8, 0x30, 0x3a, 0x60, 0x18, 0x94, 0xf8, 0x14, 0x21, - 0x90, 0xf8, 0x30, 0x0a, 0x94, 0xf8, 0x25, 0x34, 0x01, 0x31, 0x03, 0x44, - 0x01, 0x3a, 0xdb, 0xb2, 0xc9, 0xb2, 0xd2, 0xb2, 0x84, 0xf8, 0x18, 0x32, - 0x84, 0xf8, 0x1c, 0x14, 0x84, 0xf8, 0x14, 0x21, 0xae, 0x20, 0x00, 0x2a, - 0x00, 0xf0, 0x9a, 0x80, 0x94, 0xf8, 0x24, 0x24, 0x94, 0xf8, 0x27, 0xc4, - 0x62, 0x44, 0xd2, 0xb2, 0xb2, 0x42, 0x80, 0xf0, 0x81, 0x80, 0x84, 0xf8, - 0x24, 0x24, 0xa8, 0x38, 0x06, 0x28, 0x00, 0xf2, 0x3e, 0x82, 0x02, 0xa2, - 0x52, 0xf8, 0x20, 0x00, 0x02, 0x44, 0x10, 0x47, 0xdd, 0x00, 0x00, 0x00, - 0xbd, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, - 0x9d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa5, 0xff, 0xff, 0xff, - 0x62, 0x18, 0x82, 0xf8, 0x30, 0x39, 0x63, 0x18, 0xad, 0x20, 0x93, 0xf8, - 0x30, 0x39, 0x94, 0xf8, 0x25, 0x24, 0x13, 0x44, 0x94, 0xf8, 0x14, 0x21, - 0x01, 0x31, 0x01, 0x3a, 0xdb, 0xb2, 0xc9, 0xb2, 0xd2, 0xb2, 0x84, 0xf8, - 0x18, 0x32, 0x84, 0xf8, 0x1c, 0x14, 0x84, 0xf8, 0x14, 0x21, 0x00, 0x2a, - 0xc4, 0xd1, 0x43, 0x1c, 0xdb, 0xb2, 0xaf, 0x2b, 0x84, 0xf8, 0x32, 0x3b, - 0x5b, 0xd0, 0xa8, 0x2b, 0x7f, 0xf4, 0x27, 0xaf, 0x94, 0xf8, 0x33, 0x3b, - 0x23, 0x44, 0x93, 0xf8, 0xad, 0x6b, 0x93, 0xf8, 0xac, 0x0b, 0x94, 0xf8, - 0x30, 0x3b, 0x76, 0x08, 0x9a, 0x19, 0xa3, 0xeb, 0x50, 0x03, 0x54, 0xfa, - 0x82, 0xf2, 0x54, 0xfa, 0x83, 0xf3, 0x92, 0xf8, 0x30, 0x14, 0x93, 0xf8, - 0x30, 0x24, 0x84, 0xf8, 0x18, 0x12, 0x06, 0xeb, 0x50, 0x06, 0x8a, 0x1a, - 0xf6, 0xb2, 0xd2, 0xb2, 0x00, 0x23, 0x1e, 0xe7, 0x62, 0x18, 0x82, 0xf8, - 0x30, 0x38, 0x63, 0x18, 0xac, 0x20, 0x93, 0xf8, 0x30, 0x38, 0xbe, 0xe7, - 0x62, 0x18, 0x82, 0xf8, 0x30, 0x37, 0x63, 0x18, 0xab, 0x20, 0x93, 0xf8, - 0x30, 0x37, 0xb6, 0xe7, 0x62, 0x18, 0x82, 0xf8, 0x30, 0x35, 0x63, 0x18, - 0xa9, 0x20, 0x93, 0xf8, 0x30, 0x35, 0xae, 0xe7, 0x62, 0x18, 0x82, 0xf8, - 0x30, 0x36, 0x63, 0x18, 0xaa, 0x20, 0x93, 0xf8, 0x30, 0x36, 0xa6, 0xe7, - 0x62, 0x18, 0x82, 0xf8, 0x30, 0x34, 0x63, 0x18, 0xa8, 0x20, 0x93, 0xf8, - 0x30, 0x34, 0x9e, 0xe7, 0x92, 0x1b, 0x84, 0xf8, 0x24, 0x24, 0x94, 0xf9, - 0x26, 0x24, 0x00, 0x2a, 0x05, 0xdb, 0x00, 0x2b, 0x3f, 0xf4, 0x77, 0xaf, - 0x01, 0x33, 0xdb, 0xb2, 0x73, 0xe7, 0x01, 0x3b, 0xdb, 0xb2, 0x70, 0xe7, - 0xaf, 0x23, 0x84, 0xf8, 0x32, 0x3b, 0x94, 0xf8, 0x33, 0x3b, 0x94, 0xf8, - 0x30, 0x2b, 0x7f, 0xe6, 0x96, 0xf8, 0x90, 0x78, 0x93, 0xf8, 0x90, 0x68, - 0xa2, 0xe6, 0x10, 0x46, 0x20, 0x44, 0x90, 0xf8, 0xac, 0x3b, 0x1a, 0x44, - 0xd4, 0xf8, 0x0c, 0x31, 0xd2, 0xb2, 0x01, 0x92, 0x6b, 0xb9, 0x04, 0xf2, - 0x2f, 0x51, 0x04, 0xf2, 0x2f, 0x43, 0x0e, 0x46, 0x13, 0xf8, 0x01, 0x2f, - 0x11, 0xf8, 0x01, 0x0f, 0x9e, 0x42, 0xa2, 0xeb, 0x50, 0x02, 0x1a, 0x70, - 0xf6, 0xd1, 0x00, 0x23, 0x84, 0xf8, 0x30, 0x3b, 0x04, 0xf5, 0x03, 0x6c, - 0x04, 0xf5, 0x13, 0x63, 0x04, 0xf5, 0x23, 0x67, 0x04, 0xf5, 0x33, 0x66, - 0x13, 0xf8, 0x01, 0x0d, 0x17, 0xf8, 0x01, 0x1d, 0x16, 0xf8, 0x01, 0x2d, - 0x28, 0x44, 0x29, 0x44, 0x2a, 0x44, 0x90, 0xf8, 0x30, 0x09, 0x91, 0xf8, - 0x30, 0x19, 0x92, 0xf8, 0x30, 0x29, 0x18, 0x70, 0x9c, 0x45, 0x39, 0x70, - 0x32, 0x70, 0xeb, 0xd1, 0x94, 0xf8, 0x30, 0x24, 0x84, 0xf8, 0x33, 0x2b, - 0x84, 0xf8, 0x14, 0x21, 0xa2, 0xeb, 0x92, 0x02, 0xd2, 0xb2, 0x00, 0x23, - 0x09, 0x92, 0x48, 0x22, 0xcd, 0xe9, 0x06, 0x32, 0xcd, 0xe9, 0x04, 0x33, - 0x84, 0xf8, 0x1c, 0x34, 0x4f, 0xf0, 0x40, 0x08, 0xe0, 0x18, 0x90, 0xf8, - 0xe8, 0x2b, 0x84, 0xf8, 0x31, 0x2b, 0x02, 0xf0, 0xf8, 0x02, 0x84, 0xf8, - 0x18, 0x22, 0x00, 0x2a, 0x3e, 0xd0, 0x0d, 0xf1, 0x2f, 0x00, 0xff, 0xf7, - 0xc5, 0xfb, 0x94, 0xf8, 0x1c, 0x34, 0x01, 0x9a, 0x02, 0x33, 0x02, 0x3a, - 0x84, 0xf8, 0x1c, 0x34, 0xd3, 0xb2, 0x01, 0x93, 0x01, 0x9b, 0x00, 0x2b, - 0x3f, 0xf4, 0xf2, 0xad, 0x03, 0x9b, 0x1b, 0x78, 0x07, 0x93, 0x94, 0xf8, - 0x33, 0x3b, 0x01, 0x3b, 0xdb, 0xb2, 0x84, 0xf8, 0x33, 0x3b, 0x00, 0x2b, - 0x00, 0xf0, 0x1b, 0x81, 0x09, 0x9b, 0x01, 0x3b, 0x13, 0xf0, 0xff, 0x03, - 0x09, 0x93, 0x04, 0xd1, 0x94, 0xf8, 0x31, 0x3b, 0x00, 0x2b, 0x40, 0xf0, - 0x0c, 0x81, 0x94, 0xf8, 0x1c, 0x34, 0x05, 0x98, 0xe2, 0x18, 0x92, 0xf8, - 0x30, 0x15, 0x08, 0x44, 0xc1, 0xb2, 0x05, 0x91, 0x04, 0x98, 0x92, 0xf8, - 0x30, 0x16, 0x92, 0xf8, 0x30, 0x27, 0x08, 0x44, 0x01, 0x46, 0x06, 0x98, - 0x10, 0x44, 0xc9, 0xb2, 0xc2, 0xb2, 0x04, 0x91, 0x06, 0x92, 0xb5, 0xe7, - 0x05, 0x9e, 0x90, 0xf8, 0x30, 0x78, 0x90, 0xf8, 0x30, 0xc9, 0x90, 0xf8, - 0x30, 0x0a, 0xaa, 0x19, 0x07, 0xf0, 0x0f, 0x01, 0x92, 0xf9, 0x44, 0x2a, - 0x04, 0x9f, 0x02, 0x91, 0x12, 0xfb, 0x01, 0xf2, 0xe9, 0x19, 0x00, 0xf0, - 0x0f, 0x0e, 0x91, 0xf9, 0x44, 0x1a, 0x06, 0x98, 0x0c, 0xf0, 0x0f, 0x0c, - 0x1c, 0xfb, 0x01, 0x21, 0x2a, 0x18, 0x23, 0x44, 0x92, 0xf9, 0x44, 0x29, - 0x1e, 0xfb, 0x02, 0x11, 0x00, 0x29, 0xb8, 0xbf, 0x1f, 0x31, 0x49, 0x11, - 0x02, 0x02, 0x80, 0x31, 0x93, 0xf8, 0x30, 0x06, 0x8d, 0xf8, 0x30, 0x10, - 0x4f, 0xea, 0x07, 0x2a, 0x93, 0xf8, 0x30, 0x15, 0x93, 0xf8, 0x30, 0x37, - 0x08, 0x93, 0x00, 0xfb, 0x08, 0xaa, 0x36, 0x02, 0x01, 0xfb, 0x08, 0x66, - 0x03, 0xfb, 0x08, 0x22, 0xca, 0xf3, 0x07, 0x23, 0xc6, 0xf3, 0x07, 0x2b, - 0x2b, 0x44, 0xab, 0x44, 0x93, 0xf9, 0x44, 0x3a, 0x9b, 0xf9, 0x44, 0xba, - 0x02, 0x9f, 0x13, 0xfb, 0x0c, 0xf3, 0x17, 0xfb, 0x0b, 0x33, 0xc2, 0xf3, - 0x07, 0x2b, 0xab, 0x44, 0x18, 0xfb, 0x00, 0xaa, 0x9b, 0xf9, 0x44, 0xb9, - 0x08, 0x9f, 0x1e, 0xfb, 0x0b, 0x33, 0x00, 0x2b, 0xb8, 0xbf, 0x1f, 0x33, - 0x5b, 0x11, 0x80, 0x33, 0x18, 0xfb, 0x01, 0x66, 0x8d, 0xf8, 0x31, 0x30, - 0xca, 0xf3, 0x07, 0x23, 0xc6, 0xf3, 0x07, 0x2b, 0x2b, 0x44, 0xab, 0x44, - 0x93, 0xf9, 0x44, 0x3a, 0x9b, 0xf9, 0x44, 0xba, 0x18, 0xfb, 0x07, 0x22, - 0x02, 0x9f, 0x13, 0xfb, 0x0c, 0xf3, 0x17, 0xfb, 0x0b, 0x33, 0xc2, 0xf3, - 0x07, 0x2b, 0xab, 0x44, 0x18, 0xfb, 0x00, 0xaa, 0x9b, 0xf9, 0x44, 0xb9, - 0x08, 0x9f, 0x1e, 0xfb, 0x0b, 0x33, 0x00, 0x2b, 0xb8, 0xbf, 0x1f, 0x33, - 0x5b, 0x11, 0x80, 0x33, 0x8d, 0xf8, 0x32, 0x30, 0xca, 0xf3, 0x07, 0x23, - 0x2b, 0x44, 0x18, 0xfb, 0x01, 0x66, 0x93, 0xf9, 0x44, 0xba, 0x1b, 0xfb, - 0x0c, 0xf3, 0xc6, 0xf3, 0x07, 0x2b, 0xab, 0x44, 0x18, 0xfb, 0x07, 0x22, - 0x9b, 0xf9, 0x44, 0xba, 0x02, 0x9f, 0x17, 0xfb, 0x0b, 0x3b, 0xc2, 0xf3, - 0x07, 0x23, 0x2b, 0x44, 0x18, 0xfb, 0x00, 0xa0, 0x18, 0xfb, 0x01, 0x61, - 0xc0, 0xf3, 0x07, 0x20, 0x08, 0x9e, 0x93, 0xf9, 0x44, 0x39, 0xc1, 0xf3, - 0x07, 0x21, 0x28, 0x44, 0x18, 0xfb, 0x06, 0x22, 0x29, 0x44, 0x90, 0xf9, - 0x44, 0x0a, 0x91, 0xf9, 0x44, 0x1a, 0x02, 0x9e, 0x1e, 0xfb, 0x03, 0xb3, - 0xc2, 0xf3, 0x07, 0x22, 0x00, 0x2b, 0x2a, 0x44, 0xb8, 0xbf, 0x1f, 0x33, - 0x10, 0xfb, 0x0c, 0xf0, 0x16, 0xfb, 0x01, 0x00, 0x5b, 0x11, 0x92, 0xf9, - 0x44, 0x19, 0x03, 0x9a, 0x80, 0x33, 0x1e, 0xfb, 0x01, 0x00, 0x8d, 0xf8, - 0x33, 0x30, 0xd4, 0xf8, 0x28, 0x34, 0x00, 0x28, 0xb8, 0xbf, 0x1f, 0x30, - 0x03, 0xeb, 0x83, 0x03, 0x02, 0xeb, 0x83, 0x03, 0x40, 0x11, 0x80, 0x30, - 0x8d, 0xf8, 0x34, 0x00, 0x58, 0x68, 0xd4, 0xf8, 0x10, 0x31, 0x00, 0x26, - 0x18, 0x44, 0xc4, 0xf8, 0x10, 0x01, 0xc4, 0xf8, 0x28, 0x64, 0x0c, 0xaf, - 0x45, 0x4b, 0x17, 0xf8, 0x01, 0x1b, 0x83, 0xfb, 0x00, 0x23, 0xc0, 0x17, - 0xc0, 0xeb, 0x23, 0x10, 0x30, 0x44, 0xd4, 0xf8, 0x2c, 0x34, 0x01, 0x36, - 0x98, 0x47, 0x05, 0x2e, 0x02, 0xd0, 0xd4, 0xf8, 0x10, 0x01, 0xed, 0xe7, - 0x07, 0x9b, 0x01, 0x3b, 0x13, 0xf0, 0xff, 0x03, 0x07, 0x93, 0x7f, 0xf4, - 0xea, 0xae, 0x01, 0x9b, 0x01, 0x3b, 0xdb, 0xb2, 0x01, 0x93, 0x94, 0xf8, - 0x1c, 0x34, 0x01, 0x33, 0x84, 0xf8, 0x1c, 0x34, 0xd8, 0xe6, 0x0d, 0xf1, - 0x2f, 0x00, 0xff, 0xf7, 0x91, 0xfa, 0x94, 0xf8, 0x1c, 0x34, 0xe2, 0x18, - 0x92, 0xf8, 0x30, 0x24, 0x84, 0xf8, 0x33, 0x2b, 0xa2, 0xeb, 0x92, 0x02, - 0xd2, 0xb2, 0x09, 0x92, 0x00, 0x22, 0xcd, 0xe9, 0x04, 0x22, 0x06, 0x92, - 0xac, 0xe6, 0x05, 0x9b, 0x02, 0x9d, 0x00, 0x2b, 0x3f, 0xf4, 0xc2, 0xac, - 0x84, 0xf8, 0x24, 0xb4, 0xbe, 0xe4, 0x2a, 0x4b, 0x59, 0xf8, 0x03, 0x00, - 0x29, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x98, 0x47, 0x94, 0xf8, 0x32, 0x3b, - 0x94, 0xf8, 0x1c, 0x14, 0xa8, 0x3b, 0x41, 0xe5, 0x25, 0x4b, 0x59, 0xf8, - 0x03, 0x20, 0x25, 0x4b, 0x10, 0x46, 0x59, 0xf8, 0x03, 0x60, 0x01, 0x92, - 0xb0, 0x47, 0x94, 0xf8, 0x32, 0x3b, 0x01, 0x9a, 0x84, 0xf8, 0x18, 0xa2, - 0xa8, 0x3b, 0x84, 0xf8, 0x1c, 0x74, 0x06, 0x2b, 0x24, 0xd8, 0xdf, 0xe8, - 0x03, 0xf0, 0x1d, 0x1b, 0x19, 0x17, 0x15, 0x13, 0x11, 0x00, 0x19, 0x4b, - 0x59, 0xf8, 0x03, 0x00, 0x18, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x98, 0x47, - 0x94, 0xf8, 0x1c, 0x14, 0x94, 0xf8, 0x32, 0x0b, 0x00, 0x23, 0xa8, 0xe5, - 0x00, 0x23, 0xf7, 0xe4, 0x00, 0x23, 0x26, 0xe5, 0x00, 0x23, 0x31, 0xe5, - 0x00, 0x23, 0x3c, 0xe5, 0x00, 0x23, 0x47, 0xe5, 0x00, 0x23, 0x52, 0xe5, - 0xe2, 0x19, 0x92, 0xf8, 0x30, 0x24, 0x52, 0x42, 0xd2, 0xb2, 0xed, 0xe4, - 0x10, 0x46, 0xb0, 0x47, 0x94, 0xf8, 0x32, 0x3b, 0x00, 0x22, 0xa8, 0x3b, - 0xe6, 0xe4, 0x00, 0xbf, 0x1f, 0x85, 0xeb, 0x51, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x70, 0xb5, 0x2a, 0x4b, 0x59, 0xf8, 0x03, 0x40, 0x94, 0xf8, 0x18, 0x31, - 0x84, 0xf8, 0x18, 0x32, 0x00, 0x22, 0xff, 0x2b, 0x84, 0xf8, 0x14, 0x21, - 0x84, 0xf8, 0x1c, 0x24, 0x2b, 0xd0, 0x01, 0x25, 0x11, 0x46, 0x16, 0x46, - 0x1a, 0xe0, 0x5f, 0xfa, 0x8c, 0xf2, 0x91, 0xf8, 0x1c, 0xc2, 0x91, 0xf8, - 0x1c, 0x13, 0x80, 0xf8, 0xac, 0xcb, 0x80, 0xf8, 0x34, 0x3b, 0x80, 0xf8, - 0x70, 0x1b, 0x84, 0xf8, 0x14, 0x51, 0x84, 0xf8, 0x1c, 0x24, 0x94, 0x46, - 0x63, 0x19, 0x68, 0x1c, 0x93, 0xf8, 0x18, 0x31, 0x84, 0xf8, 0x18, 0x32, - 0xff, 0x2b, 0x29, 0x46, 0xc5, 0xb2, 0x0d, 0xd0, 0xfe, 0x2b, 0x21, 0x44, - 0x04, 0xeb, 0x02, 0x00, 0x02, 0xf1, 0x01, 0x0c, 0x11, 0xd0, 0x00, 0x2b, - 0xdb, 0xd1, 0x84, 0xf8, 0x14, 0x51, 0x94, 0x46, 0xe8, 0xe7, 0x94, 0x46, - 0x04, 0xeb, 0x0c, 0x02, 0xff, 0x23, 0x82, 0xf8, 0x34, 0x3b, 0x84, 0xf8, - 0x18, 0x32, 0xbd, 0xe8, 0x70, 0x40, 0xff, 0xf7, 0x43, 0xbb, 0xff, 0x23, - 0x80, 0xf8, 0x34, 0x3b, 0x84, 0xf8, 0x14, 0x51, 0xff, 0xf7, 0x3c, 0xfb, - 0x00, 0x22, 0x84, 0xf8, 0x14, 0x51, 0x84, 0xf8, 0x1c, 0x64, 0x94, 0x46, - 0xce, 0xe7, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0x1d, 0x4b, - 0x59, 0xf8, 0x03, 0x10, 0x91, 0xf8, 0x14, 0xe1, 0x81, 0xf8, 0x30, 0xeb, - 0xbe, 0xf1, 0x1e, 0x0f, 0x2c, 0xd9, 0xae, 0xf1, 0x1e, 0x03, 0xdb, 0xb2, - 0x1a, 0x46, 0x0a, 0x44, 0x92, 0xf8, 0x30, 0xc4, 0x81, 0xf8, 0x18, 0xc2, - 0xbc, 0xf1, 0x7f, 0x0f, 0x0a, 0xd1, 0x01, 0x33, 0xda, 0xb2, 0x8b, 0x18, - 0x54, 0x1c, 0x93, 0xf8, 0x30, 0xc4, 0xbc, 0xf1, 0x7f, 0x0f, 0x13, 0x46, - 0xe2, 0xb2, 0xf6, 0xd0, 0x84, 0x44, 0xca, 0x18, 0x5f, 0xfa, 0x8c, 0xfc, - 0x82, 0xf8, 0x30, 0xc4, 0x03, 0xe0, 0x92, 0xf8, 0x30, 0x24, 0xff, 0x2a, - 0xf4, 0xd1, 0x01, 0x33, 0xdb, 0xb2, 0x9e, 0x45, 0x01, 0xeb, 0x03, 0x02, - 0xf5, 0xd1, 0x81, 0xf8, 0x14, 0xe1, 0x81, 0xf8, 0x18, 0xc2, 0x10, 0xbd, - 0x00, 0x22, 0x13, 0x46, 0xd3, 0xe7, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, - 0x2d, 0xe9, 0xf0, 0x4d, 0xdf, 0xf8, 0xd4, 0x35, 0xa4, 0xb0, 0x0d, 0xf1, - 0x75, 0x02, 0x59, 0xf8, 0x03, 0x30, 0x0c, 0x92, 0xc1, 0xf3, 0x80, 0x04, - 0x00, 0xf0, 0x01, 0x02, 0x07, 0x92, 0x01, 0x94, 0xc0, 0xf3, 0x80, 0x02, - 0xc1, 0xf3, 0xc0, 0x04, 0x08, 0x92, 0x02, 0x94, 0xc0, 0xf3, 0xc0, 0x02, - 0xc1, 0xf3, 0x00, 0x14, 0x09, 0x92, 0x03, 0x94, 0xc0, 0xf3, 0x00, 0x12, - 0xc1, 0xf3, 0x40, 0x14, 0x03, 0xf6, 0x44, 0x33, 0x0a, 0x92, 0x04, 0x94, - 0xc0, 0xf3, 0x40, 0x12, 0xc1, 0xf3, 0x80, 0x14, 0xc0, 0xf3, 0x40, 0x08, - 0xc1, 0xf3, 0x40, 0x0b, 0x0b, 0x92, 0x05, 0x94, 0xc0, 0xf3, 0x80, 0x12, - 0x01, 0xf0, 0x01, 0x0a, 0xc0, 0x09, 0xc9, 0x09, 0x1c, 0x46, 0x0d, 0x92, - 0x0e, 0x90, 0x06, 0x91, 0x0f, 0xcc, 0x14, 0xaf, 0x0f, 0xc7, 0x94, 0xe8, - 0x0f, 0x00, 0x07, 0xc7, 0x3b, 0x80, 0xdf, 0xf8, 0x60, 0x35, 0x59, 0xf8, - 0x03, 0x70, 0x0c, 0x9c, 0x0f, 0xcf, 0x1c, 0xae, 0x0f, 0xc6, 0x97, 0xe8, - 0x0f, 0x00, 0x07, 0xc6, 0x33, 0x80, 0xdf, 0xf8, 0x4c, 0x35, 0x59, 0xf8, - 0x03, 0x30, 0x93, 0xe8, 0x03, 0x00, 0xdf, 0xf8, 0x44, 0x35, 0x10, 0x90, - 0xad, 0xf8, 0x44, 0x10, 0x59, 0xf8, 0x03, 0x30, 0x93, 0xe8, 0x03, 0x00, - 0xdf, 0xf8, 0x34, 0x35, 0x12, 0x90, 0xad, 0xf8, 0x4c, 0x10, 0x59, 0xf8, - 0x03, 0x70, 0x0f, 0x97, 0xcd, 0xf8, 0x30, 0xb0, 0x07, 0xf1, 0xbd, 0x00, - 0xdd, 0xf8, 0x38, 0xb0, 0x07, 0xf1, 0x6d, 0x01, 0x0d, 0xf1, 0x55, 0x0e, - 0x47, 0x46, 0x0d, 0xf1, 0x6e, 0x05, 0xdd, 0xf8, 0x34, 0x80, 0x4f, 0xf0, - 0x00, 0x0c, 0x0a, 0xe0, 0x14, 0xf8, 0x01, 0x2b, 0x01, 0xf8, 0x01, 0xcb, - 0x00, 0x2a, 0x4b, 0xd1, 0x75, 0x45, 0x00, 0xf8, 0x01, 0xcb, 0x00, 0xf0, - 0x8a, 0x80, 0x1e, 0xf8, 0x01, 0x2b, 0x00, 0x2a, 0xf0, 0xd0, 0x07, 0x9b, - 0x00, 0x2b, 0x00, 0xf0, 0xba, 0x81, 0x53, 0x08, 0x00, 0x2f, 0x00, 0xf0, - 0xb9, 0x81, 0x02, 0xeb, 0x03, 0x0c, 0xbc, 0xf1, 0xff, 0x0f, 0x5f, 0xfa, - 0x8c, 0xf3, 0x40, 0xf3, 0xb1, 0x81, 0x08, 0x9e, 0x5b, 0x08, 0x43, 0xf0, - 0x80, 0x03, 0x00, 0x2e, 0x40, 0xf0, 0xaf, 0x81, 0x09, 0x9e, 0x5b, 0x08, - 0x00, 0x2e, 0x40, 0xf0, 0xb8, 0x81, 0x0a, 0x9e, 0x5b, 0x08, 0x00, 0x2e, - 0x40, 0xf0, 0xc1, 0x81, 0x0b, 0x9e, 0x5b, 0x08, 0x00, 0x2e, 0x40, 0xf0, - 0xca, 0x81, 0x5b, 0x08, 0xb8, 0xf1, 0x00, 0x0f, 0x40, 0xf0, 0xd3, 0x81, - 0x5b, 0x08, 0xbb, 0xf1, 0x00, 0x0f, 0x00, 0xf0, 0xdc, 0x81, 0x13, 0x44, - 0x5f, 0xfa, 0x83, 0xfc, 0x4f, 0xea, 0x5c, 0x0c, 0xff, 0x2b, 0xc8, 0xbf, - 0x4c, 0xf0, 0x80, 0x0c, 0x4f, 0xea, 0x4c, 0x0c, 0x14, 0xf8, 0x01, 0x2b, - 0x5f, 0xfa, 0x8c, 0xfc, 0x01, 0xf8, 0x01, 0xcb, 0x00, 0x2a, 0xb3, 0xd0, - 0xba, 0xf1, 0x00, 0x0f, 0x00, 0xf0, 0x26, 0x81, 0x0c, 0x9e, 0x53, 0x08, - 0x00, 0x2e, 0x00, 0xf0, 0x24, 0x81, 0x02, 0xeb, 0x03, 0x0c, 0xbc, 0xf1, - 0xff, 0x0f, 0x5f, 0xfa, 0x8c, 0xf3, 0x40, 0xf3, 0x1c, 0x81, 0x01, 0x9e, - 0x5b, 0x08, 0x43, 0xf0, 0x80, 0x03, 0x00, 0x2e, 0x40, 0xf0, 0x1a, 0x81, - 0x02, 0x9e, 0x5b, 0x08, 0x00, 0x2e, 0x40, 0xf0, 0x23, 0x81, 0x03, 0x9e, - 0x5b, 0x08, 0x00, 0x2e, 0x40, 0xf0, 0x2c, 0x81, 0x04, 0x9e, 0x5b, 0x08, - 0x00, 0x2e, 0x40, 0xf0, 0x35, 0x81, 0x05, 0x9e, 0x5b, 0x08, 0x00, 0x2e, - 0x40, 0xf0, 0x3e, 0x81, 0x06, 0x9e, 0x5b, 0x08, 0x00, 0x2e, 0x00, 0xf0, - 0x47, 0x81, 0x13, 0x44, 0x5f, 0xfa, 0x83, 0xfc, 0xff, 0x2b, 0x4f, 0xea, - 0x5c, 0x0c, 0x01, 0xdd, 0x4c, 0xf0, 0x80, 0x0c, 0x4f, 0xea, 0x4c, 0x0c, - 0x5f, 0xfa, 0x8c, 0xfc, 0x75, 0x45, 0x00, 0xf8, 0x01, 0xcb, 0x7f, 0xf4, - 0x76, 0xaf, 0xdd, 0xf8, 0x30, 0xb0, 0x07, 0x9a, 0xdd, 0xf8, 0x38, 0xe0, - 0xb8, 0x46, 0x0f, 0x9f, 0x0d, 0xf1, 0x49, 0x06, 0x07, 0xf1, 0xe8, 0x05, - 0x07, 0xf1, 0x98, 0x04, 0x0d, 0xf1, 0x41, 0x00, 0x0d, 0xf1, 0x46, 0x0c, - 0x48, 0x23, 0x13, 0x21, 0x5f, 0x46, 0x0c, 0x96, 0x00, 0x2a, 0x74, 0xd0, - 0x4a, 0x08, 0xb8, 0xf1, 0x00, 0x0f, 0x75, 0xd0, 0x02, 0xeb, 0x01, 0x0b, - 0xbb, 0xf1, 0xff, 0x0f, 0x5f, 0xfa, 0x8b, 0xf2, 0x40, 0xf3, 0xb1, 0x81, - 0xc2, 0xf3, 0x47, 0x02, 0x42, 0xf0, 0x80, 0x02, 0x08, 0x9e, 0x00, 0x2e, - 0x6a, 0xd1, 0x09, 0x9e, 0x52, 0x08, 0x00, 0x2e, 0x73, 0xd1, 0x0a, 0x9e, - 0x52, 0x08, 0x00, 0x2e, 0x7c, 0xd1, 0x0b, 0x9e, 0x52, 0x08, 0x00, 0x2e, - 0x40, 0xf0, 0x86, 0x80, 0x0d, 0x9e, 0x52, 0x08, 0x00, 0x2e, 0x40, 0xf0, - 0x8f, 0x80, 0x52, 0x08, 0xbe, 0xf1, 0x00, 0x0f, 0x00, 0xf0, 0x98, 0x80, - 0x0a, 0x44, 0x5f, 0xfa, 0x82, 0xfb, 0xff, 0x2a, 0x4f, 0xea, 0x5b, 0x02, - 0x01, 0xdd, 0x42, 0xf0, 0x80, 0x02, 0x52, 0x00, 0x04, 0xf8, 0x01, 0x2b, - 0xba, 0xf1, 0x00, 0x0f, 0x00, 0xf0, 0x90, 0x80, 0x5a, 0x08, 0x00, 0x2f, - 0x40, 0xf0, 0x86, 0x81, 0x19, 0x46, 0x52, 0x08, 0x01, 0x9e, 0x00, 0x2e, - 0x40, 0xf0, 0x6e, 0x81, 0x52, 0x08, 0x02, 0x9e, 0x00, 0x2e, 0x40, 0xf0, - 0x5f, 0x81, 0x52, 0x08, 0x03, 0x9e, 0x00, 0x2e, 0x40, 0xf0, 0x50, 0x81, - 0x52, 0x08, 0x04, 0x9e, 0x00, 0x2e, 0x40, 0xf0, 0x41, 0x81, 0x52, 0x08, - 0x05, 0x9e, 0x00, 0x2e, 0x40, 0xf0, 0x32, 0x81, 0x52, 0x08, 0x06, 0x9e, - 0x00, 0x2e, 0x00, 0xf0, 0x18, 0x81, 0x13, 0x44, 0xff, 0x2b, 0xd9, 0xb2, - 0xc6, 0xbf, 0x4a, 0x08, 0x42, 0xf0, 0x80, 0x02, 0xc1, 0xf3, 0x47, 0x02, - 0x52, 0x00, 0x60, 0x45, 0x05, 0xf8, 0x01, 0x2b, 0x00, 0xf0, 0x10, 0x81, - 0x0c, 0x9a, 0x10, 0xf8, 0x01, 0x1b, 0x12, 0xf8, 0x01, 0x3b, 0x0c, 0x92, - 0x07, 0x9a, 0x00, 0x2a, 0x8a, 0xd1, 0xb8, 0xf1, 0x00, 0x0f, 0x40, 0xf0, - 0x43, 0x81, 0x42, 0x46, 0x08, 0x9e, 0x52, 0x08, 0x00, 0x2e, 0x94, 0xd0, - 0x02, 0xeb, 0x01, 0x0b, 0x5f, 0xfa, 0x8b, 0xf2, 0x09, 0x9e, 0x52, 0x08, - 0xbb, 0xf1, 0xff, 0x0f, 0xc8, 0xbf, 0x42, 0xf0, 0x80, 0x02, 0x00, 0x2e, - 0x8b, 0xd0, 0x01, 0xeb, 0x02, 0x0b, 0x5f, 0xfa, 0x8b, 0xf2, 0x0a, 0x9e, - 0x52, 0x08, 0xbb, 0xf1, 0xff, 0x0f, 0xc8, 0xbf, 0x42, 0xf0, 0x80, 0x02, - 0x00, 0x2e, 0x82, 0xd0, 0x01, 0xeb, 0x02, 0x0b, 0x5f, 0xfa, 0x8b, 0xf2, - 0x0b, 0x9e, 0x52, 0x08, 0xbb, 0xf1, 0xff, 0x0f, 0xc8, 0xbf, 0x42, 0xf0, - 0x80, 0x02, 0x00, 0x2e, 0x3f, 0xf4, 0x7a, 0xaf, 0x01, 0xeb, 0x02, 0x0b, - 0x5f, 0xfa, 0x8b, 0xf2, 0x0d, 0x9e, 0x52, 0x08, 0xbb, 0xf1, 0xff, 0x0f, - 0xc8, 0xbf, 0x42, 0xf0, 0x80, 0x02, 0x00, 0x2e, 0x3f, 0xf4, 0x71, 0xaf, - 0x01, 0xeb, 0x02, 0x0b, 0x5f, 0xfa, 0x8b, 0xf2, 0x52, 0x08, 0xbb, 0xf1, - 0xff, 0x0f, 0xc8, 0xbf, 0x42, 0xf0, 0x80, 0x02, 0xbe, 0xf1, 0x00, 0x0f, - 0x7f, 0xf4, 0x68, 0xaf, 0x52, 0x08, 0x52, 0x00, 0x04, 0xf8, 0x01, 0x2b, - 0xba, 0xf1, 0x00, 0x0f, 0x7f, 0xf4, 0x70, 0xaf, 0x00, 0x2f, 0x40, 0xf0, - 0xf3, 0x80, 0x3a, 0x46, 0x39, 0x46, 0x6e, 0xe7, 0x0c, 0x9b, 0x03, 0xb1, - 0x13, 0x46, 0x01, 0x9e, 0x5b, 0x08, 0x00, 0x2e, 0x3f, 0xf4, 0xe6, 0xae, - 0x02, 0xeb, 0x03, 0x0c, 0x5f, 0xfa, 0x8c, 0xf3, 0x02, 0x9e, 0x5b, 0x08, - 0xbc, 0xf1, 0xff, 0x0f, 0xc8, 0xbf, 0x43, 0xf0, 0x80, 0x03, 0x00, 0x2e, - 0x3f, 0xf4, 0xdd, 0xae, 0x02, 0xeb, 0x03, 0x0c, 0x5f, 0xfa, 0x8c, 0xf3, - 0x03, 0x9e, 0x5b, 0x08, 0xbc, 0xf1, 0xff, 0x0f, 0xc8, 0xbf, 0x43, 0xf0, - 0x80, 0x03, 0x00, 0x2e, 0x3f, 0xf4, 0xd4, 0xae, 0x02, 0xeb, 0x03, 0x0c, - 0x5f, 0xfa, 0x8c, 0xf3, 0x04, 0x9e, 0x5b, 0x08, 0xbc, 0xf1, 0xff, 0x0f, - 0xc8, 0xbf, 0x43, 0xf0, 0x80, 0x03, 0x00, 0x2e, 0x3f, 0xf4, 0xcb, 0xae, - 0x02, 0xeb, 0x03, 0x0c, 0x5f, 0xfa, 0x8c, 0xf3, 0x05, 0x9e, 0x5b, 0x08, - 0xbc, 0xf1, 0xff, 0x0f, 0xc8, 0xbf, 0x43, 0xf0, 0x80, 0x03, 0x00, 0x2e, - 0x3f, 0xf4, 0xc2, 0xae, 0x02, 0xeb, 0x03, 0x0c, 0x5f, 0xfa, 0x8c, 0xf3, - 0x06, 0x9e, 0x5b, 0x08, 0xbc, 0xf1, 0xff, 0x0f, 0xc8, 0xbf, 0x43, 0xf0, - 0x80, 0x03, 0x00, 0x2e, 0x7f, 0xf4, 0xb9, 0xae, 0x4f, 0xea, 0x53, 0x0c, - 0xbe, 0xe6, 0x00, 0x2f, 0x4e, 0xd1, 0x3b, 0x46, 0x5b, 0x08, 0x08, 0x9e, - 0x00, 0x2e, 0x3f, 0xf4, 0x51, 0xae, 0x02, 0xeb, 0x03, 0x0c, 0x5f, 0xfa, - 0x8c, 0xf3, 0x09, 0x9e, 0x5b, 0x08, 0xbc, 0xf1, 0xff, 0x0f, 0xc8, 0xbf, - 0x43, 0xf0, 0x80, 0x03, 0x00, 0x2e, 0x3f, 0xf4, 0x48, 0xae, 0x02, 0xeb, - 0x03, 0x0c, 0x5f, 0xfa, 0x8c, 0xf3, 0x0a, 0x9e, 0x5b, 0x08, 0xbc, 0xf1, - 0xff, 0x0f, 0xc8, 0xbf, 0x43, 0xf0, 0x80, 0x03, 0x00, 0x2e, 0x3f, 0xf4, - 0x3f, 0xae, 0x02, 0xeb, 0x03, 0x0c, 0x5f, 0xfa, 0x8c, 0xf3, 0x0b, 0x9e, - 0x5b, 0x08, 0xbc, 0xf1, 0xff, 0x0f, 0xc8, 0xbf, 0x43, 0xf0, 0x80, 0x03, - 0x00, 0x2e, 0x3f, 0xf4, 0x36, 0xae, 0x02, 0xeb, 0x03, 0x0c, 0x5f, 0xfa, - 0x8c, 0xf3, 0x5b, 0x08, 0xbc, 0xf1, 0xff, 0x0f, 0xc8, 0xbf, 0x43, 0xf0, - 0x80, 0x03, 0xb8, 0xf1, 0x00, 0x0f, 0x3f, 0xf4, 0x2d, 0xae, 0x02, 0xeb, - 0x03, 0x0c, 0x5f, 0xfa, 0x8c, 0xf3, 0x5b, 0x08, 0xbc, 0xf1, 0xff, 0x0f, - 0xc8, 0xbf, 0x43, 0xf0, 0x80, 0x03, 0xbb, 0xf1, 0x00, 0x0f, 0x7f, 0xf4, - 0x24, 0xae, 0x4f, 0xea, 0x53, 0x0c, 0x29, 0xe6, 0x13, 0x46, 0x5b, 0x08, - 0xaf, 0xe7, 0x52, 0x08, 0x52, 0x00, 0x60, 0x45, 0x05, 0xf8, 0x01, 0x2b, - 0x7f, 0xf4, 0xf0, 0xae, 0x2d, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x00, 0x20, - 0x06, 0x22, 0x83, 0xf8, 0x18, 0x12, 0x83, 0xf8, 0x14, 0x01, 0x83, 0xf8, - 0x1c, 0x24, 0x24, 0xb0, 0xbd, 0xe8, 0xf0, 0x8d, 0x1a, 0x44, 0xd1, 0xb2, - 0xff, 0x2a, 0xca, 0xbf, 0xc1, 0xf3, 0x47, 0x02, 0x4a, 0x08, 0x42, 0xf0, - 0x80, 0x02, 0xc4, 0xe6, 0x1a, 0x44, 0xd1, 0xb2, 0xff, 0x2a, 0xca, 0xbf, - 0xc1, 0xf3, 0x47, 0x02, 0x4a, 0x08, 0x42, 0xf0, 0x80, 0x02, 0xb5, 0xe6, - 0x1a, 0x44, 0xd1, 0xb2, 0xff, 0x2a, 0xca, 0xbf, 0xc1, 0xf3, 0x47, 0x02, - 0x4a, 0x08, 0x42, 0xf0, 0x80, 0x02, 0xa6, 0xe6, 0x1a, 0x44, 0xd1, 0xb2, - 0xff, 0x2a, 0xca, 0xbf, 0xc1, 0xf3, 0x47, 0x02, 0x4a, 0x08, 0x42, 0xf0, - 0x80, 0x02, 0x97, 0xe6, 0x1a, 0x44, 0xd1, 0xb2, 0xff, 0x2a, 0xca, 0xbf, - 0xc1, 0xf3, 0x47, 0x02, 0x4a, 0x08, 0x42, 0xf0, 0x80, 0x02, 0x88, 0xe6, - 0x0a, 0x46, 0xc2, 0xf3, 0x47, 0x02, 0x4f, 0xe6, 0x19, 0x46, 0xc1, 0xf3, - 0x47, 0x02, 0x7b, 0xe6, 0x1a, 0x44, 0xff, 0x2a, 0xd1, 0xb2, 0xf8, 0xdd, - 0xc1, 0xf3, 0x47, 0x02, 0x42, 0xf0, 0x80, 0x02, 0x72, 0xe6, 0x00, 0xbf, - 0x24, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, - 0xc0, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0xb5, 0x20, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0xd9, 0x78, 0x98, 0x78, - 0xff, 0xf7, 0xfe, 0xfc, 0x1d, 0x4b, 0x59, 0xf8, 0x03, 0x40, 0xd4, 0xf8, - 0x2c, 0x34, 0x00, 0x22, 0xc4, 0xf8, 0x10, 0x21, 0x0b, 0xb3, 0x1a, 0x4b, - 0x4f, 0xf4, 0x80, 0x72, 0x59, 0xf8, 0x03, 0x50, 0x00, 0x21, 0x04, 0xf5, - 0x47, 0x70, 0xa8, 0x47, 0x4f, 0xf4, 0x80, 0x72, 0x00, 0x21, 0x04, 0xf5, - 0x07, 0x70, 0xa8, 0x47, 0x3c, 0x22, 0x00, 0x21, 0x04, 0xf6, 0x34, 0x30, - 0xa8, 0x47, 0x3c, 0x22, 0x00, 0x21, 0x04, 0xf5, 0x37, 0x60, 0xa8, 0x47, - 0x3c, 0x22, 0x00, 0x21, 0x04, 0xf6, 0xac, 0x30, 0xa8, 0x47, 0xff, 0x23, - 0x84, 0xf8, 0x17, 0x32, 0x38, 0xbd, 0x0a, 0x4b, 0x05, 0x48, 0x59, 0xf8, - 0x03, 0x30, 0x98, 0x47, 0x08, 0x4b, 0x20, 0x60, 0x59, 0xf8, 0x03, 0x30, - 0xc4, 0xf8, 0x2c, 0x34, 0xd1, 0xe7, 0x00, 0xbf, 0x54, 0x5d, 0x03, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x30, 0xb5, 0x83, 0xb0, - 0xff, 0xf7, 0xb0, 0xff, 0x2c, 0x4b, 0x59, 0xf8, 0x03, 0x40, 0x20, 0x22, - 0x84, 0xf8, 0x17, 0x22, 0xfd, 0xf7, 0x3e, 0xf9, 0x01, 0x90, 0x08, 0xb9, - 0x03, 0xb0, 0x30, 0xbd, 0xfd, 0xf7, 0x52, 0xfb, 0xfd, 0xf7, 0xc6, 0xf8, - 0x94, 0xf8, 0x18, 0x31, 0xff, 0x2b, 0x16, 0xd0, 0x23, 0x4a, 0x59, 0xf8, - 0x02, 0x20, 0x04, 0xf5, 0x47, 0x71, 0x04, 0xf5, 0x07, 0x7c, 0x04, 0xf5, - 0x8c, 0x70, 0x02, 0xeb, 0x03, 0x0e, 0x11, 0xf9, 0x01, 0x3b, 0x00, 0x2b, - 0x10, 0xf8, 0x01, 0x3f, 0x28, 0xdd, 0x9e, 0xf8, 0x9c, 0x51, 0x0c, 0xf8, - 0x01, 0x5b, 0xff, 0x2b, 0xf1, 0xd1, 0xfd, 0xf7, 0xc9, 0xff, 0xfd, 0xf7, - 0xf7, 0xf9, 0x94, 0xf8, 0x14, 0x21, 0x00, 0x20, 0x04, 0xe0, 0x11, 0xf0, - 0xff, 0x02, 0x4f, 0xf0, 0x01, 0x00, 0x1c, 0xd0, 0xa3, 0x18, 0x51, 0x1c, - 0x93, 0xf8, 0x18, 0x31, 0x50, 0x2b, 0xf4, 0xd9, 0x84, 0xf8, 0x18, 0x32, - 0x08, 0xb1, 0x84, 0xf8, 0x14, 0x21, 0x22, 0x44, 0xff, 0x23, 0x82, 0xf8, - 0x18, 0x31, 0xfc, 0xf7, 0xdb, 0xff, 0xff, 0xf7, 0xd5, 0xfb, 0x01, 0x20, - 0x03, 0xb0, 0x30, 0xbd, 0x9e, 0xf8, 0x4c, 0x51, 0x0c, 0xf8, 0x01, 0x5b, - 0xff, 0x2b, 0xc8, 0xd1, 0xd5, 0xe7, 0x84, 0xf8, 0x18, 0x32, 0x84, 0xf8, - 0x14, 0x21, 0xec, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x30, 0xb5, 0x64, 0x4b, 0x59, 0xf8, 0x03, 0x20, 0x00, 0x23, 0x82, 0xf8, - 0x18, 0x32, 0xc3, 0x07, 0x4f, 0xea, 0x50, 0x0c, 0x73, 0xd5, 0x1c, 0xf0, - 0x01, 0x0f, 0x4f, 0xea, 0x51, 0x03, 0x4f, 0xea, 0x90, 0x00, 0x00, 0xf0, - 0xa4, 0x80, 0x0b, 0x44, 0xff, 0x2b, 0x5f, 0xfa, 0x83, 0xfc, 0x40, 0xf3, - 0x9a, 0x80, 0x4f, 0xea, 0x5c, 0x03, 0x10, 0xf0, 0x01, 0x0f, 0x43, 0xf0, - 0x80, 0x03, 0x4f, 0xf0, 0x01, 0x04, 0x4f, 0xea, 0x50, 0x05, 0x67, 0xd0, - 0x0b, 0x44, 0x5f, 0xfa, 0x83, 0xfc, 0xff, 0x2b, 0x4f, 0xea, 0x5c, 0x03, - 0xc8, 0xbf, 0x43, 0xf0, 0x80, 0x03, 0xed, 0x07, 0x4f, 0xf0, 0x01, 0x04, - 0x4f, 0xea, 0x90, 0x0e, 0x5e, 0xd5, 0x0b, 0x44, 0x5f, 0xfa, 0x83, 0xfc, - 0xff, 0x2b, 0x4f, 0xea, 0x5c, 0x03, 0xc8, 0xbf, 0x43, 0xf0, 0x80, 0x03, - 0x1e, 0xf0, 0x01, 0x0f, 0x4f, 0xf0, 0x01, 0x04, 0x4f, 0xea, 0xd0, 0x05, - 0x55, 0xd0, 0x0b, 0x44, 0x5f, 0xfa, 0x83, 0xfc, 0xff, 0x2b, 0x4f, 0xea, - 0x5c, 0x03, 0xc8, 0xbf, 0x43, 0xf0, 0x80, 0x03, 0xed, 0x07, 0x4f, 0xf0, - 0x01, 0x04, 0x4f, 0xea, 0x10, 0x1e, 0x4c, 0xd5, 0x0b, 0x44, 0x5f, 0xfa, - 0x83, 0xfc, 0xff, 0x2b, 0x4f, 0xea, 0x5c, 0x03, 0xc8, 0xbf, 0x43, 0xf0, - 0x80, 0x03, 0x1e, 0xf0, 0x01, 0x0f, 0x4f, 0xf0, 0x01, 0x04, 0x4f, 0xea, - 0x50, 0x15, 0x43, 0xd0, 0x0b, 0x44, 0x5f, 0xfa, 0x83, 0xfc, 0x4f, 0xea, - 0x5c, 0x0e, 0xff, 0x2b, 0xc8, 0xbf, 0x4e, 0xf0, 0x80, 0x0e, 0x00, 0x2d, - 0x54, 0xd0, 0x01, 0xeb, 0x0e, 0x00, 0xff, 0x28, 0x5f, 0xfa, 0x80, 0xfc, - 0x46, 0xdd, 0x4f, 0xea, 0x5c, 0x00, 0x00, 0x23, 0x40, 0xf0, 0x80, 0x00, - 0x82, 0xf8, 0x14, 0x31, 0x82, 0xf8, 0x18, 0xc2, 0x40, 0x00, 0xc0, 0xb2, - 0x30, 0xbd, 0x1c, 0xf0, 0x01, 0x0c, 0x4f, 0xea, 0x90, 0x00, 0x2d, 0xd1, - 0x63, 0x46, 0x64, 0x46, 0x5b, 0x08, 0x10, 0xf0, 0x01, 0x0f, 0x4f, 0xea, - 0x50, 0x05, 0x97, 0xd1, 0xed, 0x07, 0x4f, 0xea, 0x53, 0x03, 0x4f, 0xea, - 0x90, 0x0e, 0xa0, 0xd4, 0x1e, 0xf0, 0x01, 0x0f, 0x4f, 0xea, 0x53, 0x03, - 0x4f, 0xea, 0xd0, 0x05, 0xa9, 0xd1, 0xed, 0x07, 0x4f, 0xea, 0x53, 0x03, - 0x4f, 0xea, 0x10, 0x1e, 0xb2, 0xd4, 0x1e, 0xf0, 0x01, 0x0f, 0x4f, 0xea, - 0x53, 0x03, 0x4f, 0xea, 0x50, 0x15, 0xbb, 0xd1, 0x4f, 0xea, 0x53, 0x0e, - 0x00, 0x2d, 0xc2, 0xd1, 0x98, 0x08, 0x82, 0xf8, 0x14, 0x51, 0x00, 0x2c, - 0xca, 0xd1, 0x40, 0x00, 0xc0, 0xb2, 0x30, 0xbd, 0x8c, 0x46, 0x4f, 0xea, - 0x5c, 0x03, 0x01, 0x24, 0xcf, 0xe7, 0x8c, 0x46, 0x01, 0x24, 0xcb, 0xe7, - 0x00, 0x23, 0x4f, 0xea, 0x5c, 0x00, 0x82, 0xf8, 0x14, 0x31, 0x82, 0xf8, - 0x18, 0xc2, 0xb9, 0xe7, 0x4f, 0xea, 0x5e, 0x00, 0x82, 0xf8, 0x14, 0x51, - 0x82, 0xf8, 0x18, 0xc2, 0xb2, 0xe7, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, - 0x0a, 0x4b, 0x0b, 0x49, 0x59, 0xf8, 0x03, 0x30, 0x01, 0x38, 0xc0, 0xb2, - 0x1a, 0x18, 0x83, 0xf8, 0x14, 0x01, 0x92, 0xf8, 0xe8, 0xcc, 0x83, 0xf8, - 0x1c, 0xc4, 0x59, 0xf8, 0x01, 0x20, 0x62, 0x44, 0x92, 0xf8, 0x64, 0x2b, - 0x83, 0xf8, 0x18, 0x22, 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, - 0x24, 0x00, 0x00, 0x00, 0x0a, 0x4b, 0x0b, 0x49, 0x59, 0xf8, 0x03, 0x30, - 0x01, 0x30, 0xc0, 0xb2, 0x1a, 0x18, 0x83, 0xf8, 0x14, 0x01, 0x92, 0xf8, - 0xe8, 0xcc, 0x83, 0xf8, 0x1c, 0xc4, 0x59, 0xf8, 0x01, 0x20, 0x62, 0x44, - 0x92, 0xf8, 0x64, 0x2b, 0x83, 0xf8, 0x18, 0x22, 0x70, 0x47, 0x00, 0xbf, - 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x49, 0xf2, 0xa4, 0x23, - 0x98, 0x42, 0x07, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x18, 0x44, 0x01, 0x44, - 0x8b, 0xbf, 0xa1, 0xf5, 0x06, 0x41, 0xa1, 0xf5, 0xde, 0x41, 0x11, 0xf8, - 0xd5, 0x0c, 0x11, 0xf8, 0x70, 0x0c, 0x70, 0x47, 0x24, 0x00, 0x00, 0x00, - 0x2d, 0xe9, 0xf0, 0x4d, 0xdf, 0xf8, 0x74, 0x37, 0x8a, 0xb0, 0x59, 0xf8, - 0x03, 0x80, 0x09, 0x90, 0x00, 0x23, 0x01, 0x22, 0x01, 0x38, 0x88, 0xf8, - 0x14, 0x21, 0x88, 0xf8, 0x1c, 0x34, 0x10, 0xf8, 0x01, 0x3f, 0x20, 0x21, - 0x88, 0xf8, 0xe8, 0x1c, 0x03, 0xf0, 0x7f, 0x01, 0x6f, 0x29, 0x17, 0xd8, - 0x5f, 0x29, 0x88, 0xbf, 0x03, 0xf0, 0x4f, 0x01, 0x88, 0xf8, 0x18, 0x12, - 0x08, 0xeb, 0x02, 0x04, 0x53, 0x1c, 0xdb, 0xb2, 0x88, 0xf8, 0x1c, 0x24, - 0x84, 0xf8, 0xe8, 0x1c, 0x88, 0xf8, 0x14, 0x31, 0x5b, 0xb1, 0x1a, 0x46, - 0x10, 0xf8, 0x01, 0x3f, 0x03, 0xf0, 0x7f, 0x01, 0x6f, 0x29, 0xe7, 0xd9, - 0x03, 0xf0, 0x5f, 0x01, 0x88, 0xf8, 0x18, 0x12, 0xe8, 0xe7, 0x98, 0xf8, - 0xe8, 0x2c, 0x01, 0x92, 0x11, 0x46, 0x5b, 0x29, 0x4f, 0xf0, 0x1b, 0x02, - 0x88, 0xf8, 0xe7, 0x2d, 0x88, 0xf8, 0x18, 0x12, 0x00, 0xf0, 0x5d, 0x83, - 0x00, 0x93, 0xdf, 0xf8, 0xf8, 0x36, 0x4f, 0xf0, 0xff, 0x0a, 0x59, 0xf8, - 0x03, 0xb0, 0xcd, 0xf8, 0x10, 0xa0, 0xcd, 0xf8, 0x08, 0xa0, 0x2f, 0xe0, - 0x1a, 0x46, 0x5b, 0x44, 0x88, 0xf8, 0x1c, 0x24, 0x93, 0xf8, 0x64, 0x3b, - 0x13, 0xf0, 0x02, 0x02, 0x3e, 0xd1, 0x00, 0x2b, 0x40, 0xf0, 0x07, 0x83, - 0x04, 0x99, 0x00, 0x9b, 0x01, 0x31, 0xc9, 0xb2, 0x43, 0x44, 0x20, 0x22, - 0x78, 0x29, 0x04, 0x91, 0x88, 0xf8, 0x18, 0x22, 0x83, 0xf8, 0xe8, 0x2c, - 0x88, 0xf8, 0x14, 0x11, 0x00, 0xf2, 0x4a, 0x83, 0x09, 0x9b, 0x5a, 0x54, - 0x00, 0x9b, 0x02, 0x93, 0x02, 0x9b, 0x01, 0x33, 0xda, 0xb2, 0x08, 0xeb, - 0x02, 0x03, 0x00, 0x92, 0x93, 0xf8, 0xe8, 0x3c, 0x88, 0xf8, 0x14, 0x21, - 0x5b, 0x2b, 0x01, 0x93, 0x88, 0xf8, 0x18, 0x32, 0x00, 0xf0, 0x1b, 0x83, - 0x01, 0x9b, 0x2e, 0x2b, 0xcc, 0xd1, 0x02, 0x9b, 0x02, 0x33, 0xdb, 0xb2, - 0x08, 0xeb, 0x03, 0x02, 0x88, 0xf8, 0x14, 0x31, 0x92, 0xf8, 0xe8, 0x3c, - 0x88, 0xf8, 0x1c, 0x34, 0x5b, 0x44, 0x93, 0xf8, 0x64, 0x3b, 0x03, 0xf0, - 0x01, 0x03, 0x88, 0xf8, 0x18, 0x32, 0x00, 0x2b, 0x00, 0xf0, 0xc1, 0x82, - 0x49, 0xf2, 0xa5, 0x23, 0x00, 0x9a, 0xc2, 0xf1, 0x01, 0x01, 0x01, 0x3a, - 0x06, 0x91, 0x05, 0x92, 0x49, 0xf2, 0xa4, 0x2e, 0x01, 0x33, 0x9b, 0xb2, - 0x73, 0x45, 0x0b, 0xeb, 0x03, 0x02, 0x00, 0xf2, 0xa8, 0x80, 0xa2, 0xf5, - 0xde, 0x42, 0x12, 0xf9, 0x70, 0x1c, 0x00, 0x29, 0xf2, 0xda, 0x12, 0xf8, - 0x6f, 0x2c, 0x28, 0x2a, 0x4f, 0xf0, 0x01, 0x0c, 0x0c, 0xd0, 0x0c, 0xf1, - 0x01, 0x0c, 0x5f, 0xfa, 0x8c, 0xfc, 0x0b, 0xeb, 0x0c, 0x02, 0x1a, 0x44, - 0xa2, 0xf5, 0xde, 0x42, 0x12, 0xf8, 0x70, 0x2c, 0x28, 0x2a, 0xf2, 0xd1, - 0x62, 0x46, 0x0b, 0xeb, 0x03, 0x00, 0x51, 0x1c, 0x14, 0x46, 0xca, 0xb2, - 0x81, 0x18, 0xa1, 0xf5, 0xde, 0x41, 0x11, 0xf8, 0x70, 0x1c, 0x29, 0x29, - 0xf5, 0xd1, 0x03, 0x94, 0x92, 0x46, 0x0b, 0xeb, 0x03, 0x00, 0x0a, 0xf1, - 0x01, 0x01, 0x57, 0x46, 0x5f, 0xfa, 0x81, 0xfa, 0x00, 0xeb, 0x0a, 0x01, - 0xa1, 0xf5, 0xde, 0x41, 0x11, 0xf8, 0x70, 0x1c, 0x01, 0xf0, 0x7f, 0x01, - 0x3d, 0x29, 0xf0, 0xd1, 0x05, 0x99, 0x03, 0x98, 0x06, 0x9d, 0xcd, 0xf8, - 0x1c, 0xc0, 0xa1, 0xeb, 0x0c, 0x01, 0x01, 0x44, 0xc9, 0xb2, 0x65, 0x44, - 0xdd, 0xe9, 0x00, 0x04, 0x02, 0x91, 0x0b, 0xeb, 0x03, 0x06, 0x8c, 0x46, - 0x08, 0x92, 0x01, 0xe0, 0x92, 0xf8, 0xe8, 0x4c, 0x42, 0x19, 0x56, 0xfa, - 0x82, 0xf2, 0xa2, 0xf5, 0xde, 0x42, 0x41, 0x1c, 0x12, 0xf8, 0x70, 0x2c, - 0xa2, 0x42, 0xa1, 0xd1, 0x84, 0x45, 0xc8, 0xb2, 0x08, 0xeb, 0x00, 0x02, - 0xee, 0xd1, 0xdd, 0xe9, 0x07, 0xc2, 0x00, 0x99, 0x0c, 0xf1, 0xff, 0x3c, - 0x5f, 0xfa, 0x8c, 0xfc, 0x0b, 0xeb, 0x0c, 0x00, 0x73, 0x45, 0x18, 0x44, - 0x8b, 0xbf, 0xa0, 0xf5, 0x06, 0x40, 0xa0, 0xf5, 0xde, 0x40, 0x10, 0xf8, - 0xd5, 0x6c, 0x10, 0xf8, 0x70, 0x6c, 0x34, 0x06, 0x00, 0xf1, 0x00, 0x81, - 0x0b, 0xeb, 0x06, 0x00, 0x90, 0xf9, 0x64, 0x0b, 0x00, 0x28, 0x08, 0xda, - 0x01, 0x39, 0xc9, 0xb2, 0x08, 0xeb, 0x01, 0x00, 0x90, 0xf8, 0xe8, 0x0c, - 0xb0, 0x42, 0xdd, 0xd0, 0x76, 0xe7, 0x20, 0x2e, 0x00, 0xf0, 0x82, 0x80, - 0x23, 0x2e, 0x00, 0xf0, 0x8c, 0x80, 0x2e, 0x2e, 0x00, 0xf0, 0x96, 0x80, - 0x26, 0x2e, 0x00, 0xf0, 0xa0, 0x80, 0x40, 0x2e, 0x00, 0xf0, 0xc8, 0x80, - 0x5e, 0x2e, 0x00, 0xf0, 0xd2, 0x80, 0x2b, 0x2e, 0x00, 0xf0, 0xb3, 0x80, - 0x3a, 0x2e, 0x40, 0xf0, 0x4e, 0x82, 0x08, 0x46, 0x44, 0x1e, 0x01, 0x46, - 0xe0, 0xb2, 0x08, 0xeb, 0x00, 0x04, 0x94, 0xf8, 0xe8, 0x4c, 0x5c, 0x44, - 0x94, 0xf8, 0x64, 0x4b, 0xa5, 0x06, 0xf3, 0xd4, 0xb6, 0xe7, 0xa2, 0xf5, - 0x06, 0x42, 0x12, 0xf9, 0xd5, 0x1c, 0x00, 0x29, 0xbf, 0xf6, 0x4a, 0xaf, - 0x12, 0xf8, 0xd4, 0x2c, 0x28, 0x2a, 0x4f, 0xf0, 0x01, 0x0c, 0x0c, 0xd0, - 0x0c, 0xf1, 0x01, 0x0c, 0x5f, 0xfa, 0x8c, 0xfc, 0x0b, 0xeb, 0x0c, 0x02, - 0x1a, 0x44, 0xa2, 0xf5, 0x06, 0x42, 0x12, 0xf8, 0xd5, 0x2c, 0x28, 0x2a, - 0xf2, 0xd1, 0x62, 0x46, 0x0b, 0xeb, 0x03, 0x00, 0x51, 0x1c, 0x14, 0x46, - 0xca, 0xb2, 0x81, 0x18, 0xa1, 0xf5, 0x06, 0x41, 0x11, 0xf8, 0xd5, 0x1c, - 0x29, 0x29, 0xf5, 0xd1, 0x03, 0x94, 0x92, 0x46, 0x0b, 0xeb, 0x03, 0x00, - 0x0a, 0xf1, 0x01, 0x01, 0x57, 0x46, 0x5f, 0xfa, 0x81, 0xfa, 0x00, 0xeb, - 0x0a, 0x01, 0xa1, 0xf5, 0x06, 0x41, 0x11, 0xf8, 0xd5, 0x1c, 0x01, 0xf0, - 0x7f, 0x01, 0x3d, 0x29, 0xf0, 0xd1, 0x05, 0x99, 0x03, 0x98, 0x06, 0x9d, - 0xcd, 0xf8, 0x1c, 0xc0, 0xa1, 0xeb, 0x0c, 0x01, 0x01, 0x44, 0xc9, 0xb2, - 0x65, 0x44, 0xdd, 0xe9, 0x00, 0x04, 0x02, 0x91, 0x0b, 0xeb, 0x03, 0x06, - 0x8c, 0x46, 0x08, 0x92, 0x01, 0xe0, 0x92, 0xf8, 0xe8, 0x4c, 0x42, 0x19, - 0x56, 0xfa, 0x82, 0xf2, 0xa2, 0xf5, 0x06, 0x42, 0x41, 0x1c, 0x12, 0xf8, - 0xd5, 0x2c, 0xa2, 0x42, 0x7f, 0xf4, 0xf8, 0xae, 0x60, 0x45, 0xc8, 0xb2, - 0x08, 0xeb, 0x00, 0x02, 0xed, 0xd1, 0x54, 0xe7, 0x01, 0x39, 0xc9, 0xb2, - 0x08, 0xeb, 0x01, 0x00, 0x90, 0xf8, 0xe8, 0x0c, 0x58, 0x44, 0x90, 0xf9, - 0x64, 0x0b, 0x00, 0x28, 0xbf, 0xf6, 0x4c, 0xaf, 0xe4, 0xe6, 0x01, 0x39, - 0xc9, 0xb2, 0x08, 0xeb, 0x01, 0x00, 0x90, 0xf8, 0xe8, 0x0c, 0x58, 0x44, - 0x90, 0xf8, 0x64, 0x0b, 0x40, 0x06, 0x3f, 0xf5, 0x3f, 0xaf, 0xd7, 0xe6, - 0x01, 0x39, 0xc9, 0xb2, 0x08, 0xeb, 0x01, 0x00, 0x90, 0xf8, 0xe8, 0x0c, - 0x58, 0x44, 0x90, 0xf8, 0x64, 0x0b, 0x06, 0x07, 0x3f, 0xf5, 0x32, 0xaf, - 0xca, 0xe6, 0x48, 0x1e, 0xc0, 0xb2, 0x08, 0xeb, 0x00, 0x04, 0x94, 0xf8, - 0xe8, 0x4c, 0x0b, 0xeb, 0x04, 0x05, 0x95, 0xf8, 0x64, 0x5b, 0xed, 0x06, - 0x00, 0xf1, 0xe8, 0x80, 0x48, 0x2c, 0x7f, 0xf4, 0xbb, 0xae, 0x02, 0x39, - 0xc9, 0xb2, 0x08, 0xeb, 0x01, 0x00, 0x90, 0xf8, 0xe8, 0x0c, 0x00, 0xf0, - 0xef, 0x00, 0x43, 0x28, 0x7f, 0xf4, 0xb0, 0xae, 0x14, 0xe7, 0x01, 0x39, - 0xc9, 0xb2, 0x08, 0xeb, 0x01, 0x00, 0x90, 0xf8, 0xe8, 0x0c, 0x45, 0x28, - 0x3f, 0xf4, 0x0c, 0xaf, 0x00, 0xf0, 0xef, 0x00, 0x49, 0x28, 0x7f, 0xf4, - 0xa1, 0xae, 0x05, 0xe7, 0x01, 0x39, 0xc9, 0xb2, 0x08, 0xeb, 0x01, 0x00, - 0x90, 0xf8, 0xe8, 0x0c, 0x58, 0x44, 0x90, 0xf8, 0x64, 0x0b, 0x40, 0x07, - 0x3f, 0xf5, 0xfa, 0xae, 0x92, 0xe6, 0x01, 0x39, 0xc9, 0xb2, 0x08, 0xeb, - 0x01, 0x00, 0x90, 0xf8, 0xe8, 0x0c, 0x58, 0x44, 0x90, 0xf8, 0x64, 0x0b, - 0x86, 0x06, 0x3f, 0xf5, 0xed, 0xae, 0x85, 0xe6, 0x03, 0x99, 0x97, 0x42, - 0x01, 0xf1, 0x02, 0x0c, 0x5f, 0xfa, 0x8c, 0xfc, 0x5c, 0xd0, 0x02, 0x9a, - 0x0e, 0xe0, 0x01, 0x32, 0xd2, 0xb2, 0x08, 0xeb, 0x02, 0x01, 0x91, 0xf8, - 0xe8, 0x1c, 0x81, 0x42, 0x7f, 0xf4, 0x74, 0xae, 0x0c, 0xf1, 0x01, 0x01, - 0xbc, 0x45, 0xc9, 0xb2, 0x4c, 0xd0, 0x8c, 0x46, 0x0b, 0xeb, 0x0c, 0x01, - 0x19, 0x44, 0x73, 0x45, 0x8b, 0xbf, 0xa1, 0xf5, 0x06, 0x41, 0xa1, 0xf5, - 0xde, 0x41, 0x11, 0xf8, 0xd5, 0x0c, 0x11, 0xf8, 0x70, 0x0c, 0x0b, 0xeb, - 0x00, 0x01, 0x91, 0xf9, 0x64, 0x1b, 0x00, 0x29, 0xdd, 0xdb, 0x20, 0x28, - 0x5b, 0xd0, 0x23, 0x28, 0x66, 0xd0, 0x2e, 0x28, 0x71, 0xd0, 0x26, 0x28, - 0x7e, 0xd0, 0x40, 0x28, 0x00, 0xf0, 0xc1, 0x80, 0x5e, 0x28, 0x00, 0xf0, - 0xcb, 0x80, 0x2b, 0x28, 0x00, 0xf0, 0xf2, 0x80, 0x3a, 0x28, 0x00, 0xf0, - 0x1e, 0x81, 0x25, 0x28, 0x40, 0xf0, 0x4e, 0x81, 0x51, 0x1c, 0xc9, 0xb2, - 0x08, 0xeb, 0x01, 0x00, 0x90, 0xf8, 0xe8, 0x0c, 0x45, 0x28, 0x00, 0xf0, - 0x82, 0x80, 0x49, 0x28, 0x7f, 0xf4, 0x38, 0xae, 0x91, 0x1c, 0x58, 0xfa, - 0x81, 0xf1, 0x91, 0xf8, 0xe8, 0x1c, 0x4e, 0x29, 0x7f, 0xf4, 0x30, 0xae, - 0x03, 0x32, 0xd2, 0xb2, 0x08, 0xeb, 0x02, 0x01, 0x91, 0xf8, 0xe8, 0x0c, - 0x47, 0x28, 0x7f, 0xf4, 0x27, 0xae, 0x0c, 0xf1, 0x01, 0x01, 0xbc, 0x45, - 0xc9, 0xb2, 0xb2, 0xd1, 0x49, 0xf2, 0xa4, 0x22, 0x93, 0x42, 0x04, 0x98, - 0x09, 0x9d, 0x88, 0xf8, 0x1c, 0xa4, 0x5b, 0x44, 0x08, 0xd9, 0xac, 0xe0, - 0x98, 0xf8, 0x1c, 0xa4, 0x0a, 0xf1, 0x01, 0x0a, 0x5f, 0xfa, 0x8a, 0xfa, - 0x88, 0xf8, 0x1c, 0xa4, 0x9a, 0x44, 0xaa, 0xf5, 0xde, 0x4a, 0x44, 0x1c, - 0x1a, 0xf8, 0x70, 0x1c, 0x01, 0xf0, 0x7f, 0x02, 0x3d, 0x2a, 0x18, 0xbf, - 0xe0, 0xb2, 0x88, 0xf8, 0x18, 0x22, 0x18, 0xbf, 0x2a, 0x54, 0x0c, 0x06, - 0xe6, 0xd5, 0x04, 0x90, 0xca, 0xe5, 0x01, 0x32, 0xd2, 0xb2, 0x08, 0xeb, - 0x02, 0x01, 0x91, 0xf8, 0xe8, 0x1c, 0x59, 0x44, 0x91, 0xf9, 0x64, 0x1b, - 0x00, 0x29, 0xbf, 0xf6, 0x7d, 0xaf, 0xef, 0xe5, 0x01, 0x32, 0xd2, 0xb2, - 0x08, 0xeb, 0x02, 0x01, 0x91, 0xf8, 0xe8, 0x1c, 0x59, 0x44, 0x91, 0xf8, - 0x64, 0x1b, 0x49, 0x06, 0x3f, 0xf5, 0x70, 0xaf, 0xe2, 0xe5, 0x01, 0x32, - 0xd2, 0xb2, 0x08, 0xeb, 0x02, 0x01, 0x91, 0xf8, 0xe8, 0x1c, 0x59, 0x44, - 0x91, 0xf8, 0x64, 0x1b, 0x0e, 0x07, 0x3f, 0xf5, 0x63, 0xaf, 0xd5, 0xe5, - 0x01, 0x46, 0x39, 0xe6, 0x51, 0x1c, 0xc9, 0xb2, 0x08, 0xeb, 0x01, 0x00, - 0x90, 0xf8, 0xe8, 0x0c, 0x0b, 0xeb, 0x00, 0x04, 0x94, 0xf8, 0x64, 0x4b, - 0xe5, 0x06, 0x52, 0xd4, 0x48, 0x28, 0x7f, 0xf4, 0xc5, 0xad, 0x02, 0x32, - 0xd2, 0xb2, 0x08, 0xeb, 0x02, 0x01, 0x91, 0xf8, 0xe8, 0x0c, 0x00, 0xf0, - 0xef, 0x00, 0x43, 0x28, 0x7f, 0xf4, 0xba, 0xad, 0x44, 0xe7, 0x94, 0x1c, - 0xe4, 0xb2, 0x08, 0xeb, 0x04, 0x00, 0x90, 0xf8, 0xe8, 0x0c, 0x0b, 0xeb, - 0x00, 0x05, 0x95, 0xf9, 0x64, 0x5b, 0x00, 0x2d, 0x37, 0xda, 0xa0, 0xf1, - 0x52, 0x01, 0x01, 0x29, 0x7d, 0xd9, 0x44, 0x28, 0x7b, 0xd0, 0x4c, 0x28, - 0x00, 0xf0, 0x89, 0x80, 0x46, 0x28, 0x7f, 0xf4, 0xa1, 0xad, 0xd1, 0x1c, - 0x58, 0xfa, 0x81, 0xf1, 0x91, 0xf8, 0xe8, 0x1c, 0x55, 0x29, 0x7f, 0xf4, - 0x99, 0xad, 0x04, 0x32, 0xd2, 0xb2, 0x08, 0xeb, 0x02, 0x01, 0x91, 0xf8, - 0xe8, 0x0c, 0x4c, 0x28, 0x3f, 0xf4, 0x1c, 0xaf, 0x8e, 0xe5, 0x01, 0x32, - 0xd2, 0xb2, 0x08, 0xeb, 0x02, 0x01, 0x91, 0xf8, 0xe8, 0x1c, 0x59, 0x44, - 0x91, 0xf8, 0x64, 0x1b, 0x4c, 0x07, 0x3f, 0xf5, 0x0f, 0xaf, 0x81, 0xe5, - 0x01, 0x32, 0xd2, 0xb2, 0x08, 0xeb, 0x02, 0x01, 0x91, 0xf8, 0xe8, 0x1c, - 0x59, 0x44, 0x91, 0xf8, 0x64, 0x1b, 0x88, 0x06, 0x3f, 0xf5, 0x02, 0xaf, - 0x74, 0xe5, 0x0a, 0x46, 0xfe, 0xe6, 0x98, 0xf8, 0x1c, 0xa4, 0x0a, 0xf1, - 0x01, 0x0a, 0x5f, 0xfa, 0x8a, 0xfa, 0x88, 0xf8, 0x1c, 0xa4, 0x9a, 0x44, - 0xaa, 0xf5, 0x06, 0x4a, 0x44, 0x1c, 0x1a, 0xf8, 0xd5, 0x1c, 0x01, 0xf0, - 0x7f, 0x02, 0x3d, 0x2a, 0x18, 0xbf, 0xe0, 0xb2, 0x88, 0xf8, 0x18, 0x22, - 0x18, 0xbf, 0x2a, 0x54, 0x0a, 0x06, 0xe6, 0xd5, 0x04, 0x90, 0x25, 0xe5, - 0x01, 0x32, 0xd2, 0xb2, 0x08, 0xeb, 0x02, 0x01, 0x91, 0xf8, 0xe8, 0x0c, - 0x45, 0x28, 0x3f, 0xf4, 0xdb, 0xae, 0x00, 0xf0, 0xef, 0x00, 0x49, 0x28, - 0x7f, 0xf4, 0x4a, 0xad, 0xd4, 0xe6, 0x04, 0x9b, 0x00, 0x9a, 0x02, 0x92, - 0x01, 0x33, 0xdb, 0xb2, 0x09, 0x9a, 0x01, 0x99, 0xd1, 0x54, 0x04, 0x93, - 0x0c, 0xe5, 0x23, 0xf0, 0x7f, 0x01, 0x1d, 0x06, 0x88, 0xf8, 0x18, 0x12, - 0x48, 0xd5, 0x2d, 0x4a, 0x01, 0x9b, 0x59, 0xf8, 0x02, 0x20, 0x41, 0x3b, - 0x52, 0xfa, 0x83, 0xf3, 0x93, 0xf8, 0x84, 0x2c, 0x93, 0xf8, 0xa0, 0x3c, - 0x43, 0xea, 0x02, 0x23, 0x22, 0xe5, 0x22, 0x46, 0xb4, 0xe6, 0x10, 0x46, - 0x41, 0x1c, 0x02, 0x46, 0xc8, 0xb2, 0x08, 0xeb, 0x00, 0x01, 0x91, 0xf8, - 0xe8, 0x1c, 0x59, 0x44, 0x91, 0xf8, 0x64, 0x1b, 0x89, 0x06, 0xf3, 0xd4, - 0xa6, 0xe6, 0x03, 0x32, 0xd2, 0xb2, 0x08, 0xeb, 0x02, 0x01, 0x91, 0xf8, - 0xe8, 0x0c, 0x59, 0x28, 0x3f, 0xf4, 0x9e, 0xae, 0x10, 0xe5, 0x00, 0x20, - 0x88, 0xf8, 0x1c, 0xc4, 0x88, 0xf8, 0x18, 0x62, 0x88, 0xf8, 0x14, 0x61, - 0x0a, 0xb0, 0xbd, 0xe8, 0xf0, 0x8d, 0x04, 0x9b, 0x09, 0x9a, 0x01, 0x33, - 0xdb, 0xb2, 0x1a, 0x44, 0x09, 0x92, 0x88, 0xf8, 0x14, 0x31, 0x09, 0x9b, - 0x9b, 0x22, 0x01, 0x20, 0x88, 0xf8, 0x18, 0x22, 0x1a, 0x70, 0x0a, 0xb0, - 0xbd, 0xe8, 0xf0, 0x8d, 0x88, 0xf8, 0x1c, 0xc4, 0x88, 0xf8, 0x18, 0x02, - 0x88, 0xf8, 0x14, 0x01, 0x00, 0x20, 0x0a, 0xb0, 0xbd, 0xe8, 0xf0, 0x8d, - 0x09, 0x9a, 0x9b, 0x23, 0x53, 0x54, 0x00, 0x9b, 0x88, 0xf8, 0x18, 0x32, - 0x01, 0x20, 0x0a, 0xb0, 0xbd, 0xe8, 0xf0, 0x8d, 0x00, 0x00, 0x00, 0x00, - 0x24, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x30, 0xb5, 0x6a, 0x4b, - 0x59, 0xf8, 0x03, 0x40, 0xd4, 0xf8, 0xe8, 0x0d, 0x06, 0x28, 0x83, 0xb0, - 0x00, 0xf0, 0xa6, 0x80, 0x66, 0x4a, 0x67, 0x4b, 0x59, 0xf8, 0x02, 0x20, - 0xc4, 0xf8, 0x2c, 0x24, 0x59, 0xf8, 0x03, 0x30, 0x9f, 0xed, 0x5f, 0x6a, - 0x93, 0xed, 0x56, 0x7a, 0xd3, 0xed, 0x57, 0x6a, 0xf7, 0xee, 0x00, 0x7a, - 0x77, 0xee, 0xc7, 0x7a, 0x66, 0xee, 0x86, 0x6a, 0x67, 0xee, 0x86, 0x7a, - 0x93, 0xed, 0x58, 0x7a, 0xfc, 0xee, 0xe7, 0x7a, 0x27, 0xee, 0x06, 0x7a, - 0x17, 0xee, 0x90, 0x2a, 0xfc, 0xee, 0xe6, 0x7a, 0x1a, 0x70, 0x17, 0xee, - 0x90, 0xca, 0xfc, 0xee, 0xc7, 0x7a, 0x7f, 0x21, 0x17, 0xee, 0x90, 0x2a, - 0x59, 0x70, 0x83, 0xf8, 0x02, 0xc0, 0xda, 0x70, 0x04, 0xf6, 0xec, 0x51, - 0x51, 0x4b, 0x01, 0xeb, 0x00, 0x21, 0x59, 0xf8, 0x03, 0x30, 0x01, 0x91, - 0x08, 0x46, 0x98, 0x47, 0xfe, 0x28, 0x05, 0x46, 0xa8, 0xbf, 0xfe, 0x25, - 0x00, 0x28, 0x01, 0x99, 0x09, 0xd0, 0x4b, 0x4b, 0xc8, 0xbf, 0x2a, 0x46, - 0x59, 0xf8, 0x03, 0x30, 0xd8, 0xbf, 0x01, 0x22, 0x04, 0xf1, 0x0c, 0x00, - 0x98, 0x47, 0x25, 0x44, 0x00, 0x23, 0x2b, 0x73, 0xff, 0xf7, 0x24, 0xfa, - 0x20, 0x23, 0x84, 0xf8, 0x17, 0x32, 0xfc, 0xf7, 0xb5, 0xfb, 0x38, 0xb9, - 0x41, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x00, 0x22, 0xc3, 0xf8, 0xf4, 0x23, - 0x03, 0xb0, 0x30, 0xbd, 0xfc, 0xf7, 0xc4, 0xfd, 0xfc, 0xf7, 0x38, 0xfb, - 0x94, 0xf8, 0x18, 0x31, 0xff, 0x2b, 0x16, 0xd0, 0x3a, 0x4a, 0x59, 0xf8, - 0x02, 0x20, 0x04, 0xf5, 0x47, 0x71, 0x04, 0xf5, 0x07, 0x7c, 0x04, 0xf5, - 0x8c, 0x70, 0x02, 0xeb, 0x03, 0x0e, 0x11, 0xf9, 0x01, 0x3b, 0x00, 0x2b, - 0x10, 0xf8, 0x01, 0x3f, 0x26, 0xdd, 0x9e, 0xf8, 0x9c, 0x51, 0x0c, 0xf8, - 0x01, 0x5b, 0xff, 0x2b, 0xf1, 0xd1, 0xfd, 0xf7, 0x3b, 0xfa, 0xfc, 0xf7, - 0x69, 0xfc, 0x94, 0xf8, 0x14, 0x21, 0x00, 0x20, 0x04, 0xe0, 0x11, 0xf0, - 0xff, 0x02, 0x4f, 0xf0, 0x01, 0x00, 0x1a, 0xd0, 0xa3, 0x18, 0x51, 0x1c, - 0x93, 0xf8, 0x18, 0x31, 0x50, 0x2b, 0xf4, 0xd9, 0x84, 0xf8, 0x18, 0x32, - 0x08, 0xb1, 0x84, 0xf8, 0x14, 0x21, 0x22, 0x44, 0xff, 0x23, 0x82, 0xf8, - 0x18, 0x31, 0xfc, 0xf7, 0x4d, 0xfa, 0xfe, 0xf7, 0x47, 0xfe, 0xb7, 0xe7, - 0x9e, 0xf8, 0x4c, 0x51, 0x0c, 0xf8, 0x01, 0x5b, 0xff, 0x2b, 0xca, 0xd1, - 0xd7, 0xe7, 0x84, 0xf8, 0x18, 0x32, 0x84, 0xf8, 0x14, 0x21, 0xee, 0xe7, - 0x19, 0x4b, 0x59, 0xf8, 0x03, 0x30, 0x98, 0x47, 0x0f, 0x4a, 0x82, 0xfb, - 0x00, 0x32, 0xc3, 0x17, 0xc3, 0xeb, 0xa2, 0x03, 0x15, 0x4a, 0x03, 0xeb, - 0x83, 0x03, 0x59, 0xf8, 0x02, 0x10, 0xa0, 0xeb, 0x43, 0x02, 0x13, 0x4b, - 0x04, 0xf6, 0xec, 0x55, 0x59, 0xf8, 0x03, 0x30, 0x05, 0xf5, 0xc0, 0x60, - 0x98, 0x47, 0xd4, 0xf8, 0xe8, 0x0d, 0x05, 0xeb, 0x00, 0x20, 0xff, 0xf7, - 0x6d, 0xfb, 0xd4, 0xf8, 0xe8, 0x0d, 0x37, 0xe7, 0x00, 0x00, 0x7f, 0x43, - 0x67, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, - 0xd4, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, - 0xdc, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4d, - 0x30, 0x4a, 0x31, 0x4b, 0x59, 0xf8, 0x02, 0x70, 0x59, 0xf8, 0x03, 0x00, - 0x2f, 0x4b, 0x9f, 0xed, 0x2c, 0x0a, 0x59, 0xf8, 0x03, 0x40, 0x84, 0xb0, - 0xf7, 0xee, 0x00, 0x0a, 0x07, 0xf5, 0xac, 0x71, 0xa0, 0x47, 0x2b, 0x49, - 0x2b, 0x4b, 0x2c, 0x4a, 0x59, 0xf8, 0x01, 0x50, 0x59, 0xf8, 0x03, 0x60, - 0x2a, 0x4b, 0x59, 0xf8, 0x02, 0x00, 0x00, 0x96, 0x00, 0x22, 0x59, 0xf8, - 0x03, 0x80, 0x05, 0xf6, 0xe8, 0x51, 0x06, 0x23, 0xc0, 0x47, 0x26, 0x4b, - 0x9f, 0xed, 0x1d, 0x0a, 0x59, 0xf8, 0x03, 0x00, 0x07, 0xf5, 0xae, 0x71, - 0xf7, 0xee, 0x00, 0x0a, 0xa0, 0x47, 0x22, 0x4b, 0x9f, 0xed, 0x18, 0x0a, - 0x59, 0xf8, 0x03, 0x00, 0x07, 0xf5, 0xb0, 0x71, 0xf7, 0xee, 0x00, 0x0a, - 0xa0, 0x47, 0x1e, 0x4b, 0x1e, 0x4a, 0x59, 0xf8, 0x03, 0x30, 0x59, 0xf8, - 0x02, 0xb0, 0x03, 0x93, 0x05, 0xf6, 0xec, 0x55, 0x4f, 0xf0, 0x00, 0x0a, - 0xa8, 0x46, 0x5b, 0x27, 0x56, 0xf8, 0x04, 0x1b, 0x02, 0x91, 0x08, 0x46, - 0xd8, 0x47, 0x04, 0x46, 0x04, 0xeb, 0x0a, 0x24, 0x02, 0x46, 0x02, 0x99, - 0x03, 0x9b, 0x28, 0x46, 0x98, 0x47, 0x0a, 0xf1, 0x01, 0x0a, 0x28, 0x46, - 0x28, 0xf8, 0x04, 0x70, 0xff, 0xf7, 0xf8, 0xfa, 0xba, 0xf1, 0x07, 0x0f, - 0x05, 0xf5, 0x80, 0x75, 0xe6, 0xd1, 0x04, 0xb0, 0xbd, 0xe8, 0xf0, 0x8d, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, - 0xec, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, - 0xf4, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x70, 0xb5, 0x68, 0x4a, 0x68, 0x4b, 0x59, 0xf8, 0x02, 0x10, 0x59, 0xf8, - 0x03, 0x20, 0x0b, 0x68, 0x14, 0x68, 0x1b, 0x78, 0x00, 0x2b, 0x40, 0xf0, - 0xbe, 0x80, 0x64, 0x4a, 0x64, 0x4b, 0x59, 0xf8, 0x02, 0x20, 0x59, 0xf8, - 0x03, 0x30, 0xd2, 0xf8, 0xf4, 0x03, 0x5b, 0x68, 0x00, 0xf1, 0x0c, 0x01, - 0x99, 0x42, 0x80, 0xf0, 0xa7, 0x80, 0x5f, 0x4b, 0x9f, 0xed, 0x58, 0x7a, - 0x59, 0xf8, 0x03, 0x50, 0xdf, 0xed, 0x57, 0x7a, 0x2b, 0x18, 0x28, 0x5c, - 0x01, 0xee, 0x90, 0x0a, 0x58, 0x78, 0x02, 0xee, 0x10, 0x0a, 0x98, 0x78, - 0x02, 0xee, 0x90, 0x0a, 0xd8, 0x78, 0x03, 0xee, 0x10, 0x0a, 0x18, 0x79, - 0x03, 0xee, 0x90, 0x0a, 0x58, 0x79, 0x04, 0xee, 0x10, 0x0a, 0x98, 0x79, - 0x04, 0xee, 0x90, 0x0a, 0xd8, 0x79, 0x05, 0xee, 0x10, 0x0a, 0x18, 0x7a, - 0x05, 0xee, 0x90, 0x0a, 0x58, 0x7a, 0x06, 0xee, 0x90, 0x0a, 0x98, 0x7a, - 0x06, 0xee, 0x10, 0x0a, 0xf8, 0xee, 0x61, 0x1a, 0xb8, 0xee, 0x42, 0x2a, - 0xf8, 0xee, 0x62, 0x2a, 0xb8, 0xee, 0x43, 0x3a, 0xf8, 0xee, 0x63, 0x3a, - 0xb8, 0xee, 0x44, 0x4a, 0xf8, 0xee, 0x64, 0x4a, 0xb8, 0xee, 0x45, 0x5a, - 0xf8, 0xee, 0x65, 0x5a, 0xf8, 0xee, 0x66, 0x6a, 0xb8, 0xee, 0x46, 0x6a, - 0x71, 0xee, 0xc7, 0x1a, 0x32, 0xee, 0x47, 0x2a, 0x72, 0xee, 0xc7, 0x2a, - 0x33, 0xee, 0x47, 0x3a, 0x73, 0xee, 0xc7, 0x3a, 0x34, 0xee, 0x47, 0x4a, - 0x74, 0xee, 0xc7, 0x4a, 0x35, 0xee, 0x47, 0x5a, 0x75, 0xee, 0xc7, 0x5a, - 0x76, 0xee, 0xc7, 0x6a, 0x36, 0xee, 0x47, 0x6a, 0x66, 0xee, 0xa7, 0x6a, - 0x61, 0xee, 0xa7, 0x1a, 0x22, 0xee, 0x27, 0x2a, 0x62, 0xee, 0xa7, 0x2a, - 0x23, 0xee, 0x27, 0x3a, 0x63, 0xee, 0xa7, 0x3a, 0x24, 0xee, 0x27, 0x4a, - 0x64, 0xee, 0xa7, 0x4a, 0x25, 0xee, 0x27, 0x5a, 0x65, 0xee, 0xa7, 0x5a, - 0x26, 0xee, 0x27, 0x6a, 0xc4, 0xed, 0x13, 0x6a, 0xc4, 0xed, 0x12, 0x6a, - 0xc4, 0xed, 0x01, 0x1a, 0xc4, 0xed, 0x00, 0x1a, 0x84, 0xed, 0x03, 0x2a, - 0x84, 0xed, 0x02, 0x2a, 0xc4, 0xed, 0x05, 0x2a, 0xc4, 0xed, 0x04, 0x2a, - 0x84, 0xed, 0x07, 0x3a, 0x84, 0xed, 0x06, 0x3a, 0xc4, 0xed, 0x09, 0x3a, - 0xc4, 0xed, 0x08, 0x3a, 0x84, 0xed, 0x0b, 0x4a, 0x84, 0xed, 0x0a, 0x4a, - 0xc4, 0xed, 0x0d, 0x4a, 0xc4, 0xed, 0x0c, 0x4a, 0x84, 0xed, 0x0f, 0x5a, - 0x84, 0xed, 0x0e, 0x5a, 0xc4, 0xed, 0x11, 0x5a, 0xc4, 0xed, 0x10, 0x5a, - 0x84, 0xed, 0x15, 0x6a, 0xdb, 0x7a, 0x84, 0xed, 0x14, 0x6a, 0x06, 0xee, - 0x90, 0x3a, 0xf8, 0xee, 0x66, 0x6a, 0xc2, 0xf8, 0xf4, 0x13, 0x36, 0xee, - 0xc7, 0x7a, 0x67, 0xee, 0x27, 0x7a, 0xc4, 0xed, 0x17, 0x7a, 0xc4, 0xed, - 0x16, 0x7a, 0x70, 0xbd, 0x0c, 0x4b, 0x20, 0x46, 0x59, 0xf8, 0x03, 0x30, - 0xbd, 0xe8, 0x70, 0x40, 0x60, 0x22, 0x00, 0x21, 0x18, 0x47, 0xff, 0xf7, - 0xcf, 0xfd, 0x3e, 0xe7, 0x00, 0x00, 0xfe, 0x42, 0x00, 0x00, 0x00, 0x3c, - 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, - 0x70, 0xb5, 0x10, 0x4a, 0x10, 0x4b, 0x59, 0xf8, 0x02, 0x60, 0x59, 0xf8, - 0x03, 0x50, 0x76, 0x1b, 0xb6, 0x10, 0x06, 0xd0, 0x00, 0x24, 0x55, 0xf8, - 0x04, 0x3b, 0x01, 0x34, 0x98, 0x47, 0xa6, 0x42, 0xf9, 0xd1, 0x0a, 0x4a, - 0x0a, 0x4b, 0x59, 0xf8, 0x02, 0x60, 0x59, 0xf8, 0x03, 0x50, 0x76, 0x1b, - 0xb6, 0x10, 0x06, 0xd0, 0x00, 0x24, 0x55, 0xf8, 0x04, 0x3b, 0x01, 0x34, - 0x98, 0x47, 0xa6, 0x42, 0xf9, 0xd1, 0x70, 0xbd, 0x00, 0x01, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00, - 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, - 0x00, 0x90, 0x02, 0xbc, 0xfb, 0xf7, 0xc6, 0xff, 0xbd, 0xe8, 0x00, 0x82, - 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, - 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0x66, 0xfe, - 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, 0x2d, 0xe9, 0x00, 0x42, - 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, 0x00, 0x90, 0x02, 0xbc, - 0xff, 0xf7, 0xd2, 0xfe, 0xbd, 0xe8, 0x00, 0x82, 0x00, 0x00, 0x00, 0x20, - 0x2d, 0xe9, 0x00, 0x42, 0x02, 0xb4, 0xdf, 0xf8, 0x10, 0x10, 0xd1, 0xf8, - 0x00, 0x90, 0x02, 0xbc, 0xff, 0xf7, 0xa2, 0xff, 0xbd, 0xe8, 0x00, 0x82, - 0x00, 0x00, 0x00, 0x20, 0x48, 0x40, 0x80, 0x80, 0xa2, 0x00, 0x00, 0x00, - 0xa7, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe1, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, - 0x00, 0x13, 0x13, 0x13, 0x13, 0x0a, 0x0e, 0x12, 0x18, 0x1a, 0x16, 0x14, - 0x10, 0x14, 0x0e, 0x12, 0x0e, 0x12, 0x12, 0x10, 0x0c, 0x0e, 0x0a, 0x12, - 0x0e, 0x0a, 0x08, 0x06, 0x06, 0x06, 0x06, 0x11, 0x06, 0x06, 0x06, 0x06, - 0x0e, 0x10, 0x09, 0x0a, 0x08, 0x0a, 0x06, 0x06, 0x06, 0x05, 0x06, 0x00, - 0x12, 0x1a, 0x14, 0x1a, 0x12, 0x0c, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x0a, 0x0a, 0x06, 0x06, 0x06, 0x2c, 0x13, 0x00, 0x43, 0x43, 0x43, - 0x43, 0x54, 0x48, 0x42, 0x3e, 0x28, 0x2c, 0x1e, 0x24, 0x2c, 0x48, 0x30, - 0x24, 0x1e, 0x32, 0x24, 0x1c, 0x44, 0x18, 0x32, 0x1e, 0x18, 0x52, 0x2e, - 0x36, 0x56, 0x36, 0x43, 0x49, 0x4f, 0x1a, 0x42, 0x49, 0x25, 0x33, 0x42, - 0x28, 0x2f, 0x4f, 0x4f, 0x42, 0x4f, 0x6e, 0x00, 0x48, 0x26, 0x1e, 0x2a, - 0x1e, 0x22, 0x1a, 0x1a, 0x1a, 0x42, 0x42, 0x42, 0x6e, 0x6e, 0x6e, 0x54, - 0x54, 0x54, 0x1a, 0x1a, 0x1a, 0x42, 0x42, 0x42, 0x6d, 0x56, 0x6d, 0x54, - 0x54, 0x54, 0x7f, 0x7f, 0x00, 0x5b, 0x5b, 0x5b, 0x5b, 0x6e, 0x5d, 0x5b, - 0x58, 0x59, 0x57, 0x58, 0x52, 0x59, 0x5d, 0x3e, 0x52, 0x58, 0x3e, 0x6e, - 0x50, 0x5d, 0x5a, 0x3c, 0x6e, 0x5a, 0x6e, 0x51, 0x79, 0x65, 0x79, 0x5b, - 0x63, 0x6a, 0x51, 0x79, 0x5d, 0x52, 0x5d, 0x67, 0x4c, 0x5d, 0x65, 0x65, - 0x79, 0x65, 0x79, 0x00, 0x5a, 0x58, 0x58, 0x58, 0x58, 0x52, 0x51, 0x51, - 0x51, 0x79, 0x79, 0x79, 0x70, 0x6e, 0x6e, 0x5e, 0x5e, 0x5e, 0x51, 0x51, - 0x51, 0x79, 0x79, 0x79, 0x65, 0x65, 0x70, 0x5e, 0x5e, 0x5e, 0x08, 0x01, - 0x00, 0x00, 0x40, 0x3f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3f, - 0x06, 0x07, 0x00, 0x00, 0xfc, 0x65, 0x00, 0x00, 0x04, 0x66, 0x00, 0x00, - 0x0c, 0x66, 0x00, 0x00, 0x14, 0x66, 0x00, 0x00, 0x20, 0x66, 0x00, 0x00, - 0x2c, 0x66, 0x00, 0x00, 0x38, 0x66, 0x00, 0x00, 0x80, 0xc1, 0xc1, 0xc1, - 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x08, - 0x0c, 0x08, 0x04, 0x40, 0x24, 0x20, 0x20, 0x24, 0x00, 0x00, 0x24, 0x20, - 0x20, 0x24, 0x20, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0xa4, 0xa4, - 0xa4, 0xa4, 0xa4, 0x84, 0x84, 0xa4, 0xa4, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x44, 0x44, 0x44, 0x44, 0x44, 0x4c, 0x4c, 0x4c, 0x48, 0x4c, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x44, 0x44, 0x44, 0x44, 0x48, 0x40, - 0x4c, 0x44, 0x00, 0x00, 0xb4, 0xb4, 0xb4, 0x94, 0x94, 0x94, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4b, 0x4b, - 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x80, 0xc1, - 0xc1, 0x00, 0x00, 0x00, 0x20, 0x2e, 0x3f, 0x2c, 0x2d, 0x49, 0x49, 0x45, - 0x41, 0x41, 0x41, 0x41, 0x55, 0x41, 0x49, 0x45, 0x55, 0x4f, 0x52, 0x4c, - 0x57, 0x59, 0x57, 0x52, 0x4c, 0x57, 0x59, 0x4d, 0x4e, 0x4e, 0x44, 0x51, - 0x53, 0x53, 0x46, 0x54, 0x2f, 0x2f, 0x5a, 0x5a, 0x56, 0x44, 0x43, 0x2a, - 0x4a, 0x2a, 0x2a, 0x2a, 0x45, 0x41, 0x4f, 0x41, 0x4f, 0x55, 0x42, 0x2a, - 0x2a, 0x44, 0x2a, 0x2a, 0x47, 0x2a, 0x2a, 0x47, 0x2a, 0x2a, 0x50, 0x2a, - 0x2a, 0x54, 0x2a, 0x2a, 0x4b, 0x2a, 0x2a, 0x4b, 0x2a, 0x2a, 0x55, 0x55, - 0x55, 0x00, 0x00, 0x00, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x59, 0x48, 0x48, - 0x45, 0x41, 0x48, 0x4f, 0x48, 0x58, 0x58, 0x52, 0x58, 0x48, 0x58, 0x58, - 0x58, 0x58, 0x48, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x58, 0x58, 0x2a, - 0x2a, 0x48, 0x2a, 0x48, 0x48, 0x58, 0x2a, 0x48, 0x2a, 0x48, 0x48, 0x2a, - 0x2a, 0x2a, 0x2a, 0x2a, 0x59, 0x59, 0x59, 0x57, 0x57, 0x57, 0x2a, 0x2a, - 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x58, 0x2a, 0x2a, 0x2a, 0x2a, - 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x58, 0x2a, 0x2a, 0x4c, 0x4d, - 0x4e, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x12, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x0b, 0x06, 0x0c, 0x0a, 0x05, 0x05, 0x0b, 0x0a, 0x0a, 0x0a, 0x09, - 0x08, 0x07, 0x09, 0x07, 0x06, 0x08, 0x06, 0x07, 0x07, 0x07, 0x02, 0x05, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x06, 0x07, 0x06, 0x06, 0x02, - 0x08, 0x03, 0x01, 0x1e, 0x0d, 0x0c, 0x0c, 0x0c, 0x0e, 0x09, 0x06, 0x01, - 0x02, 0x05, 0x01, 0x01, 0x06, 0x01, 0x02, 0x06, 0x01, 0x02, 0x08, 0x02, - 0x02, 0x04, 0x02, 0x02, 0x06, 0x01, 0x04, 0x06, 0x01, 0x04, 0xc7, 0xff, - 0x00, 0x12, 0x12, 0x12, 0x08, 0x0b, 0x09, 0x0b, 0x0e, 0x0f, 0x0b, 0x10, - 0x0c, 0x06, 0x06, 0x0e, 0x0c, 0x0e, 0x0c, 0x0b, 0x08, 0x08, 0x0b, 0x0a, - 0x09, 0x08, 0x08, 0x08, 0x08, 0x08, 0x03, 0x05, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x06, 0x06, 0x08, 0x06, 0x06, 0x02, 0x09, 0x04, 0x02, 0x01, - 0x0e, 0x0f, 0x0f, 0x0f, 0x0e, 0x0e, 0x08, 0x02, 0x02, 0x07, 0x02, 0x01, - 0x07, 0x02, 0x02, 0x07, 0x02, 0x02, 0x08, 0x02, 0x02, 0x06, 0x02, 0x02, - 0x07, 0x02, 0x04, 0x07, 0x01, 0x04, 0x05, 0x05, 0x18, 0x1a, 0x17, 0x17, - 0x17, 0x00, 0x00, 0x00, 0x38, 0x84, 0x6b, 0x19, 0xc6, 0x63, 0x18, 0x86, - 0x73, 0x98, 0xc6, 0xb1, 0x1c, 0xca, 0x31, 0x8c, 0xc7, 0x31, 0x88, 0xc2, - 0x30, 0x98, 0x46, 0x31, 0x18, 0xc6, 0x35, 0x0c, 0xca, 0x31, 0x0c, 0xc6, - 0x21, 0x10, 0x24, 0x69, 0x12, 0xc2, 0x31, 0x14, 0xc4, 0x71, 0x08, 0x4a, - 0x22, 0x49, 0xab, 0x6a, 0xa8, 0xac, 0x49, 0x51, 0x32, 0xd5, 0x52, 0x88, - 0x93, 0x6c, 0x94, 0x22, 0x15, 0x54, 0xd2, 0x25, 0x96, 0xd4, 0x50, 0xa5, - 0x46, 0x21, 0x08, 0x85, 0x6b, 0x18, 0xc4, 0x63, 0x10, 0xce, 0x6b, 0x18, - 0x8c, 0x71, 0x19, 0x8c, 0x63, 0x35, 0x0c, 0xc6, 0x33, 0x99, 0xcc, 0x6c, - 0xb5, 0x4e, 0xa2, 0x99, 0x46, 0x21, 0x28, 0x82, 0x95, 0x2e, 0xe3, 0x30, - 0x9c, 0xc5, 0x30, 0x9c, 0xa2, 0xb1, 0x9c, 0x67, 0x31, 0x88, 0x66, 0x59, - 0x2c, 0x53, 0x18, 0x84, 0x67, 0x50, 0xca, 0xe3, 0x0a, 0xac, 0xab, 0x30, - 0xac, 0x62, 0x30, 0x8c, 0x63, 0x10, 0x94, 0x62, 0xb1, 0x8c, 0x82, 0x28, - 0x96, 0x33, 0x98, 0xd6, 0xb5, 0x4c, 0x62, 0x29, 0xa5, 0x4a, 0xb5, 0x9c, - 0xc6, 0x31, 0x14, 0xd6, 0x38, 0x9c, 0x4b, 0xb4, 0x86, 0x65, 0x18, 0xae, - 0x67, 0x1c, 0xa6, 0x63, 0x19, 0x96, 0x23, 0x19, 0x84, 0x13, 0x08, 0xa6, - 0x52, 0xac, 0xca, 0x22, 0x89, 0x6e, 0xab, 0x19, 0x8c, 0x62, 0x34, 0xc4, - 0x62, 0x19, 0x86, 0x63, 0x18, 0xc4, 0x23, 0x58, 0xd6, 0xa3, 0x50, 0x42, - 0x54, 0x4a, 0xad, 0x4a, 0x25, 0x11, 0x6b, 0x64, 0x89, 0x4a, 0x63, 0x39, - 0x8a, 0x23, 0x31, 0x2a, 0xea, 0xa2, 0xa9, 0x44, 0xc5, 0x12, 0xcd, 0x42, - 0x34, 0x8c, 0x62, 0x18, 0x8c, 0x63, 0x11, 0x48, 0x66, 0x31, 0x9d, 0x44, - 0x33, 0x1d, 0x46, 0x31, 0x9c, 0xc6, 0xb1, 0x0c, 0xcd, 0x32, 0x88, 0xc4, - 0x73, 0x18, 0x86, 0x73, 0x08, 0xd6, 0x63, 0x58, 0x07, 0x81, 0xe0, 0xf0, - 0x3c, 0x07, 0x87, 0x90, 0x3c, 0x7c, 0x0f, 0xc7, 0xc0, 0xc0, 0xf0, 0x7c, - 0x1e, 0x07, 0x80, 0x80, 0x00, 0x1c, 0x78, 0x70, 0xf1, 0xc7, 0x1f, 0xc0, - 0x0c, 0xfe, 0x1c, 0x1f, 0x1f, 0x0e, 0x0a, 0x7a, 0xc0, 0x71, 0xf2, 0x83, - 0x8f, 0x03, 0x0f, 0x0f, 0x0c, 0x00, 0x79, 0xf8, 0x61, 0xe0, 0x43, 0x0f, - 0x83, 0xe7, 0x18, 0xf9, 0xc1, 0x13, 0xda, 0xe9, 0x63, 0x8f, 0x0f, 0x83, - 0x83, 0x87, 0xc3, 0x1f, 0x3c, 0x70, 0xf0, 0xe1, 0xe1, 0xe3, 0x87, 0xb8, - 0x71, 0x0e, 0x20, 0xe3, 0x8d, 0x48, 0x78, 0x1c, 0x93, 0x87, 0x30, 0xe1, - 0xc1, 0xc1, 0xe4, 0x78, 0x21, 0x83, 0x83, 0xc3, 0x87, 0x06, 0x39, 0xe5, - 0xc3, 0x87, 0x07, 0x0e, 0x1c, 0x1c, 0x70, 0xf4, 0x71, 0x9c, 0x60, 0x36, - 0x32, 0xc3, 0x1e, 0x3c, 0xf3, 0x8f, 0x0e, 0x3c, 0x70, 0xe3, 0xc7, 0x8f, - 0x0f, 0x0f, 0x0e, 0x3c, 0x78, 0xf0, 0xe3, 0x87, 0x06, 0xf0, 0xe3, 0x07, - 0xc1, 0x99, 0x87, 0x0f, 0x18, 0x78, 0x70, 0x70, 0xfc, 0xf3, 0x10, 0xb1, - 0x8c, 0x8c, 0x31, 0x7c, 0x70, 0xe1, 0x86, 0x3c, 0x64, 0x6c, 0xb0, 0xe1, - 0xe3, 0x0f, 0x23, 0x8f, 0x0f, 0x1e, 0x3e, 0x38, 0x3c, 0x38, 0x7b, 0x8f, - 0x07, 0x0e, 0x3c, 0xf4, 0x17, 0x1e, 0x3c, 0x78, 0xf2, 0x9e, 0x72, 0x49, - 0xe3, 0x25, 0x36, 0x38, 0x58, 0x39, 0xe2, 0xde, 0x3c, 0x78, 0x78, 0xe1, - 0xc7, 0x61, 0xe1, 0xe1, 0xb0, 0xf0, 0xf0, 0xc3, 0xc7, 0x0e, 0x38, 0xc0, - 0xf0, 0xce, 0x73, 0x73, 0x18, 0x34, 0xb0, 0xe1, 0xc7, 0x8e, 0x1c, 0x3c, - 0xf8, 0x38, 0xf0, 0xe1, 0xc1, 0x8b, 0x86, 0x8f, 0x1c, 0x78, 0x70, 0xf0, - 0x78, 0xac, 0xb1, 0x8f, 0x39, 0x31, 0xdb, 0x38, 0x61, 0xc3, 0x0e, 0x0e, - 0x38, 0x78, 0x73, 0x17, 0x1e, 0x39, 0x1e, 0x38, 0x64, 0xe1, 0xf1, 0xc1, - 0x4e, 0x0f, 0x40, 0xa2, 0x02, 0xc5, 0x8f, 0x81, 0xa1, 0xfc, 0x12, 0x08, - 0x64, 0xe0, 0x3c, 0x22, 0xe0, 0x45, 0x07, 0x8e, 0x0c, 0x32, 0x90, 0xf0, - 0x1f, 0x20, 0x49, 0xe0, 0xf8, 0x0c, 0x60, 0xf0, 0x17, 0x1a, 0x41, 0xaa, - 0xa4, 0xd0, 0x8d, 0x12, 0x82, 0x1e, 0x1e, 0x03, 0xf8, 0x3e, 0x03, 0x0c, - 0x73, 0x80, 0x70, 0x44, 0x26, 0x03, 0x24, 0xe1, 0x3e, 0x04, 0x4e, 0x04, - 0x1c, 0xc1, 0x09, 0xcc, 0x9e, 0x90, 0x21, 0x07, 0x90, 0x43, 0x64, 0xc0, - 0x0f, 0xc6, 0x90, 0x9c, 0xc1, 0x5b, 0x03, 0xe2, 0x1d, 0x81, 0xe0, 0x5e, - 0x1d, 0x03, 0x84, 0xb8, 0x2c, 0x0f, 0x80, 0xb1, 0x83, 0xe0, 0x30, 0x41, - 0x1e, 0x43, 0x89, 0x83, 0x50, 0xfc, 0x24, 0x2e, 0x13, 0x83, 0xf1, 0x7c, - 0x4c, 0x2c, 0xc9, 0x0d, 0x83, 0xb0, 0xb5, 0x82, 0xe4, 0xe8, 0x06, 0x9c, - 0x07, 0xa0, 0x99, 0x1d, 0x07, 0x3e, 0x82, 0x8f, 0x70, 0x30, 0x74, 0x40, - 0xca, 0x10, 0xe4, 0xe8, 0x0f, 0x92, 0x14, 0x3f, 0x06, 0xf8, 0x84, 0x88, - 0x43, 0x81, 0x0a, 0x34, 0x39, 0x41, 0xc6, 0xe3, 0x1c, 0x47, 0x03, 0xb0, - 0xb8, 0x13, 0x0a, 0xc2, 0x64, 0xf8, 0x18, 0xf9, 0x60, 0xb3, 0xc0, 0x65, - 0x20, 0x60, 0xa6, 0x8c, 0xc3, 0x81, 0x20, 0x30, 0x26, 0x1e, 0x1c, 0x38, - 0xd3, 0x01, 0xb0, 0x26, 0x40, 0xf4, 0x0b, 0xc3, 0x42, 0x1f, 0x85, 0x32, - 0x26, 0x60, 0x40, 0xc9, 0xcb, 0x01, 0xec, 0x11, 0x28, 0x40, 0xfa, 0x04, - 0x34, 0xe0, 0x70, 0x4c, 0x8c, 0x1d, 0x07, 0x69, 0x03, 0x16, 0xc8, 0x04, - 0x23, 0xe8, 0xc6, 0x9a, 0x0b, 0x1a, 0x03, 0xe0, 0x76, 0x06, 0x05, 0xcf, - 0x1e, 0xbc, 0x58, 0x31, 0x71, 0x66, 0x00, 0xf8, 0x3f, 0x04, 0xfc, 0x0c, - 0x74, 0x27, 0x8a, 0x80, 0x71, 0xc2, 0x3a, 0x26, 0x06, 0xc0, 0x1f, 0x05, - 0x0f, 0x98, 0x40, 0xae, 0x01, 0x7f, 0xc0, 0x07, 0xff, 0x00, 0x0e, 0xfe, - 0x00, 0x03, 0xdf, 0x80, 0x03, 0xef, 0x80, 0x1b, 0xf1, 0xc2, 0x00, 0xe7, - 0xe0, 0x18, 0xfc, 0xe0, 0x21, 0xfc, 0x80, 0x3c, 0xfc, 0x40, 0x0e, 0x7e, - 0x00, 0x3f, 0x3e, 0x00, 0x0f, 0xfe, 0x00, 0x1f, 0xff, 0x00, 0x3e, 0xf0, - 0x07, 0xfc, 0x00, 0x7e, 0x10, 0x3f, 0xff, 0x00, 0x3f, 0x38, 0x0e, 0x7c, - 0x01, 0x87, 0x0c, 0xfc, 0xc7, 0x00, 0x3e, 0x04, 0x0f, 0x3e, 0x1f, 0x0f, - 0x0f, 0x1f, 0x0f, 0x02, 0x83, 0x87, 0xcf, 0x03, 0x87, 0x0f, 0x3f, 0xc0, - 0x07, 0x9e, 0x60, 0x3f, 0xc0, 0x03, 0xfe, 0x00, 0x3f, 0xe0, 0x77, 0xe1, - 0xc0, 0xfe, 0xe0, 0xc3, 0xe0, 0x01, 0xdf, 0xf8, 0x03, 0x07, 0x00, 0x7e, - 0x70, 0x00, 0x7c, 0x38, 0x18, 0xfe, 0x0c, 0x1e, 0x78, 0x1c, 0x7c, 0x3e, - 0x0e, 0x1f, 0x1e, 0x1e, 0x3e, 0x00, 0x7f, 0x83, 0x07, 0xdb, 0x87, 0x83, - 0x07, 0xc7, 0x07, 0x10, 0x71, 0xff, 0x00, 0x3f, 0xe2, 0x01, 0xe0, 0xc1, - 0xc3, 0xe1, 0x00, 0x7f, 0xc0, 0x05, 0xf0, 0x20, 0xf8, 0xf0, 0x70, 0xfe, - 0x78, 0x79, 0xf8, 0x02, 0x3f, 0x0c, 0x8f, 0x03, 0x0f, 0x9f, 0xe0, 0xc1, - 0xc7, 0x87, 0x03, 0xc3, 0xc3, 0xb0, 0xe1, 0xe1, 0xc1, 0xe3, 0xe0, 0x71, - 0xf0, 0x00, 0xfc, 0x70, 0x7c, 0x0c, 0x3e, 0x38, 0x0e, 0x1c, 0x70, 0xc3, - 0xc7, 0x03, 0x81, 0xc1, 0xc7, 0xe7, 0x00, 0x0f, 0xc7, 0x87, 0x19, 0x09, - 0xef, 0xc4, 0x33, 0xe0, 0xc1, 0xfc, 0xf8, 0x70, 0xf0, 0x78, 0xf8, 0xf0, - 0x61, 0xc7, 0x00, 0x1f, 0xf8, 0x01, 0x7c, 0xf8, 0xf0, 0x78, 0x70, 0x3c, - 0x7c, 0xce, 0x0e, 0x21, 0x83, 0xcf, 0x08, 0x07, 0x8f, 0x08, 0xc1, 0x87, - 0x8f, 0x80, 0xc7, 0xe3, 0x00, 0x07, 0xf8, 0xe0, 0xef, 0x00, 0x39, 0xf7, - 0x80, 0x0e, 0xf8, 0xe1, 0xe3, 0xf8, 0x21, 0x9f, 0xc0, 0xff, 0x03, 0xf8, - 0x07, 0xc0, 0x1f, 0xf8, 0xc4, 0x04, 0xfc, 0xc4, 0xc1, 0xbc, 0x87, 0xf0, - 0x0f, 0xc0, 0x7f, 0x05, 0xe0, 0x25, 0xec, 0xc0, 0x3e, 0x84, 0x47, 0xf0, - 0x8e, 0x03, 0xf8, 0x03, 0xfb, 0xc0, 0x19, 0xf8, 0x07, 0x9c, 0x0c, 0x17, - 0xf8, 0x07, 0xe0, 0x1f, 0xa1, 0xfc, 0x0f, 0xfc, 0x01, 0xf0, 0x3f, 0x00, - 0xfe, 0x03, 0xf0, 0x1f, 0x00, 0xfd, 0x00, 0xff, 0x88, 0x0d, 0xf9, 0x01, - 0xff, 0x00, 0x70, 0x07, 0xc0, 0x3e, 0x42, 0xf3, 0x0d, 0xc4, 0x7f, 0x80, - 0xfc, 0x07, 0xf0, 0x5e, 0xc0, 0x3f, 0x00, 0x78, 0x3f, 0x81, 0xff, 0x01, - 0xf8, 0x01, 0xc3, 0xe8, 0x0c, 0xe4, 0x64, 0x8f, 0xe4, 0x0f, 0xf0, 0x07, - 0xf0, 0xc2, 0x1f, 0x00, 0x7f, 0xc0, 0x6f, 0x80, 0x7e, 0x03, 0xf8, 0x07, - 0xf0, 0x3f, 0xc0, 0x78, 0x0f, 0x82, 0x07, 0xfe, 0x22, 0x77, 0x70, 0x02, - 0x76, 0x03, 0xfe, 0x00, 0xfe, 0x67, 0x00, 0x7c, 0xc7, 0xf1, 0x8e, 0xc6, - 0x3b, 0xe0, 0x3f, 0x84, 0xf3, 0x19, 0xd8, 0x03, 0x99, 0xfc, 0x09, 0xb8, - 0x0f, 0xf8, 0x00, 0x9d, 0x24, 0x61, 0xf9, 0x0d, 0x00, 0xfd, 0x03, 0xf0, - 0x1f, 0x90, 0x3f, 0x01, 0xf8, 0x1f, 0xd0, 0x0f, 0xf8, 0x37, 0x01, 0xf8, - 0x07, 0xf0, 0x0f, 0xc0, 0x3f, 0x00, 0xfe, 0x03, 0xf8, 0x0f, 0xc0, 0x3f, - 0x00, 0xfa, 0x03, 0xf0, 0x0f, 0x80, 0xff, 0x01, 0xb8, 0x07, 0xf0, 0x01, - 0xfc, 0x01, 0xbc, 0x80, 0x13, 0x1e, 0x00, 0x7f, 0xe1, 0x40, 0x7f, 0xa0, - 0x7f, 0xb0, 0x00, 0x3f, 0xc0, 0x1f, 0xc0, 0x38, 0x0f, 0xf0, 0x1f, 0x80, - 0xff, 0x01, 0xfc, 0x03, 0xf1, 0x7e, 0x01, 0xfe, 0x01, 0xf0, 0xff, 0x00, - 0x7f, 0xc0, 0x1d, 0x07, 0xf0, 0x0f, 0xc0, 0x7e, 0x06, 0xe0, 0x07, 0xe0, - 0x0f, 0xf8, 0x06, 0xc1, 0xfe, 0x01, 0xfc, 0x03, 0xe0, 0x0f, 0x00, 0xfc, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0d, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, - 0x0f, 0x0c, 0x0d, 0x0c, 0x0f, 0x0f, 0x0d, 0x0d, 0x0d, 0x0e, 0x0d, 0x0c, - 0x0d, 0x0d, 0x0d, 0x0c, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x0b, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x02, - 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0d, 0x02, 0x04, 0x00, 0x02, 0x04, 0x00, - 0x01, 0x04, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0a, 0x0b, 0x0d, 0x0e, 0x0d, 0x0c, 0x0c, 0x0b, 0x09, 0x0b, 0x0b, - 0x0c, 0x0c, 0x0c, 0x08, 0x08, 0x0c, 0x08, 0x0a, 0x08, 0x08, 0x0a, 0x03, - 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, - 0x03, 0x04, 0x00, 0x00, 0x00, 0x05, 0x0a, 0x02, 0x0e, 0x0d, 0x0c, 0x0d, - 0x0c, 0x08, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x07, 0x08, - 0x08, 0x01, 0x01, 0x00, 0x01, 0x00, 0x07, 0x05, 0x01, 0x00, 0x06, 0x01, - 0x00, 0x07, 0x00, 0x05, 0x01, 0x00, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x0e, 0x01, 0x09, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x05, 0x00, 0x13, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf1, 0xe2, 0xd3, 0xbb, - 0x7c, 0x95, 0x01, 0x02, 0x03, 0x03, 0x00, 0x72, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x19, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe6, - 0xec, 0xf3, 0xf9, 0x00, 0x06, 0x0c, 0x06, 0x00, 0x00, 0x1f, 0x1f, 0x1f, - 0x1f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, - 0x02, 0x0a, 0x02, 0x08, 0x05, 0x05, 0x0b, 0x0a, 0x09, 0x08, 0x08, 0xa0, - 0x08, 0x08, 0x17, 0x1f, 0x12, 0x12, 0x12, 0x12, 0x1e, 0x1e, 0x14, 0x14, - 0x14, 0x14, 0x17, 0x17, 0x1a, 0x1a, 0x1d, 0x1d, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x1a, 0x1d, 0x1b, 0x1a, 0x1d, 0x1b, 0x1a, 0x1d, 0x1b, 0x1a, - 0x1d, 0x1b, 0x17, 0x1d, 0x17, 0x17, 0x1d, 0x17, 0x17, 0x1d, 0x17, 0x17, - 0x1d, 0x17, 0x17, 0x17, 0x00, 0x02, 0x02, 0x02, 0x02, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x02, - 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x00, 0x01, - 0x00, 0x01, 0x00, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x02, 0x00, - 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, - 0x02, 0x02, 0x00, 0x01, 0x03, 0x00, 0x02, 0x03, 0x00, 0x02, 0xa0, 0xa0, - 0x00, 0x02, 0x02, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x01, 0x02, 0x03, 0x02, 0x01, 0x03, 0x03, 0x03, 0x03, - 0x01, 0x01, 0x03, 0x03, 0x03, 0x02, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, - 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x02, 0x00, 0x02, 0x02, 0x00, 0x03, - 0x02, 0x00, 0x04, 0x02, 0x00, 0x03, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, - 0x03, 0x00, 0x03, 0x03, 0x00, 0x03, 0xb0, 0xa0, 0x00, 0x01, 0x02, 0x02, - 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x06, 0x08, 0x09, 0x0b, 0x0d, 0x0f, - 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, - 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, - 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, - 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, - 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, - 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, - 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, - 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, - 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, - 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, - 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x00, 0x03, 0x06, 0x09, - 0x0c, 0x10, 0x13, 0x16, 0x19, 0x1c, 0x1f, 0x22, 0x25, 0x28, 0x2b, 0x2e, - 0x31, 0x33, 0x36, 0x39, 0x3c, 0x3f, 0x41, 0x44, 0x47, 0x49, 0x4c, 0x4e, - 0x51, 0x53, 0x55, 0x58, 0x5a, 0x5c, 0x5e, 0x60, 0x62, 0x64, 0x66, 0x68, - 0x6a, 0x6b, 0x6d, 0x6f, 0x70, 0x71, 0x73, 0x74, 0x75, 0x76, 0x78, 0x79, - 0x7a, 0x7a, 0x7b, 0x7c, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7c, 0x7b, 0x7a, - 0x7a, 0x79, 0x78, 0x76, 0x75, 0x74, 0x73, 0x71, 0x70, 0x6f, 0x6d, 0x6b, - 0x6a, 0x68, 0x66, 0x64, 0x62, 0x60, 0x5e, 0x5c, 0x5a, 0x58, 0x55, 0x53, - 0x51, 0x4e, 0x4c, 0x49, 0x47, 0x44, 0x41, 0x3f, 0x3c, 0x39, 0x36, 0x33, - 0x31, 0x2e, 0x2b, 0x28, 0x25, 0x22, 0x1f, 0x1c, 0x19, 0x16, 0x13, 0x10, - 0x0c, 0x09, 0x06, 0x03, 0x00, 0xfd, 0xfa, 0xf7, 0xf4, 0xf0, 0xed, 0xea, - 0xe7, 0xe4, 0xe1, 0xde, 0xdb, 0xd8, 0xd5, 0xd2, 0xcf, 0xcd, 0xca, 0xc7, - 0xc4, 0xc1, 0xbf, 0xbc, 0xb9, 0xb7, 0xb4, 0xb2, 0xaf, 0xad, 0xab, 0xa8, - 0xa6, 0xa4, 0xa2, 0xa0, 0x9e, 0x9c, 0x9a, 0x98, 0x96, 0x95, 0x93, 0x91, - 0x90, 0x8f, 0x8d, 0x8c, 0x8b, 0x8a, 0x88, 0x87, 0x86, 0x86, 0x85, 0x84, - 0x83, 0x83, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x82, 0x82, 0x82, 0x83, 0x83, 0x84, 0x85, 0x86, 0x86, 0x87, 0x88, 0x8a, - 0x8b, 0x8c, 0x8d, 0x8f, 0x90, 0x91, 0x93, 0x95, 0x96, 0x98, 0x9a, 0x9c, - 0x9e, 0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xab, 0xad, 0xaf, 0xb2, 0xb4, 0xb7, - 0xb9, 0xbc, 0xbf, 0xc1, 0xc4, 0xc7, 0xca, 0xcd, 0xcf, 0xd2, 0xd5, 0xd8, - 0xdb, 0xde, 0xe1, 0xe4, 0xe7, 0xea, 0xed, 0xf0, 0xf4, 0xf7, 0xfa, 0xfd, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0e, 0x13, 0x18, 0x1b, 0x17, 0x15, - 0x10, 0x14, 0x0e, 0x12, 0x0e, 0x12, 0x12, 0x10, 0x0d, 0x0f, 0x0b, 0x12, - 0x0e, 0x0b, 0x09, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x82, - 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0xc0, 0xa8, 0xb0, 0xac, 0xc0, 0xa0, 0xb8, 0xa0, 0xc0, 0xbc, 0xa0, - 0xac, 0xa8, 0xac, 0xc0, 0xa0, 0xa0, 0xac, 0xb4, 0xa4, 0xc0, 0xa8, 0xa8, - 0xb0, 0xc0, 0xbc, 0x00, 0x00, 0x00, 0x02, 0x00, 0x20, 0x20, 0x9b, 0x20, - 0xc0, 0xb9, 0x20, 0xcd, 0xa3, 0x4c, 0x8a, 0x8e, 0x28, 0x41, 0x29, 0xbd, - 0x28, 0x21, 0x29, 0x3d, 0xae, 0x28, 0x22, 0x29, 0x20, 0x3d, 0x2d, 0x41, - 0x48, 0x35, 0x4e, 0x4b, 0x57, 0x4f, 0x57, 0x54, 0xad, 0x28, 0x22, 0x29, - 0x3d, 0x4b, 0x57, 0x4f, 0x57, 0x34, 0x54, 0xad, 0x28, 0x23, 0x29, 0x3d, - 0x20, 0x4e, 0x41, 0x48, 0x34, 0x4d, 0x42, 0x45, 0xd2, 0x28, 0x24, 0x29, - 0x3d, 0x20, 0x44, 0x41, 0x41, 0x34, 0x4c, 0x45, 0xd2, 0x28, 0x25, 0x29, - 0x3d, 0x20, 0x50, 0x45, 0x52, 0x53, 0x45, 0x48, 0x34, 0x4e, 0xd4, 0x28, - 0x26, 0x29, 0x3d, 0x20, 0x41, 0x45, 0x4e, 0xc4, 0x28, 0x27, 0x29, 0xbd, - 0x28, 0x2a, 0x29, 0x3d, 0x20, 0x41, 0x45, 0x34, 0x53, 0x54, 0x45, 0x52, - 0x49, 0x48, 0x53, 0xcb, 0x28, 0x2b, 0x29, 0x3d, 0x20, 0x50, 0x4c, 0x41, - 0x48, 0x34, 0xd3, 0x28, 0x2c, 0x29, 0x3d, 0xac, 0x20, 0x28, 0x2d, 0x29, - 0x20, 0x3d, 0xad, 0x28, 0x2d, 0x29, 0xbd, 0x28, 0x2e, 0x29, 0x3d, 0x20, - 0x50, 0x4f, 0x59, 0x4e, 0xd4, 0x28, 0x2f, 0x29, 0x3d, 0x20, 0x53, 0x4c, - 0x41, 0x45, 0x34, 0x53, 0xc8, 0x28, 0x30, 0x29, 0x3d, 0x20, 0x5a, 0x49, - 0x59, 0x34, 0x52, 0x4f, 0xd7, 0x20, 0x28, 0x31, 0x53, 0x54, 0x29, 0x3d, - 0x46, 0x45, 0x52, 0x34, 0x53, 0xd4, 0x20, 0x28, 0x31, 0x30, 0x54, 0x48, - 0x29, 0x3d, 0x54, 0x45, 0x48, 0x34, 0x4e, 0x54, 0xc8, 0x28, 0x31, 0x29, - 0x3d, 0x20, 0x57, 0x41, 0x48, 0x34, 0xce, 0x20, 0x28, 0x32, 0x4e, 0x44, - 0x29, 0x3d, 0x53, 0x45, 0x48, 0x34, 0x4b, 0x55, 0x4e, 0xc4, 0x28, 0x32, - 0x29, 0x3d, 0x20, 0x54, 0x55, 0x57, 0xb4, 0x20, 0x28, 0x33, 0x52, 0x44, - 0x29, 0x3d, 0x54, 0x48, 0x45, 0x52, 0x34, 0xc4, 0x28, 0x33, 0x29, 0x3d, - 0x20, 0x54, 0x48, 0x52, 0x49, 0x59, 0xb4, 0x28, 0x34, 0x29, 0x3d, 0x20, - 0x46, 0x4f, 0x48, 0x34, 0xd2, 0x20, 0x28, 0x35, 0x54, 0x48, 0x29, 0x3d, - 0x46, 0x49, 0x48, 0x34, 0x46, 0x54, 0xc8, 0x28, 0x35, 0x29, 0x3d, 0x20, - 0x46, 0x41, 0x59, 0x34, 0xd6, 0x20, 0x28, 0x36, 0x34, 0x29, 0x20, 0x3d, - 0x53, 0x49, 0x48, 0x34, 0x4b, 0x53, 0x54, 0x49, 0x59, 0x20, 0x46, 0x4f, - 0x48, 0xd2, 0x28, 0x36, 0x29, 0x3d, 0x20, 0x53, 0x49, 0x48, 0x34, 0x4b, - 0xd3, 0x28, 0x37, 0x29, 0x3d, 0x20, 0x53, 0x45, 0x48, 0x34, 0x56, 0x55, - 0xce, 0x20, 0x28, 0x38, 0x54, 0x48, 0x29, 0x3d, 0x45, 0x59, 0x34, 0x54, - 0xc8, 0x28, 0x38, 0x29, 0x3d, 0x20, 0x45, 0x59, 0x34, 0xd4, 0x28, 0x39, - 0x29, 0x3d, 0x20, 0x4e, 0x41, 0x59, 0x34, 0xce, 0x28, 0x3a, 0x29, 0x3d, - 0xae, 0x28, 0x3b, 0x29, 0x3d, 0xae, 0x28, 0x3c, 0x29, 0x3d, 0x20, 0x4c, - 0x45, 0x48, 0x34, 0x53, 0x20, 0x44, 0x48, 0x41, 0x45, 0xce, 0x28, 0x3d, - 0x29, 0x3d, 0x20, 0x49, 0x59, 0x34, 0x4b, 0x57, 0x55, 0x4c, 0xda, 0x28, - 0x3e, 0x29, 0x3d, 0x20, 0x47, 0x52, 0x45, 0x59, 0x34, 0x54, 0x45, 0x52, - 0x20, 0x44, 0x48, 0x41, 0x45, 0xce, 0x28, 0x3f, 0x29, 0x3d, 0xbf, 0x28, - 0x40, 0x29, 0x3d, 0x20, 0x41, 0x45, 0x36, 0xd4, 0x28, 0x5e, 0x29, 0x3d, - 0x20, 0x4b, 0x41, 0x45, 0x34, 0x52, 0x49, 0x58, 0xd4, 0x5d, 0xc1, 0x00, - 0x5d, 0xc1, 0x20, 0x28, 0x41, 0x2e, 0x29, 0x3d, 0x45, 0x48, 0x34, 0x59, - 0x2e, 0xa0, 0x28, 0x41, 0x29, 0x20, 0x3d, 0x41, 0xc8, 0x20, 0x28, 0x41, - 0x52, 0x45, 0x29, 0x20, 0x3d, 0x41, 0x41, 0xd2, 0x20, 0x28, 0x41, 0x52, - 0x29, 0x4f, 0x3d, 0x41, 0x58, 0xd2, 0x28, 0x41, 0x52, 0x29, 0x23, 0x3d, - 0x45, 0x48, 0x34, 0xd2, 0x20, 0x5e, 0x28, 0x41, 0x53, 0x29, 0x23, 0x3d, - 0x45, 0x59, 0x34, 0xd3, 0x28, 0x41, 0x29, 0x57, 0x41, 0x3d, 0x41, 0xd8, - 0x28, 0x41, 0x57, 0x29, 0x3d, 0x41, 0x4f, 0xb5, 0x20, 0x3a, 0x28, 0x41, - 0x4e, 0x59, 0x29, 0x3d, 0x45, 0x48, 0x34, 0x4e, 0x49, 0xd9, 0x28, 0x41, - 0x29, 0x5e, 0x2b, 0x23, 0x3d, 0x45, 0x59, 0xb5, 0x23, 0x3a, 0x28, 0x41, - 0x4c, 0x4c, 0x59, 0x29, 0x3d, 0x55, 0x4c, 0x49, 0xd9, 0x20, 0x28, 0x41, - 0x4c, 0x29, 0x23, 0x3d, 0x55, 0xcc, 0x28, 0x41, 0x47, 0x41, 0x49, 0x4e, - 0x29, 0x3d, 0x41, 0x58, 0x47, 0x45, 0x48, 0x34, 0xce, 0x23, 0x3a, 0x28, - 0x41, 0x47, 0x29, 0x45, 0x3d, 0x49, 0x48, 0xca, 0x28, 0x41, 0x29, 0x5e, - 0x25, 0x3d, 0x45, 0xd9, 0x28, 0x41, 0x29, 0x5e, 0x2b, 0x3a, 0x23, 0x3d, - 0x41, 0xc5, 0x20, 0x3a, 0x28, 0x41, 0x29, 0x5e, 0x2b, 0x20, 0x3d, 0x45, - 0x59, 0xb4, 0x20, 0x28, 0x41, 0x52, 0x52, 0x29, 0x3d, 0x41, 0x58, 0xd2, - 0x28, 0x41, 0x52, 0x52, 0x29, 0x3d, 0x41, 0x45, 0x34, 0xd2, 0x20, 0x5e, - 0x28, 0x41, 0x52, 0x29, 0x20, 0x3d, 0x41, 0x41, 0x35, 0xd2, 0x28, 0x41, - 0x52, 0x29, 0x3d, 0x41, 0x41, 0x35, 0xd2, 0x28, 0x41, 0x49, 0x52, 0x29, - 0x3d, 0x45, 0x48, 0x34, 0xd2, 0x28, 0x41, 0x49, 0x29, 0x3d, 0x45, 0x59, - 0xb4, 0x28, 0x41, 0x59, 0x29, 0x3d, 0x45, 0x59, 0xb5, 0x28, 0x41, 0x55, - 0x29, 0x3d, 0x41, 0x4f, 0xb4, 0x23, 0x3a, 0x28, 0x41, 0x4c, 0x29, 0x20, - 0x3d, 0x55, 0xcc, 0x23, 0x3a, 0x28, 0x41, 0x4c, 0x53, 0x29, 0x20, 0x3d, - 0x55, 0x4c, 0xda, 0x28, 0x41, 0x4c, 0x4b, 0x29, 0x3d, 0x41, 0x4f, 0x34, - 0xcb, 0x28, 0x41, 0x4c, 0x29, 0x5e, 0x3d, 0x41, 0x4f, 0xcc, 0x20, 0x3a, - 0x28, 0x41, 0x42, 0x4c, 0x45, 0x29, 0x3d, 0x45, 0x59, 0x34, 0x42, 0x55, - 0xcc, 0x28, 0x41, 0x42, 0x4c, 0x45, 0x29, 0x3d, 0x41, 0x58, 0x42, 0x55, - 0xcc, 0x28, 0x41, 0x29, 0x56, 0x4f, 0x3d, 0x45, 0x59, 0xb4, 0x28, 0x41, - 0x4e, 0x47, 0x29, 0x2b, 0x3d, 0x45, 0x59, 0x34, 0x4e, 0xca, 0x28, 0x41, - 0x54, 0x41, 0x52, 0x49, 0x29, 0x3d, 0x41, 0x48, 0x54, 0x41, 0x41, 0x34, - 0x52, 0x49, 0xd9, 0x28, 0x41, 0x29, 0x54, 0x4f, 0x4d, 0x3d, 0x41, 0xc5, - 0x28, 0x41, 0x29, 0x54, 0x54, 0x49, 0x3d, 0x41, 0xc5, 0x20, 0x28, 0x41, - 0x54, 0x29, 0x20, 0x3d, 0x41, 0x45, 0xd4, 0x20, 0x28, 0x41, 0x29, 0x54, - 0x3d, 0x41, 0xc8, 0x28, 0x41, 0x29, 0x3d, 0x41, 0xc5, 0x5d, 0xc2, 0x20, - 0x28, 0x42, 0x29, 0x20, 0x3d, 0x42, 0x49, 0x59, 0xb4, 0x20, 0x28, 0x42, - 0x45, 0x29, 0x5e, 0x23, 0x3d, 0x42, 0x49, 0xc8, 0x28, 0x42, 0x45, 0x49, - 0x4e, 0x47, 0x29, 0x3d, 0x42, 0x49, 0x59, 0x34, 0x49, 0x48, 0x4e, 0xd8, - 0x20, 0x28, 0x42, 0x4f, 0x54, 0x48, 0x29, 0x20, 0x3d, 0x42, 0x4f, 0x57, - 0x34, 0x54, 0xc8, 0x20, 0x28, 0x42, 0x55, 0x53, 0x29, 0x23, 0x3d, 0x42, - 0x49, 0x48, 0x34, 0xda, 0x28, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x29, 0x3d, - 0x42, 0x52, 0x45, 0x59, 0x35, 0xcb, 0x28, 0x42, 0x55, 0x49, 0x4c, 0x29, - 0x3d, 0x42, 0x49, 0x48, 0x34, 0xcc, 0x28, 0x42, 0x29, 0x3d, 0xc2, 0x5d, - 0xc3, 0x20, 0x28, 0x43, 0x29, 0x20, 0x3d, 0x53, 0x49, 0x59, 0xb4, 0x20, - 0x28, 0x43, 0x48, 0x29, 0x5e, 0x3d, 0xcb, 0x5e, 0x45, 0x28, 0x43, 0x48, - 0x29, 0x3d, 0xcb, 0x28, 0x43, 0x48, 0x41, 0x29, 0x52, 0x23, 0x3d, 0x4b, - 0x45, 0x48, 0xb5, 0x28, 0x43, 0x48, 0x29, 0x3d, 0x43, 0xc8, 0x20, 0x53, - 0x28, 0x43, 0x49, 0x29, 0x23, 0x3d, 0x53, 0x41, 0x59, 0xb4, 0x28, 0x43, - 0x49, 0x29, 0x41, 0x3d, 0x53, 0xc8, 0x28, 0x43, 0x49, 0x29, 0x4f, 0x3d, - 0x53, 0xc8, 0x28, 0x43, 0x49, 0x29, 0x45, 0x4e, 0x3d, 0x53, 0xc8, 0x28, - 0x43, 0x49, 0x54, 0x59, 0x29, 0x3d, 0x53, 0x49, 0x48, 0x54, 0x49, 0xd9, - 0x28, 0x43, 0x29, 0x2b, 0x3d, 0xd3, 0x28, 0x43, 0x4b, 0x29, 0x3d, 0xcb, - 0x28, 0x43, 0x4f, 0x4d, 0x4d, 0x4f, 0x44, 0x4f, 0x52, 0x45, 0x29, 0x3d, - 0x4b, 0x41, 0x41, 0x34, 0x4d, 0x41, 0x48, 0x44, 0x4f, 0x48, 0xd2, 0x28, - 0x43, 0x4f, 0x4d, 0x29, 0x3d, 0x4b, 0x41, 0x48, 0xcd, 0x28, 0x43, 0x55, - 0x49, 0x54, 0x29, 0x3d, 0x4b, 0x49, 0x48, 0xd4, 0x28, 0x43, 0x52, 0x45, - 0x41, 0x29, 0x3d, 0x4b, 0x52, 0x49, 0x59, 0x45, 0xd9, 0x28, 0x43, 0x29, - 0x3d, 0xcb, 0x5d, 0xc4, 0x20, 0x28, 0x44, 0x29, 0x20, 0x3d, 0x44, 0x49, - 0x59, 0xb4, 0x20, 0x28, 0x44, 0x52, 0x2e, 0x29, 0x20, 0x3d, 0x44, 0x41, - 0x41, 0x34, 0x4b, 0x54, 0x45, 0xd2, 0x23, 0x3a, 0x28, 0x44, 0x45, 0x44, - 0x29, 0x20, 0x3d, 0x44, 0x49, 0x48, 0xc4, 0x2e, 0x45, 0x28, 0x44, 0x29, - 0x20, 0x3d, 0xc4, 0x23, 0x3a, 0x5e, 0x45, 0x28, 0x44, 0x29, 0x20, 0x3d, - 0xd4, 0x20, 0x28, 0x44, 0x45, 0x29, 0x5e, 0x23, 0x3d, 0x44, 0x49, 0xc8, - 0x20, 0x28, 0x44, 0x4f, 0x29, 0x20, 0x3d, 0x44, 0x55, 0xd7, 0x20, 0x28, - 0x44, 0x4f, 0x45, 0x53, 0x29, 0x3d, 0x44, 0x41, 0x48, 0xda, 0x28, 0x44, - 0x4f, 0x4e, 0x45, 0x29, 0x20, 0x3d, 0x44, 0x41, 0x48, 0x35, 0xce, 0x28, - 0x44, 0x4f, 0x49, 0x4e, 0x47, 0x29, 0x3d, 0x44, 0x55, 0x57, 0x34, 0x49, - 0x48, 0x4e, 0xd8, 0x20, 0x28, 0x44, 0x4f, 0x57, 0x29, 0x3d, 0x44, 0x41, - 0xd7, 0x23, 0x28, 0x44, 0x55, 0x29, 0x41, 0x3d, 0x4a, 0x55, 0xd7, 0x23, - 0x28, 0x44, 0x55, 0x29, 0x5e, 0x23, 0x3d, 0x4a, 0x41, 0xd8, 0x28, 0x44, - 0x29, 0x3d, 0xc4, 0x5d, 0xc5, 0x20, 0x28, 0x45, 0x29, 0x20, 0x3d, 0x49, - 0x59, 0x49, 0x59, 0xb4, 0x23, 0x3a, 0x28, 0x45, 0x29, 0x20, 0xbd, 0x27, - 0x3a, 0x5e, 0x28, 0x45, 0x29, 0x20, 0xbd, 0x20, 0x3a, 0x28, 0x45, 0x29, - 0x20, 0x3d, 0x49, 0xd9, 0x23, 0x28, 0x45, 0x44, 0x29, 0x20, 0x3d, 0xc4, - 0x23, 0x3a, 0x28, 0x45, 0x29, 0x44, 0x20, 0xbd, 0x28, 0x45, 0x56, 0x29, - 0x45, 0x52, 0x3d, 0x45, 0x48, 0x34, 0xd6, 0x28, 0x45, 0x29, 0x5e, 0x25, - 0x3d, 0x49, 0x59, 0xb4, 0x28, 0x45, 0x52, 0x49, 0x29, 0x23, 0x3d, 0x49, - 0x59, 0x34, 0x52, 0x49, 0xd9, 0x28, 0x45, 0x52, 0x49, 0x29, 0x3d, 0x45, - 0x48, 0x34, 0x52, 0x49, 0xc8, 0x23, 0x3a, 0x28, 0x45, 0x52, 0x29, 0x23, - 0x3d, 0x45, 0xd2, 0x28, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x29, 0x3d, 0x45, - 0x48, 0x34, 0x52, 0x4f, 0x48, 0xd2, 0x28, 0x45, 0x52, 0x41, 0x53, 0x45, - 0x29, 0x3d, 0x49, 0x48, 0x52, 0x45, 0x59, 0x35, 0xd3, 0x28, 0x45, 0x52, - 0x29, 0x23, 0x3d, 0x45, 0x48, 0xd2, 0x28, 0x45, 0x52, 0x29, 0x3d, 0x45, - 0xd2, 0x20, 0x28, 0x45, 0x56, 0x45, 0x4e, 0x29, 0x3d, 0x49, 0x59, 0x56, - 0x45, 0x48, 0xce, 0x23, 0x3a, 0x28, 0x45, 0x29, 0x57, 0xbd, 0x40, 0x28, - 0x45, 0x57, 0x29, 0x3d, 0x55, 0xd7, 0x28, 0x45, 0x57, 0x29, 0x3d, 0x59, - 0x55, 0xd7, 0x28, 0x45, 0x29, 0x4f, 0x3d, 0x49, 0xd9, 0x23, 0x3a, 0x26, - 0x28, 0x45, 0x53, 0x29, 0x20, 0x3d, 0x49, 0x48, 0xda, 0x23, 0x3a, 0x28, - 0x45, 0x29, 0x53, 0x20, 0xbd, 0x23, 0x3a, 0x28, 0x45, 0x4c, 0x59, 0x29, - 0x20, 0x3d, 0x4c, 0x49, 0xd9, 0x23, 0x3a, 0x28, 0x45, 0x4d, 0x45, 0x4e, - 0x54, 0x29, 0x3d, 0x4d, 0x45, 0x48, 0x4e, 0xd4, 0x28, 0x45, 0x46, 0x55, - 0x4c, 0x29, 0x3d, 0x46, 0x55, 0x48, 0xcc, 0x28, 0x45, 0x45, 0x29, 0x3d, - 0x49, 0x59, 0xb4, 0x28, 0x45, 0x41, 0x52, 0x4e, 0x29, 0x3d, 0x45, 0x52, - 0x35, 0xce, 0x20, 0x28, 0x45, 0x41, 0x52, 0x29, 0x5e, 0x3d, 0x45, 0x52, - 0xb5, 0x28, 0x45, 0x41, 0x44, 0x29, 0x3d, 0x45, 0x48, 0xc4, 0x23, 0x3a, - 0x28, 0x45, 0x41, 0x29, 0x20, 0x3d, 0x49, 0x59, 0x41, 0xd8, 0x28, 0x45, - 0x41, 0x29, 0x53, 0x55, 0x3d, 0x45, 0x48, 0xb5, 0x28, 0x45, 0x41, 0x29, - 0x3d, 0x49, 0x59, 0xb5, 0x28, 0x45, 0x49, 0x47, 0x48, 0x29, 0x3d, 0x45, - 0x59, 0xb4, 0x28, 0x45, 0x49, 0x29, 0x3d, 0x49, 0x59, 0xb4, 0x20, 0x28, - 0x45, 0x59, 0x45, 0x29, 0x3d, 0x41, 0x59, 0xb4, 0x28, 0x45, 0x59, 0x29, - 0x3d, 0x49, 0xd9, 0x28, 0x45, 0x55, 0x29, 0x3d, 0x59, 0x55, 0x57, 0xb5, - 0x28, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x29, 0x3d, 0x49, 0x59, 0x34, 0x4b, - 0x57, 0x55, 0xcc, 0x28, 0x45, 0x29, 0x3d, 0x45, 0xc8, 0x5d, 0xc6, 0x20, - 0x28, 0x46, 0x29, 0x20, 0x3d, 0x45, 0x48, 0x34, 0xc6, 0x28, 0x46, 0x55, - 0x4c, 0x29, 0x3d, 0x46, 0x55, 0x48, 0xcc, 0x28, 0x46, 0x52, 0x49, 0x45, - 0x4e, 0x44, 0x29, 0x3d, 0x46, 0x52, 0x45, 0x48, 0x35, 0x4e, 0xc4, 0x28, - 0x46, 0x41, 0x54, 0x48, 0x45, 0x52, 0x29, 0x3d, 0x46, 0x41, 0x41, 0x34, - 0x44, 0x48, 0x45, 0xd2, 0x28, 0x46, 0x29, 0x46, 0xbd, 0x28, 0x46, 0x29, - 0x3d, 0xc6, 0x5d, 0xc7, 0x20, 0x28, 0x47, 0x29, 0x20, 0x3d, 0x4a, 0x49, - 0x59, 0xb4, 0x28, 0x47, 0x49, 0x56, 0x29, 0x3d, 0x47, 0x49, 0x48, 0x35, - 0xd6, 0x20, 0x28, 0x47, 0x29, 0x49, 0x5e, 0x3d, 0xc7, 0x28, 0x47, 0x45, - 0x29, 0x54, 0x3d, 0x47, 0x45, 0x48, 0xb5, 0x53, 0x55, 0x28, 0x47, 0x47, - 0x45, 0x53, 0x29, 0x3d, 0x47, 0x4a, 0x45, 0x48, 0x34, 0xd3, 0x28, 0x47, - 0x47, 0x29, 0x3d, 0xc7, 0x20, 0x42, 0x23, 0x28, 0x47, 0x29, 0x3d, 0xc7, - 0x28, 0x47, 0x29, 0x2b, 0x3d, 0xca, 0x28, 0x47, 0x52, 0x45, 0x41, 0x54, - 0x29, 0x3d, 0x47, 0x52, 0x45, 0x59, 0x34, 0xd4, 0x28, 0x47, 0x4f, 0x4e, - 0x29, 0x45, 0x3d, 0x47, 0x41, 0x4f, 0x35, 0xce, 0x23, 0x28, 0x47, 0x48, - 0x29, 0xbd, 0x20, 0x28, 0x47, 0x4e, 0x29, 0x3d, 0xce, 0x28, 0x47, 0x29, - 0x3d, 0xc7, 0x5d, 0xc8, 0x20, 0x28, 0x48, 0x29, 0x20, 0x3d, 0x45, 0x59, - 0x34, 0x43, 0xc8, 0x20, 0x28, 0x48, 0x41, 0x56, 0x29, 0x3d, 0x2f, 0x48, - 0x41, 0x45, 0x36, 0xd6, 0x20, 0x28, 0x48, 0x45, 0x52, 0x45, 0x29, 0x3d, - 0x2f, 0x48, 0x49, 0x59, 0xd2, 0x20, 0x28, 0x48, 0x4f, 0x55, 0x52, 0x29, - 0x3d, 0x41, 0x57, 0x35, 0x45, 0xd2, 0x28, 0x48, 0x4f, 0x57, 0x29, 0x3d, - 0x2f, 0x48, 0x41, 0xd7, 0x28, 0x48, 0x29, 0x23, 0x3d, 0x2f, 0xc8, 0x28, - 0x48, 0x29, 0xbd, 0x5d, 0xc9, 0x20, 0x28, 0x49, 0x4e, 0x29, 0x3d, 0x49, - 0x48, 0xce, 0x20, 0x28, 0x49, 0x29, 0x20, 0x3d, 0x41, 0x59, 0xb4, 0x28, - 0x49, 0x29, 0x20, 0x3d, 0x41, 0xd9, 0x28, 0x49, 0x4e, 0x29, 0x44, 0x3d, - 0x41, 0x59, 0x35, 0xce, 0x53, 0x45, 0x4d, 0x28, 0x49, 0x29, 0x3d, 0x49, - 0xd9, 0x20, 0x41, 0x4e, 0x54, 0x28, 0x49, 0x29, 0x3d, 0x41, 0xd9, 0x28, - 0x49, 0x45, 0x52, 0x29, 0x3d, 0x49, 0x59, 0x45, 0xd2, 0x23, 0x3a, 0x52, - 0x28, 0x49, 0x45, 0x44, 0x29, 0x20, 0x3d, 0x49, 0x59, 0xc4, 0x28, 0x49, - 0x45, 0x44, 0x29, 0x20, 0x3d, 0x41, 0x59, 0x35, 0xc4, 0x28, 0x49, 0x45, - 0x4e, 0x29, 0x3d, 0x49, 0x59, 0x45, 0x48, 0xce, 0x28, 0x49, 0x45, 0x29, - 0x54, 0x3d, 0x41, 0x59, 0x34, 0x45, 0xc8, 0x28, 0x49, 0x27, 0x29, 0x3d, - 0x41, 0x59, 0xb5, 0x20, 0x3a, 0x28, 0x49, 0x29, 0x5e, 0x25, 0x3d, 0x41, - 0x59, 0xb5, 0x20, 0x3a, 0x28, 0x49, 0x45, 0x29, 0x20, 0x3d, 0x41, 0x59, - 0xb4, 0x28, 0x49, 0x29, 0x25, 0x3d, 0x49, 0xd9, 0x28, 0x49, 0x45, 0x29, - 0x3d, 0x49, 0x59, 0xb4, 0x20, 0x28, 0x49, 0x44, 0x45, 0x41, 0x29, 0x3d, - 0x41, 0x59, 0x44, 0x49, 0x59, 0x35, 0x41, 0xc8, 0x28, 0x49, 0x29, 0x5e, - 0x2b, 0x3a, 0x23, 0x3d, 0x49, 0xc8, 0x28, 0x49, 0x52, 0x29, 0x23, 0x3d, - 0x41, 0x59, 0xd2, 0x28, 0x49, 0x5a, 0x29, 0x25, 0x3d, 0x41, 0x59, 0xda, - 0x28, 0x49, 0x53, 0x29, 0x25, 0x3d, 0x41, 0x59, 0xda, 0x49, 0x5e, 0x28, - 0x49, 0x29, 0x5e, 0x23, 0x3d, 0x49, 0xc8, 0x2b, 0x5e, 0x28, 0x49, 0x29, - 0x5e, 0x2b, 0x3d, 0x41, 0xd9, 0x23, 0x3a, 0x5e, 0x28, 0x49, 0x29, 0x5e, - 0x2b, 0x3d, 0x49, 0xc8, 0x28, 0x49, 0x29, 0x5e, 0x2b, 0x3d, 0x41, 0xd9, - 0x28, 0x49, 0x52, 0x29, 0x3d, 0x45, 0xd2, 0x28, 0x49, 0x47, 0x48, 0x29, - 0x3d, 0x41, 0x59, 0xb4, 0x28, 0x49, 0x4c, 0x44, 0x29, 0x3d, 0x41, 0x59, - 0x35, 0x4c, 0xc4, 0x20, 0x28, 0x49, 0x47, 0x4e, 0x29, 0x3d, 0x49, 0x48, - 0x47, 0xce, 0x28, 0x49, 0x47, 0x4e, 0x29, 0x20, 0x3d, 0x41, 0x59, 0x34, - 0xce, 0x28, 0x49, 0x47, 0x4e, 0x29, 0x5e, 0x3d, 0x41, 0x59, 0x34, 0xce, - 0x28, 0x49, 0x47, 0x4e, 0x29, 0x25, 0x3d, 0x41, 0x59, 0x34, 0xce, 0x28, - 0x49, 0x43, 0x52, 0x4f, 0x29, 0x3d, 0x41, 0x59, 0x34, 0x4b, 0x52, 0x4f, - 0xc8, 0x28, 0x49, 0x51, 0x55, 0x45, 0x29, 0x3d, 0x49, 0x59, 0x34, 0xcb, - 0x28, 0x49, 0x29, 0x3d, 0x49, 0xc8, 0x5d, 0xca, 0x20, 0x28, 0x4a, 0x29, - 0x20, 0x3d, 0x4a, 0x45, 0x59, 0xb4, 0x28, 0x4a, 0x29, 0x3d, 0xca, 0x5d, - 0xcb, 0x20, 0x28, 0x4b, 0x29, 0x20, 0x3d, 0x4b, 0x45, 0x59, 0xb4, 0x20, - 0x28, 0x4b, 0x29, 0x4e, 0xbd, 0x28, 0x4b, 0x29, 0x3d, 0xcb, 0x5d, 0xcc, - 0x20, 0x28, 0x4c, 0x29, 0x20, 0x3d, 0x45, 0x48, 0x34, 0xcc, 0x28, 0x4c, - 0x4f, 0x29, 0x43, 0x23, 0x3d, 0x4c, 0x4f, 0xd7, 0x4c, 0x28, 0x4c, 0x29, - 0xbd, 0x23, 0x3a, 0x5e, 0x28, 0x4c, 0x29, 0x25, 0x3d, 0x55, 0xcc, 0x28, - 0x4c, 0x45, 0x41, 0x44, 0x29, 0x3d, 0x4c, 0x49, 0x59, 0xc4, 0x20, 0x28, - 0x4c, 0x41, 0x55, 0x47, 0x48, 0x29, 0x3d, 0x4c, 0x41, 0x45, 0x34, 0xc6, - 0x28, 0x4c, 0x29, 0x3d, 0xcc, 0x5d, 0xcd, 0x20, 0x28, 0x4d, 0x29, 0x20, - 0x3d, 0x45, 0x48, 0x34, 0xcd, 0x20, 0x28, 0x4d, 0x52, 0x2e, 0x29, 0x20, - 0x3d, 0x4d, 0x49, 0x48, 0x34, 0x53, 0x54, 0x45, 0xd2, 0x20, 0x28, 0x4d, - 0x53, 0x2e, 0x29, 0x3d, 0x4d, 0x49, 0x48, 0x35, 0xda, 0x20, 0x28, 0x4d, - 0x52, 0x53, 0x2e, 0x29, 0x20, 0x3d, 0x4d, 0x49, 0x48, 0x34, 0x53, 0x49, - 0x58, 0xda, 0x28, 0x4d, 0x4f, 0x56, 0x29, 0x3d, 0x4d, 0x55, 0x57, 0x34, - 0xd6, 0x28, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x29, 0x3d, 0x4d, 0x41, - 0x48, 0x53, 0x48, 0x49, 0x59, 0x35, 0xce, 0x4d, 0x28, 0x4d, 0x29, 0xbd, - 0x28, 0x4d, 0x29, 0x3d, 0xcd, 0x5d, 0xce, 0x20, 0x28, 0x4e, 0x29, 0x20, - 0x3d, 0x45, 0x48, 0x34, 0xce, 0x45, 0x28, 0x4e, 0x47, 0x29, 0x2b, 0x3d, - 0x4e, 0xca, 0x28, 0x4e, 0x47, 0x29, 0x52, 0x3d, 0x4e, 0x58, 0xc7, 0x28, - 0x4e, 0x47, 0x29, 0x23, 0x3d, 0x4e, 0x58, 0xc7, 0x28, 0x4e, 0x47, 0x4c, - 0x29, 0x25, 0x3d, 0x4e, 0x58, 0x47, 0x55, 0xcc, 0x28, 0x4e, 0x47, 0x29, - 0x3d, 0x4e, 0xd8, 0x28, 0x4e, 0x4b, 0x29, 0x3d, 0x4e, 0x58, 0xcb, 0x20, - 0x28, 0x4e, 0x4f, 0x57, 0x29, 0x20, 0x3d, 0x4e, 0x41, 0x57, 0xb4, 0x4e, - 0x28, 0x4e, 0x29, 0xbd, 0x28, 0x4e, 0x4f, 0x4e, 0x29, 0x45, 0x3d, 0x4e, - 0x41, 0x48, 0x34, 0xce, 0x28, 0x4e, 0x29, 0x3d, 0xce, 0x5d, 0xcf, 0x20, - 0x28, 0x4f, 0x29, 0x20, 0x3d, 0x4f, 0x48, 0x34, 0xd7, 0x28, 0x4f, 0x46, - 0x29, 0x20, 0x3d, 0x41, 0x48, 0xd6, 0x20, 0x28, 0x4f, 0x48, 0x29, 0x20, - 0x3d, 0x4f, 0x57, 0xb5, 0x28, 0x4f, 0x52, 0x4f, 0x55, 0x47, 0x48, 0x29, - 0x3d, 0x45, 0x52, 0x34, 0x4f, 0xd7, 0x23, 0x3a, 0x28, 0x4f, 0x52, 0x29, - 0x20, 0x3d, 0x45, 0xd2, 0x23, 0x3a, 0x28, 0x4f, 0x52, 0x53, 0x29, 0x20, - 0x3d, 0x45, 0x52, 0xda, 0x28, 0x4f, 0x52, 0x29, 0x3d, 0x41, 0x4f, 0xd2, - 0x20, 0x28, 0x4f, 0x4e, 0x45, 0x29, 0x3d, 0x57, 0x41, 0x48, 0xce, 0x23, - 0x28, 0x4f, 0x4e, 0x45, 0x29, 0x20, 0x3d, 0x57, 0x41, 0x48, 0xce, 0x28, - 0x4f, 0x57, 0x29, 0x3d, 0x4f, 0xd7, 0x20, 0x28, 0x4f, 0x56, 0x45, 0x52, - 0x29, 0x3d, 0x4f, 0x57, 0x35, 0x56, 0x45, 0xd2, 0x50, 0x52, 0x28, 0x4f, - 0x29, 0x56, 0x3d, 0x55, 0x57, 0xb4, 0x28, 0x4f, 0x56, 0x29, 0x3d, 0x41, - 0x48, 0x34, 0xd6, 0x28, 0x4f, 0x29, 0x5e, 0x25, 0x3d, 0x4f, 0x57, 0xb5, - 0x28, 0x4f, 0x29, 0x5e, 0x45, 0x4e, 0x3d, 0x4f, 0xd7, 0x28, 0x4f, 0x29, - 0x5e, 0x49, 0x23, 0x3d, 0x4f, 0x57, 0xb5, 0x28, 0x4f, 0x4c, 0x29, 0x44, - 0x3d, 0x4f, 0x57, 0x34, 0xcc, 0x28, 0x4f, 0x55, 0x47, 0x48, 0x54, 0x29, - 0x3d, 0x41, 0x4f, 0x35, 0xd4, 0x28, 0x4f, 0x55, 0x47, 0x48, 0x29, 0x3d, - 0x41, 0x48, 0x35, 0xc6, 0x20, 0x28, 0x4f, 0x55, 0x29, 0x3d, 0x41, 0xd7, - 0x48, 0x28, 0x4f, 0x55, 0x29, 0x53, 0x23, 0x3d, 0x41, 0x57, 0xb4, 0x28, - 0x4f, 0x55, 0x53, 0x29, 0x3d, 0x41, 0x58, 0xd3, 0x28, 0x4f, 0x55, 0x52, - 0x29, 0x3d, 0x4f, 0x48, 0xd2, 0x28, 0x4f, 0x55, 0x4c, 0x44, 0x29, 0x3d, - 0x55, 0x48, 0x35, 0xc4, 0x28, 0x4f, 0x55, 0x29, 0x5e, 0x4c, 0x3d, 0x41, - 0x48, 0xb5, 0x28, 0x4f, 0x55, 0x50, 0x29, 0x3d, 0x55, 0x57, 0x35, 0xd0, - 0x28, 0x4f, 0x55, 0x29, 0x3d, 0x41, 0xd7, 0x28, 0x4f, 0x59, 0x29, 0x3d, - 0x4f, 0xd9, 0x28, 0x4f, 0x49, 0x4e, 0x47, 0x29, 0x3d, 0x4f, 0x57, 0x34, - 0x49, 0x48, 0x4e, 0xd8, 0x28, 0x4f, 0x49, 0x29, 0x3d, 0x4f, 0x59, 0xb5, - 0x28, 0x4f, 0x4f, 0x52, 0x29, 0x3d, 0x4f, 0x48, 0x35, 0xd2, 0x28, 0x4f, - 0x4f, 0x4b, 0x29, 0x3d, 0x55, 0x48, 0x35, 0xcb, 0x46, 0x28, 0x4f, 0x4f, - 0x44, 0x29, 0x3d, 0x55, 0x57, 0x35, 0xc4, 0x4c, 0x28, 0x4f, 0x4f, 0x44, - 0x29, 0x3d, 0x41, 0x48, 0x35, 0xc4, 0x4d, 0x28, 0x4f, 0x4f, 0x44, 0x29, - 0x3d, 0x55, 0x57, 0x35, 0xc4, 0x28, 0x4f, 0x4f, 0x44, 0x29, 0x3d, 0x55, - 0x48, 0x35, 0xc4, 0x46, 0x28, 0x4f, 0x4f, 0x54, 0x29, 0x3d, 0x55, 0x48, - 0x35, 0xd4, 0x28, 0x4f, 0x4f, 0x29, 0x3d, 0x55, 0x57, 0xb5, 0x28, 0x4f, - 0x27, 0x29, 0x3d, 0x4f, 0xc8, 0x28, 0x4f, 0x29, 0x45, 0x3d, 0x4f, 0xd7, - 0x28, 0x4f, 0x29, 0x20, 0x3d, 0x4f, 0xd7, 0x28, 0x4f, 0x41, 0x29, 0x3d, - 0x4f, 0x57, 0xb4, 0x20, 0x28, 0x4f, 0x4e, 0x4c, 0x59, 0x29, 0x3d, 0x4f, - 0x57, 0x34, 0x4e, 0x4c, 0x49, 0xd9, 0x20, 0x28, 0x4f, 0x4e, 0x43, 0x45, - 0x29, 0x3d, 0x57, 0x41, 0x48, 0x34, 0x4e, 0xd3, 0x28, 0x4f, 0x4e, 0x27, - 0x54, 0x29, 0x3d, 0x4f, 0x57, 0x34, 0x4e, 0xd4, 0x43, 0x28, 0x4f, 0x29, - 0x4e, 0x3d, 0x41, 0xc1, 0x28, 0x4f, 0x29, 0x4e, 0x47, 0x3d, 0x41, 0xcf, - 0x20, 0x3a, 0x5e, 0x28, 0x4f, 0x29, 0x4e, 0x3d, 0x41, 0xc8, 0x49, 0x28, - 0x4f, 0x4e, 0x29, 0x3d, 0x55, 0xce, 0x23, 0x3a, 0x28, 0x4f, 0x4e, 0x29, - 0x3d, 0x55, 0xce, 0x23, 0x5e, 0x28, 0x4f, 0x4e, 0x29, 0x3d, 0x55, 0xce, - 0x28, 0x4f, 0x29, 0x53, 0x54, 0x3d, 0x4f, 0xd7, 0x28, 0x4f, 0x46, 0x29, - 0x5e, 0x3d, 0x41, 0x4f, 0x34, 0xc6, 0x28, 0x4f, 0x54, 0x48, 0x45, 0x52, - 0x29, 0x3d, 0x41, 0x48, 0x35, 0x44, 0x48, 0x45, 0xd2, 0x52, 0x28, 0x4f, - 0x29, 0x42, 0x3d, 0x52, 0x41, 0xc1, 0x5e, 0x52, 0x28, 0x4f, 0x29, 0x3a, - 0x23, 0x3d, 0x4f, 0x57, 0xb5, 0x28, 0x4f, 0x53, 0x53, 0x29, 0x20, 0x3d, - 0x41, 0x4f, 0x35, 0xd3, 0x23, 0x3a, 0x5e, 0x28, 0x4f, 0x4d, 0x29, 0x3d, - 0x41, 0x48, 0xcd, 0x28, 0x4f, 0x29, 0x3d, 0x41, 0xc1, 0x5d, 0xd0, 0x20, - 0x28, 0x50, 0x29, 0x20, 0x3d, 0x50, 0x49, 0x59, 0xb4, 0x28, 0x50, 0x48, - 0x29, 0x3d, 0xc6, 0x28, 0x50, 0x45, 0x4f, 0x50, 0x4c, 0x29, 0x3d, 0x50, - 0x49, 0x59, 0x35, 0x50, 0x55, 0xcc, 0x28, 0x50, 0x4f, 0x57, 0x29, 0x3d, - 0x50, 0x41, 0x57, 0xb4, 0x28, 0x50, 0x55, 0x54, 0x29, 0x20, 0x3d, 0x50, - 0x55, 0x48, 0xd4, 0x28, 0x50, 0x29, 0x50, 0xbd, 0x28, 0x50, 0x29, 0x53, - 0xbd, 0x28, 0x50, 0x29, 0x4e, 0xbd, 0x28, 0x50, 0x52, 0x4f, 0x46, 0x2e, - 0x29, 0x3d, 0x50, 0x52, 0x4f, 0x48, 0x46, 0x45, 0x48, 0x34, 0x53, 0x45, - 0xd2, 0x28, 0x50, 0x29, 0x3d, 0xd0, 0x5d, 0xd1, 0x20, 0x28, 0x51, 0x29, - 0x20, 0x3d, 0x4b, 0x59, 0x55, 0x57, 0xb4, 0x28, 0x51, 0x55, 0x41, 0x52, - 0x29, 0x3d, 0x4b, 0x57, 0x4f, 0x48, 0x35, 0xd2, 0x28, 0x51, 0x55, 0x29, - 0x3d, 0x4b, 0xd7, 0x28, 0x51, 0x29, 0x3d, 0xcb, 0x5d, 0xd2, 0x20, 0x28, - 0x52, 0x29, 0x20, 0x3d, 0x41, 0x41, 0x35, 0xd2, 0x20, 0x28, 0x52, 0x45, - 0x29, 0x5e, 0x23, 0x3d, 0x52, 0x49, 0xd9, 0x28, 0x52, 0x29, 0x52, 0xbd, - 0x28, 0x52, 0x29, 0x3d, 0xd2, 0x5d, 0xd3, 0x20, 0x28, 0x53, 0x29, 0x20, - 0x3d, 0x45, 0x48, 0x34, 0xd3, 0x28, 0x53, 0x48, 0x29, 0x3d, 0x53, 0xc8, - 0x23, 0x28, 0x53, 0x49, 0x4f, 0x4e, 0x29, 0x3d, 0x5a, 0x48, 0x55, 0xce, - 0x28, 0x53, 0x4f, 0x4d, 0x45, 0x29, 0x3d, 0x53, 0x41, 0x48, 0xcd, 0x23, - 0x28, 0x53, 0x55, 0x52, 0x29, 0x23, 0x3d, 0x5a, 0x48, 0x45, 0xd2, 0x28, - 0x53, 0x55, 0x52, 0x29, 0x23, 0x3d, 0x53, 0x48, 0x45, 0xd2, 0x23, 0x28, - 0x53, 0x55, 0x29, 0x23, 0x3d, 0x5a, 0x48, 0x55, 0xd7, 0x23, 0x28, 0x53, - 0x53, 0x55, 0x29, 0x23, 0x3d, 0x53, 0x48, 0x55, 0xd7, 0x23, 0x28, 0x53, - 0x45, 0x44, 0x29, 0x3d, 0x5a, 0xc4, 0x23, 0x28, 0x53, 0x29, 0x23, 0x3d, - 0xda, 0x28, 0x53, 0x41, 0x49, 0x44, 0x29, 0x3d, 0x53, 0x45, 0x48, 0xc4, - 0x5e, 0x28, 0x53, 0x49, 0x4f, 0x4e, 0x29, 0x3d, 0x53, 0x48, 0x55, 0xce, - 0x28, 0x53, 0x29, 0x53, 0xbd, 0x2e, 0x28, 0x53, 0x29, 0x20, 0x3d, 0xda, - 0x23, 0x3a, 0x2e, 0x45, 0x28, 0x53, 0x29, 0x20, 0x3d, 0xda, 0x23, 0x3a, - 0x5e, 0x23, 0x28, 0x53, 0x29, 0x20, 0x3d, 0xd3, 0x55, 0x28, 0x53, 0x29, - 0x20, 0x3d, 0xd3, 0x20, 0x3a, 0x23, 0x28, 0x53, 0x29, 0x20, 0x3d, 0xda, - 0x23, 0x23, 0x28, 0x53, 0x29, 0x20, 0x3d, 0xda, 0x20, 0x28, 0x53, 0x43, - 0x48, 0x29, 0x3d, 0x53, 0xcb, 0x28, 0x53, 0x29, 0x43, 0x2b, 0xbd, 0x23, - 0x28, 0x53, 0x4d, 0x29, 0x3d, 0x5a, 0x55, 0xcd, 0x23, 0x28, 0x53, 0x4e, - 0x29, 0x27, 0x3d, 0x5a, 0x55, 0xcd, 0x28, 0x53, 0x54, 0x4c, 0x45, 0x29, - 0x3d, 0x53, 0x55, 0xcc, 0x28, 0x53, 0x29, 0x3d, 0xd3, 0x5d, 0xd4, 0x20, - 0x28, 0x54, 0x29, 0x20, 0x3d, 0x54, 0x49, 0x59, 0xb4, 0x20, 0x28, 0x54, - 0x48, 0x45, 0x29, 0x20, 0x23, 0x3d, 0x44, 0x48, 0x49, 0xd9, 0x20, 0x28, - 0x54, 0x48, 0x45, 0x29, 0x20, 0x3d, 0x44, 0x48, 0x41, 0xd8, 0x28, 0x54, - 0x4f, 0x29, 0x20, 0x3d, 0x54, 0x55, 0xd8, 0x20, 0x28, 0x54, 0x48, 0x41, - 0x54, 0x29, 0x3d, 0x44, 0x48, 0x41, 0x45, 0xd4, 0x20, 0x28, 0x54, 0x48, - 0x49, 0x53, 0x29, 0x20, 0x3d, 0x44, 0x48, 0x49, 0x48, 0xd3, 0x20, 0x28, - 0x54, 0x48, 0x45, 0x59, 0x29, 0x3d, 0x44, 0x48, 0x45, 0xd9, 0x20, 0x28, - 0x54, 0x48, 0x45, 0x52, 0x45, 0x29, 0x3d, 0x44, 0x48, 0x45, 0x48, 0xd2, - 0x28, 0x54, 0x48, 0x45, 0x52, 0x29, 0x3d, 0x44, 0x48, 0x45, 0xd2, 0x28, - 0x54, 0x48, 0x45, 0x49, 0x52, 0x29, 0x3d, 0x44, 0x48, 0x45, 0x48, 0xd2, - 0x20, 0x28, 0x54, 0x48, 0x41, 0x4e, 0x29, 0x20, 0x3d, 0x44, 0x48, 0x41, - 0x45, 0xce, 0x20, 0x28, 0x54, 0x48, 0x45, 0x4d, 0x29, 0x20, 0x3d, 0x44, - 0x48, 0x41, 0x45, 0xce, 0x28, 0x54, 0x48, 0x45, 0x53, 0x45, 0x29, 0x20, - 0x3d, 0x44, 0x48, 0x49, 0x59, 0xda, 0x20, 0x28, 0x54, 0x48, 0x45, 0x4e, - 0x29, 0x3d, 0x44, 0x48, 0x45, 0x48, 0xce, 0x28, 0x54, 0x48, 0x52, 0x4f, - 0x55, 0x47, 0x48, 0x29, 0x3d, 0x54, 0x48, 0x52, 0x55, 0x57, 0xb4, 0x28, - 0x54, 0x48, 0x4f, 0x53, 0x45, 0x29, 0x3d, 0x44, 0x48, 0x4f, 0x48, 0xda, - 0x28, 0x54, 0x48, 0x4f, 0x55, 0x47, 0x48, 0x29, 0x20, 0x3d, 0x44, 0x48, - 0x4f, 0xd7, 0x28, 0x54, 0x4f, 0x44, 0x41, 0x59, 0x29, 0x3d, 0x54, 0x55, - 0x58, 0x44, 0x45, 0xd9, 0x28, 0x54, 0x4f, 0x4d, 0x4f, 0x29, 0x52, 0x52, - 0x4f, 0x57, 0x3d, 0x54, 0x55, 0x4d, 0x41, 0x41, 0xb5, 0x28, 0x54, 0x4f, - 0x29, 0x54, 0x41, 0x4c, 0x3d, 0x54, 0x4f, 0x57, 0xb5, 0x20, 0x28, 0x54, - 0x48, 0x55, 0x53, 0x29, 0x3d, 0x44, 0x48, 0x41, 0x48, 0x34, 0xd3, 0x28, - 0x54, 0x48, 0x29, 0x3d, 0x54, 0xc8, 0x23, 0x3a, 0x28, 0x54, 0x45, 0x44, - 0x29, 0x3d, 0x54, 0x49, 0x58, 0xc4, 0x53, 0x28, 0x54, 0x49, 0x29, 0x23, - 0x4e, 0x3d, 0x43, 0xc8, 0x28, 0x54, 0x49, 0x29, 0x4f, 0x3d, 0x53, 0xc8, - 0x28, 0x54, 0x49, 0x29, 0x41, 0x3d, 0x53, 0xc8, 0x28, 0x54, 0x49, 0x45, - 0x4e, 0x29, 0x3d, 0x53, 0x48, 0x55, 0xce, 0x28, 0x54, 0x55, 0x52, 0x29, - 0x23, 0x3d, 0x43, 0x48, 0x45, 0xd2, 0x28, 0x54, 0x55, 0x29, 0x41, 0x3d, - 0x43, 0x48, 0x55, 0xd7, 0x20, 0x28, 0x54, 0x57, 0x4f, 0x29, 0x3d, 0x54, - 0x55, 0xd7, 0x26, 0x28, 0x54, 0x29, 0x45, 0x4e, 0x20, 0xbd, 0x28, 0x54, - 0x29, 0x3d, 0xd4, 0x5d, 0xd5, 0x20, 0x28, 0x55, 0x29, 0x20, 0x3d, 0x59, - 0x55, 0x57, 0xb4, 0x20, 0x28, 0x55, 0x4e, 0x29, 0x49, 0x3d, 0x59, 0x55, - 0x57, 0xce, 0x20, 0x28, 0x55, 0x4e, 0x29, 0x3d, 0x41, 0x48, 0xce, 0x20, - 0x28, 0x55, 0x50, 0x4f, 0x4e, 0x29, 0x3d, 0x41, 0x58, 0x50, 0x41, 0x4f, - 0xce, 0x40, 0x28, 0x55, 0x52, 0x29, 0x23, 0x3d, 0x55, 0x48, 0x34, 0xd2, - 0x28, 0x55, 0x52, 0x29, 0x23, 0x3d, 0x59, 0x55, 0x48, 0x34, 0xd2, 0x28, - 0x55, 0x52, 0x29, 0x3d, 0x45, 0xd2, 0x28, 0x55, 0x29, 0x5e, 0x20, 0x3d, - 0x41, 0xc8, 0x28, 0x55, 0x29, 0x5e, 0x5e, 0x3d, 0x41, 0x48, 0xb5, 0x28, - 0x55, 0x59, 0x29, 0x3d, 0x41, 0x59, 0xb5, 0x20, 0x47, 0x28, 0x55, 0x29, - 0x23, 0xbd, 0x47, 0x28, 0x55, 0x29, 0x25, 0xbd, 0x47, 0x28, 0x55, 0x29, - 0x23, 0x3d, 0xd7, 0x23, 0x4e, 0x28, 0x55, 0x29, 0x3d, 0x59, 0x55, 0xd7, - 0x40, 0x28, 0x55, 0x29, 0x3d, 0x55, 0xd7, 0x28, 0x55, 0x29, 0x3d, 0x59, - 0x55, 0xd7, 0x5d, 0xd6, 0x20, 0x28, 0x56, 0x29, 0x20, 0x3d, 0x56, 0x49, - 0x59, 0xb4, 0x28, 0x56, 0x49, 0x45, 0x57, 0x29, 0x3d, 0x56, 0x59, 0x55, - 0x57, 0xb5, 0x28, 0x56, 0x29, 0x3d, 0xd6, 0x5d, 0xd7, 0x20, 0x28, 0x57, - 0x29, 0x20, 0x3d, 0x44, 0x41, 0x48, 0x34, 0x42, 0x55, 0x4c, 0x59, 0x55, - 0xd7, 0x20, 0x28, 0x57, 0x45, 0x52, 0x45, 0x29, 0x3d, 0x57, 0x45, 0xd2, - 0x28, 0x57, 0x41, 0x29, 0x53, 0x48, 0x3d, 0x57, 0x41, 0xc1, 0x28, 0x57, - 0x41, 0x29, 0x53, 0x54, 0x3d, 0x57, 0x45, 0xd9, 0x28, 0x57, 0x41, 0x29, - 0x53, 0x3d, 0x57, 0x41, 0xc8, 0x28, 0x57, 0x41, 0x29, 0x54, 0x3d, 0x57, - 0x41, 0xc1, 0x28, 0x57, 0x48, 0x45, 0x52, 0x45, 0x29, 0x3d, 0x57, 0x48, - 0x45, 0x48, 0xd2, 0x28, 0x57, 0x48, 0x41, 0x54, 0x29, 0x3d, 0x57, 0x48, - 0x41, 0x48, 0xd4, 0x28, 0x57, 0x48, 0x4f, 0x4c, 0x29, 0x3d, 0x2f, 0x48, - 0x4f, 0x57, 0xcc, 0x28, 0x57, 0x48, 0x4f, 0x29, 0x3d, 0x2f, 0x48, 0x55, - 0xd7, 0x28, 0x57, 0x48, 0x29, 0x3d, 0x57, 0xc8, 0x28, 0x57, 0x41, 0x52, - 0x29, 0x23, 0x3d, 0x57, 0x45, 0x48, 0xd2, 0x28, 0x57, 0x41, 0x52, 0x29, - 0x3d, 0x57, 0x41, 0x4f, 0xd2, 0x28, 0x57, 0x4f, 0x52, 0x29, 0x5e, 0x3d, - 0x57, 0x45, 0xd2, 0x28, 0x57, 0x52, 0x29, 0x3d, 0xd2, 0x28, 0x57, 0x4f, - 0x4d, 0x29, 0x41, 0x3d, 0x57, 0x55, 0x48, 0xcd, 0x28, 0x57, 0x4f, 0x4d, - 0x29, 0x45, 0x3d, 0x57, 0x49, 0x48, 0xcd, 0x28, 0x57, 0x45, 0x41, 0x29, - 0x52, 0x3d, 0x57, 0x45, 0xc8, 0x28, 0x57, 0x41, 0x4e, 0x54, 0x29, 0x3d, - 0x57, 0x41, 0x41, 0x35, 0x4e, 0xd4, 0x41, 0x4e, 0x53, 0x28, 0x57, 0x45, - 0x52, 0x29, 0x3d, 0x45, 0xd2, 0x28, 0x57, 0x29, 0x3d, 0xd7, 0x5d, 0xd8, - 0x20, 0x28, 0x58, 0x29, 0x20, 0x3d, 0x45, 0x48, 0x34, 0x4b, 0xd2, 0x20, - 0x28, 0x58, 0x29, 0x3d, 0xda, 0x28, 0x58, 0x29, 0x3d, 0x4b, 0xd3, 0x5d, - 0xd9, 0x20, 0x28, 0x59, 0x29, 0x20, 0x3d, 0x57, 0x41, 0x59, 0xb4, 0x28, - 0x59, 0x4f, 0x55, 0x4e, 0x47, 0x29, 0x3d, 0x59, 0x41, 0x48, 0x4e, 0xd8, - 0x20, 0x28, 0x59, 0x4f, 0x55, 0x52, 0x29, 0x3d, 0x59, 0x4f, 0x48, 0xd2, - 0x20, 0x28, 0x59, 0x4f, 0x55, 0x29, 0x3d, 0x59, 0x55, 0xd7, 0x20, 0x28, - 0x59, 0x45, 0x53, 0x29, 0x3d, 0x59, 0x45, 0x48, 0xd3, 0x20, 0x28, 0x59, - 0x29, 0x3d, 0xd9, 0x46, 0x28, 0x59, 0x29, 0x3d, 0x41, 0xd9, 0x50, 0x53, - 0x28, 0x59, 0x43, 0x48, 0x29, 0x3d, 0x41, 0x59, 0xcb, 0x23, 0x3a, 0x5e, - 0x28, 0x59, 0x29, 0x3d, 0x49, 0xd9, 0x23, 0x3a, 0x5e, 0x28, 0x59, 0x29, - 0x49, 0x3d, 0x49, 0xd9, 0x20, 0x3a, 0x28, 0x59, 0x29, 0x20, 0x3d, 0x41, - 0xd9, 0x20, 0x3a, 0x28, 0x59, 0x29, 0x23, 0x3d, 0x41, 0xd9, 0x20, 0x3a, - 0x28, 0x59, 0x29, 0x5e, 0x2b, 0x3a, 0x23, 0x3d, 0x49, 0xc8, 0x20, 0x3a, - 0x28, 0x59, 0x29, 0x5e, 0x23, 0x3d, 0x41, 0xd9, 0x28, 0x59, 0x29, 0x3d, - 0x49, 0xc8, 0x5d, 0xda, 0x20, 0x28, 0x5a, 0x29, 0x20, 0x3d, 0x5a, 0x49, - 0x59, 0xb4, 0x28, 0x5a, 0x29, 0x3d, 0xda, 0xea, 0x7d, 0x7e, 0x7e, 0x7f, - 0x80, 0x81, 0x82, 0x82, 0x82, 0x84, 0x84, 0x84, 0x84, 0x84, 0x85, 0x87, - 0x87, 0x88, 0x88, 0x89, 0x8a, 0x8b, 0x8b, 0x8c, 0x8c, 0x8c, 0x00, 0x00, - 0x00, 0x95, 0xf7, 0xa2, 0x39, 0xc5, 0x06, 0x7e, 0xc7, 0x26, 0x37, 0x4e, - 0x91, 0xf1, 0x55, 0xa1, 0xfe, 0x24, 0x45, 0x2d, 0xa7, 0x36, 0x53, 0x2e, - 0x47, 0xda, 0x00, 0x00, 0x50, 0x61, 0x72, 0x73, 0x65, 0x72, 0x32, 0x00, - 0x25, 0x64, 0x3a, 0x20, 0x25, 0x63, 0x25, 0x63, 0x0a, 0x00, 0x00, 0x00, - 0x52, 0x55, 0x4c, 0x45, 0x3a, 0x20, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, - 0x20, 0x57, 0x58, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, - 0x67, 0x20, 0x64, 0x69, 0x70, 0x68, 0x74, 0x6f, 0x6e, 0x67, 0x20, 0x4e, - 0x4f, 0x54, 0x20, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, - 0x20, 0x49, 0x59, 0x20, 0x73, 0x6f, 0x75, 0x6e, 0x64, 0x00, 0x00, 0x00, - 0x52, 0x55, 0x4c, 0x45, 0x3a, 0x20, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, - 0x20, 0x59, 0x58, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, - 0x67, 0x20, 0x64, 0x69, 0x70, 0x68, 0x74, 0x6f, 0x6e, 0x67, 0x20, 0x65, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20, 0x49, 0x59, 0x20, - 0x73, 0x6f, 0x75, 0x6e, 0x64, 0x00, 0x00, 0x00, 0x52, 0x55, 0x4c, 0x45, - 0x3a, 0x20, 0x55, 0x4c, 0x20, 0x2d, 0x3e, 0x20, 0x41, 0x58, 0x20, 0x4c, - 0x00, 0x00, 0x00, 0x00, 0x52, 0x55, 0x4c, 0x45, 0x3a, 0x20, 0x55, 0x4d, - 0x20, 0x2d, 0x3e, 0x20, 0x41, 0x58, 0x20, 0x4d, 0x00, 0x00, 0x00, 0x00, - 0x52, 0x55, 0x4c, 0x45, 0x3a, 0x20, 0x55, 0x4e, 0x20, 0x2d, 0x3e, 0x20, - 0x41, 0x58, 0x20, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x52, 0x55, 0x4c, 0x45, - 0x3a, 0x20, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x20, 0x67, 0x6c, 0x6f, - 0x74, 0x74, 0x61, 0x6c, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x20, 0x62, 0x65, - 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x73, 0x74, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x76, 0x6f, 0x77, 0x65, 0x6c, - 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x6d, 0x00, 0x00, 0x00, 0x52, 0x55, 0x4c, 0x45, 0x3a, 0x20, 0x54, 0x20, - 0x52, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x48, 0x20, 0x52, 0x00, 0x00, 0x00, - 0x52, 0x55, 0x4c, 0x45, 0x3a, 0x20, 0x44, 0x20, 0x52, 0x20, 0x2d, 0x3e, - 0x20, 0x4a, 0x20, 0x52, 0x00, 0x00, 0x00, 0x00, 0x52, 0x55, 0x4c, 0x45, - 0x3a, 0x20, 0x52, 0x20, 0x2d, 0x3e, 0x20, 0x52, 0x58, 0x00, 0x00, 0x00, - 0x52, 0x55, 0x4c, 0x45, 0x3a, 0x20, 0x3c, 0x56, 0x4f, 0x57, 0x45, 0x4c, - 0x3e, 0x20, 0x4c, 0x20, 0x2d, 0x3e, 0x20, 0x3c, 0x56, 0x4f, 0x57, 0x45, - 0x4c, 0x3e, 0x20, 0x4c, 0x58, 0x00, 0x00, 0x00, 0x52, 0x55, 0x4c, 0x45, - 0x3a, 0x20, 0x47, 0x20, 0x53, 0x20, 0x2d, 0x3e, 0x20, 0x47, 0x20, 0x5a, - 0x00, 0x00, 0x00, 0x00, 0x52, 0x55, 0x4c, 0x45, 0x3a, 0x20, 0x4b, 0x20, - 0x3c, 0x56, 0x4f, 0x57, 0x45, 0x4c, 0x20, 0x4f, 0x52, 0x20, 0x44, 0x49, - 0x50, 0x48, 0x54, 0x4f, 0x4e, 0x47, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x45, - 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x20, 0x57, 0x49, 0x54, 0x48, 0x20, 0x49, - 0x59, 0x3e, 0x20, 0x2d, 0x3e, 0x20, 0x4b, 0x58, 0x20, 0x3c, 0x56, 0x4f, - 0x57, 0x45, 0x4c, 0x20, 0x4f, 0x52, 0x20, 0x44, 0x49, 0x50, 0x48, 0x54, - 0x4f, 0x4e, 0x47, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x45, 0x4e, 0x44, 0x49, - 0x4e, 0x47, 0x20, 0x57, 0x49, 0x54, 0x48, 0x20, 0x49, 0x59, 0x3e, 0x00, - 0x52, 0x55, 0x4c, 0x45, 0x3a, 0x20, 0x47, 0x20, 0x3c, 0x56, 0x4f, 0x57, - 0x45, 0x4c, 0x20, 0x4f, 0x52, 0x20, 0x44, 0x49, 0x50, 0x48, 0x54, 0x4f, - 0x4e, 0x47, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x45, 0x4e, 0x44, 0x49, 0x4e, - 0x47, 0x20, 0x57, 0x49, 0x54, 0x48, 0x20, 0x49, 0x59, 0x3e, 0x20, 0x2d, - 0x3e, 0x20, 0x47, 0x58, 0x20, 0x3c, 0x56, 0x4f, 0x57, 0x45, 0x4c, 0x20, - 0x4f, 0x52, 0x20, 0x44, 0x49, 0x50, 0x48, 0x54, 0x4f, 0x4e, 0x47, 0x20, - 0x4e, 0x4f, 0x54, 0x20, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x20, 0x57, - 0x49, 0x54, 0x48, 0x20, 0x49, 0x59, 0x3e, 0x00, 0x52, 0x55, 0x4c, 0x45, - 0x3a, 0x20, 0x53, 0x2a, 0x20, 0x25, 0x63, 0x25, 0x63, 0x20, 0x2d, 0x3e, - 0x20, 0x53, 0x2a, 0x20, 0x25, 0x63, 0x25, 0x63, 0x0a, 0x00, 0x00, 0x00, - 0x52, 0x55, 0x4c, 0x45, 0x3a, 0x20, 0x3c, 0x41, 0x4c, 0x56, 0x45, 0x4f, - 0x4c, 0x41, 0x52, 0x3e, 0x20, 0x55, 0x57, 0x20, 0x2d, 0x3e, 0x20, 0x3c, - 0x41, 0x4c, 0x56, 0x45, 0x4f, 0x4c, 0x41, 0x52, 0x3e, 0x20, 0x55, 0x58, - 0x00, 0x00, 0x00, 0x00, 0x43, 0x48, 0x20, 0x2d, 0x3e, 0x20, 0x43, 0x48, - 0x20, 0x43, 0x48, 0x2b, 0x31, 0x00, 0x00, 0x00, 0x4a, 0x20, 0x2d, 0x3e, - 0x20, 0x4a, 0x20, 0x4a, 0x2b, 0x31, 0x00, 0x00, 0x52, 0x55, 0x4c, 0x45, - 0x3a, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x20, 0x54, 0x20, 0x6f, - 0x72, 0x20, 0x44, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, - 0x67, 0x20, 0x76, 0x6f, 0x77, 0x65, 0x6c, 0x20, 0x6f, 0x72, 0x20, 0x45, - 0x52, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x70, 0x61, 0x75, 0x73, 0x65, 0x20, - 0x2d, 0x3e, 0x20, 0x44, 0x58, 0x00, 0x00, 0x00, 0x52, 0x55, 0x4c, 0x45, - 0x3a, 0x20, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x3c, - 0x46, 0x52, 0x49, 0x43, 0x41, 0x54, 0x49, 0x56, 0x45, 0x3e, 0x20, 0x6f, - 0x72, 0x20, 0x3c, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x44, 0x3e, 0x20, 0x62, - 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x3c, 0x56, 0x4f, 0x57, 0x45, - 0x4c, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x50, 0x55, 0x4e, 0x43, - 0x54, 0x55, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x3e, 0x20, 0x62, 0x79, 0x20, - 0x31, 0x2e, 0x35, 0x00, 0x50, 0x52, 0x45, 0x00, 0x70, 0x68, 0x6f, 0x6e, - 0x65, 0x6d, 0x65, 0x20, 0x25, 0x64, 0x20, 0x28, 0x25, 0x63, 0x25, 0x63, - 0x29, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x25, 0x64, 0x0a, - 0x00, 0x00, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, - 0x52, 0x55, 0x4c, 0x45, 0x3a, 0x20, 0x3c, 0x56, 0x4f, 0x57, 0x45, 0x4c, - 0x3e, 0x20, 0x3c, 0x52, 0x58, 0x20, 0x7c, 0x20, 0x4c, 0x58, 0x3e, 0x20, - 0x3c, 0x43, 0x4f, 0x4e, 0x53, 0x4f, 0x4e, 0x41, 0x4e, 0x54, 0x3e, 0x20, - 0x2d, 0x20, 0x64, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x20, 0x6c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x62, 0x79, 0x20, 0x31, 0x00, 0x00, - 0x52, 0x55, 0x4c, 0x45, 0x3a, 0x20, 0x3c, 0x56, 0x4f, 0x57, 0x45, 0x4c, - 0x3e, 0x20, 0x3c, 0x55, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x44, 0x20, - 0x50, 0x4c, 0x4f, 0x53, 0x49, 0x56, 0x45, 0x3e, 0x20, 0x2d, 0x20, 0x64, - 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x20, 0x76, 0x6f, 0x77, 0x65, - 0x6c, 0x20, 0x62, 0x79, 0x20, 0x31, 0x2f, 0x38, 0x74, 0x68, 0x00, 0x00, - 0x52, 0x55, 0x4c, 0x45, 0x3a, 0x20, 0x3c, 0x56, 0x4f, 0x57, 0x45, 0x4c, - 0x3e, 0x20, 0x3c, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x44, 0x20, 0x43, 0x4f, - 0x4e, 0x53, 0x4f, 0x4e, 0x41, 0x4e, 0x54, 0x3e, 0x20, 0x2d, 0x20, 0x69, - 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x20, 0x76, 0x6f, 0x77, 0x65, - 0x6c, 0x20, 0x62, 0x79, 0x20, 0x31, 0x2f, 0x32, 0x20, 0x2b, 0x20, 0x31, - 0x00, 0x00, 0x00, 0x00, 0x52, 0x55, 0x4c, 0x45, 0x3a, 0x20, 0x3c, 0x4e, - 0x41, 0x53, 0x41, 0x4c, 0x3e, 0x20, 0x3c, 0x53, 0x54, 0x4f, 0x50, 0x20, - 0x43, 0x4f, 0x4e, 0x53, 0x4f, 0x4e, 0x41, 0x4e, 0x54, 0x3e, 0x20, 0x2d, - 0x20, 0x73, 0x65, 0x74, 0x20, 0x6e, 0x61, 0x73, 0x61, 0x6c, 0x20, 0x3d, - 0x20, 0x35, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6e, 0x61, 0x6e, - 0x74, 0x20, 0x3d, 0x20, 0x36, 0x00, 0x00, 0x00, 0x52, 0x55, 0x4c, 0x45, - 0x3a, 0x20, 0x3c, 0x55, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x44, 0x20, - 0x53, 0x54, 0x4f, 0x50, 0x20, 0x43, 0x4f, 0x4e, 0x53, 0x4f, 0x4e, 0x41, - 0x4e, 0x54, 0x3e, 0x20, 0x7b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x20, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x63, 0x65, 0x7d, 0x20, 0x3c, - 0x53, 0x54, 0x4f, 0x50, 0x20, 0x43, 0x4f, 0x4e, 0x53, 0x4f, 0x4e, 0x41, - 0x4e, 0x54, 0x3e, 0x20, 0x2d, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x65, - 0x6e, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x74, 0x6f, 0x20, 0x31, 0x2f, - 0x32, 0x20, 0x2b, 0x20, 0x31, 0x00, 0x00, 0x00, 0x52, 0x55, 0x4c, 0x45, - 0x3a, 0x20, 0x3c, 0x4c, 0x49, 0x51, 0x55, 0x49, 0x44, 0x20, 0x43, 0x4f, - 0x4e, 0x53, 0x4f, 0x4e, 0x41, 0x4e, 0x54, 0x3e, 0x20, 0x3c, 0x44, 0x49, - 0x50, 0x48, 0x54, 0x4f, 0x4e, 0x47, 0x3e, 0x20, 0x2d, 0x20, 0x64, 0x65, - 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x20, 0x62, 0x79, 0x20, 0x32, 0x00, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x00, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x77, 0x72, 0x69, 0x74, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x54, 0x49, 0x43, 0x3f, 0x28, 0x2c, 0x1f, - 0x25, 0x2d, 0x49, 0x31, 0x24, 0x1e, 0x33, 0x25, 0x1d, 0x45, 0x18, 0x32, - 0x1e, 0x18, 0x53, 0x2e, 0x36, 0x56, 0x00, 0x00, 0x13, 0x1b, 0x15, 0x1b, - 0x12, 0x0d, 0x00, 0x00, 0x48, 0x27, 0x1f, 0x2b, 0x1e, 0x22, 0x00, 0x00, - 0x25, 0x64, 0x5b, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x53, 0x70, 0x65, 0x65, - 0x64, 0x00, 0x00, 0x00, 0x40, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x00, 0x00, - 0x4d, 0x6f, 0x75, 0x74, 0x68, 0x00, 0x00, 0x00, 0x54, 0x68, 0x72, 0x6f, - 0x61, 0x74, 0x00, 0x00, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x52, 0x4f, 0x00, - 0x54, 0x45, 0x43, 0x48, 0x4e, 0x4f, 0x00, 0x00, 0x4d, 0x4f, 0x44, 0x55, - 0x4c, 0x41, 0x52, 0x00, 0x53, 0x59, 0x4e, 0x54, 0x48, 0x45, 0x53, 0x49, - 0x5a, 0x45, 0x52, 0x00, 0x4f, 0x53, 0x43, 0x49, 0x4c, 0x4c, 0x41, 0x54, - 0x4f, 0x52, 0x00, 0x00, 0x45, 0x55, 0x52, 0x4f, 0x52, 0x41, 0x43, 0x4b, - 0x00, 0x00, 0x00, 0x00, 0x52, 0x4e, 0x44, 0x5f, 0x30, 0x2d, 0x39, 0x00 -}; -unsigned int __SPEECH_SAM_bin_len = 27660; diff --git a/app/SYNTH/Open303.bin b/app/SYNTH/Open303.bin new file mode 100644 index 0000000..9b3ae65 Binary files /dev/null and b/app/SYNTH/Open303.bin differ diff --git a/app/SYNTH/Open303.cpp b/app/SYNTH/Open303.cpp new file mode 100644 index 0000000..584bb93 --- /dev/null +++ b/app/SYNTH/Open303.cpp @@ -0,0 +1,202 @@ +// Copyright (C)2022 - Eduard Heidt +// +// Author: Eduard Heidt (eh2k@gmx.de) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// + +#include "../squares-and-circles-api.h" + +#undef SAMPLE_RATE +#define protected public + +#include "open303/src/rosic_AnalogEnvelope.cpp" +#include "open303/src/rosic_EllipticQuarterBandFilter.cpp" +#include "open303/src/rosic_DecayEnvelope.cpp" +#include "open303/src/rosic_LeakyIntegrator.cpp" +#include "open303/src/wavetable_gen/rosic_MipMappedWaveTable.cpp" +#include "open303/src/wavetable_gen/rosic_FourierTransformerRadix2.cpp" +#include "open303/src/wavetable_gen/rosic_Complex.cpp" +#include "open303/src/rosic_RealFunctions.cpp" +#include "open303/src/rosic_Open303.cpp" +#include "open303/src/rosic_FunctionTemplates.cpp" +#include "open303/src/GlobalFunctions.cpp" +#include "open303/src/rosic_BlendOscillator.cpp" +#include "open303/src/rosic_BiquadFilter.cpp" +#include "open303/src/rosic_NumberManipulations.cpp" +#include "open303/src/sequencer/rosic_AcidSequencer.cpp" +#include "open303/src/sequencer/rosic_AcidPattern.cpp" +#include "open303/src/rosic_OnePoleFilter.cpp" +#include "open303/src/rosic_MidiNoteEvent.cpp" +#include "open303/src/rosic_TeeBeeFilter.cpp" + +#include "stmlib/stmlib.h" +#include "open303/src/rosic_Open303.h" +#include "open303/src/wavetable_gen/rosic_MipMappedWaveTable.h" + +// static __attribute__((aligned(32))) uint8_t open303_mem[sizeof(rosic::Open303)]; +static rosic::WaveTable square_wave; +static rosic::Open303 open303(&square_wave, &square_wave); + +static float _pitch = -1; +static float _acc = 1.0f; +static float _cutoff = 0.25f; +static float _res = 0.33f; +static float _env = 0.25f; +static float _dec = 0.5f; +static float _note; +static uint8_t _waveform = 1; +static bool _gate; + +void engine::setup() +{ + engine::addParam(V_OCT, &_pitch); // pitch is summed with CV and quantized + engine::addParam("Acc", &_acc); + engine::addParam("Cutoff", &_cutoff); + engine::addParam("Reso", &_res); + engine::addParam("EnvMod", &_env); + engine::addParam("Dec", &_dec); + + // param[6].init("WAVEFORM", &_waveform, _waveform, 0, 1); + // param[6].print_value = [&](char *val) + // { + // sprintf(val, _waveform ? "SQR" : "SAW"); + // }; + + // square_wave = (uint8_t *)malloc(sizeof(rosic::WaveTable)); + rosic::MipMappedWaveTable tmp; + tmp.fillWithSquare303(); + tmp.generateMipMap(square_wave); + // open303.oscillator.setWaveTables(_square, _square); + + open303.setSampleRate(SAMPLE_RATE, 1); + open303.setWaveform(_waveform); + open303.setTuning(open303.tuning); + open303.setAmpSustain(0); + open303.setAccentAttack(open303.accentAttack); + open303.setPitchBend(0); + open303.setSlideTime(open303.slideTime); + open303.setVolume(-12); + open303.filter.setMode(rosic::TeeBeeFilter::TB_303); +} + +void engine::process() +{ + open303.setWaveform(_waveform); + open303.setAccent(1.f + _acc * 99.f); + open303.setCutoff(rosic::linToExp(_cutoff, 0.0, 1.0, 314.0, 2394.0)); + open303.setResonance(1.f + _res * 99.f); + open303.setEnvMod(1.f + _env * 99.f); + open303.setDecay(rosic::linToExp(_dec, 0.0, 1.0, 200.0, 2000.0)); + if (_acc > 0) + open303.setAccentDecay(rosic::linToExp(_dec, 0.0, 1.0, 200.0, 2000.0)); + + _note = (float)DEFAULT_NOTE + 24 + engine::cv() * 12; + CONSTRAIN(_note, 0, 128); + + _gate |= engine::gate(); + + if (engine::trig() > 0) + open303.triggerNote(_note, _acc > 0); + else if (!engine::gate()) + { + open303.releaseNote(_note); + _gate = false; + } + else + open303.oscFreq = rosic::pitchToFreq(_note, open303.tuning); + + auto buffer = engine::outputBuffer<0>(); + for (int i = 0; i < FRAME_BUFFER_SIZE; i++) + buffer[i] = open303.getSample(); +} + +void engine::screensaver() +{ + static uint32_t _r = 0; + static const uint8_t _screenSaver[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, //> + 0x00, 0x80, 0x0f, 0xe0, 0x01, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x30, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x00, + 0x80, 0x01, 0x06, 0xc0, 0x00, 0x01, 0xc0, 0x00, 0x0f, 0xe0, 0x01, 0x03, + 0x60, 0x00, 0x0f, 0xe0, 0x01, 0x06, 0x30, 0x80, 0x1f, 0xf0, 0x03, 0x0c, + 0x10, 0x80, 0x1f, 0xf0, 0x03, 0x08, 0x18, 0x80, 0x1f, 0xf0, 0x03, 0x18, + 0x08, 0x80, 0x1f, 0xf0, 0x03, 0x10, 0x08, 0x80, 0x1f, 0xf0, 0x03, 0x30, + 0x04, 0x80, 0x1f, 0xf0, 0x03, 0x20, 0x04, 0x80, 0x1f, 0xf0, 0x03, 0x20, + 0x04, 0x80, 0x1f, 0xf0, 0x03, 0x60, 0x06, 0x00, 0x0f, 0xe0, 0x01, 0x40, + 0x02, 0x00, 0x0f, 0xe0, 0x01, 0x40, 0x02, 0x00, 0x06, 0xc0, 0x00, 0x40, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, + 0xe2, 0x07, 0x00, 0x00, 0xe0, 0x47, 0xc2, 0x03, 0x00, 0x00, 0xc0, 0x43, + 0x82, 0x01, 0x00, 0x00, 0x80, 0x41, 0x82, 0x01, 0x00, 0x00, 0x80, 0x41, + 0x86, 0x01, 0x00, 0x00, 0xc0, 0x60, 0x04, 0x03, 0x00, 0x00, 0xc0, 0x60, + 0x04, 0x07, 0x00, 0x00, 0xc0, 0x20, 0x0c, 0x06, 0x00, 0x00, 0x60, 0x20, + 0x08, 0x0e, 0x00, 0x00, 0x70, 0x30, 0x08, 0x1c, 0x00, 0x00, 0x30, 0x10, + 0x18, 0x38, 0x00, 0x00, 0x1c, 0x18, 0x10, 0x70, 0x00, 0x00, 0x0e, 0x08, + 0x20, 0xe0, 0x00, 0x00, 0x0f, 0x0c, 0x60, 0xc0, 0x03, 0xc0, 0x03, 0x06, + 0xc0, 0x00, 0x0f, 0xf0, 0x00, 0x02, 0x80, 0x01, 0xfc, 0x3f, 0x00, 0x01, + 0x00, 0x03, 0xe0, 0x07, 0xc0, 0x00, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00, + 0x00, 0x0c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x07, 0x00, 0x00, 0x80, 0x0f, 0xf0, 0x01, 0x00, + 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, //> + 0x00, 0xe0, 0xff, 0xff, 0x07, 0x00, 0x00, 0xf0, 0x0f, 0xe0, 0x1f, 0x00, + 0x00, 0xfc, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x7c, 0x00, + 0x00, 0x0f, 0x00, 0x00, 0xf0, 0x00, 0x80, 0x07, 0x06, 0xc0, 0xe0, 0x01, + 0xc0, 0x03, 0x0f, 0xe0, 0x81, 0x03, 0xe0, 0x81, 0x1f, 0xf0, 0x83, 0x07, + 0xf0, 0x80, 0x1f, 0xf0, 0x03, 0x0f, 0x78, 0xc0, 0x3f, 0xf8, 0x07, 0x1e, + 0x38, 0xc0, 0x3f, 0xf8, 0x07, 0x1c, 0x3c, 0xc0, 0x3f, 0xf8, 0x07, 0x3c, + 0x1c, 0xc0, 0x3f, 0xf8, 0x07, 0x38, 0x1c, 0xc0, 0x3f, 0xf8, 0x07, 0x78, + 0x0e, 0xc0, 0x3f, 0xf8, 0x07, 0x70, 0x0e, 0xc0, 0x3f, 0xf8, 0x07, 0x70, + 0x0e, 0xc0, 0x1f, 0xf0, 0x07, 0xf0, 0x0f, 0x80, 0x1f, 0xf0, 0x03, 0xe0, + 0x07, 0x80, 0x0f, 0xe0, 0x03, 0xe0, 0x07, 0x00, 0x0f, 0xe0, 0x01, 0xe0, + 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe7, 0x07, 0x00, 0x00, 0xe0, 0xe7, + 0xf7, 0x07, 0x00, 0x00, 0xe0, 0xef, 0xe7, 0x07, 0x00, 0x00, 0xe0, 0xe7, + 0xc7, 0x03, 0x00, 0x00, 0xc0, 0xe3, 0xc7, 0x03, 0x00, 0x00, 0xc0, 0xe3, + 0xcf, 0x03, 0x00, 0x00, 0xe0, 0xf1, 0x8e, 0x07, 0x00, 0x00, 0xe0, 0xf1, + 0x8e, 0x0f, 0x00, 0x00, 0xe0, 0x71, 0x1e, 0x0f, 0x00, 0x00, 0xf0, 0x70, + 0x1c, 0x1f, 0x00, 0x00, 0xf8, 0x78, 0x1c, 0x3e, 0x00, 0x00, 0x7c, 0x38, + 0x3c, 0x7c, 0x00, 0x00, 0x3e, 0x3c, 0x38, 0xf8, 0x00, 0x00, 0x1f, 0x1c, + 0x70, 0xf0, 0x03, 0xc0, 0x1f, 0x1e, 0xf0, 0xe0, 0x0f, 0xf0, 0x0f, 0x0f, + 0xe0, 0xc1, 0xff, 0xff, 0x03, 0x07, 0xc0, 0x03, 0xff, 0xff, 0xc0, 0x03, + 0x80, 0x07, 0xfc, 0x3f, 0xe0, 0x01, 0x00, 0x0f, 0xe0, 0x07, 0xf0, 0x00, + 0x00, 0x3e, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x3f, 0x00, + 0x00, 0xf0, 0x0f, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x07, 0x00, + 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00}; + + gfx::clearRect(0, 0, 128, 64); + + for (int i = 23; i > 0; i--) + { + if ((_r & (1 << i))) + gfx::drawCircle(64, 32, 26 + powf(i, 1.3f)); + } + + if (_gate) + { + _r |= 1; + gfx::drawXbm(40, 8, 48, 48, &_screenSaver[sizeof(_screenSaver) / 2]); + } + else + gfx::drawXbm(40, 8, 48, 48, &_screenSaver[0]); + + _r <<= 1; +} \ No newline at end of file diff --git a/app/SYNTH/Resonator.bin b/app/SYNTH/Resonator.bin new file mode 100644 index 0000000..5698918 Binary files /dev/null and b/app/SYNTH/Resonator.bin differ diff --git a/app/SYNTH/Resonator.cpp b/app/SYNTH/Resonator.cpp new file mode 100644 index 0000000..a8c910e --- /dev/null +++ b/app/SYNTH/Resonator.cpp @@ -0,0 +1,70 @@ +#include "../squares-and-circles-api.h" +#define FLASHMEM __attribute__((section(".text"))) +#undef ONE_POLE +#include "stmlib/stmlib.h" +#include "stmlib/dsp/units.cc" +#include "stmlib/utils/random.cc" + +#include "rings/resources.cc" +#include "rings/dsp/string.cc" +#include "rings/dsp/resonator.cc" +#include "rings/dsp/fm_voice.cc" +#include "rings/dsp/part.cc" +#include "rings/dsp/string_synth_part.cc" + +#include "rings/dsp/strummer.h" +#include + +static int32_t _model = rings::ResonatorModel::RESONATOR_MODEL_MODAL; +const char *_models[] = {"Modal", "Sympath.", "String", "FM", "StrQuant."}; +static rings::Strummer strummer = {}; + +static rings::Part part; +static rings::Patch patch = {}; +static rings::PerformanceState performance_state = {}; + +static float _pitch = 0; + +void engine::setup() +{ + patch.structure = 0.5f; + patch.brightness = 0.5f; + patch.damping = 0.5f; + patch.position = 0.5f; + strummer.Init(0.01f, SAMPLE_RATE / FRAME_BUFFER_SIZE); + + part.Init(); + part.set_model(rings::ResonatorModel::RESONATOR_MODEL_MODAL); + part.set_polyphony(rings::kMaxPolyphony); + + engine::addParam(V_OCT, &_pitch); // pitch is summed with CV and quantized + engine::addParam("@Model", &_model, rings::ResonatorModel::RESONATOR_MODEL_MODAL, + rings::ResonatorModel::RESONATOR_MODEL_SYMPATHETIC_STRING_QUANTIZED, _models); + + engine::addParam("Struc.", &patch.structure); + engine::addParam("Brighn.", &patch.brightness); + engine::addParam("Damping", &patch.damping); + engine::addParam("Pos", &patch.position); +} + +void engine::process() +{ + auto inputL = engine::inputBuffer<0>(); + auto bufferOut = engine::outputBuffer<0>(); + auto bufferAux = engine::outputBuffer<1>(); + + part.set_model((rings::ResonatorModel)_model); + + performance_state.strum = engine::trig() > 0; + performance_state.internal_strum = false; + performance_state.internal_note = true; + performance_state.internal_exciter = true; + performance_state.tonic = 0.2f; + performance_state.chord = 0; + performance_state.note = DEFAULT_NOTE; + + performance_state.note += engine::cv() * 12; + + strummer.Process(inputL, FRAME_BUFFER_SIZE, &performance_state); + part.Process(performance_state, patch, inputL, bufferOut, bufferAux, FRAME_BUFFER_SIZE); +} \ No newline at end of file diff --git a/app/build.sh b/app/build.sh index 7a3cb30..e86bc9f 100644 --- a/app/build.sh +++ b/app/build.sh @@ -1,3 +1,4 @@ +#!/usr/bin/bash set -e #-eo pipefail cd $(dirname $0) @@ -35,7 +36,7 @@ echo "BUILD_FLAGS:$BUILD_FLAGS" $mkmodule $X.cpp \ --no-opt \ --build_flags="-fsingle-precision-constant -DNDEBUG -O3 $BUILD_FLAGS -I. -I../lib/ " \ - --public-symbols="setup,process,draw,screensaver,__ui_event_handler" \ + --public-symbols="setup,process,draw,screensaver,__ui_event_handler,__midi_event_handler" \ --name="$NAME" > $X.log touch -d "$(date -R -r $X.cpp)" $X.bin diff --git a/app/index.json b/app/index.json new file mode 100644 index 0000000..c4174ce --- /dev/null +++ b/app/index.json @@ -0,0 +1,38 @@ +{ + "apps": [ + "NOISE/WhitePink.bin", + "NOISE/NES.bin", + "NOISE/808_squares.bin", + "MIDI/Monitor.bin", + "MIDI/Clock.bin", + + "DRUMS/TR909-HiHat.bin", + "DRUMS/TR909-Ride.bin", + "DRUMS/TR707.bin", + "DRUMS/TR707-HiHat.bin", + + "DRUMS/Vint.Samples.bin", + + "FX/Reverb.bin", + "FX/ReverbSC.bin", + "FX/Rev-Dattorro.bin", + + "DRUMS/Djembe.bin", + "SYNTH/Resonator.bin", + + "SPEECH/LPC.bin", + "SPEECH/SAM.bin", + + "FX/Delay.bin", + "FX/Gated-Reverb.bin", + "FX/Reverb-HP-LP.bin", + + "MIDI/VAx6.bin", + + "SYNTH/Open303.bin", + "FX/JU60_chorus.bin", + + "GND/Scope.bin", + "GND/FFT.bin" + ] +} \ No newline at end of file diff --git a/app/squares-and-circles-api.h b/app/squares-and-circles-api.h index e25ac26..1738389 100644 --- a/app/squares-and-circles-api.h +++ b/app/squares-and-circles-api.h @@ -1,7 +1,7 @@ -// Copyright (C)2023 - Eduard Heidt +// Copyright (C)2023 - E.Heidt // -// Author: Eduard Heidt (eh2k@gmx.de) +// Author: E.Heidt (eh2k@gmx.de) // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -69,7 +69,7 @@ #endif -#define V_OCT "_V_OCT" +#define V_OCT "V_OCT" #define IO_STEREOLIZE ".IO_STEREO" #ifdef __cplusplus @@ -78,6 +78,7 @@ // # pragma GCC poison _ZSt17__throw_bad_allocv // # pragma GCC poison new delete // # pragma GCC poison malloc new +// # pragma GCC poison virtual #endif #ifndef EMSCRIPTEN @@ -132,6 +133,9 @@ extern "C" uint32_t millis(); #ifndef FRAME_BUFFER_SIZE #define FRAME_BUFFER_SIZE 24 #endif +#ifndef PITCH_PER_OCTAVE +#define PITCH_PER_OCTAVE (12 << 7) +#endif #ifndef engine @@ -156,7 +160,9 @@ extern "C" extern uint32_t *__engine_props; extern float *__adc_voltage_f_p; - extern float **__dac_voltage_fp_p; + extern uint32_t __adc_count; + extern float *__dac_voltage_fp_p; + extern uint32_t __dac_count; extern uint32_t *__digital_inputs_u32_p; extern uint32_t *__bpm; @@ -175,11 +181,25 @@ extern "C" if (__ui_event_handler_ptr) __ui_event->handled = __ui_event_handler_ptr(__ui_event->type, __ui_event->control, __ui_event->value, __ui_event->mask); } + + extern struct + { + uint8_t type; + uint8_t key; + int16_t value; + } *__midi_event; + + void (*__midi_event_handler_ptr)() = nullptr; + void __midi_event_handler() + { + if (__midi_event_handler_ptr) + __midi_event_handler_ptr(); + } } namespace engine { - inline uint32_t t() { return *__accent; } + inline uint32_t t() { return *__t; } inline uint8_t clock() { return *__clock; } inline uint8_t trig() { return *__trig; } inline uint8_t gate() { return *__gate; } @@ -227,6 +247,12 @@ namespace engine __ui_event_handler(); __ui_event_handler_ptr = handler; } + + void __attribute__((weak)) onMidiNote(uint8_t key, uint8_t velocity); // NoteOff: velocity == 0 + void __attribute__((weak)) onMidiPitchbend(int16_t pitch); + void __attribute__((weak)) onMidiCC(uint8_t ccc, uint8_t value); + void __attribute__((weak)) onMidiSysex(uint8_t byte); + extern "C" void addParam_f32(const char *name, float *value, float min = 0.f, float max = 1.f); // min...max extern "C" void addParam_i32(const char *name, int32_t *value, int32_t min, int32_t max, const char **valueMap); // 0...max @@ -240,10 +266,35 @@ namespace engine addParam_f32(name, value, min, max); } - inline void setUIMode(uint32_t mode) // 1: compact_mode, 2: sample_view + constexpr uint32_t ENGINE_MODE_COMPACT = 1 << 5; + constexpr uint32_t ENGINE_MODE_CV_OUT = 1 << 6; + constexpr uint32_t ENGINE_MODE_MIDI_IN = 1 << 7; + + inline void + setMode(uint32_t mode) // 1: compact_mode, 2: sample_view { - if (mode == 1) - *__engine_props |= 32; + *__engine_props |= mode; + if (mode & ENGINE_MODE_MIDI_IN) + { + __midi_event_handler_ptr = []() + { + switch (__midi_event->type) + { + case 0: + onMidiNote(__midi_event->key, __midi_event->value); + return; + case 1: + onMidiPitchbend(__midi_event->value); + return; + case 2: + onMidiCC(__midi_event->key, __midi_event->value); + return; + case 3: + onMidiSysex(__midi_event->key); + return; + } + }; + } } constexpr uint32_t PARAM_SELECTED = 0x1; @@ -281,23 +332,33 @@ namespace machine { extern "C" const uint8_t *fs_read(const char *blobName); - inline uint32_t midi_bpm() + inline uint32_t clk_bpm() { return *__bpm; } + inline void clk_bpm(uint32_t bpm) + { + *__bpm = bpm; + } inline uint32_t raw_digital_inputs() { return *__digital_inputs_u32_p; } - inline float raw_adc_voltage(uint32_t index) + inline float *raw_adc_voltage(uint32_t index) { - return __adc_voltage_f_p[index]; + if (index < __adc_count) + return &__adc_voltage_f_p[index]; + else + return nullptr; } inline float *raw_dac_buffer(uint32_t index) { - return __dac_voltage_fp_p[index]; + if (index < __dac_count) + return &__dac_voltage_fp_p[index]; + else + return nullptr; } }; #else @@ -317,6 +378,10 @@ namespace gfx extern "C" void invertRect(int x, int y, int w, int h); extern "C" void drawString(int32_t x, int32_t y, const char *s, int32_t font = 1); extern "C" void drawLine(int32_t x1, int32_t y1, int32_t x2, int32_t y2); + extern "C" void setPixel(int x, int y) + { + drawLine(x, y, x, y); + } extern "C" void drawXbm(int x, int y, int width, int height, const uint8_t *xbm); extern "C" void message(const char *msg); diff --git a/boards/dsm0.json b/boards/dsm0.json deleted file mode 100644 index f11c690..0000000 --- a/boards/dsm0.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "build": { - "core": "stm32", - "cpu": "cortex-m7", - "extra_flags": "-mfpu=fpv5-d16 -mthumb -mfloat-abi=hard -DSTM32H7xx -DSTM32H750xx", - "f_cpu": "400000000L", - "mcu": "stm32h750ibk6", - "product_line": "STM32H750xx", - "variant": "STM32H7xx/H742I(G-I)(K-T)_H743I(G-I)(K-T)_H750IB(K-T)_H753II(K-T)" - }, - "debug": { - "jlink_device": "STM32H750IB", - "openocd_target": "stm32h7x", - "svd_path": "STM32H750x.svd" - }, - "frameworks": [], - "name": "squares-and-circles", - "upload": { - "maximum_ram_size": 131072, - "maximum_size": 524288, - "protocol": "custom", - "protocols": [] - }, - "url": "https://github.com/eh2k/squares-and-circles", - "vendor": "eh2k" -} diff --git a/boards/imxrt1062.ld b/boards/imxrt1062.ld deleted file mode 100644 index 96b412d..0000000 --- a/boards/imxrt1062.ld +++ /dev/null @@ -1,114 +0,0 @@ -MEMORY -{ - ITCM (rwx): ORIGIN = 0x00000000, LENGTH = 512K - DTCM (rwx): ORIGIN = 0x20000000, LENGTH = 512K - RAM (rwx): ORIGIN = 0x20200000, LENGTH = 512K - FLASH (rwx): ORIGIN = 0x60000000, LENGTH = 1984K -} - -ENTRY(ImageVectorTable) - -SECTIONS -{ - .text.headers : { - KEEP(*(.flashconfig)) - FILL(0xFF) - . = ORIGIN(FLASH) + 0x1000; - KEEP(*(.ivt)) - KEEP(*(.bootdata)) - . = ALIGN(1024); - } > FLASH - - .text.code : { - KEEP(*(.startup)) - *(.flashmem*) - . = ALIGN(4); - KEEP(*(.init)) - __preinit_array_start = .; - KEEP (*(.preinit_array)) - __preinit_array_end = .; - __init_array_start = .; - KEEP (*(.init_array)) - __init_array_end = .; - . = ALIGN(4); - } > FLASH - - .text.progmem : { - *(.progmem*) - . = ALIGN(4); - } > FLASH - - .text.itcm : { - . = . + 32; /* MPU to trap NULL pointer deref */ - *(.fastrun) - *(.text*) - . = ALIGN(16); - } > ITCM AT> FLASH - - .ARM.exidx : { - __exidx_start = .; - *(.ARM.exidx* .ARM.extab.text* .gnu.linkonce.armexidx.*) - __exidx_end = .; - } > ITCM AT> FLASH - - /* .mySegment 0x20000000 : { - KEEP(*(..udynlink_ram_base)) - } > DTCM */ - - .data : { - KEEP(*(.udynlink_ram_base)) - *(.endpoint_queue) - *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) - *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.data*))) - KEEP(*(.vectorsram)) - } > DTCM AT> FLASH - - .bss ALIGN(4) : { - *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.bss*))) - *(SORT_BY_ALIGNMENT(SORT_BY_NAME(COMMON))) - . = ALIGN(32); - . = . + 32; /* MPU to trap stack overflow */ - } > DTCM - - .bss.dma (NOLOAD) : { - *(.hab_log) - *(.dmabuffers) - . = ALIGN(32); - } > RAM - - .text.csf : { - FILL(0xFF) - . = ALIGN(1024); - KEEP(*(.csf)) - __text_csf_end = .; - } > FLASH - - _stext = ADDR(.text.itcm); - _etext = ADDR(.text.itcm) + SIZEOF(.text.itcm) + SIZEOF(.ARM.exidx); - _stextload = LOADADDR(.text.itcm); - - _sdata = ADDR(.data); - _edata = ADDR(.data) + SIZEOF(.data); - _sdataload = LOADADDR(.data); - - _sbss = ADDR(.bss); - _ebss = ADDR(.bss) + SIZEOF(.bss); - - _heap_start = ADDR(.bss.dma) + SIZEOF(.bss.dma); - _heap_end = ORIGIN(RAM) + LENGTH(RAM); - - _itcm_block_count = (SIZEOF(.text.itcm) + SIZEOF(.ARM.exidx) + 0x7FFF) >> 15; - _flexram_bank_config = 0xAAAAAAAA | ((1 << (_itcm_block_count * 2)) - 1); - _estack = ORIGIN(DTCM) + ((16 - _itcm_block_count) << 15); - - _flashimagelen = __text_csf_end - ORIGIN(FLASH); - _teensy_model_identifier = 0x24; - - .debug_info 0 : { *(.debug_info) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line) } - .debug_frame 0 : { *(.debug_frame) } - .debug_str 0 : { *(.debug_str) } - .debug_loc 0 : { *(.debug_loc) } - -} diff --git a/doc/.conv.sh b/doc/.conv.sh new file mode 100644 index 0000000..c06a7bb --- /dev/null +++ b/doc/.conv.sh @@ -0,0 +1,6 @@ + +montage -background '#25282c' -tile 5x -geometry +10+10 gnd_*.png cv_*.png drums_*.png mosc_*.png synth_*.png noise_*.png fx_*.png midi_*.png engines.png + +for f in $1; do + convert $f -sample 256x128 ${f%.*}.png +done diff --git a/doc/adc_calib.bmp b/doc/adc_calib.bmp deleted file mode 100644 index eb962c5..0000000 Binary files a/doc/adc_calib.bmp and /dev/null differ diff --git a/doc/adc_calib.png b/doc/adc_calib.png new file mode 100644 index 0000000..f5e5822 Binary files /dev/null and b/doc/adc_calib.png differ diff --git a/doc/blank.bmp b/doc/blank.bmp deleted file mode 100644 index a6094ee..0000000 Binary files a/doc/blank.bmp and /dev/null differ diff --git a/doc/blank.png b/doc/blank.png new file mode 100644 index 0000000..1c7462f Binary files /dev/null and b/doc/blank.png differ diff --git a/doc/config_midi.bmp b/doc/config_midi.bmp deleted file mode 100644 index c05efce..0000000 Binary files a/doc/config_midi.bmp and /dev/null differ diff --git a/doc/config_midi0.png b/doc/config_midi0.png new file mode 100644 index 0000000..b8ebd37 Binary files /dev/null and b/doc/config_midi0.png differ diff --git a/doc/config_midi1.png b/doc/config_midi1.png new file mode 100644 index 0000000..dac2b79 Binary files /dev/null and b/doc/config_midi1.png differ diff --git a/doc/cv_envgenad.png b/doc/cv_envgenad.png new file mode 100644 index 0000000..f302934 Binary files /dev/null and b/doc/cv_envgenad.png differ diff --git a/doc/cv_lfo.png b/doc/cv_lfo.png new file mode 100644 index 0000000..b2f1557 Binary files /dev/null and b/doc/cv_lfo.png differ diff --git a/doc/cv_voltage.png b/doc/cv_voltage.png index 2c03cb2..04a4946 100644 Binary files a/doc/cv_voltage.png and b/doc/cv_voltage.png differ diff --git a/doc/dac_calib.bmp b/doc/dac_calib.bmp deleted file mode 100644 index 2ada3fe..0000000 Binary files a/doc/dac_calib.bmp and /dev/null differ diff --git a/doc/dac_calib.png b/doc/dac_calib.png new file mode 100644 index 0000000..cb4c5fe Binary files /dev/null and b/doc/dac_calib.png differ diff --git a/doc/display_setup.bmp b/doc/display_setup.bmp deleted file mode 100644 index b8f5a04..0000000 Binary files a/doc/display_setup.bmp and /dev/null differ diff --git a/doc/display_setup.png b/doc/display_setup.png new file mode 100644 index 0000000..84acc1a Binary files /dev/null and b/doc/display_setup.png differ diff --git a/doc/drums_707.png b/doc/drums_707.png new file mode 100644 index 0000000..27b13c4 Binary files /dev/null and b/doc/drums_707.png differ diff --git a/doc/drums_909.png b/doc/drums_909.png new file mode 100644 index 0000000..7b7664b Binary files /dev/null and b/doc/drums_909.png differ diff --git a/doc/drums_claps.png b/doc/drums_claps.png new file mode 100644 index 0000000..4087422 Binary files /dev/null and b/doc/drums_claps.png differ diff --git a/doc/drums_djembe.png b/doc/drums_djembe.png new file mode 100644 index 0000000..32ca50d Binary files /dev/null and b/doc/drums_djembe.png differ diff --git a/doc/encoder_setup.bmp b/doc/encoder_setup.bmp deleted file mode 100644 index 7246603..0000000 Binary files a/doc/encoder_setup.bmp and /dev/null differ diff --git a/doc/encoder_setup.png b/doc/encoder_setup.png new file mode 100644 index 0000000..81400d5 Binary files /dev/null and b/doc/encoder_setup.png differ diff --git a/doc/engine.bmp b/doc/engine.bmp deleted file mode 100644 index 4ee6277..0000000 Binary files a/doc/engine.bmp and /dev/null differ diff --git a/doc/engines.png b/doc/engines.png new file mode 100644 index 0000000..5f2c27b Binary files /dev/null and b/doc/engines.png differ diff --git a/doc/fx_delay.png b/doc/fx_delay.png new file mode 100644 index 0000000..d644c92 Binary files /dev/null and b/doc/fx_delay.png differ diff --git a/doc/fx_ju60chorus.png b/doc/fx_ju60chorus.png new file mode 100644 index 0000000..e63d48b Binary files /dev/null and b/doc/fx_ju60chorus.png differ diff --git a/doc/fx_rev_dattorro.png b/doc/fx_rev_dattorro.png index 0c41cf0..2dbc556 100644 Binary files a/doc/fx_rev_dattorro.png and b/doc/fx_rev_dattorro.png differ diff --git a/doc/gnd_fft.png b/doc/gnd_fft.png new file mode 100644 index 0000000..4c3e625 Binary files /dev/null and b/doc/gnd_fft.png differ diff --git a/doc/gnd_scope.png b/doc/gnd_scope.png new file mode 100644 index 0000000..8659d68 Binary files /dev/null and b/doc/gnd_scope.png differ diff --git a/doc/inputs.png b/doc/inputs.png index 59e1dfc..bc696c5 100644 Binary files a/doc/inputs.png and b/doc/inputs.png differ diff --git a/doc/inputs2.png b/doc/inputs2.png index b956847..0d81dce 100644 Binary files a/doc/inputs2.png and b/doc/inputs2.png differ diff --git a/doc/io_test.bmp b/doc/io_test.bmp deleted file mode 100644 index fe7f3b2..0000000 Binary files a/doc/io_test.bmp and /dev/null differ diff --git a/doc/io_test.png b/doc/io_test.png new file mode 100644 index 0000000..78766a9 Binary files /dev/null and b/doc/io_test.png differ diff --git a/doc/menu.bmp b/doc/menu.bmp deleted file mode 100644 index af3365e..0000000 Binary files a/doc/menu.bmp and /dev/null differ diff --git a/doc/menu.png b/doc/menu.png new file mode 100644 index 0000000..1691131 Binary files /dev/null and b/doc/menu.png differ diff --git a/doc/menu_engines.png b/doc/menu_engines.png new file mode 100644 index 0000000..f284832 Binary files /dev/null and b/doc/menu_engines.png differ diff --git a/doc/midi_clock.png b/doc/midi_clock.png new file mode 100644 index 0000000..4c86ca1 Binary files /dev/null and b/doc/midi_clock.png differ diff --git a/doc/midi_monitor.png b/doc/midi_monitor.png index 6408425..98ed1a7 100644 Binary files a/doc/midi_monitor.png and b/doc/midi_monitor.png differ diff --git a/doc/mod_cv.png b/doc/mod_cv.png index 71f2323..6c77d36 100644 Binary files a/doc/mod_cv.png and b/doc/mod_cv.png differ diff --git a/doc/mod_ef.png b/doc/mod_ef.png new file mode 100644 index 0000000..3d12e31 Binary files /dev/null and b/doc/mod_ef.png differ diff --git a/doc/mod_env.bmp b/doc/mod_env.bmp deleted file mode 100644 index b54b27b..0000000 Binary files a/doc/mod_env.bmp and /dev/null differ diff --git a/doc/mod_env.png b/doc/mod_env.png new file mode 100644 index 0000000..b99c0fb Binary files /dev/null and b/doc/mod_env.png differ diff --git a/doc/mod_lfo.png b/doc/mod_lfo.png new file mode 100644 index 0000000..6515987 Binary files /dev/null and b/doc/mod_lfo.png differ diff --git a/doc/mod_rnd.png b/doc/mod_rnd.png new file mode 100644 index 0000000..2de6e81 Binary files /dev/null and b/doc/mod_rnd.png differ diff --git a/doc/mod_tm.png b/doc/mod_tm.png new file mode 100644 index 0000000..0de521e Binary files /dev/null and b/doc/mod_tm.png differ diff --git a/doc/mosc_va.png b/doc/mosc_va.png new file mode 100644 index 0000000..43445d4 Binary files /dev/null and b/doc/mosc_va.png differ diff --git a/doc/mosc_waveforms.png b/doc/mosc_waveforms.png new file mode 100644 index 0000000..c42968d Binary files /dev/null and b/doc/mosc_waveforms.png differ diff --git a/doc/noise_808squares.png b/doc/noise_808squares.png new file mode 100644 index 0000000..36e8fea Binary files /dev/null and b/doc/noise_808squares.png differ diff --git a/doc/noise_nes.png b/doc/noise_nes.png index 8ddb9ea..ab3c092 100644 Binary files a/doc/noise_nes.png and b/doc/noise_nes.png differ diff --git a/doc/noise_whitepink.png b/doc/noise_whitepink.png new file mode 100644 index 0000000..021f069 Binary files /dev/null and b/doc/noise_whitepink.png differ diff --git a/doc/osc.bmp b/doc/osc.bmp deleted file mode 100644 index 6e7d2e4..0000000 Binary files a/doc/osc.bmp and /dev/null differ diff --git a/doc/outputs.png b/doc/outputs.png index d683dc1..83d1f55 100644 Binary files a/doc/outputs.png and b/doc/outputs.png differ diff --git a/doc/outputs2.png b/doc/outputs2.png index 91483df..725f510 100644 Binary files a/doc/outputs2.png and b/doc/outputs2.png differ diff --git a/doc/splash.bmp b/doc/splash.bmp deleted file mode 100644 index 1b85b96..0000000 Binary files a/doc/splash.bmp and /dev/null differ diff --git a/doc/splash.png b/doc/splash.png new file mode 100644 index 0000000..bcdb868 Binary files /dev/null and b/doc/splash.png differ diff --git a/doc/synth_classic_vavcf.png b/doc/synth_classic_vavcf.png new file mode 100644 index 0000000..b1580a8 Binary files /dev/null and b/doc/synth_classic_vavcf.png differ diff --git a/doc/synth_dxfm.png b/doc/synth_dxfm.png new file mode 100644 index 0000000..bfdaffc Binary files /dev/null and b/doc/synth_dxfm.png differ diff --git a/doc/synth_open303.png b/doc/synth_open303.png index bdcaa72..a409cf6 100644 Binary files a/doc/synth_open303.png and b/doc/synth_open303.png differ diff --git a/doc/synth_resonator.png b/doc/synth_resonator.png new file mode 100644 index 0000000..d532703 Binary files /dev/null and b/doc/synth_resonator.png differ diff --git a/lib/braids/resources.cc b/lib/braids/resources.cc index 3f110c1..5e5f426 100644 --- a/lib/braids/resources.cc +++ b/lib/braids/resources.cc @@ -33,7 +33,7 @@ #include "braids/resources.h" #ifndef FLASHMEM -#include "pgmspace.h" +#define FLASHMEM #endif namespace braids { diff --git a/lib/fv1/factory.json b/lib/fv1/factory.json index 609c12d..fdd56e9 100644 --- a/lib/fv1/factory.json +++ b/lib/fv1/factory.json @@ -1,16 +1,16 @@ [ { - "name": "FX/Reverb-HP-LP", - "pot0": "Reverb", - "pot1": "HP", - "pot2": "LP", - "url": "https://raw.githubusercontent.com/eh2k/squares-and-circles/main/lib/fv1/spn/dance_ir_h_l.spn" - }, - { - "name": "FX/Gated-Reverb", + "name": "FV1/Gated-Reverb", "pot0": "PreD", "pot1": "G-Time", "pot2": "Damp", "url": "https://raw.githubusercontent.com/eh2k/squares-and-circles/main/lib/fv1/spn/OEM1_4.spn" + }, + { + "name": "FV1/Reverb-HP-LP", + "pot0": "Reverb", + "pot1": "HP", + "pot2": "LP", + "url": "https://raw.githubusercontent.com/eh2k/squares-and-circles/main/lib/fv1/spn/dance_ir_h_l.spn" } ] \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index ed07d90..c72ab73 100644 --- a/platformio.ini +++ b/platformio.ini @@ -8,57 +8,11 @@ ; http://docs.platformio.org/page/projectconf.html [env] -extra_scripts = pre:.pre_build.py -lib_machine = 06d5cd8 +extra_scripts = src/build.py +apps_json = ./app/index.json +squares_and_circles_loader = 66b6aea ; minimum loader version -;~/.platformio/penv/bin/pio run -v --environment SC_DSM0 -[env:SC_DSM0] -platform = ststm32 -board = dsm0 -build_flags = - -DMACHINE_SC_DSM - -O2 - -std=c++17 - -I./lib/ - ;-Wdouble-promotion - -DFLASHMEM=__attribute__\\(\\(section\\(\".qspiflash_data\"\\)\\)\\) -lib_ldf_mode = off -build_src_filter = - +<*> - +<../lib/> - -<../lib/udynlink/tests/> -lib_deps = - https://ehx.spdns.org/squares-and-circles/lib/machine_DSM0_${env.lib_machine}.zip -board_build.ldscript = - $PROJECT_DIR/.pio/libdeps/$PIOENV/libsquares-and-circles-machine/STM32H750IB_sram.lds -extra_scripts = - pre:.pre_build.py - $PROJECT_DIR/.pio/libdeps/$PIOENV/libsquares-and-circles-machine/pio_linker_flags.py -upload_command = - $PROJECT_DIR/.pio/libdeps/$PIOENV/libsquares-and-circles-machine/pio_upload.sh $PROJECT_DIR/.pio/build/$PIOENV/firmware.elf +[env:squares-and-circles] +platform = teensy@5.0.0 ; https://github.com/platformio/platform-teensy/releases +board = teensy41 ; fake setting - the engines are compatibe with all targets -[env:OC_T40] -platform = teensy@4.18.0 ; https://github.com/platformio/platform-teensy/releases -framework = arduino -board = teensy40 -build_flags = - -DUSB_MIDI_SERIAL - -DMACHINE_OC_REV2E - -std=c++17 - -I./lib/ - -ffast-math - ;-Wdouble-promotion - ;-D TEENSY_OPT_FASTEST_CODE -build_unflags = - -fpermissive -board_build.f_cpu = 600000000L -lib_deps = - https://ehx.spdns.org/squares-and-circles/lib/machine_T4X_${env.lib_machine}.zip -board_build.ldscript = - $PROJECT_DIR/.pio/libdeps/$PIOENV/libsquares-and-circles-machine/imxrt1062.ld -lib_ldf_mode = off -build_src_filter = - +<*> - +<../lib/> - -<../lib/udynlink/tests/> - -<../lib/machine> diff --git a/src/SAM.cxx b/src/SAM.cxx deleted file mode 100644 index e6b0d1b..0000000 --- a/src/SAM.cxx +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (C)2021 - Eduard Heidt -// -// Author: Eduard Heidt (eh2k@gmx.de) -// -// 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. -// -// See http://creativecommons.org/licenses/MIT/ for more information. -// - -#include "machine.h" -#include "stmlib/dsp/dsp.h" -#include "base/SampleEngine.hxx" -#include -#include - -extern "C" -{ -#include "SAM/sam.h" -#include "SAM/reciter.h" -} - -using namespace machine; - -struct SAM : public SampleEngine -{ - uint8_t _buffer[48000]; - tsample_spec _sounds[7] = { - {"electro", _buffer, 0, 22050, 0}, - {"techno", _buffer, 0, 22050, 0}, - {"modular", _buffer, 0, 22050, 0}, - {"synthesizer", _buffer, 0, 22050, 0}, - {"oscillator", _buffer, 0, 22050, 0}, - {"eurorack", _buffer, 0, 22050, 0}, - {"RND_1-9", _buffer, 0, 22050, 0}, - }; - - uint8_t _ti = 0; - - void say(const char *text) - { - static tsample_spec *_sample = nullptr; - _sample = &_sounds[selection]; - - SAM_write_buffer = [](int pos, char value) - { - if (pos < (int)LEN_OF(_buffer)) - { - _sample->len = pos + 1; - ((uint8_t *)_sample->data)[pos] = value; - } - }; - - SetSpeed(64); - SetMouth(128); - SetPitch(64 * 2); - SetThroat(128); - - char input[256] = {}; - sprintf(input, "%s ", text); - for (int i = 0; input[i] != 0; i++) - input[i] = toupper((int)input[i]); - - strncat(input, "[", 255); - TextToPhonemes((unsigned char *)input); - SetInput(input); - SAMMain(); - } - - int _lastSelection = 0; - -public: - SAM() : SampleEngine() - { - setup(&_sounds[0], 0, LEN_OF(_sounds)); - say(_sounds[0].name); - } - - void process(const ControlFrame &frame, OutputFrame &of) override - { - if (selection == LEN_OF(_sounds) - 1 && frame.trigger) - { - char tmp[20]; - sprintf(tmp, "%d", rand() % 10); - say(tmp); - } - else if (_lastSelection != selection) - { - say(_sounds[selection].name); - _lastSelection = selection; - } - - SampleEngine::process(frame, of); - } -}; - -void init_sam() -{ - machine::add("SPEECH", "SAM"); -} \ No newline at end of file diff --git a/src/base/FaustEngine.hxx b/src/base/FaustEngine.hxx deleted file mode 100644 index 4f019bf..0000000 --- a/src/base/FaustEngine.hxx +++ /dev/null @@ -1,156 +0,0 @@ -#include "machine.h" -#include "stmlib/dsp/dsp.h" -#include "stmlib/dsp/units.h" - -struct dsp -{ -}; - -struct Meta -{ - void declare(const char *key, const char *value) - { - } -}; - -struct Soundfile -{ -}; - -struct UI -{ - virtual void openTabBox(const char *label){}; - virtual void openVerticalBox(const char *title) = 0; - virtual void openHorizontalBox(const char *title) = 0; - virtual void closeBox() = 0; - - virtual void declare(float *zone, const char *key, const char *val) = 0; - virtual void addNumEntry(const char *label, float *zone, float init, float min, float max, float step) = 0; - virtual void addHorizontalSlider(const char *label, float *zone, float init, float min, float max, float step) = 0; - virtual void addVerticalSlider(const char *label, float *zone, float init, float min, float max, float step) = 0; - virtual void addButton(const char *label, float *zone) = 0; - virtual void addCheckButton(const char *label, float *zone) = 0; - - // -- passive widgets - - virtual void addHorizontalBargraph(const char *label, float *zone, float min, float max){}; - virtual void addVerticalBargraph(const char *label, float *zone, float min, float max){}; - - // -- soundfiles - - virtual void addSoundfile(const char *label, const char *filename, Soundfile **sf_zone){}; -}; - -using namespace machine; - -template -class FaustEngine : public machine::Engine, UI -{ - static_assert(std::is_base_of::value, "T must derive from dsp"); - - float bufferL[FRAME_BUFFER_SIZE]; - float bufferR[FRAME_BUFFER_SIZE]; - - float _pitch = 0.5f; - - T *_faust = nullptr; - - float *_trigger = nullptr; - - void openVerticalBox(const char *title) override - { - } - void openHorizontalBox(const char *title) override - { - } - void closeBox() override - { - } - void declare(float *zone, const char *key, const char *val) override - { - } - - void addButton(const char *label, float *zone) override - { - if (_trigger == nullptr) - _trigger = zone; - } - - void addNumEntry(const char *label, float *zone, float init, float min, float max, float step) override - { - } - - void addCheckButton(const char *label, float *zone) override - { - addHorizontalSlider(label, zone, 0, 0, 1, 1); - } - - void addVerticalSlider(const char *label, float *zone, float init, float min, float max, float step) override - { - addHorizontalSlider(label, zone, init, min, max, step); - } - - void addHorizontalSlider(const char *label, float *zone, float init, float min, float max, float step) override - { - for (size_t i = 0; i < LEN_OF(param); i++) - { - if (param[i].name == nullptr) - { - param[i].init(label, zone, init, min, max); - return; - } - } - } - -public: - FaustEngine() : machine::Engine(engine_props) - { - // static_assert(sizeof(T) < 150000, ""); - if (void *mem = machine::malloc(sizeof(T))) - { - _faust = new (mem) T(); - _faust->init(48000); - _faust->buildUserInterface(this); - } - } - - ~FaustEngine() override - { - machine::mfree(_faust); - } - - float base_frequency = 440.f; - float base_pitch = 69.f; - - float note_to_frequency(float note) - { - return base_frequency * powf(2.f, (note - base_pitch) / 12.f); - } - - void process(const machine::ControlFrame &frame, OutputFrame &of) override - { - if(_faust == nullptr) - return; - - if (_trigger != nullptr) - *_trigger = frame.trigger ? 1.f : 0.f; - - // auto note = (float)frame.midi.key + _pitch * 12.f + (frame.midi.pitch / 128) + frame.cv_voltage * 12; - // auto f = note_to_frequency(note + 12); - - float *outputs[] = {bufferL, bufferR}; - float *ins[] = {machine::get_aux(AUX_L), machine::get_aux(AUX_R)}; - - _faust->compute(FRAME_BUFFER_SIZE, &ins[0], &outputs[0]); - - of.out = bufferL; - - if (_faust->getNumOutputs() > 1) - of.aux = bufferR; - } - - void display() override - { - gfx::drawEngine(this, _faust ? nullptr : machine::OUT_OF_MEMORY); - } -}; \ No newline at end of file diff --git a/src/base/HiHatsEngine.hxx b/src/base/HiHatsEngine.hxx deleted file mode 100644 index 973d7e6..0000000 --- a/src/base/HiHatsEngine.hxx +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright (C)2021 - Eduard Heidt -// -// Author: Eduard Heidt (eh2k@gmx.de) -// -// 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. -// -// See http://creativecommons.org/licenses/MIT/ for more information. -// - -#pragma once - -#include "machine.h" -#include "braids/envelope.h" - -using namespace machine; - -struct HiHatsEngine : public Engine -{ - Engine *_oh = nullptr; - Engine *_ch = nullptr; - - float _pitch = 0; - float _ch_vol = 0.75f; - - braids::Envelope _ch_env; - braids::Envelope _oh_env; - uint8_t _ch_end; - uint8_t _oh_end; - bool _oh_mute = false; - float bufferOut[machine::FRAME_BUFFER_SIZE]; - -public: - HiHatsEngine() : Engine(TRIGGER_INPUT | ACCENT_INPUT | VOCT_INPUT) - { - _ch_env.Init(); - _oh_env.Init(); - - param[0].init("", &_pitch); - param[1].init("CH-Lev", &_ch_vol); - param[2].init("CH-Dec", &_ch_end, 32, 32, 127); - param[2].step.i = 8; - param[3].init("OH-Dec", &_oh_end, 80, 32, 127); - param[3].step.i = 8; - } - - bool init() override - { - _ch->io = this->io; - _oh->io = this->io; - - return _ch->init() && _oh->init(); - } - - void process(const ControlFrame &frame_, OutputFrame &of) override - { - ControlFrame frame; - memcpy(&frame, &frame_, sizeof(ControlFrame)); - - frame.trigger = frame.trigger && !frame.accent; - - if (frame.trigger) - _ch_env.Trigger(braids::ENV_SEGMENT_ATTACK); - - _ch_env.Update(0, _ch_end); - - OutputFrame ch_of; - _ch->process(frame, ch_of); - - _oh_mute = frame.trigger; - - frame.trigger = frame.accent; - - if (frame.trigger) - _oh_env.Trigger(braids::ENV_SEGMENT_ATTACK); - - _oh_env.Update(0, _oh_mute ? 0 : _oh_end); - - OutputFrame oh_of; - _oh->process(frame, oh_of); - - auto ch_ad = (float)_ch_env.Render() / UINT16_MAX; - auto oh_ad = (float)_oh_env.Render() / UINT16_MAX; - - for (int i = 0; i < FRAME_BUFFER_SIZE; i++) - bufferOut[i] = (float)((ch_of.out[i] * _ch_vol * ch_ad) + (oh_of.out[i] * oh_ad)); - - of.push(bufferOut, LEN_OF(bufferOut)); - } -}; \ No newline at end of file diff --git a/src/base/SampleEngine.hxx b/src/base/SampleEngine.hxx deleted file mode 100644 index ad794d5..0000000 --- a/src/base/SampleEngine.hxx +++ /dev/null @@ -1,224 +0,0 @@ -// Copyright (C)2021 - Eduard Heidt -// -// Author: Eduard Heidt (eh2k@gmx.de) -// -// 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. -// -// See http://creativecommons.org/licenses/MIT/ for more information. -// - -#pragma once -#include "machine.h" -#include "stmlib/dsp/dsp.h" -#include "stmlib/dsp/units.h" - -struct SampleEngine : public machine::Engine -{ - float i = 1; // 0=plays the sample on init, 1=plays the sample next trig - float start = 1; - float end = 1; - - uint8_t selection = 0; - float pitch_coarse = 0; - - struct sample_spec - { - const char *name; - int len; - int sample_rate; - const void *data; - int addr_shift; - virtual float get_float(int index) const = 0; - }; - - const sample_spec *ptr = nullptr; - float default_inc; - float inc; - - float buffer[machine::FRAME_BUFFER_SIZE]; - - inline float Interpolate(const sample_spec &table, float index) - { - index *= table.len; - MAKE_INTEGRAL_FRACTIONAL(index) - float a = table.get_float(index_integral); - float b = table.get_float(index_integral + 1); - return a + (b - a) * index_fractional; - } - - inline float InterpolateHermite(const sample_spec &table, float index) - { - index *= table.len; - MAKE_INTEGRAL_FRACTIONAL(index) - const float xm1 = table.get_float(index_integral - 1); - const float x0 = table.get_float(index_integral + 0); - const float x1 = table.get_float(index_integral + 1); - const float x2 = table.get_float(index_integral + 2); - const float c = (x1 - xm1) * 0.5f; - const float v = x0 - x1; - const float w = c + v; - const float a = w + v + (x2 - x0) * 0.5f; - const float b_neg = w + a; - const float f = index_fractional; - return (((a * f) - b_neg) * f + c) * f + x0; - } - -public: - int loop = 0; // 1 = knight rider, 2 infinite - - uint8_t rtrg = 0; - uint8_t rtim = 0; - uint8_t rtrg2 = 0; - uint32_t trg_next = 0; - - SampleEngine() : machine::Engine() - {} - - void setup(const sample_spec *samples, int select, int count) - { - ptr = samples; - param[0].init("Pitch", &pitch_coarse, pitch_coarse, -.5f, .5f); - param[1].init_presets(ptr[select].name, &selection, select, 0, count - 1); - param[1].value_changed = [&](){ - param[1].name = ptr[selection].name; - }; - param[2].init("Start", &start, 0); - param[3].init("End", &end, 1); - // param[4].init("RTRG", &rtrg, 0, 0, 16); - // param[5].init("RTIM", &rtim, 2, 1, 64); - // param[5].print_value = [&](char *tmp) - // { - // sprintf(tmp, "%c%d/32", param[5].flags & machine::Parameter::IS_SELECTED ? '>' : ' ', rtim); - // }; - } - - void process(const machine::ControlFrame &frame, machine::OutputFrame &of) override - { - auto &smpl = ptr[selection]; - - this->default_inc = 1.0f / smpl.len * (smpl.sample_rate / (float)machine::SAMPLE_RATE); - - this->default_inc *= stmlib::SemitonesToRatio(frame.qz_voltage(this->io, 0.f) * 12); - - float pitch_fine = 0; - this->inc = (this->inc < 0 ? -1.f : 1.f) * - (default_inc + (default_inc * pitch_fine * 0.5f) + (default_inc * pitch_coarse * 2.f)); - - auto p = buffer; - auto size = machine::FRAME_BUFFER_SIZE; - - if (frame.trigger) - { - i = start; - } - - // if (frame.trigger || (rtrg2 > 0 && trg_next == frame.t)) - // { - // if (frame.trigger) - // rtrg2 = rtrg + 1; - - // auto bpm = machine::get_bpm() / (25.f / 24); - // auto t_per_beat = 60.f / bpm; - // auto t_32 = t_per_beat / 32.f; - // --rtrg2; - // static constexpr float t_per_frame = 1.f / (machine::SAMPLE_RATE / machine::FRAME_BUFFER_SIZE); - // trg_next = frame.t + (t_32 / t_per_frame * rtim); - // i = start; - // } - - float s = std::min(start, end); - float e = std::max(start, end); - - while (size--) - { - *p++ = s <= i && i < e ? InterpolateHermite(smpl, i) : 0; - i += this->start < this->end ? inc : -inc; - } - - if (loop == 0) - { - - } - else if (loop == 1) - { - if (i < s || i > e) - inc = -inc; - } - else if (loop == 2) - { - if (i < s) - i += (e-s); - else if (i > e) - i -= (e-s); - } - - of.out = buffer; - } -}; - -template -struct tsample_spec : SampleEngine::sample_spec -{ - virtual float get_float(int index) const; - - tsample_spec(const char *name, const T *data, size_t len, uint16_t sample_rate, int custom) - { - this->data = data; - this->addr_shift = custom; - this->name = name; - this->len = len; - this->sample_rate = sample_rate; - } -}; - -struct Am6070sample : tsample_spec -{ - // https://electricdruid.net/experiments-with-variable-rate-drum-sample-playback/ - // https://electricdruid.net/wp-content/uploads/2018/06/AM6070-uLaw-DAC.pdf - - // 12-bit antilog as per Am6070 datasheet - // for (int i = 0; i < 128; i++) - // antilog[i] = (int16_t)((2 * powf(2.0, i >> 4) * ((i & 15) + 16.5) - 16.5)); - - float get_float(int index) const override - { - static const int16_t antilog[128] = { - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, - 33, 37, 41, 45, 49, 53, 57, 61, 65, 69, 73, 77, 81, 86, 89, 93, - 99, 107, 115, 123, 131, 139, 147, 155, 163, 171, 179, 187, 195, 203, 211, 219, - 231, 247, 263, 279, 295, 311, 327, 343, 359, 375, 391, 407, 423, 439, 455, 471, - 495, 527, 559, 591, 623, 655, 687, 719, 751, 783, 815, 847, 879, 911, 943, 975, - 1023, 1087, 1151, 1215, 1279, 1343, 1407, 1471, 1535, 1599, 1663, 1727, 1791, 1855, 1919, 1983, - 2079, 2207, 2335, 2463, 2591, 2719, 2847, 2975, 3103, 3231, 3359, 3487, 3615, 3743, 3871, 3999, - 4191, 4447, 4703, 4959, 5215, 5471, 5727, 5903, 6239, 6495, 6751, 7007, 7263, 7519, 7775, 8031}; - - if (index < this->len) - { - auto ix = reinterpret_cast(this->data)[index]; - return (float)((ix & 0x80) ? -antilog[ix & 0x7F] : antilog[ix]) / INT16_MAX * this->addr_shift; - } - else - return 0; - } - - Am6070sample(const char *name, const uint8_t *data, size_t len, uint16_t sample_rate, int custom) - : tsample_spec(name, data, len, sample_rate, custom) - { - } -}; \ No newline at end of file diff --git a/src/braids.cxx b/src/braids.cxx deleted file mode 100644 index 33be7f8..0000000 --- a/src/braids.cxx +++ /dev/null @@ -1,165 +0,0 @@ -#include "stmlib/stmlib.h" -#include "stmlib/dsp/dsp.h" -#include "machine.h" - -#define private public -#include "braids/macro_oscillator.h" -#include "braids/envelope.h" -#include "braids/settings.h" -#include "braids/vco_jitter_source.h" - -using namespace braids; -using namespace machine; - -struct BraidsEngine : public Engine -{ - MacroOscillator osc1; - MacroOscillator osc2; - Envelope envelope; - VcoJitterSource jitter_source; - - int16_t audio_samples[FRAME_BUFFER_SIZE]; - uint8_t sync_samples[FRAME_BUFFER_SIZE]; - - float _pitch; - uint8_t _shape; - uint16_t _timbre; - uint16_t _color; - uint16_t _attack; - uint16_t _decay; - - float buffer[FRAME_BUFFER_SIZE]; - float bufferR[FRAME_BUFFER_SIZE]; - - BraidsEngine() : Engine(TRIGGER_INPUT | VOCT_INPUT | STEREOLIZED) - { - settings.Init(); - osc1.Init(); - osc2.Init(); - jitter_source.Init(); - envelope.Init(); - - memset(audio_samples, 0, sizeof(audio_samples)); - memset(sync_samples, 0, sizeof(sync_samples)); - - // settings.SetValue(SETTING_AD_VCA, true); - settings.SetValue(SETTING_SAMPLE_RATE, 5); - settings.SetValue(SETTING_PITCH_OCTAVE, 4); - settings.SetValue(SETTING_PITCH_RANGE, PITCH_RANGE_EXTERNAL); - - param[0].init_v_oct("Freq", &_pitch); - param[1].init_presets("Shape", &_shape, braids::MACRO_OSC_SHAPE_CSAW, braids::MACRO_OSC_SHAPE_CSAW, braids::MACRO_OSC_SHAPE_LAST - 1); - param[1].value_changed = [&]() { - param[1].name = braids::settings.metadata(braids::Setting::SETTING_OSCILLATOR_SHAPE).strings[_shape]; - }; - param[2].init("Timbre", &_timbre, INT16_MAX); - param[3].init("Color", &_color, INT16_MAX); - param[4].init("Decay", &_decay, INT16_MAX); - param[5].init("Attack", &_attack, 0); - } - - void process(const ControlFrame &frame, OutputFrame &of) override - { - envelope.Update(_attack / 512, _decay / 512); - - if (frame.trigger) - { - osc1.Strike(); - osc2.Strike(); - envelope.Trigger(braids::ENV_SEGMENT_ATTACK); - } - - if (frame.gate) - { - // Not working witch Attack > 0 - // envelope.Trigger(braids::ENV_SEGMENT_DECAY); - } - - uint32_t ad_value = envelope.Render(); - - float pitchV = frame.qz_voltage(this->io, (_pitch - 1)); - int32_t pitch = (pitchV * 12.f + machine::DEFAULT_NOTE + 24) * 128; - - // if (!settings.meta_modulation()) - // { - // pitch += settings.adc_to_fm(adc_3); - // } - - pitch += jitter_source.Render(settings.vco_drift()); - pitch += ad_value * settings.GetValue(SETTING_AD_FM) >> 7; - - CONSTRAIN(pitch, 0, 16383); - - if (settings.vco_flatten()) - pitch = stmlib::Interpolate88(braids::lut_vco_detune, pitch << 2); - - uint32_t gain = _decay < UINT16_MAX ? ad_value : UINT16_MAX; - - if (!this->io->tr) - gain = _decay; // No Trigger patched - use Decay as VCA... - - if ((frame.t % 12) != 0) - osc1.set_shape((braids::MacroOscillatorShape)_shape); - else if ((frame.t % 12) != 6) - osc2.set_shape((braids::MacroOscillatorShape)_shape); - - osc1.set_parameters(_timbre >> 1, _color >> 1); - osc1.set_pitch(pitch + settings.pitch_transposition()); - osc1.Render(sync_samples, audio_samples, FRAME_BUFFER_SIZE); - - for (int i = 0; i < FRAME_BUFFER_SIZE; i++) - audio_samples[i] = (gain * audio_samples[i]) / UINT16_MAX; - - of.push(audio_samples, LEN_OF(audio_samples)); - - const float f = (float)this->io->stereo / 255.f; - uint8_t stereo = f * f * f * 255; - if (io->is_stereo() && stereo > 0) // Stereo - { - int32_t timbre = _timbre + stereo; - if (timbre > UINT16_MAX) - timbre = _timbre - stereo; - - int32_t color = _color + stereo; - if (color > UINT16_MAX) - color = _color - stereo; - - osc2.set_parameters((timbre >> 1), (color >> 1)); - osc2.set_pitch(pitch + settings.pitch_transposition() + stereo); - osc2.Render(sync_samples, audio_samples, FRAME_BUFFER_SIZE); - - for (int i = 0; i < FRAME_BUFFER_SIZE; i++) - audio_samples[i] = (gain * audio_samples[i]) / UINT16_MAX; - - of.push(audio_samples, LEN_OF(audio_samples)); - } - } - - void display() override - { - if (!this->io->tr) - { - param[4].name = "Level"; - param[5].name = nullptr; - } - else if (_decay < UINT16_MAX) - { - param[4].name = "Decay"; - param[5].name = "Attack"; - } - else - { - param[4].name = "VCA-off"; - param[5].name = nullptr; - } - - gfx::drawEngine(this); - } -}; - -void init_braids() -{ - machine::add(M_OSC, "Waveforms"); -} - -MACHINE_INIT(init_braids); \ No newline at end of file diff --git a/src/build.py b/src/build.py new file mode 100644 index 0000000..a32d2e4 --- /dev/null +++ b/src/build.py @@ -0,0 +1,150 @@ +from SCons.Script import DefaultEnvironment +import subprocess +import json +import shutil +import io +import mido #~/.platformio/penv/bin/pip install mido python-rtmidi +import zlib +import time +import intelhex #pip install intelhex - #https://python-intelhex.readthedocs.io/en/latest/part2-2.html +import os, json, io + +def udynlink_size(file): + with open(file, "rb") as f: + f.read(4) + l = int.from_bytes(f.read(2), byteorder='little')#num_lot + r = int.from_bytes(f.read(2), byteorder='little'); #num_rels + a = int.from_bytes(f.read(4), byteorder='little'); #symt_size + b = int.from_bytes(f.read(4), byteorder='little'); #code_size + c = int.from_bytes(f.read(4), byteorder='little'); #data_size + d = int.from_bytes(f.read(4), byteorder='little'); #bss_size + h = 24 + (r * 8) + a + return(h + b + c) + +def make_engines_hex(apps_json, ih = intelhex.IntelHex(), offset= 0): + + print(apps_json) + if not os.path.exists(apps_json): + print(apps_json, "not found!") + else: + with open(apps_json) as f: + apps = json.load(f) + for file in apps["apps"]: + bin_file=os.path.dirname(apps_json)+'/'+str(file) + if not os.path.exists(bin_file): + continue + bin_size=os.path.getsize(bin_file) + print("0x%x" % offset, bin_file, bin_size, udynlink_size(bin_file) % 4) + ih.loadbin(bin_file,offset=offset) + offset += bin_size + offset += 4 - (offset % 4) + ih.puts(offset, 0xffff.to_bytes(4, 'little') ) + return ih + +env = DefaultEnvironment() +#print(env.Dump()) +env.Execute(f"bash $PROJECT_DIR/app/build.sh") + +env.Append( + LINKFLAGS=[ + "-specs=nano.specs", + "-specs=nosys.specs", + ] +) + +midi_out = None +midi_in = None + +try: + for mo in mido.get_output_names(): + if "S&C" in mo: + midi_out = mido.open_output(mo) + break + + for mi in mido.get_input_names(): + if "S&C" in mi: + midi_in = mido.open_input(mi) + break +except: + pass + + +def chunk_bytes(bytes_object, chunk_size): + chunks = (bytes_object[i:i+chunk_size] for i in range(0, len(bytes_object), chunk_size)) + return chunks + +def flush(input): + for m in input.iter_pending(): + m #print("FLUSH", m) + +def sendFLASHDATA(name, data0): + flush(midi_in) + data = bytes(name, 'utf-8')[:8] + data0 + crc32=zlib.crc32(data) + print("Flashing", name, crc32) + midi_out.send(mido.Message('song_select', song=0x7e)) + flush(midi_in) + vlen = len(data) + ch = 0 + ((vlen & 0xF000) >> 12) + rawValue = [0b11100000 | ch, vlen & 0x7f, vlen >> 7 & 0x7f] + msg0 = mido.Message.from_bytes(rawValue) + midi_out.send(msg0) + msg1 = midi_in.receive(block=True) + if msg1.pitch != 1: + print("INIT FAILED", msg1.pitch, msg1) + exit(-1) #no memory + i=0 + time.sleep(1/10000) + while i < len(data): + int16 = data[i] | data[i + 1] << 8 + ch = 0 + ((data[i + 1] & 0xF0) >> 4) + rawValue = [0b11100000 | ch, int16 & 0x7f, int16 >> 7 & 0x7f] + midi_out.send(mido.Message.from_bytes(rawValue)) + time.sleep(1/10000) + i += 2 + + flush(midi_in) + time.sleep(1/10000) + + rawValue = [0b11100000, crc32 & 0x7f, crc32 >> 7 & 0x7f] + midi_out.send(mido.Message.from_bytes(rawValue)) + msg1 = midi_in.receive(block=True) + if msg1.pitch != 1: + print("CRC CHECK FAILED", msg1.pitch, msg1) + exit(-1) #crc failed + +def post_program_action(source, target, env): + os.remove(target[0].get_abspath()) + apps_json=env.GetProjectOption("apps_json") + ahx = make_engines_hex(apps_json) + program_path = env.GetBuildPath("$PROJECT_DIR/.pio/build/$PIOENV/engines.hex") + ahx.tofile(program_path, format='hex') + loader_sha = env.GetBuildPath("$PROJECT_DIR/.pio/build/$PIOENV/loader.sha") + with open(loader_sha, "w") as f: + f.write(env.GetProjectOption("squares_and_circles_loader")) + print(program_path, len(ahx)) + +def upload_hex(source, target, env): + if midi_out == None: + exit(-1) + + print(midi_in) + print(midi_out) + + program_path = env.GetBuildPath("$PROJECT_DIR/.pio/build/$PIOENV/engines.hex") + ahx = intelhex.IntelHex(program_path) + + with io.BytesIO() as w: + ahx.tofile(w, format='bin') + abx=w.getvalue() + offset = (1024 * 1024) + for chunk in chunk_bytes(abx, 4096): + sendFLASHDATA(f"0x%6x" % offset, chunk) + offset += len(chunk) + print(len(abx)) + midi_out.send(mido.Message('song_select', song=0x7f)) + + exit(0) + +env.AddPostAction("$BUILD_DIR/${PROGNAME}.hex", post_program_action) +env.AddPreAction("upload", upload_hex) \ No newline at end of file diff --git a/src/claps.cxx b/src/claps.cxx deleted file mode 100644 index 95a882e..0000000 --- a/src/claps.cxx +++ /dev/null @@ -1,279 +0,0 @@ -// Copyright (C)2021 - Eduard Heidt -// -// Author: Eduard Heidt (eh2k@gmx.de) -// -// 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. -// -// See http://creativecommons.org/licenses/MIT/ for more information. -// - -#include "machine.h" -#include "drumsynth/drumsynth.h" -#include "drumsynth/drumsynth_claps.h" -#include "misc/noise.hxx" - -using namespace machine; - -class ClapsEngine : public Engine -{ -private: - float tmp[FRAME_BUFFER_SIZE]; - float tmp2[FRAME_BUFFER_SIZE]; - float buffer[FRAME_BUFFER_SIZE]; - float bufferAux[FRAME_BUFFER_SIZE]; - static constexpr size_t n = 8; - - DrumSynth _instA = nullptr; - DrumSynth _instB = nullptr; - - float pitch = 1.f; - float stereo = 0.5f; - float stretch = 1.f; - - DrumModel inst[32] = {}; - const size_t inst_count; - uint8_t inst_selection = 0; - - DrumModel _cur_inst = {}; - bool _reload_inst = true; - WhiteNoise r; - uint32_t seed = 0; - std::pair seeds[7] = { - {0x6d17ceb4, 1.f}, - {0x73623629, 1.f}, - {0x23cb4e73, 0.5f}, - {0x73C23C29, 0.5f}, - {0x42D1EC10, 1.3f}, - {0x5EFF9F17, 1.3f}, - {0x082087A1, 1.3f}, - }; - -public: - ClapsEngine(const uint8_t *packed_drumKit) : Engine(TRIGGER_INPUT), - inst_count(packed_drumKit[0]) - { - // unpack - const uint8_t *p = packed_drumKit; - p+=4; - for (size_t i = 0; i < inst_count; i++) - { - inst[i].name = reinterpret_cast(p); - p += 12; - inst[i].n = p[0]; - p+=4; - inst[i].part = reinterpret_cast(p); - p += inst[i].n * sizeof(PartArgs); - } - - param[0].init("Color", &pitch, pitch, 0.5f, 1.5f); - param[1].init_presets("Clap", &inst_selection, 0, 0, inst_count + LEN_OF(seeds) - 1); - param[1].value_changed = [&]() - { - _reload_inst = true; - - int n = inst_selection - inst_count; - if (n >= 0 && n < (int)LEN_OF(seeds)) - r.seed = seed = seeds[n].first; - else - seed = r.seed; - }; - param[1].print_value = [&](char *tmp) - { - if (inst_selection < 2) - sprintf(tmp, ">%s", inst[inst_selection].name); - else if (inst_selection < inst_count) - sprintf(tmp, ">Clap%03X", inst_selection); - else - sprintf(tmp, ">%X", (unsigned int)seed); - }; - param[2].init("Decay", &stretch, stretch, 0.1f, 2.0f); - param[3].init("Stereo", &stereo, stereo); - // param[0].init("Crispy", &crispy, crispy, -1.1f, 1.1f); - // param[1].init("Decay", &decay, decay, 0, 2.f); - // TODO: BitCrusher + Filter + Distortion - - load_instrument(inst_selection); - } - - ~ClapsEngine() override - { - free_instrument(); - machine::mfree(_instA); - machine::mfree(_instB); - } - - void free_instrument() - { - for (size_t i = 0; i < inst_count; i++) - if (_cur_inst.part == inst[i].part) - _cur_inst.part = nullptr; - - if (_cur_inst.part != nullptr) - machine::mfree((void *)_cur_inst.part); - } - - void load_instrument(uint8_t num) - { - _reload_inst = false; - - free_instrument(); - - if (inst_selection < inst_count) - _cur_inst = inst[num]; - else - { - seed = r.seed; - - float a = 1.f; - for (auto &it : seeds) - if (it.first == seed) - a = it.second; - - auto partArgs = (PartArgs *)machine::malloc(_cur_inst.n * sizeof(PartArgs)); - for (size_t i = 0; i < _cur_inst.n; i++) - { - size_t n = inst_count; - DrumModel in = inst[r.next() % n]; - partArgs[i] = in.part[r.next() % in.n]; - - in = inst[r.next() % n]; - auto & = in.part[r.next() % in.n].osc_amp; - if (amp.n > 0) - partArgs[i].osc_amp = amp; - - in = inst[r.next() % n]; - partArgs[i].osc_pitch = in.part[r.next() % in.n].osc_pitch; - - in = inst[r.next() % n]; - auto &vca = in.part[r.next() % in.n].vca; - if (vca.n > 0) - partArgs[i].vca = vca; - - in = inst[r.next() % n]; - partArgs[i].bq1 = in.part[r.next() % in.n].bq1; - - in = inst[r.next() % n]; - partArgs[i].bq2 = in.part[r.next() % in.n].bq2; - partArgs[i].level *= a; - } - - _cur_inst.part = partArgs; - } - - machine::mfree(_instA); - machine::mfree(_instB); - _instA = drum_synth_init(&_cur_inst, machine::malloc); - _instB = drum_synth_init(&_cur_inst, machine::malloc); - } - - uint32_t t = UINT32_MAX; - - void process(const ControlFrame &frame, OutputFrame &of) override - { - memset(buffer, 0, sizeof(buffer)); - memset(bufferAux, 0, sizeof(bufferAux)); - - if (frame.trigger) - { - if (_reload_inst) - load_instrument(inst_selection); - - t = 0; - - drum_synth_reset(_instA); - drum_synth_reset(_instB); - } - - if (t < UINT32_MAX) - { - DrumParams params = { - t : t, - attack : 0, - decay : stretch - }; - - float f = pitch; // powf(2.f, (frame.qz_voltage(this->io, 0))); - float a = stereo; - float b = 1.f - a; - - for (size_t k = 0; k < _cur_inst.n; k++) - { - if (stereo > 0.01f && _cur_inst.part[k].osc.type >= OSC_METALLIC) - { - drum_synth_process_frame(_instA, k, (f - (f * 0.01f * stereo)), ¶ms, tmp, machine::FRAME_BUFFER_SIZE); - drum_synth_process_frame(_instB, k, (f + (f * 0.01f * stereo)), ¶ms, tmp2, machine::FRAME_BUFFER_SIZE); - if (_cur_inst.part[k].osc.type == OSC_METALLIC) - { - for (int i = 0; i < machine::FRAME_BUFFER_SIZE; i++) - { - buffer[i] += tmp[i]; - bufferAux[i] += tmp2[i]; - } - } - else - for (int i = 0; i < machine::FRAME_BUFFER_SIZE; i++) - { - buffer[i] += tmp[i]; - bufferAux[i] += tmp[i] * b + tmp2[i] * a; - } - } - else - { - drum_synth_process_frame(_instA, k, f, ¶ms, tmp, machine::FRAME_BUFFER_SIZE); - for (int i = 0; i < machine::FRAME_BUFFER_SIZE; i++) - { - buffer[i] += tmp[i]; - bufferAux[i] += tmp[i]; - } - } - // bufferAux[i] += p._vca.value() * p._amp.value() * 0.99f; - } - - t += machine::FRAME_BUFFER_SIZE; - } - - of.out = buffer; - of.aux = bufferAux; - } -}; - -// #include "base/SampleEngine.hxx" -// #include "claps/cp909.h" -// #include "claps/cp808.h" - -// struct TR909_CP : public SampleEngine -// { -// const tsample_spec _sound = {"", (const int16_t *)cp909_raw, cp909_raw_len / 2, 44100, 0}; - -// TR909_CP() : SampleEngine(&_sound, 0, 1) {} -// }; - -// struct TR808_CP : public SampleEngine -// { -// const tsample_spec _sound = {"", (const int16_t *)cp808_raw, cp808_raw_len / 2, 44100, 0}; - -// TR808_CP() : SampleEngine(&_sound, 0, 1) {} -// }; - -void init_claps() -{ - machine::add(machine::DRUM, "Claps", drum_synth_claps); -} - -MACHINE_INIT(init_claps); \ No newline at end of file diff --git a/src/cv_peaks.cxx b/src/cv_peaks.cxx deleted file mode 100644 index 6c10365..0000000 --- a/src/cv_peaks.cxx +++ /dev/null @@ -1,100 +0,0 @@ -#include "stmlib/stmlib.h" -#include "machine.h" -#include "peaks/gate_processor.h" -#include "peaks/modulations/bouncing_ball.h" -#include "peaks/modulations/mini_sequencer.h" -#include "peaks/modulations/multistage_envelope.h" -#include "peaks/number_station/number_station.h" -#include "peaks/pulse_processor/pulse_shaper.h" -#include "peaks/pulse_processor/pulse_randomizer.h" -#include "peaks/gate_processor.h" - -namespace gfx -{ - void drawEngineWithScope(machine::Engine *engine, int8_t scope[128], int i, int y); - void push_scope(int8_t scope[128], uint8_t &i, int8_t x); -} - -using namespace machine; - -template -struct PeaksCVEngine : public Engine -{ - int8_t scope[128] = {}; - float y = 0; - uint8_t i = 0; - - T _processor; - - uint16_t params_[4]; - - peaks::GateFlags flags[FRAME_BUFFER_SIZE]; - int16_t buffer[FRAME_BUFFER_SIZE]; - - PeaksCVEngine(uint16_t p1 = UINT16_MAX / 2, - uint16_t p2 = UINT16_MAX / 2, - uint16_t p3 = UINT16_MAX / 2, - uint16_t p4 = UINT16_MAX / 2, - const char *param1 = nullptr, - const char *param2 = nullptr, - const char *param3 = nullptr, - const char *param4 = nullptr) : Engine(engine_props) - { - memset(&_processor, 0, sizeof(T)); - _processor.Init(); - std::fill(&flags[0], &flags[FRAME_BUFFER_SIZE], peaks::GATE_FLAG_LOW); - - int P1 = 0; - int P2 = 1; - int P3 = 2; - int P4 = 3; - - param[0].init(param1, ¶ms_[P1], p1); - param[1].init(param2, ¶ms_[P2], p2); - - param[2].init(param3, ¶ms_[P3], p3); - param[3].init(param4, ¶ms_[P4], p4); - } - - void process(const ControlFrame &frame, OutputFrame &of) override - { - _processor.Configure(params_, peaks::CONTROL_MODE_FULL); - - if (frame.trigger) - { - flags[0] = peaks::GATE_FLAG_RISING; - std::fill(&flags[1], &flags[FRAME_BUFFER_SIZE], peaks::GATE_FLAG_HIGH); - } - else if (frame.gate) - { - std::fill(&flags[0], &flags[FRAME_BUFFER_SIZE], peaks::GATE_FLAG_HIGH); - } - else - { - flags[0] = flags[0] == peaks::GATE_FLAG_HIGH ? peaks::GATE_FLAG_FALLING : peaks::GATE_FLAG_LOW; - std::fill(&flags[1], &flags[FRAME_BUFFER_SIZE], peaks::GATE_FLAG_LOW); - } - - _processor.Process(flags, buffer, FRAME_BUFFER_SIZE); - - of.push(buffer, LEN_OF(buffer)); - - if ((frame.t % 50) == 0) - { - gfx::push_scope(scope, i, y); - y = 0; - } - else - y = std::max(y, (float)buffer[0] / INT16_MAX * 16); - } - - void display() override - { - gfx::drawEngineWithScope(this, scope, i, 56); - } -}; - -void init_cv_peaks() -{ - add>(CV, "EnvGen_ADSR", 0, INT16_MAX, INT16_MAX, INT16_MAX, "Attack", "Decay", "Sustain", "Release"); -} \ No newline at end of file diff --git a/src/dxfm.cxx b/src/dxfm.cxx deleted file mode 100644 index 580b18d..0000000 --- a/src/dxfm.cxx +++ /dev/null @@ -1,385 +0,0 @@ -/* - * Copyright (C)2023 - E.Heidt - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "machine.h" -#include "stmlib/utils/ring_buffer.h" -#include "misc/dspinst.h" - -#include "msfa/controllers.h" -#include "msfa/dx7note.h" -#include "msfa/lfo.h" -#include "msfa/synth.h" -#include "msfa/fm_core.h" - -#include "msfa/synth.h" -#include "msfa/exp2.h" -#include "msfa/sin.h" -#include "msfa/freqlut.h" -#include "msfa/porta.h" -#include "msfa/patch.h" - -#include -#include - -#include "plaits/resources.h" - -using namespace machine; - -struct DxFMEngine : public MidiEngine -{ - struct dxfm - { - int note = 0; - int key_down = 0; - Lfo lfo; - FmCore fm_core; - Dx7Note dx7_note; - stmlib::RingBuffer buffer; - } voices[2]; - Controllers controllers; - - float _pitch; - uint8_t _prog; - float _hold; - float _rate; - - char patch[128] = {// MARIMBA - 0x00, 0x3f, 0x37, 0x00, 0x4e, 0x4e, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, - 0x38, 0x08, 0x63, 0x08, 0x0d, 0x63, 0x4b, 0x00, 0x08, 0x52, 0x30, 0x00, - 0x00, 0x36, 0x00, 0x2e, 0x00, 0x38, 0x08, 0x5d, 0x00, 0x32, 0x63, 0x4b, - 0x00, 0x52, 0x52, 0x30, 0x00, 0x00, 0x36, 0x00, 0x2e, 0x00, 0x38, 0x08, - 0x55, 0x0a, 0x00, 0x5f, 0x21, 0x31, 0x29, 0x63, 0x5c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3b, 0x04, 0x63, 0x00, 0x00, 0x63, 0x48, 0x00, 0x00, - 0x52, 0x30, 0x00, 0x00, 0x36, 0x00, 0x2e, 0x00, 0x38, 0x08, 0x60, 0x06, - 0x00, 0x5f, 0x28, 0x31, 0x37, 0x63, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3b, 0x00, 0x5f, 0x00, 0x00, 0x5e, 0x43, 0x5f, 0x3c, 0x32, 0x32, - 0x32, 0x32, 0x06, 0x08, 0x23, 0x00, 0x00, 0x00, 0x31, 0x18, 0x4d, 0x41, - 0x52, 0x49, 0x4d, 0x42, 0x41, 0x20, 0x20, 0x20}; - - uint8_t data[156]; - char patch_name[12]; - -#define OP_ENV_RATE(op, i) data[op * 21 + i] -#define OP_ENV_LEVEL(op, i) data[op * 21 + 4 + i] -#define OP_kbd_lev_scl_brk_pt(op) data[op * 21 + 8] -#define OP_kbd_lev_scl_lft_depth(op) data[op * 21 + 9] -#define OP_kbd_lev_scl_rht_depth(op) data[op * 21 + 10] -#define OP_kbd_lev_scl_lft_curve(op) data[op * 21 + 11] -#define OP_kbd_lev_scl_rht_curve(op) data[op * 21 + 12] -#define OP_kbd_rate_scaling(op) data[op * 21 + 13] -#define OP_amp_mod_sensitivity(op) data[op * 21 + 14] -#define OP_key_vel_sensitivity(op) data[op * 21 + 15] -#define OP_output_level(op) data[op * 21 + 16] -#define OP_osc_mode(op) data[op * 21 + 17] -#define OP_osc_freq_coarse(op) data[op * 21 + 18] -#define OP_osc_freq_fine(op) data[op * 21 + 19] -#define OP_osc_detune(op) data[op * 21 + 20] -#define PE_rate(i) data[6 * 21 + i] -#define PE_level(i) data[6 * 21 + 4 + i] -#define ALGORITHM() data[6 * 21 + 8] -#define FEEDBACK() data[6 * 21 + 9] -#define OSC_SYNC() data[6 * 21 + 10] -#define LFO_RATE() data[(6 * 21 + 11)] -#define LFO_DELAY() data[6 * 21 + 12] -#define LFO_PITCH_MOD_DEPTH() data[6 * 21 + 13] -#define LFO_AMP_MOD_DEPTH() data[6 * 21 + 14] -#define LFO_SYNC() data[6 * 21 + 15] -#define LFO_WAVEFORM() data[6 * 21 + 16] -#define PITCH_MOD_SENSITIVITY() data[6 * 21 + 17] -#define TRANSPOSE() data[6 * 21 + 18] -#define NAME() (const char *)&data[6 * 21 + 19] - - void initControllers() - { - controllers.values_[kControllerPitch] = 0x2000; - controllers.values_[kControllerPitchRange] = 0; - controllers.values_[kControllerPitchStep] = 0; - - controllers.modwheel_cc = 0; - controllers.foot_cc = 0; - controllers.breath_cc = 0; - controllers.aftertouch_cc = 0; - controllers.refresh(); - } - - dxfm *active_voice = nullptr; - dxfm *other_voice = nullptr; - - void applyRate(float rate) - { - for (int op = 0; op < 6; op++) - { - auto opData = &patch[op * 17]; - for (int j = 1; j < 4; j++) - { - auto v = min(opData[j] & 0x7f, 99); - OP_ENV_RATE(op, j) = min((int)(v * -rate), 99); - } - - // for (int j = 1; j < 4; j++) - // { - // auto v = min(opData[j + 4] & 0x7f, 99); - // if (_rate < 0) - // OP_ENV_LEVEL(op, j) = v - (99 - v) * -_rate; - // else - // OP_ENV_LEVEL(op, j) = v - v * -_rate; - // } - } - } - DxFMEngine(int bnkNum) : MidiEngine(MIDI_ENGINE | TRIGGER_INPUT | VOCT_INPUT | STEREOLIZED), _bnkNum(bnkNum) - { - Exp2::init(); - Tanh::init(); - Sin::init(); - - Freqlut::init(machine::SAMPLE_RATE); - Lfo::init(machine::SAMPLE_RATE); - PitchEnv::init(machine::SAMPLE_RATE); - Env::init_sr(machine::SAMPLE_RATE); - Porta::init_sr(machine::SAMPLE_RATE); - - initControllers(); - controllers.masterTune = 0; - controllers.opSwitch = 0x3f; // all operators - active_voice = &voices[0]; - other_voice = &voices[1]; - - param[0].init_v_oct("Freq", &_pitch); - - sprintf(patch_name, ">%.10s", NAME()); - param[1].init_presets(patch_name, &_prog, 0, 0, (_bnkNum < 0) ? 31 : 95); - param[1].value_changed = [&]() - { - loadPatch = true; - }; - param[2].init("Rate", &_rate, -1.0f, -1.5f, -0.5f); - param[2].value_changed = [&]() - { - applyRate(_rate); // * ((float)rand() / INT32_MAX * 0.1f)); - }; - param[3].init("Hold", &_hold, 0, 0, SAMPLE_RATE / FRAME_BUFFER_SIZE); - - UnpackPatch(patch, (char *)data); - loadDXPatch(0); - } - - const int _bnkNum = -1; - const char DXFM_PATCH[8] = {'D', 'X', 'F', 'M', 'S', 'Y', 'X', '0'}; - const uint8_t *sysexData = nullptr; - - void loadDXPatch(uint8_t prog) - { - if (_bnkNum < 0) - { - sysexData = machine::flash_read(DXFM_PATCH); - } - else - { - sysexData = plaits::fm_patches_table[0]; - } - - if (sysexData) - { - bool valid = false; - for (int i = 0; i < 128; i++) - valid |= sysexData[i] != 0 && sysexData[i] != 0xFF; - - if (valid) - { - memcpy(patch, (const char *)sysexData + (prog * 128), sizeof(patch)); - UnpackPatch(patch, (char *)data); - sprintf(patch_name, "%.10s", NAME()); - loadPatch = false; - _prog = prog; - return; - } - } - - _prog = 0; - return; - } - - void onMidiNote(uint8_t key, uint8_t velocity) override - { - // Not yet implemented... - } - void onMidiPitchbend(int16_t pitch) override - { - // Not yet implemented... - } - void onMidiCC(uint8_t ccc, uint8_t value) override - { - // Not yet implemented... - } - - char name[16]; - - void display() override - { - if (_bnkNum < 0 && sysexData == nullptr) - { - auto bak = param[0].name; - param[0].name = nullptr; - gfx::drawEngine(this); - param[0].name = bak; - - gfx::drawRect(4, 16, 120, 38); - gfx::drawRect(5, 17, 118, 36); - gfx::drawStringCenter(64, 26, "NO DXFM.SYX FOUND!", 1); - gfx::drawString(10, 38, "Please load a syx file", 0); - gfx::drawString(10, 38 + 7, " with the Webflasher! ", 0); - return; - } - - gfx::drawEngine(this); - } - - float bufferL[machine::FRAME_BUFFER_SIZE]; - float bufferR[machine::FRAME_BUFFER_SIZE]; - - uint8_t trig = 0; - bool loadPatch = true; - - void process(const ControlFrame &frame, OutputFrame &of) override - { - if (_bnkNum < 0 && _prog == 0) - { - return; - } - int velo = 127; - - if (frame.trigger) - { - trig |= 1; - } - else if (frame.gate) - { - // keep key down - } - else - { - for (auto &voice : voices) - if (voice.key_down > 1) - --voice.key_down; - } - - if (voices[0].buffer.readable() < N) - { - // see midinote_to_logfreq - float note = frame.qz_voltage(this->io, 2.f + _pitch) * 12.f + machine::DEFAULT_NOTE; - - if (loadPatch) - { - loadDXPatch(_prog); - loadPatch = false; - - for (auto &voice : voices) - { - voice.dx7_note.keyup(); - voice.lfo.reset(&LFO_RATE()); - voice.dx7_note.update(data, voice.note, velo); - } - } - - for (auto &voice : voices) - { - if ((trig & 1) && &voice == other_voice) - { - voice.key_down = 2 + _hold; - voice.note = note; - voice.lfo.keydown(); - voice.dx7_note.keyup(); - - float r = param[2].to_float(); - if (r < 0.5f) - velo = 64 + 64 * (r * 2); - - voice.dx7_note.init(data, voice.note, velo); - - if (OSC_SYNC()) - voice.dx7_note.oscSync(); - - trig = 0; - - // if (other_voice && active_voice->key_down) - // { - // voice.dx7_note.transferSignal(active_voice->dx7_note); - // voice.dx7_note.transferState(active_voice->dx7_note); - // } - - std::swap(active_voice, other_voice); - } - else if (voice.key_down == 1) - { - voice.key_down = 0; - voice.dx7_note.keyup(); - } - - int32_t lfovalue = voice.lfo.getsample(); - int32_t lfodelay = voice.lfo.getdelay(); - - auto p = voice.buffer.OverwritePtr(N); - memset(p, 0, sizeof(int32_t) * N); - - float diff_note = (note - voice.note) / 12.f; - controllers.masterTune = diff_note * (1 << 24); - voice.dx7_note.compute(p, &voice.fm_core, lfovalue, lfodelay, &controllers); - } - - trig = 0; - } - - memset(bufferL, 0, sizeof(bufferL)); - memset(bufferR, 0, sizeof(bufferL)); - - int v = 0; - float stereo = (1.f - 1.f / 256.f * this->io->stereo); - for (auto &voice : voices) - { - auto p = voice.buffer.ImmediateReadPtr(machine::FRAME_BUFFER_SIZE); - - if (v++ % 2 == 0) - { - for (int i = 0; i < machine::FRAME_BUFFER_SIZE; i++) - { - float s = (float)*p++ / INT32_MAX * 8; - bufferL[i] += s * stereo; - bufferR[i] += s; - } - } - else - { - for (int i = 0; i < machine::FRAME_BUFFER_SIZE; i++) - { - float s = (float)*p++ / INT32_MAX * 8; - bufferL[i] += s; - bufferR[i] += s * stereo; - } - } - } - - of.out = bufferL; - of.aux = bufferR; - } -}; - -void init_dxfm() -{ - machine::add(SYNTH, "DxFM", -1); - machine::add(SYNTH, "DxFM_BNK1-3", 0); -} - -MACHINE_INIT(init_dxfm); \ No newline at end of file diff --git a/src/fx_reverb.cxx b/src/fx_reverb.cxx deleted file mode 100644 index 6407daf..0000000 --- a/src/fx_reverb.cxx +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright (C)2021 - Eduard Heidt -// -// Author: Eduard Heidt (eh2k@gmx.de) -// -// 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. -// -// See http://creativecommons.org/licenses/MIT/ for more information. -// - -#include "stmlib/stmlib.h" -#include "stmlib/dsp/filter.h" -#include "machine.h" -#include - -#include "clouds/dsp/fx/reverb.h" - -using namespace machine; - -struct CloudsReverb : public Engine -{ - float raw = 0; - float reverb_amount; - float feedback; - float gain; - - uint16_t buffer[16384]; - clouds::Reverb fx_; - - float bufferL[FRAME_BUFFER_SIZE]; - float bufferR[FRAME_BUFFER_SIZE]; - - CloudsReverb() : Engine(AUDIO_PROCESSOR) - { - raw = 1.f; - memset(buffer, 0, sizeof(buffer)); - fx_.Init(buffer); - - param[0].init("D/W", &raw, raw); - param[1].init("Reverb", &reverb_amount, 0.75f); - param[2].init("Damp", &feedback, 0.5f); - param[3].init("Gain", &gain, 1.f); - } - - void process(const ControlFrame &frame, OutputFrame &of) override - { - fx_.set_amount(reverb_amount * 0.54f); - fx_.set_diffusion(0.7f); - fx_.set_time(0.35f + 0.63f * reverb_amount); - fx_.set_input_gain(gain * 0.1f); // 0.1f); - fx_.set_lp(0.6f + 0.37f * feedback); - - float *ins[] = {machine::get_aux(AUX_L), machine::get_aux(AUX_R)}; - - for (int i = 0; i < FRAME_BUFFER_SIZE; i++) - { - bufferL[i] = ins[0][i]; - bufferR[i] = ins[1][i]; - } - - fx_.Process(bufferL, bufferR, FRAME_BUFFER_SIZE); - - for (int i = 0; i < FRAME_BUFFER_SIZE; ++i) - { - bufferL[i] = raw * bufferL[i] + (1 - raw) * ins[0][i]; - bufferR[i] = raw * bufferR[i] + (1 - raw) * ins[1][i]; - } - - of.out = bufferL; - of.aux = bufferR; - } -}; - -#include "clouds/dsp/fx/diffuser.h" - -struct CloudsDiffuser : public Engine -{ - float raw = 0; - clouds::Diffuser fx_; - uint16_t buffer[2048 + 1024]; - - float bufferL[FRAME_BUFFER_SIZE]; - float bufferR[FRAME_BUFFER_SIZE]; - - CloudsDiffuser() : Engine(AUDIO_PROCESSOR) - { - raw = 1.f; - fx_.Init(&buffer[0]); - param[0].init("Amount", &raw, raw); - } - - void process(const ControlFrame &frame, OutputFrame &of) override - { - fx_.set_amount(raw); - - float *ins[] = {machine::get_aux(AUX_L), machine::get_aux(AUX_R)}; - - for (int i = 0; i < FRAME_BUFFER_SIZE; i++) - { - bufferL[i] = ins[0][i]; - bufferR[i] = ins[1][i]; - } - - fx_.Process(bufferL, bufferR, FRAME_BUFFER_SIZE); - - of.out = bufferL; - of.aux = bufferR; - } -}; - -void init_reverb() -{ - machine::add(FX, "Reverb"); - //machine::add(FX, "Diffusor"); -} - -MACHINE_INIT(init_reverb); \ No newline at end of file diff --git a/src/fx_reverbSC.cxx b/src/fx_reverbSC.cxx deleted file mode 100644 index 9a70d5f..0000000 --- a/src/fx_reverbSC.cxx +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (C)2022 - Eduard Heidt -// -// Author: Eduard Heidt (eh2k@gmx.de) -// -// 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. -// -// See http://creativecommons.org/licenses/MIT/ for more information. -// - -#include "stmlib/stmlib.h" -#include "stmlib/dsp/filter.h" -#include "machine.h" -#include - -extern "C" -{ -#include "soundpipe/revsc.h" -} - -using namespace machine; - -struct ReverbSC : public Engine -{ - sp_data sp_data_; - sp_revsc sp_revsc_; - static constexpr uint32_t AUX_SIZE = 107440; // sp_revsc_.aux.size - uint8_t *mem; - - float raw = 1.f; - float reverb_amount; - float feedback; - float gain; - - float bufferL[FRAME_BUFFER_SIZE]; - float bufferR[FRAME_BUFFER_SIZE]; - - ReverbSC() : Engine(AUDIO_PROCESSOR) - { - mem = (uint8_t *)machine::malloc(AUX_SIZE); - if (mem) - { - sp_data_.sr = machine::SAMPLE_RATE; - sp_data_.aux.ptr = &mem[0]; - sp_data_.aux.size = AUX_SIZE; - sp_revsc_init(&sp_data_, &sp_revsc_); - param[0].init("D/W", &raw, raw); - param[1].init("Feedback", &sp_revsc_.feedback, 0.97f, 0, 1); - param[2].init("LpFreq", &sp_revsc_.lpfreq, 10000, 0, machine::SAMPLE_RATE / 2); - } - } - - ~ReverbSC() override - { - machine::mfree(mem); - } - - void process(const ControlFrame &frame, OutputFrame &of) override - { - if (mem == nullptr) - return; - - float *ins[] = {machine::get_aux(AUX_L), machine::get_aux(AUX_R)}; - - for (int i = 0; i < FRAME_BUFFER_SIZE; ++i) - { - sp_revsc_compute(&sp_data_, &sp_revsc_, &ins[0][i], &ins[1][i], &bufferL[i], &bufferR[i]); - bufferL[i] = raw * bufferL[i] + (1 - raw) * ins[0][i]; - bufferR[i] = raw * bufferR[i] + (1 - raw) * ins[1][i]; - } - - of.out = bufferL; - of.aux = bufferR; - } - - void display() override - { - gfx::drawEngine(this, mem ? nullptr : machine::OUT_OF_MEMORY); - } -}; - -void init_reverbSC() -{ - machine::add(FX, "ReverbSC"); -} - -MACHINE_INIT(init_reverbSC); \ No newline at end of file diff --git a/src/main.cxx b/src/main.cxx index 9156bac..7d5f90d 100644 --- a/src/main.cxx +++ b/src/main.cxx @@ -1,99 +1,5 @@ -// Copyright (C)2021 - Eduard Heidt -// -// Author: Eduard Heidt (eh2k@gmx.de) -// -// 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. -// -// See http://creativecommons.org/licenses/MIT/ for more information. -// - -#include "machine.h" -#include "plaits/resources.h" - -#ifndef FLASHMEM -#include "pgmspace.h" -#endif - -#include "../app/DRUMS/Djembe.bin.h" -#include "../app/NOISE/NES.bin.h" -#include "../app/NOISE/808_squares.bin.h" -#include "../app/NOISE/WhitePink.bin.h" -#include "../app/FX/Rev-Dattorro.bin.h" -#include "../app/FX/Gated-Reverb.bin.h" -#include "../app/FX/Reverb-HP-LP.bin.h" -#include "../app//FX/Delay.bin.h" -#include "../app/SPEECH/SAM.bin.h" - -void init_engines(); - -void init_engines2() -{ -#undef MACHINE_INIT -#define MACHINE_INIT(init_fun) \ - void init_fun() __attribute__((weak)); \ - init_fun(); - - // machine::register_flash_blob("DXFMSYXA", plaits::fm_patches_table[0]); - // machine::register_flash_blob("DXFMSYXB", plaits::fm_patches_table[1]); - // machine::register_flash_blob("DXFMSYXC", plaits::fm_patches_table[2]); - - MACHINE_INIT(init_modulations); - MACHINE_INIT(init_quantizer); - - MACHINE_INIT(init_voltage); - machine::add(__NOISE_WhitePink_bin, __NOISE_WhitePink_bin_len); - machine::add(__NOISE_NES_bin, __NOISE_NES_bin_len); - machine::add(__NOISE_808_squares_bin, __NOISE_808_squares_bin_len); - MACHINE_INIT(init_midi_monitor); - MACHINE_INIT(init_midi_clock); - MACHINE_INIT(init_drums_peaks); - MACHINE_INIT(init_braids); - MACHINE_INIT(init_plaits); - MACHINE_INIT(init_tr909); - MACHINE_INIT(init_tr707); - - MACHINE_INIT(init_claps); - MACHINE_INIT(init_reverb); - MACHINE_INIT(init_reverbSC); - machine::add(__FX_Rev_Dattorro_bin, __FX_Rev_Dattorro_bin_len); - machine::add(__DRUMS_Djembe_bin, __DRUMS_Djembe_bin_len); - MACHINE_INIT(init_rings); - MACHINE_INIT(init_speech); - machine::add(__SPEECH_SAM_bin, __SPEECH_SAM_bin_len); - machine::add(__FX_Delay_bin, __FX_Delay_bin_len); - machine::add(__FX_Gated_Reverb_bin, __FX_Gated_Reverb_bin_len); - machine::add(__FX_Reverb_HP_LP_bin, __FX_Reverb_HP_LP_bin_len); - MACHINE_INIT(init_midi_polyVA) - MACHINE_INIT(init_dxfm); - MACHINE_INIT(init_open303); - MACHINE_INIT(init_aux); - MACHINE_INIT(init_juno60_chorus); - MACHINE_INIT(init_plaits2); - init_engines(); -} int main() { - machine::setup(GIT_COMMIT_SHA, init_engines2); - - while (true) - machine::loop(); - return 0; } \ No newline at end of file diff --git a/src/midiClock.cxx b/src/midiClock.cxx deleted file mode 100644 index 64033c0..0000000 --- a/src/midiClock.cxx +++ /dev/null @@ -1,123 +0,0 @@ - -// Copyright (C)2021 - Eduard Heidt -// -// Author: Eduard Heidt (eh2k@gmx.de) -// -// 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. -// -// See http://creativecommons.org/licenses/MIT/ for more information. -// - -#include "machine.h" - -using namespace machine; - -class MidiClock : public Engine -{ - uint8_t ppqn = 0; - uint8_t offset = 0; - uint8_t impulse = 100; - int count_down = 0; - - int16_t buffer[FRAME_BUFFER_SIZE] = {}; - -public: - MidiClock() : Engine(SEQUENCER_ENGINE | OUT_EQ_VOLT) - { - // 24, 8 or 4 ppqn - param[0].init("ppqn", &ppqn, 0, 0, 2); - param[0].print_value = [&](char *tmp) - { - if (ppqn == 0) - sprintf(tmp, "4ppqn"); - else if (ppqn == 1) - sprintf(tmp, "8ppqn"); - else - sprintf(tmp, "24ppqn"); - }; - - param[1].init("Impulse", &impulse, 10, 1, 100); - param[1].step.i = 1; - param[1].print_value = [&](char *tmp) - { - sprintf(tmp, "Impulse\n%dms", impulse); - }; - - param[2].init("Offset", &offset, 0); - param[2].print_value = [&](char *tmp) - { - sprintf(tmp, "Delay\n%dms", offset); - }; - } - - uint32_t sixteens = 0; - uint32_t next = -1; - uint32_t last_t = 0; - - void process(const ControlFrame &frame, OutputFrame &of) override - { - if (frame.clock) - last_t = frame.t; - - uint32_t div = ppqn == 0 ? 6 : (ppqn == 1 ? 3 : 1); - - if ((frame.clock % div) == 1 || (ppqn > 1 && frame.clock)) - { - next = frame.t + (offset * 2); - } - - if (frame.t == next) - { - if (frame.t - last_t > 1000) - { - // No external clock - so diy and sync with trigger - auto one_div_bpm = 100 * machine::get_bpm() / (25 / 24); - auto t_per_beat = 60 * one_div_bpm; - auto t_24 = t_per_beat / 24 * div; - auto samples_per_frame = machine::SAMPLE_RATE / machine::FRAME_BUFFER_SIZE; - next = frame.t + (t_24 * samples_per_frame); - } - else - next = -1; - - count_down = (impulse * 2); - } - - int16_t a = count_down-- > 0 ? INT16_MAX : 0; - of.push(&a, 1); - } - - void display() override - { - gfx::drawEngine(this); - - char tmp[20]; - int bpm = machine::get_bpm(); - int bpm2 = ((bpm % 100) / 10); - sprintf(tmp, " %d.%dbpm", bpm / 100, bpm2); - gfx::drawString(58, 1, tmp, 0); - } -}; - -void init_midi_clock() -{ - machine::add("MIDI", "Clock"); -} - -MACHINE_INIT(init_midi_clock); \ No newline at end of file diff --git a/src/midiMonitor.cxx b/src/midiMonitor.cxx deleted file mode 100644 index 2a3a854..0000000 --- a/src/midiMonitor.cxx +++ /dev/null @@ -1,89 +0,0 @@ -#include "machine.h" -#include "stmlib/algorithms/voice_allocator.h" -#include - -using namespace machine; - -struct MidiMonitor : public machine::MidiEngine -{ - uint8_t voice[4]; - stmlib::VoiceAllocator allocator; - int16_t pitch = 0; - std::map cc; - - MidiMonitor() - { - allocator.Init(); - allocator.set_size(LEN_OF(voice)); - } - - void process(const machine::ControlFrame &frame, OutputFrame &of) override - { - } - - void display() override - { - gfx::drawEngine(this); - - gfx::drawString(2, 12, "VOICE KEY", 0); - gfx::drawString(66, 12, "CONTROL", 0); - - for (int x = 0; x < 128; x += 3) - gfx::setPixel(x, 18); - - char tmp[30]; - for (size_t i = 0; i < LEN_OF(voice); i++) - { - sprintf(tmp, "#%d %4d", i, voice[i]); - gfx::drawString(2, 20 + i * 6, tmp, 0); - } - - for (int y = 12; y < 60; y += 3) - gfx::setPixel(64, y); - - int bpm = machine::get_bpm(); - int bpm2 = ((bpm % 100) / 10); - sprintf(tmp, "clock: %3d.%d", bpm / 100, bpm2); - gfx::drawString(66, 20, tmp, 0); - - sprintf(tmp, "pitch: %4d", pitch); - gfx::drawString(66, 26, tmp, 0); - - int i = 32; - for(auto c : cc) - { - sprintf(tmp, "cc-%d: %4d", c.first, c.second); - gfx::drawString(66, i, tmp, 0); - i += 6; - } - } - - void onMidiNote(uint8_t key, uint8_t velocity) override // NoteOff: velocity == 0 - { - if (velocity > 0) - { - auto ni = allocator.NoteOn(key); - voice[ni] = key; - } - else - { - auto ni = allocator.NoteOff(key); - voice[ni] = 0; - } - } - - void onMidiPitchbend(int16_t pitch) override - { - this->pitch = pitch; - } - - void onMidiCC(uint8_t ccc, uint8_t value) override - { - cc[ccc] = value; - } -}; - -void init_midi_monitor() -{ - machine::add("MIDI", "Monitor"); -} \ No newline at end of file diff --git a/src/modulations.cxx b/src/modulations.cxx deleted file mode 100644 index 1a7b488..0000000 --- a/src/modulations.cxx +++ /dev/null @@ -1,320 +0,0 @@ -// Copyright (C)2021 - Eduard Heidt -// -// Author: Eduard Heidt (eh2k@gmx.de) -// -// 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. -// -// See http://creativecommons.org/licenses/MIT/ for more information. -// - -#include "machine.h" -#include -#include "stmlib/utils/random.h" - -namespace gfx -{ - void modulation_source_display(const machine::ModulationSource *mod, int x, int y); -} - -struct ModulationBase : machine::ModulationSource -{ - float value; - float attenuverter = 0; - - void display(int x, int y) override - { - gfx::modulation_source_display(this, x, y); - - y += 6; - - if (src > 0) - { - gfx::drawLine(x + 1, y + 32, x + 64, y + 32); - - if (value >= 0) - { - auto m = (value) * 3.1; - for (int yy = 34; yy < 38; yy++) - gfx::drawLine(x + 32, y + yy, x + 32 + m, y + yy); - } - else - { - auto m = (value) * 3.0; - for (int yy = 34; yy < 38; yy++) - gfx::drawLine(x + 33 + m, y + yy, x + 31, y + yy); - } - } - } -}; - -#include "peaks/modulations/lfo.h" -#include "peaks/modulations/multistage_envelope.h" -#include "braids/envelope.h" - -struct Envelope : ModulationBase -{ - uint8_t attack = 0; - uint8_t decay = 0; - uint8_t tr_channel = 0; - - braids::Envelope _processor; - - void eeprom(std::function read_write) override - { - read_write(&tr_channel, sizeof(tr_channel)); - read_write(&attack, sizeof(attack)); - read_write(&decay, sizeof(decay)); - read_write(&attenuverter, sizeof(attenuverter)); - } - - Envelope() - { - _processor.Init(); - param[0].init("TRIG", &tr_channel, tr_channel, 0, machine::get_io_info(0)); - param[0].print_value = [&](char *tmp) - { - if (tr_channel == 0) - sprintf(tmp, "!"); - else - machine::get_io_info(0, tr_channel - 1, tmp); - }; - param[1].init("Att.", &attack, 0); - param[2].init("Dec.", &decay); - param[3].init("%", &attenuverter, attenuverter, -1, +1); - param[3].flags |= machine::Parameter::IS_HIRES; - } - - void process(machine::Parameter &target, machine::ControlFrame &frame) override - { - _processor.Update(attack >> 1, decay >> 1); - - bool trigger = false; - if (tr_channel == 0) - { - trigger = frame.trigger; - } - else - { - trigger = machine::get_trigger(tr_channel - 1); - } - - if (trigger) - _processor.Trigger(braids::ENV_SEGMENT_ATTACK); - - value = ((float)_processor.Render() / UINT16_MAX) * 10.f; - - target.modulate(value * this->attenuverter); - } -}; - -struct LFO : ModulationBase -{ - uint8_t tr_channel = 0; - uint8_t shape = peaks::LFO_SHAPE_SINE; - - uint16_t rate; - peaks::Lfo _processor; - - void eeprom(std::function read_write) override - { - read_write(&rate, sizeof(rate)); - read_write(&attenuverter, sizeof(attenuverter)); - } - - LFO() - { - _processor.Init(); - _processor.set_level(UINT16_MAX); - _processor.set_rate(rate); - _processor.set_parameter(INT16_MAX - 32768); - _processor.set_reset_phase(INT16_MAX - 32768); - - param[0].init_presets("TRIG", &tr_channel, tr_channel, 0, 1 + machine::get_io_info(0)); - param[0].print_value = [&](char *tmp) - { - if (tr_channel == 0) - sprintf(tmp, "-"); - else if (tr_channel - 1 == 0) - sprintf(tmp, "!"); - else - machine::get_io_info(0, tr_channel - 2, tmp); - }; - - _processor.set_shape(peaks::LFO_SHAPE_SINE); - param[1].init_presets("Shape", &shape, shape, 0, peaks::LFO_SHAPE_LAST - 1); - param[1].print_value = [&](char *tmp) - { - switch (shape) - { - case peaks::LFO_SHAPE_SINE: - sprintf(tmp, "SIN"); - break; - case peaks::LFO_SHAPE_TRIANGLE: - sprintf(tmp, "TRI"); - break; - case peaks::LFO_SHAPE_SQUARE: - sprintf(tmp, "SQR"); - break; - case peaks::LFO_SHAPE_STEPS: - sprintf(tmp, "STEPS"); - break; - case peaks::LFO_SHAPE_NOISE: - sprintf(tmp, "NOISE"); - break; - default: - sprintf(tmp, ">?????"); - break; - } - }; - param[2].init("Freq.", &rate, INT16_MAX); - param[3].init("%", &attenuverter, attenuverter, -1, +1); - param[3].flags |= machine::Parameter::IS_HIRES; - } - - uint32_t last_trig = 0; - void process(machine::Parameter &target, machine::ControlFrame &frame) override - { - _processor.set_shape((peaks::LfoShape)shape); - _processor.set_rate(rate); - - peaks::GateFlags flags[] = {peaks::GATE_FLAG_LOW, peaks::GATE_FLAG_LOW}; - - if (tr_channel == 0) - { - // Free LFO - } - else if (tr_channel == 1) - { - if (frame.trigger) - { - flags[0] = peaks::GATE_FLAG_RISING; - flags[1] = peaks::GATE_FLAG_FALLING; - } - } - else - { - if (machine::get_trigger(tr_channel - 2)) - { - flags[0] = peaks::GATE_FLAG_RISING; - flags[1] = peaks::GATE_FLAG_FALLING; - } - } - - int16_t ivalue = 0; - _processor.Process(flags, &ivalue, 1); - value = (float)ivalue / INT16_MAX * 10.f; - target.modulate(value * this->attenuverter); - } -}; - -// https://www.musicdsp.org/en/latest/Filters/265-output-limiter-using-envelope-follower-in-c.html -class EnvelopeFollower -{ -public: - EnvelopeFollower() : envelope(0) - { - } - - void init(float attackMs, float releaseMs, int sampleRate) - { - a = powf(0.01f, 1.0f / (attackMs * sampleRate * 0.001f)); - r = powf(0.01f, 1.0f / (releaseMs * sampleRate * 0.001f)); - } - - float process(float sample) - { - float v = ::fabsf(sample); - if (v > envelope) - envelope = a * (envelope - v) + v; - else - envelope = r * (envelope - v) + v; - - return envelope; - } - -protected: - float envelope; - float a; - float r; -}; - -struct EF : ModulationBase -{ - uint8_t cv_channel = 0; - uint8_t attack = 0; - uint8_t release = 0; - - // DC Block.. - float output_ = 0.0f; - float input_ = 0.0f; - - EnvelopeFollower follower_; - - void eeprom(std::function read_write) override - { - read_write(&cv_channel, sizeof(cv_channel)); - read_write(&attack, sizeof(attack)); - read_write(&release, sizeof(release)); - read_write(&attenuverter, sizeof(attenuverter)); - } - - EF() - { - param[0].init("SRC", &cv_channel, cv_channel, 0, machine::get_io_info(1) - 1); - param[0].print_value = [&](char *tmp) - { - machine::get_io_info(1, cv_channel, tmp); - }; - - param[1].init("ATT", &attack, 0); - param[2].init("REL", &release); - param[1].value_changed = param[2].value_changed = [&]() - { - follower_.init(0.1f + (5.f / UINT8_MAX) * attack, 0.1f + (20.f / UINT8_MAX) * release, machine::SAMPLE_RATE); - }; - param[2].value_changed(); - - param[3].init("%", &attenuverter, attenuverter, -1, +1); - param[3].flags |= machine::Parameter::IS_HIRES; - } - - void process(machine::Parameter &target, machine::ControlFrame &frame) override - { - float in = machine::get_cv(cv_channel); - - // https://ccrma.stanford.edu/~jos/fp/DC_Blocker_Software_Implementations.html - float out = in - input_ + (0.995f * output_); - output_ = out; - input_ = in; - - value = follower_.process(out) * 10.f; - CONSTRAIN(value, 0, 10.f); - - target.modulate(value * attenuverter); - } -}; - -void init_modulations() -{ - machine::add_modulation_source("ENV"); - machine::add_modulation_source("LFO"); -#ifndef MACHINE_TU_REV12 - machine::add_modulation_source("EF"); -#endif -} \ No newline at end of file diff --git a/src/open303.cxx b/src/open303.cxx deleted file mode 100644 index fe806bf..0000000 --- a/src/open303.cxx +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright (C)2022 - Eduard Heidt -// -// Author: Eduard Heidt (eh2k@gmx.de) -// -// 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. -// -// See http://creativecommons.org/licenses/MIT/ for more information. -// - -#include "stmlib/stmlib.h" -#include "machine.h" -#include "open303/src/rosic_Open303.h" -#include -#define protected public -#include "open303/src/wavetable_gen/rosic_MipMappedWaveTable.h" - -#ifndef FLASHMEM -#include "pgmspace.h" -#endif - -using namespace machine; -using namespace rosic; - -struct Open303Engine : public Engine, rosic::Open303 -{ - Open303Engine() : Engine(TRIGGER_INPUT | VOCT_INPUT), rosic::Open303(nullptr, nullptr) - { - Open303::setSampleRate(machine::SAMPLE_RATE, 1); - Open303::setWaveform(_waveform); - Open303::setTuning(Open303::tuning); - Open303::setAmpSustain(0); - Open303::setAccentAttack(Open303::accentAttack); - Open303::setPitchBend(0); - Open303::setSlideTime(Open303::slideTime); - Open303::setVolume(-12); - Open303::filter.setMode(TeeBeeFilter::TB_303); - - param[0].init_v_oct("Freq", &_pitch); - param[1].init("Acc", &_acc, 100, 1.f, 100.f); - param[2].init("Cutoff", &_cutoff, 0.25f); - param[3].init("Reso", &_res, 33.f, 1.f, 100.f); - param[4].init("EnvMod", &_env, 25.f, 1.f, 100.f); - param[5].init("Dec", &_dec, 0.5f); - // param[6].init("WAVEFORM", &_waveform, _waveform, 0, 1); - // param[6].print_value = [&](char *val) - // { - // sprintf(val, _waveform ? "SQR" : "SAW"); - // }; - _square = (WaveTable *)machine::malloc(sizeof(WaveTable)); - if (_square) - { - MipMappedWaveTable tmp; - tmp.fillWithSquare303(); - tmp.generateMipMap(*_square); - oscillator.setWaveTables(_square, _square); - } - } - - WaveTable *_square = nullptr; - - ~Open303Engine() override - { - machine::mfree(_square); - } - float buffer[FRAME_BUFFER_SIZE]; - - float _pitch = -1; - float _acc = 0; - float _cutoff = 0; - float _res = 0; - float _env = 0; - float _dec = 0; - float _note; - uint8_t _waveform = 1; - bool _gate; - - void process(const ControlFrame &frame, OutputFrame &of) override - { - if (_square == nullptr) - return; - - Open303::setWaveform(_waveform); - Open303::setAccent(_acc); - Open303::setCutoff(linToExp(_cutoff, 0.0, 1.0, 314.0, 2394.0)); - Open303::setResonance(_res); - Open303::setEnvMod(_env); - Open303::setDecay(linToExp(_dec, 0.0, 1.0, 200.0, 2000.0)); - if (_acc > 0) - Open303::setAccentDecay(linToExp(_dec, 0.0, 1.0, 200.0, 2000.0)); - - _note = (float)machine::DEFAULT_NOTE + 24 + frame.qz_voltage(this->io, _pitch) * 12; - CONSTRAIN(_note, 0, 128); - - _gate |= frame.gate; - - if (frame.trigger) - Open303::triggerNote(_note, _acc > 0); - else if (!frame.gate) - { - Open303::releaseNote(_note); - _gate = false; - } - else - Open303::oscFreq = pitchToFreq(_note, tuning); - - for (int i = 0; i < FRAME_BUFFER_SIZE; i++) - buffer[i] = Open303::getSample(); - - of.push(buffer, machine::FRAME_BUFFER_SIZE); - } - - void display() override - { - gfx::drawEngine(this, _square ? nullptr : machine::OUT_OF_MEMORY); - } - - uint32_t _r = 0; - void display_screensaver() override - { - static const uint8_t _screenSaver[] FLASHMEM = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, //> - 0x00, 0x80, 0x0f, 0xe0, 0x01, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x30, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x00, - 0x80, 0x01, 0x06, 0xc0, 0x00, 0x01, 0xc0, 0x00, 0x0f, 0xe0, 0x01, 0x03, - 0x60, 0x00, 0x0f, 0xe0, 0x01, 0x06, 0x30, 0x80, 0x1f, 0xf0, 0x03, 0x0c, - 0x10, 0x80, 0x1f, 0xf0, 0x03, 0x08, 0x18, 0x80, 0x1f, 0xf0, 0x03, 0x18, - 0x08, 0x80, 0x1f, 0xf0, 0x03, 0x10, 0x08, 0x80, 0x1f, 0xf0, 0x03, 0x30, - 0x04, 0x80, 0x1f, 0xf0, 0x03, 0x20, 0x04, 0x80, 0x1f, 0xf0, 0x03, 0x20, - 0x04, 0x80, 0x1f, 0xf0, 0x03, 0x60, 0x06, 0x00, 0x0f, 0xe0, 0x01, 0x40, - 0x02, 0x00, 0x0f, 0xe0, 0x01, 0x40, 0x02, 0x00, 0x06, 0xc0, 0x00, 0x40, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, - 0xe2, 0x07, 0x00, 0x00, 0xe0, 0x47, 0xc2, 0x03, 0x00, 0x00, 0xc0, 0x43, - 0x82, 0x01, 0x00, 0x00, 0x80, 0x41, 0x82, 0x01, 0x00, 0x00, 0x80, 0x41, - 0x86, 0x01, 0x00, 0x00, 0xc0, 0x60, 0x04, 0x03, 0x00, 0x00, 0xc0, 0x60, - 0x04, 0x07, 0x00, 0x00, 0xc0, 0x20, 0x0c, 0x06, 0x00, 0x00, 0x60, 0x20, - 0x08, 0x0e, 0x00, 0x00, 0x70, 0x30, 0x08, 0x1c, 0x00, 0x00, 0x30, 0x10, - 0x18, 0x38, 0x00, 0x00, 0x1c, 0x18, 0x10, 0x70, 0x00, 0x00, 0x0e, 0x08, - 0x20, 0xe0, 0x00, 0x00, 0x0f, 0x0c, 0x60, 0xc0, 0x03, 0xc0, 0x03, 0x06, - 0xc0, 0x00, 0x0f, 0xf0, 0x00, 0x02, 0x80, 0x01, 0xfc, 0x3f, 0x00, 0x01, - 0x00, 0x03, 0xe0, 0x07, 0xc0, 0x00, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x1c, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x07, 0x00, 0x00, 0x80, 0x0f, 0xf0, 0x01, 0x00, - 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, //> - 0x00, 0xe0, 0xff, 0xff, 0x07, 0x00, 0x00, 0xf0, 0x0f, 0xe0, 0x1f, 0x00, - 0x00, 0xfc, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x7c, 0x00, - 0x00, 0x0f, 0x00, 0x00, 0xf0, 0x00, 0x80, 0x07, 0x06, 0xc0, 0xe0, 0x01, - 0xc0, 0x03, 0x0f, 0xe0, 0x81, 0x03, 0xe0, 0x81, 0x1f, 0xf0, 0x83, 0x07, - 0xf0, 0x80, 0x1f, 0xf0, 0x03, 0x0f, 0x78, 0xc0, 0x3f, 0xf8, 0x07, 0x1e, - 0x38, 0xc0, 0x3f, 0xf8, 0x07, 0x1c, 0x3c, 0xc0, 0x3f, 0xf8, 0x07, 0x3c, - 0x1c, 0xc0, 0x3f, 0xf8, 0x07, 0x38, 0x1c, 0xc0, 0x3f, 0xf8, 0x07, 0x78, - 0x0e, 0xc0, 0x3f, 0xf8, 0x07, 0x70, 0x0e, 0xc0, 0x3f, 0xf8, 0x07, 0x70, - 0x0e, 0xc0, 0x1f, 0xf0, 0x07, 0xf0, 0x0f, 0x80, 0x1f, 0xf0, 0x03, 0xe0, - 0x07, 0x80, 0x0f, 0xe0, 0x03, 0xe0, 0x07, 0x00, 0x0f, 0xe0, 0x01, 0xe0, - 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe7, 0x07, 0x00, 0x00, 0xe0, 0xe7, - 0xf7, 0x07, 0x00, 0x00, 0xe0, 0xef, 0xe7, 0x07, 0x00, 0x00, 0xe0, 0xe7, - 0xc7, 0x03, 0x00, 0x00, 0xc0, 0xe3, 0xc7, 0x03, 0x00, 0x00, 0xc0, 0xe3, - 0xcf, 0x03, 0x00, 0x00, 0xe0, 0xf1, 0x8e, 0x07, 0x00, 0x00, 0xe0, 0xf1, - 0x8e, 0x0f, 0x00, 0x00, 0xe0, 0x71, 0x1e, 0x0f, 0x00, 0x00, 0xf0, 0x70, - 0x1c, 0x1f, 0x00, 0x00, 0xf8, 0x78, 0x1c, 0x3e, 0x00, 0x00, 0x7c, 0x38, - 0x3c, 0x7c, 0x00, 0x00, 0x3e, 0x3c, 0x38, 0xf8, 0x00, 0x00, 0x1f, 0x1c, - 0x70, 0xf0, 0x03, 0xc0, 0x1f, 0x1e, 0xf0, 0xe0, 0x0f, 0xf0, 0x0f, 0x0f, - 0xe0, 0xc1, 0xff, 0xff, 0x03, 0x07, 0xc0, 0x03, 0xff, 0xff, 0xc0, 0x03, - 0x80, 0x07, 0xfc, 0x3f, 0xe0, 0x01, 0x00, 0x0f, 0xe0, 0x07, 0xf0, 0x00, - 0x00, 0x3e, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x3f, 0x00, - 0x00, 0xf0, 0x0f, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x07, 0x00, - 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00}; - - memset(gfx::display_buffer, 0, 1024); - - for (int i = 23; i > 0; i--) - { - if ((_r & (1 << i))) - gfx::drawCircle(64, 32, 26 + powf(i, 1.3f)); - } - - if (_gate) - { - _r |= 1; - gfx::drawXbm(40, 8, 48, 48, &_screenSaver[sizeof(_screenSaver) / 2]); - } - else - gfx::drawXbm(40, 8, 48, 48, &_screenSaver[0]); - - _r <<= 1; - } -}; - -void init_open303() -{ - machine::add(machine::SYNTH, "Open303"); -} - -MACHINE_INIT(init_open303); diff --git a/src/peaks.cxx b/src/peaks.cxx deleted file mode 100644 index 3208a37..0000000 --- a/src/peaks.cxx +++ /dev/null @@ -1,138 +0,0 @@ -#include "stmlib/stmlib.h" -#include "machine.h" -#include "peaks/drums/bass_drum.h" -#include "peaks/drums/fm_drum.h" -#include "peaks/drums/snare_drum.h" -#include "peaks/drums/high_hat.h" -#include "base/HiHatsEngine.hxx" - -using namespace machine; - -template -struct PeaksEngine : public Engine -{ - T _processor; - - uint16_t params_[4]; - - peaks::GateFlags flags[FRAME_BUFFER_SIZE]; - int16_t buffer[FRAME_BUFFER_SIZE]; - - PeaksEngine(uint16_t p1 = UINT16_MAX / 2, - uint16_t p2 = UINT16_MAX / 2, - uint16_t p3 = UINT16_MAX / 2, - uint16_t p4 = UINT16_MAX / 2, - const char *param1 = nullptr, - const char *param2 = nullptr, - const char *param3 = nullptr, - const char *param4 = nullptr) : Engine(engine_props) - { - memset(&_processor, 0, sizeof(T)); - _processor.Init(); - std::fill(&flags[0], &flags[FRAME_BUFFER_SIZE], peaks::GATE_FLAG_LOW); - - int P1 = 0; - int P2 = 1; - int P3 = 2; - int P4 = 3; - - if (std::is_same::value) - { - P2 = 3; - P3 = 1; - P4 = 2; - } - else if (std::is_same::value) - { - P2 = 2; - P3 = 1; - P4 = 3; - } - - param[0].init(param1, ¶ms_[P1], p1); - param[1].init(param2, ¶ms_[P2], p2); - - - param[2].init(param3, ¶ms_[P3], p3); - param[3].init(param4, ¶ms_[P4], p4); - } - - void process(const ControlFrame &frame, OutputFrame &of) override - { - _processor.Configure(params_, peaks::CONTROL_MODE_FULL); - - if (frame.trigger) - { - flags[0] = peaks::GATE_FLAG_RISING; - std::fill(&flags[1], &flags[FRAME_BUFFER_SIZE], peaks::GATE_FLAG_HIGH); - } - else if (frame.gate) - { - std::fill(&flags[0], &flags[FRAME_BUFFER_SIZE], peaks::GATE_FLAG_HIGH); - } - else - { - flags[0] = flags[0] == peaks::GATE_FLAG_HIGH ? peaks::GATE_FLAG_FALLING : peaks::GATE_FLAG_LOW; - std::fill(&flags[1], &flags[FRAME_BUFFER_SIZE], peaks::GATE_FLAG_LOW); - } - - _processor.Process(flags, buffer, FRAME_BUFFER_SIZE); - - of.push(buffer, LEN_OF(buffer)); - } -}; - -template <> -void PeaksEngine::process(const ControlFrame &frame, OutputFrame &of) -{ - auto bak = params_[0]; - int val = params_[0]; - val += (frame.qz_voltage(this->io, 0.f) * INT16_MAX / 3); // CV or Midi Pitch ?! - val += (-2 * INT16_MAX / 3); - CONSTRAIN(val, 0, UINT16_MAX); - params_[0] = val; - _processor.Configure(params_, peaks::CONTROL_MODE_FULL); - params_[0] = bak; - - if (frame.trigger) - { - flags[0] = peaks::GATE_FLAG_RISING; - std::fill(&flags[1], &flags[FRAME_BUFFER_SIZE], peaks::GATE_FLAG_HIGH); - } - else if (frame.gate) - { - std::fill(&flags[0], &flags[FRAME_BUFFER_SIZE], peaks::GATE_FLAG_HIGH); - } - else - { - flags[0] = flags[0] == peaks::GATE_FLAG_HIGH ? peaks::GATE_FLAG_FALLING : peaks::GATE_FLAG_LOW; - std::fill(&flags[1], &flags[FRAME_BUFFER_SIZE], peaks::GATE_FLAG_LOW); - } - - _processor.Process(flags, buffer, FRAME_BUFFER_SIZE); - - of.push(buffer, LEN_OF(buffer)); -} - - -class Hihat808 : public HiHatsEngine -{ - PeaksEngine oh; - PeaksEngine ch; - -public: - Hihat808() : oh(UINT16_MAX), ch(UINT16_MAX) - { - _ch = &ch; - _oh = &oh; - } -}; - -void init_drums_peaks() -{ - add>(DRUM, "FM-Drum", INT16_MAX, INT16_MAX, INT16_MAX, INT16_MAX, "Freq.", "Noise", "FM", "Decay"); - add>(DRUM, "808ish-BD", INT16_MAX, INT16_MAX, INT16_MAX, INT16_MAX, "Pitch", "Punch", "Tone", "Decay"); - add>(DRUM, "808ish-SD", INT16_MAX, INT16_MAX, INT16_MAX, INT16_MAX, "Pitch", "Snappy", "Tone", "Decay"); - // add>(DRUM, "808ish-HiHat", INT16_MAX, INT16_MAX, INT16_MAX, INT16_MAX, "Decay"); - add(DRUM, "808ish-HiHat"); -} \ No newline at end of file diff --git a/src/plaits.cxx b/src/plaits.cxx deleted file mode 100644 index d739fbc..0000000 --- a/src/plaits.cxx +++ /dev/null @@ -1,373 +0,0 @@ -#include "stmlib/stmlib.h" -#include "machine.h" -#define private public // ;-) -#include "plaits/dsp/voice.h" -#include "stmlib/dsp/dsp.h" - -using namespace machine; - -struct InitArgs -{ - int engine; - int output; // output=0 -> out, output=1 -> aux, output=3 -> stereo -}; - -struct PlaitsEngine : public Engine -{ - plaits::Modulations modulations; - plaits::Voice voice; - plaits::Patch patch; - - float bufferOut[machine::FRAME_BUFFER_SIZE]; - float bufferAux[machine::FRAME_BUFFER_SIZE]; - float out_aux_mix = 0.5f; - float _pitch = 0; - float _base_pitch = machine::DEFAULT_NOTE; - - const uint8_t engine = 0; - const uint8_t output = 0; - - uint8_t *_buffer = nullptr; - plaits::Engine *_plaitsEngine = nullptr; - - ~PlaitsEngine() override - { - machine::mfree(_plaitsEngine); - machine::mfree(_buffer); - } - - template - void alloc_engine(size_t mem = 48) - { - _plaitsEngine = new (machine::malloc(sizeof(T))) T(); - _buffer = (uint8_t *)machine::malloc(mem * sizeof(float)); - - stmlib::BufferAllocator allocator; - allocator.Init(_buffer, mem * sizeof(float)); - _plaitsEngine->Init(&allocator); - } - - float harmonics, timbre, morph; - - void init_params(const char *h, float hh, const char *t, float tt, const char *m, float mm, const plaits::PostProcessingSettings &settings) - { - param[1].init(h, &harmonics, hh); - param[2].init(t, &timbre, tt); - param[3].init(m, &morph, mm); - patch.harmonics = harmonics; - patch.timbre = timbre; - patch.morph = morph; - if (_plaitsEngine) - _plaitsEngine->post_processing_settings = settings; - } - - PlaitsEngine(const InitArgs &args) : Engine(TRIGGER_INPUT | VOCT_INPUT), engine(args.engine), output(args.output) - { - voice.Init(); - patch.engine = 0; - memset(&patch, 0, sizeof(patch)); - patch.note = machine::DEFAULT_NOTE + _pitch * 12.f; - - modulations.timbre_patched = true; - patch.timbre_modulation_amount = 0; - - modulations.frequency_patched = true; - patch.frequency_modulation_amount = 0; - - modulations.morph_patched = true; - patch.morph_modulation_amount = 0; - - memset(&modulations, 0, sizeof(modulations)); - - patch.lpg_colour = 0.5; - patch.decay = 0.5; - modulations.trigger_patched = true; // trigger; - // modulations.level_patched = true; //trigger; - // modulations.level = 1; - - param[0].init_v_oct("Pitch", &_pitch); - - switch (engine) - { - case 0: - alloc_engine(); - init_params("Detune", 0.5f, "Square", 0.5f, "CSAW", 0.5f, {0.8f, 0.8f, false}); - break; - case 1: - alloc_engine(); - init_params("Waveform", 0.8f, "Fold", 0.8f, "Asym.", 0.75f, {0.7f, 0.6f, false}); - break; - case 2: - alloc_engine(); - init_params("Ratio", 0.8f, "Mod", 0.8f, "Feedb.", 0.75f, {0.6f, 0.6f, false}); - break; - case 3: - alloc_engine(); - init_params("Ratio", 0.8f, "Frm/Fq.", 0.8f, "Width", 0.75f, {0.7f, 0.6f, false}); - param[5].init("PD-Mix", &out_aux_mix, out_aux_mix); - break; - case 4: - alloc_engine(); - init_params("Bump", 0.8f, "Peak", 0.8f, "Shape", 0.75f, {0.8f, 0.8f, false}); - break; - case 5: - alloc_engine(64 * sizeof(const int16_t *)); - init_params("Bank", 0.f, "Row", 0.8f, "Column", 0.75f, {0.6f, 0.6f, false}); - param[1].init(param[1].name, param[1].value.fp, 0.0f, 0, 0.5f); - _plaitsEngine->LoadUserData(nullptr); - break; - case 6: - { - alloc_engine(plaits::kChordNumChords * plaits::kChordNumNotes + plaits::kChordNumChords + plaits::kChordNumNotes); - init_params("Chord", 0.5f, "Inv.", 0.5f, "Shape", 0.5f, {0.8f, 0.8f, false}); - - auto &chord = static_cast(_plaitsEngine)->chords_.chord_index_quantizer_.quantized_value_; - param[1].init_presets("Chord", (uint8_t *)&chord, 8, 0, - static_cast(_plaitsEngine)->chords_.chord_index_quantizer_.num_steps() - 1); - param[1].print_value = [&](char *tmp) - { - const int chord_index = static_cast(_plaitsEngine)->chords_.chord_index(); - sprintf(tmp, "%s", plaits::chord_names[chord_index]); - }; - } - break; - // case 15: // speech_engine_ - // alloc_engine(false, 0.8f, 0.8f); - // break; - // case 8: // swarm_engine_ - // alloc_engine(false, -3.0f, 1.0f); - // break; - // case 9: // noise_engine_ - // alloc_engine(false, -1.0f, -1.0f); - // break; - // case 10: // particle_engine_ - // alloc_engine(false, -2.0f, 1.0f); - // break; - // case 11: // string_engine_ - // alloc_engine(true, -1.0f, 0.8f); - // break; - // case 12: // modal_engine_ - // alloc_engine(true, -0.5f, 0.8f); - // break; - case 13: - _base_pitch += -24.f; - alloc_engine(); - init_params(output == 0 ? "Drive" : "Punch", 0.8f, "Tone", 0.5f, "Decay", 0.5f, {0.8f, 0.8f, true}); - break; - case 14: - alloc_engine(); - init_params("Snappy", 0.5f, "Tone", 0.5f, "Decay", 0.5f, {0.8f, 0.8f, true}); - break; - case 15: - alloc_engine(); - init_params("Noise", 0.5f, "Tone", 0.9f, "Decay", 0.6f, {0.8f, 0.8f, true}); - break; - // engines 2 - case 16: - alloc_engine(); - init_params("Harsh", 0.5f, "Cutoff", 0.5f, "Morph", 0.5f, {1.f, 1.f, false}); - out_aux_mix = 0; - modulations.timbre_patched = false; - std::swap(param[1], param[3]); - param[4].init("EnvMod", &patch.timbre_modulation_amount, 0, -1.f, 1.f); - param[5].init("Decay", &patch.decay, 0.5f, 0, 0.99f); - break; -#if 0 - case 17: - alloc_engine(plaits::kMaxBlockSize * 4); - _plaitsEngine->post_processing_settings = {0.7f, 0.7f, false}; - break; - case 18: - case 19: - case 20: - alloc_engine( - plaits::kMaxBlockSize * 4 + plaits::kMaxBlockSize * plaits::kNumSixOpVoices + sizeof(plaits::fm::Patch) * 96 / sizeof(float)); - init_params("", 0.0f, "Mod", 0.5f, "Env", 0.5f, {1.f, 1.f, false}); - param[1].init_presets("Preset", &static_cast(_plaitsEngine)->patch_index, 0, 0, 95); - param[1].print_value = [&](char *name) - { - auto i = static_cast(_plaitsEngine)->patch_index; - sprintf(name, ">%.10s", static_cast(_plaitsEngine)->patches_[i].name); - }; - _plaitsEngine->LoadUserData(plaits::fm_patches_table[0]); - modulations.morph_patched = false; - param[5].init("EnvMod", &patch.morph_modulation_amount, 0.0f, -1.f, 1.f); - - modulations.timbre_patched = false; - param[4].init("ModMod", &patch.timbre_modulation_amount, 0.0f, -1.f, 1.f); - break; - case 21: - alloc_engine(plaits::kMaxBlockSize * 4); - _plaitsEngine->post_processing_settings = {0.7f, 0.7f, false}; - patch.engine = (engine - 16); - break; - case 22: - alloc_engine(16 + 3 * (1024 + 265)); - _plaitsEngine->post_processing_settings = {0.8f, 0.8f, false}; - patch.engine = (engine - 16); - break; - case 23: - alloc_engine(plaits::kChordNumChords * plaits::kChordNumNotes + plaits::kChordNumChords + plaits::kChordNumNotes); - _plaitsEngine->post_processing_settings = {0.5f, 0.5f, false}; - patch.engine = (engine - 16); - break; -#endif - } - - if (engine >= 16) - patch.engine = (engine - 16); - - _plaitsEngine->Reset(); - - if (is_drum()) - { - param[0].init("Pitch", &_pitch, 0, -1.f, 1.f); - // modulations.frequency_patched = false; - // param[4].init("Bend", &patch.frequency_modulation_amount, 0.0f, -1.f, 1.f); - } - else - { - if (param[4].name == nullptr) - param[4].init("Decay", &patch.decay); - - if (param[5].name == nullptr) - { - if (output == 2) - param[5].init("AuxMix", &out_aux_mix, out_aux_mix); - else - param[5].init("Color", &patch.lpg_colour); - } - } - } - - bool is_drum() - { - return engine == 13 || engine == 14 || engine == 15; - } - - void process(const machine::ControlFrame &frame, OutputFrame &of) override - { - float a = bufferOut[0] / 256.f; - ONE_POLE(patch.harmonics, harmonics + a, 0.1f); - ONE_POLE(patch.timbre, timbre + a, 0.1f); - ONE_POLE(patch.morph, morph + a, 0.1f); - - modulations.level_patched = false; - modulations.level = 1.f; - - patch.note = _base_pitch + frame.qz_voltage(this->io, _pitch) * 12; - - float last_decay = patch.decay; - float last_morph = patch.morph; - // if (!frame.trigger && frame.gate) - // { - // if (is_drum()) - // patch.morph = 1; - // else - // patch.decay = 1; - - // modulations.level = 1.f; - // // modulations.level_patched = true; - // } - modulations.engine = patch.engine; - modulations.trigger = frame.trigger ? 1 : 0; - - if (!is_drum()) - modulations.trigger_patched = patch.decay < 1.f; - - if (!this->io->tr) - { - modulations.trigger_patched = false; - modulations.level_patched = true; - modulations.level = patch.decay; - patch.decay = 0.001f; - } - else - { - modulations.trigger_patched = true; - } - - modulations.note = 0; - voice.Render(_plaitsEngine, patch, modulations, bufferOut, bufferAux, machine::FRAME_BUFFER_SIZE); - - patch.decay = last_decay; - patch.morph = last_morph; - - switch (output) - { - case 0: - of.out = bufferOut; - break; - case 1: - of.out = bufferAux; - break; - case 2: - for (int i = 0; i < machine::FRAME_BUFFER_SIZE; i++) - bufferOut[i] = stmlib::Crossfade(bufferOut[i], bufferAux[i], out_aux_mix); - of.out = bufferOut; - break; - case 3: - of.out = bufferOut; - of.aux = bufferAux; - break; - } - } - - void display() override - { - for (auto &p : param) - { - if (p.name == nullptr) - break; - - if (p.value.fp == &patch.decay) - { - if (!this->io->tr) - p.name = "Level"; - else - p.name = "Decay"; - } - } - - gfx::drawEngine(this); - } -}; - -void init_plaits() -{ - - // engine1 - machine::add(machine::M_OSC, "Virt.Analog", {0, 0}); - machine::add(machine::M_OSC, "Waveshaping", {1, 0}); - machine::add(machine::M_OSC, "2-OP-FM", {2, 0}); - machine::add(machine::M_OSC, "Formant/PD", {3, 2}); - machine::add(machine::M_OSC, "Harmonic", {4, 2}); - machine::add(machine::M_OSC, "Wavetable", {5, 2}); - machine::add(machine::M_OSC, "Chord", {6, 0}); - // machine::add>(machine::M_OSC, "VowelAndSpeech", 0.f, 0.95f, 0.5f, 0.25f, "Freq", "Harm", "Timbre", "Morph"); - - // machine::add>(machine::M_OSC, "Swarm", 0.f, 0.5f, 0.5f, 0.5f, "Freq", "Harm", "Timbre", "Morph"); - // machine::add>(machine::M_OSC, "Noise", 4.f, 0.0f, 1.0f, 1.0f, "Cutoff", "LP/HP", "Clock", "Q"); - // machine::add>(machine::M_OSC, "Particle", 4.f, 0.8f, 0.9f, 1.0f, "Freq", "Harm", "Timbre", "Morph"); - // machine::add>(machine::M_OSC, "String", 0.f, 0.5f, 0.5f, 0.5f, "Freq", "Harm", "Timbre", "Decay"); - // machine::add>(machine::M_OSC, "Modal", 0.f, 0.5f, 0.5f, 0.5f, "Freq", "Harm", "Timbre", "Decay"); - - machine::add(machine::DRUM, "Analog BD", {13, 0}); - machine::add(machine::DRUM, "Analog SD", {14, 0}); - - machine::add(machine::DRUM, "Analog HH2", {15, 1}); - machine::add(machine::DRUM, "Analog HH", {15, 0}); - machine::add(machine::DRUM, "909ish-BD", {13, 1}); - machine::add(machine::DRUM, "909ish-SD", {14, 1}); -} - -void init_plaits2() -{ - // engine2 https://pichenettes.github.io/mutable-instruments-documentation/modules/plaits/firmware/ - machine::add(machine::SYNTH, "ClassicVAVCF", {16, 2}); - // machine::add(machine::SYNTH, "SixOpFM", {18, 0}); - // machine::add(machine::M_OSC, "PhaseDistort", {17, 0, 0.f, 0.8f, 0.8f, 0.75f, "Freq", "Harm", "Timbre", "Morph"}); - // machine::add(machine::M_OSC, "WaveTerrain", {21, 0, 0.f, 0.5f, 0.5f, 0.5f, "Freq", "Harm", "Timbre", "Morph"}); - // machine::add(machine::M_OSC, "StringEngine", {22, 0, 0.f, 0.5f, 0.5f, 0.5f, "Freq", "Harm", "Timbre", "Morph"}); - // machine::add(machine::M_OSC, "ChipTune", {23, 1, 0.f, 0.5f, 0.5f, 0.5f, "Freq", "Harm", "Timbre", "Morph"}); -} \ No newline at end of file diff --git a/src/polyVA.cxx b/src/polyVA.cxx deleted file mode 100644 index 0d4dda1..0000000 --- a/src/polyVA.cxx +++ /dev/null @@ -1,132 +0,0 @@ -#include "machine.h" -#include "plaits/dsp/engine/virtual_analog_engine.h" -#include "plaits/dsp/envelope.h" -#include "stmlib/algorithms/voice_allocator.h" -#include "stmlib/utils/random.h" - -using namespace machine; - -struct PolyVAEngine : public machine::MidiEngine -{ - plaits::VirtualAnalogEngine voice[6]; - - uint8_t buffer[LEN_OF(voice) * 48 * sizeof(float)]; - stmlib::BufferAllocator buffAllocator; - - plaits::EngineParameters parameters[LEN_OF(voice)]; - plaits::LPGEnvelope lpg[LEN_OF(voice)]; - bool enveloped[LEN_OF(voice)] = {}; - - stmlib::VoiceAllocator allocator; - - float timbre; - float morph; - float harmonics; - float pitch = 0; - float pitch_bend = 0; - - float decay = 0.5f; - float hf = 1.f; - float pan[LEN_OF(voice)]; - float stereo; - - float polyBuffL[machine::FRAME_BUFFER_SIZE]; - float polyBuffR[machine::FRAME_BUFFER_SIZE]; - float voiceBuff[machine::FRAME_BUFFER_SIZE]; - float dummy[machine::FRAME_BUFFER_SIZE]; - - PolyVAEngine() - { - allocator.Init(); - allocator.set_size(LEN_OF(voice)); - param[0].init_v_oct("Pitch", &pitch); - param[1].init("Harmo", &harmonics); - param[2].init("Timbre", &timbre); - param[3].init("Morph", &morph); - param[4].init("Decay", &decay, decay); - param[5].init("Stereo", &stereo, 0.5f); - - memset(buffer, 0, sizeof(buffer)); - buffAllocator.Init(buffer, sizeof(buffer)); - - for (size_t i = 0; i < LEN_OF(voice); i++) - { - lpg[i].Init(); - voice[i].Init(&buffAllocator); - } - } - - void process(const machine::ControlFrame &frame, OutputFrame &of) override - { - std::fill_n(polyBuffL, FRAME_BUFFER_SIZE, 0); - std::fill_n(polyBuffR, FRAME_BUFFER_SIZE, 0); - - const float short_decay = (200.0f * FRAME_BUFFER_SIZE) / SAMPLE_RATE * - stmlib::SemitonesToRatio(-96.0f * decay); - - const float decay_tail = (20.0f * FRAME_BUFFER_SIZE) / SAMPLE_RATE * - stmlib::SemitonesToRatio(-72.0f * decay + 12.0f * hf) - - short_decay; - - for (size_t i = 0; i < LEN_OF(voice); i++) - { - auto p = parameters[i]; - p.note += (pitch * 12.f) + pitch_bend; - p.timbre = timbre; - p.morph = morph; - p.harmonics = harmonics; - - voice[i].Render(p, voiceBuff, dummy, FRAME_BUFFER_SIZE, &enveloped[i]); - - lpg[i].ProcessPing(0.5f, short_decay, decay_tail, hf); - - float l = cosf(pan[i] * M_PI / 2); - float r = sinf(pan[i] * M_PI / 2); - - for (int s = 0; s < FRAME_BUFFER_SIZE; s++) - { - polyBuffL[s] += (voiceBuff[s] * lpg[i].gain()) * l; - polyBuffR[s] += (voiceBuff[s] * lpg[i].gain()) * r; - } - - parameters[i].trigger = plaits::TriggerState::TRIGGER_LOW; - } - - of.push(polyBuffL, FRAME_BUFFER_SIZE); - of.push(polyBuffR, FRAME_BUFFER_SIZE); - } - - void onMidiNote(uint8_t key, uint8_t velocity) override // NoteOff: velocity == 0 - { - if (velocity > 0) - { - auto ni = allocator.NoteOn(key); - parameters[ni].trigger = plaits::TriggerState::TRIGGER_RISING_EDGE; - parameters[ni].note = key; - parameters[ni].accent = velocity > 100; - - pan[ni] = 0.5f + stereo * (stmlib::Random::GetFloat() - 0.5f); - - lpg[ni].Trigger(); - } - else - { - allocator.NoteOff(key); - } - } - - void onMidiPitchbend(int16_t pitch) override - { - pitch_bend = ((float)pitch / 8192) * 12; - } - - void onMidiCC(uint8_t ccc, uint8_t value) override - { - // nothing implemented.. - } -}; - -void init_midi_polyVA() -{ - machine::add("MIDI", "VAx6"); -} \ No newline at end of file diff --git a/src/quantizer.cxx b/src/quantizer.cxx deleted file mode 100644 index a35d8c8..0000000 --- a/src/quantizer.cxx +++ /dev/null @@ -1,16 +0,0 @@ - -#include "machine.h" -#include "braids/quantizer.h" -#include "braids/quantizer_scales.h" -#include "braids/settings.h" - -using namespace braids; -using namespace machine; - -void init_quantizer() -{ - for(size_t i = 0; i < LEN_OF(braids::scales); i++) - machine::add_quantizer_scale(braids::settings.metadata(braids::Setting::SETTING_QUANTIZER_SCALE).strings[i], (const machine::QuantizerScale&)braids::scales[i]); -} - -MACHINE_INIT(init_quantizer); \ No newline at end of file diff --git a/src/rings.cxx b/src/rings.cxx deleted file mode 100644 index d4bd4f6..0000000 --- a/src/rings.cxx +++ /dev/null @@ -1,103 +0,0 @@ -#include "stmlib/stmlib.h" -#include "machine.h" -#include "rings/dsp/strummer.h" - -using namespace machine; - -struct ResonatorEngine : public Engine -{ - uint8_t _model; - rings::Strummer strummer; - rings::Part *part; - rings::Patch patch; - rings::PerformanceState performance_state; - float bufferOut[FRAME_BUFFER_SIZE]; - float bufferAux[FRAME_BUFFER_SIZE]; - - float in[FRAME_BUFFER_SIZE]; - - float _pitch; - - ResonatorEngine() : Engine(TRIGGER_INPUT | VOCT_INPUT | AUDIO_PROCESSOR) - { - memset(&strummer, 0, sizeof(rings::Strummer)); - memset(&patch, 0, sizeof(rings::Patch)); - patch.structure = 0.5f; - patch.brightness = 0.5f; - patch.damping = 0.5f; - patch.position = 0.5f; - memset(&performance_state, 0, sizeof(rings::PerformanceState)); - strummer.Init(0.01f, SAMPLE_RATE / FRAME_BUFFER_SIZE); - if (void *mem = machine::malloc(sizeof(rings::Part))) - { - part = new (mem) rings::Part(); - part->Init(); - part->set_model(rings::ResonatorModel::RESONATOR_MODEL_MODAL); - part->set_polyphony(rings::kMaxPolyphony); - } - memset(in, 0, sizeof(in)); - - param[0].init_v_oct("Freq", &_pitch); - param[1].init_presets("Model", &_model, rings::ResonatorModel::RESONATOR_MODEL_MODAL, - rings::ResonatorModel::RESONATOR_MODEL_MODAL, - rings::ResonatorModel::RESONATOR_MODEL_SYMPATHETIC_STRING_QUANTIZED); - param[2].init("Struc.", &patch.structure); - param[3].init("Brighn.", &patch.brightness); - param[4].init("Damping", &patch.damping); - param[5].init("Pos", &patch.position); - } - - ~ResonatorEngine() override - { - machine::mfree(part); - } - - void process(const ControlFrame &frame, OutputFrame &of) override - { - if (part == nullptr) - return; - - part->set_model((rings::ResonatorModel)_model); - - performance_state.strum = frame.trigger; - performance_state.internal_strum = false; - performance_state.internal_note = true; - performance_state.internal_exciter = true; - performance_state.tonic = 0.2f; - performance_state.chord = 0; - performance_state.note = machine::DEFAULT_NOTE; - - float *input = machine::get_aux(AUX_L); - - performance_state.note += frame.qz_voltage(this->io, _pitch) * 12; - - strummer.Process(input, FRAME_BUFFER_SIZE, &performance_state); - part->Process(performance_state, patch, input, bufferOut, bufferAux, FRAME_BUFFER_SIZE); - - of.out = bufferOut; - of.aux = bufferAux; - } - - void display() override - { - if (_model == rings::ResonatorModel::RESONATOR_MODEL_MODAL) - param[1].name = "@Modal"; - else if (_model == rings::ResonatorModel::RESONATOR_MODEL_SYMPATHETIC_STRING) - param[1].name = "@Sympath."; - else if (_model == rings::ResonatorModel::RESONATOR_MODEL_STRING) - param[1].name = "@String"; - else if (_model == rings::ResonatorModel::RESONATOR_MODEL_FM_VOICE) - param[1].name = "@FM"; - else - param[1].name = "@StrQuant."; - - gfx::drawEngine(this, part ? nullptr : machine::OUT_OF_MEMORY); - } -}; - -void init_rings() -{ - machine::add(M_OSC, "Resonator"); -} - -MACHINE_INIT(init_rings); \ No newline at end of file diff --git a/src/speech.cxx b/src/speech.cxx deleted file mode 100644 index d48005b..0000000 --- a/src/speech.cxx +++ /dev/null @@ -1,111 +0,0 @@ -#include "stmlib/stmlib.h" -#include "stmlib/dsp/units.h" -#include "machine.h" - -#define private public -#include "plaits/dsp/speech/lpc_speech_synth_controller.h" -#include "plaits/dsp/speech/lpc_speech_synth_words.h" - -using namespace machine; - -const float a0 = (440.0f / 8.0f) / 48000.0f; - -inline float NoteToFrequency(float midi_note) -{ - midi_note -= 9.0f; - CONSTRAIN(midi_note, -128.0f, 127.0f); - return a0 * 0.25f * stmlib::SemitonesToRatio(midi_note); -} - -struct SpeechEngine : public Engine -{ - float _pitch = 0.f; - uint8_t _word = 0; - float _speed = 0.3f; - float _formant_shift = 0.5f; - float _prosody = 0.5f; - float _out_aux_mix = 0.0f; - - struct - { - uint8_t bank; - float addr; - } _words[92]; - - plaits::LPCSpeechSynthController lpc_speech_synth_controller_; - plaits::LPCSpeechSynthWordBank lpc_speech_synth_word_bank_; - - float _out[machine::FRAME_BUFFER_SIZE]; - float _aux[machine::FRAME_BUFFER_SIZE]; - - uint8_t buffer[16384]; - stmlib::BufferAllocator allocator; - - SpeechEngine() : Engine(TRIGGER_INPUT | VOCT_INPUT) - { - - memset(buffer, 0, sizeof(buffer)); - allocator.Init(buffer, 16384); - lpc_speech_synth_word_bank_.Init(plaits::word_banks_, - LPC_SPEECH_SYNTH_NUM_WORD_BANKS, - &allocator); - int j = 0; - for (uint8_t i = 0; i < LPC_SPEECH_SYNTH_NUM_WORD_BANKS; i++) - { - lpc_speech_synth_word_bank_.Load(i); - - for (int l = 0; l < lpc_speech_synth_word_bank_.num_words_; l++) - _words[j++] = {i, 1.f / lpc_speech_synth_word_bank_.num_words_ * l}; - } - - lpc_speech_synth_controller_.Init(&lpc_speech_synth_word_bank_); - - param[0].init_v_oct("Pitch", &_pitch); - param[1].init_presets("WORD", &_word, 0, 0, LEN_OF(_words) - 1); - param[2].init("Speed", &_speed, _speed); - param[3].init("Form.Shift", &_formant_shift, _formant_shift); - param[4].init("Prosody", &_prosody, _prosody); - param[5].init("AuxMix", &_out_aux_mix, _out_aux_mix); - } - - void process(const ControlFrame &frame, OutputFrame &of) override - { - auto note = (float)machine::DEFAULT_NOTE; - - note += frame.qz_voltage(this->io, _pitch) * 12; - - const float f0 = NoteToFrequency(note); - - lpc_speech_synth_controller_.Render(false, - frame.trigger, - _words[_word].bank, // Bank - f0, - _prosody, - _speed, // Speed - _words[_word].addr, // Word - _formant_shift, - 1.0f, - _aux, - _out, - machine::FRAME_BUFFER_SIZE); - - for (int i = 0; i < machine::FRAME_BUFFER_SIZE; i++) - _out[i] = stmlib::Crossfade(_out[i], _aux[i], _out_aux_mix); - - of.out = _out; - } - - char tmp[10]; - void display() override - { - sprintf(tmp, "WORD%0d", _word); - param[1].name = tmp; - - gfx::drawEngine(this); - } -}; - -void init_speech() -{ - machine::add("SPEECH", "LPC"); -} \ No newline at end of file diff --git a/src/tr707.cxx b/src/tr707.cxx deleted file mode 100644 index 7336b75..0000000 --- a/src/tr707.cxx +++ /dev/null @@ -1,74 +0,0 @@ - -#include "machine.h" -#include "base/SampleEngine.hxx" -#include "base/HiHatsEngine.hxx" -#include - -// #include "eproms/tr707/IC34_TR707_SNDROM.h" -// #include "eproms/tr707/IC35_TR707_SNDROM.h" - -struct TR707 : public SampleEngine -{ - const uint8_t *IC34_TR707_SNDROM_bin = machine::flash_read("707_IC34"); - const uint8_t *IC35_TR707_SNDROM_bin = machine::flash_read("707_IC35"); - - const uint8_t *BD0 = &IC34_TR707_SNDROM_bin[0x0000]; - const uint8_t *BD1 = &IC34_TR707_SNDROM_bin[0x0001]; - const uint8_t *SD0 = &IC34_TR707_SNDROM_bin[0x2000]; - const uint8_t *SD1 = &IC34_TR707_SNDROM_bin[0x2001]; - const uint8_t *RM = &IC35_TR707_SNDROM_bin[0x4000]; - const uint8_t *CB = &IC35_TR707_SNDROM_bin[0x4001]; - const uint8_t *CP = &IC35_TR707_SNDROM_bin[0x6000]; - const uint8_t *TMB = &IC35_TR707_SNDROM_bin[0x6001]; - - const uint8_t *LT = &IC34_TR707_SNDROM_bin[0x4000]; - const uint8_t *MT = &IC34_TR707_SNDROM_bin[0x6000]; - const uint8_t *HT = &IC35_TR707_SNDROM_bin[0x0000]; - - const uint8_t *HH = &IC35_TR707_SNDROM_bin[0x2000]; - - const tsample_spec _sounds[12] = { - //{"> BD", BD0, 0x2000, 50000, 0}, - {"BD0", BD0, 0x1000, 25000, 1}, - {"BD1", BD1, 0x1000, 25000, 1}, - //{"> SD", SD0, 0x2000, 50000, 0}, - {"SD0", SD0, 0x1000, 25000, 1}, - {"SD1", SD1, 0x1000, 25000, 1}, - {"CP", CP, 0x1000, 25000, 1}, - {"TMB", TMB, 0x1000, 25000, 1}, - {"RM", RM, 0x1000, 25000, 1}, - {"CB", CB, 0x1000, 25000, 1}, - {"LT", LT, 0x2000, 12500, 0}, - {"MT", MT, 0x2000, 12500, 0}, - {"HT", HT, 0x2000, 12500, 0}, - {"HH", HH, 0x2000, 25000, 0}, - }; - - TR707(int sample_num = 0) : SampleEngine() - { - setup(_sounds, sample_num, LEN_OF(_sounds)); - } - - bool init() override - { - return IC34_TR707_SNDROM_bin && IC35_TR707_SNDROM_bin; - } -}; - -struct TR707_CH_OH : public HiHatsEngine -{ - TR707 oh; - TR707 ch; - - TR707_CH_OH() : oh(11), ch(11) - { - _oh = &oh; - _ch = &ch; - } -}; - -void init_tr707() -{ - machine::add(machine::DRUM, "TR707"); - machine::add(machine::DRUM, "TR707-HiHat"); -} \ No newline at end of file diff --git a/src/tr909.cxx b/src/tr909.cxx deleted file mode 100644 index b6ffa56..0000000 --- a/src/tr909.cxx +++ /dev/null @@ -1,87 +0,0 @@ -#include "machine.h" -#include "base/SampleEngine.hxx" -#include "base/HiHatsEngine.hxx" - -// #include "eproms/tr909/hihats.h" -// #include "eproms/tr909/ride.h" - -// TODO: Filter LP-HP - -struct TR909_OH : public SampleEngine -{ - const uint8_t *HiHats_bin = machine::flash_read("909_HIGH"); - const tsample_spec _sound = {"", HiHats_bin, 24576, 32000, 0}; - - TR909_OH() : SampleEngine() - { - setup(&_sound, 0, 1); - } - - bool init() override - { - return HiHats_bin; - } -}; - -constexpr static int ch_start = 24576; -struct TR909_CH : public SampleEngine -{ - const uint8_t *HiHats_bin = machine::flash_read("909_HIGH"); - const tsample_spec _sound = {"", HiHats_bin + ch_start, 32768 - ch_start, 32000, 0}; - - TR909_CH() : SampleEngine() - { - setup(&_sound, 0, 1); - } - - bool init() override - { - return HiHats_bin; - } -}; - -struct TR909_Ride : public SampleEngine -{ - const uint8_t *Ride_bin = machine::flash_read("909_RIDE"); - const tsample_spec _sound = {"", Ride_bin, 32768, 32000, 0}; - - TR909_Ride() : SampleEngine() - { - setup(&_sound, 0, 1); - } - - bool init() override - { - return Ride_bin; - } -}; - -struct TR909_CH_OH : public HiHatsEngine -{ - TR909_OH oh; - TR909_CH ch; - - TR909_CH_OH() - { - _oh = &oh; - _ch = &ch; - } -}; - -struct TR909_CR_OR : public HiHatsEngine -{ - TR909_Ride oh; - TR909_Ride ch; - - TR909_CR_OR() - { - _oh = &oh; - _ch = &ch; - } -}; - -void init_tr909() -{ - machine::add(machine::DRUM, "TR909-HiHat"); - machine::add(machine::DRUM, "TR909-Ride"); -} \ No newline at end of file diff --git a/src/voltage.cxx b/src/voltage.cxx deleted file mode 100644 index ec92b90..0000000 --- a/src/voltage.cxx +++ /dev/null @@ -1,253 +0,0 @@ - -// Copyright (C)2021 - Eduard Heidt -// -// Author: Eduard Heidt (eh2k@gmx.de) -// -// 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. -// -// See http://creativecommons.org/licenses/MIT/ for more information. -// - -#include "machine.h" -#include "stmlib/dsp/dsp.h" - -namespace gfx -{ - void drawEngineWithScope(machine::Engine *engine, int8_t scope[128], int i, int y) - { - for (int x = 0; x < 127; x++) - { - if (x % 3 == 0) - gfx::setPixel(x, y); - gfx::drawLine(x, y - scope[(i + x) % 128], x + 1, y - scope[(1 + i + x) % 128]); - } - - gfx::drawEngineCompact(engine); - } - - void push_scope(int8_t scope[128], uint8_t &i, int8_t y) - { - scope[i++ % 128] = y; - if (i > 128) - i = 0; - } -} - -using namespace machine; - -class VoltsPerOctave : public Engine -{ - char tmp[64]; - uint16_t note = DEFAULT_NOTE * machine::PITCH_PER_OCTAVE / 12; - uint8_t tune = 128; - int32_t cv0 = 0; - int32_t cv = 0; - float glide = 0; - -public: - VoltsPerOctave() : Engine(OUT_EQ_VOLT | VOCT_INPUT) - { - param[0].init_v_oct("Tone", ¬e); - param[1].init("Fine", &tune, tune, 0, 254); - param[2].init("Slew", &glide, 0, 0, 0.5f); - } - - void process(const ControlFrame &frame, OutputFrame &of) override - { - cv0 = frame.qz_voltage(this->io, (machine::PITCH_PER_OCTAVE * 2) + ((int)note - (DEFAULT_NOTE * machine::PITCH_PER_OCTAVE / 12))) + - (((int)tune - 128) << 2); - - ONE_POLE(cv, cv0, powf(1 - glide, 10)); - - of.push_voltage(&cv, 1); - - if ((frame.t % 50) == 0) - gfx::push_scope(scope, i, (float)cv / machine::PITCH_PER_OCTAVE * 4); - } - - int8_t scope[128] = {}; - uint8_t i = 0; - void display() override - { - sprintf(tmp, "OUT:%.2fV", ((float)cv / machine::PITCH_PER_OCTAVE)); - gfx::drawString(4 + 64, 32, tmp, 0); - gfx::drawEngineWithScope(this, scope, i, 50); - } -}; - -class LFOEngine : public Engine -{ - Parameter output; - ModulationSource *_mod = nullptr; - float cv = 0; - -public: - LFOEngine() : Engine(OUT_EQ_VOLT | TRIGGER_INPUT) - { - _mod = machine::create_modulation("LFO"); - if (_mod) - { - *_mod->param[0].value.u8p = 1; // set trigger source - param[0] = _mod->param[2]; // Freq - param[1] = _mod->param[1]; // Shape - // param[2] = _mod->param[3]; // Attenuverter - *_mod->param[3].value.fp = 0.5f; // param[2].name = "+-"; - - output.init(".", &cv, 0, -1.f, 1.f); - } - } - - ~LFOEngine() override - { - machine::mfree(_mod); - } - - int8_t scope[128] = {}; - uint8_t i = 0; - void process(const ControlFrame &frame, OutputFrame &of) override - { - cv = 0.f; - _mod->process(output, (ControlFrame &)frame); - - int32_t v = 5.f * cv * machine::PITCH_PER_OCTAVE; - of.push_voltage(&v, 1); - - if ((frame.t % 50) == 0) - gfx::push_scope(scope, i, cv * 10); - } - - void display() override - { - gfx::drawEngineWithScope(this, scope, i, 44); - } -}; - -class ADEnvelope : public Engine -{ - Parameter output; - ModulationSource *_mod = nullptr; - float cv = 0; - -public: - ADEnvelope() : Engine(OUT_EQ_VOLT | TRIGGER_INPUT) - { - _mod = machine::create_modulation("ENV"); - if (_mod) - { - *_mod->param[0].value.u8p = 0; // set trigger source - param[0] = _mod->param[1]; // Attack - param[0].name = "Attack"; - param[1] = _mod->param[2]; // Decay - param[1].name = "Decay"; - *_mod->param[3].value.fp = 0.5f; // Attenuverter param[2].name = "+-"; - output.init(".", &cv, 0, -1.f, 1.f); - } - } - - ~ADEnvelope() override - { - machine::mfree(_mod); - } - - int8_t scope[128] = {}; - float y = 0; - uint8_t i = 0; - void process(const ControlFrame &frame, OutputFrame &of) override - { - cv = 0.f; - _mod->process(output, (ControlFrame &)frame); - - int32_t v = 5.f * cv * machine::PITCH_PER_OCTAVE; - of.push_voltage(&v, 1); - - if ((frame.t % 50) == 0) - { - gfx::push_scope(scope, i, y * 20); - y = 0; - } - else - y = std::max(y, cv); - } - - void display() override - { - gfx::drawEngineWithScope(this, scope, i, 54); - } -}; - -class EFEngine : public Engine -{ - Parameter output; - ModulationSource *_mod = nullptr; - float cv = 0; - -public: - EFEngine() : Engine(OUT_EQ_VOLT | AUDIO_PROCESSOR_MONO) - { - _mod = machine::create_modulation("EF"); - if (_mod) - { - *_mod->param[0].value.u8p = 0; // set trigger source - param[0] = _mod->param[1]; // Attack - param[1] = _mod->param[2]; // Decay - *_mod->param[3].value.fp = 0.5f; // Attenuverter param[2].name = "+-"; - - output.init(".", &cv, 0, -1.f, 1.f); - } - } - - ~EFEngine() override - { - machine::mfree(_mod); - } - - int8_t scope[128] = {}; - uint8_t i = 0; - void process(const ControlFrame &frame, OutputFrame &of) override - { - cv = 0.f; - if (this->io->aux > 0) - { - *_mod->param[0].value.u8p = this->io->aux - 1; - _mod->process(output, (ControlFrame &)frame); - } - - int32_t v = 5.f * cv * machine::PITCH_PER_OCTAVE; - of.push_voltage(&v, 1); - - if ((frame.t % 50) == 0) - gfx::push_scope(scope, i, cv * 20); - } - - void display() override - { - gfx::drawEngineWithScope(this, scope, i, 54); - } -}; - -void init_cv_peaks(); - -void init_voltage() -{ - machine::add(CV, "V/OCT"); - machine::add(CV, "EnvGen_AD"); - init_cv_peaks(); - machine::add(CV, "LFO"); - machine::add(CV, "EnvFollower"); -} \ No newline at end of file