Merge branch 'master' into dev

This commit is contained in:
Blaz Kristan 2022-01-25 17:53:22 +01:00
commit 86092541ed
20 changed files with 617 additions and 605 deletions

View File

@ -12,7 +12,7 @@
; default_envs = travis_esp8266, travis_esp32
# Release binaries
default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth
default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth, esp32s2_saola, esp32c3
# Build everything
; default_envs = esp32dev, esp8285_4CH_MagicHome, esp8285_4CH_H801, codm-controller-0.6-rev2, codm-controller-0.6, esp32s2_saola, d1_mini_5CH_Shojo_PCB, d1_mini, sp501e, travis_esp8266, travis_esp32, nodemcuv2, esp32_eth, anavi_miracle_controller, esp07, esp01_1m_full, m5atom, h803wf, d1_mini_ota, heltec_wifi_kit_8, esp8285_5CH_H801, d1_mini_debug, wemos_shield_esp32, elekstube_ips
@ -162,10 +162,9 @@ upload_speed = 115200
# ------------------------------------------------------------------------------
lib_compat_mode = strict
lib_deps =
fastled/FastLED @ 3.4.0
IRremoteESP8266 @ 2.7.18
https://github.com/lorol/LITTLEFS.git
https://github.com/Aircoookie/ESPAsyncWebServer.git @ ~2.0.2
fastled/FastLED @ 3.5.0
IRremoteESP8266 @ 2.8.1
https://github.com/Aircoookie/ESPAsyncWebServer.git @ ~2.0.4
#For use of the TTGO T-Display ESP32 Module with integrated TFT display uncomment the following line
#TFT_eSPI
#For use SSD1306 OLED display uncomment following
@ -201,6 +200,7 @@ build_flags =
lib_deps =
${env.lib_deps}
https://github.com/lorol/LITTLEFS.git
# ESPAsyncTCP @ 1.2.0
ESPAsyncUDP
makuna/NeoPixelBus @ 2.6.7 # 2.6.5/2.6.6 and newer do not compile on ESP core < 3.0.0
@ -215,13 +215,13 @@ default_partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
lib_deps =
${env.lib_deps}
https://github.com/lorol/LITTLEFS.git
makuna/NeoPixelBus @ 2.6.7
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
[esp32s2]
build_flags = -g
-DARDUINO_ARCH_ESP32
-DCONFIG_LITTLEFS_FOR_IDF_3_2
-DARDUINO_ARCH_ESP32S2
-DCONFIG_IDF_TARGET_ESP32S2
-D CONFIG_ASYNC_TCP_USE_WDT=0
@ -232,6 +232,19 @@ lib_deps =
makuna/NeoPixelBus @ 2.6.7
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
[esp32c3]
build_flags = -g
-DARDUINO_ARCH_ESP32
-DARDUINO_ARCH_ESP32C3
-DCONFIG_IDF_TARGET_ESP32C3
-D CONFIG_ASYNC_TCP_USE_WDT=0
-DCO
lib_deps =
${env.lib_deps}
makuna/NeoPixelBus @ 2.6.7
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
# ------------------------------------------------------------------------------
# WLED BUILDS
# ------------------------------------------------------------------------------
@ -317,17 +330,25 @@ lib_deps = ${esp32.lib_deps}
board_build.partitions = ${esp32.default_partitions}
[env:esp32s2_saola]
board = esp32dev
board_build.mcu = esp32s2
platform = espressif32
board = esp32-s2-saola-1
platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.1/platform-tasmota-espressif32-2.0.2.1.zip
platform_packages =
framework = arduino
board_build.partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
board_build.flash_mode = qio
upload_speed = 460800
build_unflags = ${common.build_unflags}
lib_deps = ${esp32s2.lib_deps}
[env:esp32c3]
board = esp32-c3-devkitm-1
platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.1/platform-tasmota-espressif32-2.0.2.1.zip
platform_packages =
toolchain-xtensa32s2
framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#2.0.0-alpha1
framework = arduino
board_build.partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
upload_speed = 460800
build_unflags = ${common.build_unflags}
lib_deps = ${esp32s2.lib_deps}
lib_deps = ${esp32c3.lib_deps}
[env:esp8285_4CH_MagicHome]
board = esp8285

View File

@ -265,6 +265,10 @@ writeChunks(
append: ")=====",
method: "plaintext",
filter: "html-minify",
mangle: (str) =>
str
.replace("%", "%%")
.replace(/Usermods\<\/button\>\<\/form\>/gms, "Usermods\<\/button\>\<\/form\>%DMXMENU%"),
},
{
file: "settings_wifi.htm",

View File

@ -1,19 +0,0 @@
# ESP32 Touch Brightness Control
Toggle On/Off with a long press (800ms)
Switch through 5 brightness levels (defined in usermod_touchbrightness.h, values 0-255) with a short (100ms) touch
## Installation
Copy 'usermod_touchbrightness.h' to the wled00 directory.
in 'usermod_list.cpp' add this:
> #include "usermod_touchbrightness.h"
above "void registerUsermods()"
and
> usermods.add(new TouchBrightnessControl());
inside the "registerUsermods()" function

View File

@ -1,89 +0,0 @@
//
// usermod_touchbrightness.h
// github.com/aircoookie/WLED
//
// Created by Justin Kühner on 14.09.2020.
// Copyright © 2020 NeariX. All rights reserved.
// https://github.com/NeariX67/
// Discord: @NeariX#4799
#pragma once
#include "wled.h"
#define threshold 40 //Increase value if touches falsely accur. Decrease value if actual touches are not recognized
#define touchPin T0 //T0 = D4 / GPIO4
//Define the 5 brightness levels
//Long press to turn off / on
#define brightness1 51
#define brightness2 102
#define brightness3 153
#define brightness4 204
#define brightness5 255
#ifdef ESP32
class TouchBrightnessControl : public Usermod {
private:
unsigned long lastTime = 0; //Interval
unsigned long lastTouch = 0; //Timestamp of last Touch
unsigned long lastRelease = 0; //Timestamp of last Touch release
boolean released = true; //current Touch state (touched/released)
uint16_t touchReading = 0; //sensor reading, maybe use uint8_t???
uint16_t touchDuration = 0; //duration of last touch
public:
void setup() {
lastTouch = millis();
lastRelease = millis();
lastTime = millis();
}
void loop() {
if (millis() - lastTime >= 50) { //Check every 50ms if a touch occurs
lastTime = millis();
touchReading = touchRead(touchPin); //Read touch sensor on pin T0 (GPIO4 / D4)
if(touchReading < threshold && released) { //Touch started
released = false;
lastTouch = millis();
}
else if(touchReading >= threshold && !released) { //Touch released
released = true;
lastRelease = millis();
touchDuration = lastRelease - lastTouch; //Calculate duration
}
//Serial.println(touchDuration);
if(touchDuration >= 800 && released) { //Toggle power if button press is longer than 800ms
touchDuration = 0; //Reset touch duration to avoid multiple actions on same touch
toggleOnOff();
colorUpdated(2); //Refresh values
}
else if(touchDuration >= 100 && released) { //Switch to next brightness if touch is between 100 and 800ms
touchDuration = 0; //Reset touch duration to avoid multiple actions on same touch
if(bri < brightness1) {
bri = brightness1;
} else if(bri >= brightness1 && bri < brightness2) {
bri = brightness2;
} else if(bri >= brightness2 && bri < brightness3) {
bri = brightness3;
} else if(bri >= brightness3 && bri < brightness4) {
bri = brightness4;
} else if(bri >= brightness4 && bri < brightness5) {
bri = brightness5;
} else if(bri >= brightness5) {
bri = brightness1;
}
colorUpdated(2); //Refresh values
}
}
}
};
#endif

View File

@ -15,7 +15,7 @@ This usermod allow to use 240x240 display to display following:
## Hardware
***
![Hardware](images/ST7789_guide.jpg)
![Hardware](images/ST7789_Guide.jpg)
## Library used

View File

@ -1,3 +1,7 @@
# DEPRECATION NOTICE
This usermod is deprecated and no longer maintained. It will be removed in a future WLED release. Please use usermod multi_relay which has more features.
# MQTT controllable switches
This usermod allows controlling switches (e.g. relays) via MQTT.

View File

@ -1,5 +1,7 @@
#pragma once
#warning "This usermod is deprecated and no longer maintained. It will be removed in a future WLED release. Please use usermod multi_relay which has more features."
#include "wled.h"
#ifndef WLED_ENABLE_MQTT
#error "This user mod requires MQTT to be enabled."

View File

@ -40,7 +40,7 @@ When relay is switched it will publish a message:
1. Register the usermod by adding `#include "../usermods/multi_relay/usermod_multi_relay.h"` at the top and `usermods.add(new MultiRelay());` at the bottom of `usermods_list.cpp`.
or
2. Use `#define USERMOD_MULTI_RELAY` in wled.h or `-D USERMOD_MULTI_RELAY`in your platformio.ini
2. Use `#define USERMOD_MULTI_RELAY` in wled.h or `-D USERMOD_MULTI_RELAY` in your platformio.ini
You can override the default maximum number (4) of relays by defining MULTI_RELAY_MAX_RELAYS.

View File

@ -98,26 +98,34 @@
#ifdef ARDUINO_ARCH_ESP32
//RGB
#define B_32_RN_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32RmtNWs2812xMethod>
#ifndef CONFIG_IDF_TARGET_ESP32C3
#define B_32_I0_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s0800KbpsMethod>
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
#define B_32_I1_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s1800KbpsMethod>
#endif
//RGBW
#define B_32_RN_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp32RmtNWs2812xMethod>
#ifndef CONFIG_IDF_TARGET_ESP32C3
#define B_32_I0_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp32I2s0800KbpsMethod>
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
#define B_32_I1_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp32I2s1800KbpsMethod>
#endif
//400Kbps
#define B_32_RN_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32RmtN400KbpsMethod>
#ifndef CONFIG_IDF_TARGET_ESP32C3
#define B_32_I0_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s0400KbpsMethod>
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
#define B_32_I1_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s1400KbpsMethod>
#endif
//TM1814 (RGBW)
#define B_32_RN_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp32RmtNTm1814Method>
#ifndef CONFIG_IDF_TARGET_ESP32C3
#define B_32_I0_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp32I2s0Tm1814Method>
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
#define B_32_I1_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp32I2s1Tm1814Method>
#endif
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
@ -192,23 +200,31 @@ class PolyBus {
#endif
#ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->Begin(); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_NEO_3: (static_cast<B_32_I0_NEO_3*>(busPtr))->Begin(); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_NEO_3: (static_cast<B_32_I1_NEO_3*>(busPtr))->Begin(); break;
#endif
case I_32_RN_NEO_4: (static_cast<B_32_RN_NEO_4*>(busPtr))->Begin(); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_NEO_4: (static_cast<B_32_I0_NEO_4*>(busPtr))->Begin(); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_NEO_4: (static_cast<B_32_I1_NEO_4*>(busPtr))->Begin(); break;
#endif
case I_32_RN_400_3: (static_cast<B_32_RN_400_3*>(busPtr))->Begin(); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_400_3: (static_cast<B_32_I0_400_3*>(busPtr))->Begin(); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_400_3: (static_cast<B_32_I1_400_3*>(busPtr))->Begin(); break;
#endif
case I_32_RN_TM1_4: beginTM1814<B_32_RN_TM1_4*>(busPtr); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_TM1_4: beginTM1814<B_32_I0_TM1_4*>(busPtr); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_TM1_4: beginTM1814<B_32_I1_TM1_4*>(busPtr); break;
#endif
// ESP32 can (and should, to avoid inadvertantly driving the chip select signal) specify the pins used for SPI, but only in begin()
@ -247,23 +263,31 @@ class PolyBus {
#endif
#ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: busPtr = new B_32_RN_NEO_3(len, pins[0], (NeoBusChannel)channel); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_NEO_3: busPtr = new B_32_I0_NEO_3(len, pins[0]); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_NEO_3: busPtr = new B_32_I1_NEO_3(len, pins[0]); break;
#endif
case I_32_RN_NEO_4: busPtr = new B_32_RN_NEO_4(len, pins[0], (NeoBusChannel)channel); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_NEO_4: busPtr = new B_32_I0_NEO_4(len, pins[0]); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_NEO_4: busPtr = new B_32_I1_NEO_4(len, pins[0]); break;
#endif
case I_32_RN_400_3: busPtr = new B_32_RN_400_3(len, pins[0], (NeoBusChannel)channel); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_400_3: busPtr = new B_32_I0_400_3(len, pins[0]); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_400_3: busPtr = new B_32_I1_400_3(len, pins[0]); break;
#endif
case I_32_RN_TM1_4: busPtr = new B_32_RN_TM1_4(len, pins[0], (NeoBusChannel)channel); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_TM1_4: busPtr = new B_32_I0_TM1_4(len, pins[0]); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_TM1_4: busPtr = new B_32_I1_TM1_4(len, pins[0]); break;
#endif
#endif
@ -303,23 +327,31 @@ class PolyBus {
#endif
#ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->Show(); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_NEO_3: (static_cast<B_32_I0_NEO_3*>(busPtr))->Show(); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_NEO_3: (static_cast<B_32_I1_NEO_3*>(busPtr))->Show(); break;
#endif
case I_32_RN_NEO_4: (static_cast<B_32_RN_NEO_4*>(busPtr))->Show(); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_NEO_4: (static_cast<B_32_I0_NEO_4*>(busPtr))->Show(); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_NEO_4: (static_cast<B_32_I1_NEO_4*>(busPtr))->Show(); break;
#endif
case I_32_RN_400_3: (static_cast<B_32_RN_400_3*>(busPtr))->Show(); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_400_3: (static_cast<B_32_I0_400_3*>(busPtr))->Show(); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_400_3: (static_cast<B_32_I1_400_3*>(busPtr))->Show(); break;
#endif
case I_32_RN_TM1_4: (static_cast<B_32_RN_TM1_4*>(busPtr))->Show(); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_TM1_4: (static_cast<B_32_I0_TM1_4*>(busPtr))->Show(); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->Show(); break;
#endif
#endif
@ -356,23 +388,31 @@ class PolyBus {
#endif
#ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: return (static_cast<B_32_RN_NEO_3*>(busPtr))->CanShow(); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_NEO_3: return (static_cast<B_32_I0_NEO_3*>(busPtr))->CanShow(); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_NEO_3: return (static_cast<B_32_I1_NEO_3*>(busPtr))->CanShow(); break;
#endif
case I_32_RN_NEO_4: return (static_cast<B_32_RN_NEO_4*>(busPtr))->CanShow(); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_NEO_4: return (static_cast<B_32_I0_NEO_4*>(busPtr))->CanShow(); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_NEO_4: return (static_cast<B_32_I1_NEO_4*>(busPtr))->CanShow(); break;
#endif
case I_32_RN_400_3: return (static_cast<B_32_RN_400_3*>(busPtr))->CanShow(); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_400_3: return (static_cast<B_32_I0_400_3*>(busPtr))->CanShow(); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_400_3: return (static_cast<B_32_I1_400_3*>(busPtr))->CanShow(); break;
#endif
case I_32_RN_TM1_4: return (static_cast<B_32_RN_TM1_4*>(busPtr))->CanShow(); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_TM1_4: return (static_cast<B_32_I0_TM1_4*>(busPtr))->CanShow(); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_TM1_4: return (static_cast<B_32_I1_TM1_4*>(busPtr))->CanShow(); break;
#endif
#endif
@ -428,23 +468,31 @@ class PolyBus {
#endif
#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;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_NEO_3: (static_cast<B_32_I0_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_NEO_3: (static_cast<B_32_I1_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
#endif
case I_32_RN_NEO_4: (static_cast<B_32_RN_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_NEO_4: (static_cast<B_32_I0_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_NEO_4: (static_cast<B_32_I1_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
#endif
case I_32_RN_400_3: (static_cast<B_32_RN_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_400_3: (static_cast<B_32_I0_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_400_3: (static_cast<B_32_I1_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
#endif
case I_32_RN_TM1_4: (static_cast<B_32_RN_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_TM1_4: (static_cast<B_32_I0_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
#endif
#endif
@ -481,23 +529,31 @@ class PolyBus {
#endif
#ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->SetBrightness(b); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_NEO_3: (static_cast<B_32_I0_NEO_3*>(busPtr))->SetBrightness(b); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_NEO_3: (static_cast<B_32_I1_NEO_3*>(busPtr))->SetBrightness(b); break;
#endif
case I_32_RN_NEO_4: (static_cast<B_32_RN_NEO_4*>(busPtr))->SetBrightness(b); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_NEO_4: (static_cast<B_32_I0_NEO_4*>(busPtr))->SetBrightness(b); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_NEO_4: (static_cast<B_32_I1_NEO_4*>(busPtr))->SetBrightness(b); break;
#endif
case I_32_RN_400_3: (static_cast<B_32_RN_400_3*>(busPtr))->SetBrightness(b); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_400_3: (static_cast<B_32_I0_400_3*>(busPtr))->SetBrightness(b); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_400_3: (static_cast<B_32_I1_400_3*>(busPtr))->SetBrightness(b); break;
#endif
case I_32_RN_TM1_4: (static_cast<B_32_RN_TM1_4*>(busPtr))->SetBrightness(b); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_TM1_4: (static_cast<B_32_I0_TM1_4*>(busPtr))->SetBrightness(b); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->SetBrightness(b); break;
#endif
#endif
@ -535,23 +591,31 @@ class PolyBus {
#endif
#ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: col = (static_cast<B_32_RN_NEO_3*>(busPtr))->GetPixelColor(pix); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_NEO_3: col = (static_cast<B_32_I0_NEO_3*>(busPtr))->GetPixelColor(pix); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_NEO_3: col = (static_cast<B_32_I1_NEO_3*>(busPtr))->GetPixelColor(pix); break;
#endif
case I_32_RN_NEO_4: col = (static_cast<B_32_RN_NEO_4*>(busPtr))->GetPixelColor(pix); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_NEO_4: col = (static_cast<B_32_I0_NEO_4*>(busPtr))->GetPixelColor(pix); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_NEO_4: col = (static_cast<B_32_I1_NEO_4*>(busPtr))->GetPixelColor(pix); break;
#endif
case I_32_RN_400_3: col = (static_cast<B_32_RN_400_3*>(busPtr))->GetPixelColor(pix); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_400_3: col = (static_cast<B_32_I0_400_3*>(busPtr))->GetPixelColor(pix); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_400_3: col = (static_cast<B_32_I1_400_3*>(busPtr))->GetPixelColor(pix); break;
#endif
case I_32_RN_TM1_4: col = (static_cast<B_32_RN_TM1_4*>(busPtr))->GetPixelColor(pix); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_TM1_4: col = (static_cast<B_32_I0_TM1_4*>(busPtr))->GetPixelColor(pix); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_TM1_4: col = (static_cast<B_32_I1_TM1_4*>(busPtr))->GetPixelColor(pix); break;
#endif
#endif
@ -602,23 +666,31 @@ class PolyBus {
#endif
#ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: delete (static_cast<B_32_RN_NEO_3*>(busPtr)); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_NEO_3: delete (static_cast<B_32_I0_NEO_3*>(busPtr)); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_NEO_3: delete (static_cast<B_32_I1_NEO_3*>(busPtr)); break;
#endif
case I_32_RN_NEO_4: delete (static_cast<B_32_RN_NEO_4*>(busPtr)); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_NEO_4: delete (static_cast<B_32_I0_NEO_4*>(busPtr)); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_NEO_4: delete (static_cast<B_32_I1_NEO_4*>(busPtr)); break;
#endif
case I_32_RN_400_3: delete (static_cast<B_32_RN_400_3*>(busPtr)); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_400_3: delete (static_cast<B_32_I0_400_3*>(busPtr)); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_400_3: delete (static_cast<B_32_I1_400_3*>(busPtr)); break;
#endif
case I_32_RN_TM1_4: delete (static_cast<B_32_RN_TM1_4*>(busPtr)); break;
#ifndef CONFIG_IDF_TARGET_ESP32C3
case I_32_I0_TM1_4: delete (static_cast<B_32_I0_TM1_4*>(busPtr)); break;
#ifndef CONFIG_IDF_TARGET_ESP32S2
#endif
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
case I_32_I1_TM1_4: delete (static_cast<B_32_I1_TM1_4*>(busPtr)); break;
#endif
#endif

View File

@ -85,7 +85,7 @@ bool isButtonPressed(uint8_t i)
if (digitalRead(btnPin[i]) == HIGH) return true;
break;
case BTN_TYPE_TOUCH:
#ifdef ARDUINO_ARCH_ESP32
#if defined(ARDUINO_ARCH_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32C3)
if (touchRead(btnPin[i]) <= touchThreshold) return true;
#endif
break;

View File

@ -1760,7 +1760,7 @@ function setSeg(s)
var name = gId(`seg${s}t`).value;
var start = parseInt(gId(`seg${s}s`).value);
var stop = parseInt(gId(`seg${s}e`).value);
if (stop == 0) {delSeg(s); return;}
if (stop <= start) {delSeg(s); return;}
var obj = {"seg": {"id": s, "n": name, "start": start, "stop": (cfg.comp.seglen?start:0)+stop}};
if (gId(`seg${s}grp`)) {
var grp = parseInt(gId(`seg${s}grp`).value);

View File

@ -89,7 +89,7 @@
<a href="https://github.com/Aircoookie/WLED/" target="_blank">WLED</a> version ##VERSION##<!-- Autoreplaced from package.json --><br><br>
<a href="https://github.com/Aircoookie/WLED/wiki/Contributors-and-credits" target="_blank">Contributors, dependencies and special thanks</a><br>
A huge thank you to everyone who helped me create WLED!<br><br>
(c) 2016-2021 Christian Schwinne <br>
(c) 2016-2022 Christian Schwinne <br>
<i>Licensed under the <a href="https://github.com/Aircoookie/WLED/blob/master/LICENSE" target="_blank">MIT license</a></i><br><br>
Server message: <span class="sip"> Response error! </span><hr>
<div id="toast"></div>

View File

@ -5,7 +5,7 @@
*/
#ifdef ARDUINO_ARCH_ESP32 //FS info bare IDF function until FS wrapper is available for ESP32
#if WLED_FS != LITTLEFS
#if WLED_FS != LITTLEFS && ESP_IDF_VERSION_MAJOR < 4
#include "esp_spiffs.h"
#endif
#endif
@ -359,9 +359,9 @@ bool readObjectFromFile(const char* file, const char* key, JsonDocument* dest)
void updateFSInfo() {
#ifdef ARDUINO_ARCH_ESP32
#if WLED_FS == LITTLEFS
fsBytesTotal = LITTLEFS.totalBytes();
fsBytesUsed = LITTLEFS.usedBytes();
#if WLED_FS == LITTLEFS || ESP_IDF_VERSION_MAJOR >= 4
fsBytesTotal = WLED_FS.totalBytes();
fsBytesUsed = WLED_FS.usedBytes();
#else
esp_spiffs_info(nullptr, &fsBytesTotal, &fsBytesUsed);
#endif

View File

@ -66,7 +66,7 @@ const uint8_t PAGE_settingsCss[] PROGMEM = {
const char PAGE_settings[] PROGMEM = R"=====(<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta
content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"
name="viewport"><title>WLED Settings</title><style>
body{text-align:center;background:#222;height:100px;margin:0}html{--h:10.2vh}button{background:#333;color:#fff;font-family:Verdana,Helvetica,sans-serif;display:inline-block;border:1px solid #333;border-radius:var(--h);font-size:6vmin;height:var(--h);width:calc(100%% - 40px);margin-top:2vh}
body{text-align:center;background:#222;height:100px;margin:0}html{--h:10.2vh}button{background:#333;color:#fff;font-family:Verdana,Helvetica,sans-serif;display:inline-block;border:1px solid #333;border-radius:var(--h);font-size:6vmin;height:var(--h);width:calc(100%%% - 40px);margin-top:2vh}
</style></head><body><form action="/"><button type="submit" id="b">Back</button>
</form><form action="/settings/wifi"><button type="submit">WiFi Setup</button>
</form><form action="/settings/leds"><button type="submit">LED Preferences
@ -74,7 +74,7 @@ body{text-align:center;background:#222;height:100px;margin:0}html{--h:10.2vh}but
</button></form>%DMXMENU%<form action="/settings/sync"><button type="submit">
Sync Interfaces</button></form><form action="/settings/time"><button
type="submit">Time & Macros</button></form><form action="/settings/um"><button
type="submit">Usermods</button></form><form action="/settings/sec"><button
type="submit">Usermods</button></form>%DMXMENU%<form action="/settings/sec"><button
type="submit">Security & Updates</button></form></body></html>)=====";
@ -1235,118 +1235,118 @@ const uint8_t PAGE_settings_time[] PROGMEM = {
const uint16_t PAGE_settings_sec_length = 1801;
const uint8_t PAGE_settings_sec[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x95, 0x57, 0x6d, 0x6f, 0xdb, 0x38,
0x12, 0xfe, 0xae, 0x5f, 0xc1, 0xb0, 0x40, 0xd7, 0x06, 0x6c, 0x29, 0x71, 0xef, 0x8a, 0x6e, 0x62,
0xa9, 0x97, 0x34, 0xce, 0x25, 0x40, 0xb2, 0x09, 0x62, 0x77, 0x7b, 0x87, 0xc3, 0xa1, 0xa0, 0xa5,
0x91, 0xc5, 0xb5, 0x4c, 0x6a, 0x49, 0xca, 0xae, 0x51, 0xf4, 0xbf, 0xdf, 0x0c, 0x25, 0x39, 0x76,
0xda, 0x45, 0xae, 0x1f, 0xf2, 0x22, 0x8a, 0xf3, 0xf6, 0xcc, 0xcc, 0x33, 0xa3, 0xf1, 0xd1, 0xe5,
0xfd, 0x87, 0xd9, 0xbf, 0x1f, 0x26, 0xac, 0x70, 0xab, 0x32, 0x19, 0xd3, 0x6f, 0x56, 0x0a, 0xb5,
0x88, 0x39, 0x28, 0x8e, 0xcf, 0x20, 0xb2, 0x64, 0xbc, 0x02, 0x27, 0x98, 0x12, 0x2b, 0x88, 0xf9,
0x5a, 0xc2, 0xa6, 0xd2, 0xc6, 0x71, 0x96, 0x6a, 0xe5, 0x40, 0xb9, 0x98, 0x6f, 0x64, 0xe6, 0x8a,
0xf8, 0xef, 0xc7, 0xc7, 0x3c, 0x09, 0x9a, 0xab, 0xc1, 0xb3, 0x77, 0x19, 0xac, 0x65, 0x0a, 0x43,
0xff, 0x30, 0x90, 0x4a, 0x3a, 0x29, 0xca, 0xa1, 0x4d, 0x45, 0x09, 0xf1, 0xc9, 0x60, 0x25, 0xbe,
0xc8, 0x55, 0xbd, 0xda, 0x3d, 0xd7, 0x16, 0x8c, 0x7f, 0x10, 0x73, 0x7c, 0x56, 0x9a, 0xb3, 0xe0,
0x99, 0xe9, 0xd6, 0xa1, 0xb4, 0x10, 0xc6, 0x02, 0x1a, 0xa9, 0x5d, 0x3e, 0x7c, 0x87, 0xa7, 0x4e,
0xba, 0x12, 0x92, 0x3b, 0x69, 0x53, 0x36, 0x05, 0xe7, 0xa4, 0x5a, 0xd8, 0x71, 0xd4, 0x1c, 0x8e,
0x6d, 0x6a, 0x64, 0xe5, 0x92, 0x60, 0x2d, 0x0c, 0x73, 0x72, 0x05, 0xba, 0x76, 0x83, 0x2c, 0xce,
0x74, 0x5a, 0xaf, 0xd0, 0xd1, 0xb3, 0xbc, 0x56, 0xa9, 0x93, 0x5a, 0xb1, 0xeb, 0x5e, 0xff, 0xeb,
0x46, 0xaa, 0x4c, 0x6f, 0x42, 0x5d, 0x81, 0xea, 0xf1, 0xc2, 0xb9, 0xca, 0x9e, 0x46, 0xd1, 0x52,
0xe9, 0x70, 0x53, 0x42, 0x16, 0x2e, 0x20, 0xca, 0x41, 0xb8, 0xda, 0x80, 0x8d, 0x6c, 0x6b, 0x26,
0x7a, 0x65, 0x21, 0xad, 0x8d, 0x74, 0xdb, 0x61, 0x77, 0xc4, 0xfb, 0xdf, 0x76, 0x4a, 0x2f, 0x9e,
0x2b, 0xdd, 0x09, 0xf2, 0x01, 0xff, 0x6c, 0xa1, 0xcc, 0xf7, 0x6f, 0x7f, 0xfc, 0xee, 0x76, 0x5d,
0x65, 0xc2, 0xc1, 0x8f, 0xee, 0x2e, 0x6e, 0xb2, 0x9e, 0xeb, 0x7f, 0x35, 0x80, 0xfe, 0x28, 0x46,
0xce, 0xb9, 0x49, 0x09, 0x14, 0xd2, 0xc5, 0xd6, 0xbf, 0x7a, 0xba, 0x2a, 0xed, 0xfd, 0xfc, 0x0f,
0x48, 0xdd, 0xde, 0x7d, 0xf7, 0xfa, 0x35, 0xd7, 0xfe, 0x90, 0xc7, 0xb1, 0xdb, 0x56, 0xa0, 0x73,
0x3a, 0x3b, 0x3a, 0x37, 0x46, 0x6c, 0x43, 0x69, 0xfd, 0xdf, 0x03, 0x25, 0xb6, 0xd0, 0x9b, 0x99,
0x16, 0x16, 0xb5, 0x0c, 0x20, 0x3e, 0x3a, 0xe9, 0x7f, 0x25, 0x40, 0x55, 0x4c, 0x7e, 0x70, 0x47,
0x2f, 0x78, 0xff, 0x4c, 0x85, 0x52, 0x29, 0x30, 0xd7, 0xb3, 0xbb, 0xdb, 0xd8, 0x0d, 0x54, 0x98,
0x96, 0xc2, 0xda, 0x5b, 0x69, 0x5d, 0x28, 0xb2, 0xac, 0x07, 0xef, 0x39, 0x18, 0xa3, 0x0d, 0x3f,
0xe5, 0xa4, 0x8d, 0xf7, 0x07, 0x69, 0x09, 0xc2, 0xcc, 0x9a, 0xa4, 0xf4, 0xda, 0xe4, 0xf4, 0x51,
0xce, 0xba, 0x6d, 0x09, 0xa1, 0x50, 0x72, 0x25, 0xc8, 0x78, 0xcc, 0x95, 0x56, 0x88, 0x42, 0x7b,
0x23, 0x46, 0x0c, 0x3b, 0xa1, 0x5e, 0xe7, 0x20, 0x42, 0xb7, 0x6f, 0xcf, 0xc0, 0x4a, 0xaf, 0xa1,
0xd7, 0x1a, 0xfa, 0xd6, 0x1f, 0x8c, 0x7e, 0x3d, 0x3e, 0xde, 0x0b, 0xa7, 0xae, 0x4a, 0x2d, 0xb2,
0x2b, 0x59, 0x02, 0xc5, 0xd3, 0x05, 0xa3, 0x60, 0xc3, 0xfe, 0x75, 0x77, 0x7b, 0x8d, 0x99, 0x7f,
0x84, 0x3f, 0x6b, 0xb0, 0x0e, 0x43, 0x42, 0xd7, 0x27, 0x6b, 0xc4, 0x95, 0xf4, 0x02, 0x46, 0xd7,
0xe3, 0x24, 0xca, 0x07, 0xfb, 0xa6, 0xf7, 0xd0, 0x29, 0xa4, 0x45, 0xeb, 0xb6, 0xd2, 0xca, 0xc2,
0x0c, 0xbe, 0xb8, 0x81, 0x3f, 0xb1, 0x0e, 0x0b, 0xc7, 0x26, 0xf1, 0xdf, 0xc8, 0x8b, 0x3e, 0xc5,
0xf8, 0xbd, 0xda, 0x06, 0x9c, 0x3d, 0xbd, 0xee, 0x40, 0x31, 0xe9, 0x48, 0x97, 0x83, 0xa3, 0x4e,
0x41, 0x53, 0x22, 0x0f, 0xf7, 0xd3, 0x19, 0xd6, 0x47, 0xd4, 0x04, 0x84, 0x39, 0xa0, 0x48, 0xb4,
0x8f, 0xe4, 0x4a, 0x9b, 0xd5, 0xa5, 0x70, 0xe2, 0xac, 0x4d, 0xba, 0x0e, 0x45, 0x85, 0x32, 0x98,
0x2f, 0x2c, 0x2a, 0x81, 0x70, 0x86, 0x39, 0xc6, 0x6f, 0xff, 0x73, 0xfc, 0x5f, 0x44, 0x80, 0x50,
0xa7, 0x77, 0xba, 0x8f, 0xe7, 0x6b, 0x51, 0xd6, 0xd8, 0x77, 0x7c, 0x70, 0x74, 0xf2, 0x2d, 0x18,
0x47, 0x6d, 0x0b, 0xb5, 0xad, 0xc4, 0xac, 0x49, 0x63, 0xde, 0xd5, 0x71, 0xf8, 0x87, 0x7d, 0x5f,
0xc5, 0x6f, 0xb1, 0x09, 0x9f, 0xae, 0x51, 0xf6, 0x92, 0x7f, 0xc8, 0x15, 0xf5, 0x2c, 0xab, 0x4d,
0x89, 0x69, 0xf0, 0x09, 0x4d, 0x2d, 0x36, 0xc7, 0x19, 0x29, 0xf4, 0x37, 0xc6, 0x51, 0x43, 0x32,
0x73, 0x9d, 0x6d, 0x99, 0x56, 0xe4, 0x7f, 0xcc, 0xff, 0x09, 0xee, 0xf7, 0x5e, 0x1f, 0xd5, 0xe5,
0xe8, 0x3d, 0x93, 0x78, 0x42, 0xff, 0x7c, 0xb6, 0xbc, 0xa5, 0xa1, 0x69, 0xce, 0x19, 0x92, 0x40,
0xa1, 0xf1, 0x4d, 0xa5, 0xb1, 0xea, 0x90, 0x7a, 0x32, 0xb9, 0x66, 0x3e, 0xf5, 0x31, 0x56, 0x62,
0x65, 0x30, 0xe3, 0xc9, 0xfe, 0x59, 0x01, 0x65, 0x75, 0x81, 0x47, 0xf3, 0xda, 0x39, 0x4c, 0x3d,
0x95, 0x7b, 0xcc, 0x9b, 0x07, 0x8e, 0x76, 0xd3, 0x52, 0xa6, 0xcb, 0x98, 0x5f, 0x93, 0xd5, 0xf7,
0xe8, 0x5c, 0xf3, 0x06, 0xbd, 0x43, 0x15, 0x2f, 0x09, 0x5d, 0x90, 0xd0, 0x05, 0xa6, 0xe5, 0x49,
0xac, 0x15, 0x08, 0x1a, 0x09, 0x5b, 0xcf, 0x57, 0x12, 0x9d, 0x9c, 0x8a, 0x35, 0xb0, 0xd7, 0xec,
0x11, 0xe6, 0x5a, 0xbb, 0xa7, 0xcb, 0x85, 0xe9, 0xec, 0x14, 0xa3, 0x64, 0xda, 0x32, 0x09, 0xde,
0xfb, 0xe8, 0xfb, 0x9e, 0x21, 0xc8, 0x75, 0x85, 0x30, 0x8d, 0x92, 0xe0, 0x56, 0xa7, 0x4b, 0xb6,
0x91, 0x06, 0x30, 0x63, 0x96, 0xf5, 0xee, 0x67, 0xe7, 0x7d, 0x66, 0x75, 0xee, 0x36, 0xc2, 0x00,
0x6b, 0x68, 0xe2, 0x94, 0x8d, 0xa5, 0xaa, 0x6a, 0xd7, 0x3a, 0x9b, 0x16, 0x90, 0x2e, 0xe7, 0xfa,
0x4b, 0x87, 0xdc, 0x6f, 0xf7, 0x84, 0x81, 0x49, 0x82, 0x07, 0x44, 0xa5, 0x2a, 0x8c, 0xb0, 0xcf,
0x25, 0x2a, 0x7c, 0xb1, 0xd1, 0x26, 0xeb, 0x24, 0xee, 0x1f, 0x10, 0x6b, 0xf1, 0xa5, 0x04, 0xb5,
0x40, 0x2e, 0xe7, 0x6f, 0x46, 0xad, 0x82, 0x99, 0x66, 0xa0, 0x88, 0xa4, 0x19, 0xba, 0x31, 0x60,
0x98, 0x20, 0xd6, 0xb1, 0x20, 0x33, 0x20, 0x2c, 0x96, 0x3e, 0xdb, 0xea, 0x9a, 0x29, 0x80, 0x8c,
0x39, 0xcd, 0x44, 0x69, 0x49, 0xc2, 0x01, 0x32, 0x70, 0x01, 0x38, 0x3f, 0x8c, 0x41, 0xe6, 0x61,
0x9d, 0xb9, 0xa3, 0x80, 0xb4, 0xce, 0xf0, 0x4d, 0x77, 0x42, 0x6c, 0x53, 0x97, 0x19, 0x9b, 0x03,
0x71, 0xbd, 0x5a, 0xa0, 0x9a, 0x4d, 0x01, 0x8a, 0xcc, 0x21, 0x9b, 0xb5, 0xc6, 0xb3, 0x90, 0xc4,
0xc6, 0xf3, 0x24, 0xb8, 0x94, 0xb6, 0xf3, 0xa6, 0xb9, 0xa7, 0xb4, 0x63, 0x12, 0x9b, 0xdc, 0xc2,
0x80, 0x69, 0x34, 0x69, 0x36, 0xd2, 0x02, 0x13, 0x8a, 0x09, 0x47, 0x3d, 0x84, 0x7e, 0xa4, 0xf8,
0x60, 0x20, 0xc7, 0x02, 0x29, 0x58, 0x33, 0xa4, 0x76, 0x68, 0x1e, 0x51, 0x0d, 0xf8, 0x40, 0xc7,
0x32, 0xe9, 0xc6, 0x09, 0xa3, 0x1a, 0xc0, 0x46, 0x46, 0x17, 0x17, 0xa8, 0x09, 0x31, 0xc7, 0x82,
0xdd, 0x36, 0xde, 0x79, 0xdb, 0x32, 0xf7, 0xe6, 0x4b, 0x4a, 0x13, 0x5e, 0xcb, 0x1a, 0x97, 0xb2,
0xa3, 0x71, 0x24, 0x13, 0x1f, 0xdf, 0x25, 0xa8, 0x2d, 0x13, 0x69, 0x4a, 0xe9, 0x43, 0x4c, 0x3e,
0xc9, 0x2b, 0xc9, 0xba, 0x26, 0x22, 0x69, 0x92, 0x84, 0xec, 0x85, 0x1c, 0xde, 0x7f, 0xe2, 0x8d,
0x36, 0xfa, 0xb9, 0x12, 0xa9, 0xd3, 0x86, 0x20, 0x47, 0x3d, 0x2f, 0x08, 0x3e, 0x4e, 0xdb, 0xdc,
0x9d, 0x97, 0xe5, 0x93, 0x59, 0xa1, 0x32, 0x56, 0x79, 0x71, 0x8b, 0xb5, 0x85, 0x6f, 0x10, 0x70,
0xa0, 0xc2, 0xe8, 0xb0, 0x45, 0x81, 0xeb, 0xd9, 0xec, 0x81, 0x39, 0x23, 0xf2, 0x5c, 0xa6, 0x14,
0x59, 0xad, 0x40, 0xa5, 0x66, 0x5b, 0x39, 0xbc, 0xc4, 0xce, 0xf7, 0x20, 0x95, 0xca, 0x67, 0xd7,
0xa2, 0x3d, 0xcc, 0xbc, 0xc3, 0x3c, 0x2e, 0x3d, 0xcc, 0x92, 0x12, 0x9f, 0x02, 0x12, 0x87, 0x6f,
0x69, 0xe2, 0x1e, 0x84, 0x98, 0x2a, 0xbf, 0x78, 0x93, 0x4c, 0xbb, 0x12, 0x6e, 0x2a, 0x1e, 0x6b,
0xfd, 0xcd, 0x4b, 0x3d, 0xf7, 0x91, 0x7a, 0x2e, 0xb8, 0x13, 0xaa, 0x16, 0xa5, 0xc7, 0xbc, 0x13,
0xdd, 0x75, 0xa0, 0x49, 0x26, 0x4d, 0x79, 0x9e, 0x9b, 0xac, 0x96, 0x4a, 0xe3, 0xa5, 0xbf, 0x84,
0xa7, 0x5d, 0x31, 0xce, 0xdb, 0xe6, 0x20, 0x9f, 0xa8, 0x9f, 0xeb, 0xca, 0x77, 0xab, 0x45, 0x80,
0x5b, 0xa7, 0x44, 0x47, 0x27, 0x73, 0xa7, 0x58, 0xa9, 0x96, 0x28, 0x5a, 0x60, 0x05, 0xc5, 0x3c,
0x6a, 0x11, 0x44, 0x26, 0xd4, 0xea, 0x3d, 0x0e, 0x6f, 0xcf, 0x64, 0x9c, 0x39, 0x61, 0x16, 0xb4,
0xa4, 0x74, 0x27, 0xc3, 0xdc, 0xa0, 0x29, 0xde, 0xa9, 0x6f, 0xa5, 0xc6, 0x91, 0x68, 0x70, 0x26,
0xc6, 0x4a, 0x5a, 0x8b, 0xbb, 0x97, 0xbe, 0x08, 0xf7, 0xfc, 0x26, 0xc2, 0xee, 0x52, 0xea, 0x49,
0x12, 0xfe, 0xae, 0x5f, 0x41, 0xb3, 0x40, 0xd7, 0x06, 0x6c, 0x29, 0x71, 0xef, 0x8a, 0x6e, 0x62,
0xa9, 0xe7, 0x34, 0xce, 0x25, 0x40, 0xb2, 0x09, 0x62, 0x77, 0x7b, 0x87, 0xc3, 0xa1, 0xa0, 0xa5,
0x91, 0xc5, 0xb5, 0x4c, 0x6a, 0x49, 0x2a, 0xae, 0x51, 0xf4, 0xbf, 0xdf, 0x0c, 0x25, 0x25, 0x76,
0xda, 0x45, 0xae, 0x1f, 0xf2, 0x22, 0x8a, 0xf3, 0xf6, 0xcc, 0xcc, 0x33, 0xa3, 0x49, 0xef, 0xfc,
0xf6, 0xc3, 0xe2, 0xdf, 0x77, 0x33, 0x56, 0xb8, 0x4d, 0x99, 0x4c, 0xe8, 0x37, 0x2b, 0x85, 0x5a,
0xc5, 0x1c, 0x14, 0xc7, 0x67, 0x10, 0x59, 0x32, 0xd9, 0x80, 0x13, 0x4c, 0x89, 0x0d, 0xc4, 0xfc,
0x41, 0xc2, 0xb6, 0xd2, 0xc6, 0x71, 0x96, 0x6a, 0xe5, 0x40, 0xb9, 0x98, 0x6f, 0x65, 0xe6, 0x8a,
0xf8, 0xef, 0x47, 0x47, 0x3c, 0x09, 0x9a, 0xab, 0xc1, 0xb3, 0x77, 0x19, 0x3c, 0xc8, 0x14, 0x46,
0xfe, 0x61, 0x28, 0x95, 0x74, 0x52, 0x94, 0x23, 0x9b, 0x8a, 0x12, 0xe2, 0xe3, 0xe1, 0x46, 0x7c,
0x91, 0x9b, 0x7a, 0xf3, 0xf8, 0x5c, 0x5b, 0x30, 0xfe, 0x41, 0x2c, 0xf1, 0x59, 0x69, 0xce, 0x82,
0x67, 0xa6, 0x5b, 0x87, 0xd2, 0x42, 0x18, 0x0b, 0x68, 0xa4, 0x76, 0xf9, 0xe8, 0x1d, 0x9e, 0x3a,
0xe9, 0x4a, 0x48, 0x6e, 0xa4, 0x4d, 0xd9, 0x1c, 0x9c, 0x93, 0x6a, 0x65, 0x27, 0x51, 0x73, 0x38,
0xb1, 0xa9, 0x91, 0x95, 0x4b, 0x82, 0x07, 0x61, 0x98, 0x93, 0x1b, 0xd0, 0xb5, 0x1b, 0x66, 0x71,
0xa6, 0xd3, 0x7a, 0x83, 0x8e, 0x9e, 0xe6, 0xb5, 0x4a, 0x9d, 0xd4, 0x8a, 0x5d, 0xf6, 0x07, 0x5f,
0xb7, 0x52, 0x65, 0x7a, 0x1b, 0xea, 0x0a, 0x54, 0x9f, 0x17, 0xce, 0x55, 0xf6, 0x24, 0x8a, 0xd6,
0x4a, 0x87, 0xdb, 0x12, 0xb2, 0x70, 0x05, 0x51, 0x0e, 0xc2, 0xd5, 0x06, 0x6c, 0x64, 0x5b, 0x33,
0xd1, 0x2b, 0x0b, 0x69, 0x6d, 0xa4, 0xdb, 0x8d, 0xba, 0x23, 0x3e, 0xf8, 0xf6, 0xa8, 0xf4, 0xec,
0xb9, 0xd2, 0x47, 0x41, 0x3e, 0xe4, 0x9f, 0x2d, 0x94, 0xf9, 0xfe, 0xed, 0x8f, 0xdf, 0xdd, 0xae,
0xab, 0x4c, 0x38, 0xf8, 0xd1, 0xdd, 0xd5, 0x55, 0xd6, 0x77, 0x83, 0xaf, 0x06, 0xd0, 0x1f, 0xc5,
0xc8, 0x39, 0x37, 0x2b, 0x81, 0x42, 0x3a, 0xdb, 0xf9, 0x57, 0x4f, 0x57, 0xa5, 0xbd, 0x5d, 0xfe,
0x01, 0xa9, 0xdb, 0xbb, 0xef, 0x5e, 0xbf, 0xe6, 0xda, 0x1f, 0xf2, 0x38, 0x76, 0xbb, 0x0a, 0x74,
0x4e, 0x67, 0xbd, 0xa9, 0x31, 0x62, 0x17, 0x4a, 0xeb, 0xff, 0x1e, 0x28, 0xb1, 0x85, 0xde, 0x2e,
0xb4, 0xb0, 0xa8, 0x65, 0x08, 0x71, 0xef, 0x78, 0xf0, 0x95, 0x00, 0x55, 0x31, 0xf9, 0xc1, 0x1d,
0xbd, 0xe0, 0x83, 0x53, 0x15, 0x4a, 0xa5, 0xc0, 0x5c, 0x2e, 0x6e, 0xae, 0x63, 0x37, 0x54, 0x61,
0x5a, 0x0a, 0x6b, 0xaf, 0xa5, 0x75, 0xa1, 0xc8, 0xb2, 0x3e, 0xbc, 0xe7, 0x60, 0x8c, 0x36, 0xfc,
0x84, 0x93, 0x36, 0x3e, 0x18, 0xa6, 0x25, 0x08, 0xb3, 0x68, 0x92, 0xd2, 0x6f, 0x93, 0x33, 0x40,
0x39, 0xeb, 0x76, 0x25, 0x84, 0x42, 0xc9, 0x8d, 0x20, 0xe3, 0x31, 0x57, 0x5a, 0x21, 0x0a, 0xed,
0x8d, 0x18, 0x31, 0xec, 0x84, 0xfa, 0x9d, 0x83, 0x08, 0xdd, 0xbe, 0x3d, 0x03, 0x1b, 0xfd, 0x00,
0xfd, 0xd6, 0xd0, 0xb7, 0xc1, 0x70, 0xfc, 0xeb, 0xd1, 0xd1, 0x5e, 0x38, 0x75, 0x55, 0x6a, 0x91,
0x5d, 0xc8, 0x12, 0x28, 0x9e, 0x2e, 0x18, 0x05, 0x5b, 0xf6, 0xaf, 0x9b, 0xeb, 0x4b, 0xcc, 0xfc,
0x3d, 0xfc, 0x59, 0x83, 0x75, 0x18, 0x12, 0xba, 0x3e, 0x7b, 0x40, 0x5c, 0x49, 0x2f, 0x60, 0x74,
0x7d, 0x4e, 0xa2, 0x7c, 0xb8, 0x6f, 0x7a, 0x0f, 0x9d, 0x42, 0x5a, 0xb4, 0x6e, 0x2b, 0xad, 0x2c,
0x2c, 0xe0, 0x8b, 0x1b, 0xfa, 0x13, 0xeb, 0xb0, 0x70, 0x6c, 0x12, 0xff, 0x8d, 0xbc, 0x18, 0x50,
0x8c, 0xdf, 0xab, 0x6d, 0xc0, 0xd9, 0xd3, 0xeb, 0x0e, 0x14, 0x93, 0x8e, 0x74, 0x3d, 0xec, 0x75,
0x0a, 0x9a, 0x12, 0xb9, 0xbb, 0x9d, 0x2f, 0xb0, 0x3e, 0xa2, 0x26, 0x20, 0xcc, 0x01, 0x45, 0xa2,
0x7d, 0x24, 0x17, 0xda, 0x6c, 0xce, 0x85, 0x13, 0xa7, 0x6d, 0xd2, 0x75, 0x28, 0x2a, 0x94, 0xc1,
0x7c, 0x61, 0x51, 0x09, 0x84, 0x33, 0xcc, 0x31, 0x7e, 0xfb, 0x9f, 0xa3, 0xff, 0x22, 0x02, 0x84,
0x3a, 0xbd, 0xd3, 0x03, 0x3c, 0x7f, 0x10, 0x65, 0x8d, 0x7d, 0xc7, 0x87, 0xbd, 0xe3, 0x6f, 0xc1,
0x24, 0x6a, 0x5b, 0xa8, 0x6d, 0x25, 0x66, 0x4d, 0x1a, 0xf3, 0xae, 0x8e, 0xc3, 0x3f, 0xec, 0xfb,
0x2a, 0x7e, 0x8b, 0x4d, 0xf8, 0x74, 0x8d, 0xb2, 0x97, 0xfc, 0x43, 0x6e, 0xa8, 0x67, 0x59, 0x6d,
0x4a, 0x4c, 0x83, 0x4f, 0x68, 0x6a, 0xb1, 0x39, 0x4e, 0x49, 0xa1, 0xbf, 0x31, 0x89, 0x1a, 0x92,
0x59, 0xea, 0x6c, 0xc7, 0xb4, 0x22, 0xff, 0x63, 0xfe, 0x4f, 0x70, 0xbf, 0xf7, 0x07, 0xa8, 0x2e,
0x47, 0xef, 0x99, 0xc4, 0x13, 0xfa, 0xe7, 0xb3, 0xe5, 0x2d, 0x0d, 0xcd, 0x73, 0xce, 0x90, 0x04,
0x0a, 0x8d, 0x6f, 0x2a, 0x8d, 0x55, 0x87, 0xd4, 0x93, 0xc9, 0x07, 0xe6, 0x53, 0x1f, 0x63, 0x25,
0x56, 0x06, 0x33, 0x9e, 0xec, 0x9f, 0x15, 0x50, 0x56, 0x67, 0x78, 0xb4, 0xac, 0x9d, 0xc3, 0xd4,
0x53, 0xb9, 0xc7, 0xbc, 0x79, 0xe0, 0x68, 0x37, 0x2d, 0x65, 0xba, 0x8e, 0xf9, 0x25, 0x59, 0x7d,
0x8f, 0xce, 0x35, 0x6f, 0xd0, 0x3b, 0x54, 0xf1, 0x92, 0xd0, 0x19, 0x09, 0x9d, 0x61, 0x5a, 0x9e,
0xc4, 0x5a, 0x81, 0xa0, 0x91, 0xb0, 0xf5, 0x72, 0x23, 0xd1, 0xc9, 0xb9, 0x78, 0x00, 0xf6, 0x9a,
0xdd, 0xc3, 0x52, 0x6b, 0xf7, 0x74, 0xb9, 0x30, 0x9d, 0x9d, 0x62, 0x9c, 0xcc, 0x5b, 0x26, 0xc1,
0x7b, 0x1f, 0x7d, 0xdf, 0x33, 0x04, 0xb9, 0xae, 0x10, 0xa6, 0x71, 0x12, 0x5c, 0xeb, 0x74, 0xcd,
0xb6, 0xd2, 0x00, 0x66, 0xcc, 0xb2, 0xfe, 0xed, 0x62, 0x3a, 0x60, 0x56, 0xe7, 0x6e, 0x2b, 0x0c,
0xb0, 0x86, 0x26, 0x4e, 0xd8, 0x44, 0xaa, 0xaa, 0x76, 0xad, 0xb3, 0x69, 0x01, 0xe9, 0x7a, 0xa9,
0xbf, 0x74, 0xc8, 0xfd, 0x76, 0x4b, 0x18, 0x98, 0x24, 0xb8, 0x43, 0x54, 0xaa, 0xc2, 0x08, 0xfb,
0x5c, 0xa2, 0xc2, 0x17, 0x5b, 0x6d, 0xb2, 0x4e, 0xe2, 0xf6, 0x0e, 0xb1, 0x16, 0x5f, 0x4a, 0x50,
0x2b, 0xe4, 0x72, 0xfe, 0x66, 0xdc, 0x2a, 0x58, 0x68, 0x06, 0x8a, 0x48, 0x9a, 0xa1, 0x1b, 0x43,
0x86, 0x09, 0x62, 0x1d, 0x0b, 0x32, 0x03, 0xc2, 0x62, 0xe9, 0xb3, 0x9d, 0xae, 0x99, 0x02, 0xc8,
0x98, 0xd3, 0x4c, 0x94, 0x96, 0x24, 0x1c, 0x20, 0x03, 0x17, 0x80, 0xf3, 0xc3, 0x18, 0x64, 0x1e,
0xd6, 0x99, 0xeb, 0x05, 0xa4, 0x75, 0x81, 0x6f, 0xba, 0x13, 0x62, 0x9b, 0xba, 0xcc, 0xd8, 0x12,
0x88, 0xeb, 0xd5, 0x0a, 0xd5, 0x6c, 0x0b, 0x50, 0x64, 0x0e, 0xd9, 0xac, 0x35, 0x9e, 0x85, 0x24,
0x36, 0x59, 0x26, 0xc1, 0xb9, 0xb4, 0x9d, 0x37, 0xcd, 0x3d, 0xa5, 0x1d, 0x93, 0xd8, 0xe4, 0x16,
0x86, 0x4c, 0xa3, 0x49, 0xb3, 0x95, 0x16, 0x98, 0x50, 0x4c, 0x38, 0xea, 0x21, 0xf4, 0x23, 0xc5,
0x07, 0x03, 0x39, 0x16, 0x48, 0xc1, 0x9a, 0x21, 0xf5, 0x88, 0x66, 0x8f, 0x6a, 0xc0, 0x07, 0x3a,
0x91, 0x49, 0x37, 0x4e, 0x18, 0xd5, 0x00, 0x36, 0x32, 0xba, 0xb8, 0x42, 0x4d, 0x88, 0x39, 0x16,
0xec, 0xae, 0xf1, 0xce, 0xdb, 0x96, 0xb9, 0x37, 0x5f, 0x52, 0x9a, 0xf0, 0x5a, 0xd6, 0xb8, 0x94,
0xf5, 0x26, 0x91, 0x4c, 0x7c, 0x7c, 0xe7, 0xa0, 0x76, 0x4c, 0xa4, 0x29, 0xa5, 0x0f, 0x31, 0xf9,
0x24, 0x2f, 0x24, 0xeb, 0x9a, 0x88, 0xa4, 0x49, 0x12, 0xb2, 0x17, 0x72, 0x78, 0xfb, 0x89, 0x37,
0xda, 0xe8, 0xe7, 0x42, 0xa4, 0x4e, 0x1b, 0x82, 0x1c, 0xf5, 0xbc, 0x20, 0x78, 0x3f, 0x6f, 0x73,
0x37, 0x2d, 0xcb, 0x27, 0xb3, 0x42, 0x65, 0xac, 0xf2, 0xe2, 0x16, 0x6b, 0x0b, 0xdf, 0x20, 0xe0,
0x40, 0x85, 0xd1, 0x61, 0x8b, 0x02, 0x97, 0x8b, 0xc5, 0x1d, 0x73, 0x46, 0xe4, 0xb9, 0x4c, 0x29,
0xb2, 0x5a, 0x81, 0x4a, 0xcd, 0xae, 0x72, 0x78, 0x89, 0x4d, 0xf7, 0x20, 0x95, 0xca, 0x67, 0xd7,
0xa2, 0x3d, 0xcc, 0xbc, 0xc3, 0x3c, 0xae, 0x3d, 0xcc, 0x92, 0x12, 0x9f, 0x02, 0x12, 0x87, 0x6f,
0x69, 0xe2, 0x1e, 0x84, 0x98, 0x2a, 0xbf, 0x78, 0x93, 0xcc, 0xbb, 0x12, 0x6e, 0x2a, 0x1e, 0x6b,
0xfd, 0xcd, 0x4b, 0x3d, 0xf7, 0x91, 0x7a, 0x2e, 0xb8, 0x11, 0xaa, 0x16, 0xa5, 0xc7, 0xbc, 0x13,
0x7d, 0xec, 0x40, 0x93, 0xcc, 0x9a, 0xf2, 0x9c, 0x9a, 0xac, 0x96, 0x4a, 0xe3, 0xa5, 0xbf, 0x84,
0xa7, 0x5d, 0x31, 0xa6, 0x6d, 0x73, 0x90, 0x4f, 0xd4, 0xcf, 0x75, 0xe5, 0xbb, 0xd5, 0x22, 0xc0,
0xad, 0x53, 0xa2, 0xa3, 0x93, 0xa5, 0x53, 0xac, 0x54, 0x6b, 0x14, 0x2d, 0xb0, 0x82, 0x62, 0x1e,
0xb5, 0x08, 0x22, 0x13, 0x6a, 0xf5, 0x1e, 0x87, 0xb7, 0x67, 0x32, 0xce, 0x9c, 0x30, 0x2b, 0x5a,
0x52, 0xba, 0x93, 0x51, 0x6e, 0xd0, 0x14, 0xef, 0xd4, 0xb7, 0x52, 0x93, 0x48, 0x34, 0x38, 0x13,
0x63, 0x25, 0xad, 0xc5, 0xc7, 0x97, 0xbe, 0x08, 0xf7, 0xfc, 0x26, 0xc2, 0xee, 0x52, 0xea, 0x49,
0xdc, 0x57, 0x54, 0x85, 0x56, 0xbc, 0x75, 0x9e, 0x74, 0x61, 0x06, 0x87, 0xe0, 0xb5, 0x84, 0xfe,
0xb1, 0x19, 0x12, 0x3b, 0x2c, 0x7f, 0xd9, 0x1b, 0x83, 0x59, 0x38, 0xcd, 0x43, 0xd2, 0x39, 0x38,
0x8c, 0x88, 0xf7, 0x7f, 0x69, 0x4b, 0xae, 0x25, 0x44, 0xf3, 0x23, 0x2c, 0x5a, 0x28, 0xd2, 0x7c,
0xf1, 0x1c, 0x86, 0xe0, 0x05, 0x1c, 0x70, 0x63, 0xcc, 0xe5, 0xa2, 0x36, 0x7e, 0xd2, 0x77, 0x68,
0x1c, 0x80, 0x71, 0x70, 0x23, 0x78, 0x11, 0x93, 0xd1, 0x5f, 0x82, 0x72, 0x88, 0x49, 0xf0, 0x33,
0xa0, 0x8c, 0x06, 0x4f, 0xc1, 0x11, 0x22, 0x7b, 0x80, 0xd0, 0xa4, 0x09, 0xfc, 0x44, 0xc3, 0xba,
0xd2, 0xa5, 0x36, 0xa7, 0xaf, 0x72, 0x41, 0x2b, 0xf1, 0xeb, 0x57, 0xbf, 0xbe, 0x7b, 0xf7, 0xee,
0xac, 0x2d, 0x23, 0x6c, 0xb8, 0x2e, 0xad, 0xd1, 0x41, 0x44, 0x4d, 0xe7, 0xdd, 0xff, 0x3e, 0x79,
0xfc, 0xf4, 0x78, 0x33, 0x9b, 0x10, 0x73, 0x22, 0x3f, 0xd5, 0xc8, 0x91, 0xca, 0xfd, 0x58, 0x22,
0xf4, 0x20, 0x04, 0x37, 0xaa, 0x63, 0xd2, 0x43, 0x7d, 0x2b, 0x41, 0x9c, 0xf0, 0x67, 0x8d, 0xc3,
0x82, 0x09, 0x96, 0xef, 0xb3, 0x04, 0x43, 0xaa, 0x36, 0x30, 0xf4, 0xbc, 0x47, 0x0e, 0xe1, 0xda,
0xe7, 0xcd, 0x4d, 0xa6, 0x0f, 0xa8, 0xd4, 0xc7, 0x73, 0xf5, 0x03, 0x36, 0x1f, 0xec, 0x98, 0xd9,
0x7a, 0xee, 0x23, 0x7e, 0x9d, 0x53, 0xd7, 0x67, 0x38, 0x7a, 0x42, 0xea, 0x99, 0xf3, 0x39, 0x6e,
0x63, 0x5d, 0xa3, 0xb4, 0x8d, 0xd1, 0x2d, 0xd0, 0x0b, 0xe9, 0x8a, 0x7a, 0x1e, 0xa6, 0x7a, 0x15,
0x9d, 0x4b, 0x93, 0x6a, 0xad, 0x97, 0x12, 0xa2, 0x4f, 0xb7, 0x93, 0xcb, 0xe8, 0xa9, 0x4b, 0x3e,
0xcf, 0xf1, 0xe3, 0x63, 0xc9, 0x13, 0x3a, 0xa6, 0x2a, 0x08, 0xd8, 0x1a, 0x8c, 0xa5, 0x70, 0x8e,
0xc3, 0x93, 0x37, 0xe1, 0xc9, 0x70, 0x5e, 0xbe, 0xed, 0x38, 0xe9, 0xa7, 0x4c, 0x6c, 0xe4, 0x52,
0x46, 0x1f, 0xf0, 0xb3, 0xc4, 0x48, 0xcc, 0xbc, 0x36, 0x76, 0x88, 0xac, 0x37, 0x4c, 0x0d, 0x64,
0xd2, 0xd9, 0xbd, 0xf2, 0xec, 0x1c, 0xd8, 0xbf, 0x3a, 0xc0, 0xd9, 0x40, 0x1b, 0x13, 0x32, 0x9e,
0x84, 0x86, 0x2e, 0x6d, 0x05, 0x29, 0x7e, 0xc4, 0x20, 0xd5, 0xe1, 0xed, 0xa7, 0xee, 0x3d, 0x67,
0x45, 0x8d, 0x83, 0xc1, 0x9f, 0xfa, 0xd9, 0x87, 0x14, 0x0f, 0x18, 0xc1, 0x16, 0x17, 0x57, 0x9c,
0x49, 0x9a, 0xd1, 0x12, 0x82, 0x70, 0x21, 0x37, 0xa2, 0x69, 0x9a, 0xed, 0xe4, 0xdc, 0xd1, 0x8e,
0x65, 0x7b, 0x69, 0x9f, 0x8d, 0x8e, 0x4f, 0xde, 0x0e, 0x47, 0xc7, 0xa3, 0x13, 0xf6, 0xa1, 0x30,
0xb8, 0x15, 0x4a, 0x24, 0xcf, 0x69, 0x5a, 0x6c, 0x68, 0xa7, 0x6e, 0xc7, 0xd1, 0x2d, 0x0e, 0x2a,
0xdc, 0x2b, 0x11, 0x76, 0x74, 0xaa, 0x99, 0xa6, 0x3f, 0x05, 0xc6, 0xbc, 0xd4, 0xf3, 0x68, 0x85,
0xeb, 0x24, 0x98, 0xe8, 0xf6, 0xe6, 0xc3, 0xe4, 0xb7, 0xe9, 0xe4, 0xfb, 0x14, 0x04, 0x77, 0x37,
0x33, 0x56, 0x36, 0x96, 0x7c, 0x80, 0x38, 0xc2, 0x3a, 0x47, 0xa7, 0x60, 0x30, 0x2a, 0x0c, 0xc3,
0x5a, 0x1c, 0x84, 0xc8, 0xaa, 0xb6, 0x42, 0x2f, 0x5b, 0x36, 0xb0, 0xb2, 0xe2, 0xd4, 0xb5, 0x7e,
0xf7, 0x65, 0x7e, 0x9d, 0xa5, 0x61, 0x4a, 0x57, 0x9a, 0x55, 0x87, 0x5a, 0x85, 0x56, 0xba, 0xe6,
0x7b, 0xe1, 0x27, 0x57, 0xac, 0xe0, 0xbb, 0x1d, 0xeb, 0xff, 0x5a, 0xb1, 0x22, 0x9a, 0x3a, 0x88,
0x9d, 0x67, 0x9d, 0x8e, 0xee, 0x9f, 0x71, 0x11, 0x6b, 0xdb, 0x17, 0xa7, 0x76, 0x55, 0x8a, 0xed,
0xa9, 0xff, 0xdc, 0xa0, 0xb8, 0xfd, 0x6b, 0xfc, 0x87, 0x56, 0x54, 0xda, 0x57, 0xe9, 0x53, 0xf9,
0x7f, 0xd7, 0x61, 0x61, 0x82, 0x3a, 0x0f, 0x00, 0x00
0xb1, 0x19, 0x12, 0x8f, 0x58, 0xfe, 0xb2, 0x37, 0x06, 0xb3, 0x70, 0x9e, 0x87, 0xa4, 0x73, 0x78,
0x18, 0x11, 0x1f, 0xfc, 0xd2, 0x96, 0x5c, 0x4b, 0x88, 0xe6, 0x47, 0x58, 0xb4, 0x50, 0xa4, 0xf9,
0xea, 0x39, 0x0c, 0xc1, 0x0b, 0x38, 0xe0, 0xc6, 0x98, 0xcb, 0x55, 0x6d, 0xfc, 0xa4, 0xef, 0xd0,
0x38, 0x00, 0xe3, 0xe0, 0x46, 0xf0, 0x22, 0x26, 0xe3, 0xbf, 0x04, 0xe5, 0x10, 0x93, 0xe0, 0x67,
0x40, 0x19, 0x0f, 0x9f, 0x82, 0x23, 0x44, 0xf6, 0x00, 0xa1, 0x49, 0x13, 0xf8, 0x89, 0x86, 0x75,
0xa5, 0x4b, 0x6d, 0x4e, 0x5e, 0xe5, 0x82, 0x56, 0xe2, 0xd7, 0xaf, 0x7e, 0x7d, 0xf7, 0xee, 0xdd,
0x69, 0x5b, 0x46, 0xd8, 0x70, 0x5d, 0x5a, 0xa3, 0x83, 0x88, 0x9a, 0xce, 0xbb, 0xfd, 0x7d, 0x76,
0xff, 0xe9, 0xfe, 0x6a, 0x31, 0x23, 0xe6, 0x44, 0x7e, 0xaa, 0x91, 0x23, 0x95, 0xfb, 0xb1, 0x44,
0xe8, 0x41, 0x08, 0xae, 0x54, 0xc7, 0xa4, 0x87, 0xfa, 0x36, 0x82, 0x38, 0xe1, 0xcf, 0x1a, 0x87,
0x05, 0x13, 0x2c, 0xdf, 0x67, 0x09, 0x86, 0x54, 0x6d, 0x60, 0xe4, 0x79, 0x8f, 0x1c, 0xc2, 0xb5,
0xcf, 0x9b, 0x9b, 0xcd, 0xef, 0x50, 0xa9, 0x8f, 0xe7, 0xe2, 0x07, 0x6c, 0x3e, 0x7c, 0x64, 0x66,
0xeb, 0xb9, 0x8f, 0xf8, 0x75, 0x49, 0x5d, 0x9f, 0xe1, 0xe8, 0x09, 0xa9, 0x67, 0xa6, 0x4b, 0xdc,
0xc6, 0xba, 0x46, 0x69, 0x1b, 0xa3, 0x5b, 0xa0, 0x57, 0xd2, 0x15, 0xf5, 0x32, 0x4c, 0xf5, 0x26,
0x9a, 0x4a, 0x93, 0x6a, 0xad, 0xd7, 0x12, 0xa2, 0x4f, 0xd7, 0xb3, 0xf3, 0xe8, 0xa9, 0x4b, 0x3e,
0x2f, 0xf1, 0xe3, 0x63, 0xcd, 0x13, 0x3a, 0xa6, 0x2a, 0x08, 0xd8, 0x03, 0x18, 0x4b, 0xe1, 0x1c,
0x85, 0xc7, 0x6f, 0xc2, 0xe3, 0xd1, 0xb2, 0x7c, 0xdb, 0x71, 0xd2, 0x4f, 0x99, 0xd8, 0xca, 0xb5,
0x8c, 0x3e, 0xe0, 0x67, 0x89, 0x91, 0x98, 0x79, 0x6d, 0xec, 0x08, 0x59, 0x6f, 0x94, 0x1a, 0xc8,
0xa4, 0xb3, 0x7b, 0xe5, 0xd9, 0x39, 0xb0, 0x7f, 0x75, 0x88, 0xb3, 0x81, 0x36, 0x26, 0x64, 0x3c,
0x09, 0x0d, 0x5d, 0xda, 0x0a, 0x52, 0xfc, 0x88, 0x41, 0xaa, 0xc3, 0xdb, 0x4f, 0xdd, 0x3b, 0x65,
0x45, 0x8d, 0x83, 0xc1, 0x9f, 0xfa, 0xd9, 0x87, 0x14, 0x0f, 0x18, 0xc1, 0x0e, 0x17, 0x57, 0x9c,
0x49, 0x9a, 0xd1, 0x12, 0x82, 0x70, 0x21, 0x37, 0xa2, 0x69, 0x9a, 0xed, 0xe4, 0x5c, 0xef, 0x91,
0x65, 0xfb, 0xe9, 0x80, 0x8d, 0x8f, 0x8e, 0xdf, 0x8e, 0xc6, 0x47, 0xe3, 0x31, 0xfb, 0x50, 0x18,
0xdc, 0x0a, 0x25, 0x92, 0xe7, 0x3c, 0x2d, 0xb6, 0xb4, 0x53, 0xb7, 0xe3, 0xe8, 0x1a, 0x07, 0x15,
0xee, 0x95, 0x08, 0x3b, 0x3a, 0xd5, 0x4c, 0xd3, 0x9f, 0x02, 0x63, 0x59, 0xea, 0x65, 0xb4, 0xc1,
0x75, 0x12, 0x4c, 0x74, 0x7d, 0xf5, 0x61, 0xf6, 0xdb, 0x7c, 0xf6, 0x7d, 0x0a, 0x82, 0x9b, 0xab,
0x05, 0x2b, 0x1b, 0x4b, 0x3e, 0x40, 0x1c, 0x61, 0x9d, 0xa3, 0x73, 0x30, 0x18, 0x15, 0x86, 0x61,
0x2d, 0x0e, 0x42, 0x64, 0x55, 0x5b, 0xa1, 0x97, 0x2d, 0x1b, 0x58, 0x59, 0x71, 0xea, 0x5a, 0xbf,
0xfb, 0x32, 0xbf, 0xce, 0xd2, 0x30, 0xa5, 0x2b, 0xcd, 0xaa, 0x43, 0xad, 0x42, 0x2b, 0x5d, 0xf3,
0xbd, 0xf0, 0x93, 0x2b, 0x56, 0xf0, 0xdd, 0x8e, 0xf5, 0x7f, 0xad, 0x58, 0x11, 0x4d, 0x1d, 0xc4,
0xce, 0xb3, 0x4e, 0x47, 0xf7, 0xcf, 0xb8, 0x88, 0xb5, 0xed, 0x8b, 0x53, 0xbb, 0x2a, 0xc5, 0xee,
0xc4, 0x7f, 0x6e, 0x50, 0xdc, 0xfe, 0x35, 0xfe, 0x43, 0x2b, 0x2a, 0xed, 0xab, 0xf4, 0xa9, 0xfc,
0x3f, 0xb8, 0x50, 0x02, 0x1f, 0x3a, 0x0f, 0x00, 0x00
};

View File

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

View File

@ -22,7 +22,7 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
stop = (len > 0) ? start + len : seg.stop;
}
// multiply segment 0 (?) if requested untill all LEDs are used
//repeat, multiplies segment until all LEDs are used, or max segments reached
bool repeat = elem["rpt"] | false;
if (repeat && stop>0) {
elem.remove("id"); // remove for recursive call
@ -67,7 +67,7 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
uint16_t grp = elem["grp"] | seg.grouping;
uint16_t spc = elem[F("spc")] | seg.spacing;
uint16_t of = seg.offset;
uint16_t of = seg.offset;
if (!(elem[F("spc")].isNull() && elem["grp"].isNull())) effectChanged = true; //send UDP
uint16_t len = 1;
@ -80,7 +80,7 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
of = offsetAbs;
}
if (stop > start && of > len -1) of = len -1;
strip.setSegment(id, start, stop, grp, spc, of);
strip.setSegment(id, start, stop, grp, spc, of);
byte segbri = 0;
if (getVal(elem["bri"], &segbri)) {
@ -95,9 +95,9 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
if (elem["frz"].is<const char*>() && elem["frz"].as<const char*>()[0] == 't') frz = !seg.getOption(SEG_OPTION_FREEZE);
seg.setOption(SEG_OPTION_FREEZE, frz, id);
uint8_t cctPrev = seg.cct;
uint8_t cctPrev = seg.cct;
seg.setCCT(elem["cct"] | seg.cct, id);
if (seg.cct != cctPrev && id == strip.getMainSegmentId()) effectChanged = true; //send UDP
if (seg.cct != cctPrev && id == strip.getMainSegmentId()) effectChanged = true; //send UDP
JsonArray colarr = elem["col"];
if (!colarr.isNull())
@ -228,7 +228,7 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
return; // seg.differs(prev);
}
// deserializes WLED state (fileDoc points to doc object (root) if called from web server, MQTT, IR, preset; not from UDP)
// deserializes WLED state (fileDoc points to doc object if called from web server)
bool deserializeState(JsonObject root, byte callMode, byte presetId)
{
DEBUG_PRINTLN(F("Deserializing state"));
@ -388,12 +388,12 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId)
void serializeSegment(JsonObject& root, WS2812FX::Segment& seg, byte id, bool forPreset, bool segmentBounds)
{
root["id"] = id;
root["id"] = id;
if (segmentBounds) {
root["start"] = seg.start;
root["stop"] = seg.stop;
}
if (!forPreset) root[F("len")] = seg.stop - seg.start;
if (!forPreset) root[F("len")] = seg.stop - seg.start;
root["grp"] = seg.grouping;
root[F("spc")] = seg.spacing;
root[F("of")] = seg.offset;
@ -403,7 +403,7 @@ void serializeSegment(JsonObject& root, WS2812FX::Segment& seg, byte id, bool fo
root["bri"] = (segbri) ? segbri : 255;
root["cct"] = seg.cct;
if (segmentBounds && seg.name != nullptr) root["n"] = reinterpret_cast<const char *>(seg.name);
if (segmentBounds && seg.name != nullptr) root["n"] = reinterpret_cast<const char *>(seg.name); //not good practice, but decreases required JSON buffer
// to conserve RAM we will serialize the col array manually
// this will reduce RAM footprint from ~300 bytes to 84 bytes per segment
@ -428,12 +428,12 @@ void serializeSegment(JsonObject& root, WS2812FX::Segment& seg, byte id, bool fo
strcat_P(colstr, PSTR("]"));
root["col"] = serialized(colstr);
root["fx"] = seg.mode;
root[F("sx")] = seg.speed;
root[F("ix")] = seg.intensity;
root["pal"] = seg.palette;
root[F("sel")] = seg.isSelected();
root["rev"] = seg.getOption(SEG_OPTION_REVERSED);
root["fx"] = seg.mode;
root[F("sx")] = seg.speed;
root[F("ix")] = seg.intensity;
root["pal"] = seg.palette;
root[F("sel")] = seg.isSelected();
root["rev"] = seg.getOption(SEG_OPTION_REVERSED);
root[F("mi")] = seg.getOption(SEG_OPTION_MIRROR);
}
@ -447,7 +447,7 @@ void serializeState(JsonObject root, bool forPreset, bool includeBri, bool segme
}
if (!forPreset) {
if (errorFlag) {root[F("error")] = errorFlag; errorFlag = ERR_NONE;}
if (errorFlag) {root[F("error")] = errorFlag; errorFlag = ERR_NONE;} //prevent error message to persist on screen
root["ps"] = (currentPreset > 0) ? currentPreset : -1;
root[F("pl")] = currentPlaylist;
@ -501,12 +501,12 @@ void serializeInfo(JsonObject root)
leds[F("wv")] = false;
leds["cct"] = correctWB || strip.hasCCTBus();
switch (Bus::getAutoWhiteMode()) {
case RGBW_MODE_MANUAL_ONLY:
case RGBW_MODE_DUAL:
if (strip.isRgbw) leds[F("wv")] = true;
break;
}
switch (Bus::getAutoWhiteMode()) {
case RGBW_MODE_MANUAL_ONLY:
case RGBW_MODE_DUAL:
if (strip.isRgbw) leds[F("wv")] = true;
break;
}
JsonArray leds_pin = leds.createNestedArray("pin");
for (uint8_t s=0; s<busses.getNumBusses(); s++) {
@ -707,9 +707,6 @@ void serializePalettes(JsonObject root, AsyncWebServerRequest* request)
for (int i = start; i < end; i++) {
JsonArray curPalette = palettes.createNestedArray(String(i));
CRGB prim;
CRGB sec;
CRGB ter;
switch (i) {
case 0: //default palette
setPaletteColors(curPalette, PartyColors_p);

View File

@ -129,8 +129,8 @@ void colorUpdated(int callMode)
void updateInterfaces(uint8_t callMode)
{
lastInterfaceUpdate = millis();
sendDataWs();
lastInterfaceUpdate = millis();
if (callMode == CALL_MODE_WS_SEND) return;
#ifndef WLED_DISABLE_ALEXA

View File

@ -4,7 +4,7 @@
* UDP sync notifier / Realtime / Hyperion / TPM2.NET
*/
#define UDP_SEG_SIZE 22
#define UDP_SEG_SIZE 28
#define SEG_OFFSET (41+(MAX_NUM_SEGMENTS*UDP_SEG_SIZE))
#define WLEDPACKETSIZE (41+(MAX_NUM_SEGMENTS*UDP_SEG_SIZE)+0)
#define UDP_IN_MAXSIZE 1472
@ -19,7 +19,7 @@ void notify(byte callMode, bool followUp)
case CALL_MODE_INIT: return;
case CALL_MODE_DIRECT_CHANGE: if (!notifyDirect) return; break;
case CALL_MODE_BUTTON: if (!notifyButton) return; break;
case CALL_MODE_BUTTON_PRESET: if (!notifyButton) return; break;
case CALL_MODE_BUTTON_PRESET: if (!notifyButton) return; break;
case CALL_MODE_NIGHTLIGHT: if (!notifyDirect) return; break;
case CALL_MODE_HUE: if (!notifyHue) return; break;
case CALL_MODE_PRESET_CYCLE: if (!notifyDirect) return; break;
@ -28,7 +28,7 @@ void notify(byte callMode, bool followUp)
default: return;
}
byte udpOut[WLEDPACKETSIZE];
WS2812FX::Segment& mainseg = strip.getSegment(strip.getMainSegmentId());
WS2812FX::Segment& mainseg = strip.getSegment(strip.getMainSegmentId());
udpOut[0] = 0; //0: wled notifier protocol 1: WARLS protocol
udpOut[1] = callMode;
udpOut[2] = bri;
@ -82,42 +82,48 @@ void notify(byte callMode, bool followUp)
//sync groups
udpOut[36] = syncGroups;
//Might be changed to Kelvin in the future, receiver code should handle that case
//0: byte 38 contains 0-255 value, 255: no valid CCT, 1-254: Kelvin value MSB
udpOut[37] = strip.hasCCTBus() ? 0 : 255; //check this is 0 for the next value to be significant
udpOut[38] = mainseg.cct;
//Might be changed to Kelvin in the future, receiver code should handle that case
//0: byte 38 contains 0-255 value, 255: no valid CCT, 1-254: Kelvin value MSB
udpOut[37] = strip.hasCCTBus() ? 0 : 255; //check this is 0 for the next value to be significant
udpOut[38] = mainseg.cct;
udpOut[39] = strip.getMaxSegments();
udpOut[39] = strip.getMaxSegments();
udpOut[40] = UDP_SEG_SIZE; //size of each loop iteration (one segment)
for (uint8_t i = 0; i < strip.getMaxSegments(); i++) {
WS2812FX::Segment &selseg = strip.getSegment(i);
uint16_t ofs = 41 + i*UDP_SEG_SIZE; //start of segment offset byte
udpOut[0 +ofs] = selseg.grouping;
udpOut[1 +ofs] = selseg.spacing;
udpOut[2 +ofs] = selseg.offset >> 8;
udpOut[3 +ofs] = selseg.offset & 0xFF;
udpOut[4 +ofs] = selseg.options & 0x0F; //only take into account mirrored, selected, on, reversed
udpOut[5 +ofs] = selseg.opacity;
udpOut[6 +ofs] = selseg.mode;
udpOut[7 +ofs] = selseg.speed;
udpOut[8 +ofs] = selseg.intensity;
udpOut[9 +ofs] = selseg.palette;
udpOut[10+ofs] = R(selseg.colors[0]);
udpOut[11+ofs] = G(selseg.colors[0]);
udpOut[12+ofs] = B(selseg.colors[0]);
udpOut[13+ofs] = W(selseg.colors[0]);
udpOut[14+ofs] = R(selseg.colors[1]);
udpOut[15+ofs] = G(selseg.colors[1]);
udpOut[16+ofs] = B(selseg.colors[1]);
udpOut[17+ofs] = W(selseg.colors[1]);
udpOut[18+ofs] = R(selseg.colors[2]);
udpOut[19+ofs] = G(selseg.colors[2]);
udpOut[20+ofs] = B(selseg.colors[2]);
udpOut[21+ofs] = W(selseg.colors[2]);
uint16_t ofs = 41 + i*UDP_SEG_SIZE; //start of segment offset byte
udpOut[0 +ofs] = i;
udpOut[1 +ofs] = selseg.start >> 8;
udpOut[2 +ofs] = selseg.start & 0xFF;
udpOut[3 +ofs] = selseg.stop >> 8;
udpOut[4 +ofs] = selseg.stop & 0xFF;
udpOut[5 +ofs] = selseg.grouping;
udpOut[6 +ofs] = selseg.spacing;
udpOut[7 +ofs] = selseg.offset >> 8;
udpOut[8 +ofs] = selseg.offset & 0xFF;
udpOut[9 +ofs] = selseg.options & 0x0F; //only take into account mirrored, selected, on, reversed
udpOut[10+ofs] = selseg.opacity;
udpOut[11+ofs] = selseg.mode;
udpOut[12+ofs] = selseg.speed;
udpOut[13+ofs] = selseg.intensity;
udpOut[14+ofs] = selseg.palette;
udpOut[15+ofs] = R(selseg.colors[0]);
udpOut[16+ofs] = G(selseg.colors[0]);
udpOut[17+ofs] = B(selseg.colors[0]);
udpOut[18+ofs] = W(selseg.colors[0]);
udpOut[19+ofs] = R(selseg.colors[1]);
udpOut[20+ofs] = G(selseg.colors[1]);
udpOut[21+ofs] = B(selseg.colors[1]);
udpOut[22+ofs] = W(selseg.colors[1]);
udpOut[23+ofs] = R(selseg.colors[2]);
udpOut[24+ofs] = G(selseg.colors[2]);
udpOut[25+ofs] = B(selseg.colors[2]);
udpOut[26+ofs] = W(selseg.colors[2]);
udpOut[27+ofs] = selseg.cct;
}
//uint16_t offs = SEG_OFFSET;
//next value to be added has index: udpOut[offs + 0]
//uint16_t offs = SEG_OFFSET;
//next value to be added has index: udpOut[offs + 0]
IPAddress broadcastIp;
broadcastIp = ~uint32_t(Network.subnetMask()) | uint32_t(Network.gatewayIP());
@ -281,72 +287,78 @@ void handleNotifications()
} else if (!(receiveGroups & udpIn[36])) return;
bool someSel = (receiveNotificationBrightness || receiveNotificationColor || receiveNotificationEffects);
//apply colors from notification
if (receiveNotificationColor || !someSel) {
if (version < 11 || !receiveSegmentOptions) {
// only change col[] if not syncing full segments
col[0] = udpIn[3];
col[1] = udpIn[4];
col[2] = udpIn[5];
}
//apply colors from notification to main segment, only if not syncing full segments
if ((receiveNotificationColor || !someSel) && (version < 11 || !receiveSegmentOptions)) {
col[0] = udpIn[3];
col[1] = udpIn[4];
col[2] = udpIn[5];
if (version > 0) //sending module's white val is intended
{
// only change col[3] if not syncing full segments
if (version < 11 || !receiveSegmentOptions) col[3] = udpIn[10];
if (version > 1 && (version < 11 || !receiveSegmentOptions)) {
// only change colSec[] if not syncing full segments
col[3] = udpIn[10];
if (version > 1) {
colSec[0] = udpIn[12];
colSec[1] = udpIn[13];
colSec[2] = udpIn[14];
colSec[3] = udpIn[15];
}
if (version > 6 && (version < 11 || !receiveSegmentOptions)) {
if (version > 6) {
strip.setColor(2, RGBW32(udpIn[20], udpIn[21], udpIn[22], udpIn[23])); //tertiary color
if (version > 9 && version < 200 && udpIn[37] < 255) { //valid CCT/Kelvin value
uint8_t cct = udpIn[38];
if (udpIn[37] > 0) { //Kelvin
cct = (((udpIn[37] << 8) + udpIn[38]) - 1900) >> 5;
}
uint8_t segid = strip.getMainSegmentId();
strip.getSegment(segid).setCCT(cct, segid);
}
}
if (version > 9 && version < 200 && udpIn[37] < 255) { //valid CCT/Kelvin value
uint8_t cct = udpIn[38];
if (udpIn[37] > 0) { //Kelvin
cct = (((udpIn[37] << 8) + udpIn[38]) - 1900) >> 5;
}
uint8_t segid = strip.getMainSegmentId();
strip.getSegment(segid).setCCT(cct, segid);
}
}
}
bool timebaseUpdated = false;
//apply effects from notification
if (version < 200 && (receiveNotificationEffects || !someSel))
bool applyEffects = (receiveNotificationEffects || !someSel);
if (version < 200)
{
if (currentPlaylist>=0) unloadPlaylist();
if (applyEffects && currentPlaylist >= 0) unloadPlaylist();
if (version > 10 && receiveSegmentOptions) {
//does not sync start & stop
uint8_t srcSegs = udpIn[39];
if (srcSegs > strip.getMaxSegments()) srcSegs = strip.getMaxSegments();
for (uint8_t i = 0; i < srcSegs; i++) {
WS2812FX::Segment& selseg = strip.getSegment(i);
uint16_t ofs = 41 + i*UDP_SEG_SIZE; //start of segment offset byte
for (uint8_t j = 0; j<4; j++) selseg.setOption(j, (udpIn[4 +ofs] >> j) & 0x01); //only take into account mirrored, selected, on, reversed
selseg.setOpacity( udpIn[5+ofs], i);
strip.setMode(i, udpIn[6+ofs]);
selseg.speed = udpIn[7+ofs];
selseg.intensity = udpIn[8+ofs];
selseg.palette = udpIn[9+ofs];
selseg.setColor(0, RGBW32(udpIn[10+ofs],udpIn[11+ofs],udpIn[12+ofs],udpIn[13+ofs]), i);
selseg.setColor(1, RGBW32(udpIn[14+ofs],udpIn[15+ofs],udpIn[16+ofs],udpIn[17+ofs]), i);
selseg.setColor(2, RGBW32(udpIn[18+ofs],udpIn[19+ofs],udpIn[20+ofs],udpIn[21+ofs]), i);
strip.setSegment(i, selseg.start, selseg.stop, udpIn[0+ofs], udpIn[1+ofs], (udpIn[2+ofs]<<8 | udpIn[3+ofs])); //also properly resets segments
}
//does not sync start & stop
uint8_t srcSegs = udpIn[39];
//if (srcSegs > strip.getMaxSegments()) srcSegs = strip.getMaxSegments();
for (uint8_t i = 0; i < srcSegs; i++) {
uint16_t ofs = 41 + i*udpIn[40]; //start of segment offset byte
uint8_t id = udpIn[0 +ofs];
if (id > strip.getMaxSegments()) continue;
WS2812FX::Segment& selseg = strip.getSegment(id);
//bytes 1+2 contain start, 3+4 stop, unused at this time
for (uint8_t j = 0; j<4; j++) selseg.setOption(j, (udpIn[9 +ofs] >> j) & 0x01); //only take into account mirrored, selected, on, reversed
selseg.setOpacity(udpIn[10+ofs], id);
if (applyEffects) {
strip.setMode(id, udpIn[11+ofs]);
selseg.speed = udpIn[12+ofs];
selseg.intensity = udpIn[13+ofs];
selseg.palette = udpIn[14+ofs];
}
if (receiveNotificationColor || !someSel) {
selseg.setColor(0, RGBW32(udpIn[15+ofs],udpIn[16+ofs],udpIn[17+ofs],udpIn[18+ofs]), id);
selseg.setColor(1, RGBW32(udpIn[19+ofs],udpIn[20+ofs],udpIn[21+ofs],udpIn[22+ofs]), id);
selseg.setColor(2, RGBW32(udpIn[23+ofs],udpIn[24+ofs],udpIn[25+ofs],udpIn[26+ofs]), id);
selseg.setCCT(udpIn[27+ofs], id);
}
strip.setSegment(id, selseg.start, selseg.stop, udpIn[5+ofs], udpIn[6+ofs], (udpIn[7+ofs]<<8 | udpIn[8+ofs])); //also properly resets segments
}
setValuesFromMainSeg();
effectChanged = true;
colorChanged = true;
} else { //simple effect sync, applies to all selected
if (udpIn[8] < strip.getModeCount()) effectCurrent = udpIn[8];
effectSpeed = udpIn[9];
if (version > 2) effectIntensity = udpIn[16];
if (version > 4 && udpIn[19] < strip.getPaletteCount()) effectPalette = udpIn[19];
}
if (version > 5) {
} else if (applyEffects) { //simple effect sync, applies to all selected
if (udpIn[8] < strip.getModeCount()) effectCurrent = udpIn[8];
effectSpeed = udpIn[9];
if (version > 2) effectIntensity = udpIn[16];
if (version > 4 && udpIn[19] < strip.getPaletteCount()) effectPalette = udpIn[19];
}
if (applyEffects && version > 5) {
uint32_t t = (udpIn[25] << 24) | (udpIn[26] << 16) | (udpIn[27] << 8) | (udpIn[28]);
t += PRESUMED_NETWORK_DELAY; //adjust trivially for network delay
t -= millis();

View File

@ -513,7 +513,7 @@ void WLED::initConnection()
if (staticIP[0] != 0 && staticGateway[0] != 0) {
WiFi.config(staticIP, staticGateway, staticSubnet, IPAddress(1, 1, 1, 1));
} else {
WiFi.config(0U, 0U, 0U);
WiFi.config(IPAddress((uint32_t)0), IPAddress((uint32_t)0), IPAddress((uint32_t)0));
}
lastReconnectAttempt = millis();

View File

@ -71,10 +71,14 @@
#include <ESPmDNS.h>
#include <AsyncTCP.h>
//#include "SPIFFS.h"
#ifndef CONFIG_LITTLEFS_FOR_IDF_3_2
#define CONFIG_LITTLEFS_FOR_IDF_3_2
#if ESP_IDF_VERSION_MAJOR < 4
#ifndef CONFIG_LITTLEFS_FOR_IDF_3_2
#define CONFIG_LITTLEFS_FOR_IDF_3_2
#endif
#include <LITTLEFS.h>
#else
#include <LittleFS.h>
#endif
#include <LITTLEFS.h>
#endif
#include "src/dependencies/network/Network.h"
@ -176,7 +180,11 @@ using PSRAMDynamicJsonDocument = BasicJsonDocument<PSRAM_Allocator>;
#ifdef ESP8266
#define WLED_FS LittleFS
#else
#define WLED_FS LITTLEFS
#if ESP_IDF_VERSION_MAJOR < 4
#define WLED_FS LITTLEFS
#else
#define WLED_FS LittleFS
#endif
#endif
// GLOBAL VARIABLES