Merge branch 'main' into cpal

This commit is contained in:
Blaz Kristan 2023-04-30 17:52:28 +02:00
commit f38851b7c6
29 changed files with 3344 additions and 2805 deletions

View File

@ -8,21 +8,23 @@ jobs:
name: Gather Environments name: Gather Environments
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- name: Cache pip - name: Cache pip
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/.cache/pip path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: | restore-keys: |
${{ runner.os }}-pip- ${{ runner.os }}-pip-
- uses: actions/setup-python@v2 - uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install PlatformIO - name: Install PlatformIO
run: pip install -r requirements.txt run: pip install -r requirements.txt
- name: Get default environments - name: Get default environments
id: envs id: envs
run: | run: |
echo "::set-output name=environments::$(pio project config --json-output | jq -cr '.[0][1][0][1]')" echo "environments=$(pio project config --json-output | jq -cr '.[0][1][0][1]')" >> $GITHUB_OUTPUT
outputs: outputs:
environments: ${{ steps.envs.outputs.environments }} environments: ${{ steps.envs.outputs.environments }}
@ -32,24 +34,27 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: get_default_envs needs: get_default_envs
strategy: strategy:
fail-fast: false
matrix: matrix:
environment: ${{ fromJSON(needs.get_default_envs.outputs.environments) }} environment: ${{ fromJSON(needs.get_default_envs.outputs.environments) }}
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- name: Cache pip - name: Cache pip
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/.cache/pip path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: | restore-keys: |
${{ runner.os }}-pip- ${{ runner.os }}-pip-
- name: Cache PlatformIO - name: Cache PlatformIO
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/.platformio path: ~/.platformio
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v2 uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install PlatformIO - name: Install PlatformIO
run: pip install -r requirements.txt run: pip install -r requirements.txt
- name: Build firmware - name: Build firmware

View File

@ -9,8 +9,11 @@
# (use `platformio_override.ini` when building for your own board; see `platformio_override.ini.sample` for an example) # (use `platformio_override.ini` when building for your own board; see `platformio_override.ini.sample` for an example)
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# Release / CI binaries # CI binaries
default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth, esp32s2_saola, lolin_s2_mini, esp32c3dev, esp32s3dev_8MB default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth # ESP32 variant builds are temporarily excluded from CI due to toolchain issues on the GitHub Actions Linux environment
# Release binaries
; default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth, lolin_s2_mini, esp32c3dev, esp32s3dev_8MB
# Build everything # Build everything
; default_envs = esp32dev, esp8285_4CH_MagicHome, codm-controller-0.6-rev2, codm-controller-0.6, esp32s2_saola, d1_mini_5CH_Shojo_PCB, d1_mini, sp501e, nodemcuv2, esp32_eth, anavi_miracle_controller, esp07, esp01_1m_full, m5atom, h803wf, d1_mini_ota, heltec_wifi_kit_8, esp8285_H801, d1_mini_debug, wemos_shield_esp32, elekstube_ips ; default_envs = esp32dev, esp8285_4CH_MagicHome, codm-controller-0.6-rev2, codm-controller-0.6, esp32s2_saola, d1_mini_5CH_Shojo_PCB, d1_mini, sp501e, nodemcuv2, esp32_eth, anavi_miracle_controller, esp07, esp01_1m_full, m5atom, h803wf, d1_mini_ota, heltec_wifi_kit_8, esp8285_H801, d1_mini_debug, wemos_shield_esp32, elekstube_ips
@ -109,6 +112,7 @@ debug_flags = -D DEBUG=1 -D WLED_DEBUG -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_CLIENT
# This reduces the OTA size with ~45KB, so it's especially useful on low memory boards (512k/1m). # This reduces the OTA size with ~45KB, so it's especially useful on low memory boards (512k/1m).
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
build_flags = build_flags =
-Wno-attributes
-DMQTT_MAX_PACKET_SIZE=1024 -DMQTT_MAX_PACKET_SIZE=1024
-DSECURE_CLIENT=SECURE_CLIENT_BEARSSL -DSECURE_CLIENT=SECURE_CLIENT_BEARSSL
-DBEARSSL_SSL_BASIC -DBEARSSL_SSL_BASIC
@ -169,6 +173,7 @@ lib_compat_mode = strict
lib_deps = lib_deps =
fastled/FastLED @ 3.5.0 fastled/FastLED @ 3.5.0
IRremoteESP8266 @ 2.8.2 IRremoteESP8266 @ 2.8.2
makuna/NeoPixelBus @ 2.7.5
https://github.com/Aircoookie/ESPAsyncWebServer.git @ ~2.0.7 https://github.com/Aircoookie/ESPAsyncWebServer.git @ ~2.0.7
#For use of the TTGO T-Display ESP32 Module with integrated TFT display uncomment the following line #For use of the TTGO T-Display ESP32 Module with integrated TFT display uncomment the following line
#TFT_eSPI #TFT_eSPI
@ -209,11 +214,10 @@ build_flags =
-DMIMETYPE_MINIMAL -DMIMETYPE_MINIMAL
lib_deps = lib_deps =
${env.lib_deps}
#https://github.com/lorol/LITTLEFS.git #https://github.com/lorol/LITTLEFS.git
ESPAsyncTCP @ 1.2.2 ESPAsyncTCP @ 1.2.2
ESPAsyncUDP ESPAsyncUDP
makuna/NeoPixelBus @ 2.7.3 ${env.lib_deps}
[esp32] [esp32]
#platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.3/platform-espressif32-2.0.2.3.zip #platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.3/platform-espressif32-2.0.2.3.zip
@ -232,10 +236,9 @@ build_flags = -g
default_partitions = tools/WLED_ESP32_4MB_1MB_FS.csv default_partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
lib_deps = lib_deps =
${env.lib_deps}
https://github.com/lorol/LITTLEFS.git https://github.com/lorol/LITTLEFS.git
makuna/NeoPixelBus @ 2.7.3
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
${env.lib_deps}
[esp32_idf_V4] [esp32_idf_V4]
@ -254,9 +257,8 @@ build_flags = -g
-DARDUINO_USB_CDC_ON_BOOT=0 ;; this flag is mandatory for "classic ESP32" when building with arduino-esp32 >=2.0.3 -DARDUINO_USB_CDC_ON_BOOT=0 ;; this flag is mandatory for "classic ESP32" when building with arduino-esp32 >=2.0.3
default_partitions = tools/WLED_ESP32_4MB_1MB_FS.csv default_partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
lib_deps = lib_deps =
${env.lib_deps}
makuna/NeoPixelBus @ 2.7.3
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
${env.lib_deps}
[esp32s2] [esp32s2]
;; generic definitions for all ESP32-S2 boards ;; generic definitions for all ESP32-S2 boards
@ -274,9 +276,8 @@ build_flags = -g
;; ARDUINO_USB_CDC_ON_BOOT ;; ARDUINO_USB_CDC_ON_BOOT
lib_deps = lib_deps =
${env.lib_deps}
makuna/NeoPixelBus @ 2.7.3
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
${env.lib_deps}
[esp32c3] [esp32c3]
;; generic definitions for all ESP32-C3 boards ;; generic definitions for all ESP32-C3 boards
@ -293,9 +294,8 @@ build_flags = -g
;; ARDUINO_USB_CDC_ON_BOOT ;; ARDUINO_USB_CDC_ON_BOOT
lib_deps = lib_deps =
${env.lib_deps}
makuna/NeoPixelBus @ 2.7.3
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
${env.lib_deps}
[esp32s3] [esp32s3]
;; generic definitions for all ESP32-S3 boards ;; generic definitions for all ESP32-S3 boards
@ -313,10 +313,8 @@ build_flags = -g
;; ARDUINO_USB_MODE, ARDUINO_USB_CDC_ON_BOOT ;; ARDUINO_USB_MODE, ARDUINO_USB_CDC_ON_BOOT
lib_deps = lib_deps =
${env.lib_deps}
;; NeoPixelBus 2.7.1 is the first that has official support for ESP32-S3
makuna/NeoPixelBus @ 2.7.3
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
${env.lib_deps}
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
@ -575,6 +573,9 @@ build_unflags = ${common.build_unflags} -DARDUINO_USB_CDC_ON_BOOT=1
build_flags = ${common.build_flags} ${esp32s2.build_flags} #-D WLED_RELEASE_NAME=LolinS2 build_flags = ${common.build_flags} ${esp32s2.build_flags} #-D WLED_RELEASE_NAME=LolinS2
-DBOARD_HAS_PSRAM -DBOARD_HAS_PSRAM
-DARDUINO_USB_CDC_ON_BOOT=0 -DARDUINO_USB_CDC_ON_BOOT=0
-DARDUINO_USB_MSC_ON_BOOT=0
-DARDUINO_USB_DFU_ON_BOOT=0
-DLOLIN_WIFI_FIX ; seems to work much better with this
-D WLED_USE_PSRAM -D WLED_USE_PSRAM
-D WLED_WATCHDOG_TIMEOUT=0 -D WLED_WATCHDOG_TIMEOUT=0
-D CONFIG_ASYNC_TCP_USE_WDT=0 -D CONFIG_ASYNC_TCP_USE_WDT=0

View File

@ -4,63 +4,59 @@
# #
# pip-compile # pip-compile
# #
aiofiles==0.8.0 aiofiles==22.1.0
# via platformio # via platformio
ajsonrpc==1.2.0 ajsonrpc==1.2.0
# via platformio # via platformio
anyio==3.6.1 anyio==3.6.2
# via starlette # via starlette
async-timeout==4.0.2 bottle==0.12.25
# via zeroconf
bottle==0.12.23
# via platformio # via platformio
certifi==2022.12.7 certifi==2022.12.7
# via requests # via requests
charset-normalizer==2.1.1 charset-normalizer==3.1.0
# via requests # via requests
click==8.1.3 click==8.1.3
# via # via
# platformio # platformio
# uvicorn # uvicorn
colorama==0.4.5 colorama==0.4.6
# via platformio # via
h11==0.13.0 # click
# platformio
h11==0.14.0
# via # via
# uvicorn # uvicorn
# wsproto # wsproto
idna==3.3 idna==3.4
# via # via
# anyio # anyio
# requests # requests
ifaddr==0.2.0 marshmallow==3.19.0
# via zeroconf
marshmallow==3.17.0
# via platformio # via platformio
packaging==21.3 packaging==23.1
# via marshmallow # via marshmallow
platformio==6.1.4 platformio==6.1.6
# via -r requirements.in # via -r requirements.in
pyelftools==0.29 pyelftools==0.29
# via platformio # via platformio
pyparsing==3.0.9
# via packaging
pyserial==3.5 pyserial==3.5
# via platformio # via platformio
requests==2.28.1 requests==2.28.2
# via platformio # via platformio
semantic-version==2.10.0 semantic-version==2.10.0
# via platformio # via platformio
sniffio==1.2.0 sniffio==1.3.0
# via anyio # via anyio
starlette==0.20.4 starlette==0.23.1
# via platformio # via platformio
tabulate==0.8.10 tabulate==0.9.0
# via platformio # via platformio
urllib3==1.26.11 typing-extensions==4.5.0
# via starlette
urllib3==1.26.15
# via requests # via requests
uvicorn==0.18.2 uvicorn==0.20.0
# via platformio # via platformio
wsproto==1.1.0 wsproto==1.2.0
# via platformio
zeroconf==0.39.0
# via platformio # via platformio

View File

@ -40,39 +40,39 @@ class WordClockUsermod : public Usermod
// Normal wiring // Normal wiring
const int maskMinutes[14][maskSizeMinutes] = const int maskMinutes[14][maskSizeMinutes] =
{ {
{107, 108, 109, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // :00 {107, 108, 109, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 0 - 00
{ 7, 8, 9, 10, 40, 41, 42, 43, -1, -1, -1, -1}, // :05 fünf nach { 7, 8, 9, 10, 40, 41, 42, 43, -1, -1, -1, -1}, // 1 - 05 fünf nach
{ 11, 12, 13, 14, 40, 41, 42, 43, -1, -1, -1, -1}, // :10 zehn nach { 11, 12, 13, 14, 40, 41, 42, 43, -1, -1, -1, -1}, // 2 - 10 zehn nach
{ 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1}, // :15 viertel { 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1}, // 3 - 15 viertel
{ 15, 16, 17, 18, 19, 20, 21, 40, 41, 42, 43, -1}, // :20 zwanzig nach { 15, 16, 17, 18, 19, 20, 21, 40, 41, 42, 43, -1}, // 4 - 20 zwanzig nach
{ 7, 8, 9, 10, 33, 34, 35, 44, 45, 46, 47, -1}, // :25 fünf vor halb { 7, 8, 9, 10, 33, 34, 35, 44, 45, 46, 47, -1}, // 5 - 25 fünf vor halb
{ 44, 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, -1}, // :30 halb { 44, 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, -1}, // 6 - 30 halb
{ 7, 8, 9, 10, 40, 41, 42, 43, 44, 45, 46, 47}, // :35 fünf nach halb { 7, 8, 9, 10, 40, 41, 42, 43, 44, 45, 46, 47}, // 7 - 35 fünf nach halb
{ 15, 16, 17, 18, 19, 20, 21, 33, 34, 35, -1, -1}, // :40 zwanzig vor { 15, 16, 17, 18, 19, 20, 21, 33, 34, 35, -1, -1}, // 8 - 40 zwanzig vor
{ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1}, // :45 dreiviertel { 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1}, // 9 - 45 dreiviertel
{ 11, 12, 13, 14, 33, 34, 35, -1, -1, -1, -1, -1}, // :50 zehn vor { 11, 12, 13, 14, 33, 34, 35, -1, -1, -1, -1, -1}, // 10 - 50 zehn vor
{ 7, 8, 9, 10, 33, 34, 35, -1, -1, -1, -1, -1}, // :55 fünf vor { 7, 8, 9, 10, 33, 34, 35, -1, -1, -1, -1, -1}, // 11 - 55 fünf vor
{ 26, 27, 28, 29, 30, 31, 32, 40, 41, 42, 43, -1}, // :15 alternative viertel nach { 26, 27, 28, 29, 30, 31, 32, 40, 41, 42, 43, -1}, // 12 - 15 alternative viertel nach
{ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1} // :45 alternative viertel vor { 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1} // 13 - 45 alternative viertel vor
}; };
// Meander wiring // Meander wiring
const int maskMinutesMea[14][maskSizeMinutesMea] = const int maskMinutesMea[14][maskSizeMinutesMea] =
{ {
{ 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // :00 { 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 0 - 00
{ 7, 8, 9, 10, 33, 34, 35, 36, -1, -1, -1, -1}, // :05 fünf nach { 7, 8, 9, 10, 33, 34, 35, 36, -1, -1, -1, -1}, // 1 - 05 fünf nach
{ 18, 19, 20, 21, 33, 34, 35, 36, -1, -1, -1, -1}, // :10 zehn nach { 18, 19, 20, 21, 33, 34, 35, 36, -1, -1, -1, -1}, // 2 - 10 zehn nach
{ 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1}, // :15 viertel { 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1}, // 3 - 15 viertel
{ 11, 12, 13, 14, 15, 16, 17, 33, 34, 35, 36, -1}, // :20 zwanzig nach { 11, 12, 13, 14, 15, 16, 17, 33, 34, 35, 36, -1}, // 4 - 20 zwanzig nach
{ 7, 8, 9, 10, 41, 42, 43, 44, 45, 46, 47, -1}, // :25 fünf vor halb { 7, 8, 9, 10, 41, 42, 43, 44, 45, 46, 47, -1}, // 5 - 25 fünf vor halb
{ 44, 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, -1}, // :30 halb { 44, 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, -1}, // 6 - 30 halb
{ 7, 8, 9, 10, 33, 34, 35, 36, 44, 45, 46, 47}, // :35 fünf nach halb { 7, 8, 9, 10, 33, 34, 35, 36, 44, 45, 46, 47}, // 7 - 35 fünf nach halb
{ 11, 12, 13, 14, 15, 16, 17, 41, 42, 43, -1, -1}, // :40 zwanzig vor { 11, 12, 13, 14, 15, 16, 17, 41, 42, 43, -1, -1}, // 8 - 40 zwanzig vor
{ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1}, // :45 dreiviertel { 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1}, // 9 - 45 dreiviertel
{ 18, 19, 20, 21, 41, 42, 43, -1, -1, -1, -1, -1}, // :50 zehn vor { 18, 19, 20, 21, 41, 42, 43, -1, -1, -1, -1, -1}, // 10 - 50 zehn vor
{ 7, 8, 9, 10, 41, 42, 43, -1, -1, -1, -1, -1}, // :55 fünf vor { 7, 8, 9, 10, 41, 42, 43, -1, -1, -1, -1, -1}, // 11 - 55 fünf vor
{ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, -1}, // :15 alternative viertel nach { 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, -1}, // 12 - 15 alternative viertel nach
{ 26, 27, 28, 29, 30, 31, 32, 41, 42, 43, -1, -1} // :45 alternative viertel vor { 26, 27, 28, 29, 30, 31, 32, 41, 42, 43, -1, -1} // 13 - 45 alternative viertel vor
}; };
@ -284,12 +284,13 @@ class WordClockUsermod : public Usermod
setHours(hours + 1, false); setHours(hours + 1, false);
break; break;
case 9: case 9:
// viertel vor bzw dreiviertel // viertel vor
if (nord) { if (nord) {
setMinutes(9); setMinutes(13);
} }
// dreiviertel
else { else {
setMinutes(12); setMinutes(9);
} }
setHours(hours + 1, false); setHours(hours + 1, false);
break; break;
@ -422,12 +423,18 @@ class WordClockUsermod : public Usermod
*/ */
void addToConfig(JsonObject& root) void addToConfig(JsonObject& root)
{ {
JsonObject top = root.createNestedObject("WordClockUsermod"); JsonObject top = root.createNestedObject(F("WordClockUsermod"));
top["active"] = usermodActive; top[F("active")] = usermodActive;
top["displayItIs"] = displayItIs; top[F("displayItIs")] = displayItIs;
top["ledOffset"] = ledOffset; top[F("ledOffset")] = ledOffset;
top["Meander wiring?"] = meander; top[F("Meander wiring?")] = meander;
top["Norddeutsch"] = nord; top[F("Norddeutsch")] = nord;
}
void appendConfigData()
{
oappend(SET_F("addInfo('WordClockUsermod:ledOffset', 1, 'Number of LEDs before the letters');"));
oappend(SET_F("addInfo('WordClockUsermod:Norddeutsch', 1, 'Viertel vor instead of Dreiviertel');"));
} }
/* /*
@ -450,15 +457,15 @@ class WordClockUsermod : public Usermod
// default settings values could be set here (or below using the 3-argument getJsonValue()) instead of in the class definition or constructor // default settings values could be set here (or below using the 3-argument getJsonValue()) instead of in the class definition or constructor
// setting them inside readFromConfig() is slightly more robust, handling the rare but plausible use case of single value being missing after boot (e.g. if the cfg.json was manually edited and a value was removed) // setting them inside readFromConfig() is slightly more robust, handling the rare but plausible use case of single value being missing after boot (e.g. if the cfg.json was manually edited and a value was removed)
JsonObject top = root["WordClockUsermod"]; JsonObject top = root[F("WordClockUsermod")];
bool configComplete = !top.isNull(); bool configComplete = !top.isNull();
configComplete &= getJsonValue(top["active"], usermodActive); configComplete &= getJsonValue(top[F("active")], usermodActive);
configComplete &= getJsonValue(top["displayItIs"], displayItIs); configComplete &= getJsonValue(top[F("displayItIs")], displayItIs);
configComplete &= getJsonValue(top["ledOffset"], ledOffset); configComplete &= getJsonValue(top[F("ledOffset")], ledOffset);
configComplete &= getJsonValue(top["Meander wiring?"], meander); configComplete &= getJsonValue(top[F("Meander wiring?")], meander);
configComplete &= getJsonValue(top["Norddeutsch"], nord); configComplete &= getJsonValue(top[F("Norddeutsch")], nord);
return configComplete; return configComplete;
} }

View File

@ -1247,10 +1247,10 @@ uint16_t mode_rain() {
if (SEGENV.call && SEGENV.step > SPEED_FORMULA_L) { if (SEGENV.call && SEGENV.step > SPEED_FORMULA_L) {
SEGENV.step = 1; SEGENV.step = 1;
if (strip.isMatrix) { if (strip.isMatrix) {
uint32_t ctemp[width]; //uint32_t ctemp[width];
for (int i = 0; i<width; i++) ctemp[i] = SEGMENT.getPixelColorXY(i, height-1); //for (int i = 0; i<width; i++) ctemp[i] = SEGMENT.getPixelColorXY(i, height-1);
SEGMENT.move(6,1); // move all pixels down SEGMENT.move(6, 1, true); // move all pixels down
for (int i = 0; i<width; i++) SEGMENT.setPixelColorXY(i, 0, ctemp[i]); // wrap around //for (int i = 0; i<width; i++) SEGMENT.setPixelColorXY(i, 0, ctemp[i]); // wrap around
SEGENV.aux0 = (SEGENV.aux0 % width) + (SEGENV.aux0 / width + 1) * width; SEGENV.aux0 = (SEGENV.aux0 % width) + (SEGENV.aux0 / width + 1) * width;
SEGENV.aux1 = (SEGENV.aux1 % width) + (SEGENV.aux1 / width + 1) * width; SEGENV.aux1 = (SEGENV.aux1 % width) + (SEGENV.aux1 / width + 1) * width;
} else { } else {
@ -1978,7 +1978,7 @@ uint16_t mode_fire_2012() {
if (!SEGENV.allocateData(strips * SEGLEN)) return mode_static(); //allocation failed if (!SEGENV.allocateData(strips * SEGLEN)) return mode_static(); //allocation failed
byte* heat = SEGENV.data; byte* heat = SEGENV.data;
const uint32_t it = strip.now >> 6; //div 64 const uint32_t it = strip.now >> 5; //div 32
struct virtualStrip { struct virtualStrip {
static void runStrip(uint16_t stripNr, byte* heat, uint32_t it) { static void runStrip(uint16_t stripNr, byte* heat, uint32_t it) {
@ -1987,28 +1987,24 @@ uint16_t mode_fire_2012() {
// Step 1. Cool down every cell a little // Step 1. Cool down every cell a little
for (int i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
uint8_t cool = (it != SEGENV.step) ? random8((((20 + SEGMENT.speed/3) * 16) / SEGLEN)+2) : random(8); uint8_t cool = (it != SEGENV.step) ? random8((((20 + SEGMENT.speed/3) * 16) / SEGLEN)+2) : random(4);
uint8_t minTemp = 0; uint8_t minTemp = (i<ignition) ? (ignition-i)/4 + 16 : 0; // should not become black in ignition area
if (i<ignition) {
minTemp = (ignition-i)/4 + 16; // and should not become black
}
uint8_t temp = qsub8(heat[i], cool); uint8_t temp = qsub8(heat[i], cool);
heat[i] = temp<minTemp ? minTemp : temp; heat[i] = temp<minTemp ? minTemp : temp;
} }
if (it != SEGENV.step) if (it != SEGENV.step) {
{
// Step 2. Heat from each cell drifts 'up' and diffuses a little // Step 2. Heat from each cell drifts 'up' and diffuses a little
for (int k = SEGLEN -1; k > 1; k--) { for (int k = SEGLEN -1; k > 1; k--) {
heat[k] = (heat[k - 1] + (heat[k - 2]<<1) ) / 3; // heat[k-2] multiplied by 2 heat[k] = (heat[k - 1] + (heat[k - 2]<<1) ) / 3; // heat[k-2] multiplied by 2
} }
}
// Step 3. Randomly ignite new 'sparks' of heat near the bottom // Step 3. Randomly ignite new 'sparks' of heat near the bottom
if (random8() <= SEGMENT.intensity) { if (random8() <= SEGMENT.intensity) {
uint8_t y = random8(ignition); uint8_t y = random8(ignition);
uint8_t boost = (32+SEGMENT.custom3*2) * (2*ignition-y) / (2*ignition); uint8_t boost = (17+SEGMENT.custom3) * (ignition - y/2) / ignition; // integer math!
heat[y] = qadd8(heat[y], random8(64+boost,128+boost)); heat[y] = qadd8(heat[y], random8(96+2*boost,207+boost));
}
} }
// Step 4. Map from heat cells to LED colors // Step 4. Map from heat cells to LED colors
@ -2028,7 +2024,7 @@ uint16_t mode_fire_2012() {
return FRAMETIME; return FRAMETIME;
} }
static const char _data_FX_MODE_FIRE_2012[] PROGMEM = "Fire 2012@Cooling,Spark rate,,,Boost;;!;1;sx=120,ix=64,m12=1"; // bars static const char _data_FX_MODE_FIRE_2012[] PROGMEM = "Fire 2012@Cooling,Spark rate,,,Boost;;!;1;sx=64,ix=160,m12=1"; // bars
// ColorWavesWithPalettes by Mark Kriegsman: https://gist.github.com/kriegsman/8281905786e8b2632aeb // ColorWavesWithPalettes by Mark Kriegsman: https://gist.github.com/kriegsman/8281905786e8b2632aeb
@ -2765,7 +2761,7 @@ uint16_t mode_spots()
{ {
return spots_base((255 - SEGMENT.speed) << 8); return spots_base((255 - SEGMENT.speed) << 8);
} }
static const char _data_FX_MODE_SPOTS[] PROGMEM = "Spots@,Width,,,,,Overlay;!,!;!"; static const char _data_FX_MODE_SPOTS[] PROGMEM = "Spots@Spread,Width,,,,,Overlay;!,!;!";
//Intensity slider sets number of "lights", LEDs per light fade in and out //Intensity slider sets number of "lights", LEDs per light fade in and out
@ -7333,7 +7329,7 @@ static const char _data_FX_MODE_2DAKEMI[] PROGMEM = "Akemi@Color speed,Dance;Hea
// Distortion waves - ldirko // Distortion waves - ldirko
// https://editor.soulmatelights.com/gallery/1089-distorsion-waves // https://editor.soulmatelights.com/gallery/1089-distorsion-waves
// apated for WLD by @blazoncek // adapted for WLED by @blazoncek
uint16_t mode_2Ddistortionwaves() { uint16_t mode_2Ddistortionwaves() {
if (!strip.isMatrix) return mode_static(); // not a 2D set-up if (!strip.isMatrix) return mode_static(); // not a 2D set-up
@ -7382,7 +7378,116 @@ uint16_t mode_2Ddistortionwaves() {
return FRAMETIME; return FRAMETIME;
} }
static const char _data_FX_MODE_2DDISTORTIONWAVES[] PROGMEM = "Distortion Waves@!,Scale;;;2;"; static const char _data_FX_MODE_2DDISTORTIONWAVES[] PROGMEM = "Distortion Waves@!,Scale;;;2";
//Soap
//@Stepko
//Idea from https://www.youtube.com/watch?v=DiHBgITrZck&ab_channel=StefanPetrick
// adapted for WLED by @blazoncek
uint16_t mode_2Dsoap() {
if (!strip.isMatrix) return mode_static(); // not a 2D set-up
const uint16_t cols = SEGMENT.virtualWidth();
const uint16_t rows = SEGMENT.virtualHeight();
const size_t dataSize = SEGMENT.width() * SEGMENT.height() * sizeof(uint8_t); // prevent reallocation if mirrored or grouped
if (!SEGENV.allocateData(dataSize + sizeof(uint32_t)*3)) return mode_static(); //allocation failed
uint8_t *noise3d = reinterpret_cast<uint8_t*>(SEGENV.data);
uint32_t *noise32_x = reinterpret_cast<uint32_t*>(SEGENV.data + dataSize);
uint32_t *noise32_y = reinterpret_cast<uint32_t*>(SEGENV.data + dataSize + sizeof(uint32_t));
uint32_t *noise32_z = reinterpret_cast<uint32_t*>(SEGENV.data + dataSize + sizeof(uint32_t)*2);
uint32_t scale32_x = 160000U/cols;
uint32_t scale32_y = 160000U/rows;
// init
if (SEGENV.call == 0) {
SEGMENT.setUpLeds();
*noise32_x = random16();
*noise32_y = random16();
*noise32_z = random16();
for (int i = 0; i < cols; i++) {
int32_t ioffset = scale32_x * (i - cols / 2);
for (int j = 0; j < rows; j++) {
int32_t joffset = scale32_y * (j - rows / 2);
uint8_t data = inoise16(*noise32_x + ioffset, *noise32_y + joffset, *noise32_z) >> 8;
noise3d[XY(i,j)] = scale8(noise3d[XY(i,j)], SEGMENT.intensity) + scale8(data, 255 - SEGMENT.intensity);
SEGMENT.setPixelColorXY(i, j, ColorFromPalette(SEGPALETTE,~noise3d[XY(i,j)]*3));
}
}
}
uint32_t mov = MAX(cols,rows)*(SEGMENT.speed+1)/2;
*noise32_x += mov;
*noise32_y += mov;
*noise32_z += mov;
for (int i = 0; i < cols; i++) {
int32_t ioffset = scale32_x * (i - cols / 2);
for (int j = 0; j < rows; j++) {
int32_t joffset = scale32_y * (j - rows / 2);
uint8_t data = inoise16(*noise32_x + ioffset, *noise32_y + joffset, *noise32_z) >> 8;
noise3d[XY(i,j)] = scale8(noise3d[XY(i,j)], SEGMENT.intensity) + scale8(data, 256 - SEGMENT.intensity);
}
}
int zD;
int zF;
int amplitude;
int8_t shiftX = 0; //(SEGMENT.custom1 - 128) / 4;
int8_t shiftY = 0; //(SEGMENT.custom2 - 128) / 4;
amplitude = (cols >= 16) ? (cols-8)/8 : 1;
for (int y = 0; y < rows; y++) {
int amount = ((int)noise3d[XY(0,y)] - 128) * 2 * amplitude + 256*shiftX;
int delta = abs(amount) >> 8;
int fraction = abs(amount) & 255;
for (int x = 0; x < cols; x++) {
if (amount < 0) {
zD = x - delta;
zF = zD - 1;
} else {
zD = x + delta;
zF = zD + 1;
}
CRGB PixelA = CRGB::Black;
if ((zD >= 0) && (zD < cols)) PixelA = SEGMENT.getPixelColorXY(zD, y);
else PixelA = ColorFromPalette(SEGPALETTE, ~noise3d[XY(abs(zD),y)]*3);
CRGB PixelB = CRGB::Black;
if ((zF >= 0) && (zF < cols)) PixelB = SEGMENT.getPixelColorXY(zF, y);
else PixelB = ColorFromPalette(SEGPALETTE, ~noise3d[XY(abs(zF),y)]*3);
CRGB pix = (PixelA.nscale8(ease8InOutApprox(255 - fraction))) + (PixelB.nscale8(ease8InOutApprox(fraction)));
SEGMENT.setPixelColorXY(x, y, pix);
}
}
amplitude = (rows >= 16) ? (rows-8)/8 : 1;
for (int x = 0; x < cols; x++) {
int amount = ((int)noise3d[XY(x,0)] - 128) * 2 * amplitude + 256*shiftY;
int delta = abs(amount) >> 8;
int fraction = abs(amount) & 255;
for (int y = 0; y < rows; y++) {
if (amount < 0) {
zD = y - delta;
zF = zD - 1;
} else {
zD = y + delta;
zF = zD + 1;
}
CRGB PixelA = CRGB::Black;
if ((zD >= 0) && (zD < rows)) PixelA = SEGMENT.getPixelColorXY(x, zD);
else PixelA = ColorFromPalette(SEGPALETTE, ~noise3d[XY(x,abs(zD))]*3);
CRGB PixelB = CRGB::Black;
if ((zF >= 0) && (zF < rows)) PixelB = SEGMENT.getPixelColorXY(x, zF);
else PixelB = ColorFromPalette(SEGPALETTE, ~noise3d[XY(x,abs(zF))]*3);
CRGB pix = (PixelA.nscale8(ease8InOutApprox(255 - fraction))) + (PixelB.nscale8(ease8InOutApprox(fraction)));
SEGMENT.setPixelColorXY(x, y, pix);
}
}
return FRAMETIME;
}
static const char _data_FX_MODE_2DSOAP[] PROGMEM = "Soap@!,Smoothness;;!;2";
#endif // WLED_DISABLE_2D #endif // WLED_DISABLE_2D
@ -7617,6 +7722,7 @@ void WS2812FX::setupEffectData() {
addEffect(FX_MODE_2DSINDOTS, &mode_2DSindots, _data_FX_MODE_2DSINDOTS); addEffect(FX_MODE_2DSINDOTS, &mode_2DSindots, _data_FX_MODE_2DSINDOTS);
addEffect(FX_MODE_2DDNASPIRAL, &mode_2DDNASpiral, _data_FX_MODE_2DDNASPIRAL); addEffect(FX_MODE_2DDNASPIRAL, &mode_2DDNASpiral, _data_FX_MODE_2DDNASPIRAL);
addEffect(FX_MODE_2DBLACKHOLE, &mode_2DBlackHole, _data_FX_MODE_2DBLACKHOLE); addEffect(FX_MODE_2DBLACKHOLE, &mode_2DBlackHole, _data_FX_MODE_2DBLACKHOLE);
addEffect(FX_MODE_2DSOAP, &mode_2Dsoap, _data_FX_MODE_2DSOAP);
addEffect(FX_MODE_2DAKEMI, &mode_2DAkemi, _data_FX_MODE_2DAKEMI); // audio addEffect(FX_MODE_2DAKEMI, &mode_2DAkemi, _data_FX_MODE_2DAKEMI); // audio
#endif // WLED_DISABLE_2D #endif // WLED_DISABLE_2D

View File

@ -254,7 +254,8 @@
#define FX_MODE_2DBLOBS 121 //gap fill #define FX_MODE_2DBLOBS 121 //gap fill
#define FX_MODE_2DSCROLLTEXT 122 //gap fill #define FX_MODE_2DSCROLLTEXT 122 //gap fill
#define FX_MODE_2DDRIFTROSE 123 //gap fill #define FX_MODE_2DDRIFTROSE 123 //gap fill
#define FX_MODE_2DDISTORTIONWAVES 124 #define FX_MODE_2DDISTORTIONWAVES 124 //gap fill
#define FX_MODE_2DSOAP 125 //gap fill
// WLED-SR effects (SR compatible IDs !!!) // WLED-SR effects (SR compatible IDs !!!)
#define FX_MODE_PIXELS 128 #define FX_MODE_PIXELS 128
@ -562,9 +563,9 @@ typedef struct Segment {
void fadeToBlackBy(uint8_t fadeBy); void fadeToBlackBy(uint8_t fadeBy);
void blendPixelColor(int n, uint32_t color, uint8_t blend); void blendPixelColor(int n, uint32_t color, uint8_t blend);
void blendPixelColor(int n, CRGB c, uint8_t blend) { blendPixelColor(n, RGBW32(c.r,c.g,c.b,0), blend); } void blendPixelColor(int n, CRGB c, uint8_t blend) { blendPixelColor(n, RGBW32(c.r,c.g,c.b,0), blend); }
void addPixelColor(int n, uint32_t color); void addPixelColor(int n, uint32_t color, bool fast = false);
void addPixelColor(int n, byte r, byte g, byte b, byte w = 0) { addPixelColor(n, RGBW32(r,g,b,w)); } // automatically inline void addPixelColor(int n, byte r, byte g, byte b, byte w = 0, bool fast = false) { addPixelColor(n, RGBW32(r,g,b,w), fast); } // automatically inline
void addPixelColor(int n, CRGB c) { addPixelColor(n, RGBW32(c.r,c.g,c.b,0)); } // automatically inline void addPixelColor(int n, CRGB c, bool fast = false) { addPixelColor(n, RGBW32(c.r,c.g,c.b,0), fast); } // automatically inline
void fadePixelColor(uint16_t n, uint8_t fade); void fadePixelColor(uint16_t n, uint8_t fade);
uint8_t get_random_wheel_index(uint8_t pos); uint8_t get_random_wheel_index(uint8_t pos);
uint32_t color_from_palette(uint16_t, bool mapping, bool wrap, uint8_t mcol, uint8_t pbri = 255); uint32_t color_from_palette(uint16_t, bool mapping, bool wrap, uint8_t mcol, uint8_t pbri = 255);
@ -586,16 +587,16 @@ typedef struct Segment {
// 2D support functions // 2D support functions
void blendPixelColorXY(uint16_t x, uint16_t y, uint32_t color, uint8_t blend); void blendPixelColorXY(uint16_t x, uint16_t y, uint32_t color, uint8_t blend);
void blendPixelColorXY(uint16_t x, uint16_t y, CRGB c, uint8_t blend) { blendPixelColorXY(x, y, RGBW32(c.r,c.g,c.b,0), blend); } void blendPixelColorXY(uint16_t x, uint16_t y, CRGB c, uint8_t blend) { blendPixelColorXY(x, y, RGBW32(c.r,c.g,c.b,0), blend); }
void addPixelColorXY(int x, int y, uint32_t color); void addPixelColorXY(int x, int y, uint32_t color, bool fast = false);
void addPixelColorXY(int x, int y, byte r, byte g, byte b, byte w = 0) { addPixelColorXY(x, y, RGBW32(r,g,b,w)); } // automatically inline void addPixelColorXY(int x, int y, byte r, byte g, byte b, byte w = 0, bool fast = false) { addPixelColorXY(x, y, RGBW32(r,g,b,w), fast); } // automatically inline
void addPixelColorXY(int x, int y, CRGB c) { addPixelColorXY(x, y, RGBW32(c.r,c.g,c.b,0)); } void addPixelColorXY(int x, int y, CRGB c, bool fast = false) { addPixelColorXY(x, y, RGBW32(c.r,c.g,c.b,0), fast); }
void fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade); void fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade);
void box_blur(uint16_t i, bool vertical, fract8 blur_amount); // 1D box blur (with weight) void box_blur(uint16_t i, bool vertical, fract8 blur_amount); // 1D box blur (with weight)
void blurRow(uint16_t row, fract8 blur_amount); void blurRow(uint16_t row, fract8 blur_amount);
void blurCol(uint16_t col, fract8 blur_amount); void blurCol(uint16_t col, fract8 blur_amount);
void moveX(int8_t delta); void moveX(int8_t delta, bool wrap = false);
void moveY(int8_t delta); void moveY(int8_t delta, bool wrap = false);
void move(uint8_t dir, uint8_t delta); void move(uint8_t dir, uint8_t delta, bool wrap = false);
void draw_circle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c); void draw_circle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c);
void fill_circle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c); void fill_circle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c);
void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t c); void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t c);
@ -619,16 +620,16 @@ typedef struct Segment {
uint32_t getPixelColorXY(uint16_t x, uint16_t y) { return getPixelColor(x); } uint32_t getPixelColorXY(uint16_t x, uint16_t y) { return getPixelColor(x); }
void blendPixelColorXY(uint16_t x, uint16_t y, uint32_t c, uint8_t blend) { blendPixelColor(x, c, blend); } void blendPixelColorXY(uint16_t x, uint16_t y, uint32_t c, uint8_t blend) { blendPixelColor(x, c, blend); }
void blendPixelColorXY(uint16_t x, uint16_t y, CRGB c, uint8_t blend) { blendPixelColor(x, RGBW32(c.r,c.g,c.b,0), blend); } void blendPixelColorXY(uint16_t x, uint16_t y, CRGB c, uint8_t blend) { blendPixelColor(x, RGBW32(c.r,c.g,c.b,0), blend); }
void addPixelColorXY(int x, int y, uint32_t color) { addPixelColor(x, color); } void addPixelColorXY(int x, int y, uint32_t color, bool fast = false) { addPixelColor(x, color, fast); }
void addPixelColorXY(int x, int y, byte r, byte g, byte b, byte w = 0) { addPixelColor(x, RGBW32(r,g,b,w)); } void addPixelColorXY(int x, int y, byte r, byte g, byte b, byte w = 0, bool fast = false) { addPixelColor(x, RGBW32(r,g,b,w), fast); }
void addPixelColorXY(int x, int y, CRGB c) { addPixelColor(x, RGBW32(c.r,c.g,c.b,0)); } void addPixelColorXY(int x, int y, CRGB c, bool fast = false) { addPixelColor(x, RGBW32(c.r,c.g,c.b,0), fast); }
void fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade) { fadePixelColor(x, fade); } void fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade) { fadePixelColor(x, fade); }
void box_blur(uint16_t i, bool vertical, fract8 blur_amount) {} void box_blur(uint16_t i, bool vertical, fract8 blur_amount) {}
void blurRow(uint16_t row, fract8 blur_amount) {} void blurRow(uint16_t row, fract8 blur_amount) {}
void blurCol(uint16_t col, fract8 blur_amount) {} void blurCol(uint16_t col, fract8 blur_amount) {}
void moveX(int8_t delta) {} void moveX(int8_t delta, bool wrap = false) {}
void moveY(int8_t delta) {} void moveY(int8_t delta, bool wrap = false) {}
void move(uint8_t dir, uint8_t delta) {} void move(uint8_t dir, uint8_t delta, bool wrap = false) {}
void fill_circle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c) {} void fill_circle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c) {}
void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t c) {} void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t c) {}
void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, CRGB c) {} void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, CRGB c) {}

View File

@ -304,8 +304,22 @@ void Segment::blendPixelColorXY(uint16_t x, uint16_t y, uint32_t color, uint8_t
} }
// Adds the specified color with the existing pixel color perserving color balance. // Adds the specified color with the existing pixel color perserving color balance.
void Segment::addPixelColorXY(int x, int y, uint32_t color) { void Segment::addPixelColorXY(int x, int y, uint32_t color, bool fast) {
setPixelColorXY(x, y, color_add(getPixelColorXY(x,y), color)); uint32_t col = getPixelColorXY(x,y);
uint8_t r = R(col);
uint8_t g = G(col);
uint8_t b = B(col);
uint8_t w = W(col);
if (fast) {
r = qadd8(r, R(color));
g = qadd8(g, G(color));
b = qadd8(b, B(color));
w = qadd8(w, W(color));
col = RGBW32(r,g,b,w);
} else {
col = color_add(col, color);
}
setPixelColorXY(x, y, col);
} }
void Segment::fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade) { void Segment::fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade) {
@ -416,54 +430,55 @@ void Segment::blur1d(fract8 blur_amount) {
for (uint16_t y = 0; y < rows; y++) blurRow(y, blur_amount); for (uint16_t y = 0; y < rows; y++) blurRow(y, blur_amount);
} }
void Segment::moveX(int8_t delta) { void Segment::moveX(int8_t delta, bool wrap) {
const uint16_t cols = virtualWidth(); const uint16_t cols = virtualWidth();
const uint16_t rows = virtualHeight(); const uint16_t rows = virtualHeight();
if (!delta) return; if (!delta || abs(delta) >= cols) return;
if (delta > 0) { uint32_t newPxCol[cols];
for (uint8_t y = 0; y < rows; y++) for (uint8_t x = 0; x < cols-1; x++) { for (int y = 0; y < rows; y++) {
if (x + delta >= cols) break; if (delta > 0) {
setPixelColorXY(x, y, getPixelColorXY((x + delta)%cols, y)); for (int x = 0; x < cols-delta; x++) newPxCol[x] = getPixelColorXY((x + delta), y);
} for (int x = cols-delta; x < cols; x++) newPxCol[x] = getPixelColorXY(wrap ? (x + delta) - cols : x, y);
} else { } else {
for (uint8_t y = 0; y < rows; y++) for (int16_t x = cols-1; x >= 0; x--) { for (int x = cols-1; x >= -delta; x--) newPxCol[x] = getPixelColorXY((x + delta), y);
if (x + delta < 0) break; for (int x = -delta-1; x >= 0; x--) newPxCol[x] = getPixelColorXY(wrap ? (x + delta) + cols : x, y);
setPixelColorXY(x, y, getPixelColorXY(x + delta, y));
} }
for (int x = 0; x < cols; x++) setPixelColorXY(x, y, newPxCol[x]);
} }
} }
void Segment::moveY(int8_t delta) { void Segment::moveY(int8_t delta, bool wrap) {
const uint16_t cols = virtualWidth(); const uint16_t cols = virtualWidth();
const uint16_t rows = virtualHeight(); const uint16_t rows = virtualHeight();
if (!delta) return; if (!delta || abs(delta) >= rows) return;
if (delta > 0) { uint32_t newPxCol[rows];
for (uint8_t x = 0; x < cols; x++) for (uint8_t y = 0; y < rows-1; y++) { for (int x = 0; x < cols; x++) {
if (y + delta >= rows) break; if (delta > 0) {
setPixelColorXY(x, y, getPixelColorXY(x, (y + delta))); for (int y = 0; y < rows-delta; y++) newPxCol[y] = getPixelColorXY(x, (y + delta));
} for (int y = rows-delta; y < rows; y++) newPxCol[y] = getPixelColorXY(x, wrap ? (y + delta) - rows : y);
} else { } else {
for (uint8_t x = 0; x < cols; x++) for (int16_t y = rows-1; y >= 0; y--) { for (int y = rows-1; y >= -delta; y--) newPxCol[y] = getPixelColorXY(x, (y + delta));
if (y + delta < 0) break; for (int y = -delta-1; y >= 0; y--) newPxCol[y] = getPixelColorXY(x, wrap ? (y + delta) + rows : y);
setPixelColorXY(x, y, getPixelColorXY(x, y + delta));
} }
for (int y = 0; y < rows; y++) setPixelColorXY(x, y, newPxCol[y]);
} }
} }
// move() - move all pixels in desired direction delta number of pixels // move() - move all pixels in desired direction delta number of pixels
// @param dir direction: 0=left, 1=left-up, 2=up, 3=right-up, 4=right, 5=right-down, 6=down, 7=left-down // @param dir direction: 0=left, 1=left-up, 2=up, 3=right-up, 4=right, 5=right-down, 6=down, 7=left-down
// @param delta number of pixels to move // @param delta number of pixels to move
void Segment::move(uint8_t dir, uint8_t delta) { // @param wrap around
void Segment::move(uint8_t dir, uint8_t delta, bool wrap) {
if (delta==0) return; if (delta==0) return;
switch (dir) { switch (dir) {
case 0: moveX( delta); break; case 0: moveX( delta, wrap); break;
case 1: moveX( delta); moveY( delta); break; case 1: moveX( delta, wrap); moveY( delta, wrap); break;
case 2: moveY( delta); break; case 2: moveY( delta, wrap); break;
case 3: moveX(-delta); moveY( delta); break; case 3: moveX(-delta, wrap); moveY( delta, wrap); break;
case 4: moveX(-delta); break; case 4: moveX(-delta, wrap); break;
case 5: moveX(-delta); moveY(-delta); break; case 5: moveX(-delta, wrap); moveY(-delta, wrap); break;
case 6: moveY(-delta); break; case 6: moveY(-delta, wrap); break;
case 7: moveX( delta); moveY(-delta); break; case 7: moveX( delta, wrap); moveY(-delta, wrap); break;
} }
} }

View File

@ -228,6 +228,7 @@ CRGBPalette16 &Segment::loadPalette(CRGBPalette16 &targetPalette, uint8_t pal) {
case FX_MODE_GLITTER : pal = 11; break; // rainbow colors case FX_MODE_GLITTER : pal = 11; break; // rainbow colors
case FX_MODE_SUNRISE : pal = 35; break; // heat palette case FX_MODE_SUNRISE : pal = 35; break; // heat palette
case FX_MODE_RAILWAY : pal = 3; break; // prim + sec case FX_MODE_RAILWAY : pal = 3; break; // prim + sec
case FX_MODE_2DSOAP : pal = 11; break; // rainbow colors
} }
switch (pal) { switch (pal) {
case 0: //default palette. Exceptions for specific effects above case 0: //default palette. Exceptions for specific effects above
@ -820,8 +821,22 @@ void Segment::blendPixelColor(int n, uint32_t color, uint8_t blend) {
} }
// Adds the specified color with the existing pixel color perserving color balance. // Adds the specified color with the existing pixel color perserving color balance.
void Segment::addPixelColor(int n, uint32_t color) { void Segment::addPixelColor(int n, uint32_t color, bool fast) {
setPixelColor(n, color_add(getPixelColor(n), color)); uint32_t col = getPixelColor(n);
uint8_t r = R(col);
uint8_t g = G(col);
uint8_t b = B(col);
uint8_t w = W(col);
if (fast) {
r = qadd8(r, R(color));
g = qadd8(g, G(color));
b = qadd8(b, B(color));
w = qadd8(w, W(color));
col = RGBW32(r,g,b,w);
} else {
col = color_add(col, color);
}
setPixelColor(n, col);
} }
void Segment::fadePixelColor(uint16_t n, uint8_t fade) { void Segment::fadePixelColor(uint16_t n, uint8_t fade) {

View File

@ -95,12 +95,14 @@ uint32_t Bus::autoWhiteCalc(uint32_t c) {
BusDigital::BusDigital(BusConfig &bc, uint8_t nr, const ColorOrderMap &com) : Bus(bc.type, bc.start, bc.autoWhite), _colorOrderMap(com) { BusDigital::BusDigital(BusConfig &bc, uint8_t nr, const ColorOrderMap &com) : Bus(bc.type, bc.start, bc.autoWhite), _colorOrderMap(com) {
if (!IS_DIGITAL(bc.type) || !bc.count) return; if (!IS_DIGITAL(bc.type) || !bc.count) return;
if (!pinManager.allocatePin(bc.pins[0], true, PinOwner::BusDigital)) return; if (!pinManager.allocatePin(bc.pins[0], true, PinOwner::BusDigital)) return;
_frequencykHz = 0U;
_pins[0] = bc.pins[0]; _pins[0] = bc.pins[0];
if (IS_2PIN(bc.type)) { if (IS_2PIN(bc.type)) {
if (!pinManager.allocatePin(bc.pins[1], true, PinOwner::BusDigital)) { if (!pinManager.allocatePin(bc.pins[1], true, PinOwner::BusDigital)) {
cleanup(); return; cleanup(); return;
} }
_pins[1] = bc.pins[1]; _pins[1] = bc.pins[1];
_frequencykHz = bc.frequency ? bc.frequency : 2000U; // 2MHz clock if undefined
} }
reversed = bc.reversed; reversed = bc.reversed;
_needsRefresh = bc.refreshReq || bc.type == TYPE_TM1814; _needsRefresh = bc.refreshReq || bc.type == TYPE_TM1814;
@ -110,7 +112,7 @@ BusDigital::BusDigital(BusConfig &bc, uint8_t nr, const ColorOrderMap &com) : Bu
if (_iType == I_NONE) return; if (_iType == I_NONE) return;
uint16_t lenToCreate = _len; uint16_t lenToCreate = _len;
if (bc.type == TYPE_WS2812_1CH_X3) lenToCreate = NUM_ICS_WS2812_1CH_3X(_len); // only needs a third of "RGB" LEDs for NeoPixelBus if (bc.type == TYPE_WS2812_1CH_X3) lenToCreate = NUM_ICS_WS2812_1CH_3X(_len); // only needs a third of "RGB" LEDs for NeoPixelBus
_busPtr = PolyBus::create(_iType, _pins, lenToCreate, nr); _busPtr = PolyBus::create(_iType, _pins, lenToCreate, nr, _frequencykHz);
_valid = (_busPtr != nullptr); _valid = (_busPtr != nullptr);
_colorOrder = bc.colorOrder; _colorOrder = bc.colorOrder;
DEBUG_PRINTF("%successfully inited strip %u (len %u) with type %u and pins %u,%u (itype %u)\n", _valid?"S":"Uns", nr, _len, bc.type, _pins[0],_pins[1],_iType); DEBUG_PRINTF("%successfully inited strip %u (len %u) with type %u and pins %u,%u (itype %u)\n", _valid?"S":"Uns", nr, _len, bc.type, _pins[0],_pins[1],_iType);
@ -212,10 +214,11 @@ BusPwm::BusPwm(BusConfig &bc) : Bus(bc.type, bc.start, bc.autoWhite) {
_valid = false; _valid = false;
if (!IS_PWM(bc.type)) return; if (!IS_PWM(bc.type)) return;
uint8_t numPins = NUM_PWM_PINS(bc.type); uint8_t numPins = NUM_PWM_PINS(bc.type);
_frequency = bc.frequency ? bc.frequency : WLED_PWM_FREQ;
#ifdef ESP8266 #ifdef ESP8266
analogWriteRange(255); //same range as one RGB channel analogWriteRange(255); //same range as one RGB channel
analogWriteFreq(WLED_PWM_FREQ); analogWriteFreq(_frequency);
#else #else
_ledcStart = pinManager.allocateLedc(numPins); _ledcStart = pinManager.allocateLedc(numPins);
if (_ledcStart == 255) { //no more free LEDC channels if (_ledcStart == 255) { //no more free LEDC channels
@ -232,7 +235,7 @@ BusPwm::BusPwm(BusConfig &bc) : Bus(bc.type, bc.start, bc.autoWhite) {
#ifdef ESP8266 #ifdef ESP8266
pinMode(_pins[i], OUTPUT); pinMode(_pins[i], OUTPUT);
#else #else
ledcSetup(_ledcStart + i, WLED_PWM_FREQ, 8); ledcSetup(_ledcStart + i, _frequency, 8);
ledcAttachPin(_pins[i], _ledcStart + i); ledcAttachPin(_pins[i], _ledcStart + i);
#endif #endif
} }
@ -450,21 +453,21 @@ void BusNetwork::cleanup() {
uint32_t BusManager::memUsage(BusConfig &bc) { uint32_t BusManager::memUsage(BusConfig &bc) {
uint8_t type = bc.type; uint8_t type = bc.type;
uint16_t len = bc.count + bc.skipAmount; uint16_t len = bc.count + bc.skipAmount;
if (type > 15 && type < 32) { if (type > 15 && type < 32) { // digital types
if (type == TYPE_UCS8903 || type == TYPE_UCS8904) len *= 2; // 16-bit LEDs
#ifdef ESP8266 #ifdef ESP8266
if (bc.pins[0] == 3) { //8266 DMA uses 5x the mem if (bc.pins[0] == 3) { //8266 DMA uses 5x the mem
if (type > 29) return len*20; //RGBW if (type > 28) return len*20; //RGBW
return len*15; return len*15;
} }
if (type > 29) return len*4; //RGBW if (type > 28) return len*4; //RGBW
return len*3; return len*3;
#else //ESP32 RMT uses double buffer? #else //ESP32 RMT uses double buffer?
if (type > 29) return len*8; //RGBW if (type > 28) return len*8; //RGBW
return len*6; return len*6;
#endif #endif
} }
if (type > 31 && type < 48) return 5; if (type > 31 && type < 48) return 5;
if (type == 44 || type == 45) return len*4; //RGBW
return len*3; //RGB return len*3; //RGB
} }

View File

@ -29,10 +29,11 @@ struct BusConfig {
bool refreshReq; bool refreshReq;
uint8_t autoWhite; uint8_t autoWhite;
uint8_t pins[5] = {LEDPIN, 255, 255, 255, 255}; uint8_t pins[5] = {LEDPIN, 255, 255, 255, 255};
BusConfig(uint8_t busType, uint8_t* ppins, uint16_t pstart, uint16_t len = 1, uint8_t pcolorOrder = COL_ORDER_GRB, bool rev = false, uint8_t skip = 0, byte aw=RGBW_MODE_MANUAL_ONLY) { uint16_t frequency;
BusConfig(uint8_t busType, uint8_t* ppins, uint16_t pstart, uint16_t len = 1, uint8_t pcolorOrder = COL_ORDER_GRB, bool rev = false, uint8_t skip = 0, byte aw=RGBW_MODE_MANUAL_ONLY, uint16_t clock_kHz=0U) {
refreshReq = (bool) GET_BIT(busType,7); refreshReq = (bool) GET_BIT(busType,7);
type = busType & 0x7F; // bit 7 may be/is hacked to include refresh info (1=refresh in off state, 0=no refresh) type = busType & 0x7F; // bit 7 may be/is hacked to include refresh info (1=refresh in off state, 0=no refresh)
count = len; start = pstart; colorOrder = pcolorOrder; reversed = rev; skipAmount = skip; autoWhite = aw; count = len; start = pstart; colorOrder = pcolorOrder; reversed = rev; skipAmount = skip; autoWhite = aw; frequency = clock_kHz;
uint8_t nPins = 1; uint8_t nPins = 1;
if (type >= TYPE_NET_DDP_RGB && type < 96) nPins = 4; //virtual network bus. 4 "pins" store IP address if (type >= TYPE_NET_DDP_RGB && type < 96) nPins = 4; //virtual network bus. 4 "pins" store IP address
else if (type > 47) nPins = 2; else if (type > 47) nPins = 2;
@ -114,6 +115,7 @@ class Bus {
virtual void setColorOrder() {} virtual void setColorOrder() {}
virtual uint8_t getColorOrder() { return COL_ORDER_RGB; } virtual uint8_t getColorOrder() { return COL_ORDER_RGB; }
virtual uint8_t skippedLeds() { return 0; } virtual uint8_t skippedLeds() { return 0; }
virtual uint16_t getFrequency() { return 0U; }
inline uint16_t getStart() { return _start; } inline uint16_t getStart() { return _start; }
inline void setStart(uint16_t start) { _start = start; } inline void setStart(uint16_t start) { _start = start; }
inline uint8_t getType() { return _type; } inline uint8_t getType() { return _type; }
@ -203,6 +205,8 @@ class BusDigital : public Bus {
return _skip; return _skip;
} }
uint16_t getFrequency() { return _frequencykHz; }
void reinit(); void reinit();
void cleanup(); void cleanup();
@ -216,6 +220,7 @@ class BusDigital : public Bus {
uint8_t _pins[2] = {255, 255}; uint8_t _pins[2] = {255, 255};
uint8_t _iType = 0; //I_NONE; uint8_t _iType = 0; //I_NONE;
uint8_t _skip = 0; uint8_t _skip = 0;
uint16_t _frequencykHz = 0U;
void * _busPtr = nullptr; void * _busPtr = nullptr;
const ColorOrderMap &_colorOrderMap; const ColorOrderMap &_colorOrderMap;
}; };
@ -234,6 +239,8 @@ class BusPwm : public Bus {
uint8_t getPins(uint8_t* pinArray); uint8_t getPins(uint8_t* pinArray);
uint16_t getFrequency() { return _frequency; }
void cleanup() { void cleanup() {
deallocatePins(); deallocatePins();
} }
@ -248,6 +255,7 @@ class BusPwm : public Bus {
#ifdef ARDUINO_ARCH_ESP32 #ifdef ARDUINO_ARCH_ESP32
uint8_t _ledcStart = 255; uint8_t _ledcStart = 255;
#endif #endif
uint16_t _frequency = 0U;
void deallocatePins(); void deallocatePins();
}; };
@ -335,7 +343,7 @@ class BusManager {
void setStatusPixel(uint32_t c); void setStatusPixel(uint32_t c);
void IRAM_ATTR setPixelColor(uint16_t pix, uint32_t c, int16_t cct=-1); void setPixelColor(uint16_t pix, uint32_t c, int16_t cct=-1);
void setBrightness(uint8_t b); void setBrightness(uint8_t b);

View File

@ -1,7 +1,7 @@
#ifndef BusWrapper_h #ifndef BusWrapper_h
#define BusWrapper_h #define BusWrapper_h
#include "NeoPixelBrightnessBus.h" #include "NeoPixelBusLg.h"
// temporary - these defines should actually be set in platformio.ini // temporary - these defines should actually be set in platformio.ini
// C3: I2S0 and I2S1 methods not supported (has one I2S bus) // C3: I2S0 and I2S1 methods not supported (has one I2S bus)
@ -53,6 +53,16 @@
#define I_8266_U1_TM2_3 18 #define I_8266_U1_TM2_3 18
#define I_8266_DM_TM2_3 19 #define I_8266_DM_TM2_3 19
#define I_8266_BB_TM2_3 20 #define I_8266_BB_TM2_3 20
//UCS8903 (RGB)
#define I_8266_U0_UCS_3 49
#define I_8266_U1_UCS_3 50
#define I_8266_DM_UCS_3 51
#define I_8266_BB_UCS_3 52
//UCS8904 (RGBW)
#define I_8266_U0_UCS_4 53
#define I_8266_U1_UCS_4 54
#define I_8266_DM_UCS_4 55
#define I_8266_BB_UCS_4 56
/*** ESP32 Neopixel methods ***/ /*** ESP32 Neopixel methods ***/
//RGB //RGB
@ -80,6 +90,16 @@
#define I_32_I0_TM2_3 37 #define I_32_I0_TM2_3 37
#define I_32_I1_TM2_3 38 #define I_32_I1_TM2_3 38
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S) //Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
//UCS8903 (RGB)
#define I_32_RN_UCS_3 57
#define I_32_I0_UCS_3 58
#define I_32_I1_UCS_3 59
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
//UCS8904 (RGBW)
#define I_32_RN_UCS_4 60
#define I_32_I0_UCS_4 61
#define I_32_I1_UCS_4 62
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
//APA102 //APA102
#define I_HS_DOT_3 39 //hardware SPI #define I_HS_DOT_3 39 //hardware SPI
@ -105,77 +125,105 @@
/*** ESP8266 Neopixel methods ***/ /*** ESP8266 Neopixel methods ***/
#ifdef ESP8266 #ifdef ESP8266
//RGB //RGB
#define B_8266_U0_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Uart0Ws2813Method> //3 chan, esp8266, gpio1 #define B_8266_U0_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Uart0Ws2813Method, NeoGammaNullMethod> //3 chan, esp8266, gpio1
#define B_8266_U1_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Uart1Ws2813Method> //3 chan, esp8266, gpio2 #define B_8266_U1_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Uart1Ws2813Method, NeoGammaNullMethod> //3 chan, esp8266, gpio2
#define B_8266_DM_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Dma800KbpsMethod> //3 chan, esp8266, gpio3 #define B_8266_DM_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Dma800KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, gpio3
#define B_8266_BB_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266BitBang800KbpsMethod> //3 chan, esp8266, bb (any pin but 16) #define B_8266_BB_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266BitBang800KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, bb (any pin but 16)
//RGBW //RGBW
#define B_8266_U0_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp8266Uart0Ws2813Method> //4 chan, esp8266, gpio1 #define B_8266_U0_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp8266Uart0Ws2813Method, NeoGammaNullMethod> //4 chan, esp8266, gpio1
#define B_8266_U1_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp8266Uart1Ws2813Method> //4 chan, esp8266, gpio2 #define B_8266_U1_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp8266Uart1Ws2813Method, NeoGammaNullMethod> //4 chan, esp8266, gpio2
#define B_8266_DM_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp8266Dma800KbpsMethod> //4 chan, esp8266, gpio3 #define B_8266_DM_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp8266Dma800KbpsMethod, NeoGammaNullMethod> //4 chan, esp8266, gpio3
#define B_8266_BB_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp8266BitBang800KbpsMethod> //4 chan, esp8266, bb (any pin) #define B_8266_BB_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp8266BitBang800KbpsMethod, NeoGammaNullMethod> //4 chan, esp8266, bb (any pin)
//400Kbps //400Kbps
#define B_8266_U0_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Uart0400KbpsMethod> //3 chan, esp8266, gpio1 #define B_8266_U0_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Uart0400KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, gpio1
#define B_8266_U1_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Uart1400KbpsMethod> //3 chan, esp8266, gpio2 #define B_8266_U1_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Uart1400KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, gpio2
#define B_8266_DM_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Dma400KbpsMethod> //3 chan, esp8266, gpio3 #define B_8266_DM_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Dma400KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, gpio3
#define B_8266_BB_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266BitBang400KbpsMethod> //3 chan, esp8266, bb (any pin) #define B_8266_BB_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266BitBang400KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, bb (any pin)
//TM1814 (RGBW) //TM1814 (RGBW)
#define B_8266_U0_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp8266Uart0Tm1814Method> #define B_8266_U0_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp8266Uart0Tm1814Method, NeoGammaNullMethod>
#define B_8266_U1_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp8266Uart1Tm1814Method> #define B_8266_U1_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp8266Uart1Tm1814Method, NeoGammaNullMethod>
#define B_8266_DM_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp8266DmaTm1814Method> #define B_8266_DM_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp8266DmaTm1814Method, NeoGammaNullMethod>
#define B_8266_BB_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp8266BitBangTm1814Method> #define B_8266_BB_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp8266BitBangTm1814Method, NeoGammaNullMethod>
//TM1829 (RGB) //TM1829 (RGB)
#define B_8266_U0_TM2_4 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp8266Uart0Tm1829Method> #define B_8266_U0_TM2_4 NeoPixelBusLg<NeoBrgFeature, NeoEsp8266Uart0Tm1829Method, NeoGammaNullMethod>
#define B_8266_U1_TM2_4 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp8266Uart1Tm1829Method> #define B_8266_U1_TM2_4 NeoPixelBusLg<NeoBrgFeature, NeoEsp8266Uart1Tm1829Method, NeoGammaNullMethod>
#define B_8266_DM_TM2_4 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp8266DmaTm1829Method> #define B_8266_DM_TM2_4 NeoPixelBusLg<NeoBrgFeature, NeoEsp8266DmaTm1829Method, NeoGammaNullMethod>
#define B_8266_BB_TM2_4 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp8266BitBangTm1829Method> #define B_8266_BB_TM2_4 NeoPixelBusLg<NeoBrgFeature, NeoEsp8266BitBangTm1829Method, NeoGammaNullMethod>
//UCS8903
#define B_8266_U0_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp8266Uart0Ws2813Method, NeoGammaNullMethod> //3 chan, esp8266, gpio1
#define B_8266_U1_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp8266Uart1Ws2813Method, NeoGammaNullMethod> //3 chan, esp8266, gpio2
#define B_8266_DM_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp8266Dma800KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, gpio3
#define B_8266_BB_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp8266BitBang800KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, bb (any pin but 16)
//UCS8904 RGBW
#define B_8266_U0_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp8266Uart0Ws2813Method, NeoGammaNullMethod> //4 chan, esp8266, gpio1
#define B_8266_U1_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp8266Uart1Ws2813Method, NeoGammaNullMethod> //4 chan, esp8266, gpio2
#define B_8266_DM_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp8266Dma800KbpsMethod, NeoGammaNullMethod> //4 chan, esp8266, gpio3
#define B_8266_BB_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp8266BitBang800KbpsMethod, NeoGammaNullMethod> //4 chan, esp8266, bb (any pin)
#endif #endif
/*** ESP32 Neopixel methods ***/ /*** ESP32 Neopixel methods ***/
#ifdef ARDUINO_ARCH_ESP32 #ifdef ARDUINO_ARCH_ESP32
//RGB //RGB
#define B_32_RN_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32RmtNWs2812xMethod> #define B_32_RN_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32RmtNWs2812xMethod, NeoGammaNullMethod>
#ifndef WLED_NO_I2S0_PIXELBUS #ifndef WLED_NO_I2S0_PIXELBUS
#define B_32_I0_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s0800KbpsMethod> #define B_32_I0_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32I2s0800KbpsMethod, NeoGammaNullMethod>
#endif #endif
#ifndef WLED_NO_I2S1_PIXELBUS #ifndef WLED_NO_I2S1_PIXELBUS
#define B_32_I1_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s1800KbpsMethod> #define B_32_I1_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32I2s1800KbpsMethod, NeoGammaNullMethod>
#endif #endif
//#define B_32_BB_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32BitBang800KbpsMethod> // NeoEsp8266BitBang800KbpsMethod //#define B_32_BB_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32BitBang800KbpsMethod, NeoGammaNullMethod> // NeoEsp8266BitBang800KbpsMethod
//RGBW //RGBW
#define B_32_RN_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp32RmtNWs2812xMethod> #define B_32_RN_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp32RmtNWs2812xMethod, NeoGammaNullMethod>
#ifndef WLED_NO_I2S0_PIXELBUS #ifndef WLED_NO_I2S0_PIXELBUS
#define B_32_I0_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp32I2s0800KbpsMethod> #define B_32_I0_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp32I2s0800KbpsMethod, NeoGammaNullMethod>
#endif #endif
#ifndef WLED_NO_I2S1_PIXELBUS #ifndef WLED_NO_I2S1_PIXELBUS
#define B_32_I1_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp32I2s1800KbpsMethod> #define B_32_I1_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp32I2s1800KbpsMethod, NeoGammaNullMethod>
#endif #endif
//#define B_32_BB_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp32BitBang800KbpsMethod> // NeoEsp8266BitBang800KbpsMethod //#define B_32_BB_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp32BitBang800KbpsMethod, NeoGammaNullMethod> // NeoEsp8266BitBang800KbpsMethod
//400Kbps //400Kbps
#define B_32_RN_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32RmtN400KbpsMethod> #define B_32_RN_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32RmtN400KbpsMethod, NeoGammaNullMethod>
#ifndef WLED_NO_I2S0_PIXELBUS #ifndef WLED_NO_I2S0_PIXELBUS
#define B_32_I0_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s0400KbpsMethod> #define B_32_I0_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32I2s0400KbpsMethod, NeoGammaNullMethod>
#endif #endif
#ifndef WLED_NO_I2S1_PIXELBUS #ifndef WLED_NO_I2S1_PIXELBUS
#define B_32_I1_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s1400KbpsMethod> #define B_32_I1_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32I2s1400KbpsMethod, NeoGammaNullMethod>
#endif #endif
//#define B_32_BB_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32BitBang400KbpsMethod> // NeoEsp8266BitBang400KbpsMethod //#define B_32_BB_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32BitBang400KbpsMethod, NeoGammaNullMethod> // NeoEsp8266BitBang400KbpsMethod
//TM1814 (RGBW) //TM1814 (RGBW)
#define B_32_RN_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp32RmtNTm1814Method> #define B_32_RN_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp32RmtNTm1814Method, NeoGammaNullMethod>
#ifndef WLED_NO_I2S0_PIXELBUS #ifndef WLED_NO_I2S0_PIXELBUS
#define B_32_I0_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp32I2s0Tm1814Method> #define B_32_I0_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp32I2s0Tm1814Method, NeoGammaNullMethod>
#endif #endif
#ifndef WLED_NO_I2S1_PIXELBUS #ifndef WLED_NO_I2S1_PIXELBUS
#define B_32_I1_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp32I2s1Tm1814Method> #define B_32_I1_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp32I2s1Tm1814Method, NeoGammaNullMethod>
#endif #endif
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S) //Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
//TM1829 (RGB) //TM1829 (RGB)
#define B_32_RN_TM2_3 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp32RmtNTm1829Method> #define B_32_RN_TM2_3 NeoPixelBusLg<NeoBrgFeature, NeoEsp32RmtNTm1829Method, NeoGammaNullMethod>
#ifndef WLED_NO_I2S0_PIXELBUS #ifndef WLED_NO_I2S0_PIXELBUS
#define B_32_I0_TM2_3 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp32I2s0Tm1829Method> #define B_32_I0_TM2_3 NeoPixelBusLg<NeoBrgFeature, NeoEsp32I2s0Tm1829Method, NeoGammaNullMethod>
#endif #endif
#ifndef WLED_NO_I2S1_PIXELBUS #ifndef WLED_NO_I2S1_PIXELBUS
#define B_32_I1_TM2_3 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp32I2s1Tm1829Method> #define B_32_I1_TM2_3 NeoPixelBusLg<NeoBrgFeature, NeoEsp32I2s1Tm1829Method, NeoGammaNullMethod>
#endif
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
//UCS8903
#define B_32_RN_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp32RmtNWs2812xMethod, NeoGammaNullMethod>
#ifndef WLED_NO_I2S0_PIXELBUS
#define B_32_I0_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp32I2s0800KbpsMethod, NeoGammaNullMethod>
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
#define B_32_I1_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp32I2s1800KbpsMethod, NeoGammaNullMethod>
#endif
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
//UCS8904
#define B_32_RN_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp32RmtNWs2812xMethod, NeoGammaNullMethod>
#ifndef WLED_NO_I2S0_PIXELBUS
#define B_32_I0_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp32I2s0800KbpsMethod, NeoGammaNullMethod>
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
#define B_32_I1_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp32I2s1800KbpsMethod, NeoGammaNullMethod>
#endif #endif
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S) //Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
@ -184,45 +232,47 @@
//APA102 //APA102
#ifdef WLED_USE_ETHERNET #ifdef WLED_USE_ETHERNET
// fix for #2542 (by @BlackBird77) // fix for #2542 (by @BlackBird77)
#define B_HS_DOT_3 NeoPixelBrightnessBus<DotStarBgrFeature, DotStarHspi5MhzMethod> //hardware HSPI (was DotStarEsp32DmaHspi5MhzMethod in NPB 2.6.9) #define B_HS_DOT_3 NeoPixelBusLg<DotStarBgrFeature, DotStarEsp32HspiHzMethod, NeoGammaNullMethod> //hardware HSPI (was DotStarEsp32DmaHspi5MhzMethod in NPB @ 2.6.9)
#else #else
#define B_HS_DOT_3 NeoPixelBrightnessBus<DotStarBgrFeature, DotStarSpi5MhzMethod> //hardware VSPI #define B_HS_DOT_3 NeoPixelBusLg<DotStarBgrFeature, DotStarSpiHzMethod, NeoGammaNullMethod> //hardware VSPI
#endif #endif
#define B_SS_DOT_3 NeoPixelBrightnessBus<DotStarBgrFeature, DotStarMethod> //soft SPI #define B_SS_DOT_3 NeoPixelBusLg<DotStarBgrFeature, DotStarMethod, NeoGammaNullMethod> //soft SPI
//LPD8806 //LPD8806
#define B_HS_LPD_3 NeoPixelBrightnessBus<Lpd8806GrbFeature, Lpd8806SpiMethod> #define B_HS_LPD_3 NeoPixelBusLg<Lpd8806GrbFeature, Lpd8806SpiHzMethod, NeoGammaNullMethod>
#define B_SS_LPD_3 NeoPixelBrightnessBus<Lpd8806GrbFeature, Lpd8806Method> #define B_SS_LPD_3 NeoPixelBusLg<Lpd8806GrbFeature, Lpd8806Method, NeoGammaNullMethod>
//LPD6803 //LPD6803
#define B_HS_LPO_3 NeoPixelBrightnessBus<Lpd6803GrbFeature, Lpd6803SpiMethod> #define B_HS_LPO_3 NeoPixelBusLg<Lpd6803GrbFeature, Lpd6803SpiHzMethod, NeoGammaNullMethod>
#define B_SS_LPO_3 NeoPixelBrightnessBus<Lpd6803GrbFeature, Lpd6803Method> #define B_SS_LPO_3 NeoPixelBusLg<Lpd6803GrbFeature, Lpd6803Method, NeoGammaNullMethod>
//WS2801 //WS2801
#if defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==40000 #define B_HS_WS1_3 NeoPixelBusLg<NeoRbgFeature, Ws2801SpiHzMethod, NeoGammaNullMethod>
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi40MhzMethod> // fastest bus speed (not existing method?) #define B_SS_WS1_3 NeoPixelBusLg<NeoRbgFeature, Ws2801Method, NeoGammaNullMethod>
#elif defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==20000
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi20MhzMethod> // 20MHz
#elif defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==10000
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801SpiMethod> // 10MHz
#elif defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==2000
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi2MhzMethod> //slower, more compatible
#elif defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==1000
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi1MhzMethod> //slower, more compatible
#elif defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==500
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi500KhzMethod> //slower, more compatible
#else
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi2MhzMethod> // 2MHz; slower, more compatible
#endif
#define B_SS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Method>
//P9813 //P9813
#define B_HS_P98_3 NeoPixelBrightnessBus<P9813BgrFeature, P9813SpiMethod> #define B_HS_P98_3 NeoPixelBusLg<P9813BgrFeature, P9813SpiHzMethod, NeoGammaNullMethod>
#define B_SS_P98_3 NeoPixelBrightnessBus<P9813BgrFeature, P9813Method> #define B_SS_P98_3 NeoPixelBusLg<P9813BgrFeature, P9813Method, NeoGammaNullMethod>
// 48bit & 64bit to 24bit & 32bit RGB(W) conversion
#define toRGBW32(c) (RGBW32((c>>40)&0xFF, (c>>24)&0xFF, (c>>8)&0xFF, (c>>56)&0xFF))
#define RGBW32(r,g,b,w) (uint32_t((byte(w) << 24) | (byte(r) << 16) | (byte(g) << 8) | (byte(b))))
//handles pointer type conversion for all possible bus types //handles pointer type conversion for all possible bus types
class PolyBus { class PolyBus {
public: public:
// initialize SPI bus speed for DotStar methods
template <class T>
static void beginDotStar(void* busPtr, int8_t sck, int8_t miso, int8_t mosi, int8_t ss, uint16_t clock_kHz = 0U) {
T dotStar_strip = static_cast<T>(busPtr);
#ifdef ESP8266
dotStar_strip->Begin();
#else
if (sck == -1 && mosi == -1) dotStar_strip->Begin();
else dotStar_strip->Begin(sck, miso, mosi, ss);
#endif
if (clock_kHz) dotStar_strip->SetMethodSettings(NeoSpiSettings((uint32_t)clock_kHz*1000));
}
// Begin & initialize the PixelSettings for TM1814 strips. // Begin & initialize the PixelSettings for TM1814 strips.
template <class T> template <class T>
static void beginTM1814(void* busPtr) { static void beginTM1814(void* busPtr) {
@ -231,7 +281,7 @@ class PolyBus {
// Max current for each LED (22.5 mA). // Max current for each LED (22.5 mA).
tm1814_strip->SetPixelSettings(NeoTm1814Settings(/*R*/225, /*G*/225, /*B*/225, /*W*/225)); tm1814_strip->SetPixelSettings(NeoTm1814Settings(/*R*/225, /*G*/225, /*B*/225, /*W*/225));
} }
static void begin(void* busPtr, uint8_t busType, uint8_t* pins) { static void begin(void* busPtr, uint8_t busType, uint8_t* pins, uint16_t clock_kHz = 0U) {
switch (busType) { switch (busType) {
case I_NONE: break; case I_NONE: break;
#ifdef ESP8266 #ifdef ESP8266
@ -255,11 +305,19 @@ class PolyBus {
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->Begin(); break; case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->Begin(); break;
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->Begin(); break; case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->Begin(); break;
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->Begin(); break; case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->Begin(); break;
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->Begin(); break; case I_HS_DOT_3: beginDotStar<B_HS_DOT_3*>(busPtr, -1, -1, -1, -1, clock_kHz); break;
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->Begin(); break; case I_HS_LPD_3: beginDotStar<B_HS_LPD_3*>(busPtr, -1, -1, -1, -1, clock_kHz); break;
case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->Begin(); break; case I_HS_LPO_3: beginDotStar<B_HS_LPO_3*>(busPtr, -1, -1, -1, -1, clock_kHz); break;
case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->Begin(); break; case I_HS_WS1_3: beginDotStar<B_HS_WS1_3*>(busPtr, -1, -1, -1, -1, clock_kHz); break;
case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->Begin(); break; case I_HS_P98_3: beginDotStar<B_HS_P98_3*>(busPtr, -1, -1, -1, -1, clock_kHz); break;
case I_8266_U0_UCS_3: (static_cast<B_8266_U0_UCS_3*>(busPtr))->Begin(); break;
case I_8266_U1_UCS_3: (static_cast<B_8266_U1_UCS_3*>(busPtr))->Begin(); break;
case I_8266_DM_UCS_3: (static_cast<B_8266_DM_UCS_3*>(busPtr))->Begin(); break;
case I_8266_BB_UCS_3: (static_cast<B_8266_BB_UCS_3*>(busPtr))->Begin(); break;
case I_8266_U0_UCS_4: (static_cast<B_8266_U0_UCS_4*>(busPtr))->Begin(); break;
case I_8266_U1_UCS_4: (static_cast<B_8266_U1_UCS_4*>(busPtr))->Begin(); break;
case I_8266_DM_UCS_4: (static_cast<B_8266_DM_UCS_4*>(busPtr))->Begin(); break;
case I_8266_BB_UCS_4: (static_cast<B_8266_BB_UCS_4*>(busPtr))->Begin(); break;
#endif #endif
#ifdef ARDUINO_ARCH_ESP32 #ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->Begin(); break; case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->Begin(); break;
@ -296,12 +354,28 @@ class PolyBus {
case I_32_I1_TM1_4: beginTM1814<B_32_I1_TM1_4*>(busPtr); break; case I_32_I1_TM1_4: beginTM1814<B_32_I1_TM1_4*>(busPtr); break;
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->Begin(); break; case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->Begin(); break;
#endif #endif
case I_32_RN_UCS_3: (static_cast<B_32_RN_UCS_3*>(busPtr))->Begin(); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_3: (static_cast<B_32_I0_UCS_3*>(busPtr))->Begin(); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_3: (static_cast<B_32_I1_UCS_3*>(busPtr))->Begin(); break;
#endif
// case I_32_BB_UCS_3: (static_cast<B_32_BB_UCS_3*>(busPtr))->Begin(); break;
case I_32_RN_UCS_4: (static_cast<B_32_RN_UCS_4*>(busPtr))->Begin(); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_4: (static_cast<B_32_I0_UCS_4*>(busPtr))->Begin(); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_4: (static_cast<B_32_I1_UCS_4*>(busPtr))->Begin(); break;
#endif
// case I_32_BB_UCS_4: (static_cast<B_32_BB_UCS_4*>(busPtr))->Begin(); break;
// ESP32 can (and should, to avoid inadvertantly driving the chip select signal) specify the pins used for SPI, but only in begin() // ESP32 can (and should, to avoid inadvertantly driving the chip select signal) specify the pins used for SPI, but only in begin()
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->Begin(pins[1], -1, pins[0], -1); break; case I_HS_DOT_3: beginDotStar<B_HS_DOT_3*>(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break;
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->Begin(pins[1], -1, pins[0], -1); break; case I_HS_LPD_3: beginDotStar<B_HS_LPD_3*>(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break;
case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->Begin(pins[1], -1, pins[0], -1); break; case I_HS_LPO_3: beginDotStar<B_HS_LPO_3*>(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break;
case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->Begin(pins[1], -1, pins[0], -1); break; case I_HS_WS1_3: beginDotStar<B_HS_WS1_3*>(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break;
case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->Begin(pins[1], -1, pins[0], -1); break; case I_HS_P98_3: beginDotStar<B_HS_P98_3*>(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break;
#endif #endif
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->Begin(); break; case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->Begin(); break;
case I_SS_LPD_3: (static_cast<B_SS_LPD_3*>(busPtr))->Begin(); break; case I_SS_LPD_3: (static_cast<B_SS_LPD_3*>(busPtr))->Begin(); break;
@ -310,7 +384,7 @@ class PolyBus {
case I_SS_P98_3: (static_cast<B_SS_P98_3*>(busPtr))->Begin(); break; case I_SS_P98_3: (static_cast<B_SS_P98_3*>(busPtr))->Begin(); break;
} }
}; };
static void* create(uint8_t busType, uint8_t* pins, uint16_t len, uint8_t channel) { static void* create(uint8_t busType, uint8_t* pins, uint16_t len, uint8_t channel, uint16_t clock_kHz = 0U) {
void* busPtr = nullptr; void* busPtr = nullptr;
switch (busType) { switch (busType) {
case I_NONE: break; case I_NONE: break;
@ -335,6 +409,14 @@ class PolyBus {
case I_8266_U1_TM2_3: busPtr = new B_8266_U1_TM2_4(len, pins[0]); break; case I_8266_U1_TM2_3: busPtr = new B_8266_U1_TM2_4(len, pins[0]); break;
case I_8266_DM_TM2_3: busPtr = new B_8266_DM_TM2_4(len, pins[0]); break; case I_8266_DM_TM2_3: busPtr = new B_8266_DM_TM2_4(len, pins[0]); break;
case I_8266_BB_TM2_3: busPtr = new B_8266_BB_TM2_4(len, pins[0]); break; case I_8266_BB_TM2_3: busPtr = new B_8266_BB_TM2_4(len, pins[0]); break;
case I_8266_U0_UCS_3: busPtr = new B_8266_U0_UCS_3(len, pins[0]); break;
case I_8266_U1_UCS_3: busPtr = new B_8266_U1_UCS_3(len, pins[0]); break;
case I_8266_DM_UCS_3: busPtr = new B_8266_DM_UCS_3(len, pins[0]); break;
case I_8266_BB_UCS_3: busPtr = new B_8266_BB_UCS_3(len, pins[0]); break;
case I_8266_U0_UCS_4: busPtr = new B_8266_U0_UCS_4(len, pins[0]); break;
case I_8266_U1_UCS_4: busPtr = new B_8266_U1_UCS_4(len, pins[0]); break;
case I_8266_DM_UCS_4: busPtr = new B_8266_DM_UCS_4(len, pins[0]); break;
case I_8266_BB_UCS_4: busPtr = new B_8266_BB_UCS_4(len, pins[0]); break;
#endif #endif
#ifdef ARDUINO_ARCH_ESP32 #ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: busPtr = new B_32_RN_NEO_3(len, pins[0], (NeoBusChannel)channel); break; case I_32_RN_NEO_3: busPtr = new B_32_RN_NEO_3(len, pins[0], (NeoBusChannel)channel); break;
@ -371,6 +453,22 @@ class PolyBus {
case I_32_I1_TM1_4: busPtr = new B_32_I1_TM1_4(len, pins[0]); break; case I_32_I1_TM1_4: busPtr = new B_32_I1_TM1_4(len, pins[0]); break;
case I_32_I1_TM2_3: busPtr = new B_32_I1_TM2_3(len, pins[0]); break; case I_32_I1_TM2_3: busPtr = new B_32_I1_TM2_3(len, pins[0]); break;
#endif #endif
case I_32_RN_UCS_3: busPtr = new B_32_RN_UCS_3(len, pins[0], (NeoBusChannel)channel); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_3: busPtr = new B_32_I0_UCS_3(len, pins[0]); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_3: busPtr = new B_32_I1_UCS_3(len, pins[0]); break;
#endif
// case I_32_BB_UCS_3: busPtr = new B_32_BB_UCS_3(len, pins[0], (NeoBusChannel)channel); break;
case I_32_RN_UCS_4: busPtr = new B_32_RN_UCS_4(len, pins[0], (NeoBusChannel)channel); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_4: busPtr = new B_32_I0_UCS_4(len, pins[0]); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_4: busPtr = new B_32_I1_UCS_4(len, pins[0]); break;
#endif
// case I_32_BB_UCS_4: busPtr = new B_32_BB_UCS_4(len, pins[0], (NeoBusChannel)channel); break;
#endif #endif
// for 2-wire: pins[1] is clk, pins[0] is dat. begin expects (len, clk, dat) // for 2-wire: pins[1] is clk, pins[0] is dat. begin expects (len, clk, dat)
case I_HS_DOT_3: busPtr = new B_HS_DOT_3(len, pins[1], pins[0]); break; case I_HS_DOT_3: busPtr = new B_HS_DOT_3(len, pins[1], pins[0]); break;
@ -384,7 +482,7 @@ class PolyBus {
case I_HS_P98_3: busPtr = new B_HS_P98_3(len, pins[1], pins[0]); break; case I_HS_P98_3: busPtr = new B_HS_P98_3(len, pins[1], pins[0]); break;
case I_SS_P98_3: busPtr = new B_SS_P98_3(len, pins[1], pins[0]); break; case I_SS_P98_3: busPtr = new B_SS_P98_3(len, pins[1], pins[0]); break;
} }
begin(busPtr, busType, pins); begin(busPtr, busType, pins, clock_kHz);
return busPtr; return busPtr;
}; };
static void show(void* busPtr, uint8_t busType) { static void show(void* busPtr, uint8_t busType) {
@ -411,6 +509,14 @@ class PolyBus {
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->Show(); break; case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->Show(); break;
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->Show(); break; case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->Show(); break;
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->Show(); break; case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->Show(); break;
case I_8266_U0_UCS_3: (static_cast<B_8266_U0_UCS_3*>(busPtr))->Show(); break;
case I_8266_U1_UCS_3: (static_cast<B_8266_U1_UCS_3*>(busPtr))->Show(); break;
case I_8266_DM_UCS_3: (static_cast<B_8266_DM_UCS_3*>(busPtr))->Show(); break;
case I_8266_BB_UCS_3: (static_cast<B_8266_BB_UCS_3*>(busPtr))->Show(); break;
case I_8266_U0_UCS_4: (static_cast<B_8266_U0_UCS_4*>(busPtr))->Show(); break;
case I_8266_U1_UCS_4: (static_cast<B_8266_U1_UCS_4*>(busPtr))->Show(); break;
case I_8266_DM_UCS_4: (static_cast<B_8266_DM_UCS_4*>(busPtr))->Show(); break;
case I_8266_BB_UCS_4: (static_cast<B_8266_BB_UCS_4*>(busPtr))->Show(); break;
#endif #endif
#ifdef ARDUINO_ARCH_ESP32 #ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->Show(); break; case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->Show(); break;
@ -447,6 +553,22 @@ class PolyBus {
case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->Show(); break; case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->Show(); break;
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->Show(); break; case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->Show(); break;
#endif #endif
case I_32_RN_UCS_3: (static_cast<B_32_RN_UCS_3*>(busPtr))->Show(); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_3: (static_cast<B_32_I0_UCS_3*>(busPtr))->Show(); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_3: (static_cast<B_32_I1_UCS_3*>(busPtr))->Show(); break;
#endif
// case I_32_BB_UCS_3: (static_cast<B_32_BB_NEO_3*>(busPtr))->Show(); break;
case I_32_RN_UCS_4: (static_cast<B_32_RN_UCS_4*>(busPtr))->Show(); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_4: (static_cast<B_32_I0_UCS_4*>(busPtr))->Show(); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_4: (static_cast<B_32_I1_UCS_4*>(busPtr))->Show(); break;
#endif
// case I_32_BB_UCS_4: (static_cast<B_32_BB_UCS_4*>(busPtr))->Show(); break;
#endif #endif
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->Show(); break; case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->Show(); break;
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->Show(); break; case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->Show(); break;
@ -484,6 +606,13 @@ class PolyBus {
case I_8266_U1_TM2_3: return (static_cast<B_8266_U1_TM2_4*>(busPtr))->CanShow(); break; case I_8266_U1_TM2_3: return (static_cast<B_8266_U1_TM2_4*>(busPtr))->CanShow(); break;
case I_8266_DM_TM2_3: return (static_cast<B_8266_DM_TM2_4*>(busPtr))->CanShow(); break; case I_8266_DM_TM2_3: return (static_cast<B_8266_DM_TM2_4*>(busPtr))->CanShow(); break;
case I_8266_BB_TM2_3: return (static_cast<B_8266_BB_TM2_4*>(busPtr))->CanShow(); break; case I_8266_BB_TM2_3: return (static_cast<B_8266_BB_TM2_4*>(busPtr))->CanShow(); break;
case I_8266_U0_UCS_3: return (static_cast<B_8266_U0_UCS_3*>(busPtr))->CanShow(); break;
case I_8266_U1_UCS_3: return (static_cast<B_8266_U1_UCS_3*>(busPtr))->CanShow(); break;
case I_8266_DM_UCS_3: return (static_cast<B_8266_DM_UCS_3*>(busPtr))->CanShow(); break;
case I_8266_BB_UCS_3: return (static_cast<B_8266_BB_UCS_3*>(busPtr))->CanShow(); break;
case I_8266_U0_UCS_4: return (static_cast<B_8266_U0_UCS_4*>(busPtr))->CanShow(); break;
case I_8266_U1_UCS_4: return (static_cast<B_8266_U1_UCS_4*>(busPtr))->CanShow(); break;
case I_8266_DM_UCS_4: return (static_cast<B_8266_DM_UCS_4*>(busPtr))->CanShow(); break;
#endif #endif
#ifdef ARDUINO_ARCH_ESP32 #ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: return (static_cast<B_32_RN_NEO_3*>(busPtr))->CanShow(); break; case I_32_RN_NEO_3: return (static_cast<B_32_RN_NEO_3*>(busPtr))->CanShow(); break;
@ -520,6 +649,22 @@ class PolyBus {
case I_32_I1_TM1_4: return (static_cast<B_32_I1_TM1_4*>(busPtr))->CanShow(); break; case I_32_I1_TM1_4: return (static_cast<B_32_I1_TM1_4*>(busPtr))->CanShow(); break;
case I_32_I1_TM2_3: return (static_cast<B_32_I1_TM2_3*>(busPtr))->CanShow(); break; case I_32_I1_TM2_3: return (static_cast<B_32_I1_TM2_3*>(busPtr))->CanShow(); break;
#endif #endif
case I_32_RN_UCS_3: return (static_cast<B_32_RN_UCS_3*>(busPtr))->CanShow(); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_3: return (static_cast<B_32_I0_UCS_3*>(busPtr))->CanShow(); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_3: return (static_cast<B_32_I1_UCS_3*>(busPtr))->CanShow(); break;
#endif
// case I_32_BB_UCS_3: return (static_cast<B_32_BB_UCS_3*>(busPtr))->CanShow(); break;
case I_32_RN_UCS_4: return (static_cast<B_32_RN_UCS_4*>(busPtr))->CanShow(); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_4: return (static_cast<B_32_I0_UCS_4*>(busPtr))->CanShow(); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_4: return (static_cast<B_32_I1_UCS_4*>(busPtr))->CanShow(); break;
#endif
// case I_32_BB_UCS_4: return (static_cast<B_32_BB_UCS_4*>(busPtr))->CanShow(); break;
#endif #endif
case I_HS_DOT_3: return (static_cast<B_HS_DOT_3*>(busPtr))->CanShow(); break; case I_HS_DOT_3: return (static_cast<B_HS_DOT_3*>(busPtr))->CanShow(); break;
case I_SS_DOT_3: return (static_cast<B_SS_DOT_3*>(busPtr))->CanShow(); break; case I_SS_DOT_3: return (static_cast<B_SS_DOT_3*>(busPtr))->CanShow(); break;
@ -561,36 +706,44 @@ class PolyBus {
switch (busType) { switch (busType) {
case I_NONE: break; case I_NONE: break;
#ifdef ESP8266 #ifdef ESP8266
case I_8266_U0_NEO_3: (static_cast<B_8266_U0_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_8266_U0_NEO_3: (static_cast<B_8266_U0_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_U1_NEO_3: (static_cast<B_8266_U1_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_8266_U1_NEO_3: (static_cast<B_8266_U1_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_DM_NEO_3: (static_cast<B_8266_DM_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_8266_DM_NEO_3: (static_cast<B_8266_DM_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_BB_NEO_3: (static_cast<B_8266_BB_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_8266_BB_NEO_3: (static_cast<B_8266_BB_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_U0_NEO_4: (static_cast<B_8266_U0_NEO_4*>(busPtr))->SetPixelColor(pix, col); break; case I_8266_U0_NEO_4: (static_cast<B_8266_U0_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_8266_U1_NEO_4: (static_cast<B_8266_U1_NEO_4*>(busPtr))->SetPixelColor(pix, col); break; case I_8266_U1_NEO_4: (static_cast<B_8266_U1_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_8266_DM_NEO_4: (static_cast<B_8266_DM_NEO_4*>(busPtr))->SetPixelColor(pix, col); break; case I_8266_DM_NEO_4: (static_cast<B_8266_DM_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_8266_BB_NEO_4: (static_cast<B_8266_BB_NEO_4*>(busPtr))->SetPixelColor(pix, col); break; case I_8266_BB_NEO_4: (static_cast<B_8266_BB_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_8266_U0_400_3: (static_cast<B_8266_U0_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_8266_U0_400_3: (static_cast<B_8266_U0_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_U1_400_3: (static_cast<B_8266_U1_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_8266_U1_400_3: (static_cast<B_8266_U1_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_DM_400_3: (static_cast<B_8266_DM_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_8266_DM_400_3: (static_cast<B_8266_DM_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_BB_400_3: (static_cast<B_8266_BB_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_8266_BB_400_3: (static_cast<B_8266_BB_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_U0_TM1_4: (static_cast<B_8266_U0_TM1_4*>(busPtr))->SetPixelColor(pix, col); break; case I_8266_U0_TM1_4: (static_cast<B_8266_U0_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_8266_U1_TM1_4: (static_cast<B_8266_U1_TM1_4*>(busPtr))->SetPixelColor(pix, col); break; case I_8266_U1_TM1_4: (static_cast<B_8266_U1_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_8266_DM_TM1_4: (static_cast<B_8266_DM_TM1_4*>(busPtr))->SetPixelColor(pix, col); break; case I_8266_DM_TM1_4: (static_cast<B_8266_DM_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_8266_BB_TM1_4: (static_cast<B_8266_BB_TM1_4*>(busPtr))->SetPixelColor(pix, col); break; case I_8266_BB_TM1_4: (static_cast<B_8266_BB_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_8266_U0_TM2_3: (static_cast<B_8266_U0_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_8266_U0_TM2_3: (static_cast<B_8266_U0_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_U0_UCS_3: (static_cast<B_8266_U0_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
case I_8266_U1_UCS_3: (static_cast<B_8266_U1_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
case I_8266_DM_UCS_3: (static_cast<B_8266_DM_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
case I_8266_BB_UCS_3: (static_cast<B_8266_BB_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
case I_8266_U0_UCS_4: (static_cast<B_8266_U0_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
case I_8266_U1_UCS_4: (static_cast<B_8266_U1_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
case I_8266_DM_UCS_4: (static_cast<B_8266_DM_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
case I_8266_BB_UCS_4: (static_cast<B_8266_BB_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
#endif #endif
#ifdef ARDUINO_ARCH_ESP32 #ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#ifndef WLED_NO_I2S0_PIXELBUS #ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_NEO_3: (static_cast<B_32_I0_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_32_I0_NEO_3: (static_cast<B_32_I0_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#endif #endif
#ifndef WLED_NO_I2S1_PIXELBUS #ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_NEO_3: (static_cast<B_32_I1_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_32_I1_NEO_3: (static_cast<B_32_I1_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#endif #endif
// case I_32_BB_NEO_3: (static_cast<B_32_BB_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; // case I_32_BB_NEO_3: (static_cast<B_32_BB_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_32_RN_NEO_4: (static_cast<B_32_RN_NEO_4*>(busPtr))->SetPixelColor(pix, col); break; case I_32_RN_NEO_4: (static_cast<B_32_RN_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
#ifndef WLED_NO_I2S0_PIXELBUS #ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_NEO_4: (static_cast<B_32_I0_NEO_4*>(busPtr))->SetPixelColor(pix, col); break; case I_32_I0_NEO_4: (static_cast<B_32_I0_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
@ -599,108 +752,148 @@ class PolyBus {
case I_32_I1_NEO_4: (static_cast<B_32_I1_NEO_4*>(busPtr))->SetPixelColor(pix, col); break; case I_32_I1_NEO_4: (static_cast<B_32_I1_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
#endif #endif
// case I_32_BB_NEO_4: (static_cast<B_32_BB_NEO_4*>(busPtr))->SetPixelColor(pix, col); break; // case I_32_BB_NEO_4: (static_cast<B_32_BB_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_32_RN_400_3: (static_cast<B_32_RN_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_32_RN_400_3: (static_cast<B_32_RN_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#ifndef WLED_NO_I2S0_PIXELBUS #ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_400_3: (static_cast<B_32_I0_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_32_I0_400_3: (static_cast<B_32_I0_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#endif #endif
#ifndef WLED_NO_I2S1_PIXELBUS #ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_400_3: (static_cast<B_32_I1_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_32_I1_400_3: (static_cast<B_32_I1_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#endif #endif
// case I_32_BB_400_3: (static_cast<B_32_BB_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; // case I_32_BB_400_3: (static_cast<B_32_BB_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(colB)); break;
case I_32_RN_TM1_4: (static_cast<B_32_RN_TM1_4*>(busPtr))->SetPixelColor(pix, col); break; case I_32_RN_TM1_4: (static_cast<B_32_RN_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_32_RN_TM2_3: (static_cast<B_32_RN_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_32_RN_TM2_3: (static_cast<B_32_RN_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#ifndef WLED_NO_I2S0_PIXELBUS #ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_TM1_4: (static_cast<B_32_I0_TM1_4*>(busPtr))->SetPixelColor(pix, col); break; case I_32_I0_TM1_4: (static_cast<B_32_I0_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_32_I0_TM2_3: (static_cast<B_32_I0_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_32_I0_TM2_3: (static_cast<B_32_I0_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#endif #endif
#ifndef WLED_NO_I2S1_PIXELBUS #ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->SetPixelColor(pix, col); break; case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#endif #endif
case I_32_RN_UCS_3: (static_cast<B_32_RN_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_3: (static_cast<B_32_I0_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_3: (static_cast<B_32_I1_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
#endif
// case I_32_BB_UCS_3: (static_cast<B_32_BB_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
case I_32_RN_UCS_4: (static_cast<B_32_RN_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_4: (static_cast<B_32_I0_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_4: (static_cast<B_32_I1_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
#endif
// case I_32_BB_UCS_4: (static_cast<B_32_BB_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
#endif #endif
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_SS_LPD_3: (static_cast<B_SS_LPD_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_SS_LPD_3: (static_cast<B_SS_LPD_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_SS_LPO_3: (static_cast<B_SS_LPO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_SS_LPO_3: (static_cast<B_SS_LPO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_SS_WS1_3: (static_cast<B_SS_WS1_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_SS_WS1_3: (static_cast<B_SS_WS1_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_SS_P98_3: (static_cast<B_SS_P98_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_SS_P98_3: (static_cast<B_SS_P98_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
} }
}; };
static void setBrightness(void* busPtr, uint8_t busType, uint8_t b) { static void setBrightness(void* busPtr, uint8_t busType, uint8_t b) {
switch (busType) { switch (busType) {
case I_NONE: break; case I_NONE: break;
#ifdef ESP8266 #ifdef ESP8266
case I_8266_U0_NEO_3: (static_cast<B_8266_U0_NEO_3*>(busPtr))->SetBrightness(b); break; case I_8266_U0_NEO_3: (static_cast<B_8266_U0_NEO_3*>(busPtr))->SetLuminance(b); break;
case I_8266_U1_NEO_3: (static_cast<B_8266_U1_NEO_3*>(busPtr))->SetBrightness(b); break; case I_8266_U1_NEO_3: (static_cast<B_8266_U1_NEO_3*>(busPtr))->SetLuminance(b); break;
case I_8266_DM_NEO_3: (static_cast<B_8266_DM_NEO_3*>(busPtr))->SetBrightness(b); break; case I_8266_DM_NEO_3: (static_cast<B_8266_DM_NEO_3*>(busPtr))->SetLuminance(b); break;
case I_8266_BB_NEO_3: (static_cast<B_8266_BB_NEO_3*>(busPtr))->SetBrightness(b); break; case I_8266_BB_NEO_3: (static_cast<B_8266_BB_NEO_3*>(busPtr))->SetLuminance(b); break;
case I_8266_U0_NEO_4: (static_cast<B_8266_U0_NEO_4*>(busPtr))->SetBrightness(b); break; case I_8266_U0_NEO_4: (static_cast<B_8266_U0_NEO_4*>(busPtr))->SetLuminance(b); break;
case I_8266_U1_NEO_4: (static_cast<B_8266_U1_NEO_4*>(busPtr))->SetBrightness(b); break; case I_8266_U1_NEO_4: (static_cast<B_8266_U1_NEO_4*>(busPtr))->SetLuminance(b); break;
case I_8266_DM_NEO_4: (static_cast<B_8266_DM_NEO_4*>(busPtr))->SetBrightness(b); break; case I_8266_DM_NEO_4: (static_cast<B_8266_DM_NEO_4*>(busPtr))->SetLuminance(b); break;
case I_8266_BB_NEO_4: (static_cast<B_8266_BB_NEO_4*>(busPtr))->SetBrightness(b); break; case I_8266_BB_NEO_4: (static_cast<B_8266_BB_NEO_4*>(busPtr))->SetLuminance(b); break;
case I_8266_U0_400_3: (static_cast<B_8266_U0_400_3*>(busPtr))->SetBrightness(b); break; case I_8266_U0_400_3: (static_cast<B_8266_U0_400_3*>(busPtr))->SetLuminance(b); break;
case I_8266_U1_400_3: (static_cast<B_8266_U1_400_3*>(busPtr))->SetBrightness(b); break; case I_8266_U1_400_3: (static_cast<B_8266_U1_400_3*>(busPtr))->SetLuminance(b); break;
case I_8266_DM_400_3: (static_cast<B_8266_DM_400_3*>(busPtr))->SetBrightness(b); break; case I_8266_DM_400_3: (static_cast<B_8266_DM_400_3*>(busPtr))->SetLuminance(b); break;
case I_8266_BB_400_3: (static_cast<B_8266_BB_400_3*>(busPtr))->SetBrightness(b); break; case I_8266_BB_400_3: (static_cast<B_8266_BB_400_3*>(busPtr))->SetLuminance(b); break;
case I_8266_U0_TM1_4: (static_cast<B_8266_U0_TM1_4*>(busPtr))->SetBrightness(b); break; case I_8266_U0_TM1_4: (static_cast<B_8266_U0_TM1_4*>(busPtr))->SetLuminance(b); break;
case I_8266_U1_TM1_4: (static_cast<B_8266_U1_TM1_4*>(busPtr))->SetBrightness(b); break; case I_8266_U1_TM1_4: (static_cast<B_8266_U1_TM1_4*>(busPtr))->SetLuminance(b); break;
case I_8266_DM_TM1_4: (static_cast<B_8266_DM_TM1_4*>(busPtr))->SetBrightness(b); break; case I_8266_DM_TM1_4: (static_cast<B_8266_DM_TM1_4*>(busPtr))->SetLuminance(b); break;
case I_8266_BB_TM1_4: (static_cast<B_8266_BB_TM1_4*>(busPtr))->SetBrightness(b); break; case I_8266_BB_TM1_4: (static_cast<B_8266_BB_TM1_4*>(busPtr))->SetLuminance(b); break;
case I_8266_U0_TM2_3: (static_cast<B_8266_U0_TM2_4*>(busPtr))->SetBrightness(b); break; case I_8266_U0_TM2_3: (static_cast<B_8266_U0_TM2_4*>(busPtr))->SetLuminance(b); break;
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->SetBrightness(b); break; case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->SetLuminance(b); break;
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->SetBrightness(b); break; case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->SetLuminance(b); break;
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->SetBrightness(b); break; case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->SetLuminance(b); break;
case I_8266_U0_UCS_3: (static_cast<B_8266_U0_UCS_3*>(busPtr))->SetLuminance(b); break;
case I_8266_U1_UCS_3: (static_cast<B_8266_U1_UCS_3*>(busPtr))->SetLuminance(b); break;
case I_8266_DM_UCS_3: (static_cast<B_8266_DM_UCS_3*>(busPtr))->SetLuminance(b); break;
case I_8266_BB_UCS_3: (static_cast<B_8266_BB_UCS_3*>(busPtr))->SetLuminance(b); break;
case I_8266_U0_UCS_4: (static_cast<B_8266_U0_UCS_4*>(busPtr))->SetLuminance(b); break;
case I_8266_U1_UCS_4: (static_cast<B_8266_U1_UCS_4*>(busPtr))->SetLuminance(b); break;
case I_8266_DM_UCS_4: (static_cast<B_8266_DM_UCS_4*>(busPtr))->SetLuminance(b); break;
case I_8266_BB_UCS_4: (static_cast<B_8266_BB_UCS_4*>(busPtr))->SetLuminance(b); break;
#endif #endif
#ifdef ARDUINO_ARCH_ESP32 #ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->SetBrightness(b); break; case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->SetLuminance(b); break;
#ifndef WLED_NO_I2S0_PIXELBUS #ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_NEO_3: (static_cast<B_32_I0_NEO_3*>(busPtr))->SetBrightness(b); break; case I_32_I0_NEO_3: (static_cast<B_32_I0_NEO_3*>(busPtr))->SetLuminance(b); break;
#endif #endif
#ifndef WLED_NO_I2S1_PIXELBUS #ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_NEO_3: (static_cast<B_32_I1_NEO_3*>(busPtr))->SetBrightness(b); break; case I_32_I1_NEO_3: (static_cast<B_32_I1_NEO_3*>(busPtr))->SetLuminance(b); break;
#endif #endif
// case I_32_BB_NEO_3: (static_cast<B_32_BB_NEO_3*>(busPtr))->SetBrightness(b); break; // case I_32_BB_NEO_3: (static_cast<B_32_BB_NEO_3*>(busPtr))->SetLuminance(b); break;
case I_32_RN_NEO_4: (static_cast<B_32_RN_NEO_4*>(busPtr))->SetBrightness(b); break; case I_32_RN_NEO_4: (static_cast<B_32_RN_NEO_4*>(busPtr))->SetLuminance(b); break;
#ifndef WLED_NO_I2S0_PIXELBUS #ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_NEO_4: (static_cast<B_32_I0_NEO_4*>(busPtr))->SetBrightness(b); break; case I_32_I0_NEO_4: (static_cast<B_32_I0_NEO_4*>(busPtr))->SetLuminance(b); break;
#endif #endif
#ifndef WLED_NO_I2S1_PIXELBUS #ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_NEO_4: (static_cast<B_32_I1_NEO_4*>(busPtr))->SetBrightness(b); break; case I_32_I1_NEO_4: (static_cast<B_32_I1_NEO_4*>(busPtr))->SetLuminance(b); break;
#endif #endif
// case I_32_BB_NEO_4: (static_cast<B_32_BB_NEO_4*>(busPtr))->SetBrightness(b); break; // case I_32_BB_NEO_4: (static_cast<B_32_BB_NEO_4*>(busPtr))->SetLuminance(b); break;
case I_32_RN_400_3: (static_cast<B_32_RN_400_3*>(busPtr))->SetBrightness(b); break; case I_32_RN_400_3: (static_cast<B_32_RN_400_3*>(busPtr))->SetLuminance(b); break;
#ifndef WLED_NO_I2S0_PIXELBUS #ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_400_3: (static_cast<B_32_I0_400_3*>(busPtr))->SetBrightness(b); break; case I_32_I0_400_3: (static_cast<B_32_I0_400_3*>(busPtr))->SetLuminance(b); break;
#endif #endif
#ifndef WLED_NO_I2S1_PIXELBUS #ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_400_3: (static_cast<B_32_I1_400_3*>(busPtr))->SetBrightness(b); break; case I_32_I1_400_3: (static_cast<B_32_I1_400_3*>(busPtr))->SetLuminance(b); break;
#endif #endif
// case I_32_BB_400_3: (static_cast<B_32_BB_400_3*>(busPtr))->SetBrightness(b); break; // case I_32_BB_400_3: (static_cast<B_32_BB_400_3*>(busPtr))->SetLuminance(b); break;
case I_32_RN_TM1_4: (static_cast<B_32_RN_TM1_4*>(busPtr))->SetBrightness(b); break; case I_32_RN_TM1_4: (static_cast<B_32_RN_TM1_4*>(busPtr))->SetLuminance(b); break;
case I_32_RN_TM2_3: (static_cast<B_32_RN_TM2_3*>(busPtr))->SetBrightness(b); break; case I_32_RN_TM2_3: (static_cast<B_32_RN_TM2_3*>(busPtr))->SetLuminance(b); break;
#ifndef WLED_NO_I2S0_PIXELBUS #ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_TM1_4: (static_cast<B_32_I0_TM1_4*>(busPtr))->SetBrightness(b); break; case I_32_I0_TM1_4: (static_cast<B_32_I0_TM1_4*>(busPtr))->SetLuminance(b); break;
case I_32_I0_TM2_3: (static_cast<B_32_I0_TM2_3*>(busPtr))->SetBrightness(b); break; case I_32_I0_TM2_3: (static_cast<B_32_I0_TM2_3*>(busPtr))->SetLuminance(b); break;
#endif #endif
#ifndef WLED_NO_I2S1_PIXELBUS #ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->SetBrightness(b); break; case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->SetLuminance(b); break;
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->SetBrightness(b); break; case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->SetLuminance(b); break;
#endif #endif
case I_32_RN_UCS_3: (static_cast<B_32_RN_UCS_3*>(busPtr))->SetLuminance(b); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_3: (static_cast<B_32_I0_UCS_3*>(busPtr))->SetLuminance(b); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_3: (static_cast<B_32_I1_UCS_3*>(busPtr))->SetLuminance(b); break;
#endif
// case I_32_BB_UCS_3: (static_cast<B_32_BB_UCS_3*>(busPtr))->SetLuminance(b); break;
case I_32_RN_UCS_4: (static_cast<B_32_RN_UCS_4*>(busPtr))->SetLuminance(b); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_4: (static_cast<B_32_I0_UCS_4*>(busPtr))->SetLuminance(b); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_4: (static_cast<B_32_I1_UCS_4*>(busPtr))->SetLuminance(b); break;
#endif
// case I_32_BB_UCS_4: (static_cast<B_32_BB_UCS_4*>(busPtr))->SetLuminance(b); break;
#endif #endif
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->SetBrightness(b); break; case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->SetLuminance(b); break;
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->SetBrightness(b); break; case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->SetLuminance(b); break;
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->SetBrightness(b); break; case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->SetLuminance(b); break;
case I_SS_LPD_3: (static_cast<B_SS_LPD_3*>(busPtr))->SetBrightness(b); break; case I_SS_LPD_3: (static_cast<B_SS_LPD_3*>(busPtr))->SetLuminance(b); break;
case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->SetBrightness(b); break; case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->SetLuminance(b); break;
case I_SS_LPO_3: (static_cast<B_SS_LPO_3*>(busPtr))->SetBrightness(b); break; case I_SS_LPO_3: (static_cast<B_SS_LPO_3*>(busPtr))->SetLuminance(b); break;
case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->SetBrightness(b); break; case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->SetLuminance(b); break;
case I_SS_WS1_3: (static_cast<B_SS_WS1_3*>(busPtr))->SetBrightness(b); break; case I_SS_WS1_3: (static_cast<B_SS_WS1_3*>(busPtr))->SetLuminance(b); break;
case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->SetBrightness(b); break; case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->SetLuminance(b); break;
case I_SS_P98_3: (static_cast<B_SS_P98_3*>(busPtr))->SetBrightness(b); break; case I_SS_P98_3: (static_cast<B_SS_P98_3*>(busPtr))->SetLuminance(b); break;
} }
}; };
static uint32_t getPixelColor(void* busPtr, uint8_t busType, uint16_t pix, uint8_t co) { static uint32_t getPixelColor(void* busPtr, uint8_t busType, uint16_t pix, uint8_t co) {
@ -728,6 +921,14 @@ class PolyBus {
case I_8266_U1_TM2_3: col = (static_cast<B_8266_U1_TM2_4*>(busPtr))->GetPixelColor(pix); break; case I_8266_U1_TM2_3: col = (static_cast<B_8266_U1_TM2_4*>(busPtr))->GetPixelColor(pix); break;
case I_8266_DM_TM2_3: col = (static_cast<B_8266_DM_TM2_4*>(busPtr))->GetPixelColor(pix); break; case I_8266_DM_TM2_3: col = (static_cast<B_8266_DM_TM2_4*>(busPtr))->GetPixelColor(pix); break;
case I_8266_BB_TM2_3: col = (static_cast<B_8266_BB_TM2_4*>(busPtr))->GetPixelColor(pix); break; case I_8266_BB_TM2_3: col = (static_cast<B_8266_BB_TM2_4*>(busPtr))->GetPixelColor(pix); break;
case I_8266_U0_UCS_3: { Rgb48Color c = (static_cast<B_8266_U0_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
case I_8266_U1_UCS_3: { Rgb48Color c = (static_cast<B_8266_U1_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
case I_8266_DM_UCS_3: { Rgb48Color c = (static_cast<B_8266_DM_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
case I_8266_BB_UCS_3: { Rgb48Color c = (static_cast<B_8266_BB_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
case I_8266_U0_UCS_4: { Rgbw64Color c = (static_cast<B_8266_U0_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
case I_8266_U1_UCS_4: { Rgbw64Color c = (static_cast<B_8266_U1_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
case I_8266_DM_UCS_4: { Rgbw64Color c = (static_cast<B_8266_DM_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
case I_8266_BB_UCS_4: { Rgbw64Color c = (static_cast<B_8266_BB_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
#endif #endif
#ifdef ARDUINO_ARCH_ESP32 #ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: col = (static_cast<B_32_RN_NEO_3*>(busPtr))->GetPixelColor(pix); break; case I_32_RN_NEO_3: col = (static_cast<B_32_RN_NEO_3*>(busPtr))->GetPixelColor(pix); break;
@ -764,6 +965,22 @@ class PolyBus {
case I_32_I1_TM1_4: col = (static_cast<B_32_I1_TM1_4*>(busPtr))->GetPixelColor(pix); break; case I_32_I1_TM1_4: col = (static_cast<B_32_I1_TM1_4*>(busPtr))->GetPixelColor(pix); break;
case I_32_I1_TM2_3: col = (static_cast<B_32_I1_TM2_3*>(busPtr))->GetPixelColor(pix); break; case I_32_I1_TM2_3: col = (static_cast<B_32_I1_TM2_3*>(busPtr))->GetPixelColor(pix); break;
#endif #endif
case I_32_RN_UCS_3: { Rgb48Color c = (static_cast<B_32_RN_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_3: { Rgb48Color c = (static_cast<B_32_I0_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_3: { Rgb48Color c = (static_cast<B_32_I1_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
#endif
// case I_32_BB_UCS_3: col = (static_cast<B_32_BB_UCS_3*>(busPtr))->GetPixelColor(pix); break;
case I_32_RN_UCS_4: { Rgbw64Color c = (static_cast<B_32_RN_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_4: { Rgbw64Color c = (static_cast<B_32_I0_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_4: { Rgbw64Color c = (static_cast<B_32_I1_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
#endif
// case I_32_BB_UCS_4: col = (static_cast<B_32_BB_UCS_4*>(busPtr))->GetPixelColor(pix); break;
#endif #endif
case I_HS_DOT_3: col = (static_cast<B_HS_DOT_3*>(busPtr))->GetPixelColor(pix); break; case I_HS_DOT_3: col = (static_cast<B_HS_DOT_3*>(busPtr))->GetPixelColor(pix); break;
case I_SS_DOT_3: col = (static_cast<B_SS_DOT_3*>(busPtr))->GetPixelColor(pix); break; case I_SS_DOT_3: col = (static_cast<B_SS_DOT_3*>(busPtr))->GetPixelColor(pix); break;
@ -821,6 +1038,14 @@ class PolyBus {
case I_8266_U1_TM2_3: delete (static_cast<B_8266_U1_TM2_4*>(busPtr)); break; case I_8266_U1_TM2_3: delete (static_cast<B_8266_U1_TM2_4*>(busPtr)); break;
case I_8266_DM_TM2_3: delete (static_cast<B_8266_DM_TM2_4*>(busPtr)); break; case I_8266_DM_TM2_3: delete (static_cast<B_8266_DM_TM2_4*>(busPtr)); break;
case I_8266_BB_TM2_3: delete (static_cast<B_8266_BB_TM2_4*>(busPtr)); break; case I_8266_BB_TM2_3: delete (static_cast<B_8266_BB_TM2_4*>(busPtr)); break;
case I_8266_U0_UCS_3: delete (static_cast<B_8266_U0_UCS_3*>(busPtr)); break;
case I_8266_U1_UCS_3: delete (static_cast<B_8266_U1_UCS_3*>(busPtr)); break;
case I_8266_DM_UCS_3: delete (static_cast<B_8266_DM_UCS_3*>(busPtr)); break;
case I_8266_BB_UCS_3: delete (static_cast<B_8266_BB_UCS_3*>(busPtr)); break;
case I_8266_U0_UCS_4: delete (static_cast<B_8266_U0_UCS_4*>(busPtr)); break;
case I_8266_U1_UCS_4: delete (static_cast<B_8266_U1_UCS_4*>(busPtr)); break;
case I_8266_DM_UCS_4: delete (static_cast<B_8266_DM_UCS_4*>(busPtr)); break;
case I_8266_BB_UCS_4: delete (static_cast<B_8266_BB_UCS_4*>(busPtr)); break;
#endif #endif
#ifdef ARDUINO_ARCH_ESP32 #ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: delete (static_cast<B_32_RN_NEO_3*>(busPtr)); break; case I_32_RN_NEO_3: delete (static_cast<B_32_RN_NEO_3*>(busPtr)); break;
@ -857,6 +1082,22 @@ class PolyBus {
case I_32_I1_TM1_4: delete (static_cast<B_32_I1_TM1_4*>(busPtr)); break; case I_32_I1_TM1_4: delete (static_cast<B_32_I1_TM1_4*>(busPtr)); break;
case I_32_I1_TM2_3: delete (static_cast<B_32_I1_TM2_3*>(busPtr)); break; case I_32_I1_TM2_3: delete (static_cast<B_32_I1_TM2_3*>(busPtr)); break;
#endif #endif
case I_32_RN_UCS_3: delete (static_cast<B_32_RN_UCS_3*>(busPtr)); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_3: delete (static_cast<B_32_I0_UCS_3*>(busPtr)); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_3: delete (static_cast<B_32_I1_UCS_3*>(busPtr)); break;
#endif
// case I_32_BB_UCS_3: delete (static_cast<B_32_BB_UCS_3*>(busPtr)); break;
case I_32_RN_UCS_4: delete (static_cast<B_32_RN_UCS_4*>(busPtr)); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_4: delete (static_cast<B_32_I0_UCS_4*>(busPtr)); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_4: delete (static_cast<B_32_I1_UCS_4*>(busPtr)); break;
#endif
// case I_32_BB_UCS_4: delete (static_cast<B_32_BB_UCS_4*>(busPtr)); break;
#endif #endif
case I_HS_DOT_3: delete (static_cast<B_HS_DOT_3*>(busPtr)); break; case I_HS_DOT_3: delete (static_cast<B_HS_DOT_3*>(busPtr)); break;
case I_SS_DOT_3: delete (static_cast<B_SS_DOT_3*>(busPtr)); break; case I_SS_DOT_3: delete (static_cast<B_SS_DOT_3*>(busPtr)); break;
@ -912,6 +1153,10 @@ class PolyBus {
return I_8266_U0_TM1_4 + offset; return I_8266_U0_TM1_4 + offset;
case TYPE_TM1829: case TYPE_TM1829:
return I_8266_U0_TM2_3 + offset; return I_8266_U0_TM2_3 + offset;
case TYPE_UCS8903:
return I_8266_U0_UCS_3 + offset;
case TYPE_UCS8904:
return I_8266_U0_UCS_4 + offset;
} }
#else //ESP32 #else //ESP32
uint8_t offset = 0; //0 = RMT (num 0-7) 8 = I2S0 9 = I2S1 uint8_t offset = 0; //0 = RMT (num 0-7) 8 = I2S0 9 = I2S1
@ -946,6 +1191,10 @@ class PolyBus {
return I_32_RN_TM1_4 + offset; return I_32_RN_TM1_4 + offset;
case TYPE_TM1829: case TYPE_TM1829:
return I_32_RN_TM2_3 + offset; return I_32_RN_TM2_3 + offset;
case TYPE_UCS8903:
return I_32_RN_UCS_3 + offset;
case TYPE_UCS8904:
return I_32_RN_UCS_4 + offset;
} }
#endif #endif
} }

View File

@ -225,7 +225,6 @@ void handleButton()
{ {
static unsigned long lastRead = 0UL; static unsigned long lastRead = 0UL;
static unsigned long lastRun = 0UL; static unsigned long lastRun = 0UL;
bool analog = false;
unsigned long now = millis(); unsigned long now = millis();
//if (strip.isUpdating()) return; // don't interfere with strip updates. Our button will still be there in 1ms (next cycle) //if (strip.isUpdating()) return; // don't interfere with strip updates. Our button will still be there in 1ms (next cycle)
@ -241,14 +240,18 @@ void handleButton()
if (usermods.handleButton(b)) continue; // did usermod handle buttons if (usermods.handleButton(b)) continue; // did usermod handle buttons
if ((buttonType[b] == BTN_TYPE_ANALOG || buttonType[b] == BTN_TYPE_ANALOG_INVERTED) && now - lastRead > ANALOG_BTN_READ_CYCLE) { // button is not a button but a potentiometer if (buttonType[b] == BTN_TYPE_ANALOG || buttonType[b] == BTN_TYPE_ANALOG_INVERTED) { // button is not a button but a potentiometer
analog = true; if (now - lastRead > ANALOG_BTN_READ_CYCLE) {
handleAnalog(b); continue; handleAnalog(b);
lastRead = now;
}
continue;
} }
//button is not momentary, but switch. This is only suitable on pins whose on-boot state does not matter (NOT gpio0) //button is not momentary, but switch. This is only suitable on pins whose on-boot state does not matter (NOT gpio0)
if (buttonType[b] == BTN_TYPE_SWITCH || buttonType[b] == BTN_TYPE_PIR_SENSOR) { if (buttonType[b] == BTN_TYPE_SWITCH || buttonType[b] == BTN_TYPE_PIR_SENSOR) {
handleSwitch(b); continue; handleSwitch(b);
continue;
} }
//momentary button logic //momentary button logic
@ -305,7 +308,6 @@ void handleButton()
shortPressAction(b); shortPressAction(b);
} }
} }
if (analog) lastRead = now;
} }
// If enabled, RMT idle level is set to HIGH when off // If enabled, RMT idle level is set to HIGH when off

View File

@ -156,10 +156,11 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
uint8_t ledType = elm["type"] | TYPE_WS2812_RGB; uint8_t ledType = elm["type"] | TYPE_WS2812_RGB;
bool reversed = elm["rev"]; bool reversed = elm["rev"];
bool refresh = elm["ref"] | false; bool refresh = elm["ref"] | false;
uint16_t freqkHz = elm[F("freq")] | 0; // will be in kHz for DotStar and Hz for PWM (not yet implemented fully)
ledType |= refresh << 7; // hack bit 7 to indicate strip requires off refresh ledType |= refresh << 7; // hack bit 7 to indicate strip requires off refresh
uint8_t AWmode = elm[F("rgbwm")] | autoWhiteMode; uint8_t AWmode = elm[F("rgbwm")] | autoWhiteMode;
if (fromFS) { if (fromFS) {
BusConfig bc = BusConfig(ledType, pins, start, length, colorOrder, reversed, skipFirst, AWmode); BusConfig bc = BusConfig(ledType, pins, start, length, colorOrder, reversed, skipFirst, AWmode, freqkHz);
mem += BusManager::memUsage(bc); mem += BusManager::memUsage(bc);
if (mem <= MAX_LED_MEMORY) if (busses.add(bc) == -1) break; // finalization will be done in WLED::beginStrip() if (mem <= MAX_LED_MEMORY) if (busses.add(bc) == -1) break; // finalization will be done in WLED::beginStrip()
} else { } else {
@ -735,6 +736,7 @@ void serializeConfig() {
ins["type"] = bus->getType() & 0x7F; ins["type"] = bus->getType() & 0x7F;
ins["ref"] = bus->isOffRefreshRequired(); ins["ref"] = bus->isOffRefreshRequired();
ins[F("rgbwm")] = bus->getAutoWhiteMode(); ins[F("rgbwm")] = bus->getAutoWhiteMode();
ins[F("freq")] = bus->getFrequency();
} }
JsonArray hw_com = hw.createNestedArray(F("com")); JsonArray hw_com = hw.createNestedArray(F("com"));

View File

@ -215,6 +215,8 @@
#define TYPE_GS8608 23 //same driver as WS2812, but will require signal 2x per second (else displays test pattern) #define TYPE_GS8608 23 //same driver as WS2812, but will require signal 2x per second (else displays test pattern)
#define TYPE_WS2811_400KHZ 24 //half-speed WS2812 protocol, used by very old WS2811 units #define TYPE_WS2811_400KHZ 24 //half-speed WS2812 protocol, used by very old WS2811 units
#define TYPE_TM1829 25 #define TYPE_TM1829 25
#define TYPE_UCS8903 26
#define TYPE_UCS8904 29
#define TYPE_SK6812_RGBW 30 #define TYPE_SK6812_RGBW 30
#define TYPE_TM1814 31 #define TYPE_TM1814 31
//"Analog" types (PWM) (32-47) //"Analog" types (PWM) (32-47)

View File

@ -1,47 +1,47 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta content='width=device-width' name='viewport'> <meta content='width=device-width' name='viewport'>
<meta name="theme-color" content="#222222"> <meta name="theme-color" content="#222222">
<title>Not found</title> <title>Not found</title>
<style> <style>
body { body {
font-family: Verdana, Helvetica, sans-serif; font-family: Verdana, Helvetica, sans-serif;
text-align: center; text-align: center;
background-color: #222; background-color: #222;
margin: 0; margin: 0;
color: #fff; color: #fff;
} }
img { img {
width: 400px; width: 400px;
max-width: 50%; max-width: 50%;
image-rendering: pixelated; image-rendering: pixelated;
image-rendering: crisp-edges; image-rendering: crisp-edges;
margin: 25px 0 -10px 0; margin: 25px 0 -10px 0;
} }
button { button {
outline: none; outline: none;
cursor: pointer; cursor: pointer;
padding: 8px; padding: 8px;
margin: 10px; margin: 10px;
width: 230px; width: 230px;
text-transform: uppercase; text-transform: uppercase;
font-family: helvetica; font-family: helvetica;
font-size: 19px; font-size: 19px;
background-color: #333; background-color: #333;
color: white; color: white;
border: 0px solid white; border: 0px solid white;
border-radius: 25px; border-radius: 25px;
} }
</style> </style>
</head> </head>
<body> <body>
<img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAbUExURQAAAAB81gCU/zKq/////9bW1oCAgGhoaAAAAGPLX8AAAAAJdFJOU///////////AFNPeBIAAAAJcEhZcwAADsAAAA7AAWrWiQkAAACdSURBVDhPxc9bDoUgEANQebP/FUuHMjBGY/B+3EYR7RH0qC/ZBc6HwCljgHO+xZIVSI2sYgHaG7EBWh8jWoxTrCBFdDJ+BD4lbIHxAcz8APAVLTsrZE4eQD5qzt3cAFTYokC4YCN9Gybgu4yAQtBFLQXHuHABA7JMeOEC/E0W5uy9gv4vo5QHK2i7yq2C8UABM4HmL+CSTXCTF1DrCX6+Gp9zB5dsAAAAAElFTkSuQmCC"> <img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAbUExURQAAAAB81gCU/zKq/////9bW1oCAgGhoaAAAAGPLX8AAAAAJdFJOU///////////AFNPeBIAAAAJcEhZcwAADsAAAA7AAWrWiQkAAACdSURBVDhPxc9bDoUgEANQebP/FUuHMjBGY/B+3EYR7RH0qC/ZBc6HwCljgHO+xZIVSI2sYgHaG7EBWh8jWoxTrCBFdDJ+BD4lbIHxAcz8APAVLTsrZE4eQD5qzt3cAFTYokC4YCN9Gybgu4yAQtBFLQXHuHABA7JMeOEC/E0W5uy9gv4vo5QHK2i7yq2C8UABM4HmL+CSTXCTF1DrCX6+Gp9zB5dsAAAAAElFTkSuQmCC">
<h1>404 Not Found</h1> <h1>404 Not Found</h1>
<b>Akemi does not know where you are headed...</b><br><br> <b>Akemi does not know where you are headed...</b><br><br>
<button onclick="window.location.href='/sliders'">Back to controls</button> <button onclick="window.location.href='/sliders'">Back to controls</button>
</body> </body>
</html> </html>

View File

@ -318,9 +318,6 @@ button {
height: 100%; height: 100%;
overscroll-behavior: none; overscroll-behavior: none;
padding: 0 4px; padding: 0 4px;
}
#Effects {
-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling: touch;
} }
@ -432,11 +429,11 @@ button {
position: relative; position: relative;
opacity: 1; opacity: 1;
transition: opacity 0.5s linear, height 0.5s, transform 0.5s; transition: opacity 0.5s linear, height 0.5s, transform 0.5s;
overflow: hidden;
} }
.filter { .filter {
z-index: 1; z-index: 1;
overflow: hidden;
} }
/* Tooltip text */ /* Tooltip text */

View File

@ -125,19 +125,19 @@
let len = parseInt(d.getElementsByName("LC"+n)[0].value); let len = parseInt(d.getElementsByName("LC"+n)[0].value);
len += parseInt(d.getElementsByName("SL"+n)[0].value); // skipped LEDs are allocated too len += parseInt(d.getElementsByName("SL"+n)[0].value); // skipped LEDs are allocated too
if (t < 32) { if (t < 32) {
if (t==26 || t==29) len *= 2; // 16 bit LEDs
if (maxM < 10000 && d.getElementsByName("L0"+n)[0].value == 3) { //8266 DMA uses 5x the mem if (maxM < 10000 && d.getElementsByName("L0"+n)[0].value == 3) { //8266 DMA uses 5x the mem
if (t > 29) return len*20; //RGBW if (t > 28) return len*20; //RGBW
return len*15; return len*15;
} else if (maxM >= 10000) //ESP32 RMT uses double buffer? } else if (maxM >= 10000) //ESP32 RMT uses double buffer?
{ {
if (t > 29) return len*8; //RGBW if (t > 28) return len*8; //RGBW
return len*6; return len*6;
} }
if (t > 29) return len*4; //RGBW if (t > 28) return len*4; //RGBW
return len*3; return len*3;
} }
if (t > 31 && t < 48) return 5; if (t > 31 && t < 48) return 5;
if (t == 44 || t == 45) return len*4; //RGBW
return len*3; return len*3;
} }
@ -184,15 +184,16 @@
if (t > 31 && t < 48) d.getElementsByName("LC"+n)[0].value = 1; // for sanity change analog count just to 1 LED if (t > 31 && t < 48) d.getElementsByName("LC"+n)[0].value = 1; // for sanity change analog count just to 1 LED
} }
gId("rf"+n).onclick = (t == 31) ? (()=>{return false}) : (()=>{}); // prevent change for TM1814 gId("rf"+n).onclick = (t == 31) ? (()=>{return false}) : (()=>{}); // prevent change for TM1814
gRGBW |= isRGBW = ((t > 17 && t < 22) || t == 30 || t == 31 || (t > 40 && t < 46 && t != 43) || t == 88); // RGBW checkbox, TYPE_xxxx values from const.h gRGBW |= isRGBW = ((t > 17 && t < 22) || (t > 28 && t < 32) || (t > 40 && t < 46 && t != 43) || t == 88); // RGBW checkbox, TYPE_xxxx values from const.h
gId("co"+n).style.display = ((t >= 80 && t < 96) || (t >= 40 && t < 48)) ? "none":"inline"; // hide color order for PWM gId("co"+n).style.display = ((t >= 80 && t < 96) || (t >= 40 && t < 48)) ? "none":"inline"; // hide color order for PWM
gId("dig"+n+"w").style.display = (t == 30 || t == 31) ? "inline":"none"; // show swap channels dropdown gId("dig"+n+"w").style.display = (t > 28 && t < 32) ? "inline":"none"; // show swap channels dropdown
if (!(t == 30 || t == 31)) d.getElementsByName("WO"+n)[0].value = 0; // reset swapping if (!(t > 28 && t < 32)) d.getElementsByName("WO"+n)[0].value = 0; // reset swapping
gId("dig"+n+"c").style.display = (t >= 40 && t < 48) ? "none":"inline"; // hide count for analog gId("dig"+n+"c").style.display = (t >= 40 && t < 48) ? "none":"inline"; // hide count for analog
gId("dig"+n+"r").style.display = (t >= 80 && t < 96) ? "none":"inline"; // hide reversed for virtual gId("dig"+n+"r").style.display = (t >= 80 && t < 96) ? "none":"inline"; // hide reversed for virtual
gId("dig"+n+"s").style.display = ((t >= 80 && t < 96) || (t >= 40 && t < 48)) ? "none":"inline"; // hide skip 1st for virtual & analog gId("dig"+n+"s").style.display = ((t >= 80 && t < 96) || (t >= 40 && t < 48)) ? "none":"inline"; // hide skip 1st for virtual & analog
gId("dig"+n+"f").style.display = ((t >= 16 && t < 32) || (t >= 50 && t < 64)) ? "inline":"none"; // hide refresh gId("dig"+n+"f").style.display = ((t >= 16 && t < 32) || (t >= 50 && t < 64)) ? "inline":"none"; // hide refresh
gId("dig"+n+"a").style.display = (isRGBW && t != 40) ? "inline":"none"; // auto calculate white gId("dig"+n+"a").style.display = (isRGBW && t != 40) ? "inline":"none"; // auto calculate white
gId("dig"+n+"l").style.display = (t > 48 && t < 64) ? "inline":"none"; // bus clock speed
gId("rev"+n).innerHTML = (t >= 40 && t < 48) ? "Inverted output":"Reversed (rotated 180°)"; // change reverse text for analog gId("rev"+n).innerHTML = (t >= 40 && t < 48) ? "Inverted output":"Reversed (rotated 180°)"; // change reverse text for analog
gId("psd"+n).innerHTML = (t >= 40 && t < 48) ? "Index:":"Start:"; // change analog start description gId("psd"+n).innerHTML = (t >= 40 && t < 48) ? "Index:":"Start:"; // change analog start description
} }
@ -330,6 +331,8 @@ ${i+1}:
<option value="31">TM1814</option>\ <option value="31">TM1814</option>\
<option value="24">400kHz</option>\ <option value="24">400kHz</option>\
<option value="25">TM1829</option>\ <option value="25">TM1829</option>\
<option value="26">UCS8903</option>\
<option value="29">UCS8904 RGBW</option>\
<option value="50">WS2801</option>\ <option value="50">WS2801</option>\
<option value="51">APA102</option>\ <option value="51">APA102</option>\
<option value="52">LPD8806</option>\ <option value="52">LPD8806</option>\
@ -358,6 +361,7 @@ ${i+1}:
<option value="5">GBR</option> <option value="5">GBR</option>
</select></div> </select></div>
<div id="dig${i}w" style="display:none">Swap: <select name="WO${i}"><option value="0">None</option><option value="1">W & B</option><option value="2">W & G</option><option value="3">W & R</option></select></div> <div id="dig${i}w" style="display:none">Swap: <select name="WO${i}"><option value="0">None</option><option value="1">W & B</option><option value="2">W & G</option><option value="3">W & R</option></select></div>
<div id="dig${i}l" style="display:none">Clock: <select name="SP${i}"><option value="0">Slowest</option><option value="1">Slow</option><option value="2">Normal</option><option value="3">Fast</option><option value="4">Fastest</option></select></div>
<div> <div>
<span id="psd${i}">Start:</span> <input type="number" name="LS${i}" id="ls${i}" class="l starts" min="0" max="8191" value="${lastEnd(i)}" oninput="startsDirty[${i}]=true;UI();" required />&nbsp; <span id="psd${i}">Start:</span> <input type="number" name="LS${i}" id="ls${i}" class="l starts" min="0" max="8191" value="${lastEnd(i)}" oninput="startsDirty[${i}]=true;UI();" required />&nbsp;
<div id="dig${i}c" style="display:inline">Length: <input type="number" name="LC${i}" class="l" min="1" max="${maxPB}" value="1" required oninput="UI()" /></div><br> <div id="dig${i}c" style="display:inline">Length: <input type="number" name="LC${i}" class="l" min="1" max="${maxPB}" value="1" required oninput="UI()" /></div><br>

View File

@ -1,63 +1,63 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta content='width=device-width' name='viewport'> <meta content='width=device-width' name='viewport'>
<meta name="theme-color" content="#222222"> <meta name="theme-color" content="#222222">
<title>Welcome!</title> <title>Welcome!</title>
<style> <style>
body { body {
font-family: Verdana, Helvetica, sans-serif; font-family: Verdana, Helvetica, sans-serif;
text-align: center; text-align: center;
background-color: #222; background-color: #222;
margin: 0; margin: 0;
color: #fff; color: #fff;
} }
button { button {
outline: none; outline: none;
cursor: pointer; cursor: pointer;
padding: 8px; padding: 8px;
margin: 10px; margin: 10px;
width: 230px; width: 230px;
text-transform: uppercase; text-transform: uppercase;
font-family: helvetica; font-family: helvetica;
font-size: 19px; font-size: 19px;
background-color: #333; background-color: #333;
color: white; color: white;
border: 0px solid white; border: 0px solid white;
border-radius: 25px; border-radius: 25px;
} }
img { img {
width: 950px; width: 950px;
max-width: 82%; max-width: 82%;
image-rendering: pixelated; image-rendering: pixelated;
image-rendering: crisp-edges; image-rendering: crisp-edges;
margin: 4vh 0 0 0; margin: 4vh 0 0 0;
animation: fi 1s; animation: fi 1s;
} }
@keyframes fi { @keyframes fi {
from { opacity: 0; } from { opacity: 0; }
to { opacity: 1; } to { opacity: 1; }
} }
.main { .main {
animation: fi 1.5s .7s both; animation: fi 1.5s .7s both;
} }
</style> </style>
</head> </head>
<body> <body>
<img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG0AAAAfCAMAAADazLOuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABLUExURQAAAAB81gCU/zKq///mo7sWMN8bO+ZIYtZaAP9rAP+HMsCiG+TAIOnMS0KqNU7KPnLUZOrq6v///4CAgGhoaL+/v6CgoExMTAAAAAlm4O8AAAAZdFJOU////////////////////////////////wABNAq3AAAACXBIWXMAAA7DAAAOwwHHb6hkAAACN0lEQVRIS73VjVLCMBAEYIr8CYKkrdj3f1J37zaXFCpTO+piaDgbPq9px9VQ0qyrvKj4q6m0Zr1h+M7xF1zRmnWzqV9/0d2jttGotO1uv9dUObwej5oqp7fzWVPl8n69aprzoOUUbbvdIbV3OLwitXc6vSG1d7m8I3feSEN0j2CeNbOY4MxigjOLCc4sZsTV2l1cCyy4wIILLLjAxtykltq2rbTU+qi01N5rXNO2leaFORoija2l5MM5a02ac9Ya16Sk5tgaPrUpjZub0BL6YqSxKwbH77XUUmSkJXSl8QtaMuyJhq5maL5nTKVpZC13VmtMpTFT2g4vJjTuGfMzzXftiUZnhdtgb1xofvypRon5TjNnxYN9zJo6K5ruSIzQtGuVZn0x91rKvdHBvm39E7SyZ4y06Gz8BDBFKzsXmhcwyfsGZ9VpbhoiCinaxPNmGWmWWrNU2jB0q6HvOhN1JUtCixQtp2g51ZVUXIPS2RMAD++T2nY/DrDjOMDO4wC7jmNYj3d73nrXug8Yt9uNB8xNU1cKNXWlUFNXCjV1pZhGTE83m2vWfYf/NGj4Bg1zu5JD3/MnH5ZWfLOksbmGWGjgXMN5/C2GXYGFFW9Nmtle6Xut0Gm+JsayCj8z0nhjGvYJzVf4aSzmNYsr+u7Q2JIdoX3YOQjOslmsW1jJ3120nE9gfo79hTaNdcsqVR610lvO47pllae9ReZ805zKo2a3iaY5c75pTmVCA6dJ5H7N0sr/asPwBehb7ifEhusRAAAAAElFTkSuQmCC"> <img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG0AAAAfCAMAAADazLOuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABLUExURQAAAAB81gCU/zKq///mo7sWMN8bO+ZIYtZaAP9rAP+HMsCiG+TAIOnMS0KqNU7KPnLUZOrq6v///4CAgGhoaL+/v6CgoExMTAAAAAlm4O8AAAAZdFJOU////////////////////////////////wABNAq3AAAACXBIWXMAAA7DAAAOwwHHb6hkAAACN0lEQVRIS73VjVLCMBAEYIr8CYKkrdj3f1J37zaXFCpTO+piaDgbPq9px9VQ0qyrvKj4q6m0Zr1h+M7xF1zRmnWzqV9/0d2jttGotO1uv9dUObwej5oqp7fzWVPl8n69aprzoOUUbbvdIbV3OLwitXc6vSG1d7m8I3feSEN0j2CeNbOY4MxigjOLCc4sZsTV2l1cCyy4wIILLLjAxtykltq2rbTU+qi01N5rXNO2leaFORoija2l5MM5a02ac9Ya16Sk5tgaPrUpjZub0BL6YqSxKwbH77XUUmSkJXSl8QtaMuyJhq5maL5nTKVpZC13VmtMpTFT2g4vJjTuGfMzzXftiUZnhdtgb1xofvypRon5TjNnxYN9zJo6K5ruSIzQtGuVZn0x91rKvdHBvm39E7SyZ4y06Gz8BDBFKzsXmhcwyfsGZ9VpbhoiCinaxPNmGWmWWrNU2jB0q6HvOhN1JUtCixQtp2g51ZVUXIPS2RMAD++T2nY/DrDjOMDO4wC7jmNYj3d73nrXug8Yt9uNB8xNU1cKNXWlUFNXCjV1pZhGTE83m2vWfYf/NGj4Bg1zu5JD3/MnH5ZWfLOksbmGWGjgXMN5/C2GXYGFFW9Nmtle6Xut0Gm+JsayCj8z0nhjGvYJzVf4aSzmNYsr+u7Q2JIdoX3YOQjOslmsW1jJ3120nE9gfo79hTaNdcsqVR610lvO47pllae9ReZ805zKo2a3iaY5c75pTmVCA6dJ5H7N0sr/asPwBehb7ifEhusRAAAAAElFTkSuQmCC">
<div class="main"> <div class="main">
<h1>Welcome to WLED!</h1> <h1>Welcome to WLED!</h1>
<h3>Thank you for installing my application!</h3> <h3>Thank you for installing my application!</h3>
<b>Next steps:</b><br><br> <b>Next steps:</b><br><br>
Connect the module to your local WiFi here!<br> Connect the module to your local WiFi here!<br>
<button onclick="window.location.href='/settings/wifi'">WiFi settings</button><br> <button onclick="window.location.href='/settings/wifi'">WiFi settings</button><br>
<i>Just trying this out in AP mode?</i><br> <i>Just trying this out in AP mode?</i><br>
<button onclick="window.location.href='/sliders'">To the controls!</button><br> <button onclick="window.location.href='/sliders'">To the controls!</button><br>
</div> </div>
</body> </body>
</html> </html>

View File

@ -173,14 +173,30 @@ void handleE131Packet(e131_packet_t* p, IPAddress clientIP, byte protocol){
break; break;
case DMX_MODE_PRESET: // 2 channel: [Dimmer,Preset] case DMX_MODE_PRESET: // 2 channel: [Dimmer,Preset]
if (uni != e131Universe || availDMXLen < 2) return; {
applyPreset(e131_data[dataOffset+1], CALL_MODE_NOTIFICATION); if (uni != e131Universe || availDMXLen < 2) return;
if (bri != e131_data[dataOffset]) {
bri = e131_data[dataOffset]; // limit max. selectable preset to 250, even though DMX max. val is 255
strip.setBrightness(bri, true); uint8_t dmxValPreset = (e131_data[dataOffset+1] > 250 ? 250 : e131_data[dataOffset+1]);
// only apply preset if value changed
if (dmxValPreset != 0 && dmxValPreset != currentPreset &&
// only apply preset if not in playlist, or playlist changed
(currentPlaylist < 0 || dmxValPreset != currentPlaylist)) {
presetCycCurr = dmxValPreset;
unloadPlaylist(); // applying a preset unloads the playlist
applyPreset(dmxValPreset, CALL_MODE_NOTIFICATION);
}
// only change brightness if value changed
if (bri != e131_data[dataOffset]) {
bri = e131_data[dataOffset];
strip.setBrightness(scaledBri(bri), false);
stateUpdated(CALL_MODE_WS_SEND);
}
return;
break;
} }
return;
break;
case DMX_MODE_EFFECT: // 15 channels [bri,effectCurrent,effectSpeed,effectIntensity,effectPalette,effectOption,R,G,B,R2,G2,B2,R3,G3,B3] case DMX_MODE_EFFECT: // 15 channels [bri,effectCurrent,effectSpeed,effectIntensity,effectPalette,effectOption,R,G,B,R2,G2,B2,R3,G3,B3]
case DMX_MODE_EFFECT_W: // 18 channels, same as above but with extra +3 white channels [..,W,W2,W3] case DMX_MODE_EFFECT_W: // 18 channels, same as above but with extra +3 white channels [..,W,W2,W3]

View File

@ -7,246 +7,303 @@
*/ */
// Autogenerated from wled00/data/cpal/cpal.htm, do not edit!! // Autogenerated from wled00/data/cpal/cpal.htm, do not edit!!
const uint16_t PAGE_cpal_L = 3831; const uint16_t PAGE_cpal_L = 4750;
const uint8_t PAGE_cpal[] PROGMEM = { const uint8_t PAGE_cpal[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xbd, 0x5a, 0x7b, 0x73, 0xdb, 0x36, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xbd, 0x3b, 0x61, 0x77, 0xdb, 0x38,
0xb6, 0xff, 0xdf, 0x9f, 0x02, 0xa1, 0x77, 0x53, 0xb2, 0xa6, 0x28, 0x52, 0x12, 0xf5, 0x34, 0xbd, 0x8e, 0xdf, 0xfb, 0x2b, 0x58, 0xb5, 0x93, 0x4a, 0x13, 0x59, 0x96, 0xe4, 0xd8, 0x4e, 0x6c, 0x2b,
0xd3, 0x3a, 0xee, 0x75, 0x76, 0xe2, 0x26, 0xd9, 0xe4, 0xba, 0xe9, 0xcd, 0x64, 0xa6, 0xb4, 0x08, 0xf3, 0x3a, 0x69, 0xf7, 0xd2, 0x7b, 0xc9, 0xb4, 0x6f, 0x9b, 0xcb, 0x4c, 0x2f, 0x97, 0x7d, 0x61,
0x49, 0x6c, 0x28, 0x52, 0x17, 0x84, 0xfc, 0x88, 0xab, 0xef, 0xbe, 0xbf, 0x03, 0x90, 0x12, 0xa9, 0x2c, 0xda, 0xd6, 0x54, 0x16, 0xbd, 0x14, 0xed, 0x24, 0x75, 0xfc, 0xdf, 0x0f, 0x20, 0x25, 0x59,
0x87, 0x93, 0x76, 0xe7, 0xde, 0x36, 0x23, 0x82, 0xc0, 0x79, 0xbf, 0x70, 0x08, 0x98, 0x9d, 0x3e, 0x92, 0xed, 0xa4, 0xbd, 0xb9, 0xdd, 0x99, 0xbe, 0x9a, 0x22, 0x41, 0x10, 0x00, 0x01, 0x10, 0x04,
0x7b, 0xf1, 0xfa, 0xfc, 0xfd, 0xaf, 0x6f, 0x2e, 0xd8, 0x4c, 0xce, 0x93, 0x33, 0x76, 0x5a, 0x3e, 0x58, 0x32, 0x78, 0xf9, 0xee, 0xe3, 0xc9, 0xc5, 0x97, 0x4f, 0xef, 0xc9, 0x44, 0x4e, 0xe3, 0x63,
0x78, 0x18, 0xe1, 0x31, 0xe7, 0x32, 0xc4, 0x8a, 0x5c, 0x34, 0xf8, 0xff, 0x2e, 0xe3, 0xdb, 0xc0, 0x32, 0xc8, 0x7f, 0x18, 0x0d, 0xe1, 0x67, 0xca, 0x24, 0x85, 0x11, 0x39, 0x6b, 0xb0, 0x7f, 0xce,
0x38, 0x0f, 0xc7, 0x33, 0xde, 0x38, 0xcf, 0x52, 0x29, 0xb2, 0xc4, 0x60, 0x47, 0x63, 0x8c, 0x78, 0xa3, 0x45, 0x60, 0x9c, 0xd0, 0xe1, 0x84, 0x35, 0x4e, 0x78, 0x22, 0x05, 0x8f, 0x0d, 0xf2, 0x62,
0x2a, 0x03, 0x23, 0xcd, 0x1a, 0x63, 0x5a, 0xb3, 0x19, 0x46, 0xb9, 0xcc, 0x04, 0x46, 0xf3, 0x65, 0x08, 0x2d, 0x96, 0xc8, 0xc0, 0x48, 0x78, 0x63, 0x88, 0x63, 0x36, 0x81, 0x56, 0x2a, 0xb9, 0x80,
0x2e, 0x1b, 0x82, 0xdf, 0x86, 0x49, 0x1c, 0x85, 0x92, 0x1b, 0xfb, 0x08, 0xbe, 0x11, 0xe1, 0x74, 0xd6, 0x74, 0x9e, 0xca, 0x86, 0x60, 0x0b, 0x1a, 0x47, 0x21, 0x95, 0xcc, 0xd8, 0x86, 0xf0, 0x93,
0x1e, 0xee, 0xa3, 0xb4, 0x17, 0xfc, 0xe2, 0x7e, 0x11, 0x0b, 0x9e, 0x1b, 0x6c, 0x0d, 0xee, 0x12, 0xa0, 0xe3, 0x29, 0xdd, 0x86, 0x69, 0x2b, 0xf8, 0xfb, 0xfb, 0x59, 0x24, 0x58, 0x6a, 0x90, 0x02,
0x9c, 0x8c, 0x65, 0xc2, 0xcf, 0x8e, 0x7e, 0x79, 0x75, 0xf1, 0x82, 0x9d, 0x83, 0x6b, 0x36, 0x67, 0xdc, 0x45, 0x38, 0x19, 0xc9, 0x98, 0x1d, 0xbf, 0xf8, 0xfd, 0xec, 0xfd, 0x3b, 0x72, 0x02, 0xab,
0x6f, 0xc2, 0x84, 0x4b, 0xc9, 0xd9, 0x45, 0x14, 0x43, 0x9a, 0xd3, 0xa6, 0x06, 0x61, 0xa7, 0xf9, 0xf2, 0x29, 0xf9, 0x44, 0x63, 0x26, 0x25, 0x23, 0xef, 0xc3, 0x08, 0xa8, 0x19, 0x34, 0x35, 0x08,
0x58, 0xc4, 0x0b, 0xc9, 0xe4, 0xc3, 0x82, 0x07, 0x86, 0xe4, 0xf7, 0xb2, 0xf9, 0x7b, 0x78, 0x1b, 0x19, 0xa4, 0x43, 0x11, 0xcd, 0x24, 0x91, 0x0f, 0x33, 0x16, 0x18, 0x92, 0xdd, 0xcb, 0xe6, 0x9f,
0xea, 0x59, 0xe3, 0xec, 0x68, 0xb2, 0x4c, 0xc7, 0x32, 0xce, 0x52, 0x36, 0x7d, 0x19, 0x99, 0xdc, 0x74, 0x41, 0x75, 0xaf, 0x71, 0xfc, 0x62, 0x34, 0x4f, 0x86, 0x32, 0xe2, 0x09, 0x19, 0x7f, 0x08,
0x7a, 0x14, 0x5c, 0x2e, 0x45, 0xca, 0x22, 0x67, 0xca, 0xe5, 0x45, 0xc2, 0xe7, 0xe0, 0xf9, 0xe3, 0x4d, 0x66, 0x2d, 0x05, 0x93, 0x73, 0x91, 0x90, 0xd0, 0x19, 0x33, 0xf9, 0x3e, 0x66, 0x53, 0x58,
0x83, 0x5a, 0x5a, 0xad, 0x41, 0xc7, 0x17, 0x35, 0xc8, 0xb1, 0xe0, 0xd0, 0xb6, 0x00, 0x26, 0xc0, 0xf3, 0xd7, 0x07, 0x35, 0xb4, 0x2a, 0x40, 0x87, 0xef, 0x2b, 0x90, 0x43, 0xc1, 0x80, 0xdb, 0x0c,
0xdb, 0x50, 0xb0, 0x28, 0x88, 0xb2, 0xf1, 0x92, 0x66, 0x8e, 0x4e, 0x9b, 0x9a, 0x1b, 0x09, 0x23, 0x18, 0x01, 0x17, 0x54, 0x90, 0x30, 0x08, 0xf9, 0x70, 0x8e, 0x3d, 0x2f, 0x06, 0x4d, 0xbd, 0x1a,
0x1f, 0x48, 0xee, 0x9b, 0x2c, 0x7a, 0x78, 0x9c, 0x40, 0xa3, 0xc6, 0x24, 0x9c, 0xc7, 0xc9, 0xc3, 0x12, 0x23, 0x1f, 0x90, 0xee, 0x5b, 0x1e, 0x3e, 0x2c, 0x47, 0xc0, 0x51, 0x63, 0x44, 0xa7, 0x51,
0xf0, 0x07, 0x11, 0x87, 0x89, 0x9d, 0x87, 0x69, 0xde, 0xc8, 0xb9, 0x88, 0x27, 0xa3, 0x9b, 0x70, 0xfc, 0xd0, 0x7b, 0x2b, 0x22, 0x1a, 0xdb, 0x29, 0x4d, 0xd2, 0x46, 0xca, 0x44, 0x34, 0xea, 0xdf,
0xfc, 0x79, 0x2a, 0xb2, 0x65, 0x1a, 0x35, 0xc6, 0x59, 0x92, 0x89, 0xe1, 0xb1, 0xe7, 0x79, 0x23, 0xd2, 0xe1, 0xd7, 0xb1, 0xe0, 0xf3, 0x24, 0x6c, 0x0c, 0x79, 0xcc, 0x45, 0xef, 0x95, 0xe7, 0x79,
0x85, 0x92, 0xc7, 0x5f, 0xf8, 0xd0, 0xeb, 0x2e, 0xee, 0x47, 0xc5, 0x4a, 0x14, 0x45, 0xa3, 0x79, 0x7d, 0x35, 0x25, 0x8d, 0xbe, 0xb1, 0x9e, 0xd7, 0x99, 0xdd, 0xf7, 0xb3, 0x91, 0x30, 0x0c, 0xfb,
0x28, 0xa6, 0x71, 0x3a, 0x74, 0x99, 0xe7, 0x62, 0xe1, 0x49, 0xd2, 0x49, 0x9c, 0xf2, 0xc6, 0x8c, 0x53, 0x2a, 0xc6, 0x51, 0xd2, 0x73, 0x89, 0xe7, 0xc2, 0xc0, 0x93, 0xa8, 0xe3, 0x28, 0x61, 0x8d,
0xc7, 0xd3, 0x99, 0x1c, 0x3a, 0xfe, 0xea, 0x78, 0x11, 0x0a, 0x48, 0xd9, 0x20, 0x03, 0x87, 0x58, 0x09, 0x8b, 0xc6, 0x13, 0xd9, 0x73, 0xda, 0xab, 0x57, 0x33, 0x2a, 0x80, 0xca, 0x06, 0x0a, 0x98,
0x12, 0x8f, 0x8b, 0x2c, 0x8f, 0x49, 0xcf, 0xa1, 0xe0, 0x49, 0x28, 0xe3, 0x5b, 0x3e, 0xba, 0x8b, 0xc2, 0x90, 0x58, 0xce, 0x78, 0x1a, 0x21, 0x9f, 0x3d, 0xc1, 0x62, 0x2a, 0xa3, 0x05, 0xeb, 0xdf,
0x23, 0x39, 0x1b, 0x7a, 0xae, 0xfb, 0xf7, 0x51, 0x81, 0xd8, 0x02, 0x9b, 0xd5, 0xf1, 0x4d, 0x26, 0x45, 0xa1, 0x9c, 0xf4, 0x3c, 0xd7, 0xfd, 0xa9, 0x9f, 0x4d, 0xf4, 0x61, 0x99, 0xd5, 0xab, 0x5b,
0x61, 0xfa, 0xf3, 0x5d, 0xcc, 0xf0, 0x26, 0xcf, 0x92, 0xa5, 0xe4, 0x85, 0x5c, 0x0d, 0x99, 0x2d, 0x2e, 0x41, 0xf4, 0x27, 0x9b, 0x33, 0xe9, 0x6d, 0xca, 0xe3, 0xb9, 0x64, 0x19, 0x5d, 0x0d, 0xc9,
0x86, 0xbe, 0x42, 0x99, 0x8a, 0x30, 0x8a, 0x89, 0xdf, 0x4d, 0x76, 0xff, 0xb8, 0x4b, 0x97, 0xc6, 0x67, 0xbd, 0xb6, 0x9a, 0x32, 0x16, 0x34, 0x8c, 0x70, 0xbd, 0x5b, 0x7e, 0xbf, 0xdc, 0xc4, 0x8b,
0x2b, 0x47, 0x29, 0xd6, 0x00, 0xee, 0xe7, 0xbd, 0x44, 0x0b, 0xd8, 0x36, 0xa9, 0xaa, 0x49, 0xf4, 0xed, 0x95, 0xa3, 0x18, 0x6b, 0xc0, 0xdc, 0xaf, 0x5b, 0x91, 0x66, 0xb0, 0x2d, 0x64, 0x55, 0xa3,
0x30, 0xba, 0xc9, 0x44, 0xc4, 0x45, 0x83, 0xe8, 0x2f, 0xf3, 0x61, 0x9b, 0x66, 0xb6, 0x8d, 0x98, 0xe8, 0x42, 0xeb, 0x96, 0x8b, 0x90, 0x89, 0x06, 0xe2, 0x9f, 0xa7, 0xbd, 0x16, 0xf6, 0xd4, 0x85,
0xc7, 0xc9, 0x2d, 0x17, 0x05, 0xe4, 0xb0, 0xb5, 0xb8, 0x67, 0xa0, 0x18, 0x47, 0x4c, 0x4c, 0x6f, 0x98, 0x46, 0xf1, 0x82, 0x89, 0x0c, 0xb2, 0xe7, 0xcf, 0xee, 0x09, 0x60, 0x8c, 0x42, 0x22, 0xc6,
0x42, 0xb3, 0xdb, 0xb7, 0xf5, 0x3f, 0xc7, 0xb7, 0x46, 0x5a, 0xe0, 0xbf, 0x8f, 0xa4, 0x80, 0xe1, 0xb7, 0xd4, 0xec, 0x1c, 0xda, 0xfa, 0x8f, 0xd3, 0xb6, 0xfa, 0x9a, 0xe0, 0x9f, 0xfa, 0x52, 0x80,
0x26, 0x99, 0x98, 0x0f, 0xd5, 0x08, 0xf6, 0xe0, 0xbf, 0x9a, 0x0d, 0xac, 0x58, 0xa3, 0x2f, 0x8d, 0xe0, 0x46, 0x5c, 0x4c, 0x7b, 0xaa, 0x05, 0xf2, 0x60, 0x5f, 0xcc, 0x06, 0x8c, 0x58, 0xfd, 0x6f,
0x38, 0x8d, 0xf8, 0xfd, 0xb0, 0x55, 0xca, 0xbb, 0x88, 0xc7, 0x90, 0xf7, 0xab, 0x62, 0xf7, 0xfe, 0x8d, 0x28, 0x09, 0xd9, 0x7d, 0xcf, 0xcf, 0xe9, 0x9d, 0x45, 0x43, 0xa0, 0xf7, 0x59, 0xb2, 0xbb,
0x6f, 0xa5, 0xf6, 0x48, 0xec, 0x8a, 0x6c, 0x11, 0x47, 0x5e, 0xf0, 0xaf, 0x4a, 0xe5, 0xaf, 0xa5, 0xff, 0x5a, 0xaa, 0x3d, 0x24, 0xbb, 0x44, 0x5b, 0xc8, 0xc0, 0x2e, 0xd8, 0xb3, 0x54, 0xb5, 0x0b,
0xf2, 0xbf, 0x4d, 0xaa, 0xe3, 0xc9, 0x64, 0x52, 0xca, 0xd4, 0x5e, 0xcb, 0x74, 0x3c, 0xb8, 0x69, 0xaa, 0xda, 0xdf, 0x47, 0xd5, 0xab, 0xd1, 0x68, 0x94, 0xd3, 0xd4, 0x2a, 0x68, 0x7a, 0x75, 0x74,
0xf5, 0x5b, 0x7d, 0x25, 0x49, 0xab, 0x55, 0x97, 0xa4, 0x6a, 0xa5, 0xc3, 0x82, 0x78, 0x6b, 0x41, 0xeb, 0x1f, 0xfa, 0x87, 0x8a, 0x12, 0xdf, 0xaf, 0x52, 0x52, 0x96, 0xd2, 0x6e, 0x42, 0xbc, 0x82,
0xbc, 0xb5, 0x20, 0x6a, 0xb8, 0xa3, 0x9c, 0x57, 0x8a, 0x59, 0xc9, 0x90, 0xbd, 0x79, 0xb3, 0x72, 0x10, 0xaf, 0x20, 0x44, 0x35, 0x37, 0x98, 0xf3, 0x72, 0x32, 0x4b, 0x16, 0xb2, 0xd5, 0x6e, 0x56,
0x6e, 0x96, 0x08, 0xd4, 0x74, 0x9c, 0x84, 0x79, 0xfe, 0xb8, 0x08, 0xa3, 0x28, 0x4e, 0xa7, 0x43, 0xce, 0xed, 0x1c, 0x14, 0x35, 0x19, 0xc6, 0x34, 0x4d, 0x97, 0x33, 0x1a, 0x86, 0x51, 0x32, 0xee,
0xd7, 0x56, 0xff, 0xaf, 0x53, 0xa7, 0x78, 0x85, 0xa9, 0x65, 0x3c, 0x0e, 0x93, 0x06, 0xaa, 0xd8, 0xb9, 0xb6, 0xfa, 0xbf, 0x30, 0x9d, 0xec, 0x13, 0x44, 0x2d, 0xa3, 0x21, 0x8d, 0x1b, 0xe0, 0xc5,
0x34, 0x1d, 0xea, 0x10, 0x3f, 0x40, 0x77, 0x3b, 0x01, 0x58, 0xbe, 0x08, 0xd3, 0xc7, 0x28, 0xce, 0xc6, 0x49, 0x4f, 0xab, 0xf8, 0x0e, 0xbc, 0x75, 0x03, 0x20, 0xe9, 0x8c, 0x26, 0xcb, 0x30, 0x4a,
0x17, 0x49, 0xf8, 0x30, 0x8c, 0x53, 0x95, 0x6a, 0x93, 0x84, 0xdf, 0x8f, 0x14, 0xb1, 0x46, 0x2c, 0x67, 0x31, 0x7d, 0xe8, 0x45, 0x89, 0x32, 0xb5, 0x51, 0xcc, 0xee, 0xfb, 0x0a, 0x59, 0x23, 0x92,
0xf9, 0x3c, 0x1f, 0x8e, 0x11, 0xfe, 0xf0, 0x67, 0xc5, 0x8c, 0x4f, 0xe6, 0x6b, 0x25, 0xe9, 0xe1, 0x6c, 0x9a, 0xf6, 0x86, 0xa0, 0xfe, 0xb0, 0x9f, 0x25, 0x31, 0x3e, 0x69, 0xaf, 0x25, 0xa3, 0x87,
0xfb, 0x6d, 0xf9, 0xe6, 0x71, 0x14, 0x25, 0x7c, 0x75, 0x1c, 0xa7, 0x93, 0x6c, 0xcd, 0xd9, 0x30, 0xbd, 0xaf, 0xd3, 0x37, 0x8d, 0xc2, 0x30, 0x66, 0xab, 0x57, 0x51, 0x32, 0xe2, 0xc5, 0xca, 0x86,
0x46, 0x54, 0xe9, 0x0a, 0x90, 0xff, 0x8c, 0xdf, 0x6e, 0x35, 0xa8, 0xe4, 0x34, 0xd2, 0x15, 0x20, 0xd1, 0x47, 0x4f, 0x97, 0x81, 0xfc, 0xb5, 0xf5, 0x36, 0xbd, 0x41, 0xc9, 0xa6, 0x95, 0xb7, 0x29,
0xd5, 0x8a, 0xe2, 0xad, 0xa8, 0xde, 0xa9, 0x32, 0xc7, 0x4e, 0x9b, 0xc5, 0xb6, 0x42, 0xf5, 0x0e, 0x3b, 0x14, 0x90, 0xf5, 0x9d, 0xa0, 0xb3, 0xcc, 0xb2, 0x0f, 0x5d, 0x1c, 0x2f, 0x7c, 0x13, 0x9d,
0x8f, 0x28, 0xbe, 0x65, 0x71, 0x14, 0x18, 0x77, 0x22, 0x5c, 0x18, 0x4c, 0x01, 0x05, 0xc6, 0x3c, 0x4b, 0xbe, 0x72, 0x66, 0xda, 0x51, 0x2f, 0xcb, 0x9e, 0x24, 0xef, 0xfc, 0x8f, 0xcc, 0x3b, 0xa4,
0xbc, 0x6f, 0x68, 0x7f, 0xf7, 0x89, 0x98, 0x51, 0xc0, 0x1d, 0x15, 0xcb, 0xa5, 0x4a, 0xca, 0x8a, 0x4b, 0x94, 0x1a, 0xec, 0x70, 0x09, 0x68, 0x53, 0x29, 0x8b, 0x69, 0xe9, 0x39, 0x88, 0x7f, 0x59,
0xbf, 0xa3, 0xd4, 0xc7, 0x93, 0x87, 0x46, 0xb1, 0x19, 0x14, 0x9a, 0x11, 0xca, 0xcc, 0xdb, 0x8f, 0xf3, 0x35, 0x25, 0xaf, 0xa5, 0x00, 0x2f, 0xf8, 0x2c, 0x5f, 0x73, 0x14, 0x69, 0x7f, 0x07, 0x2b,
0xb1, 0x6b, 0x77, 0x82, 0xce, 0x6f, 0xa7, 0x6b, 0x70, 0xcd, 0xbb, 0x4d, 0xf5, 0xb4, 0xac, 0x2b, 0xfd, 0x2b, 0x05, 0x55, 0x13, 0x0c, 0xd0, 0x90, 0xf3, 0xf7, 0x49, 0xf9, 0xdc, 0x62, 0xbf, 0x76,
0x34, 0x2e, 0x94, 0x14, 0x6a, 0x06, 0x13, 0x06, 0xbb, 0x8d, 0xf9, 0xdd, 0x8f, 0xd9, 0x3d, 0x76, 0xa9, 0xc8, 0x16, 0x72, 0xeb, 0xc2, 0xff, 0xf7, 0x91, 0xaf, 0x6d, 0x28, 0x7d, 0x17, 0x2d, 0xb6,
0x20, 0xe6, 0xb2, 0x76, 0x0b, 0xff, 0x8c, 0xb3, 0xd3, 0x45, 0x28, 0x67, 0xec, 0x68, 0x12, 0x27, 0x6a, 0x78, 0x46, 0x58, 0xcc, 0x46, 0x15, 0x67, 0xa2, 0x76, 0x37, 0x65, 0x49, 0xf8, 0x19, 0x4d,
0x49, 0x60, 0x1c, 0xbb, 0x6e, 0x1b, 0xd6, 0x35, 0x50, 0xfb, 0x8d, 0xab, 0x2e, 0x6b, 0xb5, 0x66, 0x63, 0x38, 0x17, 0x29, 0x10, 0x37, 0xe3, 0x11, 0x92, 0xba, 0x72, 0x18, 0x1c, 0xd6, 0xdb, 0x06,
0xfd, 0xdb, 0xce, 0x65, 0xf7, 0xcb, 0x95, 0xd7, 0x61, 0x5e, 0x67, 0xd6, 0xb9, 0xed, 0xcf, 0x1a, 0xf0, 0xcc, 0x54, 0x47, 0x25, 0x19, 0x34, 0xb3, 0xd0, 0x04, 0xcf, 0x4c, 0xf8, 0x09, 0xa3, 0x05,
0x1d, 0xbc, 0xf5, 0x51, 0xa4, 0xd7, 0x6f, 0xad, 0x16, 0xeb, 0x12, 0xdc, 0xac, 0xd1, 0xff, 0x62, 0x89, 0xc2, 0xc0, 0x40, 0x2d, 0x83, 0xa8, 0x00, 0x2d, 0x3a, 0xfb, 0xc8, 0x06, 0x5f, 0xa8, 0x89,
0x34, 0xcf, 0x60, 0xbb, 0xdb, 0xe9, 0xd9, 0x11, 0x44, 0x44, 0x24, 0x29, 0x63, 0x91, 0x09, 0x8d, 0x81, 0x51, 0x91, 0xed, 0x9f, 0x10, 0x23, 0x44, 0xa3, 0x87, 0x5c, 0x8a, 0x99, 0xa8, 0x70, 0xca,
0xb3, 0x7d, 0x3b, 0xdd, 0x39, 0xed, 0x3b, 0xb4, 0xd5, 0x11, 0xac, 0xb2, 0xb6, 0x47, 0xbf, 0xb0, 0xc4, 0xdb, 0x3e, 0x63, 0x73, 0x37, 0x10, 0x3a, 0x5d, 0x8c, 0x0b, 0x70, 0xcd, 0x60, 0x0b, 0x0f,
0x5e, 0x69, 0x43, 0xc2, 0xdf, 0x2e, 0xef, 0x46, 0xc5, 0x11, 0xd5, 0x62, 0x0c, 0x65, 0x0a, 0xd4, 0xe2, 0xfc, 0x40, 0xea, 0x14, 0xda, 0xde, 0x10, 0xaa, 0x07, 0x3a, 0x0c, 0xb2, 0x88, 0xd8, 0xdd,
0x2a, 0x85, 0x3f, 0xe7, 0x85, 0x92, 0xee, 0x56, 0x5a, 0x28, 0x93, 0x93, 0x3e, 0x4a, 0xa0, 0x38, 0xaf, 0xfc, 0x1e, 0x42, 0x17, 0xe2, 0x92, 0x96, 0x0f, 0x7f, 0x8c, 0xe3, 0xc1, 0x8c, 0xca, 0x09,
0x7a, 0x87, 0x31, 0xcd, 0x25, 0xe1, 0x0d, 0x4f, 0x18, 0xaa, 0x2b, 0x49, 0x99, 0xbc, 0x84, 0x9a, 0x79, 0x31, 0x8a, 0xe2, 0x38, 0x30, 0x5e, 0xb9, 0x6e, 0x0b, 0xb6, 0xcb, 0x80, 0xa0, 0xc1, 0x38,
0x85, 0x6a, 0xc7, 0x43, 0x48, 0xa1, 0x56, 0x01, 0x15, 0xa7, 0x8b, 0xa5, 0x64, 0x5a, 0x15, 0x02, 0xef, 0x10, 0xdf, 0x9f, 0x1c, 0x2e, 0x0e, 0x4e, 0x3b, 0xdf, 0xce, 0xbd, 0x03, 0xe2, 0x1d, 0x4c,
0x62, 0x47, 0x7a, 0x2f, 0x4f, 0x97, 0xf3, 0x1b, 0xd0, 0x66, 0xf3, 0x38, 0xa5, 0xae, 0x80, 0x21, 0x0e, 0x16, 0x87, 0x93, 0xc6, 0x01, 0x7c, 0x1d, 0xc2, 0xe9, 0x5e, 0x7c, 0xf9, 0x3e, 0xe9, 0x20,
0x90, 0x02, 0x63, 0x60, 0xac, 0x65, 0xde, 0xbf, 0x85, 0xee, 0x16, 0xaf, 0x34, 0x4b, 0xb9, 0x0e, 0xdc, 0xa4, 0x71, 0xf8, 0xcd, 0x68, 0x1e, 0x83, 0xc0, 0x16, 0xe3, 0xe3, 0x17, 0x40, 0x22, 0x88,
0xfa, 0xbb, 0xa2, 0x40, 0xbb, 0xee, 0x9e, 0xf4, 0xd1, 0x71, 0xd2, 0xa1, 0x10, 0x65, 0x47, 0x68, 0x53, 0x49, 0x08, 0xe5, 0x66, 0x1c, 0x3f, 0x15, 0x22, 0x21, 0xa8, 0x92, 0xb0, 0x87, 0x7f, 0x83,
0x71, 0x96, 0xbc, 0xe8, 0x45, 0x4a, 0xf3, 0xaf, 0x3d, 0x96, 0xf3, 0x54, 0xab, 0xc8, 0xa8, 0xe4, 0xf0, 0x72, 0x11, 0xe2, 0xf4, 0x7a, 0x58, 0x60, 0x94, 0x84, 0x5f, 0x3e, 0xc4, 0x81, 0x97, 0x6c,
0xa0, 0xdc, 0x41, 0xe7, 0x14, 0x39, 0x84, 0xbd, 0xe3, 0xbf, 0x17, 0x49, 0x16, 0x46, 0xa6, 0x45, 0x6a, 0x19, 0xc3, 0x8f, 0x6d, 0x42, 0x8e, 0x37, 0x37, 0x67, 0x0c, 0x0f, 0xf5, 0xce, 0x96, 0x0d,
0xc6, 0x2e, 0xbd, 0x46, 0xd6, 0x3e, 0xaa, 0x59, 0xfd, 0xaf, 0x19, 0x9d, 0x2a, 0x00, 0x1a, 0x1a, 0xbc, 0x06, 0x09, 0xf6, 0x5c, 0x28, 0x40, 0xf6, 0x09, 0xfc, 0x9f, 0xcc, 0x05, 0xd2, 0x1d, 0x3f,
0x76, 0x4e, 0x2c, 0xc1, 0x9a, 0xc9, 0x19, 0x67, 0xa5, 0x87, 0x99, 0xcc, 0x18, 0xea, 0x1e, 0x4b, 0x90, 0x28, 0x21, 0xf3, 0x94, 0x91, 0xa1, 0xe6, 0x3d, 0x47, 0x44, 0x6a, 0xd4, 0xfe, 0x75, 0xa2,
0xf9, 0x1d, 0x53, 0x26, 0x60, 0x39, 0xca, 0x35, 0x17, 0x4e, 0x01, 0x4e, 0xb0, 0x6a, 0x9e, 0x47, 0xd1, 0xf3, 0xaa, 0x95, 0x63, 0x38, 0xd9, 0x08, 0x84, 0x87, 0x72, 0xc2, 0x48, 0x2e, 0x21, 0xc2,
0x0c, 0xc1, 0xc0, 0x60, 0xfa, 0xec, 0x4e, 0xcd, 0x6a, 0x38, 0xc2, 0x1f, 0xcf, 0xc2, 0x74, 0x5a, 0x94, 0xac, 0x89, 0xe4, 0x04, 0x8e, 0x1d, 0x92, 0xb0, 0x3b, 0xa2, 0xec, 0x93, 0xa4, 0x70, 0x5a,
0x80, 0x55, 0xf1, 0xea, 0x38, 0xa8, 0xcd, 0x28, 0x4f, 0x88, 0x4b, 0x66, 0x86, 0x69, 0x44, 0x7d, 0x32, 0x61, 0x23, 0xb0, 0x9e, 0xa1, 0xba, 0x59, 0x48, 0x40, 0xa4, 0xe4, 0x96, 0xc5, 0xfc, 0x4e,
0xdb, 0x24, 0x16, 0x73, 0x8b, 0x08, 0xe8, 0xad, 0xc8, 0x61, 0xef, 0xf0, 0x1c, 0x4b, 0xb6, 0x28, 0xf5, 0x6a, 0x30, 0x9c, 0x3e, 0x9c, 0xd0, 0x64, 0xcc, 0x48, 0x24, 0x53, 0x0d, 0xea, 0x64, 0x0b,
0xe2, 0x58, 0x3b, 0xb2, 0x26, 0x49, 0x92, 0x2d, 0x23, 0x16, 0x8f, 0x49, 0x89, 0x8c, 0x2d, 0x95, 0x22, 0x54, 0x75, 0x1e, 0x9c, 0x8e, 0x70, 0x40, 0xe0, 0xaa, 0x26, 0x4d, 0x42, 0x8c, 0x9c, 0x47,
0xd1, 0x1c, 0x76, 0x74, 0x7a, 0x23, 0xce, 0x90, 0x04, 0x82, 0x02, 0x3a, 0x79, 0x00, 0x27, 0xb6, 0x91, 0x98, 0x5a, 0x88, 0x44, 0x07, 0x03, 0x0e, 0xf9, 0x98, 0x0c, 0x19, 0x19, 0x45, 0x49, 0x94,
0xcc, 0xf9, 0x76, 0x56, 0xbc, 0x7c, 0x91, 0x33, 0x84, 0x3c, 0x72, 0x14, 0xa8, 0x1b, 0xa7, 0x8c, 0x4e, 0x58, 0x68, 0x83, 0x14, 0x73, 0x4c, 0x54, 0x08, 0xc4, 0x30, 0x44, 0x36, 0x38, 0x99, 0xcf,
0xc1, 0x4d, 0x22, 0xc8, 0x1b, 0x5e, 0x61, 0xf9, 0x23, 0x87, 0xfd, 0x9c, 0x49, 0xfe, 0xcc, 0x56, 0x62, 0x4e, 0x43, 0x40, 0x08, 0x6d, 0x1c, 0x0d, 0x59, 0x1a, 0xe1, 0x5a, 0x69, 0xcc, 0xa5, 0x43,
0x18, 0xa7, 0xcb, 0x33, 0xea, 0x5e, 0x4f, 0x9b, 0x4b, 0x58, 0xf0, 0x86, 0x2b, 0xda, 0x69, 0x4c, 0x2e, 0xb8, 0xe2, 0x8e, 0xb0, 0xfb, 0x08, 0x64, 0x94, 0x8c, 0x73, 0x19, 0x97, 0xf1, 0xcd, 0x58,
0x26, 0x5e, 0x2e, 0x24, 0xf4, 0xcb, 0xd1, 0x8f, 0xf2, 0x31, 0x67, 0x13, 0x01, 0x56, 0x2e, 0x53, 0x32, 0x8c, 0x62, 0x85, 0xd0, 0x21, 0x2f, 0xb6, 0x08, 0xfd, 0xc7, 0x65, 0xae, 0xb4, 0x33, 0x95,
0x9a, 0x85, 0x69, 0x9a, 0x49, 0xc6, 0xef, 0xc7, 0x3c, 0xe2, 0x6c, 0xe0, 0xb0, 0xf7, 0xb3, 0x38, 0xe0, 0xa3, 0x86, 0x9f, 0x0a, 0x7d, 0x79, 0x46, 0x5d, 0x10, 0x7c, 0xa7, 0xca, 0xbc, 0x5d, 0xd0,
0x2f, 0x94, 0x61, 0x77, 0xa8, 0x08, 0xf0, 0x01, 0xa4, 0x04, 0xb1, 0xe5, 0x82, 0xda, 0xe1, 0x88, 0x28, 0xa6, 0xb7, 0x31, 0x48, 0x5b, 0x61, 0x7d, 0x4e, 0x57, 0xd4, 0xcf, 0xa0, 0x99, 0x39, 0xa4,
0x7c, 0xa2, 0xf2, 0x58, 0xf0, 0x9b, 0x0c, 0x98, 0x26, 0x6c, 0xa4, 0xda, 0x5c, 0x48, 0x9e, 0x4a, 0xec, 0x7e, 0xf1, 0x62, 0xd7, 0x05, 0x03, 0x2f, 0x03, 0xb9, 0x36, 0xa0, 0x17, 0xc0, 0x7b, 0x46,
0x8b, 0x14, 0xfc, 0x8b, 0x41, 0xb0, 0x95, 0xb9, 0x3a, 0xa4, 0x4e, 0x9b, 0x45, 0xd9, 0xfd, 0x4a, 0xd5, 0x80, 0x2c, 0x7b, 0x08, 0x2b, 0x0e, 0x83, 0x86, 0x67, 0xcf, 0xee, 0x4f, 0x78, 0x1c, 0x2c,
0x07, 0x4c, 0xdd, 0x6a, 0x19, 0x26, 0x54, 0xdf, 0xa8, 0x11, 0xae, 0x57, 0x06, 0xcb, 0x26, 0xeb, 0x57, 0xb6, 0xcc, 0x7e, 0x05, 0x1b, 0xca, 0xa0, 0x34, 0x1d, 0xaf, 0x25, 0xbf, 0x62, 0x18, 0x02,
0x8d, 0x83, 0x86, 0x67, 0x2f, 0xee, 0xcf, 0xb3, 0x24, 0x78, 0x5c, 0xd9, 0xb2, 0x78, 0x0a, 0x78, 0xf2, 0x86, 0xfd, 0x87, 0xce, 0xbf, 0x03, 0x84, 0x69, 0xd9, 0x39, 0xcc, 0x19, 0x4b, 0xc6, 0x72,
0x32, 0xa8, 0xa0, 0x53, 0xdf, 0xfc, 0x23, 0x25, 0x1d, 0xb6, 0x58, 0x38, 0x14, 0x93, 0xff, 0x02, 0x12, 0xe0, 0x3c, 0x47, 0x79, 0x28, 0x7b, 0xfa, 0x71, 0x34, 0x4a, 0x83, 0x73, 0xf0, 0x37, 0x8e,
0x84, 0x69, 0xd9, 0x25, 0xcc, 0x2b, 0x9e, 0x4e, 0xe5, 0x2c, 0x20, 0x3c, 0x47, 0xe5, 0x94, 0x3d, 0x0a, 0x60, 0xcc, 0x2a, 0x68, 0xd3, 0x6f, 0x77, 0x9a, 0xbe, 0xd5, 0x68, 0xdb, 0x19, 0xdb, 0x6f,
0x7f, 0x3d, 0x99, 0xe4, 0xc1, 0x15, 0x2a, 0xa9, 0xa3, 0xd2, 0xd5, 0xac, 0x83, 0x36, 0x5b, 0x7e, 0x85, 0xa0, 0x0f, 0xc1, 0xd5, 0xb5, 0x0d, 0x0e, 0xe5, 0x33, 0x5d, 0xb0, 0xe0, 0x8d, 0x72, 0x7b,
0xb7, 0xd9, 0xb2, 0x1a, 0xfe, 0x68, 0xdd, 0x80, 0x03, 0xf9, 0xf5, 0xc4, 0xa4, 0x16, 0xfc, 0xff, 0x15, 0xaf, 0xe7, 0xb7, 0xd7, 0x5e, 0x0f, 0xdb, 0x35, 0x27, 0xe7, 0x1f, 0xc0, 0x9f, 0xdc, 0xc9,
0x8d, 0xb9, 0x0d, 0x9b, 0xa3, 0x51, 0xe1, 0x4e, 0x92, 0x4d, 0x4d, 0x85, 0x54, 0xfd, 0x20, 0x48, 0x29, 0x1f, 0x87, 0xc7, 0x91, 0x72, 0x6f, 0xbe, 0x6f, 0x7b, 0xfe, 0x5b, 0xcf, 0xb5, 0x3d, 0x04,
0xe2, 0xcf, 0xaf, 0xd3, 0xff, 0x2a, 0x30, 0xf5, 0xc7, 0xc1, 0x3c, 0xbb, 0xe5, 0xef, 0x45, 0x98, 0x84, 0x1f, 0xe2, 0xf9, 0xb6, 0x5f, 0xed, 0xd9, 0x0a, 0x52, 0x85, 0x40, 0x90, 0xf3, 0x2e, 0xfc,
0xcf, 0x10, 0x27, 0x98, 0xb1, 0x91, 0x7d, 0xe7, 0x66, 0x85, 0x0f, 0x77, 0x32, 0x10, 0xe1, 0xf2, 0x75, 0x06, 0x63, 0x5e, 0xf7, 0xd2, 0x3b, 0x38, 0xf5, 0x3a, 0x97, 0x9e, 0x7b, 0xea, 0xf9, 0x97,
0x43, 0xb3, 0xce, 0xf1, 0x7b, 0x70, 0xb4, 0x2a, 0xb4, 0x15, 0x1e, 0x28, 0x22, 0xba, 0x99, 0x24, 0xdd, 0x33, 0x1c, 0xf8, 0xef, 0xc2, 0x29, 0xbe, 0x41, 0x4e, 0xd0, 0xe7, 0xfd, 0xff, 0x72, 0x82,
0x17, 0x88, 0xe0, 0x19, 0x95, 0xb1, 0x34, 0x97, 0x2c, 0xab, 0x29, 0x8f, 0x08, 0x15, 0x0f, 0x3a, 0x44, 0x9d, 0x74, 0x9c, 0x83, 0xae, 0xed, 0x03, 0xc5, 0xd8, 0x50, 0x84, 0x9f, 0x20, 0x3d, 0x4e,
0xb7, 0x32, 0xf1, 0x43, 0x92, 0x98, 0x46, 0xad, 0x91, 0x36, 0xac, 0x51, 0x3c, 0x31, 0x33, 0x07, 0xbb, 0x45, 0xf4, 0x90, 0xaf, 0xf9, 0x3b, 0x51, 0x7d, 0xf8, 0xe9, 0xe7, 0xe3, 0xbe, 0x86, 0xce,
0xf5, 0xf6, 0x02, 0xdf, 0x5b, 0xa6, 0x29, 0xed, 0xcc, 0x0a, 0xce, 0x1e, 0x25, 0x59, 0xed, 0x07, 0xa6, 0x66, 0xe3, 0x0a, 0xfa, 0xdc, 0x6b, 0x3b, 0x9e, 0xdd, 0x75, 0xdc, 0xee, 0x09, 0xb4, 0xfc,
0x29, 0x45, 0x8c, 0x2e, 0x89, 0x9b, 0x06, 0x62, 0x35, 0x6c, 0x48, 0xb1, 0xe4, 0xd8, 0xf9, 0x0d, 0x03, 0xd5, 0x24, 0xd0, 0x6c, 0x1d, 0x42, 0xd3, 0xf3, 0xb1, 0xd9, 0x86, 0x96, 0xdf, 0x3a, 0xf3,
0x2b, 0x08, 0xf8, 0xf3, 0xe7, 0x26, 0x78, 0xba, 0xd6, 0xca, 0xb2, 0x33, 0x27, 0x51, 0x42, 0x9e, 0x3a, 0x4e, 0xb7, 0x6b, 0x1f, 0x3a, 0x6d, 0x58, 0x00, 0x7e, 0xba, 0x30, 0xd6, 0xb5, 0x8f, 0x14,
0x79, 0xbd, 0x72, 0xd6, 0x16, 0x96, 0xfe, 0x12, 0x22, 0xea, 0xfc, 0xcc, 0x7d, 0xfe, 0x9c, 0x9f, 0xb8, 0x1a, 0x39, 0x72, 0xfc, 0xc3, 0x33, 0x00, 0x87, 0xa6, 0xe7, 0xaa, 0x76, 0x0b, 0x80, 0x00,
0xb6, 0x7c, 0xdf, 0x02, 0x1b, 0x93, 0x42, 0x2b, 0x0d, 0xbc, 0x51, 0x7a, 0x1a, 0x78, 0xdd, 0xe7, 0x12, 0xe7, 0x1e, 0x60, 0x13, 0xd1, 0x9c, 0x40, 0xf3, 0xd0, 0xcf, 0x70, 0x1f, 0x38, 0x47, 0x9d,
0xcf, 0xe5, 0x29, 0x86, 0x27, 0x27, 0x96, 0x8a, 0x30, 0x25, 0xda, 0x95, 0x96, 0xec, 0x24, 0xb5, 0x62, 0x45, 0x4d, 0xc6, 0x39, 0xcc, 0xf2, 0x5a, 0x30, 0xeb, 0xd0, 0x43, 0x64, 0xde, 0x11, 0x22,
0xfe, 0xf8, 0xc3, 0x94, 0x41, 0x6a, 0x8d, 0x78, 0x82, 0x94, 0x96, 0x01, 0x2f, 0x34, 0x0c, 0xb1, 0x3b, 0xec, 0x9e, 0x1d, 0x61, 0x2f, 0x2c, 0x74, 0xd4, 0x3a, 0x45, 0xb0, 0x4b, 0x44, 0xd3, 0x3d,
0xad, 0x1a, 0x27, 0xa6, 0xd7, 0xed, 0xf5, 0x7a, 0x2d, 0xcf, 0xff, 0x5e, 0x1b, 0x10, 0xe9, 0x97, 0x5b, 0x03, 0x97, 0xf6, 0xa0, 0x5f, 0xdc, 0x9e, 0x41, 0x35, 0x3f, 0x8e, 0x4c, 0xbc, 0x3f, 0xff,
0xcd, 0x4d, 0xeb, 0xf4, 0xd4, 0xb5, 0x1c, 0x99, 0xbd, 0x83, 0xe8, 0xe9, 0x14, 0x30, 0x96, 0x83, 0xdb, 0x54, 0xbb, 0x74, 0x75, 0x8f, 0xa3, 0xaf, 0x1f, 0x93, 0x3c, 0x0c, 0xd3, 0xd7, 0xf8, 0x29,
0xde, 0xee, 0x9d, 0x0c, 0x85, 0x34, 0xbb, 0x36, 0x8a, 0xb3, 0x65, 0xc7, 0x01, 0xbe, 0xd5, 0x0c, 0x5f, 0xb0, 0x0b, 0x41, 0xd3, 0xc9, 0x90, 0x26, 0xd0, 0x63, 0x83, 0xa3, 0x3e, 0x31, 0x4b, 0x48,
0xca, 0x77, 0xd2, 0xde, 0x51, 0x0d, 0xe0, 0xcf, 0xe1, 0x1c, 0x79, 0x50, 0xb3, 0x8c, 0x1d, 0x3b, 0x99, 0xc3, 0x61, 0x19, 0x26, 0xff, 0x68, 0x56, 0xd1, 0xff, 0x0c, 0xe8, 0xad, 0x52, 0x5a, 0x40,
0xaa, 0x46, 0x54, 0x45, 0x92, 0x1b, 0xca, 0xa0, 0xe3, 0xe4, 0x87, 0x6d, 0x64, 0xf3, 0x27, 0x00, 0xcd, 0x63, 0xb6, 0x0c, 0x0c, 0xc3, 0x5a, 0x82, 0x29, 0x11, 0x81, 0x26, 0xcd, 0x83, 0x97, 0x1e,
0x40, 0xd3, 0xb0, 0xc3, 0x03, 0x00, 0x3a, 0x02, 0x0c, 0x1d, 0x84, 0x04, 0x03, 0x67, 0x5f, 0xdc, 0xc4, 0x64, 0x49, 0x2a, 0x09, 0xad, 0xb0, 0xfb, 0xcf, 0x39, 0x13, 0x0f, 0x9f, 0xc1, 0x21, 0x0f,
0x52, 0x28, 0xc4, 0x39, 0x12, 0x9c, 0x0b, 0x98, 0x89, 0x8a, 0xa2, 0x61, 0xa3, 0xc4, 0x2d, 0x7e, 0xc1, 0x55, 0xbf, 0x8d, 0x63, 0xd3, 0xa8, 0xdc, 0x7b, 0x0d, 0xab, 0x1f, 0x8d, 0x4c, 0xea, 0xc0,
0x5a, 0x0a, 0x14, 0x47, 0xf1, 0x46, 0x64, 0x0b, 0x45, 0x8f, 0x0a, 0x04, 0xfc, 0x31, 0x91, 0x4f, 0xe5, 0xf3, 0x3d, 0x1d, 0x4e, 0x4c, 0x53, 0xda, 0xc2, 0x0a, 0x8e, 0x97, 0x12, 0xe5, 0xf4, 0x56,
0x87, 0xef, 0xf7, 0xdc, 0x3a, 0x51, 0x0c, 0x4e, 0x0c, 0xec, 0x5d, 0x85, 0x5d, 0x13, 0x65, 0x18, 0x4a, 0x11, 0x41, 0x40, 0xc6, 0x4c, 0x23, 0xa4, 0x92, 0x36, 0xa4, 0x98, 0x33, 0x08, 0xe0, 0x0c,
0xb5, 0xb5, 0xc2, 0x32, 0x89, 0xa3, 0x8b, 0x83, 0x32, 0x80, 0x61, 0x27, 0x8e, 0xde, 0xdf, 0x42, 0x2b, 0x08, 0xd8, 0xde, 0x9e, 0x09, 0x6b, 0xba, 0xd6, 0x0a, 0x38, 0x71, 0x62, 0x45, 0xe9, 0xb1,
0x8c, 0x76, 0x4c, 0xa6, 0xfb, 0x77, 0x02, 0x5a, 0x9b, 0xec, 0x8d, 0x9e, 0xaa, 0x9b, 0x2c, 0xd9, 0xd7, 0xcd, 0x7b, 0x6d, 0x6e, 0xe9, 0xc4, 0x05, 0x62, 0x67, 0xc7, 0xee, 0xde, 0x1e, 0x1b, 0xf8,
0xa3, 0x8c, 0xe6, 0x67, 0xeb, 0x7a, 0x58, 0xa6, 0xcb, 0x7e, 0xd0, 0x42, 0xef, 0xf1, 0xe2, 0x3c, 0xed, 0xb6, 0x05, 0xcb, 0x98, 0xe8, 0xaa, 0x92, 0xc0, 0xeb, 0x27, 0x83, 0xc0, 0xeb, 0xec, 0xed,
0xf9, 0x6c, 0x15, 0x42, 0xe7, 0x55, 0x6f, 0xe6, 0x87, 0x44, 0x5b, 0x3b, 0x35, 0xdf, 0x96, 0x70, 0x89, 0x01, 0x34, 0xf7, 0xf7, 0x2d, 0xe5, 0xb1, 0x14, 0x69, 0xe7, 0x9a, 0xb2, 0xfd, 0xc4, 0x7a,
0xaf, 0x6b, 0xf3, 0x27, 0x98, 0x67, 0x09, 0x71, 0x07, 0x48, 0xc5, 0xd6, 0x55, 0xc3, 0x43, 0xf2, 0x7c, 0x34, 0x45, 0x90, 0x58, 0x7d, 0x16, 0xc3, 0x11, 0x2b, 0x02, 0xd6, 0x37, 0x8c, 0x20, 0x90,
0x03, 0x2b, 0x85, 0xc4, 0x51, 0x55, 0x62, 0x49, 0xc9, 0x21, 0x29, 0x39, 0x90, 0x3b, 0x51, 0x55, 0xb0, 0x08, 0x70, 0xff, 0xca, 0xd8, 0x37, 0xbd, 0x4e, 0xb7, 0xdb, 0xf5, 0xbd, 0xf6, 0xcf, 0x5a,
0xfc, 0xda, 0x37, 0x9a, 0x61, 0x47, 0x4a, 0x70, 0x3d, 0xb9, 0x57, 0xe6, 0xe8, 0xb0, 0xcc, 0x1c, 0x8e, 0x70, 0x0e, 0xf1, 0xa9, 0x69, 0x0d, 0x06, 0xae, 0xe5, 0x48, 0xfe, 0x19, 0x88, 0x4f, 0xc6,
0x19, 0xad, 0x31, 0xcf, 0x49, 0x71, 0x3a, 0x8e, 0x20, 0xf8, 0x03, 0x62, 0x6e, 0xe2, 0x68, 0xd3, 0x00, 0x63, 0x41, 0x4c, 0x1c, 0x7e, 0x96, 0x54, 0x48, 0xb3, 0x63, 0x1b, 0xae, 0x61, 0x59, 0x99,
0x2d, 0x29, 0xbc, 0xa0, 0x88, 0x81, 0xb5, 0xee, 0x87, 0xd6, 0xab, 0x05, 0x28, 0x5c, 0x2c, 0xd0, 0xa4, 0xe2, 0x60, 0xf8, 0xde, 0x34, 0x30, 0x3e, 0x01, 0x31, 0xc4, 0x8e, 0x72, 0xd9, 0xbf, 0xd1,
0xfa, 0x9c, 0xcf, 0xe2, 0x24, 0x32, 0x13, 0xeb, 0xe0, 0x52, 0x7c, 0x78, 0x09, 0x49, 0xe0, 0x3e, 0x29, 0x58, 0x6d, 0x45, 0x44, 0x76, 0xec, 0xa0, 0x77, 0xaf, 0xd0, 0x26, 0xd6, 0x0b, 0x58, 0x30,
0x0b, 0xe4, 0xf3, 0xe7, 0x30, 0x92, 0x7a, 0x1e, 0x02, 0x8c, 0x2c, 0xbb, 0x6a, 0xce, 0x79, 0xf8, 0x9e, 0xee, 0x16, 0x96, 0xcd, 0x9e, 0x00, 0x00, 0x9c, 0x86, 0x2d, 0x77, 0x00, 0x68, 0x7d, 0x30,
0x99, 0x5f, 0xf1, 0x17, 0x22, 0x9c, 0x9a, 0x54, 0x5c, 0x28, 0x9d, 0x2d, 0xf8, 0x8d, 0xcb, 0xf7, 0xb4, 0xfe, 0x21, 0x0c, 0x6c, 0xfd, 0xfb, 0x05, 0x2a, 0x06, 0x9c, 0x84, 0x0c, 0x82, 0x25, 0x90,
0x59, 0x96, 0xc8, 0x78, 0xa1, 0xad, 0x58, 0x5d, 0xab, 0xc7, 0xa0, 0x59, 0x29, 0xb8, 0xdb, 0x2b, 0x17, 0x1e, 0x81, 0x86, 0x0d, 0xb1, 0xc7, 0xec, 0x6f, 0x73, 0x01, 0x47, 0xa1, 0xf8, 0x24, 0xf8,
0x8f, 0xda, 0x95, 0xfc, 0x4f, 0xd6, 0xda, 0x9d, 0x9d, 0x92, 0x57, 0x2b, 0xaf, 0xa0, 0xca, 0xbb, 0x4c, 0xe1, 0x43, 0xf7, 0xe3, 0x60, 0x9c, 0xfc, 0xb4, 0xe6, 0xfe, 0xcc, 0xac, 0x7d, 0xb5, 0xc0,
0x2e, 0xe2, 0x74, 0xbe, 0xf4, 0x51, 0x7c, 0x82, 0x64, 0x8e, 0xe0, 0xd8, 0xee, 0xc7, 0xbc, 0x5e, 0xbe, 0x01, 0x6e, 0x29, 0x13, 0x4c, 0xa4, 0x04, 0x13, 0x25, 0xb3, 0xb9, 0x44, 0x05, 0x71, 0xf4,
0x1f, 0xed, 0x5a, 0x9e, 0x59, 0x96, 0xb6, 0xfd, 0xe8, 0xcf, 0xe1, 0x15, 0x73, 0xc0, 0xde, 0xef, 0xa9, 0xa3, 0x04, 0x60, 0xd8, 0x91, 0xb3, 0xa0, 0xf1, 0x9c, 0x05, 0x12, 0x5a, 0x1b, 0x22, 0xd3,
0xd1, 0xcc, 0x56, 0xb4, 0x9e, 0x5e, 0x7c, 0xa2, 0xc8, 0x65, 0x65, 0x9a, 0xa6, 0x81, 0x82, 0x7d, 0xf7, 0x6e, 0x04, 0x2a, 0x44, 0xf6, 0x49, 0x77, 0x55, 0x45, 0x16, 0x6d, 0x61, 0x46, 0xaf, 0x67,
0x6a, 0x57, 0xb1, 0xc3, 0xaf, 0xd4, 0xac, 0xb4, 0x30, 0xe0, 0xc7, 0xf0, 0x13, 0x78, 0x93, 0x09, 0xcf, 0x67, 0x98, 0xd6, 0xcb, 0x8d, 0x67, 0x3b, 0x68, 0xc6, 0xf7, 0x70, 0x76, 0x12, 0x7f, 0xcd,
0x3f, 0xa6, 0x18, 0xad, 0x36, 0xa1, 0xa3, 0x93, 0x21, 0x30, 0xe8, 0xe3, 0x33, 0x14, 0x8d, 0x72, 0x77, 0x33, 0x2d, 0xef, 0x66, 0xba, 0x8b, 0xb4, 0x62, 0x53, 0xd3, 0x3a, 0x85, 0x5b, 0xb7, 0x36,
0xda, 0x44, 0xd7, 0xa7, 0x3e, 0xda, 0x0c, 0xfb, 0xf5, 0xcd, 0xef, 0xb4, 0xcf, 0x63, 0x52, 0xc4, 0x7d, 0x62, 0x71, 0x1e, 0xe3, 0xea, 0x00, 0x52, 0x92, 0x75, 0x59, 0xf0, 0x40, 0xf9, 0x8e, 0x91,
0x3c, 0x37, 0x15, 0x3d, 0x6b, 0xe3, 0x84, 0x8f, 0xdc, 0x96, 0x9f, 0xc8, 0x0d, 0x75, 0x8a, 0x27, 0x8c, 0xe2, 0xb0, 0x4c, 0xb1, 0x40, 0x2b, 0x11, 0x68, 0x25, 0xa0, 0xdf, 0x61, 0x99, 0xfc, 0x4a,
0xc1, 0x6f, 0x36, 0xfb, 0xdb, 0xa3, 0x5c, 0xe1, 0x87, 0xaf, 0x16, 0xf7, 0xbf, 0xed, 0xf0, 0x3c, 0x6e, 0xc5, 0xb0, 0x43, 0x45, 0xb8, 0xee, 0xdc, 0x4a, 0x73, 0xb8, 0x9b, 0x66, 0x06, 0xa6, 0xad,
0x09, 0x0c, 0xcb, 0xa8, 0x85, 0xf0, 0xb6, 0xcd, 0x82, 0x3a, 0xc2, 0x26, 0xb6, 0xb6, 0xca, 0x38, 0x67, 0x9e, 0x20, 0xe3, 0x98, 0x46, 0x44, 0xf8, 0x1d, 0x64, 0xae, 0xf5, 0x68, 0x9d, 0x98, 0x50,
0xed, 0xeb, 0xdc, 0xa1, 0x49, 0x7a, 0x0b, 0xa7, 0x21, 0x01, 0x55, 0x63, 0x51, 0x57, 0xa0, 0xfd, 0xf3, 0x82, 0x4c, 0x07, 0x0a, 0xde, 0x77, 0x8d, 0x97, 0x3d, 0x11, 0x9d, 0x41, 0x98, 0x16, 0x9e,
0x0d, 0xc5, 0x1e, 0x44, 0x5b, 0x45, 0x84, 0x93, 0x8b, 0x71, 0x71, 0x1a, 0x59, 0x8b, 0x8c, 0x75, 0x4c, 0xa2, 0x38, 0x34, 0x23, 0x6b, 0xe7, 0x50, 0xbc, 0x7b, 0x08, 0x8c, 0xc0, 0x7d, 0x19, 0x88,
0x50, 0x50, 0x0c, 0xa8, 0x72, 0x51, 0x63, 0xb5, 0x38, 0xc0, 0xe9, 0x56, 0xd5, 0xe8, 0x7d, 0xdc, 0xbd, 0x3d, 0x10, 0x92, 0xfa, 0xdd, 0x05, 0x18, 0x5a, 0x76, 0x59, 0x9c, 0x53, 0xfa, 0x95, 0x9d,
0xaa, 0x2d, 0x51, 0xf5, 0x7c, 0xb4, 0x92, 0x8d, 0xa0, 0x47, 0x4d, 0x80, 0x0c, 0x5c, 0xf4, 0x2d, 0xb3, 0x77, 0x82, 0x8e, 0x4d, 0xf4, 0x32, 0x68, 0xce, 0x16, 0xec, 0x1b, 0x93, 0x17, 0x9c, 0xc7,
0xdf, 0xd2, 0xa9, 0x65, 0x81, 0x70, 0x94, 0xff, 0xec, 0x14, 0x23, 0x55, 0x64, 0xc3, 0x20, 0x6b, 0x32, 0x9a, 0x69, 0x29, 0x96, 0xc7, 0xaa, 0x3a, 0x68, 0x96, 0xdc, 0x6f, 0x7d, 0x64, 0xa9, 0xb7,
0xa4, 0x27, 0xde, 0xa6, 0xfd, 0x8b, 0x4d, 0x61, 0x3d, 0xa2, 0xfb, 0x10, 0x7f, 0xfc, 0x71, 0x87, 0x92, 0xfd, 0xa0, 0xd3, 0xdd, 0x08, 0xc1, 0xd8, 0x86, 0x0b, 0xd6, 0x88, 0xb9, 0x0a, 0xe5, 0xd8,
0xcf, 0x8d, 0xec, 0xce, 0xd1, 0x42, 0x3a, 0x0b, 0xa1, 0x06, 0x2f, 0xf8, 0x24, 0x5c, 0x26, 0x44, 0x95, 0xb8, 0x06, 0xca, 0x1c, 0xc1, 0x20, 0x7e, 0x1d, 0xb2, 0xaa, 0xa3, 0xb4, 0x2b, 0x76, 0x66,
0x4d, 0x36, 0x04, 0x69, 0x8a, 0xb9, 0x0f, 0xb6, 0x0c, 0x36, 0xe3, 0x79, 0x86, 0x2f, 0x87, 0x37, 0x59, 0x5a, 0xf6, 0xfd, 0x1f, 0x9b, 0x97, 0xf5, 0xc1, 0xec, 0xed, 0x3b, 0xca, 0x6d, 0x85, 0xeb,
0x59, 0xfe, 0x72, 0xdd, 0xb4, 0x05, 0xb2, 0x61, 0x82, 0x09, 0x50, 0x10, 0xa3, 0x58, 0xa9, 0xc6, 0xe9, 0xc1, 0x27, 0x9c, 0x1c, 0xb7, 0x8a, 0xe3, 0x49, 0xc1, 0x3e, 0x75, 0xbc, 0xd8, 0xc9, 0x33,
0xe7, 0x2e, 0x74, 0x33, 0x54, 0x6d, 0x9a, 0x9d, 0x25, 0xd1, 0xfb, 0x02, 0x9e, 0x3f, 0x1d, 0xf0, 0x3e, 0x8b, 0x66, 0x02, 0xbc, 0x4a, 0xae, 0x61, 0x6d, 0x14, 0xe1, 0x15, 0x85, 0xd6, 0x6a, 0xad,
0x05, 0x59, 0x55, 0xb3, 0xf4, 0x50, 0x57, 0xae, 0x0d, 0x05, 0xd4, 0x3b, 0x3d, 0xc0, 0xee, 0x50, 0x3a, 0xda, 0x18, 0x02, 0x03, 0x33, 0x07, 0x54, 0x34, 0xf2, 0x6e, 0x13, 0xae, 0x18, 0xea, 0xce,
0x82, 0x74, 0x3b, 0xff, 0x90, 0xf8, 0xaa, 0x78, 0xad, 0xfa, 0x84, 0xc0, 0x1d, 0x96, 0x54, 0xbc, 0x6c, 0xd8, 0x1f, 0x6f, 0xff, 0xc4, 0x23, 0x1e, 0x3a, 0x45, 0xc4, 0x52, 0x53, 0xe1, 0xb3, 0xd6,
0x41, 0xab, 0xba, 0xd0, 0x1b, 0x56, 0x5e, 0xda, 0xca, 0x57, 0xfb, 0x7a, 0x83, 0x50, 0xa5, 0x56, 0x9b, 0x70, 0x05, 0x47, 0xec, 0x35, 0x6e, 0x43, 0x15, 0xe3, 0x7e, 0x70, 0x63, 0x93, 0xd7, 0x4b,
0x41, 0xa3, 0xda, 0x14, 0x14, 0x71, 0xf3, 0x97, 0xca, 0x88, 0x62, 0x52, 0xe5, 0xf8, 0x55, 0x62, 0xb9, 0x82, 0xbf, 0xd8, 0x6a, 0x76, 0x7f, 0xb3, 0xb1, 0xe6, 0x7e, 0x60, 0x58, 0x46, 0x45, 0x85,
0xb5, 0x8d, 0xed, 0x3f, 0xa0, 0xb3, 0x55, 0x13, 0x0f, 0x91, 0xe1, 0x4f, 0xf6, 0x6e, 0xa5, 0x35, 0xeb, 0x32, 0x0b, 0xaa, 0x13, 0xd6, 0xba, 0x55, 0x73, 0xe3, 0x18, 0x37, 0x30, 0x07, 0x3b, 0xf1,
0x76, 0x37, 0x0b, 0xbe, 0xbb, 0x49, 0x54, 0x62, 0x3c, 0xc1, 0xc6, 0x10, 0x39, 0x59, 0xaa, 0x62, 0x8b, 0x8e, 0x29, 0x02, 0x95, 0x75, 0x51, 0x7b, 0xa0, 0xed, 0xe1, 0xc5, 0x96, 0x89, 0xb6, 0xd2,
0x63, 0xb9, 0x08, 0xd2, 0x65, 0x92, 0xd8, 0xeb, 0x09, 0xca, 0x20, 0x35, 0xb5, 0xe2, 0xe5, 0x14, 0x08, 0x27, 0x15, 0xc3, 0xac, 0x8a, 0x50, 0xd1, 0x8c, 0x42, 0x29, 0x50, 0x07, 0x94, 0xbb, 0xa8,
0xc2, 0x34, 0x0d, 0x4a, 0xf4, 0xc3, 0x79, 0x66, 0xf2, 0x80, 0x7f, 0x3d, 0xac, 0xa1, 0x61, 0x19, 0x2c, 0x35, 0xdb, 0xb1, 0xd2, 0x42, 0xf9, 0xe8, 0x27, 0xc9, 0x2c, 0x99, 0x1f, 0x20, 0xc0, 0xe3,
0xca, 0x55, 0x21, 0xb6, 0x25, 0x88, 0x57, 0x95, 0xd2, 0xb3, 0xab, 0xdf, 0xe3, 0xb6, 0x69, 0xd4, 0x5f, 0x06, 0xae, 0x2d, 0xbe, 0x2b, 0x2a, 0xe3, 0x81, 0x70, 0xd4, 0x86, 0xd9, 0x14, 0x5a, 0xca,
0x9d, 0x89, 0x61, 0xff, 0x86, 0xca, 0xf7, 0x64, 0x34, 0xaf, 0xd8, 0x90, 0x3d, 0x01, 0x43, 0xdb, 0xab, 0x26, 0x01, 0x6f, 0xd0, 0x7d, 0x6f, 0x1d, 0xea, 0xc5, 0xa6, 0xb0, 0x96, 0x10, 0x28, 0x88,
0x81, 0xb5, 0xfa, 0xad, 0x62, 0xad, 0x7a, 0x47, 0x52, 0x94, 0x04, 0x6a, 0x8d, 0xf0, 0xa5, 0x4a, 0xc7, 0xc7, 0x3b, 0xb8, 0x95, 0xf2, 0x3b, 0x47, 0x53, 0xe5, 0xcc, 0x84, 0x6a, 0xbc, 0x63, 0x23,
0x9d, 0x11, 0xa2, 0xf7, 0x45, 0x25, 0x2a, 0x82, 0x6a, 0x0d, 0xb3, 0x69, 0xf5, 0x7c, 0xe3, 0x79, 0x3a, 0x8f, 0x11, 0x9b, 0x6c, 0x08, 0x64, 0x0d, 0xfa, 0xfe, 0x80, 0x00, 0x6a, 0xdd, 0x9e, 0x72,
0xb5, 0x5d, 0x6e, 0x63, 0xd4, 0xc2, 0x44, 0x73, 0x2b, 0x23, 0x04, 0xb1, 0xb1, 0x21, 0x51, 0x8d, 0xb8, 0xc3, 0x7f, 0xe2, 0xe9, 0x87, 0x22, 0x66, 0x0b, 0x64, 0xc3, 0x84, 0x45, 0x60, 0x0a, 0x28,
0xe1, 0x3f, 0x4b, 0x68, 0x1d, 0x6a, 0xdb, 0xe4, 0xbe, 0x95, 0xd0, 0x81, 0xc8, 0xc5, 0x37, 0x74, 0x25, 0x8c, 0x94, 0x15, 0x72, 0x13, 0xba, 0x99, 0xa8, 0x28, 0xcd, 0xe6, 0x71, 0x78, 0x91, 0xc1,
0x1a, 0x71, 0xa1, 0xd3, 0xf7, 0x43, 0xe0, 0xb9, 0xc5, 0xc4, 0x87, 0x9a, 0x19, 0x0e, 0x55, 0x4c, 0xb3, 0xa7, 0x35, 0x3c, 0x43, 0x8b, 0x4e, 0x2a, 0x6b, 0x6a, 0x57, 0xb5, 0xc6, 0xf0, 0x32, 0xc8,
0xe7, 0xbe, 0x51, 0xc3, 0x2f, 0x90, 0x7f, 0xfd, 0x36, 0xe4, 0x87, 0x13, 0xaf, 0x6d, 0x4b, 0xd5, 0x06, 0x30, 0xdc, 0xc9, 0x40, 0x3a, 0x07, 0xbf, 0xc8, 0x49, 0x94, 0x7e, 0x54, 0x81, 0x41, 0xe0,
0x6f, 0x4a, 0x8a, 0x44, 0x83, 0x5e, 0x52, 0x34, 0x94, 0x97, 0xef, 0xaf, 0x5e, 0x05, 0xdf, 0xa9, 0xf6, 0x72, 0x2c, 0xde, 0x91, 0x5f, 0x1e, 0xe8, 0xf6, 0x4a, 0x1f, 0x2d, 0xb5, 0x39, 0xdb, 0x82,
0x93, 0xd2, 0xda, 0xc1, 0x67, 0xab, 0x83, 0x7f, 0x06, 0xbb, 0x9f, 0x27, 0x69, 0x1e, 0x18, 0x74, 0x81, 0x44, 0xd9, 0x52, 0x86, 0xa3, 0x1c, 0x05, 0x64, 0x8a, 0xf2, 0x7f, 0xf2, 0x1b, 0x6a, 0x91,
0x55, 0x37, 0x6c, 0x36, 0xef, 0xee, 0xee, 0x9c, 0xbb, 0xb6, 0x93, 0x89, 0x69, 0xb3, 0xe5, 0xba, 0xf2, 0x8a, 0xcf, 0x22, 0xab, 0x9c, 0x64, 0x7f, 0x01, 0x4f, 0xcd, 0x09, 0xee, 0x42, 0xc3, 0x9e,
0x2e, 0x9d, 0x61, 0x1a, 0x4c, 0x7d, 0x5f, 0x07, 0x46, 0x5b, 0x9d, 0x98, 0xe9, 0xa3, 0xd5, 0xe2, 0x0c, 0xd6, 0x72, 0x69, 0x6c, 0x9e, 0x0e, 0x6c, 0xf3, 0x54, 0x28, 0xe9, 0x78, 0x04, 0x27, 0x41,
0xad, 0x38, 0x36, 0x2d, 0x4e, 0x38, 0xe8, 0xf0, 0x74, 0x78, 0xdc, 0xef, 0x03, 0xd1, 0x1d, 0x61, 0xe8, 0xf0, 0x44, 0xe9, 0xc6, 0x7c, 0x16, 0x24, 0xf3, 0x38, 0xb6, 0x8b, 0x0e, 0x34, 0x19, 0xd5,
0x52, 0x64, 0x9f, 0xf9, 0x90, 0x61, 0x82, 0xfe, 0x2b, 0x27, 0x8a, 0x23, 0x62, 0xd6, 0xa0, 0x23, 0xb5, 0x62, 0x79, 0x17, 0xa8, 0x69, 0x12, 0xe4, 0xd3, 0x77, 0x1b, 0x96, 0xc9, 0x02, 0xf6, 0xbc,
0xe9, 0x62, 0x2a, 0x82, 0xbc, 0xa1, 0x10, 0xe1, 0xc3, 0x90, 0xb9, 0x8e, 0x67, 0xb3, 0xfe, 0x48, 0x5a, 0x03, 0x87, 0xb9, 0x2a, 0x97, 0x89, 0x88, 0x6a, 0x14, 0xc4, 0xab, 0x92, 0xaf, 0xd9, 0xe4,
0x1f, 0xbd, 0x0e, 0xec, 0xf6, 0x75, 0xe7, 0xb2, 0x73, 0xdd, 0xbd, 0xf4, 0xaf, 0xbd, 0xc1, 0x0f, 0x6f, 0x59, 0x17, 0x8d, 0x2a, 0x6e, 0x1a, 0xf6, 0x0d, 0xb8, 0xba, 0x27, 0xb5, 0x79, 0x45, 0x7a,
0x2d, 0xbb, 0x05, 0xb9, 0x5d, 0xdb, 0x65, 0x3d, 0xbb, 0xe5, 0x5d, 0x7a, 0xbd, 0xca, 0x8c, 0x37, 0xe4, 0x09, 0x18, 0xf4, 0xff, 0xd6, 0xea, 0xa6, 0x24, 0xad, 0x6a, 0x08, 0x92, 0xb9, 0x04, 0x8c,
0xb0, 0xbd, 0x01, 0x00, 0x5b, 0x2e, 0x30, 0x3c, 0xff, 0xba, 0x7d, 0x39, 0xb8, 0xea, 0xd9, 0x5d, 0x85, 0xc2, 0x68, 0x01, 0x87, 0x23, 0x6a, 0xef, 0xbb, 0x92, 0x56, 0x04, 0x65, 0xa7, 0x65, 0xe3,
0x00, 0x01, 0xf3, 0xb2, 0x77, 0xdd, 0x05, 0xb1, 0xfe, 0xb5, 0xd7, 0xbb, 0xf4, 0xbc, 0xeb, 0x3e, 0xe8, 0xc9, 0x7a, 0xe7, 0xd5, 0xf9, 0x58, 0x9f, 0x51, 0x51, 0x13, 0xbd, 0x5a, 0xae, 0x21, 0xa0,
0xd6, 0x60, 0x2c, 0xfd, 0xea, 0xe3, 0xd5, 0x6b, 0xff, 0xcf, 0xfa, 0xc4, 0xf6, 0x3b, 0xd8, 0x4d, 0x1b, 0x6b, 0x14, 0x65, 0x1d, 0xfe, 0x51, 0x44, 0x85, 0xaa, 0xd5, 0xd1, 0x7d, 0x2f, 0xa2, 0x1d,
0xd7, 0x9c, 0xf2, 0xbc, 0x3c, 0x30, 0xca, 0x9b, 0x0d, 0x63, 0xbd, 0xa6, 0x8a, 0x53, 0xe1, 0x5c, 0x9a, 0x6b, 0x0b, 0x88, 0x63, 0x98, 0xd0, 0xe6, 0xfb, 0x47, 0xe0, 0xb9, 0x59, 0xc7, 0x1f, 0x15,
0x5d, 0x78, 0xcb, 0x15, 0xec, 0xad, 0xc5, 0xc2, 0xaf, 0x7a, 0x21, 0x72, 0xe8, 0xf4, 0xa6, 0xd6, 0x31, 0xec, 0xf2, 0x98, 0xce, 0x7d, 0xa3, 0x32, 0x3f, 0x9b, 0xfc, 0xe5, 0xfb, 0x26, 0x3f, 0xec,
0xf3, 0xa2, 0x3a, 0xc8, 0xa7, 0x1b, 0x7f, 0xe9, 0xe8, 0xd3, 0xde, 0x9f, 0xb3, 0x88, 0x3b, 0xba, 0xc3, 0x9d, 0x5a, 0xaa, 0x00, 0x53, 0xa2, 0x26, 0x1a, 0xf8, 0x91, 0x40, 0x04, 0x79, 0x7a, 0x71,
0xbe, 0x6c, 0x50, 0xb7, 0xe3, 0xf3, 0x10, 0xe8, 0x16, 0xdc, 0x81, 0xe4, 0x79, 0x0a, 0x7d, 0x07, 0x7e, 0x96, 0x25, 0x36, 0xb6, 0x64, 0x2e, 0xc8, 0xfd, 0x34, 0x4e, 0xd2, 0xc0, 0xc0, 0x9a, 0x7a,
0xd8, 0xda, 0xce, 0xe1, 0xaf, 0x62, 0x1f, 0xe0, 0xfd, 0x8d, 0x5c, 0xf7, 0xb4, 0xf7, 0xfb, 0x3b, 0xaf, 0xd9, 0xbc, 0xbb, 0xbb, 0x73, 0xee, 0x5a, 0x0e, 0x17, 0xe3, 0xa6, 0xef, 0xba, 0x2e, 0x5e,
0x98, 0x27, 0x3e, 0xa4, 0xea, 0xe5, 0x79, 0x2f, 0xfa, 0xaa, 0x72, 0x20, 0xb5, 0xd5, 0x9d, 0x3d, 0xcd, 0x0d, 0xa2, 0xee, 0xd2, 0x81, 0x81, 0xe5, 0x54, 0x83, 0xe8, 0x54, 0x48, 0xf6, 0x95, 0xe5,
0xaa, 0x6c, 0xd2, 0x67, 0x69, 0x3a, 0xb1, 0x88, 0x82, 0x0c, 0x05, 0x12, 0x91, 0x36, 0x7a, 0xcc, 0x3d, 0xb2, 0x84, 0x09, 0xa6, 0x3f, 0x7a, 0xaf, 0x0e, 0x0f, 0x61, 0xa2, 0xdb, 0x87, 0x4e, 0xc1,
0x50, 0x23, 0xa0, 0x1e, 0xa6, 0x7a, 0x1e, 0x54, 0x8d, 0x16, 0x49, 0x52, 0x3d, 0xf9, 0x4d, 0xc2, 0xbf, 0xb2, 0x1e, 0x81, 0x0e, 0xfc, 0x2f, 0xef, 0x68, 0xe8, 0xb4, 0x0a, 0x69, 0x60, 0x4d, 0x21,
0x56, 0xdb, 0xba, 0xd9, 0xe7, 0x5f, 0xaa, 0xdf, 0x30, 0x24, 0x90, 0xba, 0x7f, 0xa1, 0x5d, 0x44, 0xeb, 0x0a, 0x81, 0x5e, 0x8a, 0x59, 0xa5, 0x1e, 0x71, 0x1d, 0xcf, 0x26, 0x87, 0x7d, 0x9d, 0xea,
0xbd, 0xa9, 0x0b, 0x06, 0x6b, 0x54, 0x9e, 0x47, 0xfd, 0x42, 0x89, 0x76, 0xda, 0x75, 0xdd, 0x7f, 0x3e, 0xb2, 0x5b, 0x97, 0x07, 0xa7, 0x07, 0x97, 0x9d, 0xd3, 0xf6, 0xa5, 0x77, 0xf4, 0xd6, 0xb7,
0x94, 0xb1, 0x59, 0x1c, 0x41, 0xd2, 0x4d, 0x7d, 0xca, 0x8d, 0xe1, 0xce, 0xb4, 0xbe, 0xe7, 0x32, 0x7d, 0x95, 0xde, 0x71, 0x49, 0xd7, 0xf6, 0xbd, 0x53, 0xaf, 0x5b, 0xea, 0xc1, 0x94, 0xc3, 0x11,
0x2a, 0x3c, 0xc3, 0x64, 0xfc, 0xcf, 0x77, 0xaf, 0x7f, 0x36, 0xf5, 0xa9, 0x15, 0x0f, 0xbe, 0x7b, 0x00, 0xfa, 0x2e, 0xcc, 0xf0, 0xda, 0x97, 0xad, 0xd3, 0xa3, 0xf3, 0xae, 0xdd, 0x39, 0xc5, 0xd4,
0x34, 0x8a, 0xc3, 0x5e, 0x63, 0xf8, 0xf1, 0xbb, 0x51, 0x71, 0x73, 0xbe, 0xd5, 0x9f, 0xcb, 0xad, 0xcf, 0xd1, 0x69, 0xf7, 0xb2, 0x03, 0xc8, 0x0e, 0x2f, 0xbd, 0xee, 0xa9, 0xe7, 0x5d, 0x1e, 0xc2,
0xf6, 0x1c, 0x1f, 0x49, 0xaa, 0x3d, 0x57, 0xdf, 0x79, 0x26, 0x47, 0xd7, 0x6d, 0x93, 0x11, 0xd1, 0x18, 0x26, 0x20, 0xd4, 0x67, 0x1b, 0x3e, 0xbd, 0x56, 0x39, 0x19, 0x24, 0x33, 0x9f, 0x93, 0x17,
0x9f, 0x53, 0x77, 0x6e, 0xff, 0xed, 0x11, 0x06, 0xcb, 0xf9, 0x4b, 0x78, 0x57, 0x38, 0x39, 0xcc, 0x3c, 0x02, 0x23, 0x2f, 0x41, 0x1a, 0xc5, 0x98, 0x72, 0x4e, 0xd9, 0xe6, 0x6a, 0xc7, 0x9b, 0x8f,
0xc0, 0x4d, 0xcf, 0x6e, 0x5b, 0xb6, 0xd7, 0xb5, 0xf6, 0x2e, 0xb6, 0x6d, 0xff, 0xf0, 0xa2, 0x6f, 0xc0, 0x61, 0x9a, 0x0d, 0x7c, 0xd1, 0x03, 0xa1, 0x83, 0x89, 0xc0, 0x4a, 0x90, 0x0b, 0xde, 0x41,
0xf7, 0xf4, 0x22, 0x75, 0xfb, 0xc4, 0xea, 0xd3, 0x0a, 0x19, 0xb5, 0xd1, 0x68, 0xfb, 0xfc, 0x7e, 0x3e, 0x1d, 0xe9, 0x4b, 0x47, 0xa7, 0xd7, 0x7f, 0xe3, 0x21, 0x73, 0xb4, 0x7f, 0x59, 0x4f, 0xad,
0x6d, 0xcf, 0x8d, 0xaa, 0x30, 0xa7, 0xd1, 0x2c, 0xb5, 0x3c, 0x51, 0x96, 0xd5, 0xf7, 0x15, 0xc5, 0xeb, 0xe7, 0x2e, 0xd0, 0x1a, 0xdc, 0x0e, 0xe3, 0x79, 0x6a, 0xfa, 0x06, 0xb0, 0x55, 0xb7, 0xe1,
0xd7, 0xda, 0x89, 0xe1, 0xfc, 0x9e, 0x67, 0xa9, 0x31, 0xd2, 0xc7, 0xd9, 0x0a, 0x09, 0x5f, 0x20, 0x67, 0x67, 0xef, 0x58, 0xfb, 0x3b, 0x57, 0xdd, 0x12, 0xcf, 0x6f, 0x0f, 0x90, 0x9e, 0xb8, 0x39,
0xf5, 0x2e, 0xda, 0xf8, 0x29, 0x4e, 0x50, 0xfc, 0x50, 0x17, 0x6c, 0x83, 0x20, 0x68, 0xc8, 0x6b, 0x55, 0xdd, 0xf3, 0x33, 0x11, 0xcf, 0x46, 0x38, 0xb6, 0x54, 0xd6, 0xa4, 0xb3, 0xb2, 0xda, 0xb0,
0xdf, 0xa6, 0x35, 0xdc, 0x42, 0x0c, 0xbd, 0x01, 0xe9, 0x7b, 0x87, 0xdb, 0xe9, 0x1b, 0x38, 0x53, 0x10, 0x83, 0xa4, 0x02, 0x0c, 0x11, 0x0f, 0x7a, 0xe8, 0xc1, 0x40, 0x40, 0xfd, 0x98, 0xea, 0x77,
0x6c, 0x6d, 0xec, 0x54, 0x63, 0x61, 0xbe, 0x63, 0xdf, 0xf7, 0xb1, 0x4a, 0xdb, 0x6f, 0x16, 0xd0, 0x27, 0x6b, 0x38, 0x88, 0x94, 0xea, 0xce, 0xef, 0x22, 0xb6, 0x1c, 0xc7, 0x4d, 0xbe, 0xfe, 0x5e,
0x55, 0xc0, 0x87, 0xab, 0x57, 0x97, 0x28, 0xe1, 0xff, 0xa2, 0xd3, 0xed, 0x9c, 0x5a, 0x6e, 0x9a, 0xbe, 0xb4, 0x20, 0x41, 0xaa, 0xae, 0x85, 0xa7, 0x88, 0xfa, 0x52, 0x05, 0x1d, 0xab, 0x9f, 0xa7,
0xfc, 0x31, 0xc9, 0x6e, 0xf0, 0x75, 0xf4, 0xc9, 0x7e, 0xa4, 0x53, 0xa1, 0xa1, 0x81, 0x1a, 0x94, 0xa3, 0x7e, 0x47, 0x43, 0x1b, 0x74, 0x5c, 0xf7, 0x97, 0x5c, 0x37, 0xb3, 0x24, 0x3a, 0x3e, 0xa9,
0xd0, 0x91, 0x3e, 0x04, 0x68, 0x2a, 0x15, 0x56, 0xd6, 0x28, 0xdb, 0x93, 0x38, 0x24, 0x9a, 0x61, 0x49, 0x98, 0xd1, 0xdb, 0xe8, 0xd6, 0xe5, 0x3a, 0xa3, 0xb4, 0x26, 0x8d, 0x87, 0xff, 0xf9, 0xf9,
0x9b, 0xe5, 0x97, 0x6d, 0xa9, 0x13, 0xe5, 0x26, 0x82, 0x37, 0x5f, 0x60, 0x8e, 0xbf, 0xe7, 0xf7, 0xe3, 0x6f, 0xa6, 0xce, 0x57, 0xb1, 0xe0, 0xcd, 0x32, 0x4f, 0xa1, 0x1b, 0xbd, 0xab, 0x37, 0xfd,
0x50, 0x8d, 0x35, 0x48, 0x45, 0x9a, 0xcf, 0x65, 0x28, 0x97, 0xe8, 0xbe, 0x0e, 0x09, 0xec, 0xfa, 0xec, 0x89, 0x4b, 0x2d, 0x20, 0x97, 0xb5, 0x78, 0x1c, 0x6e, 0x45, 0x2a, 0x1e, 0x97, 0x18, 0x33,
0xdd, 0x1b, 0x37, 0x84, 0xdf, 0x93, 0x0c, 0xa6, 0x7e, 0x87, 0x8f, 0xed, 0x70, 0x5a, 0xe6, 0xc7, 0x99, 0x0c, 0xc2, 0x6c, 0x1b, 0x85, 0x08, 0x01, 0x39, 0x86, 0xe3, 0xf6, 0xeb, 0x25, 0x08, 0x2c,
0x4b, 0xc9, 0xe7, 0x08, 0xe6, 0x84, 0x47, 0x6f, 0xc2, 0x84, 0x4e, 0xa9, 0xa9, 0xc5, 0x89, 0xe7, 0x65, 0x1f, 0x60, 0x77, 0x85, 0x93, 0x82, 0x18, 0x98, 0xe9, 0xd9, 0x2d, 0xcb, 0xf6, 0x3a, 0xd6,
0x3c, 0x5b, 0x4a, 0x53, 0x49, 0x71, 0x88, 0x28, 0x5d, 0xd2, 0x21, 0x0e, 0x3c, 0xde, 0xde, 0xc5, 0xd6, 0xc1, 0x96, 0xdd, 0xde, 0x3d, 0xd8, 0xb6, 0xbb, 0x7a, 0x10, 0xc3, 0x7b, 0x5c, 0xea, 0x7a,
0x29, 0x3a, 0x2f, 0x62, 0x47, 0x0a, 0x3b, 0x33, 0xc1, 0x27, 0x70, 0xac, 0xb1, 0xb2, 0x5b, 0x00, 0x05, 0x16, 0x55, 0x3a, 0xed, 0x13, 0xb0, 0x69, 0x50, 0xa8, 0xff, 0x52, 0x95, 0x0b, 0xdc, 0x5f,
0x57, 0x47, 0xa0, 0xbb, 0x9a, 0x73, 0x21, 0xe8, 0xdc, 0x8c, 0x6f, 0x69, 0x6e, 0x5c, 0xd0, 0xbc, 0x5d, 0xc3, 0x50, 0x5c, 0xae, 0xd9, 0xb5, 0x6f, 0x9a, 0x19, 0x9f, 0x78, 0x59, 0x70, 0xfe, 0x4c,
0xf6, 0x61, 0xdd, 0xcd, 0xec, 0x9d, 0xd2, 0x7b, 0xf8, 0xad, 0x66, 0x80, 0x11, 0x7c, 0x77, 0xfc, 0x79, 0x72, 0x53, 0xb9, 0x4a, 0x16, 0x73, 0xe0, 0xb2, 0xa1, 0x8f, 0x41, 0x11, 0x60, 0xf1, 0xe6,
0xd7, 0x54, 0x54, 0x32, 0x67, 0xd8, 0x46, 0x4c, 0xe3, 0xcd, 0xeb, 0x77, 0xef, 0xb1, 0xda, 0xd4, 0x8f, 0xf3, 0xb3, 0x53, 0x70, 0xa5, 0x7f, 0x67, 0x70, 0x91, 0x4c, 0x25, 0x04, 0xc1, 0xd8, 0xf9,
0x61, 0x54, 0x44, 0x42, 0xa8, 0x9c, 0xfe, 0x53, 0x26, 0xe6, 0x2f, 0xd0, 0xc0, 0x95, 0xc9, 0x19, 0x6b, 0xcc, 0x6f, 0xe1, 0x5a, 0x72, 0x6d, 0x2f, 0x31, 0x1d, 0xd3, 0x33, 0xc0, 0x17, 0xc4, 0x58,
0x16, 0x5b, 0x8f, 0x6e, 0xeb, 0x0c, 0x3b, 0xa5, 0x50, 0xcd, 0x1c, 0x8a, 0x31, 0x33, 0xb4, 0xec, 0x81, 0x01, 0x54, 0x4d, 0x44, 0x6d, 0xac, 0xac, 0xbe, 0xd8, 0xa2, 0xc0, 0xb8, 0x88, 0x61, 0x9b,
0x67, 0xde, 0x2a, 0xcc, 0x1f, 0xd2, 0x31, 0xdb, 0xfc, 0xfd, 0x0c, 0x97, 0x2f, 0xd3, 0x49, 0x86, 0xf9, 0x95, 0x92, 0xa3, 0xe3, 0xe1, 0x63, 0x65, 0x23, 0xa0, 0x44, 0xe9, 0x0c, 0xfa, 0xd8, 0x05,
0xdc, 0x88, 0x27, 0xe6, 0x2c, 0x97, 0xc1, 0xc6, 0x84, 0x19, 0x42, 0x0b, 0x33, 0xe5, 0xd9, 0xb1, 0xbb, 0x97, 0xb6, 0x41, 0x1a, 0xc4, 0x50, 0x26, 0xe6, 0x60, 0x89, 0x62, 0x8e, 0x39, 0x27, 0x0e,
0x6b, 0x49, 0xf1, 0xb0, 0xce, 0xa0, 0xf0, 0x2e, 0x8c, 0x25, 0x9b, 0x70, 0x89, 0xa4, 0x2f, 0xfb, 0xdc, 0x7c, 0x86, 0x4b, 0x2c, 0x1d, 0xe7, 0x6a, 0xf8, 0x41, 0xb2, 0x29, 0xe8, 0x4c, 0xcc, 0xc2,
0x09, 0xe3, 0x04, 0xe0, 0x27, 0x86, 0x8a, 0xb6, 0xa6, 0xba, 0xd7, 0xa2, 0xf4, 0xd2, 0x90, 0x5c, 0x4f, 0x34, 0xc6, 0xb2, 0x42, 0x16, 0x9c, 0x20, 0x28, 0xd2, 0xe2, 0x4c, 0x04, 0x1b, 0x05, 0x46,
0xa5, 0x91, 0x69, 0x8d, 0xf4, 0x9d, 0x84, 0x74, 0xd4, 0x13, 0xbd, 0x8d, 0xfe, 0x60, 0x28, 0x2f, 0x13, 0xc8, 0xb1, 0xb7, 0x91, 0xc3, 0x84, 0xc0, 0x2c, 0x12, 0xab, 0x91, 0x63, 0xbc, 0xc7, 0xfe,
0x7a, 0xac, 0x4a, 0x1b, 0xa3, 0x20, 0x1a, 0x5e, 0xdd, 0x05, 0x6a, 0x92, 0x1c, 0xa0, 0x06, 0xd6, 0x1e, 0x51, 0xf9, 0xb2, 0xca, 0x00, 0xf9, 0xac, 0x88, 0xe9, 0xd5, 0x69, 0xc3, 0x08, 0x26, 0x9a,
0x0a, 0xc2, 0x42, 0x02, 0x6e, 0xad, 0x3d, 0xa8, 0x9c, 0x4a, 0xdf, 0xb5, 0xea, 0x48, 0xba, 0x3e, 0x32, 0x3e, 0x97, 0xa6, 0x62, 0x6e, 0x65, 0x7b, 0xac, 0x65, 0xa9, 0x55, 0x39, 0x78, 0x49, 0xd3,
0x6b, 0x14, 0x97, 0x3f, 0x71, 0x84, 0x38, 0x88, 0x27, 0x0f, 0x8c, 0x74, 0x84, 0xc1, 0xd7, 0x46, 0xf8, 0xf4, 0xf1, 0xf3, 0x05, 0x28, 0x49, 0x53, 0xcb, 0x19, 0x74, 0x1a, 0x05, 0x4c, 0x95, 0x2c,
0xb0, 0x8b, 0x38, 0x3a, 0x94, 0x25, 0x54, 0x96, 0x9f, 0x00, 0x42, 0xba, 0xc4, 0x5f, 0x78, 0x09, 0xff, 0xc6, 0xc5, 0xf4, 0x1d, 0xc4, 0x27, 0xb9, 0xee, 0xd1, 0xcc, 0xb3, 0xea, 0xa8, 0x05, 0x6e,
0x56, 0x3b, 0x04, 0x3b, 0x78, 0x58, 0x59, 0xbb, 0x83, 0xd0, 0x47, 0x01, 0x9b, 0xab, 0x48, 0x6b, 0xab, 0x98, 0x94, 0x13, 0xaa, 0xa2, 0x6c, 0x52, 0xcb, 0x7e, 0xe9, 0xad, 0x68, 0xfa, 0x90, 0x0c,
0xa7, 0xab, 0x53, 0xc7, 0x8f, 0x81, 0x81, 0x61, 0x83, 0x2e, 0xda, 0xd6, 0xf7, 0xf1, 0xfb, 0xef, 0xc9, 0xfa, 0x1d, 0x17, 0x93, 0x1f, 0x92, 0x11, 0x07, 0x95, 0x8e, 0x46, 0xe6, 0x24, 0x95, 0xc1,
0xc3, 0x8d, 0x7d, 0x5d, 0xe0, 0x19, 0xd3, 0x8d, 0x1c, 0xba, 0xc7, 0xb2, 0xf6, 0xb0, 0xe2, 0x2a, 0x9a, 0x7d, 0x0e, 0x3b, 0x06, 0x3d, 0x79, 0x52, 0xd4, 0xb5, 0xa4, 0x78, 0x28, 0x0c, 0x8e, 0xde,
0x7c, 0x73, 0x0f, 0xee, 0xf8, 0xac, 0xe5, 0xbe, 0xed, 0x38, 0xad, 0x16, 0x9e, 0xac, 0xe5, 0x74, 0xd1, 0x48, 0x92, 0x11, 0x93, 0xa0, 0xd3, 0xf9, 0x71, 0x69, 0xec, 0x03, 0xf8, 0xbe, 0xa1, 0x36,
0x3d, 0xe6, 0xf5, 0x9d, 0x4e, 0x9b, 0xe1, 0xd9, 0x75, 0xfa, 0x3e, 0x3d, 0x3b, 0x8e, 0xdf, 0xa7, 0xb1, 0xa9, 0xea, 0x7c, 0x68, 0x8c, 0x1a, 0x92, 0x29, 0xad, 0x31, 0xad, 0xbe, 0x9a, 0x92, 0x57,
0x27, 0x56, 0xdb, 0x00, 0xf1, 0x7a, 0xcc, 0xf3, 0x1c, 0x8f, 0xb5, 0x9d, 0xb6, 0xcf, 0x06, 0x8e, 0xa2, 0x4c, 0x53, 0xd7, 0x72, 0xa4, 0xa3, 0x7e, 0xe1, 0x24, 0x97, 0x56, 0xc3, 0xb3, 0x56, 0x40,
0xdf, 0x63, 0xbe, 0xd3, 0xa2, 0x91, 0xe7, 0x63, 0xd4, 0xef, 0x33, 0x85, 0xd7, 0x73, 0x7a, 0xf4, 0x02, 0xe0, 0x65, 0x56, 0x21, 0x59, 0x25, 0x6c, 0xcc, 0xf2, 0xa8, 0x0c, 0x6a, 0xb5, 0xd7, 0x00,
0x0a, 0x4a, 0x03, 0x42, 0xeb, 0x00, 0x9d, 0x7e, 0x3a, 0xce, 0x40, 0xbd, 0x74, 0x9d, 0x41, 0x17, 0xd7, 0x90, 0x70, 0x49, 0xa2, 0x10, 0xf6, 0x27, 0x1a, 0x3d, 0x10, 0xa4, 0x1c, 0x02, 0xb5, 0x1a,
0x80, 0x2e, 0x86, 0x03, 0xd6, 0x77, 0xdc, 0x1e, 0x3d, 0x3d, 0x0f, 0x42, 0x38, 0xbd, 0x36, 0xd1, 0xa7, 0xd5, 0x85, 0x01, 0x77, 0xb9, 0x80, 0x93, 0x31, 0x19, 0xb8, 0x7d, 0xcc, 0xec, 0xa2, 0x75,
0x87, 0x3c, 0x9e, 0xd3, 0xef, 0x12, 0x57, 0x88, 0x88, 0xa9, 0xb6, 0xd3, 0xeb, 0xab, 0x81, 0x5f, 0xc3, 0xb5, 0xa4, 0x2f, 0x07, 0x01, 0xeb, 0xcb, 0xfd, 0xfd, 0xb5, 0x9f, 0xb9, 0xc9, 0x58, 0x7d,
0x4c, 0xf4, 0x9c, 0x76, 0x9f, 0x80, 0xba, 0x03, 0x12, 0x19, 0xbf, 0xc0, 0xa5, 0x19, 0x97, 0x5e, 0xbd, 0x04, 0x56, 0x57, 0x6b, 0xab, 0x90, 0x99, 0x55, 0xf4, 0xd7, 0x32, 0x92, 0x15, 0x19, 0x81,
0x49, 0x2d, 0xb4, 0x80, 0x6f, 0x81, 0xee, 0xe9, 0x39, 0xcf, 0xf1, 0x01, 0x38, 0x70, 0x3a, 0x1e, 0x32, 0x88, 0xac, 0x43, 0xe6, 0xa2, 0xa8, 0x10, 0x30, 0x9b, 0xa7, 0x13, 0xb8, 0xff, 0x65, 0xac,
0xf1, 0x01, 0x48, 0xbf, 0xad, 0x07, 0xd7, 0x80, 0xe9, 0xfb, 0xaf, 0xb0, 0x42, 0xe2, 0x75, 0x5e, 0xcb, 0x3a, 0xeb, 0x37, 0x4a, 0xad, 0x34, 0x32, 0x2c, 0x1e, 0xa2, 0xb5, 0x91, 0x91, 0xe0, 0x53,
0x41, 0xd7, 0xf6, 0x2b, 0x48, 0x3b, 0x78, 0xe5, 0x75, 0xd5, 0xb0, 0xe3, 0x74, 0xf5, 0x8a, 0xd7, 0x75, 0x7f, 0xef, 0x91, 0x1b, 0xd8, 0xe8, 0xd5, 0x6a, 0x0b, 0x4b, 0x03, 0x0f, 0xdc, 0xcc, 0xe6,
0x66, 0x0a, 0xf6, 0xda, 0x43, 0x7b, 0x09, 0x1e, 0x6f, 0x41, 0xce, 0x87, 0x89, 0x88, 0x81, 0xd3, 0x4a, 0x39, 0xf7, 0xbd, 0x2b, 0xd7, 0xee, 0xe6, 0x7f, 0xe0, 0xe6, 0x56, 0x7c, 0x5c, 0xaf, 0xf2,
0xea, 0x91, 0x48, 0xf8, 0x6d, 0x29, 0xd3, 0x61, 0x9e, 0x06, 0x4a, 0x58, 0x65, 0xc3, 0x8e, 0x5f, 0x44, 0x87, 0x0c, 0x70, 0x31, 0x47, 0x39, 0x17, 0xb3, 0x62, 0x48, 0xa8, 0x3c, 0x35, 0x2b, 0x52,
0x42, 0xb5, 0x95, 0x8a, 0x1a, 0xb5, 0xad, 0x85, 0xf5, 0xda, 0xaa, 0xa9, 0xf5, 0xde, 0xc2, 0xb8, 0x69, 0x78, 0xa0, 0x1e, 0xc5, 0x98, 0x09, 0x0d, 0x4b, 0xcb, 0x70, 0x82, 0x2b, 0x0d, 0x63, 0xc7,
0x7d, 0x32, 0x11, 0x21, 0x76, 0x60, 0xc4, 0x8e, 0x62, 0xed, 0xc2, 0xa8, 0x64, 0xc0, 0x2e, 0x8c, 0xfe, 0x41, 0xdb, 0xca, 0x52, 0x77, 0xd8, 0x0b, 0x7e, 0x00, 0x97, 0x91, 0x51, 0x32, 0x67, 0x2b,
0x89, 0xc5, 0x2e, 0x60, 0xb0, 0xa0, 0x56, 0x0b, 0x78, 0xf2, 0xc9, 0x25, 0xb8, 0xbe, 0xf5, 0x1d, 0x3d, 0x41, 0x04, 0x59, 0x3f, 0x6e, 0x03, 0x66, 0xe1, 0xfb, 0x65, 0x64, 0x7c, 0x44, 0x84, 0x42,
0xd7, 0x27, 0xbd, 0x80, 0xa4, 0xa4, 0xc5, 0xaf, 0x32, 0x1e, 0x66, 0xdb, 0xca, 0x95, 0x4c, 0x11, 0xf5, 0x52, 0x73, 0x13, 0xa5, 0xea, 0x17, 0x04, 0xfc, 0xf8, 0x78, 0xf0, 0x32, 0x08, 0x58, 0xc6,
0x1f, 0xf8, 0x05, 0x04, 0x79, 0xcf, 0x55, 0x3a, 0x50, 0x2c, 0x40, 0xb1, 0xc1, 0x75, 0xcb, 0xbd, 0xb7, 0xb5, 0x54, 0xa5, 0x84, 0x5b, 0xc1, 0xe8, 0xd7, 0xd5, 0x1a, 0x81, 0x44, 0x04, 0xcc, 0x82,
0x02, 0x2f, 0xea, 0x9f, 0x59, 0x53, 0xdd, 0xa0, 0xab, 0x0e, 0x5a, 0xdd, 0x74, 0xb9, 0xc5, 0x4d, 0xf9, 0x46, 0x32, 0x9f, 0xde, 0x42, 0xa0, 0x0a, 0xc7, 0x16, 0xb8, 0x21, 0xe8, 0x95, 0x8f, 0x8f,
0x19, 0x5d, 0x21, 0xed, 0x74, 0x71, 0xd5, 0x3f, 0xa5, 0x6b, 0xaa, 0xbf, 0x5c, 0xfc, 0x37, 0x9b, 0x72, 0xe0, 0xc2, 0x5f, 0xc7, 0x20, 0x87, 0xc7, 0xc7, 0x97, 0xbf, 0xa9, 0x71, 0x58, 0x00, 0x3c,
0x83, 0xcc, 0x23, 0xd1, 0x28, 0x00, 0x00 0x2a, 0x1b, 0x83, 0xc9, 0x4b, 0xab, 0x82, 0x74, 0x85, 0x44, 0xf0, 0x67, 0x98, 0x81, 0xdb, 0xfe,
0x95, 0xc8, 0x48, 0x6a, 0x78, 0xd7, 0x28, 0x1d, 0x95, 0xf4, 0x0b, 0xe8, 0x95, 0x7b, 0xbd, 0xd6,
0xab, 0x2b, 0xc7, 0x71, 0xe8, 0x75, 0x9f, 0x41, 0x67, 0x80, 0xbb, 0x20, 0xf4, 0x2e, 0x81, 0xc2,
0xaf, 0x72, 0x90, 0xfa, 0xb1, 0x02, 0x12, 0x75, 0xa6, 0x74, 0xb6, 0xce, 0xf0, 0x98, 0x4b, 0x58,
0x1f, 0x8e, 0xb1, 0x51, 0x4c, 0x55, 0x64, 0xb0, 0x4d, 0xc1, 0x60, 0x99, 0xdc, 0x88, 0x60, 0x4c,
0x48, 0xd3, 0xb8, 0xc0, 0x62, 0x3a, 0x3e, 0x28, 0x45, 0xc1, 0x14, 0xa5, 0x5c, 0x38, 0xb3, 0xc9,
0x34, 0x4a, 0xd3, 0x68, 0xac, 0x95, 0xec, 0x81, 0xcf, 0x05, 0xb9, 0x15, 0xfc, 0x2e, 0x05, 0x89,
0x90, 0x2f, 0x7c, 0x4e, 0xd2, 0x09, 0x9f, 0xc7, 0x21, 0x99, 0x09, 0x7e, 0x4b, 0x6f, 0xe3, 0x07,
0x92, 0x39, 0xa0, 0xac, 0xf4, 0x3d, 0xa5, 0xb0, 0xe9, 0x10, 0x51, 0xc0, 0x32, 0x49, 0x48, 0x70,
0x23, 0x41, 0xf1, 0x55, 0x75, 0x1c, 0x26, 0xcc, 0x98, 0x80, 0x09, 0x23, 0xac, 0xf3, 0x63, 0xcd,
0x3b, 0x5f, 0x53, 0x53, 0x81, 0x89, 0x2d, 0x90, 0x36, 0xb8, 0x58, 0x38, 0x97, 0xc8, 0x2d, 0x03,
0x30, 0x96, 0x21, 0x47, 0xbd, 0x9f, 0x30, 0xc1, 0x1c, 0x70, 0x86, 0xe7, 0x48, 0x1c, 0x7c, 0xab,
0x49, 0x61, 0x81, 0xe4, 0x25, 0x78, 0xc7, 0x7c, 0x72, 0x66, 0xeb, 0xef, 0xa2, 0x45, 0x5a, 0x8e,
0x69, 0xb6, 0x0e, 0x17, 0x1b, 0x91, 0x3f, 0x43, 0xad, 0x3f, 0x68, 0x5d, 0x3f, 0xb6, 0x40, 0x9f,
0xb6, 0x13, 0xaa, 0x56, 0x68, 0x47, 0xa3, 0xd7, 0xd2, 0x47, 0x29, 0xc2, 0xad, 0x7f, 0x88, 0xb1,
0x0f, 0xc4, 0x43, 0x10, 0x10, 0x44, 0xb1, 0xc4, 0xdb, 0x6a, 0x70, 0xac, 0x72, 0x01, 0x53, 0x65,
0xf6, 0xcd, 0x7f, 0x64, 0xcb, 0xfc, 0x4f, 0xf8, 0xba, 0x09, 0x1b, 0x58, 0xd3, 0x5b, 0x61, 0xd5,
0xc3, 0xdf, 0xc2, 0x5d, 0x09, 0x70, 0x57, 0x62, 0xb0, 0xc5, 0xfe, 0xfb, 0x62, 0xed, 0xbf, 0x78,
0x50, 0x06, 0xb8, 0x12, 0xd7, 0x36, 0x5d, 0xb3, 0x52, 0x7d, 0x97, 0x9b, 0xdd, 0x60, 0xa9, 0x53,
0x7a, 0x68, 0x62, 0xec, 0x0b, 0x9b, 0xea, 0x84, 0x3e, 0x1e, 0x83, 0x78, 0x26, 0x16, 0x72, 0x31,
0x72, 0x6f, 0x91, 0xe4, 0x8a, 0xfa, 0x95, 0x3d, 0xa4, 0x26, 0xb7, 0x40, 0xa3, 0x01, 0x0b, 0x9e,
0x46, 0x70, 0xce, 0x61, 0xf6, 0x58, 0x5d, 0x6d, 0xb4, 0x4b, 0x49, 0x55, 0xde, 0x10, 0x5c, 0xb6,
0xc9, 0xaf, 0x92, 0xeb, 0x75, 0x35, 0xeb, 0x69, 0x9a, 0xe2, 0x32, 0x4d, 0x79, 0x28, 0x0c, 0xb4,
0x15, 0x35, 0x9f, 0xa7, 0xa7, 0xeb, 0x8a, 0xce, 0xfa, 0x79, 0x16, 0x72, 0x15, 0xd5, 0xb9, 0x2a,
0x0d, 0xaf, 0xcb, 0x32, 0xbb, 0xf0, 0x16, 0xa5, 0x1a, 0xf5, 0x76, 0x22, 0x7b, 0xbc, 0x85, 0x68,
0x53, 0x07, 0x5f, 0x51, 0x42, 0x24, 0xbb, 0x4e, 0x90, 0x80, 0xeb, 0xaa, 0xc6, 0x5c, 0xe0, 0xf2,
0xb1, 0xfa, 0xb0, 0x2d, 0x5f, 0x61, 0x7c, 0x66, 0xf8, 0x20, 0x45, 0x3f, 0xd1, 0x29, 0x3d, 0x8d,
0xc1, 0xf7, 0x24, 0x04, 0xf0, 0x63, 0xc9, 0x66, 0x7d, 0xa9, 0xcd, 0xde, 0x1f, 0xd8, 0x69, 0x9d,
0x97, 0x82, 0x22, 0xab, 0x28, 0xd7, 0x3c, 0xc3, 0x89, 0xae, 0xcc, 0xe4, 0xaf, 0xcd, 0x90, 0x93,
0x70, 0x1b, 0x27, 0x48, 0x3f, 0x04, 0x20, 0xf8, 0x56, 0x40, 0xb1, 0x11, 0xee, 0x48, 0xbb, 0x9c,
0xf0, 0xd9, 0x83, 0x26, 0xfa, 0xf5, 0x52, 0xac, 0x72, 0x5b, 0x45, 0x4e, 0x34, 0x4f, 0x37, 0x78,
0x0d, 0xa8, 0x30, 0x82, 0x28, 0xed, 0xb0, 0xce, 0x48, 0x41, 0x10, 0xd6, 0x73, 0xb6, 0xab, 0x61,
0xf1, 0x22, 0x12, 0xf5, 0x04, 0xcc, 0x62, 0x18, 0x18, 0x46, 0x61, 0x23, 0x0c, 0x6c, 0x84, 0x0d,
0x50, 0xd5, 0x72, 0xdb, 0x80, 0x90, 0xd8, 0xb7, 0x8a, 0xf3, 0x1a, 0x47, 0xd0, 0x85, 0xe3, 0xe1,
0xa0, 0x55, 0x13, 0xab, 0xb4, 0xfa, 0x70, 0xd0, 0x63, 0xfb, 0xde, 0xb5, 0x35, 0x84, 0x48, 0xfd,
0xd5, 0xeb, 0x65, 0xd1, 0x81, 0x19, 0x74, 0xd9, 0x04, 0xa7, 0xfd, 0xb3, 0xe7, 0xba, 0xab, 0x9f,
0x6c, 0x72, 0xa3, 0xca, 0xbc, 0x4b, 0x84, 0x53, 0x6f, 0x8e, 0xcb, 0xb0, 0x98, 0x73, 0xcf, 0xbe,
0xfc, 0xca, 0x57, 0x0b, 0xbf, 0x3c, 0x6b, 0x03, 0x17, 0x46, 0xed, 0x3e, 0x1c, 0x02, 0xc1, 0x30,
0x0b, 0xe9, 0x5d, 0xbb, 0xe1, 0x6f, 0xab, 0x67, 0x7d, 0x98, 0x82, 0xb7, 0x0d, 0x6e, 0x76, 0xd5,
0x09, 0x70, 0xa9, 0xe1, 0xca, 0xba, 0xc9, 0x0d, 0x58, 0x57, 0xe4, 0x36, 0xde, 0x58, 0x82, 0xd2,
0xe5, 0x06, 0x1d, 0x04, 0xc9, 0x2f, 0x51, 0xad, 0x6c, 0xd5, 0xcb, 0x4b, 0x6c, 0xfa, 0xd9, 0xde,
0x19, 0xde, 0xfb, 0x0d, 0xf5, 0x0e, 0xc4, 0x16, 0x2f, 0x03, 0x15, 0xc3, 0xed, 0xed, 0x45, 0xf5,
0x12, 0x16, 0xad, 0xd7, 0xc5, 0x68, 0xbd, 0x86, 0x56, 0x59, 0x94, 0x55, 0x46, 0xa9, 0x05, 0x47,
0x5a, 0xb5, 0xa3, 0x94, 0xfd, 0x2b, 0xab, 0x20, 0x84, 0x74, 0x85, 0x5e, 0x6f, 0x14, 0xae, 0xde,
0xa8, 0xa2, 0xec, 0x55, 0x14, 0xfe, 0xa3, 0x5a, 0xcd, 0xbd, 0x7e, 0xb3, 0xbe, 0x9b, 0x61, 0x28,
0xcf, 0x76, 0xdd, 0x57, 0x75, 0x85, 0x71, 0x37, 0x7e, 0x34, 0x9d, 0x12, 0xfa, 0x2c, 0x27, 0x76,
0x6d, 0x93, 0xda, 0x40, 0x25, 0xdb, 0x5c, 0x19, 0xae, 0x24, 0xd3, 0x7e, 0x88, 0xae, 0xbe, 0x0e,
0x58, 0x4b, 0x61, 0xda, 0xb8, 0x74, 0x64, 0x19, 0xfb, 0xcc, 0xda, 0x96, 0xd2, 0xcc, 0x7d, 0xb1,
0x61, 0x59, 0x35, 0x13, 0x91, 0xdb, 0xec, 0x03, 0xc2, 0xb2, 0x22, 0x28, 0xdb, 0x6a, 0x22, 0x52,
0xdb, 0x07, 0x57, 0x4f, 0x1a, 0xf4, 0x87, 0xb6, 0x04, 0x1e, 0x80, 0x1d, 0x5c, 0xf0, 0x53, 0x76,
0x6f, 0xea, 0x6e, 0x5b, 0x2a, 0xfd, 0x57, 0x3f, 0xad, 0x6b, 0x4b, 0xeb, 0xb8, 0x7a, 0x0f, 0x22,
0x6c, 0x5e, 0x5c, 0xc4, 0xd2, 0xa1, 0xe0, 0x20, 0x59, 0xd7, 0x76, 0xcb, 0x3b, 0x5e, 0xa0, 0x82,
0xa8, 0xc7, 0x16, 0xeb, 0x93, 0xcd, 0x64, 0x83, 0x81, 0xd7, 0x81, 0x08, 0x6e, 0x70, 0xf8, 0x28,
0xaa, 0xcf, 0x26, 0xb2, 0xcb, 0x11, 0x92, 0x65, 0xb8, 0x06, 0x66, 0x2f, 0xc1, 0xe9, 0x99, 0x9d,
0x06, 0xcf, 0x43, 0xc5, 0x7d, 0xbe, 0x2a, 0xee, 0x41, 0xf9, 0xea, 0xbb, 0xee, 0x9f, 0x98, 0x78,
0x78, 0x02, 0x08, 0x2e, 0xa2, 0xd1, 0x37, 0x96, 0x83, 0x55, 0xea, 0xba, 0x3b, 0xeb, 0xef, 0x95,
0x47, 0x36, 0xd9, 0x83, 0x1a, 0x37, 0xfb, 0xc5, 0xc7, 0x26, 0x1b, 0x59, 0x9f, 0xf2, 0xbf, 0x91,
0x69, 0xaa, 0x7f, 0x92, 0xf4, 0xbf, 0xe4, 0x09, 0x6e, 0xa3, 0xaa, 0x34, 0x00, 0x00
}; };

View File

@ -271,479 +271,483 @@ const uint8_t PAGE_settings_wifi[] PROGMEM = {
// Autogenerated from wled00/data/settings_leds.htm, do not edit!! // Autogenerated from wled00/data/settings_leds.htm, do not edit!!
const uint16_t PAGE_settings_leds_length = 7521; const uint16_t PAGE_settings_leds_length = 7593;
const uint8_t PAGE_settings_leds[] PROGMEM = { const uint8_t PAGE_settings_leds[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xdd, 0x3c, 0x6b, 0x77, 0xda, 0xc8, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xdd, 0x3c, 0xdb, 0x76, 0xe2, 0x48,
0x92, 0xdf, 0xf9, 0x15, 0x6d, 0xcd, 0x8c, 0x23, 0x5d, 0x04, 0x48, 0x3c, 0x32, 0x04, 0x10, 0x5e, 0x92, 0xef, 0x7c, 0x45, 0x5a, 0xdd, 0xed, 0x92, 0x1a, 0x19, 0x24, 0x2e, 0x6e, 0x0c, 0x08, 0xaf,
0xe3, 0x3c, 0xc6, 0x77, 0xec, 0xb1, 0x0f, 0x78, 0x92, 0x7b, 0x4f, 0x26, 0x27, 0x11, 0x52, 0x03, 0xa1, 0x2e, 0xed, 0x19, 0xbb, 0xed, 0x03, 0xae, 0xaa, 0x99, 0x53, 0x5d, 0xa7, 0x4b, 0x48, 0x09,
0x8a, 0x85, 0xc4, 0x95, 0x84, 0x1f, 0x6b, 0xb3, 0xbf, 0x69, 0x7f, 0xc3, 0xfe, 0xb2, 0xad, 0xea, 0xa8, 0x2c, 0x24, 0x46, 0x12, 0xbe, 0xac, 0xed, 0xfd, 0xa6, 0xfd, 0x86, 0xfd, 0xb2, 0x8d, 0xc8,
0x6e, 0xbd, 0x40, 0x02, 0x67, 0xcf, 0xfd, 0xb4, 0x73, 0xce, 0xc4, 0x20, 0x55, 0x57, 0x57, 0x57, 0x4c, 0xdd, 0x40, 0x02, 0xd7, 0x9e, 0x79, 0xda, 0x3e, 0xa7, 0xcb, 0x20, 0x45, 0x46, 0x46, 0x46,
0xd7, 0xbb, 0xab, 0x19, 0x1c, 0xbd, 0xbd, 0x3a, 0xbb, 0xf9, 0xe7, 0xf5, 0x3b, 0xb2, 0x88, 0x96, 0xc6, 0x3d, 0x23, 0xe9, 0x1f, 0xbc, 0xbd, 0x1a, 0xdd, 0xfc, 0xf3, 0xfa, 0x1d, 0x59, 0x44, 0x4b,
0xee, 0x70, 0x80, 0xff, 0x12, 0xd7, 0xf4, 0xe6, 0x86, 0x44, 0x3d, 0x09, 0xbe, 0x53, 0xd3, 0x1e, 0x77, 0xd0, 0xc7, 0x7f, 0x89, 0x6b, 0x7a, 0x73, 0x43, 0xa2, 0x9e, 0x04, 0xdf, 0xa9, 0x69, 0x0f,
0x0e, 0x96, 0x34, 0x32, 0x89, 0xb5, 0x30, 0x83, 0x90, 0x46, 0x86, 0xb4, 0x8e, 0x66, 0xb5, 0xae, 0xfa, 0x4b, 0x1a, 0x99, 0xc4, 0x5a, 0x98, 0x41, 0x48, 0x23, 0x43, 0x5a, 0x47, 0xb3, 0xa3, 0x8e,
0x24, 0x9e, 0x56, 0x3c, 0x73, 0x49, 0x0d, 0xe9, 0xce, 0xa1, 0xf7, 0x2b, 0x3f, 0x88, 0x24, 0x62, 0x24, 0x9e, 0x56, 0x3c, 0x73, 0x49, 0x0d, 0xe9, 0xce, 0xa1, 0xf7, 0x2b, 0x3f, 0x88, 0x24, 0x62,
0xf9, 0x5e, 0x44, 0x3d, 0x00, 0xbb, 0x77, 0xec, 0x68, 0x61, 0x74, 0x34, 0x2d, 0x01, 0xdd, 0x7a, 0xf9, 0x5e, 0x44, 0x3d, 0x00, 0xbb, 0x77, 0xec, 0x68, 0x61, 0xb4, 0x35, 0x2d, 0x01, 0xdd, 0x78,
0x65, 0xd3, 0x3b, 0xc7, 0xa2, 0x35, 0xf6, 0x45, 0x75, 0x3c, 0x27, 0x72, 0x4c, 0xb7, 0x16, 0x5a, 0x65, 0xd3, 0x3b, 0xc7, 0xa2, 0x47, 0xec, 0x8b, 0xea, 0x78, 0x4e, 0xe4, 0x98, 0xee, 0x51, 0x68,
0xa6, 0x4b, 0x0d, 0x5d, 0x5d, 0x9a, 0x0f, 0xce, 0x72, 0xbd, 0x4c, 0xbe, 0xaf, 0x43, 0x1a, 0xb0, 0x99, 0x2e, 0x35, 0x74, 0x75, 0x69, 0x3e, 0x38, 0xcb, 0xf5, 0x32, 0xf9, 0xbe, 0x0e, 0x69, 0xc0,
0x2f, 0xe6, 0x14, 0xbe, 0x7b, 0xbe, 0xb4, 0x33, 0xf3, 0x70, 0x10, 0x39, 0x91, 0x4b, 0x87, 0x17, 0xbe, 0x98, 0x53, 0xf8, 0xee, 0xf9, 0xd2, 0xd6, 0xcc, 0x83, 0x7e, 0xe4, 0x44, 0x2e, 0x1d, 0x5c,
0xef, 0xde, 0x92, 0x09, 0x8d, 0x22, 0xc7, 0x9b, 0x87, 0x83, 0x06, 0x7f, 0x36, 0x08, 0xad, 0xc0, 0xbc, 0x7b, 0x4b, 0x26, 0x34, 0x8a, 0x1c, 0x6f, 0x1e, 0xf6, 0xeb, 0xfc, 0x59, 0x3f, 0xb4, 0x02,
0x59, 0x45, 0xc3, 0xca, 0x9d, 0x19, 0x10, 0xdb, 0xb0, 0x7d, 0x6b, 0xbd, 0x04, 0x4a, 0x54, 0xd7, 0x67, 0x15, 0x0d, 0x2a, 0x77, 0x66, 0x40, 0x6c, 0xc3, 0xf6, 0xad, 0xf5, 0x12, 0x28, 0x51, 0x5d,
0x5c, 0x05, 0xf4, 0xce, 0xe8, 0x74, 0x70, 0xbe, 0x11, 0x9f, 0xf6, 0xa3, 0xa1, 0xe1, 0x9f, 0x4b, 0x73, 0x15, 0xd0, 0x3b, 0xa3, 0xdd, 0xc6, 0xf9, 0x86, 0x7c, 0xda, 0x4f, 0x86, 0x86, 0x7f, 0x2e,
0xa3, 0x4d, 0x5b, 0xf8, 0xe1, 0x7a, 0x64, 0xb4, 0xb5, 0x37, 0xaf, 0xf1, 0xe3, 0x85, 0xa1, 0xb7, 0x8d, 0x16, 0x6d, 0xe2, 0x87, 0xeb, 0xa1, 0xd1, 0xd2, 0x4e, 0x8e, 0xf1, 0xe3, 0x85, 0xa1, 0x37,
0x5a, 0xec, 0xe1, 0xc5, 0xf4, 0x5f, 0x6b, 0x3f, 0x32, 0xb4, 0xbe, 0x5d, 0x5f, 0x2f, 0xbf, 0xae, 0x9b, 0xec, 0xe1, 0xc5, 0xf4, 0x5f, 0x6b, 0x3f, 0x32, 0xb4, 0x9e, 0x5d, 0x5b, 0x2f, 0xff, 0x5a,
0x8c, 0xcf, 0x5f, 0x54, 0xbb, 0x1e, 0x84, 0x77, 0xb6, 0xf8, 0xe4, 0x7f, 0x9d, 0xaf, 0x1c, 0x9f, 0x19, 0x5f, 0xbe, 0xaa, 0x76, 0x2d, 0x08, 0xef, 0x6c, 0xf1, 0xc9, 0xff, 0x6b, 0xbe, 0x72, 0x7c,
0x7f, 0x01, 0x70, 0xfe, 0xad, 0xf5, 0xa6, 0x8f, 0xf3, 0xbb, 0xbe, 0xe5, 0xac, 0xd4, 0xc8, 0x59, 0xfe, 0x05, 0xc0, 0xf9, 0xb7, 0xe6, 0x49, 0x0f, 0xe7, 0x77, 0x7d, 0xcb, 0x59, 0xa9, 0x91, 0xb3,
0x52, 0x7f, 0x1d, 0xa9, 0xd6, 0x3a, 0x8c, 0xfc, 0xe5, 0x24, 0x32, 0x83, 0x28, 0x34, 0x8e, 0x74, 0xa4, 0xfe, 0x3a, 0x52, 0xad, 0x75, 0x18, 0xf9, 0xcb, 0x49, 0x64, 0x06, 0x51, 0x68, 0x1c, 0xe8,
0x35, 0x64, 0x9f, 0xde, 0x3a, 0x41, 0xf4, 0x88, 0xc3, 0x61, 0xf0, 0xd9, 0xd5, 0xd5, 0x1d, 0x0d, 0x6a, 0xc8, 0x3e, 0xbd, 0x75, 0x82, 0xe8, 0x11, 0x87, 0xc3, 0xe0, 0xd1, 0xd5, 0xd5, 0x1d, 0x0d,
0x02, 0xc7, 0xa6, 0xa1, 0xd1, 0x51, 0x61, 0x34, 0x80, 0xf5, 0x67, 0x6b, 0xcf, 0x8a, 0x1c, 0xdf, 0x02, 0xc7, 0xa6, 0xa1, 0xd1, 0x56, 0x61, 0x34, 0x80, 0xf5, 0x66, 0x6b, 0xcf, 0x8a, 0x1c, 0xdf,
0x23, 0xbf, 0xc9, 0xca, 0xd3, 0xbd, 0xe3, 0xd9, 0xfe, 0x7d, 0xdd, 0x5f, 0x51, 0x4f, 0x96, 0x16, 0x23, 0xbf, 0xcb, 0xca, 0xd3, 0xbd, 0xe3, 0xd9, 0xfe, 0x7d, 0xcd, 0x5f, 0x51, 0x4f, 0x96, 0x16,
0x51, 0xb4, 0x0a, 0x7b, 0x8d, 0xc6, 0xad, 0xe7, 0xd7, 0xef, 0x5d, 0x6a, 0xd7, 0xe7, 0xb4, 0x31, 0x51, 0xb4, 0x0a, 0xbb, 0xf5, 0xfa, 0xad, 0xe7, 0xd7, 0xee, 0x5d, 0x6a, 0xd7, 0xe6, 0xb4, 0x3e,
0xa3, 0x66, 0xb4, 0x0e, 0x68, 0xd8, 0x08, 0x05, 0x63, 0x1a, 0x3f, 0xc1, 0x9b, 0x5a, 0xfc, 0x4d, 0xa3, 0x66, 0xb4, 0x0e, 0x68, 0x58, 0x0f, 0x05, 0x63, 0xea, 0x3f, 0xc1, 0x9b, 0xa3, 0xf8, 0x9b,
0x52, 0x36, 0x09, 0xbe, 0xd1, 0x36, 0xbe, 0x64, 0x8c, 0xa4, 0x4a, 0x5f, 0x43, 0xea, 0xce, 0xb2, 0xa4, 0xbc, 0x24, 0xf8, 0x86, 0x9b, 0xf8, 0x92, 0x31, 0x92, 0x2a, 0xfd, 0x15, 0x52, 0x77, 0x96,
0xd0, 0xf3, 0x73, 0x5b, 0xa6, 0xca, 0x53, 0x40, 0x01, 0xbd, 0x47, 0x70, 0xae, 0xe8, 0x9d, 0x4b, 0x85, 0x9e, 0x9f, 0xdb, 0x32, 0x55, 0x9e, 0x02, 0x0a, 0xe8, 0x3d, 0x82, 0x73, 0x45, 0xef, 0x5c,
0x91, 0xb7, 0xa3, 0x47, 0xf6, 0x2a, 0x05, 0xf5, 0x67, 0x33, 0x04, 0xcd, 0xc2, 0x84, 0xa3, 0xc7, 0x8a, 0xbc, 0x1d, 0x3e, 0xb2, 0x57, 0x29, 0xa8, 0x3f, 0x9b, 0x21, 0x68, 0x16, 0x26, 0x1c, 0x3e,
0x3f, 0x60, 0x13, 0xe1, 0xf1, 0x67, 0xed, 0x4b, 0xfd, 0xce, 0x74, 0xd7, 0xd4, 0xa8, 0xe9, 0xe9, 0xfe, 0x01, 0x9b, 0x08, 0x8f, 0xbf, 0x68, 0x5f, 0x6b, 0x77, 0xa6, 0xbb, 0xa6, 0xc6, 0x91, 0x9e,
0x10, 0xd7, 0x37, 0xed, 0xbf, 0x4f, 0x64, 0xaa, 0x7a, 0xc6, 0x91, 0xa6, 0x3c, 0xb9, 0x34, 0x22, 0x0e, 0x71, 0x7d, 0xd3, 0xfe, 0xdb, 0x44, 0xa6, 0xaa, 0x67, 0x1c, 0x68, 0xca, 0x93, 0x4b, 0x23,
0x91, 0x61, 0xd7, 0xad, 0x00, 0x96, 0x43, 0x05, 0x0e, 0x59, 0xe2, 0x7b, 0x2b, 0x29, 0xfd, 0xa8, 0x12, 0x19, 0x76, 0xcd, 0x0a, 0x60, 0x39, 0x54, 0xe0, 0x90, 0x25, 0xbe, 0xb7, 0x92, 0xd2, 0x8b,
0x0e, 0xa4, 0x9e, 0x46, 0x51, 0xe0, 0x4c, 0xd7, 0x11, 0x85, 0x17, 0x81, 0x25, 0xa9, 0x54, 0x51, 0x6a, 0x40, 0xea, 0x59, 0x14, 0x05, 0xce, 0x74, 0x1d, 0x51, 0x78, 0x11, 0x58, 0x92, 0x4a, 0x15,
0xb7, 0x9f, 0x47, 0x8f, 0x2b, 0x0a, 0x8b, 0x89, 0xe8, 0x43, 0xd4, 0xf8, 0x6e, 0xde, 0x99, 0x31, 0x75, 0xf3, 0x79, 0xf4, 0xb8, 0xa2, 0xb0, 0x98, 0x88, 0x3e, 0x44, 0xf5, 0xef, 0xe6, 0x9d, 0x19,
0x82, 0x1d, 0x40, 0x33, 0x7c, 0xf4, 0x00, 0x85, 0xa7, 0xc0, 0x2e, 0x4e, 0x7d, 0xfb, 0xb1, 0x6e, 0x23, 0xd8, 0x02, 0x34, 0xc3, 0x47, 0x0f, 0x50, 0x78, 0x0a, 0xec, 0xe2, 0xd4, 0xb7, 0x1f, 0x6b,
0xae, 0x80, 0x25, 0xf6, 0xd9, 0xc2, 0x71, 0x6d, 0x39, 0x42, 0x78, 0xd3, 0xb6, 0xdf, 0xdd, 0x01, 0xe6, 0x0a, 0x58, 0x62, 0x8f, 0x16, 0x8e, 0x6b, 0xcb, 0x11, 0xc2, 0x9b, 0xb6, 0xfd, 0xee, 0x0e,
0x15, 0x17, 0x4e, 0x08, 0xa2, 0x4d, 0x03, 0x59, 0x42, 0x9a, 0x25, 0x55, 0x56, 0x8c, 0xe1, 0xd3, 0xa8, 0xb8, 0x70, 0x42, 0x10, 0x6d, 0x1a, 0xc8, 0x12, 0xd2, 0x2c, 0xa9, 0xb2, 0x62, 0x0c, 0x9e,
0x07, 0x1a, 0x7d, 0x94, 0x15, 0xd5, 0x5a, 0x50, 0xeb, 0x76, 0xe2, 0xc0, 0x27, 0xc4, 0x3e, 0xba, 0x3e, 0xd0, 0xe8, 0x93, 0xac, 0xa8, 0xd6, 0x82, 0x5a, 0xb7, 0x13, 0x07, 0x3e, 0x21, 0xf6, 0xe1,
0x80, 0x0f, 0x35, 0xdd, 0x30, 0xb8, 0xe4, 0xc0, 0xc2, 0x8f, 0x8f, 0xf9, 0xc7, 0x7a, 0xb8, 0x70, 0x05, 0x7c, 0x38, 0xd2, 0x0d, 0x83, 0x4b, 0x0e, 0x2c, 0xfc, 0xf0, 0x90, 0x7f, 0xac, 0x85, 0x0b,
0x66, 0x91, 0xac, 0x6c, 0x8a, 0x11, 0x83, 0x08, 0xf8, 0x01, 0xac, 0x07, 0x10, 0x83, 0x22, 0x85, 0x67, 0x16, 0xc9, 0xca, 0x4b, 0x31, 0x62, 0x10, 0x01, 0x3f, 0x80, 0xf5, 0x00, 0x62, 0x50, 0xa4,
0xbe, 0x4b, 0xeb, 0xae, 0x3f, 0x97, 0xa5, 0x77, 0xf8, 0x9c, 0x08, 0x6e, 0xc1, 0x3e, 0x91, 0x99, 0xd0, 0x77, 0x69, 0xcd, 0xf5, 0xe7, 0xb2, 0xf4, 0x0e, 0x9f, 0x13, 0xc1, 0x2d, 0xd8, 0x27, 0x32,
0xe3, 0x52, 0xb6, 0x6e, 0xd0, 0x9c, 0x00, 0xf8, 0x73, 0x21, 0x9e, 0xfb, 0x33, 0x54, 0xce, 0x99, 0x73, 0x5c, 0xca, 0xd6, 0x0d, 0x9a, 0x13, 0x00, 0x7f, 0x2e, 0xc4, 0x73, 0x7f, 0x86, 0xca, 0x39,
0x33, 0x5f, 0x07, 0x26, 0x63, 0x2f, 0x5f, 0x37, 0x99, 0x99, 0x0e, 0x8a, 0xc9, 0x5f, 0xde, 0xb9, 0x73, 0xe6, 0xeb, 0xc0, 0x64, 0xec, 0xe5, 0xeb, 0x26, 0x33, 0xd3, 0x41, 0x31, 0xf9, 0xd3, 0x3b,
0x67, 0xf9, 0xcb, 0x15, 0x70, 0x99, 0x92, 0x95, 0x39, 0xa7, 0xc4, 0x36, 0x23, 0xf3, 0x08, 0x76, 0xf7, 0x2c, 0x7f, 0xb9, 0x02, 0x2e, 0x53, 0xb2, 0x32, 0xe7, 0x94, 0xd8, 0x66, 0x64, 0x1e, 0xc0,
0x3b, 0xb3, 0x89, 0xe1, 0xc2, 0xbf, 0xbf, 0xf1, 0xcd, 0x30, 0xe2, 0x9b, 0xa2, 0x2b, 0x4f, 0x28, 0x6e, 0x67, 0x36, 0x31, 0x5c, 0xf8, 0xf7, 0x37, 0xbe, 0x19, 0x46, 0x7c, 0x53, 0x74, 0xe5, 0x09,
0xd1, 0x91, 0x81, 0x72, 0x20, 0x45, 0xf8, 0x82, 0xed, 0x83, 0xe3, 0x01, 0xc9, 0xbf, 0xdd, 0x5c, 0x25, 0x3a, 0x32, 0x50, 0x0e, 0xa4, 0x08, 0x5f, 0xb0, 0x7d, 0x70, 0x3c, 0x20, 0xf9, 0xf7, 0x9b,
0x5e, 0x18, 0x14, 0xd6, 0x62, 0xb9, 0x66, 0x18, 0xe2, 0x46, 0x1b, 0xde, 0x89, 0x58, 0x46, 0x4f, 0xcb, 0x0b, 0x83, 0xc2, 0x5a, 0x2c, 0xd7, 0x0c, 0x43, 0xdc, 0x68, 0xc3, 0x3b, 0x15, 0xcb, 0xe8,
0x42, 0x4c, 0x92, 0x6a, 0xb9, 0xd4, 0x0c, 0x6e, 0xb8, 0x2a, 0xc8, 0x42, 0x25, 0xd8, 0x3e, 0x44, 0x4a, 0x88, 0x49, 0x52, 0x2d, 0x97, 0x9a, 0xc1, 0x0d, 0x57, 0x05, 0x59, 0xa8, 0x04, 0xdb, 0x87,
0x8f, 0xb0, 0x3e, 0xd3, 0x73, 0x96, 0x8c, 0x54, 0x43, 0xf2, 0x7c, 0x0f, 0x16, 0x25, 0x20, 0x0c, 0xe8, 0x11, 0xd6, 0x67, 0x7a, 0xce, 0x92, 0x91, 0x6a, 0x48, 0x9e, 0xef, 0xc1, 0xa2, 0x04, 0x84,
0x60, 0x64, 0x3c, 0x48, 0x8e, 0x69, 0x03, 0xb9, 0xcd, 0x4e, 0x95, 0xf9, 0x5c, 0x0f, 0xe8, 0xca, 0x01, 0x8c, 0x8c, 0x07, 0xc9, 0x31, 0x6d, 0x20, 0xb7, 0xd9, 0xa9, 0x32, 0x9f, 0x6b, 0x01, 0x5d,
0x35, 0x2d, 0x94, 0x08, 0x36, 0xa9, 0x84, 0x6b, 0x52, 0x9b, 0x6f, 0x34, 0x2d, 0xb3, 0xb2, 0xe9, 0xb9, 0xa6, 0x85, 0x12, 0xc1, 0x26, 0x95, 0x70, 0x4d, 0x6a, 0xe3, 0x44, 0xd3, 0x32, 0x2b, 0x9b,
0x85, 0xb3, 0x74, 0xa2, 0x10, 0xd7, 0xa5, 0x46, 0xaa, 0xa9, 0x3a, 0xca, 0x13, 0xb3, 0x09, 0x94, 0x5e, 0x38, 0x4b, 0x27, 0x0a, 0x71, 0x5d, 0x6a, 0xa4, 0x3a, 0xaa, 0xa9, 0x3c, 0x31, 0x9b, 0x40,
0xdb, 0x04, 0x8f, 0xdb, 0x04, 0x53, 0x58, 0x84, 0x88, 0x9b, 0x03, 0x27, 0x1d, 0xbf, 0x72, 0xbc, 0xb9, 0x4d, 0xf0, 0xb8, 0x4d, 0x70, 0x84, 0x45, 0x88, 0xb8, 0x39, 0x30, 0xd3, 0xf1, 0x2b, 0xc7,
0xf0, 0xea, 0x77, 0x99, 0x33, 0x84, 0x1a, 0x5b, 0x62, 0x7e, 0x63, 0xce, 0x99, 0xa4, 0x4b, 0x8e, 0x0b, 0xaf, 0xfe, 0x2e, 0x73, 0x86, 0x50, 0x63, 0x43, 0xcc, 0x6f, 0xcc, 0x39, 0x93, 0x74, 0xc9,
0xb7, 0x5a, 0x23, 0x8f, 0x66, 0x7e, 0x20, 0x3b, 0x60, 0x3f, 0x9c, 0x01, 0x6c, 0x23, 0xf5, 0xe6, 0xf1, 0x56, 0x6b, 0xe4, 0xd1, 0xcc, 0x0f, 0x64, 0x07, 0xec, 0x87, 0xd3, 0x87, 0x6d, 0xa4, 0xde,
0xd1, 0xa2, 0xef, 0x54, 0xab, 0x7c, 0xb4, 0x67, 0xd0, 0xcf, 0xce, 0x97, 0x3a, 0xda, 0xb7, 0x7a, 0x3c, 0x5a, 0xf4, 0x9c, 0x6a, 0x95, 0x8f, 0xf6, 0x0c, 0xfa, 0xc5, 0xf9, 0x5a, 0x43, 0xfb, 0x56,
0xb8, 0x9e, 0x86, 0x20, 0x8f, 0xde, 0x5c, 0xd6, 0xd4, 0xa6, 0xd2, 0x77, 0x66, 0xb0, 0x9f, 0x9a, 0x0b, 0xd7, 0xd3, 0x10, 0xe4, 0xd1, 0x9b, 0xcb, 0x9a, 0xda, 0x50, 0x7a, 0xce, 0x0c, 0xf6, 0x53,
0x64, 0x18, 0xde, 0xf3, 0xb3, 0x74, 0xa1, 0xc7, 0x1f, 0x9a, 0xf1, 0x87, 0x16, 0x7e, 0x88, 0x37, 0x93, 0x0c, 0xc3, 0x7b, 0x7e, 0x96, 0x2e, 0xf4, 0xf8, 0x43, 0x23, 0xfe, 0xd0, 0xc4, 0x0f, 0xf1,
0xa5, 0x08, 0x0b, 0xc7, 0xb1, 0x42, 0x53, 0x7e, 0x0e, 0xca, 0x53, 0xa4, 0x8d, 0xd2, 0xc5, 0x8d, 0xa6, 0x14, 0x61, 0xe1, 0x38, 0x56, 0x68, 0xca, 0xcf, 0x41, 0x79, 0x8a, 0xb4, 0x51, 0xba, 0xb8,
0x54, 0x8d, 0x52, 0x95, 0x54, 0x75, 0x4d, 0x19, 0x1a, 0x5d, 0x4d, 0x41, 0xfb, 0xed, 0x78, 0x6b, 0x91, 0xaa, 0x51, 0xaa, 0x92, 0xaa, 0xae, 0x29, 0x03, 0xa3, 0xa3, 0x29, 0x68, 0xbf, 0x1d, 0x6f,
0xba, 0x01, 0x0c, 0x2f, 0x20, 0x03, 0x3f, 0xb4, 0xc5, 0x87, 0xf1, 0x85, 0xf8, 0x30, 0xba, 0x11, 0x4d, 0x5f, 0x00, 0xc3, 0x2b, 0xc8, 0xc0, 0x0f, 0x2d, 0xf1, 0x61, 0x7c, 0x21, 0x3e, 0x0c, 0x6f,
0x1f, 0xce, 0xc7, 0x8c, 0xd4, 0xe3, 0x63, 0x49, 0x3a, 0xe2, 0x94, 0xb2, 0xc9, 0xe0, 0x7b, 0x4d, 0xc4, 0x87, 0xf3, 0x31, 0x23, 0xf5, 0xf0, 0x50, 0x92, 0x0e, 0x38, 0xa5, 0x6c, 0x32, 0xf8, 0x7e,
0xcf, 0x3d, 0xe1, 0xab, 0x31, 0xc1, 0x18, 0x32, 0xa6, 0xdd, 0x02, 0xd3, 0x6e, 0x07, 0xdc, 0xd8, 0xa4, 0xe7, 0x9e, 0xf0, 0xd5, 0x98, 0x60, 0x0c, 0x19, 0xd3, 0x6e, 0x81, 0x69, 0xb7, 0x7d, 0x6e,
0xc6, 0x9c, 0xbb, 0x05, 0xce, 0x99, 0xf5, 0xd5, 0x3a, 0x5c, 0xc8, 0xfc, 0xc5, 0xe7, 0xdb, 0x2f, 0x6c, 0x63, 0xce, 0xdd, 0x02, 0xe7, 0xcc, 0xda, 0x6a, 0x1d, 0x2e, 0x64, 0xfe, 0xe2, 0xcb, 0xed,
0x4a, 0x0e, 0x9a, 0xe9, 0x57, 0x11, 0x34, 0xd3, 0x41, 0x84, 0x86, 0x35, 0x99, 0xf5, 0xd0, 0x87, 0x57, 0x25, 0x07, 0xcd, 0xf4, 0xab, 0x08, 0x9a, 0xe9, 0x20, 0x42, 0xc3, 0x9a, 0xcc, 0x5a, 0xe8,
0xf5, 0x7b, 0xc6, 0xd0, 0x33, 0x8c, 0x84, 0x45, 0x29, 0x25, 0xc8, 0x08, 0x45, 0x11, 0xb6, 0x8e, 0xc3, 0xfa, 0x3d, 0x63, 0xe0, 0x19, 0x46, 0xc2, 0xa2, 0x94, 0x12, 0x64, 0x84, 0xa2, 0x08, 0x5b,
0x2b, 0xd7, 0xb7, 0x89, 0x1f, 0x04, 0x8f, 0x2a, 0xdb, 0x7d, 0xf2, 0xf3, 0xd3, 0xdf, 0x27, 0x57, 0xc7, 0x95, 0xeb, 0xdb, 0xc4, 0x0f, 0x82, 0x47, 0x95, 0xed, 0x3e, 0xf9, 0xf9, 0xe9, 0x6f, 0x93,
0x7f, 0xd4, 0x39, 0xa7, 0x9d, 0xd9, 0xa3, 0x6c, 0x2a, 0x1b, 0x62, 0x99, 0xde, 0xab, 0x88, 0x4c, 0xab, 0x3f, 0x6a, 0x9c, 0xd3, 0xce, 0xec, 0x51, 0x36, 0x95, 0x17, 0x62, 0x99, 0xde, 0x9b, 0x88,
0x29, 0x01, 0x0f, 0x66, 0xd7, 0xbf, 0x29, 0x6a, 0x8a, 0xcf, 0x90, 0x24, 0xfe, 0x6d, 0x06, 0xfe, 0x4c, 0x29, 0x01, 0x0f, 0x66, 0xd7, 0xbe, 0x29, 0x6a, 0x8a, 0xcf, 0x90, 0x24, 0xfe, 0x6d, 0x06,
0x28, 0x04, 0xb3, 0x00, 0x76, 0x1d, 0x37, 0x18, 0x58, 0x73, 0x64, 0x78, 0xc0, 0x09, 0x60, 0x16, 0xfe, 0x28, 0x04, 0xb3, 0x00, 0x76, 0x1d, 0x37, 0x18, 0x58, 0x73, 0x60, 0x78, 0xc0, 0x09, 0x60,
0xfb, 0x90, 0x38, 0x94, 0x7f, 0x37, 0x81, 0x09, 0x62, 0x20, 0xd4, 0x0c, 0x28, 0x61, 0xd2, 0x09, 0x16, 0xfb, 0x90, 0x38, 0x94, 0x7f, 0x37, 0x81, 0x09, 0x62, 0x20, 0xd4, 0x0c, 0x28, 0x61, 0xd2,
0xb6, 0xc4, 0x7d, 0x3c, 0x4c, 0x29, 0xb2, 0xf7, 0xbb, 0xe1, 0x54, 0xf5, 0xfe, 0xf7, 0x54, 0x86, 0x09, 0xb6, 0xc4, 0x7d, 0xdc, 0x4f, 0x29, 0xb2, 0xf7, 0xbb, 0xe1, 0x54, 0xf5, 0xde, 0xf7, 0x54,
0xbf, 0xc7, 0x32, 0xec, 0xc3, 0x0e, 0x7e, 0x3f, 0x20, 0xc3, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c, 0x86, 0xbf, 0xc7, 0x32, 0xec, 0xc3, 0x0e, 0x7e, 0xdf, 0x23, 0xc3, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c,
0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c, 0xbe, 0x3c, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c,
0xf2, 0xc4, 0x50, 0xc1, 0x47, 0xc3, 0xcf, 0x4d, 0xa2, 0x2b, 0x9c, 0x08, 0xb7, 0x90, 0x88, 0x97, 0xbe, 0xf2, 0xc4, 0x50, 0xc1, 0x47, 0xc3, 0xcf, 0x4d, 0xa2, 0x2b, 0x9c, 0x08, 0xb7, 0x90, 0x88,
0xaa, 0x80, 0x7b, 0x40, 0x05, 0xb8, 0xe0, 0x7e, 0x4f, 0x04, 0x37, 0xc3, 0xae, 0xcc, 0xf3, 0xad, 0xd7, 0xaa, 0x80, 0xbb, 0x47, 0x05, 0xb8, 0xe0, 0x7e, 0x4f, 0x04, 0x37, 0xc3, 0xae, 0xcc, 0xf3,
0xed, 0xb8, 0x76, 0x3c, 0x66, 0x85, 0x5d, 0xc7, 0x42, 0xa9, 0x88, 0xee, 0x29, 0xf5, 0x60, 0x5f, 0x8d, 0xed, 0xb8, 0x76, 0x3c, 0x66, 0x85, 0x5d, 0xc7, 0x42, 0xa9, 0x88, 0xee, 0x29, 0xf5, 0x60,
0x12, 0x55, 0xdd, 0x34, 0xf0, 0x8b, 0x20, 0x7a, 0x73, 0xc4, 0x76, 0xe1, 0x7b, 0x6e, 0x17, 0xbe, 0x5f, 0x12, 0x55, 0x7d, 0xa9, 0xe3, 0x17, 0x41, 0xf4, 0xcb, 0x01, 0xdb, 0x85, 0xef, 0xb9, 0x5d,
0x67, 0x77, 0x61, 0x03, 0xff, 0xf1, 0x09, 0x8e, 0xb4, 0xd4, 0x16, 0x45, 0xc1, 0xe3, 0x64, 0x3d, 0xf8, 0x9e, 0xdd, 0x85, 0x17, 0xf8, 0x8f, 0x4f, 0x70, 0xa0, 0xa5, 0xb6, 0x28, 0x0a, 0x1e, 0x27,
0x05, 0x73, 0x86, 0x0e, 0x17, 0x28, 0xb5, 0xeb, 0x93, 0x59, 0x1d, 0xad, 0x79, 0x06, 0x4f, 0x1d, 0xeb, 0x29, 0x98, 0x33, 0x74, 0xb8, 0x40, 0xa9, 0x5d, 0x9b, 0xcc, 0x6a, 0x68, 0xcd, 0x33, 0x78,
0x23, 0x1f, 0x58, 0xf2, 0x5b, 0x3a, 0x33, 0xd7, 0x6e, 0x84, 0xd8, 0x62, 0x13, 0x16, 0x93, 0x0c, 0x6a, 0x18, 0xf9, 0xc0, 0x92, 0xdf, 0xd2, 0x99, 0xb9, 0x76, 0x23, 0xc4, 0x16, 0x9b, 0xb0, 0x98,
0x4c, 0x8b, 0xfc, 0xd5, 0x75, 0xe0, 0x83, 0x37, 0x30, 0xb9, 0x89, 0x15, 0x22, 0xca, 0xa2, 0x9f, 0x64, 0x60, 0x5a, 0xe4, 0xaf, 0xae, 0x03, 0x1f, 0xbc, 0x81, 0xc9, 0x4d, 0xac, 0x10, 0x51, 0x16,
0xa1, 0x0e, 0x06, 0x54, 0x18, 0x2c, 0xe9, 0xc6, 0xf7, 0xc9, 0xd2, 0xf4, 0x1e, 0x09, 0x84, 0x5f, 0xfd, 0x0c, 0x74, 0x30, 0xa0, 0xc2, 0x60, 0x49, 0x37, 0xbe, 0x4f, 0x96, 0xa6, 0xf7, 0x48, 0x20,
0x21, 0x01, 0xd9, 0x20, 0x4b, 0x4a, 0x22, 0x9f, 0x2c, 0x4c, 0xcf, 0x76, 0xe9, 0x91, 0xd4, 0x47, 0xfc, 0x0a, 0x09, 0xc8, 0x06, 0x59, 0x52, 0x12, 0xf9, 0x64, 0x61, 0x7a, 0xb6, 0x4b, 0x0f, 0xa4,
0xf3, 0x39, 0xd0, 0x69, 0xfb, 0xf8, 0x58, 0xf6, 0xaa, 0x86, 0xf4, 0x97, 0xf7, 0x57, 0x70, 0x06, 0x1e, 0x9a, 0xcf, 0xbe, 0x4e, 0x5b, 0x87, 0x87, 0xb2, 0x57, 0x35, 0xa4, 0x3f, 0xbd, 0x3f, 0x83,
0x6e, 0x0c, 0xa2, 0x9a, 0x00, 0x54, 0x03, 0xfd, 0x93, 0xe9, 0x91, 0x77, 0x93, 0xeb, 0x56, 0xb3, 0x11, 0xb8, 0x31, 0x88, 0x6a, 0x02, 0x50, 0x0d, 0xf4, 0x4f, 0xa6, 0x47, 0xde, 0x4d, 0xae, 0x9b,
0x2e, 0xc5, 0xae, 0xcb, 0x53, 0x36, 0x8c, 0x74, 0xe6, 0x41, 0x3f, 0x9a, 0xae, 0x63, 0x3b, 0xd1, 0x8d, 0x9a, 0x14, 0xbb, 0x2e, 0x4f, 0x79, 0x61, 0xa4, 0x33, 0x0f, 0xfa, 0xc9, 0x74, 0x1d, 0xdb,
0xa3, 0xac, 0xa0, 0x42, 0xc0, 0xd3, 0x90, 0x2f, 0x31, 0x63, 0xc3, 0xa9, 0xc7, 0xdc, 0xab, 0x30, 0x89, 0x1e, 0x65, 0x05, 0x15, 0x02, 0x9e, 0x86, 0x7c, 0x89, 0x19, 0x1b, 0x4e, 0x3d, 0xe6, 0x5e,
0xc1, 0xcc, 0x27, 0x61, 0xb8, 0x28, 0x29, 0x1c, 0x03, 0xb5, 0xfb, 0x6c, 0xe0, 0xc5, 0xa9, 0xe0, 0x85, 0x09, 0x66, 0x3e, 0x09, 0xc3, 0x45, 0x49, 0xe1, 0x18, 0xa8, 0xdd, 0x63, 0x03, 0x2f, 0xce,
0x03, 0x3d, 0xe1, 0x01, 0x60, 0x4f, 0x53, 0x63, 0x60, 0x80, 0xe5, 0xbe, 0xc7, 0x76, 0x42, 0x70, 0x04, 0x1f, 0xe8, 0x29, 0x0f, 0x00, 0xbb, 0x9a, 0x1a, 0x03, 0x03, 0x2c, 0xf7, 0x3d, 0xb6, 0x13,
0x1a, 0x8f, 0x00, 0x03, 0x36, 0xdb, 0x75, 0xc0, 0xfb, 0xf4, 0x84, 0x13, 0x62, 0xa0, 0xab, 0x70, 0x82, 0xd3, 0x78, 0x04, 0x18, 0xb0, 0xd9, 0xae, 0x03, 0xde, 0xa7, 0x2b, 0x9c, 0x10, 0x03, 0x5d,
0xdd, 0x7c, 0x01, 0x6c, 0x6e, 0xbe, 0xa1, 0x76, 0x7c, 0x1c, 0x87, 0x00, 0x59, 0xa2, 0x2f, 0x4e, 0x85, 0xeb, 0xc6, 0x2b, 0x60, 0x73, 0xf3, 0x0d, 0xb4, 0xc3, 0xc3, 0x38, 0x04, 0xc8, 0x12, 0x7d,
0x33, 0x6e, 0x83, 0xc1, 0x43, 0x98, 0xc5, 0x87, 0x6c, 0x13, 0xcc, 0x27, 0xbf, 0x38, 0x85, 0x19, 0x71, 0x96, 0x71, 0x1b, 0x0c, 0x1e, 0xc2, 0x2c, 0x3e, 0x64, 0x93, 0x60, 0x3e, 0xf9, 0xc5, 0x19,
0x77, 0x66, 0xef, 0x68, 0x46, 0x01, 0x05, 0x7f, 0x9e, 0x67, 0x27, 0x8b, 0xa7, 0x7f, 0x0a, 0xef, 0xcc, 0xb8, 0x35, 0x7b, 0x5b, 0x33, 0x0a, 0x28, 0xf8, 0x78, 0x9e, 0x9d, 0x2c, 0x9e, 0xfe, 0x29,
0x9d, 0xc8, 0x5a, 0xc8, 0x05, 0x3c, 0x82, 0x50, 0x4b, 0xdd, 0x26, 0x03, 0x70, 0xab, 0x19, 0x85, 0xbc, 0x77, 0x22, 0x6b, 0x21, 0x17, 0xf0, 0x08, 0x42, 0x2d, 0x75, 0x93, 0x0c, 0xc0, 0xad, 0x66,
0xc9, 0x90, 0x04, 0x9a, 0x66, 0x99, 0x21, 0x25, 0x5a, 0xaf, 0x10, 0x95, 0xae, 0x8a, 0x3d, 0xe9, 0x14, 0x26, 0x43, 0x12, 0x68, 0x9a, 0x65, 0x86, 0x94, 0x68, 0xdd, 0x42, 0x54, 0xba, 0x2a, 0xf6,
0x4f, 0x21, 0x68, 0xbb, 0xed, 0x33, 0xd8, 0x96, 0xd6, 0xdb, 0x99, 0xa0, 0xa5, 0xe5, 0x20, 0x3a, 0xa4, 0x37, 0x85, 0xa0, 0xed, 0xb6, 0xc7, 0x60, 0x9b, 0x5a, 0x77, 0x6b, 0x82, 0xa6, 0x96, 0x83,
0x05, 0x10, 0x9d, 0x2c, 0x44, 0xa7, 0x00, 0xa2, 0x93, 0x83, 0x68, 0x16, 0x81, 0x34, 0x13, 0x18, 0x68, 0x17, 0x40, 0xb4, 0xb3, 0x10, 0xed, 0x02, 0x88, 0x76, 0x0e, 0xa2, 0x51, 0x04, 0xd2, 0x48,
0x9b, 0xcb, 0x7d, 0x6f, 0x0f, 0x43, 0x63, 0x56, 0x6e, 0x18, 0xcc, 0x52, 0x07, 0x80, 0x34, 0xb0, 0x60, 0x6c, 0x2e, 0xf7, 0xdd, 0x1d, 0x0c, 0x8d, 0x59, 0xf9, 0xc2, 0x60, 0x96, 0x3a, 0x00, 0xa4,
0x41, 0x79, 0x56, 0x0b, 0x6d, 0xc7, 0x04, 0x22, 0x64, 0xb4, 0x1c, 0xbb, 0x21, 0x1c, 0x97, 0x58, 0x81, 0x0d, 0xca, 0xb3, 0x5a, 0x68, 0x3b, 0x26, 0x10, 0x21, 0xa3, 0xe5, 0xd8, 0x0e, 0xe1, 0xb8,
0x08, 0x63, 0x62, 0xfd, 0x54, 0xb6, 0xb6, 0x07, 0xb0, 0x5d, 0xd2, 0x25, 0xc6, 0x20, 0x71, 0xb4, 0xc4, 0x42, 0x18, 0x13, 0xeb, 0xa7, 0xb2, 0xb1, 0x3d, 0x80, 0xed, 0x92, 0x2e, 0x31, 0x06, 0x89,
0x7b, 0xc0, 0x4c, 0x9d, 0x49, 0x55, 0x2f, 0x35, 0x53, 0x4a, 0x5f, 0x68, 0x6e, 0x54, 0x3d, 0x30, 0xa3, 0xdd, 0x3d, 0x66, 0x6a, 0x24, 0x55, 0xbd, 0xd4, 0x4c, 0x29, 0x3d, 0xa1, 0xb9, 0x51, 0x75,
0x70, 0x72, 0x91, 0x1f, 0xa8, 0xd2, 0x41, 0xab, 0x79, 0x92, 0xea, 0x68, 0xcb, 0x30, 0x8a, 0x27, 0xcf, 0xc0, 0xc9, 0x45, 0x7e, 0xa0, 0x4a, 0xfb, 0xcd, 0xc6, 0xa9, 0xdc, 0x38, 0x06, 0x93, 0x76,
0xd4, 0x72, 0xe3, 0x4e, 0xe8, 0xb0, 0xf9, 0xe6, 0xa4, 0xa9, 0xfd, 0x2d, 0xea, 0xe9, 0x1d, 0xf8, 0x78, 0xd8, 0x38, 0x81, 0x3f, 0xcf, 0xcf, 0x72, 0xf4, 0xab, 0xd1, 0x50, 0xd4, 0x54, 0x73, 0x9b,
0x07, 0x11, 0x0c, 0x0d, 0xc0, 0xc0, 0x5f, 0x74, 0xe1, 0xd1, 0x6b, 0xf8, 0x9f, 0x7d, 0x69, 0xc3, 0x86, 0x51, 0x4c, 0x86, 0x96, 0xc3, 0x76, 0x4a, 0x07, 0x8d, 0xce, 0x69, 0x43, 0xfb, 0x35, 0xea,
0x87, 0x16, 0xfb, 0xd2, 0xd2, 0xc1, 0x58, 0x0e, 0xda, 0xdd, 0x93, 0x4e, 0xaf, 0xdd, 0x06, 0x99, 0xea, 0x6d, 0xf8, 0x07, 0x11, 0x0c, 0x0c, 0xc0, 0xc0, 0x5f, 0x74, 0xe0, 0xd1, 0x31, 0xfc, 0xcf,
0x7d, 0x7e, 0x6e, 0x77, 0x50, 0x74, 0x05, 0x44, 0xca, 0x0e, 0x60, 0x0e, 0x65, 0x41, 0x26, 0xf2, 0xbe, 0xb4, 0xe0, 0x43, 0xf3, 0xd7, 0x48, 0x81, 0x6f, 0x4d, 0x1d, 0x6c, 0x68, 0xbf, 0xd5, 0x39,
0x02, 0xc3, 0x4d, 0x35, 0xc2, 0x7f, 0x4c, 0x70, 0xea, 0x5c, 0xda, 0x96, 0xab, 0x7b, 0x33, 0xf0, 0x6d, 0xe3, 0x93, 0x94, 0x29, 0xc0, 0x22, 0xca, 0x42, 0x4d, 0xe4, 0x08, 0x06, 0x9d, 0x6a, 0x84,
0xc0, 0x78, 0xec, 0xec, 0x1d, 0xdb, 0xf9, 0xcb, 0x58, 0xf1, 0x7e, 0x6d, 0x6a, 0xda, 0x8e, 0x66, 0xff, 0x98, 0xe0, 0xda, 0xb9, 0xcc, 0x2d, 0x57, 0xf7, 0x66, 0xe0, 0x81, 0x09, 0xd9, 0xda, 0x41,
0x80, 0x2c, 0x18, 0x46, 0x4e, 0x98, 0x85, 0x39, 0x30, 0xf4, 0x66, 0x6f, 0x47, 0x71, 0x65, 0xf1, 0xb6, 0xff, 0x97, 0xb1, 0xfa, 0xfd, 0xd6, 0xd0, 0xb4, 0x2d, 0xfd, 0x00, 0x89, 0x30, 0x8c, 0x9c,
0x2e, 0x2f, 0xfd, 0x7d, 0xee, 0xeb, 0xca, 0xa2, 0x3d, 0x10, 0x3c, 0x6a, 0xe5, 0xc3, 0x3d, 0x3f, 0x48, 0x0b, 0xa3, 0x60, 0xe8, 0x8d, 0xee, 0x96, 0xfa, 0xca, 0xe2, 0x5d, 0x5e, 0x07, 0x7a, 0xdc,
0x1b, 0xee, 0x31, 0xff, 0xc5, 0x9c, 0x5a, 0x49, 0xc0, 0x17, 0xfb, 0x31, 0xbf, 0x30, 0x94, 0x53, 0xe3, 0x95, 0xc5, 0x7c, 0x20, 0x7e, 0xd4, 0xca, 0x07, 0x7d, 0x7e, 0x36, 0xe8, 0x63, 0x5e, 0x8c,
0xc3, 0x74, 0x9b, 0xfd, 0x5c, 0x14, 0xc0, 0xf9, 0xb3, 0xd2, 0x6c, 0x74, 0x63, 0x19, 0xa9, 0x0d, 0xb9, 0xb6, 0x92, 0xb0, 0x2f, 0xf6, 0x66, 0x7e, 0x61, 0x40, 0xa7, 0x86, 0xe9, 0x66, 0xfb, 0xb9,
0xd1, 0x8b, 0x81, 0x15, 0x1a, 0xbc, 0x79, 0x7d, 0x22, 0x9d, 0x5f, 0x13, 0x90, 0x51, 0x48, 0x0b, 0x58, 0x80, 0xf3, 0x67, 0xa5, 0xd9, 0xe8, 0xcc, 0x32, 0xb2, 0x1b, 0xa2, 0x2f, 0x03, 0x5b, 0xd4,
0xc3, 0x9e, 0xd4, 0x0b, 0x87, 0xed, 0x37, 0x27, 0xd2, 0x5b, 0x70, 0x12, 0xe4, 0xc3, 0xf5, 0xf9, 0x3f, 0x39, 0x3e, 0x95, 0xce, 0xaf, 0x09, 0x48, 0x2a, 0x24, 0x87, 0x61, 0x57, 0xea, 0x86, 0x83,
0x15, 0x7f, 0xa2, 0x9f, 0x48, 0xf8, 0x05, 0xdf, 0x4b, 0xfc, 0xa9, 0xb0, 0x7e, 0xfa, 0x2e, 0xe2, 0xd6, 0xc9, 0xa9, 0xf4, 0x16, 0x5c, 0x05, 0xf9, 0x70, 0x7d, 0x7e, 0xc5, 0x9f, 0xe8, 0xa7, 0x12,
0xf6, 0x1b, 0xc4, 0xfb, 0xba, 0x7d, 0x22, 0x9d, 0xb9, 0xb7, 0x31, 0x0e, 0x49, 0x62, 0x1c, 0x0a, 0x7e, 0xc1, 0xf7, 0x12, 0x7f, 0x2a, 0x6c, 0xa0, 0xbe, 0x8d, 0xb8, 0x75, 0x82, 0x78, 0x8f, 0x5b,
0x4a, 0xa4, 0x49, 0x17, 0x5e, 0x96, 0xf1, 0xc7, 0xac, 0x1a, 0x42, 0xfe, 0x43, 0xd5, 0x55, 0xd4, 0xa7, 0xd2, 0xc8, 0xbd, 0x8d, 0x71, 0x48, 0x12, 0xe3, 0x50, 0x50, 0x22, 0x3d, 0xba, 0xf0, 0xb5,
0xb9, 0xa1, 0xf7, 0xe7, 0x83, 0x4e, 0x7f, 0x8e, 0x21, 0x85, 0x5c, 0x86, 0x41, 0xaa, 0xce, 0x39, 0x8c, 0x3f, 0x66, 0xd5, 0x10, 0x5a, 0x10, 0xaa, 0xae, 0xa2, 0xce, 0x0d, 0xbd, 0x37, 0xef, 0xb7,
0x0a, 0xf0, 0x0a, 0x72, 0x66, 0x75, 0xc7, 0xc7, 0xf3, 0x41, 0xfb, 0xf9, 0x99, 0x93, 0x05, 0xd9, 0x7b, 0x73, 0x0c, 0x2c, 0xe4, 0x32, 0x0c, 0x52, 0x75, 0xce, 0x51, 0x80, 0x6f, 0x90, 0x33, 0xab,
0xd6, 0x9c, 0x7d, 0xd6, 0xf1, 0x65, 0x07, 0x40, 0xe6, 0xd5, 0xb6, 0x36, 0x08, 0x4f, 0xe4, 0xa0, 0x3b, 0x3c, 0x9c, 0xf7, 0x5b, 0xcf, 0xcf, 0x9c, 0x2c, 0xc8, 0xb9, 0xe6, 0xec, 0xb3, 0x8e, 0x2f,
0x44, 0xe5, 0xd5, 0x00, 0x92, 0x86, 0x7f, 0xad, 0x9d, 0x80, 0xd9, 0x43, 0xa5, 0xb7, 0x0b, 0xc8, 0xdb, 0x00, 0x32, 0xaf, 0xb6, 0xb4, 0x7e, 0x78, 0x2a, 0x07, 0x25, 0x8a, 0xaf, 0x06, 0x90, 0x3a,
0x65, 0x28, 0x0b, 0xa6, 0xc3, 0xb7, 0xd8, 0xbf, 0x2a, 0xca, 0x06, 0x22, 0x02, 0x6e, 0x5e, 0x83, 0xfc, 0x6b, 0xed, 0x04, 0xcc, 0x2a, 0x2a, 0xdd, 0x6d, 0x40, 0x2e, 0x43, 0x59, 0x30, 0x1d, 0xbe,
0x19, 0xe3, 0x55, 0x6c, 0x13, 0x0b, 0x9e, 0x3d, 0x3f, 0xb7, 0x80, 0xc4, 0x50, 0x0d, 0x99, 0x6a, 0xc5, 0x5e, 0x56, 0x51, 0x5e, 0x40, 0x9b, 0xb8, 0x91, 0x0d, 0x66, 0x8c, 0x57, 0xb1, 0x65, 0x2c,
0x84, 0xa0, 0x1a, 0x30, 0xb6, 0x54, 0xe1, 0x33, 0x71, 0x89, 0x01, 0x91, 0x8e, 0x9a, 0x45, 0xe8, 0x78, 0xf6, 0xfc, 0xdc, 0x04, 0x12, 0x43, 0x35, 0x64, 0x9a, 0x10, 0x82, 0x26, 0xc0, 0xd8, 0x52,
0x7b, 0x16, 0x44, 0x16, 0xb7, 0x06, 0xc3, 0x77, 0x82, 0x59, 0xe8, 0x91, 0xde, 0x63, 0xc9, 0xe8, 0xb5, 0xcf, 0x44, 0x27, 0x06, 0xc4, 0x3b, 0x6a, 0x16, 0xa1, 0xef, 0x59, 0x10, 0x5f, 0xdc, 0x1a,
0x46, 0x8d, 0x9e, 0x0d, 0x0f, 0xf6, 0x49, 0xff, 0x15, 0xa7, 0x68, 0x36, 0x61, 0x52, 0x70, 0x18, 0x0c, 0xdf, 0x29, 0xe6, 0xa2, 0x07, 0x7a, 0x97, 0xa5, 0xa4, 0x2f, 0x6a, 0xf4, 0x6c, 0x78, 0xb0,
0xa1, 0x98, 0x9b, 0xb1, 0x87, 0xf1, 0xae, 0x0d, 0xbc, 0x6b, 0xb7, 0x8e, 0xf0, 0x51, 0xb7, 0x8b, 0x4f, 0xfa, 0x6f, 0x38, 0x45, 0xa3, 0x81, 0x0c, 0x69, 0x74, 0xf0, 0x73, 0x93, 0x7d, 0x6e, 0x31,
0x54, 0x31, 0xfc, 0x96, 0xcf, 0xf0, 0xe7, 0x99, 0x90, 0xe1, 0x37, 0x8e, 0x37, 0x04, 0x82, 0xee, 0xce, 0xb5, 0x80, 0x73, 0xad, 0xe6, 0x81, 0x11, 0x3e, 0x3f, 0x77, 0x3a, 0x48, 0x13, 0xc3, 0x6e,
0x09, 0xe7, 0x4e, 0x2f, 0xe1, 0x26, 0x43, 0x61, 0x3b, 0x73, 0xc0, 0x51, 0x95, 0xee, 0x77, 0x94, 0xf9, 0x0c, 0x7b, 0x9e, 0x05, 0x19, 0x6e, 0xe3, 0x78, 0x43, 0x20, 0xe8, 0x9c, 0x72, 0xde, 0x74,
0x35, 0x4b, 0xc8, 0x8e, 0x9a, 0xb6, 0x34, 0xa0, 0x05, 0x2c, 0x92, 0xce, 0xfe, 0x14, 0xb3, 0xe5, 0x13, 0x5e, 0x32, 0x14, 0xb6, 0x33, 0x07, 0x1c, 0x55, 0xe9, 0x5e, 0xda, 0xc6, 0x13, 0x93, 0xb1,
0xd3, 0x55, 0x9e, 0x2d, 0x9a, 0x92, 0x9f, 0xd2, 0x92, 0x0a, 0x48, 0x7f, 0x19, 0xb5, 0x81, 0xb4, 0xa5, 0xa2, 0x59, 0x0a, 0x8b, 0x19, 0xf2, 0xf9, 0x2a, 0xcf, 0x10, 0x4d, 0xc9, 0x4f, 0x67, 0x15,
0x67, 0xd5, 0xfb, 0x87, 0x86, 0xd2, 0xbf, 0x87, 0x61, 0xb3, 0x22, 0x3c, 0xfa, 0x6b, 0x1c, 0xda, 0x4c, 0xf7, 0x4a, 0x4a, 0x03, 0x69, 0xc7, 0x8a, 0x77, 0x0f, 0x0d, 0xa5, 0x7f, 0x0f, 0xb3, 0x66,
0x6a, 0x32, 0x3c, 0x1d, 0x2d, 0xd6, 0xbd, 0xa2, 0x58, 0x25, 0xc6, 0x63, 0xee, 0xe0, 0x81, 0xdc, 0x45, 0x78, 0xf4, 0xe3, 0x74, 0xd3, 0x8c, 0xb6, 0x16, 0x6b, 0x5d, 0x51, 0xac, 0x12, 0xe3, 0x31,
0xa2, 0x8d, 0xec, 0x2d, 0x1e, 0x07, 0xe6, 0x6e, 0xd7, 0x7c, 0xa4, 0x24, 0x9f, 0x7b, 0x77, 0x10, 0xb7, 0xf0, 0x40, 0x6e, 0xd1, 0xd2, 0x60, 0x9b, 0x77, 0x8f, 0x73, 0x0b, 0xe6, 0x6f, 0x75, 0x76,
0xa4, 0x51, 0x9b, 0x40, 0x1a, 0x8e, 0x49, 0x6d, 0x4f, 0x1a, 0x43, 0x44, 0x09, 0xe6, 0xc8, 0x26, 0xcd, 0x08, 0x26, 0x72, 0xdb, 0xe4, 0xa4, 0x8b, 0x3d, 0xf7, 0xee, 0x20, 0xbc, 0xa3, 0x36, 0x81,
0x72, 0xe0, 0x47, 0x26, 0xbe, 0xd2, 0xbb, 0xda, 0xff, 0xfc, 0xb7, 0x92, 0xc4, 0x4c, 0xf6, 0x7e, 0x04, 0x1e, 0xd3, 0xe1, 0xae, 0x34, 0x86, 0x58, 0x14, 0x4c, 0x98, 0x4d, 0xe4, 0xc0, 0x8f, 0x4c,
0x7c, 0x36, 0x7d, 0x40, 0x9b, 0xc1, 0x8a, 0x61, 0x3d, 0xe1, 0x76, 0xef, 0x77, 0xf7, 0x2e, 0xda, 0x7c, 0xa5, 0x77, 0xb4, 0xff, 0xf9, 0x6f, 0x25, 0x89, 0xb6, 0xec, 0xdd, 0xf8, 0x6c, 0xfa, 0x80,
0x21, 0x37, 0x7a, 0x7e, 0xe6, 0x61, 0xc9, 0xe9, 0xa7, 0x3a, 0xb7, 0xb9, 0xd4, 0x66, 0xe8, 0x0c, 0x76, 0x86, 0x95, 0xd1, 0xba, 0xc2, 0x61, 0xdf, 0x6f, 0xef, 0x7a, 0xb4, 0x45, 0x6e, 0xc4, 0x44,
0x11, 0xcb, 0x9c, 0x8d, 0x33, 0x31, 0x09, 0xb7, 0xda, 0xab, 0x43, 0x39, 0xba, 0xba, 0xc6, 0x4a, 0x0a, 0x8c, 0xf9, 0xd9, 0xe7, 0x1a, 0xb7, 0xd3, 0xd4, 0x66, 0xe8, 0x0c, 0x11, 0x05, 0x8d, 0xc6,
0x20, 0xfc, 0x7f, 0x07, 0x86, 0x3b, 0x35, 0xe0, 0xab, 0x9d, 0x7c, 0xdd, 0x32, 0x56, 0x65, 0xf9, 0x99, 0x68, 0x86, 0x5b, 0xfa, 0xd5, 0xbe, 0xec, 0x5e, 0x5d, 0x63, 0x0d, 0x11, 0xfe, 0xbf, 0x03,
0xba, 0x5b, 0xf8, 0x2a, 0x4e, 0x82, 0xce, 0x20, 0x83, 0xb0, 0x44, 0x16, 0x83, 0x09, 0x91, 0x15, 0x63, 0x9f, 0x1a, 0xfd, 0xd5, 0x56, 0xa6, 0x6f, 0x19, 0xab, 0xb2, 0x4c, 0xdf, 0x2d, 0x7c, 0x15,
0x27, 0x44, 0x96, 0x72, 0x40, 0xfb, 0xc1, 0xd1, 0x1a, 0xac, 0x12, 0xd1, 0x2f, 0x18, 0x1c, 0x67, 0xa7, 0x4f, 0x23, 0xc8, 0x3d, 0x2c, 0x91, 0xff, 0x60, 0x2a, 0x65, 0xc5, 0xa9, 0x94, 0xa5, 0xec,
0x53, 0x56, 0x9c, 0x4d, 0xf1, 0x39, 0xe4, 0xd0, 0xf8, 0xa1, 0xa4, 0x47, 0xe1, 0x29, 0xcf, 0x13, 0xb1, 0x18, 0xe0, 0x8c, 0x0d, 0x56, 0xc3, 0xe8, 0x15, 0x0c, 0x8e, 0xf3, 0x30, 0x2b, 0xce, 0xc3,
0x5b, 0x01, 0x4e, 0x08, 0x0e, 0x53, 0xe5, 0x5f, 0x1c, 0x0f, 0xd8, 0xc2, 0x3e, 0xf2, 0x9d, 0xb1, 0xf8, 0x1c, 0x72, 0x68, 0xfc, 0x50, 0xba, 0xa4, 0xf0, 0x64, 0xe9, 0x89, 0xad, 0x00, 0x27, 0x04,
0x7c, 0xd7, 0x0f, 0x0c, 0xe9, 0xa7, 0xd9, 0x6c, 0x26, 0xf5, 0x93, 0x1c, 0x29, 0x19, 0x98, 0xd6, 0x27, 0xab, 0xf2, 0x2f, 0x8e, 0x07, 0x6c, 0x61, 0x1f, 0xf9, 0xce, 0x58, 0xbe, 0xeb, 0x07, 0x86,
0x40, 0xd3, 0xf1, 0x35, 0x3d, 0x53, 0x46, 0xd8, 0x47, 0x7b, 0x9c, 0x09, 0x5a, 0x71, 0x26, 0x68, 0xf4, 0xd3, 0x6c, 0x36, 0x93, 0x7a, 0x49, 0x76, 0x95, 0x0c, 0x4c, 0xab, 0xa7, 0xe9, 0xf8, 0x23,
0xc5, 0x99, 0xa0, 0x15, 0x67, 0x82, 0x96, 0x28, 0x23, 0xac, 0x76, 0xca, 0x08, 0xab, 0xad, 0x32, 0x3d, 0x53, 0x80, 0xd8, 0x45, 0x7b, 0x9c, 0x43, 0x5a, 0x71, 0x0e, 0x69, 0xc5, 0x39, 0xa4, 0x15,
0xc2, 0xfc, 0x50, 0x19, 0x61, 0xfe, 0x43, 0x65, 0x84, 0xf9, 0x4e, 0x19, 0x81, 0x67, 0xc5, 0x1a, 0xe7, 0x90, 0x96, 0x28, 0x40, 0xac, 0xb6, 0x0a, 0x10, 0xab, 0x8d, 0x02, 0xc4, 0x7c, 0x5f, 0x01,
0xe4, 0xc4, 0xab, 0x6c, 0x4e, 0x0c, 0x4b, 0x75, 0x8e, 0x8c, 0xef, 0x9c, 0x88, 0x19, 0x90, 0x75, 0x62, 0xfe, 0x43, 0x05, 0x88, 0xf9, 0x56, 0x01, 0x82, 0xe7, 0xd3, 0x1a, 0x64, 0xd3, 0xab, 0x6c,
0x28, 0x37, 0x9e, 0xc5, 0x1c, 0x99, 0xc5, 0x1c, 0x99, 0xc5, 0x1c, 0x99, 0xc5, 0x1c, 0x99, 0xc5, 0x36, 0x0d, 0x4b, 0x75, 0x0e, 0x8c, 0xef, 0x9c, 0x88, 0x19, 0x90, 0xb5, 0x2f, 0xab, 0x9e, 0xc5,
0x1c, 0x99, 0xc5, 0x1c, 0x99, 0xc5, 0x1c, 0x99, 0x65, 0x72, 0xe3, 0x59, 0x61, 0x6e, 0xfc, 0x58, 0x1c, 0x99, 0xc5, 0x1c, 0x99, 0xc5, 0x1c, 0x99, 0xc5, 0x1c, 0x99, 0xc5, 0x1c, 0x99, 0xc5, 0x1c,
0x48, 0xc4, 0x4b, 0x73, 0xe3, 0xc7, 0x7d, 0xb9, 0x31, 0xdf, 0x8a, 0xef, 0x3b, 0x5b, 0x91, 0x3e, 0x99, 0xc5, 0x1c, 0x99, 0x65, 0xb2, 0xea, 0x59, 0x61, 0x56, 0xfd, 0x58, 0x48, 0xc4, 0x6b, 0xb3,
0x11, 0x7c, 0x4b, 0xe6, 0x49, 0xdf, 0xb1, 0x12, 0xc6, 0x66, 0x33, 0xe7, 0x95, 0x0e, 0x6a, 0x0c, 0xea, 0xc7, 0x5d, 0x59, 0x35, 0xdf, 0x8a, 0xef, 0x5b, 0x5b, 0x91, 0x3e, 0x11, 0x7c, 0x4b, 0xe6,
0x69, 0xa6, 0xd2, 0xb1, 0xca, 0x57, 0x3a, 0x4e, 0x76, 0x25, 0x10, 0x1c, 0xb1, 0xd4, 0xdb, 0x79, 0x49, 0xdf, 0xb1, 0xe2, 0xc7, 0xcb, 0xcb, 0x9c, 0xd7, 0x48, 0xa8, 0x31, 0xa0, 0x99, 0x1a, 0xc9,
0xbc, 0x55, 0x3f, 0x39, 0x80, 0x55, 0xf2, 0x03, 0xd3, 0x9b, 0xa3, 0x71, 0x61, 0xf2, 0xbc, 0xe1, 0x2a, 0x5f, 0x23, 0x39, 0xdd, 0x96, 0x40, 0x70, 0xde, 0x52, 0x77, 0xeb, 0xf1, 0x46, 0xe5, 0x65,
0xf5, 0x18, 0x2b, 0xae, 0xc7, 0xe0, 0x07, 0xe0, 0xfa, 0x11, 0x8a, 0x9f, 0x7c, 0x40, 0xc4, 0x21, 0x0f, 0x56, 0xc9, 0x0f, 0x4c, 0x6f, 0x8e, 0xc6, 0x85, 0xc9, 0xf3, 0x0b, 0xaf, 0xe4, 0x58, 0x71,
0x0a, 0x70, 0x43, 0xca, 0xf8, 0x7d, 0x51, 0x36, 0x61, 0x3f, 0x7b, 0x02, 0x00, 0xb6, 0x30, 0xad, 0x25, 0x07, 0x3f, 0x00, 0xd7, 0x0f, 0x50, 0xfc, 0xe4, 0x3d, 0x22, 0x0e, 0x91, 0x83, 0x1b, 0x52,
0xff, 0x7f, 0x76, 0xbf, 0xc0, 0x14, 0xcc, 0x0a, 0xba, 0x21, 0xb3, 0x9c, 0xdc, 0xbb, 0xad, 0x85, 0xc6, 0xef, 0x8b, 0xb2, 0x09, 0x7b, 0xd9, 0xb3, 0x03, 0xb0, 0x85, 0xe9, 0xc9, 0xc1, 0x17, 0xf7,
0x77, 0x13, 0x0f, 0xc1, 0x2c, 0x62, 0xda, 0x05, 0x96, 0x2d, 0x8b, 0x49, 0xbd, 0x00, 0x67, 0x29, 0x2b, 0x4c, 0xc1, 0xac, 0xa0, 0x1b, 0x32, 0xcb, 0xc9, 0xfd, 0xe2, 0x5a, 0xf8, 0x45, 0xf1, 0x10,
0xfb, 0xe9, 0xac, 0x3b, 0x78, 0x14, 0xa5, 0x7a, 0x31, 0x5c, 0x03, 0xd4, 0xda, 0xf0, 0xab, 0x17, 0xcc, 0x22, 0x26, 0x6c, 0x60, 0xd9, 0xb2, 0x98, 0xd4, 0x0b, 0x88, 0x3b, 0x64, 0x3f, 0x9d, 0x75,
0x8a, 0x7a, 0x31, 0xbc, 0x83, 0x2f, 0x77, 0x06, 0x7c, 0xfc, 0x71, 0x53, 0x31, 0x40, 0xbf, 0x26, 0x0b, 0x8f, 0xa2, 0x54, 0x2f, 0x06, 0x6b, 0x80, 0x5a, 0x1b, 0x7e, 0xf5, 0x42, 0x51, 0x2f, 0x06,
0x2f, 0xab, 0x30, 0x1a, 0xb7, 0x8f, 0xcd, 0x85, 0x96, 0x1b, 0x8b, 0xec, 0x67, 0xe2, 0xdc, 0x67, 0x77, 0xf0, 0xe5, 0xce, 0x80, 0x8f, 0x3f, 0x6e, 0x2a, 0xfa, 0xe8, 0x11, 0xe5, 0x65, 0x15, 0x46,
0x2d, 0xdc, 0xc0, 0xce, 0x73, 0xc3, 0x58, 0x9e, 0x48, 0xc0, 0x6f, 0x59, 0xaa, 0x2e, 0xab, 0x12, 0xe3, 0xf6, 0xb1, 0xb9, 0xd0, 0x72, 0x63, 0x79, 0x7e, 0x24, 0x4e, 0x8c, 0xd6, 0xc2, 0x0d, 0x6c,
0x59, 0x2d, 0x1e, 0x43, 0xc7, 0x32, 0xdd, 0xd8, 0x6f, 0x2c, 0xb5, 0x5c, 0xe6, 0x65, 0xaa, 0xfc, 0x3d, 0x37, 0x8c, 0xe5, 0xa9, 0x04, 0xfc, 0x96, 0xa5, 0xea, 0xb2, 0x2a, 0x91, 0xd5, 0xe2, 0x31,
0xf0, 0xc5, 0x6c, 0x60, 0xba, 0xf1, 0x37, 0x5d, 0x13, 0xd9, 0xbb, 0x3d, 0x35, 0x53, 0x67, 0x3d, 0x74, 0x2c, 0xd3, 0x8d, 0xfd, 0xc6, 0x52, 0xcb, 0xe5, 0x6c, 0xa6, 0xca, 0x8f, 0x6d, 0xcc, 0x3a,
0x35, 0xad, 0xdb, 0x79, 0xe0, 0xaf, 0x3d, 0xdb, 0xf8, 0x86, 0xae, 0xc2, 0x0c, 0x6a, 0xf3, 0xc0, 0xa6, 0x24, 0xbf, 0xea, 0x9a, 0xc8, 0xfb, 0xed, 0xa9, 0x99, 0xba, 0xf9, 0xa9, 0x69, 0xdd, 0xce,
0xb4, 0x1d, 0x3c, 0x31, 0x78, 0xa3, 0xd9, 0x74, 0xae, 0x92, 0x9f, 0x9f, 0x78, 0x19, 0xe3, 0xb5, 0x03, 0x7f, 0xed, 0xd9, 0xc6, 0x37, 0x74, 0x15, 0x66, 0x70, 0x34, 0x0f, 0x4c, 0xdb, 0xc1, 0xb3,
0x76, 0xc2, 0x3f, 0xbc, 0x81, 0x1c, 0x81, 0x09, 0x50, 0x46, 0x02, 0x2c, 0xcb, 0x92, 0x36, 0x44, 0x86, 0x13, 0xcd, 0xa6, 0x73, 0x95, 0xfc, 0xfc, 0xc4, 0x0b, 0x20, 0xc7, 0xda, 0x29, 0xff, 0x70,
0x8b, 0x81, 0x37, 0xbf, 0xa8, 0xe4, 0xa7, 0x76, 0xbb, 0x9d, 0x7e, 0x27, 0x30, 0xff, 0x2f, 0xca, 0x02, 0x79, 0x05, 0x13, 0xa0, 0x8c, 0x04, 0x58, 0x96, 0x25, 0xbd, 0x10, 0x2d, 0x06, 0x7e, 0xf9,
0x37, 0xb1, 0x23, 0xd4, 0x2e, 0x4b, 0x48, 0xee, 0x86, 0x97, 0x66, 0xb4, 0x40, 0xb9, 0x90, 0x99, 0x45, 0x25, 0x3f, 0xb5, 0x5a, 0xad, 0xf4, 0x3b, 0x81, 0xf9, 0x7f, 0x51, 0xbe, 0x89, 0x1d, 0xa1,
0xe1, 0x56, 0xbb, 0x9a, 0xa6, 0x3c, 0x3f, 0xf3, 0x99, 0xbb, 0x5a, 0xb1, 0x07, 0x2e, 0xc0, 0xc7, 0x76, 0x59, 0x12, 0x73, 0x37, 0xb8, 0x34, 0xa3, 0x05, 0xca, 0x85, 0xcc, 0x0c, 0xb7, 0xda, 0xd1,
0x25, 0x3a, 0xc6, 0x66, 0x3e, 0x14, 0x60, 0xd3, 0xb5, 0xed, 0x85, 0x70, 0x6c, 0xf7, 0x90, 0xf8, 0x34, 0xe5, 0xf9, 0x99, 0xcf, 0xdc, 0xd1, 0x8a, 0x3d, 0x70, 0x01, 0x3e, 0x2e, 0xd1, 0x31, 0x36,
0x86, 0xbe, 0x97, 0x63, 0x66, 0x3a, 0x7f, 0x57, 0xfb, 0x05, 0x8f, 0x08, 0x00, 0x5d, 0x1d, 0x8b, 0xf3, 0xa1, 0x00, 0x9b, 0xae, 0x6d, 0x2e, 0x84, 0x63, 0xbb, 0x87, 0x94, 0x39, 0xf4, 0xbd, 0x1c,
0x38, 0x64, 0x49, 0x97, 0x7e, 0xf0, 0x28, 0x55, 0xd3, 0x62, 0xcf, 0xc9, 0x37, 0x22, 0x0f, 0xa6, 0x33, 0xd3, 0xf9, 0x3b, 0xda, 0x2f, 0x78, 0xb8, 0x00, 0xe8, 0x6a, 0x58, 0xfe, 0x21, 0x4b, 0xba,
0xc3, 0x77, 0xe3, 0xf1, 0xd5, 0xb8, 0x47, 0xfe, 0x64, 0x45, 0x1b, 0x1f, 0x3c, 0x3e, 0x30, 0x03, 0xf4, 0x83, 0x47, 0xa9, 0x9a, 0x96, 0x89, 0x4e, 0xbf, 0x11, 0xb9, 0x3f, 0x1d, 0xbc, 0x1b, 0x8f,
0x77, 0x62, 0x33, 0x3a, 0x1a, 0x34, 0xa6, 0x43, 0xe5, 0x1b, 0x44, 0xfd, 0x4a, 0x0f, 0xf0, 0x69, 0xaf, 0xc6, 0x5d, 0xf2, 0x91, 0x95, 0x7b, 0x7c, 0xf0, 0xf8, 0xc0, 0x0c, 0xdc, 0x89, 0x97, 0xe1,
0xbc, 0x18, 0xb4, 0x02, 0x08, 0x11, 0x22, 0x30, 0xc7, 0x7b, 0x6e, 0x30, 0xda, 0x2d, 0xea, 0xb8, 0x41, 0xbf, 0x3e, 0x1d, 0x28, 0xdf, 0x20, 0x53, 0x50, 0xba, 0x80, 0x4f, 0xe3, 0x65, 0xa4, 0x15,
0xb2, 0x0c, 0x68, 0xab, 0xcb, 0xbf, 0xf1, 0xdc, 0x4a, 0x69, 0x74, 0x60, 0x15, 0x8d, 0x66, 0xff, 0x40, 0x88, 0x10, 0x81, 0x39, 0xde, 0x73, 0x83, 0xd1, 0x6e, 0x51, 0xc7, 0x95, 0x65, 0x40, 0x5b,
0xdc, 0x38, 0x1f, 0x76, 0x4e, 0x52, 0xa8, 0x73, 0xa5, 0x77, 0xde, 0xf7, 0x0d, 0x91, 0x4c, 0x2c, 0x5d, 0xfe, 0xca, 0xf3, 0x31, 0xa5, 0xde, 0x86, 0x55, 0xd4, 0x1b, 0xbd, 0x73, 0xe3, 0x7c, 0xd0,
0x58, 0xbc, 0xb8, 0x9d, 0xda, 0xab, 0x23, 0x23, 0x9b, 0xd0, 0xa5, 0x15, 0x94, 0xf3, 0x81, 0x5e, 0x3e, 0x4d, 0xa1, 0xce, 0x95, 0xee, 0x79, 0xcf, 0x37, 0x44, 0x02, 0xb2, 0x30, 0x9a, 0x9a, 0xb1,
0xd7, 0x9a, 0xc7, 0xc7, 0x47, 0x0b, 0xf8, 0x7f, 0x74, 0x02, 0x68, 0xde, 0x4d, 0xae, 0x49, 0xe7, 0x55, 0x63, 0x51, 0x87, 0x46, 0x36, 0x09, 0x4c, 0x6b, 0x2f, 0xe7, 0x7d, 0xbd, 0xa6, 0x35, 0x0e,
0x23, 0x96, 0x44, 0xc9, 0xbd, 0x13, 0x2d, 0x88, 0x7e, 0x4a, 0xfe, 0x9c, 0x8c, 0x48, 0xb8, 0x5e, 0x0f, 0x0f, 0x16, 0xf0, 0xff, 0xf0, 0x14, 0xd0, 0xbc, 0x9b, 0x5c, 0x93, 0xf6, 0x27, 0x2c, 0xa6,
0xad, 0xdc, 0x47, 0xa9, 0x27, 0xfb, 0x55, 0x63, 0x71, 0x22, 0xe9, 0xcd, 0x8f, 0x44, 0xea, 0x8d, 0x92, 0x7b, 0x27, 0x5a, 0x10, 0xfd, 0x8c, 0x7c, 0x9c, 0x0c, 0x49, 0xb8, 0x5e, 0xad, 0xdc, 0x47,
0x4e, 0xa4, 0x4f, 0x93, 0x66, 0x57, 0xef, 0x10, 0xfe, 0x5d, 0x82, 0x81, 0x92, 0x0a, 0x10, 0xe7, 0xa9, 0x2b, 0xfb, 0x55, 0x63, 0x71, 0x2a, 0xe9, 0x8d, 0x4f, 0x44, 0xea, 0x0e, 0x4f, 0xa5, 0xcf,
0xf8, 0x8f, 0x74, 0x2a, 0x46, 0x61, 0x4d, 0xcf, 0x63, 0x61, 0x07, 0x16, 0xbd, 0x70, 0xd9, 0x12, 0x93, 0x46, 0x47, 0x6f, 0x13, 0xfe, 0x5d, 0x82, 0x81, 0x92, 0x0a, 0x10, 0xe7, 0xf8, 0x8f, 0x74,
0x8f, 0x32, 0xa6, 0xe5, 0x8b, 0xd5, 0xf9, 0x6a, 0xd5, 0x89, 0x21, 0xc9, 0xac, 0x60, 0xe6, 0x87, 0x26, 0x46, 0x61, 0x35, 0xd0, 0x63, 0x61, 0x07, 0x96, 0xcb, 0x70, 0xd9, 0x12, 0x8f, 0x32, 0xa6,
0x11, 0xa1, 0xb3, 0x19, 0xa0, 0x09, 0x55, 0xf2, 0x5f, 0x52, 0x7f, 0x52, 0x35, 0xa6, 0xc6, 0x34, 0xe5, 0x8b, 0xd5, 0xf9, 0x6a, 0xd5, 0x89, 0x21, 0xc9, 0xac, 0xd4, 0xe6, 0x87, 0x11, 0xa1, 0xb3,
0xc7, 0x89, 0xa9, 0xd2, 0x9b, 0xaa, 0x13, 0x36, 0xb1, 0x13, 0x12, 0xea, 0xf9, 0xeb, 0xf9, 0x42, 0x19, 0xa0, 0x09, 0x55, 0xf2, 0x5f, 0x52, 0x6f, 0x52, 0x35, 0xa6, 0xc6, 0x34, 0xc7, 0x89, 0xa9,
0x19, 0x4c, 0x83, 0x61, 0x5a, 0x96, 0xca, 0x6d, 0xaf, 0x9f, 0xab, 0x56, 0xa5, 0xcf, 0x47, 0xa8, 0xd2, 0x9d, 0xaa, 0x13, 0x36, 0xb1, 0x13, 0x12, 0xea, 0xf9, 0xeb, 0xf9, 0x42, 0xe9, 0x4f, 0x83,
0x6f, 0x13, 0xfe, 0xf2, 0x3b, 0x97, 0x89, 0xbc, 0xb8, 0x76, 0x05, 0x27, 0xcf, 0x6f, 0x44, 0x6a, 0x41, 0x5a, 0xd0, 0xca, 0x6d, 0xaf, 0x9f, 0xab, 0x73, 0xa5, 0xcf, 0x87, 0xa8, 0x6f, 0x13, 0xfe,
0x2c, 0xc5, 0x92, 0x99, 0x39, 0x9e, 0x33, 0xc3, 0xe8, 0x9d, 0x67, 0x8b, 0x22, 0x23, 0x1d, 0xe8, 0xf2, 0x3b, 0x97, 0x89, 0xbc, 0xb8, 0x76, 0x04, 0x27, 0xcf, 0x6f, 0x44, 0x3a, 0x2d, 0xc5, 0x92,
0x71, 0xe1, 0x50, 0xeb, 0xdf, 0x1d, 0xb2, 0x1f, 0x13, 0x10, 0x2c, 0x0a, 0x06, 0x32, 0x63, 0x43, 0x99, 0x39, 0xd8, 0x33, 0xc3, 0xe8, 0x9d, 0x67, 0x8b, 0xf2, 0x24, 0xed, 0xeb, 0x71, 0xc9, 0x51,
0xaa, 0x87, 0x6b, 0x1d, 0xdb, 0x43, 0xfa, 0xbc, 0xfa, 0x78, 0xd8, 0x56, 0xed, 0x0c, 0x14, 0x94, 0xeb, 0xdd, 0xed, 0xb3, 0x1f, 0x13, 0x10, 0x2c, 0x0a, 0x06, 0x32, 0x63, 0x43, 0xaa, 0xfb, 0xab,
0x7a, 0x2c, 0xe3, 0xf2, 0x78, 0xc6, 0x05, 0x89, 0xbf, 0xa2, 0x3a, 0xe1, 0x1f, 0xe6, 0x1f, 0xf2, 0x24, 0x9b, 0x43, 0x7a, 0xbc, 0x6e, 0xb9, 0xdf, 0x56, 0x6d, 0x0d, 0x14, 0x94, 0x7a, 0x2c, 0x4b,
0x9d, 0x72, 0xa2, 0xf5, 0xee, 0xd2, 0xa5, 0x42, 0x9e, 0x8c, 0x9b, 0x9a, 0x1c, 0x45, 0xf2, 0x03, 0xf3, 0x78, 0x96, 0x76, 0x07, 0x29, 0x98, 0xea, 0x84, 0x7f, 0x98, 0x7f, 0xc8, 0x77, 0xca, 0xa9,
0x96, 0xad, 0xe9, 0xce, 0xe2, 0x03, 0x27, 0x08, 0x21, 0x27, 0x37, 0x58, 0xc5, 0x34, 0xa2, 0x24, 0xd6, 0xbd, 0x4b, 0x97, 0x0a, 0xb9, 0x35, 0x6e, 0x6a, 0x72, 0x88, 0xc9, 0x8f, 0x66, 0x36, 0xa6,
0x58, 0x9c, 0xc9, 0x47, 0x32, 0xe4, 0x37, 0xe0, 0xfc, 0xcc, 0x21, 0x86, 0x6e, 0xa3, 0x2a, 0x9e, 0x1b, 0xc5, 0x47, 0x55, 0x10, 0x42, 0x4e, 0x6e, 0x20, 0x80, 0x74, 0x8c, 0x28, 0x09, 0x16, 0x67,
0x2b, 0x3d, 0x3f, 0xd7, 0xf8, 0x43, 0x90, 0x68, 0x53, 0x78, 0x66, 0x87, 0xa7, 0x88, 0x4b, 0x58, 0xf2, 0x81, 0x0c, 0x89, 0x1c, 0x38, 0x3f, 0x67, 0x80, 0xa1, 0xdb, 0xb0, 0x8a, 0x27, 0x52, 0xcf,
0x30, 0xf3, 0xc6, 0x08, 0x10, 0x17, 0xd5, 0xbf, 0x0d, 0x6c, 0xe7, 0x8e, 0xb0, 0x93, 0x2d, 0x83, 0xcf, 0x47, 0xfc, 0x21, 0x48, 0xb4, 0xa3, 0xc4, 0x87, 0x24, 0xdc, 0xea, 0xc1, 0x82, 0x99, 0x37,
0x4d, 0x32, 0xfc, 0xcb, 0x1b, 0x2c, 0x82, 0xf8, 0x49, 0xb8, 0x74, 0xf1, 0xc9, 0xcf, 0x4f, 0x66, 0x46, 0x80, 0xb8, 0x1c, 0xff, 0xad, 0x6f, 0x3b, 0x77, 0x84, 0x9d, 0x89, 0x19, 0x6c, 0x92, 0xc1,
0x55, 0xdf, 0xf4, 0xe0, 0x15, 0x0f, 0x86, 0x09, 0x3f, 0x2a, 0xbf, 0xb8, 0x81, 0x17, 0x1b, 0x89, 0x9f, 0x5e, 0x7f, 0x11, 0xc4, 0x4f, 0xc2, 0xa5, 0x8b, 0x4f, 0x7e, 0x7e, 0x72, 0xaa, 0xfa, 0x4b,
0x40, 0x92, 0xb8, 0x40, 0xb3, 0x60, 0x48, 0x7f, 0x9e, 0xcb, 0x51, 0x00, 0xec, 0x90, 0x86, 0xf0, 0x17, 0x5e, 0xf1, 0x60, 0x98, 0xf0, 0x43, 0xf6, 0x8b, 0x1b, 0x78, 0xf1, 0x22, 0x11, 0x48, 0x2c,
0x86, 0x93, 0x85, 0x1b, 0xfd, 0x6a, 0xe0, 0xaf, 0xd8, 0xb2, 0x45, 0x3a, 0xdb, 0x6c, 0x4a, 0x24, 0x17, 0x68, 0x16, 0x0c, 0xe9, 0xe3, 0xb9, 0x1c, 0x05, 0xc0, 0x0e, 0x69, 0x00, 0x6f, 0x38, 0x59,
0x0e, 0xab, 0x87, 0x4c, 0x1d, 0x1e, 0x06, 0x0d, 0x0e, 0x32, 0xdc, 0x02, 0x6d, 0x69, 0xd2, 0x70, 0xb8, 0xd1, 0x6f, 0xfa, 0xfe, 0x8a, 0x2d, 0x5b, 0xa4, 0xc0, 0x8d, 0x86, 0x44, 0xe2, 0xb0, 0x7a,
0xf2, 0xfb, 0xeb, 0xae, 0xde, 0x24, 0xe3, 0x0f, 0xa3, 0x4f, 0xa5, 0x60, 0xba, 0x34, 0xbc, 0xb9, 0xc0, 0xd4, 0xe1, 0xa1, 0x5f, 0xe7, 0x20, 0x83, 0x0d, 0xd0, 0xa6, 0x26, 0x0d, 0x26, 0x7f, 0x3f,
0xd4, 0xbb, 0x7a, 0xbb, 0x0c, 0xa2, 0xd9, 0x96, 0x20, 0x21, 0xd5, 0x6e, 0x7f, 0xfb, 0xcf, 0x52, 0xee, 0xe8, 0x0d, 0x32, 0xfe, 0x30, 0xfc, 0x5c, 0x0a, 0xa6, 0x4b, 0x83, 0x9b, 0x4b, 0xbd, 0xa3,
0x88, 0x0e, 0xc7, 0xd1, 0x7c, 0x53, 0x06, 0xd1, 0x01, 0x62, 0x90, 0x5c, 0x4d, 0x2f, 0x85, 0x00, 0xb7, 0xca, 0x20, 0x1a, 0x2d, 0x09, 0xd2, 0x58, 0xed, 0xf6, 0xf7, 0xff, 0x2c, 0x85, 0x68, 0x73,
0x3a, 0x4e, 0xaf, 0x4f, 0x75, 0xad, 0x59, 0x0a, 0xd1, 0x94, 0x86, 0x17, 0xd7, 0x6f, 0xbb, 0x5d, 0x1c, 0x8d, 0x93, 0x52, 0x88, 0x63, 0x69, 0xf0, 0x71, 0x34, 0xe9, 0x9c, 0x68, 0xcd, 0x52, 0x90,
0xed, 0x75, 0x29, 0x48, 0x9b, 0x81, 0xbc, 0xee, 0x6a, 0xad, 0x52, 0x90, 0x96, 0x34, 0xbc, 0x7e, 0x93, 0x18, 0xa4, 0xb5, 0x93, 0xe0, 0x36, 0xac, 0x0b, 0x57, 0xae, 0xe9, 0xa5, 0x10, 0xb0, 0xa4,
0xd3, 0xd5, 0x4b, 0x01, 0xf4, 0x37, 0x9c, 0x54, 0x5d, 0x27, 0x9f, 0x16, 0x4e, 0x44, 0xcb, 0xe0, 0xb3, 0xeb, 0x33, 0x5d, 0x6b, 0x94, 0x42, 0x34, 0xa4, 0xc1, 0xc5, 0xf5, 0xdb, 0x4e, 0x47, 0x3b,
0xda, 0xb0, 0xa4, 0x2b, 0xaf, 0x71, 0x35, 0x9b, 0x95, 0x42, 0xc0, 0x92, 0xae, 0x3f, 0x5d, 0x1e, 0x2e, 0x05, 0x69, 0x31, 0x90, 0xe3, 0x4e, 0x39, 0xc5, 0xed, 0xa6, 0x34, 0xb8, 0x3e, 0xe9, 0xe8,
0x40, 0xd3, 0xe4, 0x40, 0x67, 0x67, 0x37, 0xa5, 0x20, 0x2d, 0x0e, 0x02, 0xdb, 0x58, 0x0a, 0xd2, 0xa5, 0x00, 0xfa, 0x09, 0x27, 0x55, 0xd7, 0xc9, 0xe7, 0x85, 0x13, 0xd1, 0x32, 0xb8, 0x16, 0x2c,
0x4e, 0x40, 0x4a, 0x77, 0xba, 0xdd, 0x49, 0x60, 0xaa, 0xd9, 0xd9, 0xfe, 0x7a, 0x68, 0x59, 0x47, 0xe9, 0xca, 0xab, 0x5f, 0xcd, 0x66, 0xa5, 0x10, 0xb0, 0xa4, 0xeb, 0xcf, 0x97, 0x7b, 0xd0, 0x34,
0xb5, 0xda, 0x16, 0xf0, 0xeb, 0x14, 0xf8, 0x6d, 0x06, 0xba, 0x56, 0x03, 0x70, 0xfa, 0x6a, 0x03, 0x38, 0xd0, 0x68, 0x74, 0x53, 0x0a, 0xd2, 0xe4, 0x20, 0xc0, 0xe0, 0x52, 0x90, 0x56, 0x02, 0x52,
0x12, 0x9d, 0x1f, 0xd0, 0x05, 0x76, 0xbc, 0x7d, 0x7b, 0x8d, 0x03, 0x88, 0xec, 0xd1, 0xe8, 0xde, 0xba, 0x07, 0xad, 0x76, 0x02, 0x53, 0xcd, 0xce, 0xf6, 0xe7, 0x43, 0xd3, 0x3a, 0x38, 0x3a, 0xda,
0x0f, 0x6e, 0x95, 0x74, 0x0e, 0xaf, 0x70, 0x96, 0x2e, 0x70, 0xe8, 0x9d, 0x5e, 0x6f, 0xe9, 0xc5, 0x00, 0x3e, 0x4e, 0x81, 0xdf, 0x66, 0xa0, 0x8f, 0x8e, 0x00, 0x9c, 0xbe, 0x79, 0x01, 0xe5, 0xc8,
0xc3, 0xf8, 0x64, 0xbb, 0x53, 0x01, 0xcb, 0x4e, 0x83, 0xa8, 0xf6, 0x07, 0x8d, 0x4a, 0xa7, 0xdb, 0x0f, 0xe8, 0x00, 0x3b, 0xde, 0xbe, 0xbd, 0xc6, 0x01, 0x44, 0xf6, 0x68, 0x74, 0xef, 0x07, 0xb7,
0x1e, 0xd2, 0x4d, 0xa8, 0xfb, 0x54, 0x0c, 0xdf, 0xe0, 0x6a, 0x35, 0x44, 0x13, 0x0e, 0x5f, 0x51, 0x4a, 0x3a, 0x87, 0x57, 0x38, 0x4b, 0x07, 0x38, 0xf4, 0x4e, 0xaf, 0x35, 0xf5, 0xe2, 0x61, 0x7c,
0xb9, 0x1d, 0xdb, 0x90, 0x2c, 0x9f, 0x6b, 0x2a, 0xb3, 0xc9, 0x86, 0x24, 0x8c, 0x72, 0x4f, 0x84, 0xb2, 0xed, 0xa9, 0x80, 0x65, 0x67, 0x41, 0x74, 0xf4, 0x07, 0x8d, 0x4a, 0xa7, 0xdb, 0x1c, 0xd2,
0x08, 0xc3, 0x33, 0x8c, 0x01, 0xc8, 0x55, 0x60, 0xd3, 0x60, 0x47, 0xc9, 0xcf, 0xae, 0xd8, 0xd0, 0x49, 0xa8, 0xfb, 0x5c, 0x0c, 0x5f, 0xe7, 0x1a, 0x3a, 0x40, 0x6f, 0x00, 0x5f, 0xd1, 0x4e, 0x38,
0x5d, 0x62, 0x80, 0x53, 0x1f, 0xc6, 0xa3, 0x72, 0x62, 0x81, 0x29, 0xd9, 0xad, 0xde, 0x79, 0x0f, 0xb6, 0x21, 0x59, 0x3e, 0x57, 0x7a, 0x66, 0xde, 0x0d, 0x49, 0xd8, 0xf7, 0xae, 0x88, 0x36, 0x06,
0xcb, 0x1f, 0x8d, 0x3f, 0x94, 0xbf, 0x07, 0x71, 0x19, 0x8f, 0xf6, 0xbc, 0x07, 0x59, 0x19, 0x7d, 0x23, 0x0c, 0x27, 0xc8, 0x55, 0x60, 0xd3, 0x60, 0xcb, 0x5e, 0x8c, 0xae, 0xd8, 0xd0, 0x6d, 0x62,
0x18, 0x97, 0xbf, 0x07, 0x39, 0xf9, 0x30, 0x1a, 0x17, 0x32, 0xa7, 0x01, 0x7c, 0xc9, 0xb2, 0xc7, 0x80, 0x53, 0x1f, 0xc6, 0xc3, 0x72, 0x62, 0x81, 0x29, 0xd9, 0xad, 0xde, 0x7a, 0x0f, 0xcb, 0x1f,
0x76, 0xe6, 0xb8, 0xc8, 0xfb, 0x1d, 0x06, 0x31, 0x07, 0x35, 0x9c, 0xdc, 0x9b, 0xab, 0x1e, 0xc9, 0x8e, 0x3f, 0x94, 0xbf, 0x07, 0x71, 0x19, 0x0f, 0x77, 0xbc, 0x07, 0x59, 0x19, 0x7e, 0x18, 0x97,
0xb3, 0xe5, 0x93, 0x60, 0xcb, 0x2e, 0x53, 0xfe, 0x80, 0x31, 0xa5, 0x5a, 0x09, 0x4a, 0x49, 0x8e, 0xbf, 0x07, 0x39, 0xf9, 0x30, 0x1c, 0x17, 0x32, 0xa7, 0x0e, 0x7c, 0xc9, 0xb2, 0xc7, 0x76, 0xe6,
0x49, 0xa9, 0x02, 0x34, 0xf9, 0xfb, 0x0f, 0xa5, 0x66, 0x8e, 0xbf, 0x4f, 0x57, 0x55, 0xb8, 0x26, 0xb8, 0xc8, 0xfb, 0x2d, 0x06, 0x31, 0x5f, 0x37, 0x98, 0xdc, 0x9b, 0xab, 0x2e, 0xc9, 0xb3, 0xe5,
0xfc, 0x13, 0xae, 0x4c, 0x8f, 0xad, 0x6d, 0x15, 0xda, 0x9c, 0x52, 0x5e, 0x05, 0x81, 0x01, 0xf0, 0xb3, 0x60, 0xcb, 0x36, 0x53, 0xfe, 0x80, 0x31, 0xa5, 0x5a, 0x09, 0x4a, 0x49, 0x0e, 0x49, 0xa9,
0x66, 0x48, 0x06, 0xfc, 0x68, 0x16, 0x5b, 0x57, 0x0c, 0xc9, 0x5b, 0x2f, 0xa7, 0x34, 0x90, 0x62, 0x02, 0x34, 0xf8, 0xfb, 0x0f, 0xa5, 0x16, 0x93, 0xbf, 0x4f, 0x57, 0xb5, 0x77, 0x4d, 0x6e, 0xc9,
0xb3, 0x3e, 0xe1, 0xc2, 0x82, 0xa3, 0xdd, 0x90, 0x7f, 0x16, 0xfe, 0xc0, 0x25, 0x3c, 0x9d, 0x90, 0x9a, 0x46, 0xae, 0x6f, 0xdd, 0x6e, 0x2e, 0x6a, 0x72, 0x5d, 0xb6, 0xa8, 0x89, 0xeb, 0xdf, 0xd3,
0x08, 0xe6, 0x23, 0xb0, 0x5a, 0x0c, 0xef, 0x50, 0x01, 0xde, 0xe8, 0x52, 0x4c, 0xe3, 0xcf, 0x4f, 0x30, 0xda, 0xb1, 0x2e, 0x84, 0xd8, 0xb1, 0xac, 0x3f, 0xfc, 0x60, 0x69, 0xba, 0x3b, 0xd6, 0xf5,
0xb1, 0x1f, 0x37, 0x15, 0xe6, 0x1c, 0xd8, 0x4c, 0xe0, 0x4b, 0x32, 0x89, 0x08, 0x22, 0xfd, 0x62, 0xde, 0x2c, 0x47, 0xdf, 0xe2, 0xaf, 0x73, 0x04, 0x14, 0x2d, 0x1c, 0xff, 0x84, 0x2b, 0xd3, 0x63,
0xa0, 0xab, 0xe8, 0xe3, 0x81, 0x45, 0x5f, 0x22, 0x71, 0xd9, 0x93, 0x34, 0x86, 0xc7, 0xde, 0x34, 0x0c, 0x58, 0x85, 0x36, 0x5f, 0x0d, 0xaf, 0x24, 0xc1, 0x00, 0x78, 0x33, 0x20, 0x7d, 0x7e, 0x30,
0x5c, 0xf5, 0x77, 0xb7, 0xc7, 0x2a, 0x95, 0xdf, 0x0b, 0xe6, 0x13, 0x7b, 0x7b, 0x17, 0x75, 0x96, 0x8e, 0x8d, 0x43, 0x86, 0xe4, 0xad, 0x97, 0x53, 0x1a, 0x48, 0xb1, 0x6b, 0x9c, 0x70, 0x2d, 0xc1,
0x5f, 0x88, 0x58, 0x81, 0x2e, 0x56, 0xc0, 0x22, 0xce, 0xeb, 0xd1, 0x46, 0x4a, 0x77, 0x2a, 0x25, 0xd1, 0x6e, 0xc8, 0x3f, 0x0b, 0x9f, 0xea, 0x12, 0x9e, 0x92, 0x49, 0x04, 0x73, 0x3a, 0xe0, 0x08,
0x29, 0x59, 0x02, 0xd2, 0x2a, 0x01, 0x85, 0x9c, 0xd9, 0x42, 0xc7, 0x1a, 0x3b, 0x1c, 0xd7, 0x04, 0x86, 0xc8, 0xa8, 0xf9, 0x27, 0xba, 0x14, 0x53, 0xf9, 0xf3, 0x53, 0x1c, 0x0b, 0x39, 0x0a, 0x73,
0xc7, 0x59, 0xcd, 0xfa, 0x25, 0x0c, 0xd7, 0x38, 0x6d, 0xc9, 0x84, 0xb1, 0xf7, 0xdd, 0x72, 0xad, 0xb0, 0x6c, 0x26, 0xf0, 0xc7, 0x99, 0x64, 0x0e, 0x91, 0x7e, 0x35, 0xd0, 0xdd, 0xf6, 0xf0, 0xb8,
0x8a, 0xd4, 0xc8, 0x4f, 0xa4, 0x8b, 0x89, 0xc4, 0x1c, 0xfb, 0xa6, 0xd0, 0x73, 0xcb, 0x3f, 0x88, 0xa8, 0x27, 0x91, 0xb8, 0xdc, 0x4c, 0xea, 0x83, 0x43, 0x6f, 0x1a, 0xae, 0x7a, 0xdb, 0x7b, 0x68,
0xb9, 0xf9, 0x72, 0xcc, 0xcd, 0x1f, 0xc3, 0xdc, 0x7a, 0x39, 0xe6, 0xd6, 0x8f, 0x61, 0x6e, 0xbf, 0x95, 0x2a, 0xee, 0x05, 0x8b, 0x2b, 0xba, 0x3b, 0x17, 0x35, 0xca, 0x2f, 0x44, 0xac, 0x40, 0x17,
0x1c, 0x73, 0xfb, 0x25, 0x98, 0xb7, 0xc4, 0x2f, 0x28, 0x15, 0x3f, 0x14, 0x84, 0x94, 0x0e, 0x88, 0x2b, 0x60, 0x51, 0xfb, 0xf5, 0xf0, 0x45, 0x4a, 0xb7, 0x32, 0x25, 0x29, 0x59, 0x02, 0xd2, 0x2a,
0xc5, 0x39, 0x1d, 0x71, 0xf5, 0x52, 0xd0, 0xb3, 0x25, 0x9e, 0xac, 0x7c, 0x38, 0xf5, 0x1f, 0x62, 0x01, 0x85, 0x9c, 0xd9, 0xc2, 0xb8, 0xd4, 0xb7, 0x38, 0xae, 0x09, 0x8e, 0xb3, 0xb3, 0x82, 0xd7,
0x9a, 0xce, 0x3e, 0xc6, 0xd4, 0x17, 0x1b, 0xa7, 0x70, 0xef, 0xf4, 0x93, 0x5b, 0x67, 0x45, 0x66, 0x30, 0x5c, 0xe3, 0xb4, 0x25, 0x13, 0xc6, 0x11, 0xcc, 0x46, 0x78, 0xa2, 0x48, 0xf5, 0xfc, 0x44,
0x4e, 0x00, 0x11, 0x3f, 0xc6, 0x95, 0x7b, 0x55, 0x61, 0x72, 0xc1, 0x57, 0x9f, 0x53, 0x61, 0xc8, 0xba, 0x98, 0x48, 0xcc, 0xb1, 0x6b, 0x0a, 0x3d, 0xb7, 0xfc, 0xbd, 0x98, 0x1b, 0xaf, 0xc7, 0xdc,
0x75, 0xa4, 0xd4, 0x88, 0x6d, 0x89, 0x7c, 0x29, 0x51, 0xb3, 0xbd, 0x44, 0x41, 0x50, 0x41, 0xc6, 0xf8, 0x31, 0xcc, 0xcd, 0xd7, 0x63, 0x6e, 0xfe, 0x18, 0xe6, 0xd6, 0xeb, 0x31, 0xb7, 0x5e, 0x83,
0x74, 0x16, 0xd0, 0x30, 0xd5, 0x4d, 0xc6, 0xa1, 0x19, 0x27, 0xa0, 0x98, 0x11, 0xe3, 0xf7, 0xfb, 0x79, 0x43, 0xfc, 0x82, 0x52, 0xf1, 0x43, 0x41, 0x48, 0xe9, 0x80, 0x7c, 0x86, 0xd3, 0x11, 0x57,
0x19, 0x61, 0xee, 0x9d, 0xf3, 0x74, 0x1d, 0xf9, 0x35, 0xc8, 0xf5, 0xad, 0xb5, 0x6b, 0x46, 0x94, 0x80, 0x05, 0x3d, 0x1b, 0xe2, 0xc9, 0x4a, 0xb0, 0x53, 0xff, 0x21, 0xa6, 0x69, 0xf4, 0x29, 0xa6,
0xdc, 0x63, 0xd0, 0x82, 0xad, 0xa6, 0x90, 0xa9, 0xb8, 0x64, 0x16, 0xf8, 0x4b, 0x74, 0x9e, 0x3d, 0xbe, 0xd8, 0x82, 0x85, 0x3b, 0xa7, 0x9f, 0xdc, 0x3a, 0x2b, 0x32, 0x73, 0x02, 0xc8, 0x9a, 0x30,
0xbe, 0x63, 0x59, 0x7b, 0x7e, 0xfa, 0xa9, 0xc8, 0x9e, 0x6b, 0xfb, 0xac, 0xb9, 0x3e, 0x1c, 0x05, 0x36, 0xdf, 0xa9, 0x0a, 0x93, 0x0b, 0xbe, 0xfa, 0x9c, 0x0a, 0x43, 0xbe, 0x28, 0xa5, 0x86, 0x6e,
0xce, 0x7c, 0x11, 0xd1, 0xa0, 0x04, 0xa0, 0x39, 0x3c, 0xb5, 0x2c, 0x6c, 0x8e, 0x2b, 0xc3, 0xd0, 0x43, 0xe4, 0x4b, 0x89, 0x9a, 0xed, 0x24, 0x0a, 0xa2, 0x29, 0x32, 0xa6, 0xb3, 0x80, 0x86, 0xa9,
0x1a, 0xbe, 0x5d, 0x9b, 0x6e, 0xc9, 0xcb, 0x36, 0xa4, 0xe4, 0x0f, 0xbb, 0x86, 0x9e, 0x5b, 0xc7, 0x6e, 0x32, 0x0e, 0xcd, 0x38, 0x01, 0xc5, 0x8c, 0x18, 0xbf, 0xdf, 0xcd, 0x08, 0x73, 0xe7, 0x9c,
0x84, 0x39, 0xec, 0xef, 0xb7, 0xbe, 0x03, 0xb9, 0x58, 0x48, 0x83, 0xe8, 0xd4, 0xfe, 0x6e, 0x5a, 0x67, 0xeb, 0xc8, 0x3f, 0xb2, 0x4c, 0xd7, 0x5a, 0xbb, 0x66, 0x44, 0xc9, 0x3d, 0x46, 0x6b, 0xd8,
0x90, 0x3d, 0x60, 0x52, 0x26, 0x4b, 0x53, 0x0a, 0x79, 0x20, 0xa5, 0x9e, 0x0d, 0x19, 0xa6, 0xb2, 0xe8, 0x0b, 0xd9, 0x9e, 0x4b, 0x66, 0x81, 0xbf, 0xc4, 0xa8, 0xa1, 0xcb, 0x77, 0x2c, 0x6b, 0xf3,
0x11, 0x99, 0x81, 0x1c, 0x7d, 0xae, 0xd5, 0xcc, 0x2f, 0xf5, 0x00, 0xf2, 0xf1, 0x3b, 0x8a, 0xcd, 0xcf, 0x3e, 0x17, 0xd9, 0x7c, 0x6d, 0x97, 0x1b, 0xd3, 0x07, 0xc3, 0xc0, 0x99, 0x2f, 0x22, 0x1a,
0x83, 0x35, 0x53, 0x14, 0x80, 0xaa, 0x3b, 0x69, 0x9b, 0x39, 0x48, 0x52, 0x8b, 0x9a, 0x5e, 0x5c, 0x94, 0x00, 0x34, 0x06, 0x67, 0x96, 0x85, 0xad, 0x89, 0x65, 0x18, 0x9a, 0x83, 0xb7, 0xeb, 0x52,
0x53, 0xa8, 0xed, 0x0e, 0x1a, 0xee, 0x96, 0x1f, 0xbc, 0xe7, 0x67, 0x76, 0x34, 0x9d, 0x4b, 0x81, 0x6f, 0xd0, 0x1a, 0x5c, 0x9a, 0x0f, 0xdb, 0x86, 0x9e, 0x5b, 0xc7, 0x84, 0x39, 0xec, 0xef, 0xb7,
0xce, 0xae, 0x2e, 0x65, 0x60, 0x32, 0xe4, 0x40, 0x78, 0x12, 0xab, 0xc5, 0x9d, 0x59, 0xe5, 0x69, 0x9e, 0x09, 0xf9, 0x6c, 0x48, 0x83, 0xe8, 0xcc, 0xfe, 0x6e, 0x5a, 0x90, 0x81, 0x61, 0x62, 0x2b,
0x90, 0xe5, 0x2f, 0xbf, 0xc2, 0xc3, 0xe0, 0x11, 0xe6, 0xcc, 0x26, 0x42, 0x90, 0x6b, 0x60, 0xa9, 0x4b, 0x53, 0x0a, 0xb9, 0x34, 0xa5, 0x9e, 0x0d, 0x59, 0xba, 0xf2, 0x22, 0xb2, 0x2b, 0x39, 0xfa,
0x4d, 0xa4, 0x3b, 0xb9, 0xa4, 0x26, 0x1d, 0xb2, 0x2f, 0xb5, 0x21, 0xdc, 0x3b, 0xee, 0x53, 0x9b, 0x72, 0x74, 0xe4, 0x7c, 0xad, 0x05, 0x74, 0xe9, 0xdf, 0x51, 0x6c, 0xdd, 0x3c, 0x72, 0x44, 0x11,
0x7f, 0x64, 0xdc, 0xe2, 0xc3, 0x8b, 0xdc, 0xe2, 0xeb, 0x4e, 0xa7, 0xd5, 0xc9, 0xf8, 0x45, 0xba, 0xad, 0xba, 0x95, 0xfa, 0x3a, 0xfd, 0x24, 0x3d, 0x3b, 0xd2, 0x8b, 0xeb, 0x32, 0x47, 0xdb, 0x83,
0xd9, 0x52, 0xac, 0x8c, 0xdf, 0x33, 0x24, 0x29, 0x71, 0x7c, 0x2f, 0x70, 0x67, 0xff, 0x38, 0xcb, 0x06, 0xdb, 0x25, 0x1c, 0xef, 0xf9, 0x99, 0x35, 0x06, 0xe4, 0xd2, 0xc8, 0xd1, 0xd5, 0xa5, 0x0c,
0x10, 0x63, 0xed, 0x75, 0x6d, 0xdb, 0x54, 0x78, 0x9b, 0xdc, 0xac, 0xdb, 0xaa, 0x2e, 0x14, 0xee, 0x4c, 0x86, 0x3c, 0x12, 0x4f, 0xc0, 0x45, 0x2a, 0xe9, 0xec, 0x48, 0x25, 0x2d, 0x7f, 0xf9, 0x17,
0x87, 0x22, 0x45, 0x46, 0x85, 0x08, 0x31, 0x05, 0x7d, 0xff, 0xff, 0xa2, 0xc6, 0x58, 0xd9, 0x98, 0x3c, 0x0c, 0x1e, 0x61, 0xce, 0x6c, 0x32, 0x09, 0xf9, 0x1a, 0x96, 0x2b, 0x45, 0xca, 0x98, 0x4b,
0xed, 0x10, 0x6a, 0x27, 0x8e, 0x32, 0xb9, 0x84, 0x39, 0x34, 0x64, 0x35, 0x91, 0xbd, 0x7a, 0xe8, 0x0c, 0xd3, 0x21, 0xbb, 0xd2, 0x43, 0xc2, 0xbd, 0xe3, 0x2e, 0xb5, 0xf9, 0x47, 0xc6, 0x2d, 0x3e,
0x08, 0x55, 0x7b, 0xf0, 0xa5, 0xaa, 0x19, 0x17, 0x60, 0x23, 0x75, 0x1a, 0x79, 0xa8, 0x0c, 0x20, 0xbc, 0xca, 0x2d, 0x1e, 0xb7, 0xdb, 0xcd, 0x76, 0xc6, 0x2f, 0xd2, 0x97, 0x0d, 0xc5, 0xca, 0xf8,
0x8b, 0xa2, 0x85, 0x23, 0xd5, 0x13, 0xd0, 0x53, 0x7c, 0x55, 0xd2, 0x08, 0x5a, 0xac, 0x1c, 0xa0, 0x3d, 0x43, 0x92, 0x12, 0xc7, 0xf7, 0x0a, 0x77, 0xf6, 0x8f, 0x51, 0x86, 0x18, 0x6b, 0xa7, 0x6b,
0x51, 0x49, 0x0b, 0x9d, 0x76, 0x64, 0xe0, 0xb9, 0x9c, 0x4c, 0x3f, 0x7b, 0x35, 0x3d, 0xa3, 0xf6, 0xdb, 0xa4, 0xc2, 0x7b, 0xc9, 0xcd, 0xba, 0xa9, 0xea, 0x42, 0xe1, 0x7e, 0x28, 0x44, 0x66, 0x54,
0x62, 0x4a, 0x78, 0xc8, 0xa7, 0x54, 0xb2, 0x53, 0x86, 0x34, 0x62, 0xca, 0xa9, 0x3c, 0xa1, 0xc5, 0x88, 0xd8, 0x5a, 0xd0, 0xf7, 0xff, 0x2f, 0x5c, 0x8e, 0x95, 0x8d, 0xd9, 0x0e, 0xa1, 0x76, 0xe2,
0xd8, 0x6a, 0x1a, 0xa7, 0xfc, 0x58, 0x02, 0x9b, 0x28, 0x28, 0x96, 0xf8, 0x5e, 0x44, 0x92, 0x42, 0x10, 0x99, 0x4b, 0x98, 0x43, 0x43, 0x56, 0x57, 0xda, 0xa9, 0x87, 0xa6, 0x50, 0xb5, 0x07, 0x5f,
0x93, 0xa9, 0xfb, 0x62, 0xea, 0x5c, 0xbb, 0x2c, 0x7f, 0x04, 0x13, 0x26, 0x3c, 0x05, 0x03, 0xb1, 0xaa, 0x3a, 0x71, 0x11, 0x3b, 0x52, 0xa7, 0x91, 0x87, 0xca, 0x00, 0xb2, 0x28, 0x1a, 0x68, 0x52,
0xdb, 0x11, 0x35, 0xc8, 0xd3, 0x52, 0x6c, 0x92, 0x70, 0x34, 0x4c, 0xb6, 0x3b, 0x7a, 0xd7, 0x30, 0x3d, 0x01, 0x3d, 0xc5, 0x57, 0x25, 0x6d, 0xb8, 0xc5, 0xca, 0x01, 0x1a, 0x95, 0x34, 0x30, 0x6a,
0xe5, 0xec, 0xd1, 0x28, 0xf2, 0x78, 0xbf, 0x6e, 0x6c, 0x89, 0x18, 0x36, 0x20, 0x2d, 0xcc, 0x16, 0x07, 0x06, 0x9e, 0x8a, 0xca, 0xf4, 0x8b, 0x77, 0xa4, 0x67, 0xd4, 0x5e, 0x4c, 0x09, 0x0f, 0xf9,
0xbb, 0x54, 0xc7, 0xc0, 0xca, 0x7d, 0x75, 0xc2, 0x8e, 0x38, 0xea, 0xe8, 0x54, 0xce, 0x16, 0x66, 0x94, 0x4a, 0x76, 0xca, 0x90, 0x46, 0x4c, 0x39, 0x95, 0x27, 0xb4, 0x18, 0x1b, 0x2d, 0xfb, 0x94,
0x70, 0xe6, 0xdb, 0x54, 0xc6, 0xaa, 0x95, 0x76, 0xd2, 0xee, 0xf6, 0x3a, 0x1d, 0xa5, 0x0a, 0x7c, 0x1f, 0xed, 0x60, 0xf3, 0x0a, 0xc5, 0x32, 0xe9, 0xab, 0x48, 0x52, 0x68, 0x32, 0x75, 0x4f, 0x4c,
0x32, 0xab, 0xc6, 0xb7, 0xd1, 0x3a, 0x8a, 0x7c, 0xd6, 0x94, 0xb7, 0xe1, 0x6d, 0x0c, 0xfb, 0x14, 0x9d, 0x6b, 0x56, 0xe6, 0x8f, 0x60, 0xc2, 0x84, 0xa7, 0x60, 0x20, 0xb6, 0xfb, 0xd1, 0xfa, 0x79,
0xfb, 0xe7, 0x27, 0x67, 0xb3, 0x13, 0x8e, 0xc4, 0xaa, 0xfd, 0x10, 0xe6, 0xf5, 0x78, 0xf8, 0x4d, 0x5a, 0x8a, 0x4d, 0x12, 0x8e, 0x86, 0xc9, 0xb6, 0x47, 0x6f, 0x1b, 0xa6, 0x9c, 0x3d, 0x1a, 0x46,
0xc5, 0x09, 0x84, 0x4b, 0xc8, 0xf9, 0xb3, 0x9f, 0x9f, 0xa4, 0xd1, 0xbb, 0x17, 0xd1, 0x98, 0xa0, 0x1e, 0xef, 0x96, 0x8e, 0x2d, 0x11, 0xc3, 0x06, 0xa4, 0x85, 0xd9, 0x82, 0xa1, 0x6a, 0x1a, 0x78,
0xd9, 0xd1, 0x54, 0x20, 0x59, 0x33, 0xf0, 0x74, 0x34, 0xae, 0xd5, 0x60, 0xff, 0xc5, 0x66, 0xf8, 0xfa, 0x51, 0x9d, 0xb0, 0x63, 0xa2, 0x1a, 0x3a, 0x95, 0xd1, 0xc2, 0x0c, 0x46, 0xbe, 0x4d, 0x65,
0x56, 0x9c, 0x0f, 0x24, 0x4a, 0x52, 0x38, 0xbc, 0x89, 0xc3, 0x9b, 0x05, 0xc3, 0xaf, 0xd7, 0xe1, 0xac, 0xfc, 0x69, 0xa7, 0xad, 0x4e, 0xb7, 0xdd, 0x56, 0xaa, 0xc0, 0x27, 0xa7, 0x6a, 0x7c, 0x1b,
0x62, 0xca, 0x58, 0xb2, 0x1f, 0x41, 0x0b, 0x11, 0xb4, 0x4a, 0x10, 0x10, 0x47, 0x1c, 0x16, 0xef, 0xae, 0xa3, 0xc8, 0x67, 0x2d, 0x91, 0x2f, 0xbc, 0x7d, 0x64, 0x97, 0x62, 0xff, 0xfc, 0x64, 0xbe,
0xc7, 0xd1, 0x46, 0x1c, 0xed, 0x02, 0x1c, 0x13, 0xd6, 0xae, 0xb6, 0x7f, 0x70, 0x07, 0x07, 0x77, 0x6c, 0x85, 0x23, 0xb1, 0x6a, 0x3f, 0x84, 0x79, 0x3d, 0x1e, 0x7c, 0x53, 0x71, 0x02, 0xe1, 0x12,
0x8a, 0x08, 0x38, 0x1f, 0x93, 0x90, 0x7a, 0xa1, 0x1f, 0xec, 0x47, 0xf0, 0x1a, 0x11, 0xbc, 0x2e, 0x72, 0xfe, 0xec, 0xe7, 0x27, 0x69, 0xf8, 0xee, 0x55, 0x34, 0x26, 0x68, 0xb6, 0x34, 0x15, 0x48,
0x40, 0x70, 0xe3, 0xaf, 0x0f, 0x4d, 0xfe, 0x2b, 0x8e, 0xfd, 0xb5, 0x60, 0xec, 0xa9, 0x67, 0xba, 0xd6, 0x0c, 0x3c, 0x61, 0x8e, 0xeb, 0x5d, 0xd8, 0xf7, 0xf2, 0x32, 0x78, 0x2b, 0xce, 0x58, 0x12,
0xfe, 0x7c, 0xff, 0xe0, 0x2e, 0x0e, 0xee, 0x96, 0x0e, 0x2e, 0x61, 0x9e, 0x94, 0x98, 0x3a, 0x89, 0x25, 0x29, 0x1c, 0xde, 0xc0, 0xe1, 0x8d, 0x82, 0xe1, 0xd7, 0xeb, 0x70, 0x31, 0x65, 0x2c, 0xd9,
0x23, 0x65, 0x21, 0xad, 0x70, 0x04, 0x10, 0xc7, 0xc0, 0x7a, 0x7b, 0x64, 0xe5, 0x3b, 0x1e, 0x44, 0x8d, 0xa0, 0x89, 0x08, 0x9a, 0x25, 0x08, 0x88, 0x23, 0x0e, 0xdc, 0x77, 0xe3, 0x68, 0x21, 0x8e,
0x3c, 0x7d, 0x26, 0xa3, 0xac, 0x35, 0x44, 0xc2, 0x8b, 0x18, 0xaf, 0x50, 0x6e, 0x5f, 0x29, 0xb1, 0x56, 0x01, 0x8e, 0x09, 0x6b, 0x16, 0xdc, 0x3d, 0xb8, 0x8d, 0x83, 0xdb, 0x45, 0x04, 0x9c, 0x8f,
0x0f, 0x3b, 0xfe, 0xe9, 0xa1, 0xf9, 0xab, 0xde, 0xe9, 0xc7, 0xa1, 0x38, 0x98, 0x4c, 0x71, 0xa2, 0x49, 0x48, 0xbd, 0xd0, 0x0f, 0x76, 0x23, 0x38, 0x46, 0x04, 0xc7, 0x05, 0x08, 0x6e, 0xfc, 0xf5,
0xb1, 0xad, 0x4c, 0x86, 0x99, 0x69, 0x33, 0x9d, 0xbb, 0x13, 0x07, 0x4d, 0x80, 0x9c, 0xbb, 0xc4, 0xbe, 0xc9, 0x7f, 0xc3, 0xb1, 0xbf, 0x15, 0x8c, 0x3d, 0xf3, 0x4c, 0xd7, 0x9f, 0xef, 0x1e, 0xdc,
0x42, 0x95, 0xe7, 0x67, 0x39, 0x7f, 0x8d, 0x65, 0xbb, 0xcf, 0x2d, 0xb9, 0x12, 0xf1, 0x84, 0x86, 0xc1, 0xc1, 0x9d, 0xd2, 0xc1, 0x25, 0xcc, 0x93, 0x12, 0x53, 0x27, 0x71, 0xa4, 0x2c, 0xa4, 0x15,
0x89, 0x1b, 0xca, 0x23, 0x1d, 0xe3, 0x8a, 0x3e, 0xb8, 0xb3, 0xfd, 0x55, 0xd5, 0xd8, 0x4e, 0x7a, 0x8e, 0x00, 0xe2, 0x18, 0x58, 0x6f, 0x97, 0xac, 0x7c, 0xc7, 0x83, 0x88, 0xa7, 0xc7, 0x64, 0x94,
0x78, 0xfc, 0xbe, 0x7b, 0xba, 0xc5, 0x0c, 0xa4, 0xf2, 0x03, 0x25, 0x65, 0x2f, 0x5f, 0x19, 0x3e, 0xb5, 0xe4, 0x48, 0x78, 0x0d, 0xe6, 0x0d, 0xca, 0xed, 0x1b, 0x25, 0xf6, 0x61, 0x87, 0x3f, 0x3d,
0x2a, 0x38, 0x31, 0xf3, 0x62, 0x7c, 0x68, 0x96, 0xb1, 0x3f, 0x32, 0x9b, 0x1b, 0x7b, 0x5f, 0xb0, 0x34, 0x7e, 0xd3, 0xdb, 0xbd, 0x38, 0x14, 0x07, 0x93, 0x29, 0x4e, 0x85, 0x36, 0x95, 0xc9, 0x70,
0x22, 0x2c, 0x8e, 0xbc, 0x42, 0x4d, 0x02, 0x20, 0x6d, 0x17, 0x09, 0x1e, 0x61, 0x95, 0xe3, 0xd0, 0x32, 0x4d, 0xbe, 0x73, 0x77, 0xe2, 0xa0, 0x09, 0x90, 0x73, 0x57, 0x88, 0xa8, 0xf2, 0xfc, 0x2c,
0x18, 0x0e, 0xce, 0xf1, 0xd0, 0xc9, 0x34, 0x50, 0x52, 0x35, 0x66, 0x72, 0xca, 0xbc, 0xf5, 0x0a, 0xe7, 0x2f, 0x11, 0x6d, 0x76, 0x19, 0x26, 0x17, 0x52, 0x9e, 0xd0, 0x30, 0x71, 0x43, 0x79, 0xa0,
0x6f, 0x7a, 0xbc, 0x77, 0x5c, 0xbc, 0x38, 0x23, 0xfa, 0x6f, 0x3d, 0x7a, 0x4f, 0xfe, 0x71, 0x79, 0x63, 0x5c, 0xd1, 0x03, 0x77, 0xb6, 0xbb, 0x32, 0x1d, 0xdb, 0x49, 0x0f, 0x5b, 0x18, 0xb6, 0x4f,
0xf1, 0x5b, 0x14, 0xad, 0xc6, 0x10, 0x2b, 0xd0, 0x30, 0xea, 0x7b, 0xe5, 0x97, 0x53, 0x32, 0x57, 0x08, 0x99, 0x81, 0x54, 0x7e, 0xa0, 0x2c, 0xef, 0xe5, 0xab, 0xeb, 0x07, 0x05, 0xa7, 0x8e, 0x5e,
0x26, 0xd2, 0x0b, 0x1d, 0xd1, 0xc2, 0x09, 0xc1, 0xe4, 0x87, 0x2b, 0x1f, 0x3c, 0xe2, 0x0d, 0x7d, 0x8c, 0x0f, 0xcd, 0x32, 0x76, 0xa7, 0x66, 0x73, 0x63, 0xef, 0x2b, 0x56, 0xd5, 0xc5, 0xb1, 0x61,
0x88, 0x54, 0xf6, 0x04, 0xc8, 0x8c, 0xd6, 0xac, 0x4f, 0x03, 0x16, 0xa9, 0x80, 0xa7, 0x2a, 0xbf, 0xa8, 0x49, 0x00, 0xa4, 0x6d, 0x23, 0xc1, 0x63, 0xc0, 0x72, 0x1c, 0x1a, 0xc3, 0xc1, 0x39, 0x1e,
0x9a, 0x92, 0xe2, 0xa5, 0x59, 0xc4, 0xd8, 0x46, 0x6c, 0x5a, 0xb7, 0xea, 0x51, 0x8c, 0x80, 0xdf, 0x3a, 0x99, 0xf6, 0x55, 0xaa, 0xc6, 0x4c, 0x4e, 0x99, 0xb7, 0x5e, 0xe1, 0x3d, 0x9b, 0xf7, 0x8e,
0x2b, 0xba, 0xbe, 0x82, 0xdd, 0x54, 0xa5, 0x06, 0x5f, 0x8e, 0x38, 0x2e, 0x89, 0xd8, 0x4a, 0xde, 0x8b, 0xd7, 0x96, 0x44, 0xf7, 0xb3, 0x47, 0xef, 0xc9, 0x3f, 0x2e, 0x2f, 0x7e, 0x8f, 0xa2, 0xd5,
0xfb, 0xc1, 0x12, 0x3b, 0xd1, 0x92, 0x76, 0x46, 0x71, 0xf1, 0x46, 0x96, 0xb0, 0x89, 0x59, 0x74, 0x18, 0x62, 0x05, 0x1a, 0x46, 0x3d, 0xaf, 0xfc, 0x6a, 0x50, 0xe6, 0xc2, 0x4a, 0x7a, 0x9d, 0x26,
0xd5, 0xb2, 0x7e, 0x66, 0xbc, 0xeb, 0x12, 0x02, 0xfb, 0xf0, 0xba, 0x8b, 0x57, 0x0f, 0x11, 0x26, 0x5a, 0x38, 0x21, 0x98, 0xfc, 0x70, 0xe5, 0x83, 0x47, 0xbc, 0xa1, 0x0f, 0x91, 0xca, 0x9e, 0x00,
0x52, 0xd4, 0x82, 0x7e, 0xe7, 0xa3, 0xad, 0x6b, 0x45, 0x67, 0xb3, 0x79, 0xc2, 0x3d, 0x35, 0xea, 0x99, 0xd1, 0x9a, 0xf5, 0xba, 0xc0, 0x22, 0x15, 0xf0, 0x54, 0xe5, 0x17, 0x83, 0x52, 0xbc, 0x34,
0x4b, 0xf1, 0x4b, 0x09, 0xb4, 0x10, 0xcc, 0x3c, 0x78, 0x49, 0x71, 0x09, 0x0a, 0xf9, 0x3c, 0xa6, 0x8b, 0x18, 0x9b, 0xb8, 0x4d, 0xeb, 0x56, 0x3d, 0x88, 0x11, 0xf0, 0x5b, 0x5d, 0xd7, 0x57, 0xb0,
0x26, 0x04, 0x50, 0x27, 0xb0, 0x12, 0x36, 0xdf, 0x09, 0x4d, 0xe6, 0x3d, 0x91, 0xd1, 0x73, 0x27, 0x9b, 0xaa, 0x54, 0xe7, 0xcb, 0x11, 0x47, 0x4e, 0x11, 0x5b, 0xc9, 0x7b, 0x3f, 0x58, 0x62, 0x07,
0x54, 0xc8, 0x82, 0xfe, 0x64, 0x0c, 0x76, 0x64, 0xe1, 0x74, 0x46, 0x96, 0x35, 0xbc, 0x9b, 0x91, 0x60, 0xd2, 0x4c, 0x2a, 0xae, 0x3d, 0xc9, 0x12, 0xb6, 0x90, 0x8b, 0x9e, 0x66, 0xd6, 0x4d, 0x8e,
0xd6, 0x41, 0x00, 0x40, 0x28, 0x91, 0xe7, 0x6b, 0x37, 0x12, 0xcb, 0x67, 0x0d, 0xfa, 0x4c, 0x78, 0x37, 0x8d, 0x42, 0x60, 0x1f, 0x5e, 0x36, 0xf2, 0x6a, 0x21, 0xc2, 0x44, 0x8a, 0x5a, 0xd0, 0x6d,
0x64, 0x8f, 0x55, 0xff, 0xa3, 0xfa, 0xe2, 0x9e, 0x9d, 0xaf, 0xe0, 0x07, 0x90, 0x7d, 0x3b, 0xd5, 0x7e, 0xb0, 0x71, 0xa9, 0x6b, 0x34, 0x9b, 0x27, 0xdc, 0x53, 0xa3, 0x9e, 0x14, 0xbf, 0x94, 0x40,
0x19, 0xec, 0x83, 0x34, 0xc1, 0x37, 0x80, 0xd7, 0xaa, 0x2a, 0xf1, 0x09, 0x05, 0x48, 0x73, 0x3f, 0x0b, 0xc1, 0xcc, 0x83, 0x97, 0x14, 0x57, 0xd0, 0x90, 0xcf, 0x63, 0x6a, 0x42, 0x00, 0x75, 0x0a,
0x06, 0xc5, 0xe0, 0xa6, 0x0e, 0xd0, 0xef, 0x4c, 0x6b, 0x21, 0x0b, 0x4f, 0x69, 0x0c, 0x9f, 0x62, 0x2b, 0x61, 0xf3, 0x9d, 0xd2, 0x64, 0xde, 0x53, 0x19, 0x3d, 0x77, 0x42, 0x85, 0x2c, 0xe8, 0x4f,
0x50, 0x9d, 0xc7, 0x05, 0x29, 0x2a, 0x5a, 0x5f, 0x39, 0x5e, 0xac, 0x5f, 0x88, 0xb4, 0x48, 0x6b, 0xc6, 0x60, 0x27, 0x1c, 0x4e, 0x67, 0x64, 0x59, 0xc3, 0xbb, 0x48, 0x69, 0x0d, 0x04, 0x00, 0x84,
0xbe, 0xb1, 0x74, 0x14, 0xfd, 0xd9, 0xb7, 0x4c, 0xc7, 0x15, 0x1b, 0xfa, 0xd9, 0xfc, 0xd2, 0x2f, 0x12, 0x79, 0xbe, 0x76, 0x23, 0xb1, 0x7c, 0x76, 0x3d, 0x82, 0x09, 0x8f, 0xec, 0xb1, 0x13, 0x94,
0x3d, 0x82, 0xf1, 0x72, 0xd0, 0xc8, 0x64, 0xb5, 0xf4, 0x68, 0x28, 0x0f, 0xcb, 0x34, 0x45, 0x7d, 0xa8, 0xb6, 0xb8, 0x67, 0x67, 0x54, 0xf8, 0x01, 0x64, 0xdf, 0x4e, 0x75, 0x86, 0xf7, 0xf4, 0xe8,
0x49, 0x03, 0x2c, 0x8f, 0xa2, 0x8a, 0x41, 0xcf, 0xae, 0xb6, 0x41, 0x7d, 0x0c, 0x8b, 0xd5, 0x97, 0x1a, 0xeb, 0xe6, 0x89, 0x4f, 0x79, 0x40, 0x9a, 0x7b, 0x31, 0x28, 0x06, 0x37, 0x35, 0x80, 0x7e,
0xf4, 0xc7, 0x22, 0x11, 0x90, 0xb1, 0x17, 0xc3, 0x8e, 0xdf, 0xc7, 0xb0, 0x89, 0xd6, 0xc2, 0x9e, 0x67, 0x5a, 0x0b, 0x59, 0x78, 0x4a, 0x63, 0xf0, 0x14, 0x83, 0xea, 0x3c, 0x2e, 0x48, 0x51, 0xd1,
0xce, 0x4a, 0xa8, 0xf8, 0x58, 0x04, 0x7c, 0xb7, 0x51, 0x36, 0xf1, 0x16, 0x43, 0x30, 0x04, 0x26, 0xda, 0xca, 0xf1, 0xb2, 0x2d, 0x42, 0x45, 0x5a, 0xf3, 0x8d, 0xa5, 0xa3, 0xe8, 0xcf, 0xbe, 0x65,
0x22, 0x09, 0xe9, 0xf0, 0x36, 0x14, 0x7f, 0x9a, 0xec, 0x24, 0xe5, 0x7b, 0xc8, 0xe2, 0x2f, 0xc1, 0xfa, 0xdd, 0xd8, 0xd0, 0x2f, 0xce, 0xd7, 0x5e, 0xe9, 0x31, 0x96, 0x97, 0x83, 0x46, 0x26, 0xab,
0x1c, 0xbe, 0x6e, 0xb1, 0x24, 0xa6, 0x66, 0x6c, 0x14, 0x58, 0xef, 0x38, 0xc9, 0x8a, 0xbf, 0xf7, 0xa5, 0xc7, 0x6b, 0x79, 0x58, 0xa6, 0x29, 0xea, 0x6b, 0xda, 0x8f, 0x79, 0x14, 0x55, 0x0c, 0x3a,
0x4f, 0x83, 0xc0, 0x7c, 0xac, 0x3b, 0x21, 0xfb, 0x2b, 0xb3, 0x44, 0x54, 0x89, 0x5b, 0x15, 0x77, 0xba, 0xda, 0x04, 0xf5, 0x31, 0x2c, 0x56, 0x5f, 0xd3, 0x9d, 0x8c, 0x44, 0x40, 0xc6, 0x5e, 0x0c,
0xac, 0xbd, 0x04, 0xb1, 0xa9, 0x53, 0x2e, 0x46, 0x18, 0x80, 0xe1, 0xb4, 0xb8, 0xf7, 0xa8, 0x84, 0x3b, 0x7e, 0x1f, 0xc3, 0x26, 0x5a, 0x0b, 0x7b, 0x3a, 0x2b, 0xa1, 0xe2, 0x53, 0x11, 0xf0, 0xdd,
0x6c, 0x5b, 0xf1, 0x72, 0x55, 0xe1, 0xda, 0x6f, 0x6e, 0xa4, 0x0c, 0x4b, 0x9d, 0x7a, 0x14, 0x6d, 0x8b, 0xf2, 0x12, 0x6f, 0x31, 0x04, 0x43, 0x60, 0x22, 0x92, 0x90, 0x0e, 0xef, 0xa2, 0xf1, 0xa7,
0x18, 0x55, 0x4e, 0x50, 0xd6, 0xd7, 0x77, 0x3e, 0xce, 0x8e, 0x10, 0xc0, 0x38, 0x5b, 0xf1, 0x04, 0xc9, 0x4e, 0x52, 0xbe, 0x87, 0x2c, 0xfe, 0x12, 0xcc, 0xe1, 0xeb, 0x16, 0x4b, 0x62, 0x6a, 0xc6,
0xe7, 0x37, 0x45, 0xe0, 0x8c, 0x26, 0xce, 0x8f, 0x80, 0x42, 0x58, 0x59, 0x36, 0xd9, 0xf8, 0x62, 0x46, 0x81, 0xf5, 0x8e, 0x93, 0xac, 0xf8, 0x7b, 0xef, 0x2c, 0x08, 0xcc, 0xc7, 0x9a, 0x13, 0xb2,
0x67, 0x34, 0x83, 0x2f, 0x9f, 0x6f, 0x7c, 0x29, 0xe5, 0xb6, 0x32, 0x33, 0x06, 0x5c, 0x76, 0x9c, 0xbf, 0x32, 0x4b, 0x44, 0x95, 0xb8, 0x45, 0x74, 0xcb, 0xda, 0x4b, 0x78, 0x13, 0xa2, 0x5c, 0x8c,
0x19, 0xa8, 0xa8, 0xe2, 0xa6, 0x7d, 0x1a, 0xa2, 0x51, 0x05, 0xad, 0x56, 0x7a, 0xe2, 0x62, 0xde, 0x30, 0x00, 0xc3, 0x69, 0x71, 0xef, 0x51, 0x09, 0xd9, 0xb6, 0xe2, 0xd5, 0xb6, 0xc2, 0xb5, 0xdf,
0xb5, 0x4b, 0xb1, 0x51, 0x5d, 0xc4, 0x81, 0x26, 0x41, 0xdd, 0x67, 0xb7, 0xf7, 0x78, 0x65, 0xe8, 0xdc, 0x48, 0x19, 0x96, 0x9a, 0xb5, 0x28, 0x7a, 0x61, 0x54, 0x39, 0x41, 0x59, 0x9b, 0xe9, 0xf9,
0x48, 0x4a, 0x20, 0x6f, 0xc0, 0x12, 0x93, 0x69, 0xe0, 0xdf, 0x43, 0xae, 0x42, 0x6c, 0x9f, 0x86, 0x38, 0x3b, 0x42, 0x00, 0xe3, 0x6c, 0xc5, 0x13, 0x9c, 0xdf, 0x14, 0x81, 0x33, 0x9a, 0x38, 0x3f,
0x78, 0xa7, 0x08, 0x4f, 0x9e, 0xfd, 0x00, 0xc2, 0xd2, 0x05, 0x25, 0xdf, 0x98, 0x09, 0xfa, 0x46, 0x02, 0x0a, 0x61, 0x65, 0xd9, 0x64, 0xe3, 0x8b, 0xad, 0xd1, 0x0c, 0xbe, 0x7c, 0xbe, 0xf1, 0xa5,
0x56, 0x01, 0x18, 0x57, 0xf0, 0x28, 0x18, 0xe6, 0x33, 0x4c, 0x2c, 0x72, 0x0d, 0xf1, 0x4a, 0x05, 0x94, 0xdb, 0xca, 0xcc, 0x18, 0x70, 0xd9, 0x71, 0x66, 0xa0, 0xa2, 0x8a, 0x9b, 0xf6, 0x59, 0x88,
0x4d, 0x9b, 0x53, 0x53, 0xb4, 0x94, 0x43, 0x9d, 0x5e, 0x9f, 0x13, 0x27, 0x8b, 0x94, 0x55, 0x51, 0x46, 0x15, 0xb4, 0x5a, 0xe9, 0x8a, 0x6b, 0x91, 0xd7, 0x2e, 0xc5, 0x6b, 0x02, 0x22, 0x0e, 0x34,
0x49, 0x94, 0x9d, 0xf6, 0x11, 0x4c, 0x55, 0xf6, 0xea, 0xe7, 0x04, 0xbc, 0x87, 0x84, 0xa3, 0x7b, 0x09, 0xea, 0x3e, 0xbb, 0x3b, 0xc9, 0x2b, 0x43, 0x07, 0x52, 0x02, 0x79, 0x03, 0x96, 0x98, 0x4c,
0x60, 0x33, 0x85, 0xb1, 0x74, 0x7d, 0x8b, 0x5d, 0x14, 0xa9, 0x03, 0x1d, 0x91, 0x6f, 0xf9, 0x2e, 0x03, 0xff, 0x1e, 0x72, 0x15, 0x62, 0xfb, 0x34, 0xc4, 0x1b, 0x5d, 0x78, 0x7a, 0xef, 0x07, 0x10,
0xf6, 0x4d, 0xe3, 0x85, 0x55, 0x4d, 0x95, 0xd9, 0xb5, 0x57, 0x03, 0x21, 0xdc, 0x49, 0xe4, 0x07, 0x96, 0x2e, 0x28, 0xf9, 0xc6, 0x4c, 0xd0, 0x37, 0xb2, 0x0a, 0xc0, 0xb8, 0x82, 0x47, 0xc1, 0x30,
0xe6, 0x9c, 0x22, 0x4b, 0xcf, 0x23, 0xba, 0x44, 0xbf, 0x64, 0x9d, 0xaf, 0x20, 0xe7, 0x80, 0xc0, 0x9f, 0x61, 0x62, 0x91, 0x6b, 0x88, 0x17, 0x5a, 0x68, 0xda, 0x14, 0x9c, 0xa2, 0xa5, 0x1c, 0xea,
0x81, 0x83, 0xc1, 0xf8, 0xe5, 0x0a, 0x28, 0x44, 0x4b, 0x4a, 0x2e, 0x21, 0x0a, 0xae, 0x13, 0xc1, 0xec, 0xfa, 0x9c, 0x38, 0x59, 0xa4, 0xac, 0x8a, 0x4a, 0xa2, 0xec, 0xb4, 0x8f, 0x60, 0xaa, 0xb2,
0x2d, 0x8a, 0xe1, 0x0c, 0xf9, 0x84, 0x1d, 0x0a, 0xe7, 0xd7, 0xc0, 0x22, 0x35, 0x87, 0x31, 0xcc, 0x17, 0x6f, 0x27, 0xe0, 0x3d, 0x24, 0x1c, 0xdd, 0x05, 0x9b, 0x29, 0x8c, 0xa5, 0xeb, 0x5b, 0xec,
0x63, 0x54, 0x19, 0x36, 0x45, 0x41, 0x28, 0x76, 0x95, 0x14, 0xd1, 0x9f, 0xb0, 0x2b, 0xb2, 0xbd, 0x9a, 0x4e, 0x0d, 0xe8, 0x88, 0x7c, 0xcb, 0x77, 0xb1, 0x5f, 0x1d, 0xaf, 0x0b, 0x6b, 0xaa, 0xcc,
0x46, 0x43, 0xaa, 0xb2, 0xd7, 0xd8, 0xae, 0x50, 0x4d, 0xaf, 0xb9, 0x36, 0xc2, 0xfa, 0xf7, 0xf0, 0x2e, 0x1d, 0x1b, 0x08, 0xe1, 0x4e, 0x22, 0x3f, 0x30, 0xe7, 0x14, 0x59, 0x7a, 0x1e, 0xd1, 0x25,
0x64, 0x65, 0x34, 0xd1, 0x69, 0x28, 0x9b, 0x0a, 0xc4, 0x44, 0xfc, 0xf2, 0xf0, 0x80, 0x85, 0x56, 0xfa, 0x25, 0xeb, 0x7c, 0x05, 0x39, 0x07, 0x04, 0x0e, 0x1c, 0x0c, 0xc6, 0x2f, 0x57, 0x40, 0x21,
0xc3, 0xff, 0x70, 0x96, 0x8c, 0xed, 0xeb, 0xc0, 0x05, 0x67, 0xcd, 0x7b, 0x32, 0x42, 0x3c, 0xee, 0x5a, 0x52, 0x72, 0x09, 0x51, 0x70, 0x8d, 0x08, 0x6e, 0x51, 0x0c, 0x67, 0xc8, 0x67, 0xec, 0xf2,
0x07, 0x40, 0x06, 0x30, 0x68, 0xf0, 0x5b, 0xd3, 0x78, 0x63, 0x94, 0x08, 0xf3, 0x2f, 0x4d, 0x58, 0x38, 0xbf, 0x06, 0x16, 0xa9, 0x39, 0x8c, 0x61, 0x1e, 0xa3, 0xca, 0xb0, 0x29, 0x0a, 0x42, 0xb1,
0x59, 0x0e, 0x94, 0x68, 0x59, 0x61, 0xe9, 0x37, 0x7e, 0xfa, 0x1a, 0x26, 0x25, 0xbe, 0x19, 0x24, 0x8b, 0xbc, 0x88, 0xfe, 0x94, 0x5d, 0x50, 0xee, 0xd6, 0xeb, 0x52, 0x95, 0xbd, 0xc6, 0x96, 0x8f,
0xff, 0x34, 0x5a, 0xf8, 0x58, 0x17, 0xf5, 0x43, 0xbc, 0xcc, 0x9c, 0x29, 0x89, 0x44, 0x3e, 0xb0, 0x6a, 0x7a, 0xc9, 0xb8, 0x1e, 0xd6, 0xbe, 0x87, 0xa7, 0x2b, 0xa3, 0x81, 0x4e, 0x43, 0x79, 0xa9,
0xe3, 0x3e, 0xff, 0x6c, 0x41, 0xdd, 0xd5, 0x48, 0x1a, 0x56, 0x06, 0x3c, 0x34, 0x17, 0xb9, 0x09, 0x40, 0x4c, 0xc4, 0xaf, 0x6e, 0xf7, 0x59, 0x68, 0x35, 0xf8, 0x0f, 0x67, 0xc9, 0xd8, 0xbe, 0x0e,
0xff, 0x92, 0x89, 0xf5, 0x7e, 0xc3, 0x69, 0x4f, 0x06, 0x0d, 0xfe, 0x22, 0x29, 0x84, 0x17, 0x8d, 0x5c, 0x70, 0xd6, 0xbc, 0xaf, 0x25, 0xc4, 0x96, 0x09, 0x00, 0x64, 0x00, 0xfd, 0x3a, 0xbf, 0xb3,
0xa9, 0x24, 0x83, 0x46, 0x38, 0x68, 0x04, 0x2e, 0x3b, 0x1d, 0x97, 0x1b, 0x21, 0xae, 0x31, 0x0c, 0x8e, 0xf7, 0x75, 0x89, 0x30, 0xff, 0xd2, 0x84, 0x95, 0xe5, 0x40, 0x89, 0x96, 0x15, 0x96, 0x7e,
0x27, 0xe6, 0x1d, 0x4d, 0x41, 0x16, 0x71, 0x9a, 0x3d, 0x58, 0x34, 0x87, 0x15, 0xdc, 0x9f, 0x63, 0xe3, 0xa7, 0xbf, 0xc2, 0xa4, 0xc4, 0x37, 0x83, 0xe4, 0x9f, 0x46, 0x0b, 0x1f, 0xeb, 0xa2, 0x7e,
0x73, 0xb9, 0xea, 0x93, 0xdf, 0xcc, 0x00, 0x9b, 0x58, 0x50, 0xce, 0xa3, 0xf5, 0x0a, 0x98, 0xd3, 0x88, 0x57, 0xc9, 0x33, 0x25, 0x91, 0xc8, 0x07, 0x76, 0xdc, 0xe7, 0x9f, 0x2d, 0xa8, 0xbb, 0x1a,
0x84, 0x78, 0x3a, 0x32, 0xdd, 0xb8, 0xf0, 0x99, 0x14, 0x62, 0x5d, 0x8b, 0x91, 0x2a, 0xca, 0xef, 0x4a, 0x83, 0x4a, 0x9f, 0x87, 0xe6, 0x22, 0x37, 0xe1, 0x5f, 0x32, 0xb1, 0xde, 0xef, 0x38, 0xed,
0x69, 0x9d, 0xd8, 0xc2, 0x65, 0xa6, 0x81, 0xe9, 0xc0, 0x19, 0x8e, 0x29, 0x98, 0x43, 0xd0, 0x44, 0x69, 0xbf, 0xce, 0x5f, 0x24, 0x85, 0xf0, 0xa2, 0x31, 0x95, 0x64, 0xd0, 0x10, 0x07, 0x0d, 0xc1,
0x1b, 0xc4, 0x74, 0xe5, 0xdf, 0x83, 0x3c, 0x88, 0x2e, 0x0c, 0x6c, 0xa3, 0x98, 0xf2, 0x22, 0x5f, 0x65, 0xa7, 0xe3, 0x72, 0x23, 0xc4, 0x25, 0x92, 0xc1, 0xc4, 0xbc, 0xa3, 0x29, 0xc8, 0x22, 0x4e,
0x18, 0xf1, 0x62, 0x62, 0x6f, 0xd0, 0x70, 0xf8, 0xb8, 0xa9, 0x28, 0xfa, 0x56, 0xf8, 0x31, 0xcb, 0xb3, 0xfb, 0x8b, 0xc6, 0xa0, 0x82, 0xfb, 0x73, 0x68, 0x2e, 0x57, 0x3d, 0xf2, 0xbb, 0x19, 0x60,
0x3a, 0x9d, 0x0d, 0xdb, 0x56, 0xf2, 0x45, 0x61, 0xd6, 0x30, 0x21, 0x4a, 0x07, 0xc9, 0xcc, 0x95, 0x23, 0x10, 0xca, 0x79, 0xb4, 0x5e, 0x01, 0x73, 0x1a, 0x10, 0x4f, 0x47, 0xa6, 0x1b, 0x17, 0x3e,
0x77, 0x1e, 0x26, 0x52, 0xc4, 0x5c, 0x43, 0xb0, 0x0b, 0x72, 0x6e, 0x89, 0xb9, 0x3c, 0x1a, 0x86, 0x93, 0x42, 0xac, 0x6b, 0x31, 0x52, 0x45, 0xf9, 0x3d, 0xad, 0x13, 0x5b, 0xb8, 0xcc, 0x34, 0x30,
0xc4, 0xc5, 0xeb, 0xa3, 0x34, 0x38, 0x50, 0x35, 0x3e, 0x1d, 0x51, 0xc1, 0x6a, 0x91, 0x2f, 0x8a, 0xed, 0x3b, 0x83, 0x31, 0x05, 0x73, 0x08, 0x9a, 0x68, 0x83, 0x98, 0xae, 0xfc, 0x7b, 0x90, 0x07,
0xeb, 0x31, 0xbc, 0x32, 0xc4, 0x6e, 0xcf, 0xf0, 0x59, 0xe3, 0x22, 0x2a, 0x5e, 0x49, 0xc2, 0xc2, 0xd1, 0xc9, 0x82, 0xad, 0x28, 0x53, 0x5e, 0xe4, 0x0b, 0x23, 0x5e, 0x4c, 0xec, 0xf6, 0xeb, 0x0e,
0x22, 0x5e, 0x86, 0x27, 0x67, 0xeb, 0x20, 0x00, 0xf9, 0x4f, 0xe6, 0x10, 0x57, 0xe0, 0x2f, 0x4f, 0x1f, 0x37, 0x15, 0x45, 0xdf, 0x0a, 0x3f, 0x66, 0x59, 0xa7, 0xb3, 0x61, 0xeb, 0x4f, 0xbe, 0x28,
0xa5, 0xad, 0xdc, 0x74, 0xab, 0xb4, 0xd4, 0xec, 0xa4, 0x25, 0x2e, 0x4d, 0xdb, 0x29, 0x17, 0x27, 0xcc, 0x9a, 0x4e, 0x44, 0xe9, 0x20, 0x99, 0xb9, 0xf2, 0xce, 0xc3, 0x44, 0x8a, 0x98, 0x6b, 0x08,
0xe5, 0xa5, 0x61, 0x85, 0x2c, 0x4f, 0xf3, 0xd3, 0xa7, 0x37, 0x2c, 0x92, 0xcc, 0x02, 0x4b, 0x4a, 0x76, 0x41, 0xce, 0x2d, 0x31, 0x97, 0x47, 0xc3, 0x90, 0xb8, 0x78, 0x79, 0x97, 0x06, 0x7b, 0xaa,
0x3d, 0xde, 0x58, 0xd4, 0xcf, 0x1f, 0xbc, 0x55, 0x8e, 0x7f, 0x7a, 0xd3, 0xed, 0x76, 0xfb, 0xe4, 0xc6, 0x67, 0x43, 0x2a, 0x58, 0x2d, 0xf2, 0x45, 0x71, 0x39, 0x89, 0x57, 0x86, 0xd8, 0xdd, 0x25,
0x9f, 0xfe, 0x3a, 0xc8, 0xef, 0x0c, 0x48, 0xf0, 0x1d, 0x16, 0x00, 0xc8, 0x02, 0x38, 0x46, 0x2c, 0x3e, 0x6b, 0x5c, 0x44, 0xc5, 0x0b, 0x61, 0x58, 0x58, 0xc4, 0x9f, 0x22, 0x20, 0xa3, 0x75, 0x10,
0xbe, 0x90, 0x3a, 0xe3, 0xea, 0x8d, 0x4f, 0x40, 0xa5, 0xe0, 0x3d, 0x65, 0xa6, 0x2c, 0x34, 0x67, 0x80, 0xfc, 0x27, 0x73, 0x88, 0x1f, 0x20, 0xb8, 0x3c, 0x93, 0x36, 0x72, 0xd3, 0x8d, 0xd2, 0x52,
0x94, 0x1b, 0xb0, 0x47, 0xc4, 0xc2, 0xa4, 0x46, 0x45, 0xc0, 0x15, 0x37, 0x00, 0xeb, 0x10, 0xe1, 0xa3, 0x9d, 0x96, 0xb8, 0x34, 0x6d, 0xab, 0x5c, 0x9c, 0x94, 0x97, 0x06, 0x15, 0xb2, 0x3c, 0xcb,
0x40, 0x50, 0x89, 0x85, 0xfc, 0x0a, 0xd9, 0xbb, 0xca, 0x12, 0x42, 0x28, 0x07, 0x20, 0xc4, 0xac, 0x4f, 0x9f, 0xde, 0x6c, 0x49, 0x32, 0x0b, 0x2c, 0x29, 0x75, 0x79, 0x73, 0x56, 0x2f, 0x7f, 0x3a,
0x8e, 0xf7, 0x9d, 0x8a, 0x7b, 0xb9, 0x98, 0x00, 0x85, 0xc4, 0xf4, 0x6c, 0xb0, 0xb0, 0x33, 0x18, 0x57, 0x39, 0xfc, 0xe9, 0xa4, 0xd3, 0xe9, 0xf4, 0xc8, 0x3f, 0xfd, 0x75, 0x90, 0xdf, 0x19, 0x90,
0x7c, 0x94, 0x16, 0x84, 0x40, 0x94, 0x2a, 0xa7, 0xf1, 0x66, 0x9a, 0x2e, 0x90, 0xc9, 0x76, 0x31, 0xe0, 0x3b, 0x2c, 0x00, 0x90, 0x05, 0x70, 0x8c, 0x58, 0x7c, 0x21, 0x35, 0xc6, 0xd5, 0x1b, 0x9f,
0xcc, 0xee, 0x6b, 0xe4, 0x63, 0xb1, 0xf0, 0x11, 0x58, 0xea, 0x87, 0xec, 0x46, 0x1b, 0xd2, 0xc8, 0x80, 0x4a, 0xc1, 0x7b, 0xca, 0x4c, 0x59, 0x68, 0xce, 0x28, 0x37, 0x60, 0x8f, 0x88, 0x85, 0x49,
0xc0, 0x38, 0xf5, 0xbf, 0x53, 0xba, 0x22, 0x66, 0x44, 0x8e, 0x21, 0x84, 0xd3, 0x4f, 0x89, 0x33, 0x8d, 0x8a, 0x80, 0x2b, 0x6e, 0x00, 0xd6, 0x21, 0xc2, 0x81, 0xa0, 0x12, 0x0b, 0xf9, 0x15, 0xb2,
0xe3, 0x14, 0x60, 0x6f, 0x14, 0xeb, 0x7e, 0xb2, 0x81, 0xb1, 0x56, 0x84, 0xb2, 0x89, 0xc5, 0x6c, 0x77, 0x95, 0x25, 0x84, 0x50, 0x0e, 0x40, 0x88, 0x59, 0x1d, 0xef, 0x3b, 0x15, 0xb7, 0xa2, 0x31,
0x1c, 0x9c, 0xb6, 0x1f, 0x31, 0x52, 0x2a, 0xe7, 0x6c, 0xa5, 0xec, 0xfe, 0x65, 0x72, 0x11, 0x0e, 0x01, 0x0a, 0x89, 0xe9, 0xd9, 0x60, 0x61, 0x67, 0x30, 0xf8, 0x20, 0x2d, 0x08, 0x81, 0x28, 0x55,
0x3c, 0x05, 0x0d, 0x20, 0xf9, 0xcb, 0x31, 0x51, 0x15, 0xc6, 0x0f, 0x29, 0xc4, 0x2b, 0xdc, 0xde, 0xce, 0xe2, 0xcd, 0x34, 0x5d, 0x20, 0x93, 0xed, 0x62, 0x98, 0xdd, 0xd7, 0xc8, 0xc7, 0x62, 0xe1,
0x9c, 0x93, 0x20, 0x0b, 0xb9, 0x20, 0x20, 0xf4, 0x78, 0x61, 0x1a, 0xb4, 0x62, 0x1d, 0x82, 0x35, 0x23, 0xb0, 0xd4, 0x0f, 0xd9, 0x7d, 0x42, 0xa4, 0x91, 0x81, 0x71, 0xea, 0xff, 0x4e, 0xe9, 0x8a,
0x8c, 0x95, 0x4b, 0x48, 0xc3, 0x0a, 0x6d, 0xc8, 0xda, 0xbb, 0xf5, 0xfc, 0x7b, 0x4f, 0x48, 0xb5, 0x98, 0x11, 0x39, 0x84, 0x10, 0x4e, 0x3f, 0x23, 0xce, 0x8c, 0x53, 0x80, 0xfd, 0x65, 0xac, 0x83,
0x92, 0x2a, 0x47, 0xc0, 0x75, 0xf6, 0xce, 0x77, 0x23, 0xbc, 0xfb, 0x2d, 0x5f, 0x62, 0x1f, 0x98, 0xcc, 0x06, 0xc6, 0x5a, 0x11, 0xca, 0x26, 0x16, 0xb3, 0x71, 0x70, 0xda, 0xc2, 0xc5, 0x48, 0xa9,
0xd8, 0x27, 0xa6, 0x57, 0x26, 0x41, 0xe2, 0x80, 0xc3, 0x00, 0xa6, 0x14, 0x54, 0xe4, 0x59, 0xcf, 0x9c, 0xb3, 0x95, 0xb2, 0xdb, 0xaf, 0xc9, 0x35, 0x44, 0xf0, 0x14, 0x34, 0x80, 0xe4, 0x2f, 0xc7,
0xd5, 0x96, 0x6c, 0xe3, 0xcd, 0xb6, 0x9d, 0x33, 0x57, 0x3c, 0xb9, 0x88, 0xd3, 0x5c, 0x23, 0x4d, 0x44, 0x55, 0x18, 0x3f, 0xa4, 0x10, 0x2f, 0xd0, 0x7b, 0x73, 0x4e, 0x82, 0x2c, 0xe4, 0x82, 0x80,
0x78, 0x87, 0xc0, 0x13, 0x71, 0x29, 0x8b, 0xc8, 0x9d, 0xce, 0xf2, 0x54, 0xa9, 0x94, 0x1e, 0xab, 0xd0, 0xe3, 0x75, 0x75, 0xd0, 0x8a, 0x75, 0x08, 0xd6, 0x30, 0x56, 0x2e, 0x21, 0x0d, 0x2b, 0xb4,
0x76, 0x18, 0x34, 0x9d, 0xcd, 0x1c, 0x0b, 0x3b, 0xfa, 0x88, 0xdc, 0x42, 0xf8, 0x7d, 0x3d, 0x29, 0x21, 0x6b, 0xef, 0xd6, 0xf3, 0xef, 0x3d, 0x21, 0xd5, 0x4a, 0xaa, 0x1c, 0x01, 0xd7, 0xd9, 0x3b,
0x15, 0x6c, 0xdf, 0x92, 0x5b, 0xda, 0x1e, 0x30, 0x3c, 0x52, 0x19, 0x8a, 0x66, 0x2f, 0x59, 0x6f, 0xdf, 0x8d, 0xf0, 0xe6, 0xbd, 0x7c, 0x89, 0xbd, 0x74, 0x62, 0x9f, 0x98, 0x5e, 0x99, 0x04, 0x89,
0xee, 0x81, 0xc4, 0xbe, 0x92, 0xca, 0x19, 0xcb, 0x79, 0x0b, 0x4e, 0x76, 0x73, 0x86, 0x84, 0xdf, 0x03, 0x0e, 0x03, 0x98, 0x52, 0x50, 0x91, 0x67, 0x7d, 0x6b, 0x1b, 0xb2, 0x8d, 0xf7, 0x0a, 0xb7,
0x2c, 0x2b, 0x3e, 0xa7, 0x16, 0x28, 0x78, 0xcb, 0x5d, 0xcc, 0x6a, 0xec, 0x96, 0x03, 0x0e, 0x27, 0xce, 0x65, 0xf1, 0xe4, 0x22, 0x4e, 0x73, 0x8d, 0x34, 0xe1, 0x1d, 0x00, 0x4f, 0xc4, 0x95, 0x38,
0x3a, 0x1e, 0x33, 0x77, 0x5b, 0xc5, 0x77, 0x4f, 0x83, 0x98, 0x5d, 0x73, 0xcd, 0x72, 0xed, 0x8e, 0x22, 0xb7, 0xdb, 0xcb, 0x33, 0xa5, 0x52, 0x7a, 0xee, 0xda, 0x66, 0xd0, 0x74, 0x36, 0x73, 0x2c,
0x95, 0x3b, 0x3e, 0x6f, 0x4b, 0x85, 0x37, 0xe6, 0xbb, 0x93, 0x11, 0x45, 0x2f, 0x5c, 0xc3, 0x1f, 0xec, 0x8a, 0x24, 0x72, 0x13, 0xe1, 0x77, 0xf5, 0xf5, 0x54, 0xb0, 0x05, 0x4e, 0x6e, 0x6a, 0x3b,
0x73, 0xea, 0x03, 0x11, 0x4c, 0x13, 0x71, 0x7e, 0x54, 0x4b, 0x14, 0xeb, 0x7a, 0x22, 0x38, 0xc2, 0xc0, 0xf0, 0x48, 0x65, 0x20, 0x1a, 0xe6, 0x64, 0xbd, 0xb1, 0x03, 0x12, 0x1b, 0x6a, 0x2a, 0x23,
0xe4, 0xb7, 0x86, 0x95, 0x1d, 0x43, 0xdf, 0x4a, 0xed, 0x08, 0x36, 0x33, 0xb1, 0x5f, 0xe6, 0xe0, 0x96, 0xf3, 0x16, 0x9c, 0xec, 0xe6, 0x0c, 0x09, 0xbf, 0xd7, 0x57, 0x7c, 0x98, 0x2d, 0x50, 0xf0,
0x8d, 0x80, 0x61, 0x2f, 0x1e, 0x97, 0xaf, 0xef, 0xc7, 0x7e, 0xa6, 0x92, 0x77, 0x4d, 0x88, 0xa1, 0xb6, 0xc5, 0x98, 0xd5, 0xd8, 0x71, 0x08, 0x1c, 0x4e, 0x74, 0x3c, 0x66, 0xee, 0xa6, 0x8a, 0x6f,
0x9a, 0xf1, 0x6a, 0x49, 0x02, 0x83, 0x1e, 0x5a, 0x1a, 0x56, 0x13, 0x27, 0x44, 0x4a, 0x5c, 0x1b, 0x9f, 0x06, 0x31, 0xbb, 0xe6, 0x9a, 0xe5, 0xda, 0x1d, 0x2b, 0x77, 0x7c, 0xde, 0x96, 0x0a, 0x6f,
0x22, 0xa8, 0x15, 0x20, 0xa8, 0x09, 0x0c, 0xb5, 0x8c, 0xa7, 0x0b, 0x18, 0x9d, 0x97, 0xac, 0xfb, 0xcc, 0x77, 0x27, 0x23, 0x8a, 0x5e, 0xb8, 0x86, 0x3f, 0xe6, 0xd4, 0x07, 0x22, 0x98, 0x26, 0xe2,
0x91, 0xfc, 0x99, 0xd5, 0x23, 0xb6, 0x10, 0xd8, 0x7a, 0x2d, 0x76, 0x47, 0xa4, 0x91, 0x7d, 0xa3, 0xfc, 0xa8, 0x96, 0x28, 0xd6, 0xb5, 0x44, 0x70, 0x84, 0xc9, 0x6f, 0x0e, 0x2a, 0x5b, 0x86, 0xbe,
0x67, 0xdc, 0xd7, 0x28, 0x67, 0x45, 0x59, 0x67, 0x2a, 0xa9, 0x14, 0xd6, 0xe8, 0x6b, 0x53, 0x08, 0x99, 0xda, 0x11, 0x6c, 0x08, 0x63, 0xbf, 0x8b, 0xc2, 0x9b, 0x29, 0xc3, 0x6e, 0x3c, 0x2e, 0x5f,
0x42, 0x6e, 0xfb, 0xec, 0x57, 0x50, 0x7a, 0xba, 0xa6, 0xad, 0x1e, 0xfa, 0x0b, 0x8a, 0xd6, 0x07, 0xdf, 0x8f, 0xfd, 0x4c, 0x25, 0xef, 0x9a, 0x10, 0x43, 0x35, 0xe3, 0xd5, 0x92, 0x04, 0x06, 0x3d,
0xbe, 0xc0, 0xe7, 0x29, 0x8b, 0xe8, 0x6b, 0xd8, 0xba, 0xba, 0x0e, 0x7b, 0x4d, 0x78, 0x14, 0x9f, 0xb4, 0x34, 0xa8, 0x26, 0x4e, 0x88, 0x94, 0xb8, 0x36, 0x44, 0x70, 0x54, 0x80, 0xe0, 0x48, 0x60,
0xb4, 0x55, 0x72, 0x53, 0x64, 0x3a, 0x45, 0x7f, 0xd0, 0x50, 0x83, 0x24, 0xc1, 0x6c, 0x24, 0x58, 0x38, 0xca, 0x78, 0xba, 0x80, 0xd1, 0x79, 0xc9, 0x3a, 0x48, 0xc9, 0xc7, 0xac, 0x1e, 0xb1, 0x85,
0xc3, 0x32, 0x3c, 0x6e, 0xed, 0xa6, 0x8e, 0xeb, 0xa0, 0x09, 0x0e, 0x88, 0x6b, 0xce, 0x21, 0x30, 0xc0, 0xd6, 0x6b, 0xb1, 0x3b, 0x22, 0xf5, 0xec, 0x1b, 0x3d, 0xe3, 0xbe, 0x86, 0x39, 0x2b, 0xca,
0x0c, 0xd7, 0x34, 0x64, 0xa6, 0xe6, 0x4f, 0x30, 0x81, 0x2e, 0xb3, 0x8a, 0xa0, 0xe2, 0x24, 0xe3, 0xba, 0x7b, 0x49, 0xa5, 0xb0, 0x46, 0x7f, 0x34, 0xc5, 0x96, 0x86, 0x1e, 0xfb, 0x0d, 0x9a, 0xae,
0x4e, 0xe3, 0xd6, 0xd2, 0x61, 0x41, 0xd7, 0x67, 0xcc, 0x13, 0x34, 0x22, 0x68, 0xff, 0xa6, 0xe8, 0xae, 0x69, 0xab, 0x87, 0xde, 0x82, 0xa2, 0xf5, 0x81, 0x2f, 0xf0, 0x79, 0xca, 0x22, 0xfa, 0x23,
0x9b, 0xe9, 0x03, 0x00, 0x80, 0xee, 0x5a, 0x39, 0x7b, 0x0c, 0xe2, 0x50, 0xc9, 0xca, 0xc3, 0xa5, 0x6c, 0xff, 0x5d, 0x87, 0xdd, 0x06, 0x3c, 0x8a, 0x4f, 0xda, 0x2a, 0xb9, 0x29, 0x32, 0xdd, 0xb6,
0x79, 0x4b, 0xd1, 0xf0, 0xd0, 0xf9, 0x32, 0x36, 0x43, 0x14, 0x92, 0x10, 0x81, 0xf8, 0x80, 0xaf, 0x3f, 0x68, 0xa8, 0x41, 0x92, 0x60, 0x36, 0x12, 0xac, 0x61, 0x19, 0x1e, 0xb7, 0x76, 0x53, 0xc7,
0xbd, 0x9c, 0x48, 0x9c, 0x49, 0x42, 0xcd, 0xa6, 0xeb, 0x90, 0x9f, 0xfb, 0xc0, 0x3a, 0x6d, 0xc7, 0x75, 0xd0, 0x04, 0x07, 0xc4, 0x35, 0xe7, 0x10, 0x18, 0x86, 0x6b, 0x1a, 0x32, 0x53, 0xf3, 0x11,
0xa2, 0x61, 0xe9, 0xf8, 0x8c, 0x0d, 0xe3, 0xe5, 0x17, 0x56, 0x09, 0x11, 0x51, 0xbe, 0xf0, 0xd5, 0x4c, 0xa0, 0xcb, 0xac, 0x22, 0xa8, 0x38, 0xc9, 0xb8, 0xd3, 0xb8, 0x3d, 0x77, 0x50, 0xd0, 0x39,
0xa1, 0xc3, 0x3d, 0x35, 0xb2, 0x64, 0xee, 0xfa, 0x53, 0x1e, 0xd0, 0xc0, 0x24, 0xb3, 0x59, 0x26, 0x1b, 0xf3, 0x04, 0x8d, 0x08, 0xda, 0xbf, 0x29, 0xfa, 0x66, 0xfa, 0x00, 0x00, 0xa0, 0xbb, 0x56,
0x0a, 0xa8, 0x14, 0x93, 0x76, 0xf1, 0x56, 0xb8, 0xf9, 0x6d, 0xf9, 0x4f, 0x1b, 0x80, 0x60, 0xef, 0xce, 0x1e, 0x83, 0x38, 0x54, 0xb2, 0xf2, 0x70, 0x69, 0xde, 0x52, 0x34, 0x3c, 0x74, 0xbe, 0x8c,
0xbe, 0xb2, 0xbd, 0xff, 0xba, 0x34, 0x57, 0x2b, 0xdc, 0x57, 0xb0, 0x17, 0xe9, 0x69, 0x0e, 0x89, 0xcd, 0x10, 0x85, 0x24, 0x44, 0x20, 0xde, 0xe3, 0x6b, 0x2f, 0x27, 0x12, 0x67, 0x92, 0x50, 0xb3,
0x4b, 0xea, 0xbd, 0xcc, 0x98, 0xf4, 0x5c, 0x63, 0xf8, 0xc3, 0xfa, 0x15, 0x57, 0xf0, 0x73, 0x4a, 0xe9, 0x3a, 0xe4, 0xe7, 0x3e, 0xb0, 0x4e, 0xdb, 0xb1, 0x68, 0x58, 0x3a, 0x3e, 0x63, 0xc3, 0x78,
0xc2, 0x12, 0xd0, 0x97, 0x2a, 0x58, 0x5c, 0xc5, 0x4f, 0x31, 0xc4, 0x47, 0x21, 0xdb, 0x0a, 0x56, 0xf9, 0x85, 0x55, 0x42, 0x44, 0x94, 0x2f, 0x7c, 0x75, 0xe8, 0x70, 0x4f, 0x8d, 0x2c, 0x99, 0xbb,
0x42, 0x1c, 0x2e, 0x84, 0x61, 0x62, 0x69, 0xa8, 0x80, 0x12, 0xd5, 0x6b, 0xc2, 0xca, 0x98, 0xcc, 0xfe, 0x94, 0x07, 0x34, 0x30, 0xc9, 0x6c, 0x96, 0x89, 0x02, 0x2a, 0xc5, 0xa4, 0x5d, 0xbc, 0x15,
0x23, 0xae, 0x5d, 0xb7, 0xb6, 0x5e, 0x35, 0x20, 0xdf, 0xf0, 0x0e, 0x48, 0xc0, 0xf9, 0xb5, 0x90, 0x6e, 0x7e, 0x53, 0xfe, 0xd3, 0xce, 0x27, 0xd8, 0xbb, 0xbf, 0xd8, 0xde, 0xff, 0xb5, 0x34, 0x57,
0x00, 0x56, 0xc0, 0x05, 0xe1, 0xc3, 0xa3, 0x6d, 0xdf, 0xb5, 0x4b, 0x2a, 0xfa, 0x69, 0x7b, 0x41, 0x2b, 0xdc, 0x57, 0xb0, 0x17, 0xe9, 0x69, 0x0e, 0x89, 0x4b, 0xea, 0xdd, 0xcc, 0x98, 0xf4, 0x5c,
0xce, 0xb8, 0xea, 0x18, 0x31, 0x71, 0x84, 0x90, 0xc1, 0x92, 0x4a, 0x62, 0x4f, 0x11, 0xf3, 0xf9, 0x63, 0xf0, 0xc3, 0xfa, 0x15, 0x57, 0xf0, 0x73, 0x4a, 0xc2, 0x12, 0xd0, 0xd7, 0x2a, 0x58, 0x5c,
0x78, 0xdf, 0x19, 0x01, 0xc3, 0x53, 0x8b, 0x4f, 0xf6, 0xda, 0xdd, 0x84, 0xb0, 0x71, 0x4e, 0xc8, 0xc5, 0x4f, 0x31, 0xc4, 0x47, 0x21, 0x9b, 0x0a, 0x56, 0x42, 0x1c, 0x2e, 0x84, 0x61, 0x62, 0x69,
0xb6, 0x0f, 0x0d, 0xb6, 0x3c, 0x2b, 0xa4, 0xb5, 0xdb, 0x27, 0x0c, 0x05, 0x7d, 0x4c, 0x95, 0x31, 0xa8, 0x80, 0x12, 0xd5, 0x6b, 0xc2, 0xca, 0x98, 0xcc, 0x23, 0xae, 0x5d, 0xf7, 0x68, 0xbd, 0xaa,
0x98, 0xac, 0x88, 0x12, 0x7b, 0xbb, 0xdc, 0xbf, 0x7b, 0x62, 0xd7, 0x6c, 0xd7, 0x6e, 0xe9, 0xe3, 0x43, 0xbe, 0xe1, 0xed, 0x91, 0x80, 0xf3, 0x6b, 0x21, 0x01, 0xac, 0x80, 0x0b, 0xc2, 0x87, 0x47,
0xbe, 0xce, 0x3e, 0x08, 0x7e, 0x2b, 0x02, 0x8a, 0xb5, 0x48, 0x97, 0xb7, 0x09, 0xb6, 0xb0, 0x4d, 0xdb, 0xbe, 0x6b, 0x97, 0x54, 0xf4, 0xd3, 0xf6, 0x82, 0x9c, 0x71, 0xd5, 0x31, 0x62, 0xe2, 0x08,
0x93, 0x01, 0x4e, 0xe1, 0x7b, 0x69, 0x17, 0x20, 0xe0, 0x6b, 0x1f, 0x9c, 0x15, 0xfc, 0x6f, 0x53, 0x21, 0x83, 0x25, 0x95, 0xc4, 0x9e, 0x22, 0xe6, 0xf3, 0xf1, 0xae, 0x33, 0x02, 0x86, 0xe7, 0x28,
0x3f, 0x04, 0xf4, 0x1a, 0x50, 0xbd, 0x16, 0x13, 0xb2, 0x1c, 0xa5, 0x18, 0xec, 0x57, 0x69, 0xf8, 0x3e, 0xd9, 0x6b, 0x75, 0x12, 0xc2, 0xc6, 0x39, 0x21, 0xdb, 0x3c, 0x34, 0xd8, 0xf0, 0xac, 0x90,
0x86, 0x41, 0x05, 0xe5, 0xac, 0xe8, 0x02, 0x2a, 0x96, 0x74, 0x07, 0x8c, 0x75, 0x05, 0xbe, 0xbc, 0xd6, 0x6e, 0x9e, 0x30, 0x14, 0xf4, 0x3a, 0x55, 0xc6, 0x60, 0xb2, 0x22, 0x4a, 0xec, 0xcd, 0x72,
0xa0, 0xa4, 0x2e, 0x2a, 0xea, 0xa9, 0x98, 0xbf, 0xc2, 0x82, 0x3a, 0x2b, 0x55, 0xbc, 0x02, 0xc3, 0xff, 0xf6, 0x89, 0x5d, 0xa3, 0x75, 0x74, 0x4b, 0x1f, 0x77, 0xb5, 0x34, 0x42, 0xf0, 0x5b, 0x11,
0x5a, 0x56, 0x4f, 0x3f, 0x65, 0x61, 0x30, 0x88, 0x0b, 0xdf, 0x47, 0x8c, 0x24, 0x97, 0xa6, 0xe3, 0x50, 0xac, 0xcd, 0xbc, 0xbc, 0x3f, 0xb2, 0x89, 0xad, 0xae, 0x0c, 0x70, 0x0a, 0xdf, 0x77, 0xb4,
0x25, 0xb6, 0x0d, 0x7f, 0x74, 0xe3, 0x90, 0xd9, 0xb8, 0x9c, 0x5c, 0x6d, 0xa5, 0x07, 0xac, 0x77, 0x42, 0x55, 0x5a, 0x7b, 0x67, 0x05, 0xff, 0xdb, 0xd0, 0xf7, 0x01, 0x1d, 0x03, 0xaa, 0x63, 0x31,
0xbb, 0x38, 0xba, 0x48, 0xaa, 0x09, 0x3d, 0x52, 0xc9, 0x09, 0x27, 0xfb, 0x7d, 0x20, 0x81, 0x91, 0x21, 0xcb, 0x51, 0x8a, 0xc1, 0x7e, 0x93, 0x06, 0x27, 0x0c, 0x2a, 0x28, 0x67, 0x45, 0x07, 0x50,
0xd5, 0x53, 0x89, 0x69, 0x59, 0x74, 0x05, 0xf1, 0x42, 0x9d, 0xa1, 0x2b, 0xc9, 0x0f, 0x33, 0xaa, 0xb1, 0xa4, 0x3b, 0x60, 0xac, 0x2b, 0xf0, 0xe5, 0x05, 0x25, 0x75, 0x51, 0x51, 0x4f, 0xc5, 0xfc,
0x9a, 0xe6, 0x8a, 0xaf, 0x32, 0xc5, 0x68, 0xa9, 0xe1, 0x04, 0x1c, 0x03, 0x30, 0xe2, 0x4f, 0xf6, 0x0d, 0x16, 0xd4, 0x59, 0xa9, 0xe2, 0x0d, 0x18, 0xd6, 0xb2, 0x7a, 0xfa, 0x19, 0x0b, 0x83, 0x41,
0xbc, 0x48, 0xeb, 0x4d, 0x52, 0x01, 0x3d, 0x9c, 0x19, 0x85, 0x3f, 0x54, 0xc5, 0x58, 0x3b, 0x33, 0x5c, 0xf8, 0x3e, 0x62, 0x24, 0xb9, 0x34, 0x1d, 0x2f, 0xb1, 0x6d, 0xf8, 0x93, 0x27, 0xfb, 0xcc,
0xc1, 0x38, 0xc3, 0xc7, 0x59, 0x00, 0xd1, 0x84, 0xdd, 0x80, 0xc8, 0x87, 0x15, 0x4a, 0x0d, 0xe9, 0xc6, 0xe5, 0xe4, 0x6a, 0x23, 0x3d, 0x60, 0xfd, 0xef, 0xc5, 0xd1, 0x45, 0x52, 0x4d, 0xe8, 0x92,
0x2b, 0xec, 0xb8, 0x77, 0x2b, 0xa1, 0xd2, 0xc1, 0x5b, 0x7f, 0xd0, 0x30, 0x79, 0xe0, 0x3a, 0xc6, 0x4a, 0x4e, 0x38, 0xd9, 0xaf, 0x33, 0x09, 0x8c, 0xac, 0x9e, 0x4a, 0x4c, 0xcb, 0xa2, 0x2b, 0x88,
0x92, 0xcb, 0xff, 0x45, 0x0f, 0xc7, 0x17, 0xbb, 0x67, 0x77, 0x95, 0x8c, 0x1e, 0x12, 0x7e, 0xc7, 0x17, 0x6a, 0x0c, 0x5d, 0x49, 0x7e, 0x98, 0x51, 0xd5, 0x34, 0x57, 0x7c, 0x93, 0x29, 0x46, 0x4b,
0x71, 0xbf, 0x95, 0x19, 0x5f, 0x4a, 0x71, 0x66, 0xf9, 0x22, 0x49, 0xc1, 0x3a, 0xd3, 0xab, 0xf2, 0x75, 0x27, 0xe0, 0x18, 0x80, 0x11, 0x1f, 0xd9, 0xf3, 0x22, 0xad, 0x37, 0x49, 0x05, 0xf4, 0x70,
0x83, 0x97, 0x1d, 0x27, 0x88, 0xc1, 0x95, 0xf8, 0x95, 0x8e, 0x90, 0x45, 0x55, 0x37, 0x58, 0x13, 0x66, 0x14, 0xfe, 0x4c, 0x18, 0x63, 0xed, 0xcc, 0x04, 0xe3, 0x0c, 0x1f, 0x67, 0x01, 0x44, 0x13,
0x67, 0x4e, 0x16, 0x8f, 0x41, 0x67, 0x98, 0x12, 0xf0, 0x34, 0x01, 0xac, 0x22, 0xab, 0x1b, 0x1e, 0x76, 0x1d, 0x22, 0x1f, 0x56, 0x28, 0x35, 0xa4, 0xbf, 0x60, 0xc7, 0xbd, 0x5b, 0x09, 0x95, 0x0e,
0x92, 0xa3, 0x91, 0x10, 0x23, 0x81, 0x35, 0x93, 0xee, 0x6c, 0x85, 0x9d, 0x67, 0x10, 0x76, 0x56, 0xde, 0xfa, 0xfd, 0xba, 0xc9, 0x03, 0xd7, 0x31, 0x96, 0x5c, 0xfe, 0x2f, 0x7a, 0x38, 0xbe, 0xd8,
0x0a, 0x8d, 0xe4, 0xb2, 0x28, 0x02, 0x4d, 0x23, 0x4d, 0x59, 0xab, 0xc1, 0x13, 0x25, 0x4e, 0x2d, 0x3e, 0xbb, 0xab, 0x64, 0xf4, 0x90, 0xf0, 0x7b, 0xa2, 0xbb, 0xad, 0xcc, 0xf8, 0x52, 0x8a, 0x33,
0x4e, 0x45, 0x0e, 0x88, 0xc4, 0x25, 0xd2, 0x28, 0x68, 0xb9, 0x2e, 0x49, 0x5e, 0x77, 0x67, 0xd0, 0xcb, 0x57, 0x49, 0x0a, 0xd6, 0x99, 0xde, 0x94, 0x1f, 0xbc, 0x6c, 0x39, 0x41, 0x0c, 0xae, 0xc4,
0x72, 0x99, 0x2a, 0x84, 0xad, 0x53, 0xdf, 0x87, 0xd8, 0x5f, 0xc3, 0x94, 0x30, 0x8c, 0x63, 0xd8, 0x6f, 0xa4, 0x84, 0x2c, 0xaa, 0xba, 0xc1, 0x9a, 0x38, 0x73, 0xb2, 0x78, 0x0c, 0x3a, 0xc3, 0x94,
0x30, 0x99, 0x14, 0x3d, 0xf3, 0x07, 0x73, 0xb9, 0x34, 0x89, 0xe5, 0x07, 0x81, 0x48, 0x07, 0x31, 0x80, 0xa7, 0x09, 0x60, 0x15, 0x59, 0xdd, 0x70, 0x9f, 0x1c, 0x0d, 0x85, 0x18, 0x09, 0xac, 0x99,
0x84, 0xe0, 0x81, 0xd1, 0x01, 0x1e, 0x7d, 0x80, 0x80, 0x95, 0xc8, 0x61, 0x14, 0xf8, 0x90, 0xf4, 0x74, 0x67, 0x23, 0xec, 0x1c, 0x41, 0xd8, 0x59, 0x29, 0x34, 0x92, 0xcb, 0xa2, 0x08, 0x34, 0x8d,
0xa0, 0x15, 0x49, 0x4a, 0x0e, 0x6c, 0x82, 0x4a, 0x29, 0xf6, 0x02, 0x66, 0x96, 0xcc, 0x80, 0xf5, 0x34, 0x65, 0xed, 0x08, 0x9e, 0x28, 0x71, 0x6a, 0x71, 0x26, 0x72, 0x40, 0x24, 0x2e, 0x91, 0x46,
0x1b, 0x22, 0x7b, 0xb0, 0x86, 0x6d, 0xec, 0x29, 0x72, 0x66, 0xa9, 0xb6, 0x76, 0xe5, 0xc3, 0xc7, 0x41, 0xcb, 0x75, 0x49, 0xf2, 0xba, 0x3d, 0x83, 0x96, 0xcb, 0x54, 0x21, 0x6c, 0x9d, 0xfa, 0x3e,
0x72, 0x96, 0x55, 0xd8, 0x2f, 0x5d, 0xa1, 0x93, 0xa3, 0x01, 0xf0, 0xac, 0xde, 0xdd, 0xea, 0x2e, 0xc4, 0xfe, 0x1a, 0xa6, 0x84, 0x61, 0x1c, 0xc3, 0x86, 0xc9, 0xa4, 0xe8, 0x99, 0x3f, 0x98, 0xcb,
0x69, 0xa1, 0xb5, 0xa0, 0x2b, 0x60, 0x6b, 0x3d, 0xd3, 0x32, 0x99, 0xe6, 0x80, 0xa3, 0x34, 0xf3, 0xa5, 0x49, 0x2c, 0x3f, 0x08, 0x44, 0x3a, 0x88, 0x21, 0x04, 0x0f, 0x8c, 0xf6, 0xf0, 0xe8, 0x03,
0x05, 0x35, 0x8c, 0x32, 0x7c, 0x12, 0xdb, 0xf5, 0xfe, 0xc0, 0x76, 0xe9, 0xb9, 0x94, 0x24, 0x95, 0x04, 0xac, 0x44, 0x0e, 0xa3, 0xc0, 0x87, 0xa4, 0x07, 0xad, 0x48, 0x52, 0x72, 0x60, 0x13, 0x54,
0x88, 0x5f, 0x50, 0x8c, 0x6f, 0x20, 0x18, 0x0d, 0x1d, 0x64, 0x15, 0x97, 0xe4, 0xb3, 0xc0, 0x0f, 0x4a, 0xb1, 0x17, 0x30, 0xb3, 0x64, 0x06, 0xac, 0xdf, 0x10, 0xd9, 0x83, 0x35, 0x6c, 0x62, 0x4f,
0xc3, 0x99, 0x69, 0xd3, 0x03, 0xac, 0xba, 0x79, 0xcf, 0x05, 0xb6, 0x92, 0x22, 0x20, 0xf8, 0x03, 0x91, 0x33, 0x4b, 0xb5, 0xb1, 0x2b, 0x1f, 0x3e, 0x95, 0xb3, 0xac, 0xc2, 0x7e, 0x67, 0x0c, 0x9d,
0x60, 0x5b, 0xc4, 0xdd, 0xbc, 0x2d, 0x21, 0xee, 0xc1, 0xdd, 0x6d, 0xf5, 0xc1, 0x1f, 0x26, 0xac, 0x1c, 0x0d, 0x80, 0x67, 0xb5, 0xce, 0x46, 0x77, 0x49, 0x13, 0xad, 0x05, 0x5d, 0x01, 0x5b, 0x6b,
0x90, 0x65, 0x88, 0x78, 0x45, 0x61, 0xe7, 0xda, 0x74, 0x69, 0x04, 0x2e, 0x34, 0x4a, 0xc9, 0x3c, 0x99, 0x96, 0xc9, 0x34, 0x07, 0x1c, 0xa6, 0x99, 0x2f, 0xa8, 0x61, 0x94, 0xe1, 0x93, 0xd8, 0xae,
0x40, 0xd8, 0xb5, 0x20, 0x0c, 0x93, 0xa9, 0xb1, 0xe9, 0xd9, 0x10, 0x66, 0x9e, 0x3d, 0x5a, 0x2e, 0xf7, 0x7b, 0xb6, 0x4b, 0xcf, 0xa5, 0x24, 0xa9, 0x44, 0xfc, 0x82, 0x62, 0x7c, 0x03, 0xc1, 0x68,
0xc5, 0xf4, 0x28, 0x41, 0x57, 0x44, 0xe9, 0xf5, 0x61, 0x36, 0x56, 0x12, 0x3e, 0x0e, 0x49, 0xc8, 0xe8, 0x20, 0xab, 0xb8, 0x24, 0x8f, 0x02, 0x3f, 0x0c, 0x67, 0xa6, 0x4d, 0xf7, 0xb0, 0xea, 0xe6,
0x2d, 0x03, 0x70, 0x10, 0x70, 0xd9, 0xc4, 0xc5, 0x4d, 0x62, 0x1c, 0x8c, 0x55, 0xf8, 0xad, 0xf8, 0x3d, 0x17, 0xd8, 0x4a, 0x8a, 0x80, 0xe0, 0xcf, 0xaf, 0x6d, 0x10, 0x77, 0xf3, 0xb6, 0x84, 0xb8,
0x51, 0xb7, 0xed, 0x79, 0x2e, 0x0e, 0x29, 0xb0, 0x5e, 0xac, 0xc0, 0xf0, 0x8e, 0x31, 0x3c, 0xc6, 0x07, 0x77, 0xbb, 0xd5, 0x07, 0x7f, 0x16, 0xb2, 0x42, 0x96, 0x21, 0xe2, 0x15, 0x85, 0x9d, 0x6b,
0x7f, 0xc3, 0x4c, 0x70, 0xb9, 0xa5, 0xb8, 0x19, 0x1d, 0x56, 0xe3, 0x4a, 0xc1, 0x44, 0x38, 0x09, 0xd3, 0xa5, 0x11, 0xb8, 0xd0, 0x28, 0x25, 0x73, 0x0f, 0x61, 0xd7, 0x82, 0x30, 0x4c, 0xa6, 0xc6,
0xd6, 0x77, 0xb7, 0xfb, 0xb5, 0x6f, 0x3e, 0x15, 0xc5, 0x38, 0x9f, 0x4c, 0x27, 0x62, 0xa5, 0x1c, 0xa6, 0x67, 0x43, 0x98, 0x39, 0x7a, 0xb4, 0x5c, 0x8a, 0xe9, 0x51, 0x82, 0xae, 0x88, 0xd2, 0xeb,
0xb0, 0x23, 0x95, 0x3d, 0x01, 0xce, 0x7b, 0x10, 0xa9, 0x3d, 0xa1, 0x0d, 0xbe, 0x26, 0x2c, 0x98, 0xfd, 0x6c, 0xac, 0x24, 0x7c, 0x1c, 0x90, 0x90, 0x5b, 0x06, 0xe0, 0x20, 0xe0, 0xb2, 0x89, 0x8b,
0x4e, 0x80, 0x2a, 0xbb, 0x61, 0xcd, 0x64, 0xed, 0x05, 0x4e, 0x58, 0x14, 0x15, 0x00, 0xdf, 0xd9, 0x9b, 0xc4, 0x38, 0x18, 0xab, 0xf0, 0x5b, 0xf1, 0x93, 0x7a, 0x9b, 0xf3, 0x5c, 0xec, 0x53, 0x60,
0xed, 0x0a, 0xfc, 0xc5, 0x23, 0xc8, 0x0f, 0xd1, 0x7f, 0xb3, 0xcd, 0xa8, 0xf0, 0xa7, 0x23, 0x13, 0xbd, 0x58, 0x81, 0xe1, 0x1d, 0x63, 0x78, 0x8c, 0xff, 0x86, 0x99, 0xe0, 0x72, 0x4b, 0x71, 0x33,
0xdc, 0x94, 0x45, 0x33, 0x86, 0xe1, 0x50, 0x2f, 0xe9, 0xd9, 0xcd, 0x96, 0x5f, 0xbf, 0xc7, 0xa2, 0xdc, 0xaf, 0xc6, 0x95, 0x82, 0x89, 0x70, 0x12, 0xac, 0xef, 0x6e, 0xf6, 0x74, 0xdf, 0x7c, 0x2e,
0xe7, 0x07, 0x9e, 0x56, 0xf8, 0x22, 0xd2, 0x67, 0xd6, 0xa5, 0xa8, 0x5f, 0xb2, 0xb0, 0x3d, 0x32, 0x8a, 0x71, 0x3e, 0x9b, 0x4e, 0xc4, 0x4a, 0x39, 0x60, 0x47, 0x2a, 0x3b, 0x02, 0x9c, 0xf7, 0x20,
0x65, 0x5f, 0x25, 0x5b, 0xdf, 0x78, 0x7b, 0x20, 0x3a, 0x3c, 0xdc, 0x10, 0x5f, 0x39, 0xd0, 0x45, 0x52, 0x3b, 0x42, 0x1b, 0x7c, 0x4d, 0x58, 0x30, 0x9d, 0x00, 0x55, 0xb6, 0xc3, 0x9a, 0xc9, 0xda,
0x89, 0x0c, 0x3e, 0xd0, 0x47, 0x89, 0xdc, 0xc5, 0x4e, 0xca, 0xca, 0x9e, 0x70, 0xb1, 0xb0, 0x99, 0x0b, 0x9c, 0xb0, 0x28, 0x2a, 0x00, 0xbe, 0xb3, 0x6b, 0x25, 0xf8, 0x7b, 0x53, 0x90, 0x1f, 0xa2,
0x92, 0x65, 0x73, 0xc9, 0xe2, 0x81, 0x6d, 0x69, 0x8b, 0xe8, 0x56, 0x90, 0xb3, 0xc3, 0xe2, 0x31, 0xff, 0x66, 0x9b, 0x51, 0xe1, 0x4f, 0x87, 0x26, 0xb8, 0x29, 0x8b, 0x66, 0x0c, 0xc3, 0xbe, 0x5e,
0xe7, 0x30, 0x8e, 0x81, 0xc4, 0x06, 0x94, 0xfb, 0x0e, 0x32, 0x51, 0x17, 0x4c, 0x2e, 0xa4, 0x56, 0xd2, 0xd1, 0xcd, 0x86, 0x5f, 0xbf, 0xc7, 0xa2, 0xe7, 0x07, 0x9e, 0x56, 0xf8, 0x22, 0xd2, 0x67,
0xdb, 0xbe, 0xe0, 0xe5, 0x09, 0xc1, 0xd9, 0x28, 0xab, 0x34, 0xbf, 0x64, 0xaa, 0x21, 0xa7, 0xf6, 0xd6, 0xa5, 0xa8, 0x5f, 0xb2, 0xb0, 0x3d, 0x32, 0x65, 0x5f, 0x25, 0x5b, 0xdf, 0x78, 0xbb, 0x27,
0x1d, 0x0a, 0x81, 0xcd, 0x04, 0x23, 0xb6, 0x04, 0x99, 0x09, 0x73, 0xdb, 0x75, 0x3d, 0x2a, 0x8c, 0x3a, 0xdc, 0x7f, 0x13, 0xa0, 0xb2, 0xa7, 0x8b, 0x12, 0x19, 0xbc, 0xa7, 0x8f, 0x12, 0xb9, 0x8b,
0xe8, 0x2f, 0xd8, 0xc5, 0x55, 0x22, 0xdf, 0x07, 0xe6, 0x0a, 0x6b, 0x33, 0x4b, 0xff, 0x0e, 0x06, 0x9d, 0x94, 0x95, 0x1d, 0xe1, 0x62, 0x61, 0x33, 0x25, 0xcb, 0xe6, 0x92, 0xc5, 0x03, 0xdb, 0xd2,
0x2b, 0x7b, 0x36, 0x27, 0x1e, 0x61, 0xba, 0xf7, 0xe6, 0x63, 0x48, 0x70, 0xa0, 0x52, 0x2a, 0xe3, 0x16, 0xd1, 0x8d, 0x20, 0x67, 0x8b, 0xc5, 0x63, 0xce, 0x61, 0x1c, 0x03, 0x89, 0x0d, 0x28, 0xf7,
0xcd, 0x14, 0xde, 0xc3, 0xde, 0xe7, 0x2d, 0xf0, 0xdd, 0x3d, 0xab, 0xa0, 0x68, 0x14, 0x78, 0xac, 0x1d, 0x64, 0xa2, 0x2e, 0x98, 0x5c, 0x48, 0xad, 0x36, 0x7d, 0xc1, 0xeb, 0x13, 0x82, 0xd1, 0x30,
0xc2, 0x7d, 0x12, 0x16, 0x23, 0xe0, 0x0d, 0xc5, 0x58, 0xb0, 0xa4, 0x2f, 0xe4, 0x73, 0x6c, 0x92, 0xab, 0x34, 0xbf, 0x64, 0xaa, 0x21, 0x67, 0xf6, 0x1d, 0x0a, 0x81, 0xcd, 0x04, 0x23, 0xb6, 0x04,
0xf4, 0x66, 0xc2, 0xe7, 0xf7, 0xe3, 0x2c, 0x9f, 0xdf, 0x5f, 0x4f, 0x76, 0xa3, 0xa4, 0x24, 0x0d, 0x99, 0x09, 0x73, 0xdb, 0x75, 0x3d, 0x2c, 0x8c, 0xe8, 0x2f, 0xd8, 0xe5, 0x5f, 0x22, 0xdf, 0x07,
0x9e, 0xcd, 0xb1, 0xef, 0x11, 0x7f, 0xe8, 0x92, 0x44, 0x74, 0xb9, 0x72, 0xb3, 0x13, 0x17, 0x47, 0xe6, 0x0a, 0x6b, 0x33, 0x4b, 0xff, 0x0e, 0x06, 0x2b, 0x3b, 0x36, 0x27, 0x1e, 0x61, 0xba, 0xf7,
0xc0, 0x4d, 0xb0, 0x4d, 0x3f, 0x1c, 0x03, 0x27, 0x59, 0x6e, 0xdc, 0x4e, 0x90, 0x74, 0x1d, 0x34, 0xe6, 0x63, 0x48, 0x70, 0xa0, 0x52, 0x2a, 0xe3, 0x8d, 0x14, 0xde, 0xc3, 0xde, 0xe7, 0x0d, 0xf0,
0x21, 0x3f, 0xab, 0xb0, 0x90, 0xa7, 0x38, 0xeb, 0x1d, 0x1e, 0x38, 0xb4, 0xd9, 0x3d, 0x7f, 0xa9, 0xed, 0x3d, 0xab, 0xa0, 0x68, 0x14, 0x78, 0xac, 0xc2, 0x7d, 0x12, 0x16, 0x23, 0xe0, 0x0d, 0xc5,
0xbc, 0xe4, 0x00, 0xa6, 0x81, 0x67, 0x4a, 0x29, 0x1f, 0xf8, 0xaf, 0x71, 0xc6, 0xb3, 0x36, 0xf0, 0x58, 0xb0, 0xa4, 0xaf, 0xe4, 0x73, 0x6c, 0x92, 0xf4, 0x46, 0xc2, 0xe7, 0xf7, 0xe3, 0x2c, 0x9f,
0x34, 0x0a, 0x8f, 0xa6, 0xf0, 0x67, 0x7e, 0xff, 0x17, 0xa9, 0x64, 0xc2, 0x8f, 0xf6, 0x57, 0x00, 0xdf, 0x5f, 0x4f, 0xb6, 0xa3, 0xa4, 0x24, 0x0d, 0x9e, 0xcd, 0xb1, 0xef, 0x11, 0x7f, 0x66, 0x94,
0x00 0x44, 0x74, 0xb9, 0x72, 0xb3, 0x13, 0x17, 0x47, 0xc0, 0x0d, 0xb0, 0x4d, 0x3f, 0x1c, 0x03, 0x27,
0x59, 0x6e, 0xdc, 0x4e, 0x90, 0x74, 0x1d, 0x34, 0x20, 0x3f, 0xab, 0xb0, 0x90, 0xa7, 0x38, 0xeb,
0x1d, 0xec, 0x39, 0xb4, 0xd9, 0x3e, 0x7f, 0xa9, 0xbc, 0xe6, 0x00, 0xa6, 0x8e, 0x67, 0x4a, 0x29,
0x1f, 0xf8, 0x6f, 0xa1, 0xc6, 0xb3, 0xd6, 0xf1, 0x34, 0x0a, 0x8f, 0xa6, 0xf0, 0x47, 0x96, 0xff,
0x17, 0x92, 0xaf, 0x38, 0x4b, 0x74, 0x59, 0x00, 0x00
}; };

File diff suppressed because it is too large Load Diff

View File

@ -338,7 +338,7 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId)
if (presetsModifiedTime == 0) presetsModifiedTime = timein; if (presetsModifiedTime == 0) presetsModifiedTime = timein;
} }
doReboot = root[F("rb")] | doReboot; if (root[F("psave")].isNull()) doReboot = root[F("rb")] | doReboot;
// do not allow changing main segment while in realtime mode (may get odd results else) // do not allow changing main segment while in realtime mode (may get odd results else)
if (!realtimeMode) strip.setMainSegmentId(root[F("mainseg")] | strip.getMainSegmentId()); // must be before realtimeLock() if "live" if (!realtimeMode) strip.setMainSegmentId(root[F("mainseg")] | strip.getMainSegmentId()); // must be before realtimeLock() if "live"

View File

@ -99,6 +99,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
char rf[4] = "RF"; rf[2] = 48+s; rf[3] = 0; //refresh required char rf[4] = "RF"; rf[2] = 48+s; rf[3] = 0; //refresh required
char aw[4] = "AW"; aw[2] = 48+s; aw[3] = 0; //auto white mode char aw[4] = "AW"; aw[2] = 48+s; aw[3] = 0; //auto white mode
char wo[4] = "WO"; wo[2] = 48+s; wo[3] = 0; //channel swap char wo[4] = "WO"; wo[2] = 48+s; wo[3] = 0; //channel swap
char sp[4] = "SP"; sp[2] = 48+s; sp[3] = 0; //bus clock speed (DotStar & PWM)
if (!request->hasArg(lp)) { if (!request->hasArg(lp)) {
DEBUG_PRINT(F("No data for ")); DEBUG_PRINT(F("No data for "));
DEBUG_PRINTLN(s); DEBUG_PRINTLN(s);
@ -120,11 +121,33 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
break; // no parameter break; // no parameter
} }
awmode = request->arg(aw).toInt(); awmode = request->arg(aw).toInt();
uint16_t freqHz = request->arg(sp).toInt();
if (type > TYPE_ONOFF && type < 49) {
switch (freqHz) {
case 0 : freqHz = WLED_PWM_FREQ/3; break;
case 1 : freqHz = WLED_PWM_FREQ/2; break;
default:
case 2 : freqHz = WLED_PWM_FREQ; break;
case 3 : freqHz = WLED_PWM_FREQ*2; break;
case 4 : freqHz = WLED_PWM_FREQ*3; break;
}
} else if (type > 48 && type < 64) {
switch (freqHz) {
default:
case 0 : freqHz = 1000; break;
case 1 : freqHz = 2000; break;
case 2 : freqHz = 5000; break;
case 3 : freqHz = 10000; break;
case 4 : freqHz = 20000; break;
}
} else {
freqHz = 0;
}
channelSwap = (type == TYPE_SK6812_RGBW || type == TYPE_TM1814) ? request->arg(wo).toInt() : 0; channelSwap = (type == TYPE_SK6812_RGBW || type == TYPE_TM1814) ? request->arg(wo).toInt() : 0;
// actual finalization is done in WLED::loop() (removing old busses and adding new) // actual finalization is done in WLED::loop() (removing old busses and adding new)
// this may happen even before this loop is finished so we do "doInitBusses" after the loop // this may happen even before this loop is finished so we do "doInitBusses" after the loop
if (busConfigs[s] != nullptr) delete busConfigs[s]; if (busConfigs[s] != nullptr) delete busConfigs[s];
busConfigs[s] = new BusConfig(type, pins, start, length, colorOrder | (channelSwap<<4), request->hasArg(cv), skip, awmode); busConfigs[s] = new BusConfig(type, pins, start, length, colorOrder | (channelSwap<<4), request->hasArg(cv), skip, awmode, freqHz);
busesChanged = true; busesChanged = true;
} }
//doInitBusses = busesChanged; // we will do that below to ensure all input data is processed //doInitBusses = busesChanged; // we will do that below to ensure all input data is processed

View File

@ -771,7 +771,7 @@ uint8_t realtimeBroadcast(uint8_t type, IPAddress client, uint16_t length, uint8
// write the colors, the write write(const uint8_t *buffer, size_t size) // write the colors, the write write(const uint8_t *buffer, size_t size)
// function is just a loop internally too // function is just a loop internally too
for (size_t i = 0; i < packetSize; i += 3) { for (size_t i = 0; i < packetSize; i += (isRGBW?4:3)) {
ddpUdp.write(scale8(buffer[bufferOffset++], bri)); // R ddpUdp.write(scale8(buffer[bufferOffset++], bri)); // R
ddpUdp.write(scale8(buffer[bufferOffset++], bri)); // G ddpUdp.write(scale8(buffer[bufferOffset++], bri)); // G
ddpUdp.write(scale8(buffer[bufferOffset++], bri)); // B ddpUdp.write(scale8(buffer[bufferOffset++], bri)); // B

View File

@ -505,6 +505,9 @@ void WLED::initAP(bool resetAP)
DEBUG_PRINTLN(apSSID); DEBUG_PRINTLN(apSSID);
WiFi.softAPConfig(IPAddress(4, 3, 2, 1), IPAddress(4, 3, 2, 1), IPAddress(255, 255, 255, 0)); WiFi.softAPConfig(IPAddress(4, 3, 2, 1), IPAddress(4, 3, 2, 1), IPAddress(255, 255, 255, 0));
WiFi.softAP(apSSID, apPass, apChannel, apHide); WiFi.softAP(apSSID, apPass, apChannel, apHide);
#if defined(LOLIN_WIFI_FIX) && (defined(ARDUINO_ARCH_ESP32C3) || defined(ARDUINO_ARCH_ESP32S2))
WiFi.setTxPower(WIFI_POWER_8_5dBm);
#endif
if (!apActive) // start captive portal if AP active if (!apActive) // start captive portal if AP active
{ {
@ -662,8 +665,10 @@ void WLED::initConnection()
#endif #endif
WiFi.begin(clientSSID, clientPass); WiFi.begin(clientSSID, clientPass);
#ifdef ARDUINO_ARCH_ESP32 #ifdef ARDUINO_ARCH_ESP32
#if defined(LOLIN_WIFI_FIX) && (defined(ARDUINO_ARCH_ESP32C3) || defined(ARDUINO_ARCH_ESP32S2))
WiFi.setTxPower(WIFI_POWER_8_5dBm);
#endif
WiFi.setSleep(!noWifiSleep); WiFi.setSleep(!noWifiSleep);
WiFi.setHostname(hostname); WiFi.setHostname(hostname);
#else #else

View File

@ -8,7 +8,7 @@
*/ */
// version code in format yymmddb (b = daily build) // version code in format yymmddb (b = daily build)
#define VERSION 2304090 #define VERSION 2304280
//uncomment this if you have a "my_config.h" file you'd like to use //uncomment this if you have a "my_config.h" file you'd like to use
//#define WLED_USE_MY_CONFIG //#define WLED_USE_MY_CONFIG

View File

@ -222,7 +222,7 @@ void initServer()
} }
} }
request->send(200, "application/json", F("{\"success\":true}")); request->send(200, "application/json", F("{\"success\":true}"));
}); }, JSON_BUFFER_SIZE);
server.addHandler(handler); server.addHandler(handler);
server.on("/version", HTTP_GET, [](AsyncWebServerRequest *request){ server.on("/version", HTTP_GET, [](AsyncWebServerRequest *request){

View File

@ -398,6 +398,7 @@ void getSettingsJS(byte subPage, char* dest)
char rf[4] = "RF"; rf[2] = 48+s; rf[3] = 0; //off refresh char rf[4] = "RF"; rf[2] = 48+s; rf[3] = 0; //off refresh
char aw[4] = "AW"; aw[2] = 48+s; aw[3] = 0; //auto white mode char aw[4] = "AW"; aw[2] = 48+s; aw[3] = 0; //auto white mode
char wo[4] = "WO"; wo[2] = 48+s; wo[3] = 0; //swap channels char wo[4] = "WO"; wo[2] = 48+s; wo[3] = 0; //swap channels
char sp[4] = "SP"; sp[2] = 48+s; sp[3] = 0; //bus clock speed
oappend(SET_F("addLEDs(1);")); oappend(SET_F("addLEDs(1);"));
uint8_t pins[5]; uint8_t pins[5];
uint8_t nPins = bus->getPins(pins); uint8_t nPins = bus->getPins(pins);
@ -414,6 +415,27 @@ void getSettingsJS(byte subPage, char* dest)
sappend('c',rf,bus->isOffRefreshRequired()); sappend('c',rf,bus->isOffRefreshRequired());
sappend('v',aw,bus->getAutoWhiteMode()); sappend('v',aw,bus->getAutoWhiteMode());
sappend('v',wo,bus->getColorOrder() >> 4); sappend('v',wo,bus->getColorOrder() >> 4);
uint16_t speed = bus->getFrequency();
if (bus->getType() > TYPE_ONOFF && bus->getType() < 48) {
switch (speed) {
case WLED_PWM_FREQ/3 : speed = 0; break;
case WLED_PWM_FREQ/2 : speed = 1; break;
default:
case WLED_PWM_FREQ : speed = 2; break;
case WLED_PWM_FREQ*2 : speed = 3; break;
case WLED_PWM_FREQ*3 : speed = 4; break;
}
} else {
switch (speed) {
case 1000 : speed = 0; break;
case 2000 : speed = 1; break;
default:
case 5000 : speed = 2; break;
case 10000 : speed = 3; break;
case 20000 : speed = 4; break;
}
}
sappend('v',sp,speed);
} }
sappend('v',SET_F("MA"),strip.ablMilliampsMax); sappend('v',SET_F("MA"),strip.ablMilliampsMax);
sappend('v',SET_F("LA"),strip.milliampsPerLed); sappend('v',SET_F("LA"),strip.milliampsPerLed);