diff --git a/CHANGELOG.md b/CHANGELOG.md index efbe90a5..e9f86e23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,20 @@ ## WLED changelog -### Builds after release 0.13.1 +### WLED release 0.13.2 + +#### Build 2208140 + +- Version bump to v0.13.2 "Toki" +- Added option to receive live data on the main segment only (PR #2601) +- Enable ESP watchdog by default (PR #2657) +- Fixed race condition when saving bus config +- Better potentiometer filtering (PR #2693) +- More suitable DMX libraries (PR #2652) +- Fixed outgoing serial TPM2 message length (PR #2628) +- Fixed next universe overflow and Art-Net DMX start address (PR #2607) +- Fixed relative segment brightness (PR #2665) + +### Builds between releases 0.13.1 and 0.13.2 #### Build 2203191 diff --git a/usermods/PWM_fan/usermod_PWM_fan.h b/usermods/PWM_fan/usermod_PWM_fan.h index ba4e1726..fec2e726 100644 --- a/usermods/PWM_fan/usermod_PWM_fan.h +++ b/usermods/PWM_fan/usermod_PWM_fan.h @@ -51,6 +51,7 @@ class PWMFanUsermod : public Usermod { float targetTemperature = 25.0; uint8_t minPWMValuePct = 50; uint8_t numberOfInterrupsInOneSingleRotation = 2; // Number of interrupts ESP32 sees on tacho signal on a single fan rotation. All the fans I've seen trigger two interrups. + uint8_t pwmValuePct = 0; // strings to reduce flash memory usage (used more than twice) static const char _name[]; @@ -83,6 +84,8 @@ class PWMFanUsermod : public Usermod { } void updateTacho(void) { + // store milliseconds when tacho was measured the last time + msLastTachoMeasurement = millis(); if (tachoPin < 0) return; // start of tacho measurement @@ -93,8 +96,6 @@ class PWMFanUsermod : public Usermod { last_rpm /= tachoUpdateSec; // reset counter counter_rpm = 0; - // store milliseconds when tacho was measured the last time - msLastTachoMeasurement = millis(); // attach interrupt again attachInterrupt(digitalPinToInterrupt(tachoPin), rpm_fan, FALLING); } @@ -102,6 +103,7 @@ class PWMFanUsermod : public Usermod { // https://randomnerdtutorials.com/esp32-pwm-arduino-ide/ void initPWMfan(void) { if (pwmPin < 0 || !pinManager.allocatePin(pwmPin, true, PinOwner::UM_Unspecified)) { + enabled = false; pwmPin = -1; return; } @@ -217,12 +219,41 @@ class PWMFanUsermod : public Usermod { * Below it is shown how this could be used for e.g. a light sensor */ void addToJsonInfo(JsonObject& root) { - if (tachoPin < 0) return; JsonObject user = root["u"]; if (user.isNull()) user = root.createNestedObject("u"); - JsonArray data = user.createNestedArray(FPSTR(_name)); - data.add(last_rpm); - data.add(F("rpm")); + + JsonArray infoArr = user.createNestedArray(FPSTR(_name)); + String uiDomString = F(""); + infoArr.add(uiDomString); + + if (enabled) { + JsonArray infoArr = user.createNestedArray(F("Manual")); + String uiDomString = F("
"); // + infoArr.add(uiDomString); + + JsonArray data = user.createNestedArray(F("Speed")); + if (tachoPin >= 0) { + data.add(last_rpm); + data.add(F("rpm")); + } else { + if (lockFan) data.add(F("locked")); + else data.add(F("auto")); + } + } } /* @@ -237,14 +268,19 @@ class PWMFanUsermod : public Usermod { * Values in the state object may be modified by connected clients */ void readFromJsonState(JsonObject& root) { - if (!initDone || !enabled) return; // prevent crash on boot applyPreset() + if (!initDone) return; // prevent crash on boot applyPreset() JsonObject usermod = root[FPSTR(_name)]; if (!usermod.isNull()) { - if (!usermod[FPSTR(_speed)].isNull() && usermod[FPSTR(_speed)].is()) { - int pwmValuePct = usermod[FPSTR(_speed)].as(); - updateFanSpeed((MAX(0,MIN(100,pwmValuePct)) * 255) / 100); + if (usermod[FPSTR(_enabled)].is()) { + enabled = usermod[FPSTR(_enabled)].as(); + if (!enabled) updateFanSpeed(0); } - if (!usermod[FPSTR(_lock)].isNull() && usermod[FPSTR(_lock)].is()) { + if (enabled && !usermod[FPSTR(_speed)].isNull() && usermod[FPSTR(_speed)].is()) { + pwmValuePct = usermod[FPSTR(_speed)].as(); + updateFanSpeed((constrain(pwmValuePct,0,100) * 255) / 100); + if (pwmValuePct) lockFan = true; + } + if (enabled && !usermod[FPSTR(_lock)].isNull() && usermod[FPSTR(_lock)].is()) { lockFan = usermod[FPSTR(_lock)].as(); } } diff --git a/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h b/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h index 927e9e16..38a055a5 100644 --- a/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h +++ b/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h @@ -312,19 +312,30 @@ class FourLineDisplayUsermod : public Usermod { bool isHW, isSPI = (type == SSD1306_SPI || type == SSD1306_SPI64); PinOwner po = PinOwner::UM_FourLineDisplay; if (isSPI) { - PinManagerPinType cspins[2] = { { ioPin[3], true }, { ioPin[4], true } }; - if (!pinManager.allocateMultiplePins(cspins, 2, PinOwner::UM_FourLineDisplay)) { type=NONE; return; } - isHW = (ioPin[0]==spi_sclk && ioPin[1]==spi_mosi && ioPin[2]==spi_cs); + uint8_t hw_sclk = spi_sclk<0 ? HW_PIN_CLOCKSPI : spi_sclk; + uint8_t hw_mosi = spi_mosi<0 ? HW_PIN_DATASPI : spi_mosi; + if (ioPin[0] < 0 || ioPin[1] < 0) { + ioPin[0] = hw_sclk; + ioPin[1] = hw_mosi; + } + isHW = (ioPin[0]==hw_sclk && ioPin[1]==hw_mosi); + PinManagerPinType cspins[3] = { { ioPin[2], true }, { ioPin[3], true }, { ioPin[4], true } }; + if (!pinManager.allocateMultiplePins(cspins, 3, PinOwner::UM_FourLineDisplay)) { type=NONE; return; } if (isHW) po = PinOwner::HW_SPI; // allow multiple allocations of HW I2C bus pins - PinManagerPinType pins[3] = { { ioPin[0], true }, { ioPin[1], true }, { ioPin[2], true } }; - if (!pinManager.allocateMultiplePins(pins, 5, po)) { - pinManager.deallocatePin(ioPin[3], PinOwner::UM_FourLineDisplay); - pinManager.deallocatePin(ioPin[4], PinOwner::UM_FourLineDisplay); + PinManagerPinType pins[2] = { { ioPin[0], true }, { ioPin[1], true } }; + if (!pinManager.allocateMultiplePins(pins, 2, po)) { + pinManager.deallocateMultiplePins(cspins, 3, PinOwner::UM_FourLineDisplay); type = NONE; return; } } else { - isHW = (ioPin[0]==i2c_scl && ioPin[1]==i2c_sda); + uint8_t hw_scl = i2c_scl<0 ? HW_PIN_SCL : i2c_scl; + uint8_t hw_sda = i2c_sda<0 ? HW_PIN_SDA : i2c_sda; + if (ioPin[0] < 0 || ioPin[1] < 0) { + ioPin[0] = hw_scl; + ioPin[1] = hw_sda; + } + isHW = (ioPin[0]==hw_scl && ioPin[1]==hw_sda); if (isHW) po = PinOwner::HW_I2C; // allow multiple allocations of HW I2C bus pins PinManagerPinType pins[2] = { {ioPin[0], true }, { ioPin[1], true } }; if (!pinManager.allocateMultiplePins(pins, 2, po)) { type=NONE; return; } @@ -1019,8 +1030,8 @@ class FourLineDisplayUsermod : public Usermod { oappend(SET_F("addOption(dd,'SSD1305 128x64',5);")); oappend(SET_F("addOption(dd,'SSD1306 SPI',6);")); oappend(SET_F("addOption(dd,'SSD1306 SPI 128x64',7);")); - oappend(SET_F("addInfo('4LineDisplay:pin[]',0,'I2C/SPI CLK');")); - oappend(SET_F("addInfo('4LineDisplay:pin[]',1,'I2C/SPI DTA');")); + oappend(SET_F("addInfo('4LineDisplay:pin[]',0,'I2C/SPI CLK (-1 use global)');")); + oappend(SET_F("addInfo('4LineDisplay:pin[]',1,'I2C/SPI DTA (-1 use global)');")); oappend(SET_F("addInfo('4LineDisplay:pin[]',2,'SPI CS');")); oappend(SET_F("addInfo('4LineDisplay:pin[]',3,'SPI DC');")); oappend(SET_F("addInfo('4LineDisplay:pin[]',4,'SPI RST');")); @@ -1071,7 +1082,7 @@ class FourLineDisplayUsermod : public Usermod { bool readFromConfig(JsonObject& root) { bool needsRedraw = false; DisplayType newType = type; - int8_t newPin[5]; for (byte i=0; i<5; i++) newPin[i] = ioPin[i]; + int8_t oldPin[5]; for (byte i=0; i<5; i++) oldPin[i] = ioPin[i]; JsonObject top = root[FPSTR(_name)]; if (top.isNull()) { @@ -1082,7 +1093,7 @@ class FourLineDisplayUsermod : public Usermod { enabled = top[FPSTR(_enabled)] | enabled; newType = top["type"] | newType; - for (byte i=0; i<5; i++) newPin[i] = top["pin"][i] | ioPin[i]; + for (byte i=0; i<5; i++) ioPin[i] = top["pin"][i] | ioPin[i]; flip = top[FPSTR(_flip)] | flip; contrast = top[FPSTR(_contrast)] | contrast; #ifndef ARDUINO_ARCH_ESP32 @@ -1102,26 +1113,31 @@ class FourLineDisplayUsermod : public Usermod { DEBUG_PRINT(FPSTR(_name)); if (!initDone) { // first run: reading from cfg.json - for (byte i=0; i<5; i++) ioPin[i] = newPin[i]; type = newType; DEBUG_PRINTLN(F(" config loaded.")); } else { DEBUG_PRINTLN(F(" config (re)loaded.")); // changing parameters from settings page bool pinsChanged = false; - for (byte i=0; i<5; i++) if (ioPin[i] != newPin[i]) { pinsChanged = true; break; } + for (byte i=0; i<5; i++) if (ioPin[i] != oldPin[i]) { pinsChanged = true; break; } if (pinsChanged || type!=newType) { if (type != NONE) delete u8x8; PinOwner po = PinOwner::UM_FourLineDisplay; bool isSPI = (type == SSD1306_SPI || type == SSD1306_SPI64); - if (!isSPI && ioPin[0]==i2c_scl && ioPin[1]==i2c_sda) po = PinOwner::HW_I2C; // allow multiple allocations of HW I2C bus pins - if (isSPI && ioPin[0]==spi_sclk && ioPin[1]==spi_mosi && ioPin[2]==spi_cs) po = PinOwner::HW_SPI; // allow multiple allocations of HW SPI bus pins - pinManager.deallocateMultiplePins((const uint8_t *)ioPin, isSPI ? 5 : 2, po); - for (byte i=0; i<5; i++) ioPin[i] = newPin[i]; - if (ioPin[0]<0 || ioPin[1]<0) { // data & clock must be > -1 - type = NONE; - return true; - } else type = newType; + if (isSPI) { + pinManager.deallocateMultiplePins((const uint8_t *)(&oldPin[2]), 3, po); + uint8_t hw_sclk = spi_sclk<0 ? HW_PIN_CLOCKSPI : spi_sclk; + uint8_t hw_mosi = spi_mosi<0 ? HW_PIN_DATASPI : spi_mosi; + bool isHW = (oldPin[0]==hw_sclk && oldPin[1]==hw_mosi); + if (isHW) po = PinOwner::HW_SPI; + } else { + uint8_t hw_scl = i2c_scl<0 ? HW_PIN_SCL : i2c_scl; + uint8_t hw_sda = i2c_sda<0 ? HW_PIN_SDA : i2c_sda; + bool isHW = (oldPin[0]==hw_scl && oldPin[1]==hw_sda); + if (isHW) po = PinOwner::HW_I2C; + } + pinManager.deallocateMultiplePins((const uint8_t *)oldPin, 2, po); + type = newType; setup(); needsRedraw |= true; } else { diff --git a/wled00/FX.cpp b/wled00/FX.cpp index aee00737..6c797748 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -75,7 +75,7 @@ int8_t tristate_square8(uint8_t x, uint8_t pulsewidth, uint8_t attdec) { */ uint16_t mode_static(void) { SEGMENT.fill(SEGCOLOR(0)); - return /*(SEGMENT.getOption(SEG_OPTION_TRANSITIONAL)) ? FRAMETIME :*/ 350; //update faster if in transition + return 350; } static const char _data_FX_MODE_STATIC[] PROGMEM = "Solid"; @@ -2157,7 +2157,7 @@ uint16_t mode_noise16_2() //fastled_col = ColorFromPalette(SEGPALETTE, index, noise, LINEARBLEND); // With that value, look up the 8 bit colour palette value and assign it to the current LED. //SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue); - SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(index, false, PALETTE_SOLID_WRAP, 0)); + SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(index, false, PALETTE_SOLID_WRAP, 0, noise)); } return FRAMETIME; @@ -2182,7 +2182,7 @@ uint16_t mode_noise16_3() //fastled_col = ColorFromPalette(SEGPALETTE, index, noise, LINEARBLEND); // With that value, look up the 8 bit colour palette value and assign it to the current LED. //SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue); - SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(index, false, PALETTE_SOLID_WRAP, 0)); + SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(index, false, PALETTE_SOLID_WRAP, 0, noise)); } return FRAMETIME; @@ -3987,7 +3987,7 @@ uint16_t mode_flow(void) { uint8_t colorIndex = (i * 255 / zoneLen) - counter; uint16_t led = (z & 0x01) ? i : (zoneLen -1) -i; - if (SEGMENT.getOption(SEG_OPTION_REVERSED)) led = (zoneLen -1) -led; + if (SEGMENT.reverse) led = (zoneLen -1) -led; SEGMENT.setPixelColor(pos + led, SEGMENT.color_from_palette(colorIndex, false, true, 255)); } } @@ -4928,7 +4928,7 @@ uint16_t mode_2Dgameoflife(void) { // Written by Ewoud Wijma, inspired by https: SEGENV.aux1 = SEGENV.aux0; SEGENV.aux0 = crc; - return (SEGMENT.getOption(SEG_OPTION_TRANSITIONAL)) ? FRAMETIME : FRAMETIME_FIXED * (128-(SEGMENT.speed>>1)); // update only when appropriate time passes (in 42 FPS slots) + return FRAMETIME_FIXED * (128-(SEGMENT.speed>>1)); // update only when appropriate time passes (in 42 FPS slots) } // mode_2Dgameoflife() static const char _data_FX_MODE_2DGAMEOFLIFE[] PROGMEM = "Game Of Life@!,;!,!;!;2d"; diff --git a/wled00/FX.h b/wled00/FX.h index b160622d..486c9af4 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -344,7 +344,7 @@ typedef enum mapping1D2D { M12_Block = 3 } mapping1D2D_t; -// segment, 68 (92 in memory) bytes +// segment, 72 bytes typedef struct Segment { public: uint16_t start; // start index / start X coordinate 2D (left) @@ -357,34 +357,38 @@ typedef struct Segment { union { uint16_t options; //bit pattern: msb first: [transposed mirrorY reverseY] transitional (tbd) paused needspixelstate mirrored on reverse selected struct { - bool selected : 1; // 0 : selected - bool reverse : 1; // 1 : reversed - bool on : 1; // 2 : is On - bool mirror : 1; // 3 : mirrored - bool pxs : 1; // 4 : indicates that the effect does not use FRAMETIME or needs getPixelColor (?) - bool freeze : 1; // 5 : paused/frozen - bool reset : 1; // 6 : indicates that Segment runtime requires reset - bool transitional: 1; // 7 : transitional (there is transition occuring) - bool reverse_y : 1; // 8 : reversed Y (2D) - bool mirror_y : 1; // 9 : mirrored Y (2D) - bool transpose : 1; // 10 : transposed (2D, swapped X & Y) - uint8_t map1D2D : 2; // 11-12 : mapping for 1D effect on 2D (0-strip, 1-expand vertically, 2-circular, 3-rectangular) - uint8_t soundSim : 3; // 13-15 : 0-7 sound simulation types + bool selected : 1; // 0 : selected + bool reverse : 1; // 1 : reversed + bool on : 1; // 2 : is On + bool mirror : 1; // 3 : mirrored + bool pxs : 1; // 4 : indicates that the effect does not use FRAMETIME or needs getPixelColor (?) + bool freeze : 1; // 5 : paused/frozen + bool reset : 1; // 6 : indicates that Segment runtime requires reset + bool transitional: 1; // 7 : transitional (there is transition occuring) + bool reverse_y : 1; // 8 : reversed Y (2D) + bool mirror_y : 1; // 9 : mirrored Y (2D) + bool transpose : 1; // 10 : transposed (2D, swapped X & Y) + uint8_t map1D2D : 3; // 11-13 : mapping for 1D effect on 2D (0-use as strip, 1-expand vertically, 2-circular/arc, 3-rectangular/corner, ...) + uint8_t soundSim : 2; // 14-15 : 0-3 sound simulation types }; }; uint8_t grouping, spacing; + //struct { + // uint8_t grouping : 4; // maximum 15 pixels in a group + // uint8_t spacing : 4; // maximum 15 pixels per gap + //}; uint8_t opacity; uint32_t colors[NUM_COLORS]; - uint8_t cct; //0==1900K, 255==10091K - uint8_t custom1, custom2; // custom FX parameters/sliders + uint8_t cct; //0==1900K, 255==10091K + uint8_t custom1, custom2; // custom FX parameters/sliders struct { - uint8_t custom3 : 5; // reduced range slider (0-31) - bool check1 : 1; // checkmark 1 - bool check2 : 1; // checkmark 2 - bool check3 : 1; // checkmark 3 + uint8_t custom3 : 5; // reduced range slider (0-31) + bool check1 : 1; // checkmark 1 + bool check2 : 1; // checkmark 2 + bool check3 : 1; // checkmark 3 }; - uint16_t startY; // start Y coodrinate 2D (top) - uint16_t stopY; // stop Y coordinate 2D (bottom) + uint8_t startY; // start Y coodrinate 2D (top); there should be no more than 255 rows + uint8_t stopY; // stop Y coordinate 2D (bottom); there should be no more than 255 rows char *name; // runtime data @@ -491,18 +495,18 @@ typedef struct Segment { Segment& operator= (Segment &&orig) noexcept; // move assignment #ifdef WLED_DEBUG - size_t getSize() { return sizeof(Segment) + (data?_dataLen:0) + (name?strlen(name):0) + (_t?sizeof(Transition):0) + (!Segment::_globalLeds && leds?sizeof(CRGB)*length():0); } + size_t getSize() const { return sizeof(Segment) + (data?_dataLen:0) + (name?strlen(name):0) + (_t?sizeof(Transition):0) + (!Segment::_globalLeds && leds?sizeof(CRGB)*length():0); } #endif - inline bool getOption(uint8_t n) { return ((options >> n) & 0x01); } - inline bool isSelected(void) { return selected; } - inline bool isActive(void) { return stop > start; } - inline bool is2D(void) { return !(startY == 0 && stopY == 1); } - inline uint16_t width(void) { return stop - start; } // segment width in physical pixels (length if 1D) - inline uint16_t height(void) { return stopY - startY; } // segment height (if 2D) in physical pixels - inline uint16_t length(void) { return width() * height(); } // segment length (count) in physical pixels - inline uint16_t groupLength(void) { return grouping + spacing; } - inline uint8_t getLightCapabilities(void) { return _capabilities; } + inline bool getOption(uint8_t n) const { return ((options >> n) & 0x01); } + inline bool isSelected(void) const { return selected; } + inline bool isActive(void) const { return stop > start; } + inline bool is2D(void) const { return !(startY == 0 && stopY == 1); } + inline uint16_t width(void) const { return stop - start; } // segment width in physical pixels (length if 1D) + inline uint16_t height(void) const { return stopY - startY; } // segment height (if 2D) in physical pixels + inline uint16_t length(void) const { return width() * height(); } // segment length (count) in physical pixels + inline uint16_t groupLength(void) const { return grouping + spacing; } + inline uint8_t getLightCapabilities(void) const { return _capabilities; } static uint16_t getUsedSegmentData(void) { return _usedSegmentData; } static void addUsedSegmentData(int len) { _usedSegmentData += len; } @@ -511,11 +515,11 @@ typedef struct Segment { void setCCT(uint16_t k); void setOpacity(uint8_t o); void setOption(uint8_t n, bool val); - uint8_t differs(Segment& b); + uint8_t differs(Segment& b) const; void refreshLightCapabilities(void); // runtime data functions - inline uint16_t dataSize(void) { return _dataLen; } + inline uint16_t dataSize(void) const { return _dataLen; } bool allocateData(size_t len); void deallocateData(void); void resetIfRequired(void); @@ -540,7 +544,7 @@ typedef struct Segment { CRGBPalette16 ¤tPalette(CRGBPalette16 &tgt, uint8_t paletteID); // 1D strip - uint16_t virtualLength(void); + uint16_t virtualLength(void) const; void setPixelColor(int n, uint32_t c); // set relative pixel within segment with color void setPixelColor(int n, byte r, byte g, byte b, byte w = 0) { setPixelColor(n, RGBW32(r,g,b,w)); } // automatically inline void setPixelColor(int n, CRGB c) { setPixelColor(n, RGBW32(c.r,c.g,c.b,0)); } // automatically inline @@ -564,8 +568,8 @@ typedef struct Segment { uint32_t color_wheel(uint8_t pos); // 2D matrix - uint16_t virtualWidth(void); - uint16_t virtualHeight(void); + uint16_t virtualWidth(void) const; + uint16_t virtualHeight(void) const; #ifndef WLED_DISABLE_2D uint16_t XY(uint16_t x, uint16_t y); // support function to get relative index within segment (for leds[]) void setPixelColorXY(int x, int y, uint32_t c); // set relative pixel within segment with color @@ -627,7 +631,7 @@ typedef struct Segment { void wu_pixel(uint32_t x, uint32_t y, CRGB c) {} #endif } segment; -//static int i = sizeof(Segment); +//static int segSize = sizeof(Segment); // main "strip" class class WS2812FX { // 96 bytes diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 8e112f82..dedff0ef 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -386,14 +386,14 @@ void Segment::setOption(uint8_t n, bool val) { } // 2D matrix -uint16_t Segment::virtualWidth() { +uint16_t Segment::virtualWidth() const { uint16_t groupLen = groupLength(); uint16_t vWidth = ((transpose ? height() : width()) + groupLen - 1) / groupLen; if (mirror) vWidth = (vWidth + 1) /2; // divide by 2 if mirror, leave at least a single LED return vWidth; } -uint16_t Segment::virtualHeight() { +uint16_t Segment::virtualHeight() const { uint16_t groupLen = groupLength(); uint16_t vHeight = ((transpose ? width() : height()) + groupLen - 1) / groupLen; if (mirror_y) vHeight = (vHeight + 1) /2; // divide by 2 if mirror, leave at least a single LED @@ -401,7 +401,7 @@ uint16_t Segment::virtualHeight() { } // 1D strip -uint16_t Segment::virtualLength() { +uint16_t Segment::virtualLength() const { #ifndef WLED_DISABLE_2D if (is2D()) { uint16_t vW = virtualWidth(); @@ -561,7 +561,7 @@ uint32_t Segment::getPixelColor(uint16_t i) return strip.getPixelColor(i); } -uint8_t Segment::differs(Segment& b) { +uint8_t Segment::differs(Segment& b) const { uint8_t d = 0; if (start != b.start) d |= SEG_DIFFERS_BOUNDS; if (stop != b.stop) d |= SEG_DIFFERS_BOUNDS; @@ -583,7 +583,7 @@ uint8_t Segment::differs(Segment& b) { if ((options & 0b1111111100101110) != (b.options & 0b1111111100101110)) d |= SEG_DIFFERS_OPT; if ((options & 0x01) != (b.options & 0x01)) d |= SEG_DIFFERS_SEL; - for (uint8_t i = 0; i < NUM_COLORS; i++) if (colors[i] != b.colors[i]) d |= SEG_DIFFERS_COL; + for (uint8_t i = 0; i < NUM_COLORS; i++) if (colors[i] != b.colors[i]) d |= SEG_DIFFERS_COL; return d; } @@ -1106,7 +1106,7 @@ void WS2812FX::setBrightness(uint8_t b, bool direct) { _brightness = b; if (_brightness == 0) { //unfreeze all segments on power off for (segment &seg : _segments) { - seg.setOption(SEG_OPTION_FREEZE, false); + seg.freeze = false; } } if (direct) { @@ -1319,7 +1319,7 @@ void WS2812FX::makeAutoSegments(bool forceReset) { _segments.clear(); for (size_t i = 0; i < s; i++) { Segment seg = Segment(segStarts[i], segStops[i]); - seg.setOption(SEG_OPTION_SELECTED, true); + seg.selected = true; _segments.push_back(seg); } _mainSegment = 0; @@ -1394,7 +1394,7 @@ void WS2812FX::setTransitionMode(bool t) void WS2812FX::printSize() { size_t size = 0; - for (Segment seg : _segments) size += seg.getSize(); + for (const Segment seg : _segments) size += seg.getSize(); DEBUG_PRINTF("Segments: %d -> %uB\n", _segments.size(), size); DEBUG_PRINTF("Modes: %d*%d=%uB\n", sizeof(mode_ptr), _mode.size(), (_mode.capacity()*sizeof(mode_ptr))); DEBUG_PRINTF("Data: %d*%d=%uB\n", sizeof(const char *), _modeData.size(), (_modeData.capacity()*sizeof(const char *))); diff --git a/wled00/bus_wrapper.h b/wled00/bus_wrapper.h index 6a343442..e2783236 100644 --- a/wled00/bus_wrapper.h +++ b/wled00/bus_wrapper.h @@ -33,6 +33,11 @@ #define I_8266_U1_TM1_4 14 #define I_8266_DM_TM1_4 15 #define I_8266_BB_TM1_4 16 +//TM1829 (RGB) +#define I_8266_U0_TM2_3 39 +#define I_8266_U1_TM2_3 40 +#define I_8266_DM_TM2_3 41 +#define I_8266_BB_TM2_3 42 /*** ESP32 Neopixel methods ***/ //RGB @@ -52,6 +57,11 @@ #define I_32_I0_TM1_4 27 #define I_32_I1_TM1_4 28 //Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S) +//TM1829 (RGB) +#define I_32_RN_TM2_3 43 +#define I_32_I0_TM2_3 44 +#define I_32_I1_TM2_3 45 +//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S) //APA102 #define I_HS_DOT_3 29 //hardware SPI @@ -69,6 +79,10 @@ #define I_HS_P98_3 35 #define I_SS_P98_3 36 +//LPD6803 +#define I_HS_LPO_3 37 +#define I_SS_LPO_3 38 + /*** ESP8266 Neopixel methods ***/ #ifdef ESP8266 @@ -92,6 +106,11 @@ #define B_8266_U1_TM1_4 NeoPixelBrightnessBus #define B_8266_DM_TM1_4 NeoPixelBrightnessBus #define B_8266_BB_TM1_4 NeoPixelBrightnessBus +//TM1829 (RGB) +#define B_8266_U0_TM2_4 NeoPixelBrightnessBus +#define B_8266_U1_TM2_4 NeoPixelBrightnessBus +#define B_8266_DM_TM2_4 NeoPixelBrightnessBus +#define B_8266_BB_TM2_4 NeoPixelBrightnessBus #endif /*** ESP32 Neopixel methods ***/ @@ -129,6 +148,15 @@ #define B_32_I1_TM1_4 NeoPixelBrightnessBus #endif //Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S) +//TM1829 (RGB) +#define B_32_RN_TM2_3 NeoPixelBrightnessBus +#ifndef CONFIG_IDF_TARGET_ESP32C3 +#define B_32_I0_TM2_3 NeoPixelBrightnessBus +#endif +#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) +#define B_32_I1_TM2_3 NeoPixelBrightnessBus +#endif +//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S) #endif @@ -140,6 +168,10 @@ #define B_HS_LPD_3 NeoPixelBrightnessBus #define B_SS_LPD_3 NeoPixelBrightnessBus +//LPD6803 +#define B_HS_LPO_3 NeoPixelBrightnessBus +#define B_SS_LPO_3 NeoPixelBrightnessBus + //WS2801 #if defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==40000 #define B_HS_WS1_3 NeoPixelBrightnessBus // fastest bus speed (not existing method?) @@ -193,8 +225,13 @@ class PolyBus { case I_8266_U1_TM1_4: beginTM1814(busPtr); break; case I_8266_DM_TM1_4: beginTM1814(busPtr); break; case I_8266_BB_TM1_4: beginTM1814(busPtr); break; + case I_8266_U0_TM2_3: (static_cast(busPtr))->Begin(); break; + case I_8266_U1_TM2_3: (static_cast(busPtr))->Begin(); break; + case I_8266_DM_TM2_3: (static_cast(busPtr))->Begin(); break; + case I_8266_BB_TM2_3: (static_cast(busPtr))->Begin(); break; case I_HS_DOT_3: (static_cast(busPtr))->Begin(); break; case I_HS_LPD_3: (static_cast(busPtr))->Begin(); break; + case I_HS_LPO_3: (static_cast(busPtr))->Begin(); break; case I_HS_WS1_3: (static_cast(busPtr))->Begin(); break; case I_HS_P98_3: (static_cast(busPtr))->Begin(); break; #endif @@ -221,20 +258,25 @@ class PolyBus { case I_32_I1_400_3: (static_cast(busPtr))->Begin(); break; #endif case I_32_RN_TM1_4: beginTM1814(busPtr); break; + case I_32_RN_TM2_3: (static_cast(busPtr))->Begin(); break; #ifndef CONFIG_IDF_TARGET_ESP32C3 case I_32_I0_TM1_4: beginTM1814(busPtr); break; + case I_32_I0_TM2_3: (static_cast(busPtr))->Begin(); break; #endif #if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) case I_32_I1_TM1_4: beginTM1814(busPtr); break; + case I_32_I1_TM2_3: (static_cast(busPtr))->Begin(); break; #endif // ESP32 can (and should, to avoid inadvertantly driving the chip select signal) specify the pins used for SPI, but only in begin() case I_HS_DOT_3: (static_cast(busPtr))->Begin(pins[1], -1, pins[0], -1); break; case I_HS_LPD_3: (static_cast(busPtr))->Begin(pins[1], -1, pins[0], -1); break; + case I_HS_LPO_3: (static_cast(busPtr))->Begin(pins[1], -1, pins[0], -1); break; case I_HS_WS1_3: (static_cast(busPtr))->Begin(pins[1], -1, pins[0], -1); break; case I_HS_P98_3: (static_cast(busPtr))->Begin(pins[1], -1, pins[0], -1); break; #endif case I_SS_DOT_3: (static_cast(busPtr))->Begin(); break; case I_SS_LPD_3: (static_cast(busPtr))->Begin(); break; + case I_SS_LPO_3: (static_cast(busPtr))->Begin(); break; case I_SS_WS1_3: (static_cast(busPtr))->Begin(); break; case I_SS_P98_3: (static_cast(busPtr))->Begin(); break; } @@ -260,6 +302,10 @@ class PolyBus { case I_8266_U1_TM1_4: busPtr = new B_8266_U1_TM1_4(len, pins[0]); break; case I_8266_DM_TM1_4: busPtr = new B_8266_DM_TM1_4(len, pins[0]); break; case I_8266_BB_TM1_4: busPtr = new B_8266_BB_TM1_4(len, pins[0]); break; + case I_8266_U0_TM2_3: busPtr = new B_8266_U0_TM2_4(len, pins[0]); break; + case I_8266_U1_TM2_3: busPtr = new B_8266_U1_TM2_4(len, pins[0]); break; + case I_8266_DM_TM2_3: busPtr = new B_8266_DM_TM2_4(len, pins[0]); break; + case I_8266_BB_TM2_3: busPtr = new B_8266_BB_TM2_4(len, pins[0]); break; #endif #ifdef ARDUINO_ARCH_ESP32 case I_32_RN_NEO_3: busPtr = new B_32_RN_NEO_3(len, pins[0], (NeoBusChannel)channel); break; @@ -284,11 +330,14 @@ class PolyBus { case I_32_I1_400_3: busPtr = new B_32_I1_400_3(len, pins[0]); break; #endif case I_32_RN_TM1_4: busPtr = new B_32_RN_TM1_4(len, pins[0], (NeoBusChannel)channel); break; + case I_32_RN_TM2_3: busPtr = new B_32_RN_TM2_3(len, pins[0], (NeoBusChannel)channel); break; #ifndef CONFIG_IDF_TARGET_ESP32C3 case I_32_I0_TM1_4: busPtr = new B_32_I0_TM1_4(len, pins[0]); break; + case I_32_I0_TM2_3: busPtr = new B_32_I0_TM2_3(len, pins[0]); break; #endif #if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) case I_32_I1_TM1_4: busPtr = new B_32_I1_TM1_4(len, pins[0]); break; + case I_32_I1_TM2_3: busPtr = new B_32_I1_TM2_3(len, pins[0]); break; #endif #endif // for 2-wire: pins[1] is clk, pins[0] is dat. begin expects (len, clk, dat) @@ -296,6 +345,8 @@ class PolyBus { case I_SS_DOT_3: busPtr = new B_SS_DOT_3(len, pins[1], pins[0]); break; case I_HS_LPD_3: busPtr = new B_HS_LPD_3(len, pins[1], pins[0]); break; case I_SS_LPD_3: busPtr = new B_SS_LPD_3(len, pins[1], pins[0]); break; + case I_HS_LPO_3: busPtr = new B_HS_LPO_3(len, pins[1], pins[0]); break; + case I_SS_LPO_3: busPtr = new B_SS_LPO_3(len, pins[1], pins[0]); break; case I_HS_WS1_3: busPtr = new B_HS_WS1_3(len, pins[1], pins[0]); break; case I_SS_WS1_3: busPtr = new B_SS_WS1_3(len, pins[1], pins[0]); break; case I_HS_P98_3: busPtr = new B_HS_P98_3(len, pins[1], pins[0]); break; @@ -324,6 +375,10 @@ class PolyBus { case I_8266_U1_TM1_4: (static_cast(busPtr))->Show(); break; case I_8266_DM_TM1_4: (static_cast(busPtr))->Show(); break; case I_8266_BB_TM1_4: (static_cast(busPtr))->Show(); break; + case I_8266_U0_TM2_3: (static_cast(busPtr))->Show(); break; + case I_8266_U1_TM2_3: (static_cast(busPtr))->Show(); break; + case I_8266_DM_TM2_3: (static_cast(busPtr))->Show(); break; + case I_8266_BB_TM2_3: (static_cast(busPtr))->Show(); break; #endif #ifdef ARDUINO_ARCH_ESP32 case I_32_RN_NEO_3: (static_cast(busPtr))->Show(); break; @@ -348,17 +403,22 @@ class PolyBus { case I_32_I1_400_3: (static_cast(busPtr))->Show(); break; #endif case I_32_RN_TM1_4: (static_cast(busPtr))->Show(); break; + case I_32_RN_TM2_3: (static_cast(busPtr))->Show(); break; #ifndef CONFIG_IDF_TARGET_ESP32C3 case I_32_I0_TM1_4: (static_cast(busPtr))->Show(); break; + case I_32_I0_TM2_3: (static_cast(busPtr))->Show(); break; #endif #if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) case I_32_I1_TM1_4: (static_cast(busPtr))->Show(); break; + case I_32_I1_TM2_3: (static_cast(busPtr))->Show(); break; #endif #endif case I_HS_DOT_3: (static_cast(busPtr))->Show(); break; case I_SS_DOT_3: (static_cast(busPtr))->Show(); break; case I_HS_LPD_3: (static_cast(busPtr))->Show(); break; case I_SS_LPD_3: (static_cast(busPtr))->Show(); break; + case I_HS_LPO_3: (static_cast(busPtr))->Show(); break; + case I_SS_LPO_3: (static_cast(busPtr))->Show(); break; case I_HS_WS1_3: (static_cast(busPtr))->Show(); break; case I_SS_WS1_3: (static_cast(busPtr))->Show(); break; case I_HS_P98_3: (static_cast(busPtr))->Show(); break; @@ -385,6 +445,10 @@ class PolyBus { case I_8266_U1_TM1_4: return (static_cast(busPtr))->CanShow(); break; case I_8266_DM_TM1_4: return (static_cast(busPtr))->CanShow(); break; case I_8266_BB_TM1_4: return (static_cast(busPtr))->CanShow(); break; + case I_8266_U0_TM2_3: return (static_cast(busPtr))->CanShow(); break; + case I_8266_U1_TM2_3: return (static_cast(busPtr))->CanShow(); break; + case I_8266_DM_TM2_3: return (static_cast(busPtr))->CanShow(); break; + case I_8266_BB_TM2_3: return (static_cast(busPtr))->CanShow(); break; #endif #ifdef ARDUINO_ARCH_ESP32 case I_32_RN_NEO_3: return (static_cast(busPtr))->CanShow(); break; @@ -409,17 +473,22 @@ class PolyBus { case I_32_I1_400_3: return (static_cast(busPtr))->CanShow(); break; #endif case I_32_RN_TM1_4: return (static_cast(busPtr))->CanShow(); break; + case I_32_RN_TM2_3: return (static_cast(busPtr))->CanShow(); break; #ifndef CONFIG_IDF_TARGET_ESP32C3 case I_32_I0_TM1_4: return (static_cast(busPtr))->CanShow(); break; + case I_32_I0_TM2_3: return (static_cast(busPtr))->CanShow(); break; #endif #if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) case I_32_I1_TM1_4: return (static_cast(busPtr))->CanShow(); break; + case I_32_I1_TM2_3: return (static_cast(busPtr))->CanShow(); break; #endif #endif case I_HS_DOT_3: return (static_cast(busPtr))->CanShow(); break; case I_SS_DOT_3: return (static_cast(busPtr))->CanShow(); break; case I_HS_LPD_3: return (static_cast(busPtr))->CanShow(); break; case I_SS_LPD_3: return (static_cast(busPtr))->CanShow(); break; + case I_HS_LPO_3: return (static_cast(busPtr))->CanShow(); break; + case I_SS_LPO_3: return (static_cast(busPtr))->CanShow(); break; case I_HS_WS1_3: return (static_cast(busPtr))->CanShow(); break; case I_SS_WS1_3: return (static_cast(busPtr))->CanShow(); break; case I_HS_P98_3: return (static_cast(busPtr))->CanShow(); break; @@ -470,6 +539,10 @@ class PolyBus { case I_8266_U1_TM1_4: (static_cast(busPtr))->SetPixelColor(pix, col); break; case I_8266_DM_TM1_4: (static_cast(busPtr))->SetPixelColor(pix, col); break; case I_8266_BB_TM1_4: (static_cast(busPtr))->SetPixelColor(pix, col); break; + case I_8266_U0_TM2_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; + case I_8266_U1_TM2_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; + case I_8266_DM_TM2_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; + case I_8266_BB_TM2_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; #endif #ifdef ARDUINO_ARCH_ESP32 case I_32_RN_NEO_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; @@ -494,17 +567,22 @@ class PolyBus { case I_32_I1_400_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; #endif case I_32_RN_TM1_4: (static_cast(busPtr))->SetPixelColor(pix, col); break; + case I_32_RN_TM2_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; #ifndef CONFIG_IDF_TARGET_ESP32C3 case I_32_I0_TM1_4: (static_cast(busPtr))->SetPixelColor(pix, col); break; + case I_32_I0_TM2_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; #endif #if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) case I_32_I1_TM1_4: (static_cast(busPtr))->SetPixelColor(pix, col); break; + case I_32_I1_TM2_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; #endif #endif case I_HS_DOT_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_SS_DOT_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_HS_LPD_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_SS_LPD_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; + case I_HS_LPO_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; + case I_SS_LPO_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_HS_WS1_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_SS_WS1_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_HS_P98_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; @@ -531,6 +609,10 @@ class PolyBus { case I_8266_U1_TM1_4: (static_cast(busPtr))->SetBrightness(b); break; case I_8266_DM_TM1_4: (static_cast(busPtr))->SetBrightness(b); break; case I_8266_BB_TM1_4: (static_cast(busPtr))->SetBrightness(b); break; + case I_8266_U0_TM2_3: (static_cast(busPtr))->SetBrightness(b); break; + case I_8266_U1_TM2_3: (static_cast(busPtr))->SetBrightness(b); break; + case I_8266_DM_TM2_3: (static_cast(busPtr))->SetBrightness(b); break; + case I_8266_BB_TM2_3: (static_cast(busPtr))->SetBrightness(b); break; #endif #ifdef ARDUINO_ARCH_ESP32 case I_32_RN_NEO_3: (static_cast(busPtr))->SetBrightness(b); break; @@ -555,17 +637,22 @@ class PolyBus { case I_32_I1_400_3: (static_cast(busPtr))->SetBrightness(b); break; #endif case I_32_RN_TM1_4: (static_cast(busPtr))->SetBrightness(b); break; + case I_32_RN_TM2_3: (static_cast(busPtr))->SetBrightness(b); break; #ifndef CONFIG_IDF_TARGET_ESP32C3 case I_32_I0_TM1_4: (static_cast(busPtr))->SetBrightness(b); break; + case I_32_I0_TM2_3: (static_cast(busPtr))->SetBrightness(b); break; #endif #if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) case I_32_I1_TM1_4: (static_cast(busPtr))->SetBrightness(b); break; + case I_32_I1_TM2_3: (static_cast(busPtr))->SetBrightness(b); break; #endif #endif case I_HS_DOT_3: (static_cast(busPtr))->SetBrightness(b); break; case I_SS_DOT_3: (static_cast(busPtr))->SetBrightness(b); break; case I_HS_LPD_3: (static_cast(busPtr))->SetBrightness(b); break; case I_SS_LPD_3: (static_cast(busPtr))->SetBrightness(b); break; + case I_HS_LPO_3: (static_cast(busPtr))->SetBrightness(b); break; + case I_SS_LPO_3: (static_cast(busPtr))->SetBrightness(b); break; case I_HS_WS1_3: (static_cast(busPtr))->SetBrightness(b); break; case I_SS_WS1_3: (static_cast(busPtr))->SetBrightness(b); break; case I_HS_P98_3: (static_cast(busPtr))->SetBrightness(b); break; @@ -593,6 +680,10 @@ class PolyBus { case I_8266_U1_TM1_4: col = (static_cast(busPtr))->GetPixelColor(pix); break; case I_8266_DM_TM1_4: col = (static_cast(busPtr))->GetPixelColor(pix); break; case I_8266_BB_TM1_4: col = (static_cast(busPtr))->GetPixelColor(pix); break; + case I_8266_U0_TM2_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; + case I_8266_U1_TM2_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; + case I_8266_DM_TM2_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; + case I_8266_BB_TM2_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; #endif #ifdef ARDUINO_ARCH_ESP32 case I_32_RN_NEO_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; @@ -617,17 +708,22 @@ class PolyBus { case I_32_I1_400_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; #endif case I_32_RN_TM1_4: col = (static_cast(busPtr))->GetPixelColor(pix); break; + case I_32_RN_TM2_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; #ifndef CONFIG_IDF_TARGET_ESP32C3 case I_32_I0_TM1_4: col = (static_cast(busPtr))->GetPixelColor(pix); break; + case I_32_I0_TM2_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; #endif #if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) case I_32_I1_TM1_4: col = (static_cast(busPtr))->GetPixelColor(pix); break; + case I_32_I1_TM2_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; #endif #endif case I_HS_DOT_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; case I_SS_DOT_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; case I_HS_LPD_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; case I_SS_LPD_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; + case I_HS_LPO_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; + case I_SS_LPO_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; case I_HS_WS1_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; case I_SS_WS1_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; case I_HS_P98_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; @@ -674,6 +770,10 @@ class PolyBus { case I_8266_U1_TM1_4: delete (static_cast(busPtr)); break; case I_8266_DM_TM1_4: delete (static_cast(busPtr)); break; case I_8266_BB_TM1_4: delete (static_cast(busPtr)); break; + case I_8266_U0_TM2_3: delete (static_cast(busPtr)); break; + case I_8266_U1_TM2_3: delete (static_cast(busPtr)); break; + case I_8266_DM_TM2_3: delete (static_cast(busPtr)); break; + case I_8266_BB_TM2_3: delete (static_cast(busPtr)); break; #endif #ifdef ARDUINO_ARCH_ESP32 case I_32_RN_NEO_3: delete (static_cast(busPtr)); break; @@ -698,17 +798,22 @@ class PolyBus { case I_32_I1_400_3: delete (static_cast(busPtr)); break; #endif case I_32_RN_TM1_4: delete (static_cast(busPtr)); break; + case I_32_RN_TM2_3: delete (static_cast(busPtr)); break; #ifndef CONFIG_IDF_TARGET_ESP32C3 case I_32_I0_TM1_4: delete (static_cast(busPtr)); break; + case I_32_I0_TM2_3: delete (static_cast(busPtr)); break; #endif #if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) case I_32_I1_TM1_4: delete (static_cast(busPtr)); break; + case I_32_I1_TM2_3: delete (static_cast(busPtr)); break; #endif #endif case I_HS_DOT_3: delete (static_cast(busPtr)); break; case I_SS_DOT_3: delete (static_cast(busPtr)); break; case I_HS_LPD_3: delete (static_cast(busPtr)); break; case I_SS_LPD_3: delete (static_cast(busPtr)); break; + case I_HS_LPO_3: delete (static_cast(busPtr)); break; + case I_SS_LPO_3: delete (static_cast(busPtr)); break; case I_HS_WS1_3: delete (static_cast(busPtr)); break; case I_SS_WS1_3: delete (static_cast(busPtr)); break; case I_HS_P98_3: delete (static_cast(busPtr)); break; @@ -733,6 +838,7 @@ class PolyBus { switch (busType) { case TYPE_APA102: t = I_SS_DOT_3; break; case TYPE_LPD8806: t = I_SS_LPD_3; break; + case TYPE_LPD6803: t = I_SS_LPO_3; break; case TYPE_WS2801: t = I_SS_WS1_3; break; case TYPE_P9813: t = I_SS_P98_3; break; default: t=I_NONE; @@ -753,6 +859,8 @@ class PolyBus { return I_8266_U0_400_3 + offset; case TYPE_TM1814: return I_8266_U0_TM1_4 + offset; + case TYPE_TM1829: + return I_8266_U0_TM2_3 + offset; } #else //ESP32 uint8_t offset = 0; //0 = RMT (num 0-7) 8 = I2S0 9 = I2S1 @@ -773,6 +881,8 @@ class PolyBus { return I_32_RN_400_3 + offset; case TYPE_TM1814: return I_32_RN_TM1_4 + offset; + case TYPE_TM1829: + return I_32_RN_TM2_3 + offset; } #endif } diff --git a/wled00/button.cpp b/wled00/button.cpp index b472f927..81e3c8c3 100644 --- a/wled00/button.cpp +++ b/wled00/button.cpp @@ -197,10 +197,10 @@ void handleAnalog(uint8_t b) // otherwise use "double press" for segment selection Segment& seg = strip.getSegment(macroDoublePress[b]); if (aRead == 0) { - seg.setOption(SEG_OPTION_ON, 0); // off + seg.on = false; // off } else { seg.setOpacity(aRead); - seg.setOption(SEG_OPTION_ON, 1); + seg.on = true; } // this will notify clients of update (websockets,mqtt,etc) updateInterfaces(CALL_MODE_BUTTON); diff --git a/wled00/cfg.cpp b/wled00/cfg.cpp index f5528a43..6ee4a191 100644 --- a/wled00/cfg.cpp +++ b/wled00/cfg.cpp @@ -283,18 +283,12 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { JsonArray hw_if_spi = hw[F("if")][F("spi-pin")]; CJSON(spi_mosi, hw_if_spi[0]); CJSON(spi_sclk, hw_if_spi[1]); - CJSON(spi_cs, hw_if_spi[2]); - PinManagerPinType spi[3] = { { spi_mosi, true }, { spi_sclk, true }, { spi_cs, true } }; - if (spi_mosi >= 0 && spi_sclk >= 0 && spi_cs >= 0 && pinManager.allocateMultiplePins(spi, 3, PinOwner::HW_SPI)) { - #ifdef ESP8266 - SPI.begin(); - #else - SPI.begin(spi_sclk, (int8_t)-1, spi_mosi, spi_cs); - #endif + PinManagerPinType spi[3] = { { spi_mosi, true }, { spi_sclk, true } }; + if (spi_mosi >= 0 && spi_sclk >= 0 && pinManager.allocateMultiplePins(spi, 2, PinOwner::HW_SPI)) { + // do not initialise bus here } else { spi_mosi = -1; spi_sclk = -1; - spi_cs = -1; } //int hw_status_pin = hw[F("status")]["pin"]; // -1 @@ -752,7 +746,6 @@ void serializeConfig() { JsonArray hw_if_spi = hw_if.createNestedArray("spi-pin"); hw_if_spi.add(spi_mosi); hw_if_spi.add(spi_sclk); - hw_if_spi.add(spi_cs); //JsonObject hw_status = hw.createNestedObject("status"); //hw_status["pin"] = -1; diff --git a/wled00/const.h b/wled00/const.h index 7a62a38d..d3953cd8 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -154,6 +154,7 @@ #define TYPE_WS2812_RGB 22 #define TYPE_GS8608 23 //same driver as WS2812, but will require signal 2x per second (else displays test pattern) #define TYPE_WS2811_400KHZ 24 //half-speed WS2812 protocol, used by very old WS2811 units +#define TYPE_TM1829 25 #define TYPE_SK6812_RGBW 30 #define TYPE_TM1814 31 //"Analog" types (PWM) (32-47) @@ -168,6 +169,7 @@ #define TYPE_APA102 51 #define TYPE_LPD8806 52 #define TYPE_P9813 53 +#define TYPE_LPD6803 54 //Network types (master broadcast) (80-95) #define TYPE_NET_DDP_RGB 80 //network DDP RGB bus (master broadcast bus) #define TYPE_NET_E131_RGB 81 //network E131 RGB bus (master broadcast bus) @@ -385,6 +387,7 @@ #if defined(ESP8266) && defined(HW_PIN_CSSPI) #undef HW_PIN_CSSPI #endif +// defaults for VSPI #ifndef HW_PIN_CLOCKSPI #define HW_PIN_CLOCKSPI SCK #endif diff --git a/wled00/data/settings_leds.htm b/wled00/data/settings_leds.htm index c531fb16..3a6c3901 100644 --- a/wled00/data/settings_leds.htm +++ b/wled00/data/settings_leds.htm @@ -176,7 +176,7 @@ gId("rf"+n).checked = (gId("rf"+n).checked || t == 31); // LEDs require data in off state if (t > 31 && t < 48) d.getElementsByName("LC"+n)[0].value = 1; // for sanity change analog count just to 1 LED } - gId("rf"+n).onclick = (t == 31) ? (function(){return false}) : (function(){}); // prevent change for TM1814 + gId("rf"+n).onclick = (t == 31) ? (()=>{return false}) : (()=>{}); // prevent change for TM1814 isRGBW |= (t == 30 || t == 31 || (t > 40 && t < 46 && t != 43)); // RGBW checkbox, TYPE_xxxx values from const.h gId("co"+n).style.display = ((t >= 80 && t < 96) || (t >= 40 && t < 48)) ? "none":"inline"; // hide color order for PWM gId("dig"+n+"w").style.display = (t == 30 || t == 31) ? "inline":"none"; // show swap channels dropdown @@ -316,9 +316,11 @@ ${i+1}: + + @@ -351,7 +353,7 @@ ${i+1}:

Reversed:
-

Skip first LEDs:
+

Skip first LEDs:

Off Refresh:

Auto-calculate white channel from RGB:
 
`; diff --git a/wled00/data/settings_um.htm b/wled00/data/settings_um.htm index 039aeaef..5adc703f 100644 --- a/wled00/data/settings_um.htm +++ b/wled00/data/settings_um.htm @@ -231,7 +231,6 @@ (only changable on ESP32, change requires reboot!)
MOSI: SCLK: - CS:
Loading settings...

diff --git a/wled00/html_settings.h b/wled00/html_settings.h index f3857ce9..1ea5e47a 100644 --- a/wled00/html_settings.h +++ b/wled00/html_settings.h @@ -236,7 +236,7 @@ const uint8_t PAGE_settings_wifi[] PROGMEM = { // Autogenerated from wled00/data/settings_leds.htm, do not edit!! -const uint16_t PAGE_settings_leds_length = 7343; +const uint16_t PAGE_settings_leds_length = 7357; const uint8_t PAGE_settings_leds[] PROGMEM = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xdd, 0x3c, 0xed, 0x76, 0xe2, 0xc6, 0x92, 0xff, 0x79, 0x8a, 0x76, 0x27, 0x71, 0xa4, 0x8b, 0x0c, 0x12, 0x1f, 0x8e, 0x07, 0x10, 0xac, @@ -351,352 +351,353 @@ const uint8_t PAGE_settings_leds[] PROGMEM = { 0xcf, 0x21, 0x3e, 0x90, 0x0f, 0xb7, 0x97, 0x37, 0xe2, 0x89, 0x31, 0xa0, 0xf8, 0x05, 0xdf, 0x53, 0xf1, 0x54, 0x3a, 0x3e, 0x63, 0x1b, 0x71, 0xeb, 0x1d, 0xe2, 0x3d, 0x6e, 0x0d, 0xe8, 0x99, 0xfb, 0x90, 0xe0, 0xa0, 0x94, 0x4b, 0x28, 0xda, 0xa1, 0x48, 0x86, 0x0c, 0xb0, 0x5c, 0x3e, 0xa0, 0xaf, - 0x52, 0xf5, 0x5d, 0xcd, 0x57, 0xb5, 0xa9, 0x09, 0xe9, 0x45, 0xaf, 0xdd, 0x9d, 0x62, 0x36, 0xa1, - 0xec, 0xc2, 0x40, 0xab, 0x53, 0x81, 0x42, 0xc5, 0x25, 0xca, 0x66, 0x77, 0x78, 0x38, 0xed, 0xb5, - 0x5e, 0x5e, 0x04, 0x5b, 0x86, 0x69, 0x4e, 0xf9, 0x67, 0x03, 0x5f, 0xb6, 0x01, 0x64, 0x5a, 0x6d, - 0xe9, 0x3d, 0x77, 0xa0, 0x44, 0x3b, 0xac, 0x5d, 0x8b, 0xa0, 0x12, 0xf8, 0xc7, 0xd2, 0x09, 0xb9, - 0x2b, 0x54, 0x3b, 0xdb, 0x80, 0x42, 0x87, 0xf2, 0x60, 0x50, 0x72, 0xa7, 0xa1, 0x55, 0x55, 0xd7, - 0x90, 0x0c, 0x08, 0xcf, 0x1a, 0x4e, 0xb9, 0xac, 0x12, 0x77, 0x58, 0xf2, 0xec, 0xe5, 0xa5, 0x09, - 0x2c, 0xba, 0x9a, 0xcb, 0xad, 0xc2, 0x05, 0xab, 0x80, 0xb1, 0x3b, 0x6d, 0x3d, 0x97, 0x92, 0x98, - 0x90, 0xe4, 0x68, 0x79, 0x84, 0xbe, 0x67, 0x43, 0x52, 0xf1, 0x60, 0x72, 0x7c, 0x83, 0x5c, 0xbd, - 0x23, 0xf3, 0x03, 0x63, 0xdd, 0xc9, 0x3d, 0x5c, 0x6b, 0xde, 0x0b, 0x38, 0x5d, 0x00, 0x95, 0x1c, - 0x70, 0x21, 0x71, 0x09, 0xb6, 0x40, 0x82, 0xad, 0xe6, 0x01, 0x30, 0xc5, 0xd1, 0xdb, 0x3e, 0x47, - 0x5f, 0x94, 0x41, 0x4e, 0xdc, 0x38, 0xd0, 0x94, 0x23, 0x4f, 0x06, 0x42, 0x38, 0x9d, 0x54, 0x98, - 0x1c, 0xc5, 0xc4, 0x99, 0x01, 0x8e, 0x2a, 0x7d, 0xda, 0xb2, 0xd5, 0x3c, 0x07, 0x5b, 0x56, 0xda, - 0xd4, 0x81, 0x09, 0xf0, 0x45, 0x06, 0xff, 0x53, 0x2e, 0x95, 0x8f, 0x37, 0x45, 0xa9, 0xe8, 0x6a, - 0x91, 0xa4, 0x4d, 0x4b, 0x58, 0x7f, 0x1b, 0xb7, 0x21, 0xdd, 0x33, 0xeb, 0xfd, 0x43, 0x23, 0xfa, - 0xbf, 0x23, 0xb0, 0x69, 0x19, 0x1e, 0xe3, 0x18, 0x87, 0x36, 0x1b, 0x1c, 0x4f, 0x5b, 0x4f, 0x4c, - 0xaf, 0x2c, 0x4b, 0x49, 0xf0, 0x58, 0x5b, 0x78, 0xa0, 0x38, 0x68, 0xa1, 0x78, 0xcb, 0xc7, 0x81, - 0xb7, 0xdb, 0xf6, 0x1e, 0x19, 0xcb, 0x97, 0xde, 0x23, 0xa4, 0x67, 0x6c, 0x42, 0xa0, 0xb4, 0xc6, - 0x8a, 0xb5, 0x43, 0xef, 0x20, 0x97, 0x04, 0x6f, 0x34, 0x21, 0x4a, 0xe8, 0xc7, 0x16, 0xbe, 0x32, - 0x4e, 0xf4, 0xff, 0xfe, 0x2f, 0x35, 0xcd, 0x96, 0x26, 0xfb, 0xf1, 0x4d, 0xd8, 0x37, 0x74, 0x19, - 0xbc, 0x85, 0xd5, 0xa1, 0x6b, 0x74, 0x1c, 0x21, 0x98, 0xfd, 0x3f, 0x96, 0x0c, 0x42, 0x25, 0xf7, - 0xa4, 0x7e, 0x78, 0xea, 0xba, 0x0a, 0xad, 0x3d, 0xc1, 0x8a, 0x6a, 0x4b, 0x33, 0x4c, 0x7c, 0x69, - 0xe6, 0x5e, 0x97, 0xdc, 0xaf, 0x86, 0xe8, 0x0c, 0x37, 0xe6, 0xba, 0x39, 0x49, 0xee, 0x98, 0x82, - 0xd7, 0xca, 0x70, 0x6d, 0x61, 0xea, 0xda, 0x23, 0xb6, 0xd7, 0x00, 0x7d, 0x46, 0x26, 0xd8, 0x2a, - 0xc9, 0x67, 0x66, 0xb0, 0xab, 0x24, 0xf7, 0x4b, 0x5f, 0x25, 0x45, 0xd0, 0x19, 0x54, 0x10, 0x33, - 0x59, 0xc5, 0x60, 0x41, 0x34, 0x4b, 0x0a, 0xa2, 0x99, 0xfa, 0x8a, 0x0b, 0x80, 0x40, 0x6b, 0xf2, - 0x66, 0x43, 0xb7, 0x64, 0x70, 0x52, 0x4d, 0xcd, 0x92, 0x6a, 0x4a, 0xd0, 0x50, 0x5c, 0xf3, 0x4f, - 0x15, 0x3d, 0xaa, 0x28, 0x79, 0x9e, 0xf9, 0x0c, 0x90, 0x20, 0x44, 0x4d, 0x4d, 0x7c, 0x71, 0x3c, - 0x10, 0x4b, 0x90, 0x49, 0xda, 0xf6, 0x5d, 0x3f, 0x34, 0xe9, 0x77, 0xd3, 0xe9, 0x94, 0x76, 0xd3, - 0x1a, 0x29, 0x1d, 0xd8, 0x6c, 0x66, 0xe3, 0x8e, 0x8c, 0x5c, 0x87, 0x60, 0x1f, 0xcf, 0x49, 0x05, - 0x38, 0x4b, 0x2a, 0xc0, 0x59, 0x52, 0x01, 0xce, 0x92, 0x0a, 0x70, 0x26, 0x3b, 0x04, 0xc1, 0x56, - 0x87, 0x20, 0xc8, 0x75, 0x08, 0x70, 0x89, 0xa6, 0xe6, 0xa7, 0xcf, 0xdd, 0x5c, 0xab, 0xe0, 0x34, - 0x0c, 0xad, 0x55, 0xcd, 0x89, 0xf8, 0xdf, 0xa4, 0xc4, 0x57, 0x71, 0x91, 0x1f, 0x60, 0x91, 0x1f, - 0x7a, 0xb2, 0x95, 0x20, 0x57, 0xfa, 0x01, 0x56, 0x7a, 0x5a, 0x0b, 0x96, 0xd1, 0x5c, 0x82, 0x7e, - 0x7a, 0xf8, 0xac, 0xca, 0x02, 0x58, 0x87, 0xf2, 0x37, 0xc8, 0x97, 0xbf, 0x40, 0xc5, 0x39, 0x30, - 0xbf, 0x0a, 0xba, 0x2b, 0xe0, 0xe4, 0xb5, 0x32, 0x78, 0x95, 0x08, 0x61, 0x95, 0x08, 0x61, 0x95, - 0x08, 0x61, 0x95, 0x08, 0x61, 0x95, 0x08, 0x61, 0x95, 0x08, 0x61, 0x95, 0x08, 0x61, 0x95, 0x2b, - 0x83, 0x57, 0xa5, 0x65, 0xf0, 0x55, 0x29, 0x13, 0x6f, 0x2d, 0x83, 0xaf, 0xf6, 0x95, 0xc1, 0x42, - 0xfa, 0x5f, 0xb7, 0xa4, 0x9f, 0x3d, 0x91, 0x72, 0x4b, 0xe9, 0x64, 0xef, 0x78, 0x27, 0x66, 0xbd, - 0x9e, 0x8a, 0x86, 0x0d, 0x33, 0xfb, 0x2c, 0xd7, 0xb0, 0x09, 0x8a, 0x0d, 0x9b, 0xc1, 0xb6, 0xb2, - 0x41, 0xe0, 0xa5, 0x9d, 0xad, 0xc7, 0x3b, 0x10, 0xf4, 0x9b, 0xcd, 0x01, 0xf5, 0x43, 0xcb, 0x9b, - 0xa1, 0x13, 0xe0, 0x7a, 0xba, 0x5e, 0x33, 0x37, 0x62, 0x5c, 0x40, 0x97, 0xbb, 0x86, 0x75, 0xf3, - 0x9d, 0x75, 0x28, 0xde, 0xb2, 0xbe, 0xfa, 0x27, 0xff, 0xf3, 0xcb, 0x8b, 0x08, 0xf2, 0x6e, 0xc4, - 0x7d, 0x9b, 0x88, 0x3f, 0x0b, 0x19, 0x7f, 0xe4, 0x43, 0x70, 0x41, 0x58, 0x12, 0x41, 0x8a, 0x90, - 0xc7, 0xa4, 0x5d, 0x42, 0x38, 0x53, 0xac, 0x8c, 0xea, 0x16, 0x1e, 0x55, 0xad, 0x5e, 0xf6, 0x17, - 0x00, 0xb5, 0x30, 0xad, 0xea, 0xa5, 0xaa, 0x5d, 0xf6, 0x6d, 0xf8, 0x62, 0x9b, 0xf0, 0xf1, 0xcf, - 0x9b, 0x71, 0x0f, 0x23, 0x8f, 0xf2, 0x58, 0x85, 0xd1, 0x20, 0x6f, 0x41, 0x0b, 0xe3, 0x22, 0x36, - 0xaf, 0xcf, 0xe4, 0xae, 0xc8, 0x42, 0x3a, 0xea, 0xad, 0xe7, 0xa6, 0xf9, 0x38, 0xa0, 0x20, 0x33, - 0x85, 0x56, 0x1f, 0xab, 0x94, 0x04, 0xf3, 0x55, 0xe4, 0xd8, 0x96, 0x9b, 0x78, 0xf6, 0x85, 0x5e, - 0xa8, 0x8a, 0x62, 0x4d, 0xec, 0x49, 0xc4, 0x75, 0x2c, 0x05, 0xfe, 0x62, 0xe8, 0xb2, 0xb2, 0x9e, - 0x8c, 0xad, 0x2c, 0x9c, 0x8e, 0x2d, 0xfb, 0x61, 0x16, 0xfa, 0x4b, 0x6f, 0x62, 0x7e, 0x41, 0xb7, - 0x6c, 0x85, 0x47, 0xb3, 0xd0, 0x9a, 0x38, 0xd8, 0x89, 0x7f, 0xa7, 0x4f, 0xd8, 0x4c, 0x23, 0xdf, - 0x3f, 0x8b, 0x16, 0xc3, 0xb1, 0x3e, 0x10, 0x1f, 0xde, 0x41, 0x12, 0xcf, 0x57, 0x3c, 0xb7, 0x8a, - 0xb6, 0x6d, 0xd3, 0x35, 0xd1, 0x13, 0xe0, 0xf5, 0x0f, 0x1a, 0xf9, 0xae, 0xd5, 0x6a, 0x65, 0xdf, - 0x09, 0xd0, 0xff, 0x41, 0xfd, 0x22, 0x57, 0x84, 0x4d, 0x76, 0x55, 0x0c, 0x76, 0xff, 0xda, 0x8a, - 0xe7, 0xe8, 0x9e, 0x14, 0xee, 0x54, 0xb5, 0x13, 0x5d, 0x57, 0x5f, 0x5e, 0x04, 0xe5, 0x13, 0xbd, - 0x3c, 0x46, 0x96, 0xe0, 0x13, 0x2a, 0x98, 0x60, 0xb3, 0xbe, 0x95, 0x60, 0x33, 0xf4, 0xcd, 0x89, - 0x08, 0x6c, 0x4f, 0x50, 0x94, 0x46, 0xbe, 0x57, 0x10, 0x66, 0x46, 0xff, 0x44, 0xff, 0x01, 0x1b, - 0xf3, 0x80, 0xae, 0x86, 0x0d, 0x16, 0xb2, 0x60, 0x0b, 0x3f, 0x5c, 0xd1, 0x6a, 0xd6, 0x88, 0x19, - 0x7c, 0x21, 0x4a, 0x6f, 0xdc, 0xbf, 0xb8, 0xbb, 0xbb, 0xb9, 0xeb, 0x90, 0x5f, 0x79, 0x43, 0xc5, - 0x87, 0x98, 0x0c, 0xc2, 0xc0, 0x95, 0x58, 0x0f, 0x0f, 0x7a, 0xf5, 0x71, 0x5f, 0xfd, 0x02, 0x69, - 0xb9, 0xda, 0x01, 0x7c, 0xba, 0x68, 0xd4, 0x04, 0x00, 0x21, 0x83, 0x38, 0x0f, 0x8a, 0x73, 0x93, - 0xf3, 0x6e, 0x33, 0xc7, 0x55, 0x14, 0x40, 0x5b, 0x7d, 0xfc, 0x8b, 0x28, 0x7e, 0xd4, 0x7a, 0x1b, - 0x66, 0x51, 0x6f, 0x74, 0xe7, 0xe6, 0xbc, 0xdf, 0x1e, 0x64, 0x50, 0x73, 0xb5, 0x33, 0xef, 0x5a, - 0xa6, 0xcc, 0xf6, 0xc7, 0x3c, 0xa3, 0xdb, 0x2c, 0xbb, 0xb5, 0xa1, 0x99, 0xaf, 0xb8, 0xb2, 0xee, - 0xc6, 0xbc, 0x67, 0xd4, 0xf4, 0xc6, 0xe1, 0xe1, 0xc1, 0x18, 0xfe, 0x0d, 0x07, 0x80, 0xe6, 0x62, - 0x74, 0x4b, 0xda, 0xbf, 0x61, 0x57, 0x92, 0x3c, 0x39, 0xf1, 0x9c, 0x18, 0xa7, 0xe4, 0xd7, 0xd1, - 0x90, 0x44, 0xcb, 0x20, 0x70, 0x57, 0xb4, 0xa3, 0x58, 0x55, 0x73, 0x3c, 0xa0, 0x46, 0xe3, 0x37, - 0x42, 0x3b, 0xc3, 0x01, 0xfd, 0x38, 0x6a, 0x9c, 0x18, 0x6d, 0x22, 0xbe, 0x53, 0x18, 0x48, 0x35, - 0x80, 0x98, 0xe3, 0xff, 0xe8, 0xa9, 0x1c, 0x85, 0xfd, 0x36, 0x0f, 0x32, 0x08, 0x48, 0x4a, 0x62, - 0x9f, 0x4f, 0x9b, 0x8a, 0xe2, 0x6d, 0xb4, 0x7b, 0xb2, 0x86, 0x98, 0xad, 0x76, 0x61, 0x52, 0x85, - 0x37, 0xb3, 0xfc, 0x28, 0x26, 0x6c, 0x3a, 0x05, 0x34, 0x91, 0x46, 0xfe, 0x93, 0x76, 0x2f, 0xaa, - 0xe6, 0xc8, 0x1c, 0x15, 0x24, 0x31, 0x52, 0x3b, 0x23, 0xed, 0x82, 0x13, 0x76, 0x22, 0xc2, 0x3c, - 0x7f, 0x39, 0x9b, 0xab, 0xbd, 0x71, 0xd8, 0xcf, 0x5a, 0x46, 0x85, 0xe5, 0xb5, 0x0a, 0x9d, 0xa4, - 0xec, 0xf9, 0x10, 0xed, 0xed, 0x42, 0xbc, 0xfc, 0x2a, 0x74, 0xa2, 0xa8, 0xae, 0x27, 0x52, 0x92, - 0x97, 0xf7, 0xb2, 0x76, 0xa5, 0x89, 0x66, 0xe6, 0xb6, 0xbd, 0xac, 0x28, 0xbe, 0xf0, 0x26, 0xb2, - 0x01, 0xc8, 0x7a, 0x46, 0xd2, 0xd4, 0xd3, 0xbb, 0x8f, 0xaf, 0xf9, 0x8f, 0x11, 0x28, 0x16, 0x3b, - 0x82, 0xe8, 0x91, 0xf9, 0x90, 0xea, 0xeb, 0x7d, 0x88, 0xcd, 0x21, 0x5d, 0x51, 0xb4, 0xbf, 0xee, - 0xab, 0xb6, 0x06, 0x4a, 0x4e, 0x3d, 0x5e, 0x12, 0x79, 0xa2, 0x24, 0x82, 0xca, 0x5c, 0xd5, 0x9c, - 0xe8, 0x17, 0xeb, 0x17, 0xe5, 0x51, 0x1d, 0xe8, 0x9d, 0xc7, 0x6c, 0xaa, 0x50, 0xc8, 0xe2, 0xa2, - 0xa6, 0x5b, 0x7c, 0x62, 0x7f, 0x63, 0x83, 0xdc, 0x59, 0xb2, 0xcd, 0x03, 0xe9, 0xdd, 0xe8, 0x1e, - 0x92, 0x3b, 0xc7, 0x8c, 0xd3, 0x44, 0x6e, 0xaa, 0x1c, 0x28, 0x50, 0x81, 0x40, 0xb4, 0x72, 0xfa, - 0x98, 0x56, 0x0d, 0x5f, 0x5e, 0x8e, 0xc4, 0x77, 0x50, 0x66, 0x47, 0x4d, 0x3a, 0xda, 0xc2, 0xe1, - 0xc1, 0x5c, 0x79, 0xe4, 0x44, 0x80, 0xa4, 0x46, 0xff, 0xd2, 0x9b, 0x38, 0x8f, 0x84, 0x6f, 0x25, - 0x99, 0x1c, 0x7f, 0xff, 0x77, 0xaf, 0x37, 0x87, 0xe2, 0x17, 0xd7, 0x4d, 0xee, 0x38, 0x77, 0x1a, - 0xc7, 0x7a, 0xf0, 0x0d, 0xdf, 0x7c, 0xff, 0xec, 0x54, 0xa1, 0x1a, 0x03, 0x10, 0xd1, 0x24, 0x20, - 0x62, 0x2f, 0xf9, 0xea, 0x1e, 0x5e, 0xac, 0x29, 0x81, 0x42, 0x6e, 0x8e, 0x9e, 0xc1, 0xa4, 0xbf, - 0x5e, 0x2a, 0x71, 0x08, 0x12, 0xe1, 0xe8, 0xfc, 0x80, 0xcf, 0x56, 0x96, 0x99, 0x8d, 0x06, 0x25, - 0x62, 0x34, 0x9b, 0xf4, 0xb9, 0x15, 0x7c, 0xeb, 0xd5, 0x05, 0xc8, 0x36, 0x70, 0x53, 0xa7, 0xfd, - 0xd1, 0xdf, 0x8e, 0x4f, 0x8c, 0x06, 0xb9, 0xfb, 0x30, 0xfc, 0xb8, 0x07, 0xd0, 0xa0, 0xfd, 0xfb, - 0x6b, 0xe3, 0xc4, 0x68, 0xed, 0x86, 0x69, 0xb4, 0x28, 0x14, 0x8a, 0xfa, 0xc3, 0xcf, 0xff, 0xb1, - 0x1b, 0xa6, 0x0d, 0x04, 0x91, 0x29, 0xdd, 0xd8, 0x03, 0x03, 0xb4, 0x4e, 0x6f, 0x4f, 0x0d, 0xbd, - 0xb1, 0x07, 0xa6, 0x41, 0xfb, 0x57, 0xb7, 0xe7, 0x27, 0x27, 0xfa, 0xf1, 0x1e, 0xa0, 0x26, 0xed, - 0xdf, 0xbe, 0x3b, 0x31, 0x9a, 0xbb, 0x41, 0x5a, 0xc0, 0xcf, 0x8d, 0x57, 0xbf, 0x99, 0x4e, 0xf7, - 0xc0, 0x00, 0x3f, 0xb7, 0x1f, 0xaf, 0xc9, 0xc7, 0xb9, 0x13, 0xb3, 0x3d, 0x60, 0x0d, 0x01, 0x76, - 0x76, 0x76, 0xbf, 0x07, 0xa8, 0x29, 0x80, 0x40, 0xda, 0x7b, 0x80, 0x5a, 0x29, 0xd0, 0x9e, 0x25, - 0x69, 0xb5, 0x53, 0xa8, 0x6a, 0x91, 0xe6, 0xef, 0xdf, 0x9a, 0xf6, 0xc1, 0xd1, 0xd1, 0x06, 0xf8, - 0x71, 0x06, 0x7e, 0x9e, 0x83, 0x3f, 0x3a, 0x02, 0x70, 0xb6, 0x85, 0xfd, 0x04, 0x04, 0x73, 0x7e, - 0x7e, 0x8b, 0xe0, 0x44, 0xf1, 0x58, 0xfc, 0xe4, 0x87, 0x0f, 0xea, 0x6b, 0x34, 0x4e, 0x40, 0x52, - 0x17, 0x46, 0xad, 0x69, 0x94, 0x0f, 0x4b, 0x48, 0x95, 0x8f, 0x05, 0xf1, 0x9d, 0x86, 0xf1, 0x2f, - 0x2c, 0xde, 0x3f, 0xb8, 0x57, 0x17, 0xda, 0xdd, 0x47, 0x07, 0x0a, 0x5f, 0xd1, 0xbe, 0x9c, 0x89, - 0x49, 0x6d, 0x5f, 0x18, 0x89, 0xb4, 0x2c, 0xe9, 0x12, 0x3b, 0x32, 0x40, 0xf7, 0xcf, 0x30, 0x02, - 0x93, 0x9b, 0x70, 0xc2, 0xc2, 0x2d, 0xfb, 0x3a, 0xbb, 0xe1, 0x43, 0xb7, 0x45, 0x0c, 0x32, 0xf8, - 0x70, 0xb7, 0x67, 0xa1, 0x60, 0xba, 0x7b, 0x17, 0x12, 0xa6, 0x34, 0xbc, 0xfb, 0xb0, 0xc7, 0xaa, - 0x60, 0xfc, 0x70, 0xcf, 0x7b, 0xd0, 0x83, 0xe1, 0x87, 0xbb, 0x3d, 0x0a, 0x0e, 0xfc, 0x0d, 0x0b, - 0xef, 0x53, 0xe1, 0xd4, 0x41, 0x2e, 0x79, 0xf1, 0x40, 0xc1, 0x8f, 0x93, 0x7c, 0xda, 0x12, 0x10, - 0x0f, 0x0f, 0xfd, 0xd1, 0x93, 0x15, 0x74, 0x48, 0x51, 0x2c, 0x1f, 0xa5, 0x58, 0xb6, 0x85, 0xf2, - 0x0b, 0x8c, 0x49, 0xa9, 0x6e, 0xcb, 0xe4, 0x23, 0x39, 0x24, 0xc3, 0x5d, 0xef, 0x1b, 0xe2, 0xfd, - 0x87, 0x5d, 0xef, 0x9b, 0xe2, 0x7d, 0x36, 0xab, 0xd2, 0x39, 0xe1, 0x9f, 0x28, 0xb0, 0x3c, 0x3e, - 0xb7, 0x20, 0x9a, 0x08, 0x4e, 0x45, 0x97, 0x00, 0x06, 0xc0, 0x9b, 0x3e, 0xe9, 0x89, 0x4d, 0x4b, - 0x3c, 0x90, 0x61, 0x52, 0x6f, 0xb9, 0x18, 0xb3, 0x90, 0x26, 0x1e, 0x75, 0x24, 0x94, 0x05, 0x47, - 0xbb, 0x91, 0xf8, 0x2c, 0x9d, 0xb4, 0x4b, 0x44, 0x32, 0x4f, 0x09, 0x16, 0xa5, 0x30, 0x5b, 0x4c, - 0xae, 0x50, 0xb5, 0xdf, 0x19, 0x34, 0xe1, 0xf1, 0xfb, 0xe7, 0x24, 0x8a, 0x3a, 0x2a, 0xf7, 0xcb, - 0x9c, 0x92, 0x49, 0xf3, 0x65, 0x00, 0x22, 0xfd, 0x6c, 0xa2, 0x97, 0xee, 0x62, 0x2b, 0xbf, 0x4b, - 0x49, 0xd2, 0x15, 0x24, 0xf5, 0xfe, 0xa1, 0x37, 0x8e, 0x82, 0xee, 0xf6, 0xf2, 0xd8, 0x3b, 0xf5, - 0xf7, 0x8a, 0x47, 0xa4, 0xce, 0xde, 0x49, 0x9d, 0x15, 0x27, 0x22, 0x67, 0x60, 0xc8, 0x19, 0xf0, - 0x7c, 0xef, 0x76, 0xb8, 0xa6, 0xd9, 0x4a, 0x65, 0x2c, 0xa5, 0x53, 0x40, 0x5e, 0x29, 0x70, 0x28, - 0x84, 0x2d, 0x6d, 0xac, 0xbe, 0x25, 0x71, 0x5d, 0x4a, 0x9c, 0xb7, 0x74, 0xdf, 0x22, 0x70, 0x5d, - 0xf0, 0x56, 0x90, 0x69, 0xb3, 0x99, 0xe3, 0x40, 0x72, 0x1d, 0x6d, 0x84, 0x39, 0x95, 0xd6, 0x8b, - 0x94, 0x0d, 0x49, 0x59, 0x12, 0xdd, 0x47, 0xd3, 0xd8, 0x41, 0xf3, 0xad, 0xa4, 0x1a, 0x6f, 0x27, - 0xd5, 0xf8, 0x17, 0x49, 0x35, 0xdf, 0x4e, 0xaa, 0xf9, 0x2f, 0x92, 0x6a, 0xbd, 0x9d, 0x54, 0xeb, - 0x9f, 0x22, 0xb5, 0xa1, 0xd3, 0xe1, 0x4e, 0x9d, 0x46, 0xed, 0xca, 0x18, 0x83, 0xf4, 0x5a, 0x30, - 0x96, 0xb4, 0x0c, 0x25, 0x83, 0x1b, 0x3a, 0xcf, 0xdb, 0xe3, 0x63, 0xff, 0x5b, 0xc2, 0xe4, 0xd9, - 0x6f, 0xc9, 0x74, 0xca, 0x3d, 0x5e, 0xb4, 0x97, 0xfc, 0xe8, 0xc1, 0x09, 0xc8, 0xd4, 0x09, 0x21, - 0x89, 0xc7, 0x54, 0x71, 0xaf, 0x7d, 0x8d, 0xae, 0x4a, 0xc4, 0x01, 0xe5, 0x0b, 0xdd, 0xb0, 0x9e, - 0x9d, 0xac, 0x4c, 0xf7, 0xb2, 0x02, 0x39, 0x08, 0xb9, 0x63, 0xd3, 0x90, 0x45, 0x99, 0x99, 0x73, - 0xb9, 0x4c, 0x05, 0xd9, 0xf2, 0xe9, 0xdf, 0xbd, 0xdf, 0x3f, 0x7d, 0x6b, 0x2f, 0xcd, 0xd3, 0x65, - 0xec, 0x1f, 0x41, 0xd1, 0x6e, 0x2f, 0x5d, 0x2b, 0x66, 0xe4, 0x09, 0x33, 0x1c, 0x3c, 0x51, 0x09, - 0x25, 0x87, 0x4b, 0xa6, 0xa1, 0xbf, 0xc0, 0x58, 0xdc, 0x11, 0xeb, 0x94, 0x0f, 0x0d, 0xa7, 0x1f, - 0xcb, 0x42, 0x83, 0xbe, 0x2f, 0x30, 0x18, 0xfd, 0x61, 0xe8, 0xcc, 0xe6, 0x31, 0x0b, 0x77, 0x00, - 0x34, 0xfa, 0xa7, 0xb6, 0x8d, 0x67, 0xcb, 0x76, 0x61, 0x68, 0xf6, 0xcf, 0x97, 0x96, 0xbb, 0x1d, - 0x17, 0x84, 0x33, 0x4d, 0x05, 0xc0, 0xff, 0x7e, 0xe9, 0x5a, 0x50, 0x38, 0x45, 0x2c, 0x8c, 0x4f, - 0x27, 0x5f, 0x2d, 0x1b, 0x52, 0x7d, 0xac, 0xa0, 0x14, 0x3a, 0x66, 0x50, 0xb4, 0x31, 0xe6, 0x4d, - 0xa8, 0xe6, 0xab, 0x6b, 0x99, 0xcb, 0x2b, 0xf1, 0xa7, 0xa3, 0x23, 0xe7, 0x73, 0x2d, 0x84, 0xe2, - 0xf9, 0x91, 0x29, 0xaa, 0x06, 0xdf, 0x64, 0xb7, 0xa6, 0xba, 0x55, 0x63, 0x39, 0x3d, 0xac, 0x03, - 0x8e, 0x8c, 0xf2, 0xda, 0xff, 0x68, 0x1b, 0xbe, 0xbf, 0xdd, 0x26, 0xf0, 0x5e, 0x5e, 0xf8, 0xf6, - 0x6e, 0xa1, 0x54, 0x39, 0xbb, 0xb9, 0x56, 0x40, 0x86, 0x50, 0xab, 0xf0, 0xdd, 0x4c, 0x51, 0x41, - 0x38, 0x7b, 0xca, 0x15, 0xdb, 0x5f, 0xfc, 0x01, 0x0f, 0xa1, 0xdc, 0x57, 0x0b, 0x05, 0x0b, 0x94, - 0x2a, 0xd8, 0x19, 0x93, 0xb5, 0x49, 0xa1, 0x02, 0xc9, 0x86, 0xbc, 0xa5, 0x0e, 0x21, 0x22, 0x9e, - 0xee, 0xb3, 0x89, 0xbf, 0xe7, 0x02, 0xe9, 0xb7, 0x37, 0x05, 0xd2, 0xe3, 0x76, 0xbb, 0xd9, 0xce, - 0x45, 0x52, 0xb6, 0xde, 0xb0, 0x9f, 0x5c, 0xa4, 0x34, 0x29, 0x4d, 0x43, 0xe5, 0x1b, 0x02, 0xe0, - 0xdf, 0xcf, 0x72, 0xcc, 0xd8, 0x7b, 0x83, 0xe1, 0x26, 0x17, 0xde, 0xba, 0x40, 0x75, 0xd3, 0xa2, - 0xa5, 0x5d, 0xfd, 0xa9, 0xdc, 0x92, 0x73, 0x21, 0x93, 0x52, 0xc9, 0xdf, 0xff, 0xbf, 0x3c, 0x33, - 0xb1, 0x37, 0xee, 0x22, 0xa4, 0xe5, 0xc9, 0xcd, 0x41, 0xa1, 0x69, 0x0e, 0x8b, 0x78, 0x0f, 0x63, - 0xaf, 0x29, 0x5a, 0xd2, 0xda, 0xbe, 0xf9, 0xb4, 0xea, 0x24, 0x0d, 0xd3, 0x58, 0x1b, 0xc7, 0x1e, - 0x1a, 0x05, 0xe8, 0xa2, 0x3c, 0x0e, 0x91, 0xd9, 0x0b, 0x98, 0x2a, 0xbe, 0xda, 0x71, 0x6e, 0xb2, - 0xdc, 0x48, 0xc0, 0xb2, 0xd2, 0xe3, 0x68, 0xfa, 0x81, 0x89, 0x3b, 0x5d, 0x0a, 0xfb, 0xe4, 0x1d, - 0x19, 0x39, 0xcb, 0x97, 0x24, 0xe1, 0xa1, 0x20, 0xa9, 0xe6, 0x49, 0x46, 0x2c, 0xe6, 0x46, 0xaa, - 0x3e, 0xa3, 0xd3, 0xd8, 0x38, 0x3c, 0xcd, 0x44, 0xdf, 0x1f, 0x0f, 0x67, 0x30, 0x6c, 0xc9, 0xbd, - 0x89, 0x25, 0x95, 0xa5, 0xa4, 0xbb, 0x92, 0x74, 0xe1, 0x50, 0xa9, 0x78, 0x04, 0x04, 0x53, 0x99, - 0x82, 0xa3, 0xd8, 0x3e, 0x5d, 0xd4, 0x2b, 0xf2, 0x52, 0xee, 0x9a, 0x70, 0x34, 0x10, 0xdb, 0x1e, - 0xbd, 0xed, 0xa0, 0x0a, 0x7e, 0x69, 0x18, 0x7b, 0xe2, 0x54, 0x6b, 0xe2, 0x91, 0x38, 0x36, 0x60, - 0x2d, 0xca, 0x37, 0xa7, 0x34, 0xcb, 0xc4, 0xed, 0x87, 0xea, 0x88, 0xef, 0x21, 0xd4, 0x30, 0x76, - 0x9c, 0xcd, 0xad, 0xf0, 0xcc, 0x9f, 0x30, 0x05, 0xbb, 0x4c, 0xfa, 0xa0, 0x75, 0xd2, 0x69, 0xb7, - 0xd5, 0x2a, 0xc8, 0xc9, 0xa9, 0x9a, 0x5f, 0x86, 0xcb, 0x38, 0xf6, 0xf9, 0x01, 0xb7, 0xb5, 0x38, - 0x17, 0x50, 0x6e, 0xd8, 0xdc, 0x68, 0x8f, 0x12, 0xab, 0x85, 0x6a, 0x5d, 0x9a, 0xd2, 0xf7, 0xcf, - 0xd6, 0x7a, 0x2b, 0xfb, 0x48, 0x8c, 0xfd, 0x5b, 0x54, 0xb4, 0xec, 0xfe, 0x17, 0x0d, 0x49, 0xca, - 0x38, 0x51, 0x08, 0x64, 0xdf, 0x3f, 0xd3, 0xe1, 0xc5, 0x9b, 0xb8, 0x4e, 0xd1, 0x6c, 0xd9, 0x2e, - 0x4c, 0x42, 0x37, 0xcd, 0x78, 0x40, 0x93, 0xb6, 0x0b, 0x1e, 0x71, 0x58, 0xf7, 0xcf, 0x65, 0x87, - 0x3f, 0x35, 0x9b, 0xd2, 0xe1, 0x0d, 0x1c, 0xde, 0x28, 0x19, 0x7e, 0xbb, 0x8c, 0xe6, 0x63, 0x2e, - 0xa4, 0xfd, 0x08, 0x9a, 0x88, 0xa0, 0xb9, 0x03, 0x01, 0x71, 0xe4, 0x86, 0xec, 0x7e, 0x1c, 0x2d, - 0xc4, 0xd1, 0x2a, 0xc1, 0x31, 0xe2, 0x87, 0xc1, 0xf6, 0x0f, 0x6e, 0xe3, 0xe0, 0x76, 0x19, 0x03, - 0x97, 0x77, 0x24, 0x62, 0x5e, 0xe4, 0x87, 0xfb, 0x11, 0x1c, 0x23, 0x82, 0xe3, 0x12, 0x04, 0xf7, - 0xfe, 0xf2, 0x35, 0xe2, 0x3f, 0xe1, 0xd8, 0x9f, 0x4a, 0xc6, 0x9e, 0x7a, 0x96, 0xeb, 0xcf, 0xf6, - 0x0f, 0x3e, 0xc1, 0xc1, 0x27, 0x3b, 0x07, 0xef, 0x10, 0x1e, 0x4d, 0x9d, 0x1f, 0x15, 0x48, 0x79, - 0x06, 0x2b, 0x43, 0x03, 0x24, 0x30, 0x30, 0xdf, 0x0e, 0x09, 0x7c, 0xc7, 0x83, 0x54, 0xa7, 0xcb, - 0x75, 0x94, 0x9f, 0xbe, 0xa0, 0x78, 0x45, 0xe1, 0x47, 0xd4, 0xdb, 0x1f, 0xd5, 0x24, 0xaa, 0x1d, - 0x7e, 0xf7, 0xad, 0xf1, 0x93, 0xd1, 0xee, 0x26, 0xa9, 0x38, 0x38, 0x51, 0xb9, 0x27, 0xb1, 0x69, - 0x5e, 0xf9, 0x33, 0xe3, 0xf1, 0xcc, 0x1d, 0x39, 0xe8, 0x14, 0x94, 0xc2, 0xf5, 0x0e, 0xa6, 0xbe, - 0xbc, 0x28, 0xc5, 0x0b, 0x1e, 0x9b, 0xa7, 0xc8, 0xd2, 0xcb, 0x02, 0xcf, 0xe8, 0xaa, 0x84, 0xeb, - 0x3c, 0x30, 0x30, 0xe3, 0xe8, 0x42, 0x80, 0xdb, 0xdf, 0x17, 0x4d, 0x3c, 0xa7, 0x87, 0x9b, 0xdb, - 0xdb, 0xfb, 0x53, 0xdc, 0x65, 0xaa, 0x7f, 0xa2, 0x29, 0xec, 0x15, 0x7b, 0xbb, 0x07, 0x25, 0x7b, - 0x5e, 0x5e, 0x82, 0x0f, 0x1d, 0x35, 0x9e, 0x3e, 0xcc, 0xd7, 0xd7, 0xde, 0x67, 0xec, 0xe9, 0xca, - 0x4d, 0xab, 0x48, 0xa7, 0x00, 0xa4, 0x6f, 0x23, 0xc1, 0x4d, 0xa8, 0xdd, 0x38, 0x74, 0x8e, 0x43, - 0x48, 0x3c, 0x72, 0x72, 0xc7, 0x13, 0x99, 0x96, 0x08, 0x39, 0x13, 0xde, 0x32, 0xc0, 0x1b, 0x12, - 0xef, 0x1d, 0x17, 0xaf, 0x94, 0xc8, 0x83, 0x67, 0x1e, 0x7b, 0x22, 0x7f, 0xbf, 0xbe, 0xfa, 0x39, - 0x8e, 0x83, 0x3b, 0xc8, 0x1e, 0x58, 0x14, 0x77, 0xbd, 0xdd, 0xd7, 0x36, 0x72, 0xa7, 0x6c, 0xb2, - 0x8b, 0x10, 0xf1, 0xdc, 0xc1, 0x03, 0x43, 0x51, 0xe0, 0x43, 0x8c, 0xbc, 0x67, 0xdf, 0x62, 0x8d, - 0x3f, 0x01, 0x36, 0xe3, 0x65, 0x84, 0x67, 0x21, 0x60, 0x92, 0x2a, 0xc4, 0xae, 0xdd, 0x57, 0x3a, - 0x32, 0xbc, 0x2c, 0x8f, 0x18, 0x0f, 0xe9, 0x5a, 0xf6, 0x83, 0x76, 0x90, 0x20, 0x10, 0x37, 0x6e, - 0x6e, 0x6f, 0x60, 0x35, 0x35, 0x5a, 0x17, 0xd3, 0x91, 0x1b, 0x1e, 0x31, 0x9f, 0xc9, 0x7b, 0x3f, - 0x5c, 0xe0, 0x61, 0xaf, 0xf4, 0xb0, 0xa0, 0xbc, 0x92, 0xa2, 0x50, 0x3c, 0x22, 0x2c, 0xcf, 0xac, - 0xf2, 0xd3, 0xc2, 0x78, 0x47, 0x24, 0x02, 0xf1, 0xe1, 0x35, 0x11, 0xaf, 0x16, 0x21, 0x4c, 0xac, - 0x6a, 0x25, 0xa7, 0x89, 0x0f, 0x36, 0x2e, 0xdc, 0x9c, 0x4d, 0x67, 0xa9, 0xf4, 0xb4, 0xb8, 0x4b, - 0x93, 0x97, 0x14, 0xac, 0x10, 0x1c, 0x3f, 0xc4, 0x4d, 0x79, 0x3d, 0x08, 0xe5, 0x7c, 0xc7, 0x2c, - 0x48, 0xa9, 0x06, 0x30, 0x13, 0x4e, 0x6f, 0xc0, 0x52, 0xba, 0x03, 0x05, 0x63, 0x79, 0xca, 0x85, - 0x22, 0xf9, 0x4f, 0xc7, 0xe0, 0xa1, 0x27, 0x24, 0x67, 0xe6, 0x45, 0x83, 0xa1, 0x19, 0x87, 0x81, - 0x02, 0x80, 0x52, 0xa2, 0xcc, 0x97, 0x6e, 0x2c, 0xa7, 0xcf, 0x8f, 0xf6, 0x73, 0xe5, 0x51, 0x3c, - 0xde, 0xc4, 0x8f, 0x6b, 0xf3, 0x27, 0xbe, 0x43, 0x82, 0x1f, 0x40, 0xf7, 0x27, 0x99, 0xcd, 0x88, - 0xd3, 0x1e, 0x86, 0xce, 0xcf, 0x79, 0x24, 0x7b, 0x0c, 0xa0, 0xcd, 0xdd, 0x04, 0x14, 0xd3, 0x9d, - 0x1a, 0x40, 0x5f, 0x58, 0xf6, 0x5c, 0x91, 0xb1, 0xd3, 0xec, 0x3f, 0x27, 0xa0, 0x86, 0xc8, 0x14, - 0x32, 0x54, 0xac, 0x16, 0x38, 0x5e, 0xfe, 0xf0, 0x48, 0x99, 0xd5, 0x7c, 0xe1, 0xd5, 0x27, 0xc6, - 0xb3, 0x2f, 0xb9, 0x53, 0x4d, 0x7c, 0xe8, 0x27, 0xe7, 0x73, 0x77, 0xe7, 0x26, 0x8a, 0x57, 0x80, - 0x46, 0x21, 0x6b, 0x3b, 0x37, 0x77, 0x8a, 0xb0, 0xdc, 0x52, 0xb4, 0xb7, 0x1c, 0x2f, 0x15, 0x79, - 0x55, 0x39, 0xe8, 0xd9, 0xcd, 0x26, 0xa8, 0x8f, 0x89, 0xb2, 0xf6, 0x96, 0xd3, 0xa7, 0xc8, 0x04, - 0x14, 0xe8, 0xe5, 0xb0, 0x77, 0xef, 0x13, 0xd8, 0xd4, 0x6a, 0x61, 0x4d, 0xa7, 0x3b, 0xb8, 0xf8, - 0xad, 0x0c, 0xf8, 0x71, 0xad, 0xae, 0x93, 0x25, 0x86, 0xf4, 0x08, 0x5c, 0x44, 0x9a, 0xe4, 0xe1, - 0x2d, 0x22, 0xf1, 0x34, 0x5d, 0x49, 0x26, 0xd6, 0x90, 0x67, 0x64, 0x52, 0x38, 0x62, 0xde, 0x72, - 0x4a, 0xdc, 0xcc, 0xf8, 0x28, 0xf0, 0xde, 0x49, 0xf9, 0x95, 0x7c, 0xef, 0x16, 0x0f, 0x96, 0xf0, - 0xea, 0x54, 0x4d, 0x4e, 0x03, 0x6e, 0x79, 0x7b, 0x8a, 0x27, 0xdd, 0x77, 0xab, 0x11, 0xa6, 0x64, - 0x48, 0x16, 0xd7, 0x1e, 0x8d, 0x90, 0x2f, 0x2b, 0x5e, 0x4a, 0x2a, 0x9d, 0xfb, 0xfd, 0x3d, 0xcd, - 0x89, 0xd4, 0xaa, 0xc5, 0xf1, 0x9a, 0x73, 0xe5, 0x84, 0xbb, 0xce, 0xce, 0x5d, 0xde, 0xe5, 0x47, - 0x48, 0x60, 0xa4, 0x56, 0x4e, 0xe0, 0xf2, 0xbe, 0x0c, 0x9c, 0xf3, 0x24, 0xe4, 0x11, 0x32, 0x48, - 0x34, 0x77, 0x11, 0xbb, 0xbb, 0xda, 0x1a, 0xcd, 0xe1, 0x77, 0xd3, 0xbb, 0xbb, 0xa6, 0x85, 0xa5, - 0xcc, 0x8d, 0x81, 0x90, 0x9d, 0xd4, 0x0a, 0x1a, 0x9a, 0xb8, 0x35, 0x39, 0x8d, 0xd0, 0xa9, 0x82, - 0x55, 0xab, 0x1d, 0x79, 0xbf, 0xe5, 0xd6, 0x65, 0x78, 0x0c, 0x5c, 0xe6, 0x81, 0x16, 0x41, 0xdb, - 0xe7, 0xb7, 0xde, 0x44, 0x23, 0xe8, 0x80, 0xa6, 0x90, 0xf7, 0xe0, 0x89, 0xc9, 0x38, 0xf4, 0x9f, - 0xa0, 0x7a, 0x21, 0x13, 0x9f, 0x45, 0x78, 0xcf, 0x07, 0xf7, 0x8e, 0xfd, 0x10, 0x12, 0xd5, 0x39, - 0x23, 0x5f, 0xb8, 0x0b, 0xfa, 0x42, 0x82, 0x10, 0x9c, 0x2b, 0x44, 0x14, 0x4c, 0xfc, 0x39, 0x26, - 0x9e, 0xcb, 0x46, 0xfc, 0xae, 0x4c, 0x76, 0xfe, 0x33, 0x43, 0xcb, 0x04, 0xd4, 0xe9, 0xed, 0x25, - 0x71, 0xf2, 0x48, 0x79, 0x27, 0x96, 0xc4, 0x79, 0xb2, 0x2b, 0x70, 0x55, 0xf9, 0x4b, 0x91, 0x23, - 0x88, 0x1e, 0x14, 0x47, 0x77, 0xc0, 0x67, 0x4a, 0x67, 0xe9, 0xfa, 0x36, 0xbf, 0x86, 0x51, 0x03, - 0x3e, 0x62, 0xdf, 0xf6, 0xf1, 0x50, 0x24, 0xbf, 0xca, 0xa9, 0x6b, 0x0a, 0xbf, 0x56, 0x6a, 0x22, - 0x84, 0x3b, 0x8a, 0xfd, 0xd0, 0x9a, 0x31, 0x14, 0xe9, 0x65, 0xcc, 0x16, 0x18, 0x97, 0xec, 0xcb, - 0x00, 0xaa, 0x10, 0x48, 0x1c, 0x04, 0x18, 0x8c, 0x5f, 0x04, 0xc0, 0x21, 0x7a, 0x52, 0x72, 0x0d, - 0x59, 0x70, 0x8d, 0x48, 0x69, 0x31, 0x4c, 0x67, 0xc8, 0x47, 0x3c, 0x63, 0x70, 0x79, 0x0b, 0x22, - 0xd2, 0x0a, 0x18, 0xa3, 0x22, 0x46, 0x8d, 0x63, 0x53, 0x55, 0x84, 0xe2, 0x97, 0x2c, 0x11, 0xfd, - 0x80, 0x5f, 0x1e, 0xed, 0xd4, 0xeb, 0xb4, 0xca, 0x5f, 0xe3, 0x81, 0x83, 0x6a, 0x76, 0x01, 0xb4, - 0x1e, 0xd5, 0xbe, 0x46, 0x83, 0xc0, 0x6c, 0x60, 0xd0, 0x50, 0xd7, 0x15, 0xc8, 0x89, 0xc4, 0xe5, - 0xd8, 0x1e, 0x4f, 0xad, 0xfa, 0xff, 0xe6, 0x2c, 0xb8, 0xd8, 0x97, 0xa1, 0x0b, 0xc1, 0x5a, 0x9c, - 0xaa, 0x88, 0x70, 0xc3, 0x1e, 0x00, 0x39, 0x40, 0xaf, 0x2e, 0x6e, 0x05, 0xe3, 0x5d, 0x4a, 0x22, - 0xdd, 0x3f, 0x1d, 0xf1, 0x7e, 0x1c, 0x18, 0xd1, 0xa2, 0xc2, 0x0b, 0x72, 0xfc, 0xf4, 0x47, 0x94, - 0x76, 0xf4, 0xa6, 0x50, 0x58, 0xb0, 0x78, 0xee, 0x63, 0x5f, 0xd4, 0x8f, 0xf0, 0xb2, 0x6e, 0xae, - 0x59, 0x12, 0xfb, 0x20, 0x8e, 0xa7, 0xe2, 0xb3, 0x39, 0x73, 0x83, 0x21, 0xed, 0x57, 0x7a, 0x22, - 0x35, 0x97, 0xd5, 0x8a, 0xf8, 0x92, 0xcb, 0xf5, 0x7e, 0x46, 0xb2, 0x83, 0x5e, 0x5d, 0xbc, 0x48, - 0x9b, 0xe9, 0x65, 0x63, 0x2a, 0xe9, 0xa0, 0x21, 0x0e, 0x1a, 0x42, 0xc8, 0xce, 0xc6, 0x15, 0x46, - 0xc8, 0x4b, 0x02, 0xfd, 0x91, 0xf5, 0xc8, 0x32, 0x90, 0x79, 0x52, 0x78, 0xf7, 0xe6, 0x8d, 0x7e, - 0x05, 0xd7, 0xe7, 0xd0, 0x5a, 0x04, 0x5d, 0xf2, 0xb3, 0x15, 0xe2, 0x31, 0x14, 0xd4, 0xf3, 0x78, - 0x19, 0x80, 0x70, 0x1a, 0x90, 0x4f, 0xc7, 0x96, 0x9b, 0xf4, 0x39, 0xd3, 0xbe, 0xab, 0x6b, 0x73, - 0x56, 0x65, 0x0b, 0x3f, 0xeb, 0x13, 0xdb, 0x38, 0xcd, 0x2c, 0x31, 0xed, 0x39, 0xfd, 0x3b, 0x06, - 0xee, 0x10, 0x2c, 0x71, 0x02, 0x6a, 0x1a, 0xf8, 0x4f, 0xa0, 0x0f, 0xf2, 0x1c, 0x05, 0x1e, 0x84, - 0x18, 0x8b, 0xee, 0x5e, 0x14, 0x8b, 0x2e, 0x62, 0xa7, 0x57, 0x77, 0xc4, 0xb8, 0xb1, 0xec, 0xf1, - 0x56, 0xc4, 0x56, 0xcd, 0x32, 0xa3, 0x86, 0x07, 0x4f, 0x8a, 0x3d, 0x60, 0x7e, 0xe4, 0x41, 0x36, - 0x13, 0x52, 0xca, 0x95, 0x0b, 0x0f, 0x0b, 0x29, 0x62, 0x2d, 0x21, 0xd9, 0x05, 0x3d, 0xb7, 0x25, - 0x2d, 0x8f, 0x45, 0x11, 0x71, 0xf1, 0xda, 0x25, 0x0b, 0x5f, 0x69, 0x12, 0x9f, 0x0e, 0x99, 0x14, - 0xb5, 0xac, 0x17, 0xe5, 0xe5, 0x13, 0xd1, 0x2b, 0xe2, 0x77, 0x53, 0x04, 0xd5, 0xa4, 0x7b, 0x8a, - 0x17, 0x7e, 0xfa, 0xd7, 0xe2, 0xb2, 0x37, 0x39, 0x5b, 0x86, 0x21, 0xe8, 0x7f, 0x4a, 0x43, 0x5e, - 0xf1, 0xbe, 0x3e, 0xa5, 0x1b, 0xd5, 0xea, 0x46, 0xb3, 0xa9, 0xd1, 0xce, 0x9a, 0x5e, 0xba, 0xae, - 0x6f, 0x76, 0x95, 0xd2, 0x86, 0x53, 0xbf, 0x42, 0x16, 0xa7, 0x45, 0xf2, 0xd9, 0x25, 0x86, 0xb4, - 0xb2, 0xc0, 0x26, 0x53, 0x47, 0x1c, 0x0d, 0xea, 0x16, 0x37, 0xef, 0x2a, 0x87, 0xdf, 0xbd, 0x3b, - 0x39, 0x39, 0xe9, 0x92, 0x7f, 0xf7, 0x97, 0x61, 0x71, 0x65, 0x40, 0x83, 0x1f, 0xb1, 0x25, 0x40, - 0xe6, 0x20, 0x31, 0x62, 0x8b, 0x89, 0xd4, 0xb8, 0x54, 0xef, 0x7d, 0x02, 0x26, 0x05, 0xef, 0x19, - 0x77, 0x65, 0x91, 0x35, 0x65, 0xc2, 0x81, 0xad, 0x10, 0x0b, 0xd7, 0x1a, 0x0d, 0x01, 0x03, 0xe1, - 0x00, 0x96, 0x11, 0xc2, 0x81, 0xa2, 0x12, 0x1b, 0xe5, 0x15, 0xf1, 0x77, 0x95, 0x05, 0xa4, 0x50, - 0x0e, 0x40, 0x48, 0xaa, 0x8e, 0xf7, 0x95, 0xc9, 0x8b, 0xad, 0x58, 0x00, 0x45, 0xc4, 0xf2, 0x26, - 0xe0, 0x61, 0xa7, 0x30, 0xf8, 0x20, 0x6b, 0x11, 0x81, 0x2a, 0x55, 0x4e, 0x93, 0xc5, 0xb4, 0x5c, - 0x60, 0x93, 0xaf, 0x62, 0x94, 0x5f, 0xd7, 0xd8, 0xc7, 0xf6, 0xe1, 0x0a, 0x44, 0xea, 0x47, 0xfc, - 0xbe, 0x18, 0xf2, 0xc8, 0xc1, 0x04, 0xf7, 0x7f, 0x63, 0x2c, 0x20, 0x56, 0x4c, 0x0e, 0x21, 0x85, - 0x33, 0x4e, 0x89, 0x33, 0x15, 0x1c, 0xe0, 0xe9, 0x26, 0x7e, 0x7e, 0x69, 0x02, 0x82, 0xb5, 0x63, - 0xd4, 0x4d, 0xec, 0x62, 0xe3, 0xe0, 0xec, 0x00, 0x11, 0x67, 0xa5, 0x72, 0xc9, 0x67, 0xca, 0x6f, - 0x37, 0xa6, 0xd7, 0xcc, 0x20, 0x52, 0xb0, 0x10, 0x8a, 0xbf, 0x82, 0x10, 0x35, 0xe9, 0xfc, 0x90, - 0x43, 0xbc, 0xfa, 0xec, 0xcd, 0x04, 0x0b, 0x8a, 0xd4, 0x0b, 0x02, 0x4a, 0x8f, 0x17, 0x8d, 0xc1, - 0x2a, 0x96, 0x11, 0x78, 0xc3, 0xc4, 0xb8, 0xa4, 0x36, 0x04, 0xe8, 0x43, 0x96, 0xde, 0x83, 0xe7, - 0x3f, 0x79, 0x52, 0xab, 0xd5, 0xcc, 0x38, 0x42, 0x61, 0xb3, 0x8f, 0xbe, 0x1b, 0xe3, 0x9d, 0x69, - 0xe5, 0x1a, 0x4f, 0x72, 0xc9, 0x75, 0xe2, 0x76, 0x65, 0x11, 0x64, 0x0e, 0x24, 0x0c, 0x60, 0x6a, - 0x49, 0x2b, 0x9e, 0x9f, 0x9a, 0xda, 0xd0, 0x6d, 0xbc, 0x37, 0xb6, 0xb5, 0x6f, 0x8b, 0x1b, 0x15, - 0x49, 0x99, 0x6b, 0x66, 0x05, 0x6f, 0x1f, 0x64, 0x22, 0xaf, 0x3c, 0x11, 0xa5, 0xdd, 0x5e, 0x9c, - 0xaa, 0x95, 0x9d, 0x5b, 0xb3, 0x6d, 0x0e, 0xcd, 0xa6, 0x53, 0xc7, 0xc6, 0x33, 0x79, 0x44, 0x69, - 0x22, 0xfc, 0x4e, 0x70, 0x1d, 0x54, 0x13, 0x0f, 0x60, 0x29, 0x4d, 0x7d, 0x0f, 0x18, 0xee, 0xa0, - 0xf4, 0xe5, 0x71, 0x2d, 0xc5, 0x68, 0xec, 0x81, 0xc4, 0xc3, 0x23, 0x95, 0x33, 0x5e, 0xf3, 0x96, - 0xec, 0x0e, 0x17, 0x1c, 0x89, 0xb8, 0xb7, 0x55, 0xbe, 0xd7, 0x2d, 0x51, 0x88, 0x43, 0x73, 0x89, - 0xa8, 0xf1, 0xbc, 0x1b, 0x48, 0x38, 0xb5, 0xf1, 0x44, 0xb8, 0xb4, 0xac, 0x21, 0x55, 0xd8, 0xfc, - 0xe1, 0x7e, 0xcd, 0xb5, 0x76, 0x5b, 0x77, 0x62, 0xdc, 0xc9, 0x7e, 0x5b, 0xa6, 0xbc, 0x89, 0xdc, - 0x9d, 0x9c, 0x2a, 0x7a, 0xd1, 0x12, 0xfe, 0x58, 0x63, 0x1f, 0x98, 0xe0, 0x96, 0x88, 0xf4, 0xd1, - 0x2c, 0x51, 0xad, 0x6b, 0xa9, 0xe2, 0x48, 0x97, 0xdf, 0xec, 0x57, 0xb6, 0x1c, 0x7d, 0x33, 0xf3, - 0x23, 0x78, 0x26, 0x89, 0xff, 0xf2, 0x84, 0x38, 0xca, 0x17, 0x75, 0x92, 0x71, 0xe5, 0x9d, 0xff, - 0x1d, 0x61, 0x0d, 0x31, 0x55, 0x73, 0xd1, 0x2d, 0x2d, 0x64, 0x30, 0x52, 0xd3, 0x7e, 0x35, 0x0d, - 0x46, 0x24, 0x19, 0x5f, 0xd9, 0x46, 0x70, 0x54, 0x82, 0xe0, 0x48, 0x62, 0x38, 0xca, 0x45, 0xbc, - 0x90, 0xf3, 0x7b, 0xcd, 0xcf, 0x31, 0x92, 0x5f, 0x85, 0x3d, 0x55, 0xb2, 0x85, 0x5d, 0x80, 0x0e, - 0xe8, 0x49, 0xb4, 0xaa, 0xe7, 0xe2, 0xd5, 0xc2, 0xc8, 0x85, 0xb1, 0x61, 0xc1, 0x9b, 0xf2, 0x33, - 0xa6, 0xa4, 0x52, 0xda, 0xbd, 0x3f, 0x1a, 0x43, 0x32, 0xf2, 0xd0, 0x15, 0x62, 0x30, 0x74, 0x10, - 0x43, 0x77, 0xce, 0xd0, 0x0b, 0xc1, 0x17, 0xf8, 0x3c, 0xe6, 0x99, 0xfd, 0x11, 0x1e, 0x42, 0x5d, - 0x46, 0x9d, 0x06, 0x97, 0x92, 0x90, 0x61, 0xa5, 0x40, 0x22, 0x77, 0xe6, 0xf3, 0x4f, 0x3a, 0x6c, - 0xd0, 0x28, 0xa0, 0x46, 0xc2, 0x25, 0x4c, 0xc3, 0x13, 0x5e, 0x6f, 0xec, 0xb8, 0x0e, 0xba, 0xe2, - 0x90, 0xb8, 0xd6, 0x0c, 0x12, 0xc4, 0x68, 0xc9, 0x22, 0xee, 0x72, 0x7e, 0x05, 0x57, 0xe8, 0x72, - 0xef, 0x08, 0xa6, 0x4e, 0x72, 0x61, 0x35, 0x39, 0x24, 0xda, 0x2f, 0x39, 0xbf, 0x99, 0xc8, 0x04, - 0x9d, 0x09, 0xfa, 0xc1, 0x31, 0xc6, 0x68, 0xf6, 0x0d, 0x00, 0xc0, 0x86, 0xed, 0x82, 0x5f, 0x06, - 0xb5, 0xa8, 0x94, 0xe9, 0xc5, 0xb5, 0xf5, 0xc0, 0xd0, 0x11, 0xb1, 0xd9, 0x22, 0x71, 0x4b, 0x0c, - 0x8a, 0x12, 0x49, 0x60, 0x67, 0xec, 0x4d, 0xe2, 0xe4, 0x48, 0x04, 0x57, 0x69, 0x76, 0xe3, 0x65, - 0x24, 0x76, 0x86, 0x60, 0xbe, 0x13, 0xc7, 0x66, 0xd1, 0xee, 0xf1, 0x99, 0x4f, 0x13, 0xed, 0x18, - 0xde, 0x19, 0x91, 0x59, 0xbf, 0x8c, 0xdd, 0x91, 0x23, 0x90, 0xa3, 0x68, 0x66, 0xae, 0x3f, 0x16, - 0x09, 0x0e, 0x10, 0x99, 0x4e, 0x73, 0x59, 0x41, 0xa5, 0x3c, 0x2d, 0xb8, 0x3a, 0x97, 0x61, 0x7f, - 0x87, 0x3d, 0xf0, 0xe5, 0xad, 0x88, 0xd3, 0x45, 0xb0, 0x98, 0x7f, 0x70, 0x65, 0xf8, 0x63, 0x61, - 0x05, 0x01, 0x2e, 0x74, 0x7e, 0xdf, 0x87, 0x24, 0xcd, 0xf7, 0x4e, 0xee, 0x40, 0x52, 0xb6, 0x03, - 0xf2, 0x9a, 0x80, 0x77, 0xdb, 0x5d, 0xd2, 0xf3, 0x2f, 0x18, 0x0f, 0x2f, 0x50, 0xc1, 0xf0, 0x2a, - 0xdb, 0x96, 0x57, 0x8e, 0x01, 0xfb, 0xfe, 0x19, 0x86, 0x64, 0xf3, 0x64, 0xd3, 0xf0, 0x2a, 0xfb, - 0xbd, 0x43, 0x3a, 0x33, 0x5e, 0xae, 0xca, 0x29, 0xf1, 0x1e, 0x2d, 0xe8, 0x15, 0x6e, 0x5b, 0xfb, - 0xee, 0x64, 0x53, 0xe2, 0x1b, 0x99, 0xd1, 0xe6, 0x66, 0xa0, 0xa1, 0xa7, 0x1d, 0x7d, 0xa8, 0x52, - 0x33, 0x97, 0x89, 0xdc, 0x5c, 0xde, 0x15, 0x36, 0x06, 0x2a, 0x6f, 0xdc, 0x19, 0x80, 0xda, 0x75, - 0xcf, 0xbe, 0x40, 0x1a, 0x3c, 0xa5, 0x6e, 0x42, 0xe9, 0xba, 0x09, 0x5d, 0x72, 0xde, 0xe9, 0x0e, - 0xbc, 0x51, 0xcc, 0xc8, 0x64, 0xb3, 0xa3, 0x9f, 0x40, 0x56, 0xb2, 0x7d, 0xba, 0x46, 0xeb, 0xe8, - 0x81, 0xad, 0x0a, 0xe7, 0xfb, 0xb6, 0x37, 0xeb, 0x24, 0x10, 0x3f, 0xc7, 0x9c, 0x3b, 0xb9, 0xb7, - 0x89, 0xae, 0x89, 0xe7, 0x29, 0x39, 0xe4, 0x18, 0x7f, 0x1b, 0x62, 0x07, 0x3e, 0x3c, 0x75, 0xb9, - 0x9b, 0x68, 0x25, 0xdb, 0xc2, 0x6b, 0x18, 0xaf, 0xb1, 0x76, 0x4c, 0xfb, 0xc7, 0x92, 0x1e, 0x2f, - 0x43, 0x76, 0xe0, 0xfa, 0x89, 0xf6, 0xdf, 0x71, 0xb0, 0xb0, 0x44, 0x16, 0x69, 0x6f, 0xbd, 0xcf, - 0xeb, 0xea, 0x90, 0x8b, 0xae, 0x24, 0x5c, 0xa3, 0x53, 0xaa, 0x6c, 0xb4, 0xcd, 0x65, 0xd7, 0x3c, - 0x53, 0xd5, 0x1f, 0xb1, 0x69, 0xce, 0xdb, 0x11, 0x3f, 0xee, 0x6e, 0x99, 0x57, 0x4e, 0x79, 0xaa, - 0x0b, 0xfa, 0x22, 0xd6, 0x11, 0xb3, 0xc5, 0x85, 0xe5, 0x78, 0xa9, 0xbf, 0xc2, 0x9f, 0xad, 0x78, - 0xa5, 0x40, 0xb8, 0x1e, 0xdd, 0x64, 0x15, 0x80, 0x28, 0x15, 0xf9, 0x09, 0xeb, 0xf2, 0x0c, 0x22, - 0xed, 0x18, 0x6c, 0x60, 0xe5, 0x3f, 0x9d, 0x23, 0x31, 0xf2, 0x96, 0x29, 0xa9, 0x58, 0xb6, 0xcd, - 0x02, 0xc8, 0x09, 0x6a, 0x1c, 0xdd, 0x0e, 0x43, 0x4f, 0xac, 0x63, 0xe1, 0xe6, 0xea, 0xc1, 0x1f, - 0x73, 0x0d, 0x67, 0x5a, 0x77, 0x42, 0x81, 0x01, 0x04, 0xf1, 0x2b, 0x7f, 0x5e, 0xb0, 0x5c, 0x69, - 0xb8, 0x16, 0xa9, 0x80, 0x21, 0x4e, 0xcd, 0xd2, 0x9f, 0x69, 0xe2, 0xa2, 0x9d, 0x5a, 0xe0, 0x70, - 0xe1, 0xe3, 0x34, 0x84, 0x8c, 0x61, 0x52, 0x87, 0xec, 0x86, 0x37, 0x43, 0x4d, 0xfa, 0x07, 0x2c, - 0xb9, 0xf7, 0x40, 0xd1, 0xea, 0xe0, 0xad, 0xdf, 0xab, 0x5b, 0x42, 0xb6, 0x77, 0xd8, 0x56, 0x79, - 0xfb, 0x0e, 0x1d, 0x9e, 0x0e, 0x92, 0x07, 0x53, 0xae, 0xb6, 0xed, 0xb0, 0x92, 0x33, 0x44, 0x22, - 0xee, 0x0a, 0xee, 0x5f, 0x96, 0xbb, 0x6b, 0x9a, 0x54, 0x8f, 0x6f, 0xd2, 0x14, 0xec, 0x25, 0xed, - 0xd1, 0x94, 0xdd, 0xfe, 0x17, 0x92, 0x26, 0xf9, 0x7b, 0x17, 0x11, 0xcf, 0xa0, 0xee, 0xb1, 0xff, - 0xcd, 0x03, 0x29, 0x6e, 0x82, 0x4e, 0x31, 0xfd, 0x17, 0x25, 0xc1, 0x32, 0xa8, 0xf3, 0x1e, 0xe1, - 0x6b, 0xa1, 0x65, 0x28, 0xf5, 0x49, 0x62, 0xcd, 0x95, 0x36, 0x1b, 0x29, 0xe6, 0x19, 0xa4, 0x98, - 0xe5, 0xce, 0x72, 0x51, 0x96, 0x6d, 0x66, 0x59, 0xa5, 0xa2, 0x1f, 0xc1, 0x13, 0x35, 0x29, 0x23, - 0x4e, 0x65, 0xbd, 0x87, 0xcc, 0x41, 0xc2, 0x94, 0x27, 0x31, 0xbc, 0xdd, 0x51, 0xa8, 0x6e, 0x53, - 0xd0, 0x0b, 0x55, 0x29, 0xa4, 0xa8, 0x63, 0xdf, 0x87, 0x3c, 0x5f, 0xc7, 0xf2, 0x2f, 0x4a, 0xf2, - 0xd5, 0x28, 0x25, 0x8a, 0x51, 0xf7, 0x83, 0xb5, 0x58, 0x58, 0xc4, 0xf6, 0xc3, 0x50, 0x96, 0x7e, - 0x98, 0x1e, 0x88, 0xe4, 0xe7, 0x15, 0x19, 0x7d, 0x80, 0xe4, 0x94, 0x28, 0x51, 0x1c, 0xfa, 0x50, - 0xe0, 0xa0, 0x37, 0x49, 0xdb, 0x0b, 0x9c, 0x40, 0x65, 0x27, 0xf6, 0x12, 0x61, 0xee, 0xa0, 0x80, - 0xbd, 0x1a, 0xa2, 0xe0, 0xef, 0xe5, 0x6c, 0x62, 0xc7, 0x7f, 0xc3, 0xac, 0xde, 0x04, 0xc3, 0x88, - 0x73, 0x1c, 0x4b, 0xc1, 0xbd, 0xdf, 0x14, 0x5c, 0x65, 0x43, 0x72, 0x46, 0xf9, 0xda, 0xfc, 0x80, - 0x0a, 0x75, 0x0f, 0xa9, 0x5f, 0xe4, 0x20, 0xd3, 0x42, 0xa7, 0xce, 0x42, 0x3f, 0x8a, 0xa6, 0xd6, - 0x84, 0xbd, 0x26, 0x97, 0xfb, 0xf7, 0x42, 0x77, 0x32, 0x04, 0x04, 0x7f, 0xae, 0x6a, 0x83, 0xb9, - 0xfb, 0xf3, 0x5d, 0xcc, 0x7d, 0x73, 0xb7, 0xcf, 0xdc, 0xe0, 0xef, 0xdd, 0x91, 0x45, 0x84, 0x68, - 0x65, 0x3b, 0xe5, 0xd6, 0x72, 0x59, 0x0c, 0x51, 0x2d, 0xce, 0xd8, 0x7c, 0x8d, 0xb1, 0xdb, 0xf7, - 0xc2, 0x54, 0x90, 0x9b, 0x09, 0x54, 0xe3, 0x20, 0x3c, 0x3e, 0xb3, 0x44, 0xc9, 0xcf, 0xe5, 0x4f, - 0x83, 0x6d, 0x76, 0x4a, 0xee, 0xaf, 0x5e, 0x51, 0xc0, 0x1d, 0x62, 0x84, 0x77, 0x5c, 0x11, 0x12, - 0xfc, 0xf7, 0xdc, 0x59, 0xed, 0xb6, 0xa5, 0xfb, 0xe1, 0xeb, 0x8a, 0x5e, 0x29, 0x21, 0x84, 0x44, - 0xb0, 0xdb, 0xb9, 0x79, 0x02, 0xfa, 0xfe, 0x63, 0x59, 0x36, 0xf0, 0xd1, 0x72, 0x62, 0xde, 0xd8, - 0x00, 0x4b, 0xab, 0xec, 0x39, 0x06, 0xfd, 0x1e, 0x96, 0x7a, 0x4f, 0x12, 0x80, 0xaf, 0x09, 0x4f, - 0x21, 0x53, 0xa0, 0xca, 0xf6, 0xb9, 0x9d, 0xd1, 0xd2, 0x0b, 0x9d, 0xa8, 0x2c, 0x80, 0x82, 0xdc, - 0xf9, 0x8d, 0x04, 0xfc, 0x75, 0x1d, 0xa8, 0x92, 0x30, 0xd2, 0xf1, 0xc5, 0xa8, 0x88, 0xa7, 0x43, - 0x0b, 0x1c, 0xba, 0xcd, 0x72, 0xa6, 0xf3, 0xda, 0x41, 0xca, 0xb3, 0xfb, 0xfc, 0x91, 0xcc, 0x44, - 0x99, 0x9e, 0x6c, 0xda, 0xff, 0x20, 0x12, 0x6b, 0x5f, 0xe6, 0xb8, 0xdc, 0x06, 0xcb, 0x8e, 0x0e, - 0x96, 0x9e, 0x14, 0xa4, 0x5b, 0xd3, 0xe2, 0x15, 0xff, 0xf9, 0xae, 0x64, 0xea, 0x95, 0x63, 0xe6, - 0xb9, 0x5c, 0xeb, 0x95, 0x03, 0x85, 0x28, 0xe4, 0x57, 0x8e, 0x14, 0xa2, 0x84, 0x2b, 0xe5, 0xa7, - 0x0a, 0x79, 0xc5, 0x92, 0x4e, 0x0f, 0x84, 0x93, 0x9d, 0x87, 0x7c, 0xa5, 0xde, 0x39, 0xbb, 0x93, - 0xf5, 0x0e, 0x8c, 0x81, 0x64, 0x1d, 0x4c, 0xeb, 0x11, 0xaa, 0x2e, 0x17, 0x5c, 0x0f, 0x54, 0x0d, - 0x3b, 0xa2, 0xe8, 0x76, 0x7e, 0x5c, 0xd9, 0x4c, 0x90, 0xcf, 0x86, 0x45, 0x0f, 0x23, 0xc3, 0x1a, - 0xac, 0xf8, 0xe9, 0xe4, 0x11, 0x97, 0x7a, 0xc2, 0x97, 0x3f, 0x31, 0xeb, 0x1c, 0x41, 0x31, 0xa3, - 0x4a, 0x62, 0xc4, 0xc3, 0x32, 0xa5, 0xbe, 0xe2, 0xd7, 0x2d, 0x89, 0xf2, 0x14, 0x5a, 0x01, 0xf6, - 0x23, 0x16, 0xfe, 0x23, 0x0c, 0x56, 0xf7, 0xa8, 0x77, 0x25, 0x19, 0x62, 0xb9, 0x4f, 0xd6, 0x2a, - 0x22, 0x38, 0x52, 0xdd, 0xb3, 0x14, 0x09, 0xb8, 0x87, 0xc7, 0x7b, 0x37, 0xa0, 0x4b, 0x14, 0x1f, - 0x17, 0xbf, 0xc4, 0x73, 0x97, 0xae, 0x53, 0x45, 0x3a, 0x86, 0x50, 0x1c, 0x9f, 0xc5, 0x2e, 0x1d, - 0x7b, 0x9b, 0xa0, 0x13, 0xc7, 0x63, 0x34, 0x52, 0x39, 0xbf, 0x87, 0x02, 0xa2, 0x92, 0x09, 0xfa, - 0xfd, 0xed, 0xe8, 0xd5, 0x82, 0xc8, 0x9e, 0xf2, 0x6a, 0x10, 0x7f, 0x1c, 0x91, 0xc4, 0x6c, 0x11, - 0xb8, 0x79, 0xfa, 0x95, 0xf2, 0xdc, 0xb0, 0x41, 0xc9, 0x3f, 0x9f, 0x1b, 0xd2, 0x64, 0x2f, 0x3d, - 0xdd, 0x72, 0x6f, 0x40, 0xe1, 0xc2, 0x53, 0x80, 0xb2, 0xbc, 0x10, 0xf7, 0x08, 0xfe, 0x4f, 0x36, - 0x1f, 0xea, 0xb8, 0x9f, 0x92, 0x2b, 0x93, 0xc5, 0x4f, 0x38, 0x26, 0x64, 0xeb, 0xb8, 0x15, 0x83, - 0xfb, 0x32, 0xf8, 0x1b, 0xae, 0xff, 0x03, 0x0d, 0x22, 0xe8, 0x1f, 0xd3, 0x55, 0x00, 0x00 + 0x52, 0xf5, 0x5d, 0xcd, 0x57, 0xb5, 0x95, 0x69, 0x74, 0x57, 0xbd, 0x76, 0x77, 0x85, 0xd9, 0x84, + 0xb2, 0x0b, 0x03, 0xad, 0xae, 0x04, 0x0a, 0x15, 0x97, 0x28, 0x9b, 0xdd, 0xe1, 0xe1, 0xaa, 0xd7, + 0x7a, 0x79, 0x11, 0x6c, 0x19, 0xa6, 0xb9, 0xe2, 0x9f, 0x0d, 0x7c, 0xd9, 0x06, 0x90, 0x55, 0xb5, + 0xa5, 0xf7, 0xdc, 0x81, 0x12, 0xed, 0xb0, 0x76, 0x2d, 0x82, 0x4a, 0xe0, 0x1f, 0x4b, 0x27, 0xe4, + 0xae, 0x50, 0xed, 0x6c, 0x03, 0x0a, 0x1d, 0xca, 0x83, 0x41, 0xc9, 0x9d, 0x86, 0x56, 0x55, 0x5d, + 0x43, 0x32, 0x20, 0x3c, 0x6b, 0x38, 0xe5, 0xb2, 0x4a, 0xdc, 0x61, 0xc9, 0xb3, 0x97, 0x97, 0x26, + 0xb0, 0xe8, 0x6a, 0x2e, 0xb7, 0x0a, 0x17, 0xac, 0x02, 0xc6, 0xee, 0xb4, 0xf5, 0x5c, 0x4a, 0x62, + 0x42, 0x92, 0xa3, 0xe5, 0x11, 0xfa, 0x9e, 0x0d, 0x49, 0xc5, 0x83, 0xc9, 0xf1, 0x0d, 0xb0, 0x78, + 0x3c, 0x30, 0x3a, 0xbc, 0x86, 0x5c, 0x6b, 0xde, 0x0b, 0x38, 0x58, 0x78, 0x2c, 0xa9, 0x71, 0x81, + 0x70, 0x69, 0xb5, 0x40, 0x5a, 0xad, 0xe6, 0x01, 0x30, 0xc0, 0x51, 0xd9, 0x3e, 0x47, 0x55, 0x9c, + 0x6f, 0x4e, 0xb4, 0x38, 0xd0, 0x94, 0x23, 0x4f, 0x06, 0x42, 0x10, 0x9d, 0x54, 0x70, 0x1c, 0xc5, + 0xc4, 0x99, 0x01, 0x8e, 0x2a, 0x7d, 0xda, 0xb2, 0xcb, 0x3c, 0x07, 0x5b, 0x16, 0xd9, 0xd4, 0x81, + 0x09, 0xf0, 0x3b, 0x06, 0xff, 0x53, 0x2e, 0x81, 0x8f, 0x37, 0x45, 0x09, 0xe8, 0x6a, 0x91, 0xa4, + 0x4d, 0x4b, 0x58, 0x7f, 0x1b, 0xb7, 0x21, 0xdd, 0x33, 0xeb, 0xfd, 0x43, 0x23, 0xfa, 0xbf, 0x23, + 0xb0, 0x69, 0x19, 0x1e, 0xe3, 0x18, 0x87, 0x36, 0x1b, 0x1c, 0x4f, 0x5b, 0x4f, 0xcc, 0xac, 0x2c, + 0x23, 0x49, 0xf0, 0x58, 0x5b, 0x78, 0xa0, 0x10, 0x68, 0xa1, 0x78, 0xcb, 0xc7, 0x81, 0x67, 0xdb, + 0xf6, 0x14, 0x19, 0xcb, 0x97, 0xde, 0x23, 0xa4, 0x62, 0x6c, 0x42, 0xa0, 0x8c, 0xc6, 0xea, 0xb4, + 0x43, 0xef, 0x20, 0x6f, 0x04, 0xcf, 0x33, 0x21, 0x4a, 0xe8, 0xc7, 0x16, 0xbe, 0x32, 0x4e, 0xf4, + 0xff, 0xfe, 0x2f, 0x35, 0xcd, 0x8c, 0x26, 0xfb, 0xf1, 0x4d, 0xd8, 0x37, 0x74, 0x0f, 0xbc, 0x5d, + 0xd5, 0xa1, 0x6b, 0x74, 0x12, 0x21, 0x98, 0xf8, 0x3f, 0x96, 0x0c, 0xc2, 0x22, 0xf7, 0x9a, 0x7e, + 0x78, 0xea, 0xba, 0x0a, 0xad, 0x3d, 0xc1, 0x8a, 0x6a, 0x4b, 0x33, 0x4c, 0xfc, 0x66, 0xe6, 0x4a, + 0x97, 0xdc, 0x87, 0x86, 0xe8, 0xf8, 0x36, 0xe6, 0xba, 0x39, 0x49, 0xee, 0x84, 0x82, 0xd7, 0x4a, + 0x6e, 0x6d, 0x61, 0xea, 0xda, 0x23, 0xb6, 0xd2, 0x00, 0x7d, 0x46, 0x26, 0xd8, 0x2a, 0xbf, 0x67, + 0x66, 0xb0, 0xab, 0xfc, 0xf6, 0x4b, 0x5f, 0x25, 0x05, 0xcf, 0x19, 0x54, 0x0b, 0x33, 0x59, 0xb1, + 0x60, 0xf1, 0x33, 0x4b, 0x8a, 0x9f, 0x99, 0xfa, 0x8a, 0xb9, 0x43, 0x50, 0x35, 0x79, 0x63, 0xa1, + 0x5b, 0x32, 0x38, 0xa9, 0x9c, 0x66, 0x49, 0xe5, 0x24, 0x68, 0x28, 0xae, 0xf9, 0xa7, 0x0a, 0x1c, + 0x55, 0x94, 0x37, 0xcf, 0x7c, 0x06, 0x48, 0x10, 0x22, 0xa4, 0x26, 0xbe, 0x38, 0x1e, 0x88, 0x25, + 0xc8, 0x24, 0x6d, 0xfb, 0xae, 0x1f, 0x9a, 0xf4, 0xbb, 0xe9, 0x74, 0x4a, 0xbb, 0x69, 0x3d, 0x94, + 0x0e, 0x6c, 0x36, 0xb3, 0x71, 0x47, 0x46, 0xae, 0x1b, 0xb0, 0x8f, 0xe7, 0xa4, 0xda, 0x9b, 0x25, + 0xd5, 0xde, 0x2c, 0xa9, 0xf6, 0x66, 0x49, 0xb5, 0x37, 0x93, 0xdd, 0x80, 0x60, 0xab, 0x1b, 0x10, + 0xe4, 0xba, 0x01, 0xb8, 0x44, 0xd8, 0xf3, 0xec, 0xe6, 0xda, 0x02, 0xa7, 0x61, 0x68, 0xad, 0x6a, + 0x4e, 0xc4, 0xff, 0x26, 0xe5, 0xbc, 0x8a, 0x8b, 0xfc, 0x00, 0x8b, 0xfc, 0xd0, 0x93, 0x6d, 0x03, + 0xb9, 0xd2, 0x0f, 0xb0, 0xd2, 0xab, 0x5a, 0xb0, 0x8c, 0xe6, 0x12, 0xf4, 0xd3, 0xc3, 0x67, 0x55, + 0x16, 0xbb, 0x3a, 0x94, 0xba, 0x41, 0xbe, 0xd4, 0x05, 0x2a, 0xce, 0x81, 0xf9, 0x55, 0xd0, 0x9d, + 0x02, 0x27, 0xaf, 0x95, 0xbc, 0xd3, 0x44, 0x08, 0xd3, 0x44, 0x08, 0xd3, 0x44, 0x08, 0xd3, 0x44, + 0x08, 0xd3, 0x44, 0x08, 0xd3, 0x44, 0x08, 0xd3, 0x44, 0x08, 0xd3, 0x5c, 0xc9, 0x3b, 0x2d, 0x2d, + 0x79, 0xaf, 0x4a, 0x99, 0x78, 0x6b, 0xc9, 0x7b, 0xb5, 0xaf, 0xe4, 0x15, 0xd2, 0xff, 0xba, 0x25, + 0xfd, 0xec, 0x89, 0x94, 0x5b, 0x4a, 0x27, 0x7b, 0xc7, 0xbb, 0x2e, 0xeb, 0xf5, 0x4a, 0x34, 0x67, + 0x98, 0xd9, 0x67, 0xb9, 0xe6, 0x4c, 0x50, 0x6c, 0xce, 0x0c, 0xb6, 0x95, 0x0d, 0x82, 0x2c, 0xed, + 0x6c, 0x3d, 0xde, 0x81, 0xa0, 0xdf, 0x6c, 0x0e, 0xa8, 0x1f, 0x5a, 0xde, 0x0c, 0x9d, 0x00, 0xd7, + 0xd3, 0xf5, 0x9a, 0xb9, 0x11, 0xe3, 0x02, 0xba, 0xdc, 0x35, 0xac, 0x9b, 0xef, 0xa2, 0x43, 0xa1, + 0x96, 0xf5, 0xd0, 0x3f, 0xf9, 0x9f, 0x5f, 0x5e, 0x44, 0x40, 0x77, 0x23, 0xee, 0xdb, 0x44, 0xfc, + 0x59, 0xc8, 0xf8, 0x23, 0x1f, 0x82, 0x0b, 0xc2, 0xf2, 0x07, 0xd2, 0x81, 0x3c, 0x26, 0xed, 0x12, + 0xc2, 0x99, 0x62, 0x65, 0x54, 0xb7, 0xf0, 0xa8, 0x6a, 0xf5, 0xb2, 0xbf, 0x00, 0xa8, 0x85, 0x69, + 0x55, 0x2f, 0x55, 0xed, 0xb2, 0x6f, 0xc3, 0x17, 0xdb, 0x84, 0x8f, 0x7f, 0xde, 0x8c, 0x7b, 0x18, + 0x79, 0x94, 0xc7, 0x2a, 0x8c, 0x06, 0x79, 0x0b, 0x5a, 0x18, 0x17, 0xb1, 0x51, 0x7d, 0x26, 0x77, + 0x40, 0x16, 0xd2, 0x51, 0x6f, 0x3d, 0x37, 0xcd, 0xc7, 0x01, 0x05, 0x99, 0x29, 0xb4, 0xfa, 0x58, + 0xa5, 0x24, 0x98, 0xaf, 0x22, 0xc7, 0xb6, 0xdc, 0xc4, 0xb3, 0x2f, 0xf4, 0x42, 0x05, 0x14, 0x6b, + 0x62, 0xff, 0x21, 0xae, 0x63, 0xda, 0xff, 0x17, 0x43, 0x97, 0x55, 0xf4, 0x64, 0x6c, 0x65, 0xe1, + 0x74, 0x6c, 0xd9, 0x0f, 0xb3, 0xd0, 0x5f, 0x7a, 0x13, 0xf3, 0x0b, 0xba, 0x65, 0x2b, 0x3c, 0x9a, + 0x85, 0xd6, 0xc4, 0xc1, 0xae, 0xfb, 0x3b, 0x7d, 0xc2, 0x66, 0x1a, 0xf9, 0xfe, 0x59, 0xb4, 0x13, + 0x8e, 0xf5, 0x81, 0xf8, 0xf0, 0x0e, 0x12, 0x76, 0xbe, 0xe2, 0xb9, 0x55, 0xb4, 0x6d, 0x9b, 0xae, + 0x89, 0x9e, 0x00, 0xaf, 0x7f, 0xd0, 0xc8, 0x77, 0xad, 0x56, 0x2b, 0xfb, 0x4e, 0x80, 0xfe, 0x0f, + 0xea, 0x17, 0xb9, 0x22, 0x6c, 0xb2, 0xab, 0x3a, 0xb0, 0xfb, 0xd7, 0x56, 0x3c, 0x47, 0xf7, 0xa4, + 0x70, 0xa7, 0xaa, 0x9d, 0xe8, 0xba, 0xfa, 0xf2, 0x22, 0x28, 0x9f, 0xe8, 0xe5, 0x31, 0xb2, 0x04, + 0x9f, 0x50, 0xc1, 0x04, 0x9b, 0xf5, 0xad, 0x04, 0x9b, 0xa1, 0x6f, 0x4e, 0x44, 0x60, 0x7b, 0x82, + 0x02, 0x34, 0xf2, 0xbd, 0x82, 0x30, 0x33, 0xfa, 0x27, 0xfa, 0x0f, 0xd8, 0x84, 0x07, 0x74, 0x35, + 0x6c, 0xa6, 0x90, 0x05, 0x5b, 0xf8, 0xe1, 0x8a, 0x56, 0xb3, 0xa6, 0xcb, 0xe0, 0x0b, 0x51, 0x7a, + 0xe3, 0xfe, 0xc5, 0xdd, 0xdd, 0xcd, 0x5d, 0x87, 0xfc, 0xca, 0x9b, 0x27, 0x3e, 0xc4, 0x64, 0x10, + 0x06, 0xae, 0xc4, 0x7a, 0x78, 0xd0, 0xab, 0x8f, 0xfb, 0xea, 0x17, 0x48, 0xc1, 0xd5, 0x0e, 0xe0, + 0xd3, 0x45, 0x53, 0x26, 0x00, 0x08, 0x19, 0xc4, 0x79, 0x50, 0x9c, 0x9b, 0x9c, 0x77, 0x9b, 0x39, + 0xae, 0xa2, 0x00, 0xda, 0xea, 0xe3, 0x5f, 0x44, 0xa1, 0xa3, 0xd6, 0xdb, 0x30, 0x8b, 0x7a, 0xa3, + 0x3b, 0x37, 0xe7, 0xfd, 0xf6, 0x20, 0x83, 0x9a, 0xab, 0x9d, 0x79, 0xd7, 0x32, 0x65, 0x66, 0x3f, + 0xe6, 0x19, 0xdd, 0x66, 0x89, 0xad, 0x0d, 0xcd, 0x7c, 0x75, 0x95, 0x75, 0x32, 0xe6, 0x3d, 0xa3, + 0xa6, 0x37, 0x0e, 0x0f, 0x0f, 0xc6, 0xf0, 0x6f, 0x38, 0x00, 0x34, 0x17, 0xa3, 0x5b, 0xd2, 0xfe, + 0x0d, 0x3b, 0x90, 0xe4, 0xc9, 0x89, 0xe7, 0xc4, 0x38, 0x25, 0xbf, 0x8e, 0x86, 0x24, 0x5a, 0x06, + 0x81, 0xbb, 0xa2, 0x1d, 0xc5, 0xaa, 0x9a, 0xe3, 0x01, 0x35, 0x1a, 0xbf, 0x11, 0xda, 0x19, 0x0e, + 0xe8, 0xc7, 0x51, 0xe3, 0xc4, 0x68, 0x13, 0xf1, 0x9d, 0xc2, 0x40, 0xaa, 0x01, 0xc4, 0x1c, 0xff, + 0x47, 0x4f, 0xe5, 0x28, 0xec, 0xad, 0x79, 0x90, 0x41, 0x40, 0x52, 0x12, 0xfb, 0x7c, 0xda, 0x54, + 0x14, 0x6a, 0xa3, 0xdd, 0x93, 0x35, 0xc4, 0x6c, 0xb5, 0x0b, 0x93, 0x2a, 0xbc, 0x71, 0xe5, 0x47, + 0x31, 0x61, 0xd3, 0x29, 0xa0, 0x89, 0x34, 0xf2, 0x9f, 0xb4, 0x7b, 0x51, 0x35, 0x47, 0xe6, 0xa8, + 0x20, 0x89, 0x91, 0xda, 0x19, 0x69, 0x17, 0x9c, 0xb0, 0x13, 0x11, 0xe6, 0xf9, 0xcb, 0xd9, 0x5c, + 0xed, 0x8d, 0xc3, 0x7e, 0xd6, 0x1e, 0x2a, 0x2c, 0xaf, 0x55, 0xe8, 0x1a, 0x65, 0xcf, 0x87, 0x68, + 0x6f, 0x17, 0xe2, 0xe5, 0x57, 0xa1, 0x13, 0x45, 0x75, 0x3d, 0x91, 0x92, 0xbc, 0xbc, 0x97, 0x75, + 0x2a, 0x4d, 0x34, 0x33, 0xb7, 0xc5, 0x65, 0x45, 0xf1, 0x85, 0x37, 0x91, 0xcd, 0x3e, 0xd6, 0x33, + 0x92, 0x06, 0x9e, 0xde, 0x7d, 0x7c, 0xcd, 0x7f, 0x8c, 0x40, 0xb1, 0xd8, 0x11, 0x44, 0x8f, 0xcc, + 0x87, 0x54, 0x5f, 0xef, 0x39, 0x6c, 0x0e, 0xe9, 0x8a, 0x02, 0xfd, 0x75, 0x5f, 0xb5, 0x35, 0x50, + 0x72, 0xea, 0xf1, 0xf2, 0xc7, 0x13, 0xe5, 0x0f, 0x54, 0xe1, 0xaa, 0xe6, 0x44, 0xbf, 0x58, 0xbf, + 0x28, 0x8f, 0xea, 0x40, 0xef, 0x3c, 0x66, 0x53, 0x85, 0xa2, 0x15, 0x17, 0x35, 0xdd, 0xce, 0x13, + 0x7b, 0x19, 0x1b, 0xe4, 0xce, 0x92, 0x2d, 0x1d, 0x48, 0xef, 0x46, 0xf7, 0x90, 0xdc, 0x39, 0x66, + 0x9c, 0x26, 0x72, 0x53, 0xe5, 0x40, 0x81, 0x0a, 0x04, 0xa2, 0x95, 0xd3, 0xc7, 0xb4, 0x6a, 0xf8, + 0xf2, 0x72, 0x24, 0xbe, 0x83, 0x32, 0x3b, 0x6a, 0xd2, 0xbd, 0x16, 0x0e, 0x0f, 0xe6, 0xca, 0x23, + 0x27, 0x02, 0x24, 0xf5, 0xf8, 0x97, 0xde, 0xc4, 0x79, 0x24, 0x7c, 0xdb, 0xc8, 0xe4, 0xf8, 0xfb, + 0xbf, 0x7b, 0xbd, 0x39, 0x14, 0xba, 0xb8, 0x6e, 0x72, 0x77, 0xb9, 0xd3, 0x38, 0xd6, 0x83, 0x6f, + 0xf8, 0xe6, 0xfb, 0x67, 0xa7, 0x6a, 0xac, 0x3b, 0x00, 0x22, 0x1a, 0x02, 0x44, 0xec, 0x1b, 0x5f, + 0xdd, 0xc3, 0x8b, 0x35, 0x25, 0x50, 0xb4, 0xcd, 0xd1, 0x33, 0x98, 0xf4, 0xd7, 0x4b, 0x25, 0x0e, + 0x41, 0x22, 0x1c, 0x9d, 0x1f, 0xf0, 0xd9, 0xca, 0x92, 0xb2, 0xd1, 0xa0, 0x44, 0x8c, 0x66, 0x93, + 0x3e, 0xb7, 0x82, 0x6f, 0xbd, 0xba, 0x00, 0xd9, 0x06, 0x6e, 0xea, 0xb4, 0x3f, 0xfa, 0xdb, 0xf1, + 0x89, 0xd1, 0x20, 0x77, 0x1f, 0x86, 0x1f, 0xf7, 0x00, 0x1a, 0xb4, 0x7f, 0x7f, 0x6d, 0x9c, 0x18, + 0xad, 0xdd, 0x30, 0x8d, 0x16, 0x85, 0x42, 0x51, 0x7f, 0xf8, 0xf9, 0x3f, 0xf6, 0xc0, 0xb4, 0x05, + 0x9e, 0xc6, 0xbb, 0xdd, 0x30, 0x6d, 0x60, 0x0a, 0x19, 0xd7, 0x8d, 0x3d, 0x30, 0xc0, 0xcf, 0xe9, + 0xed, 0xa9, 0xa1, 0x37, 0xf6, 0xc0, 0x34, 0x68, 0xff, 0xea, 0xf6, 0xfc, 0xe4, 0x44, 0x3f, 0xde, + 0x03, 0xd4, 0xe2, 0x40, 0xc7, 0x27, 0x7a, 0x73, 0x0f, 0x50, 0x93, 0xf6, 0x6f, 0xdf, 0x9d, 0x18, + 0x7b, 0x40, 0x5a, 0xc0, 0xf4, 0x8d, 0x57, 0xbf, 0x99, 0x4e, 0xf7, 0xc0, 0x00, 0xd3, 0xb7, 0x1f, + 0xaf, 0xc9, 0xc7, 0xb9, 0x13, 0xb3, 0x3d, 0x60, 0x0d, 0x01, 0x76, 0x76, 0x76, 0xbf, 0x07, 0xa8, + 0x29, 0x80, 0x60, 0xd9, 0xf6, 0x00, 0xb5, 0x52, 0xa0, 0x3d, 0x6b, 0xdb, 0x6a, 0xa7, 0x50, 0xd5, + 0x22, 0xcd, 0xdf, 0xbf, 0x35, 0xed, 0x83, 0xa3, 0xa3, 0x0d, 0xf0, 0xe3, 0x0c, 0xfc, 0x3c, 0x07, + 0x7f, 0x74, 0x04, 0xe0, 0x6c, 0x0b, 0xfb, 0x09, 0x08, 0xe6, 0xfc, 0xfc, 0x16, 0xc1, 0x89, 0xe2, + 0xb1, 0xf8, 0xc9, 0x0f, 0x1f, 0xd4, 0xd7, 0x68, 0x9c, 0x80, 0xa4, 0x2e, 0x8c, 0x5a, 0xd3, 0x28, + 0x1f, 0x96, 0x90, 0x2a, 0x1f, 0x0b, 0xe2, 0x3b, 0x0d, 0xe3, 0x5f, 0x58, 0xbc, 0x7f, 0x70, 0xaf, + 0x2e, 0xcc, 0xa4, 0x8f, 0x9e, 0x18, 0xbe, 0xa2, 0xa1, 0x3a, 0x13, 0x93, 0xda, 0xbe, 0xb0, 0x36, + 0x69, 0xa2, 0xd2, 0xb7, 0x76, 0x64, 0xa4, 0xef, 0x9f, 0x61, 0x28, 0x27, 0x37, 0xe1, 0x84, 0x85, + 0x5b, 0x86, 0x7a, 0x76, 0xc3, 0x87, 0x6e, 0x8b, 0x18, 0x64, 0xf0, 0xe1, 0x6e, 0xcf, 0x42, 0xc1, + 0x74, 0xf7, 0x2e, 0x24, 0x4c, 0x69, 0x78, 0xf7, 0x61, 0x8f, 0x79, 0xc2, 0xf8, 0xe1, 0x9e, 0xf7, + 0xa0, 0x07, 0xc3, 0x0f, 0x77, 0x7b, 0x14, 0x1c, 0xf8, 0x1b, 0x16, 0xde, 0xa7, 0xc2, 0xa9, 0x83, + 0x5c, 0xf2, 0xe2, 0x99, 0x38, 0x33, 0x9c, 0xe4, 0xd3, 0x96, 0x80, 0x78, 0x9c, 0xe9, 0x8f, 0x9e, + 0xac, 0xa0, 0x43, 0x8a, 0x62, 0xf9, 0x28, 0xc5, 0xb2, 0x2d, 0x94, 0x5f, 0x60, 0x4c, 0x4a, 0x75, + 0x5b, 0x26, 0x1f, 0xc9, 0x21, 0x19, 0xee, 0x7a, 0xdf, 0x10, 0xef, 0x3f, 0xec, 0x7a, 0xdf, 0x14, + 0xef, 0xb3, 0x59, 0x95, 0xce, 0x09, 0xff, 0x44, 0x81, 0xe5, 0xf1, 0xb9, 0x05, 0xd1, 0x44, 0x70, + 0x2a, 0xda, 0x0d, 0x30, 0x00, 0xde, 0xf4, 0x49, 0x4f, 0xec, 0x74, 0xe2, 0x29, 0x0e, 0x93, 0x7a, + 0xcb, 0xc5, 0x98, 0x85, 0x34, 0x71, 0xcd, 0x23, 0xa1, 0x2c, 0x38, 0xda, 0x8d, 0xc4, 0x67, 0xe9, + 0xed, 0x5d, 0x22, 0xaa, 0x02, 0x4a, 0xb0, 0xba, 0x85, 0xd9, 0x62, 0x96, 0x86, 0xaa, 0xfd, 0xce, + 0xa0, 0x09, 0x8f, 0xdf, 0x3f, 0x27, 0xe1, 0xd8, 0x51, 0xb9, 0x83, 0xe7, 0x94, 0x4c, 0x9a, 0xaf, + 0x27, 0x10, 0xe9, 0x67, 0x13, 0xdd, 0x7d, 0x17, 0xfb, 0xff, 0x5d, 0x4a, 0x92, 0x56, 0x22, 0xa9, + 0xf7, 0x0f, 0xbd, 0x71, 0x14, 0x74, 0xb7, 0x97, 0xc7, 0xde, 0xa9, 0xbf, 0x57, 0x3c, 0xb4, 0x75, + 0xf6, 0x4e, 0xea, 0xac, 0x38, 0x11, 0x39, 0x03, 0x43, 0xce, 0x80, 0x27, 0x8e, 0xb7, 0xc3, 0x35, + 0xcd, 0x56, 0x2a, 0x63, 0x29, 0x9d, 0x02, 0xf2, 0x4a, 0x81, 0x43, 0x21, 0x6c, 0x69, 0x63, 0xf5, + 0x2d, 0x89, 0xeb, 0x52, 0xe2, 0xbc, 0x0f, 0xfc, 0x16, 0x81, 0xeb, 0x82, 0xb7, 0x82, 0x4c, 0x9b, + 0xcd, 0x1c, 0x07, 0x92, 0xeb, 0x68, 0x23, 0x5e, 0xaa, 0xb4, 0x5e, 0xa4, 0x6c, 0x48, 0xca, 0x92, + 0xe8, 0x3e, 0x9a, 0xc6, 0x0e, 0x9a, 0x6f, 0x25, 0xd5, 0x78, 0x3b, 0xa9, 0xc6, 0xbf, 0x48, 0xaa, + 0xf9, 0x76, 0x52, 0xcd, 0x7f, 0x91, 0x54, 0xeb, 0xed, 0xa4, 0x5a, 0xff, 0x14, 0xa9, 0x0d, 0x9d, + 0x0e, 0x77, 0xea, 0x34, 0x6a, 0x57, 0xc6, 0x18, 0xe4, 0xe9, 0x82, 0xb1, 0xa4, 0xf7, 0x28, 0x19, + 0xdc, 0xd0, 0x79, 0xde, 0x53, 0x1f, 0xfb, 0xdf, 0x12, 0x26, 0xcf, 0x7e, 0x4b, 0xa6, 0x53, 0xee, + 0xf1, 0xa2, 0xbd, 0xe4, 0x47, 0x0f, 0x4e, 0x40, 0xa6, 0x4e, 0x08, 0xd5, 0x00, 0xe6, 0x9c, 0x7b, + 0xed, 0x6b, 0x74, 0x55, 0x22, 0x0e, 0xa8, 0x83, 0x68, 0xe6, 0x19, 0x37, 0xec, 0x68, 0x27, 0x53, + 0xd3, 0xbd, 0x4c, 0x41, 0x36, 0x42, 0xee, 0xd8, 0x34, 0x64, 0x51, 0x66, 0xf0, 0x5c, 0x42, 0x53, + 0xc1, 0x40, 0xb9, 0x20, 0xee, 0xde, 0xef, 0x17, 0x84, 0xb5, 0x97, 0xe6, 0xe9, 0x32, 0xf6, 0x8f, + 0x6c, 0xcb, 0xb5, 0x97, 0xae, 0x15, 0x33, 0xf2, 0x84, 0xb9, 0x0e, 0x1e, 0xc8, 0x84, 0x2a, 0xc6, + 0x25, 0xd3, 0xd0, 0x5f, 0x60, 0x54, 0xee, 0x88, 0x15, 0xcb, 0x07, 0x89, 0xd3, 0x8f, 0x65, 0x41, + 0x42, 0xdf, 0x17, 0x22, 0x8c, 0xfe, 0x30, 0x74, 0x66, 0xf3, 0x98, 0x85, 0x3b, 0x00, 0x1a, 0xfd, + 0x53, 0xdb, 0xc6, 0xa3, 0x69, 0xbb, 0x30, 0x34, 0xfb, 0xe7, 0x4b, 0xcb, 0xdd, 0x8e, 0x10, 0xc2, + 0xad, 0xa6, 0x02, 0xe0, 0x7f, 0xbf, 0x74, 0x2d, 0xa8, 0xc5, 0x22, 0x16, 0xc6, 0xa7, 0x93, 0xaf, + 0x96, 0x0d, 0xd5, 0x03, 0x16, 0x65, 0x0a, 0x1d, 0x33, 0xa8, 0x03, 0x19, 0xf3, 0x26, 0x54, 0xf3, + 0xd5, 0xb5, 0x2c, 0x0f, 0x94, 0xf8, 0xd3, 0xd1, 0x91, 0xf3, 0xb9, 0x16, 0x42, 0x3d, 0xfe, 0xc8, + 0x14, 0x55, 0x83, 0x6f, 0xb2, 0x01, 0x54, 0xdd, 0x2a, 0xdb, 0x9c, 0x1e, 0x96, 0x16, 0x47, 0x46, + 0x79, 0x3b, 0xe1, 0x68, 0x1b, 0xbe, 0xbf, 0xdd, 0x79, 0xf0, 0x5e, 0x5e, 0xf8, 0xee, 0x70, 0xa1, + 0xfa, 0x39, 0xbb, 0xb9, 0x56, 0x40, 0x86, 0x50, 0xfe, 0xf0, 0xcd, 0x50, 0x51, 0x94, 0x38, 0x7b, + 0x2a, 0x20, 0xdb, 0x5f, 0xfc, 0x01, 0x0f, 0xc3, 0x15, 0xd0, 0xcc, 0xd7, 0x40, 0x50, 0xfd, 0x60, + 0xb3, 0x4d, 0x96, 0x3b, 0x85, 0xa2, 0x26, 0x1b, 0xf2, 0x96, 0xd2, 0x86, 0x88, 0xc8, 0xba, 0xcf, + 0x3a, 0xfe, 0x9e, 0x0b, 0xa9, 0xdf, 0xde, 0x14, 0x52, 0x8f, 0xdb, 0xed, 0x66, 0x3b, 0x17, 0x53, + 0xd9, 0x7a, 0xc3, 0x7e, 0x72, 0x31, 0xd3, 0xa4, 0x34, 0x0d, 0x9a, 0x6f, 0x08, 0x85, 0x7f, 0x3f, + 0xcb, 0x31, 0x63, 0xef, 0x0d, 0x8b, 0x9b, 0x5c, 0x78, 0xeb, 0x02, 0xd5, 0x4d, 0x8b, 0x96, 0x76, + 0xf5, 0xa7, 0xb2, 0x4c, 0xce, 0x85, 0x4c, 0x4f, 0x25, 0x7f, 0xff, 0xff, 0x32, 0xce, 0xc4, 0xde, + 0xb8, 0x8b, 0x90, 0x96, 0x27, 0xf7, 0x1b, 0x85, 0xa6, 0x39, 0x2c, 0xe2, 0x6d, 0x91, 0xbd, 0xa6, + 0x68, 0x49, 0x6b, 0xfb, 0xe6, 0xd3, 0xaa, 0x93, 0xf4, 0x60, 0x63, 0x6d, 0x1c, 0x7b, 0x68, 0x14, + 0xa0, 0x8b, 0xf2, 0x34, 0x45, 0x66, 0x2f, 0x60, 0xaa, 0xf8, 0x6a, 0xc7, 0xb1, 0xcb, 0x72, 0x23, + 0x01, 0xcb, 0x4a, 0x4f, 0xb3, 0xe9, 0x07, 0x26, 0x6e, 0x9e, 0x29, 0xec, 0x93, 0x77, 0x64, 0xe4, + 0x2c, 0x5f, 0x92, 0x84, 0x87, 0x82, 0xa4, 0x9a, 0x27, 0x19, 0xb1, 0x98, 0x1b, 0xa9, 0xfa, 0x8c, + 0x4e, 0x63, 0xe3, 0xec, 0x35, 0x13, 0x5b, 0x09, 0x78, 0xb6, 0x83, 0x61, 0x97, 0xef, 0x4d, 0x2c, + 0xa9, 0x2c, 0x25, 0xdd, 0x95, 0xa4, 0x0b, 0x67, 0x52, 0xc5, 0x23, 0x20, 0x98, 0xca, 0x14, 0x1c, + 0xc5, 0xf6, 0xe1, 0xa4, 0x5e, 0x91, 0x97, 0x72, 0xd7, 0x84, 0xa3, 0x81, 0xd8, 0xf6, 0xe8, 0x6d, + 0x07, 0x55, 0xf0, 0x4b, 0xc3, 0xd8, 0x13, 0x87, 0x62, 0x13, 0x8f, 0xc4, 0xb1, 0x01, 0x6b, 0x51, + 0xbe, 0xdf, 0xa5, 0x59, 0x26, 0xee, 0x68, 0x54, 0x47, 0x7c, 0x5b, 0xa2, 0x86, 0xb1, 0xe3, 0x6c, + 0x6e, 0x85, 0x67, 0xfe, 0x84, 0x29, 0xd8, 0xb8, 0xd2, 0x07, 0xad, 0x93, 0x4e, 0xbb, 0xad, 0x56, + 0x41, 0x4e, 0x4e, 0xd5, 0xfc, 0x32, 0x5c, 0xc6, 0xb1, 0xcf, 0xcf, 0xc7, 0xad, 0xc5, 0xb1, 0x82, + 0x72, 0xc3, 0xe6, 0x46, 0x7b, 0x94, 0x58, 0x2d, 0xd4, 0xed, 0xd2, 0x94, 0xbe, 0x7f, 0xb6, 0xd6, + 0x5b, 0x79, 0x48, 0x62, 0xec, 0xdf, 0xa2, 0xa2, 0x65, 0xf7, 0xbf, 0x68, 0x48, 0x52, 0xc6, 0x89, + 0x42, 0x20, 0xfb, 0xfe, 0x99, 0x0e, 0x2f, 0xde, 0xc4, 0x75, 0x8a, 0x66, 0xcb, 0x76, 0x61, 0x12, + 0xba, 0x69, 0xc6, 0x03, 0x9a, 0x74, 0x72, 0xf0, 0x84, 0xc4, 0xba, 0x7f, 0x2e, 0x37, 0x0d, 0x52, + 0xb3, 0x29, 0x1d, 0xde, 0xc0, 0xe1, 0x8d, 0x92, 0xe1, 0xb7, 0xcb, 0x68, 0x3e, 0xe6, 0x42, 0xda, + 0x8f, 0xa0, 0x89, 0x08, 0x9a, 0x3b, 0x10, 0x10, 0x47, 0xee, 0xf1, 0xee, 0xc7, 0xd1, 0x42, 0x1c, + 0xad, 0x12, 0x1c, 0x23, 0x7e, 0x96, 0x6c, 0xff, 0xe0, 0x36, 0x0e, 0x6e, 0x97, 0x31, 0x70, 0x79, + 0x47, 0x22, 0xe6, 0x45, 0x7e, 0xb8, 0x1f, 0xc1, 0x31, 0x22, 0x38, 0x2e, 0x41, 0x70, 0xef, 0x2f, + 0x5f, 0x23, 0xfe, 0x13, 0x8e, 0xfd, 0xa9, 0x64, 0xec, 0xa9, 0x67, 0xb9, 0xfe, 0x6c, 0xff, 0xe0, + 0x13, 0x1c, 0x7c, 0xb2, 0x73, 0xf0, 0x0e, 0xe1, 0xd1, 0xd4, 0xf9, 0x51, 0x81, 0x94, 0xe7, 0xb2, + 0x32, 0x34, 0x40, 0x02, 0x03, 0xf3, 0xed, 0x90, 0xc0, 0x77, 0x3c, 0x48, 0x75, 0xba, 0x5c, 0x47, + 0xf9, 0xe1, 0x0d, 0x8a, 0x37, 0x1c, 0x7e, 0x44, 0xbd, 0xfd, 0x51, 0x4d, 0xa2, 0xda, 0xe1, 0x77, + 0xdf, 0x1a, 0x3f, 0x19, 0xed, 0x6e, 0x92, 0x94, 0x83, 0x13, 0x95, 0xdb, 0x1c, 0x9b, 0xe6, 0x95, + 0x3f, 0x72, 0x1e, 0xcf, 0xdc, 0x91, 0x83, 0x4e, 0x41, 0x29, 0xdc, 0x0e, 0x61, 0xea, 0xcb, 0x8b, + 0x52, 0xbc, 0x1f, 0xb2, 0x79, 0x08, 0x2d, 0xbd, 0x6b, 0xf0, 0x8c, 0xae, 0x4a, 0xb8, 0xce, 0x03, + 0x03, 0x33, 0x8e, 0x2e, 0x04, 0xb8, 0xfd, 0xad, 0xd6, 0xc4, 0x73, 0x7a, 0xb8, 0x5f, 0xbe, 0xbd, + 0xe5, 0xc5, 0x5d, 0xa6, 0xfa, 0x27, 0xfa, 0xcc, 0x5e, 0xb1, 0x5d, 0x7c, 0x50, 0xb2, 0x8d, 0xe6, + 0x25, 0xf8, 0xd0, 0x51, 0xe3, 0xe1, 0xc5, 0x7c, 0xa5, 0xed, 0x7d, 0xc6, 0x36, 0xb1, 0xdc, 0x07, + 0x8b, 0x74, 0x0a, 0x40, 0xfa, 0x36, 0x12, 0xdc, 0xd7, 0xda, 0x8d, 0x43, 0xe7, 0x38, 0x84, 0xc4, + 0x23, 0x27, 0x77, 0xba, 0x91, 0x69, 0x89, 0x90, 0x33, 0xe1, 0x2d, 0x03, 0xbc, 0x60, 0xf1, 0xde, + 0x71, 0xf1, 0x46, 0x8a, 0x3c, 0xb7, 0xe6, 0xb1, 0x27, 0xf2, 0xf7, 0xeb, 0xab, 0x9f, 0xe3, 0x38, + 0xb8, 0x83, 0xec, 0x81, 0x45, 0x71, 0xd7, 0xdb, 0x7d, 0xeb, 0x23, 0x77, 0x53, 0x21, 0xbb, 0x47, + 0x11, 0xcf, 0x1d, 0x3c, 0x6f, 0x14, 0x05, 0x3e, 0xc4, 0xc8, 0x7b, 0xf6, 0x2d, 0xd6, 0xf8, 0x13, + 0x60, 0x33, 0x5e, 0x46, 0x78, 0xbc, 0x02, 0x26, 0xa9, 0x42, 0xec, 0xda, 0x7d, 0x23, 0x24, 0xc3, + 0xcb, 0xf2, 0x88, 0xf1, 0x8c, 0xaf, 0x65, 0x3f, 0x68, 0x07, 0x09, 0x02, 0x71, 0x61, 0xe7, 0xf6, + 0x06, 0x56, 0x53, 0xa3, 0x75, 0x31, 0x1d, 0xb9, 0x87, 0x12, 0xf3, 0x99, 0xbc, 0xf7, 0xc3, 0x05, + 0x9e, 0x15, 0x4b, 0xcf, 0x1a, 0xca, 0x1b, 0x2d, 0x0a, 0xc5, 0x13, 0xc6, 0xf2, 0xc8, 0x2b, 0x3f, + 0x6c, 0x8c, 0x57, 0x4c, 0x22, 0x10, 0x1f, 0xde, 0x32, 0xf1, 0x6a, 0x11, 0xc2, 0xc4, 0xaa, 0x56, + 0x72, 0x18, 0xf9, 0x60, 0xe3, 0xbe, 0xce, 0xd9, 0x74, 0x96, 0x4a, 0x4f, 0x8b, 0xbb, 0x34, 0x79, + 0x49, 0xc1, 0x0a, 0xc1, 0xf1, 0x43, 0xdc, 0x94, 0xb7, 0x8b, 0x50, 0xce, 0x77, 0xcc, 0x82, 0x94, + 0x6a, 0x00, 0x33, 0xe1, 0xf4, 0x06, 0x2c, 0xa5, 0x3b, 0x50, 0x30, 0x96, 0xa7, 0x5c, 0x28, 0x92, + 0xff, 0x74, 0x0c, 0x9e, 0x99, 0x42, 0x72, 0x66, 0x5e, 0x34, 0x18, 0x9a, 0x71, 0x18, 0x28, 0x00, + 0x28, 0x25, 0xca, 0x7c, 0xe9, 0xc6, 0x72, 0xfa, 0xfc, 0x66, 0x00, 0x57, 0x1e, 0xc5, 0xe3, 0xfb, + 0x02, 0x71, 0x6d, 0xfe, 0xc4, 0x37, 0x5d, 0xf0, 0x03, 0xe8, 0xfe, 0x24, 0xb3, 0x19, 0x71, 0x80, + 0xc4, 0xd0, 0xf9, 0xd1, 0x91, 0x64, 0xdb, 0x02, 0xb4, 0xb9, 0x9b, 0x80, 0x62, 0xba, 0x53, 0x03, + 0xe8, 0x0b, 0xcb, 0x9e, 0x2b, 0x32, 0x76, 0x9a, 0xfd, 0xe7, 0x04, 0xd4, 0x10, 0x99, 0x42, 0x86, + 0x8a, 0xd5, 0x02, 0xc7, 0xcb, 0x9f, 0x47, 0x29, 0xb3, 0x9a, 0x2f, 0xbc, 0x0e, 0xc5, 0x78, 0xf6, + 0x25, 0x77, 0x50, 0x8a, 0x0f, 0xfd, 0xe4, 0x7c, 0xee, 0xee, 0xdc, 0x97, 0xf1, 0x0a, 0xd0, 0x28, + 0x64, 0x6d, 0xe7, 0x7e, 0x51, 0x11, 0x96, 0x5b, 0x8a, 0xf6, 0x96, 0xd3, 0xa9, 0x22, 0xaf, 0x2a, + 0x07, 0x3d, 0xbb, 0xd9, 0x04, 0xf5, 0x31, 0x51, 0xd6, 0xde, 0x72, 0x78, 0x15, 0x99, 0x80, 0x52, + 0xbd, 0x1c, 0xf6, 0xee, 0x7d, 0x02, 0x9b, 0x5a, 0x2d, 0xac, 0xe9, 0x74, 0x07, 0x17, 0xbf, 0x95, + 0x01, 0x3f, 0xae, 0xd5, 0x75, 0xb2, 0xc4, 0x90, 0x1e, 0x81, 0x8b, 0x48, 0x93, 0x3c, 0xbc, 0x84, + 0x24, 0x9e, 0xa6, 0x2b, 0xc9, 0xc4, 0x1a, 0xf2, 0x8c, 0x4c, 0x0a, 0x47, 0xcc, 0x5b, 0x4e, 0x89, + 0x9b, 0x19, 0x1f, 0x05, 0xde, 0x3b, 0x29, 0xbf, 0x92, 0xef, 0xdd, 0xe2, 0x59, 0x15, 0x5e, 0x9d, + 0xaa, 0xc9, 0x61, 0xc2, 0x2d, 0x6f, 0x4f, 0xf1, 0xa0, 0xfc, 0x6e, 0x35, 0xc2, 0x94, 0x0c, 0xc9, + 0xe2, 0xda, 0xa3, 0x11, 0xf2, 0x65, 0xc5, 0x3b, 0x4d, 0xa5, 0x73, 0xbf, 0xbf, 0xa7, 0x39, 0x91, + 0x5a, 0xb5, 0x38, 0x5e, 0x73, 0xae, 0x9c, 0x70, 0xd7, 0x71, 0xbc, 0xcb, 0xbb, 0xfc, 0x08, 0x09, + 0x8c, 0xd4, 0xca, 0x09, 0x5c, 0xde, 0x97, 0x81, 0x73, 0x9e, 0x84, 0x3c, 0x42, 0x06, 0x89, 0xe6, + 0x2e, 0x62, 0x77, 0x57, 0x5b, 0xa3, 0x39, 0xfc, 0x6e, 0x7a, 0x77, 0xd7, 0xb4, 0xb0, 0x94, 0xb9, + 0x31, 0x10, 0xb2, 0x93, 0x5a, 0x41, 0x43, 0x13, 0xb7, 0x26, 0xa7, 0x11, 0x3a, 0x55, 0xb0, 0x6a, + 0xb5, 0x23, 0xaf, 0xc7, 0xdc, 0xba, 0x0c, 0x4f, 0x91, 0xcb, 0x3c, 0xd0, 0x22, 0x68, 0xfb, 0xfc, + 0xd2, 0x9c, 0x68, 0x09, 0x1d, 0xd0, 0x14, 0xf2, 0x1e, 0x3c, 0x31, 0x19, 0x87, 0xfe, 0x13, 0x54, + 0x2f, 0x64, 0xe2, 0xb3, 0x08, 0xaf, 0x09, 0xe1, 0x76, 0xb4, 0x1f, 0x42, 0xa2, 0x3a, 0x67, 0xe4, + 0x0b, 0x77, 0x41, 0x5f, 0x48, 0x10, 0x82, 0x73, 0x85, 0x88, 0x82, 0x89, 0x3f, 0xc7, 0xc4, 0x73, + 0xd9, 0x88, 0x5f, 0xb5, 0xc9, 0x8e, 0x8f, 0x66, 0x68, 0x99, 0x80, 0x3a, 0xbd, 0xbd, 0x24, 0x4e, + 0x1e, 0x29, 0xef, 0xc9, 0x92, 0x38, 0x4f, 0x76, 0x05, 0xae, 0x2a, 0x7f, 0xa7, 0x72, 0x04, 0xd1, + 0x83, 0xe2, 0xe8, 0x0e, 0xf8, 0x4c, 0xe9, 0x2c, 0x5d, 0xdf, 0xe6, 0xb7, 0x38, 0x6a, 0xc0, 0x47, + 0xec, 0xdb, 0x3e, 0x9e, 0xb3, 0xe4, 0x37, 0x41, 0x75, 0x4d, 0xe1, 0xb7, 0x52, 0x4d, 0x84, 0x70, + 0x47, 0xb1, 0x1f, 0x5a, 0x33, 0x86, 0x22, 0xbd, 0x8c, 0xd9, 0x02, 0xe3, 0x92, 0x7d, 0x19, 0x40, + 0x15, 0x02, 0x89, 0x83, 0x00, 0x83, 0xf1, 0x8b, 0x00, 0x38, 0x44, 0x4f, 0x4a, 0xae, 0x21, 0x0b, + 0xae, 0x11, 0x29, 0x2d, 0x86, 0xe9, 0x0c, 0xf9, 0x88, 0xc7, 0x16, 0x2e, 0x6f, 0x41, 0x44, 0x5a, + 0x01, 0x63, 0x54, 0xc4, 0xa8, 0x71, 0x6c, 0xaa, 0x8a, 0x50, 0xfc, 0x8e, 0x26, 0xa2, 0x1f, 0xf0, + 0xbb, 0xa7, 0x9d, 0x7a, 0x9d, 0x56, 0xf9, 0x6b, 0x3c, 0xc3, 0x50, 0xcd, 0xee, 0x8f, 0xd6, 0xa3, + 0xda, 0xd7, 0x68, 0x10, 0x98, 0x0d, 0x0c, 0x1a, 0xea, 0xba, 0x02, 0x39, 0x91, 0xb8, 0x5b, 0xdb, + 0xe3, 0xa9, 0x55, 0xff, 0xdf, 0x9c, 0x05, 0x17, 0xfb, 0x32, 0x74, 0x21, 0x58, 0x8b, 0x83, 0x1a, + 0x11, 0x9e, 0x01, 0x00, 0x40, 0x0e, 0xd0, 0xab, 0x8b, 0x4b, 0xc5, 0x78, 0x15, 0x93, 0x48, 0xf7, + 0x4f, 0x47, 0xbc, 0x1f, 0x07, 0x46, 0xb4, 0xa8, 0xf0, 0x82, 0x1c, 0x3f, 0xfd, 0x11, 0xa5, 0xbd, + 0xbd, 0x29, 0x14, 0x16, 0x2c, 0x9e, 0xfb, 0xd8, 0x21, 0xf5, 0x23, 0xbc, 0xeb, 0x9b, 0x6b, 0x96, + 0xc4, 0x3e, 0x88, 0xe3, 0xa9, 0xf8, 0x6c, 0xce, 0xdc, 0x60, 0x48, 0xfb, 0x95, 0x9e, 0x48, 0xcd, + 0x65, 0xb5, 0x22, 0xbe, 0xe4, 0x72, 0xbd, 0x9f, 0x91, 0xec, 0xa0, 0x57, 0x17, 0x2f, 0xd2, 0xb6, + 0x7a, 0xd9, 0x98, 0x4a, 0x3a, 0x68, 0x88, 0x83, 0x86, 0x10, 0xb2, 0xb3, 0x71, 0x85, 0x11, 0xf2, + 0x8e, 0x41, 0x7f, 0x64, 0x3d, 0xb2, 0x0c, 0x64, 0x9e, 0x14, 0xde, 0xbd, 0x79, 0xa3, 0x5f, 0xc1, + 0xf5, 0x39, 0xb4, 0x16, 0x41, 0x97, 0xfc, 0x6c, 0x85, 0x78, 0xb2, 0x05, 0xf5, 0x3c, 0x5e, 0x06, + 0x20, 0x9c, 0x06, 0xe4, 0xd3, 0xb1, 0xe5, 0x26, 0x1d, 0xcf, 0xb4, 0x03, 0xeb, 0xda, 0x9c, 0x55, + 0xd9, 0xcc, 0xcf, 0x3a, 0xc6, 0x36, 0x4e, 0x33, 0x4b, 0x4c, 0x7b, 0x4e, 0xff, 0x8e, 0x81, 0x3b, + 0x04, 0x4b, 0x9c, 0x80, 0x9a, 0x06, 0xfe, 0x13, 0xe8, 0x83, 0x3c, 0x9a, 0x81, 0x67, 0x2b, 0xc6, + 0xa2, 0xbb, 0x17, 0xc5, 0xa2, 0x8b, 0xd8, 0xe9, 0xd5, 0x1d, 0x31, 0x6e, 0x2c, 0xbb, 0xbd, 0x15, + 0xb1, 0x69, 0xb3, 0xcc, 0xa8, 0xe1, 0x59, 0x96, 0x62, 0x37, 0x98, 0x9f, 0xa2, 0x90, 0xcd, 0x84, + 0x94, 0x72, 0xe5, 0xc2, 0xc3, 0x42, 0x8a, 0x58, 0x4b, 0x48, 0x76, 0x41, 0xcf, 0x6d, 0x49, 0xcb, + 0x63, 0x51, 0x44, 0x5c, 0xbc, 0xb5, 0xc9, 0xc2, 0x57, 0xda, 0xc5, 0xa7, 0x43, 0x26, 0x45, 0x2d, + 0xeb, 0x45, 0x79, 0x77, 0x45, 0xf4, 0x8a, 0xf8, 0xd5, 0x16, 0x41, 0x35, 0xe9, 0x9e, 0xe2, 0x7d, + 0xa1, 0xfe, 0xb5, 0xb8, 0x2b, 0x4e, 0xce, 0x96, 0x61, 0x08, 0xfa, 0x9f, 0xd2, 0x90, 0x37, 0xc4, + 0xaf, 0x4f, 0xe9, 0x46, 0xb5, 0xba, 0xd1, 0x6c, 0x6a, 0xb4, 0xb3, 0xa6, 0x97, 0xae, 0x6f, 0xf5, + 0x89, 0xd3, 0x86, 0x53, 0xbf, 0x42, 0x16, 0xa7, 0x45, 0xf2, 0xd9, 0x1d, 0x88, 0xb4, 0xb2, 0xc0, + 0x26, 0x53, 0x47, 0x9c, 0x36, 0xea, 0x16, 0xb7, 0xf1, 0x2a, 0x87, 0xdf, 0xbd, 0x3b, 0x39, 0x39, + 0xe9, 0x92, 0x7f, 0xf7, 0x97, 0x61, 0x71, 0x65, 0x40, 0x83, 0x1f, 0xb1, 0x25, 0x40, 0xe6, 0x20, + 0x31, 0x62, 0x8b, 0x89, 0xd4, 0xb8, 0x54, 0xef, 0x7d, 0x02, 0x26, 0x05, 0xef, 0x19, 0x77, 0x65, + 0x91, 0x35, 0x65, 0xc2, 0x81, 0xad, 0x10, 0x0b, 0xd7, 0x1a, 0x0d, 0x01, 0x03, 0xe1, 0x00, 0x96, + 0x11, 0xc2, 0x81, 0xa2, 0x12, 0x1b, 0xe5, 0x15, 0xf1, 0x77, 0x95, 0x05, 0xa4, 0x50, 0x0e, 0x40, + 0x48, 0xaa, 0x8e, 0xf7, 0x95, 0xc9, 0x7b, 0xb1, 0x58, 0x00, 0x45, 0xc4, 0xf2, 0x26, 0xe0, 0x61, + 0xa7, 0x30, 0xf8, 0x20, 0x6b, 0x11, 0x81, 0x2a, 0x55, 0x4e, 0x93, 0xc5, 0xb4, 0x5c, 0x60, 0x93, + 0xaf, 0x62, 0x94, 0x5f, 0xd7, 0xd8, 0xc7, 0xf6, 0xe1, 0x0a, 0x44, 0xea, 0x47, 0xfc, 0xba, 0x19, + 0xf2, 0xc8, 0xc1, 0x04, 0xf7, 0x7f, 0x63, 0x2c, 0x20, 0x56, 0x4c, 0x0e, 0x21, 0x85, 0x33, 0x4e, + 0x89, 0x33, 0x15, 0x1c, 0xe0, 0x81, 0x29, 0x7e, 0x24, 0x6a, 0x02, 0x82, 0xb5, 0x63, 0xd4, 0x4d, + 0xec, 0x62, 0xe3, 0xe0, 0xec, 0x4c, 0x12, 0x67, 0xa5, 0x72, 0xc9, 0x67, 0xca, 0x2f, 0x47, 0xa6, + 0xb7, 0xd4, 0x20, 0x52, 0xb0, 0x10, 0x8a, 0xbf, 0x82, 0x10, 0x35, 0xe9, 0xfc, 0x90, 0x43, 0xbc, + 0x39, 0xed, 0xcd, 0x04, 0x0b, 0x8a, 0xd4, 0x0b, 0x02, 0x4a, 0x8f, 0xf7, 0x94, 0xc1, 0x2a, 0x96, + 0x11, 0x78, 0xc3, 0xc4, 0xb8, 0xa4, 0x36, 0x04, 0xe8, 0x43, 0x96, 0xde, 0x83, 0xe7, 0x3f, 0x79, + 0x52, 0xab, 0xd5, 0xcc, 0x38, 0x42, 0x61, 0xb3, 0x8f, 0xbe, 0x1b, 0xe3, 0x95, 0x6b, 0xe5, 0x1a, + 0x0f, 0x87, 0xc9, 0x75, 0xe2, 0x76, 0x65, 0x11, 0x64, 0x0e, 0x24, 0x0c, 0x60, 0x6a, 0x49, 0x2b, + 0x9e, 0x1f, 0xc4, 0xda, 0xd0, 0x6d, 0xbc, 0x76, 0xb6, 0xb5, 0x83, 0x8b, 0x5b, 0x16, 0x49, 0x99, + 0x6b, 0x66, 0x05, 0x6f, 0x1f, 0x64, 0x22, 0x6f, 0x4c, 0x11, 0xa5, 0xdd, 0x5e, 0x9c, 0xaa, 0x95, + 0x9d, 0x9b, 0xb4, 0x6d, 0x0e, 0xcd, 0xa6, 0x53, 0xc7, 0xc6, 0x63, 0x7e, 0x44, 0x69, 0x22, 0xfc, + 0x4e, 0x70, 0x1d, 0x54, 0x13, 0xcf, 0x74, 0x29, 0x4d, 0x7d, 0x0f, 0x18, 0xee, 0xa5, 0xf4, 0xe5, + 0x09, 0x30, 0xc5, 0x68, 0xec, 0x81, 0xc4, 0xb3, 0x26, 0x95, 0x33, 0x5e, 0xf3, 0x96, 0xec, 0x13, + 0x17, 0x1c, 0x89, 0xb8, 0xf6, 0x55, 0xbe, 0xeb, 0x2d, 0x51, 0x88, 0x73, 0x78, 0x89, 0xa8, 0xf1, + 0x08, 0x1d, 0x48, 0x38, 0xb5, 0xf1, 0x44, 0xb8, 0xb4, 0xac, 0x21, 0x55, 0xd8, 0x06, 0xe2, 0x7e, + 0xcd, 0xb5, 0x76, 0x5b, 0x77, 0x62, 0xdc, 0xc9, 0xce, 0x5b, 0xa6, 0xbc, 0x89, 0xdc, 0x9d, 0x9c, + 0x2a, 0x7a, 0xd1, 0x12, 0xfe, 0x58, 0x63, 0x1f, 0x98, 0xe0, 0x96, 0x88, 0xf4, 0xd1, 0x2c, 0x51, + 0xad, 0x6b, 0xa9, 0xe2, 0x48, 0x97, 0xdf, 0xec, 0x57, 0xb6, 0x1c, 0x7d, 0x33, 0xf3, 0x23, 0x78, + 0xcc, 0x89, 0xff, 0x70, 0x85, 0x38, 0x1d, 0x18, 0x75, 0x92, 0x71, 0xe5, 0x9d, 0xff, 0x1d, 0x61, + 0x0d, 0x31, 0x55, 0x73, 0xd1, 0x2d, 0x2d, 0x64, 0x30, 0x52, 0xd3, 0x7e, 0x35, 0x0d, 0x46, 0x24, + 0x19, 0x5f, 0xd9, 0x46, 0x70, 0x54, 0x82, 0xe0, 0x48, 0x62, 0x38, 0xca, 0x45, 0xbc, 0x90, 0xf3, + 0x7b, 0xcd, 0x8f, 0x46, 0x92, 0x5f, 0x85, 0x3d, 0x55, 0xb2, 0x85, 0x5d, 0x80, 0x0e, 0xe8, 0x49, + 0xb4, 0xaa, 0xe7, 0xe2, 0xd5, 0xc2, 0xc8, 0x85, 0xb1, 0x61, 0xc1, 0x9b, 0xf2, 0x63, 0xab, 0xa4, + 0x52, 0xda, 0xbd, 0x3f, 0x1a, 0x43, 0x32, 0xf2, 0xd0, 0x15, 0x62, 0x30, 0x74, 0x10, 0x43, 0x77, + 0xce, 0xd0, 0x0b, 0xc1, 0x17, 0xf8, 0x3c, 0xe6, 0x99, 0xfd, 0x11, 0x9e, 0x6b, 0x5d, 0x46, 0x9d, + 0x06, 0x97, 0x92, 0x90, 0x61, 0xa5, 0x40, 0x22, 0x77, 0x8c, 0xf4, 0x4f, 0x3a, 0x6c, 0xd0, 0x28, + 0xa0, 0x46, 0xc2, 0x25, 0x4c, 0xc3, 0x13, 0x5e, 0x6f, 0xec, 0xb8, 0x0e, 0xba, 0xe2, 0x90, 0xb8, + 0xd6, 0x0c, 0x12, 0xc4, 0x68, 0xc9, 0x22, 0xee, 0x72, 0x7e, 0x05, 0x57, 0xe8, 0x72, 0xef, 0x08, + 0xa6, 0x4e, 0x72, 0x61, 0x35, 0x39, 0x77, 0xda, 0x2f, 0x39, 0x12, 0x9a, 0xc8, 0x04, 0x9d, 0x09, + 0xfa, 0xc1, 0x31, 0xc6, 0x68, 0xf6, 0x0d, 0x00, 0xc0, 0x86, 0xed, 0x82, 0x5f, 0x06, 0xb5, 0xa8, + 0x94, 0xe9, 0xc5, 0xb5, 0xf5, 0xc0, 0xd0, 0x11, 0xb1, 0xd9, 0x22, 0x71, 0x4b, 0x0c, 0x8a, 0x12, + 0x49, 0x60, 0x67, 0xec, 0x4d, 0xe2, 0xe4, 0x48, 0x04, 0x57, 0x69, 0x76, 0xe3, 0x65, 0x24, 0x76, + 0x86, 0x60, 0xbe, 0x13, 0xc7, 0x66, 0xd1, 0xee, 0xf1, 0x99, 0x4f, 0x13, 0xed, 0x18, 0xde, 0x19, + 0x91, 0x59, 0xbf, 0x8c, 0xdd, 0x91, 0x23, 0x90, 0xa3, 0x68, 0x66, 0xae, 0x3f, 0x16, 0x09, 0x0e, + 0x10, 0x99, 0x4e, 0x73, 0x59, 0x41, 0xa5, 0x3c, 0x2d, 0xb8, 0x3a, 0x97, 0x61, 0x7f, 0x87, 0x3d, + 0xf0, 0xe5, 0xad, 0x88, 0x73, 0x46, 0xb0, 0x98, 0x7f, 0x70, 0x65, 0xf8, 0x63, 0x61, 0x05, 0x01, + 0x2e, 0x74, 0x7e, 0xdf, 0x87, 0x24, 0xcd, 0xf7, 0x4e, 0xee, 0x68, 0x52, 0xb6, 0x03, 0xf2, 0x9a, + 0x80, 0x77, 0xdb, 0x5d, 0xd2, 0xf3, 0x2f, 0x18, 0x0f, 0x2f, 0x50, 0xc1, 0xf0, 0x2a, 0xdb, 0x96, + 0x57, 0x8e, 0x01, 0xfb, 0xfe, 0x19, 0x86, 0x64, 0xf3, 0x64, 0xd3, 0xf0, 0x2a, 0xfb, 0xbd, 0x43, + 0x3a, 0x33, 0x5e, 0xae, 0xca, 0x29, 0xf1, 0x1e, 0x2d, 0xe8, 0x15, 0x6e, 0x5b, 0xfb, 0xee, 0x64, + 0x53, 0xe2, 0x1b, 0x99, 0xd1, 0xe6, 0x66, 0xa0, 0xa1, 0xa7, 0x1d, 0x7d, 0xa8, 0x52, 0x33, 0x97, + 0x89, 0xdc, 0x5c, 0xde, 0x15, 0x36, 0x06, 0x2a, 0x6f, 0xdc, 0x19, 0x80, 0xda, 0x75, 0xcf, 0xbe, + 0x40, 0x1a, 0x3c, 0xa5, 0x6e, 0x42, 0xe9, 0xba, 0x09, 0x5d, 0x72, 0xf2, 0xe9, 0x0e, 0xbc, 0x51, + 0xcc, 0xc8, 0x64, 0xb3, 0xa3, 0x9f, 0x40, 0x56, 0xb2, 0x7d, 0xba, 0x46, 0xeb, 0xe8, 0x81, 0xad, + 0x0a, 0x27, 0xfd, 0xb6, 0x37, 0xeb, 0x24, 0x10, 0x3f, 0x1a, 0x9d, 0x3b, 0xc3, 0xb7, 0x89, 0xae, + 0x89, 0x47, 0x34, 0x39, 0xe4, 0x18, 0x7f, 0x5a, 0x62, 0x07, 0x3e, 0x3c, 0xc8, 0xb9, 0x9b, 0x68, + 0x25, 0xdb, 0xc2, 0x6b, 0x18, 0xaf, 0xb1, 0x76, 0x4c, 0xfb, 0xc7, 0x92, 0x1e, 0x2f, 0x43, 0x76, + 0xe0, 0xfa, 0x89, 0xf6, 0xdf, 0x71, 0xb0, 0xb0, 0x44, 0x16, 0x69, 0x6f, 0xbd, 0xcf, 0xeb, 0xea, + 0x90, 0x8b, 0xae, 0x24, 0x5c, 0xa3, 0x53, 0xaa, 0x6c, 0xb4, 0xcd, 0x65, 0xd7, 0x3c, 0x53, 0xd5, + 0x1f, 0xb1, 0x69, 0xce, 0xdb, 0x11, 0x3f, 0xee, 0x6e, 0x99, 0x57, 0x4e, 0x79, 0xaa, 0x0b, 0xfa, + 0x22, 0xd6, 0x11, 0xb3, 0xc5, 0x85, 0xe5, 0x78, 0xa9, 0xbf, 0xc2, 0x5f, 0xbd, 0x78, 0xa5, 0x40, + 0xb8, 0x1e, 0xdd, 0x64, 0x15, 0x80, 0x28, 0x15, 0xf9, 0xa1, 0xed, 0xf2, 0x0c, 0x22, 0xed, 0x18, + 0x6c, 0x60, 0xe5, 0xbf, 0xbc, 0x23, 0x31, 0xf2, 0x96, 0x29, 0xa9, 0x58, 0xb6, 0xcd, 0x02, 0xc8, + 0x09, 0x6a, 0x1c, 0xdd, 0x0e, 0x43, 0x4f, 0xac, 0x63, 0xe1, 0xe6, 0xea, 0xc1, 0x1f, 0x73, 0x0d, + 0x67, 0x5a, 0x77, 0x42, 0x81, 0x01, 0x04, 0xf1, 0x2b, 0x7f, 0x5e, 0xb0, 0x5c, 0x69, 0xb8, 0x16, + 0xa9, 0x80, 0x21, 0x4e, 0xcd, 0xd2, 0x5f, 0x79, 0xe2, 0xa2, 0x9d, 0x5a, 0xe0, 0x70, 0xe1, 0xe3, + 0x34, 0x84, 0x8c, 0x61, 0x52, 0x87, 0xec, 0x86, 0x37, 0x43, 0x4d, 0xfa, 0x07, 0x2c, 0xb9, 0xf7, + 0x40, 0xd1, 0xea, 0xe0, 0xad, 0xdf, 0xab, 0x5b, 0x42, 0xb6, 0x77, 0xd8, 0x56, 0x79, 0xfb, 0x0e, + 0x1d, 0x9e, 0x13, 0x92, 0x07, 0x53, 0xae, 0xb6, 0xed, 0xb0, 0x92, 0x33, 0x44, 0x22, 0xae, 0x1f, + 0xee, 0x5f, 0x96, 0xbb, 0x6b, 0x9a, 0x54, 0x8f, 0x6f, 0xd2, 0x14, 0xec, 0x25, 0xed, 0xd1, 0x94, + 0xdd, 0xfe, 0x17, 0x92, 0x26, 0xf9, 0x73, 0x19, 0x11, 0xcf, 0xa0, 0xee, 0xb1, 0xff, 0xcd, 0x03, + 0x29, 0x6e, 0x82, 0x4e, 0x31, 0xfd, 0x17, 0x25, 0xc1, 0x32, 0xa8, 0xf3, 0x1e, 0xe1, 0x6b, 0xa1, + 0x65, 0x28, 0xf5, 0x49, 0x62, 0xcd, 0x95, 0x36, 0x1b, 0x29, 0xe6, 0x19, 0xa4, 0x98, 0xe5, 0xce, + 0x72, 0x51, 0x96, 0x6d, 0x66, 0x59, 0xa5, 0xa2, 0x1f, 0xc1, 0x13, 0x35, 0x29, 0x23, 0x4e, 0x65, + 0xbd, 0x87, 0xcc, 0x41, 0xc2, 0x94, 0x27, 0x31, 0xbc, 0xdd, 0x51, 0xa8, 0x6e, 0x53, 0xd0, 0x0b, + 0x55, 0x29, 0xa4, 0xa8, 0x63, 0xdf, 0x87, 0x3c, 0x5f, 0xc7, 0xf2, 0x2f, 0x4a, 0xf2, 0xd5, 0x28, + 0x25, 0x8a, 0x51, 0xf7, 0x83, 0xb5, 0x58, 0x58, 0xc4, 0xf6, 0xc3, 0x50, 0x96, 0x7e, 0x98, 0x1e, + 0x88, 0xe4, 0xe7, 0x15, 0x19, 0x7d, 0x80, 0xe4, 0x94, 0x28, 0x51, 0x1c, 0xfa, 0x50, 0xe0, 0xa0, + 0x37, 0x49, 0xdb, 0x0b, 0x9c, 0x40, 0x65, 0x27, 0xf6, 0x12, 0x61, 0xee, 0xa0, 0x80, 0xbd, 0x1a, + 0xa2, 0xe0, 0xcf, 0xed, 0x6c, 0x62, 0xc7, 0x7f, 0xc3, 0xac, 0xde, 0x04, 0xc3, 0x88, 0x73, 0x1c, + 0x4b, 0xc1, 0xbd, 0xdf, 0x14, 0x5c, 0x65, 0x43, 0x72, 0x46, 0xf9, 0xda, 0xfc, 0x80, 0x0a, 0x75, + 0x0f, 0xa9, 0x5f, 0xe4, 0x20, 0xd3, 0x42, 0xa7, 0xce, 0x42, 0x3f, 0x8a, 0xa6, 0xd6, 0x84, 0xbd, + 0x26, 0x97, 0xfb, 0xf7, 0x42, 0x77, 0x32, 0x04, 0x04, 0x7f, 0xed, 0x6a, 0x83, 0xb9, 0xfb, 0xf3, + 0x5d, 0xcc, 0x7d, 0x73, 0xb7, 0xcf, 0xdc, 0xe0, 0xcf, 0xe5, 0x91, 0x45, 0x84, 0x68, 0x65, 0x3b, + 0xe5, 0xd6, 0x72, 0x59, 0x0c, 0x51, 0x2d, 0xce, 0xd8, 0x7c, 0x8d, 0xb1, 0xdb, 0xf7, 0xc2, 0x54, + 0x90, 0x9b, 0x09, 0x54, 0xe3, 0x20, 0x3c, 0x3e, 0xb3, 0x44, 0xc9, 0xcf, 0xe5, 0x2f, 0x8b, 0x6d, + 0x76, 0x4a, 0xee, 0xaf, 0x5e, 0x51, 0xc0, 0x1d, 0x62, 0x84, 0x77, 0x5c, 0x11, 0x12, 0xfc, 0xf7, + 0xdc, 0x59, 0xed, 0xb6, 0xa5, 0xfb, 0xe1, 0xeb, 0x8a, 0x5e, 0x29, 0x21, 0x84, 0x44, 0xb0, 0xdb, + 0xb9, 0x79, 0x16, 0xfa, 0xfe, 0x63, 0x59, 0x36, 0xf0, 0xd1, 0x72, 0x62, 0xde, 0xd8, 0x00, 0x4b, + 0xab, 0xec, 0x39, 0x10, 0xfd, 0x1e, 0x96, 0x7a, 0x4f, 0x12, 0x80, 0xaf, 0x09, 0x4f, 0x21, 0x53, + 0xa0, 0xca, 0xf6, 0xb9, 0x9d, 0xd1, 0xd2, 0x0b, 0x9d, 0xa8, 0x2c, 0x80, 0x82, 0xdc, 0xf9, 0xdd, + 0x04, 0xfc, 0x71, 0x1e, 0xa8, 0x92, 0x30, 0xd2, 0xf1, 0xc5, 0xa8, 0x88, 0xa7, 0x43, 0x0b, 0x1c, + 0xba, 0xcd, 0x72, 0xa6, 0xf3, 0xda, 0x91, 0xca, 0xb3, 0xfb, 0xfc, 0xe1, 0xcc, 0x44, 0x99, 0x9e, + 0x6c, 0xda, 0xff, 0x20, 0x12, 0x6b, 0x5f, 0xe6, 0xb8, 0xdc, 0x06, 0xcb, 0x8e, 0x0e, 0x96, 0x9e, + 0x14, 0xa4, 0x5b, 0xd3, 0xe2, 0x15, 0xff, 0xf9, 0xae, 0x64, 0xea, 0x95, 0x03, 0xe7, 0xb9, 0x5c, + 0xeb, 0x95, 0x03, 0x85, 0x28, 0xe4, 0x57, 0x8e, 0x14, 0xa2, 0x84, 0x2b, 0xe5, 0xa7, 0x0a, 0x79, + 0xc5, 0x92, 0x4e, 0x0f, 0x84, 0x93, 0x9d, 0x87, 0x7c, 0xa5, 0xde, 0x39, 0xbb, 0x93, 0xf5, 0x0e, + 0x8c, 0x81, 0x64, 0x1d, 0x4c, 0xeb, 0x11, 0xaa, 0x2e, 0x17, 0x5c, 0x0f, 0x54, 0x0d, 0x3b, 0xa2, + 0xe8, 0x76, 0x7e, 0x5c, 0xd9, 0x4c, 0x90, 0xcf, 0x86, 0x45, 0x0f, 0x23, 0xc3, 0x1a, 0xac, 0xf8, + 0xe9, 0xe4, 0x11, 0x97, 0x7a, 0xc2, 0x97, 0x3f, 0x31, 0xeb, 0x1c, 0x41, 0x31, 0xa3, 0x4a, 0x62, + 0xc4, 0xc3, 0x32, 0xa5, 0xbe, 0xe2, 0x37, 0x38, 0x89, 0xf2, 0x14, 0x5a, 0x01, 0xf6, 0x23, 0x16, + 0xfe, 0x23, 0x0c, 0x56, 0xf7, 0xa8, 0x77, 0x25, 0x19, 0x62, 0xb9, 0x4f, 0xd6, 0x2a, 0x22, 0x38, + 0x52, 0xdd, 0xb3, 0x14, 0x09, 0xb8, 0x87, 0x07, 0x7d, 0x37, 0xa0, 0x4b, 0x14, 0x1f, 0x17, 0xbf, + 0xc4, 0x73, 0x97, 0xae, 0x53, 0x45, 0x3a, 0x86, 0x50, 0x1c, 0x9f, 0xc5, 0x2e, 0x1d, 0x7b, 0x9b, + 0xa0, 0x13, 0xc7, 0x63, 0x34, 0x52, 0x39, 0xbf, 0x87, 0x02, 0xa2, 0x92, 0x09, 0xfa, 0xfd, 0xed, + 0xe8, 0xd5, 0x82, 0xc8, 0x9e, 0xf2, 0x6a, 0x10, 0x7f, 0x5b, 0x91, 0xc4, 0x6c, 0x11, 0xb8, 0x79, + 0xfa, 0x95, 0xf2, 0xdc, 0xb0, 0x41, 0xc9, 0x3f, 0x9f, 0x1b, 0xd2, 0x64, 0x2f, 0x3d, 0xdd, 0x72, + 0x6f, 0x40, 0xe1, 0xc2, 0x53, 0x80, 0xb2, 0xbc, 0x10, 0xf7, 0x08, 0xfe, 0x4f, 0x36, 0x1f, 0xea, + 0xb8, 0x9f, 0x92, 0x2b, 0x93, 0xc5, 0x2f, 0x40, 0x26, 0x64, 0xeb, 0xb8, 0x15, 0x83, 0xfb, 0x32, + 0xf8, 0x13, 0xb0, 0xff, 0x03, 0x4b, 0x74, 0xff, 0x24, 0x12, 0x56, 0x00, 0x00 }; @@ -1582,166 +1583,166 @@ const uint8_t PAGE_settings_sec[] PROGMEM = { // Autogenerated from wled00/data/settings_um.htm, do not edit!! -const uint16_t PAGE_settings_um_length = 2522; +const uint16_t PAGE_settings_um_length = 2514; const uint8_t PAGE_settings_um[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xdd, 0x58, 0x5b, 0x73, 0xdb, 0xb8, - 0x15, 0x7e, 0xf7, 0xaf, 0xa0, 0x11, 0x8f, 0x4d, 0x8e, 0x68, 0x4a, 0x8e, 0xbb, 0xdb, 0x44, 0x12, - 0xe4, 0x26, 0x4e, 0x76, 0xa3, 0xe6, 0x62, 0xcf, 0x68, 0x2f, 0xd3, 0x71, 0x3d, 0x6b, 0x9a, 0x84, - 0x24, 0xc4, 0x14, 0xc8, 0x02, 0xa0, 0x2f, 0x95, 0xf5, 0xdf, 0xfb, 0x1d, 0x90, 0xd4, 0xc5, 0xb1, - 0xd3, 0xcd, 0x76, 0xf6, 0xa5, 0x2f, 0x12, 0x09, 0x1c, 0x1c, 0x9c, 0xf3, 0x9d, 0x3b, 0xfb, 0xdb, - 0x6f, 0x4e, 0x8e, 0x7f, 0xfa, 0xc7, 0xe9, 0x5b, 0x6f, 0x6a, 0x67, 0xd9, 0xa0, 0x5f, 0xff, 0x8a, - 0x38, 0xf5, 0xb2, 0x58, 0x4d, 0x38, 0x13, 0x8a, 0x0d, 0xfa, 0x33, 0x61, 0x63, 0x2f, 0x99, 0xc6, - 0xda, 0x08, 0xcb, 0x59, 0x69, 0xc7, 0xfb, 0x2f, 0x9a, 0xd5, 0x2d, 0x15, 0xcf, 0x04, 0x67, 0xd7, - 0x52, 0xdc, 0x14, 0xb9, 0xb6, 0xcc, 0x4b, 0x72, 0x65, 0x85, 0x02, 0xd9, 0x8d, 0x4c, 0xed, 0x94, - 0x7f, 0xd7, 0xe9, 0x2c, 0x49, 0x1f, 0x6c, 0xa5, 0xe2, 0x5a, 0x26, 0x62, 0xdf, 0xbd, 0x84, 0x52, - 0x49, 0x2b, 0xe3, 0x6c, 0xdf, 0x24, 0x71, 0x26, 0xf8, 0x41, 0x38, 0x8b, 0x6f, 0xe5, 0xac, 0x9c, - 0x2d, 0xdf, 0x4b, 0x23, 0xb4, 0x7b, 0x89, 0x2f, 0xf1, 0xae, 0x72, 0xf6, 0xc5, 0xcd, 0x83, 0xbe, - 0x95, 0x36, 0x13, 0x83, 0x9f, 0x41, 0x39, 0xcb, 0x53, 0x6f, 0x24, 0xac, 0x95, 0x6a, 0x62, 0xfa, - 0xed, 0x6a, 0xbd, 0x6f, 0x12, 0x2d, 0x0b, 0x3b, 0xd8, 0xba, 0x8e, 0xb5, 0x97, 0xdf, 0x28, 0xa1, - 0xc3, 0x2c, 0x4f, 0x64, 0x11, 0x96, 0x3a, 0xbf, 0x31, 0x61, 0xca, 0xd3, 0x3c, 0x29, 0x67, 0x90, - 0x2f, 0x2c, 0x67, 0xc7, 0xe3, 0x09, 0x9f, 0x2f, 0xc2, 0x42, 0x2a, 0xc3, 0xcf, 0xbe, 0x0f, 0xff, - 0x1a, 0xbe, 0x08, 0x5f, 0x86, 0x07, 0x9d, 0xf0, 0xe0, 0xe0, 0x9c, 0x16, 0x4f, 0xf8, 0x19, 0xd3, - 0xe6, 0x3a, 0x65, 0xe1, 0x7f, 0xff, 0x3b, 0xa7, 0x5b, 0xf8, 0xf6, 0x41, 0xa8, 0xca, 0xd9, 0x47, - 0xde, 0xe9, 0x8d, 0x4b, 0x95, 0x58, 0x99, 0x2b, 0x6f, 0x32, 0x4c, 0x7d, 0x11, 0xcc, 0xb5, 0xb0, - 0xa5, 0x56, 0x5e, 0x1a, 0x4d, 0x84, 0x7d, 0x9b, 0x09, 0x12, 0xe0, 0xf5, 0x9d, 0xdb, 0x5a, 0x2c, - 0x49, 0xa5, 0x39, 0x59, 0x23, 0x15, 0xbb, 0xbb, 0x2c, 0xbf, 0xfc, 0x2c, 0x12, 0xcb, 0x38, 0xb7, - 0x77, 0x85, 0xc8, 0xc7, 0xb4, 0xb6, 0xfd, 0x4a, 0xeb, 0xf8, 0x2e, 0x92, 0xc6, 0xfd, 0x6f, 0x9c, - 0x7f, 0xe7, 0x07, 0xf3, 0x1b, 0xa9, 0xd2, 0xfc, 0x26, 0xca, 0x0b, 0xa1, 0x7c, 0x36, 0xb5, 0xb6, - 0x30, 0xdd, 0x76, 0x7b, 0x22, 0xed, 0xb4, 0xbc, 0x8c, 0x92, 0x7c, 0xd6, 0x7e, 0x25, 0x75, 0x92, - 0xe7, 0xf9, 0x95, 0x14, 0xed, 0x5f, 0x3f, 0xbc, 0x7d, 0xd3, 0xbe, 0x91, 0x57, 0xb2, 0xdd, 0x60, - 0xf8, 0xac, 0xac, 0x40, 0xdd, 0x37, 0xf5, 0x02, 0x5b, 0xe3, 0xfe, 0xfa, 0x21, 0xf7, 0xf6, 0x92, - 0x2a, 0x64, 0xbf, 0x19, 0x91, 0x8d, 0xd7, 0xa9, 0xb3, 0x3c, 0x4e, 0xff, 0x3e, 0xf2, 0x45, 0x68, - 0xf9, 0x76, 0x27, 0x98, 0x67, 0xc2, 0x7a, 0x8a, 0xa7, 0x51, 0xa2, 0x45, 0x6c, 0x45, 0x0d, 0x80, - 0xcf, 0x2a, 0x5b, 0xb1, 0xa0, 0xa7, 0x22, 0x30, 0x7b, 0x65, 0xad, 0x96, 0x97, 0xa5, 0x15, 0xd8, - 0xd0, 0x09, 0x0b, 0x45, 0x10, 0x3e, 0x5c, 0x27, 0x1c, 0x70, 0x9d, 0x15, 0xb7, 0xb6, 0xfd, 0x39, - 0xbe, 0x8e, 0x1b, 0x06, 0x5f, 0x10, 0xc6, 0xe6, 0x4e, 0x81, 0x85, 0x0d, 0xc2, 0x34, 0xba, 0xcc, - 0xd3, 0xbb, 0x28, 0x2e, 0x20, 0x74, 0x7a, 0x3c, 0x95, 0x59, 0xea, 0x2b, 0xa2, 0x8f, 0xd3, 0xf4, - 0xed, 0x35, 0xa4, 0xf8, 0x20, 0x0d, 0xdc, 0x55, 0x68, 0x9f, 0x91, 0xcc, 0x2c, 0xf4, 0x03, 0x3e, - 0x98, 0xff, 0x28, 0xec, 0x2f, 0x7e, 0xb0, 0x78, 0x9c, 0x4e, 0x68, 0x9d, 0x6b, 0x88, 0x07, 0x3a, - 0xf8, 0xba, 0xc9, 0x33, 0x11, 0x65, 0xf9, 0xc4, 0x67, 0x6f, 0x69, 0xdd, 0xab, 0x95, 0x07, 0x30, - 0xde, 0x58, 0x66, 0xc2, 0xa9, 0x01, 0xe7, 0xd6, 0x50, 0xf7, 0x43, 0xbd, 0x0e, 0x4b, 0xe2, 0xe0, - 0x58, 0x4e, 0x4a, 0x1d, 0x3b, 0xb4, 0x2a, 0x35, 0xbc, 0x71, 0x8c, 0x03, 0x69, 0xf4, 0x4f, 0x35, - 0x54, 0xb0, 0x55, 0x01, 0xd0, 0x84, 0x57, 0xc4, 0x13, 0xe1, 0xa5, 0xb1, 0x8d, 0xb7, 0x01, 0xef, - 0x1a, 0xc0, 0x23, 0x98, 0x83, 0xd1, 0x05, 0x5d, 0xb8, 0x47, 0x6d, 0x17, 0xb8, 0xa0, 0xe3, 0x17, - 0x15, 0x3a, 0xb7, 0x79, 0x92, 0x67, 0xbb, 0xbb, 0xbe, 0x73, 0xcb, 0x4e, 0xe8, 0xbb, 0x20, 0xe0, - 0x44, 0x91, 0x8d, 0x6c, 0xae, 0xc1, 0x95, 0x5c, 0x71, 0x68, 0xc5, 0x8c, 0x14, 0x4f, 0x86, 0x05, - 0x0b, 0x82, 0xfb, 0xfb, 0x9a, 0x0c, 0xe7, 0x67, 0x05, 0x04, 0xfe, 0x01, 0xfc, 0xbd, 0x8f, 0x79, - 0x2a, 0x22, 0xef, 0x34, 0x13, 0xb1, 0x11, 0x1e, 0x80, 0x10, 0xda, 0x23, 0xd7, 0xf1, 0x86, 0xa7, - 0x10, 0x29, 0xdc, 0xe0, 0x68, 0x36, 0x39, 0x56, 0x91, 0x17, 0x04, 0xa0, 0x4a, 0x21, 0xaf, 0x8b, - 0x0d, 0xdc, 0x41, 0x21, 0xc1, 0xca, 0x19, 0x0b, 0x22, 0xa9, 0x00, 0xe8, 0xbb, 0x9f, 0x3e, 0x7e, - 0xe0, 0xec, 0x53, 0xee, 0xd5, 0x21, 0x6d, 0x3c, 0xc4, 0xa3, 0x8d, 0x33, 0x82, 0x82, 0x6d, 0x84, - 0xc7, 0x0f, 0xeb, 0xe1, 0xc1, 0x39, 0x6f, 0x21, 0x1e, 0xc4, 0x36, 0xe7, 0x7e, 0xe7, 0x7e, 0x33, - 0x8e, 0x86, 0x8f, 0x11, 0xf2, 0x2f, 0x08, 0x93, 0xa9, 0x48, 0xae, 0xc8, 0x47, 0x83, 0x39, 0x65, - 0x0b, 0xc5, 0x45, 0x44, 0xd9, 0x26, 0xd2, 0xa2, 0xc8, 0xe2, 0x04, 0x5e, 0x74, 0x76, 0x0e, 0x67, - 0x83, 0x9c, 0xa6, 0xbc, 0x34, 0x56, 0xfb, 0xfb, 0x87, 0x41, 0x4f, 0x8e, 0x7d, 0x06, 0x3d, 0x2e, - 0x85, 0x06, 0xee, 0x22, 0x22, 0x87, 0x44, 0xa0, 0x22, 0x5b, 0xe0, 0x55, 0x35, 0x84, 0x9d, 0xf0, - 0x30, 0x08, 0xe6, 0xe3, 0x5c, 0xfb, 0xc4, 0x57, 0x22, 0x1f, 0xc8, 0x3e, 0x65, 0x99, 0x28, 0x13, - 0x6a, 0x62, 0xa7, 0x3d, 0xd9, 0x6a, 0x05, 0x60, 0x64, 0xb7, 0x39, 0xa5, 0x99, 0x33, 0x79, 0x1e, - 0xcc, 0xf1, 0x2a, 0xa2, 0xeb, 0x38, 0x2b, 0x21, 0x27, 0x91, 0x62, 0x11, 0x7c, 0xe5, 0x18, 0x6c, - 0x57, 0x44, 0x40, 0xd8, 0xde, 0xc1, 0xdd, 0x60, 0xda, 0x5c, 0x73, 0x96, 0xc9, 0x99, 0x60, 0xbd, - 0x4b, 0xc4, 0xd4, 0xd5, 0xe2, 0x91, 0xf3, 0xf7, 0xf7, 0xf5, 0x4a, 0x7f, 0xff, 0x60, 0xf9, 0x3c, - 0x38, 0x7c, 0xf9, 0x05, 0x1f, 0x2d, 0xd2, 0x86, 0xcd, 0xe6, 0xce, 0xf2, 0xcc, 0xe1, 0x11, 0x83, - 0x85, 0xd5, 0x44, 0xb0, 0x2e, 0x7b, 0x36, 0x1e, 0x8f, 0xd9, 0x62, 0x21, 0x32, 0x23, 0xe6, 0xe6, - 0x46, 0xda, 0x64, 0xea, 0x57, 0xb8, 0x05, 0xf3, 0x04, 0x2e, 0xc2, 0x46, 0x6f, 0x5e, 0xb1, 0x6e, - 0xf5, 0x74, 0xfc, 0xa1, 0x7e, 0xfa, 0x78, 0x32, 0x1a, 0xae, 0x16, 0xdf, 0xd7, 0x8f, 0xc7, 0x23, - 0xd6, 0x75, 0xd7, 0xf6, 0x52, 0x31, 0x8e, 0xcb, 0xcc, 0x76, 0x2b, 0x9b, 0x2d, 0x08, 0xb9, 0xff, - 0x4f, 0xd4, 0x56, 0xce, 0x87, 0xe8, 0x3b, 0xc5, 0x8d, 0xe4, 0xa9, 0x90, 0xa2, 0xca, 0xfd, 0x01, - 0x29, 0x4e, 0x39, 0xc5, 0x9e, 0xa9, 0x50, 0x9e, 0x23, 0x4f, 0x9c, 0xb8, 0x0a, 0x10, 0x21, 0xec, - 0xb4, 0x14, 0x44, 0x1c, 0xd4, 0xc4, 0x32, 0x08, 0x5c, 0x75, 0xe3, 0x2a, 0x6c, 0x38, 0xc9, 0xa0, - 0x47, 0x46, 0xf1, 0xc8, 0x45, 0x1b, 0x87, 0xfc, 0x8a, 0x2b, 0x13, 0xa7, 0xcd, 0x62, 0x22, 0x2b, - 0x01, 0xc8, 0x67, 0x2d, 0xd0, 0xb7, 0x7d, 0xd9, 0x40, 0x6f, 0x09, 0xfa, 0x33, 0x7b, 0x3e, 0xe0, - 0x1d, 0xe4, 0x14, 0x67, 0x94, 0xa2, 0x34, 0x53, 0x9f, 0xd6, 0x02, 0x57, 0x2b, 0xab, 0x77, 0x27, - 0x52, 0xd0, 0xc8, 0xf1, 0x05, 0xf5, 0xd3, 0xa4, 0x4f, 0x88, 0xf2, 0x88, 0x18, 0x4b, 0x6d, 0xe9, - 0xea, 0x15, 0x9c, 0x48, 0xd3, 0x3f, 0x48, 0x81, 0xe4, 0x8e, 0x70, 0x0e, 0x01, 0x1e, 0x6a, 0xf1, - 0x12, 0x58, 0x85, 0x60, 0x74, 0xe5, 0xbf, 0xc5, 0xf7, 0xfa, 0x53, 0xed, 0x39, 0x63, 0xd5, 0xfd, - 0x49, 0xf7, 0xf9, 0xf7, 0x9d, 0xe2, 0x96, 0x0d, 0xf6, 0x7a, 0x2b, 0xec, 0x65, 0xa8, 0x1f, 0xc1, - 0x1e, 0x5c, 0x58, 0xa9, 0xae, 0x14, 0x04, 0x27, 0xf7, 0xb2, 0xe4, 0x1c, 0x52, 0x25, 0x59, 0x99, - 0x62, 0x13, 0x16, 0x0e, 0x8e, 0xd6, 0x64, 0x00, 0x8b, 0xa0, 0xbb, 0x7a, 0x6f, 0x61, 0xbf, 0x65, - 0xdd, 0xea, 0xe2, 0x71, 0x85, 0xd5, 0x0a, 0x7b, 0x0d, 0xa5, 0x75, 0x5f, 0x35, 0x4a, 0x6b, 0x28, - 0xbd, 0xa9, 0xdd, 0x99, 0x3e, 0x0f, 0x51, 0x55, 0x1d, 0x74, 0x2e, 0x73, 0x99, 0x30, 0x6b, 0x5a, - 0x04, 0xd5, 0xab, 0x63, 0x32, 0xab, 0xc3, 0xf1, 0x32, 0x47, 0x81, 0x8a, 0x15, 0xeb, 0x66, 0x9c, - 0xb9, 0x84, 0x77, 0x99, 0xdf, 0xb2, 0xd0, 0xf0, 0xbd, 0xca, 0xed, 0x99, 0xd5, 0xa5, 0x60, 0x7b, - 0x2d, 0x5f, 0x1d, 0xb1, 0x2a, 0x21, 0xc2, 0xad, 0xbb, 0xf0, 0x94, 0xca, 0xb5, 0x7b, 0x8e, 0x47, - 0x9d, 0xf0, 0xba, 0x86, 0x5f, 0xd4, 0xa7, 0x76, 0xe6, 0x6a, 0xc1, 0x2e, 0xc2, 0xda, 0xcf, 0xb8, - 0x5d, 0xf3, 0xab, 0x23, 0x9f, 0x70, 0xf6, 0xd0, 0xda, 0x71, 0x76, 0xf8, 0x92, 0x79, 0x33, 0xa9, - 0x38, 0xdb, 0x3f, 0x00, 0xf7, 0x2c, 0x36, 0x86, 0x33, 0xc3, 0xf6, 0x20, 0x2e, 0x93, 0x0a, 0x75, - 0xbb, 0xeb, 0x48, 0x51, 0x58, 0x0b, 0xce, 0x62, 0x75, 0xb7, 0xa4, 0xb9, 0xbd, 0xcd, 0xd8, 0x5e, - 0x6f, 0x33, 0x37, 0xe0, 0x0c, 0xd5, 0x7d, 0x92, 0x7d, 0x43, 0x8a, 0x07, 0xe6, 0xfc, 0x0e, 0xe6, - 0xec, 0xb1, 0x8b, 0xc5, 0x03, 0xe3, 0xc0, 0x11, 0x6b, 0x17, 0x10, 0x8d, 0xac, 0x44, 0x91, 0x8a, - 0xdb, 0x93, 0xb1, 0x23, 0x68, 0x1d, 0xa0, 0x4e, 0xd5, 0x24, 0x17, 0xde, 0xce, 0xdc, 0x2e, 0xba, - 0x1e, 0x14, 0x5c, 0x42, 0xc6, 0x79, 0x76, 0xd4, 0x6c, 0xf7, 0xa5, 0x2a, 0x4a, 0xeb, 0x11, 0xe4, - 0x9c, 0x4d, 0x65, 0x9a, 0xa2, 0x7f, 0xf6, 0xaa, 0x46, 0x75, 0x67, 0x2e, 0x16, 0x5d, 0x3a, 0xbd, - 0x33, 0x97, 0x47, 0x14, 0x75, 0xc0, 0x12, 0x32, 0xd6, 0x02, 0x8f, 0x63, 0x98, 0x8c, 0x0d, 0x2e, - 0xba, 0x12, 0x75, 0xf0, 0x7f, 0xe6, 0xb6, 0x33, 0xcf, 0x16, 0x60, 0xb6, 0x12, 0x7b, 0x83, 0xd3, - 0xce, 0xdc, 0x61, 0xcc, 0x49, 0xf0, 0xa5, 0x05, 0x71, 0xe0, 0xeb, 0xac, 0x77, 0xe6, 0x66, 0x81, - 0x1e, 0xc6, 0x31, 0xaa, 0x1d, 0xc6, 0xb7, 0x53, 0x69, 0xc2, 0xbd, 0x9d, 0xf9, 0xd3, 0xc8, 0x2d, - 0xf6, 0x02, 0x74, 0xe6, 0x97, 0x7a, 0x70, 0xb1, 0xd8, 0x08, 0xc9, 0x37, 0x3a, 0x2f, 0xd0, 0x99, - 0xa8, 0xaa, 0xc8, 0x3e, 0xd5, 0x05, 0x8a, 0x8c, 0xba, 0xdc, 0x00, 0x41, 0xbb, 0xde, 0x1f, 0x9b, - 0xd7, 0x77, 0x9f, 0x20, 0x69, 0x13, 0x3c, 0xc1, 0xd9, 0xc1, 0x39, 0x55, 0x5f, 0x89, 0x04, 0x3f, - 0xfc, 0x74, 0xfa, 0xf3, 0x4f, 0xa4, 0x99, 0x8c, 0x6c, 0x3c, 0x21, 0x2a, 0x98, 0xb7, 0xf2, 0x8e, - 0x6a, 0x11, 0x00, 0xdc, 0xdf, 0xaf, 0xea, 0x74, 0xbd, 0x14, 0x54, 0x22, 0x08, 0xbc, 0x3a, 0x04, - 0x7b, 0xd2, 0xd5, 0xad, 0xde, 0x66, 0xe0, 0xc9, 0x28, 0x6e, 0xfa, 0xc8, 0x65, 0xe9, 0x69, 0xb5, - 0x74, 0xd5, 0x23, 0x18, 0xbe, 0xbe, 0x8d, 0x40, 0xec, 0x55, 0x3d, 0xe9, 0x36, 0x37, 0x8e, 0x17, - 0x84, 0x73, 0xac, 0xd7, 0x17, 0x9c, 0x4f, 0xaf, 0x2f, 0x38, 0x87, 0x5d, 0x5b, 0x78, 0xd0, 0xbc, - 0x56, 0xcb, 0xa1, 0xa9, 0x84, 0x0c, 0x16, 0x75, 0x23, 0xf3, 0xb0, 0xc5, 0xa5, 0xa6, 0x70, 0x1f, - 0x24, 0xae, 0xc3, 0x94, 0x51, 0x11, 0x6b, 0x80, 0x56, 0x63, 0xd7, 0xe4, 0xfd, 0xba, 0xdf, 0x0d, - 0x91, 0x79, 0xd5, 0x92, 0x4f, 0x99, 0x65, 0x1b, 0x46, 0x3a, 0x29, 0xe8, 0xa9, 0x4a, 0x2d, 0x2e, - 0x67, 0x12, 0x05, 0x40, 0x13, 0x41, 0x75, 0xa2, 0x47, 0xa0, 0xc9, 0x2f, 0xed, 0x96, 0xbb, 0x73, - 0xc8, 0x14, 0x35, 0x9c, 0x28, 0x45, 0xc0, 0x19, 0x46, 0xe0, 0x36, 0x14, 0x1b, 0x0d, 0x37, 0x2a, - 0x13, 0x61, 0x4c, 0x7c, 0xaa, 0x8c, 0x8e, 0x52, 0x49, 0x1b, 0x9f, 0xd0, 0x5a, 0x9a, 0xf5, 0xe4, - 0x3e, 0x5f, 0xdf, 0x40, 0x82, 0x6f, 0x6a, 0xb3, 0x88, 0x48, 0x5b, 0xe8, 0x4f, 0x0b, 0xb0, 0x35, - 0xb5, 0x9a, 0xe4, 0x34, 0x22, 0x1d, 0x92, 0x23, 0x72, 0x1b, 0x6c, 0xfa, 0xdd, 0x50, 0x8d, 0xf3, - 0x46, 0xa1, 0x46, 0xfa, 0x47, 0x3c, 0x8b, 0x44, 0xaf, 0x6e, 0x27, 0xff, 0x81, 0x67, 0xa3, 0x3b, - 0x5f, 0x4d, 0x5b, 0x76, 0x77, 0x57, 0x9e, 0x75, 0xce, 0x8f, 0xe8, 0x27, 0x72, 0x70, 0x4e, 0xf3, - 0x2c, 0x45, 0xc9, 0xb5, 0x5d, 0x2a, 0x3e, 0xb4, 0x0b, 0x09, 0x51, 0x8b, 0xd0, 0xdc, 0xbf, 0x4a, - 0x3f, 0x63, 0x5f, 0x59, 0x6a, 0x66, 0x31, 0x7d, 0x8c, 0xd1, 0x25, 0x43, 0x7b, 0x94, 0xdc, 0x5d, - 0x75, 0x69, 0x8a, 0x1e, 0x6b, 0x21, 0xbf, 0xaf, 0x4d, 0x47, 0xd4, 0x0e, 0xcf, 0xc7, 0x82, 0xf2, - 0x34, 0xb5, 0xdc, 0x47, 0x6e, 0x54, 0xc3, 0xa4, 0xc6, 0x5a, 0xae, 0x65, 0xa6, 0xfc, 0xdb, 0x62, - 0xed, 0x64, 0x3c, 0x89, 0x3e, 0x1b, 0x40, 0x1c, 0xce, 0x31, 0x5a, 0x4f, 0xf3, 0xb4, 0xcb, 0xa0, - 0x04, 0x5b, 0x04, 0x91, 0x9d, 0x62, 0x02, 0xc3, 0x00, 0x02, 0x20, 0xf2, 0xab, 0xa6, 0xa5, 0x46, - 0x6a, 0xd1, 0x9a, 0x4a, 0xbc, 0xeb, 0x45, 0x52, 0x69, 0x20, 0xf3, 0x1d, 0x25, 0xda, 0x4c, 0x2a, - 0x81, 0xf0, 0x12, 0x8e, 0x99, 0x8f, 0x7e, 0x7c, 0x79, 0x9e, 0xac, 0x5d, 0xcd, 0xc1, 0x22, 0x2a, - 0x67, 0xe1, 0xaa, 0x27, 0xa9, 0x52, 0x0a, 0x67, 0x2c, 0xa4, 0x02, 0xea, 0x48, 0xd6, 0xbb, 0x13, - 0x40, 0xfb, 0x48, 0x85, 0xac, 0xc9, 0x96, 0xd9, 0x68, 0xaa, 0x07, 0xfd, 0xe9, 0xe1, 0x80, 0x32, - 0x4d, 0xbf, 0x8d, 0x87, 0x8b, 0x70, 0xad, 0x8e, 0x2d, 0x6b, 0x29, 0x32, 0x43, 0x8f, 0x51, 0x90, - 0xba, 0x73, 0x4d, 0x9e, 0xe6, 0x6c, 0x39, 0x0e, 0x6c, 0xce, 0x4a, 0x2a, 0xc7, 0xa0, 0x94, 0x97, - 0x2a, 0x8d, 0x28, 0xdf, 0x9c, 0x6a, 0x61, 0x8c, 0xd7, 0x97, 0x83, 0x51, 0x7c, 0x2d, 0xfa, 0x6d, - 0x39, 0xf0, 0x6c, 0xee, 0xd5, 0x5f, 0x19, 0xe4, 0xbf, 0x31, 0x39, 0x55, 0xc5, 0xc3, 0x60, 0x92, - 0x08, 0x1f, 0x9b, 0x3b, 0xaa, 0xaf, 0x02, 0xf5, 0xb4, 0xfa, 0x15, 0x53, 0x34, 0xb3, 0x6e, 0xdb, - 0x00, 0xc4, 0xa3, 0x82, 0xbf, 0x60, 0x21, 0x1a, 0x0c, 0x58, 0x02, 0x13, 0x17, 0x35, 0xc0, 0x80, - 0xf2, 0x77, 0xd8, 0x20, 0x5c, 0x9f, 0x17, 0xc5, 0xc6, 0x3c, 0x67, 0xae, 0x47, 0xd4, 0x0a, 0x0a, - 0xcc, 0x6e, 0x82, 0xc6, 0xcd, 0x37, 0x95, 0xe0, 0x3e, 0x0d, 0xb0, 0xa3, 0x71, 0xe4, 0x12, 0xf1, - 0x2f, 0xd0, 0x29, 0x95, 0xf6, 0xce, 0x47, 0x35, 0x73, 0xab, 0x48, 0xc7, 0x33, 0x09, 0x9a, 0xc5, - 0x56, 0xbf, 0x5d, 0x7f, 0xf7, 0xe8, 0xbb, 0x9b, 0x07, 0x7f, 0x93, 0x33, 0xfa, 0x5c, 0xe2, 0x95, - 0x3a, 0xf3, 0x59, 0xdd, 0x9c, 0x22, 0x09, 0x05, 0x3d, 0x10, 0x3a, 0x02, 0x18, 0x44, 0xc4, 0x29, - 0x72, 0x36, 0x86, 0x63, 0xe4, 0x7b, 0x42, 0x80, 0x33, 0x78, 0x25, 0xd2, 0x38, 0xcc, 0x3c, 0xdb, - 0xf2, 0x24, 0xde, 0xe9, 0xe9, 0x37, 0xd3, 0x54, 0x8c, 0xd1, 0x18, 0xc5, 0xdc, 0xf9, 0x21, 0x67, - 0x45, 0x6e, 0x2c, 0xc3, 0xb9, 0x4a, 0x02, 0x14, 0x75, 0x12, 0x9f, 0xe4, 0x26, 0x06, 0xa9, 0xbc, - 0x6e, 0x0a, 0xb9, 0xcd, 0x31, 0x4b, 0xde, 0xb0, 0xc1, 0xd6, 0xfa, 0xe2, 0x54, 0x64, 0xc5, 0x6b, - 0xaa, 0x17, 0xa5, 0xb5, 0x50, 0xbd, 0x2a, 0x57, 0xd5, 0x0b, 0xf1, 0x4c, 0x32, 0x99, 0x5c, 0x71, - 0xf6, 0x8e, 0x84, 0x39, 0xea, 0xb7, 0xab, 0x0d, 0x08, 0x0c, 0x0e, 0xcb, 0x33, 0x5b, 0x4f, 0x1c, - 0x7a, 0x4d, 0x87, 0x5e, 0xc7, 0xc9, 0xd5, 0xea, 0xdc, 0xc6, 0x2d, 0x95, 0xbc, 0xac, 0x76, 0x97, - 0x25, 0x89, 0x86, 0x80, 0xa6, 0x88, 0x95, 0xd3, 0x3a, 0x33, 0xa6, 0x4c, 0x96, 0x6d, 0x85, 0xeb, - 0xe9, 0xbb, 0x13, 0x2d, 0x84, 0xea, 0xd5, 0xf6, 0xec, 0xaa, 0x1c, 0xc6, 0x1c, 0xec, 0x3e, 0x3b, - 0xe8, 0x74, 0x3a, 0x7f, 0xe9, 0x79, 0xc7, 0x9b, 0xc3, 0x3c, 0x58, 0xa7, 0xdb, 0x64, 0x11, 0x30, - 0x1c, 0x78, 0xeb, 0x7c, 0xc9, 0x37, 0x36, 0xf9, 0x62, 0x88, 0x78, 0xc0, 0x75, 0x6b, 0xf7, 0xd9, - 0xcb, 0x17, 0x2f, 0x5e, 0x10, 0xd7, 0x32, 0x4b, 0x9d, 0xbb, 0x93, 0x71, 0x36, 0xa3, 0x20, 0xaa, - 0xb9, 0xbb, 0x10, 0xab, 0x80, 0x99, 0x3e, 0x5f, 0xff, 0x26, 0x56, 0x16, 0x30, 0xf0, 0xf3, 0xc1, - 0xd6, 0x8f, 0x59, 0x7e, 0x19, 0x67, 0xde, 0xb0, 0x6f, 0xca, 0x62, 0xf0, 0x1c, 0xa7, 0xf0, 0x77, - 0xec, 0xfd, 0x78, 0x3a, 0x3c, 0x31, 0x9e, 0xff, 0xee, 0xd7, 0x80, 0x54, 0xef, 0xcb, 0x4d, 0x99, - 0xea, 0x99, 0x65, 0xb0, 0xe5, 0xc3, 0x2f, 0xee, 0xe8, 0x8b, 0xa0, 0x9a, 0xd0, 0xf7, 0x38, 0xfa, - 0xb4, 0xf1, 0x76, 0x74, 0x7a, 0xf8, 0x3c, 0xac, 0xd6, 0x84, 0xa7, 0xc5, 0xbf, 0x4a, 0x89, 0x08, - 0xc4, 0x03, 0xda, 0x4c, 0xbb, 0x1d, 0x50, 0x04, 0x12, 0x4b, 0xcc, 0x80, 0xdd, 0xba, 0x19, 0xa9, - 0x2d, 0x55, 0xd7, 0xe2, 0x55, 0x37, 0x58, 0xf5, 0x87, 0x87, 0x4b, 0xe7, 0xc2, 0xd4, 0x48, 0x66, - 0x74, 0x8c, 0xf9, 0xde, 0x5a, 0xe3, 0x41, 0xe3, 0x5c, 0xb0, 0xe7, 0x6d, 0x2d, 0xdb, 0x47, 0x6f, - 0x3d, 0x17, 0xbb, 0x83, 0x03, 0x0f, 0x53, 0x65, 0x77, 0xa3, 0xfb, 0x79, 0xfa, 0xbe, 0xfa, 0x8b, - 0x22, 0x0d, 0xa7, 0x5f, 0xbd, 0xf0, 0xa9, 0xfb, 0x70, 0x8e, 0x70, 0xf7, 0xb6, 0x1e, 0x1b, 0x23, - 0x6a, 0xbc, 0x47, 0xa7, 0xc3, 0x3f, 0x1f, 0x64, 0x1a, 0xaa, 0xbf, 0x11, 0x65, 0x37, 0x87, 0xff, - 0x21, 0x98, 0xdd, 0x49, 0x87, 0xf3, 0xfb, 0x6f, 0x07, 0xfa, 0xfd, 0x1f, 0x45, 0xfa, 0x3d, 0xae, - 0x3c, 0x1e, 0x7d, 0xa3, 0x92, 0xc7, 0xa3, 0xdf, 0x7b, 0xdd, 0xd6, 0xc6, 0x7d, 0x38, 0x57, 0xe5, - 0x2e, 0x0a, 0x56, 0xd4, 0x89, 0x41, 0xf3, 0xbd, 0xae, 0x49, 0xfe, 0x51, 0x14, 0x35, 0xc1, 0xa6, - 0xff, 0x9c, 0x4c, 0x84, 0xac, 0x41, 0x39, 0x17, 0x31, 0x4d, 0x79, 0x99, 0x92, 0x34, 0x7d, 0xa9, - 0xff, 0x0f, 0x76, 0xa1, 0x03, 0xfa, 0xbf, 0x17, 0x00, 0x00 + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xdd, 0x58, 0xdb, 0x72, 0xdb, 0x38, + 0x12, 0x7d, 0xd7, 0x57, 0xd0, 0x88, 0xcb, 0x26, 0x4b, 0x34, 0x25, 0xc7, 0x3b, 0xb3, 0x89, 0x24, + 0xc8, 0x93, 0x38, 0xc9, 0x44, 0x9b, 0x8b, 0x5d, 0xa5, 0xb9, 0xd4, 0x96, 0xd7, 0x35, 0xa6, 0x44, + 0x48, 0x42, 0x4c, 0x81, 0x5c, 0x00, 0xf4, 0x65, 0x65, 0xfd, 0xfb, 0x9e, 0x06, 0x49, 0x5d, 0x1c, + 0x3b, 0xb3, 0x33, 0x5b, 0xfb, 0xb2, 0x2f, 0x12, 0x09, 0x36, 0x9a, 0x8d, 0xd3, 0xdd, 0xa7, 0xbb, + 0xd9, 0xdb, 0x79, 0x73, 0x7a, 0xf2, 0xd3, 0xdf, 0xcf, 0xde, 0x7a, 0x33, 0x3b, 0x4f, 0xfb, 0xbd, + 0xea, 0x57, 0xc4, 0x89, 0x97, 0xc6, 0x6a, 0xca, 0x99, 0x50, 0xac, 0xdf, 0x9b, 0x0b, 0x1b, 0x7b, + 0xe3, 0x59, 0xac, 0x8d, 0xb0, 0x9c, 0x15, 0x76, 0x72, 0xf0, 0xa2, 0x5e, 0x6d, 0xa8, 0x78, 0x2e, + 0x38, 0xbb, 0x96, 0xe2, 0x26, 0xcf, 0xb4, 0x65, 0xde, 0x38, 0x53, 0x56, 0x28, 0x88, 0xdd, 0xc8, + 0xc4, 0xce, 0xf8, 0x77, 0xed, 0xf6, 0x4a, 0xf4, 0xc1, 0xa3, 0x44, 0x5c, 0xcb, 0xb1, 0x38, 0x70, + 0x37, 0xa1, 0x54, 0xd2, 0xca, 0x38, 0x3d, 0x30, 0xe3, 0x38, 0x15, 0xfc, 0x30, 0x9c, 0xc7, 0xb7, + 0x72, 0x5e, 0xcc, 0x57, 0xf7, 0x85, 0x11, 0xda, 0xdd, 0xc4, 0x23, 0xdc, 0xab, 0x8c, 0x7d, 0xf5, + 0xe6, 0x7e, 0xcf, 0x4a, 0x9b, 0x8a, 0xfe, 0xcf, 0x90, 0x9c, 0x67, 0x89, 0x37, 0x14, 0xd6, 0x4a, + 0x35, 0x35, 0xbd, 0x56, 0xb9, 0xde, 0x33, 0x63, 0x2d, 0x73, 0xdb, 0x6f, 0x5c, 0xc7, 0xda, 0xcb, + 0x6e, 0x94, 0xd0, 0x61, 0x9a, 0x8d, 0x65, 0x1e, 0x16, 0x3a, 0xbb, 0x31, 0x61, 0xc2, 0x93, 0x6c, + 0x5c, 0xcc, 0x61, 0x5f, 0x58, 0xcc, 0x4f, 0x26, 0x53, 0xbe, 0x58, 0x86, 0xb9, 0x54, 0x86, 0x9f, + 0x7f, 0x1f, 0xfe, 0x35, 0x7c, 0x11, 0xbe, 0x0c, 0x0f, 0xdb, 0xe1, 0xe1, 0xe1, 0x05, 0x2d, 0x9e, + 0xf2, 0x73, 0xa6, 0xcd, 0x75, 0xc2, 0xc2, 0xdf, 0xff, 0xbb, 0xa0, 0xb7, 0xf0, 0x9d, 0xc3, 0x50, + 0x15, 0xf3, 0x4f, 0xbc, 0xdd, 0x9d, 0x14, 0x6a, 0x6c, 0x65, 0xa6, 0xbc, 0xe9, 0x20, 0xf1, 0x45, + 0xb0, 0xd0, 0xc2, 0x16, 0x5a, 0x79, 0x49, 0x34, 0x15, 0xf6, 0x6d, 0x2a, 0xc8, 0x80, 0xd7, 0x77, + 0xee, 0xd1, 0x72, 0x25, 0x2a, 0xcd, 0xe9, 0x86, 0xa8, 0xd8, 0xdb, 0x63, 0xd9, 0xe8, 0x8b, 0x18, + 0x5b, 0xc6, 0xb9, 0xbd, 0xcb, 0x45, 0x36, 0xa1, 0xb5, 0x9d, 0x57, 0x5a, 0xc7, 0x77, 0x91, 0x34, + 0xee, 0x7f, 0x6b, 0xff, 0x7b, 0x3f, 0x58, 0xdc, 0x48, 0x95, 0x64, 0x37, 0x51, 0x96, 0x0b, 0xe5, + 0xb3, 0x99, 0xb5, 0xb9, 0xe9, 0xb4, 0x5a, 0x53, 0x69, 0x67, 0xc5, 0x28, 0x1a, 0x67, 0xf3, 0xd6, + 0x2b, 0xa9, 0xc7, 0x59, 0x96, 0x5d, 0x49, 0xd1, 0xfa, 0xf5, 0xe3, 0xdb, 0x37, 0xad, 0x1b, 0x79, + 0x25, 0x5b, 0x35, 0x86, 0xcf, 0x8a, 0x12, 0xd4, 0x03, 0x53, 0x2d, 0xb0, 0x0d, 0xed, 0xaf, 0x1f, + 0x6a, 0x6f, 0xad, 0xa4, 0x42, 0xf6, 0x9b, 0x11, 0xe9, 0x64, 0x53, 0x3a, 0xcd, 0xe2, 0xe4, 0x6f, + 0x43, 0x5f, 0x84, 0x96, 0xef, 0xb4, 0x83, 0x45, 0x2a, 0xac, 0xa7, 0x78, 0x12, 0x8d, 0xb5, 0x88, + 0xad, 0xa8, 0x00, 0xf0, 0x59, 0xe9, 0x2b, 0x16, 0x74, 0x55, 0x04, 0x65, 0xaf, 0xac, 0xd5, 0x72, + 0x54, 0x58, 0x81, 0x07, 0x7a, 0xcc, 0x42, 0x11, 0x84, 0x0f, 0xd7, 0x09, 0x07, 0xbc, 0xce, 0x8a, + 0x5b, 0xdb, 0xfa, 0x12, 0x5f, 0xc7, 0xb5, 0x82, 0xaf, 0x04, 0x63, 0x73, 0xa7, 0xa0, 0xc2, 0x06, + 0x61, 0x12, 0x8d, 0xb2, 0xe4, 0x2e, 0x8a, 0x73, 0x18, 0x9d, 0x9c, 0xcc, 0x64, 0x9a, 0xf8, 0x8a, + 0xe4, 0xe3, 0x24, 0x79, 0x7b, 0x0d, 0x2b, 0x3e, 0x4a, 0x83, 0x70, 0x15, 0xda, 0x67, 0x64, 0x33, + 0x0b, 0xfd, 0x80, 0xf7, 0x17, 0x3f, 0x0a, 0xfb, 0x8b, 0x1f, 0x2c, 0x1f, 0x97, 0x13, 0x5a, 0x67, + 0x1a, 0xe6, 0x41, 0x0e, 0xb1, 0x6e, 0xb2, 0x54, 0x44, 0x69, 0x36, 0xf5, 0xd9, 0x5b, 0x5a, 0xf7, + 0xaa, 0xc3, 0x03, 0x18, 0x6f, 0x22, 0x53, 0xe1, 0x8e, 0x81, 0xe0, 0xd6, 0x38, 0xee, 0xc7, 0x6a, + 0x1d, 0x9e, 0xc4, 0xc6, 0x89, 0x9c, 0x16, 0x3a, 0x76, 0x68, 0x95, 0xc7, 0xf0, 0x26, 0x31, 0x36, + 0x24, 0xd1, 0x3f, 0xd4, 0x40, 0xc1, 0x57, 0x39, 0x40, 0x13, 0x5e, 0x1e, 0x4f, 0x85, 0x97, 0xc4, + 0x36, 0xde, 0x01, 0xbc, 0x1b, 0x00, 0x0f, 0xe1, 0x0e, 0x46, 0x2f, 0xe8, 0x20, 0x3c, 0x2a, 0xbf, + 0x20, 0x04, 0x9d, 0xbe, 0x28, 0xd7, 0x99, 0xcd, 0xc6, 0x59, 0xba, 0xb7, 0xe7, 0xbb, 0xb0, 0x6c, + 0x87, 0xbe, 0x4b, 0x02, 0x4e, 0x12, 0xe9, 0xd0, 0x66, 0x1a, 0x5a, 0x29, 0x14, 0x07, 0x56, 0xcc, + 0xe9, 0xe0, 0xe3, 0x41, 0xce, 0x82, 0xe0, 0xfe, 0xbe, 0x12, 0xc3, 0xfe, 0x79, 0x0e, 0x83, 0xdf, + 0x41, 0xbf, 0xf7, 0x29, 0x4b, 0x44, 0xe4, 0x9d, 0xa5, 0x22, 0x36, 0xc2, 0x03, 0x10, 0x42, 0x7b, + 0x14, 0x3a, 0xde, 0xe0, 0x0c, 0x26, 0x85, 0x5b, 0x1a, 0xcd, 0xb6, 0xc6, 0x32, 0xf3, 0x82, 0x00, + 0x52, 0x09, 0xec, 0x75, 0xb9, 0x81, 0x77, 0x50, 0x4a, 0xb0, 0x62, 0xce, 0x82, 0x48, 0x2a, 0x00, + 0xfa, 0xfe, 0xa7, 0x4f, 0x1f, 0x39, 0xfb, 0x9c, 0x79, 0x55, 0x4a, 0x1b, 0x0f, 0xf9, 0x68, 0xe3, + 0x94, 0xa0, 0x60, 0x5b, 0xe9, 0xf1, 0x6e, 0x33, 0x3d, 0x38, 0xe7, 0x4d, 0xe4, 0x83, 0xd8, 0xe1, + 0xdc, 0x6f, 0xdf, 0x6f, 0xe7, 0xd1, 0xe0, 0x31, 0x41, 0xfe, 0x95, 0xe0, 0x78, 0x26, 0xc6, 0x57, + 0x14, 0xa3, 0xc1, 0x82, 0xd8, 0x42, 0x71, 0x11, 0x11, 0xdb, 0x44, 0x5a, 0xe4, 0x69, 0x3c, 0x46, + 0x14, 0x9d, 0x5f, 0x20, 0xd8, 0x60, 0xa7, 0x29, 0x46, 0xc6, 0x6a, 0xff, 0xe0, 0x28, 0xe8, 0xca, + 0x89, 0xcf, 0x70, 0x8e, 0x91, 0xd0, 0xc0, 0x5d, 0x44, 0x14, 0x90, 0x48, 0x54, 0xb0, 0x05, 0x6e, + 0x55, 0x2d, 0xd8, 0x0e, 0x8f, 0x82, 0x60, 0x31, 0xc9, 0xb4, 0x4f, 0x7a, 0x25, 0xf8, 0x40, 0xf6, + 0x88, 0x65, 0xa2, 0x54, 0xa8, 0xa9, 0x9d, 0x75, 0x65, 0xb3, 0x19, 0x40, 0x91, 0xdd, 0xe1, 0x44, + 0x33, 0xe7, 0xf2, 0x22, 0x58, 0xe0, 0x56, 0x44, 0xd7, 0x71, 0x5a, 0xc0, 0x4e, 0x12, 0xc5, 0x22, + 0xf4, 0xca, 0x09, 0xd4, 0xae, 0x85, 0x80, 0xb0, 0xbd, 0x43, 0xb8, 0xc1, 0xb5, 0x99, 0xe6, 0x2c, + 0x95, 0x73, 0xc1, 0xba, 0x23, 0xe4, 0xd4, 0xd5, 0xf2, 0x91, 0xfd, 0xf7, 0xf7, 0xd5, 0x4a, 0xef, + 0xe0, 0x70, 0x75, 0xdd, 0x3f, 0x7a, 0xf9, 0x95, 0x1e, 0x2d, 0x92, 0x5a, 0xcd, 0xf6, 0x93, 0xd5, + 0x9e, 0xa3, 0x63, 0x06, 0x0f, 0xab, 0xa9, 0x60, 0x1d, 0xf6, 0x6c, 0x32, 0x99, 0xb0, 0xe5, 0x52, + 0xa4, 0x46, 0x2c, 0xcc, 0x8d, 0xb4, 0xe3, 0x99, 0x5f, 0xe2, 0x16, 0x2c, 0xc6, 0x08, 0x11, 0x36, + 0x7c, 0xf3, 0x8a, 0x75, 0xca, 0xab, 0x93, 0x8f, 0xd5, 0xd5, 0xa7, 0xd3, 0xe1, 0x60, 0xbd, 0xf8, + 0xa1, 0xba, 0x3c, 0x19, 0xb2, 0x8e, 0x7b, 0x6d, 0x37, 0x11, 0x93, 0xb8, 0x48, 0x6d, 0xa7, 0xf4, + 0xd9, 0x92, 0x90, 0xfb, 0xff, 0x44, 0x6d, 0x1d, 0x7c, 0xc8, 0xbe, 0x33, 0xbc, 0x91, 0x22, 0x15, + 0x56, 0x94, 0xdc, 0x1f, 0xd0, 0xc1, 0x89, 0x53, 0xec, 0xb9, 0x0a, 0xe5, 0x05, 0x78, 0xe2, 0xd4, + 0x55, 0x80, 0x08, 0x69, 0xa7, 0xa5, 0x20, 0xe1, 0xa0, 0x12, 0x96, 0x41, 0xe0, 0xaa, 0x1b, 0x57, + 0x61, 0xad, 0x49, 0x06, 0x5d, 0x72, 0x8a, 0x47, 0x21, 0x5a, 0x07, 0xe4, 0x37, 0x42, 0x99, 0x34, + 0x6d, 0x17, 0x13, 0x59, 0x1a, 0x40, 0x31, 0x6b, 0x81, 0xbe, 0xed, 0xc9, 0x1a, 0x7a, 0x4b, 0xd0, + 0x9f, 0xdb, 0x8b, 0x3e, 0x6f, 0x83, 0x53, 0x9c, 0x53, 0xf2, 0xc2, 0xcc, 0x7c, 0x5a, 0x0b, 0x5c, + 0xad, 0x2c, 0xef, 0x9d, 0x49, 0x41, 0x6d, 0xc7, 0x57, 0xd2, 0x4f, 0x8b, 0x3e, 0x61, 0xca, 0x23, + 0x66, 0xac, 0x4e, 0x4b, 0xaf, 0x5e, 0xc3, 0x09, 0x9a, 0x7e, 0x27, 0x05, 0xc8, 0x1d, 0xe9, 0x1c, + 0x02, 0x3c, 0xd4, 0xe2, 0x15, 0xb0, 0x0a, 0xc9, 0xe8, 0xca, 0x7f, 0x93, 0xef, 0xf7, 0x66, 0xda, + 0x73, 0xce, 0xaa, 0xfa, 0x93, 0xce, 0xf3, 0xef, 0xdb, 0xf9, 0x2d, 0xeb, 0xef, 0x77, 0xd7, 0xd8, + 0xcb, 0x50, 0x3f, 0x82, 0x3d, 0xb4, 0xb0, 0x42, 0x5d, 0x29, 0x18, 0x4e, 0xe1, 0x65, 0x29, 0x38, + 0xa4, 0x1a, 0xa7, 0x45, 0x82, 0x87, 0xf0, 0x70, 0x70, 0xbc, 0x61, 0x03, 0x54, 0x04, 0x9d, 0xf5, + 0x7d, 0x13, 0xcf, 0x9b, 0xd6, 0xad, 0x2e, 0x1f, 0x3f, 0xb0, 0x5a, 0x63, 0xaf, 0x71, 0x68, 0xdd, + 0x53, 0xf5, 0xa1, 0x35, 0x0e, 0xbd, 0x7d, 0xba, 0x73, 0x7d, 0x11, 0xa2, 0xaa, 0x3a, 0xe8, 0x1c, + 0x73, 0x99, 0x30, 0xad, 0x5b, 0x04, 0xd5, 0xad, 0x72, 0x32, 0xad, 0xd2, 0x71, 0x94, 0xa1, 0x40, + 0xc5, 0x8a, 0x75, 0x52, 0xce, 0x1c, 0xe1, 0x8d, 0xb2, 0x5b, 0x16, 0x1a, 0xbe, 0x5f, 0x86, 0x3d, + 0xb3, 0xba, 0x10, 0x6c, 0xbf, 0xe9, 0xab, 0x63, 0x56, 0x12, 0x22, 0xc2, 0xba, 0x83, 0x48, 0x29, + 0x43, 0xbb, 0xeb, 0x74, 0x54, 0x84, 0xd7, 0x31, 0xfc, 0xb2, 0xda, 0xb5, 0xbb, 0x50, 0x4b, 0x76, + 0x19, 0x56, 0x71, 0xc6, 0xed, 0x46, 0x5c, 0x1d, 0xfb, 0x84, 0xb3, 0x87, 0xd6, 0x8e, 0xb3, 0xa3, + 0x97, 0xcc, 0x9b, 0x4b, 0xc5, 0xd9, 0xc1, 0x21, 0xb4, 0xa7, 0xb1, 0x31, 0x9c, 0x19, 0xb6, 0x0f, + 0x73, 0x99, 0x54, 0xa8, 0xdb, 0x1d, 0x27, 0x8a, 0xc2, 0x9a, 0x73, 0x16, 0xab, 0xbb, 0x95, 0xcc, + 0xed, 0x6d, 0xca, 0xf6, 0xbb, 0xdb, 0xdc, 0x80, 0x3d, 0x54, 0xf7, 0xc9, 0xf6, 0x2d, 0x2b, 0x1e, + 0xb8, 0xf3, 0x3b, 0xb8, 0xb3, 0xcb, 0x2e, 0x97, 0x0f, 0x9c, 0x83, 0x40, 0xac, 0x42, 0x40, 0xd4, + 0xb6, 0x92, 0x44, 0x22, 0x6e, 0x4f, 0x27, 0x4e, 0xa0, 0x79, 0x88, 0x3a, 0x55, 0x89, 0x5c, 0x7a, + 0xbb, 0x0b, 0xbb, 0xec, 0x78, 0x38, 0xe0, 0x0a, 0x32, 0xce, 0xd3, 0xe3, 0xfa, 0x71, 0x4f, 0xaa, + 0xbc, 0xb0, 0x1e, 0x41, 0xce, 0xd9, 0x4c, 0x26, 0x09, 0xfa, 0x67, 0xaf, 0x6c, 0x54, 0x77, 0x17, + 0x62, 0xd9, 0xa1, 0xdd, 0xbb, 0x0b, 0x79, 0x4c, 0x59, 0x07, 0x2c, 0x61, 0x63, 0x65, 0xf0, 0x24, + 0x86, 0xcb, 0x58, 0xff, 0xb2, 0x23, 0x51, 0x07, 0xff, 0x6b, 0x6d, 0xbb, 0x8b, 0x74, 0x09, 0x65, + 0x6b, 0xb3, 0xb7, 0x34, 0xed, 0x2e, 0x1c, 0xc6, 0x9c, 0x0c, 0x5f, 0x79, 0x10, 0x1b, 0xbe, 0xad, + 0x7a, 0x77, 0x61, 0x96, 0xe8, 0x61, 0x9c, 0xa2, 0x2a, 0x60, 0x7c, 0x3b, 0x93, 0x26, 0xdc, 0xdf, + 0x5d, 0x3c, 0x8d, 0xdc, 0x72, 0x3f, 0x40, 0x67, 0x3e, 0xd2, 0xfd, 0xcb, 0xe5, 0x56, 0x4a, 0xbe, + 0xd1, 0x59, 0x8e, 0xce, 0x44, 0x95, 0x45, 0xf6, 0xa9, 0x2e, 0x50, 0xa4, 0xd4, 0xe5, 0x06, 0x48, + 0xda, 0xcd, 0xfe, 0xd8, 0xbc, 0xbe, 0xfb, 0x0c, 0x4b, 0xeb, 0xe4, 0x09, 0xce, 0x0f, 0x2f, 0xa8, + 0xfa, 0x4a, 0x10, 0xfc, 0xe0, 0xf3, 0xd9, 0xcf, 0x3f, 0xd1, 0xc9, 0x64, 0x64, 0xe3, 0x29, 0x49, + 0xc1, 0xbd, 0x65, 0x74, 0x94, 0x8b, 0x00, 0xe0, 0xfe, 0x7e, 0x5d, 0xa7, 0xab, 0xa5, 0xa0, 0x34, + 0x41, 0xe0, 0xd6, 0x21, 0xd8, 0x95, 0xae, 0x6e, 0x75, 0xb7, 0x13, 0x4f, 0x46, 0x71, 0xdd, 0x47, + 0xae, 0x4a, 0x4f, 0xb3, 0xa9, 0xcb, 0x1e, 0xc1, 0xf0, 0xcd, 0xc7, 0x48, 0xc4, 0x6e, 0xd9, 0x93, + 0xee, 0x70, 0xe3, 0x74, 0xc1, 0x38, 0xa7, 0x7a, 0x73, 0xc1, 0xc5, 0xf4, 0xe6, 0x82, 0x0b, 0xd8, + 0x8d, 0x85, 0x07, 0xcd, 0x6b, 0xb9, 0x1c, 0x9a, 0xd2, 0xc8, 0x60, 0x59, 0x35, 0x32, 0x0f, 0x5b, + 0x5c, 0x6a, 0x0a, 0x0f, 0x20, 0xe2, 0x3a, 0x4c, 0x19, 0xe5, 0xb1, 0x06, 0x68, 0x15, 0x76, 0x35, + 0xef, 0x57, 0xfd, 0x6e, 0x08, 0xe6, 0x55, 0x2b, 0x3d, 0x45, 0x9a, 0x6e, 0x39, 0xe9, 0x34, 0xa7, + 0xab, 0x92, 0x5a, 0x1c, 0x67, 0x92, 0x04, 0x40, 0x13, 0x41, 0xb9, 0xa3, 0x4b, 0xa0, 0xc9, 0xaf, + 0xfd, 0x96, 0xb9, 0x7d, 0x60, 0x8a, 0x0a, 0x4e, 0x94, 0x22, 0xe0, 0x0c, 0x27, 0x70, 0x1b, 0x8a, + 0xad, 0x86, 0x1b, 0x95, 0x89, 0x30, 0x26, 0x3d, 0x25, 0xa3, 0xa3, 0x54, 0xd2, 0x83, 0xcf, 0x68, + 0x2d, 0xcd, 0x26, 0xb9, 0x2f, 0x36, 0x1f, 0x80, 0xe0, 0xeb, 0xda, 0x2c, 0x22, 0x3a, 0x2d, 0xce, + 0x4f, 0x0b, 0xf0, 0x35, 0xb5, 0x9a, 0x14, 0x34, 0x22, 0x19, 0x50, 0x20, 0x72, 0x1b, 0x6c, 0xc7, + 0xdd, 0x40, 0x4d, 0xb2, 0xfa, 0x40, 0xb5, 0xf5, 0x8f, 0x44, 0x16, 0x99, 0x5e, 0xbe, 0x9d, 0xe2, + 0x07, 0x91, 0x8d, 0xee, 0x7c, 0x3d, 0x6d, 0xd9, 0xbd, 0x3d, 0x79, 0xde, 0xbe, 0x38, 0xa6, 0x9f, + 0xc8, 0xc1, 0x39, 0xcb, 0xd2, 0x04, 0x25, 0xd7, 0x76, 0xa8, 0xf8, 0xd0, 0x53, 0x58, 0x88, 0x5a, + 0x84, 0xe6, 0xfe, 0x55, 0xf2, 0x05, 0xcf, 0x95, 0xa5, 0x66, 0x16, 0xd3, 0xc7, 0x04, 0x5d, 0x32, + 0x4e, 0x8f, 0x92, 0xbb, 0xa7, 0x46, 0x26, 0xef, 0xb2, 0x26, 0xf8, 0x7d, 0x63, 0x3a, 0xa2, 0x76, + 0x78, 0x31, 0x11, 0xc4, 0xd3, 0xd4, 0x72, 0x1f, 0xbb, 0x51, 0x0d, 0x93, 0x1a, 0x6b, 0xba, 0x96, + 0x99, 0xf8, 0xb7, 0xc9, 0x5a, 0xe3, 0xc9, 0x34, 0xfa, 0x62, 0x00, 0x71, 0xb8, 0xc0, 0x68, 0x3d, + 0xcb, 0x92, 0x0e, 0xc3, 0x21, 0xd8, 0x32, 0x88, 0xec, 0x0c, 0x13, 0x18, 0x06, 0x10, 0x00, 0x91, + 0x5d, 0xd5, 0x2d, 0x35, 0xa8, 0x45, 0x6b, 0x2a, 0xf1, 0xae, 0x17, 0x49, 0xa4, 0x81, 0xcd, 0x77, + 0x44, 0xb4, 0xa9, 0x54, 0x02, 0xe9, 0x25, 0x9c, 0x32, 0x1f, 0xfd, 0xf8, 0x6a, 0x3f, 0x79, 0xbb, + 0x9c, 0x83, 0x45, 0x54, 0xcc, 0xc3, 0x75, 0x4f, 0x52, 0x52, 0x0a, 0x67, 0x2c, 0xa4, 0x02, 0xea, + 0x44, 0x36, 0xbb, 0x13, 0x40, 0xfb, 0x48, 0x85, 0xac, 0xc4, 0x56, 0x6c, 0x34, 0xd3, 0xfd, 0xde, + 0xec, 0xa8, 0x4f, 0x4c, 0xd3, 0x6b, 0xe1, 0xe2, 0x32, 0xdc, 0xa8, 0x63, 0xab, 0x5a, 0x0a, 0x66, + 0xe8, 0x32, 0x4a, 0x52, 0xb7, 0xaf, 0xe6, 0x69, 0xce, 0x56, 0xe3, 0xc0, 0xf6, 0xac, 0xa4, 0x32, + 0x0c, 0x4a, 0x59, 0xa1, 0x92, 0x88, 0xf8, 0xe6, 0x4c, 0x0b, 0x63, 0xbc, 0x9e, 0xec, 0x0f, 0xe3, + 0x6b, 0xd1, 0x6b, 0xc9, 0xbe, 0x67, 0x33, 0xaf, 0xfa, 0xca, 0x20, 0xff, 0x85, 0xc9, 0xa9, 0x2c, + 0x1e, 0x06, 0x93, 0x44, 0xf8, 0xd8, 0xdc, 0x51, 0x7e, 0x15, 0xa8, 0xa6, 0xd5, 0x6f, 0xb8, 0xa2, + 0x9e, 0x75, 0x5b, 0x06, 0x20, 0x1e, 0xe7, 0xfc, 0x05, 0x0b, 0xd1, 0x60, 0xc0, 0x13, 0x98, 0xb8, + 0xa8, 0x01, 0x06, 0x94, 0xff, 0x81, 0x0f, 0xc2, 0xcd, 0x79, 0x51, 0x6c, 0xcd, 0x73, 0xe6, 0x7a, + 0x48, 0xad, 0xa0, 0xc0, 0xec, 0x26, 0x68, 0xdc, 0x7c, 0x53, 0x1a, 0xee, 0xd3, 0x00, 0x3b, 0x9c, + 0x44, 0x8e, 0x88, 0x7f, 0xc1, 0x99, 0x12, 0x69, 0xef, 0x7c, 0x54, 0x33, 0xb7, 0x0a, 0x3a, 0x9e, + 0x4b, 0xc8, 0x2c, 0x1b, 0xbd, 0x56, 0xf5, 0xdd, 0xa3, 0xe7, 0xde, 0xdc, 0xff, 0x41, 0xce, 0xe9, + 0x73, 0x89, 0x57, 0xe8, 0xd4, 0x67, 0x55, 0x73, 0x0a, 0x12, 0x0a, 0xba, 0x10, 0x74, 0x02, 0x70, + 0x88, 0x88, 0x13, 0x70, 0x36, 0x86, 0x63, 0xf0, 0x3d, 0x21, 0xc0, 0x19, 0xa2, 0x12, 0x34, 0x0e, + 0x37, 0xcf, 0x1b, 0x9e, 0xc4, 0x3d, 0x5d, 0xfd, 0x66, 0xea, 0x8a, 0x31, 0x9c, 0xa0, 0x98, 0xbb, + 0x38, 0xe4, 0x2c, 0xcf, 0x8c, 0x65, 0xd8, 0x57, 0x5a, 0x80, 0xa2, 0x4e, 0xe6, 0x93, 0xdd, 0xa4, + 0x20, 0x91, 0xd7, 0x75, 0x21, 0xb7, 0x19, 0x66, 0xc9, 0x1b, 0xd6, 0x6f, 0x6c, 0x2e, 0xce, 0x44, + 0x9a, 0xbf, 0xa6, 0x7a, 0x51, 0x58, 0x8b, 0xa3, 0x97, 0xe5, 0xaa, 0xbc, 0x21, 0x9d, 0xe3, 0x54, + 0x8e, 0xaf, 0x38, 0x7b, 0x4f, 0xc6, 0x1c, 0xf7, 0x5a, 0xe5, 0x03, 0x18, 0x0c, 0x0d, 0xab, 0x3d, + 0x8d, 0x27, 0x36, 0xbd, 0xa6, 0x4d, 0xaf, 0xe3, 0xf1, 0xd5, 0x7a, 0xdf, 0xd6, 0x5b, 0x4a, 0x7b, + 0x59, 0x15, 0x2e, 0x2b, 0x11, 0x0d, 0x03, 0x4d, 0x1e, 0x2b, 0x77, 0xea, 0xd4, 0x98, 0x62, 0xbc, + 0x6a, 0x2b, 0x5c, 0x4f, 0xdf, 0x99, 0x6a, 0x21, 0x54, 0xb7, 0xf2, 0x67, 0x47, 0x65, 0x70, 0x66, + 0x7f, 0xef, 0xd9, 0x61, 0xbb, 0xdd, 0xfe, 0x4b, 0xd7, 0x3b, 0xd9, 0x1e, 0xe6, 0xa1, 0x3a, 0xd9, + 0x21, 0x8f, 0x40, 0x61, 0xdf, 0xdb, 0xd4, 0x4b, 0xb1, 0xb1, 0xad, 0x17, 0x43, 0xc4, 0x03, 0xad, + 0x8d, 0xbd, 0x67, 0x2f, 0x5f, 0xbc, 0x78, 0x41, 0x5a, 0x8b, 0x34, 0x71, 0xe1, 0x4e, 0xce, 0xd9, + 0xce, 0x82, 0xa8, 0xd2, 0xee, 0x52, 0xac, 0x04, 0x66, 0xf6, 0x7c, 0xf3, 0x9b, 0x58, 0x91, 0xc3, + 0xc1, 0xcf, 0xfb, 0x8d, 0x1f, 0xd3, 0x6c, 0x14, 0xa7, 0xde, 0xa0, 0x67, 0x8a, 0xbc, 0xff, 0x1c, + 0xbb, 0xf0, 0x77, 0xe2, 0xfd, 0x78, 0x36, 0x38, 0x35, 0x9e, 0xff, 0xfe, 0xd7, 0x80, 0x8e, 0xde, + 0x93, 0xdb, 0x36, 0x55, 0x33, 0x4b, 0xbf, 0xe1, 0x23, 0x2e, 0xee, 0xe8, 0x8b, 0xa0, 0x9a, 0xd2, + 0xf7, 0x38, 0xfa, 0xb4, 0xf1, 0x76, 0x78, 0x76, 0xf4, 0x3c, 0x2c, 0xd7, 0x84, 0xa7, 0xc5, 0x3f, + 0x0b, 0x89, 0x0c, 0xc4, 0x05, 0xda, 0x4c, 0xbb, 0x13, 0x50, 0x06, 0x92, 0x4a, 0xcc, 0x80, 0x9d, + 0xaa, 0x19, 0xa9, 0x3c, 0x55, 0xd5, 0xe2, 0x75, 0x37, 0x58, 0xf6, 0x87, 0x47, 0xab, 0xe0, 0xc2, + 0xd4, 0x48, 0x6e, 0x74, 0x8a, 0xf9, 0xfe, 0x46, 0xe3, 0x41, 0xe3, 0x5c, 0xb0, 0xef, 0x35, 0x56, + 0xed, 0xa3, 0xb7, 0xc9, 0xc5, 0x6e, 0x63, 0xdf, 0xc3, 0x54, 0xd9, 0xd9, 0xea, 0x7e, 0x9e, 0x7e, + 0x5f, 0xf5, 0x45, 0x91, 0x86, 0xd3, 0x6f, 0xbe, 0xf0, 0xa9, 0xf7, 0x61, 0x1f, 0xe1, 0xee, 0x35, + 0x1e, 0x1b, 0x23, 0x2a, 0xbc, 0x87, 0x67, 0x83, 0xff, 0x3d, 0xc8, 0x34, 0x54, 0xff, 0x41, 0x94, + 0xdd, 0x1c, 0xfe, 0xa7, 0x60, 0x76, 0x3b, 0x1d, 0xce, 0x1f, 0xfe, 0x38, 0xd0, 0x1f, 0xfe, 0x2c, + 0xd2, 0x1f, 0x2a, 0x36, 0x69, 0x50, 0xfe, 0x80, 0xba, 0xfb, 0xf5, 0x27, 0xb4, 0x9a, 0x8f, 0xa3, + 0x28, 0xaa, 0xe3, 0x5f, 0xff, 0x1e, 0xa1, 0xac, 0xb8, 0xa1, 0xf1, 0x87, 0xc8, 0xa1, 0x45, 0x2c, + 0x88, 0x3f, 0x62, 0x4a, 0xa2, 0x4d, 0xfa, 0x76, 0xfe, 0x6f, 0x7c, 0x47, 0x58, 0x8b, 0x51, 0x17, + 0x00, 0x00 }; diff --git a/wled00/json.cpp b/wled00/json.cpp index a25d21c8..a2f654df 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -84,8 +84,8 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId) if ((spc>0 && spc!=seg.spacing) || seg.map1D2D!=map1D2D) seg.fill(BLACK); // clear spacing gaps - seg.map1D2D = map1D2D & 0x03; - seg.soundSim = soundSim & 0x07; + seg.map1D2D = map1D2D & 0x07; + seg.soundSim = soundSim & 0x03; uint16_t len = 1; if (stop > start) len = stop - start; @@ -102,15 +102,15 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId) byte segbri = seg.opacity; if (getVal(elem["bri"], &segbri)) { if (segbri > 0) seg.setOpacity(segbri); - seg.setOption(SEG_OPTION_ON, segbri); + seg.on = segbri; } - bool on = elem["on"] | seg.getOption(SEG_OPTION_ON); + bool on = elem["on"] | seg.on; if (elem["on"].is() && elem["on"].as()[0] == 't') on = !on; - seg.setOption(SEG_OPTION_ON, on); - bool frz = elem["frz"] | seg.getOption(SEG_OPTION_FREEZE); - if (elem["frz"].is() && elem["frz"].as()[0] == 't') frz = !seg.getOption(SEG_OPTION_FREEZE); - seg.setOption(SEG_OPTION_FREEZE, frz); + seg.on = on; + bool frz = elem["frz"] | seg.freeze; + if (elem["frz"].is() && elem["frz"].as()[0] == 't') frz = !seg.freeze; + seg.freeze = frz; seg.setCCT(elem["cct"] | seg.cct); @@ -162,13 +162,13 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId) } #endif - seg.setOption(SEG_OPTION_SELECTED, elem["sel"] | seg.getOption(SEG_OPTION_SELECTED)); - seg.setOption(SEG_OPTION_REVERSED, elem["rev"] | seg.getOption(SEG_OPTION_REVERSED)); - seg.setOption(SEG_OPTION_MIRROR , elem[F("mi")] | seg.getOption(SEG_OPTION_MIRROR )); + seg.selected = elem["sel"] | seg.selected; + seg.reverse = elem["rev"] | seg.reverse; + seg.mirror = elem[F("mi")] | seg.mirror; #ifndef WLED_DISABLE_2D - seg.setOption(SEG_OPTION_REVERSED_Y, elem[F("rY")] | seg.getOption(SEG_OPTION_REVERSED_Y)); - seg.setOption(SEG_OPTION_MIRROR_Y , elem[F("mY")] | seg.getOption(SEG_OPTION_MIRROR_Y )); - seg.setOption(SEG_OPTION_TRANSPOSED, elem[F("tp")] | seg.getOption(SEG_OPTION_TRANSPOSED)); + seg.reverse_y = elem[F("rY")] | seg.reverse_y; + seg.mirror_y = elem[F("mY")] | seg.mirror_y; + seg.transpose = elem[F("tp")] | seg.transpose; #endif byte fx = seg.mode; @@ -193,8 +193,8 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId) sOpt = extractModeDefaults(fx, SET_F("c1")); if (sOpt >= 0) seg.custom1 = sOpt; sOpt = extractModeDefaults(fx, SET_F("c2")); if (sOpt >= 0) seg.custom2 = sOpt; sOpt = extractModeDefaults(fx, SET_F("c3")); if (sOpt >= 0) seg.custom3 = sOpt; - sOpt = extractModeDefaults(fx, SET_F("mp12")); if (sOpt >= 0) seg.map1D2D = sOpt & 0x03; - sOpt = extractModeDefaults(fx, SET_F("ssim")); if (sOpt >= 0) seg.soundSim = sOpt & 0x07; + sOpt = extractModeDefaults(fx, SET_F("mp12")); if (sOpt >= 0) seg.map1D2D = sOpt & 0x07; + sOpt = extractModeDefaults(fx, SET_F("ssim")); if (sOpt >= 0) seg.soundSim = sOpt & 0x03; sOpt = extractModeDefaults(fx, "rev"); if (sOpt >= 0) seg.reverse = (bool)sOpt; sOpt = extractModeDefaults(fx, SET_F("mi")); if (sOpt >= 0) seg.mirror = (bool)sOpt; // NOTE: setting this option is a risky business sOpt = extractModeDefaults(fx, SET_F("rY")); if (sOpt >= 0) seg.reverse_y = (bool)sOpt; @@ -238,8 +238,8 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId) strip.setBrightness(scaledBri(bri), true); // freeze and init to black - if (!seg.getOption(SEG_OPTION_FREEZE)) { - seg.setOption(SEG_OPTION_FREEZE, true); + if (!seg.freeze) { + seg.freeze = true; seg.fill(BLACK); } @@ -285,7 +285,7 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId) } // send UDP if not in preset and something changed that is not just selection // send UDP if something changed that is not just selection or segment power/opacity - if ((seg.differs(prev) & 0x7E) && seg.getOption(SEG_OPTION_ON)==prev.getOption(SEG_OPTION_ON)) stateChanged = true; + if ((seg.differs(prev) & 0x7E) && seg.on == prev.on) stateChanged = true; } // deserializes WLED state (fileDoc points to doc object if called from web server) @@ -315,10 +315,10 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId) if (bri && !onBefore) { // unfreeze all segments when turning on for (size_t s=0; s < strip.getSegmentsNum(); s++) { - strip.getSegment(s).setOption(SEG_OPTION_FREEZE, false); + strip.getSegment(s).freeze = false; } if (realtimeMode && !realtimeOverride && useMainSegmentOnly) { // keep live segment frozen if live - strip.getMainSegment().setOption(SEG_OPTION_FREEZE, true); + strip.getMainSegment().freeze = true; } } @@ -371,7 +371,7 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId) realtimeOverride = root[F("lor")] | realtimeOverride; if (realtimeOverride > 2) realtimeOverride = REALTIME_OVERRIDE_ALWAYS; if (realtimeMode && useMainSegmentOnly) { - strip.getMainSegment().setOption(SEG_OPTION_FREEZE, !realtimeOverride); + strip.getMainSegment().freeze = !realtimeOverride; } if (root.containsKey("live")) { @@ -472,14 +472,14 @@ void serializeSegment(JsonObject& root, Segment& seg, byte id, bool forPreset, b } } if (!forPreset) root["len"] = seg.stop - seg.start; - root["grp"] = seg.grouping; + root["grp"] = seg.grouping; root[F("spc")] = seg.spacing; - root[F("of")] = seg.offset; - root["on"] = seg.getOption(SEG_OPTION_ON); - root["frz"] = seg.getOption(SEG_OPTION_FREEZE); - byte segbri = seg.opacity; - root["bri"] = (segbri) ? segbri : 255; - root["cct"] = seg.cct; + root[F("of")] = seg.offset; + root["on"] = seg.on; + root["frz"] = seg.freeze; + byte segbri = seg.opacity; + root["bri"] = (segbri) ? segbri : 255; + root["cct"] = seg.cct; if (segmentBounds && seg.name != nullptr) root["n"] = reinterpret_cast(seg.name); //not good practice, but decreases required JSON buffer @@ -509,12 +509,12 @@ void serializeSegment(JsonObject& root, Segment& seg, byte id, bool forPreset, b root[F("c2")] = seg.custom2; root[F("c3")] = seg.custom3; root[F("sel")] = seg.isSelected(); - root["rev"] = seg.getOption(SEG_OPTION_REVERSED); - root[F("mi")] = seg.getOption(SEG_OPTION_MIRROR); + root["rev"] = seg.reverse; + root[F("mi")] = seg.mirror; if (strip.isMatrix) { - root[F("rY")] = seg.getOption(SEG_OPTION_REVERSED_Y); - root[F("mY")] = seg.getOption(SEG_OPTION_MIRROR_Y); - root[F("tp")] = seg.getOption(SEG_OPTION_TRANSPOSED); + root[F("rY")] = seg.reverse_y; + root[F("mY")] = seg.mirror_y; + root[F("tp")] = seg.transpose; } root[F("o1")] = seg.check1; root[F("o2")] = seg.check2; @@ -633,7 +633,6 @@ void serializeInfo(JsonObject root) JsonArray spi = root.createNestedArray(F("spi")); spi.add(spi_mosi); spi.add(spi_sclk); - spi.add(spi_cs); #endif root[F("str")] = syncToggleReceive; diff --git a/wled00/set.cpp b/wled00/set.cpp index 27c187a7..417fe768 100644 --- a/wled00/set.cpp +++ b/wled00/set.cpp @@ -503,31 +503,23 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage) } int8_t hw_mosi_pin = !request->arg(F("MOSI")).length() ? -1 : max(-1,min(33,(int)request->arg(F("MOSI")).toInt())); int8_t hw_sclk_pin = !request->arg(F("SCLK")).length() ? -1 : max(-1,min(33,(int)request->arg(F("SCLK")).toInt())); - int8_t hw_cs_pin = !request->arg(F("CS")).length() ? -1 : max(-1,min(33,(int)request->arg(F("CS")).toInt())); #ifdef ESP8266 // cannot change pins on ESP8266 if (hw_mosi_pin >= 0 && hw_mosi_pin != HW_PIN_DATASPI) hw_mosi_pin = HW_PIN_DATASPI; if (hw_sclk_pin >= 0 && hw_sclk_pin != HW_PIN_CLOCKSPI) hw_sclk_pin = HW_PIN_CLOCKSPI; - if (hw_cs_pin >= 0 && hw_cs_pin != HW_PIN_CSSPI) hw_cs_pin = HW_PIN_CSSPI; #endif - PinManagerPinType spi[3] = { { hw_mosi_pin, true }, { hw_sclk_pin, true }, { hw_cs_pin, true } }; - if (hw_mosi_pin >= 0 && hw_sclk_pin >= 0 && hw_cs_pin >= 0 && pinManager.allocateMultiplePins(spi, 3, PinOwner::HW_SPI)) { + PinManagerPinType spi[2] = { { hw_mosi_pin, true }, { hw_sclk_pin, true } }; + if (hw_mosi_pin >= 0 && hw_sclk_pin >= 0 && pinManager.allocateMultiplePins(spi, 2, PinOwner::HW_SPI)) { spi_mosi = hw_mosi_pin; spi_sclk = hw_sclk_pin; - spi_cs = hw_cs_pin; - #ifdef ESP8266 - SPI.begin(); - #else - SPI.begin(spi_sclk, (int8_t)-1, spi_mosi, spi_cs); - #endif + // no bus initialisation } else { //SPI.end(); DEBUG_PRINTLN(F("Could not allocate SPI pins.")); - uint8_t spi[3] = { spi_mosi, spi_sclk, spi_cs }; - pinManager.deallocateMultiplePins(spi, 3, PinOwner::HW_SPI); // just in case deallocation of old pins + uint8_t spi[2] = { spi_mosi, spi_sclk }; + pinManager.deallocateMultiplePins(spi, 2, PinOwner::HW_SPI); // just in case deallocation of old pins spi_mosi = -1; spi_sclk = -1; - spi_cs = -1; } JsonObject um = doc.createNestedObject("um"); @@ -673,8 +665,8 @@ bool handleSet(AsyncWebServerRequest *request, const String& req, bool apply) pos = req.indexOf(F("SV=")); //segment selected if (pos > 0) { byte t = getNumVal(&req, pos); - if (t == 2) for (uint8_t i = 0; i < strip.getSegmentsNum(); i++) strip.getSegment(i).setOption(SEG_OPTION_SELECTED, 0); // unselect other segments - selseg.setOption(SEG_OPTION_SELECTED, t); + if (t == 2) for (uint8_t i = 0; i < strip.getSegmentsNum(); i++) strip.getSegment(i).selected = false; // unselect other segments + selseg.selected = t; } // temporary values, write directly to segments, globals are updated by setValuesFromFirstSelectedSeg() @@ -713,15 +705,15 @@ bool handleSet(AsyncWebServerRequest *request, const String& req, bool apply) strip.setSegment(selectedSeg, startI, stopI, grpI, spcI, UINT16_MAX, startY, stopY); pos = req.indexOf(F("RV=")); //Segment reverse - if (pos > 0) selseg.setOption(SEG_OPTION_REVERSED, req.charAt(pos+3) != '0'); + if (pos > 0) selseg.reverse = req.charAt(pos+3) != '0'; pos = req.indexOf(F("MI=")); //Segment mirror - if (pos > 0) selseg.setOption(SEG_OPTION_MIRROR, req.charAt(pos+3) != '0'); + if (pos > 0) selseg.mirror = req.charAt(pos+3) != '0'; pos = req.indexOf(F("SB=")); //Segment brightness/opacity if (pos > 0) { byte segbri = getNumVal(&req, pos); - selseg.setOption(SEG_OPTION_ON, segbri); + selseg.on = segbri; if (segbri) { selseg.setOpacity(segbri); } @@ -730,9 +722,9 @@ bool handleSet(AsyncWebServerRequest *request, const String& req, bool apply) pos = req.indexOf(F("SW=")); //segment power if (pos > 0) { switch (getNumVal(&req, pos)) { - case 0: selseg.setOption(SEG_OPTION_ON, false); break; - case 1: selseg.setOption(SEG_OPTION_ON, true); break; - default: selseg.setOption(SEG_OPTION_ON, !selseg.getOption(SEG_OPTION_ON)); break; + case 0: selseg.on = false; break; + case 1: selseg.on = true; break; + default: selseg.on = !selseg.on; break; } } @@ -989,7 +981,7 @@ bool handleSet(AsyncWebServerRequest *request, const String& req, bool apply) realtimeOverride = getNumVal(&req, pos); if (realtimeOverride > 2) realtimeOverride = REALTIME_OVERRIDE_ALWAYS; if (realtimeMode && useMainSegmentOnly) { - strip.getMainSegment().setOption(SEG_OPTION_FREEZE, !realtimeOverride); + strip.getMainSegment().freeze = !realtimeOverride; } } diff --git a/wled00/udp.cpp b/wled00/udp.cpp index aeef791c..9fe03e3a 100644 --- a/wled00/udp.cpp +++ b/wled00/udp.cpp @@ -149,7 +149,7 @@ void realtimeLock(uint32_t timeoutMs, byte md) Segment& mainseg = strip.getMainSegment(); start = mainseg.start; stop = mainseg.stop; - mainseg.setOption(SEG_OPTION_FREEZE, true); + mainseg.freeze = true; } else { start = 0; stop = strip.getLengthTotal(); @@ -159,7 +159,7 @@ void realtimeLock(uint32_t timeoutMs, byte md) // if WLED was off and using main segment only, freeze non-main segments so they stay off if (useMainSegmentOnly && bri == 0) { for (size_t s=0; s < strip.getSegmentsNum(); s++) { - strip.getSegment(s).setOption(SEG_OPTION_FREEZE, true); + strip.getSegment(s).freeze = true; } } } @@ -186,7 +186,7 @@ void exitRealtime() { realtimeMode = REALTIME_MODE_INACTIVE; // inform UI immediately realtimeIP[0] = 0; if (useMainSegmentOnly) { // unfreeze live segment again - strip.getMainSegment().setOption(SEG_OPTION_FREEZE, false); + strip.getMainSegment().freeze = false; } updateInterfaces(CALL_MODE_WS_SEND); } diff --git a/wled00/wled.h b/wled00/wled.h index 17e533eb..bff5b49a 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2208151 +#define VERSION 2208191 //uncomment this if you have a "my_config.h" file you'd like to use //#define WLED_USE_MY_CONFIG @@ -644,11 +644,10 @@ WLED_GLOBAL uint16_t ledMaps _INIT(0); // bitfield representation of available l // Usermod manager WLED_GLOBAL UsermodManager usermods _INIT(UsermodManager()); -WLED_GLOBAL int8_t i2c_sda _INIT(HW_PIN_SDA); // global I2C SDA pin (used for usermods) -WLED_GLOBAL int8_t i2c_scl _INIT(HW_PIN_SCL); // global I2C SDA pin (used for usermods) -WLED_GLOBAL int8_t spi_mosi _INIT(HW_PIN_DATASPI); // global I2C SDA pin (used for usermods) -WLED_GLOBAL int8_t spi_sclk _INIT(HW_PIN_CLOCKSPI); // global I2C SDA pin (used for usermods) -WLED_GLOBAL int8_t spi_cs _INIT(HW_PIN_CSSPI); // global I2C SDA pin (used for usermods) +WLED_GLOBAL int8_t i2c_sda _INIT(-1); // global I2C SDA pin [HW_PIN_SDA] (used for usermods) +WLED_GLOBAL int8_t i2c_scl _INIT(-1); // global I2C SCL pin [HW_PIN_SCL] (used for usermods) +WLED_GLOBAL int8_t spi_mosi _INIT(-1); // global SPI DATA/MOSI pin [HW_PIN_DATASPI] (used for usermods) +WLED_GLOBAL int8_t spi_sclk _INIT(-1); // global SPI CLOCK/SCLK pin [HW_PIN_CLOCKSPI] (used for usermods) // global ArduinoJson buffer WLED_GLOBAL StaticJsonDocument doc; diff --git a/wled00/wled_eeprom.cpp b/wled00/wled_eeprom.cpp index 1fec4e8a..0f2194be 100644 --- a/wled00/wled_eeprom.cpp +++ b/wled00/wled_eeprom.cpp @@ -414,10 +414,10 @@ void deEEP() { for (byte j = 0; j < numChannels; j++) colX.add(EEPROM.read(memloc + j)); } - segObj["fx"] = EEPROM.read(i+10); - segObj[F("sx")] = EEPROM.read(i+11); - segObj[F("ix")] = EEPROM.read(i+16); - segObj["pal"] = EEPROM.read(i+17); + segObj["fx"] = EEPROM.read(i+10); + segObj[F("sx")] = EEPROM.read(i+11); + segObj[F("ix")] = EEPROM.read(i+16); + segObj["pal"] = EEPROM.read(i+17); } else { Segment* seg = strip.getSegments(); memcpy(seg, EEPROM.getDataPtr() +i+2, 240); @@ -425,7 +425,7 @@ void deEEP() { for (byte j = 0; j < strip.getMaxSegments(); j++) { strip.getSegment(j).opacity = 255; - strip.getSegment(j).setOption(SEG_OPTION_ON, 1); + strip.getSegment(j).on = true; } } serializeState(pObj, true, false, true); diff --git a/wled00/xml.cpp b/wled00/xml.cpp index 93de72db..d1015a3d 100644 --- a/wled00/xml.cpp +++ b/wled00/xml.cpp @@ -265,10 +265,9 @@ void getSettingsJS(byte subPage, char* dest) oappend(","); oappend(itoa(i2c_sda,nS,10)); oappend(","); oappend(itoa(i2c_scl,nS,10)); } - if (spi_mosi > -1 && spi_sclk > -1 && spi_cs > -1) { + if (spi_mosi > -1 && spi_sclk > -1) { oappend(","); oappend(itoa(spi_mosi,nS,10)); oappend(","); oappend(itoa(spi_sclk,nS,10)); - oappend(","); oappend(itoa(spi_cs,nS,10)); } if (requestJSONBufferLock(6)) { @@ -638,12 +637,10 @@ void getSettingsJS(byte subPage, char* dest) sappend('v',SET_F("SCL"),i2c_scl); sappend('v',SET_F("MOSI"),spi_mosi); sappend('v',SET_F("SCLK"),spi_sclk); - sappend('v',SET_F("CS"),spi_cs); oappend(SET_F("addInfo('SDA','")); oappendi(HW_PIN_SDA); oappend(SET_F("');")); oappend(SET_F("addInfo('SCL','")); oappendi(HW_PIN_SCL); oappend(SET_F("');")); oappend(SET_F("addInfo('MOSI','")); oappendi(HW_PIN_DATASPI); oappend(SET_F("');")); oappend(SET_F("addInfo('SCLK','")); oappendi(HW_PIN_CLOCKSPI); oappend(SET_F("');")); - oappend(SET_F("addInfo('CS','")); oappendi(HW_PIN_CSSPI); oappend(SET_F("');")); usermods.appendConfigData(); }