Browse Source

Merge pull request #7 from rejoe2/new_communication_mi

MI specific things and more
pull/1219/head
rejoe2 1 year ago
committed by GitHub
parent
commit
4f7585d374
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 29
      src/hm/CommQueue.h
  2. 141
      src/hm/Communication.h
  3. 16
      src/hm/hmInverter.h
  4. 6
      src/hm/hmPayload.h
  5. 5
      src/hm/radio.h
  6. 82
      src/web/html/h/about_html.h
  7. 216
      src/web/html/h/api_js.h
  8. 22
      src/web/html/h/colorBright_css.h
  9. 21
      src/web/html/h/colorDark_css.h
  10. 101
      src/web/html/h/favicon_ico.h
  11. 191
      src/web/html/h/index_html.h
  12. 47
      src/web/html/h/login_html.h
  13. 86
      src/web/html/h/save_html.h
  14. 113
      src/web/html/h/serial_html.h
  15. 545
      src/web/html/h/setup_html.h
  16. 188
      src/web/html/h/style_css.h
  17. 139
      src/web/html/h/system_html.h
  18. 74
      src/web/html/h/update_html.h
  19. 275
      src/web/html/h/visualization_html.h
  20. 100
      src/web/html/tmp/about.html
  21. 263
      src/web/html/tmp/index.html
  22. 43
      src/web/html/tmp/login.html
  23. 102
      src/web/html/tmp/save.html
  24. 132
      src/web/html/tmp/serial.html
  25. 1000
      src/web/html/tmp/setup.html
  26. 781
      src/web/html/tmp/style.css
  27. 188
      src/web/html/tmp/system.html
  28. 80
      src/web/html/tmp/update.html
  29. 479
      src/web/html/tmp/visualization.html

29
src/hm/CommQueue.h

@ -22,9 +22,17 @@ class CommQueue {
void add(Inverter<> *iv, uint8_t cmd, bool delOnPop = true) {
mQueue[mWrPtr] = queue_s(iv, cmd, delOnPop, false);
/*mQueue[mRdPtr].firstTry = false;
if((IV_HM == mQueue[mRdPtr].iv->ivGen) || (IV_MI == mQueue[mRdPtr].iv->ivGen)) {
mQueue[mRdPtr].firstTry = ((mQueue[mRdPtr].iv->isAvailable()) || (millis() < 120000));
}*/
inc(&mWrPtr);
}
void chgCmd(Inverter<> *iv, uint8_t cmd, bool delOnPop = true) {
mQueue[mWrPtr] = queue_s(iv, cmd, delOnPop, false);
}
protected:
struct queue_s {
Inverter<> *iv;
@ -33,6 +41,7 @@ class CommQueue {
uint32_t ts;
bool delOnPop;
bool isDevControl;
bool firstTry;
queue_s() {}
queue_s(Inverter<> *i, uint8_t c, bool d, bool dev) :
iv(i), cmd(c), attempts(5), ts(0), delOnPop(d), isDevControl(dev) {}
@ -41,6 +50,10 @@ class CommQueue {
protected:
void add(queue_s q) {
mQueue[mWrPtr] = q;
/*mQueue[mRdPtr].firstTry = false;
if((IV_HM == mQueue[mRdPtr].iv->ivGen) || (IV_MI == mQueue[mRdPtr].iv->ivGen)) {
mQueue[mRdPtr].firstTry = ((mQueue[mRdPtr].iv->isAvailable()) || (millis() < 120000));
}*/
inc(&mWrPtr);
}
@ -48,9 +61,18 @@ class CommQueue {
mQueue[mWrPtr] = *q;
if(rstAttempts)
mQueue[mWrPtr].attempts = 5;
/*mQueue[mRdPtr].firstTry = false;
if((IV_HM == mQueue[mRdPtr].iv->ivGen) || (IV_MI == mQueue[mRdPtr].iv->ivGen)) {
mQueue[mRdPtr].firstTry = ((mQueue[mRdPtr].iv->isAvailable()) || (millis() < 120000));
}*/
inc(&mWrPtr);
}
void chgCmd(uint8_t cmd) {
mQueue[mRdPtr].cmd = cmd;
mQueue[mRdPtr].isDevControl = false;
}
void get(std::function<void(bool valid, const queue_s *q)> cb) {
if(mRdPtr == mWrPtr) {
cb(false, &mQueue[mRdPtr]); // empty
@ -67,6 +89,13 @@ class CommQueue {
inc(&mRdPtr);
}
bool isFirstTry(void) {
if(!mQueue[mRdPtr].firstTry)
return false;
mQueue[mRdPtr].firstTry = false;
return true;
}
void setTs(uint32_t *ts) {
mQueue[mRdPtr].ts = *ts;
}

141
src/hm/Communication.h

@ -10,8 +10,10 @@
#include <Arduino.h>
#include "../utils/crc.h"
#define MI_TIMEOUT 500
#define MI_TIMEOUT 250
#define DEFAULT_TIMEOUT 500
#define SINGLEFR_TIMEOUT 60
#define MAX_BUFFER 250 //was: 150 (hardcoded)
typedef std::function<void(uint8_t, Inverter<> *)> payloadListenerType;
typedef std::function<void(Inverter<> *)> alarmListenerType;
@ -133,7 +135,8 @@ class Communication : public CommQueue<> {
yield();
}
if(0 == q->attempts) {
cmdDone(q);
//cmdDone(q);
cmdDone(true);
mState = States::RESET;
} else
mState = nextState;
@ -160,11 +163,12 @@ class Communication : public CommQueue<> {
if(q->attempts) {
q->iv->radio->sendCmdPacket(q->iv, TX_REQ_INFO, (SINGLE_FRAME + i), true);
q->iv->radioStatistics.retransmits++;
mWaitTimeout = millis() + timeout;
mWaitTimeout = millis() + SINGLEFR_TIMEOUT; // timeout
mState = States::WAIT;
} else {
add(q, true);
cmdDone(q);
//cmdDone(q);
cmdDone(true);
mState = States::RESET;
}
return;
@ -184,11 +188,12 @@ class Communication : public CommQueue<> {
if(q->attempts) {
q->iv->radio->sendCmdPacket(q->iv, TX_REQ_INFO, (SINGLE_FRAME + i), true);
q->iv->radioStatistics.retransmits++;
mWaitTimeout = millis() + timeout;
mWaitTimeout = millis() + SINGLEFR_TIMEOUT; // timeout;
mState = States::WAIT;
} else {
add(q, true);
cmdDone(q);
//cmdDone(q);
cmdDone(true);
mState = States::RESET;
}
return;
@ -252,7 +257,7 @@ class Communication : public CommQueue<> {
|| (p->packet[0] == MI_REQ_CH2 + ALL_FRAMES)
|| ((p->packet[0] >= (MI_REQ_4CH + ALL_FRAMES))
&& (p->packet[0] < (0x39 + SINGLE_FRAME))
&& (q->cmd != 0x0f))) {
)) { //&& (p->packet[0] != (0x0f + ALL_FRAMES)))) {
// small MI or MI 1500 data responses to 0x09, 0x11, 0x36, 0x37, 0x38 and 0x39
//mPayload[iv->id].txId = p->packet[0];
miDataDecode(p, q);
@ -312,12 +317,12 @@ class Communication : public CommQueue<> {
DBGPRINT(F("procPyld: cmd: 0x"));
DBGHEXLN(q->cmd);*/
memset(mPayload, 0, 150);
memset(mPayload, 0, MAX_BUFFER);
int8_t rssi = -127;
uint8_t len = 0;
for(uint8_t i = 0; i < mMaxFrameId; i++) {
if(mLocalBuf[i].len + len > 150) {
if(mLocalBuf[i].len + len > MAX_BUFFER) {
DPRINTLN(DBG_ERROR, F("payload buffer to small!"));
return;
}
@ -376,6 +381,7 @@ class Communication : public CommQueue<> {
record_t<> *rec = q->iv->getRecordStruct(InverterDevInform_All); // choose the record structure
rec->ts = q->ts;
//mPayload[iv->id].gotFragment = true;
uint8_t multi_parts = 0;
/*
Polling the device software and hardware version number command
@ -410,6 +416,96 @@ class Communication : public CommQueue<> {
{ FLD_BOOTLOADER_VER, UNIT_NONE, CH0, 8, 2, 1 }
};
*/
if ( p->packet[9] == 0x00 ) {//first frame
//FLD_FW_VERSION
for (uint8_t i = 0; i < 5; i++) {
q->iv->setValue(i, rec, (float) ((p->packet[(12+2*i)] << 8) + p->packet[(13+2*i)])/1);
}
q->iv->isConnected = true;
//if(mSerialDebug) {
DPRINT_IVID(DBG_INFO, q->iv->id);
DPRINT(DBG_INFO,F("HW_VER is "));
DBGPRINTLN(String((p->packet[24] << 8) + p->packet[25]));
//}
record_t<> *rec = q->iv->getRecordStruct(InverterDevInform_Simple); // choose the record structure
rec->ts = q->ts;
q->iv->setValue(1, rec, (uint32_t) ((p->packet[24] << 8) + p->packet[25])/1);
//mPayload[iv->id].multi_parts +=4;
multi_parts +=4;
} else if ( p->packet[9] == 0x01 || p->packet[9] == 0x10 ) {//second frame for MI, 3rd gen. answers in 0x10
DPRINT_IVID(DBG_INFO, q->iv->id);
if ( p->packet[9] == 0x01 ) {
DBGPRINTLN(F("got 2nd frame (hw info)"));
/* according to xlsx (different start byte -1!)
byte[11] to byte[14] HW_PN
byte[15] byte[16] HW_FB_TLmValue
byte[17] byte[18] HW_FB_ReSPRT
byte[19] byte[20] HW_GridSamp_ResValule
byte[21] byte[22] HW_ECapValue
byte[23] to byte[26] Matching_APPFW_PN*/
DPRINT(DBG_INFO,F("HW_PartNo "));
DBGPRINTLN(String((uint32_t) (((p->packet[10] << 8) | p->packet[11]) << 8 | p->packet[12]) << 8 | p->packet[13]));
record_t<> *rec = q->iv->getRecordStruct(InverterDevInform_Simple); // choose the record structure
rec->ts = q->ts;
q->iv->setValue(0, rec, (uint32_t) ((((p->packet[10] << 8) | p->packet[11]) << 8 | p->packet[12]) << 8 | p->packet[13])/1);
//if(mSerialDebug) {
DPRINT(DBG_INFO,F("HW_FB_TLmValue "));
DBGPRINTLN(String((p->packet[14] << 8) + p->packet[15]));
DPRINT(DBG_INFO,F("HW_FB_ReSPRT "));
DBGPRINTLN(String((p->packet[16] << 8) + p->packet[17]));
DPRINT(DBG_INFO,F("HW_GridSamp_ResValule "));
DBGPRINTLN(String((p->packet[18] << 8) + p->packet[19]));
DPRINT(DBG_INFO,F("HW_ECapValue "));
DBGPRINTLN(String((p->packet[20] << 8) + p->packet[21]));
DPRINT(DBG_INFO,F("Matching_APPFW_PN "));
DBGPRINTLN(String((uint32_t) (((p->packet[22] << 8) | p->packet[23]) << 8 | p->packet[24]) << 8 | p->packet[25]));
//}
//notify(InverterDevInform_Simple, iv);
//mPayload[iv->id].multi_parts +=2;
multi_parts +=2;
//notify(InverterDevInform_All, iv);
} else {
DBGPRINTLN(F("3rd gen. inverter!"));
}
} else if ( p->packet[9] == 0x12 ) {//3rd frame
DPRINT_IVID(DBG_INFO, q->iv->id);
DBGPRINTLN(F("got 3rd frame (hw info)"));
/* according to xlsx (different start byte -1!)
byte[11] byte[12] APPFW_MINVER
byte[13] byte[14] HWInfoAddr
byte[15] byte[16] PNInfoCRC_gusv
byte[15] byte[16] PNInfoCRC_gusv (this really is double mentionned in xlsx...)
*/
//if(mSerialDebug) {
DPRINT(DBG_INFO,F("APPFW_MINVER "));
DBGPRINTLN(String((p->packet[10] << 8) + p->packet[11]));
DPRINT(DBG_INFO,F("HWInfoAddr "));
DBGPRINTLN(String((p->packet[12] << 8) + p->packet[13]));
DPRINT(DBG_INFO,F("PNInfoCRC_gusv "));
DBGPRINTLN(String((p->packet[14] << 8) + p->packet[15]));
//}
//mPayload[iv->id].multi_parts++;
multi_parts++;
}
if(multi_parts > 5) {
cmdDone(true);
mState = States::RESET;
q->iv->radioStatistics.rxSuccess++;
}
/*if (mPayload[iv->id].multi_parts > 5) {
iv->setQueuedCmdFinished();
mPayload[iv->id].complete = true;
mPayload[iv->id].rxTmo = true;
mPayload[iv->id].requested= false;
iv->radioStatistics.rxSuccess++;
}
if (mHighPrioIv == NULL)
mHighPrioIv = iv;
*/
}
inline void miDataDecode(packet_t *p, const queue_s *q) {
@ -450,10 +546,10 @@ class Communication : public CommQueue<> {
FCNT = (uint8_t)(p->packet[26]);
FCODE = (uint8_t)(p->packet[27]);
}*/
miStsConsolidate(q, datachan, rec, p->packet[23], p->packet[24]);
miStsConsolidate(q, datachan, rec, p->packet[23], p->packet[24]);
if (p->packet[0] < (0x39 + ALL_FRAMES) ) {
addImportant(q->iv, (q->cmd + 1));
//addImportant(q->iv, (q->cmd + 1));
//mPayload[iv->id].txCmd++;
//mPayload[iv->id].retransmits = 0; // reserve retransmissions for each response
//mPayload[iv->id].complete = false;
@ -462,12 +558,11 @@ class Communication : public CommQueue<> {
miComplete(q->iv);
}
} else if((p->packet[0] == (MI_REQ_CH1 + ALL_FRAMES)) && (q->iv->type == INV_TYPE_2CH)) {
addImportant(q->iv, MI_REQ_CH2);
//addImportant(q->iv, MI_REQ_CH2);
miNextRequest(MI_REQ_CH2, q);
} else { // first data msg for 1ch, 2nd for 2ch
miComplete(q->iv);
}
//cmdDone(q);
}
inline void miNextRequest(uint8_t cmd, const queue_s *q) {
@ -482,10 +577,12 @@ class Communication : public CommQueue<> {
q->iv->radio->sendCmdPacket(q->iv, cmd, 0x00, true);
q->iv->radioStatistics.retransmits++;
mWaitTimeout = millis() + MI_TIMEOUT;
//chgCmd(Inverter<> *iv, uint8_t cmd, bool delOnPop = true)
chgCmd(cmd);
mState = States::WAIT;
} else {
add(q, true);
cmdDone(q);
cmdDone();
mState = States::RESET;
}
}
@ -514,17 +611,23 @@ class Communication : public CommQueue<> {
bool stsok = true;
if ( prntsts != rec->record[q->iv->getPosByChFld(0, FLD_EVT, rec)] ) { //sth.'s changed?
q->iv->alarmCnt = 1; // minimum...
stsok = false;
//sth is or was wrong?
if ( (q->iv->type != INV_TYPE_1CH) && ( (statusMi != 3)
|| ((q->iv->lastAlarm[stschan].code) && (statusMi == 3) && (q->iv->lastAlarm[stschan].code != 1)))
) {
q->iv->lastAlarm[stschan+q->iv->type==INV_TYPE_2CH ? 2: 4] = alarm_t(q->iv->lastAlarm[stschan].code, q->iv->lastAlarm[stschan].start,q->ts);
q->iv->lastAlarm[stschan] = alarm_t(prntsts, q->ts,0);
q->iv->alarmCnt = q->iv->type == INV_TYPE_2CH ? 3 : 5;
}
} else if ( (q->iv->type == INV_TYPE_1CH) && ( (statusMi != 3)
|| ((q->iv->lastAlarm[stschan].code) && (statusMi == 3) && (q->iv->lastAlarm[stschan].code != 1)))
) {
q->iv->lastAlarm[stschan] = alarm_t(q->iv->lastAlarm[0].code, q->iv->lastAlarm[0].start,q->ts);
} else if (q->iv->type == INV_TYPE_1CH)
stsok = true;
q->iv->alarmLastId = prntsts; //iv->alarmMesIndex;
stsok = false;
if (q->iv->alarmCnt > 1) { //more than one channel
for (uint8_t ch = 0; ch < (q->iv->alarmCnt); ++ch) { //start with 1
if (q->iv->lastAlarm[ch].code == 1) {
@ -586,7 +689,9 @@ class Communication : public CommQueue<> {
iv->doCalculations();
// update status state-machine,
iv->isProducing();
if (ac_pow)
iv->isProducing();
cmdDone(true);
}
private:
@ -606,7 +711,7 @@ class Communication : public CommQueue<> {
uint32_t mWaitTimeout = 0;
std::array<frame_t, MAX_PAYLOAD_ENTRIES> mLocalBuf;
uint8_t mMaxFrameId;
uint8_t mPayload[150];
uint8_t mPayload[MAX_BUFFER];
payloadListenerType mCbPayload = NULL;
alarmListenerType mCbAlarm = NULL;
};

16
src/hm/hmInverter.h

@ -182,11 +182,12 @@ class Inverter {
}
void tickSend(std::function<void(uint8_t cmd, bool isDevControl)> cb) {
if (IV_MI != ivGen) {
if(mDevControlRequest) {
cb(devControlCmd, true);
mDevControlRequest = false;
} else if((alarmLastId != alarmMesIndex) && (alarmMesIndex != 0))
if(mDevControlRequest) {
cb(devControlCmd, true);
mDevControlRequest = false;
}
else if (IV_MI != ivGen) {
if((alarmLastId != alarmMesIndex) && (alarmMesIndex != 0))
cb(AlarmData, false); // get last alarms
else if(0 == getFwVersion())
cb(InverterDevInform_All, false); // get firmware version
@ -197,10 +198,7 @@ class Inverter {
else
cb(RealTimeRunData_Debug, false); // get live data
} else {
if(mDevControlRequest) {
cb(devControlCmd, true);
mDevControlRequest = false;
} else if(0 == getFwVersion())
if(0 == getFwVersion())
cb(0x0f, false); // get firmware version; for MI, this makes part of polling the device software and hardware version number
else {
record_t<> *rec = getRecordStruct(InverterDevInform_Simple);

6
src/hm/hmPayload.h

@ -330,15 +330,15 @@ class HmPayload {
mPayload[iv->id].requested = false;
mPayload[iv->id].rxTmo = false;
uint8_t payload[150];
uint8_t payload[MAX_BUFFER];
uint8_t payloadLen = 0;
memset(payload, 0, 150);
memset(payload, 0, MAX_BUFFER);
int8_t rssi = -127;
for (uint8_t i = 0; i < (mPayload[iv->id].maxPackId); i++) {
if((mPayload[iv->id].len[i] + payloadLen) > 150) {
if((mPayload[iv->id].len[i] + payloadLen) > MAX_BUFFER) {
DPRINTLN(DBG_ERROR, F("payload buffer to small!"));
break;
}

5
src/hm/radio.h

@ -44,9 +44,8 @@ class Radio {
void prepareDevInformCmd(Inverter<> *iv, uint8_t cmd, uint32_t ts, uint16_t alarmMesId, bool isRetransmit, uint8_t reqfld=TX_REQ_INFO) { // might not be necessary to add additional arg.
if(IV_MI == getIvGen(iv)) {
DPRINT_IVID(DBG_INFO, getIvId(iv));
DBGPRINT(F("legacy cmd 0x"));
DBGHEXLN(cmd);
DPRINT(DBG_DEBUG, F("legacy cmd 0x"));
DPRINTLN(DBG_DEBUG,String(cmd, HEX));
sendCmdPacket(iv, cmd, cmd, false, false);
return;
}

82
src/web/html/h/about_html.h

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

216
src/web/html/h/api_js.h

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

22
src/web/html/h/colorBright_css.h

@ -0,0 +1,22 @@
#ifndef __COLORBRIGHT_CSS_H__
#define __COLORBRIGHT_CSS_H__
#define colorBright_css_len 261
const uint8_t colorBright_css[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x81, 0xb3, 0x2f, 0x65, 0x02, 0xff, 0x55, 0x90, 0xdd, 0x6e, 0xc3, 0x20,
0x0c, 0x85, 0x5f, 0x65, 0x52, 0xae, 0x91, 0xbc, 0xfc, 0x42, 0xf6, 0x34, 0x60, 0x9c, 0x06, 0x29,
0x85, 0x8a, 0xd0, 0x54, 0xd3, 0xb4, 0x77, 0x1f, 0xa6, 0x4d, 0x96, 0x8a, 0x1b, 0xfc, 0xf9, 0x70,
0xec, 0xc3, 0x18, 0x43, 0x48, 0x1f, 0x3f, 0x42, 0x98, 0xcb, 0x58, 0x4d, 0xd3, 0xf4, 0x25, 0xc4,
0x94, 0x6f, 0x00, 0x50, 0x6e, 0xf5, 0x0e, 0x9d, 0x9f, 0x42, 0xc1, 0x60, 0x6d, 0x2e, 0x1f, 0x3a,
0x7a, 0x6e, 0x0d, 0x43, 0x11, 0xae, 0x77, 0x44, 0x5a, 0x57, 0x16, 0x28, 0x55, 0x88, 0xf3, 0xb7,
0x7b, 0x2a, 0xa6, 0x44, 0x94, 0xeb, 0xa4, 0xcd, 0x42, 0xc2, 0x84, 0x68, 0x29, 0x8e, 0x15, 0x22,
0x66, 0xe6, 0xf5, 0x56, 0x14, 0x4d, 0xd3, 0xe4, 0xea, 0x16, 0xdd, 0x55, 0xc7, 0x6f, 0xf6, 0xe8,
0x09, 0xe1, 0x9f, 0x88, 0x39, 0x6c, 0xfc, 0x08, 0xda, 0x96, 0x64, 0xcf, 0xd3, 0x08, 0x83, 0xb7,
0x2f, 0xed, 0x50, 0xa3, 0x7c, 0x79, 0x69, 0x4c, 0x6e, 0xa3, 0xb1, 0xea, 0xba, 0x8e, 0x97, 0xcf,
0xc1, 0x28, 0x96, 0x01, 0xb5, 0xe4, 0x93, 0xd9, 0x35, 0x58, 0xbd, 0x9c, 0xa2, 0x3a, 0xbf, 0xe9,
0xc5, 0xd9, 0x27, 0x51, 0x8a, 0xf7, 0x0c, 0x29, 0x2b, 0x66, 0xd2, 0x56, 0x24, 0x97, 0x96, 0xec,
0x26, 0xa9, 0x53, 0xd0, 0x1c, 0x2d, 0x96, 0x9a, 0xbc, 0x21, 0xb4, 0xfc, 0x7e, 0x7b, 0x93, 0x7e,
0x62, 0x2f, 0x9f, 0xe9, 0x5f, 0xbc, 0xa4, 0xab, 0x0d, 0xec, 0x62, 0xeb, 0xd6, 0xc3, 0x56, 0xca,
0x83, 0x8d, 0x95, 0x2a, 0xc3, 0x71, 0x7e, 0xb3, 0x03, 0x68, 0x50, 0xc2, 0x89, 0x9b, 0xcb, 0xe9,
0x77, 0xd2, 0x5a, 0xe0, 0xfe, 0x7d, 0xb9, 0xe4, 0x36, 0x67, 0xff, 0xfd, 0x03, 0x3b, 0xc9, 0xfb,
0x95, 0xd5, 0x01, 0x00, 0x00};
#endif /*__COLORBRIGHT_CSS_H__*/

21
src/web/html/h/colorDark_css.h

@ -0,0 +1,21 @@
#ifndef __COLORDARK_CSS_H__
#define __COLORDARK_CSS_H__
#define colorDark_css_len 255
const uint8_t colorDark_css[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x81, 0xb3, 0x2f, 0x65, 0x02, 0xff, 0x5d, 0x90, 0xd9, 0x6e, 0xc3, 0x20,
0x10, 0x45, 0x7f, 0xa5, 0x92, 0x9f, 0x91, 0x58, 0x6c, 0xc7, 0x72, 0xbf, 0x66, 0xd8, 0x6a, 0x24,
0x07, 0x22, 0x20, 0x44, 0x55, 0xd5, 0x7f, 0x2f, 0x0c, 0x76, 0xd2, 0x56, 0xbc, 0xcc, 0x9c, 0xb9,
0xdc, 0x59, 0xd6, 0x18, 0x42, 0x7e, 0xfb, 0x22, 0x44, 0x7e, 0xac, 0x03, 0xe7, 0xfc, 0x9d, 0x10,
0x5b, 0x23, 0xa5, 0x14, 0x46, 0x7c, 0x1d, 0xac, 0xb5, 0x35, 0x74, 0xde, 0x86, 0x75, 0xa0, 0xf4,
0xc2, 0xd5, 0x52, 0xd3, 0x07, 0x44, 0xdf, 0x4a, 0x00, 0x94, 0xd6, 0x34, 0xdd, 0x95, 0x32, 0x29,
0x35, 0x81, 0x94, 0x48, 0x9c, 0xbf, 0xdd, 0x33, 0x9a, 0x0a, 0x21, 0x6a, 0x9e, 0x41, 0xee, 0x86,
0xc8, 0x10, 0xb5, 0x89, 0x27, 0xf3, 0x50, 0x7e, 0x29, 0x6e, 0xd1, 0x5d, 0x21, 0x7e, 0x36, 0x8f,
0x51, 0x2f, 0x97, 0x17, 0x21, 0x5b, 0x28, 0xed, 0x13, 0xe5, 0x82, 0x4d, 0x53, 0xeb, 0x66, 0x54,
0xf0, 0xfa, 0xd0, 0x1e, 0x03, 0x35, 0x2f, 0x50, 0xd9, 0x15, 0xb3, 0x0e, 0x13, 0xaa, 0x6c, 0x5d,
0xcc, 0xc4, 0xbe, 0xd7, 0xd2, 0x5e, 0x65, 0xd7, 0xa0, 0x61, 0x47, 0x34, 0xcf, 0x33, 0x4e, 0x59,
0x60, 0x77, 0x1a, 0xc9, 0x88, 0x73, 0xe7, 0x90, 0xab, 0x62, 0x33, 0xa0, 0x49, 0x76, 0x79, 0xef,
0x6e, 0x13, 0x63, 0xcf, 0xd2, 0xf1, 0x79, 0xc6, 0x53, 0xb9, 0xf2, 0x47, 0xca, 0xd8, 0x21, 0x3d,
0x79, 0x3f, 0xea, 0x4b, 0xac, 0x5d, 0x3a, 0xb5, 0x7d, 0xe9, 0xce, 0x6a, 0xf3, 0x71, 0xac, 0x99,
0xda, 0xfe, 0xd9, 0x71, 0x8e, 0xab, 0x9c, 0xbc, 0xdb, 0x09, 0x81, 0xb3, 0xe7, 0x84, 0xf0, 0x79,
0xe0, 0x84, 0xe5, 0xb6, 0xfb, 0xf7, 0x0f, 0xe9, 0x86, 0x9e, 0xcf, 0xd5, 0x01, 0x00, 0x00};
#endif /*__COLORDARK_CSS_H__*/

101
src/web/html/h/favicon_ico.h

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

191
src/web/html/h/index_html.h

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

47
src/web/html/h/login_html.h

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

86
src/web/html/h/save_html.h

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

113
src/web/html/h/serial_html.h

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

545
src/web/html/h/setup_html.h

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

188
src/web/html/h/style_css.h

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

139
src/web/html/h/system_html.h

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

74
src/web/html/h/update_html.h

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

275
src/web/html/h/visualization_html.h

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

100
src/web/html/tmp/about.html

@ -0,0 +1,100 @@
<!doctype html>
<html>
<head>
<title>About</title>
<link rel="stylesheet" type="text/css" href="style.css?v=0.8.0001"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<script type="text/javascript" src="api.js?v=0.8.0001"></script>
<link rel="stylesheet" type="text/css" href="colors.css?v=0.8.0001"/>
<meta name="robots" content="noindex, nofollow" />
</head>
<body>
<div class="topnav">
<a href="/?v=0.8.0001" class="title">AhoyDTU</a>
<a href="javascript:void(0);" class="icon" onclick="topnav()">
<span></span>
<span></span>
<span></span>
</a>
<div id="topnav" class="mobile">
<a id="nav3" class="hide" href="/live?v=0.8.0001">Live</a>
<a id="nav4" class="hide" href="/serial?v=0.8.0001">Webserial</a>
<a id="nav5" class="hide" href="/setup?v=0.8.0001">Settings</a>
<span class="seperator"></span>
<a id="nav6" class="hide" href="/update?v=0.8.0001">Update</a>
<a id="nav7" class="hide" href="/system?v=0.8.0001">System</a>
<span class="seperator"></span>
<a id="nav8" href="/api" target="_blank">REST API</a>
<a id="nav9" href="https://ahoydtu.de" target="_blank">Documentation</a>
<a id="nav10" href="/about?v=0.8.0001">About</a>
<span class="seperator"></span>
<a id="nav0" class="hide" href="/login">Login</a>
<a id="nav1" class="hide" href="/logout">Logout</a>
</div>
<div id="wifiicon" class="info"></div>
</div>
<div id="wrapper">
<div id="content">
<div class="my-3"><h2>About AhoyDTU</h2></div>
<div class="my-3">
<div class="row my-3 head">
<div class="p-2">Used Libraries</div>
</div>
<div class="row"><a href="https://github.com/bertmelis/espMqttClient" target="_blank">bertmelis/espMqttClient</a></div>
<div class="row"><a href="https://github.com/yubox-node-org/ESPAsyncWebServer" target="_blank">yubox-node-org/ESPAsyncWebServer</a></div>
<div class="row"><a href="https://github.com/bblanchon/ArduinoJson" target="_blank">bblanchon/ArduinoJson</a></div>
<div class="row"><a href="https://github.com/nrf24/RF24" target="_blank">nrf24/RF24</a></div>
<div class="row"><a href="https://github.com/paulstoffregen/Time" target="_blank">paulstoffregen/Time</a></div>
<div class="row"><a href="https://github.com/olikraus/U8g2" target="_blank">olikraus/U8g2</a></div>
<div class="row"><a href="https://github.com/zinggjm/GxEPD2" target="_blank">zinggjm/GxEPD2</a></div>
<div class="row my-3 head">
<div class="p-2">Contact Information</div>
</div>
<div class="row">
<div class="col-5 col-sm-3">Github Repository</div>
<div class="col-7 col-sm-9"><a href="https://github.com/lumapu/ahoy">https://github.com/lumapu/ahoy</a></div>
</div>
<div class="row">
<div class="col-5 col-sm-3">Discord Chat</div>
<div class="col-7 col-sm-9"><a href="https://discord.gg/WzhxEY62mB" target="_blank">Discord</a></div>
</div>
<div class="row">
<div class="col-5 col-sm-3">E-Mail</div>
<div class="col-7 col-sm-9"><a href="mailto:contact@ahoydtu.de">contact@ahoydtu.de</a></div>
</div>
</div>
</div>
</div>
<div id="footer">
<div class="left">
<a href="https://ahoydtu.de" target="_blank">AhoyDTU &copy 2023</a>
<ul>
<li><a href="https://discord.gg/WzhxEY62mB" target="_blank">Discord</a></li>
<li><a href="https://github.com/lumapu/ahoy" target="_blank">Github</a></li>
</ul>
</div>
<div class="right">
<ul>
<li><a target="_blank" href="https://github.com/lumapu/ahoy/commits/bf77275">GIT SHA: bf77275 :: 0.8.0001</a></li>
<li id="esp_type"></li>
<li><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed" target="_blank" >CC BY-NC-SA 4.0</a></li>
</ul>
</div>
</div>
<script type="text/javascript">
function parseGeneric(obj) {
parseNav(obj);
parseESP(obj);
parseRssi(obj);
}
function parse(obj) {
if(null != obj) {
parseGeneric(obj["generic"]);
}
}
getAjax("/api/html/save", parse);
</script>
</body>
</html>

263
src/web/html/tmp/index.html

@ -0,0 +1,263 @@
<!doctype html>
<html>
<head>
<title>Index</title>
<link rel="stylesheet" type="text/css" href="style.css?v=0.8.0001"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<script type="text/javascript" src="api.js?v=0.8.0001"></script>
<link rel="stylesheet" type="text/css" href="colors.css?v=0.8.0001"/>
<meta name="robots" content="noindex, nofollow" />
</head>
<body>
<div class="topnav">
<a href="/?v=0.8.0001" class="title">AhoyDTU</a>
<a href="javascript:void(0);" class="icon" onclick="topnav()">
<span></span>
<span></span>
<span></span>
</a>
<div id="topnav" class="mobile">
<a id="nav3" class="hide" href="/live?v=0.8.0001">Live</a>
<a id="nav4" class="hide" href="/serial?v=0.8.0001">Webserial</a>
<a id="nav5" class="hide" href="/setup?v=0.8.0001">Settings</a>
<span class="seperator"></span>
<a id="nav6" class="hide" href="/update?v=0.8.0001">Update</a>
<a id="nav7" class="hide" href="/system?v=0.8.0001">System</a>
<span class="seperator"></span>
<a id="nav8" href="/api" target="_blank">REST API</a>
<a id="nav9" href="https://ahoydtu.de" target="_blank">Documentation</a>
<a id="nav10" href="/about?v=0.8.0001">About</a>
<span class="seperator"></span>
<a id="nav0" class="hide" href="/login">Login</a>
<a id="nav1" class="hide" href="/logout">Logout</a>
</div>
<div id="wifiicon" class="info"></div>
</div>
<div id="wrapper">
<div id="content">
<p>
<span class="des">Uptime: </span><span id="uptime"></span><br/>
<span class="des">ESP-Time: </span><span id="date"></span>
</p>
<p>
<span class="des">System Infos:</span>
<div id="iv"></div>
<div class="hr"></div>
<div id="warn_info"></div>
</p>
<div id="note">
<h3>Support this project:</h3>
<ul>
<li><a href="https://github.com/lumapu/ahoy/blob/main/src/CHANGES.md" target="_blank">Changelog</a></li>
<li>Discuss with us on <a href="https://discord.gg/WzhxEY62mB">Discord</a></li>
<li>Report <a href="https://github.com/lumapu/ahoy/issues" target="_blank">issues</a></li>
<li>Contribute to <a href="https://github.com/lumapu/ahoy/blob/main/User_Manual.md" target="_blank">documentation</a></li>
<li><a href="https://nightly.link/lumapu/ahoy/workflows/compile_development/development03/ahoydtu_dev.zip" target="_blank">Download</a> & Test development firmware, <a href="https://github.com/lumapu/ahoy/blob/development03/src/CHANGES.md" target="_blank">Development Changelog</a></li>
<li>make a <a href="https://paypal.me/lupusch" target="_blank">donation</a></li>
</ul>
<p class="lic">
This project was started from <a href="https://www.mikrocontroller.net/topic/525778" target="_blank">this discussion. (Mikrocontroller.net)</a>
</p>
</div>
</div>
</div>
<div id="footer">
<div class="left">
<a href="https://ahoydtu.de" target="_blank">AhoyDTU &copy 2023</a>
<ul>
<li><a href="https://discord.gg/WzhxEY62mB" target="_blank">Discord</a></li>
<li><a href="https://github.com/lumapu/ahoy" target="_blank">Github</a></li>
</ul>
</div>
<div class="right">
<ul>
<li><a target="_blank" href="https://github.com/lumapu/ahoy/commits/bf77275">GIT SHA: bf77275 :: 0.8.0001</a></li>
<li id="esp_type"></li>
<li><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed" target="_blank" >CC BY-NC-SA 4.0</a></li>
</ul>
</div>
</div>
<script type="text/javascript">
var exeOnce = true;
var tickCnt = 0;
var ts = 0;
var commInfo = "";
var release = null;
function apiCb(obj) {
var e = document.getElementById("apiResult");
if(obj["success"]) {
e.innerHTML = " command executed";
getAjax("/api/index", parse);
}
else
e.innerHTML = " Error: " + obj["error"];
}
function setTime() {
var date = new Date();
var obj = new Object();
obj.cmd = "set_time";
obj.val = parseInt(date.getTime() / 1000);
getAjax("/api/setup", apiCb, "POST", JSON.stringify(obj));
}
function parseGeneric(obj) {
if(exeOnce)
parseESP(obj);
parseRssi(obj);
}
function parseSys(obj) {
ts = obj["ts_now"];
var date = new Date(obj["ts_now"] * 1000);
var up = obj["generic"]["ts_uptime"];
var days = parseInt(up / 86400) % 365;
var hrs = parseInt(up / 3600) % 24;
var min = parseInt(up / 60) % 60;
var sec = up % 60;
var e = document.getElementById("uptime");
e.innerHTML = days + " Day";
if(1 != days)
e.innerHTML += "s";
e.innerHTML += ", " + ("0"+hrs).substr(-2) + ":"
+ ("0"+min).substr(-2) + ":"
+ ("0"+sec).substr(-2);
var dSpan = document.getElementById("date");
if(0 != obj["ts_now"]) {
if(obj["ts_now"] < 1680000000)
setTime();
else
dSpan.innerHTML = toIsoDateStr(date);
}
else {
dSpan.innerHTML = "";
var e = inp("set", "sync from browser", 0, ["btn"], "set", "button");
dSpan.appendChild(span("NTP timeserver unreachable. "));
dSpan.appendChild(e);
dSpan.appendChild(span("", ["span"], "apiResult"));
e.addEventListener("click", setTime);
}
if(obj["disNightComm"]) {
if(((obj["ts_sunrise"] - obj["ts_offset"]) < obj["ts_now"])
&& ((obj["ts_sunset"] + obj["ts_offset"]) > obj["ts_now"])) {
commInfo = "Polling inverter(s), will pause at sunset " + (new Date((obj["ts_sunset"] + obj["ts_offset"]) * 1000).toLocaleString('de-DE'));
}
else {
commInfo = "Night time, inverter polling disabled, ";
if(obj["ts_now"] > (obj["ts_sunrise"] - obj["ts_offset"])) {
commInfo += "paused at " + (new Date((obj["ts_sunset"] + obj["ts_offset"]) * 1000).toLocaleString('de-DE'));
}
else {
commInfo += "will start polling at " + (new Date((obj["ts_sunrise"] - obj["ts_offset"]) * 1000).toLocaleString('de-DE'));
}
}
}
}
function parseIv(obj, ts) {
var p = div(["none"]);
for(var i of obj) {
var icon = iconSuccess;
var cl = "icon-success";
var avail = "";
if(false == i["enabled"]) {
icon = iconWarn;
cl = "icon-warn";
avail = "disabled";
} else if((false == i["is_avail"]) || (0 == ts)) {
icon = iconInfo;
cl = "icon-info";
avail = "not yet available";
} else if(0 == i["ts_last_success"]) {
avail = "available but no data was received until now";
} else {
avail = "available and is ";
if(false == i["is_producing"])
avail += "not producing";
else {
icon = iconSuccessFull;
avail += "producing " + i.cur_pwr + "W";
}
}
p.append(
svg(icon, 30, 30, "icon " + cl),
span("Inverter #" + i["id"] + ": " + i["name"] + " is " + avail),
br()
);
if(false == i["is_avail"]) {
if(i["ts_last_success"] > 0) {
var date = new Date(i["ts_last_success"] * 1000);
p.append(span("-> last successful transmission: " + toIsoDateStr(date)), br());
}
}
}
document.getElementById("iv").replaceChildren(p);
}
function parseWarn(warn) {
var p = div(["none"]);
for(var w of warn) {
p.append(svg(iconWarn, 30, 30, "icon icon-warn"), span(w), br());
}
if(commInfo.length > 0)
p.append(svg(iconInfo, 30, 30, "icon icon-info"), span(commInfo), br());
if(null != release) {
if(getVerInt("0.8.0001") < getVerInt(release))
p.append(svg(iconInfo, 30, 30, "icon icon-info"), span("Update available, current released version: " + release), br());
else if(getVerInt("0.8.0001") > getVerInt(release))
p.append(svg(iconInfo, 30, 30, "icon icon-info"), span("You are using development version 0.8.0001. In case of issues you may want to try the current stable release: " + release), br());
else
p.append(svg(iconInfo, 30, 30, "icon icon-info"), span("You are using the current stable release: " + release), br());
}
document.getElementById("warn_info").replaceChildren(p);
}
function tick() {
if(0 != ts)
document.getElementById("date").innerHTML = toIsoDateStr((new Date((++ts) * 1000)));
if(++tickCnt >= 10) {
tickCnt = 0;
getAjax('/api/index', parse);
}
}
function parse(obj) {
if(null != obj) {
if(exeOnce)
parseNav(obj["generic"]);
parseGeneric(obj["generic"]);
parseSys(obj);
parseIv(obj["inverter"], obj.ts_now);
parseWarn(obj["warnings"]);
if(exeOnce) {
window.setInterval("tick()", 1000);
exeOnce = false;
getAjax("https://api.github.com/repos/lumapu/ahoy/releases/latest", parseRelease);
}
}
}
function getVerInt(ver) {
var a = ver.split('.');
return (a[0] << 24) | (a[1] << 16) | a[2];
}
function parseRelease(obj) {
release = obj["name"].substring(6);
getAjax("/api/index", parse);
}
getAjax("/api/index", parse);
</script>
</body>
</html>

43
src/web/html/tmp/login.html

@ -0,0 +1,43 @@
<!doctype html>
<html>
<head>
<title>Login</title>
<link rel="stylesheet" type="text/css" href="style.css?v=0.8.0001"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<script type="text/javascript" src="api.js?v=0.8.0001"></script>
<link rel="stylesheet" type="text/css" href="colors.css?v=0.8.0001"/>
<meta name="robots" content="noindex, nofollow" />
</head>
<body>
<div id="wrapper">
<div id="login">
<div class="p-4">
<form action="/login" method="post">
<div class="row"><h2>AhoyDTU</h2></div>
<div class="row">
<div class="col-12 col-sm-8 mb-3"><input type="password" name="pwd" autofocus></div>
<div class="col-12 col-sm-4"><input type="submit" name="login" value="login" class="btn"></div>
</div>
</form>
</div>
</div>
</div>
<div id="footer">
<div class="left">
<a href="https://ahoydtu.de" target="_blank">AhoyDTU &copy 2023</a>
<ul>
<li><a href="https://discord.gg/WzhxEY62mB" target="_blank">Discord</a></li>
<li><a href="https://github.com/lumapu/ahoy" target="_blank">Github</a></li>
</ul>
</div>
<div class="right">
<ul>
<li><a target="_blank" href="https://github.com/lumapu/ahoy/commits/bf77275">GIT SHA: bf77275 :: 0.8.0001</a></li>
<li id="esp_type"></li>
<li><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed" target="_blank" >CC BY-NC-SA 4.0</a></li>
</ul>
</div>
</div>
</body>
</html>

102
src/web/html/tmp/save.html

@ -0,0 +1,102 @@
<!doctype html>
<html>
<head>
<title>Save</title>
<link rel="stylesheet" type="text/css" href="style.css?v=0.8.0001"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<script type="text/javascript" src="api.js?v=0.8.0001"></script>
<link rel="stylesheet" type="text/css" href="colors.css?v=0.8.0001"/>
<meta name="robots" content="noindex, nofollow" />
</head>
<body>
<div class="topnav">
<a href="/?v=0.8.0001" class="title">AhoyDTU</a>
<a href="javascript:void(0);" class="icon" onclick="topnav()">
<span></span>
<span></span>
<span></span>
</a>
<div id="topnav" class="mobile">
<a id="nav3" class="hide" href="/live?v=0.8.0001">Live</a>
<a id="nav4" class="hide" href="/serial?v=0.8.0001">Webserial</a>
<a id="nav5" class="hide" href="/setup?v=0.8.0001">Settings</a>
<span class="seperator"></span>
<a id="nav6" class="hide" href="/update?v=0.8.0001">Update</a>
<a id="nav7" class="hide" href="/system?v=0.8.0001">System</a>
<span class="seperator"></span>
<a id="nav8" href="/api" target="_blank">REST API</a>
<a id="nav9" href="https://ahoydtu.de" target="_blank">Documentation</a>
<a id="nav10" href="/about?v=0.8.0001">About</a>
<span class="seperator"></span>
<a id="nav0" class="hide" href="/login">Login</a>
<a id="nav1" class="hide" href="/logout">Logout</a>
</div>
<div id="wifiicon" class="info"></div>
</div>
<div id="wrapper">
<div id="content">
<div id="html" class="mt-3 mb-3">Saving settings...</div>
</div>
</div>
<div id="footer">
<div class="left">
<a href="https://ahoydtu.de" target="_blank">AhoyDTU &copy 2023</a>
<ul>
<li><a href="https://discord.gg/WzhxEY62mB" target="_blank">Discord</a></li>
<li><a href="https://github.com/lumapu/ahoy" target="_blank">Github</a></li>
</ul>
</div>
<div class="right">
<ul>
<li><a target="_blank" href="https://github.com/lumapu/ahoy/commits/bf77275">GIT SHA: bf77275 :: 0.8.0001</a></li>
<li id="esp_type"></li>
<li><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed" target="_blank" >CC BY-NC-SA 4.0</a></li>
</ul>
</div>
</div>
<script type="text/javascript">
var intervalId = null;
function parseGeneric(obj) {
parseNav(obj);
parseESP(obj);
parseRssi(obj);
}
function parseHtml(obj) {
var html = "";
if(!obj.pending) {
if(intervalId != null) {
clearInterval(intervalId);
}
if(obj.success) {
var meta = document.createElement('meta');
meta.httpEquiv = "refresh"
if(!obj.reboot) {
html = "Settings successfully saved. Automatic page reload in 3 seconds.";
meta.content = 3;
} else {
html = "Settings successfully saved. Rebooting. Automatic redirect in 20 seconds.";
meta.content = 20 + "; URL=/";
}
document.getElementsByTagName('head')[0].appendChild(meta);
} else {
html = "Failed saving settings.";
}
}
document.getElementById("html").innerHTML = html;
}
function parse(obj) {
if(null != obj) {
parseGeneric(obj["generic"]);
parseHtml(obj);
}
}
intervalId = window.setInterval("getAjax('/api/html/save', parse)", 2500);
getAjax("/api/generic", parseGeneric);
</script>
</body>
</html>

132
src/web/html/tmp/serial.html

@ -0,0 +1,132 @@
<!doctype html>
<html lang="en">
<head>
<title>Serial Console</title>
<link rel="stylesheet" type="text/css" href="style.css?v=0.8.0001"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<script type="text/javascript" src="api.js?v=0.8.0001"></script>
<link rel="stylesheet" type="text/css" href="colors.css?v=0.8.0001"/>
<meta name="robots" content="noindex, nofollow" />
</head>
<body>
<div class="topnav">
<a href="/?v=0.8.0001" class="title">AhoyDTU</a>
<a href="javascript:void(0);" class="icon" onclick="topnav()">
<span></span>
<span></span>
<span></span>
</a>
<div id="topnav" class="mobile">
<a id="nav3" class="hide" href="/live?v=0.8.0001">Live</a>
<a id="nav4" class="hide" href="/serial?v=0.8.0001">Webserial</a>
<a id="nav5" class="hide" href="/setup?v=0.8.0001">Settings</a>
<span class="seperator"></span>
<a id="nav6" class="hide" href="/update?v=0.8.0001">Update</a>
<a id="nav7" class="hide" href="/system?v=0.8.0001">System</a>
<span class="seperator"></span>
<a id="nav8" href="/api" target="_blank">REST API</a>
<a id="nav9" href="https://ahoydtu.de" target="_blank">Documentation</a>
<a id="nav10" href="/about?v=0.8.0001">About</a>
<span class="seperator"></span>
<a id="nav0" class="hide" href="/login">Login</a>
<a id="nav1" class="hide" href="/logout">Logout</a>
</div>
<div id="wifiicon" class="info"></div>
</div>
<div id="wrapper">
<div id="content" style="max-width: 100% !important;">
<div class="row">
<textarea id="serial" class="mt-3" cols="80" rows="40" readonly></textarea>
</div>
<div class="row my-3">
<div class="col-3">console active: <span class="dot" id="active"></span></div>
<div class="col-3 col-sm-4 my-3">Uptime: <span id="uptime"></span></div>
<div class="col-6 col-sm-4 a-r">
<input type="button" value="clear" class="btn" id="clear"/>
<input type="button" value="autoscroll" class="btn" id="scroll"/>
</div>
</div>
</div>
</div>
<div id="footer">
<div class="left">
<a href="https://ahoydtu.de" target="_blank">AhoyDTU &copy 2023</a>
<ul>
<li><a href="https://discord.gg/WzhxEY62mB" target="_blank">Discord</a></li>
<li><a href="https://github.com/lumapu/ahoy" target="_blank">Github</a></li>
</ul>
</div>
<div class="right">
<ul>
<li><a target="_blank" href="https://github.com/lumapu/ahoy/commits/bf77275">GIT SHA: bf77275 :: 0.8.0001</a></li>
<li id="esp_type"></li>
<li><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed" target="_blank" >CC BY-NC-SA 4.0</a></li>
</ul>
</div>
</div>
<script type="text/javascript">
var mAutoScroll = true;
var con = document.getElementById("serial");
var exeOnce = true;
function parseGeneric(obj) {
var up = obj["ts_uptime"];
var days = parseInt(up / 86400) % 365;
var hrs = parseInt(up / 3600) % 24;
var min = parseInt(up / 60) % 60;
var sec = up % 60;
document.getElementById("uptime").innerHTML = days + " Days, "
+ ("0"+hrs).substr(-2) + ":"
+ ("0"+min).substr(-2) + ":"
+ ("0"+sec).substr(-2);
parseRssi(obj);
if(true == exeOnce) {
parseNav(obj);
parseESP(obj);
window.setInterval("getAjax('/api/generic', parseGeneric)", 5000);
exeOnce = false;
setTimeOffset();
}
}
function setTimeOffset() {
// set time offset for serial console
var obj = new Object();
obj.cmd = "serial_utc_offset";
obj.val = new Date().getTimezoneOffset() * -60;
getAjax("/api/setup", null, "POST", JSON.stringify(obj));
}
document.getElementById("clear").addEventListener("click", function() {
con.value = "";
});
document.getElementById("scroll").addEventListener("click", function() {
mAutoScroll = !mAutoScroll;
this.value = (mAutoScroll) ? "autoscroll" : "manual scroll";
});
if (!!window.EventSource) {
var source = new EventSource('/events');
source.addEventListener('open', function(e) {
document.getElementById("active").style.backgroundColor = "#0c0";
}, false);
source.addEventListener('error', function(e) {
if (e.target.readyState != EventSource.OPEN) {
document.getElementById("active").style.backgroundColor = "#f00";
}
}, false);
source.addEventListener('serial', function(e) {
con.value += e.data.replace(/\<rn\>/g, '\r\n');
if(mAutoScroll)
con.scrollTop = con.scrollHeight;
}, false);
}
getAjax("/api/generic", parseGeneric);
</script>
</body>
</html>

1000
src/web/html/tmp/setup.html

File diff suppressed because it is too large

781
src/web/html/tmp/style.css

@ -0,0 +1,781 @@
html, body {
font-family: Arial;
margin: 0;
padding: 0;
height: 100%;
min-height: 100%;
background-color: var(--bg);
color: var(--fg);
}
h2 {
padding-left: 10px;
}
span, li, h3, label, fieldset {
color: var(--fg);
}
fieldset, input[type=submit], .btn {
border-radius: 4px;
}
input[type=file] {
width: 100%;
}
textarea {
color: var(--fg);
background-color: var(--bg);
}
#live span {
color: var(--fg2);
}
.topnav {
background-color: var(--nav-bg);
position: fixed;
top: 0;
width: 100%;
}
.topnav a {
color: var(--fg2);
padding: 14px 14px;
text-decoration: none;
font-size: 17px;
display: block;
}
#topnav a {
color: #fff;
}
.topnav a.icon {
top: 0;
left: 0;
background: var(--nav-bg);
display: block;
position: absolute;
}
.topnav a:hover {
background-color: var(--primary-hover) !important;
}
.topnav .info {
color: var(--fg2);
position: absolute;
right: 24px;
top: 5px;
}
.topnav .mobile {
display: none;
}
svg.icon {
vertical-align: middle;
display: inline-block;
margin-top:-4x;
padding: 5px 7px 5px 0px;
}
.icon-info {
fill: var(--info);
}
.icon-warn {
fill: var(--warn);
}
.icon-success {
fill: var(--success);
}
.wifi {
fill: var(--fg2);
}
.title {
background-color: var(--primary);
color: #fff !important;
padding: 15px 14px 16px 80px !important
}
.topnav .icon span {
display: block;
width: 30px;
height: 3px;
margin-bottom: 5px;
position: relative;
background: #fff;
border-radius: 2px;
}
.topnav .active {
background-color: var(--nav-active);
}
span.seperator {
width: 100%;
height: 1px;
margin: 5px 0px 5px;
background-color: #494949;
display: block;
}
#content {
max-width: 1140px;
}
.total-h {
background-color: var(--total-head-title);
color: var(--fg2);
}
.total-bg {
background-color: var(--total-bg);
color: var(--fg2);
}
.iv-h {
background-color: var(--iv-head-title);
color: var(--fg2);
}
.iv-bg {
background-color: var(--iv-head-bg);
color: var(--fg2);
}
.iv-h-dis {
background-color: var(--iv-dis-title);
color: var(--fg2);
}
.iv-bg-dis {
background-color: var(--iv-dis);
color: var(--fg2);
}
.ch-h {
background-color: var(--ch-head-title);
color: var(--fg2);
}
.ch-bg {
background-color: var(--ch-head-bg);
color: var(--fg2);
}
.ts-h {
background-color: var(--ts-head);
color: var(--fg2);
}
.ts-bg {
background-color: var(--ts-bg);
color: var(--fg2);
}
.hr {
border-top: 1px solid var(--iv-head-title);
margin: 1rem 0 1rem;
}
p {
text-align: justify;
font-size: 13pt;
color: var(--fg);
}
#footer {
background-color: var(--footer-bg);
}
.row { display: flex; max-width: 100%; flex-wrap: wrap; }
.col { flex: 1 0 0%; }
.col-1, .col-2, .col-3, .col-4,
.col-5, .col-6, .col-7, .col-8,
.col-9, .col-10, .col-11, .col-12 { flex: 0 0 auto; }
.col-1 { width: 8.333333333%; }
.col-2 { width: 16.66666667%; }
.col-3 { width: 25%; }
.col-4 { width: 33.33333333%; }
.col-5 { width: 41.66666667%; }
.col-6 { width: 50%; }
.col-7 { width: 58.33333333%; }
.col-8 { width: 66.66666667%; }
.col-9 { width: 75%; }
.col-10 { width: 83.33333333%; }
.col-11 { width: 91.66666667%; }
.col-12 { width: 100%; }
.p-1 { padding: 0.25rem; }
.p-2 { padding: 0.5rem; }
.p-3 { padding: 1rem; }
.p-4 { padding: 1.5rem; }
.p-5 { padding: 3rem; }
.px-1 { padding: 0 0.25rem 0 0.25rem; }
.px-2 { padding: 0 0.5rem 0 0.5rem; }
.px-3 { padding: 0 1rem 0 1rem; }
.px-4 { padding: 0 1.5rem 0 1.5rem; }
.px-5 { padding: 0 3rem 0 3rem; }
.py-1 { padding: 0.25rem 0 0.25rem; }
.py-2 { padding: 0.5rem 0 0.5rem; }
.py-3 { padding: 1rem 0 1rem; }
.py-4 { padding: 1.5rem 0 1.5rem; }
.py-5 { padding: 3rem 0 3rem; }
.mx-1 { margin: 0 0.25rem 0 0.25rem; }
.mx-2 { margin: 0 0.5rem 0 0.5rem; }
.mx-3 { margin: 0 1rem 0 1rem; }
.mx-4 { margin: 0 1.5rem 0 1.5rem; }
.mx-5 { margin: 0 3rem 0 3rem; }
.my-1 { margin: 0.25rem 0 0.25rem; }
.my-2 { margin: 0.5rem 0 0.5rem; }
.my-3 { margin: 1rem 0 1rem; }
.my-4 { margin: 1.5rem 0 1.5rem; }
.my-5 { margin: 3rem 0 3rem; }
.mt-1 { margin-top: 0.25rem }
.mt-2 { margin-top: 0.5rem }
.mt-3 { margin-top: 1rem }
.mt-4 { margin-top: 1.5rem }
.mt-5 { margin-top: 3rem }
.mb-1 { margin-bottom: 0.25rem }
.mb-2 { margin-bottom: 0.5rem }
.mb-3 { margin-bottom: 1rem }
.mb-4 { margin-bottom: 1.5rem }
.mb-5 { margin-bottom: 3rem }
.fs-1 { font-size: 3.5rem; }
.fs-2 { font-size: 3rem; }
.fs-3 { font-size: 2.5rem; }
.fs-4 { font-size: 2rem; }
.fs-5 { font-size: 1.75rem; }
.fs-6 { font-size: 1.5rem; }
.fs-7 { font-size: 1.25rem; }
.fs-8 { font-size: 1rem; }
.fs-9 { font-size: 0.75rem; }
.fs-10 { font-size: 0.5rem; }
.a-r { text-align: right; }
.a-c { text-align: center; }
.d-none { display: none !important; }
.d-block { display: block !important; }
.row > * {
padding-left: 0.5rem;
padding-right: 0.5rem;
}
*, ::after, ::before {
box-sizing: border-box;
}
/* sm */
@media(min-width: 768px) {
.col-sm-1 { width: 8.333333333%; }
.col-sm-2 { width: 16.66666667%; }
.col-sm-3 { width: 25%; }
.col-sm-4 { width: 33.33333333%; }
.col-sm-5 { width: 41.66666667%; }
.col-sm-6 { width: 50%; }
.col-sm-7 { width: 58.33333333%; }
.col-sm-8 { width: 66.66666667%; }
.col-sm-9 { width: 75%; }
.col-sm-10 { width: 83.33333333%; }
.col-sm-11 { width: 91.66666667%; }
.col-sm-12 { width: 100%; }
.mb-sm-1 { margin-bottom: 0.25rem }
.mb-sm-2 { margin-bottom: 0.5rem }
.mb-sm-3 { margin-bottom: 1rem }
.mb-sm-4 { margin-bottom: 1.5rem }
.mb-sm-5 { margin-bottom: 3rem }
.fs-sm-1 { font-size: 3.5rem; }
.fs-sm-2 { font-size: 3rem; }
.fs-sm-3 { font-size: 2.5rem; }
.fs-sm-4 { font-size: 2rem; }
.fs-sm-5 { font-size: 1.75rem; }
.fs-sm-6 { font-size: 1.5rem; }
.fs-sm-7 { font-size: 1.25rem; }
.fs-sm-8 { font-size: 1rem; }
.d-sm-block { display: block !important;}
.d-sm-none { display: none !important; }
}
/* md */
@media(min-width: 992px) {
.col-md-1 { width: 8.333333333%; }
.col-md-2 { width: 16.66666667%; }
.col-md-3 { width: 25%; }
.col-md-4 { width: 33.33333333%; }
.col-md-5 { width: 41.66666667%; }
.col-md-6 { width: 50%; }
.col-md-7 { width: 58.33333333%; }
.col-md-8 { width: 66.66666667%; }
.col-md-9 { width: 75%; }
.col-md-10 { width: 83.33333333%; }
.col-md-11 { width: 91.66666667%; }
.col-md-12 { width: 100%; }
}
table {
border-collapse: collapse;
width: 100%;
}
th {
text-align: inherit;
}
.table td, .table th {
padding: .75rem;
border-bottom: 1px solid var(--table-border);
}
#wrapper {
min-height: 100%;
}
#content {
padding: 50px 20px 120px 20px;
overflow: auto;
}
#footer {
height: 121px;
margin-top: -121px;
width: 100%;
font-size: 13px;
}
#footer .right {
color: #bbb;
margin: 6px 25px;
text-align: right;
}
#footer .left {
color: #bbb;
margin: 23px 0px 0px 25px;
}
#footer ul {
list-style-type: none;
margin: 20px auto;
padding: 0;
}
#footer ul li, #footer a {
color: #bbb;
margin-bottom: 10px;
padding-left: 5px;
font-size: 13px;
}
#footer a:hover {
color: #fff;
}
.hide {
display: none !important;
}
@media only screen and (min-width: 992px) {
.topnav {
width: 230px !important;
height: 100%;
}
.topnav a.icon {
display: none !important;
}
.topnav a {
padding: 14px 24px;
}
.topnav .title {
padding-left: 24px !important;
}
.topnav .mobile {
display: block;
}
.topnav .info {
top: auto !important;
right: auto !important;
bottom: 14px;
left: 24px;
}
#content {
padding: 15px 15px 120px 250px;
}
#footer .left {
margin-left: 250px !important;
}
}
p.lic, p.lic a {
font-size: 8pt;
color: #999;
}
.des {
margin-top: 20px;
font-size: 13pt;
color: var(--secondary);
}
.s_active, .s_collapsible:hover {
background-color: var(--primary-hover);
color: #fff;
}
.s_content {
display: none;
overflow: hidden;
}
.s_collapsible {
background-color: var(--primary);
color: white;
cursor: pointer;
padding: 12px;
width: 100%;
border: none;
text-align: left;
outline: none;
font-size: 15px;
margin-bottom: 5px;
}
.subdes {
font-size: 12pt;
color: var(--secondary);
margin-left: 7px;
}
.subsubdes {
font-size:12pt;
color:var(--secondary);
margin: 0 0 7px 12px;
}
a:link, a:visited {
text-decoration: none;
font-size: 13pt;
color: var(--secondary);
}
a:hover, a:focus {
color: #f00;
}
a.btn {
background-color: var(--primary);
color: #fff;
padding: 7px 15px 7px 15px;
display: inline-block;
}
a.btn:hover {
background-color: var(--primary-hover) !important;
}
input, select {
padding: 7px;
font-size: 13pt;
}
input[type=text], input[type=password], select, input[type=number] {
width: 100%;
box-sizing: border-box;
border: 1px solid #ccc;
border-radius: 4px;
background-color: var(--input-bg);
color: var(--fg);
}
input:invalid {
border: 2px solid #f00 !important;
background-color: var(--invalid-bg) !important;
}
input.sh {
max-width: 150px !important;
margin-right: 10px;
}
input.btnDel {
background-color: #c00 !important;
}
input.btn {
background-color: var(--primary);
color: #fff;
border: 0px;
padding: 7px 20px 7px 20px;
margin-bottom: 10px;
text-transform: uppercase;
cursor: pointer;
}
input.btn:hover {
background-color: #044e86;
}
input.cb {
margin-bottom: 15px;
margin-top: 10px;
}
label {
width: 20%;
display: inline-block;
font-size: 12pt;
padding-right: 10px;
margin: 10px 0px 0px 15px;
vertical-align: top;
}
pre {
white-space: pre-wrap;
}
.left {
float: left;
}
.right {
float: right;
}
.subgrp {
float: left;
width: 220px;
}
div.ModPwr, div.ModName, div.YieldCor {
width:70%;
display: inline-block;
}
div.hr {
height: 1px;
border-top: 1px solid #ccc;
margin: 10px 0px 10px;
}
#note {
margin: 10px 10px 10px 10px;
padding-top: 10px;
width: 100%;
}
#login {
width: 450px;
height: 200px;
border: 1px solid #ccc;
background-color: var(--input-bg);
position: absolute;
top: 50%;
left: 50%;
margin-top: -160px;
margin-left: -225px;
}
@media(max-width: 500px) {
div.ch .unit, div.ch-iv .unit {
font-size: 18px;
}
div.ch {
width: 170px;
min-height: 100px
}
.subgrp {
width: 180px;
}
#login {
margin-left: -150px;
width: 300px;
}
}
#serial {
width: 100%;
}
#content .serial {
max-width: 1000px;
}
.dot {
height: 15px;
width: 15px;
background-color: #f00;
border-radius: 50%;
display: inline-block;
margin-top: 15px;
}
.head {
background-color: var(--primary);
color: #fff;
}
.css-tooltip{
position: relative;
}
.css-tooltip:hover:after{
content:attr(data-tooltip);
background:#000;
padding:5px;
border-radius:3px;
display: inline-block;
position: absolute;
transform: translate(-50%,-100%);
margin:0 auto;
color:#FFF;
min-width:100px;
min-width:150px;
top:-5px;
left: 50%;
text-align:center;
}
.css-tooltip:hover:before {
top:-5px;
left: 50%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
border-color: rgba(0, 0, 0, 0);
border-top-color: #000;
border-width: 5px;
margin-left: -5px;
transform: translate(0,0px);
}
#modal {
max-width: 700px;
margin: 1.75rem auto;
}
.modal {
position: fixed;
top: 0;
right: 0;
left: 0;
z-index: 1072;
display: block;
}
#modal-wrapper {
background-color: #000;
opacity: 0.5;
bottom: 0;
}
.modal-content {
border-radius: .3rem;
position: relative;
display: flex;
width: 100%;
background-color: var(--modal-bg);
background-clip: padding-box;
border: 1px solid rgba(0,0,0,.2);
flex-direction: column;
}
.modal-header {
display: flex;
align-items: flex-start;
justify-content: space-between;
padding: 1rem;
border-bottom: 1px solid #e9ecef;
}
.modal-header .close {
padding: 0.7rem;
margin: -1rem -1rem -1rem auto;
}
.modal-body {
padding: 1rem 1rem 2rem 1rem;
}
.close {
font-size: 2rem;
opacity: 0.5;
font-family: inherit;
cursor: pointer;
padding: 0;
}
button.close {
background-color: transparent;
border: 0;
}
h5 {
font-size: 1.25rem;
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
}
.pointer {
cursor: pointer;
}
.badge-success {
color: #fff;
background-color: #28a745;
}
.badge-warning {
color: #212529;
background-color: #ffc107;
}
.badge-error {
color: #fff;
background-color: #dc3545;
}
.badge {
display: inline-block;
padding: .25em .4em;
font-size: 85%;
font-weight: 700;
line-height: 1;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
border-radius: .25rem;
}

188
src/web/html/tmp/system.html

@ -0,0 +1,188 @@
<!doctype html>
<html>
<head>
<title>System</title>
<link rel="stylesheet" type="text/css" href="style.css?v=0.8.0001"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<script type="text/javascript" src="api.js?v=0.8.0001"></script>
<link rel="stylesheet" type="text/css" href="colors.css?v=0.8.0001"/>
<meta name="robots" content="noindex, nofollow" />
</head>
<body>
<div class="topnav">
<a href="/?v=0.8.0001" class="title">AhoyDTU</a>
<a href="javascript:void(0);" class="icon" onclick="topnav()">
<span></span>
<span></span>
<span></span>
</a>
<div id="topnav" class="mobile">
<a id="nav3" class="hide" href="/live?v=0.8.0001">Live</a>
<a id="nav4" class="hide" href="/serial?v=0.8.0001">Webserial</a>
<a id="nav5" class="hide" href="/setup?v=0.8.0001">Settings</a>
<span class="seperator"></span>
<a id="nav6" class="hide" href="/update?v=0.8.0001">Update</a>
<a id="nav7" class="hide" href="/system?v=0.8.0001">System</a>
<span class="seperator"></span>
<a id="nav8" href="/api" target="_blank">REST API</a>
<a id="nav9" href="https://ahoydtu.de" target="_blank">Documentation</a>
<a id="nav10" href="/about?v=0.8.0001">About</a>
<span class="seperator"></span>
<a id="nav0" class="hide" href="/login">Login</a>
<a id="nav1" class="hide" href="/logout">Logout</a>
</div>
<div id="wifiicon" class="info"></div>
</div>
<div id="wrapper">
<div id="content">
<div id="info" class="col-sm-12 col-md-6 mt-3"></div>
<div id="html" class="mt-3 mb-3"></div>
</div>
</div>
<div id="footer">
<div class="left">
<a href="https://ahoydtu.de" target="_blank">AhoyDTU &copy 2023</a>
<ul>
<li><a href="https://discord.gg/WzhxEY62mB" target="_blank">Discord</a></li>
<li><a href="https://github.com/lumapu/ahoy" target="_blank">Github</a></li>
</ul>
</div>
<div class="right">
<ul>
<li><a target="_blank" href="https://github.com/lumapu/ahoy/commits/bf77275">GIT SHA: bf77275 :: 0.8.0001</a></li>
<li id="esp_type"></li>
<li><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed" target="_blank" >CC BY-NC-SA 4.0</a></li>
</ul>
</div>
</div>
<script type="text/javascript">
function parseGeneric(obj) {
parseNav(obj);
parseESP(obj);
parseRssi(obj);
}
function parseSysInfo(obj) {
const data = ["sdk", "cpu_freq", "chip_revision",
"chip_model", "chip_cores", "esp_type", "mac", "wifi_rssi", "ts_uptime",
"flash_size", "sketch_used", "heap_total", "heap_free", "heap_frag",
"max_free_blk", "version", "core_version", "reboot_reason"];
lines = [];
for (const [key, value] of Object.entries(obj)) {
if(!data.includes(key) || (typeof value == 'undefined')) continue;
lines.push(tr(key.replace('_', ' '), value));
}
document.getElementById("info").append(
headline("System Information"),
ml("table", {class: "table"},
ml("tbody", {}, lines)
)
);
}
function badge(success, text, second="error") {
return ml("span", {class: "badge badge-" + ((success) ? "success" : second)}, text);
}
function headline(text) {
return ml("div", {class: "head p-2 mt-3"}, ml("div", {class: "row"}, ml("div", {class: "col a-c"}, text)))
}
function parseRadio(obj) {
const pa = ["MIN (recommended)", "LOW", "HIGH", "MAX"];
const dr = ["1 M", "2 M", "250 k"]
if(obj.radioNrf.en) {
lines = [
tr("NRF24L01", badge(obj.radioNrf.isconnected, ((obj.radioNrf.isconnected) ? "" : "not ") + "connected")),
tr("NRF24 Power Level", pa[obj.radioNrf.power_level]),
tr("NRF24 Data Rate", dr[obj.radioNrf.dataRate] + "bps")
];
} else
lines = [tr("NRF24L01", badge(false, "not enabled"))];
document.getElementById("info").append(
headline("Radio NRF"),
ml("table", {class: "table"},
ml("tbody", {}, lines)
)
);
if(obj.radioCmt.en) {
cmt = [tr("CMT2300A", badge(obj.radioCmt.isconnected, ((obj.radioCmt.isconnected) ? "" : "not ") + "connected"))];
} else
cmt = [tr("CMT2300A", badge(false, "not enabled"))];
document.getElementById("info").append(
headline("Radio CMT"),
ml("table", {class: "table"},
ml("tbody", {}, cmt)
)
);
}
function parseMqtt(obj) {
if(obj.enabled) {
lines = [
tr("connected", badge(obj.connected, ((obj.connected) ? "true" : "false"))),
tr("#TX", obj.tx_cnt),
tr("#RX", obj.rx_cnt)
];
} else
lines = tr("enabled", badge(false, "false"));
document.getElementById("info").append(
headline("MqTT"),
ml("table", {class: "table"},
ml("tbody", {}, lines)
)
);
}
function parseIndex(obj) {
if(obj.ts_sunrise > 0) {
document.getElementById("info").append(
headline("Sun"),
ml("table", {class: "table"},
ml("tbody", {}, [
tr("Sunrise", new Date(obj.ts_sunrise * 1000).toLocaleString('de-DE')),
tr("Sunset", new Date(obj.ts_sunset * 1000).toLocaleString('de-DE')),
tr("Communication start", new Date((obj.ts_sunrise - obj.ts_offset) * 1000).toLocaleString('de-DE')),
tr("Communication stop", new Date((obj.ts_sunset + obj.ts_offset) * 1000).toLocaleString('de-DE')),
tr("Night behaviour", badge(obj.disNightComm, ((obj.disNightComm) ? "not" : "") + " communicating", "warning"))
])
)
);
}
}
function parse(obj) {
if(null != obj) {
parseGeneric(obj["generic"]);
if(null != obj["refresh"]) {
var meta = document.createElement('meta');
meta.httpEquiv = "refresh"
meta.content = obj["refresh"] + "; URL=" + obj["refresh_url"];
document.getElementsByTagName('head')[0].appendChild(meta);
}
else {
parseRadio(obj.system);
parseMqtt(obj.system.mqtt);
parseSysInfo(obj["system"]);
getAjax('/api/index', parseIndex);
}
document.getElementById("html").innerHTML = obj["html"];
}
}
getAjax("/api/html" + window.location.pathname, parse);
</script>
</body>
</html>

80
src/web/html/tmp/update.html

@ -0,0 +1,80 @@
<!doctype html>
<html>
<head>
<title>Update</title>
<link rel="stylesheet" type="text/css" href="style.css?v=0.8.0001"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<script type="text/javascript" src="api.js?v=0.8.0001"></script>
<link rel="stylesheet" type="text/css" href="colors.css?v=0.8.0001"/>
<meta name="robots" content="noindex, nofollow" />
</head>
<body>
<div class="topnav">
<a href="/?v=0.8.0001" class="title">AhoyDTU</a>
<a href="javascript:void(0);" class="icon" onclick="topnav()">
<span></span>
<span></span>
<span></span>
</a>
<div id="topnav" class="mobile">
<a id="nav3" class="hide" href="/live?v=0.8.0001">Live</a>
<a id="nav4" class="hide" href="/serial?v=0.8.0001">Webserial</a>
<a id="nav5" class="hide" href="/setup?v=0.8.0001">Settings</a>
<span class="seperator"></span>
<a id="nav6" class="hide" href="/update?v=0.8.0001">Update</a>
<a id="nav7" class="hide" href="/system?v=0.8.0001">System</a>
<span class="seperator"></span>
<a id="nav8" href="/api" target="_blank">REST API</a>
<a id="nav9" href="https://ahoydtu.de" target="_blank">Documentation</a>
<a id="nav10" href="/about?v=0.8.0001">About</a>
<span class="seperator"></span>
<a id="nav0" class="hide" href="/login">Login</a>
<a id="nav1" class="hide" href="/logout">Logout</a>
</div>
<div id="wifiicon" class="info"></div>
</div>
<div id="wrapper">
<div id="content">
<fieldset>
<legend class="des">Select firmware file (*.bin)</legend>
<form id="form" method="POST" action="/update" enctype="multipart/form-data" accept-charset="utf-8">
<input type="file" name="update">
<input type="button" class="btn" value="Update" onclick="hide()">
</form>
</fieldset>
</div>
</div>
<div id="footer">
<div class="left">
<a href="https://ahoydtu.de" target="_blank">AhoyDTU &copy 2023</a>
<ul>
<li><a href="https://discord.gg/WzhxEY62mB" target="_blank">Discord</a></li>
<li><a href="https://github.com/lumapu/ahoy" target="_blank">Github</a></li>
</ul>
</div>
<div class="right">
<ul>
<li><a target="_blank" href="https://github.com/lumapu/ahoy/commits/bf77275">GIT SHA: bf77275 :: 0.8.0001</a></li>
<li id="esp_type"></li>
<li><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed" target="_blank" >CC BY-NC-SA 4.0</a></li>
</ul>
</div>
</div>
<script type="text/javascript">
function parseGeneric(obj) {
parseNav(obj);
parseESP(obj);
parseRssi(obj);
}
function hide() {
document.getElementById("form").submit();
var e = document.getElementById("content");
e.replaceChildren(span("update started"));
}
getAjax("/api/generic", parseGeneric);
</script>
</body>
</html>

479
src/web/html/tmp/visualization.html

@ -0,0 +1,479 @@
<!doctype html>
<html>
<head>
<title>Live</title>
<link rel="stylesheet" type="text/css" href="style.css?v=0.8.0001"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<script type="text/javascript" src="api.js?v=0.8.0001"></script>
<link rel="stylesheet" type="text/css" href="colors.css?v=0.8.0001"/>
<meta name="robots" content="noindex, nofollow" />
<meta name="apple-mobile-web-app-capable" content="yes">
</head>
<body>
<div class="topnav">
<a href="/?v=0.8.0001" class="title">AhoyDTU</a>
<a href="javascript:void(0);" class="icon" onclick="topnav()">
<span></span>
<span></span>
<span></span>
</a>
<div id="topnav" class="mobile">
<a id="nav3" class="hide" href="/live?v=0.8.0001">Live</a>
<a id="nav4" class="hide" href="/serial?v=0.8.0001">Webserial</a>
<a id="nav5" class="hide" href="/setup?v=0.8.0001">Settings</a>
<span class="seperator"></span>
<a id="nav6" class="hide" href="/update?v=0.8.0001">Update</a>
<a id="nav7" class="hide" href="/system?v=0.8.0001">System</a>
<span class="seperator"></span>
<a id="nav8" href="/api" target="_blank">REST API</a>
<a id="nav9" href="https://ahoydtu.de" target="_blank">Documentation</a>
<a id="nav10" href="/about?v=0.8.0001">About</a>
<span class="seperator"></span>
<a id="nav0" class="hide" href="/login">Login</a>
<a id="nav1" class="hide" href="/logout">Logout</a>
</div>
<div id="wifiicon" class="info"></div>
</div>
<div id="wrapper">
<div id="content">
<div id="live"></div>
<p>Every <span id="refresh"></span> seconds the values are updated</p>
</div>
</div>
<div id="footer">
<div class="left">
<a href="https://ahoydtu.de" target="_blank">AhoyDTU &copy 2023</a>
<ul>
<li><a href="https://discord.gg/WzhxEY62mB" target="_blank">Discord</a></li>
<li><a href="https://github.com/lumapu/ahoy" target="_blank">Github</a></li>
</ul>
</div>
<div class="right">
<ul>
<li><a target="_blank" href="https://github.com/lumapu/ahoy/commits/bf77275">GIT SHA: bf77275 :: 0.8.0001</a></li>
<li id="esp_type"></li>
<li><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed" target="_blank" >CC BY-NC-SA 4.0</a></li>
</ul>
</div>
</div>
<script type="text/javascript">
var exeOnce = true;
var units, ivEn;
var mIvHtml = [];
var mNum = 0;
var total = Array(5).fill(0);
var tPwrAck;
function parseGeneric(obj) {
if(true == exeOnce){
parseNav(obj);
parseESP(obj);
}
parseRssi(obj);
}
function numBig(val, unit, des) {
return ml("div", {class: "col-6 col-sm-4 a-c"}, [
ml("div", {class: "row"},
ml("div", {class: "col"}, [
ml("span", {class: "fs-5 fs-md-4"}, String(Math.round(val * 100) / 100)),
ml("span", {class: "fs-6 fs-md-7 mx-1"}, unit)
])),
ml("div", {class: "row"},
ml("div", {class: "col"},
ml("span", {class: "fs-9 px-1"}, des)
)
)
]);
}
function numMid(val, unit, des) {
return ml("div", {class: "col-6 col-sm-4 col-md-3 mb-2"}, [
ml("div", {class: "row"},
ml("div", {class: "col"}, [
ml("span", {class: "fs-6"}, String(Math.round(val * 100) / 100)),
ml("span", {class: "fs-8 mx-1"}, unit)
])),
ml("div", {class: "row"},
ml("div", {class: "col"},
ml("span", {class: "fs-9"}, des)
)
)
]);
}
function totals() {
for(var i = 0; i < 5; i++) {
total[i] = Math.round(total[i] * 100) / 100;
}
return ml("div", {class: "row mt-3 mb-5"},
ml("div", {class: "col"}, [
ml("div", {class: "p-2 total-h"},
ml("div", {class: "row"},
ml("div", {class: "col mx-2 mx-md-1"}, "TOTAL")
),
),
ml("div", {class: "p-2 total-bg"}, [
ml("div", {class: "row"}, [
numBig(total[0], "W", "AC Power"),
numBig(total[1], "Wh", "Yield Day"),
numBig(total[2], "kWh", "Yield Total")
]),
ml("div", {class: "hr"}),
ml("div", {class: "row"}, [
numMid(total[3], "W", "DC Power"),
numMid(total[4], "var", "Reactive Power")
])
])
])
);
}
function ivHead(obj) {
if(0 != obj.status) { // only add totals if inverter is online
total[0] += obj.ch[0][2]; // P_AC
total[3] += obj.ch[0][8]; // P_DC
total[4] += obj.ch[0][10]; // Q_AC
}
total[1] += obj.ch[0][7]; // YieldDay
total[2] += obj.ch[0][6]; // YieldTotal
var t = span("&nbsp;&deg;C");
var clh = (0 == obj.status) ? "iv-h-dis" : "iv-h";
var clbg = (0 == obj.status) ? "iv-bg-dis" : "iv-bg";
var pwrLimit = "n/a";
if(65535 != obj.power_limit_read) {
pwrLimit = obj.power_limit_read + "&nbsp;%";
if(0 != obj.max_pwr)
pwrLimit += ", " + Math.round(obj.max_pwr * obj.power_limit_read / 100) + "W";
}
return ml("div", {class: "row mt-2"},
ml("div", {class: "col"}, [
ml("div", {class: "p-2 " + clh},
ml("div", {class: "row"}, [
ml("div", {class: "col mx-2 mx-md-1"}, ml("span", { class: "pointer", onclick: function() {
getAjax("/api/inverter/version/" + obj.id, parseIvVersion);
}}, obj.name)),
ml("div", {class: "col a-c", onclick: function() {limitModal(obj)}}, [
ml("span", {class: "d-none d-sm-block pointer"}, "Active Power Control: " + pwrLimit),
ml("span", {class: "d-block d-sm-none pointer"}, "APC: " + pwrLimit)
]),
ml("div", {class: "col a-c"}, ml("span", { class: "pointer", onclick: function() {
getAjax("/api/inverter/alarm/" + obj.id, parseIvAlarm);
}}, ("Alarms: " + obj.alarm_cnt))),
ml("div", {class: "col a-r mx-2 mx-md-1"}, String(obj.ch[0][5]) + t.innerText)
])
),
ml("div", {class: "p-2 " + clbg}, [
ml("div", {class: "row"},[
numBig(obj.ch[0][2], "W", "AC Power"),
numBig(obj.ch[0][7], "Wh", "Yield Day"),
numBig(obj.ch[0][6], "kWh", "Yield Total")
]),
ml("div", {class: "hr"}),
ml("div", {class: "row mt-2"},[
numMid(obj.ch[0][11], "W", "Max AC Power"),
numMid(obj.ch[0][8], "W", "DC Power"),
numMid(obj.ch[0][0], "V", "AC Voltage"),
numMid(obj.ch[0][1], "A", "AC Current"),
numMid(obj.ch[0][3], "Hz", "Frequency"),
numMid(obj.ch[0][9], "%", "Efficiency"),
numMid(obj.ch[0][10], "var", "Reactive Power"),
numMid(obj.ch[0][4], "", "Power Factor")
])
])
])
);
}
function numCh(val, unit, des) {
return ml("div", {class: "col-12 col-sm-6 col-md-12 mb-2"}, [
ml("div", {class: "row"},
ml("div", {class: "col"}, [
ml("span", {class: "fs-6 fs-md-7"}, String(Math.round(val * 100) / 100)),
ml("span", {class: "fs-8 mx-2"}, unit)
])),
ml("div", {class: "row"},
ml("div", {class: "col"},
ml("span", {class: "fs-9"}, des)
)
)
]);
}
function ch(status, name, vals) {
var clh = (0 == status) ? "iv-h-dis" : "ch-h";
var clbg = (0 == status) ? "iv-bg-dis" : "ch-bg";
return ml("div", {class: "col-6 col-md-3 mt-2"}, [
ml("div", {class: "p-2 a-c " + clh}, name),
ml("div", {class: "p-2 " + clbg}, [
ml("div", {class: "row"}, [
numCh(vals[2], units[2], "DC Power"),
numCh(vals[6], units[2], "Max Power"),
numCh(vals[5], units[5], "Irradiation"),
numCh(vals[3], units[3], "Yield Day"),
numCh(vals[4], units[4], "Yield Total"),
numCh(vals[0], units[0], "DC Voltage"),
numCh(vals[1], units[1], "DC Current")
])
])
]);
}
function tsInfo(obj) {
var ageInfo = "Last received data requested at: ";
if(obj.ts_last_success > 0) {
var date = new Date(obj.ts_last_success * 1000);
ageInfo += toIsoDateStr(date);
}
else
ageInfo += "nothing received";
if(obj.rssi > -127) {
if(obj.generation < 2)
ageInfo += " (RSSI: " + ((obj.rssi == -64) ? ">=" : "<") + " -64dBm)";
else
ageInfo += " (RSSI: " + obj.rssi + "dBm)";
}
return ml("div", {class: "mb-5"}, [
ml("div", {class: "row p-1 ts-h mx-2"},
ml("div", {class: "col"}, "")
),
ml("div", {class: "row p-2 ts-bg mx-2"},
ml("div", { class: "pointer col mx-2", onclick: function() {
getAjax("/api/inverter/radiostat/" + obj.id, parseIvRadioStats);
}}, ageInfo)
)
]);
}
function parseIv(obj) {
mNum++;
var chn = [];
for(var i = 1; i < obj.ch.length; i++) {
var name = obj.ch_name[i];
if(name.length == 0)
name = "CHANNEL " + i;
if(obj.ch_max_pwr[i] > 0) // show channel only if max mod pwr
chn.push(ch(obj.status, name, obj.ch[i]));
}
mIvHtml.push(
ml("div", {}, [
ivHead(obj),
ml("div", {class: "row mb-2"}, chn),
tsInfo(obj)
])
);
var last = true;
for(var i = obj.id + 1; i < ivEn.length; i++) {
if((i != ivEn.length) && ivEn[i]) {
last = false;
getAjax("/api/inverter/id/" + i, parseIv);
break;
}
}
if(last) {
if(mNum > 1)
mIvHtml.unshift(totals());
document.getElementById("live").replaceChildren(...mIvHtml);
}
}
function parseIvAlarm(obj) {
var html = [];
var offs = new Date().getTimezoneOffset() * -60;
html.push(
ml("div", {class: "row"}, [
ml("div", {class: "col"}, ml("strong", {}, "Event")),
ml("div", {class: "col"}, ml("strong", {}, "ID")),
ml("div", {class: "col"}, ml("strong", {}, "Start")),
ml("div", {class: "col"}, ml("strong", {}, "End"))
])
);
for(a of obj.alarm) {
if(a.code != 0) {
html.push(
ml("div", {class: "row"}, [
ml("div", {class: "col mt-3"}, String(a.str)),
ml("div", {class: "col mt-3"}, String(a.code)),
ml("div", {class: "col mt-3"}, String(toIsoTimeStr(new Date((a.start + offs) * 1000)))),
ml("div", {class: "col mt-3"}, String(toIsoTimeStr(new Date((a.end + offs) * 1000))))
])
);
}
}
modal("Alarms of inverter " + obj.iv_name, ml("div", {}, html));
}
function parseIvVersion(obj) {
var model;
switch(obj.generation) {
case 0: model = "MI-"; break;
case 1: model = "HM-"; break;
case 2: model = "HMS-"; break;
case 3: model = "HMT-"; break;
default: model = "???-"; break;
}
model += String(obj.max_pwr) + " (Serial: " + obj.serial + ")";
var html = ml("table", {class: "table"}, [
ml("tbody", {}, [
tr("Model", model),
tr("Firmware Version / Build", String(obj.fw_ver) + " (build: " + String(obj.fw_date) + " " + String(obj.fw_time) + ")"),
tr("Hardware Version / Build", (obj.hw_ver/100).toFixed(2) + " (build: " + String(obj.prod_cw) + "/" + String(obj.prod_year) + ")"),
tr("Hardware Number", obj.part_num.toString(16)),
tr("Bootloader Version", (obj.boot_ver/100).toFixed(2))
])
]);
modal("Info for inverter " + obj.name, ml("div", {}, html));
}
function parseIvRadioStats(obj) {
var html = ml("table", {class: "table"}, [
ml("tbody", {}, [
tr("TX count", obj.tx_cnt),
tr("RX success", obj.rx_success),
tr("RX fail", obj.rx_fail),
tr("RX no answer", obj.rx_fail_answer),
tr("RX fragments", obj.frame_cnt),
tr("TX retransmits", obj.retransmits)
])
]);
modal("Radio statistics for inverter " + obj.name, ml("div", {}, html));
}
function limitModal(obj) {
var opt = [["pct", "%"], ["watt", "W"]];
var html = ml("div", {}, [
ml("div", {class: "row mb-3"}, [
ml("div", {class: "col-12 col-sm-5 my-2"}, "Limit Value"),
ml("div", {class: "col-8 col-sm-5"}, ml("input", {name: "limit", type: "number"}, "")),
ml("div", {class: "col-4 col-sm-2"}, sel("type", opt, "pct"))
]),
ml("div", {class: "row mb-3"}, [
ml("div", {class: "col-8 col-sm-5"}, "Keep limit over inverter restart"),
ml("div", {class: "col-4 col-sm-7"}, ml("input", {type: "checkbox", name: "keep"}))
]),
ml("div", {class: "row my-3"},
ml("div", {class: "col a-r"}, ml("input", {type: "button", value: "Apply", class: "btn", onclick: function() {
applyLimit(obj.id);
}}, null))
),
ml("div", {class: "row my-4"}, [
ml("div", {class: "col-12 col-sm-5 my-2"}, "Control"),
ml("div", {class: "col col-sm-7 a-r"}, [
ml("input", {type: "button", value: "restart", class: "btn", onclick: function() {
applyCtrl(obj.id, "restart");
}}, null),
ml("input", {type: "button", value: "turn off", class: "btn mx-1", onclick: function() {
applyCtrl(obj.id, "power", 0);
}}, null),
ml("input", {type: "button", value: "turn on", class: "btn", onclick: function() {
applyCtrl(obj.id, "power", 1);
}}, null)
])
]),
ml("div", {class: "row mt-1"}, [
ml("div", {class: "col-12 col-sm-5 my-2"}, "Result"),
ml("div", {class: "col-sm-7 my-2"}, ml("span", {name: "pwrres"}, "-"))
])
]);
modal("Active Power Control for inverter " + obj.name, html);
}
function applyLimit(id) {
var cmd = "limit_";
if(!document.getElementsByName("keep")[0].checked)
cmd += "non";
cmd += "persistent_";
if(document.getElementsByName("type")[0].value == "pct")
cmd += "relative";
else
cmd += "absolute";
var val = document.getElementsByName("limit")[0].value;
if(isNaN(val))
val = 100;
var obj = new Object();
obj.id = id;
obj.cmd = cmd;
obj.val = val;
getAjax("/api/ctrl", ctrlCb, "POST", JSON.stringify(obj));
}
function applyCtrl(id, cmd, val=0) {
var obj = new Object();
obj.id = id;
obj.cmd = cmd;
obj.val = val;
getAjax("/api/ctrl", ctrlCb2, "POST", JSON.stringify(obj));
}
function ctrlCb(obj) {
var e = document.getElementsByName("pwrres")[0];
if(obj.success) {
e.innerHTML = "received command, waiting for inverter acknowledge ...";
tPwrAck = window.setInterval("getAjax('/api/inverter/pwrack/" + obj.id + "', updatePwrAck)", 1000);
}
else
e.innerHTML = "Error: " + obj["error"];
}
function ctrlCb2(obj) {
var e = document.getElementsByName("pwrres")[0];
if(obj.success)
e.innerHTML = "command received";
else
e.innerHTML = "Error: " + obj["error"];
}
function updatePwrAck(obj) {
if(!obj.ack)
return;
var e = document.getElementsByName("pwrres")[0];
clearInterval(tPwrAck);
if(null == e)
return;
e.innerHTML = "inverter acknowledged active power control command";
}
function parse(obj) {
if(null != obj) {
parseGeneric(obj["generic"]);
units = Object.assign({}, obj["fld_units"]);
ivEn = Object.values(Object.assign({}, obj["iv"]));
mIvHtml = [];
mNum = 0;
total.fill(0);
for(var i = 0; i < obj.iv.length; i++) {
if(obj.iv[i]) {
getAjax("/api/inverter/id/" + i, parseIv);
break;
}
}
if(obj.refresh < 5)
obj.refresh = 5;
document.getElementById("refresh").innerHTML = obj.refresh;
if(true == exeOnce) {
window.setInterval("getAjax('/api/live', parse)", obj.refresh * 1000);
exeOnce = false;
}
}
else
document.getElementById("refresh").innerHTML = "n/a";
}
getAjax("/api/live", parse);
</script>
</body>
</html>
Loading…
Cancel
Save