Merge remote-tracking branch 'upstream/main' into mdev

This commit is contained in:
Ewoud
2023-01-17 15:24:32 +01:00
37 changed files with 539 additions and 380 deletions

View File

@@ -4837,7 +4837,7 @@ static const char _data_FX_MODE_2DFRIZZLES[] PROGMEM = "Frizzles@X frequency,Y f
///////////////////////////////////////////
typedef struct ColorCount {
CRGB color;
int8_t count;
int8_t count;
} colorCount;
uint16_t mode_2Dgameoflife(void) { // Written by Ewoud Wijma, inspired by https://natureofcode.com/book/chapter-7-cellular-automata/ and https://github.com/DougHaber/nlife-color
@@ -4846,20 +4846,18 @@ uint16_t mode_2Dgameoflife(void) { // Written by Ewoud Wijma, inspired by https:
const uint16_t cols = SEGMENT.virtualWidth();
const uint16_t rows = SEGMENT.virtualHeight();
const uint16_t dataSize = sizeof(CRGB) * SEGMENT.length(); // using width*height prevents reallocation if mirroring is enabled
const uint16_t crcBufferLen = (SEGMENT.width() + SEGMENT.height())*2; // roughly sqrt(2)/2 for better repetition detection (Ewowi)
//array of patterns. Needed to identify repeating patterns. A pattern is one iteration of leds, without the color (on/off only)
const int patternsSize = (cols + rows) * 2; //seems to be a good value to catch also repetition in moving patterns
if (!SEGENV.allocateData(dataSize + sizeof(unsigned long) + sizeof(uint16_t) * patternsSize)) return mode_static(); //allocation failed
if (!SEGENV.allocateData(dataSize + sizeof(uint16_t)*crcBufferLen)) return mode_static(); //allocation failed
CRGB *prevLeds = reinterpret_cast<CRGB*>(SEGENV.data);
unsigned long *resetMillis = reinterpret_cast<unsigned long*>(SEGENV.data + dataSize); // triggers reset
uint16_t* patterns = reinterpret_cast<uint16_t*>(SEGENV.data + dataSize + sizeof(unsigned long)); //WLEDMM we need patterns!!!
uint16_t *crcBuffer = reinterpret_cast<uint16_t*>(SEGENV.data + dataSize);
CRGB backgroundColor = SEGCOLOR(1);
if (SEGENV.call == 0 || strip.now - *resetMillis > 5000) {
*resetMillis = strip.now;
random16_set_seed(strip.now); //seed the random generator
if (SEGENV.call == 0 || strip.now - SEGMENT.step > 5000) {
SEGENV.step = strip.now;
SEGENV.aux0 = 0;
random16_set_seed(millis()>>2); //seed the random generator
//give the leds random state and colors (based on intensity, colors from palette or all posible colors are chosen)
for (int x = 0; x < cols; x++) for (int y = 0; y < rows; y++) {
@@ -4867,18 +4865,18 @@ uint16_t mode_2Dgameoflife(void) { // Written by Ewoud Wijma, inspired by https:
if (state == 0)
SEGMENT.setPixelColorXY(x,y, backgroundColor);
else
SEGMENT.setPixelColorXY(x,y, !SEGMENT.check1?SEGMENT.color_from_palette(random8(), false, PALETTE_SOLID_WRAP, 0): random(32)); //WLEDMM support all colors
SEGMENT.setPixelColorXY(x,y, !SEGMENT.check1?SEGMENT.color_from_palette(random8(), false, PALETTE_SOLID_WRAP, 0): random16()*random16()); //WLEDMM support all colors
}
for (int y = 0; y < rows; y++) for (int x = 0; x < cols; x++) prevLeds[XY(x,y)] = CRGB::Black;
//WLEDMM back to 0.13 style!!!
//init patterns
SEGENV.aux0 = 0; //ewowi20210629: pka static! patternsize: round robin index of next slot to add pattern
for (int i=0; i<patternsSize; i++) patterns[i] = 0;
memset(crcBuffer, 0, sizeof(uint16_t)*crcBufferLen);
} else if (strip.now - SEGENV.step < FRAMETIME_FIXED * map(SEGMENT.speed,0,255,64,4)) {
// update only when appropriate time passes (in 42 FPS slots)
return FRAMETIME;
}
//copy previous leds (save previous generation)
//NOTE: using lossy getPixelColor() is a benefit as endlessly repeating patterns will eventually fade out causing a reset
for (int x = 0; x < cols; x++) for (int y = 0; y < rows; y++) prevLeds[XY(x,y)] = SEGMENT.getPixelColorXY(x,y);
//calculate new leds
@@ -4912,7 +4910,7 @@ uint16_t mode_2Dgameoflife(void) { // Written by Ewoud Wijma, inspired by https:
if ((col != bgc) && (neighbors < 2)) SEGMENT.setPixelColorXY(x,y, bgc); // Loneliness
else if ((col != bgc) && (neighbors > 3)) SEGMENT.setPixelColorXY(x,y, bgc); // Overpopulation
else if ((col == bgc) && (neighbors == 3)) { // Reproduction
//find dominantcolor and assign to cell
//find dominant color and assign to cell
colorCount dominantColorCount = {backgroundColor, 0};
for (int i=0; i<9 && colorsCount[i].count != 0; i++)
if (colorsCount[i].count > dominantColorCount.count) dominantColorCount = colorsCount[i];
@@ -4922,28 +4920,17 @@ uint16_t mode_2Dgameoflife(void) { // Written by Ewoud Wijma, inspired by https:
} //x,y
// calculate CRC16 of leds
uint16_t crc = crc16((const unsigned char*)prevLeds, dataSize-1); //ewowi: prevLeds instead of leds work as well, tbd: compare more patterns, see SR!
// WLEDMM: this is work in progress in case we are not happy with crc16
// byte index=0;
// for (int x = 0; x < cols; x+=MAX(cols/8,1)) for (int y = 0; y < rows; y+=MAX(rows/8,1)) {
// if (SEGMENT.getPixelColorXY(x,y) != (uint32_t)backgroundColor) crc = crc|crc << index;
// index ++;
// }
//WLEDMM back to 0.13 style!!!
//check if repetition of patterns occurs
uint16_t crc = crc16((const unsigned char*)prevLeds, dataSize);
// check if we had same CRC and reset if needed
bool repetition = false;
for (int i=0; i<patternsSize && !repetition; i++)
repetition = patterns[(SEGENV.aux0 - 1 - i + patternsSize)%patternsSize] == crc;
for (int i=0; i<crcBufferLen && !repetition; i++) repetition = (crc == crcBuffer[i]); // (Ewowi)
// same CRC would mean image did not change or was repeating itself
if (!repetition) SEGENV.step = strip.now; //if no repetition avoid reset
// remember CRCs across frames
crcBuffer[SEGENV.aux0] = crc;
++SEGENV.aux0 %= crcBufferLen;
//add current pattern to array and increase index (round robin)
patterns[SEGENV.aux0] = crc;
SEGENV.aux0 = (SEGENV.aux0+1)%patternsSize;
if (!repetition) *resetMillis = strip.now; //if no repetition avoid reset
return FRAMETIME_FIXED * (128-(SEGMENT.speed>>1)); // update only when appropriate time passes (in 42 FPS slots)
return FRAMETIME;
} // mode_2Dgameoflife()
static const char _data_FX_MODE_2DGAMEOFLIFE[] PROGMEM = "Game Of Life@!,,,,,All colors=0;!,!;!;2"; //WLEDMM support all colors

View File

@@ -24,12 +24,14 @@ void shortPressAction(uint8_t b)
applyPreset(macroButton[b], CALL_MODE_BUTTON_PRESET);
}
#ifndef WLED_DISABLE_MQTT
// publish MQTT message
if (buttonPublishMqtt && WLED_MQTT_CONNECTED) {
char subuf[64];
sprintf_P(subuf, _mqtt_topic_button, mqttDeviceTopic, (int)b);
mqtt->publish(subuf, 0, false, "short");
}
#endif
}
void longPressAction(uint8_t b)
@@ -43,12 +45,14 @@ void longPressAction(uint8_t b)
applyPreset(macroLongPress[b], CALL_MODE_BUTTON_PRESET);
}
#ifndef WLED_DISABLE_MQTT
// publish MQTT message
if (buttonPublishMqtt && WLED_MQTT_CONNECTED) {
char subuf[64];
sprintf_P(subuf, _mqtt_topic_button, mqttDeviceTopic, (int)b);
mqtt->publish(subuf, 0, false, "long");
}
#endif
}
void doublePressAction(uint8_t b)
@@ -62,12 +66,14 @@ void doublePressAction(uint8_t b)
applyPreset(macroDoublePress[b], CALL_MODE_BUTTON_PRESET);
}
#ifndef WLED_DISABLE_MQTT
// publish MQTT message
if (buttonPublishMqtt && WLED_MQTT_CONNECTED) {
char subuf[64];
sprintf_P(subuf, _mqtt_topic_button, mqttDeviceTopic, (int)b);
mqtt->publish(subuf, 0, false, "double");
}
#endif
}
bool isButtonPressed(uint8_t i)
@@ -119,6 +125,7 @@ void handleSwitch(uint8_t b)
}
}
#ifndef WLED_DISABLE_MQTT
// publish MQTT message
if (buttonPublishMqtt && WLED_MQTT_CONNECTED) {
char subuf[64];
@@ -126,6 +133,7 @@ void handleSwitch(uint8_t b)
else sprintf_P(subuf, _mqtt_topic_button, mqttDeviceTopic, (int)b);
mqtt->publish(subuf, 0, false, !buttonPressedBefore[b] ? "off" : "on");
}
#endif
buttonLongPressed[b] = buttonPressedBefore[b]; //save the last "long term" switch state
}

View File

@@ -408,6 +408,8 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
CJSON(e131SkipOutOfSequence, if_live_dmx[F("seqskip")]);
CJSON(DMXAddress, if_live_dmx[F("addr")]);
if (!DMXAddress || DMXAddress > 510) DMXAddress = 1;
CJSON(DMXSegmentSpacing, if_live_dmx[F("dss")]);
if (DMXSegmentSpacing > 150) DMXSegmentSpacing = 0;
CJSON(DMXMode, if_live_dmx["mode"]);
tdd = if_live[F("timeout")] | -1;
@@ -870,6 +872,7 @@ void serializeConfig() {
if_live_dmx[F("uni")] = e131Universe;
if_live_dmx[F("seqskip")] = e131SkipOutOfSequence;
if_live_dmx[F("addr")] = DMXAddress;
if_live_dmx[F("dss")] = DMXSegmentSpacing;
if_live_dmx["mode"] = DMXMode;
if_live[F("timeout")] = realtimeTimeoutMs / 100;

View File

@@ -173,10 +173,14 @@
#define DMX_MODE_DISABLED 0 //not used
#define DMX_MODE_SINGLE_RGB 1 //all LEDs same RGB color (3 channels)
#define DMX_MODE_SINGLE_DRGB 2 //all LEDs same RGB color and master dimmer (4 channels)
#define DMX_MODE_EFFECT 3 //trigger standalone effects of WLED (11 channels)
#define DMX_MODE_EFFECT 3 //trigger standalone effects of WLED (15 channels)
#define DMX_MODE_EFFECT_W 7 //trigger standalone effects of WLED (18 channels)
#define DMX_MODE_MULTIPLE_RGB 4 //every LED is addressed with its own RGB (ledCount * 3 channels)
#define DMX_MODE_MULTIPLE_DRGB 5 //every LED is addressed with its own RGB and share a master dimmer (ledCount * 3 + 1 channels)
#define DMX_MODE_MULTIPLE_RGBW 6 //every LED is addressed with its own RGBW (ledCount * 4 channels)
#define DMX_MODE_EFFECT_SEGMENT 8 //trigger standalone effects of WLED (15 channels per segement)
#define DMX_MODE_EFFECT_SEGMENT_W 9 //trigger standalone effects of WLED (18 channels per segement)
#define DMX_MODE_PRESET 10 //apply presets (1 channel)
//Light capability byte (unused) 0bRCCCTTTT
//bits 0/1/2/3: specifies a type of LED driver. A single "driver" may have different chip models but must have the same protocol/behavior

View File

@@ -2551,7 +2551,8 @@ function rSegs()
//WLEDMM generate presets.json file
function genPresets()
{
var result = '{"0":{}';
var result = "";
var sep = "{";
var effects = eJson;
var playlistPS = JSON.parse("{}");
@@ -2603,7 +2604,8 @@ function genPresets()
if (!defaultString.includes("rY")) defaultString += ',"rY":false';
if (!defaultString.includes("mY")) defaultString += ',"mY":false';
}
result += `\n,"${ef.id}":{"n":"${ef.name}","mainseg":0,"seg":[{"id":0,"fx":${ef.id}${defaultString}}]}`;
result += `${sep}"${ef.id}":{"n":"${ef.name}","mainseg":0,"seg":[{"id":0,"fx":${ef.id}${defaultString}}]}`;
sep = "\n,";
addToPlaylist(m, ef.id);
addToPlaylist("All", ef.id);
if (m.includes("1")) addToPlaylist("All1", ef.id);

View File

@@ -96,11 +96,11 @@
<button type=submit id="b" onclick="window.location='/'">Back</button>
<button type="submit" onclick="window.location='./settings/wifi'">WiFi Setup</button>
<button type="submit" onclick="window.location='./settings/leds'">LED Preferences</button>
<button type="submit" onclick="window.location='./settings/2D'">2D Configuration</button>
<button id="2dbtn" style="display:none;" type="submit" onclick="window.location='./settings/2D'">2D Configuration</button>
<div id="configMenu">Loading...</div>
<button type="submit" onclick="window.location='./settings/um'">Usermods (pins)</button> <!--WLEDMM: Move below UMs-->
<button type="submit" onclick="window.location='./settings/ui'">User Interface</button>
<button id="dmxbtn" style="display: none;" type="submit" onclick="window.location='./settings/dmx'">DMX Output</button>
<button id="dmxbtn" style="display:none;" type="submit" onclick="window.location='./settings/dmx'">DMX Output</button>
<button type="submit" onclick="window.location='./settings/sync'">Sync Interfaces</button>
<button type="submit" onclick="window.location='./settings/time'">Time & Macros</button>
<button type="submit" onclick="window.location='./settings/sec'">Security & Updates</button>

View File

@@ -150,15 +150,20 @@ Start universe: <input name="EU" type="number" min="0" max="63999" required><br>
<i>Reboot required.</i> Check out <a href="https://github.com/LedFx/LedFx" target="_blank">LedFx</a>!<br>
Skip out-of-sequence packets: <input type="checkbox" name="ES"><br>
DMX start address: <input name="DA" type="number" min="1" max="510" required><br>
DMX segment spacing: <input name="XX" type="number" min="0" max="150" required><br>
DMX mode:
<select name=DM>
<option value=0>Disabled</option>
<option value=1>Single RGB</option>
<option value=2>Single DRGB</option>
<option value=3>Effect</option>
<option value=7>Effect + White</option>
<option value=8>Effect Segment</option>
<option value=9>Effect Segment + White</option>
<option value=4>Multi RGB</option>
<option value=5>Dimmer + Multi RGB</option>
<option value=6>Multi RGBW</option>
<option value=10>Preset</option>
</select><br>
<a href="https://mm.kno.wled.ge/interfaces/e1.31-dmx/" target="_blank">E1.31 info</a><br>
Timeout: <input name="ET" type="number" min="1" max="65000" required> ms<br>

View File

@@ -132,7 +132,7 @@ void handleE131Packet(e131_packet_t* p, IPAddress clientIP, byte protocol){
return; // nothing to do
break;
case DMX_MODE_SINGLE_RGB: // RGB only
case DMX_MODE_SINGLE_RGB: // 3 channel: [R,G,B]
if (uni != e131Universe) return;
if (availDMXLen < 3) return;
@@ -145,7 +145,7 @@ void handleE131Packet(e131_packet_t* p, IPAddress clientIP, byte protocol){
setRealtimePixel(i, e131_data[dataOffset+0], e131_data[dataOffset+1], e131_data[dataOffset+2], wChannel);
break;
case DMX_MODE_SINGLE_DRGB: // Dimmer + RGB
case DMX_MODE_SINGLE_DRGB: // 4 channel: [Dimmer,R,G,B]
if (uni != e131Universe) return;
if (availDMXLen < 4) return;
@@ -162,38 +162,77 @@ void handleE131Packet(e131_packet_t* p, IPAddress clientIP, byte protocol){
setRealtimePixel(i, e131_data[dataOffset+1], e131_data[dataOffset+2], e131_data[dataOffset+3], wChannel);
break;
case DMX_MODE_EFFECT: // Length 1: Apply Preset ID, length 11-13: apply effect config
if (uni != e131Universe) return;
if (availDMXLen < 11) {
if (availDMXLen > 1) return;
applyPreset(e131_data[dataOffset+0], CALL_MODE_NOTIFICATION);
return;
case DMX_MODE_PRESET: // 2 channel: [Dimmer,Preset]
if (uni != e131Universe || availDMXLen < 2) return;
applyPreset(e131_data[dataOffset+1], CALL_MODE_NOTIFICATION);
if (bri != e131_data[dataOffset]) {
bri = e131_data[dataOffset];
strip.setBrightness(bri, true);
}
if (bri != e131_data[dataOffset+0]) {
bri = e131_data[dataOffset+0];
}
if (e131_data[dataOffset+1] < strip.getModeCount())
effectCurrent = e131_data[dataOffset+ 1];
effectSpeed = e131_data[dataOffset+ 2]; // flickers
effectIntensity = e131_data[dataOffset+ 3];
effectPalette = e131_data[dataOffset+ 4];
col[0] = e131_data[dataOffset+ 5];
col[1] = e131_data[dataOffset+ 6];
col[2] = e131_data[dataOffset+ 7];
colSec[0] = e131_data[dataOffset+ 8];
colSec[1] = e131_data[dataOffset+ 9];
colSec[2] = e131_data[dataOffset+10];
if (availDMXLen > 11)
{
col[3] = e131_data[dataOffset+11]; //white
colSec[3] = e131_data[dataOffset+12];
}
transitionDelayTemp = 0; // act fast
colorUpdated(CALL_MODE_NOTIFICATION); // don't send UDP
return; // don't activate realtime live mode
return;
break;
case DMX_MODE_EFFECT: // 15 channels [bri,effectCurrent,effectSpeed,effectIntensity,effectPalette,effectOption,R,G,B,R2,G2,B2,R3,G3,B3]
case DMX_MODE_EFFECT_W: // 18 channels, same as above but with extra +3 white channels [..,W,W2,W3]
case DMX_MODE_EFFECT_SEGMENT: // 15 channels per segment;
case DMX_MODE_EFFECT_SEGMENT_W: // 18 Channels per segment;
{
if (uni != e131Universe) return;
bool isSegmentMode = DMXMode == DMX_MODE_EFFECT_SEGMENT || DMXMode == DMX_MODE_EFFECT_SEGMENT_W;
uint8_t dmxEffectChannels = (DMXMode == DMX_MODE_EFFECT || DMXMode == DMX_MODE_EFFECT_SEGMENT) ? 15 : 18;
for (uint8_t id = 0; id < strip.getSegmentsNum(); id++) {
Segment& seg = strip.getSegment(id);
if (isSegmentMode)
dataOffset = DMXAddress + id * (dmxEffectChannels + DMXSegmentSpacing);
else
dataOffset = DMXAddress;
// Modify address for Art-Net data
if (protocol == P_ARTNET && dataOffset > 0)
dataOffset--;
// Skip out of universe addresses
if (dataOffset > dmxChannels - dmxEffectChannels + 1)
return;
if (e131_data[dataOffset+1] < strip.getModeCount())
if (e131_data[dataOffset+1] != seg.mode) seg.setMode( e131_data[dataOffset+1]);
if (e131_data[dataOffset+2] != seg.speed) seg.speed = e131_data[dataOffset+2];
if (e131_data[dataOffset+3] != seg.intensity) seg.intensity = e131_data[dataOffset+3];
if (e131_data[dataOffset+4] != seg.palette) seg.setPalette(e131_data[dataOffset+4]);
uint8_t segOption = (uint8_t)floor(e131_data[dataOffset+5]/64.0);
if (segOption == 0 && (seg.mirror || seg.reverse )) {seg.setOption(SEG_OPTION_MIRROR, false); seg.setOption(SEG_OPTION_REVERSED, false);}
if (segOption == 1 && (seg.mirror || !seg.reverse)) {seg.setOption(SEG_OPTION_MIRROR, false); seg.setOption(SEG_OPTION_REVERSED, true);}
if (segOption == 2 && (!seg.mirror || seg.reverse )) {seg.setOption(SEG_OPTION_MIRROR, true); seg.setOption(SEG_OPTION_REVERSED, false);}
if (segOption == 3 && (!seg.mirror || !seg.reverse)) {seg.setOption(SEG_OPTION_MIRROR, true); seg.setOption(SEG_OPTION_REVERSED, true);}
uint32_t colors[3];
byte whites[3] = {0,0,0};
if (dmxEffectChannels == 18) {
whites[0] = e131_data[dataOffset+15];
whites[1] = e131_data[dataOffset+16];
whites[2] = e131_data[dataOffset+17];
}
colors[0] = RGBW32(e131_data[dataOffset+ 6], e131_data[dataOffset+ 7], e131_data[dataOffset+ 8], whites[0]);
colors[1] = RGBW32(e131_data[dataOffset+ 9], e131_data[dataOffset+10], e131_data[dataOffset+11], whites[1]);
colors[2] = RGBW32(e131_data[dataOffset+12], e131_data[dataOffset+13], e131_data[dataOffset+14], whites[2]);
if (colors[0] != seg.colors[0]) seg.setColor(0, colors[0]);
if (colors[1] != seg.colors[1]) seg.setColor(1, colors[1]);
if (colors[2] != seg.colors[2]) seg.setColor(2, colors[2]);
// Set segment opacity or global brightness
if (isSegmentMode) {
if (e131_data[dataOffset] != seg.opacity) seg.setOpacity(e131_data[dataOffset]);
} else if ( id == strip.getSegmentsNum()-1 ) {
if (bri != e131_data[dataOffset]) {
bri = e131_data[dataOffset];
strip.setBrightness(bri, true);
}
}
}
return;
break;
}
case DMX_MODE_MULTIPLE_DRGB:
case DMX_MODE_MULTIPLE_RGB:
case DMX_MODE_MULTIPLE_RGBW:
@@ -279,7 +318,11 @@ void handleArtnetPollReply(IPAddress ipAddress) {
case DMX_MODE_SINGLE_RGB:
case DMX_MODE_SINGLE_DRGB:
case DMX_MODE_PRESET:
case DMX_MODE_EFFECT:
case DMX_MODE_EFFECT_W:
case DMX_MODE_EFFECT_SEGMENT:
case DMX_MODE_EFFECT_SEGMENT_W:
break; // 1 universe is enough
case DMX_MODE_MULTIPLE_DRGB:

View File

@@ -1,18 +1,17 @@
#ifndef WLED_FCN_DECLARE_H
#define WLED_FCN_DECLARE_H
#include <Arduino.h>
#include "src/dependencies/espalexa/EspalexaDevice.h"
#include "src/dependencies/e131/ESPAsyncE131.h"
/*
* All globally accessible functions are declared here
*/
//alexa.cpp
#ifndef WLED_DISABLE_ALEXA
void onAlexaChange(EspalexaDevice* dev);
void alexaInit();
void handleAlexa();
void onAlexaChange(EspalexaDevice* dev);
#endif
//blynk.cpp
#ifndef WLED_DISABLE_BLYNK

View File

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

View File

@@ -180,7 +180,9 @@ void handleTransitions()
{
//handle still pending interface update
if (interfaceUpdateCallMode && millis() - lastInterfaceUpdate > INTERFACE_UPDATE_COOLDOWN) updateInterfaces(interfaceUpdateCallMode);
#ifndef WLED_DISABLE_MQTT
if (doPublishMqtt) publishMqtt();
#endif
if (transitionActive && transitionDelayTemp > 0)
{

View File

@@ -177,8 +177,4 @@ bool initMqtt()
mqtt->connect();
return true;
}
#else
bool initMqtt(){return false;}
void publishMqtt(){}
#endif

View File

@@ -287,8 +287,10 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
if (t >= 0 && t <= 63999) e131Universe = t;
t = request->arg(F("DA")).toInt();
if (t >= 0 && t <= 510) DMXAddress = t;
t = request->arg(F("XX")).toInt();
if (t >= 0 && t <= 150) DMXSegmentSpacing = t;
t = request->arg(F("DM")).toInt();
if (t >= DMX_MODE_DISABLED && t <= DMX_MODE_MULTIPLE_RGBW) DMXMode = t;
if (t >= DMX_MODE_DISABLED && t <= DMX_MODE_PRESET) DMXMode = t;
t = request->arg(F("ET")).toInt();
if (t > 99 && t <= 65000) realtimeTimeoutMs = t;
arlsForceMaxBri = request->hasArg(F("FB"));
@@ -712,7 +714,9 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
lastEditTime = millis();
if (subPage != 2 && !doReboot) doSerializeConfig = true; //serializeConfig(); //do not save if factory reset or LED settings (which are saved after LED re-init)
#ifndef WLED_DISABLE_ALEXA
if (subPage == 4) alexaInit();
#endif
}

View File

@@ -47,7 +47,9 @@ void WLED::loop()
#endif
handleTime();
#ifndef WLED_DISABLE_INFRARED
handleIR(); // 2nd call to function needed for ESP32 to return valid results -- should be good for ESP8266, too
#endif
handleConnection();
handleSerial();
handleNotifications();
@@ -69,7 +71,9 @@ void WLED::loop()
yield();
handleIO();
#ifndef WLED_DISABLE_INFRARED
handleIR();
#endif
#ifndef WLED_DISABLE_ALEXA
handleAlexa();
#endif
@@ -140,7 +144,9 @@ void WLED::loop()
}
if (millis() - lastMqttReconnectAttempt > 30000 || lastMqttReconnectAttempt == 0) { // lastMqttReconnectAttempt==0 forces immediate broadcast
lastMqttReconnectAttempt = millis();
#ifndef WLED_DISABLE_MQTT
initMqtt();
#endif
yield();
// refresh WLED nodes list
refreshNodeList();
@@ -497,8 +503,10 @@ void WLED::setup()
// fill in unique mdns default
if (strcmp(cmDNS, "x") == 0) sprintf_P(cmDNS, PSTR("wled-%*s"), 6, escapedMac.c_str() + 6);
#ifndef WLED_DISABLE_MQTT
if (mqttDeviceTopic[0] == 0) sprintf_P(mqttDeviceTopic, PSTR("wled/%*s"), 6, escapedMac.c_str() + 6);
if (mqttClientID[0] == 0) sprintf_P(mqttClientID, PSTR("WLED-%*s"), 6, escapedMac.c_str() + 6);
#endif
#ifdef WLED_ENABLE_ADALIGHT
if (Serial.available() > 0 && Serial.peek() == 'I') handleImprovPacket();
@@ -798,9 +806,11 @@ void WLED::initInterfaces()
}
#endif
#ifndef WLED_DISABLE_ALEXA
// init Alexa hue emulation
if (alexaEnabled)
alexaInit();
#endif
#ifndef WLED_DISABLE_OTA
if (aOtaEnabled)
@@ -846,7 +856,9 @@ void WLED::initInterfaces()
e131.begin(e131Multicast, e131Port, e131Universe, E131_MAX_UNIVERSE_COUNT);
ddp.begin(false, DDP_DEFAULT_PORT);
reconnectHue();
#ifndef WLED_DISABLE_MQTT
initMqtt();
#endif
interfacesInited = true;
wasConnected = true;
}

View File

@@ -121,6 +121,7 @@
#define ESPALEXA_MAXDEVICES 10
// #define ESPALEXA_DEBUG
#include "src/dependencies/espalexa/Espalexa.h"
#include "src/dependencies/espalexa/EspalexaDevice.h"
#endif
#ifndef WLED_DISABLE_BLYNK
#include "src/dependencies/blynk/BlynkSimpleEsp.h"
@@ -135,7 +136,9 @@
#endif
#include "src/dependencies/e131/ESPAsyncE131.h"
#ifdef WLED_ENABLE_MQTT
#include "src/dependencies/async-mqtt-client/AsyncMqttClient.h"
#endif
#define ARDUINOJSON_DECODE_UNICODE 0
#include "src/dependencies/json/AsyncJson-v6.h"
@@ -403,12 +406,18 @@ WLED_GLOBAL uint16_t e131Universe _INIT(1); // settings fo
WLED_GLOBAL uint16_t e131Port _INIT(5568); // DMX in port. E1.31 default is 5568, Art-Net is 6454
WLED_GLOBAL byte DMXMode _INIT(DMX_MODE_MULTIPLE_RGB); // DMX mode (s.a.)
WLED_GLOBAL uint16_t DMXAddress _INIT(1); // DMX start address of fixture, a.k.a. first Channel [for E1.31 (sACN) protocol]
WLED_GLOBAL uint16_t DMXSegmentSpacing _INIT(0); // Number of void/unused channels between each segments DMX channels
WLED_GLOBAL byte e131LastSequenceNumber[E131_MAX_UNIVERSE_COUNT]; // to detect packet loss
WLED_GLOBAL bool e131Multicast _INIT(false); // multicast or unicast
WLED_GLOBAL bool e131SkipOutOfSequence _INIT(false); // freeze instead of flickering
WLED_GLOBAL uint16_t pollReplyCount _INIT(0); // count number of replies for ArtPoll node report
// mqtt
WLED_GLOBAL unsigned long lastMqttReconnectAttempt _INIT(0); // used for other periodic tasks too
#ifndef WLED_DISABLE_MQTT
WLED_GLOBAL AsyncMqttClient *mqtt _INIT(NULL);
WLED_GLOBAL bool mqttEnabled _INIT(false);
WLED_GLOBAL char mqttStatusTopic[40] _INIT(""); // this must be global because of async handlers
WLED_GLOBAL char mqttDeviceTopic[33] _INIT(""); // main MQTT topic (individual per device, default is wled/mac)
WLED_GLOBAL char mqttGroupTopic[33] _INIT("wled/all"); // second MQTT topic (for example to group devices)
WLED_GLOBAL char mqttServer[33] _INIT(""); // both domains and IPs should work (no SSL)
@@ -416,6 +425,10 @@ WLED_GLOBAL char mqttUser[41] _INIT(""); // optional: username
WLED_GLOBAL char mqttPass[65] _INIT(""); // optional: password for MQTT auth
WLED_GLOBAL char mqttClientID[41] _INIT(""); // override the client ID
WLED_GLOBAL uint16_t mqttPort _INIT(1883);
#define WLED_MQTT_CONNECTED (mqtt != nullptr && mqtt->connected())
#else
#define WLED_MQTT_CONNECTED false
#endif
#ifndef WLED_DISABLE_HUESYNC
WLED_GLOBAL bool huePollingEnabled _INIT(false); // poll hue bridge for light state
@@ -595,11 +608,8 @@ WLED_GLOBAL uint8_t tpmPacketCount _INIT(0);
WLED_GLOBAL uint16_t tpmPayloadFrameSize _INIT(0);
WLED_GLOBAL bool useMainSegmentOnly _INIT(false);
// mqtt
WLED_GLOBAL unsigned long lastMqttReconnectAttempt _INIT(0);
WLED_GLOBAL unsigned long lastInterfaceUpdate _INIT(0);
WLED_GLOBAL byte interfaceUpdateCallMode _INIT(CALL_MODE_INIT);
WLED_GLOBAL char mqttStatusTopic[40] _INIT(""); // this must be global because of async handlers
// alexa udp
WLED_GLOBAL String escapedMac;
@@ -660,8 +670,7 @@ WLED_GLOBAL AsyncWebServer server _INIT_N(((80)));
#ifdef WLED_ENABLE_WEBSOCKETS
WLED_GLOBAL AsyncWebSocket ws _INIT_N((("/ws")));
#endif
WLED_GLOBAL AsyncClient* hueClient _INIT(NULL);
WLED_GLOBAL AsyncMqttClient* mqtt _INIT(NULL);
WLED_GLOBAL AsyncClient *hueClient _INIT(NULL);
WLED_GLOBAL AsyncWebHandler *editHandler _INIT(nullptr);
// udp interface objects
@@ -792,7 +801,6 @@ WLED_GLOBAL volatile uint8_t jsonBufferLock _INIT(0);
#define WLED_CONNECTED (WiFi.status() == WL_CONNECTED)
#endif
#define WLED_WIFI_CONFIGURED (strlen(clientSSID) >= 1 && strcmp(clientSSID, DEFAULT_CLIENT_SSID) != 0)
#define WLED_MQTT_CONNECTED (mqtt != nullptr && mqtt->connected())
#ifndef WLED_AP_SSID_UNIQUE
#define WLED_SET_AP_SSID() do { \

View File

@@ -605,10 +605,14 @@ void serveSettings(AsyncWebServerRequest* request, bool post)
case 4: response = request->beginResponse_P(200, "text/html", PAGE_settings_sync, PAGE_settings_sync_length); break;
case 5: response = request->beginResponse_P(200, "text/html", PAGE_settings_time, PAGE_settings_time_length); break;
case 6: response = request->beginResponse_P(200, "text/html", PAGE_settings_sec, PAGE_settings_sec_length); break;
#ifdef WLED_ENABLE_DMX
case 7: response = request->beginResponse_P(200, "text/html", PAGE_settings_dmx, PAGE_settings_dmx_length); break;
#endif
case 8: response = request->beginResponse_P(200, "text/html", PAGE_settings_um, PAGE_settings_um_length); break;
case 9: response = request->beginResponse_P(200, "text/html", PAGE_update, PAGE_update_length); break;
#ifndef WLED_DISABLE_2D
case 10: response = request->beginResponse_P(200, "text/html", PAGE_settings_2D, PAGE_settings_2D_length); break;
#endif
case 251: {
correctPIN = !strlen(settingsPIN); // lock if a pin is set
createEditHandler(correctPIN);

View File

@@ -288,6 +288,9 @@ void getSettingsJS(AsyncWebServerRequest* request, byte subPage, char* dest) //W
if (subPage == 0)
{
#ifndef WLED_DISABLE_2D // include only if 2D is compiled in
oappend(PSTR("gId('2dbtn').style.display='';"));
#endif
#ifdef WLED_ENABLE_DMX // include only if DMX is enabled
oappend(PSTR("gId('dmxbtn').style.display='';"));
#endif
@@ -512,6 +515,7 @@ void getSettingsJS(AsyncWebServerRequest* request, byte subPage, char* dest) //W
oappend(SET_F("hideNoDMX();")); // hide "not compiled in" message
#endif
sappend('v',SET_F("DA"),DMXAddress);
sappend('v',SET_F("XX"),DMXSegmentSpacing);
sappend('v',SET_F("DM"),DMXMode);
sappend('v',SET_F("ET"),realtimeTimeoutMs);
sappend('c',SET_F("FB"),arlsForceMaxBri);