Save and restore LED state (#1558)

This commit is contained in:
Darrell 2025-03-06 09:40:23 -05:00 committed by GitHub
parent e29f4c3896
commit 48223491a8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
17 changed files with 3265 additions and 3217 deletions

View File

@ -1 +1,2 @@
Don't fix typescript errors without permission please
To test: `pio-on && pio run`

View File

@ -21,13 +21,19 @@ int led_1_cnt = DEFAULT_LED1_CNT, led_2_cnt, led_3_cnt;
ControlType led_1_cntrl = DEFAULT_LED1_CNTRL, led_2_cntrl, led_3_cntrl;
std::vector<LED*> leds, statusLeds, countLeds, motionLeds;
bool online;
unsigned long lastSave = 0;
LED* newLed(uint8_t index, ControlType cntrl, int type, int pin, int cnt) {
if (pin == -1) return new LED(index, Control_Type_None);
if (type >= 2)
return new Addressable(index, cntrl, type - 2, pin, cnt);
else
return new SinglePWM(index, cntrl, type == 1, pin);
LED* newLed(uint8_t index, ControlType cntrl, int type, int pin, int cnt, String stateStr) {
LED* led;
if (pin == -1) {
led = new LED(index, Control_Type_None);
} else if (type >= 2) {
led = new Addressable(index, cntrl, type - 2, pin, cnt);
} else {
led = new SinglePWM(index, cntrl, type == 1, pin);
}
led->setStateString(stateStr);
return led;
}
void ConnectToWifi() {
@ -38,20 +44,23 @@ void ConnectToWifi() {
led_1_pin = HeadlessWiFiSettings.integer("led_1_pin", -1, 39, DEFAULT_LED1_PIN, "Pin (-1 to disable)");
led_1_cnt = HeadlessWiFiSettings.integer("led_1_cnt", -1, 39, DEFAULT_LED1_CNT, "Count (only applies to Addressable LEDs)");
led_1_cntrl = (ControlType)HeadlessWiFiSettings.dropdown("led_1_cntrl", ledControlTypes, DEFAULT_LED1_CNTRL, "LED Control");
String led_1_state = HeadlessWiFiSettings.string("led_1_state", true, "LED State");
led_2_type = HeadlessWiFiSettings.dropdown("led_2_type", ledTypes, 0, "LED Type");
led_2_pin = HeadlessWiFiSettings.integer("led_2_pin", -1, 39, -1, "Pin (-1 to disable)");
led_2_cnt = HeadlessWiFiSettings.integer("led_2_cnt", -1, 39, 1, "Count (only applies to Addressable LEDs)");
led_2_cntrl = (ControlType)HeadlessWiFiSettings.dropdown("led_2_cntrl", ledControlTypes, 0, "LED Control");
String led_2_state = HeadlessWiFiSettings.string("led_2_state", true, "LED State");
led_3_type = HeadlessWiFiSettings.dropdown("led_3_type", ledTypes, 0, "LED Type");
led_3_pin = HeadlessWiFiSettings.integer("led_3_pin", -1, 39, -1, "Pin (-1 to disable)");
led_3_cnt = HeadlessWiFiSettings.integer("led_3_cnt", -1, 39, 1, "Count (only applies to Addressable LEDs)");
led_3_cntrl = (ControlType)HeadlessWiFiSettings.dropdown("led_3_cntrl", ledControlTypes, 0, "LED Control");
String led_3_state = HeadlessWiFiSettings.string("led_3_state", true, "LED State");
leds.push_back(newLed(1, led_1_cntrl, led_1_type, led_1_pin, led_1_cnt));
leds.push_back(newLed(2, led_2_cntrl, led_2_type, led_2_pin, led_2_cnt));
leds.push_back(newLed(3, led_3_cntrl, led_3_type, led_3_pin, led_3_cnt));
leds.push_back(newLed(1, led_1_cntrl, led_1_type, led_1_pin, led_1_cnt, led_1_state));
leds.push_back(newLed(2, led_2_cntrl, led_2_type, led_2_pin, led_2_cnt, led_2_state));
leds.push_back(newLed(3, led_3_cntrl, led_3_type, led_3_pin, led_3_cnt, led_3_state));
std::copy_if(leds.begin(), leds.end(), std::back_inserter(statusLeds), [](LED* a) { return a->getControlType() == Control_Type_Status; });
std::copy_if(leds.begin(), leds.end(), std::back_inserter(countLeds), [](LED* a) { return a->getControlType() == Control_Type_Count; });
std::copy_if(leds.begin(), leds.end(), std::back_inserter(motionLeds), [](LED* a) { return a->getControlType() == Control_Type_Motion; });
@ -66,15 +75,21 @@ bool sendState(LED* bulb) {
auto slug = slugify(bulb->getName());
auto state = bulb->getState();
doc["state"] = state ? MQTT_STATE_ON_PAYLOAD : MQTT_STATE_OFF_PAYLOAD;
if (state) {
doc["brightness"] = bulb->getBrightness();
doc["color_mode"] = bulb->hasRgbw() ? "rgbw" : bulb->hasRgb() ? "rgb": "brightness";
doc["brightness"] = bulb->getBrightness();
if (bulb->hasRgbw()) {
auto color = doc.createNestedObject("color");
auto c = bulb->getColor();
color["r"] = c.red;
color["g"] = c.green;
color["b"] = c.blue;
color["w"] = c.white;
} else if (bulb->hasRgb()) {
auto color = doc.createNestedObject("color");
auto c = bulb->getColor();
color["r"] = c.red;
color["g"] = c.green;
color["b"] = c.blue;
// doc["white_value"] = bulb->getColor().white;
// doc["color_temp"] = bulb->getColorTemperature();
}
serializeJson(doc, buffer);
String setTopic = Sprintf("%s/%s", roomsTopic.c_str(), slug.c_str());
@ -83,17 +98,30 @@ bool sendState(LED* bulb) {
void Setup() {
for (auto& led : leds)
led->begin();
led->update();
}
void Save() {
for (auto& led : leds)
if (led->getControlType() == Control_Type_MQTT && led->getDirty()) {
led->setDirty(false);
Serial.printf("Saving %s: %s\r\n", led->getStateFilename().c_str(), led->getStateString().c_str());
spurt(led->getStateFilename(), led->getStateString());
}
}
void Loop() {
for (auto& led : leds)
led->service();
if (millis() - lastSave > 15000) {
lastSave = millis();
Save();
}
}
bool SendDiscovery() {
for (auto& led : leds)
if (led->getControlType() == Control_Type_MQTT && !sendLightDiscovery(led->getName(), EC_NONE, led->hasRgb()))
if (led->getControlType() == Control_Type_MQTT && !sendLightDiscovery(led->getName(), EC_NONE, led->hasRgb(), led->hasRgbw()))
return false;
return true;
}
@ -114,8 +142,8 @@ void Connected(bool wifi, bool mqtt) {
void Seen(bool inprogress) {
for (auto& led : statusLeds)
if (led->hasRgb()) {
led->setColor(inprogress ? PURPLE : GREEN);
led->setState(true);
led->setColor(inprogress ? PURPLE : ORANGE);
} else
led->setState(inprogress);
}
@ -155,12 +183,12 @@ LED* findBulb(String& command) {
return led;
}
}
return NULL;
return nullptr;
}
bool Command(String& command, String& pay) {
auto bulb = findBulb(command);
if (bulb == NULL) return false;
if (bulb == nullptr) return false;
DynamicJsonDocument root(pay.length() + 100);
auto err = deserializeJson(root, pay);
if (err) {
@ -198,31 +226,28 @@ bool Command(String& command, String& pay) {
return true;
}
int count = 0, lastCount = 0;
void Counting(bool added)
{
if (added) {
count++;
} else {
count--;
}
if (count != lastCount) {
lastCount = count;
for (auto& led : countLeds)
led->setState(count > 0);
}
int count = 0, lastCount = 0;
void Counting(bool added) {
if (added) {
count++;
} else {
count--;
}
void Count(unsigned int countVal)
{
count = countVal;
for (auto& led: countLeds)
if (count != lastCount) {
lastCount = count;
for (auto& led : countLeds)
led->setState(count > 0);
}
}
void Motion(bool pir, bool radar)
{
for (auto& led: motionLeds)
led->setState(pir || radar);
}
void Count(unsigned int countVal) {
count = countVal;
for (auto& led : countLeds)
led->setState(count > 0);
}
void Motion(bool pir, bool radar) {
for (auto& led : motionLeds)
led->setState(pir || radar);
}
} // namespace LEDs

View File

@ -1,5 +1,4 @@
#include "Addressable.h"
#include "defaults.h"
Addressable::Addressable(uint8_t index, ControlType controlType, int type, int pin, int cnt) : LED(index, controlType) {
@ -22,59 +21,50 @@ neoPixelType getNeoPixelType(int type) {
return NEO_GRB + NEO_KHZ800;
}
void Addressable::begin() {
if (ws2812fx == NULL) {
ws2812fx = new WS2812FX(cnt, pin, getNeoPixelType(type), 1, 1);
ws2812fx->init();
ws2812fx->setColor(255, 255, 128);
ws2812fx->setBrightness(64);
ws2812fx->setMode(FX_MODE_STATIC);
ws2812fx->start();
void Addressable::update() {
if (pixels == nullptr) {
pixels = new Adafruit_NeoPixel(cnt, pin, getNeoPixelType(type));
pixels->begin();
pixels->clear();
}
Color color = LED::getColor();
uint32_t pixelColor = pixels->Color(color.red, color.green, color.blue);
uint8_t brightness = mapBrightness(LED::getBrightness());
pixels->setBrightness(brightness);
if (LED::getState()) {
// Fill all pixels with the same color for quick operation
for (int i = 0; i < cnt; i++) {
pixels->setPixelColor(i, pixelColor);
}
} else {
// Turn off all pixels
pixels->clear();
}
// Send the updated pixel colors to the hardware
pixels->show();
}
void Addressable::service() {
if (ws2812fx == NULL) begin();
ws2812fx->service();
// No need for continuous service in this implementation
// This method is now a no-op, but kept for API compatibility
}
bool Addressable::setColor(uint8_t p_red, uint8_t p_green, uint8_t p_blue) {
if (!LED::setColor(p_red, p_green, p_blue)) return false;
if (ws2812fx == NULL) begin();
ws2812fx->setColor(p_red, p_green, p_blue);
ws2812fx->setBrightness(LED::getBrightness());
LED::setState(true);
return true;
uint8_t Addressable::mapBrightness(uint8_t brightness) {
// Special case for zero brightness
if (brightness == 0) return 0;
// For non-zero values, ensure we have at least brightness level 1
// and map the rest of the range proportionally
long const result = 1 + ((long)(brightness - 1) * (MAX_BRIGHTNESS - 1)) / 254;
// Ensure we stay within byte range
return (uint8_t)min(result, (long)MAX_BRIGHTNESS);
}
bool Addressable::setBrightness(uint8_t p_brightness) {
if (!LED::setBrightness(p_brightness)) return false;
if (ws2812fx == NULL) begin();
ws2812fx->setBrightness(map(p_brightness, 0, 255, 0, MAX_BRIGHTNESS));
LED::setState(p_brightness > 0);
return true;
}
bool Addressable::setState(bool p_state) {
if (!LED::setState(p_state)) return false;
if (ws2812fx == NULL) begin();
ws2812fx->setBrightness(map(p_state ? LED::getBrightness() : 0, 0, 255, 0, MAX_BRIGHTNESS));
return true;
}
bool Addressable::setWhite(uint8_t p_white) {
Serial.printf("Addressable::setWhite: p_white=%d\r\n", p_white);
if (ws2812fx == NULL) begin();
ws2812fx->setColor(p_white, p_white, p_white);
return true;
}
bool Addressable::setEffect(const char* p_effect) {
// ws2812fx->setMode(p_effect);
return true;
}
bool Addressable::hasRgbw()
{
return this->type==1 || this->type==3;
bool Addressable::hasRgbw() {
return this->type == 1 || this->type == 3;
}

View File

@ -1,26 +1,23 @@
#include <Arduino.h>
#include <WS2812FX.h>
#ifndef ADDRESSABLE_H
#define ADDRESSABLE_H
#include <Adafruit_NeoPixel.h>
#include "LED.h"
class Addressable : public LED {
public:
public:
Addressable(uint8_t index, ControlType controlType, int type, int pin, int cnt);
void begin() override;
void update() override;
void service() override;
bool setColor(uint8_t p_red, uint8_t p_green, uint8_t p_blue) override;
bool setWhite(uint8_t p_white) override;
bool setBrightness(uint8_t brightness) override;
bool setState(bool p_state) override;
bool setEffect(const char* p_effect) override;
bool hasRgb() override { return true; }
bool hasRgbw() override;
private:
WS2812FX* ws2812fx = NULL;
private:
int type;
int pin;
int cnt;
int cntrl;
Adafruit_NeoPixel* pixels = nullptr;
uint8_t mapBrightness(uint8_t brightness);
};
#endif // ADDRESSABLE_H

View File

@ -2,10 +2,10 @@
#include "string_utils.h"
void LED::begin() {}
void LED::update() {}
void LED::service() {}
uint8_t LED::getBrightness(void) {
uint8_t LED::getBrightness() {
return brightness;
}
@ -14,12 +14,12 @@ bool LED::setBrightness(uint8_t p_brightness) {
if (p_brightness == brightness) return false;
if (p_brightness > 0)
brightness = p_brightness;
else
LED::setState(false);
dirty = true;
update();
return true;
}
const Color LED::getColor(void) {
const Color LED::getColor() {
return color;
}
@ -27,20 +27,24 @@ bool LED::setColor(uint32_t color) {
return LED::setColor((color & 0xFF0000) >> 16, (color & 0x00FF00) >> 8, (color & 0x0000FF));
}
bool LED::setColor(uint8_t p_red, uint8_t p_green, uint8_t p_blue) {
if (p_red == color.red && p_green == color.green && p_blue == color.blue) {
bool LED::setColor(uint8_t p_red, uint8_t p_green, uint8_t p_blue, uint8_t p_white) {
if (p_red == color.red && p_green == color.green && p_blue == color.blue && p_white == color.white) {
return false;
}
// Serial.printf("LED::setColor(%d, %d, %d)\r\n", p_red, p_green, p_blue);
color.red = p_red;
color.green = p_green;
color.blue = p_blue;
color.white = p_white;
dirty = true;
update();
return true;
}
bool LED::setWhite(uint8_t p_white) {
Serial.printf("LED::setWhite(%d)\r\n", p_white);
return false;
//Serial.printf("LED::setWhite(%d)\r\n", p_white);
if (!LED::setColor(255, 255, 255) && !LED::setBrightness(p_white)) return false;
return true;
}
uint16_t LED::getColorTemperature(void) {
@ -48,16 +52,18 @@ uint16_t LED::getColorTemperature(void) {
}
bool LED::setColorTemperature(uint16_t p_colorTemperature) {
Serial.printf("LED::setColorTemperature(%d)\r\n", p_colorTemperature);
//Serial.printf("LED::setColorTemperature(%d)\r\n", p_colorTemperature);
dirty = true;
return false;
}
bool LED::setEffect(const char *p_effect) {
Serial.printf("LED::setEffect(%s)\r\n", p_effect);
//Serial.printf("LED::setEffect(%s)\r\n", p_effect);
dirty = true;
return false;
}
bool LED::getState(void) {
bool LED::getState() {
return state;
}
@ -65,6 +71,8 @@ bool LED::setState(bool p_state) {
if (state == p_state) return false;
// Serial.printf("LED::setState(%s)\r\n", p_state ? "true" : "false");
state = p_state;
dirty = true;
update();
return true;
}
@ -80,3 +88,38 @@ LED::LED(uint8_t index, ControlType controlType) {
const String LED::getId() {
return Sprintf("led_%d", index);
}
const String LED::getStateFilename() {
return Sprintf("/led_%d_state", index);
}
const String LED::getStateString() {
// Format: BBRGGBBWW (B=brightness, R=red, G=green, B=blue, W=white)
char stateStr[11];
sprintf(stateStr, "%02X%02X%02X%02X%02X",
brightness,
color.red,
color.green,
color.blue,
color.white);
return String(stateStr);
}
void LED::setStateString(const String& encoded) {
if (encoded.length() == 10) {
// Parse hex values - each value is 2 hex digits
uint8_t const brightness = strtol(encoded.substring(0, 2).c_str(), NULL, 16);
uint8_t const r = strtol(encoded.substring(2, 4).c_str(), NULL, 16);
uint8_t const g = strtol(encoded.substring(4, 6).c_str(), NULL, 16);
uint8_t const b = strtol(encoded.substring(6, 8).c_str(), NULL, 16);
uint8_t const w = strtol(encoded.substring(8, 10).c_str(), NULL, 16);
if (hasRgbw()) {
setColor(r, g, b, w);
} else if (hasRgb()) {
setColor(r, g, b);
}
setBrightness(brightness);
}
}

View File

@ -20,7 +20,7 @@ struct Color {
class LED {
public:
LED(uint8_t index, ControlType controlType);
virtual void begin();
virtual void update();
virtual void service();
virtual uint8_t getBrightness(void);
@ -28,7 +28,7 @@ class LED {
const virtual Color getColor(void);
virtual bool setColor(uint32_t color);
virtual bool setColor(uint8_t red, uint8_t green, uint8_t blue);
virtual bool setColor(uint8_t red, uint8_t green, uint8_t blue, uint8_t white = 0);
virtual bool setWhite(uint8_t white);
@ -45,6 +45,13 @@ class LED {
const String getId();
const String getName();
bool getDirty() { return this->dirty; }
void setDirty(bool dirty) { this->dirty = dirty; }
const String getStateFilename();
const String getStateString();
void setStateString(const String& encoded);
virtual bool hasRgb() { return false; }
virtual bool hasRgbw() { return false; }
@ -53,5 +60,6 @@ class LED {
uint8_t index;
Color color = {255, 255, 128, 128};
bool state = true;
uint8_t brightness = 64;
uint8_t brightness = 128;
bool dirty = false;
};

View File

@ -12,8 +12,8 @@ void SinglePWM::init() {
ledcAttachPin(pin, getIndex());
}
void SinglePWM::begin() {
setDuty(LED::getBrightness());
void SinglePWM::update() {
setDuty(LED::getState() ? LED::getBrightness() : 0);
}
void SinglePWM::setDuty(uint32_t x) {
@ -25,15 +25,3 @@ void SinglePWM::setDuty(uint32_t x) {
void SinglePWM::service() {
}
bool SinglePWM::setState(bool state) {
if (!LED::setState(state)) return false;
setDuty(state ? LED::getBrightness() : 0);
return true;
}
bool SinglePWM::setBrightness(uint8_t brightness) {
if (!LED::setBrightness(brightness)) return false;
setDuty(brightness);
return true;
}

View File

@ -6,12 +6,9 @@ class SinglePWM : public LED {
public:
SinglePWM(uint8_t index, ControlType controlType, bool inverted, int pin);
void begin() override;
void update() override;
void service() override;
bool setState(bool state) override;
bool setBrightness(uint8_t brightness) override;
private:
void init();
void setDuty(uint32_t value);

View File

@ -192,7 +192,7 @@ bool sendNumberDiscovery(const String &name, const String &entityCategory)
return pub(discoveryTopic.c_str(), 0, true, buffer.c_str());
}
bool sendLightDiscovery(const String &name, const String &entityCategory, bool rgb)
bool sendLightDiscovery(const String &name, const String &entityCategory, bool rgb, bool rgbw)
{
auto slug = slugify(name);
@ -204,7 +204,15 @@ bool sendLightDiscovery(const String &name, const String &entityCategory, bool r
doc["stat_t"] = "~/" + slug;
doc["cmd_t"] = "~/" + slug + "/set";
doc["brightness"] = true;
doc["rgb"] = rgb;
if (rgbw) {
doc["supported_color_modes"][0] = "rgbw";
} else if (rgb) {
doc["supported_color_modes"][0] = "rgb";
} else {
doc["supported_color_modes"][0] = "brightness";
}
if (!entityCategory.isEmpty()) doc["entity_category"] = entityCategory;
String buffer = String();

View File

@ -21,7 +21,7 @@ bool sendSensorDiscovery(const String &name, const String &entityCategory, const
bool sendButtonDiscovery(const String &name, const String &entityCategory);
bool sendSwitchDiscovery(const String &name, const String &entityCategory);
bool sendNumberDiscovery(const String &name, const String &entityCategory);
bool sendLightDiscovery(const String &name, const String &entityCategory, bool rgb);
bool sendLightDiscovery(const String &name, const String &entityCategory, bool rgb, bool rgbw);
bool sendDeleteDiscovery(const String &domain, const String &name);

File diff suppressed because it is too large Load Diff

View File

@ -6,39 +6,38 @@
#include <ESPAsyncWebServer.h>
#include <Arduino.h>
// app/immutable/entry/app.f1xA8tYB.js
const uint16_t APP_IMMUTABLE_ENTRY_APP_F1XA8TYB_JS_L = 162;
const uint8_t APP_IMMUTABLE_ENTRY_APP_F1XA8TYB_JS[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x45, 0x4e, 0x35, 0x16, 0x02, 0x41,
0x0c, 0xed, 0xb9, 0x04, 0x52, 0x07, 0x2f, 0xb7, 0xa5, 0xc2, 0xae, 0xc0, 0x1b, 0x7d, 0xeb, 0xd9,
0x11, 0x1c, 0xee, 0x0e, 0x99, 0x20, 0x55, 0xe4, 0x6b, 0xd1, 0x74, 0xe8, 0xe3, 0xdd, 0x0c, 0x44,
0x18, 0x20, 0x48, 0x1a, 0x06, 0x34, 0x0d, 0x0f, 0x8a, 0x86, 0x86, 0x9c, 0x86, 0x82, 0x86, 0x46,
0x0e, 0x2d, 0x8d, 0x08, 0x9e, 0x46, 0x03, 0x82, 0x46, 0xfb, 0xb4, 0x1e, 0x9b, 0xd1, 0x64, 0x32,
0x55, 0xf9, 0xb1, 0xad, 0xc2, 0x74, 0x65, 0x37, 0xbb, 0x6e, 0xbf, 0x5b, 0x4e, 0xca, 0x30, 0xca,
0xcc, 0x25, 0x25, 0x60, 0x32, 0x33, 0x0a, 0xb5, 0x01, 0xf3, 0xdf, 0x7d, 0x60, 0x2b, 0x5d, 0xa8,
0x58, 0x60, 0x2b, 0xfc, 0x95, 0xd3, 0x73, 0x11, 0x72, 0x2e, 0x90, 0x23, 0x56, 0x81, 0x4b, 0x34,
0x22, 0xaa, 0x9c, 0x24, 0x31, 0xc5, 0xbe, 0xe5, 0x81, 0x6b, 0x79, 0xc4, 0xc8, 0xcd, 0x82, 0xf1,
0x27, 0xe3, 0x0f, 0x35, 0x0a, 0x1d, 0x9e, 0x59, 0xef, 0x05, 0xe7, 0xa2, 0x85, 0x6f, 0xdf, 0x00,
0x00, 0x00
// app/immutable/entry/app.oD47fpeL.js
const uint16_t APP_IMMUTABLE_ENTRY_APP_OD47FPEL_JS_L = 160;
const uint8_t APP_IMMUTABLE_ENTRY_APP_OD47FPEL_JS[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x44, 0xce, 0x31, 0x0e, 0xc2, 0x30,
0x0c, 0x05, 0xd0, 0xab, 0x54, 0x9d, 0xad, 0x96, 0x15, 0xf5, 0x1e, 0xac, 0x28, 0x4d, 0x5c, 0xb9,
0x94, 0xc4, 0x60, 0x07, 0x04, 0x42, 0xbd, 0x3b, 0x38, 0x1e, 0x98, 0x9e, 0x17, 0xff, 0xff, 0xd7,
0x7c, 0x63, 0xa9, 0x1f, 0xec, 0x82, 0x76, 0x0c, 0xb3, 0x81, 0x90, 0x0c, 0x81, 0x68, 0x24, 0x20,
0x23, 0x42, 0x36, 0x08, 0x8a, 0x51, 0x41, 0x8c, 0x0c, 0xc1, 0x28, 0xfb, 0x22, 0x9c, 0xfb, 0x61,
0x18, 0x23, 0x3d, 0xca, 0xa6, 0x63, 0x9a, 0xef, 0x87, 0xd3, 0x71, 0xd9, 0x86, 0x8b, 0xf6, 0x13,
0xbe, 0x5a, 0x03, 0xb7, 0x30, 0x8c, 0x9c, 0x10, 0xf0, 0x7f, 0x8b, 0x7a, 0x54, 0x5a, 0x63, 0x5d,
0xb9, 0x04, 0x79, 0x7b, 0x3b, 0x05, 0x25, 0x1f, 0x40, 0xcc, 0x9b, 0xfa, 0x88, 0x1c, 0x6a, 0x24,
0x7b, 0xa9, 0xad, 0xf6, 0xf7, 0xae, 0x3e, 0x4b, 0x98, 0xab, 0x2f, 0x53, 0x94, 0x27, 0xca, 0xf9,
0xca, 0x21, 0xe9, 0x3e, 0x7d, 0xc7, 0x05, 0x00, 0x12, 0x6d, 0x5e, 0x9c, 0xdf, 0x00, 0x00, 0x00
};
inline void serveAppImmutableEntryAppF1xA8tYbJs(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_ENTRY_APP_F1XA8TYB_JS, APP_IMMUTABLE_ENTRY_APP_F1XA8TYB_JS_L);
inline void serveAppImmutableEntryAppOD47fpeLJs(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_ENTRY_APP_OD47FPEL_JS, APP_IMMUTABLE_ENTRY_APP_OD47FPEL_JS_L);
response->addHeader(F("Content-Encoding"), "gzip");
request->send(response);
}
// app/immutable/entry/start.DWUfuLlk.js
const uint16_t APP_IMMUTABLE_ENTRY_START_DWUFULLK_JS_L = 62;
const uint8_t APP_IMMUTABLE_ENTRY_START_DWUFULLK_JS[] PROGMEM = {
// app/immutable/entry/start.6UzJ3mXZ.js
const uint16_t APP_IMMUTABLE_ENTRY_START_6UZJ3MXZ_JS_L = 62;
const uint8_t APP_IMMUTABLE_ENTRY_START_6UZJ3MXZ_JS[] PROGMEM = {
0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x7b, 0x73, 0x20, 0x61, 0x73, 0x20, 0x74, 0x7d, 0x66, 0x72,
0x6f, 0x6d, 0x22, 0x2e, 0x2e, 0x2f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x2f, 0x44, 0x66, 0x4b,
0x4d, 0x70, 0x4e, 0x4d, 0x33, 0x2e, 0x6a, 0x73, 0x22, 0x3b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74,
0x6f, 0x6d, 0x22, 0x2e, 0x2e, 0x2f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x2f, 0x64, 0x62, 0x71,
0x30, 0x56, 0x39, 0x66, 0x6b, 0x2e, 0x6a, 0x73, 0x22, 0x3b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74,
0x7b, 0x74, 0x20, 0x61, 0x73, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x7d, 0x3b, 0x0a
};
inline void serveAppImmutableEntryStartDwUfuLlkJs(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_ENTRY_START_DWUFULLK_JS, APP_IMMUTABLE_ENTRY_START_DWUFULLK_JS_L);
inline void serveAppImmutableEntryStart_6UzJ3mXzJs(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_ENTRY_START_6UZJ3MXZ_JS, APP_IMMUTABLE_ENTRY_START_6UZJ3MXZ_JS_L);
request->send(response);
}

View File

@ -6,109 +6,109 @@
#include <ESPAsyncWebServer.h>
#include <Arduino.h>
// app/immutable/nodes/0.BpUMrsxe.js
const uint16_t APP_IMMUTABLE_NODES_0_BPUMRSXE_JS_L = 88;
const uint8_t APP_IMMUTABLE_NODES_0_BPUMRSXE_JS[] PROGMEM = {
// app/immutable/nodes/0.DaxsOZCT.js
const uint16_t APP_IMMUTABLE_NODES_0_DAXSOZCT_JS_L = 88;
const uint8_t APP_IMMUTABLE_NODES_0_DAXSOZCT_JS[] PROGMEM = {
0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x7b, 0x66, 0x20, 0x61, 0x73, 0x20, 0x65, 0x2c, 0x5f, 0x20,
0x61, 0x73, 0x20, 0x6e, 0x7d, 0x66, 0x72, 0x6f, 0x6d, 0x22, 0x2e, 0x2e, 0x2f, 0x63, 0x68, 0x75,
0x6e, 0x6b, 0x73, 0x2f, 0x44, 0x66, 0x4b, 0x4d, 0x70, 0x4e, 0x4d, 0x33, 0x2e, 0x6a, 0x73, 0x22,
0x6e, 0x6b, 0x73, 0x2f, 0x64, 0x62, 0x71, 0x30, 0x56, 0x39, 0x66, 0x6b, 0x2e, 0x6a, 0x73, 0x22,
0x3b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x7b, 0x65, 0x20, 0x61, 0x73, 0x20, 0x63, 0x6f, 0x6d,
0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2c, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x75, 0x6e, 0x69, 0x76,
0x65, 0x72, 0x73, 0x61, 0x6c, 0x7d, 0x3b, 0x0a
};
inline void serveAppImmutableNodes_0BpUMrsxeJs(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_NODES_0_BPUMRSXE_JS, APP_IMMUTABLE_NODES_0_BPUMRSXE_JS_L);
inline void serveAppImmutableNodes_0DaxsOzctJs(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_NODES_0_DAXSOZCT_JS, APP_IMMUTABLE_NODES_0_DAXSOZCT_JS_L);
request->send(response);
}
// app/immutable/nodes/1.FH0nAYsZ.js
const uint16_t APP_IMMUTABLE_NODES_1_FH0NAYSZ_JS_L = 66;
const uint8_t APP_IMMUTABLE_NODES_1_FH0NAYSZ_JS[] PROGMEM = {
// app/immutable/nodes/1.Dxwzkq2L.js
const uint16_t APP_IMMUTABLE_NODES_1_DXWZKQ2L_JS_L = 66;
const uint8_t APP_IMMUTABLE_NODES_1_DXWZKQ2L_JS[] PROGMEM = {
0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x7b, 0x45, 0x20, 0x61, 0x73, 0x20, 0x6d, 0x7d, 0x66, 0x72,
0x6f, 0x6d, 0x22, 0x2e, 0x2e, 0x2f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x2f, 0x44, 0x66, 0x4b,
0x4d, 0x70, 0x4e, 0x4d, 0x33, 0x2e, 0x6a, 0x73, 0x22, 0x3b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74,
0x6f, 0x6d, 0x22, 0x2e, 0x2e, 0x2f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x2f, 0x64, 0x62, 0x71,
0x30, 0x56, 0x39, 0x66, 0x6b, 0x2e, 0x6a, 0x73, 0x22, 0x3b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74,
0x7b, 0x6d, 0x20, 0x61, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x7d,
0x3b, 0x0a
};
inline void serveAppImmutableNodes_1Fh0nAYsZJs(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_NODES_1_FH0NAYSZ_JS, APP_IMMUTABLE_NODES_1_FH0NAYSZ_JS_L);
inline void serveAppImmutableNodes_1Dxwzkq2LJs(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_NODES_1_DXWZKQ2L_JS, APP_IMMUTABLE_NODES_1_DXWZKQ2L_JS_L);
request->send(response);
}
// app/immutable/nodes/2.B9h3vkVi.js
const uint16_t APP_IMMUTABLE_NODES_2_B9H3VKVI_JS_L = 66;
const uint8_t APP_IMMUTABLE_NODES_2_B9H3VKVI_JS[] PROGMEM = {
// app/immutable/nodes/2.CrOlYW46.js
const uint16_t APP_IMMUTABLE_NODES_2_CROLYW46_JS_L = 66;
const uint8_t APP_IMMUTABLE_NODES_2_CROLYW46_JS[] PROGMEM = {
0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x7b, 0x67, 0x20, 0x61, 0x73, 0x20, 0x6d, 0x7d, 0x66, 0x72,
0x6f, 0x6d, 0x22, 0x2e, 0x2e, 0x2f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x2f, 0x44, 0x66, 0x4b,
0x4d, 0x70, 0x4e, 0x4d, 0x33, 0x2e, 0x6a, 0x73, 0x22, 0x3b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74,
0x6f, 0x6d, 0x22, 0x2e, 0x2e, 0x2f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x2f, 0x64, 0x62, 0x71,
0x30, 0x56, 0x39, 0x66, 0x6b, 0x2e, 0x6a, 0x73, 0x22, 0x3b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74,
0x7b, 0x6d, 0x20, 0x61, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x7d,
0x3b, 0x0a
};
inline void serveAppImmutableNodes_2B9h3vkViJs(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_NODES_2_B9H3VKVI_JS, APP_IMMUTABLE_NODES_2_B9H3VKVI_JS_L);
inline void serveAppImmutableNodes_2CrOlYw46Js(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_NODES_2_CROLYW46_JS, APP_IMMUTABLE_NODES_2_CROLYW46_JS_L);
request->send(response);
}
// app/immutable/nodes/3.DNSqvfMd.js
const uint16_t APP_IMMUTABLE_NODES_3_DNSQVFMD_JS_L = 66;
const uint8_t APP_IMMUTABLE_NODES_3_DNSQVFMD_JS[] PROGMEM = {
// app/immutable/nodes/3.D9ZvY3DH.js
const uint16_t APP_IMMUTABLE_NODES_3_D9ZVY3DH_JS_L = 66;
const uint8_t APP_IMMUTABLE_NODES_3_D9ZVY3DH_JS[] PROGMEM = {
0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x7b, 0x69, 0x20, 0x61, 0x73, 0x20, 0x6d, 0x7d, 0x66, 0x72,
0x6f, 0x6d, 0x22, 0x2e, 0x2e, 0x2f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x2f, 0x44, 0x66, 0x4b,
0x4d, 0x70, 0x4e, 0x4d, 0x33, 0x2e, 0x6a, 0x73, 0x22, 0x3b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74,
0x6f, 0x6d, 0x22, 0x2e, 0x2e, 0x2f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x2f, 0x64, 0x62, 0x71,
0x30, 0x56, 0x39, 0x66, 0x6b, 0x2e, 0x6a, 0x73, 0x22, 0x3b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74,
0x7b, 0x6d, 0x20, 0x61, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x7d,
0x3b, 0x0a
};
inline void serveAppImmutableNodes_3DnSqvfMdJs(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_NODES_3_DNSQVFMD_JS, APP_IMMUTABLE_NODES_3_DNSQVFMD_JS_L);
inline void serveAppImmutableNodes_3D9ZvY3DhJs(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_NODES_3_D9ZVY3DH_JS, APP_IMMUTABLE_NODES_3_D9ZVY3DH_JS_L);
request->send(response);
}
// app/immutable/nodes/4.Ci0Xog3L.js
const uint16_t APP_IMMUTABLE_NODES_4_CI0XOG3L_JS_L = 66;
const uint8_t APP_IMMUTABLE_NODES_4_CI0XOG3L_JS[] PROGMEM = {
// app/immutable/nodes/4.BfQN1sC7.js
const uint16_t APP_IMMUTABLE_NODES_4_BFQN1SC7_JS_L = 66;
const uint8_t APP_IMMUTABLE_NODES_4_BFQN1SC7_JS[] PROGMEM = {
0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x7b, 0x6a, 0x20, 0x61, 0x73, 0x20, 0x6d, 0x7d, 0x66, 0x72,
0x6f, 0x6d, 0x22, 0x2e, 0x2e, 0x2f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x2f, 0x44, 0x66, 0x4b,
0x4d, 0x70, 0x4e, 0x4d, 0x33, 0x2e, 0x6a, 0x73, 0x22, 0x3b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74,
0x6f, 0x6d, 0x22, 0x2e, 0x2e, 0x2f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x2f, 0x64, 0x62, 0x71,
0x30, 0x56, 0x39, 0x66, 0x6b, 0x2e, 0x6a, 0x73, 0x22, 0x3b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74,
0x7b, 0x6d, 0x20, 0x61, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x7d,
0x3b, 0x0a
};
inline void serveAppImmutableNodes_4Ci0Xog3LJs(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_NODES_4_CI0XOG3L_JS, APP_IMMUTABLE_NODES_4_CI0XOG3L_JS_L);
inline void serveAppImmutableNodes_4BfQn1sC7Js(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_NODES_4_BFQN1SC7_JS, APP_IMMUTABLE_NODES_4_BFQN1SC7_JS_L);
request->send(response);
}
// app/immutable/nodes/5.Do1_zzRQ.js
const uint16_t APP_IMMUTABLE_NODES_5_DO1_ZZRQ_JS_L = 66;
const uint8_t APP_IMMUTABLE_NODES_5_DO1_ZZRQ_JS[] PROGMEM = {
// app/immutable/nodes/5.NjmwKyy4.js
const uint16_t APP_IMMUTABLE_NODES_5_NJMWKYY4_JS_L = 66;
const uint8_t APP_IMMUTABLE_NODES_5_NJMWKYY4_JS[] PROGMEM = {
0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x7b, 0x6b, 0x20, 0x61, 0x73, 0x20, 0x6d, 0x7d, 0x66, 0x72,
0x6f, 0x6d, 0x22, 0x2e, 0x2e, 0x2f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x2f, 0x44, 0x66, 0x4b,
0x4d, 0x70, 0x4e, 0x4d, 0x33, 0x2e, 0x6a, 0x73, 0x22, 0x3b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74,
0x6f, 0x6d, 0x22, 0x2e, 0x2e, 0x2f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x2f, 0x64, 0x62, 0x71,
0x30, 0x56, 0x39, 0x66, 0x6b, 0x2e, 0x6a, 0x73, 0x22, 0x3b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74,
0x7b, 0x6d, 0x20, 0x61, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x7d,
0x3b, 0x0a
};
inline void serveAppImmutableNodes_5Do1ZzRqJs(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_NODES_5_DO1_ZZRQ_JS, APP_IMMUTABLE_NODES_5_DO1_ZZRQ_JS_L);
inline void serveAppImmutableNodes_5NjmwKyy4Js(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_NODES_5_NJMWKYY4_JS, APP_IMMUTABLE_NODES_5_NJMWKYY4_JS_L);
request->send(response);
}
// app/immutable/nodes/6.D7KGf8V1.js
const uint16_t APP_IMMUTABLE_NODES_6_D7KGF8V1_JS_L = 66;
const uint8_t APP_IMMUTABLE_NODES_6_D7KGF8V1_JS[] PROGMEM = {
// app/immutable/nodes/6.DZMKhGkY.js
const uint16_t APP_IMMUTABLE_NODES_6_DZMKHGKY_JS_L = 66;
const uint8_t APP_IMMUTABLE_NODES_6_DZMKHGKY_JS[] PROGMEM = {
0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x7b, 0x6c, 0x20, 0x61, 0x73, 0x20, 0x6d, 0x7d, 0x66, 0x72,
0x6f, 0x6d, 0x22, 0x2e, 0x2e, 0x2f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x2f, 0x44, 0x66, 0x4b,
0x4d, 0x70, 0x4e, 0x4d, 0x33, 0x2e, 0x6a, 0x73, 0x22, 0x3b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74,
0x6f, 0x6d, 0x22, 0x2e, 0x2e, 0x2f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x2f, 0x64, 0x62, 0x71,
0x30, 0x56, 0x39, 0x66, 0x6b, 0x2e, 0x6a, 0x73, 0x22, 0x3b, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74,
0x7b, 0x6d, 0x20, 0x61, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x7d,
0x3b, 0x0a
};
inline void serveAppImmutableNodes_6D7KGf8V1Js(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_NODES_6_D7KGF8V1_JS, APP_IMMUTABLE_NODES_6_D7KGF8V1_JS_L);
inline void serveAppImmutableNodes_6DzmKhGkYJs(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", APP_IMMUTABLE_NODES_6_DZMKHGKY_JS, APP_IMMUTABLE_NODES_6_DZMKHGKY_JS_L);
request->send(response);
}

View File

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

View File

@ -3,12 +3,12 @@
*
* Compressed Size Summary:
* ui_app_immutable_assets_css: 8,873 bytes
* ui_html: 3,365 bytes
* ui_app_immutable_chunks_js: 44,328 bytes
* ui_app_immutable_entry_js: 224 bytes
* ui_html: 3,360 bytes
* ui_app_immutable_chunks_js: 44,306 bytes
* ui_app_immutable_entry_js: 222 bytes
* ui_app_immutable_nodes_js: 484 bytes
* ui_svg: 456 bytes
* Total: 57,730 bytes
* Total: 57,701 bytes
*/
#pragma once
@ -24,16 +24,16 @@
inline void setupRoutes(AsyncWebServer* server) {
server->on("/app/immutable/assets/index.DN2mWWgh.css", HTTP_GET, serveAppImmutableAssetsIndexDn2mWWghCss);
server->on("/app/immutable/assets/index.BfkQNPT2.css", HTTP_GET, serveAppImmutableAssetsIndexBfkQnpt2Css);
server->on("/app/immutable/chunks/DfKMpNM3.js", HTTP_GET, serveAppImmutableChunksDfKMpNm3Js);
server->on("/app/immutable/entry/app.f1xA8tYB.js", HTTP_GET, serveAppImmutableEntryAppF1xA8tYbJs);
server->on("/app/immutable/entry/start.DWUfuLlk.js", HTTP_GET, serveAppImmutableEntryStartDwUfuLlkJs);
server->on("/app/immutable/nodes/0.BpUMrsxe.js", HTTP_GET, serveAppImmutableNodes_0BpUMrsxeJs);
server->on("/app/immutable/nodes/1.FH0nAYsZ.js", HTTP_GET, serveAppImmutableNodes_1Fh0nAYsZJs);
server->on("/app/immutable/nodes/2.B9h3vkVi.js", HTTP_GET, serveAppImmutableNodes_2B9h3vkViJs);
server->on("/app/immutable/nodes/3.DNSqvfMd.js", HTTP_GET, serveAppImmutableNodes_3DnSqvfMdJs);
server->on("/app/immutable/nodes/4.Ci0Xog3L.js", HTTP_GET, serveAppImmutableNodes_4Ci0Xog3LJs);
server->on("/app/immutable/nodes/5.Do1_zzRQ.js", HTTP_GET, serveAppImmutableNodes_5Do1ZzRqJs);
server->on("/app/immutable/nodes/6.D7KGf8V1.js", HTTP_GET, serveAppImmutableNodes_6D7KGf8V1Js);
server->on("/app/immutable/chunks/dbq0V9fk.js", HTTP_GET, serveAppImmutableChunksDbq0V9fkJs);
server->on("/app/immutable/entry/app.oD47fpeL.js", HTTP_GET, serveAppImmutableEntryAppOD47fpeLJs);
server->on("/app/immutable/entry/start.6UzJ3mXZ.js", HTTP_GET, serveAppImmutableEntryStart_6UzJ3mXzJs);
server->on("/app/immutable/nodes/0.DaxsOZCT.js", HTTP_GET, serveAppImmutableNodes_0DaxsOzctJs);
server->on("/app/immutable/nodes/1.Dxwzkq2L.js", HTTP_GET, serveAppImmutableNodes_1Dxwzkq2LJs);
server->on("/app/immutable/nodes/2.CrOlYW46.js", HTTP_GET, serveAppImmutableNodes_2CrOlYw46Js);
server->on("/app/immutable/nodes/3.D9ZvY3DH.js", HTTP_GET, serveAppImmutableNodes_3D9ZvY3DhJs);
server->on("/app/immutable/nodes/4.BfQN1sC7.js", HTTP_GET, serveAppImmutableNodes_4BfQn1sC7Js);
server->on("/app/immutable/nodes/5.NjmwKyy4.js", HTTP_GET, serveAppImmutableNodes_5NjmwKyy4Js);
server->on("/app/immutable/nodes/6.DZMKhGkY.js", HTTP_GET, serveAppImmutableNodes_6DzmKhGkYJs);
server->on("/favicon.svg", HTTP_GET, serveFaviconSvg);
// HTML routes
server->on("/devices", HTTP_GET, serveDevicesHtml);

View File

@ -46,12 +46,10 @@
s = false;
}
}
const extrasData = $derived($extraSettings?.values as any);
</script>
<div class="bg-gray-100 dark:bg-gray-800 rounded-lg shadow p-6">
{#if $extrasData != null}
{#if $extraSettings?.values != null}
<form action="wifi/extras" method="post" id="extras" onsubmit={handleSubmit} class="space-y-6">
<h2>
<a href="https://espresense.com/configuration/settings#scanning" target="_blank">Scanning</a>

View File

@ -22,11 +22,11 @@ export default defineConfig({
},
server: {
proxy: {
'/json': 'http://192.168.129.178',
'/wifi': 'http://192.168.129.178',
'/restart': 'http://192.168.129.178',
'/json': 'http://192.168.129.145/',
'/wifi': 'http://192.168.129.145/',
'/restart': 'http://192.168.129.145/',
'/ws': {
target: 'ws://192.168.129.178',
target: 'ws://192.168.129.145/',
ws: true,
}
}