From ae252fbc6ef1f65152529d154caad01652025b86 Mon Sep 17 00:00:00 2001 From: ZodiusInfuser Date: Tue, 30 May 2023 10:24:28 +0100 Subject: [PATCH 01/10] Removed comma in *Unicorn readme code --- micropython/modules/cosmic_unicorn/README.md | 2 +- micropython/modules/galactic_unicorn/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/micropython/modules/cosmic_unicorn/README.md b/micropython/modules/cosmic_unicorn/README.md index 2514d8cc..1a703e9d 100644 --- a/micropython/modules/cosmic_unicorn/README.md +++ b/micropython/modules/cosmic_unicorn/README.md @@ -82,7 +82,7 @@ while True: # draw the text graphics.set_pen(YELLOW) - graphics.text(MESSAGE, round(0 - scroll), 2, -1, 0.55); + graphics.text(MESSAGE, round(0 - scroll), 2, -1, 0.55) # update the display cu.update(graphics) diff --git a/micropython/modules/galactic_unicorn/README.md b/micropython/modules/galactic_unicorn/README.md index 383d75e7..a7d94c16 100644 --- a/micropython/modules/galactic_unicorn/README.md +++ b/micropython/modules/galactic_unicorn/README.md @@ -82,7 +82,7 @@ while True: # draw the text graphics.set_pen(YELLOW) - graphics.text(MESSAGE, round(0 - scroll), 2, -1, 0.55); + graphics.text(MESSAGE, round(0 - scroll), 2, -1, 0.55) # update the display gu.update(graphics) From bd4238945d2f719687d2fb8ee2557be720b6ad8e Mon Sep 17 00:00:00 2001 From: ZodiusInfuser Date: Tue, 30 May 2023 10:25:33 +0100 Subject: [PATCH 02/10] Fixed case of some CosmicUnicorn variables --- .../modules/cosmic_unicorn/cosmic_unicorn.c | 12 +++--- .../modules/cosmic_unicorn/cosmic_unicorn.cpp | 38 +++++++++---------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/micropython/modules/cosmic_unicorn/cosmic_unicorn.c b/micropython/modules/cosmic_unicorn/cosmic_unicorn.c index 17873023..94e5401d 100644 --- a/micropython/modules/cosmic_unicorn/cosmic_unicorn.c +++ b/micropython/modules/cosmic_unicorn/cosmic_unicorn.c @@ -131,20 +131,20 @@ const mp_obj_type_t CosmicUnicorn_type = { #endif /***** Globals Table *****/ -STATIC const mp_map_elem_t Cosmic_globals_table[] = { +STATIC const mp_map_elem_t cosmic_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_cosmic) }, { MP_OBJ_NEW_QSTR(MP_QSTR_Channel), (mp_obj_t)&Channel_type }, { MP_OBJ_NEW_QSTR(MP_QSTR_CosmicUnicorn), (mp_obj_t)&CosmicUnicorn_type }, }; -STATIC MP_DEFINE_CONST_DICT(mp_module_Cosmic_globals, Cosmic_globals_table); +STATIC MP_DEFINE_CONST_DICT(mp_module_cosmic_globals, cosmic_globals_table); /***** Module Definition *****/ -const mp_obj_module_t Cosmic_user_cmodule = { +const mp_obj_module_t cosmic_user_cmodule = { .base = { &mp_type_module }, - .globals = (mp_obj_dict_t*)&mp_module_Cosmic_globals, + .globals = (mp_obj_dict_t*)&mp_module_cosmic_globals, }; #if MICROPY_VERSION <= 70144 -MP_REGISTER_MODULE(MP_QSTR_cosmic, Cosmic_user_cmodule, MODULE_Cosmic_ENABLED); +MP_REGISTER_MODULE(MP_QSTR_cosmic, cosmic_user_cmodule, MODULE_COSMIC_ENABLED); #else -MP_REGISTER_MODULE(MP_QSTR_cosmic, Cosmic_user_cmodule); +MP_REGISTER_MODULE(MP_QSTR_cosmic, cosmic_user_cmodule); #endif diff --git a/micropython/modules/cosmic_unicorn/cosmic_unicorn.cpp b/micropython/modules/cosmic_unicorn/cosmic_unicorn.cpp index 0f49abca..5fffb7be 100644 --- a/micropython/modules/cosmic_unicorn/cosmic_unicorn.cpp +++ b/micropython/modules/cosmic_unicorn/cosmic_unicorn.cpp @@ -341,7 +341,7 @@ mp_obj_t Channel_play_tone(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw /***** Variables Struct *****/ typedef struct _CosmicUnicorn_obj_t { mp_obj_base_t base; - CosmicUnicorn* Cosmic; + CosmicUnicorn* cosmic; } _CosmicUnicorn_obj_t; typedef struct _ModPicoGraphics_obj_t { @@ -388,12 +388,12 @@ mp_obj_t CosmicUnicorn_make_new(const mp_obj_type_t *type, size_t n_args, size_t } - CosmicUnicorn *Cosmic = m_new_class(CosmicUnicorn); - Cosmic->init(); + CosmicUnicorn *cosmic = m_new_class(CosmicUnicorn); + cosmic->init(); self = m_new_obj_with_finaliser(_CosmicUnicorn_obj_t); self->base.type = &CosmicUnicorn_type; - self->Cosmic = Cosmic; + self->cosmic = cosmic; return MP_OBJ_FROM_PTR(self); } @@ -402,7 +402,7 @@ mp_obj_t CosmicUnicorn_make_new(const mp_obj_type_t *type, size_t n_args, size_t /***** Destructor ******/ mp_obj_t CosmicUnicorn___del__(mp_obj_t self_in) { _CosmicUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _CosmicUnicorn_obj_t); - m_del_class(CosmicUnicorn, self->Cosmic); + m_del_class(CosmicUnicorn, self->cosmic); return mp_const_none; } @@ -410,7 +410,7 @@ mp_obj_t CosmicUnicorn___del__(mp_obj_t self_in) { /***** Methods *****/ extern mp_obj_t CosmicUnicorn_clear(mp_obj_t self_in) { _CosmicUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _CosmicUnicorn_obj_t); - self->Cosmic->clear(); + self->cosmic->clear(); return mp_const_none; } @@ -418,54 +418,54 @@ extern mp_obj_t CosmicUnicorn_update(mp_obj_t self_in, mp_obj_t graphics_in) { _CosmicUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _CosmicUnicorn_obj_t); ModPicoGraphics_obj_t *picographics = MP_OBJ_TO_PTR2(graphics_in, ModPicoGraphics_obj_t); - self->Cosmic->update(picographics->graphics); + self->cosmic->update(picographics->graphics); return mp_const_none; } extern mp_obj_t CosmicUnicorn_set_brightness(mp_obj_t self_in, mp_obj_t value) { _CosmicUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _CosmicUnicorn_obj_t); - self->Cosmic->set_brightness(mp_obj_get_float(value)); + self->cosmic->set_brightness(mp_obj_get_float(value)); return mp_const_none; } extern mp_obj_t CosmicUnicorn_get_brightness(mp_obj_t self_in) { _CosmicUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _CosmicUnicorn_obj_t); - return mp_obj_new_float(self->Cosmic->get_brightness()); + return mp_obj_new_float(self->cosmic->get_brightness()); } extern mp_obj_t CosmicUnicorn_adjust_brightness(mp_obj_t self_in, mp_obj_t delta) { _CosmicUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _CosmicUnicorn_obj_t); - self->Cosmic->adjust_brightness(mp_obj_get_float(delta)); + self->cosmic->adjust_brightness(mp_obj_get_float(delta)); return mp_const_none; } extern mp_obj_t CosmicUnicorn_set_volume(mp_obj_t self_in, mp_obj_t value) { _CosmicUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _CosmicUnicorn_obj_t); - self->Cosmic->set_volume(mp_obj_get_float(value)); + self->cosmic->set_volume(mp_obj_get_float(value)); return mp_const_none; } extern mp_obj_t CosmicUnicorn_get_volume(mp_obj_t self_in) { _CosmicUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _CosmicUnicorn_obj_t); - return mp_obj_new_float(self->Cosmic->get_volume()); + return mp_obj_new_float(self->cosmic->get_volume()); } extern mp_obj_t CosmicUnicorn_adjust_volume(mp_obj_t self_in, mp_obj_t delta) { _CosmicUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _CosmicUnicorn_obj_t); - self->Cosmic->adjust_volume(mp_obj_get_float(delta)); + self->cosmic->adjust_volume(mp_obj_get_float(delta)); return mp_const_none; } extern mp_obj_t CosmicUnicorn_light(mp_obj_t self_in) { _CosmicUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _CosmicUnicorn_obj_t); - return mp_obj_new_float(self->Cosmic->light()); + return mp_obj_new_float(self->cosmic->light()); } extern mp_obj_t CosmicUnicorn_is_pressed(mp_obj_t self_in, mp_obj_t button) { _CosmicUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _CosmicUnicorn_obj_t); - return mp_obj_new_bool(self->Cosmic->is_pressed((uint8_t)mp_obj_get_int(button))); + return mp_obj_new_bool(self->cosmic->is_pressed((uint8_t)mp_obj_get_int(button))); } extern mp_obj_t CosmicUnicorn_play_sample(mp_obj_t self_in, mp_obj_t data) { @@ -477,21 +477,21 @@ extern mp_obj_t CosmicUnicorn_play_sample(mp_obj_t self_in, mp_obj_t data) { mp_raise_ValueError("Supplied buffer is too small!"); } - self->Cosmic->play_sample((uint8_t *)bufinfo.buf, bufinfo.len); + self->cosmic->play_sample((uint8_t *)bufinfo.buf, bufinfo.len); return mp_const_none; } extern mp_obj_t CosmicUnicorn_play_synth(mp_obj_t self_in) { _CosmicUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _CosmicUnicorn_obj_t); - self->Cosmic->play_synth(); + self->cosmic->play_synth(); return mp_const_none; } extern mp_obj_t CosmicUnicorn_stop_playing(mp_obj_t self_in) { _CosmicUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _CosmicUnicorn_obj_t); - self->Cosmic->stop_playing(); + self->cosmic->stop_playing(); return mp_const_none; } @@ -509,7 +509,7 @@ extern mp_obj_t CosmicUnicorn_synth_channel(mp_obj_t self_in, mp_obj_t channel_i // Could very easily mess up in weird ways once object deletion is considered? _Channel_obj_t *channel_obj = m_new_obj_with_finaliser(_Channel_obj_t); channel_obj->base.type = &Channel_type; - channel_obj->channel = &self->Cosmic->synth_channel(channel); + channel_obj->channel = &self->cosmic->synth_channel(channel); return MP_OBJ_FROM_PTR(channel_obj); } From aabe789f21fbfa277a9ea74a511e9804cacfbd4d Mon Sep 17 00:00:00 2001 From: ZodiusInfuser Date: Tue, 30 May 2023 10:32:25 +0100 Subject: [PATCH 03/10] Initial setup for StellarUnicorn build --- .github/workflows/micropython.yml | 2 + examples/CMakeLists.txt | 1 + libraries/CMakeLists.txt | 1 + libraries/stellar_unicorn/CMakeLists.txt | 1 + libraries/stellar_unicorn/README.md | 259 ++++++++ libraries/stellar_unicorn/audio_i2s.pio | 63 ++ .../stellar_unicorn/stellar_unicorn.cmake | 15 + libraries/stellar_unicorn/stellar_unicorn.cpp | 595 ++++++++++++++++++ libraries/stellar_unicorn/stellar_unicorn.hpp | 125 ++++ libraries/stellar_unicorn/stellar_unicorn.pio | 79 +++ .../modules/micropython-stellar_unicorn.cmake | 40 ++ micropython/modules/picographics/README.md | 1 + .../modules/picographics/picographics.c | 1 + .../modules/picographics/picographics.cpp | 9 + .../modules/picographics/picographics.h | 1 + micropython/modules/stellar_unicorn/README.md | 315 ++++++++++ .../modules/stellar_unicorn/micropython.cmake | 24 + .../modules/stellar_unicorn/stellar_unicorn.c | 150 +++++ .../stellar_unicorn/stellar_unicorn.cpp | 516 +++++++++++++++ .../modules/stellar_unicorn/stellar_unicorn.h | 50 ++ micropython/modules/ulab | 2 +- setting-up-micropython.md | 1 + 22 files changed, 2250 insertions(+), 1 deletion(-) create mode 100644 libraries/stellar_unicorn/CMakeLists.txt create mode 100644 libraries/stellar_unicorn/README.md create mode 100644 libraries/stellar_unicorn/audio_i2s.pio create mode 100644 libraries/stellar_unicorn/stellar_unicorn.cmake create mode 100644 libraries/stellar_unicorn/stellar_unicorn.cpp create mode 100644 libraries/stellar_unicorn/stellar_unicorn.hpp create mode 100644 libraries/stellar_unicorn/stellar_unicorn.pio create mode 100644 micropython/modules/micropython-stellar_unicorn.cmake create mode 100644 micropython/modules/stellar_unicorn/README.md create mode 100644 micropython/modules/stellar_unicorn/micropython.cmake create mode 100644 micropython/modules/stellar_unicorn/stellar_unicorn.c create mode 100644 micropython/modules/stellar_unicorn/stellar_unicorn.cpp create mode 100644 micropython/modules/stellar_unicorn/stellar_unicorn.h diff --git a/.github/workflows/micropython.yml b/.github/workflows/micropython.yml index c18de168..9a486089 100644 --- a/.github/workflows/micropython.yml +++ b/.github/workflows/micropython.yml @@ -86,6 +86,8 @@ jobs: board: PICO_W - name: cosmic_unicorn board: PICO_W + - name: stellar_unicorn + board: PICO_W - name: inky_frame board: PICO_W_INKY patch: true diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 557ae24b..d32cc949 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -61,3 +61,4 @@ add_subdirectory(encoder) add_subdirectory(galactic_unicorn) add_subdirectory(gfx_pack) add_subdirectory(cosmic_unicorn) +add_subdirectory(stellar_unicorn) diff --git a/libraries/CMakeLists.txt b/libraries/CMakeLists.txt index e5bca9d3..7d7550db 100644 --- a/libraries/CMakeLists.txt +++ b/libraries/CMakeLists.txt @@ -42,3 +42,4 @@ add_subdirectory(galactic_unicorn) add_subdirectory(gfx_pack) add_subdirectory(interstate75) add_subdirectory(cosmic_unicorn) +add_subdirectory(stellar_unicorn) diff --git a/libraries/stellar_unicorn/CMakeLists.txt b/libraries/stellar_unicorn/CMakeLists.txt new file mode 100644 index 00000000..7438151a --- /dev/null +++ b/libraries/stellar_unicorn/CMakeLists.txt @@ -0,0 +1 @@ +include(stellar_unicorn.cmake) \ No newline at end of file diff --git a/libraries/stellar_unicorn/README.md b/libraries/stellar_unicorn/README.md new file mode 100644 index 00000000..926603f7 --- /dev/null +++ b/libraries/stellar_unicorn/README.md @@ -0,0 +1,259 @@ +# Stellar Unicorn (C/C++) + +Stellar Unicorn offers 16x16 bright RGB LEDs driven by Pico W's PIO in addition to a 1W amplifier + speaker, a collection of system and user buttons, and two Qw/ST connectors for adding external sensors and devices. Woha! + +You can buy one here: https://shop.pimoroni.com/products/stellar-unicorn + +## These are not your everyday RGB LEDs! + +Internally Stellar Unicorn applies gamma correction to the supplied image data and updates the display with 14-bit precision resulting in extremely linear visual output - including at the low end. + +The display is refreshed around 300 times per second (300fps!) allowing for rock solid stability even when being filmed, no smearing or flickering even when in motion. + +No strobing or brightness stepping here folks - it's the perfect backdrop for your tricked out streaming setup! + +## Getting started + +The Stellar Unicorn library provides a collection of methods that allow you to easily access all of the features on the board. + +Drawing is primarily handled via our [PicoGraphics](https://github.com/pimoroni/pimoroni-pico/tree/main/libraries/pico_graphics) library which provides a comprehensive selection of drawing methods - once your drawing work is complete you pass the PicoGraphics object to Stellar Unicorn to have it displayed on the screen. + +- [Example Program](#example-program) +- [Interleaved Framebuffer](#interleaved-framebuffer) +- [Function Reference](#function-reference) + - [System State](#system-state) + - [`void init()`](#void-init) + - [`void set_brightness(float value)`](#void-set_brightnessfloat-value) + - [`float get_brightness()`](#float-get_brightness) + - [`void adjust_brightness(float delta)`](#void-adjust_brightnessfloat-delta) + - [`void set_volume(float value)`](#void-set_volumefloat-value) + - [`float get_volume()`](#float-get_volume) + - [`void adjust_volume(float delta)`](#void-adjust_volumefloat-delta) + - [`uint16_t light()`](#uint16_t-light) + - [`bool is_pressed(uint8_t button)`](#bool-is_presseduint8_t-button) + - [Drawing](#drawing) + - [`void update(PicoGraphics *graphics)`](#void-updatepicographics-graphics) + - [`void clear()`](#void-clear) + - [`void set_pixel(int x, int y, uint8_t r, uint8_t g, uint8_t b)`](#void-set_pixelint-x-int-y-uint8_t-r-uint8_t-g-uint8_t-b) + - [Audio](#audio) + - [`void play_sample(uint8_t *data, uint32_t length)`](#void-play_sampleuint8_t-data-uint32_t-length) + - [`AudioChannel& synth_channel(uint channel)`](#audiochannel-synth_channeluint-channel) + - [`void play_synth()`](#void-play_synth) + - [`void stop_playing()`](#void-stop_playing) + - [Constants](#constants) + - [`WIDTH` \& `HEIGHT`](#width--height) + +# Example Program + +The following example shows how to scroll a simple message across the display. + +```c++ +#include +#include + +#include "libraries/pico_graphics/pico_graphics.hpp" +#include "stellar_unicorn.hpp" + +using namespace pimoroni; + +// create a PicoGraphics framebuffer to draw into +PicoGraphics_PenRGB888 graphics(StellarUnicorn::WIDTH, StellarUnicorn::HEIGHT, nullptr); + +// create our StellarUnicorn object +StellarUnicorn stellar_unicorn; + +// message to scroll +std::string message = "Pirate. Monkey. Robot. Ninja."; + +int main() { + + stdio_init_all(); + + // initialise the StellarUnicorn object + stellar_unicorn.init(); + + // start position for scrolling (off the side of the display) + float scroll = -(float)StellarUnicorn::WIDTH; + + while(true) { + // determine the scroll position of the text + int width = graphics.measure_text(message, 1); + scroll += 0.25f; + if(scroll > width) { + scroll = -(float)StellarUnicorn::WIDTH; + } + + // clear the graphics object + graphics.set_pen(0, 0, 0); + graphics.clear(); + + // draw the text + graphics.set_pen(255, 255, 0); // a nice yellow + graphics.text(message, Point(0 - scroll, 5), -1, 0.55); + + // update the display + stellar_unicorn.update(&graphics); + + sleep_ms(10); + } + + return 0; +} +``` + +# Interleaved Framebuffer + +Stellar Unicorn takes advantage of the RP2040's PIOs to drive screen updates - this is what gives it the performance it needs to render with 14-bit precision at over 300 frames per second. + +The PIO is a powerful, but limited, tool. It has no way to access memory at random and minimal support for decision making and branching. All it can really do is process a stream of data/instructions in order. + +This means that we need to be clever about the way we pass data into the PIO program, the information needs to be delivered in the exact order that the PIO will need to process it. To achieve this we "interleave" our framebuffer - each frame of BCM data is passed one after another with values for the current row, pixel count, and timing inserted as needed: + + row 0 data: + for each bcd frame: + bit : data + 0: 00110110 // row pixel count (minus one) + 1 - 53: xxxxxbgr, xxxxxbgr, xxxxxbgr, ... // pixel data + 54 - 55: xxxxxxxx, xxxxxxxx // dummy bytes to dword align + 56: xxxxrrrr // row select bits + 57 - 59: tttttttt, tttttttt, tttttttt // bcd tick count (0-65536) + + row 1 data: + ... + +If you're working with our library then you don't need to worry about any of these details, they are handled for you. + +# Function Reference + +## System State + +### `void init()` + +Initialise the Stellar Unicorn hardware, interleaved framebuffer, and PIO programs. This function must be called before attempting to do anything else with Stellar Unicorn. + +### `void set_brightness(float value)` + +Set the brightness - `value` is supplied as a floating point value between `0.0` and `1.0`. + +### `float get_brightness()` + +Returns the current brightness as a value between `0.0` to `1.0`. + +### `void adjust_brightness(float delta)` + +Adjust the brightness of the display - `delta` is supplied as a floating point value and will be added to the current brightness (and then clamped to the range `0.0` to `1.0`). + +For example: + +```c++ +stellar.set_brightness(0.5f); +stellar.adjust_brightness(0.1f); // brightness is now 0.6 +stellar.adjust_brightness(0.7f); // brightness is now 1.0 +stellar.adjust_brightness(-0.2f); // brightness is now 0.8 +``` + +### `void set_volume(float value)` + +Set the volume - `value` is supplied as a floating point value between `0.0` and `1.0`. + +### `float get_volume()` + +Returns the current volume as a value between `0.0` and `1.0`. + +### `void adjust_volume(float delta)` + +Adjust the volume - `delta` is supplied as a floating point value and will be added to the current volume (and then clamped to the range `0.0` to `1.0`). + +For example: + +```c++ +stellar.set_volume(0.5f); +stellar.adjust_volume(0.1f); // volume is now 0.6 +stellar.adjust_volume(0.7f); // volume is now 1.0 +stellar.adjust_volume(-0.2f); // volume is now 0.8 +``` + +### `uint16_t light()` + +Get the current value seen by the onboard light sensor as a value between `0` and `4095`. + +### `bool is_pressed(uint8_t button)` + +Returns true if the requested `button` is currently pressed. + +There are a set of constants on the StellarUnicorn class that represent each of the buttons. The brightness, sleep, and volume buttons are not tied to hardware functions (they are implemented entirely in software) so can also be used for user functions if preferred. + +```c++ +static const uint8_t SWITCH_A = 0; +static const uint8_t SWITCH_B = 1; +static const uint8_t SWITCH_C = 3; +static const uint8_t SWITCH_D = 6; +static const uint8_t SWITCH_SLEEP = 27; +static const uint8_t SWITCH_VOLUME_UP = 7; +static const uint8_t SWITCH_VOLUME_DOWN = 8; +static const uint8_t SWITCH_BRIGHTNESS_UP = 21; +static const uint8_t SWITCH_BRIGHTNESS_DOWN = 26; +``` + +For example: + +```c++ +while(!stellar.is_pressed(StellarUnicorn::SWITCH_A)) { + // wait for switch A to be pressed +} +printf("We did it! We pressed switch A! Heck yeah!"); +``` + +## Drawing + +### `void update(PicoGraphics *graphics)` + +**This is our recommended way to update the image on Stellar Unicorn.** The PicoGraphics library provides a collection of powerful drawing methods to make things simple. + +The image on the PicoGraphics object provided is copied to the interleaved framebuffer with gamma correction applied. This lets you have multiple PicoGraphics objects on the go at once and switch between them by changing which gets passed into this function. + +If however you'd rather twiddle individual pixels (for example you're producing some sort of algorithmic output) then you can simply use the `clear()` and `set_pixel()` methods mentioned below. + +### `void clear()` + +Clear the contents of the interleaved framebuffer. This will make your Stellar Unicorn display turn off when the next frame is displayed. + +If you're using PicoGraphics to build your image (recommended!) then you won't need to call this method as you'll overwrite the entire display when you call `update()` anyway. + +### `void set_pixel(int x, int y, uint8_t r, uint8_t g, uint8_t b)` + +Set a single pixel to the specified colour. The newly set colour will be shown at the next frame. Pixel coordinates go from `0` to `52` along the `x` axis and from `0` to `10` on the `y` axis. Colour values are specified as a `0` to `255` RGB triplet - the supplied colour will be gamma corrected automatically. + + When drawing a full image it's recommended that you keep the time between each `set_pixel` call short to ensure your image gets displayed on the next frame. Otherwise you can get scanning-like visual artefacts (unless that is your intention of course!) + +## Audio + +Audio functionality is supported by our [PicoSynth library](https://github.com/pimoroni/pimoroni-pico/tree/main/libraries/pico_synth) which allows you to create multiple voice channels with ADSR (attack decay sustain release) envelopes. It provides a similar set of functionality to the classic SID chip in the Commodore 64. + +### `void play_sample(uint8_t *data, uint32_t length)` + +Play the provided 16-bit audio sample. `data` must point to a buffer that contains 16-bit PCM data and `length` must be the number of samples. + +### `AudioChannel& synth_channel(uint channel)` + +Gets an `AudioChannel` object which can then be configured with voice, ADSR envelope, etc. + +### `void play_synth()` + +Start the synth playing. + +### `void stop_playing()` + +Stops any currently playing audio. + +## Constants + +### `WIDTH` & `HEIGHT` + +The width and height of Stellar Unicorn are available in constants `WIDTH` and `HEIGHT`. + +For example: + +```c++ +int num_pixels = StellarUnicorn::WIDTH * StellarUnicorn::HEIGHT; +``` \ No newline at end of file diff --git a/libraries/stellar_unicorn/audio_i2s.pio b/libraries/stellar_unicorn/audio_i2s.pio new file mode 100644 index 00000000..d0f99d49 --- /dev/null +++ b/libraries/stellar_unicorn/audio_i2s.pio @@ -0,0 +1,63 @@ +; +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd. +; +; SPDX-License-Identifier: BSD-3-Clause +; + +; Transmit a mono or stereo I2S audio stream as stereo +; This is 16 bits per sample; can be altered by modifying the "set" params, +; or made programmable by replacing "set x" with "mov x, y" and using Y as a config register. +; +; Autopull must be enabled, with threshold set to 32. +; Since I2S is MSB-first, shift direction should be to left. +; Hence the format of the FIFO word is: +; +; | 31 : 16 | 15 : 0 | +; | sample ws=0 | sample ws=1 | +; +; Data is output at 1 bit per clock. Use clock divider to adjust frequency. +; Fractional divider will probably be needed to get correct bit clock period, +; but for common syslck freqs this should still give a constant word select period. +; +; One output pin is used for the data output. +; Two side-set pins are used. Bit 0 is clock, bit 1 is word select. + +; Send 16 bit words to the PIO for mono, 32 bit words for stereo + +.program audio_i2s +.side_set 2 + + ; /--- LRCLK + ; |/-- BCLK +bitloop1: ; || + out pins, 1 side 0b10 + jmp x-- bitloop1 side 0b11 + out pins, 1 side 0b00 + set x, 14 side 0b01 + +bitloop0: + out pins, 1 side 0b00 + jmp x-- bitloop0 side 0b01 + out pins, 1 side 0b10 +public entry_point: + set x, 14 side 0b11 + +% c-sdk { + +static inline void audio_i2s_program_init(PIO pio, uint sm, uint offset, uint data_pin, uint clock_pin_base) { + pio_sm_config sm_config = audio_i2s_program_get_default_config(offset); + + sm_config_set_out_pins(&sm_config, data_pin, 1); + sm_config_set_sideset_pins(&sm_config, clock_pin_base); + sm_config_set_out_shift(&sm_config, false, true, 32); + + pio_sm_init(pio, sm, offset, &sm_config); + + uint pin_mask = (1u << data_pin) | (3u << clock_pin_base); + pio_sm_set_pindirs_with_mask(pio, sm, pin_mask, pin_mask); + pio_sm_set_pins_with_mask(pio, sm, 0, pin_mask); // clear pins + + pio_sm_exec(pio, sm, pio_encode_jmp(offset + audio_i2s_offset_entry_point)); +} + +%} \ No newline at end of file diff --git a/libraries/stellar_unicorn/stellar_unicorn.cmake b/libraries/stellar_unicorn/stellar_unicorn.cmake new file mode 100644 index 00000000..1cce9ef5 --- /dev/null +++ b/libraries/stellar_unicorn/stellar_unicorn.cmake @@ -0,0 +1,15 @@ +add_library(stellar_unicorn INTERFACE) + +pico_generate_pio_header(stellar_unicorn ${CMAKE_CURRENT_LIST_DIR}/stellar_unicorn.pio) +pico_generate_pio_header(stellar_unicorn ${CMAKE_CURRENT_LIST_DIR}/audio_i2s.pio) + + +target_sources(stellar_unicorn INTERFACE + ${CMAKE_CURRENT_LIST_DIR}/stellar_unicorn.cpp + ${CMAKE_CURRENT_LIST_DIR}/../pico_synth/pico_synth.cpp +) + +target_include_directories(stellar_unicorn INTERFACE ${CMAKE_CURRENT_LIST_DIR}) + +# Pull in pico libraries that we need +target_link_libraries(stellar_unicorn INTERFACE pico_stdlib pico_graphics hardware_adc hardware_pio hardware_dma) diff --git a/libraries/stellar_unicorn/stellar_unicorn.cpp b/libraries/stellar_unicorn/stellar_unicorn.cpp new file mode 100644 index 00000000..3547315a --- /dev/null +++ b/libraries/stellar_unicorn/stellar_unicorn.cpp @@ -0,0 +1,595 @@ +#include + +#include "hardware/dma.h" +#include "hardware/irq.h" +#include "hardware/adc.h" +#include "hardware/clocks.h" + + +#include "stellar_unicorn.pio.h" +#include "audio_i2s.pio.h" + +#include "stellar_unicorn.hpp" + +// pixel data is stored as a stream of bits delivered in the +// order the PIO needs to manage the shift registers, row +// selects, delays, and latching/blanking +// +// the pins used are: +// +// - 13: column clock (sideset) +// - 14: column data (out base) +// - 15: column latch +// - 16: column blank +// - 17: row select bit 0 +// - 18: row select bit 1 +// - 19: row select bit 2 +// - 20: row select bit 3 +// +// the framebuffer data is structured like this: +// +// for each row: +// for each bcd frame: +// 0: 00111111 // row pixel count (minus one) +// 1: xxxxrrrr // row select bits +// 2 - 65: xxxxxbgr, xxxxxbgr, xxxxxbgr, ... // pixel data +// 66 - 67: xxxxxxxx, xxxxxxxx, // dummy bytes to dword align +// 68 - 71: tttttttt, tttttttt, tttttttt // bcd tick count (0-65536) +// +// .. and back to the start + +static uint16_t r_gamma_lut[256] = {0}; +static uint16_t g_gamma_lut[256] = {0}; +static uint16_t b_gamma_lut[256] = {0}; + +static uint32_t dma_channel; +static uint32_t dma_ctrl_channel; +static uint32_t audio_dma_channel; + +namespace pimoroni { + + StellarUnicorn* StellarUnicorn::unicorn = nullptr; + PIO StellarUnicorn::bitstream_pio = pio0; + uint StellarUnicorn::bitstream_sm = 0; + uint StellarUnicorn::bitstream_sm_offset = 0; + PIO StellarUnicorn::audio_pio = pio0; + uint StellarUnicorn::audio_sm = 0; + uint StellarUnicorn::audio_sm_offset = 0; + + // once the dma transfer of the scanline is complete we move to the + // next scanline (or quit if we're finished) + void __isr StellarUnicorn::dma_complete() { + if(unicorn != nullptr && dma_channel_get_irq0_status(audio_dma_channel)) { + unicorn->next_audio_sequence(); + } + } + + StellarUnicorn::~StellarUnicorn() { + if(unicorn == this) { + partial_teardown(); + + dma_channel_unclaim(dma_ctrl_channel); // This works now the teardown behaves correctly + dma_channel_unclaim(dma_channel); // This works now the teardown behaves correctly + pio_sm_unclaim(bitstream_pio, bitstream_sm); + pio_remove_program(bitstream_pio, &stellar_unicorn_program, bitstream_sm_offset); + + dma_channel_unclaim(audio_dma_channel); // This works now the teardown behaves correctly + pio_sm_unclaim(audio_pio, audio_sm); + pio_remove_program(audio_pio, &audio_i2s_program, audio_sm_offset); + irq_remove_handler(DMA_IRQ_0, dma_complete); + + unicorn = nullptr; + } + } + + void StellarUnicorn::partial_teardown() { + // Stop the bitstream SM + pio_sm_set_enabled(bitstream_pio, bitstream_sm, false); + + // Make sure the display is off and switch it to an invisible row, to be safe + const uint pins_to_set = 1 << COLUMN_BLANK | 0b1111 << ROW_BIT_0; + pio_sm_set_pins_with_mask(bitstream_pio, bitstream_sm, pins_to_set, pins_to_set); + + + dma_hw->ch[dma_ctrl_channel].al1_ctrl = (dma_hw->ch[dma_ctrl_channel].al1_ctrl & ~DMA_CH0_CTRL_TRIG_CHAIN_TO_BITS) | (dma_ctrl_channel << DMA_CH0_CTRL_TRIG_CHAIN_TO_LSB); + dma_hw->ch[dma_channel].al1_ctrl = (dma_hw->ch[dma_channel].al1_ctrl & ~DMA_CH0_CTRL_TRIG_CHAIN_TO_BITS) | (dma_channel << DMA_CH0_CTRL_TRIG_CHAIN_TO_LSB); + // Abort any in-progress DMA transfer + dma_safe_abort(dma_ctrl_channel); + //dma_channel_abort(dma_ctrl_channel); + //dma_channel_abort(dma_channel); + dma_safe_abort(dma_channel); + + + // Stop the audio SM + pio_sm_set_enabled(audio_pio, audio_sm, false); + + // Reset the I2S pins to avoid popping when audio is suddenly stopped + const uint pins_to_clear = 1 << I2S_DATA | 1 << I2S_BCLK | 1 << I2S_LRCLK; + pio_sm_set_pins_with_mask(audio_pio, audio_sm, 0, pins_to_clear); + + // Abort any in-progress DMA transfer + dma_safe_abort(audio_dma_channel); + } + + uint16_t StellarUnicorn::light() { + adc_select_input(2); + return adc_read(); + } + + void StellarUnicorn::init() { + + if(unicorn != nullptr) { + // Tear down the old GU instance's hardware resources + partial_teardown(); + } + + + // create 14-bit gamma luts + for(uint16_t v = 0; v < 256; v++) { + // gamma correct the provided 0-255 brightness value onto a + // 0-65535 range for the pwm counter + float r_gamma = 1.8f; + r_gamma_lut[v] = (uint16_t)(powf((float)(v) / 255.0f, r_gamma) * (float(1U << (BCD_FRAME_COUNT)) - 1.0f) + 0.5f); + float g_gamma = 1.8f; + g_gamma_lut[v] = (uint16_t)(powf((float)(v) / 255.0f, g_gamma) * (float(1U << (BCD_FRAME_COUNT)) - 1.0f) + 0.5f); + float b_gamma = 1.8f; + b_gamma_lut[v] = (uint16_t)(powf((float)(v) / 255.0f, b_gamma) * (float(1U << (BCD_FRAME_COUNT)) - 1.0f) + 0.5f); + } + + // for each row: + // for each bcd frame: + // 0: 00111111 // row pixel count (minus one) + // 1 - 64: xxxxxbgr, xxxxxbgr, xxxxxbgr, ... // pixel data + // 65 - 67: xxxxxxxx, xxxxxxxx, xxxxxxxx // dummy bytes to dword align + // 68: xxxrrrrr // row select bits + // 69 - 71: tttttttt, tttttttt, tttttttt // bcd tick count (0-65536) + // + // .. and back to the start + + + // initialise the bcd timing values and row selects in the bitstream + for(uint8_t row = 0; row < 16; row++) { + for(uint8_t frame = 0; frame < BCD_FRAME_COUNT; frame++) { + // find the offset of this row and frame in the bitstream + uint8_t *p = &bitstream[row * ROW_BYTES + (BCD_FRAME_BYTES * frame)]; + + p[ 0] = 64 - 1; // row pixel count + p[ 1] = row; // row select + + // set the number of bcd ticks for this frame + uint32_t bcd_ticks = (1 << frame); + p[68] = (bcd_ticks & 0xff) >> 0; + p[69] = (bcd_ticks & 0xff00) >> 8; + p[70] = (bcd_ticks & 0xff0000) >> 16; + p[71] = (bcd_ticks & 0xff000000) >> 24; + } + } + + // setup light sensor adc + adc_init(); + adc_gpio_init(LIGHT_SENSOR); + + gpio_init(COLUMN_CLOCK); gpio_set_dir(COLUMN_CLOCK, GPIO_OUT); gpio_put(COLUMN_CLOCK, false); + gpio_init(COLUMN_DATA); gpio_set_dir(COLUMN_DATA, GPIO_OUT); gpio_put(COLUMN_DATA, false); + gpio_init(COLUMN_LATCH); gpio_set_dir(COLUMN_LATCH, GPIO_OUT); gpio_put(COLUMN_LATCH, false); + gpio_init(COLUMN_BLANK); gpio_set_dir(COLUMN_BLANK, GPIO_OUT); gpio_put(COLUMN_BLANK, true); + + // initialise the row select, and set them to a non-visible row to avoid flashes during setup + gpio_init(ROW_BIT_0); gpio_set_dir(ROW_BIT_0, GPIO_OUT); gpio_put(ROW_BIT_0, true); + gpio_init(ROW_BIT_1); gpio_set_dir(ROW_BIT_1, GPIO_OUT); gpio_put(ROW_BIT_1, true); + gpio_init(ROW_BIT_2); gpio_set_dir(ROW_BIT_2, GPIO_OUT); gpio_put(ROW_BIT_2, true); + gpio_init(ROW_BIT_3); gpio_set_dir(ROW_BIT_3, GPIO_OUT); gpio_put(ROW_BIT_3, true); + + sleep_ms(100); + + // configure full output current in register 2 + + uint16_t reg1 = 0b1111111111001110; + + // clock the register value to the first 11 driver chips + for(int j = 0; j < 11; j++) { + for(int i = 0; i < 16; i++) { + if(reg1 & (1U << (15 - i))) { + gpio_put(COLUMN_DATA, true); + }else{ + gpio_put(COLUMN_DATA, false); + } + sleep_us(10); + gpio_put(COLUMN_CLOCK, true); + sleep_us(10); + gpio_put(COLUMN_CLOCK, false); + } + } + + // clock the last chip and latch the value + for(int i = 0; i < 16; i++) { + if(reg1 & (1U << (15 - i))) { + gpio_put(COLUMN_DATA, true); + }else{ + gpio_put(COLUMN_DATA, false); + } + + sleep_us(10); + gpio_put(COLUMN_CLOCK, true); + sleep_us(10); + gpio_put(COLUMN_CLOCK, false); + + if(i == 4) { + gpio_put(COLUMN_LATCH, true); + } + } + gpio_put(COLUMN_LATCH, false); + + // reapply the blank as the above seems to cause a slight glow. + // Note, this will produce a brief flash if a visible row is selected (which it shouldn't be) + gpio_put(COLUMN_BLANK, false); + sleep_us(10); + gpio_put(COLUMN_BLANK, true); + + gpio_init(MUTE); gpio_set_dir(MUTE, GPIO_OUT); gpio_put(MUTE, true); + + // setup button inputs + gpio_init(SWITCH_A); gpio_pull_up(SWITCH_A); + gpio_init(SWITCH_B); gpio_pull_up(SWITCH_B); + gpio_init(SWITCH_C); gpio_pull_up(SWITCH_C); + gpio_init(SWITCH_D); gpio_pull_up(SWITCH_D); + + gpio_init(SWITCH_SLEEP); gpio_pull_up(SWITCH_SLEEP); + + gpio_init(SWITCH_BRIGHTNESS_UP); gpio_pull_up(SWITCH_BRIGHTNESS_UP); + gpio_init(SWITCH_BRIGHTNESS_DOWN); gpio_pull_up(SWITCH_BRIGHTNESS_DOWN); + + gpio_init(SWITCH_VOLUME_UP); gpio_pull_up(SWITCH_VOLUME_UP); + gpio_init(SWITCH_VOLUME_DOWN); gpio_pull_up(SWITCH_VOLUME_DOWN); + + // setup the pio if it has not previously been set up + bitstream_pio = pio0; + if(unicorn == nullptr) { + bitstream_sm = pio_claim_unused_sm(bitstream_pio, true); + bitstream_sm_offset = pio_add_program(bitstream_pio, &stellar_unicorn_program); + } + + pio_gpio_init(bitstream_pio, COLUMN_CLOCK); + pio_gpio_init(bitstream_pio, COLUMN_DATA); + pio_gpio_init(bitstream_pio, COLUMN_LATCH); + pio_gpio_init(bitstream_pio, COLUMN_BLANK); + + pio_gpio_init(bitstream_pio, ROW_BIT_0); + pio_gpio_init(bitstream_pio, ROW_BIT_1); + pio_gpio_init(bitstream_pio, ROW_BIT_2); + pio_gpio_init(bitstream_pio, ROW_BIT_3); + + // set the blank and row pins to be high, then set all led driving pins as outputs. + // This order is important to avoid a momentary flash + const uint pins_to_set = 1 << COLUMN_BLANK | 0b1111 << ROW_BIT_0; + pio_sm_set_pins_with_mask(bitstream_pio, bitstream_sm, pins_to_set, pins_to_set); + pio_sm_set_consecutive_pindirs(bitstream_pio, bitstream_sm, COLUMN_CLOCK, 8, true); + + pio_sm_config c = stellar_unicorn_program_get_default_config(bitstream_sm_offset); + + // osr shifts right, autopull on, autopull threshold 8 + sm_config_set_out_shift(&c, true, true, 32); + + // configure out, set, and sideset pins + sm_config_set_out_pins(&c, ROW_BIT_0, 4); + sm_config_set_set_pins(&c, COLUMN_DATA, 3); + sm_config_set_sideset_pins(&c, COLUMN_CLOCK); + + // join fifos as only tx needed (gives 8 deep fifo instead of 4) + sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX); + + // setup dma transfer for pixel data to the pio + //if(unicorn == nullptr) { + dma_channel = dma_claim_unused_channel(true); + dma_ctrl_channel = dma_claim_unused_channel(true); + //} + dma_channel_config ctrl_config = dma_channel_get_default_config(dma_ctrl_channel); + channel_config_set_transfer_data_size(&ctrl_config, DMA_SIZE_32); + channel_config_set_read_increment(&ctrl_config, false); + channel_config_set_write_increment(&ctrl_config, false); + channel_config_set_chain_to(&ctrl_config, dma_channel); + + dma_channel_configure( + dma_ctrl_channel, + &ctrl_config, + &dma_hw->ch[dma_channel].read_addr, + &bitstream_addr, + 1, + false + ); + + + dma_channel_config config = dma_channel_get_default_config(dma_channel); + channel_config_set_transfer_data_size(&config, DMA_SIZE_32); + channel_config_set_bswap(&config, false); // byte swap to reverse little endian + channel_config_set_dreq(&config, pio_get_dreq(bitstream_pio, bitstream_sm, true)); + channel_config_set_chain_to(&config, dma_ctrl_channel); + + dma_channel_configure( + dma_channel, + &config, + &bitstream_pio->txf[bitstream_sm], + NULL, + BITSTREAM_LENGTH / 4, + false); + + pio_sm_init(bitstream_pio, bitstream_sm, bitstream_sm_offset, &c); + + pio_sm_set_enabled(bitstream_pio, bitstream_sm, true); + + // start the control channel + dma_start_channel_mask(1u << dma_ctrl_channel); + + + // setup audio pio program + audio_pio = pio0; + if(unicorn == nullptr) { + audio_sm = pio_claim_unused_sm(audio_pio, true); + audio_sm_offset = pio_add_program(audio_pio, &audio_i2s_program); + } + + pio_gpio_init(audio_pio, I2S_DATA); + pio_gpio_init(audio_pio, I2S_BCLK); + pio_gpio_init(audio_pio, I2S_LRCLK); + + audio_i2s_program_init(audio_pio, audio_sm, audio_sm_offset, I2S_DATA, I2S_BCLK); + uint32_t system_clock_frequency = clock_get_hz(clk_sys); + uint32_t divider = system_clock_frequency * 4 / SYSTEM_FREQ; // avoid arithmetic overflow + pio_sm_set_clkdiv_int_frac(audio_pio, audio_sm, divider >> 8u, divider & 0xffu); + + audio_dma_channel = dma_claim_unused_channel(true); + dma_channel_config audio_config = dma_channel_get_default_config(audio_dma_channel); + channel_config_set_transfer_data_size(&audio_config, DMA_SIZE_16); + //channel_config_set_bswap(&audio_config, false); // byte swap to reverse little endian + channel_config_set_dreq(&audio_config, pio_get_dreq(audio_pio, audio_sm, true)); + dma_channel_configure(audio_dma_channel, &audio_config, &audio_pio->txf[audio_sm], NULL, 0, false); + + dma_channel_set_irq0_enabled(audio_dma_channel, true); + + if(unicorn == nullptr) { + irq_add_shared_handler(DMA_IRQ_0, dma_complete, PICO_SHARED_IRQ_HANDLER_DEFAULT_ORDER_PRIORITY); + irq_set_enabled(DMA_IRQ_0, true); + } + + unicorn = this; + } + + void StellarUnicorn::clear() { + if(unicorn == this) { + for(uint8_t y = 0; y < HEIGHT; y++) { + for(uint8_t x = 0; x < WIDTH; x++) { + set_pixel(x, y, 0, 0, 0); + } + } + } + } + + void StellarUnicorn::dma_safe_abort(uint channel) { + // Tear down the DMA channel. + // This is copied from: https://github.com/raspberrypi/pico-sdk/pull/744/commits/5e0e8004dd790f0155426e6689a66e08a83cd9fc + uint32_t irq0_save = dma_hw->inte0 & (1u << channel); + hw_clear_bits(&dma_hw->inte0, irq0_save); + + dma_hw->abort = 1u << channel; + + // To fence off on in-flight transfers, the BUSY bit should be polled + // rather than the ABORT bit, because the ABORT bit can clear prematurely. + while (dma_hw->ch[channel].ctrl_trig & DMA_CH0_CTRL_TRIG_BUSY_BITS) tight_loop_contents(); + + // Clear the interrupt (if any) and restore the interrupt masks. + dma_hw->ints0 = 1u << channel; + hw_set_bits(&dma_hw->inte0, irq0_save); + } + + void StellarUnicorn::play_sample(uint8_t *data, uint32_t length) { + stop_playing(); + + if(unicorn == this) { + // Restart the audio SM and start a new DMA transfer + pio_sm_set_enabled(audio_pio, audio_sm, true); + dma_channel_transfer_from_buffer_now(audio_dma_channel, data, length / 2); + play_mode = PLAYING_BUFFER; + } + } + + void StellarUnicorn::play_synth() { + if(play_mode != PLAYING_SYNTH) { + stop_playing(); + } + + if(unicorn == this && play_mode == NOT_PLAYING) { + // Nothing is playing, so we can set up the first buffer straight away + current_buffer = 0; + + populate_next_synth(); + + // Restart the audio SM and start a new DMA transfer + pio_sm_set_enabled(audio_pio, audio_sm, true); + + play_mode = PLAYING_SYNTH; + + next_audio_sequence(); + } + } + + void StellarUnicorn::next_audio_sequence() { + // Clear any interrupt request caused by our channel + //dma_channel_acknowledge_irq0(audio_dma_channel); + // NOTE Temporary replacement of the above until this reaches pico-sdk main: + // https://github.com/raspberrypi/pico-sdk/issues/974 + dma_hw->ints0 = 1u << audio_dma_channel; + + if(play_mode == PLAYING_SYNTH) { + + dma_channel_transfer_from_buffer_now(audio_dma_channel, tone_buffers[current_buffer], TONE_BUFFER_SIZE); + current_buffer = (current_buffer + 1) % NUM_TONE_BUFFERS; + + populate_next_synth(); + } + else { + play_mode = NOT_PLAYING; + } + } + + void StellarUnicorn::populate_next_synth() { + int16_t *samples = tone_buffers[current_buffer]; + for(uint i = 0; i < TONE_BUFFER_SIZE; i++) { + samples[i] = synth.get_audio_frame(); + } + } + + void StellarUnicorn::stop_playing() { + if(unicorn == this) { + // Stop the audio SM + pio_sm_set_enabled(audio_pio, audio_sm, false); + + // Reset the I2S pins to avoid popping when audio is suddenly stopped + const uint pins_to_clear = 1 << I2S_DATA | 1 << I2S_BCLK | 1 << I2S_LRCLK; + pio_sm_set_pins_with_mask(audio_pio, audio_sm, 0, pins_to_clear); + + // Abort any in-progress DMA transfer + dma_safe_abort(audio_dma_channel); + + play_mode = NOT_PLAYING; + } + } + + AudioChannel& StellarUnicorn::synth_channel(uint channel) { + assert(channel < PicoSynth::CHANNEL_COUNT); + return synth.channels[channel]; + } + + void StellarUnicorn::set_pixel(int x, int y, uint8_t r, uint8_t g, uint8_t b) { + x = (WIDTH - 1) - x; + y = (HEIGHT - 1) - y; + + // map coordinates into display space + if(y < 16) { + // move to top half of display (which is actually the right half of the framebuffer) + x += 32; + }else{ + // remap y coordinate + y -= 16; + } + + r = (r * this->brightness) >> 8; + g = (g * this->brightness) >> 8; + b = (b * this->brightness) >> 8; + + uint16_t gamma_r = r_gamma_lut[r]; + uint16_t gamma_g = g_gamma_lut[g]; + uint16_t gamma_b = b_gamma_lut[b]; + + // for each row: + // for each bcd frame: + // 0: 00111111 // row pixel count (minus one) + // 1 - 64: xxxxxbgr, xxxxxbgr, xxxxxbgr, ... // pixel data + // 65 - 67: xxxxxxxx, xxxxxxxx, xxxxxxxx // dummy bytes to dword align + // 68: xxxxrrrr // row select bits + // 69 - 71: tttttttt, tttttttt, tttttttt // bcd tick count (0-65536) + // + // .. and back to the start + + // set the appropriate bits in the separate bcd frames + for(uint8_t frame = 0; frame < BCD_FRAME_COUNT; frame++) { + uint8_t *p = &bitstream[y * ROW_BYTES + (BCD_FRAME_BYTES * frame) + 2 + x]; + + uint8_t red_bit = gamma_r & 0b1; + uint8_t green_bit = gamma_g & 0b1; + uint8_t blue_bit = gamma_b & 0b1; + + *p = (blue_bit << 0) | (green_bit << 1) | (red_bit << 2); + + gamma_r >>= 1; + gamma_g >>= 1; + gamma_b >>= 1; + } + } + + void StellarUnicorn::set_brightness(float value) { + value = value < 0.0f ? 0.0f : value; + value = value > 1.0f ? 1.0f : value; + this->brightness = floor(value * 256.0f); + } + + float StellarUnicorn::get_brightness() { + return this->brightness / 255.0f; + } + + void StellarUnicorn::adjust_brightness(float delta) { + this->set_brightness(this->get_brightness() + delta); + } + + void StellarUnicorn::set_volume(float value) { + value = value < 0.0f ? 0.0f : value; + value = value > 1.0f ? 1.0f : value; + this->volume = floor(value * 255.0f); + this->synth.volume = this->volume * 255.0f; + } + + float StellarUnicorn::get_volume() { + return this->volume / 255.0f; + } + + void StellarUnicorn::adjust_volume(float delta) { + this->set_volume(this->get_volume() + delta); + } + + void StellarUnicorn::update(PicoGraphics *graphics) { + if(unicorn == this) { + if(graphics->pen_type == PicoGraphics::PEN_RGB888) { + uint32_t *p = (uint32_t *)graphics->frame_buffer; + + for(int y = 0; y < 32; y++) { + for(int x = 0; x < 32; x++) { + uint32_t col = *p; + uint8_t r = (col & 0xff0000) >> 16; + uint8_t g = (col & 0x00ff00) >> 8; + uint8_t b = (col & 0x0000ff) >> 0; + p++; + + set_pixel(x, y, r, g, b); + } + } + } + else if(graphics->pen_type == PicoGraphics::PEN_RGB565) { + uint16_t *p = (uint16_t *)graphics->frame_buffer; + for(int y = 0; y < 32; y++) { + for(int x = 0; x < 32; x++) { + uint16_t col = __builtin_bswap16(*p); + uint8_t r = (col & 0b1111100000000000) >> 8; + uint8_t g = (col & 0b0000011111100000) >> 3; + uint8_t b = (col & 0b0000000000011111) << 3; + p++; + + set_pixel(x, y, r, g, b); + } + } + } + else if(graphics->pen_type == PicoGraphics::PEN_P8 || graphics->pen_type == PicoGraphics::PEN_P4) { + int offset = 0; + graphics->frame_convert(PicoGraphics::PEN_RGB888, [this, offset](void *data, size_t length) mutable { + uint32_t *p = (uint32_t *)data; + for(auto i = 0u; i < length / 4; i++) { + int x = offset % 32; + int y = offset / 32; + + uint32_t col = *p; + uint8_t r = (col & 0xff0000) >> 16; + uint8_t g = (col & 0x00ff00) >> 8; + uint8_t b = (col & 0x0000ff) >> 0; + + set_pixel(x, y, r, g, b); + offset++; + p++; + } + }); + } + } + } + + bool StellarUnicorn::is_pressed(uint8_t button) { + return !gpio_get(button); + } + +} diff --git a/libraries/stellar_unicorn/stellar_unicorn.hpp b/libraries/stellar_unicorn/stellar_unicorn.hpp new file mode 100644 index 00000000..f5bc4c0f --- /dev/null +++ b/libraries/stellar_unicorn/stellar_unicorn.hpp @@ -0,0 +1,125 @@ +#pragma once + +#include "hardware/pio.h" +#include "pico_graphics.hpp" +#include "../pico_synth/pico_synth.hpp" + +namespace pimoroni { + + class StellarUnicorn { + public: + static const int WIDTH = 16; + static const int HEIGHT = 16; + + // pin assignments + static const uint8_t COLUMN_CLOCK = 13; + static const uint8_t COLUMN_DATA = 14; + static const uint8_t COLUMN_LATCH = 15; + static const uint8_t COLUMN_BLANK = 16; + + static const uint8_t ROW_BIT_0 = 17; + static const uint8_t ROW_BIT_1 = 18; + static const uint8_t ROW_BIT_2 = 19; + static const uint8_t ROW_BIT_3 = 20; + + static const uint8_t LIGHT_SENSOR = 28; + + static const uint8_t MUTE = 22; + + static const uint8_t I2S_DATA = 9; + static const uint8_t I2S_BCLK = 10; + static const uint8_t I2S_LRCLK = 11; + + static const uint8_t I2C_SDA = 4; + static const uint8_t I2C_SCL = 5; + + static const uint8_t SWITCH_A = 0; + static const uint8_t SWITCH_B = 1; + static const uint8_t SWITCH_C = 3; + static const uint8_t SWITCH_D = 6; + + static const uint8_t SWITCH_SLEEP = 27; + + static const uint8_t SWITCH_VOLUME_UP = 7; + static const uint8_t SWITCH_VOLUME_DOWN = 8; + static const uint8_t SWITCH_BRIGHTNESS_UP = 21; + static const uint8_t SWITCH_BRIGHTNESS_DOWN = 26; + + private: + static const uint32_t ROW_COUNT = 16; + static const uint32_t BCD_FRAME_COUNT = 14; + static const uint32_t BCD_FRAME_BYTES = 72; + static const uint32_t ROW_BYTES = BCD_FRAME_COUNT * BCD_FRAME_BYTES; + static const uint32_t BITSTREAM_LENGTH = (ROW_COUNT * ROW_BYTES); + static const uint SYSTEM_FREQ = 22050; + + private: + static PIO bitstream_pio; + static uint bitstream_sm; + static uint bitstream_sm_offset; + + static PIO audio_pio; + static uint audio_sm; + static uint audio_sm_offset; + + uint16_t brightness = 256; + uint16_t volume = 127; + + // must be aligned for 32bit dma transfer + alignas(4) uint8_t bitstream[BITSTREAM_LENGTH] = {0}; + const uint32_t bitstream_addr = (uint32_t)bitstream; + static StellarUnicorn* unicorn; + static void dma_complete(); + + static const uint NUM_TONE_BUFFERS = 2; + static const uint TONE_BUFFER_SIZE = 4; + int16_t tone_buffers[NUM_TONE_BUFFERS][TONE_BUFFER_SIZE] = {0}; + uint current_buffer = 0; + + PicoSynth synth; + + enum PlayMode { + PLAYING_BUFFER, + //PLAYING_TONE, + PLAYING_SYNTH, + NOT_PLAYING + }; + PlayMode play_mode = NOT_PLAYING; + + public: + ~StellarUnicorn(); + + void init(); + static inline void pio_program_init(PIO pio, uint sm, uint offset); + + void clear(); + + void update(PicoGraphics *graphics); + + void set_brightness(float value); + float get_brightness(); + void adjust_brightness(float delta); + + void set_volume(float value); + float get_volume(); + void adjust_volume(float delta); + + void set_pixel(int x, int y, uint8_t r, uint8_t g, uint8_t b); + + uint16_t light(); + + bool is_pressed(uint8_t button); + + void play_sample(uint8_t *data, uint32_t length); + void play_synth(); + void stop_playing(); + AudioChannel& synth_channel(uint channel); + + private: + void partial_teardown(); + void dma_safe_abort(uint channel); + void next_audio_sequence(); + void populate_next_synth(); + }; + +} \ No newline at end of file diff --git a/libraries/stellar_unicorn/stellar_unicorn.pio b/libraries/stellar_unicorn/stellar_unicorn.pio new file mode 100644 index 00000000..85852244 --- /dev/null +++ b/libraries/stellar_unicorn/stellar_unicorn.pio @@ -0,0 +1,79 @@ +.program stellar_unicorn +.side_set 1 opt + +; out pins: +; +; - 3: row select bit 0 +; - 4: row select bit 1 +; - 5: row select bit 2 +; - 6: row select bit 3 + +; set pins: +; +; - 0: column data (base) +; - 1: column latch +; - 2: column blank + +; sideset pin: +; +; - 0: column clock + +; for each row: +; for each bcd frame: +; 0: 00111111 // row pixel count (minus one) +; 1: xxxxrrrr // row select bits +; 2 - 65: xxxxxbgr, xxxxxbgr, xxxxxbgr, ... // pixel data +; 66 - 67: xxxxxxxx, xxxxxxxx // dummy bytes to dword align +; 68 - 71: tttttttt, tttttttt, tttttttt // bcd tick count (0-65536) +; +; .. and back to the start + + +.wrap_target + +; loop over row pixels + out y, 8 ; get row pixel count (minus 1 because test is pre decrement) + out pins, 8 ; output row select +pixels: + + ; red bit + out x, 1 side 0 [1] ; pull in blue bit from OSR into register x, clear clock + set pins, 0b100 ; clear data bit, blank high + jmp !x endb ; if bit was zero jump + set pins, 0b101 ; set data bit, blank high + endb: + nop side 1 [2] ; clock in bit + + ; green bit + out x, 1 side 0 [1] ; pull in green bit from OSR into register X, clear clock + set pins, 0b100 ; clear data bit, blank high + jmp !x endg ; if bit was zero jump + set pins, 0b101 ; set data bit, blank high + endg: + nop side 1 [2] ; clock in bit + + ; blue bit + out x, 1 side 0 [1] ; pull in red bit from OSR into register X, clear clock + set pins, 0b100 ; clear data bit, blank high + jmp !x endr ; if bit was zero jump + set pins, 0b101 ; set data bit, blank high + endr: + out null, 5 side 1 [2] ; clock in bit + + ;out null, 5 side 0 ; discard the five dummy bits for this pixel + + jmp y-- pixels + + out null, 16 ; discard dummy bytes + + set pins, 0b110 [5] ; latch high, blank high + set pins, 0b000 ; blank low (enable output) + +; loop over bcd delay period + out y, 32 ; get bcd delay counter value +bcd_delay: + jmp y-- bcd_delay + + set pins 0b100 ; blank high (disable output) + +.wrap \ No newline at end of file diff --git a/micropython/modules/micropython-stellar_unicorn.cmake b/micropython/modules/micropython-stellar_unicorn.cmake new file mode 100644 index 00000000..da6c3efe --- /dev/null +++ b/micropython/modules/micropython-stellar_unicorn.cmake @@ -0,0 +1,40 @@ +include_directories(${CMAKE_CURRENT_LIST_DIR}/../../) + +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../../") + +set(CMAKE_C_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) + +# Essential +include(pimoroni_i2c/micropython) +include(pimoroni_bus/micropython) + +# Pico Graphics Essential +include(hershey_fonts/micropython) +include(bitmap_fonts/micropython) +include(picographics/micropython) + +# Pico Graphics Extra +include(jpegdec/micropython) +include(qrcode/micropython/micropython) + +# Sensors & Breakouts +include(micropython-common-breakouts) +include(pcf85063a/micropython) + +# Utility +include(adcfft/micropython) + +# LEDs & Matrices +include(stellar_unicorn/micropython) + +# ULAB +include(micropython-common-ulab) +enable_ulab() + +include(modules_py/modules_py) + +# C++ Magic Memory +include(cppmem/micropython) diff --git a/micropython/modules/picographics/README.md b/micropython/modules/picographics/README.md index 608a118c..4e65a6bd 100644 --- a/micropython/modules/picographics/README.md +++ b/micropython/modules/picographics/README.md @@ -72,6 +72,7 @@ Bear in mind that MicroPython has only 192K of RAM available- a 320x240 pixel di * Galactic Unicorn - 53x11 LED Matrix - `DISPLAY_GALACTIC_UNICORN` * Interstate75 and 75W - HUB75 Matrix driver - `DISPLAY_INTERSTATE75_SIZEOFMATRIX` please read below! * Cosmic Unicorn - 32x32 LED Matrix - `DISPLAY_COSMIC_UNICORN` +* Stellar Unicorn - 16x16 LED Matrix - `DISPLAY_STELLAR_UNICORN` #### Interstate75 and Interstate75W Display modes diff --git a/micropython/modules/picographics/picographics.c b/micropython/modules/picographics/picographics.c index ed034dce..3a620256 100644 --- a/micropython/modules/picographics/picographics.c +++ b/micropython/modules/picographics/picographics.c @@ -152,6 +152,7 @@ STATIC const mp_map_elem_t picographics_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_DISPLAY_INTERSTATE75_256X64), MP_ROM_INT(DISPLAY_INTERSTATE75_256X64) }, { MP_ROM_QSTR(MP_QSTR_DISPLAY_INKY_FRAME_7), MP_ROM_INT(DISPLAY_INKY_FRAME_7) }, { MP_ROM_QSTR(MP_QSTR_DISPLAY_COSMIC_UNICORN), MP_ROM_INT(DISPLAY_COSMIC_UNICORN) }, + { MP_ROM_QSTR(MP_QSTR_DISPLAY_STELLAR_UNICORN), MP_ROM_INT(DISPLAY_STELLAR_UNICORN) }, { MP_ROM_QSTR(MP_QSTR_DISPLAY_UNICORN_PACK), MP_ROM_INT(DISPLAY_UNICORN_PACK) }, { MP_ROM_QSTR(MP_QSTR_DISPLAY_SCROLL_PACK), MP_ROM_INT(DISPLAY_SCROLL_PACK) }, diff --git a/micropython/modules/picographics/picographics.cpp b/micropython/modules/picographics/picographics.cpp index 33c27af9..28566521 100644 --- a/micropython/modules/picographics/picographics.cpp +++ b/micropython/modules/picographics/picographics.cpp @@ -210,6 +210,14 @@ bool get_display_settings(PicoGraphicsDisplay display, int &width, int &height, if(rotate == -1) rotate = (int)Rotation::ROTATE_0; if(pen_type == -1) pen_type = PEN_RGB888; break; + case DISPLAY_STELLAR_UNICORN: + width = 16; + height = 16; + bus_type = BUS_PIO; + // Portrait to match labelling + if(rotate == -1) rotate = (int)Rotation::ROTATE_0; + if(pen_type == -1) pen_type = PEN_RGB888; + break; case DISPLAY_UNICORN_PACK: width = 16; height = 7; @@ -354,6 +362,7 @@ mp_obj_t ModPicoGraphics_make_new(const mp_obj_type_t *type, size_t n_args, size || display == DISPLAY_INTERSTATE75_64X32 || display == DISPLAY_GALACTIC_UNICORN || display == DISPLAY_COSMIC_UNICORN + || display == DISPLAY_STELLAR_UNICORN || display == DISPLAY_UNICORN_PACK || display == DISPLAY_SCROLL_PACK) { // Create a dummy display driver diff --git a/micropython/modules/picographics/picographics.h b/micropython/modules/picographics/picographics.h index e5ea8cf3..4d64d5a0 100644 --- a/micropython/modules/picographics/picographics.h +++ b/micropython/modules/picographics/picographics.h @@ -26,6 +26,7 @@ enum PicoGraphicsDisplay { DISPLAY_INTERSTATE75_256X64, DISPLAY_INKY_FRAME_7, DISPLAY_COSMIC_UNICORN, + DISPLAY_STELLAR_UNICORN, DISPLAY_UNICORN_PACK, DISPLAY_SCROLL_PACK }; diff --git a/micropython/modules/stellar_unicorn/README.md b/micropython/modules/stellar_unicorn/README.md new file mode 100644 index 00000000..f09167e2 --- /dev/null +++ b/micropython/modules/stellar_unicorn/README.md @@ -0,0 +1,315 @@ +# Stellar Unicorn (MicroPython) + +Stellar Unicorn offers 16x16 bright RGB LEDs driven by Pico W's PIO in addition to a 1W amplifier + speaker, a collection of system and user buttons, and two Qw/ST connectors for adding external sensors and devices. Woha! + +You can buy one here: https://shop.pimoroni.com/products/stellar-unicorn + +## These are not your everyday RGB LEDs! + +Internally Stellar Unicorn applies gamma correction to the supplied image data and updates the display with 14-bit precision resulting in extremely linear visual output - including at the low end. + +The display is refreshed around 300 times per second (300fps!) allowing for rock solid stability even when being filmed, no smearing or flickering even when in motion. + +No strobing or brightness stepping here folks - it's the perfect backdrop for your tricked out streaming setup! + +## Getting started + +The Stellar Unicorn library provides a collection of methods that allow you to easily access all of the features on the board. + +Drawing is primarily handled via our [PicoGraphics](https://github.com/pimoroni/pimoroni-pico/tree/main/micropython/modules/picographics) library which provides a comprehensive selection of drawing methods - once your drawing work is complete you pass the PicoGraphics object to Stellar Unicorn to have it displayed on the screen. + +- [Example Program](#example-program) +- [Interleaved Framebuffer](#interleaved-framebuffer) +- [Function Reference](#function-reference) + - [Imports and Objects](#imports-and-objects) + - [System State](#system-state) + - [`set_brightness(value)`](#set_brightnessvalue) + - [`get_brightness()`](#get_brightness) + - [`adjust_brightness(delta)`](#adjust_brightnessdelta) + - [`set_volume(value)`](#set_volumevalue) + - [`get_volume()`](#get_volume) + - [`adjust_volume(delta)`](#adjust_volumedelta) + - [`light()`](#light) + - [`is_pressed(button)`](#is_pressedbutton) + - [Drawing](#drawing) + - [`update(PicoGraphics)`](#updatepicographics) + - [`clear()`](#clear) + - [Audio](#audio) + - [`play_sample(data)`](#play_sampledata) + - [`synth_channel(channel)`](#synth_channelchannel) + - [`play_synth()`](#play_synth) + - [`stop_playing()`](#stop_playing) + - [Channel Reference](#channel-reference) + - [Constants](#constants) + - [`WIDTH` \& `HEIGHT`](#width--height) + - [Using Breakouts](#using-breakouts) + +# Example Program + +The following example shows how to scroll a simple message across the display. + +```python +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN +import time + +# create a PicoGraphics framebuffer to draw into +graphics = PicoGraphics(display=DISPLAY_STELLAR_UNICORN) + +# create our StellarUnicorn object +su = StellarUnicorn() + +# start position for scrolling (off the side of the display) +scroll = float(-StellarUnicorn.WIDTH) + +# message to scroll +MESSAGE = "Pirate. Monkey. Robot. Ninja." + +# pen colours to draw with +BLACK = graphics.create_pen(0, 0, 0) +YELLOW = graphics.create_pen(255, 255, 0) + +while True: + # determine the scroll position of the text + width = graphics.measure_text(MESSAGE, 1) + scroll += 0.25 + if scroll > width: + scroll = float(-StellarUnicorn.WIDTH) + + # clear the graphics object + graphics.set_pen(BLACK) + graphics.clear() + + # draw the text + graphics.set_pen(YELLOW) + graphics.text(MESSAGE, round(0 - scroll), 2, -1, 0.55) + + # update the display + su.update(graphics) + + time.sleep(0.02) +``` + +# Interleaved Framebuffer + +Stellar Unicorn takes advantage of the RP2040's PIOs to drive screen updates - this is what gives it the performance it needs to render with 14-bit precision at over 300 frames per second. + +The PIO is a powerful, but limited, tool. It has no way to access memory at random and minimal support for decision making and branching. All it can really do is process a stream of data/instructions in order. + +This means that we need to be clever about the way we pass data into the PIO program, the information needs to be delivered in the exact order that the PIO will need to process it. To achieve this we "interleave" our framebuffer - each frame of BCM data is passed one after another with values for the current row, pixel count, and timing inserted as needed: + + row 0 data: + for each bcd frame: + bit : data + 0: 00110110 // row pixel count (minus one) + 1 - 53: xxxxxbgr, xxxxxbgr, xxxxxbgr, ... // pixel data + 54 - 55: xxxxxxxx, xxxxxxxx // dummy bytes to dword align + 56: xxxxrrrr // row select bits + 57 - 59: tttttttt, tttttttt, tttttttt // bcd tick count (0-65536) + + row 1 data: + ... + +If you're working with our library then you don't need to worry about any of these details, they are handled for you. + +# Function Reference + +## Imports and Objects + +To access these functions, you'll need to first `import` the relevant libraries and then set up a Stellar Unicorn object: + +```python +from stellar import StellarUnicorn + +su = StellarUnicorn() +``` + +or (with PicoGraphics): + +```python +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN + +su = StellarUnicorn() +graphics = PicoGraphics(display=DISPLAY_STELLAR_UNICORN) +``` + +## System State + +### `set_brightness(value)` + +Set the brightness - `value` is supplied as a floating point value between `0.0` and `1.0`. + +### `get_brightness()` + +Returns the current brightness as a value between `0.0` and `1.0`. + +### `adjust_brightness(delta)` + +Adjust the brightness of the display - `delta` is supplied as a floating point value and will be added to the current brightness (and then clamped to the range `0.0` to `1.0`). + +For example: + +```python +su.set_brightness(0.5) +su.adjust_brightness(0.1) # brightness is now 0.6 +su.adjust_brightness(0.7) # brightness is now 1.0 +su.adjust_brightness(-0.2) # brightness is now 0.8 +``` + +### `set_volume(value)` + +Set the volume - `value` is supplied as a floating point value between `0.0` and `1.0`. + +### `get_volume()` + +Returns the current volume as a value between `0.0` and `1.0`. + +### `adjust_volume(delta)` + +Adjust the volume - `delta` is supplied as a floating point value and will be added to the current volume (and then clamped to the range `0.0` to `1.0`). + +For example: + +```python +su.set_volume(0.5) +su.set_volume(0.1) # volume is now 0.6 +su.adjust_volume(0.7) # volume is now 1.0 +su.adjust_volume(-0.2) # volume is now 0.8 +``` + +### `light()` + +Get the current value seen by the onboard light sensor as a value between `0` and `4095`. + +### `is_pressed(button)` + +Returns true if the requested `button` is currently pressed. + +There are a set of constants in the StellarUnicorn class that represent each of the buttons. The brightness, sleep, and volume buttons are not tied to hardware functions (they are implemented entirely in software) so can also be used for user functions if preferred. Here's a list of the constants and their associated pin numbers: + +```python +SWITCH_A = 0 +SWITCH_B = 1 +SWITCH_C = 3 +SWITCH_D = 6 +SWITCH_SLEEP = 27 +SWITCH_VOLUME_UP = 7 +SWITCH_VOLUME_DOWN = 8 +SWITCH_BRIGHTNESS_UP = 21 +SWITCH_BRIGHTNESS_DOWN = 26 +``` + +For example: + +```python +while not su.is_pressed(StellarUnicorn.SWITCH_A): + # wait for switch A to be pressed + pass + +print("We did it! We pressed switch A! Heck yeah!") +``` + +## Drawing + +### `update(PicoGraphics)` + +The PicoGraphics library provides a collection of powerful drawing methods to make things simple. + +The image on the PicoGraphics object provided is copied to the interleaved framebuffer with gamma correction applied. + +For example (assuming you've set up your Stellar Unicorn and PicoGraphics objects up [as we did above](#imports-and-objects)): + +```python +su.update(graphics) +``` + +⚠️ If you've used PicoGraphics on our other boards note that this `update` function works a little differently. Here it's a Stellar Unicorn function to which you need to pass a PicoGraphics object to. + +### `clear()` + +Clear the contents of the interleaved framebuffer. This will make your Stellar Unicorn display turn off. To show an image again, call the `update()` function as described above. + +## Audio + +Audio functionality is supported by our [PicoSynth library](https://github.com/pimoroni/pimoroni-pico/tree/main/libraries/pico_synth) which allows you to create multiple voice channels with ADSR (attack decay sustain release) envelopes. It provides a similar set of functionality to the classic SID chip in the Commodore 64. + +### `play_sample(data)` + +Play the provided 16-bit audio sample. `data` must point to a `bytearray` that contains 16-bit PCM data. The number of samples is retrieved from the array's length. + +### `synth_channel(channel)` + +Gets a `Channel` object which can then be configured with voice, ADSR envelope, etc. + +### `play_synth()` + +Start the synth playing. + +### `stop_playing()` + +Stops any currently playing audio. + +### Channel Reference + +```python +configure(waveforms=None, frequency=None, volume=None, + attack=None, decay=None, sustain=None, + release=None, pulse_width=None) +restore() +waveforms() +waveforms(waveforms) +frequency() +frequency(frequency) +volume() +volume(volume) +attack_duration() +attack_duration(duration) +decay_duration() +decay_duration(duration) +sustain_level() +sustain_level(level) +release_duration() +release_duration(duration) +pulse_width() +pulse_width(width) +trigger_attack() # start the channel playing +trigger_release() # stop the channel playing +play_tone(frequency, volume=None, attack=None, release=None) +``` + +## Constants + +### `WIDTH` & `HEIGHT` + +The width and height of Stellar Unicorn are available in constants `WIDTH` and `HEIGHT`. + +For example: + +```python +num_pixels = StellarUnicorn.WIDTH * StellarUnicorn.HEIGHT +print(num_pixels) +``` + +## Using Breakouts + +Stellar Unicorn has two Qw/ST (Qwiic/STEMMA QT) connectors. Breakouts with Qw/ST connectors, can be plugged straight in with a [JST-SH to JST-SH cable](https://shop.pimoroni.com/products/jst-sh-cable-qwiic-stemma-qt-compatible?variant=31910609813587). You can connect I2C Breakout Garden breakouts without Qw/ST connectors using a [JST-SH to JST-SH cable](https://shop.pimoroni.com/products/jst-sh-cable-qwiic-stemma-qt-compatible?variant=31910609813587) and a [Qw/ST to Breakout Garden adaptor](https://shop.pimoroni.com/products/stemma-qt-qwiic-to-breakout-garden-adapter). + +- [List of breakouts currently supported in our C++/MicroPython build](https://github.com/pimoroni/pimoroni-pico#breakouts) + +Stellar Unicorn uses GP4 and GP5 for its I2C interface. You can use the constants in the shared `pimoroni` module to set up the I2C interface: + +```python +from pimoroni_i2c import PimoroniI2C +from pimoroni import BREAKOUT_GARDEN_I2C_PINS + +i2c = PimoroniI2C(**BREAKOUT_GARDEN_I2C_PINS) +``` + +Alternatively, you can specify the pin numbers directly: + +```python +from pimoroni_i2c import PimoroniI2C + +i2c = PimoroniI2C(sda=4, scl=5) +``` \ No newline at end of file diff --git a/micropython/modules/stellar_unicorn/micropython.cmake b/micropython/modules/stellar_unicorn/micropython.cmake new file mode 100644 index 00000000..3f184427 --- /dev/null +++ b/micropython/modules/stellar_unicorn/micropython.cmake @@ -0,0 +1,24 @@ +set(MOD_NAME stellar_unicorn) +string(TOUPPER ${MOD_NAME} MOD_NAME_UPPER) +add_library(usermod_${MOD_NAME} INTERFACE) + +target_sources(usermod_${MOD_NAME} INTERFACE + ${CMAKE_CURRENT_LIST_DIR}/${MOD_NAME}.c + ${CMAKE_CURRENT_LIST_DIR}/${MOD_NAME}.cpp + ${CMAKE_CURRENT_LIST_DIR}/../../../libraries/stellar_unicorn/stellar_unicorn.cpp + ${CMAKE_CURRENT_LIST_DIR}/../../../libraries/pico_synth/pico_synth.cpp + ${CMAKE_CURRENT_LIST_DIR}/../../../libraries/pico_graphics/pico_graphics_pen_rgb888.cpp +) +pico_generate_pio_header(usermod_${MOD_NAME} ${CMAKE_CURRENT_LIST_DIR}/../../../libraries/stellar_unicorn/stellar_unicorn.pio) +pico_generate_pio_header(usermod_${MOD_NAME} ${CMAKE_CURRENT_LIST_DIR}/../../../libraries/stellar_unicorn/audio_i2s.pio) + +target_include_directories(usermod_${MOD_NAME} INTERFACE + ${CMAKE_CURRENT_LIST_DIR} + ${CMAKE_CURRENT_LIST_DIR}/../../../libraries/pico_graphics/ +) + +target_compile_definitions(usermod_${MOD_NAME} INTERFACE + MODULE_STELLAR_ENABLED=1 +) + +target_link_libraries(usermod INTERFACE usermod_${MOD_NAME}) \ No newline at end of file diff --git a/micropython/modules/stellar_unicorn/stellar_unicorn.c b/micropython/modules/stellar_unicorn/stellar_unicorn.c new file mode 100644 index 00000000..b62829cd --- /dev/null +++ b/micropython/modules/stellar_unicorn/stellar_unicorn.c @@ -0,0 +1,150 @@ +#include "stellar_unicorn.h" + + +/***** Methods *****/ +MP_DEFINE_CONST_FUN_OBJ_1(Channel___del___obj, Channel___del__); +MP_DEFINE_CONST_FUN_OBJ_KW(Channel_configure_obj, 1, Channel_configure); +MP_DEFINE_CONST_FUN_OBJ_1(Channel_restore_obj, Channel_restore); +MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(Channel_waveforms_obj, 1, 2, Channel_waveforms); +MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(Channel_frequency_obj, 1, 2, Channel_frequency); +MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(Channel_volume_obj, 1, 2, Channel_volume); +MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(Channel_attack_duration_obj, 1, 2, Channel_attack_duration); +MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(Channel_decay_duration_obj, 1, 2, Channel_decay_duration); +MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(Channel_sustain_level_obj, 1, 2, Channel_sustain_level); +MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(Channel_release_duration_obj, 1, 2, Channel_release_duration); +MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(Channel_pulse_width_obj, 1, 2, Channel_pulse_width); +MP_DEFINE_CONST_FUN_OBJ_1(Channel_trigger_attack_obj, Channel_trigger_attack); +MP_DEFINE_CONST_FUN_OBJ_1(Channel_trigger_release_obj, Channel_trigger_release); +MP_DEFINE_CONST_FUN_OBJ_KW(Channel_play_tone_obj, 2, Channel_play_tone); +//MP_DEFINE_CONST_FUN_OBJ_1(Channel_stop_playing_obj, Channel_stop_playing); + +MP_DEFINE_CONST_FUN_OBJ_1(StellarUnicorn___del___obj, StellarUnicorn___del__); +MP_DEFINE_CONST_FUN_OBJ_1(StellarUnicorn_clear_obj, StellarUnicorn_clear); +MP_DEFINE_CONST_FUN_OBJ_2(StellarUnicorn_update_obj, StellarUnicorn_update); +MP_DEFINE_CONST_FUN_OBJ_2(StellarUnicorn_set_brightness_obj, StellarUnicorn_set_brightness); +MP_DEFINE_CONST_FUN_OBJ_1(StellarUnicorn_get_brightness_obj, StellarUnicorn_get_brightness); +MP_DEFINE_CONST_FUN_OBJ_2(StellarUnicorn_adjust_brightness_obj, StellarUnicorn_adjust_brightness); +MP_DEFINE_CONST_FUN_OBJ_2(StellarUnicorn_set_volume_obj, StellarUnicorn_set_volume); +MP_DEFINE_CONST_FUN_OBJ_1(StellarUnicorn_get_volume_obj, StellarUnicorn_get_volume); +MP_DEFINE_CONST_FUN_OBJ_2(StellarUnicorn_adjust_volume_obj, StellarUnicorn_adjust_volume); +MP_DEFINE_CONST_FUN_OBJ_1(StellarUnicorn_light_obj, StellarUnicorn_light); +MP_DEFINE_CONST_FUN_OBJ_2(StellarUnicorn_is_pressed_obj, StellarUnicorn_is_pressed); +MP_DEFINE_CONST_FUN_OBJ_2(StellarUnicorn_play_sample_obj, StellarUnicorn_play_sample); +MP_DEFINE_CONST_FUN_OBJ_1(StellarUnicorn_play_synth_obj, StellarUnicorn_play_synth); +MP_DEFINE_CONST_FUN_OBJ_1(StellarUnicorn_stop_playing_obj, StellarUnicorn_stop_playing); +MP_DEFINE_CONST_FUN_OBJ_2(StellarUnicorn_synth_channel_obj, StellarUnicorn_synth_channel); + +/***** Binding of Methods *****/ +STATIC const mp_rom_map_elem_t Channel_locals_dict_table[] = { + { MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&Channel___del___obj) }, + { MP_ROM_QSTR(MP_QSTR_configure), MP_ROM_PTR(&Channel_configure_obj) }, + { MP_ROM_QSTR(MP_QSTR_restore), MP_ROM_PTR(&Channel_restore_obj) }, + { MP_ROM_QSTR(MP_QSTR_waveforms), MP_ROM_PTR(&Channel_waveforms_obj) }, + { MP_ROM_QSTR(MP_QSTR_frequency), MP_ROM_PTR(&Channel_frequency_obj) }, + { MP_ROM_QSTR(MP_QSTR_volume), MP_ROM_PTR(&Channel_volume_obj) }, + { MP_ROM_QSTR(MP_QSTR_attack_duration), MP_ROM_PTR(&Channel_attack_duration_obj) }, + { MP_ROM_QSTR(MP_QSTR_decay_duration), MP_ROM_PTR(&Channel_decay_duration_obj) }, + { MP_ROM_QSTR(MP_QSTR_sustain_level), MP_ROM_PTR(&Channel_sustain_level_obj) }, + { MP_ROM_QSTR(MP_QSTR_release_duration), MP_ROM_PTR(&Channel_release_duration_obj) }, + { MP_ROM_QSTR(MP_QSTR_pulse_width), MP_ROM_PTR(&Channel_pulse_width_obj) }, + { MP_ROM_QSTR(MP_QSTR_trigger_attack), MP_ROM_PTR(&Channel_trigger_attack_obj) }, + { MP_ROM_QSTR(MP_QSTR_trigger_release), MP_ROM_PTR(&Channel_trigger_release_obj) }, + { MP_ROM_QSTR(MP_QSTR_play_tone), MP_ROM_PTR(&Channel_play_tone_obj) }, + + { MP_ROM_QSTR(MP_QSTR_NOISE), MP_ROM_INT(128) }, + { MP_ROM_QSTR(MP_QSTR_SQUARE), MP_ROM_INT(64) }, + { MP_ROM_QSTR(MP_QSTR_SAW), MP_ROM_INT(32) }, + { MP_ROM_QSTR(MP_QSTR_TRIANGLE), MP_ROM_INT(16) }, + { MP_ROM_QSTR(MP_QSTR_SINE), MP_ROM_INT(8) }, + { MP_ROM_QSTR(MP_QSTR_WAVE), MP_ROM_INT(1) }, +}; + +STATIC const mp_rom_map_elem_t StellarUnicorn_locals_dict_table[] = { + { MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&StellarUnicorn___del___obj) }, + { MP_ROM_QSTR(MP_QSTR_clear), MP_ROM_PTR(&StellarUnicorn_clear_obj) }, + { MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&StellarUnicorn_update_obj) }, + { MP_ROM_QSTR(MP_QSTR_set_brightness), MP_ROM_PTR(&StellarUnicorn_set_brightness_obj) }, + { MP_ROM_QSTR(MP_QSTR_get_brightness), MP_ROM_PTR(&StellarUnicorn_get_brightness_obj) }, + { MP_ROM_QSTR(MP_QSTR_adjust_brightness), MP_ROM_PTR(&StellarUnicorn_adjust_brightness_obj) }, + { MP_ROM_QSTR(MP_QSTR_set_volume), MP_ROM_PTR(&StellarUnicorn_set_volume_obj) }, + { MP_ROM_QSTR(MP_QSTR_get_volume), MP_ROM_PTR(&StellarUnicorn_get_volume_obj) }, + { MP_ROM_QSTR(MP_QSTR_adjust_volume), MP_ROM_PTR(&StellarUnicorn_adjust_volume_obj) }, + { MP_ROM_QSTR(MP_QSTR_light), MP_ROM_PTR(&StellarUnicorn_light_obj) }, + { MP_ROM_QSTR(MP_QSTR_is_pressed), MP_ROM_PTR(&StellarUnicorn_is_pressed_obj) }, + { MP_ROM_QSTR(MP_QSTR_play_sample), MP_ROM_PTR(&StellarUnicorn_play_sample_obj) }, + { MP_ROM_QSTR(MP_QSTR_play_synth), MP_ROM_PTR(&StellarUnicorn_play_synth_obj) }, + { MP_ROM_QSTR(MP_QSTR_stop_playing), MP_ROM_PTR(&StellarUnicorn_stop_playing_obj) }, + { MP_ROM_QSTR(MP_QSTR_synth_channel), MP_ROM_PTR(&StellarUnicorn_synth_channel_obj) }, + + { MP_ROM_QSTR(MP_QSTR_WIDTH), MP_ROM_INT(16) }, + { MP_ROM_QSTR(MP_QSTR_HEIGHT), MP_ROM_INT(16) }, + + { MP_ROM_QSTR(MP_QSTR_SWITCH_A), MP_ROM_INT(0) }, + { MP_ROM_QSTR(MP_QSTR_SWITCH_B), MP_ROM_INT(1) }, + { MP_ROM_QSTR(MP_QSTR_SWITCH_C), MP_ROM_INT(3) }, + { MP_ROM_QSTR(MP_QSTR_SWITCH_D), MP_ROM_INT(6) }, + { MP_ROM_QSTR(MP_QSTR_SWITCH_SLEEP), MP_ROM_INT(27) }, + { MP_ROM_QSTR(MP_QSTR_SWITCH_VOLUME_UP), MP_ROM_INT(7) }, + { MP_ROM_QSTR(MP_QSTR_SWITCH_VOLUME_DOWN), MP_ROM_INT(8) }, + { MP_ROM_QSTR(MP_QSTR_SWITCH_BRIGHTNESS_UP), MP_ROM_INT(21) }, + { MP_ROM_QSTR(MP_QSTR_SWITCH_BRIGHTNESS_DOWN), MP_ROM_INT(26) }, +}; + +STATIC MP_DEFINE_CONST_DICT(Channel_locals_dict, Channel_locals_dict_table); +STATIC MP_DEFINE_CONST_DICT(StellarUnicorn_locals_dict, StellarUnicorn_locals_dict_table); + +/***** Class Definition *****/ +#ifdef MP_DEFINE_CONST_OBJ_TYPE +MP_DEFINE_CONST_OBJ_TYPE( + Channel_type, + MP_QSTR_Channel, + MP_TYPE_FLAG_NONE, + make_new, Channel_make_new, + print, Channel_print, + locals_dict, (mp_obj_dict_t*)&Channel_locals_dict +); + +MP_DEFINE_CONST_OBJ_TYPE( + StellarUnicorn_type, + MP_QSTR_StellarUnicorn, + MP_TYPE_FLAG_NONE, + make_new, StellarUnicorn_make_new, + print, StellarUnicorn_print, + locals_dict, (mp_obj_dict_t*)&StellarUnicorn_locals_dict +); +#else +const mp_obj_type_t Channel_type = { + { &mp_type_type }, + .name = MP_QSTR_Channel, + .print = Channel_print, + .make_new = Channel_make_new, + .locals_dict = (mp_obj_dict_t*)&Channel_locals_dict, +}; + +const mp_obj_type_t StellarUnicorn_type = { + { &mp_type_type }, + .name = MP_QSTR_StellarUnicorn, + .print = StellarUnicorn_print, + .make_new = StellarUnicorn_make_new, + .locals_dict = (mp_obj_dict_t*)&StellarUnicorn_locals_dict, +}; +#endif + +/***** Globals Table *****/ +STATIC const mp_map_elem_t stellar_globals_table[] = { + { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_stellar) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_Channel), (mp_obj_t)&Channel_type }, + { MP_OBJ_NEW_QSTR(MP_QSTR_StellarUnicorn), (mp_obj_t)&StellarUnicorn_type }, +}; +STATIC MP_DEFINE_CONST_DICT(mp_module_stellar_globals, stellar_globals_table); + +/***** Module Definition *****/ +const mp_obj_module_t stellar_user_cmodule = { + .base = { &mp_type_module }, + .globals = (mp_obj_dict_t*)&mp_module_stellar_globals, +}; +#if MICROPY_VERSION <= 70144 +MP_REGISTER_MODULE(MP_QSTR_stellar, stellar_user_cmodule, MODULE_STELLAR_ENABLED); +#else +MP_REGISTER_MODULE(MP_QSTR_stellar, stellar_user_cmodule); +#endif diff --git a/micropython/modules/stellar_unicorn/stellar_unicorn.cpp b/micropython/modules/stellar_unicorn/stellar_unicorn.cpp new file mode 100644 index 00000000..a6b19daa --- /dev/null +++ b/micropython/modules/stellar_unicorn/stellar_unicorn.cpp @@ -0,0 +1,516 @@ +#include "libraries/stellar_unicorn/stellar_unicorn.hpp" +#include "libraries/pico_graphics/pico_graphics.hpp" +#include "micropython/modules/util.hpp" +#include +#include + + +using namespace pimoroni; + +extern "C" { +#include "stellar_unicorn.h" +#include "micropython/modules/pimoroni_i2c/pimoroni_i2c.h" +#include "py/builtin.h" + + +/********** Channel **********/ + +/***** Variables Struct *****/ +typedef struct _Channel_obj_t { + mp_obj_base_t base; + AudioChannel* channel; +} _Channel_obj_t; + + +/***** Print *****/ +void Channel_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { + (void)kind; //Unused input parameter + //_Channel_obj_t *self = MP_OBJ_TO_PTR2(self_in, _Channel_obj_t); + //AudioChannel* channel = self->channel; + mp_print_str(print, "Channel("); + mp_print_str(print, ")"); +} + + +/***** Constructor *****/ +mp_obj_t Channel_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { + mp_raise_msg(&mp_type_RuntimeError, "Cannot create Channel objects. They can only be accessed from StellarUnicorn.synth_channel()"); + return mp_const_none; +} + + +/***** Destructor ******/ +mp_obj_t Channel___del__(mp_obj_t self_in) { + return mp_const_none; +} + + +/***** Helper Functions *****/ +void set_channel_waveforms(AudioChannel& channel, mp_obj_t in) { + int waveforms = mp_obj_get_int(in); + const int mask = (NOISE | SQUARE | SAW | TRIANGLE | SINE | WAVE); + if(waveforms < 0 || (waveforms & mask) == 0) { + mp_raise_ValueError("waveforms invalid. Expected a combination of NOISE, SQUARE, SAW, TRIANGLE, SINE, or WAVE"); + } + channel.waveforms = (uint8_t)waveforms; +} + +void set_channel_frequency(AudioChannel& channel, mp_obj_t in) { + int freq = mp_obj_get_int(in); + if(freq <= 0 || freq > UINT16_MAX) { + mp_raise_ValueError("frequency out of range. Expected greater than 0Hz to 65535Hz"); + } + channel.frequency = (uint16_t)freq; +} + +void set_channel_volume(AudioChannel& channel, mp_obj_t in) { + float volume = mp_obj_get_float(in); + if(volume < 0.0f || volume > 1.0f) { + mp_raise_ValueError("volume out of range. Expected 0.0 to 1.0"); + } + channel.volume = (uint16_t)(volume * UINT16_MAX); +} + +void set_channel_attack(AudioChannel& channel, mp_obj_t in) { + int attack_ms = (int)(mp_obj_get_float(in) * 1000.0f); + if(attack_ms < 0 || attack_ms > UINT16_MAX) { + mp_raise_ValueError("attack out of range. Expected 0.0s to 65.5s"); + } + channel.attack_ms = MAX(attack_ms, 1); +} + +void set_channel_decay(AudioChannel& channel, mp_obj_t in) { + int decay_ms = (int)(mp_obj_get_float(in) * 1000.0f); + if(decay_ms < 0 || decay_ms > UINT16_MAX) { + mp_raise_ValueError("decay out of range. Expected 0.0s to 65.5s"); + } + channel.decay_ms = MAX(decay_ms, 1); +} + +void set_channel_sustain(AudioChannel& channel, mp_obj_t in) { + float sustain = mp_obj_get_float(in); + if(sustain < 0.0f || sustain > 1.0f) { + mp_raise_ValueError("sustain out of range. Expected 0.0 to 1.0"); + } + channel.sustain = (uint16_t)(sustain * UINT16_MAX); +} + +void set_channel_release(AudioChannel& channel, mp_obj_t in) { + int release_ms = (int)(mp_obj_get_float(in) * 1000.0f); + if(release_ms < 0 || release_ms > UINT16_MAX) { + mp_raise_ValueError("release out of range. Expected 0.0s to 65.5s"); + } + channel.release_ms = MAX(release_ms, 1); +} + +void set_channel_pulse_width(AudioChannel& channel, mp_obj_t in) { + float pulse_width = mp_obj_get_float(in); + if(pulse_width < 0.0f || pulse_width > 1.0f) { + mp_raise_ValueError("pulse_width out of range. Expected 0.0 to 1.0"); + } + channel.pulse_width = (uint16_t)(pulse_width * UINT16_MAX); +} + + +/***** Methods *****/ +mp_obj_t Channel_configure(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { + enum { ARG_self, ARG_waveforms, ARG_frequency, ARG_volume, ARG_attack, ARG_decay, ARG_sustain, ARG_release, ARG_pulse_width }; + static const mp_arg_t allowed_args[] = { + { MP_QSTR_, MP_ARG_REQUIRED | MP_ARG_OBJ }, + { MP_QSTR_waveforms, MP_ARG_OBJ, {.u_obj = mp_const_none} }, + { MP_QSTR_frequency, MP_ARG_OBJ, {.u_obj = mp_const_none} }, + { MP_QSTR_volume, MP_ARG_OBJ, {.u_obj = mp_const_none} }, + { MP_QSTR_attack, MP_ARG_OBJ, {.u_obj = mp_const_none} }, + { MP_QSTR_decay, MP_ARG_OBJ, {.u_obj = mp_const_none} }, + { MP_QSTR_sustain, MP_ARG_OBJ, {.u_obj = mp_const_none} }, + { MP_QSTR_release, MP_ARG_OBJ, {.u_obj = mp_const_none} }, + { MP_QSTR_pulse_width, MP_ARG_OBJ, {.u_obj = mp_const_none} } + }; + + // Parse args. + mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; + mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); + + _Channel_obj_t *self = MP_OBJ_TO_PTR2(args[ARG_self].u_obj, _Channel_obj_t); + + mp_obj_t waveforms = args[ARG_waveforms].u_obj; + if(waveforms != mp_const_none) { + set_channel_waveforms(*self->channel, waveforms); + } + + mp_obj_t frequency = args[ARG_frequency].u_obj; + if(frequency != mp_const_none) { + set_channel_frequency(*self->channel, frequency); + } + + mp_obj_t volume = args[ARG_volume].u_obj; + if(volume != mp_const_none) { + set_channel_volume(*self->channel, volume); + } + + mp_obj_t attack = args[ARG_attack].u_obj; + if(attack != mp_const_none) { + set_channel_attack(*self->channel, attack); + } + + mp_obj_t decay = args[ARG_decay].u_obj; + if(decay != mp_const_none) { + set_channel_decay(*self->channel, decay); + } + + mp_obj_t sustain = args[ARG_sustain].u_obj; + if(sustain != mp_const_none) { + set_channel_sustain(*self->channel, sustain); + } + + mp_obj_t release = args[ARG_release].u_obj; + if(release != mp_const_none) { + set_channel_release(*self->channel, release); + } + + mp_obj_t pulse_width = args[ARG_pulse_width].u_obj; + if(pulse_width != mp_const_none) { + set_channel_pulse_width(*self->channel, pulse_width); + } + + return mp_const_none; +} + +mp_obj_t Channel_restore(mp_obj_t self_in) { + _Channel_obj_t *self = MP_OBJ_TO_PTR2(self_in, _Channel_obj_t); + self->channel->restore(); + return mp_const_none; +} + +mp_obj_t Channel_waveforms(size_t n_args, const mp_obj_t *args) { + _Channel_obj_t *self = MP_OBJ_TO_PTR2(args[0], _Channel_obj_t); + + if(n_args == 1) { + return mp_obj_new_int(self->channel->waveforms); + } + + set_channel_waveforms(*self->channel, args[1]); + return mp_const_none; +} + +mp_obj_t Channel_frequency(size_t n_args, const mp_obj_t *args) { + _Channel_obj_t *self = MP_OBJ_TO_PTR2(args[0], _Channel_obj_t); + + if(n_args == 1) { + return mp_obj_new_int(self->channel->frequency); + } + + set_channel_frequency(*self->channel, args[1]); + return mp_const_none; +} + +mp_obj_t Channel_volume(size_t n_args, const mp_obj_t *args) { + _Channel_obj_t *self = MP_OBJ_TO_PTR2(args[0], _Channel_obj_t); + + if(n_args == 1) { + return mp_obj_new_float((float)self->channel->volume / UINT16_MAX); + } + + set_channel_volume(*self->channel, args[1]); + return mp_const_none; +} + +mp_obj_t Channel_attack_duration(size_t n_args, const mp_obj_t *args) { + _Channel_obj_t *self = MP_OBJ_TO_PTR2(args[0], _Channel_obj_t); + + if(n_args == 1) { + return mp_obj_new_float((float)self->channel->attack_ms / 1000.0f); + } + + set_channel_attack(*self->channel, args[1]); + return mp_const_none; +} + +mp_obj_t Channel_decay_duration(size_t n_args, const mp_obj_t *args) { + _Channel_obj_t *self = MP_OBJ_TO_PTR2(args[0], _Channel_obj_t); + + if(n_args == 1) { + return mp_obj_new_float((float)self->channel->decay_ms / 1000.0f); + } + + set_channel_decay(*self->channel, args[1]); + return mp_const_none; +} + +mp_obj_t Channel_sustain_level(size_t n_args, const mp_obj_t *args) { + _Channel_obj_t *self = MP_OBJ_TO_PTR2(args[0], _Channel_obj_t); + + if(n_args == 1) { + return mp_obj_new_float((float)self->channel->sustain / UINT16_MAX); + } + + set_channel_sustain(*self->channel, args[1]); + return mp_const_none; +} + +mp_obj_t Channel_release_duration(size_t n_args, const mp_obj_t *args) { + _Channel_obj_t *self = MP_OBJ_TO_PTR2(args[0], _Channel_obj_t); + + if(n_args == 1) { + return mp_obj_new_float((float)self->channel->release_ms / 1000.0f); + } + + set_channel_release(*self->channel, args[1]); + return mp_const_none; +} + +mp_obj_t Channel_pulse_width(size_t n_args, const mp_obj_t *args) { + _Channel_obj_t *self = MP_OBJ_TO_PTR2(args[0], _Channel_obj_t); + + if(n_args == 1) { + return mp_obj_new_float((float)self->channel->pulse_width / 0xffff); + } + + set_channel_pulse_width(*self->channel, args[1]); + return mp_const_none; +} + +mp_obj_t Channel_trigger_attack(mp_obj_t self_in) { + _Channel_obj_t *self = MP_OBJ_TO_PTR2(self_in, _Channel_obj_t); + self->channel->trigger_attack(); + + return mp_const_none; +} + +mp_obj_t Channel_trigger_release(mp_obj_t self_in) { + _Channel_obj_t *self = MP_OBJ_TO_PTR2(self_in, _Channel_obj_t); + self->channel->trigger_release(); + + return mp_const_none; +} + +mp_obj_t Channel_play_tone(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { + enum { ARG_self, ARG_freq, ARG_volume, ARG_fade_in, ARG_fade_out }; + static const mp_arg_t allowed_args[] = { + { MP_QSTR_, MP_ARG_REQUIRED | MP_ARG_OBJ }, + { MP_QSTR_frequency, MP_ARG_REQUIRED | MP_ARG_OBJ }, + { MP_QSTR_volume, MP_ARG_OBJ, {.u_obj = mp_const_none} }, + { MP_QSTR_attack, MP_ARG_OBJ, {.u_obj = mp_const_none} }, + { MP_QSTR_release, MP_ARG_OBJ, {.u_obj = mp_const_none} }, + }; + + // Parse args. + mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; + mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); + + _Channel_obj_t *self = MP_OBJ_TO_PTR2(args[ARG_self].u_obj, _Channel_obj_t); + + set_channel_frequency(*self->channel, args[ARG_freq].u_obj); + + mp_obj_t volume = args[ARG_volume].u_obj; + if(volume != mp_const_none) { + set_channel_volume(*self->channel, volume); + } + else { + self->channel->volume = UINT16_MAX; + } + + mp_obj_t attack_ms = args[ARG_fade_in].u_obj; + if(attack_ms != mp_const_none) { + set_channel_attack(*self->channel, attack_ms); + } + else { + self->channel->attack_ms = 1; + } + + mp_obj_t release_ms = args[ARG_fade_out].u_obj; + if(release_ms != mp_const_none) { + set_channel_release(*self->channel, release_ms); + } + else { + self->channel->release_ms = 1; + } + + self->channel->waveforms = Waveform::SINE; + self->channel->decay_ms = 1; + self->channel->sustain = UINT16_MAX; + + self->channel->trigger_attack(); + + return mp_const_none; +} + + +/********** StellarUnicorn **********/ + +/***** Variables Struct *****/ +typedef struct _StellarUnicorn_obj_t { + mp_obj_base_t base; + StellarUnicorn* stellar; +} _StellarUnicorn_obj_t; + +typedef struct _ModPicoGraphics_obj_t { + mp_obj_base_t base; + PicoGraphics *graphics; + DisplayDriver *display; + void *spritedata; + void *buffer; + _PimoroniI2C_obj_t *i2c; + //mp_obj_t scanline_callback; // Not really feasible in MicroPython +} ModPicoGraphics_obj_t; + +/***** Print *****/ +void StellarUnicorn_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { + (void)kind; //Unused input parameter + //_StellarUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _StellarUnicorn_obj_t); + mp_print_str(print, "StellarUnicorn()"); +} + + +/***** Constructor *****/ +mp_obj_t StellarUnicorn_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { + _StellarUnicorn_obj_t *self = nullptr; + + enum { ARG_pio, ARG_sm, ARG_pins, ARG_common_pin, ARG_direction, ARG_counts_per_rev, ARG_count_microsteps, ARG_freq_divider }; + static const mp_arg_t allowed_args[] = { + { MP_QSTR_pio, MP_ARG_INT }, + { MP_QSTR_sm, MP_ARG_INT } + }; + + // Parse args. + mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; + mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); + + int pio_int = args[ARG_pio].u_int; + if(pio_int < 0 || pio_int > (int)NUM_PIOS) { + mp_raise_ValueError("pio out of range. Expected 0 to 1"); + } + //PIO pio = pio_int == 0 ? pio0 : pio1; + + int sm = args[ARG_sm].u_int; + if(sm < 0 || sm > (int)NUM_PIO_STATE_MACHINES) { + mp_raise_ValueError("sm out of range. Expected 0 to 3"); + } + + + StellarUnicorn *stellar = m_new_class(StellarUnicorn); + stellar->init(); + + self = m_new_obj_with_finaliser(_StellarUnicorn_obj_t); + self->base.type = &StellarUnicorn_type; + self->stellar = stellar; + + return MP_OBJ_FROM_PTR(self); +} + + +/***** Destructor ******/ +mp_obj_t StellarUnicorn___del__(mp_obj_t self_in) { + _StellarUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _StellarUnicorn_obj_t); + m_del_class(StellarUnicorn, self->stellar); + return mp_const_none; +} + + +/***** Methods *****/ +extern mp_obj_t StellarUnicorn_clear(mp_obj_t self_in) { + _StellarUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _StellarUnicorn_obj_t); + self->stellar->clear(); + return mp_const_none; +} + +extern mp_obj_t StellarUnicorn_update(mp_obj_t self_in, mp_obj_t graphics_in) { + _StellarUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _StellarUnicorn_obj_t); + ModPicoGraphics_obj_t *picographics = MP_OBJ_TO_PTR2(graphics_in, ModPicoGraphics_obj_t); + + self->stellar->update(picographics->graphics); + + return mp_const_none; +} + +extern mp_obj_t StellarUnicorn_set_brightness(mp_obj_t self_in, mp_obj_t value) { + _StellarUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _StellarUnicorn_obj_t); + self->stellar->set_brightness(mp_obj_get_float(value)); + return mp_const_none; +} + +extern mp_obj_t StellarUnicorn_get_brightness(mp_obj_t self_in) { + _StellarUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _StellarUnicorn_obj_t); + return mp_obj_new_float(self->stellar->get_brightness()); +} + +extern mp_obj_t StellarUnicorn_adjust_brightness(mp_obj_t self_in, mp_obj_t delta) { + _StellarUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _StellarUnicorn_obj_t); + self->stellar->adjust_brightness(mp_obj_get_float(delta)); + return mp_const_none; +} + +extern mp_obj_t StellarUnicorn_set_volume(mp_obj_t self_in, mp_obj_t value) { + _StellarUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _StellarUnicorn_obj_t); + self->stellar->set_volume(mp_obj_get_float(value)); + return mp_const_none; +} + +extern mp_obj_t StellarUnicorn_get_volume(mp_obj_t self_in) { + _StellarUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _StellarUnicorn_obj_t); + return mp_obj_new_float(self->stellar->get_volume()); +} + +extern mp_obj_t StellarUnicorn_adjust_volume(mp_obj_t self_in, mp_obj_t delta) { + _StellarUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _StellarUnicorn_obj_t); + self->stellar->adjust_volume(mp_obj_get_float(delta)); + return mp_const_none; +} + + +extern mp_obj_t StellarUnicorn_light(mp_obj_t self_in) { + _StellarUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _StellarUnicorn_obj_t); + return mp_obj_new_float(self->stellar->light()); +} + +extern mp_obj_t StellarUnicorn_is_pressed(mp_obj_t self_in, mp_obj_t button) { + _StellarUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _StellarUnicorn_obj_t); + return mp_obj_new_bool(self->stellar->is_pressed((uint8_t)mp_obj_get_int(button))); +} + +extern mp_obj_t StellarUnicorn_play_sample(mp_obj_t self_in, mp_obj_t data) { + _StellarUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _StellarUnicorn_obj_t); + + mp_buffer_info_t bufinfo; + mp_get_buffer_raise(data, &bufinfo, MP_BUFFER_RW); + if(bufinfo.len < 1) { + mp_raise_ValueError("Supplied buffer is too small!"); + } + + self->stellar->play_sample((uint8_t *)bufinfo.buf, bufinfo.len); + + return mp_const_none; +} + +extern mp_obj_t StellarUnicorn_play_synth(mp_obj_t self_in) { + _StellarUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _StellarUnicorn_obj_t); + self->stellar->play_synth(); + + return mp_const_none; +} + +extern mp_obj_t StellarUnicorn_stop_playing(mp_obj_t self_in) { + _StellarUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _StellarUnicorn_obj_t); + self->stellar->stop_playing(); + + return mp_const_none; +} + +extern mp_obj_t StellarUnicorn_synth_channel(mp_obj_t self_in, mp_obj_t channel_in) { + _StellarUnicorn_obj_t *self = MP_OBJ_TO_PTR2(self_in, _StellarUnicorn_obj_t); + + // Check that the channel is valid + int channel = mp_obj_get_int(channel_in); + if(channel < 0 || channel >= (int)PicoSynth::CHANNEL_COUNT) { + mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("channel out of range. Expected 0 to %d"), PicoSynth::CHANNEL_COUNT - 1); + } + + // NOTE This seems to work, in that it give MP access to the calibration object + // Could very easily mess up in weird ways once object deletion is considered? + _Channel_obj_t *channel_obj = m_new_obj_with_finaliser(_Channel_obj_t); + channel_obj->base.type = &Channel_type; + channel_obj->channel = &self->stellar->synth_channel(channel); + + return MP_OBJ_FROM_PTR(channel_obj); +} +} diff --git a/micropython/modules/stellar_unicorn/stellar_unicorn.h b/micropython/modules/stellar_unicorn/stellar_unicorn.h new file mode 100644 index 00000000..5d8219cc --- /dev/null +++ b/micropython/modules/stellar_unicorn/stellar_unicorn.h @@ -0,0 +1,50 @@ +// Include MicroPython API. +#include "py/runtime.h" + +/***** Extern of Class Definition *****/ +extern const mp_obj_type_t Channel_type; +extern const mp_obj_type_t StellarUnicorn_type; + +/***** Extern of Class Methods *****/ +extern void Channel_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind); +extern mp_obj_t Channel_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args); +extern mp_obj_t Channel___del__(mp_obj_t self_in); +extern mp_obj_t Channel_configure(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args); +extern mp_obj_t Channel_restore(mp_obj_t self_in); +extern mp_obj_t Channel_waveforms(size_t n_args, const mp_obj_t *args); +extern mp_obj_t Channel_frequency(size_t n_args, const mp_obj_t *args); +extern mp_obj_t Channel_volume(size_t n_args, const mp_obj_t *args); +extern mp_obj_t Channel_attack_duration(size_t n_args, const mp_obj_t *args); +extern mp_obj_t Channel_decay_duration(size_t n_args, const mp_obj_t *args); +extern mp_obj_t Channel_sustain_level(size_t n_args, const mp_obj_t *args); +extern mp_obj_t Channel_release_duration(size_t n_args, const mp_obj_t *args); +extern mp_obj_t Channel_pulse_width(size_t n_args, const mp_obj_t *args); +extern mp_obj_t Channel_trigger_attack(mp_obj_t self_in); +extern mp_obj_t Channel_trigger_release(mp_obj_t self_in); +extern mp_obj_t Channel_play_tone(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args); +extern mp_obj_t Channel_stop_playing(mp_obj_t self_in); + +extern void StellarUnicorn_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind); +extern mp_obj_t StellarUnicorn_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args); +extern mp_obj_t StellarUnicorn___del__(mp_obj_t self_in); +extern mp_obj_t StellarUnicorn_clear(mp_obj_t self_in); + +extern mp_obj_t StellarUnicorn_update(mp_obj_t self_in, mp_obj_t graphics_in); + +extern mp_obj_t StellarUnicorn_set_brightness(mp_obj_t self_in, mp_obj_t value); +extern mp_obj_t StellarUnicorn_get_brightness(mp_obj_t self_in); +extern mp_obj_t StellarUnicorn_adjust_brightness(mp_obj_t self_in, mp_obj_t delta); + +extern mp_obj_t StellarUnicorn_set_volume(mp_obj_t self_in, mp_obj_t value); +extern mp_obj_t StellarUnicorn_get_volume(mp_obj_t self_in); +extern mp_obj_t StellarUnicorn_adjust_volume(mp_obj_t self_in, mp_obj_t delta); + +extern mp_obj_t StellarUnicorn_light(mp_obj_t self_in); + +extern mp_obj_t StellarUnicorn_is_pressed(mp_obj_t self_in, mp_obj_t button); + +extern mp_obj_t StellarUnicorn_play_sample(mp_obj_t self_in, mp_obj_t data); +extern mp_obj_t StellarUnicorn_play_synth(mp_obj_t self_in); +extern mp_obj_t StellarUnicorn_stop_playing(mp_obj_t self_in); + +extern mp_obj_t StellarUnicorn_synth_channel(mp_obj_t self_in, mp_obj_t channel_in); \ No newline at end of file diff --git a/micropython/modules/ulab b/micropython/modules/ulab index ac2e9954..e68bb707 160000 --- a/micropython/modules/ulab +++ b/micropython/modules/ulab @@ -1 +1 @@ -Subproject commit ac2e9954edc185ec212e437e73e4b5e4290de35b +Subproject commit e68bb707b20ee326d84ab75fc9fb35f2e85b87e3 diff --git a/setting-up-micropython.md b/setting-up-micropython.md index afd5dcab..8e510d8f 100644 --- a/setting-up-micropython.md +++ b/setting-up-micropython.md @@ -30,6 +30,7 @@ On the releases page you'll find a bunch of different .uf2 files for use on diff | Badger 2040 W | **pimoroni-badger2040w-vx.x.x-micropython.uf2** or **pimoroni-badger2040w-v0.0.1-micropython-with-badger-os.uf2** | :warning: Badger OS will overwrite your files! | Badger 2040 | **pimoroni-badger2040-vx.x.x-micropython.uf2** or **pimoroni-badger2040-v0.0.1-micropython-with-badger-os.uf2** | :warning: Badger OS will overwrite your files! | Cosmic Unicorn | **pimoroni-picow_cosmic_unicorn-vx.x.x-micropython.uf2** | | +| Stellar Unicorn | **pimoroni-picow_stellar_unicorn-vx.x.x-micropython.uf2** | | ## Entering DFU/bootloader mode From 68f610184f517c5d1afd029547fd27d870a20955 Mon Sep 17 00:00:00 2001 From: ZodiusInfuser Date: Tue, 30 May 2023 11:16:51 +0100 Subject: [PATCH 04/10] Possible fix for stellar pio? --- libraries/stellar_unicorn/stellar_unicorn.cpp | 29 +++++++------------ libraries/stellar_unicorn/stellar_unicorn.hpp | 2 +- libraries/stellar_unicorn/stellar_unicorn.pio | 2 +- 3 files changed, 12 insertions(+), 21 deletions(-) diff --git a/libraries/stellar_unicorn/stellar_unicorn.cpp b/libraries/stellar_unicorn/stellar_unicorn.cpp index 3547315a..d1d8e30d 100644 --- a/libraries/stellar_unicorn/stellar_unicorn.cpp +++ b/libraries/stellar_unicorn/stellar_unicorn.cpp @@ -153,15 +153,15 @@ namespace pimoroni { // find the offset of this row and frame in the bitstream uint8_t *p = &bitstream[row * ROW_BYTES + (BCD_FRAME_BYTES * frame)]; - p[ 0] = 64 - 1; // row pixel count + p[ 0] = 32 - 1; // row pixel count p[ 1] = row; // row select // set the number of bcd ticks for this frame uint32_t bcd_ticks = (1 << frame); - p[68] = (bcd_ticks & 0xff) >> 0; - p[69] = (bcd_ticks & 0xff00) >> 8; - p[70] = (bcd_ticks & 0xff0000) >> 16; - p[71] = (bcd_ticks & 0xff000000) >> 24; + p[36] = (bcd_ticks & 0xff) >> 0; + p[37] = (bcd_ticks & 0xff00) >> 8; + p[38] = (bcd_ticks & 0xff0000) >> 16; + p[39] = (bcd_ticks & 0xff000000) >> 24; } } @@ -463,15 +463,6 @@ namespace pimoroni { x = (WIDTH - 1) - x; y = (HEIGHT - 1) - y; - // map coordinates into display space - if(y < 16) { - // move to top half of display (which is actually the right half of the framebuffer) - x += 32; - }else{ - // remap y coordinate - y -= 16; - } - r = (r * this->brightness) >> 8; g = (g * this->brightness) >> 8; b = (b * this->brightness) >> 8; @@ -482,11 +473,11 @@ namespace pimoroni { // for each row: // for each bcd frame: - // 0: 00111111 // row pixel count (minus one) - // 1 - 64: xxxxxbgr, xxxxxbgr, xxxxxbgr, ... // pixel data - // 65 - 67: xxxxxxxx, xxxxxxxx, xxxxxxxx // dummy bytes to dword align - // 68: xxxxrrrr // row select bits - // 69 - 71: tttttttt, tttttttt, tttttttt // bcd tick count (0-65536) + // 0: 00011111 // row pixel count (minus one) + // 1 - 32: xxxxxbgr, xxxxxbgr, xxxxxbgr, ... // pixel data + // 33 - 35: xxxxxxxx, xxxxxxxx, xxxxxxxx // dummy bytes to dword align + // 36: xxxxrrrr // row select bits + // 37 - 39: tttttttt, tttttttt, tttttttt // bcd tick count (0-65536) // // .. and back to the start diff --git a/libraries/stellar_unicorn/stellar_unicorn.hpp b/libraries/stellar_unicorn/stellar_unicorn.hpp index f5bc4c0f..10671ffb 100644 --- a/libraries/stellar_unicorn/stellar_unicorn.hpp +++ b/libraries/stellar_unicorn/stellar_unicorn.hpp @@ -48,7 +48,7 @@ namespace pimoroni { private: static const uint32_t ROW_COUNT = 16; static const uint32_t BCD_FRAME_COUNT = 14; - static const uint32_t BCD_FRAME_BYTES = 72; + static const uint32_t BCD_FRAME_BYTES = 40; static const uint32_t ROW_BYTES = BCD_FRAME_COUNT * BCD_FRAME_BYTES; static const uint32_t BITSTREAM_LENGTH = (ROW_COUNT * ROW_BYTES); static const uint SYSTEM_FREQ = 22050; diff --git a/libraries/stellar_unicorn/stellar_unicorn.pio b/libraries/stellar_unicorn/stellar_unicorn.pio index 85852244..5b40713c 100644 --- a/libraries/stellar_unicorn/stellar_unicorn.pio +++ b/libraries/stellar_unicorn/stellar_unicorn.pio @@ -20,7 +20,7 @@ ; for each row: ; for each bcd frame: -; 0: 00111111 // row pixel count (minus one) +; 0: 00011111 // row pixel count (minus one) ; 1: xxxxrrrr // row select bits ; 2 - 65: xxxxxbgr, xxxxxbgr, xxxxxbgr, ... // pixel data ; 66 - 67: xxxxxxxx, xxxxxxxx // dummy bytes to dword align From 7aa75e57a4b28814e44437542693c3949c074108 Mon Sep 17 00:00:00 2001 From: ZodiusInfuser Date: Tue, 30 May 2023 12:06:58 +0100 Subject: [PATCH 05/10] Add C++ examples for Stellar, and fix init --- examples/stellar_unicorn/CMakeLists.txt | 84 + examples/stellar_unicorn/audio_samples.cpp | 7847 +++++++++++++++++ .../stellar_eighties_super_computer.cpp | 67 + .../stellar_unicorn/stellar_fire_effect.cpp | 115 + .../stellar_unicorn/stellar_lava_lamp.cpp | 148 + examples/stellar_unicorn/stellar_rainbow.cpp | 184 + .../stellar_unicorn/stellar_rainbow_text.cpp | 102 + .../stellar_unicorn/stellar_scroll_text.cpp | 76 + libraries/stellar_unicorn/stellar_unicorn.cpp | 32 +- libraries/stellar_unicorn/stellar_unicorn.hpp | 2 +- 10 files changed, 8640 insertions(+), 17 deletions(-) create mode 100644 examples/stellar_unicorn/CMakeLists.txt create mode 100644 examples/stellar_unicorn/audio_samples.cpp create mode 100644 examples/stellar_unicorn/stellar_eighties_super_computer.cpp create mode 100644 examples/stellar_unicorn/stellar_fire_effect.cpp create mode 100644 examples/stellar_unicorn/stellar_lava_lamp.cpp create mode 100644 examples/stellar_unicorn/stellar_rainbow.cpp create mode 100644 examples/stellar_unicorn/stellar_rainbow_text.cpp create mode 100644 examples/stellar_unicorn/stellar_scroll_text.cpp diff --git a/examples/stellar_unicorn/CMakeLists.txt b/examples/stellar_unicorn/CMakeLists.txt new file mode 100644 index 00000000..311bbf8f --- /dev/null +++ b/examples/stellar_unicorn/CMakeLists.txt @@ -0,0 +1,84 @@ +add_executable( + stellar_rainbow_text + stellar_rainbow_text.cpp +) + +# Pull in pico libraries that we need +target_link_libraries(stellar_rainbow_text pico_stdlib hardware_pio hardware_adc hardware_dma pico_graphics stellar_unicorn) +pico_enable_stdio_usb(stellar_rainbow_text 1) + +# create map/bin/hex file etc. +pico_add_extra_outputs(stellar_rainbow_text) + + + +add_executable( + stellar_rainbow + stellar_rainbow.cpp +) + +# Pull in pico libraries that we need +target_link_libraries(stellar_rainbow pico_stdlib hardware_pio hardware_adc hardware_dma pico_graphics stellar_unicorn) +pico_enable_stdio_usb(stellar_rainbow 1) + +# create map/bin/hex file etc. +pico_add_extra_outputs(stellar_rainbow) + + + + +add_executable( + stellar_eighties_super_computer + stellar_eighties_super_computer.cpp +) + +# Pull in pico libraries that we need +target_link_libraries(stellar_eighties_super_computer pico_stdlib hardware_pio hardware_adc hardware_dma pico_graphics stellar_unicorn) +pico_enable_stdio_usb(stellar_eighties_super_computer 1) + +# create map/bin/hex file etc. +pico_add_extra_outputs(stellar_eighties_super_computer) + + + + +add_executable( + stellar_fire_effect + stellar_fire_effect.cpp +) + +# Pull in pico libraries that we need +target_link_libraries(stellar_fire_effect pico_stdlib hardware_pio hardware_adc hardware_dma pico_graphics stellar_unicorn) +pico_enable_stdio_usb(stellar_fire_effect 1) + +# create map/bin/hex file etc. +pico_add_extra_outputs(stellar_fire_effect) + + + + +add_executable( + stellar_scroll_text + stellar_scroll_text.cpp +) + +# Pull in pico libraries that we need +target_link_libraries(stellar_scroll_text pico_stdlib hardware_pio hardware_adc hardware_dma pico_graphics stellar_unicorn) +pico_enable_stdio_usb(stellar_scroll_text 1) + +# create map/bin/hex file etc. +pico_add_extra_outputs(stellar_scroll_text) + + +add_executable( + stellar_lava_lamp + stellar_lava_lamp.cpp +) + +# Pull in pico libraries that we need +target_link_libraries(stellar_lava_lamp pico_stdlib hardware_pio hardware_adc hardware_dma pico_graphics stellar_unicorn) +pico_enable_stdio_usb(stellar_lava_lamp 1) + +# create map/bin/hex file etc. +pico_add_extra_outputs(stellar_lava_lamp) + diff --git a/examples/stellar_unicorn/audio_samples.cpp b/examples/stellar_unicorn/audio_samples.cpp new file mode 100644 index 00000000..1ecf5dce --- /dev/null +++ b/examples/stellar_unicorn/audio_samples.cpp @@ -0,0 +1,7847 @@ +#include + +uint8_t right_channel_bin[] = { + 0x52, 0x49, 0x46, 0x46, 0x2e, 0xb5, 0x00, 0x00, 0x57, 0x41, 0x56, 0x45, + 0x66, 0x6d, 0x74, 0x20, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, + 0xc0, 0x5d, 0x00, 0x00, 0x80, 0xbb, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, + 0x64, 0x61, 0x74, 0x61, 0x0a, 0xb5, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, + 0xfe, 0xff, 0xf8, 0xff, 0xfd, 0xff, 0x00, 0x00, 0xfe, 0xff, 0xfd, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xfe, 0xff, + 0xfd, 0xff, 0xfe, 0xff, 0xfb, 0xff, 0xfc, 0xff, 0xfd, 0xff, 0xfc, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0xff, 0xff, 0xfc, 0xff, 0xfe, 0xff, + 0x05, 0x00, 0x02, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x05, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0xff, 0xff, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xff, + 0xfd, 0xff, 0xfb, 0xff, 0xfc, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, + 0xfd, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, + 0xfd, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0xfb, 0xff, + 0xfa, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xfa, 0xff, + 0xfc, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x05, 0x00, 0x04, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x03, 0x00, + 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, + 0x05, 0x00, 0x04, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x06, 0x00, + 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x00, 0x02, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfd, 0xff, + 0xfd, 0xff, 0xfc, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xf9, 0xff, + 0xf9, 0xff, 0xf9, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf7, 0xff, + 0xf7, 0xff, 0xf8, 0xff, 0xf7, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf9, 0xff, + 0xf9, 0xff, 0xf9, 0xff, 0xfa, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xf9, 0xff, + 0xf9, 0xff, 0xf9, 0xff, 0xfa, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xfa, 0xff, + 0xd8, 0xff, 0xb8, 0xff, 0xae, 0xff, 0xa4, 0xff, 0x90, 0xff, 0xb1, 0xff, + 0xc8, 0xff, 0xe0, 0xff, 0x06, 0x00, 0x36, 0x00, 0x5a, 0x00, 0x80, 0x00, + 0xc5, 0x00, 0xdc, 0x00, 0xca, 0x00, 0x13, 0x01, 0x3c, 0x01, 0x28, 0x01, + 0x5d, 0x01, 0x8e, 0x01, 0xd0, 0x01, 0x13, 0x02, 0x69, 0x02, 0x90, 0x02, + 0xcb, 0x02, 0x10, 0x03, 0x1c, 0x03, 0x24, 0x03, 0x4d, 0x03, 0x86, 0x03, + 0x69, 0x03, 0x8c, 0x03, 0x9d, 0x03, 0xb4, 0x03, 0xe6, 0x03, 0xfb, 0x03, + 0xf6, 0x03, 0xf6, 0x03, 0x0c, 0x04, 0x1d, 0x04, 0x5e, 0x04, 0x57, 0x04, + 0x3f, 0x04, 0x3b, 0x04, 0x29, 0x04, 0xba, 0x03, 0x99, 0x03, 0x5f, 0x03, + 0x08, 0x03, 0x95, 0x02, 0x68, 0x02, 0x66, 0x02, 0x6a, 0x02, 0xb4, 0x02, + 0x72, 0x02, 0x98, 0x02, 0x92, 0x02, 0x34, 0x02, 0x13, 0x02, 0x05, 0x02, + 0x82, 0x01, 0x13, 0x01, 0x69, 0x00, 0x01, 0x00, 0xd6, 0xff, 0x09, 0xff, + 0x78, 0xfe, 0xfd, 0xfd, 0x74, 0xfd, 0xfa, 0xfc, 0x94, 0xfc, 0x39, 0xfc, + 0xa1, 0xfb, 0x19, 0xfb, 0x17, 0xfb, 0xd0, 0xfa, 0xad, 0xfa, 0xc1, 0xfa, + 0xb8, 0xfa, 0xb6, 0xfa, 0x27, 0xfb, 0xef, 0xfa, 0xa2, 0xfa, 0xfc, 0xfa, + 0xe0, 0xfa, 0x87, 0xfa, 0x80, 0xfa, 0x4f, 0xfa, 0x32, 0xfa, 0x82, 0xfa, + 0x6b, 0xfa, 0x5b, 0xfa, 0x50, 0xfa, 0x79, 0xfa, 0xa1, 0xfa, 0xfa, 0xfa, + 0x6f, 0xfb, 0xae, 0xfb, 0x1b, 0xfc, 0x7b, 0xfc, 0x18, 0xfd, 0x71, 0xfd, + 0xd4, 0xfd, 0x0b, 0xfe, 0x85, 0xfe, 0x16, 0xff, 0x8b, 0xff, 0x01, 0x00, + 0x39, 0x00, 0xa9, 0x00, 0xfc, 0x00, 0x61, 0x01, 0x7d, 0x01, 0xb1, 0x01, + 0xee, 0x01, 0x1b, 0x02, 0x52, 0x02, 0x96, 0x02, 0xf7, 0x02, 0x2b, 0x03, + 0xbf, 0x03, 0x11, 0x04, 0x57, 0x04, 0x0e, 0x05, 0x6d, 0x05, 0xb3, 0x05, + 0x06, 0x06, 0xff, 0x05, 0x49, 0x06, 0x59, 0x06, 0x7a, 0x06, 0x73, 0x06, + 0x4c, 0x06, 0x58, 0x06, 0xdf, 0x05, 0xaf, 0x05, 0xa0, 0x05, 0x7e, 0x05, + 0x64, 0x05, 0x66, 0x05, 0x5b, 0x05, 0x4b, 0x05, 0x39, 0x05, 0xd5, 0x05, + 0xa0, 0x05, 0xe5, 0x04, 0x33, 0x05, 0xa6, 0x04, 0x72, 0x04, 0x5c, 0x04, + 0xa8, 0x03, 0x3f, 0x03, 0x4c, 0x02, 0xae, 0x01, 0xf8, 0x00, 0xfe, 0xff, + 0x61, 0xff, 0xb0, 0xfe, 0xcb, 0xfd, 0x88, 0xfd, 0x18, 0xfd, 0x60, 0xfc, + 0xdb, 0xfb, 0x2e, 0xfb, 0x94, 0xfa, 0x7b, 0xfa, 0x47, 0xfa, 0x05, 0xfa, + 0xe5, 0xf9, 0xf4, 0xf9, 0x9d, 0xf9, 0x48, 0xf9, 0x27, 0xf9, 0xef, 0xf8, + 0xb8, 0xf8, 0xbb, 0xf8, 0x71, 0xf8, 0x2d, 0xf8, 0x4d, 0xf8, 0x4b, 0xf8, + 0x34, 0xf8, 0x27, 0xf8, 0x42, 0xf8, 0x88, 0xf8, 0xbb, 0xf8, 0xda, 0xf8, + 0x50, 0xf9, 0x93, 0xf9, 0x0e, 0xfa, 0xac, 0xfa, 0x24, 0xfb, 0xbf, 0xfb, + 0x4a, 0xfc, 0xbf, 0xfc, 0x75, 0xfd, 0xf9, 0xfd, 0x63, 0xfe, 0x0e, 0xff, + 0x90, 0xff, 0xf8, 0xff, 0x7a, 0x00, 0xd5, 0x00, 0x0a, 0x01, 0xa0, 0x01, + 0x00, 0x02, 0x6f, 0x02, 0x9e, 0x02, 0xe9, 0x02, 0x6b, 0x03, 0x80, 0x03, + 0xe9, 0x03, 0x54, 0x04, 0xb8, 0x04, 0x53, 0x05, 0xde, 0x05, 0x3c, 0x06, + 0xa1, 0x06, 0x01, 0x07, 0x56, 0x07, 0x81, 0x07, 0xc4, 0x07, 0x15, 0x08, + 0x95, 0x08, 0xc2, 0x08, 0xeb, 0x08, 0x28, 0x09, 0x59, 0x09, 0x86, 0x09, + 0x59, 0x09, 0xcb, 0x08, 0x5d, 0x08, 0xd1, 0x07, 0x3d, 0x07, 0x2b, 0x07, + 0xeb, 0x06, 0xb3, 0x06, 0xc0, 0x06, 0x55, 0x06, 0x0a, 0x06, 0x09, 0x06, + 0x48, 0x05, 0xe8, 0x03, 0x2e, 0x03, 0x59, 0x02, 0x1b, 0x01, 0xfa, 0xff, + 0xfe, 0xfe, 0x1f, 0xfe, 0x81, 0xfd, 0x32, 0xfd, 0x77, 0xfc, 0xf3, 0xfa, + 0x9d, 0xfa, 0x98, 0xfa, 0x37, 0xfa, 0xfc, 0xf9, 0x65, 0xf9, 0x7d, 0xf9, + 0xb8, 0xf9, 0x6c, 0xf9, 0x56, 0xf9, 0xef, 0xf8, 0x2f, 0xf8, 0xcb, 0xf7, + 0x42, 0xf7, 0x98, 0xf6, 0x18, 0xf6, 0xc2, 0xf5, 0x69, 0xf5, 0x2b, 0xf5, + 0x5f, 0xf5, 0xc6, 0xf5, 0xe1, 0xf5, 0x22, 0xf6, 0x98, 0xf6, 0x12, 0xf7, + 0xb7, 0xf7, 0x77, 0xf8, 0x24, 0xf9, 0xcf, 0xf9, 0x9e, 0xfa, 0x9d, 0xfb, + 0x90, 0xfc, 0x1b, 0xfd, 0xa7, 0xfd, 0x32, 0xfe, 0x9d, 0xfe, 0x27, 0xff, + 0xa2, 0xff, 0x27, 0x00, 0x73, 0x00, 0xea, 0x00, 0x9a, 0x01, 0x0a, 0x02, + 0x7e, 0x02, 0xe7, 0x02, 0x8f, 0x03, 0x1e, 0x04, 0xa8, 0x04, 0x76, 0x05, + 0xf1, 0x05, 0x6c, 0x06, 0x34, 0x07, 0x83, 0x07, 0xb0, 0x07, 0x22, 0x08, + 0x74, 0x08, 0xbc, 0x08, 0xc6, 0x08, 0x23, 0x09, 0x4e, 0x09, 0x6c, 0x09, + 0x82, 0x09, 0x6c, 0x09, 0x71, 0x09, 0x43, 0x09, 0x79, 0x09, 0xa7, 0x09, + 0x7f, 0x09, 0x01, 0x0a, 0x23, 0x0a, 0xe5, 0x09, 0xf8, 0x09, 0xb4, 0x09, + 0x2b, 0x09, 0x5f, 0x08, 0xd3, 0x07, 0x2d, 0x07, 0xea, 0x05, 0x18, 0x05, + 0x20, 0x04, 0x88, 0x03, 0xc1, 0x02, 0x52, 0x02, 0xfe, 0x01, 0xc5, 0x00, + 0x46, 0xff, 0x8c, 0xfe, 0x41, 0xfd, 0xa7, 0xfb, 0xee, 0xfa, 0x8e, 0xf9, + 0xa1, 0xf8, 0x61, 0xf8, 0xe4, 0xf7, 0xd0, 0xf7, 0xb1, 0xf7, 0x47, 0xf7, + 0x54, 0xf7, 0x0d, 0xf7, 0xd5, 0xf6, 0xad, 0xf6, 0x26, 0xf6, 0xcf, 0xf5, + 0xe9, 0xf5, 0x08, 0xf6, 0xbd, 0xf5, 0x5e, 0xf5, 0xbd, 0xf5, 0x92, 0xf5, + 0xff, 0xf4, 0x22, 0xf5, 0x28, 0xf5, 0x54, 0xf5, 0xf6, 0xf5, 0x91, 0xf6, + 0x33, 0xf7, 0x38, 0xf8, 0x2b, 0xf9, 0x38, 0xfa, 0x68, 0xfb, 0x2c, 0xfc, + 0x30, 0xfd, 0x04, 0xfe, 0xc4, 0xfe, 0xa6, 0xff, 0x76, 0x00, 0x31, 0x01, + 0xae, 0x01, 0x60, 0x02, 0xe8, 0x02, 0x3e, 0x03, 0xbd, 0x03, 0xf2, 0x03, + 0x4a, 0x04, 0xda, 0x04, 0x60, 0x05, 0x00, 0x06, 0xc8, 0x06, 0x82, 0x07, + 0xff, 0x07, 0xad, 0x08, 0x0a, 0x09, 0xd6, 0x08, 0xee, 0x08, 0xda, 0x08, + 0xa8, 0x08, 0x8c, 0x08, 0xb9, 0x08, 0xc6, 0x08, 0x00, 0x09, 0x60, 0x09, + 0x9d, 0x09, 0x70, 0x09, 0x88, 0x09, 0x6f, 0x09, 0x78, 0x09, 0x7b, 0x09, + 0x49, 0x09, 0x2e, 0x09, 0xb1, 0x08, 0x13, 0x08, 0x17, 0x07, 0x36, 0x06, + 0xca, 0x05, 0x4e, 0x05, 0xb4, 0x04, 0x49, 0x04, 0x15, 0x04, 0x99, 0x03, + 0x5a, 0x03, 0xb0, 0x02, 0xa0, 0x00, 0x6a, 0xff, 0x87, 0xfe, 0xc3, 0xfc, + 0x40, 0xfb, 0x48, 0xfa, 0xe6, 0xf8, 0xf5, 0xf7, 0x69, 0xf7, 0x98, 0xf6, + 0xfd, 0xf5, 0xfe, 0xf5, 0x6e, 0xf5, 0xbd, 0xf5, 0x1f, 0xf6, 0x82, 0xf5, + 0x3e, 0xf6, 0x2e, 0xf6, 0x14, 0xf6, 0xac, 0xf6, 0xa4, 0xf6, 0x44, 0xf6, + 0x66, 0xf6, 0x3f, 0xf6, 0xbd, 0xf5, 0xc9, 0xf5, 0x5a, 0xf5, 0x09, 0xf5, + 0x25, 0xf5, 0x74, 0xf5, 0x8e, 0xf5, 0x24, 0xf6, 0x23, 0xf7, 0x03, 0xf8, + 0x61, 0xf9, 0xd3, 0xfa, 0x41, 0xfc, 0xc9, 0xfd, 0x26, 0xff, 0x7a, 0x00, + 0xb5, 0x01, 0x86, 0x02, 0x6a, 0x03, 0x0a, 0x04, 0x66, 0x04, 0xc9, 0x04, + 0x00, 0x05, 0x3b, 0x05, 0x3a, 0x05, 0x96, 0x05, 0xa4, 0x05, 0xd7, 0x05, + 0x38, 0x06, 0x38, 0x06, 0xcf, 0x06, 0x17, 0x07, 0x25, 0x07, 0x6f, 0x07, + 0xac, 0x07, 0x3f, 0x08, 0xbb, 0x08, 0x03, 0x09, 0x33, 0x09, 0x7e, 0x09, + 0xc3, 0x09, 0xa7, 0x09, 0xa2, 0x09, 0x94, 0x09, 0x7f, 0x09, 0x4a, 0x09, + 0xf0, 0x08, 0x74, 0x08, 0x44, 0x08, 0x72, 0x08, 0x3b, 0x08, 0x0c, 0x08, + 0xe2, 0x07, 0x8d, 0x07, 0x66, 0x07, 0x4b, 0x07, 0xf7, 0x06, 0x66, 0x06, + 0xc3, 0x05, 0x3d, 0x05, 0x7c, 0x04, 0x34, 0x03, 0xd4, 0x01, 0x5a, 0x00, + 0xdd, 0xfe, 0x7b, 0xfd, 0xe8, 0xfb, 0x82, 0xfa, 0xdf, 0xf8, 0xa8, 0xf7, + 0xc5, 0xf6, 0x81, 0xf6, 0xac, 0xf5, 0xdb, 0xf4, 0x1b, 0xf5, 0x78, 0xf4, + 0x6b, 0xf4, 0xe0, 0xf4, 0x96, 0xf4, 0x38, 0xf4, 0x64, 0xf4, 0x78, 0xf4, + 0x86, 0xf4, 0xa4, 0xf4, 0xe4, 0xf4, 0xd1, 0xf4, 0xc2, 0xf4, 0x78, 0xf4, + 0x51, 0xf4, 0x3b, 0xf4, 0xfa, 0xf3, 0x22, 0xf4, 0x4b, 0xf4, 0x64, 0xf4, + 0x52, 0xf5, 0x83, 0xf6, 0x9c, 0xf7, 0xea, 0xf8, 0x81, 0xfa, 0x0b, 0xfc, + 0xb5, 0xfd, 0x85, 0xff, 0xbe, 0x00, 0x55, 0x02, 0x98, 0x03, 0x83, 0x04, + 0x8c, 0x05, 0xf7, 0x05, 0x73, 0x06, 0xca, 0x06, 0x01, 0x07, 0xe5, 0x06, + 0xd5, 0x06, 0x3d, 0x07, 0x7f, 0x07, 0xf2, 0x07, 0xdb, 0x08, 0x5c, 0x09, + 0x8b, 0x09, 0xdb, 0x09, 0x4d, 0x0a, 0x53, 0x0a, 0x23, 0x0a, 0x1e, 0x0a, + 0x0e, 0x0a, 0xfb, 0x09, 0x5a, 0x0a, 0x8f, 0x0a, 0x45, 0x0a, 0x34, 0x0a, + 0x48, 0x0a, 0xdb, 0x09, 0x6a, 0x09, 0x2d, 0x09, 0xc8, 0x08, 0x91, 0x08, + 0x27, 0x08, 0xf5, 0x07, 0x7d, 0x07, 0x7d, 0x07, 0x59, 0x07, 0xf0, 0x06, + 0x9a, 0x06, 0xa4, 0x05, 0x20, 0x05, 0xea, 0x03, 0xbf, 0x02, 0xce, 0x01, + 0x6a, 0x00, 0xc0, 0xff, 0x9e, 0xfe, 0x50, 0xfd, 0xb6, 0xfb, 0x8c, 0xf9, + 0xea, 0xf7, 0x68, 0xf6, 0x7b, 0xf4, 0x7d, 0xf3, 0xcb, 0xf2, 0x75, 0xf2, + 0x80, 0xf2, 0xf1, 0xf2, 0x3e, 0xf3, 0xe5, 0xf3, 0x8c, 0xf4, 0xaf, 0xf4, + 0xb9, 0xf4, 0xc5, 0xf4, 0x91, 0xf4, 0xcf, 0xf4, 0xe6, 0xf4, 0x4d, 0xf4, + 0x1b, 0xf4, 0xfa, 0xf3, 0xa0, 0xf3, 0xaf, 0xf3, 0xc3, 0xf3, 0x98, 0xf3, + 0xcb, 0xf3, 0x29, 0xf4, 0x1e, 0xf5, 0x22, 0xf6, 0x93, 0xf7, 0x15, 0xf9, + 0x9e, 0xfa, 0x81, 0xfc, 0x38, 0xfe, 0x19, 0x00, 0xc9, 0x01, 0x12, 0x03, + 0xae, 0x04, 0xe2, 0x05, 0xc7, 0x06, 0x50, 0x07, 0x9a, 0x07, 0xc6, 0x07, + 0xe2, 0x07, 0x16, 0x08, 0x0a, 0x08, 0x36, 0x08, 0x98, 0x08, 0xf2, 0x08, + 0xca, 0x09, 0x01, 0x0a, 0x01, 0x0a, 0x54, 0x0a, 0x6c, 0x0a, 0x90, 0x0a, + 0xb5, 0x0a, 0xde, 0x0a, 0x90, 0x0a, 0xa7, 0x0a, 0xc5, 0x0a, 0xb3, 0x0a, + 0xbd, 0x0a, 0x71, 0x0a, 0xc8, 0x09, 0x2d, 0x09, 0xd6, 0x08, 0x76, 0x08, + 0x50, 0x08, 0x21, 0x08, 0x40, 0x08, 0x1e, 0x08, 0xda, 0x07, 0xc2, 0x07, + 0xe9, 0x06, 0x3c, 0x06, 0xc1, 0x05, 0xe9, 0x04, 0xd4, 0x03, 0xf0, 0x02, + 0x2a, 0x02, 0xeb, 0x00, 0xde, 0xff, 0xd0, 0xfe, 0xe4, 0xfc, 0x83, 0xfb, + 0xfc, 0xf9, 0xdd, 0xf7, 0xa4, 0xf6, 0xff, 0xf4, 0x83, 0xf4, 0x0a, 0xf4, + 0x8a, 0xf3, 0xc6, 0xf3, 0x88, 0xf3, 0x22, 0xf4, 0x6f, 0xf4, 0x12, 0xf4, + 0x90, 0xf4, 0xa9, 0xf4, 0x5e, 0xf4, 0xf8, 0xf4, 0xe7, 0xf4, 0x79, 0xf4, + 0xa9, 0xf4, 0x4f, 0xf4, 0x18, 0xf4, 0x35, 0xf4, 0x79, 0xf3, 0x45, 0xf3, + 0x98, 0xf3, 0x7d, 0xf3, 0x03, 0xf4, 0x0c, 0xf5, 0x0c, 0xf6, 0x6a, 0xf7, + 0xff, 0xf8, 0xa1, 0xfa, 0x95, 0xfc, 0x4b, 0xfe, 0xe0, 0xff, 0x79, 0x01, + 0xd2, 0x02, 0xfa, 0x03, 0x36, 0x05, 0x25, 0x06, 0x93, 0x06, 0x10, 0x07, + 0x13, 0x07, 0x0b, 0x07, 0x96, 0x07, 0x7b, 0x07, 0x63, 0x07, 0x94, 0x07, + 0xdc, 0x07, 0x4c, 0x08, 0xd4, 0x08, 0x47, 0x09, 0x94, 0x09, 0x1b, 0x0a, + 0x6c, 0x0a, 0x03, 0x0b, 0xc8, 0x0b, 0x99, 0x0b, 0xa2, 0x0b, 0xb2, 0x0b, + 0xfa, 0x0a, 0xb2, 0x0a, 0x09, 0x0a, 0x2c, 0x09, 0x0b, 0x09, 0xaf, 0x08, + 0x7e, 0x08, 0xfb, 0x08, 0xa2, 0x08, 0xa3, 0x08, 0x1d, 0x09, 0xc7, 0x08, + 0x46, 0x08, 0x3e, 0x09, 0x27, 0x09, 0x3b, 0x08, 0x1c, 0x08, 0x6e, 0x06, + 0x67, 0x04, 0xe7, 0x02, 0x08, 0x01, 0xf3, 0xfe, 0xf8, 0xfc, 0x96, 0xfb, + 0x24, 0xfa, 0x42, 0xf8, 0x12, 0xf7, 0xb8, 0xf5, 0x43, 0xf4, 0x3c, 0xf4, + 0xdc, 0xf3, 0x46, 0xf3, 0x75, 0xf3, 0x90, 0xf3, 0x24, 0xf4, 0x9a, 0xf4, + 0x4e, 0xf5, 0x0d, 0xf5, 0x85, 0xf4, 0xf4, 0xf4, 0x5b, 0xf4, 0x46, 0xf4, + 0x2e, 0xf4, 0x3f, 0xf3, 0x57, 0xf3, 0x27, 0xf3, 0x41, 0xf3, 0x97, 0xf3, + 0xf2, 0xf2, 0x60, 0xf3, 0xb9, 0xf3, 0x51, 0xf4, 0xba, 0xf5, 0xc4, 0xf6, + 0x53, 0xf8, 0x18, 0xfa, 0x08, 0xfc, 0xf6, 0xfd, 0xe4, 0xff, 0x6d, 0x01, + 0x90, 0x02, 0xcf, 0x03, 0x97, 0x04, 0x24, 0x05, 0xf4, 0x05, 0x27, 0x06, + 0xae, 0x06, 0x6d, 0x07, 0xdc, 0x07, 0xc9, 0x08, 0x49, 0x09, 0x94, 0x09, + 0x27, 0x0a, 0x75, 0x0a, 0x84, 0x0a, 0x99, 0x0a, 0x56, 0x0b, 0xc5, 0x0a, + 0x82, 0x0a, 0xff, 0x0a, 0xa0, 0x0a, 0xba, 0x0a, 0xb8, 0x0a, 0x65, 0x0a, + 0x36, 0x09, 0xf2, 0x08, 0x86, 0x08, 0x0b, 0x08, 0x12, 0x08, 0xa2, 0x08, + 0x4b, 0x08, 0x6d, 0x08, 0xc7, 0x08, 0xcf, 0x08, 0xa4, 0x08, 0xbe, 0x07, + 0x6e, 0x07, 0xed, 0x05, 0x40, 0x05, 0x35, 0x05, 0xa4, 0x04, 0xee, 0x03, + 0x5b, 0x03, 0x5a, 0x02, 0x69, 0x01, 0x0b, 0x00, 0x42, 0xfe, 0x8d, 0xfc, + 0x7e, 0xfa, 0x8a, 0xf8, 0x36, 0xf7, 0xd6, 0xf5, 0xbd, 0xf4, 0x75, 0xf4, + 0xec, 0xf3, 0x04, 0xf4, 0x68, 0xf4, 0x6f, 0xf4, 0xe6, 0xf4, 0x88, 0xf5, + 0xe6, 0xf5, 0x23, 0xf6, 0xd7, 0xf6, 0x0a, 0xf7, 0xd0, 0xf6, 0xdb, 0xf6, + 0xc0, 0xf6, 0x76, 0xf6, 0x0e, 0xf6, 0x12, 0xf6, 0x70, 0xf5, 0xf9, 0xf4, + 0xd8, 0xf4, 0x8b, 0xf4, 0xc9, 0xf4, 0x78, 0xf5, 0x2c, 0xf6, 0x0e, 0xf7, + 0x9a, 0xf8, 0xbe, 0xf9, 0xa6, 0xfb, 0xcf, 0xfd, 0x5b, 0xff, 0x52, 0x01, + 0x33, 0x03, 0xa0, 0x04, 0xf9, 0x05, 0x3d, 0x07, 0x00, 0x08, 0x71, 0x08, + 0xdd, 0x08, 0x8a, 0x08, 0x13, 0x08, 0xdc, 0x07, 0x45, 0x07, 0xeb, 0x06, + 0x5d, 0x06, 0x1c, 0x06, 0x55, 0x06, 0xab, 0x06, 0x08, 0x08, 0xed, 0x08, + 0xb8, 0x09, 0x9e, 0x0a, 0x07, 0x0b, 0xb0, 0x0b, 0xdc, 0x0b, 0x79, 0x0b, + 0xcf, 0x0a, 0x14, 0x0a, 0x2f, 0x09, 0xb5, 0x08, 0x38, 0x08, 0x31, 0x07, + 0x98, 0x06, 0xff, 0x05, 0xeb, 0x05, 0x6b, 0x06, 0x9d, 0x06, 0xf6, 0x06, + 0x66, 0x07, 0xb3, 0x07, 0x47, 0x08, 0x58, 0x08, 0xd8, 0x07, 0x81, 0x06, + 0x25, 0x05, 0xb7, 0x03, 0x2b, 0x01, 0x7c, 0x00, 0x8c, 0xfe, 0x17, 0xfc, + 0x7a, 0xfb, 0xd0, 0xf8, 0x18, 0xf7, 0x4c, 0xf5, 0x92, 0xf3, 0x65, 0xf2, + 0xec, 0xf0, 0xda, 0xf0, 0xc5, 0xf0, 0x55, 0xf1, 0x55, 0xf2, 0x25, 0xf3, + 0x4b, 0xf4, 0x56, 0xf5, 0x66, 0xf6, 0xd9, 0xf6, 0xf3, 0xf6, 0x3a, 0xf7, + 0x7c, 0xf6, 0xcb, 0xf6, 0x73, 0xf6, 0x83, 0xf5, 0xc7, 0xf5, 0x48, 0xf5, + 0x81, 0xf4, 0x30, 0xf5, 0xda, 0xf4, 0x94, 0xf4, 0x28, 0xf6, 0x9d, 0xf6, + 0xf6, 0xf7, 0x98, 0xfa, 0x19, 0xfc, 0x5c, 0xfe, 0x73, 0x01, 0xf5, 0x02, + 0x0d, 0x05, 0xe9, 0x06, 0x91, 0x07, 0x8b, 0x08, 0x51, 0x09, 0x31, 0x09, + 0x00, 0x09, 0x0d, 0x09, 0x21, 0x08, 0xda, 0x07, 0x7b, 0x07, 0x6e, 0x06, + 0x83, 0x06, 0x3d, 0x06, 0x21, 0x06, 0xf1, 0x06, 0x5a, 0x07, 0xfe, 0x07, + 0x61, 0x08, 0xea, 0x09, 0x33, 0x0a, 0xdc, 0x0a, 0xdd, 0x0b, 0x1f, 0x0b, + 0xef, 0x0b, 0x82, 0x0b, 0x94, 0x0a, 0x66, 0x0a, 0xf4, 0x08, 0x40, 0x08, + 0xd6, 0x07, 0xdf, 0x06, 0x57, 0x06, 0x2d, 0x06, 0x74, 0x06, 0x66, 0x06, + 0x37, 0x07, 0xca, 0x07, 0xd2, 0x07, 0xe1, 0x08, 0xaa, 0x09, 0x59, 0x09, + 0x41, 0x08, 0xcc, 0x06, 0x4f, 0x04, 0xfc, 0x01, 0xb9, 0xff, 0x0e, 0xfd, + 0x5a, 0xfa, 0xf9, 0xf7, 0xb7, 0xf5, 0xa1, 0xf3, 0x37, 0xf2, 0x0f, 0xf1, + 0x16, 0xf0, 0x59, 0xef, 0x5d, 0xef, 0x1e, 0xef, 0xa9, 0xef, 0xe6, 0xf0, + 0x51, 0xf1, 0x4b, 0xf2, 0xbb, 0xf3, 0xd0, 0xf3, 0x0a, 0xf5, 0x71, 0xf5, + 0x34, 0xf5, 0x11, 0xf6, 0x94, 0xf5, 0xf8, 0xf5, 0x00, 0xf6, 0xf6, 0xf5, + 0xf6, 0xf5, 0x0c, 0xf6, 0xb6, 0xf6, 0xcf, 0xf6, 0xd2, 0xf7, 0x99, 0xf8, + 0x90, 0xf9, 0x23, 0xfb, 0x1c, 0xfc, 0x08, 0xfe, 0x35, 0x00, 0x92, 0x01, + 0x18, 0x04, 0xc7, 0x05, 0xfc, 0x06, 0x36, 0x09, 0x1a, 0x0a, 0xe5, 0x0a, + 0x49, 0x0b, 0x99, 0x0b, 0x23, 0x0b, 0xee, 0x0a, 0xce, 0x0a, 0x7a, 0x09, + 0x0f, 0x09, 0xff, 0x07, 0x88, 0x07, 0x2f, 0x07, 0x6f, 0x06, 0x4f, 0x06, + 0x2b, 0x06, 0x9b, 0x06, 0x13, 0x07, 0xe4, 0x07, 0x49, 0x08, 0xad, 0x08, + 0x86, 0x09, 0xfc, 0x09, 0x44, 0x0a, 0x31, 0x0a, 0x53, 0x09, 0xc7, 0x08, + 0x21, 0x0a, 0x7d, 0x09, 0x1d, 0x09, 0xf3, 0x08, 0xbd, 0x07, 0xdc, 0x07, + 0xfa, 0x07, 0x56, 0x07, 0x21, 0x07, 0xb9, 0x06, 0xcc, 0x05, 0xb0, 0x05, + 0x50, 0x04, 0x32, 0x02, 0xa7, 0x01, 0xca, 0xff, 0x6b, 0xff, 0x58, 0xfe, + 0x3d, 0xfc, 0x64, 0xfb, 0xae, 0xf8, 0xc0, 0xf6, 0x3a, 0xf5, 0x9d, 0xf2, + 0x4b, 0xf1, 0xe8, 0xef, 0x05, 0xef, 0x70, 0xef, 0x5e, 0xef, 0xa9, 0xf0, + 0x2b, 0xf1, 0x23, 0xf2, 0x26, 0xf3, 0x8d, 0xf3, 0x9a, 0xf4, 0x4b, 0xf5, + 0x92, 0xf5, 0x59, 0xf6, 0x84, 0xf6, 0x10, 0xf7, 0xc2, 0xf7, 0xc5, 0xf7, + 0x06, 0xf8, 0xdd, 0xf7, 0xed, 0xf7, 0x02, 0xf8, 0x2b, 0xf8, 0xdd, 0xf8, + 0x60, 0xf9, 0x4a, 0xfa, 0xec, 0xfb, 0x32, 0xfd, 0x3d, 0xff, 0x77, 0x01, + 0xfd, 0x02, 0x34, 0x05, 0x8f, 0x06, 0xda, 0x07, 0x2e, 0x09, 0x8c, 0x09, + 0x2a, 0x0a, 0x04, 0x0a, 0x85, 0x09, 0x09, 0x09, 0x63, 0x08, 0xab, 0x07, + 0xf0, 0x06, 0x61, 0x06, 0x3e, 0x06, 0x5f, 0x06, 0x4e, 0x07, 0xd4, 0x07, + 0x71, 0x08, 0x49, 0x09, 0x58, 0x09, 0xf0, 0x09, 0x34, 0x0a, 0x33, 0x0a, + 0x0b, 0x0a, 0x44, 0x0a, 0x0a, 0x0a, 0x32, 0x0a, 0x55, 0x0a, 0x3f, 0x0a, + 0x56, 0x0a, 0xac, 0x09, 0x9e, 0x09, 0xb4, 0x09, 0xfc, 0x08, 0x1d, 0x09, + 0xbf, 0x08, 0x23, 0x08, 0xe2, 0x07, 0xc4, 0x07, 0xe9, 0x06, 0x0b, 0x06, + 0x45, 0x05, 0xaa, 0x03, 0x76, 0x02, 0xcd, 0x00, 0xa1, 0xfe, 0xe1, 0xfc, + 0x84, 0xfa, 0x87, 0xf8, 0xb8, 0xf6, 0x74, 0xf4, 0x55, 0xf2, 0x65, 0xf0, + 0x9a, 0xef, 0x36, 0xee, 0xef, 0xed, 0x57, 0xee, 0x55, 0xee, 0x62, 0xef, + 0x5b, 0xf0, 0xcf, 0xf1, 0xfe, 0xf2, 0x2c, 0xf4, 0x98, 0xf5, 0xc9, 0xf5, + 0x15, 0xf6, 0x4f, 0xf7, 0xf9, 0xf6, 0x0d, 0xf7, 0x09, 0xf8, 0xf5, 0xf6, + 0xcc, 0xf7, 0x26, 0xf8, 0xf3, 0xf7, 0xfc, 0xf8, 0x79, 0xf9, 0x28, 0xfa, + 0x93, 0xfb, 0x38, 0xfd, 0x73, 0xfe, 0xc0, 0x00, 0x6c, 0x02, 0x88, 0x03, + 0xfb, 0x05, 0xef, 0x06, 0x3f, 0x08, 0xa5, 0x09, 0xf4, 0x09, 0x4e, 0x0a, + 0x66, 0x0a, 0x46, 0x0a, 0xb2, 0x09, 0x26, 0x09, 0x12, 0x09, 0xf8, 0x07, + 0x4a, 0x07, 0x70, 0x07, 0x7c, 0x06, 0x96, 0x06, 0xce, 0x06, 0x12, 0x06, + 0x8e, 0x06, 0x0a, 0x07, 0x69, 0x07, 0xba, 0x07, 0x9c, 0x08, 0x6a, 0x08, + 0xf5, 0x08, 0x8f, 0x09, 0xf4, 0x08, 0xee, 0x08, 0x1f, 0x08, 0x54, 0x07, + 0xdc, 0x06, 0x7f, 0x06, 0x28, 0x06, 0x20, 0x06, 0x50, 0x06, 0x83, 0x06, + 0x04, 0x07, 0x46, 0x07, 0x60, 0x07, 0xdf, 0x06, 0x18, 0x06, 0xce, 0x04, + 0x1b, 0x03, 0x9c, 0x00, 0xbb, 0xfe, 0x33, 0xfd, 0x0a, 0xfb, 0x50, 0xf9, + 0x42, 0xf7, 0xde, 0xf4, 0x8b, 0xf2, 0x4d, 0xf1, 0x7d, 0xef, 0x88, 0xee, + 0xd2, 0xed, 0xc9, 0xed, 0xfd, 0xed, 0x05, 0xf0, 0x6f, 0xf1, 0x7c, 0xf2, + 0x0e, 0xf5, 0x7b, 0xf5, 0x47, 0xf7, 0x98, 0xf8, 0xc9, 0xf8, 0x6d, 0xf9, + 0x55, 0xf9, 0x08, 0xf9, 0x20, 0xf9, 0xfd, 0xf8, 0x5d, 0xf9, 0x2a, 0xf9, + 0x6b, 0xf9, 0xcf, 0xf9, 0x03, 0xfa, 0x41, 0xfb, 0xc6, 0xfb, 0x71, 0xfd, + 0xbf, 0xfe, 0x0e, 0x00, 0x5f, 0x02, 0xd9, 0x03, 0xa5, 0x05, 0x69, 0x07, + 0x23, 0x08, 0xef, 0x08, 0x5b, 0x09, 0x22, 0x09, 0xc4, 0x08, 0x61, 0x08, + 0x83, 0x07, 0xcd, 0x06, 0x7d, 0x06, 0x0e, 0x06, 0x93, 0x05, 0xe2, 0x05, + 0xf3, 0x05, 0x14, 0x06, 0xd2, 0x06, 0x12, 0x07, 0xbe, 0x07, 0xca, 0x08, + 0x00, 0x09, 0x94, 0x09, 0xd8, 0x09, 0xa3, 0x09, 0x07, 0x09, 0x79, 0x08, + 0xb5, 0x07, 0xf7, 0x06, 0xb4, 0x06, 0x7c, 0x06, 0x47, 0x06, 0x43, 0x06, + 0x3d, 0x06, 0x71, 0x06, 0x8c, 0x06, 0xbe, 0x06, 0x02, 0x07, 0x0f, 0x06, + 0xd0, 0x05, 0x75, 0x04, 0x29, 0x03, 0xfb, 0x01, 0x6a, 0x00, 0x32, 0xff, + 0xf3, 0xfc, 0xa9, 0xfa, 0x49, 0xf9, 0x7c, 0xf6, 0xfa, 0xf4, 0x57, 0xf3, + 0x05, 0xf1, 0xf3, 0xef, 0xb6, 0xee, 0x89, 0xee, 0xf4, 0xed, 0x94, 0xee, + 0x4e, 0xef, 0xa8, 0xf0, 0xa4, 0xf2, 0x26, 0xf4, 0xbb, 0xf5, 0xed, 0xf6, + 0x6a, 0xf8, 0x2e, 0xf9, 0xf7, 0xf9, 0x75, 0xfa, 0xfe, 0xf9, 0x5d, 0xfa, + 0x54, 0xfa, 0xea, 0xf9, 0xe4, 0xf9, 0x97, 0xf9, 0x9d, 0xf9, 0x03, 0xfa, + 0x05, 0xfb, 0xd6, 0xfb, 0x06, 0xfd, 0xa7, 0xfe, 0x40, 0x00, 0x50, 0x02, + 0x78, 0x04, 0x7b, 0x06, 0xd3, 0x07, 0xec, 0x08, 0xa5, 0x09, 0xa6, 0x09, + 0xd5, 0x09, 0x86, 0x09, 0xa8, 0x08, 0x26, 0x08, 0x5a, 0x07, 0x66, 0x06, + 0x7a, 0x06, 0x0a, 0x06, 0xfc, 0x05, 0x5a, 0x06, 0x56, 0x06, 0xf8, 0x06, + 0xcd, 0x07, 0x92, 0x08, 0x58, 0x09, 0x96, 0x09, 0xfd, 0x09, 0x07, 0x0a, + 0x12, 0x0a, 0x50, 0x0a, 0x89, 0x09, 0xfa, 0x08, 0x16, 0x08, 0x56, 0x07, + 0xe7, 0x06, 0x48, 0x06, 0xcb, 0x05, 0x6f, 0x05, 0x0c, 0x05, 0x3e, 0x05, + 0x65, 0x05, 0x45, 0x05, 0x57, 0x05, 0x99, 0x04, 0x90, 0x03, 0x51, 0x03, + 0x8e, 0x01, 0x0a, 0x00, 0xfb, 0xfe, 0x55, 0xfc, 0xc6, 0xf9, 0xd6, 0xf7, + 0x60, 0xf4, 0x93, 0xf1, 0x51, 0xef, 0x20, 0xec, 0x60, 0xea, 0xa2, 0xe9, + 0xf3, 0xe8, 0x97, 0xe9, 0x8b, 0xeb, 0xec, 0xec, 0x94, 0xef, 0xed, 0xf2, + 0x1d, 0xf5, 0xba, 0xf7, 0xc3, 0xfa, 0x62, 0xfb, 0xfe, 0xfc, 0xa9, 0xfd, + 0xf8, 0xfc, 0xaa, 0xfd, 0xe2, 0xfc, 0xf8, 0xfb, 0xcc, 0xfb, 0xe2, 0xfa, + 0x05, 0xfb, 0x45, 0xfb, 0x1f, 0xfc, 0xd2, 0xfc, 0xfd, 0xfd, 0x2f, 0x00, + 0x9d, 0x01, 0x69, 0x04, 0x7e, 0x06, 0x2f, 0x08, 0x26, 0x0a, 0x3b, 0x0b, + 0xb9, 0x0b, 0xc3, 0x0b, 0x23, 0x0b, 0xd5, 0x09, 0xc4, 0x08, 0x70, 0x07, + 0xa9, 0x05, 0x83, 0x04, 0xde, 0x03, 0x1b, 0x03, 0x75, 0x03, 0xdc, 0x03, + 0x31, 0x04, 0xb2, 0x05, 0x36, 0x07, 0x6e, 0x08, 0x1b, 0x0a, 0x15, 0x0b, + 0xb4, 0x0b, 0xcb, 0x0c, 0xe8, 0x0c, 0x73, 0x0c, 0xe2, 0x0b, 0xe0, 0x0a, + 0x75, 0x09, 0x70, 0x08, 0xfe, 0x06, 0xae, 0x05, 0x36, 0x05, 0x72, 0x04, + 0x6c, 0x04, 0xc4, 0x04, 0x0a, 0x05, 0xb0, 0x05, 0x76, 0x06, 0x0c, 0x06, + 0x83, 0x05, 0x2d, 0x04, 0xab, 0x02, 0xab, 0x00, 0xb8, 0xfd, 0x2b, 0xfb, + 0xa0, 0xf7, 0xfd, 0xf3, 0xe3, 0xf0, 0xd7, 0xec, 0x53, 0xe9, 0xb8, 0xe6, + 0x73, 0xe4, 0xb1, 0xe3, 0xfe, 0xe4, 0xf5, 0xe5, 0xf9, 0xe7, 0xd2, 0xeb, + 0xd0, 0xed, 0xbe, 0xf2, 0x82, 0xf6, 0xdc, 0xf8, 0x13, 0xfc, 0x42, 0xfd, + 0x88, 0xfe, 0xc3, 0xff, 0x24, 0x00, 0x9a, 0xff, 0x12, 0xff, 0x6b, 0xfe, + 0x3f, 0xfd, 0x8c, 0xfd, 0x78, 0xfd, 0x20, 0xfd, 0x41, 0xfe, 0x27, 0xff, + 0xbb, 0x00, 0xba, 0x02, 0x0a, 0x05, 0x08, 0x07, 0x4e, 0x09, 0x8d, 0x0b, + 0x56, 0x0c, 0xf9, 0x0c, 0xdf, 0x0c, 0xd7, 0x0b, 0x8d, 0x0a, 0xf8, 0x08, + 0x3c, 0x06, 0x69, 0x04, 0xf9, 0x02, 0xbc, 0x01, 0xa6, 0x01, 0x89, 0x01, + 0xb1, 0x01, 0xe5, 0x02, 0x36, 0x04, 0xbd, 0x05, 0xa1, 0x07, 0x1a, 0x09, + 0x14, 0x0a, 0xaa, 0x0b, 0xbd, 0x0c, 0x25, 0x0d, 0xe7, 0x0d, 0xe7, 0x0d, + 0x14, 0x0d, 0xea, 0x0c, 0xef, 0x0b, 0x6d, 0x0a, 0x07, 0x0a, 0xc8, 0x08, + 0xae, 0x07, 0xdd, 0x07, 0x7b, 0x07, 0x70, 0x07, 0x01, 0x08, 0xa6, 0x07, + 0xe3, 0x06, 0xff, 0x05, 0xaa, 0x03, 0x41, 0x01, 0xf9, 0xfe, 0xde, 0xfb, + 0x10, 0xf9, 0x2a, 0xf6, 0xa2, 0xf2, 0xc3, 0xef, 0xbf, 0xec, 0xeb, 0xe8, + 0x0e, 0xe6, 0x74, 0xe2, 0xe9, 0xdf, 0xf9, 0xde, 0xc8, 0xde, 0x8f, 0xe0, + 0x07, 0xe3, 0xfe, 0xe6, 0x4d, 0xeb, 0xa7, 0xf0, 0xbf, 0xf5, 0x66, 0xfa, + 0x2b, 0xfe, 0xc7, 0x00, 0x29, 0x02, 0x2d, 0x03, 0xd8, 0x03, 0x20, 0x03, + 0x90, 0x03, 0x90, 0x02, 0xfb, 0x01, 0xc3, 0x01, 0x59, 0x01, 0x25, 0x01, + 0xcc, 0x01, 0x0b, 0x02, 0x40, 0x03, 0x93, 0x04, 0x78, 0x06, 0xa0, 0x08, + 0xc8, 0x0a, 0xd0, 0x0c, 0x8e, 0x0d, 0x22, 0x0e, 0x3b, 0x0d, 0xe5, 0x0b, + 0x1b, 0x0a, 0xa7, 0x07, 0x0f, 0x05, 0xa3, 0x02, 0x7b, 0x00, 0x43, 0xff, + 0xa5, 0xfe, 0xcd, 0xfe, 0x40, 0xff, 0x87, 0x00, 0x35, 0x02, 0x6e, 0x04, + 0x60, 0x07, 0xf1, 0x09, 0xf9, 0x0c, 0xf9, 0x0f, 0xd4, 0x11, 0xe1, 0x13, + 0xc4, 0x14, 0xa2, 0x14, 0x2c, 0x14, 0x7c, 0x12, 0xa2, 0x10, 0x3c, 0x0e, + 0xb5, 0x0b, 0x83, 0x09, 0x17, 0x07, 0x2e, 0x06, 0xbd, 0x04, 0x36, 0x04, + 0x85, 0x04, 0x60, 0x03, 0x93, 0x03, 0x41, 0x02, 0x2a, 0x00, 0xf2, 0xfd, + 0x12, 0xfb, 0xf2, 0xf6, 0x43, 0xf4, 0x70, 0xef, 0x2d, 0xeb, 0x0c, 0xe7, + 0x97, 0xe1, 0x25, 0xde, 0x72, 0xda, 0xd3, 0xd7, 0x05, 0xd8, 0xe7, 0xd7, + 0x33, 0xdb, 0x03, 0xdf, 0x2a, 0xe4, 0xa1, 0xeb, 0x0a, 0xf2, 0x87, 0xf9, + 0xe2, 0xfe, 0x2b, 0x04, 0x59, 0x07, 0x58, 0x0a, 0x63, 0x0b, 0x2a, 0x0b, + 0xd6, 0x09, 0x63, 0x08, 0x91, 0x06, 0xd5, 0x04, 0x22, 0x04, 0x44, 0x02, + 0xf3, 0x01, 0x17, 0x02, 0xc1, 0x02, 0x4e, 0x04, 0xad, 0x06, 0x14, 0x08, + 0x16, 0x0a, 0xca, 0x0b, 0xbb, 0x0c, 0x4c, 0x0d, 0xeb, 0x0c, 0xe9, 0x0a, + 0x45, 0x08, 0x02, 0x06, 0x2c, 0x02, 0xca, 0xff, 0x2b, 0xfd, 0x38, 0xfb, + 0xa0, 0xfa, 0x2f, 0xfb, 0x83, 0xfc, 0xeb, 0xfe, 0x47, 0x02, 0xa8, 0x05, + 0xb5, 0x09, 0xc4, 0x0d, 0x3e, 0x11, 0x0a, 0x15, 0xd2, 0x17, 0xb3, 0x19, + 0x83, 0x1a, 0xe9, 0x19, 0x2f, 0x18, 0x6c, 0x16, 0x16, 0x13, 0xf5, 0x0f, + 0xc8, 0x0c, 0x2e, 0x09, 0x4c, 0x07, 0x8b, 0x05, 0x7a, 0x04, 0x2d, 0x04, + 0x8e, 0x03, 0xf8, 0x02, 0xf5, 0x01, 0x22, 0x00, 0xc1, 0xfd, 0x45, 0xfa, + 0x9d, 0xf6, 0x3d, 0xf2, 0x42, 0xed, 0x6f, 0xe8, 0x56, 0xe2, 0xed, 0xdc, + 0x7b, 0xd7, 0xe6, 0xd2, 0x5e, 0xd0, 0x09, 0xcf, 0x49, 0xd1, 0x29, 0xd4, + 0x02, 0xdb, 0x40, 0xe3, 0x18, 0xec, 0x6d, 0xf6, 0x20, 0xff, 0xb9, 0x06, + 0x5c, 0x0b, 0x2b, 0x10, 0x98, 0x10, 0x94, 0x10, 0x0f, 0x10, 0x72, 0x0c, + 0x7d, 0x0a, 0x03, 0x08, 0xae, 0x05, 0x0c, 0x04, 0xbf, 0x02, 0x55, 0x01, + 0x4b, 0x01, 0x8f, 0x01, 0xfb, 0x02, 0xd8, 0x04, 0x8c, 0x06, 0x18, 0x08, + 0x7d, 0x09, 0x6d, 0x09, 0x2b, 0x09, 0x58, 0x07, 0x64, 0x04, 0x7b, 0x01, + 0xc4, 0xfd, 0x9f, 0xfa, 0x82, 0xf8, 0x1e, 0xf7, 0xf0, 0xf6, 0x26, 0xf8, + 0x57, 0xfa, 0xab, 0xfd, 0x19, 0x02, 0xff, 0x06, 0x09, 0x0c, 0xe1, 0x10, + 0x84, 0x15, 0x29, 0x19, 0x55, 0x1c, 0x08, 0x1e, 0x75, 0x1e, 0x88, 0x1d, + 0x6a, 0x1b, 0xb3, 0x18, 0x5c, 0x15, 0x36, 0x12, 0x38, 0x0e, 0x1e, 0x0b, + 0xa5, 0x08, 0x93, 0x06, 0xcd, 0x05, 0x9d, 0x05, 0x4a, 0x05, 0x66, 0x05, + 0xc7, 0x04, 0x5f, 0x02, 0x6a, 0x00, 0xc5, 0xfb, 0x86, 0xf7, 0x17, 0xf3, + 0x68, 0xec, 0xa0, 0xe6, 0x5b, 0xdf, 0xe9, 0xd7, 0x47, 0xd1, 0xc1, 0xcb, + 0x69, 0xc8, 0xba, 0xc7, 0x92, 0xca, 0x2a, 0xcf, 0x3a, 0xd7, 0x97, 0xe1, + 0x44, 0xed, 0x92, 0xfa, 0x0c, 0x06, 0xba, 0x0f, 0x1b, 0x16, 0xbb, 0x1a, + 0xa9, 0x1c, 0xd8, 0x1c, 0x05, 0x1a, 0x7e, 0x15, 0xed, 0x0f, 0x5c, 0x0a, + 0xad, 0x05, 0x25, 0x01, 0xe9, 0xfc, 0x43, 0xfa, 0xdf, 0xf8, 0x11, 0xf9, + 0x6f, 0xfb, 0x77, 0xfd, 0x19, 0x00, 0xf2, 0x02, 0xd5, 0x04, 0x08, 0x06, + 0xb5, 0x05, 0x3d, 0x03, 0xbe, 0x00, 0x3e, 0xfd, 0x3a, 0xfa, 0xf8, 0xf6, + 0xd9, 0xf4, 0xeb, 0xf3, 0x54, 0xf4, 0x59, 0xf7, 0xb2, 0xfa, 0xa6, 0xff, + 0x95, 0x05, 0xf6, 0x0b, 0x08, 0x13, 0x9a, 0x19, 0x68, 0x1e, 0x47, 0x22, + 0xec, 0x23, 0x5a, 0x24, 0xf0, 0x22, 0x13, 0x1f, 0x8f, 0x1a, 0xcb, 0x14, + 0xff, 0x0f, 0x19, 0x0c, 0xbf, 0x08, 0x76, 0x06, 0x51, 0x05, 0x6a, 0x05, + 0x34, 0x06, 0xb8, 0x07, 0xb2, 0x07, 0x4d, 0x07, 0xad, 0x05, 0x82, 0x02, + 0x7e, 0xfe, 0xc9, 0xf9, 0x0b, 0xf3, 0xd7, 0xec, 0x24, 0xe5, 0x07, 0xdc, + 0xe1, 0xd3, 0xaf, 0xc9, 0x86, 0xc3, 0xd0, 0xbf, 0x20, 0xc0, 0x01, 0xc5, + 0xc0, 0xcc, 0xb9, 0xd8, 0xdf, 0xe6, 0x76, 0xf7, 0x84, 0x06, 0xa1, 0x13, + 0x61, 0x1d, 0x16, 0x23, 0xd0, 0x25, 0xb4, 0x24, 0xfc, 0x20, 0x56, 0x1b, + 0x97, 0x15, 0x89, 0x0e, 0x6b, 0x08, 0x71, 0x01, 0xc7, 0xfb, 0x75, 0xf7, + 0xa2, 0xf4, 0xad, 0xf3, 0xa8, 0xf3, 0x38, 0xf5, 0x11, 0xf8, 0x8d, 0xfc, + 0xb2, 0xff, 0xcb, 0x01, 0x20, 0x02, 0x6c, 0x01, 0x36, 0xff, 0xd9, 0xfc, + 0x2e, 0xf9, 0xfd, 0xf4, 0x97, 0xf3, 0xab, 0xf2, 0xe2, 0xf3, 0x15, 0xf7, + 0xc5, 0xf9, 0xb6, 0xfe, 0xbc, 0x05, 0xf9, 0x0b, 0x40, 0x13, 0xfb, 0x19, + 0x46, 0x1e, 0x47, 0x23, 0x35, 0x26, 0xc8, 0x25, 0x4e, 0x24, 0xbd, 0x20, + 0x6f, 0x1b, 0x28, 0x17, 0x71, 0x12, 0xa5, 0x0c, 0x11, 0x0a, 0x8f, 0x07, + 0xaf, 0x06, 0xed, 0x07, 0x5a, 0x08, 0x27, 0x09, 0x4e, 0x0a, 0x2b, 0x09, + 0xad, 0x07, 0xd3, 0x03, 0x8d, 0xfe, 0x73, 0xf8, 0x9f, 0xf1, 0x28, 0xea, + 0x5d, 0xe2, 0x1c, 0xda, 0xf1, 0xd0, 0x2c, 0xc9, 0x5a, 0xc2, 0x41, 0xbf, + 0x59, 0xbf, 0xb7, 0xc4, 0x85, 0xcd, 0x12, 0xda, 0x9e, 0xea, 0xd1, 0xfb, + 0x7b, 0x0c, 0x97, 0x1b, 0xd8, 0x25, 0x9b, 0x2b, 0x9e, 0x2d, 0x95, 0x2a, + 0xa8, 0x24, 0x2a, 0x1f, 0x0e, 0x17, 0xc9, 0x0e, 0x98, 0x08, 0xc8, 0x00, + 0x6f, 0xfa, 0x1c, 0xf7, 0xc3, 0xf2, 0x3f, 0xf1, 0xd5, 0xf0, 0xa1, 0xf0, + 0x41, 0xf2, 0x1e, 0xf5, 0x88, 0xf7, 0xd0, 0xf9, 0x2a, 0xfb, 0x74, 0xf9, + 0x72, 0xf8, 0x74, 0xf6, 0x6c, 0xf4, 0x4d, 0xf3, 0x22, 0xf3, 0x22, 0xf3, + 0xcc, 0xf5, 0x0a, 0xfa, 0x3d, 0xff, 0x86, 0x06, 0xc9, 0x0d, 0xda, 0x13, + 0xcb, 0x19, 0x15, 0x1f, 0x74, 0x22, 0xba, 0x25, 0x84, 0x26, 0x77, 0x24, + 0x33, 0x21, 0xff, 0x1c, 0x00, 0x18, 0xf0, 0x13, 0x6e, 0x0f, 0x65, 0x0b, + 0xea, 0x08, 0xc5, 0x07, 0x84, 0x08, 0x19, 0x0a, 0xec, 0x0b, 0xb2, 0x0c, + 0x50, 0x0c, 0x3f, 0x0a, 0x00, 0x06, 0x4d, 0x00, 0x24, 0xf9, 0x06, 0xf2, + 0xd0, 0xe9, 0xd0, 0xe1, 0xbc, 0xd9, 0x89, 0xd0, 0x96, 0xc9, 0xad, 0xc3, + 0x63, 0xc0, 0x66, 0xc1, 0xed, 0xc5, 0xf1, 0xce, 0xfa, 0xdb, 0x0f, 0xed, + 0xe3, 0xfd, 0xa8, 0x0f, 0xce, 0x1e, 0xc8, 0x28, 0xb5, 0x2f, 0x32, 0x31, + 0x03, 0x2e, 0xe2, 0x28, 0xbc, 0x20, 0xa3, 0x17, 0xa3, 0x0e, 0x09, 0x06, + 0x38, 0xfe, 0x9d, 0xf7, 0x1c, 0xf2, 0x7b, 0xed, 0x04, 0xec, 0xf1, 0xea, + 0x36, 0xec, 0x92, 0xee, 0x8f, 0xf0, 0xff, 0xf2, 0xa6, 0xf5, 0xbf, 0xf6, + 0x76, 0xf7, 0xe4, 0xf7, 0xf9, 0xf6, 0xd5, 0xf5, 0x9d, 0xf5, 0xb7, 0xf4, + 0x5b, 0xf6, 0x3c, 0xf9, 0x06, 0xfd, 0xb2, 0x01, 0x26, 0x07, 0x9b, 0x0c, + 0xfc, 0x12, 0x39, 0x19, 0x59, 0x1e, 0x03, 0x22, 0xef, 0x23, 0x41, 0x24, + 0xf1, 0x22, 0x24, 0x21, 0x3e, 0x1d, 0xeb, 0x18, 0x58, 0x14, 0xae, 0x0f, + 0xe1, 0x0b, 0x6a, 0x09, 0xdc, 0x07, 0xc2, 0x07, 0xe2, 0x08, 0xa9, 0x09, + 0x38, 0x0a, 0x62, 0x09, 0x90, 0x06, 0x4f, 0x01, 0x5c, 0xfa, 0x00, 0xf2, + 0x43, 0xe9, 0xd1, 0xe1, 0x3f, 0xda, 0x08, 0xd3, 0x01, 0xcc, 0x3f, 0xc6, + 0x5e, 0xc3, 0xcd, 0xc4, 0xf2, 0xca, 0xf9, 0xd3, 0x16, 0xe1, 0x5b, 0xef, + 0xa0, 0x00, 0x3b, 0x12, 0x38, 0x22, 0x6e, 0x2e, 0x3f, 0x33, 0xd1, 0x34, + 0xeb, 0x30, 0x0b, 0x2b, 0x74, 0x23, 0xe8, 0x18, 0x6f, 0x0e, 0xb4, 0x03, + 0x19, 0xfa, 0x7f, 0xf2, 0xe1, 0xec, 0xd4, 0xe8, 0x5a, 0xe6, 0x6b, 0xe5, + 0x9a, 0xe5, 0xa1, 0xe7, 0x3a, 0xeb, 0x8a, 0xee, 0xd9, 0xf1, 0x93, 0xf3, + 0xe3, 0xf2, 0xc1, 0xf3, 0xc0, 0xf3, 0xcd, 0xf4, 0xd5, 0xf6, 0xcd, 0xf7, + 0xd6, 0xf9, 0x9c, 0xfd, 0xe6, 0x02, 0x0d, 0x09, 0x4d, 0x0f, 0xa2, 0x13, + 0xa3, 0x17, 0xd0, 0x1a, 0xfc, 0x1c, 0x7d, 0x1e, 0xd9, 0x1d, 0x9b, 0x1b, + 0x9b, 0x18, 0x2e, 0x15, 0x7a, 0x12, 0x41, 0x10, 0xc2, 0x0e, 0x5a, 0x0d, + 0x6e, 0x0c, 0x27, 0x0c, 0x12, 0x0c, 0xed, 0x0c, 0xbf, 0x0d, 0x61, 0x0e, + 0x64, 0x0c, 0x32, 0x09, 0x2c, 0x03, 0x33, 0xfb, 0x4d, 0xf3, 0x89, 0xeb, + 0x11, 0xe2, 0x1a, 0xda, 0x3e, 0xd2, 0x0e, 0xca, 0xff, 0xc6, 0x79, 0xc5, + 0xbe, 0xc7, 0xac, 0xcf, 0x65, 0xda, 0x86, 0xe9, 0xac, 0xfb, 0xd5, 0x0c, + 0x6e, 0x1e, 0x5b, 0x2b, 0xe0, 0x34, 0x89, 0x38, 0x91, 0x36, 0xcc, 0x31, + 0xbe, 0x28, 0x0b, 0x1f, 0x8d, 0x14, 0x49, 0x09, 0x72, 0xfd, 0x4f, 0xf4, + 0x21, 0xec, 0xa3, 0xe7, 0xdc, 0xe4, 0x7a, 0xe3, 0x47, 0xe3, 0x23, 0xe5, + 0x4a, 0xe8, 0xd7, 0xec, 0x30, 0xf1, 0x06, 0xf4, 0xb7, 0xf5, 0x09, 0xf6, + 0x3e, 0xf5, 0x93, 0xf4, 0x3f, 0xf5, 0xd6, 0xf5, 0x04, 0xf8, 0x47, 0xfa, + 0x50, 0xfd, 0xe4, 0x00, 0x29, 0x07, 0x9b, 0x0c, 0x13, 0x11, 0x1e, 0x15, + 0x7e, 0x16, 0x6b, 0x18, 0x4c, 0x1a, 0x11, 0x1b, 0x09, 0x1a, 0x0c, 0x18, + 0xa0, 0x14, 0x15, 0x12, 0xa9, 0x10, 0xbf, 0x0e, 0xc4, 0x0d, 0xd4, 0x0b, + 0x1d, 0x0b, 0xd3, 0x0a, 0x64, 0x0b, 0xb5, 0x0b, 0x4f, 0x0b, 0x13, 0x09, + 0x10, 0x04, 0x62, 0xfd, 0xd3, 0xf4, 0x86, 0xec, 0x79, 0xe5, 0x8d, 0xde, + 0x60, 0xd7, 0xc0, 0xd0, 0x96, 0xca, 0x4f, 0xc8, 0xff, 0xca, 0x49, 0xd1, + 0xd2, 0xdc, 0x72, 0xea, 0x51, 0xfa, 0x32, 0x0c, 0xd5, 0x1d, 0x04, 0x2d, + 0x55, 0x37, 0x49, 0x3b, 0xcd, 0x38, 0x88, 0x33, 0x43, 0x2b, 0x8e, 0x21, + 0x4a, 0x17, 0xfc, 0x0a, 0x13, 0x00, 0x16, 0xf6, 0x18, 0xee, 0xa2, 0xe8, + 0x44, 0xe5, 0xc5, 0xe2, 0x81, 0xe2, 0x69, 0xe3, 0x82, 0xe4, 0xd6, 0xe7, + 0xef, 0xeb, 0xf3, 0xef, 0x56, 0xf2, 0x36, 0xf3, 0xf9, 0xf2, 0x87, 0xf3, + 0x99, 0xf5, 0x16, 0xf8, 0x92, 0xfa, 0x12, 0xfd, 0x66, 0x00, 0xc3, 0x04, + 0x04, 0x0a, 0x6d, 0x0e, 0xa2, 0x11, 0xa9, 0x13, 0x71, 0x14, 0x3f, 0x14, + 0x65, 0x13, 0x21, 0x12, 0x5b, 0x10, 0x6c, 0x0f, 0x6e, 0x0e, 0xfe, 0x0c, + 0x7a, 0x0c, 0x1f, 0x0c, 0xa5, 0x0c, 0xcb, 0x0d, 0xe3, 0x0d, 0xb1, 0x0d, + 0x3e, 0x0d, 0x79, 0x0c, 0xa7, 0x0a, 0x5d, 0x07, 0xc4, 0x00, 0x88, 0xf8, + 0x0a, 0xf0, 0xe5, 0xe8, 0x9c, 0xe2, 0x5e, 0xdd, 0x97, 0xd6, 0x17, 0xcf, + 0x16, 0xca, 0x61, 0xc8, 0x79, 0xcc, 0x17, 0xd5, 0x79, 0xe2, 0xad, 0xf1, + 0x78, 0x04, 0x48, 0x18, 0x86, 0x2a, 0x80, 0x38, 0xae, 0x3e, 0x3d, 0x3f, + 0x9f, 0x3a, 0xd4, 0x33, 0x68, 0x2a, 0xbe, 0x1f, 0x3c, 0x14, 0xcd, 0x08, + 0xde, 0xfb, 0x59, 0xf0, 0x9e, 0xe6, 0x53, 0xdf, 0x64, 0xdd, 0xc1, 0xdc, + 0xf3, 0xdd, 0x78, 0xe1, 0x14, 0xe6, 0x01, 0xec, 0xf6, 0xf2, 0x4e, 0xf7, + 0x83, 0xf8, 0x31, 0xf9, 0xb3, 0xf8, 0x87, 0xf9, 0x08, 0xfc, 0x1f, 0xfe, + 0xc2, 0xff, 0x0c, 0x02, 0x50, 0x04, 0x19, 0x07, 0x17, 0x0a, 0xa6, 0x0b, + 0x9d, 0x0c, 0x0e, 0x0d, 0x04, 0x0d, 0xe0, 0x0c, 0xad, 0x0c, 0xc5, 0x0c, + 0x59, 0x0b, 0x17, 0x0b, 0x38, 0x0a, 0x5e, 0x0a, 0x02, 0x0c, 0xd7, 0x0d, + 0x77, 0x0f, 0x81, 0x10, 0x93, 0x10, 0x05, 0x10, 0x5d, 0x10, 0x8c, 0x0d, + 0x40, 0x09, 0x61, 0x01, 0x5a, 0xf7, 0x59, 0xeb, 0x56, 0xe2, 0xa9, 0xd9, + 0x7e, 0xd3, 0xa0, 0xcd, 0x1f, 0xc8, 0x5c, 0xc5, 0xd9, 0xc6, 0x7e, 0xcf, + 0x10, 0xdc, 0xfc, 0xec, 0xb1, 0xfe, 0x02, 0x11, 0xb3, 0x23, 0x31, 0x35, + 0x65, 0x40, 0x09, 0x45, 0x96, 0x43, 0x05, 0x3c, 0x92, 0x32, 0x81, 0x26, + 0x6c, 0x18, 0x8d, 0x0a, 0x82, 0xfd, 0x64, 0xf3, 0x00, 0xeb, 0xc6, 0xe4, + 0xd8, 0xe0, 0x0b, 0xdf, 0xd4, 0xe0, 0x3c, 0xe4, 0x78, 0xe8, 0xc6, 0xec, + 0xbc, 0xf1, 0xfd, 0xf5, 0xd0, 0xf8, 0x7e, 0xfa, 0x00, 0xfa, 0x83, 0xf9, + 0x5c, 0xfa, 0xb7, 0xfb, 0x16, 0xfe, 0xd6, 0x00, 0xf6, 0x03, 0xb2, 0x08, + 0x2f, 0x0b, 0x07, 0x0d, 0x75, 0x0d, 0xfd, 0x0b, 0x1e, 0x0b, 0x12, 0x0b, + 0xe2, 0x08, 0x37, 0x08, 0x5f, 0x07, 0x0c, 0x06, 0xb6, 0x06, 0x31, 0x08, + 0x34, 0x0a, 0xda, 0x0c, 0x6f, 0x0f, 0xc7, 0x0f, 0x82, 0x10, 0x3d, 0x10, + 0x11, 0x0e, 0xdb, 0x09, 0xa7, 0x02, 0x26, 0xf8, 0x1b, 0xee, 0xf4, 0xe4, + 0x57, 0xdd, 0x99, 0xd6, 0x20, 0xd0, 0x4a, 0xc8, 0x8c, 0xc3, 0x8c, 0xc3, + 0x52, 0xc9, 0xb5, 0xd6, 0xc5, 0xe8, 0x48, 0xfd, 0xd3, 0x11, 0x55, 0x25, + 0xe2, 0x36, 0xbe, 0x42, 0x5b, 0x47, 0xc1, 0x44, 0xea, 0x3b, 0x42, 0x2f, + 0x9d, 0x23, 0xee, 0x16, 0xc1, 0x09, 0x64, 0xfe, 0x1b, 0xf3, 0x9d, 0xe9, + 0x73, 0xe3, 0x6c, 0xe0, 0xa4, 0xdf, 0x8f, 0xe3, 0x43, 0xe8, 0x78, 0xed, + 0xec, 0xf3, 0x33, 0xf9, 0xd5, 0xfd, 0x38, 0x00, 0xf7, 0xff, 0x47, 0xfe, + 0xc7, 0xfc, 0x86, 0xfc, 0xe2, 0xfd, 0x51, 0xff, 0x3a, 0x01, 0x03, 0x03, + 0x3e, 0x05, 0x11, 0x08, 0xba, 0x09, 0xa9, 0x0a, 0xf7, 0x09, 0x79, 0x09, + 0xc7, 0x07, 0x7c, 0x05, 0xa3, 0x03, 0x71, 0x02, 0x02, 0x02, 0x6c, 0x03, + 0x42, 0x05, 0x4c, 0x08, 0x76, 0x0c, 0xba, 0x0f, 0x2a, 0x12, 0xd7, 0x12, + 0xa4, 0x11, 0x86, 0x0e, 0x27, 0x09, 0xb2, 0x01, 0x4e, 0xf8, 0xc2, 0xee, + 0x0e, 0xe5, 0xa9, 0xdc, 0x1b, 0xd3, 0x63, 0xca, 0xca, 0xc2, 0x0a, 0xc0, + 0xeb, 0xc3, 0xa1, 0xcd, 0x37, 0xdd, 0x6b, 0xf0, 0x3d, 0x04, 0xb0, 0x18, + 0x06, 0x2b, 0x42, 0x38, 0xa5, 0x40, 0x08, 0x44, 0x02, 0x41, 0x01, 0x3a, + 0xb3, 0x2e, 0xe4, 0x20, 0xa4, 0x13, 0x68, 0x05, 0x63, 0xf8, 0xeb, 0xeb, + 0xe1, 0xe2, 0xe7, 0xdc, 0x48, 0xdc, 0x4d, 0xdf, 0xe1, 0xe3, 0x40, 0xeb, + 0xbb, 0xf2, 0x4c, 0xf9, 0xd5, 0xff, 0xe8, 0x03, 0x25, 0x04, 0xa7, 0x04, + 0x09, 0x03, 0xb6, 0x01, 0xc0, 0x02, 0xf9, 0x02, 0x6f, 0x03, 0x6b, 0x04, + 0x6b, 0x04, 0xca, 0x04, 0x7c, 0x06, 0x0a, 0x06, 0xfc, 0x05, 0x71, 0x05, + 0xec, 0x03, 0x40, 0x03, 0xa5, 0x02, 0xf0, 0x00, 0x31, 0x00, 0x9b, 0x00, + 0x7e, 0x02, 0x62, 0x06, 0x61, 0x0a, 0xb4, 0x0e, 0x36, 0x12, 0x23, 0x14, + 0xdd, 0x14, 0x96, 0x12, 0xe1, 0x0d, 0x90, 0x06, 0xd4, 0xfc, 0x3a, 0xf2, + 0x1d, 0xe7, 0x91, 0xdc, 0x6d, 0xd3, 0x04, 0xca, 0xf4, 0xc1, 0x18, 0xbe, + 0x8c, 0xc0, 0xfe, 0xc8, 0x8e, 0xda, 0x90, 0xee, 0x54, 0x02, 0x00, 0x17, + 0x04, 0x28, 0xeb, 0x36, 0x89, 0x41, 0xac, 0x44, 0x18, 0x41, 0x31, 0x39, + 0x20, 0x2d, 0xd6, 0x1e, 0x64, 0x11, 0x4a, 0x02, 0x95, 0xf4, 0x92, 0xe9, + 0x71, 0xdf, 0x27, 0xdb, 0x86, 0xdb, 0xbd, 0xdf, 0x18, 0xe8, 0x50, 0xf1, + 0x9d, 0xf8, 0x77, 0xff, 0x02, 0x05, 0x98, 0x07, 0x2e, 0x09, 0xd8, 0x07, + 0x36, 0x05, 0x5d, 0x02, 0xaa, 0x00, 0xcd, 0xff, 0xa8, 0xff, 0x65, 0xff, + 0xb4, 0xff, 0xee, 0x00, 0xa7, 0x02, 0x8f, 0x05, 0xdf, 0x06, 0xed, 0x06, + 0x4b, 0x06, 0x9b, 0x04, 0x4b, 0x02, 0xe3, 0x00, 0x6a, 0x00, 0x6c, 0x01, + 0xec, 0x04, 0x5a, 0x09, 0xd1, 0x0c, 0x90, 0x0f, 0x40, 0x11, 0xf0, 0x11, + 0x55, 0x12, 0xe3, 0x0f, 0x20, 0x0b, 0x08, 0x03, 0x0f, 0xf9, 0x5b, 0xee, + 0x21, 0xe3, 0xc4, 0xd7, 0x78, 0xce, 0x0e, 0xc6, 0xa0, 0xc0, 0xfb, 0xbf, + 0x41, 0xc6, 0x60, 0xd3, 0x97, 0xe6, 0x30, 0xfc, 0x9c, 0x0f, 0x9c, 0x21, + 0x3a, 0x30, 0xf7, 0x3a, 0x21, 0x41, 0xfe, 0x40, 0x28, 0x3b, 0x51, 0x31, + 0x33, 0x23, 0x36, 0x14, 0x3f, 0x05, 0xdb, 0xf7, 0xba, 0xec, 0xb1, 0xe4, + 0xb6, 0xdf, 0x06, 0xdf, 0xe4, 0xe2, 0x2f, 0xea, 0x67, 0xf2, 0xd7, 0xf9, + 0x08, 0xff, 0x56, 0x02, 0x71, 0x05, 0x0b, 0x07, 0x89, 0x07, 0xa0, 0x06, + 0x05, 0x06, 0x61, 0x04, 0xbe, 0x02, 0x0a, 0x02, 0x7c, 0x00, 0x7d, 0xff, + 0x40, 0x00, 0x3a, 0x01, 0x33, 0x02, 0xa0, 0x04, 0xb8, 0x04, 0x9a, 0x03, + 0x8e, 0x01, 0x57, 0xfe, 0x1f, 0xfd, 0x34, 0xfe, 0x0e, 0x00, 0x4e, 0x03, + 0xb2, 0x06, 0xea, 0x09, 0x63, 0x0d, 0x7a, 0x10, 0x45, 0x11, 0x20, 0x11, + 0xe0, 0x0e, 0xf4, 0x07, 0x1e, 0x00, 0xc7, 0xf7, 0x8a, 0xed, 0xe5, 0xe3, + 0x85, 0xd9, 0x1b, 0xcd, 0x82, 0xc3, 0x82, 0xc0, 0x9a, 0xc3, 0x21, 0xce, + 0xa0, 0xdf, 0x5d, 0xf2, 0x81, 0x06, 0x78, 0x1a, 0xe1, 0x2a, 0x07, 0x37, + 0x5a, 0x3d, 0x2b, 0x3e, 0x08, 0x39, 0x26, 0x31, 0x97, 0x25, 0x6c, 0x17, + 0x67, 0x09, 0x5c, 0xfa, 0xac, 0xec, 0xcb, 0xe3, 0x4f, 0xde, 0xe4, 0xde, + 0x97, 0xe3, 0x43, 0xea, 0x6c, 0xf3, 0xf2, 0xfb, 0x4c, 0x02, 0x26, 0x08, + 0x62, 0x0b, 0xe8, 0x0b, 0xe7, 0x0a, 0x5d, 0x08, 0x2a, 0x05, 0xcf, 0x03, + 0xf0, 0x02, 0xac, 0x01, 0xf9, 0x00, 0x45, 0x00, 0xf9, 0xff, 0x40, 0x01, + 0xce, 0x01, 0x55, 0x01, 0xa0, 0x00, 0xea, 0xfe, 0x6c, 0xfd, 0x6a, 0xfc, + 0xe1, 0xfb, 0x72, 0xfc, 0xe9, 0xfd, 0x89, 0x00, 0x63, 0x04, 0x8f, 0x08, + 0xf8, 0x0c, 0xd4, 0x10, 0xb8, 0x11, 0x52, 0x10, 0x4d, 0x0c, 0x55, 0x06, + 0x3b, 0xff, 0x23, 0xf7, 0xfa, 0xed, 0x67, 0xe2, 0xf8, 0xd5, 0x1c, 0xc9, + 0xc7, 0xc1, 0x27, 0xc0, 0x1a, 0xc9, 0xb5, 0xd6, 0x75, 0xe9, 0x2c, 0xfe, + 0x99, 0x0f, 0x32, 0x22, 0x0c, 0x2f, 0x78, 0x37, 0x3e, 0x3a, 0xa5, 0x38, + 0x48, 0x33, 0xaf, 0x2a, 0x3f, 0x1f, 0xfe, 0x10, 0xc1, 0x01, 0x34, 0xf3, + 0xa4, 0xe7, 0x25, 0xe0, 0x64, 0xde, 0xb5, 0xe1, 0xc3, 0xe8, 0xf6, 0xf1, + 0x40, 0xfb, 0x9b, 0x02, 0x24, 0x07, 0xb6, 0x09, 0x20, 0x0b, 0x39, 0x0a, + 0xef, 0x09, 0xde, 0x08, 0x27, 0x07, 0xce, 0x05, 0xb2, 0x04, 0x4f, 0x03, + 0xb5, 0x01, 0x11, 0x02, 0xc7, 0x01, 0xc1, 0x01, 0x8a, 0x02, 0x8a, 0x01, + 0xfd, 0x00, 0x2b, 0xfe, 0xd2, 0xfa, 0x33, 0xf8, 0xae, 0xf6, 0x99, 0xf7, + 0xfd, 0xfa, 0x0e, 0xff, 0xf9, 0x04, 0xc4, 0x0a, 0x99, 0x10, 0xaf, 0x13, + 0x74, 0x14, 0x73, 0x12, 0x37, 0x0d, 0x64, 0x05, 0x6e, 0xfb, 0x3c, 0xf0, + 0xe7, 0xe2, 0x64, 0xd6, 0xe8, 0xc8, 0x98, 0xbe, 0x38, 0xbc, 0xdf, 0xc2, + 0xac, 0xd1, 0xef, 0xe5, 0xe9, 0xfa, 0x83, 0x0d, 0x3e, 0x1f, 0xa8, 0x2f, + 0x91, 0x39, 0x1a, 0x3d, 0xc2, 0x38, 0xda, 0x30, 0x21, 0x27, 0x50, 0x1b, + 0xe1, 0x0e, 0x1e, 0x01, 0x1c, 0xf5, 0xf3, 0xeb, 0xe5, 0xe4, 0xb3, 0xe2, + 0x3b, 0xe5, 0xbe, 0xeb, 0xcc, 0xf4, 0x32, 0xfd, 0x15, 0x03, 0xbe, 0x07, + 0x1f, 0x0a, 0x30, 0x0b, 0x30, 0x09, 0x06, 0x07, 0xb8, 0x03, 0x87, 0x03, + 0xd7, 0x05, 0x8e, 0x06, 0x4d, 0x07, 0x1d, 0x06, 0xea, 0x03, 0xc4, 0x03, + 0x63, 0x03, 0x08, 0x02, 0x7f, 0x00, 0x98, 0xfd, 0x4c, 0xfa, 0xb9, 0xfa, + 0x64, 0xfa, 0x69, 0xfa, 0xdc, 0xfb, 0xde, 0xfb, 0x47, 0xff, 0xbe, 0x04, + 0xf9, 0x0a, 0x96, 0x10, 0xe2, 0x13, 0x5a, 0x14, 0xb7, 0x12, 0x79, 0x0e, + 0xa2, 0x06, 0xf4, 0xfa, 0xd9, 0xed, 0xeb, 0xde, 0xc4, 0xd1, 0x85, 0xc5, + 0xe7, 0xbc, 0x81, 0xbd, 0xe3, 0xc4, 0x29, 0xd4, 0x54, 0xe8, 0xc0, 0xfc, + 0x18, 0x11, 0x95, 0x21, 0x30, 0x2f, 0x42, 0x36, 0x74, 0x39, 0x2f, 0x36, + 0x24, 0x30, 0xf1, 0x24, 0x5d, 0x1a, 0xac, 0x0d, 0x4d, 0x01, 0x76, 0xf6, + 0x17, 0xed, 0x5c, 0xe6, 0x15, 0xe7, 0x76, 0xea, 0xda, 0xef, 0x00, 0xf9, + 0x1a, 0xfe, 0x22, 0x02, 0xef, 0x04, 0xd4, 0x03, 0x88, 0x02, 0x3f, 0x03, + 0x47, 0x02, 0x9c, 0x02, 0x59, 0x03, 0xa7, 0x04, 0xde, 0x06, 0x72, 0x0a, + 0xdb, 0x0b, 0xe6, 0x0b, 0x56, 0x0b, 0xf4, 0x08, 0x15, 0x07, 0x84, 0x03, + 0x31, 0xff, 0x9d, 0xfa, 0xcf, 0xf6, 0x4f, 0xf4, 0xcc, 0xf3, 0xfa, 0xf4, + 0x37, 0xf8, 0xdd, 0xfc, 0x67, 0x02, 0xa7, 0x09, 0x28, 0x10, 0x30, 0x15, + 0xaa, 0x16, 0x56, 0x14, 0x38, 0x0e, 0x55, 0x06, 0x97, 0xfb, 0xab, 0xed, + 0x71, 0xdf, 0x7a, 0xd0, 0x11, 0xc2, 0x69, 0xbb, 0x24, 0xbb, 0xe6, 0xc4, + 0x6b, 0xd5, 0xac, 0xeb, 0x2c, 0x01, 0x2e, 0x15, 0xc6, 0x25, 0xae, 0x30, + 0xff, 0x36, 0x0f, 0x37, 0xab, 0x33, 0xcf, 0x2c, 0x21, 0x21, 0xb3, 0x13, + 0x5f, 0x05, 0xb1, 0xf9, 0x93, 0xf2, 0x5c, 0xf0, 0x07, 0xef, 0x5f, 0xf0, + 0x97, 0xf2, 0x9c, 0xf5, 0x76, 0xfb, 0x08, 0xfe, 0x0b, 0x01, 0xfc, 0xff, + 0xd1, 0xff, 0xaf, 0x00, 0x1a, 0x01, 0x6d, 0x02, 0x21, 0x03, 0xe6, 0x03, + 0x51, 0x06, 0x4b, 0x0a, 0xa6, 0x0d, 0x13, 0x10, 0x56, 0x10, 0x72, 0x0d, + 0xbe, 0x08, 0x98, 0x03, 0x20, 0xfd, 0xea, 0xf8, 0xd7, 0xf5, 0x27, 0xf4, + 0x65, 0xf4, 0x22, 0xf6, 0xc0, 0xf9, 0xa1, 0xfe, 0xcf, 0x03, 0x34, 0x09, + 0xe3, 0x0d, 0x00, 0x11, 0x0d, 0x13, 0xa3, 0x11, 0x41, 0x0d, 0xa5, 0x05, + 0x45, 0xfc, 0xee, 0xef, 0x1b, 0xe4, 0x5d, 0xd5, 0xb1, 0xc5, 0x76, 0xbd, + 0xa5, 0xbb, 0xdf, 0xc8, 0x53, 0xdb, 0xa8, 0xf1, 0x71, 0x06, 0xa3, 0x16, + 0xc2, 0x23, 0x44, 0x2c, 0x9d, 0x30, 0x2d, 0x2f, 0x56, 0x29, 0x2a, 0x22, + 0xc3, 0x15, 0x4f, 0x0b, 0xb4, 0xfe, 0x42, 0xf7, 0xb0, 0xf3, 0xb0, 0xf2, + 0x70, 0xf6, 0x6f, 0xfa, 0xd1, 0xff, 0x42, 0x04, 0x51, 0x06, 0x2b, 0x06, + 0xca, 0x03, 0xd3, 0xff, 0xf8, 0xfa, 0xf3, 0xf8, 0x32, 0xf8, 0x1f, 0xf9, + 0x0a, 0xfe, 0xfe, 0x01, 0x27, 0x09, 0x84, 0x0f, 0xd7, 0x13, 0xec, 0x15, + 0x17, 0x15, 0x13, 0x11, 0xa5, 0x0c, 0x19, 0x05, 0xd8, 0xfc, 0x98, 0xf6, + 0x10, 0xf2, 0x1b, 0xef, 0xb8, 0xf0, 0x14, 0xf3, 0x37, 0xf7, 0x9b, 0xfd, + 0xbf, 0x03, 0x0c, 0x09, 0xc7, 0x0e, 0x7a, 0x0f, 0x3f, 0x0f, 0x15, 0x0d, + 0xee, 0x06, 0xbe, 0xff, 0xf5, 0xf4, 0x78, 0xe7, 0xb5, 0xd9, 0x45, 0xcb, + 0xa5, 0xc2, 0xab, 0xc0, 0xbb, 0xc7, 0xd4, 0xd9, 0xf9, 0xed, 0x62, 0x04, + 0x8b, 0x16, 0xdc, 0x22, 0xa0, 0x2a, 0xca, 0x2c, 0xf8, 0x28, 0x07, 0x23, + 0x82, 0x1c, 0xfe, 0x12, 0x0a, 0x0c, 0xa6, 0x03, 0x98, 0xfb, 0xf2, 0xf6, + 0x44, 0xf5, 0x06, 0xf7, 0xfc, 0xfa, 0x6c, 0xfe, 0x54, 0x02, 0x46, 0x05, + 0x9b, 0x04, 0xab, 0x02, 0x67, 0x01, 0x04, 0xfc, 0x61, 0xf9, 0x26, 0xf9, + 0x49, 0xfa, 0xa8, 0xff, 0x68, 0x06, 0xad, 0x0b, 0xc9, 0x10, 0x92, 0x14, + 0xc1, 0x15, 0xa1, 0x15, 0xa3, 0x12, 0x7b, 0x0c, 0xf1, 0x04, 0xba, 0xfc, + 0x5b, 0xf5, 0x82, 0xf1, 0xc0, 0xee, 0xb9, 0xee, 0xb5, 0xf1, 0x40, 0xf7, + 0xf6, 0xfc, 0xa9, 0x04, 0x4d, 0x08, 0xd9, 0x0b, 0x17, 0x0c, 0x40, 0x0b, + 0x86, 0x07, 0xf1, 0x04, 0x00, 0xff, 0xe9, 0xf5, 0x47, 0xea, 0x18, 0xdd, + 0x9c, 0xcd, 0x54, 0xc3, 0x2f, 0xc1, 0xab, 0xc7, 0xcc, 0xd8, 0x0f, 0xee, + 0xe0, 0x04, 0xfb, 0x17, 0xd0, 0x24, 0xc5, 0x2a, 0x08, 0x2f, 0xa8, 0x28, + 0x5c, 0x24, 0x30, 0x1c, 0xf7, 0x12, 0x35, 0x0a, 0xd8, 0x02, 0x46, 0xfd, + 0xc4, 0xfa, 0xa5, 0xfc, 0x57, 0xfc, 0xd0, 0xfd, 0x69, 0xfe, 0x35, 0xfe, + 0xc8, 0x00, 0x83, 0xff, 0x0c, 0xfc, 0xd5, 0xf8, 0xe5, 0xf4, 0x7c, 0xf3, + 0x77, 0xf6, 0xb2, 0xf8, 0x4d, 0x00, 0xe0, 0x08, 0x71, 0x11, 0xc5, 0x18, + 0xc5, 0x1d, 0xad, 0x1c, 0x49, 0x18, 0x7b, 0x11, 0x61, 0x09, 0xa0, 0x02, + 0x6e, 0xfc, 0x93, 0xf5, 0x1f, 0xf2, 0xfa, 0xef, 0x1f, 0xf1, 0x0e, 0xf6, + 0x77, 0xfa, 0xec, 0xfe, 0x37, 0x03, 0x19, 0x05, 0xaa, 0x06, 0xb2, 0x05, + 0x89, 0x03, 0xea, 0x01, 0xf0, 0xfc, 0xe6, 0xf7, 0xa8, 0xf0, 0xa0, 0xe5, + 0x7c, 0xd8, 0xdf, 0xcb, 0xc5, 0xc2, 0x13, 0xc5, 0x09, 0xd1, 0x2f, 0xe6, + 0xce, 0xfb, 0x7d, 0x0c, 0xaa, 0x19, 0x8a, 0x22, 0x39, 0x28, 0x00, 0x2c, + 0xf1, 0x24, 0xea, 0x1d, 0x0d, 0x16, 0xd3, 0x0f, 0xda, 0x0d, 0xa9, 0x08, + 0x2d, 0x05, 0x57, 0x01, 0x95, 0xff, 0x53, 0xff, 0x46, 0x00, 0xdc, 0x00, + 0x34, 0xfe, 0xa9, 0xfa, 0x90, 0xf4, 0xc7, 0xf1, 0x95, 0xf0, 0x9b, 0xf1, + 0x12, 0xf5, 0x74, 0xfa, 0x15, 0x01, 0x00, 0x0a, 0x0a, 0x12, 0x54, 0x17, + 0xef, 0x19, 0xf1, 0x17, 0x59, 0x12, 0x97, 0x0d, 0xa0, 0x07, 0xc5, 0x03, + 0x53, 0x00, 0x2f, 0xfd, 0x4b, 0xfa, 0xb4, 0xf8, 0x67, 0xf8, 0x32, 0xf8, + 0xf6, 0xfa, 0x04, 0xfc, 0xfa, 0xfd, 0x1d, 0x01, 0xa7, 0x02, 0x01, 0x04, + 0xa6, 0x03, 0xa9, 0x02, 0x86, 0x01, 0x75, 0xff, 0x04, 0xf9, 0xff, 0xf0, + 0x1c, 0xe3, 0xc4, 0xd4, 0x09, 0xc7, 0x64, 0xc0, 0x7f, 0xc4, 0x34, 0xd2, + 0xa6, 0xe8, 0x5f, 0xfd, 0x55, 0x0d, 0x31, 0x1a, 0x01, 0x22, 0x4e, 0x29, + 0xbe, 0x2a, 0x6d, 0x27, 0x9e, 0x1e, 0x96, 0x17, 0x76, 0x11, 0x3a, 0x0b, + 0xc5, 0x09, 0xb9, 0x04, 0xc5, 0x03, 0x80, 0x03, 0x82, 0x02, 0x6a, 0x02, + 0xea, 0xfe, 0x34, 0xfa, 0xc5, 0xf5, 0xdd, 0xf0, 0xb9, 0xed, 0x6c, 0xed, + 0x0a, 0xef, 0xeb, 0xf0, 0xee, 0xf8, 0xea, 0xff, 0x69, 0x0a, 0xcc, 0x15, + 0xf4, 0x1b, 0x34, 0x1d, 0x24, 0x1d, 0xb2, 0x16, 0x8f, 0x0f, 0xa6, 0x0b, + 0x42, 0x04, 0x21, 0x01, 0x96, 0xfe, 0xd4, 0xfb, 0x90, 0xfa, 0xe6, 0xfa, + 0x8e, 0xf9, 0x8d, 0xfa, 0x21, 0xfb, 0x1e, 0xfb, 0x08, 0xfd, 0x92, 0xfe, + 0x4e, 0x00, 0x78, 0x04, 0x35, 0x05, 0xc5, 0x05, 0x5b, 0x02, 0x5a, 0xfc, + 0x9c, 0xf0, 0x35, 0xe1, 0x52, 0xd0, 0x06, 0xc3, 0x23, 0xc0, 0xd3, 0xc8, + 0x69, 0xdc, 0xbc, 0xf0, 0xbc, 0x03, 0x3a, 0x12, 0xa9, 0x1b, 0xcb, 0x1e, + 0x91, 0x1f, 0x30, 0x1b, 0x62, 0x16, 0x1a, 0x14, 0x40, 0x13, 0x1d, 0x13, + 0x66, 0x11, 0x41, 0x0f, 0x55, 0x0e, 0x86, 0x0d, 0x67, 0x0c, 0xc4, 0x07, + 0x1e, 0x04, 0x4b, 0xff, 0x11, 0xfa, 0x10, 0xf5, 0xbf, 0xee, 0x1a, 0xec, + 0xd4, 0xec, 0x01, 0xf1, 0xdc, 0xf7, 0x7a, 0xfe, 0x12, 0x06, 0x11, 0x09, + 0x49, 0x0d, 0xf7, 0x0d, 0xca, 0x0d, 0x43, 0x0c, 0x49, 0x0a, 0x25, 0x08, + 0x30, 0x08, 0xf2, 0x08, 0x1b, 0x09, 0xac, 0x07, 0x73, 0x04, 0x1f, 0x03, + 0xff, 0x00, 0xc1, 0xff, 0xc0, 0xfd, 0x78, 0xfb, 0x51, 0xfa, 0xb8, 0xfb, + 0x7f, 0xfe, 0x01, 0x03, 0x77, 0x07, 0x15, 0x07, 0x30, 0x05, 0x9a, 0xff, + 0x1a, 0xf7, 0xab, 0xeb, 0x67, 0xdd, 0x26, 0xce, 0xcb, 0xc4, 0x2f, 0xc3, + 0x54, 0xd0, 0x18, 0xe1, 0x7b, 0xf5, 0x3d, 0x04, 0xa4, 0x0a, 0x1b, 0x10, + 0x48, 0x14, 0x5c, 0x17, 0xc2, 0x17, 0x61, 0x13, 0x8b, 0x0e, 0x9d, 0x0d, + 0xe7, 0x10, 0x3f, 0x14, 0x73, 0x16, 0xcd, 0x16, 0xa4, 0x12, 0x1e, 0x13, + 0xaf, 0x10, 0xae, 0x0a, 0x13, 0x04, 0xc4, 0xf9, 0x02, 0xf1, 0x0a, 0xed, + 0x3e, 0xee, 0xf3, 0xf1, 0x4b, 0xf8, 0x39, 0xfb, 0xec, 0xfc, 0x64, 0xff, + 0xef, 0xff, 0x22, 0x03, 0x1f, 0x06, 0x6f, 0x06, 0xb1, 0x05, 0x48, 0x05, + 0x4a, 0x04, 0xe0, 0x05, 0xad, 0x09, 0x68, 0x0a, 0xda, 0x0a, 0x7a, 0x0a, + 0xf5, 0x04, 0x0b, 0x03, 0xa2, 0xff, 0x1c, 0xff, 0x29, 0xff, 0x4b, 0xff, + 0xe5, 0xff, 0x52, 0x01, 0x08, 0x05, 0xb1, 0x06, 0xb8, 0x07, 0x07, 0x06, + 0x88, 0x00, 0x64, 0xf9, 0xdc, 0xf1, 0xec, 0xe5, 0xfe, 0xd7, 0xec, 0xc6, + 0x22, 0xc3, 0x7d, 0xc9, 0x39, 0xd9, 0x6e, 0xf2, 0xea, 0xfd, 0x30, 0x0a, + 0x6e, 0x0b, 0x26, 0x0c, 0xa8, 0x09, 0xf4, 0x07, 0xe8, 0x05, 0x8a, 0x07, + 0x7f, 0x0e, 0xa5, 0x12, 0x18, 0x19, 0xf7, 0x1d, 0x75, 0x1c, 0x0d, 0x1d, + 0xc5, 0x17, 0xef, 0x11, 0x95, 0x0b, 0xae, 0x03, 0x56, 0xfc, 0x10, 0xf6, + 0x01, 0xf2, 0x45, 0xf3, 0xc9, 0xf8, 0x06, 0xfd, 0x06, 0x00, 0x24, 0xfe, + 0x02, 0xfb, 0x8f, 0xfa, 0xae, 0xf8, 0x65, 0xf8, 0xf2, 0xf9, 0xd6, 0xfb, + 0xba, 0xfe, 0x77, 0x04, 0x02, 0x06, 0xba, 0x08, 0x6a, 0x0a, 0x65, 0x0b, + 0x6c, 0x0b, 0x3a, 0x09, 0x15, 0x06, 0x42, 0x03, 0xe5, 0xff, 0xf9, 0xff, + 0xf2, 0x01, 0xde, 0x03, 0x60, 0x08, 0x58, 0x0a, 0xc3, 0x08, 0x90, 0x06, + 0x59, 0x05, 0xb9, 0x02, 0x48, 0x04, 0x24, 0x01, 0xfb, 0xf9, 0xf5, 0xef, + 0x23, 0xe1, 0xaa, 0xcf, 0x80, 0xc7, 0x3e, 0xc4, 0xa0, 0xcf, 0x84, 0xe4, + 0xb8, 0xf8, 0x5b, 0x05, 0x84, 0x07, 0xf2, 0x04, 0xb2, 0xff, 0x1b, 0xfe, + 0x92, 0x01, 0x3b, 0x02, 0xee, 0x0b, 0x38, 0x12, 0x78, 0x1a, 0x8f, 0x20, + 0xa6, 0x21, 0x60, 0x21, 0x39, 0x1c, 0xb0, 0x14, 0x8f, 0x0c, 0x1f, 0x02, + 0xbd, 0xfd, 0x3b, 0xfd, 0x70, 0xfb, 0x9a, 0xfc, 0xd3, 0xfd, 0x7d, 0xfe, + 0x96, 0x01, 0x37, 0xff, 0x75, 0xfa, 0xcc, 0xf4, 0x01, 0xf3, 0x26, 0xf5, + 0xd9, 0xf8, 0xe1, 0xfb, 0xbe, 0xfc, 0x40, 0xff, 0x43, 0x01, 0xe3, 0x05, + 0x50, 0x08, 0xfc, 0x08, 0xde, 0x07, 0xba, 0x03, 0x8d, 0x01, 0xd4, 0xff, + 0x87, 0xfd, 0x6d, 0x00, 0x0a, 0x03, 0x8c, 0x05, 0x21, 0x07, 0x3c, 0x07, + 0x40, 0x05, 0x6e, 0x05, 0x45, 0x03, 0x59, 0x02, 0x96, 0x02, 0xb0, 0x00, + 0x35, 0xff, 0x29, 0xfb, 0xeb, 0xed, 0xfd, 0xde, 0xe8, 0xd0, 0x0d, 0xc9, + 0x5d, 0xd3, 0xf5, 0xe6, 0xc1, 0xfa, 0x51, 0x07, 0x19, 0x07, 0x55, 0xfe, + 0xa3, 0xfa, 0xcf, 0xf4, 0x05, 0xf8, 0x63, 0xfe, 0x1b, 0x06, 0xa5, 0x10, + 0x1f, 0x17, 0xb1, 0x17, 0x5e, 0x18, 0x12, 0x1a, 0x07, 0x19, 0xaa, 0x17, + 0x7f, 0x12, 0xe8, 0x0b, 0x3b, 0x07, 0xdd, 0x03, 0xe1, 0x00, 0x5a, 0x03, + 0xe2, 0x04, 0xef, 0x05, 0xc7, 0x05, 0xbc, 0x01, 0xc0, 0xfb, 0x68, 0xf6, + 0x07, 0xf4, 0x18, 0xf3, 0x58, 0xf5, 0xb7, 0xf9, 0x8f, 0xfc, 0x5c, 0x00, + 0xe9, 0xfe, 0xea, 0xfe, 0xe5, 0xfd, 0xea, 0xfc, 0xe7, 0xfa, 0xde, 0xfa, + 0x45, 0xfb, 0x57, 0xfd, 0x71, 0x01, 0xe6, 0x03, 0x08, 0x09, 0x99, 0x0c, + 0xe9, 0x0c, 0x11, 0x0b, 0x5e, 0x07, 0xc7, 0x03, 0xd1, 0x02, 0x69, 0x03, + 0xc8, 0x04, 0xc1, 0x07, 0x78, 0x07, 0x72, 0x03, 0xa7, 0xfb, 0x27, 0xef, + 0x97, 0xe4, 0xde, 0xd6, 0xd8, 0xcf, 0x4d, 0xd3, 0x26, 0xdf, 0x9e, 0xf5, + 0x09, 0x05, 0xe2, 0x06, 0x7c, 0xfe, 0x3a, 0xf3, 0xc5, 0xed, 0x65, 0xf4, + 0x74, 0xfb, 0x2e, 0x04, 0xcb, 0x08, 0xb1, 0x0b, 0xdd, 0x10, 0x6f, 0x16, + 0x69, 0x1a, 0x94, 0x17, 0x89, 0x15, 0x3e, 0x10, 0xb1, 0x0d, 0x45, 0x0d, + 0x67, 0x0b, 0xb3, 0x0b, 0xde, 0x0b, 0xa2, 0x0a, 0xd4, 0x09, 0x5d, 0x07, + 0xaf, 0x04, 0x1a, 0xff, 0xe5, 0xf9, 0x94, 0xf6, 0xcd, 0xf5, 0x38, 0xfa, + 0x63, 0xfc, 0x17, 0xfc, 0xe7, 0xf8, 0xc9, 0xf5, 0x96, 0xf3, 0xe3, 0xf5, + 0x48, 0xf3, 0x3b, 0xf4, 0xba, 0xf8, 0xb0, 0xfb, 0x6b, 0xff, 0x4a, 0x02, + 0x97, 0x03, 0x94, 0x06, 0x89, 0x0b, 0xbc, 0x09, 0xef, 0x09, 0x18, 0x07, + 0xb9, 0x02, 0x5f, 0x03, 0x0f, 0x05, 0x02, 0x06, 0x91, 0x0b, 0x0d, 0x0c, + 0xf5, 0x0a, 0x3f, 0x02, 0x4d, 0xf9, 0x09, 0xeb, 0x7e, 0xde, 0xfd, 0xd7, + 0x4d, 0xd5, 0x9b, 0xe0, 0xa0, 0xf4, 0xa4, 0x04, 0xbc, 0x09, 0xa0, 0x03, + 0xdc, 0xf2, 0xf1, 0xe7, 0x41, 0xe9, 0x21, 0xef, 0x41, 0xfb, 0x5c, 0x05, + 0x36, 0x09, 0xeb, 0x10, 0x49, 0x13, 0xbb, 0x14, 0xad, 0x16, 0xf3, 0x14, + 0x87, 0x0f, 0x22, 0x0f, 0x3e, 0x0a, 0x63, 0x09, 0xdc, 0x0b, 0xf0, 0x0d, + 0x3f, 0x12, 0xbc, 0x14, 0xc1, 0x10, 0x0a, 0x0a, 0x5d, 0x03, 0xed, 0xfa, + 0x08, 0xf8, 0x19, 0xf6, 0xc9, 0xf9, 0x52, 0xfd, 0xb3, 0xfd, 0x7e, 0xfb, + 0x0a, 0xf9, 0x63, 0xf9, 0xab, 0xf7, 0xa7, 0xf7, 0x67, 0xf5, 0xe3, 0xee, + 0xa6, 0xf0, 0xb2, 0xf4, 0x28, 0xfb, 0x14, 0x03, 0x71, 0x05, 0xbd, 0x06, + 0xb7, 0x05, 0x4c, 0x03, 0x93, 0x02, 0x36, 0x02, 0x13, 0x04, 0xba, 0x09, + 0x90, 0x0d, 0xc6, 0x0b, 0x69, 0x0a, 0x96, 0x06, 0xdf, 0x03, 0xd0, 0x01, + 0xf3, 0xf9, 0xe3, 0xef, 0x9f, 0xe5, 0x8c, 0xdb, 0xb2, 0xde, 0x26, 0xec, + 0xf2, 0xfa, 0x89, 0x05, 0x6b, 0x02, 0x15, 0xf5, 0x17, 0xea, 0x30, 0xe8, + 0xa0, 0xef, 0x4d, 0xf6, 0xdd, 0xfc, 0xc6, 0x02, 0x1e, 0x07, 0xe1, 0x0b, + 0x74, 0x0e, 0x43, 0x0f, 0xfd, 0x0a, 0x3d, 0x0d, 0x0b, 0x09, 0x9e, 0x0a, + 0x42, 0x08, 0xe6, 0x0c, 0x80, 0x0e, 0x0a, 0x14, 0x05, 0x12, 0xe4, 0x0f, + 0x5e, 0x0e, 0x51, 0x09, 0x14, 0x05, 0x54, 0xff, 0xba, 0xfb, 0x52, 0xfb, + 0xd6, 0x01, 0x02, 0x03, 0xf0, 0x04, 0x01, 0x00, 0x80, 0xf9, 0xc7, 0xf2, + 0xdc, 0xee, 0x2c, 0xef, 0xa3, 0xed, 0xf2, 0xf1, 0x6d, 0xf3, 0xf1, 0xf6, + 0x11, 0xfb, 0x47, 0xff, 0x18, 0x02, 0x83, 0x00, 0x15, 0xff, 0x2c, 0x00, + 0x33, 0x03, 0xd8, 0x07, 0x09, 0x0c, 0x22, 0x0b, 0x3e, 0x0f, 0x1b, 0x11, + 0x79, 0x15, 0x5f, 0x12, 0x39, 0x10, 0xcd, 0x03, 0x44, 0xfc, 0x87, 0xf3, + 0xe7, 0xea, 0xc4, 0xe1, 0x9f, 0xe0, 0xfa, 0xe7, 0xfe, 0xf8, 0xc1, 0x03, + 0x28, 0x06, 0x4f, 0xf9, 0xe2, 0xe6, 0xe4, 0xdf, 0xd8, 0xe1, 0x2a, 0xec, + 0xba, 0xf8, 0x97, 0x02, 0x60, 0x06, 0xc8, 0x07, 0x77, 0x06, 0x47, 0x01, + 0x71, 0x03, 0x0e, 0x0a, 0xb7, 0x08, 0xf7, 0x09, 0x59, 0x07, 0x22, 0x07, + 0x34, 0x10, 0xcb, 0x14, 0x1d, 0x18, 0xb4, 0x16, 0xa0, 0x0f, 0xd3, 0x0b, + 0xb6, 0x07, 0xff, 0x04, 0x33, 0x01, 0xd5, 0x02, 0x85, 0x04, 0xac, 0x07, + 0xe2, 0x06, 0xc7, 0x00, 0x00, 0xfd, 0x05, 0xf7, 0x81, 0xf3, 0x9a, 0xee, + 0x48, 0xec, 0x88, 0xee, 0x3b, 0xf5, 0x65, 0xf7, 0x8f, 0xfc, 0x9c, 0xfa, + 0x15, 0xfc, 0x99, 0xfb, 0xe1, 0xf7, 0x4c, 0xf7, 0xbe, 0xfb, 0x78, 0x08, + 0x4c, 0x12, 0x93, 0x14, 0x4b, 0x11, 0xdc, 0x08, 0xd8, 0x09, 0xc4, 0x0f, + 0x08, 0x12, 0xe3, 0x11, 0x47, 0x09, 0xcd, 0x00, 0xf6, 0xf7, 0x1c, 0xef, + 0x46, 0xe9, 0x94, 0xe5, 0x4a, 0xeb, 0xfd, 0xf7, 0x32, 0x00, 0x7c, 0x02, + 0xb1, 0xf6, 0x6d, 0xe9, 0x9c, 0xe2, 0x52, 0xe4, 0xa6, 0xed, 0x87, 0xf8, + 0x77, 0x00, 0x4c, 0x05, 0xa9, 0x02, 0x13, 0x04, 0xc2, 0xfb, 0x8b, 0xff, + 0x79, 0x00, 0x48, 0x06, 0xae, 0x0a, 0x79, 0x0e, 0xe7, 0x0e, 0x40, 0x10, + 0x32, 0x14, 0x2f, 0x16, 0x3b, 0x15, 0xbf, 0x10, 0xe4, 0x07, 0x18, 0x05, + 0x98, 0x04, 0x94, 0x08, 0xc2, 0x0b, 0x79, 0x0b, 0xbe, 0x09, 0x61, 0x05, + 0xbf, 0xff, 0x4a, 0xf8, 0xa5, 0xf1, 0x79, 0xf1, 0x04, 0xf1, 0xcf, 0xf4, + 0x23, 0xf8, 0xbc, 0xf6, 0xae, 0xf6, 0x51, 0xf4, 0xca, 0xf2, 0x4f, 0xf2, + 0xc4, 0xf1, 0x8f, 0xf4, 0xdc, 0xf7, 0x07, 0x00, 0xb6, 0x07, 0x5a, 0x0c, + 0x1e, 0x10, 0xdd, 0x10, 0x1a, 0x10, 0x08, 0x0f, 0x27, 0x0c, 0x55, 0x0b, + 0x49, 0x0c, 0xc7, 0x0e, 0xdf, 0x10, 0x5f, 0x0d, 0xcc, 0x07, 0x72, 0xfe, + 0x63, 0xf5, 0x02, 0xe7, 0x95, 0xdf, 0xbf, 0xe1, 0xc7, 0xee, 0xa3, 0xfe, + 0x23, 0x07, 0x1c, 0xff, 0xd7, 0xeb, 0x52, 0xe0, 0x36, 0xe0, 0xf5, 0xea, + 0xd0, 0xf9, 0x26, 0x00, 0x8e, 0x01, 0xf2, 0xfc, 0x8a, 0xff, 0xc5, 0xfd, + 0x6d, 0x01, 0x40, 0x01, 0xc0, 0x04, 0x9e, 0x06, 0x82, 0x0a, 0x6b, 0x0d, + 0xd4, 0x0e, 0x72, 0x0e, 0xa3, 0x0f, 0xfc, 0x0e, 0x86, 0x0f, 0x54, 0x0e, + 0x50, 0x0b, 0x01, 0x06, 0xc5, 0x03, 0xc5, 0x04, 0x1d, 0x07, 0x18, 0x09, + 0x73, 0x08, 0xf6, 0x02, 0x21, 0xfc, 0xbe, 0xf8, 0x9b, 0xf4, 0xc3, 0xf5, + 0x0f, 0xf7, 0x1e, 0xf6, 0x4a, 0xf8, 0x38, 0xf5, 0xa7, 0xf3, 0x50, 0xf3, + 0x2f, 0xf2, 0x77, 0xf4, 0xad, 0xfb, 0xcd, 0xfd, 0x66, 0x02, 0x35, 0x05, + 0x57, 0x06, 0x5e, 0x0a, 0xee, 0x0b, 0x8f, 0x0e, 0xd0, 0x0d, 0xcd, 0x11, + 0x83, 0x10, 0xa5, 0x0d, 0xda, 0x0d, 0x8c, 0x0d, 0xf7, 0x0c, 0xc4, 0x08, + 0x0c, 0x03, 0x0e, 0xf9, 0xae, 0xe9, 0x77, 0xe2, 0x8f, 0xdf, 0x5c, 0xec, + 0x5e, 0xfb, 0xbd, 0x07, 0x41, 0x04, 0x9c, 0xf7, 0xee, 0xe4, 0x56, 0xdc, + 0x27, 0xdf, 0x5d, 0xef, 0x94, 0xff, 0x3f, 0x07, 0x48, 0x0b, 0x79, 0x01, + 0x6b, 0x00, 0xcb, 0xf9, 0x8c, 0xfb, 0x42, 0x00, 0x29, 0x04, 0x3c, 0x0d, + 0xc1, 0x0d, 0xf5, 0x0e, 0x10, 0x0e, 0x8c, 0x0b, 0x71, 0x09, 0x18, 0x08, + 0x29, 0x09, 0x1a, 0x0a, 0x6b, 0x0a, 0x76, 0x09, 0x48, 0x05, 0x00, 0x03, + 0x03, 0x08, 0xc4, 0x07, 0xfb, 0x05, 0xb9, 0x00, 0xd0, 0xf7, 0x8e, 0xf5, + 0x54, 0xf2, 0xb6, 0xf9, 0xb1, 0xfb, 0x31, 0xfc, 0xf3, 0xf9, 0xc8, 0xf3, + 0x85, 0xf1, 0xa8, 0xf2, 0xf6, 0xf4, 0x8f, 0xf8, 0xb7, 0xfd, 0x80, 0x01, + 0x89, 0x03, 0xce, 0x04, 0xc7, 0x03, 0x62, 0x05, 0xcd, 0x08, 0x0f, 0x0c, + 0x58, 0x10, 0x75, 0x0f, 0x0b, 0x0c, 0xef, 0x09, 0x0d, 0x09, 0xc9, 0x09, + 0x07, 0x08, 0x87, 0x06, 0xdc, 0x03, 0xd1, 0xfd, 0x37, 0xf5, 0x6b, 0xe9, + 0xb9, 0xdf, 0xca, 0xe3, 0x5c, 0xf5, 0x6a, 0x05, 0x60, 0x0c, 0x9e, 0x02, + 0xf4, 0xf0, 0x5f, 0xe4, 0xba, 0xe5, 0xa4, 0xed, 0xec, 0xfb, 0x9b, 0x02, + 0xe7, 0x0a, 0x1c, 0x0b, 0x26, 0x04, 0xf8, 0x02, 0x41, 0xfa, 0x33, 0xf9, + 0x0d, 0xfe, 0x85, 0x05, 0xf2, 0x0b, 0xba, 0x0e, 0xf4, 0x0c, 0xbb, 0x09, + 0xd1, 0x07, 0x16, 0x04, 0x1d, 0x03, 0xeb, 0x03, 0x98, 0x04, 0xa3, 0x05, + 0xf9, 0x06, 0xa2, 0x05, 0x7b, 0x05, 0x36, 0x04, 0x5e, 0x00, 0xb8, 0xfd, + 0x3f, 0xfb, 0xf1, 0xfb, 0xb5, 0xfb, 0x9c, 0xfb, 0xfe, 0xfc, 0xe2, 0xfa, + 0x0d, 0xfb, 0x73, 0xf7, 0x1b, 0xf7, 0x74, 0xf5, 0xed, 0xf8, 0x06, 0xfc, + 0xfa, 0x00, 0x7e, 0x02, 0x9d, 0x01, 0x78, 0x01, 0x4c, 0xff, 0x27, 0x01, + 0x15, 0x07, 0xd3, 0x08, 0x51, 0x0c, 0x0f, 0x0e, 0xcc, 0x0c, 0xec, 0x0a, + 0xee, 0x09, 0x62, 0x04, 0x93, 0x07, 0x04, 0x08, 0x5b, 0x09, 0xde, 0x08, + 0x07, 0x02, 0x9b, 0xf8, 0x68, 0xef, 0x62, 0xea, 0x61, 0xe6, 0xab, 0xf2, + 0xa1, 0xfc, 0x49, 0x0c, 0x47, 0x0b, 0x19, 0xfe, 0x05, 0xee, 0xc4, 0xe5, + 0x94, 0xe8, 0x56, 0xf7, 0x44, 0x03, 0x00, 0x0c, 0x0c, 0x0c, 0xc8, 0x06, + 0x7a, 0xfe, 0x6c, 0xf9, 0xf1, 0xf6, 0x87, 0xfd, 0xc0, 0x01, 0xf5, 0x07, + 0x44, 0x08, 0xcf, 0x05, 0xaf, 0xff, 0x2c, 0x00, 0xbb, 0xff, 0x3f, 0x03, + 0x2c, 0x06, 0x52, 0x03, 0xcf, 0x01, 0x0c, 0xfd, 0xb4, 0xfa, 0xf1, 0xfd, + 0xe5, 0x02, 0xc9, 0x02, 0x23, 0x05, 0x45, 0xff, 0x88, 0xfa, 0xfa, 0xf9, + 0x4e, 0xf8, 0xe1, 0xfb, 0x39, 0xff, 0x6d, 0x01, 0x45, 0x00, 0x85, 0xfc, + 0xc6, 0xfa, 0xeb, 0xf7, 0xa4, 0xfa, 0x95, 0xfd, 0xcd, 0x01, 0x37, 0x03, + 0x91, 0x03, 0xaa, 0x02, 0x4d, 0x02, 0xd4, 0x01, 0xef, 0x03, 0xe6, 0x05, + 0x95, 0x09, 0x28, 0x0d, 0x03, 0x0d, 0xb1, 0x0a, 0x9d, 0x08, 0x3a, 0x07, + 0x98, 0x08, 0xf7, 0x0a, 0x67, 0x0c, 0xd9, 0x09, 0x1a, 0x03, 0xe8, 0xfb, + 0xa2, 0xf4, 0xdb, 0xf2, 0xe7, 0xf2, 0xd0, 0xf5, 0xbc, 0xf7, 0xe1, 0x02, + 0x32, 0x09, 0x04, 0x0b, 0xd5, 0xff, 0x98, 0xf0, 0x71, 0xeb, 0xe2, 0xec, + 0xa9, 0xfa, 0x8f, 0x05, 0x2f, 0x0c, 0xa4, 0x0a, 0x2f, 0x05, 0x26, 0xfb, + 0x14, 0xf6, 0x0b, 0xf0, 0x37, 0xf4, 0x6d, 0xfd, 0x45, 0x06, 0x26, 0x09, + 0x0e, 0x07, 0x3f, 0xfb, 0x8c, 0xf5, 0x1c, 0xf5, 0x50, 0xfa, 0x87, 0x00, + 0x2a, 0x03, 0x00, 0x00, 0x77, 0xfc, 0x19, 0xf9, 0x01, 0xfb, 0x19, 0xfd, + 0x7c, 0x00, 0x16, 0x02, 0x6e, 0x01, 0xbf, 0xfc, 0xcc, 0xf8, 0x0d, 0xfa, + 0xf9, 0xfc, 0x1b, 0x00, 0x14, 0x03, 0x47, 0x00, 0xf6, 0xfd, 0x1b, 0xfa, + 0x3e, 0xf9, 0xa9, 0xf6, 0x3e, 0xfd, 0x4b, 0x02, 0x4a, 0x06, 0x88, 0x06, + 0x03, 0x03, 0xa5, 0xff, 0xb4, 0xfc, 0x7e, 0xff, 0x97, 0x02, 0x5b, 0x07, + 0x7c, 0x0a, 0xc4, 0x0c, 0xe6, 0x0c, 0x38, 0x0a, 0x26, 0x07, 0x83, 0x06, + 0x3b, 0x07, 0xee, 0x0a, 0x99, 0x0c, 0xaa, 0x0c, 0x7a, 0x07, 0xdf, 0x00, + 0x85, 0xf9, 0x7e, 0xf7, 0xf8, 0xf4, 0x02, 0xfa, 0x18, 0xff, 0x3c, 0x08, + 0xe7, 0x0b, 0x21, 0x08, 0xdb, 0xfd, 0xc0, 0xf2, 0xf6, 0xef, 0xfd, 0xf5, + 0x75, 0x00, 0x0b, 0x09, 0xdb, 0x0a, 0x47, 0x05, 0x6b, 0xfb, 0x20, 0xf3, + 0x07, 0xef, 0xc5, 0xf4, 0x9c, 0xfa, 0x24, 0x01, 0x59, 0x02, 0x31, 0xff, + 0x94, 0xfa, 0x0c, 0xf7, 0xb5, 0xf4, 0xd8, 0xf5, 0xa9, 0xf7, 0xe8, 0xfa, + 0xcb, 0xfd, 0x58, 0xfd, 0x4a, 0xf9, 0x55, 0xf8, 0xb7, 0xf8, 0x21, 0xfd, + 0xda, 0xff, 0xad, 0xfe, 0xb2, 0xfb, 0x8c, 0xf9, 0x4f, 0xfa, 0x79, 0xfe, + 0x48, 0x01, 0x09, 0x03, 0xab, 0x02, 0x1e, 0x00, 0xa9, 0xfd, 0xb2, 0xfc, + 0x2d, 0xfb, 0x19, 0xff, 0xf3, 0x02, 0xe5, 0x07, 0x76, 0x08, 0x4f, 0x04, + 0xbe, 0xff, 0xeb, 0xfc, 0x9d, 0xfe, 0x6c, 0x02, 0x51, 0x07, 0x40, 0x0a, + 0x51, 0x0a, 0xec, 0x07, 0x2f, 0x04, 0xa0, 0x02, 0x61, 0x05, 0x28, 0x08, + 0x24, 0x0d, 0x28, 0x0d, 0x8d, 0x0a, 0xdc, 0x06, 0x97, 0x04, 0x27, 0x04, + 0x25, 0x05, 0xe1, 0x04, 0x05, 0x04, 0xaf, 0xff, 0xe3, 0xfa, 0xc0, 0xf7, + 0x87, 0xf8, 0xfc, 0xff, 0xd4, 0x07, 0x5f, 0x0a, 0xf4, 0x02, 0x38, 0xf9, + 0x50, 0xf4, 0xef, 0xf4, 0xf3, 0xfb, 0x2c, 0x01, 0xf5, 0x04, 0x29, 0x04, + 0x8f, 0xff, 0x8c, 0xf8, 0x3b, 0xf4, 0x0e, 0xf1, 0x16, 0xf5, 0x59, 0xfa, + 0x2f, 0xff, 0x27, 0xff, 0x4b, 0xfc, 0x91, 0xf6, 0x56, 0xf2, 0x8c, 0xf2, + 0x7a, 0xf5, 0xd1, 0xf7, 0x0b, 0xfc, 0xaa, 0xfd, 0x41, 0xfc, 0x25, 0xfa, + 0x8b, 0xf8, 0x0d, 0xf9, 0x2e, 0xfb, 0xaa, 0xfc, 0xda, 0xfd, 0x9f, 0xfe, + 0x0f, 0xfe, 0xf1, 0xff, 0xfe, 0xff, 0xbb, 0x00, 0x98, 0x00, 0x5d, 0x00, + 0x68, 0x01, 0xc8, 0x00, 0xdd, 0x01, 0x7c, 0x01, 0xac, 0x03, 0xf5, 0x04, + 0x8a, 0x05, 0x04, 0x03, 0xa4, 0x01, 0xa3, 0x01, 0xde, 0x03, 0xe7, 0x03, + 0xe6, 0x05, 0x5a, 0x06, 0x7c, 0x06, 0xee, 0x06, 0x17, 0x07, 0x3f, 0x06, + 0x74, 0x06, 0xd5, 0x06, 0x7c, 0x0a, 0xe2, 0x0a, 0x25, 0x0b, 0x4e, 0x08, + 0xa2, 0x07, 0x54, 0x05, 0x74, 0x06, 0xa0, 0x05, 0x9c, 0x04, 0x1c, 0x02, + 0x22, 0x00, 0xab, 0xfd, 0x38, 0xfb, 0x96, 0xfa, 0xee, 0xfc, 0xfe, 0x04, + 0x5a, 0x09, 0xfb, 0x08, 0xe7, 0xff, 0x24, 0xf7, 0xb0, 0xf0, 0xb7, 0xf8, + 0x16, 0x00, 0xbc, 0x08, 0x0d, 0x07, 0x00, 0xff, 0x86, 0xf6, 0xf2, 0xf2, + 0x16, 0xf2, 0x0f, 0xf6, 0x22, 0xf8, 0x35, 0xfb, 0xc8, 0xfb, 0xb5, 0xfa, + 0xa9, 0xf5, 0xea, 0xf1, 0x80, 0xef, 0x21, 0xf2, 0xbd, 0xf6, 0x9b, 0xfb, + 0x1f, 0xfb, 0x94, 0xf9, 0xeb, 0xf6, 0x96, 0xf7, 0x4b, 0xfa, 0xa4, 0xfd, + 0x13, 0xfe, 0x0e, 0xfe, 0x62, 0xfd, 0x8c, 0xfe, 0x37, 0x01, 0xe4, 0x01, + 0xa9, 0x01, 0xfe, 0x01, 0x88, 0x01, 0xd2, 0x03, 0x6f, 0x04, 0xc9, 0x03, + 0x43, 0x03, 0x87, 0x06, 0x33, 0x09, 0x8f, 0x0b, 0xb9, 0x09, 0xab, 0x04, + 0xfd, 0x01, 0xb0, 0x01, 0x98, 0x05, 0x63, 0x0a, 0xae, 0x0d, 0xc2, 0x0c, + 0xef, 0x08, 0xb2, 0x03, 0x0f, 0x01, 0xd9, 0x02, 0x6b, 0x06, 0x60, 0x0b, + 0x57, 0x0f, 0xdc, 0x0d, 0x48, 0x09, 0x8c, 0x06, 0x3e, 0x03, 0xb1, 0x03, + 0x88, 0x04, 0xc4, 0x05, 0xf9, 0x06, 0xa3, 0x06, 0x65, 0x02, 0x14, 0xfd, + 0x88, 0xfa, 0x93, 0xf9, 0x91, 0xfd, 0x6d, 0xff, 0xef, 0x02, 0x3a, 0x03, + 0xe6, 0x00, 0xf5, 0xfc, 0xce, 0xf8, 0x45, 0xf8, 0xf0, 0xf9, 0x11, 0xfb, + 0xfc, 0xfe, 0x16, 0xff, 0x0a, 0xff, 0xe3, 0xfa, 0x0a, 0xf7, 0x67, 0xf3, + 0xdf, 0xf3, 0xd1, 0xf5, 0xd0, 0xfa, 0x4b, 0xfc, 0x23, 0xfc, 0xc2, 0xf7, + 0xb6, 0xf4, 0xc1, 0xf2, 0x18, 0xf4, 0x06, 0xf8, 0x8e, 0xfa, 0xc1, 0xfb, + 0xda, 0xfb, 0x97, 0xfa, 0xd6, 0xfa, 0x49, 0xfa, 0xa5, 0xfb, 0x42, 0xfd, + 0x97, 0xfe, 0xc3, 0xff, 0x1f, 0xff, 0xc5, 0xff, 0xa2, 0x00, 0x70, 0x02, + 0xe3, 0x03, 0x64, 0x04, 0x87, 0x03, 0xdd, 0x02, 0xea, 0x01, 0x41, 0x03, + 0x9d, 0x04, 0x18, 0x06, 0x56, 0x06, 0x79, 0x06, 0x54, 0x06, 0xed, 0x04, + 0x1e, 0x04, 0x57, 0x04, 0xf6, 0x03, 0xc6, 0x06, 0xfe, 0x07, 0xf5, 0x06, + 0x77, 0x06, 0x50, 0x05, 0x3f, 0x05, 0x10, 0x07, 0xe6, 0x07, 0xa4, 0x07, + 0x9a, 0x08, 0x0d, 0x08, 0x97, 0x08, 0x91, 0x08, 0x5d, 0x07, 0x66, 0x06, + 0xd3, 0x04, 0x47, 0x05, 0x41, 0x04, 0x9e, 0x03, 0xb5, 0x02, 0xa1, 0x01, + 0xa2, 0x00, 0xae, 0xfe, 0x13, 0xfe, 0xe0, 0xfe, 0x0d, 0x02, 0xd8, 0x04, + 0xa6, 0x04, 0xb5, 0x01, 0x7f, 0xfd, 0x51, 0xfa, 0x48, 0xfa, 0x63, 0xfc, + 0x93, 0xff, 0x92, 0x01, 0x7f, 0x00, 0x0f, 0xfd, 0xb3, 0xf9, 0x49, 0xf6, + 0xa5, 0xf5, 0x00, 0xf7, 0x30, 0xf9, 0xee, 0xfa, 0xe8, 0xfa, 0x71, 0xf8, + 0xe7, 0xf5, 0xe7, 0xf3, 0x0f, 0xf4, 0xaf, 0xf5, 0xda, 0xf7, 0xac, 0xf9, + 0xd7, 0xf9, 0xa4, 0xf8, 0x58, 0xf8, 0xc3, 0xf8, 0x88, 0xfa, 0xfd, 0xfb, + 0x91, 0xfd, 0xeb, 0xfd, 0x5a, 0xfd, 0xd7, 0xfc, 0x0c, 0xfe, 0x59, 0xff, + 0x15, 0x01, 0x65, 0x01, 0xdb, 0x01, 0xa1, 0x01, 0xfc, 0x01, 0x95, 0x02, + 0xee, 0x03, 0x2e, 0x05, 0x62, 0x05, 0x7c, 0x06, 0x00, 0x06, 0xd2, 0x05, + 0x63, 0x05, 0xd9, 0x05, 0xb4, 0x05, 0x5a, 0x06, 0x72, 0x06, 0x17, 0x07, + 0x36, 0x07, 0x60, 0x07, 0x3b, 0x07, 0x0e, 0x07, 0x14, 0x06, 0xd7, 0x05, + 0xb4, 0x05, 0xa5, 0x07, 0x98, 0x08, 0x7b, 0x08, 0x05, 0x08, 0x55, 0x06, + 0xe3, 0x04, 0x02, 0x05, 0x51, 0x05, 0xce, 0x05, 0x0e, 0x05, 0x45, 0x04, + 0x42, 0x03, 0xe3, 0x02, 0x53, 0x02, 0x7f, 0x02, 0x18, 0x02, 0x72, 0x02, + 0x1b, 0x03, 0x89, 0x03, 0x8d, 0x03, 0x09, 0x04, 0xc6, 0x02, 0x45, 0x01, + 0x9f, 0xff, 0x8e, 0xfd, 0xd3, 0xfc, 0xc7, 0xfc, 0x9e, 0xfd, 0xb0, 0xfd, + 0x36, 0xfd, 0xaa, 0xfb, 0x77, 0xf9, 0x49, 0xf7, 0xf8, 0xf5, 0xe7, 0xf5, + 0x23, 0xf7, 0x0b, 0xf8, 0x29, 0xf8, 0x29, 0xf7, 0xbb, 0xf5, 0xfc, 0xf4, + 0x3c, 0xf5, 0x58, 0xf6, 0x3f, 0xf7, 0x07, 0xf8, 0x3f, 0xf8, 0xdc, 0xf7, + 0x4e, 0xf8, 0x58, 0xf9, 0xfe, 0xfa, 0x47, 0xfc, 0x10, 0xfd, 0x77, 0xfd, + 0x65, 0xfd, 0x81, 0xfd, 0xdc, 0xfe, 0x31, 0x00, 0xb5, 0x01, 0xfe, 0x02, + 0x2f, 0x03, 0x72, 0x02, 0xd9, 0x01, 0x09, 0x02, 0x2c, 0x03, 0x41, 0x04, + 0x3c, 0x05, 0xcd, 0x05, 0x9b, 0x05, 0x24, 0x05, 0xb5, 0x03, 0xbf, 0x03, + 0x3a, 0x04, 0xfa, 0x04, 0xbd, 0x05, 0x42, 0x05, 0x97, 0x04, 0xc3, 0x03, + 0xac, 0x03, 0xec, 0x03, 0x21, 0x04, 0xdb, 0x03, 0x95, 0x03, 0x58, 0x03, + 0xd4, 0x02, 0xa2, 0x02, 0xbd, 0x02, 0x70, 0x03, 0x04, 0x04, 0x4e, 0x04, + 0x42, 0x04, 0xa0, 0x03, 0x18, 0x03, 0x14, 0x03, 0x6b, 0x03, 0xca, 0x03, + 0x2f, 0x04, 0x81, 0x04, 0xbe, 0x04, 0xcf, 0x04, 0x5f, 0x04, 0xf2, 0x03, + 0x8b, 0x03, 0x4a, 0x03, 0x1b, 0x03, 0x1e, 0x03, 0xe8, 0x02, 0xbe, 0x02, + 0x5c, 0x02, 0xa7, 0x01, 0xfa, 0x00, 0x3e, 0x00, 0x99, 0xff, 0xe0, 0xfe, + 0x51, 0xfe, 0xb5, 0xfd, 0x1e, 0xfd, 0x8a, 0xfc, 0xe3, 0xfb, 0x76, 0xfb, + 0x2d, 0xfb, 0xb6, 0xfa, 0x34, 0xfa, 0x7e, 0xf9, 0xe8, 0xf8, 0x37, 0xf8, + 0x69, 0xf8, 0xc2, 0xf8, 0x42, 0xf9, 0x4d, 0xf9, 0xa0, 0xf8, 0xa4, 0xf8, + 0xf7, 0xf8, 0x80, 0xf9, 0x8b, 0xfa, 0x62, 0xfb, 0xf3, 0xfb, 0x04, 0xfc, + 0x58, 0xfc, 0xb2, 0xfc, 0x55, 0xfd, 0x32, 0xfe, 0x23, 0xff, 0xde, 0xff, + 0x27, 0x00, 0x31, 0x00, 0x47, 0x00, 0x91, 0x00, 0x07, 0x01, 0xac, 0x01, + 0xe8, 0x01, 0xe2, 0x01, 0xcd, 0x01, 0x9f, 0x01, 0x99, 0x01, 0xc6, 0x01, + 0xfa, 0x01, 0xe2, 0x01, 0x80, 0x01, 0x2f, 0x01, 0xeb, 0x00, 0xb9, 0x00, + 0x76, 0x00, 0x4d, 0x00, 0x4e, 0x00, 0x70, 0x00, 0x92, 0x00, 0x93, 0x00, + 0x7b, 0x00, 0x6b, 0x00, 0x42, 0x00, 0x49, 0x00, 0x62, 0x00, 0x9c, 0x00, + 0x26, 0x01, 0xc7, 0x01, 0x46, 0x02, 0x9c, 0x02, 0x9b, 0x02, 0x9a, 0x02, + 0xbc, 0x02, 0x0d, 0x03, 0x7e, 0x03, 0xef, 0x03, 0x2f, 0x04, 0x45, 0x04, + 0x2f, 0x04, 0x26, 0x04, 0x2b, 0x04, 0x12, 0x04, 0x02, 0x04, 0xf4, 0x03, + 0xe2, 0x03, 0xad, 0x03, 0x69, 0x03, 0x10, 0x03, 0xc6, 0x02, 0x74, 0x02, + 0x11, 0x02, 0xa4, 0x01, 0x39, 0x01, 0xe6, 0x00, 0x87, 0x00, 0x12, 0x00, + 0x88, 0xff, 0x08, 0xff, 0xb0, 0xfe, 0x6a, 0xfe, 0x28, 0xfe, 0xd5, 0xfd, + 0x6b, 0xfd, 0x1c, 0xfd, 0xfc, 0xfc, 0xfd, 0xfc, 0x01, 0xfd, 0xe8, 0xfc, + 0xcb, 0xfc, 0x97, 0xfc, 0x7b, 0xfc, 0x86, 0xfc, 0xb9, 0xfc, 0xee, 0xfc, + 0x22, 0xfd, 0x35, 0xfd, 0x37, 0xfd, 0x40, 0xfd, 0x4d, 0xfd, 0x5e, 0xfd, + 0x75, 0xfd, 0xb0, 0xfd, 0xf8, 0xfd, 0x29, 0xfe, 0x32, 0xfe, 0x1c, 0xfe, + 0x25, 0xfe, 0x3e, 0xfe, 0x62, 0xfe, 0x73, 0xfe, 0x6b, 0xfe, 0x63, 0xfe, + 0x5a, 0xfe, 0x60, 0xfe, 0x88, 0xfe, 0xbf, 0xfe, 0xcb, 0xfe, 0xb9, 0xfe, + 0xb0, 0xfe, 0xaa, 0xfe, 0xc4, 0xfe, 0xeb, 0xfe, 0x21, 0xff, 0x49, 0xff, + 0x74, 0xff, 0x9c, 0xff, 0xb7, 0xff, 0xdd, 0xff, 0x1a, 0x00, 0x67, 0x00, + 0xca, 0x00, 0x18, 0x01, 0x47, 0x01, 0x69, 0x01, 0x83, 0x01, 0xb2, 0x01, + 0xf1, 0x01, 0x41, 0x02, 0x90, 0x02, 0xc0, 0x02, 0xca, 0x02, 0xd0, 0x02, + 0xe7, 0x02, 0x0f, 0x03, 0x3b, 0x03, 0x57, 0x03, 0x5b, 0x03, 0x53, 0x03, + 0x3e, 0x03, 0x21, 0x03, 0x0c, 0x03, 0x17, 0x03, 0x27, 0x03, 0x0d, 0x03, + 0xdb, 0x02, 0xa3, 0x02, 0x6b, 0x02, 0x40, 0x02, 0x28, 0x02, 0x16, 0x02, + 0xf9, 0x01, 0xe4, 0x01, 0xc2, 0x01, 0x96, 0x01, 0x57, 0x01, 0x1e, 0x01, + 0xf1, 0x00, 0xd3, 0x00, 0xbd, 0x00, 0xa1, 0x00, 0x7f, 0x00, 0x58, 0x00, + 0x32, 0x00, 0x11, 0x00, 0xe9, 0xff, 0xbe, 0xff, 0x98, 0xff, 0x81, 0xff, + 0x6e, 0xff, 0x61, 0xff, 0x4c, 0xff, 0x32, 0xff, 0x15, 0xff, 0xf5, 0xfe, + 0xd3, 0xfe, 0xb0, 0xfe, 0x99, 0xfe, 0x8c, 0xfe, 0x7a, 0xfe, 0x6a, 0xfe, + 0x57, 0xfe, 0x38, 0xfe, 0x17, 0xfe, 0xf4, 0xfd, 0xd9, 0xfd, 0xd4, 0xfd, + 0xd7, 0xfd, 0xdf, 0xfd, 0xea, 0xfd, 0xeb, 0xfd, 0xdf, 0xfd, 0xd4, 0xfd, + 0xda, 0xfd, 0xee, 0xfd, 0x0e, 0xfe, 0x30, 0xfe, 0x52, 0xfe, 0x6d, 0xfe, + 0x86, 0xfe, 0xa4, 0xfe, 0xc7, 0xfe, 0xfb, 0xfe, 0x2a, 0xff, 0x5a, 0xff, + 0x81, 0xff, 0xa6, 0xff, 0xca, 0xff, 0xf5, 0xff, 0x2c, 0x00, 0x5d, 0x00, + 0x85, 0x00, 0xa2, 0x00, 0xba, 0x00, 0xd9, 0x00, 0xf9, 0x00, 0x19, 0x01, + 0x33, 0x01, 0x40, 0x01, 0x49, 0x01, 0x4a, 0x01, 0x4c, 0x01, 0x5c, 0x01, + 0x6a, 0x01, 0x76, 0x01, 0x74, 0x01, 0x5d, 0x01, 0x46, 0x01, 0x38, 0x01, + 0x34, 0x01, 0x40, 0x01, 0x47, 0x01, 0x3e, 0x01, 0x28, 0x01, 0x19, 0x01, + 0x11, 0x01, 0x1a, 0x01, 0x25, 0x01, 0x2e, 0x01, 0x2c, 0x01, 0x1f, 0x01, + 0x14, 0x01, 0x0d, 0x01, 0x16, 0x01, 0x25, 0x01, 0x35, 0x01, 0x39, 0x01, + 0x31, 0x01, 0x1a, 0x01, 0x01, 0x01, 0xf3, 0x00, 0xf1, 0x00, 0xeb, 0x00, + 0xe1, 0x00, 0xcc, 0x00, 0xab, 0x00, 0x89, 0x00, 0x64, 0x00, 0x4c, 0x00, + 0x38, 0x00, 0x22, 0x00, 0x08, 0x00, 0xe9, 0xff, 0xbb, 0xff, 0x8b, 0xff, + 0x66, 0xff, 0x51, 0xff, 0x45, 0xff, 0x39, 0xff, 0x28, 0xff, 0x10, 0xff, + 0xf8, 0xfe, 0xe5, 0xfe, 0xda, 0xfe, 0xd4, 0xfe, 0xdd, 0xfe, 0xdf, 0xfe, + 0xe9, 0xfe, 0xf2, 0xfe, 0xf2, 0xfe, 0xf6, 0xfe, 0x01, 0xff, 0x11, 0xff, + 0x29, 0xff, 0x38, 0xff, 0x44, 0xff, 0x49, 0xff, 0x51, 0xff, 0x64, 0xff, + 0x6e, 0xff, 0x7e, 0xff, 0x87, 0xff, 0x93, 0xff, 0x9c, 0xff, 0xa0, 0xff, + 0xa8, 0xff, 0xb3, 0xff, 0xbc, 0xff, 0xc3, 0xff, 0xc6, 0xff, 0xc8, 0xff, + 0xcb, 0xff, 0xd2, 0xff, 0xe0, 0xff, 0xf0, 0xff, 0x00, 0x00, 0x08, 0x00, + 0x0d, 0x00, 0x14, 0x00, 0x21, 0x00, 0x32, 0x00, 0x43, 0x00, 0x60, 0x00, + 0x76, 0x00, 0x89, 0x00, 0x93, 0x00, 0x94, 0x00, 0x9e, 0x00, 0xb0, 0x00, + 0xc9, 0x00, 0xe0, 0x00, 0xe9, 0x00, 0xe9, 0x00, 0xe5, 0x00, 0xe3, 0x00, + 0xe5, 0x00, 0xee, 0x00, 0xf4, 0x00, 0xf4, 0x00, 0xee, 0x00, 0xdd, 0x00, + 0xce, 0x00, 0xcd, 0x00, 0xc9, 0x00, 0xc5, 0x00, 0xb9, 0x00, 0xa2, 0x00, + 0x8f, 0x00, 0x7d, 0x00, 0x72, 0x00, 0x6a, 0x00, 0x62, 0x00, 0x54, 0x00, + 0x43, 0x00, 0x2d, 0x00, 0x17, 0x00, 0xfe, 0xff, 0xee, 0xff, 0xeb, 0xff, + 0xe6, 0xff, 0xdf, 0xff, 0xcf, 0xff, 0xb6, 0xff, 0x9a, 0xff, 0x84, 0xff, + 0x79, 0xff, 0x7c, 0xff, 0x86, 0xff, 0x87, 0xff, 0x81, 0xff, 0x6f, 0xff, + 0x5f, 0xff, 0x54, 0xff, 0x55, 0xff, 0x5c, 0xff, 0x69, 0xff, 0x72, 0xff, + 0x74, 0xff, 0x6c, 0xff, 0x68, 0xff, 0x6a, 0xff, 0x72, 0xff, 0x7d, 0xff, + 0x89, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x99, 0xff, 0x9b, 0xff, 0xa6, 0xff, + 0xb9, 0xff, 0xd1, 0xff, 0xe1, 0xff, 0xec, 0xff, 0xef, 0xff, 0xf5, 0xff, + 0xfe, 0xff, 0x0f, 0x00, 0x29, 0x00, 0x40, 0x00, 0x50, 0x00, 0x5b, 0x00, + 0x62, 0x00, 0x6e, 0x00, 0x7f, 0x00, 0x97, 0x00, 0xaa, 0x00, 0xbb, 0x00, + 0xc3, 0x00, 0xc5, 0x00, 0xc5, 0x00, 0xc9, 0x00, 0xd2, 0x00, 0xdf, 0x00, + 0xe7, 0x00, 0xe5, 0x00, 0xdc, 0x00, 0xcf, 0x00, 0xc1, 0x00, 0xb8, 0x00, + 0xb5, 0x00, 0xb2, 0x00, 0xac, 0x00, 0x99, 0x00, 0x84, 0x00, 0x6e, 0x00, + 0x5e, 0x00, 0x52, 0x00, 0x4a, 0x00, 0x3f, 0x00, 0x2f, 0x00, 0x19, 0x00, + 0x07, 0x00, 0xfb, 0xff, 0xed, 0xff, 0xe6, 0xff, 0xdc, 0xff, 0xd1, 0xff, + 0xc5, 0xff, 0xb8, 0xff, 0xaf, 0xff, 0xac, 0xff, 0xaa, 0xff, 0xa6, 0xff, + 0xa1, 0xff, 0x99, 0xff, 0x93, 0xff, 0x90, 0xff, 0x93, 0xff, 0x99, 0xff, + 0x9c, 0xff, 0x99, 0xff, 0x94, 0xff, 0x8f, 0xff, 0x8c, 0xff, 0x90, 0xff, + 0x98, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0x9d, 0xff, 0x9c, 0xff, 0x99, 0xff, + 0x9c, 0xff, 0xa1, 0xff, 0xa9, 0xff, 0xb0, 0xff, 0xb3, 0xff, 0xb6, 0xff, + 0xb6, 0xff, 0xb7, 0xff, 0xbd, 0xff, 0xc5, 0xff, 0xcf, 0xff, 0xd7, 0xff, + 0xe0, 0xff, 0xe3, 0xff, 0xea, 0xff, 0xf4, 0xff, 0xfd, 0xff, 0x06, 0x00, + 0x0c, 0x00, 0x14, 0x00, 0x18, 0x00, 0x1e, 0x00, 0x27, 0x00, 0x32, 0x00, + 0x3d, 0x00, 0x43, 0x00, 0x44, 0x00, 0x45, 0x00, 0x48, 0x00, 0x47, 0x00, + 0x4b, 0x00, 0x4f, 0x00, 0x53, 0x00, 0x52, 0x00, 0x4d, 0x00, 0x48, 0x00, + 0x42, 0x00, 0x3d, 0x00, 0x38, 0x00, 0x3a, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x2d, 0x00, 0x25, 0x00, 0x1f, 0x00, 0x18, 0x00, 0x16, 0x00, 0x14, 0x00, + 0x11, 0x00, 0x0d, 0x00, 0x06, 0x00, 0x01, 0x00, 0xfb, 0xff, 0xf6, 0xff, + 0xf4, 0xff, 0xf2, 0xff, 0xf1, 0xff, 0xed, 0xff, 0xe6, 0xff, 0xe1, 0xff, + 0xd8, 0xff, 0xd3, 0xff, 0xd5, 0xff, 0xd4, 0xff, 0xd5, 0xff, 0xd2, 0xff, + 0xcb, 0xff, 0xc4, 0xff, 0xbe, 0xff, 0xbd, 0xff, 0xbd, 0xff, 0xbe, 0xff, + 0xbf, 0xff, 0xbb, 0xff, 0xb4, 0xff, 0xad, 0xff, 0xaa, 0xff, 0xa9, 0xff, + 0xad, 0xff, 0xae, 0xff, 0xb1, 0xff, 0xb0, 0xff, 0xb1, 0xff, 0xaf, 0xff, + 0xb1, 0xff, 0xb3, 0xff, 0xbb, 0xff, 0xc3, 0xff, 0xc9, 0xff, 0xcd, 0xff, + 0xd2, 0xff, 0xd8, 0xff, 0xe0, 0xff, 0xe8, 0xff, 0xf1, 0xff, 0xfa, 0xff, + 0x02, 0x00, 0x09, 0x00, 0x0f, 0x00, 0x16, 0x00, 0x1e, 0x00, 0x26, 0x00, + 0x2e, 0x00, 0x33, 0x00, 0x36, 0x00, 0x38, 0x00, 0x39, 0x00, 0x3f, 0x00, + 0x41, 0x00, 0x47, 0x00, 0x45, 0x00, 0x44, 0x00, 0x40, 0x00, 0x41, 0x00, + 0x3f, 0x00, 0x3e, 0x00, 0x3a, 0x00, 0x34, 0x00, 0x30, 0x00, 0x2a, 0x00, + 0x27, 0x00, 0x25, 0x00, 0x22, 0x00, 0x1e, 0x00, 0x1a, 0x00, 0x12, 0x00, + 0x0d, 0x00, 0x0a, 0x00, 0x07, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xfc, 0xff, 0xf2, 0xff, 0xed, 0xff, 0xed, 0xff, 0xea, 0xff, 0xea, 0xff, + 0xe7, 0xff, 0xe2, 0xff, 0xdb, 0xff, 0xd4, 0xff, 0xd2, 0xff, 0xd0, 0xff, + 0xd1, 0xff, 0xcf, 0xff, 0xcf, 0xff, 0xca, 0xff, 0xc6, 0xff, 0xc1, 0xff, + 0xc1, 0xff, 0xc1, 0xff, 0xbf, 0xff, 0xc0, 0xff, 0xbe, 0xff, 0xbc, 0xff, + 0xbb, 0xff, 0xbb, 0xff, 0xbe, 0xff, 0xbf, 0xff, 0xc1, 0xff, 0xc3, 0xff, + 0xc4, 0xff, 0xc7, 0xff, 0xca, 0xff, 0xca, 0xff, 0xcc, 0xff, 0xd4, 0xff, + 0xd5, 0xff, 0xda, 0xff, 0xdf, 0xff, 0xe4, 0xff, 0xe8, 0xff, 0xed, 0xff, + 0xf2, 0xff, 0xf8, 0xff, 0xfc, 0xff, 0x00, 0x00, 0x03, 0x00, 0x09, 0x00, + 0x0f, 0x00, 0x13, 0x00, 0x18, 0x00, 0x1c, 0x00, 0x1f, 0x00, 0x22, 0x00, + 0x27, 0x00, 0x2b, 0x00, 0x2c, 0x00, 0x30, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x3b, 0x00, 0x3b, 0x00, + 0x3b, 0x00, 0x3a, 0x00, 0x39, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x2c, 0x00, 0x26, 0x00, 0x23, 0x00, + 0x1f, 0x00, 0x1c, 0x00, 0x17, 0x00, 0x14, 0x00, 0x14, 0x00, 0x0f, 0x00, + 0x0c, 0x00, 0x07, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfd, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xf8, 0xff, + 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf2, 0xff, 0xf1, 0xff, 0xed, 0xff, + 0xed, 0xff, 0xec, 0xff, 0xeb, 0xff, 0xe8, 0xff, 0xe4, 0xff, 0xe1, 0xff, + 0xdf, 0xff, 0xdd, 0xff, 0xdb, 0xff, 0xd9, 0xff, 0xd6, 0xff, 0xd2, 0xff, + 0xd0, 0xff, 0xcd, 0xff, 0xcb, 0xff, 0xc9, 0xff, 0xc9, 0xff, 0xc8, 0xff, + 0xc6, 0xff, 0xc3, 0xff, 0xc1, 0xff, 0xbf, 0xff, 0xbe, 0xff, 0xbe, 0xff, + 0xbf, 0xff, 0xbe, 0xff, 0xbd, 0xff, 0xbf, 0xff, 0xbf, 0xff, 0xbe, 0xff, + 0xbf, 0xff, 0xc0, 0xff, 0xc1, 0xff, 0xc2, 0xff, 0xc4, 0xff, 0xc7, 0xff, + 0xca, 0xff, 0xcd, 0xff, 0xd1, 0xff, 0xd1, 0xff, 0xd5, 0xff, 0xd9, 0xff, + 0xda, 0xff, 0xde, 0xff, 0xe3, 0xff, 0xea, 0xff, 0xec, 0xff, 0xf3, 0xff, + 0xf6, 0xff, 0xfc, 0xff, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0c, 0x00, + 0x11, 0x00, 0x18, 0x00, 0x1e, 0x00, 0x22, 0x00, 0x27, 0x00, 0x2a, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x3a, 0x00, 0x3c, 0x00, 0x41, 0x00, 0x42, 0x00, + 0x46, 0x00, 0x4a, 0x00, 0x4c, 0x00, 0x4e, 0x00, 0x53, 0x00, 0x53, 0x00, + 0x53, 0x00, 0x55, 0x00, 0x5a, 0x00, 0x58, 0x00, 0x59, 0x00, 0x56, 0x00, + 0x55, 0x00, 0x54, 0x00, 0x52, 0x00, 0x4f, 0x00, 0x4c, 0x00, 0x4b, 0x00, + 0x46, 0x00, 0x42, 0x00, 0x3e, 0x00, 0x3b, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x2e, 0x00, 0x29, 0x00, 0x25, 0x00, 0x20, 0x00, 0x1f, 0x00, 0x18, 0x00, + 0x13, 0x00, 0x0f, 0x00, 0x0a, 0x00, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xfd, 0xff, 0xf6, 0xff, 0xf3, 0xff, 0xef, 0xff, 0xeb, 0xff, 0xe5, 0xff, + 0xe3, 0xff, 0xdd, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd2, 0xff, 0xcf, 0xff, + 0xcc, 0xff, 0xc9, 0xff, 0xc8, 0xff, 0xc4, 0xff, 0xc3, 0xff, 0xc0, 0xff, + 0xc0, 0xff, 0xbd, 0xff, 0xbc, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, + 0xbc, 0xff, 0xbd, 0xff, 0xbd, 0xff, 0xbc, 0xff, 0xbe, 0xff, 0xc0, 0xff, + 0xc0, 0xff, 0xc2, 0xff, 0xc6, 0xff, 0xc8, 0xff, 0xc7, 0xff, 0xcb, 0xff, + 0xd0, 0xff, 0xd2, 0xff, 0xd5, 0xff, 0xd8, 0xff, 0xda, 0xff, 0xdd, 0xff, + 0xe3, 0xff, 0xe7, 0xff, 0xea, 0xff, 0xef, 0xff, 0xf1, 0xff, 0xf5, 0xff, + 0xf9, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x01, 0x00, 0x04, 0x00, 0x05, 0x00, + 0x0b, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x10, 0x00, 0x13, 0x00, 0x17, 0x00, + 0x15, 0x00, 0x19, 0x00, 0x1a, 0x00, 0x1b, 0x00, 0x1c, 0x00, 0x1b, 0x00, + 0x1d, 0x00, 0x1d, 0x00, 0x1e, 0x00, 0x1f, 0x00, 0x20, 0x00, 0x1f, 0x00, + 0x1f, 0x00, 0x20, 0x00, 0x20, 0x00, 0x1d, 0x00, 0x1c, 0x00, 0x1b, 0x00, + 0x1b, 0x00, 0x1a, 0x00, 0x1a, 0x00, 0x19, 0x00, 0x17, 0x00, 0x16, 0x00, + 0x15, 0x00, 0x13, 0x00, 0x11, 0x00, 0x12, 0x00, 0x13, 0x00, 0x11, 0x00, + 0x10, 0x00, 0x12, 0x00, 0x11, 0x00, 0x13, 0x00, 0x0f, 0x00, 0x11, 0x00, + 0x13, 0x00, 0x13, 0x00, 0x14, 0x00, 0x12, 0x00, 0x13, 0x00, 0x13, 0x00, + 0x12, 0x00, 0x14, 0x00, 0x13, 0x00, 0x13, 0x00, 0x13, 0x00, 0x0e, 0x00, + 0x0f, 0x00, 0x0d, 0x00, 0x0d, 0x00, 0x0c, 0x00, 0x09, 0x00, 0x08, 0x00, + 0x07, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0xfc, 0xff, + 0xfb, 0xff, 0xf9, 0xff, 0xf7, 0xff, 0xf5, 0xff, 0xf2, 0xff, 0xf1, 0xff, + 0xf0, 0xff, 0xee, 0xff, 0xed, 0xff, 0xe9, 0xff, 0xe8, 0xff, 0xe6, 0xff, + 0xe4, 0xff, 0xe3, 0xff, 0xe1, 0xff, 0xe0, 0xff, 0xdd, 0xff, 0xd9, 0xff, + 0xda, 0xff, 0xdb, 0xff, 0xd9, 0xff, 0xd9, 0xff, 0xd8, 0xff, 0xda, 0xff, + 0xda, 0xff, 0xd9, 0xff, 0xdb, 0xff, 0xd8, 0xff, 0xdb, 0xff, 0xdb, 0xff, + 0xdb, 0xff, 0xdd, 0xff, 0xde, 0xff, 0xe1, 0xff, 0xe0, 0xff, 0xe2, 0xff, + 0xe3, 0xff, 0xe6, 0xff, 0xe7, 0xff, 0xe9, 0xff, 0xeb, 0xff, 0xf0, 0xff, + 0xf2, 0xff, 0xf3, 0xff, 0xf7, 0xff, 0xf8, 0xff, 0xfa, 0xff, 0xfb, 0xff, + 0xfe, 0xff, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x04, 0x00, 0x07, 0x00, + 0x08, 0x00, 0x0b, 0x00, 0x0d, 0x00, 0x0f, 0x00, 0x12, 0x00, 0x13, 0x00, + 0x14, 0x00, 0x16, 0x00, 0x16, 0x00, 0x19, 0x00, 0x1b, 0x00, 0x1b, 0x00, + 0x1b, 0x00, 0x1b, 0x00, 0x1b, 0x00, 0x1c, 0x00, 0x1b, 0x00, 0x1c, 0x00, + 0x1b, 0x00, 0x1a, 0x00, 0x1b, 0x00, 0x1b, 0x00, 0x1a, 0x00, 0x1a, 0x00, + 0x19, 0x00, 0x18, 0x00, 0x18, 0x00, 0x16, 0x00, 0x15, 0x00, 0x16, 0x00, + 0x15, 0x00, 0x14, 0x00, 0x12, 0x00, 0x12, 0x00, 0x11, 0x00, 0x0e, 0x00, + 0x0d, 0x00, 0x09, 0x00, 0x08, 0x00, 0x07, 0x00, 0x05, 0x00, 0x03, 0x00, + 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xfe, 0xff, + 0xfd, 0xff, 0xfb, 0xff, 0xf9, 0xff, 0xf7, 0xff, 0xf6, 0xff, 0xf6, 0xff, + 0xf6, 0xff, 0xf5, 0xff, 0xf4, 0xff, 0xf4, 0xff, 0xf3, 0xff, 0xf3, 0xff, + 0xf3, 0xff, 0xf1, 0xff, 0xf1, 0xff, 0xec, 0xff, 0xed, 0xff, 0xed, 0xff, + 0xee, 0xff, 0xed, 0xff, 0xec, 0xff, 0xeb, 0xff, 0xec, 0xff, 0xed, 0xff, + 0xeb, 0xff, 0xeb, 0xff, 0xed, 0xff, 0xec, 0xff, 0xec, 0xff, 0xed, 0xff, + 0xec, 0xff, 0xed, 0xff, 0xea, 0xff, 0xeb, 0xff, 0xeb, 0xff, 0xeb, 0xff, + 0xea, 0xff, 0xea, 0xff, 0xeb, 0xff, 0xe9, 0xff, 0xea, 0xff, 0xe9, 0xff, + 0xea, 0xff, 0xea, 0xff, 0xea, 0xff, 0xea, 0xff, 0xeb, 0xff, 0xeb, 0xff, + 0xee, 0xff, 0xee, 0xff, 0xee, 0xff, 0xef, 0xff, 0xf0, 0xff, 0xf2, 0xff, + 0xf2, 0xff, 0xf3, 0xff, 0xf5, 0xff, 0xf5, 0xff, 0xf6, 0xff, 0xf5, 0xff, + 0xf7, 0xff, 0xf8, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfd, 0xff, 0xfd, 0xff, + 0xfe, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x05, 0x00, 0x05, 0x00, 0x07, 0x00, 0x06, 0x00, + 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x0b, 0x00, 0x0a, 0x00, + 0x0b, 0x00, 0x0b, 0x00, 0x0a, 0x00, 0x0b, 0x00, 0x0c, 0x00, 0x0b, 0x00, + 0x0a, 0x00, 0x0a, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x09, 0x00, 0x07, 0x00, + 0x08, 0x00, 0x07, 0x00, 0x08, 0x00, 0x06, 0x00, 0x05, 0x00, 0x03, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfd, 0xff, + 0xfb, 0xff, 0xfa, 0xff, 0xf9, 0xff, 0xf8, 0xff, 0xf3, 0xff, 0xf3, 0xff, + 0xf0, 0xff, 0xef, 0xff, 0xec, 0xff, 0xea, 0xff, 0xe6, 0xff, 0xe6, 0xff, + 0xe4, 0xff, 0xe2, 0xff, 0xdf, 0xff, 0xde, 0xff, 0xdc, 0xff, 0xdc, 0xff, + 0xd9, 0xff, 0xd6, 0xff, 0xd5, 0xff, 0xd5, 0xff, 0xd2, 0xff, 0xd1, 0xff, + 0xd0, 0xff, 0xd1, 0xff, 0xcd, 0xff, 0xd0, 0xff, 0xd0, 0xff, 0xcf, 0xff, + 0xd3, 0xff, 0xd0, 0xff, 0xd2, 0xff, 0xd3, 0xff, 0xd4, 0xff, 0xd6, 0xff, + 0xd7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd8, 0xff, 0xd8, 0xff, 0xda, 0xff, + 0xda, 0xff, 0xdd, 0xff, 0xdd, 0xff, 0xdf, 0xff, 0xe1, 0xff, 0xe4, 0xff, + 0xe4, 0xff, 0xe5, 0xff, 0xe6, 0xff, 0xe7, 0xff, 0xeb, 0xff, 0xec, 0xff, + 0xed, 0xff, 0xef, 0xff, 0xef, 0xff, 0xf1, 0xff, 0xf2, 0xff, 0xf4, 0xff, + 0xf5, 0xff, 0xf6, 0xff, 0xf8, 0xff, 0xfa, 0xff, 0xf9, 0xff, 0xfb, 0xff, + 0xfd, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfb, 0xff, + 0xfc, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfb, 0xff, + 0xfb, 0xff, 0xf9, 0xff, 0xf8, 0xff, 0xf9, 0xff, 0xf6, 0xff, 0xf6, 0xff, + 0xf4, 0xff, 0xf1, 0xff, 0xec, 0xff, 0xec, 0xff, 0xe9, 0xff, 0xe8, 0xff, + 0xe7, 0xff, 0xe6, 0xff, 0xe5, 0xff, 0xe4, 0xff, 0xe2, 0xff, 0xdd, 0xff, + 0xdc, 0xff, 0xdc, 0xff, 0xd9, 0xff, 0xd9, 0xff, 0xdc, 0xff, 0xd8, 0xff, + 0xd3, 0xff, 0xd5, 0xff, 0xd1, 0xff, 0xd0, 0xff, 0xd0, 0xff, 0xcf, 0xff, + 0xcd, 0xff, 0xcf, 0xff, 0xcd, 0xff, 0xce, 0xff, 0xcd, 0xff, 0xcd, 0xff, + 0xcc, 0xff, 0xcb, 0xff, 0xcc, 0xff, 0xcb, 0xff, 0xcc, 0xff, 0xcc, 0xff, + 0xcc, 0xff, 0xcc, 0xff, 0xcd, 0xff, 0xd2, 0xff, 0xd0, 0xff, 0xd2, 0xff, + 0xd2, 0xff, 0xd4, 0xff, 0xd2, 0xff, 0xd5, 0xff, 0xd8, 0xff, 0xd8, 0xff, + 0xda, 0xff, 0xda, 0xff, 0xd7, 0xff, 0xd9, 0xff, 0xda, 0xff, 0xd9, 0xff, + 0xdb, 0xff, 0xdb, 0xff, 0xdd, 0xff, 0xdf, 0xff, 0xde, 0xff, 0xe0, 0xff, + 0xe1, 0xff, 0xe1, 0xff, 0xe2, 0xff, 0xe4, 0xff, 0xe5, 0xff, 0xe5, 0xff, + 0xe7, 0xff, 0xe7, 0xff, 0xe8, 0xff, 0xe7, 0xff, 0xe9, 0xff, 0xeb, 0xff, + 0xe9, 0xff, 0xea, 0xff, 0xeb, 0xff, 0xea, 0xff, 0xec, 0xff, 0xeb, 0xff, + 0xeb, 0xff, 0xed, 0xff, 0xee, 0xff, 0xed, 0xff, 0xeb, 0xff, 0xeb, 0xff, + 0xeb, 0xff, 0xeb, 0xff, 0xeb, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xeb, 0xff, + 0xeb, 0xff, 0xe9, 0xff, 0xeb, 0xff, 0xe9, 0xff, 0xea, 0xff, 0xe9, 0xff, + 0xea, 0xff, 0xe7, 0xff, 0xe8, 0xff, 0xe8, 0xff, 0xe5, 0xff, 0xe7, 0xff, + 0xe6, 0xff, 0xe7, 0xff, 0xe6, 0xff, 0xe7, 0xff, 0xe7, 0xff, 0xe5, 0xff, + 0xe7, 0xff, 0xe7, 0xff, 0xe8, 0xff, 0xe8, 0xff, 0xe8, 0xff, 0xe7, 0xff, + 0xe9, 0xff, 0xe9, 0xff, 0xeb, 0xff, 0xea, 0xff, 0xea, 0xff, 0xec, 0xff, + 0xec, 0xff, 0xea, 0xff, 0xea, 0xff, 0xeb, 0xff, 0xed, 0xff, 0xee, 0xff, + 0xf1, 0xff, 0xf0, 0xff, 0xf2, 0xff, 0xf2, 0xff, 0xf2, 0xff, 0xf5, 0xff, + 0xf6, 0xff, 0xf7, 0xff, 0xf9, 0xff, 0xf8, 0xff, 0xfa, 0xff, 0xfc, 0xff, + 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x05, 0x00, 0x05, 0x00, 0x04, 0x00, + 0x05, 0x00, 0x07, 0x00, 0x05, 0x00, 0x08, 0x00, 0x0a, 0x00, 0x0a, 0x00, + 0x0b, 0x00, 0x0d, 0x00, 0x0d, 0x00, 0x0f, 0x00, 0x0e, 0x00, 0x10, 0x00, + 0x11, 0x00, 0x12, 0x00, 0x13, 0x00, 0x14, 0x00, 0x16, 0x00, 0x17, 0x00, + 0x19, 0x00, 0x19, 0x00, 0x18, 0x00, 0x1b, 0x00, 0x1b, 0x00, 0x21, 0x00, + 0x24, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x2a, 0x00, 0x2a, 0x00, + 0x2c, 0x00, 0x30, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x3d, 0x00, + 0x45, 0x00, 0x47, 0x00, 0x4c, 0x00, 0x50, 0x00, 0x57, 0x00, 0x5d, 0x00, + 0x6a, 0x00, 0x80, 0x00, 0xa8, 0x00, 0xee, 0x00, 0x53, 0x01, 0x9a, 0x01, + 0x38, 0x02, 0xd9, 0x02, 0xf2, 0x03, 0x6c, 0x04, 0x74, 0x05, 0xa3, 0x04, + 0xfc, 0x00, 0x24, 0x00, 0x21, 0x00, 0x7f, 0xff, 0xc6, 0xff, 0xb8, 0x00, + 0xa9, 0xff, 0x7a, 0xff, 0xdd, 0x00, 0x46, 0x00, 0xa2, 0x00, 0xf2, 0xff, + 0xa0, 0xfe, 0x78, 0xfe, 0x26, 0xfb, 0x3c, 0xfe, 0x0e, 0x02, 0x5d, 0x00, + 0xc4, 0xff, 0x5d, 0xff, 0xda, 0xfe, 0xb9, 0xfe, 0xf8, 0xfe, 0xdc, 0xfe, + 0xfc, 0xfe, 0x7b, 0xff, 0xdc, 0x00, 0xf8, 0x00, 0x31, 0xff, 0x46, 0xff, + 0x0e, 0x00, 0x8c, 0xff, 0x7c, 0xfe, 0xae, 0xfe, 0x91, 0xff, 0xee, 0xff, + 0x39, 0x00, 0x2f, 0x00, 0x7e, 0x00, 0x74, 0xff, 0x18, 0x00, 0x8c, 0x00, + 0x34, 0x00, 0x2f, 0x00, 0x7a, 0x00, 0x59, 0xff, 0xb5, 0xff, 0x1b, 0x01, + 0xbb, 0x00, 0x98, 0x00, 0xff, 0x00, 0xd1, 0x00, 0x86, 0x00, 0x5d, 0xfd, + 0x76, 0xff, 0x82, 0x00, 0x82, 0xfe, 0x35, 0xff, 0x62, 0x00, 0x00, 0x03, + 0xfa, 0x02, 0xd6, 0x01, 0xab, 0xfe, 0xe0, 0xfe, 0x5f, 0x00, 0x70, 0x01, + 0x4e, 0x02, 0xe2, 0x00, 0x39, 0x00, 0x5a, 0x00, 0xb9, 0x00, 0xb3, 0x01, + 0x8d, 0x00, 0x7d, 0x00, 0xd4, 0xff, 0x5b, 0x00, 0x53, 0x01, 0x03, 0x01, + 0x77, 0x00, 0x00, 0x00, 0xd3, 0xff, 0x2e, 0x00, 0x5d, 0xff, 0x4d, 0xff, + 0xee, 0xfe, 0x3f, 0xff, 0x8b, 0xff, 0xd2, 0xff, 0x55, 0x01, 0x0c, 0x01, + 0x94, 0xfe, 0x17, 0xff, 0xdb, 0x00, 0x30, 0x01, 0xf5, 0xfe, 0xf5, 0xfe, + 0xea, 0x00, 0xca, 0x01, 0x97, 0x01, 0x1f, 0xfe, 0x49, 0xfd, 0x6a, 0xff, + 0x91, 0x00, 0xa6, 0x00, 0x08, 0x00, 0x01, 0xff, 0xa4, 0xfe, 0xc5, 0xff, + 0x2d, 0x00, 0x79, 0x00, 0x37, 0xff, 0x7d, 0xff, 0x21, 0x00, 0x93, 0x00, + 0x2a, 0x01, 0x6a, 0xfe, 0x53, 0xff, 0x49, 0x00, 0x53, 0xff, 0x3a, 0x01, + 0x22, 0x02, 0x3f, 0xff, 0x85, 0xfe, 0xda, 0xff, 0xca, 0x00, 0xb6, 0xff, + 0xad, 0x00, 0xe9, 0xfd, 0x38, 0xfe, 0x34, 0x00, 0xcc, 0x00, 0x26, 0xff, + 0x87, 0x01, 0xef, 0xfe, 0x43, 0xfd, 0x63, 0x00, 0x53, 0x01, 0x94, 0x00, + 0x01, 0xff, 0xd9, 0xfe, 0x68, 0x00, 0xd0, 0x01, 0x27, 0xff, 0xb1, 0xfe, + 0x7a, 0x00, 0x05, 0x01, 0x5f, 0x00, 0xf6, 0x00, 0x61, 0x00, 0x94, 0x00, + 0xb8, 0xff, 0xa5, 0xff, 0x0e, 0x01, 0x29, 0x00, 0x06, 0x02, 0x84, 0x03, + 0x00, 0xfd, 0x39, 0xfd, 0x71, 0xfe, 0x68, 0x02, 0x78, 0x04, 0xd0, 0x02, + 0x44, 0xfd, 0x80, 0xfc, 0x02, 0x01, 0x08, 0x01, 0x80, 0x05, 0x93, 0x03, + 0xb6, 0xfc, 0x30, 0xfd, 0x44, 0x01, 0x77, 0x01, 0xe5, 0x01, 0x9f, 0x03, + 0x51, 0xff, 0x16, 0xfd, 0x32, 0x01, 0x69, 0x00, 0xf9, 0xff, 0x91, 0x02, + 0xa1, 0xff, 0xc4, 0xfe, 0x4b, 0x00, 0x95, 0xfe, 0xab, 0xff, 0xdb, 0x01, + 0x88, 0x01, 0x5c, 0xfe, 0x62, 0xfe, 0xf9, 0x00, 0xe0, 0xfd, 0x4f, 0xff, + 0xaf, 0xff, 0x18, 0x00, 0x4d, 0xfe, 0xfc, 0xff, 0xd4, 0xff, 0x91, 0xfd, + 0x3a, 0xfe, 0x8f, 0xfe, 0x59, 0x01, 0x49, 0x00, 0xb2, 0xfe, 0x34, 0xff, + 0xb8, 0xff, 0x95, 0xfc, 0x74, 0x00, 0xa5, 0x05, 0xeb, 0xff, 0x46, 0xfb, + 0x7f, 0x00, 0x1b, 0x01, 0x0e, 0x00, 0x0d, 0x01, 0x47, 0x02, 0xb0, 0xfe, + 0x07, 0xff, 0xc2, 0xff, 0x4a, 0x00, 0x50, 0x01, 0x9d, 0x01, 0xb1, 0xff, + 0x5c, 0xfe, 0xb6, 0x01, 0x76, 0x02, 0x8d, 0xff, 0x57, 0xfe, 0xd3, 0x01, + 0x78, 0x01, 0x69, 0x00, 0x52, 0x00, 0xa0, 0xfe, 0x1e, 0xfe, 0xfa, 0xff, + 0x44, 0x02, 0x0c, 0x01, 0x15, 0xfe, 0xcc, 0xfd, 0x24, 0x00, 0x7c, 0x01, + 0x6c, 0x02, 0xae, 0xfe, 0x3e, 0xfe, 0x9e, 0x03, 0x80, 0xff, 0x1d, 0xfe, + 0x2a, 0x01, 0xd2, 0x03, 0xcc, 0xfe, 0x56, 0xfe, 0x5f, 0x00, 0xde, 0xff, + 0x1b, 0x01, 0xbe, 0x01, 0x2f, 0x00, 0x44, 0xfb, 0x14, 0xfe, 0x03, 0x04, + 0x4a, 0x00, 0xa5, 0xfd, 0x89, 0xff, 0xd5, 0xfd, 0xc6, 0xfd, 0xf4, 0xfe, + 0x6e, 0x02, 0x23, 0x02, 0xcb, 0xfc, 0xf0, 0x00, 0xf0, 0x01, 0xb0, 0xfa, + 0x67, 0x04, 0x82, 0x07, 0x9b, 0xf9, 0xee, 0xf9, 0x7f, 0x03, 0xa0, 0x02, + 0x09, 0x00, 0xfd, 0x00, 0xf5, 0xfe, 0x92, 0xff, 0x07, 0xff, 0x21, 0x01, + 0xe9, 0xff, 0x74, 0xfe, 0xb9, 0xfd, 0x3e, 0xfa, 0x1d, 0x03, 0xc0, 0x06, + 0xff, 0xfb, 0xe8, 0xfd, 0xbd, 0x01, 0x49, 0xfd, 0xa5, 0xff, 0x06, 0x03, + 0x07, 0x00, 0x3c, 0xfb, 0xb5, 0x05, 0x02, 0xff, 0xb2, 0xf8, 0x7f, 0x02, + 0x48, 0x02, 0x71, 0xff, 0xfb, 0x00, 0x1b, 0xff, 0xdf, 0xfd, 0xaa, 0x02, + 0x52, 0x06, 0xc6, 0xf9, 0xff, 0xf8, 0xc5, 0x03, 0x70, 0x00, 0x86, 0x00, + 0x9f, 0x06, 0xb9, 0xfc, 0x58, 0xf9, 0x41, 0x03, 0x9b, 0x03, 0x66, 0xfc, + 0x96, 0x00, 0x83, 0x05, 0xb3, 0xfe, 0x22, 0xf8, 0x5b, 0xff, 0x6c, 0x04, + 0xd9, 0x00, 0x7c, 0x01, 0x88, 0x03, 0x7b, 0x01, 0x40, 0xfa, 0xed, 0xfd, + 0x5f, 0x02, 0x25, 0x02, 0xdd, 0x01, 0x30, 0xfe, 0x55, 0xfe, 0x5a, 0xfd, + 0xe1, 0x00, 0x7b, 0x03, 0x12, 0x02, 0x66, 0x02, 0x09, 0xfc, 0x9b, 0xf9, + 0x12, 0x01, 0x95, 0x03, 0x10, 0x00, 0xb0, 0x01, 0x2e, 0x00, 0xdd, 0xfc, + 0x07, 0x00, 0x1a, 0x05, 0xdc, 0xfc, 0xc1, 0xfd, 0xc6, 0x01, 0x57, 0xfd, + 0xd4, 0xfe, 0xc2, 0x05, 0xb2, 0xfc, 0xc0, 0xfe, 0xff, 0x03, 0x15, 0x00, + 0x72, 0xfd, 0xbc, 0x00, 0xaa, 0xfe, 0x37, 0xfe, 0x45, 0x03, 0xce, 0x03, + 0x8c, 0xfa, 0x12, 0xfc, 0x35, 0x04, 0x74, 0x00, 0xfe, 0xfe, 0x5d, 0x04, + 0xa9, 0x00, 0x10, 0xfd, 0x0d, 0xff, 0x47, 0xfe, 0x32, 0x00, 0x7d, 0x06, + 0xf9, 0x00, 0xab, 0xfc, 0x76, 0xfc, 0xca, 0x02, 0x90, 0x03, 0xd2, 0xff, + 0x1b, 0xff, 0xeb, 0xfd, 0x00, 0xff, 0x39, 0xff, 0xf8, 0x02, 0x08, 0x04, + 0x9c, 0xfd, 0x8b, 0xfa, 0x20, 0x01, 0xfd, 0x03, 0xfe, 0xff, 0x77, 0xfc, + 0x6d, 0x02, 0x7d, 0xfe, 0x00, 0xfb, 0x0e, 0x04, 0x02, 0x06, 0xf9, 0xfc, + 0x4d, 0xfb, 0x96, 0x00, 0x4b, 0x06, 0xc1, 0xfc, 0x5f, 0xfa, 0xa4, 0x02, + 0x69, 0x02, 0xd5, 0xfd, 0x30, 0x03, 0x79, 0xfa, 0x39, 0xf8, 0x28, 0x08, + 0x9a, 0x09, 0x75, 0xfa, 0xdb, 0xfb, 0x8c, 0x01, 0x51, 0xfc, 0x04, 0x00, + 0x71, 0x08, 0x5b, 0xff, 0x01, 0xfa, 0xf9, 0x00, 0x50, 0xff, 0xc1, 0xfd, + 0x73, 0x06, 0xe1, 0x02, 0x1d, 0xff, 0xa2, 0xff, 0x6f, 0xf9, 0x27, 0xfd, + 0x8f, 0x05, 0x5b, 0x03, 0x8b, 0xfe, 0xea, 0xfe, 0xdc, 0xfc, 0x68, 0xfc, + 0xdc, 0x04, 0xe2, 0x07, 0x9b, 0xfe, 0x75, 0xfd, 0x3a, 0xfe, 0x69, 0xfd, + 0xf3, 0xff, 0x62, 0x05, 0xfa, 0x01, 0x93, 0xfe, 0x3f, 0xfe, 0x08, 0xff, + 0x30, 0x01, 0x3d, 0x00, 0x65, 0xff, 0xed, 0x01, 0xcc, 0xfe, 0x7a, 0xfd, + 0x09, 0xfe, 0xf2, 0x01, 0xbf, 0x05, 0x71, 0xfe, 0x2c, 0xfc, 0x8f, 0xff, + 0x78, 0xff, 0x50, 0xfb, 0xbc, 0x01, 0xfd, 0x09, 0xa2, 0xfe, 0x3f, 0xf9, + 0x28, 0xfc, 0x56, 0xfc, 0xd4, 0x04, 0x4b, 0x08, 0xfc, 0xfe, 0xc2, 0xfc, + 0x09, 0xfd, 0xf6, 0xfc, 0x6e, 0x02, 0x0f, 0x02, 0x62, 0xff, 0x1c, 0x01, + 0xee, 0xfe, 0xc8, 0x00, 0x15, 0xfc, 0xb8, 0xfc, 0x5f, 0x06, 0xdc, 0x00, + 0x6a, 0xfb, 0x59, 0xfe, 0x8b, 0x00, 0x3d, 0xff, 0xc1, 0x00, 0x68, 0x01, + 0xc3, 0xff, 0x1c, 0x01, 0xd9, 0xfe, 0x6b, 0x03, 0xd9, 0xff, 0xdb, 0xfb, + 0x68, 0x02, 0x88, 0x01, 0x27, 0xfe, 0x85, 0xfd, 0xb1, 0x00, 0x02, 0x02, + 0x00, 0x01, 0x2d, 0xfd, 0x2f, 0xff, 0x03, 0x04, 0x5b, 0x00, 0x0a, 0xfd, + 0x2a, 0xff, 0xb2, 0xfd, 0x80, 0xff, 0xb3, 0x04, 0x3c, 0x01, 0xc6, 0xfe, + 0xca, 0xfe, 0x37, 0xff, 0x27, 0x00, 0xef, 0x00, 0x29, 0x01, 0xe9, 0xff, + 0x0d, 0x00, 0x91, 0xf8, 0xca, 0x01, 0x3a, 0x09, 0x2a, 0x03, 0x98, 0xfe, + 0xb7, 0xf8, 0xba, 0xfc, 0x40, 0x03, 0x9d, 0x01, 0xfd, 0x01, 0x92, 0x03, + 0x0b, 0xfa, 0x87, 0xfe, 0xb0, 0x03, 0x1e, 0xff, 0xdb, 0xfc, 0x70, 0x01, + 0x7b, 0x01, 0xb9, 0xff, 0x0c, 0x01, 0x6e, 0xff, 0x94, 0x00, 0x3c, 0x02, + 0x54, 0xff, 0x55, 0xfe, 0xbe, 0xff, 0xc9, 0x01, 0x06, 0xff, 0xa5, 0xfd, + 0x2e, 0x01, 0x4d, 0x03, 0xf1, 0x00, 0xd1, 0xfa, 0xe1, 0xf9, 0x94, 0x04, + 0x9c, 0x03, 0x3c, 0xfb, 0xde, 0x02, 0xab, 0x05, 0x26, 0xfc, 0xd6, 0xfe, + 0x66, 0x01, 0x4c, 0xf8, 0xf2, 0xff, 0xa2, 0x0b, 0x47, 0x02, 0xec, 0xf3, + 0x63, 0xff, 0x9c, 0x04, 0x34, 0x02, 0x89, 0xfd, 0x56, 0xfa, 0xbb, 0xfd, + 0xc2, 0x05, 0x52, 0x03, 0x92, 0xfd, 0x67, 0xfc, 0xfd, 0x01, 0x10, 0x02, + 0x3f, 0xfc, 0x59, 0xff, 0x18, 0x02, 0x1b, 0x00, 0x35, 0x02, 0x23, 0xfd, + 0xb3, 0xfd, 0xd8, 0x05, 0xa3, 0x00, 0x90, 0xfa, 0x1a, 0xff, 0x75, 0xff, + 0xde, 0x02, 0xef, 0x01, 0x1d, 0xfe, 0xd4, 0x00, 0x51, 0x00, 0x41, 0xff, + 0x88, 0x02, 0x70, 0x01, 0xfa, 0xfc, 0xaa, 0xff, 0xcc, 0xfd, 0x44, 0x06, + 0xfa, 0x00, 0x88, 0xf7, 0xbb, 0x02, 0x83, 0x05, 0x8c, 0x01, 0xc6, 0xfe, + 0xb5, 0xf6, 0x55, 0xfd, 0x0e, 0x0a, 0xb0, 0x02, 0x95, 0xfa, 0x34, 0x03, + 0x92, 0x02, 0xcc, 0xf9, 0xe8, 0xf8, 0x25, 0x02, 0x82, 0x03, 0x27, 0x00, + 0x39, 0xff, 0x71, 0x02, 0xba, 0xfe, 0xbb, 0x04, 0x4a, 0x04, 0x05, 0xf9, + 0x23, 0xfa, 0xb1, 0x04, 0x06, 0x05, 0x2d, 0xfc, 0x76, 0x03, 0xe0, 0xfd, + 0xb7, 0xf8, 0x44, 0x05, 0x83, 0x06, 0x7d, 0xfd, 0x01, 0xfa, 0xe4, 0xfc, + 0x7b, 0x00, 0xe5, 0x05, 0x34, 0x05, 0x92, 0xfe, 0x3a, 0xfb, 0x03, 0x00, + 0xe7, 0xff, 0xa8, 0xfa, 0xbe, 0x04, 0x09, 0x0b, 0x23, 0xfe, 0x64, 0xf6, + 0x4f, 0xfd, 0x60, 0x01, 0xd7, 0x01, 0xe6, 0x00, 0x9f, 0x03, 0x62, 0x04, + 0x91, 0xfc, 0xe8, 0xf4, 0xab, 0xfc, 0x3b, 0x0a, 0x04, 0x06, 0xbb, 0xfe, + 0xf8, 0xff, 0x8d, 0xf9, 0x8b, 0xfb, 0xd9, 0x0a, 0x87, 0x08, 0x89, 0xfb, + 0xf5, 0xf8, 0x8a, 0xfd, 0x2b, 0x02, 0xf2, 0x04, 0x74, 0x04, 0x92, 0xf9, + 0x1d, 0xf9, 0x17, 0x04, 0xf7, 0x04, 0xb4, 0xfe, 0xb4, 0x03, 0x72, 0x00, + 0xd1, 0xf8, 0xa8, 0xfd, 0x39, 0x02, 0x89, 0x01, 0xa1, 0x04, 0x38, 0x02, + 0xb8, 0xf9, 0xbd, 0xfd, 0x90, 0xff, 0x7b, 0x06, 0xf1, 0x04, 0x40, 0xf8, + 0xf0, 0x02, 0xcd, 0x02, 0x87, 0xf9, 0x8c, 0xfb, 0x02, 0x03, 0x43, 0x09, + 0xa2, 0x00, 0x95, 0xfd, 0xb4, 0xfd, 0xca, 0xf9, 0x5e, 0xfe, 0xf5, 0x08, + 0xe5, 0x02, 0xa8, 0xfa, 0x13, 0x00, 0xb9, 0xff, 0x19, 0xfc, 0xf1, 0x05, + 0x1d, 0x05, 0xe9, 0xfb, 0xe0, 0xfe, 0xf0, 0xfc, 0x85, 0xfd, 0xb9, 0x04, + 0x2b, 0x02, 0xca, 0xfd, 0x0e, 0xfe, 0x84, 0xff, 0x2b, 0xff, 0x47, 0x06, + 0x6c, 0x03, 0x6d, 0xf9, 0x44, 0xfc, 0x61, 0x01, 0xb7, 0x01, 0x23, 0x01, + 0x6f, 0x00, 0xc7, 0xfd, 0x3e, 0x01, 0xd4, 0xff, 0xc3, 0xfe, 0x38, 0x00, + 0x76, 0x01, 0x65, 0xfe, 0x57, 0x02, 0x27, 0xff, 0x72, 0xfa, 0x59, 0x02, + 0x55, 0x03, 0x6c, 0x02, 0x0c, 0x02, 0x38, 0xfc, 0x82, 0xfc, 0x07, 0x01, + 0xd0, 0x03, 0xa0, 0xff, 0x28, 0xff, 0x08, 0x04, 0xd2, 0x00, 0x5a, 0xfc, + 0x37, 0xfb, 0x93, 0x01, 0x18, 0x02, 0x1a, 0xff, 0xb3, 0xfc, 0x5e, 0x01, + 0x10, 0x07, 0x4d, 0x00, 0xb5, 0xf9, 0xa0, 0x01, 0x3c, 0x00, 0xf4, 0xf9, + 0x19, 0x03, 0xc0, 0x09, 0x31, 0x01, 0x5a, 0xfb, 0xa5, 0xf8, 0xec, 0xff, + 0x6b, 0x04, 0xad, 0x04, 0x92, 0x03, 0xbf, 0xf9, 0x52, 0xf6, 0xe4, 0x02, + 0x13, 0x03, 0x1a, 0xfe, 0x3c, 0x09, 0x67, 0x03, 0xda, 0xf3, 0x9b, 0xfb, + 0x74, 0x04, 0x67, 0x07, 0x1e, 0x01, 0xd1, 0xf9, 0x73, 0xfd, 0x6a, 0x02, + 0x4d, 0x05, 0x41, 0x01, 0xa5, 0xfc, 0xf4, 0xfa, 0xd0, 0x03, 0xc9, 0x05, + 0x96, 0xfb, 0xaf, 0xfd, 0x6a, 0x04, 0xd4, 0xfd, 0x94, 0xf9, 0xd7, 0x03, + 0x4b, 0x04, 0x66, 0xfc, 0x5b, 0x01, 0x98, 0x02, 0x22, 0xfd, 0xe8, 0xfe, + 0xbb, 0xff, 0x94, 0xfa, 0x54, 0x01, 0x27, 0x05, 0xd3, 0x03, 0x97, 0xff, + 0x33, 0xfd, 0x15, 0xfb, 0x88, 0xfa, 0x0f, 0x0e, 0xd3, 0x0b, 0xcd, 0xf3, + 0x09, 0xf4, 0x24, 0x06, 0xbc, 0x00, 0x86, 0xfe, 0x63, 0x03, 0xdf, 0xff, + 0x81, 0xff, 0x9c, 0xff, 0x15, 0xfe, 0x92, 0xff, 0x56, 0x00, 0x8c, 0x01, + 0xb4, 0x00, 0x6e, 0xf4, 0x93, 0xff, 0x5b, 0x0e, 0x32, 0x02, 0xda, 0xf8, + 0x74, 0x03, 0xdd, 0x00, 0x5e, 0xf7, 0x01, 0xff, 0x82, 0x08, 0x6d, 0x00, + 0xce, 0xfa, 0x4a, 0xff, 0x0f, 0x01, 0x93, 0x01, 0xbd, 0xfe, 0xdf, 0xfc, + 0x84, 0x06, 0xd8, 0x01, 0xf8, 0xf4, 0x25, 0xfd, 0xde, 0x09, 0x1e, 0x01, + 0x1f, 0xfd, 0xdf, 0x02, 0xdc, 0xff, 0x23, 0xfc, 0x93, 0x01, 0xbf, 0x02, + 0xa0, 0x00, 0xf1, 0xfc, 0xfc, 0x00, 0xe2, 0x01, 0xed, 0xfb, 0x37, 0x00, + 0x73, 0x02, 0x22, 0xfd, 0x63, 0xfd, 0x8b, 0x02, 0xe6, 0x02, 0x33, 0x01, + 0xb0, 0x01, 0xac, 0xfd, 0xd2, 0xf6, 0x1a, 0xfd, 0xd6, 0x08, 0x1b, 0x0b, + 0x95, 0xfc, 0xb5, 0xf4, 0x01, 0xfe, 0x0a, 0x03, 0x18, 0x05, 0xe9, 0x04, + 0x4d, 0xfd, 0xa5, 0xf7, 0x7b, 0xfb, 0x85, 0x03, 0xf6, 0x06, 0xd3, 0x03, + 0xff, 0xfc, 0x25, 0xf7, 0xb2, 0xfe, 0xf8, 0x08, 0x8a, 0x06, 0x2a, 0xfa, + 0x14, 0xf8, 0xc2, 0x01, 0x73, 0x00, 0xbf, 0x00, 0xfa, 0x04, 0x1f, 0xff, + 0xf3, 0xfb, 0x31, 0x03, 0xf1, 0xff, 0x6d, 0xfe, 0xfe, 0xfc, 0xf5, 0xfb, + 0x04, 0x04, 0x09, 0x08, 0xdb, 0xfa, 0xf4, 0xf6, 0xb9, 0x01, 0xd5, 0x09, + 0x73, 0x02, 0x3a, 0xf9, 0xd5, 0xfd, 0x4e, 0x00, 0xcc, 0x00, 0xec, 0x03, + 0xab, 0x02, 0x90, 0xfc, 0x2c, 0xfb, 0x7c, 0xfe, 0x1c, 0x03, 0x76, 0x04, + 0x8f, 0x04, 0xb8, 0xfd, 0xf5, 0xf8, 0x26, 0xfd, 0x4b, 0x03, 0x8c, 0x03, + 0x28, 0x00, 0x06, 0x01, 0x0c, 0x01, 0x13, 0xfb, 0xed, 0xfa, 0xc7, 0x05, + 0x72, 0x05, 0x03, 0xf9, 0xfc, 0xfe, 0x80, 0x04, 0x39, 0xfd, 0x70, 0xfd, + 0xec, 0x08, 0xfc, 0xff, 0x2d, 0xf8, 0x11, 0x03, 0x82, 0x00, 0xc6, 0xf9, + 0xab, 0x05, 0x5f, 0x07, 0xcb, 0xf9, 0xc7, 0xf9, 0x52, 0xfb, 0x4d, 0x01, + 0x73, 0x00, 0xc8, 0x03, 0x7e, 0x04, 0xb7, 0xfe, 0x7d, 0xfa, 0x5b, 0xfe, + 0x4f, 0x01, 0xcc, 0xff, 0x9a, 0x04, 0x60, 0x03, 0x9f, 0xfc, 0xa3, 0xfa, + 0x65, 0x02, 0x74, 0x03, 0x6f, 0xfe, 0x42, 0xff, 0xe2, 0x02, 0x1f, 0xff, + 0xbb, 0xfc, 0x43, 0x03, 0x7a, 0x04, 0xbe, 0xf9, 0x24, 0xfb, 0x78, 0x08, + 0x3f, 0xfd, 0x53, 0xf7, 0xca, 0x0a, 0x3d, 0x04, 0x4a, 0xf2, 0xf1, 0x00, + 0x6c, 0x08, 0x65, 0xfc, 0x5c, 0xff, 0x83, 0x03, 0x97, 0x03, 0x0e, 0xf8, + 0x44, 0xf6, 0x48, 0x09, 0xef, 0x08, 0x52, 0xfd, 0x8a, 0xfb, 0xde, 0xfe, + 0x21, 0xfd, 0x23, 0x01, 0x87, 0x04, 0xa5, 0xff, 0x45, 0xfd, 0x54, 0x02, + 0xa7, 0xff, 0xa0, 0xfc, 0xc3, 0x00, 0x47, 0x06, 0x5c, 0xff, 0x60, 0xf9, + 0x39, 0xfe, 0x49, 0x03, 0x92, 0x03, 0x7b, 0xff, 0x84, 0x00, 0x1d, 0x04, + 0xd5, 0xfc, 0x9d, 0xf9, 0xa4, 0x03, 0xff, 0x06, 0x53, 0xfd, 0x09, 0xfe, + 0x9b, 0x01, 0x0b, 0xff, 0x5a, 0xfb, 0xb8, 0x00, 0xee, 0x07, 0x77, 0xfe, + 0x23, 0xfa, 0x9a, 0x01, 0x4e, 0x02, 0x5c, 0xf6, 0x3b, 0x00, 0xe0, 0x0d, + 0x08, 0xfe, 0xb5, 0xf7, 0x4d, 0x02, 0x75, 0x01, 0x58, 0xff, 0x0e, 0x00, + 0xbd, 0xff, 0x05, 0xfb, 0xe5, 0xfe, 0x34, 0x07, 0xb5, 0x02, 0xab, 0xfc, + 0x5d, 0xfd, 0x4d, 0x01, 0x55, 0x01, 0xe3, 0xfd, 0xde, 0x00, 0x4c, 0x02, + 0x1b, 0xfe, 0xeb, 0xfe, 0x19, 0x01, 0x92, 0x00, 0xfc, 0xfe, 0xe5, 0xfe, + 0x51, 0x02, 0x2c, 0x02, 0xf1, 0xfd, 0x9c, 0xfe, 0x40, 0xfc, 0x89, 0x00, + 0x44, 0x06, 0x84, 0xff, 0x8a, 0xfc, 0x40, 0x05, 0xd2, 0xfe, 0x76, 0xf6, + 0xdd, 0x02, 0xe9, 0x09, 0x87, 0x02, 0x5d, 0xf6, 0xa7, 0xf9, 0x69, 0x05, + 0x8c, 0x02, 0xba, 0xff, 0x0b, 0x03, 0xe2, 0xfe, 0xa4, 0xfd, 0xed, 0x00, + 0x5f, 0x00, 0x39, 0xff, 0x2b, 0x00, 0x45, 0x02, 0x9a, 0x00, 0xd1, 0x00, + 0x52, 0xff, 0xb8, 0xfd, 0x20, 0x00, 0x83, 0x01, 0xb7, 0xff, 0x87, 0x02, + 0xf4, 0x01, 0x1b, 0xfb, 0xc9, 0xfd, 0xf7, 0x02, 0x05, 0x00, 0xc4, 0xfd, + 0x51, 0xfd, 0x2c, 0x02, 0x4b, 0x07, 0xe7, 0xfe, 0xeb, 0xf5, 0x11, 0x01, + 0x5b, 0x07, 0x3d, 0xf9, 0x0a, 0xfd, 0x13, 0x0e, 0x25, 0x01, 0x4b, 0xf4, + 0xb3, 0x00, 0x4c, 0xfe, 0x64, 0xfe, 0x66, 0x09, 0x4c, 0x04, 0xe0, 0xf9, + 0xa5, 0xfe, 0x86, 0xfd, 0x8a, 0xff, 0xd1, 0x02, 0x5c, 0x04, 0x5d, 0xff, + 0x40, 0xfa, 0x05, 0x01, 0xb7, 0x04, 0xdd, 0xfc, 0xe9, 0xfe, 0x91, 0x03, + 0x85, 0xfd, 0xef, 0xff, 0xe3, 0x05, 0xa9, 0x02, 0x27, 0xfc, 0x51, 0xfd, + 0x9a, 0xfc, 0x66, 0x03, 0x9c, 0x07, 0xa2, 0xfe, 0xa0, 0xfb, 0x42, 0xfc, + 0x8e, 0xfd, 0x13, 0x05, 0x57, 0x07, 0x0e, 0xfd, 0xf3, 0xff, 0xbe, 0x01, + 0x2c, 0xf8, 0x04, 0xfb, 0xa5, 0x09, 0xfb, 0x06, 0x71, 0xfa, 0x5c, 0xfd, + 0x3e, 0x01, 0x28, 0xfd, 0xa2, 0xff, 0x8a, 0x03, 0xf9, 0x02, 0x35, 0xfe, + 0x74, 0xfd, 0x29, 0xfe, 0x68, 0xfe, 0x05, 0x03, 0x33, 0x09, 0x75, 0x01, + 0x6f, 0xf3, 0xab, 0xf6, 0xbc, 0x08, 0xc2, 0x0c, 0x54, 0xfe, 0x68, 0xfc, + 0xc0, 0xfc, 0x84, 0xf6, 0x26, 0x03, 0xc9, 0x0a, 0x65, 0xfb, 0x27, 0xf7, + 0x12, 0x07, 0x4c, 0x03, 0x4d, 0xf9, 0xe1, 0x03, 0x0b, 0x07, 0x4c, 0xf6, + 0xd2, 0xf8, 0x84, 0x09, 0xe3, 0x05, 0x90, 0x00, 0x1d, 0xfd, 0xc5, 0xff, + 0x5c, 0xff, 0x31, 0xfd, 0x2b, 0x03, 0x1c, 0x03, 0xf7, 0x00, 0xb6, 0xff, + 0x3c, 0xfe, 0x39, 0xfe, 0xec, 0x03, 0x18, 0xfe, 0x88, 0xfc, 0xba, 0x05, + 0x53, 0x02, 0x0a, 0x00, 0x02, 0xfd, 0x84, 0x00, 0x60, 0x01, 0x03, 0xfc, + 0x8f, 0x01, 0xa2, 0x05, 0x8d, 0xfb, 0x53, 0xf9, 0xa1, 0x00, 0xb6, 0x05, + 0xfb, 0x02, 0xbc, 0xfa, 0x24, 0xf9, 0x08, 0x07, 0xf1, 0x05, 0x19, 0xf9, + 0x4e, 0x00, 0x08, 0x03, 0x57, 0xf9, 0x6a, 0x00, 0x01, 0x07, 0x79, 0x04, + 0x0d, 0xfd, 0x55, 0xfc, 0xa2, 0xfe, 0x97, 0xfd, 0xb7, 0x00, 0xba, 0x0a, + 0x3f, 0x03, 0xf2, 0xf8, 0xf6, 0xfa, 0x89, 0xff, 0x5f, 0x00, 0x52, 0x02, + 0xfd, 0x01, 0x14, 0x03, 0x84, 0x01, 0x9e, 0xfa, 0xb1, 0xfd, 0xed, 0x01, + 0xa2, 0x01, 0xde, 0x02, 0x84, 0xff, 0xfe, 0xf9, 0xce, 0x00, 0xf3, 0xfe, + 0x36, 0x04, 0xc8, 0x06, 0x6f, 0xf6, 0xd7, 0xfc, 0xb1, 0x05, 0x1a, 0xfc, + 0xab, 0xfb, 0x86, 0x0c, 0x2b, 0x03, 0x3a, 0xf9, 0x2d, 0xfc, 0x32, 0xfc, + 0x89, 0x01, 0x6b, 0x01, 0x1c, 0x09, 0x02, 0x07, 0x42, 0xf9, 0x27, 0xf6, + 0x53, 0xfd, 0x41, 0x00, 0xdb, 0x01, 0xec, 0x0b, 0x6c, 0x06, 0xf2, 0xf3, + 0x24, 0xfc, 0xc7, 0x05, 0xa8, 0xf9, 0x52, 0xf9, 0xd7, 0x0c, 0x70, 0x06, + 0xd0, 0xf3, 0x07, 0xfe, 0x87, 0x07, 0x87, 0xfd, 0xe0, 0xfe, 0x82, 0x06, + 0x25, 0xfe, 0x2d, 0xf5, 0xc6, 0xfe, 0x72, 0x07, 0x01, 0x03, 0x1a, 0x02, + 0x40, 0x02, 0x7e, 0xfd, 0x83, 0xf9, 0x28, 0xfd, 0x26, 0x05, 0x25, 0x02, + 0x32, 0x04, 0xa8, 0xf9, 0x8b, 0xf8, 0x74, 0x0a, 0xb5, 0x0d, 0x3c, 0xf8, + 0x2f, 0xf2, 0x10, 0x08, 0x88, 0x03, 0xa2, 0xfa, 0xf1, 0x05, 0x5a, 0x05, + 0xf4, 0xf8, 0x7c, 0xf9, 0xb6, 0x06, 0xc7, 0x09, 0x2a, 0xfe, 0x95, 0xf8, + 0x3c, 0xfd, 0x32, 0xfe, 0x13, 0xfd, 0xfe, 0xfe, 0x61, 0x08, 0x0c, 0x0e, + 0x70, 0xf7, 0x9e, 0xf5, 0xe7, 0x07, 0xcb, 0x01, 0xa8, 0xf3, 0x92, 0x04, + 0xce, 0x0a, 0x8f, 0x00, 0xe6, 0x01, 0xac, 0xf9, 0xa3, 0xf4, 0xb2, 0xfe, + 0x0e, 0x02, 0x13, 0x06, 0x40, 0x01, 0x91, 0xf9, 0xe2, 0xff, 0xdb, 0x00, + 0xc7, 0xfd, 0x25, 0xfd, 0xe7, 0x01, 0x99, 0x08, 0xf8, 0x05, 0xdf, 0xf6, + 0x5b, 0xf8, 0x43, 0x05, 0xed, 0x02, 0x88, 0xf3, 0x1d, 0x03, 0x36, 0x08, + 0xb8, 0xfc, 0x79, 0x08, 0x09, 0x02, 0x60, 0xf7, 0xe0, 0xf3, 0xff, 0xfe, + 0xf0, 0x0c, 0x7e, 0x11, 0x8b, 0x02, 0x64, 0xed, 0x7a, 0xf5, 0xa5, 0x07, + 0x26, 0x08, 0x5a, 0x02, 0xd0, 0x06, 0x1a, 0x03, 0xda, 0xf0, 0x55, 0xf4, + 0x2e, 0x09, 0xd6, 0x07, 0xc9, 0x04, 0xbd, 0xfb, 0x71, 0xf8, 0xad, 0xfb, + 0xcf, 0x05, 0x04, 0x07, 0x4a, 0xfe, 0xad, 0xfb, 0x41, 0x00, 0xc4, 0xff, + 0x04, 0xfd, 0xff, 0x0b, 0x9b, 0x04, 0x13, 0xf1, 0xe3, 0xf8, 0x77, 0x04, + 0xc2, 0xff, 0x4e, 0x07, 0x14, 0x05, 0xbc, 0xf2, 0xd4, 0xfa, 0x6a, 0x06, + 0xfe, 0xff, 0xeb, 0x05, 0x65, 0x00, 0x07, 0xf5, 0xf2, 0x00, 0x13, 0x0a, + 0x37, 0x00, 0x90, 0xfd, 0x5f, 0x02, 0x6d, 0xfb, 0xf8, 0xf8, 0xa0, 0x07, + 0x56, 0x0e, 0x8e, 0xef, 0xcf, 0xfa, 0xf0, 0x15, 0x77, 0xf6, 0x9e, 0xf1, + 0x15, 0x11, 0x34, 0x01, 0x44, 0xee, 0xf4, 0xfd, 0xbb, 0x0b, 0x52, 0x00, + 0x4c, 0xfd, 0x8e, 0x07, 0x91, 0xf8, 0x34, 0xf9, 0xe8, 0x10, 0xa8, 0x05, + 0xd5, 0xf9, 0x71, 0x02, 0xaf, 0xf8, 0x99, 0xf4, 0x61, 0x09, 0x93, 0x09, + 0x66, 0xfd, 0xc7, 0x01, 0x1f, 0xf8, 0x30, 0xf7, 0x8d, 0xfe, 0xcb, 0x00, + 0x47, 0x07, 0x1a, 0x04, 0x24, 0xf9, 0x43, 0x02, 0x46, 0x00, 0xc2, 0xfa, + 0xdd, 0x05, 0x11, 0x06, 0x00, 0xf9, 0x32, 0xfe, 0x44, 0x03, 0x5f, 0xf6, + 0x33, 0xff, 0xc1, 0x09, 0x53, 0xfe, 0x37, 0x0c, 0xef, 0x00, 0x27, 0xe5, + 0xb8, 0xfa, 0x05, 0x1b, 0x13, 0x0c, 0xa4, 0xed, 0xd3, 0xee, 0x64, 0x04, + 0x9f, 0x03, 0xf5, 0x00, 0xc0, 0x10, 0x12, 0xfa, 0xc7, 0xed, 0xb2, 0x02, + 0xc2, 0x08, 0x2b, 0xfd, 0x25, 0x06, 0x13, 0x10, 0x25, 0xf6, 0x00, 0xeb, + 0x52, 0x04, 0x01, 0x0c, 0x21, 0x05, 0x49, 0xf7, 0x0e, 0xf8, 0x59, 0x0a, + 0xd8, 0x03, 0x2e, 0xf8, 0x3d, 0x00, 0xd2, 0xfb, 0x90, 0x00, 0x48, 0x05, + 0xf2, 0x02, 0x52, 0xfe, 0x8c, 0xfc, 0x76, 0x05, 0x3e, 0x05, 0x35, 0xfc, + 0xbf, 0xfe, 0xb1, 0x05, 0x23, 0x00, 0xbf, 0xfa, 0x1a, 0xf7, 0xf7, 0x04, + 0x85, 0x0e, 0xba, 0xeb, 0x0b, 0xf7, 0x2a, 0x13, 0xd1, 0xfc, 0xf5, 0xf2, + 0xd0, 0x06, 0xae, 0x08, 0x1d, 0xf2, 0xf6, 0x01, 0xb9, 0x09, 0x6f, 0xf9, + 0xa0, 0xfb, 0x73, 0xfe, 0xe6, 0x08, 0x2f, 0xff, 0xc4, 0xf7, 0x8e, 0x09, + 0xc7, 0x01, 0x57, 0xef, 0xb7, 0x06, 0xa4, 0x0a, 0xb6, 0xf7, 0x04, 0x07, + 0xad, 0xff, 0x0d, 0xee, 0xe8, 0x06, 0xd1, 0x0d, 0x15, 0xfd, 0xdc, 0x07, + 0xa4, 0xfb, 0x46, 0xe8, 0xd7, 0xff, 0x6e, 0x1e, 0x36, 0x08, 0xf3, 0xea, + 0xa4, 0xf5, 0x2d, 0x03, 0x63, 0x00, 0x09, 0x08, 0x6d, 0x0b, 0xfb, 0xf6, + 0xdc, 0xe5, 0xb6, 0xf9, 0xe0, 0x1a, 0xbd, 0x0d, 0xb3, 0xfb, 0xbc, 0xfa, + 0x87, 0xf3, 0x92, 0xf1, 0xf1, 0x09, 0x2e, 0x14, 0xb2, 0x00, 0xaa, 0xf9, + 0xdd, 0xf4, 0xd6, 0xf5, 0x2f, 0x04, 0xfd, 0x10, 0x5d, 0xf4, 0x05, 0xf7, + 0x3f, 0x11, 0xf8, 0x02, 0xa4, 0xf2, 0xe2, 0x00, 0x2b, 0xf9, 0x81, 0xfb, + 0x99, 0x10, 0xc6, 0x0e, 0xa4, 0xfb, 0xee, 0xf0, 0x9c, 0xfe, 0xa6, 0x06, + 0x9f, 0xfc, 0x75, 0x03, 0x06, 0x05, 0x8c, 0x0f, 0xd2, 0xf9, 0x7e, 0xdd, + 0x46, 0x04, 0xef, 0x15, 0x87, 0xf4, 0x70, 0xf9, 0x0b, 0x12, 0x98, 0xfe, + 0x81, 0xf2, 0x66, 0xfd, 0x4c, 0x07, 0x93, 0xfa, 0x4f, 0xfc, 0x4f, 0x00, + 0x5d, 0x03, 0x05, 0x0b, 0x82, 0x09, 0xdc, 0xf3, 0xed, 0xf4, 0x43, 0x0a, + 0x60, 0x04, 0x68, 0xf4, 0x15, 0x05, 0xe3, 0x0b, 0xf2, 0xf4, 0x90, 0xf5, + 0x2b, 0x09, 0x98, 0x03, 0x8a, 0xfb, 0x8c, 0x02, 0xe1, 0x03, 0x24, 0xfc, + 0x48, 0xf9, 0x54, 0x01, 0x02, 0xfb, 0x2e, 0xfa, 0xa2, 0x0d, 0x94, 0x09, + 0xdc, 0xf8, 0xcb, 0xfc, 0x9b, 0x0d, 0x18, 0xfe, 0x1c, 0xe9, 0x98, 0x04, + 0x8e, 0x12, 0xf3, 0xf5, 0x34, 0xfd, 0x88, 0x0e, 0xeb, 0xf8, 0xf6, 0xec, + 0xfe, 0xff, 0x1f, 0x19, 0x22, 0x11, 0x56, 0xf3, 0x82, 0xe6, 0xb4, 0xfc, + 0xa5, 0x12, 0xfa, 0x04, 0xcb, 0xf5, 0xc8, 0x04, 0x05, 0x09, 0xc0, 0xf8, + 0xa5, 0xed, 0xe0, 0x03, 0x18, 0x11, 0xbc, 0x02, 0xc5, 0xf1, 0x72, 0xf9, + 0x25, 0x08, 0x7b, 0xfb, 0x53, 0xf2, 0x2d, 0x14, 0xfb, 0x15, 0x71, 0xf1, + 0x27, 0xf1, 0x4b, 0x01, 0x99, 0xf9, 0x41, 0x06, 0x2b, 0x14, 0x26, 0xf9, + 0xf9, 0xe9, 0x87, 0x07, 0xba, 0x0c, 0xe3, 0xf8, 0x6e, 0xfe, 0x28, 0x02, + 0x64, 0x05, 0x5f, 0xfe, 0x83, 0xfd, 0xae, 0xfe, 0x94, 0x03, 0x8e, 0x03, + 0x2c, 0x04, 0xa3, 0xf8, 0x23, 0xf5, 0x0d, 0x0c, 0x84, 0x0c, 0xb6, 0xfa, + 0x79, 0xff, 0x77, 0xf9, 0x51, 0xf3, 0x79, 0x03, 0x11, 0x08, 0x1a, 0xfa, + 0xf3, 0xf9, 0x8a, 0x0c, 0xb6, 0x08, 0x85, 0xed, 0x6b, 0xf9, 0x92, 0x0b, + 0x54, 0x00, 0x6d, 0xfd, 0xcb, 0x06, 0x17, 0xfd, 0xd2, 0xf7, 0xe6, 0x03, + 0x74, 0xfa, 0xa6, 0xf5, 0x4f, 0x10, 0x82, 0x0d, 0x21, 0xf7, 0x81, 0x02, + 0xe6, 0x03, 0x7c, 0xee, 0x9d, 0xf6, 0x98, 0x0f, 0xcd, 0x06, 0x3d, 0xf7, + 0x21, 0x10, 0xdd, 0x06, 0x64, 0xe6, 0x66, 0xf5, 0xe8, 0x14, 0xc7, 0x05, + 0xda, 0xf7, 0xee, 0x03, 0x09, 0xfe, 0x22, 0xf5, 0xfc, 0x00, 0xa1, 0x05, + 0xf6, 0x02, 0x9d, 0x09, 0xff, 0xfa, 0xff, 0xee, 0x29, 0xfa, 0xfd, 0x08, + 0x86, 0x12, 0x8d, 0xf7, 0x17, 0xef, 0xf6, 0x0b, 0x11, 0x01, 0x1e, 0xef, + 0x7e, 0x0d, 0x18, 0x15, 0x4b, 0xf7, 0x20, 0xed, 0x7d, 0xfb, 0xa5, 0xff, + 0x9f, 0x0c, 0x83, 0x0e, 0x60, 0xec, 0xa9, 0xf6, 0xd1, 0x12, 0xef, 0x02, + 0xdb, 0x04, 0xbd, 0x07, 0x66, 0xee, 0xaa, 0xfb, 0x6b, 0x0b, 0x54, 0xfc, + 0x84, 0xf8, 0x87, 0x09, 0xf1, 0x0d, 0xde, 0xfe, 0x69, 0xe8, 0xd1, 0xf8, + 0x42, 0x13, 0x51, 0x1f, 0xea, 0xf8, 0x29, 0xe7, 0x1d, 0xf7, 0x2c, 0xfc, + 0xf9, 0xf8, 0x55, 0x0a, 0x22, 0x13, 0xdf, 0xf2, 0x2e, 0xf2, 0xb5, 0x04, + 0x58, 0x03, 0x65, 0x01, 0xd3, 0x09, 0xb7, 0xff, 0x22, 0xf4, 0xec, 0xfc, + 0x4a, 0xff, 0x78, 0x04, 0xfe, 0x11, 0x74, 0x03, 0x5f, 0xf8, 0xa3, 0xfc, + 0x46, 0x01, 0x74, 0xfe, 0x7e, 0xfc, 0x3a, 0x03, 0xe9, 0xfe, 0xf3, 0x00, + 0x6d, 0xfa, 0x11, 0xfe, 0x52, 0x08, 0xde, 0x04, 0x7e, 0xfe, 0x5a, 0xfc, + 0xc2, 0xfc, 0x54, 0xfd, 0xa9, 0x06, 0xf9, 0x0b, 0x66, 0x03, 0x2c, 0xee, + 0x39, 0xf5, 0x4d, 0x11, 0xda, 0x04, 0xe3, 0xf6, 0x2f, 0xfa, 0x74, 0xfc, + 0x5a, 0x0c, 0xa8, 0x05, 0xe8, 0xf4, 0xb5, 0x05, 0xf0, 0xfa, 0x32, 0xea, + 0x5f, 0x0a, 0x91, 0x1c, 0xad, 0xff, 0x42, 0xeb, 0x09, 0x01, 0x74, 0x08, + 0xd6, 0xf7, 0x14, 0x04, 0xef, 0x12, 0xb2, 0xf9, 0xf7, 0xe4, 0x8e, 0xfa, + 0x2c, 0x10, 0xd4, 0x0a, 0x15, 0xfd, 0x16, 0xfd, 0xb7, 0xfc, 0x6c, 0x00, + 0xb9, 0xf9, 0x1e, 0xf7, 0xf9, 0x07, 0x63, 0x0d, 0xd9, 0xfc, 0xc6, 0xf6, + 0xca, 0x07, 0xf6, 0xfe, 0x51, 0xf8, 0x9b, 0x05, 0xa6, 0x07, 0x74, 0xfd, + 0xd8, 0xfc, 0xfc, 0xfc, 0xa0, 0x06, 0xe2, 0x0e, 0x2a, 0xf0, 0xf7, 0xed, + 0x72, 0xfc, 0xed, 0x02, 0x79, 0x16, 0x19, 0x08, 0x79, 0xf1, 0x93, 0xf8, + 0xe2, 0x00, 0x5d, 0xff, 0x9c, 0xfc, 0x76, 0x03, 0xa4, 0x10, 0x4d, 0x0e, + 0xb6, 0xf6, 0xcd, 0xed, 0x6a, 0x02, 0xcb, 0x02, 0xf3, 0x01, 0x47, 0x08, + 0x7d, 0x05, 0xb7, 0xf7, 0x0b, 0xf9, 0xd7, 0x02, 0xb9, 0x01, 0xb1, 0xf7, + 0x23, 0xfe, 0x93, 0x13, 0x7f, 0x0a, 0xb2, 0xef, 0x57, 0xf4, 0x77, 0x02, + 0xce, 0x00, 0x85, 0x03, 0xc8, 0xfe, 0xaf, 0xfb, 0x39, 0x10, 0x79, 0x03, + 0xab, 0xed, 0x1d, 0xfe, 0x62, 0x01, 0xcc, 0xfc, 0xce, 0x06, 0x2f, 0xfd, + 0x5e, 0xf5, 0x24, 0x02, 0x6c, 0x04, 0x29, 0x03, 0x72, 0x00, 0xbd, 0x07, + 0xc7, 0xfc, 0xc1, 0xee, 0x36, 0xf9, 0xe5, 0x11, 0x60, 0x0a, 0x22, 0xfe, + 0xa4, 0xf7, 0x14, 0xfa, 0xd5, 0x02, 0x09, 0x00, 0x7a, 0xf9, 0x34, 0x03, + 0x07, 0x0c, 0xbf, 0xfb, 0x11, 0x01, 0x6f, 0xfb, 0x71, 0xfc, 0x52, 0x04, + 0xb0, 0x01, 0xe0, 0x02, 0x3d, 0xff, 0x6e, 0xfc, 0x57, 0xfd, 0x1f, 0xfb, + 0xc1, 0x03, 0x25, 0x09, 0x5e, 0x07, 0xaf, 0xf7, 0x20, 0xf8, 0x27, 0x04, + 0x26, 0x06, 0xf3, 0x06, 0xe6, 0xf5, 0x2b, 0xfa, 0x8b, 0x08, 0x53, 0xee, + 0xc8, 0x00, 0x2c, 0x1a, 0x82, 0x04, 0x97, 0xf9, 0x9a, 0xfc, 0xb4, 0xf0, + 0x1b, 0xec, 0xc1, 0x0b, 0x86, 0x10, 0x9e, 0x02, 0x7e, 0xf8, 0xd3, 0xfd, + 0x03, 0xf2, 0xfd, 0xf6, 0x35, 0x14, 0x88, 0x11, 0x84, 0xec, 0x75, 0xed, + 0xf7, 0x07, 0x4d, 0x00, 0x13, 0x06, 0xa4, 0x12, 0x6c, 0x01, 0x0c, 0xee, + 0xa3, 0xf3, 0xfe, 0x09, 0x9f, 0x14, 0x2c, 0x02, 0x8a, 0xf8, 0xda, 0xfd, + 0x9e, 0x09, 0x91, 0xfd, 0x3c, 0xf9, 0xca, 0x05, 0xc7, 0x0a, 0xd7, 0xfd, + 0xda, 0xea, 0x49, 0xec, 0x4e, 0x10, 0x6d, 0x1a, 0xb3, 0xf7, 0x69, 0xeb, + 0x42, 0x00, 0x31, 0x10, 0x8d, 0x02, 0x28, 0xf2, 0x3c, 0x05, 0x82, 0xf6, + 0x88, 0xf6, 0x16, 0x04, 0x4e, 0x00, 0xb4, 0x0a, 0x1b, 0x0b, 0x9f, 0xf5, + 0xbe, 0xed, 0x22, 0xf9, 0xcf, 0xfc, 0x9c, 0x0e, 0xac, 0x08, 0xd7, 0xf9, + 0x5f, 0xfa, 0x22, 0xfd, 0x03, 0xff, 0x1b, 0x11, 0xa0, 0x07, 0x04, 0xf2, + 0x48, 0x00, 0xcd, 0x08, 0x13, 0xff, 0xab, 0x03, 0x3f, 0x02, 0x1e, 0xfb, + 0xe9, 0xff, 0x96, 0xf4, 0x4d, 0xf3, 0x9e, 0x03, 0x2b, 0x10, 0x5f, 0x09, + 0xa6, 0xf8, 0x27, 0xf4, 0xbf, 0xf1, 0x64, 0xfd, 0xdd, 0x0c, 0x6c, 0x0c, + 0x32, 0xf8, 0x4d, 0xfa, 0x9c, 0x05, 0xfa, 0xf9, 0xbb, 0xfa, 0xb5, 0x09, + 0xe9, 0x08, 0x37, 0xff, 0x48, 0xf4, 0x39, 0xf5, 0x0a, 0x02, 0xf9, 0x09, + 0x98, 0x07, 0x5b, 0xfe, 0xa6, 0xff, 0x4a, 0x00, 0x3d, 0xf8, 0xae, 0x04, + 0xb3, 0x09, 0x32, 0x03, 0xe5, 0xfd, 0xd7, 0xf9, 0xab, 0xf2, 0x4a, 0x02, + 0xae, 0x0f, 0xf2, 0x0b, 0x8b, 0xff, 0x4c, 0xdf, 0x6b, 0xee, 0x91, 0x23, + 0x77, 0x11, 0x47, 0xe6, 0xe9, 0xf6, 0xac, 0x06, 0x91, 0xf4, 0xe1, 0xf5, + 0xe0, 0x06, 0xde, 0x0b, 0xa0, 0x03, 0x38, 0xfe, 0xb1, 0xfb, 0x8f, 0xf9, + 0x0d, 0xfa, 0x1a, 0x04, 0x9b, 0xfe, 0xfd, 0x07, 0xe1, 0x0b, 0x0d, 0xfe, + 0x2b, 0xef, 0x9a, 0xf8, 0x95, 0x0c, 0xa8, 0x02, 0x58, 0xfc, 0xd0, 0xff, + 0xf1, 0xfc, 0xa1, 0xf9, 0x79, 0xfe, 0x14, 0x00, 0x0a, 0x08, 0x98, 0x07, + 0xd7, 0xfc, 0x67, 0xe9, 0xf2, 0xf5, 0x3d, 0x10, 0xf4, 0x19, 0x63, 0x09, + 0xa7, 0xf7, 0x95, 0xf0, 0x2e, 0xf1, 0x14, 0xfd, 0xa5, 0x10, 0x63, 0x0f, + 0xef, 0x10, 0x85, 0xf8, 0x80, 0xeb, 0x61, 0xf7, 0x77, 0x06, 0x5c, 0x10, + 0xc6, 0x09, 0xcb, 0x05, 0xed, 0xf5, 0x4e, 0xe7, 0x73, 0xf3, 0x94, 0x1a, + 0x8a, 0x13, 0xf9, 0xfc, 0x1b, 0xf5, 0x4a, 0xf8, 0x78, 0xfd, 0xa6, 0xf8, + 0x6f, 0x05, 0xc0, 0x13, 0x87, 0xfd, 0xb7, 0xe8, 0x35, 0xfd, 0xe3, 0xfe, + 0x26, 0x06, 0x14, 0x09, 0x26, 0xf5, 0xf2, 0xf6, 0x98, 0x06, 0x14, 0xfb, + 0xb1, 0xf3, 0x3e, 0x04, 0xfc, 0x0b, 0x36, 0xfe, 0x4b, 0xf5, 0x59, 0xfd, + 0xe3, 0x02, 0x44, 0x04, 0x85, 0xfe, 0xad, 0xfd, 0xe3, 0x0b, 0x28, 0x04, + 0xb2, 0xf5, 0xe8, 0x07, 0xd5, 0x06, 0x5b, 0xfb, 0x86, 0x14, 0xac, 0x09, + 0xdc, 0xe6, 0x53, 0xf9, 0xf7, 0x14, 0xee, 0x03, 0x3d, 0xfe, 0xf5, 0xfd, + 0xe6, 0xfa, 0xa9, 0xf9, 0x47, 0x00, 0x9a, 0x03, 0xbc, 0xff, 0xbf, 0x07, + 0x44, 0x03, 0xbb, 0x01, 0x28, 0xfc, 0x97, 0x04, 0x0a, 0x0b, 0x6c, 0xf7, + 0x6d, 0xf2, 0xf6, 0xf9, 0xa8, 0xfd, 0xec, 0x0b, 0xa3, 0x06, 0x79, 0xfb, + 0x8f, 0xf8, 0xfb, 0xf2, 0x32, 0xf8, 0xd1, 0x00, 0x3e, 0x04, 0xb7, 0x07, + 0x60, 0xfe, 0x51, 0xf8, 0xcf, 0xfa, 0xbf, 0xfb, 0xae, 0x01, 0x0e, 0x0c, + 0x51, 0x04, 0xa2, 0xfd, 0xef, 0xff, 0xad, 0xfd, 0x0a, 0xff, 0x29, 0x07, + 0x25, 0x04, 0x07, 0x06, 0x27, 0xfe, 0x2f, 0xfe, 0x89, 0xff, 0xbf, 0x05, + 0x5f, 0x06, 0xb1, 0x00, 0x3e, 0xf9, 0xf6, 0xfa, 0x23, 0x01, 0x10, 0x04, + 0xc6, 0x0a, 0x15, 0xfb, 0x2f, 0xf7, 0x61, 0xfe, 0x62, 0x01, 0xfe, 0x03, + 0x5d, 0x01, 0x89, 0x00, 0x6d, 0xfb, 0xd4, 0xff, 0x21, 0x02, 0xb0, 0x05, + 0xd1, 0x03, 0x1f, 0xfc, 0x73, 0xfe, 0x45, 0x04, 0xd1, 0xf6, 0xef, 0xf5, + 0xcd, 0x05, 0xaa, 0x0e, 0xc0, 0x06, 0x12, 0xf6, 0xdc, 0xf7, 0xbe, 0x01, + 0x80, 0xfe, 0xdb, 0xfa, 0xa3, 0x04, 0xd1, 0x02, 0x99, 0xef, 0xf1, 0x02, + 0xfd, 0x0c, 0xba, 0x03, 0x95, 0x07, 0xdb, 0xfb, 0x6d, 0xf3, 0x24, 0xfe, + 0x5d, 0x07, 0xec, 0xff, 0x7c, 0x04, 0xb2, 0xf9, 0x48, 0xfa, 0xf7, 0xff, + 0x0c, 0x02, 0x2b, 0x00, 0xca, 0x0b, 0xd8, 0x03, 0x55, 0xf4, 0x6c, 0xf4, + 0x7c, 0xfe, 0x20, 0xfd, 0x0c, 0xfd, 0x2c, 0x05, 0xcb, 0x0a, 0x67, 0x08, + 0x30, 0xfc, 0xe0, 0xfd, 0xb4, 0x00, 0x1d, 0xff, 0x52, 0x06, 0x4b, 0x0d, + 0x93, 0x07, 0x02, 0x01, 0xef, 0xf1, 0x09, 0xf7, 0xb4, 0x07, 0xf4, 0x05, + 0x49, 0xf8, 0x19, 0x00, 0xf3, 0x09, 0x1d, 0xfe, 0x1b, 0xfe, 0xb3, 0x04, + 0xbc, 0x01, 0x21, 0xf3, 0x1d, 0xf7, 0xbc, 0xfc, 0x7a, 0x02, 0xab, 0x04, + 0xca, 0x05, 0xe0, 0x02, 0xa4, 0x00, 0x96, 0xfd, 0x80, 0x00, 0xdd, 0x06, + 0x18, 0x0a, 0xf2, 0xfe, 0xd3, 0xf7, 0x40, 0xfe, 0x80, 0xfb, 0xdb, 0x04, + 0xde, 0x08, 0xe6, 0xfa, 0xb8, 0xfa, 0x46, 0x02, 0xd9, 0xff, 0x99, 0xfe, + 0x45, 0x04, 0x77, 0x00, 0x8d, 0xf9, 0x1b, 0x03, 0xf7, 0x03, 0x77, 0x0d, + 0xd4, 0x09, 0x61, 0xfb, 0xbe, 0xfb, 0x96, 0xfd, 0xf7, 0x00, 0x84, 0x02, + 0xed, 0x05, 0xc3, 0x04, 0x62, 0xff, 0x50, 0xfa, 0x47, 0xff, 0x03, 0x00, + 0x26, 0xf9, 0x5d, 0xf7, 0x9f, 0x00, 0x88, 0x05, 0x2c, 0x04, 0x45, 0xff, + 0xc1, 0xf6, 0x0d, 0xf9, 0x19, 0x00, 0x17, 0x04, 0x06, 0x0a, 0x42, 0x04, + 0x30, 0xfe, 0x83, 0xfb, 0x4a, 0xfb, 0x4f, 0x00, 0xbc, 0x05, 0x88, 0x0c, + 0xbc, 0x04, 0x20, 0x00, 0xd0, 0x00, 0x7f, 0xfe, 0x51, 0xfc, 0x19, 0xfd, + 0xaf, 0x00, 0x39, 0x06, 0x9e, 0x03, 0xdc, 0xff, 0x21, 0x00, 0x79, 0x01, + 0xd3, 0xfd, 0xc3, 0xfb, 0x2f, 0xff, 0x2a, 0x08, 0x15, 0x05, 0x5b, 0xfb, + 0x01, 0xfa, 0x43, 0xfa, 0x7a, 0xfd, 0x3b, 0x04, 0xc0, 0xfd, 0x2b, 0xfd, + 0x2d, 0x06, 0xcc, 0x02, 0x66, 0x00, 0xaa, 0x02, 0x8c, 0xfc, 0x3d, 0xf8, + 0x3f, 0x04, 0x8b, 0x06, 0x82, 0x0a, 0x7c, 0x08, 0x73, 0xf6, 0x86, 0xf7, + 0x80, 0x04, 0xcf, 0x02, 0x53, 0x02, 0x2c, 0x06, 0x93, 0xfe, 0x79, 0xfa, + 0x55, 0x00, 0x4f, 0x03, 0x2f, 0xff, 0x66, 0xfd, 0x29, 0xfc, 0x45, 0x06, + 0x91, 0x03, 0xa9, 0xff, 0xf2, 0xf8, 0x29, 0xfb, 0x16, 0x05, 0xdf, 0x06, + 0x0d, 0x08, 0xb5, 0x08, 0x2b, 0xff, 0x2b, 0xf9, 0x37, 0xfe, 0x68, 0xfa, + 0xe1, 0xfb, 0xdd, 0x07, 0xe6, 0x05, 0x43, 0xff, 0x7d, 0x06, 0x0f, 0xfe, + 0xbc, 0xfb, 0x7f, 0xfe, 0x73, 0x03, 0xfa, 0x04, 0xc7, 0xfd, 0x6f, 0xf6, + 0x2f, 0xfa, 0xea, 0x07, 0xc9, 0x06, 0x12, 0xff, 0x6d, 0x07, 0xd8, 0x07, + 0xe4, 0xfe, 0xd6, 0xfc, 0xd0, 0x03, 0x32, 0x07, 0x30, 0xfe, 0xf9, 0xf7, + 0xe7, 0xff, 0xef, 0x08, 0x57, 0x08, 0xbf, 0x09, 0x73, 0x01, 0xf4, 0xf1, + 0xf1, 0xf0, 0x5a, 0x01, 0x0f, 0x06, 0xf9, 0x01, 0xff, 0x02, 0x91, 0xfe, + 0x7e, 0xf8, 0xf0, 0xf9, 0xdc, 0x01, 0xc0, 0x04, 0xa1, 0x01, 0xa0, 0x00, + 0xc6, 0x00, 0x70, 0xff, 0x78, 0xfc, 0xb7, 0x00, 0x18, 0xfa, 0x77, 0xf1, + 0x10, 0x01, 0xd7, 0x0b, 0xe0, 0x07, 0x5e, 0x03, 0x58, 0xff, 0xa1, 0xfc, + 0x5d, 0xfa, 0x03, 0xfe, 0x99, 0x03, 0x38, 0x02, 0x3d, 0xfa, 0x96, 0xff, + 0x8f, 0x09, 0x0d, 0x03, 0xa2, 0xff, 0x83, 0x07, 0x7f, 0x07, 0x80, 0x00, + 0x37, 0xfc, 0x4e, 0x02, 0xc0, 0x03, 0xc3, 0xff, 0x38, 0xff, 0x73, 0xff, + 0x20, 0xfe, 0xfb, 0x00, 0xa6, 0x02, 0x5f, 0xfe, 0x5c, 0xfd, 0xae, 0x06, + 0xcd, 0x01, 0x0c, 0xfc, 0x58, 0xfd, 0xcc, 0xfe, 0x80, 0xfc, 0x9a, 0xfb, + 0xc3, 0xfd, 0x89, 0x02, 0x9f, 0x07, 0x63, 0x05, 0x19, 0x00, 0x25, 0xff, + 0xc1, 0xff, 0x14, 0xf8, 0xf5, 0xf8, 0x8d, 0x02, 0xa6, 0x09, 0x26, 0x07, + 0xbd, 0x01, 0x56, 0xfd, 0x1b, 0xfa, 0x1c, 0xfb, 0x4f, 0x00, 0xaf, 0x03, + 0x57, 0x07, 0xc0, 0x03, 0x3f, 0x02, 0x20, 0x01, 0x7a, 0xff, 0x3e, 0xfd, + 0xfa, 0xff, 0x7d, 0x00, 0xbc, 0x03, 0xdc, 0x05, 0x89, 0x07, 0xec, 0x04, + 0xc4, 0xfe, 0xa3, 0xfc, 0x67, 0xfd, 0xec, 0x00, 0xc3, 0xfe, 0xd1, 0xff, + 0x0b, 0x05, 0x78, 0x01, 0x49, 0xfe, 0x33, 0xfc, 0x27, 0xfc, 0x1a, 0xfe, + 0xf8, 0x01, 0x91, 0xff, 0x9b, 0xfd, 0xa7, 0xff, 0x0e, 0xff, 0x41, 0xfe, + 0xc7, 0xfe, 0x1e, 0x00, 0xc5, 0x01, 0xb6, 0xfe, 0x04, 0x00, 0x3e, 0x00, + 0xcf, 0xfe, 0xf3, 0x01, 0xc0, 0x01, 0xf3, 0x00, 0x5a, 0x04, 0x83, 0x01, + 0x01, 0xfd, 0x8d, 0xfd, 0x14, 0xfc, 0x0e, 0xfb, 0xe9, 0x01, 0x86, 0x03, + 0x8d, 0x02, 0x03, 0x01, 0x24, 0xfe, 0xcd, 0xfc, 0xea, 0xfc, 0x84, 0xfe, + 0xde, 0x00, 0x9b, 0x01, 0x38, 0x00, 0x33, 0xff, 0x25, 0xff, 0xd8, 0xfc, + 0x98, 0xfa, 0x50, 0x00, 0xd2, 0x04, 0x91, 0x05, 0xf1, 0x04, 0xc7, 0x03, + 0xac, 0x00, 0x15, 0xff, 0xe6, 0xff, 0x1b, 0xff, 0x30, 0xfe, 0xe2, 0x00, + 0x3e, 0x01, 0x4c, 0x03, 0x54, 0xff, 0x8e, 0xfe, 0x80, 0xff, 0xbd, 0x00, + 0xf2, 0x01, 0x32, 0x02, 0x8d, 0xfe, 0x81, 0x00, 0xa9, 0xfe, 0xda, 0xfc, + 0x18, 0x00, 0x70, 0x02, 0x18, 0x01, 0x58, 0x00, 0xa9, 0x00, 0x4c, 0x02, + 0xf0, 0x03, 0xf2, 0x01, 0xa2, 0xff, 0x6e, 0xfe, 0x7f, 0xfe, 0x30, 0xfe, + 0x0e, 0x03, 0xa5, 0x04, 0x9b, 0x05, 0x56, 0x05, 0xf7, 0x04, 0xea, 0xff, + 0xb0, 0xfd, 0xe1, 0xfc, 0xe8, 0xfc, 0xb1, 0x01, 0x73, 0x06, 0x45, 0x08, + 0x08, 0x06, 0xc0, 0x02, 0x7e, 0xff, 0x85, 0x00, 0x67, 0x00, 0xcd, 0x02, + 0x64, 0x01, 0xdb, 0xfd, 0x7b, 0xfc, 0x4a, 0xfc, 0x73, 0xfc, 0x56, 0x00, + 0xf2, 0x02, 0x6f, 0x00, 0x1e, 0xfe, 0x21, 0xfd, 0x9b, 0xfc, 0xb4, 0xfd, + 0x44, 0xfe, 0x27, 0xfc, 0x42, 0xfb, 0x8b, 0xfc, 0xf8, 0xfc, 0x76, 0xfe, + 0xf3, 0x00, 0xdc, 0xfe, 0xe9, 0xfc, 0x36, 0xfe, 0xd3, 0xfb, 0x5c, 0xfb, + 0x4b, 0xfb, 0x0f, 0xfb, 0x6f, 0xfd, 0xd3, 0xfd, 0xe9, 0xff, 0x63, 0x00, + 0xae, 0xfd, 0x87, 0xfc, 0xdc, 0xfa, 0x3f, 0xfa, 0xd2, 0xfa, 0x14, 0xfa, + 0x88, 0xfa, 0x01, 0xfd, 0x55, 0xfe, 0x47, 0xfe, 0x90, 0xff, 0xcb, 0xff, + 0x26, 0x00, 0x7b, 0xfd, 0xee, 0xfa, 0x1d, 0xfb, 0xab, 0xfd, 0x45, 0xfe, + 0x41, 0xfd, 0x6b, 0xfe, 0x6c, 0xfc, 0x54, 0xfe, 0x3b, 0x01, 0xc6, 0x00, + 0xc5, 0x00, 0x95, 0x02, 0x64, 0x02, 0xa3, 0x00, 0xd8, 0xfe, 0xfa, 0xfe, + 0xf6, 0xfc, 0xa4, 0xfd, 0xf2, 0xff, 0x9e, 0x02, 0x19, 0x06, 0x90, 0x07, + 0x52, 0x04, 0xda, 0x02, 0x34, 0x02, 0x61, 0x02, 0xc6, 0x02, 0x24, 0x06, + 0xc4, 0x0a, 0xf1, 0x08, 0x66, 0x08, 0x02, 0x08, 0x26, 0x08, 0x27, 0x07, + 0xde, 0x08, 0x99, 0x06, 0x72, 0x04, 0x94, 0x02, 0x14, 0x03, 0xec, 0x04, + 0xe9, 0x02, 0x80, 0x01, 0x32, 0x05, 0xe2, 0x06, 0xa0, 0x06, 0xcc, 0x06, + 0x8b, 0x05, 0x17, 0x01, 0x98, 0xff, 0xf4, 0xff, 0x52, 0xfd, 0xbb, 0xf8, + 0xfb, 0xf9, 0xb0, 0xfe, 0x15, 0x04, 0xfd, 0x09, 0x1a, 0x05, 0x26, 0xff, + 0x9b, 0xfa, 0x27, 0xfb, 0x89, 0xfc, 0x37, 0xfd, 0x42, 0xfc, 0x6e, 0xf9, + 0xbe, 0xf8, 0xb3, 0xf8, 0xdb, 0xfb, 0x55, 0xfb, 0x30, 0xfc, 0x63, 0xf9, + 0x0f, 0xf6, 0x31, 0xf4, 0x83, 0xf4, 0x75, 0xf5, 0x48, 0xf8, 0x3c, 0xfa, + 0x5c, 0xfa, 0x09, 0xf8, 0x75, 0xf6, 0x34, 0xf7, 0xf3, 0xf5, 0x77, 0xf7, + 0x5f, 0xf8, 0xa2, 0xf8, 0x75, 0xf7, 0x88, 0xf5, 0x11, 0xf7, 0x57, 0xf7, + 0x7f, 0xfa, 0x73, 0xfd, 0x9d, 0xfd, 0x58, 0xfd, 0xfb, 0xfa, 0x80, 0xf9, + 0xa0, 0xf6, 0x74, 0xf9, 0xba, 0xff, 0x36, 0x04, 0x3b, 0x05, 0x59, 0x01, + 0xc1, 0xff, 0x63, 0xfd, 0xb9, 0x00, 0x19, 0x04, 0xaa, 0x07, 0xcf, 0x04, + 0x5e, 0x02, 0x9c, 0x00, 0x83, 0x01, 0x21, 0x08, 0x36, 0x0c, 0xed, 0x0b, + 0xaa, 0x09, 0xc7, 0x06, 0x2e, 0x05, 0x81, 0x07, 0x84, 0x08, 0xe4, 0x07, + 0xec, 0x07, 0x36, 0x08, 0x91, 0x07, 0x4d, 0x0b, 0x85, 0x0e, 0x87, 0x0d, + 0x8d, 0x0a, 0xc7, 0x08, 0xd4, 0x04, 0x31, 0x00, 0xd6, 0x02, 0x5d, 0x05, + 0x77, 0x06, 0xb5, 0x07, 0x24, 0x09, 0x7b, 0x0a, 0xf8, 0x09, 0x43, 0x09, + 0xf5, 0x04, 0x3d, 0x03, 0x25, 0x01, 0xfe, 0x01, 0x21, 0x02, 0xf5, 0x03, + 0xae, 0x07, 0x2f, 0x07, 0xdc, 0x04, 0xc6, 0x02, 0xc3, 0xff, 0x4a, 0xff, + 0x52, 0xfd, 0xe2, 0xfd, 0x3e, 0xfb, 0xe2, 0xfa, 0xde, 0xfa, 0xfc, 0xfa, + 0xa1, 0xf8, 0xeb, 0xf6, 0x3f, 0xf2, 0x6c, 0xef, 0xbc, 0xec, 0x0a, 0xec, + 0x11, 0xef, 0x65, 0xf1, 0x19, 0xf2, 0x3d, 0xf1, 0x72, 0xef, 0x0a, 0xed, + 0x61, 0xef, 0xe3, 0xf2, 0x42, 0xf2, 0x4c, 0xf1, 0xe1, 0xf1, 0x44, 0xf2, + 0xd1, 0xf1, 0x14, 0xf2, 0x60, 0xf7, 0x39, 0xfc, 0xbf, 0xff, 0x6d, 0xff, + 0xb9, 0x07, 0x1e, 0x07, 0xc7, 0x06, 0x6d, 0x01, 0xae, 0xf5, 0xc5, 0xf3, + 0xf3, 0xf7, 0x37, 0xfe, 0xf9, 0x02, 0x8e, 0x06, 0x64, 0x02, 0xd7, 0xfc, + 0x4c, 0xfc, 0x79, 0xfd, 0x83, 0x01, 0x0b, 0x05, 0xb0, 0x08, 0x5d, 0x06, + 0xca, 0x00, 0x69, 0xff, 0x9d, 0xfe, 0x12, 0x02, 0x2b, 0x07, 0x8d, 0x0a, + 0x4f, 0x0d, 0x0a, 0x0f, 0xd4, 0x0e, 0xe3, 0x0d, 0x63, 0x0c, 0x35, 0x0a, + 0x70, 0x07, 0xb3, 0x08, 0x02, 0x08, 0xc5, 0x0a, 0xa5, 0x0d, 0xbc, 0x10, + 0xbf, 0x12, 0xd1, 0x11, 0x34, 0x0d, 0x17, 0x07, 0xd9, 0x04, 0xc4, 0x04, + 0x83, 0x06, 0xf0, 0x07, 0x17, 0x09, 0x6e, 0x09, 0x1e, 0x0d, 0x45, 0x0f, + 0xec, 0x0e, 0x48, 0x0d, 0x4a, 0x08, 0xcf, 0x05, 0xa2, 0x02, 0x84, 0x00, + 0x51, 0xff, 0x9b, 0xfd, 0xc9, 0xfc, 0x8b, 0xfd, 0x4d, 0xfe, 0xbd, 0x00, + 0x93, 0xff, 0x7d, 0xff, 0x93, 0xf9, 0x14, 0xf5, 0x9a, 0xf0, 0xf1, 0xef, + 0x1a, 0xf0, 0xbe, 0xf0, 0xac, 0xf0, 0x25, 0xec, 0x9d, 0xee, 0x38, 0xed, + 0xcb, 0xed, 0xc3, 0xed, 0x77, 0xed, 0x9e, 0xec, 0xb6, 0xee, 0x49, 0xf0, + 0x66, 0xf1, 0xd8, 0xf6, 0x4d, 0xf7, 0x61, 0xf6, 0xd4, 0xf4, 0x5c, 0xf2, + 0x70, 0xf3, 0x08, 0xf4, 0xd1, 0xf6, 0x75, 0xfb, 0x4c, 0xfe, 0x53, 0xfe, + 0x26, 0x01, 0xe5, 0xff, 0x84, 0x07, 0x74, 0x05, 0xf6, 0x03, 0x0a, 0x02, + 0xc5, 0xfb, 0x7f, 0xf6, 0xf1, 0xf6, 0x63, 0xfa, 0x82, 0xfd, 0x03, 0x01, + 0xd1, 0x02, 0xa2, 0xff, 0x2e, 0xfe, 0x8e, 0xfb, 0xa3, 0xfb, 0x16, 0xff, + 0x68, 0xff, 0xdb, 0x02, 0xd7, 0x08, 0xc6, 0x0b, 0x0c, 0x0d, 0x8b, 0x0d, + 0x35, 0x0c, 0x0a, 0x0f, 0xda, 0x11, 0xbe, 0x13, 0x26, 0x14, 0xff, 0x12, + 0x61, 0x10, 0x4b, 0x12, 0x90, 0x12, 0xfc, 0x12, 0x79, 0x12, 0x12, 0x11, + 0x18, 0x0d, 0x1e, 0x0b, 0x2c, 0x08, 0x26, 0x08, 0x57, 0x09, 0xad, 0x09, + 0x72, 0x09, 0xf6, 0x0a, 0x48, 0x0a, 0xd8, 0x0d, 0xfa, 0x0d, 0x19, 0x0c, + 0xe3, 0x09, 0x69, 0x05, 0x07, 0x04, 0x25, 0x05, 0x16, 0x06, 0x5a, 0x06, + 0x4d, 0x05, 0x15, 0x04, 0xf1, 0x00, 0xb5, 0xff, 0x08, 0xfc, 0x51, 0xf5, + 0x79, 0xf0, 0x8e, 0xec, 0x7e, 0xeb, 0x48, 0xef, 0xdf, 0xf0, 0x4d, 0xf5, + 0x13, 0xf5, 0xcc, 0xf4, 0xa2, 0xf1, 0xbb, 0xed, 0xd1, 0xea, 0xe8, 0xe6, + 0xea, 0xe7, 0xca, 0xe9, 0x2f, 0xef, 0xe9, 0xf0, 0x3d, 0xf0, 0xbb, 0xeb, + 0xe5, 0xed, 0x12, 0xf3, 0x6b, 0xfa, 0x1f, 0xfe, 0xbb, 0xfe, 0x8f, 0xf8, + 0x05, 0xf5, 0xa4, 0xf3, 0xcf, 0xf5, 0xb1, 0xfb, 0xb3, 0x01, 0xa2, 0xfe, + 0x30, 0xfe, 0x17, 0xfc, 0xd4, 0xfd, 0x69, 0x01, 0x97, 0x01, 0x6a, 0xfe, + 0x53, 0xf9, 0x95, 0xf5, 0x38, 0xf4, 0xf0, 0xf3, 0x13, 0xf5, 0x4d, 0xfa, + 0x4e, 0xfc, 0x32, 0x00, 0x65, 0x02, 0x5b, 0x04, 0x75, 0x03, 0xe4, 0x05, + 0x10, 0x07, 0x51, 0x06, 0x47, 0x07, 0x10, 0x0a, 0xe0, 0x0b, 0x3f, 0x0f, + 0x96, 0x11, 0xcf, 0x14, 0x73, 0x15, 0xe3, 0x16, 0xb8, 0x14, 0x1f, 0x11, + 0xc2, 0x0c, 0x28, 0x0c, 0x40, 0x0d, 0x31, 0x0e, 0xef, 0x0e, 0x83, 0x0f, + 0xd8, 0x0f, 0x7e, 0x0f, 0x18, 0x0f, 0x82, 0x0d, 0xce, 0x0d, 0x26, 0x0d, + 0x0f, 0x0d, 0x59, 0x0c, 0x36, 0x0b, 0x56, 0x0a, 0x1c, 0x0c, 0x8e, 0x0c, + 0x05, 0x0d, 0xe3, 0x0a, 0x81, 0x0a, 0xa9, 0x07, 0xf0, 0x04, 0x45, 0x02, + 0x2c, 0xfd, 0xad, 0xf8, 0xb4, 0xf6, 0x8b, 0xf5, 0xdb, 0xf6, 0x12, 0xf9, + 0x11, 0xf9, 0xcb, 0xf9, 0xf2, 0xf7, 0x2e, 0xf5, 0x64, 0xf0, 0x58, 0xed, + 0xb5, 0xeb, 0x8f, 0xeb, 0x56, 0xee, 0xf4, 0xec, 0xce, 0xe9, 0x90, 0xe9, + 0x7b, 0xe7, 0xc1, 0xe8, 0x04, 0xed, 0x56, 0xf1, 0x19, 0xf5, 0xac, 0xf5, + 0xc1, 0xf6, 0x16, 0xf3, 0x69, 0xf2, 0xf5, 0xf1, 0xea, 0xf5, 0xc4, 0xf9, + 0x21, 0xf9, 0xa4, 0xfb, 0x2a, 0xfc, 0x09, 0xfe, 0x01, 0x01, 0x04, 0x00, + 0xee, 0x00, 0x16, 0xfd, 0xce, 0xfb, 0x5b, 0xfb, 0x2a, 0xf8, 0x12, 0xf9, + 0xfb, 0xf4, 0xbb, 0xf8, 0xec, 0xf7, 0x46, 0xfc, 0x6d, 0xfd, 0xba, 0xfb, + 0x15, 0xfd, 0x39, 0xfb, 0x55, 0xfb, 0x57, 0xfc, 0xe8, 0xfe, 0xfc, 0xfd, + 0xec, 0x01, 0xd2, 0x03, 0x04, 0x06, 0x7f, 0x0e, 0x20, 0x0f, 0x1d, 0x0e, + 0x8b, 0x0d, 0x4e, 0x0b, 0xaf, 0x0c, 0xbe, 0x13, 0xed, 0x13, 0x75, 0x13, + 0x40, 0x14, 0x8f, 0x13, 0x81, 0x14, 0x58, 0x16, 0x38, 0x17, 0x51, 0x17, + 0xa9, 0x16, 0xc8, 0x11, 0x41, 0x0e, 0xd7, 0x0b, 0xb8, 0x0a, 0x29, 0x0d, + 0x46, 0x0d, 0x18, 0x0d, 0xc1, 0x0a, 0x6d, 0x09, 0x5c, 0x09, 0x3a, 0x0a, + 0xcc, 0x0b, 0x80, 0x0d, 0xae, 0x0c, 0xcf, 0x09, 0xab, 0x05, 0x83, 0x01, + 0xc2, 0xff, 0x35, 0xff, 0x1a, 0x00, 0x11, 0xfe, 0x1e, 0xfc, 0xde, 0xf9, + 0x46, 0xf9, 0x0d, 0xf9, 0xb8, 0xf6, 0xb4, 0xf3, 0x1c, 0xf1, 0x70, 0xeb, + 0x7d, 0xeb, 0xf2, 0xe9, 0x93, 0xeb, 0x0d, 0xec, 0xf8, 0xec, 0x69, 0xeb, + 0x93, 0xeb, 0x15, 0xec, 0x4a, 0xec, 0x2e, 0xed, 0x29, 0xec, 0x6b, 0xef, + 0x7d, 0xf1, 0xbb, 0xf6, 0xb2, 0xf9, 0x87, 0xfb, 0x6d, 0xfa, 0x4a, 0xf8, + 0x5e, 0xf9, 0xb6, 0xfc, 0x93, 0x00, 0x5b, 0x00, 0x97, 0x01, 0x19, 0x00, + 0xbf, 0xfc, 0x18, 0xfa, 0x27, 0xfa, 0xab, 0xf6, 0x4b, 0xf5, 0x85, 0xf1, + 0xb8, 0xf0, 0xd8, 0xf4, 0x2e, 0xf6, 0xc4, 0xfb, 0x97, 0xfb, 0xa2, 0xf6, + 0xeb, 0xf5, 0x6e, 0xf4, 0x46, 0xf9, 0x9e, 0xfe, 0x23, 0x02, 0x0d, 0x08, + 0xd8, 0x06, 0x89, 0x05, 0x91, 0x03, 0xe1, 0x05, 0xd9, 0x08, 0x73, 0x0f, + 0x49, 0x10, 0xf9, 0x11, 0xc8, 0x10, 0x4b, 0x0d, 0x81, 0x0b, 0x26, 0x0a, + 0xe0, 0x0a, 0x2e, 0x0f, 0xf6, 0x12, 0xd4, 0x14, 0xf1, 0x16, 0xbd, 0x13, + 0xda, 0x14, 0x51, 0x14, 0x92, 0x15, 0x72, 0x15, 0x24, 0x15, 0x2e, 0x14, + 0xd9, 0x11, 0xe6, 0x0d, 0x22, 0x0d, 0xfa, 0x0c, 0x94, 0x0d, 0xc6, 0x0f, + 0x5f, 0x0e, 0xbc, 0x0b, 0x15, 0x0a, 0xa1, 0x07, 0x13, 0x07, 0x45, 0x08, + 0xc9, 0x06, 0xe1, 0x04, 0x7c, 0x02, 0xdd, 0xff, 0x73, 0xfe, 0x5e, 0xfe, + 0x83, 0xfd, 0x13, 0xfe, 0x93, 0xfc, 0x02, 0xfe, 0xa7, 0xf9, 0xc8, 0xf8, + 0x2e, 0xf5, 0xd8, 0xf2, 0x3f, 0xf0, 0x90, 0xec, 0x2b, 0xe9, 0xad, 0xe5, + 0x58, 0xe5, 0x81, 0xe3, 0xbd, 0xe2, 0x2b, 0xe1, 0xee, 0xdf, 0x28, 0xe3, + 0x0b, 0xe8, 0x59, 0xeb, 0xf2, 0xf0, 0x52, 0xf6, 0x1b, 0xf9, 0x47, 0xff, + 0x63, 0x01, 0x7d, 0x01, 0xd9, 0x01, 0x55, 0x01, 0x44, 0x02, 0xce, 0x03, + 0x96, 0x05, 0x75, 0x03, 0x64, 0x01, 0xfd, 0xfd, 0xf1, 0xfa, 0x4d, 0xf8, + 0xb7, 0xf4, 0x70, 0xf0, 0x90, 0xee, 0xfc, 0xed, 0x1a, 0xee, 0xda, 0xee, + 0x24, 0xf1, 0x1f, 0xf2, 0x83, 0xf3, 0xdc, 0xf5, 0x58, 0xf9, 0x0c, 0xfd, + 0x0f, 0x02, 0xc7, 0x04, 0xfb, 0x05, 0x77, 0x08, 0xdb, 0x07, 0x05, 0x07, + 0x0e, 0x08, 0x91, 0x08, 0x10, 0x0b, 0x6b, 0x0e, 0x0d, 0x0e, 0x44, 0x0c, + 0xf5, 0x0b, 0xb4, 0x0a, 0x8d, 0x0b, 0xbc, 0x0e, 0x88, 0x0d, 0x77, 0x10, + 0xb2, 0x12, 0xfa, 0x14, 0x6b, 0x19, 0x2b, 0x1c, 0x61, 0x1e, 0xb3, 0x1e, + 0x39, 0x1e, 0x1c, 0x1a, 0xc0, 0x16, 0xb1, 0x12, 0x65, 0x10, 0xc7, 0x0d, + 0xc1, 0x0b, 0x5b, 0x08, 0x77, 0x07, 0x9a, 0x06, 0xce, 0x05, 0xaa, 0x04, + 0x4b, 0x02, 0x20, 0x01, 0xc2, 0x00, 0x9d, 0x02, 0x04, 0x04, 0xc9, 0x04, + 0x8e, 0x04, 0xcb, 0x02, 0x41, 0x02, 0x30, 0x02, 0x66, 0x04, 0x4a, 0x04, + 0x0e, 0x05, 0x5e, 0x01, 0xa9, 0xfd, 0xb3, 0xf8, 0x1f, 0xf3, 0xb6, 0xee, + 0x82, 0xea, 0xdd, 0xe6, 0xc3, 0xe1, 0x5d, 0xdd, 0x90, 0xd8, 0xfd, 0xd6, + 0xab, 0xd8, 0xda, 0xda, 0x9b, 0xdf, 0x73, 0xe4, 0xe7, 0xe7, 0x8d, 0xf0, + 0x43, 0xf8, 0x3c, 0x00, 0x1f, 0x05, 0xa3, 0x07, 0xaa, 0x08, 0xbd, 0x08, + 0x97, 0x09, 0x09, 0x06, 0x7f, 0x04, 0x06, 0x02, 0xb6, 0xff, 0x1a, 0xff, + 0x29, 0xfb, 0x60, 0xf7, 0x0e, 0xf2, 0x92, 0xef, 0x17, 0xec, 0xf9, 0xea, + 0xfa, 0xe8, 0xcc, 0xe9, 0x9f, 0xea, 0x30, 0xee, 0xea, 0xf2, 0x0f, 0xf7, + 0x50, 0xfc, 0x65, 0xff, 0xd2, 0x00, 0x42, 0x02, 0x5b, 0x05, 0xfc, 0x06, + 0x48, 0x09, 0x4f, 0x0d, 0x93, 0x0d, 0x20, 0x0e, 0x71, 0x0d, 0x77, 0x08, + 0x21, 0x06, 0x87, 0x04, 0xa2, 0x01, 0x36, 0x03, 0xf9, 0x05, 0x6c, 0x0c, + 0x89, 0x11, 0xaf, 0x13, 0x0c, 0x14, 0x35, 0x14, 0xb1, 0x16, 0x2d, 0x19, + 0xd8, 0x1c, 0x5e, 0x1e, 0x5f, 0x1e, 0x13, 0x1d, 0x0b, 0x1c, 0xfc, 0x19, + 0x4d, 0x19, 0x50, 0x18, 0x55, 0x16, 0x27, 0x13, 0x2f, 0x0f, 0xbd, 0x09, + 0x60, 0x04, 0xb1, 0xff, 0xd9, 0xfd, 0xf0, 0xfd, 0xe4, 0xfe, 0x16, 0x00, + 0xcb, 0x00, 0x95, 0x00, 0xf6, 0x01, 0xce, 0x03, 0x37, 0x06, 0x85, 0x07, + 0xc9, 0x07, 0x7d, 0x05, 0x81, 0x03, 0x3b, 0x01, 0x09, 0x00, 0x61, 0xff, + 0x0e, 0xff, 0x9b, 0xfd, 0xc4, 0xf9, 0x46, 0xf3, 0x7a, 0xeb, 0x46, 0xe2, + 0x43, 0xdc, 0xe3, 0xd7, 0xce, 0xd4, 0xb7, 0xd3, 0xb0, 0xd2, 0x49, 0xd6, + 0x36, 0xdd, 0xbb, 0xe4, 0x45, 0xec, 0xdc, 0xf2, 0x41, 0xf7, 0x62, 0xfb, + 0xf2, 0xff, 0x37, 0x05, 0x14, 0x08, 0xcf, 0x0b, 0x9e, 0x0b, 0x89, 0x0a, + 0x4e, 0x0b, 0x9b, 0x09, 0x43, 0x04, 0x7e, 0xfe, 0xe4, 0xf6, 0x0f, 0xf1, + 0x6c, 0xec, 0x52, 0xea, 0xec, 0xe5, 0xc5, 0xe4, 0xa6, 0xe4, 0x5e, 0xe6, + 0x0c, 0xe9, 0xe6, 0xee, 0xad, 0xf4, 0xc3, 0xfa, 0xe3, 0xff, 0x7e, 0x04, + 0x16, 0x08, 0x51, 0x0f, 0x7b, 0x14, 0x52, 0x15, 0x3a, 0x15, 0xdc, 0x0f, + 0xce, 0x0a, 0x1b, 0x07, 0xe5, 0x02, 0xff, 0xfe, 0x51, 0xff, 0x9f, 0xfe, + 0x5e, 0xfe, 0xe5, 0xff, 0x74, 0x01, 0xa7, 0x03, 0x2c, 0x09, 0x61, 0x0c, + 0x44, 0x10, 0xa2, 0x15, 0x5d, 0x19, 0xe8, 0x1d, 0xdc, 0x21, 0x5f, 0x25, + 0x70, 0x27, 0x32, 0x27, 0x14, 0x25, 0xab, 0x21, 0x1e, 0x1e, 0xe1, 0x19, + 0x84, 0x16, 0x1e, 0x11, 0x90, 0x0b, 0x83, 0x08, 0x58, 0x04, 0xa4, 0x00, + 0xe9, 0xfe, 0x6b, 0xfb, 0xe2, 0xfa, 0x18, 0xfb, 0xc5, 0xfa, 0x21, 0xfd, + 0x88, 0xff, 0x0a, 0x02, 0x5d, 0x07, 0xa3, 0x0a, 0x57, 0x0b, 0xfc, 0x0b, + 0x91, 0x0a, 0xcc, 0x06, 0xe7, 0x04, 0x8b, 0x02, 0x60, 0xff, 0xd3, 0xf9, + 0x5c, 0xf6, 0x17, 0xf0, 0xf8, 0xec, 0x38, 0xe9, 0x1a, 0xe5, 0x7c, 0xe1, + 0xf6, 0xdc, 0x68, 0xd9, 0x0f, 0xd7, 0x67, 0xd6, 0x0b, 0xd5, 0x38, 0xd6, + 0xa6, 0xd9, 0x1d, 0xe0, 0x26, 0xe9, 0xaf, 0xf4, 0xd3, 0xff, 0x08, 0x0a, + 0x64, 0x0f, 0xbb, 0x10, 0x67, 0x0f, 0x93, 0x0e, 0x8b, 0x0c, 0x8e, 0x09, + 0x0f, 0x05, 0xb6, 0xfe, 0x25, 0xfc, 0x86, 0xf6, 0xb4, 0xf0, 0x5b, 0xec, + 0xd1, 0xe8, 0xc6, 0xe5, 0x0d, 0xe7, 0x02, 0xe7, 0x62, 0xe7, 0xfc, 0xea, + 0xb3, 0xed, 0x9e, 0xf2, 0x7a, 0xf8, 0x2b, 0xff, 0x64, 0x06, 0x03, 0x0d, + 0x87, 0x11, 0x96, 0x12, 0x31, 0x10, 0xc2, 0x10, 0x94, 0x0f, 0x00, 0x0d, + 0xfc, 0x09, 0xda, 0x04, 0xcb, 0x00, 0x38, 0xfe, 0x80, 0xfa, 0x17, 0xf8, + 0x9a, 0xf9, 0xdd, 0xfb, 0x10, 0xfe, 0xc9, 0x02, 0xc1, 0x07, 0xd3, 0x0c, + 0x8f, 0x12, 0x71, 0x17, 0x86, 0x1b, 0x1f, 0x20, 0xd2, 0x23, 0xdc, 0x25, + 0xa9, 0x27, 0xac, 0x27, 0xc0, 0x26, 0x4a, 0x24, 0x23, 0x20, 0x4e, 0x1b, + 0xde, 0x14, 0xc1, 0x0d, 0x64, 0x06, 0x45, 0x00, 0x57, 0xfc, 0x4a, 0xfb, + 0x15, 0xfb, 0xcf, 0xfa, 0xc9, 0xfa, 0x87, 0xfc, 0x1f, 0xff, 0xd6, 0x03, + 0x89, 0x07, 0x64, 0x08, 0xfb, 0x07, 0x83, 0x06, 0xb4, 0x05, 0x22, 0x05, + 0x69, 0x05, 0x49, 0x06, 0xf8, 0x06, 0x0d, 0x06, 0xe0, 0x02, 0x5a, 0xfe, + 0xfd, 0xf7, 0x6b, 0xf1, 0x04, 0xed, 0x66, 0xea, 0xf2, 0xe8, 0x21, 0xe9, + 0x5f, 0xe6, 0xed, 0xe1, 0xad, 0xdb, 0x19, 0xd8, 0xaa, 0xd5, 0x47, 0xd5, + 0x45, 0xd8, 0xeb, 0xda, 0x5b, 0xdf, 0xcb, 0xe5, 0x23, 0xed, 0xfb, 0xf6, + 0xca, 0x02, 0x3f, 0x0e, 0xdc, 0x15, 0xd8, 0x18, 0xea, 0x17, 0x0e, 0x13, + 0x45, 0x0e, 0xda, 0x05, 0x96, 0xff, 0x50, 0xf8, 0x4f, 0xef, 0x5b, 0xe8, + 0x75, 0xe2, 0x8b, 0xdf, 0xb0, 0xe3, 0xfe, 0xe7, 0x32, 0xeb, 0x1f, 0xef, + 0x0b, 0xf2, 0x63, 0xf6, 0x96, 0xfb, 0x7a, 0x00, 0xc5, 0x02, 0xbd, 0x07, + 0xbb, 0x09, 0xfd, 0x0d, 0x2c, 0x11, 0x49, 0x12, 0x86, 0x11, 0x2f, 0x0e, + 0x9e, 0x0a, 0xea, 0x06, 0xaf, 0x02, 0x3a, 0xfe, 0xb2, 0xf9, 0xe5, 0xf5, + 0x13, 0xf2, 0x15, 0xf3, 0x77, 0xf7, 0x1f, 0xfd, 0x43, 0x05, 0x2f, 0x0c, + 0x81, 0x13, 0x59, 0x19, 0xc5, 0x1e, 0x4a, 0x21, 0x52, 0x23, 0x39, 0x24, + 0xff, 0x24, 0xc8, 0x24, 0xc1, 0x23, 0xf7, 0x21, 0x50, 0x1f, 0x65, 0x1a, + 0x99, 0x14, 0x15, 0x0e, 0xae, 0x08, 0x9f, 0x04, 0x03, 0x01, 0x97, 0xfd, + 0x04, 0xfb, 0xb7, 0xf9, 0x18, 0xfa, 0xef, 0xfb, 0x9a, 0xfe, 0xb5, 0x02, + 0x5b, 0x06, 0x1c, 0x08, 0xd8, 0x08, 0xe4, 0x09, 0x75, 0x09, 0xa9, 0x0a, + 0x33, 0x0a, 0xc3, 0x08, 0x35, 0x05, 0x30, 0x01, 0x94, 0xfe, 0x43, 0xfc, + 0xea, 0xfb, 0xd4, 0xfa, 0x36, 0xf9, 0xfe, 0xf4, 0xe3, 0xf1, 0xea, 0xee, + 0xf4, 0xee, 0x8f, 0xf0, 0xb4, 0xef, 0x37, 0xed, 0xe2, 0xe7, 0x4f, 0xe1, + 0xd0, 0xdb, 0xf3, 0xd5, 0x33, 0xd1, 0x9c, 0xce, 0x77, 0xcd, 0xb6, 0xd2, + 0x0e, 0xdd, 0x68, 0xeb, 0xbc, 0xfc, 0xf6, 0x0a, 0xea, 0x14, 0x60, 0x1c, + 0xf7, 0x1e, 0xe0, 0x1d, 0xca, 0x19, 0x57, 0x10, 0xb6, 0x06, 0xcc, 0xfc, + 0xa0, 0xf3, 0xc2, 0xeb, 0x44, 0xe7, 0xef, 0xe1, 0xb1, 0xe2, 0xe6, 0xe6, + 0x04, 0xea, 0x4b, 0xee, 0x99, 0xf1, 0xeb, 0xf2, 0x22, 0xf5, 0x22, 0xf9, + 0xb0, 0xfc, 0x6a, 0x02, 0x4e, 0x08, 0x5f, 0x0c, 0x7c, 0x0e, 0xda, 0x10, + 0xc3, 0x0f, 0x59, 0x10, 0x7e, 0x0f, 0x40, 0x0d, 0xfb, 0x09, 0x26, 0x04, + 0xc9, 0xfd, 0xca, 0xf6, 0x2d, 0xf4, 0x1d, 0xf2, 0x48, 0xf5, 0x30, 0xfb, + 0xec, 0x00, 0x1a, 0x08, 0x9a, 0x0d, 0x6f, 0x12, 0x2c, 0x17, 0x86, 0x1b, + 0x42, 0x1e, 0x07, 0x21, 0x15, 0x23, 0xfd, 0x22, 0xd7, 0x22, 0xac, 0x20, + 0xaa, 0x1d, 0x87, 0x1a, 0x35, 0x15, 0xa4, 0x11, 0x1a, 0x0d, 0x41, 0x08, + 0x0a, 0x04, 0x47, 0xff, 0x55, 0xfb, 0xcf, 0xf9, 0xfe, 0xfa, 0xb2, 0xfd, + 0x7e, 0x00, 0xbf, 0x02, 0x6b, 0x03, 0x09, 0x04, 0x28, 0x04, 0x81, 0x05, + 0xe6, 0x07, 0x06, 0x09, 0xc5, 0x09, 0x77, 0x08, 0x09, 0x06, 0xf1, 0x03, + 0xf7, 0x03, 0xd8, 0x03, 0x7a, 0x01, 0x36, 0x02, 0x2c, 0xff, 0x98, 0xfc, + 0xe3, 0xf9, 0xb5, 0xf5, 0x2d, 0xf1, 0xed, 0xed, 0xbc, 0xec, 0x66, 0xeb, + 0x84, 0xec, 0x49, 0xeb, 0x02, 0xea, 0x3a, 0xe7, 0x1c, 0xe4, 0xb2, 0xde, + 0xa7, 0xd7, 0x07, 0xd0, 0x33, 0xcb, 0x6a, 0xcb, 0x6b, 0xd3, 0x87, 0xe1, + 0x33, 0xf1, 0xd6, 0x05, 0xb1, 0x16, 0x5c, 0x21, 0xb4, 0x26, 0x50, 0x25, + 0x9c, 0x1f, 0xd2, 0x19, 0xa5, 0x10, 0x22, 0x03, 0xfb, 0xf6, 0x37, 0xeb, + 0x7b, 0xe0, 0x93, 0xdd, 0xd1, 0xde, 0x3c, 0xe1, 0xd0, 0xe7, 0xbf, 0xee, + 0x03, 0xf3, 0x7a, 0xf7, 0x86, 0xfb, 0xa8, 0xfc, 0x15, 0xff, 0xc6, 0x03, + 0x35, 0x07, 0x37, 0x0b, 0x27, 0x0e, 0x1e, 0x0f, 0x58, 0x10, 0x32, 0x12, + 0xa9, 0x11, 0x2d, 0x10, 0x32, 0x0c, 0x5f, 0x05, 0x5c, 0x00, 0x56, 0xfb, + 0x3b, 0xf7, 0xdb, 0xf4, 0x39, 0xf4, 0xf2, 0xf4, 0x4f, 0xf9, 0x01, 0x00, + 0xdf, 0x06, 0xc9, 0x0e, 0xae, 0x15, 0x81, 0x19, 0x32, 0x1d, 0x8f, 0x1f, + 0x57, 0x21, 0xa9, 0x22, 0xc2, 0x21, 0x91, 0x1f, 0x5f, 0x1c, 0xf3, 0x18, + 0x8b, 0x14, 0xb0, 0x0f, 0x74, 0x0a, 0xa4, 0x05, 0x18, 0x01, 0x37, 0xfd, + 0x6f, 0xfa, 0x0a, 0xf9, 0x80, 0xf9, 0x9f, 0xfb, 0x97, 0xfe, 0xae, 0x01, + 0xb3, 0x04, 0x44, 0x07, 0x94, 0x0a, 0x28, 0x0c, 0x80, 0x0d, 0xf9, 0x0c, + 0x01, 0x0b, 0x76, 0x08, 0x59, 0x06, 0x5e, 0x04, 0x6a, 0x02, 0x79, 0x00, + 0x47, 0xfe, 0x1a, 0xfd, 0xca, 0xfc, 0x87, 0xfd, 0x74, 0xfd, 0x38, 0xfc, + 0x8c, 0xf9, 0xcc, 0xf5, 0x29, 0xf1, 0xbd, 0xee, 0x4b, 0xef, 0x06, 0xf0, + 0xe9, 0xf0, 0xfe, 0xef, 0xd2, 0xec, 0xe8, 0xe8, 0x7d, 0xe6, 0x2f, 0xe2, + 0xf8, 0xdb, 0x6d, 0xd3, 0x46, 0xc9, 0xb4, 0xc4, 0x87, 0xca, 0x04, 0xdb, + 0xe2, 0xf3, 0xe7, 0x0a, 0x07, 0x1d, 0x72, 0x25, 0x15, 0x29, 0xc8, 0x28, + 0x68, 0x26, 0x86, 0x22, 0xc7, 0x19, 0xc7, 0x0a, 0xb1, 0xf6, 0x5f, 0xe6, + 0xfc, 0xd9, 0x69, 0xd6, 0x2d, 0xd8, 0xcc, 0xdb, 0xe6, 0xe2, 0xc3, 0xea, + 0x98, 0xf1, 0x29, 0xf9, 0xe2, 0xfd, 0x4c, 0x01, 0xd9, 0x05, 0x8a, 0x0a, + 0x31, 0x0d, 0xfd, 0x0f, 0x95, 0x0f, 0xd1, 0x0d, 0x57, 0x0e, 0x76, 0x0f, + 0xe9, 0x0f, 0xb2, 0x0f, 0xf0, 0x0a, 0xa2, 0x04, 0x59, 0xff, 0xeb, 0xf9, + 0x72, 0xf6, 0xd8, 0xf5, 0x67, 0xf5, 0x93, 0xf6, 0x1f, 0xf9, 0x4b, 0xfd, + 0x89, 0x04, 0x26, 0x0d, 0xc7, 0x13, 0x7e, 0x19, 0x6c, 0x1d, 0x2d, 0x20, + 0x34, 0x22, 0x3a, 0x22, 0x7f, 0x20, 0xf1, 0x1c, 0x2a, 0x18, 0x53, 0x13, + 0x83, 0x0e, 0x0f, 0x0a, 0x76, 0x05, 0x77, 0x01, 0x3a, 0xfe, 0xc2, 0xfb, + 0xa1, 0xfa, 0xdb, 0xfa, 0x72, 0xfc, 0x6d, 0xff, 0xe3, 0x02, 0x5e, 0x05, + 0x35, 0x08, 0xbd, 0x09, 0x5e, 0x0b, 0xa3, 0x0d, 0x75, 0x0e, 0x87, 0x0d, + 0x7f, 0x0b, 0xb7, 0x07, 0x9a, 0x04, 0xc7, 0x02, 0x02, 0x01, 0xa4, 0xff, + 0x0b, 0xff, 0xe6, 0xfd, 0x8a, 0xfe, 0x31, 0x00, 0x46, 0x00, 0x46, 0x00, + 0x6e, 0xff, 0x13, 0xfb, 0xcc, 0xf7, 0x5e, 0xf3, 0x18, 0xf0, 0x80, 0xef, + 0xd8, 0xee, 0xb0, 0xee, 0xe5, 0xed, 0x53, 0xed, 0x5f, 0xea, 0xdf, 0xe6, + 0xc3, 0xe0, 0x2e, 0xda, 0xcc, 0xd2, 0x74, 0xcd, 0x0c, 0xcb, 0x6d, 0xcf, + 0xb2, 0xdb, 0x0e, 0xee, 0xfa, 0x04, 0x86, 0x19, 0x55, 0x29, 0x1f, 0x30, + 0x7d, 0x30, 0xe3, 0x29, 0x13, 0x20, 0xf5, 0x13, 0xee, 0x04, 0x6e, 0xf5, + 0x6e, 0xe6, 0xeb, 0xda, 0xb7, 0xd3, 0xde, 0xd2, 0x76, 0xd7, 0x99, 0xdf, + 0x27, 0xea, 0xf1, 0xf3, 0xf5, 0xfc, 0xce, 0x03, 0xc8, 0x08, 0x18, 0x0c, + 0xa7, 0x0d, 0xb0, 0x0d, 0xab, 0x0c, 0x24, 0x0b, 0x2f, 0x0b, 0x8e, 0x0b, + 0x33, 0x0c, 0x1e, 0x0c, 0xa7, 0x0b, 0xbe, 0x0a, 0x5c, 0x08, 0xe7, 0x03, + 0xb0, 0xfe, 0x4f, 0xf9, 0x70, 0xf5, 0x80, 0xf4, 0x36, 0xf5, 0xb3, 0xf7, + 0x06, 0xfc, 0xdc, 0x01, 0x21, 0x09, 0xde, 0x11, 0x8b, 0x19, 0x9c, 0x1e, + 0xcf, 0x21, 0x2a, 0x22, 0xfc, 0x20, 0x02, 0x1f, 0xb1, 0x1b, 0x15, 0x16, + 0x47, 0x10, 0x6c, 0x0a, 0x23, 0x06, 0x90, 0x03, 0x5f, 0x01, 0x7f, 0xff, + 0x08, 0xfe, 0x7e, 0xfd, 0xbc, 0xfd, 0x62, 0xff, 0x72, 0x01, 0x85, 0x03, + 0x31, 0x05, 0x62, 0x06, 0x81, 0x07, 0x2d, 0x09, 0x67, 0x0a, 0x45, 0x0c, + 0xe4, 0x0c, 0xd5, 0x0c, 0x1d, 0x0c, 0xd0, 0x09, 0x5a, 0x07, 0x6c, 0x05, + 0x79, 0x03, 0xba, 0x01, 0x66, 0x00, 0x79, 0xfe, 0x59, 0xfd, 0x46, 0xfc, + 0x03, 0xfc, 0x83, 0xfb, 0x6a, 0xfb, 0x99, 0xf9, 0xbd, 0xf7, 0xa9, 0xf4, + 0x7d, 0xf1, 0xac, 0xef, 0x17, 0xef, 0x7e, 0xef, 0x44, 0xf0, 0xd2, 0xef, + 0xba, 0xed, 0x97, 0xe9, 0x92, 0xe3, 0x1e, 0xdd, 0xcb, 0xd5, 0xc7, 0xce, + 0x37, 0xca, 0x6d, 0xca, 0x31, 0xd2, 0x0b, 0xe4, 0x8c, 0xfa, 0x59, 0x10, + 0x81, 0x21, 0xe1, 0x2b, 0x8c, 0x2f, 0x25, 0x2f, 0x3a, 0x28, 0xf9, 0x1b, + 0x1b, 0x0c, 0xda, 0xf9, 0xf6, 0xe7, 0x56, 0xdb, 0xb3, 0xd3, 0x1b, 0xd2, + 0xf0, 0xd5, 0x5e, 0xdd, 0x78, 0xe6, 0x65, 0xf1, 0xd8, 0xfb, 0xac, 0x04, + 0x2e, 0x0c, 0xbf, 0x0f, 0x79, 0x10, 0xef, 0x0f, 0x2a, 0x0d, 0xc1, 0x0a, + 0x00, 0x09, 0x43, 0x07, 0x48, 0x07, 0xe6, 0x08, 0x1e, 0x0a, 0x80, 0x0a, + 0x8f, 0x09, 0x08, 0x07, 0x6a, 0x04, 0xae, 0x00, 0x04, 0xfc, 0x5a, 0xf7, + 0x41, 0xf4, 0x61, 0xf4, 0xa7, 0xf7, 0x81, 0xfd, 0x38, 0x06, 0x53, 0x0f, + 0x67, 0x17, 0x77, 0x1e, 0x59, 0x23, 0x0c, 0x26, 0x3a, 0x26, 0x10, 0x23, + 0x74, 0x1c, 0x6e, 0x15, 0xc5, 0x0d, 0x9d, 0x07, 0xee, 0x02, 0x49, 0xff, + 0x54, 0xfd, 0x8b, 0xfc, 0xc1, 0xfb, 0x0c, 0xfc, 0xc8, 0xfd, 0x42, 0x00, + 0x5c, 0x03, 0x3f, 0x06, 0x98, 0x07, 0x27, 0x08, 0xf2, 0x08, 0xbb, 0x09, + 0xba, 0x0a, 0x61, 0x0c, 0x1c, 0x0d, 0x1a, 0x0d, 0x22, 0x0c, 0xa7, 0x09, + 0x17, 0x07, 0x10, 0x05, 0xc5, 0x02, 0xc5, 0x00, 0xf0, 0xfe, 0xa7, 0xfc, + 0x75, 0xfb, 0xb5, 0xfb, 0x65, 0xfc, 0x01, 0xfd, 0x38, 0xfc, 0x29, 0xfb, + 0x9f, 0xfa, 0xeb, 0xf9, 0xad, 0xf8, 0x28, 0xf6, 0xe6, 0xf2, 0x3a, 0xef, + 0x5f, 0xed, 0xed, 0xec, 0xd5, 0xec, 0xab, 0xec, 0x99, 0xea, 0x77, 0xe6, + 0x69, 0xe0, 0xee, 0xd8, 0xa2, 0xd1, 0xca, 0xcb, 0x9e, 0xcb, 0x67, 0xd1, + 0xca, 0xdf, 0x32, 0xf3, 0xa4, 0x08, 0x93, 0x1a, 0x4d, 0x26, 0x84, 0x2b, + 0xac, 0x2b, 0x24, 0x28, 0x02, 0x20, 0x60, 0x13, 0x68, 0x03, 0x15, 0xf2, + 0x1b, 0xe3, 0xda, 0xd8, 0xb9, 0xd3, 0x5f, 0xd4, 0x57, 0xda, 0x0e, 0xe3, + 0x2b, 0xee, 0xfe, 0xf9, 0x00, 0x03, 0xfc, 0x09, 0x9a, 0x0e, 0x0e, 0x10, + 0x24, 0x10, 0xdc, 0x0e, 0xe7, 0x0a, 0x1e, 0x07, 0xd2, 0x04, 0xd9, 0x03, + 0xf9, 0x05, 0x2e, 0x09, 0x94, 0x0b, 0x86, 0x0c, 0xa8, 0x0a, 0x8e, 0x06, + 0x62, 0x02, 0x0a, 0xff, 0x18, 0xfc, 0xa2, 0xf9, 0xc4, 0xf7, 0xea, 0xf7, + 0xfe, 0xfb, 0x47, 0x03, 0x97, 0x0b, 0x0e, 0x14, 0xca, 0x1a, 0xa5, 0x1f, + 0x84, 0x22, 0x2c, 0x23, 0x54, 0x21, 0x44, 0x1d, 0x70, 0x17, 0x51, 0x10, + 0xbe, 0x09, 0xf9, 0x04, 0x76, 0x00, 0x07, 0xfd, 0x63, 0xfa, 0x51, 0xf9, + 0x38, 0xfa, 0x99, 0xfc, 0x17, 0xff, 0xa7, 0x01, 0xec, 0x03, 0xb0, 0x05, + 0x43, 0x07, 0x35, 0x09, 0x13, 0x0b, 0xb9, 0x0c, 0x81, 0x0c, 0xee, 0x0b, + 0x4a, 0x0b, 0x31, 0x0a, 0x8a, 0x09, 0xbf, 0x07, 0x46, 0x05, 0xde, 0x02, + 0xbb, 0x00, 0x16, 0xff, 0xc1, 0xfd, 0x4e, 0xfd, 0xb3, 0xfe, 0x47, 0xff, + 0xd5, 0xff, 0x73, 0xff, 0x96, 0xfd, 0xd7, 0xfb, 0x6c, 0xfa, 0x34, 0xf8, + 0x72, 0xf5, 0x9a, 0xf2, 0x48, 0xef, 0x21, 0xec, 0x06, 0xeb, 0x85, 0xeb, + 0xbe, 0xed, 0x82, 0xef, 0xa2, 0xef, 0x48, 0xed, 0x09, 0xe9, 0xb7, 0xe2, + 0xf9, 0xda, 0x11, 0xd3, 0x8b, 0xcd, 0x5d, 0xce, 0x2f, 0xd7, 0x20, 0xe6, + 0xbd, 0xf9, 0x03, 0x0c, 0x23, 0x1a, 0xe4, 0x23, 0x3c, 0x29, 0xf9, 0x28, + 0x6a, 0x25, 0x60, 0x1d, 0x02, 0x10, 0xf8, 0x00, 0xe3, 0xef, 0xb4, 0xe0, + 0x67, 0xd8, 0xd6, 0xd6, 0x5d, 0xda, 0xe6, 0xe1, 0x9d, 0xeb, 0x6a, 0xf4, + 0x15, 0xfd, 0xce, 0x04, 0x96, 0x07, 0xc7, 0x0a, 0x95, 0x0d, 0x6f, 0x0d, + 0x74, 0x0b, 0x4b, 0x09, 0xd9, 0x04, 0xd0, 0x03, 0x19, 0x06, 0x65, 0x08, + 0x32, 0x0c, 0x98, 0x0e, 0xa4, 0x0c, 0xe7, 0x0a, 0x23, 0x08, 0x6f, 0x04, + 0xbd, 0x01, 0x3f, 0xff, 0xc2, 0xfb, 0x32, 0xfa, 0x19, 0xfa, 0x89, 0xfd, + 0xdc, 0x03, 0xc9, 0x0b, 0x24, 0x13, 0xe1, 0x18, 0xc1, 0x1c, 0x9e, 0x1e, + 0xd9, 0x1e, 0x10, 0x1d, 0x32, 0x1a, 0x04, 0x15, 0x5d, 0x0f, 0xe5, 0x09, + 0x41, 0x04, 0x91, 0xff, 0xa0, 0xfb, 0x00, 0xf9, 0xfc, 0xf8, 0xd9, 0xfa, + 0x24, 0xfd, 0x94, 0xff, 0x64, 0x00, 0x72, 0x01, 0x22, 0x04, 0x84, 0x07, + 0x02, 0x0b, 0x13, 0x0d, 0xc9, 0x0d, 0x4e, 0x0d, 0xe8, 0x0c, 0xf8, 0x0b, + 0xc1, 0x0a, 0xf3, 0x08, 0xb8, 0x06, 0xb9, 0x03, 0x11, 0x01, 0x16, 0xff, + 0x13, 0xfe, 0x69, 0xfd, 0x33, 0xfd, 0xbf, 0xfc, 0x19, 0xfd, 0x51, 0xfd, + 0xef, 0xfc, 0x8c, 0xfc, 0x5d, 0xfb, 0x01, 0xfa, 0x7c, 0xf8, 0xa2, 0xf6, + 0x13, 0xf3, 0x07, 0xf0, 0xf0, 0xed, 0x00, 0xee, 0xbd, 0xf0, 0x91, 0xf3, + 0xa1, 0xf4, 0x12, 0xf2, 0x50, 0xed, 0x9c, 0xe7, 0x92, 0xe1, 0x0c, 0xdb, + 0xb4, 0xd4, 0x3c, 0xcf, 0xd2, 0xce, 0xc4, 0xd4, 0x9f, 0xe1, 0x86, 0xf3, + 0x78, 0x06, 0x60, 0x15, 0xc6, 0x1f, 0x51, 0x25, 0x66, 0x27, 0x23, 0x25, + 0x6e, 0x20, 0xb2, 0x15, 0x89, 0x07, 0xdb, 0xf6, 0xfb, 0xe7, 0xd3, 0xdd, + 0x06, 0xda, 0xe0, 0xdb, 0x92, 0xe1, 0xe9, 0xe8, 0xfa, 0xef, 0x4f, 0xf7, + 0xd2, 0xfe, 0x44, 0x06, 0x05, 0x0c, 0xf7, 0x0e, 0x7d, 0x0d, 0x65, 0x0a, + 0xe7, 0x06, 0xe8, 0x05, 0x49, 0x06, 0x3e, 0x08, 0x81, 0x09, 0x00, 0x0b, + 0x9f, 0x0c, 0xac, 0x0d, 0x94, 0x0d, 0xf7, 0x0b, 0xd0, 0x08, 0x81, 0x04, + 0x0d, 0x00, 0xfa, 0xfb, 0x9f, 0xf9, 0xd7, 0xf9, 0xc9, 0xfc, 0xb1, 0x02, + 0x51, 0x09, 0xfe, 0x0e, 0x4c, 0x14, 0x25, 0x18, 0x3d, 0x1b, 0x66, 0x1d, + 0xc5, 0x1c, 0x68, 0x19, 0x5a, 0x14, 0xbb, 0x0e, 0x68, 0x09, 0x5b, 0x05, + 0x3e, 0x01, 0x5c, 0xfe, 0x8c, 0xfc, 0xa2, 0xfb, 0xfa, 0xfb, 0x35, 0xfd, + 0x41, 0xfe, 0xa0, 0x00, 0xb8, 0x02, 0xfe, 0x03, 0x97, 0x05, 0x8d, 0x06, + 0x4f, 0x07, 0x76, 0x08, 0x49, 0x09, 0x43, 0x0a, 0x4c, 0x0b, 0x76, 0x0b, + 0x9d, 0x0a, 0xe4, 0x08, 0xdc, 0x06, 0xfc, 0x04, 0x2a, 0x03, 0xe1, 0x00, + 0xe0, 0xfe, 0x8d, 0xfd, 0xaf, 0xfc, 0x68, 0xfc, 0x3f, 0xfc, 0x2b, 0xfc, + 0x37, 0xfc, 0x55, 0xfc, 0x97, 0xfb, 0xa5, 0xfa, 0xfa, 0xf8, 0x3f, 0xf7, + 0xea, 0xf4, 0xba, 0xf2, 0x07, 0xf1, 0xd3, 0xf0, 0x3c, 0xf0, 0x6f, 0xf0, + 0x11, 0xef, 0x15, 0xed, 0x6f, 0xea, 0xc3, 0xe6, 0x26, 0xe2, 0x5f, 0xdc, + 0x0d, 0xd6, 0x31, 0xd2, 0xa4, 0xd2, 0x8c, 0xd8, 0x41, 0xe5, 0x4a, 0xf5, + 0xbf, 0x05, 0xab, 0x13, 0x85, 0x1e, 0x0e, 0x25, 0x0e, 0x29, 0x59, 0x28, + 0xba, 0x21, 0x5c, 0x14, 0x9d, 0x05, 0xb8, 0xf4, 0x1c, 0xe6, 0x8b, 0xdc, + 0x61, 0xd7, 0x18, 0xd8, 0x92, 0xdd, 0x88, 0xe5, 0xd0, 0xee, 0xf8, 0xf9, + 0xab, 0x03, 0x02, 0x0b, 0xa7, 0x0f, 0x56, 0x10, 0x18, 0x0e, 0xff, 0x0a, + 0x70, 0x07, 0x4e, 0x05, 0x1f, 0x04, 0x1e, 0x04, 0xd3, 0x05, 0x5b, 0x09, + 0x4c, 0x0d, 0xa9, 0x0f, 0x16, 0x10, 0x4f, 0x0e, 0xc1, 0x0a, 0x1d, 0x06, + 0x33, 0x01, 0xd0, 0xfc, 0x00, 0xfa, 0xea, 0xf9, 0xc5, 0xfb, 0x4d, 0x00, + 0x82, 0x06, 0xc8, 0x0d, 0xe8, 0x14, 0xd8, 0x1a, 0xe2, 0x1d, 0x75, 0x1e, + 0x73, 0x1c, 0xa8, 0x18, 0xf7, 0x13, 0x07, 0x0e, 0x49, 0x08, 0xe2, 0x02, + 0xde, 0xfe, 0xf9, 0xfb, 0xfa, 0xfb, 0xb5, 0xfc, 0x9d, 0xfd, 0x29, 0xff, + 0x77, 0x00, 0xf1, 0x01, 0xc5, 0x04, 0x36, 0x06, 0x80, 0x06, 0xef, 0x05, + 0x51, 0x05, 0x16, 0x06, 0x17, 0x08, 0xd6, 0x09, 0x55, 0x0a, 0x2c, 0x0a, + 0xd7, 0x08, 0xcf, 0x08, 0xc9, 0x08, 0x70, 0x08, 0xdb, 0x06, 0x73, 0x03, + 0x0d, 0x00, 0x7a, 0xfd, 0xa4, 0xfc, 0x53, 0xfc, 0x36, 0xfc, 0x3b, 0xfb, + 0x4f, 0xfa, 0x7f, 0xfa, 0xb6, 0xfa, 0x04, 0xfb, 0x61, 0xfa, 0x01, 0xf9, + 0xeb, 0xf7, 0x72, 0xf5, 0xc0, 0xf2, 0x41, 0xf0, 0x2b, 0xef, 0xac, 0xef, + 0xf1, 0xf0, 0xe1, 0xf0, 0x27, 0xee, 0x1b, 0xe9, 0x8f, 0xe4, 0x8a, 0xdf, + 0x4f, 0xdb, 0x7b, 0xd7, 0xfb, 0xd3, 0x51, 0xd2, 0x10, 0xd8, 0x7d, 0xe4, + 0x56, 0xf7, 0x76, 0x0b, 0x15, 0x1b, 0xcd, 0x22, 0x7f, 0x25, 0x74, 0x25, + 0x3d, 0x23, 0x0d, 0x1d, 0x61, 0x10, 0x17, 0x00, 0xbf, 0xee, 0x4d, 0xe3, + 0x24, 0xdb, 0x5d, 0xda, 0x63, 0xdd, 0x32, 0xe3, 0x1c, 0xea, 0x55, 0xf2, + 0xe0, 0xfa, 0xbc, 0x02, 0x90, 0x08, 0xc0, 0x0b, 0x8f, 0x0c, 0xa6, 0x0a, + 0xa5, 0x06, 0x4e, 0x04, 0x73, 0x04, 0xe8, 0x06, 0x01, 0x0b, 0x14, 0x0e, + 0x72, 0x11, 0xd7, 0x13, 0x7f, 0x14, 0x0c, 0x12, 0x7c, 0x0e, 0xad, 0x09, + 0x38, 0x04, 0xa2, 0xfe, 0xf8, 0xf8, 0x53, 0xf7, 0xdf, 0xf7, 0x26, 0xfc, + 0xf4, 0x01, 0x23, 0x08, 0x12, 0x0f, 0x24, 0x16, 0xd3, 0x19, 0x0d, 0x1c, + 0x3f, 0x1c, 0x3e, 0x1a, 0x1f, 0x17, 0x85, 0x12, 0x93, 0x0c, 0xbc, 0x07, + 0x6e, 0x03, 0x5f, 0x00, 0x98, 0xfe, 0xeb, 0xfd, 0xc7, 0xfd, 0x7e, 0xfe, + 0xd9, 0xff, 0x4a, 0x00, 0x0c, 0x02, 0xfe, 0x02, 0x78, 0x03, 0x47, 0x04, + 0x1d, 0x04, 0x20, 0x04, 0x9d, 0x05, 0xc2, 0x06, 0xea, 0x08, 0xcf, 0x0a, + 0xe7, 0x0b, 0x9f, 0x0b, 0xcd, 0x0a, 0x76, 0x09, 0xa5, 0x07, 0xdb, 0x05, + 0x2b, 0x03, 0x20, 0x00, 0xc0, 0xfd, 0xf0, 0xfb, 0xc6, 0xfa, 0x57, 0xfa, + 0x21, 0xfa, 0x16, 0xf9, 0x67, 0xf9, 0xc6, 0xf9, 0x34, 0xfb, 0xdd, 0xfc, + 0x6d, 0xfe, 0x1a, 0xfd, 0xc7, 0xfa, 0x3f, 0xf6, 0x62, 0xf2, 0xff, 0xef, + 0x8f, 0xef, 0x6a, 0xef, 0x3d, 0xee, 0xc7, 0xec, 0x57, 0xe8, 0xef, 0xe5, + 0x5d, 0xe3, 0x4e, 0xe0, 0x08, 0xdd, 0x53, 0xd7, 0xb5, 0xd1, 0xf7, 0xd0, + 0x6e, 0xd7, 0xd4, 0xe5, 0xd8, 0xf9, 0xe9, 0x0b, 0x97, 0x18, 0x80, 0x20, + 0x7f, 0x24, 0x28, 0x27, 0xba, 0x26, 0x07, 0x20, 0x11, 0x13, 0x54, 0x03, + 0x13, 0xf3, 0x5e, 0xe5, 0xec, 0xdd, 0x1d, 0xdb, 0x3e, 0xdd, 0x0f, 0xe1, + 0xc3, 0xe8, 0x1a, 0xf0, 0x21, 0xf8, 0xee, 0xff, 0x07, 0x05, 0x6c, 0x09, + 0x2c, 0x0c, 0xc0, 0x0c, 0x5f, 0x0b, 0x22, 0x0a, 0xee, 0x08, 0xa0, 0x09, + 0x7a, 0x0c, 0xec, 0x0f, 0x2b, 0x12, 0x1f, 0x14, 0x2c, 0x14, 0xd8, 0x11, + 0xf3, 0x0e, 0x1b, 0x0a, 0xe2, 0x03, 0x85, 0xff, 0x7b, 0xfa, 0xb2, 0xf7, + 0xc9, 0xf7, 0x11, 0xfa, 0xa1, 0xfe, 0x74, 0x05, 0x1d, 0x0c, 0xba, 0x12, + 0x04, 0x19, 0x79, 0x1b, 0x1e, 0x1c, 0xf5, 0x1a, 0xb1, 0x17, 0x68, 0x13, + 0x7a, 0x0e, 0xe8, 0x08, 0xaa, 0x04, 0x58, 0x02, 0xd5, 0xfe, 0x95, 0xfd, + 0xb5, 0xfd, 0x14, 0xfd, 0x0c, 0xff, 0xe6, 0xff, 0x12, 0x00, 0xae, 0x00, + 0xee, 0x00, 0x58, 0x00, 0x92, 0x00, 0x56, 0x02, 0x87, 0x03, 0x6d, 0x06, + 0x5f, 0x09, 0x9d, 0x0a, 0xc3, 0x0c, 0x0f, 0x0e, 0x8a, 0x0d, 0x6b, 0x0c, + 0x17, 0x0a, 0xb5, 0x06, 0xc3, 0x03, 0x48, 0x00, 0xe9, 0xfc, 0xfb, 0xfa, + 0x62, 0xf9, 0xf3, 0xf8, 0x30, 0xf9, 0xde, 0xf9, 0x58, 0xfa, 0x7c, 0xfb, + 0x26, 0xfc, 0xdb, 0xfc, 0xee, 0xfc, 0x49, 0xfc, 0x88, 0xfa, 0x5c, 0xf8, + 0x77, 0xf5, 0xe1, 0xf2, 0x07, 0xf2, 0x32, 0xf2, 0x26, 0xf2, 0x21, 0xf0, + 0xb7, 0xec, 0x01, 0xe8, 0x34, 0xe5, 0x21, 0xe3, 0xc8, 0xe0, 0x2d, 0xdc, + 0x3f, 0xd5, 0x63, 0xce, 0x2b, 0xcd, 0xa8, 0xd4, 0xa1, 0xe5, 0x0a, 0xfd, + 0xd8, 0x0e, 0x87, 0x1a, 0x87, 0x1e, 0x50, 0x20, 0xb7, 0x25, 0x6f, 0x2a, + 0xe8, 0x27, 0x58, 0x1b, 0xad, 0x07, 0xe7, 0xf2, 0x8e, 0xe5, 0xca, 0xe0, + 0x5e, 0xe0, 0xf1, 0xe1, 0x74, 0xe3, 0x86, 0xe5, 0x80, 0xea, 0xd1, 0xf3, + 0xe7, 0xfc, 0x76, 0x06, 0x0f, 0x0c, 0xb8, 0x0c, 0x47, 0x0b, 0xe0, 0x08, + 0x8d, 0x07, 0x11, 0x09, 0xf7, 0x0b, 0xb4, 0x0d, 0x7e, 0x0f, 0xad, 0x11, + 0x77, 0x12, 0x9a, 0x13, 0xe6, 0x13, 0xb6, 0x10, 0xa7, 0x0d, 0x72, 0x09, + 0x3c, 0x04, 0x3b, 0xff, 0x7a, 0xfb, 0x91, 0xf8, 0x33, 0xf9, 0x13, 0xfd, + 0xa8, 0x01, 0xb2, 0x07, 0xff, 0x0c, 0xc2, 0x10, 0x13, 0x14, 0xc9, 0x16, + 0x3b, 0x17, 0x5f, 0x16, 0xbe, 0x13, 0xa0, 0x0f, 0xf2, 0x0a, 0xbb, 0x07, + 0xab, 0x04, 0x07, 0x02, 0x4e, 0x00, 0xaa, 0xfe, 0xfe, 0xfd, 0x2e, 0xfe, + 0x90, 0xfe, 0x63, 0xfe, 0x16, 0xff, 0x15, 0xff, 0x6d, 0xff, 0xc1, 0xff, + 0x68, 0x00, 0xe9, 0x00, 0xd5, 0x02, 0x02, 0x05, 0x18, 0x08, 0xd3, 0x0a, + 0xf1, 0x0b, 0xf1, 0x0b, 0x1a, 0x0c, 0xf9, 0x0a, 0xea, 0x09, 0xa3, 0x07, + 0x7c, 0x04, 0xb4, 0x01, 0x31, 0xff, 0x7b, 0xfd, 0x6f, 0xfc, 0x35, 0xfb, + 0xa6, 0xfa, 0x15, 0xfa, 0x1d, 0xfa, 0xf0, 0xfa, 0xd7, 0xfb, 0x38, 0xfc, + 0x3f, 0xfc, 0x53, 0xfb, 0xba, 0xf9, 0xa4, 0xf7, 0x79, 0xf6, 0x80, 0xf4, + 0xc2, 0xf3, 0x22, 0xf3, 0x44, 0xf0, 0x17, 0xee, 0x3e, 0xec, 0x30, 0xea, + 0x34, 0xe9, 0xe7, 0xe5, 0x18, 0xe0, 0x29, 0xd9, 0x72, 0xd3, 0x27, 0xd0, + 0xc4, 0xd3, 0x97, 0xdc, 0x57, 0xeb, 0x65, 0xfc, 0x13, 0x0c, 0x63, 0x18, + 0x26, 0x20, 0x0a, 0x26, 0x83, 0x28, 0x43, 0x28, 0x8f, 0x20, 0x7c, 0x14, + 0x04, 0x04, 0xf4, 0xf5, 0x9e, 0xea, 0xaa, 0xe4, 0xac, 0xe1, 0xe6, 0xe1, + 0xa7, 0xe4, 0xaa, 0xe9, 0xfd, 0xef, 0xd8, 0xf6, 0xca, 0xfd, 0x60, 0x03, + 0xed, 0x06, 0x7c, 0x08, 0x7e, 0x07, 0x7c, 0x06, 0x26, 0x06, 0xac, 0x07, + 0x52, 0x0a, 0x40, 0x0d, 0x3d, 0x10, 0x52, 0x12, 0xd4, 0x14, 0x53, 0x15, + 0x26, 0x15, 0xa3, 0x12, 0xbb, 0x0e, 0x08, 0x0a, 0x58, 0x04, 0xe3, 0xfe, + 0x91, 0xfa, 0xcb, 0xf8, 0x0b, 0xf9, 0xca, 0xfb, 0x5b, 0xff, 0x2f, 0x03, + 0xdf, 0x08, 0xf2, 0x0d, 0xc1, 0x11, 0xc9, 0x13, 0x3b, 0x14, 0x57, 0x12, + 0x94, 0x10, 0xf2, 0x0d, 0x59, 0x0a, 0x33, 0x08, 0xfe, 0x05, 0xc4, 0x03, + 0x2c, 0x02, 0xf1, 0x00, 0xfa, 0xff, 0xcd, 0x00, 0x9a, 0x01, 0xed, 0x00, + 0x77, 0x00, 0xf7, 0xfe, 0x40, 0xfd, 0x11, 0xfd, 0x0a, 0xfe, 0xf2, 0xfe, + 0x5d, 0x00, 0xf8, 0x01, 0x92, 0x02, 0xf1, 0x05, 0x6e, 0x09, 0x00, 0x0c, + 0xed, 0x0d, 0x68, 0x0c, 0x54, 0x0a, 0x01, 0x09, 0x6f, 0x08, 0xcb, 0x07, + 0x37, 0x06, 0x19, 0x03, 0x25, 0x00, 0x7f, 0xfe, 0x7c, 0xfd, 0x11, 0xfe, + 0x70, 0xfd, 0x63, 0xfc, 0x25, 0xfc, 0xac, 0xfa, 0xaf, 0xfa, 0x92, 0xfa, + 0x15, 0xf9, 0x29, 0xf8, 0xfc, 0xf5, 0x22, 0xf4, 0x79, 0xf2, 0x95, 0xf2, + 0xe9, 0xf2, 0xdd, 0xf2, 0xe3, 0xf2, 0xda, 0xef, 0xbd, 0xec, 0xec, 0xe8, + 0x8e, 0xe3, 0x41, 0xdf, 0x0f, 0xd9, 0x48, 0xd5, 0x2c, 0xd3, 0x3b, 0xd7, + 0xf8, 0xdf, 0x34, 0xee, 0x2c, 0xfe, 0x8b, 0x0c, 0x76, 0x18, 0x14, 0x20, + 0xb6, 0x24, 0x0f, 0x25, 0x5a, 0x22, 0xb6, 0x19, 0xa1, 0x0e, 0xe1, 0x01, + 0x08, 0xf5, 0x37, 0xeb, 0xa6, 0xe5, 0x76, 0xe3, 0x66, 0xe5, 0xa6, 0xe9, + 0x45, 0xed, 0x72, 0xf2, 0xf0, 0xf8, 0x7b, 0xfd, 0x05, 0x02, 0x1c, 0x04, + 0xb8, 0x03, 0x80, 0x03, 0x97, 0x03, 0xb6, 0x03, 0xc2, 0x04, 0xfa, 0x06, + 0xf1, 0x09, 0x32, 0x0e, 0xb6, 0x12, 0xae, 0x14, 0x91, 0x15, 0x09, 0x14, + 0x5c, 0x11, 0x18, 0x0e, 0x49, 0x0a, 0x76, 0x05, 0xc7, 0x00, 0x61, 0xfc, + 0xfb, 0xf9, 0x2e, 0xfa, 0x84, 0xfc, 0x7c, 0x00, 0xbd, 0x04, 0xde, 0x08, + 0x0d, 0x0c, 0x98, 0x0e, 0x3e, 0x10, 0x96, 0x10, 0x20, 0x10, 0x63, 0x0e, + 0xb3, 0x0b, 0x31, 0x09, 0x38, 0x06, 0x86, 0x04, 0x91, 0x03, 0x0f, 0x03, + 0xaf, 0x02, 0xcf, 0x02, 0x89, 0x02, 0x12, 0x02, 0x3b, 0x02, 0x13, 0x02, + 0x76, 0x01, 0x68, 0x00, 0x1c, 0xff, 0xbe, 0xfd, 0x50, 0xfe, 0x4d, 0xff, + 0x48, 0x01, 0xd4, 0x02, 0xd5, 0x04, 0x84, 0x06, 0xa2, 0x08, 0xe6, 0x0a, + 0x01, 0x0c, 0x95, 0x0c, 0xa6, 0x0c, 0xa9, 0x0b, 0xd5, 0x0a, 0x3b, 0x09, + 0x16, 0x07, 0xd1, 0x05, 0x82, 0x03, 0x94, 0x01, 0x95, 0xff, 0xe2, 0xfd, + 0x85, 0xfc, 0x28, 0xfc, 0x0e, 0xfb, 0x68, 0xfa, 0xbd, 0xf9, 0x86, 0xf9, + 0xbd, 0xf8, 0xfd, 0xf7, 0xff, 0xf5, 0x89, 0xf3, 0x39, 0xf3, 0x5b, 0xf0, + 0x8c, 0xf1, 0xb3, 0xef, 0xaa, 0xee, 0x50, 0xed, 0x65, 0xea, 0xeb, 0xe7, + 0x58, 0xe3, 0x16, 0xdf, 0x81, 0xd8, 0x74, 0xd6, 0xb9, 0xd6, 0xfb, 0xdd, + 0x4d, 0xea, 0xca, 0xf5, 0xdd, 0x02, 0xa7, 0x0a, 0xb1, 0x13, 0xbc, 0x1a, + 0x99, 0x1f, 0x3f, 0x21, 0xb1, 0x1a, 0xdf, 0x11, 0x95, 0x05, 0x36, 0xfc, + 0x5d, 0xf4, 0x96, 0xef, 0x7f, 0xeb, 0xda, 0xe8, 0x58, 0xe9, 0x67, 0xeb, + 0xa0, 0xef, 0x5a, 0xf5, 0x27, 0xfa, 0x5b, 0xfe, 0xbe, 0x00, 0x26, 0x00, + 0x40, 0xff, 0x6c, 0xff, 0x62, 0x00, 0x4f, 0x02, 0xcf, 0x03, 0xd3, 0x05, + 0x69, 0x08, 0xca, 0x0b, 0xc7, 0x0f, 0xab, 0x12, 0x86, 0x14, 0x95, 0x13, + 0x49, 0x11, 0xc0, 0x0d, 0x1a, 0x0a, 0xdf, 0x06, 0x3b, 0x04, 0x37, 0x01, + 0x47, 0xff, 0x34, 0xfe, 0xeb, 0xff, 0xd0, 0x02, 0x78, 0x06, 0xf2, 0x08, + 0x52, 0x0a, 0x63, 0x0c, 0x53, 0x0c, 0xc8, 0x0c, 0xe8, 0x0b, 0xd0, 0x0a, + 0x21, 0x09, 0x4b, 0x08, 0xe2, 0x06, 0xab, 0x05, 0xc9, 0x04, 0xe4, 0x03, + 0x12, 0x04, 0x47, 0x04, 0x82, 0x04, 0x40, 0x04, 0x1b, 0x03, 0x6f, 0x01, + 0x5f, 0x00, 0x32, 0xff, 0xa0, 0xfe, 0xcb, 0xfe, 0xe6, 0xfe, 0xb9, 0xff, + 0x7c, 0x00, 0x4b, 0x02, 0x75, 0x04, 0xfb, 0x06, 0x84, 0x09, 0x01, 0x0c, + 0x41, 0x0d, 0x4f, 0x0e, 0xc6, 0x0e, 0x75, 0x0e, 0xbb, 0x0d, 0x5a, 0x0c, + 0xcf, 0x0a, 0x65, 0x08, 0x2a, 0x06, 0xbf, 0x03, 0x96, 0x01, 0x21, 0x00, + 0xdc, 0xfe, 0x16, 0xfe, 0xf4, 0xfc, 0xdc, 0xfb, 0x0c, 0xfb, 0x76, 0xfa, + 0x07, 0xfa, 0x19, 0xf9, 0xcf, 0xf6, 0x8c, 0xf4, 0xfd, 0xf1, 0x2b, 0xf1, + 0x94, 0xf0, 0x29, 0xf0, 0xad, 0xee, 0x78, 0xec, 0x2c, 0xeb, 0x7d, 0xe9, + 0xed, 0xe7, 0x6d, 0xe4, 0x96, 0xdf, 0x65, 0xdb, 0x7d, 0xd8, 0x9e, 0xda, + 0x73, 0xe0, 0x12, 0xea, 0x17, 0xf4, 0x5f, 0xfd, 0x1e, 0x05, 0x57, 0x0c, + 0xe2, 0x13, 0x31, 0x18, 0x96, 0x19, 0xf8, 0x14, 0x25, 0x0e, 0x2a, 0x06, + 0x9c, 0xfe, 0xf0, 0xf7, 0x06, 0xf3, 0x0d, 0xf0, 0x50, 0xef, 0x94, 0xef, + 0xdd, 0xf0, 0xb9, 0xf2, 0xbf, 0xf6, 0xa7, 0xfa, 0x02, 0xfe, 0xf5, 0xfe, + 0x14, 0xff, 0x88, 0xfc, 0x72, 0xfc, 0x0b, 0xfd, 0xa5, 0xfd, 0x13, 0x00, + 0x61, 0x01, 0xa6, 0x03, 0xd0, 0x06, 0xb1, 0x0a, 0xe6, 0x0d, 0x91, 0x10, + 0x10, 0x12, 0x0a, 0x12, 0x69, 0x11, 0x71, 0x0e, 0xa0, 0x0a, 0x85, 0x07, + 0xab, 0x05, 0x59, 0x05, 0x7f, 0x05, 0xee, 0x04, 0xe1, 0x04, 0xb4, 0x05, + 0x38, 0x07, 0x6e, 0x09, 0xb9, 0x0a, 0xdc, 0x0a, 0x39, 0x0a, 0x2d, 0x09, + 0xb0, 0x07, 0xed, 0x06, 0x3d, 0x06, 0x54, 0x05, 0x5c, 0x04, 0xcb, 0x03, + 0xc5, 0x02, 0x66, 0x03, 0x16, 0x04, 0x7d, 0x04, 0xce, 0x04, 0xc9, 0x03, + 0xf6, 0x02, 0x19, 0x02, 0x89, 0x01, 0xe2, 0x00, 0x1d, 0x01, 0xb6, 0x01, + 0x40, 0x02, 0x7a, 0x02, 0xf1, 0x02, 0xef, 0x03, 0x94, 0x05, 0xb8, 0x07, + 0x2f, 0x09, 0x18, 0x0a, 0xef, 0x0a, 0x2e, 0x0b, 0x05, 0x0b, 0x2b, 0x0b, + 0xb3, 0x0a, 0x3f, 0x0a, 0xc6, 0x09, 0x6f, 0x08, 0xd9, 0x06, 0x6e, 0x05, + 0x6c, 0x04, 0x0f, 0x03, 0x69, 0x02, 0xe3, 0x00, 0x7b, 0xff, 0x5a, 0xfd, + 0x66, 0xfc, 0x1d, 0xfb, 0x8d, 0xf9, 0x23, 0xf8, 0x58, 0xf5, 0x93, 0xf3, + 0x70, 0xf2, 0x51, 0xf2, 0x1d, 0xf1, 0xbb, 0xf0, 0xd7, 0xee, 0x54, 0xee, + 0x99, 0xed, 0x63, 0xec, 0x92, 0xea, 0x9a, 0xe7, 0x5b, 0xe4, 0x33, 0xe1, + 0x41, 0xdf, 0x99, 0xde, 0xf6, 0xe0, 0xf8, 0xe5, 0xd1, 0xec, 0x31, 0xf4, + 0x12, 0xfb, 0x66, 0x01, 0xb3, 0x07, 0xd8, 0x0c, 0x0b, 0x0f, 0x69, 0x0e, + 0x0f, 0x0b, 0xd7, 0x06, 0xa8, 0x02, 0x53, 0xfe, 0x7e, 0xf9, 0x95, 0xf6, + 0x76, 0xf5, 0xbe, 0xf5, 0xdf, 0xf6, 0xfe, 0xf7, 0xeb, 0xf8, 0xfa, 0xfa, + 0x54, 0xfd, 0xc8, 0xfe, 0x0a, 0xff, 0x85, 0xfe, 0x04, 0xfe, 0x94, 0xfd, + 0x5e, 0xfd, 0x1b, 0xfd, 0x4f, 0xfd, 0xab, 0xfe, 0xd2, 0x00, 0x38, 0x03, + 0xc3, 0x05, 0x76, 0x08, 0x1c, 0x0b, 0x59, 0x0d, 0x49, 0x0e, 0xe9, 0x0d, + 0x4e, 0x0d, 0xf6, 0x0c, 0xfc, 0x0c, 0xf2, 0x0b, 0x08, 0x0a, 0x5a, 0x08, + 0xa8, 0x07, 0x99, 0x08, 0x20, 0x09, 0x21, 0x09, 0xcc, 0x08, 0x6c, 0x08, + 0xce, 0x08, 0xa3, 0x08, 0x3d, 0x08, 0xac, 0x07, 0xd8, 0x06, 0x29, 0x06, + 0xa3, 0x04, 0xaa, 0x02, 0x51, 0x01, 0x84, 0x00, 0x63, 0x00, 0x1c, 0x00, + 0x95, 0xff, 0xc1, 0xff, 0x21, 0x00, 0x46, 0x01, 0xca, 0x01, 0x11, 0x02, + 0xa2, 0x02, 0x43, 0x03, 0x2e, 0x04, 0xb2, 0x04, 0x11, 0x05, 0x36, 0x05, + 0xa2, 0x05, 0x13, 0x06, 0x69, 0x06, 0x3f, 0x06, 0x2f, 0x06, 0x00, 0x06, + 0x54, 0x06, 0xc2, 0x06, 0x09, 0x07, 0xdf, 0x06, 0xd2, 0x06, 0xe4, 0x06, + 0xcc, 0x06, 0x8c, 0x06, 0xdd, 0x05, 0x0f, 0x05, 0x5f, 0x04, 0xac, 0x03, + 0xf5, 0x02, 0x3d, 0x02, 0xcd, 0x01, 0x93, 0x01, 0x62, 0x01, 0x38, 0x01, + 0xd1, 0x00, 0x4e, 0x00, 0xf8, 0xff, 0x41, 0xff, 0x9c, 0xfe, 0xc4, 0xfd, + 0xc4, 0xfc, 0xfb, 0xfb, 0x05, 0xfb, 0x06, 0xfa, 0xce, 0xf8, 0xc9, 0xf7, + 0xde, 0xf6, 0x1c, 0xf5, 0xc8, 0xf3, 0x71, 0xf2, 0x1e, 0xf1, 0xf7, 0xef, + 0x3e, 0xef, 0x27, 0xef, 0x54, 0xf0, 0x95, 0xf2, 0x93, 0xf4, 0x13, 0xf6, + 0x66, 0xf7, 0x85, 0xf8, 0x20, 0xf9, 0x42, 0xf9, 0x2d, 0xf8, 0xaa, 0xf6, + 0x52, 0xf5, 0x08, 0xf4, 0x75, 0xf2, 0x4a, 0xf1, 0xf0, 0xf0, 0x43, 0xf1, + 0x67, 0xf2, 0xb3, 0xf3, 0xdb, 0xf4, 0x57, 0xf6, 0xce, 0xf7, 0x07, 0xf9, + 0x12, 0xfa, 0xd7, 0xfa, 0xe2, 0xfa, 0x06, 0xfb, 0x97, 0xfb, 0x35, 0xfc, + 0xda, 0xfc, 0x42, 0xfd, 0xf4, 0xfd, 0x51, 0xff, 0x51, 0x01, 0xfc, 0x02, + 0xd9, 0x03, 0xa4, 0x04, 0xa4, 0x05, 0xbd, 0x06, 0x52, 0x07, 0x07, 0x07, + 0x89, 0x06, 0x8b, 0x06, 0xd4, 0x06, 0x0f, 0x07, 0x09, 0x07, 0x0c, 0x07, + 0x77, 0x07, 0x0d, 0x08, 0x66, 0x08, 0xb3, 0x08, 0xfb, 0x08, 0xd3, 0x08, + 0x71, 0x08, 0xc4, 0x07, 0x0b, 0x07, 0x8f, 0x06, 0x59, 0x06, 0x65, 0x06, + 0x74, 0x06, 0x90, 0x06, 0x5d, 0x06, 0x50, 0x06, 0xdb, 0x06, 0xb0, 0x07, + 0x94, 0x08, 0x1a, 0x09, 0x44, 0x09, 0x5a, 0x09, 0x50, 0x09, 0x6b, 0x09, + 0x79, 0x09, 0xa8, 0x09, 0xef, 0x09, 0x1a, 0x0a, 0x5f, 0x0a, 0x8c, 0x0a, + 0xe6, 0x0a, 0x34, 0x0b, 0x70, 0x0b, 0x95, 0x0b, 0x9f, 0x0b, 0x6b, 0x0b, + 0xf8, 0x0a, 0x91, 0x0a, 0x6e, 0x0a, 0x45, 0x0a, 0x05, 0x0a, 0xa3, 0x09, + 0x41, 0x09, 0x4d, 0x09, 0x44, 0x09, 0xfd, 0x08, 0x98, 0x08, 0x29, 0x08, + 0xd1, 0x07, 0x42, 0x07, 0x7e, 0x06, 0xab, 0x05, 0xf0, 0x04, 0x6d, 0x04, + 0xb1, 0x03, 0x73, 0x02, 0xf9, 0x00, 0xa2, 0xff, 0x83, 0xfe, 0x29, 0xfd, + 0xac, 0xfb, 0x10, 0xfa, 0x5b, 0xf8, 0x91, 0xf6, 0xf6, 0xf4, 0xa4, 0xf3, + 0x4d, 0xf2, 0xd5, 0xf0, 0x1e, 0xef, 0x8f, 0xed, 0x3f, 0xec, 0x21, 0xeb, + 0x80, 0xea, 0x59, 0xea, 0xcd, 0xea, 0x37, 0xeb, 0x2d, 0xeb, 0xf1, 0xea, + 0xb0, 0xea, 0x9e, 0xea, 0x29, 0xea, 0x59, 0xe9, 0xc3, 0xe8, 0x80, 0xe8, + 0xb8, 0xe8, 0xf6, 0xe8, 0x5b, 0xe9, 0xc3, 0xea, 0xdb, 0xec, 0x84, 0xee, + 0x49, 0xef, 0xf6, 0xef, 0x2b, 0xf1, 0xc6, 0xf2, 0xf2, 0xf3, 0x6c, 0xf4, + 0xf3, 0xf4, 0xbe, 0xf6, 0xbe, 0xf8, 0xf3, 0xf9, 0xf6, 0xfa, 0xc0, 0xfc, + 0x98, 0xff, 0x67, 0x02, 0x30, 0x04, 0x3c, 0x05, 0x61, 0x06, 0xda, 0x07, + 0xe2, 0x08, 0x21, 0x09, 0x1b, 0x09, 0x30, 0x09, 0x7e, 0x09, 0xe3, 0x09, + 0x4e, 0x0a, 0xe1, 0x0a, 0xe8, 0x0b, 0x3b, 0x0d, 0x86, 0x0e, 0x5c, 0x0f, + 0x9f, 0x0f, 0x5f, 0x0f, 0x46, 0x0f, 0x7f, 0x0f, 0x52, 0x0f, 0x94, 0x0e, + 0x90, 0x0d, 0xeb, 0x0c, 0xe1, 0x0c, 0xcb, 0x0c, 0x75, 0x0c, 0x07, 0x0c, + 0x05, 0x0c, 0xa8, 0x0c, 0x1b, 0x0d, 0x14, 0x0d, 0xe1, 0x0c, 0x04, 0x0d, + 0x84, 0x0d, 0xac, 0x0d, 0x37, 0x0d, 0x72, 0x0c, 0x10, 0x0c, 0xe1, 0x0b, + 0xa8, 0x0b, 0x37, 0x0b, 0xf4, 0x0a, 0x39, 0x0b, 0x98, 0x0b, 0x9a, 0x0b, + 0x67, 0x0b, 0x5f, 0x0b, 0x8d, 0x0b, 0x78, 0x0b, 0xf5, 0x0a, 0x4d, 0x0a, + 0xa3, 0x09, 0x5c, 0x09, 0xde, 0x08, 0x1c, 0x08, 0x94, 0x07, 0x21, 0x07, + 0xf8, 0x06, 0xb1, 0x06, 0x19, 0x06, 0x8c, 0x05, 0xfe, 0x04, 0xa3, 0x04, + 0xf7, 0x03, 0x29, 0x03, 0x2a, 0x02, 0x06, 0x01, 0xea, 0xff, 0x82, 0xfe, + 0x06, 0xfd, 0x93, 0xfb, 0x26, 0xfa, 0xe2, 0xf8, 0x6d, 0xf7, 0xe4, 0xf5, + 0x53, 0xf4, 0xe7, 0xf2, 0x80, 0xf1, 0xfe, 0xef, 0x5c, 0xee, 0xad, 0xec, + 0xf4, 0xea, 0x0e, 0xe9, 0xb2, 0xe7, 0xea, 0xe6, 0x04, 0xe7, 0x6f, 0xe7, + 0x2f, 0xe7, 0x02, 0xe7, 0x17, 0xe7, 0x60, 0xe7, 0x38, 0xe7, 0x0e, 0xe6, + 0x20, 0xe5, 0x1c, 0xe5, 0x0f, 0xe6, 0xdb, 0xe6, 0xb5, 0xe6, 0x4b, 0xe7, + 0x69, 0xe9, 0x4d, 0xec, 0x73, 0xee, 0xfa, 0xee, 0x70, 0xef, 0xc5, 0xf0, + 0xcd, 0xf2, 0x32, 0xf4, 0x5d, 0xf4, 0xf4, 0xf4, 0xd7, 0xf6, 0x77, 0xf9, + 0x95, 0xfb, 0xe3, 0xfc, 0x8e, 0xfe, 0x33, 0x01, 0x74, 0x04, 0xec, 0x06, + 0x2f, 0x08, 0x1d, 0x09, 0x42, 0x0a, 0x5b, 0x0b, 0xdc, 0x0b, 0xb5, 0x0b, + 0x64, 0x0b, 0x58, 0x0b, 0xe9, 0x0b, 0xe0, 0x0c, 0xd5, 0x0d, 0xd7, 0x0e, + 0x0f, 0x10, 0x74, 0x11, 0xb0, 0x12, 0x5b, 0x13, 0x68, 0x13, 0x1e, 0x13, + 0xd2, 0x12, 0x81, 0x12, 0xf2, 0x11, 0x29, 0x11, 0x61, 0x10, 0xcb, 0x0f, + 0x66, 0x0f, 0x2e, 0x0f, 0xf5, 0x0e, 0xd2, 0x0e, 0xef, 0x0e, 0xf8, 0x0e, + 0xf3, 0x0e, 0xd2, 0x0e, 0x88, 0x0e, 0x41, 0x0e, 0xaf, 0x0d, 0x00, 0x0d, + 0x35, 0x0c, 0x57, 0x0b, 0xab, 0x0a, 0x0f, 0x0a, 0xb4, 0x09, 0x84, 0x09, + 0x6c, 0x09, 0x5d, 0x09, 0x43, 0x09, 0x1c, 0x09, 0xde, 0x08, 0x9f, 0x08, + 0x49, 0x08, 0xd6, 0x07, 0x55, 0x07, 0xc7, 0x06, 0x52, 0x06, 0xf0, 0x05, + 0x89, 0x05, 0x02, 0x05, 0x89, 0x04, 0x23, 0x04, 0xbe, 0x03, 0x52, 0x03, + 0xce, 0x02, 0x4e, 0x02, 0xe2, 0x01, 0x62, 0x01, 0xcc, 0x00, 0x21, 0x00, + 0x5a, 0xff, 0x78, 0xfe, 0x76, 0xfd, 0x6c, 0xfc, 0x5d, 0xfb, 0x43, 0xfa, + 0x0f, 0xf9, 0xc8, 0xf7, 0x9d, 0xf6, 0x79, 0xf5, 0x41, 0xf4, 0xf5, 0xf2, + 0x92, 0xf1, 0x51, 0xf0, 0x19, 0xef, 0xc5, 0xed, 0x48, 0xec, 0x90, 0xea, + 0x1c, 0xe9, 0x5e, 0xe8, 0x4b, 0xe8, 0x87, 0xe8, 0x62, 0xe8, 0x03, 0xe8, + 0x18, 0xe8, 0xa8, 0xe8, 0xc7, 0xe8, 0x1b, 0xe8, 0x19, 0xe7, 0xe8, 0xe6, + 0xeb, 0xe7, 0x0f, 0xe9, 0x25, 0xe9, 0xf2, 0xe8, 0x63, 0xea, 0x35, 0xed, + 0xc2, 0xef, 0xba, 0xf0, 0xa2, 0xf0, 0xa0, 0xf1, 0x11, 0xf4, 0x15, 0xf6, + 0x6c, 0xf6, 0x6c, 0xf6, 0xee, 0xf7, 0xc3, 0xfa, 0x60, 0xfd, 0xb2, 0xfe, + 0x95, 0xff, 0xb4, 0x01, 0xc3, 0x04, 0x54, 0x07, 0x9d, 0x08, 0x2b, 0x09, + 0x10, 0x0a, 0x5e, 0x0b, 0x4d, 0x0c, 0x61, 0x0c, 0x05, 0x0c, 0xe8, 0x0b, + 0x90, 0x0c, 0xb0, 0x0d, 0x60, 0x0e, 0x96, 0x0e, 0x12, 0x0f, 0x35, 0x10, + 0x7e, 0x11, 0x0e, 0x12, 0xbc, 0x11, 0x3b, 0x11, 0x28, 0x11, 0x70, 0x11, + 0x26, 0x11, 0x0d, 0x10, 0x20, 0x0f, 0xe4, 0x0e, 0x0e, 0x0f, 0xc7, 0x0e, + 0xfd, 0x0d, 0x7e, 0x0d, 0x93, 0x0d, 0xe2, 0x0d, 0xa5, 0x0d, 0x06, 0x0d, + 0xae, 0x0c, 0xa8, 0x0c, 0xb1, 0x0c, 0x21, 0x0c, 0x23, 0x0b, 0x80, 0x0a, + 0x5b, 0x0a, 0x1a, 0x0a, 0x78, 0x09, 0xe8, 0x08, 0xc8, 0x08, 0x07, 0x09, + 0x01, 0x09, 0x85, 0x08, 0x01, 0x08, 0xe7, 0x07, 0xf7, 0x07, 0xb5, 0x07, + 0x32, 0x07, 0x91, 0x06, 0x2f, 0x06, 0x1e, 0x06, 0xe3, 0x05, 0x74, 0x05, + 0xeb, 0x04, 0x7c, 0x04, 0x35, 0x04, 0xe8, 0x03, 0x6e, 0x03, 0xbf, 0x02, + 0x2a, 0x02, 0xd6, 0x01, 0x7f, 0x01, 0xf8, 0x00, 0x0f, 0x00, 0x28, 0xff, + 0x74, 0xfe, 0xc4, 0xfd, 0xc7, 0xfc, 0x7b, 0xfb, 0x30, 0xfa, 0x1c, 0xf9, + 0x05, 0xf8, 0xd4, 0xf6, 0x76, 0xf5, 0x36, 0xf4, 0x26, 0xf3, 0x04, 0xf2, + 0xce, 0xf0, 0x6e, 0xef, 0x27, 0xee, 0xcb, 0xec, 0x54, 0xeb, 0x08, 0xea, + 0x57, 0xe9, 0x63, 0xe9, 0xa3, 0xe9, 0x8f, 0xe9, 0x4b, 0xe9, 0x54, 0xe9, + 0xaa, 0xe9, 0x90, 0xe9, 0xa6, 0xe8, 0xa2, 0xe7, 0xa0, 0xe7, 0x96, 0xe8, + 0x67, 0xe9, 0x59, 0xe9, 0x92, 0xe9, 0x43, 0xeb, 0xe1, 0xed, 0x2b, 0xf0, + 0xff, 0xf0, 0x26, 0xf1, 0x59, 0xf2, 0x6d, 0xf4, 0xfa, 0xf5, 0x48, 0xf6, + 0x77, 0xf6, 0xfb, 0xf7, 0xa9, 0xfa, 0x12, 0xfd, 0x5e, 0xfe, 0x75, 0xff, + 0x8f, 0x01, 0x99, 0x04, 0x27, 0x07, 0x7f, 0x08, 0x21, 0x09, 0xf1, 0x09, + 0x29, 0x0b, 0xfc, 0x0b, 0xee, 0x0b, 0x66, 0x0b, 0x3b, 0x0b, 0x01, 0x0c, + 0x03, 0x0d, 0x85, 0x0d, 0xc0, 0x0d, 0x5d, 0x0e, 0xa4, 0x0f, 0xc9, 0x10, + 0x4b, 0x11, 0x34, 0x11, 0xe0, 0x10, 0xc6, 0x10, 0xac, 0x10, 0x37, 0x10, + 0x63, 0x0f, 0x7a, 0x0e, 0x0f, 0x0e, 0xe0, 0x0d, 0x9f, 0x0d, 0x3c, 0x0d, + 0xdc, 0x0c, 0xe8, 0x0c, 0x28, 0x0d, 0x3a, 0x0d, 0x09, 0x0d, 0xaf, 0x0c, + 0x72, 0x0c, 0x31, 0x0c, 0xc9, 0x0b, 0x37, 0x0b, 0x89, 0x0a, 0xfc, 0x09, + 0x94, 0x09, 0x48, 0x09, 0x20, 0x09, 0x0b, 0x09, 0xfe, 0x08, 0xfb, 0x08, + 0xf7, 0x08, 0xea, 0x08, 0xbc, 0x08, 0x6f, 0x08, 0x1e, 0x08, 0xc1, 0x07, + 0x50, 0x07, 0xcc, 0x06, 0x44, 0x06, 0xe5, 0x05, 0x8d, 0x05, 0x28, 0x05, + 0xc4, 0x04, 0x5b, 0x04, 0x08, 0x04, 0xae, 0x03, 0x35, 0x03, 0xb5, 0x02, + 0x2f, 0x02, 0xb7, 0x01, 0x20, 0x01, 0x5f, 0x00, 0x7f, 0xff, 0x8f, 0xfe, + 0xa7, 0xfd, 0xae, 0xfc, 0x98, 0xfb, 0x59, 0xfa, 0x29, 0xf9, 0x26, 0xf8, + 0x1f, 0xf7, 0xf8, 0xf5, 0xb5, 0xf4, 0x88, 0xf3, 0x7b, 0xf2, 0x5e, 0xf1, + 0x2e, 0xf0, 0xcf, 0xee, 0x86, 0xed, 0x40, 0xec, 0xeb, 0xea, 0xe2, 0xe9, + 0x66, 0xe9, 0x9e, 0xe9, 0x01, 0xea, 0xc4, 0xe9, 0x7f, 0xe9, 0xa7, 0xe9, + 0x08, 0xea, 0xf2, 0xe9, 0xf8, 0xe8, 0x21, 0xe8, 0x5c, 0xe8, 0x6a, 0xe9, + 0x1b, 0xea, 0xec, 0xe9, 0x67, 0xea, 0x64, 0xec, 0x16, 0xef, 0xd8, 0xf0, + 0x43, 0xf1, 0xc7, 0xf1, 0x5b, 0xf3, 0x82, 0xf5, 0xa6, 0xf6, 0xd0, 0xf6, + 0x78, 0xf7, 0x69, 0xf9, 0xe4, 0xfb, 0xb7, 0xfd, 0xe3, 0xfe, 0x69, 0x00, + 0xcf, 0x02, 0x99, 0x05, 0xa7, 0x07, 0xc2, 0x08, 0x92, 0x09, 0xa3, 0x0a, + 0x9d, 0x0b, 0xfe, 0x0b, 0xd7, 0x0b, 0x87, 0x0b, 0x9a, 0x0b, 0x35, 0x0c, + 0xd1, 0x0c, 0x36, 0x0d, 0x8d, 0x0d, 0x54, 0x0e, 0x71, 0x0f, 0x3f, 0x10, + 0x6f, 0x10, 0x40, 0x10, 0x29, 0x10, 0x1f, 0x10, 0xeb, 0x0f, 0x4b, 0x0f, + 0x6c, 0x0e, 0xe6, 0x0d, 0xb2, 0x0d, 0x55, 0x0d, 0xb4, 0x0c, 0x29, 0x0c, + 0x0a, 0x0c, 0x33, 0x0c, 0x60, 0x0c, 0x2c, 0x0c, 0x17, 0x0c, 0x38, 0x0c, + 0x25, 0x0c, 0xec, 0x0b, 0x58, 0x0b, 0xcb, 0x0a, 0x5d, 0x0a, 0xf8, 0x09, + 0x6e, 0x09, 0xd6, 0x08, 0xbf, 0x08, 0xe2, 0x08, 0xf4, 0x08, 0xe6, 0x08, + 0xae, 0x08, 0xa8, 0x08, 0xa4, 0x08, 0x75, 0x08, 0x33, 0x08, 0xdd, 0x07, + 0x94, 0x07, 0x36, 0x07, 0xb4, 0x06, 0x44, 0x06, 0xd8, 0x05, 0x63, 0x05, + 0xe4, 0x04, 0x6c, 0x04, 0x07, 0x04, 0xa1, 0x03, 0x32, 0x03, 0xab, 0x02, + 0x34, 0x02, 0xd3, 0x01, 0x50, 0x01, 0x8c, 0x00, 0x9f, 0xff, 0xa8, 0xfe, + 0xa7, 0xfd, 0x96, 0xfc, 0x6a, 0xfb, 0x3f, 0xfa, 0x32, 0xf9, 0x31, 0xf8, + 0x1b, 0xf7, 0x14, 0xf6, 0x16, 0xf5, 0xe8, 0xf3, 0xd2, 0xf2, 0xb1, 0xf1, + 0x98, 0xf0, 0x5f, 0xef, 0x0b, 0xee, 0xa7, 0xec, 0x48, 0xeb, 0x3b, 0xea, + 0x7a, 0xe9, 0x64, 0xe9, 0xc3, 0xe9, 0x22, 0xea, 0x1a, 0xea, 0x14, 0xea, + 0x4d, 0xea, 0x58, 0xea, 0xff, 0xe9, 0x18, 0xe9, 0x92, 0xe8, 0x06, 0xe9, + 0xc2, 0xe9, 0x28, 0xea, 0x67, 0xea, 0x8a, 0xeb, 0xf3, 0xed, 0x31, 0xf0, + 0x6c, 0xf1, 0xdf, 0xf1, 0xd1, 0xf2, 0xd4, 0xf4, 0x86, 0xf6, 0x43, 0xf7, + 0x81, 0xf7, 0xcd, 0xf8, 0x06, 0xfb, 0x00, 0xfd, 0x4a, 0xfe, 0x46, 0xff, + 0x70, 0x01, 0x48, 0x04, 0x8a, 0x06, 0xef, 0x07, 0xb9, 0x08, 0xe4, 0x09, + 0x1a, 0x0b, 0xe6, 0x0b, 0xef, 0x0b, 0xb2, 0x0b, 0xe9, 0x0b, 0x21, 0x0c, + 0x6c, 0x0c, 0xb4, 0x0c, 0x2a, 0x0d, 0xe3, 0x0d, 0xa4, 0x0e, 0x60, 0x0f, + 0xd2, 0x0f, 0x02, 0x10, 0x02, 0x10, 0xcc, 0x0f, 0x9b, 0x0f, 0x5a, 0x0f, + 0xf0, 0x0e, 0x69, 0x0e, 0x0b, 0x0e, 0xac, 0x0d, 0x30, 0x0d, 0xaf, 0x0c, + 0x2d, 0x0c, 0x10, 0x0c, 0x27, 0x0c, 0x2e, 0x0c, 0x19, 0x0c, 0xfb, 0x0b, + 0x1a, 0x0c, 0x05, 0x0c, 0xb8, 0x0b, 0x44, 0x0b, 0xc3, 0x0a, 0x57, 0x0a, + 0xb8, 0x09, 0x15, 0x09, 0xab, 0x08, 0x95, 0x08, 0xb5, 0x08, 0xac, 0x08, + 0x7c, 0x08, 0x75, 0x08, 0x8b, 0x08, 0x68, 0x08, 0x18, 0x08, 0xcf, 0x07, + 0x7d, 0x07, 0x08, 0x07, 0x7f, 0x06, 0x08, 0x06, 0xa3, 0x05, 0x3c, 0x05, + 0xc5, 0x04, 0x46, 0x04, 0x08, 0x04, 0xcd, 0x03, 0x73, 0x03, 0xeb, 0x02, + 0x53, 0x02, 0xcd, 0x01, 0x36, 0x01, 0x8d, 0x00, 0xb3, 0xff, 0xc1, 0xfe, + 0xcd, 0xfd, 0xd2, 0xfc, 0xe6, 0xfb, 0xd4, 0xfa, 0xef, 0xf9, 0xfd, 0xf8, + 0xb2, 0xf7, 0x50, 0xf6, 0xdb, 0xf4, 0x9b, 0xf3, 0x6c, 0xf2, 0x34, 0xf1, + 0x45, 0xf0, 0x03, 0xef, 0xc4, 0xed, 0x80, 0xec, 0xfa, 0xea, 0x94, 0xe9, + 0x73, 0xe8, 0x10, 0xe8, 0x5a, 0xe8, 0xbe, 0xe8, 0x95, 0xe8, 0xa0, 0xe8, + 0x52, 0xe9, 0x4a, 0xea, 0x9e, 0xea, 0x22, 0xea, 0x70, 0xe9, 0xa1, 0xe9, + 0x60, 0xea, 0xd1, 0xea, 0xce, 0xea, 0x3e, 0xeb, 0x4c, 0xed, 0x83, 0xef, + 0x21, 0xf1, 0x35, 0xf2, 0xf5, 0xf2, 0x9f, 0xf4, 0xde, 0xf6, 0x89, 0xf8, + 0x6c, 0xf9, 0x5e, 0xfa, 0xad, 0xfb, 0xcb, 0xfd, 0xbf, 0xff, 0xbe, 0x00, + 0xf0, 0x01, 0x8d, 0x03, 0xa6, 0x05, 0x90, 0x07, 0xa2, 0x08, 0x82, 0x09, + 0x7e, 0x0a, 0xfa, 0x0b, 0x17, 0x0d, 0x43, 0x0d, 0x80, 0x0d, 0xc9, 0x0d, + 0x23, 0x0e, 0xa1, 0x0e, 0xb2, 0x0e, 0xd2, 0x0e, 0x11, 0x0f, 0xef, 0x0f, + 0x66, 0x10, 0x45, 0x10, 0xcf, 0x0f, 0x79, 0x0f, 0xb5, 0x0f, 0x8b, 0x0f, + 0x05, 0x0f, 0x90, 0x0e, 0x4c, 0x0e, 0x63, 0x0e, 0x07, 0x0e, 0x41, 0x0d, + 0x7b, 0x0c, 0x12, 0x0c, 0x01, 0x0c, 0x8b, 0x0b, 0xe7, 0x0a, 0x62, 0x0a, + 0x49, 0x0a, 0x86, 0x0a, 0x7d, 0x0a, 0x22, 0x0a, 0xe7, 0x09, 0x7b, 0x09, + 0x45, 0x09, 0xf4, 0x08, 0xad, 0x08, 0xa8, 0x08, 0x87, 0x08, 0x48, 0x08, + 0xec, 0x07, 0x73, 0x07, 0x46, 0x07, 0x53, 0x07, 0x5b, 0x07, 0xb8, 0x07, + 0xae, 0x07, 0x84, 0x07, 0xff, 0x06, 0x88, 0x06, 0x55, 0x06, 0x47, 0x06, + 0x22, 0x06, 0x49, 0x05, 0xc0, 0x03, 0xfa, 0x01, 0xa5, 0x00, 0xed, 0xff, + 0x2a, 0x00, 0x6d, 0x00, 0xf7, 0xff, 0x00, 0xff, 0xe5, 0xfd, 0x28, 0xfd, + 0xb7, 0xfc, 0xd3, 0xfb, 0xde, 0xfa, 0x37, 0xf9, 0x30, 0xf7, 0x8d, 0xf4, + 0x70, 0xf2, 0xd0, 0xef, 0x73, 0xee, 0xd8, 0xec, 0xe8, 0xea, 0x0e, 0xe9, + 0xb7, 0xe6, 0x4f, 0xe5, 0x9c, 0xe4, 0x33, 0xe3, 0x18, 0xe2, 0xec, 0xe0, + 0x8e, 0xdf, 0xa8, 0xe1, 0x81, 0xe4, 0x30, 0xe9, 0x1a, 0xed, 0xe7, 0xed, + 0x06, 0xf0, 0xec, 0xf1, 0xf6, 0xf4, 0x24, 0xf9, 0x69, 0xf9, 0x35, 0xf8, + 0xf8, 0xf5, 0x23, 0xf4, 0x5f, 0xf4, 0x5e, 0xf5, 0x86, 0xf6, 0xe7, 0xf7, + 0x68, 0xf8, 0x16, 0xf9, 0xb0, 0xfa, 0x8b, 0xfc, 0x8c, 0xff, 0xcc, 0x01, + 0x19, 0x03, 0x7e, 0x03, 0xe0, 0x02, 0x67, 0x02, 0xc5, 0x01, 0xf6, 0x01, + 0xc8, 0x01, 0x1c, 0x02, 0x94, 0x02, 0x5b, 0x03, 0x16, 0x05, 0xee, 0x06, + 0xc8, 0x09, 0x7c, 0x0c, 0x21, 0x0f, 0xe8, 0x10, 0x5f, 0x11, 0x68, 0x11, + 0xfb, 0x10, 0xa7, 0x10, 0xd0, 0x10, 0xf5, 0x0f, 0x29, 0x0f, 0x23, 0x0e, + 0x33, 0x0d, 0x44, 0x0d, 0x7a, 0x0d, 0xaf, 0x0e, 0xa2, 0x0f, 0x04, 0x10, + 0x0c, 0x10, 0x27, 0x0f, 0x10, 0x0f, 0x65, 0x0e, 0xca, 0x0c, 0xad, 0x0a, + 0x48, 0x08, 0x4a, 0x06, 0x0f, 0x05, 0x65, 0x04, 0x26, 0x03, 0xf5, 0x02, + 0xe0, 0x02, 0x19, 0x03, 0xb5, 0x03, 0x66, 0x04, 0x28, 0x05, 0x1a, 0x06, + 0xcf, 0x06, 0x6b, 0x06, 0x67, 0x06, 0xf5, 0x05, 0xf3, 0x05, 0x41, 0x06, + 0x35, 0x06, 0x8f, 0x06, 0x3c, 0x06, 0xfe, 0x06, 0x9d, 0x07, 0x41, 0x08, + 0x06, 0x09, 0x24, 0x09, 0x3e, 0x09, 0xf0, 0x08, 0x7c, 0x08, 0x8d, 0x07, + 0x30, 0x06, 0x05, 0x05, 0xc6, 0x03, 0xb9, 0x02, 0xa0, 0x01, 0x91, 0x00, + 0xcc, 0xff, 0x36, 0xff, 0x37, 0xff, 0x74, 0xff, 0x4e, 0xff, 0x17, 0x00, + 0x39, 0xff, 0x95, 0xfd, 0xd3, 0xfb, 0x57, 0xf9, 0x21, 0xf7, 0x43, 0xf5, + 0x52, 0xf2, 0x5b, 0xef, 0x5b, 0xec, 0xcf, 0xea, 0x79, 0xe9, 0x49, 0xe9, + 0x6c, 0xe9, 0xb5, 0xe7, 0x49, 0xe7, 0x36, 0xe6, 0x93, 0xe5, 0x42, 0xe4, + 0x22, 0xe2, 0xdb, 0xde, 0xc3, 0xde, 0xb2, 0xdf, 0x2e, 0xe6, 0x7a, 0xec, + 0x3b, 0xf0, 0x10, 0xf4, 0x9f, 0xf4, 0x16, 0xfa, 0x47, 0x00, 0x7e, 0x05, + 0xa0, 0x07, 0xc6, 0x05, 0x4f, 0x03, 0x39, 0x00, 0xed, 0xfd, 0x68, 0xfc, + 0x9e, 0xfa, 0x0a, 0xfa, 0x70, 0xf9, 0x4b, 0xf8, 0xc4, 0xf8, 0xb3, 0xf9, + 0x37, 0xfc, 0x17, 0xff, 0x17, 0x01, 0xf2, 0x02, 0xdb, 0x04, 0xb6, 0x04, + 0xa6, 0x03, 0x6f, 0x01, 0xb2, 0x00, 0x30, 0x01, 0xcc, 0x02, 0x63, 0x03, + 0x0b, 0x03, 0xbd, 0x03, 0x48, 0x05, 0x8f, 0x07, 0xf5, 0x0a, 0xef, 0x0d, + 0x6d, 0x10, 0x50, 0x12, 0x44, 0x12, 0x44, 0x11, 0xbb, 0x10, 0xf5, 0x10, + 0xd9, 0x10, 0x3c, 0x10, 0x5e, 0x0e, 0xfa, 0x0b, 0xc5, 0x0a, 0xf7, 0x09, + 0x0d, 0x09, 0x1a, 0x09, 0x68, 0x09, 0x62, 0x0a, 0xf5, 0x0a, 0xae, 0x09, + 0xff, 0x07, 0x6f, 0x06, 0x1c, 0x06, 0x2c, 0x06, 0xaa, 0x04, 0x79, 0x03, + 0x16, 0x01, 0x9d, 0x00, 0x63, 0x00, 0x27, 0x00, 0xdb, 0x00, 0xb0, 0x01, + 0x65, 0x03, 0xa7, 0x05, 0x8d, 0x06, 0x47, 0x07, 0x8b, 0x07, 0x16, 0x09, + 0x26, 0x0a, 0x70, 0x0b, 0xff, 0x0a, 0xca, 0x0a, 0x03, 0x0a, 0x4c, 0x0a, + 0x55, 0x0a, 0xd6, 0x0a, 0x42, 0x0b, 0x7c, 0x0b, 0xab, 0x0a, 0xc1, 0x09, + 0x51, 0x09, 0x6f, 0x08, 0x49, 0x08, 0xf8, 0x06, 0x4a, 0x05, 0x6c, 0x03, + 0xda, 0x01, 0xa7, 0xff, 0x2f, 0xff, 0xf1, 0xfd, 0xec, 0xfc, 0x51, 0xfc, + 0x60, 0xfb, 0xeb, 0xfa, 0x3c, 0xfb, 0xde, 0xfa, 0x06, 0xfb, 0xf3, 0xf9, + 0x4f, 0xf8, 0x5f, 0xf5, 0xcb, 0xf2, 0x03, 0xf0, 0xed, 0xee, 0xd7, 0xec, + 0x5c, 0xec, 0x1c, 0xea, 0xcf, 0xea, 0x3a, 0xe9, 0x9e, 0xe8, 0x59, 0xe8, + 0x21, 0xe7, 0xd5, 0xe8, 0x2d, 0xe6, 0xeb, 0xe3, 0xbb, 0xdf, 0xe7, 0xdc, + 0xc3, 0xdd, 0x93, 0xe1, 0x37, 0xe7, 0xc7, 0xee, 0xce, 0xf2, 0x78, 0xf8, + 0x5d, 0xfc, 0xcf, 0x02, 0x83, 0x09, 0x8b, 0x0c, 0x90, 0x0e, 0xeb, 0x09, + 0xc1, 0x06, 0x22, 0x03, 0x26, 0xfe, 0x04, 0xfc, 0xfd, 0xf8, 0x21, 0xf8, + 0x5f, 0xf8, 0x62, 0xf8, 0xbf, 0xf8, 0x0d, 0xfa, 0xbb, 0xfd, 0xc8, 0x00, + 0xe7, 0x02, 0x2c, 0x04, 0x30, 0x03, 0xba, 0x02, 0x27, 0x02, 0xe4, 0x00, + 0x51, 0xff, 0x47, 0xff, 0x80, 0xff, 0xfc, 0x00, 0x2a, 0x02, 0x93, 0x03, + 0xf9, 0x05, 0xe3, 0x08, 0x20, 0x0d, 0x14, 0x10, 0x42, 0x12, 0x1b, 0x12, + 0x2a, 0x11, 0x9c, 0x10, 0x25, 0x10, 0x5f, 0x0f, 0xf8, 0x0d, 0xa0, 0x0b, + 0x81, 0x09, 0x46, 0x09, 0x9f, 0x08, 0xab, 0x08, 0x18, 0x08, 0xee, 0x07, + 0xe8, 0x08, 0x81, 0x09, 0xca, 0x09, 0x2c, 0x08, 0x52, 0x07, 0x49, 0x06, + 0x68, 0x05, 0x3d, 0x04, 0x56, 0x03, 0x64, 0x02, 0xc6, 0x01, 0xcb, 0x01, + 0x2f, 0x01, 0xd2, 0x01, 0x0f, 0x03, 0x23, 0x04, 0x72, 0x05, 0xb5, 0x06, + 0x23, 0x07, 0x93, 0x07, 0x36, 0x08, 0x0e, 0x09, 0xbb, 0x09, 0xa5, 0x0a, + 0x60, 0x0a, 0x69, 0x09, 0x3a, 0x09, 0x8f, 0x09, 0xc2, 0x0b, 0x86, 0x0b, + 0xcf, 0x0b, 0x3f, 0x0b, 0xaa, 0x09, 0xf6, 0x09, 0xce, 0x09, 0xcd, 0x08, + 0x85, 0x07, 0x70, 0x05, 0xfc, 0x02, 0xec, 0x00, 0x7e, 0xff, 0xd2, 0xfd, + 0xf4, 0xfc, 0x79, 0xfb, 0x42, 0xfa, 0x5a, 0xf9, 0x08, 0xf9, 0x4c, 0xf9, + 0x6d, 0xf9, 0x3e, 0xf9, 0x02, 0xf9, 0x8e, 0xf9, 0x66, 0xf9, 0x63, 0xf7, + 0x57, 0xf5, 0xd3, 0xf0, 0xec, 0xef, 0x50, 0xee, 0x18, 0xed, 0x6b, 0xeb, + 0xa1, 0xe8, 0x03, 0xe7, 0x34, 0xe6, 0xac, 0xe8, 0xc5, 0xe8, 0x9c, 0xea, + 0x85, 0xe8, 0x43, 0xe7, 0x42, 0xe5, 0xad, 0xe2, 0xee, 0xe0, 0x8b, 0xdf, + 0x62, 0xe3, 0xfa, 0xe8, 0x3a, 0xf0, 0xc1, 0xf5, 0x80, 0xf9, 0x5a, 0xff, + 0x68, 0x06, 0xeb, 0x0e, 0x09, 0x13, 0xcc, 0x12, 0x8d, 0x0f, 0x80, 0x0b, + 0xf2, 0x07, 0x6a, 0x04, 0x5d, 0xff, 0x51, 0xfb, 0xfb, 0xf7, 0x7f, 0xf5, + 0x33, 0xf5, 0x88, 0xf4, 0xfb, 0xf5, 0x41, 0xf9, 0x02, 0xfd, 0x5c, 0x00, + 0xd1, 0x02, 0x06, 0x04, 0x23, 0x04, 0x31, 0x04, 0xef, 0x03, 0x49, 0x04, + 0x2f, 0x04, 0x21, 0x04, 0x3e, 0x04, 0x1d, 0x04, 0xd2, 0x04, 0x77, 0x06, + 0x53, 0x09, 0x21, 0x0c, 0xbf, 0x0e, 0x80, 0x10, 0x1b, 0x11, 0x13, 0x11, + 0x27, 0x11, 0x2c, 0x11, 0x14, 0x11, 0x3d, 0x0f, 0xf9, 0x0c, 0x3e, 0x0a, + 0xae, 0x08, 0x00, 0x08, 0x52, 0x06, 0x8d, 0x05, 0x62, 0x04, 0x6f, 0x04, + 0x2d, 0x05, 0xd5, 0x04, 0x22, 0x05, 0x02, 0x06, 0xe5, 0x06, 0xbb, 0x06, + 0x69, 0x05, 0x96, 0x04, 0xf5, 0x03, 0xde, 0x04, 0x86, 0x04, 0x73, 0x02, + 0xde, 0x00, 0x98, 0x00, 0x0e, 0x01, 0x64, 0x02, 0x87, 0x03, 0xcb, 0x03, + 0x91, 0x04, 0x5a, 0x06, 0x83, 0x07, 0xf4, 0x08, 0x62, 0x0a, 0xe7, 0x0a, + 0xb9, 0x0b, 0xeb, 0x0b, 0x41, 0x0b, 0xa9, 0x0a, 0x3d, 0x0a, 0xb4, 0x09, + 0x59, 0x09, 0xd4, 0x07, 0x52, 0x06, 0x4c, 0x05, 0x71, 0x04, 0x59, 0x03, + 0x2c, 0x02, 0xfd, 0x00, 0xe3, 0xff, 0xfa, 0xfe, 0xa7, 0xfd, 0xf3, 0xfb, + 0xf8, 0xfa, 0x64, 0xfa, 0x12, 0xfa, 0xb7, 0xf9, 0x93, 0xf8, 0x78, 0xf8, + 0x38, 0xf8, 0x2a, 0xf7, 0xfb, 0xf7, 0x08, 0xf8, 0x4b, 0xf6, 0x71, 0xf5, + 0x41, 0xf3, 0x31, 0xf1, 0x65, 0xf2, 0x02, 0xf1, 0x1f, 0xef, 0x4c, 0xed, + 0x82, 0xeb, 0xfc, 0xea, 0xda, 0xeb, 0x93, 0xe9, 0x28, 0xea, 0x56, 0xe9, + 0x2a, 0xe9, 0xad, 0xe8, 0x3c, 0xe6, 0x1e, 0xe5, 0xda, 0xe2, 0xba, 0xe4, + 0x4d, 0xe6, 0x01, 0xeb, 0x97, 0xf0, 0x11, 0xf5, 0x94, 0xfa, 0xb2, 0xff, + 0xb7, 0x06, 0x3b, 0x0d, 0x78, 0x11, 0x82, 0x12, 0xf5, 0x10, 0x65, 0x0e, + 0xc0, 0x0a, 0xe2, 0x07, 0x7d, 0x03, 0x4f, 0xff, 0xce, 0xfc, 0x78, 0xf9, + 0xff, 0xf6, 0xea, 0xf5, 0xa2, 0xf6, 0xd3, 0xf8, 0xa7, 0xfb, 0x5b, 0xfe, + 0xf4, 0xff, 0xae, 0x02, 0x9b, 0x04, 0x27, 0x05, 0xb1, 0x05, 0xbe, 0x06, + 0xa4, 0x07, 0x83, 0x07, 0x28, 0x06, 0x97, 0x04, 0x21, 0x04, 0x0c, 0x06, + 0x03, 0x08, 0x10, 0x09, 0x0b, 0x0a, 0x1b, 0x0b, 0xaa, 0x0c, 0x37, 0x0e, + 0x64, 0x0f, 0x0a, 0x10, 0x97, 0x10, 0xeb, 0x0f, 0x5c, 0x0e, 0x1e, 0x0d, + 0x27, 0x0b, 0x34, 0x0a, 0x5e, 0x08, 0xfe, 0x05, 0xb0, 0x04, 0xf9, 0x03, + 0xee, 0x03, 0x63, 0x04, 0x62, 0x04, 0xd9, 0x04, 0x28, 0x05, 0x46, 0x05, + 0x03, 0x06, 0x39, 0x06, 0x14, 0x06, 0x36, 0x05, 0xca, 0x03, 0x96, 0x02, + 0x83, 0x02, 0xf7, 0x01, 0x42, 0x01, 0x9a, 0x00, 0x3d, 0x01, 0x69, 0x02, + 0x46, 0x03, 0x8b, 0x04, 0x76, 0x05, 0x0e, 0x08, 0x99, 0x09, 0x90, 0x0a, + 0xff, 0x0a, 0x97, 0x0b, 0x50, 0x0c, 0x81, 0x0c, 0x38, 0x0b, 0xb5, 0x09, + 0x34, 0x08, 0x7a, 0x07, 0xb4, 0x05, 0xfa, 0x02, 0xb1, 0x01, 0x68, 0x00, + 0x5b, 0xff, 0x9d, 0xfe, 0x4f, 0xfd, 0xfb, 0xfc, 0x21, 0xfd, 0x02, 0xfc, + 0x7c, 0xfb, 0x3d, 0xfb, 0x57, 0xfb, 0x98, 0xfb, 0x64, 0xfa, 0x14, 0xf9, + 0xef, 0xf8, 0x57, 0xf8, 0x13, 0xf8, 0x48, 0xf7, 0xa0, 0xf5, 0xf7, 0xf4, + 0x0a, 0xf4, 0x3e, 0xf3, 0x53, 0xf1, 0x1a, 0xf1, 0xdb, 0xef, 0x8b, 0xef, + 0xe1, 0xee, 0xf5, 0xed, 0x4b, 0xee, 0x3f, 0xef, 0xff, 0xee, 0x83, 0xee, + 0x89, 0xec, 0xd2, 0xeb, 0xb0, 0xeb, 0x88, 0xe9, 0x11, 0xe7, 0xec, 0xe2, + 0x50, 0xe0, 0x56, 0xe2, 0x97, 0xe6, 0xe0, 0xed, 0xc6, 0xf3, 0x81, 0xf6, + 0x8d, 0xfb, 0xfa, 0x01, 0x50, 0x0b, 0x5b, 0x14, 0x3e, 0x18, 0xc6, 0x15, + 0x11, 0x14, 0xf0, 0x10, 0xaf, 0x0f, 0x6a, 0x0c, 0xbd, 0x06, 0x52, 0x00, + 0x1a, 0xfb, 0x63, 0xf7, 0xe1, 0xf4, 0x45, 0xf4, 0x94, 0xf4, 0x12, 0xf7, + 0xca, 0xfa, 0x0b, 0xfd, 0xf7, 0x00, 0xd4, 0x04, 0xa6, 0x07, 0x23, 0x0a, + 0x16, 0x0b, 0x3a, 0x0b, 0xcb, 0x0b, 0x35, 0x0b, 0x48, 0x09, 0x07, 0x06, + 0x99, 0x03, 0x4f, 0x03, 0x6d, 0x04, 0x83, 0x05, 0x1b, 0x06, 0x3a, 0x06, + 0x5e, 0x08, 0x2f, 0x0b, 0xc0, 0x0e, 0x63, 0x10, 0x64, 0x12, 0x36, 0x13, + 0xc7, 0x12, 0x4d, 0x12, 0x26, 0x0f, 0xaf, 0x0c, 0x13, 0x0b, 0x5e, 0x09, + 0xf1, 0x05, 0x53, 0x02, 0xaa, 0x00, 0x3f, 0x00, 0x44, 0x02, 0x45, 0x03, + 0x72, 0x01, 0x08, 0x02, 0xdc, 0x03, 0x50, 0x06, 0x2f, 0x08, 0x7c, 0x06, + 0xf5, 0x03, 0x01, 0x04, 0x31, 0x03, 0x93, 0x02, 0x62, 0x00, 0xfb, 0xfe, + 0xa6, 0xfe, 0x23, 0xff, 0x61, 0xff, 0x59, 0xff, 0x6d, 0x02, 0xbe, 0x04, + 0xd0, 0x06, 0xd4, 0x08, 0x98, 0x09, 0x70, 0x0b, 0xda, 0x0d, 0x90, 0x0d, + 0x00, 0x0c, 0x62, 0x0a, 0x59, 0x08, 0x32, 0x06, 0x23, 0x04, 0xee, 0x01, + 0x00, 0xff, 0x23, 0xfd, 0x96, 0xfb, 0xaa, 0xf9, 0x9a, 0xf9, 0x8a, 0xf9, + 0x24, 0xf9, 0x52, 0xf9, 0x0d, 0xfa, 0xa9, 0xfa, 0x61, 0xfa, 0x0c, 0xfb, + 0x86, 0xfa, 0x63, 0xfa, 0xeb, 0xfa, 0xd3, 0xf9, 0x37, 0xf9, 0x29, 0xf9, + 0x36, 0xf7, 0x4c, 0xf6, 0xbb, 0xf4, 0x4e, 0xf3, 0x9f, 0xf2, 0x14, 0xf2, + 0xe0, 0xf0, 0x05, 0xef, 0x4a, 0xee, 0xb0, 0xee, 0xa1, 0xee, 0x58, 0xef, + 0xfc, 0xee, 0x38, 0xed, 0x91, 0xed, 0x51, 0xee, 0x67, 0xec, 0x6c, 0xeb, + 0xc1, 0xe8, 0xbd, 0xe5, 0xf7, 0xe4, 0xa4, 0xe7, 0x19, 0xeb, 0x79, 0xf0, + 0x26, 0xf8, 0x67, 0xfa, 0x1a, 0x00, 0xe6, 0x06, 0x2e, 0x0e, 0x3e, 0x17, + 0x2c, 0x1b, 0x53, 0x19, 0xcb, 0x15, 0x4b, 0x13, 0xf1, 0x10, 0xdd, 0x0e, + 0xf4, 0x09, 0x26, 0x02, 0xa9, 0xfa, 0x30, 0xf6, 0x44, 0xf3, 0x53, 0xf3, + 0xaa, 0xf4, 0x4b, 0xf5, 0xcd, 0xf7, 0xe5, 0xfa, 0x0c, 0xfe, 0x23, 0x03, + 0x59, 0x07, 0xfd, 0x09, 0x08, 0x0c, 0x1f, 0x0c, 0x38, 0x0c, 0xc1, 0x0b, + 0x33, 0x0a, 0xd0, 0x07, 0xe5, 0x04, 0x45, 0x03, 0x65, 0x03, 0xa7, 0x03, + 0x3b, 0x04, 0x14, 0x04, 0x14, 0x06, 0x3f, 0x09, 0x63, 0x0c, 0x46, 0x0f, + 0x88, 0x10, 0x1a, 0x11, 0x15, 0x12, 0x22, 0x12, 0x7e, 0x11, 0xb3, 0x0e, + 0xec, 0x0a, 0xdf, 0x07, 0x08, 0x05, 0xde, 0x03, 0xc2, 0x01, 0xe0, 0xff, + 0xef, 0xfd, 0x35, 0xfd, 0xb8, 0xfe, 0x56, 0x00, 0x87, 0x02, 0x92, 0x02, + 0x9a, 0x02, 0xfc, 0x02, 0xb6, 0x03, 0xff, 0x03, 0x3e, 0x03, 0xec, 0x01, + 0xfc, 0xff, 0x82, 0xfe, 0x72, 0xfd, 0xbf, 0xfc, 0x07, 0xfd, 0x3e, 0xfe, + 0xaa, 0xfe, 0xd7, 0xff, 0xc2, 0x01, 0x3d, 0x04, 0x2e, 0x07, 0x7f, 0x09, + 0x03, 0x0b, 0x53, 0x0c, 0x3e, 0x0d, 0x6c, 0x0d, 0x95, 0x0b, 0x93, 0x09, + 0xfb, 0x07, 0x37, 0x06, 0xe4, 0x03, 0x4e, 0x00, 0x3e, 0xfc, 0xf5, 0xf9, + 0xf3, 0xf8, 0xc7, 0xf8, 0xca, 0xf7, 0xcf, 0xf6, 0x5d, 0xf6, 0x1e, 0xf7, + 0x7b, 0xf8, 0x97, 0xf9, 0xf5, 0xfa, 0x05, 0xfb, 0xd2, 0xfb, 0x3d, 0xfc, + 0x2a, 0xfc, 0x41, 0xfc, 0x57, 0xfc, 0x9f, 0xfb, 0x62, 0xfa, 0xff, 0xf8, + 0xda, 0xf6, 0x67, 0xf5, 0x8f, 0xf4, 0x67, 0xf3, 0xce, 0xf2, 0xe2, 0xf1, + 0x45, 0xf0, 0xdb, 0xf0, 0x66, 0xf0, 0x43, 0xf1, 0x31, 0xf1, 0xe6, 0xef, + 0xc5, 0xef, 0xdc, 0xee, 0x0d, 0xee, 0x0e, 0xeb, 0x65, 0xe9, 0x53, 0xe8, + 0x8c, 0xea, 0x7e, 0xee, 0xc9, 0xf1, 0xe7, 0xf4, 0x6c, 0xf8, 0x2a, 0xfe, + 0x5c, 0x04, 0x73, 0x0c, 0xce, 0x12, 0xdc, 0x15, 0x6c, 0x16, 0x56, 0x15, + 0x96, 0x14, 0x4f, 0x14, 0xbe, 0x12, 0x32, 0x0d, 0x9d, 0x06, 0xbc, 0x00, + 0x0a, 0xfc, 0x82, 0xf9, 0xd6, 0xf7, 0x38, 0xf6, 0x41, 0xf6, 0x07, 0xf7, + 0x62, 0xf8, 0x4b, 0xfb, 0x81, 0xfe, 0xd2, 0x01, 0x5d, 0x05, 0x0e, 0x07, + 0xec, 0x07, 0xb1, 0x08, 0xa5, 0x09, 0x7f, 0x08, 0x58, 0x06, 0x0c, 0x04, + 0x45, 0x02, 0xec, 0x01, 0x52, 0x01, 0xed, 0xff, 0xf0, 0xfe, 0x8f, 0x00, + 0xd3, 0x03, 0x4f, 0x06, 0x8d, 0x09, 0xfc, 0x0b, 0xf9, 0x0d, 0xf2, 0x10, + 0x43, 0x13, 0xf7, 0x13, 0x58, 0x13, 0x87, 0x11, 0x8a, 0x0e, 0x16, 0x0c, + 0xaa, 0x09, 0xbf, 0x06, 0x80, 0x02, 0x60, 0xfe, 0xff, 0xfb, 0x13, 0xfb, + 0xcd, 0xfa, 0xaa, 0xfa, 0xe5, 0xf9, 0x73, 0xfa, 0x51, 0xfc, 0xee, 0xfd, + 0x88, 0xff, 0x44, 0x00, 0x75, 0x00, 0x41, 0x01, 0xc9, 0x00, 0x98, 0x01, + 0x77, 0x01, 0x3c, 0x01, 0xb4, 0x00, 0xab, 0xff, 0xf0, 0x00, 0x97, 0x02, + 0xcf, 0x03, 0xf0, 0x04, 0x97, 0x05, 0xfa, 0x06, 0x1b, 0x0a, 0xfc, 0x0b, + 0x5d, 0x0c, 0xc9, 0x0b, 0x60, 0x0b, 0xc3, 0x0a, 0x84, 0x09, 0xb4, 0x07, + 0x70, 0x04, 0xfe, 0x00, 0x21, 0xfe, 0xd0, 0xfb, 0x28, 0xf9, 0x9c, 0xf7, + 0xd7, 0xf5, 0xef, 0xf4, 0x26, 0xf5, 0x91, 0xf5, 0x79, 0xf6, 0x96, 0xf8, + 0x9b, 0xfa, 0x0b, 0xfc, 0x9d, 0xfd, 0x97, 0xfe, 0xcf, 0xff, 0x3e, 0x00, + 0x53, 0x00, 0xe2, 0xff, 0x73, 0xfd, 0xf0, 0xfb, 0x89, 0xf9, 0xe0, 0xf6, + 0x80, 0xf5, 0xf5, 0xf3, 0x39, 0xf2, 0x9d, 0xf1, 0xcb, 0xf0, 0x79, 0xf0, + 0x45, 0xf0, 0xc2, 0xf3, 0x62, 0xf3, 0x21, 0xf3, 0x5b, 0xf6, 0xa1, 0xf2, + 0xeb, 0xf2, 0x19, 0xf1, 0x2e, 0xee, 0xb1, 0xeb, 0x5b, 0xec, 0x74, 0xec, + 0x53, 0xed, 0xca, 0xf0, 0xa1, 0xf2, 0x92, 0xf6, 0x1c, 0xfc, 0x09, 0x04, + 0x79, 0x0b, 0xe0, 0x11, 0x5c, 0x14, 0x17, 0x16, 0x93, 0x17, 0x38, 0x19, + 0x70, 0x1a, 0x6c, 0x16, 0x7d, 0x10, 0x0f, 0x0a, 0x39, 0x04, 0x5a, 0x00, + 0x3d, 0xfc, 0x42, 0xf8, 0x4d, 0xf5, 0xaa, 0xf3, 0x63, 0xf3, 0xd8, 0xf3, + 0x08, 0xf6, 0x9b, 0xf9, 0xb6, 0xfd, 0xd7, 0x00, 0xcb, 0x02, 0x89, 0x04, + 0x62, 0x06, 0x33, 0x08, 0x2c, 0x08, 0x01, 0x07, 0x5e, 0x05, 0xca, 0x03, + 0x5f, 0x02, 0xc6, 0x00, 0x5b, 0xff, 0x32, 0xfe, 0xe0, 0xfe, 0x17, 0x01, + 0x13, 0x03, 0x69, 0x05, 0x78, 0x07, 0x6b, 0x0a, 0xf8, 0x0d, 0xed, 0x10, + 0xd4, 0x12, 0x41, 0x13, 0xc2, 0x12, 0x74, 0x11, 0x86, 0x0f, 0x96, 0x0c, + 0xf6, 0x08, 0xfc, 0x04, 0xa4, 0x01, 0x08, 0xfe, 0xc9, 0xfa, 0xfe, 0xf7, + 0x09, 0xf6, 0x53, 0xf5, 0x1f, 0xf6, 0xb6, 0xf7, 0xa6, 0xf8, 0xd6, 0xf9, + 0x61, 0xfb, 0x19, 0xfd, 0xa6, 0x00, 0x28, 0x03, 0x75, 0x03, 0x67, 0x03, + 0x09, 0x04, 0x05, 0x04, 0xb6, 0x04, 0x3f, 0x05, 0x1b, 0x04, 0x5a, 0x04, + 0xc9, 0x03, 0x51, 0x04, 0x87, 0x04, 0x04, 0x06, 0x6b, 0x08, 0x80, 0x08, + 0xdb, 0x08, 0x06, 0x09, 0xd7, 0x08, 0x59, 0x09, 0x6e, 0x09, 0xf6, 0x07, + 0x03, 0x05, 0xf7, 0x01, 0x92, 0xff, 0x04, 0xfd, 0x40, 0xfb, 0x9f, 0xf9, + 0x03, 0xf7, 0x25, 0xf5, 0x40, 0xf4, 0x71, 0xf4, 0xf5, 0xf5, 0x5d, 0xf8, + 0x91, 0xf9, 0xf9, 0xfa, 0xe8, 0xfc, 0xea, 0xfe, 0x6b, 0x00, 0x1c, 0x02, + 0x62, 0x03, 0xad, 0x02, 0x50, 0x01, 0x1d, 0xff, 0xf7, 0xfc, 0x4f, 0xfb, + 0x11, 0xfa, 0xc4, 0xf9, 0xed, 0xf6, 0x50, 0xf3, 0x94, 0xf2, 0xee, 0xf0, + 0x8f, 0xf2, 0x7a, 0xf3, 0xfc, 0xf3, 0xde, 0xf1, 0x05, 0xf1, 0x7a, 0xf0, + 0xc2, 0xef, 0x89, 0xf0, 0xfc, 0xee, 0x6f, 0xec, 0x9b, 0xeb, 0xc4, 0xed, + 0x09, 0xf1, 0xb9, 0xf4, 0x8f, 0xf6, 0xc6, 0xf9, 0xe0, 0xff, 0xfc, 0x06, + 0x99, 0x0d, 0x9e, 0x11, 0xfd, 0x12, 0x01, 0x16, 0x22, 0x18, 0x2a, 0x18, + 0xd6, 0x16, 0x44, 0x14, 0x47, 0x0f, 0x05, 0x0a, 0x08, 0x04, 0xc9, 0xfe, + 0x57, 0xfb, 0x11, 0xf9, 0x91, 0xf6, 0x05, 0xf3, 0x1c, 0xf1, 0x97, 0xf1, + 0x18, 0xf5, 0x33, 0xf9, 0xc0, 0xfa, 0x21, 0xfc, 0xd3, 0xfe, 0x83, 0x01, + 0xa0, 0x04, 0xcc, 0x05, 0x48, 0x04, 0x21, 0x04, 0x74, 0x03, 0x93, 0x02, + 0x31, 0x01, 0x0f, 0xff, 0x7a, 0xfe, 0xb0, 0xfd, 0x4a, 0xfe, 0x29, 0x00, + 0x53, 0x01, 0xfa, 0x03, 0xaf, 0x07, 0x56, 0x0b, 0xfe, 0x0d, 0x8f, 0x10, + 0xd3, 0x11, 0x08, 0x13, 0xba, 0x14, 0x48, 0x13, 0xd7, 0x0f, 0xd9, 0x0c, + 0x67, 0x09, 0xc0, 0x06, 0x32, 0x03, 0xbd, 0xfd, 0x12, 0xf9, 0x9a, 0xf6, + 0x93, 0xf5, 0xc7, 0xf5, 0xba, 0xf5, 0x80, 0xf4, 0x0d, 0xf5, 0xc9, 0xf7, + 0x9c, 0xfb, 0xb9, 0xff, 0x1b, 0x01, 0xbc, 0x01, 0x03, 0x04, 0x33, 0x06, + 0x05, 0x08, 0xce, 0x08, 0x25, 0x08, 0x89, 0x07, 0x17, 0x07, 0xd3, 0x05, + 0x89, 0x05, 0xfd, 0x05, 0x69, 0x06, 0x5b, 0x06, 0x6d, 0x05, 0x31, 0x05, + 0x85, 0x06, 0x39, 0x08, 0x06, 0x09, 0x14, 0x08, 0x94, 0x06, 0x34, 0x05, + 0x77, 0x05, 0x07, 0x05, 0x3e, 0x02, 0x08, 0xff, 0x37, 0xfc, 0xd2, 0xfa, + 0xe1, 0xf9, 0x7f, 0xf8, 0xf3, 0xf6, 0x20, 0xf6, 0xcf, 0xf6, 0x5e, 0xf8, + 0x38, 0xf9, 0xec, 0xfa, 0x91, 0xfd, 0x7d, 0xff, 0xef, 0x00, 0xf4, 0x01, + 0xcc, 0x02, 0xe3, 0x03, 0xe6, 0x03, 0xe5, 0x02, 0xd0, 0x00, 0xf2, 0xfd, + 0xb0, 0xfc, 0x70, 0xfa, 0xb2, 0xf8, 0x2e, 0xf6, 0xd3, 0xf3, 0x45, 0xf2, + 0x2b, 0xf1, 0xd6, 0xef, 0x33, 0xf0, 0x9b, 0xef, 0xfa, 0xee, 0x51, 0xef, + 0x37, 0xee, 0x89, 0xec, 0x95, 0xea, 0xaa, 0xea, 0x7c, 0xec, 0x3c, 0xf0, + 0x6e, 0xf4, 0x95, 0xf4, 0xd4, 0xf4, 0x06, 0xfb, 0xe2, 0x02, 0x70, 0x0a, + 0xa7, 0x0f, 0x4b, 0x10, 0x39, 0x11, 0x3c, 0x15, 0x78, 0x18, 0x31, 0x18, + 0xdb, 0x15, 0xe5, 0x11, 0xa8, 0x0d, 0xe1, 0x08, 0xf3, 0x02, 0x56, 0xfe, + 0xf6, 0xfa, 0x82, 0xf8, 0x0f, 0xf5, 0x93, 0xf0, 0x20, 0xef, 0xbc, 0xf1, + 0x31, 0xf5, 0x08, 0xf7, 0xdb, 0xf7, 0x88, 0xf9, 0xcc, 0xfd, 0x1b, 0x02, + 0xa9, 0x03, 0x02, 0x03, 0x8d, 0x02, 0xb4, 0x03, 0x91, 0x04, 0x03, 0x03, + 0x6c, 0xff, 0xcf, 0xfc, 0x5d, 0xfc, 0xff, 0xfd, 0x7b, 0xfe, 0x93, 0xfe, + 0x61, 0xff, 0x94, 0x01, 0x01, 0x05, 0xa4, 0x09, 0x81, 0x0d, 0x80, 0x10, + 0x3f, 0x13, 0x2e, 0x14, 0x46, 0x14, 0xa6, 0x14, 0x4d, 0x14, 0xa3, 0x12, + 0xda, 0x0e, 0x7e, 0x09, 0x97, 0x04, 0x32, 0x00, 0x79, 0xfd, 0x60, 0xfa, + 0x59, 0xf6, 0x7e, 0xf3, 0xf7, 0xf1, 0xb1, 0xf2, 0x5d, 0xf4, 0x10, 0xf6, + 0xe9, 0xf7, 0xc2, 0xfa, 0xea, 0xfd, 0xb9, 0x00, 0xb6, 0x03, 0xf0, 0x05, + 0x8f, 0x07, 0xbd, 0x09, 0xd8, 0x09, 0x4a, 0x09, 0x29, 0x09, 0x15, 0x08, + 0x11, 0x08, 0x1f, 0x08, 0x24, 0x07, 0xbd, 0x05, 0x1b, 0x05, 0x8c, 0x05, + 0x9b, 0x06, 0x74, 0x07, 0xfa, 0x07, 0xc5, 0x06, 0xfd, 0x05, 0x13, 0x07, + 0x7f, 0x06, 0x6e, 0x05, 0x01, 0x04, 0xc8, 0x00, 0xe3, 0xfe, 0x83, 0xfd, + 0x81, 0xfb, 0x7f, 0xf9, 0x81, 0xf8, 0x55, 0xf7, 0x4b, 0xf7, 0xc5, 0xf7, + 0x89, 0xf8, 0x27, 0xfa, 0xb4, 0xfc, 0xc5, 0xfe, 0xab, 0x00, 0x52, 0x02, + 0x45, 0x03, 0xf1, 0x04, 0x30, 0x06, 0x21, 0x05, 0xca, 0x03, 0xfc, 0x01, + 0x7a, 0xff, 0xf5, 0xfd, 0xb8, 0xfa, 0x1a, 0xf8, 0x80, 0xf5, 0x82, 0xf2, + 0x00, 0xf1, 0xf7, 0xee, 0x92, 0xed, 0x8a, 0xed, 0x94, 0xec, 0xcc, 0xeb, + 0x90, 0xec, 0x0d, 0xeb, 0x6a, 0xea, 0x52, 0xea, 0x22, 0xea, 0xd7, 0xed, + 0xd7, 0xf1, 0x20, 0xf4, 0x7e, 0xf5, 0xb9, 0xf8, 0x94, 0xfd, 0x36, 0x05, + 0xbb, 0x0b, 0xb8, 0x0e, 0x09, 0x10, 0x33, 0x12, 0x4d, 0x14, 0x12, 0x16, + 0x69, 0x16, 0x72, 0x14, 0x6c, 0x10, 0x64, 0x0b, 0x4a, 0x06, 0x3d, 0x02, + 0xdb, 0xff, 0x97, 0xfc, 0x2c, 0xf8, 0x56, 0xf3, 0x6e, 0xf0, 0x58, 0xf1, + 0xfe, 0xf3, 0x5d, 0xf5, 0x8e, 0xf5, 0x59, 0xf6, 0x18, 0xf9, 0xd4, 0xfc, + 0x26, 0x00, 0x84, 0x01, 0xe7, 0x00, 0x5e, 0x01, 0xd5, 0x01, 0x7c, 0x01, + 0x4c, 0x01, 0x2f, 0x00, 0xe9, 0xfd, 0xba, 0xfc, 0x57, 0xfc, 0xf9, 0xfc, + 0xb7, 0xff, 0x8e, 0x01, 0x22, 0x02, 0x2d, 0x04, 0x0e, 0x08, 0xae, 0x0c, + 0x6b, 0x11, 0x13, 0x13, 0x78, 0x13, 0x53, 0x14, 0x16, 0x15, 0xa1, 0x15, + 0x54, 0x14, 0xcf, 0x10, 0x95, 0x0c, 0x2a, 0x08, 0xe8, 0x03, 0xc9, 0x00, + 0x44, 0xfd, 0xb9, 0xf9, 0x5b, 0xf6, 0xa8, 0xf3, 0x0b, 0xf3, 0xea, 0xf3, + 0x75, 0xf5, 0xf1, 0xf6, 0x8e, 0xf8, 0xe8, 0xfa, 0xe6, 0xfd, 0xdc, 0x00, + 0xea, 0x03, 0x48, 0x06, 0xee, 0x07, 0xf8, 0x08, 0x33, 0x09, 0x80, 0x09, + 0x1f, 0x0a, 0xfd, 0x09, 0x16, 0x09, 0x15, 0x08, 0x43, 0x07, 0x86, 0x06, + 0x7c, 0x06, 0x2a, 0x06, 0xf4, 0x05, 0x46, 0x06, 0xc0, 0x05, 0x46, 0x05, + 0x47, 0x05, 0xcc, 0x04, 0x98, 0x04, 0x77, 0x03, 0xa3, 0x01, 0x7e, 0x00, + 0x1a, 0xff, 0x8b, 0xfd, 0x1f, 0xfc, 0xe3, 0xfa, 0x03, 0xfa, 0xcf, 0xf9, + 0x94, 0xf9, 0xb7, 0xf9, 0xd4, 0xfa, 0x73, 0xfc, 0xc0, 0xfd, 0x85, 0xff, + 0xeb, 0x00, 0x2b, 0x02, 0x9a, 0x03, 0x22, 0x04, 0xd8, 0x03, 0xd8, 0x02, + 0x08, 0x02, 0x9c, 0x00, 0x4e, 0xfd, 0xc7, 0xfb, 0xd2, 0xf8, 0xac, 0xf5, + 0x61, 0xf4, 0x38, 0xf1, 0x79, 0xee, 0x19, 0xee, 0x8b, 0xec, 0xf6, 0xec, + 0x91, 0xeb, 0xa6, 0xea, 0x34, 0xeb, 0xdc, 0xe9, 0xca, 0xea, 0xb3, 0xeb, + 0xe1, 0xec, 0x1a, 0xf0, 0xd8, 0xf3, 0x66, 0xf5, 0xdb, 0xf7, 0xdb, 0xfb, + 0xf7, 0x01, 0xd7, 0x08, 0x7f, 0x0c, 0xd4, 0x0c, 0x13, 0x0e, 0xc7, 0x11, + 0x47, 0x15, 0x51, 0x16, 0x92, 0x13, 0x4d, 0x0f, 0xc7, 0x0c, 0x00, 0x0a, + 0x02, 0x07, 0xf9, 0x02, 0x9f, 0xfe, 0xc2, 0xfa, 0x28, 0xf7, 0xf9, 0xf3, + 0x1e, 0xf2, 0x92, 0xf2, 0x18, 0xf4, 0xb8, 0xf4, 0x6c, 0xf4, 0x08, 0xf5, + 0x83, 0xf7, 0xbc, 0xfb, 0x53, 0xff, 0x8c, 0xff, 0x0f, 0xff, 0x9f, 0xff, + 0x8c, 0x00, 0xdb, 0x01, 0x03, 0x02, 0xcd, 0x00, 0xd3, 0xff, 0xfd, 0xfe, + 0xba, 0xfe, 0x4e, 0xff, 0x48, 0x01, 0x7a, 0x03, 0xe1, 0x04, 0xbc, 0x05, + 0x79, 0x07, 0xb4, 0x0a, 0xe3, 0x0e, 0xdd, 0x11, 0xa3, 0x12, 0xc6, 0x12, + 0x16, 0x12, 0x66, 0x12, 0xd7, 0x12, 0xd5, 0x10, 0xce, 0x0d, 0x3a, 0x0a, + 0x7c, 0x05, 0x61, 0x02, 0x8e, 0xff, 0x49, 0xfc, 0xec, 0xf9, 0x3a, 0xf7, + 0x58, 0xf5, 0x7a, 0xf4, 0xeb, 0xf4, 0xc8, 0xf6, 0x9d, 0xf8, 0x8e, 0xfa, + 0x8a, 0xfc, 0xe9, 0xfe, 0xd4, 0x01, 0x9e, 0x04, 0x27, 0x07, 0xa4, 0x08, + 0xab, 0x09, 0x67, 0x0a, 0x66, 0x0a, 0x92, 0x0a, 0x54, 0x0a, 0xa3, 0x09, + 0xad, 0x08, 0x48, 0x07, 0x8c, 0x06, 0xcf, 0x05, 0xf9, 0x04, 0xbc, 0x04, + 0x27, 0x04, 0x48, 0x03, 0x9a, 0x02, 0x8b, 0x02, 0x4c, 0x02, 0x86, 0x01, + 0xb0, 0x00, 0x8d, 0xff, 0xd3, 0xfe, 0x6a, 0xfe, 0x99, 0xfd, 0x86, 0xfc, + 0x2b, 0xfc, 0xdc, 0xfb, 0x93, 0xfb, 0x18, 0xfc, 0xa5, 0xfc, 0x65, 0xfd, + 0x37, 0xfe, 0x20, 0xff, 0x2e, 0x00, 0x3e, 0x01, 0xe6, 0x01, 0xfd, 0x01, + 0x74, 0x01, 0xff, 0x00, 0x88, 0x00, 0xf7, 0xfe, 0x46, 0xfd, 0xa5, 0xfb, + 0x61, 0xf8, 0x96, 0xf6, 0xcd, 0xf5, 0x9a, 0xf2, 0x06, 0xf1, 0x75, 0xef, + 0xe5, 0xec, 0xbb, 0xec, 0xfd, 0xec, 0xd8, 0xeb, 0xca, 0xea, 0xf0, 0xe9, + 0xa9, 0xe8, 0xc7, 0xe9, 0xe6, 0xeb, 0xc4, 0xef, 0x38, 0xf2, 0x7a, 0xf3, + 0x39, 0xf6, 0xd5, 0xfa, 0x4a, 0x00, 0xa2, 0x06, 0xcf, 0x0a, 0x7a, 0x0c, + 0x92, 0x0f, 0x1a, 0x12, 0xda, 0x13, 0x2c, 0x15, 0x90, 0x14, 0x0d, 0x12, + 0x64, 0x0f, 0x39, 0x0b, 0xe0, 0x07, 0x50, 0x04, 0x92, 0x00, 0x1b, 0xfd, + 0x11, 0xf9, 0x83, 0xf5, 0x73, 0xf3, 0x1e, 0xf3, 0x65, 0xf3, 0xdb, 0xf3, + 0x22, 0xf4, 0x47, 0xf5, 0x6f, 0xf7, 0x05, 0xfa, 0x76, 0xfb, 0x7e, 0xfd, + 0x37, 0xff, 0x00, 0x00, 0xe8, 0x00, 0xa7, 0x00, 0x57, 0x00, 0x9f, 0x01, + 0xa2, 0x01, 0x59, 0x00, 0x58, 0xff, 0x7f, 0xff, 0x15, 0x01, 0x92, 0x02, + 0xd0, 0x03, 0xd2, 0x04, 0x1d, 0x06, 0xf6, 0x08, 0x6e, 0x0c, 0x04, 0x0f, + 0x80, 0x10, 0x94, 0x11, 0x60, 0x12, 0x55, 0x13, 0xe9, 0x13, 0xcc, 0x12, + 0xa7, 0x10, 0xe1, 0x0d, 0x0d, 0x0b, 0x0e, 0x08, 0xd8, 0x04, 0x4a, 0x01, + 0xcc, 0xfd, 0xf3, 0xfa, 0x87, 0xf8, 0xb2, 0xf6, 0x98, 0xf5, 0xbb, 0xf5, + 0xaf, 0xf6, 0x35, 0xf7, 0xb4, 0xf8, 0xf6, 0xfa, 0xd5, 0xfd, 0x64, 0x00, + 0xa6, 0x02, 0x68, 0x04, 0x78, 0x06, 0xd1, 0x08, 0xbf, 0x09, 0xd4, 0x09, + 0x0d, 0x0a, 0x4e, 0x0a, 0x24, 0x0a, 0x2e, 0x09, 0xdf, 0x07, 0xae, 0x06, + 0xd5, 0x05, 0x43, 0x05, 0x1e, 0x04, 0x5f, 0x03, 0x82, 0x02, 0x6b, 0x01, + 0xbc, 0x00, 0x25, 0x00, 0x40, 0x00, 0x07, 0x00, 0x12, 0xff, 0xdf, 0xfd, + 0x41, 0xfd, 0x59, 0xfd, 0x59, 0xfd, 0xdc, 0xfd, 0x2f, 0xfd, 0x31, 0xfc, + 0xba, 0xfc, 0x5c, 0xfd, 0x63, 0xfe, 0x76, 0xff, 0xe3, 0xff, 0xec, 0xff, + 0xf7, 0xff, 0xbd, 0x00, 0x16, 0x01, 0x16, 0x01, 0x5e, 0x00, 0x35, 0xff, + 0x26, 0xfd, 0xa8, 0xfb, 0x53, 0xfa, 0xab, 0xf7, 0x13, 0xf6, 0xb5, 0xf3, + 0xe0, 0xf0, 0x81, 0xef, 0x50, 0xee, 0xb0, 0xeb, 0x38, 0xec, 0xe0, 0xea, + 0x89, 0xe9, 0x8c, 0xea, 0xf5, 0xe8, 0x5b, 0xe9, 0x8d, 0xeb, 0x2a, 0xee, + 0x19, 0xf2, 0xab, 0xf5, 0x63, 0xf7, 0xd4, 0xfa, 0xef, 0xff, 0x41, 0x05, + 0xac, 0x0a, 0xbe, 0x0d, 0x9c, 0x0e, 0xc6, 0x10, 0x1c, 0x13, 0x80, 0x14, + 0x65, 0x14, 0x18, 0x12, 0x4e, 0x10, 0x23, 0x0e, 0xf7, 0x09, 0xe5, 0x05, + 0xdd, 0x01, 0x99, 0xff, 0xdc, 0xfd, 0x62, 0xfa, 0x53, 0xf6, 0xed, 0xf3, + 0x71, 0xf4, 0xe5, 0xf4, 0x0d, 0xf6, 0x70, 0xf6, 0x23, 0xf6, 0x86, 0xf7, + 0x0c, 0xfa, 0xed, 0xfb, 0x7e, 0xfd, 0xbd, 0xfe, 0xf0, 0xfe, 0x76, 0xff, + 0xe9, 0xff, 0xb4, 0xff, 0xd9, 0xff, 0x1e, 0x00, 0x40, 0x00, 0x13, 0x00, + 0xe3, 0xff, 0x8c, 0x00, 0x39, 0x02, 0xf8, 0x03, 0x04, 0x06, 0x0e, 0x08, + 0xef, 0x09, 0xae, 0x0c, 0x0f, 0x0f, 0x65, 0x10, 0x43, 0x12, 0xb6, 0x13, + 0x0f, 0x14, 0x3d, 0x14, 0x93, 0x12, 0xec, 0x0f, 0xf2, 0x0d, 0x9c, 0x0b, + 0xff, 0x08, 0x92, 0x05, 0x0e, 0x01, 0x26, 0xfd, 0x88, 0xfa, 0xb7, 0xf8, + 0x22, 0xf7, 0xe7, 0xf5, 0x02, 0xf5, 0x25, 0xf5, 0xbc, 0xf6, 0xee, 0xf7, + 0xe4, 0xf9, 0xbe, 0xfc, 0x98, 0xfe, 0x39, 0x01, 0x4e, 0x03, 0xb0, 0x04, + 0x69, 0x06, 0xe5, 0x07, 0x9e, 0x08, 0xd8, 0x08, 0x95, 0x08, 0x31, 0x08, + 0x6d, 0x07, 0x61, 0x06, 0x96, 0x05, 0xc7, 0x04, 0x8f, 0x04, 0xba, 0x03, + 0x33, 0x02, 0xd2, 0x00, 0x18, 0x01, 0x8a, 0x01, 0x2f, 0x01, 0xad, 0x00, + 0x2a, 0x00, 0x9b, 0xff, 0xe7, 0xff, 0xa2, 0xff, 0x3b, 0xff, 0x9a, 0xff, + 0x5a, 0xff, 0xce, 0xfe, 0x60, 0xfe, 0x5d, 0xfe, 0x42, 0xff, 0xee, 0xff, + 0x01, 0x00, 0xef, 0xff, 0x29, 0x00, 0x48, 0x00, 0x27, 0x01, 0x45, 0x01, + 0x82, 0x00, 0x02, 0x00, 0x0a, 0xff, 0x9c, 0xfd, 0x07, 0xfd, 0xb6, 0xfb, + 0xc9, 0xf8, 0x73, 0xf7, 0x44, 0xf5, 0x4d, 0xf3, 0x3a, 0xf2, 0xa7, 0xf0, + 0xb2, 0xee, 0xa9, 0xed, 0x1f, 0xec, 0x83, 0xeb, 0xc7, 0xeb, 0x0b, 0xec, + 0x14, 0xeb, 0x76, 0xea, 0xad, 0xeb, 0x28, 0xef, 0x24, 0xf3, 0x94, 0xf6, + 0xd3, 0xf7, 0x4a, 0xfa, 0x1e, 0xff, 0xec, 0x03, 0x04, 0x0a, 0x5c, 0x0d, + 0x62, 0x0e, 0x54, 0x10, 0xbc, 0x11, 0xf7, 0x12, 0x39, 0x14, 0xab, 0x13, + 0x53, 0x11, 0x75, 0x0d, 0xd6, 0x09, 0xe2, 0x06, 0xfe, 0x04, 0x4c, 0x02, + 0x11, 0xfe, 0xe8, 0xf9, 0xfc, 0xf6, 0x26, 0xf6, 0x0e, 0xf6, 0xc9, 0xf5, + 0x94, 0xf4, 0xa3, 0xf4, 0xc7, 0xf5, 0xdc, 0xf7, 0xbf, 0xf9, 0x74, 0xfa, + 0x33, 0xfb, 0xb2, 0xfc, 0x61, 0xfe, 0xdf, 0xfe, 0xe2, 0xfe, 0x0d, 0xff, + 0x16, 0xff, 0x81, 0xff, 0xa8, 0xff, 0x60, 0xff, 0xa8, 0xff, 0x8b, 0x00, + 0x0d, 0x02, 0xfb, 0x02, 0xd0, 0x04, 0xdd, 0x06, 0x53, 0x08, 0x07, 0x0b, + 0x99, 0x0d, 0x10, 0x0f, 0x09, 0x11, 0xe9, 0x11, 0x9c, 0x12, 0x2d, 0x13, + 0xd7, 0x12, 0xc0, 0x11, 0x0a, 0x10, 0x55, 0x0d, 0x8b, 0x0a, 0xda, 0x07, + 0xde, 0x04, 0xec, 0x01, 0xe8, 0xfe, 0xbf, 0xfb, 0x38, 0xf9, 0x9d, 0xf7, + 0xd4, 0xf6, 0x2f, 0xf6, 0x9f, 0xf6, 0x20, 0xf7, 0xbd, 0xf7, 0x3d, 0xf9, + 0xd0, 0xfa, 0x35, 0xfd, 0xbe, 0xff, 0x65, 0x01, 0xa8, 0x02, 0xe9, 0x03, + 0x0f, 0x05, 0x19, 0x06, 0xbe, 0x06, 0xe6, 0x06, 0xb6, 0x06, 0x46, 0x06, + 0x4c, 0x05, 0x52, 0x04, 0x11, 0x04, 0x77, 0x03, 0xe4, 0x02, 0x4f, 0x02, + 0x67, 0x01, 0xae, 0x00, 0x19, 0x00, 0x05, 0x00, 0xbe, 0x00, 0xd0, 0x00, + 0x56, 0x00, 0x08, 0x00, 0x5c, 0xff, 0x74, 0xff, 0xd5, 0x00, 0x3c, 0x01, + 0xf2, 0x00, 0xc1, 0x00, 0x2d, 0x00, 0x83, 0x00, 0x5b, 0x01, 0x13, 0x02, + 0x0b, 0x02, 0x98, 0x01, 0xac, 0x00, 0x4c, 0x00, 0x92, 0xff, 0xc8, 0xfe, + 0xbd, 0xfe, 0x50, 0xfd, 0x4c, 0xfb, 0xf8, 0xf8, 0x59, 0xf7, 0x71, 0xf6, + 0x8f, 0xf4, 0xcc, 0xf3, 0xce, 0xf2, 0xd7, 0xef, 0x97, 0xee, 0xae, 0xee, + 0x1a, 0xee, 0xaa, 0xed, 0xf5, 0xec, 0xc8, 0xeb, 0x67, 0xeb, 0xc5, 0xec, + 0x92, 0xee, 0xea, 0xef, 0x5f, 0xf1, 0x19, 0xf4, 0xea, 0xf7, 0x72, 0xfa, + 0x24, 0xff, 0x89, 0x03, 0x75, 0x05, 0xf4, 0x09, 0x3b, 0x0e, 0x7c, 0x0f, + 0x8f, 0x11, 0x44, 0x13, 0x5a, 0x12, 0x49, 0x12, 0x22, 0x12, 0x5d, 0x0f, + 0x45, 0x0c, 0xc5, 0x08, 0x13, 0x05, 0x54, 0x03, 0x91, 0x00, 0xa7, 0xfc, + 0x15, 0xf9, 0xb5, 0xf6, 0x01, 0xf6, 0x35, 0xf6, 0x72, 0xf5, 0x32, 0xf5, + 0x7c, 0xf5, 0x39, 0xf6, 0xbc, 0xf7, 0x78, 0xf9, 0xe8, 0xfa, 0x85, 0xfc, + 0x4c, 0xfd, 0xe7, 0xfc, 0x70, 0xfd, 0x07, 0xff, 0x01, 0x00, 0x05, 0x00, + 0x0e, 0xff, 0x21, 0xfe, 0x65, 0xff, 0xf0, 0x00, 0x9e, 0x01, 0x10, 0x02, + 0xfb, 0x02, 0x89, 0x04, 0xf4, 0x06, 0x3c, 0x09, 0xf5, 0x0a, 0x14, 0x0d, + 0xce, 0x0e, 0x5b, 0x10, 0x2d, 0x12, 0xf6, 0x12, 0xd2, 0x12, 0x45, 0x12, + 0x74, 0x11, 0xd3, 0x10, 0xd6, 0x0e, 0xa2, 0x0b, 0x3d, 0x08, 0xd7, 0x04, + 0xa8, 0x02, 0x52, 0x00, 0x0b, 0xfd, 0xed, 0xf9, 0xe3, 0xf7, 0x8b, 0xf6, + 0xd9, 0xf5, 0xf1, 0xf5, 0x5e, 0xf6, 0x14, 0xf7, 0xf9, 0xf7, 0x19, 0xf9, + 0xd7, 0xfa, 0x3b, 0xfd, 0xff, 0xff, 0xa4, 0x01, 0x56, 0x02, 0x77, 0x03, + 0xae, 0x04, 0x8f, 0x05, 0x57, 0x06, 0x52, 0x06, 0xa7, 0x05, 0x32, 0x05, + 0x2c, 0x04, 0x15, 0x03, 0x1f, 0x03, 0xce, 0x02, 0xfb, 0x01, 0x21, 0x01, + 0xfb, 0xff, 0x15, 0x00, 0x68, 0x00, 0xf0, 0x00, 0x10, 0x01, 0x9e, 0x00, + 0xe5, 0x00, 0x6b, 0x01, 0xf3, 0x01, 0x47, 0x02, 0xa8, 0x02, 0xa7, 0x02, + 0x12, 0x03, 0xd6, 0x02, 0x5c, 0x02, 0x7b, 0x02, 0x41, 0x02, 0x1d, 0x02, + 0xa5, 0x01, 0x6a, 0x00, 0x04, 0xff, 0x14, 0xfe, 0x1d, 0xfd, 0x09, 0xfc, + 0x28, 0xfb, 0x3b, 0xf9, 0x78, 0xf7, 0x41, 0xf6, 0x4f, 0xf4, 0xb2, 0xf3, + 0x0c, 0xf3, 0x94, 0xf1, 0x4e, 0xf0, 0xb2, 0xee, 0x01, 0xee, 0x12, 0xee, + 0x04, 0xee, 0x6b, 0xed, 0x2a, 0xec, 0xf3, 0xea, 0x45, 0xec, 0x45, 0xef, + 0x46, 0xf2, 0x4c, 0xf4, 0x40, 0xf5, 0x17, 0xf7, 0x8e, 0xfb, 0x6a, 0x01, + 0x9c, 0x06, 0xbf, 0x09, 0x23, 0x0b, 0x26, 0x0d, 0x27, 0x10, 0x49, 0x13, + 0xfb, 0x14, 0xc6, 0x14, 0x63, 0x13, 0xec, 0x10, 0x33, 0x0e, 0x5b, 0x0b, + 0x41, 0x09, 0x8d, 0x07, 0x27, 0x04, 0x54, 0xff, 0x97, 0xfa, 0x8c, 0xf8, + 0x5e, 0xf8, 0xbf, 0xf7, 0xae, 0xf6, 0x4b, 0xf5, 0x73, 0xf4, 0xb7, 0xf5, + 0x5d, 0xf7, 0x7c, 0xf8, 0x83, 0xf9, 0xee, 0xfa, 0x13, 0xfc, 0x8b, 0xfc, + 0x53, 0xfd, 0x9a, 0xfd, 0x0b, 0xfe, 0x00, 0xff, 0x75, 0xff, 0x20, 0xff, + 0x96, 0xfe, 0x3a, 0xfe, 0x05, 0xff, 0xcf, 0x00, 0xdb, 0x02, 0x03, 0x04, + 0x34, 0x04, 0x2e, 0x05, 0xdc, 0x07, 0xfe, 0x0b, 0x90, 0x0e, 0xe9, 0x0f, + 0x71, 0x10, 0x29, 0x11, 0x25, 0x13, 0xdc, 0x14, 0x96, 0x14, 0x77, 0x13, + 0x9c, 0x11, 0xdf, 0x0e, 0xa6, 0x0c, 0x47, 0x0a, 0x97, 0x07, 0xc8, 0x04, + 0xf4, 0x00, 0x26, 0xfd, 0x45, 0xfa, 0x6e, 0xf8, 0x68, 0xf7, 0x9a, 0xf6, + 0x6f, 0xf5, 0x7e, 0xf4, 0xd1, 0xf4, 0x18, 0xf6, 0x41, 0xf8, 0x08, 0xfa, + 0x9e, 0xfb, 0x08, 0xfd, 0xad, 0xfe, 0xc3, 0x00, 0x6b, 0x02, 0xf6, 0x03, + 0xdd, 0x04, 0xf7, 0x04, 0xc0, 0x05, 0xdc, 0x05, 0x08, 0x05, 0xff, 0x04, + 0x58, 0x04, 0xbc, 0x03, 0x23, 0x03, 0x1d, 0x02, 0xef, 0x00, 0xae, 0x00, + 0xcb, 0x00, 0x54, 0x00, 0x42, 0x00, 0x58, 0x00, 0x7f, 0x00, 0xcb, 0x00, + 0x5e, 0x01, 0xd6, 0x01, 0xb4, 0x02, 0x96, 0x03, 0x79, 0x03, 0x99, 0x03, + 0x2f, 0x04, 0x38, 0x04, 0x2e, 0x04, 0x1f, 0x04, 0xb9, 0x02, 0xde, 0x01, + 0x19, 0x01, 0x33, 0xff, 0xd1, 0xfd, 0x94, 0xfc, 0x2b, 0xfa, 0xd4, 0xf8, + 0x36, 0xf7, 0x88, 0xf4, 0x4d, 0xf3, 0x9e, 0xf1, 0x76, 0xf0, 0xee, 0xef, + 0x76, 0xee, 0xb3, 0xed, 0x10, 0xed, 0x1a, 0xec, 0x6a, 0xec, 0x42, 0xec, + 0xf0, 0xeb, 0x74, 0xec, 0x28, 0xed, 0xc9, 0xee, 0xe9, 0xf2, 0xc9, 0xf4, + 0xa9, 0xf5, 0x7d, 0xf8, 0xa6, 0xfc, 0x51, 0x02, 0x74, 0x07, 0xce, 0x08, + 0x22, 0x0a, 0xd7, 0x0c, 0xf4, 0x10, 0xbd, 0x14, 0x0a, 0x15, 0x61, 0x13, + 0x6f, 0x11, 0x78, 0x10, 0x40, 0x10, 0x0d, 0x0f, 0xc9, 0x0b, 0xa4, 0x07, + 0x9c, 0x03, 0x85, 0x00, 0xfb, 0xfe, 0x84, 0xfd, 0x91, 0xfb, 0xb1, 0xf9, + 0x42, 0xf7, 0xe7, 0xf5, 0xda, 0xf6, 0x61, 0xf8, 0x06, 0xf9, 0xd1, 0xf8, + 0x49, 0xf8, 0xa4, 0xf8, 0x2d, 0xfa, 0x90, 0xfb, 0x41, 0xfc, 0x2c, 0xfc, + 0x84, 0xfb, 0x93, 0xfa, 0xd7, 0xfa, 0x5b, 0xfc, 0x4c, 0xfd, 0xf7, 0xfc, + 0x41, 0xfc, 0xab, 0xfc, 0xfd, 0xfe, 0xce, 0x01, 0x29, 0x03, 0x50, 0x04, + 0x8a, 0x06, 0x68, 0x09, 0x43, 0x0c, 0xb1, 0x0e, 0x08, 0x10, 0x72, 0x11, + 0x30, 0x13, 0x93, 0x14, 0xcc, 0x14, 0xaf, 0x13, 0x43, 0x12, 0x97, 0x10, + 0xfa, 0x0e, 0x11, 0x0d, 0xf0, 0x09, 0xb7, 0x06, 0x74, 0x03, 0x48, 0x00, + 0x85, 0xfd, 0xcc, 0xfb, 0x7f, 0xfa, 0x31, 0xf9, 0x3c, 0xf7, 0x99, 0xf5, + 0xc3, 0xf5, 0x67, 0xf7, 0xf1, 0xf8, 0xd6, 0xf9, 0xd4, 0xf9, 0x5a, 0xfa, + 0x3b, 0xfc, 0x5f, 0xfe, 0x34, 0x00, 0x2b, 0x01, 0xfd, 0x00, 0x2c, 0x01, + 0xdd, 0x01, 0x89, 0x02, 0xf1, 0x02, 0xc9, 0x02, 0x34, 0x02, 0xc8, 0x01, + 0x50, 0x01, 0xe4, 0x00, 0x1d, 0x01, 0x55, 0x01, 0x49, 0x01, 0x02, 0x01, + 0xc1, 0x00, 0x75, 0x01, 0x15, 0x02, 0x79, 0x02, 0x43, 0x03, 0xb3, 0x03, + 0x05, 0x04, 0x86, 0x04, 0xde, 0x04, 0x16, 0x05, 0x14, 0x05, 0x60, 0x05, + 0x31, 0x05, 0x82, 0x04, 0x85, 0x03, 0x82, 0x02, 0x99, 0x01, 0x7d, 0x00, + 0x04, 0xff, 0x9f, 0xfd, 0x83, 0xfb, 0x92, 0xf9, 0x5f, 0xf8, 0x6c, 0xf6, + 0x92, 0xf4, 0x70, 0xf3, 0xb4, 0xf1, 0x30, 0xf0, 0x9e, 0xef, 0xd3, 0xee, + 0x49, 0xed, 0xfb, 0xec, 0x9d, 0xec, 0xd3, 0xeb, 0xc1, 0xeb, 0x7a, 0xeb, + 0x2a, 0xec, 0xab, 0xed, 0x97, 0xef, 0x0e, 0xf1, 0x5c, 0xf3, 0x0e, 0xf6, + 0x92, 0xf9, 0x4e, 0xfd, 0xc2, 0x00, 0xee, 0x04, 0xeb, 0x08, 0x4e, 0x0b, + 0x84, 0x0d, 0x11, 0x10, 0xab, 0x12, 0x18, 0x14, 0x21, 0x14, 0x9b, 0x12, + 0xdf, 0x10, 0xf6, 0x0f, 0x72, 0x0e, 0xe0, 0x0b, 0xfb, 0x08, 0xb1, 0x05, + 0x65, 0x02, 0x76, 0xff, 0x87, 0xfd, 0x9f, 0xfc, 0xbf, 0xfb, 0xc7, 0xf9, + 0x9f, 0xf7, 0x24, 0xf7, 0x11, 0xf8, 0x05, 0xfa, 0xc0, 0xfa, 0xbf, 0xf9, + 0x29, 0xf9, 0x28, 0xfa, 0x46, 0xfb, 0x55, 0xfc, 0xaf, 0xfc, 0x8f, 0xfb, + 0xd9, 0xfa, 0xa4, 0xfa, 0xc8, 0xfa, 0x0d, 0xfb, 0xc6, 0xfb, 0x22, 0xfc, + 0xee, 0xfb, 0x38, 0xfc, 0xad, 0xfd, 0x6a, 0x00, 0xf8, 0x02, 0x24, 0x05, + 0x78, 0x06, 0x63, 0x08, 0x55, 0x0b, 0x8d, 0x0e, 0x33, 0x11, 0x24, 0x12, + 0xda, 0x12, 0x6e, 0x13, 0xd5, 0x13, 0xa6, 0x13, 0xac, 0x12, 0x9d, 0x10, + 0x79, 0x0e, 0x62, 0x0c, 0x4c, 0x09, 0x3d, 0x06, 0xa1, 0x03, 0x4b, 0x01, + 0x1a, 0xff, 0xb1, 0xfc, 0x7d, 0xfa, 0x59, 0xf9, 0x84, 0xf8, 0x20, 0xf8, + 0x60, 0xf8, 0xde, 0xf8, 0x5b, 0xf9, 0xe5, 0xf9, 0xb7, 0xfa, 0x1a, 0xfc, + 0x81, 0xfd, 0x75, 0xfe, 0x26, 0xff, 0xa7, 0xff, 0x2d, 0x00, 0x8e, 0x00, + 0x6a, 0x00, 0x72, 0x00, 0xd4, 0x00, 0x5e, 0x00, 0x9f, 0xff, 0x47, 0xff, + 0xe0, 0xfe, 0x08, 0xff, 0x70, 0xff, 0x2e, 0xff, 0x40, 0xff, 0xc3, 0xff, + 0x32, 0x00, 0x28, 0x01, 0x49, 0x02, 0x2c, 0x03, 0x19, 0x04, 0xd9, 0x04, + 0x94, 0x05, 0x3c, 0x06, 0xb8, 0x06, 0x1f, 0x07, 0x41, 0x07, 0xdd, 0x06, + 0xe5, 0x05, 0x2d, 0x05, 0x13, 0x04, 0xc2, 0x02, 0xa7, 0x01, 0xbc, 0xff, + 0xbf, 0xfd, 0xa7, 0xfb, 0xb0, 0xf9, 0x49, 0xf8, 0x79, 0xf6, 0x91, 0xf4, + 0x21, 0xf3, 0x62, 0xf1, 0x17, 0xf0, 0x5c, 0xef, 0x6e, 0xee, 0x98, 0xed, + 0x22, 0xed, 0x77, 0xec, 0x47, 0xeb, 0x54, 0xeb, 0x7b, 0xeb, 0x43, 0xec, + 0xb5, 0xed, 0x10, 0xef, 0x01, 0xf1, 0xff, 0xf2, 0x07, 0xf5, 0xbd, 0xf8, + 0xcf, 0xfc, 0xf5, 0x00, 0x73, 0x04, 0x9d, 0x06, 0xfa, 0x08, 0xd8, 0x0c, + 0x29, 0x10, 0x3a, 0x12, 0xfa, 0x12, 0x99, 0x12, 0x18, 0x12, 0xe8, 0x11, + 0x02, 0x11, 0x5d, 0x0f, 0x0d, 0x0d, 0x22, 0x0a, 0x57, 0x07, 0x8f, 0x04, + 0x9e, 0x02, 0x41, 0x01, 0x0e, 0xff, 0xcc, 0xfc, 0x51, 0xfb, 0x6a, 0xfa, + 0xae, 0xfa, 0xdc, 0xfa, 0xd0, 0xfa, 0x2a, 0xfa, 0xb4, 0xf9, 0x4e, 0xfa, + 0x29, 0xfb, 0xbf, 0xfb, 0xc1, 0xfb, 0xbf, 0xfa, 0x02, 0xfa, 0xec, 0xf9, + 0x64, 0xfa, 0xb2, 0xfa, 0x4a, 0xfa, 0xa5, 0xf9, 0x50, 0xf9, 0x37, 0xfa, + 0xec, 0xfb, 0x69, 0xfd, 0x8b, 0xfe, 0xa3, 0xff, 0xd9, 0x01, 0x9d, 0x04, + 0x04, 0x07, 0xca, 0x09, 0xd1, 0x0b, 0xaa, 0x0d, 0x43, 0x10, 0x86, 0x11, + 0x2a, 0x12, 0x01, 0x13, 0x3f, 0x13, 0x84, 0x12, 0x83, 0x11, 0x09, 0x10, + 0xc1, 0x0d, 0xa9, 0x0b, 0x97, 0x09, 0xea, 0x06, 0x2e, 0x04, 0x99, 0x01, + 0xc8, 0xff, 0x11, 0xfe, 0x23, 0xfc, 0x8e, 0xfa, 0xc4, 0xf9, 0x8e, 0xf9, + 0xb7, 0xf9, 0xb1, 0xf9, 0x92, 0xf9, 0x65, 0xfa, 0x6e, 0xfb, 0x21, 0xfc, + 0xe1, 0xfc, 0xc5, 0xfd, 0x4b, 0xfe, 0x93, 0xfe, 0xb8, 0xfe, 0x1d, 0xff, + 0x55, 0xff, 0x08, 0xff, 0x80, 0xfe, 0x2c, 0xfe, 0x16, 0xfe, 0xdc, 0xfd, + 0x90, 0xfd, 0xa7, 0xfd, 0xbd, 0xfd, 0xff, 0xfd, 0x92, 0xfe, 0x2a, 0xff, + 0x2c, 0x00, 0x52, 0x01, 0x53, 0x02, 0x78, 0x03, 0xb3, 0x04, 0xef, 0x05, + 0xde, 0x06, 0xb6, 0x07, 0x39, 0x08, 0x77, 0x08, 0x8c, 0x08, 0x40, 0x08, + 0x8f, 0x07, 0x65, 0x06, 0xc5, 0x04, 0x2d, 0x03, 0x4b, 0x01, 0x75, 0xff, + 0x7a, 0xfd, 0x4b, 0xfb, 0x25, 0xf9, 0xa4, 0xf6, 0x38, 0xf4, 0x01, 0xf3, + 0xd3, 0xf1, 0xbc, 0xf0, 0x32, 0xef, 0xb8, 0xec, 0x21, 0xec, 0x38, 0xec, + 0xdf, 0xeb, 0x3a, 0xeb, 0x8c, 0xea, 0x66, 0xea, 0xdd, 0xeb, 0x82, 0xed, + 0x17, 0xef, 0xf4, 0xf0, 0x16, 0xf3, 0xdc, 0xf5, 0x1d, 0xf9, 0x6b, 0xfc, + 0x15, 0x00, 0x50, 0x04, 0x2a, 0x07, 0x4a, 0x09, 0xaf, 0x0b, 0x33, 0x0e, + 0x52, 0x11, 0x1b, 0x13, 0x83, 0x12, 0x83, 0x11, 0xca, 0x10, 0x7a, 0x10, + 0xe9, 0x0f, 0x12, 0x0e, 0x22, 0x0b, 0x63, 0x08, 0x70, 0x06, 0x6f, 0x04, + 0xba, 0x02, 0x37, 0x01, 0x74, 0xff, 0x2c, 0xfe, 0x32, 0xfd, 0x0f, 0xfc, + 0x8f, 0xfb, 0xb5, 0xfb, 0xba, 0xfb, 0x9d, 0xfb, 0x21, 0xfb, 0x5e, 0xfa, + 0x64, 0xfa, 0xd8, 0xfa, 0x77, 0xfa, 0xad, 0xf9, 0x44, 0xf9, 0xac, 0xf8, + 0xb1, 0xf8, 0xbd, 0xf8, 0x8d, 0xf8, 0xee, 0xf8, 0x55, 0xf9, 0x49, 0xfa, + 0xcc, 0xfb, 0x24, 0xfd, 0x6b, 0xfe, 0xbb, 0x00, 0xac, 0x03, 0xee, 0x05, + 0xe8, 0x07, 0x18, 0x0a, 0x50, 0x0c, 0xdc, 0x0e, 0xda, 0x10, 0x68, 0x11, + 0x60, 0x11, 0xc7, 0x12, 0x25, 0x13, 0x09, 0x12, 0x05, 0x10, 0xa7, 0x0e, + 0x86, 0x0d, 0xd2, 0x0b, 0x23, 0x09, 0x30, 0x06, 0x0e, 0x04, 0x41, 0x02, + 0x75, 0x00, 0x23, 0xfe, 0x92, 0xfc, 0xb8, 0xfb, 0xde, 0xfa, 0x11, 0xfa, + 0x88, 0xf9, 0xa5, 0xf9, 0x50, 0xfa, 0xae, 0xfa, 0x02, 0xfb, 0x76, 0xfb, + 0xec, 0xfb, 0x5d, 0xfc, 0x3b, 0xfd, 0xbc, 0xfd, 0xd1, 0xfd, 0x9e, 0xfd, + 0x69, 0xfd, 0x72, 0xfd, 0xae, 0xfd, 0x8d, 0xfd, 0x28, 0xfd, 0xf1, 0xfc, + 0x28, 0xfd, 0x76, 0xfd, 0x81, 0xfd, 0xec, 0xfd, 0xde, 0xfe, 0xfd, 0xff, + 0xc5, 0x00, 0xb3, 0x01, 0xe1, 0x02, 0x1d, 0x04, 0x75, 0x05, 0xda, 0x06, + 0xbb, 0x07, 0xff, 0x07, 0x90, 0x08, 0xe1, 0x08, 0xc9, 0x08, 0xce, 0x08, + 0xb7, 0x07, 0xee, 0x05, 0xb9, 0x04, 0x1e, 0x03, 0x2a, 0x01, 0x47, 0xff, + 0x63, 0xfd, 0xc0, 0xfa, 0x8b, 0xf8, 0x61, 0xf6, 0x2b, 0xf4, 0x0c, 0xf3, + 0x52, 0xf1, 0x97, 0xef, 0xec, 0xed, 0x48, 0xec, 0x49, 0xeb, 0xe4, 0xea, + 0x47, 0xea, 0xc6, 0xe9, 0x5c, 0xe9, 0xc8, 0xe9, 0x6f, 0xeb, 0xdf, 0xed, + 0xa0, 0xef, 0x00, 0xf1, 0xc8, 0xf3, 0x5a, 0xf7, 0x9e, 0xfb, 0x75, 0xff, + 0x48, 0x02, 0x92, 0x05, 0xf4, 0x08, 0x52, 0x0b, 0xfc, 0x0d, 0xb5, 0x10, + 0x5b, 0x12, 0x09, 0x13, 0x18, 0x12, 0xe3, 0x10, 0xe0, 0x10, 0xcd, 0x10, + 0x87, 0x0f, 0xb2, 0x0c, 0x98, 0x09, 0x73, 0x07, 0x6e, 0x06, 0x44, 0x05, + 0x49, 0x03, 0xf1, 0x00, 0xba, 0xff, 0x49, 0xff, 0x7c, 0xfe, 0xba, 0xfd, + 0x75, 0xfd, 0x2c, 0xfd, 0x96, 0xfc, 0x58, 0xfc, 0x08, 0xfc, 0xc1, 0xfb, + 0xc2, 0xfb, 0xa0, 0xfa, 0x4b, 0xf9, 0xe3, 0xf8, 0xfa, 0xf8, 0x07, 0xf9, + 0x19, 0xf8, 0xe8, 0xf6, 0x99, 0xf6, 0x3f, 0xf7, 0x99, 0xf8, 0xfb, 0xf9, + 0xba, 0xfa, 0xa0, 0xfb, 0x64, 0xfd, 0x01, 0x00, 0xf9, 0x02, 0xdf, 0x05, + 0x55, 0x08, 0x52, 0x0a, 0x73, 0x0c, 0x6c, 0x0e, 0x8f, 0x10, 0x58, 0x12, + 0x40, 0x13, 0x9b, 0x13, 0x14, 0x13, 0xfa, 0x11, 0x43, 0x11, 0x0f, 0x10, + 0x69, 0x0e, 0x88, 0x0c, 0xb7, 0x09, 0xf0, 0x06, 0xe9, 0x04, 0xc9, 0x02, + 0xb0, 0x00, 0xf1, 0xfe, 0x17, 0xfd, 0xb8, 0xfb, 0xea, 0xfa, 0x30, 0xfa, + 0x6b, 0xf9, 0x65, 0xf9, 0xd4, 0xf9, 0x3a, 0xfa, 0x8d, 0xfa, 0xa1, 0xfa, + 0xd5, 0xfa, 0x69, 0xfb, 0xec, 0xfb, 0x7e, 0xfc, 0x6a, 0xfc, 0x17, 0xfc, + 0xe3, 0xfb, 0x99, 0xfb, 0xbe, 0xfb, 0xf9, 0xfb, 0xce, 0xfb, 0xa5, 0xfb, + 0xb4, 0xfb, 0xf9, 0xfb, 0xab, 0xfc, 0xe9, 0xfd, 0x0c, 0xff, 0x07, 0x00, + 0x0d, 0x01, 0x48, 0x02, 0x27, 0x04, 0x3c, 0x06, 0x77, 0x07, 0x68, 0x08, + 0x60, 0x09, 0x34, 0x0a, 0xbe, 0x0a, 0x0e, 0x0b, 0xf8, 0x0a, 0x34, 0x0a, + 0xc2, 0x08, 0x4a, 0x07, 0x89, 0x05, 0xd5, 0x03, 0xf0, 0x01, 0x6f, 0xff, + 0xf2, 0xfc, 0x31, 0xfa, 0xc6, 0xf7, 0xb5, 0xf5, 0xb9, 0xf3, 0xc4, 0xf1, + 0xde, 0xef, 0xf0, 0xed, 0xa4, 0xec, 0x7c, 0xeb, 0x64, 0xea, 0x34, 0xe9, + 0xaf, 0xe8, 0xc8, 0xe8, 0x6d, 0xe9, 0x7c, 0xea, 0x5d, 0xeb, 0x6e, 0xed, + 0x30, 0xef, 0xb1, 0xf1, 0xe4, 0xf4, 0x65, 0xf8, 0x38, 0xfc, 0x46, 0xff, + 0xf1, 0x01, 0xe9, 0x04, 0x9d, 0x08, 0x1b, 0x0c, 0x61, 0x0e, 0x98, 0x0f, + 0x7b, 0x10, 0x3e, 0x11, 0xbc, 0x11, 0x98, 0x11, 0xf5, 0x10, 0xe7, 0x0f, + 0x6b, 0x0e, 0xa3, 0x0c, 0xd8, 0x0a, 0x45, 0x09, 0xf6, 0x07, 0x90, 0x06, + 0x01, 0x05, 0x8a, 0x03, 0x66, 0x02, 0x8b, 0x01, 0xe3, 0x00, 0x12, 0x00, + 0x52, 0xff, 0xc4, 0xfe, 0x68, 0xfe, 0xb7, 0xfd, 0xa3, 0xfc, 0x8c, 0xfb, + 0xc5, 0xfa, 0x4e, 0xfa, 0xc1, 0xf9, 0xad, 0xf8, 0x21, 0xf7, 0x2b, 0xf6, + 0x07, 0xf6, 0x37, 0xf6, 0x6b, 0xf6, 0x8e, 0xf6, 0xd8, 0xf6, 0x7e, 0xf7, + 0xe6, 0xf8, 0xdc, 0xfa, 0x66, 0xfd, 0xf4, 0xff, 0x1f, 0x02, 0xe6, 0x03, + 0xfc, 0x05, 0xf7, 0x08, 0xff, 0x0b, 0x5d, 0x0e, 0x8a, 0x0f, 0x34, 0x10, + 0xe2, 0x10, 0xad, 0x11, 0x33, 0x12, 0xdd, 0x11, 0xdc, 0x10, 0x4b, 0x0f, + 0x91, 0x0d, 0xd9, 0x0b, 0x1d, 0x0a, 0x71, 0x08, 0x54, 0x06, 0x26, 0x04, + 0x4c, 0x02, 0x79, 0x00, 0xf8, 0xfe, 0x12, 0xfe, 0x1c, 0xfd, 0x6a, 0xfc, + 0xc6, 0xfb, 0x01, 0xfb, 0xee, 0xfa, 0x1c, 0xfb, 0x27, 0xfb, 0x46, 0xfb, + 0x3e, 0xfb, 0x1a, 0xfb, 0x33, 0xfb, 0x1d, 0xfb, 0xe3, 0xfa, 0xe1, 0xfa, + 0xb1, 0xfa, 0x50, 0xfa, 0x48, 0xfa, 0x00, 0xfa, 0xd6, 0xf9, 0x2d, 0xfa, + 0x74, 0xfa, 0x2e, 0xfb, 0xf4, 0xfb, 0xa3, 0xfc, 0xbc, 0xfd, 0x24, 0xff, + 0xb8, 0x00, 0x86, 0x02, 0xd8, 0x03, 0x5e, 0x05, 0x01, 0x07, 0x4f, 0x08, + 0x59, 0x09, 0x27, 0x0a, 0xd1, 0x0a, 0x34, 0x0b, 0x11, 0x0b, 0x21, 0x0a, + 0xdd, 0x08, 0xc2, 0x07, 0x79, 0x06, 0x81, 0x04, 0x50, 0x02, 0x1a, 0x00, + 0xbb, 0xfd, 0x33, 0xfb, 0x30, 0xf9, 0xe9, 0xf6, 0xaf, 0xf4, 0x1c, 0xf3, + 0xf6, 0xf0, 0xed, 0xee, 0x69, 0xed, 0xdc, 0xeb, 0x31, 0xeb, 0x98, 0xea, + 0x26, 0xe9, 0xd2, 0xe8, 0x6e, 0xe9, 0x59, 0xea, 0xf0, 0xeb, 0x4b, 0xed, + 0xad, 0xee, 0x18, 0xf1, 0x19, 0xf4, 0x4b, 0xf7, 0xc7, 0xfa, 0xef, 0xfd, + 0xe1, 0x00, 0xdf, 0x03, 0x66, 0x06, 0x5c, 0x09, 0x5d, 0x0c, 0x50, 0x0e, + 0x4a, 0x0f, 0x9e, 0x0f, 0x8b, 0x0f, 0xcc, 0x0f, 0x26, 0x10, 0xbe, 0x0f, + 0x5b, 0x0e, 0x92, 0x0c, 0xd9, 0x0a, 0x7d, 0x09, 0xb8, 0x08, 0x14, 0x08, + 0x00, 0x07, 0x44, 0x05, 0x97, 0x03, 0x9d, 0x02, 0x80, 0x02, 0x6f, 0x02, + 0xc9, 0x01, 0x75, 0x00, 0x43, 0xff, 0xb0, 0xfe, 0x3c, 0xfe, 0x84, 0xfd, + 0x87, 0xfc, 0x72, 0xfb, 0x55, 0xfa, 0x28, 0xf9, 0x20, 0xf8, 0x51, 0xf7, + 0xf3, 0xf6, 0xb7, 0xf6, 0x63, 0xf6, 0x32, 0xf6, 0x5f, 0xf6, 0x49, 0xf7, + 0x9a, 0xf8, 0x33, 0xfa, 0x0a, 0xfc, 0xb8, 0xfd, 0x8f, 0xff, 0xdd, 0x01, + 0x7b, 0x04, 0xe2, 0x06, 0x28, 0x09, 0xe7, 0x0a, 0x58, 0x0c, 0xff, 0x0d, + 0x2e, 0x0f, 0xcd, 0x0f, 0x3a, 0x10, 0x08, 0x10, 0x6b, 0x0f, 0x75, 0x0e, + 0x5a, 0x0d, 0x27, 0x0c, 0xb8, 0x0a, 0xf4, 0x08, 0xf9, 0x06, 0x2e, 0x05, + 0x93, 0x03, 0x6b, 0x02, 0x25, 0x01, 0xab, 0xff, 0x80, 0xfe, 0xa7, 0xfd, + 0x37, 0xfd, 0x13, 0xfd, 0xd0, 0xfc, 0x68, 0xfc, 0x37, 0xfc, 0x38, 0xfc, + 0x23, 0xfc, 0x1f, 0xfc, 0x0d, 0xfc, 0x09, 0xfc, 0xc8, 0xfb, 0x3a, 0xfb, + 0xa6, 0xfa, 0x6a, 0xfa, 0x62, 0xfa, 0x3f, 0xfa, 0xee, 0xf9, 0xb7, 0xf9, + 0xca, 0xf9, 0x2f, 0xfa, 0xd3, 0xfa, 0x9f, 0xfb, 0xce, 0xfc, 0x0d, 0xfe, + 0x31, 0xff, 0x7d, 0x00, 0x0e, 0x02, 0xbc, 0x03, 0x7c, 0x05, 0x0b, 0x07, + 0x3a, 0x08, 0x2c, 0x09, 0xd5, 0x09, 0x47, 0x0a, 0x92, 0x0a, 0x91, 0x0a, + 0xf3, 0x09, 0xbe, 0x08, 0x23, 0x07, 0x52, 0x05, 0xc2, 0x03, 0x2d, 0x02, + 0x21, 0x00, 0xb6, 0xfd, 0x2a, 0xfb, 0xc7, 0xf8, 0xce, 0xf6, 0x51, 0xf5, + 0x9c, 0xf3, 0xbe, 0xf1, 0x72, 0xef, 0xb8, 0xed, 0x9a, 0xec, 0x9b, 0xeb, + 0xe3, 0xea, 0xc8, 0xe9, 0xc3, 0xe9, 0x6e, 0xea, 0xe7, 0xea, 0xa9, 0xeb, + 0xd9, 0xec, 0x25, 0xef, 0xf9, 0xf1, 0x6f, 0xf4, 0xe3, 0xf6, 0xe0, 0xf9, + 0x42, 0xfd, 0x48, 0x00, 0xf8, 0x02, 0xc9, 0x05, 0xc4, 0x08, 0x49, 0x0b, + 0x6e, 0x0c, 0x0d, 0x0d, 0xfa, 0x0d, 0xc6, 0x0e, 0x79, 0x0f, 0x29, 0x0f, + 0xdd, 0x0d, 0xa9, 0x0c, 0xc2, 0x0b, 0xfb, 0x0a, 0x2a, 0x0a, 0x46, 0x09, + 0x17, 0x08, 0xe8, 0x06, 0xb6, 0x05, 0x08, 0x05, 0xb0, 0x04, 0x26, 0x04, + 0xa2, 0x03, 0xe1, 0x02, 0xe4, 0x01, 0x0e, 0x01, 0x61, 0x00, 0xe3, 0xff, + 0x30, 0xff, 0x11, 0xfe, 0x94, 0xfc, 0x30, 0xfb, 0x40, 0xfa, 0x69, 0xf9, + 0x98, 0xf8, 0xd2, 0xf7, 0x58, 0xf7, 0x91, 0xf6, 0x1a, 0xf6, 0x94, 0xf6, + 0x77, 0xf7, 0x95, 0xf8, 0xfe, 0xf9, 0xd1, 0xfa, 0xf9, 0xfb, 0x6d, 0xfe, + 0xda, 0x00, 0x2c, 0x03, 0x1d, 0x05, 0x7b, 0x06, 0x78, 0x08, 0xb0, 0x0a, + 0x52, 0x0c, 0x50, 0x0d, 0x8b, 0x0d, 0x2a, 0x0e, 0x99, 0x0e, 0x64, 0x0e, + 0xb6, 0x0d, 0x9a, 0x0c, 0xa9, 0x0b, 0x7c, 0x0a, 0xfb, 0x08, 0x9f, 0x07, + 0x40, 0x06, 0x82, 0x04, 0x0a, 0x03, 0xf5, 0x01, 0x17, 0x01, 0x14, 0x00, + 0x25, 0xff, 0x72, 0xfe, 0x11, 0xfe, 0xc0, 0xfd, 0x8a, 0xfd, 0x6f, 0xfd, + 0x58, 0xfd, 0x1a, 0xfd, 0xc4, 0xfc, 0x6a, 0xfc, 0x6e, 0xfc, 0xb8, 0xfc, + 0x3e, 0xfc, 0x3f, 0xfb, 0x8a, 0xfa, 0x68, 0xfa, 0x60, 0xfa, 0x78, 0xfa, + 0x3f, 0xfa, 0xa5, 0xf9, 0xb1, 0xf9, 0x47, 0xfa, 0x30, 0xfb, 0x41, 0xfc, + 0x55, 0xfd, 0x49, 0xfe, 0x52, 0xff, 0xb8, 0x00, 0x86, 0x02, 0x6e, 0x04, + 0xe3, 0x05, 0xfe, 0x06, 0xb5, 0x07, 0x75, 0x08, 0x4c, 0x09, 0xbc, 0x09, + 0xa3, 0x09, 0xfb, 0x08, 0xcb, 0x07, 0x33, 0x06, 0xde, 0x04, 0x88, 0x03, + 0xce, 0x01, 0xd1, 0xff, 0x5a, 0xfd, 0xd6, 0xfa, 0xea, 0xf8, 0x17, 0xf7, + 0x71, 0xf5, 0xa8, 0xf3, 0x90, 0xf1, 0x0c, 0xf0, 0x83, 0xee, 0x09, 0xed, + 0x27, 0xec, 0xac, 0xeb, 0x97, 0xeb, 0xcf, 0xeb, 0xea, 0xeb, 0x0e, 0xec, + 0x54, 0xed, 0x6c, 0xef, 0xaf, 0xf1, 0x05, 0xf4, 0xec, 0xf5, 0x68, 0xf8, + 0x62, 0xfb, 0x34, 0xfe, 0xf9, 0x00, 0xb8, 0x03, 0x11, 0x06, 0x2d, 0x08, + 0xc9, 0x09, 0x94, 0x0a, 0x77, 0x0b, 0xce, 0x0c, 0xa9, 0x0d, 0x1e, 0x0d, + 0xd2, 0x0b, 0x23, 0x0b, 0x2b, 0x0b, 0x03, 0x0b, 0x0e, 0x0a, 0xac, 0x08, + 0xa6, 0x07, 0x40, 0x07, 0xc9, 0x06, 0x23, 0x06, 0xab, 0x05, 0x73, 0x05, + 0x13, 0x05, 0x2a, 0x04, 0x1e, 0x03, 0xba, 0x02, 0xe9, 0x02, 0x76, 0x02, + 0x24, 0x01, 0x7d, 0xff, 0x08, 0xfe, 0x5e, 0xfd, 0xd3, 0xfc, 0xe2, 0xfb, + 0x99, 0xfa, 0x05, 0xf9, 0xe8, 0xf7, 0x87, 0xf7, 0xa0, 0xf7, 0xc9, 0xf7, + 0x01, 0xf8, 0x2d, 0xf8, 0xaf, 0xf8, 0xec, 0xf9, 0xca, 0xfb, 0xd0, 0xfd, + 0xb2, 0xff, 0x38, 0x01, 0xb3, 0x02, 0xcc, 0x04, 0x23, 0x07, 0x1a, 0x09, + 0x47, 0x0a, 0x32, 0x0b, 0x06, 0x0c, 0xd0, 0x0c, 0x4a, 0x0d, 0x31, 0x0d, + 0xad, 0x0c, 0xda, 0x0b, 0x1a, 0x0b, 0x36, 0x0a, 0x11, 0x09, 0xc0, 0x07, + 0x55, 0x06, 0x1e, 0x05, 0x23, 0x04, 0xd0, 0x02, 0xc0, 0x01, 0x3b, 0x01, + 0x9e, 0x00, 0x0d, 0x00, 0x50, 0xff, 0xd4, 0xfe, 0x01, 0xff, 0xfa, 0xfe, + 0x8c, 0xfe, 0x2a, 0xfe, 0xe3, 0xfd, 0x93, 0xfd, 0x67, 0xfd, 0xf2, 0xfc, + 0x48, 0xfc, 0xcf, 0xfb, 0x44, 0xfb, 0x9c, 0xfa, 0x18, 0xfa, 0xb5, 0xf9, + 0x7d, 0xf9, 0x6b, 0xf9, 0x71, 0xf9, 0xa7, 0xf9, 0x1c, 0xfa, 0xd2, 0xfa, + 0xd1, 0xfb, 0xfb, 0xfc, 0x55, 0xfe, 0x81, 0xff, 0xf1, 0x00, 0x75, 0x02, + 0xe7, 0x03, 0x53, 0x05, 0x7c, 0x06, 0x69, 0x07, 0x0e, 0x08, 0x6b, 0x08, + 0x89, 0x08, 0x92, 0x08, 0xd4, 0x07, 0xa6, 0x06, 0x6f, 0x05, 0x1b, 0x04, + 0x52, 0x02, 0xd8, 0x00, 0x1f, 0xff, 0x27, 0xfd, 0xf6, 0xfa, 0xc0, 0xf8, + 0x42, 0xf7, 0xdc, 0xf5, 0x86, 0xf4, 0x90, 0xf2, 0x99, 0xf0, 0x53, 0xef, + 0x63, 0xee, 0xb5, 0xed, 0x5e, 0xed, 0xf1, 0xec, 0xcf, 0xec, 0x3c, 0xed, + 0xd6, 0xed, 0xfd, 0xee, 0xa2, 0xf0, 0x5e, 0xf2, 0x79, 0xf4, 0xac, 0xf6, + 0x31, 0xf9, 0x78, 0xfb, 0xa1, 0xfd, 0x37, 0x00, 0xe0, 0x02, 0x84, 0x05, + 0x45, 0x07, 0x31, 0x08, 0xf5, 0x08, 0x40, 0x0a, 0x8a, 0x0b, 0xe5, 0x0b, + 0xad, 0x0b, 0x13, 0x0b, 0x6f, 0x0a, 0x0a, 0x0a, 0x94, 0x09, 0x3d, 0x09, + 0xb2, 0x08, 0xe8, 0x07, 0x50, 0x07, 0x4d, 0x06, 0xbd, 0x05, 0xf9, 0x05, + 0x10, 0x06, 0x94, 0x05, 0xda, 0x04, 0xe4, 0x03, 0x96, 0x03, 0xa6, 0x03, + 0x03, 0x03, 0x1e, 0x02, 0x3f, 0x01, 0x63, 0x00, 0x46, 0xff, 0xee, 0xfd, + 0x95, 0xfc, 0x15, 0xfc, 0xda, 0xfb, 0xd8, 0xfa, 0x4d, 0xf9, 0x3b, 0xf8, + 0x3a, 0xf8, 0x29, 0xf9, 0xed, 0xf9, 0x33, 0xfa, 0x80, 0xfa, 0x61, 0xfb, + 0xb0, 0xfc, 0x86, 0xfe, 0xb0, 0x00, 0x9d, 0x02, 0x1d, 0x04, 0x3a, 0x05, + 0x74, 0x06, 0x0f, 0x08, 0xc6, 0x09, 0x54, 0x0b, 0xe4, 0x0b, 0x76, 0x0b, + 0x0d, 0x0b, 0x00, 0x0b, 0xf6, 0x0a, 0xe9, 0x0a, 0x14, 0x0a, 0x4c, 0x08, + 0xe8, 0x06, 0xe7, 0x05, 0x02, 0x05, 0x3c, 0x04, 0x71, 0x03, 0x69, 0x02, + 0x7f, 0x01, 0xb8, 0x00, 0x25, 0x00, 0x26, 0x00, 0x25, 0x00, 0xf3, 0xff, + 0x8f, 0xff, 0x26, 0xff, 0x08, 0xff, 0xdb, 0xfe, 0x83, 0xfe, 0x35, 0xfe, + 0xbd, 0xfd, 0x25, 0xfd, 0x55, 0xfc, 0x82, 0xfb, 0xe7, 0xfa, 0x60, 0xfa, + 0xf9, 0xf9, 0x9b, 0xf9, 0x6e, 0xf9, 0x39, 0xf9, 0x11, 0xf9, 0x84, 0xf9, + 0x8b, 0xfa, 0x9f, 0xfb, 0x8f, 0xfc, 0x77, 0xfd, 0xae, 0xfe, 0x38, 0x00, + 0xa7, 0x01, 0x0f, 0x03, 0x72, 0x04, 0xa5, 0x05, 0x6a, 0x06, 0xa8, 0x06, + 0xef, 0x06, 0x27, 0x07, 0x15, 0x07, 0x6c, 0x06, 0x63, 0x05, 0xed, 0x03, + 0x84, 0x02, 0x1d, 0x01, 0xc7, 0xff, 0x5f, 0xfe, 0x5a, 0xfc, 0x52, 0xfa, + 0xba, 0xf8, 0x29, 0xf7, 0xe2, 0xf5, 0x75, 0xf4, 0xc7, 0xf2, 0x75, 0xf1, + 0x93, 0xf0, 0x6a, 0xef, 0x9a, 0xee, 0x4f, 0xee, 0xb4, 0xee, 0x79, 0xef, + 0x74, 0xef, 0xc9, 0xef, 0xed, 0xf0, 0x25, 0xf3, 0x7a, 0xf5, 0x49, 0xf7, + 0xde, 0xf8, 0x8f, 0xfa, 0x3a, 0xfd, 0xf4, 0xff, 0xe1, 0x01, 0xa8, 0x03, + 0x4e, 0x05, 0x9f, 0x06, 0xf1, 0x07, 0xc6, 0x08, 0x38, 0x09, 0xd0, 0x09, + 0x03, 0x0a, 0xbf, 0x09, 0x38, 0x09, 0xb0, 0x08, 0x86, 0x08, 0x81, 0x08, + 0xbc, 0x07, 0xdb, 0x06, 0x7b, 0x06, 0x75, 0x06, 0x87, 0x06, 0x25, 0x06, + 0x5e, 0x05, 0x0a, 0x05, 0x38, 0x05, 0x62, 0x05, 0x16, 0x05, 0x21, 0x04, + 0x66, 0x03, 0x12, 0x03, 0x8d, 0x02, 0xed, 0x01, 0xf3, 0x00, 0xca, 0xff, + 0xbf, 0xfe, 0x9d, 0xfd, 0xa3, 0xfc, 0xea, 0xfb, 0x78, 0xfb, 0x1d, 0xfb, + 0x52, 0xfa, 0x6d, 0xf9, 0x91, 0xf9, 0xaf, 0xfa, 0x9a, 0xfb, 0x5b, 0xfc, + 0xe0, 0xfc, 0x74, 0xfd, 0x1f, 0xff, 0x12, 0x01, 0xcd, 0x02, 0x45, 0x04, + 0x3f, 0x05, 0x31, 0x06, 0x66, 0x07, 0x8f, 0x08, 0x74, 0x09, 0x2d, 0x0a, + 0x31, 0x0a, 0xd5, 0x09, 0x85, 0x09, 0xee, 0x08, 0xcc, 0x08, 0x6b, 0x08, + 0x55, 0x07, 0x41, 0x06, 0x2b, 0x05, 0x4f, 0x04, 0xc5, 0x03, 0x51, 0x03, + 0x9e, 0x02, 0xec, 0x01, 0x56, 0x01, 0xf6, 0x00, 0xad, 0x00, 0x6f, 0x00, + 0x5b, 0x00, 0x26, 0x00, 0xa9, 0xff, 0x33, 0xff, 0xce, 0xfe, 0x63, 0xfe, + 0x0d, 0xfe, 0x68, 0xfd, 0xa0, 0xfc, 0x10, 0xfc, 0x73, 0xfb, 0xaa, 0xfa, + 0x09, 0xfa, 0xcb, 0xf9, 0xcf, 0xf9, 0xd0, 0xf9, 0xcd, 0xf9, 0xd9, 0xf9, + 0x4d, 0xfa, 0x3d, 0xfb, 0x71, 0xfc, 0xb3, 0xfd, 0xab, 0xfe, 0xa7, 0xff, + 0xc6, 0x00, 0x08, 0x02, 0x6c, 0x03, 0x8f, 0x04, 0x58, 0x05, 0xf5, 0x05, + 0x09, 0x06, 0xc8, 0x05, 0x86, 0x05, 0x76, 0x05, 0x20, 0x05, 0x0b, 0x04, + 0x8b, 0x02, 0xef, 0x00, 0xb5, 0xff, 0x9f, 0xfe, 0x65, 0xfd, 0x12, 0xfc, + 0x4c, 0xfa, 0x8a, 0xf8, 0x0f, 0xf7, 0x9d, 0xf5, 0xa7, 0xf4, 0xa3, 0xf3, + 0x60, 0xf2, 0x06, 0xf1, 0xe6, 0xef, 0x6a, 0xef, 0x90, 0xef, 0x00, 0xf0, + 0x66, 0xf0, 0x95, 0xf0, 0x04, 0xf1, 0x3e, 0xf2, 0x29, 0xf4, 0x7c, 0xf6, + 0x62, 0xf8, 0xf8, 0xf9, 0xa0, 0xfb, 0xf8, 0xfd, 0x3a, 0x00, 0x10, 0x02, + 0xf8, 0x03, 0x82, 0x05, 0x84, 0x06, 0x54, 0x07, 0xeb, 0x07, 0x6c, 0x08, + 0x19, 0x09, 0x3c, 0x09, 0xbc, 0x08, 0x12, 0x08, 0x98, 0x07, 0xa5, 0x07, + 0x96, 0x07, 0xec, 0x06, 0x38, 0x06, 0xd5, 0x05, 0xde, 0x05, 0xf6, 0x05, + 0xc4, 0x05, 0x4c, 0x05, 0x41, 0x05, 0x8c, 0x05, 0x30, 0x05, 0xbc, 0x04, + 0xac, 0x04, 0x71, 0x04, 0xd4, 0x03, 0x06, 0x03, 0x1e, 0x02, 0x6b, 0x01, + 0xdf, 0x00, 0xdb, 0xff, 0x74, 0xfe, 0x76, 0xfd, 0xd0, 0xfc, 0x45, 0xfc, + 0xae, 0xfb, 0x10, 0xfb, 0xbe, 0xfa, 0xb5, 0xfa, 0x30, 0xfb, 0xc7, 0xfb, + 0x68, 0xfc, 0x57, 0xfd, 0x53, 0xfe, 0x8f, 0xff, 0xbb, 0x00, 0xf9, 0x01, + 0x9d, 0x03, 0xf2, 0x04, 0xfb, 0x05, 0xa2, 0x06, 0x3c, 0x07, 0x45, 0x08, + 0xe8, 0x08, 0xe0, 0x08, 0xb9, 0x08, 0x7a, 0x08, 0x0a, 0x08, 0x6c, 0x07, + 0xd2, 0x06, 0x3c, 0x06, 0x9b, 0x05, 0xc0, 0x04, 0xbc, 0x03, 0x04, 0x03, + 0xa3, 0x02, 0x4e, 0x02, 0xe3, 0x01, 0x53, 0x01, 0xe7, 0x00, 0xc5, 0x00, + 0x9c, 0x00, 0x71, 0x00, 0x39, 0x00, 0xed, 0xff, 0xa1, 0xff, 0x27, 0xff, + 0x99, 0xfe, 0x2b, 0xfe, 0xb0, 0xfd, 0x18, 0xfd, 0x6e, 0xfc, 0x8e, 0xfb, + 0xdd, 0xfa, 0x84, 0xfa, 0x55, 0xfa, 0x21, 0xfa, 0xe6, 0xf9, 0xf5, 0xf9, + 0x51, 0xfa, 0xf0, 0xfa, 0xb9, 0xfb, 0xc2, 0xfc, 0xbf, 0xfd, 0xda, 0xfe, + 0xe8, 0xff, 0x16, 0x01, 0x91, 0x02, 0x9b, 0x03, 0x82, 0x04, 0x16, 0x05, + 0x77, 0x05, 0xc9, 0x05, 0xc9, 0x05, 0x88, 0x05, 0xe9, 0x04, 0x0e, 0x04, + 0x34, 0x03, 0xf0, 0x01, 0x98, 0x00, 0x5f, 0xff, 0x0a, 0xfe, 0x92, 0xfc, + 0x17, 0xfb, 0x92, 0xf9, 0x42, 0xf8, 0x17, 0xf7, 0xc9, 0xf5, 0x51, 0xf4, + 0x14, 0xf3, 0x4b, 0xf2, 0x49, 0xf1, 0x90, 0xf0, 0x35, 0xf0, 0x05, 0xf0, + 0x34, 0xf0, 0x8c, 0xf0, 0x07, 0xf1, 0xbf, 0xf1, 0x46, 0xf3, 0xe3, 0xf4, + 0x40, 0xf6, 0x14, 0xf8, 0xf7, 0xf9, 0x2d, 0xfc, 0xdf, 0xfd, 0x72, 0xff, + 0x88, 0x01, 0x68, 0x03, 0xde, 0x04, 0xcc, 0x05, 0x3e, 0x06, 0x0b, 0x07, + 0xff, 0x07, 0x93, 0x08, 0x4b, 0x08, 0xb3, 0x07, 0x91, 0x07, 0x9a, 0x07, + 0x6c, 0x07, 0xfc, 0x06, 0xa8, 0x06, 0x5c, 0x06, 0x4c, 0x06, 0x27, 0x06, + 0xd1, 0x05, 0xdb, 0x05, 0x21, 0x06, 0x18, 0x06, 0xbe, 0x05, 0x74, 0x05, + 0x66, 0x05, 0x66, 0x05, 0x3c, 0x05, 0x77, 0x04, 0x68, 0x03, 0x7e, 0x02, + 0x20, 0x02, 0xb0, 0x01, 0x6c, 0x00, 0x06, 0xff, 0xf3, 0xfd, 0x4c, 0xfd, + 0xda, 0xfc, 0x0d, 0xfc, 0x68, 0xfb, 0x45, 0xfb, 0x48, 0xfb, 0x4e, 0xfb, + 0x80, 0xfb, 0x3a, 0xfc, 0x74, 0xfd, 0x74, 0xfe, 0x31, 0xff, 0xf8, 0xff, + 0x4b, 0x01, 0xcf, 0x02, 0x34, 0x04, 0x47, 0x05, 0xb8, 0x05, 0x4f, 0x06, + 0x13, 0x07, 0xaf, 0x07, 0x25, 0x08, 0xf4, 0x07, 0x7e, 0x07, 0x34, 0x07, + 0xc9, 0x06, 0x49, 0x06, 0x08, 0x06, 0x61, 0x05, 0x6e, 0x04, 0xc5, 0x03, + 0x1b, 0x03, 0xf3, 0x02, 0xc8, 0x02, 0x4a, 0x02, 0xd2, 0x01, 0x56, 0x01, + 0x4c, 0x01, 0x74, 0x01, 0x5f, 0x01, 0xf4, 0x00, 0x5b, 0x00, 0xee, 0xff, + 0xa9, 0xff, 0x67, 0xff, 0xda, 0xfe, 0xef, 0xfd, 0x39, 0xfd, 0x72, 0xfc, + 0xb7, 0xfb, 0x39, 0xfb, 0xdb, 0xfa, 0x96, 0xfa, 0x12, 0xfa, 0xb0, 0xf9, + 0xdd, 0xf9, 0x72, 0xfa, 0x1f, 0xfb, 0xc9, 0xfb, 0x6f, 0xfc, 0x7c, 0xfd, + 0xac, 0xfe, 0xce, 0xff, 0x02, 0x01, 0x28, 0x02, 0x14, 0x03, 0x11, 0x04, + 0xb1, 0x04, 0xea, 0x04, 0x37, 0x05, 0x27, 0x05, 0xcf, 0x04, 0x59, 0x04, + 0x6f, 0x03, 0x8d, 0x02, 0x9e, 0x01, 0x3b, 0x00, 0xe9, 0xfe, 0x8e, 0xfd, + 0x6e, 0xfc, 0x3f, 0xfb, 0xd7, 0xf9, 0x65, 0xf8, 0x10, 0xf7, 0x13, 0xf6, + 0xfb, 0xf4, 0x17, 0xf4, 0xfc, 0xf2, 0x19, 0xf2, 0x83, 0xf1, 0x1c, 0xf1, + 0x19, 0xf1, 0x3c, 0xf1, 0x7d, 0xf1, 0xf8, 0xf1, 0x94, 0xf2, 0x8f, 0xf3, + 0x4e, 0xf5, 0x0c, 0xf7, 0x7d, 0xf8, 0xd5, 0xf9, 0x62, 0xfb, 0x79, 0xfd, + 0xb8, 0xff, 0x69, 0x01, 0x5f, 0x02, 0x7f, 0x03, 0xee, 0x04, 0xf6, 0x05, + 0xb9, 0x06, 0x10, 0x07, 0x44, 0x07, 0x48, 0x07, 0x3a, 0x07, 0x26, 0x07, + 0xf7, 0x06, 0xcb, 0x06, 0x81, 0x06, 0x26, 0x06, 0xd8, 0x05, 0xf9, 0x05, + 0x4f, 0x06, 0x35, 0x06, 0xdc, 0x05, 0xb6, 0x05, 0xfc, 0x05, 0x81, 0x06, + 0xb8, 0x06, 0x44, 0x06, 0x9e, 0x05, 0x3f, 0x05, 0x0e, 0x05, 0xdb, 0x04, + 0x10, 0x04, 0x11, 0x03, 0xd4, 0x01, 0xbf, 0x00, 0x11, 0x00, 0x3e, 0xff, + 0x54, 0xfe, 0x6d, 0xfd, 0x85, 0xfc, 0xf0, 0xfb, 0xb4, 0xfb, 0xb0, 0xfb, + 0xe2, 0xfb, 0x33, 0xfc, 0x8e, 0xfc, 0x28, 0xfd, 0x24, 0xfe, 0x30, 0xff, + 0x63, 0x00, 0x79, 0x01, 0x7a, 0x02, 0x89, 0x03, 0x90, 0x04, 0x9d, 0x05, + 0x67, 0x06, 0xd2, 0x06, 0x27, 0x07, 0x6f, 0x07, 0x7a, 0x07, 0x67, 0x07, + 0xfe, 0x06, 0x72, 0x06, 0xf4, 0x05, 0x80, 0x05, 0xdd, 0x04, 0x46, 0x04, + 0x92, 0x03, 0xda, 0x02, 0x8e, 0x02, 0x49, 0x02, 0x2d, 0x02, 0xc9, 0x01, + 0x3c, 0x01, 0x31, 0x01, 0x4e, 0x01, 0x4e, 0x01, 0x19, 0x01, 0xc8, 0x00, + 0x75, 0x00, 0x05, 0x00, 0xac, 0xff, 0x23, 0xff, 0x8f, 0xfe, 0xc5, 0xfd, + 0xf3, 0xfc, 0x3b, 0xfc, 0x70, 0xfb, 0xe3, 0xfa, 0x76, 0xfa, 0x11, 0xfa, + 0xd4, 0xf9, 0xc3, 0xf9, 0x13, 0xfa, 0x9e, 0xfa, 0x40, 0xfb, 0xfa, 0xfb, + 0x07, 0xfd, 0x40, 0xfe, 0x61, 0xff, 0x87, 0x00, 0x99, 0x01, 0xc9, 0x02, + 0xc7, 0x03, 0x5c, 0x04, 0xd1, 0x04, 0x10, 0x05, 0x0f, 0x05, 0xdf, 0x04, + 0x39, 0x04, 0x6f, 0x03, 0xc9, 0x02, 0xd5, 0x01, 0x71, 0x00, 0x4e, 0xff, + 0x0c, 0xfe, 0xc1, 0xfc, 0xad, 0xfb, 0x64, 0xfa, 0x18, 0xf9, 0x12, 0xf8, + 0xb5, 0xf6, 0x9c, 0xf5, 0x00, 0xf5, 0x04, 0xf4, 0x45, 0xf3, 0x79, 0xf2, + 0xe2, 0xf1, 0x0b, 0xf2, 0x24, 0xf2, 0x5f, 0xf2, 0xc5, 0xf2, 0x2f, 0xf3, + 0x63, 0xf4, 0x8b, 0xf5, 0xcc, 0xf6, 0x57, 0xf8, 0xcd, 0xf9, 0x50, 0xfb, + 0xd7, 0xfc, 0x30, 0xfe, 0xb3, 0xff, 0x6d, 0x01, 0xa8, 0x02, 0x7c, 0x03, + 0x08, 0x04, 0x8d, 0x04, 0x55, 0x05, 0x01, 0x06, 0x35, 0x06, 0x0d, 0x06, + 0xaf, 0x05, 0xaf, 0x05, 0x0b, 0x06, 0x20, 0x06, 0x04, 0x06, 0x23, 0x06, + 0x12, 0x06, 0x0f, 0x06, 0x4a, 0x06, 0xa1, 0x06, 0x03, 0x07, 0x20, 0x07, + 0xf3, 0x06, 0xd9, 0x06, 0xdb, 0x06, 0xda, 0x06, 0xb3, 0x06, 0x38, 0x06, + 0x72, 0x05, 0x9a, 0x04, 0xc0, 0x03, 0xfc, 0x02, 0x4f, 0x02, 0x3d, 0x01, + 0xfd, 0xff, 0xfc, 0xfe, 0x5a, 0xfe, 0xb1, 0xfd, 0x32, 0xfd, 0xb0, 0xfc, + 0x73, 0xfc, 0x7c, 0xfc, 0xa5, 0xfc, 0x06, 0xfd, 0xcd, 0xfd, 0xad, 0xfe, + 0x47, 0xff, 0xfb, 0xff, 0x2c, 0x01, 0x54, 0x02, 0x52, 0x03, 0x2f, 0x04, + 0xcf, 0x04, 0x69, 0x05, 0xf0, 0x05, 0x69, 0x06, 0xb9, 0x06, 0x9d, 0x06, + 0x40, 0x06, 0x21, 0x06, 0xad, 0x05, 0x44, 0x05, 0xd8, 0x04, 0x3c, 0x04, + 0xa2, 0x03, 0x10, 0x03, 0xa0, 0x02, 0x56, 0x02, 0x26, 0x02, 0xcc, 0x01, + 0x70, 0x01, 0x47, 0x01, 0x49, 0x01, 0x6e, 0x01, 0x50, 0x01, 0xf7, 0x00, + 0xba, 0x00, 0x85, 0x00, 0x49, 0x00, 0xed, 0xff, 0x4a, 0xff, 0xb0, 0xfe, + 0x0c, 0xfe, 0x4b, 0xfd, 0x96, 0xfc, 0x04, 0xfc, 0x78, 0xfb, 0xe7, 0xfa, + 0x6d, 0xfa, 0x3b, 0xfa, 0x4b, 0xfa, 0x77, 0xfa, 0xb5, 0xfa, 0x42, 0xfb, + 0x07, 0xfc, 0xeb, 0xfc, 0xeb, 0xfd, 0xe9, 0xfe, 0xed, 0xff, 0x09, 0x01, + 0x10, 0x02, 0xf5, 0x02, 0x87, 0x03, 0xe7, 0x03, 0x50, 0x04, 0x4f, 0x04, + 0x13, 0x04, 0xd7, 0x03, 0x45, 0x03, 0x7c, 0x02, 0x85, 0x01, 0x6c, 0x00, + 0x7d, 0xff, 0x80, 0xfe, 0x7b, 0xfd, 0x50, 0xfc, 0xbc, 0xfa, 0x9d, 0xf9, + 0xcd, 0xf8, 0xd1, 0xf7, 0xf9, 0xf6, 0x99, 0xf5, 0x8d, 0xf4, 0x00, 0xf4, + 0x59, 0xf3, 0x1a, 0xf3, 0xb9, 0xf2, 0xbe, 0xf2, 0x05, 0xf3, 0x28, 0xf3, + 0xa8, 0xf3, 0xac, 0xf4, 0x0d, 0xf6, 0x3b, 0xf7, 0x30, 0xf8, 0x4d, 0xf9, + 0xf4, 0xfa, 0xb1, 0xfc, 0x07, 0xfe, 0x33, 0xff, 0x71, 0x00, 0xa4, 0x01, + 0xaa, 0x02, 0x67, 0x03, 0xf7, 0x03, 0x91, 0x04, 0xfb, 0x04, 0x08, 0x05, + 0x1c, 0x05, 0x30, 0x05, 0x54, 0x05, 0x5a, 0x05, 0x40, 0x05, 0x3c, 0x05, + 0x52, 0x05, 0x92, 0x05, 0xb9, 0x05, 0xe5, 0x05, 0xfa, 0x05, 0x1b, 0x06, + 0x75, 0x06, 0xab, 0x06, 0xa5, 0x06, 0x7b, 0x06, 0x5c, 0x06, 0x49, 0x06, + 0xfe, 0x05, 0x62, 0x05, 0xc5, 0x04, 0x33, 0x04, 0x8a, 0x03, 0xa6, 0x02, + 0x9d, 0x01, 0xba, 0x00, 0x00, 0x00, 0x5f, 0xff, 0xa5, 0xfe, 0xcb, 0xfd, + 0x52, 0xfd, 0x3f, 0xfd, 0x67, 0xfd, 0x83, 0xfd, 0xa3, 0xfd, 0xf4, 0xfd, + 0xaa, 0xfe, 0x8a, 0xff, 0x42, 0x00, 0x25, 0x01, 0xff, 0x01, 0xd9, 0x02, + 0x9e, 0x03, 0x30, 0x04, 0xde, 0x04, 0x67, 0x05, 0xb0, 0x05, 0xd7, 0x05, + 0xbd, 0x05, 0x8a, 0x05, 0x4b, 0x05, 0xfd, 0x04, 0x7a, 0x04, 0x0f, 0x04, + 0x91, 0x03, 0x12, 0x03, 0xb3, 0x02, 0x47, 0x02, 0xea, 0x01, 0xdb, 0x01, + 0xc0, 0x01, 0x94, 0x01, 0x9c, 0x01, 0x81, 0x01, 0x81, 0x01, 0x88, 0x01, + 0x74, 0x01, 0x5c, 0x01, 0x2d, 0x01, 0xc0, 0x00, 0x49, 0x00, 0xc8, 0xff, + 0x36, 0xff, 0xa3, 0xfe, 0xf3, 0xfd, 0x32, 0xfd, 0x8f, 0xfc, 0xe2, 0xfb, + 0x55, 0xfb, 0xfc, 0xfa, 0xdb, 0xfa, 0xd7, 0xfa, 0xe0, 0xfa, 0x19, 0xfb, + 0x97, 0xfb, 0x49, 0xfc, 0x23, 0xfd, 0x16, 0xfe, 0x02, 0xff, 0xe3, 0xff, + 0xdd, 0x00, 0xd5, 0x01, 0x90, 0x02, 0x1d, 0x03, 0x9b, 0x03, 0xe2, 0x03, + 0xe3, 0x03, 0xa5, 0x03, 0x3e, 0x03, 0x93, 0x02, 0xe8, 0x01, 0x37, 0x01, + 0x43, 0x00, 0x22, 0xff, 0xea, 0xfd, 0xe5, 0xfc, 0x08, 0xfc, 0xff, 0xfa, + 0x03, 0xfa, 0xf3, 0xf8, 0xfe, 0xf7, 0x16, 0xf7, 0x43, 0xf6, 0x98, 0xf5, + 0xff, 0xf4, 0x8d, 0xf4, 0xd0, 0xf3, 0x86, 0xf3, 0x9e, 0xf3, 0xd1, 0xf3, + 0x1a, 0xf4, 0x64, 0xf4, 0xfe, 0xf4, 0xfa, 0xf5, 0x1a, 0xf7, 0x22, 0xf8, + 0x29, 0xf9, 0x5b, 0xfa, 0xf1, 0xfb, 0x5c, 0xfd, 0x78, 0xfe, 0x78, 0xff, + 0x82, 0x00, 0xa7, 0x01, 0x9b, 0x02, 0x3f, 0x03, 0xbf, 0x03, 0x3d, 0x04, + 0x69, 0x04, 0x77, 0x04, 0x9f, 0x04, 0xd4, 0x04, 0xff, 0x04, 0xfe, 0x04, + 0xc8, 0x04, 0xba, 0x04, 0xde, 0x04, 0x41, 0x05, 0x82, 0x05, 0x8a, 0x05, + 0x8c, 0x05, 0x96, 0x05, 0xbb, 0x05, 0x0a, 0x06, 0x31, 0x06, 0x19, 0x06, + 0xb7, 0x05, 0x52, 0x05, 0x0f, 0x05, 0xbd, 0x04, 0x30, 0x04, 0x77, 0x03, + 0xad, 0x02, 0xc5, 0x01, 0x18, 0x01, 0x86, 0x00, 0xd4, 0xff, 0x39, 0xff, + 0xaf, 0xfe, 0x45, 0xfe, 0x13, 0xfe, 0x1f, 0xfe, 0x4f, 0xfe, 0x9c, 0xfe, + 0xdc, 0xfe, 0x41, 0xff, 0xec, 0xff, 0xa6, 0x00, 0x71, 0x01, 0x2f, 0x02, + 0xbb, 0x02, 0x44, 0x03, 0xdc, 0x03, 0x64, 0x04, 0xcf, 0x04, 0x1e, 0x05, + 0x1d, 0x05, 0x07, 0x05, 0xf8, 0x04, 0xb4, 0x04, 0x89, 0x04, 0x4b, 0x04, + 0xf6, 0x03, 0x87, 0x03, 0xf6, 0x02, 0x9a, 0x02, 0x70, 0x02, 0x65, 0x02, + 0x28, 0x02, 0xd1, 0x01, 0x96, 0x01, 0x6f, 0x01, 0x5c, 0x01, 0x6d, 0x01, + 0x65, 0x01, 0x29, 0x01, 0xb0, 0x00, 0x63, 0x00, 0x3a, 0x00, 0xd4, 0xff, + 0x6a, 0xff, 0xdc, 0xfe, 0x5a, 0xfe, 0xd4, 0xfd, 0x3a, 0xfd, 0xb1, 0xfc, + 0x54, 0xfc, 0x0d, 0xfc, 0xd6, 0xfb, 0xae, 0xfb, 0x93, 0xfb, 0xab, 0xfb, + 0x10, 0xfc, 0x7e, 0xfc, 0x10, 0xfd, 0xb1, 0xfd, 0x6f, 0xfe, 0x2f, 0xff, + 0xe7, 0xff, 0xab, 0x00, 0x75, 0x01, 0x25, 0x02, 0xbd, 0x02, 0x27, 0x03, + 0x4e, 0x03, 0x5c, 0x03, 0x42, 0x03, 0x02, 0x03, 0xc1, 0x02, 0x23, 0x02, + 0x5b, 0x01, 0x8d, 0x00, 0xad, 0xff, 0xc9, 0xfe, 0x0f, 0xfe, 0x13, 0xfd, + 0x2a, 0xfc, 0x32, 0xfb, 0x49, 0xfa, 0x76, 0xf9, 0x9d, 0xf8, 0xe3, 0xf7, + 0x2f, 0xf7, 0x3f, 0xf6, 0x93, 0xf5, 0x11, 0xf5, 0x83, 0xf4, 0x67, 0xf4, + 0x45, 0xf4, 0x0c, 0xf4, 0x25, 0xf4, 0xa4, 0xf4, 0x25, 0xf5, 0x15, 0xf6, + 0xf2, 0xf6, 0xb7, 0xf7, 0xd9, 0xf8, 0x0c, 0xfa, 0x43, 0xfb, 0xc3, 0xfc, + 0xe8, 0xfd, 0xc8, 0xfe, 0xbc, 0xff, 0xad, 0x00, 0x9d, 0x01, 0x51, 0x02, + 0xcb, 0x02, 0x13, 0x03, 0x36, 0x03, 0x76, 0x03, 0x91, 0x03, 0xc6, 0x03, + 0xe3, 0x03, 0xd8, 0x03, 0xd7, 0x03, 0xeb, 0x03, 0x30, 0x04, 0x66, 0x04, + 0x95, 0x04, 0xcd, 0x04, 0xd8, 0x04, 0x00, 0x05, 0x56, 0x05, 0x68, 0x05, + 0x5d, 0x05, 0x50, 0x05, 0x2c, 0x05, 0x11, 0x05, 0xb3, 0x04, 0x31, 0x04, + 0xbb, 0x03, 0x4c, 0x03, 0xe5, 0x02, 0x42, 0x02, 0x81, 0x01, 0xe3, 0x00, + 0x84, 0x00, 0x31, 0x00, 0xf5, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x92, 0xff, + 0xa1, 0xff, 0xf9, 0xff, 0x77, 0x00, 0xd1, 0x00, 0x47, 0x01, 0xab, 0x01, + 0x09, 0x02, 0x88, 0x02, 0x14, 0x03, 0x85, 0x03, 0xd5, 0x03, 0xea, 0x03, + 0xec, 0x03, 0x11, 0x04, 0x1a, 0x04, 0x1c, 0x04, 0x0b, 0x04, 0xa3, 0x03, + 0x48, 0x03, 0x22, 0x03, 0xf4, 0x02, 0xd4, 0x02, 0x92, 0x02, 0x30, 0x02, + 0xf7, 0x01, 0xea, 0x01, 0xd4, 0x01, 0xd1, 0x01, 0x8f, 0x01, 0x53, 0x01, + 0x44, 0x01, 0x34, 0x01, 0x1b, 0x01, 0xd5, 0x00, 0x67, 0x00, 0x1f, 0x00, + 0xea, 0xff, 0x8e, 0xff, 0x1e, 0xff, 0xa0, 0xfe, 0x39, 0xfe, 0xd8, 0xfd, + 0x75, 0xfd, 0x1f, 0xfd, 0xfc, 0xfc, 0xdc, 0xfc, 0xa5, 0xfc, 0x8c, 0xfc, + 0xbc, 0xfc, 0x1d, 0xfd, 0x78, 0xfd, 0xd7, 0xfd, 0x45, 0xfe, 0xc5, 0xfe, + 0x6e, 0xff, 0x13, 0x00, 0xbd, 0x00, 0x3b, 0x01, 0xbf, 0x01, 0x33, 0x02, + 0x82, 0x02, 0xa0, 0x02, 0xb1, 0x02, 0xb2, 0x02, 0x82, 0x02, 0x24, 0x02, + 0x9c, 0x01, 0x36, 0x01, 0xc3, 0x00, 0x21, 0x00, 0x7a, 0xff, 0xe0, 0xfe, + 0x52, 0xfe, 0xb8, 0xfd, 0x0d, 0xfd, 0x61, 0xfc, 0xda, 0xfb, 0x3b, 0xfb, + 0x65, 0xfa, 0xa1, 0xf9, 0xde, 0xf8, 0x62, 0xf8, 0xa5, 0xf7, 0xbf, 0xf6, + 0xff, 0xf5, 0x35, 0xf5, 0xe7, 0xf4, 0xb9, 0xf4, 0x70, 0xf4, 0x4d, 0xf4, + 0x54, 0xf4, 0x97, 0xf4, 0x5a, 0xf5, 0x2c, 0xf6, 0x29, 0xf7, 0x19, 0xf8, + 0xfe, 0xf8, 0x3d, 0xfa, 0xb7, 0xfb, 0x23, 0xfd, 0x20, 0xfe, 0x1b, 0xff, + 0x1a, 0x00, 0x0d, 0x01, 0xe4, 0x01, 0x72, 0x02, 0xe0, 0x02, 0x3a, 0x03, + 0x5d, 0x03, 0x6b, 0x03, 0x70, 0x03, 0x99, 0x03, 0xad, 0x03, 0x98, 0x03, + 0x81, 0x03, 0x86, 0x03, 0xcf, 0x03, 0x11, 0x04, 0x29, 0x04, 0x37, 0x04, + 0x68, 0x04, 0xa3, 0x04, 0xeb, 0x04, 0xd9, 0x04, 0xbf, 0x04, 0xf5, 0x04, + 0xf4, 0x04, 0xa3, 0x04, 0x3c, 0x04, 0xea, 0x03, 0xbb, 0x03, 0x8a, 0x03, + 0xdd, 0x02, 0x4d, 0x02, 0xf4, 0x01, 0x82, 0x01, 0x27, 0x01, 0xd9, 0x00, + 0x88, 0x00, 0x81, 0x00, 0x6c, 0x00, 0x57, 0x00, 0x4d, 0x00, 0x9c, 0x00, + 0x02, 0x01, 0x50, 0x01, 0xba, 0x01, 0x01, 0x02, 0x58, 0x02, 0xd7, 0x02, + 0x40, 0x03, 0x94, 0x03, 0xf2, 0x03, 0x1b, 0x04, 0x0f, 0x04, 0x12, 0x04, + 0x10, 0x04, 0x0c, 0x04, 0xf8, 0x03, 0x93, 0x03, 0x4b, 0x03, 0xff, 0x02, + 0xb5, 0x02, 0x87, 0x02, 0x4d, 0x02, 0xf7, 0x01, 0xd6, 0x01, 0x9b, 0x01, + 0x60, 0x01, 0x46, 0x01, 0x30, 0x01, 0x24, 0x01, 0x05, 0x01, 0xbe, 0x00, + 0x76, 0x00, 0x63, 0x00, 0x3e, 0x00, 0x08, 0x00, 0xa7, 0xff, 0x5d, 0xff, + 0x16, 0xff, 0xae, 0xfe, 0x4e, 0xfe, 0x1a, 0xfe, 0x17, 0xfe, 0xec, 0xfd, + 0xa9, 0xfd, 0x81, 0xfd, 0x61, 0xfd, 0x9d, 0xfd, 0x00, 0xfe, 0x51, 0xfe, + 0x99, 0xfe, 0xc6, 0xfe, 0x16, 0xff, 0x8e, 0xff, 0x16, 0x00, 0xa9, 0x00, + 0x1b, 0x01, 0x5e, 0x01, 0x97, 0x01, 0xb8, 0x01, 0xb7, 0x01, 0xc0, 0x01, + 0xcb, 0x01, 0xab, 0x01, 0x5a, 0x01, 0xc8, 0x00, 0x57, 0x00, 0x1b, 0x00, + 0xd1, 0xff, 0x7f, 0xff, 0x1f, 0xff, 0x80, 0xfe, 0xd9, 0xfd, 0x65, 0xfd, + 0xf6, 0xfc, 0x87, 0xfc, 0x0e, 0xfc, 0x8e, 0xfb, 0xa7, 0xfa, 0xcc, 0xf9, + 0x44, 0xf9, 0xb5, 0xf8, 0x28, 0xf8, 0x9c, 0xf7, 0xf6, 0xf6, 0x1b, 0xf6, + 0xd0, 0xf5, 0x79, 0xf5, 0x77, 0xf5, 0x68, 0xf5, 0xb3, 0xf5, 0xe7, 0xf5, + 0x61, 0xf6, 0xbe, 0xf6, 0x74, 0xf7, 0xc2, 0xf8, 0xda, 0xf9, 0xec, 0xfa, + 0xc2, 0xfb, 0xa1, 0xfc, 0xa0, 0xfd, 0x06, 0xff, 0xed, 0xff, 0xb6, 0x00, + 0x43, 0x01, 0xb0, 0x01, 0x02, 0x02, 0x54, 0x02, 0xbf, 0x02, 0xbd, 0x02, + 0xbf, 0x02, 0xa2, 0x02, 0x8b, 0x02, 0x9c, 0x02, 0xbe, 0x02, 0xd3, 0x02, + 0xb4, 0x02, 0xb8, 0x02, 0x0b, 0x03, 0x7f, 0x03, 0xc5, 0x03, 0xd3, 0x03, + 0xbf, 0x03, 0x1f, 0x04, 0x8f, 0x04, 0xde, 0x04, 0xc0, 0x04, 0xa3, 0x04, + 0x67, 0x04, 0x3b, 0x04, 0x2b, 0x04, 0xf0, 0x03, 0x82, 0x03, 0x09, 0x03, + 0x97, 0x02, 0x21, 0x02, 0xa2, 0x01, 0x73, 0x01, 0x5a, 0x01, 0x14, 0x01, + 0xe9, 0x00, 0xd0, 0x00, 0xeb, 0x00, 0x31, 0x01, 0x9b, 0x01, 0xe4, 0x01, + 0x2e, 0x02, 0x8a, 0x02, 0xcc, 0x02, 0x3f, 0x03, 0xde, 0x03, 0xed, 0x03, + 0xde, 0x03, 0xcf, 0x03, 0xcb, 0x03, 0xf2, 0x03, 0xae, 0x03, 0x34, 0x03, + 0xbb, 0x02, 0x42, 0x02, 0xff, 0x01, 0xb9, 0x01, 0x70, 0x01, 0x07, 0x01, + 0xbc, 0x00, 0x8c, 0x00, 0x81, 0x00, 0x85, 0x00, 0x8d, 0x00, 0xcd, 0x00, + 0xdd, 0x00, 0xe0, 0x00, 0xc1, 0x00, 0xcb, 0x00, 0x02, 0x01, 0x2d, 0x01, + 0xe7, 0x00, 0xad, 0x00, 0x59, 0x00, 0x39, 0x00, 0x01, 0x00, 0x80, 0xff, + 0x29, 0xff, 0x0f, 0xff, 0x23, 0xff, 0xe4, 0xfe, 0x5e, 0xfe, 0x2a, 0xfe, + 0x49, 0xfe, 0xbf, 0xfe, 0x3c, 0xff, 0x58, 0xff, 0x6a, 0xff, 0x8a, 0xff, + 0xed, 0xff, 0x6d, 0x00, 0xe2, 0x00, 0x4c, 0x01, 0x7d, 0x01, 0x7a, 0x01, + 0x69, 0x01, 0x5e, 0x01, 0x86, 0x01, 0xa5, 0x01, 0x86, 0x01, 0x44, 0x01, + 0xbe, 0x00, 0x4f, 0x00, 0x15, 0x00, 0x0f, 0x00, 0xfe, 0xff, 0xaa, 0xff, + 0x73, 0xff, 0xd2, 0xfe, 0x88, 0xfe, 0x53, 0xfe, 0x46, 0xfe, 0x14, 0xfe, + 0xaf, 0xfd, 0x0a, 0xfd, 0x62, 0xfc, 0x20, 0xfc, 0xd7, 0xfb, 0x61, 0xfb, + 0xc8, 0xfa, 0xeb, 0xf9, 0x6d, 0xf9, 0x0c, 0xf9, 0xbc, 0xf8, 0x5e, 0xf8, + 0xda, 0xf7, 0x96, 0xf7, 0x76, 0xf7, 0x89, 0xf7, 0x95, 0xf7, 0x9d, 0xf7, + 0x07, 0xf8, 0x49, 0xf8, 0xb5, 0xf8, 0x64, 0xf9, 0xfb, 0xf9, 0xc5, 0xfa, + 0x7e, 0xfb, 0x27, 0xfc, 0xc5, 0xfc, 0x4c, 0xfd, 0x06, 0xfe, 0x9d, 0xfe, + 0x47, 0xff, 0xc5, 0xff, 0xe8, 0xff, 0x2c, 0x00, 0xa2, 0x00, 0x09, 0x01, + 0x3d, 0x01, 0x33, 0x01, 0x3b, 0x01, 0x79, 0x01, 0xaf, 0x01, 0xd0, 0x01, + 0xc4, 0x01, 0xef, 0x01, 0x42, 0x02, 0xa3, 0x02, 0xb1, 0x02, 0xba, 0x02, + 0xf3, 0x02, 0x2f, 0x03, 0x5a, 0x03, 0x85, 0x03, 0x9d, 0x03, 0x64, 0x03, + 0x3d, 0x03, 0x41, 0x03, 0x59, 0x03, 0x65, 0x03, 0x31, 0x03, 0xd1, 0x02, + 0x6e, 0x02, 0x80, 0x02, 0x8f, 0x02, 0x83, 0x02, 0x43, 0x02, 0x14, 0x02, + 0xeb, 0x01, 0xe9, 0x01, 0x0b, 0x02, 0x21, 0x02, 0x1e, 0x02, 0x1f, 0x02, + 0x16, 0x02, 0x2b, 0x02, 0x56, 0x02, 0x79, 0x02, 0x6f, 0x02, 0x62, 0x02, + 0x70, 0x02, 0x73, 0x02, 0x6c, 0x02, 0x64, 0x02, 0x52, 0x02, 0x41, 0x02, + 0x54, 0x02, 0x3a, 0x02, 0x37, 0x02, 0x3b, 0x02, 0x21, 0x02, 0x2f, 0x02, + 0x22, 0x02, 0x19, 0x02, 0x22, 0x02, 0x09, 0x02, 0xe5, 0x01, 0xe7, 0x01, + 0xc2, 0x01, 0xa7, 0x01, 0x97, 0x01, 0x7a, 0x01, 0x66, 0x01, 0x33, 0x01, + 0x12, 0x01, 0xe2, 0x00, 0xe4, 0x00, 0xd8, 0x00, 0x8e, 0x00, 0x6c, 0x00, + 0x73, 0x00, 0x71, 0x00, 0x4e, 0x00, 0x44, 0x00, 0x47, 0x00, 0x1d, 0x00, + 0x0c, 0x00, 0x10, 0x00, 0x26, 0x00, 0x1d, 0x00, 0x0a, 0x00, 0xfa, 0xff, + 0x07, 0x00, 0x0b, 0x00, 0x14, 0x00, 0x0b, 0x00, 0x37, 0x00, 0x62, 0x00, + 0x55, 0x00, 0x64, 0x00, 0x58, 0x00, 0x9e, 0x00, 0xbf, 0x00, 0xcd, 0x00, + 0xca, 0x00, 0xb0, 0x00, 0xc4, 0x00, 0x9f, 0x00, 0x88, 0x00, 0x81, 0x00, + 0x4f, 0x00, 0xe5, 0xff, 0x5f, 0xff, 0x04, 0xff, 0xd5, 0xfe, 0xab, 0xfe, + 0x70, 0xfe, 0xfa, 0xfd, 0x88, 0xfd, 0xb2, 0xfd, 0xb9, 0xfd, 0xa1, 0xfd, + 0x90, 0xfd, 0x5b, 0xfd, 0x5f, 0xfd, 0x0c, 0xfd, 0x23, 0xfd, 0xe8, 0xfc, + 0x87, 0xfc, 0x2b, 0xfc, 0xa4, 0xfb, 0x5e, 0xfb, 0x3c, 0xfb, 0xe6, 0xfa, + 0x58, 0xfa, 0x0b, 0xfa, 0xe5, 0xf9, 0xdb, 0xf9, 0xe0, 0xf9, 0xde, 0xf9, + 0x05, 0xfa, 0x54, 0xfa, 0x93, 0xfa, 0x06, 0xfb, 0x61, 0xfb, 0xad, 0xfb, + 0x00, 0xfc, 0x64, 0xfc, 0xc8, 0xfc, 0xd2, 0xfc, 0x02, 0xfd, 0x71, 0xfd, + 0xaf, 0xfd, 0xc0, 0xfd, 0xa2, 0xfd, 0x83, 0xfd, 0xaf, 0xfd, 0x1f, 0xfe, + 0x2f, 0xfe, 0x15, 0xfe, 0x36, 0xfe, 0x87, 0xfe, 0xea, 0xfe, 0x74, 0xff, + 0xd5, 0xff, 0x47, 0x00, 0x75, 0x00, 0xfd, 0x00, 0x8c, 0x01, 0xd1, 0x01, + 0x70, 0x02, 0x99, 0x02, 0x80, 0x02, 0x97, 0x02, 0xc4, 0x02, 0xda, 0x02, + 0xc9, 0x02, 0xa8, 0x02, 0x89, 0x02, 0x84, 0x02, 0x52, 0x02, 0x16, 0x02, + 0x28, 0x02, 0x42, 0x02, 0x3d, 0x02, 0x30, 0x02, 0x1f, 0x02, 0x2b, 0x02, + 0x56, 0x02, 0x67, 0x02, 0x6e, 0x02, 0x89, 0x02, 0xc9, 0x02, 0xc5, 0x02, + 0xa6, 0x02, 0xc4, 0x02, 0xc1, 0x02, 0xc7, 0x02, 0x98, 0x02, 0x86, 0x02, + 0x60, 0x02, 0x56, 0x02, 0x2b, 0x02, 0x0f, 0x02, 0xf3, 0x01, 0xd0, 0x01, + 0xd4, 0x01, 0xad, 0x01, 0x96, 0x01, 0xbc, 0x01, 0xad, 0x01, 0x9f, 0x01, + 0xc4, 0x01, 0xf7, 0x01, 0x1a, 0x02, 0x35, 0x02, 0x14, 0x02, 0x17, 0x02, + 0x28, 0x02, 0x1f, 0x02, 0x07, 0x02, 0xcf, 0x01, 0x91, 0x01, 0x5c, 0x01, + 0x45, 0x01, 0x09, 0x01, 0xd8, 0x00, 0xa1, 0x00, 0x80, 0x00, 0x60, 0x00, + 0x3b, 0x00, 0x22, 0x00, 0x12, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, + 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xfe, 0xff, 0xfd, 0xff, 0xfc, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf9, 0xff, + 0xf8, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf8, 0xff, 0xf8, 0xff, + 0xf9, 0xff, 0xf9, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfb, 0xff, + 0xfb, 0xff, 0xfa, 0xff, 0xf9, 0xff, 0xf8, 0xff, 0xf7, 0xff, 0xf7, 0xff, + 0xf6, 0xff, 0xf3, 0xff, 0xf3, 0xff, 0xf3, 0xff, 0xf5, 0xff, 0xf5, 0xff, + 0xf5, 0xff, 0xf6, 0xff, 0xf7, 0xff, 0xf8, 0xff, 0xfa, 0xff, 0xfa, 0xff, + 0xfb, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfd, 0xff, 0xfc, 0xff, 0xfc, 0xff, + 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0xfb, 0xff, + 0xfc, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, + 0x06, 0x00, 0x06, 0x00, 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x07, 0x00, 0x08, 0x00, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, + 0x0a, 0x00, 0x0a, 0x00, 0x09, 0x00, 0x09, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x07, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, + 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x06, 0x00, 0x05, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, + 0xfd, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, + 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfd, 0xff, + 0xfc, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xf9, 0xff, 0xf9, 0xff, + 0xf8, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf8, 0xff, 0xf8, 0xff, + 0xf8, 0xff, 0xf8, 0xff, 0xf9, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, + 0xfa, 0xff, 0xfa, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xf8, 0xff, + 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, + 0xf9, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfb, 0xff, + 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, + 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfc, 0xff, 0xfd, 0xff, 0xfd, 0xff, + 0xfd, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfd, 0xff, + 0xfe, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfe, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x06, 0x00, + 0x05, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x05, 0x00, 0x05, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, + 0x07, 0x00, 0x07, 0x00, 0x08, 0x00, 0x08, 0x00, 0x09, 0x00, 0x09, 0x00, + 0x0a, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, + 0x0c, 0x00, 0x0d, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0b, 0x00, 0x0b, 0x00, + 0x0b, 0x00, 0x0b, 0x00, 0x0a, 0x00, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, + 0x0a, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x0a, 0x00, + 0x0a, 0x00, 0x0a, 0x00, 0x09, 0x00, 0x08, 0x00, 0x07, 0x00, 0x07, 0x00, + 0x06, 0x00, 0x06, 0x00, 0x05, 0x00, 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xfe, 0xff, 0xfd, 0xff, 0xfc, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, + 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfc, 0xff, + 0xfd, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, + 0xfb, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf9, 0xff, 0xf9, 0xff, + 0xf9, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xf9, 0xff, + 0xf9, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xfa, 0xff, 0xf9, 0xff, + 0xf9, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfb, 0xff, + 0xfb, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfa, 0xff, + 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xf9, 0xff, + 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfc, 0xff, + 0xfd, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xfd, 0xff, + 0xfd, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, + 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x05, 0x00, + 0x05, 0x00, 0x07, 0x00, 0x07, 0x00, 0x08, 0x00, 0x09, 0x00, 0x09, 0x00, + 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, 0x08, 0x00, 0x07, 0x00, + 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x08, 0x00, + 0x08, 0x00, 0x09, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x0a, 0x00, + 0x0a, 0x00, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, 0x08, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x09, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, + 0x06, 0x00, 0x05, 0x00, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, + 0xfd, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, + 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, + 0xfd, 0xff, 0xfd, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, + 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, + 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfc, 0xff, 0xfc, 0xff, + 0xfb, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf9, 0xff, 0xf9, 0xff, + 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfc, 0xff, 0xfc, 0xff, + 0xfc, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, + 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, + 0xfb, 0xff, 0xfb, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfd, 0xff, 0xfd, 0xff, + 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 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, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x05, 0x00, 0x05, 0x00, + 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, + 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x01, 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, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, + 0xfe, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfe, 0xff, + 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, + 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xfd, 0xff, + 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfe, 0xff, + 0xfe, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xfe, 0xff, + 0xfe, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, + 0xfe, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xfe, 0xff, + 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 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, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 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, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 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, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 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, 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, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 +}; +uint32_t right_channel_bin_len = 46390; +uint8_t left_channel_bin[] = { + 0x52, 0x49, 0x46, 0x46, 0x2a, 0xba, 0x00, 0x00, 0x57, 0x41, 0x56, 0x45, + 0x66, 0x6d, 0x74, 0x20, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, + 0xc0, 0x5d, 0x00, 0x00, 0x80, 0xbb, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, + 0x64, 0x61, 0x74, 0x61, 0x06, 0xba, 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, 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, + 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, 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, 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, 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, + 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfe, 0xff, 0xfb, 0xff, 0xf9, 0xff, 0xf6, 0xff, 0xee, 0xff, 0xed, 0xff, + 0xec, 0xff, 0xed, 0xff, 0xec, 0xff, 0xed, 0xff, 0xef, 0xff, 0xf3, 0xff, + 0x01, 0x00, 0x04, 0x00, 0xe8, 0xff, 0xf6, 0xff, 0x08, 0x00, 0x06, 0x00, + 0x09, 0x00, 0x10, 0x00, 0x39, 0x00, 0x5c, 0x00, 0x6e, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x88, 0x00, 0x80, 0x00, 0x70, 0x00, 0x78, 0x00, 0xab, 0x00, + 0xa1, 0x00, 0xa9, 0x00, 0xab, 0x00, 0xe1, 0x00, 0x21, 0x01, 0x3c, 0x01, + 0x3a, 0x01, 0x3f, 0x01, 0x55, 0x01, 0x88, 0x01, 0xe4, 0x01, 0x02, 0x02, + 0xeb, 0x01, 0xef, 0x01, 0x1c, 0x02, 0x1a, 0x02, 0x3d, 0x02, 0x45, 0x02, + 0x3f, 0x02, 0x1e, 0x02, 0x1b, 0x02, 0x5d, 0x02, 0xb7, 0x02, 0x3c, 0x03, + 0x01, 0x03, 0x31, 0x03, 0x5e, 0x03, 0x47, 0x03, 0x8d, 0x03, 0xf2, 0x03, + 0xe4, 0x03, 0xc7, 0x03, 0x2d, 0x03, 0x32, 0x03, 0xba, 0x03, 0x3e, 0x03, + 0xb3, 0x02, 0x54, 0x02, 0x14, 0x02, 0xd5, 0x01, 0x4e, 0x01, 0xcc, 0x00, + 0xee, 0xff, 0xeb, 0xfe, 0x97, 0xfe, 0x08, 0xfe, 0x83, 0xfd, 0xe7, 0xfc, + 0x52, 0xfc, 0x0b, 0xfc, 0x78, 0xfc, 0xc0, 0xfb, 0xe2, 0xfa, 0x3a, 0xfb, + 0x57, 0xfb, 0x07, 0xfb, 0x9b, 0xfa, 0x09, 0xfa, 0x18, 0xfa, 0xee, 0xfa, + 0xb7, 0xfa, 0x1e, 0xfa, 0x4e, 0xf9, 0x39, 0xf9, 0x7d, 0xf9, 0x21, 0xfa, + 0xcb, 0xfa, 0x9e, 0xfa, 0xa1, 0xfa, 0x92, 0xfa, 0x52, 0xfb, 0x8e, 0xfb, + 0xa4, 0xfb, 0x5e, 0xfb, 0x03, 0xfc, 0x0c, 0xfd, 0xc3, 0xfd, 0xfe, 0xfd, + 0xda, 0xfd, 0x6e, 0xfe, 0x1d, 0xff, 0xf6, 0xff, 0x02, 0x00, 0xfc, 0xff, + 0x4b, 0x00, 0xcc, 0x00, 0x40, 0x01, 0x87, 0x01, 0xf0, 0x01, 0x2e, 0x02, + 0xf6, 0x02, 0x78, 0x03, 0xa4, 0x03, 0x3f, 0x04, 0x8f, 0x04, 0xdf, 0x04, + 0x11, 0x05, 0x97, 0x04, 0x05, 0x05, 0x57, 0x05, 0xae, 0x05, 0xb2, 0x05, + 0x84, 0x05, 0xc2, 0x05, 0x86, 0x05, 0x9f, 0x05, 0xfb, 0x05, 0x0e, 0x06, + 0x10, 0x06, 0xec, 0x05, 0xc4, 0x05, 0xc1, 0x05, 0xa1, 0x05, 0xa2, 0x06, + 0xba, 0x06, 0xbd, 0x05, 0xe9, 0x05, 0xf0, 0x05, 0x9a, 0x06, 0xfd, 0x06, + 0x45, 0x06, 0x3b, 0x06, 0x8d, 0x05, 0x69, 0x05, 0x8e, 0x05, 0x09, 0x05, + 0xbd, 0x04, 0x5f, 0x04, 0xcd, 0x03, 0xd7, 0x03, 0x74, 0x03, 0x81, 0x02, + 0x6e, 0x01, 0x21, 0x00, 0x1a, 0xff, 0xe3, 0xfe, 0x4b, 0xfe, 0x3f, 0xfd, + 0xc3, 0xfb, 0x0d, 0xfb, 0x8a, 0xf9, 0x15, 0xf8, 0x6a, 0xf7, 0x92, 0xf7, + 0xb3, 0xf7, 0xe6, 0xf7, 0xc3, 0xf6, 0xce, 0xf5, 0xc4, 0xf5, 0xe1, 0xf5, + 0xdd, 0xf5, 0x0e, 0xf5, 0xa4, 0xf4, 0xe5, 0xf4, 0xe9, 0xf4, 0x60, 0xf4, + 0xac, 0xf4, 0xba, 0xf4, 0xb2, 0xf5, 0xad, 0xf6, 0xf7, 0xf6, 0x4a, 0xf7, + 0x63, 0xf7, 0xad, 0xf7, 0xe4, 0xf8, 0x89, 0xf9, 0xc0, 0xf9, 0x80, 0xfa, + 0x93, 0xfb, 0xac, 0xfc, 0xae, 0xfd, 0x51, 0xfe, 0xf3, 0xfe, 0x91, 0x00, + 0x12, 0x02, 0x4a, 0x03, 0x60, 0x03, 0x84, 0x03, 0x6a, 0x04, 0xdd, 0x04, + 0xa3, 0x05, 0x45, 0x06, 0xeb, 0x06, 0xd6, 0x07, 0x74, 0x08, 0xaa, 0x08, + 0xdd, 0x08, 0x17, 0x09, 0xb8, 0x09, 0x27, 0x0a, 0x60, 0x0a, 0x7e, 0x0a, + 0xff, 0x0a, 0x18, 0x0b, 0x08, 0x0b, 0x3a, 0x0b, 0x97, 0x0b, 0xfe, 0x0b, + 0xd7, 0x0b, 0x1c, 0x0b, 0xc8, 0x0a, 0x85, 0x0a, 0x4f, 0x0a, 0x8c, 0x0a, + 0x4a, 0x0a, 0xc0, 0x09, 0x80, 0x09, 0xf5, 0x08, 0xc0, 0x08, 0xe4, 0x08, + 0x10, 0x08, 0x4a, 0x06, 0x89, 0x05, 0x51, 0x05, 0x7a, 0x04, 0xd6, 0x02, + 0x2a, 0x01, 0x5d, 0x00, 0x20, 0x00, 0xb6, 0xff, 0x24, 0xfe, 0xc6, 0xfa, + 0x8e, 0xf9, 0xfc, 0xf9, 0xe8, 0xf9, 0x67, 0xf8, 0x84, 0xf5, 0x67, 0xf5, + 0xc7, 0xf6, 0x4c, 0xf6, 0xb9, 0xf5, 0x47, 0xf4, 0x12, 0xf3, 0xa4, 0xf3, + 0xdd, 0xf3, 0x8f, 0xf3, 0x5f, 0xf2, 0x14, 0xf1, 0xa3, 0xf0, 0xb7, 0xf0, + 0xa1, 0xf1, 0x89, 0xf2, 0x7a, 0xf2, 0xa5, 0xf2, 0xea, 0xf2, 0xa1, 0xf3, + 0x5d, 0xf4, 0x01, 0xf5, 0x7a, 0xf5, 0x8a, 0xf5, 0x03, 0xf6, 0x4e, 0xf7, + 0xe7, 0xf8, 0x41, 0xf9, 0xa7, 0xf9, 0x0b, 0xfb, 0x03, 0xfd, 0x2f, 0xff, + 0x30, 0x00, 0xfd, 0x00, 0x2c, 0x01, 0xf8, 0x01, 0xa2, 0x03, 0xa6, 0x04, + 0x55, 0x05, 0xaa, 0x05, 0x00, 0x07, 0x3f, 0x08, 0xd0, 0x08, 0xb4, 0x09, + 0x30, 0x0a, 0xbc, 0x0a, 0xf0, 0x0b, 0x24, 0x0c, 0xe7, 0x0b, 0x00, 0x0c, + 0x7a, 0x0c, 0x30, 0x0d, 0xe2, 0x0c, 0x01, 0x0d, 0x4a, 0x0d, 0x9f, 0x0d, + 0xa8, 0x0d, 0x36, 0x0d, 0x0c, 0x0d, 0x97, 0x0c, 0xad, 0x0c, 0xce, 0x0c, + 0xe5, 0x0b, 0xb0, 0x0b, 0x59, 0x0b, 0xe7, 0x0a, 0xc0, 0x0a, 0x38, 0x0a, + 0xb0, 0x09, 0x08, 0x09, 0xbe, 0x08, 0x6d, 0x08, 0xf0, 0x06, 0xbf, 0x05, + 0xd7, 0x04, 0x0d, 0x05, 0x20, 0x04, 0xe4, 0x02, 0x00, 0x02, 0x35, 0x00, + 0xd0, 0xfd, 0x28, 0xfd, 0x2d, 0xfc, 0x24, 0xfa, 0xc7, 0xf8, 0xde, 0xf6, + 0x2c, 0xf6, 0x5d, 0xf6, 0x74, 0xf5, 0x3f, 0xf5, 0x33, 0xf4, 0xb4, 0xf2, + 0xf9, 0xf2, 0xe3, 0xf2, 0xd6, 0xf2, 0x04, 0xf2, 0xf9, 0xef, 0xf7, 0xee, + 0xc8, 0xef, 0x12, 0xf1, 0x74, 0xf0, 0xbf, 0xee, 0x3c, 0xf0, 0x79, 0xf1, + 0x40, 0xf1, 0x5c, 0xf1, 0xd9, 0xf1, 0xf3, 0xf2, 0xdf, 0xf3, 0xcf, 0xf3, + 0xcb, 0xf3, 0x90, 0xf4, 0x9f, 0xf5, 0x5c, 0xf7, 0x3c, 0xf9, 0x02, 0xfa, + 0x60, 0xfb, 0xcc, 0xfc, 0x7d, 0xfe, 0x11, 0x00, 0x3e, 0x01, 0x67, 0x02, + 0x33, 0x03, 0xbf, 0x04, 0x4a, 0x06, 0x2d, 0x07, 0x49, 0x08, 0x43, 0x09, + 0xb9, 0x0a, 0x54, 0x0c, 0x23, 0x0d, 0xc0, 0x0d, 0x6a, 0x0e, 0x0d, 0x0f, + 0x1c, 0x0f, 0x48, 0x0f, 0x62, 0x0f, 0xcb, 0x0e, 0xfb, 0x0e, 0x83, 0x0f, + 0x99, 0x0f, 0x48, 0x0f, 0x30, 0x0f, 0x28, 0x0f, 0x02, 0x0f, 0x6f, 0x0e, + 0xb5, 0x0d, 0x78, 0x0c, 0xd0, 0x0b, 0x34, 0x0b, 0xc1, 0x0a, 0x18, 0x0a, + 0x12, 0x09, 0x5b, 0x08, 0x8d, 0x07, 0x72, 0x06, 0x17, 0x05, 0xf9, 0x03, + 0xae, 0x03, 0xcf, 0x02, 0xd0, 0x00, 0xf5, 0xfe, 0x4c, 0xfe, 0xb3, 0xfd, + 0x1b, 0xfd, 0x63, 0xfb, 0x9a, 0xf7, 0x62, 0xf6, 0xd7, 0xf7, 0xc8, 0xf7, + 0x15, 0xf6, 0x6e, 0xf4, 0x22, 0xf3, 0x5f, 0xf3, 0xb8, 0xf3, 0xe3, 0xf2, + 0x15, 0xf2, 0x3c, 0xf2, 0x19, 0xf1, 0x8c, 0xf1, 0x98, 0xf1, 0x65, 0xef, + 0xfc, 0xef, 0x7b, 0xf0, 0x76, 0xf1, 0xac, 0xf2, 0x59, 0xf2, 0xb7, 0xf1, + 0x9e, 0xf2, 0xda, 0xf3, 0x33, 0xf4, 0xca, 0xf4, 0x9d, 0xf4, 0x16, 0xf5, + 0x21, 0xf6, 0x9e, 0xf7, 0xfd, 0xf7, 0xb8, 0xf8, 0x85, 0xfa, 0x31, 0xfc, + 0x01, 0xfe, 0x32, 0xff, 0x49, 0x00, 0x8e, 0x01, 0x75, 0x02, 0x74, 0x03, + 0xa8, 0x04, 0x59, 0x05, 0xaa, 0x06, 0xf9, 0x07, 0x16, 0x09, 0x55, 0x0a, + 0x5a, 0x0b, 0xa9, 0x0c, 0x2c, 0x0d, 0xee, 0x0d, 0x32, 0x0e, 0x64, 0x0e, + 0xa0, 0x0e, 0x40, 0x0e, 0xb2, 0x0e, 0x9e, 0x0e, 0xfa, 0x0d, 0xed, 0x0d, + 0x2e, 0x0e, 0xf5, 0x0e, 0xe1, 0x0e, 0xd1, 0x0d, 0xda, 0x0c, 0x96, 0x0c, + 0xa2, 0x0c, 0xd7, 0x0b, 0xaf, 0x0a, 0xdd, 0x09, 0x7e, 0x09, 0x19, 0x09, + 0x23, 0x08, 0x0d, 0x07, 0xb5, 0x06, 0xea, 0x06, 0x21, 0x06, 0x62, 0x04, + 0x92, 0x02, 0x6d, 0x01, 0xee, 0x00, 0x2b, 0x00, 0x62, 0xfe, 0x5a, 0xfc, + 0xeb, 0xfa, 0x63, 0xfa, 0xb5, 0xf9, 0xd0, 0xf7, 0xad, 0xf5, 0xaf, 0xf4, + 0x16, 0xf5, 0x35, 0xf5, 0xf6, 0xf3, 0xc7, 0xf2, 0xea, 0xf1, 0x5b, 0xf2, + 0xf7, 0xf2, 0x8c, 0xf3, 0xc3, 0xf1, 0x53, 0xef, 0xc9, 0xef, 0x79, 0xf0, + 0xc7, 0xf0, 0xbb, 0xf0, 0xfa, 0xef, 0x94, 0xef, 0xae, 0xf0, 0x3b, 0xf2, + 0x3e, 0xf3, 0xe9, 0xf2, 0x05, 0xf3, 0xc9, 0xf3, 0xa7, 0xf4, 0x79, 0xf4, + 0xe6, 0xf4, 0x56, 0xf6, 0xe7, 0xf7, 0x8c, 0xf9, 0xcd, 0xfa, 0x59, 0xfb, + 0x4d, 0xfd, 0xd8, 0xff, 0x8d, 0x01, 0x16, 0x02, 0xdf, 0x02, 0x3f, 0x04, + 0xf0, 0x05, 0x71, 0x07, 0xc6, 0x07, 0x1b, 0x09, 0xa0, 0x0a, 0xd1, 0x0b, + 0x15, 0x0d, 0x6b, 0x0d, 0x4d, 0x0e, 0x59, 0x0f, 0x33, 0x10, 0xe5, 0x0f, + 0x4d, 0x0f, 0x1e, 0x10, 0x0d, 0x11, 0x52, 0x11, 0x90, 0x11, 0xf1, 0x10, + 0xf2, 0x0f, 0x95, 0x0f, 0x45, 0x10, 0x25, 0x10, 0x78, 0x0e, 0xf8, 0x0c, + 0x90, 0x0c, 0x34, 0x0c, 0x80, 0x0b, 0x40, 0x0a, 0xee, 0x08, 0x5d, 0x08, + 0x2e, 0x08, 0x32, 0x07, 0x55, 0x05, 0xdc, 0x03, 0x14, 0x03, 0x6e, 0x02, + 0x5c, 0x00, 0x05, 0xfe, 0x32, 0xfc, 0xe6, 0xfb, 0x39, 0xfb, 0x73, 0xf9, + 0x14, 0xf7, 0xbe, 0xf4, 0x88, 0xf4, 0x5d, 0xf4, 0xfb, 0xf3, 0x1b, 0xf3, + 0xa8, 0xf1, 0x3b, 0xf2, 0x5c, 0xf2, 0x18, 0xf2, 0x2e, 0xf1, 0x97, 0xef, + 0xd2, 0xef, 0x8c, 0xf0, 0x3c, 0xef, 0xd8, 0xed, 0x69, 0xed, 0xc5, 0xee, + 0x19, 0xf0, 0x67, 0xf0, 0xa4, 0xef, 0x08, 0xf0, 0x46, 0xf1, 0x7b, 0xf2, + 0x83, 0xf2, 0x6e, 0xf2, 0x99, 0xf2, 0x60, 0xf4, 0xf2, 0xf5, 0xd2, 0xf5, + 0x34, 0xf6, 0xfc, 0xf7, 0x89, 0xfa, 0x07, 0xfd, 0x6e, 0xfe, 0xec, 0xfe, + 0xaa, 0xff, 0xb4, 0x00, 0xf7, 0x02, 0x54, 0x04, 0x49, 0x05, 0xe2, 0x05, + 0xdc, 0x06, 0xb3, 0x08, 0x46, 0x0a, 0xf6, 0x0b, 0x58, 0x0d, 0xff, 0x0d, + 0x86, 0x0f, 0x67, 0x10, 0x62, 0x10, 0xab, 0x0f, 0xdd, 0x0f, 0x00, 0x11, + 0x03, 0x12, 0x50, 0x12, 0xd7, 0x11, 0xb9, 0x11, 0x53, 0x12, 0x99, 0x12, + 0xd9, 0x12, 0x53, 0x11, 0x4a, 0x0f, 0x97, 0x0e, 0x47, 0x0e, 0x7b, 0x0d, + 0x07, 0x0c, 0xdd, 0x0a, 0xfe, 0x09, 0x9c, 0x09, 0x00, 0x09, 0x09, 0x08, + 0xfc, 0x06, 0xa6, 0x05, 0xdd, 0x03, 0xfd, 0x01, 0x55, 0x00, 0x0d, 0xff, + 0x05, 0xfe, 0x91, 0xfc, 0x46, 0xfb, 0x79, 0xf9, 0x92, 0xf7, 0x52, 0xf6, + 0xaa, 0xf4, 0xd8, 0xf3, 0x8d, 0xf3, 0xe6, 0xf2, 0xb4, 0xf1, 0xc5, 0xf0, + 0xc6, 0xf0, 0xd8, 0xf0, 0x1a, 0xf1, 0xc7, 0xf0, 0x47, 0xef, 0xf7, 0xee, + 0xc7, 0xee, 0x47, 0xee, 0x83, 0xee, 0x8a, 0xed, 0x7f, 0xee, 0x57, 0xef, + 0x94, 0xef, 0x4b, 0xf0, 0x5e, 0xf0, 0xc4, 0xf1, 0x7c, 0xf2, 0xbc, 0xf1, + 0x90, 0xf2, 0x1b, 0xf4, 0x00, 0xf5, 0x56, 0xf6, 0xa1, 0xf6, 0x54, 0xf7, + 0x66, 0xf9, 0x83, 0xfb, 0xfc, 0xfd, 0xb3, 0xff, 0xd0, 0xff, 0xe3, 0x00, + 0x1a, 0x03, 0xa6, 0x04, 0xba, 0x05, 0xaa, 0x06, 0x1f, 0x08, 0xa6, 0x09, + 0xae, 0x0a, 0xd1, 0x0b, 0xbb, 0x0d, 0x2e, 0x0f, 0xfc, 0x0f, 0x55, 0x10, + 0xb5, 0x10, 0x05, 0x11, 0xb8, 0x11, 0x6d, 0x12, 0x14, 0x12, 0xb1, 0x11, + 0x56, 0x11, 0xaf, 0x11, 0xe0, 0x12, 0x9a, 0x12, 0x3b, 0x11, 0x0f, 0x10, + 0xeb, 0x0f, 0xcb, 0x0f, 0x94, 0x0e, 0xce, 0x0c, 0x8a, 0x0b, 0x36, 0x0b, + 0xb8, 0x0a, 0xf9, 0x09, 0x35, 0x09, 0xbd, 0x07, 0xb8, 0x06, 0x45, 0x06, + 0xd4, 0x04, 0x19, 0x03, 0x0e, 0x01, 0x59, 0xff, 0x98, 0xfe, 0x4b, 0xfd, + 0x97, 0xfb, 0x85, 0xfa, 0x56, 0xf8, 0xc6, 0xf6, 0xe6, 0xf5, 0x5c, 0xf4, + 0xf2, 0xf2, 0x07, 0xf4, 0xb8, 0xf3, 0x79, 0xf1, 0x64, 0xf0, 0x2e, 0xef, + 0xf8, 0xef, 0x38, 0xf1, 0x86, 0xf0, 0xde, 0xee, 0x24, 0xed, 0x7d, 0xed, + 0xad, 0xee, 0x7c, 0xee, 0xb8, 0xed, 0x47, 0xed, 0xfa, 0xed, 0x36, 0xf0, + 0x1d, 0xf1, 0x47, 0xf0, 0xca, 0xef, 0xd8, 0xf0, 0x80, 0xf3, 0x71, 0xf4, + 0x77, 0xf4, 0x92, 0xf3, 0xe3, 0xf3, 0x52, 0xf7, 0xd6, 0xf9, 0x5b, 0xfb, + 0xe9, 0xfb, 0x63, 0xfc, 0x52, 0xff, 0xdf, 0x01, 0xaf, 0x03, 0x8c, 0x04, + 0xec, 0x03, 0xd6, 0x05, 0x6b, 0x08, 0x95, 0x0a, 0x20, 0x0c, 0x72, 0x0c, + 0xb4, 0x0d, 0x74, 0x0f, 0x08, 0x11, 0xc4, 0x11, 0x1a, 0x12, 0x4c, 0x12, + 0x79, 0x12, 0xf7, 0x12, 0x0a, 0x13, 0xa1, 0x12, 0xe6, 0x12, 0xed, 0x12, + 0x48, 0x13, 0x8a, 0x13, 0x10, 0x13, 0xcf, 0x12, 0xd2, 0x11, 0x97, 0x10, + 0xb8, 0x0f, 0xe2, 0x0e, 0xaf, 0x0d, 0x3a, 0x0c, 0x3e, 0x0c, 0x71, 0x0a, + 0x81, 0x08, 0x28, 0x08, 0xc3, 0x07, 0xc2, 0x06, 0x81, 0x04, 0x3a, 0x02, + 0x85, 0xff, 0x36, 0xfe, 0x15, 0xfd, 0x98, 0xfb, 0xab, 0xf9, 0xb5, 0xf8, + 0x8e, 0xf6, 0xfa, 0xf4, 0x85, 0xf3, 0x51, 0xf2, 0x59, 0xf1, 0x7e, 0xef, + 0x44, 0xef, 0xe3, 0xed, 0x0b, 0xee, 0xc2, 0xee, 0x7a, 0xee, 0xd3, 0xed, + 0x61, 0xed, 0x7f, 0xed, 0xb9, 0xee, 0x4e, 0xee, 0x7e, 0xec, 0xae, 0xeb, + 0xdd, 0xeb, 0x38, 0xed, 0x2e, 0xef, 0xef, 0xef, 0x21, 0xf0, 0x52, 0xf1, + 0x7a, 0xf2, 0x16, 0xf4, 0x2d, 0xf5, 0x7a, 0xf5, 0x0f, 0xf6, 0x8a, 0xf7, + 0xbb, 0xf8, 0x93, 0xf9, 0x43, 0xfb, 0x55, 0xfd, 0xfb, 0xfe, 0xa3, 0x00, + 0xe9, 0x02, 0x2f, 0x05, 0x8f, 0x06, 0x1f, 0x08, 0xe4, 0x08, 0xb4, 0x09, + 0x96, 0x0a, 0xbc, 0x0b, 0x64, 0x0d, 0x2d, 0x0f, 0x23, 0x10, 0x72, 0x10, + 0x7b, 0x11, 0xee, 0x11, 0x16, 0x13, 0x35, 0x14, 0xfc, 0x13, 0x4f, 0x13, + 0x10, 0x13, 0xe2, 0x12, 0x73, 0x12, 0x45, 0x12, 0x74, 0x12, 0x4d, 0x12, + 0x01, 0x12, 0xc3, 0x10, 0x5d, 0x0f, 0xfd, 0x0e, 0x74, 0x0e, 0x55, 0x0d, + 0x17, 0x0b, 0x72, 0x09, 0x01, 0x09, 0x8d, 0x08, 0x8a, 0x08, 0x29, 0x07, + 0x05, 0x05, 0xbf, 0x03, 0xc5, 0x02, 0x02, 0x02, 0x33, 0x00, 0x67, 0xfd, + 0x2b, 0xfb, 0x09, 0xfa, 0xbd, 0xf8, 0x7f, 0xf7, 0x7a, 0xf5, 0x62, 0xf2, + 0x65, 0xf0, 0x64, 0xef, 0x80, 0xef, 0x98, 0xef, 0xed, 0xed, 0x18, 0xec, + 0x43, 0xeb, 0xe7, 0xeb, 0xc9, 0xed, 0xed, 0xed, 0x2a, 0xec, 0x16, 0xea, + 0x8a, 0xea, 0xec, 0xec, 0x4b, 0xec, 0x45, 0xed, 0x2b, 0xec, 0x62, 0xeb, + 0xdb, 0xee, 0xcc, 0xef, 0x6b, 0xf1, 0x53, 0xf1, 0xac, 0xf1, 0x7e, 0xf3, + 0x9c, 0xf4, 0x04, 0xf6, 0x5b, 0xf7, 0xd6, 0xf8, 0xfc, 0xf9, 0xfa, 0xfa, + 0xe8, 0xfc, 0x92, 0xff, 0x52, 0x02, 0x2e, 0x04, 0x07, 0x05, 0xaf, 0x06, + 0x1d, 0x08, 0x94, 0x0a, 0x3b, 0x0c, 0x21, 0x0c, 0x65, 0x0d, 0x28, 0x0f, + 0xbe, 0x0f, 0x6b, 0x11, 0xf0, 0x11, 0xfe, 0x11, 0x04, 0x14, 0xf8, 0x14, + 0xdf, 0x14, 0xde, 0x14, 0x2c, 0x14, 0xdd, 0x13, 0xb8, 0x14, 0x01, 0x14, + 0xe0, 0x12, 0x03, 0x12, 0xb7, 0x11, 0xa0, 0x11, 0x60, 0x11, 0x14, 0x10, + 0x43, 0x0e, 0x6f, 0x0d, 0x85, 0x0c, 0x89, 0x0b, 0x2d, 0x0a, 0x61, 0x08, + 0xea, 0x07, 0x4c, 0x07, 0x14, 0x06, 0xe3, 0x04, 0x7d, 0x03, 0x37, 0x02, + 0x0f, 0x00, 0xc6, 0xff, 0xba, 0xfd, 0x61, 0xfb, 0x69, 0xfa, 0x4f, 0xf8, + 0x4e, 0xf8, 0x70, 0xf6, 0x6f, 0xf3, 0xc0, 0xf1, 0x47, 0xef, 0x03, 0xef, + 0x1e, 0xef, 0xa1, 0xed, 0x55, 0xec, 0x8c, 0xeb, 0xa4, 0xec, 0xe9, 0xec, + 0x89, 0xed, 0xb0, 0xed, 0x23, 0xed, 0xa5, 0xee, 0xaa, 0xef, 0x46, 0xee, + 0x94, 0xeb, 0x0a, 0xeb, 0xc7, 0xec, 0xed, 0xef, 0x33, 0xf1, 0xb8, 0xef, + 0xfe, 0xee, 0xf6, 0xf0, 0x2e, 0xf4, 0xac, 0xf6, 0x14, 0xf7, 0xa6, 0xf6, + 0x5d, 0xf7, 0xba, 0xf8, 0x9c, 0xfa, 0x9e, 0xfb, 0xd6, 0xfc, 0x83, 0xff, + 0x88, 0x01, 0x1f, 0x03, 0x78, 0x05, 0xe3, 0x06, 0x75, 0x09, 0x26, 0x0b, + 0x99, 0x0b, 0x1c, 0x0d, 0xfa, 0x0d, 0xc1, 0x0f, 0xc5, 0x10, 0x58, 0x11, + 0xdd, 0x11, 0x08, 0x13, 0x41, 0x15, 0x4e, 0x16, 0x56, 0x16, 0xd7, 0x15, + 0xc6, 0x15, 0xda, 0x15, 0x69, 0x14, 0x9f, 0x13, 0x1f, 0x14, 0x6b, 0x13, + 0xc3, 0x12, 0xbd, 0x11, 0x81, 0x10, 0xf5, 0x10, 0xbe, 0x10, 0x7a, 0x0f, + 0x15, 0x0d, 0x45, 0x0c, 0x50, 0x0b, 0xbe, 0x09, 0x9c, 0x08, 0xa5, 0x06, + 0x28, 0x05, 0xcb, 0x03, 0x92, 0x03, 0x3d, 0x02, 0x3e, 0xff, 0xe9, 0xfc, + 0x75, 0xfb, 0xbb, 0xfa, 0xf1, 0xf8, 0x5d, 0xf6, 0xb1, 0xf3, 0xaa, 0xf1, + 0xeb, 0xf0, 0x56, 0xef, 0xa7, 0xec, 0x60, 0xea, 0x00, 0xe9, 0xfc, 0xe9, + 0xe8, 0xee, 0x84, 0xec, 0x46, 0xe8, 0x58, 0xe7, 0x35, 0xe9, 0xa7, 0xef, + 0x9a, 0xf1, 0x71, 0xec, 0x51, 0xe8, 0xe5, 0xe8, 0x3d, 0xec, 0x40, 0xf0, + 0xfd, 0xee, 0xc9, 0xea, 0x54, 0xed, 0x90, 0xf1, 0x65, 0xf6, 0xc9, 0xf6, + 0x2e, 0xf3, 0xd1, 0xf4, 0xf8, 0xf7, 0x3d, 0xfb, 0x9d, 0xfc, 0xe9, 0xfa, + 0x9c, 0xfb, 0xae, 0xfe, 0x14, 0x02, 0x02, 0x05, 0x13, 0x05, 0xc6, 0x06, + 0xf9, 0x08, 0x45, 0x0b, 0xc4, 0x0c, 0xdf, 0x0c, 0x18, 0x0e, 0x61, 0x10, + 0x16, 0x11, 0x58, 0x11, 0xae, 0x10, 0x54, 0x12, 0x1d, 0x15, 0x39, 0x16, + 0xb0, 0x15, 0xb9, 0x14, 0x30, 0x15, 0x2d, 0x16, 0xc8, 0x15, 0xce, 0x14, + 0x3f, 0x13, 0x08, 0x12, 0x00, 0x12, 0x50, 0x11, 0xaa, 0x10, 0x7f, 0x10, + 0xa2, 0x0f, 0x2f, 0x0f, 0xb6, 0x0d, 0x39, 0x0c, 0x4e, 0x0b, 0xfe, 0x09, + 0x27, 0x09, 0x8a, 0x07, 0x7e, 0x05, 0x0b, 0x04, 0x90, 0x03, 0xf7, 0x02, + 0x34, 0x01, 0xca, 0xfe, 0x8d, 0xfd, 0x68, 0xfc, 0xb6, 0xfb, 0x25, 0xf9, + 0x10, 0xf6, 0x14, 0xf4, 0xf5, 0xf1, 0x6a, 0xf0, 0x31, 0xee, 0xe9, 0xeb, + 0x41, 0xea, 0xe8, 0xea, 0xd6, 0xea, 0xc4, 0xea, 0x24, 0xea, 0xaa, 0xe9, + 0x44, 0xeb, 0x84, 0xeb, 0xe7, 0xec, 0xc8, 0xed, 0xe5, 0xeb, 0xa1, 0xeb, + 0x0f, 0xeb, 0x06, 0xeb, 0xd2, 0xec, 0x8a, 0xee, 0x43, 0xef, 0xe1, 0xef, + 0x59, 0xf1, 0xdf, 0xf2, 0xaa, 0xf5, 0xe9, 0xf6, 0xa5, 0xf6, 0xc2, 0xf7, + 0x30, 0xf9, 0x1b, 0xfb, 0x08, 0xfd, 0x95, 0xfd, 0x22, 0xfe, 0x1d, 0x00, + 0x4c, 0x04, 0x76, 0x06, 0x67, 0x07, 0xcb, 0x08, 0x8b, 0x0a, 0x79, 0x0c, + 0x42, 0x0d, 0xfe, 0x0d, 0x99, 0x0e, 0xab, 0x0f, 0x43, 0x11, 0x6e, 0x11, + 0xb3, 0x10, 0xea, 0x12, 0x1f, 0x15, 0xb5, 0x15, 0xd3, 0x15, 0x8d, 0x14, + 0x2a, 0x15, 0xa1, 0x15, 0x11, 0x15, 0x54, 0x14, 0x35, 0x13, 0xb9, 0x12, + 0xec, 0x12, 0xcd, 0x12, 0x5b, 0x11, 0x8f, 0x10, 0xf5, 0x0f, 0x89, 0x0e, + 0x29, 0x0e, 0x13, 0x0d, 0xad, 0x0b, 0x6a, 0x0a, 0x3e, 0x09, 0xab, 0x07, + 0xc9, 0x05, 0xc9, 0x04, 0xc7, 0x03, 0x0a, 0x02, 0xa0, 0x01, 0xf1, 0xfe, + 0xe7, 0xfa, 0xff, 0xf9, 0xb2, 0xf8, 0x43, 0xf7, 0x7f, 0xf5, 0x1d, 0xf1, + 0xbc, 0xee, 0x4a, 0xed, 0x18, 0xec, 0x2f, 0xe9, 0xdb, 0xe8, 0x00, 0xe8, + 0xd1, 0xe8, 0xb7, 0xe9, 0x5f, 0xe7, 0x64, 0xe7, 0x65, 0xe8, 0xa7, 0xea, + 0xc2, 0xeb, 0xd2, 0xea, 0xfc, 0xe8, 0x76, 0xe8, 0x7a, 0xea, 0x65, 0xec, + 0x29, 0xed, 0x82, 0xed, 0x36, 0xee, 0xff, 0xef, 0xbb, 0xf2, 0xc8, 0xf4, + 0xe3, 0xf5, 0x3d, 0xf6, 0xe1, 0xf7, 0x25, 0xfb, 0x80, 0xfc, 0xc1, 0xfc, + 0x09, 0xfd, 0x0f, 0xff, 0xc0, 0x01, 0x3f, 0x05, 0xb4, 0x06, 0xa2, 0x07, + 0xc0, 0x08, 0xa1, 0x0b, 0xb7, 0x0d, 0xf6, 0x0f, 0x16, 0x10, 0xf8, 0x0e, + 0x42, 0x10, 0xb8, 0x11, 0xbe, 0x13, 0xbb, 0x14, 0x71, 0x14, 0x07, 0x15, + 0xfa, 0x15, 0x1f, 0x16, 0x0a, 0x16, 0xf6, 0x15, 0x3e, 0x17, 0x04, 0x17, + 0x1f, 0x15, 0x34, 0x13, 0x34, 0x12, 0xe8, 0x12, 0x9f, 0x12, 0x08, 0x12, + 0x85, 0x10, 0x28, 0x0e, 0xa4, 0x0d, 0x2b, 0x0d, 0x25, 0x0c, 0xc1, 0x0a, + 0xed, 0x08, 0xa9, 0x07, 0xab, 0x06, 0xed, 0x04, 0xbe, 0x02, 0x3d, 0x01, + 0x40, 0x00, 0x87, 0xfe, 0x9b, 0xfc, 0x5f, 0xfa, 0x73, 0xf7, 0x56, 0xf6, + 0xa5, 0xf5, 0x6c, 0xf3, 0x3b, 0xf0, 0xc1, 0xec, 0x53, 0xea, 0x3f, 0xea, + 0xfb, 0xe8, 0x1c, 0xe8, 0x79, 0xe7, 0xed, 0xe6, 0xf5, 0xe5, 0xde, 0xe6, + 0x47, 0xe9, 0x79, 0xeb, 0xff, 0xec, 0x14, 0xec, 0xf2, 0xe9, 0x25, 0xe9, + 0xa3, 0xea, 0xf3, 0xec, 0x36, 0xee, 0x28, 0xee, 0x8b, 0xee, 0xf2, 0xee, + 0x4f, 0xf2, 0x2d, 0xf5, 0x7e, 0xf7, 0x4c, 0xf9, 0x53, 0xfa, 0x02, 0xfc, + 0x3c, 0xfc, 0xf9, 0xfb, 0x98, 0xfe, 0x88, 0x00, 0xf5, 0x02, 0x04, 0x05, + 0x99, 0x05, 0x50, 0x07, 0xe3, 0x09, 0x62, 0x0d, 0xa0, 0x0e, 0xf4, 0x0e, + 0x9b, 0x0f, 0x1f, 0x11, 0x50, 0x12, 0x2b, 0x12, 0x6b, 0x11, 0xb6, 0x11, + 0xc2, 0x13, 0x45, 0x15, 0x8a, 0x15, 0x57, 0x15, 0x35, 0x15, 0x1c, 0x16, + 0x84, 0x16, 0x12, 0x15, 0xf0, 0x12, 0xf7, 0x11, 0x54, 0x12, 0x49, 0x12, + 0x78, 0x11, 0xd4, 0x0f, 0x4f, 0x0e, 0xcb, 0x0d, 0xc7, 0x0d, 0x35, 0x0d, + 0x3b, 0x0c, 0x73, 0x0b, 0x9c, 0x09, 0xe5, 0x06, 0x16, 0x05, 0xea, 0x03, + 0x68, 0x03, 0xa9, 0x02, 0x55, 0x00, 0x80, 0xfd, 0x20, 0xfb, 0xf6, 0xf8, + 0xff, 0xf8, 0xcd, 0xf7, 0x6a, 0xf5, 0x46, 0xf2, 0xcd, 0xee, 0x3e, 0xec, + 0x49, 0xea, 0xd4, 0xe8, 0x99, 0xe7, 0x82, 0xe5, 0xd9, 0xe5, 0x48, 0xe6, + 0x35, 0xe6, 0x30, 0xe8, 0xd4, 0xe7, 0xbf, 0xe8, 0xe4, 0xe9, 0xd7, 0xea, + 0x72, 0xeb, 0x6f, 0xea, 0x5b, 0xe9, 0xed, 0xe9, 0x74, 0xeb, 0xfa, 0xed, + 0xc4, 0xef, 0x91, 0xf0, 0x66, 0xf2, 0xa4, 0xf4, 0x07, 0xf7, 0xaf, 0xfb, + 0x2b, 0xfd, 0xf6, 0xfc, 0x9f, 0xfe, 0x65, 0xff, 0xcc, 0xff, 0x51, 0x02, + 0x3d, 0x04, 0x18, 0x06, 0xea, 0x08, 0x1c, 0x0a, 0x44, 0x0b, 0xdb, 0x0d, + 0x1b, 0x10, 0x76, 0x11, 0xcb, 0x12, 0x69, 0x12, 0xac, 0x11, 0x73, 0x12, + 0x1f, 0x13, 0x78, 0x13, 0x2b, 0x15, 0x08, 0x15, 0xd4, 0x14, 0xb1, 0x14, + 0xbe, 0x14, 0x15, 0x16, 0x19, 0x16, 0x0d, 0x14, 0xc1, 0x12, 0x9d, 0x11, + 0xaf, 0x11, 0xd3, 0x10, 0x15, 0x10, 0xd8, 0x0e, 0x75, 0x0d, 0xa3, 0x0d, + 0xeb, 0x0c, 0x90, 0x0b, 0x56, 0x0a, 0x34, 0x09, 0x6e, 0x08, 0x14, 0x07, + 0x87, 0x04, 0x27, 0x02, 0xed, 0x00, 0xcd, 0xff, 0x46, 0xfe, 0x7f, 0xfc, + 0xae, 0xf9, 0x13, 0xf7, 0x2f, 0xf7, 0xf1, 0xf5, 0x27, 0xf3, 0xe5, 0xef, + 0x2c, 0xec, 0x52, 0xea, 0x8f, 0xe9, 0x30, 0xe7, 0x56, 0xe5, 0x16, 0xe5, + 0x45, 0xe5, 0xbf, 0xe6, 0xf9, 0xe6, 0x96, 0xe6, 0x8e, 0xe8, 0x51, 0xec, + 0xed, 0xec, 0x1d, 0xeb, 0xdd, 0xe8, 0x4c, 0xe9, 0xfb, 0xec, 0x8f, 0xee, + 0x0b, 0xee, 0xca, 0xed, 0xfc, 0xef, 0x97, 0xf4, 0xc2, 0xf8, 0x21, 0xf9, + 0xb9, 0xf8, 0xe8, 0xfa, 0x0f, 0x00, 0x90, 0x03, 0x9a, 0x01, 0xfd, 0xff, + 0xeb, 0x00, 0xd4, 0x03, 0x8e, 0x07, 0xda, 0x08, 0xa0, 0x08, 0xc1, 0x0a, + 0xfc, 0x0d, 0x50, 0x10, 0x82, 0x12, 0x43, 0x12, 0xcf, 0x10, 0xdb, 0x11, + 0x80, 0x11, 0x41, 0x12, 0xe2, 0x12, 0x8d, 0x12, 0x2c, 0x13, 0xe6, 0x13, + 0x25, 0x14, 0x2d, 0x14, 0x7b, 0x14, 0xb2, 0x14, 0x29, 0x14, 0x60, 0x13, + 0xb7, 0x11, 0xf1, 0x10, 0x4d, 0x11, 0x57, 0x10, 0xe0, 0x0e, 0x3c, 0x0e, + 0x21, 0x0e, 0x23, 0x0d, 0x8c, 0x0c, 0xf8, 0x0b, 0x20, 0x0b, 0xf3, 0x09, + 0xd7, 0x07, 0xd8, 0x04, 0xf2, 0x02, 0x8b, 0x01, 0x94, 0xff, 0xa4, 0xfd, + 0xc3, 0xfa, 0x15, 0xf9, 0x9d, 0xf8, 0x51, 0xf7, 0x07, 0xf5, 0xd6, 0xf1, + 0x3f, 0xee, 0xce, 0xeb, 0x36, 0xe9, 0x51, 0xe6, 0x4c, 0xe4, 0x1e, 0xe4, + 0x56, 0xe2, 0x03, 0xe2, 0x40, 0xe3, 0xde, 0xe3, 0x29, 0xe7, 0x20, 0xeb, + 0xa4, 0xea, 0x51, 0xea, 0x99, 0xea, 0xba, 0xe9, 0x56, 0xec, 0x92, 0xed, + 0x11, 0xec, 0x0f, 0xee, 0x43, 0xf1, 0x96, 0xf3, 0x23, 0xf6, 0xd3, 0xf7, + 0xd9, 0xf9, 0x86, 0xfd, 0x31, 0x00, 0xd9, 0x01, 0xda, 0x03, 0xc7, 0x04, + 0x2f, 0x05, 0xb0, 0x05, 0x99, 0x06, 0xef, 0x08, 0x4e, 0x0c, 0x17, 0x0e, + 0x4e, 0x0f, 0xa9, 0x0f, 0x32, 0x10, 0xc0, 0x11, 0x42, 0x13, 0x10, 0x14, + 0xfa, 0x12, 0x9b, 0x11, 0x88, 0x10, 0xb3, 0x10, 0xb0, 0x11, 0xe4, 0x12, + 0x0c, 0x13, 0xcb, 0x12, 0xdb, 0x11, 0xd0, 0x11, 0x15, 0x13, 0xb9, 0x12, + 0x1c, 0x12, 0x2e, 0x11, 0x37, 0x10, 0x5f, 0x0f, 0x85, 0x0e, 0xe0, 0x0d, + 0x30, 0x0e, 0xff, 0x0d, 0xe4, 0x0d, 0x5a, 0x0c, 0x12, 0x0b, 0x09, 0x0a, + 0x2c, 0x09, 0x2b, 0x08, 0xac, 0x05, 0xe2, 0x02, 0x51, 0x00, 0x0f, 0xfe, + 0xb1, 0xfc, 0x1e, 0xfb, 0x95, 0xf8, 0xd4, 0xf5, 0x1d, 0xf3, 0xaf, 0xf0, + 0xaa, 0xed, 0x78, 0xea, 0x98, 0xe6, 0xa9, 0xe4, 0x0f, 0xe4, 0x41, 0xe3, + 0x98, 0xe3, 0xf5, 0xe1, 0xd2, 0xe2, 0x21, 0xe6, 0x2b, 0xe7, 0x71, 0xe8, + 0x8c, 0xe9, 0x4a, 0xea, 0xe6, 0xeb, 0xeb, 0xeb, 0xe8, 0xeb, 0xfb, 0xea, + 0xf0, 0xea, 0x6a, 0xed, 0x96, 0xef, 0xb5, 0xf4, 0xaf, 0xf7, 0x0c, 0xf9, + 0xd7, 0xfc, 0x87, 0xfd, 0x2f, 0x00, 0x6e, 0x02, 0x30, 0x03, 0x6c, 0x04, + 0xcf, 0x05, 0x9b, 0x05, 0xbc, 0x07, 0xae, 0x09, 0xc4, 0x0b, 0xd3, 0x0e, + 0x1e, 0x10, 0xc0, 0x11, 0x8f, 0x12, 0x2d, 0x12, 0x54, 0x13, 0xcf, 0x12, + 0x1a, 0x12, 0xee, 0x10, 0x70, 0x0f, 0x42, 0x10, 0xe7, 0x10, 0x99, 0x11, + 0x8a, 0x11, 0x26, 0x12, 0xb4, 0x12, 0x71, 0x13, 0xaa, 0x12, 0xd9, 0x11, + 0x19, 0x10, 0x4d, 0x10, 0x84, 0x10, 0xc1, 0x0f, 0x61, 0x0f, 0xc9, 0x0e, + 0xaf, 0x0e, 0x41, 0x0f, 0x66, 0x0f, 0xc7, 0x0e, 0x12, 0x0e, 0x1d, 0x0c, + 0xc3, 0x09, 0x93, 0x07, 0x5c, 0x06, 0x68, 0x04, 0x6e, 0x01, 0x6b, 0xfd, + 0x1d, 0xfa, 0x52, 0xfa, 0x39, 0xf8, 0x3e, 0xf5, 0x19, 0xf1, 0x19, 0xee, + 0x0d, 0xeb, 0x14, 0xe8, 0x4e, 0xe5, 0xc2, 0xe2, 0x9c, 0xe2, 0xfc, 0xe2, + 0x7f, 0xe2, 0x02, 0xe3, 0x41, 0xe4, 0x31, 0xe8, 0xeb, 0xea, 0x21, 0xeb, + 0xd0, 0xe9, 0xf5, 0xe8, 0xf7, 0xe9, 0x8b, 0xed, 0x94, 0xed, 0x61, 0xec, + 0x75, 0xed, 0x5c, 0xef, 0x27, 0xf4, 0xf2, 0xf6, 0xd2, 0xf8, 0x8f, 0xfb, + 0x6b, 0xfe, 0x1d, 0x01, 0x42, 0x02, 0x4c, 0x02, 0x7c, 0x03, 0x3f, 0x04, + 0xb6, 0x05, 0x0e, 0x07, 0xc9, 0x07, 0xef, 0x09, 0x6e, 0x0c, 0xd7, 0x0e, + 0x21, 0x10, 0xf1, 0x0f, 0x23, 0x10, 0x37, 0x10, 0xc6, 0x11, 0xcd, 0x10, + 0x3d, 0x0f, 0xf0, 0x0e, 0xda, 0x0e, 0x24, 0x0f, 0xb6, 0x0f, 0x30, 0x10, + 0x2d, 0x0f, 0x6d, 0x10, 0x60, 0x11, 0x04, 0x11, 0xa1, 0x10, 0xd9, 0x0f, + 0x0b, 0x10, 0x4e, 0x10, 0x6d, 0x10, 0xdc, 0x10, 0x96, 0x10, 0x9a, 0x10, + 0xfb, 0x11, 0x11, 0x12, 0xc7, 0x11, 0x0b, 0x11, 0x56, 0x0f, 0xa4, 0x0c, + 0x8d, 0x0a, 0x8a, 0x07, 0xaf, 0x04, 0xc4, 0x00, 0x7b, 0xfd, 0x25, 0xfb, + 0x97, 0xf8, 0x93, 0xf5, 0xe3, 0xf2, 0x2c, 0xef, 0xcc, 0xea, 0x98, 0xe6, + 0xb3, 0xe3, 0xea, 0xe2, 0x0b, 0xe3, 0xb6, 0xe2, 0x56, 0xe1, 0xfe, 0xdf, + 0xf6, 0xe1, 0x1c, 0xe5, 0x62, 0xe8, 0x4d, 0xe9, 0x4d, 0xe8, 0x4f, 0xe8, + 0x64, 0xe9, 0xcf, 0xeb, 0x17, 0xed, 0x13, 0xee, 0xcf, 0xec, 0x0b, 0xee, + 0xd0, 0xf2, 0xca, 0xf6, 0x9f, 0xf9, 0x6f, 0xfc, 0x14, 0xff, 0x46, 0x02, + 0x08, 0x04, 0x72, 0x02, 0x21, 0x04, 0x1d, 0x05, 0xb1, 0x06, 0xd4, 0x09, + 0x75, 0x09, 0x9a, 0x09, 0xe3, 0x0a, 0x12, 0x0d, 0x34, 0x0f, 0x26, 0x0f, + 0xe5, 0x0e, 0x59, 0x0f, 0xdc, 0x0f, 0x8d, 0x0e, 0x2c, 0x0c, 0xce, 0x0a, + 0x2b, 0x0b, 0x63, 0x0d, 0x5a, 0x0e, 0x93, 0x0d, 0x35, 0x0c, 0x60, 0x0d, + 0xa0, 0x0f, 0xbe, 0x10, 0xd8, 0x0e, 0xfa, 0x0c, 0x34, 0x0d, 0xa3, 0x0e, + 0x49, 0x0f, 0x98, 0x0e, 0xa2, 0x0d, 0x3b, 0x0f, 0xc5, 0x11, 0xcd, 0x12, + 0x45, 0x12, 0x70, 0x10, 0x08, 0x0f, 0x87, 0x0e, 0x17, 0x0d, 0x26, 0x0a, + 0x57, 0x05, 0xf5, 0xff, 0x1b, 0xfe, 0xa4, 0xfc, 0xef, 0xfa, 0x5f, 0xf6, + 0xf6, 0xf1, 0xae, 0xee, 0x0d, 0xea, 0x02, 0xe8, 0x03, 0xe6, 0x9d, 0xe5, + 0xd3, 0xe5, 0xf9, 0xe4, 0x04, 0xe5, 0x7e, 0xe6, 0x29, 0xe7, 0x51, 0xe9, + 0x73, 0xe9, 0x00, 0xeb, 0xad, 0xeb, 0xf8, 0xe8, 0x59, 0xe8, 0x07, 0xe8, + 0x23, 0xeb, 0x63, 0xef, 0x44, 0xf1, 0x52, 0xf1, 0xbe, 0xf2, 0xed, 0xf6, + 0x22, 0xfb, 0x2c, 0xff, 0xcf, 0xfe, 0xf6, 0xfe, 0x15, 0x01, 0xaf, 0x02, + 0xf1, 0x03, 0xe8, 0x04, 0x87, 0x04, 0x6e, 0x06, 0xb1, 0x08, 0x56, 0x09, + 0xfe, 0x0a, 0x71, 0x09, 0x2c, 0x0a, 0xb5, 0x0b, 0x37, 0x0c, 0x18, 0x0c, + 0xb5, 0x0a, 0x4e, 0x0a, 0x61, 0x0a, 0x72, 0x0a, 0x9e, 0x09, 0x15, 0x09, + 0x2c, 0x0a, 0x8b, 0x0c, 0x46, 0x0e, 0xfc, 0x0c, 0xed, 0x0a, 0xc8, 0x0a, + 0x01, 0x0e, 0x99, 0x0f, 0x2f, 0x0f, 0x97, 0x0c, 0x9d, 0x0c, 0x20, 0x0f, + 0xbb, 0x11, 0xbe, 0x12, 0x4b, 0x12, 0xe5, 0x11, 0x9b, 0x12, 0x7f, 0x13, + 0x56, 0x11, 0x84, 0x0c, 0xd1, 0x08, 0x6a, 0x08, 0xd9, 0x05, 0x72, 0x01, + 0xc5, 0xfc, 0x1f, 0xf9, 0xe9, 0xf9, 0xf5, 0xf6, 0xa0, 0xf0, 0x27, 0xeb, + 0xcf, 0xe5, 0x11, 0xe6, 0x27, 0xea, 0x4b, 0xe9, 0xc2, 0xe7, 0x49, 0xe7, + 0xd2, 0xe5, 0x7b, 0xe9, 0x65, 0xeb, 0xb1, 0xe8, 0xde, 0xe7, 0x33, 0xe9, + 0x1e, 0xea, 0x7e, 0xec, 0x60, 0xed, 0x21, 0xea, 0x25, 0xee, 0xad, 0xf1, + 0x27, 0xf5, 0x4b, 0xf9, 0xf1, 0xf9, 0xa6, 0xfc, 0x6a, 0x00, 0x3e, 0x00, + 0x9f, 0x01, 0x5e, 0x02, 0xac, 0x03, 0xa5, 0x05, 0x6d, 0x05, 0xb9, 0x04, + 0xfd, 0x05, 0xd3, 0x07, 0xcd, 0x08, 0xbf, 0x09, 0x34, 0x09, 0x42, 0x09, + 0xda, 0x07, 0x4f, 0x08, 0x35, 0x09, 0xd5, 0x08, 0x83, 0x08, 0xfe, 0x08, + 0xcc, 0x07, 0x5b, 0x07, 0x58, 0x07, 0x6f, 0x08, 0x83, 0x0a, 0xd1, 0x0a, + 0x20, 0x09, 0x1e, 0x0b, 0x1c, 0x0d, 0x16, 0x0d, 0x62, 0x0e, 0x71, 0x0e, + 0xa1, 0x0d, 0xdd, 0x0f, 0x69, 0x11, 0x4a, 0x14, 0x03, 0x15, 0xbc, 0x13, + 0xb2, 0x12, 0x15, 0x12, 0x9a, 0x10, 0x04, 0x0f, 0x0e, 0x0c, 0x0b, 0x06, + 0x3b, 0x02, 0x7f, 0xfe, 0x85, 0xfb, 0x4e, 0xf8, 0xc4, 0xf4, 0xe0, 0xed, + 0x09, 0xe8, 0x75, 0xe4, 0xb4, 0xe2, 0x62, 0xe5, 0x8c, 0xe8, 0x98, 0xe7, + 0xe3, 0xe5, 0x03, 0xe8, 0x9e, 0xea, 0xc6, 0xf0, 0xf6, 0xf2, 0x95, 0xf1, + 0xad, 0xef, 0x91, 0xf0, 0xbe, 0xf1, 0x58, 0xf4, 0x02, 0xf5, 0x1d, 0xf6, + 0xb0, 0xfa, 0xfa, 0xfe, 0x10, 0x04, 0x95, 0x06, 0x0f, 0x09, 0xf4, 0x0a, + 0xd6, 0x0b, 0xcb, 0x0b, 0x91, 0x09, 0xf6, 0x07, 0xc8, 0x06, 0xeb, 0x07, + 0xeb, 0x06, 0xb6, 0x03, 0xde, 0x01, 0x84, 0xff, 0x4d, 0x01, 0xc5, 0x02, + 0x03, 0x01, 0x2e, 0xfe, 0x1e, 0xfb, 0x01, 0xfa, 0xc1, 0xf9, 0xb1, 0xfa, + 0xd2, 0xf8, 0x03, 0xf8, 0x76, 0xf9, 0x25, 0xfb, 0x31, 0xfe, 0xa9, 0x01, + 0xea, 0x03, 0x19, 0x07, 0xe6, 0x08, 0xf9, 0x0a, 0x8c, 0x0c, 0x50, 0x0e, + 0x52, 0x10, 0xe4, 0x12, 0x0f, 0x15, 0xa1, 0x16, 0x19, 0x1a, 0xf2, 0x1b, + 0x3d, 0x1d, 0x2f, 0x1d, 0xd4, 0x19, 0xa5, 0x15, 0xad, 0x11, 0x2c, 0x0d, + 0x71, 0x08, 0x3e, 0x05, 0x7f, 0x01, 0xb4, 0xfb, 0xf3, 0xf6, 0x38, 0xed, + 0x46, 0xe8, 0x22, 0xe2, 0x9d, 0xdf, 0x01, 0xdd, 0x06, 0xdc, 0x08, 0xdc, + 0xe9, 0xdd, 0xe2, 0xe1, 0x7c, 0xe8, 0xf7, 0xee, 0xb5, 0xf4, 0x42, 0xf7, + 0xf9, 0xf7, 0x34, 0xfb, 0xd5, 0xfc, 0x9b, 0xff, 0xa8, 0x01, 0x5f, 0x02, + 0xe6, 0x02, 0x35, 0x05, 0xe2, 0x08, 0x42, 0x0e, 0xf1, 0x14, 0x1d, 0x17, + 0xd0, 0x16, 0x27, 0x13, 0x62, 0x0e, 0xe2, 0x08, 0xa5, 0x03, 0xc6, 0xfe, + 0x7f, 0xf9, 0x63, 0xf7, 0xe5, 0xf5, 0x23, 0xf5, 0xdb, 0xf3, 0xcf, 0xf2, + 0x45, 0xf1, 0x44, 0xf0, 0x36, 0xf0, 0x63, 0xee, 0xaf, 0xec, 0x50, 0xe8, + 0x4b, 0xe7, 0xa7, 0xe8, 0xff, 0xec, 0xff, 0xf3, 0xca, 0xf7, 0x01, 0x00, + 0x75, 0x07, 0xd9, 0x0e, 0x43, 0x15, 0x22, 0x19, 0x89, 0x1d, 0xa6, 0x20, + 0x44, 0x22, 0x45, 0x24, 0x5e, 0x26, 0x83, 0x29, 0x4a, 0x2b, 0xbc, 0x2b, + 0xba, 0x29, 0x84, 0x25, 0x57, 0x20, 0x6d, 0x18, 0x73, 0x11, 0xad, 0x08, + 0x4d, 0xfd, 0xa3, 0xf7, 0xa7, 0xf0, 0x98, 0xed, 0x85, 0xea, 0x54, 0xe4, + 0xa5, 0xdd, 0x29, 0xd4, 0x9d, 0xcb, 0xc2, 0xc4, 0x9f, 0xc5, 0x4c, 0xc8, + 0x69, 0xd0, 0x13, 0xd7, 0x36, 0xdd, 0x3d, 0xe9, 0x62, 0xf5, 0xf1, 0x02, + 0x07, 0x0c, 0x37, 0x11, 0x3f, 0x17, 0xb6, 0x1b, 0x73, 0x1f, 0x91, 0x20, + 0x45, 0x20, 0x61, 0x22, 0xcf, 0x23, 0x3f, 0x26, 0xa5, 0x26, 0x33, 0x27, + 0xd9, 0x1e, 0xb8, 0x15, 0x25, 0x0b, 0x14, 0xfe, 0xeb, 0xf3, 0x80, 0xec, + 0xdf, 0xe0, 0x6b, 0xd8, 0x45, 0xd6, 0x52, 0xd3, 0x55, 0xd7, 0x2d, 0xd8, + 0xab, 0xd5, 0x7b, 0xd7, 0x5c, 0xda, 0x76, 0xdf, 0xd4, 0xe3, 0xec, 0xe2, + 0x38, 0xe8, 0x94, 0xed, 0x00, 0xf8, 0xf0, 0x02, 0x62, 0x0b, 0x80, 0x16, + 0xfb, 0x1f, 0x9a, 0x28, 0xc0, 0x30, 0x64, 0x34, 0x0e, 0x32, 0x46, 0x33, + 0x8d, 0x33, 0x66, 0x35, 0xe8, 0x32, 0x50, 0x2f, 0x78, 0x2a, 0xfa, 0x26, + 0xc7, 0x20, 0xf3, 0x19, 0x30, 0x11, 0xb9, 0x09, 0x92, 0x02, 0xb1, 0xfa, + 0x80, 0xee, 0x49, 0xe3, 0xbe, 0xdd, 0x62, 0xd8, 0x21, 0xd5, 0xc3, 0xcc, + 0xf9, 0xc2, 0x3e, 0xb5, 0xdf, 0xb0, 0xb7, 0xae, 0x95, 0xb4, 0xa8, 0xc5, + 0x6f, 0xd4, 0x19, 0xe9, 0xa5, 0xfc, 0xc6, 0x10, 0x6d, 0x23, 0xfa, 0x32, + 0x5c, 0x3b, 0x69, 0x3d, 0xac, 0x3f, 0x62, 0x3b, 0x95, 0x39, 0xb9, 0x32, + 0xff, 0x2e, 0xb1, 0x2b, 0x60, 0x28, 0xb1, 0x23, 0x24, 0x1c, 0xef, 0x0f, + 0x29, 0xff, 0x3a, 0xef, 0x03, 0xdf, 0x7f, 0xd2, 0xab, 0xca, 0xf5, 0xc5, + 0x0f, 0xc3, 0xb0, 0xc3, 0xb8, 0xc4, 0x71, 0xc8, 0xb2, 0xcd, 0x24, 0xd3, + 0xdb, 0xdc, 0x59, 0xe5, 0xd0, 0xeb, 0xb8, 0xf1, 0x0a, 0xf8, 0xbb, 0x00, + 0x58, 0x0c, 0x3e, 0x17, 0x42, 0x1e, 0xdc, 0x25, 0x6d, 0x2b, 0xe9, 0x2f, + 0xa2, 0x33, 0xa6, 0x32, 0x54, 0x33, 0xa8, 0x31, 0x7d, 0x2d, 0xd7, 0x28, + 0xe7, 0x23, 0x8d, 0x1e, 0x00, 0x1b, 0x38, 0x16, 0x4c, 0x0d, 0xa9, 0x05, + 0xb6, 0xff, 0x2e, 0xfb, 0x75, 0xf5, 0x4e, 0xef, 0x68, 0xea, 0xf0, 0xe5, + 0x29, 0xe2, 0xa9, 0xdc, 0x44, 0xd6, 0xd8, 0xd0, 0x2e, 0xcc, 0x82, 0xc5, + 0xb6, 0xbe, 0x15, 0xb8, 0x98, 0xb8, 0xd2, 0xc4, 0x84, 0xd7, 0xc5, 0xeb, + 0xfa, 0xff, 0x15, 0x15, 0x7c, 0x28, 0x37, 0x3c, 0x60, 0x46, 0x79, 0x45, + 0x3c, 0x43, 0x37, 0x3e, 0xf5, 0x3a, 0xf3, 0x36, 0x24, 0x2d, 0xed, 0x24, + 0xcb, 0x1e, 0x3c, 0x19, 0x61, 0x0f, 0xbd, 0x03, 0x31, 0xf5, 0xb2, 0xe8, + 0x11, 0xdd, 0x58, 0xd3, 0x62, 0xcb, 0xe0, 0xc6, 0xc3, 0xc3, 0x00, 0xc2, + 0xd3, 0xc4, 0xb2, 0xc9, 0x2a, 0xd2, 0xe6, 0xd9, 0xf2, 0xe3, 0x75, 0xec, + 0x4a, 0xf6, 0xf8, 0xfe, 0x49, 0x06, 0x5c, 0x0c, 0xf2, 0x10, 0x6e, 0x18, + 0x24, 0x1f, 0x81, 0x25, 0xff, 0x28, 0xba, 0x2a, 0x67, 0x2c, 0xe1, 0x2d, + 0x97, 0x27, 0x14, 0x21, 0xf8, 0x1b, 0x53, 0x18, 0xdf, 0x19, 0x62, 0x16, + 0xe4, 0x11, 0x77, 0x0e, 0x61, 0x09, 0x89, 0x05, 0xed, 0x02, 0x7c, 0xfe, + 0x57, 0xf9, 0x48, 0xf7, 0xa9, 0xf2, 0xec, 0xed, 0xca, 0xe9, 0x51, 0xe5, + 0x0f, 0xe0, 0x99, 0xda, 0x12, 0xd3, 0xb0, 0xcb, 0x44, 0xc5, 0x46, 0xc0, + 0x91, 0xbd, 0xe9, 0xbf, 0x97, 0xcb, 0xa0, 0xdf, 0x56, 0xf9, 0x1e, 0x13, + 0x35, 0x22, 0xf2, 0x32, 0xd0, 0x3d, 0xc4, 0x45, 0x55, 0x49, 0x99, 0x43, + 0x34, 0x3d, 0x9b, 0x35, 0x06, 0x2f, 0xe1, 0x26, 0x5b, 0x23, 0x70, 0x19, + 0x44, 0x10, 0xf4, 0x04, 0x6d, 0xf7, 0x46, 0xe5, 0x9a, 0xd7, 0xf7, 0xcd, + 0xde, 0xc9, 0x45, 0xc6, 0x42, 0xc2, 0x13, 0xc4, 0x27, 0xc9, 0x87, 0xd3, + 0x06, 0xdc, 0x42, 0xe4, 0x0e, 0xed, 0xf7, 0xf5, 0xf9, 0xfd, 0xae, 0x05, + 0x7e, 0x0a, 0x1f, 0x0f, 0xad, 0x16, 0x55, 0x1c, 0xec, 0x20, 0xa3, 0x22, + 0x74, 0x21, 0x58, 0x21, 0x9f, 0x20, 0x02, 0x22, 0x59, 0x1e, 0xe9, 0x17, + 0x5f, 0x12, 0x5b, 0x0d, 0x47, 0x0d, 0xb2, 0x0d, 0xb6, 0x0d, 0xfc, 0x0c, + 0xde, 0x0c, 0x00, 0x0a, 0x6f, 0x04, 0x7e, 0x01, 0x66, 0xfd, 0xb6, 0xfa, + 0x36, 0xf7, 0xb0, 0xf0, 0x90, 0xeb, 0xf2, 0xe3, 0x9d, 0xdd, 0x85, 0xd9, + 0x15, 0xcf, 0x33, 0xc9, 0x0a, 0xc2, 0x5f, 0xbc, 0x26, 0xbc, 0x4b, 0xc5, + 0xdd, 0xd4, 0xe2, 0xf0, 0xfe, 0x0a, 0xd4, 0x1b, 0x16, 0x2d, 0xbc, 0x39, + 0xd1, 0x45, 0x70, 0x4a, 0xab, 0x46, 0x25, 0x3b, 0x47, 0x35, 0x8a, 0x30, + 0x54, 0x29, 0xd5, 0x1e, 0x34, 0x13, 0xa7, 0x0a, 0x02, 0x05, 0x83, 0xfc, + 0xde, 0xef, 0xd8, 0xe1, 0x61, 0xd6, 0xfb, 0xcb, 0x55, 0xc5, 0x52, 0xc3, + 0x99, 0xc5, 0x10, 0xcd, 0x65, 0xd7, 0xc6, 0xe3, 0xd5, 0xed, 0xb5, 0xf5, + 0x52, 0x00, 0x1e, 0x09, 0xe6, 0x0c, 0xae, 0x0d, 0x76, 0x0c, 0xf9, 0x0a, + 0x2e, 0x11, 0x9a, 0x17, 0x17, 0x1b, 0x71, 0x20, 0xd9, 0x22, 0x8d, 0x20, + 0xbd, 0x1a, 0x6e, 0x13, 0x8c, 0x0b, 0xe8, 0x08, 0x39, 0x07, 0x39, 0x06, + 0xbc, 0x08, 0x9b, 0x0b, 0x19, 0x10, 0x56, 0x12, 0x20, 0x12, 0x9e, 0x10, + 0xa9, 0x0b, 0x78, 0x05, 0x00, 0xff, 0xf6, 0xf6, 0xc9, 0xf0, 0x15, 0xe9, + 0xad, 0xe2, 0xa0, 0xdb, 0xcc, 0xd2, 0x03, 0xcc, 0x9d, 0xc4, 0x8a, 0xc2, + 0x60, 0xbd, 0x26, 0xbb, 0x26, 0xc2, 0xcd, 0xd5, 0x4b, 0xf0, 0x59, 0x0b, + 0xc8, 0x20, 0xe9, 0x32, 0xdc, 0x41, 0x5b, 0x47, 0x3f, 0x47, 0xc1, 0x42, + 0x30, 0x3e, 0x0d, 0x38, 0x81, 0x2d, 0xce, 0x22, 0x8e, 0x18, 0xd9, 0x11, + 0x94, 0x0a, 0x92, 0x03, 0xb6, 0xf6, 0x94, 0xe9, 0xe3, 0xdb, 0x78, 0xd2, + 0xf9, 0xcd, 0x19, 0xc9, 0x4e, 0xc7, 0x70, 0xcb, 0x3f, 0xd3, 0x24, 0xde, + 0x3b, 0xe9, 0x83, 0xf2, 0xfc, 0xfd, 0xa0, 0x0b, 0x60, 0x12, 0x53, 0x13, + 0x4c, 0x10, 0xd2, 0x10, 0x1f, 0x17, 0xfb, 0x19, 0x53, 0x1b, 0x51, 0x1a, + 0x21, 0x1b, 0x28, 0x19, 0x56, 0x15, 0xaf, 0x0e, 0x52, 0x05, 0x40, 0x01, + 0xe6, 0xff, 0x28, 0xff, 0x7c, 0x01, 0x81, 0x05, 0x90, 0x09, 0x1d, 0x12, + 0x40, 0x16, 0x51, 0x16, 0x81, 0x14, 0x24, 0x0f, 0x8b, 0x09, 0x5f, 0x02, + 0xa5, 0xf8, 0xc1, 0xef, 0x97, 0xe7, 0x83, 0xda, 0x4f, 0xd0, 0xb1, 0xc5, + 0xfa, 0xbd, 0x44, 0xb9, 0xdd, 0xb5, 0x5f, 0xb6, 0x9b, 0xc3, 0x7e, 0xda, + 0xda, 0xf7, 0x63, 0x13, 0x05, 0x26, 0xc1, 0x34, 0xd3, 0x3f, 0x02, 0x45, + 0x88, 0x46, 0x44, 0x42, 0x06, 0x3d, 0x67, 0x36, 0x4d, 0x2c, 0x93, 0x21, + 0x00, 0x16, 0x38, 0x0e, 0x03, 0x0b, 0x6b, 0x01, 0x11, 0xf1, 0x50, 0xe1, + 0x23, 0xd6, 0xf1, 0xcd, 0x1b, 0xcc, 0xe3, 0xc9, 0xcb, 0xc8, 0x3c, 0xd0, + 0xf6, 0xd9, 0x44, 0xe7, 0x2a, 0xf4, 0x65, 0xfe, 0x4f, 0x09, 0x45, 0x12, + 0x33, 0x16, 0xa5, 0x15, 0x57, 0x15, 0x83, 0x14, 0xd5, 0x16, 0xd1, 0x18, + 0x0a, 0x14, 0xf1, 0x12, 0xdf, 0x0f, 0x3d, 0x0c, 0xca, 0x09, 0x0c, 0x05, + 0x70, 0xfe, 0x26, 0xfa, 0xfa, 0xf9, 0x92, 0xfb, 0x88, 0x01, 0xfd, 0x08, + 0x67, 0x12, 0x56, 0x18, 0x44, 0x1a, 0xfa, 0x19, 0xaa, 0x16, 0x15, 0x11, + 0x00, 0x0c, 0x89, 0x05, 0x26, 0xfd, 0x2e, 0xf3, 0x01, 0xe5, 0xd2, 0xd6, + 0xe1, 0xcb, 0x76, 0xc1, 0x7c, 0xb6, 0xb2, 0xae, 0xb6, 0xaf, 0xc0, 0xbc, + 0x10, 0xd4, 0x4a, 0xf0, 0x21, 0x08, 0xdb, 0x19, 0xb4, 0x27, 0xbe, 0x34, + 0x17, 0x40, 0x22, 0x42, 0x17, 0x42, 0x34, 0x3d, 0x03, 0x36, 0x27, 0x2e, + 0x39, 0x24, 0xba, 0x1b, 0x19, 0x18, 0x0b, 0x12, 0x1e, 0x04, 0x34, 0xf2, + 0xf5, 0xe2, 0x19, 0xda, 0xe7, 0xd4, 0x30, 0xd1, 0x98, 0xce, 0x56, 0xd1, + 0x76, 0xd6, 0xf3, 0xde, 0x42, 0xe9, 0x55, 0xf3, 0x50, 0xfe, 0x35, 0x09, + 0x69, 0x0f, 0x05, 0x13, 0xd5, 0x14, 0xab, 0x17, 0x03, 0x1a, 0x75, 0x1a, + 0xf3, 0x16, 0x53, 0x11, 0x6f, 0x0c, 0xce, 0x09, 0xcf, 0x05, 0x5e, 0xff, + 0x47, 0xf9, 0x8b, 0xf4, 0xe7, 0xf3, 0x62, 0xf5, 0x39, 0xf9, 0x2c, 0x00, + 0x37, 0x0d, 0x52, 0x16, 0x6f, 0x1a, 0x6f, 0x1d, 0x64, 0x1c, 0x1d, 0x19, + 0xe4, 0x16, 0xbc, 0x11, 0x6f, 0x09, 0x2b, 0x01, 0x6e, 0xf3, 0x09, 0xe5, + 0xda, 0xd5, 0x23, 0xc7, 0xc9, 0xbd, 0x99, 0xb5, 0x14, 0xaf, 0x4a, 0xb2, + 0x4f, 0xbf, 0x82, 0xd7, 0x5c, 0xf4, 0x46, 0x0d, 0x93, 0x1c, 0xc0, 0x2b, + 0xe5, 0x37, 0xc8, 0x38, 0x85, 0x39, 0x39, 0x3b, 0xe5, 0x38, 0x1a, 0x35, + 0x41, 0x2f, 0xed, 0x24, 0xab, 0x1c, 0x59, 0x16, 0xe6, 0x0a, 0xee, 0xfb, + 0x97, 0xed, 0x9e, 0xe0, 0x8a, 0xd8, 0x03, 0xd4, 0x92, 0xd2, 0xfc, 0xd4, + 0xc2, 0xd7, 0x04, 0xe0, 0x5e, 0xe8, 0x11, 0xf0, 0x19, 0xf9, 0xb3, 0x01, + 0x3f, 0x0b, 0xd6, 0x10, 0x9a, 0x12, 0x4b, 0x15, 0x42, 0x15, 0x69, 0x16, + 0x44, 0x13, 0xd9, 0x0d, 0x26, 0x0b, 0x1f, 0x06, 0x13, 0xff, 0x09, 0xfb, + 0x6b, 0xf8, 0x71, 0xf6, 0x95, 0xf5, 0x88, 0xf6, 0x12, 0xf9, 0xbf, 0xff, + 0x9f, 0x08, 0x6d, 0x12, 0x4a, 0x1b, 0xef, 0x20, 0xac, 0x22, 0x06, 0x21, + 0x4a, 0x1b, 0x82, 0x14, 0x17, 0x0d, 0xe7, 0x02, 0x8c, 0xf6, 0x7d, 0xe6, + 0x7b, 0xd6, 0x7f, 0xc8, 0x04, 0xbb, 0x32, 0xb1, 0xe1, 0xac, 0xe0, 0xaf, + 0x3f, 0xc0, 0x79, 0xda, 0x08, 0xf4, 0x07, 0x0b, 0xa2, 0x1a, 0x31, 0x28, + 0x62, 0x34, 0x48, 0x39, 0xde, 0x3b, 0x58, 0x3a, 0xc1, 0x37, 0x22, 0x31, + 0xcf, 0x2d, 0xa5, 0x23, 0x6b, 0x1c, 0xb5, 0x11, 0xe6, 0x05, 0x71, 0xfb, + 0x92, 0xe9, 0x67, 0xdc, 0xe2, 0xd1, 0x0e, 0xd0, 0xf5, 0xd1, 0xe8, 0xd6, + 0x80, 0xde, 0xb4, 0xe6, 0x54, 0xf0, 0x6d, 0xfa, 0x1a, 0x02, 0x56, 0x06, + 0x52, 0x0b, 0x12, 0x10, 0xfc, 0x12, 0x2a, 0x14, 0xe5, 0x12, 0x3a, 0x11, + 0x96, 0x10, 0xad, 0x0d, 0x71, 0x07, 0xe0, 0x00, 0x9c, 0xfc, 0x6a, 0xf7, + 0x77, 0xf5, 0x45, 0xf5, 0xf4, 0xf5, 0x87, 0xf8, 0x85, 0xfd, 0x71, 0x04, + 0x64, 0x0b, 0x63, 0x16, 0xff, 0x1c, 0x5f, 0x1f, 0x6f, 0x20, 0x71, 0x1d, + 0x73, 0x1b, 0x45, 0x12, 0xd4, 0x09, 0x6a, 0xfe, 0xcb, 0xed, 0x8f, 0xdc, + 0xd0, 0xcc, 0xa4, 0xbd, 0xe6, 0xb5, 0x32, 0xb0, 0x4c, 0xb3, 0xea, 0xbb, + 0xe1, 0xd0, 0xb2, 0xee, 0x3e, 0x09, 0x3e, 0x1c, 0xf4, 0x25, 0x54, 0x2f, + 0x0b, 0x33, 0xb0, 0x39, 0x16, 0x3a, 0x72, 0x36, 0x12, 0x33, 0xbb, 0x2c, + 0x21, 0x24, 0x3d, 0x1a, 0xd9, 0x10, 0x09, 0x07, 0x2f, 0xfc, 0x88, 0xef, + 0x90, 0xe0, 0x3c, 0xd4, 0x4b, 0xcd, 0xd3, 0xd1, 0x2f, 0xdb, 0xb1, 0xe2, + 0xc1, 0xea, 0x8a, 0xf3, 0x5d, 0xfd, 0x68, 0x06, 0x23, 0x09, 0xa4, 0x0b, + 0x7d, 0x10, 0x50, 0x15, 0x8e, 0x15, 0xfc, 0x11, 0xea, 0x0d, 0x74, 0x0d, + 0x88, 0x0b, 0x07, 0x08, 0x7d, 0x00, 0xf6, 0xf9, 0xef, 0xf2, 0x2d, 0xf2, + 0xce, 0xf4, 0x94, 0xf4, 0xe1, 0xf7, 0x5e, 0xfd, 0x20, 0x04, 0xe8, 0x0d, + 0x1e, 0x15, 0xc4, 0x1a, 0xd6, 0x1f, 0x7a, 0x20, 0xfc, 0x1c, 0x72, 0x1d, + 0x78, 0x16, 0x80, 0x0d, 0x24, 0x03, 0x87, 0xef, 0xc6, 0xde, 0x64, 0xcc, + 0x62, 0xbf, 0x2a, 0xb6, 0x7c, 0xaf, 0xc9, 0xb0, 0xbe, 0xbb, 0xe0, 0xd1, + 0x9d, 0xed, 0x1c, 0x06, 0x3f, 0x18, 0x6b, 0x22, 0x32, 0x2d, 0xf7, 0x32, + 0x51, 0x36, 0xf4, 0x3b, 0x87, 0x39, 0xcf, 0x33, 0xa6, 0x2b, 0x20, 0x22, + 0x7d, 0x1c, 0xbe, 0x13, 0xba, 0x09, 0x73, 0xfb, 0x96, 0xec, 0x06, 0xdd, + 0x22, 0xd6, 0x9a, 0xd3, 0x8d, 0xda, 0x0b, 0xe1, 0xc8, 0xe6, 0x78, 0xeb, + 0xa6, 0xf1, 0x68, 0xf7, 0x34, 0x02, 0x52, 0x0a, 0x21, 0x0e, 0x65, 0x13, + 0xcf, 0x13, 0xea, 0x12, 0xce, 0x11, 0x27, 0x0e, 0xd1, 0x0b, 0x82, 0x0a, + 0x38, 0x05, 0x0e, 0xff, 0x1e, 0xf7, 0xc4, 0xf2, 0x23, 0xf2, 0x7c, 0xf4, + 0x43, 0xf7, 0xc7, 0xfa, 0x5e, 0xff, 0x89, 0x04, 0xab, 0x0d, 0xef, 0x14, + 0x26, 0x1d, 0x4d, 0x21, 0x0b, 0x21, 0xc6, 0x1c, 0x54, 0x16, 0x12, 0x0f, + 0xd6, 0x06, 0xab, 0xf9, 0xe2, 0xe7, 0x37, 0xd8, 0x46, 0xc9, 0xc4, 0xbe, + 0x3c, 0xb6, 0x8e, 0xb2, 0xb9, 0xb6, 0x41, 0xc8, 0x13, 0xe0, 0xd4, 0xf8, + 0x7b, 0x0e, 0xe1, 0x1c, 0x7d, 0x23, 0x07, 0x2c, 0x3a, 0x2f, 0x15, 0x32, + 0xd3, 0x30, 0xc1, 0x2f, 0x44, 0x2c, 0x64, 0x27, 0xc7, 0x20, 0x04, 0x18, + 0xb3, 0x10, 0x20, 0x05, 0x09, 0xfa, 0x86, 0xee, 0x9f, 0xe1, 0xee, 0xda, + 0x6f, 0xd9, 0x7c, 0xdd, 0x19, 0xe6, 0xb5, 0xf0, 0x1e, 0xf6, 0x21, 0xfb, + 0xba, 0xfe, 0x68, 0x01, 0x45, 0x07, 0x5e, 0x09, 0xbb, 0x0c, 0x61, 0x0c, + 0xda, 0x0c, 0xac, 0x0e, 0x3e, 0x0d, 0xb1, 0x09, 0x03, 0x05, 0xe9, 0xfe, + 0xcb, 0xf9, 0x21, 0xf6, 0xc3, 0xf2, 0x6f, 0xf2, 0xbf, 0xf5, 0x56, 0xfa, + 0x85, 0x00, 0x88, 0x07, 0x3a, 0x0d, 0x78, 0x15, 0xfd, 0x1b, 0x5c, 0x20, + 0x30, 0x21, 0x79, 0x1d, 0xce, 0x19, 0x84, 0x13, 0x1e, 0x0a, 0x0c, 0xfe, + 0x89, 0xed, 0x63, 0xd9, 0x5f, 0xca, 0x4a, 0xbd, 0xc9, 0xb5, 0x59, 0xb3, + 0xbb, 0xb8, 0x68, 0xc4, 0xfa, 0xdb, 0x7c, 0xf3, 0x11, 0x05, 0xc6, 0x17, + 0x18, 0x21, 0x47, 0x2f, 0x1a, 0x31, 0x7f, 0x30, 0xd8, 0x31, 0xb6, 0x30, + 0xd2, 0x2d, 0xe0, 0x27, 0x12, 0x21, 0x58, 0x19, 0x25, 0x11, 0x06, 0x08, + 0x84, 0xf7, 0xad, 0xe9, 0xe5, 0xdb, 0xb0, 0xd8, 0x15, 0xdc, 0x07, 0xe0, + 0x10, 0xe8, 0x9e, 0xef, 0xc6, 0xf7, 0xef, 0xff, 0xab, 0x05, 0xd8, 0x0a, + 0xbf, 0x0e, 0x0d, 0x11, 0x32, 0x10, 0xb1, 0x10, 0xc0, 0x0f, 0x81, 0x0d, + 0xe2, 0x0c, 0xaf, 0x07, 0x2a, 0x04, 0x2d, 0xfe, 0x29, 0xf7, 0x9b, 0xf2, + 0x1d, 0xf0, 0x00, 0xef, 0xbe, 0xf2, 0x4a, 0xf5, 0x6a, 0xf9, 0x9d, 0x01, + 0x6e, 0x0a, 0x44, 0x11, 0x35, 0x1a, 0x52, 0x1e, 0xa5, 0x1e, 0xf4, 0x1c, + 0x36, 0x18, 0xd3, 0x10, 0xa7, 0x09, 0x3b, 0xfa, 0x47, 0xeb, 0xa8, 0xdd, + 0x85, 0xcd, 0x45, 0xc4, 0x04, 0xbc, 0x7b, 0xb8, 0x3b, 0xbf, 0x26, 0xcb, + 0x2e, 0xe1, 0x54, 0xf7, 0xf8, 0x07, 0x0b, 0x18, 0x1f, 0x1f, 0xd0, 0x24, + 0xbf, 0x2a, 0x2e, 0x2d, 0x89, 0x2e, 0x55, 0x2d, 0xa2, 0x26, 0x49, 0x21, + 0x63, 0x1e, 0x3e, 0x17, 0x0b, 0x11, 0xf6, 0x05, 0x71, 0xf8, 0x95, 0xed, + 0x3c, 0xe6, 0x97, 0xe2, 0xbe, 0xe3, 0xf3, 0xe5, 0xae, 0xed, 0x09, 0xf7, + 0x73, 0xfc, 0x14, 0x02, 0xbf, 0x09, 0x06, 0x0b, 0xab, 0x0d, 0x4d, 0x0f, + 0x59, 0x0e, 0x99, 0x0d, 0x11, 0x0c, 0xa6, 0x08, 0x0d, 0x06, 0x7d, 0x02, + 0xeb, 0xfd, 0xd5, 0xfa, 0x6b, 0xf7, 0x0a, 0xf4, 0x6e, 0xf1, 0x7d, 0xef, + 0xfa, 0xf0, 0x1a, 0xf7, 0xf7, 0xfa, 0x20, 0x01, 0x60, 0x09, 0x59, 0x12, + 0xff, 0x16, 0x46, 0x1d, 0x81, 0x1c, 0x27, 0x1a, 0x26, 0x12, 0x42, 0x07, + 0xbd, 0xf9, 0x07, 0xf1, 0xb7, 0xe6, 0x9c, 0xd9, 0x29, 0xce, 0xc8, 0xc7, + 0x8f, 0xc1, 0x04, 0xc4, 0xb4, 0xd0, 0xc0, 0xe0, 0x9c, 0xf3, 0xb1, 0xff, + 0x64, 0x0b, 0x5c, 0x15, 0xf5, 0x1b, 0x82, 0x20, 0x1b, 0x2a, 0x9e, 0x28, + 0xd5, 0x2a, 0xb9, 0x28, 0xb9, 0x21, 0xc1, 0x1a, 0x27, 0x14, 0x4d, 0x0d, + 0x1f, 0x07, 0x9f, 0x01, 0x7f, 0xf6, 0x8b, 0xee, 0xaf, 0xe8, 0x15, 0xe7, + 0xd2, 0xec, 0x70, 0xf1, 0xff, 0xf5, 0xf1, 0xfb, 0x4a, 0xff, 0x0e, 0x02, + 0xf5, 0x05, 0xfc, 0x05, 0xf2, 0x0a, 0xf4, 0x0d, 0x57, 0x0e, 0x81, 0x0c, + 0xfb, 0x0a, 0xe8, 0x06, 0x6d, 0x03, 0x6e, 0xff, 0x8f, 0xfb, 0x77, 0xf8, + 0x8f, 0xf3, 0x48, 0xee, 0x89, 0xee, 0x36, 0xf0, 0x17, 0xf5, 0xe0, 0xfc, + 0x53, 0x02, 0xde, 0x07, 0x75, 0x0e, 0xce, 0x12, 0xaf, 0x16, 0xc0, 0x16, + 0x8a, 0x14, 0xd6, 0x12, 0x2a, 0x0a, 0xe7, 0x00, 0x03, 0xf7, 0x6c, 0xe9, + 0x69, 0xdc, 0x08, 0xd1, 0xd8, 0xc5, 0xf8, 0xc3, 0x6d, 0xc8, 0x71, 0xd6, + 0xb5, 0xe7, 0x0b, 0xf3, 0xd1, 0xfd, 0x55, 0x07, 0xd3, 0x0d, 0x57, 0x18, + 0x10, 0x19, 0xea, 0x1d, 0x23, 0x23, 0x62, 0x25, 0x34, 0x28, 0xb5, 0x23, + 0x48, 0x20, 0x6d, 0x1b, 0xc5, 0x13, 0xd1, 0x0a, 0xc9, 0x02, 0xfb, 0xfa, + 0x67, 0xf2, 0xc2, 0xed, 0x64, 0xea, 0x29, 0xed, 0x8a, 0xf0, 0xe8, 0xf3, + 0x95, 0xf8, 0x87, 0xfd, 0x1b, 0x02, 0x1f, 0x07, 0xd0, 0x0a, 0xb3, 0x0d, + 0x2c, 0x0f, 0x34, 0x0e, 0x7c, 0x0b, 0xc1, 0x0b, 0xfe, 0x09, 0x7a, 0x08, + 0xd9, 0x04, 0x31, 0xff, 0x4d, 0xf9, 0x23, 0xf3, 0x06, 0xef, 0x26, 0xec, + 0x46, 0xee, 0x18, 0xf0, 0xea, 0xf3, 0x0f, 0xfb, 0xa7, 0x01, 0x96, 0x07, + 0xcb, 0x0b, 0x39, 0x0f, 0x19, 0x12, 0x1e, 0x12, 0x1c, 0x0d, 0xfc, 0x07, + 0xb0, 0xff, 0x84, 0xf6, 0x35, 0xea, 0x44, 0xdc, 0x9f, 0xcf, 0xbf, 0xc8, + 0xcc, 0xcb, 0x41, 0xd5, 0x4c, 0xe0, 0x77, 0xee, 0xb4, 0xfa, 0x2e, 0x07, + 0xc7, 0x0f, 0x82, 0x15, 0x64, 0x16, 0xb9, 0x19, 0xaa, 0x1c, 0x51, 0x1b, + 0x74, 0x1f, 0x76, 0x1d, 0x52, 0x1c, 0x47, 0x1a, 0x1b, 0x14, 0xec, 0x0e, + 0xe9, 0x05, 0xb6, 0xfc, 0x48, 0xf7, 0x42, 0xf2, 0xcb, 0xee, 0x38, 0xee, + 0x03, 0xef, 0xcb, 0xee, 0x42, 0xf5, 0x83, 0xf9, 0xed, 0xff, 0x16, 0x08, + 0x18, 0x0d, 0x4b, 0x0f, 0x87, 0x13, 0x4f, 0x12, 0x72, 0x10, 0xf6, 0x12, + 0x3e, 0x10, 0x1a, 0x0f, 0xcb, 0x0a, 0x85, 0x03, 0x3d, 0xfd, 0xc9, 0xf8, + 0x81, 0xf3, 0xab, 0xf1, 0xe5, 0xef, 0xe3, 0xee, 0x96, 0xf1, 0xb7, 0xf4, + 0x6d, 0xf9, 0xd6, 0x01, 0x6f, 0x06, 0xdd, 0x0a, 0xc1, 0x0c, 0xd7, 0x0b, + 0xd8, 0x08, 0xdf, 0x03, 0x27, 0xfe, 0x5b, 0xf7, 0x7e, 0xef, 0x49, 0xe6, + 0x6a, 0xdf, 0xe3, 0xd8, 0xd8, 0xd5, 0xa3, 0xda, 0x57, 0xe3, 0x59, 0xea, + 0x4a, 0xf3, 0xc0, 0xfa, 0x49, 0x01, 0x40, 0x09, 0x31, 0x11, 0x20, 0x16, + 0xce, 0x17, 0x79, 0x19, 0x14, 0x1c, 0x5c, 0x1c, 0x1a, 0x1b, 0xfe, 0x15, + 0xcb, 0x13, 0x74, 0x12, 0x5b, 0x0e, 0xeb, 0x08, 0x79, 0x01, 0x6e, 0xfb, + 0x1f, 0xf7, 0x31, 0xf4, 0x0d, 0xf3, 0x58, 0xf3, 0xb5, 0xf6, 0xff, 0xf5, + 0x25, 0xf9, 0x82, 0xfb, 0x38, 0xff, 0xb0, 0x03, 0x83, 0x08, 0xfb, 0x0c, + 0x94, 0x11, 0x40, 0x14, 0x00, 0x14, 0x3b, 0x11, 0x3e, 0x0c, 0x17, 0x0a, + 0xfd, 0x05, 0x31, 0x01, 0x97, 0xfb, 0xdb, 0xf5, 0xc7, 0xf1, 0x0e, 0xf1, + 0x94, 0xf1, 0x2b, 0xf5, 0x99, 0xf9, 0x68, 0xfa, 0xf0, 0xfb, 0x3b, 0xfe, + 0xb7, 0x00, 0xa0, 0x03, 0x64, 0x06, 0x92, 0x05, 0xe5, 0x03, 0xbf, 0xfd, + 0x81, 0xf9, 0xde, 0xf0, 0xb2, 0xe7, 0x36, 0xdf, 0xa8, 0xd6, 0x0a, 0xd3, + 0x1d, 0xd9, 0x4d, 0xe2, 0x6d, 0xed, 0x82, 0xf5, 0xf0, 0xfb, 0x30, 0x03, + 0x16, 0x0a, 0x12, 0x0f, 0x2f, 0x13, 0x54, 0x17, 0x51, 0x17, 0xfe, 0x1d, + 0x22, 0x22, 0x7f, 0x21, 0xcb, 0x21, 0x4b, 0x1d, 0x79, 0x15, 0xd3, 0x0d, + 0xa6, 0x06, 0x12, 0xff, 0xc6, 0xfb, 0xef, 0xf6, 0x4d, 0xf3, 0x1d, 0xf2, + 0xf8, 0xef, 0x5d, 0xf2, 0xcc, 0xf6, 0xff, 0xf9, 0xd7, 0xfc, 0x82, 0x00, + 0xb2, 0x02, 0x04, 0x07, 0x0b, 0x0d, 0x55, 0x0f, 0x43, 0x11, 0x83, 0x12, + 0x19, 0x0d, 0x77, 0x0a, 0xf3, 0x05, 0xd1, 0x02, 0x48, 0xff, 0x59, 0xf9, + 0xd4, 0xf3, 0x73, 0xf0, 0x20, 0xf2, 0x46, 0xf4, 0x2b, 0xf8, 0x90, 0xfb, + 0xa4, 0xfc, 0x2b, 0xfe, 0x16, 0x03, 0xb0, 0x07, 0x2d, 0x0b, 0xee, 0x08, + 0xdd, 0x08, 0xc9, 0x06, 0x91, 0xff, 0xc1, 0xfa, 0x1e, 0xf1, 0x3d, 0xeb, + 0x39, 0xe4, 0x0d, 0xdf, 0x75, 0xd8, 0x1d, 0xd7, 0x25, 0xd7, 0x03, 0xde, + 0xb4, 0xe8, 0x24, 0xf1, 0x10, 0xfb, 0x9c, 0x06, 0x52, 0x0b, 0x8e, 0x12, + 0xa8, 0x16, 0xc5, 0x1b, 0x89, 0x20, 0xb8, 0x21, 0x03, 0x21, 0x51, 0x1d, + 0xc8, 0x17, 0x63, 0x14, 0x7f, 0x12, 0xa8, 0x0d, 0xa9, 0x09, 0x9e, 0x02, + 0x9b, 0xfa, 0xfb, 0xf6, 0x1b, 0xf2, 0x6d, 0xef, 0x15, 0xf1, 0x80, 0xf3, + 0x3f, 0xf6, 0xb6, 0xfc, 0x25, 0x00, 0x86, 0x05, 0x78, 0x0a, 0x4b, 0x0e, + 0x2d, 0x11, 0x02, 0x11, 0x49, 0x0f, 0x8d, 0x0d, 0x37, 0x08, 0x81, 0x03, + 0x15, 0xff, 0x92, 0xf8, 0xa2, 0xf5, 0x0a, 0xf3, 0x6f, 0xef, 0x19, 0xee, + 0xa9, 0xf1, 0xf2, 0xf3, 0x44, 0xfc, 0x01, 0x02, 0x32, 0x05, 0x34, 0x08, + 0xaf, 0x08, 0xc2, 0x07, 0x8a, 0x0b, 0xdc, 0x0a, 0x36, 0x08, 0xc4, 0x04, + 0xb8, 0xff, 0xc4, 0xfa, 0x8b, 0xf5, 0xbb, 0xef, 0x25, 0xe8, 0xdc, 0xde, + 0x56, 0xd9, 0x4f, 0xd4, 0xc4, 0xd8, 0xee, 0xdf, 0xc4, 0xe9, 0x1b, 0xf5, + 0xb5, 0xfe, 0xc5, 0x05, 0x33, 0x09, 0xbb, 0x0a, 0x88, 0x0d, 0xb7, 0x0d, + 0xcc, 0x12, 0xf3, 0x1a, 0xbc, 0x1a, 0xf2, 0x1a, 0x12, 0x1b, 0x96, 0x17, + 0x2c, 0x16, 0x94, 0x11, 0xb1, 0x0a, 0xf2, 0x04, 0x84, 0x01, 0xff, 0xff, + 0xa0, 0xfe, 0x6c, 0xfb, 0x59, 0xf8, 0x5a, 0xf8, 0xd0, 0xf8, 0xba, 0xfd, + 0x4d, 0x02, 0x66, 0x06, 0x81, 0x09, 0xc0, 0x08, 0x3f, 0x08, 0xd2, 0x06, + 0xed, 0x01, 0x77, 0x00, 0xec, 0xfd, 0x18, 0xfa, 0x1d, 0xf6, 0x6f, 0xf3, + 0xb3, 0xf0, 0x90, 0xf1, 0x31, 0xf2, 0x27, 0xf4, 0x5b, 0xf8, 0xb6, 0xfb, + 0xf0, 0x00, 0x1e, 0x07, 0x03, 0x08, 0x09, 0x09, 0x10, 0x0b, 0xf9, 0x0b, + 0x12, 0x0f, 0x56, 0x0f, 0xa0, 0x0b, 0xc9, 0x06, 0x4a, 0x02, 0x3b, 0xfc, + 0x26, 0xfa, 0x84, 0xf1, 0x71, 0xe9, 0x94, 0xe3, 0xaf, 0xdf, 0x7f, 0xe0, + 0xb0, 0xe1, 0x12, 0xe0, 0x24, 0xe4, 0x73, 0xea, 0x3c, 0xf1, 0x3e, 0xfa, + 0x87, 0x01, 0x8d, 0x08, 0x6a, 0x0f, 0x05, 0x14, 0x80, 0x15, 0x53, 0x1a, + 0xc0, 0x1b, 0x23, 0x19, 0x9a, 0x16, 0x43, 0x14, 0x4f, 0x11, 0xdd, 0x0d, + 0x7a, 0x0b, 0xde, 0x06, 0xdc, 0x02, 0x0a, 0x01, 0xcd, 0xfe, 0xb6, 0xfe, + 0xf5, 0xfb, 0x9c, 0xfc, 0x38, 0xfe, 0xc5, 0xfe, 0x56, 0xfd, 0xd2, 0xfd, + 0x1b, 0xff, 0xb4, 0x01, 0xd9, 0x05, 0x0c, 0x06, 0xac, 0x07, 0x4f, 0x07, + 0xdb, 0x03, 0xed, 0xff, 0xdd, 0xfb, 0xef, 0xf7, 0xbc, 0xf5, 0xfc, 0xf3, + 0x71, 0xf3, 0x33, 0xf5, 0x98, 0xf6, 0x84, 0xf7, 0x98, 0xf9, 0x74, 0xfb, + 0xc4, 0x01, 0x81, 0x06, 0xc0, 0x09, 0xd3, 0x0b, 0x32, 0x0a, 0x21, 0x0a, + 0xb6, 0x0a, 0x28, 0x0a, 0xb5, 0x08, 0x20, 0x06, 0x61, 0x00, 0xcc, 0xfc, + 0x9d, 0xf6, 0x91, 0xf1, 0xb1, 0xe9, 0x48, 0xe0, 0xaf, 0xda, 0xae, 0xda, + 0xa6, 0xde, 0xeb, 0xe2, 0x6c, 0xea, 0x90, 0xf1, 0x0a, 0xf9, 0x46, 0x01, + 0x51, 0x08, 0xb0, 0x0e, 0x31, 0x14, 0x14, 0x15, 0x2d, 0x15, 0x5c, 0x14, + 0x4f, 0x15, 0xb1, 0x15, 0xb3, 0x15, 0x87, 0x15, 0x58, 0x13, 0x72, 0x12, + 0x61, 0x0d, 0x1f, 0x06, 0x64, 0xfe, 0xd5, 0xf9, 0x1c, 0xf6, 0x5b, 0xf7, + 0x29, 0xf4, 0x97, 0xf3, 0x6b, 0xfa, 0xaa, 0xff, 0x63, 0x03, 0x80, 0x06, + 0x4c, 0x07, 0x4b, 0x07, 0x08, 0x0a, 0xee, 0x05, 0xd9, 0x03, 0xaf, 0x01, + 0xba, 0xfc, 0xcd, 0xf9, 0x55, 0xf7, 0x0b, 0xf4, 0x18, 0xf5, 0x8f, 0xf5, + 0x34, 0xf7, 0x1d, 0xf6, 0x4f, 0xf7, 0xe1, 0xf8, 0x00, 0xfc, 0xcf, 0x02, + 0xf7, 0x07, 0xda, 0x0b, 0xd3, 0x0e, 0xa6, 0x0f, 0x1e, 0x0e, 0xa1, 0x0e, + 0xd0, 0x0c, 0x0f, 0x08, 0x03, 0x05, 0x7c, 0x01, 0xee, 0xfe, 0xec, 0xfc, + 0x1c, 0xf7, 0x85, 0xf3, 0x01, 0xee, 0xe9, 0xe9, 0x61, 0xe9, 0x30, 0xe9, + 0x52, 0xe7, 0xea, 0xea, 0x49, 0xeb, 0x0c, 0xed, 0x93, 0xf1, 0x37, 0xf6, + 0x15, 0xfe, 0x70, 0x06, 0xbf, 0x0a, 0xf1, 0x0c, 0x43, 0x12, 0x1a, 0x15, + 0x78, 0x19, 0x94, 0x19, 0x2b, 0x1a, 0x1a, 0x18, 0x35, 0x11, 0xa0, 0x09, + 0xa2, 0x06, 0x4c, 0x09, 0xa4, 0x09, 0xda, 0x09, 0xd7, 0x05, 0x67, 0xf9, + 0x98, 0xf2, 0x7f, 0xf1, 0x9c, 0xf3, 0x31, 0xf9, 0x05, 0xfb, 0x2f, 0xfb, + 0xb0, 0xf9, 0x08, 0xf8, 0x6b, 0xf9, 0xe3, 0xfc, 0xb9, 0xff, 0xf0, 0x03, + 0x11, 0x04, 0xa8, 0xfc, 0xb4, 0xf5, 0xaf, 0xf1, 0x40, 0xf2, 0x51, 0xf8, + 0x1f, 0xfd, 0x6f, 0x00, 0xd1, 0x03, 0x54, 0x04, 0x4a, 0x05, 0x1b, 0x07, + 0x3f, 0x06, 0x86, 0x04, 0x50, 0x04, 0xb3, 0x03, 0x99, 0x03, 0x08, 0x05, + 0x22, 0x09, 0x84, 0x0a, 0x79, 0x0a, 0xeb, 0x09, 0xca, 0x06, 0x93, 0x02, + 0x56, 0xff, 0x96, 0xfc, 0x1c, 0xf6, 0x39, 0xf3, 0x64, 0xec, 0x7e, 0xe8, + 0x87, 0xe2, 0xd0, 0xe4, 0x29, 0xe7, 0x4b, 0xef, 0x09, 0xf2, 0x88, 0xf4, + 0xb2, 0xf9, 0x3b, 0xfe, 0xb6, 0x04, 0x15, 0x0a, 0x6c, 0x0e, 0x32, 0x0f, + 0xea, 0x15, 0xd9, 0x16, 0x37, 0x19, 0xf5, 0x17, 0x06, 0x15, 0xc0, 0x0e, + 0xe5, 0x09, 0x2f, 0x07, 0x0e, 0x00, 0x2b, 0xfd, 0x5a, 0xfa, 0xf8, 0xf9, + 0x20, 0xfd, 0xb8, 0x01, 0x04, 0x03, 0x9b, 0xfe, 0x38, 0xf9, 0x35, 0xf7, + 0x96, 0xf9, 0xdb, 0xfc, 0x6d, 0xff, 0x78, 0xfc, 0x6d, 0xfc, 0xa7, 0xfd, + 0xe0, 0x01, 0x99, 0x02, 0xcd, 0x04, 0xdf, 0x00, 0x85, 0xfc, 0xb3, 0xf9, + 0x72, 0xf7, 0x53, 0xf5, 0x30, 0xf6, 0x05, 0xfa, 0xd7, 0xfd, 0xc3, 0xfe, + 0xf0, 0x00, 0x29, 0x03, 0x2b, 0x03, 0xce, 0x05, 0x74, 0x08, 0x0b, 0x0a, + 0xc0, 0x0a, 0x36, 0x0d, 0x8d, 0x0d, 0x6f, 0x0d, 0x5e, 0x0d, 0x5d, 0x09, + 0x47, 0x07, 0xd2, 0x07, 0x2d, 0x02, 0x5c, 0xfa, 0x76, 0xf1, 0x2d, 0xe9, + 0x52, 0xe7, 0x61, 0xe7, 0x5c, 0xe9, 0x0a, 0xeb, 0xd7, 0xeb, 0xfa, 0xef, + 0xd6, 0xf6, 0xe6, 0xfe, 0x83, 0x03, 0x7d, 0x08, 0xa3, 0x0a, 0x0a, 0x0d, + 0xe9, 0x0d, 0xbf, 0x0c, 0x60, 0x10, 0xf6, 0x11, 0xe7, 0x12, 0x94, 0x0e, + 0x3c, 0x07, 0x6f, 0x02, 0x72, 0x03, 0x90, 0x02, 0x83, 0x05, 0xff, 0x04, + 0x2d, 0x04, 0x4b, 0x01, 0xa6, 0xf7, 0x93, 0xef, 0x13, 0xef, 0x26, 0xfb, + 0xb3, 0x03, 0x08, 0x05, 0xc8, 0x00, 0x20, 0xf9, 0xcb, 0xf6, 0xa9, 0xfd, + 0x37, 0x03, 0x1a, 0x06, 0x0f, 0x04, 0x97, 0x00, 0xa7, 0xfb, 0xa5, 0xf7, + 0x34, 0xf8, 0x51, 0xfa, 0x60, 0xfd, 0x9c, 0xff, 0x06, 0xfe, 0x0c, 0xfb, + 0xb6, 0xf8, 0x17, 0xf9, 0x03, 0xfe, 0xb5, 0x03, 0x78, 0x08, 0x35, 0x0b, + 0x6b, 0x0c, 0x69, 0x0c, 0x11, 0x0c, 0x2e, 0x0f, 0xd1, 0x0d, 0x10, 0x0e, + 0x23, 0x0c, 0xe0, 0x09, 0x9f, 0x05, 0x67, 0x02, 0x4e, 0xfe, 0x26, 0xfa, + 0x29, 0xf9, 0x6c, 0xf8, 0xa0, 0xf5, 0xbd, 0xf1, 0xeb, 0xec, 0x01, 0xec, + 0x93, 0xee, 0x47, 0xf4, 0x0d, 0xfa, 0xe9, 0xfc, 0xb1, 0xff, 0x8c, 0x01, + 0x9a, 0x03, 0x6e, 0x04, 0x19, 0x04, 0x6a, 0x07, 0x07, 0x08, 0x10, 0x09, + 0x69, 0x0b, 0xb0, 0x0a, 0x85, 0x0a, 0x82, 0x0a, 0x39, 0x09, 0xc0, 0x05, + 0x67, 0x00, 0xea, 0xfa, 0xae, 0xf6, 0x0e, 0xf8, 0x01, 0xfd, 0x91, 0xff, + 0x3e, 0x01, 0x81, 0x02, 0x17, 0x02, 0x90, 0xff, 0xee, 0xfb, 0x1a, 0xf8, + 0x52, 0xf6, 0x7d, 0xf7, 0x0c, 0xfb, 0x25, 0xfd, 0xb6, 0xff, 0x54, 0x02, + 0xaf, 0x05, 0xc9, 0x04, 0x1f, 0x02, 0x96, 0xfe, 0x47, 0xfa, 0x82, 0xf7, + 0x86, 0xf8, 0x04, 0xfb, 0x4e, 0xfa, 0x0e, 0xfb, 0xe0, 0xfd, 0x70, 0x02, + 0xb8, 0x07, 0xe0, 0x0b, 0xee, 0x0b, 0xcd, 0x08, 0x74, 0x08, 0x5a, 0x08, + 0x0b, 0x09, 0xe3, 0x08, 0x54, 0x09, 0x02, 0x08, 0xe8, 0x06, 0x76, 0x06, + 0x44, 0x05, 0xa9, 0x02, 0xc4, 0x00, 0xf5, 0xfd, 0xbe, 0xfb, 0x5f, 0xfa, + 0x6f, 0xf9, 0x26, 0xf7, 0x23, 0xf6, 0x94, 0xf7, 0x9c, 0xf9, 0x5c, 0xfc, + 0x6d, 0xff, 0xa9, 0x01, 0x22, 0x02, 0x7a, 0x04, 0x4b, 0x04, 0x87, 0x04, + 0x2d, 0x05, 0xbd, 0x03, 0xa2, 0x04, 0x7c, 0x04, 0x1c, 0x04, 0x95, 0x04, + 0x90, 0x03, 0x14, 0x01, 0x38, 0x02, 0x2b, 0x00, 0x8b, 0xfe, 0x93, 0xfe, + 0x5c, 0xfe, 0x33, 0xff, 0x12, 0xff, 0x8c, 0xfe, 0x4b, 0xfb, 0xd4, 0xfb, + 0x00, 0xfc, 0x94, 0xf8, 0x3e, 0xf8, 0x6a, 0xfb, 0x0a, 0xfe, 0xa4, 0xfe, + 0x96, 0x00, 0x22, 0x00, 0x0c, 0xfb, 0x39, 0xf9, 0x5b, 0xfa, 0xda, 0xfc, + 0xa2, 0xfe, 0xae, 0x00, 0x06, 0x01, 0x3d, 0x01, 0xef, 0x00, 0x35, 0x00, + 0x6f, 0xfe, 0x94, 0x00, 0xf1, 0x03, 0x79, 0x04, 0xfe, 0x05, 0xb2, 0x04, + 0x77, 0x05, 0xf7, 0x05, 0xa6, 0x07, 0xd0, 0x08, 0x64, 0x08, 0xf0, 0x08, + 0xd0, 0x06, 0xaf, 0x04, 0x44, 0x04, 0x8f, 0x03, 0x38, 0x01, 0x01, 0xff, + 0x4b, 0xfe, 0xc5, 0xfe, 0x57, 0x00, 0xe7, 0x02, 0x82, 0x02, 0xc8, 0x00, + 0x49, 0x03, 0xb5, 0x04, 0x40, 0x03, 0xdb, 0x01, 0x09, 0xff, 0xc9, 0xfd, + 0x71, 0xfb, 0x35, 0xfe, 0x4e, 0xff, 0x07, 0xff, 0xce, 0xfe, 0xb2, 0xfd, + 0xc9, 0xfd, 0xd4, 0xff, 0x10, 0x01, 0x60, 0xff, 0x99, 0xfe, 0xe9, 0xfe, + 0xe5, 0xfe, 0x89, 0xff, 0xe4, 0xff, 0xa7, 0xff, 0xc3, 0x00, 0x03, 0x01, + 0xed, 0x01, 0x8d, 0x00, 0xf9, 0xfc, 0x05, 0xfa, 0x20, 0xf9, 0x39, 0xfa, + 0x3e, 0xfa, 0x3a, 0xfb, 0x2b, 0xfe, 0xed, 0xff, 0x13, 0x00, 0x57, 0xfe, + 0x69, 0xfa, 0x1a, 0xf7, 0x03, 0xf8, 0x4a, 0xf9, 0xb5, 0xfa, 0x0d, 0xfd, + 0x0f, 0xff, 0x0a, 0x01, 0x5c, 0x04, 0x28, 0x06, 0xb8, 0x06, 0x90, 0x04, + 0x88, 0x04, 0x7c, 0x05, 0x4e, 0x04, 0x4c, 0x06, 0xa2, 0x06, 0x58, 0x04, + 0x41, 0x03, 0xed, 0x03, 0xeb, 0x03, 0xe5, 0x03, 0x44, 0x04, 0x46, 0x04, + 0x81, 0x04, 0x6e, 0x03, 0xa1, 0x01, 0x48, 0x01, 0x10, 0x02, 0xde, 0x02, + 0x85, 0x04, 0x67, 0x05, 0x4b, 0x05, 0x68, 0x04, 0x65, 0x03, 0x39, 0x02, + 0xd5, 0x01, 0x31, 0x03, 0x51, 0x03, 0x45, 0x02, 0x57, 0x02, 0xb4, 0x00, + 0x10, 0xff, 0xb2, 0xfc, 0x62, 0xfc, 0x79, 0xfb, 0x1d, 0xfc, 0x81, 0xfc, + 0xda, 0xfc, 0x53, 0xfc, 0xd3, 0xfa, 0x12, 0xfb, 0x3c, 0xfa, 0x5c, 0xfa, + 0x67, 0xfd, 0xab, 0xfe, 0x1c, 0xff, 0x18, 0x01, 0xd5, 0x01, 0x7a, 0x01, + 0x5b, 0x01, 0x33, 0xfe, 0xd4, 0xfc, 0x6a, 0xfd, 0x14, 0xfe, 0xb7, 0xfe, + 0x25, 0xfe, 0x41, 0xfc, 0x28, 0xfa, 0xbd, 0xfa, 0x02, 0xf9, 0xce, 0xf8, + 0x30, 0xf8, 0x21, 0xfa, 0x24, 0xfc, 0xe6, 0xfb, 0x4e, 0xfc, 0x19, 0xfe, + 0x8b, 0xfe, 0xe8, 0xff, 0x71, 0x01, 0xae, 0x02, 0x66, 0x03, 0x8f, 0x03, + 0x71, 0x03, 0xfd, 0x03, 0x4b, 0x04, 0x70, 0x06, 0xcc, 0x05, 0x60, 0x04, + 0xf0, 0x02, 0xdb, 0x01, 0x77, 0xff, 0x05, 0x00, 0x6b, 0xff, 0xcc, 0xff, + 0x36, 0x01, 0x57, 0x01, 0x2c, 0x02, 0x17, 0x02, 0x27, 0x01, 0xbf, 0x01, + 0x1a, 0x03, 0x71, 0x01, 0x6e, 0x02, 0x32, 0x03, 0x68, 0x03, 0x1d, 0x05, + 0x9c, 0x05, 0x20, 0x06, 0xfe, 0x05, 0xe1, 0x05, 0x1e, 0x04, 0x05, 0x02, + 0x6a, 0x02, 0x8d, 0x00, 0xe0, 0xfe, 0x93, 0xfd, 0x53, 0xfc, 0xc1, 0xfa, + 0x04, 0xfb, 0xb4, 0xfb, 0x5e, 0xfc, 0xc3, 0xfc, 0x5c, 0xfd, 0x58, 0xfd, + 0xfe, 0xfd, 0xda, 0xff, 0x68, 0x00, 0xfa, 0xff, 0x85, 0x00, 0x7a, 0x00, + 0x14, 0x00, 0x84, 0x00, 0x3d, 0x01, 0x36, 0x00, 0x72, 0xfd, 0x72, 0xfb, + 0x4b, 0xf9, 0x28, 0xf9, 0x28, 0xfa, 0x33, 0xfa, 0x82, 0xf6, 0x9b, 0xf7, + 0x06, 0xfa, 0xc4, 0xfd, 0x7d, 0xfe, 0xb7, 0xfe, 0xf5, 0xff, 0xcb, 0xfe, + 0x1e, 0xfe, 0x7f, 0xfe, 0xbc, 0xfd, 0x9c, 0xfe, 0x92, 0x00, 0xe3, 0x00, + 0x3c, 0x02, 0x7b, 0xff, 0x11, 0xfe, 0x5e, 0xff, 0x93, 0xff, 0xbe, 0xfe, + 0x41, 0x00, 0x88, 0xfd, 0x2c, 0xfd, 0xc7, 0xfe, 0xb0, 0x00, 0x00, 0x02, + 0x33, 0x02, 0x55, 0x01, 0xa7, 0x00, 0x39, 0xff, 0x81, 0x00, 0x17, 0x00, + 0x83, 0x00, 0x7c, 0x02, 0x64, 0x03, 0xe3, 0x01, 0x14, 0x01, 0x1a, 0x03, + 0x99, 0x03, 0x90, 0x02, 0xa2, 0x02, 0xaf, 0x00, 0x75, 0x00, 0x26, 0xff, + 0x9b, 0xfe, 0x4e, 0xfa, 0xd0, 0xfd, 0x4b, 0xff, 0x58, 0xff, 0x8d, 0x00, + 0xbe, 0x01, 0x97, 0x02, 0x9c, 0x00, 0x5b, 0x01, 0xbe, 0xff, 0xe6, 0xfe, + 0x4e, 0xff, 0xfe, 0x00, 0x23, 0x02, 0xa0, 0x02, 0xc1, 0x01, 0x7a, 0x01, + 0x09, 0x00, 0x30, 0xff, 0xf1, 0xfd, 0x40, 0xfe, 0xbe, 0xfc, 0x0e, 0xfb, + 0xb2, 0xf9, 0x71, 0xfb, 0x32, 0xfb, 0xe5, 0xfc, 0x07, 0xfe, 0x98, 0xfe, + 0x95, 0xfe, 0x13, 0xff, 0xea, 0xfe, 0x6e, 0xfe, 0x87, 0xff, 0x9f, 0xff, + 0xd0, 0x00, 0x09, 0x01, 0xe6, 0x00, 0x64, 0x00, 0xcc, 0xff, 0x8f, 0xfe, + 0x88, 0xfd, 0x46, 0xff, 0x35, 0xfe, 0x8f, 0xfd, 0xbe, 0xfd, 0x06, 0xfe, + 0x39, 0xff, 0x07, 0x01, 0x1f, 0x01, 0xc8, 0x00, 0x6c, 0xff, 0x79, 0xff, + 0x2e, 0x00, 0x80, 0xff, 0xa5, 0xfd, 0x6c, 0xff, 0x09, 0x00, 0x4c, 0x00, + 0xa5, 0xff, 0x23, 0xfe, 0xd9, 0xfd, 0xd1, 0xfd, 0xe1, 0xfe, 0x46, 0x00, + 0x8c, 0xff, 0x2f, 0x00, 0x6b, 0x01, 0xf7, 0x00, 0x9e, 0x01, 0xb3, 0x01, + 0x01, 0xff, 0x80, 0x00, 0x03, 0x01, 0x50, 0x02, 0xa5, 0x02, 0xcc, 0x00, + 0x36, 0x01, 0x5a, 0x00, 0xd0, 0xff, 0x78, 0xfe, 0x77, 0xfe, 0x35, 0xff, + 0xe0, 0xff, 0x9e, 0xff, 0x78, 0xff, 0x7a, 0xff, 0x92, 0x01, 0x33, 0x00, + 0x93, 0x01, 0x30, 0x00, 0x8c, 0xfe, 0x38, 0xfe, 0x0d, 0xff, 0x0f, 0xff, + 0xe1, 0xfe, 0x8e, 0xff, 0xa7, 0xff, 0xfb, 0xfe, 0x86, 0xfe, 0x2c, 0xff, + 0xa1, 0xfd, 0x58, 0xfd, 0xb4, 0xfd, 0x3c, 0xfe, 0x24, 0xfc, 0xa3, 0xfd, + 0x29, 0x01, 0x77, 0x00, 0x29, 0x00, 0xe6, 0xff, 0xc1, 0xff, 0x5c, 0x00, + 0xd9, 0xff, 0x6d, 0xff, 0xa5, 0x00, 0xb2, 0xfe, 0x4e, 0xff, 0xe3, 0xff, + 0xb6, 0xff, 0x75, 0xfe, 0x1d, 0x00, 0x23, 0x00, 0x92, 0xfe, 0x7f, 0xff, + 0xc1, 0xff, 0xd4, 0xfc, 0x61, 0xff, 0xc7, 0x01, 0x6d, 0xff, 0xc5, 0xff, + 0xa6, 0x00, 0xf7, 0xff, 0x55, 0xff, 0xc2, 0xfe, 0x50, 0xfe, 0x57, 0xff, + 0xe8, 0xfe, 0x82, 0x01, 0x58, 0x00, 0xd4, 0x00, 0x5c, 0x00, 0xc6, 0xff, + 0xe0, 0x01, 0xa3, 0xff, 0x2a, 0x00, 0x86, 0xff, 0x0c, 0x01, 0x80, 0x00, + 0x58, 0x00, 0x04, 0xfe, 0xf0, 0xff, 0x29, 0x01, 0x1b, 0x01, 0xc8, 0xfd, + 0xbb, 0xff, 0xdb, 0x00, 0xf7, 0xff, 0x08, 0x01, 0xb6, 0x01, 0xa4, 0x00, + 0x17, 0x01, 0x83, 0x01, 0x06, 0x03, 0xaa, 0x00, 0xf6, 0xff, 0x12, 0xff, + 0xc6, 0xff, 0xcd, 0xfd, 0x40, 0xfe, 0xdd, 0xfe, 0xe0, 0xfd, 0x09, 0xff, + 0x8e, 0xfe, 0x6f, 0x00, 0x57, 0xff, 0x7e, 0xff, 0xeb, 0xfe, 0x9e, 0x00, + 0x33, 0x00, 0xf2, 0xff, 0xfc, 0xfe, 0xe8, 0xff, 0xb0, 0xfd, 0x64, 0x02, + 0xda, 0x01, 0x8c, 0x01, 0x5d, 0xff, 0xb5, 0xfc, 0xbf, 0xfd, 0xa5, 0xff, + 0x8f, 0xff, 0x90, 0xff, 0x9a, 0xfe, 0x75, 0xff, 0x62, 0xff, 0x0c, 0x00, + 0x55, 0xff, 0x92, 0xff, 0xd7, 0xfe, 0xa3, 0xff, 0x0b, 0x00, 0xeb, 0x00, + 0xd7, 0xfe, 0xe4, 0x00, 0x4f, 0x01, 0xdc, 0x02, 0xae, 0x02, 0xdf, 0x02, + 0xae, 0xff, 0xd8, 0x00, 0x7a, 0x01, 0x5c, 0x02, 0x6f, 0x04, 0xb8, 0x01, + 0xfc, 0xff, 0x1c, 0x01, 0x60, 0xff, 0x91, 0x01, 0x21, 0x01, 0xc0, 0xff, + 0x21, 0x00, 0x0c, 0x05, 0xb3, 0x04, 0x36, 0x05, 0x55, 0x03, 0x01, 0x00, + 0xa7, 0x00, 0xc0, 0xfe, 0xd4, 0xff, 0xe7, 0x00, 0xfe, 0x02, 0xf5, 0x01, + 0xb7, 0x00, 0x35, 0xff, 0x54, 0xff, 0x64, 0x00, 0x80, 0xff, 0x29, 0x00, + 0xfd, 0x02, 0x69, 0x00, 0xcc, 0xff, 0xd0, 0x03, 0x60, 0x01, 0x70, 0xff, + 0xce, 0xfe, 0x50, 0xff, 0xdd, 0x00, 0xa1, 0x00, 0x20, 0xfe, 0xcc, 0xfb, + 0xb5, 0xff, 0xa2, 0xff, 0x63, 0x01, 0xe1, 0xfc, 0xd3, 0xfd, 0xd9, 0xfd, + 0x94, 0xfd, 0xff, 0xfe, 0xc4, 0xfe, 0x75, 0x00, 0xa4, 0xff, 0xe5, 0xfc, + 0x80, 0x00, 0xd4, 0xff, 0xb5, 0x00, 0x04, 0x00, 0x15, 0x00, 0x1e, 0xff, + 0xc0, 0xfe, 0x7b, 0xfe, 0xc1, 0x01, 0xb2, 0x00, 0xef, 0x01, 0x61, 0x00, + 0x56, 0x01, 0xe2, 0xff, 0x0c, 0xff, 0xb2, 0x01, 0xa5, 0xff, 0xf2, 0xff, + 0x15, 0x02, 0xa7, 0x01, 0xaf, 0x02, 0x94, 0x00, 0x40, 0x01, 0x04, 0x01, + 0x6e, 0x00, 0x10, 0x01, 0xa1, 0xff, 0x74, 0x02, 0xfe, 0x01, 0x39, 0x02, + 0xc0, 0x01, 0xe3, 0x01, 0x2c, 0x01, 0xcb, 0x01, 0x09, 0x00, 0x32, 0x01, + 0xd2, 0xff, 0x5b, 0xff, 0xd6, 0xfe, 0x5e, 0x00, 0x67, 0x01, 0x39, 0xff, + 0x80, 0x00, 0x6f, 0x01, 0x48, 0xfe, 0x33, 0x02, 0x98, 0x01, 0xe0, 0xfd, + 0xd3, 0x00, 0xeb, 0x00, 0x1e, 0x00, 0xf7, 0x01, 0x65, 0x01, 0x83, 0xff, + 0x33, 0x03, 0x95, 0x01, 0xf2, 0x01, 0x70, 0x01, 0x87, 0x00, 0x17, 0x00, + 0x59, 0xfe, 0x65, 0x01, 0x7c, 0xfe, 0xf3, 0xfe, 0xc0, 0x00, 0x3c, 0x00, + 0xe9, 0xff, 0x23, 0xff, 0xf8, 0xfe, 0x29, 0xfe, 0xef, 0xfe, 0x2a, 0xff, + 0x46, 0xfe, 0xb2, 0xff, 0x40, 0x00, 0x3e, 0xff, 0x60, 0xff, 0xd2, 0xff, + 0x8d, 0xff, 0x91, 0xff, 0x1a, 0xff, 0x1d, 0xfe, 0x0e, 0x01, 0xb4, 0xfe, + 0x1b, 0xff, 0xa1, 0xff, 0xb7, 0xfe, 0x4b, 0xff, 0xfc, 0xff, 0xa0, 0xfe, + 0xa5, 0xff, 0x98, 0xfe, 0xd4, 0xff, 0xb4, 0xff, 0xcc, 0x00, 0xa6, 0x02, + 0x0b, 0x01, 0xfb, 0xff, 0xce, 0x02, 0x41, 0x01, 0xb6, 0x01, 0xbe, 0x00, + 0x17, 0x03, 0x6c, 0x01, 0xae, 0xff, 0xc5, 0xff, 0x92, 0x01, 0xa8, 0xfe, + 0x18, 0xff, 0xdb, 0xfd, 0x30, 0x00, 0x29, 0x00, 0x06, 0x01, 0x3f, 0x01, + 0xed, 0x01, 0xc4, 0x01, 0xe1, 0xfe, 0x1f, 0x03, 0x66, 0x00, 0x86, 0x01, + 0xa8, 0x00, 0x34, 0x02, 0x71, 0xfe, 0x71, 0x00, 0x8c, 0xff, 0x0c, 0x01, + 0x87, 0x00, 0x78, 0x01, 0xb7, 0x01, 0x81, 0x01, 0xa1, 0xff, 0x39, 0x00, + 0xe6, 0xff, 0xd2, 0x03, 0x4e, 0x01, 0x3f, 0x00, 0xc4, 0x02, 0xc3, 0x00, + 0xed, 0xff, 0x42, 0x01, 0x59, 0x00, 0x77, 0xff, 0xc9, 0xfe, 0xb4, 0xff, + 0x70, 0xff, 0x29, 0x00, 0x86, 0xff, 0x36, 0x00, 0xa9, 0xfe, 0x5f, 0xff, + 0xa3, 0xff, 0xab, 0xfe, 0xbb, 0xff, 0x78, 0x03, 0x4b, 0x00, 0xab, 0x00, + 0x60, 0x00, 0xcb, 0xfc, 0x98, 0xfd, 0x85, 0xfd, 0x42, 0xff, 0xc6, 0xfd, + 0xf4, 0x00, 0x86, 0x00, 0xa4, 0xff, 0xce, 0xfe, 0x29, 0xff, 0x54, 0xff, + 0xd4, 0x01, 0x0b, 0x00, 0x06, 0x00, 0xf6, 0xff, 0xaf, 0xff, 0x54, 0x00, + 0x7e, 0x00, 0x60, 0x01, 0x2d, 0xff, 0x03, 0x01, 0x00, 0x00, 0xf1, 0xfd, + 0x9f, 0x00, 0x6e, 0x00, 0x84, 0x00, 0xed, 0xff, 0x32, 0x01, 0xd4, 0x01, + 0x52, 0x00, 0x55, 0x00, 0xaf, 0x03, 0xaa, 0x00, 0x4a, 0x01, 0x39, 0x02, + 0xc5, 0xff, 0xf0, 0xfd, 0x39, 0xff, 0x4b, 0xff, 0x16, 0xff, 0x6c, 0xfe, + 0x63, 0x00, 0xef, 0x01, 0xeb, 0x00, 0xea, 0x01, 0x81, 0xfc, 0x64, 0x02, + 0xa4, 0x00, 0x23, 0x00, 0x4c, 0x01, 0x37, 0x00, 0x9f, 0x00, 0xfa, 0xff, + 0xf7, 0x00, 0x0f, 0x00, 0x7a, 0xff, 0xbd, 0xfe, 0x5f, 0x00, 0x5d, 0x00, + 0x35, 0xfe, 0x99, 0xff, 0x07, 0x00, 0x3d, 0x01, 0x00, 0x00, 0xe2, 0x00, + 0xe5, 0x01, 0xd5, 0xff, 0x9f, 0xff, 0x57, 0x00, 0x90, 0xff, 0xea, 0xfe, + 0xd3, 0x00, 0x3e, 0x01, 0xac, 0x01, 0x6f, 0x01, 0xad, 0xff, 0x12, 0x01, + 0x06, 0x00, 0x74, 0xfe, 0xa1, 0xfe, 0xc1, 0xff, 0xff, 0xfe, 0xc4, 0x00, + 0xc2, 0xff, 0x0e, 0xff, 0x96, 0x00, 0x68, 0xff, 0x2e, 0xff, 0xa8, 0xfe, + 0xd5, 0xff, 0xe8, 0xfe, 0xf7, 0xfe, 0x3b, 0xff, 0xd8, 0xfe, 0x79, 0x00, + 0xc5, 0x00, 0x4b, 0xff, 0x2a, 0x00, 0xde, 0xfe, 0xfa, 0xfe, 0xab, 0xfc, + 0xd3, 0x01, 0x5c, 0xff, 0x07, 0x00, 0xd2, 0xfe, 0xee, 0xfb, 0x8f, 0x01, + 0x51, 0x00, 0x75, 0xff, 0xde, 0x01, 0xb1, 0x01, 0x56, 0x00, 0xc8, 0xff, + 0x4f, 0x02, 0x46, 0x00, 0x95, 0x00, 0x70, 0x01, 0x81, 0x01, 0xa9, 0x01, + 0x5f, 0x00, 0x13, 0x01, 0xcb, 0x00, 0x1b, 0x01, 0xb7, 0xff, 0xbf, 0x01, + 0x59, 0xfe, 0x69, 0x00, 0xdd, 0x00, 0x18, 0xff, 0x29, 0x00, 0x2e, 0x01, + 0x2f, 0x00, 0x8b, 0xfe, 0x2e, 0xff, 0x24, 0x01, 0x41, 0xff, 0x66, 0xfe, + 0x5e, 0xfd, 0x2e, 0xff, 0x83, 0xff, 0x44, 0x00, 0x84, 0x00, 0xcd, 0xff, + 0x21, 0x00, 0x74, 0xff, 0x66, 0xfd, 0xaf, 0xff, 0xce, 0xfe, 0x28, 0xff, + 0xb3, 0x02, 0xa0, 0x01, 0x42, 0x01, 0xdc, 0x01, 0xb1, 0xff, 0x2c, 0x00, + 0xf9, 0xff, 0x15, 0x00, 0x13, 0x00, 0xcd, 0xff, 0xf6, 0xfe, 0xce, 0xfe, + 0xa8, 0xfe, 0x89, 0xff, 0x53, 0xff, 0x40, 0xfd, 0x46, 0x00, 0x12, 0x00, + 0x6a, 0x00, 0x4b, 0xff, 0x41, 0x00, 0x8e, 0xfe, 0xe2, 0xff, 0x18, 0xfe, + 0x05, 0xfe, 0xa4, 0xfe, 0x48, 0xff, 0xed, 0xfe, 0xc6, 0xfd, 0x9e, 0xfd, + 0x11, 0xfe, 0xb0, 0xfe, 0xde, 0xff, 0x68, 0xff, 0x10, 0x00, 0x64, 0xff, + 0xed, 0xfe, 0x94, 0x01, 0x07, 0x02, 0x89, 0x01, 0x7d, 0x01, 0xc2, 0xff, + 0x1b, 0x01, 0xab, 0xfe, 0xfc, 0x00, 0x5a, 0x00, 0x3d, 0x01, 0x68, 0xff, + 0x06, 0x01, 0x51, 0xff, 0x7a, 0x00, 0x15, 0x01, 0x18, 0xff, 0x84, 0xfe, + 0x57, 0xff, 0xf8, 0x01, 0x1e, 0x01, 0x52, 0x00, 0x73, 0xff, 0xef, 0xfe, + 0x2a, 0x01, 0x30, 0xff, 0x9a, 0xff, 0x11, 0xff, 0x3d, 0xfe, 0x98, 0xff, + 0x20, 0xfe, 0x9b, 0xff, 0x57, 0x01, 0x5c, 0x01, 0xf2, 0xfc, 0xac, 0xff, + 0x9e, 0x00, 0xb2, 0xfe, 0x7f, 0x00, 0x54, 0xff, 0xe1, 0xff, 0x04, 0xff, + 0xdc, 0x01, 0xa5, 0x00, 0x47, 0xff, 0xfb, 0x00, 0x96, 0x00, 0x05, 0x00, + 0x56, 0x02, 0x1d, 0x00, 0xe2, 0xfe, 0xd0, 0xff, 0x5d, 0xfd, 0x49, 0xff, + 0xda, 0xfe, 0x61, 0x00, 0x43, 0xff, 0x33, 0xff, 0xe6, 0xfd, 0x98, 0x00, + 0x45, 0x00, 0x6b, 0x00, 0xf9, 0xff, 0xd8, 0xff, 0x4b, 0xff, 0x10, 0x01, + 0xd3, 0xfe, 0x52, 0xfe, 0x6e, 0xff, 0x6e, 0x01, 0xaa, 0xff, 0x1d, 0xfe, + 0x05, 0x01, 0x4f, 0x00, 0x7e, 0xff, 0x50, 0x00, 0x86, 0x00, 0x31, 0x00, + 0x3e, 0x00, 0x8d, 0x03, 0x80, 0x00, 0x0b, 0x01, 0xb3, 0xfe, 0xf7, 0xff, + 0xe5, 0xfe, 0xc8, 0xff, 0xf8, 0xff, 0xc0, 0xff, 0x52, 0x00, 0x1f, 0x00, + 0x7b, 0x00, 0x4c, 0x00, 0xb2, 0xfe, 0x1d, 0xff, 0xd9, 0xff, 0xf6, 0x00, + 0x93, 0xff, 0xe9, 0x00, 0x57, 0x00, 0x84, 0x00, 0x96, 0x00, 0x66, 0xff, + 0xe3, 0xfe, 0xa3, 0xfe, 0xb9, 0xff, 0x02, 0xff, 0xff, 0xfd, 0x3d, 0x00, + 0x7a, 0xff, 0xff, 0xfd, 0xd4, 0xff, 0x2e, 0xfe, 0x1e, 0xff, 0x6a, 0x01, + 0xdf, 0xff, 0xb6, 0x00, 0x82, 0x02, 0x45, 0x00, 0x4d, 0x00, 0xe0, 0x00, + 0x5b, 0x01, 0x98, 0xff, 0x06, 0x01, 0x00, 0x00, 0xfa, 0x00, 0xcc, 0xff, + 0x07, 0x01, 0xf8, 0xff, 0x0e, 0x00, 0x85, 0x01, 0x42, 0xff, 0xa8, 0x00, + 0xa5, 0xff, 0x61, 0x00, 0x91, 0xff, 0x3c, 0x00, 0x40, 0x01, 0x94, 0xfe, + 0xfd, 0xff, 0x2e, 0xff, 0xfb, 0xff, 0x0b, 0x00, 0x73, 0xff, 0xb8, 0xfe, + 0xc7, 0xfe, 0xcf, 0xfd, 0xa2, 0xff, 0xcd, 0xfd, 0x32, 0xff, 0x79, 0x00, + 0x9f, 0xfe, 0xdc, 0xff, 0x73, 0xff, 0xec, 0xfd, 0x40, 0x00, 0xa0, 0xff, + 0xf6, 0xfe, 0x5c, 0x01, 0x39, 0x00, 0x41, 0xff, 0x6c, 0x00, 0xb6, 0x01, + 0x0b, 0x00, 0x4f, 0x02, 0xef, 0x00, 0xbd, 0x00, 0x27, 0x01, 0x2e, 0x00, + 0x4c, 0x01, 0x5a, 0xff, 0x96, 0x01, 0xcf, 0xff, 0x6c, 0x01, 0x01, 0x00, + 0x97, 0x01, 0xb0, 0xfe, 0x8c, 0xff, 0xd3, 0xff, 0x95, 0xff, 0xc5, 0xfd, + 0x41, 0x00, 0x0c, 0xff, 0xf9, 0xfe, 0x2b, 0x00, 0xec, 0xfd, 0xea, 0x00, + 0x56, 0xff, 0xc7, 0xff, 0x33, 0x00, 0x2b, 0x00, 0x4d, 0xfd, 0xd1, 0xfe, + 0x9d, 0xff, 0xd4, 0xff, 0x9d, 0xff, 0xd9, 0x00, 0x0b, 0x01, 0x12, 0x01, + 0xfa, 0x01, 0xc8, 0x00, 0xae, 0x00, 0x68, 0xff, 0x5b, 0x03, 0x58, 0xfe, + 0xc7, 0x02, 0xb2, 0x01, 0xab, 0xfe, 0xc1, 0x00, 0x79, 0x00, 0xb8, 0xff, + 0x9f, 0x00, 0xd6, 0xfe, 0x24, 0xff, 0xaf, 0xfe, 0x5a, 0xff, 0x90, 0x00, + 0x49, 0xfb, 0x3e, 0x01, 0x53, 0xfd, 0xd2, 0x00, 0xb1, 0xfe, 0xcb, 0xff, + 0x5c, 0x00, 0x97, 0x00, 0x0a, 0xff, 0xc5, 0xff, 0xed, 0xfe, 0xe2, 0xfe, + 0x06, 0xff, 0x99, 0xff, 0x0a, 0x00, 0x4c, 0x00, 0xad, 0x01, 0xd9, 0xff, + 0xe6, 0x00, 0x98, 0x01, 0x37, 0x00, 0xcf, 0x00, 0x5e, 0xff, 0x91, 0x03, + 0x90, 0xff, 0x16, 0x01, 0x61, 0x00, 0xe8, 0xfd, 0x54, 0x01, 0xec, 0xff, + 0x58, 0x00, 0xd9, 0xff, 0xf1, 0xfe, 0x7e, 0xff, 0x7f, 0xff, 0x33, 0xff, + 0x09, 0xff, 0xff, 0xff, 0x66, 0xff, 0x4d, 0xff, 0x07, 0x01, 0x7c, 0xfe, + 0xd1, 0x00, 0x42, 0x02, 0xeb, 0xfe, 0xe6, 0xff, 0x14, 0x00, 0xe0, 0xfd, + 0x6d, 0x01, 0x26, 0xff, 0x13, 0x00, 0xb6, 0xff, 0xce, 0x00, 0xe4, 0xff, + 0x8a, 0x01, 0x37, 0x00, 0x11, 0x00, 0xa5, 0xfd, 0xd5, 0x00, 0xfa, 0x01, + 0xf4, 0xff, 0x40, 0x01, 0xd5, 0x00, 0x41, 0xff, 0xc7, 0xfe, 0xe9, 0xff, + 0xfa, 0xfe, 0x28, 0x01, 0xbc, 0x01, 0x9f, 0xff, 0x31, 0x02, 0x68, 0xff, + 0x1e, 0x00, 0x4f, 0xff, 0xe7, 0xfe, 0x53, 0xfe, 0x89, 0x00, 0xe9, 0xff, + 0x9f, 0xff, 0x38, 0xff, 0x9e, 0x00, 0x39, 0x00, 0x9b, 0xff, 0xb3, 0xff, + 0xa3, 0x00, 0x7f, 0x02, 0xf1, 0xfd, 0xa6, 0xff, 0xeb, 0x00, 0xf0, 0x00, + 0x33, 0x01, 0xd0, 0x03, 0xec, 0xff, 0xd9, 0x01, 0x4a, 0xff, 0x46, 0x01, + 0xbd, 0xfe, 0x7a, 0x00, 0xbf, 0x00, 0x76, 0xff, 0x93, 0xff, 0x06, 0x01, + 0x5f, 0x00, 0xf8, 0x00, 0x2c, 0x01, 0x32, 0x01, 0x0a, 0xff, 0xc6, 0x00, + 0x24, 0xff, 0x2f, 0xfe, 0xab, 0xfe, 0x6b, 0xfe, 0xe7, 0xfe, 0xb8, 0x00, + 0xa9, 0xff, 0x8c, 0xfe, 0x49, 0x00, 0x21, 0xff, 0xdc, 0xfe, 0x0a, 0xff, + 0x4f, 0x00, 0x71, 0xff, 0xc8, 0x00, 0x8a, 0xfe, 0xd7, 0x00, 0x21, 0x00, + 0xca, 0x00, 0x3d, 0x00, 0xf4, 0x00, 0x71, 0x00, 0x44, 0x00, 0x87, 0xff, + 0xa5, 0x01, 0x06, 0x00, 0xe2, 0xfe, 0xac, 0x00, 0x48, 0xff, 0x70, 0x00, + 0xfd, 0x00, 0x8c, 0x00, 0xb9, 0x01, 0xe8, 0x01, 0x5b, 0x01, 0xc2, 0xff, + 0x86, 0x00, 0x45, 0xff, 0xdd, 0xff, 0x04, 0x00, 0x45, 0x00, 0x9e, 0x00, + 0x94, 0xff, 0x9e, 0xff, 0x45, 0xff, 0x72, 0xff, 0xba, 0xfe, 0xa7, 0xff, + 0x7e, 0xff, 0xbd, 0xff, 0xe7, 0xfe, 0x56, 0x00, 0xea, 0x00, 0x04, 0xff, + 0x75, 0x00, 0x7c, 0xff, 0xcf, 0xff, 0xda, 0x00, 0xb6, 0xff, 0xf6, 0x00, + 0x1d, 0xff, 0x10, 0xff, 0x28, 0x00, 0x16, 0xff, 0xf1, 0xff, 0xa5, 0xff, + 0xe5, 0x00, 0x4f, 0xfe, 0x9b, 0x01, 0x53, 0x01, 0x19, 0xff, 0xcc, 0x00, + 0x66, 0xfe, 0xb5, 0x00, 0xdc, 0xfe, 0x21, 0x00, 0x82, 0x00, 0x85, 0x00, + 0x55, 0x00, 0xe6, 0xff, 0xf9, 0xff, 0xf5, 0xff, 0xab, 0x00, 0xaa, 0xfd, + 0x00, 0x00, 0xbf, 0xff, 0xb4, 0x00, 0xf1, 0xfe, 0xfb, 0xff, 0x8d, 0x00, + 0x17, 0xff, 0x73, 0xff, 0x94, 0xfe, 0x9d, 0x02, 0x91, 0xfe, 0xd8, 0x00, + 0x9b, 0x00, 0x18, 0x00, 0xb8, 0x00, 0x29, 0x00, 0xb7, 0x00, 0x59, 0x00, + 0x00, 0x00, 0x54, 0x00, 0x4a, 0xff, 0xfc, 0xff, 0x7c, 0xfe, 0x6a, 0xff, + 0xa2, 0xff, 0x79, 0xff, 0xf7, 0x00, 0xb2, 0xff, 0x54, 0xfe, 0xa8, 0x00, + 0xfa, 0xfc, 0xfa, 0xff, 0x6d, 0x01, 0x45, 0xff, 0x61, 0x01, 0x23, 0x00, + 0x3d, 0xff, 0x03, 0x00, 0x4c, 0xff, 0xd1, 0xff, 0xe8, 0xfe, 0xc2, 0xff, + 0x90, 0x00, 0x64, 0xff, 0x5d, 0xff, 0x89, 0xfe, 0x9b, 0x00, 0xfc, 0xfe, + 0xea, 0x00, 0xf3, 0xfe, 0x16, 0x02, 0x1c, 0x01, 0x0c, 0x03, 0x25, 0x01, + 0xbb, 0x01, 0xaa, 0xff, 0xa4, 0x01, 0xfc, 0x00, 0xf1, 0xff, 0x70, 0xff, + 0xcf, 0x00, 0xb8, 0x00, 0x6e, 0x00, 0x45, 0xff, 0xf8, 0xff, 0xd8, 0xff, + 0x2e, 0x00, 0x91, 0xff, 0xe2, 0xfe, 0xf0, 0xff, 0xcb, 0xff, 0xbc, 0xff, + 0x93, 0xff, 0x93, 0xfe, 0x26, 0xfe, 0xcf, 0xfe, 0x2b, 0xfe, 0x7b, 0x01, + 0xb2, 0xfe, 0x2d, 0x02, 0xf4, 0xfd, 0x8f, 0x01, 0x4b, 0xff, 0x86, 0x02, + 0x99, 0xff, 0xa6, 0xff, 0x0b, 0xff, 0xfc, 0xfe, 0x20, 0x01, 0x1a, 0xff, + 0x93, 0x00, 0xaf, 0x01, 0x30, 0x00, 0x2b, 0x01, 0x52, 0x01, 0xfc, 0xfd, + 0xe5, 0x01, 0xbc, 0xff, 0xf8, 0xfe, 0x7b, 0x00, 0xf5, 0xff, 0x90, 0xfe, + 0x27, 0x01, 0xf7, 0xfb, 0x63, 0xff, 0x08, 0x02, 0xbb, 0xfd, 0xa5, 0x00, + 0x6f, 0x00, 0x0a, 0xff, 0xa2, 0xff, 0x28, 0xff, 0x96, 0x00, 0x1b, 0xff, + 0x1c, 0x01, 0x1b, 0xff, 0xee, 0x02, 0xf3, 0xfe, 0xdc, 0x01, 0x9b, 0xfe, + 0xcc, 0x01, 0x23, 0xff, 0x7a, 0xfe, 0x94, 0x01, 0x66, 0xff, 0x62, 0x00, + 0xd0, 0x00, 0xb0, 0x00, 0x83, 0x01, 0x0f, 0x00, 0x6a, 0x00, 0x1f, 0x01, + 0xe8, 0xff, 0x54, 0x01, 0x04, 0xff, 0x23, 0xfc, 0x4e, 0xfe, 0x59, 0x04, + 0xdf, 0xfb, 0x48, 0x01, 0x1a, 0x00, 0xb1, 0x01, 0x68, 0xff, 0xf5, 0x00, + 0x0e, 0xff, 0x79, 0x00, 0x22, 0xff, 0x8d, 0xff, 0xd3, 0xff, 0xed, 0x01, + 0x27, 0x01, 0x72, 0x00, 0x52, 0x01, 0x2b, 0x00, 0x33, 0x00, 0x90, 0x00, + 0xbb, 0x00, 0xdb, 0xff, 0x3b, 0xfe, 0xbe, 0x00, 0x8f, 0x00, 0xf3, 0x02, + 0xa9, 0xff, 0xb0, 0x00, 0x5e, 0xff, 0xa9, 0xff, 0x2f, 0x01, 0x32, 0xfe, + 0x64, 0xff, 0xf2, 0xfd, 0xb8, 0xff, 0x85, 0xff, 0xaf, 0xff, 0x6f, 0xfd, + 0x04, 0x01, 0x39, 0xfe, 0x9a, 0xfe, 0x9b, 0xfe, 0x2c, 0xfc, 0xdd, 0xfd, + 0xe7, 0xfe, 0x04, 0xff, 0x84, 0xfd, 0xf5, 0x00, 0x3c, 0x03, 0x6d, 0xff, + 0xce, 0x01, 0x8a, 0xff, 0x2d, 0x02, 0x58, 0xff, 0xc9, 0x00, 0xba, 0x00, + 0x49, 0x00, 0x03, 0x02, 0xfa, 0xff, 0xba, 0x00, 0x16, 0x02, 0x7c, 0xff, + 0x8b, 0x00, 0x3f, 0x00, 0xd2, 0xff, 0x6d, 0xfb, 0xa2, 0x00, 0xf5, 0xfd, + 0xda, 0xff, 0xbb, 0xff, 0x23, 0xff, 0x5b, 0xfe, 0x11, 0xff, 0xdc, 0x00, + 0x44, 0x00, 0x86, 0xff, 0x12, 0xff, 0x62, 0xff, 0xea, 0xfe, 0xad, 0xff, + 0x1d, 0x00, 0xce, 0xff, 0x93, 0xff, 0x26, 0x01, 0x85, 0x00, 0x97, 0x01, + 0x5c, 0x00, 0x32, 0x00, 0x1b, 0x00, 0x5b, 0x00, 0x3d, 0xff, 0xe7, 0x00, + 0x2d, 0x00, 0x47, 0x00, 0x0b, 0xff, 0x25, 0x04, 0x01, 0x00, 0x56, 0x00, + 0xe0, 0xff, 0x12, 0x00, 0x4e, 0xfe, 0x4d, 0x00, 0x32, 0xff, 0x71, 0x00, + 0x96, 0xff, 0x4b, 0x01, 0x6c, 0x01, 0x9b, 0xfd, 0xdf, 0x00, 0x2e, 0x00, + 0x9f, 0xfb, 0xaf, 0xfe, 0xd5, 0xff, 0xa9, 0x01, 0x44, 0xfe, 0xc5, 0x02, + 0x1c, 0xff, 0x21, 0x03, 0x99, 0x00, 0x97, 0xfd, 0xd9, 0xff, 0xc5, 0xff, + 0x0d, 0xff, 0x20, 0x02, 0x07, 0x02, 0x71, 0xff, 0x29, 0x01, 0x37, 0xff, + 0x76, 0x01, 0x80, 0x01, 0x62, 0xff, 0x53, 0xfd, 0xc6, 0x00, 0x6f, 0xfc, + 0xe3, 0xff, 0xa5, 0xff, 0x95, 0xff, 0x50, 0xfe, 0x4a, 0x03, 0x56, 0xfe, + 0xfa, 0xfe, 0x36, 0x00, 0xda, 0x02, 0xc7, 0xfd, 0xaa, 0xff, 0x33, 0xfd, + 0x65, 0xfe, 0xc6, 0xff, 0x91, 0xff, 0x25, 0xff, 0xf4, 0xfe, 0xc3, 0x01, + 0x3d, 0xff, 0xd8, 0x00, 0x6a, 0x01, 0x96, 0x01, 0x8c, 0xff, 0xe4, 0xff, + 0xa9, 0x01, 0x09, 0x01, 0x67, 0x02, 0xfa, 0x01, 0xa0, 0x04, 0x4a, 0x00, + 0x16, 0xff, 0xc1, 0x01, 0x4f, 0xff, 0x5e, 0xff, 0x89, 0xfe, 0x8e, 0x01, + 0x23, 0xff, 0x5f, 0xfc, 0x0f, 0x01, 0x4c, 0x00, 0x47, 0xfe, 0xe4, 0xfd, + 0xfe, 0xff, 0x82, 0xfd, 0x99, 0xff, 0x3b, 0xff, 0x85, 0xfd, 0x32, 0xff, + 0xce, 0xfe, 0x80, 0x00, 0x22, 0x00, 0x74, 0xff, 0x24, 0x00, 0xe4, 0xff, + 0x50, 0x00, 0x48, 0xff, 0xc8, 0xfe, 0x5b, 0x00, 0x21, 0x00, 0x37, 0x01, + 0xe7, 0x00, 0x88, 0x02, 0xb0, 0xff, 0xaf, 0x00, 0x04, 0x01, 0x6e, 0x01, + 0x72, 0xfd, 0xbe, 0x00, 0xea, 0x01, 0xac, 0xff, 0x87, 0xfc, 0x3f, 0x02, + 0xdb, 0x01, 0x7b, 0xff, 0xe8, 0xff, 0xe4, 0xff, 0xd2, 0xfd, 0xb5, 0xff, + 0x2d, 0x02, 0x2b, 0x00, 0x63, 0xfe, 0x49, 0x01, 0xb5, 0xfe, 0xdc, 0xff, + 0x83, 0x00, 0xdb, 0x01, 0xaf, 0xfd, 0x6b, 0xff, 0xef, 0xff, 0x81, 0xfc, + 0x8b, 0x02, 0x18, 0xff, 0x44, 0x00, 0x67, 0xfe, 0x7a, 0x00, 0x00, 0x02, + 0xbe, 0xfc, 0x35, 0x02, 0x86, 0xff, 0x62, 0xff, 0x21, 0x00, 0xbc, 0xfe, + 0x10, 0x00, 0xf7, 0x00, 0x1e, 0x01, 0x46, 0x01, 0x9b, 0x01, 0xa2, 0xff, + 0x5b, 0x00, 0xec, 0x00, 0x37, 0x00, 0xc9, 0xfc, 0xdc, 0xfe, 0x54, 0xff, + 0xb8, 0xff, 0xde, 0xff, 0xf3, 0x00, 0xe3, 0x00, 0xf4, 0xfe, 0x3a, 0x00, + 0x75, 0x00, 0xd6, 0xfe, 0x68, 0xff, 0x7d, 0x01, 0x0c, 0x03, 0xbd, 0xff, + 0x27, 0x01, 0x21, 0x04, 0x99, 0x00, 0x37, 0x03, 0x93, 0xfe, 0x61, 0x01, + 0xd4, 0x02, 0x05, 0x01, 0x85, 0x01, 0x69, 0xfe, 0x5a, 0xff, 0x3e, 0xff, + 0x31, 0x00, 0xcb, 0x01, 0x73, 0xff, 0x53, 0xfe, 0xee, 0xff, 0x81, 0xfa, + 0x90, 0x00, 0x60, 0xfe, 0xcb, 0xff, 0xf8, 0xfe, 0xdf, 0xfc, 0xca, 0xff, + 0xb4, 0xff, 0x0d, 0xfe, 0x7e, 0xff, 0xcc, 0xff, 0xfc, 0xfd, 0xf6, 0xfc, + 0x18, 0x00, 0x85, 0xfe, 0x81, 0xff, 0x97, 0x00, 0xce, 0xfe, 0xd4, 0xff, + 0x36, 0x02, 0xfd, 0xff, 0x61, 0x01, 0x76, 0xfe, 0x99, 0xff, 0x62, 0x00, + 0x6f, 0x00, 0xa6, 0x00, 0x48, 0x00, 0xc2, 0x00, 0x9c, 0xfe, 0xae, 0xfd, + 0x4f, 0x02, 0xf7, 0x02, 0x0f, 0x00, 0xc6, 0x00, 0x13, 0x00, 0x11, 0x02, + 0x6f, 0x01, 0x6c, 0x00, 0x58, 0x01, 0xde, 0xfd, 0x00, 0x00, 0x2f, 0x01, + 0x4a, 0xfe, 0xa1, 0x00, 0x05, 0x00, 0x83, 0x00, 0xd9, 0xfd, 0xc5, 0xff, + 0xdb, 0xfe, 0x75, 0x00, 0xa4, 0xff, 0xbe, 0xff, 0xc2, 0xff, 0x41, 0x03, + 0xea, 0x01, 0x70, 0xfe, 0xa4, 0x02, 0xba, 0xff, 0x0a, 0xff, 0xc7, 0xff, + 0xa6, 0x00, 0x2b, 0x02, 0x38, 0x00, 0x5d, 0xfd, 0xfc, 0x00, 0xd9, 0x01, + 0x86, 0xff, 0xe8, 0x00, 0x4c, 0x00, 0x2a, 0x00, 0x80, 0x01, 0xcd, 0x00, + 0x86, 0xff, 0x6a, 0x00, 0x81, 0xff, 0xd9, 0x01, 0x09, 0x02, 0xe6, 0xff, + 0x62, 0xfe, 0xd0, 0xff, 0x44, 0xff, 0x3e, 0x00, 0xf2, 0xff, 0xe3, 0xff, + 0xfb, 0xff, 0x17, 0xff, 0x10, 0x01, 0x54, 0x01, 0x0d, 0x00, 0xce, 0x00, + 0x8d, 0xff, 0x0f, 0xff, 0xb1, 0x00, 0x32, 0x00, 0x4b, 0xff, 0x41, 0x02, + 0x98, 0x00, 0xd5, 0xff, 0x83, 0x00, 0x73, 0x00, 0x3a, 0x00, 0x15, 0xff, + 0xa6, 0xff, 0x6d, 0xfd, 0x91, 0xfe, 0xdd, 0x00, 0x8d, 0xff, 0x88, 0xfe, + 0x7d, 0x00, 0x98, 0x00, 0x4e, 0xff, 0x4f, 0x01, 0x93, 0x00, 0xe3, 0x00, + 0xb0, 0x00, 0x56, 0xff, 0xd7, 0xff, 0x48, 0xff, 0xce, 0xff, 0x42, 0x01, + 0x11, 0x01, 0xe5, 0x00, 0xfa, 0xff, 0x3f, 0x00, 0x5d, 0x00, 0x19, 0x01, + 0x85, 0x00, 0x7c, 0xfe, 0x23, 0x00, 0xdd, 0xfb, 0xf2, 0xff, 0xe9, 0x01, + 0xec, 0x01, 0xad, 0xff, 0xc7, 0xff, 0xa1, 0xff, 0x8f, 0x00, 0x10, 0x02, + 0x31, 0xff, 0x93, 0xff, 0x02, 0x02, 0x15, 0x01, 0x17, 0x00, 0xf1, 0x01, + 0x74, 0xff, 0xa4, 0x00, 0x20, 0xfe, 0x96, 0xff, 0x2a, 0x01, 0x2f, 0x00, + 0x11, 0xff, 0x1f, 0x00, 0xe1, 0x00, 0x1c, 0xff, 0xf7, 0xff, 0x66, 0x00, + 0x50, 0x00, 0xf3, 0x00, 0xb8, 0x00, 0xce, 0xff, 0xcc, 0x00, 0xe4, 0x00, + 0xc3, 0x02, 0xcb, 0x00, 0xfb, 0xff, 0x11, 0x01, 0x61, 0x00, 0x33, 0x01, + 0x79, 0x00, 0x4a, 0x00, 0x58, 0x00, 0x7e, 0xff, 0xb8, 0xff, 0x22, 0xff, + 0xed, 0xff, 0x71, 0x00, 0x1d, 0x00, 0xd7, 0xff, 0x18, 0x01, 0x5c, 0x00, + 0x85, 0xff, 0x1d, 0x01, 0x6b, 0xff, 0xe9, 0xff, 0xf1, 0x00, 0x26, 0x00, + 0x68, 0x00, 0xaf, 0x00, 0x21, 0x01, 0xf4, 0x00, 0x0b, 0x01, 0x06, 0x00, + 0x75, 0x01, 0xc6, 0x00, 0xaa, 0xff, 0x9f, 0x00, 0x5c, 0x00, 0x92, 0xff, + 0x9d, 0x00, 0xeb, 0x00, 0x26, 0xff, 0xbe, 0x00, 0xdf, 0x00, 0x2b, 0x00, + 0x21, 0xff, 0x8a, 0x00, 0xf9, 0xff, 0x31, 0x01, 0xb6, 0x00, 0xab, 0xff, + 0x99, 0x00, 0x23, 0x01, 0x85, 0x01, 0x18, 0x01, 0x6e, 0x00, 0xe1, 0xff, + 0x8c, 0xff, 0xf6, 0x00, 0x2f, 0x00, 0xe1, 0x00, 0x7a, 0x00, 0xf4, 0xff, + 0x15, 0x00, 0x9b, 0x00, 0xf6, 0x00, 0xf3, 0x00, 0x08, 0xff, 0x43, 0x00, + 0x91, 0x00, 0x45, 0x00, 0x67, 0x00, 0x00, 0x00, 0x9e, 0xff, 0xbc, 0x00, + 0x0e, 0x01, 0x6a, 0x00, 0x72, 0x00, 0x69, 0x00, 0xa0, 0x00, 0xbf, 0x00, + 0x7c, 0x00, 0x49, 0xff, 0xf9, 0xff, 0x71, 0x00, 0x71, 0x00, 0xfc, 0xff, + 0xa1, 0x00, 0xd1, 0x00, 0xcb, 0xff, 0xb6, 0x00, 0x87, 0x01, 0x22, 0x00, + 0x25, 0x02, 0xa1, 0x00, 0xbb, 0x00, 0x12, 0x01, 0x4e, 0x01, 0x5c, 0x01, + 0x7c, 0x01, 0x21, 0x00, 0x1a, 0x00, 0x7d, 0x00, 0x81, 0x00, 0x8b, 0x00, + 0x46, 0x00, 0xbb, 0x00, 0x8d, 0x00, 0xb1, 0x00, 0xfa, 0x00, 0x5c, 0x01, + 0x9d, 0x00, 0x01, 0x00, 0x17, 0x00, 0xf8, 0xff, 0xf6, 0x00, 0x8b, 0x00, + 0x5c, 0x00, 0x67, 0x00, 0xdf, 0xff, 0x3c, 0x00, 0x74, 0x00, 0x32, 0x00, + 0x61, 0x00, 0x3b, 0x00, 0x5f, 0x00, 0x9b, 0x00, 0x2f, 0x00, 0x65, 0x00, + 0xf4, 0x00, 0xbb, 0xff, 0xd5, 0xff, 0x85, 0x00, 0x90, 0x00, 0x1b, 0x00, + 0x79, 0x00, 0x04, 0x00, 0x03, 0x00, 0xdb, 0x00, 0x08, 0x01, 0xa5, 0x00, + 0x9a, 0x00, 0x68, 0x00, 0x25, 0x00, 0xcd, 0x00, 0x78, 0x00, 0x9b, 0x00, + 0xa0, 0x00, 0xc3, 0xff, 0x21, 0xff, 0x06, 0x00, 0x48, 0x00, 0x32, 0x00, + 0xa3, 0x00, 0xb5, 0x00, 0x97, 0x00, 0xc4, 0x00, 0xa4, 0x00, 0xd2, 0xff, + 0xff, 0xff, 0xbe, 0x00, 0x66, 0x00, 0x9a, 0x00, 0x99, 0x01, 0xc9, 0x00, + 0xb2, 0xff, 0xa3, 0x00, 0x63, 0x00, 0x5d, 0x00, 0xc1, 0x00, 0x9e, 0x00, + 0x4a, 0x00, 0xc0, 0x00, 0xdb, 0x00, 0xd3, 0x00, 0xe7, 0x00, 0xd2, 0x00, + 0xa7, 0x00, 0x72, 0x00, 0xb9, 0x00, 0x88, 0x00, 0xb0, 0x00, 0xa1, 0x00, + 0x86, 0x00, 0x73, 0x00, 0x96, 0x00, 0x57, 0x01, 0x00, 0x01, 0xa8, 0x00, + 0x9e, 0x00, 0x8a, 0x00, 0x34, 0x00, 0x5c, 0x00, 0xf8, 0x00, 0xa3, 0x00, + 0x93, 0x00, 0x59, 0x00, 0xac, 0xff, 0xc3, 0xff, 0x3d, 0x00, 0xfa, 0xff, + 0x2b, 0x00, 0xfd, 0xff, 0x1e, 0x00, 0x60, 0x00, 0x29, 0x00, 0x36, 0x00, + 0x4a, 0x00, 0x17, 0x00, 0x1e, 0x00, 0x5d, 0x00, 0x60, 0x00, 0x38, 0x00, + 0x57, 0x00, 0x63, 0x00, 0x4d, 0x00, 0x30, 0x00, 0x39, 0x00, 0x8b, 0x00, + 0x1d, 0x00, 0x28, 0x00, 0x51, 0x00, 0x27, 0x00, 0x57, 0x00, 0x44, 0x00, + 0x2c, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x3c, 0x00, 0x09, 0x00, 0x23, 0x00, + 0x3c, 0x00, 0x41, 0x00, 0x3a, 0x00, 0x18, 0x00, 0xfd, 0xff, 0x59, 0x00, + 0x68, 0x00, 0x31, 0x00, 0x58, 0x00, 0x2b, 0x00, 0x25, 0x00, 0x2a, 0x00, + 0x37, 0x00, 0x10, 0x00, 0x18, 0x00, 0x40, 0x00, 0xf2, 0xff, 0x2b, 0x00, + 0x2b, 0x00, 0x35, 0x00, 0x2c, 0x00, 0x3b, 0x00, 0x41, 0x00, 0x26, 0x00, + 0x4c, 0x00, 0x60, 0x00, 0x62, 0x00, 0x6d, 0x00, 0x5c, 0x00, 0x3e, 0x00, + 0x64, 0x00, 0x6e, 0x00, 0x7d, 0x00, 0x74, 0x00, 0x53, 0x00, 0x70, 0x00, + 0x6d, 0x00, 0x38, 0x00, 0x2d, 0x00, 0x56, 0x00, 0x5f, 0x00, 0x71, 0x00, + 0x87, 0x00, 0x6e, 0x00, 0x5c, 0x00, 0x5b, 0x00, 0x4a, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x6b, 0x00, 0x71, 0x00, 0x4c, 0x00, 0x43, 0x00, 0x62, 0x00, + 0x68, 0x00, 0x52, 0x00, 0x3a, 0x00, 0x35, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x1f, 0x00, 0x25, 0x00, 0x4a, 0x00, 0x56, 0x00, 0x3b, 0x00, 0x14, 0x00, + 0x06, 0x00, 0x16, 0x00, 0xfb, 0xff, 0x1d, 0x00, 0x32, 0x00, 0x12, 0x00, + 0x15, 0x00, 0x27, 0x00, 0x11, 0x00, 0x1d, 0x00, 0x18, 0x00, 0x21, 0x00, + 0x27, 0x00, 0x1d, 0x00, 0x24, 0x00, 0x26, 0x00, 0x31, 0x00, 0x2f, 0x00, + 0x32, 0x00, 0x23, 0x00, 0x0d, 0x00, 0x22, 0x00, 0x2b, 0x00, 0x48, 0x00, + 0x50, 0x00, 0x47, 0x00, 0x30, 0x00, 0x1a, 0x00, 0x27, 0x00, 0x24, 0x00, + 0x39, 0x00, 0x47, 0x00, 0x35, 0x00, 0x32, 0x00, 0x3d, 0x00, 0x32, 0x00, + 0x42, 0x00, 0x28, 0x00, 0x23, 0x00, 0x27, 0x00, 0x2a, 0x00, 0x26, 0x00, + 0x2e, 0x00, 0x38, 0x00, 0x3a, 0x00, 0x35, 0x00, 0x26, 0x00, 0x10, 0x00, + 0x1f, 0x00, 0x20, 0x00, 0x29, 0x00, 0x2a, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x1a, 0x00, 0x23, 0x00, 0x25, 0x00, 0x22, 0x00, 0x2a, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x33, 0x00, 0x3d, 0x00, 0x3c, 0x00, + 0x34, 0x00, 0x2d, 0x00, 0x09, 0x00, 0x16, 0x00, 0x33, 0x00, 0x2b, 0x00, + 0x2c, 0x00, 0x2a, 0x00, 0x27, 0x00, 0x1e, 0x00, 0x14, 0x00, 0x14, 0x00, + 0x18, 0x00, 0x19, 0x00, 0x21, 0x00, 0x21, 0x00, 0x16, 0x00, 0x16, 0x00, + 0x1a, 0x00, 0x1a, 0x00, 0x11, 0x00, 0x0e, 0x00, 0x12, 0x00, 0x14, 0x00, + 0x11, 0x00, 0x0d, 0x00, 0x11, 0x00, 0x0b, 0x00, 0x0d, 0x00, 0x10, 0x00, + 0x0d, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x00, + 0x09, 0x00, 0x08, 0x00, 0x0e, 0x00, 0x0f, 0x00, 0x0e, 0x00, 0xf3, 0xff, + 0xfd, 0xff, 0x03, 0x00, 0xf7, 0xff, 0xf9, 0xff, 0xff, 0xff, 0x15, 0x00, + 0x16, 0x00, 0x0c, 0x00, 0xfa, 0xff, 0xfa, 0xff, 0xfe, 0xff, 0x01, 0x00, + 0x09, 0x00, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x06, 0x00, + 0xfd, 0xff, 0x01, 0x00, 0xff, 0xff, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xfe, 0xff, 0xfc, 0xff, + 0xf9, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0x03, 0x00, 0x06, 0x00, + 0xfb, 0xff, 0xf9, 0xff, 0xfd, 0xff, 0x01, 0x00, 0xf8, 0xff, 0xf8, 0xff, + 0x01, 0x00, 0x08, 0x00, 0x08, 0x00, 0xfb, 0xff, 0xf4, 0xff, 0xfa, 0xff, + 0xfe, 0xff, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xff, 0xfa, 0xff, 0xfc, 0xff, + 0xfb, 0xff, 0xfc, 0xff, 0xf7, 0xff, 0xfb, 0xff, 0xfe, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xf3, 0xff, 0xf5, 0xff, 0xf9, 0xff, 0xf6, 0xff, 0xff, 0xff, + 0x03, 0x00, 0xff, 0xff, 0xf8, 0xff, 0xf6, 0xff, 0xf9, 0xff, 0xf7, 0xff, + 0xfa, 0xff, 0xf4, 0xff, 0xf3, 0xff, 0xf4, 0xff, 0xf5, 0xff, 0xf1, 0xff, + 0xfa, 0xff, 0xf4, 0xff, 0xee, 0xff, 0xf0, 0xff, 0xf3, 0xff, 0xf3, 0xff, + 0xee, 0xff, 0xeb, 0xff, 0xf0, 0xff, 0xf4, 0xff, 0xee, 0xff, 0xea, 0xff, + 0xef, 0xff, 0xf1, 0xff, 0xf2, 0xff, 0xf2, 0xff, 0xf3, 0xff, 0xf3, 0xff, + 0xf1, 0xff, 0xf0, 0xff, 0xf3, 0xff, 0xf1, 0xff, 0xf9, 0xff, 0xfe, 0xff, + 0xf6, 0xff, 0xf2, 0xff, 0xeb, 0xff, 0xf1, 0xff, 0xfa, 0xff, 0x00, 0x00, + 0xfd, 0xff, 0xf8, 0xff, 0xf7, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x03, 0x00, + 0x00, 0x00, 0xfd, 0xff, 0xfc, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0xff, 0x00, 0x00, 0xfc, 0xff, 0xfb, 0xff, 0xfd, 0xff, + 0xfd, 0xff, 0xff, 0xff, 0x00, 0x00, 0xfd, 0xff, 0xfd, 0xff, 0xfe, 0xff, + 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0xfe, 0xff, 0xfe, 0xff, + 0xfb, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0xfd, 0xff, 0xfc, 0xff, 0xfa, 0xff, + 0xf8, 0xff, 0xf4, 0xff, 0xf6, 0xff, 0xf6, 0xff, 0xf4, 0xff, 0xf4, 0xff, + 0xf3, 0xff, 0xed, 0xff, 0xed, 0xff, 0xf2, 0xff, 0xf1, 0xff, 0xee, 0xff, + 0xef, 0xff, 0xf0, 0xff, 0xee, 0xff, 0xed, 0xff, 0xef, 0xff, 0xef, 0xff, + 0xf0, 0xff, 0xee, 0xff, 0xee, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, + 0xee, 0xff, 0xf1, 0xff, 0xf3, 0xff, 0xf2, 0xff, 0xf0, 0xff, 0xf2, 0xff, + 0xf3, 0xff, 0xf4, 0xff, 0xf4, 0xff, 0xf3, 0xff, 0xf1, 0xff, 0xf0, 0xff, + 0xf1, 0xff, 0xf3, 0xff, 0xf2, 0xff, 0xf1, 0xff, 0xf1, 0xff, 0xf2, 0xff, + 0xf4, 0xff, 0xf2, 0xff, 0xf2, 0xff, 0xf7, 0xff, 0xf5, 0xff, 0xf5, 0xff, + 0xf5, 0xff, 0xfa, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf9, 0xff, 0xfa, 0xff, + 0xfc, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfc, 0xff, + 0xfd, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0x00, 0x00, + 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0xff, 0x01, 0x00, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, + 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 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, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 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, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x01, 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, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 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, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 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, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 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, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xfe, 0xff, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x05, 0x00, 0x09, 0x00, 0x0d, 0x00, + 0x11, 0x00, 0x16, 0x00, 0x1d, 0x00, 0x2a, 0x00, 0x40, 0x00, 0x54, 0x00, + 0x6d, 0x00, 0xa3, 0x00, 0x19, 0x01, 0xdb, 0x01, 0x79, 0x03, 0x53, 0x05, + 0x09, 0x05, 0x4a, 0x02, 0x9d, 0xff, 0x8a, 0xfe, 0xe7, 0xff, 0x66, 0x01, + 0x8d, 0x00, 0xc2, 0xff, 0x06, 0xfe, 0x3d, 0xff, 0xe2, 0x00, 0x85, 0xff, + 0x47, 0x01, 0xc9, 0x00, 0xc6, 0xfe, 0xcc, 0xfd, 0x45, 0xfe, 0x2c, 0x01, + 0x60, 0x01, 0x41, 0x01, 0x20, 0x00, 0xb0, 0xfd, 0xad, 0xfd, 0x00, 0x00, + 0x32, 0x00, 0xaf, 0xff, 0x28, 0x00, 0x14, 0xff, 0x4b, 0xfe, 0x46, 0x00, + 0xa8, 0x00, 0xcf, 0xff, 0x71, 0x00, 0xc3, 0xfe, 0xa6, 0xfe, 0xeb, 0xff, + 0xfe, 0xff, 0x06, 0x00, 0xfb, 0xff, 0xe1, 0xff, 0xaf, 0xff, 0x51, 0x01, + 0xba, 0x01, 0x73, 0x00, 0x1d, 0x00, 0xf1, 0xff, 0x35, 0x00, 0x79, 0x00, + 0x88, 0x00, 0x05, 0x00, 0x89, 0x00, 0xfa, 0xff, 0xf8, 0xff, 0x00, 0x00, + 0x58, 0x00, 0xed, 0xff, 0xb1, 0x00, 0xea, 0xff, 0x3e, 0xff, 0x36, 0x00, + 0x43, 0x00, 0x00, 0x01, 0xb9, 0x01, 0xd1, 0x00, 0x79, 0x00, 0x64, 0x00, + 0xb5, 0x00, 0x7e, 0x00, 0xad, 0x00, 0x9f, 0x01, 0x79, 0x01, 0xc6, 0x00, + 0x5e, 0xff, 0x68, 0xff, 0x60, 0xff, 0x51, 0xff, 0xd9, 0xfe, 0x99, 0xff, + 0x12, 0x01, 0x7c, 0x00, 0x7f, 0xff, 0x36, 0x00, 0x6c, 0xff, 0x52, 0xfe, + 0xe4, 0xff, 0x5f, 0x01, 0x0e, 0x01, 0x78, 0x00, 0xa1, 0xfe, 0x29, 0xff, + 0xa2, 0xff, 0x6b, 0x00, 0x12, 0x01, 0x9d, 0xff, 0x55, 0xfe, 0x38, 0xff, + 0x16, 0xff, 0x18, 0xff, 0x5f, 0x01, 0x10, 0x01, 0x29, 0xff, 0x51, 0xff, + 0x7b, 0xff, 0x8e, 0x00, 0x8e, 0x00, 0xc0, 0xff, 0xe1, 0xff, 0x0f, 0x00, + 0xa3, 0x00, 0x92, 0x00, 0xe7, 0xff, 0x26, 0xff, 0x5e, 0x00, 0xe5, 0x00, + 0xbd, 0xff, 0xf7, 0xff, 0x85, 0x00, 0x78, 0xff, 0xf6, 0xfe, 0x26, 0x00, + 0x03, 0x00, 0x57, 0xff, 0x75, 0x00, 0x87, 0x00, 0xdc, 0xff, 0x18, 0x00, + 0x8a, 0xff, 0x31, 0xfe, 0x90, 0xff, 0x8b, 0x00, 0xbd, 0x00, 0x9b, 0x00, + 0x25, 0x00, 0xd7, 0xfe, 0xf1, 0xfd, 0x26, 0x02, 0xb8, 0x03, 0xf3, 0xfe, + 0xe8, 0xfd, 0x0f, 0x00, 0x04, 0xff, 0xba, 0xff, 0x7e, 0x00, 0xf3, 0xff, + 0x26, 0x00, 0xb4, 0xff, 0x1e, 0xff, 0x96, 0xff, 0xa1, 0xff, 0x54, 0x00, + 0x4c, 0x00, 0x0b, 0xfd, 0x0b, 0xff, 0x0a, 0x03, 0x9b, 0x00, 0x29, 0xff, + 0x1a, 0x01, 0x52, 0x00, 0x5f, 0xfe, 0x8f, 0xff, 0x11, 0x01, 0x18, 0x00, + 0x50, 0xff, 0xed, 0xff, 0x0b, 0x00, 0xa4, 0x00, 0xc6, 0xff, 0x05, 0xff, + 0x98, 0x01, 0x01, 0x01, 0x99, 0xfd, 0x42, 0xff, 0x41, 0x02, 0x5a, 0x00, + 0x0c, 0x00, 0x4e, 0x01, 0x4f, 0x00, 0x76, 0xff, 0x79, 0x00, 0xa1, 0x00, + 0xca, 0x00, 0xa4, 0xff, 0x4b, 0x00, 0x51, 0x00, 0xf8, 0xfe, 0x1e, 0x00, + 0x51, 0x00, 0xe9, 0xfe, 0xed, 0xfe, 0xe7, 0xff, 0x4d, 0x00, 0xca, 0x00, + 0x54, 0x01, 0xea, 0xff, 0x65, 0xfd, 0xf0, 0xfd, 0x09, 0x01, 0xda, 0x02, + 0x03, 0x00, 0x35, 0xfd, 0xc2, 0xfe, 0x8e, 0xff, 0xf7, 0x00, 0xdb, 0x01, + 0x85, 0xff, 0x9e, 0xfd, 0xcd, 0xfd, 0xdb, 0xff, 0x66, 0x01, 0x4f, 0x01, + 0x97, 0xff, 0x66, 0xfd, 0xf6, 0xfe, 0xe1, 0x01, 0x4e, 0x02, 0x1c, 0xff, + 0xcd, 0xfd, 0x99, 0xff, 0x81, 0xff, 0x3e, 0x00, 0x90, 0x01, 0xdf, 0xff, + 0x4e, 0xff, 0x3e, 0x01, 0x14, 0x00, 0x0e, 0x00, 0x05, 0xff, 0x45, 0xfe, + 0xfa, 0x00, 0xc1, 0x02, 0x1e, 0xff, 0xa3, 0xfd, 0xb6, 0xff, 0x4c, 0x02, + 0xa9, 0x01, 0x01, 0xff, 0xe5, 0xff, 0x81, 0xff, 0xd6, 0xff, 0x9f, 0x01, + 0x94, 0x01, 0xb6, 0xff, 0xd8, 0xfe, 0xc4, 0xfe, 0x34, 0x00, 0xac, 0x01, + 0x7a, 0x02, 0x4b, 0x00, 0xfe, 0xfd, 0x4d, 0xfe, 0x24, 0x00, 0x1c, 0x01, + 0x74, 0x00, 0xd9, 0x00, 0x60, 0x00, 0xd1, 0xfd, 0x6a, 0xfd, 0x44, 0x01, + 0xd1, 0x01, 0x45, 0xfd, 0x67, 0x00, 0xaa, 0x01, 0xa5, 0xfd, 0xf0, 0xfe, + 0x35, 0x04, 0xd6, 0xff, 0x2e, 0xfd, 0xb9, 0x01, 0xbd, 0xfe, 0xb2, 0xfc, + 0x0b, 0x03, 0x50, 0x03, 0xfa, 0xfc, 0xc8, 0xfd, 0xcf, 0xfc, 0x99, 0xff, + 0xe6, 0xff, 0x87, 0x02, 0x93, 0x02, 0xe5, 0xfe, 0xaf, 0xfd, 0xb4, 0xfe, + 0xda, 0xff, 0x04, 0x00, 0x4f, 0x03, 0xfa, 0x01, 0x59, 0xfe, 0x1c, 0xfd, + 0x1f, 0x01, 0x70, 0x01, 0xf5, 0xfe, 0x6f, 0x00, 0xed, 0x01, 0x10, 0xff, + 0x96, 0xfe, 0x1c, 0x02, 0x8d, 0x02, 0xa3, 0xfc, 0x2d, 0xfe, 0x92, 0x04, + 0xa5, 0xfd, 0x12, 0xfc, 0x6b, 0x06, 0xad, 0x01, 0x89, 0xf8, 0xdc, 0x01, + 0x81, 0x04, 0x17, 0xfd, 0x9c, 0x00, 0x63, 0x02, 0x38, 0x01, 0x26, 0xfb, + 0x16, 0xfb, 0x9c, 0x04, 0x46, 0x04, 0xf6, 0xfe, 0xc2, 0xfd, 0xbe, 0xfe, + 0xc5, 0xfd, 0xd3, 0x00, 0xcb, 0x02, 0x6c, 0xff, 0x2b, 0xfe, 0x9b, 0x01, + 0xb1, 0xff, 0x00, 0xfe, 0x76, 0x00, 0xc2, 0x03, 0x43, 0xff, 0x33, 0xfc, + 0xfd, 0xfe, 0x25, 0x01, 0xa4, 0x01, 0xf9, 0xff, 0x30, 0x00, 0xc6, 0x01, + 0x2f, 0xfe, 0xde, 0xfc, 0x17, 0x02, 0xb4, 0x03, 0x6b, 0xfe, 0x51, 0xff, + 0x9c, 0x00, 0x76, 0xff, 0x87, 0xfd, 0x58, 0x00, 0x39, 0x05, 0xc8, 0xfe, + 0x1f, 0xfd, 0x00, 0x01, 0xb8, 0x00, 0x1d, 0xfa, 0x67, 0x01, 0x40, 0x09, + 0xf3, 0xfd, 0x28, 0xfc, 0xa3, 0x00, 0x7c, 0xff, 0xfb, 0x00, 0x1d, 0x01, + 0x5d, 0xff, 0xe0, 0xfb, 0x93, 0xff, 0x49, 0x05, 0x31, 0x01, 0xad, 0xfe, + 0xc4, 0xfe, 0x57, 0x00, 0xc1, 0x00, 0xd1, 0xfe, 0xfb, 0x00, 0x18, 0x01, + 0x8b, 0xfe, 0xbe, 0xff, 0x94, 0x00, 0x25, 0x00, 0x3b, 0xff, 0x22, 0xff, + 0xa9, 0x01, 0x26, 0x01, 0xff, 0xfe, 0x7a, 0xff, 0x03, 0xfd, 0x8c, 0x00, + 0x85, 0x04, 0xce, 0xfe, 0x43, 0xfe, 0x4e, 0x04, 0x3d, 0xfe, 0x91, 0xf9, + 0xa2, 0x02, 0x9c, 0x06, 0x23, 0x01, 0xc1, 0xf9, 0x9f, 0xfc, 0xb9, 0x02, + 0x61, 0x00, 0x0f, 0x01, 0x70, 0x02, 0x2f, 0xfe, 0xeb, 0xfe, 0x36, 0x01, + 0xc2, 0xff, 0x07, 0xff, 0xcb, 0xff, 0x64, 0x01, 0x68, 0x00, 0x41, 0x01, + 0x8c, 0xff, 0xeb, 0xfd, 0xd9, 0xff, 0x9d, 0x00, 0xad, 0xff, 0x7f, 0x02, + 0x98, 0x01, 0x3a, 0xfc, 0xac, 0xfe, 0x62, 0x01, 0x59, 0xff, 0x6d, 0xfe, + 0x5b, 0xfd, 0x1f, 0x02, 0x40, 0x06, 0x1a, 0xff, 0x5c, 0xf9, 0x6b, 0x00, + 0x5f, 0x04, 0x6f, 0xfa, 0xab, 0xff, 0xff, 0x0a, 0xe8, 0xfe, 0x44, 0xf9, + 0x44, 0x01, 0x0a, 0xfc, 0x80, 0xfe, 0xbe, 0x08, 0xd3, 0x02, 0x5d, 0xfb, + 0x89, 0xff, 0x7a, 0xfd, 0xff, 0xff, 0x53, 0x02, 0x3b, 0x03, 0xaa, 0xfe, + 0xa3, 0xfb, 0x4f, 0x02, 0xea, 0x02, 0x2e, 0xfd, 0xbb, 0x00, 0x2a, 0x02, + 0xe6, 0xfc, 0x5a, 0x01, 0x34, 0x05, 0xe8, 0x00, 0x5a, 0xfd, 0x4c, 0xfe, + 0x34, 0xfd, 0xae, 0x02, 0xfa, 0x05, 0x93, 0xfe, 0x2e, 0xfd, 0x90, 0xfc, + 0x1e, 0xfe, 0x3a, 0x05, 0x0e, 0x06, 0x67, 0xfd, 0x60, 0x00, 0x29, 0x01, + 0x44, 0xfa, 0x70, 0xfd, 0x15, 0x07, 0x69, 0x04, 0x3b, 0xfc, 0xed, 0xfe, + 0x32, 0x00, 0x21, 0xfd, 0xc5, 0x00, 0xc2, 0x02, 0xc7, 0x01, 0x9a, 0xfe, + 0x62, 0xfe, 0xe7, 0xfe, 0x24, 0xff, 0xd6, 0x02, 0x61, 0x07, 0xa8, 0x00, + 0xf3, 0xf7, 0x38, 0xf9, 0xf1, 0x04, 0x2c, 0x0a, 0x62, 0xff, 0x08, 0xfe, + 0x2f, 0xfc, 0x2c, 0xf7, 0xd4, 0x04, 0xe9, 0x08, 0x4e, 0xfb, 0xcc, 0xf9, + 0xde, 0x04, 0x6f, 0x01, 0x93, 0xfc, 0x5a, 0x05, 0x00, 0x04, 0x29, 0xf6, + 0xe9, 0xfb, 0x01, 0x07, 0xc0, 0x03, 0xe7, 0x02, 0x14, 0xfe, 0xcd, 0xfe, + 0xe6, 0xfd, 0x15, 0xfe, 0x20, 0x03, 0x9e, 0x01, 0xa6, 0x00, 0x30, 0x00, + 0xb4, 0xfe, 0x63, 0xff, 0x8e, 0x02, 0xdb, 0xfe, 0x4f, 0xfe, 0x31, 0x03, + 0x93, 0x00, 0x5a, 0x01, 0x84, 0xfe, 0x49, 0x00, 0xae, 0x00, 0x82, 0xfd, + 0xa7, 0x01, 0x54, 0x03, 0x35, 0xfd, 0xee, 0xfc, 0x2f, 0x00, 0x4c, 0x03, + 0x0b, 0x02, 0xa6, 0xfd, 0x6c, 0xfc, 0x5c, 0x04, 0x1d, 0x03, 0xf5, 0xfc, + 0xa6, 0x00, 0x3e, 0x00, 0xc3, 0xfb, 0xb9, 0x01, 0x4e, 0x04, 0xb1, 0x01, + 0x4e, 0xfe, 0x45, 0xfe, 0xe3, 0xfe, 0xd4, 0xfe, 0x42, 0x01, 0x64, 0x05, + 0x9d, 0x00, 0xe1, 0xfc, 0xf5, 0xfd, 0xa4, 0xff, 0x91, 0x00, 0x90, 0x01, + 0xba, 0x00, 0xbd, 0x00, 0xad, 0x00, 0x68, 0xfe, 0x72, 0xff, 0xa0, 0x00, + 0x9d, 0x00, 0x43, 0x01, 0xb0, 0xff, 0x34, 0xfd, 0x6e, 0x00, 0x2d, 0xff, + 0xc2, 0x02, 0xe9, 0x02, 0x83, 0xfb, 0x70, 0xff, 0x75, 0x01, 0xd3, 0xfd, + 0x12, 0xff, 0xeb, 0x04, 0x78, 0x00, 0xcb, 0xfd, 0xf5, 0xfe, 0x1b, 0xfe, + 0x95, 0x00, 0x8c, 0x00, 0x60, 0x03, 0x07, 0x02, 0x72, 0xfd, 0x10, 0xfd, + 0x09, 0xff, 0x23, 0x00, 0xd4, 0x00, 0x11, 0x04, 0xea, 0x01, 0x9b, 0xfb, + 0x39, 0xff, 0x0e, 0x02, 0x98, 0xfd, 0x1b, 0xfe, 0xa3, 0x04, 0x88, 0x01, + 0xe1, 0xfb, 0x3a, 0x00, 0x63, 0x02, 0xce, 0xfe, 0xae, 0x00, 0x8f, 0x02, + 0x95, 0xfe, 0x33, 0xfc, 0x1e, 0x00, 0xbf, 0x02, 0x0b, 0x01, 0x2b, 0x01, + 0x09, 0x01, 0x81, 0xfe, 0xe4, 0xfd, 0x93, 0xff, 0xe6, 0x01, 0x63, 0x00, + 0x61, 0x01, 0xe5, 0xfd, 0xc2, 0xfd, 0x0d, 0x04, 0x32, 0x05, 0x61, 0xfd, + 0x1d, 0xfb, 0x43, 0x02, 0xb3, 0x00, 0x97, 0xfe, 0xec, 0x02, 0x35, 0x01, + 0x18, 0xfd, 0x74, 0xfe, 0xb7, 0x02, 0xdb, 0x02, 0x40, 0xff, 0xea, 0xfd, + 0xcc, 0xfe, 0xdb, 0xfe, 0xf2, 0xff, 0xc2, 0x00, 0x19, 0x03, 0x1f, 0x04, + 0xe7, 0xfc, 0x3f, 0xfd, 0x79, 0x02, 0x8f, 0xff, 0x98, 0xfc, 0x02, 0x02, + 0xc7, 0x02, 0xfa, 0xff, 0x88, 0x01, 0x1c, 0xfe, 0xac, 0xfb, 0x4f, 0xff, + 0x35, 0x01, 0xbc, 0x02, 0x87, 0x00, 0xfe, 0xfd, 0xc1, 0xff, 0x40, 0x00, + 0x11, 0x00, 0x6a, 0xff, 0x12, 0x00, 0x5a, 0x02, 0x7b, 0x01, 0x8b, 0xfd, + 0xf2, 0xfd, 0xe6, 0x00, 0x9b, 0x00, 0xc2, 0xfc, 0x1c, 0x01, 0xdf, 0x01, + 0x30, 0xff, 0x3f, 0x03, 0x6e, 0x00, 0x32, 0xfd, 0x2a, 0xfc, 0x4f, 0xff, + 0x35, 0x04, 0x83, 0x05, 0xe0, 0x00, 0x6e, 0xfa, 0x02, 0xfc, 0xae, 0x01, + 0x3c, 0x03, 0xd9, 0x01, 0x36, 0x02, 0xb1, 0xff, 0x17, 0xfb, 0x3c, 0xfd, + 0xfb, 0x02, 0x8a, 0x02, 0x07, 0x02, 0xb7, 0xfe, 0x56, 0xfd, 0x87, 0xfe, + 0x49, 0x02, 0xf9, 0x02, 0x73, 0xff, 0x30, 0xfe, 0x9a, 0xff, 0xed, 0xff, + 0xc6, 0xff, 0xd9, 0x03, 0xca, 0x00, 0x63, 0xfb, 0xff, 0xfd, 0x5c, 0x01, + 0xa9, 0x00, 0x12, 0x03, 0x5d, 0x01, 0x89, 0xfb, 0x66, 0xfe, 0xf4, 0x01, + 0x7c, 0x00, 0x3a, 0x02, 0xd0, 0xff, 0x44, 0xfc, 0xf3, 0xff, 0x1d, 0x03, + 0x8d, 0x00, 0x38, 0xff, 0x1f, 0x00, 0xa4, 0xfd, 0x95, 0xfd, 0x2b, 0x03, + 0xf1, 0x04, 0x9c, 0xfa, 0xab, 0xfe, 0x58, 0x06, 0xde, 0xfb, 0x8a, 0xfc, + 0xd9, 0x05, 0x25, 0xff, 0x30, 0xfa, 0x1d, 0x00, 0x84, 0x04, 0x2b, 0x00, + 0x70, 0xff, 0x6e, 0x02, 0x2a, 0xfc, 0x1d, 0xfd, 0x35, 0x06, 0xe6, 0x01, + 0x72, 0xfe, 0xaf, 0x00, 0x1e, 0xfc, 0x45, 0xfb, 0x9b, 0x03, 0x36, 0x04, + 0xd5, 0xff, 0xb1, 0x00, 0x5e, 0xfc, 0x97, 0xfc, 0xa7, 0xff, 0x6e, 0x01, + 0x65, 0x03, 0x78, 0x01, 0x70, 0xfd, 0xbe, 0xff, 0x0d, 0xff, 0xfc, 0xfe, + 0x1d, 0x02, 0x5e, 0x01, 0xab, 0xfd, 0x33, 0xff, 0x7e, 0x00, 0x6c, 0xfd, + 0x82, 0x00, 0xe6, 0x02, 0xa1, 0xff, 0xc3, 0x03, 0x43, 0xff, 0x58, 0xf7, + 0xdc, 0xfe, 0xb7, 0x08, 0xda, 0x03, 0x5b, 0xfb, 0x24, 0xfa, 0x79, 0xff, + 0x46, 0x01, 0xad, 0x02, 0xde, 0x05, 0xc4, 0xfc, 0x67, 0xf9, 0xb6, 0x00, + 0x27, 0x03, 0xd4, 0xff, 0xc1, 0x01, 0x84, 0x03, 0x28, 0xfc, 0xc6, 0xf9, + 0x04, 0x02, 0xee, 0x03, 0xd9, 0x01, 0x92, 0xfd, 0xed, 0xfc, 0xb5, 0x02, + 0x4a, 0x01, 0x82, 0xfe, 0x35, 0x00, 0xa3, 0xfd, 0x05, 0x00, 0x19, 0x02, + 0x5e, 0x01, 0x2d, 0xff, 0x30, 0xfe, 0x55, 0x01, 0x7a, 0x01, 0xc4, 0xfe, + 0xd9, 0xff, 0x1d, 0x01, 0xb5, 0xff, 0xb6, 0xfe, 0xa2, 0xfd, 0xe8, 0x01, + 0xb7, 0x04, 0x02, 0xfa, 0x7f, 0xfd, 0x94, 0x05, 0x0a, 0xff, 0xad, 0xfc, + 0x2d, 0x02, 0x75, 0x02, 0xcd, 0xfb, 0x5d, 0x00, 0xb9, 0x02, 0xa3, 0xfd, + 0xdb, 0xfe, 0x76, 0xff, 0xf4, 0x02, 0xa6, 0xff, 0xe9, 0xfc, 0xe7, 0x02, + 0x00, 0x00, 0xae, 0xfa, 0xff, 0x02, 0xfb, 0x02, 0x12, 0xfd, 0x21, 0x02, + 0x6e, 0xff, 0xc6, 0xf9, 0xc1, 0x02, 0xa8, 0x04, 0x55, 0xff, 0xf2, 0x01, + 0x7a, 0xfd, 0x91, 0xf7, 0x76, 0x00, 0x89, 0x0b, 0x69, 0x03, 0xe5, 0xf8, + 0x84, 0xfb, 0x1c, 0x00, 0x5e, 0x00, 0x57, 0x04, 0xbb, 0x04, 0x54, 0xfc, + 0xef, 0xf5, 0x20, 0xfe, 0xf9, 0x0a, 0x87, 0x05, 0x9d, 0xfe, 0x51, 0xfd, + 0xc3, 0xf9, 0x10, 0xfa, 0x2f, 0x05, 0x6d, 0x08, 0x78, 0x00, 0x0f, 0xfd, + 0xdb, 0xfa, 0x0b, 0xfc, 0x49, 0x02, 0xd3, 0x06, 0xe2, 0xfc, 0x75, 0xfc, + 0xca, 0x04, 0xce, 0x00, 0x6f, 0xfb, 0x46, 0x00, 0x3f, 0xfd, 0x89, 0xfe, + 0xf5, 0x05, 0xa4, 0x05, 0xd0, 0xfd, 0x82, 0xf9, 0xbb, 0xfe, 0x76, 0x02, + 0x7b, 0xff, 0x46, 0x02, 0x43, 0x01, 0x23, 0x04, 0x8b, 0xfd, 0x55, 0xf4, + 0x01, 0x02, 0xf5, 0x07, 0x07, 0xfd, 0x6a, 0xff, 0xa4, 0x05, 0x0b, 0xfe, + 0x59, 0xfa, 0xd9, 0xff, 0x84, 0x03, 0x3b, 0xfe, 0xef, 0xfe, 0x8b, 0x00, + 0x70, 0x00, 0x06, 0x03, 0x0d, 0x03, 0x9e, 0xfb, 0xc1, 0xfb, 0x73, 0x03, + 0x19, 0x01, 0x7d, 0xfc, 0x25, 0x02, 0x9c, 0x03, 0xea, 0xfb, 0xd2, 0xfc, + 0x2c, 0x04, 0xc0, 0x01, 0x3c, 0xfe, 0x9c, 0x00, 0xd0, 0x00, 0x0d, 0xfe, + 0xc5, 0xfd, 0x12, 0x01, 0xd9, 0xfe, 0x2d, 0xfe, 0xd2, 0x04, 0x6f, 0x03, + 0x71, 0xfd, 0x1d, 0xfe, 0xa6, 0x03, 0x89, 0xfe, 0x8f, 0xf7, 0x9e, 0x03, + 0x25, 0x07, 0xdf, 0xfb, 0xd7, 0xff, 0xe7, 0x04, 0x68, 0xfc, 0xe7, 0xf8, + 0x97, 0x01, 0x7c, 0x0a, 0xe8, 0x05, 0xdd, 0xfa, 0xf0, 0xf5, 0x23, 0xfe, + 0x54, 0x08, 0xc3, 0x02, 0x24, 0xfd, 0xe1, 0x01, 0xc4, 0x01, 0xd5, 0xfc, + 0xae, 0xf9, 0x89, 0x02, 0x6b, 0x06, 0xd2, 0x00, 0x34, 0xfb, 0xc0, 0xfd, + 0xc0, 0x02, 0x24, 0xfe, 0xea, 0xfb, 0x60, 0x09, 0x8f, 0x07, 0x7c, 0xf9, + 0x0d, 0xfa, 0x37, 0x00, 0x44, 0xfd, 0x8d, 0x03, 0x26, 0x09, 0x51, 0xfd, + 0x5b, 0xf6, 0xdf, 0x01, 0xd6, 0x04, 0xc6, 0xfe, 0x28, 0x00, 0x80, 0x00, + 0x1c, 0x01, 0xdb, 0xfe, 0x8b, 0xff, 0xae, 0xff, 0x39, 0x01, 0x5c, 0x01, + 0x1d, 0x02, 0x46, 0xfd, 0x66, 0xfb, 0xbe, 0x04, 0xe5, 0x04, 0x57, 0xfe, + 0xde, 0xff, 0x98, 0xfc, 0x86, 0xfb, 0x81, 0x02, 0x4a, 0x04, 0xe1, 0xfe, + 0x73, 0xfd, 0x81, 0x04, 0x82, 0x03, 0x4c, 0xf8, 0xb0, 0xfd, 0x01, 0x05, + 0xbb, 0x00, 0xd9, 0xff, 0x3e, 0x02, 0xc8, 0xfd, 0x8f, 0xfc, 0x27, 0x02, + 0x5a, 0xff, 0xc7, 0xfc, 0xd0, 0x05, 0xc3, 0x04, 0x94, 0xfc, 0x83, 0x00, + 0x0a, 0x01, 0x3d, 0xf9, 0x77, 0xfd, 0xe0, 0x06, 0x85, 0x03, 0x03, 0xfd, + 0x2c, 0x05, 0x95, 0x00, 0x59, 0xf6, 0x59, 0xfd, 0x6b, 0x09, 0xc4, 0x02, + 0x4d, 0xfd, 0x0b, 0x01, 0xe6, 0xfd, 0xdf, 0xfa, 0xce, 0x01, 0x68, 0x04, + 0x05, 0x02, 0x39, 0x03, 0x2c, 0xfd, 0x19, 0xf8, 0x84, 0xfd, 0xe5, 0x04, + 0xd1, 0x09, 0x95, 0xfd, 0x6e, 0xf8, 0xa0, 0x03, 0x98, 0xff, 0xa6, 0xf9, + 0xcf, 0x06, 0xc2, 0x08, 0x1f, 0xfc, 0x2f, 0xf7, 0xbd, 0xfd, 0x15, 0x00, + 0xc9, 0x05, 0x51, 0x06, 0x23, 0xf8, 0x27, 0xfb, 0x1e, 0x07, 0x8c, 0x01, + 0xfd, 0x02, 0x5c, 0x02, 0x68, 0xf6, 0xcd, 0xfd, 0x84, 0x05, 0xd1, 0xff, + 0xf8, 0xfd, 0x85, 0x03, 0x08, 0x05, 0x14, 0xff, 0xe2, 0xf5, 0x66, 0xfd, + 0xd4, 0x08, 0x18, 0x0e, 0x3d, 0xfe, 0x50, 0xf5, 0xff, 0xf9, 0x81, 0xfc, + 0xa9, 0xfe, 0x44, 0x08, 0xee, 0x09, 0xfc, 0xf9, 0xd7, 0xf8, 0x5b, 0x00, + 0x34, 0x01, 0x8a, 0x01, 0xd1, 0x04, 0x96, 0x00, 0x7c, 0xfa, 0x5e, 0xfd, + 0x5b, 0xff, 0xe9, 0x02, 0x25, 0x08, 0x46, 0x01, 0x95, 0xfc, 0xb0, 0xfd, + 0x08, 0xff, 0x84, 0xff, 0xe9, 0xff, 0xb2, 0x02, 0xb9, 0xff, 0x9d, 0x00, + 0x4d, 0xfe, 0x23, 0xff, 0xe2, 0x02, 0x05, 0x02, 0xdd, 0xff, 0x5c, 0xfe, + 0x60, 0xfe, 0x5c, 0xff, 0xac, 0x02, 0x0a, 0x05, 0x7e, 0x01, 0xda, 0xf8, + 0x86, 0xfb, 0x81, 0x07, 0x50, 0x02, 0x2d, 0xfd, 0xd3, 0xfd, 0xe2, 0xfd, + 0xde, 0x04, 0xb6, 0x02, 0xf2, 0xfc, 0x73, 0x02, 0xb1, 0xfc, 0xcc, 0xf7, + 0xe2, 0x05, 0xd7, 0x0b, 0xa6, 0xff, 0x58, 0xf7, 0x78, 0xff, 0xcd, 0x02, + 0xc3, 0xfc, 0x14, 0x03, 0xbe, 0x07, 0x21, 0xfc, 0xbb, 0xf4, 0xdf, 0xfe, + 0x0a, 0x08, 0x18, 0x05, 0x0b, 0xff, 0x4b, 0xfe, 0xf2, 0xfd, 0xb8, 0xff, + 0xfd, 0xfd, 0x7c, 0xfd, 0x48, 0x04, 0x54, 0x05, 0x32, 0xfe, 0x73, 0xfc, + 0xcb, 0x02, 0x97, 0xfe, 0x5d, 0xfc, 0x70, 0x03, 0x78, 0x03, 0x3a, 0xfe, + 0x49, 0xfe, 0xa6, 0xfe, 0x6c, 0x02, 0xae, 0x05, 0x19, 0xf9, 0xf8, 0xf8, + 0xc2, 0xff, 0x21, 0x02, 0x44, 0x0a, 0xe7, 0x03, 0x6e, 0xf8, 0x48, 0xfb, + 0xfb, 0xff, 0x86, 0x01, 0x18, 0x00, 0xbd, 0x01, 0xc5, 0x05, 0xcc, 0x03, + 0x8c, 0xfa, 0x64, 0xf8, 0x07, 0x02, 0xa1, 0x01, 0x91, 0x01, 0x5a, 0x04, + 0x77, 0x01, 0xf2, 0xfa, 0x73, 0xfc, 0xec, 0x01, 0xcf, 0x01, 0xa3, 0xfd, + 0x64, 0x00, 0xf3, 0x07, 0x4b, 0x03, 0xdc, 0xf7, 0x56, 0xfa, 0xd3, 0x01, + 0x93, 0x01, 0xcb, 0x02, 0xcb, 0x00, 0x25, 0xfe, 0x67, 0x05, 0x95, 0xff, + 0xdc, 0xf7, 0xac, 0x00, 0xb5, 0x01, 0x47, 0xff, 0x78, 0x03, 0x26, 0xff, + 0x94, 0xfb, 0x10, 0x00, 0xd0, 0x01, 0x70, 0x02, 0x5d, 0x00, 0xc8, 0x02, + 0xdb, 0xfd, 0x36, 0xf8, 0x91, 0xfd, 0x3b, 0x08, 0x5b, 0x04, 0x62, 0xff, + 0xfc, 0xfb, 0x89, 0xfc, 0x34, 0x01, 0xc1, 0x00, 0x16, 0xfe, 0x08, 0x01, + 0xef, 0x03, 0x47, 0xfe, 0x2f, 0x00, 0x13, 0xfe, 0x91, 0xfe, 0xbe, 0x01, + 0x0e, 0x01, 0xbb, 0x01, 0x3b, 0xff, 0x2a, 0xfd, 0xb7, 0xfe, 0x14, 0xfe, + 0x46, 0x02, 0xb1, 0x04, 0x0e, 0x03, 0xe8, 0xfb, 0x8b, 0xfb, 0xa3, 0x01, + 0x47, 0x03, 0x79, 0x02, 0x78, 0xfb, 0xca, 0xfd, 0x28, 0x04, 0xcb, 0xf8, + 0x62, 0x01, 0x65, 0x0c, 0xca, 0x00, 0xb9, 0xfb, 0xec, 0xfd, 0x99, 0xf9, + 0x22, 0xf9, 0x7a, 0x07, 0x9d, 0x08, 0x9c, 0x00, 0xb4, 0xfb, 0xcb, 0xfd, + 0xfa, 0xf9, 0x37, 0xfd, 0x68, 0x0b, 0x44, 0x08, 0x86, 0xf5, 0xcf, 0xf5, + 0x4b, 0x03, 0x3a, 0x02, 0xa5, 0x03, 0xd0, 0x07, 0xbf, 0xfe, 0x95, 0xf5, + 0x77, 0xfa, 0x2a, 0x07, 0x22, 0x0a, 0x3b, 0xfe, 0xa3, 0xfa, 0x71, 0xfe, + 0xfb, 0x03, 0x0f, 0xff, 0x5b, 0xfd, 0x4c, 0x03, 0x08, 0x04, 0x3c, 0xfd, + 0xfd, 0xf6, 0x6f, 0xf8, 0x7c, 0x0a, 0x47, 0x0d, 0xa8, 0xfa, 0xb5, 0xf4, + 0x32, 0x00, 0x1d, 0x08, 0x63, 0x01, 0xee, 0xf9, 0x33, 0x03, 0x93, 0xfb, + 0x67, 0xfb, 0xf9, 0x02, 0x15, 0x01, 0x7d, 0x05, 0xb5, 0x03, 0x4e, 0xf9, + 0xfb, 0xf7, 0xc3, 0xfd, 0x05, 0xff, 0xc6, 0x07, 0x3b, 0x04, 0x83, 0xfb, + 0x34, 0xfc, 0x61, 0xfe, 0x17, 0x00, 0x3a, 0x08, 0x4b, 0x02, 0xf1, 0xf7, + 0x34, 0xff, 0xc2, 0x03, 0x65, 0xff, 0x3b, 0x01, 0x6f, 0x00, 0x59, 0xfd, + 0x4f, 0x00, 0x02, 0xfc, 0x23, 0xfb, 0x20, 0x02, 0xa3, 0x07, 0xd7, 0x03, + 0x51, 0xfb, 0xa6, 0xf9, 0x7d, 0xfa, 0x85, 0x01, 0x49, 0x09, 0x25, 0x06, + 0xb6, 0xf9, 0xa6, 0xfa, 0x61, 0x02, 0xf8, 0xfe, 0xb0, 0xfe, 0xa6, 0x05, + 0x76, 0x03, 0x19, 0xfd, 0xb2, 0xf8, 0xb7, 0xfb, 0x58, 0x03, 0x0b, 0x06, + 0xf3, 0x02, 0xb4, 0xfd, 0xfa, 0xfd, 0x87, 0xff, 0x60, 0xfc, 0x49, 0x03, + 0x86, 0x05, 0x01, 0x00, 0x43, 0xfd, 0xae, 0xfc, 0x3d, 0xfa, 0x29, 0x03, + 0x45, 0x09, 0x32, 0x05, 0x8d, 0xfc, 0x77, 0xec, 0x5c, 0xf8, 0xff, 0x1b, + 0x9c, 0x08, 0x40, 0xed, 0x8b, 0xfa, 0x6b, 0x05, 0x97, 0xfa, 0xd6, 0xfc, + 0xff, 0x06, 0x28, 0x06, 0x74, 0xfd, 0xdb, 0xfb, 0xc5, 0xfe, 0x12, 0xfe, + 0x4c, 0xfe, 0x20, 0x04, 0x29, 0x00, 0x89, 0x02, 0x78, 0x03, 0x35, 0xfc, + 0x6f, 0xf6, 0x70, 0xfe, 0x55, 0x0a, 0xea, 0x01, 0x9a, 0xfb, 0xcd, 0xfd, + 0xf3, 0xfc, 0x86, 0xfc, 0x2b, 0x01, 0x73, 0x01, 0xe0, 0x04, 0x44, 0x02, + 0x33, 0xfb, 0x90, 0xf3, 0x88, 0xfd, 0x5a, 0x0d, 0xf1, 0x0d, 0x00, 0x00, + 0xfd, 0xf6, 0xca, 0xf6, 0x85, 0xfb, 0x2b, 0x03, 0x30, 0x0d, 0xe0, 0x05, + 0xe1, 0x03, 0xa8, 0xf6, 0xd8, 0xf2, 0x6b, 0xff, 0xe6, 0x08, 0xae, 0x09, + 0xf5, 0x01, 0x51, 0xfe, 0xb8, 0xf7, 0x1a, 0xf2, 0xe9, 0xfe, 0xab, 0x15, + 0x75, 0x08, 0xa4, 0xf7, 0xad, 0xf7, 0x4a, 0xfc, 0xd3, 0x00, 0x10, 0xfe, + 0xc7, 0x05, 0x6a, 0x0c, 0x1e, 0xf9, 0x9a, 0xef, 0x9a, 0x03, 0xf2, 0x03, + 0xe8, 0x03, 0x3c, 0x03, 0xb2, 0xf6, 0x56, 0xfa, 0x29, 0x07, 0x56, 0xfd, + 0x13, 0xf9, 0x8e, 0x04, 0x6a, 0x07, 0xb5, 0xfb, 0x73, 0xf8, 0x0b, 0x01, + 0x83, 0x03, 0xf8, 0x00, 0xee, 0xfc, 0x62, 0xfd, 0xe4, 0x07, 0x88, 0x00, + 0x71, 0xf7, 0x81, 0x06, 0x04, 0x04, 0xeb, 0xf9, 0x91, 0x0c, 0x61, 0x02, + 0x36, 0xea, 0xcb, 0xfe, 0xc7, 0x13, 0xe7, 0xff, 0xc2, 0xf9, 0x9f, 0xfc, + 0x8b, 0xfc, 0x9b, 0xfe, 0xbf, 0x03, 0x29, 0x03, 0x04, 0xfe, 0x62, 0x03, + 0x68, 0x01, 0x4e, 0x00, 0xf9, 0xfd, 0xaf, 0x03, 0x8e, 0x06, 0x9f, 0xf6, + 0xd0, 0xf6, 0x04, 0x02, 0xb4, 0x02, 0xe3, 0x08, 0x99, 0x01, 0x53, 0xf8, + 0xec, 0xf9, 0x99, 0xf9, 0xda, 0x00, 0xf8, 0x07, 0x96, 0x03, 0x6b, 0x01, + 0xbc, 0xfa, 0x62, 0xf9, 0x40, 0x00, 0x5e, 0x01, 0x27, 0x04, 0x88, 0x09, + 0xed, 0xfd, 0x77, 0xf8, 0x95, 0xff, 0xbd, 0xff, 0xa2, 0x00, 0x94, 0x07, + 0x33, 0x01, 0x6b, 0x00, 0x5d, 0xfa, 0xe2, 0xfb, 0xf1, 0x00, 0x26, 0x06, + 0xee, 0x02, 0xa5, 0xfc, 0x9e, 0xf8, 0x84, 0xfe, 0xf6, 0x03, 0x14, 0x04, + 0xa0, 0x06, 0xfe, 0xf6, 0xe0, 0xf6, 0x49, 0x05, 0x3f, 0x05, 0x85, 0x03, + 0x93, 0xfd, 0x41, 0xfd, 0xa7, 0xfc, 0x8c, 0x02, 0xe2, 0x04, 0x41, 0x05, + 0x55, 0xff, 0x7b, 0xf8, 0xa7, 0xfe, 0xbe, 0x06, 0xaf, 0xf7, 0x81, 0xf9, + 0x3d, 0x0b, 0x0f, 0x0c, 0xe0, 0xfc, 0x62, 0xf1, 0xcb, 0xfa, 0xe0, 0x08, + 0xc8, 0x01, 0x5e, 0xfc, 0x16, 0x06, 0x6c, 0x00, 0xfe, 0xec, 0x42, 0x07, + 0xf1, 0x11, 0x18, 0xfd, 0xbe, 0xff, 0x72, 0xf9, 0x6b, 0xf4, 0x89, 0x05, + 0x0a, 0x0c, 0x0f, 0xfd, 0x6d, 0xff, 0xb2, 0xf6, 0xce, 0xfa, 0x8e, 0x05, + 0x09, 0x04, 0xb3, 0xfd, 0xef, 0x08, 0x08, 0xff, 0x0e, 0xef, 0x17, 0xf9, + 0x0c, 0x0b, 0x88, 0x02, 0xc7, 0xfc, 0x75, 0x04, 0x18, 0x08, 0x13, 0x01, + 0x63, 0xf3, 0x54, 0xfe, 0x29, 0x08, 0x67, 0x01, 0xfe, 0x05, 0xd3, 0x09, + 0xca, 0xfd, 0x42, 0xf7, 0xb1, 0xef, 0xcb, 0xff, 0xc3, 0x14, 0x23, 0x04, + 0x37, 0xec, 0xc0, 0xfe, 0x3f, 0x0e, 0x28, 0xfa, 0xb4, 0xfb, 0x6d, 0x0a, + 0xc9, 0x02, 0x50, 0xee, 0xad, 0xfb, 0xca, 0x07, 0x6e, 0x07, 0xe9, 0xff, + 0xa1, 0xff, 0xec, 0xff, 0x9e, 0xfe, 0x1e, 0xfd, 0xe5, 0x03, 0x79, 0x09, + 0x50, 0x06, 0x32, 0xf5, 0x3a, 0xf3, 0x3c, 0x05, 0x14, 0x01, 0xf8, 0x05, + 0x58, 0x07, 0x3c, 0xf1, 0xe1, 0xf6, 0x26, 0x0a, 0xb4, 0x02, 0xcf, 0xfd, + 0x8a, 0x06, 0x6b, 0xfe, 0xbd, 0xf5, 0x4a, 0x08, 0xeb, 0x07, 0x8a, 0x0c, + 0xf8, 0x01, 0xdd, 0xee, 0x72, 0xfa, 0x0d, 0x05, 0x77, 0x05, 0xe0, 0x02, + 0xb2, 0x02, 0x57, 0x00, 0x22, 0xf9, 0xf4, 0xf5, 0x02, 0x05, 0xef, 0x04, + 0x0b, 0xf6, 0x63, 0xf8, 0xbf, 0x09, 0xff, 0x08, 0xb1, 0xfe, 0xb5, 0xf8, + 0xaf, 0xf4, 0x3e, 0x00, 0xe5, 0x0b, 0x6e, 0x07, 0xd7, 0x07, 0x28, 0xfc, + 0xfe, 0xf3, 0xd7, 0xf9, 0x66, 0x01, 0xa2, 0x08, 0x50, 0x0a, 0x72, 0x0a, + 0xde, 0xf7, 0xaa, 0xf3, 0xd8, 0x00, 0x02, 0x03, 0xea, 0xfe, 0x24, 0x01, + 0x40, 0x05, 0x07, 0x07, 0x65, 0xfb, 0x32, 0xf7, 0x0c, 0x01, 0xb3, 0x06, + 0xc4, 0xfe, 0x05, 0xfb, 0xd7, 0x02, 0x01, 0x0d, 0x39, 0xff, 0x05, 0xef, + 0x68, 0xfa, 0x68, 0x04, 0x24, 0x06, 0x1e, 0x08, 0x41, 0xf6, 0x34, 0xf6, + 0x07, 0x0c, 0x4e, 0x02, 0xbd, 0xfa, 0xd4, 0x05, 0x26, 0xfc, 0x62, 0xf5, + 0x84, 0x0d, 0x20, 0x0a, 0xb8, 0x04, 0x57, 0xff, 0x25, 0xe7, 0x6a, 0xfa, + 0x1b, 0x1a, 0x6d, 0x03, 0xff, 0xf5, 0x28, 0x04, 0xd5, 0xf7, 0x66, 0xf5, + 0xfe, 0x09, 0xc2, 0x0b, 0x37, 0xf9, 0xfa, 0xf6, 0x44, 0xfb, 0x16, 0x0f, + 0x61, 0x03, 0x3f, 0xf5, 0x5c, 0xf5, 0x44, 0x03, 0xba, 0x12, 0x78, 0x06, + 0x83, 0xfd, 0x49, 0x02, 0x8d, 0xf6, 0x3a, 0xf4, 0xe0, 0x09, 0x9c, 0x01, + 0x98, 0xfb, 0xbf, 0x0e, 0xdc, 0xff, 0xfe, 0xee, 0xa9, 0x08, 0xed, 0xfc, + 0xa6, 0xf9, 0x4c, 0x09, 0x97, 0x0a, 0xf7, 0x00, 0x05, 0xf1, 0xd7, 0xee, + 0x3b, 0x04, 0x97, 0x1c, 0xdd, 0x04, 0x32, 0xeb, 0x34, 0x08, 0x70, 0x0a, + 0xec, 0xf2, 0xba, 0xf9, 0x4b, 0x11, 0xed, 0x0c, 0xa8, 0xef, 0xed, 0xec, + 0x78, 0x0b, 0xcb, 0x14, 0x9c, 0xfe, 0xb9, 0xfe, 0xd6, 0xf8, 0x5c, 0xe5, + 0xa8, 0xf6, 0x6e, 0x1f, 0xbe, 0x0e, 0x18, 0xf1, 0x97, 0xfb, 0x66, 0xfe, + 0x50, 0xf7, 0x4b, 0x02, 0x2b, 0x11, 0x4e, 0x09, 0xf5, 0xf6, 0x6a, 0xf9, + 0xef, 0x03, 0x79, 0x01, 0x0c, 0xfb, 0x9b, 0x06, 0x14, 0xf9, 0xe7, 0xe5, + 0x76, 0x12, 0x07, 0x1e, 0x4a, 0xf5, 0x55, 0xed, 0x8a, 0xfc, 0x02, 0x03, + 0x68, 0x00, 0x03, 0x05, 0x63, 0x0b, 0xeb, 0xfb, 0x31, 0xe8, 0x18, 0x04, + 0x33, 0x1f, 0x7c, 0xf9, 0x0f, 0xed, 0x80, 0x11, 0x3c, 0x0c, 0xd3, 0xf1, + 0x76, 0xf5, 0xaf, 0x0f, 0x48, 0x0a, 0xe4, 0xf1, 0xde, 0xf9, 0x03, 0x05, + 0x28, 0xfe, 0x66, 0x01, 0xec, 0x03, 0x0c, 0xf8, 0x5c, 0xfb, 0x57, 0x13, + 0x1d, 0x00, 0x24, 0xef, 0x1a, 0x02, 0x24, 0x07, 0xc8, 0xf9, 0x33, 0xfa, + 0x4e, 0x03, 0x50, 0x0b, 0xca, 0x0a, 0xb8, 0xf9, 0xeb, 0xf1, 0x84, 0x00, + 0xa1, 0x08, 0x23, 0xf3, 0x1d, 0xf9, 0xd1, 0x16, 0xfd, 0x10, 0xff, 0xf2, + 0xd6, 0xed, 0xa0, 0xfa, 0xbb, 0x00, 0x24, 0x05, 0x90, 0x0a, 0x84, 0x05, + 0x3e, 0x02, 0xd0, 0xf7, 0xbc, 0xfa, 0xf6, 0x03, 0xe4, 0x02, 0xbc, 0xfc, + 0xcb, 0x04, 0x1a, 0x03, 0x6d, 0x01, 0x02, 0x03, 0xa2, 0x04, 0xa9, 0xfd, + 0x5e, 0xf5, 0x4b, 0xfe, 0xa9, 0x09, 0x33, 0x09, 0x29, 0xf5, 0x48, 0xf8, + 0x1d, 0x0f, 0x7c, 0xfd, 0x33, 0xf3, 0x87, 0xff, 0x44, 0x03, 0x7b, 0x03, + 0x80, 0x06, 0x7c, 0xf8, 0xea, 0xf4, 0xfc, 0x06, 0xa4, 0x04, 0xa9, 0xfb, + 0xa2, 0x02, 0xa6, 0x05, 0xa3, 0x00, 0xf9, 0xf3, 0x60, 0x00, 0x6e, 0x06, + 0x97, 0xfd, 0x20, 0x06, 0x19, 0x03, 0x7a, 0xfb, 0x80, 0x08, 0x40, 0xfc, + 0x25, 0xef, 0x7e, 0x03, 0x95, 0x03, 0xb9, 0xf8, 0x71, 0x0f, 0xb0, 0x06, + 0x9b, 0xf3, 0x30, 0xf9, 0x19, 0xfd, 0x4e, 0xff, 0xd8, 0x05, 0x40, 0x07, + 0x14, 0x03, 0x1d, 0xfc, 0x5b, 0xf7, 0x5d, 0xfd, 0x16, 0x06, 0xc5, 0xfc, + 0xd5, 0xf5, 0xfc, 0x0f, 0x24, 0x10, 0x22, 0xf8, 0x09, 0xf9, 0xa4, 0x04, + 0xa9, 0xff, 0x8e, 0xff, 0xef, 0x04, 0x29, 0xff, 0x5d, 0xf8, 0x4e, 0x04, + 0x50, 0x04, 0x72, 0x03, 0x24, 0xf4, 0x0c, 0xf9, 0xa6, 0x08, 0x91, 0x06, + 0xd1, 0xfe, 0x6f, 0xfe, 0x1e, 0xf7, 0x1c, 0x05, 0x9c, 0x00, 0x9d, 0xf5, + 0x5c, 0x07, 0x34, 0x0b, 0x97, 0xf4, 0x8b, 0xf5, 0xf7, 0x04, 0x14, 0x0b, + 0xf5, 0x05, 0x0f, 0xf6, 0xca, 0xf3, 0xa0, 0x01, 0xde, 0x05, 0x69, 0xfb, + 0xb7, 0x09, 0x31, 0x06, 0xca, 0xfa, 0xd3, 0xfd, 0x6e, 0x02, 0x06, 0xf8, + 0x09, 0xfd, 0xb5, 0x06, 0x1e, 0x00, 0x0c, 0x08, 0xf8, 0x0a, 0x54, 0xfe, + 0x15, 0xf5, 0x00, 0xfa, 0x06, 0x02, 0x67, 0x0e, 0x0a, 0x04, 0x0d, 0xff, + 0x8f, 0xf7, 0x01, 0xef, 0xb2, 0xfc, 0xab, 0x0a, 0x79, 0x03, 0xc5, 0x07, + 0x10, 0x04, 0x94, 0xeb, 0xcc, 0xee, 0x41, 0x09, 0x94, 0x0e, 0x81, 0x06, + 0x0b, 0xfd, 0x30, 0xef, 0x2c, 0xf7, 0xea, 0x0b, 0xa5, 0x05, 0x1d, 0x00, + 0x3a, 0x0a, 0x69, 0xf7, 0x69, 0xef, 0x14, 0x0d, 0x3b, 0x03, 0x1c, 0xf7, + 0xfb, 0x02, 0x52, 0x01, 0xa4, 0x03, 0x3a, 0xff, 0x22, 0x02, 0xc4, 0x04, + 0x4c, 0xf8, 0x29, 0xfc, 0xff, 0x02, 0x31, 0x02, 0x69, 0x01, 0x68, 0xf8, + 0xe9, 0xfc, 0xec, 0x0a, 0x53, 0x02, 0x36, 0xf6, 0xf3, 0x02, 0xcd, 0x05, + 0x62, 0x00, 0xda, 0xf6, 0x08, 0xf8, 0xc4, 0x07, 0xe9, 0x0c, 0xde, 0xf7, + 0x20, 0xf0, 0xdb, 0x05, 0x4f, 0x01, 0xac, 0x00, 0x21, 0x0b, 0xb1, 0xf9, + 0x89, 0xf6, 0x6b, 0x0d, 0x71, 0x03, 0x9e, 0xf1, 0x45, 0xfc, 0xf7, 0x09, + 0x5c, 0xf9, 0xae, 0xf6, 0xd9, 0x05, 0xce, 0x07, 0x20, 0x05, 0xd7, 0xfe, + 0xf1, 0xf0, 0x54, 0xfb, 0x9e, 0x0a, 0xce, 0x02, 0x5d, 0xfa, 0x81, 0x07, + 0x33, 0x0f, 0x94, 0xf2, 0xb7, 0xf1, 0x64, 0x08, 0xbd, 0x0b, 0xa4, 0xfc, + 0x60, 0x02, 0xd6, 0xfc, 0xb9, 0xf5, 0x08, 0xfb, 0x2b, 0x08, 0x3e, 0x09, + 0xb0, 0xf3, 0x18, 0xf2, 0x66, 0x11, 0xb5, 0x09, 0xc4, 0xf3, 0x83, 0x01, + 0x56, 0x0a, 0x56, 0xf5, 0xab, 0xf9, 0xca, 0x0c, 0xcd, 0xf8, 0x9b, 0xe0, + 0x70, 0x05, 0xf2, 0x1f, 0xdd, 0x08, 0xf7, 0x01, 0xe3, 0xe7, 0x9f, 0xe5, + 0x86, 0x0a, 0xb1, 0x1b, 0x9d, 0x06, 0x44, 0xf4, 0x7d, 0xf6, 0xd1, 0xf7, + 0xfe, 0xff, 0x56, 0x09, 0x68, 0x12, 0xb4, 0xfe, 0x6f, 0xf7, 0xd3, 0xf4, + 0x06, 0xf5, 0x35, 0x07, 0xba, 0x11, 0xd6, 0x02, 0xb3, 0xfc, 0x8c, 0xfe, + 0x67, 0xfb, 0x0c, 0xf7, 0xa0, 0x03, 0xa5, 0x12, 0x31, 0xfd, 0xab, 0xf5, + 0x54, 0x03, 0x61, 0x00, 0xcd, 0xf5, 0x96, 0xfa, 0x8c, 0x0c, 0x35, 0x02, + 0x60, 0xfa, 0x9b, 0x03, 0x18, 0xfd, 0x75, 0xfa, 0x3a, 0xff, 0x02, 0x00, + 0xf2, 0xf6, 0x32, 0x04, 0xbe, 0x12, 0x8d, 0xff, 0x3f, 0xef, 0xf8, 0xf5, + 0xad, 0x08, 0x20, 0x04, 0xed, 0xff, 0xe7, 0x01, 0x9e, 0x01, 0x3c, 0xf2, + 0xd7, 0xf4, 0xee, 0x06, 0x43, 0x0b, 0x24, 0x0e, 0xda, 0x00, 0xfc, 0xed, + 0x07, 0xf6, 0xf6, 0x07, 0x22, 0x09, 0x94, 0x09, 0xc5, 0xff, 0xaf, 0xf2, + 0x5c, 0xfa, 0x21, 0x06, 0x22, 0xfd, 0x78, 0x0a, 0xb0, 0x11, 0x22, 0xf4, + 0xf5, 0xe6, 0xdb, 0x05, 0x13, 0x05, 0xc4, 0xeb, 0x1e, 0x0c, 0xd6, 0x14, + 0xe8, 0xef, 0x9e, 0xef, 0xe9, 0x0a, 0xdf, 0x0d, 0x7a, 0xfc, 0x46, 0xfc, + 0x5f, 0xf9, 0x2e, 0x01, 0xf5, 0x01, 0x85, 0xff, 0xfa, 0xfd, 0xa3, 0x04, + 0x03, 0x11, 0xfd, 0xf9, 0x05, 0xe8, 0x2a, 0x03, 0x3d, 0x0e, 0x7b, 0x06, + 0x2e, 0xfa, 0xc9, 0x00, 0x7d, 0x00, 0x0b, 0xfe, 0x6f, 0x05, 0xde, 0x05, + 0x3a, 0xf8, 0x48, 0xfd, 0x73, 0xf9, 0x27, 0xf3, 0x80, 0xfc, 0x26, 0x08, + 0x0d, 0x10, 0x91, 0x01, 0xcb, 0xed, 0x2f, 0xf3, 0x8f, 0x02, 0x6a, 0x00, + 0x99, 0x06, 0x59, 0x0d, 0x01, 0xf4, 0xac, 0xeb, 0x8f, 0x07, 0x9b, 0x08, + 0x46, 0xf3, 0xdd, 0xf8, 0x74, 0x14, 0x36, 0x0b, 0x65, 0xf3, 0x86, 0xf5, + 0x9f, 0x1e, 0x1c, 0x0e, 0xa2, 0xef, 0x0c, 0xf5, 0xb3, 0xf8, 0xfd, 0x02, + 0x5f, 0x13, 0x4c, 0x09, 0x9f, 0xf7, 0x42, 0x00, 0x9e, 0xfd, 0x58, 0xed, + 0x77, 0x02, 0x86, 0x15, 0x37, 0x05, 0x92, 0xf7, 0x61, 0x04, 0x97, 0xfa, + 0x47, 0xe9, 0xeb, 0x04, 0x48, 0x0d, 0xc8, 0xfb, 0x9b, 0xff, 0x28, 0x02, + 0xd4, 0xfc, 0xef, 0x00, 0xf2, 0x01, 0x2c, 0xfc, 0x2c, 0xfa, 0xbe, 0xfd, + 0xb4, 0xf4, 0x94, 0xff, 0x9f, 0xfe, 0x3f, 0x03, 0x5a, 0x09, 0x42, 0x06, + 0x4a, 0x00, 0xe5, 0xf8, 0x41, 0xf0, 0xaf, 0xf4, 0x2d, 0x0d, 0x40, 0x11, + 0xf6, 0xfe, 0x4e, 0xf5, 0x79, 0xfa, 0xfd, 0xfd, 0x8e, 0x0d, 0x43, 0x11, + 0x8a, 0xfa, 0x81, 0xf9, 0x96, 0xfd, 0x90, 0x01, 0x20, 0x02, 0xeb, 0x02, + 0x00, 0x05, 0xa8, 0xfb, 0x14, 0xf6, 0x32, 0x00, 0x51, 0x08, 0x4c, 0x0d, + 0x94, 0x00, 0xf8, 0xff, 0x32, 0xfa, 0xa3, 0xf5, 0xe9, 0x01, 0x2a, 0x0f, + 0x38, 0x06, 0xda, 0xf9, 0xd9, 0xfa, 0xa7, 0xf0, 0x33, 0x07, 0x4b, 0x0e, + 0x77, 0xf8, 0x78, 0xf7, 0x3f, 0x04, 0x29, 0xfb, 0x8a, 0xfa, 0x61, 0x04, + 0x08, 0x03, 0x64, 0x06, 0x6f, 0x01, 0x61, 0xf2, 0x2f, 0xf7, 0xb5, 0x02, + 0x39, 0x05, 0x6d, 0xfb, 0xc0, 0xfd, 0x0d, 0x07, 0xc2, 0x01, 0x8c, 0xf5, + 0x73, 0x02, 0x53, 0x06, 0x4a, 0x0f, 0x0a, 0x01, 0x25, 0xf6, 0x07, 0x03, + 0x87, 0x02, 0x6e, 0xf5, 0x14, 0x01, 0x98, 0x0f, 0x18, 0x06, 0x3a, 0xf8, + 0xe9, 0x01, 0xde, 0xfe, 0xc5, 0xf8, 0xc8, 0xfc, 0x1a, 0x04, 0xd6, 0x04, + 0x29, 0xf9, 0xd4, 0xfa, 0x56, 0x0c, 0x3e, 0x04, 0x71, 0xf5, 0x88, 0xfb, + 0x33, 0x04, 0x21, 0x09, 0xd2, 0x02, 0xb2, 0xfc, 0x14, 0xfd, 0xef, 0xfb, + 0x70, 0xf9, 0x14, 0x09, 0x6b, 0x07, 0x02, 0xfe, 0xe2, 0xfc, 0x29, 0x00, + 0x97, 0xf6, 0x0f, 0xfc, 0x71, 0x04, 0xd4, 0x07, 0x21, 0x03, 0xd4, 0xfa, + 0x8e, 0xfa, 0x2c, 0x07, 0x8e, 0x01, 0x2b, 0x07, 0x43, 0x03, 0x83, 0xf3, + 0x5a, 0xfa, 0x82, 0xfe, 0x99, 0x00, 0x58, 0x0b, 0xcb, 0x07, 0x1b, 0xfb, + 0x5e, 0xfa, 0x91, 0x03, 0x48, 0x02, 0xed, 0x01, 0x45, 0x02, 0x26, 0xf1, + 0x60, 0xf1, 0xad, 0x04, 0xc2, 0x08, 0x23, 0x08, 0x09, 0x03, 0x45, 0x06, + 0xff, 0x01, 0x24, 0xfc, 0x07, 0x00, 0xb8, 0xfd, 0x2d, 0xff, 0x3d, 0xfc, + 0x99, 0xfe, 0x4a, 0x05, 0x52, 0x08, 0xbd, 0xfd, 0x13, 0xf4, 0x9e, 0xf1, + 0x91, 0x03, 0x6a, 0x10, 0x7b, 0x09, 0x9e, 0xfb, 0x25, 0xfd, 0xdc, 0xf7, + 0x4d, 0xf6, 0x88, 0x00, 0xb9, 0x0a, 0x00, 0x0b, 0x9e, 0x08, 0xfd, 0xf4, + 0x6f, 0xf4, 0x27, 0x02, 0x82, 0x0b, 0x69, 0x06, 0x57, 0xfe, 0xb7, 0xfa, + 0xd1, 0xf9, 0x63, 0xfc, 0x53, 0x02, 0xa7, 0xff, 0xbc, 0xfd, 0x82, 0x06, + 0x55, 0x01, 0x3b, 0xfd, 0x8e, 0x02, 0x2a, 0x07, 0x91, 0xfd, 0x5e, 0x00, + 0x2e, 0x07, 0x87, 0xfe, 0xb9, 0xfa, 0x05, 0x09, 0x02, 0x08, 0x97, 0xff, + 0x36, 0x00, 0x76, 0x08, 0xd3, 0x00, 0x6b, 0xfe, 0xc4, 0xfe, 0x11, 0xfb, + 0xfe, 0xf6, 0x1c, 0x03, 0x32, 0x06, 0xf1, 0xf9, 0x89, 0xf7, 0x8c, 0xfe, + 0x13, 0x01, 0xe4, 0xfa, 0xd0, 0xfb, 0x0b, 0xff, 0x34, 0x04, 0xa7, 0x00, + 0xb4, 0xfa, 0x12, 0xfc, 0xe8, 0xfe, 0xc7, 0xfb, 0x59, 0x01, 0xc6, 0x04, + 0x45, 0x01, 0x7d, 0xfa, 0x5e, 0x03, 0xc7, 0x07, 0xd8, 0xfc, 0x5c, 0xfe, + 0xd8, 0xfd, 0x41, 0xf5, 0x5b, 0xfb, 0x92, 0x06, 0x91, 0x06, 0x38, 0x06, + 0x96, 0x01, 0x4e, 0x03, 0x1b, 0x03, 0xbb, 0x00, 0xb5, 0xfd, 0x89, 0x01, + 0x64, 0x07, 0xb4, 0x04, 0x9f, 0x05, 0xee, 0x00, 0xf7, 0xf4, 0x25, 0xff, + 0x35, 0x05, 0xa8, 0xfd, 0x40, 0x01, 0xca, 0x09, 0xb0, 0x05, 0xf6, 0xf9, + 0xb0, 0xfe, 0xd2, 0xfd, 0x0b, 0xf7, 0xee, 0xf8, 0xd1, 0x03, 0xab, 0x03, + 0x0a, 0xf8, 0xf5, 0xfb, 0xa9, 0x02, 0xa0, 0xfe, 0x5d, 0xfe, 0x23, 0xff, + 0x6e, 0x03, 0x7d, 0xfd, 0x40, 0xfd, 0xb1, 0x03, 0xfb, 0xfe, 0x68, 0xff, + 0x6a, 0xfd, 0x9e, 0x06, 0x53, 0x05, 0xca, 0x05, 0x5e, 0x05, 0x41, 0xfd, + 0xb2, 0xff, 0x3e, 0x01, 0x1b, 0xff, 0x0c, 0x01, 0x40, 0x05, 0x4e, 0xfb, + 0x86, 0xfd, 0x69, 0x04, 0xf6, 0x01, 0x2b, 0x0e, 0x3f, 0x05, 0x0f, 0xf2, + 0x92, 0xf5, 0x65, 0xff, 0x6b, 0x03, 0x69, 0x0d, 0x90, 0x02, 0x67, 0xf3, + 0x8a, 0xfb, 0x95, 0x04, 0x8e, 0xff, 0x8b, 0xff, 0xc4, 0x07, 0x60, 0x05, + 0xce, 0xfa, 0x73, 0xf3, 0x5c, 0xfa, 0xdf, 0x01, 0x48, 0x02, 0xc7, 0x05, + 0xdd, 0x01, 0x16, 0xfe, 0xc2, 0xf9, 0x7e, 0xfb, 0xa2, 0x04, 0xad, 0x07, + 0xaa, 0x05, 0x30, 0x07, 0xe1, 0x02, 0xfe, 0xf8, 0x04, 0xfb, 0x92, 0x02, + 0x00, 0x07, 0x90, 0x04, 0xf6, 0x03, 0xda, 0xfb, 0x0c, 0xf8, 0xc0, 0xfd, + 0xa3, 0x04, 0xfd, 0x01, 0xe2, 0xf8, 0x7e, 0xf7, 0xf1, 0x00, 0x10, 0xfb, + 0x9f, 0xfc, 0xbe, 0x04, 0x98, 0x05, 0xd0, 0xfe, 0x4d, 0xff, 0xb8, 0x00, + 0x03, 0x01, 0x54, 0x02, 0x99, 0x00, 0xe9, 0xfc, 0x1f, 0xfb, 0x39, 0x03, + 0x7a, 0x06, 0xab, 0x06, 0x4d, 0x04, 0x0a, 0x01, 0x53, 0xfa, 0x96, 0xf6, + 0xcd, 0xfd, 0x96, 0x05, 0x6b, 0x05, 0x0c, 0xff, 0xa5, 0x01, 0x00, 0x04, + 0x17, 0xfd, 0x21, 0xfa, 0x68, 0x03, 0xcd, 0x01, 0x48, 0xfb, 0xc1, 0xf9, + 0x4c, 0x00, 0xd2, 0x06, 0xe1, 0x02, 0x94, 0x05, 0x0a, 0x05, 0xa3, 0xf8, + 0x7b, 0xf9, 0x9b, 0xff, 0x7c, 0x05, 0x6f, 0x05, 0x1d, 0x02, 0x01, 0x08, + 0x8f, 0x00, 0xb3, 0xf7, 0x60, 0xfa, 0xde, 0x06, 0x05, 0x09, 0x26, 0x09, + 0x02, 0x02, 0x19, 0x04, 0x88, 0x01, 0x5d, 0xf8, 0x3a, 0xfa, 0x38, 0xfe, + 0x25, 0xff, 0x47, 0x03, 0xeb, 0x04, 0x30, 0x00, 0x3d, 0x00, 0x1d, 0xf7, + 0x0b, 0xfd, 0xd1, 0x00, 0xc8, 0x00, 0xf6, 0xfe, 0xde, 0xfe, 0x0c, 0x00, + 0x87, 0xfc, 0x7f, 0xf6, 0x34, 0xff, 0x9a, 0x07, 0xec, 0x02, 0x9c, 0x04, + 0x5f, 0x02, 0x65, 0xfd, 0xef, 0xff, 0xce, 0x03, 0x19, 0x03, 0x56, 0x06, + 0x49, 0x04, 0x3f, 0xff, 0x7e, 0xfe, 0x98, 0x01, 0x43, 0x04, 0x39, 0x04, + 0xca, 0x00, 0x98, 0x01, 0x30, 0xff, 0x43, 0x01, 0x32, 0xfd, 0x54, 0xfb, + 0x35, 0xfe, 0x99, 0x01, 0xfb, 0xff, 0x91, 0xfd, 0x88, 0xff, 0x51, 0x00, + 0x98, 0x01, 0x2b, 0x00, 0xb6, 0xfc, 0xf0, 0xf9, 0x5a, 0xfa, 0x24, 0xfe, + 0xd9, 0x01, 0x59, 0xfe, 0x21, 0xfe, 0x44, 0x02, 0x14, 0x00, 0x75, 0x00, + 0xd7, 0x01, 0xee, 0xff, 0x0f, 0xfd, 0x32, 0xfc, 0xf7, 0xfe, 0x3e, 0x01, + 0x92, 0x03, 0xd1, 0x02, 0x01, 0x01, 0x81, 0x00, 0x75, 0x01, 0x96, 0x01, + 0x92, 0x00, 0x43, 0xff, 0xfb, 0xff, 0x1e, 0x02, 0x8d, 0x02, 0xa6, 0x01, + 0x8a, 0x02, 0x4a, 0x01, 0x50, 0xfe, 0x23, 0xff, 0xe7, 0x02, 0x01, 0x03, + 0x22, 0x03, 0x97, 0x02, 0x78, 0x00, 0xd2, 0x00, 0xb0, 0xfe, 0xec, 0xfb, + 0xd9, 0xfe, 0x02, 0x02, 0x74, 0x04, 0x9f, 0x05, 0xea, 0x01, 0xf7, 0xfc, + 0xc9, 0xfd, 0x47, 0xff, 0x25, 0x00, 0xfb, 0x03, 0x74, 0xfe, 0xa3, 0xfe, + 0x36, 0x00, 0xca, 0x00, 0xdb, 0x03, 0xf9, 0x04, 0x09, 0x06, 0x1b, 0x03, + 0xd8, 0x01, 0x31, 0xfe, 0x15, 0xfd, 0x77, 0xfd, 0xa0, 0x01, 0xfe, 0x00, + 0xa5, 0xff, 0x01, 0xfe, 0xc6, 0x00, 0x79, 0x02, 0x8a, 0x00, 0x70, 0xff, + 0x1b, 0xfd, 0x8c, 0xfc, 0xc0, 0xfd, 0x1e, 0x02, 0x08, 0x04, 0x4c, 0x02, + 0x2f, 0x00, 0xd0, 0xfe, 0x6f, 0xff, 0xc4, 0x00, 0x08, 0x04, 0xd3, 0x02, + 0x72, 0x01, 0x86, 0xfe, 0x9c, 0xfc, 0x13, 0xfd, 0x86, 0xfd, 0x89, 0xfe, + 0xe0, 0xff, 0x90, 0x00, 0x18, 0xfe, 0xae, 0xfc, 0xe9, 0xfc, 0x9b, 0xfd, + 0xa8, 0xfd, 0x7c, 0xfb, 0x1c, 0xfa, 0x1c, 0xfa, 0x87, 0xf8, 0x70, 0xfc, + 0x69, 0x00, 0x7b, 0x01, 0x7c, 0xff, 0xf0, 0xfd, 0xd5, 0xfd, 0x58, 0xfc, + 0x10, 0xfd, 0x49, 0xfb, 0x28, 0xfb, 0x5b, 0xfb, 0xbc, 0xfc, 0xcd, 0xff, + 0x00, 0x00, 0x26, 0x00, 0x3b, 0xfe, 0x76, 0xfe, 0x07, 0xfe, 0xa1, 0xfe, + 0x4e, 0xfd, 0x07, 0xff, 0x98, 0xfe, 0x0b, 0x00, 0x51, 0x02, 0xc7, 0x02, + 0x2b, 0x03, 0x69, 0x01, 0x09, 0xfe, 0x5d, 0xfc, 0x68, 0xff, 0x9c, 0x00, + 0x39, 0x01, 0xe2, 0x07, 0x29, 0x09, 0x7a, 0x07, 0x40, 0x06, 0x68, 0x00, + 0x51, 0xfd, 0x0d, 0xfe, 0x6f, 0xfd, 0x1d, 0x02, 0x7b, 0x07, 0x76, 0x10, + 0xb1, 0x10, 0xf6, 0x09, 0x31, 0x03, 0x09, 0xff, 0x0d, 0x00, 0x21, 0x02, + 0x48, 0x07, 0xbb, 0x08, 0xfd, 0x06, 0xc7, 0x03, 0xa1, 0x04, 0x93, 0x03, + 0xad, 0x04, 0x63, 0x06, 0x4b, 0x07, 0xb1, 0x05, 0xff, 0x02, 0x52, 0xff, + 0xd8, 0xfb, 0xb2, 0xfa, 0x17, 0xfe, 0x2f, 0x02, 0x39, 0x04, 0xc3, 0x04, + 0xf6, 0x03, 0xe6, 0x00, 0xe0, 0xfe, 0xce, 0xfd, 0xd2, 0xfe, 0x61, 0xfe, + 0x81, 0xfe, 0x9a, 0xfd, 0x9c, 0xfd, 0x25, 0xfd, 0x92, 0xfd, 0x37, 0xfe, + 0xf7, 0xfe, 0x46, 0xff, 0xa3, 0xfd, 0xc3, 0xf9, 0xeb, 0xf6, 0xa4, 0xf3, + 0x8d, 0xf3, 0xa2, 0xf6, 0x61, 0xf9, 0x6f, 0xfb, 0x61, 0xfb, 0xfb, 0xfb, + 0x5f, 0xfc, 0x63, 0xfa, 0xcf, 0xf7, 0x7a, 0xf5, 0x1c, 0xf3, 0x2f, 0xf1, + 0x23, 0xf2, 0xc6, 0xf5, 0xb0, 0xf7, 0xc7, 0xfa, 0x66, 0xfb, 0xec, 0xfa, + 0xe7, 0xfc, 0x34, 0xfe, 0xb3, 0xfb, 0x19, 0xf9, 0x42, 0xf7, 0x38, 0xf8, + 0x10, 0xf9, 0x67, 0xfe, 0x4c, 0xff, 0x4a, 0x00, 0x28, 0x00, 0x7d, 0x00, + 0x7f, 0xfd, 0x2c, 0xfe, 0xc7, 0xff, 0xdf, 0x01, 0x86, 0x02, 0x9e, 0x03, + 0xb2, 0x03, 0x7d, 0x0b, 0xde, 0x12, 0xcf, 0x13, 0xdf, 0x13, 0xce, 0x0c, + 0x39, 0x06, 0x3b, 0x03, 0x7b, 0x02, 0xd5, 0x02, 0x3d, 0x08, 0x30, 0x0b, + 0x37, 0x0b, 0x55, 0x0b, 0xa9, 0x0a, 0xa7, 0x08, 0x28, 0x09, 0x2c, 0x07, + 0x65, 0x05, 0x9e, 0x05, 0xa8, 0x05, 0xcf, 0x07, 0x62, 0x09, 0xd3, 0x0b, + 0x9e, 0x0b, 0x7f, 0x08, 0xa8, 0x06, 0xf3, 0x05, 0x1d, 0x06, 0xf4, 0x05, + 0xf5, 0x07, 0xd2, 0x06, 0xcc, 0x04, 0x16, 0x07, 0xd7, 0x06, 0xae, 0x04, + 0x5a, 0x04, 0xfa, 0x00, 0xb7, 0xff, 0xa5, 0xfd, 0x9d, 0xfb, 0x02, 0xfc, + 0x34, 0xfc, 0x9e, 0xfc, 0x98, 0x00, 0xfa, 0x01, 0x86, 0xff, 0x2f, 0xfd, + 0xe5, 0xfa, 0xd4, 0xf6, 0x69, 0xf6, 0xe9, 0xf6, 0xa0, 0xf6, 0x77, 0xf2, + 0x3e, 0xf1, 0x9e, 0xee, 0xc4, 0xee, 0xb4, 0xee, 0x98, 0xef, 0x5a, 0xf0, + 0xe5, 0xee, 0xa0, 0xee, 0xfb, 0xef, 0x03, 0xf3, 0x6e, 0xf2, 0x97, 0xf1, + 0x6e, 0xf0, 0xf8, 0xef, 0xd1, 0xf0, 0x26, 0xf6, 0x30, 0xfb, 0x5e, 0xff, + 0x48, 0xfd, 0x67, 0xf9, 0x6f, 0xf5, 0x72, 0xf6, 0x7d, 0xf9, 0x25, 0xfe, + 0x02, 0x02, 0x75, 0x02, 0xad, 0x08, 0xed, 0x06, 0x98, 0x03, 0xc2, 0x00, + 0x07, 0xff, 0x1c, 0xfc, 0x53, 0xff, 0xce, 0x00, 0x61, 0x00, 0x9f, 0x01, + 0x0e, 0x00, 0xab, 0x00, 0xd6, 0xff, 0x56, 0x01, 0x55, 0x04, 0xd3, 0x07, + 0xcd, 0x09, 0x4c, 0x08, 0xd5, 0x02, 0x23, 0x06, 0xaf, 0x0a, 0xc7, 0x0e, + 0xfd, 0x12, 0xe1, 0x13, 0x7a, 0x13, 0x43, 0x13, 0x4f, 0x10, 0xc7, 0x0c, + 0x37, 0x0c, 0xde, 0x0b, 0xd6, 0x0a, 0xb9, 0x0c, 0x8d, 0x0d, 0xab, 0x0c, + 0xcd, 0x0b, 0x9e, 0x0a, 0x70, 0x08, 0x39, 0x06, 0x5f, 0x05, 0x0a, 0x05, + 0x58, 0x06, 0xd7, 0x06, 0x6f, 0x08, 0x2c, 0x09, 0x28, 0x0a, 0x39, 0x0b, + 0xfd, 0x09, 0xf9, 0x07, 0x51, 0x04, 0x91, 0x01, 0xf5, 0xff, 0x43, 0x01, + 0xb3, 0x01, 0xf5, 0xff, 0xde, 0xfc, 0x14, 0xfb, 0x6b, 0xf9, 0x74, 0xfa, + 0x09, 0xfa, 0xf2, 0xf5, 0x77, 0xf1, 0xfd, 0xeb, 0x43, 0xea, 0xe2, 0xe8, + 0x95, 0xea, 0xb7, 0xed, 0x89, 0xf2, 0x34, 0xf5, 0x0c, 0xf5, 0x50, 0xf3, + 0xc5, 0xed, 0xf5, 0xe7, 0x92, 0xe6, 0xb1, 0xe9, 0x1c, 0xee, 0xff, 0xf4, + 0x19, 0xf7, 0x14, 0xf5, 0xb8, 0xef, 0x2c, 0xf1, 0x48, 0xf5, 0xcc, 0xf9, + 0xb8, 0x01, 0x32, 0x01, 0xc6, 0xfb, 0xc1, 0xf5, 0xb1, 0xf0, 0xf8, 0xf1, + 0x47, 0xf8, 0xdb, 0x01, 0x98, 0x06, 0x0b, 0x07, 0xa4, 0x04, 0xd9, 0xff, + 0x35, 0xff, 0xc9, 0xfa, 0xc4, 0xfd, 0x1b, 0xff, 0xdc, 0xfc, 0x84, 0xfc, + 0x14, 0xfb, 0x8c, 0xfa, 0x89, 0x00, 0xf6, 0x04, 0xe7, 0x05, 0xaa, 0x06, + 0x04, 0x05, 0x37, 0x05, 0x99, 0x05, 0x65, 0x06, 0x04, 0x04, 0x88, 0x07, + 0x11, 0x08, 0x2d, 0x0f, 0x26, 0x15, 0x81, 0x18, 0x54, 0x19, 0x2d, 0x16, + 0x87, 0x13, 0x42, 0x11, 0x21, 0x10, 0xbc, 0x10, 0xd8, 0x11, 0xe3, 0x11, + 0x4b, 0x0d, 0x88, 0x0c, 0x00, 0x0d, 0x8a, 0x0d, 0x61, 0x10, 0x02, 0x10, + 0x48, 0x0f, 0x4c, 0x0b, 0xa4, 0x09, 0xe6, 0x05, 0x95, 0x04, 0x61, 0x03, + 0xc3, 0x04, 0x5f, 0x06, 0xb3, 0x07, 0x3c, 0x09, 0x36, 0x09, 0x22, 0x06, + 0x38, 0x02, 0x31, 0xfd, 0xf7, 0xfa, 0x9f, 0xfa, 0x21, 0xfb, 0xf3, 0xfa, + 0xf8, 0xf8, 0x48, 0xf7, 0x4f, 0xf5, 0x01, 0xf4, 0x2a, 0xf2, 0x7b, 0xf2, + 0x4f, 0xf1, 0x35, 0xee, 0xff, 0xea, 0xf2, 0xe8, 0xb9, 0xe6, 0xd4, 0xe9, + 0x31, 0xeb, 0x6d, 0xed, 0x37, 0xea, 0x9c, 0xe6, 0x99, 0xe8, 0x2e, 0xea, + 0x1d, 0xf2, 0x9f, 0xf6, 0x70, 0xfa, 0x93, 0xf5, 0x6f, 0xf3, 0xa8, 0xf1, + 0x20, 0xf6, 0x18, 0xff, 0x2d, 0x01, 0x18, 0x02, 0xb1, 0xfe, 0x96, 0xfa, + 0xc8, 0xfa, 0x13, 0xfb, 0xeb, 0xfc, 0x7d, 0x00, 0x2d, 0xfd, 0x6f, 0xfd, + 0xb3, 0xfb, 0x2c, 0xfa, 0xd8, 0xfa, 0x78, 0xf9, 0x73, 0xf6, 0x86, 0xf7, + 0x54, 0xf8, 0xbc, 0xfa, 0x50, 0xfe, 0xd9, 0xfd, 0x27, 0xff, 0x38, 0xff, + 0x41, 0x00, 0xc1, 0x00, 0xed, 0x03, 0xf1, 0x00, 0x26, 0x04, 0x3a, 0x08, + 0x7a, 0x0a, 0xbb, 0x0d, 0x74, 0x0f, 0xa8, 0x0e, 0xb6, 0x0d, 0x90, 0x0e, + 0xb4, 0x0e, 0x82, 0x11, 0x2f, 0x15, 0xe9, 0x17, 0xdb, 0x17, 0xf5, 0x17, + 0xaf, 0x12, 0x69, 0x12, 0x08, 0x11, 0x50, 0x12, 0x4e, 0x14, 0xe5, 0x13, + 0x16, 0x13, 0x8a, 0x0e, 0xa9, 0x0d, 0xae, 0x08, 0x0f, 0x0a, 0x49, 0x0c, + 0xf3, 0x0d, 0xcf, 0x0f, 0xfa, 0x0c, 0x46, 0x09, 0xc8, 0x04, 0xdf, 0x01, + 0xd4, 0xff, 0x1d, 0x00, 0xb0, 0x01, 0x7a, 0x01, 0x7f, 0x03, 0xf9, 0x00, + 0xb0, 0xff, 0x85, 0xfc, 0x69, 0xf7, 0xe5, 0xf9, 0x6f, 0xf7, 0x33, 0xf9, + 0xb0, 0xf7, 0xc7, 0xf3, 0x0b, 0xf0, 0xf6, 0xeb, 0x44, 0xed, 0xef, 0xed, + 0x7f, 0xef, 0x5a, 0xed, 0x66, 0xe8, 0x1d, 0xe3, 0x5b, 0xdc, 0xab, 0xdd, + 0xc9, 0xe2, 0x0b, 0xe8, 0x05, 0xf0, 0xbf, 0xf1, 0x34, 0xf2, 0x76, 0xf1, + 0x43, 0xf7, 0x53, 0xfb, 0xda, 0xf6, 0x60, 0x00, 0x5f, 0xfd, 0x71, 0x00, + 0xe6, 0x03, 0x2f, 0x02, 0x85, 0xff, 0x4d, 0xfb, 0xe3, 0xfa, 0xfb, 0xf6, + 0xea, 0xfa, 0xe1, 0xf8, 0x8d, 0xfb, 0xcf, 0xfb, 0x36, 0xfb, 0x2a, 0xf8, + 0xab, 0xf5, 0xeb, 0xf3, 0x7c, 0xf6, 0xc0, 0xf8, 0x1d, 0xfb, 0x0c, 0xfc, + 0xce, 0xf7, 0x63, 0xfd, 0xc4, 0x00, 0x63, 0x02, 0xe8, 0x03, 0x5d, 0x03, + 0x71, 0x02, 0xb3, 0x05, 0xe2, 0x08, 0x70, 0x09, 0x59, 0x0c, 0x72, 0x0d, + 0xc4, 0x0b, 0x76, 0x0d, 0xfd, 0x0e, 0xd4, 0x0f, 0x7a, 0x13, 0xe7, 0x16, + 0xf7, 0x17, 0xbd, 0x18, 0x78, 0x19, 0x72, 0x17, 0xf6, 0x15, 0xec, 0x16, + 0xbb, 0x16, 0x72, 0x18, 0x04, 0x18, 0xde, 0x15, 0x45, 0x13, 0xf4, 0x10, + 0x75, 0x0d, 0xea, 0x0b, 0x74, 0x09, 0x3a, 0x07, 0x5f, 0x09, 0x1d, 0x0a, + 0x04, 0x0b, 0x3d, 0x0a, 0xae, 0x07, 0x91, 0x03, 0x1d, 0x01, 0xb2, 0x00, + 0x60, 0xff, 0x95, 0x00, 0x80, 0x00, 0x43, 0xfd, 0x51, 0xfc, 0xe6, 0xf9, + 0xdc, 0xfb, 0x41, 0xfd, 0xc8, 0xfc, 0xa6, 0xfc, 0xc7, 0xf7, 0x8d, 0xf5, + 0x6c, 0xef, 0x72, 0xeb, 0x30, 0xe6, 0x7a, 0xe3, 0x07, 0xe1, 0x42, 0xe0, + 0x10, 0xe1, 0xdb, 0xe1, 0x03, 0xe5, 0xc8, 0xe7, 0x19, 0xeb, 0x38, 0xec, + 0x71, 0xee, 0xa3, 0xf0, 0xb2, 0xf7, 0xa3, 0xf8, 0x92, 0xfd, 0x40, 0xfd, + 0x4f, 0xfc, 0xe2, 0xfd, 0xda, 0xff, 0x0c, 0x03, 0x2b, 0x02, 0xc2, 0xff, + 0x76, 0xf9, 0x37, 0xf8, 0x5e, 0xf7, 0xe8, 0xfa, 0x51, 0xfa, 0x07, 0xf8, + 0xff, 0xf4, 0xd0, 0xf2, 0xee, 0xef, 0x08, 0xf1, 0x44, 0xf6, 0x89, 0xf7, + 0xb7, 0xf9, 0xeb, 0xfa, 0x55, 0xfb, 0xf3, 0xfc, 0x6e, 0x03, 0xf9, 0x06, + 0x58, 0x08, 0x72, 0x07, 0x06, 0x04, 0xdf, 0x02, 0xbe, 0x05, 0xc1, 0x08, + 0xcf, 0x0d, 0x7b, 0x0d, 0x05, 0x0e, 0xaa, 0x0a, 0xae, 0x09, 0x83, 0x08, + 0xd5, 0x0a, 0x02, 0x11, 0xca, 0x17, 0x89, 0x1b, 0x30, 0x1a, 0xa9, 0x19, + 0x06, 0x17, 0x42, 0x17, 0xa6, 0x17, 0x28, 0x17, 0x95, 0x19, 0xbe, 0x1a, + 0x74, 0x19, 0xc0, 0x17, 0x3d, 0x11, 0x66, 0x0c, 0x2e, 0x0b, 0x8f, 0x0c, + 0x08, 0x0d, 0x06, 0x0f, 0x2b, 0x0c, 0x8f, 0x08, 0xc1, 0x06, 0xc8, 0x04, + 0xfd, 0x02, 0x23, 0x02, 0xee, 0xfd, 0x98, 0xfc, 0x6e, 0xfc, 0xfc, 0xfc, + 0x8a, 0xff, 0xb1, 0x03, 0x87, 0x04, 0xc5, 0x04, 0x1e, 0x00, 0x00, 0xfc, + 0x26, 0xf9, 0x6d, 0xf7, 0x2b, 0xf3, 0x3b, 0xf0, 0x0d, 0xea, 0x9d, 0xe7, + 0x19, 0xe6, 0x00, 0xe4, 0xab, 0xe3, 0x43, 0xdf, 0x35, 0xdd, 0x33, 0xdd, + 0x7c, 0xdf, 0x62, 0xe3, 0x89, 0xe6, 0x74, 0xeb, 0xe0, 0xf1, 0x09, 0xf7, + 0xdc, 0xfb, 0x95, 0xff, 0x9e, 0x02, 0x66, 0x05, 0xe0, 0x07, 0xaa, 0x04, + 0x89, 0x05, 0xed, 0x00, 0x8e, 0xff, 0x4f, 0x01, 0x6d, 0xfe, 0xb4, 0xf9, + 0x37, 0xf5, 0xa7, 0xee, 0xa2, 0xec, 0x33, 0xee, 0x9d, 0xec, 0x9d, 0xeb, + 0x7e, 0xec, 0xac, 0xeb, 0xb8, 0xf1, 0xad, 0xf9, 0x64, 0xfb, 0xfd, 0xff, + 0x49, 0x03, 0xca, 0xff, 0x78, 0x04, 0x04, 0x06, 0x39, 0x07, 0xad, 0x0c, + 0xca, 0x0b, 0xf1, 0x09, 0xb8, 0x09, 0xb7, 0x0a, 0x22, 0x09, 0xd6, 0x09, + 0x31, 0x07, 0x60, 0x07, 0x9f, 0x0a, 0x07, 0x0f, 0x14, 0x12, 0x04, 0x14, + 0x44, 0x13, 0xe4, 0x11, 0x7f, 0x13, 0x35, 0x15, 0xa4, 0x18, 0x77, 0x1a, + 0x97, 0x1b, 0x71, 0x1a, 0x07, 0x19, 0xbc, 0x18, 0x76, 0x17, 0x3a, 0x17, + 0x81, 0x15, 0xfd, 0x13, 0xb3, 0x10, 0x0b, 0x0e, 0x08, 0x0c, 0xa5, 0x09, + 0xc0, 0x07, 0x11, 0x05, 0x9d, 0x03, 0x17, 0x02, 0x8a, 0x01, 0xad, 0x01, + 0x17, 0x01, 0xc8, 0x00, 0x2a, 0x00, 0xac, 0xff, 0xb9, 0x01, 0x9c, 0x02, + 0xea, 0x03, 0x13, 0x03, 0x7e, 0x02, 0x20, 0x02, 0xb0, 0x00, 0x4f, 0xfe, + 0xe2, 0xfa, 0x05, 0xf5, 0xb5, 0xf0, 0xfc, 0xec, 0x42, 0xe8, 0x5e, 0xe4, + 0xb8, 0xde, 0x10, 0xd9, 0x7c, 0xd4, 0xad, 0xd3, 0x48, 0xd4, 0x3c, 0xd6, + 0xbe, 0xdc, 0xea, 0xe1, 0x54, 0xec, 0x5e, 0xf6, 0xf8, 0xff, 0x39, 0x03, + 0x35, 0x05, 0x20, 0x05, 0x69, 0x07, 0x2f, 0x0b, 0x31, 0x0c, 0x7b, 0x0c, + 0xef, 0x09, 0x60, 0x07, 0xf3, 0x01, 0xad, 0xfd, 0x16, 0xf8, 0xef, 0xf2, + 0xf0, 0xed, 0x4b, 0xe9, 0xf1, 0xe5, 0xf3, 0xe4, 0x8a, 0xe4, 0x7c, 0xe9, + 0x23, 0xed, 0xf3, 0xf2, 0xeb, 0xf9, 0x8c, 0xfd, 0x1c, 0x02, 0x6b, 0x06, + 0x87, 0x08, 0x72, 0x09, 0x5a, 0x0a, 0x97, 0x08, 0x57, 0x08, 0xe6, 0x06, + 0x49, 0x06, 0x75, 0x05, 0x98, 0x06, 0x7c, 0x05, 0x59, 0x06, 0xb2, 0x06, + 0xf6, 0x05, 0x3f, 0x07, 0x4f, 0x07, 0xa2, 0x08, 0x73, 0x0b, 0xdf, 0x0e, + 0x26, 0x12, 0xda, 0x14, 0xf9, 0x15, 0xc0, 0x18, 0xff, 0x1b, 0x56, 0x1f, + 0xb7, 0x21, 0x6d, 0x21, 0x40, 0x1e, 0x53, 0x1b, 0x60, 0x17, 0xce, 0x12, + 0xde, 0x0f, 0x31, 0x0e, 0xdb, 0x0c, 0xbf, 0x0c, 0x30, 0x0a, 0xda, 0x06, + 0xa2, 0x03, 0x2b, 0x00, 0x5c, 0xfd, 0x27, 0xfd, 0x43, 0xfd, 0xe1, 0xfe, + 0x09, 0x01, 0x2f, 0x03, 0x76, 0x03, 0x10, 0x04, 0x86, 0x03, 0x53, 0x03, + 0x0f, 0x05, 0xcc, 0x04, 0xb4, 0x04, 0xec, 0x03, 0xfe, 0xff, 0x15, 0xfe, + 0xa8, 0xfa, 0x08, 0xf6, 0xd0, 0xf2, 0xdb, 0xee, 0x74, 0xea, 0x99, 0xe5, + 0xd9, 0xe0, 0x12, 0xdd, 0x15, 0xdc, 0x95, 0xd9, 0xe2, 0xd6, 0x94, 0xd3, + 0xd9, 0xd2, 0x4e, 0xd8, 0x57, 0xdf, 0x8a, 0xe8, 0xf1, 0xf4, 0xba, 0xfe, + 0xef, 0x05, 0xea, 0x0c, 0xbd, 0x0f, 0x67, 0x12, 0x05, 0x13, 0xd9, 0x0f, + 0x06, 0x08, 0x9b, 0x03, 0xa6, 0xfc, 0xaf, 0xf9, 0x9a, 0xf6, 0xc8, 0xf2, + 0xd0, 0xf1, 0xb1, 0xf0, 0x4c, 0xed, 0xad, 0xeb, 0x00, 0xec, 0xe7, 0xeb, + 0xc5, 0xee, 0xd7, 0xf1, 0xd6, 0xf3, 0xfd, 0xf6, 0x6d, 0xfc, 0x89, 0x00, + 0xbb, 0x04, 0x22, 0x09, 0xce, 0x0b, 0x20, 0x0e, 0x1f, 0x0f, 0xb8, 0x0c, + 0x1c, 0x0a, 0x4c, 0x07, 0x08, 0x04, 0x8c, 0x01, 0x3d, 0x00, 0x16, 0xfe, + 0x6d, 0xfe, 0x24, 0x00, 0x2b, 0x02, 0x2d, 0x04, 0xa5, 0x04, 0x6a, 0x06, + 0x7c, 0x0b, 0x45, 0x11, 0xa1, 0x17, 0xe1, 0x1c, 0x81, 0x20, 0xd7, 0x21, + 0x40, 0x23, 0xb1, 0x23, 0x30, 0x23, 0x0e, 0x22, 0x06, 0x1f, 0x1d, 0x1a, + 0x71, 0x14, 0x22, 0x0f, 0xbd, 0x0b, 0xf1, 0x08, 0xdc, 0x07, 0x91, 0x05, + 0x57, 0x03, 0xe5, 0xff, 0x95, 0xfd, 0xba, 0xfb, 0xc9, 0xfa, 0x16, 0xfb, + 0xc8, 0xfc, 0x64, 0xff, 0xda, 0x01, 0x37, 0x04, 0x90, 0x06, 0xe8, 0x07, + 0xfd, 0x08, 0x11, 0x09, 0x82, 0x07, 0x49, 0x05, 0x53, 0x03, 0xc7, 0xff, + 0xf1, 0xfc, 0x3a, 0xfa, 0x9c, 0xf5, 0x7a, 0xf2, 0xf3, 0xef, 0x50, 0xed, + 0x66, 0xec, 0x31, 0xea, 0xbf, 0xe4, 0x6b, 0xdf, 0x4b, 0xd9, 0x32, 0xd3, + 0x26, 0xd1, 0x71, 0xd0, 0x0d, 0xd4, 0x0d, 0xdb, 0x13, 0xe2, 0x0e, 0xea, + 0x73, 0xf3, 0x0f, 0xff, 0x06, 0x0a, 0x58, 0x12, 0x3b, 0x15, 0xb6, 0x14, + 0xf1, 0x13, 0x34, 0x11, 0xfd, 0x0a, 0x32, 0x04, 0xf4, 0xfb, 0x01, 0xf6, + 0x5b, 0xf2, 0xb3, 0xf0, 0x11, 0xf0, 0x24, 0xef, 0x21, 0xee, 0xe1, 0xeb, + 0x52, 0xeb, 0xa8, 0xee, 0xfe, 0xef, 0x34, 0xf2, 0xb5, 0xf4, 0x86, 0xf8, + 0x6e, 0xfe, 0x9c, 0x04, 0x3c, 0x09, 0xc4, 0x0c, 0x49, 0x0f, 0x95, 0x0f, + 0x78, 0x0e, 0x26, 0x0d, 0x0a, 0x0b, 0xd3, 0x07, 0x42, 0x01, 0xa5, 0xfb, + 0x13, 0xf9, 0xf9, 0xf7, 0x7c, 0xfa, 0x33, 0xfc, 0xb0, 0xfe, 0x13, 0x02, + 0x2b, 0x06, 0x29, 0x0a, 0xbd, 0x0d, 0xe2, 0x11, 0x0f, 0x19, 0x23, 0x1e, + 0xcb, 0x22, 0xa3, 0x25, 0x06, 0x25, 0xc1, 0x23, 0x5e, 0x22, 0x11, 0x1f, + 0x7a, 0x1b, 0xd3, 0x18, 0x9d, 0x14, 0xa9, 0x0e, 0x89, 0x08, 0xc2, 0x02, + 0xdd, 0xff, 0x04, 0xff, 0x9f, 0xfe, 0x79, 0xfe, 0x08, 0xfe, 0x4f, 0xfd, + 0x4c, 0xfd, 0x4d, 0xfe, 0xcf, 0xff, 0x56, 0x02, 0x3b, 0x05, 0x29, 0x06, + 0xa5, 0x07, 0x60, 0x08, 0x7f, 0x08, 0xda, 0x08, 0x4e, 0x09, 0x56, 0x07, + 0xba, 0x05, 0xe4, 0x03, 0xed, 0x00, 0x49, 0xfe, 0xc0, 0xf8, 0x42, 0xf2, + 0x39, 0xef, 0x9d, 0xee, 0x6d, 0xf0, 0x68, 0xf1, 0x41, 0xf2, 0x15, 0xed, + 0x41, 0xe7, 0x59, 0xe1, 0x80, 0xd5, 0x63, 0xd1, 0x2e, 0xcf, 0xd7, 0xce, + 0x9d, 0xd1, 0xaa, 0xd8, 0x32, 0xdd, 0xdd, 0xe8, 0x24, 0xf7, 0x72, 0x02, + 0x3a, 0x11, 0x95, 0x1a, 0x4c, 0x1b, 0xfc, 0x1d, 0x7e, 0x1b, 0x77, 0x15, + 0xeb, 0x0f, 0xe3, 0x08, 0x32, 0xfe, 0xab, 0xf5, 0x6d, 0xec, 0x88, 0xe7, + 0x62, 0xe5, 0x8b, 0xe5, 0x5b, 0xe7, 0x45, 0xe8, 0xcf, 0xea, 0xc9, 0xed, + 0x94, 0xf2, 0xcf, 0xf6, 0xa6, 0xfd, 0x79, 0x01, 0x1b, 0x06, 0x1b, 0x0b, + 0x2b, 0x0e, 0x9c, 0x10, 0xcc, 0x10, 0x46, 0x0f, 0x0b, 0x0f, 0x47, 0x0e, + 0xfa, 0x0a, 0xf3, 0x05, 0x9d, 0xfd, 0x91, 0xf6, 0xa6, 0xf4, 0x75, 0xf5, + 0xd5, 0xf8, 0x58, 0xfc, 0x56, 0x00, 0xb9, 0x03, 0x8e, 0x08, 0xdf, 0x0c, + 0x90, 0x11, 0x50, 0x16, 0xe2, 0x1a, 0xd6, 0x1d, 0xe6, 0x1f, 0xff, 0x20, + 0x9b, 0x21, 0x99, 0x20, 0xb0, 0x1e, 0x24, 0x1b, 0x29, 0x18, 0xad, 0x14, + 0x8e, 0x0f, 0x66, 0x0a, 0x91, 0x04, 0xb8, 0xff, 0x0a, 0xfd, 0x49, 0xfc, + 0xfa, 0xfa, 0x59, 0xfb, 0x60, 0xfc, 0x14, 0xfe, 0x20, 0x02, 0x5f, 0x06, + 0x58, 0x09, 0x78, 0x0a, 0x02, 0x0a, 0x69, 0x09, 0x2e, 0x09, 0x00, 0x09, + 0xba, 0x08, 0xf2, 0x07, 0xbf, 0x06, 0xf1, 0x04, 0x77, 0x02, 0x1f, 0x00, + 0x08, 0xfe, 0x0f, 0xfb, 0x73, 0xf8, 0x3b, 0xf5, 0xda, 0xf2, 0xc5, 0xef, + 0x4a, 0xf1, 0x3b, 0xf2, 0x80, 0xf4, 0xcd, 0xf2, 0x28, 0xf0, 0xaa, 0xeb, + 0x15, 0xe8, 0x56, 0xe5, 0xa2, 0xe2, 0x57, 0xdd, 0xcf, 0xd4, 0xcb, 0xcb, + 0xc6, 0xc7, 0xf5, 0xcc, 0x6d, 0xda, 0x80, 0xed, 0x9e, 0xfe, 0x27, 0x0e, + 0x0f, 0x19, 0xf2, 0x22, 0x51, 0x26, 0xc5, 0x25, 0xc1, 0x1d, 0x36, 0x13, + 0xa8, 0x08, 0xed, 0xfd, 0x92, 0xf4, 0x1a, 0xed, 0xf1, 0xe7, 0x25, 0xe5, + 0x96, 0xe5, 0x56, 0xe7, 0x53, 0xea, 0x75, 0xed, 0x6e, 0xf0, 0x73, 0xf4, + 0x8b, 0xf7, 0x12, 0xf9, 0x6e, 0xfc, 0x7e, 0xff, 0x0e, 0x04, 0x5c, 0x0a, + 0x9f, 0x0e, 0x5b, 0x11, 0x26, 0x13, 0xc9, 0x13, 0x73, 0x12, 0x59, 0x10, + 0x9c, 0x0a, 0x6e, 0x04, 0x4f, 0xfe, 0x98, 0xf8, 0xdb, 0xf4, 0xb5, 0xf3, + 0xa3, 0xf3, 0x71, 0xf7, 0xa6, 0xfc, 0xe0, 0x01, 0x8a, 0x08, 0xd3, 0x0e, + 0xda, 0x13, 0x5b, 0x18, 0x1b, 0x1b, 0x25, 0x1d, 0x2c, 0x1f, 0x2d, 0x20, + 0xb3, 0x1f, 0xb3, 0x1d, 0xd0, 0x1a, 0x84, 0x17, 0xd6, 0x13, 0x8b, 0x0e, + 0x3b, 0x09, 0x75, 0x04, 0x55, 0x00, 0x6d, 0xfd, 0x84, 0xfb, 0x21, 0xfb, + 0xa1, 0xfc, 0x61, 0xff, 0xab, 0x01, 0xed, 0x03, 0xbe, 0x05, 0x04, 0x08, + 0x36, 0x0a, 0x01, 0x0c, 0xeb, 0x0c, 0xb5, 0x0c, 0xe3, 0x09, 0x26, 0x07, + 0x62, 0x04, 0xaf, 0x02, 0x2d, 0x02, 0xd1, 0x01, 0xcf, 0x00, 0x2e, 0x00, + 0x4e, 0xff, 0x9b, 0xff, 0xd3, 0xff, 0x72, 0xfe, 0xfb, 0xfb, 0x5b, 0xf7, + 0xd9, 0xf1, 0x98, 0xed, 0xff, 0xec, 0x7d, 0xee, 0x7f, 0xf1, 0xbf, 0xf2, + 0x44, 0xf1, 0xd1, 0xeb, 0xf9, 0xe8, 0x16, 0xe2, 0x52, 0xda, 0x4b, 0xd1, + 0x74, 0xc7, 0xd3, 0xc2, 0x30, 0xc6, 0x7b, 0xd2, 0x39, 0xe6, 0x66, 0x00, + 0x28, 0x17, 0x7f, 0x27, 0x46, 0x30, 0x18, 0x31, 0xbb, 0x2c, 0x96, 0x25, + 0x02, 0x1b, 0xe8, 0x0d, 0x6d, 0xfd, 0xbd, 0xec, 0xa8, 0xdf, 0x72, 0xd9, + 0x02, 0xd9, 0x9c, 0xdb, 0x8c, 0xe0, 0xc4, 0xe6, 0x13, 0xed, 0x2c, 0xf3, + 0xed, 0xf8, 0xc4, 0xfd, 0x29, 0x02, 0x71, 0x06, 0xc6, 0x08, 0xd0, 0x0a, + 0xda, 0x0c, 0xff, 0x0e, 0x37, 0x11, 0x3b, 0x13, 0x16, 0x13, 0xb7, 0x11, + 0x94, 0x0e, 0x7c, 0x09, 0xd7, 0x03, 0xde, 0xfc, 0x13, 0xf7, 0xb0, 0xf2, + 0xf6, 0xf0, 0xdd, 0xf0, 0xde, 0xf4, 0x58, 0xfa, 0x68, 0x00, 0x92, 0x07, + 0x84, 0x0e, 0x01, 0x15, 0x2a, 0x1c, 0xcb, 0x20, 0x92, 0x22, 0xf5, 0x21, + 0x93, 0x1f, 0x85, 0x1c, 0x79, 0x19, 0x80, 0x15, 0x72, 0x10, 0xd4, 0x0b, + 0xdd, 0x06, 0xe9, 0x03, 0xea, 0x01, 0x54, 0x00, 0xea, 0xfe, 0xe4, 0xfc, + 0x0c, 0xfc, 0xe8, 0xfc, 0xe5, 0xff, 0x07, 0x03, 0xe8, 0x05, 0x9e, 0x07, + 0x50, 0x09, 0x31, 0x0c, 0x79, 0x0e, 0x6c, 0x0f, 0x5f, 0x0e, 0xe2, 0x0b, + 0x49, 0x0a, 0x06, 0x08, 0xb8, 0x05, 0x45, 0x03, 0x90, 0x00, 0xaa, 0xfe, + 0x3f, 0xfe, 0x6f, 0xfe, 0x58, 0xfe, 0x59, 0xfd, 0x81, 0xfc, 0xe0, 0xfa, + 0x8a, 0xf9, 0x53, 0xf8, 0x38, 0xf6, 0x3c, 0xf2, 0x2d, 0xf0, 0xb6, 0xee, + 0x02, 0xf0, 0x03, 0xf2, 0x97, 0xf3, 0x12, 0xf1, 0xd6, 0xec, 0x9f, 0xe6, + 0x4e, 0xdf, 0xc5, 0xd5, 0xb2, 0xca, 0x47, 0xc2, 0xa4, 0xbf, 0x15, 0xca, + 0x7d, 0xdb, 0xa0, 0xf6, 0xfd, 0x10, 0x70, 0x25, 0xfe, 0x2f, 0xa9, 0x32, + 0x62, 0x2f, 0xdb, 0x28, 0x93, 0x1e, 0xed, 0x10, 0x69, 0x01, 0x19, 0xf0, + 0x92, 0xdf, 0xec, 0xd5, 0x61, 0xd3, 0xc0, 0xd6, 0xf4, 0xde, 0xf1, 0xe6, + 0xa8, 0xf0, 0xbc, 0xf9, 0x7a, 0x00, 0x6e, 0x03, 0xda, 0x05, 0x74, 0x07, + 0x65, 0x08, 0xf3, 0x08, 0x2f, 0x08, 0xfa, 0x09, 0x67, 0x0b, 0x34, 0x0d, + 0x43, 0x0e, 0x6a, 0x0e, 0x45, 0x0e, 0xc4, 0x0d, 0x2c, 0x08, 0x1e, 0x01, + 0xa6, 0xfa, 0x63, 0xf5, 0x1b, 0xf3, 0xe8, 0xf2, 0xb4, 0xf3, 0xa9, 0xf7, + 0xd8, 0xfd, 0x52, 0x05, 0xa5, 0x0d, 0xb1, 0x15, 0xd8, 0x1b, 0x30, 0x20, + 0x4c, 0x22, 0xff, 0x20, 0xbe, 0x1e, 0x02, 0x1b, 0x20, 0x16, 0xdc, 0x11, + 0x61, 0x0d, 0xdc, 0x08, 0xcc, 0x05, 0x6d, 0x02, 0x4d, 0x00, 0x07, 0xff, + 0xbb, 0xfe, 0x6b, 0xfe, 0xdd, 0xfe, 0xd4, 0xff, 0x36, 0x01, 0x54, 0x03, + 0x42, 0x05, 0xd4, 0x06, 0xce, 0x08, 0x00, 0x0b, 0xc6, 0x0c, 0x42, 0x0e, + 0x91, 0x0e, 0x32, 0x0c, 0xc9, 0x09, 0x19, 0x07, 0x6b, 0x05, 0x0a, 0x05, + 0x39, 0x05, 0x5d, 0x03, 0x6b, 0x01, 0x07, 0xff, 0xbb, 0xfd, 0xeb, 0xfd, + 0x66, 0xfe, 0x08, 0xfe, 0xa4, 0xfc, 0x03, 0xfb, 0x20, 0xf8, 0xd3, 0xf5, + 0x6c, 0xf3, 0x6f, 0xf0, 0xcf, 0xee, 0x27, 0xee, 0x98, 0xee, 0x78, 0xf0, + 0x81, 0xf1, 0x7e, 0xf1, 0xfa, 0xef, 0x74, 0xec, 0x63, 0xe6, 0x07, 0xde, + 0x56, 0xd3, 0xb6, 0xc9, 0x58, 0xc4, 0x55, 0xc7, 0x92, 0xd4, 0x73, 0xeb, + 0x1b, 0x05, 0x5b, 0x1a, 0x66, 0x29, 0x9c, 0x30, 0x8a, 0x32, 0x49, 0x2d, + 0x4f, 0x26, 0x60, 0x18, 0x9d, 0x06, 0xa3, 0xf3, 0xc8, 0xe0, 0x75, 0xd4, + 0x9e, 0xd0, 0x7f, 0xd3, 0x6f, 0xda, 0xf7, 0xe4, 0x40, 0xef, 0x3a, 0xf9, + 0x7b, 0x02, 0x1f, 0x09, 0x0b, 0x0c, 0x9e, 0x0d, 0x0e, 0x0d, 0xb9, 0x0a, + 0xc8, 0x08, 0x7e, 0x06, 0x02, 0x04, 0x25, 0x05, 0xdc, 0x06, 0xdf, 0x09, + 0xf1, 0x0c, 0x8d, 0x0d, 0xdc, 0x0a, 0xca, 0x06, 0x42, 0x01, 0x5a, 0xfc, + 0xb6, 0xf9, 0x99, 0xf6, 0x54, 0xf5, 0x2c, 0xf7, 0x61, 0xfb, 0x54, 0x02, + 0x26, 0x0b, 0x1c, 0x13, 0x63, 0x1a, 0xb5, 0x20, 0x48, 0x22, 0xcf, 0x21, + 0xe1, 0x1f, 0x4b, 0x1a, 0xe2, 0x14, 0xde, 0x0e, 0x7f, 0x08, 0xca, 0x03, + 0xaf, 0x00, 0x8a, 0xfd, 0xe7, 0xfb, 0x83, 0xfc, 0x1e, 0xfd, 0x8e, 0xff, + 0xc6, 0x02, 0x4e, 0x04, 0x5b, 0x06, 0x26, 0x08, 0x39, 0x08, 0x62, 0x08, + 0xc6, 0x08, 0x0f, 0x09, 0x62, 0x0a, 0x51, 0x0b, 0x20, 0x0b, 0xf0, 0x0a, + 0xbc, 0x09, 0x3b, 0x08, 0xca, 0x06, 0x42, 0x05, 0x04, 0x03, 0x35, 0x01, + 0x4f, 0xff, 0x3c, 0xfe, 0xde, 0xfd, 0x1f, 0xfe, 0x58, 0xfe, 0xf6, 0xfe, + 0x10, 0xff, 0xc4, 0xfe, 0x68, 0xfe, 0x76, 0xfd, 0x4d, 0xfb, 0x45, 0xf7, + 0x03, 0xf2, 0x73, 0xec, 0xd0, 0xe9, 0xd2, 0xea, 0xbb, 0xee, 0x80, 0xf2, + 0xdf, 0xf3, 0x81, 0xf1, 0x3d, 0xed, 0x51, 0xe7, 0x2a, 0xe1, 0x1c, 0xdc, + 0x12, 0xd4, 0xb8, 0xcc, 0x06, 0xc8, 0x5b, 0xca, 0xc1, 0xd8, 0x52, 0xf1, + 0xf1, 0x0b, 0x88, 0x21, 0xfd, 0x2d, 0x55, 0x30, 0xb3, 0x2e, 0x8e, 0x2b, + 0xba, 0x24, 0xf6, 0x18, 0xda, 0x07, 0x34, 0xf3, 0x4c, 0xe0, 0xec, 0xd4, + 0xa9, 0xcf, 0xfe, 0xd2, 0x3d, 0xdb, 0x22, 0xe5, 0xaa, 0xf0, 0xa1, 0xfb, + 0x07, 0x04, 0xa9, 0x0a, 0xa5, 0x0e, 0x61, 0x0e, 0x9a, 0x0c, 0x9b, 0x0a, + 0x56, 0x07, 0xe1, 0x04, 0x53, 0x04, 0xf4, 0x03, 0x8c, 0x06, 0x29, 0x0b, + 0x33, 0x0f, 0x2a, 0x11, 0x5b, 0x10, 0x1c, 0x0b, 0xa8, 0x04, 0xf3, 0xfe, + 0xe6, 0xf9, 0x0b, 0xf7, 0x53, 0xf6, 0xd9, 0xf6, 0x59, 0xfa, 0x45, 0x01, + 0x82, 0x09, 0x60, 0x12, 0x3b, 0x1a, 0x81, 0x1f, 0x97, 0x21, 0xbd, 0x21, + 0xe8, 0x1e, 0x9a, 0x19, 0x37, 0x13, 0x42, 0x0c, 0xee, 0x05, 0x05, 0x01, + 0x72, 0xfd, 0xc3, 0xfa, 0x3a, 0xfa, 0xfb, 0xfa, 0x24, 0xfd, 0x08, 0x00, + 0xf0, 0x02, 0x73, 0x04, 0xbb, 0x05, 0x58, 0x06, 0x79, 0x07, 0xe7, 0x08, + 0x9b, 0x09, 0x9c, 0x09, 0x7d, 0x0a, 0xa6, 0x0a, 0x3a, 0x0b, 0x09, 0x0b, + 0x94, 0x09, 0xa8, 0x07, 0x8a, 0x05, 0x7a, 0x03, 0xf8, 0x01, 0x1d, 0x00, + 0x6a, 0xfe, 0xd8, 0xfc, 0xf6, 0xfb, 0x80, 0xfc, 0x8c, 0xfd, 0x21, 0xfe, + 0x40, 0xfe, 0x7b, 0xfd, 0x1b, 0xfc, 0xb6, 0xfa, 0x2a, 0xfa, 0x8a, 0xf8, + 0x4c, 0xf6, 0xa3, 0xf3, 0x45, 0xef, 0xf4, 0xec, 0x3a, 0xee, 0xeb, 0xf0, + 0x28, 0xf4, 0x9c, 0xf4, 0x56, 0xf1, 0xbb, 0xeb, 0x1e, 0xe6, 0x94, 0xdf, + 0x4a, 0xd9, 0x62, 0xd2, 0xe9, 0xcd, 0xcf, 0xce, 0x36, 0xd8, 0x49, 0xe9, + 0xad, 0xfd, 0x19, 0x11, 0x2d, 0x1f, 0x47, 0x28, 0xdf, 0x2b, 0x83, 0x2c, + 0x98, 0x27, 0xe1, 0x1e, 0x7e, 0x10, 0xd8, 0xff, 0xba, 0xee, 0x3e, 0xe1, + 0x1f, 0xd9, 0x3b, 0xd7, 0xe5, 0xd9, 0xce, 0xdf, 0x17, 0xe8, 0xae, 0xf1, + 0x2f, 0xfb, 0x12, 0x04, 0xf0, 0x09, 0x26, 0x0d, 0xe3, 0x0d, 0xfe, 0x0c, + 0x19, 0x0b, 0xc3, 0x08, 0x28, 0x07, 0x5e, 0x06, 0x26, 0x08, 0xb8, 0x0a, + 0xb1, 0x0d, 0x4d, 0x0f, 0xec, 0x0e, 0xd6, 0x0c, 0x0e, 0x09, 0x35, 0x04, + 0x11, 0xff, 0xc0, 0xfa, 0x91, 0xf7, 0xe4, 0xf6, 0xd6, 0xf8, 0x14, 0xfd, + 0x8d, 0x04, 0xf7, 0x0c, 0x71, 0x14, 0x3f, 0x1a, 0x26, 0x1e, 0xbc, 0x1e, + 0x81, 0x1d, 0xf5, 0x19, 0x07, 0x14, 0x33, 0x0e, 0xd7, 0x08, 0xc0, 0x03, + 0xd6, 0xff, 0x14, 0xfd, 0x07, 0xfb, 0x4f, 0xfb, 0x1d, 0xfd, 0xc1, 0xfe, + 0x13, 0x01, 0xe2, 0x02, 0xa4, 0x03, 0xdc, 0x04, 0xae, 0x06, 0xba, 0x07, + 0x5a, 0x08, 0xb3, 0x08, 0x77, 0x07, 0x45, 0x08, 0x25, 0x0a, 0x2f, 0x0b, + 0xae, 0x0b, 0x46, 0x09, 0x4e, 0x05, 0x5a, 0x02, 0x0e, 0x01, 0xb0, 0x00, + 0x96, 0x00, 0x59, 0xff, 0xad, 0xfd, 0xc7, 0xfc, 0x61, 0xfc, 0xa2, 0xfd, + 0x5b, 0xfe, 0x36, 0xfe, 0x1e, 0xfe, 0x6e, 0xfc, 0x20, 0xfb, 0x61, 0xfa, + 0x5a, 0xf8, 0xaf, 0xf6, 0x60, 0xf4, 0x1a, 0xf2, 0x70, 0xf0, 0x61, 0xf1, + 0x30, 0xf3, 0xc9, 0xf4, 0xb9, 0xf5, 0x27, 0xf3, 0x78, 0xee, 0xc0, 0xe8, + 0x3d, 0xe1, 0x16, 0xda, 0x0a, 0xd3, 0xeb, 0xce, 0x25, 0xcf, 0x54, 0xd6, + 0x51, 0xe3, 0x21, 0xf5, 0xfe, 0x07, 0xe3, 0x18, 0xb9, 0x25, 0x06, 0x2d, + 0xa5, 0x2e, 0x36, 0x2a, 0x33, 0x21, 0x3b, 0x13, 0x8e, 0x03, 0x1c, 0xf4, + 0x50, 0xe6, 0x54, 0xdc, 0x19, 0xd8, 0x6e, 0xd8, 0xdf, 0xdd, 0x01, 0xe7, + 0x1e, 0xf0, 0x68, 0xf9, 0x99, 0x02, 0x51, 0x08, 0xf1, 0x0b, 0x4e, 0x0d, + 0x00, 0x0c, 0x3b, 0x0a, 0x2e, 0x09, 0xb4, 0x07, 0xff, 0x06, 0xb4, 0x07, + 0x43, 0x09, 0x31, 0x0c, 0xb0, 0x0f, 0xcd, 0x10, 0xc2, 0x0f, 0xc8, 0x0b, + 0xce, 0x05, 0xa5, 0xff, 0xfe, 0xfa, 0xba, 0xf7, 0x00, 0xf7, 0x39, 0xf8, + 0xb2, 0xfb, 0x86, 0x01, 0xf9, 0x08, 0xf3, 0x10, 0x2e, 0x18, 0x80, 0x1d, + 0xe4, 0x1f, 0x48, 0x1f, 0x00, 0x1c, 0x9b, 0x16, 0x62, 0x10, 0xff, 0x09, + 0x0a, 0x04, 0x75, 0xff, 0xc2, 0xfb, 0x20, 0xfa, 0x53, 0xfa, 0xb0, 0xfb, + 0x91, 0xfd, 0xe8, 0xff, 0x95, 0x01, 0xb1, 0x02, 0x25, 0x04, 0x9a, 0x05, + 0xdb, 0x06, 0xd9, 0x07, 0x62, 0x08, 0x47, 0x08, 0x16, 0x09, 0xfa, 0x09, + 0xe6, 0x0a, 0xb1, 0x0a, 0xc6, 0x09, 0xb0, 0x07, 0x4c, 0x05, 0x30, 0x03, + 0xc4, 0x00, 0x76, 0xfe, 0x03, 0xfd, 0xde, 0xfb, 0xd8, 0xfb, 0x46, 0xfc, + 0xba, 0xfc, 0xe7, 0xfd, 0x32, 0xfe, 0x1c, 0xfe, 0xdb, 0xfd, 0x5d, 0xfd, + 0x69, 0xfc, 0xc2, 0xfb, 0xc9, 0xf9, 0x63, 0xf7, 0xda, 0xf4, 0x43, 0xf3, + 0x6c, 0xf2, 0x86, 0xf3, 0x32, 0xf4, 0x14, 0xf3, 0x9a, 0xf1, 0x7f, 0xec, + 0x2a, 0xe9, 0x9a, 0xe5, 0xd0, 0xe1, 0x47, 0xdd, 0x9d, 0xd7, 0xb5, 0xd2, + 0x57, 0xd1, 0x98, 0xd7, 0x22, 0xe4, 0x61, 0xf7, 0x0c, 0x0b, 0x33, 0x1b, + 0xb5, 0x25, 0x1c, 0x29, 0x6c, 0x29, 0x59, 0x25, 0x4f, 0x1e, 0x9b, 0x12, + 0x1a, 0x03, 0x4b, 0xf3, 0xc7, 0xe4, 0xd7, 0xdb, 0x84, 0xd8, 0x43, 0xdb, + 0xfb, 0xe1, 0x70, 0xeb, 0x65, 0xf4, 0x28, 0xfc, 0x0e, 0x03, 0x16, 0x08, + 0xeb, 0x0a, 0x8c, 0x0c, 0xea, 0x0b, 0x28, 0x0a, 0xa9, 0x08, 0x7b, 0x06, + 0x97, 0x05, 0xac, 0x07, 0x29, 0x0b, 0xd4, 0x0e, 0x04, 0x11, 0xc6, 0x10, + 0x06, 0x0e, 0xfa, 0x09, 0xac, 0x05, 0x64, 0x01, 0xb0, 0xfd, 0xad, 0xf9, + 0xc1, 0xf6, 0x65, 0xf6, 0xd8, 0xf9, 0xdb, 0x00, 0xf0, 0x09, 0xcd, 0x11, + 0xdb, 0x17, 0x5a, 0x1b, 0x55, 0x1d, 0x79, 0x1d, 0xb1, 0x1b, 0x08, 0x17, + 0x68, 0x10, 0x2e, 0x0a, 0xa3, 0x03, 0xd6, 0xfe, 0xec, 0xfb, 0xa0, 0xfa, + 0x42, 0xfa, 0xe3, 0xfb, 0xfe, 0xfd, 0x53, 0x00, 0x5e, 0x02, 0x44, 0x03, + 0x9a, 0x03, 0xf7, 0x03, 0x3e, 0x04, 0xc8, 0x04, 0xf9, 0x04, 0xca, 0x04, + 0x77, 0x05, 0x68, 0x06, 0xda, 0x07, 0xcc, 0x09, 0xa2, 0x0a, 0x3b, 0x0a, + 0x5c, 0x08, 0x16, 0x06, 0x49, 0x03, 0xbc, 0x00, 0x7d, 0xfe, 0x61, 0xfd, + 0x5f, 0xfc, 0x38, 0xfc, 0x61, 0xfc, 0x78, 0xfc, 0xaf, 0xfc, 0x58, 0xfd, + 0x5e, 0xfe, 0x9e, 0xfe, 0x6a, 0xfe, 0x6e, 0xfd, 0xc1, 0xfb, 0x5c, 0xfa, + 0x9a, 0xf8, 0xfe, 0xf6, 0x90, 0xf4, 0x90, 0xf2, 0xa9, 0xf1, 0xc6, 0xf1, + 0x68, 0xf2, 0x41, 0xf2, 0xb5, 0xef, 0x13, 0xec, 0xeb, 0xe6, 0xd0, 0xe1, + 0xa2, 0xdc, 0x97, 0xd7, 0x20, 0xd3, 0x6e, 0xd1, 0x5c, 0xd6, 0xee, 0xe2, + 0xac, 0xf5, 0x26, 0x09, 0xf6, 0x18, 0x68, 0x23, 0x4b, 0x28, 0x3d, 0x2a, + 0xcb, 0x28, 0x7c, 0x22, 0x53, 0x16, 0x09, 0x06, 0xa7, 0xf4, 0x75, 0xe6, + 0x3a, 0xde, 0xa7, 0xda, 0xe2, 0xdb, 0xfe, 0xdf, 0x57, 0xe7, 0x9c, 0xf0, + 0x9a, 0xfa, 0x72, 0x03, 0x67, 0x0a, 0x4f, 0x0e, 0xa5, 0x0f, 0x38, 0x0e, + 0x6f, 0x0b, 0x44, 0x08, 0xcf, 0x06, 0x9e, 0x06, 0x64, 0x08, 0x03, 0x0b, + 0x5d, 0x0e, 0x6f, 0x0e, 0x4c, 0x0e, 0x1c, 0x0d, 0x36, 0x0a, 0x5e, 0x07, + 0xf7, 0x02, 0x2b, 0xfd, 0xf1, 0xf8, 0x42, 0xf7, 0xa0, 0xf7, 0x6c, 0xfb, + 0x6f, 0x01, 0xb3, 0x07, 0xbd, 0x0e, 0xfa, 0x13, 0x37, 0x17, 0xa7, 0x19, + 0x90, 0x1a, 0x9b, 0x19, 0xc0, 0x16, 0x17, 0x11, 0x8e, 0x0a, 0xc3, 0x04, + 0x02, 0x00, 0xa9, 0xfd, 0xd9, 0xfc, 0x3c, 0xfc, 0x27, 0xfc, 0xbe, 0xfc, + 0x4d, 0xfd, 0x50, 0xff, 0xc7, 0x01, 0x27, 0x03, 0xdb, 0x03, 0x4e, 0x04, + 0x47, 0x03, 0x94, 0x03, 0x84, 0x04, 0x28, 0x05, 0x5d, 0x06, 0xb4, 0x06, + 0x86, 0x06, 0x99, 0x06, 0x9e, 0x06, 0x07, 0x06, 0x68, 0x06, 0x52, 0x06, + 0xf9, 0x04, 0x6b, 0x02, 0xed, 0xff, 0xa7, 0xfd, 0x62, 0xfc, 0x1a, 0xfc, + 0x1b, 0xfc, 0x36, 0xfc, 0xe8, 0xfc, 0xfd, 0xfc, 0xae, 0xfc, 0x59, 0xfd, + 0xee, 0xfd, 0x4a, 0xfe, 0xbb, 0xfe, 0x72, 0xfd, 0xa3, 0xfa, 0x50, 0xf7, + 0x84, 0xf4, 0x45, 0xf1, 0xc1, 0xf1, 0xb1, 0xf1, 0x93, 0xf1, 0x91, 0xee, + 0x28, 0xec, 0x5b, 0xe8, 0x21, 0xe4, 0x75, 0xe1, 0x23, 0xdb, 0x3c, 0xd6, + 0x00, 0xd3, 0x4c, 0xd5, 0x1d, 0xdc, 0xe0, 0xeb, 0x97, 0xfd, 0x92, 0x0f, + 0x29, 0x1e, 0x05, 0x27, 0xf5, 0x2a, 0x06, 0x2c, 0x6f, 0x28, 0xd3, 0x1f, + 0xbd, 0x12, 0x6d, 0x01, 0x1d, 0xf0, 0xa5, 0xe2, 0x14, 0xda, 0x1b, 0xd8, + 0xc0, 0xdb, 0x89, 0xe2, 0xcd, 0xeb, 0x63, 0xf5, 0x3d, 0xfd, 0x4f, 0x04, + 0x66, 0x0a, 0x18, 0x0e, 0xb9, 0x0f, 0xb2, 0x0e, 0xc0, 0x0a, 0xf0, 0x07, + 0x81, 0x07, 0x53, 0x08, 0xf5, 0x0a, 0xed, 0x0d, 0x8d, 0x0e, 0x8a, 0x0e, + 0xc1, 0x0d, 0x68, 0x0b, 0x55, 0x08, 0xaa, 0x04, 0xbf, 0xff, 0xda, 0xfa, + 0x3b, 0xf7, 0xa8, 0xf5, 0x06, 0xf7, 0x91, 0xfb, 0xf5, 0x01, 0xeb, 0x08, + 0xb5, 0x0f, 0x69, 0x15, 0x8e, 0x19, 0x6d, 0x1b, 0x4d, 0x1a, 0x9f, 0x16, + 0x27, 0x12, 0xa3, 0x0d, 0xca, 0x09, 0x04, 0x05, 0xd4, 0xff, 0xbc, 0xfb, + 0x80, 0xf9, 0x6b, 0xfa, 0x0b, 0xfc, 0xd4, 0xfd, 0xe1, 0xfe, 0x03, 0xff, + 0x89, 0xff, 0x2d, 0x00, 0x51, 0x01, 0x77, 0x02, 0xc4, 0x02, 0xd9, 0x02, + 0x13, 0x03, 0xb7, 0x03, 0xe4, 0x05, 0x10, 0x08, 0x60, 0x09, 0xc3, 0x09, + 0xcc, 0x08, 0xf4, 0x07, 0x85, 0x06, 0x6c, 0x05, 0xfd, 0x02, 0xe9, 0x00, + 0x67, 0xff, 0xa8, 0xfe, 0xd7, 0xfe, 0x51, 0xff, 0x99, 0xff, 0x44, 0xff, + 0x36, 0xff, 0x14, 0xff, 0x3a, 0xff, 0xb5, 0xfe, 0x28, 0xfe, 0x14, 0xfd, + 0x9a, 0xfc, 0x4f, 0xfc, 0xe0, 0xfb, 0xca, 0xf9, 0xe1, 0xf7, 0x9c, 0xf5, + 0x0b, 0xf4, 0xdb, 0xf3, 0x8c, 0xf3, 0x3e, 0xf2, 0xdb, 0xef, 0x1d, 0xec, + 0x74, 0xe8, 0xf9, 0xe4, 0x76, 0xe1, 0xdd, 0xdc, 0xd5, 0xd7, 0xe9, 0xd4, + 0x51, 0xd6, 0x78, 0xde, 0x10, 0xee, 0xc2, 0xff, 0xd7, 0x10, 0x77, 0x1d, + 0x9a, 0x24, 0xd8, 0x28, 0x62, 0x2a, 0x6d, 0x27, 0xd1, 0x1e, 0xfd, 0x11, + 0x98, 0x01, 0x18, 0xf0, 0x79, 0xe3, 0x8e, 0xdc, 0x79, 0xda, 0xcc, 0xdc, + 0xaf, 0xe2, 0xf3, 0xe8, 0xad, 0xf1, 0xcd, 0xfb, 0x0f, 0x04, 0x9f, 0x0a, + 0x89, 0x0e, 0x22, 0x0e, 0x38, 0x0b, 0x5a, 0x09, 0x4a, 0x07, 0x25, 0x07, + 0x5e, 0x08, 0x8d, 0x09, 0x85, 0x0a, 0x85, 0x0c, 0xda, 0x0d, 0xb2, 0x0d, + 0xca, 0x0c, 0x52, 0x0a, 0x6f, 0x06, 0xfe, 0x01, 0x70, 0xfc, 0x7c, 0xf7, + 0xb9, 0xf5, 0xa0, 0xf6, 0xea, 0xf8, 0xb1, 0xfe, 0x8d, 0x05, 0x70, 0x0c, + 0xc0, 0x12, 0x7c, 0x16, 0x76, 0x18, 0x76, 0x19, 0x83, 0x18, 0xd8, 0x14, + 0x8a, 0x0f, 0xb5, 0x09, 0x3f, 0x04, 0x52, 0x00, 0x59, 0xfd, 0x2f, 0xfb, + 0x25, 0xfa, 0x33, 0xfa, 0x02, 0xfb, 0x30, 0xfd, 0xbc, 0xff, 0x7d, 0x01, + 0x63, 0x02, 0x27, 0x02, 0x69, 0x01, 0x4d, 0x02, 0x62, 0x03, 0x5e, 0x03, + 0x06, 0x04, 0x25, 0x04, 0xfb, 0x04, 0x6b, 0x07, 0x1f, 0x0a, 0xe7, 0x0b, + 0x98, 0x0c, 0xfe, 0x0a, 0xc8, 0x07, 0x8e, 0x05, 0x65, 0x04, 0x82, 0x03, + 0xf1, 0x02, 0x28, 0x01, 0xd8, 0xfe, 0x81, 0xfd, 0xf4, 0xfc, 0x11, 0xfe, + 0x8a, 0xff, 0x86, 0x00, 0xd8, 0x00, 0xcf, 0x00, 0xdd, 0x00, 0xc8, 0x00, + 0xb0, 0x00, 0xea, 0xfe, 0x96, 0xfc, 0x95, 0xf8, 0x52, 0xf5, 0x15, 0xf2, + 0xd3, 0xf0, 0xae, 0xf0, 0x64, 0xf1, 0x1e, 0xf0, 0x60, 0xee, 0x86, 0xeb, + 0x2b, 0xe8, 0xd7, 0xe6, 0xe8, 0xe2, 0xf5, 0xdd, 0xdd, 0xd8, 0xd6, 0xd4, + 0x3a, 0xd6, 0x96, 0xdf, 0x94, 0xef, 0xcb, 0x02, 0x5b, 0x14, 0xe4, 0x20, + 0x95, 0x27, 0x16, 0x2a, 0x44, 0x29, 0x6b, 0x26, 0x22, 0x1e, 0xca, 0x0f, + 0xab, 0xfe, 0x2e, 0xed, 0xc7, 0xde, 0xe2, 0xd6, 0x6c, 0xd6, 0x5b, 0xdb, + 0xc3, 0xe2, 0x2c, 0xea, 0x04, 0xf1, 0x8a, 0xf9, 0x39, 0x02, 0x77, 0x09, + 0xb2, 0x0d, 0x28, 0x0e, 0x3e, 0x0c, 0x3f, 0x09, 0xab, 0x06, 0xbe, 0x05, + 0x2e, 0x07, 0xd7, 0x09, 0x7b, 0x0c, 0x5b, 0x0e, 0xf0, 0x0e, 0xdd, 0x0d, + 0x0f, 0x0c, 0x59, 0x09, 0x4e, 0x05, 0x96, 0x01, 0x5a, 0xfd, 0xaa, 0xf7, + 0x02, 0xf4, 0x1c, 0xf4, 0xc5, 0xf7, 0xd8, 0xfe, 0x2b, 0x06, 0x3c, 0x0c, + 0x1b, 0x11, 0x6d, 0x16, 0x7d, 0x18, 0xdf, 0x18, 0xa3, 0x17, 0xf8, 0x14, + 0x0c, 0x11, 0x5c, 0x0c, 0x42, 0x06, 0xd4, 0x00, 0x04, 0xfd, 0xe3, 0xfa, + 0x44, 0xfa, 0xa5, 0xfa, 0xbf, 0xfb, 0x5a, 0xfc, 0xcb, 0xfc, 0xc9, 0xfd, + 0x6e, 0xff, 0xdc, 0x00, 0xb5, 0x02, 0x45, 0x03, 0xf9, 0x03, 0xb8, 0x04, + 0xfc, 0x05, 0xf0, 0x06, 0xac, 0x09, 0x2c, 0x0c, 0x37, 0x0d, 0x81, 0x0d, + 0x28, 0x0c, 0x61, 0x0a, 0x92, 0x09, 0x61, 0x08, 0xef, 0x06, 0xc0, 0x04, + 0xc6, 0x01, 0xce, 0xff, 0xb9, 0xfe, 0x60, 0xfe, 0xe3, 0xfe, 0x69, 0xff, + 0xc6, 0xff, 0x3d, 0x00, 0x87, 0x00, 0xf2, 0x00, 0xfc, 0x01, 0x30, 0x01, + 0x50, 0x00, 0xd9, 0xfd, 0x03, 0xfc, 0x44, 0xfa, 0x1e, 0xf8, 0xb7, 0xf4, + 0x06, 0xf3, 0xef, 0xf1, 0xe2, 0xf1, 0x63, 0xf1, 0xbd, 0xee, 0x22, 0xec, + 0xdc, 0xe6, 0xa7, 0xe5, 0x5a, 0xe0, 0xba, 0xdc, 0x3b, 0xd8, 0xa1, 0xd3, + 0xa1, 0xd5, 0xf9, 0xdd, 0xca, 0xeb, 0x8f, 0xfd, 0xe6, 0x0c, 0x3b, 0x18, + 0x15, 0x20, 0x83, 0x27, 0xfe, 0x29, 0x71, 0x29, 0x3f, 0x21, 0x8c, 0x11, + 0x6f, 0x01, 0x45, 0xf2, 0x88, 0xe6, 0x83, 0xdf, 0x07, 0xdb, 0xec, 0xd8, + 0xf3, 0xdb, 0x51, 0xe2, 0x83, 0xea, 0x91, 0xf4, 0x02, 0xfd, 0xcb, 0x03, + 0xa2, 0x08, 0xb4, 0x09, 0x8d, 0x0a, 0x3e, 0x09, 0x06, 0x09, 0x92, 0x08, + 0x4f, 0x08, 0x35, 0x09, 0x4d, 0x0b, 0x2a, 0x0d, 0xde, 0x0e, 0xe7, 0x0e, + 0xed, 0x0d, 0x25, 0x0c, 0xcf, 0x09, 0x88, 0x06, 0xd7, 0x01, 0xc2, 0xfc, + 0x13, 0xf9, 0x29, 0xf7, 0x62, 0xf8, 0x69, 0xfb, 0xdc, 0xff, 0x2b, 0x04, + 0x54, 0x09, 0x24, 0x0f, 0xc8, 0x13, 0xfd, 0x16, 0xaf, 0x17, 0x50, 0x15, + 0x10, 0x12, 0x7e, 0x0e, 0x2e, 0x0b, 0xe9, 0x07, 0x3e, 0x05, 0x0c, 0x01, + 0xf3, 0xfd, 0x45, 0xfc, 0x27, 0xfc, 0xfa, 0xfc, 0x6e, 0xfe, 0xc1, 0xfe, + 0x0d, 0xff, 0xda, 0xfe, 0x11, 0xff, 0x0b, 0x00, 0xc1, 0x01, 0x00, 0x04, + 0xab, 0x05, 0xdb, 0x06, 0x26, 0x08, 0xf4, 0x09, 0xcf, 0x0b, 0xde, 0x0d, + 0xc5, 0x0e, 0x87, 0x0e, 0x99, 0x0d, 0x2a, 0x0c, 0x81, 0x0a, 0x87, 0x08, + 0x45, 0x06, 0x1b, 0x04, 0xca, 0x01, 0x40, 0x00, 0x91, 0xff, 0x7f, 0xfe, + 0x4a, 0xfe, 0x1a, 0xfe, 0x01, 0xfe, 0x0c, 0xff, 0x7e, 0xff, 0x3b, 0x00, + 0x40, 0x00, 0xb4, 0xff, 0x7f, 0xff, 0x83, 0xfe, 0xb9, 0xfc, 0xd2, 0xf9, + 0x0a, 0xf6, 0xc6, 0xf2, 0xab, 0xf1, 0xdd, 0xef, 0xde, 0xee, 0xec, 0xec, + 0x3b, 0xe9, 0x7a, 0xe7, 0xdf, 0xe4, 0xb0, 0xe1, 0xd6, 0xde, 0x96, 0xda, + 0x87, 0xd6, 0xdc, 0xd5, 0xa6, 0xdb, 0xe6, 0xe6, 0x98, 0xf7, 0x03, 0x07, + 0x34, 0x11, 0xd7, 0x18, 0x2d, 0x1d, 0xf7, 0x20, 0x79, 0x23, 0xcc, 0x20, + 0x92, 0x16, 0xb6, 0x08, 0xd3, 0xf8, 0x18, 0xed, 0x8e, 0xe6, 0x54, 0xe3, + 0x45, 0xe1, 0x69, 0xe1, 0x23, 0xe3, 0x33, 0xe8, 0xc2, 0xef, 0xe4, 0xf7, + 0x26, 0xfe, 0xde, 0x02, 0x8f, 0x04, 0x14, 0x05, 0x4a, 0x05, 0xe5, 0x04, + 0x4f, 0x05, 0xd3, 0x06, 0x8b, 0x08, 0x07, 0x0b, 0x08, 0x0d, 0x72, 0x0e, + 0x4c, 0x10, 0xce, 0x11, 0xbd, 0x11, 0x2e, 0x11, 0x94, 0x0d, 0x96, 0x08, + 0x5e, 0x03, 0x76, 0xff, 0x3c, 0xfc, 0xed, 0xfa, 0x71, 0xfb, 0xe4, 0xfc, + 0x6f, 0x00, 0x29, 0x04, 0x8d, 0x07, 0x63, 0x0b, 0x26, 0x0f, 0x6b, 0x11, + 0xb2, 0x12, 0x09, 0x12, 0xcb, 0x0f, 0x42, 0x0d, 0xd0, 0x0a, 0xd7, 0x07, + 0x8d, 0x05, 0x67, 0x03, 0xe6, 0x00, 0x9d, 0xff, 0xc3, 0xfe, 0xa1, 0xfe, + 0xa4, 0xff, 0x7b, 0x00, 0xc6, 0x00, 0x29, 0x01, 0xe6, 0x00, 0x59, 0x00, + 0x8c, 0x01, 0xa6, 0x02, 0x3d, 0x04, 0xa1, 0x05, 0x8a, 0x06, 0x67, 0x07, + 0x8d, 0x09, 0x61, 0x0b, 0x59, 0x0d, 0xac, 0x0e, 0x90, 0x0e, 0x9c, 0x0e, + 0x82, 0x0d, 0xbc, 0x0b, 0x15, 0x0a, 0xa3, 0x07, 0x89, 0x05, 0x55, 0x03, + 0x24, 0x01, 0xa3, 0xff, 0x9a, 0xfe, 0xfc, 0xfd, 0x6b, 0xfd, 0x82, 0xfd, + 0xf0, 0xfd, 0xa3, 0xfe, 0x09, 0x00, 0x9c, 0xff, 0x6d, 0xfe, 0xe9, 0xfc, + 0xdf, 0xfb, 0x8c, 0xf8, 0x51, 0xf6, 0x61, 0xf3, 0x0b, 0xf1, 0x8b, 0xf0, + 0x30, 0xee, 0x38, 0xec, 0xd7, 0xe8, 0x9e, 0xe6, 0xfa, 0xe3, 0x58, 0xe1, + 0xfd, 0xde, 0x46, 0xd9, 0x73, 0xd6, 0xe9, 0xd6, 0xee, 0xdc, 0x09, 0xe9, + 0x3e, 0xf6, 0x15, 0x01, 0x4b, 0x09, 0x6b, 0x11, 0x5a, 0x18, 0x61, 0x1e, + 0x40, 0x20, 0xa7, 0x1b, 0x4c, 0x12, 0xef, 0x07, 0xc5, 0xfc, 0x7e, 0xf4, + 0x55, 0xee, 0x7d, 0xe9, 0xd4, 0xe6, 0x56, 0xe6, 0x9f, 0xe7, 0x68, 0xeb, + 0x40, 0xf0, 0xcb, 0xf5, 0xe4, 0xfa, 0xa1, 0xfe, 0x50, 0x00, 0xfe, 0xff, + 0x25, 0x00, 0x67, 0x00, 0x0e, 0x03, 0x75, 0x05, 0x24, 0x08, 0x0c, 0x0a, + 0xa1, 0x0c, 0x19, 0x0f, 0x0f, 0x12, 0x2c, 0x14, 0xc2, 0x14, 0x74, 0x13, + 0x21, 0x10, 0xa6, 0x0b, 0x76, 0x06, 0x36, 0x02, 0xab, 0xff, 0x43, 0xfe, + 0x70, 0xfe, 0x8f, 0xfe, 0x24, 0x00, 0x73, 0x02, 0xcd, 0x05, 0xb2, 0x0a, + 0xe7, 0x0d, 0xc0, 0x0e, 0x61, 0x0e, 0xe6, 0x0c, 0x84, 0x0c, 0x59, 0x0c, + 0x38, 0x0a, 0xbb, 0x07, 0x3c, 0x05, 0x6e, 0x03, 0x39, 0x03, 0x48, 0x03, + 0xc8, 0x02, 0xb8, 0x03, 0x6c, 0x03, 0x9f, 0x03, 0x15, 0x03, 0x3e, 0x02, + 0xbb, 0x01, 0x21, 0x01, 0x98, 0x00, 0x0d, 0x00, 0xf2, 0xff, 0x6c, 0x01, + 0xd6, 0x02, 0x25, 0x05, 0x7c, 0x07, 0xd0, 0x09, 0x5a, 0x0c, 0x15, 0x0e, + 0xb3, 0x0f, 0x7f, 0x10, 0x60, 0x10, 0x42, 0x0f, 0x72, 0x0d, 0xe2, 0x0a, + 0xb3, 0x08, 0xea, 0x05, 0xef, 0x03, 0x94, 0x01, 0x1e, 0x00, 0x21, 0xff, + 0xc4, 0xfe, 0xd0, 0xfe, 0xbb, 0xfe, 0x47, 0xfe, 0x49, 0xfe, 0xac, 0xfd, + 0x54, 0xfd, 0x08, 0xfc, 0x71, 0xfa, 0x2e, 0xf8, 0xe9, 0xf5, 0x34, 0xf4, + 0xce, 0xf2, 0x79, 0xf1, 0x6a, 0xf0, 0xb0, 0xee, 0x63, 0xec, 0x58, 0xeb, + 0x27, 0xe9, 0x42, 0xe7, 0x9d, 0xe3, 0xdc, 0xde, 0x55, 0xda, 0x51, 0xd7, + 0x89, 0xd7, 0xd8, 0xdc, 0x99, 0xe5, 0x96, 0xf1, 0xbe, 0xfb, 0x22, 0x04, + 0xe5, 0x0a, 0x5b, 0x11, 0x21, 0x18, 0xbc, 0x1b, 0x70, 0x19, 0xe3, 0x11, + 0xfb, 0x06, 0x43, 0xfe, 0x95, 0xf7, 0xb2, 0xf3, 0xc6, 0xef, 0xaf, 0xec, + 0x42, 0xeb, 0x54, 0xec, 0xd0, 0xef, 0x2f, 0xf3, 0xa9, 0xf7, 0x63, 0xfb, + 0xeb, 0xfd, 0xb9, 0xfe, 0x79, 0xfe, 0x20, 0xfe, 0xc0, 0xfe, 0xf2, 0xff, + 0x97, 0x01, 0x65, 0x03, 0x85, 0x06, 0xd2, 0x09, 0x2a, 0x0d, 0xc9, 0x0f, + 0xc2, 0x11, 0x8b, 0x13, 0xbe, 0x14, 0xdd, 0x12, 0xfa, 0x0f, 0xdb, 0x0b, + 0xa2, 0x08, 0x0a, 0x07, 0x4c, 0x05, 0xae, 0x03, 0x3c, 0x02, 0x15, 0x02, + 0xaa, 0x03, 0x8b, 0x05, 0x3f, 0x07, 0x03, 0x08, 0xe4, 0x08, 0x26, 0x09, + 0xce, 0x09, 0x6d, 0x09, 0x36, 0x08, 0x87, 0x07, 0x33, 0x06, 0x9d, 0x05, + 0x4d, 0x04, 0x9e, 0x03, 0xf6, 0x02, 0x9a, 0x03, 0x63, 0x04, 0x1a, 0x05, + 0x2d, 0x05, 0x35, 0x05, 0xc2, 0x04, 0x1b, 0x04, 0x9e, 0x03, 0x0a, 0x03, + 0x42, 0x02, 0xe0, 0x01, 0x74, 0x01, 0x53, 0x01, 0x73, 0x02, 0x48, 0x04, + 0x3c, 0x06, 0x73, 0x08, 0xe5, 0x09, 0x4a, 0x0b, 0x9c, 0x0c, 0x70, 0x0d, + 0xcd, 0x0d, 0x8b, 0x0d, 0x90, 0x0c, 0xf6, 0x0a, 0xba, 0x09, 0xfb, 0x07, + 0x62, 0x06, 0x30, 0x05, 0xf9, 0x03, 0xad, 0x02, 0xb3, 0x01, 0x78, 0x00, + 0x90, 0xff, 0xe0, 0xfe, 0xa4, 0xfe, 0x6a, 0xfd, 0x43, 0xfd, 0x76, 0xfb, + 0x7c, 0xf9, 0x2a, 0xf8, 0xb3, 0xf5, 0xf5, 0xf4, 0x81, 0xf3, 0xb9, 0xf2, + 0x2a, 0xf0, 0x5c, 0xee, 0xf5, 0xec, 0x79, 0xeb, 0xcc, 0xea, 0x4f, 0xe8, + 0x0c, 0xe5, 0x4f, 0xe1, 0x44, 0xdd, 0x23, 0xdb, 0x22, 0xdc, 0x8d, 0xdf, + 0x78, 0xe6, 0x03, 0xee, 0x6a, 0xf4, 0x09, 0xfc, 0xb2, 0x02, 0x07, 0x09, + 0xfe, 0x0e, 0xf9, 0x10, 0x22, 0x10, 0xab, 0x0c, 0x66, 0x07, 0xb5, 0x00, + 0x8c, 0xfb, 0x5b, 0xf7, 0xcf, 0xf4, 0x1d, 0xf4, 0x54, 0xf3, 0xfd, 0xf2, + 0xf4, 0xf3, 0x79, 0xf6, 0xbc, 0xf9, 0xb9, 0xfc, 0x45, 0xfe, 0x39, 0xfe, + 0x90, 0xfd, 0xcc, 0xfd, 0x4b, 0xfe, 0x24, 0xfe, 0xc5, 0xfe, 0x5e, 0xff, + 0x54, 0x01, 0xe0, 0x03, 0xf4, 0x06, 0xdc, 0x09, 0xeb, 0x0c, 0x95, 0x0f, + 0xd2, 0x10, 0x76, 0x11, 0xec, 0x10, 0x23, 0x10, 0x63, 0x0e, 0x8c, 0x0c, + 0x24, 0x0a, 0x35, 0x08, 0x44, 0x07, 0x26, 0x06, 0x01, 0x06, 0xd7, 0x05, + 0x55, 0x06, 0x4f, 0x07, 0x15, 0x08, 0x61, 0x08, 0xbe, 0x08, 0x4c, 0x08, + 0xd4, 0x07, 0xa3, 0x06, 0x29, 0x05, 0x18, 0x04, 0xfb, 0x02, 0x41, 0x02, + 0x3f, 0x01, 0x30, 0x01, 0x35, 0x01, 0x0c, 0x02, 0xdd, 0x02, 0x4c, 0x03, + 0x94, 0x04, 0x3b, 0x05, 0x8d, 0x05, 0x62, 0x05, 0x43, 0x04, 0xf7, 0x03, + 0xb7, 0x03, 0xda, 0x03, 0x77, 0x03, 0xa6, 0x03, 0x34, 0x04, 0xe8, 0x04, + 0x4f, 0x06, 0x3d, 0x07, 0xc7, 0x08, 0x14, 0x0a, 0xf2, 0x0a, 0x35, 0x0b, + 0xf6, 0x0a, 0xae, 0x0a, 0x48, 0x0a, 0x50, 0x09, 0xec, 0x07, 0x55, 0x06, + 0x08, 0x05, 0x30, 0x04, 0xdf, 0x03, 0xfa, 0x02, 0x2e, 0x02, 0x38, 0x01, + 0x29, 0x00, 0xb2, 0xff, 0x10, 0xff, 0x7b, 0xfe, 0x93, 0xfd, 0x55, 0xfc, + 0x24, 0xfb, 0x75, 0xf9, 0x0a, 0xf8, 0x73, 0xf6, 0x08, 0xf5, 0x8b, 0xf3, + 0x93, 0xf1, 0xe1, 0xef, 0x4d, 0xee, 0xc0, 0xed, 0x70, 0xed, 0x02, 0xed, + 0xff, 0xeb, 0x30, 0xeb, 0x2b, 0xea, 0xec, 0xe8, 0x9f, 0xe8, 0x3b, 0xe9, + 0x36, 0xeb, 0x22, 0xee, 0xf1, 0xf0, 0x1e, 0xf4, 0x5b, 0xf7, 0xbb, 0xfa, + 0xae, 0xfd, 0x81, 0xff, 0xa4, 0x00, 0x59, 0x00, 0x86, 0xff, 0x84, 0xfd, + 0xcd, 0xfa, 0xa2, 0xf8, 0x35, 0xf7, 0x7c, 0xf7, 0xdc, 0xf7, 0x6a, 0xf8, + 0xc5, 0xf8, 0xe7, 0xf9, 0x4f, 0xfc, 0xb5, 0xfe, 0xd7, 0x00, 0xd8, 0x01, + 0x93, 0x01, 0x2e, 0x01, 0xac, 0x00, 0x76, 0x00, 0x46, 0x00, 0x31, 0x00, + 0x99, 0x00, 0x11, 0x01, 0xdd, 0x01, 0x0b, 0x03, 0x78, 0x04, 0x4a, 0x06, + 0xce, 0x07, 0xcd, 0x08, 0x1c, 0x09, 0xe6, 0x08, 0x3c, 0x08, 0xd4, 0x07, + 0x98, 0x07, 0x4e, 0x07, 0xad, 0x06, 0xf8, 0x05, 0x89, 0x05, 0xa4, 0x05, + 0xf2, 0x05, 0x3d, 0x06, 0x5d, 0x06, 0x72, 0x06, 0xcf, 0x06, 0xbc, 0x06, + 0x85, 0x06, 0x58, 0x06, 0xfa, 0x05, 0x93, 0x05, 0x0b, 0x05, 0x72, 0x04, + 0x00, 0x04, 0xca, 0x03, 0x92, 0x03, 0xdf, 0x03, 0x81, 0x04, 0xf5, 0x04, + 0x87, 0x05, 0xc8, 0x05, 0x1e, 0x06, 0x92, 0x06, 0xbb, 0x06, 0xa2, 0x06, + 0x51, 0x06, 0x5e, 0x06, 0x5c, 0x06, 0x18, 0x06, 0x23, 0x06, 0x3a, 0x06, + 0xac, 0x06, 0x3e, 0x07, 0x7e, 0x07, 0xd4, 0x07, 0x21, 0x08, 0xb9, 0x08, + 0x09, 0x09, 0xef, 0x08, 0x95, 0x08, 0x1d, 0x08, 0xe5, 0x07, 0x63, 0x07, + 0xc9, 0x06, 0x54, 0x06, 0x12, 0x06, 0x1b, 0x06, 0x09, 0x06, 0xbf, 0x05, + 0x7e, 0x05, 0x67, 0x05, 0x57, 0x05, 0xe3, 0x04, 0x30, 0x04, 0x63, 0x03, + 0xb2, 0x02, 0x07, 0x02, 0x08, 0x01, 0xc7, 0xff, 0x9a, 0xfe, 0x5d, 0xfd, + 0x65, 0xfc, 0x4b, 0xfb, 0x34, 0xfa, 0x50, 0xf9, 0x6a, 0xf8, 0x7c, 0xf7, + 0x74, 0xf6, 0x53, 0xf5, 0x47, 0xf4, 0x1f, 0xf3, 0xca, 0xf1, 0x90, 0xf0, + 0x83, 0xef, 0x07, 0xef, 0xf8, 0xee, 0x34, 0xef, 0xac, 0xef, 0x29, 0xf0, + 0xc6, 0xf0, 0xc1, 0xf0, 0xea, 0xef, 0x96, 0xee, 0x6f, 0xed, 0xcb, 0xec, + 0xac, 0xec, 0x8f, 0xec, 0x41, 0xec, 0x75, 0xec, 0xc1, 0xed, 0xad, 0xef, + 0x69, 0xf1, 0x72, 0xf2, 0x55, 0xf3, 0x9c, 0xf4, 0x06, 0xf6, 0xa3, 0xf6, + 0x80, 0xf6, 0x6f, 0xf6, 0x41, 0xf7, 0xac, 0xf8, 0xb3, 0xf9, 0x3e, 0xfa, + 0x0f, 0xfb, 0xd5, 0xfc, 0x4a, 0xff, 0x59, 0x01, 0xa4, 0x02, 0xb7, 0x03, + 0xd7, 0x04, 0xfa, 0x05, 0x6f, 0x06, 0x5c, 0x06, 0x18, 0x06, 0xb1, 0x05, + 0xad, 0x05, 0xd3, 0x05, 0x06, 0x06, 0x9f, 0x06, 0x6c, 0x07, 0x65, 0x08, + 0x39, 0x09, 0xe6, 0x09, 0x6b, 0x0a, 0xab, 0x0a, 0xce, 0x0a, 0xc3, 0x0a, + 0x76, 0x0a, 0x37, 0x0a, 0x15, 0x0a, 0xe7, 0x09, 0xbf, 0x09, 0xa2, 0x09, + 0xe0, 0x09, 0x73, 0x0a, 0xf5, 0x0a, 0x60, 0x0b, 0x9f, 0x0b, 0x54, 0x0c, + 0x2f, 0x0d, 0xb5, 0x0d, 0xc8, 0x0d, 0x7d, 0x0d, 0x8d, 0x0d, 0xba, 0x0d, + 0xc3, 0x0d, 0x92, 0x0d, 0x41, 0x0d, 0x46, 0x0d, 0x62, 0x0d, 0x7c, 0x0d, + 0x60, 0x0d, 0x2e, 0x0d, 0x38, 0x0d, 0x2d, 0x0d, 0x02, 0x0d, 0xa4, 0x0c, + 0x1c, 0x0c, 0xbc, 0x0b, 0x72, 0x0b, 0x3e, 0x0b, 0xe0, 0x0a, 0x46, 0x0a, + 0xb4, 0x09, 0x19, 0x09, 0xb5, 0x08, 0x37, 0x08, 0x5d, 0x07, 0x7b, 0x06, + 0xb5, 0x05, 0x1e, 0x05, 0x72, 0x04, 0x8f, 0x03, 0x71, 0x02, 0x61, 0x01, + 0x6f, 0x00, 0x40, 0xff, 0xaf, 0xfd, 0x0d, 0xfc, 0x90, 0xfa, 0x3d, 0xf9, + 0xe7, 0xf7, 0x4b, 0xf6, 0xc3, 0xf4, 0x72, 0xf3, 0x56, 0xf2, 0x4d, 0xf1, + 0x16, 0xf0, 0xf2, 0xee, 0xa2, 0xed, 0x79, 0xec, 0x34, 0xeb, 0xa4, 0xe9, + 0x68, 0xe8, 0xa8, 0xe7, 0xc0, 0xe7, 0x24, 0xe8, 0x49, 0xe8, 0x43, 0xe8, + 0x2d, 0xe8, 0x9b, 0xe8, 0xd0, 0xe8, 0x4e, 0xe8, 0x86, 0xe7, 0x22, 0xe7, + 0xce, 0xe7, 0x8f, 0xe8, 0xfc, 0xe8, 0x98, 0xe9, 0x01, 0xeb, 0xbf, 0xed, + 0x0a, 0xf0, 0xe9, 0xf0, 0x52, 0xf1, 0x5f, 0xf2, 0x3f, 0xf4, 0x99, 0xf5, + 0xef, 0xf5, 0x12, 0xf6, 0x59, 0xf7, 0xf5, 0xf9, 0x29, 0xfc, 0x7d, 0xfd, + 0xec, 0xfe, 0x24, 0x01, 0x03, 0x04, 0x69, 0x06, 0xb9, 0x07, 0x6a, 0x08, + 0x4d, 0x09, 0x6f, 0x0a, 0x31, 0x0b, 0x1e, 0x0b, 0xbd, 0x0a, 0xd5, 0x0a, + 0x6d, 0x0b, 0x41, 0x0c, 0xd8, 0x0c, 0x77, 0x0d, 0x66, 0x0e, 0xa0, 0x0f, + 0xef, 0x10, 0xac, 0x11, 0xdd, 0x11, 0xb0, 0x11, 0x63, 0x11, 0x42, 0x11, + 0xba, 0x10, 0xcc, 0x0f, 0xd8, 0x0e, 0x26, 0x0e, 0xff, 0x0d, 0xd5, 0x0d, + 0x78, 0x0d, 0x2a, 0x0d, 0x45, 0x0d, 0xf1, 0x0d, 0x99, 0x0e, 0xbd, 0x0e, + 0x7c, 0x0e, 0x3f, 0x0e, 0x52, 0x0e, 0x1e, 0x0e, 0x5a, 0x0d, 0x4c, 0x0c, + 0x6a, 0x0b, 0x25, 0x0b, 0x05, 0x0b, 0x7f, 0x0a, 0xfb, 0x09, 0xd7, 0x09, + 0x2c, 0x0a, 0x7e, 0x0a, 0x55, 0x0a, 0xd1, 0x09, 0x78, 0x09, 0x6e, 0x09, + 0x28, 0x09, 0x5c, 0x08, 0x71, 0x07, 0xb8, 0x06, 0x61, 0x06, 0x02, 0x06, + 0x42, 0x05, 0x7e, 0x04, 0x0f, 0x04, 0xf4, 0x03, 0xcf, 0x03, 0x43, 0x03, + 0x96, 0x02, 0x0d, 0x02, 0xb6, 0x01, 0x27, 0x01, 0x0c, 0x00, 0xd7, 0xfe, + 0xab, 0xfd, 0xb7, 0xfc, 0xa8, 0xfb, 0x2e, 0xfa, 0xbe, 0xf8, 0x7c, 0xf7, + 0x8e, 0xf6, 0xa9, 0xf5, 0x5f, 0xf4, 0x01, 0xf3, 0xab, 0xf1, 0xc5, 0xf0, + 0xd1, 0xef, 0x8d, 0xee, 0x0f, 0xed, 0xa2, 0xeb, 0x67, 0xea, 0x34, 0xe9, + 0xff, 0xe7, 0x51, 0xe7, 0x76, 0xe7, 0x1d, 0xe8, 0x61, 0xe8, 0x33, 0xe8, + 0x56, 0xe8, 0xb2, 0xe8, 0xe5, 0xe8, 0x5c, 0xe8, 0x87, 0xe7, 0x8d, 0xe7, + 0x8f, 0xe8, 0x49, 0xe9, 0x85, 0xe9, 0x1e, 0xea, 0xe1, 0xeb, 0x7d, 0xee, + 0x8e, 0xf0, 0x6d, 0xf1, 0x0d, 0xf2, 0x90, 0xf3, 0xa7, 0xf5, 0xf1, 0xf6, + 0x5d, 0xf7, 0xee, 0xf7, 0x9f, 0xf9, 0x14, 0xfc, 0x13, 0xfe, 0x62, 0xff, + 0xfd, 0x00, 0x81, 0x03, 0x8c, 0x06, 0xe3, 0x08, 0x17, 0x0a, 0xe9, 0x0a, + 0xf7, 0x0b, 0x29, 0x0d, 0x8a, 0x0d, 0x19, 0x0d, 0xae, 0x0c, 0xdf, 0x0c, + 0xaa, 0x0d, 0x5e, 0x0e, 0xbf, 0x0e, 0x5b, 0x0f, 0x62, 0x10, 0xcd, 0x11, + 0xba, 0x12, 0xd8, 0x12, 0x92, 0x12, 0x38, 0x12, 0x28, 0x12, 0xb3, 0x11, + 0xc5, 0x10, 0xdd, 0x0f, 0x17, 0x0f, 0xd6, 0x0e, 0x9a, 0x0e, 0x3f, 0x0e, + 0xe9, 0x0d, 0xbc, 0x0d, 0xf1, 0x0d, 0x02, 0x0e, 0xe9, 0x0d, 0x92, 0x0d, + 0x0a, 0x0d, 0xce, 0x0c, 0x6a, 0x0c, 0xd7, 0x0b, 0x1c, 0x0b, 0x59, 0x0a, + 0xbf, 0x09, 0x5b, 0x09, 0x23, 0x09, 0xeb, 0x08, 0xb4, 0x08, 0x97, 0x08, + 0x80, 0x08, 0x5d, 0x08, 0x1d, 0x08, 0xb9, 0x07, 0x55, 0x07, 0xe4, 0x06, + 0x5f, 0x06, 0xe6, 0x05, 0x69, 0x05, 0xed, 0x04, 0x79, 0x04, 0x0a, 0x04, + 0xac, 0x03, 0x64, 0x03, 0x01, 0x03, 0x82, 0x02, 0xf6, 0x01, 0x89, 0x01, + 0x34, 0x01, 0xc8, 0x00, 0x36, 0x00, 0x81, 0xff, 0xe4, 0xfe, 0x57, 0xfe, + 0x99, 0xfd, 0xab, 0xfc, 0xb0, 0xfb, 0xd9, 0xfa, 0x07, 0xfa, 0x1f, 0xf9, + 0x01, 0xf8, 0xe1, 0xf6, 0xdf, 0xf5, 0xdd, 0xf4, 0xcf, 0xf3, 0xc2, 0xf2, + 0xb0, 0xf1, 0xa1, 0xf0, 0x9d, 0xef, 0xaf, 0xee, 0xa5, 0xed, 0x7d, 0xec, + 0x24, 0xeb, 0xd3, 0xe9, 0x46, 0xe9, 0x76, 0xe9, 0x16, 0xea, 0x0c, 0xea, + 0xb7, 0xe9, 0x01, 0xea, 0x7d, 0xea, 0xbc, 0xea, 0x04, 0xea, 0xf5, 0xe8, + 0xfb, 0xe8, 0x2b, 0xea, 0x4a, 0xeb, 0x2d, 0xeb, 0x3e, 0xeb, 0xda, 0xec, + 0x97, 0xef, 0xe5, 0xf1, 0x73, 0xf2, 0x6f, 0xf2, 0x95, 0xf3, 0xca, 0xf5, + 0x4c, 0xf7, 0x59, 0xf7, 0xa2, 0xf7, 0x94, 0xf9, 0x97, 0xfc, 0xcb, 0xfe, + 0xc7, 0xff, 0xd1, 0x00, 0x29, 0x03, 0x33, 0x06, 0x55, 0x08, 0x3e, 0x09, + 0xd2, 0x09, 0xe0, 0x0a, 0xf7, 0x0b, 0x7e, 0x0c, 0x5f, 0x0c, 0x08, 0x0c, + 0x14, 0x0c, 0xc4, 0x0c, 0x9c, 0x0d, 0x05, 0x0e, 0x24, 0x0e, 0xac, 0x0e, + 0xd6, 0x0f, 0xef, 0x10, 0x31, 0x11, 0xb4, 0x10, 0x2c, 0x10, 0x1a, 0x10, + 0x15, 0x10, 0x89, 0x0f, 0x85, 0x0e, 0xce, 0x0d, 0xc5, 0x0d, 0xda, 0x0d, + 0x80, 0x0d, 0xdf, 0x0c, 0x81, 0x0c, 0xc0, 0x0c, 0x0a, 0x0d, 0xe2, 0x0c, + 0x7a, 0x0c, 0x1d, 0x0c, 0x04, 0x0c, 0xe3, 0x0b, 0x77, 0x0b, 0xd7, 0x0a, + 0x43, 0x0a, 0xec, 0x09, 0x9a, 0x09, 0x49, 0x09, 0x05, 0x09, 0xea, 0x08, + 0xed, 0x08, 0xe4, 0x08, 0xce, 0x08, 0xa1, 0x08, 0x66, 0x08, 0x1f, 0x08, + 0xcc, 0x07, 0x69, 0x07, 0xf5, 0x06, 0x84, 0x06, 0x0f, 0x06, 0x9a, 0x05, + 0x32, 0x05, 0xd7, 0x04, 0x78, 0x04, 0xf7, 0x03, 0x70, 0x03, 0xf4, 0x02, + 0x87, 0x02, 0x23, 0x02, 0x9f, 0x01, 0x1e, 0x01, 0x94, 0x00, 0x00, 0x00, + 0x4e, 0xff, 0x69, 0xfe, 0x7c, 0xfd, 0x98, 0xfc, 0xbf, 0xfb, 0xc3, 0xfa, + 0x95, 0xf9, 0x80, 0xf8, 0x79, 0xf7, 0x98, 0xf6, 0x9f, 0xf5, 0x79, 0xf4, + 0x65, 0xf3, 0x71, 0xf2, 0x80, 0xf1, 0x75, 0xf0, 0x57, 0xef, 0x36, 0xee, + 0x0e, 0xed, 0xea, 0xeb, 0x9a, 0xea, 0x7e, 0xe9, 0x1c, 0xe9, 0x57, 0xe9, + 0xcf, 0xe9, 0xfb, 0xe9, 0xea, 0xe9, 0x22, 0xea, 0x7c, 0xea, 0x64, 0xea, + 0xb4, 0xe9, 0xfb, 0xe8, 0x1e, 0xe9, 0x0b, 0xea, 0xcd, 0xea, 0xed, 0xea, + 0x75, 0xeb, 0x60, 0xed, 0xec, 0xef, 0xc2, 0xf1, 0x6b, 0xf2, 0xd6, 0xf2, + 0x45, 0xf4, 0x34, 0xf6, 0x42, 0xf7, 0x77, 0xf7, 0x24, 0xf8, 0x3a, 0xfa, + 0xcf, 0xfc, 0x85, 0xfe, 0xad, 0xff, 0x5a, 0x01, 0xdb, 0x03, 0x75, 0x06, + 0x4e, 0x08, 0x78, 0x09, 0x8d, 0x0a, 0xa6, 0x0b, 0x54, 0x0c, 0x6e, 0x0c, + 0x5f, 0x0c, 0x58, 0x0c, 0x6a, 0x0c, 0x9f, 0x0c, 0x16, 0x0d, 0xc5, 0x0d, + 0x8a, 0x0e, 0x3b, 0x0f, 0xef, 0x0f, 0xc0, 0x10, 0x38, 0x11, 0x24, 0x11, + 0x9a, 0x10, 0xfc, 0x0f, 0x9a, 0x0f, 0x27, 0x0f, 0x80, 0x0e, 0xc8, 0x0d, + 0x5c, 0x0d, 0x3a, 0x0d, 0x0a, 0x0d, 0xce, 0x0c, 0xa1, 0x0c, 0x9c, 0x0c, + 0xa0, 0x0c, 0x94, 0x0c, 0x77, 0x0c, 0x3d, 0x0c, 0x09, 0x0c, 0xb1, 0x0b, + 0x33, 0x0b, 0xaa, 0x0a, 0x2c, 0x0a, 0xa6, 0x09, 0x13, 0x09, 0xbd, 0x08, + 0xa5, 0x08, 0xbc, 0x08, 0xc5, 0x08, 0x86, 0x08, 0x50, 0x08, 0x44, 0x08, + 0x3a, 0x08, 0xe9, 0x07, 0x54, 0x07, 0xc9, 0x06, 0x68, 0x06, 0x1e, 0x06, + 0xa9, 0x05, 0x0d, 0x05, 0x97, 0x04, 0x51, 0x04, 0x10, 0x04, 0x94, 0x03, + 0xf0, 0x02, 0x6a, 0x02, 0x15, 0x02, 0xbf, 0x01, 0x41, 0x01, 0xaf, 0x00, + 0x17, 0x00, 0x8b, 0xff, 0xe3, 0xfe, 0x09, 0xfe, 0x24, 0xfd, 0x41, 0xfc, + 0x65, 0xfb, 0x7c, 0xfa, 0x7e, 0xf9, 0x86, 0xf8, 0x84, 0xf7, 0x7e, 0xf6, + 0x86, 0xf5, 0x8e, 0xf4, 0xa2, 0xf3, 0xaa, 0xf2, 0xb4, 0xf1, 0xc9, 0xf0, + 0xfd, 0xef, 0x1c, 0xef, 0x0a, 0xee, 0xd2, 0xec, 0xaf, 0xeb, 0xac, 0xea, + 0xe4, 0xe9, 0xb4, 0xe9, 0xed, 0xe9, 0x71, 0xea, 0xad, 0xea, 0xaa, 0xea, + 0xdd, 0xea, 0x20, 0xeb, 0x1f, 0xeb, 0xa4, 0xea, 0x31, 0xea, 0x98, 0xea, + 0x8b, 0xeb, 0x5a, 0xec, 0x9f, 0xec, 0x31, 0xed, 0x1b, 0xef, 0x7f, 0xf1, + 0x0f, 0xf3, 0x95, 0xf3, 0x2e, 0xf4, 0xe9, 0xf5, 0xf0, 0xf7, 0xef, 0xf8, + 0x32, 0xf9, 0x28, 0xfa, 0x71, 0xfc, 0xec, 0xfe, 0x62, 0x00, 0x43, 0x01, + 0xdc, 0x02, 0x6a, 0x05, 0xd7, 0x07, 0x4c, 0x09, 0x0f, 0x0a, 0xf1, 0x0a, + 0x0e, 0x0c, 0xe6, 0x0c, 0xef, 0x0c, 0x9c, 0x0c, 0x8c, 0x0c, 0xdc, 0x0c, + 0x61, 0x0d, 0xc2, 0x0d, 0x11, 0x0e, 0x9b, 0x0e, 0x51, 0x0f, 0x07, 0x10, + 0x57, 0x10, 0x44, 0x10, 0xfe, 0x0f, 0xa8, 0x0f, 0x58, 0x0f, 0xe6, 0x0e, + 0x35, 0x0e, 0x8c, 0x0d, 0x0d, 0x0d, 0xe4, 0x0c, 0xbc, 0x0c, 0x55, 0x0c, + 0xf3, 0x0b, 0xcc, 0x0b, 0xde, 0x0b, 0xf8, 0x0b, 0xd3, 0x0b, 0x84, 0x0b, + 0x52, 0x0b, 0x3b, 0x0b, 0x0c, 0x0b, 0x7d, 0x0a, 0xc1, 0x09, 0x40, 0x09, + 0xfe, 0x08, 0xd6, 0x08, 0x8b, 0x08, 0x44, 0x08, 0x24, 0x08, 0x32, 0x08, + 0x43, 0x08, 0xff, 0x07, 0xac, 0x07, 0x8b, 0x07, 0x67, 0x07, 0x24, 0x07, + 0xa7, 0x06, 0x21, 0x06, 0xc2, 0x05, 0x7c, 0x05, 0x2b, 0x05, 0xa4, 0x04, + 0x1a, 0x04, 0xab, 0x03, 0x44, 0x03, 0xd3, 0x02, 0x4e, 0x02, 0xd3, 0x01, + 0x7f, 0x01, 0x23, 0x01, 0xb2, 0x00, 0x02, 0x00, 0x57, 0xff, 0xaf, 0xfe, + 0xf6, 0xfd, 0x23, 0xfd, 0x1c, 0xfc, 0x16, 0xfb, 0x25, 0xfa, 0x40, 0xf9, + 0x3b, 0xf8, 0x0f, 0xf7, 0x1a, 0xf6, 0x40, 0xf5, 0x99, 0xf4, 0xda, 0xf3, + 0xc5, 0xf2, 0xd8, 0xf1, 0x10, 0xf1, 0x65, 0xf0, 0x9d, 0xef, 0x44, 0xee, + 0xcf, 0xec, 0x9f, 0xeb, 0x92, 0xea, 0xdc, 0xe9, 0x73, 0xe9, 0xd1, 0xe9, + 0x9a, 0xea, 0x4c, 0xeb, 0xae, 0xeb, 0xae, 0xeb, 0x1d, 0xec, 0x38, 0xec, + 0xb6, 0xeb, 0x33, 0xeb, 0x1e, 0xeb, 0xcd, 0xeb, 0x9d, 0xec, 0xec, 0xec, + 0x7f, 0xed, 0x25, 0xef, 0x98, 0xf1, 0x52, 0xf3, 0x11, 0xf4, 0xe9, 0xf4, + 0x65, 0xf6, 0x51, 0xf8, 0x91, 0xf9, 0xee, 0xf9, 0xd1, 0xfa, 0xb5, 0xfc, + 0xc8, 0xfe, 0x2a, 0x00, 0x38, 0x01, 0xd0, 0x02, 0xf6, 0x04, 0x5f, 0x07, + 0x23, 0x09, 0x4b, 0x0a, 0x6b, 0x0b, 0x5e, 0x0c, 0x2e, 0x0d, 0xbb, 0x0d, + 0xb3, 0x0d, 0x68, 0x0d, 0x41, 0x0d, 0x8e, 0x0d, 0x01, 0x0e, 0x52, 0x0e, + 0x85, 0x0e, 0xb0, 0x0e, 0x33, 0x0f, 0xea, 0x0f, 0x1c, 0x10, 0xb3, 0x0f, + 0x35, 0x0f, 0x09, 0x0f, 0x12, 0x0f, 0xda, 0x0e, 0x07, 0x0e, 0x36, 0x0d, + 0xdb, 0x0c, 0xbd, 0x0c, 0x4b, 0x0c, 0x9d, 0x0b, 0x0d, 0x0b, 0xfc, 0x0a, + 0x86, 0x0b, 0xc4, 0x0b, 0x93, 0x0b, 0x3d, 0x0b, 0x0d, 0x0b, 0x32, 0x0b, + 0x1e, 0x0b, 0x7b, 0x0a, 0x8a, 0x09, 0xdd, 0x08, 0xac, 0x08, 0x8c, 0x08, + 0x4e, 0x08, 0xf6, 0x07, 0xc5, 0x07, 0xfa, 0x07, 0x10, 0x08, 0xde, 0x07, + 0x7e, 0x07, 0x1b, 0x07, 0xfa, 0x06, 0xd6, 0x06, 0x62, 0x06, 0xc9, 0x05, + 0x38, 0x05, 0xc6, 0x04, 0x64, 0x04, 0xdf, 0x03, 0x50, 0x03, 0xc1, 0x02, + 0x54, 0x02, 0x00, 0x02, 0x8f, 0x01, 0x1a, 0x01, 0xad, 0x00, 0x3d, 0x00, + 0xcd, 0xff, 0x25, 0xff, 0x82, 0xfe, 0xd4, 0xfd, 0x0f, 0xfd, 0x45, 0xfc, + 0x5e, 0xfb, 0x5b, 0xfa, 0x5a, 0xf9, 0x4c, 0xf8, 0x5b, 0xf7, 0x3a, 0xf6, + 0x13, 0xf5, 0xfa, 0xf3, 0xf7, 0xf2, 0x49, 0xf2, 0x8c, 0xf1, 0xef, 0xf0, + 0x38, 0xf0, 0x77, 0xef, 0xc9, 0xee, 0xc9, 0xed, 0xd1, 0xec, 0x6e, 0xeb, + 0x4e, 0xea, 0xbc, 0xe9, 0xcb, 0xe9, 0x5f, 0xea, 0xaf, 0xea, 0x01, 0xeb, + 0x69, 0xeb, 0x1a, 0xec, 0xda, 0xec, 0xc2, 0xec, 0x53, 0xec, 0x5b, 0xec, + 0xdf, 0xec, 0xa6, 0xed, 0xcd, 0xed, 0xef, 0xed, 0xe1, 0xee, 0xc3, 0xf0, + 0xd0, 0xf2, 0x18, 0xf4, 0x21, 0xf5, 0xa0, 0xf6, 0x56, 0xf8, 0xd5, 0xf9, + 0xe1, 0xfa, 0x0b, 0xfc, 0xd2, 0xfd, 0xd0, 0xff, 0x49, 0x01, 0x65, 0x02, + 0x8c, 0x03, 0x41, 0x05, 0x11, 0x07, 0xb4, 0x08, 0x18, 0x0a, 0x4c, 0x0b, + 0x5c, 0x0c, 0x0d, 0x0d, 0xab, 0x0d, 0xf7, 0x0d, 0x53, 0x0e, 0xb3, 0x0e, + 0xf3, 0x0e, 0x35, 0x0f, 0x83, 0x0f, 0xdf, 0x0f, 0x28, 0x10, 0x6f, 0x10, + 0x9e, 0x10, 0x98, 0x10, 0x63, 0x10, 0xe9, 0x0f, 0x7f, 0x0f, 0x23, 0x0f, + 0x86, 0x0e, 0x1a, 0x0e, 0xb6, 0x0d, 0xb7, 0x0d, 0x89, 0x0d, 0xf0, 0x0c, + 0x46, 0x0c, 0xa5, 0x0b, 0x73, 0x0b, 0x05, 0x0b, 0x87, 0x0a, 0x2d, 0x0a, + 0x27, 0x0a, 0x3e, 0x0a, 0xfe, 0x09, 0x7d, 0x09, 0xfe, 0x08, 0xc5, 0x08, + 0x3c, 0x08, 0x82, 0x07, 0xe5, 0x06, 0x9e, 0x06, 0x77, 0x06, 0x19, 0x06, + 0x9b, 0x05, 0x5f, 0x05, 0x66, 0x05, 0x5b, 0x05, 0x13, 0x05, 0xc1, 0x04, + 0x73, 0x04, 0x45, 0x04, 0x0b, 0x04, 0xa6, 0x03, 0x73, 0x03, 0x25, 0x03, + 0xba, 0x02, 0x35, 0x02, 0x73, 0x01, 0xc7, 0x00, 0x50, 0x00, 0xdd, 0xff, + 0x74, 0xff, 0x04, 0xff, 0xfc, 0xfe, 0x9f, 0xfe, 0x20, 0xfe, 0x5f, 0xfd, + 0x66, 0xfc, 0x5b, 0xfb, 0x2c, 0xfa, 0xc5, 0xf8, 0x2a, 0xf7, 0xd1, 0xf5, + 0xd0, 0xf4, 0x86, 0xf3, 0x2c, 0xf3, 0x2a, 0xf2, 0x4f, 0xf1, 0x2a, 0xf0, + 0x5c, 0xef, 0xf5, 0xee, 0x3e, 0xee, 0x05, 0xed, 0x10, 0xeb, 0x01, 0xe9, + 0x0d, 0xe7, 0xf0, 0xe5, 0x1a, 0xe4, 0x9f, 0xe2, 0xee, 0xe1, 0x12, 0xe3, + 0x72, 0xe6, 0xbe, 0xea, 0xf6, 0xed, 0xf0, 0xf0, 0xfa, 0xf2, 0x3e, 0xf5, + 0x75, 0xf8, 0xc0, 0xf9, 0xe4, 0xf9, 0x32, 0xf9, 0xfd, 0xf6, 0x4f, 0xf7, + 0x21, 0xf7, 0x91, 0xf8, 0x28, 0xfa, 0x63, 0xfb, 0x5c, 0xfe, 0xd6, 0x00, + 0x56, 0x03, 0xae, 0x05, 0x30, 0x07, 0x5a, 0x08, 0xa6, 0x09, 0x94, 0x09, + 0x2e, 0x09, 0xa4, 0x07, 0x8c, 0x06, 0xc6, 0x05, 0x6a, 0x05, 0xea, 0x05, + 0xf4, 0x06, 0x18, 0x08, 0x92, 0x09, 0x3b, 0x0b, 0x3d, 0x0c, 0x24, 0x0e, + 0xf9, 0x0e, 0x01, 0x10, 0x44, 0x10, 0x44, 0x0f, 0xab, 0x0d, 0xa4, 0x0c, + 0x34, 0x0c, 0x59, 0x0c, 0xa3, 0x0c, 0x4b, 0x0c, 0x74, 0x0c, 0xed, 0x0b, + 0x60, 0x0c, 0x05, 0x0d, 0xbc, 0x0c, 0x58, 0x0d, 0xc8, 0x0c, 0xe9, 0x0b, + 0x13, 0x0b, 0x4e, 0x09, 0xf5, 0x07, 0xe8, 0x06, 0xcd, 0x05, 0x28, 0x05, + 0xcf, 0x03, 0x63, 0x04, 0x16, 0x04, 0x17, 0x04, 0x6c, 0x05, 0x9c, 0x04, + 0x26, 0x05, 0xdf, 0x03, 0x22, 0x03, 0xe9, 0x01, 0x52, 0x01, 0x0e, 0x00, + 0xcd, 0xfe, 0x08, 0xfe, 0xab, 0xfd, 0x26, 0xfe, 0x34, 0xfe, 0xa5, 0xfe, + 0x30, 0xff, 0xc5, 0x00, 0xc1, 0x01, 0xe3, 0x02, 0xf6, 0x02, 0x13, 0x03, + 0x76, 0x03, 0x60, 0x03, 0x6a, 0x03, 0xf0, 0x02, 0x72, 0x02, 0x7f, 0x02, + 0x4b, 0x02, 0x4b, 0x02, 0xab, 0x02, 0xe3, 0x02, 0x7c, 0x03, 0x35, 0x03, + 0xaf, 0x02, 0xc3, 0x01, 0xf0, 0x00, 0x22, 0x00, 0x20, 0xff, 0xfa, 0xfd, + 0x97, 0xfc, 0xc9, 0xfb, 0xbc, 0xfa, 0x90, 0xfa, 0x11, 0xfa, 0x8b, 0xf9, + 0xd8, 0xf8, 0xc9, 0xf7, 0x72, 0xf6, 0x41, 0xf4, 0x6d, 0xf2, 0xbd, 0xf0, + 0x26, 0xef, 0x20, 0xee, 0xe8, 0xeb, 0x92, 0xea, 0x5e, 0xe8, 0x2b, 0xe7, + 0x4e, 0xe6, 0x3e, 0xe5, 0x75, 0xe4, 0xc6, 0xe2, 0xd3, 0xe1, 0x5c, 0xe1, + 0x7c, 0xe3, 0x15, 0xe7, 0x20, 0xee, 0xd5, 0xf3, 0xbe, 0xf9, 0xe9, 0xfc, + 0x7d, 0xff, 0xc1, 0x01, 0x6c, 0x04, 0x57, 0x07, 0xa7, 0x07, 0x23, 0x07, + 0xff, 0x03, 0xc4, 0x00, 0x9f, 0x00, 0x40, 0x01, 0xba, 0x02, 0x96, 0x03, + 0x36, 0x04, 0x84, 0x03, 0x7f, 0x04, 0x75, 0x05, 0x4e, 0x05, 0xaf, 0x06, + 0xe5, 0x04, 0x0e, 0x05, 0x28, 0x02, 0xd9, 0x00, 0x3e, 0x00, 0xa9, 0xff, + 0x04, 0x01, 0x7d, 0x01, 0x5d, 0x02, 0xcf, 0x03, 0x0c, 0x06, 0x07, 0x09, + 0x67, 0x0b, 0x8c, 0x0c, 0x61, 0x0d, 0x95, 0x0d, 0x8e, 0x0e, 0xbe, 0x0f, + 0x92, 0x0f, 0xa0, 0x0e, 0xcf, 0x0c, 0xc0, 0x0b, 0xf6, 0x0b, 0x55, 0x0d, + 0x09, 0x0d, 0x9f, 0x0c, 0x5f, 0x0b, 0xcf, 0x0a, 0x14, 0x0a, 0x86, 0x09, + 0xc2, 0x09, 0x09, 0x09, 0xd3, 0x08, 0xfa, 0x06, 0x3a, 0x05, 0x67, 0x03, + 0x9c, 0x02, 0xc9, 0x03, 0x38, 0x04, 0x56, 0x03, 0x80, 0x02, 0x75, 0x00, + 0xb5, 0x00, 0xd5, 0x00, 0x63, 0x02, 0x5d, 0x02, 0x5e, 0x02, 0xb3, 0x01, + 0x69, 0x01, 0x50, 0x02, 0x4f, 0x03, 0x3e, 0x04, 0x06, 0x05, 0x88, 0x05, + 0x09, 0x06, 0xd1, 0x06, 0xe5, 0x06, 0x4e, 0x07, 0x6c, 0x07, 0x73, 0x07, + 0x80, 0x07, 0x2e, 0x07, 0x22, 0x06, 0x99, 0x05, 0x56, 0x04, 0x4c, 0x03, + 0xc0, 0x02, 0x8e, 0x02, 0xe5, 0x01, 0x06, 0x01, 0x76, 0xff, 0x4a, 0xfe, + 0x8c, 0xfd, 0xab, 0xfd, 0xff, 0xfd, 0x65, 0xfd, 0x97, 0xfc, 0xb6, 0xfa, + 0xeb, 0xf9, 0x86, 0xf9, 0x5e, 0xf8, 0xb0, 0xf7, 0x53, 0xf6, 0x3a, 0xf4, + 0x44, 0xf3, 0x1a, 0xf1, 0xbb, 0xee, 0x3e, 0xee, 0x1e, 0xeb, 0x2d, 0xec, + 0xa4, 0xea, 0x0c, 0xea, 0xfe, 0xeb, 0x44, 0xe9, 0x65, 0xeb, 0x2a, 0xeb, + 0x67, 0xe9, 0xe7, 0xea, 0x7a, 0xe9, 0xb0, 0xe9, 0x8a, 0xe8, 0xf9, 0xe7, + 0x0c, 0xe6, 0x07, 0xe9, 0x32, 0xef, 0x7e, 0xf4, 0xa4, 0xfa, 0xb7, 0xfd, + 0xba, 0xff, 0xf6, 0x05, 0xe2, 0x0a, 0xfa, 0x0d, 0x98, 0x0d, 0x84, 0x0a, + 0x08, 0x08, 0xa6, 0x07, 0x27, 0x07, 0x44, 0x03, 0x2b, 0xff, 0xbb, 0xfb, + 0x0b, 0xfc, 0x8c, 0xff, 0x19, 0x01, 0x04, 0x01, 0x70, 0x01, 0x14, 0x02, + 0x9d, 0x04, 0x6c, 0x06, 0xec, 0x06, 0x21, 0x06, 0xbf, 0x04, 0x41, 0x02, + 0xfa, 0x00, 0x97, 0x00, 0x33, 0x02, 0xf1, 0x03, 0xdd, 0x04, 0x3e, 0x05, + 0xaf, 0x06, 0xa0, 0x09, 0x32, 0x0d, 0x5a, 0x0f, 0x2a, 0x10, 0x79, 0x0f, + 0x7f, 0x10, 0x7d, 0x11, 0x87, 0x10, 0x2b, 0x0e, 0xfd, 0x0a, 0xe1, 0x09, + 0xf8, 0x09, 0x44, 0x0a, 0x4f, 0x09, 0x83, 0x07, 0xa9, 0x06, 0x27, 0x07, + 0x19, 0x07, 0xe0, 0x07, 0xbf, 0x08, 0x9e, 0x08, 0xaf, 0x07, 0x0e, 0x05, + 0xc7, 0x02, 0x50, 0x02, 0x94, 0x02, 0xd2, 0x02, 0xe2, 0x01, 0x9c, 0xff, + 0x43, 0xff, 0xdb, 0xfe, 0x83, 0x00, 0xd6, 0x01, 0x76, 0x03, 0xdb, 0x04, + 0x9b, 0x05, 0x6d, 0x05, 0xdb, 0x05, 0x11, 0x06, 0x99, 0x06, 0x7b, 0x07, + 0xc1, 0x07, 0x58, 0x07, 0xeb, 0x05, 0x35, 0x05, 0xd4, 0x04, 0xd4, 0x05, + 0xd7, 0x07, 0x09, 0x08, 0x19, 0x07, 0xb0, 0x06, 0x9a, 0x05, 0x2f, 0x05, + 0xa5, 0x04, 0x3e, 0x03, 0xb9, 0x01, 0x14, 0x00, 0x5e, 0xfe, 0x66, 0xfc, + 0xf0, 0xfa, 0xf8, 0xf9, 0x04, 0xfa, 0xba, 0xf9, 0x37, 0xf9, 0xdb, 0xf8, + 0x1b, 0xf8, 0x1b, 0xf8, 0x0e, 0xf8, 0x2b, 0xf7, 0x82, 0xf6, 0x79, 0xf5, + 0x33, 0xf4, 0x23, 0xf2, 0x11, 0xf0, 0x5e, 0xee, 0x27, 0xee, 0xd1, 0xed, + 0xa9, 0xed, 0x65, 0xec, 0xe2, 0xeb, 0xa9, 0xec, 0x5d, 0xee, 0x90, 0xef, + 0x08, 0xef, 0xfc, 0xed, 0x85, 0xeb, 0x55, 0xeb, 0x72, 0xe8, 0xe5, 0xe7, + 0xfd, 0xe5, 0xb3, 0xe6, 0x98, 0xe9, 0x39, 0xf0, 0x80, 0xf6, 0x12, 0xfc, + 0x01, 0x02, 0x8f, 0x05, 0xa0, 0x0b, 0xbb, 0x10, 0x34, 0x13, 0xd5, 0x12, + 0x85, 0x0f, 0x27, 0x0b, 0xa1, 0x07, 0x5c, 0x03, 0xff, 0x00, 0xee, 0xfd, + 0x8d, 0xfb, 0xc2, 0xfa, 0x46, 0xfa, 0x7a, 0xfc, 0xf6, 0xfe, 0xb5, 0x01, + 0xd2, 0x03, 0xed, 0x05, 0xed, 0x06, 0xbf, 0x06, 0x5a, 0x06, 0xe2, 0x04, + 0x6c, 0x03, 0xd6, 0x03, 0xf3, 0x02, 0x53, 0x02, 0x04, 0x02, 0x6e, 0x01, + 0xbc, 0x03, 0x32, 0x07, 0xe6, 0x0a, 0xdc, 0x0c, 0x24, 0x0e, 0x56, 0x0f, + 0xfa, 0x10, 0x4f, 0x12, 0x76, 0x13, 0x1f, 0x11, 0x49, 0x0e, 0x2e, 0x0d, + 0xe0, 0x0a, 0xba, 0x09, 0xd4, 0x07, 0x71, 0x04, 0xad, 0x03, 0xfe, 0x03, + 0xdc, 0x04, 0x29, 0x05, 0xc6, 0x05, 0x79, 0x05, 0xc4, 0x06, 0x19, 0x07, + 0x8e, 0x06, 0x53, 0x05, 0x58, 0x04, 0xfb, 0x02, 0x6a, 0x01, 0xa3, 0xff, + 0xc3, 0xfc, 0x43, 0xfc, 0xe2, 0xfc, 0xff, 0xfc, 0xdf, 0xfd, 0x08, 0xff, + 0x63, 0x00, 0x59, 0x03, 0x95, 0x04, 0x2a, 0x06, 0x2b, 0x07, 0x0c, 0x08, + 0xe1, 0x08, 0x4f, 0x08, 0x48, 0x07, 0x3a, 0x06, 0xf1, 0x04, 0x32, 0x04, + 0x4a, 0x04, 0xb7, 0x03, 0xd4, 0x03, 0x61, 0x03, 0xb9, 0x02, 0x3d, 0x03, + 0x89, 0x03, 0xb2, 0x03, 0xd6, 0x02, 0xbc, 0x01, 0x39, 0x00, 0x01, 0xff, + 0xa2, 0xfd, 0x6d, 0xfc, 0x1c, 0xfb, 0x6d, 0xfa, 0x1b, 0xf9, 0x62, 0xf8, + 0x2b, 0xf8, 0xbf, 0xf8, 0x29, 0xf9, 0x40, 0xf9, 0xc1, 0xf8, 0x8c, 0xf8, + 0xa7, 0xf8, 0xd1, 0xf7, 0x9a, 0xf6, 0x62, 0xf4, 0x33, 0xf2, 0xdb, 0xf1, + 0x87, 0xf1, 0x13, 0xf1, 0x66, 0xf0, 0x7c, 0xef, 0x89, 0xef, 0x09, 0xf0, + 0xa9, 0xf1, 0x2c, 0xf2, 0x13, 0xf1, 0x2f, 0xf2, 0x11, 0xf0, 0x66, 0xef, + 0x0b, 0xef, 0xfc, 0xeb, 0xeb, 0xe8, 0xd0, 0xe7, 0xc0, 0xe7, 0xdf, 0xeb, + 0x58, 0xf4, 0x95, 0xf8, 0x14, 0xfc, 0xdd, 0xff, 0x63, 0x05, 0x4c, 0x0d, + 0x5e, 0x15, 0xfe, 0x15, 0x51, 0x14, 0x6b, 0x11, 0x66, 0x0e, 0xd2, 0x0c, + 0x87, 0x09, 0x5d, 0x05, 0x2e, 0x01, 0x9d, 0xfd, 0xa5, 0xfa, 0xf8, 0xf9, + 0x7b, 0xfa, 0x23, 0xfd, 0x72, 0xff, 0xdb, 0x00, 0x5b, 0x02, 0x03, 0x04, + 0x2e, 0x06, 0x0f, 0x07, 0x92, 0x06, 0xa0, 0x05, 0x71, 0x04, 0xe0, 0x02, + 0xf0, 0x01, 0xec, 0x00, 0xd9, 0x00, 0x84, 0x01, 0x0f, 0x02, 0x34, 0x03, + 0xcd, 0x05, 0xb0, 0x08, 0x2b, 0x0b, 0xd5, 0x0c, 0x24, 0x0e, 0xb8, 0x0e, + 0x9a, 0x0f, 0x26, 0x0f, 0x03, 0x0e, 0xe0, 0x0c, 0xb6, 0x0a, 0x96, 0x08, + 0xa9, 0x06, 0xbc, 0x04, 0x42, 0x04, 0x4b, 0x03, 0x49, 0x02, 0x7c, 0x02, + 0xeb, 0x02, 0xfc, 0x03, 0x46, 0x04, 0xf6, 0x03, 0x6d, 0x03, 0x7e, 0x03, + 0x0b, 0x03, 0xfc, 0x01, 0xcc, 0x00, 0xa9, 0xff, 0x44, 0xfe, 0xbf, 0xfd, + 0xed, 0xfc, 0x01, 0xfd, 0x34, 0xfe, 0x3e, 0xff, 0x4c, 0x00, 0x01, 0x01, + 0x10, 0x03, 0x3e, 0x05, 0xfb, 0x05, 0xad, 0x07, 0xcc, 0x07, 0xe5, 0x07, + 0xd9, 0x08, 0xf8, 0x07, 0xa0, 0x06, 0xfd, 0x05, 0xa2, 0x04, 0xb6, 0x04, + 0x0d, 0x03, 0x07, 0x02, 0x87, 0x01, 0x38, 0x00, 0x1f, 0x00, 0x86, 0xff, + 0xc4, 0xfe, 0x9c, 0xfe, 0x3f, 0xfe, 0x57, 0xfd, 0x30, 0xfc, 0x29, 0xfb, + 0x36, 0xfb, 0x77, 0xfb, 0xe0, 0xfa, 0x99, 0xf9, 0x84, 0xf8, 0x9f, 0xf8, + 0x47, 0xf9, 0xef, 0xf9, 0x9f, 0xf9, 0x9b, 0xf8, 0x2d, 0xf8, 0xd8, 0xf6, + 0x49, 0xf6, 0x37, 0xf5, 0x81, 0xf4, 0x6f, 0xf3, 0x41, 0xf2, 0xbd, 0xf0, + 0x41, 0xef, 0x38, 0xef, 0xe6, 0xef, 0x38, 0xf0, 0x63, 0xf0, 0x55, 0xef, + 0xeb, 0xed, 0xe7, 0xed, 0x53, 0xee, 0xaf, 0xeb, 0xef, 0xea, 0x28, 0xe9, + 0x2b, 0xe9, 0xa3, 0xee, 0x1e, 0xf4, 0x2d, 0xf9, 0x6c, 0xfe, 0x85, 0x01, + 0x05, 0x07, 0xe3, 0x0d, 0xb6, 0x14, 0x55, 0x18, 0xfd, 0x17, 0xc8, 0x14, + 0xdd, 0x10, 0xaf, 0x0d, 0x1e, 0x0b, 0x8a, 0x07, 0x64, 0x02, 0x2a, 0xfe, + 0x8e, 0xf8, 0x83, 0xf6, 0xf7, 0xf6, 0x3e, 0xf8, 0x3a, 0xfb, 0x31, 0xfe, + 0x0e, 0xff, 0x7f, 0x01, 0x52, 0x03, 0xd4, 0x04, 0xb8, 0x06, 0xb8, 0x06, + 0x51, 0x06, 0xfc, 0x04, 0xb7, 0x03, 0xc7, 0x02, 0x42, 0x01, 0x93, 0x00, + 0x6c, 0x00, 0x98, 0x01, 0xcc, 0x03, 0xab, 0x05, 0xb2, 0x07, 0x0b, 0x09, + 0xc3, 0x0a, 0xd3, 0x0c, 0x62, 0x0e, 0xcd, 0x0f, 0xe3, 0x0f, 0x2a, 0x0f, + 0x19, 0x0d, 0x5c, 0x0a, 0xc6, 0x08, 0x3d, 0x07, 0xb7, 0x05, 0xa7, 0x04, + 0xe9, 0x02, 0x2d, 0x01, 0xe3, 0xff, 0x65, 0x00, 0x6b, 0x01, 0x15, 0x02, + 0x2b, 0x02, 0xe4, 0x00, 0x4c, 0x00, 0xc7, 0x00, 0x2e, 0x01, 0x8c, 0x00, + 0xe8, 0xff, 0x7a, 0xfe, 0x1b, 0xfd, 0x0e, 0xfd, 0x09, 0xfd, 0xa3, 0xfd, + 0x31, 0xfe, 0xf2, 0xfe, 0x0f, 0x00, 0xa7, 0x01, 0x65, 0x03, 0xe8, 0x04, + 0x20, 0x06, 0xb0, 0x07, 0x81, 0x09, 0x53, 0x0a, 0x88, 0x0a, 0x63, 0x0a, + 0xd3, 0x08, 0x58, 0x08, 0x93, 0x08, 0xfa, 0x06, 0x4d, 0x05, 0xe3, 0x02, + 0xd1, 0xff, 0x52, 0xfe, 0xd2, 0xfd, 0xfb, 0xfc, 0xd7, 0xfb, 0x85, 0xfa, + 0x26, 0xf9, 0xf2, 0xf8, 0x19, 0xf9, 0x52, 0xfa, 0x99, 0xfa, 0x82, 0xfa, + 0xa0, 0xfa, 0x1d, 0xfb, 0x24, 0xfb, 0x78, 0xfb, 0x27, 0xfb, 0x7e, 0xfa, + 0x14, 0xfa, 0xf7, 0xf8, 0x9a, 0xf7, 0x3b, 0xf6, 0x9a, 0xf4, 0x35, 0xf3, + 0x8e, 0xf2, 0xd7, 0xf0, 0x4e, 0xf2, 0x54, 0xf1, 0xf9, 0xf1, 0xb4, 0xf2, + 0x39, 0xf2, 0x3b, 0xf3, 0x5a, 0xf3, 0xd6, 0xf3, 0x35, 0xf3, 0x2d, 0xf2, + 0x36, 0xef, 0xaf, 0xec, 0x47, 0xea, 0xa2, 0xea, 0x65, 0xeb, 0x36, 0xf1, + 0x3e, 0xf5, 0xcf, 0xf7, 0x09, 0xfd, 0xd9, 0x00, 0x05, 0x09, 0xb9, 0x13, + 0x5a, 0x18, 0x75, 0x18, 0xb9, 0x16, 0xa2, 0x14, 0x59, 0x14, 0xa9, 0x12, + 0x28, 0x0e, 0x9a, 0x06, 0x43, 0xff, 0x01, 0xfa, 0xbb, 0xf6, 0x54, 0xf5, + 0xad, 0xf4, 0x02, 0xf5, 0x01, 0xf6, 0x54, 0xf8, 0xe0, 0xfb, 0x94, 0xff, + 0x7d, 0x03, 0x46, 0x06, 0x49, 0x08, 0x64, 0x09, 0xfa, 0x09, 0x26, 0x09, + 0xed, 0x06, 0x55, 0x04, 0x4c, 0x02, 0xfe, 0x00, 0xbe, 0xff, 0x66, 0xff, + 0x55, 0xff, 0xe6, 0xfe, 0x67, 0x00, 0x25, 0x03, 0x75, 0x07, 0xe4, 0x0a, + 0x9e, 0x0d, 0x72, 0x0e, 0x97, 0x0f, 0x99, 0x11, 0xf1, 0x11, 0x53, 0x10, + 0xe9, 0x0d, 0x7d, 0x0b, 0x1a, 0x09, 0xf6, 0x05, 0x14, 0x02, 0x96, 0xfe, + 0x1a, 0xfd, 0x04, 0xfd, 0x3f, 0xfc, 0x16, 0xfc, 0xf1, 0xfb, 0x64, 0xfc, + 0xd2, 0xfd, 0xbc, 0xfe, 0x8e, 0x00, 0xb2, 0x01, 0xb0, 0x01, 0x50, 0x00, + 0xd5, 0xfe, 0x81, 0xfe, 0x7c, 0xfe, 0xd2, 0xff, 0xaf, 0xfe, 0xd1, 0xfc, + 0x40, 0xfd, 0x4c, 0xfe, 0x34, 0x01, 0x23, 0x04, 0x73, 0x06, 0x1e, 0x08, + 0x8b, 0x09, 0xdb, 0x0b, 0x73, 0x0d, 0xc1, 0x0e, 0xf1, 0x0e, 0xd8, 0x0d, + 0x37, 0x0b, 0x99, 0x08, 0xdb, 0x05, 0x11, 0x02, 0x3b, 0xff, 0x39, 0xfc, + 0x1d, 0xf9, 0x29, 0xf7, 0x0e, 0xf6, 0x48, 0xf4, 0x29, 0xf5, 0x53, 0xf6, + 0xbc, 0xf7, 0x33, 0xfa, 0x3e, 0xfb, 0x9f, 0xfc, 0x37, 0xfe, 0x89, 0xff, + 0xf1, 0x00, 0x6c, 0x01, 0xca, 0x00, 0xed, 0xff, 0x92, 0xfe, 0xd0, 0xfc, + 0xfe, 0xfa, 0xf2, 0xf8, 0x5e, 0xf6, 0xf8, 0xf4, 0x5b, 0xf4, 0x90, 0xf4, + 0x58, 0xf4, 0xa5, 0xf3, 0x6c, 0xf5, 0x56, 0xf6, 0x27, 0xf7, 0x39, 0xf8, + 0x25, 0xf6, 0x50, 0xf6, 0x33, 0xf6, 0x02, 0xf5, 0x02, 0xf3, 0x72, 0xef, + 0xef, 0xec, 0x35, 0xe8, 0x0b, 0xe9, 0xb6, 0xea, 0x93, 0xec, 0x82, 0xf1, + 0x4f, 0xf5, 0x25, 0xf9, 0x80, 0x00, 0x11, 0x09, 0x31, 0x0f, 0x8c, 0x15, + 0x57, 0x18, 0x3b, 0x18, 0xa2, 0x18, 0xc3, 0x17, 0xf1, 0x14, 0x03, 0x11, + 0x74, 0x0b, 0xc9, 0x04, 0xd5, 0xfe, 0xab, 0xf9, 0x58, 0xf6, 0xc8, 0xf4, + 0xd7, 0xf3, 0x8a, 0xf4, 0x65, 0xf5, 0xc9, 0xf6, 0x11, 0xfa, 0x9c, 0xfd, + 0xa2, 0x00, 0x15, 0x04, 0x52, 0x05, 0x6f, 0x05, 0x4d, 0x05, 0x71, 0x04, + 0xd1, 0x03, 0x99, 0x02, 0x71, 0x00, 0x54, 0xfe, 0xf0, 0xfc, 0xaa, 0xfc, + 0xe9, 0xfc, 0x10, 0xfe, 0xe1, 0xff, 0xd3, 0x02, 0x25, 0x07, 0xdf, 0x09, + 0x39, 0x0c, 0x2b, 0x0f, 0xaf, 0x10, 0x33, 0x13, 0xe6, 0x13, 0x5e, 0x12, + 0x9c, 0x0f, 0x9d, 0x0c, 0x82, 0x09, 0x62, 0x06, 0x5b, 0x03, 0x7e, 0x00, + 0x27, 0xfd, 0x12, 0xfa, 0x2d, 0xf8, 0x76, 0xf7, 0x52, 0xf9, 0x0a, 0xfb, + 0x74, 0xfb, 0x90, 0xfa, 0xc1, 0xfb, 0x0f, 0xfe, 0xec, 0xff, 0xf4, 0x00, + 0xcf, 0x00, 0x06, 0x00, 0xf3, 0x00, 0xf7, 0x00, 0x3e, 0x00, 0xc1, 0x00, + 0x3c, 0x01, 0xa3, 0x02, 0xa9, 0x03, 0x33, 0x04, 0x00, 0x06, 0x5f, 0x08, + 0xa5, 0x0a, 0x59, 0x0c, 0x39, 0x0d, 0x07, 0x0d, 0xbe, 0x0d, 0x53, 0x0d, + 0x46, 0x0b, 0x77, 0x09, 0xd0, 0x06, 0xb6, 0x03, 0x54, 0x01, 0x6f, 0xfe, + 0x7e, 0xfa, 0x7b, 0xf8, 0x2b, 0xf7, 0x72, 0xf6, 0xa8, 0xf6, 0x03, 0xf7, + 0x90, 0xf7, 0xee, 0xf8, 0x8d, 0xfa, 0x88, 0xfc, 0xdc, 0xfe, 0x65, 0x01, + 0x6c, 0x02, 0x92, 0x02, 0xa2, 0x02, 0xd4, 0x02, 0xb7, 0x02, 0xa8, 0x02, + 0x8a, 0x00, 0x81, 0xfe, 0x4d, 0xfc, 0x55, 0xf9, 0xe1, 0xf8, 0x10, 0xf8, + 0xfa, 0xf6, 0x01, 0xf7, 0x18, 0xf5, 0x62, 0xf4, 0x9c, 0xf4, 0x00, 0xf5, + 0x83, 0xf5, 0x35, 0xf4, 0xfd, 0xf3, 0x08, 0xf3, 0x74, 0xf2, 0x61, 0xf1, + 0xf9, 0xee, 0xf4, 0xec, 0x23, 0xeb, 0x73, 0xeb, 0xbd, 0xec, 0x22, 0xf0, + 0x48, 0xf2, 0x54, 0xf6, 0xb6, 0xf9, 0x69, 0xff, 0xce, 0x06, 0x63, 0x0c, + 0x65, 0x11, 0xf6, 0x14, 0x5d, 0x17, 0x6a, 0x17, 0x20, 0x17, 0x5f, 0x15, + 0x5c, 0x12, 0x77, 0x0f, 0x74, 0x0a, 0x90, 0x03, 0x87, 0xfd, 0x1e, 0xf9, + 0x45, 0xf7, 0x15, 0xf5, 0x87, 0xf3, 0x78, 0xf1, 0x28, 0xf0, 0x72, 0xf2, + 0xdd, 0xf5, 0x37, 0xf8, 0x10, 0xfb, 0x6e, 0xfc, 0x49, 0xfe, 0x4c, 0x00, + 0xec, 0x01, 0xaa, 0x02, 0xcf, 0x02, 0xf3, 0x01, 0xd8, 0x00, 0xd3, 0xff, + 0x29, 0xff, 0x12, 0xff, 0x3a, 0xff, 0x9a, 0xff, 0x8d, 0x00, 0x2b, 0x02, + 0xaa, 0x04, 0xc8, 0x06, 0xfb, 0x09, 0xdb, 0x0c, 0x21, 0x0f, 0x13, 0x11, + 0x5b, 0x11, 0x8a, 0x11, 0x86, 0x11, 0x63, 0x10, 0x19, 0x0e, 0x25, 0x0b, + 0x8e, 0x07, 0xd7, 0x03, 0x3d, 0x00, 0x26, 0xfd, 0x88, 0xfa, 0xc0, 0xf8, + 0xdd, 0xf6, 0x26, 0xf5, 0x2c, 0xf5, 0xc5, 0xf5, 0x99, 0xf7, 0xf1, 0xf9, + 0xb9, 0xfb, 0x2f, 0xfd, 0x4d, 0xfe, 0xf3, 0xff, 0xf7, 0x02, 0x35, 0x05, + 0x1e, 0x06, 0x5f, 0x06, 0x06, 0x05, 0xe9, 0x04, 0x13, 0x07, 0x32, 0x08, + 0x50, 0x08, 0x1a, 0x08, 0xd0, 0x06, 0x29, 0x07, 0x76, 0x08, 0xb5, 0x09, + 0xd2, 0x09, 0x62, 0x09, 0x4d, 0x08, 0x68, 0x07, 0x2c, 0x06, 0xbb, 0x04, + 0x19, 0x04, 0x81, 0x02, 0x58, 0x00, 0x4c, 0xfd, 0xec, 0xfa, 0x0c, 0xfa, + 0x2c, 0xf9, 0x14, 0xf9, 0x58, 0xf9, 0x92, 0xf8, 0xc9, 0xf8, 0x83, 0xfa, + 0x74, 0xfc, 0x48, 0xfe, 0xdc, 0xff, 0x57, 0x01, 0xc3, 0x02, 0x50, 0x04, + 0x58, 0x05, 0x0a, 0x05, 0x02, 0x04, 0x7a, 0x03, 0x25, 0x03, 0x91, 0x00, + 0xc9, 0xfe, 0x53, 0xfc, 0x9e, 0xf8, 0xf1, 0xf7, 0xb4, 0xf6, 0xac, 0xf3, + 0xf9, 0xf2, 0xea, 0xf1, 0xaf, 0xef, 0xe7, 0xef, 0x57, 0xf0, 0x08, 0xef, + 0x6e, 0xef, 0xb2, 0xee, 0x36, 0xed, 0xac, 0xee, 0x29, 0xee, 0x7b, 0xed, + 0xf2, 0xec, 0x30, 0xee, 0x17, 0xf2, 0x7f, 0xf7, 0x16, 0xfb, 0x04, 0xfe, + 0x9d, 0x00, 0xae, 0x05, 0x0b, 0x0d, 0x03, 0x13, 0xed, 0x15, 0xb7, 0x16, + 0x2f, 0x16, 0xd3, 0x14, 0x83, 0x14, 0x83, 0x13, 0xf5, 0x0f, 0xeb, 0x0a, + 0x38, 0x04, 0xfc, 0xfc, 0x40, 0xf9, 0x7e, 0xf6, 0x8b, 0xf3, 0x9c, 0xf0, + 0x3e, 0xee, 0xcf, 0xec, 0xf8, 0xed, 0xb9, 0xf0, 0x21, 0xf3, 0x20, 0xf6, + 0xd7, 0xf8, 0xb2, 0xfb, 0x25, 0xff, 0xb5, 0x01, 0xe0, 0x02, 0x2b, 0x03, + 0xa6, 0x03, 0x4a, 0x05, 0x86, 0x05, 0x40, 0x04, 0xa0, 0x01, 0x05, 0xff, + 0xc8, 0xff, 0x07, 0x02, 0x50, 0x03, 0x7f, 0x03, 0xfe, 0x03, 0x93, 0x05, + 0x99, 0x08, 0x22, 0x0c, 0xe1, 0x0e, 0xa2, 0x10, 0xac, 0x11, 0x90, 0x11, + 0x3e, 0x10, 0xa5, 0x0e, 0xf3, 0x0d, 0x0f, 0x0c, 0x2c, 0x08, 0xb2, 0x03, + 0xe6, 0xfe, 0xef, 0xfa, 0xab, 0xf8, 0x93, 0xf6, 0x71, 0xf4, 0x87, 0xf3, + 0xd7, 0xf2, 0x98, 0xf2, 0xdd, 0xf4, 0xea, 0xf7, 0x70, 0xfb, 0xce, 0xfe, + 0xc3, 0x00, 0xa2, 0x03, 0x69, 0x06, 0xcc, 0x09, 0xc7, 0x0b, 0xf1, 0x0b, + 0x4f, 0x0c, 0x34, 0x0c, 0xfe, 0x0b, 0x07, 0x0b, 0xcf, 0x09, 0x1b, 0x08, + 0xbe, 0x07, 0x98, 0x06, 0xfe, 0x04, 0x6d, 0x04, 0xca, 0x03, 0x28, 0x04, + 0x90, 0x04, 0xcc, 0x03, 0xec, 0x02, 0xf5, 0x02, 0x0b, 0x03, 0xc7, 0x02, + 0x6e, 0x02, 0xe3, 0x00, 0xaa, 0xff, 0x59, 0xff, 0x3a, 0xfe, 0x60, 0xfd, + 0xe2, 0xfc, 0x57, 0xfc, 0x20, 0xfc, 0xf0, 0xfb, 0x4a, 0xfc, 0x1e, 0xfd, + 0x62, 0xfe, 0xab, 0xff, 0x35, 0x00, 0x3b, 0x00, 0x0a, 0x01, 0xcb, 0x01, + 0x41, 0x02, 0xf6, 0x01, 0x94, 0x00, 0xe4, 0xfe, 0x89, 0xfd, 0xdf, 0xfb, + 0x7d, 0xfa, 0x7a, 0xf8, 0xd9, 0xf5, 0xc5, 0xf3, 0xcf, 0xf1, 0x99, 0xf0, + 0x9d, 0xef, 0x0e, 0xef, 0x2b, 0xef, 0x0a, 0xee, 0xe7, 0xed, 0xdc, 0xec, + 0xcf, 0xec, 0x86, 0xee, 0xea, 0xee, 0x65, 0xef, 0xa6, 0xef, 0x71, 0xf2, + 0x55, 0xf6, 0xeb, 0xf9, 0xf9, 0xfd, 0x88, 0x00, 0x9b, 0x03, 0xcc, 0x09, + 0x29, 0x0e, 0xca, 0x10, 0x12, 0x12, 0xd1, 0x12, 0x1f, 0x13, 0xf5, 0x12, + 0xf1, 0x11, 0x9f, 0x0d, 0x64, 0x09, 0xf5, 0x05, 0xc1, 0x01, 0x93, 0xfd, + 0x5a, 0xf9, 0xb7, 0xf4, 0xb3, 0xf1, 0xb8, 0xf0, 0x9e, 0xf0, 0x91, 0xf0, + 0x6d, 0xf0, 0x50, 0xf1, 0xd3, 0xf3, 0x80, 0xf8, 0xce, 0xfb, 0x15, 0xfe, + 0x27, 0xff, 0x53, 0x00, 0xd7, 0x02, 0x69, 0x05, 0xf7, 0x05, 0x8e, 0x05, + 0x7f, 0x04, 0x06, 0x03, 0x8a, 0x02, 0x60, 0x02, 0x8b, 0x02, 0x33, 0x03, + 0x4e, 0x03, 0x9b, 0x03, 0x7d, 0x04, 0x8d, 0x06, 0x54, 0x09, 0x43, 0x0c, + 0xfc, 0x0d, 0x64, 0x0e, 0xd6, 0x0e, 0x45, 0x0f, 0x29, 0x10, 0x98, 0x0f, + 0x0a, 0x0e, 0xcc, 0x0a, 0x31, 0x07, 0x62, 0x04, 0x18, 0x01, 0x73, 0xfe, + 0x9b, 0xfb, 0x0c, 0xf8, 0xf5, 0xf6, 0x6c, 0xf6, 0x9b, 0xf5, 0x81, 0xf6, + 0x84, 0xf7, 0xbe, 0xf9, 0xa9, 0xfc, 0x18, 0xff, 0x7b, 0x00, 0xeb, 0x02, + 0x1b, 0x06, 0xd8, 0x07, 0x33, 0x09, 0x98, 0x09, 0x85, 0x09, 0x87, 0x09, + 0xaa, 0x09, 0x52, 0x08, 0x6a, 0x07, 0x1d, 0x07, 0xce, 0x05, 0x23, 0x05, + 0x06, 0x05, 0x30, 0x04, 0x62, 0x04, 0x4b, 0x05, 0x6a, 0x04, 0x75, 0x04, + 0xf6, 0x04, 0x1c, 0x04, 0x17, 0x04, 0x12, 0x04, 0x7f, 0x02, 0x9d, 0x01, + 0x0c, 0x01, 0x3e, 0xff, 0x1b, 0xfe, 0xec, 0xfc, 0xf6, 0xfb, 0xa3, 0xfb, + 0x6d, 0xfb, 0x86, 0xfb, 0xaf, 0xfb, 0x30, 0xfc, 0x86, 0xfd, 0xcc, 0xfe, + 0x31, 0x00, 0x5e, 0x01, 0x7b, 0x01, 0x53, 0x01, 0x89, 0x02, 0x05, 0x02, + 0x85, 0x00, 0x03, 0xff, 0xd3, 0xfc, 0x20, 0xfb, 0x34, 0xfa, 0x21, 0xf7, + 0xaa, 0xf4, 0xa0, 0xf1, 0x11, 0xf1, 0x2e, 0xf1, 0xd9, 0xef, 0x5e, 0xef, + 0x2f, 0xed, 0xb2, 0xec, 0x90, 0xee, 0xef, 0xef, 0x32, 0xf0, 0x71, 0xef, + 0xbe, 0xed, 0xf4, 0xed, 0x57, 0xf1, 0xc0, 0xf4, 0xec, 0xf7, 0xd5, 0xfa, + 0x82, 0xfb, 0x15, 0xfe, 0xe2, 0x03, 0x43, 0x09, 0x9c, 0x0d, 0x72, 0x10, + 0xce, 0x10, 0x21, 0x11, 0x1f, 0x12, 0xf0, 0x11, 0xc1, 0x10, 0xf2, 0x0e, + 0x20, 0x0b, 0xfd, 0x04, 0xef, 0xff, 0xb8, 0xfc, 0xe6, 0xf9, 0x08, 0xf7, + 0x0a, 0xf3, 0x3f, 0xef, 0x8a, 0xee, 0x3a, 0xf0, 0xf6, 0xf0, 0xc1, 0xf1, + 0x90, 0xf3, 0x84, 0xf6, 0x67, 0xfa, 0x06, 0xfe, 0x2e, 0xff, 0x21, 0x00, + 0x4c, 0x02, 0x37, 0x05, 0xbd, 0x06, 0x17, 0x06, 0x7b, 0x04, 0x01, 0x03, + 0x24, 0x03, 0xeb, 0x03, 0x6f, 0x03, 0x2a, 0x03, 0x21, 0x03, 0x5b, 0x03, + 0x0a, 0x04, 0x17, 0x06, 0xf1, 0x08, 0x0f, 0x0c, 0x83, 0x0d, 0x47, 0x0d, + 0x8a, 0x0d, 0x64, 0x0f, 0x4e, 0x11, 0xcb, 0x11, 0x12, 0x0f, 0x4d, 0x0b, + 0xd3, 0x08, 0x14, 0x07, 0x51, 0x05, 0x3e, 0x02, 0xb6, 0xfd, 0x4b, 0xfa, + 0x83, 0xf8, 0x8f, 0xf7, 0xfb, 0xf6, 0x6c, 0xf6, 0x58, 0xf6, 0xae, 0xf7, + 0x85, 0xf9, 0x16, 0xfb, 0x73, 0xfd, 0x0e, 0x00, 0xab, 0x02, 0xc4, 0x04, + 0x0e, 0x06, 0xb6, 0x07, 0xe2, 0x08, 0x8b, 0x09, 0x34, 0x0a, 0x97, 0x09, + 0x02, 0x09, 0x8f, 0x08, 0xbe, 0x07, 0xa3, 0x06, 0x59, 0x05, 0xf9, 0x04, + 0xaa, 0x04, 0x14, 0x04, 0x58, 0x03, 0x6d, 0x02, 0x59, 0x02, 0x98, 0x02, + 0x9a, 0x02, 0x6f, 0x02, 0xb9, 0x01, 0x0a, 0x01, 0x18, 0x01, 0xa9, 0x00, + 0x02, 0x00, 0x90, 0xff, 0xd7, 0xfe, 0x29, 0xfe, 0x54, 0xfe, 0x9b, 0xfe, + 0x3a, 0xfe, 0xa9, 0xfe, 0x69, 0xff, 0xe7, 0xff, 0xac, 0x00, 0x56, 0x01, + 0xb0, 0x01, 0x72, 0x01, 0xf4, 0x00, 0xd5, 0xff, 0xfe, 0xfe, 0xf6, 0xfd, + 0x6a, 0xfc, 0x26, 0xfa, 0x75, 0xf7, 0xe7, 0xf5, 0xab, 0xf4, 0xb6, 0xf2, + 0x7a, 0xf1, 0x15, 0xf0, 0x52, 0xef, 0xb4, 0xee, 0xf4, 0xee, 0x97, 0xee, + 0x49, 0xee, 0xa4, 0xef, 0xb5, 0xef, 0x5c, 0xf0, 0xe2, 0xf1, 0xd8, 0xf1, + 0x33, 0xf2, 0x18, 0xf3, 0x5f, 0xf5, 0x7e, 0xf9, 0xf4, 0xfd, 0xe1, 0xff, + 0x6c, 0x00, 0xfa, 0x02, 0x3c, 0x07, 0xf9, 0x0d, 0xce, 0x11, 0x0f, 0x11, + 0xb8, 0x0f, 0xc5, 0x0f, 0x12, 0x10, 0xdc, 0x10, 0x33, 0x0f, 0xc2, 0x09, + 0x5e, 0x05, 0x15, 0x01, 0xd7, 0xfc, 0x09, 0xf9, 0x84, 0xf6, 0xcc, 0xf3, + 0xe5, 0xf0, 0x86, 0xee, 0xd5, 0xec, 0xf6, 0xed, 0xb3, 0xf0, 0xa3, 0xf3, + 0xb2, 0xf4, 0x46, 0xf6, 0x2b, 0xf9, 0x38, 0xfd, 0x4d, 0x01, 0xef, 0x02, + 0xfc, 0x03, 0x0e, 0x05, 0xc6, 0x06, 0xbb, 0x07, 0x83, 0x07, 0x24, 0x06, + 0x9c, 0x05, 0x56, 0x06, 0x16, 0x06, 0x6d, 0x05, 0x22, 0x05, 0xdd, 0x05, + 0x90, 0x07, 0x13, 0x09, 0xef, 0x09, 0x37, 0x0b, 0x82, 0x0c, 0xfe, 0x0d, + 0x68, 0x0f, 0xfc, 0x0f, 0x8d, 0x0f, 0x61, 0x0e, 0xea, 0x0c, 0x82, 0x0b, + 0x97, 0x09, 0xd3, 0x06, 0x6b, 0x03, 0x00, 0x00, 0x82, 0xfd, 0x82, 0xfb, + 0x1c, 0xf9, 0x30, 0xf7, 0x8f, 0xf6, 0x13, 0xf6, 0x8a, 0xf6, 0xd9, 0xf7, + 0xbb, 0xf8, 0xbe, 0xfa, 0xb1, 0xfd, 0xcc, 0xff, 0x14, 0x02, 0x69, 0x04, + 0x0a, 0x06, 0x2e, 0x08, 0x06, 0x0a, 0x99, 0x0a, 0xbd, 0x0a, 0x8d, 0x0a, + 0x42, 0x0a, 0x85, 0x09, 0x40, 0x08, 0xc3, 0x06, 0x97, 0x05, 0xaf, 0x04, + 0x25, 0x03, 0xd7, 0x01, 0x7e, 0x00, 0x01, 0x00, 0xb2, 0x00, 0x96, 0x00, + 0x26, 0x00, 0xad, 0xff, 0xbb, 0xff, 0xce, 0x00, 0xb4, 0x01, 0xbc, 0x01, + 0x95, 0x01, 0x49, 0x01, 0x59, 0x01, 0x9c, 0x01, 0xbf, 0x01, 0x97, 0x01, + 0x83, 0x01, 0x5c, 0x01, 0x9a, 0x00, 0x92, 0x00, 0x80, 0x00, 0x5f, 0x00, + 0xe8, 0xff, 0xe4, 0xfe, 0x0c, 0xfe, 0x1b, 0xfd, 0xcf, 0xfb, 0x2d, 0xfb, + 0x94, 0xf9, 0x73, 0xf8, 0x06, 0xf7, 0x07, 0xf5, 0x4c, 0xf3, 0xaa, 0xf2, + 0x59, 0xf1, 0xe1, 0xf0, 0x3a, 0xf0, 0xea, 0xee, 0x53, 0xee, 0xe9, 0xee, + 0x33, 0xef, 0xe1, 0xef, 0x47, 0xf0, 0x15, 0xf0, 0xc3, 0xf0, 0x7c, 0xf1, + 0xb3, 0xf3, 0x76, 0xf6, 0x6d, 0xf8, 0x4f, 0xfb, 0x27, 0xfe, 0x5f, 0x00, + 0xf0, 0x04, 0xa8, 0x08, 0x9e, 0x0c, 0xf1, 0x0e, 0xb1, 0x0f, 0xcd, 0x10, + 0x59, 0x11, 0x43, 0x12, 0xad, 0x11, 0x5a, 0x0e, 0xf8, 0x0a, 0x50, 0x07, + 0xf4, 0x03, 0xb5, 0x00, 0x73, 0xfc, 0x2f, 0xf8, 0x59, 0xf4, 0x35, 0xf2, + 0xc7, 0xf0, 0xb2, 0xef, 0x1e, 0xef, 0x15, 0xef, 0x0e, 0xf1, 0x8d, 0xf3, + 0x88, 0xf5, 0x74, 0xf8, 0x69, 0xfa, 0xf1, 0xfc, 0xd0, 0x00, 0xc4, 0x02, + 0xfc, 0x03, 0x3d, 0x05, 0x18, 0x06, 0x7f, 0x06, 0x28, 0x07, 0x77, 0x07, + 0x9c, 0x06, 0x65, 0x06, 0xfa, 0x06, 0x0a, 0x07, 0x23, 0x07, 0x64, 0x07, + 0xc1, 0x08, 0x3c, 0x0a, 0x78, 0x0b, 0x18, 0x0c, 0xa1, 0x0c, 0xae, 0x0d, + 0x09, 0x0f, 0x4d, 0x0f, 0x48, 0x0e, 0x7d, 0x0d, 0x63, 0x0c, 0xb2, 0x0a, + 0xb4, 0x08, 0x61, 0x06, 0x99, 0x03, 0xf1, 0x00, 0x42, 0xfe, 0x16, 0xfc, + 0x18, 0xfa, 0x51, 0xf8, 0x00, 0xf7, 0x4d, 0xf6, 0xa3, 0xf6, 0x3c, 0xf7, + 0x1e, 0xf8, 0xb7, 0xf9, 0x5b, 0xfb, 0x65, 0xfd, 0xef, 0xff, 0xcf, 0x01, + 0xe2, 0x03, 0xd1, 0x05, 0x03, 0x07, 0xf8, 0x07, 0xad, 0x08, 0x00, 0x09, + 0xac, 0x08, 0x35, 0x08, 0x35, 0x07, 0xf4, 0x05, 0x14, 0x05, 0xf5, 0x03, + 0xd1, 0x02, 0xa9, 0x01, 0x7d, 0x00, 0xdc, 0xff, 0x7c, 0xff, 0x71, 0xff, + 0x8e, 0xff, 0x96, 0xff, 0xf3, 0xff, 0x1d, 0x00, 0x16, 0x00, 0xc7, 0x00, + 0x85, 0x01, 0x3e, 0x02, 0x84, 0x02, 0x88, 0x01, 0x73, 0x01, 0x2b, 0x02, + 0xac, 0x02, 0xa5, 0x02, 0x24, 0x02, 0x6c, 0x01, 0x5c, 0x01, 0x65, 0x01, + 0x4a, 0x01, 0xd4, 0x00, 0x3d, 0x00, 0x70, 0xff, 0x51, 0xfe, 0xdc, 0xfc, + 0xb3, 0xfb, 0x40, 0xfb, 0xa0, 0xf9, 0xc3, 0xf7, 0xf8, 0xf5, 0xf7, 0xf3, + 0xd3, 0xf3, 0x62, 0xf3, 0x04, 0xf2, 0x74, 0xf1, 0x43, 0xf0, 0x07, 0xf0, + 0xde, 0xf0, 0x24, 0xf1, 0x22, 0xf1, 0x79, 0xf1, 0x6d, 0xf2, 0xd4, 0xf2, + 0x90, 0xf4, 0xf0, 0xf5, 0x12, 0xf6, 0x56, 0xf8, 0x9e, 0xfa, 0x08, 0xfc, + 0xb2, 0xfe, 0x42, 0x01, 0x33, 0x03, 0x80, 0x06, 0x18, 0x09, 0x20, 0x0a, + 0x27, 0x0c, 0x95, 0x0e, 0x10, 0x0f, 0x34, 0x0f, 0xba, 0x0e, 0x24, 0x0c, + 0x29, 0x0b, 0xe2, 0x09, 0xad, 0x06, 0x7c, 0x03, 0x46, 0xff, 0xf2, 0xfb, + 0xc0, 0xf9, 0x55, 0xf7, 0x33, 0xf4, 0x5e, 0xf2, 0x04, 0xf2, 0x8b, 0xf1, + 0x6b, 0xf1, 0xf5, 0xf1, 0x27, 0xf3, 0x1f, 0xf6, 0x61, 0xf9, 0xb4, 0xfa, + 0x2a, 0xfb, 0xec, 0xfe, 0x55, 0x02, 0xa1, 0x04, 0x05, 0x05, 0x63, 0x05, + 0x4a, 0x06, 0x3c, 0x08, 0xd5, 0x08, 0x72, 0x07, 0x83, 0x06, 0x79, 0x06, + 0x4d, 0x07, 0xe0, 0x06, 0x6c, 0x06, 0x43, 0x06, 0xe6, 0x06, 0xf9, 0x07, + 0x48, 0x08, 0x77, 0x08, 0x96, 0x09, 0xc6, 0x0a, 0xe1, 0x0b, 0xfb, 0x0b, + 0x24, 0x0b, 0x65, 0x0a, 0xcc, 0x0a, 0x74, 0x0a, 0x03, 0x09, 0x73, 0x06, + 0xe6, 0x03, 0x1f, 0x02, 0xf7, 0x00, 0x17, 0xff, 0x95, 0xfc, 0x63, 0xfa, + 0x90, 0xf9, 0x2c, 0xf9, 0x48, 0xf8, 0xb6, 0xf7, 0x12, 0xf8, 0x5f, 0xf9, + 0x99, 0xfa, 0x8f, 0xfb, 0x60, 0xfc, 0xa0, 0xfd, 0x74, 0xff, 0x75, 0x01, + 0x90, 0x02, 0x85, 0x02, 0x1f, 0x03, 0xb5, 0x03, 0xee, 0x03, 0x9a, 0x04, + 0xe7, 0x03, 0x89, 0x02, 0x77, 0x02, 0x4c, 0x02, 0xcd, 0x01, 0x7f, 0x01, + 0x5d, 0x01, 0xf1, 0x00, 0x44, 0x01, 0x92, 0x01, 0x92, 0x01, 0x7e, 0x02, + 0x58, 0x03, 0x0d, 0x04, 0x68, 0x04, 0x90, 0x04, 0xe9, 0x04, 0x9c, 0x05, + 0x24, 0x06, 0x1f, 0x06, 0x5a, 0x05, 0x90, 0x04, 0x25, 0x04, 0xec, 0x03, + 0x2b, 0x03, 0xd8, 0x01, 0x94, 0x00, 0x6b, 0xff, 0x81, 0xfe, 0x78, 0xfd, + 0x2e, 0xfc, 0x67, 0xfb, 0xa1, 0xfa, 0x33, 0xf9, 0x83, 0xf8, 0xb4, 0xf7, + 0xef, 0xf6, 0x01, 0xf7, 0xf8, 0xf5, 0xf6, 0xf4, 0xc7, 0xf4, 0x26, 0xf4, + 0xea, 0xf3, 0x1a, 0xf3, 0x4f, 0xf2, 0xf6, 0xf1, 0x6b, 0xf2, 0x0c, 0xf3, + 0x03, 0xf3, 0xd5, 0xf2, 0xe3, 0xf3, 0xd9, 0xf5, 0xbf, 0xf7, 0x01, 0xfa, + 0xce, 0xfb, 0x42, 0xfd, 0x70, 0xff, 0xc5, 0x02, 0xe7, 0x04, 0xb4, 0x06, + 0xe8, 0x08, 0x18, 0x09, 0x55, 0x09, 0x0d, 0x0a, 0xca, 0x09, 0x19, 0x0a, + 0x67, 0x09, 0x54, 0x07, 0xbf, 0x04, 0x20, 0x03, 0xbc, 0x02, 0x65, 0x02, + 0xee, 0x00, 0x07, 0xff, 0xa8, 0xfd, 0x7b, 0xfd, 0x05, 0xfe, 0x4e, 0xfe, + 0x48, 0xfe, 0xfc, 0xfd, 0x16, 0xfe, 0xf0, 0xfd, 0xf2, 0xfd, 0xce, 0xfd, + 0xad, 0xfd, 0xb3, 0xfd, 0xe4, 0xfc, 0x8c, 0xfb, 0x96, 0xfa, 0xb2, 0xf9, + 0x72, 0xf9, 0xcf, 0xf9, 0x5d, 0xf9, 0xf5, 0xf8, 0x70, 0xf9, 0x26, 0xfa, + 0xa0, 0xfb, 0xd9, 0xfd, 0xb1, 0xff, 0xb1, 0x01, 0x44, 0x04, 0xb3, 0x06, + 0xa2, 0x08, 0x15, 0x0b, 0x6e, 0x0d, 0x4d, 0x0f, 0x7f, 0x10, 0xe1, 0x10, + 0xc7, 0x10, 0x99, 0x10, 0x37, 0x10, 0x2a, 0x0f, 0x83, 0x0d, 0x90, 0x0b, + 0x3b, 0x09, 0xe0, 0x06, 0x2f, 0x05, 0xc5, 0x03, 0xe8, 0x01, 0xed, 0xff, + 0x9c, 0xfe, 0xe8, 0xfd, 0xa8, 0xfd, 0x6e, 0xfd, 0x0c, 0xfd, 0x1b, 0xfd, + 0x6e, 0xfd, 0x90, 0xfd, 0xa2, 0xfd, 0x12, 0xfe, 0x43, 0xfe, 0xe3, 0xfd, + 0xab, 0xfd, 0x41, 0xfd, 0xcd, 0xfc, 0xb0, 0xfc, 0x35, 0xfc, 0x83, 0xfb, + 0x34, 0xfb, 0x57, 0xfb, 0x57, 0xfb, 0x9d, 0xfb, 0x15, 0xfc, 0xe0, 0xfc, + 0x02, 0xfe, 0xe8, 0xfe, 0x38, 0x00, 0xa0, 0x01, 0x0c, 0x03, 0x81, 0x04, + 0xb4, 0x05, 0xdc, 0x06, 0xff, 0x07, 0xd2, 0x08, 0x3a, 0x09, 0x4b, 0x09, + 0x6a, 0x09, 0x2c, 0x09, 0xad, 0x08, 0x0c, 0x08, 0x46, 0x07, 0xf5, 0x05, + 0x7c, 0x04, 0x4a, 0x03, 0xa8, 0x01, 0x2e, 0x00, 0x39, 0xff, 0xe8, 0xfc, + 0xfd, 0xfa, 0xf1, 0xf9, 0xe4, 0xf7, 0xc3, 0xf6, 0x4f, 0xf5, 0xef, 0xf2, + 0xf2, 0xf1, 0xce, 0xf0, 0x3e, 0xef, 0xfc, 0xed, 0xc0, 0xeb, 0xc5, 0xea, + 0xbf, 0xe9, 0x3a, 0xe9, 0xbc, 0xe9, 0x1d, 0xea, 0x40, 0xeb, 0x5e, 0xec, + 0xfb, 0xed, 0x41, 0xf1, 0x5e, 0xf5, 0xb6, 0xf8, 0xa4, 0xfc, 0xd8, 0x00, + 0xff, 0x04, 0x82, 0x08, 0xcd, 0x0b, 0xd4, 0x0e, 0x26, 0x12, 0x58, 0x14, + 0xb7, 0x14, 0x2e, 0x14, 0x95, 0x13, 0xf3, 0x12, 0xa7, 0x11, 0x1f, 0x0f, + 0x88, 0x0c, 0xca, 0x0a, 0x3a, 0x08, 0xe6, 0x04, 0xd4, 0x01, 0x57, 0x00, + 0xac, 0xff, 0x79, 0xff, 0x1d, 0xfe, 0x8a, 0xfb, 0xa6, 0xfa, 0x17, 0xfb, + 0xaf, 0xfb, 0xb6, 0xfb, 0x37, 0xfb, 0x09, 0xfa, 0xc3, 0xf8, 0xbb, 0xf7, + 0x04, 0xf7, 0xd7, 0xf6, 0x29, 0xf6, 0xf8, 0xf4, 0xe1, 0xf2, 0x8e, 0xf1, + 0x03, 0xf2, 0x2e, 0xf3, 0x5a, 0xf4, 0x7e, 0xf5, 0x7b, 0xf6, 0xf5, 0xf7, + 0x30, 0xfb, 0x54, 0xff, 0x63, 0x03, 0x3f, 0x07, 0x4b, 0x0a, 0x15, 0x0d, + 0x8d, 0x10, 0xe2, 0x13, 0x8b, 0x16, 0x3a, 0x18, 0x94, 0x18, 0xb1, 0x18, + 0xf7, 0x17, 0x58, 0x16, 0xa8, 0x14, 0xc7, 0x12, 0x54, 0x10, 0x4e, 0x0d, + 0xae, 0x09, 0x0e, 0x06, 0xb0, 0x03, 0xcd, 0x01, 0x90, 0xff, 0x75, 0xfd, + 0x7a, 0xfb, 0x9f, 0xfa, 0x31, 0xfa, 0x99, 0xf9, 0x98, 0xf9, 0x20, 0xfa, + 0x78, 0xfa, 0xaa, 0xfa, 0xaa, 0xfa, 0x54, 0xfa, 0xd4, 0xfa, 0xee, 0xfb, + 0x27, 0xfc, 0x22, 0xfb, 0x3e, 0xfa, 0x43, 0xfa, 0x97, 0xfa, 0xd5, 0xfa, + 0xc7, 0xfa, 0xb5, 0xfa, 0x03, 0xfb, 0x98, 0xfb, 0x1f, 0xfc, 0x3e, 0xfd, + 0x05, 0xff, 0xc5, 0x00, 0x02, 0x02, 0xc7, 0x02, 0xe8, 0x03, 0xea, 0x05, + 0x0d, 0x08, 0x2a, 0x09, 0xd2, 0x09, 0x31, 0x0a, 0x10, 0x0a, 0x60, 0x0a, + 0x8a, 0x0a, 0x50, 0x0a, 0xbc, 0x09, 0x1e, 0x08, 0x49, 0x06, 0xac, 0x04, + 0x3e, 0x03, 0x9d, 0x01, 0xe8, 0xff, 0x98, 0xfd, 0x4b, 0xfb, 0x4e, 0xf9, + 0x9c, 0xf7, 0xe6, 0xf5, 0x61, 0xf4, 0x52, 0xf2, 0x1c, 0xf0, 0xf0, 0xee, + 0xa6, 0xed, 0x2a, 0xec, 0x2d, 0xea, 0x8a, 0xe8, 0xee, 0xe6, 0x63, 0xe6, + 0x99, 0xe6, 0x1e, 0xe7, 0xe8, 0xe7, 0x9e, 0xe8, 0x9b, 0xea, 0x88, 0xed, + 0x99, 0xf1, 0x09, 0xf6, 0x1b, 0xfa, 0x66, 0xfe, 0x36, 0x03, 0xd4, 0x06, + 0xc3, 0x0a, 0xd6, 0x0f, 0xb8, 0x13, 0x4d, 0x16, 0x9e, 0x16, 0x0e, 0x16, + 0xc4, 0x16, 0x55, 0x17, 0x2d, 0x16, 0xd3, 0x13, 0xb9, 0x10, 0x42, 0x0d, + 0x05, 0x0b, 0xb9, 0x08, 0x1d, 0x06, 0x35, 0x04, 0x40, 0x02, 0xe3, 0xff, + 0x0f, 0xfe, 0x20, 0xfd, 0xfe, 0xfc, 0x0f, 0xfd, 0x61, 0xfc, 0x40, 0xfb, + 0x50, 0xfa, 0xf4, 0xf9, 0xe1, 0xf9, 0x50, 0xf9, 0x55, 0xf8, 0x5a, 0xf6, + 0xfb, 0xf4, 0x15, 0xf4, 0x6b, 0xf3, 0xf1, 0xf2, 0x20, 0xf2, 0x96, 0xf1, + 0xdd, 0xf1, 0x22, 0xf3, 0xe3, 0xf4, 0x90, 0xf7, 0x7a, 0xf9, 0xa5, 0xfb, + 0x20, 0xff, 0x41, 0x03, 0xf9, 0x06, 0x19, 0x0b, 0x79, 0x0e, 0x07, 0x11, + 0x38, 0x13, 0xfc, 0x14, 0x30, 0x17, 0xe7, 0x18, 0x33, 0x19, 0x60, 0x17, + 0xed, 0x14, 0x69, 0x13, 0x31, 0x12, 0x3e, 0x10, 0x73, 0x0d, 0xbd, 0x09, + 0x31, 0x06, 0xcf, 0x03, 0xbd, 0x01, 0xfa, 0xff, 0x7a, 0xfe, 0xb9, 0xfc, + 0x58, 0xfb, 0x7c, 0xfa, 0x82, 0xfa, 0x86, 0xfa, 0x7f, 0xfa, 0xde, 0xfa, + 0xf8, 0xfa, 0x55, 0xfb, 0x6f, 0xfb, 0x29, 0xfb, 0x18, 0xfb, 0x65, 0xfb, + 0x76, 0xfb, 0xe5, 0xfa, 0x99, 0xfa, 0x19, 0xfa, 0x84, 0xf9, 0x9a, 0xf9, + 0xdb, 0xf9, 0x87, 0xfa, 0x17, 0xfb, 0x59, 0xfb, 0x34, 0xfc, 0xd0, 0xfc, + 0x69, 0xfe, 0xeb, 0x00, 0x9f, 0x02, 0xe7, 0x03, 0x4a, 0x05, 0x14, 0x06, + 0xd3, 0x07, 0xd3, 0x09, 0xa1, 0x0a, 0x2f, 0x0b, 0x79, 0x0b, 0x2f, 0x0b, + 0x93, 0x0a, 0xe0, 0x09, 0xd1, 0x08, 0x1c, 0x08, 0xe7, 0x06, 0x53, 0x04, + 0x81, 0x01, 0x46, 0xff, 0x80, 0xfd, 0x33, 0xfc, 0x43, 0xfa, 0xd1, 0xf7, + 0x3d, 0xf5, 0x2e, 0xf3, 0x04, 0xf1, 0xdd, 0xef, 0x5b, 0xef, 0xdf, 0xed, + 0xfb, 0xeb, 0xb8, 0xe9, 0x0f, 0xe8, 0x57, 0xe7, 0x71, 0xe7, 0x97, 0xe8, + 0x26, 0xe9, 0xbc, 0xe8, 0x3f, 0xe9, 0xff, 0xea, 0xfb, 0xed, 0x51, 0xf3, + 0x87, 0xf7, 0x84, 0xf9, 0xd5, 0xfc, 0x2c, 0x01, 0xb2, 0x05, 0x78, 0x0a, + 0x8c, 0x0e, 0xfa, 0x10, 0x4d, 0x13, 0xbd, 0x14, 0x04, 0x15, 0xba, 0x15, + 0x21, 0x16, 0xa7, 0x15, 0xc2, 0x13, 0xd7, 0x10, 0x67, 0x0e, 0x55, 0x0c, + 0x3b, 0x0a, 0x38, 0x08, 0xd3, 0x05, 0x7b, 0x03, 0x8b, 0x01, 0xf6, 0xff, + 0xd3, 0xfe, 0xf4, 0xfd, 0x4c, 0xfd, 0x90, 0xfc, 0x34, 0xfc, 0x48, 0xfb, + 0xf7, 0xf9, 0x63, 0xf9, 0x64, 0xf9, 0xcd, 0xf8, 0x91, 0xf7, 0xf6, 0xf5, + 0xdf, 0xf4, 0xb1, 0xf4, 0x0b, 0xf4, 0x49, 0xf3, 0x46, 0xf3, 0x03, 0xf4, + 0xde, 0xf4, 0x67, 0xf5, 0x98, 0xf6, 0x07, 0xf9, 0x4f, 0xfc, 0x56, 0xff, + 0x06, 0x02, 0x8c, 0x04, 0xab, 0x07, 0x4f, 0x0b, 0xb3, 0x0e, 0x82, 0x11, + 0x13, 0x13, 0x2f, 0x14, 0x7c, 0x15, 0x38, 0x16, 0x3f, 0x16, 0x77, 0x15, + 0xd0, 0x13, 0x29, 0x12, 0x8b, 0x10, 0xd5, 0x0d, 0xde, 0x0a, 0x63, 0x08, + 0x6f, 0x06, 0x8f, 0x04, 0xa1, 0x01, 0x26, 0xff, 0xbf, 0xfd, 0x27, 0xfd, + 0x61, 0xfc, 0x56, 0xfb, 0xc2, 0xfa, 0x73, 0xfa, 0xfa, 0xfa, 0x39, 0xfb, + 0xcd, 0xfa, 0x22, 0xfb, 0x96, 0xfb, 0x5f, 0xfb, 0x77, 0xfb, 0x29, 0xfb, + 0xbe, 0xfa, 0xf3, 0xfa, 0x9f, 0xfa, 0x1a, 0xfa, 0xe5, 0xf9, 0xab, 0xf9, + 0xe2, 0xf9, 0x67, 0xfa, 0x5c, 0xfa, 0xdc, 0xfa, 0x1a, 0xfc, 0x57, 0xfd, + 0xc6, 0xfe, 0x11, 0x00, 0x37, 0x01, 0x05, 0x03, 0x1e, 0x05, 0xe0, 0x06, + 0x45, 0x08, 0x10, 0x09, 0x0b, 0x0a, 0xff, 0x0a, 0x59, 0x0b, 0xaf, 0x0b, + 0x54, 0x0b, 0x51, 0x0a, 0x13, 0x09, 0x48, 0x07, 0x86, 0x05, 0xbe, 0x03, + 0x00, 0x02, 0x27, 0x00, 0x1b, 0xfd, 0xca, 0xf9, 0xf2, 0xf7, 0x8c, 0xf6, + 0x61, 0xf4, 0xf8, 0xf2, 0x70, 0xf0, 0x80, 0xed, 0xe4, 0xec, 0xb2, 0xeb, + 0x8a, 0xea, 0xc4, 0xe9, 0xfb, 0xe7, 0xd5, 0xe6, 0x6f, 0xe7, 0xad, 0xe8, + 0xd8, 0xe9, 0x8c, 0xeb, 0x7d, 0xec, 0x7c, 0xee, 0x51, 0xf2, 0xaf, 0xf5, + 0x3d, 0xfa, 0x37, 0xfe, 0x0d, 0x01, 0xcc, 0x04, 0x90, 0x08, 0xdc, 0x0b, + 0x40, 0x0f, 0x29, 0x12, 0x60, 0x13, 0xdb, 0x13, 0xb9, 0x13, 0x9f, 0x13, + 0x64, 0x13, 0x79, 0x12, 0xe4, 0x10, 0x94, 0x0e, 0xc1, 0x0b, 0xab, 0x09, + 0x2b, 0x08, 0x85, 0x06, 0x11, 0x05, 0x12, 0x03, 0x21, 0x01, 0x5c, 0x00, + 0xca, 0xff, 0xaf, 0xfe, 0xcf, 0xfd, 0x85, 0xfd, 0x60, 0xfd, 0xdd, 0xfc, + 0xb6, 0xfb, 0x23, 0xfa, 0x25, 0xf9, 0xef, 0xf8, 0xb9, 0xf8, 0xeb, 0xf7, + 0x0e, 0xf6, 0x7c, 0xf4, 0xd6, 0xf3, 0x06, 0xf4, 0xe6, 0xf4, 0x86, 0xf5, + 0xea, 0xf5, 0xfc, 0xf6, 0x23, 0xf8, 0xb1, 0xf9, 0x8d, 0xfc, 0x9b, 0x00, + 0x53, 0x04, 0x87, 0x06, 0xf1, 0x07, 0xf4, 0x09, 0x86, 0x0d, 0x4d, 0x11, + 0x7e, 0x13, 0x28, 0x14, 0xd2, 0x13, 0x70, 0x13, 0x84, 0x13, 0x36, 0x13, + 0x96, 0x12, 0x2b, 0x11, 0xb3, 0x0e, 0xb0, 0x0b, 0xe6, 0x08, 0xec, 0x06, + 0x92, 0x05, 0x23, 0x04, 0x26, 0x02, 0xb6, 0xff, 0xa8, 0xfd, 0xad, 0xfc, + 0x81, 0xfc, 0xc3, 0xfc, 0x8a, 0xfc, 0xe9, 0xfb, 0x66, 0xfb, 0x7d, 0xfb, + 0x98, 0xfb, 0xa4, 0xfb, 0x44, 0xfc, 0x73, 0xfc, 0xd5, 0xfb, 0x2a, 0xfb, + 0x7d, 0xfa, 0x10, 0xfa, 0x6f, 0xfa, 0x6d, 0xfa, 0xe9, 0xf9, 0x78, 0xf9, + 0x0a, 0xf9, 0x67, 0xf9, 0x2e, 0xfa, 0xe5, 0xfa, 0x12, 0xfc, 0x4e, 0xfd, + 0x7d, 0xfe, 0xd7, 0xff, 0x58, 0x01, 0xf4, 0x02, 0x36, 0x05, 0x6c, 0x07, + 0x1e, 0x08, 0xd5, 0x08, 0x2e, 0x0a, 0xd2, 0x0a, 0x13, 0x0b, 0x43, 0x0b, + 0x9d, 0x0a, 0x8c, 0x09, 0x5a, 0x08, 0x5d, 0x06, 0x32, 0x04, 0xdf, 0x02, + 0xf8, 0x00, 0x9e, 0xfe, 0x23, 0xfc, 0x7f, 0xf9, 0x4f, 0xf7, 0x37, 0xf5, + 0xce, 0xf3, 0xf4, 0xf1, 0x08, 0xf0, 0x6d, 0xee, 0x72, 0xec, 0x42, 0xeb, + 0xf1, 0xe9, 0xb4, 0xe8, 0xd8, 0xe8, 0xc6, 0xe8, 0x32, 0xe9, 0x61, 0xe9, + 0xda, 0xe9, 0x40, 0xec, 0xfb, 0xee, 0x86, 0xf1, 0xdd, 0xf4, 0x24, 0xf8, + 0x13, 0xfb, 0x74, 0xfe, 0x46, 0x02, 0x33, 0x06, 0x1b, 0x0a, 0xd9, 0x0c, + 0x3c, 0x0e, 0xc2, 0x0f, 0x70, 0x11, 0xb2, 0x12, 0x19, 0x13, 0x5c, 0x12, + 0x35, 0x11, 0x15, 0x10, 0x9f, 0x0e, 0x0b, 0x0d, 0x4f, 0x0b, 0xa5, 0x09, + 0x2c, 0x08, 0x3c, 0x06, 0x43, 0x04, 0x28, 0x03, 0x87, 0x02, 0xdb, 0x01, + 0xd8, 0x00, 0x34, 0xff, 0x20, 0xfe, 0x31, 0xfe, 0x53, 0xfe, 0x97, 0xfd, + 0xf4, 0xfb, 0x89, 0xfa, 0xc3, 0xf9, 0x6f, 0xf9, 0xd2, 0xf8, 0x1f, 0xf8, + 0xd5, 0xf6, 0xd4, 0xf5, 0x1d, 0xf5, 0x25, 0xf5, 0x66, 0xf6, 0xf2, 0xf6, + 0x87, 0xf7, 0x0a, 0xf8, 0x26, 0xf9, 0xad, 0xfb, 0xaa, 0xfe, 0x5a, 0x01, + 0x75, 0x03, 0x69, 0x05, 0xd2, 0x07, 0x68, 0x0a, 0xe2, 0x0c, 0x27, 0x0f, + 0xae, 0x10, 0x55, 0x11, 0x8f, 0x11, 0x94, 0x11, 0x97, 0x11, 0x78, 0x11, + 0x79, 0x10, 0x7d, 0x0e, 0x78, 0x0c, 0xf1, 0x0a, 0x19, 0x09, 0x43, 0x07, + 0x71, 0x05, 0x80, 0x03, 0xdf, 0x01, 0x76, 0x00, 0x2f, 0xff, 0x17, 0xfe, + 0xa3, 0xfd, 0x22, 0xfd, 0x6d, 0xfc, 0x56, 0xfc, 0x54, 0xfc, 0x66, 0xfc, + 0xdb, 0xfb, 0x64, 0xfb, 0xd0, 0xfb, 0xfe, 0xfb, 0xa1, 0xfb, 0x02, 0xfb, + 0x24, 0xfa, 0xf0, 0xf9, 0x1b, 0xfa, 0x0f, 0xfa, 0x8c, 0xf9, 0x22, 0xf9, + 0x5f, 0xf9, 0xb3, 0xf9, 0x2a, 0xfa, 0x0c, 0xfb, 0x47, 0xfc, 0x58, 0xfd, + 0x97, 0xfe, 0xe1, 0xff, 0x47, 0x01, 0x55, 0x03, 0x52, 0x05, 0x92, 0x06, + 0x72, 0x07, 0x80, 0x08, 0x8c, 0x09, 0x5a, 0x0a, 0xdd, 0x0a, 0x5f, 0x0a, + 0x5b, 0x09, 0x21, 0x08, 0x5d, 0x07, 0x4b, 0x06, 0x19, 0x04, 0x1f, 0x02, + 0xff, 0xff, 0xbf, 0xfd, 0xd6, 0xfb, 0x4f, 0xf9, 0x5f, 0xf7, 0xd5, 0xf5, + 0xae, 0xf3, 0x77, 0xf1, 0x9b, 0xef, 0x3a, 0xee, 0x6c, 0xed, 0xf1, 0xeb, + 0x33, 0xea, 0xe6, 0xe8, 0x03, 0xe9, 0x9b, 0xe9, 0x89, 0xea, 0x9a, 0xeb, + 0x9d, 0xeb, 0x00, 0xed, 0xef, 0xef, 0x88, 0xf3, 0x68, 0xf7, 0xda, 0xf9, + 0xc8, 0xfb, 0x2b, 0xff, 0x33, 0x03, 0xe3, 0x06, 0xbb, 0x0a, 0xc6, 0x0c, + 0x67, 0x0d, 0xce, 0x0e, 0x02, 0x10, 0x84, 0x11, 0x64, 0x12, 0xa0, 0x11, + 0xd8, 0x0f, 0x0e, 0x0e, 0x01, 0x0d, 0xaf, 0x0c, 0xdc, 0x0b, 0xbe, 0x09, + 0x27, 0x07, 0x29, 0x05, 0x47, 0x04, 0x40, 0x04, 0x8f, 0x03, 0xdd, 0x01, + 0xa8, 0x00, 0x88, 0xff, 0xcc, 0xfe, 0xb5, 0xfe, 0xa4, 0xfe, 0x3b, 0xfe, + 0x93, 0xfc, 0xaa, 0xfa, 0xcd, 0xf9, 0xf5, 0xf9, 0xcf, 0xf9, 0x06, 0xf9, + 0x6a, 0xf7, 0x80, 0xf6, 0x74, 0xf6, 0x86, 0xf6, 0xff, 0xf6, 0xb4, 0xf7, + 0x44, 0xf8, 0x98, 0xf9, 0xce, 0xfa, 0xd2, 0xfb, 0x5b, 0xfe, 0xfc, 0x00, + 0x45, 0x03, 0x94, 0x05, 0x32, 0x07, 0x1d, 0x09, 0x9d, 0x0b, 0x42, 0x0d, + 0x72, 0x0e, 0x66, 0x0f, 0x23, 0x10, 0x81, 0x10, 0x0b, 0x10, 0x03, 0x0f, + 0x1b, 0x0e, 0x7a, 0x0d, 0x55, 0x0c, 0xc9, 0x0a, 0x9b, 0x08, 0x96, 0x06, + 0x18, 0x05, 0xb7, 0x03, 0x79, 0x02, 0x35, 0x01, 0xe1, 0xff, 0xb7, 0xfe, + 0xad, 0xfd, 0xf5, 0xfc, 0x0d, 0xfd, 0x27, 0xfd, 0xb2, 0xfc, 0xf9, 0xfb, + 0x76, 0xfb, 0x98, 0xfb, 0x0a, 0xfc, 0xf8, 0xfb, 0x3b, 0xfb, 0xd0, 0xfa, + 0xbc, 0xfa, 0x56, 0xfa, 0x1e, 0xfa, 0x01, 0xfa, 0xe7, 0xf9, 0xbe, 0xf9, + 0xba, 0xf9, 0x05, 0xfa, 0x95, 0xfa, 0x5a, 0xfb, 0x28, 0xfc, 0x23, 0xfd, + 0x5a, 0xfe, 0x02, 0x00, 0xc9, 0x01, 0xf1, 0x02, 0x27, 0x04, 0xc6, 0x05, + 0x72, 0x07, 0xeb, 0x08, 0xe7, 0x09, 0x0c, 0x0a, 0x06, 0x0a, 0x15, 0x0a, + 0xc5, 0x09, 0x39, 0x09, 0xc8, 0x07, 0x3b, 0x06, 0x0c, 0x04, 0xfe, 0x01, + 0x7e, 0x00, 0x51, 0xfe, 0x15, 0xfc, 0xb9, 0xf9, 0x08, 0xf7, 0x22, 0xf5, + 0x95, 0xf3, 0xc3, 0xf1, 0x14, 0xf0, 0x5f, 0xee, 0x8a, 0xec, 0x42, 0xeb, + 0x93, 0xea, 0xd0, 0xe9, 0x08, 0xea, 0x63, 0xea, 0xb9, 0xea, 0x8d, 0xeb, + 0xca, 0xec, 0x0d, 0xef, 0xe6, 0xf1, 0x88, 0xf4, 0x42, 0xf7, 0x35, 0xfa, + 0x1d, 0xfd, 0x79, 0x00, 0x9e, 0x03, 0x6d, 0x06, 0x3c, 0x09, 0xb6, 0x0b, + 0x19, 0x0d, 0x32, 0x0e, 0xdc, 0x0e, 0x26, 0x0f, 0xf6, 0x0f, 0x19, 0x10, + 0x76, 0x0f, 0x9e, 0x0d, 0x79, 0x0b, 0xd3, 0x0a, 0xdb, 0x0a, 0xf5, 0x09, + 0x15, 0x08, 0x29, 0x06, 0xd2, 0x04, 0x22, 0x04, 0xdc, 0x03, 0x01, 0x03, + 0x17, 0x02, 0xf7, 0x00, 0x07, 0x00, 0x56, 0xff, 0x52, 0xfe, 0xca, 0xfd, + 0x57, 0xfd, 0x4b, 0xfc, 0xe8, 0xfa, 0xa3, 0xf9, 0x0a, 0xf9, 0xcc, 0xf8, + 0x3d, 0xf8, 0x37, 0xf7, 0xe6, 0xf6, 0x44, 0xf7, 0x92, 0xf7, 0x15, 0xf8, + 0x7c, 0xf8, 0xc0, 0xf9, 0x9e, 0xfb, 0x29, 0xfd, 0xd5, 0xfe, 0xb7, 0x00, + 0xbc, 0x02, 0x0b, 0x05, 0xe4, 0x06, 0x9b, 0x08, 0xde, 0x0a, 0x9d, 0x0c, + 0x41, 0x0d, 0xfa, 0x0d, 0x91, 0x0e, 0xf3, 0x0e, 0x52, 0x0f, 0xd5, 0x0e, + 0xa8, 0x0d, 0x9d, 0x0c, 0x31, 0x0b, 0xed, 0x09, 0x1d, 0x09, 0x90, 0x07, + 0xcd, 0x05, 0xfb, 0x03, 0x52, 0x02, 0x7f, 0x01, 0xa5, 0x00, 0xad, 0xff, + 0xd3, 0xfe, 0xd2, 0xfd, 0x56, 0xfd, 0xed, 0xfc, 0x9d, 0xfc, 0xb1, 0xfc, + 0x90, 0xfc, 0x18, 0xfc, 0x97, 0xfb, 0x29, 0xfb, 0x22, 0xfb, 0x57, 0xfb, + 0xf2, 0xfa, 0x4f, 0xfa, 0xc3, 0xf9, 0x6b, 0xf9, 0x89, 0xf9, 0xc4, 0xf9, + 0xd5, 0xf9, 0xe1, 0xf9, 0x07, 0xfa, 0xc5, 0xfa, 0xfe, 0xfb, 0x0d, 0xfd, + 0x2b, 0xfe, 0xc7, 0xff, 0x11, 0x01, 0x6c, 0x02, 0x2d, 0x04, 0xd9, 0x05, + 0x5a, 0x07, 0x7b, 0x08, 0x28, 0x09, 0xd0, 0x09, 0x4e, 0x0a, 0x5b, 0x0a, + 0xf7, 0x09, 0x17, 0x09, 0xc5, 0x07, 0x34, 0x06, 0x71, 0x04, 0xb1, 0x02, + 0x09, 0x01, 0x7a, 0xfe, 0xcd, 0xfb, 0xab, 0xf9, 0xd9, 0xf7, 0x9e, 0xf5, + 0xe4, 0xf3, 0xae, 0xf1, 0xce, 0xef, 0x56, 0xee, 0xa6, 0xec, 0x5f, 0xeb, + 0x17, 0xeb, 0xe5, 0xea, 0x3a, 0xea, 0x54, 0xea, 0x7e, 0xeb, 0xc3, 0xec, + 0x51, 0xee, 0x4e, 0xf0, 0x6e, 0xf2, 0x28, 0xf5, 0xf2, 0xf7, 0xe4, 0xfa, + 0xf3, 0xfd, 0xa8, 0x00, 0x18, 0x03, 0x40, 0x06, 0x6c, 0x08, 0x41, 0x0a, + 0xdc, 0x0b, 0xc4, 0x0c, 0x58, 0x0d, 0xdb, 0x0d, 0xf9, 0x0d, 0xd2, 0x0d, + 0x76, 0x0d, 0x49, 0x0c, 0x00, 0x0b, 0x27, 0x0a, 0x9d, 0x09, 0x42, 0x09, + 0x21, 0x08, 0x87, 0x06, 0x93, 0x05, 0x1a, 0x05, 0xc4, 0x04, 0x58, 0x04, + 0x46, 0x03, 0x73, 0x02, 0xda, 0x01, 0xf2, 0x00, 0x08, 0x00, 0x5d, 0xff, + 0x80, 0xfe, 0x61, 0xfd, 0x1a, 0xfc, 0xe6, 0xfa, 0x10, 0xfa, 0x2f, 0xf9, + 0x1d, 0xf8, 0x94, 0xf7, 0x64, 0xf7, 0x4b, 0xf7, 0x78, 0xf7, 0x81, 0xf7, + 0xfd, 0xf7, 0x7f, 0xf9, 0x36, 0xfb, 0xd3, 0xfc, 0x40, 0xfe, 0xc7, 0xff, + 0x1c, 0x02, 0x51, 0x04, 0x44, 0x06, 0x6a, 0x08, 0x1e, 0x0a, 0x69, 0x0b, + 0x7a, 0x0c, 0x33, 0x0d, 0x0e, 0x0e, 0xbb, 0x0e, 0xb9, 0x0e, 0x06, 0x0e, + 0xad, 0x0c, 0xc1, 0x0b, 0x52, 0x0b, 0x4e, 0x0a, 0xd1, 0x08, 0xc6, 0x06, + 0x1b, 0x05, 0x2d, 0x04, 0x1d, 0x03, 0x0c, 0x02, 0xd2, 0x00, 0xe4, 0xff, + 0x44, 0xff, 0x93, 0xfe, 0x16, 0xfe, 0x04, 0xfe, 0xfe, 0xfd, 0x8a, 0xfd, + 0xe3, 0xfc, 0x8d, 0xfc, 0xab, 0xfc, 0x9a, 0xfc, 0xf2, 0xfb, 0x40, 0xfb, + 0xd6, 0xfa, 0x84, 0xfa, 0x15, 0xfa, 0xa0, 0xf9, 0x50, 0xf9, 0x2d, 0xf9, + 0x17, 0xf9, 0x0c, 0xf9, 0x8a, 0xf9, 0x51, 0xfa, 0x28, 0xfb, 0x07, 0xfc, + 0x1c, 0xfd, 0x91, 0xfe, 0x2c, 0x00, 0xc2, 0x01, 0x26, 0x03, 0xad, 0x04, + 0x14, 0x06, 0x4b, 0x07, 0x7b, 0x08, 0x1f, 0x09, 0x48, 0x09, 0x30, 0x09, + 0xe8, 0x08, 0x69, 0x08, 0x66, 0x07, 0xca, 0x05, 0x4d, 0x04, 0xa6, 0x02, + 0xba, 0x00, 0x9d, 0xfe, 0x6c, 0xfc, 0x57, 0xfa, 0x4f, 0xf8, 0x65, 0xf6, + 0x5b, 0xf4, 0x1f, 0xf2, 0x93, 0xf0, 0x2c, 0xef, 0xd6, 0xed, 0x98, 0xec, + 0x91, 0xeb, 0xff, 0xea, 0x65, 0xeb, 0x27, 0xec, 0x83, 0xec, 0x8b, 0xed, + 0xec, 0xee, 0xff, 0xf0, 0xa7, 0xf3, 0xfa, 0xf5, 0x89, 0xf8, 0x2c, 0xfb, + 0xb5, 0xfd, 0x88, 0x00, 0x2c, 0x03, 0x5e, 0x05, 0x60, 0x07, 0x0b, 0x09, + 0x03, 0x0a, 0x12, 0x0b, 0xc9, 0x0b, 0x1c, 0x0c, 0x55, 0x0c, 0xec, 0x0b, + 0x17, 0x0b, 0xcd, 0x0a, 0x62, 0x0a, 0x9f, 0x09, 0x22, 0x09, 0x4a, 0x08, + 0x91, 0x07, 0x1d, 0x07, 0xa5, 0x06, 0x4b, 0x06, 0xfa, 0x05, 0x46, 0x05, + 0xac, 0x04, 0x38, 0x04, 0xa3, 0x03, 0x25, 0x03, 0x56, 0x02, 0x2f, 0x01, + 0x4c, 0x00, 0x22, 0xff, 0xdf, 0xfd, 0xd9, 0xfc, 0xd4, 0xfb, 0xbc, 0xfa, + 0x97, 0xf9, 0x93, 0xf8, 0xfb, 0xf7, 0xd5, 0xf7, 0xd8, 0xf7, 0x15, 0xf8, + 0x71, 0xf8, 0x07, 0xf9, 0x52, 0xfa, 0xf4, 0xfb, 0x5e, 0xfd, 0xfc, 0xfe, + 0xe7, 0x00, 0xe3, 0x02, 0xc5, 0x04, 0x70, 0x06, 0xf4, 0x07, 0x5c, 0x09, + 0xbe, 0x0a, 0xe3, 0x0b, 0x5e, 0x0c, 0x5f, 0x0c, 0x2e, 0x0c, 0x17, 0x0c, + 0xe7, 0x0b, 0x2c, 0x0b, 0x11, 0x0a, 0xd4, 0x08, 0xb3, 0x07, 0xa7, 0x06, + 0x92, 0x05, 0x93, 0x04, 0xb1, 0x03, 0xdb, 0x02, 0xb7, 0x01, 0xf4, 0x00, + 0xb3, 0x00, 0x7d, 0x00, 0x24, 0x00, 0xa3, 0xff, 0x2f, 0xff, 0xf3, 0xfe, + 0xc5, 0xfe, 0x5a, 0xfe, 0xd4, 0xfd, 0x49, 0xfd, 0xdf, 0xfc, 0x35, 0xfc, + 0x52, 0xfb, 0x8c, 0xfa, 0xfe, 0xf9, 0x94, 0xf9, 0x31, 0xf9, 0xce, 0xf8, + 0xa5, 0xf8, 0xbf, 0xf8, 0xe5, 0xf8, 0x5e, 0xf9, 0x59, 0xfa, 0x87, 0xfb, + 0xaf, 0xfc, 0xc5, 0xfd, 0xf3, 0xfe, 0x79, 0x00, 0x2a, 0x02, 0xdf, 0x03, + 0x2a, 0x05, 0x14, 0x06, 0xdf, 0x06, 0x68, 0x07, 0xc9, 0x07, 0x1e, 0x08, + 0xf4, 0x07, 0x2d, 0x07, 0xe3, 0x05, 0x84, 0x04, 0x5f, 0x03, 0x11, 0x02, + 0x5b, 0x00, 0x74, 0xfe, 0x62, 0xfc, 0x2f, 0xfa, 0xc4, 0xf8, 0x5a, 0xf7, + 0x73, 0xf5, 0xf3, 0xf3, 0x3f, 0xf2, 0x92, 0xf0, 0x6e, 0xef, 0xa7, 0xee, + 0x0c, 0xee, 0xdf, 0xed, 0x9a, 0xed, 0x81, 0xed, 0x25, 0xee, 0x1e, 0xef, + 0xaf, 0xf0, 0x9b, 0xf2, 0x42, 0xf4, 0x0e, 0xf6, 0x47, 0xf8, 0xa5, 0xfa, + 0x42, 0xfd, 0xfe, 0xff, 0x01, 0x02, 0xcb, 0x03, 0xba, 0x05, 0x28, 0x07, + 0xa5, 0x08, 0xdf, 0x09, 0x94, 0x0a, 0xcf, 0x0a, 0x82, 0x0a, 0x46, 0x0a, + 0x5e, 0x0a, 0x7e, 0x0a, 0xf4, 0x09, 0xf3, 0x08, 0xfb, 0x07, 0x65, 0x07, + 0x3a, 0x07, 0x4c, 0x07, 0xfd, 0x06, 0x2a, 0x06, 0x0d, 0x05, 0xc8, 0x04, + 0x22, 0x05, 0xe8, 0x04, 0x6c, 0x04, 0x9c, 0x03, 0xd8, 0x02, 0x2b, 0x02, + 0x51, 0x01, 0x6b, 0x00, 0xbf, 0xff, 0xe5, 0xfe, 0xb4, 0xfd, 0x63, 0xfc, + 0x0d, 0xfb, 0x55, 0xfa, 0x45, 0xfa, 0xc8, 0xf9, 0x38, 0xf9, 0xe4, 0xf8, + 0x13, 0xf9, 0xce, 0xf9, 0x9d, 0xfa, 0x9d, 0xfb, 0xe8, 0xfc, 0x55, 0xfe, + 0xec, 0xff, 0x91, 0x01, 0x00, 0x03, 0xa6, 0x04, 0x69, 0x06, 0xf4, 0x07, + 0x4d, 0x09, 0x0b, 0x0a, 0x7b, 0x0a, 0x04, 0x0b, 0x55, 0x0b, 0x4f, 0x0b, + 0x24, 0x0b, 0x72, 0x0a, 0x8c, 0x09, 0x9f, 0x08, 0x9a, 0x07, 0xb9, 0x06, + 0xdc, 0x05, 0xf3, 0x04, 0xfe, 0x03, 0xd5, 0x02, 0xf9, 0x01, 0x95, 0x01, + 0x2d, 0x01, 0xe1, 0x00, 0x7f, 0x00, 0xd4, 0xff, 0x6a, 0xff, 0x63, 0xff, + 0x2d, 0xff, 0xf4, 0xfe, 0x7e, 0xfe, 0xb8, 0xfd, 0x24, 0xfd, 0x8f, 0xfc, + 0xde, 0xfb, 0x72, 0xfb, 0xc6, 0xfa, 0xd6, 0xf9, 0x35, 0xf9, 0xd8, 0xf8, + 0xc2, 0xf8, 0xcc, 0xf8, 0xec, 0xf8, 0x31, 0xf9, 0xae, 0xf9, 0x95, 0xfa, + 0xa7, 0xfb, 0x00, 0xfd, 0x64, 0xfe, 0xa5, 0xff, 0x08, 0x01, 0x74, 0x02, + 0xec, 0x03, 0x2b, 0x05, 0x0f, 0x06, 0xb7, 0x06, 0xe4, 0x06, 0xdf, 0x06, + 0xdd, 0x06, 0x21, 0x06, 0x25, 0x05, 0x28, 0x04, 0xa9, 0x02, 0x36, 0x01, + 0x83, 0xff, 0xb6, 0xfd, 0x24, 0xfc, 0x85, 0xfa, 0xf8, 0xf8, 0x29, 0xf7, + 0x55, 0xf5, 0xe2, 0xf3, 0xb6, 0xf2, 0x7f, 0xf1, 0x8a, 0xf0, 0xa6, 0xef, + 0x15, 0xef, 0xfb, 0xee, 0xfc, 0xee, 0x9a, 0xef, 0x7e, 0xf0, 0x2d, 0xf1, + 0x89, 0xf2, 0x2c, 0xf4, 0xcd, 0xf5, 0xd1, 0xf7, 0xf0, 0xf9, 0xe8, 0xfb, + 0x02, 0xfe, 0xd8, 0xff, 0x80, 0x01, 0x7d, 0x03, 0x16, 0x05, 0x5c, 0x06, + 0x54, 0x07, 0x88, 0x07, 0xdb, 0x07, 0xb1, 0x08, 0x19, 0x09, 0x11, 0x09, + 0x92, 0x08, 0xcc, 0x07, 0x9e, 0x07, 0xeb, 0x07, 0xde, 0x07, 0xa7, 0x07, + 0xfe, 0x06, 0x69, 0x06, 0x7d, 0x06, 0xb0, 0x06, 0xb7, 0x06, 0x72, 0x06, + 0xc4, 0x05, 0x5e, 0x05, 0x43, 0x05, 0xd1, 0x04, 0x1c, 0x04, 0x58, 0x03, + 0x80, 0x02, 0x94, 0x01, 0x74, 0x00, 0x44, 0xff, 0x84, 0xfe, 0xb6, 0xfd, + 0x72, 0xfc, 0x49, 0xfb, 0xae, 0xfa, 0x81, 0xfa, 0x60, 0xfa, 0x25, 0xfa, + 0xfd, 0xf9, 0x52, 0xfa, 0x49, 0xfb, 0x6a, 0xfc, 0x84, 0xfd, 0x66, 0xfe, + 0x9a, 0xff, 0x26, 0x01, 0x96, 0x02, 0xe3, 0x03, 0x41, 0x05, 0x8d, 0x06, + 0x79, 0x07, 0x20, 0x08, 0x8c, 0x08, 0x2f, 0x09, 0xc8, 0x09, 0xbf, 0x09, + 0x40, 0x09, 0xbd, 0x08, 0x66, 0x08, 0x0e, 0x08, 0x6b, 0x07, 0x98, 0x06, + 0xe7, 0x05, 0x37, 0x05, 0x60, 0x04, 0xb4, 0x03, 0x2c, 0x03, 0xdf, 0x02, + 0x5c, 0x02, 0x9c, 0x01, 0x10, 0x01, 0x9e, 0x00, 0x66, 0x00, 0x1f, 0x00, + 0x76, 0xff, 0xbe, 0xfe, 0x1e, 0xfe, 0x80, 0xfd, 0x09, 0xfd, 0x63, 0xfc, + 0xa2, 0xfb, 0xdc, 0xfa, 0x11, 0xfa, 0x94, 0xf9, 0x65, 0xf9, 0x2c, 0xf9, + 0xd6, 0xf8, 0xc4, 0xf8, 0x0c, 0xf9, 0x93, 0xf9, 0x54, 0xfa, 0x26, 0xfb, + 0x1e, 0xfc, 0x38, 0xfd, 0x52, 0xfe, 0x95, 0xff, 0xee, 0x00, 0x42, 0x02, + 0x5e, 0x03, 0x2a, 0x04, 0xd5, 0x04, 0x62, 0x05, 0xd5, 0x05, 0xd1, 0x05, + 0x57, 0x05, 0xa4, 0x04, 0xe4, 0x03, 0xe6, 0x02, 0xdf, 0x01, 0x35, 0x00, + 0xa2, 0xfe, 0xa0, 0xfd, 0x09, 0xfc, 0x51, 0xfa, 0xe3, 0xf8, 0x5f, 0xf7, + 0x2c, 0xf6, 0x26, 0xf5, 0x58, 0xf3, 0x3c, 0xf2, 0xaf, 0xf1, 0xc9, 0xf0, + 0x83, 0xf0, 0x81, 0xf0, 0x6b, 0xf0, 0x20, 0xf1, 0xc4, 0xf1, 0x7a, 0xf2, + 0xb8, 0xf3, 0x89, 0xf5, 0x65, 0xf7, 0x09, 0xf9, 0xcd, 0xfa, 0x6f, 0xfc, + 0x4c, 0xfe, 0x6a, 0x00, 0x42, 0x02, 0xa6, 0x03, 0xe3, 0x04, 0xce, 0x05, + 0x54, 0x06, 0xf9, 0x06, 0xa9, 0x07, 0x11, 0x08, 0x16, 0x08, 0x83, 0x07, + 0x2e, 0x07, 0x30, 0x07, 0x36, 0x07, 0x3e, 0x07, 0x0b, 0x07, 0x92, 0x06, + 0x85, 0x06, 0x90, 0x06, 0x81, 0x06, 0xa1, 0x06, 0xba, 0x06, 0xb0, 0x06, + 0x77, 0x06, 0xea, 0x05, 0x72, 0x05, 0x6a, 0x05, 0x22, 0x05, 0x60, 0x04, + 0x26, 0x03, 0x11, 0x02, 0x49, 0x01, 0x55, 0x00, 0x39, 0xff, 0x4a, 0xfe, + 0x9b, 0xfd, 0xaa, 0xfc, 0xa3, 0xfb, 0xf4, 0xfa, 0x85, 0xfa, 0xec, 0xfa, + 0x8c, 0xfb, 0xa5, 0xfb, 0xbc, 0xfb, 0x1f, 0xfc, 0x36, 0xfd, 0xc3, 0xfe, + 0x1b, 0x00, 0x47, 0x01, 0x44, 0x02, 0x1e, 0x03, 0x3d, 0x04, 0x61, 0x05, + 0x47, 0x06, 0x37, 0x07, 0xe1, 0x07, 0xf6, 0x07, 0xc2, 0x07, 0x8d, 0x07, + 0xac, 0x07, 0xf7, 0x07, 0xac, 0x07, 0xeb, 0x06, 0x27, 0x06, 0x75, 0x05, + 0x08, 0x05, 0xdb, 0x04, 0x88, 0x04, 0x07, 0x04, 0x70, 0x03, 0xea, 0x02, + 0x60, 0x02, 0xff, 0x01, 0xf9, 0x01, 0xd1, 0x01, 0x47, 0x01, 0x92, 0x00, + 0xdb, 0xff, 0x1d, 0xff, 0xbe, 0xfe, 0x43, 0xfe, 0x8e, 0xfd, 0x8d, 0xfc, + 0xa2, 0xfb, 0xc6, 0xfa, 0x2d, 0xfa, 0x9d, 0xf9, 0x43, 0xf9, 0x38, 0xf9, + 0x0a, 0xf9, 0xdd, 0xf8, 0xfe, 0xf8, 0x7e, 0xf9, 0x64, 0xfa, 0x9e, 0xfb, + 0x98, 0xfc, 0x82, 0xfd, 0x80, 0xfe, 0x9b, 0xff, 0xe2, 0x00, 0x31, 0x02, + 0x63, 0x03, 0xf2, 0x03, 0x35, 0x04, 0x3e, 0x04, 0x53, 0x04, 0x6d, 0x04, + 0x4c, 0x04, 0xa9, 0x03, 0x6e, 0x02, 0x12, 0x01, 0x2a, 0x00, 0x54, 0xff, + 0x43, 0xfe, 0xf8, 0xfc, 0x30, 0xfb, 0xe8, 0xf9, 0xcc, 0xf8, 0xaf, 0xf7, + 0x6f, 0xf6, 0x5e, 0xf5, 0x0c, 0xf4, 0xf5, 0xf2, 0x77, 0xf2, 0x0c, 0xf2, + 0xcf, 0xf1, 0xda, 0xf1, 0x08, 0xf2, 0x5f, 0xf2, 0xf2, 0xf2, 0x39, 0xf4, + 0xe0, 0xf5, 0x38, 0xf7, 0x9f, 0xf8, 0x1a, 0xfa, 0xcd, 0xfb, 0xcd, 0xfd, + 0xd3, 0xff, 0x4e, 0x01, 0x77, 0x02, 0x99, 0x03, 0x7f, 0x04, 0x89, 0x05, + 0xaf, 0x06, 0xd8, 0x06, 0x88, 0x06, 0x64, 0x06, 0x74, 0x06, 0xda, 0x06, + 0xae, 0x06, 0x08, 0x06, 0x8b, 0x05, 0x4f, 0x05, 0x7d, 0x05, 0xc7, 0x05, + 0xc8, 0x05, 0x90, 0x05, 0x8b, 0x05, 0xa9, 0x05, 0xed, 0x05, 0x2b, 0x06, + 0x3f, 0x06, 0x6b, 0x06, 0x26, 0x06, 0x83, 0x05, 0xcd, 0x04, 0x68, 0x04, + 0x4a, 0x04, 0xde, 0x03, 0x73, 0x02, 0x03, 0x01, 0xeb, 0xff, 0x64, 0xff, + 0xde, 0xfe, 0xba, 0xfd, 0xaf, 0xfc, 0x48, 0xfc, 0x5f, 0xfc, 0x1f, 0xfc, + 0x79, 0xfb, 0xa4, 0xfb, 0x9a, 0xfc, 0xe8, 0xfd, 0xe0, 0xfe, 0xfd, 0xfe, + 0x6b, 0xff, 0xb3, 0x00, 0x67, 0x02, 0xdf, 0x03, 0xa4, 0x04, 0x3c, 0x05, + 0xcb, 0x05, 0x30, 0x06, 0xa9, 0x06, 0x1d, 0x07, 0xa2, 0x07, 0xc7, 0x07, + 0x29, 0x07, 0x54, 0x06, 0xac, 0x05, 0x9b, 0x05, 0xc8, 0x05, 0x80, 0x05, + 0xb0, 0x04, 0xa8, 0x03, 0x2e, 0x03, 0xf2, 0x02, 0xfd, 0x02, 0xfd, 0x02, + 0xb1, 0x02, 0x2e, 0x02, 0xa0, 0x01, 0x28, 0x01, 0xf4, 0x00, 0x04, 0x01, + 0xcd, 0x00, 0x09, 0x00, 0xff, 0xfe, 0xf3, 0xfd, 0x62, 0xfd, 0xff, 0xfc, + 0x6f, 0xfc, 0xa3, 0xfb, 0xac, 0xfa, 0xf0, 0xf9, 0x8a, 0xf9, 0x65, 0xf9, + 0x6f, 0xf9, 0x9b, 0xf9, 0x06, 0xfa, 0x5f, 0xfa, 0xd8, 0xfa, 0xb3, 0xfb, + 0xc7, 0xfc, 0x12, 0xfe, 0x54, 0xff, 0x54, 0x00, 0x34, 0x01, 0xec, 0x01, + 0xbf, 0x02, 0x74, 0x03, 0x0a, 0x04, 0x47, 0x04, 0xf4, 0x03, 0x7a, 0x03, + 0x18, 0x03, 0x77, 0x02, 0xb2, 0x01, 0xa7, 0x00, 0x86, 0xff, 0x71, 0xfe, + 0x36, 0xfd, 0xec, 0xfb, 0x9c, 0xfa, 0x72, 0xf9, 0x74, 0xf8, 0x5a, 0xf7, + 0xde, 0xf5, 0x8d, 0xf4, 0xb6, 0xf3, 0x0b, 0xf3, 0xa8, 0xf2, 0x75, 0xf2, + 0x3f, 0xf2, 0xe9, 0xf1, 0x3c, 0xf2, 0x34, 0xf3, 0x89, 0xf4, 0xf9, 0xf5, + 0xff, 0xf6, 0xfb, 0xf7, 0x5d, 0xf9, 0x92, 0xfb, 0xb1, 0xfd, 0x44, 0xff, + 0x58, 0x00, 0x7c, 0x01, 0xb9, 0x02, 0xee, 0x03, 0xf1, 0x04, 0x85, 0x05, + 0xc2, 0x05, 0xe8, 0x05, 0xd8, 0x05, 0xc4, 0x05, 0xd2, 0x05, 0xe1, 0x05, + 0xa8, 0x05, 0x47, 0x05, 0x0d, 0x05, 0x16, 0x05, 0x58, 0x05, 0xa0, 0x05, + 0xb6, 0x05, 0xae, 0x05, 0xee, 0x05, 0x3e, 0x06, 0x9b, 0x06, 0xe2, 0x06, + 0xc9, 0x06, 0xb2, 0x06, 0x74, 0x06, 0x1d, 0x06, 0xce, 0x05, 0x2c, 0x05, + 0x4d, 0x04, 0x7c, 0x03, 0x66, 0x02, 0x5d, 0x01, 0x7d, 0x00, 0x8e, 0xff, + 0xaf, 0xfe, 0xbc, 0xfd, 0xf7, 0xfc, 0x74, 0xfc, 0x64, 0xfc, 0x71, 0xfc, + 0x43, 0xfc, 0x83, 0xfc, 0x39, 0xfd, 0x06, 0xfe, 0xc4, 0xfe, 0x9f, 0xff, + 0x9a, 0x00, 0x76, 0x01, 0x85, 0x02, 0x97, 0x03, 0x6f, 0x04, 0x06, 0x05, + 0x7b, 0x05, 0xeb, 0x05, 0x46, 0x06, 0x6a, 0x06, 0x5d, 0x06, 0x19, 0x06, + 0xe2, 0x05, 0x9b, 0x05, 0x05, 0x05, 0xaf, 0x04, 0x4f, 0x04, 0x20, 0x04, + 0xc3, 0x03, 0x42, 0x03, 0x01, 0x03, 0xd8, 0x02, 0xeb, 0x02, 0xc0, 0x02, + 0x81, 0x02, 0x73, 0x02, 0x3b, 0x02, 0xde, 0x01, 0x78, 0x01, 0x24, 0x01, + 0xca, 0x00, 0x39, 0x00, 0x74, 0xff, 0x7c, 0xfe, 0x9a, 0xfd, 0x31, 0xfd, + 0xa2, 0xfc, 0xbf, 0xfb, 0x04, 0xfb, 0x6c, 0xfa, 0x36, 0xfa, 0x0a, 0xfa, + 0x3a, 0xfa, 0x79, 0xfa, 0xb5, 0xfa, 0x38, 0xfb, 0xd9, 0xfb, 0xc2, 0xfc, + 0xe8, 0xfd, 0xdd, 0xfe, 0xa0, 0xff, 0x6e, 0x00, 0x4b, 0x01, 0x13, 0x02, + 0xaf, 0x02, 0xf5, 0x02, 0x0c, 0x03, 0xff, 0x02, 0xb6, 0x02, 0x61, 0x02, + 0xcc, 0x01, 0xf8, 0x00, 0x25, 0x00, 0x36, 0xff, 0x41, 0xfe, 0x0b, 0xfd, + 0x10, 0xfc, 0x45, 0xfb, 0x14, 0xfa, 0xca, 0xf8, 0x87, 0xf7, 0x54, 0xf6, + 0x7c, 0xf5, 0xd3, 0xf4, 0xcd, 0xf3, 0xe8, 0xf2, 0x8e, 0xf2, 0x74, 0xf2, + 0xa0, 0xf2, 0x11, 0xf3, 0x6a, 0xf3, 0x33, 0xf4, 0x26, 0xf5, 0xa2, 0xf6, + 0x51, 0xf8, 0x96, 0xf9, 0x64, 0xfb, 0xf3, 0xfc, 0x47, 0xfe, 0xfc, 0xff, + 0x99, 0x01, 0xdc, 0x02, 0xd5, 0x03, 0x7b, 0x04, 0xf5, 0x04, 0x80, 0x05, + 0xc7, 0x05, 0xc7, 0x05, 0xca, 0x05, 0xa3, 0x05, 0x4e, 0x05, 0x0d, 0x05, + 0xda, 0x04, 0xd7, 0x04, 0xef, 0x04, 0xe9, 0x04, 0xe9, 0x04, 0x0a, 0x05, + 0x68, 0x05, 0xc2, 0x05, 0xfb, 0x05, 0x5a, 0x06, 0x95, 0x06, 0xbe, 0x06, + 0xae, 0x06, 0x92, 0x06, 0x51, 0x06, 0x04, 0x06, 0x7f, 0x05, 0xbf, 0x04, + 0xce, 0x03, 0xc5, 0x02, 0xe0, 0x01, 0xd8, 0x00, 0xc7, 0xff, 0xf9, 0xfe, + 0xfe, 0xfd, 0x23, 0xfd, 0xb3, 0xfc, 0x6f, 0xfc, 0x50, 0xfc, 0x6e, 0xfc, + 0x7a, 0xfc, 0x0c, 0xfd, 0xe7, 0xfd, 0xb2, 0xfe, 0xa3, 0xff, 0x79, 0x00, + 0x62, 0x01, 0x7c, 0x02, 0xa0, 0x03, 0x53, 0x04, 0xf8, 0x04, 0x6f, 0x05, + 0xf3, 0x05, 0x59, 0x06, 0x38, 0x06, 0x24, 0x06, 0x1b, 0x06, 0xc2, 0x05, + 0x5f, 0x05, 0xdf, 0x04, 0x6d, 0x04, 0x2d, 0x04, 0xd8, 0x03, 0x71, 0x03, + 0x21, 0x03, 0xf0, 0x02, 0x06, 0x03, 0xde, 0x02, 0xb3, 0x02, 0xb3, 0x02, + 0xb0, 0x02, 0x83, 0x02, 0x60, 0x02, 0x08, 0x02, 0xa2, 0x01, 0x42, 0x01, + 0x91, 0x00, 0xe4, 0xff, 0x0f, 0xff, 0x18, 0xfe, 0x50, 0xfd, 0x85, 0xfc, + 0x80, 0xfb, 0xcb, 0xfa, 0x34, 0xfa, 0xb9, 0xf9, 0x93, 0xf9, 0x71, 0xf9, + 0xa3, 0xf9, 0x1c, 0xfa, 0xc5, 0xfa, 0x7d, 0xfb, 0x50, 0xfc, 0x78, 0xfd, + 0x8d, 0xfe, 0x8d, 0xff, 0x85, 0x00, 0x60, 0x01, 0x26, 0x02, 0xbd, 0x02, + 0x1f, 0x03, 0x39, 0x03, 0x18, 0x03, 0xc3, 0x02, 0x4e, 0x02, 0xc2, 0x01, + 0x30, 0x01, 0x44, 0x00, 0x2f, 0xff, 0x43, 0xfe, 0x60, 0xfd, 0x8d, 0xfc, + 0xbe, 0xfb, 0xcf, 0xfa, 0xb1, 0xf9, 0x7e, 0xf8, 0x8f, 0xf7, 0xb8, 0xf6, + 0x1b, 0xf6, 0x76, 0xf5, 0x76, 0xf4, 0x3a, 0xf3, 0x17, 0xf3, 0x85, 0xf3, + 0x08, 0xf4, 0xf7, 0xf3, 0xd6, 0xf3, 0x9f, 0xf4, 0xb0, 0xf5, 0x2d, 0xf7, + 0x8f, 0xf8, 0x91, 0xf9, 0xef, 0xfa, 0x8b, 0xfc, 0xdb, 0xfd, 0x56, 0xff, + 0x7b, 0x00, 0xb6, 0x01, 0x15, 0x03, 0xcd, 0x03, 0xff, 0x03, 0x5e, 0x04, + 0xa8, 0x04, 0x2d, 0x05, 0x99, 0x05, 0x72, 0x05, 0x13, 0x05, 0xce, 0x04, + 0xc2, 0x04, 0xf0, 0x04, 0x16, 0x05, 0x4a, 0x05, 0x4f, 0x05, 0x2f, 0x05, + 0x40, 0x05, 0x8a, 0x05, 0xd7, 0x05, 0x1f, 0x06, 0x83, 0x06, 0x86, 0x06, + 0x23, 0x06, 0xc4, 0x05, 0x79, 0x05, 0x71, 0x05, 0x23, 0x05, 0x59, 0x04, + 0xff, 0x02, 0x20, 0x02, 0x7a, 0x01, 0xa5, 0x00, 0xcf, 0xff, 0x00, 0xff, + 0x5b, 0xfe, 0xa5, 0xfd, 0x28, 0xfd, 0xd1, 0xfc, 0xcf, 0xfc, 0x42, 0xfd, + 0xbc, 0xfd, 0x1d, 0xfe, 0x7a, 0xfe, 0x15, 0xff, 0x23, 0x00, 0x3e, 0x01, + 0x39, 0x02, 0xfa, 0x02, 0xaa, 0x03, 0x3f, 0x04, 0xbc, 0x04, 0x1e, 0x05, + 0x97, 0x05, 0xe1, 0x05, 0xdc, 0x05, 0x7f, 0x05, 0xfd, 0x04, 0xb1, 0x04, + 0x93, 0x04, 0x62, 0x04, 0xf7, 0x03, 0x81, 0x03, 0x0f, 0x03, 0xce, 0x02, + 0xb0, 0x02, 0xa9, 0x02, 0xb0, 0x02, 0xaa, 0x02, 0x7f, 0x02, 0x4a, 0x02, + 0x4a, 0x02, 0x3d, 0x02, 0x11, 0x02, 0xc6, 0x01, 0x49, 0x01, 0xc6, 0x00, + 0x2f, 0x00, 0x72, 0xff, 0xa9, 0xfe, 0xd6, 0xfd, 0x18, 0xfd, 0x62, 0xfc, + 0x9b, 0xfb, 0xbd, 0xfa, 0x35, 0xfa, 0xfc, 0xf9, 0xf5, 0xf9, 0xf7, 0xf9, + 0x0b, 0xfa, 0x5b, 0xfa, 0xf5, 0xfa, 0xc2, 0xfb, 0xb0, 0xfc, 0x96, 0xfd, + 0x92, 0xfe, 0x90, 0xff, 0x73, 0x00, 0x50, 0x01, 0x0c, 0x02, 0x7a, 0x02, + 0xe9, 0x02, 0x16, 0x03, 0x19, 0x03, 0xdf, 0x02, 0x54, 0x02, 0xd4, 0x01, + 0x36, 0x01, 0x73, 0x00, 0x95, 0xff, 0x9a, 0xfe, 0xb9, 0xfd, 0xc2, 0xfc, + 0xbb, 0xfb, 0xae, 0xfa, 0xc1, 0xf9, 0x10, 0xf9, 0x12, 0xf8, 0x2c, 0xf7, + 0x2e, 0xf6, 0x48, 0xf5, 0xdd, 0xf4, 0xa2, 0xf4, 0x6f, 0xf4, 0x30, 0xf4, + 0x0f, 0xf4, 0x42, 0xf4, 0xca, 0xf4, 0x96, 0xf5, 0x91, 0xf6, 0x64, 0xf7, + 0x4b, 0xf8, 0x5e, 0xf9, 0x91, 0xfa, 0xb7, 0xfb, 0x0e, 0xfd, 0x88, 0xfe, + 0x85, 0xff, 0x36, 0x00, 0xcc, 0x00, 0x8e, 0x01, 0x96, 0x02, 0x4b, 0x03, + 0x80, 0x03, 0x8a, 0x03, 0x86, 0x03, 0xd2, 0x03, 0x31, 0x04, 0x65, 0x04, + 0x6d, 0x04, 0x8b, 0x04, 0xb2, 0x04, 0xca, 0x04, 0x07, 0x05, 0x60, 0x05, + 0x95, 0x05, 0xf0, 0x05, 0x39, 0x06, 0x2f, 0x06, 0x1e, 0x06, 0x38, 0x06, + 0x55, 0x06, 0x39, 0x06, 0xc9, 0x05, 0x36, 0x05, 0xb5, 0x04, 0x23, 0x04, + 0x92, 0x03, 0xc7, 0x02, 0xf4, 0x01, 0x35, 0x01, 0x7d, 0x00, 0xeb, 0xff, + 0x38, 0xff, 0xb4, 0xfe, 0x62, 0xfe, 0x49, 0xfe, 0x4c, 0xfe, 0x44, 0xfe, + 0x4a, 0xfe, 0xb5, 0xfe, 0x64, 0xff, 0x0a, 0x00, 0x67, 0x00, 0xf5, 0x00, + 0xc1, 0x01, 0x84, 0x02, 0x2a, 0x03, 0xa6, 0x03, 0x0e, 0x04, 0x88, 0x04, + 0xe0, 0x04, 0x20, 0x05, 0x1a, 0x05, 0x05, 0x05, 0xec, 0x04, 0xd2, 0x04, + 0x88, 0x04, 0x2e, 0x04, 0xd9, 0x03, 0x7e, 0x03, 0x2e, 0x03, 0xd8, 0x02, + 0x9a, 0x02, 0x5d, 0x02, 0x1d, 0x02, 0xdd, 0x01, 0xb2, 0x01, 0x96, 0x01, + 0x6e, 0x01, 0x35, 0x01, 0xf4, 0x00, 0x97, 0x00, 0x69, 0x00, 0x21, 0x00, + 0xa5, 0xff, 0x07, 0xff, 0x53, 0xfe, 0xda, 0xfd, 0x77, 0xfd, 0xee, 0xfc, + 0x47, 0xfc, 0x9c, 0xfb, 0x30, 0xfb, 0xff, 0xfa, 0xf1, 0xfa, 0xf3, 0xfa, + 0x05, 0xfb, 0x33, 0xfb, 0x8d, 0xfb, 0x21, 0xfc, 0xe3, 0xfc, 0xa6, 0xfd, + 0x7a, 0xfe, 0x4e, 0xff, 0x1a, 0x00, 0xda, 0x00, 0x8a, 0x01, 0x10, 0x02, + 0x8b, 0x02, 0xec, 0x02, 0x16, 0x03, 0x1b, 0x03, 0xb3, 0x02, 0x29, 0x02, + 0xcd, 0x01, 0x42, 0x01, 0xc1, 0x00, 0xe9, 0xff, 0xc2, 0xfe, 0xbb, 0xfd, + 0x23, 0xfd, 0x73, 0xfc, 0xa8, 0xfb, 0xa6, 0xfa, 0x6e, 0xf9, 0xa2, 0xf8, + 0xea, 0xf7, 0x47, 0xf7, 0xc0, 0xf6, 0x3d, 0xf6, 0xb2, 0xf5, 0x25, 0xf5, + 0xf1, 0xf4, 0x29, 0xf5, 0xc5, 0xf5, 0x2a, 0xf6, 0x67, 0xf6, 0xfb, 0xf6, + 0xb1, 0xf7, 0xb7, 0xf8, 0x3b, 0xfa, 0x4b, 0xfb, 0x18, 0xfc, 0xea, 0xfc, + 0xdb, 0xfd, 0x26, 0xff, 0x44, 0x00, 0xce, 0x00, 0xfd, 0x00, 0x96, 0x01, + 0x4c, 0x02, 0xca, 0x02, 0xad, 0x02, 0x82, 0x02, 0xc9, 0x02, 0x18, 0x03, + 0x52, 0x03, 0x3f, 0x03, 0x47, 0x03, 0x84, 0x03, 0xa0, 0x03, 0x02, 0x04, + 0x6b, 0x04, 0xdc, 0x04, 0x33, 0x05, 0x52, 0x05, 0x6b, 0x05, 0x9f, 0x05, + 0xf7, 0x05, 0x58, 0x06, 0x47, 0x06, 0xe0, 0x05, 0x4f, 0x05, 0xef, 0x04, + 0xb1, 0x04, 0x43, 0x04, 0xbf, 0x03, 0xdb, 0x02, 0xf0, 0x01, 0x4c, 0x01, + 0xc6, 0x00, 0x72, 0x00, 0x05, 0x00, 0xa6, 0xff, 0x65, 0xff, 0x41, 0xff, + 0x64, 0xff, 0xa0, 0xff, 0x1d, 0x00, 0xa4, 0x00, 0x26, 0x01, 0xa6, 0x01, + 0x39, 0x02, 0xf4, 0x02, 0xb5, 0x03, 0x42, 0x04, 0xb8, 0x04, 0x09, 0x05, + 0x43, 0x05, 0x66, 0x05, 0x75, 0x05, 0x6e, 0x05, 0x1d, 0x05, 0xc4, 0x04, + 0x74, 0x04, 0xe7, 0x03, 0x90, 0x03, 0x28, 0x03, 0x85, 0x02, 0x2b, 0x02, + 0xe5, 0x01, 0x95, 0x01, 0x65, 0x01, 0x26, 0x01, 0xe9, 0x00, 0xfb, 0x00, + 0x07, 0x01, 0x00, 0x01, 0xe9, 0x00, 0xbd, 0x00, 0x94, 0x00, 0x59, 0x00, + 0x3a, 0x00, 0xdf, 0xff, 0x5a, 0xff, 0xd7, 0xfe, 0x40, 0xfe, 0xaf, 0xfd, + 0x1c, 0xfd, 0x94, 0xfc, 0x1b, 0xfc, 0xb1, 0xfb, 0x61, 0xfb, 0x18, 0xfb, + 0x18, 0xfb, 0x56, 0xfb, 0xb1, 0xfb, 0x1c, 0xfc, 0x9e, 0xfc, 0x45, 0xfd, + 0x13, 0xfe, 0xd8, 0xfe, 0x94, 0xff, 0x67, 0x00, 0x10, 0x01, 0x8e, 0x01, + 0xf4, 0x01, 0x24, 0x02, 0x48, 0x02, 0x48, 0x02, 0x01, 0x02, 0x98, 0x01, + 0x02, 0x01, 0x6b, 0x00, 0xc7, 0xff, 0x11, 0xff, 0x6f, 0xfe, 0x93, 0xfd, + 0xa6, 0xfc, 0x08, 0xfc, 0x4f, 0xfb, 0xb0, 0xfa, 0xff, 0xf9, 0x7e, 0xf9, + 0xef, 0xf8, 0x45, 0xf8, 0xcd, 0xf7, 0xa0, 0xf7, 0x54, 0xf7, 0x1d, 0xf7, + 0xd2, 0xf6, 0xda, 0xf6, 0x1e, 0xf7, 0x73, 0xf7, 0xca, 0xf7, 0x38, 0xf8, + 0xe6, 0xf8, 0x81, 0xf9, 0x8d, 0xfa, 0x62, 0xfb, 0x38, 0xfc, 0x25, 0xfd, + 0x02, 0xfe, 0xad, 0xfe, 0x7a, 0xff, 0x3e, 0x00, 0xe5, 0x00, 0x69, 0x01, + 0xb4, 0x01, 0xfc, 0x01, 0x47, 0x02, 0x7d, 0x02, 0xae, 0x02, 0xcb, 0x02, + 0x1d, 0x03, 0x2c, 0x03, 0x01, 0x03, 0x40, 0x03, 0x8a, 0x03, 0xdf, 0x03, + 0x34, 0x04, 0x4c, 0x04, 0x5a, 0x04, 0x7f, 0x04, 0xc4, 0x04, 0x06, 0x05, + 0x2a, 0x05, 0x1a, 0x05, 0xe5, 0x04, 0x98, 0x04, 0x52, 0x04, 0x1d, 0x04, + 0xc4, 0x03, 0x56, 0x03, 0xfe, 0x02, 0x5c, 0x02, 0xc1, 0x01, 0x5c, 0x01, + 0xf5, 0x00, 0xbd, 0x00, 0x88, 0x00, 0x57, 0x00, 0x1e, 0x00, 0x20, 0x00, + 0x51, 0x00, 0x89, 0x00, 0xdb, 0x00, 0x3d, 0x01, 0xb3, 0x01, 0x42, 0x02, + 0xa2, 0x02, 0xf8, 0x02, 0x6a, 0x03, 0xee, 0x03, 0x6f, 0x04, 0xb9, 0x04, + 0xd6, 0x04, 0xc7, 0x04, 0xce, 0x04, 0xdf, 0x04, 0xbc, 0x04, 0xad, 0x04, + 0x7a, 0x04, 0x20, 0x04, 0xb1, 0x03, 0x5c, 0x03, 0x40, 0x03, 0x12, 0x03, + 0xd0, 0x02, 0xa7, 0x02, 0x4f, 0x02, 0x0f, 0x02, 0xfd, 0x01, 0xd6, 0x01, + 0x9d, 0x01, 0x63, 0x01, 0x19, 0x01, 0xb7, 0x00, 0x3a, 0x00, 0xd2, 0xff, + 0x7c, 0xff, 0x0b, 0xff, 0x84, 0xfe, 0xb8, 0xfd, 0x46, 0xfd, 0xfb, 0xfc, + 0x97, 0xfc, 0x49, 0xfc, 0xf0, 0xfb, 0xd2, 0xfb, 0xd3, 0xfb, 0xf4, 0xfb, + 0x2b, 0xfc, 0x6f, 0xfc, 0xcc, 0xfc, 0x49, 0xfd, 0xd2, 0xfd, 0x3f, 0xfe, + 0xbb, 0xfe, 0x4d, 0xff, 0xe8, 0xff, 0x56, 0x00, 0xa5, 0x00, 0xfa, 0x00, + 0x2a, 0x01, 0x48, 0x01, 0x5c, 0x01, 0x4e, 0x01, 0x29, 0x01, 0x03, 0x01, + 0xcc, 0x00, 0x88, 0x00, 0x3c, 0x00, 0xc8, 0xff, 0x7f, 0xff, 0x25, 0xff, + 0x9f, 0xfe, 0x1b, 0xfe, 0xa0, 0xfd, 0x08, 0xfd, 0x92, 0xfc, 0xee, 0xfb, + 0x36, 0xfb, 0xbc, 0xfa, 0x24, 0xfa, 0x7d, 0xf9, 0xd9, 0xf8, 0x5c, 0xf8, + 0xf3, 0xf7, 0x91, 0xf7, 0x4c, 0xf7, 0x0a, 0xf7, 0x22, 0xf7, 0x60, 0xf7, + 0x7f, 0xf7, 0xda, 0xf7, 0x4c, 0xf8, 0xf3, 0xf8, 0x88, 0xf9, 0x8d, 0xfa, + 0x56, 0xfb, 0xfd, 0xfb, 0xa7, 0xfc, 0x06, 0xfd, 0x38, 0xfe, 0x32, 0xff, + 0x8a, 0xff, 0xf5, 0xff, 0x52, 0x00, 0xbd, 0x00, 0x23, 0x01, 0xb7, 0x01, + 0xfc, 0x01, 0x2d, 0x02, 0x73, 0x02, 0x96, 0x02, 0xe2, 0x02, 0x2b, 0x03, + 0x84, 0x03, 0xd3, 0x03, 0x0d, 0x04, 0x1f, 0x04, 0x53, 0x04, 0x5c, 0x04, + 0x88, 0x04, 0xc1, 0x04, 0x9e, 0x04, 0x78, 0x04, 0x55, 0x04, 0x28, 0x04, + 0xc8, 0x03, 0x63, 0x03, 0x39, 0x03, 0xf0, 0x02, 0x6d, 0x02, 0xc8, 0x01, + 0x64, 0x01, 0x40, 0x01, 0x17, 0x01, 0xcf, 0x00, 0x78, 0x00, 0x5c, 0x00, + 0x68, 0x00, 0x53, 0x00, 0x7a, 0x00, 0xae, 0x00, 0xe5, 0x00, 0x4d, 0x01, + 0x85, 0x01, 0xb6, 0x01, 0x1e, 0x02, 0x7b, 0x02, 0xeb, 0x02, 0x45, 0x03, + 0x84, 0x03, 0xa9, 0x03, 0xc4, 0x03, 0xd8, 0x03, 0xe0, 0x03, 0xe4, 0x03, + 0xe5, 0x03, 0xc1, 0x03, 0x50, 0x03, 0x0f, 0x03, 0xef, 0x02, 0xd9, 0x02, + 0xaa, 0x02, 0x6d, 0x02, 0x27, 0x02, 0xfe, 0x01, 0xd6, 0x01, 0xa6, 0x01, + 0x93, 0x01, 0x7f, 0x01, 0x51, 0x01, 0xea, 0x00, 0x80, 0x00, 0x37, 0x00, + 0x03, 0x00, 0xbc, 0xff, 0x4b, 0xff, 0xcc, 0xfe, 0x4f, 0xfe, 0xd8, 0xfd, + 0x9e, 0xfd, 0x82, 0xfd, 0x6a, 0xfd, 0x3f, 0xfd, 0x07, 0xfd, 0x09, 0xfd, + 0x2d, 0xfd, 0x89, 0xfd, 0xec, 0xfd, 0x43, 0xfe, 0x7f, 0xfe, 0xc2, 0xfe, + 0x14, 0xff, 0x8b, 0xff, 0x12, 0x00, 0x60, 0x00, 0x83, 0x00, 0x99, 0x00, + 0xde, 0x00, 0x20, 0x01, 0x33, 0x01, 0x24, 0x01, 0x16, 0x01, 0x35, 0x01, + 0x26, 0x01, 0xf4, 0x00, 0xbc, 0x00, 0x8a, 0x00, 0x78, 0x00, 0x34, 0x00, + 0xef, 0xff, 0xca, 0xff, 0x93, 0xff, 0xe9, 0xfe, 0x6f, 0xfe, 0x42, 0xfe, + 0xe5, 0xfd, 0x86, 0xfd, 0xd0, 0xfc, 0x1e, 0xfc, 0x7f, 0xfb, 0x30, 0xfb, + 0xcb, 0xfa, 0x26, 0xfa, 0xbd, 0xf9, 0x59, 0xf9, 0xed, 0xf8, 0xee, 0xf8, + 0xbc, 0xf8, 0x8b, 0xf8, 0x8d, 0xf8, 0x70, 0xf8, 0x94, 0xf8, 0xc8, 0xf8, + 0x0c, 0xf9, 0x3f, 0xf9, 0x67, 0xf9, 0x97, 0xf9, 0x29, 0xfa, 0xe5, 0xfa, + 0x61, 0xfb, 0xbb, 0xfb, 0x17, 0xfc, 0xa1, 0xfc, 0x7f, 0xfd, 0x17, 0xfe, + 0x58, 0xfe, 0xc8, 0xfe, 0x7c, 0xff, 0xf2, 0xff, 0xf5, 0xff, 0x59, 0x00, + 0xe7, 0x00, 0x4e, 0x01, 0x7e, 0x01, 0x90, 0x01, 0xb6, 0x01, 0x05, 0x02, + 0x9d, 0x02, 0xbc, 0x02, 0xbf, 0x02, 0xbf, 0x02, 0xe4, 0x02, 0x16, 0x03, + 0x31, 0x03, 0x3d, 0x03, 0x22, 0x03, 0x0c, 0x03, 0xf4, 0x02, 0xe9, 0x02, + 0xe0, 0x02, 0xae, 0x02, 0x7c, 0x02, 0x53, 0x02, 0x45, 0x02, 0x1f, 0x02, + 0x09, 0x02, 0xef, 0x01, 0xde, 0x01, 0xe8, 0x01, 0xe2, 0x01, 0xd6, 0x01, + 0xd1, 0x01, 0xef, 0x01, 0xfd, 0x01, 0xe5, 0x01, 0xfd, 0x01, 0x1c, 0x02, + 0x0b, 0x02, 0x0d, 0x02, 0xf3, 0x01, 0xf7, 0x01, 0x39, 0x02, 0x40, 0x02, + 0x39, 0x02, 0x59, 0x02, 0x7a, 0x02, 0x9d, 0x02, 0xcb, 0x02, 0x12, 0x03, + 0x3d, 0x03, 0x5e, 0x03, 0x62, 0x03, 0x72, 0x03, 0x81, 0x03, 0x8a, 0x03, + 0x70, 0x03, 0x37, 0x03, 0x1b, 0x03, 0xc1, 0x02, 0x71, 0x02, 0x17, 0x02, + 0xd2, 0x01, 0x80, 0x01, 0x29, 0x01, 0xe9, 0x00, 0x83, 0x00, 0x37, 0x00, + 0xf9, 0xff, 0xe2, 0xff, 0xe2, 0xff, 0xbf, 0xff, 0x8a, 0xff, 0x5b, 0xff, + 0x3f, 0xff, 0x51, 0xff, 0x4c, 0xff, 0x3a, 0xff, 0x3f, 0xff, 0x29, 0xff, + 0x1d, 0xff, 0x14, 0xff, 0x0e, 0xff, 0x3a, 0xff, 0x65, 0xff, 0x70, 0xff, + 0x86, 0xff, 0x9f, 0xff, 0xb4, 0xff, 0xd9, 0xff, 0x2d, 0x00, 0x6b, 0x00, + 0xa6, 0x00, 0xb0, 0x00, 0xb0, 0x00, 0xc4, 0x00, 0xe1, 0x00, 0x0d, 0x01, + 0x03, 0x01, 0xeb, 0x00, 0xb3, 0x00, 0x83, 0x00, 0x51, 0x00, 0x3e, 0x00, + 0x09, 0x00, 0xc0, 0xff, 0x82, 0xff, 0x39, 0xff, 0xcf, 0xfe, 0x85, 0xfe, + 0x4a, 0xfe, 0x08, 0xfe, 0xd3, 0xfd, 0x5e, 0xfd, 0x24, 0xfd, 0xf1, 0xfc, + 0xba, 0xfc, 0x95, 0xfc, 0x68, 0xfc, 0x07, 0xfc, 0xaf, 0xfb, 0x85, 0xfb, + 0x79, 0xfb, 0x50, 0xfb, 0x1c, 0xfb, 0xe7, 0xfa, 0xc9, 0xfa, 0xeb, 0xfa, + 0x03, 0xfb, 0x15, 0xfb, 0x00, 0xfb, 0x5e, 0xfb, 0x5d, 0xfb, 0xa6, 0xfb, + 0xf8, 0xfb, 0xeb, 0xfb, 0x10, 0xfc, 0x42, 0xfc, 0x71, 0xfc, 0xb5, 0xfc, + 0xa5, 0xfc, 0x93, 0xfc, 0x92, 0xfc, 0xd3, 0xfc, 0x48, 0xfd, 0xfb, 0xfc, + 0x37, 0xfd, 0x43, 0xfd, 0xb9, 0xfd, 0x13, 0xfe, 0x4b, 0xfe, 0xda, 0xfe, + 0x6b, 0xff, 0xc3, 0xff, 0xf4, 0xff, 0x3c, 0x00, 0x9b, 0x00, 0xe6, 0x00, + 0xfe, 0x00, 0xf0, 0x00, 0xd3, 0x00, 0xe5, 0x00, 0xa3, 0x00, 0x80, 0x00, + 0x90, 0x00, 0x9e, 0x00, 0x90, 0x00, 0x5e, 0x00, 0x75, 0x00, 0x7a, 0x00, + 0x74, 0x00, 0x62, 0x00, 0x40, 0x00, 0x38, 0x00, 0x23, 0x00, 0x05, 0x00, + 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, + 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x07, 0x00, + 0x07, 0x00, 0x07, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, + 0x06, 0x00, 0x05, 0x00, 0x04, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x06, 0x00, + 0x06, 0x00, 0x06, 0x00, 0x05, 0x00, 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x06, 0x00, 0x05, 0x00, 0x05, 0x00, 0x06, 0x00, 0x06, 0x00, + 0x05, 0x00, 0x05, 0x00, 0x04, 0x00, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xfe, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfb, 0xff, + 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfb, 0xff, + 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xfa, 0xff, + 0xfa, 0xff, 0xfa, 0xff, 0xf9, 0xff, 0xf8, 0xff, 0xf7, 0xff, 0xf7, 0xff, + 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xf9, 0xff, + 0xfa, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfb, 0xff, + 0xfb, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf9, 0xff, + 0xf9, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfc, 0xff, + 0xfc, 0xff, 0xfc, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, + 0xfd, 0xff, 0xfc, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x05, 0x00, 0x06, 0x00, 0x06, 0x00, + 0x06, 0x00, 0x05, 0x00, 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x05, 0x00, 0x06, 0x00, 0x06, 0x00, 0x07, 0x00, 0x07, 0x00, 0x08, 0x00, + 0x08, 0x00, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x08, 0x00, 0x07, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, + 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08, 0x00, + 0x08, 0x00, 0x09, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x09, 0x00, 0x09, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x07, 0x00, 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, + 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfc, 0xff, 0xfb, 0xff, 0xfb, 0xff, + 0xfb, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, + 0xfa, 0xff, 0xfb, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfd, 0xff, 0xfd, 0xff, + 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfc, 0xff, + 0xfc, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xfb, 0xff, + 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfc, 0xff, 0xfc, 0xff, + 0xfd, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, + 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, + 0xfc, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfe, 0xff, + 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, + 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, + 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x05, 0x00, 0x05, 0x00, 0x06, 0x00, + 0x07, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x09, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x07, 0x00, + 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, + 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfd, 0xff, + 0xfd, 0xff, 0xfd, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, + 0xfb, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfb, 0xff, + 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, + 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, + 0xfc, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xfd, 0xff, + 0xfd, 0xff, 0xfd, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, + 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, + 0xfb, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfd, 0xff, + 0xfd, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, + 0x05, 0x00, 0x05, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, + 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x03, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, + 0x05, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, + 0x06, 0x00, 0x06, 0x00, 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, + 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xfd, 0xff, + 0xfd, 0xff, 0xfd, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfb, 0xff, 0xfb, 0xff, + 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfd, 0xff, + 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, + 0xfd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfb, 0xff, + 0xfb, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfd, 0xff, 0xfd, 0xff, + 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 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, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x05, 0x00, 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 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, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, + 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 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, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 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, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 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, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 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, 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, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 +}; +uint32_t left_channel_bin_len = 47666; \ No newline at end of file diff --git a/examples/stellar_unicorn/stellar_eighties_super_computer.cpp b/examples/stellar_unicorn/stellar_eighties_super_computer.cpp new file mode 100644 index 00000000..e8b1c961 --- /dev/null +++ b/examples/stellar_unicorn/stellar_eighties_super_computer.cpp @@ -0,0 +1,67 @@ +#include +#include +#include +#include "pico/stdlib.h" + +#include "libraries/pico_graphics/pico_graphics.hpp" +#include "stellar_unicorn.hpp" + +using namespace pimoroni; + +PicoGraphics_PenRGB888 graphics(16, 16, nullptr); +StellarUnicorn stellar_unicorn; + +float lifetime[16][16]; +float age[16][16]; + +int main() { + + stdio_init_all(); + + for(int y = 0; y < 16; y++) { + for(int x = 0; x < 16; x++) { + lifetime[x][y] = 1.0f + ((rand() % 10) / 100.0f); + age[x][y] = ((rand() % 100) / 100.0f) * lifetime[x][y]; + } + } + + stellar_unicorn.init(); + + while(true) { + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_BRIGHTNESS_UP)) { + stellar_unicorn.adjust_brightness(+0.01); + } + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_BRIGHTNESS_DOWN)) { + stellar_unicorn.adjust_brightness(-0.01); + } + + graphics.set_pen(0, 0, 0); + graphics.clear(); + + for(int y = 0; y < 16; y++) { + for(int x = 0; x < 16; x++) { + if(age[x][y] < lifetime[x][y] * 0.3f) { + graphics.set_pen(230, 150, 0); + graphics.pixel(Point(x, y)); + }else if(age[x][y] < lifetime[x][y] * 0.5f) { + float decay = (lifetime[x][y] * 0.5f - age[x][y]) * 5.0f; + graphics.set_pen(decay * 230, decay * 150, 0); + graphics.pixel(Point(x, y)); + } + + if(age[x][y] >= lifetime[x][y]) { + age[x][y] = 0.0f; + lifetime[x][y] = 1.0f + ((rand() % 10) / 100.0f); + } + + age[x][y] += 0.01f; + } + } + + stellar_unicorn.update(&graphics); + + sleep_ms(10); + } + + return 0; +} diff --git a/examples/stellar_unicorn/stellar_fire_effect.cpp b/examples/stellar_unicorn/stellar_fire_effect.cpp new file mode 100644 index 00000000..06008e3b --- /dev/null +++ b/examples/stellar_unicorn/stellar_fire_effect.cpp @@ -0,0 +1,115 @@ +#include +#include +#include +#include +#include "pico/stdlib.h" + +#include "libraries/pico_graphics/pico_graphics.hpp" +#include "stellar_unicorn.hpp" + +using namespace pimoroni; + +PicoGraphics_PenRGB888 graphics(16, 16, nullptr); +StellarUnicorn stellar_unicorn; + +// extra row of pixels for sourcing flames and averaging +int width = 16; +int height = 17; + +// a buffer that's at least big enough to store 55 x 15 values (to allow for both orientations) +float heat[2000] = {0.0f}; + +void set(int x, int y, float v) { + heat[x + y * width] = v; +} + +float get(int x, int y) { + /*if(x < 0 || x >= width || y < 0 || y >= height) { + return 0.0f; + }*/ + x = x < 0 ? 0 : x; + x = x >= width ? width - 1 : x; + + return heat[x + y * width]; +} + +int main() { + + stdio_init_all(); + + stellar_unicorn.init(); + stellar_unicorn.set_brightness(0.2); + + bool landscape = true; +/* + while(true) { + stellar_unicorn.set_pixel(0, 0, 255, 0, 0); + stellar_unicorn.set_pixel(1, 1, 0, 255, 0); + stellar_unicorn.set_pixel(2, 2, 0, 0, 255); + }*/ + + while(true) { + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_BRIGHTNESS_UP)) { + stellar_unicorn.adjust_brightness(+0.01); + } + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_BRIGHTNESS_DOWN)) { + stellar_unicorn.adjust_brightness(-0.01); + } + + + for(int y = 0; y < height; y++) { + for(int x = 0; x < width; x++) { + float value = get(x, y); + + graphics.set_pen(0, 0, 0); + if(value > 0.5f) { + graphics.set_pen(255, 255, 180); + }else if(value > 0.4f) { + graphics.set_pen(220, 160, 0); + }else if(value > 0.3f) { + graphics.set_pen(180, 30, 0); + }else if(value > 0.22f) { + graphics.set_pen(20, 20, 20); + } + + if(landscape) { + graphics.pixel(Point(x, y)); + }else{ + graphics.pixel(Point(y, x)); + } + + // update this pixel by averaging the below pixels + float average = (get(x, y) + get(x, y + 2) + get(x, y + 1) + get(x - 1, y + 1) + get(x + 1, y + 1)) / 5.0f; + + // damping factor to ensure flame tapers out towards the top of the displays + average *= 0.95f; + + // update the heat map with our newly averaged value + set(x, y, average); + } + } + + stellar_unicorn.update(&graphics); + + // clear the bottom row and then add a new fire seed to it + for(int x = 0; x < width; x++) { + set(x, height - 1, 0.0f); + } + + // add a new random heat source + int source_count = landscape ? 5 : 1; + for(int c = 0; c < source_count; c++) { + int px = (rand() % (width - 4)) + 2; + set(px , height - 2, 1.0f); + set(px + 1, height - 2, 1.0f); + set(px - 1, height - 2, 1.0f); + set(px , height - 1, 1.0f); + set(px + 1, height - 1, 1.0f); + set(px - 1, height - 1, 1.0f); + } + + sleep_ms(20); + } + + return 0; +} diff --git a/examples/stellar_unicorn/stellar_lava_lamp.cpp b/examples/stellar_unicorn/stellar_lava_lamp.cpp new file mode 100644 index 00000000..97217b8d --- /dev/null +++ b/examples/stellar_unicorn/stellar_lava_lamp.cpp @@ -0,0 +1,148 @@ +#include +#include +#include +#include "pico/stdlib.h" + +#include "libraries/pico_graphics/pico_graphics.hpp" +#include "stellar_unicorn.hpp" + +using namespace pimoroni; + +PicoGraphics_PenRGB888 graphics(16, 16, nullptr); +StellarUnicorn stellar_unicorn; + +// HSV Conversion expects float inputs in the range of 0.00-1.00 for each channel +// Outputs are rgb in the range 0-255 for each channel +void from_hsv(float h, float s, float v, uint8_t &r, uint8_t &g, uint8_t &b) { + float i = floor(h * 6.0f); + float f = h * 6.0f - i; + v *= 255.0f; + uint8_t p = v * (1.0f - s); + uint8_t q = v * (1.0f - f * s); + uint8_t t = v * (1.0f - (1.0f - f) * s); + + switch (int(i) % 6) { + case 0: r = v; g = t; b = p; break; + case 1: r = q; g = v; b = p; break; + case 2: r = p; g = v; b = t; break; + case 3: r = p; g = q; b = v; break; + case 4: r = t; g = p; b = v; break; + case 5: r = v; g = p; b = q; break; + } +} + +struct blob_t { + float x, y; + float r; + float dx, dy; +}; + +constexpr int blob_count = 20; + +int main() { + + stdio_init_all(); + + stellar_unicorn.init(); + stellar_unicorn.set_brightness(0.5); + + // randomise blob start positions, directions, and size + std::array blobs; + for(auto &blob : blobs) { + blob.x = rand() % 16; + blob.y = rand() % 16; + blob.r = ((rand() % 40) / 10.0f) + 5.0f; + blob.dx = ((rand() % 2) / 10.0f) - 0.05f; + blob.dy = ((rand() % 3) / 10.0f) - 0.1f; + } + + float hue = 0.0f; + + while(true) { + // allow user to adjust brightness + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_BRIGHTNESS_UP)) { + stellar_unicorn.adjust_brightness(+0.01); + } + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_BRIGHTNESS_DOWN)) { + stellar_unicorn.adjust_brightness(-0.01); + } + + uint start_ms = to_ms_since_boot(get_absolute_time()); + + // calculate the influence of each blob on the liquid based + // on their distance to each pixel. this causes blobs to + // "merge" into each other when we use fixed thresholds to + // determine which colour to draw with + float liquid[16][16] = {0.0f}; + for(auto &blob : blobs) { + float r_sq = blob.r * blob.r; + for(int y = 0; y < 16; y++) { + for(int x = 0; x < 16; x++) { + float d_sq = (x - blob.x) * (x - blob.x) + (y - blob.y) * (y - blob.y); + if(d_sq <= r_sq) { + // add this blobs influence to this pixel + liquid[x][y] += 1.0f - (d_sq / r_sq); + } + } + } + } + + // update the blob positions + for(auto &blob : blobs) { + blob.x += blob.dx; + blob.y += blob.dy; + + // if we hit the edge then bounce! + if(blob.x < 0.0f || blob.x >= 11.0f) { + blob.dx *= -1.0f; + } + if(blob.y < 0.0f || blob.y >= 53.0f) { + blob.dy *= -1.0f; + } + } + + // rotate the hue + hue += 0.001f; + + // calculate dark, medium, and bright shades for rendering the + // lava + uint8_t dark_r, dark_g, dark_b; + from_hsv(hue, 1.0f, 0.3f, dark_r, dark_g, dark_b); + uint8_t mid_r, mid_g, mid_b; + from_hsv(hue, 1.0f, 0.6f, mid_r, mid_g, mid_b); + uint8_t bright_r, bright_g, bright_b; + from_hsv(hue, 1.0f, 1.0f, bright_r, bright_g, bright_b); + + // clear the canvas + graphics.set_pen(0, 0, 0); + graphics.clear(); + + // render the lava + for(int y = 0; y < 16; y++) { + for(int x = 0; x < 16; x++) { + float v = liquid[x][y]; + + // select a colour for this pixel based on how much + // "blobfluence" there is at this position in the liquid + if(v >= 1.5f) { + graphics.set_pen(bright_r, bright_g, bright_b); + graphics.pixel(Point(y, x)); + }else if(v >= 1.25f) { + graphics.set_pen(mid_r, mid_g, mid_b); + graphics.pixel(Point(y, x)); + }else if(v >= 1.0f) { + graphics.set_pen(dark_r, dark_g, dark_b); + graphics.pixel(Point(y, x)); + } + } + } + + uint end_ms = to_ms_since_boot(get_absolute_time()); + + printf("rendering took %dms\n", end_ms - start_ms); + + stellar_unicorn.update(&graphics); + } + + return 0; +} diff --git a/examples/stellar_unicorn/stellar_rainbow.cpp b/examples/stellar_unicorn/stellar_rainbow.cpp new file mode 100644 index 00000000..f6e5e3a4 --- /dev/null +++ b/examples/stellar_unicorn/stellar_rainbow.cpp @@ -0,0 +1,184 @@ +#include +#include +#include +#include "pico/stdlib.h" + +#include "libraries/pico_graphics/pico_graphics.hpp" +#include "stellar_unicorn.hpp" + +using namespace pimoroni; + +PicoGraphics_PenRGB888 graphics(16, 16, nullptr); +StellarUnicorn stellar_unicorn; + +// HSV Conversion expects float inputs in the range of 0.00-1.00 for each channel +// Outputs are rgb in the range 0-255 for each channel +void from_hsv(float h, float s, float v, uint8_t &r, uint8_t &g, uint8_t &b) { + float i = floor(h * 6.0f); + float f = h * 6.0f - i; + v *= 255.0f; + uint8_t p = v * (1.0f - s); + uint8_t q = v * (1.0f - f * s); + uint8_t t = v * (1.0f - (1.0f - f) * s); + + switch (int(i) % 6) { + case 0: r = v; g = t; b = p; break; + case 1: r = q; g = v; b = p; break; + case 2: r = p; g = v; b = t; break; + case 3: r = p; g = q; b = v; break; + case 4: r = t; g = p; b = v; break; + case 5: r = v; g = p; b = q; break; + } +} + +void text(std::string t, Point p, float s = 1.0f, float a = 1.0f) { + int w = graphics.measure_text(t, s); + p.x += (53 / 2) - (w / 2); + p.y += (11 / 2); + graphics.text(t, Point(p.x, p.y), -1, s, a); + //graphics.text(t, Point(p.x + 1, p.y), -1, s, a); + //graphics.text(t, Point(p.x + 1, p.y + 1), -1, s, a); + //graphics.text(t, Point(p.x, p.y + 1), -1, s, a); +} + +struct star_t { + float dx, dy, x, y, a; + + uint8_t brightness() { + int b = a / 5; + return b > 15 ? 15 : b; + } +}; + +void init_star(star_t &s) { + s.x = ((rand() % 100) / 5.0f) - 10.0f; + s.y = ((rand() % 100) / 10.0f) - 5.0f; + + s.dx = s.x / 10.0f; + s.dy = s.y / 10.0f; + s.a = 0; +} + +void step_star(star_t &s) { + s.x += s.dx; + s.y += s.dy; + s.a++; + + if(s.a > 100) { + init_star(s); + } +} + + +int main() { + + stdio_init_all(); + + uint8_t hue_map[16][3]; + for(int i = 0; i < 16; i++) { + from_hsv(i / 16.0f, 1.0f, 1.0f, hue_map[i][0], hue_map[i][1], hue_map[i][2]); + } + + star_t stars[100]; + for(int i = 0; i < 100; i++) { + init_star(stars[i]); + stars[i].a = i; + } + + gpio_set_function(28, GPIO_FUNC_SIO); + gpio_set_dir(28, GPIO_OUT); + + for(int i = 0; i < 10; i++) { + gpio_put(28, !gpio_get(28)); + sleep_ms(100); + } + sleep_ms(1000); + + gpio_put(28,true); + + stellar_unicorn.init(); + + + + float i = 0; + + float hue_offset = 0.0f; + + bool animate = true; + + float stripe_width = 3.0f; + float speed = 1.0f; + float curve = 0.0f; + + while(true) { + + if(animate) { + i += speed; + } + + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_VOLUME_UP)) { + curve += 0.05; + if(hue_offset > 1.0f) hue_offset = 1.0f; + } + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_VOLUME_DOWN)) { + curve -= 0.05; + if(hue_offset < 0.0f) hue_offset = 0.0f; + } + + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_BRIGHTNESS_UP)) { + stellar_unicorn.adjust_brightness(+0.01); + } + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_BRIGHTNESS_DOWN)) { + stellar_unicorn.adjust_brightness(-0.01); + } + + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_SLEEP)) { + animate = false; + } + + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_A)) { + speed += 0.05f; + speed = speed >= 10.0f ? 10.0f : speed; + animate = true; + } + + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_B)) { + speed -= 0.05f; + speed = speed <= 0.0f ? 0.0f : speed; + animate = true; + } + + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_C)) { + stripe_width += 0.05f; + stripe_width = stripe_width >= 10.0f ? 10.0f : stripe_width; + } + + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_D)) { + stripe_width -= 0.05f; + stripe_width = stripe_width <= 1.0f ? 1.0f : stripe_width; + } + + for(int x = 0; x < 16; x++) { + for(int y = 0; y < 16; y++) { + int v = ((sin((x + y) / stripe_width + (sin((y * 3.1415927f * 2.0f) / 11.0f) * curve) + i / 15.0f) + 1.5f) / 2.5f) * 255.0f; + + uint8_t r = (hue_map[x][0] * v) / 256; + uint8_t g = (hue_map[x][1] * v) / 256; + uint8_t b = (hue_map[x][2] * v) / 256; + + graphics.set_pen(r, g, b); + graphics.pixel(Point(x, y)); + } + } + stellar_unicorn.update(&graphics); + + printf("%d\n", stellar_unicorn.light()); + sleep_ms(20); + } + + + + printf("done\n"); + + return 0; +} diff --git a/examples/stellar_unicorn/stellar_rainbow_text.cpp b/examples/stellar_unicorn/stellar_rainbow_text.cpp new file mode 100644 index 00000000..f7dc0e37 --- /dev/null +++ b/examples/stellar_unicorn/stellar_rainbow_text.cpp @@ -0,0 +1,102 @@ +#include +#include +#include +#include "pico/stdlib.h" + +#include "libraries/pico_graphics/pico_graphics.hpp" +#include "stellar_unicorn.hpp" + +using namespace pimoroni; + +PicoGraphics_PenRGB888 graphics(16, 16, nullptr); +StellarUnicorn stellar_unicorn; + +// HSV Conversion expects float inputs in the range of 0.00-1.00 for each channel +// Outputs are rgb in the range 0-255 for each channel +void from_hsv(float h, float s, float v, uint8_t &r, uint8_t &g, uint8_t &b) { + float i = floor(h * 6.0f); + float f = h * 6.0f - i; + v *= 255.0f; + uint8_t p = v * (1.0f - s); + uint8_t q = v * (1.0f - f * s); + uint8_t t = v * (1.0f - (1.0f - f) * s); + + switch (int(i) % 6) { + case 0: r = v; g = t; b = p; break; + case 1: r = q; g = v; b = p; break; + case 2: r = p; g = v; b = t; break; + case 3: r = p; g = q; b = v; break; + case 4: r = t; g = p; b = v; break; + case 5: r = v; g = p; b = q; break; + } +} + +void text(std::string t, Point p, float s = 1.0f, float a = 1.0f) { + int w = graphics.measure_text(t, s); + p.x += (16 / 2) - (w / 2); + p.y += (16 / 2); + graphics.text(t, Point(p.x, p.y), -1, s, a); + graphics.text(t, Point(p.x + 1, p.y), -1, s, a); + graphics.text(t, Point(p.x + 1, p.y + 1), -1, s, a); + graphics.text(t, Point(p.x, p.y + 1), -1, s, a); +} + + +int main() { + uint8_t hue_map[16][3]; + for(int i = 0; i < 16; i++) { + from_hsv(i / 16.0f, 1.0f, 0.5f, hue_map[i][0], hue_map[i][1], hue_map[i][2]); + } + + stellar_unicorn.init(); + + graphics.set_font("sans"); + uint i = 0; + + while(true) { + + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_BRIGHTNESS_UP)) { + stellar_unicorn.adjust_brightness(+0.01); + } + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_BRIGHTNESS_DOWN)) { + stellar_unicorn.adjust_brightness(-0.01); + } + + i++; + + graphics.set_pen(0, 0, 0); + graphics.clear(); + + float s = 0.4f;//0.65f + (sin(i / 25.0f) * 0.15f); + float a = 1.0f;// (sin(i / 25.0f) * 100.0f); + + float x = (sin((i) / 50.0f) * 45.0f); + float y = (cos((i) / 40.0f) * 2.5f); + graphics.set_pen(255, 255, 255); + text("Galactic Unicorn", Point(x, y), s, a); + uint8_t *p = (uint8_t *)graphics.frame_buffer; + for(size_t i = 0; i < 16 * 16; i++) { + int x = i % 16; + int y = i / 16; + uint r = *p++; + uint g = *p++; + uint b = *p++; + p++; + + if(r > 0) { + r = hue_map[x][0]; + g = hue_map[x][1]; + b = hue_map[x][2]; + } + + graphics.set_pen(r, g, b); + graphics.pixel(Point(x, y)); + } + + stellar_unicorn.update(&graphics); + } + + printf("done\n"); + + return 0; +} diff --git a/examples/stellar_unicorn/stellar_scroll_text.cpp b/examples/stellar_unicorn/stellar_scroll_text.cpp new file mode 100644 index 00000000..3df84a19 --- /dev/null +++ b/examples/stellar_unicorn/stellar_scroll_text.cpp @@ -0,0 +1,76 @@ +#include +#include +#include +#include "pico/stdlib.h" + +#include "libraries/pico_graphics/pico_graphics.hpp" +#include "stellar_unicorn.hpp" + +using namespace pimoroni; + +PicoGraphics_PenRGB888 graphics(16, 16, nullptr); +StellarUnicorn stellar_unicorn; + +std::string message = "Pirate. Monkey. Robot. Ninja."; + +// HSV Conversion expects float inputs in the range of 0.00-1.00 for each channel +// Outputs are rgb in the range 0-255 for each channel +void from_hsv(float h, float s, float v, uint8_t &r, uint8_t &g, uint8_t &b) { + float i = floor(h * 6.0f); + float f = h * 6.0f - i; + v *= 255.0f; + uint8_t p = v * (1.0f - s); + uint8_t q = v * (1.0f - f * s); + uint8_t t = v * (1.0f - (1.0f - f) * s); + + switch (int(i) % 6) { + case 0: r = v; g = t; b = p; break; + case 1: r = q; g = v; b = p; break; + case 2: r = p; g = v; b = t; break; + case 3: r = p; g = q; b = v; break; + case 4: r = t; g = p; b = v; break; + case 5: r = v; g = p; b = q; break; + } +} + + +int main() { + + stdio_init_all(); + + stellar_unicorn.init(); + + float scroll = -16.0f; + + while(true) { + //uint time_ms = to_ms_since_boot(get_absolute_time()); + + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_BRIGHTNESS_UP)) { + stellar_unicorn.adjust_brightness(+0.01); + } + if(stellar_unicorn.is_pressed(stellar_unicorn.SWITCH_BRIGHTNESS_DOWN)) { + stellar_unicorn.adjust_brightness(-0.01); + } + + int width = graphics.measure_text(message, 1); + scroll += 0.125f; + + if(scroll > width) { + scroll = -16.0f; + } + + graphics.set_pen(0, 0, 0); + graphics.clear(); + + uint8_t r = 0, g = 0, b = 0; + from_hsv(scroll / 100.0f, 1.0f, 0.5f, r, g, b); + graphics.set_pen(r, g, b); + graphics.text(message, Point(0 - scroll, 5), -1, 0.55); + + stellar_unicorn.update(&graphics); + + sleep_ms(10); + } + + return 0; +} diff --git a/libraries/stellar_unicorn/stellar_unicorn.cpp b/libraries/stellar_unicorn/stellar_unicorn.cpp index d1d8e30d..37f3534d 100644 --- a/libraries/stellar_unicorn/stellar_unicorn.cpp +++ b/libraries/stellar_unicorn/stellar_unicorn.cpp @@ -138,11 +138,11 @@ namespace pimoroni { // for each row: // for each bcd frame: - // 0: 00111111 // row pixel count (minus one) - // 1 - 64: xxxxxbgr, xxxxxbgr, xxxxxbgr, ... // pixel data - // 65 - 67: xxxxxxxx, xxxxxxxx, xxxxxxxx // dummy bytes to dword align - // 68: xxxrrrrr // row select bits - // 69 - 71: tttttttt, tttttttt, tttttttt // bcd tick count (0-65536) + // 0: 00011111 // row pixel count (minus one) + // 1 - 16: xxxxxbgr, xxxxxbgr, xxxxxbgr, ... // pixel data + // 17 - 19: xxxxxxxx, xxxxxxxx, xxxxxxxx // dummy bytes to dword align + // 20: xxxrrrrr // row select bits + // 21 - 23: tttttttt, tttttttt, tttttttt // bcd tick count (0-65536) // // .. and back to the start @@ -153,15 +153,15 @@ namespace pimoroni { // find the offset of this row and frame in the bitstream uint8_t *p = &bitstream[row * ROW_BYTES + (BCD_FRAME_BYTES * frame)]; - p[ 0] = 32 - 1; // row pixel count + p[ 0] = 16 - 1; // row pixel count p[ 1] = row; // row select // set the number of bcd ticks for this frame uint32_t bcd_ticks = (1 << frame); - p[36] = (bcd_ticks & 0xff) >> 0; - p[37] = (bcd_ticks & 0xff00) >> 8; - p[38] = (bcd_ticks & 0xff0000) >> 16; - p[39] = (bcd_ticks & 0xff000000) >> 24; + p[20] = (bcd_ticks & 0xff) >> 0; + p[21] = (bcd_ticks & 0xff00) >> 8; + p[22] = (bcd_ticks & 0xff0000) >> 16; + p[23] = (bcd_ticks & 0xff000000) >> 24; } } @@ -531,8 +531,8 @@ namespace pimoroni { if(graphics->pen_type == PicoGraphics::PEN_RGB888) { uint32_t *p = (uint32_t *)graphics->frame_buffer; - for(int y = 0; y < 32; y++) { - for(int x = 0; x < 32; x++) { + for(int y = 0; y < 16; y++) { + for(int x = 0; x < 16; x++) { uint32_t col = *p; uint8_t r = (col & 0xff0000) >> 16; uint8_t g = (col & 0x00ff00) >> 8; @@ -545,8 +545,8 @@ namespace pimoroni { } else if(graphics->pen_type == PicoGraphics::PEN_RGB565) { uint16_t *p = (uint16_t *)graphics->frame_buffer; - for(int y = 0; y < 32; y++) { - for(int x = 0; x < 32; x++) { + for(int y = 0; y < 16; y++) { + for(int x = 0; x < 16; x++) { uint16_t col = __builtin_bswap16(*p); uint8_t r = (col & 0b1111100000000000) >> 8; uint8_t g = (col & 0b0000011111100000) >> 3; @@ -562,8 +562,8 @@ namespace pimoroni { graphics->frame_convert(PicoGraphics::PEN_RGB888, [this, offset](void *data, size_t length) mutable { uint32_t *p = (uint32_t *)data; for(auto i = 0u; i < length / 4; i++) { - int x = offset % 32; - int y = offset / 32; + int x = offset % 16; + int y = offset / 16; uint32_t col = *p; uint8_t r = (col & 0xff0000) >> 16; diff --git a/libraries/stellar_unicorn/stellar_unicorn.hpp b/libraries/stellar_unicorn/stellar_unicorn.hpp index 10671ffb..2658f667 100644 --- a/libraries/stellar_unicorn/stellar_unicorn.hpp +++ b/libraries/stellar_unicorn/stellar_unicorn.hpp @@ -48,7 +48,7 @@ namespace pimoroni { private: static const uint32_t ROW_COUNT = 16; static const uint32_t BCD_FRAME_COUNT = 14; - static const uint32_t BCD_FRAME_BYTES = 40; + static const uint32_t BCD_FRAME_BYTES = 24; static const uint32_t ROW_BYTES = BCD_FRAME_COUNT * BCD_FRAME_BYTES; static const uint32_t BITSTREAM_LENGTH = (ROW_COUNT * ROW_BYTES); static const uint SYSTEM_FREQ = 22050; From 67152e32e5933a3fb861cdc825df19dc5e40f8ad Mon Sep 17 00:00:00 2001 From: ZodiusInfuser Date: Tue, 30 May 2023 12:42:27 +0100 Subject: [PATCH 06/10] Copied Cosmic MPy examples to Stellar --- .../cosmic_unicorn/feature_test_with_audio.py | 4 +- .../examples/stellar_unicorn/README.md | 178 ++ .../stellar_unicorn/cheerlights_history.py | 128 ++ micropython/examples/stellar_unicorn/clock.py | 229 +++ .../eighties_super_computer.py | 79 + .../stellar_unicorn/exchange_ticker.py | 148 ++ .../examples/stellar_unicorn/feature_test.py | 123 ++ .../feature_test_with_audio.py | 347 ++++ .../examples/stellar_unicorn/fire_effect.py | 102 ++ .../stellar_unicorn/http_text/html_text.py | 190 ++ .../stellar_unicorn/http_text/index.html | 102 ++ .../examples/stellar_unicorn/launch/fire.py | 80 + .../examples/stellar_unicorn/launch/main.py | 113 ++ .../stellar_unicorn/launch/rainbow.py | 59 + .../stellar_unicorn/launch/supercomputer.py | 40 + .../examples/stellar_unicorn/launch/today.py | 100 ++ .../examples/stellar_unicorn/lava_lamp.py | 151 ++ .../examples/stellar_unicorn/melody_maker.py | 131 ++ .../stellar_unicorn/nostalgia_prompt.py | 158 ++ .../numpy/eighties_super_computer.py | 115 ++ .../stellar_unicorn/numpy/fire_effect.py | 126 ++ .../stellar_unicorn/numpy/lava_lamp.py | 118 ++ .../examples/stellar_unicorn/numpy/life.py | 145 ++ .../stellar_unicorn/numpy/rgb_channels.py | 95 + .../stellar_unicorn/numpy/the_matrix.py | 89 + .../stellar_unicorn/numpy/this_is_fine.py | 131 ++ .../examples/stellar_unicorn/numpy/trippy.py | 97 + .../examples/stellar_unicorn/rainbow.py | 115 ++ .../stellar_unicorn/scrolling_text.py | 96 + .../stellar_unicorn/stellar_paint/README.md | 11 + .../stellar_paint/stellar_paint.py | 113 ++ .../stellar_paint/stellar_paint/index.html | 54 + .../stellar_paint/static/paint.css | 131 ++ .../stellar_paint/static/paint.js | 216 +++ .../stellar_paint/static/tinycolor.js | 1193 +++++++++++++ micropython/examples/stellar_unicorn/today.py | 128 ++ .../stellar_unicorn/weather/icons/cloud1.jpg | Bin 0 -> 1151 bytes .../stellar_unicorn/weather/icons/cloud2.jpg | Bin 0 -> 1579 bytes .../stellar_unicorn/weather/icons/cloud3.jpg | Bin 0 -> 1656 bytes .../stellar_unicorn/weather/icons/cloud4.jpg | Bin 0 -> 1656 bytes .../stellar_unicorn/weather/icons/rain1.jpg | Bin 0 -> 2053 bytes .../stellar_unicorn/weather/icons/rain2.jpg | Bin 0 -> 2100 bytes .../stellar_unicorn/weather/icons/rain3.jpg | Bin 0 -> 2091 bytes .../stellar_unicorn/weather/icons/rain4.jpg | Bin 0 -> 2053 bytes .../stellar_unicorn/weather/icons/snow1.jpg | Bin 0 -> 2128 bytes .../stellar_unicorn/weather/icons/snow2.jpg | Bin 0 -> 2196 bytes .../stellar_unicorn/weather/icons/snow3.jpg | Bin 0 -> 2223 bytes .../stellar_unicorn/weather/icons/snow4.jpg | Bin 0 -> 2169 bytes .../stellar_unicorn/weather/icons/storm1.jpg | Bin 0 -> 1360 bytes .../stellar_unicorn/weather/icons/storm2.jpg | Bin 0 -> 1692 bytes .../stellar_unicorn/weather/icons/storm3.jpg | Bin 0 -> 1835 bytes .../stellar_unicorn/weather/icons/storm4.jpg | Bin 0 -> 1703 bytes .../stellar_unicorn/weather/icons/sun1.jpg | Bin 0 -> 2273 bytes .../stellar_unicorn/weather/icons/sun2.jpg | Bin 0 -> 2193 bytes .../stellar_unicorn/weather/icons/sun3.jpg | Bin 0 -> 2269 bytes .../stellar_unicorn/weather/icons/sun4.jpg | Bin 0 -> 2194 bytes ...icons_sourcefile(doesn't need copying).svg | 1577 +++++++++++++++++ .../stellar_unicorn/weather/weather.py | 153 ++ 58 files changed, 7163 insertions(+), 2 deletions(-) create mode 100644 micropython/examples/stellar_unicorn/README.md create mode 100644 micropython/examples/stellar_unicorn/cheerlights_history.py create mode 100644 micropython/examples/stellar_unicorn/clock.py create mode 100644 micropython/examples/stellar_unicorn/eighties_super_computer.py create mode 100644 micropython/examples/stellar_unicorn/exchange_ticker.py create mode 100644 micropython/examples/stellar_unicorn/feature_test.py create mode 100644 micropython/examples/stellar_unicorn/feature_test_with_audio.py create mode 100644 micropython/examples/stellar_unicorn/fire_effect.py create mode 100644 micropython/examples/stellar_unicorn/http_text/html_text.py create mode 100644 micropython/examples/stellar_unicorn/http_text/index.html create mode 100644 micropython/examples/stellar_unicorn/launch/fire.py create mode 100644 micropython/examples/stellar_unicorn/launch/main.py create mode 100644 micropython/examples/stellar_unicorn/launch/rainbow.py create mode 100644 micropython/examples/stellar_unicorn/launch/supercomputer.py create mode 100644 micropython/examples/stellar_unicorn/launch/today.py create mode 100644 micropython/examples/stellar_unicorn/lava_lamp.py create mode 100644 micropython/examples/stellar_unicorn/melody_maker.py create mode 100644 micropython/examples/stellar_unicorn/nostalgia_prompt.py create mode 100644 micropython/examples/stellar_unicorn/numpy/eighties_super_computer.py create mode 100644 micropython/examples/stellar_unicorn/numpy/fire_effect.py create mode 100644 micropython/examples/stellar_unicorn/numpy/lava_lamp.py create mode 100644 micropython/examples/stellar_unicorn/numpy/life.py create mode 100644 micropython/examples/stellar_unicorn/numpy/rgb_channels.py create mode 100644 micropython/examples/stellar_unicorn/numpy/the_matrix.py create mode 100644 micropython/examples/stellar_unicorn/numpy/this_is_fine.py create mode 100644 micropython/examples/stellar_unicorn/numpy/trippy.py create mode 100644 micropython/examples/stellar_unicorn/rainbow.py create mode 100644 micropython/examples/stellar_unicorn/scrolling_text.py create mode 100644 micropython/examples/stellar_unicorn/stellar_paint/README.md create mode 100644 micropython/examples/stellar_unicorn/stellar_paint/stellar_paint.py create mode 100644 micropython/examples/stellar_unicorn/stellar_paint/stellar_paint/index.html create mode 100644 micropython/examples/stellar_unicorn/stellar_paint/stellar_paint/static/paint.css create mode 100644 micropython/examples/stellar_unicorn/stellar_paint/stellar_paint/static/paint.js create mode 100644 micropython/examples/stellar_unicorn/stellar_paint/stellar_paint/static/tinycolor.js create mode 100644 micropython/examples/stellar_unicorn/today.py create mode 100644 micropython/examples/stellar_unicorn/weather/icons/cloud1.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/cloud2.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/cloud3.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/cloud4.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/rain1.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/rain2.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/rain3.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/rain4.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/snow1.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/snow2.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/snow3.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/snow4.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/storm1.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/storm2.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/storm3.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/storm4.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/sun1.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/sun2.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/sun3.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons/sun4.jpg create mode 100644 micropython/examples/stellar_unicorn/weather/icons_sourcefile(doesn't need copying).svg create mode 100644 micropython/examples/stellar_unicorn/weather/weather.py diff --git a/micropython/examples/cosmic_unicorn/feature_test_with_audio.py b/micropython/examples/cosmic_unicorn/feature_test_with_audio.py index fdb89c6f..70fb2c1a 100644 --- a/micropython/examples/cosmic_unicorn/feature_test_with_audio.py +++ b/micropython/examples/cosmic_unicorn/feature_test_with_audio.py @@ -152,8 +152,6 @@ tone_b = 0 # The current synth beat beat = 0 -text = "" - def next_beat(): global beat @@ -312,6 +310,8 @@ while True: # print("white gradient") gradient(255, 255, 255) + text = "" + if cu.is_pressed(CosmicUnicorn.SWITCH_A): text = "PlaySyn" diff --git a/micropython/examples/stellar_unicorn/README.md b/micropython/examples/stellar_unicorn/README.md new file mode 100644 index 00000000..68cc1277 --- /dev/null +++ b/micropython/examples/stellar_unicorn/README.md @@ -0,0 +1,178 @@ +# Stellar Unicorn MicroPython Examples + +- [About Stellar Unicorn](#about-stellar-unicorn) +- [Stellar Unicorn and PicoGraphics](#stellar-unicorn-and-picographics) +- [Examples](#examples) + - [Clock](#clock) + - [Eighties Super Computer](#eighties-super-computer) + - [Feature Test](#feature-test) + - [Feature Test With Audio](#feature-test-with-audio) + - [Fire Effect](#fire-effect) + - [Lava Lamp](#lava-lamp) + - [Nostalgia Prompt](#nostalgia-prompt) + - [Rainbow](#rainbow) + - [Scrolling Text](#scrolling-text) + - [Today](#today) +- [Wireless Examples](#wireless-examples) + - [Cheerlights History](#cheerlights-history) + - [Stellar Paint](#stellar-paint) + - [Exchange Ticker](#exchange-ticker) + - [HTTP Text](#http-text) + - [Weather](#weather) +- [NumPy examples](#numpy-examples) +- [Other Examples](#other-examples) + - [Launch (Demo Reel)](#launch-demo-reel) +- [Other Resources](#other-resources) + +## About Stellar Unicorn + +Stellar Unicorn offers 16x16 bright RGB LEDs driven by Pico W's PIO in addition to a 1W amplifier + speaker, a collection of system and user buttons, and two Qw/ST connectors for adding external sensors and devices. Woha! + +- :link: [Stellar Unicorn store page](https://shop.pimoroni.com/products/stellar-unicorn) + +Stellar Unicorn ships with MicroPython firmware pre-loaded, but you can download the most recent version at the link below (you'll want the `stellar-unicorn` image). + +- [MicroPython releases](https://github.com/pimoroni/pimoroni-pico/releases) +- [Installing MicroPython](../../../setting-up-micropython.md) + +## Stellar Unicorn and PicoGraphics + +The easiest way to start displaying cool stuff on Stellar Unicorn is using our Stellar Unicorn module (which contains a bunch of helpful functions for interacting with the buttons, adjusting brightness and suchlike) and our PicoGraphics library, which is chock full of useful functions for drawing on the LED matrix. + +- [Stellar Unicorn function reference](../../modules/stellar_unicorn/README.md) +- [PicoGraphics function reference](../../modules/picographics/README.md) + +## Examples + +### Clock + +[clock.py](clock.py) + +Clock example with (optional) NTP synchronization. You can adjust the brightness with LUX + and -, and resync the time by pressing A. + +### Eighties Super Computer + +[eighties_super_computer.py](eighties_super_computer.py) + +Random LEDs blink on and off mimicing the look of a movie super computer doing its work in the eighties. You can adjust the brightness with LUX + and -. + +### Feature Test + +[feature_test.py](feature_test.py) + +Displays some text, gradients and colours and demonstrates button use. You can adjust the brightness with LUX + and -. + +### Feature Test With Audio + +[feature_test_with_audio.py](feature_test_with_audio.py) + +Displays some text, gradients and colours and demonstrates button use. Also demonstrates some of the audio / synth features. +- Button A plays a synth tune +- Button B plays a solo channel of the synth tune +- Button C plays a sinewave (it's frequency can be adjusted with VOL + and -) +- Button D plays a second sinewave (it's frequency can be adjusted with LUX + and -) +- Sleep button stops the sounds + +### Fire Effect + +[fire_effect.py](fire_effect.py) + +A pretty, procedural fire effect. Switch between landscape fire and vertical fire using the A and B buttons! You can adjust the brightness with LUX + and -. + +### Lava Lamp + +[lava_lamp.py](lava_lamp.py) + +A 70s-tastic, procedural rainbow lava lamp. You can adjust the brightness with LUX + and -. + +### Nostalgia Prompt + +[nostalgia_prompt.py](nostalgia_prompt.py) + +A collection of copies of classic terminal styles including C64, MS-DOS, Spectrum, and more. Images and text are drawn pixel by pixel from a pattern of Os and Xs. You can adjust the brightness with LUX + and -. + +### Rainbow + +[rainbow.py](rainbow.py) + +Some good old fashioned rainbows! You can adjust the cycling speed with A and B, stripe width with C and D, hue with VOL + and -, and the brightness with LUX + and -. The sleep button stops the animation (can be started again with A or B). + +### Scrolling Text + +[scrolling_text.py](scrolling_text.py) + +Display scrolling wisdom, quotes or greetz. You can adjust the brightness with LUX + and -. + +### Today + +[today.py](today.py) + +Calendar example with (optional) NTP synchronization. You can adjust the brightness with LUX + and -, and resync the date by pressing C. + +## Wireless Examples + +These examples need `WIFI_CONFIG.py` and `network_manager.py` (from the `common` directory) to be saved to your Pico W. Open up `WIFI_CONFIG.py` in Thonny to add your wifi details (and save it when you're done). + +- [micropython/examples/common](../../examples/common) + +### Cheerlights History + +[cheerlights_history.py](cheerlights_history.py) + +Updates one pixel every two minutes to display the most recent #Cheerlights colour. Discover the most popular colours over time, or use it as an avant garde (but colourful) 16 hour clock! Find out more about the Cheerlights API at https://cheerlights.com/ + +You can adjust the brightness with LUX + and -. + +### Stellar Paint + +[stellar_paint](stellar_paint) + +Draw on your Stellar Unicorn from another device in real time, over wifi! + +This example needs the `micropython-phew` and `microdot` libraries (you can install these using Thonny's 'Tools > Manage Packages'). + +### Exchange Ticker + +[exchange_ticker.py](exchange_ticker.py) + +This example uses the Coinbase open API to collect the current exchange rates of various cryptocurrencies. + +Press A to change to a different base exchange currency. + +### HTTP Text + +[http_text](http_text) + +Display scrolling wisdom, quotes or greetz... from another computer or device! + +You can adjust the brightness with LUX + and -. + +Requires `logging.mpy` and `tinyweb` from [micropython/examples/common](../../examples/common) - copy these into the `lib` folder on your Pico W. You'll also need `index.html` to be saved alongside `html_text.py`. + +### Weather + +[weather](weather) + +Display current weather data from the [Open-Meteo](https://open-meteo.com/) weather API. + +## NumPy examples + +[numpy](numpy) + +The examples in the folder use `numpy`-like array functions contained in the `ulab` library for super fast graphical effects. + +## Other Examples + +### Launch (Demo Reel) + +[launch](launch) + +If you want to get the demo reel that Stellar Unicorn ships with back, copy the contents of this `launch` folder to your Pico W. + +## Other Resources + +Here are some cool Stellar Unicorn community projects and resources that you might find useful / inspirational! Note that code at the links below has not been tested by us and we're not able to offer support with it. + +- :link: [Green Energy Display with Stellar Unicorn](https://www.hackster.io/andreas-motzek/clock-and-green-energy-display-with-stellar-unicorn-641dcb) +- :link: [stellar-emoji-react - paint emojis from a computer, phone or tablet](https://github.com/chriscareycode/stellar-unicorn/tree/main/stellar-emoji-react) +- :link: [stellar-paste - paste images from the clipboard to Stellar Unicorn](https://github.com/chriscareycode/stellar-unicorn/tree/main/stellar-paste) diff --git a/micropython/examples/stellar_unicorn/cheerlights_history.py b/micropython/examples/stellar_unicorn/cheerlights_history.py new file mode 100644 index 00000000..daf8c628 --- /dev/null +++ b/micropython/examples/stellar_unicorn/cheerlights_history.py @@ -0,0 +1,128 @@ +# This Stellar Unicorn example updates a pixel every two(ish) minutes +# to display the most recent #cheerlights colour. Discover the most popular +# colours over time, or use it as an avant garde (but colourful) 16 hour clock! +# Find out more about the Cheerlights API at https://cheerlights.com/ +# +# To run this example you'll need WIFI_CONFIG.py and network_manager.py from +# the pimoroni-pico micropython/examples/common folder + +import WIFI_CONFIG +from network_manager import NetworkManager +import uasyncio +import urequests +import time +from machine import Timer, Pin +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY + +URL = 'http://api.thingspeak.com/channels/1417/field/2/last.json' + +UPDATE_INTERVAL = 113 # refresh interval in secs. Be nice to free APIs! +# this esoteric number is used so that a column of LEDs equates (approximately) to an hour + + +def status_handler(mode, status, ip): + # reports wifi connection status + print(mode, status, ip) + print('Connecting to wifi...') + if status is not None: + if status: + print('Wifi connection successful!') + else: + print('Wifi connection failed!') + + +def hex_to_rgb(hex): + # converts a hex colour code into RGB + h = hex.lstrip('#') + r, g, b = (int(h[i:i + 2], 16) for i in (0, 2, 4)) + return r, g, b + + +def get_data(): + # open the json file + print(f'Requesting URL: {URL}') + r = urequests.get(URL) + # open the json data + j = r.json() + print('Data obtained!') + r.close() + + # flash the onboard LED after getting data + pico_led.value(True) + time.sleep(0.2) + pico_led.value(False) + + # extract hex colour from the json data + hex = j['field2'] + + # add the new hex colour to the end of the array + colour_array.append(hex) + print(f'Colour added to array: {hex}') + # remove the oldest colour in the array + colour_array.pop(0) + update_leds() + + +def update_leds(): + # light up the LEDs + # this step takes a second, it's doing a lot of hex_to_rgb calculations! + print("Updating LEDs...") + i = 0 + for x in range(width): + for y in range(height): + r, g, b = hex_to_rgb(colour_array[i]) + + current_colour = graphics.create_pen(r, g, b) + graphics.set_pen(current_colour) + graphics.pixel(x, y) + i = i + 1 + su.update(graphics) + print("LEDs updated!") + + +su = StellarUnicorn() +graphics = PicoGraphics(DISPLAY) + +width = StellarUnicorn.WIDTH +height = StellarUnicorn.HEIGHT + +su.set_brightness(0.5) + +# set up the Pico W's onboard LED +pico_led = Pin('LED', Pin.OUT) + +current_colour = graphics.create_pen(0, 0, 0) + +# set up an list to store the colours +colour_array = ["#000000"] * 1024 + +# set up wifi +try: + network_manager = NetworkManager(WIFI_CONFIG.COUNTRY, status_handler=status_handler) + uasyncio.get_event_loop().run_until_complete(network_manager.client(WIFI_CONFIG.SSID, WIFI_CONFIG.PSK)) +except Exception as e: + print(f'Wifi connection failed! {e}') + +# get the first lot of data +get_data() + +# start timer (the timer will call the function to update our data every UPDATE_INTERVAL) +timer = Timer(-1) +timer.init(period=UPDATE_INTERVAL * 1000, mode=Timer.PERIODIC, callback=lambda t: get_data()) + +while True: + # adjust brightness with LUX + and - + # LEDs take a couple of secs to update, so adjust in big (10%) steps + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.1) + update_leds() + print(f"Brightness set to {su.get_brightness()}") + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.1) + update_leds() + print(f"Brightness set to {su.get_brightness()}") + + # pause for a moment (important or the USB serial device will fail) + time.sleep(0.001) diff --git a/micropython/examples/stellar_unicorn/clock.py b/micropython/examples/stellar_unicorn/clock.py new file mode 100644 index 00000000..20339f1d --- /dev/null +++ b/micropython/examples/stellar_unicorn/clock.py @@ -0,0 +1,229 @@ +# Clock example with NTP synchronization +# +# Create a secrets.py with your Wifi details to be able to get the time +# when the Stellar Unicorn isn't connected to Thonny. +# +# secrets.py should contain: +# WIFI_SSID = "Your WiFi SSID" +# WIFI_PASSWORD = "Your WiFi password" +# +# Clock synchronizes time on start, and resynchronizes if you press the A button + +import time +import math +import machine +import network +import ntptime +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY + +try: + from secrets import WIFI_SSID, WIFI_PASSWORD + wifi_available = True +except ImportError: + print("Create secrets.py with your WiFi credentials to get time from NTP") + wifi_available = False + + +# constants for controlling the background colour throughout the day +MIDDAY_HUE = 1.1 +MIDNIGHT_HUE = 0.8 +HUE_OFFSET = -0.1 + +MIDDAY_SATURATION = 1.0 +MIDNIGHT_SATURATION = 1.0 + +MIDDAY_VALUE = 0.8 +MIDNIGHT_VALUE = 0.3 + + +# create stellar object and graphics surface for drawing +su = StellarUnicorn() +graphics = PicoGraphics(DISPLAY) + +# create the rtc object +rtc = machine.RTC() + +width = StellarUnicorn.WIDTH +height = StellarUnicorn.HEIGHT + +# set up some pens to use later +WHITE = graphics.create_pen(255, 255, 255) +BLACK = graphics.create_pen(0, 0, 0) + + +@micropython.native # noqa: F821 +def from_hsv(h, s, v): + i = math.floor(h * 6.0) + f = h * 6.0 - i + v *= 255.0 + p = v * (1.0 - s) + q = v * (1.0 - f * s) + t = v * (1.0 - (1.0 - f) * s) + + i = int(i) % 6 + if i == 0: + return int(v), int(t), int(p) + if i == 1: + return int(q), int(v), int(p) + if i == 2: + return int(p), int(v), int(t) + if i == 3: + return int(p), int(q), int(v) + if i == 4: + return int(t), int(p), int(v) + if i == 5: + return int(v), int(p), int(q) + + +# function for drawing a gradient background +def gradient_background(start_hue, start_sat, start_val, end_hue, end_sat, end_val): + half_width = width // 2 + for x in range(0, half_width): + hue = ((end_hue - start_hue) * (x / half_width)) + start_hue + sat = ((end_sat - start_sat) * (x / half_width)) + start_sat + val = ((end_val - start_val) * (x / half_width)) + start_val + colour = from_hsv(hue, sat, val) + graphics.set_pen(graphics.create_pen(int(colour[0]), int(colour[1]), int(colour[2]))) + for y in range(0, height): + graphics.pixel(x, y) + graphics.pixel(width - x - 1, y) + + colour = from_hsv(end_hue, end_sat, end_val) + graphics.set_pen(graphics.create_pen(int(colour[0]), int(colour[1]), int(colour[2]))) + for y in range(0, height): + graphics.pixel(half_width, y) + + +# function for drawing outlined text +def outline_text(text, x, y): + graphics.set_pen(BLACK) + graphics.text(text, x - 1, y - 1, -1, 1) + graphics.text(text, x, y - 1, -1, 1) + graphics.text(text, x + 1, y - 1, -1, 1) + graphics.text(text, x - 1, y, -1, 1) + graphics.text(text, x + 1, y, -1, 1) + graphics.text(text, x - 1, y + 1, -1, 1) + graphics.text(text, x, y + 1, -1, 1) + graphics.text(text, x + 1, y + 1, -1, 1) + + graphics.set_pen(WHITE) + graphics.text(text, x, y, -1, 1) + + +# Connect to wifi and synchronize the RTC time from NTP +def sync_time(): + if not wifi_available: + return + + # Start connection + wlan = network.WLAN(network.STA_IF) + wlan.active(True) + wlan.connect(WIFI_SSID, WIFI_PASSWORD) + + # Wait for connect success or failure + max_wait = 100 + while max_wait > 0: + if wlan.status() < 0 or wlan.status() >= 3: + break + max_wait -= 1 + print('waiting for connection...') + time.sleep(0.2) + + redraw_display_if_reqd() + su.update(graphics) + + if max_wait > 0: + print("Connected") + + try: + ntptime.settime() + print("Time set") + except OSError: + pass + + wlan.disconnect() + wlan.active(False) + + +# NTP synchronizes the time to UTC, this allows you to adjust the displayed time +# by one hour increments from UTC by pressing the volume up/down buttons +# +# We use the IRQ method to detect the button presses to avoid incrementing/decrementing +# multiple times when the button is held. +utc_offset = 0 + +up_button = machine.Pin(StellarUnicorn.SWITCH_VOLUME_UP, machine.Pin.IN, machine.Pin.PULL_UP) +down_button = machine.Pin(StellarUnicorn.SWITCH_VOLUME_DOWN, machine.Pin.IN, machine.Pin.PULL_UP) + + +def adjust_utc_offset(pin): + global utc_offset + if pin == up_button: + utc_offset += 1 + if pin == down_button: + utc_offset -= 1 + + +up_button.irq(trigger=machine.Pin.IRQ_FALLING, handler=adjust_utc_offset) +down_button.irq(trigger=machine.Pin.IRQ_FALLING, handler=adjust_utc_offset) + + +year, month, day, wd, hour, minute, second, _ = rtc.datetime() + +last_second = second + + +# Check whether the RTC time has changed and if so redraw the display +def redraw_display_if_reqd(): + global year, month, day, wd, hour, minute, second, last_second + + year, month, day, wd, hour, minute, second, _ = rtc.datetime() + if second != last_second: + hour = (hour + utc_offset) % 24 + time_through_day = (((hour * 60) + minute) * 60) + second + percent_through_day = time_through_day / 86400 + percent_to_midday = 1.0 - ((math.cos(percent_through_day * math.pi * 2) + 1) / 2) + print(percent_to_midday) + + hue = ((MIDDAY_HUE - MIDNIGHT_HUE) * percent_to_midday) + MIDNIGHT_HUE + sat = ((MIDDAY_SATURATION - MIDNIGHT_SATURATION) * percent_to_midday) + MIDNIGHT_SATURATION + val = ((MIDDAY_VALUE - MIDNIGHT_VALUE) * percent_to_midday) + MIDNIGHT_VALUE + + gradient_background(hue, sat, val, + hue + HUE_OFFSET, sat, val) + + clock = "{:02}:{:02}:{:02}".format(hour, minute, second) + + # calculate text position so that it is centred + w = graphics.measure_text(clock, 1) + x = int(width / 2 - w / 2 + 1) + y = 5 + + outline_text(clock, x, y) + + last_second = second + + +# set the font +graphics.set_font("bitmap6") +su.set_brightness(0.5) + +sync_time() + +while True: + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_A): + sync_time() + + redraw_display_if_reqd() + + # update the display + su.update(graphics) + + time.sleep(0.01) diff --git a/micropython/examples/stellar_unicorn/eighties_super_computer.py b/micropython/examples/stellar_unicorn/eighties_super_computer.py new file mode 100644 index 00000000..2036eef2 --- /dev/null +++ b/micropython/examples/stellar_unicorn/eighties_super_computer.py @@ -0,0 +1,79 @@ +import time +import random +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY + +''' +Random LEDs blink on and off mimicing the look of a movie +super computer doing its work in the eighties. + +You can adjust the brightness with LUX + and -. +''' + +su = StellarUnicorn() +graphics = PicoGraphics(DISPLAY) + +colour = (230, 150, 0) + + +@micropython.native # noqa: F821 +def setup(): + global width, height, lifetime, age + width = StellarUnicorn.WIDTH + height = StellarUnicorn.HEIGHT + lifetime = [[0.0 for y in range(height)] for x in range(width)] + age = [[0.0 for y in range(height)] for x in range(width)] + for y in range(height): + for x in range(width): + lifetime[x][y] = 1.0 + random.uniform(0.0, 0.1) + age[x][y] = random.uniform(0.0, 1.0) * lifetime[x][y] + + +@micropython.native # noqa: F821 +def draw(): + for y in range(height): + for x in range(width): + if age[x][y] < lifetime[x][y] * 0.3: + graphics.set_pen(graphics.create_pen(colour[0], colour[1], colour[2])) + elif age[x][y] < lifetime[x][y] * 0.5: + decay = (lifetime[x][y] * 0.5 - age[x][y]) * 5.0 + graphics.set_pen(graphics.create_pen(int(decay * colour[0]), int(decay * colour[1]), int(decay * colour[2]))) + else: + graphics.set_pen(0) + graphics.pixel(x, y) + + su.update(graphics) + + +@micropython.native # noqa: F821 +def update(): + for y in range(height): + for x in range(width): + if age[x][y] >= lifetime[x][y]: + age[x][y] = 0.0 + lifetime[x][y] = 1.0 + random.uniform(0.0, 0.1) + + age[x][y] += 0.025 + + +setup() + +su.set_brightness(0.5) + +while True: + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.01) + + start = time.ticks_ms() + + draw() + update() + + # pause for a moment (important or the USB serial device will fail) + time.sleep(0.001) + + print("total took: {} ms".format(time.ticks_ms() - start)) diff --git a/micropython/examples/stellar_unicorn/exchange_ticker.py b/micropython/examples/stellar_unicorn/exchange_ticker.py new file mode 100644 index 00000000..7448baa1 --- /dev/null +++ b/micropython/examples/stellar_unicorn/exchange_ticker.py @@ -0,0 +1,148 @@ +""" +This example uses the Coinbase open API to collect the current exchange rates. +Use Switch A to change to a different base exchange currency. +""" + +import WIFI_CONFIG +from network_manager import NetworkManager +import uasyncio +import urequests +import time +import math +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY +import gc + +URL = 'https://api.coinbase.com/v2/exchange-rates?currency={0}' + +currencies = {"Bitcoin": "BTC", "Ethereun": "ETH", "Pound": "GBP", "Dollar": "USD", "Dogecoin": "DOGE"} +currency_keys = list(currencies.keys()) + +ref_currency_name = "" +currency_name = "" +currency_symbol = "" +currency_rate = "" +rate_keys = [] + +# diplay options +line_1_line = -2 +line_2_line = 9 +line_3_line = 20 + +ref_currency_index = 0 + +cycles_per_sequence = 120 + +su = StellarUnicorn() +graphics = PicoGraphics(DISPLAY) + + +# for Handling the wifi connection +def status_handler(mode, status, ip): + # reports wifi connection status + print(mode, status, ip) + print('Connecting to wifi...') + if status is not None: + if status: + print('Wifi connection successful!') + else: + print('Wifi connection failed!') + + +try: + network_manager = NetworkManager(WIFI_CONFIG.COUNTRY, status_handler=status_handler) + uasyncio.get_event_loop().run_until_complete(network_manager.client(WIFI_CONFIG.SSID, WIFI_CONFIG.PSK)) +except Exception as e: + print(f'Wifi connection failed! {e}') + + +def get_data(currency_selected): + + graphics.set_pen(graphics.create_pen(20, 20, 20)) + graphics.clear() + graphics.set_pen(graphics.create_pen(100, 100, 100)) + graphics.text("Get", 0, 10, scale=1, spacing=1) + graphics.text("data", 8, 16, scale=1, spacing=1) + su.update(graphics) + gc.collect() + # open the json file + print('Requesting URL:') + print(URL.format(currencies[currency_selected])) + r = urequests.get(URL.format(currencies[currency_selected])) + gc.collect() + # open the json data + data_obj = r.json() + print('Data obtained!') + r.close() + return data_obj + + +def calculate_xpos(length, cycle): + cycle_phase = math.cos(math.pi * cycle / (cycles_per_sequence / 2)) + pos_x = int((-(length / 2) * 10) - (length / 2) * 10 * cycle_phase) + return pos_x + + +def update_display(cycle): + + graphics.set_pen(graphics.create_pen(20, 20, 20)) + graphics.clear() + graphics.set_pen(graphics.create_pen(100, 0, 0)) + graphics.text(ref_currency_name, calculate_xpos((len(ref_currency_name)), cycle), line_1_line, scale=2, spacing=1) + graphics.set_pen(graphics.create_pen(100, 100, 0)) + if len(currency_symbol) > 3: + graphics.text(currency_symbol, calculate_xpos((len(currency_symbol)), cycle), line_2_line, scale=2, spacing=1) + else: + graphics.text(currency_symbol, 0, line_2_line, scale=2, spacing=1) + graphics.set_pen(graphics.create_pen(0, 100, 100)) + graphics.text(currency_rate, calculate_xpos((len(currency_rate)), cycle), line_3_line, scale=2, spacing=1) + + +def update_base_currency(index): + fetched_data = 0 + global rates, rate_keys, currency_symbol, currency_rate, ref_currency_name + fetched_data = get_data(currency_keys[index]) + rates = fetched_data['data']['rates'] + rate_keys = list(rates.keys()) + currency_symbol = rate_keys[index] + currency_rate = str(rates[rate_keys[index]]) + ref_currency_name = "{0}-{1}".format(currency_keys[index], currencies[currency_keys[index]]) + gc.collect() + + +update_base_currency(ref_currency_index) +update_display(0) +su.update(graphics) +cycle_count = 0 +symbol_index = 0 +print("Display {0} {1}".format(currency_symbol, currency_rate)) + +while 1: + if cycle_count > 4 * cycles_per_sequence: + cycle_count = 0 + symbol_index += 1 + if symbol_index > len(currency_keys): + symbol_index = 0 + print("Display {0} {1}".format(currency_symbol, currency_rate)) + currency_symbol = rate_keys[symbol_index] + currency_rate = rates[rate_keys[symbol_index]] + + if (su.is_pressed(StellarUnicorn.SWITCH_A)): + ref_currency_index += 1 + if (ref_currency_index > len(currency_keys)): + ref_currency_index = 0 + update_base_currency(ref_currency_index) + + if (su.is_pressed(StellarUnicorn.SWITCH_B)): + cycle_count = 0 + symbol_index += 1 + + if symbol_index > len(rate_keys): + symbol_index = 0 + currency_symbol = rate_keys[symbol_index] + currency_rate = rates[rate_keys[symbol_index]] + + update_display(cycle_count) + su.update(graphics) + cycle_count += 1 + time.sleep(0.1) diff --git a/micropython/examples/stellar_unicorn/feature_test.py b/micropython/examples/stellar_unicorn/feature_test.py new file mode 100644 index 00000000..868d832b --- /dev/null +++ b/micropython/examples/stellar_unicorn/feature_test.py @@ -0,0 +1,123 @@ +import time +import math +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY + +''' +Displays some text, gradients and colours and demonstrates button use. + +You can adjust the brightness with LUX + and -. +''' + +su = StellarUnicorn() +graphics = PicoGraphics(DISPLAY) + +width = StellarUnicorn.WIDTH +height = StellarUnicorn.HEIGHT + + +def gradient(r, g, b): + for y in range(0, height): + for x in range(0, width): + graphics.set_pen(graphics.create_pen(int((r * x) / 16), int((g * x) / 16), int((b * x) / 16))) + graphics.pixel(x, y) + + +def grid(r, g, b): + for y in range(0, height): + for x in range(0, width): + if (x + y) % 2 == 0: + graphics.set_pen(graphics.create_pen(r, g, b)) + else: + graphics.set_pen(0) + graphics.pixel(x, y) + + +def outline_text(text): + ms = time.ticks_ms() + + graphics.set_font("bitmap8") + v = int((math.sin(ms / 100.0) + 1.0) * 127.0) + w = graphics.measure_text(text, 1) + + x = int(16 / 2 - w / 2 + 1) + y = 12 + + graphics.set_pen(0) + graphics.text(text, x - 1, y - 1, -1, 1) + graphics.text(text, x, y - 1, -1, 1) + graphics.text(text, x + 1, y - 1, -1, 1) + graphics.text(text, x - 1, y, -1, 1) + graphics.text(text, x + 1, y, -1, 1) + graphics.text(text, x - 1, y + 1, -1, 1) + graphics.text(text, x, y + 1, -1, 1) + graphics.text(text, x + 1, y + 1, -1, 1) + + graphics.set_pen(graphics.create_pen(v, v, v)) + graphics.text(text, x, y, -1, 1) + + +su.set_brightness(0.5) + +while True: + + time_ms = time.ticks_ms() + test = (time_ms // 1000) % 5 + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.01) + + graphics.set_pen(graphics.create_pen(0, 0, 0)) + graphics.clear() + + if test == 0: + print("grid pattern") + grid(255, 255, 255) + elif test == 1: + print("red gradient") + gradient(255, 0, 0) + elif test == 2: + print("green gradient") + gradient(0, 255, 0) + elif test == 3: + print("blue gradient") + gradient(0, 0, 255) + elif test == 4: + print("white gradient") + gradient(255, 255, 255) + + text = "" + + if su.is_pressed(StellarUnicorn.SWITCH_A): + text = "Button A" + + if su.is_pressed(StellarUnicorn.SWITCH_B): + text = "Button B" + + if su.is_pressed(StellarUnicorn.SWITCH_C): + text = "Button C" + + if su.is_pressed(StellarUnicorn.SWITCH_D): + text = "Button D" + + if su.is_pressed(StellarUnicorn.SWITCH_VOLUME_UP): + text = "Louder!" + + if su.is_pressed(StellarUnicorn.SWITCH_VOLUME_DOWN): + text = "Quieter" + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + text = "Brighter!" + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + text = "Darker" + + if su.is_pressed(StellarUnicorn.SWITCH_SLEEP): + text = "Zzz... zzz..." + + outline_text(text) + + su.update(graphics) diff --git a/micropython/examples/stellar_unicorn/feature_test_with_audio.py b/micropython/examples/stellar_unicorn/feature_test_with_audio.py new file mode 100644 index 00000000..1c67de43 --- /dev/null +++ b/micropython/examples/stellar_unicorn/feature_test_with_audio.py @@ -0,0 +1,347 @@ +import gc +import time +import math +from machine import Timer +from stellar import StellarUnicorn, Channel +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY + +''' +Displays some text, gradients and colours and demonstrates button use. +Also demonstrates some of the audio / synth features. + +- Button A plays a synth tune +- Button B plays a solo channel of the synth tune +- Button C plays a sinewave (it's frequency can be adjusted with VOL + and -) +- Button D plays a second sinewave (it's frequency can be adjusted with LUX + and -) +- Sleep button stops the sounds +''' + +gc.collect() + +su = StellarUnicorn() +graphics = PicoGraphics(DISPLAY) + +width = StellarUnicorn.WIDTH +height = StellarUnicorn.HEIGHT + +SONG_LENGTH = 384 +HAT = 20000 +BASS = 500 +SNARE = 6000 +SUB = 50 + +melody_notes = ( + 147, 0, 0, 0, 0, 0, 0, 0, 175, 0, 196, 0, 220, 0, 262, 0, 247, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 175, 0, 196, 0, 220, 0, 262, 0, 330, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 349, 0, 330, 0, 294, 0, 220, 0, 262, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 247, 0, 220, 0, 196, 0, 147, 0, 175, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, + 147, 0, 0, 0, 0, 0, 0, 0, 175, 0, 196, 0, 220, 0, 262, 0, 247, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 175, 0, 196, 0, 220, 0, 262, 0, 330, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 349, 0, 330, 0, 294, 0, 220, 0, 262, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 247, 0, 220, 0, 196, 0, 147, 0, 175, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, + 147, 0, 0, 0, 0, 0, 0, 0, 175, 0, 196, 0, 220, 0, 262, 0, 247, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 175, 0, 196, 0, 220, 0, 262, 0, 330, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 349, 0, 330, 0, 294, 0, 220, 0, 262, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 247, 0, 262, 0, 294, 0, 392, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + +rhythm_notes = ( + 294, 0, 440, 0, 587, 0, 440, 0, 294, 0, 440, 0, 587, 0, 440, 0, 294, 0, 440, 0, 587, 0, 440, 0, 294, 0, 440, 0, 587, 0, 440, 0, 294, 0, 440, 0, 587, 0, 440, 0, 294, 0, 440, 0, 587, 0, 440, 0, 392, 0, 523, 0, 659, 0, 523, 0, 392, 0, 523, 0, 659, 0, 523, 0, 698, 0, 587, 0, 440, 0, 587, 0, 698, 0, 587, 0, 440, 0, 587, 0, 523, 0, 440, 0, 330, 0, 440, 0, 523, 0, 440, 0, 330, 0, 440, 0, 349, 0, 294, 0, 220, 0, 294, 0, 349, 0, 294, 0, 220, 0, 294, 0, 262, 0, 247, 0, 220, 0, 175, 0, 165, 0, 147, 0, 131, 0, 98, 0, + 294, 0, 440, 0, 587, 0, 440, 0, 294, 0, 440, 0, 587, 0, 440, 0, 294, 0, 440, 0, 587, 0, 440, 0, 294, 0, 440, 0, 587, 0, 440, 0, 294, 0, 440, 0, 587, 0, 440, 0, 294, 0, 440, 0, 587, 0, 440, 0, 392, 0, 523, 0, 659, 0, 523, 0, 392, 0, 523, 0, 659, 0, 523, 0, 698, 0, 587, 0, 440, 0, 587, 0, 698, 0, 587, 0, 440, 0, 587, 0, 523, 0, 440, 0, 330, 0, 440, 0, 523, 0, 440, 0, 330, 0, 440, 0, 349, 0, 294, 0, 220, 0, 294, 0, 349, 0, 294, 0, 220, 0, 294, 0, 262, 0, 247, 0, 220, 0, 175, 0, 165, 0, 147, 0, 131, 0, 98, 0, + 294, 0, 440, 0, 587, 0, 440, 0, 294, 0, 440, 0, 587, 0, 440, 0, 294, 0, 440, 0, 587, 0, 440, 0, 294, 0, 440, 0, 587, 0, 440, 0, 294, 0, 440, 0, 587, 0, 440, 0, 294, 0, 440, 0, 587, 0, 440, 0, 392, 0, 523, 0, 659, 0, 523, 0, 392, 0, 523, 0, 659, 0, 523, 0, 698, 0, 587, 0, 440, 0, 587, 0, 698, 0, 587, 0, 440, 0, 587, 0, 523, 0, 440, 0, 330, 0, 440, 0, 523, 0, 440, 0, 330, 0, 440, 0, 349, 0, 294, 0, 220, 0, 294, 0, 349, 0, 294, 0, 220, 0, 294, 0, 262, 0, 247, 0, 220, 0, 175, 0, 165, 0, 147, 0, 131, 0, 98, 0) + +drum_beats = ( + BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, BASS, -1, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, 0, 0, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, BASS, -1, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, 0, 0, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, BASS, -1, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, 0, 0, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, BASS, -1, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, 0, 0, + BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, BASS, -1, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, 0, 0, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, BASS, -1, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, 0, 0, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, BASS, -1, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, 0, 0, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, BASS, -1, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, 0, 0, + BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, BASS, -1, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, 0, 0, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, BASS, -1, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, 0, 0, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, BASS, -1, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, 0, 0, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, BASS, -1, BASS, -1, 0, 0, 0, 0, 0, 0, SNARE, 0, -1, 0, 0, 0, 0, 0) + +hi_hat = ( + HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, + HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, + HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1, HAT, -1) + +bass_notes = ( + SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, SUB, -1, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, SUB, -1, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, SUB, -1, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, SUB, -1, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, + SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, SUB, -1, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, SUB, -1, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, SUB, -1, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, SUB, -1, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, + SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, SUB, -1, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, SUB, -1, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, SUB, -1, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, SUB, -1, SUB, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0) + +notes = [melody_notes, rhythm_notes, drum_beats, hi_hat, bass_notes] +channels = [su.synth_channel(i) for i in range(len(notes) + 1)] # Extra channel for tones + +# Configure the synth to play our notes +channels[0].configure(waveforms=Channel.TRIANGLE + Channel.SQUARE, + attack=0.016, + decay=0.168, + sustain=0xafff / 65535, + release=0.168, + volume=10000 / 65535) + +channels[1].configure(waveforms=Channel.SINE + Channel.SQUARE, + attack=0.038, + decay=0.300, + sustain=0, + release=0, + volume=12000 / 65535) + +channels[2].configure(waveforms=Channel.NOISE, + attack=0.005, + decay=0.010, + sustain=16000 / 65535, + release=0.100, + volume=18000 / 65535) + +channels[3].configure(waveforms=Channel.NOISE, + attack=0.005, + decay=0.005, + sustain=8000 / 65535, + release=0.040, + volume=8000 / 65535) + +channels[4].configure(waveforms=Channel.SQUARE, + attack=0.010, + decay=0.100, + sustain=0, + release=0.500, + volume=12000 / 65535) + + +def gradient(r, g, b): + for y in range(0, height): + for x in range(0, width): + graphics.set_pen(graphics.create_pen(int((r * x) / 52), int((g * x) / 52), int((b * x) / 52))) + graphics.pixel(x, y) + + +def grid(r, g, b): + for y in range(0, height): + for x in range(0, width): + if (x + y) % 2 == 0: + graphics.set_pen(graphics.create_pen(r, g, b)) + else: + graphics.set_pen(0) + graphics.pixel(x, y) + + +def outline_text(text): + ms = time.ticks_ms() + + graphics.set_font("bitmap6") + v = int((math.sin(ms / 100.0) + 1.0) * 127.0) + w = graphics.measure_text(text, 1) + + x = int(16 / 2 - w / 2 + 1) + y = 5 + + graphics.set_pen(0) + graphics.text(text, x - 1, y - 1, -1, 1) + graphics.text(text, x, y - 1, -1, 1) + graphics.text(text, x + 1, y - 1, -1, 1) + graphics.text(text, x - 1, y, -1, 1) + graphics.text(text, x + 1, y, -1, 1) + graphics.text(text, x - 1, y + 1, -1, 1) + graphics.text(text, x, y + 1, -1, 1) + graphics.text(text, x + 1, y + 1, -1, 1) + + graphics.set_pen(graphics.create_pen(v, v, v)) + graphics.text(text, x, y, -1, 1) + + +su.set_brightness(0.5) + +# Vars for storing button state +was_a_pressed = False +was_b_pressed = False +was_c_pressed = False +was_d_pressed = False +was_z_pressed = False + +# The two frequencies to play +tone_a = 0 +tone_b = 0 + +# The current synth beat +beat = 0 + + +def next_beat(): + global beat + for i in range(5): + if notes[i][beat] > 0: + channels[i].frequency(notes[i][beat]) + channels[i].trigger_attack() + elif notes[i][beat] == -1: + channels[i].trigger_release() + + beat = (beat + 1) % SONG_LENGTH + + +def tick(timer): + next_beat() + + +timer = Timer(-1) + +synthing = False + + +while True: + + time_ms = time.ticks_ms() + test = (time_ms // 1000) % 5 + + if su.is_pressed(StellarUnicorn.SWITCH_A): + if not was_a_pressed: + channels[0].volume(10000 / 65535) + channels[1].volume(12000 / 65535) + channels[2].volume(18000 / 65535) + channels[3].volume(8000 / 65535) + channels[4].volume(12000 / 65535) + channels[5].volume(0) + + # If the synth is not already playing, init the first beat + if not synthing: + beat = 0 + next_beat() + + su.play_synth() + synthing = True + timer.init(freq=10, mode=Timer.PERIODIC, callback=tick) + + was_a_pressed = True + else: + was_a_pressed = False + + if su.is_pressed(StellarUnicorn.SWITCH_B): + if not was_b_pressed: + channels[0].volume(0) + channels[1].volume(12000 / 65535) + channels[2].volume(0) + channels[3].volume(0) + channels[4].volume(0) + channels[5].volume(0) + + # If the synth is not already playing, init the first beat + if not synthing: + beat = 0 + next_beat() + + su.play_synth() + synthing = True + timer.init(freq=10, mode=Timer.PERIODIC, callback=tick) + + was_b_pressed = True + else: + was_b_pressed = False + + if su.is_pressed(StellarUnicorn.SWITCH_C): + if not was_c_pressed: + # Stop synth (if running) and play Tone A + timer.deinit() + tone_a = 400 + channels[5].play_tone(tone_a, 0.06) + channels[5].volume(12000 / 65535) + + su.play_synth() + synthing = False + + was_c_pressed = True + else: + was_c_pressed = False + + if su.is_pressed(StellarUnicorn.SWITCH_D): + if not was_d_pressed: + # Stop synth (if running) and play Tone B + timer.deinit() + tone_b = 600 + + channels[5].play_tone(tone_b, 0.06, attack=0.5) + channels[5].volume(12000 / 65535) + + su.play_synth() + synthing = False + + was_d_pressed = True + else: + was_d_pressed = False + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + if tone_b > 0: # Zero means tone not playing + # Increase Tone B + tone_b = min(tone_b + 10, 20000) + channels[5].frequency(tone_b) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + if tone_b > 0: # Zero means tone not playing + # Decrease Tone B + tone_b = max(tone_b - 10, 10) + channels[5].frequency(max(tone_b, 10)) + + if su.is_pressed(StellarUnicorn.SWITCH_VOLUME_UP): + if tone_a > 0: # Zero means tone not playing + # Increase Tone A + tone_a = min(tone_a + 10, 20000) + channels[5].frequency(tone_a) + + if su.is_pressed(StellarUnicorn.SWITCH_VOLUME_DOWN): + if tone_a > 0: # Zero means tone not playing + # Decrease Tone A + tone_a = max(tone_a - 10, 10) + channels[5].frequency(tone_a) + + if su.is_pressed(StellarUnicorn.SWITCH_SLEEP): + if not was_z_pressed: + # Stop synth and both tones + tone_a = 0 + tone_b = 0 + su.stop_playing() + timer.deinit() + synthing = False + + was_z_pressed = True + else: + was_z_pressed = False + + graphics.set_pen(graphics.create_pen(0, 0, 0)) + graphics.clear() + + if test == 0: + # print("grid pattern") + grid(255, 255, 255) + elif test == 1: + # print("red gradient") + gradient(255, 0, 0) + elif test == 2: + # print("green gradient") + gradient(0, 255, 0) + elif test == 3: + # print("blue gradient") + gradient(0, 0, 255) + elif test == 4: + # print("white gradient") + gradient(255, 255, 255) + + text = "" + + if su.is_pressed(StellarUnicorn.SWITCH_A): + text = "PlaySyn" + + if su.is_pressed(StellarUnicorn.SWITCH_B): + text = "SoloSyn" + + if su.is_pressed(StellarUnicorn.SWITCH_C): + text = "Tone A" + + if su.is_pressed(StellarUnicorn.SWITCH_D): + text = "Tone B" + + if su.is_pressed(StellarUnicorn.SWITCH_VOLUME_UP): + text = "RaiseA" + + if su.is_pressed(StellarUnicorn.SWITCH_VOLUME_DOWN): + text = "LowerA" + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + text = "RaiseB" + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + text = "LowerB" + + if su.is_pressed(StellarUnicorn.SWITCH_SLEEP): + text = "Stop" + + outline_text(text) + + su.update(graphics) + + # pause for a moment (important or the USB serial device will fail + time.sleep(0.001) diff --git a/micropython/examples/stellar_unicorn/fire_effect.py b/micropython/examples/stellar_unicorn/fire_effect.py new file mode 100644 index 00000000..d32d9c51 --- /dev/null +++ b/micropython/examples/stellar_unicorn/fire_effect.py @@ -0,0 +1,102 @@ +import time +import random +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY + +''' +A pretty, procedural fire effect. + +You can adjust the brightness with LUX + and -. +''' + +su = StellarUnicorn() +graphics = PicoGraphics(DISPLAY) + +fire_colours = [graphics.create_pen(0, 0, 0), + graphics.create_pen(20, 20, 20), + graphics.create_pen(180, 30, 0), + graphics.create_pen(220, 160, 0), + graphics.create_pen(255, 255, 180)] + + +@micropython.native # noqa: F821 +def update(): + # take local references as it's quicker than accessing the global + # and we access it a lot in this method + _heat = heat + + # clear the bottom row and then add a new fire seed to it + for x in range(width): + _heat[x][height - 1] = 0.0 + _heat[x][height - 2] = 0.0 + + for c in range(fire_spawns): + x = random.randint(0, width - 4) + 2 + _heat[x + 0][height - 1] = 1.0 + _heat[x + 1][height - 1] = 1.0 + _heat[x - 1][height - 1] = 1.0 + _heat[x + 0][height - 2] = 1.0 + _heat[x + 1][height - 2] = 1.0 + _heat[x - 1][height - 2] = 1.0 + + factor = damping_factor / 5.0 + for y in range(0, height - 2): + for x in range(1, width - 1): + _heat[x][y] += _heat[x][y + 1] + _heat[x][y + 2] + _heat[x - 1][y + 1] + _heat[x + 1][y + 1] + _heat[x][y] *= factor + + +@micropython.native # noqa: F821 +def draw(): + # take local references as it's quicker than accessing the global + # and we access it a lot in this method + _graphics = graphics + _heat = heat + _set_pen = graphics.set_pen + _pixel = graphics.pixel + _fire_colours = fire_colours + + for y in range(StellarUnicorn.HEIGHT): + for x in range(StellarUnicorn.WIDTH): + value = _heat[x + 1][y] + if value < 0.15: + _set_pen(_fire_colours[0]) + elif value < 0.25: + _set_pen(_fire_colours[1]) + elif value < 0.35: + _set_pen(_fire_colours[2]) + elif value < 0.45: + _set_pen(_fire_colours[3]) + else: + _set_pen(_fire_colours[4]) + _pixel(x, y) + + su.update(_graphics) + + +width = StellarUnicorn.WIDTH + 2 +height = StellarUnicorn.HEIGHT + 4 +heat = [[0.0 for y in range(height)] for x in range(width)] +fire_spawns = 5 +damping_factor = 0.97 + + +su.set_brightness(0.5) + +while True: + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.01) + + start = time.ticks_ms() + + update() + draw() + + print("total took: {} ms".format(time.ticks_ms() - start)) + + # pause for a moment (important or the USB serial device will fail) + time.sleep(0.001) diff --git a/micropython/examples/stellar_unicorn/http_text/html_text.py b/micropython/examples/stellar_unicorn/http_text/html_text.py new file mode 100644 index 00000000..dfd186af --- /dev/null +++ b/micropython/examples/stellar_unicorn/http_text/html_text.py @@ -0,0 +1,190 @@ +import time +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY +import WIFI_CONFIG +from network_manager import NetworkManager +import uasyncio as asyncio +import uasyncio.core +from tinyweb.server import webserver + +''' +Display scrolling wisdom, quotes or greetz... from the internetz! + +You can adjust the brightness with LUX + and -. + +Requires network_manager.py , WIFI_CONFIG.py, logging.mpy and tinyweb from micropython/examples/common +You'll also need index.html to be saved alongside this file. +''' + +# Server Settings +host = "0.0.0.0" +port = 80 + + +def convert_colour(colour_str): + colour_str = colour_str.split(',') + print(colour_str) + return colour_str[0], colour_str[1], colour_str[2] + + +class text: + + def get(self, data): + global MESSAGE, MESSAGE_COLOUR, BACKGROUND_COLOUR + print(data) + if 'text' in data.keys(): + MESSAGE = data['text'] + if 'colourfg' in data.keys(): + MESSAGE_COLOUR = convert_colour(data['colourfg']) + if 'colourbg' in data.keys(): + BACKGROUND_COLOUR = convert_colour(data['colourbg']) + return {'message': 'text updated'}, 201 + + def post(self, data): + + return {'message': 'text updated'}, 201 + + +def status_handler(mode, status, ip): + global MESSAGE + print("Network: {}".format(WIFI_CONFIG.SSID)) + status_text = "Connecting..." + if status is not None: + if status: + status_text = "Connection successful!" + else: + status_text = "Connection failed!" + + print(status_text) + print("IP: {}".format(ip)) + MESSAGE = "{}".format(ip) + + +# Create web server application +app = webserver() + + +# Index page +@app.route('/') +async def index(request, response): + # Send actual HTML page + await response.send_file('index.html', content_type='text/html') + + +# HTTP redirection +@app.route('/redirect') +async def redirect(request, response): + # Start HTTP response with content-type text/html + await response.redirect('/') + +# constants for controlling scrolling text +PADDING = 5 +MESSAGE_COLOUR = (255, 255, 255) +OUTLINE_COLOUR = (0, 0, 0) +BACKGROUND_COLOUR = (10, 0, 96) +MESSAGE = "Connecting" +HOLD_TIME = 2.0 +STEP_TIME = 0.075 + +# create galactic object and graphics surface for drawing +su = StellarUnicorn() +graphics = PicoGraphics(DISPLAY) + +width = StellarUnicorn.WIDTH +height = StellarUnicorn.HEIGHT + + +# function for drawing outlined text +def outline_text(text, x, y): + graphics.set_pen(graphics.create_pen(int(OUTLINE_COLOUR[0]), int(OUTLINE_COLOUR[1]), int(OUTLINE_COLOUR[2]))) + graphics.text(text, x - 1, y - 1, -1, 1) + graphics.text(text, x, y - 1, -1, 1) + graphics.text(text, x + 1, y - 1, -1, 1) + graphics.text(text, x - 1, y, -1, 1) + graphics.text(text, x + 1, y, -1, 1) + graphics.text(text, x - 1, y + 1, -1, 1) + graphics.text(text, x, y + 1, -1, 1) + graphics.text(text, x + 1, y + 1, -1, 1) + + graphics.set_pen(graphics.create_pen(int(MESSAGE_COLOUR[0]), int(MESSAGE_COLOUR[1]), int(MESSAGE_COLOUR[2]))) + graphics.text(text, x, y, -1, 1) + + +def run(): + # Setup wifi + network_manager = NetworkManager(WIFI_CONFIG.COUNTRY, status_handler=status_handler) + + app.add_resource(text, '/update') + + # Connect to Wifi network + asyncio.get_event_loop().run_until_complete(network_manager.client(WIFI_CONFIG.SSID, WIFI_CONFIG.PSK)) + while (not network_manager.isconnected()): + time.sleep(0.1) + + +su.set_brightness(0.5) + +# Start wifi connection +run() + + +async def message_update(): + global MESSAGE + last_time = time.ticks_ms() + STATE_PRE_SCROLL = 0 + STATE_SCROLLING = 1 + STATE_POST_SCROLL = 2 + + shift = 0 + state = STATE_PRE_SCROLL + + # set the font + graphics.set_font("bitmap8") + + # calculate the message width so scrolling can happen + msg_width = graphics.measure_text(MESSAGE, 1) + while 1: + + msg_width = graphics.measure_text(MESSAGE, 1) + time_ms = time.ticks_ms() + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.01) + + if state == STATE_PRE_SCROLL and time_ms - last_time > HOLD_TIME * 1000: + if msg_width + PADDING * 2 >= width: + state = STATE_SCROLLING + last_time = time_ms + + if state == STATE_SCROLLING and time_ms - last_time > STEP_TIME * 1000: + shift += 1 + if shift >= (msg_width + PADDING * 2) - width - 1: + state = STATE_POST_SCROLL + last_time = time_ms + + if state == STATE_POST_SCROLL and time_ms - last_time > HOLD_TIME * 1000: + state = STATE_PRE_SCROLL + shift = 0 + last_time = time_ms + + graphics.set_pen(graphics.create_pen(int(BACKGROUND_COLOUR[0]), int(BACKGROUND_COLOUR[1]), int(BACKGROUND_COLOUR[2]))) + graphics.clear() + + outline_text(MESSAGE, x=PADDING - shift, y=11) + + # update the display + su.update(graphics) + + # pause for a moment (important or the USB serial device will fail) + await asyncio.sleep(0.001) + + +# The following is required to run both the web server and the scrolling text coherently +app._server_coro = app._tcp_server(host, port, app.backlog) +loop = asyncio.get_event_loop() +t1 = loop.create_task(message_update()) +t2 = loop.create_task(app._server_coro) +loop.run_forever() diff --git a/micropython/examples/stellar_unicorn/http_text/index.html b/micropython/examples/stellar_unicorn/http_text/index.html new file mode 100644 index 00000000..890148ef --- /dev/null +++ b/micropython/examples/stellar_unicorn/http_text/index.html @@ -0,0 +1,102 @@ + + + + + + +

Stellar Unicorn Web Text

+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +

+ Please type in what you wish to be displayed on the Stellar Unicorn and whe you are ready hit update to update the display +

+ +
+ +
\ No newline at end of file diff --git a/micropython/examples/stellar_unicorn/launch/fire.py b/micropython/examples/stellar_unicorn/launch/fire.py new file mode 100644 index 00000000..5c0d90f2 --- /dev/null +++ b/micropython/examples/stellar_unicorn/launch/fire.py @@ -0,0 +1,80 @@ +import random +from stellar import StellarUnicorn + +graphics = None +palette = None + +# setup heat value buffer and fire parameters +width = StellarUnicorn.WIDTH + 2 +height = StellarUnicorn.HEIGHT + 4 +heat = [[0.0 for y in range(height)] for x in range(width)] +fire_spawns = 5 +damping_factor = 0.97 + + +def init(): + # a palette of five firey colours (white, yellow, orange, red, smoke) + global palette + palette = [ + graphics.create_pen(0, 0, 0), + graphics.create_pen(20, 20, 20), + graphics.create_pen(180, 30, 0), + graphics.create_pen(220, 160, 0), + graphics.create_pen(255, 255, 180) + ] + + +# returns the palette entry for a given heat value +@micropython.native # noqa: F821 +def pen_from_value(value): + if value < 0.15: + return palette[0] + elif value < 0.25: + return palette[1] + elif value < 0.35: + return palette[2] + elif value < 0.45: + return palette[3] + return palette[4] + + +@micropython.native # noqa: F821 +def draw(): + # clear the the rows off the bottom of the display + for x in range(width): + heat[x][height - 1] = 0.0 + heat[x][height - 2] = 0.0 + + # add new fire spawns + for c in range(fire_spawns): + x = random.randint(0, width - 4) + 2 + heat[x + 0][height - 1] = 1.0 + heat[x + 1][height - 1] = 1.0 + heat[x - 1][height - 1] = 1.0 + heat[x + 0][height - 2] = 1.0 + heat[x + 1][height - 2] = 1.0 + heat[x - 1][height - 2] = 1.0 + + # average and damp out each value to create rising flame effect + for y in range(0, height - 2): + for x in range(1, width - 1): + # update this pixel by averaging the below pixels + average = ( + heat[x][y] + heat[x][y + 1] + heat[x][y + 2] + heat[x - 1][y + 1] + heat[x + 1][y + 1] + ) / 5.0 + + # damping factor to ensure flame tapers out towards the top of the displays + average *= damping_factor + + # update the heat map with our newly averaged value + heat[x][y] = average + + # render the heat values to the graphics buffer + for y in range(StellarUnicorn.HEIGHT): + for x in range(StellarUnicorn.WIDTH): + graphics.set_pen(pen_from_value(heat[x + 1][y])) + graphics.pixel(x, y) + + +def test(): + print("A") diff --git a/micropython/examples/stellar_unicorn/launch/main.py b/micropython/examples/stellar_unicorn/launch/main.py new file mode 100644 index 00000000..f60d20e2 --- /dev/null +++ b/micropython/examples/stellar_unicorn/launch/main.py @@ -0,0 +1,113 @@ +import time +import machine +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY + +# overclock to 200Mhz +machine.freq(200000000) + +# create stellar object and graphics surface for drawing +stellar = StellarUnicorn() +graphics = PicoGraphics(DISPLAY) + +brightness = 0.5 + + +# returns the id of the button that is currently pressed or +# None if none are +def pressed(): + if stellar.is_pressed(StellarUnicorn.SWITCH_A): + return StellarUnicorn.SWITCH_A + if stellar.is_pressed(StellarUnicorn.SWITCH_B): + return StellarUnicorn.SWITCH_B + if stellar.is_pressed(StellarUnicorn.SWITCH_C): + return StellarUnicorn.SWITCH_C + if stellar.is_pressed(StellarUnicorn.SWITCH_D): + return StellarUnicorn.SWITCH_D + return None + + +# wait for a button to be pressed and load that effect +while True: + graphics.set_font("bitmap6") + graphics.set_pen(graphics.create_pen(0, 0, 0)) + graphics.clear() + graphics.set_pen(graphics.create_pen(155, 155, 155)) + graphics.text("PRESS", 3, 6, -1, 1) + graphics.text("A B C OR D!", 5, 14, 16, 1, 0) + + # brightness up/down + if stellar.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + brightness += 0.01 + if stellar.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + brightness -= 0.01 + brightness = max(min(brightness, 1.0), 0.0) + + stellar.set_brightness(brightness) + stellar.update(graphics) + + if pressed() == StellarUnicorn.SWITCH_A: + import fire as effect + break + if pressed() == StellarUnicorn.SWITCH_B: + import supercomputer as effect # noqa: F811 + break + if pressed() == StellarUnicorn.SWITCH_C: + import rainbow as effect # noqa: F811 + break + if pressed() == StellarUnicorn.SWITCH_D: + import today as effect # noqa: F811 + break + + # pause for a moment + time.sleep(0.01) + +# wait until all buttons are released +while pressed() is not None: + time.sleep(0.1) + +effect.graphics = graphics +effect.init() + +sleep = False +was_sleep_pressed = False + + +# wait +while True: + # if A, B, C, or D are pressed then reset + if pressed() is not None: + machine.reset() + + sleep_pressed = stellar.is_pressed(StellarUnicorn.SWITCH_SLEEP) + if sleep_pressed and not was_sleep_pressed: + sleep = not sleep + + was_sleep_pressed = sleep_pressed + + if sleep: + # fade out if screen not off + stellar.set_brightness(stellar.get_brightness() - 0.01) + + if stellar.get_brightness() > 0.0: + effect.draw() + + # update the display + stellar.update(graphics) + else: + effect.draw() + + # update the display + stellar.update(graphics) + + # brightness up/down + if stellar.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + brightness += 0.01 + if stellar.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + brightness -= 0.01 + brightness = max(min(brightness, 1.0), 0.0) + + stellar.set_brightness(brightness) + + # pause for a moment (important or the USB serial device will fail + time.sleep(0.001) diff --git a/micropython/examples/stellar_unicorn/launch/rainbow.py b/micropython/examples/stellar_unicorn/launch/rainbow.py new file mode 100644 index 00000000..637c6ee1 --- /dev/null +++ b/micropython/examples/stellar_unicorn/launch/rainbow.py @@ -0,0 +1,59 @@ +import math +from stellar import StellarUnicorn + +graphics = None +palette = None + +width = StellarUnicorn.WIDTH +height = StellarUnicorn.HEIGHT + + +@micropython.native # noqa: F821 +def from_hsv(h, s, v): + i = math.floor(h * 6.0) + f = h * 6.0 - i + v *= 255.0 + p = v * (1.0 - s) + q = v * (1.0 - f * s) + t = v * (1.0 - (1.0 - f) * s) + + i = int(i) % 6 + if i == 0: + return int(v), int(t), int(p) + if i == 1: + return int(q), int(v), int(p) + if i == 2: + return int(p), int(v), int(t) + if i == 3: + return int(p), int(q), int(v) + if i == 4: + return int(t), int(p), int(v) + if i == 5: + return int(v), int(p), int(q) + + +phase = 0 +hue_map = [from_hsv(x / width, 1.0, 1.0) for x in range(width)] +hue_offset = 0.0 +stripe_width = 3.0 +speed = 5.0 + + +def init(): + pass + + +@micropython.native # noqa: F821 +def draw(): + global hue_offset, phase + + phase += speed + + phase_percent = phase / 15 + for x in range(width): + colour = hue_map[int((x + (hue_offset * width)) % width)] + for y in range(height): + v = ((math.sin((x + y) / stripe_width + phase_percent) + 1.5) / 2.5) + + graphics.set_pen(graphics.create_pen(int(colour[0] * v), int(colour[1] * v), int(colour[2] * v))) + graphics.pixel(x, y) diff --git a/micropython/examples/stellar_unicorn/launch/supercomputer.py b/micropython/examples/stellar_unicorn/launch/supercomputer.py new file mode 100644 index 00000000..0f933483 --- /dev/null +++ b/micropython/examples/stellar_unicorn/launch/supercomputer.py @@ -0,0 +1,40 @@ +import random +from stellar import StellarUnicorn + +graphics = None + +colour = (230, 150, 0) + + +def init(): + global width, height, lifetime, age + width = StellarUnicorn.WIDTH + height = StellarUnicorn.HEIGHT + lifetime = [[0.0 for y in range(height)] for x in range(width)] + age = [[0.0 for y in range(height)] for x in range(width)] + for y in range(height): + for x in range(width): + lifetime[x][y] = 1.0 + random.uniform(0.0, 0.1) + age[x][y] = random.uniform(0.0, 1.0) * lifetime[x][y] + + +@micropython.native # noqa: F821 +def draw(): + for y in range(height): + for x in range(width): + if age[x][y] >= lifetime[x][y]: + age[x][y] = 0.0 + lifetime[x][y] = 1.0 + random.uniform(0.0, 0.1) + + age[x][y] += 0.025 + + for y in range(height): + for x in range(width): + if age[x][y] < lifetime[x][y] * 0.3: + graphics.set_pen(graphics.create_pen(colour[0], colour[1], colour[2])) + elif age[x][y] < lifetime[x][y] * 0.5: + decay = (lifetime[x][y] * 0.5 - age[x][y]) * 5.0 + graphics.set_pen(graphics.create_pen(int(decay * colour[0]), int(decay * colour[1]), int(decay * colour[2]))) + else: + graphics.set_pen(0) + graphics.pixel(x, y) diff --git a/micropython/examples/stellar_unicorn/launch/today.py b/micropython/examples/stellar_unicorn/launch/today.py new file mode 100644 index 00000000..8dfc576f --- /dev/null +++ b/micropython/examples/stellar_unicorn/launch/today.py @@ -0,0 +1,100 @@ +import time +import network +import ntptime +import machine + +# You will need to create or update the file secrets.py with your network credentials using Thonny +# in order for the example to update using the NTP. + +# secrets.py should contain: +# WIFI_SSID = "" +# WIFI_PASSWORD = "" + +try: + from secrets import WIFI_SSID, WIFI_PASSWORD +except ImportError: + print("Create secrets.py with your WiFi credentials") + +graphics = None + +WIDTH = 16 # StellarUnicorn.WIDTH +HEIGHT = 16 # StellarUnicorn.HEIGHT + +rtc = machine.RTC() + +DAYS = ["Mon", "Tue", "Wed", "Thur", "Fri", "Sat", "Sun"] + +# Enable the Wireless +wlan = network.WLAN(network.STA_IF) +wlan.active(True) + + +def network_connect(SSID, PSK): + + # Number of attempts to make before timeout + max_wait = 5 + + # Sets the Wireless LED pulsing and attempts to connect to your local network. + print("connecting...") + wlan.config(pm=0xa11140) # Turn WiFi power saving off for some slow APs + wlan.connect(SSID, PSK) + + while max_wait > 0: + if wlan.status() < 0 or wlan.status() >= 3: + break + max_wait -= 1 + print('waiting for connection...') + time.sleep(1) + + # Handle connection error. Switches the Warn LED on. + if wlan.status() != 3: + print("Unable to connect. Attempting connection again") + + +# Function to sync the Pico RTC using NTP +def sync_time(): + + try: + network_connect(WIFI_SSID, WIFI_PASSWORD) + except NameError: + print("Create secrets.py with your WiFi credentials") + + if wlan.status() < 0 or wlan.status() >= 3: + try: + ntptime.settime() + except OSError: + print("Unable to sync with NTP server. Check network and try again.") + + +def init(): + + sync_time() + + +def draw(): + + # Pens + RED = graphics.create_pen(120, 0, 0) + WHITE = graphics.create_pen(255, 255, 255) + + current_t = rtc.datetime() + + # Set the pen to Red and clear the screen. + graphics.set_pen(WHITE) + graphics.clear() + + # Measures the length of the text to help us with centring later. + day_length = graphics.measure_text(DAYS[current_t[3]], 1) + date_length = graphics.measure_text(str(current_t[2]), 3) + + graphics.set_font("bitmap6") + graphics.set_pen(RED) + graphics.rectangle(0, 0, WIDTH, 7) + graphics.set_pen(WHITE) + graphics.text(DAYS[current_t[3]], (WIDTH // 2) - (day_length // 2) - 1, 0, 16, 1) + + graphics.set_pen(RED) + graphics.set_font("bitmap8") + graphics.text(str(current_t[2]), (WIDTH // 2) - (date_length // 2) + 1, 9, 16, 3) + + graphics.set_pen(graphics.create_pen(0, 0, 0)) diff --git a/micropython/examples/stellar_unicorn/lava_lamp.py b/micropython/examples/stellar_unicorn/lava_lamp.py new file mode 100644 index 00000000..de8d4454 --- /dev/null +++ b/micropython/examples/stellar_unicorn/lava_lamp.py @@ -0,0 +1,151 @@ +import time +import random +import math +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY + +''' +A 70s-tastic, procedural rainbow lava lamp. + +You can adjust the brightness with LUX + and -. +''' + +su = StellarUnicorn() +graphics = PicoGraphics(DISPLAY) + +blob_count = 10 + + +class Blob(): + def __init__(self): + self.x = float(random.randint(0, width - 1)) + self.y = float(random.randint(0, height - 1)) + self.r = (float(random.randint(0, 40)) / 10.0) + 5.0 + self.dx = (float(random.randint(0, 2)) / 10.0) - 0.1 + self.dy = (float(random.randint(0, 2)) / 10.0) - 0.05 # positive bias + + +@micropython.native # noqa: F821 +def setup_portrait(): + global width, height, liquid, blobs + width = StellarUnicorn.HEIGHT + height = StellarUnicorn.WIDTH + liquid = [[0.0 for y in range(height)] for x in range(width)] + blobs = [Blob() for i in range(blob_count)] + + +hue = 0.0 + + +@micropython.native # noqa: F821 +def from_hsv(h, s, v): + i = math.floor(h * 6.0) + f = h * 6.0 - i + v *= 255.0 + p = v * (1.0 - s) + q = v * (1.0 - f * s) + t = v * (1.0 - (1.0 - f) * s) + + i = int(i) % 6 + if i == 0: + return graphics.create_pen(int(v), int(t), int(p)) + if i == 1: + return graphics.create_pen(int(q), int(v), int(p)) + if i == 2: + return graphics.create_pen(int(p), int(v), int(t)) + if i == 3: + return graphics.create_pen(int(p), int(q), int(v)) + if i == 4: + return graphics.create_pen(int(t), int(p), int(v)) + if i == 5: + return graphics.create_pen(int(v), int(p), int(q)) + + +@micropython.native # noqa: F821 +def update_liquid(): + for y in range(height): + for x in range(width): + liquid[x][y] = 0.0 + + for blob in blobs: + r_sq = blob.r * blob.r + blob_y_range = range(max(math.floor(blob.y - blob.r), 0), + min(math.ceil(blob.y + blob.r), height)) + blob_x_range = range(max(math.floor(blob.x - blob.r), 0), + min(math.ceil(blob.x + blob.r), width)) + + for y in blob_y_range: + for x in blob_x_range: + x_diff = x - blob.x + y_diff = y - blob.y + d_sq = x_diff * x_diff + y_diff * y_diff + if d_sq <= r_sq: + liquid[x][y] += 1.0 - (d_sq / r_sq) + + +@micropython.native # noqa: F821 +def move_blobs(): + for blob in blobs: + blob.x += blob.dx + blob.y += blob.dy + + if blob.x < 0.0 or blob.x >= float(width): + blob.dx = 0.0 - blob.dx + + if blob.y < 0.0 or blob.y >= float(height): + blob.dy = 0.0 - blob.dy + + +@micropython.native # noqa: F821 +def draw_portrait(): + global hue + hue += 0.001 + + dark = from_hsv(hue, 1.0, 0.3) + mid = from_hsv(hue, 1.0, 0.6) + bright = from_hsv(hue, 1.0, 1.0) + + for y in range(height): + for x in range(width): + v = liquid[x][y] + + # select a colour for this pixel based on how much + # "blobfluence" there is at this position in the liquid + if v >= 1.5: + graphics.set_pen(bright) + elif v >= 1.25: + graphics.set_pen(mid) + elif v >= 1.0: + graphics.set_pen(dark) + else: + graphics.set_pen(0) + graphics.pixel(y, x) + + su.update(graphics) + + +setup_portrait() + +su.set_brightness(0.5) + +while True: + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_A): + setup_portrait() + + start = time.ticks_ms() + + update_liquid() + move_blobs() + draw_portrait() + + # pause for a moment (important or the USB serial device will fail) + time.sleep(0.001) + + print("total took: {} ms".format(time.ticks_ms() - start)) diff --git a/micropython/examples/stellar_unicorn/melody_maker.py b/micropython/examples/stellar_unicorn/melody_maker.py new file mode 100644 index 00000000..ec808276 --- /dev/null +++ b/micropython/examples/stellar_unicorn/melody_maker.py @@ -0,0 +1,131 @@ +import time +import random +from stellar import StellarUnicorn, Channel +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN, PEN_P8 + +""" +A gloriously terrible melody maker. + +Use Vol + and Vol - to move up/down (note pitch) + +Use Lux - and D to move left/right (note position) + +Press A to set a note. + +Press B to delete a note. + +Use Lux + to play/pause. +""" + +NOTE_DURATION = 125 + +su = StellarUnicorn() +su.set_brightness(0.5) +graphics = PicoGraphics(DISPLAY_STELLAR_UNICORN, pen_type=PEN_P8) + +boopety_beepety = su.synth_channel(0) +boopety_beepety.configure( + waveforms=Channel.SQUARE | Channel.SINE, + attack=0.1, + decay=0.5, + sustain=0.0, + release=1.0, + volume=1.0 +) + +su.play_synth() + +black = graphics.create_pen(0, 0, 0) +note = graphics.create_pen(255, 255, 255) +cursor_bg = graphics.create_pen(64, 0, 0) +cursor = graphics.create_pen(255, 0, 0) +playhead = graphics.create_pen(0, 128, 0) + +cursor_position = [0, 0] + +playhead_position = 0 + +width, height = graphics.get_bounds() + +notes = [random.randint(0, height) for _ in range(width)] + +last_note_advance = time.ticks_ms() + +last_action = time.ticks_ms() + +playing = True + + +def debounce(button, duration=100): + global last_action + if su.is_pressed(button) and time.ticks_ms() - last_action > duration: + last_action = time.ticks_ms() + return True + return False + + +def note_to_frequency(note_number): + return int((2 ** ((note_number - 69.0) / 12)) * 440) + + +while True: + if debounce(StellarUnicorn.SWITCH_D): + cursor_position[0] -= 1 + cursor_position[0] %= width + + if debounce(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + cursor_position[0] += 1 + cursor_position[0] %= width + + if debounce(StellarUnicorn.SWITCH_VOLUME_DOWN): + cursor_position[1] += 1 + cursor_position[1] %= height + + if debounce(StellarUnicorn.SWITCH_VOLUME_UP): + cursor_position[1] -= 1 + cursor_position[1] %= height + + if debounce(StellarUnicorn.SWITCH_BRIGHTNESS_UP, 500): + playing = not playing + if not playing: + boopety_beepety.trigger_release() + + if su.is_pressed(StellarUnicorn.SWITCH_A): + notes[cursor_position[0]] = cursor_position[1] + + if su.is_pressed(StellarUnicorn.SWITCH_B): + notes[cursor_position[0]] = None + + if time.ticks_ms() - last_note_advance > NOTE_DURATION: + current_note = None + if playing: + playhead_position += 1 + playhead_position %= width + current_note = notes[playhead_position] + if current_note is not None: + current_note = height - current_note # Bottom = Low, Top = High + current_note += 36 # Shift up the scale a couple of octaves + current_freq = note_to_frequency(current_note) + boopety_beepety.frequency(current_freq) + boopety_beepety.trigger_attack() + last_note_advance = time.ticks_ms() + + graphics.set_pen(black) + graphics.clear() + + graphics.set_pen(playhead) + graphics.line(playhead_position, 0, playhead_position, height) + + graphics.set_pen(cursor_bg) + graphics.line(cursor_position[0], 0, cursor_position[0], height) + + graphics.set_pen(note) + for x in range(width): + y = notes[x] + if y is not None: + graphics.pixel(x, y) + + graphics.set_pen(cursor) + graphics.pixel(*cursor_position) + + su.update(graphics) diff --git a/micropython/examples/stellar_unicorn/nostalgia_prompt.py b/micropython/examples/stellar_unicorn/nostalgia_prompt.py new file mode 100644 index 00000000..8484f9ca --- /dev/null +++ b/micropython/examples/stellar_unicorn/nostalgia_prompt.py @@ -0,0 +1,158 @@ +import time +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY + +''' +A collection of copies of classic terminal styles including +C64, MS-DOS, Spectrum, and more. Images and text are drawn +pixel by pixel from a pattern of Os and Xs. +You can adjust the brightness with LUX + and -. +''' + +su = StellarUnicorn() +graphics = PicoGraphics(DISPLAY) + +prompt_x = 0 +prompt_y = 4 + +c64 = [ + " ", + " ", + " OOOOO OOOOOO OO OOOO ", + " OO OO OO OOOO OO OO ", + " OO OO OO OO OO OO OO ", + " OOOOO OOOO OOOOOO OO OO ", + " OOOO OO OO OO OO OO ", + " OO OO OO OO OO OO OO ", + " OO OO OOOOOO OO OO OOOO ", + " ", + " ", + " ", + " ", + " OO OO XXXXXXX ", + " OO OO XXXXXXX ", + " OO OO XXXXXXX ", + " OOOO XXXXXXX ", + " OO XXXXXXX ", + " OO OO XXXXXXX ", + " OO OO XXXXXXX ", + " XXXXXXX ", + " " +] +FOREGROUND_C64 = (230, 210, 250) +BACKGROUND_C64 = (20, 20, 120) + +spectrum = [ + " ", + " ", + " O OOOO OOOO OOOOO ", + " O O O O O O O ", + " O O O O O O O ", + " O O O OOOOOO O O ", + " O O O O O O O ", + " OOOOOO OOOO O O OOOOO ", + " ", + " ", + " ", + " ", + " ", + " O O O O XXXXXXXX ", + " O O O O X XXXXXX ", + " X XXXXXX ", + " X XXXXXX ", + " X XXXXXX ", + " X XXXXXX ", + " X X ", + " XXXXXXXX ", + " " +] +FOREGROUND_SPECTRUM = (0, 0, 0) +BACKGROUND_SPECTRUM = (180, 150, 150) + +bbc_micro = [ + " ", + " ", + " OOOOO OO OOOO OOO ", + " O O O O O O O ", + " O O O O O O ", + " OOOOO O O OOOO O ", + " O O OOOOOO O O ", + " O O O O O O O ", + " OOOOO O O OOOO OOO ", + " ", + " ", + " ", + " ", + " OOOO O ", + " O O O ", + " O O ", + " O O ", + " O O ", + " O O O ", + " OOOO O ", + " XXXXXXX ", + " " +] +FOREGROUND_BBC_MICRO = (255, 255, 255) +BACKGROUND_BBC_MICRO = (0, 0, 0) + +PROMPT_C64 = 0 +PROMPT_SPECTRUM = 1 +PROMPT_BBC_MICRO = 2 +prompt = 0 + + +@micropython.native # noqa: F821 +def draw(image, fg, bg, time_ms): + fg_pen = graphics.create_pen(fg[0], fg[1], fg[2]) + bg_pen = graphics.create_pen(bg[0], bg[1], bg[2]) + graphics.set_pen(bg_pen) + graphics.clear() + for y in range(len(image)): + row = image[y] + for x in range(len(row)): + pixel = row[x] + # draw the prompt text + if pixel == 'O': + graphics.set_pen(fg_pen) + + # draw the caret blinking + elif pixel == 'X' and (time_ms // 300) % 2: + graphics.set_pen(fg_pen) + + else: + graphics.set_pen(bg_pen) + + graphics.pixel(x + prompt_x, y + prompt_y) + + su.update(graphics) + + +su.set_brightness(0.5) + +while True: + + time_ms = time.ticks_ms() + prompt = (time_ms // 3000) % 3 + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.01) + + start = time.ticks_ms() + + if prompt == PROMPT_C64: + draw(c64, FOREGROUND_C64, BACKGROUND_C64, time_ms) + + elif prompt == PROMPT_SPECTRUM: + draw(spectrum, FOREGROUND_SPECTRUM, BACKGROUND_SPECTRUM, time_ms) + + elif prompt == PROMPT_BBC_MICRO: + draw(bbc_micro, FOREGROUND_BBC_MICRO, BACKGROUND_BBC_MICRO, time_ms) + + # pause for a moment (important or the USB serial device will fail) + time.sleep(0.001) + + print("total took: {} ms".format(time.ticks_ms() - start)) diff --git a/micropython/examples/stellar_unicorn/numpy/eighties_super_computer.py b/micropython/examples/stellar_unicorn/numpy/eighties_super_computer.py new file mode 100644 index 00000000..96ff4b8a --- /dev/null +++ b/micropython/examples/stellar_unicorn/numpy/eighties_super_computer.py @@ -0,0 +1,115 @@ +import gc +import time +import random +from stellar import StellarUnicorn, Channel +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN, PEN_P8 +from ulab import numpy + +""" +A random, computer effect. +Experiment with the damping, number of spawns and intensity to change the effect. +""" + +# MAXIMUM OVERKILL +# machine.freq(250_000_000) + +DAMPING_FACTOR = 0.95 +NUMBER_OF_LIGHTS = 10 +INTENSITY = 20 + +volume = 0.5 + +su = StellarUnicorn() +su.set_brightness(0.5) +graphics = PicoGraphics(DISPLAY_STELLAR_UNICORN, pen_type=PEN_P8) + +boopety_beepety = su.synth_channel(0) +boopety_beepety.configure( + waveforms=Channel.SQUARE | Channel.SINE, + attack=0.1, + decay=0.1, + sustain=0.0, + release=0.5, + volume=volume +) + +su.play_synth() + +# Fill palette with a yellow +r, g, b = (230, 150, 0) +PALETTE_ENTRIES = 255 +for x in range(PALETTE_ENTRIES): + _ = graphics.create_pen(r * x // PALETTE_ENTRIES, g * x // PALETTE_ENTRIES, b) + + +def update(): + computer[:] *= DAMPING_FACTOR + + # Spawn random drops + for _ in range(NUMBER_OF_LIGHTS): + x = random.randint(0, width - 1) + y = random.randint(0, height - 1) + computer[y][x] = random.randint(0, INTENSITY) + + +def draw(): + # Copy the effect to the framebuffer + memoryview(graphics)[:] = numpy.ndarray(numpy.clip(computer, 0, 1) * (PALETTE_ENTRIES - 1), dtype=numpy.uint8).tobytes() + su.update(graphics) + + +width = StellarUnicorn.WIDTH +height = StellarUnicorn.HEIGHT +computer = numpy.zeros((height, width)) + +t_count = 0 +t_total = 0 + + +while True: + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_VOLUME_DOWN): + volume -= 0.1 + volume = max(0.0, volume) + boopety_beepety.volume(volume) + + if su.is_pressed(StellarUnicorn.SWITCH_VOLUME_UP): + volume += 0.1 + volume = min(1.0, volume) + boopety_beepety.volume(volume) + + tstart = time.ticks_ms() + gc.collect() + update() + draw() + tfinish = time.ticks_ms() + + # Play random notes between 100 and 880Hz for a computery effect + boopety_beepety.frequency(random.randint(100, 880)) + boopety_beepety.trigger_attack() + + total = tfinish - tstart + t_total += total + t_count += 1 + + if t_count == 60: + per_frame_avg = t_total / t_count + print(f"60 frames in {t_total}ms, avg {per_frame_avg:.02f}ms per frame, {1000/per_frame_avg:.02f} FPS") + t_count = 0 + t_total = 0 + + # pause for a moment (important or the USB serial device will fail) + # try to pace at 60fps or 30fps + if total > 1000 / 30: + time.sleep(0.0001) + elif total > 1000 / 60: + t = 1000 / 30 - total + time.sleep(t / 1000) + else: + t = 1000 / 60 - total + time.sleep(t / 1000) diff --git a/micropython/examples/stellar_unicorn/numpy/fire_effect.py b/micropython/examples/stellar_unicorn/numpy/fire_effect.py new file mode 100644 index 00000000..6cbbc6b9 --- /dev/null +++ b/micropython/examples/stellar_unicorn/numpy/fire_effect.py @@ -0,0 +1,126 @@ +import time +import gc +import random +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN, PEN_P8 +from ulab import numpy + +""" +Classic fire effect. +Play with the number of spawns, heat, damping factor and colour palette to tweak it. +""" + +# MAXIMUM OVERKILL +# machine.freq(250_000_000) + +su = StellarUnicorn() +su.set_brightness(0.5) +graphics = PicoGraphics(DISPLAY_STELLAR_UNICORN, pen_type=PEN_P8) + +# Number of random fire spawns +FIRE_SPAWNS = 5 + +# Fire damping +DAMPING_FACTOR = 0.98 + +# TURN UP THE HEEEAAT +HEAT = 3.0 + +# Create the fire palette +""" +# Raging Gas Inferno +graphics.create_pen(0, 0, 0) +graphics.create_pen(0, 0, 0) +graphics.create_pen(20, 20, 20) +graphics.create_pen(50, 10, 0) +graphics.create_pen(180, 30, 0) +graphics.create_pen(220, 160, 0) +graphics.create_pen(255, 255, 180) +graphics.create_pen(255, 255, 220) +graphics.create_pen(90, 90, 255) +graphics.create_pen(255, 0, 255) +""" +# Original Colours +graphics.create_pen(0, 0, 0) +graphics.create_pen(20, 20, 20) +graphics.create_pen(180, 30, 0) +graphics.create_pen(220, 160, 0) +graphics.create_pen(255, 255, 180) + +PALETTE_SIZE = 5 # Should match the number of colours defined above + + +def update(): + # Clear the bottom two rows (off screen) + heat[height - 1][:] = 0.0 + heat[height - 2][:] = 0.0 + + # Add random fire spawns + for c in range(FIRE_SPAWNS): + x = random.randint(0, width - 4) + 2 + heat[height - 1][x - 1:x + 1] = HEAT / 2.0 + heat[height - 2][x - 1:x + 1] = HEAT + + # Propagate the fire upwards + a = numpy.roll(heat, -1, axis=0) # y + 1, x + b = numpy.roll(heat, -2, axis=0) # y + 2, x + c = numpy.roll(heat, -1, axis=0) # y + 1 + d = numpy.roll(c, 1, axis=1) # y + 1, x + 1 + e = numpy.roll(c, -1, axis=1) # y + 1, x - 1 + + # Average over 5 adjacent pixels and apply damping + heat[:] += a + b + d + e + heat[:] *= DAMPING_FACTOR / 5.0 + + +def draw(): + # Copy the fire effect to the framebuffer + # Clips the fire to 0.0 to 1.0 + # Multiplies it by the number of palette entries (-1) to turn it into a palette index + # Converts to uint8_t datatype to match the framebuffer + memoryview(graphics)[:] = numpy.ndarray(numpy.clip(heat[0:16, 0:16], 0, 1) * (PALETTE_SIZE - 1), dtype=numpy.uint8).tobytes() + su.update(graphics) + + +width = StellarUnicorn.WIDTH +height = StellarUnicorn.HEIGHT + 4 +heat = numpy.zeros((height, width)) + +t_count = 0 +t_total = 0 + +while True: + gc.collect() + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.01) + + tstart = time.ticks_ms() + gc.collect() + update() + draw() + tfinish = time.ticks_ms() + + total = tfinish - tstart + t_total += total + t_count += 1 + + if t_count == 60: + per_frame_avg = t_total / t_count + print(f"60 frames in {t_total}ms, avg {per_frame_avg:.02f}ms per frame, {1000/per_frame_avg:.02f} FPS") + t_count = 0 + t_total = 0 + + # pause for a moment (important or the USB serial device will fail) + # try to pace at 60fps or 30fps + if total > 1000 / 30: + time.sleep(0.0001) + elif total > 1000 / 60: + t = 1000 / 30 - total + time.sleep(t / 1000) + else: + t = 1000 / 60 - total + time.sleep(t / 1000) diff --git a/micropython/examples/stellar_unicorn/numpy/lava_lamp.py b/micropython/examples/stellar_unicorn/numpy/lava_lamp.py new file mode 100644 index 00000000..97d7de3f --- /dev/null +++ b/micropython/examples/stellar_unicorn/numpy/lava_lamp.py @@ -0,0 +1,118 @@ +import gc +import time +import math +import random +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN, PEN_P8 +from ulab import numpy + +""" +A lava lamp effect, created by blurred, moving particles. +""" + +# MAXIMUM OVERKILL +# machine.freq(250_000_000) + +su = StellarUnicorn() +graphics = PicoGraphics(DISPLAY_STELLAR_UNICORN, pen_type=PEN_P8) +su.set_brightness(0.5) + +width = StellarUnicorn.WIDTH +height = StellarUnicorn.HEIGHT +lava = numpy.zeros((height, width)) + + +class Blob(): + def __init__(self): + self.x = float(random.randint(0, width - 1)) + self.y = float(random.randint(0, height - 1)) + self.r = (float(random.randint(0, 40)) / 10.0) + 5.0 + self.dx = (float(random.randint(0, 2)) / 20.0) - 0.05 + self.dy = (float(random.randint(0, 2)) / 20.0) - 0.025 # positive bias + + def move(self): + self.x += self.dx + self.y += self.dy + + if self.x < 0.0 or self.x >= float(width): + self.x = max(0.0, self.x) + self.x = min(float(width - 1), self.x) + self.dx = -self.dx + + if self.y < 0.0 or self.y >= float(height): + self.y = max(0.0, self.y) + self.y = min(float(height - 1), self.y) + self.dy = -self.dy + + +blobs = [Blob() for _ in range(10)] + + +# Fill palette with a steep falloff from bright red to dark blue +PAL_COLS = 9 +for x in range(PAL_COLS): + graphics.create_pen_hsv(0.5 + math.log(x + 1, PAL_COLS + 1) / 2.0, 1.0, math.log(x + 1, PAL_COLS + 1)) + + +def update(): + # Update the blobs and draw them into the effect + for blob in blobs: + blob.move() + lava[int(blob.y)][int(blob.x)] = blob.r + + # Propogate the blobs outwards + a = numpy.roll(lava, 1, axis=0) + b = numpy.roll(lava, -1, axis=0) + d = numpy.roll(lava, 1, axis=1) + e = numpy.roll(lava, -1, axis=1) + + # Average over 5 adjacent pixels and apply damping + lava[:] += a + b + d + e + lava[:] *= 0.97 / 5.0 + + +def draw(): + # Copy the lava effect to the framebuffer + # Clips to 0.0 - 1.0 + # Multiplies by palette entries (-1) to turn it into a palette index + # Converts to uint8_t datatype to match the framebuffer + memoryview(graphics)[:] = numpy.ndarray(numpy.clip(lava, 0.0, 1.0) * (PAL_COLS - 1), dtype=numpy.uint8).tobytes() + su.update(graphics) + + +t_count = 0 +t_total = 0 + +while True: + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.01) + + tstart = time.ticks_ms() + gc.collect() + update() + draw() + tfinish = time.ticks_ms() + + total = tfinish - tstart + t_total += total + t_count += 1 + + if t_count == 60: + per_frame_avg = t_total / t_count + print(f"60 frames in {t_total}ms, avg {per_frame_avg:.02f}ms per frame, {1000/per_frame_avg:.02f} FPS") + t_count = 0 + t_total = 0 + + # pause for a moment (important or the USB serial device will fail) + # try to pace at 60fps or 30fps + if total > 1000 / 30: + time.sleep(0.0001) + elif total > 1000 / 60: + t = 1000 / 30 - total + time.sleep(t / 1000) + else: + t = 1000 / 60 - total + time.sleep(t / 1000) diff --git a/micropython/examples/stellar_unicorn/numpy/life.py b/micropython/examples/stellar_unicorn/numpy/life.py new file mode 100644 index 00000000..354c5165 --- /dev/null +++ b/micropython/examples/stellar_unicorn/numpy/life.py @@ -0,0 +1,145 @@ +import gc +import time +import random +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN, PEN_P8 +from ulab import numpy + +""" +A randomly-seeded game-of-life cellular automata effect. +Experiment with the values below to change the effect. + +Press "A" to manually re-seed. +""" + +# MAXIMUM OVERKILL +# machine.freq(250_000_000) + +INITIAL_LIFE = 500 # Number of live cells to seed +GENERATION_TIME_MS = 50 # MS between generations +MINIMUM_LIFE = 10 # Auto reseed when only this many alive cells remain +SMOOTHED = True # Enable for a more organic if somewhat unsettling feel + +DECAY = 0.90 # Rate at which smoothing effect decays, higher number = more persistent, 1.0 = no decay +TENACITY = 32 # Rate at which smoothing effect increases + +su = StellarUnicorn() +su.set_brightness(0.5) +graphics = PicoGraphics(DISPLAY_STELLAR_UNICORN, pen_type=PEN_P8) + +for c in range(256): + graphics.create_pen(c // 2, 0, c) + + +def update(): + global last_gen + + if SMOOTHED: + duration[:] += life * TENACITY + duration[:] *= DECAY + + if time.ticks_ms() - last_gen < GENERATION_TIME_MS: + return + + last_gen = time.ticks_ms() + + if numpy.sum(life) < MINIMUM_LIFE: + seed_life() + return + + # Rollin' rollin' rollin. + _N = numpy.roll(life, -1, axis=0) + _NW = numpy.roll(_N, -1, axis=1) + _NE = numpy.roll(_N, 1, axis=1) + _S = numpy.roll(life, 1, axis=0) + _SW = numpy.roll(_S, -1, axis=1) + _SE = numpy.roll(_S, 1, axis=1) + _W = numpy.roll(life, -1, axis=1) + _E = numpy.roll(life, 1, axis=1) + + # Compute the total neighbours for each cell + neighbours[:] = _N + _NW + _NE + _S + _SW + _SE + _W + _E + + next_generation[:] = life[:] + + # Any cells with exactly three neighbours should always stay alive + next_generation[:] += neighbours[:] == 3 + + # Any alive cells with less than two neighbours should die + next_generation[:] -= (neighbours[:] < 2) * life + + # Any alive cells with more than three neighbours should die + next_generation[:] -= (neighbours[:] > 3) * life + + life[:] = numpy.clip(next_generation, 0, 1) + + +def draw(): + # Copy the effect to the framebuffer + if SMOOTHED: + memoryview(graphics)[:] = numpy.ndarray(numpy.clip(duration, 0, 255), dtype=numpy.uint8).tobytes() + else: + memoryview(graphics)[:] = numpy.ndarray(life * 255, dtype=numpy.uint8).tobytes() + su.update(graphics) + + +def seed_life(): + for _ in range(INITIAL_LIFE): + x = random.randint(0, width - 1) + y = random.randint(0, height - 1) + life[y][x] = int(True) # Avoid: TypeError: 'bool' object isn't iterable + + +width = StellarUnicorn.WIDTH +height = StellarUnicorn.HEIGHT +life = numpy.zeros((height, width), dtype=numpy.bool) +next_generation = numpy.zeros((height, width), dtype=numpy.bool) +neighbours = numpy.zeros((height, width), dtype=numpy.uint8) +duration = numpy.zeros((height, width)) +last_gen = time.ticks_ms() + +t_count = 0 +t_total = 0 + +seed_life() + + +while True: + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_A): + life[:] = int(False) + + if su.is_pressed(StellarUnicorn.SWITCH_B): + SMOOTHED = not SMOOTHED + + tstart = time.ticks_ms() + gc.collect() + update() + draw() + tfinish = time.ticks_ms() + + total = tfinish - tstart + t_total += total + t_count += 1 + + if t_count == 60: + per_frame_avg = t_total / t_count + print(f"60 frames in {t_total}ms, avg {per_frame_avg:.02f}ms per frame, {1000/per_frame_avg:.02f} FPS") + t_count = 0 + t_total = 0 + + # pause for a moment (important or the USB serial device will fail) + # try to pace at 60fps or 30fps + if total > 1000 / 30: + time.sleep(0.0001) + elif total > 1000 / 60: + t = 1000 / 30 - total + time.sleep(t / 1000) + else: + t = 1000 / 60 - total + time.sleep(t / 1000) diff --git a/micropython/examples/stellar_unicorn/numpy/rgb_channels.py b/micropython/examples/stellar_unicorn/numpy/rgb_channels.py new file mode 100644 index 00000000..44d6ce72 --- /dev/null +++ b/micropython/examples/stellar_unicorn/numpy/rgb_channels.py @@ -0,0 +1,95 @@ +import gc +import time +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN, PEN_RGB888 +from ulab import numpy + +""" +This example demonstrates how to work with full RGB888 colour in ulab/numpy. + +Each colour channel is given its own array, and these are combined before +copying them into the PicoGraphics buffer. + +At great cost to performance (about half the speed) this example works in +floating point 0.0 to 1.0 and converts the result to 8bits per channel. +""" + +# MAXIMUM OVERKILL +# machine.freq(250_000_000) + +su = StellarUnicorn() +su.set_brightness(0.5) +graphics = PicoGraphics(DISPLAY_STELLAR_UNICORN, pen_type=PEN_RGB888) + + +def update(): + # Do something basic with the colour channels + # to prove this actually works. + red[:] = numpy.roll(red, 1, axis=1) + green[:] *= 0.999 # Slowly desaturate green + blue[:] *= 1.001 # Slowly saturate blue + + +def draw(): + # Copy the red, green, blue channels into + # their respective places in the RGB_ array + rgb[2::4] = red.flatten() + rgb[1::4] = green.flatten() + rgb[0::4] = blue.flatten() + + # Convert the results to 8bit RGB and copy to the framebuffer + memoryview(graphics)[:] = numpy.ndarray(numpy.clip(rgb, 0, 1) * 255, dtype=numpy.uint8).tobytes() + + # Copy the framebuffer to Stellar + su.update(graphics) + # Whew! + + +width, height = graphics.get_bounds() + +# Individual channels +red = numpy.zeros((height, width)) +green = numpy.zeros((height, width)) +blue = numpy.zeros((height, width)) + +# Reserved for combined channels +rgb = numpy.zeros((width * height * 4),) + +# Stick some gradients in the channels so we have something to look at +red[::] = numpy.linspace(0, 1, width) + +# There has to be a better way!? +for x in range(width): + green[::, x] = numpy.linspace(0, 1, width) + blue[::, x] = numpy.linspace(1, 0, width,) + +t_count = 0 +t_total = 0 + +while True: + tstart = time.ticks_ms() + gc.collect() + update() + draw() + tfinish = time.ticks_ms() + + total = tfinish - tstart + t_total += total + t_count += 1 + + if t_count == 60: + per_frame_avg = t_total / t_count + print(f"60 frames in {t_total}ms, avg {per_frame_avg:.02f}ms per frame, {1000/per_frame_avg:.02f} FPS") + t_count = 0 + t_total = 0 + + # pause for a moment (important or the USB serial device will fail) + # try to pace at 60fps or 30fps + if total > 1000 / 30: + time.sleep(0.0001) + elif total > 1000 / 60: + t = 1000 / 30 - total + time.sleep(t / 1000) + else: + t = 1000 / 60 - total + time.sleep(t / 1000) diff --git a/micropython/examples/stellar_unicorn/numpy/the_matrix.py b/micropython/examples/stellar_unicorn/numpy/the_matrix.py new file mode 100644 index 00000000..b16f3a96 --- /dev/null +++ b/micropython/examples/stellar_unicorn/numpy/the_matrix.py @@ -0,0 +1,89 @@ +import gc +import time +import random +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN, PEN_P8 +from ulab import numpy + +""" +HELLO NEO. +""" + +# MAXIMUM OVERKILL +# machine.freq(250_000_000) + +su = StellarUnicorn() +su.set_brightness(1.0) +graphics = PicoGraphics(DISPLAY_STELLAR_UNICORN, pen_type=PEN_P8) + + +# Fill half the palette with GREEEN +for g in range(128): + _ = graphics.create_pen(0, g, 0) + +# And half with bright green for white sparkles +for g in range(128): + _ = graphics.create_pen(128, 128 + g, 128) + + +def update(): + trippy[:] *= 0.65 + + for _ in range(2): + x = random.randint(0, width - 1) + y = random.randint(0, height // 2) + trippy[y][x] = random.randint(128, 255) / 255.0 + + # Propagate downwards + old = numpy.ndarray(trippy) * 0.5 + trippy[:] = numpy.roll(trippy, 1, axis=0) + trippy[:] += old + + +def draw(): + # Copy the effect to the framebuffer + memoryview(graphics)[:] = numpy.ndarray(numpy.clip(trippy, 0, 1) * 254, dtype=numpy.uint8).tobytes() + su.update(graphics) + + +width = StellarUnicorn.WIDTH +height = StellarUnicorn.HEIGHT +trippy = numpy.zeros((height, width)) + +t_count = 0 +t_total = 0 + + +while True: + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.01) + + tstart = time.ticks_ms() + gc.collect() + update() + draw() + tfinish = time.ticks_ms() + + total = tfinish - tstart + t_total += total + t_count += 1 + + if t_count == 60: + per_frame_avg = t_total / t_count + print(f"60 frames in {t_total}ms, avg {per_frame_avg:.02f}ms per frame, {1000/per_frame_avg:.02f} FPS") + t_count = 0 + t_total = 0 + + # pause for a moment (important or the USB serial device will fail) + # try to pace at 60fps or 30fps + if total > 1000 / 30: + time.sleep(0.0001) + elif total > 1000 / 60: + t = 1000 / 30 - total + time.sleep(t / 1000) + else: + t = 1000 / 60 - total + time.sleep(t / 1000) diff --git a/micropython/examples/stellar_unicorn/numpy/this_is_fine.py b/micropython/examples/stellar_unicorn/numpy/this_is_fine.py new file mode 100644 index 00000000..0af42d75 --- /dev/null +++ b/micropython/examples/stellar_unicorn/numpy/this_is_fine.py @@ -0,0 +1,131 @@ +import time +import gc +import random +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN, PEN_P8 +from ulab import numpy + +""" +THIS IS FINE! +""" + +# MAXIMUM OVERKILL +# machine.freq(250_000_000) + +su = StellarUnicorn() +su.set_brightness(0.5) +graphics = PicoGraphics(DISPLAY_STELLAR_UNICORN, pen_type=PEN_P8) + +# Number of random fire spawns +FIRE_SPAWNS = 5 + +# Fire damping +DAMPING_FACTOR = 0.98 + +# TURN UP THE HEEEAAT +HEAT = 3.0 + +# Create the fire palette +""" +# Raging Gas Inferno +graphics.create_pen(0, 0, 0) +graphics.create_pen(0, 0, 0) +graphics.create_pen(20, 20, 20) +graphics.create_pen(50, 10, 0) +graphics.create_pen(180, 30, 0) +graphics.create_pen(220, 160, 0) +graphics.create_pen(255, 255, 180) +graphics.create_pen(255, 255, 220) +graphics.create_pen(90, 90, 255) +graphics.create_pen(255, 0, 255) +""" +# Original Colours +graphics.create_pen(0, 0, 0) +graphics.create_pen(20, 20, 20) +graphics.create_pen(180, 30, 0) +graphics.create_pen(220, 160, 0) +graphics.create_pen(255, 255, 180) + +PALETTE_SIZE = 5 # Should match the number of colours defined above + + +def update(): + # Clear the bottom two rows (off screen) + heat[height - 1][:] = 0.0 + heat[height - 2][:] = 0.0 + + # Add random fire spawns + for c in range(FIRE_SPAWNS): + x = random.randint(0, width - 4) + 2 + heat[height - 1][x - 1:x + 1] = HEAT / 2.0 + heat[height - 2][x - 1:x + 1] = HEAT + + # Propagate the fire upwards + a = numpy.roll(heat, -1, axis=0) # y + 1, x + b = numpy.roll(heat, -2, axis=0) # y + 2, x + c = numpy.roll(heat, -1, axis=0) # y + 1 + d = numpy.roll(c, 1, axis=1) # y + 1, x + 1 + e = numpy.roll(c, -1, axis=1) # y + 1, x - 1 + + # Average over 5 adjacent pixels and apply damping + heat[:] += a + b + d + e + heat[:] *= DAMPING_FACTOR / 5.0 + + +def draw(): + # Copy the fire effect to the framebuffer + # Clips the fire to 0.0 to 1.0 + # Multiplies it by the number of palette entries (-1) to turn it into a palette index + # Converts to uint8_t datatype to match the framebuffer + memoryview(graphics)[:] = numpy.ndarray(numpy.clip(heat[0:16, 0:16], 0, 1) * (PALETTE_SIZE - 1), dtype=numpy.uint8).tobytes() + + # Draw text over the top + graphics.set_pen(0) + graphics.text("This", 6, 1, 1, 1) + graphics.text("is", 11, 9, 1, 1) + graphics.text("fine", 6, 17, 1, 1) + su.update(graphics) + + +width = StellarUnicorn.WIDTH +height = StellarUnicorn.HEIGHT + 4 +heat = numpy.zeros((height, width)) + +t_count = 0 +t_total = 0 + +while True: + gc.collect() + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.01) + + tstart = time.ticks_ms() + gc.collect() + update() + draw() + tfinish = time.ticks_ms() + + total = tfinish - tstart + t_total += total + t_count += 1 + + if t_count == 60: + per_frame_avg = t_total / t_count + print(f"60 frames in {t_total}ms, avg {per_frame_avg:.02f}ms per frame, {1000/per_frame_avg:.02f} FPS") + t_count = 0 + t_total = 0 + + # pause for a moment (important or the USB serial device will fail) + # try to pace at 60fps or 30fps + if total > 1000 / 30: + time.sleep(0.0001) + elif total > 1000 / 60: + t = 1000 / 30 - total + time.sleep(t / 1000) + else: + t = 1000 / 60 - total + time.sleep(t / 1000) diff --git a/micropython/examples/stellar_unicorn/numpy/trippy.py b/micropython/examples/stellar_unicorn/numpy/trippy.py new file mode 100644 index 00000000..d1049b84 --- /dev/null +++ b/micropython/examples/stellar_unicorn/numpy/trippy.py @@ -0,0 +1,97 @@ +import gc +import time +import random +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN, PEN_P8 +from ulab import numpy + +""" +A random, trippy effect. +Experiment with the damping, number of spawns, intensity and offset to change the effect. +""" + +# MAXIMUM OVERKILL +# machine.freq(250_000_000) + +su = StellarUnicorn() +su.set_brightness(0.5) +graphics = PicoGraphics(DISPLAY_STELLAR_UNICORN, pen_type=PEN_P8) + + +DAMPING_FACTOR = 0.8 +NUMBER_OF_DROPS = 5 +INTENSITY = 10 +OFFSET = 0.0 # Try 0.5 + +# Fill palette with a rainbow sweep +PALETTE_ENTRIES = 255 +for x in range(PALETTE_ENTRIES): + _ = graphics.create_pen_hsv(float(x) / PALETTE_ENTRIES + OFFSET, 1.0, 1.0) + + +def update(): + trippy[:] *= DAMPING_FACTOR + + # Spawn random drops + for _ in range(NUMBER_OF_DROPS): + x = random.randint(0, width - 1) + y = random.randint(0, height - 1) + trippy[y][x] = random.randint(0, INTENSITY) + + a = numpy.roll(trippy, 1, axis=0) + b = numpy.roll(trippy, -1, axis=0) + d = numpy.roll(trippy, 1, axis=1) + e = numpy.roll(trippy, -1, axis=1) + + # Average over 5 adjacent pixels and apply damping + trippy[:] += a + b + d + e + trippy[:] /= 5.0 + + +def draw(): + # Copy the effect to the framebuffer + memoryview(graphics)[:] = numpy.ndarray(numpy.clip(trippy, 0, 1) * (PALETTE_ENTRIES - 1), dtype=numpy.uint8).tobytes() + su.update(graphics) + + +width = StellarUnicorn.WIDTH +height = StellarUnicorn.HEIGHT +trippy = numpy.zeros((height, width)) + +t_count = 0 +t_total = 0 + + +while True: + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.01) + + tstart = time.ticks_ms() + gc.collect() + update() + draw() + tfinish = time.ticks_ms() + + total = tfinish - tstart + t_total += total + t_count += 1 + + if t_count == 60: + per_frame_avg = t_total / t_count + print(f"60 frames in {t_total}ms, avg {per_frame_avg:.02f}ms per frame, {1000/per_frame_avg:.02f} FPS") + t_count = 0 + t_total = 0 + + # pause for a moment (important or the USB serial device will fail) + # try to pace at 60fps or 30fps + if total > 1000 / 30: + time.sleep(0.0001) + elif total > 1000 / 60: + t = 1000 / 30 - total + time.sleep(t / 1000) + else: + t = 1000 / 60 - total + time.sleep(t / 1000) diff --git a/micropython/examples/stellar_unicorn/rainbow.py b/micropython/examples/stellar_unicorn/rainbow.py new file mode 100644 index 00000000..5619e0ef --- /dev/null +++ b/micropython/examples/stellar_unicorn/rainbow.py @@ -0,0 +1,115 @@ +import time +import math +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY + +''' +Some good old fashioned rainbows! + +You can adjust the cycling speed with A and B, +stripe width with C and D, hue with VOL + and -, +and the brightness with LUX + and -. +The sleep button stops the animation (can be started again with A or B). +''' + +su = StellarUnicorn() +graphics = PicoGraphics(DISPLAY) + +width = StellarUnicorn.WIDTH +height = StellarUnicorn.HEIGHT + + +@micropython.native # noqa: F821 +def from_hsv(h, s, v): + i = math.floor(h * 6.0) + f = h * 6.0 - i + v *= 255.0 + p = v * (1.0 - s) + q = v * (1.0 - f * s) + t = v * (1.0 - (1.0 - f) * s) + + i = int(i) % 6 + if i == 0: + return int(v), int(t), int(p) + if i == 1: + return int(q), int(v), int(p) + if i == 2: + return int(p), int(v), int(t) + if i == 3: + return int(p), int(q), int(v) + if i == 4: + return int(t), int(p), int(v) + if i == 5: + return int(v), int(p), int(q) + + +@micropython.native # noqa: F821 +def draw(): + global hue_offset, phase + phase_percent = phase / 15 + for x in range(width): + colour = hue_map[int((x + (hue_offset * width)) % width)] + for y in range(height): + v = ((math.sin((x + y) / stripe_width + phase_percent) + 1.5) / 2.5) + + graphics.set_pen(graphics.create_pen(int(colour[0] * v), int(colour[1] * v), int(colour[2] * v))) + graphics.pixel(x, y) + + su.update(graphics) + + +hue_map = [from_hsv(x / width, 1.0, 1.0) for x in range(width)] +hue_offset = 0.0 + +animate = True +stripe_width = 3.0 +speed = 1.0 + +su.set_brightness(0.5) + +phase = 0 +while True: + + if animate: + phase += speed + + if su.is_pressed(StellarUnicorn.SWITCH_VOLUME_UP): + hue_offset += 0.01 + hue_offset = 1.0 if hue_offset > 1.0 else hue_offset + + if su.is_pressed(StellarUnicorn.SWITCH_VOLUME_DOWN): + hue_offset -= 0.01 + hue_offset = 0.0 if hue_offset < 0.0 else hue_offset + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_SLEEP): + animate = False + + if su.is_pressed(StellarUnicorn.SWITCH_A): + speed += 0.05 + speed = 10.0 if speed > 10.0 else speed + animate = True + + if su.is_pressed(StellarUnicorn.SWITCH_B): + speed -= 0.05 + speed = 0.0 if speed < 0.0 else speed + animate = True + + if su.is_pressed(StellarUnicorn.SWITCH_C): + stripe_width += 0.05 + stripe_width = 10.0 if stripe_width > 10.0 else stripe_width + + if su.is_pressed(StellarUnicorn.SWITCH_D): + stripe_width -= 0.05 + stripe_width = 1.0 if stripe_width < 1.0 else stripe_width + + start = time.ticks_ms() + + draw() + + print("total took: {} ms".format(time.ticks_ms() - start)) diff --git a/micropython/examples/stellar_unicorn/scrolling_text.py b/micropython/examples/stellar_unicorn/scrolling_text.py new file mode 100644 index 00000000..62356709 --- /dev/null +++ b/micropython/examples/stellar_unicorn/scrolling_text.py @@ -0,0 +1,96 @@ +import time +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY + +''' +Display scrolling wisdom, quotes or greetz. + +You can adjust the brightness with LUX + and -. +''' + +# constants for controlling scrolling text +PADDING = 5 +MESSAGE_COLOUR = (255, 255, 255) +OUTLINE_COLOUR = (0, 0, 0) +BACKGROUND_COLOUR = (10, 0, 96) +MESSAGE = "\"Space is big. Really big. You just won't believe how vastly hugely mind-bogglingly big it is. I mean, you may think it's a long way down the road to the chemist, but that's just peanuts to space.\" - Douglas Adams" +HOLD_TIME = 2.0 +STEP_TIME = 0.075 + +# create stellar object and graphics surface for drawing +su = StellarUnicorn() +graphics = PicoGraphics(DISPLAY) + +width = StellarUnicorn.WIDTH +height = StellarUnicorn.HEIGHT + + +# function for drawing outlined text +def outline_text(text, x, y): + graphics.set_pen(graphics.create_pen(int(OUTLINE_COLOUR[0]), int(OUTLINE_COLOUR[1]), int(OUTLINE_COLOUR[2]))) + graphics.text(text, x - 1, y - 1, -1, 1) + graphics.text(text, x, y - 1, -1, 1) + graphics.text(text, x + 1, y - 1, -1, 1) + graphics.text(text, x - 1, y, -1, 1) + graphics.text(text, x + 1, y, -1, 1) + graphics.text(text, x - 1, y + 1, -1, 1) + graphics.text(text, x, y + 1, -1, 1) + graphics.text(text, x + 1, y + 1, -1, 1) + + graphics.set_pen(graphics.create_pen(int(MESSAGE_COLOUR[0]), int(MESSAGE_COLOUR[1]), int(MESSAGE_COLOUR[2]))) + graphics.text(text, x, y, -1, 1) + + +su.set_brightness(0.5) + +# state constants +STATE_PRE_SCROLL = 0 +STATE_SCROLLING = 1 +STATE_POST_SCROLL = 2 + +shift = 0 +state = STATE_PRE_SCROLL + +# set the font +graphics.set_font("bitmap8") + +# calculate the message width so scrolling can happen +msg_width = graphics.measure_text(MESSAGE, 1) + +last_time = time.ticks_ms() + +while True: + time_ms = time.ticks_ms() + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.01) + + if state == STATE_PRE_SCROLL and time_ms - last_time > HOLD_TIME * 1000: + if msg_width + PADDING * 2 >= width: + state = STATE_SCROLLING + last_time = time_ms + + if state == STATE_SCROLLING and time_ms - last_time > STEP_TIME * 1000: + shift += 1 + if shift >= (msg_width + PADDING * 2) - width - 1: + state = STATE_POST_SCROLL + last_time = time_ms + + if state == STATE_POST_SCROLL and time_ms - last_time > HOLD_TIME * 1000: + state = STATE_PRE_SCROLL + shift = 0 + last_time = time_ms + + graphics.set_pen(graphics.create_pen(int(BACKGROUND_COLOUR[0]), int(BACKGROUND_COLOUR[1]), int(BACKGROUND_COLOUR[2]))) + graphics.clear() + + outline_text(MESSAGE, x=PADDING - shift, y=4) + + # update the display + su.update(graphics) + + # pause for a moment (important or the USB serial device will fail) + time.sleep(0.001) diff --git a/micropython/examples/stellar_unicorn/stellar_paint/README.md b/micropython/examples/stellar_unicorn/stellar_paint/README.md new file mode 100644 index 00000000..53a45d2b --- /dev/null +++ b/micropython/examples/stellar_unicorn/stellar_paint/README.md @@ -0,0 +1,11 @@ +# Stellar Paint + +Stellar Paint lets you paint pixels onto your Stellar Unicorn over WiFi, in realtime! + +## Setting Up + +You'll need `WIFI_CONFIG.py` from the `common` directory to be saved to your Pico W. Open up `WIFI_CONFIG.py` in Thonny to add your wifi details (and save it when you're done). + +You will also have to install `micropython-phew` and `microdot` through Thonny's Tools -> Manage Packages. + +Run the example through Thonny and it should get connected and give you a URL to visit. Open that URL in your browser and start painting! \ No newline at end of file diff --git a/micropython/examples/stellar_unicorn/stellar_paint/stellar_paint.py b/micropython/examples/stellar_unicorn/stellar_paint/stellar_paint.py new file mode 100644 index 00000000..15d4422d --- /dev/null +++ b/micropython/examples/stellar_unicorn/stellar_paint/stellar_paint.py @@ -0,0 +1,113 @@ +import os +from microdot_asyncio import Microdot, send_file +from microdot_asyncio_websocket import with_websocket +from phew import connect_to_wifi +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY +from WIFI_CONFIG import SSID, PSK + + +su = StellarUnicorn() +graphics = PicoGraphics(DISPLAY) +mv_graphics = memoryview(graphics) +su.set_brightness(0.5) + +WIDTH, HEIGHT = graphics.get_bounds() + +ip = connect_to_wifi(SSID, PSK) + +print(f"Start painting at: http://{ip}") + + +server = Microdot() + + +@server.route("/", methods=["GET"]) +def route_index(request): + return send_file("stellar_paint/index.html") + + +@server.route("/static/", methods=["GET"]) +def route_static(request, path): + return send_file(f"stellar_paint/static/{path}") + + +def get_pixel(x, y): + if x < WIDTH and y < HEIGHT and x >= 0 and y >= 0: + o = (y * WIDTH + x) * 4 + return tuple(mv_graphics[o:o + 3]) + return None + + +def flood_fill(x, y, r, g, b): + todo = [] + + def fill(x, y, c): + if get_pixel(x, y) != c: + return + + graphics.pixel(x, y) + + up = get_pixel(x, y - 1) + dn = get_pixel(x, y + 1) + lf = get_pixel(x - 1, y) + ri = get_pixel(x + 1, y) + + if up == c: + todo.append((x, y - 1)) + if dn == c: + todo.append((x, y + 1)) + if lf == c: + todo.append((x - 1, y)) + if ri == c: + todo.append((x + 1, y)) + + c = get_pixel(x, y) + + if c is None: + return + + fill(x, y, c) + + while len(todo): + x, y = todo.pop(0) + fill(x, y, c) + + +@server.route('/paint') +@with_websocket +async def echo(request, ws): + while True: + data = await ws.receive() + try: + x, y, r, g, b = [int(n) for n in data[0:5]] + graphics.set_pen(graphics.create_pen(r, g, b)) + graphics.pixel(x, y) + + except ValueError: + if data == "show": + su.update(graphics) + + if data == "fill": + data = await ws.receive() + x, y, r, g, b = [int(n) for n in data[0:5]] + graphics.set_pen(graphics.create_pen(r, g, b)) + flood_fill(x, y, r, g, b) + + if data == "clear": + graphics.set_pen(graphics.create_pen(0, 0, 0)) + graphics.clear() + + if data == "save": + filename = await ws.receive() + print(f"Saving to {filename}.bin") + try: + os.mkdir("saves") + except OSError: + pass + with open(f"saves/{filename}.bin", "wb") as f: + f.write(graphics) + await ws.send(f"alert: Saved to saves/{filename}.bin") + + +server.run(host="0.0.0.0", port=80) diff --git a/micropython/examples/stellar_unicorn/stellar_paint/stellar_paint/index.html b/micropython/examples/stellar_unicorn/stellar_paint/stellar_paint/index.html new file mode 100644 index 00000000..f7c60d08 --- /dev/null +++ b/micropython/examples/stellar_unicorn/stellar_paint/stellar_paint/index.html @@ -0,0 +1,54 @@ + + + + + Stellar Paint + + + + + +
+

Stellar Paint

+ + +
+
+
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
+ + +
+
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
+
+ + + + + + diff --git a/micropython/examples/stellar_unicorn/stellar_paint/stellar_paint/static/paint.css b/micropython/examples/stellar_unicorn/stellar_paint/stellar_paint/static/paint.css new file mode 100644 index 00000000..46163157 --- /dev/null +++ b/micropython/examples/stellar_unicorn/stellar_paint/stellar_paint/static/paint.css @@ -0,0 +1,131 @@ +body { + background:#333; + padding:20px; + font-family:Arial, Verdana, Sans-Serif; + background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAaUlEQVQYV33Q0Q3AIAgEUBjBFVyBFRzbWVjBEajXBIOVypcJj1NhETG61BiDVJX4Bh211v5hRDiniV+Elx0wQwd0hEatlUop65srMSah23vf8Auz65AWMc8rDHvCCjAQK2KeDcuQDzh+AHEJX8mbbU1BAAAAAElFTkSuQmCC) repeat; +} + +.icons { + position:absolute; + margin:0; + padding:20px; + list-style:none; +} + +.icons li { + margin:20px; + padding:0; + list-style:none; + padding-top:80px; + width:100px; +} + +.icons li span { + background:#FFF; + color:#000; + border:1px solid #000; + line-height:20px; + padding:5px 10px; + text-align:center; + font-size:10px; + line-height:10px; + display:inline-block; +} + +#palette ul, #palette li { + margin:0;padding:0;list-style:none; +} + +#palette { + list-style:none; + position:relative; + height: 122px; + padding:0 8px; +} + +#palette ul { + display:block; + width:456px; + float: left; +} + +#palette li, #palette input { + border: 2px outset; + width:49px; + height:49px; + float:left; + display:block; + margin:2px; +} + +#palette input { + width:110px; + height:110px; +} + +.window { + width: 640px; + position: relative; + background: #0E071A; + box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.5); +} + +.tools { + margin:0;padding:0;list-style:none; + clear:both; + display:block; + position:absolute; + top: 50px; + right: 8px; + width: 98px; + background:#999999; + font-size:0; +} +.tools span { + line-height:30px; +} + +.tools li { + font-size:16px; + width: 45px; + height: 40px; + text-align:center; + margin:0; + padding:0; + display:inline-block; + line-height:40px; + border:2px outset #EEEEEE; + background:#F5F5F5; + cursor:pointer; + color:#000; +} + +.tools li.selected { + background:#000; + color:#FFF; +} + +h1 { + color: #FFF; + background: #6D38BB; + height:40px; + margin:0; + padding:0 8px; + line-height:40px; + font-weight:normal; + font-size:24px; +} + +table { + clear:both; + cursor:pointer; + margin:10px; + border:1px solid #333; + background: #000000; +} + +table td { + width:14px; + height:14px; + border:1px solid #333; +} \ No newline at end of file diff --git a/micropython/examples/stellar_unicorn/stellar_paint/stellar_paint/static/paint.js b/micropython/examples/stellar_unicorn/stellar_paint/stellar_paint/static/paint.js new file mode 100644 index 00000000..1ddcd1d4 --- /dev/null +++ b/micropython/examples/stellar_unicorn/stellar_paint/stellar_paint/static/paint.js @@ -0,0 +1,216 @@ +'use strict'; + +var WIDTH = 16; +var HEIGHT = 16; +var md = false; +var color = tinycolor('#840000'); +var update; + +$(document).ready(function(){ + + var picker = $('#custom'); + var palette = $('#palette'); + + picker.val(color.toHexString()); + + $(document) + .on('mousedown',function(e){md=true;}) + .on('mouseup',function(e){md=false;}); + + $('table').on('dragstart', function(e){ + e.preventDefault(); + return false; + }); + + for (var y = 0; y < HEIGHT; y++) { + var row = $(''); + for (var x = 0; x < WIDTH; x++) { + row.append(''); + } + $('tbody').append(row); + } + + $('.tools li').on('click', function(){ + switch($(this).index()){ + case 6: + clear(); + break; + case 7: + save(); + break; + default: + $('.tools li').removeClass('selected'); + $(this).addClass('selected'); + break; + } + }); + + picker.on('change', function(){ + color = tinycolor($(this).val()); + }) + + palette.find('li').on('click', function(){ + pick(this); + }); + + function handle_tool(obj, is_click){ + switch($('.tools li.selected').index()){ + case 0: //'paint': + paint(obj); + break; + case 1: // Fill + if( is_click ) fill(obj); + break; + case 2: // Erase + update_pixel(obj, tinycolor('#000000')); + break; + case 3: //'pick': + pick(obj); + break; + case 4: //'lighten': + lighten(obj); + break; + case 5: //'darken': + darken(obj); + break; + } + } + + var fill_target = null; + var fill_stack = []; + function fill(obj){ + fill_target = tinycolor($(obj).css('background-color')).toRgbString(); + + if( fill_target == color.toRgbString() ){ + return false; + } + + var x = $(obj).index(); + var y = $(obj).parent().index(); + + socket.send("fill"); + socket.send(new Uint8Array([x, y, color.toRgb().r, color.toRgb().g, color.toRgb().b])); + socket.send('show'); + + do_fill(obj); + + while(fill_stack.length > 0){ + var pixel = fill_stack.pop(); + do_fill(pixel); + } + } + + function is_target_color(obj){ + return ( tinycolor($(obj).css('background-color')).toRgbString() == fill_target); + } + + function do_fill(obj){ + var obj = $(obj); + + if( is_target_color(obj) ){ + + $(obj).css('background-color', color.toRgbString()); + + var r = obj.next('td'); // Right + var l = obj.prev('td'); // Left + var u = obj.parent().prev('tr').find('td:eq(' + obj.index() + ')'); // Above + var d = obj.parent().next('tr').find('td:eq(' + obj.index() + ')'); // Below + + if( r.length && is_target_color(r[0]) ) fill_stack.push(r[0]); + if( l.length && is_target_color(l[0]) ) fill_stack.push(l[0]); + if( u.length && is_target_color(u[0]) ) fill_stack.push(u[0]); + if( d.length && is_target_color(d[0]) ) fill_stack.push(d[0]); + } + } + + function save(){ + var filename = prompt('Please enter a filename', 'mypaint'); + filename = filename.replace(/[^a-z0-9]/gi, '_').toLowerCase(); + socket.send('save'); + socket.send(filename); + } + + function clear(){ + $('td').css('background-color','rgb(0,0,0)').data('changed',false); + socket.send('clear'); + socket.send('show'); + } + + function lighten(obj){ + var c = tinycolor($(obj).css('background-color')); + c.lighten(5); + update_pixel(obj, c); + } + + function darken(obj){ + var c = tinycolor($(obj).css('background-color')); + c.darken(5); + update_pixel(obj, c); + } + + function pick(obj){ + color = tinycolor($(obj).css('background-color')); + picker.val(color.toHexString()); + } + + function update_pixel(obj, col){ + var bgcol = tinycolor($(obj).css('background-color')); + + if(col != bgcol){ + $(obj) + .data('changed', true) + .css('background-color', col.toRgbString()); + } + } + + function update_pixels(){ + var changed = false; + + $('td').each(function( index, obj ){ + if($(obj).data('changed')){ + $(obj).data('changed',false); + changed = true; + + var x = $(this).index(); + var y = $(this).parent().index(); + var col = tinycolor($(obj).css('background-color')).toRgb(); + + if(socket) { + socket.send(new Uint8Array([x, y, col.r, col.g, col.b])); + } + } + }); + if(changed){ + socket.send('show'); + } + } + + function paint(obj){ + update_pixel(obj, color); + } + + $('table td').on('click', function(){ + handle_tool(this, true); + }); + $('table td').on('mousemove', function(){ + if(!md) return false; + handle_tool(this, false); + }) + + const socket = new WebSocket('ws://' + window.location.host + '/paint'); + socket.addEventListener('message', ev => { + console.log('<<< ' + ev.data); + + if(ev.data.substring(0, 6) == "alert:") { + alert(ev.data.substring(6)); + } + }); + socket.addEventListener('close', ev => { + console.log('<<< closed'); + }); + + socket.addEventListener('open', ev => { + clear(); + update = setInterval(update_pixels, 50); + }); +}); diff --git a/micropython/examples/stellar_unicorn/stellar_paint/stellar_paint/static/tinycolor.js b/micropython/examples/stellar_unicorn/stellar_paint/stellar_paint/static/tinycolor.js new file mode 100644 index 00000000..0d8b0e7f --- /dev/null +++ b/micropython/examples/stellar_unicorn/stellar_paint/stellar_paint/static/tinycolor.js @@ -0,0 +1,1193 @@ +// TinyColor v1.4.2 +// https://github.com/bgrins/TinyColor +// Brian Grinstead, MIT License + +(function(Math) { + + var trimLeft = /^\s+/, + trimRight = /\s+$/, + mathRound = Math.round, + mathMin = Math.min, + mathMax = Math.max, + mathRandom = Math.random; + + function tinycolor (color, opts) { + + color = (color) ? color : ''; + opts = opts || { }; + + // If input is already a tinycolor, return itself + if (color instanceof tinycolor) { + return color; + } + // If we are called as a function, call using new instead + if (!(this instanceof tinycolor)) { + return new tinycolor(color, opts); + } + + var rgb = inputToRGB(color); + this._originalInput = color, + this._r = rgb.r, + this._g = rgb.g, + this._b = rgb.b, + this._a = rgb.a, + this._roundA = mathRound(100*this._a) / 100, + this._format = opts.format || rgb.format; + this._gradientType = opts.gradientType; + + // Don't let the range of [0,255] come back in [0,1]. + // Potentially lose a little bit of precision here, but will fix issues where + // .5 gets interpreted as half of the total, instead of half of 1 + // If it was supposed to be 128, this was already taken care of by `inputToRgb` + if (this._r < 1) { this._r = mathRound(this._r); } + if (this._g < 1) { this._g = mathRound(this._g); } + if (this._b < 1) { this._b = mathRound(this._b); } + + this._ok = rgb.ok; + } + + tinycolor.prototype = { + isDark: function() { + return this.getBrightness() < 128; + }, + isLight: function() { + return !this.isDark(); + }, + isValid: function() { + return this._ok; + }, + getOriginalInput: function() { + return this._originalInput; + }, + getFormat: function() { + return this._format; + }, + getAlpha: function() { + return this._a; + }, + getBrightness: function() { + //http://www.w3.org/TR/AERT#color-contrast + var rgb = this.toRgb(); + return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000; + }, + getLuminance: function() { + //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef + var rgb = this.toRgb(); + var RsRGB, GsRGB, BsRGB, R, G, B; + RsRGB = rgb.r/255; + GsRGB = rgb.g/255; + BsRGB = rgb.b/255; + + if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);} + if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);} + if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);} + return (0.2126 * R) + (0.7152 * G) + (0.0722 * B); + }, + setAlpha: function(value) { + this._a = boundAlpha(value); + this._roundA = mathRound(100*this._a) / 100; + return this; + }, + toHsv: function() { + var hsv = rgbToHsv(this._r, this._g, this._b); + return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a }; + }, + toHsvString: function() { + var hsv = rgbToHsv(this._r, this._g, this._b); + var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100); + return (this._a == 1) ? + "hsv(" + h + ", " + s + "%, " + v + "%)" : + "hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")"; + }, + toHsl: function() { + var hsl = rgbToHsl(this._r, this._g, this._b); + return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a }; + }, + toHslString: function() { + var hsl = rgbToHsl(this._r, this._g, this._b); + var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100); + return (this._a == 1) ? + "hsl(" + h + ", " + s + "%, " + l + "%)" : + "hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")"; + }, + toHex: function(allow3Char) { + return rgbToHex(this._r, this._g, this._b, allow3Char); + }, + toHexString: function(allow3Char) { + return '#' + this.toHex(allow3Char); + }, + toHex8: function(allow4Char) { + return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char); + }, + toHex8String: function(allow4Char) { + return '#' + this.toHex8(allow4Char); + }, + toRgb: function() { + return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a }; + }, + toRgbString: function() { + return (this._a == 1) ? + "rgb(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" : + "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")"; + }, + toPercentageRgb: function() { + return { r: mathRound(bound01(this._r, 255) * 100) + "%", g: mathRound(bound01(this._g, 255) * 100) + "%", b: mathRound(bound01(this._b, 255) * 100) + "%", a: this._a }; + }, + toPercentageRgbString: function() { + return (this._a == 1) ? + "rgb(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" : + "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")"; + }, + toName: function() { + if (this._a === 0) { + return "transparent"; + } + + if (this._a < 1) { + return false; + } + + return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false; + }, + toFilter: function(secondColor) { + var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a); + var secondHex8String = hex8String; + var gradientType = this._gradientType ? "GradientType = 1, " : ""; + + if (secondColor) { + var s = tinycolor(secondColor); + secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a); + } + + return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")"; + }, + toString: function(format) { + var formatSet = !!format; + format = format || this._format; + + var formattedString = false; + var hasAlpha = this._a < 1 && this._a >= 0; + var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "hex4" || format === "hex8" || format === "name"); + + if (needsAlphaFormat) { + // Special case for "transparent", all other non-alpha formats + // will return rgba when there is transparency. + if (format === "name" && this._a === 0) { + return this.toName(); + } + return this.toRgbString(); + } + if (format === "rgb") { + formattedString = this.toRgbString(); + } + if (format === "prgb") { + formattedString = this.toPercentageRgbString(); + } + if (format === "hex" || format === "hex6") { + formattedString = this.toHexString(); + } + if (format === "hex3") { + formattedString = this.toHexString(true); + } + if (format === "hex4") { + formattedString = this.toHex8String(true); + } + if (format === "hex8") { + formattedString = this.toHex8String(); + } + if (format === "name") { + formattedString = this.toName(); + } + if (format === "hsl") { + formattedString = this.toHslString(); + } + if (format === "hsv") { + formattedString = this.toHsvString(); + } + + return formattedString || this.toHexString(); + }, + clone: function() { + return tinycolor(this.toString()); + }, + + _applyModification: function(fn, args) { + var color = fn.apply(null, [this].concat([].slice.call(args))); + this._r = color._r; + this._g = color._g; + this._b = color._b; + this.setAlpha(color._a); + return this; + }, + lighten: function() { + return this._applyModification(lighten, arguments); + }, + brighten: function() { + return this._applyModification(brighten, arguments); + }, + darken: function() { + return this._applyModification(darken, arguments); + }, + desaturate: function() { + return this._applyModification(desaturate, arguments); + }, + saturate: function() { + return this._applyModification(saturate, arguments); + }, + greyscale: function() { + return this._applyModification(greyscale, arguments); + }, + spin: function() { + return this._applyModification(spin, arguments); + }, + + _applyCombination: function(fn, args) { + return fn.apply(null, [this].concat([].slice.call(args))); + }, + analogous: function() { + return this._applyCombination(analogous, arguments); + }, + complement: function() { + return this._applyCombination(complement, arguments); + }, + monochromatic: function() { + return this._applyCombination(monochromatic, arguments); + }, + splitcomplement: function() { + return this._applyCombination(splitcomplement, arguments); + }, + triad: function() { + return this._applyCombination(triad, arguments); + }, + tetrad: function() { + return this._applyCombination(tetrad, arguments); + } + }; + + // If input is an object, force 1 into "1.0" to handle ratios properly + // String input requires "1.0" as input, so 1 will be treated as 1 + tinycolor.fromRatio = function(color, opts) { + if (typeof color == "object") { + var newColor = {}; + for (var i in color) { + if (color.hasOwnProperty(i)) { + if (i === "a") { + newColor[i] = color[i]; + } + else { + newColor[i] = convertToPercentage(color[i]); + } + } + } + color = newColor; + } + + return tinycolor(color, opts); + }; + + // Given a string or object, convert that input to RGB + // Possible string inputs: + // + // "red" + // "#f00" or "f00" + // "#ff0000" or "ff0000" + // "#ff000000" or "ff000000" + // "rgb 255 0 0" or "rgb (255, 0, 0)" + // "rgb 1.0 0 0" or "rgb (1, 0, 0)" + // "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1" + // "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1" + // "hsl(0, 100%, 50%)" or "hsl 0 100% 50%" + // "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1" + // "hsv(0, 100%, 100%)" or "hsv 0 100% 100%" + // + function inputToRGB(color) { + + var rgb = { r: 0, g: 0, b: 0 }; + var a = 1; + var s = null; + var v = null; + var l = null; + var ok = false; + var format = false; + + if (typeof color == "string") { + color = stringInputToObject(color); + } + + if (typeof color == "object") { + if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) { + rgb = rgbToRgb(color.r, color.g, color.b); + ok = true; + format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; + } + else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) { + s = convertToPercentage(color.s); + v = convertToPercentage(color.v); + rgb = hsvToRgb(color.h, s, v); + ok = true; + format = "hsv"; + } + else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) { + s = convertToPercentage(color.s); + l = convertToPercentage(color.l); + rgb = hslToRgb(color.h, s, l); + ok = true; + format = "hsl"; + } + + if (color.hasOwnProperty("a")) { + a = color.a; + } + } + + a = boundAlpha(a); + + return { + ok: ok, + format: color.format || format, + r: mathMin(255, mathMax(rgb.r, 0)), + g: mathMin(255, mathMax(rgb.g, 0)), + b: mathMin(255, mathMax(rgb.b, 0)), + a: a + }; + } + + + // Conversion Functions + // -------------------- + + // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from: + // + + // `rgbToRgb` + // Handle bounds / percentage checking to conform to CSS color spec + // + // *Assumes:* r, g, b in [0, 255] or [0, 1] + // *Returns:* { r, g, b } in [0, 255] + function rgbToRgb(r, g, b){ + return { + r: bound01(r, 255) * 255, + g: bound01(g, 255) * 255, + b: bound01(b, 255) * 255 + }; + } + + // `rgbToHsl` + // Converts an RGB color value to HSL. + // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1] + // *Returns:* { h, s, l } in [0,1] + function rgbToHsl(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, l = (max + min) / 2; + + if(max == min) { + h = s = 0; // achromatic + } + else { + var d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + + h /= 6; + } + + return { h: h, s: s, l: l }; + } + + // `hslToRgb` + // Converts an HSL color value to RGB. + // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100] + // *Returns:* { r, g, b } in the set [0, 255] + function hslToRgb(h, s, l) { + var r, g, b; + + h = bound01(h, 360); + s = bound01(s, 100); + l = bound01(l, 100); + + function hue2rgb(p, q, t) { + if(t < 0) t += 1; + if(t > 1) t -= 1; + if(t < 1/6) return p + (q - p) * 6 * t; + if(t < 1/2) return q; + if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; + return p; + } + + if(s === 0) { + r = g = b = l; // achromatic + } + else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = hue2rgb(p, q, h + 1/3); + g = hue2rgb(p, q, h); + b = hue2rgb(p, q, h - 1/3); + } + + return { r: r * 255, g: g * 255, b: b * 255 }; + } + + // `rgbToHsv` + // Converts an RGB color value to HSV + // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1] + // *Returns:* { h, s, v } in [0,1] + function rgbToHsv(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, v = max; + + var d = max - min; + s = max === 0 ? 0 : d / max; + + if(max == min) { + h = 0; // achromatic + } + else { + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + h /= 6; + } + return { h: h, s: s, v: v }; + } + + // `hsvToRgb` + // Converts an HSV color value to RGB. + // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100] + // *Returns:* { r, g, b } in the set [0, 255] + function hsvToRgb(h, s, v) { + + h = bound01(h, 360) * 6; + s = bound01(s, 100); + v = bound01(v, 100); + + var i = Math.floor(h), + f = h - i, + p = v * (1 - s), + q = v * (1 - f * s), + t = v * (1 - (1 - f) * s), + mod = i % 6, + r = [v, q, p, p, t, v][mod], + g = [t, v, v, q, p, p][mod], + b = [p, p, t, v, v, q][mod]; + + return { r: r * 255, g: g * 255, b: b * 255 }; + } + + // `rgbToHex` + // Converts an RGB color to hex + // Assumes r, g, and b are contained in the set [0, 255] + // Returns a 3 or 6 character hex + function rgbToHex(r, g, b, allow3Char) { + + var hex = [ + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)) + ]; + + // Return a 3 character hex if possible + if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); + } + + return hex.join(""); + } + + // `rgbaToHex` + // Converts an RGBA color plus alpha transparency to hex + // Assumes r, g, b are contained in the set [0, 255] and + // a in [0, 1]. Returns a 4 or 8 character rgba hex + function rgbaToHex(r, g, b, a, allow4Char) { + + var hex = [ + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)), + pad2(convertDecimalToHex(a)) + ]; + + // Return a 4 character hex if possible + if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0); + } + + return hex.join(""); + } + + // `rgbaToArgbHex` + // Converts an RGBA color to an ARGB Hex8 string + // Rarely used, but required for "toFilter()" + function rgbaToArgbHex(r, g, b, a) { + + var hex = [ + pad2(convertDecimalToHex(a)), + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)) + ]; + + return hex.join(""); + } + + // `equals` + // Can be called with any tinycolor input + tinycolor.equals = function (color1, color2) { + if (!color1 || !color2) { return false; } + return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString(); + }; + + tinycolor.random = function() { + return tinycolor.fromRatio({ + r: mathRandom(), + g: mathRandom(), + b: mathRandom() + }); + }; + + + // Modification Functions + // ---------------------- + // Thanks to less.js for some of the basics here + // + + function desaturate(color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.s -= amount / 100; + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); + } + + function saturate(color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.s += amount / 100; + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); + } + + function greyscale(color) { + return tinycolor(color).desaturate(100); + } + + function lighten (color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.l += amount / 100; + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); + } + + function brighten(color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var rgb = tinycolor(color).toRgb(); + rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100)))); + rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100)))); + rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100)))); + return tinycolor(rgb); + } + + function darken (color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.l -= amount / 100; + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); + } + + // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue. + // Values outside of this range will be wrapped into this range. + function spin(color, amount) { + var hsl = tinycolor(color).toHsl(); + var hue = (hsl.h + amount) % 360; + hsl.h = hue < 0 ? 360 + hue : hue; + return tinycolor(hsl); + } + + // Combination Functions + // --------------------- + // Thanks to jQuery xColor for some of the ideas behind these + // + + function complement(color) { + var hsl = tinycolor(color).toHsl(); + hsl.h = (hsl.h + 180) % 360; + return tinycolor(hsl); + } + + function triad(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l }) + ]; + } + + function tetrad(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l }) + ]; + } + + function splitcomplement(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}), + tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l}) + ]; + } + + function analogous(color, results, slices) { + results = results || 6; + slices = slices || 30; + + var hsl = tinycolor(color).toHsl(); + var part = 360 / slices; + var ret = [tinycolor(color)]; + + for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) { + hsl.h = (hsl.h + part) % 360; + ret.push(tinycolor(hsl)); + } + return ret; + } + + function monochromatic(color, results) { + results = results || 6; + var hsv = tinycolor(color).toHsv(); + var h = hsv.h, s = hsv.s, v = hsv.v; + var ret = []; + var modification = 1 / results; + + while (results--) { + ret.push(tinycolor({ h: h, s: s, v: v})); + v = (v + modification) % 1; + } + + return ret; + } + + // Utility Functions + // --------------------- + + tinycolor.mix = function(color1, color2, amount) { + amount = (amount === 0) ? 0 : (amount || 50); + + var rgb1 = tinycolor(color1).toRgb(); + var rgb2 = tinycolor(color2).toRgb(); + + var p = amount / 100; + + var rgba = { + r: ((rgb2.r - rgb1.r) * p) + rgb1.r, + g: ((rgb2.g - rgb1.g) * p) + rgb1.g, + b: ((rgb2.b - rgb1.b) * p) + rgb1.b, + a: ((rgb2.a - rgb1.a) * p) + rgb1.a + }; + + return tinycolor(rgba); + }; + + + // Readability Functions + // --------------------- + // false + // tinycolor.isReadable("#000", "#111",{level:"AA",size:"large"}) => false + tinycolor.isReadable = function(color1, color2, wcag2) { + var readability = tinycolor.readability(color1, color2); + var wcag2Parms, out; + + out = false; + + wcag2Parms = validateWCAG2Parms(wcag2); + switch (wcag2Parms.level + wcag2Parms.size) { + case "AAsmall": + case "AAAlarge": + out = readability >= 4.5; + break; + case "AAlarge": + out = readability >= 3; + break; + case "AAAsmall": + out = readability >= 7; + break; + } + return out; + + }; + + // `mostReadable` + // Given a base color and a list of possible foreground or background + // colors for that base, returns the most readable color. + // Optionally returns Black or White if the most readable color is unreadable. + // *Example* + // tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:false}).toHexString(); // "#112255" + // tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:true}).toHexString(); // "#ffffff" + // tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"large"}).toHexString(); // "#faf3f3" + // tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"small"}).toHexString(); // "#ffffff" + tinycolor.mostReadable = function(baseColor, colorList, args) { + var bestColor = null; + var bestScore = 0; + var readability; + var includeFallbackColors, level, size ; + args = args || {}; + includeFallbackColors = args.includeFallbackColors ; + level = args.level; + size = args.size; + + for (var i= 0; i < colorList.length ; i++) { + readability = tinycolor.readability(baseColor, colorList[i]); + if (readability > bestScore) { + bestScore = readability; + bestColor = tinycolor(colorList[i]); + } + } + + if (tinycolor.isReadable(baseColor, bestColor, {"level":level,"size":size}) || !includeFallbackColors) { + return bestColor; + } + else { + args.includeFallbackColors=false; + return tinycolor.mostReadable(baseColor,["#fff", "#000"],args); + } + }; + + + // Big List of Colors + // ------------------ + // + var names = tinycolor.names = { + aliceblue: "f0f8ff", + antiquewhite: "faebd7", + aqua: "0ff", + aquamarine: "7fffd4", + azure: "f0ffff", + beige: "f5f5dc", + bisque: "ffe4c4", + black: "000", + blanchedalmond: "ffebcd", + blue: "00f", + blueviolet: "8a2be2", + brown: "a52a2a", + burlywood: "deb887", + burntsienna: "ea7e5d", + cadetblue: "5f9ea0", + chartreuse: "7fff00", + chocolate: "d2691e", + coral: "ff7f50", + cornflowerblue: "6495ed", + cornsilk: "fff8dc", + crimson: "dc143c", + cyan: "0ff", + darkblue: "00008b", + darkcyan: "008b8b", + darkgoldenrod: "b8860b", + darkgray: "a9a9a9", + darkgreen: "006400", + darkgrey: "a9a9a9", + darkkhaki: "bdb76b", + darkmagenta: "8b008b", + darkolivegreen: "556b2f", + darkorange: "ff8c00", + darkorchid: "9932cc", + darkred: "8b0000", + darksalmon: "e9967a", + darkseagreen: "8fbc8f", + darkslateblue: "483d8b", + darkslategray: "2f4f4f", + darkslategrey: "2f4f4f", + darkturquoise: "00ced1", + darkviolet: "9400d3", + deeppink: "ff1493", + deepskyblue: "00bfff", + dimgray: "696969", + dimgrey: "696969", + dodgerblue: "1e90ff", + firebrick: "b22222", + floralwhite: "fffaf0", + forestgreen: "228b22", + fuchsia: "f0f", + gainsboro: "dcdcdc", + ghostwhite: "f8f8ff", + gold: "ffd700", + goldenrod: "daa520", + gray: "808080", + green: "008000", + greenyellow: "adff2f", + grey: "808080", + honeydew: "f0fff0", + hotpink: "ff69b4", + indianred: "cd5c5c", + indigo: "4b0082", + ivory: "fffff0", + khaki: "f0e68c", + lavender: "e6e6fa", + lavenderblush: "fff0f5", + lawngreen: "7cfc00", + lemonchiffon: "fffacd", + lightblue: "add8e6", + lightcoral: "f08080", + lightcyan: "e0ffff", + lightgoldenrodyellow: "fafad2", + lightgray: "d3d3d3", + lightgreen: "90ee90", + lightgrey: "d3d3d3", + lightpink: "ffb6c1", + lightsalmon: "ffa07a", + lightseagreen: "20b2aa", + lightskyblue: "87cefa", + lightslategray: "789", + lightslategrey: "789", + lightsteelblue: "b0c4de", + lightyellow: "ffffe0", + lime: "0f0", + limegreen: "32cd32", + linen: "faf0e6", + magenta: "f0f", + maroon: "800000", + mediumaquamarine: "66cdaa", + mediumblue: "0000cd", + mediumorchid: "ba55d3", + mediumpurple: "9370db", + mediumseagreen: "3cb371", + mediumslateblue: "7b68ee", + mediumspringgreen: "00fa9a", + mediumturquoise: "48d1cc", + mediumvioletred: "c71585", + midnightblue: "191970", + mintcream: "f5fffa", + mistyrose: "ffe4e1", + moccasin: "ffe4b5", + navajowhite: "ffdead", + navy: "000080", + oldlace: "fdf5e6", + olive: "808000", + olivedrab: "6b8e23", + orange: "ffa500", + orangered: "ff4500", + orchid: "da70d6", + palegoldenrod: "eee8aa", + palegreen: "98fb98", + paleturquoise: "afeeee", + palevioletred: "db7093", + papayawhip: "ffefd5", + peachpuff: "ffdab9", + peru: "cd853f", + pink: "ffc0cb", + plum: "dda0dd", + powderblue: "b0e0e6", + purple: "800080", + rebeccapurple: "663399", + red: "f00", + rosybrown: "bc8f8f", + royalblue: "4169e1", + saddlebrown: "8b4513", + salmon: "fa8072", + sandybrown: "f4a460", + seagreen: "2e8b57", + seashell: "fff5ee", + sienna: "a0522d", + silver: "c0c0c0", + skyblue: "87ceeb", + slateblue: "6a5acd", + slategray: "708090", + slategrey: "708090", + snow: "fffafa", + springgreen: "00ff7f", + steelblue: "4682b4", + tan: "d2b48c", + teal: "008080", + thistle: "d8bfd8", + tomato: "ff6347", + turquoise: "40e0d0", + violet: "ee82ee", + wheat: "f5deb3", + white: "fff", + whitesmoke: "f5f5f5", + yellow: "ff0", + yellowgreen: "9acd32" + }; + + // Make it easy to access colors via `hexNames[hex]` + var hexNames = tinycolor.hexNames = flip(names); + + + // Utilities + // --------- + + // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }` + function flip(o) { + var flipped = { }; + for (var i in o) { + if (o.hasOwnProperty(i)) { + flipped[o[i]] = i; + } + } + return flipped; + } + + // Return a valid alpha value [0,1] with all invalid values being set to 1 + function boundAlpha(a) { + a = parseFloat(a); + + if (isNaN(a) || a < 0 || a > 1) { + a = 1; + } + + return a; + } + + // Take input from [0, n] and return it as [0, 1] + function bound01(n, max) { + if (isOnePointZero(n)) { n = "100%"; } + + var processPercent = isPercentage(n); + n = mathMin(max, mathMax(0, parseFloat(n))); + + // Automatically convert percentage into number + if (processPercent) { + n = parseInt(n * max, 10) / 100; + } + + // Handle floating point rounding errors + if ((Math.abs(n - max) < 0.000001)) { + return 1; + } + + // Convert into [0, 1] range if it isn't already + return (n % max) / parseFloat(max); + } + + // Force a number between 0 and 1 + function clamp01(val) { + return mathMin(1, mathMax(0, val)); + } + + // Parse a base-16 hex value into a base-10 integer + function parseIntFromHex(val) { + return parseInt(val, 16); + } + + // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1 + // + function isOnePointZero(n) { + return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1; + } + + // Check to see if string passed in is a percentage + function isPercentage(n) { + return typeof n === "string" && n.indexOf('%') != -1; + } + + // Force a hex value to have 2 characters + function pad2(c) { + return c.length == 1 ? '0' + c : '' + c; + } + + // Replace a decimal with it's percentage value + function convertToPercentage(n) { + if (n <= 1) { + n = (n * 100) + "%"; + } + + return n; + } + + // Converts a decimal to a hex value + function convertDecimalToHex(d) { + return Math.round(parseFloat(d) * 255).toString(16); + } + // Converts a hex value to a decimal + function convertHexToDecimal(h) { + return (parseIntFromHex(h) / 255); + } + + var matchers = (function() { + + // + var CSS_INTEGER = "[-\\+]?\\d+%?"; + + // + var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; + + // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome. + var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")"; + + // Actual matching. + // Parentheses and commas are optional, but not required. + // Whitespace can take the place of commas or opening paren + var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + + return { + CSS_UNIT: new RegExp(CSS_UNIT), + rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), + rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), + hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), + hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), + hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), + hsva: new RegExp("hsva" + PERMISSIVE_MATCH4), + hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, + hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ + }; + })(); + + // `isValidCSSUnit` + // Take in a single string / number and check to see if it looks like a CSS unit + // (see `matchers` above for definition). + function isValidCSSUnit(color) { + return !!matchers.CSS_UNIT.exec(color); + } + + // `stringInputToObject` + // Permissive string parsing. Take in a number of formats, and output an object + // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}` + function stringInputToObject(color) { + + color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase(); + var named = false; + if (names[color]) { + color = names[color]; + named = true; + } + else if (color == 'transparent') { + return { r: 0, g: 0, b: 0, a: 0, format: "name" }; + } + + // Try to match string input using regular expressions. + // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360] + // Just return an object and let the conversion functions handle that. + // This way the result will be the same whether the tinycolor is initialized with string or object. + var match; + if ((match = matchers.rgb.exec(color))) { + return { r: match[1], g: match[2], b: match[3] }; + } + if ((match = matchers.rgba.exec(color))) { + return { r: match[1], g: match[2], b: match[3], a: match[4] }; + } + if ((match = matchers.hsl.exec(color))) { + return { h: match[1], s: match[2], l: match[3] }; + } + if ((match = matchers.hsla.exec(color))) { + return { h: match[1], s: match[2], l: match[3], a: match[4] }; + } + if ((match = matchers.hsv.exec(color))) { + return { h: match[1], s: match[2], v: match[3] }; + } + if ((match = matchers.hsva.exec(color))) { + return { h: match[1], s: match[2], v: match[3], a: match[4] }; + } + if ((match = matchers.hex8.exec(color))) { + return { + r: parseIntFromHex(match[1]), + g: parseIntFromHex(match[2]), + b: parseIntFromHex(match[3]), + a: convertHexToDecimal(match[4]), + format: named ? "name" : "hex8" + }; + } + if ((match = matchers.hex6.exec(color))) { + return { + r: parseIntFromHex(match[1]), + g: parseIntFromHex(match[2]), + b: parseIntFromHex(match[3]), + format: named ? "name" : "hex" + }; + } + if ((match = matchers.hex4.exec(color))) { + return { + r: parseIntFromHex(match[1] + '' + match[1]), + g: parseIntFromHex(match[2] + '' + match[2]), + b: parseIntFromHex(match[3] + '' + match[3]), + a: convertHexToDecimal(match[4] + '' + match[4]), + format: named ? "name" : "hex8" + }; + } + if ((match = matchers.hex3.exec(color))) { + return { + r: parseIntFromHex(match[1] + '' + match[1]), + g: parseIntFromHex(match[2] + '' + match[2]), + b: parseIntFromHex(match[3] + '' + match[3]), + format: named ? "name" : "hex" + }; + } + + return false; + } + + function validateWCAG2Parms(parms) { + // return valid WCAG2 parms for isReadable. + // If input parms are invalid, return {"level":"AA", "size":"small"} + var level, size; + parms = parms || {"level":"AA", "size":"small"}; + level = (parms.level || "AA").toUpperCase(); + size = (parms.size || "small").toLowerCase(); + if (level !== "AA" && level !== "AAA") { + level = "AA"; + } + if (size !== "small" && size !== "large") { + size = "small"; + } + return {"level":level, "size":size}; + } + + // Node: Export function + if (typeof module !== "undefined" && module.exports) { + module.exports = tinycolor; + } + // AMD/requirejs: Define the module + else if (typeof define === 'function' && define.amd) { + define(function () {return tinycolor;}); + } + // Browser: Expose to window + else { + window.tinycolor = tinycolor; + } + + })(Math); \ No newline at end of file diff --git a/micropython/examples/stellar_unicorn/today.py b/micropython/examples/stellar_unicorn/today.py new file mode 100644 index 00000000..436e125a --- /dev/null +++ b/micropython/examples/stellar_unicorn/today.py @@ -0,0 +1,128 @@ +import time +import network +import ntptime +import machine + +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY + +su = StellarUnicorn() +graphics = PicoGraphics(DISPLAY) + +# Default Brightness +su.set_brightness(0.4) + +# You will need to create or update the file secrets.py with your network credentials using Thonny +# in order for the example to update using the NTP. + +# secrets.py should contain: +# WIFI_SSID = "" +# WIFI_PASSWORD = "" + +try: + from secrets import WIFI_SSID, WIFI_PASSWORD +except ImportError: + print("Create secrets.py with your WiFi credentials") + + +WIDTH = StellarUnicorn.WIDTH +HEIGHT = StellarUnicorn.HEIGHT + +rtc = machine.RTC() + +DAYS = ["Mon", "Tue", "Wed", "Thur", "Fri", "Sat", "Sun"] + +# Enable the Wireless +wlan = network.WLAN(network.STA_IF) +wlan.active(True) + + +def network_connect(SSID, PSK): + + # Number of attempts to make before timeout + max_wait = 5 + + # Sets the Wireless LED pulsing and attempts to connect to your local network. + print("connecting...") + wlan.config(pm=0xa11140) # Turn WiFi power saving off for some slow APs + wlan.connect(SSID, PSK) + + while max_wait > 0: + if wlan.status() < 0 or wlan.status() >= 3: + break + max_wait -= 1 + print('waiting for connection...') + time.sleep(1) + + # Handle connection error. Switches the Warn LED on. + if wlan.status() != 3: + print("Unable to connect. Attempting connection again") + + +# Function to sync the Pico RTC using NTP +def sync_time(): + + try: + network_connect(WIFI_SSID, WIFI_PASSWORD) + except NameError: + print("Create secrets.py with your WiFi credentials") + + if wlan.status() < 0 or wlan.status() >= 3: + try: + ntptime.settime() + except OSError: + print("Unable to sync with NTP server. Check network and try again.") + + +def init(): + + sync_time() + + +def draw(): + + # Pens + RED = graphics.create_pen(120, 0, 0) + WHITE = graphics.create_pen(255, 255, 255) + + current_t = rtc.datetime() + + # Set the pen to Red and clear the screen. + graphics.set_pen(WHITE) + graphics.clear() + + # Measures the length of the text to help us with centring later. + day_length = graphics.measure_text(DAYS[current_t[3]], 1) + date_length = graphics.measure_text(str(current_t[2]), 1) + + graphics.set_font("bitmap6") + graphics.set_pen(RED) + graphics.rectangle(0, 0, WIDTH, 7) + graphics.set_pen(WHITE) + graphics.text(DAYS[current_t[3]], (WIDTH // 2) - (day_length // 2) - 1, 0, 16, 1) + + graphics.set_pen(RED) + graphics.set_font("bitmap6") + graphics.text(str(current_t[2]), (WIDTH // 2) - (date_length // 2) + 1, 8, 16, 1) + + graphics.set_pen(graphics.create_pen(0, 0, 0)) + + su.update(graphics) + + +init() + +while 1: + + # Adjust Brightness +/- + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + su.adjust_brightness(+0.01) + + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + su.adjust_brightness(-0.01) + + # Connect to the network and sync with the NTP server + if su.is_pressed(StellarUnicorn.SWITCH_C): + sync_time() + + draw() diff --git a/micropython/examples/stellar_unicorn/weather/icons/cloud1.jpg b/micropython/examples/stellar_unicorn/weather/icons/cloud1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c400e81f4e89910c388c9fa5cc751ed95ab3e0c GIT binary patch literal 1151 zcmex=8LvnOK-vSy@`H|qMvW5}awt1(JSZA;@q>zSQc)8pmzcPOq?D?fx`w8fiK&^ng{76V zi>sTvho@I?NN8AiL}XNQN@`kqMrKxVNoiSmMP*fUOKV$uM`zch$y26In?7UatVN5L zEM2yI#mZHiHgDOwZTpU$yAB;ba`f2o6DLnyx_ss8wd*%--g@}x@sp>|p1*kc>f@)+ zU%r0({^RE_kiQrinBhSN@fe!F1cClyVqsxsVF&q(k*OSrnFU!`6%E;h90S=C3x$=8 z8aYIqCNA7~kW<+>=!0ld(M2vX6_bamA3CDe@c!`bm>Ev z{ke7g{ITwZtheH}_RkcXX;O9ejKGVx-+rzB&9?l_wf_uT{xclD@^_8ziXUdjBV#>Y zt*@7F`_Hib+~g7)!~YDN$uCp$Cm-H_o9+JFo;BN)>Nm~J>1F>Nw10!F|F?7h8JbG6 z=5g--;kokP1$!oa8)oy?JR8C4hn_Z($!d+o4>h(-yQKEv$0WQKi;&{nxau?6DGAxX=}`}sWEa)b8EH*AAYpBd)CsU5A|DXbdUYitDf~yUoy3l z*UM{P?4*SB*$)gNPCT2q&}*+wS!(<7pxG;@nn#%|Xo~z6`J?lHr2E_d6Pf=<_4@t~>-T(KG3DR!PYXW(J5*Z#V|IP=e}>Gz`+sx) z4*sWRf8&0_?@V*M%=Ikm->m63{&)LiQO)yLl6|3n*H3-=bN;uu!nR-Ya;N>R=X4kU z%5$0heDJHCef+on#!I(-oBT~;R%vGO>FG27$@d?sb(ZZt@Hd&e=hrlS;g(8LvnOK-vSy@`H|qMvW5}awt1(JSZA;@q>zSQc)8pmzcPOq?D?fx`w8fiK&^ng{76V zi>sTvho@I?NN8AiL}XNQN@`kqMrKxVNoiSmMP*fUOKV$uM`zch$y26In?7UatVN5L zEM2yI#mZHiHgDOwZTpU$yAB;ba`f2o6DLnyx_ss8wd*%--g@}x@sp>|p1*kc>f@)+ zU%r0({^RE_kiQrinBhSN@fe!F1cClyVqsxsVF&q(k*OSrnFU!`6%E;h90S=C3x$=8 z8aYIqCNA7~kW<+>=!0ld(M2vX6_bamA3rXB% z%lm4X&=;}g2iHx6nKYJh6>i?S&A-_16r(f~JrZw_H747rZ$mRO0pG}-`;Z#A4 zrj1*A>yfmpA9uL=nQjc-cr(>!KYPQ{&ejOatH&QHy-0j{;aFjX_JeuKN2O-`Ic{() z{M3(Z{n8Ib#~wUwTiLUIj@vx3tv0e&qI2e2861A}xO08STumo0!^4;AE-hIV@SnlD zGilnr$b@;Cit{ApG#5^lvP_z0rl}Hi>|vaxa;e6P2SyvT4hXoq$M3fP5XFBZ`(Qo8 zAOF05Xw#QaJ48N?KBm0FjCHlr!>FD3p zt9MJkUM(3NvRkUN>-L9P`xpO_{TSYEllkFu`yZEwnPHK6Wj$*&dsqMFxvu`NB`Pnk)H0gBWwEB$le$5U;$^R9#Vt)WiivzBRkko)#k?$h+jPO>wp*`m+33%5Vv?)Ut~U8-&;Jap zTz_|{XhnZp_Tv)Qahc@PAGfU*&=$#-nijFtHIr+B(WwKcO|*QTh4&68SY&)qSVBXp`&(Mm2q!#NAt zRqiBRpE&(_<+Wh0EuYrhH#w~s6*xB|^=F$tJJ;o=ETPphrde4_7A#ej^feb%o9wyy z>Obv2Wj{`Tyc~47G`}Zacu(#}wf_umTPK}%pMCV7!WGjgmvqxU`JRc2-FoGG_VVs+ zO`Q6(&Pl}m%2+(>?Xsz&$EO6kR_#m+pO&&i#x8vF(;G6&bq*f9d?@v1nlOLEfrp8j zriKa`kx>F|Y?Rer^VOZ_y@1x=2*l>70~#)>s%O6&BcJC7tAhR&LrtR|UvK^ewLmrZ+%aWcvrCjA8Gbs*vn(N`z ztdY436G??xl9S3TPxn-t5_R3X6|;n0ZufN0xqsbr`+U#$kI(sjzVCBh->+g^@fy$} zczSyRAP@+MTwj1<3UJ@(zNGA86MBlt5sx5(Er|LLlqY=hx2x2pp$#)zEmewT;_;yQA|?S0AsR z|8U^Z;Nua&sPM(u_{5}0JpJbF%)8mS_tKA_78Yeo^3Tf~E)W3z_GDjS|8l|CT}luL z7^1S_0x6}fZ!jDJHFHqb-A_`9O4Kvok)^8dR(!3c7q-=rEHQ{qdah<@;Uq#yH)wy! z{u?a&f62bV{&7tL8eq`+=Yin>9$1U{&>$(w#>Gp)!G2nD^}a3E(g!pYl}O{_RcB2) z@>BC|MQF{GyYAmQwSk z3m!n_1>&?q++pV$3jczRNvT8u^f|^~k2mZ>=3bGtFz2uz!)BK|rKn}}B&vJl*vz|p z>jLBTlir48$Raaus-C-w;>`+5QsE+X-(%LPj}%$&GAd=K~1c1Q|LU0`(ZZn zF1K@E4;QO5V4e*l6^Ep*o>u_9;rQ3pYr9t)>v$0+_hG^EgYrK_3Lqzg7(4B%`;mB8 zTW`f{N??F^6mDC&r9oUH%lFN_#g@0o1X7~~@>-}Z%9UdVcF z^;L5mzBe(>2V)sgCyMgTLrBUnX=5$b_VfVGWkw#0)-W5z@>i)M_Xr2x2D988IJu>b z-s~U*f>2Q=&ZK_spk{bSSPh`Zt8a6e{-|L}-ts+-DRq++bYPkF&9WF1xwqIX?;%Nc zMZhi<&I%d3mWz7v1-0Acno>#+(x}@&<|4)Op6UjlEh6TS^4|$KRYJPm!V^#HdMZV* z7-oEuJN2sV>8T{!lgxw!njIwBYQaloWi$SIL4qH5?QuHe<)))POT|*^$e!5lse)YY zr@fnoY^F{b=gv&n3EBlVcOF!B*|hQN7?kX_oioP1C&Z_ed9-BQRh2{bLoK6iwWfm( zP7;GAq8{dlV|1;Aa-xBoQT}MNn-S;4VtQHA;~duFr8R+;rj%IN3D&&aE4gtF)1h9( z(eSm>#%YBWF)<#djp%38sEd5GGm7BAA_v@YWk>l0%*awcXVyp1>LjPnaM)+9`a}JA znG=FFxb~*^>8V0$uDIqWvBzEu0d7xfvbsmr^JmT7aK>IvYIN9eTg%TRE;pggbkFLvv%StlYzK=PKiZ8$^;sesnETlhBNF-CfD{3G|yBYuc5RSV7B(5<`z` zUcd~as)!iYk#c2qSXM8IH=u`3>L=)LH#%;MAm3$pO$w_~WDtR|UvK^ewLmrZ+%aWcvrCjA8Gbs*vn(N`z ztdY436G??xl9S3TPxn-t5_R3X6|;n0ZufN0xqsbr`+U#$kI(sjzVCBh->+g^@fy$} zczSyRAP@+MTwj1<3UJ@(zNGA86MBlt5sx5(Er|LLlqY=hx2x2pp$#)zEmewT;_;yQA|?S0AsR z|8U^Z;Nua&sPM(u_{5}0JpJbF%)8mS_tKA_78Yeo^3Tf~E)W3z_GDjS|8l|CT}luL z7^1S_0x6}fZ!jDJHFHqb-A_`9O4Kvok)^8dR(!3c7q-=rEHQ{qdah<@;Uq#yH)wy! z{u?a&f62bV{&7tL8eq`+=Yin>9$1U{&>$(w#>Gp)!G2nD^}a3E(g!pYl}O{_RcB2) z@>BC|MQF{GyYAmQwSk z3m!n_1>&?q++pV$3jczRNvT8u^f|^~k2mZ>=3bGtFz2uz!)BK|rKn}}B&vJl*vz|p z>jLBTlir48$Raaus-C-w;>`+5QsE+X-(%LPj}%$&GAd=K~1c1Q|LU0`(ZZn zF1K@E4;QO5V4e*l6^Ep*o>u_9;rQ3pYr9t)>v$0+_hG^EgYrK_3Lqzg7(4B%`;mB8 zTW`f{N??F^6mDC&r9oUH%lFN_#g@0o1X7~~@>-}Z%9UdVcF z^;L5mzBe(>2V)sgCyMgTLrBUnX=5$b_VfVGWkw#0)-W5z@>i)M_Xr2x2D988IJu>b z-s~U*f>2Q=&ZK_spk{bSSPh`Zt8a6e{-|L}-ts+-DRq++bYPkF&9WF1xwqIX?;%Nc zMZhi<&I%d3mWz7v1-0Acno>#+(x}@&<|4)Op6UjlEh6TS^4|$KRYJPm!V^#HdMZV* z7-oEuJN2sV>8T{!lgxw!njIwBYQaloWi$SIL4qH5?QuHe<)))POT|*^$e!5lse)YY zr@fnoY^F{b=gv&n3EBlVcOF!B*|hQN7?kX_oioP1C&Z_ed9-BQRh2{bLoK6iwWfm( zP7;GAq8{dlV|1;Aa-xBoQT}MNn-S;4VtQHA;~duFr8R+;rj%IN3D&&aE4gtF)1h9( z(eSm>#%YBWF)<#djp%38sEd5GGm7BAA_v@YWk>l0%*awcXVyp1>LjPnaM)+9`a}JA znG=FFxb~*^>8V0$uDIqWvBzEu0d7xfvbsmr^JmT7aK>IvYIN9eTg%TRE;pggbkFLvv%StlYzK=PKiZ8$^;sesnETlhBNF-CfD{3G|yBYuc5RSV7B(5<`z` zUcd~as)!iYk#c2qSXM8IH=u`3>L=)LH#%;MAm3$pO$w_~WD$(^4|n4eC_g49B|msbeUzS&`8X?|R#5niUQ}H2yy^wBy5?nV z9h=kK(%RPE@usJ@uYZ8|esE}lKl!hzkJB@=bHbI?PiyNN;O5qz3j#p@e6l}a|KmdJ zx+GvQC`@|K1(6`{ZYTmKsctBxV0l@Z5UQwQ6epu}AuX@639f1EEKv5l(JiZT!el~A zxJUc9?Eiz^`Af1tVgGdv0di2t?&m=ffCV7(pWi@=;9+6_Rv}<42958yPiC~qhcu(f z99{hF4UP{&keg8cv}es1Ift^xRaceHW%aGsFzDcoR{nU9+d$nlLsC|HVMx&{5(;0P zqcHbDZ5y$?t_fcGjNi5gvl-g~lo)c8g>*PehAReSOdATL3h2oZW2g^cl1YbY@S+i) z=PF`%FV^c8W66O8GV#pf&d2nJBiVXtXI+1DH3KzH@F&PVu)8Kgng@r z#`dk{+Kxf}n|m5VdCG*91+r}4eS+L8?J}L;x-X0SJ0vn423;6~(*f|-v&|L&F?D}pWo*|Fw3Vr_>jr~;(F^lHL zhkKw_n~_^8g<&DbDxU?T&OSamTB(Pusmn>H2NF#S>)nvIy))Fhlw%9ck}&7;BRQNp zF%VymrCXMQVJ)b$#SBJ z!;VY$aTvUJ>iM^#D!Jd7o;4acmo76W( zZ%a>iR=AGFPzlp6`*&z9ItFc1pf6ERPaPFeY^!`BhXgMnF;NOd^XObE>p5fbx-ez^ z9GG&dIV2wSB>U(<9zEwsa|22!PaVoli1wsy&PE)|Ee~4XxQUFauDf^kT7Gi$_=wlp4Za5ddmU*!!4xz~-R2A0n~y!yk@(PH{=FnXlnm!X!{ z)WVBoIWJ1F)Xy1i`XycTAq+1xsN+@uk1IQTroWcz@FXp2^2FXOpi7IJ=RqvjqX#EL8MbO_a#kX(Fr#~m+mB&L56nBH1 z%(BguuD`^W#aOn8RKN8U0|#yO>2YN_{OkW@uqGz=%$uol;N+eprOTxIts$D6+Kv4DO)FT^yGXVuH(9vo;vpucK;s*c@pzFahiDlaYxcCQ%5S)Lcsin>%0*4;trb>T>)LD#BT z^BFg;vrx6V&aEnle@2>Y;DJ7q-LTvqj6+K*x&>Geofo7UQT zSxjkgO$d{D-D_*gfyo&dMa7`%_Y0Oy8ig4$U?6AnfFhf6(gV|@wCV+Zs5y{&CBK-U zp2Hm;H@w{FzD3bs^;LNOG;9A_&N-#j=NDRXz00KNB-_sjGo4(e$I+(Flz?_vX(x(K i`H{gIbWfx0AU_D>Xz{BHeQ|z*+K;9(I-IcL!QTOuyT7gg literal 0 HcmV?d00001 diff --git a/micropython/examples/stellar_unicorn/weather/icons/rain2.jpg b/micropython/examples/stellar_unicorn/weather/icons/rain2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5fe470c72d496ef8a7ce8d4dc7537932a3fe3cf2 GIT binary patch literal 2100 zcmbu-c{H2p9tZF@5=$&K5rlM6RW;U%W%Md?RLj^p)7k|o2DR0ihN)$$n4;yhjjaw^ zu~zN7$xum9rPHyLqL##{itSCSyols-=bpLe+`sO*^Lx(o$8(^9& z#?smnfWctEwSxf&rU8q?)!(YakiQjhcv$cPK#2h-fs=69DL@DXgQH*qCZGfWFyTM5 zfqxfF2#ydI5fwv;BX-XTv!-^IOvW)*ar|OVHstdxd{4-x9F(|S-sm2 zo{FhlXy}oec;MK_J*xT`mcau{r_QD^FAC^8YbGV;AZ+_X@hIV!jT`&Ot*OmPV`!5&j zz$Ju0z!9Q{E|?JcV8T%dVP%|%jQJH&?+ElMz1w247alxq=s~LJUj^lSB8SE0PaCjQ zxrelW$^JK3(*Gs<3-%w^6d(zQ9XuW!1>ga`@5(lYkBkxkhtE+$_``Gh=&f}dSxS+>5Wnq=S1Ytc} z3uQR(m3XL)EfvUV&y!~Z71Z(kQ{%}!c+u!?u{Q!h%&@C0wzMLhG>3f;r5Owu2CwO{ zCmi|o;We6Ol`T2Io9w5(w*MjL(M*BDhE`Z&ol;67((G6q3M3UX1VD-zdX$Eqe{HtT z-yLL3*?Ja85Na;7YBv^dhw0oXy*J}&k}Fg4QbphT^lgimi`_;1LcHB1L^`(7lPJmE z;oGzQ#Pg**_R@9R?NqhoZ7Ke-aZ$00J6^`EXIx({<S=_PD z3Ud-)imm40zRZyq5fgIWpH|7@W0~HPzo^%^H?J&k+wE+7tk4+@`okxmb`6((RaQ0F zPBw2pnvXFC#RWh-kDD+j06uGMY0c!6R4cwOnGEQJTs5k{AY~ zQvf8>Y%9#Gp{QQ0P8Dk=(YixVBGlpH_-eo?$z!k}5D@m8vkZ;A8 zJ-KsnY_+98Y`t`ZH_)7Bu;*#YA3tkm^igH=_aP_?*8>@{*U8K{`(8JG#9a?m?>UYE zZs7Y&f{CX`mgx|`N%FTAw+XtBhF{(*$S#D^AVX(2G}m+KeOVow$>3RJj(0G(U*wwJ zQ1#b?^^UXg6z?U6Bm2}|4c-1li0G%KrHmz2S;<`}3_?B&YQf4>t{4|nx*O}(Lb(}R z=b;QWW>_+|sNnec(~82Q%q}cfiZWH466Z$UStgw*t_|GUzKMx#?YyrOLXy(|ezb+4 zX!35Y?&0|Q?(E8Ttu&-9x~3LU$5R8J>{EE(6sd4A$vO#IG2M1Vnb$^Jb97m7FNQCT zjybY!e`9>ws^j24lBrOxbCHs)DKBYDLcymoHshT~BJQzaP0dzK`J@-e{l@(OQhab2 zsX7?9BC~89N^3f0f2*pWwU2k2_@SZo!pO{-ta2hJRJ^^hxxF3NH=Ccx{!W;a#x-(j z1@Vk5=|p;Hwd*n;4KguvaymMEIk$mY!pi8%?2(T4F_J0Xapc-)^CV5Vs%IgT$oz4E z5Ih)5z1|f{%N-}a_tK3&9(S7Sa5p?(0LVdM*-JY-Jx-oR$7a1^dX2h|X^{g(00h2$ z)n1Uw@y`n>QJ{GRx=1^p8?rZ%cf-1dB)Fu-`e`N3d!X52is7jQg3bU$#pL>p^jgv) z7t`pURBa26-rIeS%XhwBpB>RiwL*&5N2}X(X4TnQrgL>sv6FxK+=%BE)&>t@=spdvYnt#D?8PL*^e7(BR!8RPN;k^I_h3mMZOpEU0$pd7Z(Ae5jL&3OOa@|Q zE$C>dGagQ82l17G^aVE(1{s>izzT7SYN?38Z%w3)d1(%XInxwo7)Bz_+;Q YSxqSm)MYQa8C{=LePx#^00fi&1lYIJH2?qr literal 0 HcmV?d00001 diff --git a/micropython/examples/stellar_unicorn/weather/icons/rain3.jpg b/micropython/examples/stellar_unicorn/weather/icons/rain3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..91be10a9dc810584d65b3f337a5c77a81cd9891b GIT binary patch literal 2091 zcmbu+do-=@r+0VP)Ki>5`?{}@w`$|WpQ^0O_ z7dICG27>|TwiX~A2aax^{!(p+{H1{H%hEOgr2y;&_QGKXfD8%-N5P~#Ko0<5a(`q4 z|1OveTvl#}yaGZ|X=|WjToT!_3#jEajV{Y*|symBLznwEYuBQxh-?k{=y1@{Xdl|C+eQckaUT3h$LzM=6& zQ!|IlYwzfM)zv*PIP`XSWc1w_UoicTnUAw`pM>Db>gO+OU!nDlZ5IrH|M_Hp!2ZjH z+H%Rr%ED#kw_Pw9^45lmJf|pHL$v-u*doC!x}ci(Arz17IwK`QGK5c z-w52M{Y&=0!LI*bvOi(}ag71WaM;%8!BGGXkc7{FMN1HIQb4v^#9Sm!ZTd~;cOqkW z_GGRJKIJPn1SO(TpFJ4(LO=^K?m-Q8mBPZIwMJ$+bh$$?MLav)e91DZFt03z{xS-K zZzxs~zSk3@me&lSGvDxHcc_RdzL1toX5-}JTNQexfPyWnEb(!9CTSA$9?G!kvW;G} z5{&ptIQ@$)CKVp!$WU^`!NtvwdG|gPX)K$@P?&mD3c^u42_+)YxKe=Xs5;o9I`zhJ zNwU$y9rM5!DFrdS_|KMSuEm)B?eXmocx=APqgRI3Zu_nseKpfsA}PjszJo~G%WR4= zxGp&%h)}$b4E~mB@xs%{RNW)@LSj-};>>!8eZzPDuVxEc)J=@(U_lbg*P;L$agh%W zt!hjveWAHd!ozt3ZLuS2p(_hy#i2W)$}hiX1U{di248r3uw7MeaXC2;RyJ%ug&Qsy z3(mN|opT!E_9#k$WHFdBDFs9>I4TawLO?y!kqiBFi0L+zqB%#NFaZgFPx7eJLw&OE zO^x@*tn$zs>Sb{;x;0OtF=qF5CTdL4jm^b*<&hD#Wi4mXDZ%-AZ`3Gdb{W_sj}o}t zW+{-`;!*BY3B|Qz%qsXFC~i$wNwI34N zSazMd6NJSFXFI%>)G7a7A27lRGma?ehCDCj)~IjUHITo@(ETz_!vv}eS%uRo&`8=AAsE|HMdrv~eT zG_j+L%$(t+jfwfMgI-eLdcTMO~xDshOYqmrJK2%bpGXUuJk@SH-Y zTB#x&@8r$={7Ge&X0eM_G($!x5eV1jI|_ALxp*y4=xkw3hWIFjxbqr0c8{(m>&FGN zc=JUHhIL1RPN?7=!Y$BH#ERa1uZW4eC&A>uF0=&-Q8_U{VY0q z5tsr`Z_aS%Nu~6j&>rtBOnn^Y7vsSwHB0}Pai$7|O_EqcSKD-VgC{!MdS$qbgjrsR z$q?3|oWRUv#23-1g{FOTSG*c^pOow^@nBr}*51G}8i-Lbxwyax6D{OaDcfohRaf9^ z9h)tVhb7~Ik{fif&x^iz%1+2FMxKgAOwF6TIl{F+-tj=+W7GRIU5I&B@if}6dOXO< zK~hS8qm4S&Pt0qMN24v?OyM-JghvT4+p8&@{X{yEr6g)h#~z;QRrusLVFc=BhSd%x z;mX)ME3ZD8fM{K;+8U5>YpZcb&#ivoGt!EC3Ov3MkU(*9jn-(XeJS3zVGSMRcbJ<` zJ8FwM5Ac`FaxF)1n_2I!(P$Yl;C!s(*$0s9GGE7G&30L^XA%k`{KaPp-ad>20=_mr z_y>bv@%u;tQzzCz+spMn7-DDD<-;9dINvLCl`lBM?#L-I4(UNs83ZH&?e72DLEF=p PSnlF=+j!6mCw=!%5gW-L literal 0 HcmV?d00001 diff --git a/micropython/examples/stellar_unicorn/weather/icons/rain4.jpg b/micropython/examples/stellar_unicorn/weather/icons/rain4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e676daf20e4affa57ba670afc9274356ec35947 GIT binary patch literal 2053 zcmbu+c{JPU8VB%SB$g;`V@sQA71h?#+OL^3$(^4|n4eC_g49B|msbeUzS&`8X?|R#5niUQ}H2yy^wBy5?nV z9h=kK(%RPE@usJ@uYZ8|esE}lKl!hzkJB@=bHbI?PiyNN;O5qz3j#p@e6l}a|KmdJ zx+GvQC`@|K1(6`{ZYTmKsctBxV0l@Z5UQwQ6epu}AuX@639f1EEKv5l(JiZT!el~A zxJUc9?Eiz^`Af1tVgGdv0di2t?&m=ffCV7(pWi@=;9+6_Rv}<42958yPiC~qhcu(f z99{hF4UP{&keg8cv}es1Ift^xRaceHW%aGsFzDcoR{nU9+d$nlLsC|HVMx&{5(;0P zqcHbDZ5y$?t_fcGjNi5gvl-g~lo)c8g>*PehAReSOdATL3h2oZW2g^cl1YbY@S+i) z=PF`%FV^c8W66O8GV#pf&d2nJBiVXtXI+1DH3KzH@F&PVu)8Kgng@r z#`dk{+Kxf}n|m5VdCG*91+r}4eS+L8?J}L;x-X0SJ0vn423;6~(*f|-v&|L&F?D}pWo*|Fw3Vr_>jr~;(F^lHL zhkKw_n~_^8g<&DbDxU?T&OSamTB(Pusmn>H2NF#S>)nvIy))Fhlw%9ck}&7;BRQNp zF%VymrCXMQVJ)b$#SBJ z!;VY$aTvUJ>iM^#D!Jd7o;4acmo76W( zZ%a>iR=AGFPzlp6`*&z9ItFc1pf6ERPaPFeY^!`BhXgMnF;NOd^XObE>p5fbx-ez^ z9GG&dIV2wSB>U(<9zEwsa|22!PaVoli1wsy&PE)|Ee~4XxQUFauDf^kT7Gi$_=wlp4Za5ddmU*!!4xz~-R2A0n~y!yk@(PH{=FnXlnm!X!{ z)WVBoIWJ1F)Xy1i`XycTAq+1xsN+@uk1IQTroWcz@FXp2^2FXOpi7IJ=RqvjqX#EL8MbO_a#kX(Fr#~m+mB&L56nBH1 z%(BguuD`^W#aOn8RKN8U0|#yO>2YN_{OkW@uqGz=%$uol;N+eprOTxIts$D6+Kv4DO)FT^yGXVuH(9vo;vpucK;s*c@pzFahiDlaYxcCQ%5S)Lcsin>%0*4;trb>T>)LD#BT z^BFg;vrx6V&aEnle@2>Y;DJ7q-LTvqj6+K*x&>Geofo7UQT zSxjkgO$d{D-D_*gfyo&dMa7`%_Y0Oy8ig4$U?6AnfFhf6(gV|@wCV+Zs5y{&CBK-U zp2Hm;H@w{FzD3bs^;LNOG;9A_&N-#j=NDRXz00KNB-_sjGo4(e$I+(Flz?_vX(x(K i`H{gIbWfx0AU_D>Xz{BHeQ|z*+K;9(I-IcL!QTOuyT7gg literal 0 HcmV?d00001 diff --git a/micropython/examples/stellar_unicorn/weather/icons/snow1.jpg b/micropython/examples/stellar_unicorn/weather/icons/snow1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de769f956703ff6b8be4465b1e67b3676373c1c0 GIT binary patch literal 2128 zcmbu+doe*`K)`oL3lJ^=cE{Zxs^gG96mWc5_ymv>2hIWKz#t7kL=FU&0||!#7yy8vzhwje zE|3Tq0u>b#KOrG`G|(jrh=9Og5eOIxg+Pv`?;o855ILy)c@rB^1@}NPjYvh)r2Hyz zP2091C66htmRV3#@(Bs$Q!1xbwRJ9B)YXHVTOhu=jI{gO-of$eH78H68{TN2Z!x!S zW4{j$!Qt;j$J~u2+>1*|C8hl(JtMQA@NY%MB@Z5!J|_QIT|=p@t8eed9NsSu(r#We4Y8P|7H9=(Bd%s4PEckp)TLcgs{SM2V&zPtrytDPMD>@?q@=x zI+spcfv#PrC-Vy>lb`SAUSjK=9x+0U1V8Y-8w?%VBepjicXu1>YL?0P^-M$kVHzLUT^e`kKY zk5a3@ z6w!J2v@3E9TjKAl+0uN%TK>p8{j`l?5I)F5M`p6aO}FW2X&8Di7QRi-G&UX-f_b%?)L@+aw2S)2!4 z^?QFFH~#!aZ!s5_JVqh46uI=RtV7J9R6`TdQ#rDV+GgUgIOu59eTWlwh-KLxmAxd z^&w>j#VmJX0$tK~EjW}xZ_Q47EvbD{$mD2hOG)RkgrLoj1 zKeTRx#i(eB68Kejb!VxQ)FR7zIfoU`jThEAbzb!EjC&IttWRfCoXv;&V(!vnGuTAI6?<7;3r781(Z9ddfyCJaT*CrgV6-ARQNWof-^byE_x%Zvkha?p!__8zB|qe|Dy`Mbaq@?q_thyB`-V>1XA({nPea zra1%4+-ceQ#n6A#X;6drwg0&p)cKlGHc^6qzh9gE8Gbs(NP6Q_F{U!h-zC(0j@Z*5 zaAksgUzxH7@$(Adtt<}JEH!6UZ&(m-nPLWpXZxMkUMUjB1T&tzi1aS10^R~?k;C57 z-;Vd}pZ#GQ4wK&K7FeZ_mtOjh!&^7{tV(dypr%z-Lc6Cdoz3kHGd!c^qXzN2B#KKLni}R9&$f*RR=_~EIZCRY6h}2z z1Fvd-c?P-(Gl2i9(H?ur`CC$4euH|qHAh9uI;sO(6(Ch&p_Yx~j&MucRbd#a~uK21%ZTld4Md+xvLcdz8FWER-t z>2bmXfWctEh3y4Meg@ojx<6GrA%7}h=d$D(pehd>01m)mdVrKF46X{3aDe>)0F(JW z8~As@q~OvrvU2hYib~r9j6Hx93=Wr)hReuEOK(r7Zl43vsxo^ITDr)p`CgRMyQXfH zUR)!u@7luB@Ed^)tS?=^qo9b;)Y8^DWN38Q*aU53YiIA^==K+PkK=zm;prc6=4@b4 za0u>lL}XNSOl;DPpR~5MGdeoE zx|suP4)^)sPcL4Mj*U-DPQ9Jxfr7br?>~H;Usx3Wy83x-{fp@9#*PaH!2fu%-(mmd zQr&h*NlU|}<#t>!sg&&vSCy7IXeqnb#aHg)H8nk}ba{2x;+htgg1)sMq;cu`h$6xO z4IUEi(0-HsZ?HT6m+TMNe_T9Z7aX?zd2m$#3y7~c8G#mR_*D*Xe+EJO?~7GN!oa*_ z(|G;wAaQ<_jhIG@4ZJ5$UtXpk2qXtz#+9UZpjFHYiuIWiAbbY$>K7SGfGn}x=DuE` z=E{EP_`p;+is0Y0C;@o3Vuv<}SQI)SR_lnSwezReH>P#aseBD0)j-&mNNi5#hWfFkvtZ$8HnVxkHgPbT@kRWaMpW=9E zxp>-^E;sP>8hXe%Ww|&!OcXii*F)wF#NR&EUd0!zPx*BBbp{z_3;4eX`0k}*{cqnT zsXR_g$@!_*3aU=G&$pg^C;?@K$GAOBL~h$d$Tm0H&m+^9BESNv^!WAZM8hw zV2KYYdA0Pq;OK+9i9^@M<5J~D*veqGR4tB6z;PTR)i6V}Nmj&HOp+7QOxaACfI)cK z*R}*u%{ENKq6^jO^`zKAS!|_rwRRpa%+UOSYcg zrioI#NTE~xqo4ojb;7G3!3(WkeivqYGdYy_u8E64skHd)s+Je!1PS4MQQ*mbVaTEw znZurQ5oWIP8|mPRam^&7dSwMQz&BNhcXB^GYB-Ks#Lu|5eluy801aCT_O#~@huHFo z9}9I4RlIx9r#^_$0tu^jl=2}5f$r`zyS$y)TNg-H_=SrVd)ljQ%|hdhmZi% zRhA4fw}&Af?;ZY!zZN<^bj9(|7hX^}&-=Z5XJbe3T0abbj8&y3wBYz4;ySC$g~VLO zOeTV9OSQ{H*PEf^5zcm8rs4u`a#f)h{n1ps656!&Kbq0z1U2MKT=7J4e^{mn`UgfRTB@!amRTQz<1cUZ}8@m zw+qb7jMuG2n3*~AsPk=*1xo@H@b^KH-4KPtEbTLgbg_E~a;X&2u>q8ED`b&H&;|oh zs1YX%Tpd2+q>w8P{dd{T`q=PsYO?GrlPW2qmA?O<=@*i{*laDVe0?N#88%Tt8Cresk9?VK!DZuSnUIoS@hpuX`pcmlZI08~XzCr8?Oj zWcGe;?sC+y^d!kXwnRg33*IPsA;3I#*BJe51sQc;v-~Aq+fBo-z?ppT;&`uM^~9*y zP}C;a&6rKqWX&iM>}sPoBml|GX&+6rLTMXAI~y%86U@QFxaS)cOXrUY)$Udu7BW98RBbAZo>(M@}W1?(5$ra(we_9U(?RAIegwK}(MOZbS`zA;i2gyGIan zWNoQusONT(dhBr6Qm0N>dmeScZ^pKo%2K}HYkEAlk)VP30hHe~rQ(ZDO{@^G1{lZg zDVs`cK=Z`rsbqRcP}8P$Oax`2WS(g?zc;$0sBY0NnIIxwA)y2P5rY2%3l4KFV2HCyAJdA`&swnxwh(;L01z zhpW4gC}NENk~YZ_bJ9D+j~bQ)^7R<8_IF#^;Ex`K!Dk9XUfW+icLe#qdBCx6pixs< RBfAN6M(dlIxhzpK{Vyb-`Op9W literal 0 HcmV?d00001 diff --git a/micropython/examples/stellar_unicorn/weather/icons/snow3.jpg b/micropython/examples/stellar_unicorn/weather/icons/snow3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b85dc3b2662348326d4ee724492ab1b30e9baf00 GIT binary patch literal 2223 zcmbu-do+~m8UXNb3=I)YF5}jWyLPrjE|ECh2uaAEkfuq+j3lDQbrxmDB{@ZeOo^e1 z5ke(TIa8`&VJtY{_(8$d7rg@@AJyXr%p#i5{T#H6E0jNB_>_EoJpZ(W#?QkD7;Zre6ytVZe~&@4>@3p=TNHdUydb^RUgPI0*G${w0B#EO=@47UflL`fYS0d$ z<}jcqdlZLG349=w0~3xi=Z7FUKa?%gY>i|#Z?xK7G%~|YQpyk>GLx_vv3M6@@dlx4 zHL*!?(0a~V4wTu9h4R?4SMCN~XL{19+oiP(a^j?I z1q&tl>8{STxDcV6@l$a5R&iV2>_iIr#2{VvvSlPD{_W1Nv&E7UNJFZF6&ZoQfyJWY z+!U-GiNkJl%AGse@4AD)3+g}Pz}Rxv*NH2bo{TwMwhOW-H@`JgD?YnuTt^TdFY@uA z%nx|U0fZ#&^VEJf<6yr`H1gc(~`i$R`?KYswXKB%v0;^wWev+KEmJg6MNSw&;y`4{f zSkw8WSq@};6}#;W=iPEsqk83Y-l;&o)pYVYQEkNZjvd@#d$Pv6NRIE2gO@#1jTGhi zm?DxS*KV4x%E3JAkv(-MV8qrMvmB>qF*>0s?%*SChaQQ_^UO>Mo5raSWai+$&zbF( zDWk3D#bp1X7VG4I$Gv~2FZOnFkG}L{C**nAMruaWOP=%L zBxOO^%=kXkSiU-`zymTMi1h2ekAMW0Q5brDR!rs=E#R$$ZU)0?y>)_qAAe<0RT2uO=30+CD#F+Y%eB z#Te{#?Jd@zcHt*o4&8-x)xwhGfGWQ$@LBWr`rrq^C-Ip+)iVF0h+ETkV{d4o1-wSh zs)iZWP*v|6%Kb03KI4R=jDXC8gdQTzByT%frwL40keZRfn^BUHbdlfM859d8>jIZq z9m_3zgV>m5>K$T7OGCu$DmBjPzB`rJ-818$yik{>PV%1tOfj#t5uD#RaAPKQCHoO zir>+WRbzsF)OHkq9pVu9p}2t*!84g!`SXnsIk){(btFa|+etG3W3pQE0@(wCrbtu> zz5A-vlNl^ zI?6??W}zLxbnj`ndAcF4e%OIpuI;0l&8`ayS=uz*jW^ADaOJL`r;u@+@1kXhcQv%c zZe@GWELtMAdtQTb!lIJu>C+f0%|e_FZJQ=@=n$Iz{z<|sjDKUQ1{;gIhMQp-6?Bf2 z_GK^iDNf*UUfT2RqSD+DuedjpLX>;tKR3s{+qyDd3O!sS!(lm!n{=3l20xBeB-e}6 zrZ^Wbu*{$KpQ(5Ct9&~i8Wkc8BeXd_F&C9r3tuI~Skw|?v}eYGOZEmeCYaF>gYiC7 zO45T-y?tmB#=jZrx-lIA9ZOHR6GGGcDx-O+5q_gKHPBvt>%wDJL)KfG zCoy{|Q~QP-zI8n9j~7JOZ<)0pkDjYvnE&i~{a3^Lx;a5$A;Smb%DSP(E`CH)U6)RJ znc(WH8xD=nqwC=|Ohb-A{#7fz^aq9bd#A)-c(&r6h8y~0Dy*YN8L!I|U*RjW%MaKu tmp;HEXSaT(JL4OEr0zcvyOl)Lz34$Pp*b=S9Naj_Idr*Dz(dN%{{>EY2KE2| literal 0 HcmV?d00001 diff --git a/micropython/examples/stellar_unicorn/weather/icons/snow4.jpg b/micropython/examples/stellar_unicorn/weather/icons/snow4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ae9bd6af3d2affd9c44eb265b5ed77fc179d1f8 GIT binary patch literal 2169 zcmbu+e>Bto9tZHxY<^psF^uR-S$^eWzA9^ODatM@KSm>3Qi!yWeKkaE61l0!M0fcy znjiW4l^*=Kb%3p@=Q)q}TlrEs z4XpR}-0ulMAQ0fl>H?ILfX7<*r)n+aPX(-9Rz3g_8o)+iBNSo*s30Iv1VkwS%mDzR z`g=C;?}Dg6VXA8C8k$<#s{^g;0Tl=osse+ms={Ea)2XZH01Tn3_mkr;HRM5xx&>9= zDdP%T!*X|1uYuo)Y?JfRGntxNC_^J-^kyr}7Hb=<%g?Ucw(s!Rv)9vW-+piZfIw1E z@F8-`jE;O8%kOUqy7-@dQ8AOQ4_C;J`t zUoOO|O9cjl!qnGX5S8TB4Mo6Ie{xjQ+jUT#LPc6QWoYQ{zQS(m)wFc>lNlU6Gopps zgq3Ut*J!`V{x?|W|0Vka_8*rB(1Ai$KM#rk+<}#obbCp>9&JjH;*fkIdP#IQUe2iH$WzPw}mmla<6bdeH}`8sGR^ySXU zGvOk)X(r=T501tSAMIzyNng3~)3#mZi;-)BQuk@N0ra`B4Ui1~rG4scyO@ekjuGsh#EkS(nq8OP zW6P6rvZANCeB&^Det6aQZINP=BlxcV(8ybFXm(QdOTx$wQc!uo1Igzl1}zruUDB!< z!KRa(3~XQUF-)$(c@D;A@r~Vav(pNO63FB!fnJ=8IYaDzOUiryNp@z|SMHD`(P%Bm zMbMnaeTi_IxsW6(Te|ZGL9BzhyS48%J?O1<=d-E0o-1{ttp&EX-03)tj`;|YaAOD@bt4OKR9PNz&eocpN)18 zsp0xoYtcvV-pd*A^>(TCtB&q5Y2wKWa&bi0OWiJ2Q}W~kvRC=V7h2UvA6`@hp?Z?2 z$u+byZig)vyv{km;ZBC*rKHit+6tc#A2gkuRp?`izZ92HK}%RMxRt4(g0_dj#$KPJ zv-{+1sktiM8dPJej%O#;$5>Y)I^6RIwl|WX(3X-M>w4&SAIb@|v3`+MgPvk#pUwLpdfhxDOXiVwwbcbJ;Qn6qOT}JDU(;->4g-P@JhqS)n_h$AEeKs|nd&agI$=4Vx zN3!Uxn-7j%$MqL?2++ls%AbR(&t?(VJ^bk~O6MdM=Kv7~y$hla&R9~HZ%%e)R=ULf+?%h)3dVl*Ye zrEWoYqVf&SU(#j14#OZn6^hXy1=P*P4(Wwq7*oM#Wv$EXor}&iFM+%0yJsO%(CH`g z!rx{c8pTo#me|dspN#%_cL~kOjsV+p=?R9t4!Vjx;|hob?kq5KY;FVfNh!QsoU81M z7j4sv?p-tEvNzpi`5=uDrmm45M*@5R}iLT!~_3XEJcCjFZ5K!K1NCG8WNq6_8x zIE&PM^17%t58=>JksWH8D|rhVE@#MICu@kVr8vAS_Aeqx+%}wFE>aC+Grzh$J|T~ldGzM vbJ@|vK-JBApK7oyD#P_5&vShlX5|=7zc#~tfq7!R{Lr0lgUz*Mj&kB(gd)(H literal 0 HcmV?d00001 diff --git a/micropython/examples/stellar_unicorn/weather/icons/storm1.jpg b/micropython/examples/stellar_unicorn/weather/icons/storm1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7ac6251071627f7786f880888b74fc460426512 GIT binary patch literal 1360 zcmex=8LvnOK-vSy@`H|qMvW5}awt1(JSZA;@q>zSQc)8pmzcPOq?D?fx`w8fiK&^ng{76V zi>sTvho@I?NN8AiL}XNQN@`kqMrKxVNoiSmMP*fUOKV$uM`zch$y26In?7UatVN5L zEM2yI#mZHiHgDOwZTpU$yAB;ba`f2o6DLnyx_ss8wd*%--g@}x@sp>|p1*kc>f@)+ zU%r0({^RE_kiQrinBhSN@fe!F1cClyVqsxsVF&q(k*OSrnFU!`6%E;h90S=C3x$=8 z8aYIqCNA7~kW<+>=!0ld(M2vX6_bamA3R_5p0RnOl0{dx5xF!#ai^Ih@0YyPR; zIi339(d*;)__qCMtYr3?e5*pOUNG}w#kyzW+x|0nL?&FA_b=ks{qLt<@Wk)oj(<`7 zVfDd!P8;cmvTE{8|D-;MxBn5YUzWK!Q|OP)ej0dvoj;# zzQ0wy*y^mxp-QRr@*n=or(a6$_`~(!&gQlq`s}kFSnTdE__1|r;Z`k)%%^)Sowbjr zt~Xrn{kp_Zq%iWBIdjK)XMW${o=v|>lV@mJt!mes@7~Y#X}>`6nXt@x*AG4_%9CB~ z`q)VF+^VB#rG^zX;aAh`lY^$bOvp&myu32V&o?QRGjUcxss5jm`h&jz86M1@X20R? z_r{vg2l^7P>x_Ryeq?$dd@)!0XyD7kN8_YEs!h!o{djq+_gSU$K9{~$`$qdu%HC`C z@4VOLl+G`Ioi4pQ=~6a5eE;OH|9baJ+Q@#$KW4{t{p~)h7jn$k_Q^$NR<)knYktJq zSI(E+{qn4vm;N&ZO%A-qbaau8*w4aMx9{A%8@b8dMm*rGNRj@}`xW2hxo%fHKQ`?j z%g$YUKDh4hwsGZe&ewNo`tq=epsebBqyIk<+EZ4?kS_^p1P`*^iZTKHUmcZCTvD*xmBNj!f=*GH=P1 zlJM_`J>N}!y=vdy^UuAvZr-Tut+KJWLO&-3!$@+JT=I~!XY00Myk z=e8HX8v!hLPTy5KA>S3S^O*MxK=K27fxR$@DgZ@7U`Pn>IiL&x5WcV3z~2Rd!r*+n z5c~pyLfZ{ZVgM8ZgF)diK0Y{nyZh?)Jpf1YiL2;Z?2>Rgk5DB@>Lp~~q*HescGpsxq0~o#9M_$_e)C4$}1|Xs!0uvP0hbOZfWi8dQPFzUcBt4 zGX`J38G1X+oSb_9$MnqX-24K2<ur0`VN78`pzsV-_QX;X*GjMb@mSJFWG;CCH^nj zH`qTeCLj!hY=0gM377+1?Bc2;S0JAUz-Jo2v^4cA1{E8#lj|qQN#xyLXvQigR#&>1 zi()IM8opiD)(U^9H0#@N0Spc1aCvNwr z`-nW?s*m>gv!)hlN&i!7@^H z7sjgTh!-&1GpVSdoXC}D$)s>3;>+<3cyW#yBmC$O2v_=4GnE+4Hq-(ZRAX3bou#OQ%MH?I1ooDuX?2SBujnkn6|z{^D>r=cP{&m0&x$qH@Ac&Rswo#D zbfaS3Uk8|Do%80;;e0h2Rn8|JeEkK^7oCdG;e^L`IPidp+Xd#2#?}*JT_<#87vuCn z3>&)aG7!9n;xykyIV;cB$PbZXGn(vsRr^oSS7RK!9CL!&jJW-F48OF`Uyjk2URqry zx|4HPxi`sjW{Rv3>W|Q&kL{*&O0YNWN*Mf=q`o%e=SLls91v(m(J-9{IOjUOfl}_9 zNpBFUM@EOoFeJ2@%&A_9qw$W@seSC39cd8HKVTvKjyLU}i zO^>2edfCx;R+z5p*Gp1L&_{Y$QJzt;-iq3>!LkfmcUYYZQlmXvNyh)I@+@dZQ>nSu z<;SsFbQH>Vsd4kTL#h?b6gR1&xL3JF95yLh4RE`Ww}Cqy+ErOiC@s*wi4Ca^+;l69 ztj6F9S~JVA*szCzzVnS^s^d!w2cw%DEG`Du=@j)iX4*V?BE3B=8~#%1HAXKb5 z3EW@8?IkNYcGL-4#P3fwQ)g{WF3yeXx8i6VE#;3qK!geAdV(2v^)kxq8%1vQQ^7vo zjBt+!OSQg?&o||JY>T2p47P~o3K-02piDu5bSmkLk9S8v@E%(Q)Vhpb>ERN4eVVWx z-LxtPBW{2QYpp!=6XR{umH1Ay+&W z-lLePzeH>Gpr{Jw?kZC#FfVU$<`jiN@so>lG&aoWm@RA%wzk}YiOqssFNG>rmV~|3 z2i%26uT0`FHY%SSr7|)Ku)?%M74{yC&Q`s$LSI7tba;?Ict~NC+=#E_py=JtYHasu hQeE$+n#})Vt8lq;?mqd1tya$2bXxbBwy}QR@Sn}1?dt#l literal 0 HcmV?d00001 diff --git a/micropython/examples/stellar_unicorn/weather/icons/storm3.jpg b/micropython/examples/stellar_unicorn/weather/icons/storm3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6081f046654ef0891ff4a29e6c9958699875cbd1 GIT binary patch literal 1835 zcmbu+eKga190%~Bc8 zKp+rc|J(vp{eb&?_d_)w@0V4o_AiiY-e-{J_ zgCo?C>L?A(xq+&M02Bg)LE$h20uG;>J~wv`z%dA&m3Eud76pVOjbj$uCtkUwZnC+& zK{xOfXu3AyWD-h4Pk)I4*38^um8F$~qm#4Cy7lf`wt8&a?&%e@GdLu47k+o-frE#l zqKSu3#gb0Pk>k&tzd)lWGg4ABuU^Z#o}F`pSx{KSF6P|6Q&PdNtg5c5z5k%GsrgAu z>#tASI)z=`J+FKFL=vg&-O%vJ`wye?iOJ7XUw&8oF+J~s0I=^*_6_zg7iP`{g~MTR z>l2PEBW105Uvgk+FTE`r^%3Zk0EnOx6a1x)CQ|Y3P|cNX+E(w7+Ek z4VLu3WZz-`xJ1AL7-a7AU>IN{FdI2G~O1@)5!ixP^7e4>sLCyaI7pc&FBscy-RNBl<95siYm zMEs|5(b+=#=cbME*r+&#KPS60lA+WPzv0ts*C3f9n&@Xj~Cd*d3C)^cF& z&EV8$qY$Y;;8%?r7R zv@K+t30ZK>ef|UffpoI%E#|6sgvm$pk8Zlv@{UV3O4KP*yf`gEkDO|xHV~GA7);3$xNCX zG};K;FB@l&(gr_0-y@EDoWE4L13cd7?R2xMJ|)ad7~9_KPzX0^r;j&To;$u->GIq#5$$!kg-Ix{Wjab!1cPrCdVs)*gQE;ct zpRNKR6xUK}^TtYxPs_6NK_*$&Xy^i>n=XK~?7RtzCD_U!X)gEsDy?UTbKCV}6q!f- z6``|BGZ7Cegu7J$p)Svjt;=qqfp4ia3TmeCGdhWYs6VpNU@wts)J^}5nvQeV8-3>nn5*HbOeC+PM4>*`yGpHnnpIQwpJIUjvJoz2poO-$z;_4To4 T2TP)@9m0bHZdyAnRrUP|Es;5$ literal 0 HcmV?d00001 diff --git a/micropython/examples/stellar_unicorn/weather/icons/storm4.jpg b/micropython/examples/stellar_unicorn/weather/icons/storm4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98cdc59c01e66aff906414d311da0631845bc5ec GIT binary patch literal 1703 zcmbu+cTm%37zglQ7GVe&ro>W|Eee)EKqTrR%HGpBhzx<)T1AKuWgI9Ff`S7?gF+>Q zAS*&xD#{cTWQJu>2#E|q$}b|CB9KDu*}MMLtIvDyAJ4td`@Q?TuXtF@12#I?*xLXQ z2n0C3wgB-6V7=abSFMM9SHSvZaRY#o1hxQMU=U3Jih{sU5OE8j0RRxh*KFYLfjMXEZ0+nFJiWYqd=KFd2L_!84hbcm z438k4i;ND1A{}uuejrU!P|++sp)q!!Ve1{7e9R#{js#}f&j2@Pxck|FBfXf1%<<5aOAoR z0*zeTFcciI)mTEo${pz+rl^UDmsHw+?Ou7Kl$MDHs2p&%S6W5ebX-TcPWwyt-(U&< zOZE-+kBbXzfI-$i4~7Ev0jq(ti>|9unPLDwS-JACs$2c%9CKk(Ij=skUhar3XAvK5 ztdg^8Ak?5>hv$t9BT9dq@~-MPeWE+!QeJW4ji=`m4%SRIyxlEV(h-{+5GL92rxktvQZ@juSi;Va^QGq)HW)tyq z^V|z`Os94e866TSa%E=q1yYu!d9T??wL6hC-mb^#XGB$*VWkF}h!b^|*4x`A(v6vp zvk}HhVfa>a7=>jm@9cTGVu|FR?m_aFJGM9dN9BpwEmOBjID1$ZTi(95^hs?EGP&zb zeK`{VidaQmv8{}4eGNS=o=lJYJG7Q|g=W*=W(cBpVjv+~3^bbWi1U9u4;2+R_!$o_ zhk$H8Vw9Q3HK)=!$<#V5-`QYvyMTEzi*_*QHe==!tvXkG==`aboXmn3itm;Z8E>vr z=8RZzdb2B=V=+;dys^vC2-Zk6sRxHFjmA~Urf&<7E0BU4s# zvu8(bx_mZ&!D6Da$Wh8x-X<+Piw9PMqT1a@MOSYo#`r7+xDTSa3a~=OJHy0@^pM9buTnj z13e;`r;t*|<~on?A{%lyFS~)Kn;gyVR@JBY>2M-ChE3^kt&XJmWc?Vo zuFv4O85*0EOO~MDcMJg+V;a98qK|;N?*+n0{7U{ZUc2Ucv<7ING6kAnGGsB>xqM_x zJ(}nnD+{(ImR)%)l?N`Hp=&5Ocm5u$fznf^W3qJ;mQQTHIB~G@v+}AFEpFgQYDkkw ztC3#XG33>8P)V@Ehe*Q(tNCNlr2O%fTsh6cL2F9aR-eS9H{@>(bWZbs8aU&|autqB zN39D~nTq5Gor(7T-U%8O=$F$u1-m=4XHKu3grf70GEl}!d2MNM`0JNRZd zeGrH3)m$(o@2%RL66^$3wuhHi%Xd;pbEgS8-Oe255H`l~P_}Dt37r#hL5*bjf)&K> ztDLr{Hal07U#gh7E2@_k9fYcvQ=hYXLm#$hT6i(g*b^=a#SSLkS}t^IctMeVqnBGI uzksf+osr>jj$n*cwkUM&lJ;=RPEF15Jc$YW^=O$xXY2gUPmf=VU;PQ#^YlRg literal 0 HcmV?d00001 diff --git a/micropython/examples/stellar_unicorn/weather/icons/sun1.jpg b/micropython/examples/stellar_unicorn/weather/icons/sun1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b989b43259ddb2b4df2b6b3f4064e081146d76e4 GIT binary patch literal 2273 zcmbu-GTzT7UH>yS*z+sbR>? z32W>xUcGCuWnZ-j$OilZilf})>xs-eD`i<`j3X5(Qm)-lJ{64?p!NZ!` zy84F3rsfv0L@Imo^rvTCujGBN75#7C4k%S){~Uk!{^yBF&CI7?X6NRi&tH~ZFaZ8r z$$o|Xj|;7H=^+qs1ajF0(@W7!I2xh9$!^8!y;Njag6U@aiw0}ZrtNmTCW%{eQ5`-zEDE_FvZkU<`-p9uJNND8LefOioFWXlys|Zb&c#@`RSHyI2W`h&tG$j*6jK}JYD=|mok124cr!HV zx*I%sD^i(5reCOF)=JKw&-hc@9hIVA*65TbyFnT@Z*Hz@m4BR`p8Xu*wUeF~xIoA$ zYmM31+Hln;!WT*(>u+n2Ul&>0rtkYC9szF$&;;E2g0>dWZ|-by&*C<$qU@(0N|vx% zdF!MW;AC!%!!MAmZ9DqsXam%*9$G-;q6J1vN{u_5ST>**n2uTqit*6!RUxt=m*>a8 zC7#N3j$#BcL}{2xR}5HL7=YzCwo^_iX7`vLsBbG6J8|XXlM%05UfeyddxCd(`m`^w zE!$X1D_GNhjBN4v<*MTG)Ha3pjmT8o5m&rRK}x>ZYaC*&Se5L zW5;s&J{@o)j_B{t?WoeqBU9le7PM5Ck>?@2%Exsh8=(H99pFo0rr<0&P_>)TvtqzI zA(^fuJPHb*G2$5yo*EjOG)uvLG4Ad7&UoH$zR}b@y2d*taf@R&Q!YvqTqM%H*3sI) z+3DBn>^7o`Ru1-GO0vb!aM`(a1e8gPV%~z6Etp+LNcS1;p>j9)9WIV&mou)>=|v|V z)@lKtQjppM;qfAG4qHECbH=NX+7yWp$#jqf8-p2*e5gm%!o9>$u@O_lhMI#-;Ja4A z&laeh?z{9+wH4$tNcBcD6Q#i$;+*4j7WeArj^@TD-siY>-Qy3D)Y3T%UM4vtEPXVO zX3L6-yr8T)qfm=Uety{V1^pTLhC5x(bw+`CRqoymnPa}5hwe9Z)N-9-c7E?ihG}#y zv6!kPJ7LZ}-sT_gU(n^hD(=R6O_uSJ^H+n&Sn3VS7+#jmhV7?8dr5fMm2P3ZWisbp zAcpheTv0ypw3M;Rp%mqi+w8{h2(PAzCe(i$!U1G$a`^*Y9}-Fk^rK`wJW)Ru-iQh@?LJzd#Q&JSSk z$S~D}g8ap;olulG1E(uap*Zbn7IG1nwm){{4bqP!Wfn><#8(}?scI*D7}4NgKWhr4 zxQ->)iBG{hcQEhl29Hn7yRNMjhG3zDN(MRZYl#*xh^$ggVb2V_myHafy?)RFVmpKg z*RKWYHx(XT>IxJ#9>g^kb2REsR};+$C*c%MR^%UP?sk0pd;g)HUHRYW_CL?aeb@R^>@3T?ziXXi~2gl&zY1YN(AUc0V?sKbGMiO>4c^} zaP13A%0PdoH$1q?DYzuSFe&!6%=eKyJV&hh5&B^BkggJ%Po@-ed803Pi-#>|h*ihMuI7sPq{eJnDVmjl zDPyuF0i?n;ErGJsif1X0X_LEX13~N^{X!Ggg$F^<9W6lB2=mnHHU?e4Fkj7Jc~%Yu zK`mVhRrkjMxpdxP_!&t^XC(7u=63~73R2cMVM&Q@dALgB%bHKYlq-v|U$T0*wzh+^ zjxF@59)uQ%VvEg_nFBIqb2G@BBOjZffcf5bsY$30P2qB3O|krgoqOE)MlyYjjb`mt zlxdK;c=<=-p*rtX%+#%N$2};CLUI_q|1F(N7bnV7$T=01r^c6f2XKHI$aj@5Q?*wpy! zgK^0Hu!;X!`-zCp>CsBNrWa=j=6}_!ld`6yWYzt++b=^kMTeg56phwQCRc=RDU=tG jG`C~N=qLD>_%>egsh(3l(#rU4s~Rk`3>{V36eV&K^mj51* zwz0-r127m2@D&_@KM7bJ-2Rdsi2NmigJk|c0F)S@4yeOn8h{WA21mj8-GCYZz=Z$M z2L5d@Avi)l-T?$kSmx+y3lUidKT(ZHIfEOy zkHs`CYdYjF4|0zgUWvLXE}?){R63%it#kZ@F2)FZ#@NKv>YEGJxQlojM<=4Qi>sTv z|91g_LBUr;qGQP4$Hv7cq^70c`XM7TD=+_U0j2QX{h}wOWz?tT&uA63b@hyf#wKQS zXIFR6%U}Nas&{C3WRyMjc6?%nGy7p~{^P>p68LFjllOTG`m%k%1q0xJmh2C(|KdUk zxP%Z0I70M*3nmmRa5xGfeDt)4jD>@!U!<&t!3{Av%iPB`9pajXm$~v+q6Q@tj$vlB zzyq{@k^OIAH~%lPKf(UPH33M%VS>+tqX2VYKPcu`LkBkFq`CFriay!P$GMd;jA_-k zW0Y)tJHk+2oMqI$cv0Jc4?DH4e<~nriajx9qFoX%b3FIm=%t>L+|bgv-Z4uk)sN$) z`q~D>9I?;YWGO4scm1dnZm?$0cWis~=Va^b*re-01`9);o|ATD zGU<4&K1LF~UC#$@`lWPW+mJqqXvlAekeJAo=L4Dh#&Ok7BW;?&jZ+$+Xts=m=3`o+G{-m_Rmd^a#lJ@9bj@&$B@`vTrDyjH6eK{ntPbZN)ue0Wf=3{v zRLhwGvx@_z`E#nj9CA-rTebB*Ye1xU*y~X9RF&SUH??1m=pSk!U#+qY>5KHzH3byS12!#lF?q^hBlO?D+9i(?N}zAL;qy0%gu z>hW^BV1OA-gQoFJ5X*W5d5;lU_3a>akNR#i+Jlka(?AW4PQobY_+Sg|cOOkH?CY|I zPbHF`Eheis4_2F5kW1e|4WIii7u&Kx$H^S`4FYqlJd+*-!rcdq&Q>agO*@d{(?8TG ze%Lsif_q)2CZ43;WMf9`tnHbL^Q=biR|UE0%OqWh6js^ut?ds}rRzc}uTfSg3MZIz z`tA!T>z>(pO@nT~rIB)i#0$oPO$(koX~La0iMI}W##z3ykP_k>`NfB=>Se~7W2VjZIDUO*hwu;^|@Zz%0(h{FKWr&J+jjcCir?NAh+&>zSZJ-{cNq zHOi1IIWblk8;{tsOR9~}C#`SZ*fx(S91=~VcD4{zype}ed)kinMW0u7RWV1s;h3El zdFo{u(H)4X2!MW8(9x&yY`taCE6Fu0U!RzbsOcQ6#F-x!j6mX<0q5|$rbf%oPip&} z(FSo@_q}YZo@yvoby@`Sp>gd_k;$Y6CN#Mi}=9bH`k@@{GOg`yd86AwNecU&D!rs6~(13vKyn^LW;Bo zs3aA?Cv~hNWuJ49pQshnP#?aooh!n;&IvW>vH?%7QE8A4kvV$p`R25u1@betG$mz* z)%c^bxlC7h_+G(va%6xiP37yPTk-N5pD1mW72^+Om)t+5t(9oRc8=&ceRgz0&!h4_J$)G`Sw#$4PME6Wc=c(&LcTjv+j?m#tgkCdqK_9;0d3kUwUWXt&zbx6<*B SPb!DX?I#?{7A=eT9Pi3UV1Rf<}zUfJ!8CMdgrV!BQ?o zF{{WRLMDKOGY|tLD2&_$FtasVwSR5xysrMEt6#sW-|Om@4a&xW zt*%ZkP5=Y~0nV=vKsF2<-B|st*eLS13Tzyfy#?Tkz%F1H6rvBv!68sMMAicA1OSNq zpS6L12Sg4Eli#GEsI*ymJ%PCukb^*>axkd8JPfv;9lO2{z~J)gyR8myLYxj%(7&c} z;Ld~RiUvo@Ihr2bqCKdf>vxqlYiaA~ZZq7w&&b&1ptX(dAv^TZV~$SFKe)Jhp7HYb z@%1}<;Ue);@MY4K8xiE2k(66e@d=4Z_mWdmA7*A{=j1+mocE&OW#LanuZmw+ys2bX zRoB$kH8rxApY)_45Y?KMo0m6Q3uirhol1BmQlEVR300{C#D^1p%Ocwd_yW zf4Si6E;$$s3RBo{LF6LWCln5o-)*%?{qSjpz-tKo19ucPjy!l?&QUTzd5AQFu6J+N z+H+7~DBhs`A^YE8cmFThU$FnUh5!{PWc~7>Z~zBL!!V|TCu(qxu$I9J6ws7xlO)De zAzlab!%EX};qa{KD7wc|5ez47b1G#B-5f0^>&x9veaSmr-8+Yz^Qu%#yblbH&S33D z-cN{vWK2l(E6SVZn>XWBScdb>~g^q zZyAtqcTecPRU2c=#(^c@q0?(FGJu1Y0ps~>6{)SnTqFa&kyZmpF5)5~fjf$BKP8f; z3lU2=WiX5rrCEyA6qV+l)k-+nVDHagbU++qvT`QQWX$kXZ9;8y7QjUc)7*9Wn zGfeVbK@|&x!cjA>vwAs-o*F?4{5(rFkHc2f^~OX_1fW-&ZKRtU%EV#GUm2L~BnNIk zBjIN{IqjVV1{HcEGV)cx2>w@;)5;mtC}C{GP4C5fhtXgD(Q7y1E!%+K4VrHr zsP<_@iUv}Ga+}W?cCoz9=O9hGN->9v@FQ2SNOs><`r`3u2PYkJfC=g0vRk7I{pUcB z*PUywRE{%l{3%Ty3zukuDXT7VA3kl7=#6)3Qc#?gG1>%f)66zQc8UbSpqO&CCYtlU zv;TP+Yk*E<#Iva5v!RX{M?oi?Lav;w4nY5oPWLj`&l9e6=#0LsyW=lX zXq6(w(+Q#xucn&E#M(=Eef$Kjk1X6_usawrX<;;rG2;f z>giX#5mrq>`}^<1S%*4eFdZh7x($Y@+@P!*DoB*Y_2OJiV*$6Ol8;a`_IX+cCifSb zVHIZBr|9U2kiZhpVi+MA>u|h%T^1%>=rfa;%K$}(!r#DLKYTkuo_gth0kvsoXoTf4 z5e2`BBvsNtXCb+V`iA(h^(&3|;03OaCP9=)H=Bxz#u-gCmAE!4GdN{|kl2U={R&9o zAc3nslY=xA;Zj*@LcB6n8}!g+`HZioM;_~Du5CXyK#!Omc5s>*>KelP(yFT}hH~;r z5+>-*jc=lfGNJ3Q8O)Wc6O?9=8aqYVUsOw|=k@%D;X;Dyw>l;|ICX*XhT1~&*(TTBt{__30C==D4$ckF)e0nL5p_=#tt(4w1qeXh0UpJSWcA$7mr=phKoNqr%Z`{$7i}Lg28^ZJ!3nyVjRUS-YEhZ zpn7@8-{VV|=2U^FpgpI347fza%#l)O}Ihv(U&ry$qK`r?7~$D(oRa-Lfp%^devFC#f)@`qgdf= zS_{&M=3djU-;J>oe9k=4wSZH@tC}|DZOIqV)eVY3>dBskrDva}_ZYeS zqFjNV(P3g)dtv6}VnG6L!s<~e5!w<4pJ!~HPkmf|c9!p69%Oyytn|?|DDp=e)1- zh4K}k>x=Y30w53wIIT)RIRhNu-uG+lQ6?089fg2h71B3qTD90>ePcA;1g( zK>Mf-SoS;E ze{sQ7Txt*q7y{kq0;#2_78nLm|H^5{ZqEQH_M)D}{;L}L$I9>02Q)3617+}-OXFGw zRxToI`8L|W$o@C5od1jL53v7m2?1>|NHsh#3^)pG;gX*_2M8GZjv~k3BM6bvA-#-A zmtKTFqweEL9>Zi|p3(l`L3@|a1;-_XW8AelfpE^Zt56P;nGz;5_uWXRx3pm^&bkru?`SjIEwEacGZyZtRj zq!HJYzyNFU&5y1ohr`QYe()S(-59#3KoaQsq>YlAWSQd^-MjAj*_?=a_j%A++-AQ% z7n?skZ?-Frd_c#;s=E+2bgHBeMh-kdWM44Tx!QlSKQRA%lw)%9)SyR*R_70j{Gxg! zwV#+M;#?FX38r`K)(&ELc1j>2Mm}B9(k@Jmbnthu5|$dn?Zr;6PI@=(#?jOhOgar3 zQcHDz^vRFk(m6AxFTtebw61O}T1cbW?Xs%2R{VuIJN6`wcP7`9$$Q^P>SiQniTSOu zs##&uFE_Hw!#e5JqX)Qq4dsS8Y_C>@H&#_pEoo{%$f-`lPasEn*u`Qx0W9g$(A=#h`T3LVt6Qp{Viko1(e`h+<* zUK?TbHfnf1c&wN)3msfzwa!wMKq+F;aj61-O?AchPvN0y2lJJZJu=B5+S=Wb=$r(bN2T1YvxB6n@sGEWa1rV?WJ%}Dkoeaj|U zn$}^*-hEoh6(Jf7HNCHOhn!;5c2a45J=vr= zNz0=KlI*K|lW~DR;d#^oY9Q>Ug!Q1wFutbjdR!M(|6H^&Z zqy^I1m0Pe;{By10;|4vMxa@Sqnw7I~7L}BmV*4W4raMt}+0acr^p;kbEO+pZhKJsU z)7B)%jmI(GJg2}nB`5(Mi(6uY@|J~~Ou=o6)MoOL@VgGN$=%CIccqv;y-#KQ=geYc zF1!JwcL_C^a$9B}F!-p;da5n+H*qNU*S^;7<#3*6 za-a3>X^ol5)#lWU&{#3zOH4FzM1azr!AIHCdjvEG1_B<=X}BePO&Kfdih3!G#+TPN zo)xfrdY;&_@QantYNN9objCOGI6rz=JHo|{Vi_@F?>_miaI$QIMj7! z+RNe6s7R=9ryTmXl_gz&>^)azNpjg@vzd-!9<}jB4KZ&)z`PWeP_s`^k2l4NJ9>;8 z)(XsC`vvnn;u@x3D!}2rayK%TLL_|*TWL!x?%L)Baf>V%Opg}}Of@K2oE*haRN^$m?WOr1& z0ES=MLs?uEltQOl=lQ~K!kfvh`BHD~w%`P5+FXY?GB!xAQ?#1s7d5pyy3reo5vuVXjO{e8>Da(lc*Nd)r zU$(d0)?IFSaO=h2t-W=^cOKtx2Ir0l?CZj`86iVcO*VAG+oC#~Uf<5%Rv+}w%@b6V MFrZ=KSdDV}pF0fxb^rhX literal 0 HcmV?d00001 diff --git a/micropython/examples/stellar_unicorn/weather/icons_sourcefile(doesn't need copying).svg b/micropython/examples/stellar_unicorn/weather/icons_sourcefile(doesn't need copying).svg new file mode 100644 index 00000000..8eedbcb0 --- /dev/null +++ b/micropython/examples/stellar_unicorn/weather/icons_sourcefile(doesn't need copying).svg @@ -0,0 +1,1577 @@ + + + + diff --git a/micropython/examples/stellar_unicorn/weather/weather.py b/micropython/examples/stellar_unicorn/weather/weather.py new file mode 100644 index 00000000..7cc00674 --- /dev/null +++ b/micropython/examples/stellar_unicorn/weather/weather.py @@ -0,0 +1,153 @@ +import time +from stellar import StellarUnicorn +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY +import WIFI_CONFIG +from network_manager import NetworkManager +import uasyncio as asyncio +import urequests +import jpegdec + +# Set your latitude/longitude here (find yours by right clicking in Google Maps!) +LAT = 53.38609085276884 +LNG = -1.4239983439328177 +TIMEZONE = "auto" # determines time zone from lat/long + +URL = "http://api.open-meteo.com/v1/forecast?latitude=" + str(LAT) + "&longitude=" + str(LNG) + "¤t_weather=true&timezone=" + TIMEZONE +WEATHER_TEXT = '' +user_icon = None + + +def get_data(): + global WEATHER_TEXT, temperature, weathercode + print(f"Requesting URL: {URL}") + r = urequests.get(URL) + # open the json data + j = r.json() + print("Data obtained!") + print(j) + + # parse relevant data from JSON + current = j["current_weather"] + temperature = current["temperature"] + windspeed = current["windspeed"] + winddirection = calculate_bearing(current["winddirection"]) + weathercode = current["weathercode"] + date, now = current["time"].split("T") + WEATHER_TEXT = f"Temp: {temperature}°C Wind Speed: {windspeed}kmph Wind Direction: {winddirection} As of: {date}, {now}" + print(WEATHER_TEXT) + r.close() + + +def calculate_bearing(d): + # calculates a compass direction from the wind direction in degrees + dirs = ['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW'] + ix = round(d / (360. / len(dirs))) + return dirs[ix % len(dirs)] + + +def status_handler(mode, status, ip): + global MESSAGE + print("Network: {}".format(WIFI_CONFIG.SSID)) + + +# create galactic object and graphics surface for drawing +su = StellarUnicorn() +display = PicoGraphics(DISPLAY) + +WIDTH = StellarUnicorn.WIDTH +HEIGHT = StellarUnicorn.HEIGHT + +jpeg = jpegdec.JPEG(display) +TEXT_COLOUR = display.create_pen(200, 0, 200) +BLACK = display.create_pen(0, 0, 0) +WHITE = display.create_pen(255, 255, 255) + + +def run(): + # Setup wifi + network_manager = NetworkManager(WIFI_CONFIG.COUNTRY, status_handler=status_handler) + + # Connect to Wifi network + asyncio.get_event_loop().run_until_complete(network_manager.client(WIFI_CONFIG.SSID, WIFI_CONFIG.PSK)) + while (not network_manager.isconnected()): + time.sleep(0.1) + + +su.set_brightness(1) +run() # Sets up Wifi connection + + +def outline_text(text, x, y): + display.set_pen(BLACK) + display.text(text, x - 1, y - 1, -1, 1) + display.text(text, x, y - 1, -1, 1) + display.text(text, x + 1, y - 1, -1, 1) + display.text(text, x - 1, y, -1, 1) + display.text(text, x + 1, y, -1, 1) + display.text(text, x - 1, y + 1, -1, 1) + display.text(text, x, y + 1, -1, 1) + display.text(text, x + 1, y + 1, -1, 1) + + display.set_pen(WHITE) + display.text(text, x, y, -1, 1) + + +def draw_page(cycle): + global user_icon + text_cycle = cycle % 1000 + cycle = cycle % 4 + # Clear the display + display.set_pen(15) + display.clear() + + # Draw the page header + display.set_font("bitmap6") + + if temperature is not None: + # Choose an appropriate icon based on the weather code + # Weather codes from https://open-meteo.com/en/docs + if user_icon is not None: + icons = ["icons/snow{0}.jpg".format(cycle + 1), "icons/rain{0}.jpg".format(cycle + 1), "icons/cloud{0}.jpg".format(cycle + 1), "icons/sun{0}.jpg".format(cycle + 1), "icons/storm{0}.jpg".format(cycle + 1)] + jpeg.open_file(icons[user_icon]) + else: + if weathercode in [71, 73, 75, 77, 85, 86]: # codes for snow + jpeg.open_file("icons/snow{0}.jpg".format(cycle + 1)) + elif weathercode in [51, 53, 55, 56, 57, 61, 63, 65, 66, 67, 80, 81, 82]: # codes for rain + jpeg.open_file("icons/rain{0}.jpg".format(cycle + 1)) + elif weathercode in [1, 2, 3, 45, 48]: # codes for cloud + jpeg.open_file("icons/cloud{0}.jpg".format(cycle + 1)) + elif weathercode in [0]: # codes for sun + jpeg.open_file("icons/sun{0}.jpg".format(cycle + 1)) + elif weathercode in [95, 96, 99]: # codes for storm + jpeg.open_file("icons/storm{0}.jpg".format(cycle + 1)) + jpeg.decode(0, 0, jpegdec.JPEG_SCALE_FULL) + display.set_pen(TEXT_COLOUR) + outline_text(WEATHER_TEXT, 16 - text_cycle, 0) + + else: + display.set_pen(0) + display.set_pen(15) + display.text("Unable to display weather! Check your network settings in WIFI_CONFIG.py", 5, 65, WIDTH, 1) + + su.update(display) + + +while 1: + + get_data() + for count in range(500): + + if su.is_pressed(StellarUnicorn.SWITCH_A): + user_icon = 0 + if su.is_pressed(StellarUnicorn.SWITCH_B): + user_icon = 1 + if su.is_pressed(StellarUnicorn.SWITCH_C): + user_icon = 2 + if su.is_pressed(StellarUnicorn.SWITCH_D): + user_icon = 3 + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): + user_icon = 4 + if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): + user_icon = None + draw_page(count) + time.sleep(0.2) From 94c5d74894d35ae37c62f03a3a133f3cfa1006bd Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Wed, 31 May 2023 13:47:24 +0100 Subject: [PATCH 07/10] Stellar: Tweak & tidy examples. --- .../examples/stellar_unicorn/README.md | 2 +- .../stellar_unicorn/cheerlights_history.py | 119 +++++++++++------- .../eighties_super_computer.py | 2 +- .../stellar_unicorn/exchange_ticker.py | 2 +- .../examples/stellar_unicorn/launch/fire.py | 2 +- .../examples/stellar_unicorn/launch/main.py | 16 ++- .../examples/stellar_unicorn/launch/today.py | 31 +++-- .../numpy/eighties_super_computer.py | 2 +- .../stellar_unicorn/numpy/fire_effect.py | 2 +- .../stellar_unicorn/numpy/lava_lamp.py | 6 +- .../examples/stellar_unicorn/numpy/life.py | 4 +- .../stellar_unicorn/numpy/the_matrix.py | 4 +- .../stellar_unicorn/numpy/this_is_fine.py | 10 +- .../examples/stellar_unicorn/numpy/trippy.py | 2 +- micropython/examples/stellar_unicorn/today.py | 4 +- 15 files changed, 122 insertions(+), 86 deletions(-) diff --git a/micropython/examples/stellar_unicorn/README.md b/micropython/examples/stellar_unicorn/README.md index 68cc1277..1f32f55d 100644 --- a/micropython/examples/stellar_unicorn/README.md +++ b/micropython/examples/stellar_unicorn/README.md @@ -54,7 +54,7 @@ Clock example with (optional) NTP synchronization. You can adjust the brightness [eighties_super_computer.py](eighties_super_computer.py) -Random LEDs blink on and off mimicing the look of a movie super computer doing its work in the eighties. You can adjust the brightness with LUX + and -. +Random LEDs blink on and off mimicking the look of a movie super computer doing its work in the eighties. You can adjust the brightness with LUX + and -. ### Feature Test diff --git a/micropython/examples/stellar_unicorn/cheerlights_history.py b/micropython/examples/stellar_unicorn/cheerlights_history.py index daf8c628..f66f569e 100644 --- a/micropython/examples/stellar_unicorn/cheerlights_history.py +++ b/micropython/examples/stellar_unicorn/cheerlights_history.py @@ -11,14 +11,46 @@ from network_manager import NetworkManager import uasyncio import urequests import time +import random from machine import Timer, Pin from stellar import StellarUnicorn -from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY +from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY, PEN_P8 as PEN -URL = 'http://api.thingspeak.com/channels/1417/field/2/last.json' +URL = 'http://api.thingspeak.com/channels/1417/field/1/last.txt' -UPDATE_INTERVAL = 113 # refresh interval in secs. Be nice to free APIs! -# this esoteric number is used so that a column of LEDs equates (approximately) to an hour +UPDATE_INTERVAL = 60 * 60 / 16 # refresh interval in secs. Be nice to free APIs! +# Calculated as 60 minutes * 60 seconds divided by number of pixels per row +# so that a row of LEDs equates (approximately) to an hour + +CHEERLIGHTS_COLOR_VALUES = [ + (0x00, 0x00, 0x00), # Black/Unlit + (0xFF, 0x00, 0x00), + (0x00, 0x80, 0x00), + (0x00, 0x00, 0xFF), + (0x00, 0xFF, 0xFF), + (0xFF, 0xFF, 0xFF), + (0xFD, 0xF5, 0xE6), + (0x80, 0x00, 0x80), + (0xFF, 0x00, 0xFF), + (0xFF, 0xFF, 0x00), + (0xFF, 0xA5, 0x00), + (0xFF, 0xC0, 0xCB), +] + +CHEERLIGHTS_COLOR_NAMES = [ + "black", # Black/Unlit, not part of cheerlights colours + "red", + "green", + "blue", + "cyan", + "white", + "oldlace", + "purple", + "magenta", + "yellow", + "orange", + "pink" +] def status_handler(mode, status, ip): @@ -32,71 +64,62 @@ def status_handler(mode, status, ip): print('Wifi connection failed!') -def hex_to_rgb(hex): - # converts a hex colour code into RGB - h = hex.lstrip('#') - r, g, b = (int(h[i:i + 2], 16) for i in (0, 2, 4)) - return r, g, b - - def get_data(): + global index # open the json file - print(f'Requesting URL: {URL}') - r = urequests.get(URL) - # open the json data - j = r.json() - print('Data obtained!') - r.close() + if UPDATE_INTERVAL >= 60: + print(f'Requesting URL: {URL}') + r = urequests.get(URL) + name = r.content.decode("utf-8").strip() + r.close() + print('Data obtained!') + + else: + print("Random test colour!") + # For sped-up testing we don't want to hit the API at all + name = random.choice(CHEERLIGHTS_COLOR_NAMES[1:]) # flash the onboard LED after getting data pico_led.value(True) time.sleep(0.2) pico_led.value(False) - # extract hex colour from the json data - hex = j['field2'] - # add the new hex colour to the end of the array - colour_array.append(hex) - print(f'Colour added to array: {hex}') - # remove the oldest colour in the array - colour_array.pop(0) - update_leds() + if index == (width * height): + index = 0 + graphics.clear() + colour_array[index] = CHEERLIGHTS_COLOR_NAMES.index(name) + index += 1 + print(f'Colour added to array: {name}') -def update_leds(): - # light up the LEDs - # this step takes a second, it's doing a lot of hex_to_rgb calculations! - print("Updating LEDs...") - i = 0 - for x in range(width): - for y in range(height): - r, g, b = hex_to_rgb(colour_array[i]) - - current_colour = graphics.create_pen(r, g, b) - graphics.set_pen(current_colour) - graphics.pixel(x, y) - i = i + 1 su.update(graphics) print("LEDs updated!") su = StellarUnicorn() -graphics = PicoGraphics(DISPLAY) - width = StellarUnicorn.WIDTH height = StellarUnicorn.HEIGHT +# set up a buffer to store the colours +colour_array = bytearray(width * height) + +# We'll use palette mode, so just make the colour list the display buffer +graphics = PicoGraphics(DISPLAY, pen_type=PEN, buffer=colour_array) + +# Set up the palette with cheerlights colour values +graphics.set_palette(CHEERLIGHTS_COLOR_VALUES) +graphics.set_pen(0) +graphics.clear() + +# Keep track of the pixel we're lighting +index = 0 + su.set_brightness(0.5) # set up the Pico W's onboard LED pico_led = Pin('LED', Pin.OUT) -current_colour = graphics.create_pen(0, 0, 0) - -# set up an list to store the colours -colour_array = ["#000000"] * 1024 - # set up wifi try: network_manager = NetworkManager(WIFI_CONFIG.COUNTRY, status_handler=status_handler) @@ -109,19 +132,19 @@ get_data() # start timer (the timer will call the function to update our data every UPDATE_INTERVAL) timer = Timer(-1) -timer.init(period=UPDATE_INTERVAL * 1000, mode=Timer.PERIODIC, callback=lambda t: get_data()) +timer.init(period=int(UPDATE_INTERVAL * 1000), mode=Timer.PERIODIC, callback=lambda t: get_data()) while True: # adjust brightness with LUX + and - # LEDs take a couple of secs to update, so adjust in big (10%) steps if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): su.adjust_brightness(+0.1) - update_leds() + su.update(graphics) print(f"Brightness set to {su.get_brightness()}") if su.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_DOWN): su.adjust_brightness(-0.1) - update_leds() + su.update(graphics) print(f"Brightness set to {su.get_brightness()}") # pause for a moment (important or the USB serial device will fail) diff --git a/micropython/examples/stellar_unicorn/eighties_super_computer.py b/micropython/examples/stellar_unicorn/eighties_super_computer.py index 2036eef2..351f301e 100644 --- a/micropython/examples/stellar_unicorn/eighties_super_computer.py +++ b/micropython/examples/stellar_unicorn/eighties_super_computer.py @@ -4,7 +4,7 @@ from stellar import StellarUnicorn from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY ''' -Random LEDs blink on and off mimicing the look of a movie +Random LEDs blink on and off mimicking the look of a movie super computer doing its work in the eighties. You can adjust the brightness with LUX + and -. diff --git a/micropython/examples/stellar_unicorn/exchange_ticker.py b/micropython/examples/stellar_unicorn/exchange_ticker.py index 7448baa1..cccf17d6 100644 --- a/micropython/examples/stellar_unicorn/exchange_ticker.py +++ b/micropython/examples/stellar_unicorn/exchange_ticker.py @@ -24,7 +24,7 @@ currency_symbol = "" currency_rate = "" rate_keys = [] -# diplay options +# display options line_1_line = -2 line_2_line = 9 line_3_line = 20 diff --git a/micropython/examples/stellar_unicorn/launch/fire.py b/micropython/examples/stellar_unicorn/launch/fire.py index 5c0d90f2..24034588 100644 --- a/micropython/examples/stellar_unicorn/launch/fire.py +++ b/micropython/examples/stellar_unicorn/launch/fire.py @@ -13,7 +13,7 @@ damping_factor = 0.97 def init(): - # a palette of five firey colours (white, yellow, orange, red, smoke) + # a palette of five fiery colours (white, yellow, orange, red, smoke) global palette palette = [ graphics.create_pen(0, 0, 0), diff --git a/micropython/examples/stellar_unicorn/launch/main.py b/micropython/examples/stellar_unicorn/launch/main.py index f60d20e2..934e2a27 100644 --- a/micropython/examples/stellar_unicorn/launch/main.py +++ b/micropython/examples/stellar_unicorn/launch/main.py @@ -1,4 +1,5 @@ import time +import math import machine from stellar import StellarUnicorn from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY @@ -29,12 +30,21 @@ def pressed(): # wait for a button to be pressed and load that effect while True: + b = int((math.sin(time.ticks_ms() / 200) + 1) / 2.0 * 255) + b = max(60, b) + graphics.set_font("bitmap6") graphics.set_pen(graphics.create_pen(0, 0, 0)) graphics.clear() - graphics.set_pen(graphics.create_pen(155, 155, 155)) - graphics.text("PRESS", 3, 6, -1, 1) - graphics.text("A B C OR D!", 5, 14, 16, 1, 0) + + graphics.set_pen(graphics.create_pen(b, 0, 0)) + graphics.pixel(0, 3) + graphics.set_pen(graphics.create_pen(0, b, 0)) + graphics.pixel(0, 5) + graphics.set_pen(graphics.create_pen(0, 0, b)) + graphics.pixel(0, 7) + graphics.set_pen(graphics.create_pen(b, 0, b)) + graphics.pixel(0, 9) # brightness up/down if stellar.is_pressed(StellarUnicorn.SWITCH_BRIGHTNESS_UP): diff --git a/micropython/examples/stellar_unicorn/launch/today.py b/micropython/examples/stellar_unicorn/launch/today.py index 8dfc576f..59eba38f 100644 --- a/micropython/examples/stellar_unicorn/launch/today.py +++ b/micropython/examples/stellar_unicorn/launch/today.py @@ -6,14 +6,15 @@ import machine # You will need to create or update the file secrets.py with your network credentials using Thonny # in order for the example to update using the NTP. -# secrets.py should contain: -# WIFI_SSID = "" -# WIFI_PASSWORD = "" +# WIFI_CONFIG.py should contain: +# SSID = "" +# PSK = "" +# COUNTRY = "" try: - from secrets import WIFI_SSID, WIFI_PASSWORD + from WIFI_CONFIG import SSID, PSK except ImportError: - print("Create secrets.py with your WiFi credentials") + print("Create WIFI_CONFIG.py with your WiFi credentials") graphics = None @@ -22,14 +23,14 @@ HEIGHT = 16 # StellarUnicorn.HEIGHT rtc = machine.RTC() -DAYS = ["Mon", "Tue", "Wed", "Thur", "Fri", "Sat", "Sun"] +DAYS = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"] # Enable the Wireless wlan = network.WLAN(network.STA_IF) wlan.active(True) -def network_connect(SSID, PSK): +def network_connect(ssid, psk): # Number of attempts to make before timeout max_wait = 5 @@ -37,7 +38,7 @@ def network_connect(SSID, PSK): # Sets the Wireless LED pulsing and attempts to connect to your local network. print("connecting...") wlan.config(pm=0xa11140) # Turn WiFi power saving off for some slow APs - wlan.connect(SSID, PSK) + wlan.connect(ssid, psk) while max_wait > 0: if wlan.status() < 0 or wlan.status() >= 3: @@ -55,9 +56,9 @@ def network_connect(SSID, PSK): def sync_time(): try: - network_connect(WIFI_SSID, WIFI_PASSWORD) + network_connect(SSID, PSK) except NameError: - print("Create secrets.py with your WiFi credentials") + print("Create WIFI_CONFIG.py with your WiFi credentials") if wlan.status() < 0 or wlan.status() >= 3: try: @@ -67,12 +68,10 @@ def sync_time(): def init(): - sync_time() def draw(): - # Pens RED = graphics.create_pen(120, 0, 0) WHITE = graphics.create_pen(255, 255, 255) @@ -85,16 +84,16 @@ def draw(): # Measures the length of the text to help us with centring later. day_length = graphics.measure_text(DAYS[current_t[3]], 1) - date_length = graphics.measure_text(str(current_t[2]), 3) + date_length = graphics.measure_text(str(current_t[2]), 1) graphics.set_font("bitmap6") graphics.set_pen(RED) graphics.rectangle(0, 0, WIDTH, 7) graphics.set_pen(WHITE) - graphics.text(DAYS[current_t[3]], (WIDTH // 2) - (day_length // 2) - 1, 0, 16, 1) + graphics.text(DAYS[current_t[3]], (WIDTH // 2) - (day_length // 2), 0, 16, 1) graphics.set_pen(RED) - graphics.set_font("bitmap8") - graphics.text(str(current_t[2]), (WIDTH // 2) - (date_length // 2) + 1, 9, 16, 3) + graphics.set_font("bitmap6") + graphics.text(str(current_t[2]), (WIDTH // 2) - (date_length // 2) + 1, 8, 16, 1) graphics.set_pen(graphics.create_pen(0, 0, 0)) diff --git a/micropython/examples/stellar_unicorn/numpy/eighties_super_computer.py b/micropython/examples/stellar_unicorn/numpy/eighties_super_computer.py index 96ff4b8a..17c7757c 100644 --- a/micropython/examples/stellar_unicorn/numpy/eighties_super_computer.py +++ b/micropython/examples/stellar_unicorn/numpy/eighties_super_computer.py @@ -14,7 +14,7 @@ Experiment with the damping, number of spawns and intensity to change the effect # machine.freq(250_000_000) DAMPING_FACTOR = 0.95 -NUMBER_OF_LIGHTS = 10 +NUMBER_OF_LIGHTS = 4 INTENSITY = 20 volume = 0.5 diff --git a/micropython/examples/stellar_unicorn/numpy/fire_effect.py b/micropython/examples/stellar_unicorn/numpy/fire_effect.py index 6cbbc6b9..851ada02 100644 --- a/micropython/examples/stellar_unicorn/numpy/fire_effect.py +++ b/micropython/examples/stellar_unicorn/numpy/fire_effect.py @@ -18,7 +18,7 @@ su.set_brightness(0.5) graphics = PicoGraphics(DISPLAY_STELLAR_UNICORN, pen_type=PEN_P8) # Number of random fire spawns -FIRE_SPAWNS = 5 +FIRE_SPAWNS = 3 # Fire damping DAMPING_FACTOR = 0.98 diff --git a/micropython/examples/stellar_unicorn/numpy/lava_lamp.py b/micropython/examples/stellar_unicorn/numpy/lava_lamp.py index 97d7de3f..ce542b7f 100644 --- a/micropython/examples/stellar_unicorn/numpy/lava_lamp.py +++ b/micropython/examples/stellar_unicorn/numpy/lava_lamp.py @@ -13,6 +13,8 @@ A lava lamp effect, created by blurred, moving particles. # MAXIMUM OVERKILL # machine.freq(250_000_000) +NUM_BLOBS = 3 + su = StellarUnicorn() graphics = PicoGraphics(DISPLAY_STELLAR_UNICORN, pen_type=PEN_P8) su.set_brightness(0.5) @@ -45,7 +47,7 @@ class Blob(): self.dy = -self.dy -blobs = [Blob() for _ in range(10)] +blobs = [Blob() for _ in range(NUM_BLOBS)] # Fill palette with a steep falloff from bright red to dark blue @@ -60,7 +62,7 @@ def update(): blob.move() lava[int(blob.y)][int(blob.x)] = blob.r - # Propogate the blobs outwards + # Propagate the blobs outwards a = numpy.roll(lava, 1, axis=0) b = numpy.roll(lava, -1, axis=0) d = numpy.roll(lava, 1, axis=1) diff --git a/micropython/examples/stellar_unicorn/numpy/life.py b/micropython/examples/stellar_unicorn/numpy/life.py index 354c5165..1e26f59b 100644 --- a/micropython/examples/stellar_unicorn/numpy/life.py +++ b/micropython/examples/stellar_unicorn/numpy/life.py @@ -15,9 +15,9 @@ Press "A" to manually re-seed. # MAXIMUM OVERKILL # machine.freq(250_000_000) -INITIAL_LIFE = 500 # Number of live cells to seed +INITIAL_LIFE = 128 # Number of live cells to seed GENERATION_TIME_MS = 50 # MS between generations -MINIMUM_LIFE = 10 # Auto reseed when only this many alive cells remain +MINIMUM_LIFE = 15 # Auto reseed when only this many alive cells remain SMOOTHED = True # Enable for a more organic if somewhat unsettling feel DECAY = 0.90 # Rate at which smoothing effect decays, higher number = more persistent, 1.0 = no decay diff --git a/micropython/examples/stellar_unicorn/numpy/the_matrix.py b/micropython/examples/stellar_unicorn/numpy/the_matrix.py index b16f3a96..e17006ff 100644 --- a/micropython/examples/stellar_unicorn/numpy/the_matrix.py +++ b/micropython/examples/stellar_unicorn/numpy/the_matrix.py @@ -12,6 +12,8 @@ HELLO NEO. # MAXIMUM OVERKILL # machine.freq(250_000_000) +NUM_SPARKLES = 1 + su = StellarUnicorn() su.set_brightness(1.0) graphics = PicoGraphics(DISPLAY_STELLAR_UNICORN, pen_type=PEN_P8) @@ -29,7 +31,7 @@ for g in range(128): def update(): trippy[:] *= 0.65 - for _ in range(2): + for _ in range(NUM_SPARKLES): x = random.randint(0, width - 1) y = random.randint(0, height // 2) trippy[y][x] = random.randint(128, 255) / 255.0 diff --git a/micropython/examples/stellar_unicorn/numpy/this_is_fine.py b/micropython/examples/stellar_unicorn/numpy/this_is_fine.py index 0af42d75..ee933a4c 100644 --- a/micropython/examples/stellar_unicorn/numpy/this_is_fine.py +++ b/micropython/examples/stellar_unicorn/numpy/this_is_fine.py @@ -6,7 +6,7 @@ from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN, PEN_P8 from ulab import numpy """ -THIS IS FINE! +THI IS FIN! """ # MAXIMUM OVERKILL @@ -17,7 +17,7 @@ su.set_brightness(0.5) graphics = PicoGraphics(DISPLAY_STELLAR_UNICORN, pen_type=PEN_P8) # Number of random fire spawns -FIRE_SPAWNS = 5 +FIRE_SPAWNS = 4 # Fire damping DAMPING_FACTOR = 0.98 @@ -81,9 +81,9 @@ def draw(): # Draw text over the top graphics.set_pen(0) - graphics.text("This", 6, 1, 1, 1) - graphics.text("is", 11, 9, 1, 1) - graphics.text("fine", 6, 17, 1, 1) + graphics.text("This", 1, 0, 1, 1) + graphics.text("is", 1, 3, 1, 1) + graphics.text("fine", 1, 9, 1, 1) su.update(graphics) diff --git a/micropython/examples/stellar_unicorn/numpy/trippy.py b/micropython/examples/stellar_unicorn/numpy/trippy.py index d1049b84..52d2510f 100644 --- a/micropython/examples/stellar_unicorn/numpy/trippy.py +++ b/micropython/examples/stellar_unicorn/numpy/trippy.py @@ -19,7 +19,7 @@ graphics = PicoGraphics(DISPLAY_STELLAR_UNICORN, pen_type=PEN_P8) DAMPING_FACTOR = 0.8 -NUMBER_OF_DROPS = 5 +NUMBER_OF_DROPS = 2 INTENSITY = 10 OFFSET = 0.0 # Try 0.5 diff --git a/micropython/examples/stellar_unicorn/today.py b/micropython/examples/stellar_unicorn/today.py index 436e125a..e957ee23 100644 --- a/micropython/examples/stellar_unicorn/today.py +++ b/micropython/examples/stellar_unicorn/today.py @@ -30,7 +30,7 @@ HEIGHT = StellarUnicorn.HEIGHT rtc = machine.RTC() -DAYS = ["Mon", "Tue", "Wed", "Thur", "Fri", "Sat", "Sun"] +DAYS = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"] # Enable the Wireless wlan = network.WLAN(network.STA_IF) @@ -99,7 +99,7 @@ def draw(): graphics.set_pen(RED) graphics.rectangle(0, 0, WIDTH, 7) graphics.set_pen(WHITE) - graphics.text(DAYS[current_t[3]], (WIDTH // 2) - (day_length // 2) - 1, 0, 16, 1) + graphics.text(DAYS[current_t[3]], (WIDTH // 2) - (day_length // 2), 0, 16, 1) graphics.set_pen(RED) graphics.set_font("bitmap6") From 19c57ebb20968441ba98d509d7ddc4b53923733a Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Thu, 1 Jun 2023 20:21:24 +0100 Subject: [PATCH 08/10] Stellar: Refined stalemate detection in Life. --- .../examples/stellar_unicorn/numpy/life.py | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/micropython/examples/stellar_unicorn/numpy/life.py b/micropython/examples/stellar_unicorn/numpy/life.py index 1e26f59b..41ac81e1 100644 --- a/micropython/examples/stellar_unicorn/numpy/life.py +++ b/micropython/examples/stellar_unicorn/numpy/life.py @@ -16,9 +16,9 @@ Press "A" to manually re-seed. # machine.freq(250_000_000) INITIAL_LIFE = 128 # Number of live cells to seed -GENERATION_TIME_MS = 50 # MS between generations -MINIMUM_LIFE = 15 # Auto reseed when only this many alive cells remain +GENERATION_TIME_MS = 100 # MS between generations SMOOTHED = True # Enable for a more organic if somewhat unsettling feel +STALEMATE_DEPTH = 5 # How many generations of changes must match before reset DECAY = 0.90 # Rate at which smoothing effect decays, higher number = more persistent, 1.0 = no decay TENACITY = 32 # Rate at which smoothing effect increases @@ -27,12 +27,15 @@ su = StellarUnicorn() su.set_brightness(0.5) graphics = PicoGraphics(DISPLAY_STELLAR_UNICORN, pen_type=PEN_P8) +changed_cells = [] + + for c in range(256): graphics.create_pen(c // 2, 0, c) def update(): - global last_gen + global last_gen, changed_cells if SMOOTHED: duration[:] += life * TENACITY @@ -43,10 +46,6 @@ def update(): last_gen = time.ticks_ms() - if numpy.sum(life) < MINIMUM_LIFE: - seed_life() - return - # Rollin' rollin' rollin. _N = numpy.roll(life, -1, axis=0) _NW = numpy.roll(_N, -1, axis=1) @@ -71,7 +70,15 @@ def update(): # Any alive cells with more than three neighbours should die next_generation[:] -= (neighbours[:] > 3) * life - life[:] = numpy.clip(next_generation, 0, 1) + next_generation[:] = numpy.clip(next_generation, 0, 1) + + changed_cells.append(numpy.sum(life != next_generation)) + changed_cells = changed_cells[-STALEMATE_DEPTH:] + + life[:] = next_generation + + if changed_cells.count(changed_cells[0]) == STALEMATE_DEPTH: + seed_life(INITIAL_LIFE // 2) def draw(): @@ -83,8 +90,8 @@ def draw(): su.update(graphics) -def seed_life(): - for _ in range(INITIAL_LIFE): +def seed_life(amount=INITIAL_LIFE): + for _ in range(amount): x = random.randint(0, width - 1) y = random.randint(0, height - 1) life[y][x] = int(True) # Avoid: TypeError: 'bool' object isn't iterable From bff6bd023e3f8f0657b4adbf2b6341bfd671c0dd Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Thu, 1 Jun 2023 22:31:00 +0100 Subject: [PATCH 09/10] Unicorn: Move gamma LUTs to pimoroni_common. --- common/pimoroni_common.hpp | 4 ++-- drivers/rgbled/rgbled.cmake | 2 +- libraries/cosmic_unicorn/cosmic_unicorn.cpp | 23 +++---------------- libraries/cosmic_unicorn/cosmic_unicorn.hpp | 1 + .../galactic_unicorn/galactic_unicorn.cpp | 23 +++---------------- .../galactic_unicorn/galactic_unicorn.hpp | 1 + libraries/stellar_unicorn/stellar_unicorn.cpp | 23 +++---------------- libraries/stellar_unicorn/stellar_unicorn.hpp | 1 + 8 files changed, 15 insertions(+), 63 deletions(-) diff --git a/common/pimoroni_common.hpp b/common/pimoroni_common.hpp index 1f61712a..568ce3d8 100644 --- a/common/pimoroni_common.hpp +++ b/common/pimoroni_common.hpp @@ -78,7 +78,7 @@ namespace pimoroni { return to_ms_since_boot(get_absolute_time()); } - constexpr uint8_t GAMMA_8BIT[256] = { + inline constexpr uint8_t GAMMA_8BIT[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, @@ -98,7 +98,7 @@ namespace pimoroni { /* Moved from pico_unicorn.cpp v = (uint16_t)(powf((float)(n) / 255.0f, 2.2) * 16383.0f + 0.5f) */ - constexpr uint16_t GAMMA_14BIT[256] = { + inline constexpr uint16_t GAMMA_14BIT[256] = { 0, 0, 0, 1, 2, 3, 4, 6, 8, 10, 13, 16, 20, 23, 28, 32, 37, 42, 48, 54, 61, 67, 75, 82, 90, 99, 108, 117, 127, 137, 148, 159, 170, 182, 195, 207, 221, 234, 249, 263, 278, 294, 310, 326, 343, 361, 379, 397, diff --git a/drivers/rgbled/rgbled.cmake b/drivers/rgbled/rgbled.cmake index a78e1a88..65e7ea15 100644 --- a/drivers/rgbled/rgbled.cmake +++ b/drivers/rgbled/rgbled.cmake @@ -7,4 +7,4 @@ target_sources(rgbled INTERFACE target_include_directories(rgbled INTERFACE ${CMAKE_CURRENT_LIST_DIR}) # Pull in pico libraries that we need -target_link_libraries(rgbled INTERFACE pico_stdlib hardware_pwm) \ No newline at end of file +target_link_libraries(rgbled INTERFACE pico_stdlib hardware_pwm) diff --git a/libraries/cosmic_unicorn/cosmic_unicorn.cpp b/libraries/cosmic_unicorn/cosmic_unicorn.cpp index f16f3aa6..5d0dc26e 100644 --- a/libraries/cosmic_unicorn/cosmic_unicorn.cpp +++ b/libraries/cosmic_unicorn/cosmic_unicorn.cpp @@ -38,10 +38,6 @@ // // .. and back to the start -static uint16_t r_gamma_lut[256] = {0}; -static uint16_t g_gamma_lut[256] = {0}; -static uint16_t b_gamma_lut[256] = {0}; - static uint32_t dma_channel; static uint32_t dma_ctrl_channel; static uint32_t audio_dma_channel; @@ -122,19 +118,6 @@ namespace pimoroni { // Tear down the old GU instance's hardware resources partial_teardown(); } - - - // create 14-bit gamma luts - for(uint16_t v = 0; v < 256; v++) { - // gamma correct the provided 0-255 brightness value onto a - // 0-65535 range for the pwm counter - float r_gamma = 1.8f; - r_gamma_lut[v] = (uint16_t)(powf((float)(v) / 255.0f, r_gamma) * (float(1U << (BCD_FRAME_COUNT)) - 1.0f) + 0.5f); - float g_gamma = 1.8f; - g_gamma_lut[v] = (uint16_t)(powf((float)(v) / 255.0f, g_gamma) * (float(1U << (BCD_FRAME_COUNT)) - 1.0f) + 0.5f); - float b_gamma = 1.8f; - b_gamma_lut[v] = (uint16_t)(powf((float)(v) / 255.0f, b_gamma) * (float(1U << (BCD_FRAME_COUNT)) - 1.0f) + 0.5f); - } // for each row: // for each bcd frame: @@ -476,9 +459,9 @@ namespace pimoroni { g = (g * this->brightness) >> 8; b = (b * this->brightness) >> 8; - uint16_t gamma_r = r_gamma_lut[r]; - uint16_t gamma_g = g_gamma_lut[g]; - uint16_t gamma_b = b_gamma_lut[b]; + uint16_t gamma_r = GAMMA_14BIT[r]; + uint16_t gamma_g = GAMMA_14BIT[g]; + uint16_t gamma_b = GAMMA_14BIT[b]; // for each row: // for each bcd frame: diff --git a/libraries/cosmic_unicorn/cosmic_unicorn.hpp b/libraries/cosmic_unicorn/cosmic_unicorn.hpp index c8efd878..cc60fc0a 100644 --- a/libraries/cosmic_unicorn/cosmic_unicorn.hpp +++ b/libraries/cosmic_unicorn/cosmic_unicorn.hpp @@ -2,6 +2,7 @@ #include "hardware/pio.h" #include "pico_graphics.hpp" +#include "common/pimoroni_common.hpp" #include "../pico_synth/pico_synth.hpp" namespace pimoroni { diff --git a/libraries/galactic_unicorn/galactic_unicorn.cpp b/libraries/galactic_unicorn/galactic_unicorn.cpp index 3a9779ac..da2bc041 100644 --- a/libraries/galactic_unicorn/galactic_unicorn.cpp +++ b/libraries/galactic_unicorn/galactic_unicorn.cpp @@ -38,10 +38,6 @@ // // .. and back to the start -static uint16_t r_gamma_lut[256] = {0}; -static uint16_t g_gamma_lut[256] = {0}; -static uint16_t b_gamma_lut[256] = {0}; - static uint32_t dma_channel; static uint32_t dma_ctrl_channel; static uint32_t audio_dma_channel; @@ -122,19 +118,6 @@ namespace pimoroni { // Tear down the old GU instance's hardware resources partial_teardown(); } - - - // create 14-bit gamma luts - for(uint16_t v = 0; v < 256; v++) { - // gamma correct the provided 0-255 brightness value onto a - // 0-65535 range for the pwm counter - float r_gamma = 1.8f; - r_gamma_lut[v] = (uint16_t)(powf((float)(v) / 255.0f, r_gamma) * (float(1U << (BCD_FRAME_COUNT)) - 1.0f) + 0.5f); - float g_gamma = 1.8f; - g_gamma_lut[v] = (uint16_t)(powf((float)(v) / 255.0f, g_gamma) * (float(1U << (BCD_FRAME_COUNT)) - 1.0f) + 0.5f); - float b_gamma = 1.8f; - b_gamma_lut[v] = (uint16_t)(powf((float)(v) / 255.0f, b_gamma) * (float(1U << (BCD_FRAME_COUNT)) - 1.0f) + 0.5f); - } // for each row: // for each bcd frame: @@ -470,9 +453,9 @@ namespace pimoroni { g = (g * this->brightness) >> 8; b = (b * this->brightness) >> 8; - uint16_t gamma_r = r_gamma_lut[r]; - uint16_t gamma_g = g_gamma_lut[g]; - uint16_t gamma_b = b_gamma_lut[b]; + uint16_t gamma_r = GAMMA_14BIT[r]; + uint16_t gamma_g = GAMMA_14BIT[g]; + uint16_t gamma_b = GAMMA_14BIT[b]; // for each row: // for each bcd frame: diff --git a/libraries/galactic_unicorn/galactic_unicorn.hpp b/libraries/galactic_unicorn/galactic_unicorn.hpp index 3e598287..44a9a7bc 100644 --- a/libraries/galactic_unicorn/galactic_unicorn.hpp +++ b/libraries/galactic_unicorn/galactic_unicorn.hpp @@ -2,6 +2,7 @@ #include "hardware/pio.h" #include "pico_graphics.hpp" +#include "common/pimoroni_common.hpp" #include "../pico_synth/pico_synth.hpp" namespace pimoroni { diff --git a/libraries/stellar_unicorn/stellar_unicorn.cpp b/libraries/stellar_unicorn/stellar_unicorn.cpp index 37f3534d..3917aa5f 100644 --- a/libraries/stellar_unicorn/stellar_unicorn.cpp +++ b/libraries/stellar_unicorn/stellar_unicorn.cpp @@ -38,10 +38,6 @@ // // .. and back to the start -static uint16_t r_gamma_lut[256] = {0}; -static uint16_t g_gamma_lut[256] = {0}; -static uint16_t b_gamma_lut[256] = {0}; - static uint32_t dma_channel; static uint32_t dma_ctrl_channel; static uint32_t audio_dma_channel; @@ -122,19 +118,6 @@ namespace pimoroni { // Tear down the old GU instance's hardware resources partial_teardown(); } - - - // create 14-bit gamma luts - for(uint16_t v = 0; v < 256; v++) { - // gamma correct the provided 0-255 brightness value onto a - // 0-65535 range for the pwm counter - float r_gamma = 1.8f; - r_gamma_lut[v] = (uint16_t)(powf((float)(v) / 255.0f, r_gamma) * (float(1U << (BCD_FRAME_COUNT)) - 1.0f) + 0.5f); - float g_gamma = 1.8f; - g_gamma_lut[v] = (uint16_t)(powf((float)(v) / 255.0f, g_gamma) * (float(1U << (BCD_FRAME_COUNT)) - 1.0f) + 0.5f); - float b_gamma = 1.8f; - b_gamma_lut[v] = (uint16_t)(powf((float)(v) / 255.0f, b_gamma) * (float(1U << (BCD_FRAME_COUNT)) - 1.0f) + 0.5f); - } // for each row: // for each bcd frame: @@ -467,9 +450,9 @@ namespace pimoroni { g = (g * this->brightness) >> 8; b = (b * this->brightness) >> 8; - uint16_t gamma_r = r_gamma_lut[r]; - uint16_t gamma_g = g_gamma_lut[g]; - uint16_t gamma_b = b_gamma_lut[b]; + uint16_t gamma_r = GAMMA_14BIT[r]; + uint16_t gamma_g = GAMMA_14BIT[g]; + uint16_t gamma_b = GAMMA_14BIT[b]; // for each row: // for each bcd frame: diff --git a/libraries/stellar_unicorn/stellar_unicorn.hpp b/libraries/stellar_unicorn/stellar_unicorn.hpp index 2658f667..747fb9de 100644 --- a/libraries/stellar_unicorn/stellar_unicorn.hpp +++ b/libraries/stellar_unicorn/stellar_unicorn.hpp @@ -2,6 +2,7 @@ #include "hardware/pio.h" #include "pico_graphics.hpp" +#include "common/pimoroni_common.hpp" #include "../pico_synth/pico_synth.hpp" namespace pimoroni { From 70a1b26041c9bd01aff80427327e6a409909f9dd Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Thu, 1 Jun 2023 22:46:11 +0100 Subject: [PATCH 10/10] ADC: Avoid re-initialising ADC. Only init the ADC if it's not already running. In MicroPython this could trounce an already initialised and configured ADC, and would disable the temperature sensor if it had been enabled by a user before initialising any of the affected libraries. --- drivers/analog/analog.hpp | 2 +- libraries/adcfft/adcfft.cpp | 2 +- libraries/cosmic_unicorn/cosmic_unicorn.cpp | 2 +- libraries/galactic_unicorn/galactic_unicorn.cpp | 2 +- libraries/stellar_unicorn/stellar_unicorn.cpp | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/analog/analog.hpp b/drivers/analog/analog.hpp index 7f321b0d..d51795a8 100644 --- a/drivers/analog/analog.hpp +++ b/drivers/analog/analog.hpp @@ -11,7 +11,7 @@ namespace pimoroni { public: Analog(uint pin, float amplifier_gain = 1.0f, float resistor = 0.0f, float offset = 0.0f) : pin(pin), amplifier_gain(amplifier_gain), resistor(resistor), offset(offset) { - adc_init(); + if (!(adc_hw->cs & ADC_CS_EN_BITS)) adc_init(); //Make sure GPIO is high-impedance, no pullups etc adc_gpio_init(pin); diff --git a/libraries/adcfft/adcfft.cpp b/libraries/adcfft/adcfft.cpp index e5433d57..a28fdd1d 100644 --- a/libraries/adcfft/adcfft.cpp +++ b/libraries/adcfft/adcfft.cpp @@ -47,7 +47,7 @@ void ADCFFT::init() { // Initialize the ADC harware // (resets it, enables the clock, spins until the hardware is ready) - adc_init(); + if (!(adc_hw->cs & ADC_CS_EN_BITS)) adc_init(); // Select analog mux input (0...3 are GPIO 26, 27, 28, 29; 4 is temp sensor) adc_select_input(adc_channel); diff --git a/libraries/cosmic_unicorn/cosmic_unicorn.cpp b/libraries/cosmic_unicorn/cosmic_unicorn.cpp index 5d0dc26e..2db59201 100644 --- a/libraries/cosmic_unicorn/cosmic_unicorn.cpp +++ b/libraries/cosmic_unicorn/cosmic_unicorn.cpp @@ -149,7 +149,7 @@ namespace pimoroni { } // setup light sensor adc - adc_init(); + if (!(adc_hw->cs & ADC_CS_EN_BITS)) adc_init(); adc_gpio_init(LIGHT_SENSOR); gpio_init(COLUMN_CLOCK); gpio_set_dir(COLUMN_CLOCK, GPIO_OUT); gpio_put(COLUMN_CLOCK, false); diff --git a/libraries/galactic_unicorn/galactic_unicorn.cpp b/libraries/galactic_unicorn/galactic_unicorn.cpp index da2bc041..c9587e18 100644 --- a/libraries/galactic_unicorn/galactic_unicorn.cpp +++ b/libraries/galactic_unicorn/galactic_unicorn.cpp @@ -149,7 +149,7 @@ namespace pimoroni { } // setup light sensor adc - adc_init(); + if (!(adc_hw->cs & ADC_CS_EN_BITS)) adc_init(); adc_gpio_init(LIGHT_SENSOR); gpio_init(COLUMN_CLOCK); gpio_set_dir(COLUMN_CLOCK, GPIO_OUT); gpio_put(COLUMN_CLOCK, false); diff --git a/libraries/stellar_unicorn/stellar_unicorn.cpp b/libraries/stellar_unicorn/stellar_unicorn.cpp index 3917aa5f..3b4bde04 100644 --- a/libraries/stellar_unicorn/stellar_unicorn.cpp +++ b/libraries/stellar_unicorn/stellar_unicorn.cpp @@ -149,7 +149,7 @@ namespace pimoroni { } // setup light sensor adc - adc_init(); + if (!(adc_hw->cs & ADC_CS_EN_BITS)) adc_init(); adc_gpio_init(LIGHT_SENSOR); gpio_init(COLUMN_CLOCK); gpio_set_dir(COLUMN_CLOCK, GPIO_OUT); gpio_put(COLUMN_CLOCK, false);