From d228a21c83951b85eba546d30b9001033f41972c Mon Sep 17 00:00:00 2001 From: Robert Strouse Date: Sat, 1 Jul 2023 09:20:23 -0700 Subject: [PATCH] Pre-v2.0.0 adds groups, groups, security, and tab interface #83 #53 --- ConfigFile.cpp | 122 +- ConfigFile.h | 9 +- ConfigSettings.cpp | 162 ++- ConfigSettings.h | 50 +- MQTT.cpp | 167 ++- Network.cpp | 26 +- Somfy.cpp | 334 ++++- Somfy.h | 31 +- SomfyController.ino.esp32.bin | Bin 1071088 -> 1096912 bytes SomfyController.littlefs.bin | Bin 1441792 -> 1441792 bytes Web.cpp | 960 +++++++++++--- Web.h | 14 + data/appversion | 2 +- data/configRadio.html | 423 ------- data/index.html | 982 ++++++++------ data/index.js | 2248 +++++++++++++++++++++++++-------- data/login.html | 53 + data/main.css | 181 ++- data/widgets.css | 112 ++ 19 files changed, 4095 insertions(+), 1781 deletions(-) delete mode 100644 data/configRadio.html create mode 100644 data/login.html create mode 100644 data/widgets.css diff --git a/ConfigFile.cpp b/ConfigFile.cpp index 21d6da4..29a67cd 100644 --- a/ConfigFile.cpp +++ b/ConfigFile.cpp @@ -6,9 +6,10 @@ extern Preferences pref; -#define SHADE_HDR_VER 10 -#define SHADE_HDR_SIZE 16 +#define SHADE_HDR_VER 11 +#define SHADE_HDR_SIZE 24 #define SHADE_REC_SIZE 248 +#define GROUP_REC_SIZE 176 bool ConfigFile::begin(const char* filename, bool readOnly) { this->file = LittleFS.open(filename, readOnly ? "r" : "w"); @@ -39,8 +40,10 @@ bool ConfigFile::writeHeader(const config_header_t &hdr) { if(!this->isOpen()) return false; this->writeUInt8(hdr.version); this->writeUInt8(hdr.length); - this->writeUInt8(hdr.recordSize); - this->writeUInt8(hdr.records, CFG_REC_END); + this->writeUInt8(hdr.shadeRecordSize); + this->writeUInt8(hdr.shadeRecords); + this->writeUInt8(hdr.groupRecordSize); + this->writeUInt8(hdr.groupRecords, CFG_REC_END); return true; } bool ConfigFile::readHeader() { @@ -49,11 +52,16 @@ bool ConfigFile::readHeader() { Serial.printf("Reading header at %u\n", this->file.position()); this->header.version = this->readUInt8(this->header.version); this->header.length = this->readUInt8(0); - this->header.recordSize = this->readUInt8(this->header.recordSize); - this->header.records = this->readUInt8(this->header.records); - Serial.printf("version:%u len:%u size:%u recs:%u pos:%d\n", this->header.version, this->header.length, this->header.recordSize, this->header.records, this->file.position()); + this->header.shadeRecordSize = this->readUInt8(this->header.shadeRecordSize); + this->header.shadeRecords = this->readUInt8(this->header.shadeRecords); + if(this->header.version > 10) { + this->header.groupRecordSize = this->readUInt8(this->header.groupRecordSize); + this->header.groupRecords = this->readUInt8(this->header.groupRecords); + } + Serial.printf("version:%u len:%u shadeSize:%u shadeRecs:%u groupSize:%u groupRecs: %u pos:%d\n", this->header.version, this->header.length, this->header.shadeRecordSize, this->header.shadeRecords, this->header.groupRecordSize, this->header.groupRecords, this->file.position()); return true; } +/* bool ConfigFile::seekRecordByIndex(uint16_t ndx) { if(!this->file) { return false; @@ -61,6 +69,7 @@ bool ConfigFile::seekRecordByIndex(uint16_t ndx) { if(((this->header.recordSize * ndx) + this->header.length) > this->file.size()) return false; return true; } +*/ bool ConfigFile::readString(char *buff, size_t len) { if(!this->file) return false; memset(buff, 0x00, len); @@ -129,7 +138,6 @@ bool ConfigFile::writeFloat(const float val, const uint8_t prec, const char tok) bool ConfigFile::writeBool(const bool val, const char tok) { return this->writeString(val ? "true" : "false", 6, tok); } - char ConfigFile::readChar(const char defVal) { uint8_t ch; if(this->file.read(&ch, 1) == 1) return (char)ch; @@ -173,7 +181,7 @@ bool ConfigFile::readBool(const bool defVal) { } return defVal; } - +/* bool ShadeConfigFile::seekRecordById(uint8_t id) { if(this->isOpen()) return false; this->file.seek(this->header.length, SeekSet); // Start at the beginning of the file after the header. @@ -191,19 +199,26 @@ bool ShadeConfigFile::seekRecordById(uint8_t id) { } return false; } +*/ bool ShadeConfigFile::begin(bool readOnly) { return this->begin("/shades.cfg", readOnly); } bool ShadeConfigFile::begin(const char *filename, bool readOnly) { return ConfigFile::begin(filename, readOnly); } void ShadeConfigFile::end() { ConfigFile::end(); } bool ShadeConfigFile::save(SomfyShadeController *s) { this->header.version = SHADE_HDR_VER; - this->header.recordSize = SHADE_REC_SIZE; + this->header.shadeRecordSize = SHADE_REC_SIZE; this->header.length = SHADE_HDR_SIZE; - this->header.records = SOMFY_MAX_SHADES; + this->header.shadeRecords = SOMFY_MAX_SHADES; + this->header.groupRecordSize = GROUP_REC_SIZE; + this->header.groupRecords = SOMFY_MAX_GROUPS; this->writeHeader(); for(uint8_t i = 0; i < SOMFY_MAX_SHADES; i++) { SomfyShade *shade = &s->shades[i]; this->writeShadeRecord(shade); } + for(uint8_t i = 0; i < SOMFY_MAX_GROUPS; i++) { + SomfyGroup *group = &s->groups[i]; + this->writeGroupRecord(group); + } return true; } bool ShadeConfigFile::validate() { @@ -213,39 +228,70 @@ bool ShadeConfigFile::validate() { Serial.println(this->header.version); return false; } - if(this->header.recordSize < 100) { - Serial.print("Invalid Record Size:"); - Serial.println(this->header.recordSize); + if(this->header.shadeRecordSize < 100) { + Serial.print("Invalid Shade Record Size:"); + Serial.println(this->header.shadeRecordSize); return false; } - if(this->header.records != 32) { - Serial.print("Invalid Record Count:"); - Serial.println(this->header.records); + if(this->header.shadeRecords != SOMFY_MAX_SHADES) { + Serial.print("Invalid Shade Record Count:"); + Serial.println(this->header.shadeRecords); return false; } + if(this->header.version > 10) { + if(this->header.groupRecordSize < 100) { + Serial.print("Invalid Group Record Size:"); + Serial.println(this->header.groupRecordSize); + return false; + } + if(this->header.groupRecords != SOMFY_MAX_GROUPS) { + Serial.print("Invalid Group Record Count:"); + Serial.println(this->header.groupRecords); + return false; + + } + } if(this->file.position() != this->header.length) { Serial.printf("File not positioned at %u end of header: %d\n", this->header.length, this->file.position()); return false; } + // We should know the file size based upon the record information in the header - if(this->file.size() != this->header.length + (this->header.recordSize * this->header.records)) { - Serial.printf("File size is not correct should be %d and got %d\n", this->header.length + (this->header.recordSize * this->header.records), this->file.size()); + uint32_t fsize = this->header.length + (this->header.shadeRecordSize * this->header.shadeRecords); + if(this->header.version > 10) fsize += (this->header.groupRecordSize * this->header.groupRecords); + if(this->file.size() != fsize) { + Serial.printf("File size is not correct should be %d and got %d\n", fsize, this->file.size()); } // Next check to see if the records match the header length. uint8_t recs = 0; uint32_t startPos = this->file.position(); - while(recs < this->header.records) { + while(recs < this->header.shadeRecords) { uint32_t pos = this->file.position(); if(!this->seekChar(CFG_REC_END)) { - Serial.printf("Failed to find the record end %d\n", recs); + Serial.printf("Failed to find the shade record end %d\n", recs); return false; } - if(this->file.position() - pos != this->header.recordSize) { - Serial.printf("Record length is %d and should be %d\n", this->file.position() - pos, this->header.recordSize); + if(this->file.position() - pos != this->header.shadeRecordSize) { + Serial.printf("Shade record length is %d and should be %d\n", this->file.position() - pos, this->header.shadeRecordSize); return false; } recs++; } + if(this->header.version > 10) { + recs = 0; + while(recs < this->header.groupRecords) { + uint32_t pos = this->file.position(); + if(!this->seekChar(CFG_REC_END)) { + Serial.printf("Failed to find the group record end %d\n", recs); + return false; + } + recs++; + if(this->file.position() - pos != this->header.groupRecordSize) { + Serial.printf("Group record length is %d and should be %d\n", this->file.position() - pos, this->header.groupRecordSize); + return false; + } + } + } this->file.seek(startPos, SeekSet); return true; } @@ -275,7 +321,7 @@ bool ShadeConfigFile::loadFile(SomfyShadeController *s, const char *filename) { } // We should be valid so start reading. pref.begin("ShadeCodes"); - for(uint8_t i = 0; i < this->header.records; i++) { + for(uint8_t i = 0; i < this->header.shadeRecords; i++) { SomfyShade *shade = &s->shades[i]; shade->setShadeId(this->readUInt8(255)); shade->paired = this->readBool(false); @@ -337,6 +383,21 @@ bool ShadeConfigFile::loadFile(SomfyShadeController *s, const char *filename) { } if(shade->getShadeId() == 255) shade->clear(); } + for(uint8_t i = 0; i < this->header.groupRecords; i++) { + SomfyGroup *group = &s->groups[i]; + group->setGroupId(this->readUInt8(255)); + group->groupType = static_cast(this->readUInt8(0)); + group->setRemoteAddress(this->readUInt32(0)); + this->readString(group->name, sizeof(group->name)); + group->proto = static_cast(this->readUInt8(0)); + group->bitLength = this->readUInt8(56); + uint8_t lsd = 0; + for(uint8_t j = 0; j < SOMFY_MAX_GROUPED_SHADES; j++) { + uint8_t shadeId = this->readUInt8(0); + // Do this to eliminate gaps. + if(shadeId > 0) group->linkedShades[lsd++] = shadeId; + } + } pref.end(); if(opened) { Serial.println("Closing shade config file"); @@ -344,6 +405,19 @@ bool ShadeConfigFile::loadFile(SomfyShadeController *s, const char *filename) { } return true; } +bool ShadeConfigFile::writeGroupRecord(SomfyGroup *group) { + this->writeUInt8(group->getGroupId()); + this->writeUInt8(static_cast(group->groupType)); + this->writeUInt32(group->getRemoteAddress()); + this->writeString(group->name, sizeof(group->name)); + this->writeUInt8(static_cast(group->proto)); + this->writeUInt8(group->bitLength); + for(uint8_t j = 0; j < SOMFY_MAX_GROUPED_SHADES; j++) { + if(j == SOMFY_MAX_GROUPED_SHADES - 1) this->writeUInt8(group->linkedShades[j], CFG_REC_END); + else this->writeUInt8(group->linkedShades[j]); + } + return true; +} bool ShadeConfigFile::writeShadeRecord(SomfyShade *shade) { if(shade->tiltType == tilt_types::none || shade->shadeType != shade_types::blind) { shade->myTiltPos = -1; diff --git a/ConfigFile.h b/ConfigFile.h index 89d0827..3c24869 100644 --- a/ConfigFile.h +++ b/ConfigFile.h @@ -10,8 +10,10 @@ struct config_header_t { uint8_t version = 1; - uint16_t recordSize = 0; - uint16_t records = 0; + uint8_t shadeRecordSize = 0; + uint8_t shadeRecords = 0; + uint8_t groupRecordSize = 0; + uint8_t groupRecords = 0; uint8_t length = 0; }; class ConfigFile { @@ -51,6 +53,7 @@ class ConfigFile { class ShadeConfigFile : public ConfigFile { protected: bool writeShadeRecord(SomfyShade *shade); + bool writeGroupRecord(SomfyGroup *group); public: static bool getAppVersion(appver_t &ver); static bool exists(); @@ -60,7 +63,7 @@ class ShadeConfigFile : public ConfigFile { bool save(SomfyShadeController *sofmy); bool loadFile(SomfyShadeController *somfy, const char *filename = "/shades.cfg"); void end(); - bool seekRecordById(uint8_t id); + //bool seekRecordById(uint8_t id); bool validate(); }; #endif diff --git a/ConfigSettings.cpp b/ConfigSettings.cpp index 38dcb1b..fd77bdd 100644 --- a/ConfigSettings.cpp +++ b/ConfigSettings.cpp @@ -66,6 +66,8 @@ bool ConfigSettings::begin() { (uint16_t)((chipId >> 8) & 0xff), (uint16_t)chipId & 0xff); this->load(); + this->Security.begin(); + this->IP.begin(); this->WIFI.begin(); this->Ethernet.begin(); this->NTP.begin(); @@ -106,6 +108,7 @@ bool ConfigSettings::toJSON(JsonObject &obj) { obj["connType"] = static_cast(this->connType); return true; } +bool ConfigSettings::requiresAuth() { return this->Security.type != security_types::None; } bool ConfigSettings::fromJSON(JsonObject &obj) { if(obj.containsKey("ssdpBroadcast")) this->ssdpBroadcast = obj["ssdpBroadcast"]; if(obj.containsKey("hostname")) this->parseValueString(obj, "hostname", this->hostname, sizeof(this->hostname)); @@ -113,6 +116,7 @@ bool ConfigSettings::fromJSON(JsonObject &obj) { return true; } void ConfigSettings::print() { + this->Security.print(); Serial.printf("Connection Type: %u\n", (unsigned int) this->connType); this->NTP.print(); if(this->connType == conn_types::wifi || this->connType == conn_types::unset) this->WIFI.print(); @@ -226,8 +230,125 @@ bool NTPSettings::apply() { setenv("TZ", this->posixZone, 1); return true; } -WifiSettings::WifiSettings() {} +IPSettings::IPSettings() {} +bool IPSettings::begin() { + this->load(); + return true; +} +bool IPSettings::fromJSON(JsonObject &obj) { + if(obj.containsKey("dhcp")) this->dhcp = obj["dhcp"]; + this->parseIPAddress(obj, "ip", &this->ip); + this->parseIPAddress(obj, "gateway", &this->gateway); + this->parseIPAddress(obj, "subnet", &this->subnet); + this->parseIPAddress(obj, "dns1", &this->dns1); + this->parseIPAddress(obj, "dns2", &this->dns2); + return true; +} +bool IPSettings::toJSON(JsonObject &obj) { + IPAddress ipEmpty(0,0,0,0); + obj["dhcp"] = this->dhcp; + obj["ip"] = this->ip == ipEmpty ? "" : this->ip.toString(); + obj["gateway"] = this->gateway == ipEmpty ? "" : this->gateway.toString(); + obj["subnet"] = this->subnet == ipEmpty ? "" : this->subnet.toString(); + obj["dns1"] = this->dns1 == ipEmpty ? "" : this->dns1.toString(); + obj["dns2"] = this->dns2 == ipEmpty ? "" : this->dns2.toString(); + return true; +} +bool IPSettings::save() { + pref.begin("IP"); + pref.clear(); + pref.putBool("dhcp", this->dhcp); + pref.putString("ip", this->ip.toString()); + pref.putString("gateway", this->gateway.toString()); + pref.putString("subnet", this->subnet.toString()); + pref.putString("dns1", this->dns1.toString()); + pref.putString("dns2", this->dns2.toString()); + pref.end(); + return true; +} +bool IPSettings::load() { + pref.begin("IP"); + this->dhcp = pref.getBool("dhcp", true); + char buff[16]; + if(pref.isKey("ip")) { + pref.getString("ip", buff, sizeof(buff)); + this->ip.fromString(buff); + } + if(pref.isKey("gateway")) { + pref.getString("gateway", buff, sizeof(buff)); + this->gateway.fromString(buff); + } + if(pref.isKey("subnet")) { + pref.getString("subnet", buff, sizeof(buff)); + this->subnet.fromString(buff); + } + if(pref.isKey("dns1")) { + pref.getString("dns1", buff, sizeof(buff)); + this->dns1.fromString(buff); + } + if(pref.isKey("dns2")) { + pref.getString("dns2", buff, sizeof(buff)); + this->dns2.fromString(buff); + } + pref.end(); + return true; +} +bool SecuritySettings::begin() { + this->load(); + return true; +} +bool SecuritySettings::fromJSON(JsonObject &obj) { + if(obj.containsKey("type")) this->type = static_cast(obj["type"].as()); + this->parseValueString(obj, "username", this->username, sizeof(this->username)); + this->parseValueString(obj, "password", this->password, sizeof(this->password)); + this->parseValueString(obj, "pin", this->pin, sizeof(this->pin)); + if(obj.containsKey("permissions")) this->permissions = obj["permissions"]; + return true; +} +bool SecuritySettings::toJSON(JsonObject &obj) { + IPAddress ipEmpty(0,0,0,0); + obj["type"] = static_cast(this->type); + obj["username"] = this->username; + obj["password"] = this->password; + obj["pin"] = this->pin; + obj["permissions"] = this->permissions; + return true; +} +bool SecuritySettings::save() { + pref.begin("SEC"); + pref.clear(); + pref.putChar("type", static_cast(this->type)); + pref.putString("username", this->username); + pref.putString("password", this->password); + pref.putString("pin", this->pin); + pref.putChar("permissions", this->permissions); + pref.end(); + return true; +} +bool SecuritySettings::load() { + pref.begin("SEC"); + this->type = static_cast(pref.getChar("type", 0)); + if(pref.isKey("username")) pref.getString("username", this->username, sizeof(this->username)); + if(pref.isKey("password")) pref.getString("password", this->password, sizeof(this->password)); + if(pref.isKey("pin")) pref.getString("pin", this->pin, sizeof(this->pin)); + if(pref.isKey("permissions")) this->permissions = pref.getChar("permissions", this->permissions); + pref.end(); + return true; +} +void SecuritySettings::print() { + Serial.print("SECURITY Type:"); + Serial.print(static_cast(this->type)); + Serial.print(" Username:["); + Serial.print(this->username); + Serial.print("] Password:["); + Serial.print(this->password); + Serial.print("] Pin:["); + Serial.print(this->pin); + Serial.print("] Permissions:"); + Serial.println(this->permissions); +} +WifiSettings::WifiSettings() {} bool WifiSettings::begin() { this->load(); return true; @@ -318,7 +439,6 @@ bool EthernetSettings::begin() { return true; } bool EthernetSettings::fromJSON(JsonObject &obj) { - if(obj.containsKey("dhcp")) this->dhcp = obj["dhcp"]; if(obj.containsKey("boardType")) this->boardType = obj["boardType"]; if(obj.containsKey("phyAddress")) this->phyAddress = obj["phyAddress"]; if(obj.containsKey("CLKMode")) this->CLKMode = static_cast(obj["CLKMode"]); @@ -326,33 +446,21 @@ bool EthernetSettings::fromJSON(JsonObject &obj) { if(obj.containsKey("PWRPin")) this->PWRPin = obj["PWRPin"]; if(obj.containsKey("MDCPin")) this->MDCPin = obj["MDCPin"]; if(obj.containsKey("MDIOPin")) this->MDIOPin = obj["MDIOPin"]; - this->parseIPAddress(obj, "ip", &this->ip); - this->parseIPAddress(obj, "gateway", &this->gateway); - this->parseIPAddress(obj, "subnet", &this->subnet); - this->parseIPAddress(obj, "dns1", &this->dns1); - this->parseIPAddress(obj, "dns2", &this->dns2); return true; } bool EthernetSettings::toJSON(JsonObject &obj) { obj["boardType"] = this->boardType; obj["phyAddress"] = this->phyAddress; - obj["dhcp"] = this->dhcp; obj["CLKMode"] = static_cast(this->CLKMode); obj["phyType"] = static_cast(this->phyType); obj["PWRPin"] = this->PWRPin; obj["MDCPin"] = this->MDCPin; obj["MDIOPin"] = this->MDIOPin; - obj["ip"] = this->ip.toString(); - obj["gateway"] = this->gateway.toString(); - obj["subnet"] = this->subnet.toString(); - obj["dns1"] = this->dns1.toString(); - obj["dns2"] = this->dns2.toString(); return true; } bool EthernetSettings::save() { pref.begin("ETH"); pref.clear(); - pref.putBool("dhcp", this->dhcp); pref.putChar("boardType", this->boardType); pref.putChar("phyAddress", this->phyAddress); pref.putChar("phyType", static_cast(this->phyType)); @@ -360,17 +468,11 @@ bool EthernetSettings::save() { pref.putChar("PWRPin", this->PWRPin); pref.putChar("MDCPin", this->MDCPin); pref.putChar("MDIOPin", this->MDIOPin); - pref.putString("ip", this->ip.toString()); - pref.putString("gateway", this->gateway.toString()); - pref.putString("subnet", this->subnet.toString()); - pref.putString("dns1", this->dns1.toString()); - pref.putString("dns2", this->dns2.toString()); pref.end(); return true; } bool EthernetSettings::load() { pref.begin("ETH"); - this->dhcp = pref.getBool("dhcp", true); this->boardType = pref.getChar("boardType", this->boardType); this->phyType = static_cast(pref.getChar("phyType", ETH_PHY_LAN8720)); this->CLKMode = static_cast(pref.getChar("CLKMode", ETH_CLOCK_GPIO0_IN)); @@ -378,30 +480,10 @@ bool EthernetSettings::load() { this->PWRPin = pref.getChar("PWRPin", this->PWRPin); this->MDCPin = pref.getChar("MDCPin", this->MDCPin); this->MDIOPin = pref.getChar("MDIOPin", this->MDIOPin); - - char buff[16]; - pref.getString("ip", buff, sizeof(buff)); - this->ip.fromString(buff); - pref.getString("gateway", buff, sizeof(buff)); - this->gateway.fromString(buff); - pref.getString("subnet", buff, sizeof(buff)); - this->subnet.fromString(buff); - pref.getString("dns1", buff, sizeof(buff)); - this->dns1.fromString(buff); - pref.getString("dns2", buff, sizeof(buff)); - this->dns2.fromString(buff); pref.end(); return true; } void EthernetSettings::print() { Serial.println("Ethernet Settings"); Serial.printf("Board:%d PHYType:%d CLK:%d ADDR:%d PWR:%d MDC:%d MDIO:%d\n", this->boardType, this->phyType, this->CLKMode, this->phyAddress, this->PWRPin, this->MDCPin, this->MDIOPin); - Serial.print(" GATEWAY: "); - Serial.println(this->gateway); - Serial.print(" SUBNET: "); - Serial.println(this->subnet); - Serial.print(" DNS1: "); - Serial.println(this->dns1); - Serial.print(" DNS2: "); - Serial.println(this->dns2); } diff --git a/ConfigSettings.h b/ConfigSettings.h index ece6e06..96dbc7f 100644 --- a/ConfigSettings.h +++ b/ConfigSettings.h @@ -3,7 +3,7 @@ #ifndef configsettings_h #define configsettings_h -#define FW_VERSION "v1.7.3" +#define FW_VERSION "v2.0.0" enum DeviceStatus { DS_OK = 0, DS_ERROR = 1, @@ -55,12 +55,6 @@ class EthernetSettings: BaseSettings { public: EthernetSettings(); uint8_t boardType = 0; // These board types are enumerated in the ui and used to set the chip settings. - bool dhcp = true; - IPAddress ip; - IPAddress subnet = IPAddress(255,255,255,0); - IPAddress gateway; - IPAddress dns1; - IPAddress dns2; eth_phy_type_t phyType = ETH_PHY_LAN8720; eth_clock_mode_t CLKMode = ETH_CLOCK_GPIO0_IN; int8_t phyAddress = ETH_PHY_ADDR; @@ -76,6 +70,44 @@ class EthernetSettings: BaseSettings { void print(); }; +class IPSettings: BaseSettings { + public: + IPSettings(); + bool dhcp = true; + IPAddress ip; + IPAddress subnet = IPAddress(255,255,255,0); + IPAddress gateway = IPAddress(0,0,0,0); + IPAddress dns1 = IPAddress(0,0,0,0); + IPAddress dns2 = IPAddress(0,0,0,0); + bool begin(); + bool fromJSON(JsonObject &obj); + bool toJSON(JsonObject &obj); + bool load(); + bool save(); + void print(); +}; +enum class security_types : byte { + None = 0x00, + PinEntry = 0x01, + Password = 0x02 +}; +enum class security_permissions : byte { + ConfigOnly = 0x01 +}; +class SecuritySettings: BaseSettings { + public: + security_types type = security_types::None; + char username[33] = ""; + char password[33] = ""; + char pin[5] = ""; + uint8_t permissions = 0; + bool begin(); + bool save(); + bool load(); + void print(); + bool toJSON(JsonObject &obj); + bool fromJSON(JsonObject &obj); +}; class MQTTSettings: BaseSettings { public: bool enabled = false; @@ -97,7 +129,6 @@ enum class conn_types : byte { ethernet = 0x02, ethernetpref = 0x03 }; - class ConfigSettings: BaseSettings { public: char serverId[10] = ""; @@ -106,10 +137,13 @@ class ConfigSettings: BaseSettings { const char* fwVersion = FW_VERSION; bool ssdpBroadcast = true; uint8_t status; + IPSettings IP; WifiSettings WIFI; EthernetSettings Ethernet; NTPSettings NTP; MQTTSettings MQTT; + SecuritySettings Security; + bool requiresAuth(); bool fromJSON(JsonObject &obj); bool toJSON(JsonObject &obj); bool begin(); diff --git a/MQTT.cpp b/MQTT.cpp index bc3c4c4..70e7091 100644 --- a/MQTT.cpp +++ b/MQTT.cpp @@ -32,80 +32,112 @@ bool MQTTClass::loop() { return true; } void MQTTClass::receive(const char *topic, byte*payload, uint32_t length) { - //Serial.print("MQTT Topic:"); - //Serial.print(topic); - //Serial.print(" payload:"); - //for(uint32_t i=0; i= 0 && topic[ndx] != '/') ndx--; // Back off the set command - uint16_t end_command = --ndx; - // --------------+---- - // shades/1/target/set - while(ndx >= 0 && topic[ndx] != '/') ndx--; // Get the start of the leaf. - // --------+---------- - // shades/1/target/set - uint16_t start_command = ndx + 1; - uint16_t id_end = --ndx; - while(ndx >= 0 && topic[ndx] != '/') ndx--; - // ------+------------ - // shades/1/target/set - uint16_t id_start = ndx + 1; - char shadeId[4]; - char command[32]; - memset(command, 0x00, sizeof(command)); - memset(shadeId, 0x00, sizeof(shadeId)); - for(uint16_t i = 0;id_start <= id_end; i++) - shadeId[i] = topic[id_start++]; - for(uint16_t i = 0;start_command <= end_command; i++) - command[i] = topic[start_command++]; - - char value[10]; - memset(value, 0x00, sizeof(value)); - for(uint8_t i = 0; i < length; i++) - value[i] = payload[i]; + uint8_t len = strlen(topic); - Serial.print("MQTT Command:["); + uint8_t slashes = 0; + uint16_t ndx = strlen(topic) - 1; + while(ndx > 0) { + if(topic[ndx] == '/') slashes++; + if(slashes == 4) break; + ndx--; + } + char entityId[4]; + char command[32]; + char entityType[7]; + char value[10]; + memset(command, 0x00, sizeof(command)); + memset(entityId, 0x00, sizeof(entityId)); + memset(entityType, 0x00, sizeof(entityType)); + memset(value, 0x00, sizeof(value)); + uint8_t i = 0; + while(topic[ndx] == '/' && ndx < len) ndx++; + while(ndx < len) { + if(topic[ndx] != '/' && i < sizeof(entityType)) + entityType[i++] = topic[ndx]; + ndx++; + if(topic[ndx] == '/') break; + } + i = 0; + while(topic[ndx] == '/' && ndx < len) ndx++; + while(ndx < len) { + if(topic[ndx] != '/' && i < sizeof(entityId)) + entityId[i++] = topic[ndx]; + ndx++; + if(topic[ndx] == '/') break; + } + i = 0; + while(topic[ndx] == '/' && ndx < len) ndx++; + while(ndx < len) { + if(topic[ndx] != '/' && i < sizeof(command)) + command[i++] = topic[ndx]; + ndx++; + if(topic[ndx] == '/') break; + } + for(uint8_t j = 0; j < length && j < sizeof(value); j++) + value[j] = payload[j]; + + Serial.print("MQTT type:["); + Serial.print(entityType); + Serial.print("] command:["); Serial.print(command); - Serial.print("] shadeId:"); - Serial.print(shadeId); + Serial.print("] entityId:"); + Serial.print(entityId); Serial.print(" value:"); Serial.println(value); - SomfyShade* shade = somfy.getShadeById(atoi(shadeId)); - if (shade) { - int val = atoi(value); - if(strncmp(command, "target", sizeof(command)) == 0) { - if(val >= 0 && val <= 100) - shade->moveToTarget(atoi(value)); + if(strncmp(entityType, "shades", sizeof(entityType)) == 0) { + SomfyShade* shade = somfy.getShadeById(atoi(entityId)); + if (shade) { + int val = atoi(value); + if(strncmp(command, "target", sizeof(command)) == 0) { + if(val >= 0 && val <= 100) + shade->moveToTarget(atoi(value)); + } + if(strncmp(command, "tiltTarget", sizeof(command)) == 0) { + if(val >= 0 && val <= 100) + shade->moveToTiltTarget(atoi(value)); + } + else if(strncmp(command, "direction", sizeof(command)) == 0) { + if(val < 0) + shade->sendCommand(somfy_commands::Up); + else if(val > 0) + shade->sendCommand(somfy_commands::Down); + else + shade->sendCommand(somfy_commands::My); + } + else if(strncmp(command, "mypos", sizeof(command)) == 0) { + if(val >= 0 && val <= 100) + shade->setMyPosition(val); + } + else if(strncmp(command, "myTiltPos", sizeof(command)) == 0) { + if(val >= 0 && val <= 100) + shade->setMyPosition(shade->myPos, val); + } + else if(strncmp(command, "sunFlag", sizeof(command)) == 0) { + if(val >= 0) shade->sendCommand(somfy_commands::SunFlag); + else shade->sendCommand(somfy_commands::Flag); + } } - if(strncmp(command, "tiltTarget", sizeof(command)) == 0) { - if(val >= 0 && val <= 100) - shade->moveToTiltTarget(atoi(value)); - } - else if(strncmp(command, "direction", sizeof(command)) == 0) { - if(val < 0) - shade->sendCommand(somfy_commands::Up); - else if(val > 0) - shade->sendCommand(somfy_commands::Down); - else - shade->sendCommand(somfy_commands::My); - } - else if(strncmp(command, "mypos", sizeof(command)) == 0) { - if(val >= 0 && val <= 100) - shade->setMyPosition(val); - } - else if(strncmp(command, "myTiltPos", sizeof(command)) == 0) { - if(val >= 0 && val <= 100) - shade->setMyPosition(shade->myPos, val); - } - else if(strncmp(command, "sunFlag", sizeof(command)) == 0) { - if(val >= 0) shade->sendCommand(somfy_commands::SunFlag); - else shade->sendCommand(somfy_commands::Flag); + } + else if(strncmp(entityType, "groups", sizeof(entityType)) == 0) { + SomfyGroup* group = somfy.getGroupById(atoi(entityId)); + if (group) { + int val = atoi(value); + if(strncmp(command, "direction", sizeof(command)) == 0) { + if(val < 0) + group->sendCommand(somfy_commands::Up); + else if(val > 0) + group->sendCommand(somfy_commands::Down); + else + group->sendCommand(somfy_commands::My); + } } } } @@ -132,6 +164,7 @@ bool MQTTClass::connect() { this->subscribe("shades/+/mypos/set"); this->subscribe("shades/+/myTiltPos/set"); this->subscribe("shades/+/sunFlag/set"); + this->subscribe("groups/+/direction/set"); mqttClient.setCallback(MQTTClass::receive); this->lastConnect = millis(); return true; diff --git a/Network.cpp b/Network.cpp index 13228e5..56e5547 100644 --- a/Network.cpp +++ b/Network.cpp @@ -113,6 +113,13 @@ void Network::setConnected(conn_types connType) { Serial.print(" ("); Serial.print(this->strength); Serial.println("dbm)"); + if(settings.IP.dhcp) { + settings.IP.ip = WiFi.localIP(); + settings.IP.subnet = WiFi.subnetMask(); + settings.IP.gateway = WiFi.gatewayIP(); + settings.IP.dns1 = WiFi.dnsIP(0); + settings.IP.dns2 = WiFi.dnsIP(1); + } } else { Serial.print("Successfully Connected to Ethernet!!! "); @@ -123,6 +130,13 @@ void Network::setConnected(conn_types connType) { Serial.print(" "); Serial.print(ETH.linkSpeed()); Serial.println("Mbps"); + if(settings.IP.dhcp) { + settings.IP.ip = ETH.localIP(); + settings.IP.subnet = ETH.subnetMask(); + settings.IP.gateway = ETH.gatewayIP(); + settings.IP.dns1 = ETH.dnsIP(0); + settings.IP.dns2 = ETH.dnsIP(1); + } char buf[128]; snprintf(buf, sizeof(buf), "{\"connected\":true,\"speed\":%d,\"fullduplex\":%s}", ETH.linkSpeed(), ETH.fullDuplex() ? "true" : "false"); sockEmit.sendToClients("ethernet", buf); @@ -202,7 +216,11 @@ bool Network::connectWired() { if(!this->ethStarted) { this->ethStarted = true; WiFi.mode(WIFI_OFF); - + if(!settings.IP.dhcp) + if(!ETH.config(settings.IP.ip, settings.IP.gateway, settings.IP.subnet, settings.IP.dns1, settings.IP.dns2)) + ETH.config(INADDR_NONE, INADDR_NONE, INADDR_NONE, INADDR_NONE); + else + ETH.config(INADDR_NONE, INADDR_NONE, INADDR_NONE, INADDR_NONE); WiFi.onEvent(this->networkEvent); if(!ETH.begin(settings.Ethernet.phyAddress, settings.Ethernet.PWRPin, settings.Ethernet.MDCPin, settings.Ethernet.MDIOPin, settings.Ethernet.phyType, settings.Ethernet.CLKMode)) { Serial.println("Ethernet Begin failed"); @@ -253,7 +271,11 @@ bool Network::connectWiFi() { this->connectStart = millis(); Serial.print("Set hostname to:"); Serial.println(WiFi.getHostname()); - WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE, INADDR_NONE); + if(!settings.IP.dhcp) + if(!WiFi.config(settings.IP.ip, settings.IP.gateway, settings.IP.subnet, settings.IP.dns1, settings.IP.dns2)) + WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE, INADDR_NONE); + else + WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE, INADDR_NONE); WiFi.setSleep(false); WiFi.mode(WIFI_STA); delay(100); diff --git a/Somfy.cpp b/Somfy.cpp index e37eb81..3f7cca1 100644 --- a/Somfy.cpp +++ b/Somfy.cpp @@ -440,6 +440,14 @@ SomfyShade *SomfyShadeController::findShadeByRemoteAddress(uint32_t address) { } return nullptr; } +SomfyGroup *SomfyShadeController::findGroupByRemoteAddress(uint32_t address) { + for(uint8_t i = 0; i < SOMFY_MAX_GROUPS; i++) { + SomfyGroup &group = this->groups[i]; + if(group.getRemoteAddress() == address) return &group; + } + return nullptr; +} + bool SomfyShadeController::loadLegacy() { Serial.println("Loading Legacy shades using NVS"); pref.begin("Shades", true); @@ -554,6 +562,12 @@ SomfyShade * SomfyShadeController::getShadeById(uint8_t shadeId) { } return nullptr; } +SomfyGroup * SomfyShadeController::getGroupById(uint8_t groupId) { + for(uint8_t i = 0; i < SOMFY_MAX_GROUPS; i++) { + if(this->groups[i].getGroupId() == groupId) return &this->groups[i]; + } + return nullptr; +} void SomfyShade::clear() { this->setShadeId(255); this->setRemoteAddress(0); @@ -599,6 +613,10 @@ void SomfyShade::clear() { this->tiltTime = 7000; this->stepSize = 100; } +void SomfyGroup::clear() { + this->setGroupId(255); + this->setRemoteAddress(0); +} bool SomfyShade::linkRemote(uint32_t address, uint16_t rollingCode) { // Check to see if the remote is already linked. If it is // just return true after setting the rolling code @@ -632,6 +650,22 @@ bool SomfyShade::linkRemote(uint32_t address, uint16_t rollingCode) { } return false; } +bool SomfyGroup::linkShade(uint8_t shadeId) { + // Check to see if the shade is already linked. If it is just return true + for(uint8_t i = 0; i < SOMFY_MAX_GROUPED_SHADES; i++) { + if(this->linkedShades[i] == shadeId) { + return true; + } + } + for(uint8_t i = 0; i < SOMFY_MAX_GROUPED_SHADES; i++) { + if(this->linkedShades[i] == 0) { + this->linkedShades[i] = shadeId; + somfy.commit(); + return true; + } + } + return false; +} void SomfyShade::commit() { somfy.commit(); } void SomfyShade::commitShadePosition() { somfy.isDirty = true; @@ -694,7 +728,30 @@ bool SomfyShade::unlinkRemote(uint32_t address) { } return false; } +bool SomfyGroup::unlinkShade(uint8_t shadeId) { + for(uint8_t i = 0; i < SOMFY_MAX_GROUPED_SHADES; i++) { + if(this->linkedShades[i] == shadeId) { + this->linkedShades[i] = 0; + somfy.commit(); + return true; + } + } + return false; +} +bool SomfyGroup::hasShadeId(uint8_t shadeId) { + for(uint8_t i = 0; i < SOMFY_MAX_GROUPED_SHADES; i++) { + if(this->linkedShades[i] == shadeId) return true; + } + return false; +} bool SomfyShade::isAtTarget() { return this->currentPos == this->target && this->currentTiltPos == this->tiltTarget; } +bool SomfyShade::isInGroup() { + if(this->getShadeId() == 255) return false; + for(uint8_t i = 0; i < SOMFY_MAX_GROUPS; i++) { + if(somfy.groups[i].getGroupId() != 255 && somfy.groups[i].hasShadeId(this->getShadeId())) return true; + } + return false; +} void SomfyShade::checkMovement() { const uint64_t curTime = millis(); const bool sunFlag = this->flags & static_cast(somfy_flags_t::SunFlag); @@ -1096,7 +1153,6 @@ void SomfyShade::publish() { } } void SomfyShade::emitState(const char *evt) { this->emitState(255, evt); } -int8_t SomfyShade::transformPosition(float fpos) { return static_cast(this->flipPosition && fpos >= 0.00f ? floor(100.0f - fpos) : floor(fpos)); } void SomfyShade::emitState(uint8_t num, const char *evt) { char buf[420]; if(this->tiltType != tilt_types::none) @@ -1114,12 +1170,16 @@ void SomfyShade::emitState(uint8_t num, const char *evt) { else sockEmit.sendToClient(num, evt, buf); if(mqtt.connected()) { char topic[32]; + snprintf(topic, sizeof(topic), "shades/%u/shadeType", this->shadeId); + mqtt.publish(topic, static_cast(this->shadeType)); snprintf(topic, sizeof(topic), "shades/%u/position", this->shadeId); mqtt.publish(topic, this->transformPosition(this->currentPos)); snprintf(topic, sizeof(topic), "shades/%u/direction", this->shadeId); mqtt.publish(topic, this->direction); snprintf(topic, sizeof(topic), "shades/%u/target", this->shadeId); mqtt.publish(topic, this->transformPosition(this->target)); + snprintf(topic, sizeof(topic), "shades/%u/remoteAddress", this->shadeId); + mqtt.publish(topic, this->getRemoteAddress()); snprintf(topic, sizeof(topic), "shades/%u/lastRollingCode", this->shadeId); mqtt.publish(topic, this->lastRollingCode); snprintf(topic, sizeof(topic), "shades/%u/mypos", this->shadeId); @@ -1148,6 +1208,40 @@ void SomfyShade::emitState(uint8_t num, const char *evt) { } } } +void SomfyGroup::emitState(const char *evt) { this->emitState(255, evt); } +void SomfyGroup::emitState(uint8_t num, const char *evt) { + ClientSocketEvent e(evt); + char buf[30]; + snprintf(buf, sizeof(buf), "{\"groupId\":%d,", this->groupId); + e.appendMessage(buf); + snprintf(buf, sizeof(buf), "\"remoteAddress\":%d,", this->getRemoteAddress()); + e.appendMessage(buf); + snprintf(buf, sizeof(buf), "\"name\":\"%s\",", this->name); + e.appendMessage(buf); + snprintf(buf, sizeof(buf), "\"shades\":["); + e.appendMessage(buf); + for(uint8_t i = 0; i < SOMFY_MAX_GROUPED_SHADES; i++) { + if(this->linkedShades[i] != 255) { + snprintf(buf, sizeof(buf), "%s%d", i != 0 ? "," : "", this->linkedShades[i]); + e.appendMessage(buf); + } + } + e.appendMessage("]}"); + if(num >= 255) sockEmit.sendToClients(&e); + else sockEmit.sendToClient(num, &e); + if(mqtt.connected()) { + char topic[32]; + snprintf(topic, sizeof(topic), "groups/%u/type", this->groupId); + mqtt.publish(topic, static_cast(this->groupType)); + snprintf(topic, sizeof(topic), "groups/%u/remoteAddress", this->groupId); + mqtt.publish(topic, this->getRemoteAddress()); + snprintf(topic, sizeof(topic), "groups/%u/lastRollingCode", this->groupId); + mqtt.publish(topic, this->lastRollingCode); + snprintf(topic, sizeof(topic), "groups/%u/direction", this->groupId); + mqtt.publish(topic, this->direction); + } +} +int8_t SomfyShade::transformPosition(float fpos) { return static_cast(this->flipPosition && fpos >= 0.00f ? floor(100.0f - fpos) : floor(fpos)); } bool SomfyShade::isIdle() { return this->direction == 0 && this->tiltDirection == 0; } void SomfyShade::processWaitingFrame() { if(this->shadeId == 255) { @@ -1355,19 +1449,15 @@ void SomfyShade::processFrame(somfy_frame_t &frame, bool internal) { case somfy_commands::SunFlag: { const bool isWindy = this->flags & static_cast(somfy_flags_t::Windy); - this->flags |= static_cast(somfy_flags_t::SunFlag); - if (!isWindy) { const bool isSunny = this->flags & static_cast(somfy_flags_t::Sunny); - if (isSunny && this->sunDone) this->target = this->myPos >= 0 ? this->myPos : 100.0f; else if (!isSunny && this->noSunDone) this->target = 0.0f; } - somfy.isDirty = true; this->emitState(); } @@ -1464,6 +1554,85 @@ void SomfyShade::processFrame(somfy_frame_t &frame, bool internal) { //if(dir == 0 && this->tiltType == tilt_types::tiltmotor && this->tiltDirection != 0) this->setTiltMovement(0); this->setMovement(dir); } +void SomfyShade::processInternalCommand(somfy_commands cmd, uint8_t repeat) { + // The reason why we are processing all frames here is so + // any linked remotes that may happen to be on the same ESPSomfy RTS + // device can trigger the appropriate actions. + if(this->shadeId == 255) return; + const uint64_t curTime = millis(); + int8_t dir = 0; + this->moveStart = this->tiltStart = curTime; + this->startPos = this->currentPos; + this->startTiltPos = this->currentTiltPos; + // If the command is coming from a remote then we are aborting all these positioning operations. + switch(cmd) { + case somfy_commands::Up: + if(this->tiltType == tilt_types::tiltmotor) { + if(repeat >= TILT_REPEATS) + this->tiltTarget = 0.0f; + else + this->target = 0.0f; + } + else + this->target = this->tiltTarget = 0.0f; + break; + case somfy_commands::Down: + if (!this->windLast || (curTime - this->windLast) >= SOMFY_NO_WIND_REMOTE_TIMEOUT) { + if(this->tiltType == tilt_types::tiltmotor) { + if(repeat >= TILT_REPEATS) + this->tiltTarget = 100.0f; + else + this->target = 100.0f; + } + else { + this->target = 100.0f; + if(this->tiltType != tilt_types::none) this->tiltTarget = 100.0f; + } + } + break; + case somfy_commands::My: + if(this->isIdle()) { + if(this->myTiltPos >= 0.0f && this->myTiltPos >= 100.0f) this->tiltTarget = this->myTiltPos; + if(this->myPos >= 0.0f && this->myPos <= 100.0f) this->target = this->myPos; + } + else { + this->target = this->currentPos; + this->tiltTarget = this->currentTiltPos; + } + break; + case somfy_commands::StepUp: + // With the step commands and integrated shades + // the motor must tilt in the direction first then move + // so we have to calculate the target with this in mind. + if(this->tiltType == tilt_types::integrated && this->currentTiltPos > 0.0f) { + if(this->tiltTime == 0 || this->stepSize == 0) return; + this->tiltTarget = max(0.0f, this->currentTiltPos - (100.0f/(static_cast(this->tiltTime/static_cast(this->stepSize))))); + } + else if(this->currentPos > 0.0f) { + if(this->downTime == 0 || this->stepSize == 0) return; + this->target = max(0.0f, this->currentPos - (100.0f/(static_cast(this->upTime/static_cast(this->stepSize))))); + } + break; + case somfy_commands::StepDown: + dir = 1; + // With the step commands and integrated shades + // the motor must tilt in the direction first then move + // so we have to calculate the target with this in mind. + if(this->tiltType == tilt_types::integrated && this->currentTiltPos < 100.0f) { + if(this->tiltTime == 0 || this->stepSize == 0) return; + this->tiltTarget = min(100.0f, this->currentTiltPos + (100.0f/(static_cast(this->tiltTime/static_cast(this->stepSize))))); + } + else if(this->currentPos < 100.0f) { + if(this->downTime == 0 || this->stepSize == 0) return; + this->target = min(100.0f, this->currentPos + (100.0f/(static_cast(this->downTime/static_cast(this->stepSize))))); + } + break; + default: + dir = 0; + break; + } + this->setMovement(dir); +} void SomfyShade::setTiltMovement(int8_t dir) { int8_t currDir = this->tiltDirection; if(dir == 0) { @@ -1617,6 +1786,32 @@ void SomfyShade::sendCommand(somfy_commands cmd, uint8_t repeat) { SomfyRemote::sendCommand(cmd, repeat); } } +void SomfyGroup::sendCommand(somfy_commands cmd, uint8_t repeat) { + // This sendCommand function will always be called externally. sendCommand at the remote level + // is expected to be called internally when the motor needs commanded. + if(this->bitLength == 0) this->bitLength = somfy.transceiver.config.type; + SomfyRemote::sendCommand(cmd, repeat); + switch(cmd) { + case somfy_commands::My: + this->direction = 0; + break; + case somfy_commands::Up: + this->direction = -1; + break; + case somfy_commands::Down: + this->direction = 1; + break; + } + this->emitState(); + for(uint8_t i = 0; i < SOMFY_MAX_GROUPED_SHADES; i++) { + if(this->linkedShades[i] != 0) { + SomfyShade * shade = somfy.getShadeById(this->linkedShades[i]); + if(shade) shade->processInternalCommand(cmd, repeat); + } + } + +} + void SomfyShade::sendTiltCommand(somfy_commands cmd) { if(cmd == somfy_commands::Up) { SomfyRemote::sendCommand(cmd, this->tiltType == tilt_types::tiltmotor ? TILT_REPEATS : 1); @@ -1718,6 +1913,7 @@ bool SomfyShade::save() { this->commit(); return true; } +bool SomfyGroup::save() { somfy.commit(); return true; } bool SomfyShade::fromJSON(JsonObject &obj) { if(obj.containsKey("name")) strlcpy(this->name, obj["name"], sizeof(this->name)); if(obj.containsKey("upTime")) this->upTime = obj["upTime"]; @@ -1775,6 +1971,18 @@ bool SomfyShade::fromJSON(JsonObject &obj) { if(obj.containsKey("flags")) this->flags = obj["flags"]; return true; } +bool SomfyShade::toJSONRef(JsonObject &obj) { + obj["shadeId"] = this->getShadeId(); + obj["name"] = this->name; + obj["remoteAddress"] = this->m_remoteAddress; + obj["paired"] = this->paired; + obj["shadeType"] = static_cast(this->shadeType); + obj["bitLength"] = this->bitLength; + obj["proto"] = static_cast(this->proto); + obj["flags"] = this->flags; + SomfyRemote::toJSON(obj); + return true; +} bool SomfyShade::toJSON(JsonObject &obj) { //Serial.print("Serializing Shade:"); //Serial.print(this->getShadeId()); @@ -1806,6 +2014,7 @@ bool SomfyShade::toJSON(JsonObject &obj) { obj["flags"] = this->flags; obj["flipCommands"] = this->flipCommands; obj["flipPosition"] = this->flipPosition; + obj["inGroup"] = this->isInGroup(); SomfyRemote::toJSON(obj); JsonArray arr = obj.createNestedArray("linkedRemotes"); for(uint8_t i = 0; i < SOMFY_MAX_LINKED_REMOTES; i++) { @@ -1848,7 +2057,7 @@ bool SomfyGroup::toJSON(JsonObject &obj) { SomfyShade *shade = somfy.getShadeById(shadeId); if(shade) { JsonObject lsd = arr.createNestedObject(); - shade->toJSON(lsd); + shade->toJSONRef(lsd); } } } @@ -1908,6 +2117,26 @@ uint8_t SomfyShadeController::getNextShadeId() { } return 255; } +uint8_t SomfyShadeController::getNextGroupId() { + // There is no shortcut for this since the deletion of + // a group in the middle makes all of this very difficult. + for(uint8_t i = 1; i < SOMFY_MAX_GROUPS - 1; i++) { + bool id_exists = false; + for(uint8_t j = 0; j < SOMFY_MAX_GROUPS; j++) { + SomfyGroup *group = &this->groups[j]; + if(group->getGroupId() == i) { + id_exists = true; + break; + } + } + if(!id_exists) { + Serial.print("Got next Group Id:"); + Serial.print(i); + return i; + } + } + return 255; +} uint8_t SomfyShadeController::shadeCount() { uint8_t count = 0; for(uint8_t i = 0; i < SOMFY_MAX_SHADES; i++) { @@ -1915,19 +2144,27 @@ uint8_t SomfyShadeController::shadeCount() { } return count; } -uint32_t SomfyShadeController::getNextRemoteAddress(uint8_t shadeId) { - uint32_t address = this->startingAddress + shadeId; +uint8_t SomfyShadeController::groupCount() { + uint8_t count = 0; + for(uint8_t i = 0; i < SOMFY_MAX_GROUPS; i++) { + if(this->groups[i].getGroupId() != 255) count++; + } + return count; +} +uint32_t SomfyShadeController::getNextRemoteAddress(uint8_t id) { + uint32_t address = this->startingAddress + id; uint8_t i = 0; + // The assumption here is that the max number of groups will + // always be less than or equal to the max number of shades. while(i < SOMFY_MAX_SHADES) { - if(this->shades[i].getShadeId() != 255) { - if(this->shades[i].getRemoteAddress() == address) { - address++; - i = 0; // Start over we cannot share addresses. - } - else i++; + if((i < SOMFY_MAX_SHADES && this->shades[i].getShadeId() != 255 && this->shades[i].getRemoteAddress() == address) || + (i < SOMFY_MAX_GROUPS && this->groups[i].getGroupId() != 255 && this->groups[i].getRemoteAddress() == address)) { + address++; + i = 0; // Start over we cannot share addresses. } else i++; } + i = 0; return address; } SomfyShade *SomfyShadeController::addShade(JsonObject &obj) { @@ -1999,6 +2236,29 @@ SomfyShade *SomfyShadeController::addShade() { } return shade; } +SomfyGroup *SomfyShadeController::addGroup(JsonObject &obj) { + SomfyGroup *group = this->addGroup(); + if(group) { + group->fromJSON(obj); + group->save(); + group->emitState("groupAdded"); + } + return group; +} +SomfyGroup *SomfyShadeController::addGroup() { + uint8_t groupId = this->getNextGroupId(); + // So the next shade id will be the first one we run into with an id of 255 so + // if it gets deleted in the middle then it will get the first slot that is empty. + // There is no apparent way around this. In the future we might actually add an indexer + // to it for sorting later. + if(groupId == 255) return nullptr; + SomfyGroup *group = &this->groups[groupId - 1]; + if(group) { + group->setGroupId(groupId); + this->isDirty = true; + } + return group; +} somfy_commands SomfyRemote::transformCommand(somfy_commands cmd) { if(this->flipCommands) { switch(cmd) { @@ -2092,6 +2352,17 @@ bool SomfyShadeController::deleteShade(uint8_t shadeId) { this->commit(); return true; } +bool SomfyShadeController::deleteGroup(uint8_t groupId) { + for(uint8_t i = 0; i < SOMFY_MAX_GROUPS; i++) { + if(this->groups[i].getGroupId() == groupId) { + shades[i].emitState("groupRemoved"); + this->groups[i].clear(); + } + } + this->commit(); + return true; +} + bool SomfyShadeController::loadShadesFile(const char *filename) { return ShadeConfigFile::load(this, filename); } uint16_t SomfyRemote::getNextRollingCode() { pref.begin("ShadeCodes"); @@ -2113,18 +2384,28 @@ uint16_t SomfyRemote::setRollingCode(uint16_t code) { } bool SomfyShadeController::toJSON(DynamicJsonDocument &doc) { doc["maxShades"] = SOMFY_MAX_SHADES; + doc["maxGroups"] = SOMFY_MAX_GROUPS; + doc["maxGroupedShades"] = SOMFY_MAX_GROUPED_SHADES; doc["maxLinkedRemotes"] = SOMFY_MAX_LINKED_REMOTES; doc["startingAddress"] = this->startingAddress; JsonObject objRadio = doc.createNestedObject("transceiver"); this->transceiver.toJSON(objRadio); - JsonArray arr = doc.createNestedArray("shades"); + JsonArray arrShades = doc.createNestedArray("shades"); for(uint8_t i = 0; i < SOMFY_MAX_SHADES; i++) { SomfyShade *shade = &this->shades[i]; if(shade->getShadeId() != 255) { - JsonObject oshade = arr.createNestedObject(); + JsonObject oshade = arrShades.createNestedObject(); shade->toJSON(oshade); } } + JsonArray arrGroups = doc.createNestedArray("groups"); + for(uint8_t i = 0; i < SOMFY_MAX_GROUPS; i++) { + SomfyGroup *group = &this->groups[i]; + if(group->getGroupId() != 255) { + JsonObject ogroup = arrGroups.createNestedObject(); + group->toJSON(ogroup); + } + } return true; } bool SomfyShadeController::toJSON(JsonObject &obj) { @@ -2133,11 +2414,13 @@ bool SomfyShadeController::toJSON(JsonObject &obj) { obj["startingAddress"] = this->startingAddress; JsonObject oradio = obj.createNestedObject("transceiver"); this->transceiver.toJSON(oradio); - JsonArray arr = obj.createNestedArray("shades"); - this->toJSON(arr); + JsonArray arrShades = obj.createNestedArray("shades"); + this->toJSONShades(arrShades); + JsonArray arrGroups = obj.createNestedArray("groups"); + this->toJSONGroups(arrGroups); return true; } -bool SomfyShadeController::toJSON(JsonArray &arr) { +bool SomfyShadeController::toJSONShades(JsonArray &arr) { for(uint8_t i = 0; i < SOMFY_MAX_SHADES; i++) { SomfyShade &shade = this->shades[i]; if(shade.getShadeId() != 255) { @@ -2147,6 +2430,16 @@ bool SomfyShadeController::toJSON(JsonArray &arr) { } return true; } +bool SomfyShadeController::toJSONGroups(JsonArray &arr) { + for(uint8_t i = 0; i < SOMFY_MAX_GROUPS; i++) { + SomfyGroup &group = this->groups[i]; + if(group.getGroupId() != 255) { + JsonObject ogroup = arr.createNestedObject(); + group.toJSON(ogroup); + } + } + return true; +} void SomfyShadeController::loop() { this->transceiver.loop(); for(uint8_t i = 0; i < SOMFY_MAX_SHADES; i++) { @@ -2183,7 +2476,6 @@ static const uint32_t tempo_if_gap = 30415; // Gap between frames static int16_t bitMin = SYMBOL * TOLERANCE_MIN; static somfy_rx_t somfy_rx; static somfy_rx_queue_t rx_queue; - bool somfy_tx_queue_t::pop(somfy_tx_t *tx) { // Read the oldest index. for(int8_t i = MAX_TX_BUFFER - 1; i >= 0; i--) { @@ -2232,7 +2524,6 @@ void somfy_rx_queue_t::init() { memset(&this->index[0], 0xFF, MAX_RX_BUFFER); this->length = 0; } - bool somfy_rx_queue_t::pop(somfy_rx_t *rx) { // Read off the data from the oldest index. //Serial.println("Popping RX Queue"); @@ -2328,7 +2619,6 @@ void Transceiver::sendFrame(byte *frame, uint8_t sync, uint8_t bitLength) { delayMicroseconds(30415); */ } - void RECEIVE_ATTR Transceiver::handleReceive() { static unsigned long last_time = 0; const long time = micros(); diff --git a/Somfy.h b/Somfy.h index cc9fdd7..d76d958 100644 --- a/Somfy.h +++ b/Somfy.h @@ -46,6 +46,9 @@ enum class somfy_commands : byte { // Command extensions for 80 bit frames StepUp = 0x8B }; +enum class group_types : byte { + channel = 0x00 +}; enum class shade_types : byte { roller = 0x00, blind = 0x01, @@ -227,6 +230,7 @@ class SomfyShade : public SomfyRemote { float myTiltPos = -1.0f; SomfyLinkedRemote linkedRemotes[SOMFY_MAX_LINKED_REMOTES]; bool paired = false; + bool toJSONRef(JsonObject &obj); bool fromJSON(JsonObject &obj); bool toJSON(JsonObject &obj) override; char name[21] = ""; @@ -238,8 +242,10 @@ class SomfyShade : public SomfyRemote { uint16_t stepSize = 100; bool save(); bool isIdle(); + bool isInGroup(); void checkMovement(); void processFrame(somfy_frame_t &frame, bool internal = false); + void processInternalCommand(somfy_commands cmd, uint8_t repeat = 1); void setTiltMovement(int8_t dir); void setMovement(int8_t dir); void setTarget(float target); @@ -267,12 +273,22 @@ class SomfyGroup : public SomfyRemote { protected: uint8_t groupId = 255; public: + group_types groupType = group_types::channel; + int8_t direction = 0; // 0 = stopped, 1=down, -1=up. char name[21] = ""; uint8_t linkedShades[SOMFY_MAX_GROUPED_SHADES]; void setGroupId(uint8_t id) { groupId = id; } uint8_t getGroupId() { return groupId; } + bool save(); + void clear(); bool fromJSON(JsonObject &obj); bool toJSON(JsonObject &obj); + bool linkShade(uint8_t shadeId); + bool unlinkShade(uint8_t shadeId); + bool hasShadeId(uint8_t shadeId); + void emitState(const char *evt = "groupState"); + void emitState(uint8_t num, const char *evt = "groupState"); + void sendCommand(somfy_commands cmd, uint8_t repeat = 1); }; struct transceiver_config_t { bool printBuffer = false; @@ -280,8 +296,8 @@ struct transceiver_config_t { uint8_t type = 56; // 56 or 80 bit protocol. radio_proto proto = radio_proto::RTS; uint8_t SCKPin = 18; - uint8_t TXPin = 12; - uint8_t RXPin = 13; + uint8_t TXPin = 13; + uint8_t RXPin = 12; uint8_t MOSIPin = 23; uint8_t MISOPin = 19; uint8_t CSNPin = 5; @@ -381,22 +397,31 @@ class SomfyShadeController { bool isDirty = false; uint32_t startingAddress; uint8_t getNextShadeId(); + uint8_t getNextGroupId(); uint32_t getNextRemoteAddress(uint8_t shadeId); SomfyShadeController(); Transceiver transceiver; SomfyShade *addShade(); SomfyShade *addShade(JsonObject &obj); + SomfyGroup *addGroup(); + SomfyGroup *addGroup(JsonObject &obj); bool deleteShade(uint8_t shadeId); + bool deleteGroup(uint8_t groupId); bool begin(); void loop(); void end(); SomfyShade shades[SOMFY_MAX_SHADES]; + SomfyGroup groups[SOMFY_MAX_GROUPS]; bool toJSON(DynamicJsonDocument &doc); - bool toJSON(JsonArray &arr); bool toJSON(JsonObject &obj); + bool toJSONShades(JsonArray &arr); + bool toJSONGroups(JsonArray &arr); uint8_t shadeCount(); + uint8_t groupCount(); SomfyShade * getShadeById(uint8_t shadeId); + SomfyGroup * getGroupById(uint8_t groupId); SomfyShade * findShadeByRemoteAddress(uint32_t address); + SomfyGroup * findGroupByRemoteAddress(uint32_t address); void sendFrame(somfy_frame_t &frame, uint8_t repeats = 0); void processFrame(somfy_frame_t &frame, bool internal = false); void emitState(uint8_t num = 255); diff --git a/SomfyController.ino.esp32.bin b/SomfyController.ino.esp32.bin index e52917629e42f768d4b7759bbfc243bf1b35dfe7..30cbdd05cb99839d5f89b50bc4645abf73f9c9f7 100644 GIT binary patch delta 378034 zcmb@v3tSZC{y+ZA?9Q-@>_u+7BIp7VYEU#}l8KfXV==YE}M zW@j#LPdWPAkkUxG;H4FvS87+fpPlgQ?Cw1tDR}0fZPCtAYaYqmbLr{FAG6&%`?H({ z-_Fs;6iVr3nsiIQ+^p=Janm2n85BE5DUJ9BU7@dL$IuZ z>G$P4&|*$WAEDir^FW_Ieb^{edModoY*OBlPpVn7QMcKe*O`r+HEkNjJ!?*pHfyRj zFK04({oKTy*|2!i$)DAGO4gLz95hW)@1e71-8Vgl4I7s}ZuITL?;4SMb3DtMivejg zU)j@IN5yEO(OrkO6Sb{P&+Zfba9LW^^d87Ea>&NbnKFesQK1*_%$cm^c{4ISA9*d? z8?}A(c$!X7ROAkWRr60G=@5qH7tMZvG7sJx%hWk}ewR7kp{vcBje%#3+!e>7?Pz#W zk;Y6{HZ%I|7L~{=<-crgbg*Jb+oQw09Q47%X3s`^Sw@fMk+Te}`} z-cjJqca~TamDn~S@`NAMY%PnHQoSt2l65GonY8aJC zLV(v&Hl}OO0Iz}gq*1dp8cw1~C(pptf$AwJ$eWHX5dAQ^fX|p^RDm{i_NF1AzIOPXU)M(*@NZv@5$V*Ki!i11 z%`KXlSLW!}v#g|hXxaE~V{AsP3^nG|vW?x|E!)(6zlRwOH>)5g9|^L)STu6x_o2Y7 zub3$c`xMPAFru7+&RjTU_Vj`xpWlo^!!iXOw(ra=^iRRfo1Q%_r>M{nrcc2VBG~CO zv!>b~iN+S3S0_rq`ie^Q!sr5;Adua{thqVf0K|$AWoLSgyPmp1 z#w>3PMw1UmPw*;?=JEzK1S9B>xZA_V>*WlzKnQLsXdNH2RoZd@2+ zN3C|=3~~nA`JqjiSFQH4zP%syI1k!+0x0rXH=pp1omat@`mUW%de6?2pbM<-`@; zNDth--_Fg@hrVy;H3#gx9KKDJZmu1&a}D7upwENdH&-tK--s~H@Vf|H)ylTuS+|2T z1ac!WC$Qw%vLSs&c}l;v^GeW`=iIywM0u(JI-&E$+X#6-Wb?0f-lNIRgMPI0<3AzX zCFK3*7Qb`wI}X2#z%vy7`Ifv*O0@Axj&BjO?7a~Fb6MAcJORa1@v17w?uxmeybUs&fEEY^3LiZ zGc`|DjFZ=a*2X%y8I%qx0@Z<%x;c3humW}`_y%A+WM7<_+fdWc=K>3WRiLGyqo4{< z5%k3%pMME>XLl!`nT|IUiyN(7~V zZUv14O#OjXpCyI71%YQ-k+&zaU=Ybvr>7bWE zb)d5#^IV=h5R?W=2TcXd0X+&T0abvufOdkun`O|u;6DL<54r*ho5z!*K>a}Elj=pE zfAU>W%m8`3hLymly*xSX0AB;z3wjsyAJB2oXP__UmHl%6KFvMbXoNg3QUzbSAB_h& z5wzl1{HPMItqOS5%ljH4s1OYa8VSk+`SgTKuaZf3adz4G!adr2kKx+rMKaYdL^PmC z5G7mlu;G&kpJM39$N%?`lLyU5Un_>q>*ur8%(==J2KStuFBeUX2>kbIG$&}^>YdTc zzm@v!13&*Ep4=ZksxJayp3akfBKapgl9C(n1+BC%Xi+o=0Vfs@d24&BB9f+(#1l@uhR8_uGqpn zB9Jfe4Nx+xP>FFaVeVv;eb#R^Y?HK;Q~sJK(>8LBKbGtUY5N043m;K)F3?@(LIe6k#SL z1ndh`fWv?)a569e_z=(nTm!TMtAK&P_krzzr-4Dh-+(q?s5vFs4(tPT07n3wz-(Z9 z;3L4`_GrnCU_zjH9T*Dy2p9(Z2^bCxR#K8(zyUxvFdf(dmpe+F5 zfZc&+;836f91B!|^MFiaY&lQ@ZU)N0H%K3k3<5n8m@mly{0(RV23rszuoqAP-UL*E zw*v!!nLrD0HqZ)O3=9OW0=5G_2Mhx42HJqffOg%u4V(_V9ykLy8h9UY z8ZZyIAkdSNtbPD)1g)0B|1A z0$c{P0xN-mz}>)hz+=E5;CCJ{bj)H3LKOi!0%?Dk2y_B7fbD@Zfx*BhfFZz2U?}hn zU>NWOFdTRR=mMH-=&ZmnU4RJ5U8i z*-NoGVmLq3HTS#3=DT7955cJ0!IS_fYX2$;6p%GjA03sfZKsG@Drd3 z*bFomdl>7{9uYw?8mIz`fB`@qXaVj3I)O)l?SU77!NAa9GzBmT7z&&Q3?33vxk1{ML$z|}wn_!^KM#o7XtfIk6cpv#rgJ=p|ikP88T zlYt8Gai9u(2^au8=&Js}B@H%Lhek@}BZ8Y}A|8ec0U~;~Ag_8~j3}Rqz_e@BpuXj|3kB-VC0Gmo~5ZmjdZ*&^-my z!uTzqO`w}|Tj)QKRmgLuhwfwfyQq3#HC- z#Lj2Kcn!#h>%gx9t$S9VT`Wx;Jock7PBhU=wok+OYVa}^>WRPp` zcUQ3Y2Yv}^^2$GZ`72(%8y8F6!VhGI^Lo%(kTVN&6X>VR>Jy8lXvs6+ zdpB=Q{U9fSdV#E<-`iE%Ry^FPlI-WEY6@%+7At) zF2iIdOG@=ak4hsXPmdMh{A&8HG@SQ_{vz;d8_8tr4@v|{tHb$%RpI=(vbGclebMYG zeWoD2@$19+5YPZnBq*;%_6Wt2b>Vy)=o8R+P&Q~S=xvY!XVQ_4Wbz{$g(1Im(EnwR z*bvUGpg$1Tx1g^;y&?DBFw)1g#YQ;XQ6A2RgOWjmKm$R!|AXSotL;mr>rI}Fl_|+* zR;1uE`Nqjv+4pAU<;|j6U`^0BLw^Z$EY-zVg0_K(zXWm(YfGD;d$X0D;-J5{TV0%k ziVnC1)q{@&UjtlltE&f}0D%=2We*zECVdgOV5EyL0p*T#>EAsi^}LO8wGBkM5+3+( z%k3_{8&m=E>6(Zi_4iaQqY)YONuyl)y(Q9|K#Fi;8AYg{Dv|nlNG=s}O9Gq%f#N~F z1Tw%c040KcAM4_8fj$8d-)S6*d=(vp{%kAz`nz2`3p5Wz{F|W0yInWXe}1|T{9_=W zgD>#|52D1N??AtR4m_yu`=>PC^LYu{=Lr}87!?1ci@yMQ3+NV5K4{D`7tet{9_R*< z>?6|uHzMEGw&7m6wf?pzU7j{htpoUYUj`;2F$C}@?$eXb=j%gCjP$-lN$=xZ```AY z$Hkw7@g30Or%NXtQCgeG+?op ze}AQmAMugL$6Nz_iChZ@uQei`UFPEVt#WaaeRQ>dFnoNv+bUal(s_Q~VkqKYXfb^F zQVZ`3cr~`pz}%}c;6j3=%kn0Cy%$GUxcGQv;E(71wl179aCo_k-_$Atr@a|Cyj)*j zCUw<6DwTS9cIcD9B01-u$tXCU~h z4D3RJr2EU8@P}SJUGL&wAOj_hep?q#8OTRf9c-0>LT?80>#EUH2T6e)HJgO{5Xn9w{eL6!ZEbtdE4S8rqTQZ0POSs@cwYuekr)E_6Zh#!=kxU;B}RH*qNMln zt^GaG9yi|u<8Pqqu5SJV=th(}1^5eUW*LZZpO=V#v?p$U3^Qm=E1q=2TFD#0zj~eF zw+(p6%ZJ3dc?TbPe9Se_m&pIZ?Fd)eyCp;a%a?5H2e$R~EFEMh%5G{g6ytLL|BA?G zrwnYkDg$?VbsK@?H`j~L_jB`Sk%6^0y1Cb;amv77J)mfnfg8Nl2z~Wa>!nVz=Z^bP zx%qB>E2t9G8FD1(jRH6S0`$&oH~*Auz!DJ2J|g{pBl2x+d)+Iy*6+a`yY1mw~&DsAH~2obQ-4& zbVgOZ+$sZid8-k6eM6ZPRh_*_I^KQ=*RokYP6Mu7krKP~#2JbDyTqnIQJ_94vqvOw z%O&-nGTTh-c1bOj**;>ANNSnPPD{P?!8@coLns2LdyCB2$FjP`#LmbW`nes_z@ZWQ zO^khOQkMj=-%TIjeBrc3z0i*RXi*#5v6WW!U_1619c%w&Ri6!Fiv!ioL2ON+x+#cN z2dd>k?9q0*p82wL$1Q2mNVS*xegK=K7P0%(1#B)9k4frsi9I8!M*`Sq(wm5XgQ|WO zfHPzm-%!<40qh8|pQ-BS0jx=#Q2po2(oiX2oyuO2i_Q8iyQFcW;(Gck!8xi4W!P&{ zPnp=qCfrd$xq>Ky2(>Hg1B7hvcn4z-s+T49q_ptw8h!sRX@SQQqQ>|FI3p0SoB9B| z9tVAeMkH<*Fj{>@Vtqnhme}x)r4rjp6^jHqxq)5PA0^g5y(2Zr01ozX12!! z{)kDfG_zC0UNEW8n^}n&Y)je~CERjR7s>1oZ{8gpVSih?W0%af${mEOy&F_Fs6WZ9 zaJ7sRORD?6P;vD$sQ$#c1~gs!_Qo-=^o;b4%9fkd?@jCrlL~$@rT4CRu?!w=fkXQj zOYA9cV(o@LCLNd1ec=P+OHy|*gVY!8>;(z^^>xX$+s;;+@=-jqdfd+Tm{rfy4)&p0 zJ!NOhm2mK{D(Yef`%+QC|E{S2bWqRJ9jq(>_dM2H?t%IdD`G9Rs+A75jo7_b^?e6B zYgM;9*z!OqHU_GP9BdDl z4e~tK$nrM|nu4JvURTi_)n66%uH**)t)#A1S+hj?WwN?iWzWd!vnqRA?gq`T7^EtD z(`0&6WpyUR8e2#|Cw2>Mg=Niu+}Pw{X<24+oQ6TG!R;n{=t{@K9Telku-QD zT_KVNkECA^NxvkLh6YJjiKO3A*+ElBXx5pvohmzQR>6N^R`;sxDJ2ZnI!gL8MLnpp z^{Cp%UX^AN$m#m|~$h zY0|z^SdE#i2h8f@Dmx|kpUmo$=ya6LXB4$mW&4Rm1^@wU|oyqgKw~xK2 zdUJC^)SAf6GXa#F(<LW}Xn4 zDfvG#<7tzdHkrZYEOMBj9#dEbm`wExg*^ynsidA&*d8g2?#@zg{*fB*FG+1u*g6^P zc3EAivOThTL1CBVFz{t2b+O7en@In%Nqqu6+N74Cea*c|wb`sLM*x}`(A`$6?2H*l zr07Z;;6nE*w<+pIl{F}O!|PI6%1~;?o759#worXjp}F>ZGv?Z!;Frj%uCO(->j{PZ zCEKCdXX?COVcRf(6n4~1{$HE*>2FBO2MjcdcTpA#>x1gQO;of+Cibe-4g439`kaZK zm%?=u+b4H{<_}r_@eOHsbeTl6EB@c;ou@(~MTRh)Pf@X6yeR3}yQSVeJ_*FyrydMs z#Z)U#$!cRD+eqvSvU(zr9U!(IJzRfnx0J2!ut40WcYRYz@VqC{e0r1mzJ-kklT9OQ zJtg*>q&8YuEwP6s^@4?cBB@_m*sr8`L{@*au;(b&U9$Q!#+)3ByErEGMJs!bCVbTV zWefWcv1d%`W-E2sKP+sEISl-JX0_DHJ~orybJnb`v9jOI>N+dCqL3NAwcN^TRCSY; zEe=2oWdZ85R`zm$y2Z*q3c%$2XMna12~jCtwWvF+>;$nGbstFm!3K`X=PRBFz`prYMqs)1Mug~>R~JOrenyuO4iM)dfdu(tLi6Kwu}n1F+e?O zWqShDMk_lL;O@fM(-zZNBt%6xY*E3UBKEvR{l>~xR(Ibcb&%vMf%=fW(tgh|??5?c z@eY*VEWUyAmjwd_0S`#(5=2cbMoSqoE2)oL*#;^TS`3x#>kX*!r%Y(K8k2eiS}NYh zCaU`%h+S${-?cK`OwDk}90vY7^B8rPXe$U$D(dTKD@A?N$~LKF-lM9uR#va7Z(G?j zRMedT>ibsqL4bP5%6_JH`~1Or!Y|Gix-f7ckifCq=a{HnR&DD<-zgq=Ns%qzAk$_3*64Zmct7 zGwfR^l(AttqC|{l$l8`J3{lVqLEYDd1|4I+Na{OX*k)O+>%v~AYQ_fmco)n^V6h+h zqzikADijrbq6_{NAG@&Ei2Wi!{kaQUN;Uk9MP011w}?fDdQ4-@ z#OhY{35~r%dyx;UYKg`!68lu3x?E%brd`OpfvRVv#(oM^S8MEX+Iwtnr>@o5USdzQ zQ#WYrS7KKNsT(y`6$JKRkovU7z9IH8n_8){N*ma{HuZUpoh0^moBD#r*3!0Rr(JzX zW5Q;55z7DR~t39H5}~6;p&&DQevNT zsb@8Ih<5Y8xYTbnR_+E{?N*yK_7Sl^y44FBEA0UG#SZF^8hfAEvmMl*HMS%I?4}6y zvc}#d_C$pG$4re~Ccdnr`j^Ib(60D!M|DvYYa;gXNOegRdzRLLeUa+pQLK^JKO)s9 zqu9DmV5>W+|BPZE5&L5&wKR&Ab_V-mXSFPfy-)1f&gz;dR@`NXm^1Z)ccf0$bKa4- zR9)~sR)gwS-j&{vt2Z5yPD*mnN`2umsnWH3IL?siX(om%BBp`X_OKlOQ{8$ zslQbqyA&@sf9d3KlU-g2KBS?V7BR=12t@gOGa{f@(FE!eR}8tJe!K^$N>=0VgF zY&=lE|2rwv0x1sCJG%58VyT39X`qeI7AfmTk4t7LSN{PqS{q<$yurqE^!u++dGG*v zh~bs~lVpx6g1ix>F@I2vyY84BnLVBAHXdx~ARE71-|;mP7zwcmVyFljn+tI%#77k4 zK{sZE

rVY(aQLJxsWUR6vY@SPYZ-j7UV^9xJ=9(Uy6`s2)UHZUy_CE_Faa6gencgwjT2m~gv|AEvb9YJ4qH3{mv>{ji%y+xW|rt!aLHCe?c*Y{y|+Y$V)RkAx?r z+xRP#r%?T+TamDH3}xi$e(2^XREChKEPDEt#u{QR zM9W5&47-BrcjEOe>kRgtQcogC$A?g>q%4Vhf zZv1dg-!TXc-+YgauhGZ+DuqZD`u$zxj?!)e>h&Fp+)+=sNp|U{pTGwA*hm=T^f5O< zyYwd6t*3t`ne|GtkM1ceN+hahiN0f`+(j=rA=yL!K8+-<)3=?FB5uAs)yC(c46Pbo zRPF@Ckh#vyu{CGrh5m}yDCQzi!3-N;rXTwZ18x;WcAt%p)T74Ay(lXdWh7+79NPqI z1H{*QxY9 z^tXOT{X?n|5;d!J7sLj?s8^km%rcv$-_w905;x1nBaNCbZ9rd1Dx^tC^oFes((r4H zPjiutyNvM}2{u8DPdU9vAAC}Z=v4sK5Ts{b<1bV#L`GFab+T)Yjo(A|muvLJC#8N$ z=sX+mDf+#KDuqM54(o#X9e?;n3Qv8Tru@8zZM=fQJ6`jR3sGr3pbPTYcn=yIF@9SC zg-eAkVUdlWr6#?ntt}I_$VYAT&~pSczu-5D_NH2OK2D1W)haba0;Edd)jfl%xPGaP zcQvYxs#s};oU3OwU@FLd0`n`aF`>Fml5N+hRne`eR^8?&X%P~WUKQ9-V*%SQSX#jJ zs?$=WT>qqg_%t5%XnN8+r?IEV7jv3hdP*PMh^Fl!G-7E=66~=bkd>og-xax}rAb~} zqHlw<+)$z)Amsnl&o)Y(C%RYIcp~bqRYBva4HHqn>9Dc3l~5Z58`bp$vahu9{?`aw z1ly98`aPfHDXYpdec|Vr#GR{b+^%PRF1hrhpGy-IZMBWxq>qt}DPEp`iJG0G6mJBeRJ{}P$Cpmf>mY}_G| zP-7q#t<&vaN)fTeP=85fJnT=Z!r={;Nx?SQct@kLGrvS*7YkVoK3L2BR_iW^HGWaw z^`)dK$NjR^g0=IaUsPit29@jfGt_?Nl!T}XXj6qm1GD{nh)W@gY3K{&PnRUQ!!+y+v!hBn3M~^h8x?d zrC>WyMYxnou<^!D>Nwb*{+$%7pmlf$?Y`o{w$pb^mj^hKz+!vL%)f}V{@Z?len@?@ zD1@GLR*F>UN7Xlooq#fbGtGEe*t(4`2Ro4>3w*uJys#CzUC&^{gk~^Dw6)Q$q4s$! z(o`AS{I+!J=Vw5dx9DfjN}Z#MUa;{4G5RPx7WgFu*RKM|S=_b8-tQ@Hn zZMX5?sHVhB9JA4lcEr#XQf-xuKPI+QdgIsVIB7d*eOojNRt%3uNRR35&2nfeq{^3V zycUSO<3Hp8+cMuE%znkj7qxB0i%xj>2I09^X&S+XDKrK#q*i0;xkgO5f5MKxX5;7e zsB>7gsvz!vlLEd)BM?$Oq-@d8t>+*n?XmI6LX4&SR6yJeb*l`jw?M2sqW|@c6k)9c-waa()k!FAOd@GSyN}xVRHOStDu&dH(hn7z6DdQ0 zwE(8AFr5{%l~f|M>K15M9n=5%RtmT72Os~TjW03w_l*#D9jB2;(}1-Z;vtCWTiDvs z1@$>dF@`Y#V$er)RYV(3GA2MWR{GdHi0KgNSxoaKf5nPUy%aWjX92cf*z(6#LUey( z<1@%reWT6Ts)dbSUohX;0zztrG+qDvycA032DzVNdqCkL{NY5~h2q)Y@)I`x6xn*W zwZ+5Mqrt{;x2bin5?LDwTjVM9BTE~bh%*;9dR4+4bQ!b>)0ciE*(^|Af^wvB@l*kk ze{JKVgsAR@So*cTrwLOR*phGb6HQV_3X}Vtjh_&09~+9aQoqM$mHHs!^<4*0FOP?< z_M(kj#P(Dj39;@6ebo1o%L0~O)^L};=p)nxq-;oEQ1F&G#89q)E$t^8pVYQfR-pJ| zDA&SHuZ6g&ZGB|YG|&JWy;5R4B5f6Kqc3bT>;-?=xP;3ow51-ikhaRN{21(PaCJ@z?{;yb@E`VfGt&AAn2@HVzJ52Z*5y!qWA2E?U32dA2s5shnS&I9{$(1Y&SgC8@q|(3z)4Z zsQ8t(*qqsRfjv*@+>ScZ-x?+N*6*2#%aBI+b*!=Ahtw#tF==!0v#(UhiB`LQ<$@H} zaTR{j9_@FC7Y(iYUw9R2o$|MV1B| z{R+%{zuzXRf>!g4c3#`!wl-QYi-PRD3}{~Mw;7WzbQYVPKToz7gl#HV{L~x&p8-|D z_%0dWXd93r6Z7qM{x#V?Yio;yEz@D=uafN#zfHuM2%Fn!=X1oxx>5@EVLgS;QM~(Q zoV!Hr55}7SC~(kj-}EGMy9I$S!{!nVE)HUVSdl!k}d`Rk;P^M?~QIWyh*FPzG9Ia5qK0uV3fdq{n+QYCF3|DDJhKz6zR6}hbYh@e}tmK znqiv|VdqE4w!&`{iMcU__2_8Fc3X_P1c-@3#0uexN(1{Ph1$|KR36;oA}N$OseqIu zB#I-p65>dRB4BOXfOJ3*--!bH4hXoAXmywbTRNm%O0eD^PSh8j7S#A`XWH86=s@f2 z4R^7vjm{C4!sfkt73TIA{*9PNQ)^&khk@WIT(s9UGOReRGzunA8Qp=KFzbW zum?rkxdRIG&^LXZtk~B$jj%^{rIOO|&G2T3aS(@*`#;*cQ*@D7w~J!z{7JIs`|THz zx@hYp*jYDy;V+V_2UtrtJD*Li#eUafRG)CAD}e>w?O1^*WzQ;zOCaXMZeHnkZ}eq! z7wng=v-1@QZhp;g7u9|gwxzx7{427(=eHG5j&X;RU5rCjVnH!~?6*<5MK2rK)5%@l`#1L`u-Dw=cdvk03-L}Q zZ(i_s_gdK9+~*$K08xV|+aSwd@=XT zfLH-BoZRnx>u)g^!CrH#-@O!KEyO*P@1uVAQeUl9!CpMt?|um4Qi!ip>`(6V$L{MU zO|Ykq^SjfQVhrqa-QTCP$*%uEwL(95&X{QD z-6>}KeqYS~)}$@Wg1af^elc<=rLzRm%jEsA-`hWv(WWIa%a@OyxHHQ*#23l^PrtiA zayPaLP1$~T+PGYTDBPcT=Wlt*fW0Eu?_L0L3&gGzd)T`^cYi5y>z5t6&+on!;&F(V zsZw70yF2b3vP1cP_jBY9aUZ!4de0Yog|CHZbF%h+pSvdpVg*FHvNJF8yNjaIC`*O? zOrf1mCi~ldyT~lr@$x#BHrLL#(PR)<=S$9SUjqB(d00#+{7}EW3WJwMX&|eFL;Zu4 zAF%+`LTrTC!I+>SHA5OCw(kn0#E0}zze?er&~^y6z|ONNUBu;`I>o7HJZwn|?ff}X z7yHw!pgv7`PKW&r>|$|W<+uCuTmXBy2jP)P^NW7F2v6%?X*;H})JJ`F*mEoVM?!p+ z#?adLeRbgP<%eK5Kk0Wr2QdiZd2-J_@Hcl0j;)%P`Q2k6nwMihQ*LfL_&4`d*dtf@ z-7_J^Ks-$Dk%xTl{>&G{ercWGy&PgQL_EO3%pw2rx%>0J8}|B*e)oEajSy#GelmaK zclY2ec zajOu;6)U7eLZX$eXCA~Rh${8%5B$0FubCyVU)oNUL3!eknjyV`9%MEh^_7*2ofK>} zRhU7@*14^%5w-<8>^Ll-vbdWemO|Wsa~1QAe%DOBYJ%KN5B>wkrH%XaK7UBVBQCv- z7cYs_@SnX(3I)&(ykNh+><=kiF5Ry`_lI=(fA8w)byP0ntR zD!Ym6WL&#$Mchfx>VyBpIU&8hD$%$`5jQmHZCKwLCrTKG^iHfh#8Cv@Iw*fv--a+z z^j50~#9_95=&K!#Y9|9e@$cDja`HnjY?A3^TD^?Bn@hniqT0o6(mF9spo+w%It}6> zV^d8p*D~&VicPhW2RYKX8@3cIih)4J-7tFJ)Iz5rgGjjP)V;RV@yEL(p?+BzuhAl~XlTD?b(h&uBh-0`E}seTtxO|+Y=I!v|jzb+n|;L*vrU<*28 z=Y5TQW=gU-s*0MDA|BH=V(K%-r45~G$^}RCjglOplp^>%3Lbhl94tre{ALOa@=nI_ zG})d3rNM?rrCZx-X)>llo539az|N-vTZQEmR)a3-xZX#WJIfUx>7!(%dgvqCJ&PtQ zmT_0^j9<2{f_t+N7kzHrlnVV=-$Q{CKBnFy+U+6*DuUcq$X48SVrwDd?grhi)*x>E z1aCnT$ES4IcpTDobV%q@SiQJX!|^2<;vnHLlkT6aGs%TAuh;EndF;)#(Er-DG?`S= z0!(r>C+z%2D)k+0tGEQVOR&X?J+oeAmd))VKeO{6k&Zd*Lw&DV4pW?`u-_56jy?nb zT8N)gT*dylL^q;pEI+N=6*(fb?zDFbDEIrM>+#=89mSE0K1q=mnsCceKdH#`lr4>R z+|nOomqX-+Mm=AZ!y_(3HJr+V^q9R-rYU3+h<~APROLSMsxS1z@RO^)(9c4S$o|sK z*THW18&ggbWOhdH6Ce+l%g^X@frIMKU<~{HjFSdxzDw88Z-rj_3Pl(G`gw;OsdvuA zp@!QcC&+1E>7y)^ldtrJ7UcL0JoEiAr;9TTy4uY+t8cT&k11=<+Hpge3aO8@%I=8J zuhFJ{e@*y{5`L{Ow90)H^EtX$Kc>ndN*dUFy?4Ic=^9h!mgju)pzaKmHRTYTSBk-f zNAWR!zR^boq9@W@_kxZ46)|8(iSdK&CM$wu+_H$GH};9!C|mrECI&b|Mby9+C}vLG z8YzeCryHb@Yuq%h*;L)9ot!9(#+5qCy_8D`7-`Jo&hM~*Q$KR)hir0U_j1TjP!(+T zrzbj69dz_Iz$Ij>`%v#?m!ssGP5LOi9IjaKQaqeJ-zhE`9r|9kJJ3#eHJ~xsi=JiFJIw``zt;!DuF%^8`|JG%Bgn|} zdOoT0pwjfL!SYbKU(@W{yIyBkU|%PF{LZ9~_Lvq&EN%u#N6PIx`4(%ohe=ZLElCp=>?0g8_(|4feq5%YQh@S94yD=(0dn;QjI&0 z`&PkXgcLj1Dlqg;##hK5{dfCO*y(+Z?~pyAt(~%P5%!p0?0C*Z?2CdhF6eEFL5A1^ zBE4wQdsuNaL^j`21$ivRHryYZnAS6CV*1t2cOk}B)3(SdrBn<%y_k^-Z61GI?-+`{ z)AXA@I8+Yrl<|k1Z=y&=+Z$sv74jwMHGL7r=D^Tquzr`8qsWA7=u6<20ez_Gbo!xC zIaA4njGKWDIV7+cY)285KDb%xCYLwsbHn7}N)7a3`Z2gDN5L8+d%)ixz?k$WHU$)Z zhQA6p6)_1^16!0BRd+RjT}o~bwsoV?KmRXuX0ko$w~5|HXP#SO+efzbew&D%c2fmc z=xCU3uzN0pts=Kq{BB~9o`G%)bMPCeLEiJ*GAV~NVKmAPIoG8--=;&>kxIc=ArWATNfuX-bndx#myZJ_5ta*rm`tPJLLe?9^ZK$U*wuBjlT+cHupqdniW({5eXe zDvCsLi@G>)gNSa0(X!qMsVg1rhU(vpkndE?8s27UY&a&|DkmwqkcYKAxD-_dIS7?y zPWQ(w8io#z=xw0J{e(5Q$*ZCoA>KoonC5pC)#Ano;?WNNo!Eo)N`M#_ zt7y`6*p7C0@QoDBkWclWZj*Z}1wHT*Qlpv@N6InXmqH#-S<3j-SN$SzBLX+}M4MCK zRiEmMN6P>9Bwgn)wj`B)XN_uxF45=1c8Q#;{5DZ*hhWR=M=jQOh0A6P`(h=`kDqcz6d*w)qzT|<%>%k&W9MX(8fuSHMG_;t05x!J)} zD5~F2R6pNQ{>gNWdZc&h-ez3O(Cc&iizjTO=q(L%L(kxvkQsfsCU=M`hgm#HHqsxr80=K5jog9U&;y)G zT#AE_p{v#F^yNXaRVjwt!MIK>2Wwn%Qf=z#QFt_C7jzTp`P%`CbBM!tc|*@<>a|hw z7NrN2!;H(9;%Iq-QUG~?zT#&o)Q%~l64Du}shOYYSEA*x?(}NmVyb{*e#6DbH>sGn~=R%_Z8paKItyV!A4jp-#lhlb@s%-f7U6$I3Tcb9b#{cRj)w^qC!HZA}@*=Js~D zFgY>@|IuVny|$aYQtZF0d-s$dz^^6$_JBCOsu@pU(*xr4#%AyC+>th1m=RC&f ztxLg1iS<$43U-F1?~!PiJkG&yr6S>RKCq+34pg~>R=dr3(gXcs7Yw=jYrW(FrpWOQ z{X#E!jKaq|_*_vH;H(>FT4obJ!1V1xCAl%9~fSJx z;DDzk=-8`j03uAxa?pz^t#@2pxjZ(oD8;l#6a09{nw$?TMQX1MM3W-7w3sCg^+C{q1U2Qga==*62RDXjgiJ zJFb>KqV;LILr*>_h3Sn5*De)?Jc{`D2K~Z~I5?_;Vz?1eCHFG@uo%?`VNL+OTL45(eH=BRF{t~IanUnu@Slr z7-mLn#uepOH0^@>9r|7b>R3~VE%#N)HNas~5hl&S@|=$IiyZtBzk?Bjc#r}Po@BYV zsbr2r-%d=el%=mE_6S2;vtU7hd%N}mFUN;nL?%7Gq4I0uJ&;b2OA(4o&uL9QAe^zQEw zzpsY3!t>}us1u6Hxd46qs;FpvPgsCDNs)({CV;tN2$*6po+0wD*O)vi5J{pjhu4FB zh30U#`Ct(LyT+u`v{1iiwEuFEo>)?nJhZsb_PgCAu%f9l zPU>%rMn|oL;s!Cdh{xPTj^qZ9J~&;@murgkZRxl&h+ITVgKvgV;vq(hUsuT)i}cQ8 zaBjcr5$w~bY?=P?BepK|JFB&e9r&>h{mx1+7$bM{oykV)Z;X+9DqB}MxYbx|n#a)P z?yBm}V`Xdr>Q?Ee#-SjMaELJOgCVkJA<;c2x+~#ct@qE6Q+<~zy;@zM=(QPgw`(*Q zeXPOzP**y>;jq@2D(D`8Lf>=i-GY?=t#;*g`__xyZy@zgkiuipRSTP@BZvr;Z zSZC=Y5iLJwTLK9KpB}YtzWqmk${;<~J9ysX_kA1=>POrEwe(PL8d1&ai-J>J$vqdOP2=fxv})syZ-&r;|U z6+`qL_tP=?dVTW*d8(4QK`fv&e`SCTrgKsJzUD63t>i*BrZz`8*y|}3G1}7g?GxmF zig6ioKW4#B$6*&a6!r>nzmATg7nD12_wQ+%DA#Uv(;7kvl?p8#On2H3tr#_}hA~Z) z_0Z#L700f6?nK!gScxEF0X6CNW+_rXKT1}ubP!YngIgT7Dn|uNQ>WgDF!H%_{r8D- zpWE5L9DHU==EXTVO`iqOx18h~6Wf01%b~|D$~KcX&8AzSkI;V@EceQ(0~>XfOAKnf z3HqyxlLS56h@e;bXFwkb{nbfP%f*quz9<<@5kE-lVt50W1{7BOKF0CZ{sMPzLwHW{~-&N3r^hsdg^5LeRs=Ql5Ghzsg&If=v4G9 zW*4O%DyO*lpqvAX$D(J+U6tlaTAryxMWjB9lN)~#TTVvHpRJy8ul$#!Y}ro1aQhAX7z(n|6?($*5V3E|`8)@HD zx@U^q+g1XFnEaFBt!Isqy+=EZQ)JC^97d77(QT8V&Ac<%TdaHA+QiNtwjq@DS#52# z2)D{-^R%@!z*g_GEf+SrZa1<{&jLk;cq84^Hee`vbf(X?y{(OYI$Pp5%q1QS&`B;C# zhQ0~g3D)*~w(ond#5;VERZVEx=<*e?MiQPbi7=)+_#|5i4jC!qF#_dKfbqeO>7~V_~O{ zDB(UE4!#un-cq!21x=q_iZ-sG>1#~!v>$OP^dY7wV`ZmrF-7|?x9E#ZSgEiPFyTW@ z`u6GaF{J>yFk||o4>5)5V%ei_FQWz!75vs@s6%eA#P_A9q`Rm} zI@m~YO{8lx<+LdckZB9ux=Yf69^VgN5Ay4cE==>Nc>rp~uQ$dNE$Hq9C%0UszXVwu z=+qC+lzR`DKhVh^#5ge$G6K?aekl>38uAA;>Xw%Cfbqsg8nA`DnbB)c< zWf;4PE4X2ix4Dc>Se`#}F`dvBBN4U~s_ufeHX0dQVGAc)5mkuT4IPInNF;fUyRH{u z>`(sl+r~xH79Z)t^^mx3nTP2 zUCM%Vyb;@Icsd~K*$7$G*}vNc+lpYJV_e3S{7Y2-Pt#i|>B_oiBJ?z)nRm1eLze}s zV6&6$Eeb=O*jMN((lB(xG8R- z&lJ-j<)g<07Z3C6 zQan)~wMLHU5%Uk%-&UJu*b|`70D9vs&g^)5Ibv%*aKa>)@g#)EurUwQ5>ub$ z;>V#g3SvxSRFK*n7uFVW)n=ZGG{vf53Z3fGkEn83r+DbZHdsWb`ImtL;Y-(SN-@}Q zalF-OEm-l)Un_5#?Bl1=5TeH%lq9gBVygF~gZ+TY;>{{p@z*fb#_RDeg$4MXHvQ0f zzJdohR6InD=SlfKJOqxXy|&_kAC5;EB5^cYv=G%2$4@fd#)v0JUs1g3*WxyrBfC}IueeV zh+s<%zL)~!pmblu<#`4vLP2i zo&@S~*Rb|{6$}+k7JOXL!s9@V-&?p7jtOvZf>znAywq;xxyZyBtCd$Fb0sJ_mHsj^ zx8(W``jLOhVV+6VA$;o_A$(H4g=d4Dd+}EDJ;9tK#jA?VYf=0fP!*^c5ff2O&^0Ap zfYJ3MU2M_iAYD7rq4p6_vIYzVSwPLG>tAk^qmKix72SbO)>~`~uGtkGTS$I6C?m#f#3V9^R0@9}ATb2idIr$Nx zwb{~K6lf|6Fb$uC1SRF_x9*br%VQGtg}dbNyK2W8A0pZB#X8_2FMrgF$GuqZ#Re}n z0?&ZXfto-UL6<<3uB894UhYU=xYYT2IiNb^6?vEv{C=_VJtpe)68>xKsn2*_{@v5u z`_JSnS126Tc@sXQ0}KMvD5#giIgN~Rpc$A6#2s6v0cpx_lEOK4>>40`1|$CHHsJym z&heuQyizip2N`OHr~cUl$h5xo0Mae3%Pia@7Kb_nzzdi0a+q))49o)p#9wINKgBno zj=zI13jaSRyczueWu%9Y!T&~7lT=$o^jFTqxprHMQMFWRx+o(`8-~v{r5a5@&Qyhj zyN2WQO(1F_Y7Qd$OTQ(YHz45^$2wFGdsBYTJh5(>;Z@@3AR4j;G9|wSNTJpOsUepF zsUhbB@k=t63#61L0I5OKfYhLgKx)t)%c`gDlkFx`0zTU_?;ZILdF=-M@H=vJm;E-3 zXwak}Cr^vE@B&M7GQ+5kqtPGataiLBOOib!3qxWACYkP5K0m9v^Lz667>~wmoQ)1* zA$W+9o^sVBo}4rvyC-1jug%FlfW1Kpaf}ZDCV~coCjH!;oB^!Mb@9?(j6VbZ4baD+ zA3-*mC-(%62Q39vff_(&6V3U>dr=;CS;HYj6)L^p23!CqVS$Hn>krMz8ZuHf5Ubc4 ze5o6&WfJr+E>20NEzfPhG{}=d4}*@TpscKJ$dicUDbPPbOF)l!G_V`-^-imPJLDz$xgM0u) z?;%S>rqe*5Ltgt*b23MU>HbYR@SEW%90qNDil;gGz65-y5PhG<$owee7EZ+VjKZ8QA)*v&kcia0{P;pK{Mt+E(4W=4uh!qegOUg z>SQ&V^*Rrjz97bz^C7?tByt;Y3@8)yCaP*0a5HLXH6dsV=nUu>s0<~kLt@{9FYSVF zp9bPv#-OgCI8Y+!tAC^<4+he$mN>lGD5EFicR=2cFrKMka#5O8&^+*4F+)5Bd>ZsJ zXdmbU(3haUK(4DgCv{9;r@V|zM#DZ3lmxmRbO{+uMD^bTeh#P%^d{&8Xx{x8J?Fu6 zOobz`9rmw@pw)s{cYs=D{_!<+$e7!?r_0d;1WgQRGHrbrqyBO%@jNRdoS z(7`e@HA*vW7&Jt~QnSWeZ!?qQo%G-}m10PFP2o+=x6Hf%au5*^5%0+PKkLk(ec#{b z@5g7>+Iz3P_S*M-_TJ|(0Eh%E)Pq2W0I@(OFc#HWhr0h3f6Q?94~zpQ0n>oDf%(9<1F+1yFN*Ems|bFS%TGXC;lCX8Yv6le z5AZW^3ivNj3ETr71H(}|G+ARcAhyBX$shIa=Z~BMeSp3|BJd6nn&s-FbHG=li(UAZ z)~MTO*pan3=F&+m4(ExVP;;>T?_Ysf>tOvFOUk76K&=Ug{J`%L- zRG@A&_*0npr+{Kr5cfXldcX{<1ok4QR?z*xX`lk22V}oa${xQQxG*v^^CiQUrhgmu z_tE*pJwV`j6l13#%Rz5UNTES!`50CcyL;&R5dJf863CCjP!4(#r~o>nYB}I0+QD_W>w$YF{Imj|NT>|~`B2s!{2w-59R6Hq zTrmcjaL{S+*T8=7vt(AVGo0!_e_{1CJY+6b*QLqW#?uLB1hxbw8|f zhy2pEY(Uj`iuEC%)g?Mr-GlHY-wg-mxK z3|Nnxt;Wnb1N;ZTQlJF*4G@8Rw6hobVvGTn_C^0+4W<~l2ZV*A`vD&UyMRid83=z4 zV?J{8Cg^lvD^Li~*xn2p)(_8Gz}G+-a2a?2^zV;2z!$(zz&)UQ1SUUV8gL*2^E`M!FvGx`B2Xc(2224mf$Z3h%m<*K0(rpKz;{3yPyu*Ahbag@^t9-mhsQARvA`OvY+nH_3`J>x z(pQ4cW8hgpd`M?qHFy(v`fO4Qc=~>q+#0A`4nO*GlRx;cz|#jYwBT*v>1!8*!S4Z2 zpR$Mte=G|1PoKq_KoJt~08)URXYi#E!iRcvS>VgT(^rd@fv3+otOKPFIcx#_8)5W0 zh5g{Kfu|3G9S2VzRX7hyUwEhnrEfd5fYL`D0u6wF!h++^wEvMpszrNKEM+X zekyqSy3Pdf?-4%<27_M+e%xdj4gNFm^x>Oj;J*S-pS4*B{yXp{`e@A-ICjH9U!>U& zz6d;hZss`nQ^e1K)!_dGPv2Fm22Y4Fc$o11gyruMNicEpowq~1Mt1w^<|J-2KnK@1!Nejn-28xhkUr#Aq;M2 zJ?J{PSKr2C{CY5(;XzaHXW-Sa)JlH97JyE2FJQ{HLS{SMBu6rdKnzNCHt0HlcC6Bd zVAA@qhpq|k;q&lUx3QwB$8OYq&~fkM90-qh6rYBOE!a9@Oijp9HZH3a>^Cqlq&pQu-3erC1~i&||wW z8znRpliknWQf^*F0uH!;0BG@20(uJg9k>m&0t#$51p)nmFXMG_BS1&RVAPxd=1pK8 zumo5MYyup>9-ss`3)}*jVOTK(oq^s!G%yxO2NnYBfn9(TI15|`ZUZtH{vM3%1taYM0|QFvWp4z_ZI}t>Cm4IuKJ8mz8|L@ ziQyKTS+q7JLsscA>jB>a+khhAH=qU(fli3)4^Y+Y13e3<@IK&RU;=cFgRWX9&dos2 z^R8-}4S$pTCvV*{FcoNImw>t8>6MDv&DdAgJc(O($6H75i^LqkEQc_>fTE-KQRw}X zWoMAcIgB^p_XF1Z-a2~KgkGj#uois`eGh?0zyshua1Xc(OuO_rZpx*{CM+et8Hqo< zH8LI^tq5S4BDiZu4u_j5HpHhK?)}-#KKZ(6ax>}i*f@_52R{QC2TTTj7*)B*e_)m_ z4Lqa!b7ZPSC&f=7T0jfeGkRdejXTK+Q<&H|X3kF|#XhIw#6FhBZmh!8fOPADn?N0K z1E>YA12w>Hpb5AIGy-iv3vdT$1{l?81Nw1XnQ}bRvc^4up8#yRi{^kc!Sg6Mvr->d z30em{0esO3G{B&E-MeuHFsZ;yU?K1|Z~&n0y&oHE7>mUSw516s)xiL|dS?+S(&+@F zYl$0&C$>P~Ji;yj6ChiC9UX@8EpCnTV2YsY;mhbmFI(OWU^PRio!@B`#U@}GWETT_ zV|wcHL9>9_z>nDUJq#$VcjFe1^48Tqup9}%j8VNBuiT+vit}qmkO2jc zQ;#OmB=&)eX*FR~${vaFZbe>RUT4rgKo~F-cnP3w^pJn!%<_b{E@n4c5d0=Y;bavR zM+c@#;a+^vQ@0ri`P)-Rk1;Wid+4Z7 zAT*8{C5@3NyIUqXc*Lskmi%rxY16O;`?c}EGSZN?`mnc78IQwOsr5uMA)wZBZ{53t zC*bgJ7mjw1;p`I@Ym0GM3JZ(jo>AiJSnCnqgtM3v@TcqkCqb1+i0(I+fjlQGJm*#v>UFa`?(&^XZB2s;Ig>-wb2W4QN$&qEkZJy*aV9gAnc z6c`0ve}EqhJ`da0mwI>9X~E}=LzROvKt1AJ1Wo{j$tG-vkH^z093KHQfeAn&{Pdtx zL6OGo&p@{Ve*k$%(CZaE3ZX>ifgcHUf}6pyaDVVUfmFC-j^R58pzDA%_!WVkfq_|p zxD9~qb1(Q+nBdv`Ds~xxNzpFnO0RqC#)H=Z32@H>zDPwI*$0M-`#A(q zyXXOW0e;^iaw*^iHaKy_hs^JwFHS<0*5Fhhu)@6*$bsK{(4C-T zLEi+*z_$VsX~;0J7+@IH1992!xU@48IY;gzA-D_yM}ZLVb!nEWU>xm@M+qDPOn~f#Mt20J5 zn)k?C_co^04!FWF0b$bsC3re3?)na9&$arv8StY!s=i1U=gFQrI@z`i@6D=A-68S; zkN|j0W0(=Y-5HJvA#ONC8LY%Fz+Vn^{4CW(aHrwOa@ufQHi-AtJ%Ze?bFh2{benP4uzyG0vH?gOag%^$iM~1$!VUv;=PBfE z1`Ea3;c@wA(0~8J_e+5n9<;g+gyVd% z@r&nOET`5ZSE~`e4$vW9B5)XdJY;8PW@d&Y;mQU0Bszh74}l*8w7^&b`VDXl!f80* z*$G|;!Jj}MlfSy7E-SL5ZWK%qj)Uw; z+)}OHZHQY2WWjxABu1C@nJ5mdN~Yiv2;IY6H>9UD(Puxfys1VV`(c?kAr;rYPXrT>vM&(&7_M!VW zB8%{U13#CcPW<<|Hs-1!H{xTgK7o9c<7$9b*?FMb(agueKNZ*u_hH~|@UH`Je**a{ zkK>NPuNauJz*on7gWU+ax-%BnhKlJ{5&bQT5)VuNPnWnUV=SK?5+er zK79$AXD&SCINEc9jzjiuf<6M$z%K;OWc%t`fWDui$pLqAaLNL@9rzt+1BRK9b)aRk zx9%^5p9I#y{S$Bm{7ulHY-}3<^8xYdqquKDPi7;vk6U_^W!_zqYG zcw_6P-!jw*EKdSxABpypypfx{eB4aT_0{FUKL9dL&>4`w4H}8CtzCFDnMU2UMW11m@!LtXoH22Etzg-x+Cr09pgLiHhbN7#r{c0=`E;BKY&5 z>~gGifhoXBz<(`XxdL?(j~kOspkg0Ud=B!eJQ@%2_sfZ{Zi(9fdIER=$iKq1$ko2O zxnJT{9$*|$4_%S#u(Ou+g|Ds}0$YH*Rk-L0Y=^*ls(<($104?f0RCkdjQ{!q?Er?p z1}p@Ag!^BhzW_7A-vIUf9MuH81>^yTi6ZPODBWV+0KQv3+D$%k9|gyoa7+YU4oZh& zOtvTnz)eM{1>Ft*i@;+FUxl@Xi0|M`VVIHNFX7o|J7kRDb)fm6b)ZK<>jCX|xFl-x z#g08*aQT-n_Nh_-psgEm>(#W`SGN!zWyoa~JZd-i>hj^2zZ&~NUp~v_9Jt$anF8Kr zJ!TBZknuA3k@2VDCZqoZ{a>S#aBGkZehac>>@CQc$XY*mc*CIu9RNBBpkn-I5iW+` zNQ6@nZUUv;eGfm?R=l*e9iz-Pt~F zjK8ZCJdmbw73zNj1gI27!h>?f!p-n#aD~VPX!u^_Vju1?g09=`tK0hnS}xqx$dwZA z>|MS(EBq!Q-T+|jSC}jRks&kO?Tz($@Kmytx#^G@YC7ea7dk8_w zRWJC_bMFI{>pp?NvP|DzbgsneMZch% zm7t3iquP$6y5P4CblK0imkrvAjMe{y6~|8|UtJbF>FIh5l%xV4j40-UHd!$1V|+h} zvAYbsH~2F6pMZM@=s}=;!&`Y0?F8ZDK(}K^S7GeW{sv{5p5S} z9pKo22D2Gg{6L=o9vf+T?TVXOuHBs}Ke}EH2>b(m`@9FkLdP70HJwMV!EUVT9A?im z*sF%$DWDag2c0GuG;9<4f956>2^=Sp$XDPW0E58C09jZmdPCty;8kZ)Z|Bhc{);01 z9gVge4HP+2{e~(8-bRAQP!dz%zZq`p8DHJQ?=bmTu?ql<0|F1=R^~%2mr%;|i01nc zCoBH&@CF#*5`>hX4`5Ihgy~VhAN4w|+E*9f=Sf^R{Ep+$gErm1G-36Il^d;~Xi^D8 zyhO+_>L+o&T3mTQg!3ps#KTrL&Zn~Af0)9sU#$Ydf#@;tumUu7;w56HVih(^u^M9N zjy3LAf02jF!UwSp5A2?Thh9)yG0RNzW|`|Sc8H!Ska1o=IwM;w-$k;c4BWL~c-#qA zdgmBa#VQ8>do?jb(jjK<(Nf{fyr&2_A}^OKeImbC34ISMJ(E6EjXDrmV)b~;7s!Oa zgDv4v>`0a?54OySVuMX(qm&&6bm-LtapS$i)>*2uM?UeR4)%`lDUca|4GzxqY89=g zRFV5sD!Yn19lY(E|9IUOnSifblMYB;4@K)DRc<3@OjzN(b|>;omU8TAo4N81tidZf zm*vWFrzzTx9UgXP;E!Dkt^TBIJ%xRK9NIh!oq>)TNf|FGOY|BAWhzOT zo{5aiDv;^UWbte7q=qv5nmZ*{FX5UcY7pzsIt~Y05(lvclki_Lf05m(6#jeA8kseK z?bS5I%tWJLr~6QG91AX2@bm5{x7z02F|G?kvB}gZUZs!SpoTF8GW-aS#6p?IZU}qo z@em%Nc7x`r#{)4%rnVbG;W6o;nzU%a8t;pyLK$Z_kV8^syeHZX99&4dSr)oh#vxvY zENs3^V~}arrh7e{NAdOrH*~n{RqnYyeTVwNJbv6A+n75Wx{mfh7`HM^%0xPY+!i_& z1+vJ<7RSG(Oe!4zMkZU_;rbyc5KGcv)_;KGxR^gV*d`o5I6@H_NUDqcO1RQ3n(TR-3|dN%8Q2 z2JY+NZGK%5eVr-zvVuR~TrRWy+H9N^2Cp^2OB71E(xG8P`|ck@$*m54Pf_GqzzXH) zV`UflUz^M2wxVX^%&>%`qGZq)!ANr2&f>m7T`9t<;B#=ED&~uuy)KHlNv+Guy(wx~ zbqX?nV6;+>4EEixhp5A}G8n@XY3ELo_F3g}et&c6brFF=9@J_L$337KD*6VUgn7%M zTT8lkH7EQcmROm&hg2k+9jx>#wNMFRBr0TsN~{qmTH_83GleXMS7EzYz=qsSWDQzb zg`6o;(BR}KoGM0?hfFE_r57AFv5@sAZ*Hp;s|WlXqEbF-oqr*lOoJ3`F>VnvkJl^x z&}haig>LWYgoj9#hCg;re!PKwFU-H2{&XIkv!2)aMNJegwtnr5*aWqu+Fj!9-H@Y05?~EDg*y84A z3EzW5#tTE=<%or}soMq4Di+A|Bl+H$q-W4N*lo!b*RmN|{B6&o)6nnF%k4A`cN|78IkXwn(z2PoktB*k% z=Ab0Qc32WfNlg8>n0|C_}AJA+IXf_8lqpYOq4Sr_-W_yYM3L0R| zeiR^$8a76M>o&Y%nBP2U&0o%L>3b}pA=&b2$`zFk$q zTfrsPE+`VavlpDk4TqHVh0b1MZ4@>>*hQxWD~G#E4ZfV^kWwBYKwcM_MN+dZ+hW*( zVa8bp?FL#jD2FRCl-oYNEp*VN$U-L# zmX%um70YT&#w?l~N3BFe*W{Ql=GaFqMLC2~01+v6R}tHaqKKlQ;C-IOR3SN7A8mgSS- zY{(e0v!Wv+>>jh$nzu2pur#YAkU6r?cCSeiH4fC|=`#Wu>(&qKX;iQoFfc(@I)~92 ziwiOM$j)STCEHRgmBU$er>dqTuSdSj*pGaD(#tGeMzB3RPFVVmVEcIdB)OswHO-oy zlQ|x-5fKHT%Pi*iHG!WtJ)6~2Nf@Vy{GKLz<|wHM9B)`wk6=SoTS!KVYPL7!WG3cV zudK|(vO2+Sl%;G0Ye?GGgc`MHj5iXOPIT zc0`6|9`2)?SbPRA@k~UXXe0xVP~kPpn=i3FO@g9>YpRoDxDtknrG05On)hx~fvl(l zH&)brR(vK8uY1$)%IWsZahSPW&A~WYv}cZos@!~$QF>;`xS21=atAR@#;%hyQG91U z>WXF;El!(RY<{n)0y!MHGK-ou<;vB9qePR^XWq=FMOkZJYuZ@4aowq3+Jo13T;KE8 zs0~tEdkJmhWK@B2y&ly`jhTO=iQ2Wmq6eT$MTqm#nudSAD62g(5-|1`=e-8SO1aB( zz7-9bvX3ywb7DZO$EV=#oUpW6(2)#x=VY=-0jgMJ{w@t=mZjpBI4 z?v>?ik?eCCXE__(5@)>K=7q~85-%*KaZD*S5~nw}Sk!6h5d@O}rr=K~Oh#eS1RyON zHCCo?P_U=t)*(EsV8u==P46@Ny6!E^F1BSG+YTN&7{|WsA^Z0&%k4H+Yf?KgA?O;1FR=s-+f-k52MiYoc$ZrZQ&Ptu-E&=_A>J%6pA#w71F< z%q@*;LM`8pWc!a+-Gb?{n(>MeK3n}V*2r!hlXb}Gb!K_jl`Bqq7s!j)3xOM=s6gc; zNMh@wf)}XNYSd;z3z{ceS}*1&sO6Tf@oa>tt}$0|&CXF58B|Hnmd8-)OWOB8ycfrhpy{jNjmCrXLu|#Z6I{$oi$0$(4bZ zmHbu2%8>#QE=-Wr;wcx_IkrG+ksO@Sj`&c=&_a~Nrm8UyvBs%n;3PaCam}K%XL15P=Rl2T#WrIR70Y8`q&gDemS*VGYVb z8dRiG7^QY)n)+VUbhjaf5*`0lqftkhO*En_4r&J|@{ic^8mZXL%Nt#th;lhjQcgxJZgj+|%Vpy_@t=^gl`!;T z3I8#8VFe}ml4KLb>4lt_RQyMcj#s!M8RcpW$7fOY9HY6y5*@4<&q>cSE^wg|urram11V&iG2B#5?nnnpFpXUM+4 zTcQ`o4|*yv-Yu|{J6$M=3c(yd;A!w!cd!}pLtNoKIX>)Z_-J>y3E^5P+$8ki_&!es zM!5x+aFRisR*kIW%~SeGc^n$3Ci}NOFGV$ef|1{RssW9_>#>;dNX&gGmOj990+o#Q ze@o^>14^c?0eZNeYV3PaakMrVO*7TWj~j|S|IuoV6V#hyi#$U*QK@h<)u;KfcJqBo zCb_u*(a`s~6!qpY?IOYqh@j5Qjgm~ATSj>GsSLHK3<#aJn*~Xx$}Qs0&IR75H24((;sU1nVOyn95NB^crdwy4g&=34bL@R3Gs123K5?w>?kp{t^)F|4A z+_~)u@C^csQ2=rFG;jvBenUf%{2yh?#i{c*M)V3Up;1vtR_oWII*R1N2$MR0XGAZg zEDe`QYQ0SgFb-GeA5l()71Ho3yrR}`qT;|45_;M2Cfr_he@_j#&8-mEq-N#;KKzM7O*Cx569<0NKl|nYM@WS@t={q zBitwhV@Hn9A-A_%L!z;d)cv4*Ndwj~_7V>R%M8C$&KjiN4I_*h2g_M3uS)a=gAQ); zNu-B3>BkE0vPUB|ye$@!t29WAP7lSY6Pkt*n=2ChLR zjc{*5k{jU~;iiB`u_?W2wu;L!nA{0BJ=4LbHiT)pn!&z&O2g*kd~!pWzo`d5u^~au zkR#rQf3;z2yeED$CtSyzmF^n-kkkLxqtM1R2(4Psu?@xtT4}%(?rZr(su%9Q76T?_ z;hvU%nXG!Gl}1hv5B<;eRkjFaNV2Y>z!Nsb$d&RZ^2_of`RJ~ObQ2X$bb1f`(s1-` z&n1eeBb3;X26ErlDt8xka1Bl#93KVEGy=3}?am1Pc}XOdTcDLCjAV4vvdX>Ck)6XK z;c)aUlG&Z(NXG=O&^gZKEo|pjDd4?=7K$YB<9Oxl-ZkC~>q` z2qHUtfXmxat97MA%DL})LU{pe?nd3wm7p=2Yf+8oyTyLa6evV$;=H$ww7a6@N=z8Z<3GO#H{)qG(aPR zCgBF`mh71i1xk3i#B1R#+4Ua0X<^`!7i!?&h0=W+{+*xt8wHi!(B*0DUGAZRwz{K! zyNS5`)Ozly7EBJJ=Y_6N=Rkd4sA)yl93-C?+Kj>zLu)k`{7|m^YxOHUpv<`4)%W#` z-QIhr-RKapn&!vX+m76HY}MMWO;&rhF%x?r{qBW(+DoQ64iTSovMoD1>t1*VyR~Ac zUAW&~#Wr2NW2iQJQ&;Qu53M^?XGhdCJ560zXSbZW=zAtlwf92SnF}iCu=+DiS!Zgq zl)KKHxr>Hkxrv5?t;G?d%Z9H+d&ywOV*F0yc8F3E#u`w`mg%D1Hg~7pF&2+zjuvU5 zjuJ@p`yA&&qt(Ntrx^{kys}fVgM*i@@Uy)1DjVW;?HEbzd=$pA&} zEitj9Zi_1AIS+IX=SMfsest5kfz0`4%%cLibN>K;wgM011JSC=!n08#&WBYg;gYiWn`g^znrBMNPThwx9Vt6`(>$HLwg$;^ z|H3{k^c}xxDM(_UllKYRo@)8@RklZuZ&tQ>-4nOVl!5vQH^;<=`)wN}%ds*R?_@T_ z#ML52?xE;ai-9A?uZRto708?cH_zH{nuobee+ZB7ZWgg;zq@IEp*^*$D6k^d{0+Ii z{t~I(8d1Vg&7fhOPGv+x}8mo%z-Pxu(b2rJbQ;%R+eH{$@ z<_);C~VuH9@wN= zex&E_F|0*uW5t%vTw%?52wON;+)9T3(*RGMi7LrS-QAd5w)S<=3H_ zP~m5{)kPcVAdr&SRR`7I9O*RQ>K$!mGHi^^T8FKiEp6rU%bw;f6j~G1$F>=sg1xO= zaoMLp4jtz2C?s~sc*Rto>_MSE3#O&3Gdq;bw~EgBbyUA+=hc}luGq3%HG_tr$ghKU zex3QtI!n`QY;b%|-HNUo)G$KW)aIO4ch+2IUPdvbl$R2h*LA&mYfxxW$7zF#k&5lZ zI^zb(23JPRAJj$yPI_X2yi^4fZ=s@=ZaYDoIP+qywgKhdhv}S zdfE#2!q0Q_!dXm~;2dAHp&IGb;f`odC;N*OA$Fzeu=k_%BA}`3fA7-SJUE{Wa zu2~}4w=T(aK$XZA$hnnmn-ypSs08ko=vdk2njgl(5G3U6P)BLq7tfXW7qL!x9sGoQ z;%S6BWp&8VJ%nKY%E^%9E*x4o+HRmo+~b;_Nv^t4DUdsAMPaE4DbWsw z{x9TjJ3YQT%x(FnB0BFnSB_mBBm^=2c?8C=m`P0(mlpHYBDT3*ntjL6Pvpg#z-l zm*^ZXwYj@6CT0rOQSe=N9LI21oZ;}~TH50nUwjs)B-DfNVmb3V4(#O+f>DlJlH4x4 zV~8s<1AmRIAJ^zsYMyulUDlndnRbA%H*>l3=QiV+P|1YOh>#*(Wz#0OM83cZWLIZjdgp2wWRfI7x+H zfbp_r&tx2R9d@fg^Op*JprCfCC?pksxqV+Ts$9N5z*qRw?K_9-<1TF4>(h^~brsiX z8*ECGU#5ogI*%XYkD*9-C!(U{xbx!X$r*dHa}?gw@_bFo%xQV5oH5=hV`zX_j}xJ{ z*|cuUd&<19l5~dfKh?t95vwitEb!tt)f&%G+MWmz(nS0^dTG~ZJdIO2M2f@LV(}uQd+Tma_$({G3{BRtUdP9Cn8(88!_|M;^Ix zQht23;M1to=-x{A5nSxRv4xP~wuhGfBuYDUA;xW?UMEH7H2FKWh9;bae+YQN5t@4u zJRX!oI7evdHP>?5%osvF(0e{|SHLk!TD~K_z;pCG+AuKZ*P;odhTeyOL8j!6h?`HP z?8#>0Ls3addA>?VQl4tGLicJEDhd%s2TASSDCr{)T!)cV>Y*~3G%g^GlF%EHkX+dB zl2AiJT3WyFO4GzoloIVE6e7{J?TM~NqB~aqPol7Jj3i7AOV}fBz6g0(*e>icj#(DE zLXrJtRL(39M2JHKjf}=4VK)*mAOTHiw8C3A$XB^VH%JxsoI>?{RJ4?>=YrbDEOfRa znZ{~56s^FhW`4QWvScbdQZ~5OQZkjDDhsT&sNZCJ4Dq8p6e$dbUeLeo8=2Qorfil{ z0|(~ADZdO2l9dj`^N87-8+laEnUr)QwLPWd^x#!2UX z+!j+~Ju$&CV(Jl>_;X^}PAOy0iK!b~m4m6Yl@oHGh|2f`%U9{_fPtm-(t&~XMjuRy z_f;B`;#G!`)X$XueAIQrNE#_!_3wDnmSAZ}XM@A~UWaEcj@l@nL1e{Ld4{#~+Ef2s zy*eu?JIgY}lUH5049sA|ObQClZ4!q+$j-@5q1{YvN+OLrSfAn7SoB00Z8a<{bwV4; z+V*LUS&D*IEx8xfI9};POFk!){z^?OoztdyrKi+jg!UjaUcZeW$E46A*|e=HZc-@! z1VN6}(5dW#?p+E!as1|G_97dCCt?$yWKu(sAII_o*11_eJFQ7AlM9s{BOYxwmiRE+ zHp_!IAP+uA!$x=T!Le{l!b34aiJevqeg*rLTG`F(c8f{_x_x1A4>&Yu{Vnjqg#T@>>Zil4S#MtH+gNuqr#5NwoSU=4a;8`q?COt zQwEKSmU#_kR7qJWC+)*{+nj;>gecKSuoi)CfN^LgsbFr4s6MaW&Q__{0*QkhbFDmUGtUk2tJN zEz9F%UjG$$+U*L)wBRNGX5{nMT4zY`{Y4+U4(OZaW(6NTvfF2;B=hISU!kfLvkdikux^5&=~^vuuy&_xrc>*LcuYi{Bm-}AlMJ}>Uc4fUshvx`f$S! zq$+$-PqX$}_nNY7*)`_88fv48fI6H?`8nR+$1koKfNBdd4m)sZWwdoh-$C6Fz|Gvp zC{8)c1l`_81)j!k9U#Haui=Iss6QeJ`BF{KAfWnM&a+lU%RvV4FdU~&uPIBg&QV$FCe3L*SJ zYS5h+nKDGOb^@auTPBCCvV`+Avkyu4(9ac;ht^12?BVo$s!0#UuX!kyt^#Dmpi8ULe1#Rk$I#7B`q!~}z`t+~CC>TiT2h3vmfSLlC z<1RLg`0h1$G6nUoahO`@jFj(IgH<~*U2BYYD9E=)XvXzM!Q7kH-;}#yLNfFJ=8pM4 zxqB%5-`t(OC$wj-MKFg+nHxx%dn9mOq|BKdep2p?$Nrz(aZCRvcaCAta)%Sf?o!i| z>;D!CsJNy3C+5qP#t237En#s8Z28$@ z!C5Rofne!9LSah2Ssk!bffEY;nB@6HQ`EtIUf~gH+em)KvJO-=+lY5um#S&2BwHi# zcH%h~Zd5cisNg;PM1#K(FS6r8b3dr3!kt6O8(QGYNN_1I2JuJ>BZjGv-WcP&wXnqoxb_7tok9NmE&D zfsCu5`^83kZ`WZX8ffy`>h#xz0@@S`_r#C8`@K#v1}KirqTZL{Qgm%a0Q=Xk-KEmfd(b>W`HL4(TWxWwyaT;3bH46Z(hi<1G||NOFvm->*h_-G`gU2ff(pg%JvU$_Gu7rLz%7-SbXtmY#103_6%@l9 zO8!#q*_b7A{h;a$XT&P}m0;xtlu(R3IiXtraW&XsUL(9{le3^hk!(ej&!DyGGWeSP zg>PoDfu{G#hPUzHg!}>&)7DKnUxdZ9e2T}AGsRnUO*3qFKutYJyC*is@z}lE} zzv^gbgru4}d>#%PK~~UHx2qU7pF#t_UoEvwdWj>3g2KHp@03nv9K#1Vdsa`Ec5i!B zn@5rzn=iVwVgGc5R5tCqsn^LBpm^+5R!b3ls?FEP>yJlF1eTfRN^+P7RcB9({M<%5 zxT$S`#6%jhj`s&ENS<&9I&A<20TkGv{XhZW9tlQ0NNK~rDFNw>QF{!~K|3$TB&}{4^ zeVzTa_F*R{WL~&ElXw>a2OXlqS}G zszS?^*=(R}a<%2bY_`Ab)oKg(9vj)=#p*IYKDOF2Stw`nj~2*+bpy46Mk&X{?y5qS?eA-j%-%HRV>N!^ zn&V6_o2;6f*PVI>`Qe}rvI}ZuI6x7423S6w!wxZ3A_B=bTyqr3Z1vZKF7#`}p_p}s zk)z8Th->!HH&s!yrPdvt-WR`U%El7`VX?Guikf{51qmNVa1WeGrukWI(~^>>CG9K* zv$bE}B38PU!*#?#iZ#O{IAzc5puD8C>;;*TCRao*utx&kaC04KcMnL@Z2S5YC8egM zr1e?CKxqcJ6_FN|fKhE$s3hy~3viZPdxGbv1}_YjSPhwvSD|!LtX4Y`nYhzIgT7P4 z|9Gv$8DiUijm+MGJ7whU3u8Nnx{p)Iqf>yT_EFL5ty2(Y%m{o>Fsk#Mzn1CKsdcz& zOQU7_c1xlR{2pN$FpmvXBwcg9B9-MD%d7M7&dL@lwmDCW4UMm|O1P@d{+!NnvsEqD z?JD!-DrRTb?47<=jcV`Vti2kQt06i)l7~}LiJs90KT!NPq(6^evb{wWHM}ZC<7>~r z3Az4pRakdf>3$NSOs8n(%lyK6$a3GMdz~pxIp3db5?<95c&6{HD)J)7Z>WsopuEC8 z@p}(v(^xU`8gk34-OZaDuc50#hpQmVO~s8MK19mbtC}47;DGI(1)h=`|hmn z<;M>jlkNTk?-pMYPOw^b7o->bgLU%C+2!3e4ZgA9BSKqNuJ8NR~!v zOp<^xDv++zxJHqeHT)0m1O{m`P?t5HW77*Tiz5}IHgKUDWm@F>3Fjl^El@E=yW$6gg)Yw=5;L;WQ;46obpwUs3D-P6u+)ti!%uhFU<^hFfp4Lv6KUvA#Xf;77J5GGIVRyb4WH&t+!#pr zR`^sBa`cdd3N^lkr$vh2m*OY6<0s%lfav^VZBngpKL1b_5OCzaBSD&qsQs8@4O{PSI zcPSAvGOtkUvq(y3mP_QRkv2uuqMD0;oGLwXP_mLUEuzd~zL~q7a>b3Kj8fhwTBU4q zV@U(`LD$5>jiE%)OM~)UB{N!MkVo2nuRNxu=&L;PcTyETqDJEoadJw&ALBf@0-YmT zO{23kCrCHJ-j9ejU6e<&`vaywft>L(kAyp}Qj;=d9I2r{HiqZa#1OzJdaq)Rw6W za3D4?ATw5J>sF~$Duc;CH9-GW1*TZOkcxq;RgbkreO8IR54aqcdlWk52&9mDti|2e zr*HJIZL2)Zlf>Ja1pK)L-d1VLp=1z0%1{~2Dr{Mm{PN1OZu}-mZ3SJ_i@|Pz35#4j zJmhK_iajYpT3%KoI_bFq|mdHFS!wmFi;M&aMO}Jdcr-7^^9C4tI46 z;};sbe>r>wopMnQdb#_HBSe#zUUss`z4suj2(W5i!$rm$qG8YGQGT-A*BE_2spuz= z)j~N6*j?7;YCfsb#T(1ixUuO4hcx_MQuAXfUCW&Rs9}JT z%Di60YAxb0ikl2FF4OQ`D$9cSms}Bz|0a#ND?wp@s`+8=l!O!N$hldV#nFK&licEf z9FMWc=Ym>~!?z3Ml)mE^BuaroXAOU^!lk1`jhD7u6M^HC0Gga!raR86`A}DyT=6p* z!Tb*y<8Nv{*qxyw^|Qns3j^l662C4bjwDUOQFr282W*p&g~!yvgK~dCb8%IL!&8&| z+g0S+pr*Nu-pZsl84K`lEins$VX3IC|8L zPVW{iS8Tom1t$KKyQevVP{mRa^@BEvX;Vkbr={-mP|BkA{KEp4cE+wrwGbvFwYv@Ow9;tbR>9> z+5s5huDWdLux9Cy5Bud+!i%fD5-yR7|S<1wP`I?&X99X|I^Ob)hXI;uj^B^U0+X6(RP2`oLqIa zz%%OG3WK)Cu&$$R!=i>I51Th^4V~qZNxbc$w_)=}oAVV# z*b30P#JDADq~c1W#Hk$1yBes_IY58{t6`N<7crGH$3t#OjQ&^@!CETJ!R5RXTFn1EPiW{}J)jj`KW5NaH( z%F*~{2Kw+B6}CZF$!E3NXHe?MRs+2KWnLeN^w11{$3aow@9I=Vft-I^D)Lp-J#m8x zVZyg+emV^i6yKDuhDaoOZ-WbXM6X+kme2-y1T-)6wbDXpGJ=0!377< zlU`N(!yFgbT^YRNoNJ>8;X+?}5z{1<$P3*Q5=HgZD+uI+$ZqZvb&)4rqc?uY-qOG@JU6nvlOD$eDds*BOK~fddOJ13+WPdN-`mZGTDidB_j4j*hDN8fNa!;`xqC+YWIQ z+gpWw1(_?y#_G0!QcvY>sVd~EH7Bm-_1t!N zgsaG}wAnh5pm0q!pu?KERIG`&sZ^h%1A<&NL+Ss~pFeojwXA(holAFfnav+%SZB;! z*RkDKDYc0QeR5BU^ZH($-(gz7pS0vk5T5kOQFqARSv+t1)oq7Py9{(pQS%PB!Z+2* zVAnI!nQlwG60YFI%pRqe+yg#dZ2bTDdK2&{imiWm(w&VkC?N~UWU@_Y2m~-Qs4U98 zWP)LHAweUeUY*271@#JY-ClI)Q9}Z_5YPrh@62EeiA3qag)Jl#AOuJPSs)M=1?{Wi z#-h2(Hs9}5PZE9K|MNZ1JU!i2r%s(ZRduTB)TvVtwEsLM|9uh0a^>AP@BXVW7ItT@ zNK0D~YzsDS!0e2^Mjles1j0*hhpMf=HRsfaW;=3IOTSbm1?8uBPda*1(kL(2-&WLr zW2en6+TD-Xb_L=yV$olbSi6{tRtb~m_!qCi(Fd&sUjUurjCAb7IgK$kW{^vOKgUXE zPZdPoSop6981r86kD2`Y8Gm-GKeNuCHf5eYGiJ(iduH?$)t(tQrNy2(aLW0d0bgPx zWX6|c9b=`jp0WP1r-4Vfd0=&vG!B8K31g+Qd1cGTddk$X{<0PbMvUoW03&8WDvmkh zcLvcTKTs>$2C8>|S?A8QyA2-KDed_U4PR6 zFatX+g>%kAKnl(?spx?QmVm3@6fnkAaW;E2FyaT-0rfuzASaE=Bt>E4+kG5lNjFyKf)F zNpGHVIU`}GKMZvW7_lwZy6+_V-@q@mo6@zmSbce|<)s@N;MUGaQ;N|_OY zT!r5Qv{|BU*G=kk3|d?27|x}f$gZrlMtr$`%m~j1r<9o?>Cc{WaoN_;FVj7z3Lguj zg~JT;FS5gsH;`QRd)AziA93-Pq|dOZ(KYU3Q);j$DizlN+9rEkd~)1tr?gwHbt`ER zeE;T_*G|f9F1{d2yJvIXO7pw^r%uW@yuy!n3b${53k{9R?{$A%=boVNVQN!1GhM0I z{c}&4G9?)1nb8v_P7a27V|v1bN!?*9>fC8Te7ALn^`=!OZccWRLe}d6U@&7bw>y)z zo-o0#hk^M@-exF%Ja3)?T9DrAezmi;@sfYpsar3jtByR$X5y>P3S}QkWrr>m`$0Fz|9y>5wr)K!-%ahmz`~yF0GW2DPg{{%(8k|x ztcaoYw7KZESiPHwcgVMu@HdzZrx2=K@cp>trKrat?Dfe7OZbAp zzn_>N^1!|jfB4B4a>mVjJl*RE@%kS_8Kh;$(KMfgBNFA(HhDkN&#FB!-;sbQ@#W<7 zmyhFx?Nnfm9K$K5Ec9A5bTpPDKAfwDAzM?wrJghHOFs86;;Yo&jCY+`|HRUkCTu`b z8+FJD2jQgN2{BfxZ_b)YcP4-WcsupUb;qPVpIwbICL1yC%l3jDW&< z-wAoeQhwy5FHV$)O#JS=zvjg1oQi0#fAW;{7ea{a+lXwRe=@jpAs~!N^%nOpP_E2M zCvv&;2}Cwg?7+X!H%pFO#;2#fcVbGuJ!GO^IWZ-t!djNj5WWyn?jY+%Y1naj$})I* z5=W%UE0^&Txya*k=Q7^P%{d|Wd!5ftnW@v#;yB@dsF$3_89D#yl<$9?PwM|wXE5W3 z@Go8*CYQXB8LG5_UD{vv7eyK_jk(sUgwL)4LyNkZCnEt;ShRT zi&Hn^C0J-E*C$(AL$R_>JK<3~ZT3%*2tVZ+w2Yf!C82c6v)|xv;;uU(zxM`jo~(U2 zOo}+s#9{xRFLOv?C(7~xjv0%1PcpXZ=Mwi&eNFxJnw#dKsL5%@JF9qOa^3nT&XOiY zyCqo;d6OSx{^hvme>w?bc3L=`2m!$iLI8nS-YMt2$rle4uB5ydwZ+rmX*L{JF2A$NhZh=jiO8Yjfrum$TpEC&XDg*%~dl z)6+&AS#?}~?JXRwT6A2vOZL6RkBn5lG=ndTj?3S@#Sf2o?0Em}i{%ect^SjiJ7Ek#=U2ZNm1eUR^?Jnk=s1pP#DqO1}G}P6sW5_o7ocz#AKK_gGEBT0!o4!7#{dx`k6JsPg z(lVUS!*C&Z%zBqKc#aeAHFo#KB|u{}DWvt%?)4AfDb zO`M>m(im#B;+<+ML3qV9CAx{ThooKzNjVde+!|t5vpPK$M|E$7XHt#*s<|rO?;O&p zjW^MTt$0itPK*WWdyfgDIsDfiQ(n4?okoM2+6lj9p<0G7fA!HTQTKl!CU3eU%Kh*H zHL>$#IQ(LS!InZhky;pf;j5dY=Zx~ae9YDsSSU!$er^-)VfJDpX1JT^Z)x z9WEvYlN+6XN`Ex9F!pCX{ZrlPahNB3GkBnKoqGAP3KEZ`hJVavg#M7upF&S!b6uTr zOqz3))ejwhvOa#4S}-+&q4UyzI@Yrmx;_c8za2A<_uq63wJb(ClgM~XI)ALpN)HD; zy1ROO5_;-5s&(KgoyRZ^Nr+MIPSSZKb@(wU zHwZ#4g=U<6d^kx6@oscR_N{cWM$67FArGY;1gR~@gmyL9jL>w9QR`PkdRrr3DgBxXV2H~5IeRYbQCBn`@ObJF&9B>u54fn1{&EI~^)*3lo zE?&i_JHI*#6o59GT#?qnnf+k`_g%o)&$H?n{C;ps`kxR;hmT^0gZ(q2N(UbRa4lfG z&a>J`77?v$~vWMH`xi zP2B^2weK;{^DN+Ynp9AXF^%bWu{fuXO0=p{Et7PaV61Q$9?p#ttb4lAn{3 zD&1+nqL^@@qts&kp;RVW?xs@VN6CrJ_5nut{~R5gfjVmHm-Af*rY;X06TC@H{4^h? zGu26WtWUBPP`VLv$QnL|7d7>Zfou5a5U1RM4v9(RfuyxjYSghN&hvDKuo9gfVXM%( zXv7jb$dUo6ONn@wBLYw2P-vRZPiEZoK0l4@Q;qccZ7P9M8^#HC)`o>>v|&UE|49X( z{`IHA%j@6eZ{%L>kWaqL-^!irkdxN(L!HVGo1hD-`(RTwFZ{3xqp7W+2vSOH$6grmu5K9RAYd}pcXb%?Y%h#(M>h->YK4R1 z)fGC7@LeyAHkH9-68#4t;o{Y$I*_Jy)2vMHMkDM?mFK*Nqsq$pq3XgQ-05yOZDJ4H z9+b_b{woOaWp8$hy&FcWLv9xJNgYNx*$X31=!Q{hQwv|cUKMp1@pv~3DK`Js4J7Vl zKo9Cb!m(~3G>cohVT2tZC{ev9NYIg97-eiXjJ7q^c(!o&Ira9VtUBQ*wQ&D05LQ!; z5_9l%_Gf%e!k05mXoPQD{fPGAZ42bPU9&I$h{ppFm5Hvl2U zk7Mx-6hAI}eLx)@jIR&I-^k+Y$-Az5Y5n^&MylC541DSqF1h9ek`V-iQ%gXyE&QE; zIxGlK7eq3I#rrA#Z1@`ibx<(AHW;7I;%g{=Nq9*>O$o;D48|w1_-cwD7XETTO$f&C zK)jPm5yt?w6Tnm`ht&Z=fNenp*R%Mo6mJTDDxeyJ@mqrNeOUY#6ki!WJD`RK<3A6^ z^DO=|ieD4{kAP}8s`q>4(|{b}=FM<5tIBC^J~2{zm-_haN8}tge*#Ubx(HaJyqP4iai5z+{t7{b1L@q3~Ecq;29}uMaSpG32IYENvL7)irK~uqsI&# z{7NAXS|8|GykaYB58_59WJoI0Nw8I1UM3SsTZbCITO4C|xtA`ExzV^~@rosCZAZxk zC$)^_9XQp2|Ia&0=LjuJ95Q&)B{g`&E-ql6iw1OA%;{1~y}0Fp)h zqyx3A{FVw|kW9qXr0P!Om5Vk101dp6^FPrcEu}c7+1K&|u7O31ePdeg?MG- zmb#F%v|s%XcStYmX{3jV@)@99xHFK4+Eix|BgH!cb$)W{>X~~)ygL9c>NcxkSO<%% zhSGp6864a{56gqs@u#`O4!O?<{38z!I*g$*a0K8aQ;ezjx_Sh!VqdgPIH=}G$5fM@y%Oi!4DTS^{{DP-R;HLkEDsf-jmr;75cw#W_Ruf#~n4>ib6! zMTsw@uq*~d+IB@zG9Ji`<*H2Rgx^wt`5lJ&S9)DZugWhet}w&A6-U(NM;7}c%H73_ z$Mzxnbwc-3iZ9GS80mvcrQoD{@GkzC;vD_<-e9Ibrl_wT(P7S}7=k?U;BQmvv3ttOrdX+&uWLum2B$SH zKFnp01#jiwKjixl6OXv;W_;l%dY^to)=$#@*w}yS-h-_QWFXYA_kvFa9 zvnE(a9WgFk>K)4&`D&h7unX2rW9?%L^!W_XQSCyho8OLE;u4EF^4ZeJa?Uh5G0akT zx5X{Dt>*_{mvlt>Tl@0y?Y5$L>#gl_#0LK1z7~9C+ls8#hIV=W20piMGXfsB70t1p zJuKI5;1jMtb9mZj{>RRPUViEj zyx}J`Q5-(6SAmnQ{&Fr79`}^|4Rt#^YQz`x(QJZ zOB)#>pAsP-9#%GikZe87II@Y3P>|B-bc*Uej7)tgM341A8zafN288fjwxRYc&QGbU z4hx?lK=?Opc=Qscr1ucEGDz6;|4UfO|KgDIuvEebdxHpj<*=|Ggbmljx;f<3j-^;P z^s;CK>h#0r2XO|QSB{v}I}g)r zUu-vdCoTgvsMMw&uBMr`=r_erjU<;6%4XB-SzLXxq0YJPI|>jFnC96J*Wn|=Tl6?n zK?wUzj=vqQ4)+f~>@AwZg0u#cw`i{C0#$*O#kf5yoRSMmz_!QfOYo|EsXyn^Qs6zKr=d_bU zEKxK~^AX?36@8USo=}B5FolmyUbb|z)S2&H*{L&Swkc<8D@rtmnjf@h80Nmu#M5HTzT!k@=Z?(;*w ziZGmvGXLP;1d=7^d%XbfT=Q48x7H<7a!Kw9*H&IrHvm>}ZDNSD71xXrFP5L_W4kvc zqot_5aUdR)#y_`RD$|omo^}l6|7gcRzWiF!bF=q0t71FI7T&rBpZT8W+9t(t;hC8E zIB!>0T+8`a8`%EF<@jw8AbU6tw+{C&YnPrQTyU#a6T0H(ZrxhMV0?b4&c^cWrM1{k$hbOinv+5sdzq(?d#b~9R<_|oN^2N=_d zi_EmIztDE)Rob;;mf14mcM=P1lMpXiuwx`ZviaH!o#w~>DfBZF-1$EwyF z(4X+8Exa5*ER7ZKfX6?rUCO3}q*SisOxiOj+W|HV<+V#gDW=Zz`u;kK7DSyXNHw8d zvQQijYjErqg{CMcfrxW^K*qF7CLP3Q$$~!Lu%Au~@=7m+wOxwt&H7VtPJ0}=gEHih z)hp2YF((uHma zEA)Zg5RM**>)WNX1fetLNwKI0d!Kgc>)x2Bw1-)Y6LkAS+ohAeQSrh8Jt5uLR+xpeT5WQU3daVn zwyl1j=Y#L9KSiw0c|5%=8pKO?Qa+Gebsx|4*jw*~FnG&Q4f=$4J;+b>k3k=tVKUO-j>YdU_BeM;X=&Gp0=%*qeDMMM?ni$hlTuYmD?NG3|R_&u6EXtr> zENN}hZ-BwE5b$KUQqcn>S}yxdZ9X>^Z^S$4N5TYAhDIi??|~B1E~kHc2z6yke-lrO z#Q?+HyxR=Qg3PbN4dAl-Qd$*P#C>X*opHet0}yc?C8pd));VZWAbJCa%9}ILnY|8N z3_~Fvgk+R+aX#)T$pe2>)Oyf#3Wpk`_gl|!Pb^>CS~$|M{M}ah!OgfI;C$=%(oYdv z^U;1*&nvSQIoJ;0b|N_ZiGac7odA39+M|o0XlM#mhFvRp606oH2jeP>1A!i99dD)X z@G&JqcVN{e#`N;(aI3VQ#qH7Kl<1x~r~hE92h9 zvYq?v$BR5ST&g^@yy6gVPbl-Q_Sx*8fdTP123JMn18^{7<32Nt%9yl*?aNMz`CThD zBN;9YD2lQd_2uox1U(fLK$}`+=cjy1tTq^)BR@r2xT2ht&=)c5T4nW9ejqQp%<_Rx zd5hCwC}(qFP=c+L#fdiwPN2;)_Ko3&S9rJjDqLI3dHcW^d&2Bou6~4}YevHC7_KA- z70K0OqQxreH@0ds7(bl^bL>Y9cK6arE56AQ4^1C*$;Lf3ID;#hV(8D|HVQ6plEG`4 z8-MnSZ@|&`rB@8jzMXJIfJt3U4v!ITN;--y%_EUt9p!oKkn|M2Vib%C;SJHIj1W#o zV;FEL#!g1{d31HJi+jpC_0a5u>y6({+S1QfL=og}(STQ5(MWui91hql16-DvMJv+Q zZp|K7TkZ}SJ&xP-t}|`XqKD;GQPPao(eS+6x8wjgrejNVxv!hFB~nL+eR~~K9$hkp z*TR|CfESkI2HSvHS9V#49hx3*~@pt&rK@b6nk5m-B)$*M9VdIzUbI?;jOJ(4RwDK(;Z7IPns80k0fnr33D> zUeLb(6rrAb3bYeyl~99lLj4Dctm>%jzF1~;(K|?%|BbCEXa3=X_PVFh9B1K3M!*$n zx;LROZ4!Nu=Ks1yE5YqDTNX`RG-TyBY^cdGEblx>CqkDP2fVdrQJrUt&7Hb!No%BG zNOE#*=^}a6MeD~0F;uD@E!xM)OpCz_yOVLmHp#UpZNcdB7K>YNz0eyhKiC2V?wU2m z0XFyb>h6Qvmec`}IoZ{4Hz8Vk5Npf5En;O5k5ZEilk5K%BI&b(UUvX4W6ItAEpEfJ zW&M1ShV@CINfsCg0vpjzGs7pjOfQN$EW;Rz!XA1xdV-T(U!q@P;%#`^{o$hWDAT>G zqm92$+G1h5$g_8Mu;fchT$yH9CI{xNFaHvUjzaU`T;kjZ(NmWk+JIw&wdyMezp9Mh zR$2L>3n&u&=U$DTy6R9_^joF1q*p81R$3a#uB%!);;~%)9R{iJ;OvYrpF1Gs9E2AUnEAOwT&%Yf)^&8d*EWbwT9jLFABxJ- zDNtU=I$OQFg@{>}4DGCsdmHb<-><<22#x!LgUCEwFc^%RN1LYG+)GEBxI8!ugjpp+ zHTabpx?{zm@Uvv?g;33h`{<+%L>gLcjv?pW zW?S9UxXTX`2UoNukS+uxfoIE-QA1Yzi0*c?16MAY&_^*y-un)YOUZk-@Ipwv{KFRB za-9-LdN9iCURKS+o^PR?w3W9xU#FP>3LO&?LfRV5@cA4rFBJ`&%iCh;8ka#9{&nz^ z3%v^`&JTq1Xi7=X73?t&evYee(?t^Oudx#{d+JdPUPYFeho4DXdvEqlwZ?&?Z{p^= z4G%y3@N@5kIUYMS`t#3=&|BiU@O9nIG0spp=#upTuzFv4y-!T8N2)605a2ygA_3#g95QNQKf(A+b!=dBEm z?BV5XWS@1BWd7v~7*4te_7ED_t;j~Yg?LgO5#_NpOJfenFK**ga5`CDvyFe&^n26t z|2D;6jwq{J-P&rONmM0E7n_z}Xp)C*=QHy99lGz#3m07W`w-(f+=Qn%BH0-EUgY9; zo?09;7wcLz{1DEN%rA;|*=G?@BLPum4?|_E=MRcg0`MBPogbg}(?P_*8mI7^OYxsy zDkzGbUldnvzaN2w=G%kvx$QUs|9Mky$LJrHQ{OZ_^ir_nF2JzQ&5U1n!dlf7oMHTv z<^`yPnCnk0uz7wRhx05$fv{v^pmBlq13=MKq`M&_q8^hvOdaAcUhy(9Q@EfR$n{x3 z-e@4ZRi6ih-^k_xqne4Y$D97oJb=s4M^uHR49x@9Hc8%ta?1`r<<9Wbztr3_4Qvi@ zpY`>o?m566G#k5APq^Q$|LYWh&7PMKR%o?&Y4JgMJjUl+!$Sks=ZG^T<_tg3I6uqJ z>b&-^<2;+4JQJjf)TvJ&lvh{tL!5Ut71TYAenf{f1FkUBqY05@bXXN8R#^^m}^qvL8gdja1L}Mdr_pfE_=d)G`oF>-A)QV{De{0 ztTPYVielL_&ZflJ3Wk%?(0UI-2eM~^_3nfD!ctCk^jMG&dTV5PjR6MY#IAMP7BlB~``MI<0#U^|1 z6Z3PQoS*xYH+P;lcfL3G8Hkk1b@OwdwihSQ&wYM=?hE$f)cLuK=I2WG;`I5srSo&k zkY8DPIa}(8gRc2J%eHMUD$Xh@9$r*DvZ(k5$GOJ&xt|slXBQP)i`)%!is$D#X=$-4 z+LcZ&=ZfmhE(f9yi+~h5O+*>@y^J%lUcrK1Ud1sIjhS#&DaulJW)%vD@wXJcSEvL0{f_>3E=M~8B zf=@^fDVnc&ccm2Mnv7v)IHxPfO)AKxeW8MI!wY;tF8PXt@|^&0|9H}hhT%qx{g9T^ zKKA^*Nqo+1{i!j#vVVma0KxX6{-@caGz#a<)4a<4SG^xJk|pc?S3Rej@gmN;N|!x` z2a>$vq>tqXYx&#=W$4GyRo)}7ujTJ`e%9>yycx)blD=JdH7RFvvu85}SRSF)q`8ue zq4PE}hzQ5V=FuORah`>J3sRD&l0`73>Y^l^u`_r+Y&J$H&LppQ5h0}*<>jQ;BNlc& z4d0S+PmHln$jzCW>k2hIotHgf!XT$1bi$%V>Y@pu*0-DE7jSwyOEGK7|3he`*I6FS zkLZg@#)PEj>M@0oN}GeAj}fTyd@x5nrSe=7Jkb0aC@jT=EUYlay)O@NL*lMaf4P|r z#edTlz)DS7KxSmr`8+92*hLktT#26pr7+YZZ(k*?av$3VjpK5xmd2uWhm4WaRAf1m z_dL}skE`QT2LI=36*tXa9R}-HL`)`5j={Ot(9yB*Ts(vgw$g*m^2>F+$$4)xZiXpb z5N79u_}H+VK8={e}^mLA)`WG z=h7!Nd%kXhe=3UFVXAZEf~RILXAtk{E=T(K=I(ni(r<0vzvk`owHM6~?#8X) z-J%4eyfvzkcDOKoxUpHROn|!6mr%#S07|ts3)T3pab=}e~nZ#o0Y9Bw2wNtS=)lw2Ae80Ypn@RyxP@_W}%e=3sg(9(!wA^)U;+{ zPl6GXQ#GYo+|2?Lpny`%&B`YB#jYqyY*s$Om!c$Cw;up(e6!#~8W$Hv_fLdh;QE~5 zB3ik~IxbZ0->ly~@j6m2 zT)l`eQZwrs=1zo#s=pwN8a4}4jv*{U{Q+TA?<`C_im*uaTZBb)hY1}B>!UiqMj*9i z9pT{wFy>1H(ONz34u=KK!Vp!iv-UBnkooauXy$~DOczz;@QxoU8bjk=iVlP zJ+(_$JoQZ?dkT2&X;S{6r-$h~RD~9FU$&sUk`SMJeZKVo{3@?+(%v*zIm4({m8MoM zOne24qA=@#CTic|dy}~EQ3g>>gw5+;8qvE=$|AC|KEw5C|zA|e5kPP8A25zjLt0W76MOFX3*a)S|n1`LBg`x)844PWRg?&^0zpJCfuj|I!(YK12Oy1 zHU*?N4#e*_)VU3?p^Vf-imQqg2hjO2z_>VJ?G^w+3+&~F`rN#D(PZq4SLKq)qc#dp z1r0v|7atko+1RK(W5PhG41~0Wt7XVU*rROOj~NjfVS#h7!DFRby>A{KG=2RekiP{k zJJnH5_!8&AeYMfYGxL&+s|V;TvUKwS%+hr8qwQvOX(Pf&v^{0UN;1rs!CUIsA<_~v zu#_|s&L{M!m`M6qNa4v0`&@GztXg1at7DMNv>_l3Y?7aB;9pJAItJ?oO&iTvKE1Uc zxw6(O8LC2*68ZXl{BTZgl*jMmM`SlQ!j-El#|-OUTvt-gb}iGR;Oz{h!Vx>v50snA zM7{VqdHdxx`(RKpVLznM&PKiD!VGMmW=o?fAAS22Z4U&a^3=~8*=kvv&Oja{5Y^Y{ z4Q>z z2Et}~LhXXa4bq4E<>&)^T*@E&%DJapMI&bq<#atq^10d5uoA}}kQBCGo_K&S;7;z7 zR~_Kfx$pML+Yj&~INv_`>;XPAcIQ4USD><^C47Ib{4{BQ!Jr-Uq>v(aqy5 z^9HLV@9SZ)ZXF~%U{(`oJf>o0f=$DvH~u#aimUby!YG5yn5zdD*GI3AVug%_lp*A7 zooeH0Gj_a;SNcvg%1w=YcDf)BZsMUn4JMgO>{v!QpgUkwQ`{$~G~t?^dHdwaP5dC| z%zbDV#|{MBMIzCBmrf51RL;0DJ|h!hs@c(kfl&8j70)U+Plqy&#Qr)n)S6_L?%6jz z60G5vcH=f6u0KG;OWCI zjpDK=th+(deMWS0@b$8V0thQaiSGicl3#{FrAtWi0k&l;e_myHMc z>$rjYWb;7~GZD*s2)(*=8tTy?t2klORW%$PT)gfYoe=47$a=Pa-tb$ENhBLr2blIL zn`xhDu@TNrn0PJLAc2<}h`@2Em(c!v7HE0auom+1{Q%DCLP5@1p+yLS{sPectS}*= z+0bbbtSs+8$PZ0`hNlU(VaQQ@D_|?IAtU@s4$6HG@kvhQod6tR_&;v|?cJ8d$>)er zgOv{niwOy5ME9d*`XhSM@be_9;7Ax1qm}id%sU^bb7%P6bdFanrNUX=4KPW84H*>< z$3$pzUMw{srofFO6aC%eWbE%u;8-LM~8&hRe- z(p?SHGoeS!rtO3NVaxx~Ful(uBjztAwRXQ}OoOfhLGwU9;+`b=S__{%`ZJbze?S`7 zFg<}K#(o15Pw7ouwI69*Ov~X(Yd~V5Hc2jM<%bIY-Y;)SmogfV1%!<;L0!Awb3O7Q zB}}V>>Q~sFB)eOAYc7HbLf5bmNsGxvVMzxy>BP?JD6eJU>Ky0-(eMy1C6ju(tb^}m$ZAjh`xQ@FYN<%imM9K^rhgsntW^lO2V6obLEU;1)yxqlGa?w0(r<>ijh zpknc2u${X6nH3(-k-b2Qt)NvohO%A$bNl2yZT$U?ag^J#acGI>ueh*VwkqR4iCq1g zhGi3NMUe$XeabC!4ShP*-Fv;31U@HhbqjctH5y1^$7+58^3<_y11@ zYxc_h5A#`fE!azC)X7-NprS76<$G!`8F_?ED^Cxl0+#NZZoCu&hrfntb&kH+Q*!x- zvrm)sEM?!{Fidjnm6sgmhunDY|C4=l|H8gI|H8h<_Q~2|-eulEF!7x@)uc3D$?In@ z>_}KPXsqkLaw%i4{K^sj=KEJNh!B9Xym74mV`>-NUb4p$Z$KZwgK#C{fC zl~jK(YZa=A7`{5E%-Y>57%_io6?^5_4t_#XWG|UuDT>P~xWcnMe4qT!4!9xxwO%gk z;AfAxZJ+1!dhB=F?6Z*(ept5Vy+bu%W1Gwnf{(@&LhX0BL3GLHqkIzgX}vu5C_f@u z`|Jv&#D;lNUA;sWMra5%X4sTlE+Te`QgLCcZ_Jd=x)vFB<5e0QNA@r)Ht^k&~Yx{aq_ew*kl`We^ znlIsHT;hIj`PVcPSom8(w`nX4)Qxc^%>OWxYFP zS(t+FzFZMf72;zmA>~S7tF=0$)LH@WC}q*5p{vqMBUjT>31~>YJ#om&J-Q2VL;k(> zIrr30wfABhfx%6wx$JdddZ**NQTgxx4?_FyyMyQ;{2VlQw!00=d-5+waUe6gK^}UH z&*mx{z6LdhI#x7PhilmbtN8ro4KTn|ZW%bdpMKg&yKmsUKlU`? z_B3^AgLV^+J_$DtRQ-D!W7X1zst9F5(o~mmBX-!TB9bOz-9LNx>8c2*2?#YAEhu1`Lp^>}9wtkIUWcHd4Y-*SRCPaQ}^KoH`bI&HEW z43V953E>8A%K#~w;=*y79e#9OZbNm5i``6!{FOz-4cs+N=PMZO6MJOO3I1PB;d#X1 zvbel+fu6ex3-`2~+9SQdSQPaKZX7GvgS!el_elSupbwb?qADEilaA1L{b}Z}A!qC! zOkt1g)uNLeukEc4p9$r$u<$Z&Tnn!X6AyKXPju<(3&*R$SkR?8U+9Kt?h@tzf)ovo z7yktDTsJ^tm+%+>NIBt{_a}gVbp!105@rK{R2q&){{-+%5I|_?5*`5n&9NL0>i|v~ z5|w$~5cOS}0}wPuIPU31q5QKOV0V}H5CACEUjUxGysVN6D%5oeCju1(j@x@vYje9J zYrAlxTZPS$*AwY9!1hj0D(>vUJ#7_s$Aq3(gYZ}|V`WE|cJFVxM#VAiPXMzoubo3K zT$OEI#;|)$Vd9B^8@G5cJxjiIZ*>^md`D$0CQRsE+815g3>1L^Cww3e_!65>!d{z$ z1h)7+EsJULn!lr7zwJ%?$K|yzGV9vSUDCr;-Clm{*^+eTp8 zrY`M^08EebKMqDw=Cgva!Y5tYXNaAXU(p+@IcHv8JMJ+$L>c;6ytc7R+lj+=u_)YRxVa5lQWT~ZhW;r9xsHx|z7V;p2>K>1uRnc{6hDzw#I!cAx#aYW{&UNXhpZUDJU z7zF^@H_5r!OQs0>yd_c9LqMnUc9--ki6N|$3Nj4wl>^XgS9VF?>?TUTtvBAT8Rgqg z^9fFEd6(2lp~eT)qxE7`RpTsUY#t7V8@w5mT6?ogYGtWf>V@`=g=;R_-F)7G0Pwxh zB@FAztDz}@4lBIgCGBOn)~W~Um9VP9apBM}+nK?5{=VL#C^ub>?~F3`g_Zv_k1&`y zP!r3##g4zVQ@TIufr(mRFfoMp6$}2gDujL9*jknN@_R2f-dd)V2jLu0u0Qg zg%?32UydIKYpUV6;8VDc7|4n9x^_faq9PwH$})0eqBiDM@dq4&u`8)y*kG^yc9IBH zJZ|p7zx3@cP(MCuL>Sx=;JYBbFRqcm3%llx6Ebk^I?a9Z>oG!8uTU3RUOsK`T<;LmVVhQz-WNf4T%*bN6iEC)_a!Lk0BjoZsiyJ7&-O2tSRxpfJEGkxfyF2PaPn4c2 zURlu{^#euGbX55SC9pdPe4 zXfsYa+ymoeFyYFwAdHD%k_e`;2j)2j6DlqV!Xyw(BEjtHf%)eiC$S?!C=CL^`?sCB zE0VVL06oeOMQX1FVPXk}B#@-`z&ylY`Y5jiVIWiN%+gfaKrlQP))2FSS7+|wb7<5S zBuH&OBx2(*dHpwhlKFfcfGR?_#_}A`04H?=zSJeVzu_&(r+Xnn8)DEJ)G^&4FX$l7 z)^3oQF-_RjN`MMQ9S*uEzkd;3Xrq#gge|L#!Hi^Hd4`dU7B{!2G-ehRqRs1$dZs5; zJd27Fp6+T2#eP5Of1jX8>*vlo=(6VQ5#~WjZs)?_VC{cx0vY!(FC1bqhF?-C-6R&l}UM=QK4UhNLxG<+|Bu@9_@ER+DvJo!hS)0 zqa1OQ?V5;K6q{j3=-+@7UJArVy4Ehit!=?;6JKN3CgRrUKi`^YVcFAwC_1|NVCl)a z1LzC5Sj>^IhJqg?$?T*!*6g;m`IG5pvTYwDgUr^lWL9_?J9LfX1~%<{?7 z*l1gw4GS{6!{Fl$t^Lo{sP2f`_+nLv(r~H5oo&J~}r>rij@>zyrJXPf?LhY8vh3R_mStdddK8l6UQSQ{k z*^tU|$wCAql5j^bqe0X^1S;#vAj+cz0l7G}OD_Enbgs(z%b4C#;>UR0S9fT)IEk^^ z>#!J<47($P67QqLWX3&Q`}r^6dv=QxgIS>@08c0IY691L$7j?#s*$IbLvUdvj6w@^ zS+p5oLku~Wc2%RRfhx;f`F%LQSonGa>2JCR?sfPEev6Pp2s@Tvs)Y2 z)f5J4?JyfY%qY;s*E`+Bjug)P1^k`e+UOv-iGedowxk<8Tln%X;JbEdHwM8I7m+A4yj48$7kKAx%^ECYJcFk;Ej>fvkHs{F7eHlkPloy&iX`4ZaN%ADL|l5CMg(yUs0uI8MciFZk~}@k60&q=-AhSX?XTNKo#jboC?yT`Ixsi1JEDn- z97@Sx#u7`pf#MJbQ*j#ik5ZqJ#`Hk^#IVE)f)3#aL<>P=*Eze9+{BQ?3mH0y2O!jM zq#->>1O^eOrRfk7AeIxv$R1*o8N?G>iVoob#5{r!2m(`ymo7gT)zd7qc8lh&CMQHd zMGgS-2{4HOb=x6j0f_?lCR61Y-sTu#P1|jEjI^=qGL(%0uOrjv7-~x&YERF^Qrq1y z&Ne08?pX#)z)vP)5{B97OzI;z+y})NT*RC1nW_k{Uh+DIdEFaKl|Ba@Sk$&(d&K7$ z;X}ywg7gty$8Z?9II?E)Md`z5q8f+k7;L-DLsnDxNH>M#07N*y9;veP>rt1dG20Dm*hiTh%e@ zed+mq{Id#}jss?wk0w~Xep+&iPh6@vjYM0|)5izbw$AhU$CS>)_`{c-cb4+295~g@ zoWCJ2W~6!ViW=+2U6A-w{9{{?NccHWaeC|dG3O_rhDYZd>$zH(AN^9x3_PJpnG}}| z#sW?gFI7lhf7;gN^zq&`lIv+RTOi{3`7w-Uk-4Ud3^ctz8q4}<3}4)S-)0uOPN9M`ityen0t|I zQik+^h~)_tuB9}V5Pa3eQ0z2A@mPLaoo#sJ_;b&eM&Odo(Wca- z)y6(9ciOY1scXExDBFqqZBuF2!*j16Ph2Qy98eO1H4yIOG;$dAPh)_zmec)409 zk#-ENqS@JP$-oF1*1zWj_wRnm&|NZXCQ1gwV!=n{*cOLVWe^c$mJ?DZ)*{cz-RC4R z4ZGwwhAPc*b#$;2KFX1xHO|OPcb=+!^_8YbQN8FF4#l}zLtt_dxlBFl7Y+g~PFAbm z`vu|@9jyM=FYafrb5+f+>|?K4>R~?|h7-VW^_XAjz$@(*>1Xg;{mQO5R99$Kh!+2m zT>3L4Mw`EycqDE@jWmUjHz%;Jtc~Z823L9H+K8yN zCJ0lZ2EJvKvjMfV4m_^E9E3re3^u@Y)&NJpJJ8}bSXd*(vd!~&Esc%ZRyy-UZ7>f$ zb)oiwd0BC-ae%mmq#66p*5d;`x(tSAJjnIIG|2@D~?ps zYII#ysQ7(c6^?qxl#gK}qo&n~s}g6GH$~tU zUEr)rH2)#TMW~5rP})0*<(@4`_pF&cdk?H81UV78jqxM16P@Z2|H&vfe8R#ZvlOSc z`%i|!Szf4C38ICPI516HOH4zZup8HSp**o<2Py`uXkJ{NShC9r*QAF0;WfDM7}ckD zk$F^+cU;UF0d}0>2DfrT9XCk*!>_m~YZGN%IP5yL3ln5vd7?P^V*Gw1nmJm{o{JC*pT;daOFV_Xfk$`1!-)r~`)}I+#2Lfqy90AvID_+?IrX?l z4b)0y-JOy7pLm86ETqQ^aY?gh*SDhn#XeUZBWmR7=lN7ii(h;$(Zvd_VL%bxdC)u1rKQhE7#KE^3@;V_AIEKt%I(8gVi9~YulqYSKA>Ndal#l?~@;az5{ zpRqHMnp{Vq9!G40UBGd1Ct5BxVjkq?6tPx&9U#?D{L1T>DanRQY^&wbm1n@Fy;K5d zM;3P3-Ko#M+RqhckTWjea>*j%U(Sy^iBo89_xY6~y}8XKelA1JiH}0a2rmbh^g;6^ z@yKQBpg4B^*)`9+8et)J;?+0&;=t|>DlPNhy2RM0sZZ+%4HXHlqoL(9i%@oTv0wUc z?Y1rDlMUXh@(a*It=qZq+R5vTxG20VS{h!9gRbiHeiu{NDw(Kd;R!s{fBD6y z5^FN{A5UZr zdCu0_`gz?^LZ1Yndo(fqKn=vnNzChn&!U{(b>Arw37!vXgsk5^qieKQy;J5G(s$R` zI72)iqVWl12CUy4=`q%znJ8Z;SXb4cPbnjR_hi**pVPggO62eH+YFx1YLt(oJP+1r zC4XS^B0e)jG$dpWSnq>1yV%*~xw2FH5{6-r8rIAjBlpodW25T4&2K3-Sc*d|Gf3Bq zALa3WrTO-1&buofAHo-vIk);fqdMohlru(4;U!}b*#8Q0wt&Q-#=k)HrF_`J5%KRaI^A!Yo zch4^fGgu}*T`-Y)U@-pUO0RplahdyrMQRFR6<1ce*5B`S|JyQgwfRalSNVZu;u_bC z=7Ndu_aqWOLZTXqEtt3yp_L!#$h3+|ujf?dx&kLN@xGPix<5pZ6gE`a+HlacAUAbC zWLKIcH>DThhn40N#F~kgVwz7;ft1QRH=F^cd3O~RL9p*_So1ydqq&1C<#Ao)%5Td@zI4*4YFF58u&g*z zd2P23qGwro(052+AeMv@4JX(ng(Jmfq`*m0ZMlX;JMRQPX^7 zQPV1Q7K$4Z!$Yx6lP0+d9(ONG9(oxOijsn7FIEFCljcfrZTfOGI{rMGKB7((OJdGH zYi)z#29KK6l{;8{s&;V9-7KCeEG@B`$GC@b5NLLy`eZE`7Z?WTE}UI_R26G=A8sj$ z2Rv$VEv0xh@j#2u?QHNrT&r7=9g4;|GlN0BSBF)S5@7?WK0v_2dx@=nqa`HixiegA zI-foZApXKyfJ(O$^~_LDd?e9-ckM~e=UJ&E{4p9uRr6}|umx(+VT2;mOzK{X;3y%E zT@ko6Lr?!OwW)vfuo2uC{bz36LfjY`&z)8cVW(v7^DCtaC%F334M=ht;AOH&O{!T=rLP3?y#E)T*(yQlB1fC^HiM z(SPEGcARm8|1&qle5TU)6FX3MFY4S-?jmj^^>BmD6EWu-VhR&(`iPy>!A3>;FFR04 zV5!YwQ2(IO)}}jMMV&ngip}b8)St!Km}1rW&DNi54ycgbRHbQf7;Yy13scZ25TZ;@ zY&na$gU{XI|DH*KL(x=ODjwu5JRLCF(;2#PoOYX@NW6{6ys!g}An1oxGFbQTpd=(? zERKlumKwVyZuTSNs5R{&5{aM(gY0(JVPGP1Dx&p9Fo7D#WD>!a48xFE@~Eafo{>{u zkCA)wJxcX`BcmTXyM5#rkODfSk+KmWd>_gZP&Zw0M3UR#_2?@A|X4hd^Z< z(YlvtMc)PYtnM8&ZDy1XRns@rxIpM*w-DRb1_{*)P}gQ+$tpcJ<$cCCu;M17RQFQL z4@saq=Y)qc)KxVoCzbFn#{PGRk;3O0#Bi7gKy4;05Z zz(11}XJd5E%D+^Q@|<2lPF6#h`RO>6G%D*uy=7HW^|IEpqC!GiZ|o^4HLhFqIvY!k z>xS++8y#$1!-G}!ir%&~Q%~E<7 zr{<(RG0^4tbx9?)x~v+1R!s$#+h7-gzaI@lr1EJ=W&7}FPs49^5QyKp1@~2OJm9glxCD!N=KF1q&Ih#aizIs_R<+; z1@SX!mQs!Vc-*+LK-c4Ko?k}aqWksdWl+9l|=6}b(*LVH9=UjZ6%btd) z(iLOYm6eb6;+2is9)tS)&S^~O{T`U6dhVo(zf+v^I}6iXeF4Q@1s4p#r3Ks3_fUn> zA7yZxKux?0#P5j zow;CkLDHwwywcSz=|wZ^oXI;;2#nfH(tG%w`hAZ|uy-oW3A(6hP9TN^g*tPtE&dnR zdola*Mjb{wfK`K2GE%X1sZQ$7{BO1y=OC>513FGtr+O1-`vK?#CPb!azg@%gHRnD$E4uuOZzDNa_e4go2=*B=!`GIaI_Zu8LwpE8R9+i^DsfFWUNGN^yO#O?^n^exAx*(iI5*Jy60fbi*i|f7dp>VG9QJPMYxP z4V&^8Y7(UA?XIJoD>7wvX2wsU(^TmdG_x@=Ess|FAFXydLTrw1LHt7?FBbAJ!6Lo5 z{Ujg>%>U3|VNM3}`a)Xu|2(S zuL_UmL&EN0*AZ3+8MKOu`FAR2chAXz<2Qq^E)(ISXgWtKX%b5KvAT!hCnw!ZF|N9V zs*s`4WhCuH=TBEgM2+uTk;L z*imzIlhOfyb%b6djnfA~<&6XszK$H8D@lEUpmg4dDEy5HAFVr%|H7g->iA_;l73VY z%G^PEN~vG<+frzzEQEv(cRssqu}#D!>ZnUgAF5REPy-GjS-MRWwN)3O9=${co4*7m z_raQ{U}y-8N&H8*wjA9mUET`J?@T3w&GxM@*eu>A{g;CNV_MD(HrWS!@#n$J$H>*= zZa6Hh9ER69Bklyat~~Oc<9xU?wd;kjt|_;Gz`?5%2UpxVyX@lRgv`js*dyL+(1QLE zu&~=gCr4Vp-#TvPOpNT4#)iDk%_=o=iw3=d;{~uFf*b2UQ7yg>s$p0;BC7s-n3-0E z&P>3?k{@kt8NE$vW+cOaGSvV7G4|$xQ4~x3_$JwGu1&JJHV^@`i^C--8&Cm3vjJB? zcoGg#L?!4Tf(PJ%qP!uf5d;-P*>FiVFpva7m~e$7@41K(QQkB9R7CL}5AG{Kxc2+0 z?w&oOzu))!4`gS$x{j`@uCA``>51C7#-7TK;(hc?R8Uf#>Gf>rQI!c=XMd4DH_aMf z9o^e8*Y#Su179bCq~#e+#p`#i?Uhi~1FFE1W^4pV8MM{Au(-Xuslw%mp=!ey1Y$$bk{tZ1ohVg^E6-14*V(Eu9o{dxySF~9^_2mkl8t#!eYiB9CHFM?Pb5xYN78Rh$S`}VYYvOGMIYcG=&99#?5RLCn>0hY|vFM1$6{T;d(9wy(m%&S9kh`?2rW4kV^b6-@qN1W(+Ab*MXLZ zac5F!+9^nU3{p_oxS!t1$6ennq#zCXdnriIhNST4PA&y`vXFvWPf}PKCIx*BlfsWX znJ&m*kQ9F1Y3PFVU)wx|g-|1z6qdW%%vLm56@f~J?}weWMTnmi+Q`I1Df%q7tQ=c+*3P=g0q)2GOS99wG~|L+xsTNFE~);i^0!%H)Uy9{s=-!n2&? zk#{Q$(MpDB2_e$!1tPhB5RqCyh^h=kL5@Zk94#Y6>mw0e!3T`HJ7x=pb}~G#GCT@n zXdA=h2FAWYL{eWuw16RUn+A^oC)#Pd5dDr+3EdBE%{yVD1lGV z?{a!yk2T+(DfbS{pH!dNjY4O-$RN7-%R29&SaTbtD9Yumb9W`Z6*+p zV{z&$7q94f2F_pGDFCHk(haS4`<0hyKl5?=c_q~u^&j~3`sr@RmHCc2(?Jf`@IGIvfZN*Z63jCX|TA6F`|jXiPd^F@ypj{p3Y7u?u@ z!DTIPN54M3bwSto@)*-|bE4O_z6E;9A=C~R%8TN$gI-%i)%1k?!ON9C96HdjlRif) z_2Gb1vFJUM?Z7!vDYdxLu^+X_{(G5K$ZrM?Mf*S7LH5f8{5n*KI8sy3xOZ#=be^L< z{-u)*(+Ndqr}p~}E)#VS8y(+S|NA?52r1hvaVG6YD$>r5+xKAQ+EgZ}Mg>4+;9Zy*S%wUhZE=6X^=a4zvNI#75^UALtDNkbEd ze;K_!OZ*4C z4tk5{(mXu&-AlOi{~_eaExcz(=Y{uay?tDQdYdcT3+HL~7FN3Na}|ERtvYrNz78m) z+a2>#Zs&!L!8>~UI%@);HLQw`;lLs~P3=|Gd0}sE5emL(j`qVGRxVcgK_=Ez602|^ z_d%@PiR&LuH{QGhiADr?QA`Z?+Gx6_iJ*F;yQ?fsY;X>tp+s?!w<=LFRVK(Qi{PJ1E{a&tjBM7_$yU}$p z0qUn5T-o4o+;4B=l&X81%VxmU zcq)-yAICe9K5Nzj+h;;QxmKyu&MaSw3emS~W-XXwv(8;GC-;R!YaBPTX_KO$wK3Y+ z?bFP|1%jtI0tb|vDeisLJ8N}xI}z{%-s9?p;=>g9Xv!bk>0O?0SWb@u^9X7%nQOkg z+T58L#~`M>8~&(TAp08oYmUxkQ)=4e!I=GHNg59yo$QmLQ21BD-bZ-cblZ& z$#+D>6urI`0|rWk8yHP_1VBjF1Pb5W?v&sYXn+bfysyn>)P8D=kHW`CZiVp~7aSj{ zhL6u^bi>ETQo#B<;Ba>n!y;|w!@~5$9vYU#+c7MP7#DeL|l5{BPXJ1zugqZybc5vU%8Q`keiminr z9C4(jtCQ6R(m-BFnwjX3w!&o;vEdk!jq5{E(n0UWW@}@&b9Zq!eAB&J8)_oe!C#D{ zKTsxITwXJ-YW4Po+6ZBAD7j!}p$$#c?%s|`l70S-dK&=wndCQNIxW@R9EXu`b;yZeEXT@hsP(z&#sv@Yl02MrPhjB z6LN=7G7WpkHJ+7N51$k^{@=jj9!S)>ZD+vhtw4p+zV>7!ofek+2U;x!j(BHLrlZ4l zEc2YKE)`hxPcKuIT_;r8b#5HwpWY$bGsQG+*fZs2>rr|eW2>6Q6uaf9&hN+M=|2!^ixYWJ!P6)Y2$ zvibX?bE<+vAa6d6N9<#t>hsyi5D33?JW2bd?hQx{erq;78F#3i(8-*s)$xcgfkiMW z{hTzrY`ON)*8PdE)0#xS{`7tvORj^cX@^TPhPAwGc^G1SJrLso0Hmp5h`&$L_AtcN z<{(}@*TB1t&C^`^9QII>w##5rZf7vLo-=9W@uW3ChVdclCS_kUq2Y~yV^SS1{N@p@ z+H@5r_iP?$KMoeV&6Z6s7o#EngQn8p`>!9=1+WOJE!e$jxtjOfSXYf)hVnjU< zsC4`8+*(@{TWf^Qa_VEO!5G%y{y=4s@5Hv+qPSW=Es@cw-W8nYI}!w^@*(2X$~d(U zjPwmSW!N8NoYJ5A1H@^z!Kot(3hO$t+51GYxs`PxJ+8ved~r&hcVV*my6ECF-fhWd zr=m}B3`|5Yj2Y`@+}{7$W>8QdnTCtZ&RYm4Cdfm|eKy#%wr?A!Pkk`^bDu5ekpH7? zG#Ront4bYTj*IyRuOa%}+3tGkNn8ql9Sb3jMiH5hIe2H(Z0%Jg_(QI^IvX9#8NcDJ z%BUf2aL_JkT*a*IX|-kKo6%YxQb8HgUeCuo|LBi#bgBEa>XSKhP#`>`f;#?B0)wBl zcSap^&+?+HPITxjuf9-KPT2mJP;_}40(gXm;KXTZhlh&%$7!mIM^qfmE6DqjsPMAr zy>0iD<9bSJ{XK=Es(zXwKzRI9`G&WuD)yTTic$q_c~|M+nD!+#lzu^%zAxxcy(@p- z$U69mqbjoI@T&Ii+kRByO$8uw0A@PJi`%MJ^IXApjQ4(vAzF1ys%JfUt@pQ0+tAnd z)Mj)n|6-r*&oAHm567-;bUC8Q8Eta9-vBk7AhmZzSF1J2>E3|fPPE+p6n`Q0s&JN> zw2j-a`f(On6sNmQ5J+}sV*$$@oo-LXem-9!$=7AuqdS0k+@cR@mQ~EE^)WRaKttx- z&^2d{wtQP|#VlgJUpAiQ%;~ZhSShL7m&A~iijJYu^mil6>9eI*yKDuG%c+AZHim7p z?Xwd*s87t9Q@&y7?lK34op9?F7IvGOXe&)WUHsJlM_cKa z3d^3be&uIQ7e5l-w)%jwyDXM>EdN+xsmBnd8bj2Il(9MnDi5^s@e~k~GpAc3Gj{co z9akP}X0&BV6ni$bZMXk%L*XQynmeQB<;`OP_7X^a=(EnG44uI20m5nu)q0>P`?B{lrmzlqq$O_!a3hx9V+IlFn%2qM6`j0)rVM&KhSxy@rTh0g2Bh9TPXUQwk*Xr>Wcc>NM z$AB5D8?YV4h?qe{Nc-$W0K6&)upA5^%WChy3+hXmZ1PN`Y%m^{DVYc^_PHf4F5Uz8JE^lvh@k)1$Di z7S77fG~-!&dCl|4c`;`$e}6@bG0fm=J8^iXP@YQbhO2rK@Pv}e0Z`%&3a>43u);(65W%G-qbxA+Ho z-!*RSwuwZ_*IOV&kS|~0co4&Y7!e?6qz2j3tL%AY=)V=U-G0h`CJpm6mQVO8eS%Gb zVf07FRXR;YDXCV7q`WIq&GE|hChgx_xbi<}pIuf~TQf0d&W<`Zud1srBiTG7mSr5N zE4e{*h1=dL-DsUN2mKY+)=b$^haPE3gz&7~KXK~dEqtEqcJ)vk#K1>9SM7}8mC;ml zs^p6Rs8=+f;7~eD9NG@e3TIJ`B^KHEsLSn^kMOyXo?FmA)|ud^)7APIG3AZ0ABqX# zk=hG9YQ-tgl;`M(e_0l_;W|=Ad3Ub%$`{x*0ZgS_8o$n`+)1VN*vbz9s>z<#hZ1+#Hnf=@ideVN$0ylSwTT zCiSZZlNz*zh|Uk06jq~hI0xDfSHCXoc=wHJGVLg*)W@W<&^#D^pH(0Hf-wqE8c~v=GM2K+{`sm?JTSa z0rSSXSscB(@iMlA?5~F`Nnap3z!siYPc>hwJhPcujC|orxW!0kQ@GZsFPtht6$t2W z+|0>SH*+zClP`T1B42vcZut-f^WbK~VARuB41-bIMi`8GOc8jbr~lSs^!d5k=FLo} zN%5+~Mo27-_XZ6{eJIjk)CWTbqdyR7Fw)~>FvH*t|9>n-e=N*mA`C{~#|@^i4Ko1J7yHy&RN3a_D^|& zrWBqvDYUy%HrpFgXg`mPN1xo%c+@^A1yRcw!1Q0S$JZXM)SK1}4fY`o6&9p+9%A=Z zYWW+VDb_T2kFvqJ_I(y@KPs)rXQ+=0bx}88@pev!y8N<wXk2vJ)NpEp^(1j4jtfE$>c$Q(!byIM(_4#77V~lxFu251u zZ?lQ}TzjwE79lhJK9U)>O=-rIZ%iqhlp92-_O-iqZL+UvH@>XQHer_5cC)W$BQ-md zC1!aRHjTYv$W$67WLl359U4m4kvp>ORAz}u{?Dr+Y3er%Y05X-?bpS1=$X-BKu_S- zj%?y1Hp^a;Mvht2#RH`!XZq3<&)s~6Kg8QeGh4P%OH(|GM@;b{nRrtyZcGcg#oti8 zSF~}{P+At6u`FbF_RuH}y<$(a;?x_<)|Q>ZBmLG>h&Uy!_y!vFp^5musWAz|dl18a zUgX;(a^_{NzfcExaH260zkS8~k4$qrWenE`U5n5Mwc0T29;cjqqQU~lGL1Qst(-yi zi7*Dm>^C>XgRB`zYNL?UBL#kOPFeA)3-$%O#!p!1v!l$@bgBsaUgA(qdv*k809om^acq8+02 zO`6W#hVU8=h4>D+jZTqn<4SUv+eosz&ehtthTMkq7q@XX`LAx{gc?$GDb8>k7Q1iZ zMtBVeWFr4|PPmON8-?5GV7QGZh1>X~mb;BNBh*BnYq*Wnzjqs*b2Ys-G_r%ZJR%16 z5po+^Tap7GP!Dee=VZ7Rd3=Q1xIjGyWu|9@yNy4SBizQhEZ6GVklTpgwR+{S+Kpm!K+%+2W|gKpzP-bT8m zWgB()-@1)L!)^E}YAl*t`&YLS7w$I3Ft^ck5^f`zT&MaW?liLRYvDHZgTie{e_Yb8 z7wRCJgKlGpa2o|&AN0u)`k+2)xQ$~cBisga2@i4()s8JWl==tV#xfx(DXfi{L-T_k zK>u3F;%;L>m~uG@q@~;F7X(uOmlf_dzQF0&;;uD+<2HUe`8RIkvn;p`?l(N}8{SD- z=A;<;`;*@1v&@~8qby|_bO&cN<_#n*nL7=t9PXMsX2Wq;9v?!cAeS;FQ+3c075 z+Ys5GDPxF(K-Q zve5Hx|4U**)Yo&(7W1JxEljc1e+$Ky{vD~et3AA9E2n1Cc(iiht#&euNGL|k=R zp=K?WI60)mtFv&%Nb_sxn)NH4;QdCp)WlGGUzX)SXs#?Hr60F}D?J8>uSHj8VO=Ve zTd~lr81NW#qQ3ql%d9}D*g{obce3Po06C?GGl7N+blp0oci7zcA2Byx7ikRFM;b#r z!x%ORW4I<{41r{ivNYTpCJ~>8HEfKuhF8O_VNsULuGtqeYnY(DsQD6^F$|6{hD{-3 zSl7ZBW*EkxuoRG*A8rkA7}oGcq&0Z>&`MutiRdt2Jou{RSgWU!4P)rV+vs1kY$KmY zhA}A2LxgF`@nm5QJ()FJ-uPE*SRHN+=TDMOzD>q3i)0{=CpX{H7}V*)81z@djKO!g zJf2&_pO<-bxMd@^hWJQpFdNn|_b=8kr=>M`xHXhBYuJaYm59FGExDJzPYzl`oM8>` z|E)EAiwgm`@~hLx8W25R+K5Nog!En1bqfoU4+LT4r?MjVk!yO5p<=w_X=Z0pUqlxw{b~6ncWNq7X0o%`EI>Jjw&I>}TUU^i1n8pqrMi2oXxJXO*OyG^_D*E~(Z2 zSYw5)uTE}AGHDj$^=mC&mnYL^Lj;KGOBN&A3z&&!_0E&-rR&+OMpxURQe#oH;(3(R zSSq@fmZ}%{Bun!$u8cRTX+~YPzaEDx71=Vif*g_F|0Lq^sZkptVQg}e*hXB&kS~87 zzqr(O^`tfCmYjHc_fa!OM>}7`->AbblQJxg(oWapE38IZT6NMIH=Q+B_cWJH!MHPm z`<`rgHlY1dBN&+;$+f!3;IK;;?jtMt7JG)@h_=$Rk!|$_qOH`4RIy*&6LHw+bd4K@ z_Pu!ec++L%jPYe*wi}VFZ%Fpk2DDF%{-y-`6LIT2qr>)Do+>Og$q-~G`JD;tyC%Pp_zL^cJHU^2J7aCU4iTn-k zMA5&XPM~IG-Or+zGNx?$;Y`+Zc}*|Yt^Q}GXJfz#WX>_=mH~mn2^;eKID%IG0psYI z%eZ7JxW9uT zsg)J6u(|e|%&D#o_P1MyriF`_jOkE4lZlB5a{;$#bvKk=cyo2ml`@5naY#@1{LU*zr)lHmd>dyvX?34k|eo7kE+aHo^2swpdNt{l@DyEnfFZ z_Q0Jpe;$OvWQ4xivD5!#=9QVCa$+j_?u7QZ=t=*bSmvI(-r6vj76ZA(chS>^E&FmARW?1EB0Nv%<3~ifW7@mx;v1`?m&dFrM1=; zVUAqB8a1sPTHkI+e0yfUXiE*1lXMe3OLdvMW{=fcK@8Nd`Z@JWYh*UwKHLp6dHT=! z))=QF`&ayzqcZX;RLX7HFQm)W=$vMg1PS=_9Zt1ZO^`FJJlFD{V zwC7wLelRNUj``3?p_HW;gE}Ss=MrR3gKfX;U3i_jt)f^xi5!=r3 zFeKNDSA6xjjEb)~nub^`b0bE*74@>^1a2(gluIfzoGMV!K*>>JSziTisG(eYqTxI> zY-kSP29Acy0ZVhhf(tmk-6U)j^d@DNkpig6xd%!t+pFdRgTyd=|oW3@di8`5AWGUXl2!1}Us*G(9l zz7+bgrn6ySLwL2OJn#ys3VZx6*y&4ry_0GGC8a};j1K*~YZC}FJ^Vh?W5e)kh^{K5up78NEm#jG zt-fU6*CeJ9{oDxv%5R_Om)Ou4a0S+b2o{m3%SpIAt1vAnTUE(Cnx*v;jLG|mvHb8d z0NrXyGb#KKIZ03|jga@Fu(A7rf-NO72=n;WEWBreeL;v_ej&4AqfjmN`Anv?bkYF3 z<{8fdNcXjKtpuf=xE|=y6g-jR=enTgUA1!gy>bFydf{S~o*}iZt~At^4ezu})=n)x z;k~Ytxw|sGGNhj!9sgVp{p6b0P;A0#(7ks(7KCumTvzqiGLcI&HkTeCAsH)1byBA5 zne}$*y5VJPM}8D^kxgOJyi39C*~^(|AC^5EuAqW4R5H?v!uMc@GGy}-2~^Is_r!Km zW`_Yc;jOl2Jmu5)a^#P!o`?RDKWngB z#xQUG&Uy&2aPs<4#(?hQqJew~9|1|HZy*qn|0S(bC!IjX;K$11KS}BjATgXg^}+Qx zz|JmWc;V9WgHS@&{8MVKe?IDhI1VNCyy$@ik<7JsN#@k2k7#YN2v>JmLn0cHsU552 zn+^IiFo|K*>8?xO4qdP(WnRy+4!9TlP}m-&bO2Vzg0u%t@Z@qZ2Pcm`0nS7YjvYQK zVOa<1xpqX>eO!X_;s^;6M$H<`I*bss>x-1XAzrQ_;@R-Yo=l!~7`Z;g&w{^!k=6%c zr2d)6Ixrz|6)4EWwPqs!=Faq>E`)mL>4xi&eZyZuI{!Ek+LR)ahn|3Kd|lz4a6Kfo zt^$1HvLpJp=z2%(I_9N2;xqsTLQ~g?@g4>0mLu_8zK*5~+F#Ynte*FUt8Va`T&LFo zrap!%$jZ$W5sq1|UE2zUG86xpaL8U(O z5*Q+r=T%5UGk2HGr!xw4Z=ukUHn5=O*dpf#H}szn9a9U+59v3Mxruf+WZHXB-4&}5 zS+4C{$0hhYj0nyPAle@BXgX&z%)7sB^~~UHcJVg)GcDW53#^{0Fe1n&1Sq{_wLFgT z>0Vq%Q+VN9>-r^94HPQw>kT8iURdN_x^IC*Qn8LpPnU^bSYo*6my4m8q#*#4TV-k{SR#x1d&3gP;h|cL z$*CLkD|;PZ^7<}?mr3c%VTlAFJ7I|%G44T2lpH7AQKXc44!Z1|r4AZyC8wkJfh{iA zCW~N8K&%NjqZVkT+q1#P9MiX_|`Y|&oOCc2D^Pu;TBQ*SbC@@L9Bn7sWs=pGyO+o*a{D>bbRLIEc^Y(tn?QAo1uV>TrkXurrrM#1_r~ zE1Oj527jEN{>qU$mcHdNm;(_l2Nf4D=Ib%B-21TApWBnqcG8(SjA>*{eeq|l(6Yq zy-!Tn(htW=76!E9svvDr4iVonJh&-1*6ODj9vll7Bd>pw0sFKH`-B?tU8{W=h}UvP zkqOd_qaHY3(u8Ub(z2W?%XzVj1>?oa$ATJ;W-*~kUmeFH2eGDypI}1v;6uK1RrKFA zTsZVEDw4mdj4<7gDc~eAeV@Tb-``Man6BQLo36r^J`J$lEaFz|T*=>N)P~uvx-ral zrGI6({FP+8%yj!y`L<9clm1M&>FS5@l`qb=`c(!x-W}Y=Rn>6QRd7{KnC;4S!glp- zk+yrPl6$@=!*-8|2PUpnAq$k-1WorB-bTI3*$=gmatzZ|4uziTt%BpJ*JS*~b`R1F zIaR9++OCmY+kY`=x@s;n!*0xUy_H6C?URe#bPo%HnlcR2WkGRU0#ds~*zS*lztb6i zwOu)d*=|eI)verg6N08Iy%IFt{i45PTo#7uD$I-$!fiJ?%y#{P;KPwn1SDBPrYo(8 zG+lY!-2h4^|e#jt`zfsv)#6pe1Fdw5oycqgz4(5nCULAgwBb0 zf+>Fs)0HnKF{@*@;4TceU3CH3?zL<9+-lga^j4(p$}3>I+}=wf4cBBU!M8y#7_sou zzc<~esKTFB7-uK;(M(*K;rO#+JPs2~zz*CH?GS|{5R1Gj11n&dtp8vIpKwnkm8>x3 zHC%E3Qn9stESBFB>=OY|lw8R(;$<0FR*Rg)vq`~>!^;^s2*47qY+<@0BbcS2GrCVC zwOBSw6ITV7&8h;6Bq&MAD0+Gg0_1UPa*Jn>eD2xTTI+^Dj8@m`ULuu+qa3~bYm((@ z#C)zOYQdM%^5QV^CMVH_3b-SL7=0nberLLNeWhIFL zfAty1`z7)mg7U&~Y_XWMFAap7TOj-_Nf7=hJW>GV^d{{S(N@(W+sgYzTlEoY>v<u20myGWy?Oz${?=D$>3r3&IG>sZ>)2R4;ATJ~a@m6OBc@Cx2uhc#tkO6IZt2 zHfg#mSbwc8r&J$H7BozSC@_&hE`5=%^N>X_WnHZvJo&5*^k3$vJXVKM3yqL?fum0OIwE2(4=vzS(q7Sp4G zS&X7S5z7MF)^a8{?Ev^>QY5C)?J3l z1T8_mxmimQfbxq1&{+9+1)O|Cq$Laot?FoD32Ilegtu06OMw29s?#^6xj*XyOJJK0 zy^nh{^UR$UcXZ+C)ui2`F7I~7gKJqpH?X{{4zrn7NGmm9kn=Gg*I_O8kG0TsBS(!X zjard9I5}0fqj@J*6JJVT`dw|Y`<2%iMfpOuw^(oy-}%xOtz}@iucuGO?y?H%=F?el zw0t?0kOYW=nqhGOK9_I(G)nka$!$hUuc(I^tR=$tKi&~`ZZY^&NMCsIP>lckHAWz>zLDf4j-O{|RrU1aCI1dI{(#pX zS4aE5qsUyHmsGL?N=JR-ryNB}`SU7B#E_a~$^fb53dBavL`^x~Ksg!F{%X3XiR$Od zYuca{YauU*Wt{K|J2mMz?in?eTnscEBbQCJb?O&&PrRb!zrCRX4#F2Gq<>o0xqG!xR>@^`xgp$t>^&PUUkRj;1yIy&NKDZTc2b1DzfCW z*;p74feM#xFU%Q0#~3%`Hi#G@{n;0=EOsgV*YMog;}^Ssk?Z$_MnZiQ?v4fO$BrQ@ z+&D<+mxmbDIb4r!$3&^67)o>^T}=K-YxvZ3tKp?T=h`E-c@{-C z%w}45sZDSf?{u?UiCTpnb!`C~y_eJR)hlzYGmAJ{1oDQsh6ods{!HJ^3%n?xk?WvM z{Ca17HrmlM^%DZXANsy@WA|Ox35tcU)I{G*U_5-)XI!FCU185Z5}@)&>Gqg7?Xfj{ zmtUR1yr{WQUeo8*x_Ck|GriAEz*o!eS=E0aIPD=KUiu-O^-UB=T{HambH(EUZWlu) zenG7MemalHl>Z*{Y=!V`#qGkhEoyt3d%sHiqYhIqx^G1rB;+l9-;9rWN4cI`#m~@s zj-xQZq!p~;q3(Ch_at5|%wJO<+Y9k9k@9Wx(JGOBmJc?6cet_78iYS$N>$xTQpuqJ zJ_AO)H6LxjO}?(*)Orr9-^l&4o^`C@RG_g+CBTo77U6PMH=pTeDmb56OA<}(J zLr6iSHG(r$O}C%1Xg{euZogN|vfrzHUSay7-%oR_p&!z}2uwRb_~rVLe#nU#{%=+0 zm=ta_@q!n1CCP^{t`s7yKIYlW^utTRz3@iRk8|z2LJjOHpGFD6wS2TB+p)$ERgAE| z9~YF`KFM=5(0D7JeT*+1VmLVKIzEJld++o405Z$*3awmo46A8cUa>J-%*G5SiZN#A z`D9ZRTbL3yWUCxme8>i2XP}_^Gc7@knzR97>$Z8Y@~S@@+)y9gea$TJ zu0NLu;G7=gtLIF5xYj?8jgH)xjo&zu&D`{Aa{*cm;8W?Gbob9b`ywkYsC=9)es5K{ zr58P>_9@}vl6+fwpPPZIyn18Kgu0kAhDa_;XHPx(D$ckM9p}&62vJN(EDNZ64!Ch1RRjh{1&=qbvdN**d-A;_^*N3@S>9%yf7mgFs zclq8d$9oA|7Uc_StEagAt8;qn*u*w-_2lF1fAzzo<1v^GovJOn%T2|V6k}UadNXdk zdloPWJ3Z9wP410?zuS%%_{Wv+Y2|u#H7`H7+>9Vlt2$P2T7$2b|$eG1_>cn*K#@=SB zwe(i=Y-b|wgsCLWH4Y>cA7AY~-rIb=^6P5c9em407EAd|MYs9#{9X5(4`KTot>;+S zhTdG7yo+BXx|Z*wdp{|3!`3#Q_M%t(5`cS5>T7NMclfX`9^2U8SNs%fe~@>EOVb~t z-}@5}B~gRo46;9aV$VzdUL4{UUvVlu`)Z%5>$mvG#Hm2>INz*M-RJqR4R$D2syH^s zQ6FPn;=9}D{j`s{bC%xm;_j$)dshrahoRO#Tq_bA^L^gLTg@Y5WXDBs(XD1FI@jm* zPsRrwt8XwM4>McP9uG@E^foSadIRd^G%kKHCN;qQH#sBE}yl{FqU zFtdvk`Wzma>+t4ky4y@1-n_oN);~L>Qll%}aKpl59`6zte^y#<7IRg>Yc3 z!a~N!>9;8{kKdwAM(Mxgm;JPpZniJSvx{QFh^x3iQ$I?NSqg=$m+$Q5}g*b>!;G}Jrme* zj2pCrLyFeapq~VfLV?$d0eHt1~Jy>3Co}#crAkx(fRy(VqC(6`eM45c_=o9FV zm{kuSEqN|rn))dqSOJ=J>4G(j)OzV9QHCZDB^c??qx}*se+IOLhJf1}Gc?3|qsV9}4Q zG|w5#UM1OQXuZ#Y^bdq0sh=P9W(_dkqHKQ;!xcQTR_o&)w(tWVcd`xN6FTjfPq@MZ zX{Z+$F19*>WxI(Od1spagG}v9a5{uo|1xcN=(Luk!q-ejH^I|rQkjn(+8N6n;Wp4j zP|~(E*R7C*D92YDL%5{13BluN>gF`NId~jR{%<%c`8~K-B1k`QicFVzKF#P~OVcFk zpWc5$onv`~zhz&7C(2~9WHlVS{# z7nq4?dCgIG7U^WL=p7|0FEbDK?`tS&_cTSC?puA>5p-Zj&=suhl{R14^*V*0M5=}S zf?9rbW}>^ohsrzV`f4xOXT%#V%*?|nY_J~-SU~v{LAiV|l5**sP%8P2v}xEbr0>59 ziPVO)Y+jo7mXAk6>N@gkIodp61{u=TqeRjY=GfT4lpeLr2teOX2NZ3DzzRnbAx{0c zz$%rbSu>w76Xqw#S&iidM7Kg&$VVZvA z0wpL>z~i?KjG^isg_rO2a_uf-9!gJwhYFo)Q{xgXO9NVeV@&r((y0DwnA?kKp0_Ck z9n1U^S&TY^{L@D(4FALg{X$FslrGF`x)^@7FBQHw&BB0ZI6&&)C`LZ2I95&FH677e@5M;J~DS~*z= zS)Y{VN+N0SCGV@;i-29}{)C{znFy1_0Z7i8{BpQq%fk(c%|G>kq5HDvT#{*q^d-GF zWt);)oKCJCu~Cv<4Vf1hBdC?fpeGb)Q8@MjAr(RCGaTN4`X<8~?*e9K zRQDZq|FXP=qk4-RmHaewRBj&IMjnpUA0;QnLosy+`33nNI4RfkGQ>E{bK$DS*Ddvm zXi|5S;xJ-aYRjBdUqQ9>W+c^mr9q&(g_BYz1T{^*ofJ&aKlEsWjM(G8GM)>U9~8mW z;Vat6GKD9EHZlr_PCx+K;HGRBQj0EI3r;xd|n9x;vm~$V#y$=HBqRmE1k`37Mi~ z3%UTcZJK>R7W}2K{$3H*9~bEe!CZ9659+Oj-N~)fT*@AjtJp#95ke&=gq*H!5BG(t zD;$+-GF0}~poZ!h27(Oc3->HX_*DD}4Fh+D@yp2-R?&)1k?A{mL$rJ7hkku{*V3hU z@`WpiK)jT?gs4*k@rI+8l0&|55t_20>=@pUdM>_2=&GJ7W6NZ8i~DX81hr~>$QR}j zQtk^?X9%x!A)YNwi5@kU`N9`h`o3I7wC}P7FAC75pfA+h5h=l-O+OY7dlD1*rskoE z3TI9?86q=<`NB-Wx;mKo!W84@phy#tW#$Xxjn{X!c>OSZVGCC%jTghF$jy*H3uxkx zx|c6&;R_cqrFAf0c#+R#k-ku}hkT(vkvxrRCSTZnrSOGPCi8{d73vd$u2BBuD#dF` z(|cS3a^Fa*rF#v#K4GJi3~HKs%og;8(&Zz}7pAY|zEHJ>d|@)Ep)q=p5qR;4 zaD`vLhuEEsWzR_D@-Ts1{hbi}#TV+!g)dZf(q8Th^9X4_54D2g2( z2NHP;jQ2(S&DNcijgmK(MW*)DkHla|AK6?lh9UeZ4B@sggnMjZsXcr-69|pep1c9M zUBavAf1IS)j{a8t1_D26gIgvXyx8_zLcv%0T0Bebjir~ub9@sF1YCA3CJ>Qh2B;<#=|71y{PtPkxYES(z62m)ipdz)Wj)4Oe5?O0VWUVcf+N&Wd zNM%mhD79B<{5;7N7pcAbx#CLJ1WN6d8}E9n!Z#do-@KIhP|Ef5)Lt1Gi?la~QhV>vQmSQYPu+DsnA($5k5cP($`O{@`*?+s z+LL#j52f~`WadW+w>tGIOYOZWh*y6$n7d9`CnY?|O~no#lpi z9jncu7?N0i6PQ_~_$tS&e-mF4$1a(Ab2)dgoUR9)fPwIW`3W3Hdvk`1H{&VK?IcKK4gN{JbF~;5kF1_GlQtrQ z3>A@!JEQ3aM=yq>(Fgy9p*y&XV+1|`e7v%Etj%|L2~X>(eNQ2+x3tUD8<)VxH7*Ay zQYsOq&7{B8XCn{{h)0c->p3Epht2BKA!$g1;_1>-&c{7AyZsvNU(0>1myisTMSw`@ zO8vR>hM4rHsQXZacw1P6Xl^#R)(eHCJ2x3E+yRwW%cB(@w8YT z!e8T~3#BdIZ;m%2#9$^++9bwH9t_MZK)mmW`^Qq|+{9HDMpjRq2IrPrd>cjhMoO=q zb`D9BkDd=@^tK)^$?XzmEjfE@HUl-YgQl zVVqP;%UgG}Ya|W62nla@+`o)DEeTuJsDak*rg#x})Z0PKFp3KATE?TodGVh3P*m7( z)l}GHsnu+Sml$?mapBQr-nT}gvP16;D-wI>a%%icC;_`jppDJdZ<+nkF1T)peLzaS z1?G}Z{tIaHfl#&}sClToX4vq?s4{gHyJVde8%LFmXXV+b8ukwp%GkSzcMzx1ndA+)j;Xw5;idI#H3LJP+C zu(nNc00PT{saL7{NkEpnTZ7HPq6krrC!__SXwqslk>hNIB|*fJGaRveJ`AyLw%I=l zE}2KglH_(6RGwIXA1noc9+e<+OyXG zeDT{$;R>x3NFnqna8JRwa1F$$?Dlsj_02D+>250`-IKn?xBv2aU($*T3h916JwFU* z(!GFd`JbuwxP%V3I6B;UyH*FHsDau8;>Zu3)0FRy_p~x;HO6aKi`PTrEl)yN+FGN* zjV&776_4t5g;#g|oa*lH1<`qq+wm_y{Xg3Tta4Hg)4PTywudsT_&s8FyK82m)@v#I zrXy!nZ%#!y5N*oJSI=RGnEx#mGOs)OY~@rWf!v=h4ekA0KDVn2c0LpW(f`5b0pe2L zbOrbzhVq*3gST+4l5IAO6t~Z>Q{5k9al(Qi{rov=>}cH9hO^cLI+&12za4%c(fx0u zjoNf>`Cy~LKx!c0b-ujN2CA#$+?$u;BqnD-IumNB-@zLGblCgWedg;F`EV-m&sa0% z&Rl{&djh|>`OPqDu0Mr3buXZE0T!faO^jSic|a>AjUuY-LYHYZ!PQ%J#XG@Oxu-OM zaTvS`u@5-UXLh81lnVcSX)#1SzHum6_uwq_Ira^iOT0A^@*(LkLyEF7x_bmy-=7Is zjt1!D*r`CnpOi@PoCx5`Z8nBP$8N7O22QHv$FP*9w1oNmDA%^dH25*D_bFg?7G2A} zU|xWzT&txgfL9Ns(wYbkzh()WSLN$4{ZP~{?@V>CCHU|{hmV*F{o0yU;Zt}neS1zj zw*-k80@1%n-OUmPeA3d(VHsn2^sZ055W3B63oL`7*ph0`iz|G0F+OZ_En7xTO#RWB zRvqhZyR^$AwH+9;$uuX|u}sT;g4438rL-SkB}CuUjg(_k{25DGu`iDeS{Xdl5HL}; z0e`UNMEzmQKBoEIi@#ig;ebe-yRTHbw-;{3SITCZoDMUx9PTzD&DK9TH?gqr2Jht= zR`ayjE``gz9kQb>cbf2Vz>KAA>7;(FoU>QaO@y?$A-4$zLHevK9(*+l9*#Q2J2i)? z^wz`ZXl-^4tcO3BTGMlN^WpM4x&`_W{sj?0>-FdCU2t6@BVM%y ziI<+eVu=DWsFpUt%SEkkNkxL*@=G9yOii%Cl{FiTj2OL*}3YE zE>)G8(Dud!OZ*8?c=5^}U-EpQ(Xxc2Lz+9Z;dyYso{D2Zz){$DNq2b`H$|xj+74l+sJ=^J z+Rbcf^iFCm&btb-e@gZDUcyb0j6wfF@FPtpU?SwXRCYu_e)X{DBM8q{+=Q?;tn9vU zc`1%%SSEv|zD4s&>n(W>V+h|&HSQr)-$*UG83V{pyGm~>=hnY2&LZo-9-ow6jz|s&9q><)4Cp`W+mQ=#^IqKxuNSYvp3}EH<9G1ERjwZxqo+ zpO`vzIkn+Ihx{^c#QOQ#AYel3_^7*Zl4bgD__k##^H_TR;iDkBZ*kMRkj3&bjnPYn zeTYx`h+~23(Kt(cn4$p}Rd;HLmAkspK5KkYg0dKcJDcrO&5pW%`XA^xqdIPgs1wyk z`mAx&JU>9243*cD4>NeR)#1iJN~zoc2kXF!^jn;!mtx?F^GsNgYx-hm|1c}sD6A+0 zqsetxy)U)=VVpRb8)&?xl&CKIm^(H3r?`?=F~V#pMw2P^A@0P3d$<}%@?ji=;LoH{ z5YZ6S0MRu+{Ejv+3wXV~`7U4a(RV<={EI9wZ$nQXO~pP2f-04ppBhLB`eZ#iwb55f>B1QQ zQ7<+AJgz}G8Thh;em)jsk16zgLB1e@JW zjURdaFO_NyUSHf|m2P0gW@h6HrT!O6HNV#vy;!DGi}dWdQvY+M+Ago}%Dd80@oZ|T ze_E-w&Fj1Hu6~$5b2KqwK2a)9JO`;ZPAv6LF4bzhy7;!8;~3uGmaEC7@&wjEF7?Z$ z+FGyvo9IAi9XwDfKf>OFkq1k)m0q3pT5tX-+O_Z<@4-jR?b_^UvPKV0>=)g)a_psQ z^AcBWQ8ZU2xwX%mDVuLn@=FilAk_2a{*lE~NIXT;->LPF#7QF(qn?uI8>aOtwe^_g z+;BE`)hzrZi9eS*ZNslQJxuZ2}!yA%% zren>x$`{h$D}-!nm!tG3-|%S_5iGyqR8{|C4*naSq&81CW^$9TxPCba75-{qa>`?<`d zWxvz7kBmvyV`_Kzou~Nr{)}JhrvgGis{j0hYUd|(x}d%9^_^WrP4=WXD&N70kV*z# zbIQKs3bS>6?^zVzGlbHMWKglfpiD&kpNm0!ujr$zv<+V0&(x8;5dKfji9199q~>(zc+)VPGmkiLnj2PES` zexLUteJlE!#&|GIXn$Ut>GjPZ$>^(2;S>%(BPUM*u}bm5Mcn+U7D0Q>>#JFe#c6HX zFyGF_>Q8YC*s)_@)nfJ2IN#RA(x-7G7kuvBjgVBKT90B5lG z24VFj4EBD&QsBZcO>ZhJBw(J6uAnHv-8+O}0YlI;48apkTAm@2K$8&3ja(!* z1Oe6g46s88P<^aP>nH%_O9o(jFC#R;?eq>(ggEs%3^qFiD@|x}Uqi5BJMuh%7q{XP znY*yq?wu=OrB@kjdq^kWJr&MK&AVevs|?G=KRZ)kEojL5nZQ^aIf(c(Pg=#{(~jXM>0 zqsI00CuvcAlk2|4+&eI(A06ylzKiwk2=%RYYNE9a*Z&<&uA$+8cLf3UI~ia`2vCxm zC|}ADZf$b8!{KfZ!pQ>|Txt=|s z#(?Z>h_F)-RO-h-{|JG~IZc{FfJ*BP&~_YWTL3CzHtEeE4~8IBdlSAR#rc#g49Ii? zX<87eeiH-zBm^pDG--(fRA2pn=z0^lsH*mHe7JM(Ff&}0bwCzn1}~dnGMeI22^xw^ z1tl)233=TuC37JR@2CifB5ub8b!Ox$lB5?~Or-=3eO*dzQ(rB$ZdqAbQEzU{?|JUM z1HSL~|M%mExo3HnvpwfI&pGEgUQl0^sG$vzw*z2Nn9$G;$#?oo@@!OzaxM+hdVga= zCH@htS3v*J81A7^eY+i2^!rQtQ-kHVd#V10DltmVUpIP(vz(}a?o>ck`NJ9il77%& z^i3ZCr_QDpZL>IR~$_53nQ#+viZF{?juX_Ps@e-ZW2FmFbP#uE8{Ew1^zuqEE z_103p7xrb9XkHtn=mC)xCj3#^CL6@7Ez*l#ZeQ^Nj`0%BX#Wr}^HJ=drXclnZn=p94^Q*iww2+y`i30{Pga7qV!v5(;E zhWOx5WlGE=_&!tcIV+1)ggYKVc(O$b_aYppAq;&4VF)6GKb0xLk0AU+L0GOaSoR3M zrWVQ1i|++*Wf|34_AP3wEAFO(p|Bm2`=~|IX^`@BUdRULY9gIA*QUn`(<+Cjx5 zEmF${t#6I;g8mNT6WG4f1}I-CQXpSyhm_xMk$%)5#Y``x>?QhL8!Y#g0{UD#DF052 zbWH>0GQ6NDvw`U4Hb7CW`*a0RlYa+Vq>Em5)4h5w7l1oL-_k+hF-d1@`XR_MyI`McVAGq@G@)8&#qk z+5lx#Yr=$|+X3aREz)W)w@DhHwR8i_s-;C6U|Kc8c7!_4xWfwY)plTxv`B)N<9ILC zC0>RL+vxJ|DWK=tLB;hg((7J^IWK6w%J4iDP&v+1uRwm(4k=f(NHe`0TfLA|y+rvo zqTGH3^guf(U*4ivCHP~E>%=+`t>Q98jOMh>`63Oj?%zvJsL;5Zrg2Y+q%EQ!^=1~ad6!B%0$ zE!-z;{@!Ew-jgAFioZk8ldy9G+eyVYJk8fVhU=b;Z^-3EbWoAuiYMc;r}&bm`6~}N z!piv4Q~ZUe`E!rqb5F)+o?`IpaKU4^;3@vr(|profd8L(GR}F5&w85AcnoJe8K*tP z|MGyV5yL4D*z}8=Jk^dyIds2NOPQ%eG@XB#x2RM7Uu#@auOh+Yrx^pDErx&Dw($WO3pLZZy z7v*q0SNVKJcuBG^8@w_T%X)d6)fGe=X`8t1N^b&##mkJ$-@Hru@EtL zGMpNAatJUqFkomXL4 zPp*#Z;*(PbyN=xC4w%L5^x@vpjgYt{)||4|LwH$+&+P!+2J==%t|j$v(A*0xYoI@1 zc4z{~A>8?&@a_Kz-)alzg8L4gzbl#>-vOOf4I0!U_w=c%t!%9z-3#e;LH6|xo&2Wm zoflDkH}|d&6jxqA&KJ_wZrrf$yTik3ZPQbx)hE>UVt1DWI7^O|qU|XI9to`~6Qb6W zkR@~<>fjzSY6%??EXH;JGTbMXs-sf>ysp>P(Omr=Qn-XpFv&69zYk9p{VP#ilL|T}R$rO2_wm3OUMLS4Rz_(z}H~5wFv5a%5;?EW29jv+hb`9hI3< z*wW7mDf~Uprk`}|>hq0DrIdB#o2B$1>h(RuD$p6$*Y;p{7IY3L+U3rHYoSuCQa-bL z9d*dc>pPGVfgWgHv>K?vHpYV0&sj}=7wDkmDQoMfQWT{kY+*J<3R5uM z-4rb3;fKOGc;I=6o?9lZCMga&Y^)sx1{*faS{h!OD12U7YA&HNsbPWr`tJ=q<0`dg zrT{u&lnM`U=WsG9|E`7>n(zy}P!7d3;S`31lS&*VJiVH@9Pn0W=zn2v`2WFfZ^N!A zR)9Si1?TuZfIUgUUZ-H+r(sXTxIQkOK(C%du`CMQqA3UO-|^~dhYg9jh+g2#Ie)(h6n%iQ;{qSe!(K+gZN21*ckBWlokb`?6L&3 zy$BmB$?MDLr;9$Vi0)QD=-HI$SnD9$u>?I!B?Lh_?@WxV?IFxYw$hyoOUy&V5Unr+ zBeKqwLzZ+avSQ~@1Qqwvaj%5l+Qiby^!1p7zfjlcGmQ;&gve3h$>yQ8<~l|gkD!L* z9?SUqY2z!|^i?+!FEmW28z)!RF$qd9>e7AF%!i8tazY=nYvAq#&$4>i0;L=mjiY}aD8qDL&?q)nWBVYDJmI+lA z#I>Bxc=D}^1ey)B4T**nYkXztkc17k6aJ+ylujv~Us?^3f$|ap&qS_gWjMCMUMLXxd>txR&iu_~49GLvelFeu?1f$Q)g>-WfeP18#BxBZ80h z-YW1@goiy!aMU_-k7OmK<40FQi^wOL~{kOR3+sllMyK z2~_G@5?o3rQ$5y_!KJj78j?Y#mePInd~hh)SxP5lk68sMy{>zFt){iDg4^;W-!B@bs6406nX_I^pSCqD>$i&O%g3KdxP`4 z>2elg<%xgC?WMv0+Q@Q{ASb#(jC^@JJ3VcCh1+=`$+yWl+mYMd;l7h;b>t?eZK)8p zRAi>G%N@DB9Q!ASm(h6?h{Dmudd$aZ0M#pWsMoZKb+>5xEjpKe%|~k z6(C4^ejDwM*M*)8H?dI-6gSi5Z1PWLfr(rlAS8*a>BxTai!a%H+Q0@>*oSF7PGu=q zXH7=-VTKM16na-UjJmim(;1ii4Jlep_n^26vVS#gO^K?=22D-8-*%EmzA*_dahBKG zy+?cCKCjhO0e#!@j!s??M|{@Mv3)O0$~pW`if@HouglTXDf$W^jk<_*Y>jK*8t&g7*GFr>>)JK_Dyi|q zHK4;$NpKDBcK9J{`7H4LMKG_+wT2W{!1nl0<)Eoa``2(^!bB~D@~w)CM%}zsYsh;Q zG*`3>^H19v3uiFJuF=!Njn?gJq7#=+TNezgIf&$*hz3q z%SA`8HaH#YmoA-Oeo0ufW@*{drFrWoFP)z=4351h@cjV(fz9b-OY04Vg>&xKmNHwe zF+L=r62f|6#TqhkEgco`blFla;F!(-xv^={Ti`&_8nS9Fy)vO|+0yP99bFrJ;82=1 zYfbbK{{ywr&e1)|3ggQD%$`1!;jBlpl#v0IbR;!+4H;KS_lV}ZN9UaWf&JuSWAA}U zYy=i0F*>LA`#N9V5M8|4L!SMK?qR}eh6!asDfzmRws(8F6gWzy9X9M=_S_Lu!{)#T zuCLzJ*`3S7d(8`6Lwc{H^G!dluF<1jahL30M`uyjRugJHonkz{I^Uqndb5-aSWow( zj;|&Q*3&Oj{0;K&_4Gn(-_k#vJ{Lg~hJBJzIzzq(9Pv>ZbMZbFcRe=6v6{TLfsUtA zwv+7}=-63rlmd4Vql?FTfQfAD2o~kKy_>FYNEAX$w%A=g-TNotX#-&{=7o~%FM(fW zfaQV$s4GpuNyFM_b&aCQ5!cl4Uush1Pdqg#V&C0x_Z<~{;ms1#V4I%mz3?;QfyfdG{-8<}hBrdRftF-_v64ynR-s4HTv@5f`1#Z()@++YutU=q^ z*{q+it9-K&{*)MDhIi~29BEEK&W5E`m6OEHbOhCDI~lr}9^Chjs(R-;;YV0Aw{B9^ zR(81HUYU&5m~DL){-zrHZls#K=(re*+xbqDv!uQ;DZEzxu8K5nri0_3nFQgS+WTVh zq@3aRt#ixWFy9}h&fK`z7;JsNq^S{>7TqfURYD$arn`j zTR{GOu|3JSCpD^kc^xf(zMb$}=%?7pD_OiYRHAoXUr7#Zp<}~ke+%Ga&HR!{Ia@() zbmJCG$}v9_lFP}REp&+gYbEd^UAXP${@EAzPpMp1LPECEJ;UsiEav-$tJs&+9`7?~ z^87UWN-}XP-EZ8dRJ%iSIEfr|cn!EX&}BAc0*QR*C~W$!0hj=I#D|>VFu4O5otRk;&1Gl;VT4hs}&0HNHZo_Gzp7 z`9MB_!odw|1myp$%D=L}0tp*N@mE5WP6g~P{QqEA_kY>N*L1nBpwxWsq@3_pn@?(n z=6)HhQzKTv^qV}%5vbdjz36&PKw0gv+5jPQ6>uOty{f^y*9cqyQ)16a;dli|no$ksnEER9JTDz~Rp{f#v zWJJvx0ni$|O2q~k)cz~zz_J8Q|J-x)=gyrk|J3^aOhe%xO4{|}fXc3`CYLOQbqpI( zYI40>EJUtqQ@A)i`DHsDUnCnRRgEva38q1v%{gUUT0+*0TtE+wQFJ=)SCdu0YTr+L zDeLf3Wl_i7Xmvd-=Dul7^I2u5bvb|j4M(qT6^l1p!S|o_?=ssuUB*{%-7XU+DX>T? zJ<~a#`_&`;RaS1Ebr|aIZS0&-=$_8`;%%~F2h5ZAR*(;O&|&5sRbb`0<&mzHk?T8P z>F`yVwzQkEvaNyP2^PTZP*>2{K`HJXwSg6s@=X}umPDP+9EW5CUDo9lkbf91r!wcI z>mzciebffxm{y2OxB9|goOgnA#r+|}dTshnU-5fc75bI13RmZR!lhJ%!Hi7@B|zTv*E49KY_cg7%JTfcY=&(q)Y^qx5ke$ zZz}sI1J6`~hV9a2ru6LDl6G(f`S(uRHbD+e*lXLAXkec?*YV5+X>b{f;!J!w!5zq| zriavQWmiQQifRtL%-R^~&guktYH-??>*F_#r|PNj8XI>lep9Uv8`QYHgdG9FpeM;V zCvBs|9b}0Urj%tX$W|vT3;9)~!AVDV7vcZKLGj8OdgF)}$_Xmnkc1u*TV-`&z)f z$;i{iaklc}I<$~-1GewAsU;hdF%gz_`sud4DI;7nta(nK^jx1~G~}ruAG+u;zttIM zYipcX8;$PPCRGE*|M64KH-uOLU=boWV}5CXOie_Rf~$#B*?Qt2>) zNoBk(%wQNO_~I|l%B{RC{5`mw{A(ATNYyMSf8p=;<-}S|+qVHLeUdWA^ww$i3RE*;lYb%>M86{Qpg#vYap?*m?_=lP5&Ff6*+=4<^hR z_^Z*a>{rSf`)=_$<3Pk%t!X&93AvBtSxwof;A{G;c{TCn_oADk;RdIWgl)oxIpdcB z6j=E{n^R!jHri646JwMPlJ1~_t2WoztH$F18gVWZC3T+Oksb_T_z&}~jj{~)aFN@T z6qIME;~^752na*fpnC6rM@awWByBgWRQ07~-flXHx?4ha?xv$-?b~W>!X4~n@-KPv)8|Sc4t48jRf3|i5*Hzxspfu)PTm9G z|KN&hLoMcq4m0If0&Bs)<3Ap7_za$1=cD`%4Tc_x7$RXFPD(jk0^~6m0dH+3!R(IT zrGAP#r6l}rHSd$pNGc4Mo?q zWN{7H8NaMrVy@H6UsToZiKylNsD>BS!|#K>Bz|5Mv9NZJe5ZPe`D{TQ!~aoT{5_bC zta`BEa_?7xhd4&uS#>A{*30jKj|Nys@2J9;Y=xJwah?EUE%#eB#Qs{{GjT;hgfhmMy4Y+LI;I^9N1!PkW+d=%yZSr6Z&3 zcEBz4$2@y&mV5W>Z2>vk?w|9!@N)4Jm=cRAhMzoXsl`J#xznAvG)ngl0iXQ*vY>{x$_Jc2tbH+EFnd;bVBB#s<9!XpeCSs4v3ShR~?iZ>bs^_=I_E2=vg+Rkgb!YQ=Y; z+w3c7V8l0|(_jltse=9iAHqVcT`=dSzW^<%^auH1HMy~m?whzAQA1aPKFS(qP;bCn zTvM=DjKyhYj(M?_4P6|*IC0+Ol_b3m4Bz<<@@gIZ*x=HtiRL|V=>IDCG3 z(BLc2!Vb&uFI2(854Sv0k#x>@h!d-;vwE!@=6Y_3fBNUgvMv>q8-Or0Lt~(hk^6`4 zJ1vd~#qm{5V&10HscqF{+S_!`DT}MPP1SSEN%teFyE{Yk zoA2koUQF~7Z7ULW5zRPgrjDU9y6C1(qnf+wV*64VSHa>FDb5Qo_CawS$t6XCzc35j z`tkc9FcR>l0!41Yw!A&(N7MtA85hP$%87mX&9I#Df7S$A%zujEo#7Urm6Csr0_(Ti z=EH9b%h~$-z(oE7BO3?@3jlAC_+F$z*(5Kz?u`V!nooDTM>BpkMpq{zYo!%uJprrad|@XPw>bbC4LjR4rJ`I zXlJQnXgwv^ipy%9{no=`D5u~bRu2x^aWsMf18H801mzf%?;lN3cMb)>+UaLgGnkUv z(!bQwf53Drr2lAYPJ1-N=UN6CGo(O<9~1;&E`UYZ(gd�E^=Hkcta3@I2|H&C3;* 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

s4&F~RjQGLqTk7)&6=%Sts3c2P3 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

R%uciS2f3*uiRuo`i9K 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ðb2&aIoMw&Kk##bnxlL^t_tE8~-*n1t7(c3zO|9K5SA7w3Kk;juoD zT2X@0LGMp12I6TP=vH!Fq^Ffw)?jIUvx#%35V9@3t5`SBE|A3b&&Y{-*uAySPVPwo_Z&OF^XAj(gITx?P{TQ|+JfxXUj+ zE%kU_Zc~>cMF@ubiyX{?{PMM5ra6WArTgW!b)`)SgZuc`TxT%*5z3$ctu7pWIdKlR z&^mJ!UAoGytQg;{n6X(g!WaSn=C2uvv#zvD^EH!0o1<7|Lqd`!QjQT zU&bC=hXY6b{MP&~mzr*L8TB{#8(q3fUECfaz}&^Ibav+zQwa>p`Qk2H?d9^iY5NETy;NQs@lETe`Ok znUb^3Qf=cyK_MaAYkoRZb81JzQ!Eg-`wXkS?8H7gyN{ z?>nNTc#y=ai}>%r9dj;SWZDkq?TN2DVQW=>;D$B04ardmroK?7J>7$5A@;cDd$gzV zXpt|x{Gaz_&IwM%b#^+h4OK|~(aT&UGQ~MkvV-v+Xs!`STz%I5z;u-O$r;?OR^}N> zC8UXTZJmXR-HmwzkN3fBB7?Z?#HASKHj&TG($b!j;-;|Lyq;|TOOBemBA>E+hAN%j z^Guqs^!btq^fBVv2&tk)v?L<#-%jBG-H27XzzwUD7;59q>B(+-9p#*yd8KoZJn_Ju zB%Q*qv_~K3C_HtC6NXC`WW@Kyr>{9FR(vJede|CnH(>1Cj=!a2ib{*5VMjU(|3=q~V)J{H z)MV^59#-7ZjO*Hr8w!gxi(#@{-HB89htTL>v*<*P;Xz)eU8Zr;l7pR5wycc zlqsjv#dtWKKh$Y^*O1HTB&uCZNdN54F%!njlmzK#xI|qZkTg>mj>YZi95X`Fdu2)| z*|v*WODA@I_YE@@guMF=v#8(j&W)8g7$R|)%Q#O+WBMmYuFuy|#((j)izb7ZzF`iA zD1H=u|X9m&sRqUgj9 z;*f>w5%E4zXcps7n-%2UEG95Qu~l?M`kj+~mOaJI>eznX=uDkH?UC$5XI=H<;yW

gB5aBS@22SjGrc=V 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
B=0N#^$`IP-lP8sOCn5T{YZF)>j9Ov};S3!V+~ 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 diff --git a/SomfyController.littlefs.bin b/SomfyController.littlefs.bin index 65e148e687ce33471a33219206491dcb9c49f2cf..64f3f3679aeac06b061aeb8a94b91eacf1061c77 100644 GIT binary patch delta 68869 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 OYn2(Z%8XrQy8jLD?oulN delta 31559 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 #include #include +#include "mbedtls/md.h" #include "ConfigSettings.h" #include "Web.h" #include "Utils.h" @@ -18,9 +19,11 @@ extern MQTTClass mqtt; #define WEB_MAX_RESPONSE 16384 static char g_content[WEB_MAX_RESPONSE]; + // General responses static const char _response_404[] = "404: Service Not Found"; + // Encodings static const char _encoding_text[] = "text/plain"; static const char _encoding_html[] = "text/html"; @@ -47,9 +50,213 @@ void Web::sendCacheHeaders(uint32_t seconds) { void Web::end() { //server.end(); } +bool Web::isAuthenticated(WebServer &server, bool cfg) { + Serial.println("Checking authentication"); + if(settings.Security.type == security_types::None) return true; + else if(!cfg && (settings.Security.permissions & static_cast(security_permissions::ConfigOnly)) == 0x01) return true; + else if(server.hasHeader("apikey")) { + // Api key was supplied. + Serial.println("Checking API Key..."); + char token[65]; + memset(token, 0x00, sizeof(token)); + this->createAPIToken(server.client().remoteIP(), token); + // Compare the tokens. + if(String(token) != server.header("apikey")) return false; + server.sendHeader("apikey", token); + } + else { + // Send a 401 + Serial.println("Not authenticated..."); + server.send(401, "Unauthorized API Key"); + return false; + } + return true; +} +bool Web::createAPIPinToken(const IPAddress ipAddress, const char *pin, char *token) { + return this->createAPIToken((String(pin) + ":" + ipAddress.toString()).c_str(), token); +} +bool Web::createAPIPasswordToken(const IPAddress ipAddress, const char *username, const char *password, char *token) { + return this->createAPIToken((String(username) + ":" + String(password) + ":" + ipAddress.toString()).c_str(), token); +} +bool Web::createAPIToken(const char *payload, char *token) { + byte hmacResult[32]; + mbedtls_md_context_t ctx; + mbedtls_md_type_t md_type = MBEDTLS_MD_SHA256; + mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(md_type), 1); + mbedtls_md_hmac_starts(&ctx, (const unsigned char *)settings.serverId, strlen(settings.serverId)); + mbedtls_md_hmac_update(&ctx, (const unsigned char *)payload, strlen(payload)); + mbedtls_md_hmac_finish(&ctx, hmacResult); + Serial.print("Hash: "); + token[0] = '\0'; + for(int i = 0; i < sizeof(hmacResult); i++){ + char str[3]; + sprintf(str, "%02x", (int)hmacResult[i]); + strcat(token, str); + } + Serial.println(token); + return true; +} +bool Web::createAPIToken(const IPAddress ipAddress, char *token) { + String payload; + if(settings.Security.type == security_types::Password) createAPIPasswordToken(ipAddress, settings.Security.username, settings.Security.password, token); + else if(settings.Security.type == security_types::PinEntry) createAPIPinToken(ipAddress, settings.Security.pin, token); + else createAPIToken(ipAddress.toString().c_str(), token); + return true; +} +void Web::handleLogout(WebServer &server) { + Serial.println("Logging out of webserver"); + server.sendHeader("Location", "/"); + server.sendHeader("Cache-Control", "no-cache"); + server.sendHeader("Set-Cookie", "ESPSOMFYID=0"); + server.send(301); +} +void Web::handleLogin(WebServer &server) { + webServer.sendCORSHeaders(); + if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } + StaticJsonDocument<256> doc; + JsonObject obj = doc.to(); + char token[65]; + memset(&token, 0x00, sizeof(token)); + this->createAPIToken(server.client().remoteIP(), token); + obj["type"] = static_cast(settings.Security.type); + if(settings.Security.type == security_types::None) { + obj["apiKey"] = token; + obj["msg"] = "Success"; + obj["success"] = true; + serializeJson(doc, g_content); + server.send(200, _encoding_json, g_content); + return; + } + Serial.println("Web logging in..."); + char username[33] = ""; + char password[33] = ""; + char pin[5] = ""; + if(server.hasArg("plain")) { + DynamicJsonDocument docin(256); + DeserializationError err = deserializeJson(docin, server.arg("plain")); + if (err) { + switch (err.code()) { + case DeserializationError::InvalidInput: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Invalid JSON payload\"}")); + break; + case DeserializationError::NoMemory: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Out of memory parsing JSON\"}")); + break; + default: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"General JSON Deserialization failed\"}")); + break; + } + return; + } + else { + JsonObject objin = docin.as(); + if(objin.containsKey("username")) strlcpy(username, objin["username"], sizeof(username)); + if(objin.containsKey("password")) strlcpy(username, objin["password"], sizeof(password)); + if(objin.containsKey("pin")) strlcpy(pin, objin["pin"], sizeof(pin)); + } + } + else { + if(server.hasArg("username")) strlcpy(username, server.arg("username").c_str(), sizeof(username)); + if(server.hasArg("password")) strlcpy(password, server.arg("password").c_str(), sizeof(password)); + if(server.hasArg("pin")) strlcpy(pin, server.arg("pin").c_str(), sizeof(pin)); + } + // At this point we should have all the data we need to login. + if(settings.Security.type == security_types::PinEntry) { + Serial.print("Validating pin "); + Serial.println(pin); + if(strlen(pin) == 0 || strcmp(pin, settings.Security.pin) != 0) { + obj["success"] = false; + obj["msg"] = "Invalid Pin Entry"; + } + else { + obj["success"] = true; + obj["msg"] = "Login successful"; + obj["apiKey"] = token; + } + } + else if(settings.Security.type == security_types::Password) { + if(strlen(username) == 0 || strlen(password) == 0 || strcmp(username, settings.Security.username) != 0 || strcmp(password, settings.Security.password) != 0) { + obj["success"] = false; + obj["msg"] = "Invalid username or password"; + } + else { + obj["success"] = true; + obj["msg"] = "Login successful"; + obj["apiKey"] = token; + } + } + serializeJson(doc, g_content); + server.send(200, _encoding_json, g_content); + return; +} +void Web::handleStreamFile(WebServer &server, const char *filename, const char *encoding) { + webServer.sendCORSHeaders(); + // Load the index html page from the data directory. + Serial.print("Loading file "); + Serial.println(filename); + File file = LittleFS.open(filename, "r"); + if (!file) { + Serial.print("Error opening"); + Serial.println(filename); + server.send(500, _encoding_text, "shades.cfg"); + } + server.streamFile(file, encoding); + file.close(); +} +void Web::handleController(WebServer &server) { + webServer.sendCORSHeaders(); + if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } + HTTPMethod method = server.method(); + if (method == HTTP_POST || method == HTTP_GET) { + DynamicJsonDocument doc(16384); + somfy.toJSON(doc); + serializeJson(doc, g_content); + server.send(200, _encoding_json, g_content); + } + else server.send(404, _encoding_text, _response_404); +} +void Web::handleLoginContext(WebServer &server) { + webServer.sendCORSHeaders(); + if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } + DynamicJsonDocument doc(512); + JsonObject obj = doc.to(); + obj["type"] = static_cast(settings.Security.type); + obj["permissions"] = settings.Security.permissions; + serializeJson(doc, g_content); + server.send(200, _encoding_json, g_content); +} +void Web::handleGetShades(WebServer &server) { + webServer.sendCORSHeaders(); + if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } + HTTPMethod method = server.method(); + if (method == HTTP_POST || method == HTTP_GET) { + DynamicJsonDocument doc(16384); + JsonArray arr = doc.to(); + somfy.toJSONShades(arr); + serializeJson(doc, g_content); + server.send(200, _encoding_json, g_content); + } + else server.send(404, _encoding_text, _response_404); +} +void Web::handleGetGroups(WebServer &server) { + webServer.sendCORSHeaders(); + if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } + HTTPMethod method = server.method(); + if (method == HTTP_POST || method == HTTP_GET) { + DynamicJsonDocument doc(16384); + JsonArray arr = doc.to(); + somfy.toJSONGroups(arr); + serializeJson(doc, g_content); + server.send(200, _encoding_json, g_content); + } + else server.send(404, _encoding_text, _response_404); +} void Web::begin() { Serial.println("Creating Web MicroServices..."); server.enableCORS(true); + const char *keys[1] = {"apikey"}; + server.collectHeaders(keys, 1); + apiServer.collectHeaders(keys, 1); apiServer.enableCORS(true); apiServer.on("/discovery", []() { HTTPMethod method = apiServer.method(); @@ -60,25 +267,18 @@ void Web::begin() { obj["serverId"] = settings.serverId; obj["version"] = settings.fwVersion; obj["model"] = "ESPSomfyRTS"; - JsonArray arr = obj.createNestedArray("shades"); - somfy.toJSON(arr); + JsonArray arrShades = obj.createNestedArray("shades"); + somfy.toJSONShades(arrShades); + JsonArray arrGroups = obj.createNestedArray("groups"); + somfy.toJSONGroups(arrGroups); serializeJson(doc, g_content); apiServer.send(200, _encoding_json, g_content); } apiServer.send(500, _encoding_text, "Invalid http method"); }); - apiServer.on("/shades", []() { - webServer.sendCORSHeaders(); - HTTPMethod method = apiServer.method(); - if (method == HTTP_POST || method == HTTP_GET) { - DynamicJsonDocument doc(16384); - JsonArray arr = doc.to(); - somfy.toJSON(arr); - serializeJson(doc, g_content); - apiServer.send(200, _encoding_json, g_content); - } - else apiServer.send(404, _encoding_text, _response_404); - }); + apiServer.on("/shades", []() { webServer.handleGetShades(apiServer); }); + apiServer.on("/groups", []() { webServer.handleGetGroups(apiServer); }); + apiServer.onNotFound([]() { Serial.print("Request 404:"); HTTPMethod method = apiServer.method(); @@ -92,6 +292,10 @@ void Web::begin() { case HTTP_PUT: Serial.print("PUT "); break; + case HTTP_OPTIONS: + Serial.print("OPTIONS "); + apiServer.send(200, "OK"); + return; default: Serial.print("["); Serial.print(method); @@ -102,17 +306,7 @@ void Web::begin() { snprintf(g_content, sizeof(g_content), "404 Service Not Found: %s", apiServer.uri().c_str()); apiServer.send(404, _encoding_text, g_content); }); - apiServer.on("/controller", []() { - webServer.sendCORSHeaders(); - HTTPMethod method = apiServer.method(); - if (method == HTTP_POST || method == HTTP_GET) { - DynamicJsonDocument doc(16384); - somfy.toJSON(doc); - serializeJson(doc, g_content); - apiServer.send(200, _encoding_json, g_content); - } - else apiServer.send(404, _encoding_text, _response_404); - }); + apiServer.on("/controller", []() { webServer.handleController(apiServer); }); apiServer.on("/shadeCommand", []() { webServer.sendCORSHeaders(); HTTPMethod method = apiServer.method(); @@ -180,6 +374,65 @@ void Web::begin() { apiServer.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Shade with the specified id not found.\"}")); } }); + apiServer.on("/groupCommand", []() { + webServer.sendCORSHeaders(); + HTTPMethod method = apiServer.method(); + uint8_t groupId = 255; + uint8_t repeat = 1; + somfy_commands command = somfy_commands::My; + if (method == HTTP_GET || method == HTTP_PUT || method == HTTP_POST) { + if (apiServer.hasArg("shadeId")) { + groupId = atoi(apiServer.arg("groupId").c_str()); + if (apiServer.hasArg("command")) command = translateSomfyCommand(apiServer.arg("command")); + if(apiServer.hasArg("repeat")) repeat = atoi(apiServer.arg("repeat").c_str()); + } + else if (apiServer.hasArg("plain")) { + Serial.println("Sending Group Command"); + DynamicJsonDocument doc(256); + DeserializationError err = deserializeJson(doc, apiServer.arg("plain")); + if (err) { + switch (err.code()) { + case DeserializationError::InvalidInput: + apiServer.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Invalid JSON payload\"}")); + break; + case DeserializationError::NoMemory: + apiServer.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Out of memory parsing JSON\"}")); + break; + default: + apiServer.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"General JSON Deserialization failed\"}")); + break; + } + return; + } + else { + JsonObject obj = doc.as(); + if (obj.containsKey("groupId")) groupId = obj["groupId"]; + else apiServer.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"No group id was supplied.\"}")); + if (obj.containsKey("command")) { + String scmd = obj["command"]; + command = translateSomfyCommand(scmd); + } + if(obj.containsKey("repeat")) repeat = obj["repeat"].as(); + } + } + else apiServer.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"No group object supplied.\"}")); + } + SomfyGroup * group = somfy.getGroupById(groupId); + if (group) { + Serial.print("Received:"); + Serial.println(apiServer.arg("plain")); + // Send the command to the group. + group->sendCommand(command, repeat); + DynamicJsonDocument sdoc(512); + JsonObject sobj = sdoc.to(); + group->toJSON(sobj); + serializeJson(sdoc, g_content); + apiServer.send(200, _encoding_json, g_content); + } + else { + apiServer.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Group with the specified id not found.\"}")); + } + }); apiServer.on("/tiltCommand", []() { webServer.sendCORSHeaders(); HTTPMethod method = apiServer.method(); @@ -248,57 +501,11 @@ void Web::begin() { server.on("/upnp.xml", []() { SSDP.schema(server.client()); }); - server.on("/", []() { - webServer.sendCacheHeaders(604800); - webServer.sendCORSHeaders(); - // Load the index html page from the data directory. - Serial.println("Loading file index.html"); - File file = LittleFS.open("/index.html", "r"); - if (!file) { - Serial.println("Error opening data/index.html"); - server.send(500, _encoding_html, "Unable to open data/index.html"); - } - server.streamFile(file, _encoding_html); - file.close(); - }); - server.on("/configRadio", []() { - webServer.sendCORSHeaders(); - // Load the index html page from the data directory. - Serial.println("Loading file configRadio.html"); - File file = LittleFS.open("/configRadio.html", "r"); - if (!file) { - Serial.println("Error opening configRadio.html"); - server.send(500, _encoding_text, "configRadio.html"); - } - server.streamFile(file, _encoding_html); - file.close(); - }); - server.on("/shades.cfg", []() { - webServer.sendCORSHeaders(); - // Load the index html page from the data directory. - Serial.println("Loading file shades.cfg"); - File file = LittleFS.open("/shades.cfg", "r"); - if (!file) { - Serial.println("Error opening shades.cfg"); - server.send(500, _encoding_text, "shades.cfg"); - } - server.streamFile(file, _encoding_text); - file.close(); - - }); - server.on("/shades.tmp", []() { - webServer.sendCORSHeaders(); - // Load the index html page from the data directory. - Serial.println("Loading file shades.cfg"); - File file = LittleFS.open("/shades.tmp", "r"); - if (!file) { - Serial.println("Error opening shades.tmp"); - server.send(500, _encoding_text, "shades.tmp"); - } - server.streamFile(file, _encoding_text); - file.close(); - }); - + server.on("/", []() { webServer.handleStreamFile(server, "/index.html", _encoding_html); }); + server.on("/login", []() { webServer.handleLogin(server); }); + server.on("/loginContext", []() { webServer.handleLoginContext(server); }); + server.on("/shades.cfg", []() { webServer.handleStreamFile(server, "/shades.cfg", _encoding_text); }); + server.on("/shades.tmp", []() { webServer.handleStreamFile(server, "/shades.tmp", _encoding_text); }); server.on("/backup", []() { webServer.sendCORSHeaders(); char filename[120]; @@ -353,73 +560,12 @@ void Web::begin() { if(somfy.loadShadesFile("/shades.tmp")) somfy.commit(); } }); - server.on("/index.js", []() { - webServer.sendCacheHeaders(604800); - webServer.sendCORSHeaders(); - // Load the index html page from the data directory. - Serial.println("Loading file index.js"); - File file = LittleFS.open("/index.js", "r"); - if (!file) { - Serial.println("Error opening data/index.js"); - server.send(500, _encoding_text, "Unable to open data/index.js"); - } - server.streamFile(file, "text/javascript"); - file.close(); - }); - server.on("/main.css", []() { - webServer.sendCacheHeaders(604800); - webServer.sendCORSHeaders(); - // Load the index html page from the data directory. - Serial.println("Loading file main.css"); - File file = LittleFS.open("/main.css", "r"); - if (!file) { - Serial.println("Error opening data/main.css"); - server.send(500, _encoding_text, "Unable to open data/main.css"); - } - server.streamFile(file, "text/css"); - file.close(); - }); - server.on("/icons.css", []() { - webServer.sendCacheHeaders(604800); - webServer.sendCORSHeaders(); - // Load the index html page from the data directory. - Serial.println("Loading file icons.css"); - File file = LittleFS.open("/icons.css", "r"); - if (!file) { - Serial.println("Error opening data/icons.css"); - server.send(500, _encoding_text, "Unable to open data/icons.css"); - } - server.streamFile(file, "text/css"); - file.close(); - }); - server.on("/favicon.png", []() { - webServer.sendCacheHeaders(604800); - webServer.sendCORSHeaders(); - - // Load the index html page from the data directory. - Serial.println("Loading file favicon.png"); - File file = LittleFS.open("/favicon.png", "r"); - if (!file) { - Serial.println("Error opening data/favicon.png"); - server.send(500, _encoding_text, "Unable to open data/icons.css"); - } - server.streamFile(file, "image/png"); - file.close(); - }); - server.on("/icon.png", []() { - webServer.sendCacheHeaders(604800); - webServer.sendCORSHeaders(); - - // Load the index html page from the data directory. - Serial.println("Loading file favicon.png"); - File file = LittleFS.open("/icon.png", "r"); - if (!file) { - Serial.println("Error opening data/favicon.png"); - server.send(500, _encoding_text, "Unable to open data/icons.css"); - } - server.streamFile(file, "image/png"); - file.close(); - }); + server.on("/index.js", []() { webServer.handleStreamFile(server, "/index.js", "text/javascript"); }); + server.on("/main.css", []() { webServer.handleStreamFile(server, "/main.css", "text/css"); }); + server.on("/widgets.css", []() { webServer.handleStreamFile(server, "/widgets.css", "text/css"); }); + server.on("/icons.css", []() { webServer.sendCacheHeaders(604800); webServer.handleStreamFile(server, "/icons.css", "text/css"); }); + server.on("/favicon.png", []() { webServer.sendCacheHeaders(604800); webServer.handleStreamFile(server, "/favicon.png", "image/png"); }); + server.on("/icon.png", []() { webServer.sendCacheHeaders(604800); webServer.handleStreamFile(server, "/icon.png", "image/png"); }); server.onNotFound([]() { Serial.print("Request 404:"); HTTPMethod method = server.method(); @@ -433,6 +579,10 @@ void Web::begin() { case HTTP_PUT: Serial.print("PUT "); break; + case HTTP_OPTIONS: + Serial.print("OPTIONS "); + server.send(200, "OK"); + return; default: Serial.print("["); Serial.print(method); @@ -443,31 +593,12 @@ void Web::begin() { snprintf(g_content, sizeof(g_content), "404 Service Not Found: %s", server.uri().c_str()); server.send(404, _encoding_text, g_content); }); - server.on("/controller", []() { - webServer.sendCORSHeaders(); - HTTPMethod method = server.method(); - if (method == HTTP_POST || method == HTTP_GET) { - DynamicJsonDocument doc(16384); - somfy.toJSON(doc); - serializeJson(doc, g_content); - server.send(200, _encoding_json, g_content); - } - else server.send(404, _encoding_text, _response_404); - }); - server.on("/shades", []() { - webServer.sendCORSHeaders(); - HTTPMethod method = server.method(); - if (method == HTTP_POST || method == HTTP_GET) { - DynamicJsonDocument doc(16384); - JsonArray arr = doc.to(); - somfy.toJSON(arr); - serializeJson(doc, g_content); - server.send(200, _encoding_json, g_content); - } - else server.send(404, _encoding_text, _response_404); - }); + server.on("/controller", []() { webServer.handleController(server); }); + server.on("/shades", []() { webServer.handleGetShades(server); }); + server.on("/groups", []() { webServer.handleGetGroups(server); }); server.on("/getNextShade", []() { webServer.sendCORSHeaders(); + if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } StaticJsonDocument<256> doc; uint8_t shadeId = somfy.getNextShadeId(); JsonObject obj = doc.to(); @@ -479,6 +610,19 @@ void Web::begin() { serializeJson(doc, g_content); server.send(200, _encoding_json, g_content); }); + server.on("/getNextGroup", []() { + webServer.sendCORSHeaders(); + StaticJsonDocument<256> doc; + if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } + uint8_t groupId = somfy.getNextGroupId(); + JsonObject obj = doc.to(); + obj["groupId"] = groupId; + obj["remoteAddress"] = somfy.getNextRemoteAddress(groupId); + obj["bitLength"] = somfy.transceiver.config.type; + obj["proto"] = static_cast(somfy.transceiver.config.proto); + serializeJson(doc, g_content); + server.send(200, _encoding_json, g_content); + }); server.on("/addShade", []() { if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } HTTPMethod method = server.method(); @@ -535,6 +679,61 @@ void Web::begin() { server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Error saving Somfy Shade.\"}")); } }); + server.on("/addGroup", []() { + if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } + HTTPMethod method = server.method(); + SomfyGroup * group = nullptr; + if (method == HTTP_POST || method == HTTP_PUT) { + Serial.println("Adding a group"); + DynamicJsonDocument doc(512); + DeserializationError err = deserializeJson(doc, server.arg("plain")); + if (err) { + switch (err.code()) { + case DeserializationError::InvalidInput: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Invalid JSON payload\"}")); + break; + case DeserializationError::NoMemory: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Out of memory parsing JSON\"}")); + break; + default: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"General JSON Deserialization failed\"}")); + break; + } + } + else { + JsonObject obj = doc.as(); + Serial.println("Counting shades"); + if (somfy.groupCount() > SOMFY_MAX_GROUPS) { + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Maximum number of groups exceeded.\"}")); + } + else { + Serial.println("Adding group"); + group = somfy.addGroup(obj); + if (group) { + DynamicJsonDocument sdoc(512); + JsonObject sobj = sdoc.to(); + group->toJSON(sobj); + serializeJson(sdoc, g_content); + server.send(200, _encoding_json, g_content); + } + else { + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Error adding group.\"}")); + } + } + } + } + if (group) { + DynamicJsonDocument doc(256); + JsonObject obj = doc.to(); + group->toJSON(obj); + serializeJson(doc, g_content); + Serial.println(g_content); + server.send(200, _encoding_json, g_content); + } + else { + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Error saving Somfy Group.\"}")); + } + }); server.on("/shade", []() { webServer.sendCORSHeaders(); if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } @@ -595,6 +794,107 @@ void Web::begin() { } else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"No shade object supplied.\"}")); } + }); + server.on("/group", []() { + webServer.sendCORSHeaders(); + if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } + HTTPMethod method = server.method(); + if (method == HTTP_GET) { + if (server.hasArg("groupId")) { + int groupId = atoi(server.arg("groupId").c_str()); + SomfyGroup* group = somfy.getGroupById(groupId); + if (group) { + DynamicJsonDocument doc(2048); + JsonObject obj = doc.to(); + group->toJSON(obj); + serializeJson(doc, g_content); + server.send(200, _encoding_json, g_content); + } + else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Group Id not found.\"}")); + } + else { + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"You must supply a valid shade id.\"}")); + } + } + else if (method == HTTP_PUT || method == HTTP_POST) { + // We are updating an existing group. + if (server.hasArg("plain")) { + Serial.println("Updating a group"); + DynamicJsonDocument doc(512); + DeserializationError err = deserializeJson(doc, server.arg("plain")); + if (err) { + switch (err.code()) { + case DeserializationError::InvalidInput: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Invalid JSON payload\"}")); + break; + case DeserializationError::NoMemory: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Out of memory parsing JSON\"}")); + break; + default: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"General JSON Deserialization failed\"}")); + break; + } + } + else { + JsonObject obj = doc.as(); + if (obj.containsKey("groupId")) { + SomfyGroup* group = somfy.getGroupById(obj["groupId"]); + if (group) { + group->fromJSON(obj); + group->save(); + DynamicJsonDocument sdoc(2048); + JsonObject sobj = sdoc.to(); + group->toJSON(sobj); + serializeJson(sdoc, g_content); + server.send(200, _encoding_json, g_content); + } + else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Group Id not found.\"}")); + } + else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"No group id was supplied.\"}")); + } + } + else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"No group object supplied.\"}")); + } + }); + server.on("/groupOptions", []() { + webServer.sendCORSHeaders(); + if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } + HTTPMethod method = server.method(); + if (method == HTTP_GET || method == HTTP_POST) { + if (server.hasArg("groupId")) { + int groupId = atoi(server.arg("groupId").c_str()); + SomfyGroup* group = somfy.getGroupById(groupId); + if (group) { + DynamicJsonDocument doc(4096); + JsonObject obj = doc.to(); + group->toJSON(obj); + JsonArray arr = obj.createNestedArray("availShades"); + for(uint8_t i = 0; i < SOMFY_MAX_SHADES; i++) { + SomfyShade *shade = &somfy.shades[i]; + if(shade->getShadeId() != 255) { + bool isLinked = false; + for(uint8_t j = 0; j < SOMFY_MAX_GROUPED_SHADES; j++) { + if(group->linkedShades[i] == shade->getShadeId()) { + isLinked = true; + break; + } + } + if(!isLinked) { + JsonObject s = arr.createNestedObject(); + shade->toJSONRef(s); + } + } + } + serializeJson(doc, g_content); + server.send(200, _encoding_json, g_content); + } + else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Group Id not found.\"}")); + } + else { + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"You must supply a valid group id.\"}")); + } + } + }); server.on("/saveShade", []() { webServer.sendCORSHeaders(); @@ -640,6 +940,50 @@ void Web::begin() { else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"No shade object supplied.\"}")); } }); + server.on("/saveGroup", []() { + webServer.sendCORSHeaders(); + if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } + HTTPMethod method = server.method(); + if (method == HTTP_PUT || method == HTTP_POST) { + // We are updating an existing shade. + if (server.hasArg("plain")) { + Serial.println("Updating a group"); + DynamicJsonDocument doc(512); + DeserializationError err = deserializeJson(doc, server.arg("plain")); + if (err) { + switch (err.code()) { + case DeserializationError::InvalidInput: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Invalid JSON payload\"}")); + break; + case DeserializationError::NoMemory: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Out of memory parsing JSON\"}")); + break; + default: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"General JSON Deserialization failed\"}")); + break; + } + } + else { + JsonObject obj = doc.as(); + if (obj.containsKey("groupId")) { + SomfyGroup* group = somfy.getGroupById(obj["groupId"]); + if (group) { + group->fromJSON(obj); + group->save(); + DynamicJsonDocument sdoc(512); + JsonObject sobj = sdoc.to(); + group->toJSON(sobj); + serializeJson(sdoc, g_content); + server.send(200, _encoding_json, g_content); + } + else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Group Id not found.\"}")); + } + else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"No group id was supplied.\"}")); + } + } + else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"No group object supplied.\"}")); + } + }); server.on("/tiltCommand", []() { webServer.sendCORSHeaders(); if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } @@ -773,6 +1117,66 @@ void Web::begin() { server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Shade with the specified id not found.\"}")); } }); + server.on("/groupCommand", []() { + webServer.sendCORSHeaders(); + if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } + HTTPMethod method = server.method(); + uint8_t groupId = 255; + uint8_t repeat = 1; + somfy_commands command = somfy_commands::My; + if (method == HTTP_GET || method == HTTP_PUT || method == HTTP_POST) { + if (server.hasArg("groupId")) { + groupId = atoi(server.arg("shadeId").c_str()); + if (server.hasArg("command")) command = translateSomfyCommand(server.arg("command")); + if(server.hasArg("repeat")) repeat = atoi(server.arg("repeat").c_str()); + } + else if (server.hasArg("plain")) { + Serial.println("Sending Group Command"); + DynamicJsonDocument doc(256); + DeserializationError err = deserializeJson(doc, server.arg("plain")); + if (err) { + switch (err.code()) { + case DeserializationError::InvalidInput: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Invalid JSON payload\"}")); + break; + case DeserializationError::NoMemory: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Out of memory parsing JSON\"}")); + break; + default: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"General JSON Deserialization failed\"}")); + break; + } + return; + } + else { + JsonObject obj = doc.as(); + if (obj.containsKey("groupId")) groupId = obj["groupId"]; + else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"No group id was supplied.\"}")); + if (obj.containsKey("command")) { + String scmd = obj["command"]; + command = translateSomfyCommand(scmd); + } + if(obj.containsKey("repeat")) repeat = obj["repeat"].as(); + } + } + else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"No group object supplied.\"}")); + } + SomfyGroup * group = somfy.getGroupById(groupId); + if (group) { + Serial.print("Received:"); + Serial.println(server.arg("plain")); + // Send the command to the group. + group->sendCommand(command, repeat); + DynamicJsonDocument sdoc(512); + JsonObject sobj = sdoc.to(); + group->toJSON(sobj); + serializeJson(sdoc, g_content); + server.send(200, _encoding_json, g_content); + } + else { + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Group with the specified id not found.\"}")); + } + }); server.on("/setMyPosition", []() { webServer.sendCORSHeaders(); if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } @@ -1070,6 +1474,116 @@ void Web::begin() { else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"No remote object supplied.\"}")); } }); + server.on("/linkToGroup", []() { + webServer.sendCORSHeaders(); + if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } + HTTPMethod method = server.method(); + if (method == HTTP_PUT || method == HTTP_POST) { + if (server.hasArg("plain")) { + Serial.println("Linking a shade to a group"); + DynamicJsonDocument doc(512); + DeserializationError err = deserializeJson(doc, server.arg("plain")); + if (err) { + switch (err.code()) { + case DeserializationError::InvalidInput: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Invalid JSON payload\"}")); + break; + case DeserializationError::NoMemory: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Out of memory parsing JSON\"}")); + break; + default: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"General JSON Deserialization failed\"}")); + break; + } + } + else { + JsonObject obj = doc.as(); + uint8_t shadeId = obj.containsKey("shadeId") ? obj["shadeId"] : 0; + uint8_t groupId = obj.containsKey("groupId") ? obj["groupId"] : 0; + if(groupId == 0) { + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Group id not provided.\"}")); + return; + } + if(shadeId == 0) { + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Shade id not provided.\"}")); + return; + } + SomfyGroup * group = somfy.getGroupById(groupId); + if(!group) { + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Group id not found.\"}")); + return; + } + SomfyShade * shade = somfy.getShadeById(shadeId); + if(!shade) { + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Shade id not found.\"}")); + return; + } + group->linkShade(shadeId); + DynamicJsonDocument sdoc(2048); + JsonObject sobj = sdoc.to(); + group->toJSON(sobj); + serializeJson(sdoc, g_content); + server.send(200, _encoding_json, g_content); + } + } + else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"No linking object supplied.\"}")); + } + }); + server.on("/unlinkFromGroup", []() { + webServer.sendCORSHeaders(); + if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } + HTTPMethod method = server.method(); + if (method == HTTP_PUT || method == HTTP_POST) { + if (server.hasArg("plain")) { + Serial.println("Unlinking a shade from a group"); + DynamicJsonDocument doc(512); + DeserializationError err = deserializeJson(doc, server.arg("plain")); + if (err) { + switch (err.code()) { + case DeserializationError::InvalidInput: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Invalid JSON payload\"}")); + break; + case DeserializationError::NoMemory: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Out of memory parsing JSON\"}")); + break; + default: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"General JSON Deserialization failed\"}")); + break; + } + } + else { + JsonObject obj = doc.as(); + uint8_t shadeId = obj.containsKey("shadeId") ? obj["shadeId"] : 0; + uint8_t groupId = obj.containsKey("groupId") ? obj["groupId"] : 0; + if(groupId == 0) { + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Group id not provided.\"}")); + return; + } + if(shadeId == 0) { + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Shade id not provided.\"}")); + return; + } + SomfyGroup * group = somfy.getGroupById(groupId); + if(!group) { + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Group id not found.\"}")); + return; + } + SomfyShade * shade = somfy.getShadeById(shadeId); + if(!shade) { + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Shade id not found.\"}")); + return; + } + group->unlinkShade(shadeId); + DynamicJsonDocument sdoc(2048); + JsonObject sobj = sdoc.to(); + group->toJSON(sobj); + serializeJson(sdoc, g_content); + server.send(200, _encoding_json, g_content); + } + } + else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"No unlinking object supplied.\"}")); + } + }); server.on("/deleteShade", []() { webServer.sendCORSHeaders(); if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } @@ -1098,7 +1612,7 @@ void Web::begin() { } else { JsonObject obj = doc.as(); - if (obj.containsKey("shadeId")) shadeId = obj["shadeId"];//obj.getMember("shadeId").as(); + if (obj.containsKey("shadeId")) shadeId = obj["shadeId"]; else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"No shade id was supplied.\"}")); } } @@ -1106,11 +1620,55 @@ void Web::begin() { } SomfyShade* shade = somfy.getShadeById(shadeId); if (!shade) server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Shade with the specified id not found.\"}")); + else if(shade->isInGroup()) { + server.send(400, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"This shade is a member of a group and cannot be deleted.\"}")); + } else { somfy.deleteShade(shadeId); server.send(200, _encoding_json, F("{\"status\":\"SUCCESS\",\"desc\":\"Shade deleted.\"}")); } }); + server.on("/deleteGroup", []() { + webServer.sendCORSHeaders(); + if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } + HTTPMethod method = server.method(); + uint8_t groupId = 255; + if (method == HTTP_GET || method == HTTP_PUT || method == HTTP_POST) { + if (server.hasArg("groupId")) { + groupId = atoi(server.arg("groupId").c_str()); + } + else if (server.hasArg("plain")) { + Serial.println("Deleting a group"); + DynamicJsonDocument doc(256); + DeserializationError err = deserializeJson(doc, server.arg("plain")); + if (err) { + switch (err.code()) { + case DeserializationError::InvalidInput: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Invalid JSON payload\"}")); + break; + case DeserializationError::NoMemory: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Out of memory parsing JSON\"}")); + break; + default: + server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"General JSON Deserialization failed\"}")); + break; + } + } + else { + JsonObject obj = doc.as(); + if (obj.containsKey("groupId")) groupId = obj["groupId"]; + else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"No group id was supplied.\"}")); + } + } + else server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"No group object supplied.\"}")); + } + SomfyGroup * group = somfy.getGroupById(groupId); + if (!group) server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Group with the specified id not found.\"}")); + else { + somfy.deleteGroup(groupId); + server.send(200, _encoding_json, F("{\"status\":\"SUCCESS\",\"desc\":\"Group deleted.\"}")); + } + }); server.on("/updateFirmware", HTTP_POST, []() { webServer.sendCORSHeaders(); if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } @@ -1248,6 +1806,45 @@ void Web::begin() { server.send(201, _encoding_json, "{\"status\":\"ERROR\",\"desc\":\"Invalid HTTP Method: \"}"); } }); + server.on("/saveSecurity", []() { + webServer.sendCORSHeaders(); + if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } + DynamicJsonDocument doc(512); + DeserializationError err = deserializeJson(doc, server.arg("plain")); + if (err) { + Serial.print("Error parsing JSON "); + Serial.println(err.c_str()); + String msg = err.c_str(); + server.send(400, _encoding_html, "Error parsing JSON body
" + msg); + } + else { + JsonObject obj = doc.as(); + HTTPMethod method = server.method(); + if (method == HTTP_POST || method == HTTP_PUT) { + settings.Security.fromJSON(obj); + settings.Security.save(); + DynamicJsonDocument sdoc(512); + JsonObject sobj = sdoc.to(); + char token[65]; + webServer.createAPIToken(server.client().remoteIP(), token); + obj["apiKey"] = token; + serializeJson(sdoc, g_content); + server.send(200, _encoding_json, g_content); + //server.send(200, "application/json", "{\"status\":\"OK\",\"desc\":\"Successfully saved radio\"}"); + } + else { + server.send(201, "application/json", "{\"status\":\"ERROR\",\"desc\":\"Invalid HTTP Method: \"}"); + } + } + }); + server.on("/getSecurity", []() { + webServer.sendCORSHeaders(); + DynamicJsonDocument doc(512); + JsonObject obj = doc.to(); + settings.Security.toJSON(obj); + serializeJson(doc, g_content); + server.send(200, _encoding_json, g_content); + }); server.on("/saveRadio", []() { webServer.sendCORSHeaders(); if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } @@ -1419,6 +2016,31 @@ void Web::begin() { } } }); + server.on("/setIP", []() { + webServer.sendCORSHeaders(); + if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } + Serial.println("Setting IP..."); + DynamicJsonDocument doc(1024); + DeserializationError err = deserializeJson(doc, server.arg("plain")); + if (err) { + Serial.print("Error parsing JSON "); + Serial.println(err.c_str()); + String msg = err.c_str(); + server.send(400, "text/html", "Error parsing JSON body
" + msg); + } + else { + JsonObject obj = doc.as(); + HTTPMethod method = server.method(); + if (method == HTTP_POST || method == HTTP_PUT) { + settings.IP.fromJSON(obj); + settings.IP.save(); + server.send(200, "application/json", "{\"status\":\"OK\",\"desc\":\"Successfully set Network Settings\"}"); + } + else { + server.send(201, _encoding_json, "{\"status\":\"ERROR\",\"desc\":\"Invalid HTTP Method: \"}"); + } + } + }); server.on("/connectwifi", []() { webServer.sendCORSHeaders(); if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; } @@ -1479,7 +2101,7 @@ void Web::begin() { }); server.on("/networksettings", []() { webServer.sendCORSHeaders(); - DynamicJsonDocument doc(1024); + DynamicJsonDocument doc(2048); JsonObject obj = doc.to(); doc["fwVersion"] = settings.fwVersion; settings.toJSON(obj); @@ -1487,6 +2109,8 @@ void Web::begin() { settings.Ethernet.toJSON(eth); JsonObject wifi = obj.createNestedObject("wifi"); settings.WIFI.toJSON(wifi); + JsonObject ip = obj.createNestedObject("ip"); + settings.IP.toJSON(ip); serializeJson(doc, g_content); server.send(200, _encoding_json, g_content); }); diff --git a/Web.h b/Web.h index b47d6bc..fccbbad 100644 --- a/Web.h +++ b/Web.h @@ -1,3 +1,4 @@ +#include #ifndef webserver_h #define webserver_h class Web { @@ -5,8 +6,21 @@ class Web { void sendCORSHeaders(); void sendCacheHeaders(uint32_t seconds=604800); void startup(); + void handleLogin(WebServer &server); + void handleLogout(WebServer &server); + void handleStreamFile(WebServer &server, const char *filename, const char *encoding); + void handleController(WebServer &server); + void handleLoginContext(WebServer &server); + void handleGetShades(WebServer &server); + void handleGetGroups(WebServer &server); void begin(); void loop(); void end(); + // Web Handlers + bool createAPIToken(const IPAddress ipAddress, char *token); + bool createAPIToken(const char *payload, char *token); + bool createAPIPinToken(const IPAddress ipAddress, const char *pin, char *token); + bool createAPIPasswordToken(const IPAddress ipAddress, const char *username, const char *password, char *token); + bool isAuthenticated(WebServer &server, bool cfg = false); }; #endif diff --git a/data/appversion b/data/appversion index 0a182f2..359a5b9 100644 --- a/data/appversion +++ b/data/appversion @@ -1 +1 @@ -1.7.2 \ No newline at end of file +2.0.0 \ No newline at end of file diff --git a/data/configRadio.html b/data/configRadio.html deleted file mode 100644 index 989c363..0000000 --- a/data/configRadio.html +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - Configure CC1101 - - - - - - -

-
- - -
-
-
- - - -
- - - diff --git a/data/index.html b/data/index.html index 7a55ddf..6181b0d 100644 --- a/data/index.html +++ b/data/index.html @@ -3,496 +3,617 @@ - - + + + - + -
-
Radio Not Initialized
-

ESPSomfy RTS

- -
-
-
- +
+
+
+
+
- '; - div.classList.add('waitoverlay'); - el.appendChild(div); - return div; -} -function clearErrors() { - let errors = document.querySelectorAll('div.errorMessage'); - if (errors && errors.length > 0) errors.forEach((el) => { el.remove(); }); -} -function serviceError(el, err) { - let msg = ''; - if (typeof err === 'string' && err.startsWith('{')) { - let e = JSON.parse(err); - if (typeof e !== 'undefined' && typeof e.desc === 'string') msg = e.desc; - else msg = err; - } - else if (typeof err === 'string') { - msg = err; - } - else if (typeof err === 'number') { - switch (err) { - case 404: - msg = `404: Service not found`; - break; - default: - msg = `${err}: Network HTTP Error`; - break; - } - } - else if (typeof err !== 'undefined') { - console.log(err); - if (typeof err.desc === 'string') msg = typeof err.desc !== 'undefined' ? err.desc : err.message; - } - return errorMessage(el, msg); -} -function errorMessage(el, msg) { - let div = document.createElement('div'); - div.innerHTML = '
' + msg + '
'; - div.classList.add('errorMessage'); - el.appendChild(div); - return div; -} -function socketError(el, msg) { - let div = document.createElement('div'); - div.innerHTML = '
Attempts:
Could not connect to server

' + msg + '
'; - div.classList.add('errorMessage'); - div.classList.add('socket-error'); - el.appendChild(div); - return div; -} -function promptMessage(el, msg, onYes) { - let div = document.createElement('div'); - div.innerHTML = '
' + msg + '
'; - div.classList.add('errorMessage'); - el.appendChild(div); - div.querySelector('#btnYes').addEventListener('click', onYes); - return div; -} +var httpStatusText = { + '200': 'OK', + '201': 'Created', + '202': 'Accepted', + '203': 'Non-Authoritative Information', + '204': 'No Content', + '205': 'Reset Content', + '206': 'Partial Content', + '300': 'Multiple Choices', + '301': 'Moved Permanently', + '302': 'Found', + '303': 'See Other', + '304': 'Not Modified', + '305': 'Use Proxy', + '306': 'Unused', + '307': 'Temporary Redirect', + '400': 'Bad Request', + '401': 'Unauthorized', + '402': 'Payment Required', + '403': 'Forbidden', + '404': 'Not Found', + '405': 'Method Not Allowed', + '406': 'Not Acceptable', + '407': 'Proxy Authentication Required', + '408': 'Request Timeout', + '409': 'Conflict', + '410': 'Gone', + '411': 'Length Required', + '412': 'Precondition Required', + '413': 'Request Entry Too Large', + '414': 'Request-URI Too Long', + '415': 'Unsupported Media Type', + '416': 'Requested Range Not Satisfiable', + '417': 'Expectation Failed', + '418': 'I\'m a teapot', + '429': 'Too Many Requests', + '500': 'Internal Server Error', + '501': 'Not Implemented', + '502': 'Bad Gateway', + '503': 'Service Unavailable', + '504': 'Gateway Timeout', + '505': 'HTTP Version Not Supported' +}; function getJSON(url, cb) { let xhr = new XMLHttpRequest(); console.log({ get: url }); - xhr.open('GET', url, true); + xhr.open('GET', baseUrl.length > 0 ? `${baseUrl}${url}` : url, true); + xhr.setRequestHeader('apikey', security.apiKey); xhr.responseType = 'json'; xhr.onload = () => { let status = xhr.status; - cb(status === 200 ? null : status, xhr.response); + if (status !== 200) { + let err = xhr.response || {}; + err.htmlError = status; + err.service = `GET ${url}`; + if (typeof err.desc === 'undefined') err.desc = xhr.statusText || httpStatusText[xhr.status || 500]; + cb(xhr.response, null); + } + else { + cb(null, xhr.response); + } }; xhr.onerror = (evt) => { - cb(xhr.status || 500, xhr.statusText); + let err = { + htmlError: xhr.status || 500, + service: `GET ${url}` + }; + if (typeof err.desc === 'undefined') err.desc = xhr.statusText || httpStatusText[xhr.status || 500]; + cb(err, null); }; xhr.send(); } +function getJSONSync(url, cb) { + let overlay = ui.waitMessage(document.getElementById('divContainer')); + let xhr = new XMLHttpRequest(); + console.log({ get: url }); + xhr.responseType = 'json'; + xhr.onload = () => { + let status = xhr.status; + if (status !== 200) { + let err = xhr.response || {}; + err.htmlError = status; + err.service = `GET ${url}`; + if (typeof err.desc === 'undefined') err.desc = xhr.statusText || httpStatusText[xhr.status || 500]; + cb(xhr.response, null); + } + else { + cb(null, xhr.response); + } + if (typeof overlay !== 'undefined') overlay.remove(); + }; + xhr.onerror = (evt) => { + let err = { + htmlError: xhr.status || 500, + service: `GET ${url}` + }; + if (typeof err.desc === 'undefined') err.desc = xhr.statusText || httpStatusText[xhr.status || 500]; + cb(err, null); + if (typeof overlay !== 'undefined') overlay.remove(); + }; + xhr.onabort = (evt) => { + console.log('Aborted'); + if (typeof overlay !== 'undefined') overlay.remove(); + }; + xhr.open('GET', baseUrl.length > 0 ? `${baseUrl}${url}` : url, true); + xhr.setRequestHeader('apikey', security.apiKey); + xhr.send(); +} function getText(url, cb) { let xhr = new XMLHttpRequest(); console.log({ get: url }); - xhr.open('GET', url, true); + xhr.open('GET', baseUrl.length > 0 ? `${baseUrl}${url}` : url, true); + xhr.setRequestHeader('apikey', security.apiKey); xhr.responseType = 'text'; xhr.onload = () => { let status = xhr.status; - cb(status === 200 ? null : status, xhr.responseText); + if (status !== 200) { + let err = xhr.response || {}; + err.htmlError = status; + err.service = `GET ${url}`; + if (typeof err.desc === 'undefined') err.desc = xhr.statusText || httpStatusText[xhr.status || 500]; + cb(err, null); + } + else + cb(null, xhr.response); }; xhr.onerror = (evt) => { - cb(xhr.status || 500, xhr.statusText); + let err = { + htmlError: xhr.status || 500, + service: `GET ${url}` + }; + if (typeof err.desc === 'undefined') err.desc = xhr.statusText || httpStatusText[xhr.status || 500]; + cb(err, null); }; xhr.send(); } +function postJSONSync(url, data, cb) { + let overlay = ui.waitMessage(document.getElementById('divContainer')); + try { + let xhr = new XMLHttpRequest(); + console.log({ post: url, data: data }); + let fd = new FormData(); + for (let name in data) { + fd.append(name, data[name]); + } + xhr.open('POST', baseUrl.length > 0 ? `${baseUrl}${url}` : url, true); + xhr.responseType = 'json'; + xhr.setRequestHeader('Accept', 'application/json'); + xhr.setRequestHeader('apikey', security.apiKey); + xhr.onload = () => { + let status = xhr.status; + console.log(xhr); + if (status !== 200) { + let err = xhr.response || {}; + err.htmlError = status; + err.service = `POST ${url}`; + err.data = data; + if (typeof err.desc === 'undefined') err.desc = xhr.statusText || httpStatusText[xhr.status || 500]; + cb(err, null); + } + else { + cb(null, xhr.response); + } + overlay.remove(); + }; + xhr.onerror = (evt) => { + console.log(xhr); + let err = { + htmlError: xhr.status || 500, + service: `POST ${url}` + }; + if (typeof err.desc === 'undefined') err.desc = xhr.statusText || httpStatusText[xhr.status || 500]; + cb(err, null); + overlay.remove(); + }; + xhr.send(fd); + } catch (err) { ui.serviceError(document.getElementById('divContainer'), err); } +} function putJSON(url, data, cb) { let xhr = new XMLHttpRequest(); console.log({ put: url, data: data }); - xhr.open('PUT', url, true); + xhr.open('PUT', baseUrl.length > 0 ? `${baseUrl}${url}` : url, true); xhr.responseType = 'json'; xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8'); xhr.setRequestHeader('Accept', 'application/json'); + xhr.setRequestHeader('apikey', security.apiKey); xhr.onload = () => { let status = xhr.status; - cb(status === 200 ? null : status, xhr.response); + if (status !== 200) { + let err = xhr.response || {}; + err.htmlError = status; + err.service = `PUT ${url}`; + err.data = data; + if (typeof err.desc === 'undefined') err.desc = xhr.statusText || httpStatusText[xhr.status || 500]; + cb(err, null); + } + else { + cb(null, xhr.response); + } }; xhr.onerror = (evt) => { - cb(xhr.status || 500, xhr.statusText); + console.log(xhr); + let err = { + htmlError: xhr.status || 500, + service: `PUT ${url}` + }; + if (typeof err.desc === 'undefined') err.desc = xhr.statusText || httpStatusText[xhr.status || 500]; + cb(err, null); }; xhr.send(JSON.stringify(data)); } +function putJSONSync(url, data, cb) { + let overlay = ui.waitMessage(document.getElementById('divContainer')); + try { + let xhr = new XMLHttpRequest(); + console.log({ put: url, data: data }); + //xhr.open('PUT', url, true); + xhr.open('PUT', baseUrl.length > 0 ? `${baseUrl}${url}` : url, true); + xhr.responseType = 'json'; + xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8'); + xhr.setRequestHeader('Accept', 'application/json'); + xhr.setRequestHeader('apikey', security.apiKey); + xhr.onload = () => { + let status = xhr.status; + if (status !== 200) { + let err = xhr.response || {}; + err.htmlError = status; + err.service = `PUT ${url}`; + err.data = data; + if (typeof err.desc === 'undefined') err.desc = xhr.statusText || httpStatusText[xhr.status || 500]; + cb(err, null); + } + else { + cb(null, xhr.response); + } + overlay.remove(); + }; + xhr.onerror = (evt) => { + console.log(xhr); + let err = { + htmlError: xhr.status || 500, + service: `PUT ${url}` + }; + if (typeof err.desc === 'undefined') err.desc = xhr.statusText || httpStatusText[xhr.status || 500]; + cb(err, null); + overlay.remove(); + }; + xhr.send(JSON.stringify(data)); + } catch (err) { ui.serviceError(document.getElementById('divContainer'), err); } +} var socket; var tConnect = null; var sockIsOpen = false; @@ -245,9 +439,10 @@ async function initSockets() { for (let i = 0; i < wms.length; i++) { wms[i].remove(); } - waitMessage(document.getElementById('divContainer')).classList.add('socket-wait'); + ui.waitMessage(document.getElementById('divContainer')).classList.add('socket-wait'); + let host = window.location.protocol === 'file:' ? 'ESPSomfyRTS' : window.location.hostname; try { - socket = new WebSocket(`ws://${window.location.hostname}:8080/`); + socket = new WebSocket(`ws://${host}:8080/`); socket.onmessage = (evt) => { if (evt.data.startsWith('42')) { let ndx = evt.data.indexOf(','); @@ -315,10 +510,14 @@ async function initSockets() { } else { (async () => { - await general.init(); - await somfy.init(); + await general.loadGeneral(); + await wifi.loadNetwork(); + await somfy.loadSomfy(); + + //await general.init(); + //await somfy.init(); await mqtt.init(); - await wifi.init(); + //await wifi.init(); })(); } }; @@ -326,7 +525,7 @@ async function initSockets() { wifi.procWifiStrength({ ssid: '', channel: -1, strength: -100 }); wifi.procEthernet({ connected: '', speed: 0, fullduplex: false }); if (document.getElementsByClassName('socket-wait').length === 0) - waitMessage(document.getElementById('divContainer')).classList.add('socket-wait'); + ui.waitMessage(document.getElementById('divContainer')).classList.add('socket-wait'); if (evt.wasClean) { console.log({ msg: 'close-clean', evt: evt }); connectFailed = 0; @@ -346,7 +545,7 @@ async function initSockets() { console.log(`Initial socket did not connect try again (server was busy and timed out ${connectFailed} times)`); tConnect = setTimeout(async () => { await reopenSocket(); }, timeout); if (connectFailed === 5) { - socketError(document.getElementById('divContainer'), 'Too many clients connected. A maximum of 5 clients may be connected at any one time. Close some connections to the ESP Somfy RTS device to proceed.'); + ui.socketError('Too many clients connected. A maximum of 5 clients may be connected at any one time. Close some connections to the ESP Somfy RTS device to proceed.'); } let spanAttempts = document.getElementById('spanSocketAttempts'); if (spanAttempts) spanAttempts.innerHTML = connectFailed.fmt("#,##0"); @@ -377,22 +576,637 @@ async function reopenSocket() { tConnect = null; await initSockets(); } -class General { - appVersion = 'v1.7.3'; - reloadApp = false; +async function init() { + await security.init(); + general.init(); + wifi.init(); + somfy.init(); + mqtt.init(); + firmware.init(); +} +class UIBinder { + setValue(el, val) { + if (el instanceof HTMLInputElement) { + switch (el.type.toLowerCase()) { + case 'checkbox': + el.checked = makeBool(val); + break; + case 'range': + let dt = el.getAttribute('data-datatype'); + let mult = parseInt(el.getAttribute('data-mult') || 1, 10); + switch (dt) { + // We always range with integers + case 'float': + el.value = Math.round(parseInt(val * mult, 10)); + break; + case 'index': + let ivals = JSON.parse(el.getAttribute('data-values')); + for (let i = 0; i < ivals.length; i++) { + if (ivals[i].toString() === val.toString()) { + el.value = i; + break; + } + } + break; + default: + el.value = parseInt(val, 10) * mult; + break; + } + break; + default: + el.value = val; + break; + } + } + else if (el instanceof HTMLSelectElement) { + let ndx = 0; + for (let i = 0; i < el.options.length; i++) { + let opt = el.options[i]; + if (opt.value === val.toString()) { + ndx = i; + break; + } + } + el.selectedIndex = ndx; + } + else if (el instanceof HTMLElement) el.innerHTML = val; + } + getValue(el, defVal) { + let val = defVal; + if (el instanceof HTMLInputElement) { + switch (el.type.toLowerCase()) { + case 'checkbox': + val = el.checked; + break; + case 'range': + let dt = el.getAttribute('data-datatype'); + let mult = parseInt(el.getAttribute('data-mult') || 1, 10); + switch (dt) { + // We always range with integers + case 'float': + val = parseInt(el.value, 10) / mult; + break; + case 'index': + let ivals = JSON.parse(el.getAttribute('data-values')); + val = ivals[parseInt(el.value, 10)]; + break; + default: + val = parseInt(el.value / mult, 10); + break; + } + break; + default: + val = el.value; + break; + } + } + else if (el instanceof HTMLSelectElement) val = el.value; + else if (el instanceof HTMLElement) val = el.innerHTML; + return val; + } + toElement(el, val) { + let flds = el.querySelectorAll('*[data-bind]'); + flds.forEach((fld) => { + let prop = fld.getAttribute('data-bind'); + let arr = prop.split('.'); + let tval = val; + for (let i = 0; i < arr.length; i++) { + var s = arr[i]; + if (typeof s === 'undefined' || !s) continue; + let ndx = s.indexOf('['); + if (ndx !== -1) { + ndx = parseInt(s.substring(ndx + 1, s.indexOf(']') - 1), 10); + s = s.substring(0, ndx - 1); + } + tval = tval[s]; + if (typeof tval === 'undefined') break; + if (ndx >= 0) tval = tval[ndx]; + } + if (typeof tval !== 'undefined') { + if (typeof fld.val === 'function') this.val(tval); + else { + switch (fld.getAttribute('data-fmttype')) { + case 'time': + { + var dt = new Date(); + dt.setHours(0, 0, 0); + dt.addMinutes(tval); + tval = dt.fmt(fld.getAttribute('data-fmtmask'), fld.getAttribute('data-fmtempty') || ''); + } + break; + case 'date': + case 'datetime': + { + let dt = new Date(tval); + tval = dt.fmt(fld.getAttribute('data-fmtmask'), fld.getAttribute('data-fmtempty') || ''); + } + break; + case 'number': + if (typeof tval !== 'number') tval = parseFloat(tval); + tval = tval.fmt(fld.getAttribute('data-fmtmask'), fld.getAttribute('data-fmtempty') || ''); + break; + case 'duration': + tval = dataBinder.formatDuration(tval, $this.attr('data-fmtmask')); + break; + } + this.setValue(fld, tval); + } + } + }); + } + fromElement(el, obj, arrayRef) { + if (typeof arrayRef === 'undefined' || arrayRef === null) arrayRef = []; + if (typeof obj === 'undefined' || obj === null) obj = {}; + if (typeof el.getAttribute('data-bind') !== 'undefined') this._bindValue(obj, el, this.getValue(el), arrayRef); + let flds = el.querySelectorAll('*[data-bind]'); + flds.forEach((fld) => { + if (!makeBool(fld.getAttribute('data-setonly'))) + this._bindValue(obj, fld, this.getValue(fld), arrayRef); + }); + return obj; + } + parseNumber(val) { + if (val === null) return; + if (typeof val === 'undefined') return val; + if (typeof val === 'number') return val; + if (typeof val.getMonth === 'function') return val.getTime(); + var tval = val.replace(/[^0-9\.\-]+/g, ''); + return tval.indexOf('.') !== -1 ? parseFloat(tval) : parseInt(tval, 10); + }; + _bindValue(obj, el, val, arrayRef) { + var binding = el.getAttribute('data-bind'); + var dataType = el.getAttribute('data-datatype'); + if (binding && binding.length > 0) { + var sRef = ''; + var arr = binding.split('.'); + var t = obj; + for (var i = 0; i < arr.length - 1; i++) { + let s = arr[i]; + if (typeof s === 'undefined' || s.length === 0) continue; + sRef += ('.' + s); + var ndx = s.lastIndexOf('['); + if (ndx !== -1) { + var v = s.substring(0, ndx); + var ndxEnd = s.lastIndexOf(']'); + var ord = parseInt(s.substring(ndx + 1, ndxEnd), 10); + if (isNaN(ord)) ord = 0; + if (typeof arrayRef[sRef] === 'undefined') { + if (typeof t[v] === 'undefined') { + t[v] = new Array(); + t[v].push(new Object()); + t = t[v][0]; + arrayRef[sRef] = ord; + } + else { + k = arrayRef[sRef]; + if (typeof k === 'undefined') { + a = t[v]; + k = a.length; + arrayRef[sRef] = k; + a.push(new Object()); + t = a[k]; + } + else + t = t[v][k]; + } + } + else { + k = arrayRef[sRef]; + if (typeof k === 'undefined') { + a = t[v]; + k = a.length; + arrayRef[sRef] = k; + a.push(new Object()); + t = a[k]; + } + else + t = t[v][k]; + } + } + else if (typeof t[s] === 'undefined') { + t[s] = new Object(); + t = t[s]; + } + else + t = t[s]; + } + if (typeof dataType === 'undefined') dataType = 'string'; + t[arr[arr.length - 1]] = this.parseValue(val, dataType); + } + } + parseValue(val, dataType) { + switch (dataType) { + case 'int': + return Math.floor(this.parseNumber(val)); + case 'uint': + return Math.abs(this.parseNumber(val)); + case 'float': + case 'real': + case 'double': + case 'decimal': + case 'number': + return this.parseNumber(val); + case 'date': + if (typeof val === 'string') return Date.parseISO(val); + else if (typeof val === 'number') return new Date(number); + else if (typeof val.getMonth === 'function') return val; + return undefined; + case 'time': + var dt = new Date(); + if (typeof val === 'number') { + dt.setHours(0, 0, 0); + dt.addMinutes(tval); + return dt; + } + else if (typeof val === 'string' && val.indexOf(':') !== -1) { + var n = val.lastIndexOf(':'); + var min = this.parseNumber(val.substring(n)); + var nsp = val.substring(0, n).lastIndexOf(' ') + 1; + var hrs = this.parseNumber(val.substring(nsp, n)); + dt.setHours(0, 0, 0); + if (hrs <= 12 && val.substring(n).indexOf('p')) hrs += 12; + dt.addMinutes(hrs * 60 + min); + return dt; + } + break; + case 'duration': + if (typeof val === 'number') return val; + return Math.floor(this.parseNumber(val)); + default: + return val; + } + } + formatValue(val, dataType, fmtMask, emptyMask) { + var v = this.parseValue(val, dataType); + if (typeof v === 'undefined') return emptyMask || ''; + switch (dataType) { + case 'int': + case 'uint': + case 'float': + case 'real': + case 'double': + case 'decimal': + case 'number': + return v.fmt(fmtMask, emptyMask || ''); + case 'time': + case 'date': + case 'dateTime': + return v.fmt(fmtMask, emptyMask || ''); + } + return v; + } + waitMessage(el) { + let div = document.createElement('div'); + div.innerHTML = '
'; + div.classList.add('wait-overlay'); + if (typeof el === 'undefined') el = document.getElementById('divContainer'); + el.appendChild(div); + return div; + } + serviceError(el, err) { + if (arguments.length === 1) { + err = el; + el = document.getElementById('divContainer'); + } + let msg = ''; + if (typeof err === 'string' && err.startsWith('{')) { + let e = JSON.parse(err); + if (typeof e !== 'undefined' && typeof e.desc === 'string') msg = e.desc; + else msg = err; + } + else if (typeof err === 'string') msg = err; + else if (typeof err === 'number') { + switch (err) { + case 404: + msg = `404: Service not found`; + break; + default: + msg = `${err}: Service Error`; + break; + } + } + else if (typeof err !== 'undefined') { + if (typeof err.desc === 'string') msg = typeof err.desc !== 'undefined' ? err.desc : err.message; + } + console.log(err); + let div = this.errorMessage(`${err.htmlError || 500}:Service Error`); + let sub = div.querySelector('.sub-message'); + sub.innerHTML = `
${err.service}
${msg}
`; + return div; + } + socketError(el, msg) { + if (arguments.length === 1) { + msg = el; + el = document.getElementById('divContainer'); + } + let div = document.createElement('div'); + div.innerHTML = '
Attempts:
Could not connect to server

' + msg + '
'; + div.classList.add('error-message'); + div.classList.add('socket-error'); + div.classList.add('message-overlay'); + el.appendChild(div); + return div; + } + errorMessage(el, msg) { + if (arguments.length === 1) { + msg = el; + el = document.getElementById('divContainer'); + } + let div = document.createElement('div'); + div.innerHTML = '
' + msg + '
'; + div.classList.add('error-message'); + div.classList.add('message-overlay'); + el.appendChild(div); + return div; + } + promptMessage(el, msg, onYes) { + if (arguments.length === 2) { + onYes = msg; + msg = el; + el = document.getElementById('divContainer'); + } + let div = document.createElement('div'); + div.innerHTML = '
' + msg + '
'; + div.classList.add('prompt-message'); + div.classList.add('message-overlay'); + el.appendChild(div); + div.querySelector('#btnYes').addEventListener('click', onYes); + return div; + } + clearErrors() { + let errors = document.querySelectorAll('div.message-overlay'); + if (errors && errors.length > 0) errors.forEach((el) => { el.remove(); }); + } + selectTab(elTab) { + for (let tab of elTab.parentElement.children) { + if (tab.classList.contains('selected')) tab.classList.remove('selected'); + document.getElementById(tab.getAttribute('data-grpid')).style.display = 'none'; + } + if (!elTab.classList.contains('selected')) elTab.classList.add('selected'); + document.getElementById(elTab.getAttribute('data-grpid')).style.display = ''; + } + wizSetPrevStep(el) { this.wizSetStep(el, Math.max(this.wizCurrentStep(el) - 1, 1)); } + wizSetNextStep(el) { this.wizSetStep(el, this.wizCurrentStep(el) + 1); } + wizSetStep(el, step) { + let curr = this.wizCurrentStep(el); + let max = parseInt(el.getAttribute('data-maxsteps'), 10); + if (!isNaN(max)) { + let next = el.querySelector(`#btnNextStep`); + if (next) next.style.display = max < step ? 'inline-block' : 'none'; + } + let prev = el.querySelector(`#btnPrevStep`); + if (prev) prev.style.display = step <= 1 ? 'none' : 'inline-block'; + if (curr !== step) { + el.setAttribute('data-stepid', step); + let evt = new CustomEvent('stepchanged', { detail: { oldStep: curr, newStep: step }, bubbles: true, cancelable: true, composed: false }); + el.dispatchEvent(evt); + } + } + wizCurrentStep(el) { return parseInt(el.getAttribute('data-stepid') || 1, 10); } + pinKeyPressed(evt) { + let parent = evt.srcElement.parentElement; + let digits = parent.querySelectorAll('.pin-digit'); + switch (evt.key) { + case 'Backspace': + setTimeout(() => { + // Focus to the previous element. + for (let i = 0; i < digits.length; i++) { + if (digits[i] === evt.srcElement && i > 0) { + digits[i - 1].focus(); + break; + } + } + }, 0); + return; + case 'ArrowLeft': + setTimeout(() => { + for (let i = 0; i < digits.length; i++) { + if (digits[i] === evt.srcElement && i > 0) { + digits[i - 1].focus(); + } + } + }); + return; + case 'CapsLock': + case 'Control': + case 'Shift': + case 'Enter': + case 'Tab': + return; + case 'ArrowRight': + if (evt.srcElement.value !== '') { + setTimeout(() => { + for (let i = 0; i < digits.length; i++) { + if (digits[i] === evt.srcElement && i < digits.length - 1) { + digits[i + 1].focus(); + } + } + }); + } + return; + default: + if (evt.srcElement.value !== '') evt.srcElement.value = ''; + setTimeout(() => { + let e = new CustomEvent('digitentered', { detail: {}, bubbles: true, cancelable: true, composed: false }); + evt.srcElement.dispatchEvent(e); + }, 100); + break; + } + setTimeout(() => { + // Focus to the first empty element. + for (let i = 0; i < digits.length; i++) { + if (digits[i].value === '') { + if (digits[i] !== evt.srcElement) digits[i].focus(); + break; + } + } + }, 0); + + } + pinDigitFocus(evt) { + // Find the first empty digit and place the cursor there. + if (evt.srcElement.value !== '') return; + let parent = evt.srcElement.parentElement; + let digits = parent.querySelectorAll('.pin-digit'); + for (let i = 0; i < digits.length; i++) { + if (digits[i].value === '') { + if (digits[i] !== evt.srcElement) digits[i].focus(); + break; + } + } + } + isConfigOpen() { return (window.getComputedStyle(document.getElementById('divConfigPnl')).display !== 'none'); } + setConfigPanel() { + if (this.isConfigOpen()) return; + let divCfg = document.getElementById('divConfigPnl'); + let divHome = document.getElementById('divHomePnl'); + divHome.style.display = 'none'; + divCfg.style.display = ''; + document.getElementById('icoConfig').className = 'icss-home'; + if (sockIsOpen) socket.send('join:0'); + let overlay = ui.waitMessage(document.getElementById('divSecurityOptions')); + overlay.style.borderRadius = '5px'; + getJSON('/getSecurity', (err, security) => { + console.log(security); + general.setSecurityConfig(security); + overlay.remove(); + }); + } + setHomePanel() { + if (!this.isConfigOpen()) return; + let divCfg = document.getElementById('divConfigPnl'); + let divHome = document.getElementById('divHomePnl'); + divHome.style.display = ''; + divCfg.style.display = 'none'; + document.getElementById('icoConfig').className = 'icss-gear'; + if (sockIsOpen) socket.send('leave:0'); + general.setSecurityConfig({ type: 0, username: '', password: '', pin: '', permissions: 0 }); + } + toggleConfig() { + if (this.isConfigOpen()) + this.setHomePanel(); + else { + if (!security.authenticated && security.type !== 0) { + document.getElementById('divContainer').addEventListener('afterlogin', (evt) => { + if (security.authenticated) this.setConfigPanel(); + }, { once: true }); + security.authUser(); + } + else this.setConfigPanel(); + } + somfy.showEditShade(false); + } +} +var ui = new UIBinder(); + +class Security { + type = 0; + authenticated = false; + apiKey = ''; + permissions = 0; async init() { + let fld = document.getElementById('divUnauthenticated').querySelector('.pin-digit[data-bind="security.pin.d0"]'); + document.getElementById('divUnauthenticated').querySelector('.pin-digit[data-bind="login.pin.d3"]').addEventListener('digitentered', (evt) => { + security.login(); + }); + await this.loadContext(); + if (this.type === 0 || (this.permissions & 0x01) === 0x01) { // No login required or only the config is protected. + if (typeof socket === 'undefined' || !socket) (async () => { await initSockets(); })(); + //ui.setMode(mode); + document.getElementById('divUnauthenticated').style.display = 'none'; + document.getElementById('divAuthenticated').style.display = ''; + document.getElementById('divContainer').setAttribute('data-auth', true); + } + } + async loadContext() { + let pnl = document.getElementById('divUnauthenticated'); + pnl.querySelector('#loginButtons').style.display = 'none'; + pnl.querySelector('#divLoginPassword').style.display = 'none'; + pnl.querySelector('#divLoginPin').style.display = 'none'; + await new Promise((resolve, reject) => { + getJSONSync('/loginContext', (err, ctx) => { + pnl.querySelector('#loginButtons').style.display = ''; + resolve(); + if (err) ui.serviceError(err); + else { + this.type = ctx.type; + this.permissions = ctx.permissions; + switch (ctx.type) { + case 1: + pnl.querySelector('#divLoginPin').style.display = ''; + pnl.querySelector('#divLoginPassword').style.display = 'none'; + pnl.querySelector('.pin-digit[data-bind="login.pin.d0"]').focus(); + break; + case 2: + pnl.querySelector('#divLoginPassword').style.display = ''; + pnl.querySelector('#divLoginPin').style.display = 'none'; + pnl.querySelector('#fldLoginUsername').focus(); + break; + } + pnl.querySelector('#fldLoginType').value = ctx.type; + } + }); + }); + } + authUser() { + document.getElementById('divAuthenticated').style.display = 'none'; + document.getElementById('divUnauthenticated').style.display = ''; + this.loadContext(); + document.getElementById('btnCancelLogin').style.display = 'inline-block'; + } + cancelLogin() { + let evt = new CustomEvent('afterlogin', { detail: { authenticated: this.authenticated } }); + document.getElementById('divAuthenticated').style.display = ''; + document.getElementById('divUnauthenticated').style.display = 'none'; + document.getElementById('divContainer').dispatchEvent(evt); + } + login() { + console.log('Logging in...'); + let pnl = document.getElementById('divUnauthenticated'); + let msg = pnl.querySelector('#spanLoginMessage'); + msg.innerHTML = ''; + let sec = ui.fromElement(pnl).login; + let pin = ''; + for (let i = 0; i < 4; i++) { + pin += sec.pin[`d${i}`]; + } + if (pin.length !== 4) return; + sec.pin = pin; + console.log(sec); + putJSONSync('/login', sec, (err, log) => { + if (err) ui.serviceError(err); + else { + console.log(log); + if (log.success) { + if (typeof socket === 'undefined' || !socket) (async () => { await initSockets(); })(); + //ui.setMode(mode); + + document.getElementById('divUnauthenticated').style.display = 'none'; + document.getElementById('divAuthenticated').style.display = ''; + document.getElementById('divContainer').setAttribute('data-auth', true); + this.apiKey = log.apiKey; + this.authenticated = true; + let evt = new CustomEvent('afterlogin', { detail: { authenticated: true } }); + document.getElementById('divContainer').dispatchEvent(evt); + } + else + msg.innerHTML = log.msg; + } + }); + } +} +var security = new Security(); + +class General { + initialized = false; + appVersion = 'v2.0.0'; + reloadApp = false; + init() { + if (this.initialized) return; this.setAppVersion(); this.setTimeZones(); - this.loadGeneral(); - if (sockIsOpen && this.isConfigOpen()) socket.send('join:0'); - }; + if (sockIsOpen && ui.isConfigOpen()) socket.send('join:0'); + ui.toElement(document.getElementById('divSystemSettings'), { general: { hostname: 'ESPSomfyRTS', username: '', password: '', posixZone: 'UTC0', ntpServer: 'pool.ntp.org' } }); + this.initialized = true; + } + getCookie(cname) { + let n = cname + '='; + let cookies = document.cookie.split(';'); + console.log(cookies); + for (let i = 0; i < cookies.length; i++) { + let c = cookies[i]; + while (c.charAt(0) === ' ') c = c.substring(0); + if (c.indexOf(n) === 0) return c.substring(n.length, c.length); + } + return ''; + } reload() { let addMetaTag = (name, content) => { let meta = document.createElement('meta'); meta.httpEquiv = name; meta.content = content; document.getElementsByTagName('head')[0].appendChild(meta); - } + }; addMetaTag('pragma', 'no-cache'); addMetaTag('expires', '0'); addMetaTag('cache-control', 'no-cache'); @@ -501,33 +1315,45 @@ class General { { city: 'Pacific/Norfolk', code: '<+11>-11<+12>,M10.1.0,M4.1.0/3' } ]; loadGeneral() { - let overlay = waitMessage(document.getElementById('fsGeneralSettings')); - getJSON('/modulesettings', (err, settings) => { - overlay.remove(); + let pnl = document.getElementById('divSystemOptions'); + getJSONSync('/modulesettings', (err, settings) => { if (err) { console.log(err); } else { console.log(settings); - let dd = document.getElementById('selTimeZone'); - for (let i = 0; i < dd.options.length; i++) { - if (dd.options[i].value === settings.posixZone) { - dd.selectedIndex = i; - break; - } - } - general.setAppVersion(); document.getElementById('spanFwVersion').innerText = settings.fwVersion; - document.getElementsByName('hostname')[0].value = settings.hostname; - document.getElementsByName('ntptimeserver')[0].value = settings.ntpServer; - document.getElementsByName('ssdpBroadcast')[0].checked = settings.ssdpBroadcast; - document.getElementById('fldSsid').value = settings.ssid; - document.getElementById('fldPassphrase').value = settings.passphrase; + general.setAppVersion(); + ui.toElement(pnl, { general: settings }); } }); - - }; - setAppVersion() { document.getElementById('spanAppVersion').innerText = this.appVersion; }; + } + loadLogin() { + getJSONSync('/loginContext', (err, ctx) => { + if (err) ui.serviceError(err); + else { + console.log(ctx); + let pnl = document.getElementById('divContainer'); + pnl.setAttribute('data-securitytype', ctx.type); + let fld; + switch (ctx.type) { + case 1: + document.getElementById('divPinSecurity').style.display = ''; + fld = document.getElementById('divPinSecurity').querySelector('.pin-digit[data-bind="security.pin.d0"]'); + document.getElementById('divPinSecurity').querySelector('.pin-digit[data-bind="security.pin.d3"]').addEventListener('digitentered', (evt) => { + general.login(); + }); + break; + case 2: + document.getElementById('divPasswordSecurity').style.display = ''; + fld = document.getElementById('fldUsername'); + break; + } + if (fld) fld.focus(); + } + }); + } + setAppVersion() { document.getElementById('spanAppVersion').innerText = this.appVersion; } setTimeZones() { let dd = document.getElementById('selTimeZone'); dd.length = 0; @@ -541,76 +1367,133 @@ class General { } dd.value = 'UTC0'; console.log(`Max TZ:${maxLength}`); - }; + } setGeneral() { let valid = true; - let obj = { - hostname: document.getElementsByName('hostname')[0].value, - posixZone: document.getElementById('selTimeZone').value, - ntpServer: document.getElementsByName('ntptimeserver')[0].value, - ssdpBroadcast: document.getElementsByName('ssdpBroadcast')[0].checked - } - console.log(obj); + let pnl = document.getElementById('divSystemSettings'); + let obj = ui.fromElement(pnl).general; if (typeof obj.hostname === 'undefined' || !obj.hostname || obj.hostname === '') { - errorMessage(document.getElementById('fsGeneralSettings'), 'You must supply a valid host name.'); + ui.errorMessage(pnl, 'You must supply a valid host name.'); valid = false; } if (valid && !/^[a-zA-Z0-9-]+$/.test(obj.hostname)) { - errorMessage(document.getElementById('fsGeneralSettings'), 'The host name must only include numbers, letters, or dash.'); + ui.errorMessage(pnl, 'The host name must only include numbers, letters, or dash.'); valid = false; } if (valid && obj.hostname.length > 32) { - errorMessage(document.getElementById('fsGeneralSettings'), 'The host name can only be up to 32 characters long.'); + ui.errorMessage(pnl, 'The host name can only be up to 32 characters long.'); valid = false; } if (valid) { - if (document.getElementById('btnSaveGeneral').classList.contains('disabled')) return; - document.getElementById('btnSaveGeneral').classList.add('disabled'); - let overlay = waitMessage(document.getElementById('fsGeneralSettings')); - putJSON('/setgeneral', obj, (err, response) => { - overlay.remove(); - document.getElementById('btnSaveGeneral').classList.remove('disabled'); + putJSONSync('/setgeneral', obj, (err, response) => { + if (err) ui.serviceError(err); console.log(response); }); } - }; + } + setSecurityConfig(security) { + // We need to transform the security object so that it can be set to the configuration. + let obj = { + security: { + type: security.type, username: security.username, password: security.password, + permissions: { configOnly: makeBool(security.permissions & 0x01) }, + pin: { + d0: security.pin[0], + d1: security.pin[1], + d2: security.pin[2], + d3: security.pin[3] + } + } + }; + ui.toElement(document.getElementById('divSecurityOptions'), obj); + this.onSecurityTypeChanged(); + } rebootDevice() { - promptMessage(document.getElementById('fsGeneralSettings'), 'Are you sure you want to reboot the device?', () => { - socket.close(3000, 'reboot'); - let overlay = waitMessage(document.getElementById('fsGeneralSettings')); - putJSON('/reboot', {}, (err, response) => { - overlay.remove(); + ui.promptMessage(document.getElementById('divContainer'), 'Are you sure you want to reboot the device?', () => { + if(typeof socket !== 'undefined') socket.close(3000, 'reboot'); + putJSONSync('/reboot', {}, (err, response) => { document.getElementById('btnSaveGeneral').classList.remove('disabled'); console.log(response); }); - clearErrors(); + ui.clearErrors(); }); - }; - isConfigOpen() { - let divCfg = document.getElementById('divConfigPnl'); - return (window.getComputedStyle(divCfg).display !== 'none'); - }; - toggleConfig() { - let divCfg = document.getElementById('divConfigPnl'); - let divHome = document.getElementById('divHomePnl'); - if (window.getComputedStyle(divCfg).display === 'none') { - divHome.style.display = 'none'; - divCfg.style.display = ''; - document.getElementById('icoConfig').className = 'icss-home'; - if (sockIsOpen) socket.send('join:0'); + } + onSecurityTypeChanged() { + let pnl = document.getElementById('divSecurityOptions'); + let sec = ui.fromElement(pnl).security; + switch (sec.type) { + case 0: + pnl.querySelector('#divPermissions').style.display = 'none'; + pnl.querySelector('#divPinSecurity').style.display = 'none'; + pnl.querySelector('#divPasswordSecurity').style.display = 'none'; + break; + case 1: + pnl.querySelector('#divPermissions').style.display = ''; + pnl.querySelector('#divPinSecurity').style.display = ''; + pnl.querySelector('#divPasswordSecurity').style.display = 'none'; + break; + case 2: + pnl.querySelector('#divPermissions').style.display = ''; + pnl.querySelector('#divPinSecurity').style.display = 'none'; + pnl.querySelector('#divPasswordSecurity').style.display = ''; + break; + } - else { - divHome.style.display = ''; - divCfg.style.display = 'none'; - document.getElementById('icoConfig').className = 'icss-gear'; - if (sockIsOpen) socket.send('leave:0'); - } - somfy.closeEditShade(); - somfy.closeConfigTransceiver(); - }; -}; + } + saveSecurity() { + let security = ui.fromElement(document.getElementById('divSecurityOptions')).security; + console.log(security); + let sec = { type: security.type, username: security.username, password: security.password, pin: '', perm: 0 }; + // Pin entry. + for (let i = 0; i < 4; i++) { + sec.pin += security.pin[`d${i}`]; + } + sec.permissions |= security.permissions.configOnly ? 0x01 : 0x00; + let confirm = ''; + console.log(sec); + if (security.type === 1) { // Pin Entry + // Make sure our pin is 4 digits. + if (sec.pin.length !== 4) { + ui.errorMessage('Invalid Pin').querySelector('.sub-message').innerHTML = 'Pins must be exactly 4 alpha-numeric values in length. Please enter a complete pin.'; + return; + } + confirm = '

Please keep your PIN safe and above all remember it. The only way to recover a lost PIN is to completely reload the onboarding firmware which will wipe out your configuration.

Have you stored your PIN in a safe place?

' + } + else if (security.type === 2) { // Password + if (sec.username.length === 0) { + ui.errorMessage('No Username Provided').querySelector('.sub-message').innerHTML = 'You must provide a username for password security.'; + return; + } + if (sec.password.length === 0) { + ui.errorMessage('No Password Provided').querySelector('.sub-message').innerHTML = 'You must provide a password for password security.'; + return; + } + if (security.repeatpassword.length === 0) { + ui.errorMessage('Re-enter Password').querySelector('.sub-message').innerHTML = 'You must re-enter the password in the Re-enter Password field.'; + return; + } + if (sec.password !== security.repeatpassword) { + ui.errorMessage('Passwords do not Match').querySelector('.sub-message').innerHTML = 'Please re-enter the password exactly as you typed it in the Re-enter Password field.'; + return; + } + confirm = '

Please keep your password safe and above all remember it. The only way to recover a password is to completely reload the onboarding firmware which will wipe out your configuration.

Have you stored your username and password in a safe place?

' + } + let prompt = ui.promptMessage('Confirm Security', () => { + putJSONSync('/saveSecurity', sec, (err, objApiKey) => { + prompt.remove(); + if (err) ui.serviceError(err); + else { + console.log(objApiKey); + } + }); + }); + prompt.querySelector('.sub-message').innerHTML = confirm; + + } +} var general = new General(); class Wifi { + initialized = false; ethBoardTypes = [{ val: 0, label: 'Custom Config' }, { val: 1, label: 'WT32-ETH01', clk: 0, ct: 0, addr: 1, pwr: 16, mdc: 23, mdio: 18 }, { val: 2, label: 'Olimex ESP32-POE', clk: 3, ct: 0, addr: 0, pwr: 12, mdc: 23, mdio: 18 }, @@ -623,6 +1506,7 @@ class Wifi { ethPhyTypes = [{ val: 0, label: 'LAN8720' }, { val: 1, label: 'TLK110' }, { val: 2, label: 'RTL8201' }, { val: 3, label: 'DP83848' }, { val: 4, label: 'DM9051' }, { val: 5, label: 'KZ8081' }]; init() { document.getElementById("divNetworkStrength").innerHTML = this.displaySignal(-100); + if (this.initialized) return; let addr = []; this.loadETHDropdown(document.getElementById('selETHClkMode'), this.ethClockModes); this.loadETHDropdown(document.getElementById('selETHPhyType'), this.ethPhyTypes); @@ -632,10 +1516,13 @@ class Wifi { this.loadETHPins(document.getElementById('selETHPWRPin'), 'power'); this.loadETHPins(document.getElementById('selETHMDCPin'), 'mdc', 23); this.loadETHPins(document.getElementById('selETHMDIOPin'), 'mdio', 18); - if (typeof document.querySelector('div.tab-container > span.selected[data-grpid="fsWiFiSettings"]') !== 'undefined') { - this.loadNetwork(); - } - }; + ui.toElement(document.getElementById('divNetAdapter'), { + wifi: {ssid:'', passphrase:''}, + ethernet: { boardType: 1, wirelessFallback: false, dhcp: true, dns1: '', dns2: '', ip: '', gateway: '' } + }); + this.onETHBoardTypeChanged(document.getElementById('selETHBoardType')); + this.initialized = true; + } loadETHPins(sel, type, selected) { let arr = []; switch (type) { @@ -647,14 +1534,14 @@ class Wifi { arr.push({ val: i, label: `GPIO ${i}` }); } this.loadETHDropdown(sel, arr, selected); - }; + } loadETHDropdown(sel, arr, selected) { while (sel.firstChild) sel.removeChild(sel.firstChild); for (let i = 0; i < arr.length; i++) { let elem = arr[i]; sel.options[sel.options.length] = new Option(elem.label, elem.val, elem.val === selected, elem.val === selected); } - }; + } onETHBoardTypeChanged(sel) { let type = this.ethBoardTypes.find(elem => parseInt(sel.value, 10) === elem.val); if (typeof type !== 'undefined') { @@ -667,34 +1554,19 @@ class Wifi { if (typeof type.mdio !== 'undefined') document.getElementById('selETHMDIOPin').value = type.mdio; document.getElementById('divETHSettings').style.display = type.val === 0 ? '' : 'none'; } - }; - onDHCPClicked(cb) { document.getElementById('divStaticIP').style.display = cb.checked ? 'none' : ''; }; + } + onDHCPClicked(cb) { document.getElementById('divStaticIP').style.display = cb.checked ? 'none' : ''; } loadNetwork() { - let overlay = waitMessage(document.getElementById('fsWiFiSettings')); - getJSON('/networksettings', (err, settings) => { - overlay.remove(); + let pnl = document.getElementById('divNetAdapter'); + getJSONSync('/networksettings', (err, settings) => { console.log(settings); if (err) { - serviceError(document.getElementById('fsWiFiSettings'), err); + ui.serviceError(err); } else { - document.getElementById('fldSsid').value = settings.wifi.ssid; - document.getElementById('fldPassphrase').value = settings.wifi.passphrase; - document.getElementById('selETHBoardType').value = settings.ethernet.boardType; - document.getElementById('cbUseDHCP').checked = settings.ethernet.dhcp; document.getElementById('cbHardwired').checked = settings.connType >= 2; document.getElementById('cbFallbackWireless').checked = settings.connType === 3; - document.getElementById('selETHPhyType').value = settings.ethernet.phyType; - document.getElementById('selETHAddress').value = settings.ethernet.phyAddress; - document.getElementById('selETHClkMode').value = settings.ethernet.CLKMode; - document.getElementById('selETHPWRPin').value = settings.ethernet.PWRPin; - document.getElementById('selETHMDCPin').value = settings.ethernet.MDCPin; - document.getElementById('selETHMDIOPin').value = settings.ethernet.MDIOPin; - document.getElementById('fldIPAddress').value = settings.ethernet.ip; - document.getElementById('fldSubnetMask').value = settings.ethernet.subnet; - document.getElementById('fldGateway').value = settings.ethernet.gateway; - document.getElementById('fldDNS1').value = settings.ethernet.dns1; - document.getElementById('fldDNS2').value = settings.ethernet.dns2; + ui.toElement(pnl, settings); if (settings.connType >= 2) { document.getElementById('divWiFiMode').style.display = 'none'; document.getElementById('divEthernetMode').style.display = ''; @@ -705,16 +1577,13 @@ class Wifi { document.getElementById('divEthernetMode').style.display = 'none'; document.getElementById('divFallbackWireless').style.display = 'none'; } - if (settings.ethernet.boardType === 0) { - document.getElementById('divETHSettings').style.display = ''; - } - else { - document.getElementById('divETHSettings').style.display = 'none'; - } + document.getElementById('divETHSettings').style.display = settings.ethernet.boardType === 0 ? '' : 'none'; + document.getElementById('divStaticIP').style.display = settings.ip.dhcp ? 'none' : ''; + ui.toElement(document.getElementById('divDHCP'), settings); } }); - }; + } useEthernetClicked() { let useEthernet = document.getElementById('cbHardwired').checked; document.getElementById('divWiFiMode').style.display = useEthernet ? 'none' : ''; @@ -737,7 +1606,7 @@ class Wifi { this.displayAPs(aps); } }); - }; + } displayAPs(aps) { let div = ''; let nets = []; @@ -764,7 +1633,7 @@ class Wifi { //document.getElementsByName('ssid')[0].value = aps.connected.name; //document.getElementsByName('passphrase')[0].value = aps.connected.passphrase; //this.procWifiStrength(aps.connected); - }; + } selectSSID(el) { let obj = { name: el.querySelector('span.ssid').innerHTML, @@ -774,7 +1643,7 @@ class Wifi { } console.log(obj); document.getElementsByName('ssid')[0].value = obj.name; - }; + } calcWaveStrength(sig) { let wave = 0; if (sig > -90) wave++; @@ -783,46 +1652,70 @@ class Wifi { if (sig > -67) wave++; if (sig > -30) wave++; return wave; - }; + } displaySignal(sig) { return `
`; - }; - saveNetwork() { - - let obj = { - connType: document.getElementById('cbHardwired').checked ? document.getElementById('cbFallbackWireless').checked ? 3 : 2 : 1, - wifi: {}, - ethernet: {} - }; - if (obj.connType >= 2) { - // We are connecting to a LAN but we need the user to be sure about this since - // the information needs to be correct. Incorrect settings can destroy the board. - obj.ethernet = { - boardType: parseInt(document.getElementById('selETHBoardType').value, 10), - phyType: parseInt(document.getElementById('selETHPhyType').value, 10), - phyAddress: parseInt(document.getElementById('selETHAddress').value, 10), - dhcp: document.getElementById('cbUseDHCP').checked, - CLKMode: parseInt(document.getElementById('selETHClkMode').value, 10), - PWRPin: parseInt(document.getElementById('selETHPWRPin').value, 10), - MDCPin: parseInt(document.getElementById('selETHMDCPin').value, 10), - MDIOPin: parseInt(document.getElementById('selETHMDIOPin').value, 10), - ip: document.getElementById('fldIPAddress').value, - subnet: document.getElementById('fldSubnetMask').value, - gateway: document.getElementById('fldGateway').value, - dns1: document.getElementById('fldDNS1').value, - dns2: document.getElementById('fldDNS2').value + } + saveIPSettings() { + let pnl = document.getElementById('divDHCP'); + let obj = ui.fromElement(pnl).ip; + console.log(obj); + if (!obj.dhcp) { + let fnValidateIP = (addr) => { return /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(addr); }; + if (typeof obj.ip !== 'string' || obj.ip.length === 0 || obj.ip === '0.0.0.0') { + ui.errorMessage('You must supply a valid IP address for the Static IP Address'); + return; } - - + else if (!fnValidateIP(obj.ip)) { + ui.errorMessage('Invalid Static IP Address. IP addresses are in the form XXX.XXX.XXX.XXX'); + return; + } + if (typeof obj.subnet !== 'string' || obj.subnet.length === 0 || obj.subnet === '0.0.0.0') { + ui.errorMessage('You must supply a valid IP address for the Subnet Mask'); + return; + } + else if (!fnValidateIP(obj.subnet)) { + ui.errorMessage('Invalid Subnet IP Address. IP addresses are in the form XXX.XXX.XXX.XXX'); + return; + } + if (typeof obj.gateway !== 'string' || obj.gateway.length === 0 || obj.gateway === '0.0.0.0') { + ui.errorMessage('You must supply a valid Gateway IP address'); + return; + } + else if (!fnValidateIP(obj.gateway)) { + ui.errorMessage('Invalid Gateway IP Address. IP addresses are in the form XXX.XXX.XXX.XXX'); + return; + } + if (obj.dns1.length !== 0 && !fnValidateIP(obj.dns1)) { + ui.errorMessage('Invalid Domain Name Server 1 IP Address. IP addresses are in the form XXX.XXX.XXX.XXX'); + return; + } + if (obj.dns2.length !== 0 && !fnValidateIP(obj.dns2)) { + ui.errorMessage('Invalid Domain Name Server 2 IP Address. IP addresses are in the form XXX.XXX.XXX.XXX'); + return; + } + } + putJSONSync('/setIP', obj, (err, response) => { + if (err) { + ui.serviceError(err); + } + console.log(response); + }); + } + saveNetwork() { + let pnl = document.getElementById('divNetAdapter'); + let obj = ui.fromElement(pnl); + obj.connType = obj.ethernet.hardwired ? obj.ethernet.wirelessFallback ? 3 : 2 : 1; + console.log(obj); + if (obj.connType >= 2) { let boardType = this.ethBoardTypes.find(elem => obj.ethernet.boardType === elem.val); let phyType = this.ethPhyTypes.find(elem => obj.ethernet.phyType === elem.val); let clkMode = this.ethClockModes.find(elem => obj.ethernet.CLKMode === elem.val); let div = document.createElement('div'); - let html = `
`; - html += '
BEWARE ... WARNING ... DANGER
'; - html += '
'; + let html = `
`; + html += '
BEWARE ... WARNING ... DANGER
'; html += '

Incorrect Ethernet settings can damage your ESP32. Please verify the settings below and ensure they match the manufacturer spec sheet.

'; - html += '

If you are unsure do not press the Red button and press the Green button. If any of the settings are incorrect please use the Custom Board type and set them to the correct values.'; + html += '

If you are unsure do not press the Red button and press the Green button. If any of the settings are incorrect please use the Custom Board type and set them to the correct values.'; html += '


'; html += `
${boardType.label} [${boardType.val}]
`; html += `
${phyType.label} [${phyType.val}]
`; @@ -834,31 +1727,25 @@ class Wifi { html += '
' html += `
` html += `` - html += `` + html += `` html += `
`; div.innerHTML = html; document.getElementById('divContainer').appendChild(div); div.querySelector('#btnSaveEthernet').addEventListener('click', (el, event) => { console.log(obj); - document.getElementById('frmSetLAN').remove(); this.sendNetworkSettings(obj); + setTimeout(() => { div.remove(); }, 1); }); } else { - obj.wifi = { - ssid: document.getElementsByName('ssid')[0].value, - passphrase: document.getElementsByName('passphrase')[0].value - }; this.sendNetworkSettings(obj); } } sendNetworkSettings(obj) { - if (document.getElementById('btnSaveNetwork').classList.contains('disabled')) return; - document.getElementById('btnSaveNetwork').classList.add('disabled'); - let overlay = waitMessage(document.getElementById('divContainer')); - putJSON('/setNetwork', obj, (err, response) => { - overlay.remove(); - document.getElementById('btnSaveNetwork').classList.remove('disabled'); + putJSONSync('/setNetwork', obj, (err, response) => { + if (err) { + ui.serviceError(err); + } console.log(response); }); } @@ -869,14 +1756,14 @@ class Wifi { ssid: document.getElementsByName('ssid')[0].value, passphrase: document.getElementsByName('passphrase')[0].value } - let overlay = waitMessage(document.getElementById('fsWiFiSettings')); + let overlay = ui.waitMessage(document.getElementById('divNetAdapter')); putJSON('/connectwifi', obj, (err, response) => { overlay.remove(); document.getElementById('btnConnectWiFi').classList.remove('disabled'); console.log(response); }); - }; + } procWifiStrength(strength) { let ssid = strength.ssid || strength.name; document.getElementById('spanNetworkSSID').innerHTML = !ssid || ssid === '' ? '-------------' : ssid; @@ -899,90 +1786,52 @@ class Wifi { }; var wifi = new Wifi(); class Somfy { + initialized = false; frames = []; - async init() { + init() { + if (this.initialized) return; this.loadPins('inout', document.getElementById('selTransSCKPin')); this.loadPins('inout', document.getElementById('selTransCSNPin')); this.loadPins('inout', document.getElementById('selTransMOSIPin')); this.loadPins('input', document.getElementById('selTransMISOPin')); this.loadPins('out', document.getElementById('selTransTXPin')); this.loadPins('input', document.getElementById('selTransRXPin')); - this.loadSomfy(); + //this.loadSomfy(); + ui.toElement(document.getElementById('divTransceiverSettings'), { + transceiver: { config: { proto: 0, SCKPin: 18, CSNPin: 5, MOSIPin: 23, MISOPin: 19, TXPin: 12, RXPin: 13, frequency: 433.42, rxBandwidth: 97.96, type:56, deviation: 11.43, txPower: 10, enabled: false } } + }); + this.initialized = true; } async loadSomfy() { - console.log(self); - let overlay = waitMessage(document.getElementById('fsSomfySettings')); - getJSON('/controller', (err, somfy) => { - overlay.remove(); + getJSONSync('/controller', (err, somfy) => { if (err) { console.log(err); - serviceError(document.getElementById('fsSomfySettings'), err); + ui.serviceError(err); } else { console.log(somfy); - document.getElementById('selTransSCKPin').value = somfy.transceiver.config.SCKPin.toString(); - document.getElementById('selTransCSNPin').value = somfy.transceiver.config.CSNPin.toString(); - document.getElementById('selTransMOSIPin').value = somfy.transceiver.config.MOSIPin.toString(); - document.getElementById('selTransMISOPin').value = somfy.transceiver.config.MISOPin.toString(); - document.getElementById('selTransTXPin').value = somfy.transceiver.config.TXPin.toString(); - document.getElementById('selTransRXPin').value = somfy.transceiver.config.RXPin.toString(); - document.getElementById('selRadioType').value = somfy.transceiver.config.type; - document.getElementById('selRadioProto').value = somfy.transceiver.config.proto; document.getElementById('spanMaxShades').innerText = somfy.maxShades; - document.getElementById('spanFrequency').innerText = (Math.round(somfy.transceiver.config.frequency * 1000) / 1000).fmt('#,##0.000'); - document.getElementById('slidFrequency').value = Math.round(somfy.transceiver.config.frequency * 1000); - document.getElementById('spanRxBandwidth').innerText = (Math.round(somfy.transceiver.config.rxBandwidth * 100) / 100).fmt('#,##0.00'); - document.getElementById('slidRxBandwidth').value = Math.round(somfy.transceiver.config.rxBandwidth * 100); - document.getElementById('spanTxPower').innerText = somfy.transceiver.config.txPower; - document.getElementById('spanDeviation').innerText = (Math.round(somfy.transceiver.config.deviation * 100) / 100).fmt('#,##0.00'); - document.getElementById('slidDeviation').value = Math.round(somfy.transceiver.config.deviation * 100); - document.getElementsByName('enableRadio')[0].checked = somfy.transceiver.config.enabled; + document.getElementById('spanMaxGroups').innerText = somfy.maxGroups; + ui.toElement(document.getElementById('divTransceiverSettings'), somfy); if (somfy.transceiver.config.radioInit) { document.getElementById('divRadioError').style.display = 'none'; } else { document.getElementById('divRadioError').style.display = ''; } - - - let tx = document.getElementById('slidTxPower'); - let lvls = [-30, -20, -15, -10, -6, 0, 5, 7, 10, 11, 12]; - for (let i = lvls.length - 1; i >= 0; i--) { - if (lvls[i] === somfy.transceiver.config.txPower) { - tx.value = i; - } - else if (lvls[i < somfy.transceiver.config.txPower] < somfy.transceiver.txPower) { - tx.value = i + 1; - } - } - // Create the shades list. this.setShadesList(somfy.shades); + this.setGroupsList(somfy.groups); } }); - }; + } saveRadio() { let valid = true; let getIntValue = (fld) => { return parseInt(document.getElementById(fld).value, 10); } - let obj = { - enabled: document.getElementsByName('enableRadio')[0].checked, - type: parseInt(document.getElementById('selRadioType').value, 10), - proto: parseInt(document.getElementById('selRadioProto').value, 10), - SCKPin: getIntValue('selTransSCKPin'), - CSNPin: getIntValue('selTransCSNPin'), - MOSIPin: getIntValue('selTransMOSIPin'), - MISOPin: getIntValue('selTransMISOPin'), - TXPin: getIntValue('selTransTXPin'), - RXPin: getIntValue('selTransRXPin'), - frequency: (Math.round(parseFloat(document.getElementById('spanFrequency').innerText) * 1000)) / 1000, - rxBandwidth: (Math.round(parseFloat(document.getElementById('spanRxBandwidth').innerText) * 100)) / 100, - txPower: parseInt(document.getElementById('spanTxPower').innerText, 10), - deviation: (Math.round(parseFloat(document.getElementById('spanDeviation').innerText) * 100)) / 100 - }; - console.log(obj); + let trans = ui.fromElement(document.getElementById('divTransceiverSettings')).transceiver; // Check to make sure we have a trans type. - if (typeof obj.type === 'undefined' || obj.type === '' || obj.type === 'none') { - errorMessage(document.getElementById('fsSomfySettings'), 'You must select a radio type.'); + if (typeof trans.config.type === 'undefined' || trans.config.type === '' || trans.config.type === 'none') { + ui.errorMessage('You must select a radio type.'); valid = false; } // Check to make sure no pins were duplicated and defined @@ -990,14 +1839,14 @@ class Somfy { let fnValDup = (o, name) => { let val = o[name]; if (typeof val === 'undefined' || isNaN(val)) { - errorMessage(document.getElementById('fsSomfySettings'), 'You must define all the pins for the radio.'); + ui.errorMessage(document.getElementById('fsSomfySettings'), 'You must define all the pins for the radio.'); return false; } for (let s in o) { if (s.endsWith('Pin') && s !== name) { let sval = o[s]; if (typeof sval === 'undefined' || isNaN(sval)) { - errorMessage(document.getElementById('fsSomfySettings'), 'You must define all the pins for the radio.'); + ui.errorMessage(document.getElementById('fsSomfySettings'), 'You must define all the pins for the radio.'); return false; } if (sval === val) { @@ -1005,7 +1854,7 @@ class Somfy { (name === 'RXPin' && s === 'TXPin')) continue; // The RX and TX pins can share the same value. In this instance the radio will only use GDO0. else { - errorMessage(document.getElementById('fsSomfySettings'), `The ${name.replace('Pin', '')} pin is duplicated by the ${s.replace('Pin', '')}. All pin definitions must be unique`); + ui.errorMessage(document.getElementById('fsSomfySettings'), `The ${name.replace('Pin', '')} pin is duplicated by the ${s.replace('Pin', '')}. All pin definitions must be unique`); valid = false; return false; } @@ -1014,19 +1863,16 @@ class Somfy { } return true; }; - if (valid) valid = fnValDup(obj, 'SCKPin'); - if (valid) valid = fnValDup(obj, 'CSNPin'); - if (valid) valid = fnValDup(obj, 'MOSIPin'); - if (valid) valid = fnValDup(obj, 'MISOPin'); - if (valid) valid = fnValDup(obj, 'TXPin'); - if (valid) valid = fnValDup(obj, 'RXPin'); + if (valid) valid = fnValDup(trans.config, 'SCKPin'); + if (valid) valid = fnValDup(trans.config, 'CSNPin'); + if (valid) valid = fnValDup(trans.config, 'MOSIPin'); + if (valid) valid = fnValDup(trans.config, 'MISOPin'); + if (valid) valid = fnValDup(trans.config, 'TXPin'); + if (valid) valid = fnValDup(trans.config, 'RXPin'); if (valid) { - let overlay = waitMessage(document.getElementById('fsSomfySettings')); - putJSON('/saveRadio', { config: obj }, (err, trans) => { - overlay.remove(); - if (err) { - serviceError(document.getElementById('fsSomfySettings'), err); - } + putJSONSync('/saveRadio', trans, (err, trans) => { + if (err) + ui.serviceError(err); else { document.getElementById('btnSaveRadio').classList.remove('disabled'); if (trans.config.radioInit) { @@ -1179,7 +2025,52 @@ class Somfy { } }, true); } - }; + } + setGroupsList(groups) { + let divCfg = ''; + let divCtl = ''; + for (let i = 0; i < groups.length; i++) { + let group = groups[i]; + divCfg += `
`; + divCfg += `
`; + //divCfg += ``; + divCfg += `${group.name}`; + divCfg += `${group.remoteAddress}`; + divCfg += `
`; + divCfg += '
'; + + divCtl += `
`; + divCtl += `
`; + divCtl += `${group.name}`; + divCtl += `
` + for (let j = 0; j < group.linkedShades.length; j++) { + divCtl += ''; + if (j !== 0) divCtl += ', '; + divCtl += group.linkedShades[j].name; + divCtl += ''; + } + divCtl += '
'; + divCtl += `
`; + divCtl += `
`; + divCtl += `
my
`; + divCtl += `
`; + divCtl += '
'; + } + document.getElementById('divGroupList').innerHTML = divCfg; + let groupControls = document.getElementById('divGroupControls'); + groupControls.innerHTML = divCtl; + // Attach the timer for setting the My Position for the Group. + let btns = groupControls.querySelectorAll('div.cmd-button'); + for (let i = 0; i < btns.length; i++) { + btns[i].addEventListener('click', (event) => { + console.log(this); + console.log(event); + let cmd = event.currentTarget.getAttribute('data-cmd'); + let groupId = parseInt(event.currentTarget.getAttribute('data-groupid'), 10); + this.sendGroupCommand(groupId, cmd); + }, true); + } + } closeShadePositioners() { let ctls = document.querySelectorAll('.shade-positioner'); for (let i = 0; i < ctls.length; i++) { @@ -1258,7 +2149,7 @@ class Somfy { } sendShadeMyPosition(shadeId, pos, tilt) { console.log(`Sending My Position for shade id ${shadeId} to ${pos} and ${tilt}`); - let overlay = waitMessage(document.getElementById('divContainer')); + let overlay = ui.waitMessage(document.getElementById('divContainer')); putJSON('/setMyPosition', { shadeId: shadeId, pos: pos, tilt: tilt }, (err, response) => { this.closeShadePositioners(); overlay.remove(); @@ -1276,7 +2167,19 @@ class Somfy { divCfg += '
'; } document.getElementById('divLinkedRemoteList').innerHTML = divCfg; - }; + } + setLinkedShadesList(group) { + let divCfg = ''; + for (let i = 0; i < group.linkedShades.length; i++) { + let shade = group.linkedShades[i]; + divCfg += `
`; + divCfg += `${shade.name}`; + divCfg += `${shade.remoteAddress}`; + divCfg += `
`; + divCfg += '
'; + } + document.getElementById('divLinkedShadeList').innerHTML = divCfg; + } loadPins(type, sel, opt) { while (sel.firstChild) sel.removeChild(sel.firstChild); for (let i = 0; i < 40; i++) { @@ -1303,7 +2206,7 @@ class Somfy { } sel.options[sel.options.length] = new Option(`GPIO-${i > 9 ? i.toString() : '0' + i.toString()}`, i, typeof opt !== 'undefined' && opt === i); } - }; + } procShadeState(state) { console.log(state); let icons = document.querySelectorAll(`.somfy-shade-icon[data-shadeid="${state.shadeId}"]`); @@ -1342,7 +2245,7 @@ class Somfy { span = divs[i].querySelector('#spanMyTiltPos'); if (span) span.innerHTML = typeof state.myTiltPos !== 'undefined' && state.myTiltPos >= 0 ? `${state.myTiltPos}%` : '---'; } - }; + } procRemoteFrame(frame) { console.log(frame); document.getElementById('spanRssi').innerHTML = frame.rssi; @@ -1354,7 +2257,7 @@ class Somfy { remoteAddress: frame.address, rollingCode: frame.rcode }; - let overlay = waitMessage(document.getElementById('divLinking')); + let overlay = ui.waitMessage(document.getElementById('divLinking')); putJSON('/linkRemote', obj, (err, shade) => { console.log(shade); overlay.remove(); @@ -1384,7 +2287,7 @@ class Somfy { row.innerHTML = html; frames.prepend(row); this.frames.push(frame); - }; + } JSONPretty(obj, indent = 2) { if (Array.isArray(obj)) { let output = '['; @@ -1421,14 +2324,6 @@ class Somfy { document.body.removeChild(dummy); } } - openConfigTransceiver() { - document.getElementById('somfyMain').style.display = 'none'; - document.getElementById('somfyTransceiver').style.display = ''; - }; - closeConfigTransceiver() { - document.getElementById('somfyTransceiver').style.display = 'none'; - document.getElementById('somfyMain').style.display = ''; - }; onShadeTypeChanged(el) { let sel = document.getElementById('selShadeType'); let tilt = parseInt(document.getElementById('selTiltType').value, 10); @@ -1467,41 +2362,35 @@ class Somfy { } document.getElementById('fldTiltTime').parentElement.style.display = tilt ? 'inline-block' : 'none'; document.querySelector('#divSomfyButtons i.icss-window-tilt').style.display = tilt ? '' : 'none'; - }; + } onShadeBitLengthChanged(el) { document.getElementById('divStepSettings').style.display = parseInt(el.value, 10) === 80 ? '' : 'none'; } openEditShade(shadeId) { - console.log('Opening Edit Shade'); if (typeof shadeId === 'undefined') { - let overlay = waitMessage(document.getElementById('fsSomfySettings')); - getJSON('/getNextShade', (err, shade) => { - overlay.remove(); + getJSONSync('/getNextShade', (err, shade) => { + document.getElementById('btnPairShade').style.display = 'none'; + document.getElementById('btnUnpairShade').style.display = 'none'; + document.getElementById('btnLinkRemote').style.display = 'none'; + document.getElementById('btnSaveShade').innerText = 'Add Shade'; + document.getElementById('spanShadeId').innerText = '*'; + document.getElementById('divLinkedRemoteList').innerHTML = ''; + document.getElementById('btnSetRollingCode').style.display = 'none'; + document.getElementById('selShadeBitLength').value = 56; + document.getElementById('cbFlipCommands').value = false; + document.getElementById('cbFlipPosition').value = false; + if (err) { - serviceError(document.getElementById('fsSomfySettings'), err); + ui.serviceError(err); } else { console.log(shade); - document.getElementById('btnPairShade').style.display = 'none'; - document.getElementById('btnUnpairShade').style.display = 'none'; - document.getElementById('btnLinkRemote').style.display = 'none'; - document.getElementsByName('shadeUpTime')[0].value = 10000; - document.getElementsByName('shadeDownTime')[0].value = 10000; - document.getElementById('fldTiltTime').value = 7000; - document.getElementById('somfyMain').style.display = 'none'; - document.getElementById('somfyShade').style.display = ''; - document.getElementById('btnSaveShade').innerText = 'Add Shade'; - document.getElementById('spanShadeId').innerText = '*'; - document.getElementsByName('shadeName')[0].value = ''; - document.getElementsByName('shadeAddress')[0].value = shade.remoteAddress; - document.getElementById('divLinkedRemoteList').innerHTML = ''; - document.getElementById('btnSetRollingCode').style.display = 'none'; - document.getElementById('selShadeBitLength').value = shade.bitLength || 56; - document.getElementById('selShadeProto').value = shade.proto || 0; - document.getElementById('slidStepSize').value = shade.stepSize || 100; - document.getElementById('spanStepSize').innerHTML = shade.stepSize.fmt('#,##0'); - document.getElementById('cbFlipCommands').value = shade.flipCommands || false; - document.getElementById('cbFlipPosition').value = shade.flipPosition || false; + shade.name = ''; + shade.downTime = shade.upTime = 10000; + shade.tiltTime = 7000; + shade.flipCommands = shade.flipPosition = false; + ui.toElement(document.getElementById('somfyShade'), shade); + this.showEditShade(true); } }); } @@ -1514,29 +2403,16 @@ class Somfy { document.getElementById('btnSaveShade').innerText = 'Save Shade'; document.getElementById('spanShadeId').innerText = shadeId; - let overlay = waitMessage(document.getElementById('fsSomfySettings')); - getJSON(`/shade?shadeId=${shadeId}`, (err, shade) => { + getJSONSync(`/shade?shadeId=${shadeId}`, (err, shade) => { if (err) { - serviceError(document.getElementById('fsSomfySettings'), err); + ui.serviceError(err); } else { - document.getElementById('somfyMain').style.display = 'none'; - document.getElementById('somfyShade').style.display = ''; + console.log(shade); + ui.toElement(document.getElementById('somfyShade'), shade); + this.showEditShade(true); document.getElementById('btnSaveShade').style.display = 'inline-block'; document.getElementById('btnLinkRemote').style.display = ''; - document.getElementById('selShadeType').value = shade.shadeType; - document.getElementById('selShadeBitLength').value = shade.bitLength; - document.getElementById('selShadeProto').value = shade.proto; - document.getElementsByName('shadeAddress')[0].value = shade.remoteAddress; - document.getElementsByName('shadeName')[0].value = shade.name; - document.getElementsByName('shadeUpTime')[0].value = shade.upTime; - document.getElementsByName('shadeDownTime')[0].value = shade.downTime; - document.getElementById('slidStepSize').value = shade.stepSize; - document.getElementById('spanStepSize').innerHTML = shade.stepSize.fmt('#,##0'); - document.getElementById('fldTiltTime').value = shade.tiltTime; - document.getElementById('selTiltType').value = shade.tiltType; - document.getElementById('cbFlipCommands').checked = shade.flipCommands; - document.getElementById('cbFlipPosition').checked = shade.flipPosition; this.onShadeTypeChanged(document.getElementById('selShadeType')); let ico = document.getElementById('icoShade'); switch (shade.shadeType) { @@ -1570,128 +2446,236 @@ class Somfy { } this.setLinkedRemotesList(shade); } - overlay.remove(); }); } - }; - closeEditShade() { - let el = document.getElementById('somfyShade'); - if (el) el.style.display = 'none'; - document.getElementById('somfyMain').style.display = ''; - //document.getElementById('somfyShade').style.display = 'none'; - el = document.getElementById('divLinking'); + } + openEditGroup(groupId) { + document.getElementById('btnLinkShade').style.display = 'none'; + if (typeof groupId === 'undefined') { + getJSONSync('/getNextGroup', (err, group) => { + document.getElementById('btnSaveGroup').innerText = 'Add Group'; + document.getElementById('spanGroupId').innerText = '*'; + document.getElementById('divLinkedShadeList').innerHTML = ''; + //document.getElementById('btnSetRollingCode').style.display = 'none'; + if (err) { + ui.serviceError(err); + } + else { + console.log(group); + group.name = ''; + ui.toElement(document.getElementById('somfyGroup'), group); + this.showEditGroup(true); + } + }); + } + else { + // Load up an existing group. + document.getElementById('btnSaveGroup').style.display = 'none'; + document.getElementById('btnSaveGroup').innerText = 'Save Group'; + document.getElementById('spanGroupId').innerText = groupId; + getJSONSync(`/group?groupId=${groupId}`, (err, group) => { + if (err) { + ui.serviceError(err); + } + else { + console.log(group); + ui.toElement(document.getElementById('somfyGroup'), group); + this.showEditGroup(true); + document.getElementById('btnSaveGroup').style.display = 'inline-block'; + document.getElementById('btnLinkShade').style.display = ''; + document.getElementById('btnSetRollingCode').style.display = 'inline-block'; + this.setLinkedShadesList(group); + } + }); + } + } + showEditShade(bShow) { + let el = document.getElementById('divLinking'); if (el) el.remove(); el = document.getElementById('divPairing'); if (el) el.remove(); - el = document.getElementById('frmSetRollingCode'); + el = document.getElementById('divRollingCode'); if (el) el.remove(); - - }; + el = document.getElementById('somfyShade'); + if (el) el.style.display = bShow ? '' : 'none'; + el = document.getElementById('divShadeListContainer'); + if (el) el.style.display = bShow ? 'none' : ''; + } + showEditGroup(bShow) { + let el = document.getElementById('divLinking'); + if (el) el.remove(); + el = document.getElementById('divPairing'); + if (el) el.remove(); + el = document.getElementById('divRollingCode'); + if (el) el.remove(); + el = document.getElementById('somfyGroup'); + if (el) el.style.display = bShow ? '' : 'none'; + el = document.getElementById('divGroupListContainer'); + if (el) el.style.display = bShow ? 'none' : ''; + } saveShade() { let shadeId = parseInt(document.getElementById('spanShadeId').innerText, 10); - let obj = { - remoteAddress: parseInt(document.getElementsByName('shadeAddress')[0].value, 10), - name: document.getElementsByName('shadeName')[0].value, - upTime: parseInt(document.getElementsByName('shadeUpTime')[0].value, 10), - downTime: parseInt(document.getElementsByName('shadeDownTime')[0].value, 10), - shadeType: parseInt(document.getElementById('selShadeType').value, 10), - tiltTime: parseInt(document.getElementById('fldTiltTime').value, 10), - bitLength: parseInt(document.getElementById('selShadeBitLength').value, 10) || 56, - proto: parseInt(document.getElementById('selShadeProto').value, 10) || 0, - stepSize: parseInt(document.getElementById('slidStepSize').value, 10) || 100, - flipCommands: document.getElementById('cbFlipCommands').checked, - flipPosition: document.getElementById('cbFlipPosition').checked - }; - if (obj.shadeType === 1) { - obj.tiltType = parseInt(document.getElementById('selTiltType').value, 10); - } - else obj.tiltType = 0; + let obj = ui.fromElement(document.getElementById('somfyShade')); let valid = true; if (valid && (isNaN(obj.remoteAddress) || obj.remoteAddress < 1 || obj.remoteAddress > 16777215)) { - errorMessage(document.getElementById('fsSomfySettings'), 'The remote address must be a number between 1 and 16777215. This number must be unique for all shades.'); + ui.errorMessage(document.getElementById('fsSomfySettings'), 'The remote address must be a number between 1 and 16777215. This number must be unique for all shades.'); valid = false; } if (valid && (typeof obj.name !== 'string' || obj.name === '' || obj.name.length > 20)) { - errorMessage(document.getElementById('fsSomfySettings'), 'You must provide a name for the shade between 1 and 20 characters.'); + ui.errorMessage(document.getElementById('fsSomfySettings'), 'You must provide a name for the shade between 1 and 20 characters.'); valid = false; } if (valid && (isNaN(obj.upTime) || obj.upTime < 1 || obj.upTime > 4294967295)) { - errorMessage(document.getElementById('fsSomfySettings'), 'Up Time must be a value between 0 and 4,294,967,295 milliseconds. This is the travel time to go from full closed to full open.'); + ui.errorMessage(document.getElementById('fsSomfySettings'), 'Up Time must be a value between 0 and 4,294,967,295 milliseconds. This is the travel time to go from full closed to full open.'); valid = false; } if (valid && (isNaN(obj.downTime) || obj.downTime < 1 || obj.downTime > 4294967295)) { - errorMessage(document.getElementById('fsSomfySettings'), 'Down Time must be a value between 0 and 4,294,967,295 milliseconds. This is the travel time to go from full open to full closed.'); + ui.errorMessage(document.getElementById('fsSomfySettings'), 'Down Time must be a value between 0 and 4,294,967,295 milliseconds. This is the travel time to go from full open to full closed.'); valid = false; } if (valid) { - let overlay = waitMessage(document.getElementById('fsSomfySettings')); if (isNaN(shadeId) || shadeId >= 255) { // We are adding. - putJSON('/addShade', obj, (err, shade) => { - console.log(shade); - document.getElementById('spanShadeId').innerText = shade.shadeId; - document.getElementById('btnSaveShade').innerText = 'Save Shade'; - - overlay.remove(); - document.getElementById('btnSaveShade').style.display = 'inline-block'; - document.getElementById('btnLinkRemote').style.display = ''; - if (shade.paired) { - document.getElementById('btnUnpairShade').style.display = 'inline-block'; - } + putJSONSync('/addShade', obj, (err, shade) => { + if (err) ui.serviceError(err); else { - document.getElementById('btnPairShade').style.display = 'inline-block'; + console.log(shade); + document.getElementById('spanShadeId').innerText = shade.shadeId; + document.getElementById('btnSaveShade').innerText = 'Save Shade'; + document.getElementById('btnSaveShade').style.display = 'inline-block'; + document.getElementById('btnLinkRemote').style.display = ''; + document.getElementById(shade.paired ? 'btnUnpairShade' : 'btnPairShade').style.display = 'inline-block'; + document.getElementById('btnSetRollingCode').style.display = 'inline-block'; + this.updateShadeList(); } - document.getElementById('btnSetRollingCode').style.display = 'inline-block'; - }); - } else { obj.shadeId = shadeId; - console.log(obj); - putJSON('/saveShade', obj, (err, shade) => { + putJSONSync('/saveShade', obj, (err, shade) => { + if (err) ui.serviceError(err); + else this.updateShadeList(); console.log(shade); - // We are updating. - overlay.remove(); }); } - this.updateShadeList(); } - }; - updateShadeList() { - let overlayCfg = waitMessage(document.getElementById('divShadeSection')); - let overlayControl = waitMessage(document.getElementById('divShadeControls')); - getJSON('/controller', (err, somfy) => { - overlayCfg.remove(); - overlayControl.remove(); - if (err) { - console.log(err); - serviceError(document.getElementById('fsSomfySettings'), err); - } - else { - console.log(somfy); - // Create the shades list. - this.setShadesList(somfy.shades); - } - }); - }; - deleteShade(shadeId) { + } + saveGroup() { + let groupId = parseInt(document.getElementById('spanGroupId').innerText, 10); + let obj = ui.fromElement(document.getElementById('somfyGroup')); let valid = true; - if (isNaN(shadeId) || shadeId >= 255 || shadeId <= 0) { - errorMessage(document.getElementById('fsSomfySettings'), 'A valid shade id was not supplied.'); + if (valid && (isNaN(obj.remoteAddress) || obj.remoteAddress < 1 || obj.remoteAddress > 16777215)) { + ui.errorMessage('The remote address must be a number between 1 and 16777215. This number must be unique for all shades.'); + valid = false; + } + if (valid && (typeof obj.name !== 'string' || obj.name === '' || obj.name.length > 20)) { + ui.errorMessage('You must provide a name for the shade between 1 and 20 characters.'); valid = false; } if (valid) { - promptMessage(document.getElementById('fsSomfySettings'), 'Are you sure you want to delete this shade?', () => { - clearErrors(); - let overlay = waitMessage(document.getElementById('fsSomfySettings')); - putJSON('/deleteShade', { shadeId: shadeId }, (err, shade) => { - overlay.remove(); - this.updateShadeList(); + if (isNaN(groupId) || groupId >= 255) { + // We are adding. + putJSONSync('/addGroup', obj, (err, group) => { + if (err) ui.serviceError(err); + else { + console.log(group); + document.getElementById('spanGroupId').innerText = group.groupId; + document.getElementById('btnSaveGroup').innerText = 'Save Group'; + document.getElementById('btnSaveGroup').style.display = 'inline-block'; + document.getElementById('btnLinkShade').style.display = ''; + //document.getElementById('btnSetRollingCode').style.display = 'inline-block'; + this.updateGroupList(); + } }); + } + else { + obj.groupId = groupId; + putJSONSync('/saveGroup', obj, (err, shade) => { + if (err) ui.serviceError(err); + else this.updateShadeList(); + console.log(shade); + }); + } + } + } + updateShadeList() { + getJSONSync('/shades', (err, shades) => { + if (err) { + console.log(err); + ui.serviceError(err); + } + else { + console.log(shades); + // Create the shades list. + this.setShadesList(shades); + } + }); + } + updateGroupList() { + getJSONSync('/groups', (err, groups) => { + if (err) { + console.log(err); + ui.serviceError(err); + } + else { + console.log(groups); + // Create the groups list. + this.setGroupsList(groups); + } + }); + } + deleteShade(shadeId) { + let valid = true; + if (isNaN(shadeId) || shadeId >= 255 || shadeId <= 0) { + ui.errorMessage('A valid shade id was not supplied.'); + valid = false; + } + if (valid) { + getJSONSync(`/shade?shadeId=${shadeId}`, (err, shade) => { + if (err) ui.serviceError(err); + else if (shade.inGroup) ui.errorMessage(`You may not delete this shade because it is a member of a group.`); + else { + let prompt = ui.promptMessage(`Are you sure you want to delete this shade?`, () => { + ui.clearErrors(); + putJSONSync('/deleteShade', { shadeId: shadeId }, (err, shade) => { + this.updateShadeList(); + prompt.remove; + }); + }); + prompt.querySelector('.sub-message').innerHTML = `

If this shade was previously paired with a motor, you should first unpair it from the motor and remove it from any groups. Otherwise its address will remain in the motor memory.

Press YES to delete ${shade.name} or NO to cancel this operation.

`; + } }); } - }; + } + deleteGroup(groupId) { + let valid = true; + if (isNaN(groupId) || groupId >= 255 || groupId <= 0) { + ui.errorMessage('A valid shade id was not supplied.'); + valid = false; + } + if (valid) { + getJSONSync(`/group?groupId=${groupId}`, (err, group) => { + if (err) ui.serviceError(err); + else { + if (group.linkedShades.length > 0) { + ui.errorMessage('You may not delete this group until all shades have been removed from it.'); + } + else { + let prompt = ui.promptMessage(`Are you sure you want to delete this group?`, () => { + putJSONSync('/deleteGroup', { groupId: groupId }, (err, g) => { + if (err) ui.serviceError(err); + this.updateGroupList(); + prompt.remove(); + }); + + }); + prompt.querySelector('.sub-message').innerHTML = `

Press YES to delete the ${group.name} group or NO to cancel this operation.

`; + + } + } + }); + } + } sendPairCommand(shadeId) { putJSON('/pairShade', { shadeId: shadeId }, (err, shade) => { if (err) { @@ -1723,7 +2707,7 @@ class Somfy { } }); - }; + } sendUnpairCommand(shadeId) { putJSON('/unpairShade', { shadeId: shadeId }, (err, shade) => { if (err) { @@ -1754,32 +2738,27 @@ class Somfy { document.getElementById('divPairing').remove(); } }); - }; + } setRollingCode(shadeId, rollingCode) { - let dlg = document.getElementById('frmSetRollingCode'); - let overlay = waitMessage(dlg || document.getElementById('fsSomfySettings')); - putJSON('/setRollingCode', { shadeId: shadeId, rollingCode: rollingCode }, (err, shade) => { - overlay.remove(); - if (err) { - serviceError(document.getElementById('fsSomfySettings'), err); - } + putJSONSync('/setRollingCode', { shadeId: shadeId, rollingCode: rollingCode }, (err, shade) => { + if (err) ui.serviceError(document.getElementById('fsSomfySettings'), err); else { + let dlg = document.getElementById('divRollingCode'); if (dlg) dlg.remove(); - } }); } openSetRollingCode(shadeId) { - let overlay = waitMessage(document.getElementById('fsSomfySettings')); + let overlay = ui.waitMessage(document.getElementById('divContainer')); getJSON(`/shade?shadeId=${shadeId}`, (err, shade) => { overlay.remove(); if (err) { - serviceError(document.getElementById('fsSomfySettings'), err); + ui.serviceError(err); } else { console.log(shade); let div = document.createElement('div'); - let html = `
`; + let html = `
`; html += '
BEWARE ... WARNING ... DANGER
'; html += '
'; html += '

If this shade is already paired with a motor then changing the rolling code WILL cause it to stop working. Rolling codes are tied to the remote address and the Somfy motor expects these to be sequential.

'; @@ -1791,7 +2770,7 @@ class Somfy { html += `
` html += `` html += `` - html += `
`; + html += `
`; div.innerHTML = html; document.getElementById('somfyShade').appendChild(div); } @@ -1800,26 +2779,18 @@ class Somfy { setPaired(shadeId, paired) { let obj = { shadeId: shadeId, paired: paired || false }; let div = document.getElementById('divPairing'); - let overlay = typeof div === 'undefined' ? undefined : waitMessage(div); - putJSON('/setPaired', obj, (err, shade) => { + let overlay = typeof div === 'undefined' ? undefined : ui.waitMessage(div); + putJSONSync('/setPaired', obj, (err, shade) => { if (overlay) overlay.remove(); if (err) { console.log(err); - errorMessage(div, err.message); + ui.errorMessage(err.message); } else if (div) { console.log(shade); - document.getElementById('somfyMain').style.display = 'none'; - document.getElementById('somfyShade').style.display = ''; + this.showEditShade(true); document.getElementById('btnSaveShade').style.display = 'inline-block'; document.getElementById('btnLinkRemote').style.display = ''; - document.getElementsByName('shadeAddress')[0].value = shade.remoteAddress; - document.getElementsByName('shadeName')[0].value = shade.name; - document.getElementsByName('shadeUpTime')[0].value = shade.upTime; - document.getElementsByName('shadeDownTime')[0].value = shade.downTime; - let ico = document.getElementById('icoShade'); - ico.style.setProperty('--shade-position', `${shade.flipPosition ? 100 - shade.position : shade.position}%`); - ico.setAttribute('data-shadeid', shade.shadeId); if (shade.paired) { document.getElementById('btnUnpairShade').style.display = 'inline-block'; document.getElementById('btnPairShade').style.display = 'none'; @@ -1854,7 +2825,7 @@ class Somfy { div.innerHTML = html; document.getElementById('somfyShade').appendChild(div); return div; - }; + } unpairShade(shadeId) { let div = document.createElement('div'); let html = `
`; @@ -1876,7 +2847,7 @@ class Somfy { div.innerHTML = html; document.getElementById('somfyShade').appendChild(div); return div; - }; + } sendCommand(shadeId, command, repeat) { console.log(`Sending Shade command ${shadeId}-${command}`); let obj = { shadeId: shadeId }; @@ -1886,7 +2857,16 @@ class Somfy { putJSON('/shadeCommand', obj, (err, shade) => { }); - }; + } + sendGroupCommand(groupId, command, repeat) { + console.log(`Sending Group command ${groupId}-${command}`); + let obj = { groupId: groupId }; + if (isNaN(parseInt(command, 10))) obj.command = command; + if (typeof repeat === 'number') obj.repeat = parseInt(repeat); + putJSON('/groupCommand', obj, (err, group) => { + + }); + } sendTiltCommand(shadeId, command) { console.log(`Sending Tilt command ${shadeId}-${command}`); if (isNaN(parseInt(command, 10))) @@ -1895,7 +2875,7 @@ class Somfy { else putJSON('/tiltCommand', { shadeId: shadeId, target: parseInt(command, 10) }, (err, shade) => { }); - }; + } linkRemote(shadeId) { let div = document.createElement('div'); let html = `
`; @@ -1906,14 +2886,213 @@ class Somfy { div.innerHTML = html; document.getElementById('somfyShade').appendChild(div); return div; - }; + } + linkGroupShade(groupId) { + let div = document.createElement('div'); + let html = `
`; + html += '
ADD SHADE TO GROUP
'; + + html += '
'; + html += '

This wizard will walk you through the steps required to add shades into a group. Follow all instructions at each step until the shade is added to the group.

'; + html += '

During this process the shade should jog exactly two times. The first time indicates that the motor memory has been enabled and the second time adds the group to the motor memory

'; + html += '

Each shade must be paired individually to the group. When you are ready to begin pairing your shade to the group press the NEXT button.


' + + html += '
' + + html += '
'; + html += '

Choose a shade that you would like to include in this group. Once you have chosen the shade to include in the link press the NEXT button.

'; + html += '

Only shades that have not already been included in this group are available the dropdown. Each shade can be included in multiple groups.

'; + html += '
'; + html += `
`; + html += `
`; + html += '
'; + + html += '
'; + html += '

Now that you have chosen a shade to pair. Open the memory for the shade by pressing the OPEN MEMORY button. The shade should jog to indicate the memory has been opened.

'; + html += '

The motor should jog only once. If it jogs more than once then you have again closed the memory on the motor. Once the motor has jogged press the NEXT button to proceed.

'; + html += '
'; + html += '
'; + html += '
'; + html += '
' + html += '
'; + + html += '
'; + html += '

Now that the memory is opened on the motor you need to send the pairing command for the group.

'; + html += '

To do this press the PAIR TO GROUP button below and once the motor jogs the process will be complete.

'; + html += '
'; + html += '
'; + html += '
'; + html += '
' + html += '
'; + + + + html += `
`; + html += `
` + html += '
'; + div.innerHTML = html; + document.getElementById('divContainer').appendChild(div); + ui.wizSetStep(div, 1); + let btnOpenMemory = div.querySelector('#btnOpenMemory'); + btnOpenMemory.addEventListener('click', (evt) => { + let obj = ui.fromElement(div); + console.log(obj); + putJSONSync('/shadeCommand', { shadeId: obj.shadeId, command: 'prog', repeat: 40 }, (err, shade) => { + if (err) ui.serviceError(err); + else { + let prompt = ui.promptMessage('Confirm Motor Response', () => { + ui.wizSetNextStep(document.getElementById('divLinkGroup')); + prompt.remove(); + }); + prompt.querySelector('.sub-message').innerHTML = `

Did the shade jog? If the shade jogged press the YES button if not then press the NO button and try again.

Once the shade has jogged the shade will be removed from the group and this process will be finished.

`; + } + }); + }); + let btnPairToGroup = div.querySelector('#btnPairToGroup'); + btnPairToGroup.addEventListener('click', (evt) => { + let obj = ui.fromElement(div); + putJSONSync('/groupCommand', { groupId: groupId, command: 'prog', repeat: 1 }, (err, shade) => { + if (err) ui.serviceError(err); + else { + let prompt = ui.promptMessage('Confirm Motor Response', () => { + putJSONSync('/linkToGroup', { groupId: groupId, shadeId: obj.shadeId }, (err, group) => { + console.log(group); + somfy.setLinkedShadesList(group); + this.updateGroupList(); + }); + prompt.remove(); + div.remove(); + }); + prompt.querySelector('.sub-message').innerHTML = `

Did the shade jog? If the shade jogged press the YES button and your shade will be linked to the group. If it did not press the NO button and try again.

Once the shade has jogged the shade will be added to the group and this process will be finished.

`; + } + }); + }); + getJSONSync(`/groupOptions?groupId=${groupId}`, (err, options) => { + if (err) { + div.remove(); + ui.serviceError(err); + } + else { + console.log(options); + if (options.availShades.length > 0) { + // Add in all the available shades. + let selAvail = div.querySelector('#selAvailShades'); + let grpName = div.querySelector('#divGroupName'); + if (grpName) grpName.innerHTML = options.name; + for (let i = 0; i < options.availShades.length; i++) { + let shade = options.availShades[i]; + selAvail.options.add(new Option(shade.name, shade.shadeId)); + } + let divWizShadeName = div.querySelector('#divWizShadeName'); + if (divWizShadeName) divWizShadeName.innerHTML = options.availShades[0].name; + } + else { + div.remove(); + ui.errorMessage('There are no available shades to pair to this group.'); + } + } + }); + return div; + } + unlinkGroupShade(groupId, shadeId) { + let div = document.createElement('div'); + let html = `
`; + html += '
REMOVE SHADE FROM GROUP
'; + + html += '
'; + html += '

This wizard will walk you through the steps required to remove a shade from a group. Follow all instructions at each step until the shade is removed from the group.

'; + html += '

During this process the shade should jog exactly two times. The first time indicates that the motor memory has been enabled and the second time removes the group from the motor memory

'; + html += '

Each shade must be removed from the group individually. When you are ready to begin unpairing your shade from the group press the NEXT button to begin.


' + html += '
' + + html += '
'; + html += '

You must first open the memory for the shade by pressing the OPEN MEMORY button. The shade should jog to indicate the memory has been opened.

'; + html += '

The motor should jog only once. If it jogs more than once then you have again closed the memory on the motor. Once the motor has jogged press the NEXT button to proceed.

'; + html += '
'; + html += '
'; + html += '
'; + html += '
' + html += '
'; + + html += '
'; + html += '

Now that the memory is opened on the motor you need to send the un-pairing command for the group.

'; + html += '

To do this press the UNPAIR FROM GROUP button below and once the motor jogs the process will be complete.

'; + html += '
'; + html += '
'; + html += '
'; + html += '
' + html += '
'; + html += `
`; + html += `
` + html += '
'; + div.innerHTML = html; + document.getElementById('divContainer').appendChild(div); + ui.wizSetStep(div, 1); + let btnOpenMemory = div.querySelector('#btnOpenMemory'); + btnOpenMemory.addEventListener('click', (evt) => { + let obj = ui.fromElement(div); + console.log(obj); + putJSONSync('/shadeCommand', { shadeId: shadeId, command: 'prog', repeat: 40 }, (err, shade) => { + if (err) ui.serviceError(err); + else { + let prompt = ui.promptMessage('Confirm Motor Response', () => { + ui.wizSetNextStep(document.getElementById('divUnlinkGroup')); + prompt.remove(); + }); + prompt.querySelector('.sub-message').innerHTML = `

Did the shade jog? If the shade jogged press the YES button if not then press the NO button and try again.

If you are having trouble getting the motor to jog on this step you may try to open the memory using a remote. Most often this is done by selecting the channel, then a long press on the prog button.

If you opened the memory using the alternate method press the NO button to close this message, then press NEXT button to skip the step.

`; + } + }); + }); + let btnUnpairFromGroup = div.querySelector('#btnUnpairFromGroup'); + btnUnpairFromGroup.addEventListener('click', (evt) => { + let obj = ui.fromElement(div); + putJSONSync('/groupCommand', { groupId: groupId, command: 'prog', repeat: 1 }, (err, shade) => { + if (err) ui.serviceError(err); + else { + let prompt = ui.promptMessage('Confirm Motor Response', () => { + putJSONSync('/unlinkFromGroup', { groupId: groupId, shadeId: shadeId }, (err, group) => { + console.log(group); + somfy.setLinkedShadesList(group); + this.updateGroupList(); + }); + prompt.remove(); + div.remove(); + }); + prompt.querySelector('.sub-message').innerHTML = `

Did the shade jog? If the shade jogged press the YES button if not then press the NO button and try again.

Once the shade has jogged the shade will be removed from the group and this process will be finished.

`; + } + }); + }); + getJSONSync(`/group?groupId=${groupId}`, (err, group) => { + if (err) { + div.remove(); + ui.serviceError(err); + } + else { + console.log(group); + console.log(shadeId); + let shade = group.linkedShades.find((x) => { return shadeId === x.shadeId; }) + if (typeof shade !== 'undefined') { + // Add in all the available shades. + let grpName = div.querySelector('#divGroupName'); + if (grpName) grpName.innerHTML = group.name; + let divWizShadeName = div.querySelector('#divWizShadeName'); + if (divWizShadeName) divWizShadeName.innerHTML = shade.name; + } + else { + div.remove(); + ui.errorMessage('The specified shade could not be found in this group.'); + } + } + }); + return div; + } unlinkRemote(shadeId, remoteAddress) { - let prompt = promptMessage(document.getElementById('fsSomfySettings'), 'Are you sure you want to unlink this remote from the shade?', () => { + let prompt = ui.promptMessage(document.getElementById('fsSomfySettings'), 'Are you sure you want to unlink this remote from the shade?', () => { let obj = { shadeId: shadeId, remoteAddress: remoteAddress }; - let overlay = waitMessage(prompt); + let overlay = ui.waitMessage(prompt); putJSON('/unlinkRemote', obj, (err, shade) => { console.log(shade); overlay.remove(); @@ -1922,13 +3101,13 @@ class Somfy { }); }); - }; + } deviationChanged(el) { document.getElementById('spanDeviation').innerText = (el.value / 100).fmt('#,##0.00'); - }; + } rxBandwidthChanged(el) { document.getElementById('spanRxBandwidth').innerText = (el.value / 100).fmt('#,##0.00'); - }; + } frequencyChanged(el) { document.getElementById('spanFrequency').innerText = (el.value / 1000).fmt('#,##0.000'); } @@ -1936,10 +3115,10 @@ class Somfy { console.log(el.value); let lvls = [-30, -20, -15, -10, -6, 0, 5, 7, 10, 11, 12]; document.getElementById('spanTxPower').innerText = lvls[el.value]; - }; + } stepSizeChanged(el) { document.getElementById('spanStepSize').innerText = parseInt(el.value, 10).fmt('#,##0'); - }; + } processShadeTarget(el, shadeId) { let positioner = document.querySelector(`.shade-positioner[data-shadeid="${shadeId}"]`); @@ -1997,65 +3176,46 @@ class Somfy { } } } -}; +} var somfy = new Somfy(); class MQTT { - async init() { this.loadMQTT(); } + initialized = false; + init() { this.initialized = true; } async loadMQTT() { - let overlay = waitMessage(document.getElementById('fsMQTTSettings')); - getJSON('/mqttsettings', (err, settings) => { - overlay.remove(); - if (err) { + getJSONSync('/mqttsettings', (err, settings) => { + if (err) console.log(err); - } else { console.log(settings); - let dd = document.getElementsByName('mqtt-protocol')[0]; - for (let i = 0; i < dd.options.length; i++) { - if (dd.options[i].text === settings.proto) { - dd.selectedIndex = i; - break; - } - } - if (dd.selectedIndex < 0) dd.selectedIndex = 0; - document.getElementsByName('mqtt-host')[0].value = settings.hostname; - document.getElementsByName('mqtt-port')[0].value = settings.port; - document.getElementsByName('mqtt-username')[0].value = settings.username; - document.getElementsByName('mqtt-password')[0].value = settings.password; - document.getElementsByName('mqtt-topic')[0].value = settings.rootTopic; - document.getElementsByName('mqtt-enabled')[0].checked = settings.enabled; + ui.toElement(document.getElementById('divMQTT'), { mqtt: settings }); } }); }; connectMQTT() { - if (document.getElementById('btnConnectMQTT').classList.contains('disabled')) return; - document.getElementById('btnConnectMQTT').classList.add('disabled'); - let obj = { - enabled: document.getElementsByName('mqtt-enabled')[0].checked, - protocol: document.getElementsByName('mqtt-protocol')[0].value, - hostname: document.getElementsByName('mqtt-host')[0].value, - port: parseInt(document.getElementsByName('mqtt-port')[0].value, 10), - username: document.getElementsByName('mqtt-username')[0].value, - password: document.getElementsByName('mqtt-password')[0].value, - rootTopic: document.getElementsByName('mqtt-topic')[0].value + let obj = ui.fromElement(document.getElementById('divMQTT')); + console.log(obj); + if (obj.mqtt.enabled) { + if (typeof obj.mqtt.hostname !== 'string' || obj.mqtt.hostname.length === 0) { + ui.errorMessage('Invalid host name.').querySelector('.sub-message').innerHTML = 'You must supply a host name to connect to MQTT.'; + return; + } + if (isNaN(obj.mqtt.port) || obj.mqtt.port < 0) { + ui.errorMessage('Invalid port number.').querySelector('.sub-message').innerHTML = 'Likely ports are 1183, 8883 for MQTT/S or 80,443 for HTTP/S'; + return; + } } - console.log(obj); - if (isNaN(obj.port) || obj.port < 0) { - errorMessage(document.getElementById('fsMQTTSettings'), 'Invalid port number. Likely ports are 1183, 8883 for MQTT/S or 80,443 for HTTP/S'); - return; - } - let overlay = waitMessage(document.getElementById('fsMQTTSettings')); - putJSON('/connectmqtt', obj, (err, response) => { - overlay.remove(); - document.getElementById('btnConnectMQTT').classList.remove('disabled'); + + putJSONSync('/connectmqtt', obj.mqtt, (err, response) => { + if (err) ui.serviceError(err); console.log(response); }); }; -}; +} var mqtt = new MQTT(); class Firmware { - async init() { } + initialized = false; + init() { this.initialized = true; } isMobile() { let agt = navigator.userAgent.toLowerCase(); return /Android|iPhone|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|Opera Mini/i.test(navigator.userAgent) @@ -2072,13 +3232,14 @@ class Firmware { let div = this.createFileUploader('/restore'); let inst = div.querySelector('div[id=divInstText]'); inst.innerHTML = '
Select a backup file that you would like to restore then press the Upload File button.
'; - document.getElementById('fsUpdates').appendChild(div); + document.getElementById('divContainer').appendChild(div); }; createFileUploader(service) { let div = document.createElement('div'); div.setAttribute('id', 'divUploadFile'); - div.setAttribute('class', 'instructions'); + div.setAttribute('class', 'inst-overlay'); div.style.width = '100%'; + div.style.alignContent = 'center'; let html = `
`; html += `
`; html += ``; @@ -2099,7 +3260,7 @@ class Firmware { let div = this.createFileUploader('/updateFirmware'); let inst = div.querySelector('div[id=divInstText]'); inst.innerHTML = '
Select a binary file [SomfyController.ino.esp32.bin] containing the device firmware then press the Upload File button.
'; - document.getElementById('fsUpdates').appendChild(div); + document.getElementById('divContainer').appendChild(div); }; updateApplication() { let div = this.createFileUploader('/updateApplication'); @@ -2112,7 +3273,7 @@ class Firmware { } else inst.innerHTML += '
A backup file for your configuration will be downloaded to your browser. If the application update process fails please restore this file using the restore button
'; - document.getElementById('fsUpdates').appendChild(div); + document.getElementById('divContainer').appendChild(div); if(this.isMobile()) document.getElementById('btnBackupCfg').style.display = 'inline-block'; }; async uploadFile(service, el) { @@ -2121,8 +3282,12 @@ class Firmware { console.log(filename); switch (service) { case '/updateApplication': - if (filename.indexOf('.littlefs') === -1 || !filename.endsWith('.bin')) { - errorMessage(el, 'This file is not a valid littleFS file system.'); + if (typeof filename !== 'string' || filename.length === 0) { + ui.errorMessage('You must select a littleFS binary file to proceed.'); + return; + } + else if (filename.indexOf('.littlefs') === -1 || !filename.endsWith('.bin')) { + ui.errorMessage('This file is not a valid littleFS binary file.'); return; } if (!this.isMobile()) { @@ -2141,27 +3306,35 @@ class Firmware { } }); } catch (err) { - serviceError(el, err); + ui.serviceError(el, err); reject(err); return; } }).catch((err) => { - serviceError(el, err); + ui.serviceError(el, err); }); } break; case '/updateFirmware': - if (filename.indexOf('.ino.') === -1 || !filename.endsWith('.bin')) { - errorMessage(el, 'This file is not a valid firmware binary file.'); + if (typeof filename !== 'string' || filename.length === 0) { + ui.errorMessage('You must select a valid firmware binary file to proceed.'); + return; + } + else if (filename.indexOf('.ino.') === -1 || !filename.endsWith('.bin')) { + ui.errorMessage(el, 'This file is not a valid firmware binary file.'); return; } break; case '/restore': - if (!filename.endsWith('.backup') || filename.indexOf('ESPSomfyRTS') === -1) { - errorMessage(el, 'This file is not a valid backup file') + if (typeof filename !== 'string' || filename.length === 0) { + ui.errorMessage('You must select a valid backup file to proceed.'); return; } - + else if (!filename.endsWith('.backup') || filename.indexOf('ESPSomfyRTS') === -1) { + ui.errorMessage(el, 'This file is not a valid backup file') + return; + } + break; } let formData = new FormData(); let btnUpload = el.querySelector('button[id="btnUploadFile"]'); @@ -2186,7 +3359,7 @@ class Firmware { }; xhr.onerror = function (err) { console.log(err); - serviceError(el, err); + ui.serviceError(el, err); }; xhr.onload = function () { console.log('File upload load called'); @@ -2205,5 +3378,6 @@ class Firmware { }; xhr.send(formData); }; -}; +} var firmware = new Firmware(); + diff --git a/data/login.html b/data/login.html new file mode 100644 index 0000000..3f9b68c --- /dev/null +++ b/data/login.html @@ -0,0 +1,53 @@ + + + + + + + + + + + + +
+

+ +
+ + + diff --git a/data/main.css b/data/main.css index 0d35e55..7eab8d2 100644 --- a/data/main.css +++ b/data/main.css @@ -4,6 +4,29 @@ * { box-sizing: border-box; } + +body { + color: #434343; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 14px; + background-color: #eeeeee; + margin-top: 77px; + box-sizing: border-box; +} + + +h1 { + text-align: center; + margin-bottom: 10px; + margin-top: 0px; + color: #939393; + font-size: 28px; +} +hr { + width:100%; +} + + input[type="range"] { accent-color: #00bcd4; outline:none; @@ -12,6 +35,9 @@ input[type="range"] { input[type="range"]:active { outline: dotted 1px silver; } + + + .button-outline { -webkit-user-select: none; -moz-user-select: none; @@ -48,34 +74,11 @@ input[type="range"] { transform: rotate(7deg); } } -body { - color: #434343; - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; - font-size: 14px; - background-color: #eeeeee; - margin-top: 77px; - box-sizing: border-box; -} -.container { - margin: 0 auto; - max-width: 450px; - padding: 20px; - box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); - background-color: #ffffff; -} - -h1 { - text-align: center; - margin-bottom: 10px; - margin-top: 0px; - color: #939393; - font-size: 28px; -} form { margin-top:-18px; } -form .field-group { +.field-group { box-sizing: border-box; clear: both; padding: 4px 0; @@ -84,7 +87,7 @@ form .field-group { width: 100%; } -form .field-group1 { +.field-group1 { box-sizing: border-box; clear: both; padding: 4px 0; @@ -93,7 +96,7 @@ form .field-group1 { width: 100%; } - form .field-group1 > span { + .field-group1 > span { color: #757575; display: inline-block; margin: 0 0 5px 0; @@ -104,7 +107,7 @@ form .field-group1 { font-weight: bold; } -form .field-group > label { +.field-group > label { display: block; margin: 0px; padding: 3px 0 0; @@ -116,11 +119,11 @@ form .field-group > label { margin-top:-10px; color:#00bcd4; } -form .field-group1 > div.field-group { +.field-group1 > div.field-group { display:inline-block; width:auto; } -::placeholder { +*::placeholder { opacity: .5; } @@ -156,9 +159,9 @@ select { margin-bottom:14px; } -form .field-group input[type=password], -form .field-group input[type=number], -form .field-group input[type=text] { +.field-group input[type=password], +.field-group input[type=number], +.field-group input[type=text] { display: block; width: 100%; } @@ -214,7 +217,8 @@ a { bottom: 7px; border-bottom: 1px solid #00bcd4; } -div.errorMessage { +div.prompt-message, +div.error-message { position:absolute; left:0px; top:0px; @@ -229,17 +233,31 @@ div.errorMessage { align-items:center; align-content:center; font-size:32px; - border-radius:5px; + border-radius:27px; + transition-duration:3s; } -div.errorMessage > div { +div.prompt-message, +div.error-message > div { padding:10px; } +div.error-message > .sub-message { + font-size:14px; +} div.socket-error { opacity: 1; font-size: 20px; min-height: 277px; z-index: 20001; } +.prompt-message > .button-container { + text-align:center; +} +.prompt-message > .button-container > button { + width: calc(50% - 22px); + margin-left:7px; + margin-right:7px; + display:inline-block; +} div.instructions { position: absolute; left: 0px; @@ -247,11 +265,11 @@ div.instructions { width: 100%; height: 100%; color: white; - display: flex; - flex-wrap: wrap; background: gray; opacity: .9; padding: 10px; + display: flex; + flex-wrap: wrap; align-items: center; align-content: center; font-size: 20px; @@ -279,6 +297,45 @@ div.instructions { border-bottom-width: 3px; font-weight: bold; } +.subtab-container { + margin-top:3px; + margin-left: 3px; + display: flex; + width: calc(100% - 7px); + margin-bottom: -1px; + overflow: visible; + border-bottom: 1px solid #ccc; +} + .subtab-container > span { + display:inline-block; + background:white; + margin-bottom:-1px; + padding-left: 10px; + padding-right:10px; + padding-top:5px; + padding-bottom:5px; + border-top: 1px solid #ccc; + border-left: 1px solid #ccc; + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + border-top-left-radius: 5px; + border-top-right-radius: 5px; + cursor:pointer; + background:ghostwhite; + } + .subtab-container > span.selected { + border-bottom:none; + background:white; + } +.subtab-content { + display: block; + border-left: 1px solid #ccc; + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + border-radius: 5px; + padding: 25px; + position: relative; +} fieldset { display: block; border: 1px solid #ccc; @@ -371,7 +428,7 @@ span.strength { button.disabled { opacity:.3; } -div.waitoverlay { +div.wait-overlay { width: 100%; height: 100%; position: absolute; @@ -383,8 +440,9 @@ div.waitoverlay { background:rgba(227, 226, 230, 0.46); cursor:no-drop; z-index:20000; + border-radius:27px; } -div.waitoverlay > .lds-roller { +div.wait-overlay > .lds-roller { z-index:1000; opacity:1; } @@ -463,10 +521,10 @@ div.waitoverlay > .lds-roller { top: 63px; left: 17px; } + .lds-roller div:nth-child(8) { animation-delay: -0.288s; } - .lds-roller div:nth-child(8):after { top: 56px; left: 12px; @@ -486,17 +544,6 @@ div.waitoverlay > .lds-roller { .radioPins > label { text-align:center; } -.somfyShade { - text-align:center; - padding-bottom:4px; - display:inline-table; - padding-left:4px; - padding-right:4px; -} -.somfyShade > div, -.somfyShade > span { - display:table-cell; -} .button-outline { background-color: #00bcd4; border-radius:50%; @@ -507,6 +554,7 @@ div.waitoverlay > .lds-roller { font-size:1.5em; color:white; } +.group-name, .shade-name { text-align:left; width: 100%; @@ -517,6 +565,7 @@ div.waitoverlay > .lds-roller { overflow:hidden; vertical-align:middle; } +.group-address, .shade-address { width:77px; padding-left:2px; @@ -558,6 +607,7 @@ div.waitoverlay > .lds-roller { display: block; overflow: hidden; } +.somfyGroupCtl, .somfyShadeCtl { height:60px; border-bottom:dotted 2px gainsboro; @@ -576,12 +626,14 @@ div.waitoverlay > .lds-roller { font-size: 48px; position:relative; } +.somfyGroupCtl .group-name, .somfyShadeCtl .shade-name { display:inline-block; padding:7px; vertical-align:middle; width:100%; -} +} + .somfyGroupCtl .groupctl-name, .somfyShadeCtl .shadectl-name { font-size: 1.5em; color: silver; @@ -590,18 +642,23 @@ div.waitoverlay > .lds-roller { white-space: nowrap; width: 100%; } + .somfyGroupCtl label, .somfyShadeCtl label { color:silver; } + .somfyGroupCtl .groupctl-mypos, .somfyShadeCtl .shadectl-mypos { white-space: nowrap; font-size: 12px; } +.somfyGroupCtl .groupctl-buttons, .somfyShadeCtl .shadectl-buttons { margin-top:3px; float:right; white-space:nowrap; } + + .somfyGroupCtl .groupctl-buttons .button-outline, .somfyShadeCtl .shadectl-buttons .button-outline { display: inline-block; padding: 7px; @@ -675,30 +732,24 @@ div.eth-setting-line label { color:mediumspringgreen; } div.frame-log { - position:absolute; - top:0px; - left:0px; - width:100%; - height:100%; - border-radius:27px; - border:solid 2px gray; background:gainsboro; } div.frame-list { position:relative; - width: calc(100% - 14px); - height: calc(100% - 147px); - left: 7px; + width: 100%; + max-height:357px; background:white; + min-height:127px; overflow-y:auto; - border:solid 1px silver; + border-bottom:solid 1px silver; } div.frame-header { + border-top-left-radius:5px; + border-top-right-radius:5px; position: relative; font-size: 12px; background: #00bcd4; - width: calc(100% - 14px); - left: 7px; + width: 100%; color:white; padding-top:4px; } diff --git a/data/widgets.css b/data/widgets.css new file mode 100644 index 0000000..2a6a600 --- /dev/null +++ b/data/widgets.css @@ -0,0 +1,112 @@ +.container { + margin: 0 auto; + max-width: 450px; + padding: 20px; + box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); + background-color: #ffffff; + user-select: none; + position: relative; + border-radius: 27px; +} +.main.container { + min-height:327px; +} + +.header-message { + text-align: center; + background: gainsboro; + color: gray; + margin-bottom: 7px; + text-transform: uppercase; + font-weight: bold; + padding: 4px; + border-radius: 5px; +} +.inst-overlay { + display: flex; + flex-wrap: wrap; + align-items: center; + align-content: flex-start; + position: absolute; + border-radius: 27px; + background: gray; + opacity: .9; + padding: 10px; + font-size: 20px; + height: auto; + min-height: 100%; + top: 0px; + left: 0px; + color: white; +} +.edit-grouplist, +.edit-motorlist { + overflow-y: auto; + max-height: 400px; + padding-top: 2px; + padding-bottom: 2px; + min-height: 147px; +} +.prompt-message .sub-message { + font-size: 17px; + padding-left: 10px; + padding-right: 10px; +} +.prompt-message .prompt-text { + text-align:center; +} +.promp-message > .inner-error, +.error-message > .inner-error { + width:100%; +} + +.wizard[data-stepid="1"] .wizard-step:not([data-stepid="1"]) { display: none; } +.wizard[data-stepid="2"] .wizard-step:not([data-stepid="2"]) { display: none; } +.wizard[data-stepid="3"] .wizard-step:not([data-stepid="3"]) { display: none; } +.wizard[data-stepid="4"] .wizard-step:not([data-stepid="4"]) { display: none; } +.wizard[data-stepid="5"] .wizard-step:not([data-stepid="5"]) { display: none; } +.wizard[data-stepid="6"] .wizard-step:not([data-stepid="6"]) { display: none; } +.wizard[data-stepid="7"] .wizard-step:not([data-stepid="7"]) { display: none; } + +.somfyGroup, +.somfyShade { + text-align: center; + padding-bottom: 4px; + display: inline-table; + padding-left: 4px; + padding-right: 4px; +} + .linked-shade > div, + .linked-shade > span, + .somfyGroup > div, + .somfyGroup > span, + .somfyShade > div, + .somfyShade > span { + display: table-cell; + padding-left:4px; + padding-right:4px; + } +.linked-shade { + width: 100%; + padding-bottom: 4px; + display: inline-table; + padding-left: 4px; + padding-right: 4px; +} + .linked-shade > .linkedshade-name { width: 100%; } +.pin-digit { + margin: 0 0.3rem; + padding: 0.5rem; + border: 1px solid #00bcd4; + border-radius:5px; + width: 50px; + height: 50px; + text-align: center; + font-size: 3rem; +} +.login-content { + display: block; + padding: 25px; + position: relative; +} +