From f7cbd2b6a542b3ed3ad07ebc253d7da3dc36898d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BChl?= <31169771+Blueforcer@users.noreply.github.com> Date: Sat, 29 Jul 2023 17:11:07 +0200 Subject: [PATCH 01/11] update --- docs/effects.md | 39 ++++ src/Apps.h | 117 +++++----- src/Dictionary.cpp | 5 + src/Dictionary.h | 5 + src/DisplayManager.cpp | 18 ++ src/DisplayManager.h | 1 + src/Globals.cpp | 17 +- src/Globals.h | 2 +- src/MQTTManager.cpp | 56 +++-- src/MQTTManager.h | 2 + src/MatrixDisplayUi.cpp | 476 +++++++++++++++++++++++++++++++++++++--- src/MatrixDisplayUi.h | 31 ++- src/MenuManager.cpp | 2 +- src/ServerManager.cpp | 2 + src/effects.cpp | 379 ++++++++++++++++++++++++-------- src/effects.h | 25 ++- src/main.cpp | 9 +- 17 files changed, 977 insertions(+), 209 deletions(-) diff --git a/docs/effects.md b/docs/effects.md index bc4a68a6..ceb4b525 100644 --- a/docs/effects.md +++ b/docs/effects.md @@ -68,6 +68,45 @@ Just call the name for your favorite effect. + +# Custom Color Palette Creation Guide + +This guide will show you how to create a custom color palette for use with AWTRIX effects. + +A color palette in AWTRIX is an array of 16 colors. Each color is represented as a `CRGB` object, which contains red, green, and blue components. + +AWTRIX uses these palettes to create smooth transitions between colors in effects. The 16 colors in the palette are not the only colors that will be displayed. Instead, AWTRIX interpolates between these colors to create a wide spectrum of in-between hues. This creates smooth, visually pleasing color transitions in your LED effects. + +## Creating a Custom Color Palette + +1. Create a text file with the `.txt` extension (for example, `sunny.txt`). +2. In the text file, define 16 colors in hexadecimal format. Each color should be on a new line. A color is defined in the format `#RRGGBB`, where `RR` is the red component, `GG` is the green component, and `BB` is the blue component. Each component is a two-digit hexadecimal number (00 to FF). + +For example, a sunny palette might look like this: + +``` +#0000FF // Deep blue sky at the horizon's edge +#0047AB // Lighter sky +#0080FF // Even lighter sky +#00BFFF // Light blue sky +#87CEEB // Slightly cloudy sky +#87CEFA // Light blue sky +#F0E68C // Light clouds +#FFD700 // Start of sun colors +#FFA500 // Darker sun colors +#FF4500 // Even darker sun colors +#FF6347 // Red-orange sun colors +#FF4500 // Dark sun colors +#FFA500 // Bright sun colors +#FFD700 // Bright yellow sun colors +#FFFFE0 // Very bright sun colors +#FFFFFF // White sun colors, very bright light +``` + +3. Save this file to in the `/PALETTES/` directory. + +Remember, the colors you define in your palette serve as key points in the color transitions. AWTRIX interpolates between these colors, creating a broad array of in-between hues for smooth color transitions in your animations. Experiment with different color placements in your palette to achieve different visual effects. + # Artnet (DMX) Awtrix light supports Artnet out of the box. diff --git a/src/Apps.h b/src/Apps.h index bfc2cd0d..bb25c58b 100644 --- a/src/Apps.h +++ b/src/Apps.h @@ -140,7 +140,7 @@ int findAppIndexByName(const String &name) return -1; } -void TimeApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void TimeApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { if (notifyFlag) return; @@ -196,7 +196,7 @@ void TimeApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, } } -void DateApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void DateApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { if (notifyFlag) return; @@ -231,7 +231,7 @@ void DateApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, } } -void TempApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void TempApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { if (notifyFlag) return; @@ -264,7 +264,7 @@ void TempApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, } } -void HumApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void HumApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { if (notifyFlag) return; @@ -285,7 +285,7 @@ void HumApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, i } #ifdef ULANZI -void BatApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void BatApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { if (notifyFlag) return; @@ -365,7 +365,7 @@ void TimerApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, GifPlayer } } -void ShowCustomApp(String name, FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void ShowCustomApp(String name, FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { // Abort if notifyFlag is set if (notifyFlag) @@ -429,7 +429,7 @@ void ShowCustomApp(String name, FastLED_NeoMatrix *matrix, MatrixDisplayUiState if (state->appState == FIXED) ca->iconPosition += movementFactor; } - if (ca->scrollposition < (9-ca->textOffset) && !ca->iconWasPushed) + if (ca->scrollposition < (9 - ca->textOffset) && !ca->iconWasPushed) { ca->iconPosition = ca->scrollposition - 9 + ca->textOffset; @@ -618,7 +618,6 @@ void ShowCustomApp(String name, FastLED_NeoMatrix *matrix, MatrixDisplayUiState static unsigned long lastTime = 0; - void NotifyApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, GifPlayer *gifPlayer) { // Check if notification flag is set @@ -645,6 +644,7 @@ void NotifyApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, GifPlayer { // Reset notification flags and exit function DEBUG_PRINTLN("Notification deleted"); + PeripheryManager.stopSound(); if (notifications.size() >= 2) { notifications[1].startime = millis(); @@ -663,7 +663,7 @@ void NotifyApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, GifPlayer // Clear the matrix display matrix->fillRect(0, 0, 32, 8, notifications[0].background); - if (!notifications[0].effect>-1) + if (!notifications[0].effect > -1) { callEffect(matrix, 0, 0, notifications[0].effect); } @@ -894,17 +894,18 @@ void NotifyApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, GifPlayer if (!notifications[0].soundPlayed || notifications[0].loopSound) { - if (!PeripheryManager.isPlaying()){ - if (notifications[0].sound != "" || (MATRIX_OFF && notifications[0].wakeup)) + if (!PeripheryManager.isPlaying()) { - PeripheryManager.playFromFile(notifications[0].sound); - } + if (notifications[0].sound != "" || (MATRIX_OFF && notifications[0].wakeup)) + { + PeripheryManager.playFromFile(notifications[0].sound); + } - if (notifications[0].rtttl != "") - { - PeripheryManager.playRTTTLString(notifications[0].rtttl); + if (notifications[0].rtttl != "") + { + PeripheryManager.playRTTTLString(notifications[0].rtttl); + } } - } notifications[0].soundPlayed = true; } @@ -914,126 +915,126 @@ void NotifyApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, GifPlayer // Unattractive to have a function for every customapp wich does the same, but currently still no other option found TODO -void CApp1(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp1(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp1); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp2(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp2(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp2); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp3(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp3(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp3); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp4(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp4(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp4); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp5(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp5(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp5); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp6(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp6(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp6); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp7(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp7(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp7); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp8(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp8(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp8); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp9(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp9(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp9); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp10(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp10(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp10); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp11(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp11(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp11); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp12(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp12(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp12); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp13(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp13(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp13); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp14(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp14(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp14); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp15(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp15(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp15); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp16(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp16(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp16); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp17(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp17(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp17); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp18(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp18(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp18); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp19(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp19(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp19); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp20(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer) +void CApp20(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp20); - ShowCustomApp(name, matrix, state, x, y, firstFrame, lastFrame, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } OverlayCallback overlays[] = {MenuApp, NotifyApp, AlarmApp, TimerApp}; -void (*customAppCallbacks[20])(FastLED_NeoMatrix *, MatrixDisplayUiState *, int16_t, int16_t, bool, bool, GifPlayer *) = {CApp1, CApp2, CApp3, CApp4, CApp5, CApp6, CApp7, CApp8, CApp9, CApp10, CApp11, CApp12, CApp13, CApp14, CApp15, CApp16, CApp17, CApp18, CApp19, CApp20}; +void (*customAppCallbacks[20])(FastLED_NeoMatrix *, MatrixDisplayUiState *, int16_t, int16_t, GifPlayer *) = {CApp1, CApp2, CApp3, CApp4, CApp5, CApp6, CApp7, CApp8, CApp9, CApp10, CApp11, CApp12, CApp13, CApp14, CApp15, CApp16, CApp17, CApp18, CApp19, CApp20}; #endif \ No newline at end of file diff --git a/src/Dictionary.cpp b/src/Dictionary.cpp index d3f0f86f..235fe734 100644 --- a/src/Dictionary.cpp +++ b/src/Dictionary.cpp @@ -39,6 +39,11 @@ const char HAbriIcon[] PROGMEM = {"mdi:brightness-auto"}; const char HAbriName[] PROGMEM = {"Brightness mode"}; const char HAbriOptions[] PROGMEM = {"Manual;Auto"}; +const char HAeffectID[] PROGMEM = {"%s_eff"}; +const char HAeffectIcon[] PROGMEM = {"mdi:auto-fix"}; +const char HAeffectName[] PROGMEM = {"Transition effect"}; +const char HAeffectOptions[] PROGMEM = {"Slide;Fade;Zoom;Rotate;Pixelate;Curtain;Ripple;Blink;Reload;Crossfade"}; + const char HAbtnaID[] PROGMEM = {"%s_btna"}; const char HAbtnaIcon[] PROGMEM = {"mdi:bell-off"}; const char HAbtnaName[] PROGMEM = {"Dismiss notification"}; diff --git a/src/Dictionary.h b/src/Dictionary.h index 4cc7c3d8..975d3bfc 100644 --- a/src/Dictionary.h +++ b/src/Dictionary.h @@ -35,6 +35,11 @@ extern const char HAbriIcon[]; extern const char HAbriName[]; extern const char HAbriOptions[]; +extern const char HAeffectID[]; +extern const char HAeffectIcon[]; +extern const char HAeffectName[]; +extern const char HAeffectOptions[]; + extern const char HAbtnaID[]; extern const char HAbtnaIcon[]; extern const char HAbtnaName[]; diff --git a/src/DisplayManager.cpp b/src/DisplayManager.cpp index 3bf9621a..7a92030b 100644 --- a/src/DisplayManager.cpp +++ b/src/DisplayManager.cpp @@ -701,6 +701,7 @@ bool DisplayManager_::generateNotification(uint8_t source, const char *json) } newNotification.loopSound = doc.containsKey("loopSound") ? doc["loopSound"].as() : false; newNotification.effect = doc.containsKey("effect") ? getEffectIndex(doc["effect"].as()) : -1; + updateEffectSettings(newNotification.effect, doc["effectSettings"].as()); newNotification.sound = doc.containsKey("sound") ? doc["sound"].as() : ""; newNotification.rtttl = doc.containsKey("rtttl") ? doc["rtttl"].as() : ""; newNotification.duration = doc.containsKey("duration") ? doc["duration"].as() * 1000 : TIME_PER_APP; @@ -1506,6 +1507,8 @@ String DisplayManager_::getStats() doc[F("indicator2")] = ui->indicator2State; doc[F("indicator3")] = ui->indicator3State; doc[F("app")] = CURRENT_APP; + doc[F("freeFlash")] = LittleFS.totalBytes() - LittleFS.usedBytes(); + doc[F("heap")] = ESP.getFreeHeap(); String jsonString; return serializeJson(doc, jsonString), jsonString; } @@ -1777,6 +1780,7 @@ String DisplayManager_::getSettings() doc["BRI"] = BRIGHTNESS; doc["ATRANS"] = AUTO_TRANSITION; doc["TCOL"] = TEXTCOLOR_565; + doc["TEFF"] = TRANS_EFFECT; doc["TSPEED"] = TIME_PER_TRANSITION; doc["ATIME"] = TIME_PER_APP / 1000; doc["TFORMAT"] = TIME_FORMAT; @@ -1821,6 +1825,7 @@ void DisplayManager_::setNewSettings(const char *json) { TIME_PER_APP = TIME_PER_APP; } + TRANS_EFFECT = doc.containsKey("TEFF") ? doc["TEFF"] : TRANS_EFFECT; TIME_PER_TRANSITION = doc.containsKey("TSPEED") ? doc["TSPEED"] : TIME_PER_TRANSITION; BRIGHTNESS = doc.containsKey("BRI") ? doc["BRI"] : BRIGHTNESS; SCROLL_SPEED = doc.containsKey("SSPEED") ? doc["SSPEED"] : SCROLL_SPEED; @@ -2279,3 +2284,16 @@ CRGB *DisplayManager_::getLeds() { return leds; } + +String DisplayManager_::getEffectNamesInJson() +{ + StaticJsonDocument<1024> doc; + JsonArray array = doc.to(); + for (int i = 0; i < numOfEffects; i++) + { + array.add(effects[i].name); + } + String result; + serializeJson(array, result); + return result; +} \ No newline at end of file diff --git a/src/DisplayManager.h b/src/DisplayManager.h index b264e62c..2dd84e7a 100644 --- a/src/DisplayManager.h +++ b/src/DisplayManager.h @@ -98,6 +98,7 @@ struct RGB { void sendBMP(Stream &stream); CRGB getPixelColor(int16_t x, int16_t y); CRGB* getLeds(); + String getEffectNamesInJson(); }; extern DisplayManager_ &DisplayManager; diff --git a/src/Globals.cpp b/src/Globals.cpp index 54c4161d..0aef2e39 100644 --- a/src/Globals.cpp +++ b/src/Globals.cpp @@ -72,9 +72,9 @@ void loadDevSettings() TEMP_OFFSET = doc["temp_offset"]; } - if (doc.containsKey("background_effect")) - { - BACKGROUND_EFFECT = getEffectIndex(doc["background_effect"].as()); + if (doc.containsKey("background_effect")) + { + BACKGROUND_EFFECT = getEffectIndex(doc["background_effect"].as()); } if (doc.containsKey("min_brightness")) @@ -92,7 +92,6 @@ void loadDevSettings() HUM_OFFSET = doc["hum_offset"]; } - if (doc.containsKey("ha_prefix")) { HA_PREFIX = doc["ha_prefix"].as(); @@ -163,7 +162,7 @@ void loadSettings() BRIGHTNESS = Settings.getUInt("BRI", 120); AUTO_BRIGHTNESS = Settings.getBool("ABRI", false); TEXTCOLOR_565 = Settings.getUInt("TCOL", 0xFFFF); - + TRANS_EFFECT = Settings.getUInt("TEFF", 0); TIME_COLOR = Settings.getUInt("TIME_COL", 0); DATE_COLOR = Settings.getUInt("DATE_COL", 0); TEMP_COLOR = Settings.getUInt("TEMP_COL", 0); @@ -205,6 +204,7 @@ void saveSettings() { DEBUG_PRINTLN(F("Saving usersettings")); Settings.begin("awtrix", false); + Settings.putUInt("TEFF", TRANS_EFFECT); Settings.putUInt("BRI", BRIGHTNESS); Settings.putBool("WD", SHOW_WEEKDAY); Settings.putBool("ABRI", AUTO_BRIGHTNESS); @@ -246,7 +246,7 @@ IPAddress gateway; IPAddress subnet; IPAddress primaryDNS; IPAddress secondaryDNS; -const char *VERSION = "0.71"; +const char *VERSION = "0.72"; String MQTT_HOST = ""; uint16_t MQTT_PORT = 1883; @@ -302,7 +302,7 @@ float HUM_OFFSET; uint16_t LDR_RAW; String TIME_FORMAT = "%H:%M:%S"; String DATE_FORMAT = "%d.%m.%y"; -int BACKGROUND_EFFECT=-1; +int BACKGROUND_EFFECT = -1; bool START_ON_MONDAY; String ALARM_SOUND; @@ -348,4 +348,5 @@ bool ARTNET_MODE; bool MOODLIGHT_MODE; uint8_t MIN_BRIGHTNESS = 2; uint8_t MAX_BRIGHTNESS = 180; -float movementFactor = 0.5; \ No newline at end of file +float movementFactor = 0.5; +int8_t TRANS_EFFECT = 0; \ No newline at end of file diff --git a/src/Globals.h b/src/Globals.h index 4c8a99f6..50c8be10 100644 --- a/src/Globals.h +++ b/src/Globals.h @@ -52,7 +52,7 @@ extern bool SHOW_TEMP; extern bool SHOW_HUM; extern bool SHOW_SECONDS; extern bool SHOW_WEEKDAY; - +extern int8_t TRANS_EFFECT; extern String NET_IP; extern String NET_GW; extern String NET_SN; diff --git a/src/MQTTManager.cpp b/src/MQTTManager.cpp index 06d82273..6053b48b 100644 --- a/src/MQTTManager.cpp +++ b/src/MQTTManager.cpp @@ -14,7 +14,7 @@ HADevice device; HAMqtt mqtt(espClient, device, 25); // HANumber *ScrollSpeed = nullptr; HALight *Matrix, *Indikator1, *Indikator2, *Indikator3 = nullptr; -HASelect *BriMode = nullptr; +HASelect *BriMode, *transEffect = nullptr; HAButton *dismiss, *nextApp, *prevApp, *doUpdate = nullptr; HASwitch *transition = nullptr; #ifdef ULANZI @@ -22,8 +22,8 @@ HASensor *battery = nullptr; #endif HASensor *temperature, *humidity, *illuminance, *uptime, *strength, *version, *ram, *curApp, *myOwnID = nullptr; HABinarySensor *btnleft, *btnmid, *btnright = nullptr; - -char matID[40], ind1ID[40], ind2ID[40], ind3ID[40], briID[40], btnAID[40], btnBID[40], btnCID[40], appID[40], tempID[40], humID[40], luxID[40], verID[40], ramID[40], upID[40], sigID[40], btnLID[40], btnMID[40], btnRID[40], transID[40], doUpdateID[40], batID[40], myID[40], sSpeed[40]; +bool connected; +char matID[40], ind1ID[40], ind2ID[40], ind3ID[40], briID[40], btnAID[40], btnBID[40], btnCID[40], appID[40], tempID[40], humID[40], luxID[40], verID[40], ramID[40], upID[40], sigID[40], btnLID[40], btnMID[40], btnRID[40], transID[40], doUpdateID[40], batID[40], myID[40], sSpeed[40], effectID[40]; // The getter for the instantiated singleton instance MQTTManager_ &MQTTManager_::getInstance() @@ -68,18 +68,25 @@ void onSwitchCommand(bool state, HASwitch *sender) void onSelectCommand(int8_t index, HASelect *sender) { - sender->setState(index); // report the selected option back to the HA panel - switch (index) + if (sender == BriMode) { - case 0: - AUTO_BRIGHTNESS = false; - Matrix->setBrightness(BRIGHTNESS, true); - break; - case 1: - AUTO_BRIGHTNESS = true; - break; + switch (index) + { + case 0: + AUTO_BRIGHTNESS = false; + Matrix->setBrightness(BRIGHTNESS, true); + break; + case 1: + AUTO_BRIGHTNESS = true; + break; + } + } + else if (sender == transEffect) + { + TRANS_EFFECT = index; } saveSettings(); + sender->setState(index); } void onRGBColorCommand(HALight::RGBColor color, HALight *sender) @@ -350,13 +357,17 @@ void onMqttConnected() myOwnID->setValue(MQTT_PREFIX.c_str()); version->setValue(VERSION); } - + MQTTManager.publish("stats/effects", DisplayManager.getEffectNamesInJson().c_str()); + connected = true; +} + +bool MQTTManager_::getStatus() +{ + return connected; } void connect() { - mqtt.setDiscoveryPrefix(HA_PREFIX.c_str()); - mqtt.setDataPrefix(MQTT_PREFIX.c_str()); mqtt.onMessage(onMqttMessage); mqtt.onConnected(onMqttConnected); @@ -377,7 +388,8 @@ void MQTTManager_::setup() if (HA_DISCOVERY) { DEBUG_PRINTLN(F("Starting Homeassistant discovery")); - + mqtt.setDiscoveryPrefix(HA_PREFIX.c_str()); + mqtt.setDataPrefix(MQTT_PREFIX.c_str()); uint8_t mac[6]; WiFi.macAddress(mac); char *macStr = new char[18 + 1]; @@ -445,6 +457,14 @@ void MQTTManager_::setup() BriMode->setName(HAbriName); BriMode->setState(AUTO_BRIGHTNESS, true); + sprintf(effectID, HAeffectID, macStr); + transEffect = new HASelect(effectID); + transEffect->setOptions(HAeffectOptions); + transEffect->onCommand(onSelectCommand); + transEffect->setIcon(HAeffectIcon); + transEffect->setName(HAeffectName); + transEffect->setState(TRANS_EFFECT, true); + sprintf(btnAID, HAbtnaID, macStr); dismiss = new HAButton(btnAID); dismiss->setIcon(HAbtnaIcon); @@ -606,7 +626,7 @@ void MQTTManager_::setCurrentApp(String appName) if (HA_DISCOVERY) curApp->setValue(appName.c_str()); - publish("currentApp", appName.c_str()); + publish("stats/currentApp", appName.c_str()); } void MQTTManager_::sendStats() @@ -630,7 +650,7 @@ void MQTTManager_::sendStats() snprintf(buffer, 5, "%.0f", CURRENT_LUX); illuminance->setValue(buffer); - + BriMode->setState(AUTO_BRIGHTNESS, false); Matrix->setBrightness(BRIGHTNESS); Matrix->setState(!MATRIX_OFF, false); diff --git a/src/MQTTManager.h b/src/MQTTManager.h index eb0d7c7a..0606bf2d 100644 --- a/src/MQTTManager.h +++ b/src/MQTTManager.h @@ -10,6 +10,7 @@ class MQTTManager_ public: static MQTTManager_ &getInstance(); + void setup(); void tick(); void rawPublish(const char *prefix, const char *topic, const char *payload); @@ -21,6 +22,7 @@ class MQTTManager_ void beginPublish(const char *topic, unsigned int plength, boolean retained); void writePayload(const char *data, const uint16_t length); void endPublish(); + bool getStatus(); }; extern MQTTManager_ &MQTTManager; diff --git a/src/MatrixDisplayUi.cpp b/src/MatrixDisplayUi.cpp index ecb05b7c..035ff26b 100644 --- a/src/MatrixDisplayUi.cpp +++ b/src/MatrixDisplayUi.cpp @@ -26,10 +26,11 @@ * SOFTWARE. * */ - +int pixelDelays[32][8]; #include "MatrixDisplayUi.h" #include "Fonts/AwtrixFont.h" #include "effects.h" +#include "Globals.h" GifPlayer gif1; GifPlayer gif2; @@ -47,6 +48,14 @@ void MatrixDisplayUi::init() this->matrix->setFont(&AwtrixFont); gif1.setMatrix(this->matrix); gif2.setMatrix(this->matrix); + + for (int i = 0; i < 32; i++) + { + for (int j = 0; j < 8; j++) + { + pixelDelays[i][j] = random(256); + } + } } void MatrixDisplayUi::setTargetFPS(uint8_t fps) @@ -237,8 +246,8 @@ void MatrixDisplayUi::tick() } this->matrix->clear(); - - if (BackgroundEffect>-1) + + if (BackgroundEffect > -1) { callEffect(this->matrix, 0, 0, BackgroundEffect); } @@ -301,38 +310,50 @@ void MatrixDisplayUi::drawApp() { case IN_TRANSITION: { - float progress = (float)this->state.ticksSinceLastStateSwitch / (float)this->ticksPerTransition; - int16_t x, y, x1, y1; - switch (this->appAnimationDirection) + if (TRANS_EFFECT == SLIDE) { - case SLIDE_UP: - x = 0; - y = -8 * progress; - x1 = 0; - y1 = y + 8; - break; - case SLIDE_DOWN: - x = 0; - y = 8 * progress; - x1 = 0; - y1 = y - 8; - break; + slideTransition(); + } + else if (TRANS_EFFECT == FADE) + { + fadeTransition(); + } + else if (TRANS_EFFECT == ZOOM) + { + zoomTransition(); + } + else if (TRANS_EFFECT == ROTATE) + { + rotateTransition(); + } + else if (TRANS_EFFECT == PIXELATE) + { + pixelateTransition(); + } + else if (TRANS_EFFECT == CURTAIN) + { + curtainTransition(); + } + else if (TRANS_EFFECT == RIPPLE) + { + rippleTransition(); + } + else if (TRANS_EFFECT == BLINK) + { + blinkTransition(); + } + else if (TRANS_EFFECT == RELOAD) + { + reloadTransition(); + } + else if (TRANS_EFFECT == CROSSFADE) + { + crossfadeTransition(); } - // Invert animation if direction is reversed. - int8_t dir = this->state.appTransitionDirection >= 0 ? 1 : -1; - x *= dir; - y *= dir; - x1 *= dir; - y1 *= dir; - bool FirstApp = progress < 0.2; - bool LastApp = progress > 0.8; - this->matrix->drawRect(x, y, x1, y1, matrix->Color(0, 0, 0)); - (this->AppFunctions[this->state.currentApp])(this->matrix, &this->state, x, y, FirstApp, LastApp, &gif1); - (this->AppFunctions[this->getnextAppNumber()])(this->matrix, &this->state, x1, y1, FirstApp, LastApp, &gif2); break; } case FIXED: - (this->AppFunctions[this->state.currentApp])(this->matrix, &this->state, 0, 0, false, false, &gif2); + (this->AppFunctions[this->state.currentApp])(this->matrix, &this->state, 0, 0, &gif2); break; } } @@ -432,3 +453,398 @@ void MatrixDisplayUi::setIndicator3Blink(int blink) { this->indicator3Blink = blink; } + +// ------------------ TRANSITIONS ------------------- +float distance(int x1, int y1, int x2, int y2) +{ + return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2)); +} + +void rotate(int &x, int &y, float angle) +{ + // Move the point to the origin + x -= 16; + y -= 4; + + // Perform the rotation + int newX = x * cos(angle) - y * sin(angle); + int newY = x * sin(angle) + y * cos(angle); + + // Move the point back to the actual origin + x = newX + 16; + y = newY + 4; +} + +void MatrixDisplayUi::fadeTransition() +{ + float progress = (float)this->state.ticksSinceLastStateSwitch / (float)this->ticksPerTransition; + int fadeValue; + if (progress < 0.5) + { + fadeValue = pow(progress * 2, 2) * 255; // Fading out the old app (progress from 0 to 0.5) + } + else + { + fadeValue = pow((1.0 - progress) * 2, 2) * 255; // Fading in the new app (progress from 0.5 to 1.0) + } + this->matrix->clear(); // Clear the matrix + // If fading out the old app + if (progress < 0.5) + { + (this->AppFunctions[this->state.currentApp])(this->matrix, &this->state, 0, 0, &gif1); + } + else + { + // Otherwise fading in the new app + (this->AppFunctions[this->getnextAppNumber()])(this->matrix, &this->state, 0, 0, &gif2); + } + + for (int i = 0; i < 32; i++) + { + for (int j = 0; j < 8; j++) + { + CRGB color = DisplayManager.getLeds()[this->matrix->XY(i, j)]; + color.fadeToBlackBy(fadeValue); + DisplayManager.getLeds()[this->matrix->XY(i, j)] = color; + } + } +} + +void MatrixDisplayUi::slideTransition() +{ + float progress = (float)this->state.ticksSinceLastStateSwitch / (float)this->ticksPerTransition; + int16_t x, y, x1, y1; + switch (this->appAnimationDirection) + { + case SLIDE_UP: + x = 0; + y = -8 * progress; + x1 = 0; + y1 = y + 8; + break; + case SLIDE_DOWN: + x = 0; + y = 8 * progress; + x1 = 0; + y1 = y - 8; + break; + } + // Invert animation if direction is reversed. + int8_t dir = this->state.appTransitionDirection >= 0 ? 1 : -1; + x *= dir; + y *= dir; + x1 *= dir; + y1 *= dir; + this->matrix->drawRect(x, y, x1, y1, matrix->Color(0, 0, 0)); + (this->AppFunctions[this->state.currentApp])(this->matrix, &this->state, x, y, &gif1); + (this->AppFunctions[this->getnextAppNumber()])(this->matrix, &this->state, x1, y1, &gif2); +} + +void MatrixDisplayUi::curtainTransition() +{ + float progress = (float)this->state.ticksSinceLastStateSwitch / (float)this->ticksPerTransition; + if (this->state.ticksSinceLastStateSwitch == 0) + { + // At the beginning of the transition, copy the current app image to the ledsCopy array + (this->AppFunctions[this->state.currentApp])(this->matrix, &this->state, 0, 0, &gif1); + + for (int i = 0; i < 32; i++) + { + for (int j = 0; j < 8; j++) + { + ledsCopy[i + j * 32] = DisplayManager.getLeds()[this->matrix->XY(i, j)]; + } + } + } + + // Draw the new app + (this->AppFunctions[this->getnextAppNumber()])(this->matrix, &this->state, 0, 0, &gif2); + + // Create the curtain effect + for (int i = 0; i < 32; i++) + { + for (int j = 0; j < 8; j++) + { + if (i < 16 - progress * 16 || i > 15 + progress * 16) + { + DisplayManager.getLeds()[this->matrix->XY(i, j)] = ledsCopy[i + j * 32]; + } + } + } +} + +void MatrixDisplayUi::zoomTransition() +{ + float progress = (float)this->state.ticksSinceLastStateSwitch / (float)this->ticksPerTransition; + float scale = 1.0; + // If zooming out the old app + if (progress < 0.5) + { + scale = 1 - progress * 2; // scale will change from 1.0 to 0.0 + (this->AppFunctions[this->state.currentApp])(this->matrix, &this->state, 0, 0, &gif1); + } + else + { + // Otherwise zooming in the new app + scale = (progress - 0.5) * 2; // scale will change from 0.0 to 1.0 + (this->AppFunctions[this->getnextAppNumber()])(this->matrix, &this->state, 0, 0, &gif2); + } + + // Copy the data to the temporary array ledsCopy + for (int i = 0; i < 32; i++) + { + for (int j = 0; j < 8; j++) + { + ledsCopy[i + j * 32] = DisplayManager.getLeds()[this->matrix->XY(i, j)]; + } + } + + // Scale the data and copy back to the matrix + for (int i = 0; i < 32; i++) + { + for (int j = 0; j < 8; j++) + { + int iScaled = 16 + (i - 16) * scale; + int jScaled = 4 + (j - 4) * scale; + + if (iScaled < 0) + iScaled = 0; + if (iScaled >= 32) + iScaled = 31; + if (jScaled < 0) + jScaled = 0; + if (jScaled >= 8) + jScaled = 7; + DisplayManager.getLeds()[this->matrix->XY(i, j)] = ledsCopy[iScaled + jScaled * 32]; + } + } +} + +void MatrixDisplayUi::rotateTransition() +{ + float progress = (float)this->state.ticksSinceLastStateSwitch / (float)this->ticksPerTransition; + float angle = progress * 2 * PI; // Rotate 360 degrees over the transition + + // Determine which app to draw + if (progress < 0.5) + { + // Rotate out the old app (progress from 0 to 0.5) + (this->AppFunctions[this->state.currentApp])(this->matrix, &this->state, 0, 0, &gif1); + } + else + { + // Rotate in the new app (progress from 0.5 to 1.0) + (this->AppFunctions[this->getnextAppNumber()])(this->matrix, &this->state, 0, 0, &gif2); + } + + // Copy the data to the temporary array ledsCopy + for (int i = 0; i < 32; i++) + { + for (int j = 0; j < 8; j++) + { + ledsCopy[i + j * 32] = DisplayManager.getLeds()[this->matrix->XY(i, j)]; + } + } + + // Rotate the data and copy back to the matrix + for (int i = 0; i < 32; i++) + { + for (int j = 0; j < 8; j++) + { + int iRotated = i; + int jRotated = j; + rotate(iRotated, jRotated, angle); + + if (iRotated < 0) + iRotated = 0; + if (iRotated >= 32) + iRotated = 31; + if (jRotated < 0) + jRotated = 0; + if (jRotated >= 8) + jRotated = 7; + + DisplayManager.getLeds()[this->matrix->XY(i, j)] = ledsCopy[iRotated + jRotated * 32]; + } + } +} + +void MatrixDisplayUi::pixelateTransition() +{ + float progress = (float)this->state.ticksSinceLastStateSwitch / (float)this->ticksPerTransition; + + // Draw the old app and copy to ledsCopy + (this->AppFunctions[this->state.currentApp])(this->matrix, &this->state, 0, 0, &gif1); + for (int i = 0; i < 32; i++) + { + for (int j = 0; j < 8; j++) + { + ledsCopy[i + j * 32] = DisplayManager.getLeds()[this->matrix->XY(i, j)]; + } + } + + // Clear the screen and draw the new app + this->matrix->clear(); + (this->AppFunctions[this->getnextAppNumber()])(this->matrix, &this->state, 0, 0, &gif2); + + // Apply the random pixel swap transition effect + for (int i = 0; i < 32; i++) + { + for (int j = 0; j < 8; j++) + { + // If the random number is greater than the progress, display the pixel from the old app + if (random(255) > progress * 255) + { + DisplayManager.getLeds()[this->matrix->XY(i, j)] = ledsCopy[i + j * 32]; + } + // Otherwise, keep the pixel from the new app + } + } +} + +void MatrixDisplayUi::rippleTransition() +{ + float progress = (float)this->state.ticksSinceLastStateSwitch / (float)this->ticksPerTransition; + + // Draw the old app and copy to ledsCopy + (this->AppFunctions[this->state.currentApp])(this->matrix, &this->state, 0, 0, &gif1); + for (int i = 0; i < 32; i++) + { + for (int j = 0; j < 8; j++) + { + ledsCopy[i + j * 32] = DisplayManager.getLeds()[this->matrix->XY(i, j)]; + } + } + + // Clear the screen and draw the new app + this->matrix->clear(); + (this->AppFunctions[this->getnextAppNumber()])(this->matrix, &this->state, 0, 0, &gif2); + + // Apply the checkerboard transition effect + for (int i = 0; i < 32; i++) + { + for (int j = 0; j < 8; j++) + { + // If the sum of i and j is an even number and the progress is less than 0.5, display the pixel from the old app + if ((i + j) % 2 == 0 && progress < 0.5) + { + DisplayManager.getLeds()[this->matrix->XY(i, j)] = ledsCopy[i + j * 32]; + } + // If the sum of i and j is an odd number and the progress is more than 0.5, display the pixel from the old app + else if ((i + j) % 2 != 0 && progress >= 0.5) + { + DisplayManager.getLeds()[this->matrix->XY(i, j)] = ledsCopy[i + j * 32]; + } + // Otherwise, keep the pixel from the new app + } + } +} + +void MatrixDisplayUi::blinkTransition() +{ + float progress = (float)this->state.ticksSinceLastStateSwitch / (float)this->ticksPerTransition; + + // Number of blinks during the transition + int blinks = 3; + + // Calculate the current blink state (on or off) by considering the number of blinks and the progress + bool blinkState = (int)(progress * blinks) % 2 == 0; + + // Depending on the blinkState and the progress, draw the old or the new app + if (blinkState) + { + // If blinkState is true, draw the old app if progress is less than 0.5, otherwise draw the new app + if (progress < 0.5) + { + (this->AppFunctions[this->state.currentApp])(this->matrix, &this->state, 0, 0, &gif1); + } + else + { + (this->AppFunctions[this->getnextAppNumber()])(this->matrix, &this->state, 0, 0, &gif2); + } + } + else + { + // If blinkState is false, clear the matrix (display off) + this->matrix->clear(); + } +} + +void MatrixDisplayUi::reloadTransition() +{ + float progress = (float)this->state.ticksSinceLastStateSwitch / (float)this->ticksPerTransition; + int visiblePixel; + + if (progress < 0.5) + { + + (this->AppFunctions[this->state.currentApp])(this->matrix, &this->state, 0, 0, &gif1); + + // Calculating pixel to be visible based on progress + visiblePixel = 32 * (1.0 - (progress * 2)); + if (visiblePixel < 0) + visiblePixel = 0; + + for (int i = visiblePixel; i < 32; i++) + { + for (int j = 0; j < 8; j++) + { + // Turning the pixels off to create a fly out effect + DisplayManager.getLeds()[this->matrix->XY(i, j)] = CRGB::Black; + } + } + } + else + { + // Draw the new app and let the pixels fly in + (this->AppFunctions[this->getnextAppNumber()])(this->matrix, &this->state, 0, 0, &gif2); + + // Calculating pixel to be visible based on progress + visiblePixel = 32 * ((progress - 0.5) * 2); + if (visiblePixel > 32) + visiblePixel = 32; + + for (int i = visiblePixel; i < 32; i++) + { + for (int j = 0; j < 8; j++) + { + // Turning the pixels off to create a fly in effect + DisplayManager.getLeds()[this->matrix->XY(i, j)] = CRGB::Black; + } + } + } +} + +void MatrixDisplayUi::crossfadeTransition() +{ + float progress = (float)this->state.ticksSinceLastStateSwitch / (float)this->ticksPerTransition; + + // Draw the old app + (this->AppFunctions[this->state.currentApp])(this->matrix, &this->state, 0, 0, &gif1); + + // Copy the old app data to ledsCopy array + for (int i = 0; i < 32; i++) + { + for (int j = 0; j < 8; j++) + { + ledsCopy[i + j * 32] = DisplayManager.getLeds()[this->matrix->XY(i, j)]; + } + } + + // Clear the matrix before drawing the new app + this->matrix->fillScreen(0); + + // Draw the new app + (this->AppFunctions[this->getnextAppNumber()])(this->matrix, &this->state, 0, 0, &gif2); + + // Linearly interpolate between old and new pixel colors based on the progress + for (int i = 0; i < 32; i++) + { + for (int j = 0; j < 8; j++) + { + CRGB pixelOld = ledsCopy[i + j * 32]; + CRGB pixelNew = DisplayManager.getLeds()[this->matrix->XY(i, j)]; + DisplayManager.getLeds()[this->matrix->XY(i, j)] = pixelOld.lerp8(pixelNew, progress * 255); + } + } +} diff --git a/src/MatrixDisplayUi.h b/src/MatrixDisplayUi.h index 6ede7b7d..df7b2646 100644 --- a/src/MatrixDisplayUi.h +++ b/src/MatrixDisplayUi.h @@ -43,6 +43,20 @@ enum AnimationDirection SLIDE_DOWN }; +enum TransitionType +{ + SLIDE, + FADE, + ZOOM, + ROTATE, + PIXELATE, + CURTAIN, + RIPPLE, + BLINK, + RELOAD, + CROSSFADE +}; + enum AppState { IN_TRANSITION, @@ -52,7 +66,7 @@ enum AppState // Structure of the UiState struct MatrixDisplayUiState { - + TransitionType transitionType = SLIDE; u_int64_t lastUpdate = 0; long ticksSinceLastStateSwitch = 0; @@ -68,7 +82,7 @@ struct MatrixDisplayUiState void *userData = NULL; }; -typedef void (*AppCallback)(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, bool firstFrame, bool lastFrame, GifPlayer *gifPlayer); +typedef void (*AppCallback)(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer); typedef void (*OverlayCallback)(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, GifPlayer *gifPlayer); typedef void (*BackgroundCallback)(FastLED_NeoMatrix *matrix); @@ -76,7 +90,7 @@ class MatrixDisplayUi { private: FastLED_NeoMatrix *matrix; - + CRGB ledsCopy[256]; // Values for the Apps AnimationDirection appAnimationDirection = SLIDE_DOWN; int8_t lastTransitionDirection = 1; @@ -108,6 +122,17 @@ class MatrixDisplayUi void tick(); void resetState(); bool isCurrentAppValid(); + void curtainTransition(); + void slideTransition(); + void fadeTransition(); + void zoomTransition(); + void rotateTransition(); + void pixelateTransition(); + void rippleTransition(); + void blinkTransition(); + void reloadTransition(); + void crossfadeTransition(); + public: MatrixDisplayUi(FastLED_NeoMatrix *matrix); diff --git a/src/MenuManager.cpp b/src/MenuManager.cpp index 0325d436..e3423ff5 100644 --- a/src/MenuManager.cpp +++ b/src/MenuManager.cpp @@ -224,7 +224,7 @@ void MenuManager_::rightButton() AUTO_TRANSITION = !AUTO_TRANSITION; break; case TspeedMenu: - TIME_PER_TRANSITION = min(1200, TIME_PER_TRANSITION + 100); + TIME_PER_TRANSITION = min(2000, TIME_PER_TRANSITION + 100); break; case AppTimeMenu: TIME_PER_APP = min(static_cast(30000), TIME_PER_APP + 1000); diff --git a/src/ServerManager.cpp b/src/ServerManager.cpp index d5bd044e..732940b4 100644 --- a/src/ServerManager.cpp +++ b/src/ServerManager.cpp @@ -69,6 +69,8 @@ void addHandler() { mws.addHandler("/api/power", HTTP_POST, []() { DisplayManager.powerStateParse(mws.webserver->arg("plain").c_str()); mws.webserver->send(200,F("text/plain"),F("OK")); }); + mws.addHandler("/api/effects", HTTP_GET, []() + { mws.webserver->send_P(200, "application/json", DisplayManager.getEffectNamesInJson().c_str()); }); mws.addHandler("/api/reboot", HTTP_POST, []() { mws.webserver->send(200,F("text/plain"),F("OK")); delay(200); ESP.restart(); }); mws.addHandler("/api/sound", HTTP_POST, []() diff --git a/src/effects.cpp b/src/effects.cpp index 5730b372..f97ebaca 100644 --- a/src/effects.cpp +++ b/src/effects.cpp @@ -2,31 +2,51 @@ const CRGBPalette16 palette = RainbowColors_p; -void Pacifica(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) +void Pacifica(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); - uint8_t speed = 2; static uint32_t sPacificaTime = 0; - sPacificaTime += speed; + sPacificaTime += settings->speed; for (uint16_t i = 0; i < cols; i++) { for (uint16_t j = 0; j < rows; j++) { - uint16_t ulx = (sPacificaTime / 8) + (i * 16); - uint16_t uly = (sPacificaTime / 4) + (j * 16); + uint16_t ulx, uly; + + // Richtung berücksichtigen + switch (settings->direction) + { + case UP: + ulx = (sPacificaTime / 8) - (i * 16); // Für UP und DOWN, verändert sich die x-Position + uly = (sPacificaTime / 4) + (j * 16); + break; + case DOWN: + ulx = (sPacificaTime / 8) + (i * 16); + uly = (sPacificaTime / 4) + (j * 16); + break; + case LEFT: + ulx = (sPacificaTime / 8) + (i * 16); // Für LEFT und RIGHT, verändert sich die y-Position + uly = (sPacificaTime / 4) - (j * 16); + break; + case RIGHT: + ulx = (sPacificaTime / 8) + (i * 16); + uly = (sPacificaTime / 4) + (j * 16); + break; + } + uint16_t v = 0; v += sin16(ulx * 6 + sPacificaTime / 2) / 8 + 127; v += sin16(uly * 9 + sPacificaTime / 2) / 8 + 127; v += sin16(ulx * 7 + uly * 2 - sPacificaTime) / 16; v = v / 3; - CRGB color = ColorFromPalette(OceanColors_p, v); + CRGB color = ColorFromPalette(settings->palette, v); matrix->drawPixel(x + i, y + j, color); } } } -void TheaterChase(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) +void TheaterChase(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); @@ -57,7 +77,7 @@ void TheaterChase(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) } } -void Plasma(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) +void Plasma(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); @@ -81,7 +101,7 @@ struct MatrixColumn CRGB color; // Farbe des Pixels }; -void Matrix(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) +void Matrix(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); @@ -142,7 +162,7 @@ void Matrix(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) } } -void SwirlIn(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) +void SwirlIn(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); @@ -174,7 +194,7 @@ void SwirlIn(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) } } -void SwirlOut(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) +void SwirlOut(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); @@ -206,7 +226,7 @@ void SwirlOut(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) } } -void ColorWaves(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) +void ColorWaves(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); @@ -243,7 +263,7 @@ struct Star Star stars[32][8]; // Create a buffer to store the state of the LEDs -void TwinklingStars(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) +void TwinklingStars(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); @@ -301,7 +321,7 @@ uint16_t eye[5][64] = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65535, 0, 0, 0, 0, 0, 0, 65535, 0, 65535, 65535, 65535, 65535, 65535, 65535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, }; -void LookingEyes(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) +void LookingEyes(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { if (blinkCountdown < sizeof(blinkIndex) / sizeof(blinkIndex[0]) - 1) { @@ -490,7 +510,7 @@ void updateDirection() } } -void SnakeGame(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) +void SnakeGame(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); @@ -615,7 +635,7 @@ Firework fireworks[MAX_FIREWORKS]; uint32_t lastFireworkTime = 0; uint32_t fireworkInterval = 350; // milliseconds between new fireworks -void Fireworks(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) +void Fireworks(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); @@ -687,7 +707,7 @@ Ripple ripple; CRGB RippleLeds[32][8]; // temporary LEDs state -void RippleEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) +void RippleEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); @@ -737,7 +757,7 @@ void RippleEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) // ######## PlasmaCloud ############ -void PlasmaCloudEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) +void PlasmaCloudEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); @@ -762,7 +782,7 @@ void PlasmaCloudEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) hueShift += 0.1; } -void CheckerboardEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) +void CheckerboardEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); @@ -793,51 +813,11 @@ void CheckerboardEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) colorIndex2 += 1; // Increment at a different rate for more variation } -// ######## Raindrops ############ - -#define MAX_DROPS 10 -#define DROP_SPEED 0.5 - -struct Drop -{ - float pos; // Current position - CRGB color; // Drop's color -}; - -Drop drops[MAX_DROPS]; - -void RaindropsEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) -{ - const uint16_t cols = matrix->width(); - const uint16_t rows = matrix->height(); - matrix->fillScreen(0); // Clear the matrix each frame - - // Initialize drops with random positions and colors - for (uint8_t i = 0; i < MAX_DROPS; i++) - { - if ((drops[i].color.r == 0 && drops[i].color.g == 0 && drops[i].color.b == 0) || drops[i].pos > rows) - { - // Check if the color is black - drops[i].pos = 0; - drops[i].color = CHSV(random(255), 255, 255); - } - } - - // Move each drop and draw it on the matrix - for (uint8_t i = 0; i < MAX_DROPS; i++) - { - drops[i].pos += DROP_SPEED; - if (drops[i].pos <= rows) - { - matrix->drawPixel(x + i, y + (int)drops[i].pos, drops[i].color); - } - } -} uint8_t beamAngle = 0; CRGB leds1[32][8]; -void RadarEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) +void RadarEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); @@ -860,7 +840,7 @@ void RadarEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) uint16_t j = centerY - r * (sin8(beamAngle) - 128) / 128.0; if (i < cols && j < rows) { - leds1[i][j] = CHSV(beamAngle, 255, 255); + leds1[i][j] = ColorFromPalette(settings->palette, beamAngle); } } @@ -874,7 +854,7 @@ void RadarEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) } // Increment the beam angle - beamAngle += 2; + beamAngle += settings->speed; } // ######## Balls ############ @@ -893,7 +873,7 @@ struct Ball int dx, dy; // Speed of the ball }; -void PingPongEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) +void PingPongEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); @@ -1009,7 +989,7 @@ bool bricksRemain() return false; } -void BrickBreakerEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) +void BrickBreakerEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); @@ -1041,7 +1021,7 @@ void BrickBreakerEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) ball.y += ball.dy; // Move the paddle - paddle.x = ball.x-1; + paddle.x = ball.x - 1; // If the paddle has reached the left or right edge, change its direction if (paddle.x <= 0 || paddle.x + PADDLE_WIDTH >= cols) @@ -1098,31 +1078,123 @@ void BrickBreakerEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y) } } +void MovingLine(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) +{ + const uint16_t cols = matrix->width(); + const uint16_t rows = matrix->height(); + + static int16_t linePosition = 0; // Start position of the line + static int8_t direction = 1; // Direction of the line movement + static uint8_t hue = 0; // Hue for the color of the line + + // Control the speed of the line + static uint32_t lastUpdate = 0; + if (millis() - lastUpdate > 50) + { // Update every 60 milliseconds + lastUpdate = millis(); + + // Move the line + linePosition += direction; + if (linePosition <= 0 || linePosition + 1 >= rows) + { + direction = -direction; + } + + // Change the color of the line + hue += 10; + } + + // Draw the line + for (int16_t i = 0; i < 1; i++) + { + for (uint16_t j = 0; j < cols; j++) + { + matrix->drawPixel(x + j, y + linePosition + i, CHSV(hue, 255, 255)); + } + } +} + +void RainbowFade(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) +{ + const uint16_t cols = matrix->width(); + const uint16_t rows = matrix->height(); + static uint8_t hue = 0; // Hue for the color of the rows + // Change the color of the rows based on speed + hue += settings->speed; + // Draw the rows with fading colors based on the palette + switch (settings->direction) + { + case UP: + for (int16_t i = rows - 1; i >= 0; i--) + { + for (uint16_t j = 0; j < cols; j++) + { + CRGB color = ColorFromPalette(settings->palette, hue + (i * 256 / rows)); + matrix->drawPixel(x + j, y + i, color); + } + } + break; + case DOWN: + for (uint16_t i = 0; i < rows; i++) + { + for (uint16_t j = 0; j < cols; j++) + { + CRGB color = ColorFromPalette(settings->palette, hue + (i * 256 / rows)); + matrix->drawPixel(x + j, y + i, color); + } + } + break; + case LEFT: + for (uint16_t i = 0; i < rows; i++) + { + for (int16_t j = cols - 1; j >= 0; j--) + { + CRGB color = ColorFromPalette(settings->palette, hue + (i * 256 / rows)); + matrix->drawPixel(x + j, y + i, color); + } + } + break; + case RIGHT: + for (uint16_t i = 0; i < rows; i++) + { + for (uint16_t j = 0; j < cols; j++) + { + CRGB color = ColorFromPalette(settings->palette, hue + (i * 256 / rows)); + matrix->drawPixel(x + j, y + i, color); + } + } + break; + } +} + Effect effects[] = { - {"BrickBreaker", BrickBreakerEffect}, - {"PingPong", PingPongEffect}, - {"Radar", RadarEffect}, - {"Raindrops", RaindropsEffect}, - {"Checkerboard", CheckerboardEffect}, - {"Fireworks", Fireworks}, - {"PlasmaCloud", PlasmaCloudEffect}, - {"Ripple", RippleEffect}, - {"Snake", SnakeGame}, - {"Pacifica", Pacifica}, - {"TheaterChase", TheaterChase}, - {"Plasma", Plasma}, - {"Matrix", Matrix}, - {"SwirlIn", SwirlIn}, - {"SwirlOut", SwirlOut}, - {"LookingEyes", LookingEyes}, - {"TwinklingStars", TwinklingStars}, - {"ColorWaves", ColorWaves}}; - -void callEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, int index) + {"RainbowFade", RainbowFade, EffectSettings(3, OceanColors_p, LEFT)}, + {"MovingLine", MovingLine, EffectSettings()}, + {"BrickBreaker", BrickBreakerEffect, EffectSettings()}, + {"PingPong", PingPongEffect, EffectSettings()}, + {"Radar", RadarEffect, EffectSettings()}, + {"Checkerboard", CheckerboardEffect, EffectSettings()}, + {"Fireworks", Fireworks, EffectSettings()}, + {"PlasmaCloud", PlasmaCloudEffect, EffectSettings()}, + {"Ripple", RippleEffect, EffectSettings()}, + {"Snake", SnakeGame, EffectSettings()}, + {"Pacifica", Pacifica, EffectSettings(3, OceanColors_p, LEFT)}, + {"TheaterChase", TheaterChase, EffectSettings()}, + {"Plasma", Plasma, EffectSettings()}, + {"Matrix", Matrix, EffectSettings()}, + {"SwirlIn", SwirlIn, EffectSettings()}, + {"SwirlOut", SwirlOut, EffectSettings()}, + {"LookingEyes", LookingEyes, EffectSettings()}, + {"TwinklingStars", TwinklingStars, EffectSettings()}, + {"ColorWaves", ColorWaves, EffectSettings()}}; + +// ######## Helper functions ############ + +void callEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, u_int8_t index) { if (index >= 0) { - effects[index].func(matrix, x, y); + effects[index].func(matrix, x, y, &effects[index].settings); } } @@ -1136,4 +1208,137 @@ int getEffectIndex(String name) } } return -1; -} \ No newline at end of file +} + +Direction getDirection(String directionName) +{ + if (directionName == "UP") + { + return UP; + } + else if (directionName == "DOWN") + { + return DOWN; + } + else if (directionName == "LEFT") + { + return LEFT; + } + else if (directionName == "RIGHT") + { + return RIGHT; + } + else + { + // default + return UP; + } +} + +// Loads a palette from the LittleFS filesystem +CRGBPalette16 loadPaletteFromLittleFS(String paletteName) +{ + Serial.println("Loading palette: " + paletteName); + File paletteFile = LittleFS.open("/palettes.json", "r"); + if (!paletteFile) + { + Serial.println("Failed to open palette file " + paletteName); + return RainbowColors_p; // default palette + } + String paletteContent = paletteFile.readString(); + paletteFile.close(); + + DynamicJsonDocument doc(4096); + auto error = deserializeJson(doc, paletteContent); + if (error) + { + Serial.println("Failed to parse JSON"); + return RainbowColors_p; + } + + JsonArray paletteArray = doc[paletteName]; + if (!paletteArray) + { + Serial.println("Failed to find palette: " + paletteName); + return RainbowColors_p; + } + + CRGBPalette16 palette; + for (int i = 0; i < 16; i++) + { + String colorString = paletteArray[i]; + if(colorString.startsWith("#")) + { + colorString = colorString.substring(1); + } + uint32_t colorValue = (uint32_t)strtol(colorString.c_str(), NULL, 16); + palette[i] = CRGB(colorValue); + } + + Serial.println("Palette loaded: " + paletteName); + return palette; +} + + + +// Returns a palette based on the given name +CRGBPalette16 getPalette(String palette) +{ + if (palette == "Cloud") + { + return CloudColors_p; + } + else if (palette == "Lava") + { + return LavaColors_p; + } + else if (palette == "Ocean") + { + return OceanColors_p; + } + else if (palette == "Forest") + { + return ForestColors_p; + } + else if (palette == "RainbowStripe") + { + return RainbowStripeColors_p; + } + else if (palette == "Party") + { + return PartyColors_p; + } + else if (palette == "Heat") + { + return HeatColors_p; + } + else + { + return loadPaletteFromLittleFS(palette); + } +} + +void updateEffectSettings(u_int8_t index, String json) +{ + if (index != -1) + { + StaticJsonDocument<200> doc; + deserializeJson(doc, json); + + if (doc.containsKey("speed")) + { + effects[index].settings.speed = doc["speed"]; + } + + if (doc.containsKey("palette")) + { + effects[index].settings.palette = getPalette(doc["palette"].as()); + } + + if (doc.containsKey("dir")) + { + effects[index].settings.direction = getDirection(doc["dir"].as()); + } + doc.clear(); + } +} diff --git a/src/effects.h b/src/effects.h index 6944907f..cf2623bb 100644 --- a/src/effects.h +++ b/src/effects.h @@ -6,14 +6,35 @@ #include #include "DisplayManager.h" -typedef void (*EffectFunc)(FastLED_NeoMatrix *, int16_t, int16_t); + +enum Direction +{ + UP, + DOWN, + LEFT, + RIGHT +}; + +struct EffectSettings +{ + uint8_t speed; + CRGBPalette16 palette; + Direction direction; + EffectSettings(uint8_t s = 2, CRGBPalette16 p = OceanColors_p, Direction d = LEFT) : speed(s), palette(p), direction(d) {} +}; + +typedef void (*EffectFunc)(FastLED_NeoMatrix *, int16_t, int16_t, EffectSettings *); struct Effect { String name; EffectFunc func; + EffectSettings settings; }; + +const int numOfEffects = 20; extern Effect effects[]; -void callEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, int index); +void callEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, u_int8_t index); int getEffectIndex(String name); +void updateEffectSettings(u_int8_t index, String json); #endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 48bcded3..847932b0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -74,6 +74,7 @@ void setup() if (ServerManager.isConnected) { MQTTManager.setup(); + DisplayManager.loadNativeApps(); DisplayManager.loadCustomApps(); UpdateManager.setup(); @@ -85,7 +86,12 @@ void setup() DisplayManager.HSVtext(x, 6, ("AWTRIX " + ServerManager.myIP.toString()).c_str(), true, 0); x -= 0.18; } - } + if (MQTT_HOST != "") + { + DisplayManager.HSVtext(4, 6, "MQTT...", true, 0); + MQTTManager.tick(); + } + } else { AP_MODE = true; @@ -97,6 +103,7 @@ void setup() void loop() { + ServerManager.tick(); DisplayManager.tick(); PeripheryManager.tick(); From 19b0378281aadea5401bfe102e135441e1c7b18e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BChl?= <31169771+Blueforcer@users.noreply.github.com> Date: Sat, 29 Jul 2023 19:29:01 +0200 Subject: [PATCH 02/11] fixes effects in notifications --- src/Apps.h | 99 ++++++++++++++++++++-------------------- src/DisplayManager.cpp | 13 ++++-- src/MatrixDisplayUi.h | 1 - src/PeripheryManager.cpp | 2 +- src/effects.cpp | 2 +- src/main.cpp | 6 +-- 6 files changed, 63 insertions(+), 60 deletions(-) diff --git a/src/Apps.h b/src/Apps.h index bb25c58b..b1e8f6aa 100644 --- a/src/Apps.h +++ b/src/Apps.h @@ -37,9 +37,8 @@ struct CustomApp File icon; bool isGif; bool rainbow; - int effect; + int effect = -1; long duration = 0; - byte textCase = 0; int16_t repeat = 0; int16_t currentRepeat = 0; @@ -96,7 +95,7 @@ struct Notification int textOffset; int progress = -1; uint16_t pColor; - int effect; + int effect = -1; uint16_t background = 0; uint16_t pbColor; bool wakeup; @@ -140,7 +139,7 @@ int findAppIndexByName(const String &name) return -1; } -void TimeApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void TimeApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { if (notifyFlag) return; @@ -196,7 +195,7 @@ void TimeApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, } } -void DateApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void DateApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { if (notifyFlag) return; @@ -231,7 +230,7 @@ void DateApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, } } -void TempApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void TempApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { if (notifyFlag) return; @@ -264,7 +263,7 @@ void TempApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, } } -void HumApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void HumApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { if (notifyFlag) return; @@ -285,7 +284,7 @@ void HumApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, i } #ifdef ULANZI -void BatApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void BatApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { if (notifyFlag) return; @@ -365,7 +364,7 @@ void TimerApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, GifPlayer } } -void ShowCustomApp(String name, FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void ShowCustomApp(String name, FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { // Abort if notifyFlag is set if (notifyFlag) @@ -663,7 +662,7 @@ void NotifyApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, GifPlayer // Clear the matrix display matrix->fillRect(0, 0, 32, 8, notifications[0].background); - if (!notifications[0].effect > -1) + if (notifications[0].effect > -1) { callEffect(matrix, 0, 0, notifications[0].effect); } @@ -915,124 +914,124 @@ void NotifyApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, GifPlayer // Unattractive to have a function for every customapp wich does the same, but currently still no other option found TODO -void CApp1(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp1(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp1); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp2(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp2(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp2); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp3(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp3(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp3); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp4(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp4(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp4); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp5(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp5(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp5); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp6(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp6(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp6); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp7(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp7(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp7); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp8(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp8(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp8); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp9(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp9(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp9); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp10(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp10(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp10); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp11(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp11(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp11); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp12(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp12(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp12); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp13(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp13(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp13); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp14(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp14(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp14); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp15(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp15(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp15); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp16(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp16(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp16); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp17(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp17(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp17); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp18(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp18(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp18); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp19(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp19(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp19); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } -void CApp20(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) +void CApp20(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { String name = getAppNameByFunction(CApp20); - ShowCustomApp(name, matrix, state, x, y, gifPlayer); + ShowCustomApp(name, matrix, state, x, y, gifPlayer); } OverlayCallback overlays[] = {MenuApp, NotifyApp, AlarmApp, TimerApp}; diff --git a/src/DisplayManager.cpp b/src/DisplayManager.cpp index 7a92030b..e0046f93 100644 --- a/src/DisplayManager.cpp +++ b/src/DisplayManager.cpp @@ -699,13 +699,20 @@ bool DisplayManager_::generateNotification(uint8_t source, const char *json) { newNotification.drawInstructions = ""; } + + if (doc.containsKey("effect")) + { + newNotification.effect = getEffectIndex(doc["effect"].as()); + if (doc.containsKey("effectSettings")) + { + updateEffectSettings(newNotification.effect, doc["effectSettings"].as()); + } + } + newNotification.loopSound = doc.containsKey("loopSound") ? doc["loopSound"].as() : false; - newNotification.effect = doc.containsKey("effect") ? getEffectIndex(doc["effect"].as()) : -1; - updateEffectSettings(newNotification.effect, doc["effectSettings"].as()); newNotification.sound = doc.containsKey("sound") ? doc["sound"].as() : ""; newNotification.rtttl = doc.containsKey("rtttl") ? doc["rtttl"].as() : ""; newNotification.duration = doc.containsKey("duration") ? doc["duration"].as() * 1000 : TIME_PER_APP; - newNotification.rainbow = doc.containsKey("rainbow") ? doc["rainbow"].as() : false; newNotification.hold = doc.containsKey("hold") ? doc["hold"].as() : false; newNotification.scrollSpeed = doc.containsKey("scrollSpeed") ? doc["scrollSpeed"].as() : -1; diff --git a/src/MatrixDisplayUi.h b/src/MatrixDisplayUi.h index df7b2646..640bdb9a 100644 --- a/src/MatrixDisplayUi.h +++ b/src/MatrixDisplayUi.h @@ -66,7 +66,6 @@ enum AppState // Structure of the UiState struct MatrixDisplayUiState { - TransitionType transitionType = SLIDE; u_int64_t lastUpdate = 0; long ticksSinceLastStateSwitch = 0; diff --git a/src/PeripheryManager.cpp b/src/PeripheryManager.cpp index 0f95ca09..20fe1d1e 100644 --- a/src/PeripheryManager.cpp +++ b/src/PeripheryManager.cpp @@ -404,7 +404,7 @@ void PeripheryManager_::tick() CURRENT_HUM += HUM_OFFSET; } - checkAlarms(); + //checkAlarms(); MQTTManager.sendStats(); } diff --git a/src/effects.cpp b/src/effects.cpp index f97ebaca..4d45bada 100644 --- a/src/effects.cpp +++ b/src/effects.cpp @@ -1192,7 +1192,7 @@ Effect effects[] = { void callEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, u_int8_t index) { - if (index >= 0) + if (index > -1) { effects[index].func(matrix, x, y, &effects[index].settings); } diff --git a/src/main.cpp b/src/main.cpp index 847932b0..05ed4d46 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -73,8 +73,6 @@ void setup() // PeripheryManager.playBootSound(); if (ServerManager.isConnected) { - MQTTManager.setup(); - DisplayManager.loadNativeApps(); DisplayManager.loadCustomApps(); UpdateManager.setup(); @@ -89,9 +87,10 @@ void setup() if (MQTT_HOST != "") { DisplayManager.HSVtext(4, 6, "MQTT...", true, 0); + MQTTManager.setup(); MQTTManager.tick(); } - } + } else { AP_MODE = true; @@ -103,7 +102,6 @@ void setup() void loop() { - ServerManager.tick(); DisplayManager.tick(); PeripheryManager.tick(); From f21248bd3cdeaf60c704ff7d099e25462b49c7ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BChl?= <31169771+Blueforcer@users.noreply.github.com> Date: Sun, 30 Jul 2023 02:22:46 +0200 Subject: [PATCH 03/11] add custom palettes --- docs/effects.md | 30 +++++- src/DisplayManager.cpp | 1 + src/Globals.cpp | 2 + src/PeripheryManager.cpp | 71 +++++++------- src/effects.cpp | 205 ++++++++++++++++----------------------- src/effects.h | 4 +- 6 files changed, 150 insertions(+), 163 deletions(-) diff --git a/docs/effects.md b/docs/effects.md index ceb4b525..d35421fb 100644 --- a/docs/effects.md +++ b/docs/effects.md @@ -69,13 +69,39 @@ Just call the name for your favorite effect. +# Effect settings + +| Effect Name | Speed | Palette | Direction | +|-------------|-------|---------|-----------| +| RainbowFade | 1 | Rainbow | LEFT | +| MovingLine | 1 | Rainbow | LEFT | +| BrickBreaker | - | - | - | +| PingPong | 8 | Rainbow | - | +| Radar | 1 | Rainbow | - | +| Checkerboard | 1 | Rainbow | - | +| Fireworks | 0.8 | Rainbow | - | +| PlasmaCloud | 3 | Rainbow | - | +| Ripple | - | - | - | +| Snake | - | - | - | +| Pacifica | 3 | Ocean | LEFT | +| TheaterChase | - | - | - | +| Plasma | 2 | Rainbow | - | +| Matrix | - | - | - | +| SwirlIn | 4 | Rainbow | - | +| SwirlOut | 4 | Rainbow | - | +| LookingEyes | - | - | - | +| TwinklingStars | 4 | Ocean | - | +| ColorWaves | - | - | - | + + + # Custom Color Palette Creation Guide This guide will show you how to create a custom color palette for use with AWTRIX effects. -A color palette in AWTRIX is an array of 16 colors. Each color is represented as a `CRGB` object, which contains red, green, and blue components. +A color palette in AWTRIX is an array of 16 colors. Each color is represented as a `RGB` object, which contains red, green, and blue components. -AWTRIX uses these palettes to create smooth transitions between colors in effects. The 16 colors in the palette are not the only colors that will be displayed. Instead, AWTRIX interpolates between these colors to create a wide spectrum of in-between hues. This creates smooth, visually pleasing color transitions in your LED effects. +AWTRIX uses these palettes to create transitions between colors in effects. The 16 colors in the palette are not the only colors that will be displayed. Instead, AWTRIX interpolates between these colors to create a wide spectrum of in-between hues. This creates smooth, visually pleasing color transitions in your effects. ## Creating a Custom Color Palette diff --git a/src/DisplayManager.cpp b/src/DisplayManager.cpp index e0046f93..b3e757df 100644 --- a/src/DisplayManager.cpp +++ b/src/DisplayManager.cpp @@ -613,6 +613,7 @@ bool DisplayManager_::generateCustomPage(const String &name, const char *json, b String iconFileName = String(doc["icon"].as()); if (customApp.icon && String(customApp.icon.name()).startsWith(iconFileName)) { + } else { diff --git a/src/Globals.cpp b/src/Globals.cpp index 0aef2e39..9be49da5 100644 --- a/src/Globals.cpp +++ b/src/Globals.cpp @@ -26,6 +26,8 @@ void startLittleFS() LittleFS.mkdir("/MELODIES"); #endif LittleFS.mkdir("/ICONS"); + LittleFS.mkdir("/PALETTES"); + LittleFS.mkdir("/CUSTOMAPPS"); DEBUG_PRINTLN(F("Filesystem started")); } else diff --git a/src/PeripheryManager.cpp b/src/PeripheryManager.cpp index 20fe1d1e..101f4f8a 100644 --- a/src/PeripheryManager.cpp +++ b/src/PeripheryManager.cpp @@ -155,9 +155,9 @@ void select_button_pressed_long() } else if (!BLOCK_NAVIGATION) { - #ifndef ULANZI +#ifndef ULANZI PeripheryManager.playFromFile(DFMINI_MP3_CLICK); - #endif +#endif if (!ALARM_ACTIVE) MenuManager.selectButtonLong(); @@ -251,13 +251,13 @@ bool PeripheryManager_::parseSound(const char *json) bool PeripheryManager_::playRTTTLString(String rtttl) { - #ifdef ULANZI - Melody melody = MelodyFactory.loadRtttlString(rtttl.c_str()); - player.playAsync(melody); - return melody.isValid(); - #else - return false; - #endif +#ifdef ULANZI + Melody melody = MelodyFactory.loadRtttlString(rtttl.c_str()); + player.playAsync(melody); + return melody.isValid(); +#else + return false; +#endif } bool PeripheryManager_::playFromFile(String file) @@ -332,21 +332,21 @@ void PeripheryManager_::setup() #ifdef ULANZI sht31.begin(0x44); #else - if (bme280.begin(BME280_ADDRESS) || bme280.begin(BME280_ADDRESS_ALTERNATE)) - { + if (bme280.begin(BME280_ADDRESS) || bme280.begin(BME280_ADDRESS_ALTERNATE)) + { DEBUG_PRINTLN(F("BME280 sensor detected")); - TEMP_SENSOR_TYPE = TEMP_SENSOR_TYPE_BME280; - } + TEMP_SENSOR_TYPE = TEMP_SENSOR_TYPE_BME280; + } else if (bmp280.begin(BMP280_ADDRESS) || bmp280.begin(BMP280_ADDRESS_ALT)) - { + { DEBUG_PRINTLN(F("BMP280 sensor detected")); - TEMP_SENSOR_TYPE = TEMP_SENSOR_TYPE_BMP280; - } + TEMP_SENSOR_TYPE = TEMP_SENSOR_TYPE_BMP280; + } else if (htu21df.begin()) - { + { DEBUG_PRINTLN(F("HTU21DF sensor detected")); - TEMP_SENSOR_TYPE = TEMP_SENSOR_TYPE_HTU21DF; - } + TEMP_SENSOR_TYPE = TEMP_SENSOR_TYPE_HTU21DF; + } dfmp3.begin(); #endif photocell.setPhotocellPositionOnGround(false); @@ -380,31 +380,31 @@ void PeripheryManager_::tick() #ifdef ULANZI sht31.readBoth(&CURRENT_TEMP, &CURRENT_HUM); #else - switch (TEMP_SENSOR_TYPE) - { - case TEMP_SENSOR_TYPE_BME280: + switch (TEMP_SENSOR_TYPE) + { + case TEMP_SENSOR_TYPE_BME280: CURRENT_TEMP = bme280.readTemperature(); - CURRENT_HUM = bme280.readHumidity(); - break; - case TEMP_SENSOR_TYPE_BMP280: + CURRENT_HUM = bme280.readHumidity(); + break; + case TEMP_SENSOR_TYPE_BMP280: CURRENT_TEMP = bmp280.readTemperature(); - CURRENT_HUM = 0; - break; - case TEMP_SENSOR_TYPE_HTU21DF: + CURRENT_HUM = 0; + break; + case TEMP_SENSOR_TYPE_HTU21DF: CURRENT_TEMP = htu21df.readTemperature(); CURRENT_HUM = htu21df.readHumidity(); - break; - default: - CURRENT_TEMP = 0; - CURRENT_HUM = 0; - break; - } + break; + default: + CURRENT_TEMP = 0; + CURRENT_HUM = 0; + break; + } #endif CURRENT_TEMP += TEMP_OFFSET; CURRENT_HUM += HUM_OFFSET; } - //checkAlarms(); + // checkAlarms(); MQTTManager.sendStats(); } @@ -435,6 +435,7 @@ void PeripheryManager_::tick() const int MIN_ALARM_INTERVAL = 60; // 1 Minute time_t lastAlarmTime = 0; +// deprecated void PeripheryManager_::checkAlarms() { if (LittleFS.exists("/alarms.json")) diff --git a/src/effects.cpp b/src/effects.cpp index 4d45bada..01975c0a 100644 --- a/src/effects.cpp +++ b/src/effects.cpp @@ -1,6 +1,7 @@ #include "effects.h" const CRGBPalette16 palette = RainbowColors_p; +CRGB tempLeds[32][8]; void Pacifica(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { @@ -66,7 +67,7 @@ void TheaterChase(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSetting if ((i + j) % 3 == 0) { uint8_t colorIndex = (i * 256 / cols) & 255; - CRGB color = ColorFromPalette(RainbowColors_p, colorIndex); + CRGB color = ColorFromPalette(settings->palette, colorIndex); matrix->drawPixel(x + i, y + k, color); } else @@ -81,18 +82,18 @@ void Plasma(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *set { const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); - static uint32_t time = 0; + static double time = 0; for (uint16_t i = 0; i < cols; i++) { for (uint16_t j = 0; j < rows; j++) { uint8_t value = sin8(i * 10 + time) + sin8(j * 10 + time / 2) + sin8((i + j) * 10 + time / 3) / 3; - CRGB color = ColorFromPalette(RainbowColors_p, value); + CRGB color = ColorFromPalette(settings->palette, value); matrix->drawPixel(x + i, y + j, color); } } - time += 1; + time += settings->speed; } struct MatrixColumn @@ -169,7 +170,7 @@ void SwirlIn(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *se static uint32_t lastUpdate = 0; static uint16_t angle = 0; - uint8_t speed = 40; + uint8_t speed = settings->speed * 10; if (millis() - lastUpdate > speed) { @@ -177,18 +178,15 @@ void SwirlIn(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *se angle += 4; } - float centerX = 16.0; - float centerY = 4.0; - for (uint16_t i = 0; i < cols; i++) { for (uint16_t j = 0; j < rows; j++) { - float xDiff = centerX - i; - float yDiff = centerY - j; + float xDiff = 16 - i; + float yDiff = 4 - j; uint16_t dist = sqrt(xDiff * xDiff + yDiff * yDiff); - uint8_t hue = map(dist, 0, sqrt(centerX * centerX + centerY * centerY), 0, 255) + angle; - CRGB color = ColorFromPalette(palette, hue); + uint8_t hue = map(dist, 0, sqrt(16 * 16 + 4 * 4), 0, 255) + angle; + CRGB color = ColorFromPalette(settings->palette, hue); matrix->drawPixel(x + i, y + j, color); } } @@ -201,7 +199,7 @@ void SwirlOut(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *s static uint32_t lastUpdate = 0; static uint16_t angle = 0; - uint8_t speed = 40; + uint8_t speed = settings->speed * 10; if (millis() - lastUpdate > speed) { @@ -220,7 +218,7 @@ void SwirlOut(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *s float yDiff = centerY - j; uint16_t dist = sqrt(xDiff * xDiff + yDiff * yDiff); uint8_t hue = 255 - map(dist, 0, sqrt(centerX * centerX + centerY * centerY), 0, 255) + angle; - CRGB color = ColorFromPalette(palette, hue); + CRGB color = ColorFromPalette(settings->palette, hue); matrix->drawPixel(x + i, y + j, color); } } @@ -234,7 +232,7 @@ void ColorWaves(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings uint8_t speed = 4; - if (millis() - lastUpdate > (uint32_t)1000 / speed) + if (millis() - lastUpdate > (uint32_t)1000 / settings->speed) { lastUpdate = millis(); } @@ -268,7 +266,6 @@ void TwinklingStars(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSetti const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); static uint32_t lastUpdate = 0; - uint8_t speed = 4; // Fade all LEDs each frame for (uint16_t i = 0; i < cols; i++) @@ -283,7 +280,7 @@ void TwinklingStars(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSetti } // Randomly twinkle new stars each frame - if (millis() - lastUpdate > (uint32_t)1000 / speed) + if (millis() - lastUpdate > (uint32_t)1000 / settings->speed) { lastUpdate = millis(); uint8_t numStars = random(1, 5); // Create between 1-5 new stars per frame @@ -292,7 +289,7 @@ void TwinklingStars(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSetti uint16_t starX = random(cols); uint16_t starY = random(rows); // Star color - varying the saturation and value for shades of blue and white - stars[starX][starY].color = CHSV(160, random8(100, 255), MAX_BRIGHTNESS); + stars[starX][starY].color = ColorFromPalette(settings->palette, random8()); stars[starX][starY].brightness = 1.0; matrix->drawPixel(x + starX, y + starY, stars[starX][starY].color); } @@ -625,7 +622,7 @@ struct Firework float x, y; uint8_t life; bool exploded; - CHSV color; + CRGB color; uint16_t peak; float speed; // Add a speed variable to each firework }; @@ -641,7 +638,7 @@ void Fireworks(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings * const uint16_t rows = matrix->height(); // Spawn new firework if enough time has passed - if (millis() - lastFireworkTime >= fireworkInterval && random(100) < 50) + if (millis() - lastFireworkTime >= 1000 / fireworkInterval && random(100) < 50) { // 50% chance to spawn firework for (uint8_t i = 0; i < MAX_FIREWORKS; i++) { @@ -651,9 +648,9 @@ void Fireworks(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings * fireworks[i].y = rows - 1; fireworks[i].life = 255; fireworks[i].exploded = false; - fireworks[i].color = CHSV(0, 0, 255); // The unexploded firework is white - fireworks[i].peak = random(1, 5); // Set a random peak height for the firework - fireworks[i].speed = 0.3; // Set a speed for the firework + fireworks[i].color = CRGB::White; // The unexploded firework is white + fireworks[i].peak = random(1, 5); // Set a random peak height for the firework + fireworks[i].speed = settings->speed * 0.3; // Set a speed for the firework lastFireworkTime = millis(); break; } @@ -665,7 +662,7 @@ void Fireworks(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings * { if (fireworks[i].life > 0) { - fireworks[i].life -= 5; // decrease life by 5 each frame + fireworks[i].life -= 5 * settings->speed; // decrease life by 5 each frame if (fireworks[i].y > fireworks[i].peak && !fireworks[i].exploded) { fireworks[i].y -= fireworks[i].speed; // Move the firework up by its speed @@ -673,7 +670,7 @@ void Fireworks(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings * else { fireworks[i].exploded = true; - fireworks[i].color = CHSV(random(255), 255, fireworks[i].life * 4); // The exploded firework has a random color + fireworks[i].color = ColorFromPalette(settings->palette, random8()); // The exploded firework has a random color } matrix->drawPixel(x + fireworks[i].x, y + fireworks[i].y, fireworks[i].color); // Draw a few pixels around the firework to simulate explosion @@ -700,40 +697,35 @@ struct Ripple { uint16_t x, y; float life; - CHSV color; + CRGB color; }; Ripple ripple; -CRGB RippleLeds[32][8]; // temporary LEDs state - void RippleEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { - const uint16_t cols = matrix->width(); - const uint16_t rows = matrix->height(); - // If ripple has finished, spawn a new one at a random location if (ripple.life > RIPPLE_SIZE) { - ripple.x = random(cols); - ripple.y = random(rows); + ripple.x = random(32); + ripple.y = random(8); ripple.life = 0; - ripple.color = CHSV(random(255), 255, 255); // random color with full saturation and value + ripple.color = ColorFromPalette(settings->palette, random(255), 255, NOBLEND); // random color with full saturation and value } // Apply pseudo-blur - for (uint16_t i = 0; i < cols; i++) + for (uint16_t i = 0; i < 32; i++) { - for (uint16_t j = 0; j < rows; j++) + for (uint16_t j = 0; j < 8; j++) { - RippleLeds[i][j].fadeToBlackBy(45); + tempLeds[i][j].fadeToBlackBy(45); } } // Draw the ripple - for (uint16_t i = 0; i < cols; i++) + for (uint16_t i = 0; i < 32; i++) { - for (uint16_t j = 0; j < rows; j++) + for (uint16_t j = 0; j < 8; j++) { // Calculate distance from the ripple center uint16_t dx = abs(i - ripple.x); @@ -743,59 +735,54 @@ void RippleEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSetting // If this pixel is on the ripple ring, color it if (dist >= ripple.life && dist < ripple.life + 2) { - RippleLeds[i][j] = ripple.color; + tempLeds[i][j] = ripple.color; } // Apply the temporary LEDs to the actual matrix - matrix->drawPixel(x + i, y + j, RippleLeds[i][j]); + matrix->drawPixel(x + i, y + j, tempLeds[i][j]); } } // Increase the ripple size - ripple.life += 0.5; + ripple.life += settings->speed * 0.5; } // ######## PlasmaCloud ############ void PlasmaCloudEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { - const uint16_t cols = matrix->width(); - const uint16_t rows = matrix->height(); static float plasmaTime = 0; static float hueShift = 0; // For each pixel, calculate a noise value based on its position and the current time - for (uint16_t i = 0; i < cols; i++) + for (uint16_t i = 0; i < 32; i++) { - for (uint16_t j = 0; j < rows; j++) + for (uint16_t j = 0; j < 8; j++) { float noise = inoise8(i * 16, j * 16, plasmaTime); uint8_t hue = noise * 255 / 1024 + hueShift; // Map noise value to hue (0-255) and add hueShift - CRGB color = CHSV(hue, 255, 255); + CRGB color = ColorFromPalette(settings->palette, hue); matrix->drawPixel(x + i, y + j, color); } } // Increase time to animate the plasma clouds - ++plasmaTime; + plasmaTime += settings->speed; // Increase hueShift to gradually change color over time - hueShift += 0.1; + hueShift += settings->speed / 5; } void CheckerboardEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { - const uint16_t cols = matrix->width(); - const uint16_t rows = matrix->height(); - static float colorIndex1 = 0; static float colorIndex2 = 0; - CRGB color1 = ColorFromPalette(palette, colorIndex1); - CRGB color2 = ColorFromPalette(palette, colorIndex2); + CRGB color1 = ColorFromPalette(settings->palette, colorIndex1); + CRGB color2 = ColorFromPalette(settings->palette, colorIndex2); // For each pixel, check if its x and y coordinates are both even or both odd - for (uint16_t i = 0; i < cols; i++) + for (uint16_t i = 0; i < 32; i++) { - for (uint16_t j = 0; j < rows; j++) + for (uint16_t j = 0; j < 8; j++) { if ((i % 2 == 0 && j % 2 == 0) || (i % 2 != 0 && j % 2 != 0)) { @@ -809,47 +796,39 @@ void CheckerboardEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectS } // Increase colorIndex to change colors over time - colorIndex1 += 0.6; - colorIndex2 += 1; // Increment at a different rate for more variation + colorIndex1 += settings->speed * 0.6; + colorIndex2 += settings->speed; } - -uint8_t beamAngle = 0; -CRGB leds1[32][8]; - void RadarEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { - const uint16_t cols = matrix->width(); - const uint16_t rows = matrix->height(); - const float centerX = (cols - 1) / 2.0; - const float centerY = (rows - 1) / 2.0; - + static float beamAngle = 0; // Fade the previous state of the leds - for (uint16_t i = 0; i < cols; i++) + for (uint16_t i = 0; i < 32; i++) { - for (uint16_t j = 0; j < rows; j++) + for (uint16_t j = 0; j < 8; j++) { - leds1[i][j].fadeToBlackBy(20); + tempLeds[i][j].fadeToBlackBy(20); } } // Draw the beam - for (uint8_t r = 0; r <= max(cols, rows); r++) + for (uint8_t r = 0; r <= max(32, 8); r++) { - uint16_t i = centerX + r * (cos8(beamAngle) - 128) / 128.0; - uint16_t j = centerY - r * (sin8(beamAngle) - 128) / 128.0; - if (i < cols && j < rows) + uint16_t i = 16 + r * (cos8(beamAngle) - 128) / 128.0; + uint16_t j = 4 - r * (sin8(beamAngle) - 128) / 128.0; + if (i < 32 && j < 8) { - leds1[i][j] = ColorFromPalette(settings->palette, beamAngle); + tempLeds[i][j] = ColorFromPalette(settings->palette, beamAngle); } } // Copy the temporary leds array to the actual matrix - for (uint16_t i = 0; i < cols; i++) + for (uint16_t i = 0; i < 32; i++) { - for (uint16_t j = 0; j < rows; j++) + for (uint16_t j = 0; j < 8; j++) { - matrix->drawPixel(x + i, y + j, leds1[i][j]); + matrix->drawPixel(x + i, y + j, tempLeds[i][j]); } } @@ -882,10 +861,9 @@ void PingPongEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSetti static Paddle paddle2 = {rows / 2, -1}; // Paddle on the right side static Ball ball = {cols / 2, rows / 2, 1, 1}; // Ball in the middle of the matrix static uint32_t lastUpdate = 0; - uint8_t speed = 80; // Geschwindigkeit des Spiels // Move the paddles - if (millis() - lastUpdate > speed) + if (millis() - lastUpdate > settings->speed * 100) { lastUpdate = millis(); paddle1.y += paddle1.dy; @@ -1085,12 +1063,11 @@ void MovingLine(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings static int16_t linePosition = 0; // Start position of the line static int8_t direction = 1; // Direction of the line movement - static uint8_t hue = 0; // Hue for the color of the line // Control the speed of the line static uint32_t lastUpdate = 0; - if (millis() - lastUpdate > 50) - { // Update every 60 milliseconds + if (millis() - lastUpdate > settings->speed * 10) + { lastUpdate = millis(); // Move the line @@ -1099,9 +1076,7 @@ void MovingLine(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings { direction = -direction; } - - // Change the color of the line - hue += 10; + colorIndex += 1; } // Draw the line @@ -1109,7 +1084,7 @@ void MovingLine(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings { for (uint16_t j = 0; j < cols; j++) { - matrix->drawPixel(x + j, y + linePosition + i, CHSV(hue, 255, 255)); + matrix->drawPixel(x + j, y + linePosition + i, ColorFromPalette(settings->palette, colorIndex)); } } } @@ -1168,24 +1143,24 @@ void RainbowFade(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings } Effect effects[] = { - {"RainbowFade", RainbowFade, EffectSettings(3, OceanColors_p, LEFT)}, - {"MovingLine", MovingLine, EffectSettings()}, + {"RainbowFade", RainbowFade, EffectSettings(1, RainbowColors_p, LEFT)}, + {"MovingLine", MovingLine, EffectSettings(1, RainbowColors_p, LEFT)}, {"BrickBreaker", BrickBreakerEffect, EffectSettings()}, - {"PingPong", PingPongEffect, EffectSettings()}, - {"Radar", RadarEffect, EffectSettings()}, - {"Checkerboard", CheckerboardEffect, EffectSettings()}, - {"Fireworks", Fireworks, EffectSettings()}, - {"PlasmaCloud", PlasmaCloudEffect, EffectSettings()}, + {"PingPong", PingPongEffect, EffectSettings(8, RainbowColors_p)}, + {"Radar", RadarEffect, EffectSettings(1, RainbowColors_p)}, + {"Checkerboard", CheckerboardEffect, EffectSettings(1, RainbowColors_p)}, + {"Fireworks", Fireworks, EffectSettings(0.8, RainbowColors_p)}, + {"PlasmaCloud", PlasmaCloudEffect, EffectSettings(3, RainbowColors_p)}, {"Ripple", RippleEffect, EffectSettings()}, {"Snake", SnakeGame, EffectSettings()}, {"Pacifica", Pacifica, EffectSettings(3, OceanColors_p, LEFT)}, {"TheaterChase", TheaterChase, EffectSettings()}, - {"Plasma", Plasma, EffectSettings()}, + {"Plasma", Plasma, EffectSettings(2, RainbowColors_p)}, {"Matrix", Matrix, EffectSettings()}, - {"SwirlIn", SwirlIn, EffectSettings()}, - {"SwirlOut", SwirlOut, EffectSettings()}, + {"SwirlIn", SwirlIn, EffectSettings(4, RainbowColors_p)}, + {"SwirlOut", SwirlOut, EffectSettings(4, RainbowColors_p)}, {"LookingEyes", LookingEyes, EffectSettings()}, - {"TwinklingStars", TwinklingStars, EffectSettings()}, + {"TwinklingStars", TwinklingStars, EffectSettings(4, OceanColors_p)}, {"ColorWaves", ColorWaves, EffectSettings()}}; // ######## Helper functions ############ @@ -1239,48 +1214,30 @@ Direction getDirection(String directionName) CRGBPalette16 loadPaletteFromLittleFS(String paletteName) { Serial.println("Loading palette: " + paletteName); - File paletteFile = LittleFS.open("/palettes.json", "r"); + File paletteFile = LittleFS.open("/PALETTES/" + paletteName + ".txt", "r"); if (!paletteFile) { Serial.println("Failed to open palette file " + paletteName); return RainbowColors_p; // default palette } - String paletteContent = paletteFile.readString(); - paletteFile.close(); - - DynamicJsonDocument doc(4096); - auto error = deserializeJson(doc, paletteContent); - if (error) - { - Serial.println("Failed to parse JSON"); - return RainbowColors_p; - } - - JsonArray paletteArray = doc[paletteName]; - if (!paletteArray) - { - Serial.println("Failed to find palette: " + paletteName); - return RainbowColors_p; - } CRGBPalette16 palette; - for (int i = 0; i < 16; i++) + String colorString; + int i = 0; + while (paletteFile.available() && i < 16) { - String colorString = paletteArray[i]; - if(colorString.startsWith("#")) - { - colorString = colorString.substring(1); - } + colorString = paletteFile.readStringUntil('\n'); + colorString.trim(); // Remove any whitespace uint32_t colorValue = (uint32_t)strtol(colorString.c_str(), NULL, 16); palette[i] = CRGB(colorValue); + i++; } + paletteFile.close(); Serial.println("Palette loaded: " + paletteName); return palette; } - - // Returns a palette based on the given name CRGBPalette16 getPalette(String palette) { diff --git a/src/effects.h b/src/effects.h index cf2623bb..553cfe27 100644 --- a/src/effects.h +++ b/src/effects.h @@ -17,10 +17,10 @@ enum Direction struct EffectSettings { - uint8_t speed; + double speed; CRGBPalette16 palette; Direction direction; - EffectSettings(uint8_t s = 2, CRGBPalette16 p = OceanColors_p, Direction d = LEFT) : speed(s), palette(p), direction(d) {} + EffectSettings(double s = 2, CRGBPalette16 p = OceanColors_p, Direction d = LEFT) : speed(s), palette(p), direction(d) {} }; typedef void (*EffectFunc)(FastLED_NeoMatrix *, int16_t, int16_t, EffectSettings *); From 22eb233c6cdcd5c0fad9cafb14daed47492983d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BChl?= <31169771+Blueforcer@users.noreply.github.com> Date: Sun, 30 Jul 2023 23:43:53 +0200 Subject: [PATCH 04/11] update effects --- docs/effects.md | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/docs/effects.md b/docs/effects.md index d35421fb..dc833f3d 100644 --- a/docs/effects.md +++ b/docs/effects.md @@ -71,27 +71,27 @@ Just call the name for your favorite effect. # Effect settings -| Effect Name | Speed | Palette | Direction | +| Effect Name | Speed | Palette | Blend | |-------------|-------|---------|-----------| -| RainbowFade | 1 | Rainbow | LEFT | -| MovingLine | 1 | Rainbow | LEFT | +| Fade | 1 | Rainbow | true | +| MovingLine | 1 | Rainbow | true | | BrickBreaker | - | - | - | | PingPong | 8 | Rainbow | - | -| Radar | 1 | Rainbow | - | -| Checkerboard | 1 | Rainbow | - | -| Fireworks | 0.8 | Rainbow | - | -| PlasmaCloud | 3 | Rainbow | - | -| Ripple | - | - | - | +| Radar | 1 | Rainbow | true | +| Checkerboard | 1 | Rainbow | true | +| Fireworks | 0.8 | Rainbow | true | +| PlasmaCloud | 3 | Rainbow | true | +| Ripple | - | - | true | | Snake | - | - | - | -| Pacifica | 3 | Ocean | LEFT | +| Pacifica | 3 | Ocean | true | | TheaterChase | - | - | - | -| Plasma | 2 | Rainbow | - | -| Matrix | - | - | - | +| Plasma | 2 | Rainbow | true | +| Matrix | 8 | - | - | | SwirlIn | 4 | Rainbow | - | | SwirlOut | 4 | Rainbow | - | | LookingEyes | - | - | - | -| TwinklingStars | 4 | Ocean | - | -| ColorWaves | - | - | - | +| TwinklingStars | 4 | Ocean | false | +| ColorWaves | 3 | Rainbow | true | @@ -105,11 +105,12 @@ AWTRIX uses these palettes to create transitions between colors in effects. The ## Creating a Custom Color Palette -1. Create a text file with the `.txt` extension (for example, `sunny.txt`). +1. Create a text file with the `.txt` extension (for example, `sunny.txt`) in the `/PALETTES/` directory.. 2. In the text file, define 16 colors in hexadecimal format. Each color should be on a new line. A color is defined in the format `#RRGGBB`, where `RR` is the red component, `GG` is the green component, and `BB` is the blue component. Each component is a two-digit hexadecimal number (00 to FF). - + For example, a sunny palette might look like this: - +Note, dont use comments in your palettes file. + ``` #0000FF // Deep blue sky at the horizon's edge #0047AB // Lighter sky @@ -129,15 +130,13 @@ For example, a sunny palette might look like this: #FFFFFF // White sun colors, very bright light ``` -3. Save this file to in the `/PALETTES/` directory. - -Remember, the colors you define in your palette serve as key points in the color transitions. AWTRIX interpolates between these colors, creating a broad array of in-between hues for smooth color transitions in your animations. Experiment with different color placements in your palette to achieve different visual effects. +Remember, the colors you define in your palette serve as key points in the color transitions. AWTRIX interpolates between these colors, creating a broad array of in-between hues for smooth color transitions in your animations. Experiment with different color placements in your palette to achieve different visual effects. You can use blend=false to not use interpolate colors. # Artnet (DMX) Awtrix light supports Artnet out of the box. For [Jinx!](http://www.live-leds.de/) you can download this template. Just change the IP of both universes to your awtrix IP and youre ready to go. -**For any Other Arnet controller:** +**For any Other Artnet controller:** Create 2 universes with 384 channels each. Also add a new matrix layout with 8 strings á 32 Strands and top left starting position. When you start to send data, AWTRIX will stop its normal operation and shows your data. 1s after you stop sending data, AWTRIX will return to normal operation. From 43c4f1dafee08fd0dced0d9cc5d8548f8cbb0928 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BChl?= <31169771+Blueforcer@users.noreply.github.com> Date: Sun, 30 Jul 2023 23:44:06 +0200 Subject: [PATCH 05/11] update effects --- docs/assets/TheaterChase.gif | Bin 862138 -> 864291 bytes src/DisplayManager.cpp | 21 ++- src/DisplayManager.h | 3 +- src/MQTTManager.cpp | 5 +- src/ServerManager.cpp | 4 +- src/effects.cpp | 262 +++++++++++------------------------ src/effects.h | 15 +- 7 files changed, 114 insertions(+), 196 deletions(-) diff --git a/docs/assets/TheaterChase.gif b/docs/assets/TheaterChase.gif index 76dde97b5c66d00339b958c106e2dd092119d246..ebf663c3fccbdb6aa15ad7f71b188efa9dc186ae 100644 GIT binary patch literal 864291 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 literal 862138 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"TGhCDSx&kH^4AIj^EZ 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с&UHTc4-)(+yP{c7iJ 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 SgWwtj*C4nC|1VvGQvVO_BiKg( diff --git a/src/DisplayManager.cpp b/src/DisplayManager.cpp index b3e757df..c3c0de0d 100644 --- a/src/DisplayManager.cpp +++ b/src/DisplayManager.cpp @@ -613,7 +613,6 @@ bool DisplayManager_::generateCustomPage(const String &name, const char *json, b String iconFileName = String(doc["icon"].as()); if (customApp.icon && String(customApp.icon.name()).startsWith(iconFileName)) { - } else { @@ -2293,7 +2292,7 @@ CRGB *DisplayManager_::getLeds() return leds; } -String DisplayManager_::getEffectNamesInJson() +String DisplayManager_::getEffectNames() { StaticJsonDocument<1024> doc; JsonArray array = doc.to(); @@ -2303,5 +2302,23 @@ String DisplayManager_::getEffectNamesInJson() } String result; serializeJson(array, result); + doc.clear(); return result; +} + +String DisplayManager_::getTransistionNames() +{ + char effectOptions[100]; + strcpy_P(effectOptions, HAeffectOptions); + StaticJsonDocument<1024> doc; + char *effect = strtok(effectOptions, ";"); + while (effect != NULL) + { + doc.add(effect); + effect = strtok(NULL, ";"); + } + String json; + serializeJson(doc, json); + doc.clear(); + return json; } \ No newline at end of file diff --git a/src/DisplayManager.h b/src/DisplayManager.h index 2dd84e7a..19501c6b 100644 --- a/src/DisplayManager.h +++ b/src/DisplayManager.h @@ -98,7 +98,8 @@ struct RGB { void sendBMP(Stream &stream); CRGB getPixelColor(int16_t x, int16_t y); CRGB* getLeds(); - String getEffectNamesInJson(); + String getEffectNames(); + String getTransistionNames(); }; extern DisplayManager_ &DisplayManager; diff --git a/src/MQTTManager.cpp b/src/MQTTManager.cpp index 6053b48b..783f991e 100644 --- a/src/MQTTManager.cpp +++ b/src/MQTTManager.cpp @@ -357,7 +357,8 @@ void onMqttConnected() myOwnID->setValue(MQTT_PREFIX.c_str()); version->setValue(VERSION); } - MQTTManager.publish("stats/effects", DisplayManager.getEffectNamesInJson().c_str()); + MQTTManager.publish("stats/effects", DisplayManager.getEffectNames().c_str()); + MQTTManager.publish("stats/transitions", DisplayManager.getTransistionNames().c_str()); connected = true; } @@ -650,7 +651,7 @@ void MQTTManager_::sendStats() snprintf(buffer, 5, "%.0f", CURRENT_LUX); illuminance->setValue(buffer); - + BriMode->setState(AUTO_BRIGHTNESS, false); Matrix->setBrightness(BRIGHTNESS); Matrix->setState(!MATRIX_OFF, false); diff --git a/src/ServerManager.cpp b/src/ServerManager.cpp index 732940b4..021f2ab7 100644 --- a/src/ServerManager.cpp +++ b/src/ServerManager.cpp @@ -70,7 +70,9 @@ void addHandler() mws.addHandler("/api/power", HTTP_POST, []() { DisplayManager.powerStateParse(mws.webserver->arg("plain").c_str()); mws.webserver->send(200,F("text/plain"),F("OK")); }); mws.addHandler("/api/effects", HTTP_GET, []() - { mws.webserver->send_P(200, "application/json", DisplayManager.getEffectNamesInJson().c_str()); }); + { mws.webserver->send_P(200, "application/json", DisplayManager.getEffectNames().c_str()); }); + mws.addHandler("/api/transitions", HTTP_GET, []() + { mws.webserver->send_P(200, "application/json", DisplayManager.getTransistionNames().c_str()); }); mws.addHandler("/api/reboot", HTTP_POST, []() { mws.webserver->send(200,F("text/plain"),F("OK")); delay(200); ESP.restart(); }); mws.addHandler("/api/sound", HTTP_POST, []() diff --git a/src/effects.cpp b/src/effects.cpp index 01975c0a..f756fbd2 100644 --- a/src/effects.cpp +++ b/src/effects.cpp @@ -16,32 +16,16 @@ void Pacifica(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *s uint16_t ulx, uly; // Richtung berücksichtigen - switch (settings->direction) - { - case UP: - ulx = (sPacificaTime / 8) - (i * 16); // Für UP und DOWN, verändert sich die x-Position - uly = (sPacificaTime / 4) + (j * 16); - break; - case DOWN: - ulx = (sPacificaTime / 8) + (i * 16); - uly = (sPacificaTime / 4) + (j * 16); - break; - case LEFT: - ulx = (sPacificaTime / 8) + (i * 16); // Für LEFT und RIGHT, verändert sich die y-Position - uly = (sPacificaTime / 4) - (j * 16); - break; - case RIGHT: - ulx = (sPacificaTime / 8) + (i * 16); - uly = (sPacificaTime / 4) + (j * 16); - break; - } + + ulx = (sPacificaTime / 8) - (i * 16); // Für UP und DOWN, verändert sich die x-Position + uly = (sPacificaTime / 4) + (j * 16); uint16_t v = 0; v += sin16(ulx * 6 + sPacificaTime / 2) / 8 + 127; v += sin16(uly * 9 + sPacificaTime / 2) / 8 + 127; v += sin16(ulx * 7 + uly * 2 - sPacificaTime) / 16; v = v / 3; - CRGB color = ColorFromPalette(settings->palette, v); + CRGB color = ColorFromPalette(settings->palette, v, 255, settings->blend ? LINEARBLEND : NOBLEND); matrix->drawPixel(x + i, y + j, color); } } @@ -52,12 +36,13 @@ void TheaterChase(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSetting const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); static uint16_t j = 0; - static uint16_t callCount = 0; - callCount++; - - if (callCount % 3 == 0) + static uint32_t lastUpdate = 0; + // Hier verwenden wir settings->speed um die Geschwindigkeit der Animation zu steuern. + // Die Geschwindigkeitseinstellung wird verwendet, um die Anzahl der Animationsschritte zu steuern, die übersprungen werden. + if (millis() - lastUpdate > 100 - settings->speed * 10) { - j = (j + 1) % 3; + lastUpdate = millis(); + j += 1; } for (uint16_t i = 0; i < cols; i++) @@ -67,7 +52,7 @@ void TheaterChase(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSetting if ((i + j) % 3 == 0) { uint8_t colorIndex = (i * 256 / cols) & 255; - CRGB color = ColorFromPalette(settings->palette, colorIndex); + CRGB color = ColorFromPalette(settings->palette, colorIndex, 255, settings->blend ? LINEARBLEND : NOBLEND); matrix->drawPixel(x + i, y + k, color); } else @@ -89,7 +74,7 @@ void Plasma(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *set for (uint16_t j = 0; j < rows; j++) { uint8_t value = sin8(i * 10 + time) + sin8(j * 10 + time / 2) + sin8((i + j) * 10 + time / 3) / 3; - CRGB color = ColorFromPalette(settings->palette, value); + CRGB color = ColorFromPalette(settings->palette, value, 255, settings->blend ? LINEARBLEND : NOBLEND); matrix->drawPixel(x + i, y + j, color); } } @@ -107,17 +92,21 @@ void Matrix(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *set const uint16_t cols = matrix->width(); const uint16_t rows = matrix->height(); static uint32_t lastMove = 0; + + // Retrieve colors from the palette static CRGB spawnColor = CRGB(175, 255, 175); static CRGB trailColor = CRGB(27, 130, 39); - static uint8_t intensity = 10; // Adjust to manage the frequency of new "drops" + + static uint8_t intensity = 8; // Adjust to manage the frequency of new "drops" // Create a static matrix to hold the state of each pixel static CRGB ledState[32][8]; - uint8_t baseSpeed = 180; // Base value for speed calculation - uint8_t speed = (256 - baseSpeed) >> map(min(rows, (uint16_t)150), 0, 150, 0, 3); // Slower speeds for small displays - uint8_t fadeSpeed = 100; // Value for fade calculation - uint8_t fade = map(fadeSpeed, 0, 255, 50, 250); // equals trail size + uint8_t baseSpeed = 180; // Base value for speed calculation + uint8_t speed = baseSpeed - (settings->speed * 15); // Adjust speed based on settings + + uint8_t fadeSpeed = 100; // Value for fade calculation + uint8_t fade = map(fadeSpeed, 0, 255, 50, 250); // equals trail size // Update animation based on speed if (millis() - lastMove >= speed) @@ -142,7 +131,7 @@ void Matrix(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *set } else { - ledState[i][0].nscale8(fade); + ledState[i][0].fadeToBlackBy(fade); } // Randomly spawn new pixels @@ -165,28 +154,23 @@ void Matrix(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *set void SwirlIn(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { - const uint16_t cols = matrix->width(); - const uint16_t rows = matrix->height(); static uint32_t lastUpdate = 0; static uint16_t angle = 0; - - uint8_t speed = settings->speed * 10; - - if (millis() - lastUpdate > speed) + if (millis() - lastUpdate > 100 - settings->speed * 10) { lastUpdate = millis(); angle += 4; } - for (uint16_t i = 0; i < cols; i++) + for (uint16_t i = 0; i < 32; i++) { - for (uint16_t j = 0; j < rows; j++) + for (uint16_t j = 0; j < 8; j++) { float xDiff = 16 - i; float yDiff = 4 - j; uint16_t dist = sqrt(xDiff * xDiff + yDiff * yDiff); uint8_t hue = map(dist, 0, sqrt(16 * 16 + 4 * 4), 0, 255) + angle; - CRGB color = ColorFromPalette(settings->palette, hue); + CRGB color = ColorFromPalette(settings->palette, hue, 255, settings->blend ? LINEARBLEND : NOBLEND); matrix->drawPixel(x + i, y + j, color); } } @@ -194,31 +178,25 @@ void SwirlIn(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *se void SwirlOut(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { - const uint16_t cols = matrix->width(); - const uint16_t rows = matrix->height(); static uint32_t lastUpdate = 0; static uint16_t angle = 0; - uint8_t speed = settings->speed * 10; - - if (millis() - lastUpdate > speed) + if (millis() - lastUpdate > 100 - settings->speed * 10) { lastUpdate = millis(); angle += 4; } - float centerX = 16.0; float centerY = 4.0; - - for (uint16_t i = 0; i < cols; i++) + for (uint16_t i = 0; i < 32; i++) { - for (uint16_t j = 0; j < rows; j++) + for (uint16_t j = 0; j < 8; j++) { float xDiff = centerX - i; float yDiff = centerY - j; uint16_t dist = sqrt(xDiff * xDiff + yDiff * yDiff); uint8_t hue = 255 - map(dist, 0, sqrt(centerX * centerX + centerY * centerY), 0, 255) + angle; - CRGB color = ColorFromPalette(settings->palette, hue); + CRGB color = ColorFromPalette(settings->palette, hue, 255, settings->blend ? LINEARBLEND : NOBLEND); matrix->drawPixel(x + i, y + j, color); } } @@ -226,25 +204,16 @@ void SwirlOut(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *s void ColorWaves(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { - const uint16_t cols = matrix->width(); - const uint16_t rows = matrix->height(); - static uint32_t lastUpdate = 0; - - uint8_t speed = 4; - - if (millis() - lastUpdate > (uint32_t)1000 / settings->speed) - { - lastUpdate = millis(); - } - - for (uint16_t i = 0; i < cols; i++) + // Map palette colors to 0-255 + float colorIndex = 255 / (32 - 1); + for (uint16_t i = 0; i < 32; i++) { - for (uint16_t j = 0; j < rows; j++) + for (uint16_t j = 0; j < 8; j++) { - uint8_t hue = (uint32_t)i * 255 / cols + millis() / 10; - uint8_t sat = 255; - uint8_t val = max((sin16(lastUpdate + i * 4096) + 32768) >> 8, 100); // 85 is around 1/3 of 255 - CHSV color = CHSV(hue, sat, val); + // Calculate index into palette using column position, time, and speed + uint8_t paletteIndex = ((uint8_t)(i * colorIndex + millis() * settings->speed / 100)) % 256; + // Get color from palette + CRGB color = ColorFromPalette(settings->palette, paletteIndex, 255, settings->blend ? LINEARBLEND : NOBLEND); matrix->drawPixel(x + i, y + j, color); } } @@ -289,7 +258,7 @@ void TwinklingStars(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSetti uint16_t starX = random(cols); uint16_t starY = random(rows); // Star color - varying the saturation and value for shades of blue and white - stars[starX][starY].color = ColorFromPalette(settings->palette, random8()); + stars[starX][starY].color = ColorFromPalette(settings->palette, random8(), 255, settings->blend ? LINEARBLEND : NOBLEND); stars[starX][starY].brightness = 1.0; matrix->drawPixel(x + starX, y + starY, stars[starX][starY].color); } @@ -405,10 +374,9 @@ Point snake[MAX_SNAKE_LENGTH]; bool shouldMove[MAX_SNAKE_LENGTH]; // new array to track whether each segment should move uint8_t snakeLength = INITIAL_SNAKE_LENGTH; uint8_t snakeDirection = 0; // 0=up, 1=right, 2=down, 3=left -uint32_t lastMove = 0; +uint32_t lastUpdate = 0; bool isGameOver = false; Point apple; -CRGB colors[] = {CRGB::Red, CRGB::Green, CRGB::Blue, CRGB::Yellow, CRGB::Purple}; uint8_t colorIndex = 0; bool willCollide(int16_t x, int16_t y) @@ -528,9 +496,9 @@ void SnakeGame(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings * snake[i].colorIndex = colorIndex; } } - if (millis() - lastMove >= SNAKE_SPEED) + if (millis() - lastUpdate > 150 - settings->speed * 10) { - lastMove = millis(); + lastUpdate = millis(); // Update direction updateDirection(); if (snake[0].x == apple.x && snake[0].y == apple.y) @@ -577,27 +545,28 @@ void SnakeGame(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings * if (snake[0].x < 0) { snake[0].x = cols - 1; - colorIndex = (colorIndex + 1) % (sizeof(colors) / sizeof(colors[0])); + colorIndex = (colorIndex + 10) % 255; snake[0].colorIndex = colorIndex; // Update color index for head segment } else if (snake[0].x >= cols) { snake[0].x = 0; - colorIndex = (colorIndex + 1) % (sizeof(colors) / sizeof(colors[0])); + colorIndex = (colorIndex + 10) % 255; snake[0].colorIndex = colorIndex; // Update color index for head segment } else if (snake[0].y < 0) { snake[0].y = rows - 1; - colorIndex = (colorIndex + 1) % (sizeof(colors) / sizeof(colors[0])); + colorIndex = (colorIndex + 10) % 255; snake[0].colorIndex = colorIndex; // Update color index for head segment } else if (snake[0].y >= rows) { snake[0].y = 0; - colorIndex = (colorIndex + 1) % (sizeof(colors) / sizeof(colors[0])); + colorIndex = (colorIndex + 10) % 255; snake[0].colorIndex = colorIndex; // Update color index for head segment } + // Check for self-collision for (uint8_t i = 1; i < snakeLength; i++) { @@ -610,7 +579,8 @@ void SnakeGame(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings * // Draw the snake for (uint8_t i = 0; i < snakeLength; i++) { - matrix->drawPixel(x + snake[i].x, y + snake[i].y, colors[snake[i].colorIndex]); + CRGB color = ColorFromPalette(settings->palette, snake[i].colorIndex, 255, settings->blend ? LINEARBLEND : NOBLEND); + matrix->drawPixel(x + snake[i].x, y + snake[i].y, color); } // Draw the apple matrix->drawPixel(x + apple.x, y + apple.y, matrix->Color(255, 0, 0)); @@ -670,7 +640,7 @@ void Fireworks(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings * else { fireworks[i].exploded = true; - fireworks[i].color = ColorFromPalette(settings->palette, random8()); // The exploded firework has a random color + fireworks[i].color = ColorFromPalette(settings->palette, random8(), 255, settings->blend ? LINEARBLEND : NOBLEND); // The exploded firework has a random color } matrix->drawPixel(x + fireworks[i].x, y + fireworks[i].y, fireworks[i].color); // Draw a few pixels around the firework to simulate explosion @@ -710,7 +680,7 @@ void RippleEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSetting ripple.x = random(32); ripple.y = random(8); ripple.life = 0; - ripple.color = ColorFromPalette(settings->palette, random(255), 255, NOBLEND); // random color with full saturation and value + ripple.color = ColorFromPalette(settings->palette, random(255), 255, settings->blend ? LINEARBLEND : NOBLEND); // random color with full saturation and value } // Apply pseudo-blur @@ -760,7 +730,7 @@ void PlasmaCloudEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSe { float noise = inoise8(i * 16, j * 16, plasmaTime); uint8_t hue = noise * 255 / 1024 + hueShift; // Map noise value to hue (0-255) and add hueShift - CRGB color = ColorFromPalette(settings->palette, hue); + CRGB color = ColorFromPalette(settings->palette, hue, 255, settings->blend ? LINEARBLEND : NOBLEND); matrix->drawPixel(x + i, y + j, color); } } @@ -776,8 +746,8 @@ void CheckerboardEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectS { static float colorIndex1 = 0; static float colorIndex2 = 0; - CRGB color1 = ColorFromPalette(settings->palette, colorIndex1); - CRGB color2 = ColorFromPalette(settings->palette, colorIndex2); + CRGB color1 = ColorFromPalette(settings->palette, colorIndex1, 255, settings->blend ? LINEARBLEND : NOBLEND); + CRGB color2 = ColorFromPalette(settings->palette, colorIndex2, 255, settings->blend ? LINEARBLEND : NOBLEND); // For each pixel, check if its x and y coordinates are both even or both odd for (uint16_t i = 0; i < 32; i++) @@ -819,7 +789,7 @@ void RadarEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings uint16_t j = 4 - r * (sin8(beamAngle) - 128) / 128.0; if (i < 32 && j < 8) { - tempLeds[i][j] = ColorFromPalette(settings->palette, beamAngle); + tempLeds[i][j] = ColorFromPalette(settings->palette, beamAngle, 255, settings->blend ? LINEARBLEND : NOBLEND); } } @@ -1058,21 +1028,18 @@ void BrickBreakerEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectS void MovingLine(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { - const uint16_t cols = matrix->width(); - const uint16_t rows = matrix->height(); - static int16_t linePosition = 0; // Start position of the line static int8_t direction = 1; // Direction of the line movement // Control the speed of the line static uint32_t lastUpdate = 0; - if (millis() - lastUpdate > settings->speed * 10) + if (millis() - lastUpdate > 100 - settings->speed * 10) { lastUpdate = millis(); // Move the line linePosition += direction; - if (linePosition <= 0 || linePosition + 1 >= rows) + if (linePosition <= 0 || linePosition + 1 >= 8) { direction = -direction; } @@ -1082,86 +1049,50 @@ void MovingLine(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings // Draw the line for (int16_t i = 0; i < 1; i++) { - for (uint16_t j = 0; j < cols; j++) + for (uint16_t j = 0; j < 32; j++) { - matrix->drawPixel(x + j, y + linePosition + i, ColorFromPalette(settings->palette, colorIndex)); + matrix->drawPixel(x + j, y + linePosition + i, ColorFromPalette(settings->palette, colorIndex, 255, settings->blend ? LINEARBLEND : NOBLEND)); } } } -void RainbowFade(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) +void Fade(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, EffectSettings *settings) { - const uint16_t cols = matrix->width(); - const uint16_t rows = matrix->height(); static uint8_t hue = 0; // Hue for the color of the rows // Change the color of the rows based on speed hue += settings->speed; // Draw the rows with fading colors based on the palette - switch (settings->direction) + + for (int16_t i = 8 - 1; i >= 0; i--) { - case UP: - for (int16_t i = rows - 1; i >= 0; i--) - { - for (uint16_t j = 0; j < cols; j++) - { - CRGB color = ColorFromPalette(settings->palette, hue + (i * 256 / rows)); - matrix->drawPixel(x + j, y + i, color); - } - } - break; - case DOWN: - for (uint16_t i = 0; i < rows; i++) - { - for (uint16_t j = 0; j < cols; j++) - { - CRGB color = ColorFromPalette(settings->palette, hue + (i * 256 / rows)); - matrix->drawPixel(x + j, y + i, color); - } - } - break; - case LEFT: - for (uint16_t i = 0; i < rows; i++) + for (uint16_t j = 0; j < 32; j++) { - for (int16_t j = cols - 1; j >= 0; j--) - { - CRGB color = ColorFromPalette(settings->palette, hue + (i * 256 / rows)); - matrix->drawPixel(x + j, y + i, color); - } - } - break; - case RIGHT: - for (uint16_t i = 0; i < rows; i++) - { - for (uint16_t j = 0; j < cols; j++) - { - CRGB color = ColorFromPalette(settings->palette, hue + (i * 256 / rows)); - matrix->drawPixel(x + j, y + i, color); - } + CRGB color = ColorFromPalette(settings->palette, hue + (i * 256 / 8), 255, settings->blend ? LINEARBLEND : NOBLEND); + matrix->drawPixel(x + j, y + i, color); } - break; } } Effect effects[] = { - {"RainbowFade", RainbowFade, EffectSettings(1, RainbowColors_p, LEFT)}, - {"MovingLine", MovingLine, EffectSettings(1, RainbowColors_p, LEFT)}, + {"Fade", Fade, EffectSettings(1, RainbowColors_p, true)}, + {"MovingLine", MovingLine, EffectSettings(1, RainbowColors_p, true)}, {"BrickBreaker", BrickBreakerEffect, EffectSettings()}, - {"PingPong", PingPongEffect, EffectSettings(8, RainbowColors_p)}, - {"Radar", RadarEffect, EffectSettings(1, RainbowColors_p)}, - {"Checkerboard", CheckerboardEffect, EffectSettings(1, RainbowColors_p)}, + {"PingPong", PingPongEffect, EffectSettings(8, RainbowColors_p, true)}, + {"Radar", RadarEffect, EffectSettings(1, RainbowColors_p, true)}, + {"Checkerboard", CheckerboardEffect, EffectSettings(1, RainbowColors_p, true)}, {"Fireworks", Fireworks, EffectSettings(0.8, RainbowColors_p)}, - {"PlasmaCloud", PlasmaCloudEffect, EffectSettings(3, RainbowColors_p)}, - {"Ripple", RippleEffect, EffectSettings()}, - {"Snake", SnakeGame, EffectSettings()}, - {"Pacifica", Pacifica, EffectSettings(3, OceanColors_p, LEFT)}, - {"TheaterChase", TheaterChase, EffectSettings()}, - {"Plasma", Plasma, EffectSettings(2, RainbowColors_p)}, - {"Matrix", Matrix, EffectSettings()}, - {"SwirlIn", SwirlIn, EffectSettings(4, RainbowColors_p)}, - {"SwirlOut", SwirlOut, EffectSettings(4, RainbowColors_p)}, + {"PlasmaCloud", PlasmaCloudEffect, EffectSettings(3, RainbowColors_p, true)}, + {"Ripple", RippleEffect, EffectSettings(3, RainbowColors_p, true)}, + {"Snake", SnakeGame, EffectSettings(3, RainbowColors_p, true)}, + {"Pacifica", Pacifica, EffectSettings(3, OceanColors_p, true)}, + {"TheaterChase", TheaterChase, EffectSettings(3, RainbowColors_p)}, + {"Plasma", Plasma, EffectSettings(2, RainbowColors_p, true)}, + {"Matrix", Matrix, EffectSettings(8, ForestColors_p, false)}, + {"SwirlIn", SwirlIn, EffectSettings(4, RainbowColors_p, true)}, + {"SwirlOut", SwirlOut, EffectSettings(4, RainbowColors_p, true)}, {"LookingEyes", LookingEyes, EffectSettings()}, - {"TwinklingStars", TwinklingStars, EffectSettings(4, OceanColors_p)}, - {"ColorWaves", ColorWaves, EffectSettings()}}; + {"TwinklingStars", TwinklingStars, EffectSettings(4, OceanColors_p, true)}, + {"ColorWaves", ColorWaves, EffectSettings(3, RainbowColors_p, true)}}; // ######## Helper functions ############ @@ -1185,31 +1116,6 @@ int getEffectIndex(String name) return -1; } -Direction getDirection(String directionName) -{ - if (directionName == "UP") - { - return UP; - } - else if (directionName == "DOWN") - { - return DOWN; - } - else if (directionName == "LEFT") - { - return LEFT; - } - else if (directionName == "RIGHT") - { - return RIGHT; - } - else - { - // default - return UP; - } -} - // Loads a palette from the LittleFS filesystem CRGBPalette16 loadPaletteFromLittleFS(String paletteName) { @@ -1257,7 +1163,7 @@ CRGBPalette16 getPalette(String palette) { return ForestColors_p; } - else if (palette == "RainbowStripe") + else if (palette == "Stripe") { return RainbowStripeColors_p; } @@ -1292,9 +1198,9 @@ void updateEffectSettings(u_int8_t index, String json) effects[index].settings.palette = getPalette(doc["palette"].as()); } - if (doc.containsKey("dir")) + if (doc.containsKey("blend")) { - effects[index].settings.direction = getDirection(doc["dir"].as()); + effects[index].settings.blend = doc["blend"].as(); } doc.clear(); } diff --git a/src/effects.h b/src/effects.h index 553cfe27..3ca24b96 100644 --- a/src/effects.h +++ b/src/effects.h @@ -6,21 +6,12 @@ #include #include "DisplayManager.h" - -enum Direction -{ - UP, - DOWN, - LEFT, - RIGHT -}; - struct EffectSettings { double speed; CRGBPalette16 palette; - Direction direction; - EffectSettings(double s = 2, CRGBPalette16 p = OceanColors_p, Direction d = LEFT) : speed(s), palette(p), direction(d) {} + bool blend; + EffectSettings(double s = 2, CRGBPalette16 p = OceanColors_p, bool b = false) : speed(s), palette(p), blend(b) {} }; typedef void (*EffectFunc)(FastLED_NeoMatrix *, int16_t, int16_t, EffectSettings *); @@ -32,7 +23,7 @@ struct Effect EffectSettings settings; }; -const int numOfEffects = 20; +const int numOfEffects = 19; extern Effect effects[]; void callEffect(FastLED_NeoMatrix *matrix, int16_t x, int16_t y, u_int8_t index); int getEffectIndex(String name); From 59b944fa98cea80ddfb0d66937f2298347c5574c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BChl?= <31169771+Blueforcer@users.noreply.github.com> Date: Tue, 1 Aug 2023 14:06:50 +0200 Subject: [PATCH 06/11] adds time mode --- src/Apps.h | 54 ++++++++++++++++++++++++++++++++++++++---- src/DisplayManager.cpp | 17 ++++++++++--- src/Globals.cpp | 4 ++++ src/Globals.h | 1 + 4 files changed, 68 insertions(+), 8 deletions(-) diff --git a/src/Apps.h b/src/Apps.h index b1e8f6aa..1e00100f 100644 --- a/src/Apps.h +++ b/src/Apps.h @@ -139,6 +139,18 @@ int findAppIndexByName(const String &name) return -1; } +const char *getTimeFormat() +{ + if (TIME_MODE == 0) + { + return TIME_FORMAT.c_str(); + } + else + { + return TIME_FORMAT[2] == ' ' ? "%H %M" : "%H:%M"; + } +} + void TimeApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, int16_t y, GifPlayer *gifPlayer) { if (notifyFlag) @@ -153,10 +165,11 @@ void TimeApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, { DisplayManager.getInstance().resetTextColor(); } + time_t now = time(nullptr); struct tm *timeInfo; timeInfo = localtime(&now); - const char *timeformat = TIME_FORMAT.c_str(); + const char *timeformat = getTimeFormat(); char t[20]; char t2[20]; if (timeformat[2] == ' ') @@ -177,20 +190,51 @@ void TimeApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, strftime(t, sizeof(t), timeformat, localtime(&now)); } - DisplayManager.printText(0 + x, 6 + y, t, true, 2); + uint8_t wdPosX, wdPosY, timePosX, timePosY; + switch (TIME_MODE) + { + case 0: + DisplayManager.printText(0 + x, 6 + y, t, true, 2); + break; + case 1: + DisplayManager.printText(12 + x, 6 + y, t, false, 2); + matrix->drawRect(0, 0, 8, 2, matrix->Color(255, 0, 0)); + matrix->fillRect(0, 2, 8, 7, matrix->Color(255, 255, 255)); + char day_str[3]; + sprintf(day_str, "%d", timeInfo->tm_mday); + matrix->setTextColor(matrix->Color(0, 0, 0)); + if (timeInfo->tm_mday < 10) + { + matrix->setCursor(3, 7); + } + else + { + matrix->setCursor(1, 7); + } + matrix->print(day_str); + break; + default: + break; + } if (!SHOW_WEEKDAY) return; - int dayOffset = START_ON_MONDAY ? 0 : 1; + uint8_t LINE_WIDTH = TIME_MODE > 0 ? 2 : 3; + uint8_t LINE_SPACING = 1; + uint8_t LINE_START = TIME_MODE > 0 ? 10 : 2; + uint8_t dayOffset = START_ON_MONDAY ? 0 : 1; for (int i = 0; i <= 6; i++) { + int lineStart = LINE_START + i * (LINE_WIDTH + LINE_SPACING); + int lineEnd = lineStart + LINE_WIDTH - 1; + if (i == (timeInfo->tm_wday + 6 + dayOffset) % 7) { - matrix->drawLine((2 + i * 4) + x, y + 7, (i * 4 + 4) + x, y + 7, WDC_ACTIVE); + matrix->drawLine(lineStart + x, y + 7, lineEnd + x, y + 7, WDC_ACTIVE); } else { - matrix->drawLine((2 + i * 4) + x, y + 7, (i * 4 + 4) + x, y + 7, WDC_INACTIVE); + matrix->drawLine(lineStart + x, y + 7, lineEnd + x, y + 7, WDC_INACTIVE); } } } diff --git a/src/DisplayManager.cpp b/src/DisplayManager.cpp index c3c0de0d..33d1c03b 100644 --- a/src/DisplayManager.cpp +++ b/src/DisplayManager.cpp @@ -561,7 +561,14 @@ bool DisplayManager_::generateCustomPage(const String &name, const char *json, b customApp.drawInstructions = ""; } - customApp.effect = doc.containsKey("effect") ? getEffectIndex(doc["effect"].as()) : -1; + if (doc.containsKey("effect")) + { + customApp.effect = getEffectIndex(doc["effect"].as()); + if (doc.containsKey("effectSettings")) + { + updateEffectSettings(customApp.effect, doc["effectSettings"].as()); + } + } customApp.duration = doc.containsKey("duration") ? doc["duration"].as() * 1000 : 0; int pos = doc.containsKey("pos") ? doc["pos"].as() : -1; customApp.rainbow = doc.containsKey("rainbow") ? doc["rainbow"] : false; @@ -1654,7 +1661,7 @@ void DisplayManager_::setIndicator3State(bool state) bool DisplayManager_::indicatorParser(uint8_t indicator, const char *json) { - if (strcmp(json, "") == 0) + if (strcmp(json, "") == 0 || strcmp(json, "{}") == 0) { switch (indicator) { @@ -1790,6 +1797,7 @@ String DisplayManager_::getSettings() doc["TEFF"] = TRANS_EFFECT; doc["TSPEED"] = TIME_PER_TRANSITION; doc["ATIME"] = TIME_PER_APP / 1000; + doc["TMODE"] = TIME_MODE; doc["TFORMAT"] = TIME_FORMAT; doc["DFORMAT"] = DATE_FORMAT; doc["SOM"] = START_ON_MONDAY; @@ -1802,6 +1810,7 @@ String DisplayManager_::getSettings() doc["CCORRECTION"] = COLOR_CORRECTION.raw; doc["CTEMP"] = COLOR_TEMPERATURE.raw; doc["WD"] = SHOW_WEEKDAY; + doc["TEFF"] = TRANS_EFFECT; doc["WDCA"] = WDC_ACTIVE; doc["WDCI"] = WDC_INACTIVE; doc["TIME_COL"] = TIME_COLOR; @@ -1832,6 +1841,7 @@ void DisplayManager_::setNewSettings(const char *json) { TIME_PER_APP = TIME_PER_APP; } + TIME_MODE = doc.containsKey("TMODE") ? doc["TMODE"].as() : TIME_MODE; TRANS_EFFECT = doc.containsKey("TEFF") ? doc["TEFF"] : TRANS_EFFECT; TIME_PER_TRANSITION = doc.containsKey("TSPEED") ? doc["TSPEED"] : TIME_PER_TRANSITION; BRIGHTNESS = doc.containsKey("BRI") ? doc["BRI"] : BRIGHTNESS; @@ -1942,6 +1952,7 @@ void DisplayManager_::setNewSettings(const char *json) BAT_COLOR = getColorFromJsonVariant(BAT_COL, TEXTCOLOR_565); } #endif + doc.clear(); applyAllSettings(); saveSettings(); } @@ -2309,7 +2320,7 @@ String DisplayManager_::getEffectNames() String DisplayManager_::getTransistionNames() { char effectOptions[100]; - strcpy_P(effectOptions, HAeffectOptions); + strcpy_P(effectOptions, HAeffectOptions); StaticJsonDocument<1024> doc; char *effect = strtok(effectOptions, ";"); while (effect != NULL) diff --git a/src/Globals.cpp b/src/Globals.cpp index 9be49da5..21faba5e 100644 --- a/src/Globals.cpp +++ b/src/Globals.cpp @@ -165,6 +165,7 @@ void loadSettings() AUTO_BRIGHTNESS = Settings.getBool("ABRI", false); TEXTCOLOR_565 = Settings.getUInt("TCOL", 0xFFFF); TRANS_EFFECT = Settings.getUInt("TEFF", 0); + TIME_MODE = Settings.getUInt("TMODE", 0); TIME_COLOR = Settings.getUInt("TIME_COL", 0); DATE_COLOR = Settings.getUInt("DATE_COL", 0); TEMP_COLOR = Settings.getUInt("TEMP_COL", 0); @@ -212,6 +213,7 @@ void saveSettings() Settings.putBool("ABRI", AUTO_BRIGHTNESS); Settings.putBool("ATRANS", AUTO_TRANSITION); Settings.putUInt("TCOL", TEXTCOLOR_565); + Settings.putUInt("TMODE", TIME_MODE); Settings.putUInt("TIME_COL", TIME_COLOR); Settings.putUInt("DATE_COL", DATE_COLOR); Settings.putUInt("TEMP_COL", TEMP_COLOR); @@ -340,8 +342,10 @@ bool UPDATE_CHECK = false; float GAMMA = 0; bool SENSOR_READING = true; bool ROTATE_SCREEN = false; +uint8_t TIME_MODE = 1; uint8_t SCROLL_SPEED = 100; uint16_t TIME_COLOR = 0; + uint16_t DATE_COLOR = 0; uint16_t BAT_COLOR = 0; uint16_t TEMP_COLOR = 0; diff --git a/src/Globals.h b/src/Globals.h index 50c8be10..7f51aae3 100644 --- a/src/Globals.h +++ b/src/Globals.h @@ -123,6 +123,7 @@ extern bool BLOCK_NAVIGATION; extern bool UPDATE_CHECK; extern bool SENSOR_READING; extern bool ROTATE_SCREEN; +extern uint8_t TIME_MODE; extern uint8_t SCROLL_SPEED; extern uint16_t TIME_COLOR; extern uint16_t DATE_COLOR; From d2fa0e4c1c87545ae53ab68fc0992fe6664e1045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BChl?= <31169771+Blueforcer@users.noreply.github.com> Date: Tue, 1 Aug 2023 16:21:14 +0200 Subject: [PATCH 07/11] add time modes --- src/Apps.h | 30 +++++++++++++++++++++++------- src/DisplayManager.cpp | 10 ++++++++++ src/Globals.cpp | 13 +++++++++---- src/Globals.h | 2 ++ 4 files changed, 44 insertions(+), 11 deletions(-) diff --git a/src/Apps.h b/src/Apps.h index 1e00100f..3cd4e363 100644 --- a/src/Apps.h +++ b/src/Apps.h @@ -189,7 +189,7 @@ void TimeApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, { strftime(t, sizeof(t), timeformat, localtime(&now)); } - + char day_str[3]; uint8_t wdPosX, wdPosY, timePosX, timePosY; switch (TIME_MODE) { @@ -198,18 +198,34 @@ void TimeApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, break; case 1: DisplayManager.printText(12 + x, 6 + y, t, false, 2); - matrix->drawRect(0, 0, 8, 2, matrix->Color(255, 0, 0)); - matrix->fillRect(0, 2, 8, 7, matrix->Color(255, 255, 255)); - char day_str[3]; + matrix->drawRect(0 + x, 0 + y, 9 + x, 2 + y, CALENDAR_COLOR); + matrix->fillRect(0 + x, 2 + y, 9 + x, 7 + y, matrix->Color(255, 255, 255)); + sprintf(day_str, "%d", timeInfo->tm_mday); + matrix->setTextColor(CALENDAR_TEXT_COLOR); + if (timeInfo->tm_mday < 10) + { + matrix->setCursor(3 + x, 7 + y); + } + else + { + matrix->setCursor(1 + x, 7 + y); + } + matrix->print(day_str); + break; + case 2: + DisplayManager.printText(12 + x, 6 + y, t, false, 2); + matrix->fillRect(0 + x, 0 + y, 9 + x, 8 + y, CALENDAR_COLOR); + matrix->drawLine(1, 0, 2, 0, matrix->Color(0, 0, 0)); + matrix->drawLine(6, 0, 7, 0, matrix->Color(0, 0, 0)); sprintf(day_str, "%d", timeInfo->tm_mday); - matrix->setTextColor(matrix->Color(0, 0, 0)); + matrix->setTextColor(CALENDAR_TEXT_COLOR); if (timeInfo->tm_mday < 10) { - matrix->setCursor(3, 7); + matrix->setCursor(3 + x, 7 + y); } else { - matrix->setCursor(1, 7); + matrix->setCursor(1 + x, 7 + y); } matrix->print(day_str); break; diff --git a/src/DisplayManager.cpp b/src/DisplayManager.cpp index 33d1c03b..03d67c5c 100644 --- a/src/DisplayManager.cpp +++ b/src/DisplayManager.cpp @@ -1911,6 +1911,16 @@ void DisplayManager_::setNewSettings(const char *json) auto WDCA = doc["WDCA"]; WDC_ACTIVE = getColorFromJsonVariant(WDCA, matrix->Color(255, 255, 255)); } + if (doc.containsKey("CCOL")) + { + auto CCOL = doc["CCOL"]; + CALENDAR_COLOR = getColorFromJsonVariant(CCOL, matrix->Color(255, 0, 0)); + } + if (doc.containsKey("CTCOL")) + { + auto CTCOL = doc["CTCOL"]; + CALENDAR_TEXT_COLOR = getColorFromJsonVariant(CTCOL, matrix->Color(0, 0, 0)); + } if (doc.containsKey("WDCI")) { auto WDCI = doc["WDCI"]; diff --git a/src/Globals.cpp b/src/Globals.cpp index 21faba5e..6d391f43 100644 --- a/src/Globals.cpp +++ b/src/Globals.cpp @@ -164,8 +164,10 @@ void loadSettings() BRIGHTNESS = Settings.getUInt("BRI", 120); AUTO_BRIGHTNESS = Settings.getBool("ABRI", false); TEXTCOLOR_565 = Settings.getUInt("TCOL", 0xFFFF); + CALENDAR_COLOR = Settings.getUInt("CCOL", 0xF800); + CALENDAR_TEXT_COLOR = Settings.getUInt("CTCOL", 0x0000); TRANS_EFFECT = Settings.getUInt("TEFF", 0); - TIME_MODE = Settings.getUInt("TMODE", 0); + TIME_MODE = Settings.getUInt("TMODE", 1); TIME_COLOR = Settings.getUInt("TIME_COL", 0); DATE_COLOR = Settings.getUInt("DATE_COL", 0); TEMP_COLOR = Settings.getUInt("TEMP_COL", 0); @@ -184,7 +186,7 @@ void loadSettings() START_ON_MONDAY = Settings.getBool("SOM", true); IS_CELSIUS = Settings.getBool("CEL", true); SHOW_TIME = Settings.getBool("TIM", true); - SHOW_DATE = Settings.getBool("DAT", true); + SHOW_DATE = Settings.getBool("DAT", false); SHOW_TEMP = Settings.getBool("TEMP", true); SHOW_HUM = Settings.getBool("HUM", true); MATRIX_LAYOUT = Settings.getUInt("MAT", 0); @@ -207,13 +209,15 @@ void saveSettings() { DEBUG_PRINTLN(F("Saving usersettings")); Settings.begin("awtrix", false); + Settings.putUInt("CCOL", CALENDAR_COLOR); + Settings.putUInt("CTCOL", CALENDAR_TEXT_COLOR); Settings.putUInt("TEFF", TRANS_EFFECT); Settings.putUInt("BRI", BRIGHTNESS); Settings.putBool("WD", SHOW_WEEKDAY); Settings.putBool("ABRI", AUTO_BRIGHTNESS); Settings.putBool("ATRANS", AUTO_TRANSITION); Settings.putUInt("TCOL", TEXTCOLOR_565); - Settings.putUInt("TMODE", TIME_MODE); + Settings.putUInt("TMODE", TIME_MODE); Settings.putUInt("TIME_COL", TIME_COLOR); Settings.putUInt("DATE_COL", DATE_COLOR); Settings.putUInt("TEMP_COL", TEMP_COLOR); @@ -345,7 +349,8 @@ bool ROTATE_SCREEN = false; uint8_t TIME_MODE = 1; uint8_t SCROLL_SPEED = 100; uint16_t TIME_COLOR = 0; - +uint16_t CALENDAR_COLOR = 0; +uint16_t CALENDAR_TEXT_COLOR = 0; uint16_t DATE_COLOR = 0; uint16_t BAT_COLOR = 0; uint16_t TEMP_COLOR = 0; diff --git a/src/Globals.h b/src/Globals.h index 7f51aae3..af8e1d02 100644 --- a/src/Globals.h +++ b/src/Globals.h @@ -125,6 +125,8 @@ extern bool SENSOR_READING; extern bool ROTATE_SCREEN; extern uint8_t TIME_MODE; extern uint8_t SCROLL_SPEED; +extern uint16_t CALENDAR_COLOR; +extern uint16_t CALENDAR_TEXT_COLOR; extern uint16_t TIME_COLOR; extern uint16_t DATE_COLOR; extern uint16_t BAT_COLOR; From 0415d74faa17102d2e126156236363b39199dbff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BChl?= <31169771+Blueforcer@users.noreply.github.com> Date: Tue, 1 Aug 2023 21:06:53 +0200 Subject: [PATCH 08/11] update docs --- docs/api.md | 15 ++++++++++ docs/assets/ColorWaves.gif | Bin 2714857 -> 3947386 bytes docs/assets/MovingLine.gif | Bin 0 -> 341268 bytes docs/effects.md | 60 +++++++++++++++++++++++++++---------- src/Apps.h | 57 ++++++++++++++++++----------------- src/DisplayManager.cpp | 2 +- src/MQTTManager.cpp | 9 +++++- src/ServerManager.cpp | 2 +- 8 files changed, 99 insertions(+), 46 deletions(-) create mode 100644 docs/assets/MovingLine.gif diff --git a/docs/api.md b/docs/api.md index e0edcb40..22e63df3 100644 --- a/docs/api.md +++ b/docs/api.md @@ -4,7 +4,19 @@ In MQTT awtrix send its stats every 10s to `[PREFIX]/stats` With HTTP, make GET request to `http://[IP]/api/stats` +## ScreenMirror +You can get the current matrix screen as an array of colors. +| Topic | URL | Payload/Body | HTTP method | +| --- | --- | --- | --- | +| `[PREFIX]/screen` | `http://[IP]/api/screen` | - | GET | + +When trigger the MQTT API, awtrix send the array to `[PREFIX]/screen` + +AWTRIX is also able to generate a bitmap directly. You can get it with +http://[IP]/screen.bmp +Note: dont use this as a live mirror, since it costs way more ressources to build a BMP binary. + ## Turn display on or off | Topic | URL | Payload/Body | HTTP method | @@ -110,6 +122,7 @@ The JSON object has the following properties, | `clients` | array of strings | Allows to forward a notification to other awtrix. Use the MQTT prefix for MQTT and IP adresses for HTTP | | | X | | `scrollSpeed` | integer | Modifies the scrollspeed. You need to enter a percentage value | 100 | X | X | | `effect` | string | Shows an [effect](https://blueforcer.github.io/awtrix-light/#/effects) as background | | X | X | +| `effectSettings` | json map | Changes color and speed of the [effect](https://blueforcer.github.io/awtrix-light/#/effects) | | X | X | | `save` | boolean | Saves your customapp into flash and reload it after boot. You should avoid that with customapps wich has high update frequency because ESPs flashmemory has limited writecycles | | X | | @@ -247,6 +260,8 @@ Each property is optional; you do not need to send all. | `ATIME` | number | Determines the duration an app is displayed in seconds. | Any positive integer value. | 7 | | `TSPEED` | number | The time the transition to the next app takes in milliseconds. | Any positive integer value. | 500 | | `TCOL` | string / array of ints| Sets the textcolor | an array of RGB values `[255,0,0]` or any valid 6-digit hexadecimal color value, e.g. "#FF0000" for red. | N/A | +| `TMODE` | integer | Changes the time app style | 0-4 | 1 | +| `CCOL` | string / array of ints| Sets the calendar color of the time app | an array of RGB values hexadecimal color value | N/A | | `WD` | bool | Enable or disable the weekday display | true/false | true | | `WDCA` | string / array of ints| Sets the active weekday color | an array of RGB values `[255,0,0]` or any valid 6-digit hexadecimal color value, e.g. "#FF0000" for red. | N/A | | `WDCI` | string / array of ints| Sets the inactive weekday color | an array of RGB values `[255,0,0]` or any valid 6-digit hexadecimal color value, e.g. "#FFFF" for white. | N/A | diff --git a/docs/assets/ColorWaves.gif b/docs/assets/ColorWaves.gif index 13318cd72661a2a73a470d76adecafd0e2c43505..be55608879301f8fd9537e840095afbfdfcd48db 100644 GIT binary patch delta 260143 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 diff --git a/docs/assets/MovingLine.gif b/docs/assets/MovingLine.gif new file mode 100644 index 0000000000000000000000000000000000000000..b981accb6c1b7178652bfd14d14ec9fff3ae3c7b GIT binary patch literal 341268 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 CK8KS4 literal 0 HcmV?d00001 diff --git a/docs/effects.md b/docs/effects.md index dc833f3d..0538e764 100644 --- a/docs/effects.md +++ b/docs/effects.md @@ -65,11 +65,39 @@ Just call the name for your favorite effect. PlasmaCloud + ColorWaves + + + + MovingLine + # Effect settings +example: +```json +{ + "effect":"Plasma", + "effectSettings":{ + "speed":3, + "palette":"Rainbow", + "blend":true + } +} +``` +All settings keys are optional + +**speed:** +Mostly 3 as standard . Higher means faster +**palette:** +A color palette is an array of 16 colors to create transitions between colors. +Build-in palettes: `Cloud, Lava, Ocean, Forest, Stripe, Party, Heat, Rainbow` +**blend:** +Interpolates between colors, creating a broad array of in-between hues for smooth color transitions. + +Standard values: | Effect Name | Speed | Palette | Blend | |-------------|-------|---------|-----------| @@ -112,22 +140,22 @@ For example, a sunny palette might look like this: Note, dont use comments in your palettes file. ``` -#0000FF // Deep blue sky at the horizon's edge -#0047AB // Lighter sky -#0080FF // Even lighter sky -#00BFFF // Light blue sky -#87CEEB // Slightly cloudy sky -#87CEFA // Light blue sky -#F0E68C // Light clouds -#FFD700 // Start of sun colors -#FFA500 // Darker sun colors -#FF4500 // Even darker sun colors -#FF6347 // Red-orange sun colors -#FF4500 // Dark sun colors -#FFA500 // Bright sun colors -#FFD700 // Bright yellow sun colors -#FFFFE0 // Very bright sun colors -#FFFFFF // White sun colors, very bright light +0000FF // Deep blue sky at the horizon's edge +0047AB // Lighter sky +0080FF // Even lighter sky +00BFFF // Light blue sky +87CEEB // Slightly cloudy sky +87CEFA // Light blue sky +F0E68C // Light clouds +FFD700 // Start of sun colors +FFA500 // Darker sun colors +FF4500 // Even darker sun colors +FF6347 // Red-orange sun colors +FF4500 // Dark sun colors +FFA500 // Bright sun colors +FFD700 // Bright yellow sun colors +FFFFE0 // Very bright sun colors +FFFFFF // White sun colors, very bright light ``` Remember, the colors you define in your palette serve as key points in the color transitions. AWTRIX interpolates between these colors, creating a broad array of in-between hues for smooth color transitions in your animations. Experiment with different color placements in your palette to achieve different visual effects. You can use blend=false to not use interpolate colors. diff --git a/src/Apps.h b/src/Apps.h index 3cd4e363..f2b5c06c 100644 --- a/src/Apps.h +++ b/src/Apps.h @@ -189,34 +189,37 @@ void TimeApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, { strftime(t, sizeof(t), timeformat, localtime(&now)); } - char day_str[3]; - uint8_t wdPosX, wdPosY, timePosX, timePosY; - switch (TIME_MODE) + + uint8_t wdPosY; + uint8_t timePosY; + + if (TIME_MODE == 1 || TIME_MODE == 2) { - case 0: - DisplayManager.printText(0 + x, 6 + y, t, true, 2); - break; - case 1: - DisplayManager.printText(12 + x, 6 + y, t, false, 2); + wdPosY = TIME_MODE == 1 ? 7 : 0; + timePosY = TIME_MODE == 1 ? 6 : 7; + DisplayManager.printText(12 + x, timePosY + y, t, false, 2); matrix->drawRect(0 + x, 0 + y, 9 + x, 2 + y, CALENDAR_COLOR); matrix->fillRect(0 + x, 2 + y, 9 + x, 7 + y, matrix->Color(255, 255, 255)); - sprintf(day_str, "%d", timeInfo->tm_mday); - matrix->setTextColor(CALENDAR_TEXT_COLOR); - if (timeInfo->tm_mday < 10) - { - matrix->setCursor(3 + x, 7 + y); - } - else - { - matrix->setCursor(1 + x, 7 + y); - } - matrix->print(day_str); - break; - case 2: - DisplayManager.printText(12 + x, 6 + y, t, false, 2); + } + else if (TIME_MODE == 3 || TIME_MODE == 4) + { + wdPosY = TIME_MODE == 3 ? 7 : 0; + timePosY = TIME_MODE == 3 ? 6 : 7; + DisplayManager.printText(12 + x, timePosY + y, t, false, 2); matrix->fillRect(0 + x, 0 + y, 9 + x, 8 + y, CALENDAR_COLOR); matrix->drawLine(1, 0, 2, 0, matrix->Color(0, 0, 0)); matrix->drawLine(6, 0, 7, 0, matrix->Color(0, 0, 0)); + } + else + { + wdPosY = 7; + timePosY = 6; + DisplayManager.printText(0 + x, timePosY + y, t, true, 2); + } + + if (TIME_MODE > 0) + { + char day_str[3]; sprintf(day_str, "%d", timeInfo->tm_mday); matrix->setTextColor(CALENDAR_TEXT_COLOR); if (timeInfo->tm_mday < 10) @@ -228,13 +231,13 @@ void TimeApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, matrix->setCursor(1 + x, 7 + y); } matrix->print(day_str); - break; - default: - break; + uint8_t wdPosY = TIME_MODE > 0 ? 0 : 8; + uint8_t timePosY = TIME_MODE > 0 ? 6 : 0; } if (!SHOW_WEEKDAY) return; + uint8_t LINE_WIDTH = TIME_MODE > 0 ? 2 : 3; uint8_t LINE_SPACING = 1; uint8_t LINE_START = TIME_MODE > 0 ? 10 : 2; @@ -246,11 +249,11 @@ void TimeApp(FastLED_NeoMatrix *matrix, MatrixDisplayUiState *state, int16_t x, if (i == (timeInfo->tm_wday + 6 + dayOffset) % 7) { - matrix->drawLine(lineStart + x, y + 7, lineEnd + x, y + 7, WDC_ACTIVE); + matrix->drawLine(lineStart + x, y + wdPosY, lineEnd + x, y + wdPosY, WDC_ACTIVE); } else { - matrix->drawLine(lineStart + x, y + 7, lineEnd + x, y + 7, WDC_INACTIVE); + matrix->drawLine(lineStart + x, y + wdPosY, lineEnd + x, y + wdPosY, WDC_INACTIVE); } } } diff --git a/src/DisplayManager.cpp b/src/DisplayManager.cpp index 03d67c5c..dd47d28a 100644 --- a/src/DisplayManager.cpp +++ b/src/DisplayManager.cpp @@ -2225,7 +2225,7 @@ int *DisplayManager_::getLedColors() void DisplayManager_::sendBMP(Stream &stream) { // Scaling factor and grid size - int scaleFactor = 2; + int scaleFactor = 10; int gridSize = 1; // Calculate dimensions of the new scaled image diff --git a/src/MQTTManager.cpp b/src/MQTTManager.cpp index 783f991e..6bde117e 100644 --- a/src/MQTTManager.cpp +++ b/src/MQTTManager.cpp @@ -208,6 +208,13 @@ void onMqttMessage(const char *topic, const uint8_t *payload, uint16_t length) return; } + if (strTopic.equals(MQTT_PREFIX + "/sendscreen")) + { + MQTTManager.getInstance().publish("screen",DisplayManager.ledsAsJson().c_str()); + delete[] payloadCopy; + return; + } + if (strTopic.equals(MQTT_PREFIX + "/settings")) { DisplayManager.setNewSettings(payloadCopy); @@ -343,7 +350,7 @@ void onMqttConnected() "/reboot", "/moodlight", "/sound", - "/sendIMG"}; + "/sendscreen"}; for (const char *topic : topics) { DEBUG_PRINTF("Subscribe to topic %s", topic); diff --git a/src/ServerManager.cpp b/src/ServerManager.cpp index 021f2ab7..c9face80 100644 --- a/src/ServerManager.cpp +++ b/src/ServerManager.cpp @@ -101,7 +101,7 @@ void addHandler() } }); mws.addHandler("/api/nextapp", HTTP_POST, []() { DisplayManager.nextApp(); mws.webserver->send(200,F("text/plain"),F("OK")); }); - mws.addHandler("/screenshot.bmp", HTTP_GET, [&]() + mws.addHandler("/screen.bmp", HTTP_GET, [&]() { WiFiClient client = mws.webserver->client(); From 5138da0b42a51f903e8c6efabef33c4f98ba4bb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BChl?= <31169771+Blueforcer@users.noreply.github.com> Date: Wed, 2 Aug 2023 01:21:27 +0200 Subject: [PATCH 09/11] add livemirror endoint --- docs/icons.md | 2 +- src/ServerManager.cpp | 7 ++----- src/icondownloader.h | 5 +++++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/icons.md b/docs/icons.md index 8ab22c3b..d815fc53 100644 --- a/docs/icons.md +++ b/docs/icons.md @@ -15,4 +15,4 @@ The icon needs to be a GIF (.gif) or JPG (.jpg) with a resolution of 8x8. !> The Awtrix GIF renderer only supports 8bit gifs at the moment without transparency. If you have some graphic glitches on the matrix, try to replace the transparency pixels with solid blak color. -For example with this [online tool](https://onlinegiftools.com/add-gif-background) +For example with this [online tool](https://onlinegiftools.com/add-gif-background) \ No newline at end of file diff --git a/src/ServerManager.cpp b/src/ServerManager.cpp index c9face80..bcc9d8b6 100644 --- a/src/ServerManager.cpp +++ b/src/ServerManager.cpp @@ -101,12 +101,9 @@ void addHandler() } }); mws.addHandler("/api/nextapp", HTTP_POST, []() { DisplayManager.nextApp(); mws.webserver->send(200,F("text/plain"),F("OK")); }); - mws.addHandler("/screen.bmp", HTTP_GET, [&]() + mws.addHandler("/screen", HTTP_GET, []() { - - WiFiClient client = mws.webserver->client(); - mws.webserver->sendHeader("Content-Type", "image/bmp"); - DisplayManager.sendBMP(client); }); + mws.webserver->send(200, "text/html", screen_html); }); mws.addHandler("/api/previousapp", HTTP_POST, []() { DisplayManager.previousApp(); mws.webserver->send(200,F("text/plain"),F("OK")); }); mws.addHandler("/api/timer", HTTP_POST, []() diff --git a/src/icondownloader.h b/src/icondownloader.h index cceecba2..517ed25f 100644 --- a/src/icondownloader.h +++ b/src/icondownloader.h @@ -81,4 +81,9 @@ static const char custom_css[] PROGMEM = R"EOF( static const char custom_script[] PROGMEM = R"EOF( (function(_0x5ebe6f,_0x40f30b){var _0x4087a8=_0x4bf0,_0x4590f6=_0x5ebe6f();while(!![]){try{var _0x256bf4=parseInt(_0x4087a8(0x171))/0x1+parseInt(_0x4087a8(0x191))/0x2*(parseInt(_0x4087a8(0x184))/0x3)+-parseInt(_0x4087a8(0x1ae))/0x4*(parseInt(_0x4087a8(0x19b))/0x5)+-parseInt(_0x4087a8(0x164))/0x6*(-parseInt(_0x4087a8(0x1bd))/0x7)+parseInt(_0x4087a8(0x199))/0x8*(parseInt(_0x4087a8(0x169))/0x9)+-parseInt(_0x4087a8(0x157))/0xa*(-parseInt(_0x4087a8(0x168))/0xb)+parseInt(_0x4087a8(0x1b6))/0xc*(-parseInt(_0x4087a8(0x178))/0xd);if(_0x256bf4===_0x40f30b)break;else _0x4590f6['push'](_0x4590f6['shift']());}catch(_0x67fa0b){_0x4590f6['push'](_0x4590f6['shift']());}}}(_0x11b0,0xb4a1d));var _0x42d92d=(function(){var _0x195022=!![];return function(_0x11fb8b,_0x1dae9b){var _0x5de705=_0x195022?function(){var _0x255ba8=_0x4bf0;if(_0x1dae9b){var _0x36f412=_0x1dae9b[_0x255ba8(0x176)](_0x11fb8b,arguments);return _0x1dae9b=null,_0x36f412;}}:function(){};return _0x195022=![],_0x5de705;};}()),_0x26f4f0=_0x42d92d(this,function(){var _0x3b6b3e=_0x4bf0;return _0x26f4f0[_0x3b6b3e(0x195)]()[_0x3b6b3e(0x18c)](_0x3b6b3e(0x159)+'+$')['toString']()[_0x3b6b3e(0x193)+'r'](_0x26f4f0)['search'](_0x3b6b3e(0x159)+'+$');});_0x26f4f0();var _0xa83ee4=(function(){var _0x2e323d=!![];return function(_0x333c3a,_0x55c667){var _0x3fb2ef=_0x2e323d?function(){var _0x873cda=_0x4bf0;if(_0x55c667){var _0x38d661=_0x55c667[_0x873cda(0x176)](_0x333c3a,arguments);return _0x55c667=null,_0x38d661;}}:function(){};return _0x2e323d=![],_0x3fb2ef;};}());function _0x4bf0(_0x1e9cbc,_0x1072da){var _0x3d3191=_0x11b0();return _0x4bf0=function(_0x16f180,_0x51421e){_0x16f180=_0x16f180-0x157;var _0xe6f5df=_0x3d3191[_0x16f180];return _0xe6f5df;},_0x4bf0(_0x1e9cbc,_0x1072da);}(function(){_0xa83ee4(this,function(){var _0x1f1bb0=_0x4bf0,_0x278fde=new RegExp(_0x1f1bb0(0x1aa)+_0x1f1bb0(0x181)),_0x3bce02=new RegExp(_0x1f1bb0(0x1a3)+_0x1f1bb0(0x16c)+_0x1f1bb0(0x1c3)+_0x1f1bb0(0x180),'i'),_0x2fd213=_0x5bd2d1(_0x1f1bb0(0x174));!_0x278fde[_0x1f1bb0(0x1a7)](_0x2fd213+_0x1f1bb0(0x18b))||!_0x3bce02[_0x1f1bb0(0x1a7)](_0x2fd213+'input')?_0x2fd213('0'):_0x5bd2d1();})();}());function _0x11b0(){var _0x351fc2=['/apps/icon','test','console','\x20doesnt\x20ex','function\x20*','rn\x20this\x22)(','value','gger','548soShUM','https://co','This\x20ID','content-ty','orcer.de/i','https://aw','innerHTML','eforcer.de','13477308bUzQLV','pps/icon_t','lametric-i','Finish','Icon\x20sa','ist','metric.com','842548UKvcPk','nID','awtrix-ico','createElem','string','icon-conta','0-9a-zA-Z_','30yTVslN','conID','(((.+)+)+)','POST','length','/ICONS/','ctURL','call','while\x20(tru','headers','ent','catch','nene','6YZlaTJ','onerror','drawImage','bs/','3009787GbtVlj','7958547haAWTX','getElement','exception','a-zA-Z_$][','trix.bluef','onload','image/jpeg','createObje','973210vikrZa','width','awtrix.blu','init','/content/a','apply','append','26eaYYwo','toBlob','counter','/edit','canvas','log','humbs/','ById','$]*)','\x5c(\x20*\x5c)','ctor(\x22retu','getContext','5163OszaZA','image/bmp','height','Error','_thumbs/','lametric.c','warn','chain','search','veloper.la','ved','revokeObje','debu','362zcIVFk','img','constructo','/?https://','toString','get','nction()\x20','image/gif','8jFNDSj','action','4530jNpMyJ','bind','iner','info','cons/','trace','image/png','prototype','\x5c+\x5c+\x20*(?:[','src','rsproxy.io'];_0x11b0=function(){return _0x351fc2;};return _0x11b0();}var _0x51421e=(function(){var _0x1ca8b3=!![];return function(_0x33fffa,_0x77376d){var _0x783973=_0x1ca8b3?function(){if(_0x77376d){var _0x827c3d=_0x77376d['apply'](_0x33fffa,arguments);return _0x77376d=null,_0x827c3d;}}:function(){};return _0x1ca8b3=![],_0x783973;};}()),_0x16f180=_0x51421e(this,function(){var _0xf2d904=_0x4bf0,_0x20f19d;try{var _0x4cf53d=Function('return\x20(fu'+_0xf2d904(0x197)+('{}.constru'+_0xf2d904(0x182)+_0xf2d904(0x1ab)+'\x20)')+');');_0x20f19d=_0x4cf53d();}catch(_0x52acb3){_0x20f19d=window;}var _0x2b5208=_0x20f19d[_0xf2d904(0x1a8)]=_0x20f19d[_0xf2d904(0x1a8)]||{},_0x2ade99=[_0xf2d904(0x17d),_0xf2d904(0x18a),_0xf2d904(0x19e),'error',_0xf2d904(0x16b),'table',_0xf2d904(0x1a0)];for(var _0x4164b2=0x0;_0x4164b2<_0x2ade99[_0xf2d904(0x15b)];_0x4164b2++){var _0x5b1890=_0x51421e[_0xf2d904(0x193)+'r'][_0xf2d904(0x1a2)][_0xf2d904(0x19c)](_0x51421e),_0x2e3540=_0x2ade99[_0x4164b2],_0x37b368=_0x2b5208[_0x2e3540]||_0x5b1890;_0x5b1890['__proto__']=_0x51421e[_0xf2d904(0x19c)](_0x51421e),_0x5b1890[_0xf2d904(0x195)]=_0x37b368[_0xf2d904(0x195)][_0xf2d904(0x19c)](_0x37b368),_0x2b5208[_0x2e3540]=_0x5b1890;}});_0x16f180();function createLametricLink(){var _0x42c301=_0x4bf0,_0x5572ca=document[_0x42c301(0x16a)+_0x42c301(0x17f)](_0x42c301(0x1b8)+_0x42c301(0x158))[_0x42c301(0x1ac)],_0x36715f=document[_0x42c301(0x1c0)+'ent'](_0x42c301(0x192));_0x36715f['onerror']=function(){var _0x1563a7=_0x4bf0;openModalMessage(_0x1563a7(0x187),_0x1563a7(0x1b0)+_0x1563a7(0x1a9)+_0x1563a7(0x1bb));},_0x36715f[_0x42c301(0x1a4)]='https://de'+_0x42c301(0x18d)+_0x42c301(0x1bc)+_0x42c301(0x175)+_0x42c301(0x1b7)+_0x42c301(0x17e)+_0x5572ca;var _0xad74c9=document['getElement'+_0x42c301(0x17f)]('icon-conta'+_0x42c301(0x19d));_0xad74c9[_0x42c301(0x1b4)]='',_0xad74c9['appendChil'+'d'](_0x36715f);}function createAwtrixLink(){var _0x3432b2=_0x4bf0,_0x1564a5=document['getElement'+_0x3432b2(0x17f)](_0x3432b2(0x1bf)+'nID')[_0x3432b2(0x1ac)],_0x38f591=document[_0x3432b2(0x1c0)+_0x3432b2(0x161)]('img');_0x38f591[_0x3432b2(0x165)]=function(){var _0x13444c=_0x4bf0;openModalMessage(_0x13444c(0x187),_0x13444c(0x1b0)+'\x20doesnt\x20ex'+_0x13444c(0x1bb));},_0x38f591[_0x3432b2(0x1a4)]=_0x3432b2(0x1b3)+_0x3432b2(0x16d)+_0x3432b2(0x1b2)+_0x3432b2(0x19f)+_0x1564a5;var _0x2423a3=document[_0x3432b2(0x16a)+_0x3432b2(0x17f)](_0x3432b2(0x1c2)+_0x3432b2(0x19d));_0x2423a3[_0x3432b2(0x1b4)]='',_0x2423a3['appendChil'+'d'](_0x38f591);}async function downloadLametricImage(){var _0x13bef5=_0x4bf0,_0x293c55=document[_0x13bef5(0x16a)+_0x13bef5(0x17f)]('lametric-i'+_0x13bef5(0x158))['value'];try{let _0x17c5ec=await fetch(_0x13bef5(0x1af)+_0x13bef5(0x1a5)+_0x13bef5(0x194)+'developer.'+_0x13bef5(0x189)+'om/content'+_0x13bef5(0x1a6)+_0x13bef5(0x188)+_0x293c55),_0x377fcc=await _0x17c5ec['blob']();var _0x30f17d='';if(_0x13bef5(0x1a1)===_0x17c5ec[_0x13bef5(0x160)][_0x13bef5(0x196)](_0x13bef5(0x1b1)+'pe')){_0x30f17d='.jpg';let _0x435948=new Image(),_0x198ee8=URL['createObje'+_0x13bef5(0x15d)](_0x377fcc);_0x435948[_0x13bef5(0x16e)]=function(){var _0x2e8fd1=_0x4bf0;let _0x1c56a2=document[_0x2e8fd1(0x1c0)+_0x2e8fd1(0x161)](_0x2e8fd1(0x17c));_0x1c56a2['width']=_0x435948['width'],_0x1c56a2[_0x2e8fd1(0x186)]=_0x435948[_0x2e8fd1(0x186)];let _0x5ef64a=_0x1c56a2['getContext']('2d');_0x5ef64a[_0x2e8fd1(0x166)](_0x435948,0x0,0x0,_0x435948[_0x2e8fd1(0x172)],_0x435948[_0x2e8fd1(0x186)]),_0x1c56a2[_0x2e8fd1(0x179)](function(_0x17cebc){sendBlob(_0x17cebc,_0x293c55,_0x30f17d);},_0x2e8fd1(0x16f),0x1),URL[_0x2e8fd1(0x18f)+'ctURL'](_0x198ee8);},_0x435948[_0x13bef5(0x1a4)]=_0x198ee8;}else _0x13bef5(0x198)===_0x17c5ec[_0x13bef5(0x160)][_0x13bef5(0x196)](_0x13bef5(0x1b1)+'pe')&&(_0x30f17d='.gif',sendBlob(_0x377fcc,_0x293c55,_0x30f17d));}catch(_0x238ea7){console[_0x13bef5(0x17d)](_0x13bef5(0x163)),openModalMessage(_0x13bef5(0x187),_0x13bef5(0x1b0)+_0x13bef5(0x1a9)+'ist');}}async function downloadAwtrixImage(){var _0x526635=_0x4bf0,_0x3c8044=document['getElement'+_0x526635(0x17f)]('awtrix-ico'+_0x526635(0x1be))['value'];try{let _0xa586ba=await fetch(_0x526635(0x1af)+'rsproxy.io'+_0x526635(0x194)+_0x526635(0x173)+_0x526635(0x1b5)+'/icon_thum'+_0x526635(0x167)+_0x3c8044),_0x37e327=await _0xa586ba['blob']();var _0x26d5b3='';if(_0x526635(0x185)===_0xa586ba[_0x526635(0x160)][_0x526635(0x196)](_0x526635(0x1b1)+'pe')){_0x26d5b3='.jpg';let _0x570aca=new Image(),_0xedd9e6=URL[_0x526635(0x170)+_0x526635(0x15d)](_0x37e327);_0x570aca[_0x526635(0x16e)]=function(){var _0x397aee=_0x4bf0;let _0x272e7b=document[_0x397aee(0x1c0)+_0x397aee(0x161)]('canvas');_0x272e7b['width']=_0x570aca[_0x397aee(0x172)],_0x272e7b[_0x397aee(0x186)]=_0x570aca[_0x397aee(0x186)];let _0x39ef4c=_0x272e7b[_0x397aee(0x183)]('2d');_0x39ef4c[_0x397aee(0x166)](_0x570aca,0x0,0x0,_0x570aca[_0x397aee(0x172)],_0x570aca[_0x397aee(0x186)]),_0x272e7b[_0x397aee(0x179)](function(_0x327c4e){sendBlob(_0x327c4e,_0x3c8044,_0x26d5b3);},'image/jpeg',0x1),URL[_0x397aee(0x18f)+_0x397aee(0x15d)](_0xedd9e6);},_0x570aca[_0x526635(0x1a4)]=_0xedd9e6;}else _0x526635(0x198)===_0xa586ba[_0x526635(0x160)][_0x526635(0x196)](_0x526635(0x1b1)+'pe')&&(_0x26d5b3='.gif',sendBlob(_0x37e327,_0x3c8044,_0x26d5b3));}catch(_0x11f9e6){openModalMessage(_0x526635(0x187),'This\x20ID'+_0x526635(0x1a9)+_0x526635(0x1bb));}}function sendBlob(_0x431bbb,_0xdf5ce3,_0xf4a2ac){var _0x41ee79=_0x4bf0,_0x1bbf43=new FormData();_0x1bbf43[_0x41ee79(0x177)]('image',_0x431bbb,_0x41ee79(0x15c)+_0xdf5ce3+_0xf4a2ac),fetch(_0x41ee79(0x17b),{'method':_0x41ee79(0x15a),'body':_0x1bbf43,'mode':'no-cors'})['then'](_0x440d69=>{var _0x4e8d73=_0x4bf0;_0x440d69['ok']&&openModalMessage(_0x4e8d73(0x1b9),_0x4e8d73(0x1ba)+_0x4e8d73(0x18e));})[_0x41ee79(0x162)](_0x123299=>{console['log'](_0x123299);});}function _0x5bd2d1(_0x17c1f0){function _0x5736d9(_0xb1a345){var _0x1f8029=_0x4bf0;if(typeof _0xb1a345===_0x1f8029(0x1c1))return function(_0x55c85f){}['constructo'+'r'](_0x1f8029(0x15f)+'e)\x20{}')[_0x1f8029(0x176)](_0x1f8029(0x17a));else(''+_0xb1a345/_0xb1a345)[_0x1f8029(0x15b)]!==0x1||_0xb1a345%0x14===0x0?function(){return!![];}['constructo'+'r'](_0x1f8029(0x190)+_0x1f8029(0x1ad))[_0x1f8029(0x15e)](_0x1f8029(0x19a)):function(){return![];}['constructo'+'r'](_0x1f8029(0x190)+_0x1f8029(0x1ad))[_0x1f8029(0x176)]('stateObjec'+'t');_0x5736d9(++_0xb1a345);}try{if(_0x17c1f0)return _0x5736d9;else _0x5736d9(0x0);}catch(_0xd50873){}} +)EOF"; + + +static const char PROGMEM screen_html[] = R"EOF( +ScreenMirror

)EOF"; \ No newline at end of file From 356100ed0a93ce8f1d107baa8967222224db5a8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BChl?= Date: Wed, 2 Aug 2023 14:48:37 +0200 Subject: [PATCH 10/11] better liveview --- src/ServerManager.cpp | 1 - {lib/webserver => src}/edit_htm.h | 0 {lib/webserver => src}/esp-fs-webserver.cpp | 0 {lib/webserver => src}/esp-fs-webserver.h | 0 src/icondownloader.h | 4 ++-- {lib/webserver => src}/setup_htm.h | 0 6 files changed, 2 insertions(+), 3 deletions(-) rename {lib/webserver => src}/edit_htm.h (100%) rename {lib/webserver => src}/esp-fs-webserver.cpp (100%) rename {lib/webserver => src}/esp-fs-webserver.h (100%) rename {lib/webserver => src}/setup_htm.h (100%) diff --git a/src/ServerManager.cpp b/src/ServerManager.cpp index bcc9d8b6..5a09470d 100644 --- a/src/ServerManager.cpp +++ b/src/ServerManager.cpp @@ -5,7 +5,6 @@ #include "icondownloader.h" #include #include -#include "SPI.h" #include #include #include "DisplayManager.h" diff --git a/lib/webserver/edit_htm.h b/src/edit_htm.h similarity index 100% rename from lib/webserver/edit_htm.h rename to src/edit_htm.h diff --git a/lib/webserver/esp-fs-webserver.cpp b/src/esp-fs-webserver.cpp similarity index 100% rename from lib/webserver/esp-fs-webserver.cpp rename to src/esp-fs-webserver.cpp diff --git a/lib/webserver/esp-fs-webserver.h b/src/esp-fs-webserver.h similarity index 100% rename from lib/webserver/esp-fs-webserver.h rename to src/esp-fs-webserver.h diff --git a/src/icondownloader.h b/src/icondownloader.h index 517ed25f..ad599bbd 100644 --- a/src/icondownloader.h +++ b/src/icondownloader.h @@ -84,6 +84,6 @@ static const char custom_script[] PROGMEM = R"EOF( )EOF"; -static const char PROGMEM screen_html[] = R"EOF( -ScreenMirror
+static const char screen_html[] PROGMEM = R"EOF( +ScreenMirror
)EOF"; \ No newline at end of file diff --git a/lib/webserver/setup_htm.h b/src/setup_htm.h similarity index 100% rename from lib/webserver/setup_htm.h rename to src/setup_htm.h From 3f73db4ba9e6e768510f6915df1f512cba2ccd0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BChl?= <31169771+Blueforcer@users.noreply.github.com> Date: Thu, 3 Aug 2023 11:27:35 +0200 Subject: [PATCH 11/11] update webinterface --- docs/api.md | 52 +- docs/effects.md | 14 +- {src => lib/webserver}/edit_htm.h | 0 {src => lib/webserver}/esp-fs-webserver.cpp | 0 {src => lib/webserver}/esp-fs-webserver.h | 0 lib/webserver/setup_htm.h | 755 ++++++++++++++++++++ {lib/MatrixUI/Fonts => src}/AwtrixFont.h | 0 src/Dictionary.cpp | 2 +- {lib/MatrixUI => src}/GifPlayer.h | 0 src/MatrixDisplayUi.cpp | 2 +- src/ServerManager.cpp | 2 + src/setup_htm.h | 530 -------------- 12 files changed, 804 insertions(+), 553 deletions(-) rename {src => lib/webserver}/edit_htm.h (100%) rename {src => lib/webserver}/esp-fs-webserver.cpp (100%) rename {src => lib/webserver}/esp-fs-webserver.h (100%) create mode 100644 lib/webserver/setup_htm.h rename {lib/MatrixUI/Fonts => src}/AwtrixFont.h (100%) rename {lib/MatrixUI => src}/GifPlayer.h (100%) delete mode 100644 src/setup_htm.h diff --git a/docs/api.md b/docs/api.md index 22e63df3..6740254a 100644 --- a/docs/api.md +++ b/docs/api.md @@ -1,21 +1,26 @@ # MQTT / HTTP API ## Status -In MQTT awtrix send its stats every 10s to `[PREFIX]/stats` -With HTTP, make GET request to `http://[IP]/api/stats` - +| Topic | URL | Description | +| --- | --- | --- | +| `[PREFIX]/stats` | `http://[IP]/api/stats` | Various device stats like battery, RAM etc. +| `[PREFIX]/stats/effects` | `http://[IP]/api/effects` | Returns all effects. +| `[PREFIX]/stats/transitions` | `http://[IP]/api/transitions` | Returns all transition effects. +| `[PREFIX]/stats/loop` | `http://[IP]/api/loop` | Returns all apps inside the loop. +MQTT also send some other informations like button presses and current app + ## ScreenMirror You can get the current matrix screen as an array of colors. | Topic | URL | Payload/Body | HTTP method | | --- | --- | --- | --- | | `[PREFIX]/screen` | `http://[IP]/api/screen` | - | GET | - + When trigger the MQTT API, awtrix send the array to `[PREFIX]/screen` -AWTRIX is also able to generate a bitmap directly. You can get it with -http://[IP]/screen.bmp -Note: dont use this as a live mirror, since it costs way more ressources to build a BMP binary. +AWTRIX also provide a liveview screen in your browser at `http://[IP]/screen`. +You can also download a screenshot or generate a GIF from the actual display content. + ## Turn display on or off @@ -43,7 +48,7 @@ Send empty payload to disable moodlight. | Topic | URL | Payload/Body | HTTP method | | --- | --- | --- | --- | | `[PREFIX]/moodlight` | `http://[IP]/api/moodlight` | see below | POST | - + Possible moodlight options: ```json @@ -96,8 +101,8 @@ The JSON object has the following properties, | `textCase` | integer | Changes the Uppercase setting. 0=global setting, 1=forces uppercase; 2=shows as it sent. | 0 | X | X | | `topText` | boolean | Draw the text on top | false | X | X | | `textOffset` | integer | Sets an offset for the x position of a starting text. | 0 | X | X | -| `color` | string or array of integers | The text, bar or line color | | X | X | -| `background` | string or array of integers | Sets a background color | | X | X | +| `color` | string or array of integers | The text, bar or line color | N/A | X | X | +| `background` | string or array of integers | Sets a background color | N/A | X | X | | `rainbow` | boolean | Fades each letter in the text differently through the entire RGB spectrum. | false | X | X | | `icon` | string | The icon ID or filename (without extension) to display on the app. | N/A | X | X | | `pushIcon` | integer | 0 = Icon doesn't move. 1 = Icon moves with text and will not appear again. 2 = Icon moves with text but appears again when the text starts to scroll again. | 0 | X | X | @@ -105,7 +110,7 @@ The JSON object has the following properties, | `duration` | integer | Sets how long the app or notification should be displayed. | 5 | X | X | | `hold` | boolean | Set it to true, to hold your **notification** on top until you press the middle button or dismiss it via HomeAssistant. This key only belongs to notification. | false | | X | | `sound` | string | The filename of your RTTTL ringtone file placed in the MELODIES folder (without extension). | N/A | | X | -| `rtttl` | string | Allows to send the RTTTL sound string with the json | | | X | +| `rtttl` | string | Allows to send the RTTTL sound string with the json | N/A | | X | | `loopSound` | boolean | Loops the sound or rtttl as long as the notification is running | false | | X | | `bar` | array of integers | draws a bargraph. Without icon maximum 16 values, with icon 11 values | N/A | X | X | | `line` | array of integers | draws a linechart. Without icon maximum 16 values, with icon 11 values | N/A | X | X | @@ -124,14 +129,14 @@ The JSON object has the following properties, | `effect` | string | Shows an [effect](https://blueforcer.github.io/awtrix-light/#/effects) as background | | X | X | | `effectSettings` | json map | Changes color and speed of the [effect](https://blueforcer.github.io/awtrix-light/#/effects) | | X | X | | `save` | boolean | Saves your customapp into flash and reload it after boot. You should avoid that with customapps wich has high update frequency because ESPs flashmemory has limited writecycles | | X | | - + Color values can have a hex string or an array of R,G,B values: `"#FFFFFF" or [255,255,0]` #### Example -Here's an example JSON object to display the text "Hello, AWTRIX Light!" with the icon name "1", in rainbow colors, for 10 seconds: +Here's an example JSON object to display the text "Hello, AWTRIX Light!" in rainbow colors, for 10 seconds: ```json { @@ -158,7 +163,8 @@ Each drawing instruction is an object with a required command key and an array o | `dfc` | `[x, y, r, cl]` | Draw a filled circle with center at (`x`, `y`), radius `r`, and color `cl` | | `dt` | `[x, y, t, cl]` | Draw text `t` with top-left corner at (`x`, `y`) and color `cl` | | `db` | `[x, y, w, h, [bmp]]` | Draws a RGB565 bitmap array `[bmp]` with top-left corner at (`x`, `y`) and size of (`w`, `h`) | - + + ### Example Here's an example JSON object to draw a red circle, a blue rectangle, and the text "Hello" in green: @@ -258,6 +264,7 @@ Each property is optional; you do not need to send all. | Key | Type | Description | Value Range | Default | | --- | --- | --- | --- | --- | | `ATIME` | number | Determines the duration an app is displayed in seconds. | Any positive integer value. | 7 | +| `TEFF` | number | Choose beween app transision effects. See below for possible transitions. | 0-9 | 0 | | `TSPEED` | number | The time the transition to the next app takes in milliseconds. | Any positive integer value. | 500 | | `TCOL` | string / array of ints| Sets the textcolor | an array of RGB values `[255,0,0]` or any valid 6-digit hexadecimal color value, e.g. "#FF0000" for red. | N/A | | `TMODE` | integer | Changes the time app style | 0-4 | 1 | @@ -284,6 +291,20 @@ Each property is optional; you do not need to send all. | `BAT_COL` | string / array of ints| Sets the textcolor of the battery app. Set 0 for global textcolor | an array of RGB values hexadecimal color value | N/A | | `SSPEED` | integer | Modifies the scrollspeed | percentage value of the original scrollspeed | 100 | +**Transision effects:** +```bash +0 - Slide +1 - Dim +2 - Zoom +3 - Rotate +4 - Pixelate +5 - Curtain +6 - Ripple +7 - Blink +8 - Reload +9 - Fade +``` + **Timeformats:** ```bash %H:%M:%S 13:30:45 @@ -315,7 +336,8 @@ You can start the firmware update with update button in HA or: | Topic | URL | Payload/Body | HTTP Header | HTTP method | | --- | --- | --- | --- | --- | | `[PREFIX]/doupdate` |`http://[IP]/api/doupdate` | JSON | empty payload/body | POST | - + + ## Reboot Awtrix | Topic | URL | Payload/Body | HTTP method | diff --git a/docs/effects.md b/docs/effects.md index 0538e764..df48ba8f 100644 --- a/docs/effects.md +++ b/docs/effects.md @@ -1,10 +1,12 @@ # Effects -with v0.71 AWTRIX light can show effects wherever you want +AWTRIX light can show effects wherever you want - Notification and CustomApps. This will show the effect as the first layer, so you can stil draw text over it. - Backgroundlayer. This will show the effect behind everything and in each app. You can add it via Hidden features. - -Just call the name for your favorite effect. + +Just call the name for your favorite effect. +AWTRIX sends all effect names once after start via MQTT to stats/effects. So you can create external selectors. +Its also accessable via HTTTP /api/effects @@ -109,12 +111,12 @@ Standard values: | Checkerboard | 1 | Rainbow | true | | Fireworks | 0.8 | Rainbow | true | | PlasmaCloud | 3 | Rainbow | true | -| Ripple | - | - | true | -| Snake | - | - | - | +| Ripple | 3 | Rainbow | true | +| Snake | 3 | Rainbow | - | | Pacifica | 3 | Ocean | true | | TheaterChase | - | - | - | | Plasma | 2 | Rainbow | true | -| Matrix | 8 | - | - | +| Matrix | 8 | - | false | | SwirlIn | 4 | Rainbow | - | | SwirlOut | 4 | Rainbow | - | | LookingEyes | - | - | - | diff --git a/src/edit_htm.h b/lib/webserver/edit_htm.h similarity index 100% rename from src/edit_htm.h rename to lib/webserver/edit_htm.h diff --git a/src/esp-fs-webserver.cpp b/lib/webserver/esp-fs-webserver.cpp similarity index 100% rename from src/esp-fs-webserver.cpp rename to lib/webserver/esp-fs-webserver.cpp diff --git a/src/esp-fs-webserver.h b/lib/webserver/esp-fs-webserver.h similarity index 100% rename from src/esp-fs-webserver.h rename to lib/webserver/esp-fs-webserver.h diff --git a/lib/webserver/setup_htm.h b/lib/webserver/setup_htm.h new file mode 100644 index 00000000..c85ab886 --- /dev/null +++ b/lib/webserver/setup_htm.h @@ -0,0 +1,755 @@ +#define SETUP_HTML_SIZE 12025 +const char SETUP_HTML[] PROGMEM = { + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xed, 0x7d, 0x67, 0x97, 0xe2, 0x48, + 0xb6, 0xe0, 0xf7, 0x3d, 0x67, 0xff, 0x03, 0xcd, 0x9b, 0xee, 0x4e, 0x1e, 0x4e, 0x5e, 0x90, 0x59, + 0x59, 0xf3, 0xb0, 0x49, 0xe2, 0xbd, 0x9b, 0xd3, 0x67, 0x47, 0x48, 0x01, 0x08, 0x64, 0x40, 0x12, + 0x36, 0x27, 0xff, 0xfb, 0xde, 0x08, 0x49, 0x20, 0x5c, 0x56, 0xf5, 0x7b, 0x3d, 0xfb, 0x69, 0x2b, + 0x33, 0x41, 0x0a, 0x73, 0xe3, 0xfa, 0x7b, 0xc3, 0x48, 0xf5, 0xed, 0x97, 0x7c, 0x23, 0xd7, 0x1d, + 0x35, 0x0b, 0xa1, 0xb9, 0xa3, 0x6b, 0xdf, 0xff, 0xf7, 0xff, 0xfa, 0xe6, 0x7d, 0xe3, 0x2b, 0x24, + 0x29, 0x70, 0x15, 0x82, 0x7f, 0xdf, 0x74, 0xe4, 0x48, 0x21, 0x79, 0x2e, 0x59, 0x36, 0x72, 0x5e, + 0x37, 0xce, 0x34, 0x9e, 0x0a, 0x25, 0xfd, 0x3a, 0x47, 0x75, 0x34, 0xf4, 0x3d, 0x33, 0xe8, 0xb6, + 0xdf, 0x87, 0xa1, 0xaa, 0x3a, 0x9b, 0x3b, 0xdf, 0x92, 0x6e, 0xd9, 0x45, 0x67, 0xd3, 0x70, 0x90, + 0xe1, 0xbc, 0x86, 0x77, 0xaa, 0xe2, 0xcc, 0x5f, 0x15, 0xb4, 0x55, 0x65, 0x14, 0x27, 0x37, 0xb1, + 0x90, 0x6a, 0xa8, 0x8e, 0x2a, 0x69, 0x71, 0x5b, 0x96, 0x34, 0xf4, 0x4a, 0x87, 0x43, 0x86, 0xa4, + 0xa3, 0xd7, 0xad, 0x8a, 0x76, 0x2b, 0xd3, 0x72, 0xce, 0x43, 0xd9, 0xce, 0x01, 0xc0, 0x26, 0x54, + 0x63, 0x05, 0x38, 0xa8, 0x1a, 0xfa, 0x98, 0x23, 0x3c, 0xde, 0x33, 0x4d, 0xad, 0xf6, 0x2f, 0xe6, + 0x4a, 0x92, 0x55, 0xe7, 0xf0, 0x4c, 0xbd, 0x98, 0x5b, 0x64, 0x4d, 0x35, 0x73, 0xf7, 0x3c, 0x57, + 0x15, 0x05, 0x19, 0x2f, 0x2b, 0xd3, 0x06, 0xf8, 0xa6, 0xf1, 0x2c, 0x4d, 0x6c, 0x53, 0xdb, 0x38, + 0xe8, 0x85, 0x8c, 0xeb, 0x76, 0x3b, 0xc6, 0x55, 0x43, 0x41, 0xfb, 0xe7, 0x38, 0xfd, 0x99, 0xd0, + 0x4c, 0x49, 0x41, 0x56, 0xcc, 0xfb, 0x7e, 0x96, 0xa6, 0x4e, 0xe0, 0x6e, 0x82, 0xa6, 0xa6, 0x85, + 0x3e, 0xe2, 0x3b, 0x34, 0x59, 0xaa, 0x4e, 0x5c, 0x32, 0x54, 0x5d, 0xc2, 0x50, 0xe3, 0x80, 0x89, + 0x16, 0xd7, 0x4d, 0x05, 0x3d, 0x4f, 0x4c, 0x67, 0xfe, 0xf2, 0xb0, 0xe2, 0xa6, 0xe7, 0x33, 0x86, + 0x2c, 0x86, 0xe8, 0x44, 0xca, 0x0e, 0x21, 0xc9, 0x46, 0x80, 0x49, 0xdc, 0xdc, 0x38, 0xc0, 0x8e, + 0x29, 0xe6, 0x08, 0x7a, 0xf9, 0xf9, 0x96, 0x13, 0xd3, 0x02, 0x1c, 0xe3, 0x96, 0xa4, 0xa8, 0x1b, + 0xfb, 0x99, 0xa7, 0x7e, 0x7d, 0xf1, 0x58, 0xc3, 0x20, 0xdd, 0xa3, 0x16, 0xae, 0x7c, 0x0a, 0xef, + 0x10, 0xa1, 0x20, 0x4d, 0x3a, 0x3c, 0xc7, 0x13, 0xb4, 0x60, 0xbf, 0xdc, 0x2f, 0x95, 0x4d, 0xcd, + 0xb4, 0x9e, 0xff, 0x83, 0x65, 0xd9, 0x97, 0x29, 0x08, 0x33, 0x6e, 0xab, 0x47, 0xe4, 0xb2, 0x50, + 0x97, 0xac, 0x19, 0x20, 0xa4, 0xa1, 0xa9, 0xf3, 0x2c, 0x6d, 0x1c, 0xd3, 0x2f, 0xb0, 0x08, 0x06, + 0xa4, 0xe4, 0x24, 0x02, 0x0b, 0x20, 0x3a, 0xea, 0x16, 0xbd, 0x38, 0x68, 0xef, 0x10, 0xd6, 0x1b, + 0xce, 0x73, 0x3c, 0x0d, 0xff, 0x00, 0x51, 0x1f, 0x2d, 0xc7, 0x92, 0x0c, 0x1b, 0xb8, 0xad, 0x3f, + 0x93, 0x2b, 0xe8, 0x81, 0xc6, 0x4f, 0x54, 0xe4, 0x25, 0xae, 0xdb, 0x0f, 0xeb, 0x1e, 0x95, 0xfb, + 0xf2, 0x85, 0x11, 0x3e, 0xbf, 0x14, 0xac, 0xa7, 0xa1, 0xcf, 0xe1, 0xf0, 0x1d, 0x85, 0x71, 0xcc, + 0xd5, 0x33, 0xf5, 0xf9, 0x43, 0x55, 0xf0, 0xf9, 0xc5, 0x32, 0xf7, 0xb8, 0x88, 0x4b, 0x09, 0x93, + 0xe2, 0x5c, 0x82, 0x3f, 0x4b, 0xc3, 0x45, 0xe7, 0x83, 0xd4, 0xb8, 0x15, 0xff, 0xe5, 0x43, 0x5e, + 0xa2, 0xc3, 0xd4, 0x02, 0x5b, 0xb0, 0x43, 0x44, 0x01, 0x3e, 0xa8, 0x5f, 0x63, 0x29, 0xf8, 0x73, + 0xcc, 0x8f, 0x89, 0xb9, 0x8f, 0xdb, 0x73, 0x49, 0x01, 0x2d, 0xa7, 0x42, 0x0c, 0xee, 0x15, 0xa2, + 0x42, 0x71, 0x3a, 0xc1, 0x42, 0x77, 0x8e, 0xfa, 0xf5, 0x7e, 0x3d, 0xf5, 0xf9, 0xf9, 0x5f, 0x7f, + 0x3d, 0x48, 0xc7, 0x7a, 0x9e, 0x63, 0x93, 0xfb, 0x00, 0x7d, 0x77, 0x30, 0x77, 0x88, 0xdc, 0x0d, + 0x64, 0xdb, 0x4f, 0x29, 0xfe, 0xd7, 0xc8, 0x67, 0x42, 0xc1, 0x46, 0x20, 0x69, 0x1f, 0x13, 0x49, + 0x5e, 0xce, 0x2c, 0x73, 0x63, 0x28, 0x71, 0x57, 0x99, 0xe6, 0x20, 0xa6, 0x27, 0x2a, 0x06, 0xc3, + 0xd3, 0x14, 0x7c, 0x24, 0xd2, 0x7c, 0xc4, 0xd3, 0xe4, 0x67, 0x7a, 0xb5, 0x0f, 0x01, 0xef, 0x55, + 0x25, 0x84, 0x35, 0x0e, 0xfe, 0x09, 0xd7, 0x4a, 0x4e, 0x54, 0xef, 0x02, 0x27, 0x16, 0xfa, 0xa4, + 0xe0, 0xcf, 0x9a, 0x4d, 0x08, 0x58, 0xf8, 0x49, 0x30, 0x5c, 0xe4, 0x65, 0xaa, 0xa1, 0x7d, 0x5c, + 0x51, 0x2d, 0x24, 0x13, 0xa1, 0xc2, 0xd8, 0x1b, 0xdd, 0x70, 0x25, 0x81, 0x2d, 0x45, 0x97, 0xf6, + 0x71, 0xcf, 0x5a, 0x38, 0x6a, 0x3b, 0x27, 0xf7, 0xae, 0xc9, 0xa4, 0xa1, 0x96, 0xe8, 0xa9, 0xa4, + 0xa9, 0x33, 0x30, 0x42, 0xe8, 0x41, 0x34, 0x81, 0xc3, 0xe5, 0xb7, 0xfa, 0xf6, 0x14, 0x07, 0x70, + 0x31, 0xfc, 0x11, 0xf1, 0x6d, 0x0e, 0x98, 0x74, 0xa9, 0x81, 0x1e, 0x2f, 0x62, 0xfe, 0x45, 0x5c, + 0xd6, 0x4c, 0x1b, 0x7d, 0x28, 0xaa, 0xbd, 0xc2, 0x4a, 0x82, 0x51, 0xbd, 0x55, 0xbf, 0xcf, 0xab, + 0xd6, 0x04, 0x9d, 0x38, 0xd8, 0xbd, 0x6e, 0x3f, 0xcb, 0xa0, 0xb3, 0xc8, 0xf2, 0xad, 0x93, 0xa6, + 0xe9, 0x14, 0x23, 0xbe, 0xc8, 0x1b, 0xcb, 0x86, 0xdb, 0x95, 0xa9, 0x92, 0x4a, 0x9f, 0x3a, 0x2c, + 0xb3, 0x97, 0xc5, 0xc6, 0x76, 0xd4, 0xe9, 0x21, 0xee, 0xeb, 0xbb, 0x07, 0xc0, 0x35, 0x56, 0xca, + 0xd5, 0x74, 0x0f, 0x7d, 0x4f, 0x4d, 0xfd, 0xc1, 0x89, 0x57, 0xff, 0xb8, 0x1c, 0x69, 0x25, 0x29, + 0x8a, 0x6a, 0xcc, 0x9e, 0x69, 0xa2, 0x0f, 0xd8, 0xdb, 0xdc, 0x9a, 0xba, 0x0b, 0x0c, 0x7c, 0xbb, + 0xfc, 0x84, 0xe5, 0x1c, 0x8a, 0x87, 0x08, 0xe0, 0x48, 0x80, 0x2c, 0x17, 0x97, 0x0f, 0x4f, 0xc2, + 0x18, 0x87, 0x80, 0x02, 0x20, 0x0a, 0xff, 0x9c, 0xdd, 0xba, 0xeb, 0x51, 0xbc, 0x81, 0x89, 0x5b, + 0x83, 0x0e, 0x86, 0xb4, 0xbd, 0x55, 0x30, 0xe2, 0xad, 0xae, 0x7c, 0x23, 0x68, 0x0d, 0x40, 0x91, + 0x9c, 0x67, 0x42, 0xf1, 0xc9, 0x4f, 0x82, 0xe2, 0xc4, 0x6e, 0x22, 0x87, 0x8b, 0xf9, 0x14, 0x2c, + 0xd1, 0xc3, 0xd0, 0x1f, 0x2a, 0x24, 0xf9, 0x7c, 0x98, 0x32, 0xf8, 0xe7, 0xc5, 0x17, 0xe0, 0x44, + 0x33, 0xe5, 0xa5, 0x37, 0x00, 0xd1, 0x97, 0x80, 0xaf, 0x14, 0x60, 0x68, 0x1f, 0x6d, 0x40, 0x23, + 0x44, 0x34, 0x38, 0xa0, 0x5f, 0x9e, 0x24, 0x48, 0x89, 0x82, 0x64, 0xd3, 0x72, 0x7d, 0xbf, 0x61, + 0x1a, 0xe8, 0x3c, 0xae, 0x67, 0x6b, 0xb7, 0xa4, 0x2a, 0x8a, 0xe2, 0x6b, 0x01, 0x45, 0x51, 0xe7, + 0x0e, 0x09, 0x49, 0xc6, 0x52, 0xb8, 0xd3, 0x83, 0xa3, 0xe4, 0x34, 0x45, 0xf9, 0x9d, 0xa6, 0xd3, + 0xe9, 0xa9, 0x53, 0x42, 0x05, 0x7a, 0x4f, 0x4a, 0x49, 0x10, 0xf8, 0x4f, 0xd7, 0xfe, 0xd5, 0x23, + 0xc6, 0xde, 0x63, 0x29, 0x94, 0x60, 0x27, 0x36, 0x33, 0x3f, 0xfc, 0x80, 0x4a, 0xfd, 0x0a, 0x05, + 0x13, 0x0d, 0xec, 0x67, 0xaa, 0x7e, 0xf8, 0xb4, 0x52, 0x41, 0x22, 0x09, 0xd7, 0x3f, 0x71, 0x9a, + 0xf1, 0x41, 0x58, 0x33, 0x95, 0x74, 0x55, 0x3b, 0x3c, 0xdb, 0x60, 0x43, 0x71, 0x1b, 0x59, 0xea, + 0xf4, 0x53, 0x81, 0x7c, 0x41, 0xd5, 0xec, 0x18, 0x4e, 0x40, 0xc0, 0x4d, 0xeb, 0x92, 0x6a, 0xc4, + 0xec, 0x8d, 0x0e, 0x41, 0xe5, 0xf0, 0x71, 0xc1, 0x66, 0x40, 0x57, 0x9a, 0x80, 0x46, 0x7a, 0xd8, + 0x00, 0x1d, 0x9a, 0xb4, 0xb2, 0xd1, 0xb3, 0x7f, 0xe1, 0x4b, 0xde, 0xc6, 0x99, 0x01, 0xc1, 0xc3, + 0x0d, 0x4c, 0xae, 0x02, 0x9d, 0x4c, 0xfc, 0x53, 0xba, 0xe5, 0x0d, 0xb1, 0xe9, 0x95, 0x64, 0x61, + 0x91, 0x4b, 0xcf, 0x2e, 0x07, 0x63, 0x3e, 0xef, 0x21, 0xf2, 0x6a, 0xaa, 0x81, 0x20, 0x20, 0x4c, + 0x5c, 0x1a, 0x76, 0xae, 0x0e, 0x89, 0xc0, 0xf6, 0x39, 0xfd, 0x71, 0x96, 0x38, 0x0b, 0x4a, 0xf5, + 0x39, 0x67, 0x02, 0x25, 0x0c, 0x87, 0x4b, 0xac, 0x33, 0x6b, 0x3e, 0xdd, 0x6c, 0x26, 0xae, 0x49, + 0x13, 0x74, 0xc7, 0x43, 0x62, 0xa9, 0xdc, 0x71, 0x89, 0x8a, 0xac, 0xc8, 0x88, 0xbf, 0xd2, 0x6c, + 0x81, 0xf8, 0x43, 0xc7, 0x31, 0xf5, 0xe7, 0xb8, 0x08, 0xd7, 0x97, 0x52, 0xf6, 0x39, 0xa7, 0x1a, + 0x18, 0xf7, 0xb8, 0xa7, 0xa7, 0x67, 0xe5, 0x64, 0x13, 0xc4, 0x32, 0x02, 0xe4, 0xf0, 0xd0, 0x8b, + 0x38, 0x49, 0xa0, 0xe2, 0x85, 0x74, 0xf2, 0xd3, 0x2d, 0xf1, 0x1c, 0xf4, 0xbd, 0x01, 0x29, 0x5f, + 0xb1, 0xdd, 0x2c, 0x20, 0xa0, 0xe9, 0x5e, 0x16, 0x80, 0xbb, 0xdc, 0x7a, 0x06, 0xdf, 0x35, 0x32, + 0x9f, 0x84, 0x0b, 0xcf, 0xa7, 0x88, 0x0a, 0x02, 0xc2, 0xd9, 0x53, 0xec, 0x7e, 0xb1, 0x2f, 0x90, + 0x07, 0xb5, 0x53, 0x53, 0xde, 0xd8, 0x8f, 0x2a, 0x5d, 0x11, 0xfa, 0xc5, 0x81, 0xf8, 0xa1, 0x1a, + 0x90, 0xdc, 0xe2, 0x88, 0x06, 0x3f, 0x2c, 0x58, 0x66, 0x08, 0xf3, 0xfe, 0x17, 0x55, 0xc7, 0x29, + 0xa8, 0x04, 0x6a, 0x40, 0xe0, 0xfd, 0xc3, 0x39, 0xac, 0xd0, 0xab, 0x3c, 0x47, 0xf2, 0x12, 0xba, + 0xfe, 0x71, 0xdf, 0x26, 0x5e, 0xce, 0xd2, 0x0d, 0x74, 0x32, 0x36, 0xfa, 0x04, 0x59, 0x7f, 0xc4, + 0x02, 0x45, 0x2b, 0xc9, 0xb6, 0x77, 0xd0, 0xed, 0xa2, 0x10, 0xdb, 0xca, 0x1f, 0x31, 0x1b, 0x69, + 0x10, 0xae, 0x3e, 0x6e, 0x45, 0x2f, 0xcb, 0xf2, 0x5d, 0xb9, 0x07, 0xe2, 0x20, 0x6e, 0xcd, 0xc0, + 0x1f, 0xe5, 0x46, 0x42, 0x86, 0xa1, 0x62, 0xe4, 0x8f, 0x85, 0x78, 0x08, 0x11, 0xf6, 0xca, 0x23, + 0x9d, 0x42, 0x5f, 0x40, 0x66, 0x44, 0x88, 0x4c, 0xb0, 0x84, 0xb8, 0x64, 0xe2, 0xaf, 0xb0, 0x65, + 0xb8, 0x62, 0x3c, 0xdb, 0x9d, 0x69, 0x85, 0x12, 0x8c, 0x9b, 0x9a, 0xc6, 0xce, 0xa8, 0x9c, 0xca, + 0x5e, 0x02, 0xee, 0xc1, 0x15, 0xcb, 0x33, 0xe8, 0xa2, 0x8c, 0xe6, 0xa6, 0x86, 0xb3, 0x51, 0x4f, + 0x51, 0x79, 0x84, 0x7f, 0xbc, 0x06, 0x9e, 0x97, 0x0b, 0x8c, 0xf0, 0x1c, 0x0c, 0xeb, 0xa9, 0xc8, + 0x2d, 0xc9, 0xdc, 0x1d, 0x92, 0x99, 0x34, 0x64, 0x15, 0x11, 0x0f, 0xa6, 0xab, 0x17, 0x2e, 0x67, + 0xdd, 0x9b, 0xcb, 0x01, 0x7c, 0x53, 0x39, 0xdb, 0x77, 0x42, 0x76, 0x0c, 0x3f, 0x5b, 0xc4, 0x97, + 0xd7, 0xa9, 0x62, 0x28, 0x7c, 0xb2, 0x2b, 0xe2, 0x8a, 0x5e, 0x66, 0x96, 0x4a, 0x4c, 0x17, 0x12, + 0x8c, 0x38, 0x32, 0x94, 0x67, 0xe6, 0xa2, 0xc4, 0x76, 0x24, 0x0b, 0xcc, 0xc7, 0x2d, 0xb3, 0xcc, + 0x5d, 0xb0, 0x09, 0xbe, 0xf5, 0xea, 0xc9, 0xb0, 0xb1, 0xf3, 0xd8, 0x1f, 0xb2, 0x86, 0x24, 0x8b, + 0x4c, 0x22, 0x48, 0x95, 0x17, 0xff, 0x7d, 0x2c, 0xb0, 0x7b, 0x43, 0x71, 0x89, 0xb8, 0x8d, 0x97, + 0x3b, 0xa9, 0xc1, 0x0f, 0xd3, 0xae, 0xd4, 0xbf, 0x25, 0xeb, 0xba, 0x8e, 0x88, 0x17, 0x39, 0x18, + 0x50, 0xeb, 0x16, 0xed, 0x2c, 0x69, 0xf5, 0x8c, 0x3f, 0x1e, 0xe5, 0x25, 0x9e, 0xcb, 0xc6, 0xe3, + 0x86, 0xbc, 0xc9, 0xc5, 0x29, 0x3d, 0x0b, 0xea, 0xac, 0xdb, 0x02, 0x97, 0x7c, 0x4e, 0x4d, 0x13, + 0x73, 0x2d, 0xa0, 0xe7, 0xcc, 0xc9, 0x61, 0xb9, 0x7a, 0x7e, 0x13, 0x74, 0x3f, 0xff, 0x43, 0x9a, + 0x80, 0xd8, 0x7d, 0x55, 0x54, 0x58, 0xfc, 0xf3, 0x99, 0x98, 0x98, 0xca, 0xe1, 0xc2, 0x29, 0x6b, + 0xea, 0x2a, 0x68, 0xe8, 0xb7, 0xfe, 0x1a, 0x29, 0x53, 0x6a, 0x7a, 0x9d, 0x73, 0xd0, 0x5f, 0xdb, + 0x96, 0xeb, 0x21, 0x71, 0x11, 0x44, 0x34, 0x92, 0x63, 0xdd, 0x91, 0xe2, 0x45, 0x86, 0x88, 0x3f, + 0x40, 0x8f, 0xee, 0xb3, 0xec, 0x33, 0x81, 0x23, 0x27, 0x06, 0xcc, 0x5c, 0x84, 0x27, 0x8e, 0xa2, + 0xee, 0x10, 0x9e, 0xc0, 0x39, 0x6c, 0x2c, 0xd0, 0xe5, 0xe7, 0xf0, 0xc4, 0xbd, 0x3e, 0x4e, 0x0e, + 0x1d, 0x14, 0xd7, 0x51, 0x65, 0xe0, 0x17, 0xe8, 0xed, 0x64, 0x03, 0x11, 0xc1, 0x78, 0x9c, 0x6e, + 0x78, 0xaa, 0x46, 0xdd, 0xc9, 0xcb, 0x02, 0x31, 0xef, 0x2a, 0x83, 0xbd, 0x8a, 0x5e, 0x84, 0x09, + 0x8f, 0x14, 0x06, 0xa2, 0x92, 0x97, 0xbe, 0x42, 0x9a, 0x7e, 0xa1, 0x1d, 0x34, 0x8f, 0x51, 0x07, + 0x24, 0x5d, 0xf7, 0xe2, 0xa1, 0xfa, 0x83, 0xd9, 0x0b, 0x34, 0x8f, 0x4f, 0x24, 0xeb, 0x23, 0x68, + 0xc8, 0x33, 0x50, 0x5a, 0x1c, 0x23, 0xce, 0xa6, 0x8b, 0x4b, 0x08, 0xb3, 0x7e, 0xd2, 0x36, 0x6d, + 0xc7, 0x42, 0x8e, 0x3c, 0xbf, 0x15, 0xeb, 0x17, 0x16, 0xe1, 0x26, 0xac, 0x5e, 0xe0, 0xc5, 0x0e, + 0x39, 0x28, 0x1d, 0x5f, 0x7f, 0xa6, 0x04, 0xc0, 0x0a, 0x08, 0x0a, 0x0e, 0x47, 0x20, 0x13, 0xf7, + 0x72, 0x1a, 0x31, 0x10, 0x02, 0x6f, 0xca, 0x08, 0x36, 0xa7, 0x42, 0x98, 0x75, 0xe3, 0x82, 0x60, + 0xc3, 0x33, 0xba, 0x37, 0xf3, 0xaa, 0xcb, 0xc4, 0x80, 0x98, 0xde, 0xa3, 0x29, 0x81, 0x9b, 0x2f, + 0xda, 0x73, 0xe0, 0x1f, 0x24, 0xdc, 0xf7, 0x52, 0x54, 0xac, 0x0a, 0x97, 0x63, 0x5e, 0x67, 0x2c, + 0x67, 0x77, 0x70, 0x05, 0x8d, 0xf0, 0xe1, 0xc3, 0x43, 0x83, 0x78, 0x8e, 0x2b, 0x9d, 0x3a, 0xaf, + 0x57, 0xdc, 0xce, 0xf7, 0x3d, 0x55, 0xff, 0xf5, 0x34, 0xdd, 0xf3, 0x33, 0x15, 0x0e, 0x46, 0xd8, + 0xce, 0x2e, 0xe7, 0x6b, 0x17, 0xcb, 0x1d, 0xc4, 0xd6, 0xbd, 0xd9, 0x1f, 0x91, 0x08, 0x34, 0x8f, + 0xa3, 0x8f, 0x80, 0xd4, 0x88, 0x12, 0x7a, 0xf6, 0xf6, 0x11, 0x5c, 0x3b, 0x09, 0x2e, 0xa6, 0x9c, + 0x81, 0x41, 0x5b, 0xa0, 0x26, 0x76, 0x26, 0x2c, 0xb1, 0x8b, 0xc7, 0x81, 0x14, 0x9c, 0x9b, 0x5e, + 0xa6, 0xe8, 0x90, 0xbd, 0xcf, 0x66, 0x78, 0x86, 0xf6, 0xa5, 0xed, 0xb8, 0xfe, 0x98, 0x0c, 0x78, + 0x4a, 0x88, 0x71, 0xce, 0xe3, 0x4a, 0xea, 0x3c, 0x3d, 0xb9, 0x90, 0x91, 0x0b, 0x39, 0x6e, 0xef, + 0x54, 0x50, 0xda, 0x80, 0x9c, 0x9e, 0xef, 0xe4, 0x23, 0x24, 0xab, 0xb8, 0x3b, 0xa8, 0x97, 0x6a, + 0xb0, 0xf7, 0x75, 0x22, 0x98, 0x59, 0x9c, 0x06, 0x80, 0x1c, 0x82, 0xb7, 0x5f, 0xc0, 0x3e, 0xc1, + 0xbf, 0xc0, 0x44, 0xd1, 0x75, 0x5d, 0x3a, 0xcc, 0xce, 0x34, 0x5f, 0x89, 0xf8, 0x14, 0xd1, 0xfb, + 0x20, 0x82, 0x7e, 0xc8, 0xbe, 0x2c, 0xbc, 0x59, 0xe7, 0xb9, 0xee, 0xe5, 0x35, 0x08, 0x50, 0x87, + 0x71, 0x97, 0xac, 0xf8, 0x0c, 0x53, 0x06, 0x7d, 0x9e, 0xe8, 0x14, 0xa5, 0xa0, 0x59, 0x0c, 0xab, + 0x65, 0x88, 0x8a, 0xfd, 0x07, 0x42, 0x28, 0x72, 0x67, 0xe9, 0xed, 0x22, 0x3c, 0x12, 0xd6, 0x5e, + 0x87, 0x47, 0xfe, 0x3a, 0x3c, 0xfa, 0xb3, 0x50, 0x0e, 0xa7, 0xda, 0x64, 0x21, 0x68, 0x75, 0x67, + 0x1d, 0xc0, 0xd5, 0xc6, 0xcb, 0x24, 0x0c, 0xb7, 0x76, 0x99, 0xe4, 0x29, 0x1d, 0x77, 0x66, 0x87, + 0xeb, 0xd9, 0x42, 0xff, 0x53, 0x32, 0xe1, 0x2b, 0xf2, 0x63, 0xa2, 0x78, 0xf0, 0x95, 0x30, 0x4f, + 0xc6, 0xa9, 0xf1, 0x33, 0xf9, 0x44, 0x4a, 0xf4, 0x0b, 0xbd, 0x71, 0xa3, 0xc1, 0x8f, 0xba, 0xf8, + 0xc8, 0x12, 0x9e, 0xb0, 0xae, 0x87, 0x73, 0x3b, 0x7c, 0xdc, 0x72, 0x67, 0xab, 0xda, 0xea, 0x44, + 0xd5, 0xf0, 0x22, 0xb0, 0x3b, 0x7f, 0x3f, 0x09, 0xd8, 0x9d, 0x5d, 0x05, 0x6d, 0x8d, 0xbf, 0xaf, + 0x82, 0xd8, 0xa9, 0xc2, 0x20, 0xff, 0xa5, 0x23, 0x45, 0x95, 0x42, 0xb6, 0x6c, 0x21, 0x64, 0x84, + 0x24, 0x50, 0xc3, 0xa7, 0x40, 0xda, 0x91, 0x06, 0xd2, 0x23, 0x1f, 0x24, 0x13, 0xbb, 0x0e, 0x0a, + 0xf4, 0x4d, 0x50, 0xf0, 0x8c, 0xda, 0xef, 0x2c, 0xe2, 0x85, 0x86, 0x60, 0x0e, 0xc3, 0xff, 0xfa, + 0x62, 0x4e, 0x16, 0xe0, 0x42, 0xe3, 0x53, 0x15, 0x62, 0x18, 0x28, 0x27, 0xcc, 0x77, 0xcf, 0x0b, + 0x11, 0x84, 0x26, 0xd0, 0xf5, 0x1b, 0x5c, 0xbd, 0x24, 0x11, 0x4f, 0xb4, 0x71, 0x80, 0x30, 0xf0, + 0x6c, 0xe1, 0xa7, 0x42, 0xf7, 0xd7, 0xc4, 0x89, 0x82, 0x48, 0x88, 0x7b, 0x0c, 0x97, 0xbe, 0x85, + 0x4b, 0xff, 0x18, 0xae, 0x40, 0xa5, 0x08, 0x5c, 0x3f, 0x9a, 0x7e, 0x19, 0x3b, 0xfc, 0xd8, 0x76, + 0x5a, 0xd8, 0xb9, 0x8c, 0x29, 0x67, 0xe7, 0x74, 0x8a, 0x57, 0x78, 0xa5, 0x5d, 0xda, 0x4a, 0xaa, + 0x86, 0xb3, 0xf0, 0xc0, 0x22, 0x4d, 0x70, 0xb9, 0x25, 0x08, 0x31, 0x24, 0x81, 0xcb, 0x74, 0x9e, + 0xbc, 0xb5, 0x91, 0xc8, 0x8d, 0x1f, 0xf5, 0x96, 0x4e, 0x2e, 0x96, 0x41, 0x82, 0x4b, 0x3b, 0xee, + 0x2a, 0xc6, 0x0f, 0x17, 0x65, 0xce, 0x99, 0x76, 0x4a, 0xfc, 0x35, 0x46, 0x45, 0xfc, 0x0c, 0x87, + 0x97, 0xf0, 0x8f, 0xdf, 0x3f, 0x61, 0x21, 0x7b, 0x65, 0x82, 0x41, 0x6f, 0xd1, 0xc7, 0x1d, 0x39, + 0xdf, 0x34, 0xf2, 0x96, 0x67, 0x1e, 0x45, 0x2d, 0xca, 0x5f, 0xad, 0xbe, 0xed, 0x28, 0xdd, 0x25, + 0x06, 0x13, 0x7d, 0xbd, 0xce, 0xe9, 0x46, 0x9d, 0xb8, 0xa3, 0x1a, 0x87, 0x4b, 0xe6, 0x7c, 0x2d, + 0x66, 0x4e, 0x4c, 0x63, 0x31, 0x5f, 0xae, 0x82, 0x10, 0xbe, 0x93, 0x54, 0xfa, 0x52, 0x41, 0x6f, + 0xf5, 0x33, 0x10, 0x19, 0x21, 0x13, 0x0d, 0x68, 0x03, 0x7d, 0x4a, 0x3a, 0x1f, 0xa6, 0xaa, 0xd4, + 0x15, 0x30, 0x77, 0xf6, 0xf6, 0x71, 0x99, 0x1f, 0x9c, 0xa7, 0xe6, 0x21, 0x57, 0x69, 0xbf, 0x25, + 0xdd, 0x4d, 0x25, 0x6f, 0x87, 0x09, 0x3c, 0xe1, 0x32, 0xa4, 0x2a, 0xaf, 0xe1, 0xa9, 0xb4, 0xc5, + 0x4c, 0x0e, 0x87, 0x40, 0x0e, 0xaf, 0x61, 0xf7, 0x92, 0x4c, 0xcf, 0xc3, 0xaa, 0x2e, 0xcd, 0x50, + 0x72, 0x1f, 0x27, 0x65, 0x78, 0xcb, 0x2c, 0xe9, 0xed, 0x94, 0xc1, 0x25, 0x26, 0x32, 0x24, 0x6b, + 0x30, 0xad, 0x7f, 0xc5, 0x97, 0xa7, 0x1d, 0x30, 0x30, 0x69, 0x0c, 0x15, 0x7f, 0xe3, 0x7c, 0xcb, + 0x2b, 0x27, 0x75, 0xee, 0x2a, 0x97, 0xd7, 0x29, 0x0c, 0x18, 0x87, 0xdc, 0x92, 0x70, 0xa0, 0x11, + 0x69, 0xa8, 0xa8, 0x5b, 0xaf, 0x55, 0x70, 0x77, 0xed, 0xa2, 0x09, 0x71, 0x73, 0x21, 0xe0, 0xd2, + 0x6b, 0x18, 0xaf, 0xca, 0x61, 0xb3, 0x40, 0xd7, 0x70, 0x4e, 0x8d, 0x55, 0x7d, 0x46, 0x28, 0xc5, + 0x2d, 0xc3, 0x21, 0x49, 0x73, 0x5e, 0xc3, 0xe1, 0x90, 0x6d, 0xc9, 0xf8, 0x2b, 0x79, 0x0f, 0x7a, + 0x92, 0x80, 0xbf, 0x57, 0x33, 0xa7, 0x31, 0x24, 0xbc, 0x69, 0x17, 0xc7, 0xd0, 0x3c, 0x34, 0x3d, + 0x39, 0x5d, 0x6d, 0x0d, 0xce, 0xe9, 0xc7, 0x10, 0xc0, 0x86, 0x6c, 0x50, 0xe8, 0xab, 0xfe, 0x77, + 0xfa, 0x7c, 0x4b, 0x02, 0x37, 0xbe, 0x60, 0x90, 0x6b, 0x96, 0x00, 0x11, 0xae, 0xe2, 0x70, 0x79, + 0x6f, 0x48, 0x48, 0xcd, 0x89, 0x50, 0xc2, 0x50, 0x1f, 0xc7, 0x72, 0x7f, 0xc8, 0x29, 0x09, 0x37, + 0xb3, 0x91, 0x43, 0x56, 0x35, 0x7d, 0x49, 0x49, 0xa4, 0x4f, 0xc8, 0x75, 0x20, 0xe1, 0x90, 0x22, + 0x39, 0x12, 0x16, 0x2d, 0xde, 0xe0, 0x04, 0xcf, 0x09, 0x57, 0xe1, 0xef, 0x03, 0xb5, 0xa8, 0x86, + 0x3a, 0xc8, 0xd9, 0xac, 0xbe, 0x25, 0xa5, 0xbb, 0x1c, 0xc5, 0x38, 0xdc, 0xab, 0x20, 0x23, 0x92, + 0x19, 0x69, 0x08, 0x72, 0xf6, 0x19, 0x72, 0x5e, 0xff, 0xcf, 0x44, 0x93, 0x60, 0x38, 0xac, 0x8d, + 0x86, 0x69, 0xae, 0x90, 0x01, 0x3a, 0x33, 0xb7, 0xd0, 0xf4, 0x35, 0x91, 0x04, 0x73, 0x74, 0xbe, + 0x17, 0x41, 0xd4, 0xf6, 0x83, 0x61, 0xfe, 0x14, 0xb4, 0xcd, 0x0a, 0x48, 0x41, 0xdf, 0x7b, 0xe4, + 0xeb, 0x7f, 0x0e, 0x70, 0xee, 0x38, 0x2b, 0xfb, 0x39, 0x99, 0x9c, 0x68, 0x1b, 0x1c, 0xc9, 0x65, + 0x64, 0x25, 0x66, 0xaa, 0x33, 0xdf, 0x4c, 0x12, 0xaa, 0x99, 0x94, 0x76, 0x8e, 0xa5, 0xee, 0x81, + 0x91, 0xa0, 0x19, 0xdf, 0xf3, 0xa6, 0xfc, 0x17, 0x10, 0xe0, 0x8f, 0x87, 0x83, 0xa7, 0x9d, 0x08, + 0x8c, 0xaa, 0xa0, 0xef, 0x45, 0x5c, 0xf6, 0x57, 0xf0, 0xc8, 0xf5, 0x7d, 0xdf, 0x3b, 0xe4, 0xab, + 0xa6, 0x5a, 0x96, 0x69, 0x3d, 0x04, 0x7b, 0xa9, 0x2e, 0xae, 0x23, 0x81, 0xa1, 0xe6, 0x1b, 0x3d, + 0x0e, 0xb1, 0xf0, 0x91, 0xca, 0x9d, 0x75, 0x19, 0xa6, 0x0f, 0x21, 0xe2, 0xa2, 0x5e, 0xbd, 0x5c, + 0x3d, 0x0e, 0x5e, 0xf2, 0x41, 0x37, 0xd2, 0x15, 0x77, 0xc0, 0xfa, 0x0a, 0xd3, 0x0e, 0x1d, 0x19, + 0x9b, 0x10, 0x8e, 0x8d, 0xaf, 0xde, 0x7c, 0x21, 0x47, 0x96, 0xea, 0xf0, 0xc6, 0x7a, 0x16, 0xab, + 0x2a, 0x4e, 0xe3, 0x18, 0xf0, 0x84, 0xa9, 0x30, 0x18, 0x19, 0x74, 0x78, 0x84, 0xcd, 0x1d, 0x6b, + 0x73, 0xcb, 0xaf, 0x69, 0xbe, 0x6e, 0xe9, 0xfa, 0x46, 0x64, 0x05, 0x8b, 0x30, 0x69, 0x80, 0x9f, + 0x6f, 0x26, 0x41, 0xcf, 0x67, 0xae, 0x1c, 0xd7, 0x72, 0xae, 0xa0, 0xce, 0x99, 0x4b, 0x97, 0x10, + 0x67, 0xbe, 0xe7, 0xdc, 0xd4, 0x24, 0xe4, 0x98, 0x21, 0x6c, 0x66, 0x30, 0x10, 0x73, 0xcf, 0x1f, + 0xf8, 0x03, 0x91, 0xd5, 0x39, 0x1f, 0x08, 0x04, 0xb6, 0x7b, 0xd4, 0x04, 0xdb, 0x90, 0xeb, 0x47, + 0xec, 0x70, 0x88, 0x9b, 0xf7, 0x41, 0x6b, 0xaa, 0xed, 0x00, 0xfb, 0x9c, 0x80, 0xc3, 0xbf, 0x64, + 0xc9, 0x23, 0x58, 0xdf, 0x26, 0xd6, 0x9f, 0x73, 0x6b, 0xc1, 0x9c, 0xec, 0x1e, 0x3c, 0x1c, 0x1e, + 0xbd, 0xa6, 0xf8, 0xf2, 0xc7, 0xba, 0x75, 0x5e, 0x2c, 0xf8, 0x4a, 0xa1, 0xce, 0x51, 0xc5, 0xb6, + 0x55, 0xc5, 0xeb, 0x1a, 0xd8, 0xb5, 0xf8, 0xde, 0xe9, 0xbc, 0xe7, 0x1f, 0x47, 0x87, 0x13, 0x1c, + 0xd2, 0x25, 0x74, 0x5a, 0xe3, 0x0e, 0x05, 0x96, 0x80, 0x5f, 0xc3, 0x05, 0x3c, 0x55, 0x0d, 0x1d, + 0xcc, 0x8d, 0x85, 0xe5, 0xf9, 0x1e, 0xc2, 0x30, 0xc9, 0x31, 0x10, 0x62, 0x2d, 0x61, 0x3c, 0xf2, + 0xfd, 0xb0, 0xf4, 0x88, 0x6f, 0x7f, 0x01, 0xb9, 0xfe, 0xf2, 0xfc, 0x1d, 0x92, 0x9b, 0x5e, 0xd5, + 0x4f, 0x90, 0x1d, 0x30, 0xe5, 0x8b, 0xa5, 0x09, 0x62, 0xa4, 0xa7, 0x12, 0x7f, 0xac, 0x2f, 0x20, + 0x11, 0x68, 0x27, 0x87, 0x72, 0xea, 0x1a, 0x3a, 0x2f, 0x07, 0x84, 0x4f, 0x30, 0x31, 0xb8, 0x1f, + 0x80, 0xba, 0x46, 0x0e, 0xcc, 0x9f, 0xf8, 0x8e, 0xd3, 0x6d, 0x1c, 0xf9, 0x7e, 0x04, 0x1d, 0xd0, + 0x95, 0xd3, 0xe0, 0xe0, 0xd7, 0x77, 0x1a, 0x5f, 0x71, 0xff, 0x34, 0xd0, 0x5d, 0xf7, 0xf8, 0x03, + 0xca, 0x5c, 0x47, 0xe9, 0x73, 0xe7, 0xaf, 0x23, 0xc7, 0x30, 0xff, 0xed, 0x14, 0xfd, 0x08, 0x42, + 0xd0, 0x18, 0x4e, 0x6a, 0xf6, 0x85, 0x41, 0xa8, 0x21, 0xbf, 0x15, 0x61, 0x8a, 0x7f, 0xf3, 0x35, + 0x8a, 0x78, 0x6d, 0x4b, 0x36, 0xf5, 0x95, 0x86, 0x1c, 0xe4, 0x47, 0x80, 0x93, 0xa2, 0xb9, 0x19, + 0x8b, 0x6e, 0x43, 0x90, 0xc0, 0xfb, 0x52, 0xaf, 0xe1, 0xf3, 0x00, 0x7f, 0xd6, 0xcc, 0xbe, 0x25, + 0xef, 0xb8, 0x9b, 0x1f, 0xf8, 0xb2, 0xb0, 0x37, 0x11, 0x0c, 0xdd, 0xcb, 0xba, 0x3c, 0x1b, 0xf4, + 0x5a, 0xba, 0x73, 0xf8, 0x90, 0xbf, 0xad, 0xfc, 0x30, 0x4d, 0x9b, 0x3f, 0x32, 0x6b, 0x37, 0xd5, + 0xf3, 0x53, 0xc3, 0xf3, 0x82, 0xc0, 0xf7, 0x8e, 0x63, 0x5a, 0xc8, 0x65, 0x2f, 0x84, 0x72, 0x7c, + 0x14, 0x49, 0x95, 0x34, 0xfb, 0x61, 0x5a, 0x46, 0x60, 0xb9, 0x82, 0xc3, 0x32, 0xc0, 0xc9, 0xaa, + 0x8d, 0x97, 0x92, 0x42, 0x17, 0x9b, 0x82, 0x27, 0xb4, 0xdd, 0x75, 0x8a, 0x70, 0xc8, 0x5b, 0xd9, + 0xf8, 0x09, 0xff, 0x14, 0x5c, 0xf9, 0x78, 0xa8, 0x84, 0x5f, 0xe4, 0xe1, 0x6e, 0xa2, 0x2a, 0x4b, + 0xc6, 0x45, 0xa6, 0x0a, 0x9c, 0x7e, 0xc8, 0xb3, 0x3b, 0x06, 0xe3, 0x19, 0x09, 0x06, 0xf3, 0xc3, + 0xdc, 0xe1, 0x67, 0x8d, 0x86, 0x48, 0x00, 0xf2, 0x25, 0x00, 0x49, 0xb8, 0x6d, 0x20, 0x07, 0x54, + 0x6d, 0xf9, 0x98, 0xd5, 0x5f, 0x65, 0x69, 0x5e, 0x04, 0xfc, 0x0b, 0x68, 0xf4, 0x20, 0xfd, 0xc5, + 0x64, 0x06, 0x52, 0x93, 0xd3, 0x24, 0x03, 0xc7, 0xaf, 0x38, 0x0e, 0x67, 0x5e, 0xb0, 0xfc, 0x69, + 0xb2, 0x6f, 0x33, 0xaa, 0xab, 0x7b, 0x2f, 0xcb, 0x21, 0xe6, 0x74, 0x56, 0x3e, 0xdf, 0xba, 0x88, + 0x1b, 0xbd, 0x06, 0x79, 0xc7, 0xba, 0xee, 0x5a, 0xe1, 0x8d, 0x41, 0xdd, 0x57, 0x3d, 0x57, 0x2a, + 0x16, 0x22, 0xdb, 0x0b, 0x3f, 0x10, 0xc8, 0x17, 0xc2, 0xf0, 0x01, 0xfc, 0x15, 0xc2, 0x70, 0x05, + 0xd1, 0xf6, 0x20, 0x16, 0x3a, 0xcd, 0xbb, 0x1c, 0xbf, 0xc3, 0x6d, 0xd7, 0x82, 0xa4, 0x2d, 0x0e, + 0x39, 0x96, 0xa4, 0xdb, 0xff, 0x7d, 0x72, 0x30, 0x90, 0xbf, 0x90, 0x96, 0x0e, 0x06, 0x07, 0xfa, + 0x3a, 0x55, 0x67, 0x1b, 0xf7, 0x5c, 0xd0, 0x4f, 0x90, 0x14, 0x04, 0xf9, 0x2d, 0x89, 0x57, 0x1f, + 0xfc, 0x9b, 0x80, 0x23, 0x76, 0x0f, 0x21, 0x86, 0x4e, 0x01, 0xd7, 0xbd, 0xff, 0x5e, 0x35, 0x49, + 0xaa, 0x9d, 0x48, 0x24, 0x2e, 0xa0, 0x78, 0x87, 0x73, 0xc8, 0x6a, 0x06, 0x39, 0xba, 0xa5, 0x23, + 0xdb, 0x96, 0x66, 0xc1, 0xfc, 0xf6, 0x9b, 0x77, 0x58, 0x07, 0xd3, 0xe5, 0x5d, 0x5d, 0xe9, 0xab, + 0x3b, 0xb2, 0x77, 0xf8, 0xeb, 0x56, 0x04, 0xa6, 0x21, 0x6b, 0xaa, 0xbc, 0x7c, 0x25, 0x87, 0xdd, + 0x6a, 0xb8, 0x4d, 0xcd, 0x1d, 0xe4, 0x29, 0xf2, 0xb5, 0x0c, 0x2e, 0x4e, 0xc9, 0x3d, 0xb4, 0x51, + 0x57, 0x46, 0xa4, 0x8d, 0xdb, 0x3e, 0xe4, 0x9e, 0x49, 0xa6, 0xb9, 0x90, 0xbb, 0x0c, 0x8f, 0xaf, + 0x2e, 0xe4, 0x04, 0xf7, 0x34, 0x17, 0x76, 0xa5, 0x89, 0x17, 0xc1, 0x1e, 0xce, 0x96, 0xee, 0x06, + 0xbd, 0x5b, 0x2d, 0xbb, 0xc5, 0xf8, 0xe1, 0x92, 0x0e, 0x4c, 0x7d, 0x30, 0xab, 0x5d, 0xfa, 0xbd, + 0x66, 0xf7, 0x26, 0x3b, 0x5f, 0x47, 0xdb, 0xab, 0x73, 0x76, 0xf7, 0x06, 0x5a, 0x05, 0xc7, 0x21, + 0x73, 0x99, 0x6f, 0xc9, 0xd5, 0x9f, 0x1b, 0xc5, 0x73, 0x3a, 0x0f, 0x1d, 0xb7, 0xb9, 0xf4, 0xf8, + 0x7d, 0x36, 0x2a, 0x4f, 0xed, 0x1e, 0x4b, 0xdc, 0xb1, 0x36, 0x28, 0xf2, 0xdd, 0xb5, 0x81, 0x46, + 0xc5, 0xd3, 0xf9, 0x2f, 0xa3, 0x43, 0x40, 0xae, 0x01, 0xe3, 0xfd, 0x62, 0x88, 0x29, 0xc4, 0xfc, + 0xd3, 0x18, 0x39, 0x5c, 0xfd, 0x70, 0x98, 0xaf, 0xbc, 0x31, 0x5c, 0xbb, 0xb6, 0x71, 0x3a, 0xad, + 0x2e, 0x5b, 0xea, 0xca, 0xf9, 0x0e, 0x3c, 0xb7, 0x9d, 0x10, 0xe8, 0x4b, 0x0d, 0x66, 0xe3, 0xaf, + 0xbf, 0x7f, 0x5b, 0x49, 0xce, 0x3c, 0x04, 0x53, 0x9a, 0x1a, 0x1b, 0x13, 0x4a, 0x0c, 0xdd, 0x4f, + 0x95, 0xd8, 0xbe, 0x00, 0x37, 0x34, 0x8d, 0xef, 0x68, 0x16, 0x6e, 0x69, 0x1a, 0xdf, 0x93, 0x5a, + 0x1a, 0x57, 0xd3, 0xc2, 0x38, 0x9c, 0xfc, 0xfe, 0x7b, 0x0c, 0x80, 0x54, 0x4d, 0xa0, 0xe1, 0x77, + 0xa2, 0xc4, 0x9e, 0xb2, 0x86, 0x69, 0x61, 0x05, 0x99, 0xff, 0x85, 0xc2, 0xf2, 0x34, 0x83, 0xff, + 0xc0, 0xb5, 0xf8, 0xa3, 0xe9, 0x2c, 0x2b, 0xe0, 0xa2, 0x79, 0x9c, 0x49, 0xa5, 0xe4, 0x38, 0x23, + 0x24, 0x38, 0x9e, 0xa5, 0x19, 0x3e, 0x44, 0xc5, 0xb9, 0x54, 0x9c, 0xa1, 0x13, 0x3c, 0xc3, 0x72, + 0x6c, 0x0a, 0xdf, 0x70, 0xa9, 0x6d, 0x9c, 0x61, 0x38, 0x99, 0x22, 0xad, 0x44, 0x81, 0x17, 0x98, + 0x10, 0x6e, 0xc0, 0x09, 0x29, 0x91, 0x87, 0xda, 0x10, 0x69, 0x33, 0xc7, 0x70, 0x02, 0x60, 0xa0, + 0x34, 0x74, 0x02, 0x13, 0x22, 0xad, 0xb6, 0x04, 0x4a, 0xe8, 0x04, 0x25, 0x7e, 0x82, 0xe2, 0x82, + 0x80, 0xcf, 0xa3, 0x8e, 0xf1, 0x71, 0x71, 0x4a, 0x25, 0x52, 0x2e, 0x42, 0xb4, 0x10, 0x12, 0x13, + 0xb4, 0x20, 0xa6, 0x85, 0x34, 0xbe, 0xa6, 0x05, 0x0f, 0x10, 0x34, 0x60, 0x19, 0x8a, 0xa5, 0x71, + 0x2d, 0x06, 0x42, 0xea, 0xe0, 0x97, 0xa0, 0xe2, 0xf7, 0x86, 0xfb, 0xb8, 0xdf, 0x1b, 0x5f, 0x43, + 0x6f, 0x8f, 0x1a, 0xbf, 0x7b, 0xdc, 0xed, 0x1e, 0x27, 0x95, 0xf0, 0x7b, 0xd4, 0x81, 0x65, 0xc0, + 0xdf, 0x00, 0xaf, 0x28, 0x70, 0xcc, 0xd0, 0xe7, 0xd4, 0x85, 0x20, 0x15, 0x0f, 0x20, 0x45, 0xc0, + 0xa6, 0x28, 0x80, 0xca, 0x33, 0x89, 0x34, 0x93, 0x16, 0x80, 0x08, 0x8e, 0x4d, 0x50, 0x22, 0x34, + 0x66, 0xe2, 0x69, 0xc1, 0xfd, 0xb5, 0xe1, 0x2f, 0x14, 0x2c, 0x0e, 0xa5, 0x85, 0x2d, 0xee, 0x15, + 0x0a, 0xe2, 0x12, 0x40, 0x15, 0x3e, 0xed, 0x87, 0x23, 0x89, 0x54, 0x82, 0x4f, 0xb3, 0x40, 0x37, + 0x2f, 0x26, 0x38, 0x4a, 0x60, 0x80, 0x02, 0x26, 0x15, 0x82, 0x3f, 0xfc, 0x6d, 0xe3, 0x6b, 0xbf, + 0x22, 0xe4, 0x55, 0xfc, 0x68, 0xac, 0x13, 0xe5, 0xc4, 0x9d, 0x11, 0xfd, 0xea, 0x19, 0xda, 0xff, + 0xd7, 0xb0, 0x7f, 0xbf, 0x86, 0xa5, 0xa8, 0x9f, 0x56, 0xb0, 0x3f, 0x2f, 0xf6, 0x3f, 0xab, 0x5f, + 0xff, 0x06, 0x2d, 0xbe, 0xa3, 0x59, 0x38, 0xfb, 0x0f, 0xba, 0x3f, 0x50, 0x20, 0x9a, 0xc9, 0xa5, + 0x13, 0x69, 0x11, 0xbe, 0x01, 0x14, 0x0d, 0x5f, 0x09, 0x41, 0x0c, 0x09, 0x09, 0x00, 0xc0, 0x26, + 0x52, 0x55, 0x2e, 0x01, 0xd4, 0xd0, 0x09, 0x2e, 0x27, 0x00, 0xe3, 0x43, 0xe9, 0x44, 0x2a, 0x0d, + 0x1f, 0x6c, 0x28, 0x8d, 0x9b, 0xa7, 0x3b, 0x34, 0x8c, 0x99, 0x76, 0x4b, 0xe9, 0x74, 0x82, 0x21, + 0x2d, 0xab, 0x74, 0x2a, 0x21, 0x72, 0x18, 0x2c, 0x5c, 0x08, 0x02, 0x6e, 0x08, 0x17, 0x7c, 0xca, + 0xbf, 0x20, 0x35, 0xc0, 0x2c, 0x96, 0x14, 0x80, 0xd2, 0x60, 0x14, 0x12, 0x0c, 0x34, 0xe4, 0x13, + 0x3c, 0x2e, 0x4c, 0x88, 0xd0, 0x80, 0x03, 0x8d, 0xf3, 0xcb, 0x59, 0xf2, 0xc9, 0xb8, 0xbf, 0x35, + 0x06, 0xd0, 0xa8, 0x32, 0x0c, 0xe0, 0x05, 0x48, 0xe6, 0x60, 0x58, 0x31, 0x1d, 0xe2, 0x12, 0x2c, + 0x87, 0x61, 0x51, 0x7c, 0x88, 0x80, 0x65, 0x3b, 0x5c, 0x02, 0xda, 0xb9, 0xc5, 0x80, 0x17, 0xb4, + 0xac, 0x02, 0xd2, 0x39, 0x18, 0x01, 0x6b, 0x15, 0xa6, 0x14, 0xb4, 0x9d, 0x00, 0x15, 0x3a, 0x04, + 0x29, 0x52, 0x8a, 0x41, 0x13, 0x96, 0xf0, 0x39, 0x9a, 0x4a, 0x08, 0x80, 0x00, 0x0f, 0xc4, 0x71, + 0x18, 0x33, 0xc0, 0x26, 0x95, 0x20, 0x63, 0x30, 0x55, 0xd2, 0x12, 0x3e, 0x31, 0x74, 0x06, 0x14, + 0x83, 0xcb, 0xc1, 0x35, 0xcd, 0x62, 0x16, 0x10, 0xbe, 0x60, 0x56, 0x30, 0x3e, 0xb9, 0x39, 0xfc, + 0x2d, 0x26, 0x18, 0xcc, 0x91, 0x04, 0x2b, 0x10, 0x2c, 0x81, 0x17, 0x2c, 0x06, 0x4a, 0xa5, 0x70, + 0x4f, 0x81, 0x90, 0x4e, 0x11, 0xd2, 0x59, 0x5c, 0x4e, 0xba, 0xf2, 0x35, 0x1a, 0x9a, 0x71, 0x18, + 0x00, 0x8f, 0x49, 0xc4, 0x97, 0x24, 0x07, 0x02, 0x0c, 0xd2, 0xe4, 0x02, 0x80, 0x77, 0xdc, 0x3a, + 0xe0, 0x06, 0xd4, 0xa5, 0xc8, 0x37, 0xe6, 0x88, 0xe0, 0x5e, 0x62, 0x43, 0x25, 0xb8, 0x82, 0x61, + 0xe2, 0x4f, 0x91, 0x06, 0x74, 0x4b, 0x0c, 0x85, 0x9b, 0xf0, 0x04, 0x75, 0x81, 0xc6, 0x60, 0x52, + 0x84, 0x72, 0xdc, 0x9f, 0xce, 0x01, 0x78, 0xc1, 0xbd, 0xc5, 0xbc, 0x82, 0x86, 0xa9, 0x94, 0x77, + 0x49, 0x86, 0x23, 0xb5, 0x58, 0xb9, 0xa0, 0x54, 0x20, 0x02, 0x4e, 0x93, 0x5b, 0xd0, 0x09, 0x22, + 0x4c, 0xac, 0xfb, 0x20, 0x11, 0x11, 0x5f, 0x8b, 0x6c, 0x15, 0x37, 0x83, 0x7e, 0x25, 0x86, 0xe9, + 0x63, 0xfc, 0xab, 0x30, 0x64, 0x8a, 0x50, 0x2e, 0x88, 0x39, 0xb8, 0xa6, 0x69, 0x4c, 0x56, 0x9a, + 0x8c, 0xe3, 0x5e, 0x13, 0x32, 0xf0, 0xf7, 0x18, 0xaf, 0x80, 0x10, 0x95, 0xf5, 0x66, 0x72, 0x57, + 0x5a, 0x2b, 0xe4, 0x3c, 0x11, 0x9e, 0x44, 0x0a, 0xf2, 0xad, 0x7a, 0xb2, 0xce, 0x9d, 0xa5, 0x2f, + 0x62, 0xf0, 0x9e, 0x4e, 0x04, 0x74, 0xc5, 0xd7, 0x9f, 0x2a, 0x16, 0x79, 0xee, 0xac, 0x01, 0x80, + 0x1a, 0xb8, 0x35, 0x57, 0x31, 0x6a, 0x40, 0x43, 0x8a, 0xc3, 0xea, 0xc7, 0xd1, 0x58, 0x63, 0x31, + 0x66, 0xa0, 0x8a, 0x22, 0x16, 0x27, 0xcf, 0xe3, 0x6b, 0x9a, 0x5c, 0xa7, 0x19, 0x72, 0x5d, 0x3d, + 0x59, 0x40, 0x2e, 0x68, 0x16, 0x5c, 0x42, 0xf4, 0xad, 0xe5, 0x6c, 0x42, 0xbe, 0x55, 0x55, 0x7d, + 0x3b, 0xcb, 0x9d, 0x4d, 0xcf, 0x37, 0x46, 0xd7, 0x34, 0xa1, 0x52, 0x74, 0x4d, 0x07, 0x74, 0x90, + 0xe8, 0x10, 0x76, 0x88, 0x27, 0xbc, 0x7e, 0x5e, 0x5b, 0xc1, 0x75, 0x70, 0x98, 0xcf, 0x02, 0xd0, + 0x42, 0x54, 0x95, 0xa3, 0x43, 0xee, 0x05, 0xe3, 0x5d, 0x90, 0x72, 0x91, 0xa8, 0x23, 0x4b, 0xc6, + 0x12, 0x88, 0x91, 0x72, 0x98, 0x16, 0x0c, 0x93, 0xc5, 0xc8, 0xe0, 0x51, 0x12, 0x58, 0xe2, 0x0c, + 0x91, 0xb2, 0xaf, 0xab, 0x0c, 0x06, 0x50, 0xc5, 0xdb, 0x18, 0x02, 0xce, 0x96, 0xe0, 0x93, 0x68, + 0x5a, 0x9f, 0x61, 0xaa, 0xa4, 0xea, 0x2c, 0x4e, 0x3c, 0x87, 0xba, 0x90, 0x25, 0x1f, 0x4b, 0x97, + 0xf8, 0x3e, 0x5f, 0xc2, 0x1a, 0xcf, 0xc4, 0xe8, 0x74, 0x86, 0x8d, 0xb1, 0xf8, 0x6c, 0x4b, 0x0c, + 0x78, 0x05, 0xf9, 0x57, 0xe0, 0x16, 0x57, 0xb3, 0xc1, 0x7b, 0xfe, 0xb6, 0x1e, 0xec, 0x57, 0x8c, + 0xb1, 0x25, 0x3e, 0x07, 0x4c, 0x4d, 0x43, 0x0d, 0xd4, 0x82, 0x51, 0xb2, 0x31, 0xbe, 0x0f, 0x90, + 0x99, 0x18, 0x43, 0x9a, 0x42, 0xe4, 0x8c, 0x31, 0x74, 0xe9, 0xa2, 0x84, 0xa1, 0xa1, 0x73, 0x5f, + 0xac, 0xe2, 0xee, 0x67, 0x6c, 0xbd, 0xd9, 0xeb, 0xa5, 0xf2, 0xc5, 0x38, 0xec, 0x9f, 0xe8, 0x18, + 0x61, 0x11, 0x7c, 0x61, 0x61, 0x02, 0xdf, 0x62, 0x42, 0x82, 0xc5, 0x5a, 0x2d, 0xc6, 0xb0, 0x14, + 0xc8, 0x85, 0xab, 0xd1, 0xb8, 0x0e, 0x7f, 0x60, 0x4b, 0x4e, 0xc5, 0xb0, 0xf1, 0x61, 0x0e, 0xb3, + 0x31, 0x68, 0x02, 0xcc, 0xa3, 0x12, 0x69, 0x5c, 0x06, 0xca, 0x0b, 0x0a, 0x81, 0xdb, 0x61, 0x41, + 0x00, 0x58, 0x9a, 0xa8, 0x04, 0x87, 0x6b, 0x45, 0x57, 0xe8, 0x40, 0x1e, 0x7c, 0x10, 0x6d, 0x05, + 0x46, 0x60, 0x5f, 0x43, 0xae, 0x28, 0xdc, 0x0e, 0xd7, 0x8a, 0x09, 0x11, 0x0f, 0x41, 0xc7, 0x3c, + 0xad, 0xe2, 0x63, 0x58, 0x4e, 0x31, 0x90, 0x08, 0xa8, 0x47, 0x55, 0x8c, 0x81, 0xd9, 0x81, 0x36, + 0xc4, 0xe0, 0xa6, 0xcf, 0xd5, 0x00, 0x59, 0x17, 0x29, 0x16, 0xe3, 0x09, 0x36, 0x82, 0xef, 0xe9, + 0x10, 0xee, 0x0e, 0x28, 0x60, 0xc5, 0xc4, 0x64, 0x60, 0x8f, 0x09, 0xc5, 0x09, 0x6c, 0x67, 0x69, + 0x4c, 0x0e, 0xb6, 0xa8, 0x94, 0x8b, 0x47, 0x0a, 0xf7, 0x00, 0x33, 0x07, 0x55, 0x23, 0x38, 0x62, + 0xdd, 0x26, 0x84, 0x72, 0x55, 0x42, 0x11, 0x97, 0xc3, 0xc4, 0x62, 0xbb, 0xc2, 0xb4, 0x70, 0x21, + 0x7f, 0xc4, 0x33, 0x77, 0x0b, 0x07, 0x74, 0x6d, 0xd6, 0x09, 0x5e, 0x06, 0xcd, 0x12, 0x70, 0x72, + 0x13, 0x62, 0xb0, 0xd7, 0x84, 0x90, 0x0b, 0x37, 0x09, 0x9e, 0x8e, 0x63, 0x32, 0xe3, 0xc4, 0x91, + 0x26, 0x38, 0x41, 0x03, 0x7d, 0x16, 0x42, 0xf8, 0x43, 0xa6, 0x13, 0x2c, 0xc4, 0xd0, 0x04, 0xe8, + 0x19, 0x93, 0xe0, 0xd2, 0x71, 0xa2, 0x98, 0xc0, 0xc0, 0x14, 0x7e, 0xc0, 0x0f, 0x04, 0x42, 0x63, + 0x93, 0x15, 0x89, 0x7f, 0x11, 0x43, 0xd8, 0x82, 0x42, 0x10, 0xf2, 0x49, 0x21, 0x64, 0x3e, 0xd0, + 0x21, 0xc1, 0xc4, 0xd9, 0x84, 0x00, 0x6d, 0x45, 0x8d, 0xc1, 0x16, 0x8d, 0x3f, 0x64, 0xf0, 0x98, + 0x30, 0x1e, 0x30, 0x5f, 0xf0, 0x47, 0x14, 0xf1, 0xc5, 0xb1, 0xc6, 0x60, 0x2f, 0x0a, 0xd0, 0x05, + 0x39, 0x0e, 0xc3, 0xe2, 0x91, 0xe1, 0x0f, 0xea, 0x29, 0xac, 0x47, 0xd0, 0x8c, 0xd6, 0x68, 0x62, + 0xbf, 0xf0, 0x91, 0x23, 0x28, 0x8a, 0xc4, 0xe3, 0x61, 0x9c, 0xd2, 0x24, 0xbc, 0x61, 0xbb, 0xc7, + 0xa4, 0x89, 0xc4, 0x0f, 0x82, 0x2f, 0x80, 0xc6, 0x5e, 0xd4, 0x90, 0x71, 0x5e, 0x85, 0x57, 0x24, + 0xa0, 0x33, 0x80, 0xc5, 0x9e, 0x0a, 0x08, 0x4e, 0x31, 0x1a, 0x0e, 0x89, 0xb8, 0x0b, 0x23, 0xbb, + 0x63, 0x92, 0xf1, 0xdc, 0x6f, 0xb0, 0x62, 0xe0, 0x8e, 0x8b, 0x86, 0xcb, 0x07, 0x8c, 0x49, 0x1c, + 0x57, 0x40, 0xec, 0x06, 0x8b, 0x3e, 0xe1, 0x1a, 0xf7, 0xaa, 0x59, 0xef, 0x02, 0xe2, 0x2e, 0x75, + 0xac, 0xb9, 0x31, 0x98, 0x97, 0xe3, 0x2e, 0xd7, 0xe3, 0x7c, 0x1c, 0x73, 0x1d, 0xbe, 0x70, 0x86, + 0x06, 0x58, 0x63, 0x3e, 0x02, 0x5a, 0x2e, 0x63, 0x69, 0x0e, 0xa8, 0xe3, 0x31, 0x75, 0xbc, 0x08, + 0x30, 0x29, 0xc2, 0x65, 0x20, 0x32, 0xc1, 0x8a, 0xe4, 0x0b, 0xaa, 0x30, 0x13, 0xb0, 0x07, 0xc1, + 0x4e, 0x96, 0x25, 0x3f, 0x09, 0x86, 0x60, 0x98, 0x22, 0xed, 0x79, 0xdc, 0x10, 0x8c, 0x0c, 0x50, + 0xc3, 0xd6, 0x03, 0x40, 0x04, 0xf0, 0xb8, 0x0c, 0x7e, 0xc0, 0x11, 0x94, 0x9c, 0x0c, 0x91, 0xe0, + 0x8f, 0x3a, 0xe1, 0x00, 0x54, 0xb0, 0xd0, 0x80, 0xe6, 0x31, 0xb2, 0x58, 0x62, 0x7c, 0xdc, 0x13, + 0xb0, 0xc0, 0x91, 0x0f, 0x0d, 0x7f, 0x84, 0xf0, 0xc7, 0xf1, 0xa4, 0x52, 0x75, 0xf3, 0x4a, 0xa9, + 0xc0, 0xba, 0xe7, 0x0c, 0xb7, 0x65, 0xb8, 0x12, 0xd5, 0xa7, 0x8e, 0xde, 0xfa, 0x41, 0x18, 0x2f, + 0x20, 0x04, 0x73, 0x41, 0xcc, 0x07, 0x1c, 0x6b, 0x45, 0xfc, 0xe9, 0x4a, 0x47, 0x24, 0xd1, 0x11, + 0x24, 0x03, 0x62, 0x11, 0x89, 0x30, 0xd2, 0x21, 0x2c, 0x4e, 0x30, 0x45, 0x9c, 0x9a, 0xf2, 0x36, + 0x68, 0x8e, 0x08, 0xaa, 0x83, 0x15, 0x0b, 0x27, 0x5f, 0x3c, 0xd6, 0x2a, 0x91, 0x8d, 0xe3, 0x86, + 0x71, 0x9c, 0xdd, 0x01, 0xde, 0xa4, 0xdc, 0x65, 0xb2, 0x78, 0x87, 0xc5, 0xb6, 0x7b, 0x11, 0xc2, + 0xdc, 0x3e, 0xab, 0x7b, 0xdc, 0xbd, 0xc0, 0x65, 0x90, 0xc1, 0xc5, 0x53, 0x18, 0xae, 0x80, 0x3b, + 0xb2, 0x84, 0xad, 0xf0, 0xc5, 0xda, 0x01, 0xfe, 0xb2, 0x71, 0xf7, 0x26, 0xee, 0x5e, 0xc4, 0xf1, + 0x05, 0x7b, 0xf4, 0xa7, 0xaa, 0xb9, 0xd3, 0x4c, 0xdb, 0x67, 0x0a, 0x39, 0xa6, 0x65, 0x6d, 0x34, + 0xf4, 0x1a, 0x46, 0x5b, 0x64, 0x98, 0x8a, 0x12, 0x0e, 0xe1, 0x23, 0xf5, 0xd7, 0x65, 0x84, 0x2b, + 0xe0, 0x1c, 0x28, 0x50, 0x78, 0x9a, 0x7c, 0xd1, 0xd8, 0xed, 0x51, 0x69, 0x91, 0x88, 0x97, 0x16, + 0x78, 0x12, 0xa9, 0xc9, 0x3d, 0xb8, 0x94, 0x14, 0xcb, 0xe1, 0x70, 0xe8, 0x75, 0x00, 0xcf, 0x96, + 0x66, 0x52, 0x69, 0x12, 0x32, 0xa0, 0xa9, 0x10, 0x8a, 0x53, 0xa4, 0x25, 0x4b, 0xbb, 0x61, 0x0e, + 0x5a, 0x5f, 0x15, 0x41, 0xfb, 0xf4, 0xa9, 0x5b, 0x55, 0xc4, 0x71, 0x3d, 0xc5, 0x8b, 0x38, 0xa4, + 0x93, 0xa1, 0x03, 0x10, 0xbd, 0xb1, 0x03, 0xdd, 0x4f, 0xc3, 0x5f, 0x94, 0xb9, 0xed, 0xcf, 0x1d, + 0x7f, 0xd0, 0xc1, 0x87, 0x7b, 0xea, 0xe8, 0x8d, 0x5c, 0xf5, 0x30, 0x09, 0x89, 0xd5, 0x73, 0x95, + 0x8b, 0x6f, 0xee, 0x07, 0x54, 0x79, 0xb4, 0x9f, 0xbb, 0xb9, 0xdc, 0xc9, 0x9d, 0xd9, 0xf5, 0x80, + 0x9f, 0x3e, 0xd1, 0x5e, 0x87, 0x2a, 0xf6, 0xb1, 0x1c, 0xcd, 0xb9, 0x59, 0x27, 0xe1, 0x94, 0x0f, + 0xca, 0x1f, 0xf6, 0xd4, 0xd3, 0x1b, 0x33, 0x70, 0xef, 0x4a, 0xd0, 0x6f, 0xff, 0xa8, 0x9d, 0x0f, + 0xc7, 0x6f, 0xef, 0x8e, 0x53, 0xf5, 0xc6, 0x05, 0xe2, 0xaf, 0x74, 0x61, 0xec, 0x9b, 0xd2, 0x44, + 0x93, 0xf0, 0x06, 0x0b, 0xe8, 0xdb, 0xcb, 0x56, 0xb2, 0xf0, 0xf1, 0x01, 0xd5, 0x34, 0xec, 0xd7, + 0x8f, 0xcf, 0xd8, 0xdf, 0x5e, 0xa7, 0x1b, 0x83, 0x1c, 0x2d, 0x7c, 0x42, 0x91, 0x0f, 0x0b, 0x39, + 0x1b, 0xcb, 0x08, 0x29, 0xa6, 0xbc, 0xd1, 0x91, 0xe1, 0x24, 0x66, 0xc8, 0x29, 0x68, 0x08, 0x5f, + 0x66, 0x0f, 0xef, 0x0a, 0xb4, 0xf8, 0x7c, 0xf1, 0x9b, 0x87, 0xf0, 0xee, 0x63, 0x49, 0x55, 0x90, + 0xbf, 0xc3, 0xfb, 0x14, 0xf9, 0xc0, 0xb0, 0xd1, 0xeb, 0xdf, 0x9e, 0xce, 0x5b, 0x64, 0x91, 0x17, + 0x7c, 0x20, 0xe4, 0x62, 0x15, 0x29, 0xec, 0xc5, 0xeb, 0x5f, 0xc2, 0xb1, 0x30, 0xde, 0xd9, 0x2f, + 0x74, 0x9a, 0x21, 0x6f, 0x49, 0x1b, 0x29, 0x89, 0x50, 0x53, 0xc3, 0x0f, 0x42, 0x85, 0x76, 0x92, + 0xea, 0x84, 0xa4, 0x90, 0xa6, 0x3a, 0x8e, 0x86, 0xc8, 0xe1, 0x39, 0x67, 0x8e, 0x0c, 0x7c, 0xc8, + 0xc4, 0x94, 0xf0, 0xb5, 0x6a, 0x87, 0x56, 0x00, 0x2d, 0x81, 0x21, 0x84, 0x23, 0xb1, 0xf3, 0x88, + 0xaf, 0xaf, 0xaf, 0x28, 0x81, 0xf7, 0x99, 0xfe, 0xfe, 0xe4, 0x7e, 0xbf, 0x86, 0xf1, 0x26, 0x7a, + 0x38, 0x06, 0x68, 0x9d, 0x76, 0x7c, 0xc3, 0x91, 0x04, 0x59, 0xf2, 0xaa, 0xaa, 0xb6, 0x93, 0xb0, + 0x90, 0x6e, 0x6e, 0x01, 0xaf, 0xc0, 0xf6, 0x70, 0x04, 0xb7, 0x3e, 0x6d, 0xa8, 0x5e, 0xb4, 0x96, + 0x14, 0xe5, 0xb2, 0x69, 0xe4, 0xf9, 0x34, 0xd0, 0x09, 0x89, 0xc7, 0x83, 0xdd, 0x74, 0x7f, 0x3c, + 0xd2, 0x3d, 0xbc, 0x22, 0x9f, 0x27, 0xfe, 0x83, 0x6c, 0xf0, 0x16, 0x11, 0x6e, 0x0a, 0xac, 0x07, + 0x28, 0xee, 0x7a, 0xf4, 0x5d, 0x10, 0x64, 0xf1, 0x30, 0xf2, 0xe2, 0xca, 0xc7, 0x40, 0xbb, 0x50, + 0xaf, 0x5d, 0x7d, 0xfa, 0x27, 0x3e, 0x02, 0xf4, 0x9c, 0x4c, 0xfe, 0xed, 0x63, 0xa7, 0x1a, 0x8a, + 0xb9, 0x4b, 0x68, 0xa6, 0x4c, 0x16, 0xcc, 0x13, 0x73, 0xd3, 0x76, 0xf0, 0x1e, 0xcc, 0x67, 0x12, + 0x6f, 0x6e, 0xfd, 0x33, 0xf2, 0x32, 0xc5, 0x8f, 0x60, 0x80, 0xf8, 0x13, 0x58, 0x08, 0x4f, 0x4f, + 0xe8, 0xf5, 0x3b, 0x4a, 0x2c, 0x6c, 0xd0, 0x99, 0x48, 0x24, 0x50, 0xf6, 0x81, 0x4f, 0x78, 0x0c, + 0xd4, 0xa9, 0x5a, 0xf7, 0x76, 0xad, 0xa0, 0x47, 0xec, 0x3e, 0x62, 0x84, 0x0d, 0x2e, 0x56, 0x9f, + 0x41, 0xa2, 0xdc, 0x67, 0xce, 0x30, 0x0c, 0xac, 0x8e, 0x8e, 0x75, 0xc0, 0x84, 0xb9, 0x85, 0xf1, + 0x70, 0x14, 0xf8, 0x4c, 0x8e, 0x1c, 0x25, 0xdc, 0x07, 0x4e, 0xeb, 0xa6, 0x82, 0x12, 0xaa, 0x02, + 0x70, 0xdd, 0x8d, 0xc3, 0xd7, 0x5f, 0xa8, 0x4f, 0xa0, 0x00, 0x30, 0x75, 0x30, 0x43, 0x4e, 0xad, + 0xaf, 0x9a, 0x60, 0x88, 0xf8, 0x94, 0x44, 0x24, 0xb1, 0x95, 0xb4, 0x0d, 0x7a, 0xc5, 0xca, 0x94, + 0x90, 0x91, 0xa6, 0xd9, 0xff, 0xa0, 0xff, 0x48, 0xa8, 0x30, 0x93, 0xb1, 0x4a, 0xdd, 0x5a, 0x35, + 0xe6, 0xb5, 0x23, 0xbb, 0x51, 0xd0, 0xf8, 0x54, 0xf1, 0x55, 0x87, 0xb3, 0xe2, 0x27, 0xc8, 0x73, + 0x73, 0x4f, 0x01, 0xda, 0xee, 0x70, 0xe7, 0xc3, 0x5d, 0xf3, 0x74, 0x5e, 0x4f, 0x16, 0xb7, 0xde, + 0x20, 0xeb, 0xd0, 0x21, 0x04, 0x9b, 0xd6, 0x53, 0xf8, 0x3f, 0x4e, 0x27, 0x67, 0x40, 0x7c, 0x4e, + 0x00, 0x87, 0x70, 0x38, 0x86, 0xf0, 0x31, 0xcf, 0x82, 0x04, 0xe4, 0x02, 0xf7, 0x63, 0x46, 0x04, + 0x04, 0x80, 0x05, 0x6c, 0x9f, 0x81, 0xc9, 0x16, 0x92, 0x1c, 0xe4, 0x59, 0xf0, 0x53, 0xd8, 0x01, + 0x19, 0xc4, 0x24, 0xef, 0xe0, 0x5d, 0x38, 0x6a, 0xbc, 0xd8, 0x09, 0x7c, 0x96, 0x2b, 0x66, 0x63, + 0x71, 0x14, 0x20, 0xa6, 0x38, 0x55, 0xb2, 0x4f, 0x8b, 0x60, 0x60, 0xb2, 0x06, 0x1c, 0x8e, 0x9d, + 0xe5, 0x11, 0x81, 0x66, 0xe7, 0xe1, 0xff, 0xf9, 0xcd, 0x51, 0xbe, 0x07, 0xf7, 0xe6, 0xc3, 0xf8, + 0x48, 0xbc, 0xe9, 0xbd, 0x90, 0xc4, 0x93, 0x98, 0x77, 0x22, 0xc5, 0x95, 0xde, 0xdf, 0x3e, 0xa4, + 0x4f, 0xbc, 0x83, 0x03, 0xfd, 0xfe, 0x19, 0x04, 0x15, 0x25, 0xb0, 0x4e, 0x67, 0x57, 0xbc, 0x76, + 0x7f, 0xfb, 0x40, 0x09, 0x7c, 0xfb, 0x79, 0xaf, 0xc3, 0xef, 0xb8, 0x83, 0xb7, 0x64, 0x7d, 0x3a, + 0x7c, 0x1b, 0xfe, 0xfe, 0x3b, 0xe8, 0x07, 0x7e, 0x5a, 0xc8, 0x98, 0x39, 0xf3, 0x28, 0xc4, 0xc6, + 0xac, 0x4e, 0x3a, 0x63, 0x46, 0xd9, 0x08, 0x2c, 0x48, 0x75, 0x0e, 0x7f, 0xbf, 0x80, 0x13, 0xc6, + 0x44, 0x84, 0xa3, 0xde, 0x62, 0x71, 0x34, 0xec, 0x36, 0x7f, 0x7e, 0xd0, 0xc6, 0x5d, 0xf0, 0xf3, + 0x5b, 0xc5, 0x40, 0x87, 0x57, 0xe0, 0xda, 0x94, 0xdc, 0x5c, 0xd5, 0x94, 0x27, 0x1b, 0xab, 0x31, + 0x56, 0x80, 0xf3, 0x21, 0xaa, 0x2f, 0x0c, 0xf1, 0xc2, 0x88, 0x9b, 0x78, 0xff, 0x0c, 0x39, 0xc8, + 0xb2, 0xff, 0x7d, 0x66, 0xec, 0xee, 0x87, 0x11, 0x93, 0xfd, 0x79, 0x6b, 0x6e, 0x90, 0xd3, 0xf6, + 0x89, 0x25, 0x3a, 0x60, 0x55, 0x3d, 0x2b, 0xdb, 0x29, 0x60, 0x80, 0x95, 0x39, 0x09, 0xe2, 0xb8, + 0xed, 0x81, 0xea, 0xcc, 0x9f, 0xdc, 0xb3, 0xb4, 0xae, 0xb9, 0xfc, 0xf6, 0xdb, 0x13, 0xd0, 0x72, + 0x3a, 0xe9, 0x7a, 0x61, 0x3f, 0xe8, 0x1f, 0xce, 0x1f, 0x31, 0x05, 0xe1, 0xd3, 0x16, 0x21, 0x7c, + 0x1d, 0x89, 0xdd, 0x01, 0x03, 0x1c, 0xf7, 0xa1, 0xe0, 0x5d, 0xc2, 0x9f, 0x00, 0xf2, 0x33, 0x9e, + 0x26, 0x86, 0x4d, 0x29, 0xc0, 0x71, 0x3f, 0x12, 0xa2, 0x4b, 0x37, 0xe4, 0x1a, 0x4e, 0x9d, 0x2c, + 0xe3, 0x82, 0x6d, 0x39, 0x6e, 0x68, 0x33, 0x1e, 0x5a, 0x96, 0xa2, 0x6e, 0x41, 0x2e, 0x06, 0xe8, + 0x99, 0x93, 0x71, 0x1c, 0x4b, 0x9d, 0x6c, 0x1c, 0x10, 0x17, 0xf8, 0x98, 0x58, 0xd8, 0x1d, 0x81, + 0x9c, 0xd6, 0x8b, 0x82, 0x3b, 0x34, 0xae, 0x51, 0x93, 0x1d, 0xc3, 0x6d, 0x45, 0x9a, 0xc4, 0x82, + 0x32, 0x7e, 0x6c, 0xc9, 0x73, 0x06, 0x9a, 0xd8, 0x37, 0x54, 0xfa, 0x87, 0xfe, 0xc2, 0x97, 0xc6, + 0xea, 0xc0, 0xa8, 0x97, 0xca, 0x4a, 0xc0, 0x4b, 0x0f, 0xc1, 0xe3, 0x53, 0x2a, 0x30, 0x80, 0x74, + 0x3d, 0x80, 0x5b, 0x7e, 0x05, 0x4d, 0x22, 0x9c, 0xf7, 0x4f, 0x6c, 0x03, 0xef, 0x83, 0x95, 0x86, + 0x3b, 0x94, 0xfa, 0x70, 0x28, 0x09, 0xc6, 0xf1, 0xb2, 0x0e, 0xf5, 0x1e, 0xfb, 0xf0, 0x69, 0x62, + 0x60, 0x0e, 0xe1, 0xdd, 0x75, 0x03, 0xff, 0x28, 0xf1, 0x2d, 0x97, 0xd5, 0x6b, 0xcc, 0xdd, 0x53, + 0xa5, 0x61, 0x5c, 0x13, 0xe4, 0x8b, 0xfa, 0x85, 0xe7, 0x23, 0x87, 0x4b, 0x9a, 0x90, 0x63, 0x10, + 0xfa, 0x4e, 0x67, 0x9f, 0x2f, 0xe9, 0x03, 0xb7, 0x28, 0x5d, 0x7a, 0xf8, 0x80, 0x72, 0x21, 0x57, + 0x6d, 0x80, 0xfd, 0x2f, 0x97, 0xb6, 0xf4, 0x0f, 0xea, 0x8f, 0x0b, 0x85, 0x27, 0x5b, 0xe8, 0x2e, + 0xf7, 0xfe, 0xf5, 0x2f, 0xb0, 0xbd, 0x8f, 0x73, 0x09, 0x1d, 0x7e, 0x0e, 0x37, 0x5c, 0x25, 0x0d, + 0xc7, 0x12, 0x89, 0x04, 0xfa, 0x8c, 0x9d, 0x75, 0x36, 0xe6, 0x81, 0x05, 0xfc, 0x2d, 0x15, 0x5d, + 0x5a, 0xe9, 0xd3, 0x3f, 0x50, 0xcc, 0xfe, 0x23, 0x26, 0xe1, 0xb0, 0xa0, 0x4e, 0x9f, 0xd0, 0xc5, + 0x80, 0x01, 0xbb, 0x8c, 0x3c, 0x34, 0x53, 0xfb, 0x05, 0x69, 0x90, 0x89, 0x41, 0xe7, 0x5f, 0xd0, + 0xad, 0x7d, 0x92, 0x23, 0xf3, 0x91, 0xc8, 0x0d, 0xe8, 0x00, 0x2d, 0x11, 0xe3, 0xf5, 0xc2, 0x90, + 0x20, 0xd2, 0x44, 0x08, 0xcc, 0x5b, 0x84, 0x2c, 0x69, 0x17, 0x97, 0x71, 0xfe, 0xe3, 0xb2, 0xec, + 0xb1, 0xbe, 0x90, 0x13, 0xbe, 0x41, 0x9d, 0x09, 0xe0, 0x9b, 0x00, 0x2e, 0xe8, 0x4f, 0x91, 0xd8, + 0xd6, 0x54, 0x95, 0x73, 0x0e, 0x8b, 0xb7, 0x68, 0xaf, 0x64, 0xf6, 0x79, 0x77, 0xfc, 0x85, 0xb4, + 0x95, 0xdc, 0xad, 0x48, 0x1f, 0x0d, 0xe5, 0x31, 0x1a, 0x5e, 0x3b, 0x1f, 0x0f, 0xe5, 0xbf, 0x81, + 0x87, 0xf2, 0x00, 0x0f, 0xfc, 0xca, 0x0f, 0xc0, 0x00, 0x7f, 0x9d, 0x61, 0x3d, 0x39, 0x5f, 0x3b, + 0x9f, 0xc8, 0x3d, 0xe3, 0xb1, 0xcc, 0x5d, 0x38, 0x2a, 0xb9, 0xee, 0x15, 0xd8, 0x96, 0x70, 0xb7, + 0xef, 0xc3, 0xf8, 0xf9, 0x0e, 0x1c, 0xc0, 0xce, 0x28, 0xe3, 0xb1, 0xae, 0xcc, 0xda, 0xf1, 0x44, + 0x05, 0x0e, 0x16, 0x3c, 0x85, 0x1d, 0x7b, 0x2c, 0x12, 0x72, 0xd4, 0x05, 0x58, 0x01, 0xc4, 0x7c, + 0x81, 0x25, 0xc9, 0x15, 0xee, 0xe3, 0x89, 0x08, 0x86, 0x17, 0xc5, 0x38, 0xa7, 0x00, 0x02, 0x48, + 0xe6, 0x0e, 0xd9, 0xfd, 0xc4, 0x34, 0x61, 0x5a, 0x60, 0x40, 0x72, 0x8f, 0x2b, 0xcc, 0x69, 0x48, + 0x22, 0xa1, 0xe7, 0x5e, 0x17, 0xff, 0x74, 0x59, 0x18, 0x03, 0xbd, 0xf2, 0x02, 0xfe, 0x49, 0x33, + 0xd7, 0xdf, 0x7a, 0x18, 0xe1, 0x66, 0x5e, 0x72, 0x28, 0xdd, 0x3a, 0x8e, 0xc0, 0x59, 0x56, 0x8c, + 0x8f, 0x7b, 0x06, 0x28, 0xf2, 0x82, 0xb9, 0xf2, 0xd8, 0x3d, 0xbb, 0xe1, 0xe0, 0xc6, 0x3f, 0x5f, + 0x1c, 0x5b, 0xf3, 0x80, 0x7c, 0xa1, 0x62, 0x2b, 0x20, 0x38, 0xf2, 0xa2, 0x3c, 0x80, 0xe2, 0x71, + 0x3d, 0xa6, 0x24, 0x30, 0x93, 0x72, 0xde, 0x5b, 0xe3, 0x10, 0x76, 0x69, 0x17, 0x52, 0xbc, 0x2a, + 0xb0, 0xaf, 0x0b, 0x94, 0x6b, 0x7f, 0x8e, 0x5d, 0x9a, 0xa2, 0xbc, 0x63, 0xba, 0x4f, 0x4e, 0xd1, + 0x89, 0x7c, 0xfa, 0x76, 0xeb, 0x78, 0x59, 0xb3, 0x74, 0xcb, 0xde, 0x20, 0x53, 0xaf, 0x7d, 0x35, + 0x41, 0x37, 0x0e, 0xde, 0x89, 0x88, 0xfb, 0x4b, 0x36, 0xe3, 0xea, 0x4b, 0x9a, 0xc2, 0xee, 0x2b, + 0x41, 0x02, 0xe2, 0xff, 0xed, 0xb7, 0x07, 0xe2, 0xf7, 0x5a, 0x82, 0xce, 0xb8, 0x0f, 0x0b, 0x06, + 0x55, 0x06, 0xb0, 0x97, 0x5c, 0xec, 0xed, 0xc8, 0x17, 0x9a, 0xea, 0x25, 0xaf, 0x8f, 0x54, 0xd5, + 0x07, 0x71, 0x76, 0xb5, 0xc8, 0xcb, 0xbc, 0x1f, 0xe7, 0x07, 0xae, 0xcb, 0x26, 0x29, 0xc2, 0x25, + 0x65, 0x86, 0xc7, 0x4d, 0x74, 0x95, 0x4f, 0x1a, 0x24, 0x59, 0x39, 0xf1, 0x3a, 0xe1, 0xe2, 0x84, + 0x94, 0x07, 0x46, 0x4a, 0x26, 0xf5, 0xaf, 0x35, 0xc9, 0x99, 0x27, 0xc8, 0x53, 0x75, 0x3e, 0x9d, + 0xff, 0xf9, 0x44, 0x27, 0xa1, 0xb3, 0x83, 0x56, 0x91, 0x48, 0xf2, 0x7c, 0xfd, 0xf2, 0x23, 0xe6, + 0x5d, 0xd7, 0xe3, 0x5e, 0xe1, 0x98, 0xd7, 0xfb, 0xa6, 0x56, 0x57, 0x0d, 0x5c, 0x09, 0x5f, 0x77, + 0xea, 0xa4, 0x3d, 0xa9, 0x93, 0xf6, 0x67, 0x72, 0xea, 0x64, 0x98, 0x27, 0x13, 0x92, 0x4d, 0xb3, + 0xa8, 0xee, 0x91, 0xf2, 0xc4, 0x46, 0x3e, 0xef, 0xe8, 0x1c, 0x49, 0x1d, 0xac, 0x1f, 0x58, 0x99, + 0x75, 0x63, 0x1f, 0xa7, 0xc3, 0xeb, 0x40, 0x88, 0x75, 0xad, 0xda, 0xd6, 0xb5, 0x79, 0x5c, 0x32, + 0xd4, 0x8a, 0x7c, 0x7e, 0x22, 0x88, 0xa7, 0x8a, 0xe7, 0x8f, 0xe3, 0xee, 0xf3, 0xb1, 0x38, 0x13, + 0xbd, 0x51, 0x77, 0x2f, 0xa9, 0xbc, 0x48, 0x1c, 0x6f, 0xa8, 0x80, 0x1c, 0xc0, 0x67, 0xeb, 0x2f, + 0xa7, 0x95, 0x09, 0xd7, 0xaf, 0x05, 0xee, 0x4f, 0x4e, 0x2b, 0x50, 0xe6, 0xcd, 0x9b, 0xf0, 0x22, + 0xe8, 0xa9, 0xf4, 0x5f, 0xff, 0x42, 0xf7, 0x32, 0x96, 0xb9, 0x64, 0xcc, 0x40, 0x7e, 0x44, 0x11, + 0xbd, 0xec, 0xe0, 0x1f, 0x81, 0xd9, 0xef, 0x1f, 0x27, 0xf5, 0x79, 0x3d, 0x95, 0x12, 0x49, 0x00, + 0xea, 0xcf, 0x5f, 0x02, 0x7c, 0x8a, 0x5c, 0x40, 0x04, 0x50, 0x00, 0xc1, 0xf3, 0x96, 0xff, 0xbd, + 0xce, 0x7f, 0x62, 0x5c, 0x12, 0x1c, 0x67, 0xb7, 0x7a, 0xe8, 0x05, 0x67, 0xe7, 0xf5, 0xe3, 0xf3, + 0xc5, 0x57, 0xa9, 0x80, 0xea, 0xa3, 0xb3, 0xea, 0xa3, 0x80, 0xea, 0xa3, 0xb3, 0xf2, 0xc2, 0xf7, + 0xeb, 0x7d, 0xc8, 0x50, 0x0b, 0x5a, 0x7c, 0x53, 0x89, 0x15, 0x9c, 0xd4, 0x49, 0xfb, 0xdb, 0x3a, + 0x09, 0x87, 0x9a, 0x4b, 0x32, 0x1d, 0xe2, 0x2d, 0x43, 0x97, 0x85, 0x2b, 0xfc, 0x52, 0xd0, 0x77, + 0x50, 0x5c, 0x0f, 0xc1, 0xab, 0x85, 0x0f, 0x69, 0x8b, 0x2e, 0x66, 0x82, 0xe7, 0x49, 0x5e, 0x56, + 0x33, 0x27, 0x4f, 0xff, 0x28, 0x77, 0x1a, 0x75, 0x3c, 0xbd, 0x85, 0x04, 0x5f, 0x9d, 0x1e, 0xfc, + 0x89, 0x4b, 0xcc, 0xd8, 0x68, 0x5a, 0x8c, 0x89, 0xfc, 0x11, 0xfb, 0xc0, 0xfa, 0xf1, 0x1c, 0x06, + 0x65, 0x86, 0xfc, 0x95, 0xcc, 0xff, 0x92, 0x78, 0x4e, 0x17, 0xfe, 0x04, 0xc4, 0x09, 0x98, 0x22, + 0x24, 0xef, 0x79, 0xc8, 0x98, 0x5f, 0x7c, 0x4f, 0xe3, 0x26, 0xd0, 0xe0, 0xd3, 0x62, 0xe1, 0xe0, + 0x04, 0x11, 0xa8, 0x71, 0x27, 0x88, 0x61, 0xf2, 0xc0, 0x5c, 0x38, 0xf6, 0x01, 0x38, 0xcd, 0x4d, + 0xe5, 0x39, 0xdc, 0x6c, 0x74, 0xba, 0xe1, 0x18, 0xce, 0x63, 0x9e, 0x9d, 0xcf, 0x8b, 0xd9, 0x23, + 0xd6, 0xe7, 0xab, 0xd9, 0xe3, 0xed, 0xba, 0x1f, 0x39, 0x99, 0x69, 0xfa, 0xb9, 0x6c, 0xb8, 0x83, + 0x1c, 0x98, 0xb7, 0xcf, 0x6c, 0x42, 0xba, 0x12, 0xb2, 0x37, 0xb2, 0x0c, 0x2d, 0xa7, 0x40, 0xcf, + 0x21, 0x04, 0x0c, 0x99, 0x82, 0xb1, 0xcd, 0x43, 0x3a, 0xcc, 0x7c, 0xad, 0xc3, 0x2f, 0x78, 0x95, + 0xcf, 0x5d, 0xe9, 0xc3, 0x6e, 0xd1, 0x47, 0x0f, 0x77, 0x0c, 0xff, 0x08, 0x0f, 0xe8, 0x90, 0x70, + 0x17, 0x85, 0xfc, 0xdb, 0x33, 0xd3, 0x15, 0xd3, 0xdb, 0xb8, 0xc6, 0xb3, 0xd9, 0x20, 0xcb, 0x4f, + 0xbc, 0x42, 0x27, 0x5e, 0x91, 0x25, 0xa3, 0xd8, 0xd5, 0xda, 0x51, 0x24, 0x76, 0x6e, 0x70, 0xb1, + 0xf8, 0x17, 0x58, 0x07, 0xba, 0x6d, 0x78, 0x3a, 0x0f, 0xef, 0x36, 0x3d, 0xdf, 0x9e, 0x96, 0xa9, + 0x5c, 0xd7, 0x07, 0x1a, 0x7e, 0x87, 0xf5, 0x28, 0x66, 0x21, 0xf7, 0x79, 0xf0, 0x67, 0x98, 0x90, + 0x69, 0x1a, 0xe4, 0x78, 0x9f, 0x2f, 0x3f, 0xb3, 0x6e, 0x70, 0xe2, 0x9b, 0x77, 0x9a, 0x1b, 0x52, + 0x40, 0x9f, 0x51, 0x77, 0xd6, 0x80, 0xf1, 0xaa, 0x42, 0xce, 0x54, 0x20, 0x34, 0xe1, 0x04, 0xd5, + 0xd9, 0xd8, 0x31, 0x9f, 0xbd, 0x9f, 0x91, 0x7b, 0xdd, 0x18, 0x8a, 0x7a, 0x7d, 0x7d, 0xf5, 0x7b, + 0xfd, 0xfd, 0x56, 0xfc, 0x1e, 0xab, 0x11, 0x4e, 0x4c, 0xf1, 0x93, 0xae, 0xdd, 0xf7, 0x61, 0x68, + 0xa7, 0x6a, 0x9a, 0xbf, 0xf8, 0x1b, 0x32, 0xcc, 0x1d, 0x79, 0xd4, 0x2b, 0x34, 0xc2, 0xcf, 0x72, + 0x60, 0x31, 0xbc, 0x37, 0x43, 0xaa, 0x1d, 0xc2, 0x33, 0xba, 0xe7, 0x5b, 0x78, 0x05, 0xfc, 0x34, + 0xe1, 0x69, 0x11, 0x19, 0xdf, 0x60, 0xb5, 0x91, 0x4f, 0x02, 0x7d, 0x06, 0x60, 0xdf, 0xa1, 0x2f, + 0x5e, 0xb1, 0x99, 0x7c, 0x3f, 0x6b, 0xd0, 0x9f, 0x5d, 0x91, 0x3c, 0xcd, 0x03, 0x31, 0x95, 0xe0, + 0x93, 0xfe, 0x86, 0x53, 0x30, 0xf2, 0xb0, 0xec, 0x5d, 0x5e, 0x9f, 0x1f, 0x22, 0xc7, 0xc9, 0xd9, + 0xdd, 0x65, 0xbd, 0x8c, 0xa6, 0x91, 0x89, 0xef, 0x65, 0x06, 0x81, 0xee, 0x00, 0xf3, 0x1e, 0x9a, + 0x25, 0x5a, 0x7f, 0x72, 0xdd, 0xd7, 0x53, 0x5b, 0xaf, 0xcd, 0x57, 0x83, 0x25, 0xfc, 0xf5, 0x85, + 0x2f, 0xc6, 0xbc, 0x5a, 0x28, 0x09, 0xac, 0x9f, 0xce, 0xee, 0xcf, 0xba, 0x23, 0x5f, 0xa8, 0x5a, + 0xd8, 0x7f, 0x0a, 0x18, 0x62, 0x57, 0x70, 0x1d, 0xd6, 0xf3, 0xdc, 0x57, 0x21, 0x3d, 0xef, 0xdd, + 0x16, 0x2d, 0x69, 0x46, 0x62, 0x7b, 0xe4, 0xe5, 0x32, 0x1d, 0x02, 0x9e, 0x7b, 0xe7, 0xf6, 0xc3, + 0x3f, 0x8b, 0xda, 0x55, 0x98, 0x0f, 0x42, 0x78, 0xbc, 0x2e, 0x47, 0xdc, 0xf6, 0x83, 0xa6, 0x41, + 0xfe, 0x5c, 0x6c, 0x82, 0xe0, 0xe3, 0xaa, 0xee, 0xd2, 0xdd, 0x3d, 0xbd, 0x20, 0xdd, 0x82, 0x4a, + 0xf1, 0x89, 0x59, 0x40, 0x0e, 0xd7, 0xe6, 0x24, 0x4d, 0xc3, 0x6f, 0x42, 0x38, 0x6f, 0xc1, 0x44, + 0x3e, 0x02, 0x1b, 0x2c, 0x37, 0x2a, 0x0f, 0x49, 0x62, 0xcc, 0x20, 0x03, 0x5d, 0x1c, 0x73, 0xbe, + 0x5c, 0x16, 0x8b, 0x05, 0xaa, 0xb1, 0xbf, 0xb8, 0x5c, 0xb9, 0x26, 0xb5, 0xc1, 0xe3, 0xe8, 0x50, + 0x8d, 0xc7, 0x79, 0xfd, 0x85, 0xba, 0x5a, 0xc5, 0x71, 0x67, 0x8c, 0xee, 0xbb, 0x9e, 0xf0, 0x06, + 0xd2, 0xc6, 0x7a, 0x62, 0x57, 0xfb, 0x48, 0xd8, 0x9d, 0xd5, 0x52, 0x90, 0x92, 0x18, 0x7f, 0x7f, + 0xba, 0x24, 0xc3, 0xc0, 0x20, 0xfc, 0xb3, 0xcb, 0x5f, 0xb0, 0x39, 0xf2, 0xfc, 0xa8, 0xdd, 0x5d, + 0x1e, 0xdf, 0x1e, 0x44, 0x46, 0x2e, 0x13, 0xee, 0xd2, 0x41, 0x7f, 0x49, 0x47, 0x00, 0xfd, 0x0b, + 0xdc, 0x7f, 0xfb, 0x0d, 0xfd, 0xf6, 0xdb, 0x45, 0x49, 0x70, 0xe5, 0xde, 0xf3, 0x50, 0x85, 0x4e, + 0xf3, 0x22, 0x4a, 0xfc, 0xec, 0xea, 0xab, 0xd7, 0xfd, 0xc1, 0xca, 0xeb, 0x9d, 0x98, 0x75, 0xe7, + 0x3c, 0x7f, 0xec, 0xff, 0xc9, 0x3e, 0xda, 0x85, 0xe7, 0xdb, 0xac, 0x70, 0x9b, 0xaa, 0x39, 0x33, + 0x83, 0x5b, 0x7b, 0x81, 0xc5, 0x1f, 0xcc, 0x55, 0x64, 0xff, 0x83, 0xfa, 0xc3, 0xcf, 0x30, 0xe0, + 0xb6, 0x4d, 0x1e, 0x63, 0x06, 0xf3, 0x35, 0x0d, 0xdc, 0xfb, 0x55, 0xb2, 0x0f, 0x86, 0x4c, 0xd2, + 0x39, 0x7f, 0xab, 0xe3, 0x41, 0x2e, 0x42, 0xde, 0x16, 0x81, 0x27, 0x58, 0x2f, 0x78, 0xd7, 0x47, + 0x22, 0x78, 0xff, 0x54, 0x1e, 0xf2, 0x72, 0xda, 0xcd, 0x4c, 0x24, 0x12, 0x7e, 0x5a, 0x74, 0x46, + 0xd3, 0xcf, 0xe0, 0x21, 0xe1, 0x24, 0xd2, 0x88, 0x5d, 0x67, 0x5a, 0xde, 0x96, 0x91, 0xb7, 0x19, + 0x63, 0x82, 0xb2, 0x20, 0x1c, 0x4c, 0xf0, 0x66, 0xe7, 0x67, 0x0c, 0xab, 0xae, 0xa4, 0x64, 0x6c, + 0x8c, 0x2c, 0x16, 0x37, 0x14, 0x7a, 0x0b, 0xd2, 0xf8, 0x91, 0xf1, 0xcb, 0xe5, 0x32, 0xf7, 0xe0, + 0x7a, 0xcc, 0xab, 0x47, 0x07, 0x74, 0x5d, 0x5d, 0x38, 0x20, 0xbf, 0xd6, 0x7d, 0xb2, 0xf2, 0xba, + 0x01, 0x39, 0x18, 0xe1, 0x37, 0xc1, 0x5b, 0x6f, 0xd7, 0x0d, 0xf0, 0xd1, 0x50, 0xbf, 0xde, 0x8f, + 0xe2, 0x57, 0x4d, 0xbc, 0x30, 0x7b, 0x82, 0xe2, 0xe6, 0x48, 0x97, 0x50, 0xa0, 0xcc, 0xaf, 0xf7, + 0x34, 0xe6, 0xba, 0x89, 0xa7, 0x5b, 0xb8, 0x55, 0xe0, 0x39, 0x81, 0x9b, 0xb1, 0x4e, 0x7a, 0x4a, + 0x76, 0x31, 0xdd, 0x27, 0xf5, 0xf1, 0x0a, 0xe9, 0xc3, 0x45, 0x55, 0xcf, 0x5d, 0x12, 0x7f, 0x7c, + 0x7a, 0xfe, 0xee, 0xab, 0x1e, 0x81, 0x5d, 0x4e, 0xd2, 0x29, 0xf8, 0x4c, 0xdb, 0x57, 0xfd, 0x82, + 0xa9, 0x9d, 0x3b, 0xda, 0xf9, 0x59, 0xa5, 0x2f, 0x31, 0xbc, 0xd0, 0x8e, 0xc8, 0x69, 0x23, 0xf7, + 0xe2, 0xd9, 0xe3, 0x1f, 0x91, 0x18, 0xdc, 0x16, 0x77, 0x41, 0xa0, 0x1f, 0x63, 0x7c, 0xb5, 0xe0, + 0x4c, 0x5e, 0xb1, 0xf0, 0x27, 0xda, 0x9f, 0x05, 0xf9, 0xb0, 0xc7, 0xd9, 0x8d, 0x45, 0x62, 0x9e, + 0xb7, 0xba, 0x6d, 0x8b, 0xad, 0x96, 0xb0, 0x3d, 0xc0, 0x05, 0x92, 0x8d, 0x4e, 0xc0, 0x9d, 0x08, + 0xdc, 0x2b, 0x09, 0xb2, 0xcf, 0xee, 0xbb, 0x5d, 0x56, 0xc6, 0xec, 0xc5, 0x2d, 0x8e, 0xa9, 0xfd, + 0x6c, 0xa3, 0xbd, 0xa3, 0x2a, 0x6f, 0x33, 0x33, 0x03, 0xff, 0xea, 0x9d, 0xde, 0xbc, 0xd0, 0x9b, + 0xc1, 0x55, 0x3e, 0x05, 0x1f, 0xd9, 0x4c, 0x2e, 0x33, 0x82, 0xef, 0x9c, 0x53, 0x11, 0x92, 0x55, + 0xdc, 0x20, 0x37, 0xcc, 0xbe, 0x0f, 0x86, 0x35, 0xb8, 0x6a, 0xec, 0x70, 0x2b, 0x3b, 0x53, 0x30, + 0xf6, 0x99, 0xa8, 0x83, 0xfb, 0xa2, 0x9e, 0x56, 0x68, 0xf5, 0xdb, 0xe6, 0x4c, 0xa1, 0x27, 0x93, + 0xc1, 0x4e, 0xde, 0xb7, 0xb5, 0xe8, 0x58, 0x9f, 0x6c, 0xd3, 0xba, 0xe8, 0xa4, 0x92, 0x4b, 0x71, + 0xa1, 0xd3, 0x6b, 0x7e, 0xf7, 0x3e, 0x57, 0xdb, 0x0d, 0xa9, 0xbc, 0xee, 0x39, 0xef, 0xb9, 0x6c, + 0xae, 0xf7, 0xae, 0x77, 0x96, 0xef, 0x6b, 0xd3, 0x2c, 0xe7, 0x2a, 0xab, 0x65, 0xa5, 0x38, 0xe4, + 0xfb, 0x99, 0x6a, 0xbb, 0xdc, 0xa9, 0x1c, 0xfb, 0xd9, 0x89, 0x34, 0x8c, 0xae, 0x0b, 0x19, 0xcd, + 0x29, 0x96, 0x93, 0x5a, 0xa6, 0xbc, 0xa6, 0x92, 0xf9, 0x7e, 0x36, 0x53, 0x48, 0x56, 0xb2, 0xe9, + 0x72, 0xab, 0xdc, 0x9b, 0x95, 0x0b, 0x6c, 0xbf, 0xf1, 0x96, 0x89, 0x1a, 0xef, 0xad, 0x51, 0x59, + 0x2c, 0x2d, 0xc4, 0x64, 0x43, 0x11, 0x19, 0xde, 0x58, 0xad, 0xac, 0xf1, 0x22, 0x6d, 0xa7, 0x1b, + 0xe2, 0x64, 0xfb, 0xfe, 0x6e, 0x14, 0x2b, 0x29, 0xd6, 0x39, 0x5a, 0xdb, 0xad, 0xd8, 0xe0, 0x8e, + 0xd0, 0x26, 0x5a, 0x3b, 0x6e, 0xc4, 0xb6, 0xd0, 0xe9, 0xe9, 0x05, 0x76, 0xc3, 0x4c, 0x57, 0x9d, + 0x32, 0xf3, 0x46, 0x15, 0xf8, 0x4e, 0xae, 0x56, 0xec, 0x8d, 0x46, 0xd5, 0x85, 0xa8, 0x65, 0x2a, + 0xb5, 0xcd, 0x70, 0x4d, 0x97, 0xc4, 0xfc, 0x3e, 0xcd, 0x18, 0xe5, 0xa6, 0xd3, 0x74, 0xd4, 0x46, + 0x69, 0x65, 0x4c, 0x27, 0xeb, 0x64, 0xd5, 0x60, 0x9b, 0x9a, 0xaa, 0x34, 0x8f, 0x75, 0xaa, 0xdc, + 0xd6, 0xc7, 0xd1, 0xe2, 0x51, 0x4f, 0x69, 0xc6, 0xd6, 0x51, 0x17, 0x19, 0xb5, 0x5f, 0xb7, 0x3b, + 0xea, 0xcc, 0x98, 0x37, 0x66, 0xc2, 0xbb, 0x98, 0xab, 0x46, 0x39, 0x01, 0x15, 0x86, 0x99, 0xb7, + 0x9d, 0xaa, 0x6b, 0xc9, 0x3c, 0xda, 0xb2, 0x5b, 0x56, 0x98, 0xd4, 0xe7, 0x7a, 0xb6, 0x99, 0xcc, + 0x37, 0x78, 0x61, 0x5b, 0x1e, 0xed, 0xa2, 0x99, 0x82, 0xc4, 0x16, 0x7a, 0x23, 0x71, 0x5b, 0xde, + 0x88, 0x54, 0x23, 0x93, 0xd6, 0xd9, 0x5a, 0x29, 0x69, 0xda, 0x47, 0x51, 0x3c, 0x4c, 0x1b, 0x49, + 0x7a, 0x6c, 0x51, 0xcb, 0x4c, 0xbb, 0xac, 0x67, 0x3b, 0xb9, 0x4e, 0xae, 0xf2, 0xd6, 0x78, 0x7f, + 0xcb, 0x48, 0x6a, 0xb5, 0x51, 0xb6, 0xf3, 0xad, 0x5a, 0xbb, 0x6f, 0x55, 0xfb, 0xfb, 0x74, 0x8f, + 0x99, 0x99, 0xaa, 0x90, 0x67, 0x32, 0xdb, 0x59, 0x9e, 0x12, 0x87, 0x8e, 0x71, 0xa0, 0x8f, 0x46, + 0x76, 0x92, 0x66, 0x28, 0x08, 0x50, 0x73, 0x31, 0x5f, 0xca, 0x49, 0xf9, 0x32, 0x45, 0xed, 0xe5, + 0xf6, 0xb6, 0x22, 0x4f, 0xd1, 0xb6, 0xbe, 0x13, 0x9d, 0xc5, 0x11, 0x09, 0x95, 0x8e, 0xbc, 0x2f, + 0xd3, 0xbb, 0xae, 0x9a, 0x79, 0x3f, 0xf2, 0xad, 0xbc, 0xd8, 0x2a, 0x31, 0x79, 0x7d, 0x23, 0xe6, + 0xca, 0x33, 0x61, 0x2b, 0x54, 0xec, 0x79, 0x32, 0xe3, 0xcc, 0x99, 0xed, 0x24, 0xbf, 0x6c, 0x8f, + 0x8a, 0xad, 0x4c, 0xf4, 0x7d, 0xac, 0xac, 0x0d, 0x84, 0xb2, 0xe5, 0x9c, 0x5c, 0x6f, 0x8f, 0x36, + 0xcb, 0x45, 0x17, 0xa5, 0x96, 0xec, 0x51, 0x38, 0x46, 0xf9, 0xf9, 0x3e, 0x9b, 0x6b, 0xf5, 0x40, + 0x57, 0x46, 0x25, 0x49, 0x11, 0x47, 0x05, 0xba, 0xde, 0xaf, 0x53, 0x07, 0x47, 0x6c, 0x2d, 0x57, + 0xdb, 0xd4, 0x72, 0x94, 0x69, 0xb3, 0x3c, 0xcd, 0x08, 0x1c, 0x4d, 0xa5, 0xf2, 0x53, 0x40, 0x60, + 0x5a, 0x9a, 0xe5, 0x77, 0x26, 0xd7, 0xcb, 0x34, 0xd4, 0x45, 0x79, 0x72, 0x48, 0x97, 0xa2, 0xc9, + 0xf7, 0xfe, 0x1b, 0x92, 0x72, 0x3d, 0x98, 0x58, 0x9a, 0x03, 0x6e, 0x25, 0x98, 0xc7, 0x8c, 0x66, + 0x81, 0x3e, 0x1e, 0xfa, 0xe5, 0xd9, 0x90, 0x12, 0x27, 0x8e, 0xd3, 0xcf, 0xed, 0x92, 0x29, 0x6d, + 0x93, 0x8a, 0x52, 0x3b, 0x63, 0x46, 0x8d, 0x7a, 0xb9, 0x4d, 0xb1, 0xb5, 0xd9, 0x30, 0x68, 0xb1, + 0x6f, 0xcd, 0xe4, 0x59, 0x46, 0xcd, 0x65, 0x77, 0xfb, 0xe1, 0x24, 0x39, 0x2b, 0xaa, 0x6f, 0x33, + 0xd1, 0xa8, 0xa4, 0x96, 0x6f, 0x52, 0x7e, 0xc1, 0xb2, 0xb9, 0xad, 0xcd, 0xb2, 0xd9, 0xf7, 0x32, + 0x9d, 0x35, 0x75, 0xaa, 0xae, 0x16, 0xc6, 0xb5, 0x56, 0xe7, 0x6d, 0x95, 0x5d, 0x52, 0xfd, 0x43, + 0xa5, 0x3a, 0xa4, 0x27, 0x7c, 0xb6, 0x39, 0xcd, 0x35, 0x16, 0x36, 0x1f, 0x3d, 0x2c, 0x99, 0xe4, + 0x76, 0xc0, 0x0e, 0xdf, 0x2c, 0x4b, 0xd3, 0xd6, 0x8a, 0x55, 0x3c, 0x54, 0x95, 0x8e, 0x30, 0xd0, + 0xb7, 0x86, 0xd0, 0xd9, 0x4c, 0xdf, 0x9c, 0xd1, 0x9e, 0x6e, 0x94, 0x93, 0x73, 0x3b, 0x97, 0x2f, + 0xaa, 0x6d, 0x7b, 0x3d, 0xd4, 0x66, 0x72, 0xad, 0x82, 0x7a, 0xc2, 0x7b, 0xab, 0xf5, 0xbe, 0x94, + 0x32, 0x85, 0xf7, 0x62, 0x07, 0xa6, 0x74, 0x3d, 0x43, 0x51, 0xc7, 0x8b, 0xca, 0x32, 0x29, 0xa6, + 0x2b, 0xa3, 0xc6, 0x5e, 0xae, 0x23, 0x85, 0x5a, 0x2d, 0x91, 0x55, 0x99, 0x74, 0x94, 0xd1, 0xa4, + 0x65, 0x42, 0xbe, 0xdb, 0xee, 0xcc, 0x86, 0x85, 0xf7, 0x75, 0x2a, 0x7b, 0x6c, 0xf4, 0xb7, 0x3d, + 0xad, 0xd7, 0x69, 0xb6, 0x56, 0x28, 0x5a, 0x6b, 0x6d, 0x53, 0xad, 0x94, 0xa3, 0xd9, 0xfd, 0x0c, + 0x0d, 0x99, 0xe8, 0xa2, 0xa3, 0xd4, 0x15, 0xb6, 0xd3, 0x64, 0x96, 0xe3, 0x5d, 0xab, 0x62, 0x28, + 0x29, 0x45, 0xd9, 0xcf, 0x3b, 0x39, 0x7b, 0x04, 0xbc, 0xb6, 0x1c, 0xb5, 0x25, 0x39, 0xbb, 0x6c, + 0xb3, 0x9e, 0xb1, 0x66, 0xca, 0xbb, 0xd2, 0x6f, 0xef, 0xad, 0x4e, 0x83, 0x32, 0x74, 0x14, 0x5d, + 0x6e, 0x7a, 0xe6, 0x30, 0x9a, 0xd2, 0x74, 0xd4, 0x6b, 0xd7, 0x1a, 0xe3, 0xa1, 0xa1, 0x4f, 0xe7, + 0x8b, 0x72, 0xaa, 0x56, 0xdb, 0x36, 0xdb, 0xbb, 0xdd, 0x7c, 0x25, 0x17, 0x8a, 0x73, 0xba, 0x43, + 0xf1, 0xec, 0xea, 0x6d, 0x95, 0x29, 0x54, 0xd9, 0x89, 0xdc, 0x90, 0xdf, 0x75, 0x95, 0xdd, 0xd8, + 0xcb, 0xdc, 0x5a, 0x6f, 0x2e, 0x77, 0x5b, 0xf9, 0x6d, 0xba, 0x6c, 0x46, 0x8f, 0xf9, 0x0e, 0x15, + 0xad, 0x73, 0xcd, 0x56, 0xb6, 0x95, 0xe1, 0x94, 0x52, 0xb2, 0x53, 0x55, 0xf2, 0xf2, 0x61, 0xba, + 0xee, 0x58, 0xfa, 0x50, 0x4e, 0x57, 0x4b, 0xfc, 0x62, 0x29, 0xce, 0xe7, 0xef, 0x5c, 0x63, 0xdb, + 0x5f, 0xa4, 0x85, 0xe1, 0x42, 0x13, 0xda, 0x2a, 0x65, 0x99, 0x9d, 0x83, 0x9e, 0xde, 0xcc, 0xfb, + 0xa9, 0xc3, 0xe0, 0xad, 0x33, 0x9d, 0xa6, 0x16, 0x46, 0xe9, 0xa8, 0x67, 0xe5, 0xc2, 0xbb, 0x29, + 0x97, 0xe6, 0x56, 0x79, 0xa1, 0xb1, 0xbd, 0x7d, 0x73, 0xb7, 0xd2, 0xa2, 0xdb, 0x75, 0x35, 0x9b, + 0x8b, 0xd2, 0xfc, 0x5e, 0x6c, 0xce, 0x7a, 0xb3, 0xe6, 0x70, 0xf6, 0x6e, 0x2c, 0x94, 0x81, 0x9c, + 0x13, 0x1b, 0x54, 0x77, 0xc5, 0x35, 0xe5, 0x85, 0x96, 0xad, 0xcf, 0x2b, 0x1d, 0x21, 0x3f, 0x2e, + 0x56, 0xca, 0x87, 0xb7, 0xde, 0x70, 0xf1, 0x6e, 0x6c, 0x84, 0xd5, 0xb8, 0x78, 0xb0, 0x9b, 0xe9, + 0x7a, 0xa7, 0xb4, 0x3a, 0xe6, 0x29, 0x41, 0xdb, 0x32, 0x54, 0xf3, 0xad, 0x3b, 0xb7, 0x97, 0xb5, + 0x8e, 0xda, 0xd8, 0xd0, 0x82, 0x3e, 0xe1, 0x7b, 0x5b, 0x73, 0x98, 0x3a, 0x52, 0x7a, 0x7e, 0xaa, + 0x71, 0x43, 0x07, 0xc9, 0x59, 0xb4, 0xcb, 0xa6, 0x81, 0x4f, 0x12, 0xa7, 0x6f, 0x72, 0x29, 0x0a, + 0xe5, 0x7b, 0x87, 0x5a, 0x86, 0x8e, 0xda, 0xa5, 0x54, 0x72, 0xbf, 0x94, 0x93, 0x6d, 0xa3, 0xde, + 0xad, 0xca, 0x82, 0xdc, 0x40, 0x94, 0xb1, 0xd0, 0xfb, 0x43, 0xc0, 0x91, 0x13, 0xca, 0x0d, 0x34, + 0xaf, 0x71, 0x0a, 0x33, 0xb7, 0x0b, 0x16, 0x62, 0x1c, 0x21, 0x9f, 0x4e, 0x0f, 0x36, 0x29, 0x8b, + 0x1e, 0xf7, 0x2c, 0x6d, 0xdd, 0x30, 0x56, 0x29, 0x39, 0x9d, 0x5f, 0xcd, 0x99, 0x62, 0x85, 0xa2, + 0x4b, 0x13, 0x23, 0xda, 0x4b, 0x4d, 0x6b, 0xbb, 0x4d, 0xe7, 0x7d, 0xd6, 0x9d, 0x67, 0x0f, 0xe9, + 0x6a, 0x55, 0x9e, 0x1c, 0xd9, 0x1e, 0xcb, 0xc8, 0x4c, 0xce, 0x9c, 0x17, 0xe8, 0x7d, 0x94, 0x99, + 0x54, 0xa9, 0x75, 0xbf, 0xbe, 0xa0, 0x11, 0xbb, 0x3f, 0x88, 0x6f, 0xa3, 0x69, 0x81, 0x36, 0xa2, + 0xbb, 0x05, 0x2d, 0x2f, 0x33, 0x3c, 0x57, 0x29, 0x9a, 0x55, 0xf6, 0x90, 0x19, 0xda, 0xe5, 0x63, + 0xcd, 0xe2, 0xa9, 0xad, 0x74, 0xe8, 0x51, 0xf3, 0x94, 0xd1, 0xea, 0xcc, 0xb8, 0x63, 0xb4, 0xd4, + 0xcd, 0x27, 0x85, 0xc2, 0x61, 0xda, 0x5a, 0x4d, 0xa5, 0xb2, 0x54, 0xe1, 0x86, 0xed, 0x5d, 0x5f, + 0x4c, 0xee, 0x4b, 0xe3, 0x09, 0x9b, 0xe5, 0xd2, 0xf2, 0xb1, 0x4d, 0xd9, 0xca, 0x6a, 0xf4, 0x66, + 0x37, 0x0c, 0x75, 0x21, 0x15, 0xdb, 0xed, 0x42, 0xcd, 0x98, 0xce, 0x9b, 0x87, 0x8a, 0xb4, 0x91, + 0x0e, 0xd5, 0x6e, 0x33, 0xcd, 0x3b, 0x68, 0x3b, 0x6c, 0x8c, 0x33, 0xdb, 0x06, 0xb3, 0x8a, 0x16, + 0x27, 0xd9, 0x49, 0xe9, 0x6d, 0xb7, 0x55, 0x84, 0x5e, 0xd3, 0xec, 0x5a, 0xd1, 0x92, 0xbe, 0x37, + 0xd9, 0xd1, 0xd0, 0x50, 0x2b, 0xc6, 0x22, 0x3f, 0xca, 0x2f, 0xe7, 0x3c, 0xeb, 0x20, 0x69, 0x93, + 0xed, 0x20, 0xba, 0xd7, 0x54, 0xd2, 0xe5, 0x34, 0x67, 0x96, 0xf3, 0xe3, 0xf1, 0xd0, 0x51, 0xe9, + 0xce, 0xf0, 0x2d, 0xcb, 0x47, 0x99, 0x9d, 0x12, 0xad, 0xa0, 0x61, 0x5d, 0x66, 0xb7, 0xed, 0xc1, + 0xa4, 0x57, 0xe8, 0x4b, 0xdd, 0xac, 0x21, 0x08, 0x83, 0x2c, 0xcf, 0x8b, 0x5c, 0x99, 0x1a, 0x95, + 0x57, 0xe5, 0x7c, 0x4d, 0x95, 0x0b, 0xeb, 0x72, 0x72, 0x57, 0x2c, 0x65, 0xb6, 0xc9, 0xb9, 0xf6, + 0x36, 0x4f, 0xa6, 0xd9, 0xc3, 0xa8, 0x28, 0xca, 0x8b, 0xea, 0xb1, 0xd0, 0x9e, 0x14, 0x2d, 0x50, + 0x12, 0x76, 0x53, 0x30, 0x9a, 0x59, 0x71, 0xd7, 0xac, 0xcc, 0xa6, 0xc9, 0xd4, 0x60, 0xde, 0x5d, + 0xf7, 0x05, 0xde, 0x46, 0x49, 0xc1, 0x54, 0x07, 0xbc, 0xba, 0x68, 0x19, 0x4d, 0x70, 0xb7, 0xa5, + 0xf9, 0x5e, 0x8a, 0x2e, 0x0a, 0x03, 0x51, 0xd9, 0x38, 0x63, 0x9e, 0xe3, 0x4c, 0xbd, 0x35, 0x31, + 0xda, 0x54, 0xb1, 0x3a, 0xa0, 0x9d, 0x21, 0x9f, 0x96, 0x4b, 0x99, 0x56, 0xb7, 0x47, 0xd7, 0xdf, + 0xc7, 0x4e, 0xa9, 0x64, 0x18, 0x85, 0x83, 0x3e, 0x49, 0xb7, 0xdb, 0xc7, 0x1e, 0x9d, 0xeb, 0xb4, + 0x3b, 0xeb, 0x7e, 0xae, 0x6e, 0x6a, 0x05, 0xa7, 0x3d, 0xec, 0xf5, 0x95, 0xe2, 0x68, 0x80, 0x1a, + 0xe0, 0xc5, 0xb9, 0x8d, 0x38, 0x02, 0x33, 0x5c, 0x77, 0x17, 0xa3, 0xf1, 0xa0, 0xb5, 0xaa, 0xc9, + 0x85, 0xbc, 0xb8, 0x8b, 0xf2, 0x6f, 0xed, 0x43, 0xa7, 0xd9, 0x65, 0xd2, 0x4b, 0x4e, 0x1c, 0xf4, + 0x33, 0xc6, 0xbc, 0x36, 0xa3, 0xea, 0x5d, 0x34, 0x59, 0x75, 0xc7, 0xf5, 0xa3, 0xcc, 0x46, 0xa7, + 0x8b, 0xb5, 0x92, 0x77, 0x06, 0xfd, 0x6e, 0xe1, 0x50, 0x1b, 0xb3, 0x2b, 0x11, 0x25, 0x69, 0x26, + 0xdf, 0xa2, 0xea, 0x94, 0xc0, 0xf7, 0x07, 0xb4, 0x3d, 0xb4, 0x2d, 0xdd, 0x1e, 0xb5, 0x96, 0xea, + 0x11, 0xf5, 0x73, 0xe9, 0x7d, 0x0d, 0xa5, 0xc5, 0x06, 0xcf, 0x31, 0xf4, 0x24, 0x4f, 0xf7, 0x1a, + 0x05, 0x7e, 0xd6, 0x4d, 0xd1, 0x2d, 0x91, 0x4d, 0xcb, 0x4e, 0x39, 0x57, 0xd4, 0xf2, 0x46, 0xb1, + 0x98, 0xaa, 0x8a, 0x06, 0xdb, 0x29, 0xd6, 0x73, 0xf3, 0x7c, 0x9e, 0xca, 0xd6, 0x46, 0x2b, 0xa5, + 0xb8, 0xa8, 0xd3, 0xc3, 0x6a, 0x4f, 0xb7, 0x52, 0xda, 0x3a, 0xbb, 0x59, 0x1d, 0x76, 0x4b, 0x53, + 0xea, 0x57, 0x7b, 0xdb, 0x5a, 0x29, 0x2f, 0xd4, 0xde, 0x87, 0x7a, 0x96, 0x2e, 0xf0, 0x51, 0x6e, + 0x2d, 0xf6, 0xb6, 0xf6, 0xe4, 0x5d, 0xb0, 0x5a, 0xec, 0x1b, 0x6a, 0x75, 0xc5, 0xbd, 0xb6, 0x3a, + 0x58, 0x1c, 0x9d, 0x5a, 0x8c, 0x92, 0xcb, 0xd1, 0x50, 0xcb, 0x73, 0x4e, 0x7f, 0x38, 0xdc, 0x53, + 0x42, 0xaf, 0x5b, 0x1e, 0xaf, 0x0f, 0xc6, 0xba, 0xd3, 0x11, 0x86, 0x36, 0x27, 0x0c, 0xa9, 0xe6, + 0xb0, 0x65, 0xf6, 0x1a, 0xef, 0xfb, 0x68, 0x3d, 0x3a, 0x1d, 0xce, 0xb9, 0xb7, 0x1a, 0x6a, 0x94, + 0x5a, 0xdb, 0xb1, 0x55, 0x34, 0x8e, 0x0b, 0x69, 0xad, 0x75, 0xf8, 0xa9, 0x90, 0xee, 0x75, 0xd4, + 0xb1, 0xb3, 0xaa, 0x97, 0xf9, 0x06, 0xdd, 0xdf, 0xe6, 0x05, 0x71, 0xaa, 0x0d, 0xa8, 0xd2, 0xae, + 0xc8, 0x65, 0x07, 0xe3, 0xbe, 0x5c, 0xa9, 0xd6, 0xd4, 0x15, 0x63, 0x35, 0x85, 0x9a, 0xb5, 0x5e, + 0x8f, 0xbb, 0x79, 0xb5, 0x64, 0x64, 0xdf, 0x8e, 0x73, 0x47, 0xe7, 0xb6, 0x13, 0xb1, 0xb9, 0xad, + 0x32, 0xd1, 0x3c, 0x9b, 0x42, 0x9b, 0x7c, 0xf5, 0x48, 0x5b, 0x9a, 0xde, 0xe1, 0x86, 0x85, 0xdd, + 0xa8, 0x56, 0x6a, 0x1d, 0x14, 0x08, 0x57, 0xb3, 0x91, 0xce, 0x4e, 0x11, 0xea, 0x2b, 0x7a, 0xa7, + 0x63, 0xf6, 0xd5, 0xad, 0x21, 0x8a, 0x62, 0x6a, 0x3b, 0xae, 0xd4, 0x32, 0x5a, 0x99, 0x37, 0x8e, + 0xe0, 0x37, 0xca, 0x1a, 0x24, 0x89, 0xf3, 0x21, 0x2d, 0xac, 0xa3, 0xa9, 0x64, 0xbe, 0xcc, 0x88, + 0xc6, 0x2e, 0x35, 0xae, 0xd6, 0x19, 0x71, 0x62, 0xd5, 0x38, 0xb9, 0x51, 0x4a, 0x96, 0x9a, 0xc3, + 0x7a, 0x67, 0xb0, 0xdf, 0x18, 0x45, 0x2d, 0x8a, 0x32, 0x69, 0x46, 0x8f, 0x26, 0x05, 0x75, 0xaf, + 0xf4, 0xc7, 0x0d, 0x45, 0xeb, 0xe5, 0xd9, 0xfa, 0x30, 0x6d, 0x2f, 0x86, 0xb5, 0xe3, 0x74, 0x98, + 0xe1, 0x06, 0x7d, 0x96, 0xd1, 0x3a, 0xc2, 0x6c, 0x99, 0x81, 0xe8, 0x4f, 0x55, 0x26, 0xac, 0xd2, + 0x41, 0x06, 0xbd, 0x56, 0x0e, 0xb5, 0xca, 0x94, 0xab, 0xa5, 0x3b, 0x53, 0x47, 0xec, 0x0c, 0x07, + 0x6c, 0x87, 0x7d, 0x7f, 0xaf, 0xa0, 0x45, 0x95, 0x5d, 0xdb, 0x6c, 0xad, 0xdc, 0x19, 0x19, 0x4b, + 0x7e, 0x3b, 0xd9, 0x33, 0x55, 0xad, 0x5e, 0xdd, 0xcc, 0x39, 0xe5, 0x90, 0xcb, 0x1c, 0x93, 0xd5, + 0xd9, 0xa6, 0xcf, 0xab, 0xe9, 0xe2, 0x66, 0xb5, 0x19, 0x74, 0x2a, 0x96, 0x6d, 0x73, 0xeb, 0x43, + 0xad, 0x9b, 0xae, 0x6c, 0xac, 0xb5, 0xd0, 0x36, 0x2b, 0xc2, 0xdc, 0x94, 0xdf, 0x2a, 0xfb, 0x68, + 0x6d, 0x6c, 0xd1, 0x9c, 0x59, 0xac, 0x1d, 0x9b, 0xd1, 0xe4, 0x2a, 0x57, 0x5f, 0x6b, 0xbd, 0x8a, + 0xde, 0xe9, 0x02, 0xe1, 0x6b, 0xdc, 0xb0, 0x6c, 0xd6, 0x98, 0xf7, 0x54, 0x33, 0x6f, 0x0e, 0x25, + 0x66, 0xd2, 0x8b, 0x1e, 0x3b, 0x9d, 0xce, 0xfa, 0x88, 0xf2, 0xf4, 0x20, 0x0a, 0xde, 0xaa, 0x3c, + 0x78, 0x3f, 0xb6, 0x37, 0x99, 0x4a, 0x6a, 0x54, 0x5f, 0x0c, 0x6a, 0xd3, 0x4c, 0xa3, 0x25, 0xf2, + 0xdd, 0xf6, 0x5a, 0x8d, 0x76, 0xdb, 0x53, 0xa9, 0x23, 0x5a, 0xb3, 0xd6, 0x68, 0x36, 0x6f, 0x34, + 0x3b, 0xb9, 0xd6, 0x81, 0x72, 0x26, 0xa8, 0x64, 0x95, 0x41, 0x51, 0x79, 0x73, 0x44, 0x2f, 0x07, + 0x1b, 0x6b, 0x23, 0x9a, 0xd4, 0xdb, 0x64, 0xb3, 0xb5, 0x84, 0x5e, 0xd5, 0x5e, 0xb4, 0x39, 0xbe, + 0x66, 0xd3, 0xba, 0xa8, 0x38, 0xf4, 0xbb, 0xc2, 0x4e, 0xf7, 0xd1, 0x15, 0x5d, 0x57, 0xa9, 0xc2, + 0xa4, 0xcf, 0xf7, 0xf2, 0xad, 0xd1, 0x76, 0x6f, 0x8d, 0xd7, 0xfb, 0xe3, 0x21, 0x5f, 0xed, 0xec, + 0x65, 0x85, 0xea, 0x1f, 0xc7, 0x45, 0x71, 0xdd, 0x6a, 0x2d, 0x06, 0xf4, 0x81, 0x4e, 0xe7, 0x6a, + 0x1d, 0xab, 0xba, 0xdc, 0x39, 0xd5, 0x8a, 0xcd, 0x32, 0x59, 0x75, 0x25, 0x2b, 0x90, 0x81, 0x2d, + 0x8d, 0x66, 0xa9, 0x34, 0xb6, 0xf7, 0x8d, 0xfc, 0x62, 0x46, 0xd3, 0xce, 0x84, 0x11, 0xb3, 0x87, + 0xf1, 0x70, 0x9e, 0xea, 0x2f, 0x0a, 0x68, 0x52, 0x43, 0x7c, 0x53, 0x69, 0xd0, 0x1d, 0x75, 0xc4, + 0x4f, 0x06, 0xb9, 0x7e, 0x77, 0x08, 0x71, 0x8c, 0xdd, 0x69, 0x4b, 0xfe, 0x58, 0xd7, 0x8f, 0xa8, + 0x54, 0xd2, 0x5b, 0xbd, 0x43, 0xae, 0xa7, 0x75, 0x99, 0xc3, 0x34, 0x9d, 0xec, 0xd7, 0x1d, 0x6b, + 0xc0, 0x46, 0x8f, 0x6f, 0x9b, 0xb1, 0x99, 0xd3, 0xe8, 0xc3, 0x5a, 0xe1, 0xab, 0x2d, 0xba, 0xdc, + 0xc3, 0xb8, 0x75, 0xea, 0xbb, 0xce, 0x8c, 0x65, 0xe7, 0x48, 0x1d, 0x96, 0xba, 0x52, 0xf5, 0xd0, + 0x6d, 0xe7, 0xa4, 0x54, 0xee, 0xad, 0x18, 0x2d, 0xcf, 0x73, 0xd3, 0xfa, 0x7a, 0x52, 0x6e, 0xaf, + 0xde, 0xd9, 0xf6, 0xc1, 0x7e, 0xb3, 0xec, 0xee, 0x78, 0x64, 0x09, 0xfa, 0xca, 0x56, 0x5a, 0xea, + 0x8c, 0x9e, 0x36, 0xc7, 0xf9, 0xaa, 0xae, 0xb6, 0x6b, 0x46, 0x6b, 0x31, 0x69, 0x8a, 0x0e, 0xef, + 0xac, 0x7b, 0xbd, 0x86, 0xc5, 0x8b, 0x4d, 0x5e, 0xa0, 0xcd, 0x7a, 0xd9, 0x2c, 0x33, 0xda, 0x9e, + 0x65, 0x87, 0x7d, 0x7d, 0x37, 0x99, 0xa4, 0x95, 0x79, 0xb5, 0xd3, 0x03, 0xbc, 0x9d, 0xc2, 0x72, + 0x59, 0xd0, 0x27, 0xbb, 0xa8, 0x36, 0xae, 0x57, 0x97, 0x85, 0xd2, 0x41, 0xdb, 0xe6, 0xa2, 0xa9, + 0x96, 0xb0, 0xd2, 0x2b, 0xd1, 0x9a, 0x63, 0x4e, 0x9b, 0xc6, 0xde, 0xa4, 0x97, 0x46, 0x43, 0x53, + 0xe9, 0x49, 0x7b, 0x61, 0x42, 0x18, 0xaa, 0x31, 0x96, 0x98, 0x8c, 0x5a, 0x7c, 0xae, 0x1e, 0xa5, + 0x5b, 0xc3, 0x8e, 0x69, 0x4e, 0xea, 0x3a, 0x57, 0x73, 0x90, 0x1d, 0x45, 0xf3, 0x6e, 0x96, 0xcf, + 0x48, 0x2c, 0xc7, 0x35, 0x87, 0x0b, 0x9a, 0x99, 0x54, 0x4a, 0x0e, 0xbf, 0xea, 0x4e, 0xd1, 0x52, + 0x28, 0xf4, 0x9b, 0xf3, 0x4a, 0x0f, 0x49, 0xcb, 0x6a, 0xe5, 0x50, 0x1b, 0xed, 0xb8, 0xd2, 0xa0, + 0xc8, 0x2e, 0x79, 0x45, 0x4c, 0x4f, 0xb7, 0xd9, 0xad, 0xd8, 0x31, 0x33, 0xc3, 0x76, 0xa3, 0x9c, + 0x49, 0x0f, 0x85, 0xce, 0x62, 0x04, 0xa6, 0x10, 0xe5, 0x21, 0x4d, 0x49, 0xd1, 0xcd, 0x01, 0xdd, + 0x1c, 0x57, 0x2b, 0xbd, 0xe3, 0x46, 0xde, 0x2b, 0xb6, 0x74, 0x98, 0x15, 0x3a, 0xe9, 0xd2, 0xe1, + 0xd8, 0xca, 0x6c, 0xd9, 0x85, 0xad, 0x25, 0x0d, 0x39, 0x5d, 0xda, 0x0f, 0xc6, 0xc9, 0xe5, 0x50, + 0xa7, 0x53, 0x55, 0x2b, 0xc5, 0xa6, 0xb8, 0x49, 0x23, 0xbf, 0xef, 0x19, 0xdb, 0x7a, 0x55, 0xe3, + 0xeb, 0x15, 0x4d, 0x4a, 0x49, 0xa3, 0x7a, 0x77, 0xb6, 0xab, 0x55, 0xb6, 0xf5, 0x6e, 0x6d, 0xdb, + 0xd9, 0x48, 0xfa, 0xaa, 0x97, 0xdf, 0xd0, 0x8b, 0x3c, 0x3b, 0xa4, 0x8c, 0xc1, 0x21, 0xad, 0xee, + 0x2a, 0x76, 0xe7, 0xd8, 0x69, 0x66, 0xeb, 0x69, 0xa5, 0x36, 0x64, 0x76, 0xdb, 0x69, 0x63, 0x62, + 0xae, 0xed, 0x06, 0x5b, 0x5f, 0xac, 0x6b, 0xf4, 0x4a, 0xd8, 0x77, 0x99, 0x7a, 0x9e, 0x19, 0x46, + 0x87, 0x53, 0x61, 0x9d, 0x1d, 0x94, 0x6b, 0xa5, 0xcc, 0xa6, 0xb2, 0x93, 0x93, 0x74, 0xfa, 0x9d, + 0xe6, 0xd9, 0xa3, 0x44, 0x6d, 0x87, 0x2b, 0x2a, 0x49, 0xcd, 0x75, 0x5e, 0x1f, 0xac, 0x64, 0x7a, + 0x54, 0xad, 0xb7, 0x1b, 0xd6, 0xd4, 0xa8, 0x3b, 0xc3, 0xb6, 0xc2, 0xf6, 0xde, 0x5a, 0x90, 0x5b, + 0xce, 0x64, 0x6e, 0x99, 0x73, 0x0e, 0xb5, 0x6d, 0xb5, 0x64, 0xa2, 0x24, 0xb3, 0x8f, 0x2e, 0x3b, + 0xca, 0xea, 0x7d, 0x5d, 0xcf, 0x8c, 0x8d, 0x65, 0xb4, 0xb6, 0xca, 0x8d, 0xd5, 0xba, 0xce, 0x38, + 0x95, 0x8a, 0x3e, 0x4a, 0xa1, 0x42, 0xf2, 0x0d, 0xbc, 0xef, 0x7c, 0xb6, 0x50, 0xcb, 0xcb, 0xb7, + 0x9c, 0x35, 0xca, 0xab, 0xc6, 0xdb, 0xbc, 0x59, 0x73, 0xde, 0xa2, 0xc3, 0x45, 0x4e, 0x9b, 0x57, + 0xd6, 0x95, 0x7a, 0xbe, 0x46, 0x95, 0xcc, 0x5d, 0xd5, 0xe8, 0x95, 0xde, 0x9a, 0xef, 0x56, 0xad, + 0x4a, 0xf7, 0x87, 0xdc, 0x66, 0x54, 0x6b, 0x8d, 0xf5, 0x86, 0x90, 0xb5, 0xbb, 0xdb, 0xfe, 0x20, + 0xc3, 0xf4, 0x3a, 0xfd, 0xbc, 0x9a, 0xd9, 0x20, 0x76, 0xcd, 0x0e, 0xad, 0xa2, 0x53, 0x4e, 0x5b, + 0xe5, 0x0e, 0x52, 0xba, 0x2b, 0xa7, 0xb4, 0xd8, 0x73, 0x75, 0x66, 0xd8, 0x66, 0xaa, 0x2b, 0xed, + 0x58, 0x86, 0xec, 0x6b, 0x2a, 0x46, 0x57, 0xed, 0x43, 0x7a, 0x58, 0x73, 0x0c, 0xdb, 0xc8, 0xd9, + 0xfc, 0xb1, 0xc3, 0xe4, 0xfb, 0x93, 0xd2, 0x08, 0x92, 0xd8, 0x01, 0xf7, 0xde, 0xa7, 0xde, 0x1a, + 0x59, 0x26, 0x9b, 0x6f, 0xca, 0xd3, 0x4e, 0x71, 0xfe, 0x46, 0x0d, 0xb6, 0x9b, 0x63, 0x71, 0xfa, + 0x86, 0x18, 0x63, 0x61, 0xa4, 0x51, 0x9a, 0xd1, 0x74, 0xba, 0x12, 0x1d, 0x76, 0x8d, 0x72, 0xad, + 0x76, 0x94, 0x0e, 0xa3, 0xd4, 0x94, 0x19, 0x74, 0x94, 0x5c, 0x4d, 0x60, 0x97, 0x62, 0xfd, 0xc8, + 0xa3, 0x37, 0xb5, 0xdf, 0x5e, 0x32, 0x05, 0x5e, 0xb3, 0xca, 0xeb, 0x7e, 0x7a, 0x63, 0x2e, 0xc5, + 0x36, 0x74, 0x9c, 0x69, 0x55, 0xc5, 0x69, 0xa5, 0xf2, 0x56, 0xfe, 0x6d, 0x6d, 0x75, 0x19, 0x71, + 0x86, 0xb4, 0xa4, 0x49, 0x55, 0x73, 0x49, 0xb5, 0x81, 0xb6, 0x6b, 0x26, 0x5d, 0x2a, 0x34, 0x0f, + 0x9a, 0xf6, 0x2e, 0xf4, 0x0b, 0xbd, 0x76, 0x7d, 0x9f, 0xb2, 0x8b, 0xa2, 0xa1, 0x4a, 0xb2, 0x64, + 0x8a, 0x2d, 0xd4, 0xcb, 0x08, 0x86, 0x54, 0x49, 0x59, 0x63, 0xa7, 0xd7, 0x64, 0x35, 0xbd, 0xd7, + 0x14, 0x73, 0x7a, 0x33, 0x1a, 0xa5, 0xd8, 0x6a, 0xaa, 0xc6, 0xb7, 0x4a, 0xec, 0xfa, 0xa8, 0x89, + 0xa3, 0x7c, 0xdd, 0xd9, 0x4f, 0x20, 0x90, 0x15, 0xb3, 0x33, 0xb3, 0x58, 0x14, 0x3b, 0xfa, 0xb6, + 0x95, 0x3b, 0xf6, 0x5a, 0xdd, 0x2d, 0xa5, 0xd0, 0x8c, 0x3e, 0x28, 0x88, 0x46, 0xbf, 0xb5, 0x17, + 0x51, 0x8d, 0x9a, 0x39, 0xa9, 0xed, 0x70, 0x94, 0x62, 0xe7, 0xcb, 0xe4, 0x8c, 0x03, 0x06, 0x96, + 0xdf, 0x5a, 0x72, 0x6a, 0xa8, 0xe6, 0xa7, 0x6b, 0x7d, 0xd5, 0xd9, 0x6c, 0x0a, 0x8b, 0x37, 0x49, + 0xed, 0x4c, 0x69, 0xbd, 0x9f, 0x56, 0xc0, 0xe2, 0xc0, 0x2c, 0xd3, 0x45, 0xb9, 0x40, 0xa1, 0x46, + 0x4e, 0xa2, 0x9b, 0xc3, 0x71, 0x31, 0x6f, 0xac, 0x36, 0x8d, 0xc5, 0xb4, 0xa9, 0xbf, 0x09, 0x7a, + 0x6f, 0xd2, 0xc9, 0xab, 0x42, 0xb9, 0x43, 0x55, 0x53, 0xda, 0xfc, 0x5d, 0x9f, 0x0a, 0x25, 0x6a, + 0xb0, 0x4a, 0x73, 0x3d, 0xa7, 0xc3, 0x56, 0xdf, 0xd2, 0x1d, 0x6a, 0xa0, 0xad, 0x99, 0xba, 0xa9, + 0xf6, 0xfa, 0x54, 0xf7, 0x6d, 0xb3, 0xad, 0x6c, 0x57, 0x56, 0x2b, 0x73, 0x30, 0x51, 0x7d, 0x32, + 0xeb, 0x50, 0x66, 0xaa, 0xb2, 0x5a, 0x6c, 0xea, 0xb5, 0xb1, 0xba, 0x11, 0xa5, 0xb4, 0xb9, 0x6d, + 0x0d, 0x97, 0xea, 0x66, 0x48, 0x2b, 0xd3, 0xd1, 0x81, 0x7d, 0x7b, 0x5b, 0xd7, 0xd0, 0xa6, 0xb7, + 0x6b, 0x30, 0xfd, 0x99, 0xdc, 0x13, 0x97, 0xf2, 0x6a, 0xfb, 0xce, 0x8f, 0xf3, 0x29, 0x19, 0x9c, + 0xe8, 0xfb, 0x7e, 0x54, 0x5a, 0xe7, 0x26, 0x06, 0x7e, 0xe5, 0xf1, 0x80, 0xd5, 0x07, 0x7b, 0x41, + 0x1b, 0x65, 0x07, 0x69, 0x29, 0x9b, 0x4b, 0xb2, 0x4a, 0x81, 0x6b, 0x71, 0xd9, 0x03, 0x37, 0x49, + 0x56, 0x4d, 0x47, 0x7b, 0xe3, 0xd4, 0xdd, 0x60, 0xb0, 0xb0, 0xa2, 0x75, 0x35, 0xd7, 0x78, 0x13, + 0xec, 0xb9, 0x03, 0xe1, 0x8c, 0x5a, 0x4e, 0x32, 0xe2, 0x52, 0x19, 0xbe, 0xe7, 0xf5, 0x66, 0x85, + 0xd1, 0xd2, 0x3b, 0xae, 0x3a, 0x94, 0xde, 0x97, 0xb9, 0x7c, 0x6d, 0x31, 0x5c, 0x2a, 0xd1, 0x54, + 0x75, 0xd8, 0xdf, 0xed, 0x51, 0x0e, 0x72, 0xd1, 0xf5, 0xa1, 0x52, 0xb4, 0xf7, 0x83, 0xb9, 0xd5, + 0xeb, 0x56, 0x19, 0xa3, 0xbb, 0xa1, 0xad, 0x74, 0x4f, 0x4f, 0x1d, 0xd4, 0x45, 0x75, 0x2b, 0x54, + 0xa9, 0x66, 0x0f, 0x7a, 0xe7, 0x93, 0xe9, 0x65, 0xd6, 0x7c, 0x3f, 0x64, 0xda, 0x9d, 0xf6, 0x68, + 0xd6, 0x5d, 0xa1, 0x3e, 0x5b, 0x9c, 0xca, 0x15, 0x0d, 0xc9, 0x79, 0xb6, 0x59, 0x2a, 0x5b, 0x93, + 0xcd, 0xbc, 0x6e, 0xee, 0x9a, 0xb5, 0xfe, 0xb1, 0xde, 0xa4, 0x79, 0x66, 0x9c, 0x6b, 0x19, 0x99, + 0xd2, 0x32, 0xdb, 0x6e, 0x0c, 0x5b, 0xe3, 0x0a, 0xdb, 0xee, 0x75, 0xa3, 0x2d, 0xba, 0xd9, 0x5f, + 0xe9, 0xb6, 0xaa, 0xaf, 0xb6, 0xc3, 0xde, 0xbc, 0x6d, 0x88, 0xf6, 0x38, 0xeb, 0xbc, 0x29, 0xbb, + 0x51, 0x77, 0x5d, 0xa8, 0x14, 0x57, 0x10, 0xeb, 0x73, 0x0a, 0xb7, 0x38, 0x34, 0x4b, 0xc5, 0x55, + 0x97, 0x5d, 0xee, 0x33, 0xfd, 0xc9, 0x12, 0x7c, 0x89, 0x59, 0xe5, 0x66, 0x93, 0x23, 0xb7, 0x6e, + 0xa8, 0x33, 0x9c, 0x53, 0x74, 0x4a, 0x6a, 0xdf, 0x80, 0xd9, 0x76, 0x6a, 0xfe, 0xb6, 0x66, 0xf4, + 0x8d, 0xc1, 0xed, 0xdb, 0x93, 0xb7, 0x5c, 0x14, 0xdc, 0x86, 0x3e, 0x2b, 0x15, 0x4a, 0x30, 0xe7, + 0xcf, 0x94, 0x16, 0xb9, 0xf6, 0x60, 0x38, 0xa3, 0x47, 0xd3, 0x4a, 0x69, 0x33, 0xa0, 0x79, 0x48, + 0xcf, 0xa7, 0x83, 0xe8, 0x44, 0x28, 0xab, 0x92, 0xb4, 0x11, 0x2a, 0xfb, 0x8e, 0x40, 0xed, 0xa3, + 0xf2, 0x42, 0x30, 0xb5, 0xa6, 0x4d, 0x55, 0x8a, 0xf3, 0xdd, 0x16, 0x1d, 0x5a, 0x25, 0x81, 0x39, + 0x34, 0x0e, 0xf9, 0xd4, 0x70, 0x6b, 0x37, 0xc6, 0xfd, 0x52, 0x25, 0xdf, 0x59, 0x30, 0x94, 0x92, + 0x59, 0x98, 0xe3, 0x46, 0x3f, 0xbd, 0xad, 0x02, 0x7a, 0x87, 0x92, 0xb8, 0x67, 0x92, 0xe2, 0xa1, + 0x3d, 0x85, 0x04, 0xd0, 0x2a, 0xe6, 0x9a, 0x4a, 0xbf, 0xd8, 0x45, 0x8d, 0xe5, 0xdb, 0x06, 0x35, + 0xb5, 0x92, 0xdd, 0x6f, 0x0f, 0x97, 0x06, 0xed, 0xd0, 0xcb, 0x15, 0x67, 0x0f, 0x45, 0x2e, 0x47, + 0xe7, 0x9a, 0xe3, 0x5c, 0xb6, 0x98, 0x52, 0xa3, 0xcc, 0x7c, 0x9d, 0x4e, 0x35, 0x16, 0x99, 0x12, + 0xbd, 0xde, 0xaa, 0x36, 0xd7, 0x5b, 0xac, 0xf7, 0x43, 0x98, 0x9f, 0x27, 0xbb, 0xb9, 0x56, 0x61, + 0x5e, 0x4f, 0x8f, 0x87, 0xa9, 0x26, 0xca, 0x19, 0xcb, 0x5a, 0x77, 0x3a, 0x3b, 0x4c, 0x21, 0x85, + 0x77, 0x84, 0xc5, 0xa6, 0x3d, 0x9d, 0xee, 0x56, 0x6c, 0x2f, 0x5b, 0x68, 0xcc, 0x93, 0x34, 0xad, + 0x57, 0x87, 0xf9, 0x19, 0x62, 0xd3, 0xfb, 0x43, 0x92, 0x5b, 0xbc, 0x19, 0xfb, 0x75, 0x9a, 0xaa, + 0x19, 0x99, 0xa6, 0x35, 0x9b, 0xe6, 0x0f, 0xdb, 0x8a, 0x94, 0x3a, 0x6c, 0xf8, 0x7c, 0xa3, 0x9d, + 0x1b, 0x66, 0x32, 0xaa, 0x20, 0x8f, 0xa6, 0x79, 0x59, 0x56, 0x9a, 0x36, 0x1a, 0xe8, 0x87, 0x99, + 0xa5, 0x18, 0x45, 0x6a, 0xf8, 0x46, 0x97, 0x53, 0xd5, 0x42, 0xff, 0x50, 0xee, 0x36, 0xd8, 0x28, + 0x33, 0x68, 0xb4, 0xd2, 0xb9, 0x65, 0x9a, 0xe6, 0xa3, 0x5a, 0xb1, 0xd1, 0x90, 0xa3, 0xcd, 0x6d, + 0x47, 0x65, 0x97, 0x2b, 0x63, 0xac, 0x8f, 0xba, 0xd3, 0x92, 0x5e, 0xe5, 0x06, 0x6d, 0x9d, 0x9e, + 0x65, 0x84, 0x2e, 0x67, 0xe7, 0xb6, 0x0b, 0x61, 0xce, 0x24, 0x91, 0xb5, 0x4f, 0xbf, 0xb7, 0x36, + 0x75, 0x59, 0x70, 0x96, 0x25, 0x67, 0x57, 0xa2, 0xf6, 0xbb, 0x8c, 0xd2, 0x10, 0x92, 0xc6, 0xb0, + 0x95, 0x2a, 0xcd, 0x8f, 0x26, 0x7a, 0xdb, 0x4a, 0xf2, 0x32, 0x3b, 0x9b, 0xda, 0x60, 0x2d, 0x93, + 0x3d, 0x65, 0xe5, 0xb3, 0x07, 0x65, 0xb3, 0xed, 0xb4, 0x4a, 0xfd, 0x62, 0xb2, 0x4c, 0xb3, 0x47, + 0xaa, 0xc0, 0x8a, 0xc9, 0x56, 0x2b, 0xc9, 0xed, 0xa3, 0x65, 0x14, 0x4d, 0xa6, 0x66, 0xc9, 0x55, + 0x26, 0x3d, 0x7b, 0x1b, 0x96, 0xe6, 0x0c, 0x1a, 0x3a, 0x5a, 0x83, 0x97, 0x50, 0xeb, 0x38, 0x18, + 0x2a, 0xe2, 0xb8, 0x8b, 0xb2, 0xc6, 0x40, 0xe0, 0x2b, 0x52, 0x4b, 0x99, 0x4e, 0x9d, 0x64, 0x56, + 0xdd, 0xb0, 0xfa, 0x4a, 0xb3, 0x44, 0x33, 0x59, 0xd2, 0x93, 0x6b, 0xd5, 0xae, 0x33, 0x0d, 0x2e, + 0x55, 0x6a, 0xa8, 0x5c, 0xca, 0x61, 0x65, 0xbd, 0x3b, 0x39, 0x2e, 0x99, 0xa6, 0xce, 0xae, 0x4a, + 0xb3, 0xd4, 0x28, 0xd7, 0xa8, 0x4c, 0xa6, 0x13, 0x29, 0x63, 0x38, 0x51, 0x64, 0x37, 0xb2, 0x9b, + 0x69, 0xfa, 0xbd, 0x59, 0xa1, 0x16, 0x53, 0x2b, 0xdb, 0x55, 0x46, 0xdd, 0x68, 0xf2, 0x60, 0x18, + 0x46, 0xa3, 0x7b, 0x40, 0x52, 0x7d, 0x56, 0xa4, 0xd5, 0xe8, 0x32, 0xaf, 0xd8, 0xcc, 0x71, 0x72, + 0x50, 0xcc, 0xb7, 0x55, 0x15, 0xa1, 0x1c, 0x33, 0xde, 0x4d, 0x86, 0x59, 0x34, 0xc9, 0x4d, 0xd9, + 0x52, 0x59, 0x2a, 0x44, 0xe5, 0x7a, 0x67, 0xcc, 0xd2, 0xa6, 0x30, 0x68, 0xa7, 0xad, 0x43, 0x5a, + 0x82, 0xa9, 0xe2, 0x21, 0xc9, 0x0e, 0xb3, 0x69, 0x1e, 0x1c, 0x64, 0xa6, 0x94, 0xdc, 0xd6, 0x5b, + 0x53, 0xc6, 0x68, 0xcb, 0xa3, 0x59, 0x33, 0x95, 0xcf, 0x98, 0x87, 0x7a, 0xb1, 0xd1, 0x2a, 0xbd, + 0x9b, 0x2d, 0xbc, 0x44, 0x94, 0xe9, 0xf4, 0xfa, 0x8d, 0x76, 0x85, 0xcf, 0x8d, 0xde, 0xdf, 0xc3, + 0x31, 0x55, 0x9f, 0xbd, 0x3e, 0x7a, 0x2e, 0xc5, 0x7d, 0x35, 0x6f, 0xe4, 0x05, 0xda, 0x24, 0xf0, + 0x8b, 0x79, 0xdd, 0x35, 0x29, 0xb2, 0x6a, 0x85, 0xcf, 0x6c, 0x3e, 0xee, 0xe7, 0xbf, 0xbc, 0x38, + 0x82, 0xff, 0xdb, 0xa6, 0x65, 0x82, 0xbc, 0xb5, 0xd4, 0x5b, 0xd0, 0xba, 0x5d, 0x6b, 0x54, 0x54, + 0x1b, 0x9f, 0xeb, 0x56, 0xbc, 0xbd, 0x92, 0x2f, 0x17, 0x03, 0xdd, 0x63, 0x50, 0xee, 0x89, 0x0c, + 0xbc, 0x2f, 0x7a, 0x67, 0x4b, 0x38, 0xa1, 0x91, 0x93, 0xea, 0x7f, 0xff, 0x72, 0xa0, 0xe7, 0xaf, + 0x6a, 0xe9, 0xcf, 0x48, 0xe4, 0xe5, 0x5b, 0xd2, 0x7b, 0x7d, 0xca, 0xe5, 0xcb, 0x54, 0xce, 0xaf, + 0x5e, 0x39, 0x11, 0x7f, 0x83, 0xe5, 0xef, 0xf9, 0x46, 0xcd, 0x3b, 0x8a, 0x84, 0x5f, 0x62, 0x84, + 0x94, 0xdf, 0x63, 0xa1, 0xa7, 0x48, 0xe8, 0xf5, 0x7b, 0xe8, 0xe3, 0xf2, 0x6d, 0x2e, 0xee, 0xd2, + 0xbd, 0xf7, 0xd2, 0x61, 0x8f, 0x81, 0xa1, 0xd7, 0x87, 0x8f, 0x09, 0xfd, 0xee, 0xb5, 0xfc, 0x3d, + 0xf2, 0x72, 0x09, 0xc7, 0x5d, 0xcf, 0xff, 0x3d, 0x79, 0xaa, 0xbf, 0x7d, 0x37, 0x8d, 0xbb, 0x0b, + 0xe2, 0xed, 0x97, 0x21, 0x8c, 0x8b, 0x7f, 0xed, 0x6f, 0x94, 0x3c, 0xea, 0xe3, 0xbf, 0x13, 0xf9, + 0x16, 0x7d, 0xff, 0xdf, 0x25, 0x01, 0xc1, 0x93, 0x58, 0x40, 0x8c, 0x57, 0xf9, 0x72, 0xdb, 0xf5, + 0xf3, 0xde, 0x90, 0xde, 0xa6, 0x01, 0xd9, 0x76, 0x7e, 0x3c, 0xe2, 0xe5, 0x8e, 0xc2, 0xef, 0x45, + 0x34, 0xd7, 0x90, 0x15, 0x9a, 0x20, 0x55, 0x0f, 0x65, 0x26, 0xd6, 0x66, 0x8a, 0x8c, 0x10, 0x7e, + 0xa5, 0x54, 0xdf, 0x1d, 0xfb, 0x19, 0xf8, 0x4f, 0x5a, 0x5e, 0xf3, 0xcd, 0xc5, 0x22, 0x50, 0x78, + 0xba, 0x09, 0x48, 0xff, 0x5b, 0xd2, 0x7b, 0xb1, 0x2a, 0x79, 0xd3, 0x36, 0xfe, 0xdf, 0x69, 0xff, + 0x2f, 0xe0, 0x4c, 0xd4, 0x26, 0xb5, 0x76, 0x00, 0x00 +}; \ No newline at end of file diff --git a/lib/MatrixUI/Fonts/AwtrixFont.h b/src/AwtrixFont.h similarity index 100% rename from lib/MatrixUI/Fonts/AwtrixFont.h rename to src/AwtrixFont.h diff --git a/src/Dictionary.cpp b/src/Dictionary.cpp index 235fe734..1121f824 100644 --- a/src/Dictionary.cpp +++ b/src/Dictionary.cpp @@ -42,7 +42,7 @@ const char HAbriOptions[] PROGMEM = {"Manual;Auto"}; const char HAeffectID[] PROGMEM = {"%s_eff"}; const char HAeffectIcon[] PROGMEM = {"mdi:auto-fix"}; const char HAeffectName[] PROGMEM = {"Transition effect"}; -const char HAeffectOptions[] PROGMEM = {"Slide;Fade;Zoom;Rotate;Pixelate;Curtain;Ripple;Blink;Reload;Crossfade"}; +const char HAeffectOptions[] PROGMEM = {"Slide;Dim;Zoom;Rotate;Pixelate;Curtain;Ripple;Blink;Reload;Fade"}; const char HAbtnaID[] PROGMEM = {"%s_btna"}; const char HAbtnaIcon[] PROGMEM = {"mdi:bell-off"}; diff --git a/lib/MatrixUI/GifPlayer.h b/src/GifPlayer.h similarity index 100% rename from lib/MatrixUI/GifPlayer.h rename to src/GifPlayer.h diff --git a/src/MatrixDisplayUi.cpp b/src/MatrixDisplayUi.cpp index 035ff26b..ac944c54 100644 --- a/src/MatrixDisplayUi.cpp +++ b/src/MatrixDisplayUi.cpp @@ -28,7 +28,7 @@ */ int pixelDelays[32][8]; #include "MatrixDisplayUi.h" -#include "Fonts/AwtrixFont.h" +#include "AwtrixFont.h" #include "effects.h" #include "Globals.h" diff --git a/src/ServerManager.cpp b/src/ServerManager.cpp index 5a09470d..54f5b713 100644 --- a/src/ServerManager.cpp +++ b/src/ServerManager.cpp @@ -68,6 +68,8 @@ void addHandler() { mws.addHandler("/api/power", HTTP_POST, []() { DisplayManager.powerStateParse(mws.webserver->arg("plain").c_str()); mws.webserver->send(200,F("text/plain"),F("OK")); }); + mws.addHandler("/api/loop", HTTP_GET, []() + { mws.webserver->send_P(200, "application/json", DisplayManager.getAppsAsJson().c_str()); }); mws.addHandler("/api/effects", HTTP_GET, []() { mws.webserver->send_P(200, "application/json", DisplayManager.getEffectNames().c_str()); }); mws.addHandler("/api/transitions", HTTP_GET, []() diff --git a/src/setup_htm.h b/src/setup_htm.h deleted file mode 100644 index efadb940..00000000 --- a/src/setup_htm.h +++ /dev/null @@ -1,530 +0,0 @@ -#define SETUP_HTML_SIZE 8421 -const char SETUP_HTML[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xed, 0x7d, 0xe9, 0x77, 0xdb, 0x46, - 0x96, 0xef, 0xf7, 0x39, 0x67, 0xfe, 0x07, 0x84, 0x59, 0x2c, 0x8e, 0x01, 0x08, 0x0b, 0x09, 0x70, - 0x31, 0x95, 0x76, 0x2b, 0xce, 0x71, 0xde, 0x93, 0x13, 0x9f, 0x76, 0xda, 0x3d, 0xd3, 0x39, 0x3e, - 0xaf, 0x21, 0xb2, 0x28, 0xa2, 0x0d, 0x12, 0x1c, 0x00, 0x92, 0x2c, 0xb3, 0xf9, 0xbf, 0xcf, 0xef, - 0xde, 0xaa, 0xc2, 0x46, 0x90, 0x52, 0xba, 0x93, 0xf9, 0xf4, 0x62, 0x1b, 0x4b, 0x2d, 0xb7, 0xee, - 0x7e, 0x6f, 0x2d, 0x60, 0x5e, 0x7c, 0xf1, 0xdd, 0x4f, 0x97, 0x3f, 0xff, 0xd7, 0xdb, 0x57, 0xc6, - 0xaa, 0x58, 0x27, 0x17, 0xff, 0xfe, 0x6f, 0x2f, 0xd4, 0x9d, 0x9e, 0x44, 0xb4, 0xc0, 0x93, 0x81, - 0xff, 0x5e, 0xac, 0x45, 0x11, 0x19, 0xf3, 0x55, 0x94, 0xe5, 0xa2, 0x98, 0xdd, 0x16, 0x4b, 0x6b, - 0x64, 0x9c, 0xeb, 0xba, 0x22, 0x2e, 0x12, 0x71, 0xf1, 0xf2, 0x2f, 0x3f, 0xff, 0xe9, 0x87, 0xff, - 0x34, 0xae, 0xe2, 0x9b, 0x55, 0xf1, 0xe2, 0x5c, 0x96, 0x35, 0x3a, 0xa7, 0x9b, 0x42, 0x6c, 0x8a, - 0x59, 0xef, 0x3e, 0x5e, 0x14, 0xab, 0xd9, 0x42, 0xdc, 0xc5, 0x73, 0x61, 0xf1, 0x8b, 0x69, 0xc4, - 0x9b, 0xb8, 0x88, 0xa3, 0xc4, 0xca, 0xe7, 0x51, 0x22, 0x66, 0x6e, 0xcf, 0xd8, 0x44, 0x6b, 0x31, - 0xbb, 0x8b, 0xc5, 0xfd, 0x36, 0xcd, 0x8a, 0x6a, 0xa8, 0xbc, 0x78, 0x00, 0x58, 0x3b, 0xde, 0x6c, - 0x81, 0x43, 0x9c, 0x88, 0xdd, 0x4a, 0xd0, 0x78, 0x13, 0xd7, 0xd9, 0x7e, 0x9a, 0xa6, 0xdb, 0x68, - 0x1e, 0x17, 0x0f, 0x13, 0x67, 0x9a, 0xde, 0x89, 0x6c, 0x99, 0xa4, 0xf7, 0x93, 0x55, 0xbc, 0x58, - 0x88, 0xcd, 0x74, 0x9b, 0xe6, 0x80, 0x9f, 0x6e, 0x26, 0xd1, 0x75, 0x9e, 0x26, 0xb7, 0x85, 0x98, - 0xf2, 0xb8, 0xb2, 0xdb, 0x67, 0x2b, 0xde, 0x2c, 0xc4, 0xa7, 0x89, 0xe5, 0xee, 0xed, 0x24, 0x8d, - 0x16, 0x22, 0x33, 0xd5, 0x7d, 0x12, 0x2d, 0x8b, 0xda, 0xdb, 0xb5, 0x58, 0xa6, 0x99, 0xd8, 0x59, - 0xf7, 0xe2, 0xfa, 0x63, 0x5c, 0x58, 0xd1, 0x26, 0x5e, 0x47, 0x04, 0xd5, 0x02, 0x26, 0x89, 0xb5, - 0x4e, 0x17, 0x62, 0x72, 0x9d, 0x16, 0xab, 0xe9, 0xd1, 0x8a, 0x83, 0x9e, 0x13, 0x82, 0x1c, 0x1a, - 0xae, 0x3d, 0xca, 0x0d, 0x11, 0xe5, 0x02, 0x98, 0x58, 0xe9, 0x6d, 0x01, 0x76, 0x2c, 0x89, 0x23, - 0x62, 0xfa, 0xf4, 0x96, 0xd7, 0x69, 0x06, 0x1c, 0xad, 0x2c, 0x5a, 0xc4, 0xb7, 0xf9, 0x64, 0xe8, - 0x7c, 0x3d, 0x55, 0xac, 0xf1, 0xc4, 0x5a, 0x51, 0x8b, 0x27, 0x4d, 0x61, 0x07, 0x11, 0x0b, 0x91, - 0x44, 0x0f, 0x13, 0xcb, 0x76, 0x83, 0x7c, 0xda, 0x5d, 0x3a, 0x4f, 0x93, 0x34, 0x9b, 0x7c, 0xe9, - 0xfb, 0xfe, 0x74, 0x09, 0x61, 0x5a, 0x79, 0xfc, 0x59, 0x48, 0x16, 0xae, 0xa3, 0xec, 0x06, 0x08, - 0x25, 0x62, 0x59, 0x4c, 0xa2, 0xdb, 0x22, 0xd5, 0x05, 0x19, 0x63, 0xc0, 0x25, 0xa5, 0x08, 0x32, - 0x40, 0x2c, 0xe2, 0x3b, 0x31, 0x2d, 0xc4, 0xa7, 0x82, 0x59, 0xbf, 0x29, 0x26, 0xd6, 0x18, 0xff, - 0x01, 0x51, 0x8d, 0x56, 0x91, 0x45, 0x9b, 0x1c, 0xdc, 0x5e, 0x4f, 0xf8, 0x09, 0x3d, 0xc4, 0x5f, - 0xcf, 0x9c, 0xfe, 0xd4, 0x5a, 0xe7, 0x47, 0xeb, 0x8e, 0x95, 0x6b, 0xf9, 0x62, 0x84, 0xfd, 0x49, - 0xc1, 0x2a, 0x0d, 0x9d, 0xf4, 0x7a, 0x1d, 0x0a, 0x53, 0xa4, 0xdb, 0x89, 0xb3, 0x7f, 0x54, 0x15, - 0x34, 0xbf, 0x7c, 0xaf, 0x8b, 0x8b, 0x54, 0xca, 0x4c, 0xb2, 0x06, 0xf6, 0xb0, 0x92, 0x86, 0x44, - 0x67, 0xc7, 0x35, 0xb2, 0xe2, 0x0f, 0x1a, 0xf2, 0x47, 0xf1, 0xb0, 0xcc, 0x60, 0x0b, 0xb9, 0xc1, - 0x0a, 0xb0, 0x73, 0xbe, 0x36, 0x47, 0xf8, 0x57, 0xa4, 0xbb, 0xeb, 0xf4, 0x93, 0x95, 0xaf, 0xa2, - 0x05, 0xb4, 0xdc, 0x31, 0x3c, 0xea, 0x65, 0x38, 0x86, 0xe5, 0xda, 0x3e, 0xba, 0x0f, 0x9c, 0xaf, - 0xbb, 0xeb, 0x9d, 0xfd, 0xfe, 0x0f, 0xbf, 0x3d, 0xc8, 0x22, 0x9b, 0xac, 0xc8, 0xe4, 0x76, 0xd0, - 0xf7, 0x82, 0xb8, 0xc3, 0x72, 0xdf, 0x88, 0x3c, 0x3f, 0x1b, 0x0d, 0xbf, 0xee, 0xef, 0xed, 0x05, - 0x19, 0x41, 0x94, 0xec, 0xae, 0xa3, 0xf9, 0xc7, 0x9b, 0x2c, 0xbd, 0xdd, 0x2c, 0x2c, 0xa9, 0x4c, - 0x2b, 0x88, 0xe9, 0xcc, 0x31, 0x31, 0xbc, 0xeb, 0xe0, 0x62, 0x8f, 0x87, 0x7d, 0xa5, 0xc9, 0x13, - 0x77, 0xfb, 0xc9, 0x00, 0xef, 0xe3, 0x85, 0x41, 0x1a, 0x87, 0xff, 0x82, 0xb6, 0x92, 0xb3, 0xea, - 0x35, 0x70, 0xf2, 0xd1, 0x67, 0x84, 0x7f, 0xd9, 0xcd, 0x35, 0x83, 0xc5, 0x1f, 0xdb, 0x1b, 0xf4, - 0xa7, 0xcb, 0x44, 0x7c, 0xb2, 0x16, 0x71, 0x26, 0xe6, 0x2c, 0x54, 0x8c, 0x7d, 0xbb, 0xde, 0x48, - 0x49, 0x90, 0xa5, 0xac, 0xa3, 0x4f, 0x96, 0xb2, 0x96, 0x81, 0x73, 0xb7, 0xe2, 0x77, 0x69, 0x32, - 0x63, 0xd4, 0xb2, 0x9e, 0x46, 0x49, 0x7c, 0x03, 0x23, 0x44, 0x0f, 0xd6, 0x84, 0x01, 0x95, 0x1f, - 0xea, 0xdb, 0x99, 0x05, 0x70, 0x26, 0x5d, 0xfa, 0xda, 0xe6, 0xc0, 0xa4, 0xa6, 0x06, 0x2a, 0x5e, - 0x98, 0xfa, 0xc1, 0x9a, 0x27, 0x69, 0x2e, 0x76, 0x8b, 0x38, 0xdf, 0x92, 0x92, 0x10, 0xaa, 0x87, - 0xea, 0xb7, 0x6f, 0xb5, 0x66, 0x74, 0x2c, 0xd8, 0xfd, 0x3a, 0x9f, 0xcc, 0xa1, 0xb3, 0x22, 0xd3, - 0xd6, 0xe9, 0xba, 0xee, 0xc8, 0x0b, 0xa7, 0xf3, 0xdb, 0x2c, 0xc7, 0xeb, 0x36, 0x8d, 0xb9, 0x52, - 0x53, 0x47, 0x32, 0x9b, 0xfe, 0xfd, 0x36, 0x2f, 0xe2, 0xe5, 0x83, 0xa5, 0xf5, 0x5d, 0x01, 0x90, - 0xc6, 0xea, 0x48, 0x4d, 0x57, 0xe8, 0x2b, 0x35, 0xd5, 0x83, 0xb3, 0x57, 0xdf, 0x35, 0x47, 0xda, - 0x46, 0x8b, 0x45, 0xbc, 0xb9, 0x99, 0xb8, 0xac, 0x0f, 0xe4, 0x6d, 0x0e, 0x4d, 0x5d, 0x02, 0x83, - 0x6f, 0x9f, 0x9f, 0x91, 0x9c, 0x0d, 0xcb, 0x60, 0xc0, 0xfd, 0x1a, 0x59, 0x12, 0x97, 0x9d, 0x92, - 0x30, 0xe1, 0x50, 0x53, 0x00, 0xe1, 0xd0, 0x9f, 0xca, 0xad, 0x4b, 0x8f, 0xa2, 0x06, 0x66, 0xb7, - 0x86, 0x0e, 0x9b, 0xe8, 0xee, 0x50, 0xc1, 0xd8, 0x5b, 0xb5, 0x7c, 0x23, 0xb4, 0x06, 0x50, 0xa2, - 0x62, 0xc2, 0x14, 0x97, 0x7e, 0x12, 0x8a, 0x63, 0x1e, 0x44, 0x0e, 0x89, 0xf9, 0x12, 0x96, 0xa8, - 0x30, 0xd4, 0x43, 0x19, 0x91, 0xe6, 0xc3, 0xd2, 0xa3, 0x3f, 0x53, 0x2d, 0xc0, 0xeb, 0x24, 0x9d, - 0x7f, 0x54, 0x03, 0xb0, 0xbe, 0xd4, 0x7c, 0x65, 0x80, 0xa1, 0x35, 0xda, 0x40, 0xc3, 0x60, 0x0d, - 0xae, 0xe9, 0x97, 0x92, 0x04, 0x97, 0x2c, 0xc4, 0x3c, 0xcd, 0xa4, 0xef, 0xdf, 0xa4, 0x1b, 0x51, - 0x8d, 0xab, 0x6c, 0xed, 0x90, 0xd4, 0xc5, 0x62, 0xa1, 0xb5, 0xc0, 0x71, 0x9c, 0xaa, 0x83, 0x1d, - 0xcd, 0x49, 0x0a, 0x1d, 0x3d, 0x86, 0xc1, 0xdc, 0x19, 0x39, 0xba, 0xd3, 0x72, 0xb9, 0x2c, 0x3b, - 0xd9, 0x31, 0xe8, 0x2d, 0x95, 0x92, 0x11, 0xf8, 0x0f, 0x69, 0xff, 0xf1, 0x67, 0xc2, 0x5e, 0xb1, - 0x14, 0x25, 0xe4, 0xc4, 0x6e, 0xd2, 0x9d, 0x0e, 0xa8, 0xce, 0xd7, 0x28, 0xb8, 0x4e, 0x60, 0x3f, - 0xcb, 0x78, 0xa7, 0x69, 0x75, 0xea, 0x44, 0x32, 0xd7, 0xf7, 0x94, 0x66, 0xec, 0x98, 0x35, 0xcb, - 0x68, 0x1d, 0x27, 0x0f, 0x93, 0x1c, 0x36, 0x64, 0xe5, 0x22, 0x8b, 0x97, 0xfb, 0x05, 0xf2, 0x85, - 0x38, 0xc9, 0x4d, 0x4a, 0x40, 0xe0, 0xa6, 0xd7, 0x51, 0xbc, 0x31, 0xf3, 0xdb, 0x35, 0x82, 0xca, - 0xc3, 0xae, 0xc1, 0x66, 0xa0, 0x1b, 0x5d, 0x43, 0x23, 0x15, 0x36, 0xa0, 0x23, 0x89, 0xb6, 0xb9, - 0x98, 0xe8, 0x07, 0x2d, 0xf9, 0x9c, 0x32, 0x03, 0xc6, 0x43, 0x06, 0x26, 0xa9, 0x40, 0xa5, 0x89, - 0xef, 0xa3, 0x43, 0xde, 0xb0, 0x4d, 0x6f, 0xa3, 0x8c, 0x44, 0x1e, 0x4d, 0x24, 0x07, 0x4d, 0xcd, - 0x7b, 0x44, 0xde, 0x24, 0xde, 0x08, 0x04, 0x84, 0x6b, 0x49, 0xc3, 0xbd, 0xd4, 0xa1, 0x10, 0x6c, - 0x5f, 0xb9, 0xbb, 0x4a, 0xe2, 0x3e, 0x94, 0x6a, 0xbf, 0xf2, 0x6a, 0x25, 0xde, 0x80, 0x4a, 0xb2, - 0x8a, 0x35, 0x7b, 0x99, 0xcd, 0x58, 0x49, 0x74, 0x2d, 0x3a, 0x3c, 0x24, 0x49, 0xa5, 0xc3, 0x25, - 0x2e, 0xe6, 0x8b, 0xb9, 0x18, 0xb6, 0x34, 0x3b, 0x60, 0x7f, 0x58, 0x14, 0xe9, 0x7a, 0x62, 0x85, - 0x78, 0xd6, 0xca, 0xe0, 0x0e, 0xbd, 0xb1, 0x5f, 0x2a, 0x68, 0xbc, 0x21, 0xdc, 0x2d, 0xa5, 0xa7, - 0x95, 0x72, 0xfa, 0x36, 0x5b, 0x46, 0x8d, 0x9c, 0xa1, 0xe3, 0x48, 0x27, 0x09, 0x2a, 0xa6, 0xdc, - 0x49, 0xa7, 0x5b, 0x61, 0x15, 0xf4, 0xd5, 0x80, 0x8e, 0x56, 0x6c, 0x99, 0x05, 0xd4, 0x34, 0x5d, - 0x65, 0x01, 0xd4, 0xe5, 0xd0, 0x33, 0x68, 0xd7, 0xe8, 0xed, 0x99, 0x0b, 0x93, 0x32, 0xa2, 0x42, - 0x40, 0x94, 0x3d, 0x99, 0xdd, 0xc5, 0x5a, 0x20, 0x47, 0x6a, 0x97, 0xe9, 0xfc, 0x36, 0x3f, 0x56, - 0x29, 0x45, 0xa8, 0x8b, 0x6b, 0xf1, 0x23, 0xde, 0x20, 0xb9, 0xa5, 0x88, 0x86, 0x3f, 0x3e, 0x2c, - 0xd3, 0x20, 0xde, 0x7f, 0x11, 0xaf, 0x29, 0x05, 0x8d, 0xa0, 0x06, 0x0c, 0xef, 0x97, 0xe2, 0x61, - 0x2b, 0x66, 0xf3, 0x95, 0x98, 0x7f, 0x44, 0xd7, 0x0f, 0xdd, 0x36, 0x31, 0xad, 0xa4, 0x5b, 0xeb, - 0xb4, 0xb9, 0x5d, 0x5f, 0x8b, 0xec, 0x83, 0x59, 0x2b, 0xda, 0x46, 0x79, 0x7e, 0x8f, 0x6e, 0x8d, - 0x42, 0xb2, 0x95, 0x0f, 0x66, 0x2e, 0x12, 0x84, 0xab, 0xdd, 0xa1, 0xe8, 0xe7, 0xf3, 0x79, 0xa7, - 0xdc, 0x6b, 0x71, 0x90, 0x5a, 0x7b, 0xf8, 0xe7, 0xc8, 0x48, 0xe8, 0x79, 0x8e, 0xc9, 0xff, 0x7c, - 0xc4, 0x43, 0x44, 0xd8, 0x96, 0x47, 0x2a, 0x43, 0x5f, 0x4d, 0x66, 0x2c, 0x44, 0xaf, 0x5e, 0xc2, - 0x2e, 0x99, 0xfd, 0x15, 0x59, 0x86, 0x14, 0x63, 0x65, 0x77, 0x69, 0x66, 0xd8, 0x9e, 0x4c, 0x4d, - 0xcd, 0x0a, 0x95, 0xb2, 0x6c, 0x5a, 0x73, 0x0f, 0x52, 0x2c, 0x13, 0xe8, 0xe2, 0x5c, 0xac, 0xd2, - 0x84, 0xb2, 0x51, 0xed, 0x8e, 0x04, 0xfd, 0x51, 0x0d, 0x94, 0x97, 0xab, 0x8d, 0x30, 0xa9, 0x87, - 0xf5, 0x51, 0xff, 0x90, 0xe4, 0x41, 0x07, 0xc9, 0xde, 0x18, 0x59, 0x45, 0x5f, 0xc1, 0x94, 0x7a, - 0x21, 0x39, 0x2b, 0x5f, 0x9a, 0x03, 0x7c, 0xe9, 0x8f, 0xc6, 0x23, 0x31, 0x9f, 0x56, 0xf6, 0x6d, - 0xcf, 0x8b, 0x8d, 0xce, 0x16, 0xe9, 0xb1, 0x9d, 0x2a, 0x1a, 0xbd, 0xd2, 0xae, 0xd8, 0x15, 0x4d, - 0x6f, 0xb2, 0x98, 0x4d, 0x17, 0x09, 0x86, 0x25, 0x36, 0x8b, 0x89, 0xd7, 0x28, 0xc9, 0x8b, 0x28, - 0x83, 0xf9, 0xc8, 0xb2, 0x2c, 0xbd, 0xaf, 0x37, 0xa1, 0x57, 0x55, 0xcf, 0xc3, 0x9a, 0xd5, 0xd8, - 0xbb, 0x79, 0x22, 0xa2, 0x8c, 0x27, 0x11, 0x5c, 0xa5, 0xe2, 0xbf, 0xc6, 0x82, 0xdc, 0x9b, 0xb0, - 0x22, 0x76, 0x1b, 0xd3, 0x8e, 0xd4, 0xe0, 0xd1, 0xb4, 0x6b, 0xf4, 0xbb, 0x64, 0x5d, 0xed, 0x88, - 0xd8, 0xc8, 0xc1, 0x40, 0xad, 0x2c, 0xba, 0xcf, 0xa2, 0xed, 0x84, 0x2e, 0xc7, 0xf2, 0x12, 0xe5, - 0xb2, 0x69, 0x5c, 0x43, 0x4d, 0x2e, 0xca, 0xf4, 0xac, 0xae, 0xb3, 0xb2, 0x05, 0x95, 0xec, 0x97, - 0x69, 0x4a, 0x5c, 0xab, 0xe9, 0xb9, 0x57, 0x3a, 0x2c, 0xa9, 0xe7, 0x07, 0x41, 0x77, 0xff, 0x65, - 0x74, 0x0d, 0xb1, 0x6b, 0x55, 0x5c, 0xf8, 0xf4, 0x67, 0x6f, 0x5f, 0xa7, 0x8b, 0x87, 0x86, 0x53, - 0x4e, 0xe2, 0x6d, 0xdd, 0xd0, 0x0f, 0xfd, 0xb5, 0x58, 0x2c, 0x9d, 0x65, 0x3b, 0xe7, 0x70, 0x4f, - 0xdb, 0x96, 0xf4, 0x90, 0x54, 0x84, 0x88, 0xc6, 0x39, 0x56, 0x87, 0x14, 0x1b, 0x19, 0x22, 0x5d, - 0xa0, 0x47, 0xdd, 0x2c, 0xdb, 0xdb, 0x14, 0x39, 0x09, 0xb0, 0xd7, 0x08, 0x4f, 0x03, 0xc7, 0xe9, - 0x20, 0xdc, 0xa6, 0x1c, 0xd6, 0xac, 0x75, 0x79, 0x1a, 0x9e, 0xd4, 0x6b, 0x57, 0x3a, 0x74, 0x28, - 0x6e, 0x11, 0xcf, 0xc1, 0x2f, 0xe8, 0xed, 0xf5, 0x2d, 0x22, 0xc2, 0xa6, 0x2b, 0x17, 0x93, 0xd6, - 0xa5, 0x54, 0xcd, 0xe9, 0xc8, 0xcb, 0x6a, 0x31, 0xaf, 0x95, 0xc1, 0xb6, 0xa2, 0x17, 0x33, 0xe1, - 0x98, 0xc2, 0x20, 0x2a, 0xa9, 0xf4, 0x15, 0x69, 0x7a, 0x43, 0x3b, 0xdc, 0x21, 0xa1, 0x0e, 0x24, - 0xa5, 0x7b, 0x51, 0xa8, 0x3e, 0x32, 0x7b, 0x41, 0x73, 0xeb, 0x3a, 0xca, 0x76, 0x75, 0x43, 0xbe, - 0x81, 0xd2, 0x52, 0x8c, 0xa8, 0x4c, 0x97, 0x4a, 0x98, 0x59, 0x4f, 0xb4, 0xcd, 0xbc, 0xc8, 0x44, - 0x31, 0x5f, 0x1d, 0x8a, 0xf5, 0x84, 0x45, 0xc8, 0x84, 0x55, 0x05, 0x5e, 0x72, 0xc8, 0x75, 0xe9, - 0x68, 0xfd, 0x59, 0x32, 0x80, 0x2d, 0x08, 0xaa, 0x0f, 0xc7, 0x90, 0xd9, 0xbd, 0x94, 0x23, 0xd6, - 0x42, 0xe0, 0x41, 0x19, 0x63, 0x53, 0x16, 0x62, 0xd6, 0x4d, 0x05, 0xf5, 0x86, 0x15, 0xba, 0x07, - 0xf3, 0xaa, 0x66, 0x62, 0xc0, 0xa6, 0x77, 0x6c, 0x4a, 0x20, 0xf3, 0xc5, 0x7c, 0x05, 0xfe, 0x21, - 0xe1, 0xee, 0x4a, 0x51, 0x49, 0x15, 0x9a, 0x63, 0xb6, 0x33, 0x96, 0xca, 0x1d, 0xb4, 0xa0, 0x31, - 0x1f, 0x76, 0x0a, 0x0d, 0xf6, 0x1c, 0x2d, 0x9d, 0xaa, 0xd6, 0x2b, 0x0e, 0xe7, 0xfb, 0x4a, 0xd5, - 0xbf, 0x2e, 0xa7, 0x7b, 0x3a, 0x53, 0x19, 0x60, 0x84, 0xbb, 0x9b, 0xe6, 0x7c, 0xad, 0xb1, 0xdc, - 0xc1, 0xb6, 0xae, 0x66, 0x7f, 0x2c, 0x11, 0x34, 0xb7, 0xc4, 0xae, 0x26, 0x35, 0x56, 0x42, 0x65, - 0x6f, 0xbb, 0xfa, 0xda, 0x49, 0x7d, 0x31, 0xa5, 0x02, 0x86, 0xb6, 0xa0, 0xc6, 0xac, 0x08, 0xb3, - 0xef, 0x2d, 0x0b, 0xa4, 0x50, 0x6e, 0xda, 0x4c, 0xd1, 0x91, 0xbd, 0xdf, 0xdc, 0xd0, 0x0c, 0xed, - 0xa4, 0xed, 0x48, 0x7f, 0xcc, 0x03, 0x96, 0x09, 0x31, 0xe5, 0x3c, 0x52, 0x52, 0xd5, 0xf4, 0xa4, - 0x21, 0x23, 0x09, 0xd9, 0xca, 0xef, 0x63, 0x28, 0x6d, 0x4d, 0x4e, 0x93, 0x8e, 0x7c, 0x84, 0xb3, - 0x8a, 0xce, 0x41, 0x55, 0xaa, 0xe1, 0x77, 0xeb, 0x44, 0x3d, 0xb3, 0x28, 0x07, 0x40, 0x0e, 0x31, - 0xcc, 0xa7, 0xb0, 0x4f, 0xf8, 0x17, 0x4c, 0x14, 0xa5, 0xeb, 0x5a, 0x63, 0x76, 0x96, 0x68, 0x25, - 0x1a, 0x8e, 0x58, 0xef, 0xeb, 0x08, 0xea, 0x90, 0xdd, 0x2c, 0x3c, 0x58, 0xe7, 0x69, 0xf7, 0x52, - 0x0d, 0x6a, 0xd4, 0x11, 0xee, 0x51, 0x66, 0xdd, 0x10, 0x65, 0xe8, 0x73, 0xe6, 0x8e, 0x9c, 0x85, - 0xb8, 0x31, 0x49, 0x2d, 0x0d, 0xc7, 0xfc, 0x52, 0x08, 0xd1, 0xef, 0x58, 0x7a, 0x6b, 0x84, 0x47, - 0x66, 0x6d, 0x3b, 0x3c, 0x0e, 0xdb, 0xe1, 0x51, 0xcf, 0x42, 0x07, 0x94, 0x6a, 0xf3, 0x42, 0xd0, - 0xb6, 0x63, 0x1d, 0x40, 0x6a, 0x63, 0x33, 0x09, 0xa3, 0xd6, 0x92, 0x49, 0x4a, 0xe9, 0x06, 0x15, - 0x3b, 0xa4, 0x67, 0x33, 0xfe, 0x55, 0x32, 0x71, 0xeb, 0x3f, 0x4e, 0xd4, 0x10, 0xbe, 0x12, 0xf3, - 0x64, 0x4a, 0x8d, 0x27, 0x7c, 0x15, 0x8b, 0xe7, 0x27, 0xf4, 0x46, 0x4e, 0x3e, 0x1f, 0xeb, 0xa2, - 0x91, 0x65, 0x9e, 0xf8, 0xd2, 0xc3, 0xc9, 0x0e, 0xbb, 0x43, 0xee, 0xdc, 0xc5, 0x79, 0x7c, 0x1d, - 0x27, 0xb4, 0x08, 0x2c, 0xe7, 0xef, 0xa5, 0x80, 0xe5, 0xec, 0xaa, 0x6e, 0x6b, 0xc3, 0x6e, 0x15, - 0x24, 0xa7, 0x8a, 0x41, 0xfe, 0xb0, 0x16, 0x8b, 0x38, 0x32, 0xf2, 0x79, 0x26, 0xc4, 0xc6, 0x88, - 0xa0, 0x86, 0x67, 0xb5, 0xb4, 0x63, 0x0c, 0xd2, 0xfb, 0x3b, 0xce, 0xc4, 0xda, 0x41, 0xc1, 0x3d, - 0x08, 0x0a, 0xca, 0xa8, 0x75, 0xe7, 0x90, 0x16, 0x1a, 0xea, 0x39, 0xcc, 0xf0, 0xeb, 0x69, 0x7a, - 0xfd, 0x77, 0xb8, 0x50, 0x6b, 0x19, 0x23, 0x86, 0x41, 0x39, 0x31, 0xdf, 0xad, 0x16, 0x22, 0x98, - 0x26, 0xe8, 0xfa, 0x01, 0xae, 0x2a, 0x49, 0xa4, 0x89, 0x36, 0x05, 0x88, 0x0d, 0xcd, 0x16, 0x9e, - 0x14, 0xba, 0x4f, 0x13, 0x17, 0x06, 0x21, 0x13, 0x77, 0x1c, 0xae, 0x7b, 0x08, 0xd7, 0x7d, 0x1c, - 0x6e, 0xe0, 0x8c, 0x18, 0xae, 0x8e, 0xa6, 0x27, 0x63, 0x87, 0x8e, 0x6d, 0xe5, 0xc2, 0x4e, 0x33, - 0xa6, 0x54, 0xce, 0xa9, 0x8c, 0x57, 0xb4, 0xd2, 0x1e, 0xdd, 0x45, 0x71, 0x42, 0x59, 0x78, 0x6d, - 0x91, 0xa6, 0xbe, 0xdc, 0x52, 0x87, 0x68, 0x44, 0x70, 0x99, 0xc5, 0x99, 0x5a, 0x1b, 0xe9, 0x1f, - 0xf8, 0x51, 0xb5, 0x74, 0xd2, 0x58, 0x06, 0xa9, 0x2f, 0xed, 0xc8, 0x55, 0x8c, 0x47, 0x17, 0x65, - 0xaa, 0x4c, 0x7b, 0x14, 0x7e, 0x6d, 0x3a, 0x7d, 0x9d, 0xe1, 0x0c, 0x23, 0xfa, 0xa3, 0xfb, 0xdb, - 0x99, 0xc8, 0xb7, 0x29, 0x0c, 0xfa, 0x4e, 0xec, 0x3a, 0xe4, 0x7c, 0xd0, 0x48, 0x2d, 0xcf, 0x1c, - 0x8b, 0x5a, 0x8e, 0x5e, 0xad, 0x3e, 0xec, 0x18, 0x75, 0x12, 0x43, 0x44, 0xb7, 0xd7, 0x39, 0x65, - 0xd4, 0xb1, 0x8a, 0x78, 0xf3, 0xd0, 0x64, 0xce, 0x69, 0x31, 0x0f, 0xc2, 0x31, 0x89, 0xb9, 0xb9, - 0x0a, 0xc2, 0x7c, 0xe7, 0x54, 0xba, 0xa9, 0xa0, 0x87, 0xfa, 0x59, 0x8b, 0x8c, 0xc8, 0x44, 0x6b, - 0xda, 0xe0, 0x96, 0x49, 0xe7, 0xd1, 0x54, 0xd5, 0x69, 0x01, 0x93, 0xb3, 0xb7, 0x5d, 0x33, 0x3f, - 0xa8, 0xa6, 0xe6, 0x86, 0x54, 0xda, 0x17, 0xe7, 0x72, 0x53, 0xe9, 0xdf, 0xff, 0xed, 0xc5, 0xb9, - 0xda, 0xf1, 0xc2, 0x23, 0x21, 0x6b, 0xcc, 0x13, 0x4c, 0xcf, 0x67, 0xf4, 0x58, 0xee, 0x64, 0xc1, - 0x34, 0x8d, 0x78, 0x31, 0xa3, 0x3b, 0xe5, 0x4d, 0xaa, 0x9c, 0xeb, 0xe4, 0x6a, 0x95, 0xea, 0xd4, - 0xc3, 0xc8, 0x86, 0x2c, 0xe9, 0xd5, 0x1a, 0x71, 0xc3, 0x45, 0x7c, 0xa7, 0x5a, 0xd5, 0x77, 0xc9, - 0x1a, 0x4d, 0xd8, 0x5d, 0x19, 0xa0, 0x76, 0xd6, 0xa3, 0xd5, 0x35, 0x52, 0x6f, 0xd1, 0xd3, 0xa0, - 0x29, 0x9f, 0x90, 0x89, 0x6b, 0x1b, 0x74, 0x63, 0x08, 0xa0, 0x49, 0x2d, 0xa9, 0xbf, 0xc1, 0x03, - 0xcd, 0x9e, 0x5d, 0x26, 0xf1, 0xfc, 0xa3, 0x51, 0xa4, 0xc6, 0xed, 0x96, 0xd6, 0xfe, 0x8d, 0x87, - 0xf4, 0x36, 0x33, 0xb8, 0x01, 0x0d, 0xf0, 0xec, 0xe2, 0xc5, 0x39, 0x3a, 0x76, 0xe1, 0x73, 0xce, - 0x08, 0x75, 0xd5, 0xac, 0x5c, 0x1a, 0x88, 0xb6, 0xeb, 0xe4, 0x48, 0x12, 0x47, 0x25, 0xa1, 0xd6, - 0xa6, 0xe0, 0xca, 0x3d, 0x0e, 0x01, 0xd6, 0x93, 0x43, 0x95, 0x5b, 0xfd, 0x3b, 0xfa, 0x74, 0xe1, - 0x58, 0x67, 0xa9, 0x34, 0x48, 0x40, 0xc4, 0x93, 0x85, 0xc7, 0xae, 0x21, 0x91, 0x94, 0xb3, 0x18, - 0x7b, 0xa8, 0xb7, 0x10, 0xfb, 0x3e, 0x1e, 0x65, 0x64, 0xc4, 0x6c, 0x14, 0x05, 0xaf, 0x67, 0x6a, - 0x01, 0x44, 0xdc, 0xc7, 0x90, 0xae, 0xa3, 0x67, 0x2c, 0xa2, 0x22, 0x22, 0x65, 0xa0, 0xad, 0x4d, - 0xf8, 0x4c, 0x3c, 0xf5, 0x2e, 0xfe, 0x12, 0x7f, 0x1f, 0x1b, 0xef, 0x44, 0x71, 0xbb, 0x7d, 0x71, - 0x1e, 0x75, 0x72, 0x94, 0x70, 0xe8, 0xaa, 0xe0, 0x11, 0x79, 0x2e, 0x6a, 0x20, 0x5b, 0xbf, 0x11, - 0xc5, 0xec, 0xff, 0x5d, 0x27, 0x11, 0x86, 0x83, 0x3f, 0x98, 0x6d, 0xd2, 0x74, 0x2b, 0x36, 0xd0, - 0xb2, 0x55, 0x26, 0x96, 0x33, 0xfb, 0x1c, 0x86, 0x58, 0x5c, 0x7c, 0x0f, 0xd9, 0xe5, 0x47, 0x86, - 0xf9, 0x55, 0xd0, 0x6e, 0xb7, 0x20, 0x45, 0x5c, 0xfc, 0x99, 0x6f, 0xff, 0x3a, 0xc0, 0x55, 0x51, - 0x6c, 0xf3, 0xc9, 0xf9, 0xf9, 0x75, 0x72, 0x4b, 0x31, 0x7c, 0x2e, 0x32, 0xfb, 0x26, 0x2e, 0x56, - 0xb7, 0xd7, 0x76, 0x9c, 0x9e, 0x47, 0xf7, 0x45, 0x16, 0x7f, 0x02, 0x23, 0xa1, 0x19, 0x17, 0xdf, - 0xa5, 0xf3, 0xdf, 0x80, 0x00, 0x3d, 0x1e, 0x85, 0xcd, 0xdc, 0xae, 0x8d, 0xba, 0x10, 0x17, 0xdf, - 0x53, 0xd9, 0xd1, 0x21, 0x9a, 0x72, 0x25, 0xdf, 0xda, 0xa3, 0x61, 0x57, 0xb7, 0x6b, 0x0b, 0xe1, - 0xea, 0x94, 0x91, 0xc9, 0x9e, 0xb0, 0x33, 0x83, 0xbd, 0xc8, 0x4c, 0xa5, 0xd3, 0x16, 0x1c, 0xd9, - 0x91, 0x6e, 0xdc, 0x95, 0x3a, 0x28, 0xfb, 0x5c, 0x8b, 0xcd, 0x2d, 0x99, 0x5f, 0x32, 0x53, 0x29, - 0xfd, 0x25, 0xaf, 0xa6, 0xd1, 0xde, 0xf7, 0x1f, 0x49, 0xa7, 0x28, 0xd3, 0xf2, 0xe0, 0xac, 0x46, - 0x3d, 0x58, 0x03, 0x3a, 0x1c, 0xc3, 0xe6, 0xa8, 0xe9, 0xb6, 0x69, 0x6e, 0xb7, 0x94, 0x6e, 0x4f, - 0x64, 0xf5, 0x22, 0xe5, 0x3f, 0xb4, 0x3e, 0xd7, 0x9d, 0x5a, 0xba, 0x2d, 0xa4, 0x8a, 0xb7, 0xa0, - 0xae, 0xbc, 0xa6, 0xed, 0x5a, 0xde, 0xc5, 0xa5, 0xcc, 0x1e, 0xc8, 0xe1, 0x90, 0x3d, 0x60, 0x20, - 0xaf, 0xcb, 0x70, 0xf5, 0x40, 0xbc, 0x80, 0xa6, 0x81, 0x20, 0xf6, 0x74, 0x51, 0x53, 0x6f, 0xc3, - 0xcf, 0xc7, 0xd8, 0x51, 0xb0, 0x07, 0xd7, 0xa0, 0x93, 0x38, 0x2f, 0xc0, 0xbe, 0xa2, 0xe6, 0xcb, - 0x9b, 0x2c, 0x39, 0x06, 0xeb, 0xc5, 0x75, 0xf6, 0xeb, 0xfc, 0x4f, 0x3d, 0x6d, 0xea, 0x82, 0x47, - 0x11, 0x4c, 0x35, 0xa5, 0xc7, 0xc7, 0x75, 0xab, 0x9a, 0xcf, 0x9f, 0x52, 0xa8, 0x2a, 0x60, 0xe4, - 0x79, 0xbc, 0x50, 0x5d, 0x6b, 0x1b, 0x0b, 0x17, 0xef, 0xde, 0xfd, 0xf0, 0xdd, 0x71, 0x37, 0x5e, - 0xc2, 0xe1, 0x2e, 0x46, 0xb9, 0x0c, 0x6d, 0xd4, 0x56, 0x69, 0x67, 0xbd, 0x57, 0x34, 0x9b, 0x94, - 0x41, 0x03, 0xf2, 0xfc, 0xc1, 0x20, 0x98, 0x7c, 0x52, 0x83, 0xad, 0xa5, 0x47, 0x23, 0xf7, 0xca, - 0xb3, 0x1a, 0x87, 0x3c, 0xee, 0x56, 0xd0, 0x7f, 0x91, 0x5c, 0xbd, 0x82, 0xde, 0x41, 0xf2, 0x5b, - 0x55, 0xf5, 0x04, 0xb2, 0x6b, 0xa6, 0xdc, 0x58, 0x3d, 0x60, 0x23, 0x2d, 0x4b, 0xf4, 0x58, 0x27, - 0x20, 0x31, 0xb4, 0xd2, 0xa1, 0x94, 0x5d, 0x8d, 0x6a, 0xc6, 0xde, 0x2b, 0x61, 0x12, 0xb8, 0x47, - 0x40, 0xb5, 0x91, 0x83, 0xf9, 0xb3, 0xef, 0x28, 0x5f, 0x2d, 0xa1, 0xfd, 0x88, 0x78, 0x10, 0x2d, - 0xa7, 0x31, 0xc0, 0x5f, 0xed, 0x34, 0x4e, 0x71, 0xbf, 0x1c, 0xa8, 0xd3, 0x3d, 0x3e, 0x42, 0x99, - 0x74, 0x94, 0x9a, 0x3b, 0xbf, 0x1d, 0x39, 0x9b, 0xf4, 0x77, 0xa7, 0xe8, 0x31, 0x08, 0x75, 0x63, - 0x28, 0xd5, 0xec, 0x84, 0x41, 0xc4, 0x86, 0x6e, 0xc5, 0x4c, 0xd1, 0x2f, 0xa7, 0x51, 0xa4, 0xe5, - 0xa7, 0x79, 0xba, 0xde, 0x26, 0xa2, 0x10, 0x3a, 0x02, 0x94, 0x8a, 0x26, 0x53, 0x8b, 0x75, 0x8e, - 0x20, 0x41, 0x5b, 0x47, 0xb3, 0x5e, 0x35, 0xc0, 0xaf, 0x35, 0xb3, 0x17, 0xe7, 0x1d, 0xee, 0xe6, - 0x11, 0x5f, 0xd6, 0x53, 0x73, 0x35, 0xa3, 0x2b, 0x3d, 0x52, 0x36, 0xa8, 0x5a, 0xca, 0x69, 0xb6, - 0xa1, 0x77, 0x7e, 0x8f, 0xe6, 0x53, 0xab, 0x63, 0x66, 0x2d, 0x73, 0x32, 0x9d, 0xc3, 0x55, 0x73, - 0xf6, 0x8b, 0x77, 0x05, 0xa6, 0xff, 0x92, 0xbd, 0x98, 0x70, 0xd0, 0x69, 0xa1, 0x38, 0x4a, 0xf2, - 0xa3, 0xf9, 0x13, 0xc3, 0x92, 0x82, 0x23, 0x19, 0x50, 0x56, 0x99, 0xd3, 0x6a, 0x8f, 0xd1, 0xd8, - 0xb7, 0x2b, 0xd1, 0x96, 0x4b, 0x09, 0x48, 0xad, 0xe5, 0xe2, 0xc3, 0x13, 0xfc, 0x53, 0x7d, 0x71, - 0xe2, 0x9f, 0x49, 0x98, 0x65, 0x46, 0x39, 0x8f, 0x36, 0x8d, 0x94, 0x12, 0x9c, 0x3e, 0x99, 0xcc, - 0xb7, 0x0c, 0x46, 0x19, 0x09, 0x81, 0x79, 0x34, 0x77, 0x78, 0xaa, 0xd1, 0xb0, 0x04, 0x2e, 0xde, - 0x11, 0x48, 0xe6, 0xf6, 0x46, 0x14, 0x50, 0xb5, 0x8f, 0xc7, 0x59, 0x7d, 0x2a, 0x63, 0x53, 0x11, - 0xf0, 0x37, 0xa0, 0x51, 0x41, 0xfa, 0x8d, 0xc9, 0xac, 0xa5, 0x26, 0xe5, 0x6c, 0x80, 0xe2, 0x97, - 0x45, 0xe1, 0x4c, 0x05, 0xcb, 0x27, 0x93, 0x7d, 0x98, 0x51, 0xb5, 0xde, 0x55, 0x96, 0xc3, 0xe6, - 0x54, 0x29, 0x9f, 0xb6, 0x2e, 0x76, 0xa3, 0x6d, 0x90, 0x1d, 0xd6, 0xd5, 0x69, 0x85, 0x07, 0x06, - 0xd5, 0xad, 0x7a, 0x52, 0x2a, 0x99, 0xe0, 0x1d, 0x80, 0x47, 0x04, 0x72, 0x42, 0x18, 0x1a, 0xc0, - 0x6f, 0x21, 0x0c, 0x29, 0x88, 0x3f, 0x29, 0x88, 0xaf, 0xde, 0xbd, 0xed, 0xe4, 0x78, 0x07, 0xb7, - 0xa5, 0x05, 0x45, 0x77, 0x14, 0x72, 0xb2, 0x68, 0x9d, 0xff, 0xf3, 0xe4, 0x10, 0x90, 0xdf, 0x90, - 0x96, 0x77, 0x04, 0x0e, 0xfa, 0xba, 0x8c, 0x6f, 0x6e, 0xe5, 0xd1, 0x9d, 0x27, 0x90, 0x54, 0x07, - 0xf9, 0xe2, 0x9c, 0x16, 0x16, 0xf4, 0x4b, 0xcd, 0x11, 0xcb, 0x73, 0x82, 0x46, 0x19, 0x70, 0xe5, - 0xfb, 0xc5, 0x55, 0xca, 0xa9, 0xb6, 0x6d, 0xdb, 0x0d, 0x28, 0xea, 0xfc, 0x0c, 0x2f, 0x54, 0xf0, - 0xe9, 0xaa, 0xb5, 0xc8, 0xf3, 0xe8, 0xa6, 0x9e, 0xdf, 0xbe, 0x50, 0xe7, 0x69, 0x88, 0x2e, 0xf5, - 0xd4, 0xd2, 0x57, 0x39, 0xb2, 0x3a, 0x9f, 0x75, 0x28, 0x82, 0x74, 0x33, 0xa7, 0xc5, 0x84, 0x19, - 0x9f, 0x47, 0x7b, 0x43, 0x6d, 0xde, 0xc8, 0x41, 0xce, 0xfa, 0xa7, 0x65, 0xd0, 0x38, 0xc8, 0x76, - 0xd4, 0x46, 0xa5, 0x8c, 0xb8, 0x8d, 0x6c, 0x6f, 0xc8, 0x63, 0xc3, 0xee, 0xc0, 0x90, 0x2b, 0xe5, - 0xf4, 0xd4, 0x90, 0x13, 0xde, 0xdd, 0x41, 0x4f, 0x4a, 0x93, 0xd6, 0xa9, 0x8e, 0xce, 0x96, 0x3a, - 0x83, 0xde, 0xa1, 0x96, 0x1d, 0x62, 0x7c, 0x74, 0xb5, 0x06, 0x53, 0x1f, 0x62, 0xb5, 0xa4, 0x5f, - 0x35, 0xeb, 0x9a, 0xec, 0x9c, 0x8e, 0xb6, 0xad, 0xa3, 0x70, 0x5d, 0x03, 0x6d, 0xeb, 0xe3, 0xf0, - 0x5c, 0xe6, 0xc5, 0xf9, 0xf6, 0xd7, 0x8d, 0xa2, 0x9c, 0xce, 0x51, 0xc7, 0x9d, 0x7e, 0x54, 0xfc, - 0xae, 0x8c, 0x4a, 0xa9, 0xdd, 0x71, 0x89, 0x17, 0xd9, 0xad, 0xe8, 0x5f, 0x48, 0x1b, 0xf8, 0xe9, - 0xff, 0x2a, 0x9d, 0x3f, 0x19, 0x1d, 0x6a, 0x72, 0xad, 0x19, 0xef, 0x89, 0x21, 0x96, 0x88, 0xf9, - 0xe5, 0x18, 0x97, 0x54, 0x7d, 0x74, 0x98, 0x53, 0xde, 0x18, 0xcf, 0xd2, 0x36, 0xca, 0x03, 0xe5, - 0xf3, 0x2c, 0xde, 0x16, 0x17, 0xd0, 0x94, 0xab, 0xf4, 0x26, 0x9d, 0x3d, 0x63, 0xcd, 0x93, 0xaa, - 0x16, 0xd0, 0x71, 0x12, 0xa5, 0x6c, 0xfc, 0xdc, 0x74, 0x0b, 0x23, 0xfc, 0x85, 0x5b, 0xd8, 0x46, - 0xc5, 0xca, 0xc0, 0xe4, 0xe7, 0x8d, 0xeb, 0xd9, 0x63, 0x2f, 0x30, 0xdc, 0xb1, 0xed, 0x7b, 0x83, - 0x28, 0xb4, 0x03, 0x83, 0xfe, 0xf1, 0x4e, 0x89, 0x85, 0xaa, 0x91, 0x6f, 0x05, 0x76, 0x38, 0x1c, - 0xa0, 0x74, 0xa0, 0x2e, 0xb2, 0xce, 0xb7, 0x47, 0xde, 0xc8, 0x72, 0xed, 0xe1, 0x70, 0x60, 0x07, - 0xe3, 0x90, 0xfe, 0xc9, 0xdd, 0x15, 0xcb, 0x0e, 0x9c, 0xc0, 0xb2, 0x43, 0xdf, 0xb5, 0x83, 0x70, - 0x40, 0xff, 0x64, 0xb9, 0x61, 0x87, 0x03, 0x1f, 0x95, 0x6e, 0x68, 0x8c, 0xec, 0xb1, 0xba, 0xc8, - 0x9a, 0x91, 0x31, 0xb6, 0x47, 0xce, 0x10, 0xe0, 0x01, 0x53, 0x5d, 0x15, 0x2c, 0x6f, 0x3c, 0x32, - 0x30, 0xc8, 0xc0, 0x4b, 0x5c, 0x20, 0x33, 0xb6, 0x87, 0x41, 0xe4, 0xba, 0xb6, 0xe3, 0x8f, 0x0d, - 0x75, 0x53, 0x7b, 0x3a, 0x76, 0xe8, 0x0e, 0x00, 0x7c, 0xe8, 0x1a, 0x20, 0xc8, 0x1d, 0x8e, 0xf5, - 0x4d, 0x56, 0xdb, 0x9e, 0x1b, 0x82, 0x1a, 0x7f, 0xe0, 0xbf, 0x44, 0xf9, 0x30, 0x34, 0xe4, 0x55, - 0x56, 0x86, 0xa8, 0xf5, 0x8c, 0xc0, 0x76, 0x43, 0x37, 0x1a, 0xda, 0x43, 0xdf, 0xe0, 0x8b, 0xe2, - 0x00, 0xae, 0x03, 0xdb, 0x07, 0xfd, 0xf2, 0xaa, 0xf9, 0xe2, 0x82, 0x63, 0xb6, 0xef, 0x87, 0x28, - 0xf6, 0xc2, 0x81, 0xba, 0x6a, 0x54, 0xc6, 0xce, 0x18, 0xe0, 0x46, 0xc3, 0x80, 0xc8, 0x1a, 0xeb, - 0xab, 0xae, 0x75, 0xc0, 0x14, 0x77, 0x3c, 0x44, 0x1f, 0xc7, 0x75, 0xd5, 0x55, 0xb2, 0xc1, 0x67, - 0x88, 0xbe, 0x3d, 0xc6, 0x40, 0xb8, 0x06, 0x43, 0x75, 0xd5, 0x6c, 0x85, 0x47, 0xc7, 0xc0, 0x60, - 0x84, 0x1f, 0xba, 0xf6, 0x68, 0x14, 0xb9, 0x8e, 0xed, 0x8e, 0x3c, 0x43, 0xdd, 0x24, 0x7c, 0xcf, - 0x76, 0x86, 0x21, 0x08, 0xf5, 0x40, 0xd6, 0x50, 0x5d, 0x14, 0x0f, 0x20, 0x45, 0x60, 0x1e, 0x78, - 0xa3, 0x35, 0xa1, 0x3f, 0x80, 0x84, 0x5e, 0xba, 0x3e, 0xd0, 0xf1, 0x0d, 0x75, 0x53, 0x62, 0x72, - 0x1c, 0x97, 0x60, 0x42, 0xf4, 0xc4, 0xa6, 0x31, 0x8d, 0x20, 0x6f, 0x1a, 0x4b, 0xaa, 0x40, 0xef, - 0x30, 0x21, 0x89, 0x92, 0xe0, 0x23, 0x34, 0x70, 0x02, 0xe6, 0x2a, 0xdd, 0x1c, 0x4d, 0x6b, 0x68, - 0xbb, 0x03, 0xd7, 0xe8, 0xaa, 0x54, 0x55, 0x4e, 0xa2, 0x75, 0x87, 0x40, 0x8c, 0xb9, 0x51, 0xa9, - 0x47, 0xd0, 0x48, 0x3f, 0xc0, 0x70, 0xa1, 0x17, 0xbc, 0x41, 0x34, 0x23, 0x94, 0xc6, 0x40, 0x99, - 0x6f, 0xea, 0x4d, 0x43, 0x43, 0xaf, 0x01, 0x64, 0x9d, 0x40, 0x1f, 0x5d, 0xa0, 0x04, 0x16, 0x40, - 0x73, 0x86, 0x1e, 0x90, 0xf4, 0x22, 0x17, 0x8a, 0x06, 0xf9, 0xaa, 0x9b, 0xa4, 0x01, 0xba, 0x33, - 0x1c, 0x8d, 0xf8, 0x16, 0x06, 0x09, 0xe9, 0x2a, 0xda, 0x07, 0xfe, 0xdc, 0xb1, 0x6c, 0x3f, 0x08, - 0x80, 0xe7, 0x98, 0x14, 0xd8, 0xe3, 0x07, 0x06, 0xb9, 0xc6, 0xcd, 0x0b, 0xc6, 0x50, 0x0d, 0x37, - 0x18, 0xbe, 0x04, 0xf6, 0xd0, 0x10, 0x79, 0xd5, 0x3a, 0x34, 0x72, 0x49, 0x51, 0xbd, 0x90, 0xd4, - 0xd3, 0x75, 0x59, 0x3d, 0xe9, 0xa6, 0x15, 0x66, 0x40, 0x4a, 0x67, 0x87, 0xe1, 0x1d, 0xac, 0xc2, - 0x1f, 0x12, 0xe3, 0xc7, 0xd4, 0x48, 0xde, 0x14, 0x52, 0x63, 0x0c, 0x31, 0x22, 0x44, 0x87, 0xe1, - 0x8a, 0x9a, 0x0d, 0x08, 0x56, 0xe8, 0xfa, 0x86, 0xba, 0x95, 0xaa, 0x1e, 0xba, 0x04, 0x71, 0x10, - 0xbc, 0x09, 0x61, 0xbb, 0x84, 0xc7, 0x68, 0x84, 0xb6, 0x60, 0x23, 0x80, 0xf0, 0x95, 0xc1, 0x59, - 0xf4, 0x6c, 0xd5, 0x8b, 0x75, 0x25, 0x57, 0xe3, 0x59, 0x16, 0xd0, 0xa4, 0x4c, 0x06, 0x9d, 0x67, - 0x53, 0x38, 0xf1, 0xbc, 0x30, 0xf0, 0xfc, 0x46, 0x6c, 0x6e, 0xe1, 0x56, 0x4a, 0x37, 0xe1, 0x9b, - 0xc1, 0x6b, 0xcf, 0x7d, 0x3f, 0x7a, 0xed, 0xbf, 0x0f, 0xf0, 0xe2, 0xba, 0xf4, 0xe6, 0xfa, 0x78, - 0x75, 0x5d, 0x7a, 0xe7, 0x5a, 0x97, 0xaa, 0xdd, 0xe0, 0xaf, 0xbd, 0xf3, 0x8b, 0x67, 0x26, 0xfb, - 0x26, 0x38, 0x45, 0xe9, 0x9b, 0x94, 0x43, 0xea, 0xb9, 0xc1, 0xb6, 0xe8, 0x35, 0x5d, 0xd2, 0x10, - 0x62, 0xc1, 0xbf, 0x9a, 0x53, 0x5a, 0x93, 0xe0, 0x51, 0xb4, 0xb2, 0xbc, 0xd1, 0x68, 0x6e, 0x79, - 0x01, 0xd8, 0xe7, 0xbb, 0x1e, 0x2c, 0xc1, 0x1a, 0x8c, 0x2c, 0x0f, 0x52, 0xf3, 0x60, 0xca, 0x23, - 0x7a, 0x19, 0x8c, 0xee, 0x2c, 0xcf, 0x1b, 0x40, 0x72, 0xd4, 0x2a, 0x0c, 0x86, 0x81, 0x67, 0x50, - 0x83, 0x41, 0x30, 0x0a, 0x87, 0xa8, 0x35, 0xb8, 0xcd, 0x8a, 0xe0, 0xd4, 0xc0, 0xa0, 0xd4, 0x28, - 0xc1, 0x18, 0xdc, 0xea, 0x8e, 0xa1, 0x18, 0x25, 0x14, 0xab, 0x84, 0x22, 0x41, 0xe0, 0xfa, 0x79, - 0x4d, 0xf8, 0x48, 0x9c, 0x46, 0x10, 0x38, 0x23, 0xe4, 0x92, 0xc3, 0x74, 0x83, 0x70, 0x4c, 0xbc, - 0x86, 0x57, 0x08, 0x14, 0x20, 0x34, 0xf0, 0x3d, 0xc7, 0x77, 0xa9, 0x96, 0x80, 0x70, 0x1d, 0xfe, - 0x32, 0x2a, 0xba, 0x37, 0xde, 0x2d, 0xdd, 0x9b, 0x9e, 0xd1, 0x5b, 0x51, 0xa3, 0xbb, 0x5b, 0xb2, - 0xbb, 0xc5, 0x95, 0xf8, 0xfb, 0x79, 0x0d, 0x96, 0x81, 0xbf, 0x35, 0x5e, 0x39, 0xf0, 0x0b, 0xe8, - 0x53, 0x76, 0x61, 0xa4, 0xac, 0x1a, 0x52, 0x0c, 0x76, 0xe4, 0x00, 0xea, 0x90, 0x9c, 0xfd, 0x38, - 0x00, 0x11, 0x64, 0x25, 0x21, 0x1a, 0x7b, 0xd6, 0x38, 0x90, 0x7f, 0x73, 0xfc, 0x33, 0xea, 0xc5, - 0xc6, 0x38, 0xb8, 0xa3, 0x5e, 0x46, 0x1d, 0x97, 0x1a, 0xaa, 0xb8, 0xe6, 0x47, 0x47, 0x0a, 0x1d, - 0x7b, 0x38, 0xf6, 0x41, 0x37, 0xbc, 0xd1, 0xc0, 0x09, 0x3c, 0x50, 0x00, 0xa7, 0xee, 0x52, 0xc8, - 0xf0, 0x46, 0x39, 0x3d, 0xeb, 0x0a, 0x43, 0x55, 0x3c, 0x36, 0x56, 0x49, 0xb9, 0x54, 0x55, 0xd2, - 0xaf, 0x3f, 0x6f, 0x92, 0xff, 0xaf, 0x61, 0xbf, 0xbf, 0x86, 0x8d, 0x9c, 0x27, 0x2b, 0xd8, 0xaf, - 0x17, 0xfb, 0xaf, 0xd5, 0xaf, 0xdf, 0x41, 0x8b, 0x3b, 0x34, 0x8b, 0x96, 0x13, 0xea, 0xee, 0x8f, - 0x02, 0x88, 0x77, 0x39, 0x96, 0x21, 0x0a, 0xa0, 0x38, 0xaa, 0x21, 0x9a, 0x05, 0xc8, 0x95, 0xe0, - 0xc4, 0x47, 0x57, 0x03, 0x9b, 0xc3, 0xc9, 0xe0, 0x12, 0x81, 0xdf, 0xe5, 0x88, 0x8f, 0x8b, 0x6f, - 0x50, 0x1e, 0x62, 0x8c, 0xdf, 0x51, 0xb8, 0x1b, 0xcb, 0x52, 0xf2, 0xf2, 0xdc, 0xf2, 0x0a, 0x8e, - 0x1e, 0x49, 0x03, 0xc0, 0xe2, 0x21, 0x08, 0x0c, 0x19, 0xa3, 0x86, 0x23, 0xfd, 0xc0, 0x35, 0x60, - 0x96, 0xcf, 0x05, 0x50, 0x1a, 0x8e, 0xc3, 0x94, 0xaa, 0x71, 0x7e, 0x82, 0xe7, 0x10, 0x0d, 0x06, - 0xd0, 0x38, 0x5d, 0xee, 0xf3, 0xd5, 0x93, 0x7f, 0xdf, 0x78, 0x40, 0xe3, 0xca, 0xf3, 0x80, 0x17, - 0x90, 0xbc, 0xc4, 0xb0, 0xe1, 0x98, 0x92, 0x98, 0x01, 0xc1, 0x42, 0xae, 0xc5, 0x60, 0xfd, 0x77, - 0xc8, 0x5c, 0x5c, 0x55, 0x6c, 0x53, 0x12, 0x14, 0x5c, 0x01, 0xe9, 0x4b, 0x8c, 0x40, 0x5a, 0x45, - 0x94, 0x42, 0xdb, 0x19, 0x68, 0xf0, 0x8e, 0x91, 0xe2, 0x52, 0x02, 0xcd, 0x2c, 0x19, 0x5e, 0x22, - 0x0e, 0x23, 0x43, 0x71, 0x87, 0x20, 0x6e, 0x40, 0x98, 0x01, 0x9b, 0x91, 0xcd, 0x63, 0x78, 0x57, - 0xdc, 0x12, 0x57, 0x82, 0xee, 0x41, 0x31, 0x06, 0x97, 0x94, 0x94, 0xf9, 0xc4, 0x02, 0xe6, 0x0b, - 0xb1, 0xc2, 0xd3, 0xe4, 0x5e, 0xba, 0x1c, 0xc9, 0x28, 0xd0, 0xa3, 0x43, 0xc0, 0x58, 0x82, 0x17, - 0x3e, 0x01, 0x75, 0x46, 0xd4, 0x33, 0x60, 0xd2, 0x1d, 0x26, 0xdd, 0xa7, 0x72, 0xee, 0x3a, 0x7c, - 0x43, 0x81, 0x77, 0x40, 0x00, 0x86, 0x44, 0x22, 0x3d, 0xf2, 0xa4, 0x0a, 0x18, 0x8c, 0xf9, 0x01, - 0xc0, 0xdf, 0xc9, 0x3a, 0x70, 0x03, 0x75, 0x23, 0xbe, 0x13, 0x47, 0x02, 0xf9, 0x48, 0x86, 0xca, - 0xb8, 0xc2, 0x30, 0xe9, 0x1a, 0xba, 0x40, 0xf7, 0xb5, 0xe7, 0x50, 0x93, 0x21, 0xa3, 0x1e, 0xb8, - 0x04, 0x66, 0xc4, 0x94, 0x53, 0x7f, 0xf7, 0x12, 0xe0, 0x03, 0xf9, 0x4a, 0xbc, 0x42, 0x43, 0x4a, - 0x27, 0xf8, 0x91, 0x87, 0xe3, 0x5a, 0x52, 0x2e, 0x94, 0x06, 0x2c, 0xe0, 0x31, 0xbf, 0x52, 0x96, - 0xcd, 0xa8, 0x8d, 0xe8, 0x39, 0x0c, 0xe9, 0x39, 0xf4, 0xaf, 0x5c, 0x19, 0xf6, 0x5f, 0x7b, 0xde, - 0x7b, 0xc2, 0xff, 0x0a, 0x43, 0x8e, 0x98, 0xf2, 0x20, 0xbc, 0xc4, 0x33, 0x32, 0x44, 0x14, 0x8f, - 0x79, 0x1c, 0xf9, 0xcc, 0x64, 0xd0, 0xfd, 0xaf, 0x14, 0xbd, 0x59, 0x65, 0xd5, 0xd2, 0x50, 0x4b, - 0x6b, 0x83, 0x4b, 0x25, 0xc2, 0x52, 0xa4, 0x90, 0xef, 0x95, 0x92, 0xf5, 0x65, 0x25, 0xfd, 0x90, - 0xc0, 0x2b, 0x9d, 0xa8, 0xe9, 0x8a, 0xd6, 0x9f, 0x2b, 0x12, 0xf9, 0x65, 0xa5, 0x01, 0x40, 0x0d, - 0x6e, 0x4d, 0x2a, 0xc6, 0x1b, 0xd0, 0x30, 0x1a, 0x90, 0xfa, 0x0d, 0x5c, 0xd2, 0x58, 0xc2, 0x0c, - 0xaa, 0x18, 0x72, 0x82, 0x34, 0xa4, 0x67, 0x97, 0x9f, 0x29, 0x55, 0xc1, 0xf3, 0x55, 0x69, 0x01, - 0x97, 0x75, 0xb3, 0x40, 0x3e, 0xaa, 0xad, 0xa5, 0x32, 0x21, 0x6d, 0x55, 0x57, 0xda, 0xce, 0x2e, - 0x2b, 0xd3, 0xd3, 0xc6, 0x28, 0x4d, 0x13, 0x95, 0xa1, 0x34, 0x9d, 0x21, 0xcd, 0x51, 0x5c, 0x96, - 0x74, 0x85, 0xd7, 0xd3, 0xb5, 0x15, 0xae, 0x63, 0x40, 0x7c, 0x0e, 0x40, 0x0b, 0xab, 0x2a, 0x65, - 0xb0, 0xfc, 0xe0, 0xa9, 0x07, 0x2e, 0x0f, 0x59, 0x1d, 0x7d, 0x1e, 0x2b, 0x60, 0x23, 0xa5, 0xac, - 0x9e, 0x61, 0xfa, 0x84, 0x0c, 0x8d, 0xc2, 0xb3, 0x04, 0x8f, 0xa5, 0xac, 0x75, 0xd5, 0x23, 0x00, - 0x57, 0xb4, 0x2f, 0x1a, 0x50, 0xb6, 0x84, 0x2b, 0x6b, 0xda, 0x7b, 0xcf, 0xbb, 0xe2, 0xaa, 0x4a, - 0x9c, 0xb4, 0x28, 0xd3, 0x90, 0xe5, 0xd0, 0x1c, 0xbf, 0x1e, 0xbe, 0x1f, 0xbe, 0x26, 0x8d, 0xf7, - 0x4c, 0x77, 0xfc, 0xd2, 0x37, 0x39, 0x25, 0x34, 0xc1, 0x2b, 0xe4, 0x5f, 0xb5, 0x57, 0xaa, 0xf6, - 0xeb, 0xef, 0xc3, 0xc3, 0x7a, 0xd8, 0x6f, 0x68, 0xfa, 0xaf, 0x87, 0x97, 0x60, 0xea, 0x18, 0x35, - 0xa8, 0x85, 0x51, 0xfa, 0xe6, 0xf0, 0x3d, 0x20, 0x7b, 0x26, 0x27, 0xca, 0x26, 0x22, 0xa7, 0xe9, - 0xb9, 0xaf, 0x1b, 0x25, 0x9e, 0x8b, 0xce, 0xef, 0xc3, 0x2b, 0xea, 0x5e, 0x61, 0xab, 0x96, 0xc3, - 0x9a, 0xca, 0x67, 0x0e, 0xc8, 0x3f, 0xb9, 0x26, 0xb3, 0x08, 0x37, 0x12, 0x26, 0xf8, 0x66, 0x06, - 0xb6, 0x4f, 0x5a, 0x1d, 0x9a, 0x24, 0x05, 0x7e, 0x90, 0x1a, 0x4d, 0x75, 0x74, 0x21, 0x4b, 0x1e, - 0x99, 0x64, 0x7c, 0xc4, 0x61, 0xdf, 0x44, 0x13, 0x9e, 0xe5, 0x8c, 0xa9, 0x0c, 0xca, 0x0b, 0x85, - 0xa0, 0x76, 0x24, 0x08, 0x80, 0x75, 0x59, 0x25, 0x06, 0x54, 0x1b, 0x4a, 0xa1, 0x83, 0x3c, 0x5c, - 0x58, 0x5b, 0x4d, 0xca, 0xb0, 0x0d, 0xf9, 0xe4, 0x50, 0x3b, 0xaa, 0x0d, 0xed, 0x90, 0x86, 0x70, - 0x4d, 0xa5, 0x55, 0x43, 0x93, 0xe4, 0x64, 0x42, 0x22, 0x50, 0x8f, 0xab, 0xd0, 0x84, 0xd9, 0x41, - 0x1b, 0x4c, 0xbc, 0xbc, 0x1f, 0xbc, 0x01, 0xb2, 0x12, 0x29, 0x9f, 0xf0, 0xa4, 0x29, 0x19, 0x65, - 0xbf, 0x34, 0x11, 0x00, 0x9c, 0x31, 0x29, 0x26, 0x91, 0x41, 0x1e, 0x13, 0xc5, 0x36, 0xd9, 0xd9, - 0x98, 0xc8, 0x21, 0x8b, 0x1a, 0x49, 0x3c, 0x46, 0xd4, 0x03, 0x66, 0x4e, 0x33, 0x5e, 0x02, 0x45, - 0xba, 0xcd, 0x84, 0x0e, 0xae, 0x98, 0xa2, 0xc1, 0x25, 0x11, 0x4b, 0x76, 0x45, 0xb4, 0x0c, 0x0c, - 0x3d, 0x62, 0xc5, 0xdd, 0x57, 0x0f, 0xa2, 0x6d, 0xd6, 0xf6, 0x70, 0x0e, 0xcd, 0xa2, 0x59, 0x25, - 0xdc, 0x17, 0x79, 0x4d, 0x84, 0x5c, 0x9a, 0xe4, 0x0d, 0x31, 0x93, 0x71, 0x79, 0xe2, 0x4c, 0x1e, - 0x7d, 0x10, 0x24, 0xd0, 0x67, 0x9a, 0x44, 0x39, 0xc1, 0x1c, 0xf3, 0x46, 0x9a, 0x0e, 0x40, 0xcf, - 0x30, 0x79, 0x18, 0x5b, 0xac, 0x98, 0x60, 0xe0, 0x88, 0x3e, 0xea, 0x85, 0x40, 0x68, 0xf2, 0x42, - 0x48, 0xa0, 0x37, 0xa6, 0xb5, 0xa4, 0xaf, 0x08, 0xf9, 0x5c, 0xc8, 0xf3, 0x17, 0xe8, 0x3f, 0xe6, - 0xfc, 0x01, 0xda, 0x86, 0x89, 0x47, 0x16, 0x4d, 0x97, 0x39, 0x3c, 0x26, 0xc6, 0x03, 0xf3, 0x03, - 0x3d, 0x22, 0xcd, 0xbc, 0x06, 0x9f, 0xdf, 0x78, 0xe4, 0x45, 0x01, 0x3d, 0x98, 0x63, 0x4a, 0x35, - 0xa6, 0x91, 0x6d, 0x9a, 0xb3, 0xdb, 0x8e, 0xc7, 0x53, 0x98, 0x81, 0x4b, 0xf3, 0x79, 0x9a, 0x12, - 0x8d, 0xc3, 0x4b, 0x46, 0x31, 0x54, 0xd3, 0x4a, 0x32, 0x6c, 0x0a, 0x6f, 0x3c, 0x39, 0x33, 0x68, - 0x0a, 0x47, 0x96, 0x04, 0x5f, 0x80, 0xc6, 0x2a, 0x6a, 0xcc, 0x5d, 0x39, 0xab, 0xa5, 0xb9, 0x22, - 0xc0, 0x92, 0xa7, 0x02, 0xc1, 0x23, 0x2f, 0xa1, 0x90, 0x48, 0x5d, 0xbc, 0xb9, 0x1c, 0x93, 0xc7, - 0x93, 0x77, 0x9a, 0x6c, 0x1a, 0x0a, 0x0d, 0xc9, 0x07, 0xc2, 0xc4, 0xa2, 0x0a, 0xc4, 0x6e, 0x58, - 0x74, 0x89, 0xab, 0xa5, 0xaa, 0x7d, 0xf5, 0x80, 0xb8, 0xeb, 0x7c, 0x7e, 0x23, 0x63, 0xf0, 0x70, - 0x6e, 0x49, 0xae, 0x5b, 0x43, 0x8b, 0xb8, 0x8e, 0x1b, 0x65, 0x68, 0xc0, 0x9a, 0xf8, 0x08, 0xb4, - 0x24, 0x63, 0xdd, 0x41, 0xe2, 0xf2, 0x2a, 0x03, 0x2e, 0x80, 0xe9, 0x30, 0x97, 0x41, 0x24, 0x26, - 0xee, 0x7c, 0xe3, 0xa5, 0x07, 0x97, 0x3d, 0x08, 0x39, 0x59, 0x9f, 0xff, 0xd8, 0x1e, 0x63, 0x38, - 0xe2, 0xf6, 0x34, 0x81, 0x75, 0x60, 0x64, 0x40, 0x8d, 0xac, 0x67, 0x4e, 0x4b, 0x1b, 0x08, 0x1d, - 0xf4, 0x51, 0x33, 0x94, 0x9c, 0x87, 0xb0, 0x87, 0x9f, 0xd7, 0xcc, 0x01, 0x54, 0xf8, 0x68, 0xe0, - 0x0e, 0x09, 0x59, 0x92, 0xd8, 0xd0, 0x52, 0x02, 0x0e, 0x78, 0xc2, 0x3f, 0x48, 0x3c, 0xb9, 0x76, - 0x10, 0x0c, 0x3e, 0x97, 0x2a, 0xf5, 0x63, 0xda, 0x52, 0x2a, 0x58, 0xf7, 0xca, 0x1b, 0xdc, 0x79, - 0x83, 0xd7, 0xce, 0x7b, 0xe7, 0xb3, 0x5a, 0x90, 0xec, 0xd1, 0x8a, 0x64, 0x3d, 0x17, 0x24, 0x3e, - 0x50, 0xac, 0xa5, 0x85, 0x0f, 0x25, 0x9d, 0x90, 0xa3, 0x23, 0x24, 0x33, 0xa7, 0x45, 0x01, 0x12, - 0xc6, 0xd8, 0x20, 0x71, 0xc2, 0x14, 0x29, 0x35, 0x1d, 0xe6, 0xd0, 0x9c, 0x10, 0xaa, 0x43, 0x8a, - 0x45, 0xc9, 0xd7, 0x90, 0xb4, 0x2a, 0xf4, 0x2d, 0x6a, 0x68, 0x51, 0x76, 0x07, 0xbc, 0xb9, 0x5c, - 0x32, 0x39, 0xec, 0x60, 0x71, 0x2e, 0x1f, 0x0c, 0xe2, 0x76, 0xa5, 0xee, 0x96, 0x7c, 0xa0, 0x32, - 0x64, 0x70, 0xd6, 0x88, 0xe0, 0x06, 0xd4, 0xd1, 0x67, 0xb6, 0xe2, 0xe6, 0xe7, 0x35, 0xfe, 0xfa, - 0x96, 0x7c, 0xb1, 0xe4, 0x83, 0x45, 0x0f, 0xfe, 0x67, 0x3d, 0x55, 0xbd, 0x2c, 0x97, 0xee, 0x34, - 0x53, 0xf8, 0x68, 0x66, 0x76, 0x9b, 0x88, 0x59, 0x4f, 0xdc, 0x89, 0x4d, 0xba, 0x58, 0xd0, 0x49, - 0xb6, 0x78, 0xdb, 0x2e, 0x63, 0xae, 0xc0, 0x39, 0x38, 0x21, 0x4d, 0xaa, 0xe9, 0xe6, 0x92, 0xdb, - 0x73, 0xc6, 0x21, 0x8b, 0xd7, 0x0d, 0x86, 0x1c, 0xa9, 0xf9, 0x1d, 0x2e, 0x65, 0xe4, 0x0f, 0x28, - 0x1c, 0xaa, 0x0e, 0xf0, 0x6c, 0x63, 0x6f, 0x34, 0xe6, 0x90, 0x81, 0xa6, 0x81, 0x61, 0x39, 0xdc, - 0xd2, 0x77, 0x65, 0x98, 0x43, 0xeb, 0x56, 0x11, 0xda, 0x8f, 0xcb, 0x6e, 0x57, 0x21, 0xc5, 0xf5, - 0xd1, 0x30, 0xa4, 0x90, 0xce, 0x43, 0xd7, 0x20, 0xaa, 0xb1, 0x6b, 0xdd, 0xcb, 0xe1, 0x1b, 0x65, - 0xb2, 0x7d, 0xd5, 0xf1, 0x91, 0x0e, 0x1a, 0x6e, 0xd9, 0x51, 0x8d, 0x7c, 0xa5, 0x30, 0x31, 0xc2, - 0xab, 0xaa, 0x4a, 0xe2, 0x7b, 0xf9, 0x08, 0x55, 0x8a, 0xf6, 0xaa, 0x9b, 0xe4, 0xce, 0x65, 0xc5, - 0xae, 0x23, 0xfc, 0xd4, 0x44, 0xab, 0x0e, 0x57, 0xe4, 0x63, 0x07, 0xee, 0x40, 0x66, 0x9d, 0xcc, - 0x29, 0x0d, 0x4a, 0x0f, 0x5b, 0xf6, 0x54, 0x63, 0xd6, 0xde, 0xa5, 0x04, 0x75, 0xfb, 0x63, 0xed, - 0x34, 0x1c, 0xdd, 0x5e, 0x8e, 0x73, 0xa5, 0xc6, 0x05, 0xf1, 0x2d, 0x5d, 0xf8, 0xab, 0x36, 0xa5, - 0xeb, 0x24, 0xa2, 0x1d, 0x5b, 0xe8, 0xdb, 0xf4, 0x2e, 0xca, 0xe8, 0x3c, 0x52, 0x9c, 0x6e, 0xf2, - 0xd9, 0x6e, 0x6f, 0x7e, 0x35, 0x5b, 0xde, 0x6e, 0xf8, 0x38, 0xf1, 0x99, 0xe8, 0xef, 0x32, 0x51, - 0xdc, 0x66, 0x1b, 0x63, 0x91, 0xce, 0x6f, 0xd7, 0x62, 0x53, 0xd8, 0x37, 0xa2, 0x78, 0x95, 0x08, - 0x7a, 0xfc, 0xe3, 0xc3, 0x0f, 0x0b, 0xb4, 0xd8, 0x4f, 0x75, 0x73, 0x83, 0x8e, 0x33, 0xbc, 0x8e, - 0x17, 0x42, 0x1f, 0x19, 0x39, 0xeb, 0xef, 0x08, 0xb6, 0x98, 0x7d, 0x75, 0x56, 0xed, 0xb9, 0xf7, - 0xa7, 0x74, 0xda, 0xac, 0xb1, 0x2c, 0xdd, 0x53, 0xf1, 0xfa, 0x8b, 0x9e, 0xd9, 0xa3, 0xa3, 0x42, - 0xaf, 0xde, 0xbd, 0x35, 0xd4, 0x1e, 0x99, 0x58, 0xd8, 0xc6, 0xdb, 0x84, 0x3e, 0x7e, 0x34, 0xee, - 0xa3, 0xb8, 0x30, 0x22, 0x23, 0x89, 0x8b, 0x22, 0x11, 0x7c, 0x60, 0xb6, 0x58, 0x89, 0x0d, 0x9d, - 0x60, 0xa3, 0x43, 0x98, 0xc5, 0x2a, 0xce, 0x8d, 0x2d, 0xa0, 0xd9, 0x04, 0xa1, 0xd7, 0x37, 0xab, - 0x11, 0x67, 0xb3, 0x99, 0xb0, 0x69, 0xe3, 0xfa, 0xdb, 0x33, 0x79, 0x9f, 0xf5, 0xe8, 0x54, 0x4e, - 0xcf, 0x04, 0x5a, 0xe5, 0x11, 0x92, 0x5e, 0xdf, 0xe6, 0x35, 0xf4, 0xab, 0x38, 0x2f, 0xec, 0x4c, - 0xac, 0xd3, 0x3b, 0xe0, 0x55, 0x3b, 0x6f, 0xd2, 0xa7, 0xd6, 0xe5, 0x09, 0x8d, 0x46, 0xeb, 0x68, - 0xb1, 0x68, 0x36, 0xed, 0x4f, 0xca, 0x81, 0x4a, 0x24, 0x8e, 0x0f, 0x76, 0xd0, 0xfd, 0xf8, 0x48, - 0x5d, 0x78, 0xf5, 0xf7, 0x25, 0xff, 0x21, 0x1b, 0xda, 0x73, 0xa6, 0xa6, 0x60, 0x3d, 0xa0, 0xc8, - 0x0d, 0xae, 0x4e, 0x10, 0xbc, 0x1b, 0xd1, 0x9f, 0x4a, 0xf9, 0x6c, 0xc4, 0xbd, 0xf1, 0xe7, 0x3f, - 0x5d, 0x9d, 0xfd, 0x8d, 0x0e, 0xff, 0x4d, 0xce, 0xcf, 0xbf, 0xda, 0xdd, 0xc7, 0x9b, 0x45, 0x7a, - 0x6f, 0x27, 0xe9, 0x9c, 0x77, 0xe0, 0xec, 0x55, 0x9a, 0x17, 0xb4, 0xa9, 0xbb, 0x3f, 0xa7, 0xdd, - 0xf2, 0xbf, 0xf5, 0xa7, 0x4b, 0xfa, 0xec, 0x0a, 0xe2, 0xb7, 0x49, 0x08, 0x67, 0x67, 0x62, 0x76, - 0x21, 0xec, 0xbf, 0xe7, 0xd0, 0x99, 0x7e, 0xbf, 0x56, 0xb6, 0xa3, 0x23, 0x63, 0x7f, 0x89, 0x97, - 0xf1, 0x8f, 0x6a, 0x1b, 0x1c, 0x3d, 0xcc, 0x6e, 0xc4, 0x98, 0x0d, 0x12, 0xab, 0x7d, 0x9d, 0x28, - 0xf9, 0x9d, 0x29, 0xc1, 0x20, 0x75, 0x2c, 0xb2, 0x07, 0x22, 0x4c, 0x16, 0x5a, 0xbd, 0xe7, 0xe0, - 0x33, 0x9f, 0x67, 0xb4, 0xe5, 0x47, 0xe6, 0x3f, 0xa6, 0x0b, 0x61, 0xc7, 0x0b, 0xc0, 0x95, 0x27, - 0x11, 0x66, 0x5f, 0x38, 0x7b, 0x50, 0x00, 0x4c, 0x0b, 0x62, 0x48, 0xd9, 0xba, 0xd5, 0x84, 0x20, - 0xd2, 0xb1, 0xab, 0xbe, 0x7d, 0x17, 0x25, 0xb7, 0x62, 0x46, 0xca, 0x64, 0xcf, 0x45, 0x92, 0xe4, - 0xbf, 0xb8, 0x1f, 0xec, 0x18, 0x33, 0x99, 0xec, 0xf5, 0xcf, 0x6f, 0xae, 0x4c, 0xd5, 0x8e, 0xb7, - 0xb7, 0xd1, 0xb8, 0xac, 0x38, 0xd5, 0xa1, 0x52, 0x7c, 0x9b, 0xbf, 0x95, 0x3d, 0xab, 0xd1, 0xd6, - 0xc1, 0x9d, 0x9d, 0x5c, 0xf3, 0x2c, 0x66, 0xa5, 0xc5, 0xfd, 0xf7, 0xad, 0xc8, 0x1e, 0xde, 0x31, - 0xc1, 0x69, 0x76, 0xd6, 0xfb, 0xb2, 0x3c, 0x8a, 0x07, 0xf1, 0x15, 0x35, 0x1c, 0x7a, 0x3d, 0x53, - 0xd0, 0xd1, 0xee, 0x57, 0x11, 0xc8, 0x05, 0xf7, 0xcd, 0xbc, 0x0f, 0x01, 0x90, 0x80, 0xa3, 0x0a, - 0xd8, 0x3c, 0x13, 0x51, 0x21, 0x94, 0x05, 0x9f, 0xf5, 0x0a, 0xc8, 0xc0, 0xdc, 0xa8, 0x23, 0xb7, - 0xbd, 0xe7, 0xf9, 0x34, 0xb2, 0xe9, 0x1c, 0xb2, 0x19, 0x91, 0x38, 0x5e, 0x21, 0xa6, 0x14, 0x57, - 0x7c, 0xf0, 0x43, 0x60, 0x60, 0xde, 0x54, 0xea, 0x99, 0x95, 0x3c, 0xfa, 0x68, 0x56, 0x0d, 0xff, - 0xb7, 0x17, 0xc5, 0xe2, 0xa2, 0x7e, 0xd8, 0xa7, 0x47, 0x9f, 0xc1, 0xa4, 0xea, 0x47, 0x88, 0x94, - 0xc4, 0xd4, 0x11, 0x37, 0x29, 0xbd, 0xaf, 0x76, 0x9b, 0x3d, 0x6d, 0x09, 0xa3, 0xdf, 0xdf, 0xea, - 0xa0, 0x9e, 0x33, 0xac, 0xf2, 0x30, 0x9c, 0x6a, 0xf7, 0xd5, 0x4e, 0xd8, 0xf4, 0xba, 0xef, 0xea, - 0xf0, 0x8c, 0x3a, 0xa8, 0x3d, 0xb0, 0xf2, 0xc0, 0x7d, 0xef, 0xe2, 0x19, 0xf4, 0x83, 0xbe, 0x10, - 0xdc, 0xdc, 0x14, 0xab, 0xe7, 0x88, 0x8d, 0x7f, 0x5c, 0x73, 0x67, 0x62, 0x54, 0x2e, 0x60, 0x41, - 0x71, 0xf1, 0xf0, 0x6d, 0x03, 0x4e, 0x8f, 0x88, 0x00, 0x1f, 0xe4, 0x62, 0xf1, 0xf3, 0x9e, 0x6c, - 0x3e, 0x39, 0xd2, 0x46, 0x2e, 0xf8, 0xe9, 0x56, 0x26, 0x74, 0x78, 0x0b, 0xd7, 0xb6, 0xb8, 0x5c, - 0xc5, 0xc9, 0xe2, 0x2c, 0x22, 0x35, 0x26, 0x05, 0xa8, 0x4e, 0x65, 0x9e, 0x30, 0xc4, 0x86, 0x11, - 0xbf, 0xa5, 0x0d, 0x79, 0x51, 0x88, 0x2c, 0xff, 0xfd, 0xcc, 0x58, 0x6e, 0xb0, 0xb3, 0xc9, 0x3e, - 0xdd, 0x9a, 0x7f, 0xe2, 0x2f, 0x6c, 0xec, 0x8f, 0xe2, 0x81, 0x54, 0xb5, 0x52, 0xb6, 0x32, 0x60, - 0xc0, 0xca, 0x0a, 0x9b, 0x1d, 0x77, 0xfe, 0x97, 0xb8, 0x58, 0x9d, 0xc9, 0x73, 0xf7, 0xd2, 0x5c, - 0xbe, 0xf9, 0xe6, 0x0c, 0xb4, 0x94, 0x67, 0xdc, 0x1b, 0xf6, 0x23, 0x7e, 0x29, 0x3e, 0x98, 0x0b, - 0x41, 0xc7, 0xb7, 0x0c, 0x7a, 0xee, 0x9b, 0x1d, 0x60, 0xc0, 0x71, 0x0d, 0x45, 0x1f, 0xc9, 0x7f, - 0x04, 0xc8, 0x53, 0x3c, 0x8d, 0x49, 0xa6, 0x54, 0xe3, 0xb8, 0x8e, 0x84, 0x70, 0x54, 0xea, 0xf1, - 0x97, 0xea, 0xeb, 0x01, 0x4b, 0x7e, 0x10, 0xd5, 0xfb, 0x00, 0x34, 0xf4, 0x6e, 0x67, 0x4f, 0xfa, - 0xf6, 0x2e, 0x8c, 0x9e, 0xbd, 0x88, 0xd7, 0xfa, 0x5c, 0x1e, 0x9f, 0xeb, 0xcf, 0xb3, 0xf9, 0xac, - 0xf7, 0xec, 0xf9, 0x09, 0xc0, 0xcf, 0x9f, 0x71, 0x0e, 0xd8, 0x84, 0x98, 0x8b, 0xe2, 0x65, 0x51, - 0x64, 0xf1, 0xf5, 0x6d, 0x01, 0x99, 0xf3, 0xd6, 0x38, 0x42, 0x65, 0x4f, 0x11, 0xa8, 0xbf, 0x6c, - 0x38, 0x68, 0x07, 0x2b, 0x44, 0x33, 0xf9, 0x83, 0x09, 0x14, 0x28, 0xea, 0x6e, 0x55, 0x3a, 0x82, - 0x1f, 0x79, 0x59, 0x1a, 0xbe, 0xa2, 0x90, 0xa1, 0x3a, 0x3f, 0xea, 0x29, 0x16, 0xf1, 0x1d, 0xf4, - 0x2c, 0x6f, 0x0d, 0x01, 0x9f, 0x69, 0xf6, 0x24, 0x35, 0x7c, 0x9c, 0xf9, 0x39, 0xb8, 0x96, 0xb7, - 0x59, 0x3d, 0x2f, 0x36, 0xb2, 0x15, 0x37, 0x31, 0xeb, 0x3a, 0x7b, 0xdc, 0x33, 0xad, 0x3c, 0x34, - 0x89, 0x0e, 0xa4, 0xa6, 0x4f, 0x45, 0xf7, 0x9a, 0xce, 0xa7, 0xc0, 0xa8, 0x4d, 0xe3, 0x63, 0xf0, - 0x9b, 0xa3, 0xe0, 0xe9, 0x18, 0x1f, 0x06, 0xd8, 0xb4, 0x07, 0x90, 0xe5, 0x2d, 0x68, 0x1b, 0x66, - 0xb4, 0xfe, 0x5a, 0x05, 0x7c, 0xae, 0x57, 0xe6, 0x72, 0xa8, 0xf8, 0xe8, 0x50, 0x11, 0xc6, 0x51, - 0x59, 0x54, 0xdc, 0xc5, 0x3e, 0xfa, 0x2e, 0x02, 0xcc, 0x61, 0xde, 0xb5, 0x1b, 0xe8, 0x8f, 0x22, - 0x0e, 0xb9, 0x1c, 0xb7, 0x31, 0x97, 0xc7, 0xee, 0x7b, 0x54, 0x53, 0xe7, 0x4b, 0x7c, 0xc2, 0x93, - 0xf3, 0xe9, 0xbb, 0xb7, 0xc8, 0x99, 0x98, 0xbe, 0xf2, 0x2b, 0x8e, 0x26, 0x7d, 0x70, 0xf3, 0x9b, - 0x66, 0xc4, 0xaa, 0x19, 0x8b, 0x90, 0x6a, 0x03, 0xf6, 0x4f, 0x9b, 0xbe, 0xe1, 0x17, 0xe7, 0x43, - 0xc3, 0x80, 0xf9, 0x8c, 0x91, 0xe4, 0xde, 0x3f, 0xfe, 0x01, 0x5f, 0xb2, 0xab, 0x4a, 0xdc, 0xde, - 0xa4, 0xf7, 0x93, 0x34, 0x88, 0x9e, 0x69, 0xdb, 0xb6, 0xd8, 0x9b, 0x35, 0x1b, 0x54, 0x60, 0x81, - 0x7f, 0x16, 0x8b, 0xa6, 0xd7, 0x39, 0xfb, 0x45, 0x98, 0xd1, 0x07, 0x73, 0x43, 0x61, 0x2e, 0x5e, - 0x9e, 0x89, 0xc6, 0x80, 0x35, 0x3f, 0xd3, 0x3f, 0xea, 0x76, 0xa2, 0xa9, 0x48, 0x90, 0x59, 0xa2, - 0xf3, 0x17, 0xe2, 0xd0, 0xdf, 0x48, 0xa3, 0xea, 0x1f, 0x80, 0xae, 0xd1, 0xd2, 0xcf, 0x67, 0x0d, - 0x43, 0x42, 0xe4, 0xec, 0x33, 0xcc, 0x43, 0x84, 0xb2, 0xe8, 0xde, 0x9a, 0x53, 0x3e, 0x27, 0x59, - 0x76, 0x5c, 0x5f, 0xf8, 0x13, 0x88, 0xba, 0xce, 0xd4, 0xf0, 0xb5, 0xc1, 0x85, 0xf5, 0x59, 0xdf, - 0xbc, 0x4b, 0xe3, 0x45, 0x95, 0x93, 0xd3, 0x19, 0x96, 0x96, 0xcc, 0xf6, 0x9d, 0xe3, 0xff, 0x3d, - 0xba, 0x8b, 0xe4, 0x59, 0x0d, 0x8d, 0x46, 0x7a, 0x1c, 0x0d, 0xd5, 0x4e, 0xe3, 0x91, 0xfe, 0x13, - 0x78, 0xa4, 0x47, 0xf0, 0xa0, 0x9f, 0x2d, 0x02, 0x06, 0x74, 0xab, 0x60, 0x9d, 0x15, 0xa7, 0x9d, - 0x4f, 0xdb, 0xbd, 0xb1, 0xf1, 0x64, 0xe9, 0x7d, 0xef, 0xf9, 0x46, 0x86, 0x0b, 0xb0, 0xcd, 0x96, - 0x87, 0x4e, 0x7a, 0xf4, 0x8d, 0x1a, 0x05, 0xe4, 0x0a, 0x65, 0x1a, 0xab, 0x65, 0xd6, 0x85, 0x12, - 0x15, 0x02, 0x06, 0x3c, 0x45, 0x64, 0x1e, 0x17, 0x09, 0x9f, 0x05, 0x04, 0x2b, 0x40, 0xcc, 0x09, - 0x2c, 0x39, 0xf7, 0xe9, 0xc6, 0x53, 0x30, 0x86, 0x5d, 0xde, 0x99, 0x67, 0x22, 0x98, 0xad, 0x5c, - 0xa7, 0x29, 0xa6, 0x39, 0x1b, 0x4c, 0x56, 0xa8, 0x22, 0x5d, 0x1a, 0x1b, 0x0e, 0xa5, 0x5d, 0x5d, - 0xf4, 0xf1, 0xdb, 0x1e, 0x01, 0x6d, 0x79, 0x01, 0x7d, 0x14, 0x57, 0xfa, 0x5b, 0x85, 0x11, 0x35, - 0x53, 0xc9, 0xee, 0xe6, 0xd0, 0x71, 0xd4, 0x0e, 0xfb, 0x13, 0x3e, 0xf2, 0x90, 0x64, 0x7f, 0x4a, - 0x5c, 0x39, 0xee, 0x9e, 0x65, 0x38, 0x38, 0xf0, 0xcf, 0x8d, 0x73, 0xbd, 0x0a, 0xc8, 0x09, 0x15, - 0xdb, 0x82, 0x60, 0xcc, 0x07, 0x8f, 0x40, 0x51, 0x5c, 0x37, 0x53, 0x9b, 0x98, 0x74, 0xa9, 0x7e, - 0xf9, 0x52, 0x90, 0x4b, 0x6b, 0x48, 0xb1, 0x55, 0x10, 0xb5, 0x0b, 0xd2, 0xb6, 0x3f, 0xa7, 0xcc, - 0x75, 0xb1, 0xf8, 0x81, 0xe8, 0x2e, 0x9d, 0x62, 0xd1, 0xdf, 0x6b, 0xbb, 0x2d, 0xd4, 0x2c, 0x60, - 0x73, 0xc8, 0xde, 0x3a, 0x53, 0xdb, 0xbe, 0x9a, 0xd1, 0xb5, 0xe0, 0x9d, 0x58, 0xdc, 0x27, 0xd9, - 0x4c, 0xd5, 0x4d, 0x9a, 0x74, 0x94, 0xae, 0xc4, 0xff, 0xcd, 0x37, 0x47, 0xc4, 0xaf, 0xe3, 0x39, - 0x44, 0xcc, 0xbe, 0xb1, 0xae, 0x32, 0xc0, 0x7e, 0x23, 0xb1, 0xcf, 0xfb, 0x27, 0x34, 0x55, 0x25, - 0xe3, 0xc7, 0x54, 0x55, 0x83, 0xa8, 0x5c, 0xad, 0x50, 0x33, 0x89, 0xe3, 0xf9, 0x81, 0x74, 0xd9, - 0x9c, 0x22, 0x34, 0x29, 0xcb, 0x15, 0x37, 0x45, 0x2b, 0x3f, 0xce, 0x39, 0xf9, 0x2a, 0x79, 0x6d, - 0x4b, 0x9c, 0xc4, 0xe2, 0x88, 0x91, 0xd2, 0xe8, 0x8b, 0xd9, 0x9b, 0xa8, 0x58, 0xd9, 0xfc, 0x65, - 0xb0, 0xa6, 0xf3, 0x3f, 0xce, 0xdc, 0x73, 0x74, 0x2e, 0xc4, 0xb6, 0xdf, 0x3f, 0xaf, 0x9e, 0xa7, - 0x8f, 0x31, 0xaf, 0x5d, 0x4f, 0xbd, 0x7a, 0xa6, 0xea, 0x7d, 0x50, 0xbb, 0x8e, 0x37, 0x54, 0x89, - 0x5b, 0x47, 0x5d, 0xf4, 0x89, 0xeb, 0xa2, 0x4f, 0x15, 0x39, 0x3f, 0xf2, 0x30, 0x67, 0x98, 0x65, - 0x16, 0xe9, 0xf7, 0xf1, 0x27, 0xb1, 0x38, 0xf3, 0xfb, 0xfb, 0x0e, 0x9d, 0xe3, 0xd4, 0x21, 0x7b, - 0xc4, 0xca, 0xb2, 0x03, 0xfb, 0x28, 0xbf, 0xee, 0x01, 0x21, 0x59, 0x5b, 0xb5, 0xb3, 0xb6, 0x79, - 0x34, 0x19, 0x9a, 0xf5, 0xf7, 0x7b, 0x81, 0x78, 0xba, 0x50, 0xfe, 0x58, 0x67, 0x9e, 0x7d, 0x52, - 0xb8, 0xee, 0x24, 0xb9, 0x91, 0x38, 0x1e, 0x50, 0x81, 0x1c, 0x40, 0xb3, 0xf5, 0x8b, 0x72, 0xa5, - 0x45, 0xfa, 0xb5, 0xda, 0x7b, 0xe9, 0xb4, 0x6a, 0x65, 0x6a, 0x1e, 0x48, 0x8b, 0xba, 0x65, 0xe9, - 0x3f, 0xfe, 0x21, 0xba, 0x32, 0x96, 0x55, 0xb4, 0xb9, 0x81, 0xfc, 0x58, 0x11, 0x75, 0xf6, 0x5c, - 0x9b, 0xcd, 0x7f, 0x28, 0xd5, 0x67, 0x56, 0x96, 0xb2, 0x24, 0x80, 0xfa, 0xe4, 0x24, 0xc0, 0xb3, - 0x7e, 0x03, 0x22, 0x40, 0x01, 0x82, 0xf2, 0x96, 0xff, 0x5c, 0xe7, 0x5f, 0x31, 0x2e, 0x07, 0xc7, - 0x9b, 0x43, 0x3d, 0x54, 0xc1, 0xb9, 0x98, 0xed, 0xf6, 0x53, 0xad, 0x52, 0x35, 0xd5, 0x17, 0x95, - 0xea, 0x8b, 0x9a, 0xea, 0x8b, 0x4a, 0x79, 0x71, 0x9f, 0x75, 0x43, 0x46, 0x2d, 0xb4, 0xf8, 0xa0, - 0x92, 0x14, 0x9c, 0xeb, 0xa2, 0x4f, 0x87, 0x75, 0x11, 0x85, 0x9a, 0x26, 0x99, 0x05, 0x7b, 0x4b, - 0xa3, 0x59, 0xb8, 0xa5, 0x1f, 0x36, 0xfe, 0x01, 0x8a, 0xab, 0x10, 0x6c, 0x2d, 0xe4, 0x44, 0x77, - 0xa2, 0x31, 0xb3, 0xad, 0x26, 0xad, 0x7f, 0x4c, 0xd2, 0xeb, 0xb3, 0x5f, 0xfe, 0xcf, 0xbb, 0x9f, - 0x7e, 0xa4, 0xe9, 0x3a, 0x12, 0xfc, 0x78, 0xf9, 0xa0, 0x27, 0x62, 0xe6, 0xe6, 0x36, 0x49, 0x4c, - 0xaf, 0xff, 0xc1, 0xdc, 0x91, 0x7e, 0x4c, 0x7a, 0x50, 0x66, 0xe4, 0xaf, 0x3c, 0x9f, 0x3d, 0xa7, - 0x39, 0x6a, 0x6f, 0x0f, 0xc4, 0x19, 0xcc, 0xf7, 0x48, 0xde, 0xbf, 0x43, 0xc6, 0x3c, 0xd5, 0x9e, - 0x46, 0x26, 0xd0, 0xf0, 0x69, 0x66, 0xaf, 0x3e, 0xe1, 0x05, 0x35, 0x72, 0xc2, 0xdb, 0xe3, 0x4f, - 0x7f, 0x7b, 0xe6, 0x0e, 0x38, 0xad, 0xd2, 0xc5, 0xa4, 0xf7, 0xf6, 0xa7, 0x77, 0x3f, 0xf7, 0x4c, - 0xca, 0x63, 0x26, 0xc5, 0xbe, 0x31, 0x1b, 0x26, 0x7d, 0x6e, 0xcd, 0x86, 0x0f, 0xd7, 0x31, 0xf9, - 0xe8, 0x7a, 0xaa, 0x73, 0xd9, 0xde, 0x3b, 0x51, 0x14, 0x20, 0x26, 0x67, 0xd2, 0x17, 0x46, 0x7e, - 0x3b, 0x9f, 0xa3, 0xe5, 0x12, 0xf4, 0x3c, 0x18, 0x60, 0xc8, 0x12, 0xc6, 0xb6, 0x32, 0xd6, 0x98, - 0xc9, 0x67, 0x0f, 0x5f, 0xd0, 0xaa, 0xa5, 0x5c, 0xb9, 0x24, 0xb7, 0xa8, 0xd1, 0xa3, 0x8e, 0xbd, - 0xc7, 0xf0, 0x40, 0x07, 0x5b, 0x2e, 0x72, 0xe9, 0xd7, 0x8a, 0xe9, 0x8b, 0x54, 0x6d, 0xc4, 0xd3, - 0xec, 0xbc, 0xce, 0xf2, 0x92, 0x57, 0xa2, 0xe4, 0x15, 0x2f, 0x81, 0x99, 0xad, 0xb5, 0xb0, 0xbe, - 0x59, 0x35, 0x68, 0x2c, 0x66, 0xd6, 0xd6, 0xb5, 0x0e, 0x1b, 0x96, 0x1f, 0x0c, 0xc9, 0xa6, 0xd5, - 0x6b, 0xb9, 0xec, 0x26, 0x5d, 0x1f, 0x34, 0xbc, 0x83, 0xf5, 0xc2, 0xcc, 0x84, 0xfc, 0x4d, 0x8b, - 0x09, 0x26, 0x64, 0x49, 0x82, 0x1c, 0x6f, 0x3f, 0x7d, 0xca, 0x3a, 0x48, 0xc9, 0x37, 0xf5, 0xb9, - 0x0b, 0x52, 0x40, 0xcd, 0xa8, 0x8e, 0x35, 0x6d, 0x5a, 0x25, 0xb9, 0x4c, 0x17, 0x08, 0x4d, 0x94, - 0xa0, 0x16, 0xb7, 0xb9, 0xa9, 0xd9, 0xbb, 0xef, 0x77, 0x75, 0xf3, 0x1c, 0x67, 0x36, 0x9b, 0xe9, - 0x5e, 0xdf, 0x1e, 0x8a, 0x5f, 0xb1, 0x5a, 0x50, 0x62, 0x4a, 0xdf, 0xec, 0xff, 0xfc, 0xc3, 0x7f, - 0x1a, 0xf7, 0x71, 0x92, 0xe8, 0xc5, 0x6c, 0x63, 0x93, 0xde, 0xf3, 0xb7, 0xb0, 0xc6, 0x7f, 0xd1, - 0xc7, 0x6e, 0x24, 0x86, 0x1f, 0xde, 0x1a, 0x71, 0x6e, 0xd0, 0x8c, 0x6e, 0x72, 0x08, 0xef, 0x55, - 0x96, 0xa5, 0x59, 0xb9, 0x28, 0x4e, 0x2f, 0xa4, 0x36, 0xf3, 0x52, 0xa0, 0x13, 0x00, 0xbb, 0x40, - 0x5f, 0x5a, 0x81, 0xba, 0xbe, 0xa8, 0x34, 0xe8, 0xd7, 0xae, 0xb0, 0x96, 0xf3, 0x40, 0xa2, 0x12, - 0x3e, 0xe9, 0x2b, 0x4a, 0xc1, 0xf8, 0xb3, 0xff, 0x4e, 0x5e, 0x57, 0x3f, 0x84, 0x81, 0xa1, 0xba, - 0x97, 0x29, 0x5f, 0x26, 0x09, 0x4f, 0x7c, 0x9b, 0x19, 0x84, 0xe8, 0x00, 0xa6, 0x3e, 0xff, 0x67, - 0xad, 0x2f, 0x5d, 0x77, 0x7b, 0x6a, 0xab, 0xda, 0x9c, 0x1a, 0xcc, 0xd6, 0xeb, 0x0b, 0x27, 0xc6, - 0x6c, 0x2d, 0xfc, 0xd4, 0xd6, 0x83, 0x6f, 0xba, 0x67, 0xdd, 0xfd, 0x13, 0xaa, 0xd6, 0xd3, 0xbf, - 0x67, 0x80, 0xd8, 0x55, 0x5f, 0x57, 0x56, 0x9e, 0xbb, 0x15, 0xd2, 0xbf, 0x53, 0xaf, 0xdf, 0x67, - 0xd1, 0x0d, 0xc7, 0xf6, 0xfe, 0xb4, 0x99, 0x0e, 0x81, 0xe7, 0xea, 0xc3, 0xa6, 0xde, 0x53, 0x51, - 0x6b, 0x85, 0xf9, 0x3a, 0x84, 0xe3, 0xeb, 0x8c, 0xec, 0xb6, 0x8f, 0x34, 0xad, 0xf3, 0xa7, 0xb1, - 0xa9, 0x43, 0xc7, 0x6f, 0xe5, 0x52, 0x64, 0x97, 0x5e, 0x70, 0xb7, 0xba, 0x52, 0xec, 0x89, 0x05, - 0xfc, 0xf5, 0xc1, 0x65, 0x94, 0x24, 0xf4, 0x6b, 0x2e, 0xd5, 0x96, 0x52, 0x7f, 0x57, 0xdb, 0x30, - 0x3a, 0x50, 0x79, 0x24, 0x89, 0x66, 0xce, 0x03, 0x35, 0xbe, 0x03, 0x69, 0x2e, 0xf3, 0x99, 0xb5, - 0x6a, 0xf2, 0x17, 0xcd, 0x95, 0x78, 0xae, 0xad, 0x7f, 0xaf, 0x83, 0x6a, 0x1a, 0x67, 0xf6, 0x85, - 0xd3, 0x5a, 0xc5, 0x91, 0x33, 0x46, 0xf9, 0x7b, 0x75, 0xb4, 0x21, 0x76, 0x9b, 0x9d, 0xf9, 0xdb, - 0x4f, 0xfd, 0x9e, 0x9c, 0xd5, 0x3a, 0x48, 0x49, 0xf2, 0x6f, 0xcf, 0x9a, 0x64, 0xe4, 0x04, 0x42, - 0x7f, 0xdc, 0x71, 0x82, 0xcd, 0xfd, 0xc9, 0xb1, 0x76, 0x9d, 0x3c, 0x3e, 0xfc, 0x52, 0x43, 0x48, - 0x26, 0x74, 0xd2, 0xe1, 0x9e, 0xa4, 0xa3, 0x86, 0x7e, 0x03, 0xf7, 0x6f, 0xbe, 0x11, 0xdf, 0x7c, - 0xd3, 0x28, 0xa9, 0xef, 0x44, 0x28, 0x0f, 0xf5, 0xea, 0xdd, 0xdb, 0x46, 0x94, 0x78, 0xea, 0x6a, - 0xb2, 0xea, 0x7e, 0x64, 0x25, 0xb9, 0x23, 0x66, 0x75, 0x7c, 0xf0, 0x64, 0xfe, 0xaf, 0xec, 0x0b, - 0x36, 0x3c, 0x9f, 0xfc, 0x01, 0x17, 0x5a, 0xc5, 0xad, 0x6f, 0x55, 0xd6, 0x57, 0x54, 0xe9, 0x96, - 0xff, 0xe2, 0x7c, 0xd0, 0x19, 0x06, 0x5e, 0xff, 0xc4, 0xbf, 0xf3, 0x00, 0xf3, 0x4d, 0x37, 0xd4, - 0x7b, 0x16, 0xe5, 0x0f, 0x9b, 0x39, 0xa7, 0x73, 0x7a, 0xeb, 0xe6, 0x48, 0x2e, 0x12, 0xaf, 0x49, - 0x8a, 0x98, 0x60, 0x4d, 0x69, 0x17, 0x2b, 0x62, 0xbc, 0x9f, 0x94, 0x87, 0x4c, 0xcb, 0xdd, 0x59, - 0xdb, 0xb6, 0x75, 0x5a, 0x74, 0xb8, 0x76, 0x8c, 0x84, 0x93, 0xa5, 0x61, 0xb6, 0x33, 0x2d, 0xb5, - 0x05, 0xa6, 0x36, 0x97, 0x52, 0x28, 0x8b, 0xa0, 0x60, 0x42, 0x9b, 0xb7, 0x7b, 0x93, 0x54, 0x37, - 0x5a, 0xbc, 0xcc, 0x09, 0x59, 0x12, 0x37, 0x0a, 0xd5, 0xe2, 0x33, 0xfd, 0xa6, 0x46, 0xc3, 0xb6, - 0xd4, 0x41, 0x7c, 0xbd, 0x38, 0x2d, 0x1e, 0x44, 0xbb, 0xfa, 0xd5, 0x83, 0xd0, 0xb5, 0xf2, 0xd3, - 0xf3, 0x76, 0x03, 0x3e, 0xe8, 0xa1, 0x9b, 0xd0, 0x56, 0x62, 0xbb, 0x01, 0x1d, 0x75, 0xd5, 0xf5, - 0x3a, 0x8a, 0xb7, 0x9a, 0xa8, 0x30, 0x5b, 0x42, 0x91, 0x39, 0x52, 0x13, 0x0a, 0xca, 0x74, 0xbd, - 0xd2, 0x98, 0x76, 0x13, 0xa5, 0x5b, 0xd4, 0xaa, 0xf6, 0x21, 0xd5, 0xc1, 0x58, 0xa5, 0x9e, 0x1e, - 0x5d, 0xe4, 0x57, 0xfb, 0x00, 0x4f, 0x5a, 0xb2, 0x3f, 0xfd, 0xd3, 0x41, 0x6a, 0xeb, 0x57, 0xfe, - 0x5e, 0x0a, 0x2d, 0xc3, 0x1e, 0x5d, 0xb9, 0x55, 0x3e, 0x99, 0xdb, 0x97, 0x5f, 0x41, 0x9f, 0xea, - 0x51, 0xdb, 0x1a, 0xe6, 0x4e, 0xf5, 0x2f, 0x8b, 0x4f, 0xf5, 0xab, 0xe7, 0x8f, 0x72, 0xb4, 0xea, - 0x8b, 0xd1, 0x93, 0x18, 0x36, 0x54, 0xb0, 0x5f, 0xee, 0x7e, 0x37, 0x7e, 0x01, 0xe2, 0x31, 0x12, - 0xeb, 0x67, 0x09, 0x24, 0x08, 0xf1, 0x38, 0xc6, 0xad, 0x55, 0x6d, 0xfe, 0xd1, 0x9b, 0x5f, 0xd1, - 0xbe, 0xd2, 0x96, 0xa3, 0x3d, 0x2a, 0x5f, 0xd9, 0x37, 0x95, 0x4b, 0x3c, 0x6c, 0x4b, 0xe2, 0x65, - 0xb6, 0xb7, 0xb8, 0xd0, 0x62, 0xfc, 0x22, 0xce, 0x69, 0x67, 0x70, 0xa1, 0xa2, 0xd3, 0x49, 0xce, - 0xc8, 0x85, 0x27, 0x39, 0x07, 0xa6, 0x4c, 0xb4, 0x23, 0x09, 0xb7, 0x13, 0xde, 0xeb, 0xfc, 0xf6, - 0xe4, 0x40, 0x93, 0x53, 0xb5, 0x2e, 0x1c, 0xe4, 0xf4, 0xc5, 0xb9, 0xfa, 0xa2, 0xaf, 0xf9, 0x7d, - 0x5f, 0xf5, 0x35, 0x60, 0x99, 0xdd, 0x1c, 0x60, 0xf9, 0xec, 0xbb, 0x9f, 0xde, 0xa8, 0xc5, 0x1f, - 0xfa, 0xae, 0x56, 0x2c, 0x9e, 0x99, 0xc6, 0x59, 0xdf, 0x98, 0x5d, 0x18, 0xbb, 0xe6, 0x07, 0x86, - 0xd2, 0x59, 0xaa, 0x1f, 0xac, 0x52, 0x2b, 0x1e, 0xc6, 0xec, 0xe8, 0x41, 0x93, 0x67, 0xaa, 0xe5, - 0xb3, 0xfe, 0xb4, 0x09, 0x47, 0x7a, 0xd0, 0x67, 0xe7, 0x65, 0xfd, 0xe1, 0xe7, 0x92, 0x32, 0xee, - 0xa8, 0x0c, 0x45, 0x10, 0x2e, 0xfa, 0x59, 0x87, 0xa6, 0x63, 0x7d, 0xf4, 0xef, 0x69, 0x1d, 0xa2, - 0xaf, 0xff, 0x6b, 0x12, 0x50, 0x5f, 0xfb, 0x02, 0x31, 0xaa, 0x72, 0x7a, 0xd8, 0x75, 0xdf, 0x35, - 0xa4, 0x72, 0xd3, 0x9c, 0xe8, 0x1f, 0x1f, 0xb1, 0xe9, 0xc3, 0x9f, 0x7d, 0x2f, 0x56, 0x89, 0xc8, - 0x8c, 0x6b, 0x11, 0xaf, 0x8d, 0x97, 0xd7, 0xd9, 0xed, 0x12, 0xb1, 0x8f, 0xbe, 0x72, 0x7e, 0x2f, - 0xc7, 0x9e, 0x80, 0xff, 0xdc, 0xb2, 0xcd, 0x37, 0x89, 0x45, 0xad, 0xb0, 0x7c, 0xa9, 0x49, 0x1f, - 0xf3, 0x0a, 0xf9, 0x5b, 0x3f, 0xfc, 0xbb, 0x6e, 0xf4, 0xff, 0x34, 0xfa, 0x1f, 0xf1, 0x7f, 0x3c, - 0x01, 0xeb, 0x68, 0x00, 0x00 -}; \ No newline at end of file