Merge branch 'master' into master-merge

Few UI fixes.
This commit is contained in:
Blaz Kristan 2022-02-03 17:40:44 +01:00
commit 52f0ae9350
22 changed files with 2016 additions and 1884 deletions

View File

@ -15,7 +15,7 @@
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
; default_envs = esp32dev, esp8285_4CH_MagicHome, codm-controller-0.6-rev2, codm-controller-0.6, esp32s2_saola, d1_mini_5CH_Shojo_PCB, d1_mini, sp501e, travis_esp8266, travis_esp32, nodemcuv2, esp32_eth, anavi_miracle_controller, esp07, esp01_1m_full, m5atom, h803wf, d1_mini_ota, heltec_wifi_kit_8, esp8285_H801, d1_mini_debug, wemos_shield_esp32, elekstube_ips
# Single binaries (uncomment your board)
; default_envs = elekstube_ips
@ -30,12 +30,12 @@ default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth, esp32s
; default_envs = d1_mini_ota
; default_envs = esp32dev
; default_envs = esp8285_4CH_MagicHome
; default_envs = esp8285_4CH_H801
; default_envs = esp8285_5CH_H801
; default_envs = esp8285_H801
; default_envs = d1_mini_5CH_Shojo_PCB
; default_envs = wemos_shield_esp32
; default_envs = m5atom
; default_envs = esp32_eth
; default_envs = esp32s2_saola
src_dir = ./wled00
data_dir = ./wled00/data
@ -78,10 +78,8 @@ debug_flags = -D DEBUG=1 -D WLED_DEBUG -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_CLIENT
# ------------------------------------------------------------------------------
# FLAGS: ldscript (available ldscripts at https://github.com/esp8266/Arduino/tree/master/tools/sdk/ld)
# ldscript_1m0m (1024 KB) = 999 KB sketch, 4 KB eeprom, no spiffs, 16 KB reserved
# ldscript_2m1m (2048 KB) = 1019 KB sketch, 4 KB eeprom, 1004 KB spiffs, 16 KB reserved
# ldscript_4m1m (4096 KB) = 1019 KB sketch, 4 KB eeprom, 1002 KB spiffs, 16 KB reserved, 2048 KB empty/ota?
# ldscript_4m3m (4096 KB) = 1019 KB sketch, 4 KB eeprom, 3040 KB spiffs, 16 KB reserved
#
# Available lwIP variants (macros):
# -DPIO_FRAMEWORK_ARDUINO_LWIP_HIGHER_BANDWIDTH = v1.4 Higher Bandwidth (default)
@ -178,7 +176,7 @@ lib_deps =
; adafruit/Adafruit CCS811 Library @ 1.0.4
; adafruit/Adafruit Si7021 Library @ 1.4.0
extra_scripts = ${scripts_defaults.extra_scripts}
extra_scripts = ${scripts_defaults.extra_scripts}
[esp8266]
build_flags =
@ -200,16 +198,21 @@ build_flags =
lib_deps =
${env.lib_deps}
https://github.com/lorol/LITTLEFS.git
#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
[esp32]
#platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2/platform-tasmota-espressif32-2.0.2.zip
platform = espressif32@3.5.0
build_flags = -g
-DARDUINO_ARCH_ESP32
-DCONFIG_LITTLEFS_FOR_IDF_3_2
#-DCONFIG_LITTLEFS_FOR_IDF_3_2
-D CONFIG_ASYNC_TCP_USE_WDT=0
#use LITTLEFS library by lorol in ESP32 core 1.x.x instead of built-in in 2.x.x
-D LOROL_LITTLEFS
default_partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
@ -314,15 +317,16 @@ lib_deps = ${esp8266.lib_deps}
[env:esp32dev]
board = esp32dev
platform = espressif32@2.0
platform = ${esp32.platform}
build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp32} -D WLED_RELEASE_NAME=ESP32 #-D WLED_DISABLE_BROWNOUT_DET
lib_deps = ${esp32.lib_deps}
monitor_filters = esp32_exception_decoder
board_build.partitions = ${esp32.default_partitions}
[env:esp32_eth]
board = esp32-poe
platform = espressif32@2.0
platform = ${esp32.platform}
upload_speed = 921600
build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp32} -D WLED_RELEASE_NAME=ESP32_Ethernet -D RLYPIN=-1 -D WLED_USE_ETHERNET -D BTNPIN=-1
@ -331,7 +335,7 @@ board_build.partitions = ${esp32.default_partitions}
[env:esp32s2_saola]
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 = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.2/platform-tasmota-espressif32-2.0.2.zip
platform_packages =
framework = arduino
board_build.partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
@ -342,7 +346,7 @@ 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 = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.2/platform-tasmota-espressif32-2.0.2.zip
platform_packages =
framework = arduino
board_build.partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
@ -359,16 +363,7 @@ build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D WLED_DISABLE_OTA
lib_deps = ${esp8266.lib_deps}
[env:esp8285_4CH_H801]
board = esp8285
platform = ${common.platform_wled_default}
platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_1m128k}
build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D WLED_DISABLE_OTA
lib_deps = ${esp8266.lib_deps}
[env:esp8285_5CH_H801]
[env:esp8285_H801]
board = esp8285
platform = ${common.platform_wled_default}
platform_packages = ${common.platform_packages}
@ -473,6 +468,13 @@ board_build.ldscript = ${common.ldscript_2m512k}
build_flags = ${common.build_flags_esp8266} -D WLED_MAX_CCT_BLEND=0 -D BTNPIN=-1 -D IRPIN=-1 -D WLED_DISABLE_INFRARED
lib_deps = ${esp8266.lib_deps}
[env:athom15w]
board = esp_wroom_02
platform = ${common.platform_wled_default}
board_build.ldscript = ${common.ldscript_2m512k}
build_flags = ${common.build_flags_esp8266} -D WLED_USE_IC_CCT -D BTNPIN=-1 -D IRPIN=-1 -D WLED_DISABLE_INFRARED
lib_deps = ${esp8266.lib_deps}
# ------------------------------------------------------------------------------
# travis test board configurations
# ------------------------------------------------------------------------------

View File

@ -32,6 +32,7 @@ class RTCUsermod : public Usermod {
}
void loop() {
if (strip.isUpdating()) return;
if (!disabled && toki.isTick()) {
time_t t = toki.second();
if (t != RTC.get()) RTC.set(t); //set RTC to NTP/UI-provided value

View File

@ -74,7 +74,7 @@ class UsermodVL53L0XGestures : public Usermod {
void loop() {
if (!enabled) return;
if (!enabled || strip.isUpdating()) return;
if (millis() - lastTime > VL53L0X_DELAY_MS)
{
lastTime = millis();

View File

@ -164,7 +164,7 @@ class MPU6050Driver : public Usermod {
*/
void loop() {
// if programming failed, don't try to do anything
if (!enabled || !dmpReady) return;
if (!enabled || !dmpReady || strip.isUpdating()) return;
// wait for MPU interrupt or extra packet(s) available
if (!mpuInterrupt && fifoCount < packetSize) return;

View File

@ -113,7 +113,7 @@ struct ColorOrderMap {
return &(_mappings[n]);
}
inline uint8_t getPixelColorOrder(uint16_t pix, uint8_t defaultColorOrder) const {
inline uint8_t IRAM_ATTR getPixelColorOrder(uint16_t pix, uint8_t defaultColorOrder) const {
if (_count == 0) return defaultColorOrder;
for (uint8_t i = 0; i < _count; i++) {
@ -639,7 +639,7 @@ class BusManager {
}
}
void setPixelColor(uint16_t pix, uint32_t c, int16_t cct=-1) {
void IRAM_ATTR setPixelColor(uint16_t pix, uint32_t c, int16_t cct=-1) {
for (uint8_t i = 0; i < numBusses; i++) {
Bus* b = busses[i];
uint16_t bstart = b->getStart();

View File

@ -214,6 +214,10 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
rlyMde = !relay["rev"];
}
CJSON(serialBaud, hw[F("baud")]);
if (serialBaud < 96 || serialBaud > 15000) serialBaud = 1152;
updateBaudRate(serialBaud *100);
//int hw_status_pin = hw[F("status")]["pin"]; // -1
JsonObject light = doc[F("light")];
@ -626,6 +630,8 @@ void serializeConfig() {
hw_relay["pin"] = rlyPin;
hw_relay["rev"] = !rlyMde;
hw[F("baud")] = serialBaud;
//JsonObject hw_status = hw.createNestedObject("status");
//hw_status["pin"] = -1;

View File

@ -289,8 +289,14 @@ function showErrorToast()
function clearErrorToast()
{
clearTimeout(timeout);
timeout = setTimeout(()=>{gId("toast").classList.remove("error");}, 10000);
var x = gId("toast");
if (x.classList.contains("error")) {
clearTimeout(timeout);
timeout = setTimeout(()=>{
x.classList.remove("show");
x.classList.remove("error");
}, 10000);
}
}
function getRuntimeStr(rt)
@ -422,7 +428,6 @@ function loadPresets(callback = null)
return res.json();
})
.then(json => {
clearErrorToast();
pJson = json;
populatePresets();
})
@ -447,7 +452,6 @@ function loadPalettes(callback = null)
return res.json();
})
.then((json)=>{
clearErrorToast();
lJson = Object.entries(json);
populatePalettes();
})
@ -473,7 +477,6 @@ function loadFX(callback = null)
return res.json();
})
.then((json)=>{
clearErrorToast();
eJson = Object.entries(json);
populateEffects();
})
@ -499,7 +502,6 @@ function loadFXData(callback = null)
return res.json();
})
.then((json)=>{
clearErrorToast();
fxdata = json||[];
// add default value for Solid
fxdata.shift()
@ -1081,7 +1083,9 @@ function cmpP(a, b)
function makeWS() {
if (ws) return;
ws = new WebSocket('ws://'+(loc?locip:window.location.hostname)+'/ws');
ws.binaryType = "arraybuffer";
ws.onmessage = (e)=>{
if (e.data instanceof ArrayBuffer) return; //liveview packet
var json = JSON.parse(e.data);
if (json.leds) return; //liveview packet
clearTimeout(jsonTimeout);
@ -1110,7 +1114,6 @@ function makeWS() {
ws.onopen = (e)=>{
ws.send("{'v':true}");
reqsLegal = true;
clearErrorToast();
}
}

View File

@ -24,40 +24,40 @@
function updatePreview(leds) {
var str = "linear-gradient(90deg,";
var len = leds.length;
for (i = 0; i < len; i++) {
var leddata = leds[i];
if (leddata.length > 6) leddata = leddata.substring(2);
str += "#" + leddata;
if (i < len -1) str += ","
for (i = 2; i < len; i+=3) {
str += `rgb(${leds[i]},${leds[i+1]},${leds[i+2]})`;
if (i < len -3) str += ","
}
str += ")";
document.getElementById("canv").style.background = str;
}
function getLiveJson(event) {
function getLiveJson(e) {
try {
var json = JSON.parse(event.data);
if (json && json.leds) {
requestAnimationFrame(function () {updatePreview(json.leds);});
}
if (toString.call(e.data) === '[object ArrayBuffer]') {
let leds = new Uint8Array(event.data);
if (leds[0] != 76) return; //'L'
updatePreview(leds);
}
}
catch (err) {
console.error("Live-Preview ws error:",err);
console.error("Peek WS error:",err);
}
}
var ws = top.window.ws;
if (ws && ws.readyState === WebSocket.OPEN) {
console.info("Use top WS for peek");
console.info("Peek uses top WS");
ws.send("{'lv':true}");
} else {
console.info("Peek ws opening");
console.info("Peek WS opening");
ws = new WebSocket("ws://"+document.location.host+"/ws");
ws.onopen = function () {
console.info("Peek WS opened");
console.info("Peek WS open");
ws.send("{'lv':true}");
}
}
ws.binaryType = "arraybuffer";
ws.addEventListener('message',getLiveJson);
</script>
</body>

View File

@ -169,7 +169,21 @@ Hue Bridge IP:<br>
<input name="H3" type="number" class="s" min="0" max="255" ><br>
<b>Press the pushlink button on the bridge, after that save this page!</b><br>
(when first connecting)<br>
Hue status: <span class="sip"> Disabled in this build </span><hr>
Hue status: <span class="sip"> Disabled in this build </span>
<h3>Serial</h3>
Baud rate:
<select name=BD>
<option value=1152>115200</option>
<option value=2304>230400</option>
<option value=4608>460800</option>
<option value=5000>500000</option>
<option value=5760>576000</option>
<option value=9216>921600</option>
<option value=10000>1000000</option>
<option value=15000>1500000</option>
</select><br>
<i>Keep at 115200 to use Improv. Some boards may not support high rates.</i>
<hr>
<button type="button" onclick="B()">Back</button><button type="submit">Save</button>
</form>
</body>

View File

@ -139,7 +139,9 @@ void serializeInfo(JsonObject root);
void serializeModeNames(JsonArray arr, const char *qstring);
void serializeModeData(JsonObject root);
void serveJson(AsyncWebServerRequest* request);
#ifdef WLED_ENABLE_JSONLIVE
bool serveLiveLeds(AsyncWebServerRequest* request, uint32_t wsClient = 0);
#endif
//led.cpp
void setValuesFromMainSeg();
@ -314,6 +316,7 @@ void clearEEPROM();
//wled_serial.cpp
void handleSerial();
void updateBaudRate(uint32_t rate);
//wled_server.cpp
bool isIp(String str);

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -662,8 +662,8 @@ void handleIR()
{
if (results.value != 0) // only print results if anything is received ( != 0 )
{
if (!pinManager.isPinAllocated(1)) //GPIO 1 - Serial TX pin
Serial.printf_P(PSTR("IR recv: 0x%lX\n"), (unsigned long)results.value);
if (!pinManager.isPinAllocated(1) || pinManager.getPinOwner(1) == PinOwner::DebugOut) //GPIO 1 - Serial TX pin
Serial.printf_P(PSTR("IR recv: 0x%lX\n"), (unsigned long)results.value);
}
decodeIR(results.value);
irrecv->resume();

View File

@ -422,9 +422,9 @@ void serializeSegment(JsonObject& root, WS2812FX::Segment& seg, byte id, bool fo
}
char tmpcol[22];
sprintf_P(tmpcol, format, (unsigned)c[0], (unsigned)c[1], (unsigned)c[2], (unsigned)c[3]);
strcat(colstr, i<2 ? strcat_P(tmpcol, PSTR(",")) : tmpcol);
strcat(colstr, i<2 ? strcat(tmpcol, ",") : tmpcol);
}
strcat_P(colstr, PSTR("]"));
strcat(colstr, "]");
root["col"] = serialized(colstr);
root["fx"] = seg.mode;
@ -883,10 +883,12 @@ void serveJson(AsyncWebServerRequest* request)
else if (url.indexOf("nodes") > 0) subJson = 4;
else if (url.indexOf("palx") > 0) subJson = 5;
else if (url.indexOf("fxda") > 0) subJson = 6;
#ifdef WLED_ENABLE_JSONLIVE
else if (url.indexOf("live") > 0) {
serveLiveLeds(request);
return;
}
#endif
else if (url.indexOf(F("eff")) > 0) {
// this is going to serve raw effect names which will include WLED-SR extensions in names
if (requestJSONBufferLock(19)) {
@ -951,6 +953,7 @@ void serveJson(AsyncWebServerRequest* request)
releaseJSONBufferLock();
}
#ifdef WLED_ENABLE_JSONLIVE
#define MAX_LIVE_LEDS 180
bool serveLiveLeds(AsyncWebServerRequest* request, uint32_t wsClient)
@ -992,3 +995,4 @@ bool serveLiveLeds(AsyncWebServerRequest* request, uint32_t wsClient)
#endif
return true;
}
#endif

View File

@ -13,8 +13,8 @@
* DO NOT make changes to the "my_config_sample.h" file directly! Your changes will not be applied.
*/
// force the compiler to show a warning to confirm that this file is included
#warning **** my_config.h: Settings from this file are honored ****
// uncomment to force the compiler to show a warning to confirm that this file is included
//#warning **** my_config.h: Settings from this file are honored ****
/* Uncomment to use your WIFI settings as defaults
//WARNING: this will hardcode these as the default even after a factory reset

View File

@ -293,6 +293,10 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
hueStoreAllowed = true;
reconnectHue();
#endif
t = request->arg(F("BD")).toInt();
if (t >= 96 && t <= 15000) serialBaud = t;
updateBaudRate(serialBaud *100);
}
//TIME

View File

@ -234,7 +234,7 @@ void releaseJSONBufferLock()
// extracts effect mode (or palette) name from names serialized string
// caller must provide large enough buffer!
// caller must provide large enough buffer for name (incluing SR extensions)!
uint8_t extractModeName(uint8_t mode, const char *src, char *dest, uint8_t maxLen)
{
uint8_t qComma = 0;
@ -260,7 +260,6 @@ uint8_t extractModeName(uint8_t mode, const char *src, char *dest, uint8_t maxLe
default:
if (!insideQuotes || (qComma != mode)) break;
dest[printedChars++] = singleJsonSymbol;
break;
}
if ((qComma > mode) || (printedChars >= maxLen)) break;
}

View File

@ -8,7 +8,7 @@
*/
// version code in format yymmddb (b = daily build)
#define VERSION 2202022
#define VERSION 2202031
//uncomment this if you have a "my_config.h" file you'd like to use
//#define WLED_USE_MY_CONFIG
@ -34,6 +34,7 @@
#endif
//#define WLED_ENABLE_ADALIGHT // saves 500b only (uses GPIO3 (RX) for serial)
//#define WLED_ENABLE_DMX // uses 3.5kb (use LEDPIN other than 2)
//#define WLED_ENABLE_JSONLIVE // peek LED output via /json/live (WS binary peek is always enabled)
#ifndef WLED_DISABLE_LOXONE
#define WLED_ENABLE_LOXONE // uses 1.2kb
#endif
@ -70,8 +71,7 @@
#include "esp_wifi.h"
#include <ESPmDNS.h>
#include <AsyncTCP.h>
//#include "SPIFFS.h"
#if ESP_IDF_VERSION_MAJOR < 4
#if LOROL_LITTLEFS
#ifndef CONFIG_LITTLEFS_FOR_IDF_3_2
#define CONFIG_LITTLEFS_FOR_IDF_3_2
#endif
@ -180,7 +180,7 @@ using PSRAMDynamicJsonDocument = BasicJsonDocument<PSRAM_Allocator>;
#ifdef ESP8266
#define WLED_FS LittleFS
#else
#if ESP_IDF_VERSION_MAJOR < 4
#if LOROL_LITTLEFS
#define WLED_FS LITTLEFS
#else
#define WLED_FS LittleFS
@ -375,11 +375,13 @@ WLED_GLOBAL bool hueApplyBri _INIT(true);
WLED_GLOBAL bool hueApplyColor _INIT(true);
#endif
WLED_GLOBAL uint16_t serialBaud _INIT(1152); // serial baud rate, multiply by 100
// Time CONFIG
WLED_GLOBAL bool ntpEnabled _INIT(false); // get internet time. Only required if you use clock overlays or time-activated macros
WLED_GLOBAL bool useAMPM _INIT(false); // 12h/24h clock format
WLED_GLOBAL byte currentTimezone _INIT(0); // Timezone ID. Refer to timezones array in wled10_ntp.ino
WLED_GLOBAL int utcOffsetSecs _INIT(0); // Seconds to offset from UTC before timzone calculation
WLED_GLOBAL bool ntpEnabled _INIT(false); // get internet time. Only required if you use clock overlays or time-activated macros
WLED_GLOBAL bool useAMPM _INIT(false); // 12h/24h clock format
WLED_GLOBAL byte currentTimezone _INIT(0); // Timezone ID. Refer to timezones array in wled10_ntp.ino
WLED_GLOBAL int utcOffsetSecs _INIT(0); // Seconds to offset from UTC before timzone calculation
WLED_GLOBAL byte overlayDefault _INIT(0); // 0: no overlay 1: analog clock 2: single-digit clock 3: cronixie
WLED_GLOBAL byte overlayMin _INIT(0), overlayMax _INIT(DEFAULT_LED_COUNT - 1); // boundaries of overlay mode

View File

@ -19,6 +19,21 @@ enum class AdaState {
TPM2_Header_CountLo,
};
uint16_t currentBaud = 1152; //default baudrate 115200 (divided by 100)
void updateBaudRate(uint32_t rate){
uint16_t rate100 = rate/100;
if (rate100 == currentBaud || rate100 < 96) return;
currentBaud = rate100;
if (!pinManager.isPinAllocated(1) || pinManager.getPinOwner(1) == PinOwner::DebugOut){
Serial.print(F("Baud is now ")); Serial.println(rate);
}
Serial.flush();
Serial.begin(rate);
}
void handleSerial()
{
if (pinManager.isPinAllocated(3)) return;
@ -30,6 +45,8 @@ void handleSerial()
static byte check = 0x00;
static byte red = 0x00;
static byte green = 0x00;
uint16_t nBytes = 0;
while (Serial.available() > 0)
{
@ -46,6 +63,41 @@ void handleSerial()
return;
} else if (next == 'v') {
Serial.print("WLED"); Serial.write(' '); Serial.println(VERSION);
} else if (next == 0xB0) {updateBaudRate( 115200);
} else if (next == 0xB1) {updateBaudRate( 230400);
} else if (next == 0xB2) {updateBaudRate( 460800);
} else if (next == 0xB3) {updateBaudRate( 500000);
} else if (next == 0xB4) {updateBaudRate( 576000);
} else if (next == 0xB5) {updateBaudRate( 921600);
} else if (next == 0xB6) {updateBaudRate(1000000);
} else if (next == 0xB7) {updateBaudRate(1500000);
} else if (next == 'l') { //RGB(W) LED data return as JSON array. Slow, but easy to use on the other end.
if (!pinManager.isPinAllocated(1) || pinManager.getPinOwner(1) == PinOwner::DebugOut){
uint16_t used = strip.getLengthTotal();
Serial.write('[');
for (uint16_t i=0; i<used; i+=1) {
Serial.print(strip.getPixelColor(i));
if (i != used-1) Serial.write(',');
}
Serial.println("]");
}
} else if (next == 'L') { //RGB LED data returned as bytes in tpm2 format. Faster, and slightly less easy to use on the other end.
if (!pinManager.isPinAllocated(1) || pinManager.getPinOwner(1) == PinOwner::DebugOut) {
Serial.write(0xC9); Serial.write(0xDA);
uint16_t used = strip.getLengthTotal();
uint16_t len = used*3;
Serial.write((len << 8) & 0xFF);
Serial.write( len & 0xFF);
for (uint16_t i=0; i < used; i++) {
uint32_t c = strip.getPixelColor(i);
Serial.write(qadd8(W(c), R(c))); //R, add white channel to RGB channels as a simple RGBW -> RGB map
Serial.write(qadd8(W(c), G(c))); //G
Serial.write(qadd8(W(c), B(c))); //B
}
Serial.write(0x36); Serial.write('\n');
}
} else if (next == '{') { //JSON API
bool verboseResponse = false;
if (!requestJSONBufferLock(16)) return;
@ -57,7 +109,7 @@ void handleSerial()
}
verboseResponse = deserializeState(doc.as<JsonObject>());
//only send response if TX pin is unused for other purposes
if (verboseResponse && !pinManager.isPinAllocated(1)) {
if (verboseResponse && (!pinManager.isPinAllocated(1) || pinManager.getPinOwner(1) == PinOwner::DebugOut)) {
doc.clear();
JsonObject state = doc.createNestedObject("state");
serializeState(state);

View File

@ -130,6 +130,34 @@ void sendDataWs(AsyncWebSocketClient * client)
}
}
#define MAX_LIVE_LEDS_WS 256
bool sendLiveLedsWs(uint32_t wsClient)
{
AsyncWebSocketClient * wsc = ws.client(wsClient);
if (!wsc || wsc->queueLength() > 0) return false; //only send if queue free
uint16_t used = strip.getLengthTotal();
uint16_t n = (used -1) /MAX_LIVE_LEDS_WS +1; //only serve every n'th LED if count over MAX_LIVE_LEDS
AsyncWebSocketMessageBuffer * wsBuf = ws.makeBuffer(2 + MIN(used, MAX_LIVE_LEDS_WS)*3);
if (!wsBuf) return false; //out of memory
uint8_t* buffer = wsBuf->get();
buffer[0] = 'L';
buffer[1] = 1; //version
uint16_t pos = 2;
for (uint16_t i= 0; i < used; i += n)
{
uint32_t c = strip.getPixelColor(i);
buffer[pos++] = qadd8(W(c), R(c)); //R, add white channel to RGB channels as a simple RGBW -> RGB map
buffer[pos++] = qadd8(W(c), G(c)); //G
buffer[pos++] = qadd8(W(c), B(c)); //B
}
wsc->binary(wsBuf);
return true;
}
void handleWs()
{
if (millis() - wsLastLiveTime > WS_LIVE_INTERVAL)
@ -140,7 +168,7 @@ void handleWs()
ws.cleanupClients();
#endif
bool success = true;
if (wsLiveClientId) success = serveLiveLeds(nullptr, wsLiveClientId);
if (wsLiveClientId) success = sendLiveLedsWs(wsLiveClientId);
wsLastLiveTime = millis();
if (!success) wsLastLiveTime -= 20; //try again in 20ms if failed due to non-empty WS queue
}

View File

@ -509,6 +509,7 @@ void getSettingsJS(byte subPage, char* dest)
sappends('m',SET_F("(\"sip\")[0]"),hueErrorString);
#endif
sappend('v',SET_F("BD"),serialBaud);
}
if (subPage == 5)