feat(json): add wifi scanning (#2895)

* feat(json): add wifi scanning

Adds wifi scanning to the JSON api at `/json/networks`. The initial
request will trigger a scan, subsequent requests will scan or return the
results depending on the state of the `WiFiScan`.

Add a `Scan` button next to the client ssid input, on click, scan for
networks, and change the input to a select with the found ssids.

Fixes: #1964

* Added option to go back to manual SSID input

Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
This commit is contained in:
Jason Kölker 2022-11-23 19:50:24 -06:00 committed by GitHub
parent 713509527a
commit 29b1f2afae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 353 additions and 181 deletions

View File

@ -6,18 +6,111 @@
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport"/> <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport"/>
<title>WiFi Settings</title> <title>WiFi Settings</title>
<script> <script>
var d=document; var d = document;
var loc = false, locip; var loc = false, locip;
var scanLoops = 0, preScanSSID = "";
function gId(e) { return d.getElementById(e); }
function cE(e) { return d.createElement(e); }
function H(){window.open("https://kno.wled.ge/features/settings/#wifi-settings");} function H(){window.open("https://kno.wled.ge/features/settings/#wifi-settings");}
function B(){window.open("/settings","_self");} function B(){window.open("/settings","_self");}
function N() {
const url = (loc?`http://${locip}`:"") + "/json/net";
const button = gId("scan");
button.disabled = true;
button.innerHTML = "Scanning...";
fetch(url).then((response) => {
return response.json();
}).then((json) => {
// Get the list of networks only, defaulting to an empty array.
return Object.assign(
{},
{"networks": []},
json,
).networks.sort(
// Sort by signal strength, descending.
(a, b) => b.rssi - a.rssi
).reduce(
// Filter out duplicate SSIDs. Since it is sorted by signal
// strength, the strongest signal will be kept in the
// order it orginally appeared in the array.
(unique, other) => {
if(!unique.some(obj => obj.ssid === other.ssid)) {
unique.push(other);
}
return unique;
},
[],
);
}).then((networks) => {
// If there are no networks, fetch it again in a second.
// but only do this a few times.
if (networks.length === 0 && scanLoops < 10) {
scanLoops++;
setTimeout(N, 1000);
return;
}
scanLoops = 0;
let cs = gId("CS");
if (cs) {
let select = cE("select");
select.setAttribute("id", "CS");
select.setAttribute("name", "CS");
select.setAttribute("onchange", "T()");
preScanSSID = cs.value;
for (let i = 0; i < select.children.length; i++) {
select.removeChild(select.children[i]);
}
for (let i = 0; i < networks.length; i++) {
const option = cE("option");
option.setAttribute("value", networks[i].ssid);
option.innerHTML = `${networks[i].ssid} (${networks[i].rssi} dBm)`;
if (networks[i].ssid === cs.value) {
option.setAttribute("selected", "selected");
}
select.appendChild(option);
}
const option = cE("option");
option.setAttribute("value", "!Cs");
option.innerHTML = `Other network...`;
select.appendChild(option);
cs.replaceWith(select);
}
button.disabled = false;
button.innerHTML = "Scan";
});
}
// replace WiFi select with custom SSID input field again
function T() {
let cs = gId("CS");
if (!cs || cs.value != "!Cs") return;
let input = cE("input");
input.type = "text";
input.id = "CS";
input.name ="CS";
input.setAttribute("maxlength",32);
input.value = preScanSSID;
cs.replaceWith(input);
}
// https://www.educative.io/edpresso/how-to-dynamically-load-a-js-file-in-javascript // https://www.educative.io/edpresso/how-to-dynamically-load-a-js-file-in-javascript
function loadJS(FILE_URL, async = true) { function loadJS(FILE_URL, async = true) {
let scE = d.createElement("script"); let scE = cE("script");
scE.setAttribute("src", FILE_URL); scE.setAttribute("src", FILE_URL);
scE.setAttribute("type", "text/javascript"); scE.setAttribute("type", "text/javascript");
scE.setAttribute("async", async); scE.setAttribute("async", async);
d.body.appendChild(scE); d.body.appendChild(scE);
// success event // success event
scE.addEventListener("load", () => { scE.addEventListener("load", () => {
//console.log("File loaded"); //console.log("File loaded");
GetV(); GetV();
@ -31,13 +124,13 @@
function S() { function S() {
if (window.location.protocol == "file:") { if (window.location.protocol == "file:") {
loc = true; loc = true;
locip = localStorage.getItem('locIp'); locip = localStorage.getItem("locIp");
if (!locip) { if (!locip) {
locip = prompt("File Mode. Please enter WLED IP!"); locip = prompt("File Mode. Please enter WLED IP!");
localStorage.setItem('locIp', locip); localStorage.setItem("locIp", locip);
} }
} }
var url = (loc?`http://${locip}`:'') + '/settings/s.js?p=1'; let url = (loc?`http://${locip}`:'') + '/settings/s.js?p=1';
loadJS(url, false); // If we set async false, file is loaded and executed, then next statement is processed loadJS(url, false); // If we set async false, file is loaded and executed, then next statement is processed
} }
</script> </script>
@ -51,7 +144,9 @@
</div> </div>
<h2>WiFi setup</h2> <h2>WiFi setup</h2>
<h3>Connect to existing network</h3> <h3>Connect to existing network</h3>
Network name (SSID, empty to not connect): <br><input type="text" name="CS" maxlength="32"><br> <button type="button" id="scan" onclick="N()">Scan</button><br>
Network name (SSID, empty to not connect):<br>
<input type="text" id="CS" name="CS" maxlength="32"><br>
Network password: <br> <input type="password" name="CP" maxlength="63"><br> Network password: <br> <input type="password" name="CP" maxlength="63"><br>
Static IP (leave at 0.0.0.0 for DHCP):<br> Static IP (leave at 0.0.0.0 for DHCP):<br>
<input name="I0" type="number" class="s" min="0" max="255" required> . <input name="I0" type="number" class="s" min="0" max="255" required> .
@ -68,7 +163,7 @@
<input name="S1" type="number" class="s" min="0" max="255" required> . <input name="S1" type="number" class="s" min="0" max="255" required> .
<input name="S2" type="number" class="s" min="0" max="255" required> . <input name="S2" type="number" class="s" min="0" max="255" required> .
<input name="S3" type="number" class="s" min="0" max="255" required><br> <input name="S3" type="number" class="s" min="0" max="255" required><br>
mDNS address (leave empty for no mDNS):<br/> mDNS address (leave empty for no mDNS):<br>
http:// <input type="text" name="CM" maxlength="32"> .local<br> http:// <input type="text" name="CM" maxlength="32"> .local<br>
Client IP: <span class="sip"> Not connected </span> <br> Client IP: <span class="sip"> Not connected </span> <br>
<h3>Configure Access Point</h3> <h3>Configure Access Point</h3>
@ -105,4 +200,4 @@
<button type="button" onclick="B()">Back</button><button type="submit">Save & Connect</button> <button type="button" onclick="B()">Back</button><button type="submit">Save & Connect</button>
</form> </form>
</body> </body>
</html> </html>

View File

@ -41,6 +41,9 @@ button.sml {
min-width: 40px; min-width: 40px;
margin: 0 0 0 10px; margin: 0 0 0 10px;
} }
#scan {
margin-top: -10px;
}
.toprow { .toprow {
top: 0; top: 0;
position: sticky; position: sticky;

View File

@ -6,68 +6,68 @@
*/ */
// Autogenerated from wled00/data/style.css, do not edit!! // Autogenerated from wled00/data/style.css, do not edit!!
const uint16_t PAGE_settingsCss_length = 836; const uint16_t PAGE_settingsCss_length = 847;
const uint8_t PAGE_settingsCss[] PROGMEM = { const uint8_t PAGE_settingsCss[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xad, 0x55, 0xc1, 0x8e, 0x9b, 0x30, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xad, 0x55, 0xc1, 0x8e, 0x9b, 0x30,
0x14, 0xfc, 0x15, 0xaa, 0x68, 0xa5, 0xad, 0x14, 0x10, 0x10, 0xc8, 0xa6, 0x46, 0x95, 0xaa, 0xde, 0x10, 0xfd, 0x15, 0xaa, 0x68, 0xa5, 0xad, 0x14, 0x10, 0x10, 0xc8, 0xa6, 0x46, 0x95, 0xaa, 0xde,
0x7b, 0xab, 0xaa, 0x4a, 0xd5, 0x1e, 0x0c, 0x7e, 0x04, 0x2b, 0xc6, 0x46, 0xb6, 0xe9, 0x92, 0x22, 0x7b, 0xab, 0xaa, 0x4a, 0xd5, 0x1e, 0x0c, 0x1e, 0x82, 0x15, 0x63, 0x23, 0xdb, 0x74, 0x49, 0x11,
0xfe, 0xbd, 0xb6, 0x81, 0x85, 0x64, 0xd1, 0xf6, 0x52, 0x45, 0x89, 0x92, 0x3c, 0x63, 0xcf, 0xcc, 0xff, 0x5e, 0xdb, 0xc0, 0x42, 0xb2, 0x68, 0x7b, 0xa9, 0xa2, 0x44, 0xc4, 0x63, 0xc6, 0x6f, 0xde,
0x9b, 0x37, 0xae, 0x74, 0xcd, 0x7a, 0x2d, 0xda, 0xa2, 0xf2, 0x71, 0xa1, 0xa9, 0xe0, 0xa8, 0xc6, 0xbc, 0x79, 0xae, 0x74, 0xcd, 0x7a, 0x2d, 0xda, 0xa2, 0xf2, 0x71, 0xa1, 0xa9, 0xe0, 0xa8, 0xc6,
0x9c, 0x36, 0x2d, 0xc3, 0xf6, 0xc7, 0x90, 0x0b, 0x72, 0xed, 0x4b, 0xc1, 0xb5, 0x5f, 0xe2, 0x9a, 0x9c, 0x36, 0x2d, 0xc3, 0xf6, 0xcf, 0x90, 0x0b, 0x72, 0xed, 0x4b, 0xc1, 0xb5, 0x5f, 0xe2, 0x9a,
0xb2, 0x2b, 0xfa, 0x01, 0x92, 0x60, 0x8e, 0xf7, 0x0a, 0x73, 0xe5, 0x2b, 0x90, 0xb4, 0xcc, 0x5c, 0xb2, 0x2b, 0xfa, 0x01, 0x92, 0x60, 0x8e, 0xf7, 0x0a, 0x73, 0xe5, 0x2b, 0x90, 0xb4, 0xcc, 0x5c,
0x59, 0xd1, 0x3f, 0x80, 0x22, 0x09, 0x75, 0xa6, 0xa1, 0xd3, 0x3e, 0x66, 0xf4, 0xcc, 0x51, 0x01, 0x58, 0xd1, 0x3f, 0x80, 0x22, 0x09, 0x75, 0xa6, 0xa1, 0xd3, 0x3e, 0x66, 0xf4, 0xcc, 0x51, 0x01,
0x5c, 0x83, 0xcc, 0x72, 0x5c, 0x5c, 0xce, 0x52, 0xb4, 0x9c, 0xa0, 0x5d, 0x1c, 0xc7, 0x59, 0x21, 0x5c, 0x83, 0xcc, 0x72, 0x5c, 0x5c, 0xce, 0x52, 0xb4, 0x9c, 0xa0, 0x5d, 0x1c, 0xc7, 0x59, 0x21,
0x98, 0x90, 0x68, 0x57, 0x96, 0x65, 0xc6, 0x28, 0x07, 0xbf, 0x02, 0x7a, 0xae, 0x34, 0x8a, 0xc3, 0x98, 0x90, 0x68, 0x57, 0x96, 0x65, 0xc6, 0x28, 0x07, 0xbf, 0x02, 0x7a, 0xae, 0x34, 0x8a, 0xc3,
0xf0, 0x21, 0xab, 0xb1, 0x3c, 0x53, 0x8e, 0xc2, 0xa1, 0x92, 0x7d, 0x2e, 0x24, 0x01, 0xe9, 0x4f, 0xf0, 0x21, 0xab, 0xb1, 0x3c, 0x53, 0x8e, 0xc2, 0xa1, 0x92, 0x7d, 0x2e, 0x24, 0x01, 0xe9, 0x4f,
0xcb, 0x8f, 0xc7, 0xa3, 0xf9, 0x33, 0x50, 0x06, 0xef, 0x0b, 0x25, 0xba, 0x42, 0xf1, 0x31, 0x6c, 0xdb, 0x8f, 0xc7, 0xa3, 0x59, 0x0c, 0x94, 0xc1, 0xfb, 0x42, 0x89, 0xae, 0x50, 0x7c, 0x0c, 0x9b,
0xba, 0x01, 0xef, 0x31, 0xaa, 0xc4, 0x6f, 0x90, 0xfd, 0xb4, 0x2e, 0x3e, 0x95, 0x23, 0x06, 0x02, 0x6e, 0xc0, 0x7b, 0x8c, 0x2a, 0xf1, 0x1b, 0x64, 0x3f, 0xed, 0x8b, 0x4f, 0xe5, 0x88, 0x81, 0x40,
0x85, 0x90, 0x8e, 0x06, 0xe2, 0x82, 0xc3, 0x10, 0xe4, 0x9a, 0xef, 0xf3, 0x56, 0x6b, 0xc1, 0xfb, 0x21, 0xa4, 0x2b, 0x03, 0x71, 0xc1, 0x61, 0x08, 0x72, 0xcd, 0xf7, 0x79, 0xab, 0xb5, 0xe0, 0xfd,
0x35, 0xa4, 0xc3, 0xe1, 0xb0, 0x86, 0xf4, 0x0f, 0xb6, 0x23, 0x28, 0x14, 0x1c, 0x8a, 0xca, 0x53, 0x1a, 0xd2, 0xe1, 0x70, 0x58, 0x43, 0xfa, 0x47, 0xb5, 0x23, 0x28, 0x14, 0x1c, 0x8a, 0xca, 0x53,
0x82, 0x51, 0xe2, 0xb9, 0x0d, 0x26, 0xac, 0x12, 0x13, 0xda, 0x2a, 0x14, 0x27, 0x4d, 0x97, 0x11, 0x82, 0x51, 0xe2, 0xb9, 0x04, 0x13, 0x56, 0x89, 0x09, 0x6d, 0x15, 0x8a, 0x93, 0xa6, 0xcb, 0x08,
0xaa, 0x1a, 0x86, 0xaf, 0x88, 0x72, 0xc7, 0x32, 0x67, 0xa2, 0xb8, 0xac, 0xc4, 0x8a, 0x0d, 0xfa, 0x55, 0x0d, 0xc3, 0x57, 0x44, 0xb9, 0xab, 0x32, 0x67, 0xa2, 0xb8, 0xac, 0xc8, 0x8a, 0x0d, 0xfa,
0x99, 0x6e, 0x14, 0x37, 0x9d, 0x77, 0x1a, 0xdf, 0x59, 0x83, 0x09, 0xa1, 0xfc, 0x8c, 0xec, 0x6f, 0xb9, 0xdc, 0x28, 0x6e, 0x3a, 0xef, 0x34, 0x7e, 0xb3, 0x06, 0x13, 0x42, 0xf9, 0x19, 0xd9, 0xff,
0x5b, 0xc8, 0x6a, 0xca, 0xfd, 0x91, 0x72, 0x62, 0xeb, 0x45, 0x2b, 0x95, 0x01, 0xdb, 0x08, 0xea, 0x36, 0x90, 0xd5, 0x94, 0xfb, 0x63, 0xc9, 0x89, 0x8d, 0x17, 0xad, 0x54, 0x06, 0x6c, 0x23, 0xa8,
0xd4, 0xdd, 0xe4, 0x3a, 0xd2, 0x74, 0x62, 0xad, 0xb6, 0xbb, 0x47, 0x69, 0x11, 0xac, 0xba, 0x97, 0x63, 0x77, 0xb3, 0xd6, 0xb1, 0x4c, 0x47, 0xd6, 0x2a, 0xdd, 0x3d, 0x4a, 0x8b, 0x60, 0xd5, 0xbd,
0xde, 0x9e, 0xb5, 0xc2, 0x17, 0x7a, 0xf6, 0x15, 0x59, 0xbd, 0x03, 0x2d, 0x1a, 0x29, 0x5e, 0x8c, 0xf4, 0xf6, 0xac, 0x15, 0xbe, 0xd0, 0xb3, 0x9f, 0xc8, 0xf2, 0xbd, 0x53, 0x05, 0xe6, 0xfd, 0xb8,
0x67, 0x1a, 0x14, 0x66, 0x8d, 0x50, 0xd4, 0x9d, 0xaa, 0x34, 0x2d, 0x2e, 0xd7, 0x55, 0xab, 0xe7, 0xee, 0x6b, 0xd1, 0x20, 0xdf, 0x2d, 0x07, 0xe6, 0x51, 0x8a, 0x97, 0xde, 0xae, 0x84, 0x59, 0x23,
0xb6, 0xd9, 0x86, 0xff, 0xf1, 0x29, 0x27, 0xd0, 0xa1, 0x68, 0x08, 0x18, 0xbf, 0x4c, 0x7d, 0x35, 0x14, 0x75, 0x60, 0x94, 0xa6, 0xc5, 0xe5, 0xba, 0x52, 0xc0, 0xdc, 0x4d, 0xab, 0x83, 0x3f, 0x3e,
0x3d, 0x0e, 0x2a, 0x60, 0xcd, 0xd7, 0x7e, 0xe5, 0x18, 0x06, 0xa5, 0x5e, 0x36, 0xc5, 0xb9, 0x51, 0xe5, 0x04, 0x3a, 0x14, 0x0d, 0x01, 0xe3, 0x97, 0xa9, 0xdd, 0xa6, 0xf5, 0x41, 0x05, 0xac, 0xf9,
0xb8, 0xd5, 0x90, 0x8d, 0x88, 0x5c, 0xbf, 0x83, 0x8a, 0x12, 0xe8, 0x67, 0x6d, 0x1d, 0x59, 0xca, 0xda, 0xaf, 0x84, 0xc4, 0xa0, 0xd4, 0x4b, 0x52, 0x9c, 0x1b, 0xe2, 0x5b, 0x0d, 0xd9, 0x08, 0xd4,
0x9b, 0x56, 0xff, 0x87, 0x96, 0xa6, 0x37, 0x2d, 0x1d, 0xb7, 0x45, 0xe6, 0x24, 0x9c, 0x33, 0x20, 0xc9, 0x20, 0xa8, 0x28, 0x81, 0x7e, 0xa6, 0xdc, 0x71, 0x40, 0x79, 0xd3, 0xea, 0xff, 0xd0, 0xe9,
0xb3, 0xbd, 0x4e, 0xa7, 0xd3, 0x58, 0xf9, 0xa5, 0xaf, 0x0d, 0x7c, 0xe6, 0x6d, 0x9d, 0x83, 0x7c, 0xf4, 0xa6, 0xd3, 0x63, 0x5a, 0x64, 0x4e, 0xc2, 0x39, 0x03, 0x32, 0xab, 0xee, 0x74, 0x3a, 0x8d,
0xde, 0xaf, 0xfe, 0xb2, 0x74, 0x9e, 0xf7, 0x0a, 0x18, 0x14, 0xba, 0x5f, 0xe4, 0xad, 0xc1, 0x88, 0x91, 0x5f, 0xfa, 0xda, 0xc0, 0x67, 0xde, 0xd6, 0x39, 0xc8, 0xe7, 0xfd, 0x6a, 0xc9, 0x96, 0xf3,
0x5e, 0xcf, 0x8a, 0x9a, 0xbe, 0x6e, 0x6c, 0x33, 0x39, 0x3b, 0x81, 0x7a, 0xa3, 0x18, 0x74, 0xdd, 0xbc, 0x57, 0xc0, 0xa0, 0xd0, 0xfd, 0xc2, 0x7a, 0x0d, 0xa6, 0x17, 0xf5, 0x4c, 0xb4, 0x69, 0xf7,
0x6c, 0xfd, 0x28, 0x0c, 0x37, 0x9f, 0x0f, 0x5e, 0x57, 0x9c, 0xd2, 0xed, 0x05, 0x73, 0xfd, 0x98, 0x46, 0x9a, 0x49, 0xf0, 0x09, 0xd4, 0x1b, 0xc1, 0xa0, 0xeb, 0xe6, 0x89, 0x88, 0xc2, 0x70, 0xf3,
0x6c, 0xd7, 0xeb, 0xa9, 0x9e, 0x1e, 0xb7, 0xeb, 0xaa, 0x5f, 0x9c, 0xb8, 0x09, 0xe0, 0x75, 0xc1, 0xfd, 0xe0, 0x75, 0xc7, 0x29, 0xdd, 0xde, 0x30, 0xc7, 0x8f, 0xc9, 0x76, 0xbc, 0x9e, 0xe2, 0xe9,
0x1d, 0xc2, 0xa2, 0x82, 0xe2, 0x92, 0x8b, 0xee, 0xb9, 0xd7, 0xd2, 0x48, 0x5f, 0x0a, 0x59, 0x23, 0x71, 0x3b, 0xae, 0xfa, 0x45, 0xa0, 0x9b, 0x00, 0x5e, 0x37, 0xdc, 0x21, 0x2c, 0x2a, 0x28, 0x2e,
0x55, 0x60, 0x06, 0x8f, 0x51, 0x90, 0x7e, 0x9c, 0x64, 0xf1, 0xa5, 0x4b, 0x02, 0x67, 0x34, 0x4d, 0xb9, 0xe8, 0x9e, 0x7b, 0x2d, 0x0d, 0xf5, 0xa5, 0x90, 0x35, 0x32, 0x0a, 0x63, 0xf0, 0x18, 0x05,
0xbc, 0xcd, 0xc7, 0x6f, 0x56, 0x4a, 0x30, 0x93, 0xaf, 0xd7, 0xe7, 0x94, 0x94, 0xc1, 0xf3, 0x4a, 0xe9, 0xc7, 0x89, 0x16, 0x5f, 0x3a, 0x83, 0x70, 0x42, 0xd3, 0xc4, 0xdb, 0x7c, 0xfd, 0x66, 0xa7,
0xf6, 0xc8, 0x12, 0x99, 0x9a, 0xb1, 0x68, 0x9f, 0xfd, 0x77, 0xb7, 0x68, 0xd9, 0xaf, 0xc3, 0xcc, 0x04, 0x63, 0x08, 0x7a, 0x7d, 0x4e, 0x49, 0x19, 0x3c, 0xaf, 0x68, 0x8f, 0x6c, 0x21, 0x53, 0x33,
0x74, 0xe8, 0xc1, 0x50, 0x78, 0x9d, 0x3e, 0xdb, 0xef, 0x80, 0xa4, 0xb3, 0x38, 0x26, 0x28, 0x3f, 0x16, 0xee, 0xb3, 0xff, 0xae, 0x16, 0x2d, 0xfb, 0xb5, 0xc7, 0x99, 0x0e, 0x3d, 0x98, 0x12, 0x5e,
0xd0, 0xba, 0x11, 0x52, 0x63, 0xae, 0x87, 0xc0, 0xe8, 0xb0, 0x86, 0x1c, 0xa4, 0x36, 0x48, 0x6f, 0x87, 0xd2, 0xf6, 0x3b, 0x20, 0xe9, 0x4c, 0x8e, 0xf1, 0xcf, 0x0f, 0xb4, 0x6e, 0x84, 0xd4, 0x98,
0xe7, 0x7c, 0xd8, 0x7d, 0xff, 0xf6, 0xdd, 0xd3, 0xd6, 0x8b, 0x8b, 0x09, 0x1e, 0x86, 0x5d, 0xad, 0xeb, 0x21, 0x30, 0x3c, 0xac, 0x21, 0x07, 0xa9, 0xf5, 0xd7, 0xdb, 0xf1, 0x1f, 0x76, 0xdf, 0xbf,
0xce, 0xb7, 0xd3, 0xb0, 0xd3, 0x02, 0x2b, 0xdd, 0x8b, 0x06, 0x17, 0x54, 0x5f, 0xcd, 0x8c, 0xbe, 0x7d, 0xf7, 0xb4, 0xd5, 0xe2, 0x22, 0x82, 0x87, 0x61, 0x57, 0xab, 0xf3, 0xed, 0x34, 0xec, 0xb4,
0x9d, 0xc9, 0x24, 0x49, 0xee, 0xa2, 0x20, 0x75, 0xe1, 0x60, 0x32, 0xa3, 0x76, 0xce, 0x78, 0x23, 0xc0, 0x4a, 0xf7, 0xa2, 0xc1, 0x05, 0xd5, 0x57, 0x33, 0xa3, 0x6f, 0x67, 0x32, 0x49, 0x92, 0x3b,
0xc7, 0x88, 0xeb, 0x69, 0x95, 0x4e, 0x56, 0xd7, 0x6c, 0xc2, 0xe6, 0x9b, 0x2e, 0x70, 0xad, 0xdc, 0x87, 0x48, 0x9d, 0x67, 0x18, 0x2b, 0xa9, 0x9d, 0x32, 0xde, 0xd0, 0x31, 0xe2, 0x7a, 0x5a, 0x99,
0xf9, 0xcb, 0xf4, 0x96, 0xb4, 0x03, 0xb2, 0x71, 0x1d, 0xcc, 0x69, 0x90, 0x66, 0x8b, 0x13, 0xdc, 0x96, 0xe5, 0x35, 0x9b, 0xb0, 0xf9, 0xa6, 0x0b, 0x5c, 0x2b, 0x77, 0xfe, 0x32, 0xbd, 0x25, 0xed,
0x37, 0x73, 0xe7, 0xc0, 0xcf, 0x47, 0x3f, 0x0d, 0x1f, 0xac, 0x1f, 0xba, 0x29, 0x87, 0x3e, 0x99, 0x80, 0x6c, 0xdc, 0x12, 0xb3, 0x1b, 0xa4, 0xd9, 0xa2, 0x04, 0xf7, 0x64, 0xae, 0x22, 0xf8, 0xf9,
0x5b, 0xc1, 0xc6, 0x02, 0x4a, 0x2d, 0x5d, 0x47, 0x2e, 0x50, 0x95, 0x49, 0xa0, 0x99, 0x61, 0xb4, 0xe8, 0xa7, 0xe1, 0x83, 0xd5, 0x43, 0x37, 0xd9, 0xd3, 0x27, 0x73, 0x59, 0x58, 0x5b, 0x40, 0xa9,
0x95, 0x3a, 0xc7, 0x24, 0x33, 0xf7, 0x58, 0x3d, 0x46, 0x62, 0x89, 0x09, 0x50, 0xee, 0x05, 0xa9, 0x2d, 0xd7, 0x15, 0x17, 0xa8, 0xca, 0x38, 0xd0, 0x5c, 0x61, 0xb4, 0xe5, 0x3a, 0xc7, 0x24, 0x33,
0xda, 0x2f, 0x5f, 0xbd, 0xd8, 0x7e, 0x38, 0x03, 0xa9, 0x59, 0xb5, 0x00, 0xa4, 0x14, 0xf2, 0xdd, 0xd7, 0x5b, 0x3d, 0x3a, 0x65, 0x89, 0x09, 0x50, 0xee, 0x05, 0xa9, 0xda, 0x2f, 0x8f, 0x5e, 0x6c,
0x9d, 0xf3, 0x38, 0xda, 0xdc, 0x79, 0xf8, 0x62, 0x07, 0x1c, 0x7b, 0xaa, 0x90, 0x00, 0xdc, 0xc3, 0x7f, 0x9c, 0x80, 0xd4, 0xcc, 0x5a, 0x00, 0x52, 0x0a, 0xf9, 0x6e, 0xe6, 0x3c, 0x8e, 0x36, 0x33,
0x9c, 0x78, 0x8f, 0x0b, 0x89, 0xa7, 0xa3, 0xd1, 0xee, 0x63, 0xbf, 0xf2, 0x29, 0xd4, 0x98, 0xb2, 0x0f, 0x5f, 0xec, 0x80, 0x63, 0x4f, 0x15, 0x12, 0x80, 0x7b, 0x98, 0x13, 0xef, 0x71, 0x29, 0xe2,
0x9b, 0xdc, 0x70, 0xce, 0xdd, 0xbf, 0x9f, 0x2d, 0x0d, 0x56, 0xea, 0xc5, 0x74, 0xee, 0x2e, 0x70, 0xe9, 0x68, 0xb8, 0xfb, 0xd8, 0xaf, 0x74, 0x0a, 0x35, 0xa6, 0xec, 0xc6, 0x37, 0x9c, 0x72, 0xf7,
0xd8, 0xdb, 0x00, 0xba, 0x1f, 0x81, 0xf7, 0xf1, 0x25, 0xa7, 0xf0, 0x0e, 0xdf, 0x9b, 0x81, 0x0f, 0xef, 0x7b, 0x4b, 0x83, 0x95, 0x7a, 0x31, 0x9d, 0xbb, 0x33, 0x1c, 0xf6, 0xd6, 0x80, 0xee, 0x47,
0xff, 0x31, 0xf0, 0x87, 0xbb, 0x48, 0x1b, 0x07, 0x71, 0xba, 0xaa, 0xed, 0x85, 0x38, 0xec, 0xcc, 0xe0, 0x7d, 0x7c, 0xc9, 0x29, 0xbc, 0xc3, 0xf7, 0x66, 0xe0, 0xc3, 0x7f, 0x0c, 0xfc, 0xe1, 0xce,
0x05, 0xac, 0xbc, 0x69, 0x16, 0x27, 0x0f, 0x27, 0xb6, 0x30, 0xfc, 0x05, 0x5d, 0xc6, 0x4e, 0xd9, 0xd2, 0xc6, 0x41, 0x9c, 0x6e, 0x70, 0x7b, 0x4f, 0x0e, 0x3b, 0x73, 0x2f, 0x2b, 0x6f, 0x9a, 0xc5,
0x86, 0x08, 0x00, 0x00 0x49, 0xc3, 0x89, 0x0d, 0x0c, 0x7f, 0x01, 0xbc, 0xb1, 0xff, 0x31, 0x9d, 0x08, 0x00, 0x00
}; };
// Autogenerated from wled00/data/settings.htm, do not edit!! // Autogenerated from wled00/data/settings.htm, do not edit!!
const uint16_t PAGE_settings_length = 985; const uint16_t PAGE_settings_length = 985;
const uint8_t PAGE_settings[] PROGMEM = { const uint8_t PAGE_settings[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xad, 0x56, 0x6d, 0x6f, 0xdb, 0x36, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xad, 0x56, 0x6d, 0x6f, 0xdb, 0x36,
0x10, 0xfe, 0xee, 0x5f, 0xc1, 0xb0, 0x58, 0x23, 0xa1, 0xb2, 0xec, 0x38, 0xc3, 0xb0, 0xc9, 0x96, 0x10, 0xfe, 0xee, 0x5f, 0xc1, 0xb0, 0x58, 0x23, 0xa1, 0xb2, 0xec, 0x38, 0xc3, 0xb0, 0xc9, 0x96,
0x8b, 0x35, 0x2f, 0x9d, 0x87, 0x04, 0x0d, 0x90, 0xa4, 0xdd, 0x80, 0x7d, 0xa1, 0xc9, 0x93, 0xcc, 0x8b, 0x35, 0x2f, 0x9d, 0x87, 0x04, 0x0d, 0x90, 0xa4, 0xdd, 0x80, 0x7d, 0xa1, 0xc9, 0x93, 0xcc,
0x46, 0x22, 0x05, 0xf2, 0xe4, 0xc4, 0x73, 0xf3, 0xdf, 0x77, 0x94, 0x9d, 0xb7, 0x36, 0xd8, 0x8a, 0x46, 0x22, 0x05, 0xf2, 0xe4, 0xc4, 0x73, 0xf3, 0xdf, 0x77, 0x94, 0x9d, 0xb7, 0x36, 0xd8, 0x8a,
@ -133,113 +133,147 @@ const uint8_t PAGE_settings[] PROGMEM = {
// Autogenerated from wled00/data/settings_wifi.htm, do not edit!! // Autogenerated from wled00/data/settings_wifi.htm, do not edit!!
const uint16_t PAGE_settings_wifi_length = 1563; const uint16_t PAGE_settings_wifi_length = 2098;
const uint8_t PAGE_settings_wifi[] PROGMEM = { const uint8_t PAGE_settings_wifi[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xb5, 0x57, 0xe1, 0x6e, 0xdb, 0x36, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xb5, 0x58, 0x6b, 0x6f, 0xdb, 0xca,
0x10, 0xfe, 0xef, 0xa7, 0x60, 0x38, 0xa0, 0xb0, 0x50, 0x59, 0x8e, 0xed, 0xa5, 0x2b, 0x52, 0xc9, 0x11, 0xfd, 0xae, 0x5f, 0xb1, 0xde, 0x16, 0x06, 0x09, 0xd3, 0x94, 0x64, 0x35, 0x69, 0x60, 0x8b,
0x5d, 0x62, 0xbb, 0x4d, 0xb6, 0x34, 0xf5, 0xa0, 0xa0, 0xc1, 0x80, 0x01, 0x05, 0x2d, 0x9d, 0x6d, 0x4a, 0xfd, 0xd0, 0x8d, 0xdd, 0x3a, 0x8e, 0x0a, 0x19, 0xd7, 0x28, 0xd2, 0xe0, 0x5e, 0x9a, 0x1c,
0x2e, 0x14, 0xa9, 0x89, 0x94, 0x9d, 0x20, 0xcd, 0xbb, 0xef, 0x48, 0xc9, 0x8e, 0x9d, 0xc4, 0x6d, 0x49, 0x1b, 0x93, 0xbb, 0xbc, 0xdc, 0xa5, 0x64, 0xc3, 0xd6, 0x7f, 0xef, 0xcc, 0x2e, 0xf5, 0xb4,
0xd1, 0x65, 0x08, 0x1c, 0x98, 0xe4, 0xdd, 0x77, 0xc7, 0xbb, 0xef, 0x8e, 0xe7, 0x70, 0x6f, 0xf8, 0x9d, 0x16, 0x81, 0x8b, 0x20, 0x09, 0xb9, 0x3b, 0x3b, 0x33, 0x7b, 0xe6, 0xcc, 0x83, 0xea, 0xee,
0x71, 0x70, 0xf1, 0xe7, 0x78, 0x44, 0xe6, 0x26, 0x13, 0xfd, 0xd0, 0xfe, 0x27, 0x82, 0xc9, 0x59, 0x9c, 0x7d, 0x39, 0xbd, 0xfe, 0xd7, 0xa0, 0xcf, 0x26, 0x26, 0xcf, 0x7a, 0x5d, 0xfa, 0x97, 0x65,
0x44, 0x41, 0x52, 0x5c, 0x03, 0x4b, 0xfb, 0x61, 0x06, 0x86, 0x91, 0x64, 0xce, 0x0a, 0x0d, 0x26, 0xb1, 0x1c, 0x47, 0x1c, 0x24, 0xc7, 0x77, 0x88, 0xd3, 0x5e, 0x37, 0x07, 0x13, 0xb3, 0x64, 0x12,
0xa2, 0xa5, 0x99, 0xb6, 0x5e, 0xd3, 0x7a, 0xb7, 0x21, 0x59, 0x06, 0x11, 0x5d, 0x70, 0x58, 0xe6, 0x97, 0x1a, 0x4c, 0xc4, 0x2b, 0x33, 0xda, 0xff, 0xc0, 0xeb, 0xd5, 0x86, 0x8c, 0x73, 0x88, 0xf8,
0xaa, 0x30, 0x94, 0x24, 0x4a, 0x1a, 0x90, 0x28, 0xb6, 0xe4, 0xa9, 0x99, 0x47, 0x07, 0xfb, 0xfb, 0x54, 0xc0, 0xac, 0x50, 0xa5, 0xe1, 0x2c, 0x51, 0xd2, 0x80, 0x44, 0xb1, 0x99, 0x48, 0xcd, 0x24,
0x6b, 0xd1, 0x07, 0x47, 0x29, 0x2c, 0x78, 0x02, 0x2d, 0xb7, 0xf0, 0xb9, 0xe4, 0x86, 0x33, 0xd1, 0x7a, 0xd7, 0x6a, 0x2d, 0x45, 0xb7, 0xb6, 0x52, 0x98, 0x8a, 0x04, 0xf6, 0xed, 0x4b, 0x20, 0xa4,
0xd2, 0x09, 0x13, 0x10, 0x75, 0xfc, 0x8c, 0x5d, 0xf3, 0xac, 0xcc, 0xd6, 0xeb, 0x52, 0x43, 0xe1, 0x30, 0x22, 0xce, 0xf6, 0x75, 0x12, 0x67, 0x10, 0xb5, 0x83, 0x3c, 0xbe, 0x17, 0x79, 0x95, 0x2f,
0x16, 0x6c, 0x82, 0x6b, 0xa9, 0xe8, 0x23, 0xcb, 0xfd, 0xd0, 0x70, 0x23, 0xa0, 0x7f, 0xc9, 0xdf, 0xdf, 0x2b, 0x0d, 0xa5, 0x7d, 0x89, 0x6f, 0xf1, 0x5d, 0x2a, 0xfe, 0xcc, 0x72, 0xaf, 0x6b, 0x84,
0x71, 0x12, 0x83, 0x31, 0x5c, 0xce, 0x74, 0xd8, 0xae, 0x36, 0x43, 0x9d, 0x14, 0x3c, 0x37, 0xfd, 0xc9, 0xa0, 0x77, 0x23, 0x7e, 0x11, 0x6c, 0x08, 0xc6, 0x08, 0x39, 0xd6, 0xdd, 0xa6, 0x5b, 0xec,
0xc6, 0x82, 0x15, 0x44, 0xa8, 0x84, 0xe7, 0x7e, 0x1a, 0xa5, 0x2a, 0x29, 0x33, 0x74, 0xc8, 0xc7, 0xea, 0xa4, 0x14, 0x85, 0xe9, 0x35, 0xa6, 0x71, 0xc9, 0x32, 0x95, 0x88, 0x22, 0x48, 0xa3, 0x54,
0x8d, 0x68, 0xaf, 0xf3, 0x66, 0x5a, 0xca, 0xc4, 0x70, 0x25, 0xc9, 0x49, 0xd3, 0xbb, 0x5d, 0x72, 0x25, 0x55, 0x8e, 0x0e, 0x05, 0xb8, 0x10, 0xed, 0xb4, 0x03, 0x54, 0x2f, 0x2f, 0x95, 0x2a, 0x74,
0x99, 0xaa, 0x65, 0xa0, 0x72, 0x90, 0x4d, 0x3a, 0x37, 0x26, 0xd7, 0x87, 0xed, 0xf6, 0x95, 0x54, 0xd4, 0x0a, 0x8a, 0x12, 0x86, 0xf8, 0x3a, 0x1c, 0x5e, 0x9c, 0x45, 0x9c, 0x1f, 0x8d, 0x2a, 0x99,
0xc1, 0x52, 0x40, 0x1a, 0xcc, 0xa0, 0x3d, 0x05, 0x66, 0xca, 0x02, 0x74, 0x5b, 0xd7, 0xb6, 0xda, 0x18, 0xa1, 0x24, 0x1b, 0x5f, 0xa4, 0x1e, 0xf8, 0x8f, 0x25, 0x98, 0xaa, 0x94, 0x2c, 0x0d, 0xc7,
0x3f, 0x2d, 0xf9, 0x94, 0xb7, 0x56, 0x4b, 0xea, 0xdd, 0xad, 0x01, 0x8f, 0x1f, 0x02, 0xae, 0x95, 0x60, 0xfa, 0x19, 0x90, 0x96, 0x93, 0x07, 0xbb, 0x35, 0x5f, 0x8a, 0x26, 0xfd, 0x0d, 0xc9, 0xa4,
0xa8, 0x4f, 0x3f, 0x6b, 0x10, 0xd3, 0x4d, 0x69, 0xa1, 0x58, 0xfa, 0x5b, 0xdc, 0x34, 0x3e, 0x44, 0x84, 0xd8, 0x40, 0x2d, 0xbc, 0x21, 0x78, 0xee, 0xf9, 0x8f, 0x33, 0x21, 0x53, 0x35, 0x0b, 0x55,
0x7b, 0xfb, 0xde, 0xad, 0x00, 0x43, 0x54, 0x94, 0x06, 0x49, 0x81, 0x16, 0x61, 0x24, 0xc0, 0xfa, 0x01, 0xd2, 0xe3, 0x13, 0x63, 0x0a, 0x7d, 0xd8, 0x6c, 0xde, 0x49, 0x15, 0xce, 0x32, 0x20, 0x2b,
0xdc, 0xa4, 0xd5, 0x8d, 0xa8, 0xf7, 0x46, 0x05, 0x08, 0x76, 0x64, 0x4c, 0xc1, 0x27, 0xa5, 0x01, 0xcd, 0x11, 0x9e, 0xae, 0x4a, 0xd0, 0x4d, 0x5d, 0x5f, 0xad, 0xf9, 0xa7, 0x99, 0x18, 0x89, 0xfd,
0x3c, 0x28, 0x12, 0xea, 0x1b, 0xcf, 0x7f, 0xb8, 0x6f, 0x6e, 0x72, 0x40, 0x73, 0x06, 0xae, 0x4d, 0xc5, 0x2b, 0x5f, 0x53, 0x78, 0xb2, 0xad, 0x70, 0x79, 0x88, 0x07, 0xfc, 0x37, 0x0d, 0xd9, 0x68,
0xfb, 0x6f, 0xb6, 0x60, 0x2b, 0x80, 0x47, 0x82, 0x4c, 0xdf, 0x48, 0x84, 0x00, 0xcf, 0x4f, 0x83, 0x5d, 0xfa, 0x0a, 0xa5, 0x31, 0x34, 0xda, 0x30, 0x88, 0x3c, 0x84, 0xe2, 0xa3, 0xb5, 0x8f, 0xe6,
0x89, 0x4a, 0x6f, 0x02, 0x96, 0xa3, 0xd3, 0xe9, 0x60, 0xce, 0x45, 0xda, 0x54, 0x56, 0x9e, 0xa5, 0xf9, 0x9e, 0x45, 0xea, 0x90, 0x73, 0x7f, 0x8f, 0x37, 0xbf, 0x6b, 0x25, 0x9b, 0x12, 0x0c, 0x0f,
0xe9, 0x68, 0x81, 0x5e, 0x9c, 0x71, 0x8d, 0x19, 0x85, 0xa2, 0x49, 0xad, 0xcf, 0xd4, 0x6f, 0x7a, 0x4c, 0x44, 0x28, 0x70, 0x82, 0x8b, 0xfb, 0x47, 0x26, 0x4c, 0x85, 0xa6, 0xa8, 0xa4, 0xd1, 0x4e,
0x51, 0xff, 0xf6, 0x3d, 0x98, 0x4f, 0x4d, 0xef, 0xee, 0x69, 0x39, 0x28, 0x0a, 0x55, 0xa0, 0x7b, 0x2b, 0x30, 0xa1, 0x90, 0x12, 0xca, 0xf3, 0xeb, 0xcf, 0x97, 0x11, 0x27, 0x04, 0x25, 0x9a, 0x0d,
0x28, 0x87, 0x74, 0xd0, 0x4a, 0x40, 0x20, 0xd4, 0xac, 0x49, 0x47, 0x76, 0x9f, 0xd4, 0x97, 0xc7, 0xc3, 0x90, 0x07, 0x23, 0x30, 0xc9, 0x04, 0xef, 0x1d, 0x9a, 0x09, 0xba, 0x04, 0x51, 0x0f, 0x42,
0xc0, 0x90, 0x29, 0x17, 0xe0, 0xae, 0x81, 0xf9, 0x2f, 0xf0, 0xba, 0x67, 0xf5, 0xbe, 0x9a, 0x5a, 0x52, 0xe9, 0xf9, 0xab, 0x95, 0x2f, 0xb7, 0xdf, 0x21, 0x31, 0x61, 0xac, 0xb5, 0x18, 0x4b, 0xef,
0x8a, 0x4d, 0xf9, 0xac, 0x2c, 0x98, 0x8b, 0x56, 0x75, 0x0d, 0x32, 0x65, 0xdc, 0x26, 0xe6, 0x2f, 0x71, 0x1e, 0x3c, 0xa2, 0xbd, 0x99, 0x2a, 0xef, 0xf4, 0xe1, 0xd7, 0x6f, 0xf3, 0x00, 0xcf, 0x2e,
0x79, 0x2a, 0x13, 0x95, 0xe5, 0x18, 0x34, 0x20, 0x39, 0x9b, 0x01, 0x49, 0x99, 0x61, 0x7b, 0x18, 0xde, 0x43, 0x8d, 0x21, 0xf7, 0x3c, 0x08, 0x8c, 0x1f, 0xf5, 0x4c, 0x58, 0xe2, 0x89, 0x7d, 0xb0,
0xde, 0x8d, 0x00, 0xc7, 0x98, 0x0e, 0x6a, 0x0d, 0x1c, 0xd2, 0x28, 0xaa, 0xf3, 0x82, 0x1c, 0x70, 0xff, 0xf9, 0x61, 0x09, 0x69, 0x95, 0xc0, 0x62, 0xd3, 0x03, 0x94, 0xcd, 0xc1, 0x19, 0xc4, 0xfd,
0x78, 0x41, 0x5e, 0x28, 0xa3, 0x12, 0x25, 0x5e, 0xbc, 0x68, 0x3a, 0x5e, 0xec, 0xfb, 0x4d, 0x47, 0x34, 0x8a, 0x22, 0x63, 0x1f, 0xfc, 0xa7, 0x27, 0x08, 0x8b, 0x4a, 0x4f, 0x3c, 0xe3, 0xa3, 0xee,
0x98, 0xc8, 0x4a, 0x88, 0xd8, 0xa8, 0x02, 0x51, 0x91, 0x00, 0xe6, 0xd4, 0x40, 0x66, 0x2f, 0x9e, 0xe0, 0xeb, 0xb7, 0x35, 0x57, 0x1e, 0xc5, 0xc8, 0x6b, 0xa1, 0x28, 0x84, 0x19, 0xc8, 0xb1, 0x99,
0x9c, 0xe6, 0xd4, 0xf3, 0xbe, 0x7c, 0xa9, 0xc5, 0x50, 0x3f, 0xcb, 0xd1, 0xe1, 0x77, 0x88, 0x4f, 0xec, 0xee, 0x2e, 0xd9, 0xd1, 0x6d, 0xb7, 0xfc, 0x3a, 0xaa, 0xcb, 0xb5, 0xbd, 0xbd, 0x60, 0xaa,
0x3e, 0xa8, 0x14, 0x02, 0x32, 0x16, 0xc0, 0x34, 0x10, 0x0c, 0x04, 0x14, 0xe4, 0xf2, 0x6c, 0x34, 0x44, 0xca, 0x10, 0xe7, 0x6b, 0x91, 0x83, 0xaa, 0x8c, 0x77, 0x15, 0xb4, 0xa1, 0xe3, 0x1f, 0xad,
0x24, 0xa7, 0x63, 0x74, 0xc9, 0xdf, 0x42, 0xd4, 0xdb, 0x88, 0xbe, 0x43, 0xf3, 0x3c, 0x2b, 0xe5, 0x91, 0xea, 0x28, 0x03, 0xc3, 0xa4, 0x03, 0xef, 0x74, 0x88, 0xd0, 0xa1, 0x0d, 0xe9, 0x3f, 0xd2,
0xe8, 0x60, 0xe1, 0xdf, 0x3a, 0x26, 0x22, 0x11, 0xe9, 0x4b, 0x77, 0x7c, 0x48, 0xa9, 0xf7, 0xf2, 0xaa, 0x89, 0x90, 0x2d, 0x1c, 0x23, 0x83, 0xf7, 0xb7, 0x98, 0xa2, 0xa2, 0x63, 0x63, 0x4a, 0x71,
0x9e, 0x4c, 0x6d, 0x1d, 0xfc, 0xad, 0xdf, 0xe6, 0x51, 0x87, 0xfa, 0x7b, 0x1d, 0xef, 0xae, 0x11, 0x5b, 0x19, 0xf0, 0xb8, 0x48, 0x31, 0x70, 0x74, 0x24, 0xd8, 0xde, 0xa1, 0x24, 0x78, 0x6d, 0x4f,
0xb6, 0x6b, 0xda, 0x87, 0xda, 0xdc, 0x60, 0x15, 0xfc, 0xca, 0x33, 0x5b, 0x2a, 0xa4, 0x2c, 0x04, 0x49, 0xcc, 0x59, 0x39, 0xa6, 0xfd, 0x6b, 0xcf, 0x47, 0x81, 0x75, 0x52, 0xcb, 0x70, 0x1a, 0x67,
0xd2, 0xc4, 0x6e, 0x05, 0x89, 0x46, 0xa2, 0xbe, 0x41, 0x41, 0x27, 0x10, 0xb6, 0xab, 0x82, 0xb7, 0x15, 0x1c, 0x8d, 0x54, 0xe9, 0x91, 0x07, 0x80, 0xfe, 0x41, 0xd7, 0x84, 0xc9, 0x44, 0x64, 0x69,
0x59, 0xc7, 0x64, 0x58, 0xcb, 0x11, 0xc5, 0x68, 0x61, 0x71, 0x4d, 0x55, 0x91, 0x35, 0x08, 0xc7, 0x09, 0xb2, 0xbe, 0xf7, 0x11, 0xec, 0xed, 0xf9, 0x08, 0x30, 0xe4, 0x6a, 0x0a, 0xa7, 0xb4, 0xe7,
0xb5, 0xfd, 0xf6, 0x59, 0x53, 0x52, 0xd5, 0x5f, 0x3c, 0xa5, 0x04, 0xcb, 0x7b, 0xae, 0xf0, 0x24, 0xad, 0x64, 0xbe, 0xc2, 0x37, 0x7f, 0xa9, 0x40, 0xa1, 0x02, 0xd5, 0x5d, 0xe0, 0x75, 0xa4, 0xf0,
0x57, 0xda, 0xd6, 0x61, 0xca, 0x17, 0x24, 0x11, 0x4c, 0xeb, 0x88, 0x1a, 0x85, 0xe1, 0x58, 0x6e, 0x5c, 0x4d, 0x2b, 0x61, 0x2f, 0xa7, 0x0a, 0x62, 0x1b, 0xdd, 0x7a, 0xcb, 0x4d, 0xeb, 0x07, 0x0f,
0xef, 0xcd, 0x41, 0xe4, 0xc7, 0xb4, 0xdf, 0x08, 0x91, 0x6d, 0x06, 0xb3, 0x61, 0x79, 0x19, 0xd1, 0xe0, 0xab, 0xfa, 0xe6, 0xe2, 0x12, 0x88, 0x35, 0x12, 0xfd, 0xfe, 0xe7, 0xc7, 0xe5, 0xce, 0x9c,
0x6a, 0x41, 0xd1, 0x6a, 0x22, 0x78, 0x72, 0x15, 0xd1, 0x13, 0x6b, 0xf6, 0x6d, 0xd8, 0xae, 0x0e, 0x79, 0xf5, 0x1b, 0x45, 0x7a, 0xce, 0xd2, 0x93, 0xdc, 0xff, 0x7d, 0x75, 0x10, 0xc3, 0x55, 0xdf,
0xd0, 0x35, 0x84, 0xe8, 0x3f, 0xad, 0xd3, 0x58, 0x2b, 0x1d, 0x5b, 0xa5, 0x63, 0x96, 0x5c, 0xdd, 0x6a, 0x77, 0x77, 0xdb, 0x88, 0x83, 0x16, 0x08, 0xc7, 0xe5, 0x23, 0x21, 0x16, 0x17, 0x98, 0x20,
0xeb, 0x6d, 0x69, 0xe8, 0x72, 0x92, 0x71, 0xf4, 0x31, 0x66, 0x0b, 0x20, 0x2f, 0xc8, 0x40, 0x49, 0xa9, 0xbb, 0x98, 0xf0, 0xe7, 0xce, 0x61, 0xb5, 0xe9, 0xb0, 0x7a, 0xd9, 0x61, 0xbe, 0x73, 0x8a,
0x09, 0x89, 0xb9, 0x17, 0x9e, 0x17, 0xe8, 0x57, 0x65, 0x69, 0xde, 0xad, 0x5a, 0x09, 0x06, 0xb7, 0x59, 0x17, 0xa8, 0x75, 0xc6, 0x7f, 0x41, 0xfe, 0x94, 0xac, 0x66, 0xa9, 0xa5, 0xfd, 0xa6, 0x09,
0xcc, 0x31, 0x30, 0x5d, 0xdc, 0xea, 0xf5, 0x6b, 0x0d, 0x62, 0x14, 0x81, 0x6b, 0x64, 0xb5, 0xa5, 0xe5, 0x07, 0x12, 0xc1, 0x2c, 0xb2, 0x38, 0x81, 0x1b, 0x61, 0x88, 0x7a, 0xf3, 0xf5, 0x04, 0x6a,
0xa4, 0x04, 0xb3, 0x54, 0x05, 0x9a, 0xc4, 0xf3, 0xc6, 0x79, 0xb5, 0x70, 0xd1, 0x21, 0xcd, 0x38, 0x3f, 0x4f, 0x20, 0x3e, 0x5f, 0xcb, 0x55, 0x8c, 0xe3, 0xa3, 0x8b, 0xd6, 0x06, 0x8b, 0x76, 0xe0,
0x3e, 0x1d, 0xfa, 0x04, 0x90, 0x10, 0x37, 0x56, 0x45, 0x2a, 0x63, 0xd9, 0x6b, 0x11, 0xbc, 0xc3, 0xe9, 0xc9, 0xba, 0xb3, 0x83, 0x84, 0xb5, 0xee, 0xd5, 0x0c, 0x3d, 0x5a, 0x91, 0x4b, 0xc8, 0xa2,
0x70, 0x52, 0xf4, 0x43, 0x2e, 0xf3, 0xd2, 0xd4, 0xce, 0xd9, 0xca, 0x5c, 0x85, 0x75, 0x10, 0xe3, 0x72, 0xdc, 0x32, 0x0f, 0x05, 0x16, 0x4e, 0x03, 0xf7, 0x94, 0xcb, 0x21, 0xe2, 0x46, 0x7a, 0xf0,
0xb5, 0xb0, 0x09, 0x0a, 0x90, 0x33, 0xec, 0x95, 0xb4, 0xd7, 0xc5, 0x20, 0xa2, 0xc2, 0x0a, 0x3e, 0xc9, 0x15, 0x54, 0xf7, 0xbc, 0x79, 0x63, 0xac, 0xc6, 0x2e, 0xac, 0x3c, 0xe8, 0x1c, 0x10, 0x6c,
0xc7, 0x50, 0xe2, 0x97, 0xf4, 0x31, 0xca, 0xea, 0x64, 0x8d, 0x34, 0xde, 0x46, 0x7a, 0xd5, 0xab, 0xd6, 0x46, 0xb4, 0xc6, 0xa7, 0x00, 0xb6, 0xaf, 0xb5, 0xf4, 0x39, 0x53, 0x71, 0xfa, 0xf7, 0x21,
0x90, 0x62, 0x83, 0x7c, 0x4f, 0x90, 0x89, 0xa4, 0x89, 0xf4, 0xc4, 0x70, 0x30, 0x43, 0xf6, 0x03, 0xa5, 0x23, 0x16, 0x08, 0xe7, 0xbe, 0x74, 0x74, 0xb7, 0x35, 0x19, 0x5d, 0x92, 0xdb, 0xc1, 0x2a,
0xf7, 0x47, 0x30, 0xc5, 0x64, 0x78, 0x32, 0x18, 0x6f, 0x39, 0x59, 0xc1, 0x9d, 0xee, 0x23, 0x5c, 0x13, 0x4e, 0x19, 0xb9, 0xbd, 0x4e, 0x8e, 0x23, 0xee, 0xe4, 0x79, 0xf3, 0x7b, 0x3c, 0x8d, 0x17,
0x65, 0x49, 0x96, 0xd9, 0x04, 0x0a, 0xba, 0xca, 0x2b, 0x52, 0x22, 0xe3, 0x32, 0xa2, 0x28, 0x80, 0x0a, 0x9e, 0x09, 0xc6, 0xfa, 0x41, 0xa2, 0x0a, 0xcc, 0xeb, 0x34, 0xbc, 0x55, 0xe9, 0xc3, 0x46,
0xe6, 0x22, 0xda, 0x3d, 0x38, 0xa0, 0xa4, 0x80, 0x7f, 0x4a, 0x5e, 0x40, 0xda, 0x27, 0x01, 0xd9, 0x0c, 0x24, 0xc9, 0xc7, 0x69, 0xda, 0x9f, 0x62, 0x21, 0xbe, 0x14, 0x1a, 0x7b, 0x12, 0x94, 0x1e,
0xc6, 0xe9, 0x3c, 0x13, 0x4e, 0xf7, 0x99, 0x70, 0x7a, 0x3f, 0x86, 0xb3, 0x11, 0xca, 0x19, 0xb6, 0x27, 0x37, 0x79, 0xe0, 0x61, 0xc9, 0x78, 0xfc, 0x04, 0xe6, 0x57, 0xcf, 0x9f, 0xbf, 0x2c, 0x07,
0xe7, 0x25, 0xbb, 0xd9, 0x88, 0x59, 0xa3, 0x06, 0x7f, 0x8f, 0xba, 0xff, 0xc9, 0xc7, 0xfa, 0xb1, 0x65, 0xa9, 0x4a, 0x74, 0x0f, 0xe5, 0x88, 0x2d, 0x2a, 0x43, 0xca, 0xab, 0xb1, 0xc7, 0xfb, 0xb4,
0x7b, 0xdf, 0x79, 0x26, 0x9c, 0xee, 0x33, 0xe1, 0xf4, 0x7e, 0x08, 0xc7, 0x06, 0xa8, 0x51, 0x07, 0xce, 0xea, 0xfb, 0x62, 0xd1, 0x63, 0x23, 0x91, 0x81, 0xbd, 0x06, 0x76, 0x30, 0x2c, 0x56, 0xfc,
0x0d, 0x2b, 0x12, 0xeb, 0x07, 0xa5, 0xf4, 0xd5, 0x63, 0xb2, 0xc5, 0xdf, 0x11, 0xb7, 0xc6, 0x77, 0xb2, 0x5e, 0x57, 0x23, 0x6a, 0x92, 0x23, 0x31, 0xae, 0xca, 0xd8, 0x02, 0xe4, 0xae, 0xc1, 0x46,
0x24, 0x37, 0xee, 0x3c, 0x13, 0x4e, 0xf7, 0x99, 0x70, 0x7a, 0x3f, 0x86, 0x63, 0x03, 0x94, 0x0d, 0xb1, 0xa0, 0x5a, 0xff, 0x6f, 0x79, 0x21, 0x13, 0x95, 0x17, 0x88, 0x13, 0xb0, 0x22, 0x1e, 0x03,
0xcf, 0x63, 0x82, 0x0f, 0x2b, 0x8e, 0x1e, 0x7a, 0x55, 0xba, 0x55, 0x83, 0xb1, 0x55, 0x2b, 0x15, 0x4b, 0x63, 0x13, 0xef, 0x60, 0xc5, 0x5e, 0xc3, 0x74, 0x88, 0x3c, 0xe0, 0x64, 0xe0, 0x90, 0x47,
0xb1, 0x02, 0x55, 0xe1, 0xd6, 0x8f, 0x05, 0x59, 0x91, 0xf1, 0x89, 0x36, 0xf3, 0xc1, 0x25, 0x68, 0x51, 0x5d, 0xea, 0xb1, 0x58, 0x5b, 0x7d, 0x61, 0x51, 0x2a, 0xa3, 0x12, 0x95, 0xed, 0xee, 0x7a,
0xb3, 0xcb, 0x10, 0xf7, 0x14, 0x0a, 0xab, 0x3f, 0x10, 0x1c, 0xdf, 0x2c, 0x6c, 0x11, 0x87, 0x24, 0xb6, 0xb3, 0xb5, 0x02, 0xcf, 0x16, 0xf2, 0x88, 0x24, 0xb2, 0xa1, 0x51, 0x25, 0x6a, 0xa5, 0xce,
0xd4, 0x39, 0x93, 0x6b, 0x2f, 0x79, 0x8e, 0xfd, 0xfb, 0xfc, 0xbe, 0x99, 0x41, 0x8a, 0x2f, 0x08, 0x75, 0x61, 0x20, 0xa7, 0x8b, 0x27, 0x17, 0x05, 0xf7, 0xb1, 0x1c, 0xd6, 0x62, 0x78, 0x3e, 0x2f,
0x0a, 0x38, 0x07, 0xeb, 0x36, 0xe9, 0x9e, 0x68, 0x20, 0x47, 0x49, 0x62, 0x1d, 0x1d, 0x2b, 0x2e, 0xd0, 0xe1, 0x5f, 0x50, 0x3f, 0xfb, 0xac, 0x52, 0x08, 0xd9, 0x20, 0x83, 0x58, 0x03, 0x43, 0x20,
0x4d, 0xd5, 0x21, 0x8f, 0xc6, 0xc4, 0xb6, 0xc5, 0x27, 0x7d, 0x3f, 0x1a, 0x7f, 0xa3, 0x2f, 0x1e, 0x90, 0xde, 0x37, 0x97, 0xfd, 0x33, 0x76, 0x31, 0x40, 0x97, 0x82, 0x0d, 0x8d, 0x7a, 0x53, 0x63,
0xc5, 0x8f, 0x1c, 0x6e, 0x58, 0x85, 0x13, 0x9e, 0xa2, 0xad, 0xb1, 0x93, 0x3a, 0x24, 0x5b, 0xea, 0x60, 0xb5, 0xf9, 0x3e, 0x49, 0x59, 0x06, 0xfc, 0xa0, 0xb9, 0x2c, 0x9b, 0x9a, 0xc6, 0xa6, 0xf0,
0xc9, 0x1c, 0x92, 0xab, 0x89, 0xba, 0x5e, 0x43, 0x9c, 0x54, 0x0d, 0xd0, 0x3a, 0xb2, 0x6a, 0x96, 0xb1, 0x88, 0xda, 0x3c, 0xd8, 0x69, 0xfb, 0xf3, 0x46, 0xb7, 0x59, 0x37, 0xee, 0xae, 0x36, 0x0f,
0x8f, 0x9d, 0xb1, 0x73, 0x9a, 0xf7, 0xed, 0xee, 0x7a, 0xf4, 0xb8, 0xbb, 0x22, 0xa8, 0xc1, 0x87, 0xd8, 0xc7, 0xff, 0x26, 0x72, 0x6a, 0xf6, 0xac, 0x2a, 0x33, 0xa4, 0x09, 0x2d, 0x85, 0x89, 0xc6,
0x1e, 0xb3, 0xd8, 0x0c, 0x6e, 0x5f, 0xfb, 0xaf, 0x7a, 0x77, 0xde, 0x17, 0x7c, 0x96, 0x88, 0x9b, 0x2c, 0x3c, 0x42, 0x41, 0x2b, 0xd0, 0x6d, 0xba, 0x91, 0x85, 0xa2, 0x8e, 0xc1, 0x20, 0xcb, 0x98,
0x44, 0x23, 0x3a, 0x72, 0x26, 0xd0, 0x02, 0x26, 0x3a, 0x20, 0xaf, 0xdd, 0x5c, 0xcd, 0x30, 0x84, 0x46, 0x58, 0xfd, 0x7a, 0x5d, 0x2c, 0x54, 0x79, 0x83, 0x11, 0xdd, 0xe9, 0xe9, 0x37, 0xcd, 0x99,
0x85, 0x5e, 0xb9, 0xb5, 0x11, 0x31, 0xe2, 0x9e, 0x20, 0x14, 0xc1, 0x30, 0x8b, 0xc3, 0x6d, 0x12, 0x23, 0xfc, 0x70, 0xc4, 0x19, 0x0e, 0x28, 0x13, 0x85, 0x3b, 0x85, 0xd2, 0x34, 0x49, 0xa4, 0x62,
0x1d, 0x0d, 0x76, 0x90, 0xe8, 0x7a, 0xc5, 0xa2, 0xce, 0x8a, 0x45, 0x9d, 0xde, 0x03, 0x12, 0xe1, 0xca, 0x92, 0x0c, 0xfb, 0x10, 0xa6, 0x89, 0x42, 0x38, 0x66, 0x9b, 0x6b, 0x13, 0xc8, 0x8a, 0x13,
0xd5, 0xed, 0x05, 0xb5, 0x4d, 0x2c, 0x08, 0xfb, 0xa0, 0xd5, 0x98, 0xf8, 0x30, 0x87, 0x2a, 0x77, 0xde, 0x6b, 0x74, 0x91, 0x6d, 0x06, 0xa3, 0xe1, 0x12, 0xca, 0xbd, 0x70, 0xb4, 0x9a, 0x64, 0x22,
0x53, 0xd2, 0x82, 0x89, 0x12, 0x2c, 0x15, 0x6d, 0xaa, 0x57, 0x99, 0xb6, 0x07, 0x6c, 0x6a, 0xe7, 0xb9, 0x8b, 0xf8, 0x39, 0x99, 0xfd, 0xd8, 0x6d, 0xba, 0x0d, 0x74, 0x0d, 0x55, 0xf4, 0x5e, 0x3e,
0x98, 0x89, 0x52, 0x98, 0xd0, 0x4a, 0xf6, 0xa1, 0x4e, 0x87, 0xf6, 0x87, 0x5c, 0x6f, 0x90, 0xe3, 0xd3, 0x58, 0x1e, 0x3a, 0xa1, 0x43, 0x27, 0x71, 0x72, 0xb7, 0x3a, 0xb7, 0x71, 0x42, 0x57, 0xb7,
0x81, 0x58, 0xa3, 0x96, 0xc3, 0xec, 0x1d, 0x09, 0x6c, 0x99, 0x7a, 0x17, 0x10, 0xbe, 0x55, 0xe7, 0xb9, 0x40, 0x1f, 0x87, 0xf1, 0x14, 0xd8, 0x2e, 0x3b, 0x55, 0x58, 0x2d, 0x12, 0xb3, 0x12, 0x9e,
0xb0, 0x40, 0x6b, 0x4d, 0xfb, 0x74, 0x16, 0x80, 0xa3, 0x1d, 0x4e, 0xbf, 0x29, 0xa4, 0xde, 0x5a, 0x94, 0xe8, 0x97, 0xb3, 0x34, 0x39, 0x70, 0xc3, 0x10, 0x82, 0x5b, 0x15, 0x08, 0xcc, 0x01, 0x2e,
0xc3, 0x4e, 0x39, 0xee, 0x0a, 0xab, 0x8b, 0x3d, 0x4d, 0x57, 0xcb, 0x56, 0x0c, 0x33, 0x5f, 0xc0, 0x75, 0x7a, 0xf5, 0x09, 0x66, 0x14, 0x83, 0x7b, 0x64, 0x35, 0x51, 0xb2, 0x2e, 0x58, 0x28, 0xd3,
0x03, 0xaa, 0x8e, 0xae, 0x73, 0x28, 0xb8, 0x9d, 0xa9, 0x91, 0xf4, 0x8e, 0xa0, 0xe8, 0xba, 0xfd, 0x59, 0x9a, 0x6b, 0x6c, 0x7a, 0x48, 0xb8, 0xd9, 0x8e, 0xbf, 0xba, 0xdf, 0x15, 0xb9, 0x4a, 0x05,
0x95, 0x51, 0xc5, 0x5e, 0x0b, 0x80, 0xfc, 0x1b, 0x8c, 0xba, 0x8c, 0xab, 0xd4, 0x85, 0xbc, 0xdf, 0x60, 0xcd, 0x55, 0xb4, 0x7e, 0xe5, 0x94, 0x59, 0x74, 0x99, 0x67, 0x8b, 0x03, 0x03, 0x24, 0xd4,
0x18, 0xa0, 0x5d, 0x3b, 0xe1, 0x90, 0x25, 0x37, 0xf3, 0x75, 0xd4, 0x16, 0x1c, 0x73, 0xce, 0xb5, 0x03, 0x99, 0x94, 0xca, 0x10, 0xfb, 0xc9, 0x03, 0xff, 0x90, 0xc4, 0xbb, 0xb6, 0x2e, 0xb1, 0xb5,
0x2e, 0x41, 0x07, 0x2e, 0xc9, 0xc3, 0x6a, 0x18, 0x00, 0xe9, 0x2c, 0xf1, 0x69, 0x65, 0x8c, 0x6b, 0x9a, 0xc4, 0xea, 0x8a, 0xb4, 0x98, 0xf0, 0xe8, 0x71, 0x59, 0x80, 0x22, 0xde, 0x39, 0xe0, 0xd6,
0x62, 0x5f, 0x77, 0x3b, 0x54, 0x24, 0xaa, 0xc0, 0xeb, 0x1a, 0x71, 0xe3, 0x13, 0x2e, 0xed, 0xe8, 0xce, 0xc2, 0x4c, 0x81, 0x21, 0xc1, 0x87, 0xf4, 0xb9, 0xb6, 0xc5, 0xce, 0x4a, 0xd3, 0x60, 0x43,
0xaf, 0x41, 0x93, 0x5c, 0x2d, 0x31, 0x16, 0x76, 0x70, 0x2e, 0x33, 0x77, 0xfb, 0x20, 0x6c, 0x73, 0xd3, 0xfb, 0x8e, 0xd3, 0x34, 0x34, 0x98, 0x37, 0x09, 0x32, 0x9a, 0x61, 0x23, 0x23, 0x58, 0x63,
0x37, 0x5c, 0x55, 0xa3, 0x19, 0xce, 0x61, 0x29, 0xad, 0x6e, 0x65, 0xe6, 0x48, 0x41, 0x6c, 0xac, 0xc3, 0x5a, 0xa1, 0xfd, 0xc3, 0x90, 0x2a, 0xec, 0xec, 0xfc, 0x74, 0xb0, 0xe1, 0x6c, 0xad, 0xee,
0x17, 0xe8, 0xb1, 0xbb, 0xd6, 0x76, 0xa2, 0x47, 0x17, 0x27, 0x4f, 0x65, 0xfa, 0x5c, 0x49, 0x68, 0xa2, 0xc5, 0x6b, 0x4b, 0xb2, 0xca, 0x6f, 0xa1, 0xe4, 0x0b, 0x7e, 0x20, 0xb5, 0x72, 0x21, 0x23,
0xec, 0x4a, 0x06, 0x66, 0x6b, 0x14, 0x8f, 0x7b, 0xdd, 0xd6, 0xf8, 0xe3, 0x68, 0x97, 0xcc, 0xab, 0xde, 0xb2, 0xe6, 0x22, 0x7e, 0xf0, 0xee, 0x1d, 0x67, 0x25, 0xfc, 0x51, 0x09, 0x9c, 0x4d, 0x7a,
0x5a, 0x66, 0x08, 0xe5, 0xf5, 0x4e, 0xa0, 0x5f, 0x68, 0xff, 0xf7, 0xd3, 0x8b, 0xd6, 0xa7, 0x9d, 0x2c, 0x64, 0x5b, 0x7a, 0xda, 0x6f, 0xa4, 0xe7, 0xe0, 0x8d, 0xf4, 0x74, 0x7e, 0x4a, 0xcf, 0x1a,
0x28, 0xf8, 0xf3, 0xf2, 0x8f, 0x92, 0x4b, 0x9c, 0x94, 0x5b, 0x43, 0x3e, 0x6b, 0x7d, 0x4c, 0x0c, 0x94, 0x63, 0x9c, 0x74, 0x67, 0xf1, 0xc3, 0x61, 0x63, 0x0d, 0x34, 0xa7, 0xfb, 0xd3, 0x4f, 0x63,
0xdb, 0x09, 0xf6, 0xf3, 0xbd, 0xac, 0xb3, 0xbc, 0x4b, 0xee, 0x00, 0x79, 0x7c, 0xb1, 0xe4, 0x82, 0xd6, 0xd8, 0xd4, 0xf3, 0x46, 0x98, 0x7d, 0x7a, 0x23, 0xcc, 0x3e, 0xfd, 0x3c, 0x66, 0x8d, 0x1a,
0xcf, 0xe6, 0xe6, 0x0c, 0x2b, 0xf8, 0xeb, 0xd2, 0x48, 0xbc, 0xcb, 0xaf, 0x0a, 0x20, 0xc5, 0x1b, 0x34, 0xcc, 0x6c, 0xcc, 0x43, 0x94, 0xd2, 0x77, 0x87, 0xcf, 0x70, 0x1b, 0xfe, 0x0f, 0xb8, 0x35,
0x97, 0x17, 0x18, 0x0c, 0x8c, 0xe4, 0x7e, 0xe7, 0x5e, 0x6a, 0x93, 0x8c, 0xee, 0x53, 0x4f, 0x93, 0x7e, 0xe8, 0x68, 0xad, 0xa7, 0xfd, 0x46, 0x7a, 0x0e, 0xde, 0x48, 0x4f, 0xe7, 0xe7, 0xf4, 0x10,
0xc5, 0xff, 0x3e, 0xbb, 0xb6, 0xed, 0x60, 0x6e, 0xcb, 0xc1, 0x4e, 0xef, 0x76, 0x94, 0xb7, 0xbf, 0x40, 0xf9, 0xd9, 0xd5, 0x90, 0x61, 0x83, 0xc6, 0xaf, 0x22, 0xbd, 0x48, 0x5d, 0x57, 0x68, 0x28,
0xe8, 0xff, 0x05, 0xa1, 0x98, 0xa8, 0xba, 0xe1, 0x0f, 0x00, 0x00 0x6b, 0xa5, 0x62, 0x24, 0xe0, 0x12, 0xb7, 0x6e, 0x3a, 0xb5, 0xed, 0xc6, 0x46, 0xb9, 0xa9, 0x6b,
0xc3, 0xe7, 0x67, 0x55, 0x86, 0xd9, 0x96, 0x9a, 0xd1, 0xf9, 0xd3, 0x4c, 0x60, 0xef, 0xc3, 0x12,
0x71, 0xc8, 0xba, 0xba, 0x88, 0xe5, 0xd2, 0x4b, 0x51, 0x60, 0x1f, 0xb8, 0x5a, 0x15, 0x35, 0x48,
0xb1, 0x13, 0xa1, 0x80, 0x75, 0xb0, 0x2e, 0xb7, 0xb6, 0xd5, 0x03, 0x3b, 0x4e, 0x12, 0x72, 0x74,
0xa0, 0x84, 0x34, 0xb6, 0xd2, 0x36, 0x8e, 0x07, 0x8c, 0xca, 0xe3, 0x8b, 0xbe, 0x1f, 0x0f, 0x5e,
0xad, 0x8f, 0xce, 0xe1, 0xe3, 0xe7, 0x65, 0xd1, 0xa6, 0xdb, 0xb9, 0x48, 0xd1, 0xd6, 0xc0, 0x4a,
0x1d, 0xb2, 0x8d, 0xe3, 0xc9, 0x04, 0x92, 0xbb, 0x5b, 0x75, 0xbf, 0x54, 0x71, 0xee, 0x0a, 0x20,
0x39, 0xb2, 0x28, 0x96, 0xcf, 0x9d, 0xa1, 0x4f, 0x48, 0xff, 0x47, 0xd5, 0xb5, 0x56, 0x36, 0x70,
0x91, 0x5a, 0xab, 0xae, 0xa8, 0xd4, 0xe0, 0xc0, 0x80, 0x51, 0xf4, 0xc2, 0xc7, 0x0f, 0xc1, 0xfb,
0xce, 0xdc, 0x7f, 0xc2, 0x9e, 0xc1, 0xec, 0x37, 0x79, 0xc4, 0xfb, 0xd6, 0x04, 0x5a, 0xc0, 0x40,
0x87, 0xec, 0x83, 0xfd, 0x85, 0x21, 0x46, 0x08, 0x4b, 0xbd, 0x70, 0x6b, 0x0d, 0x31, 0x66, 0x5b,
0x19, 0x7d, 0xd0, 0x48, 0xc8, 0x0e, 0x37, 0x49, 0x74, 0x7c, 0xfa, 0x0a, 0x89, 0xee, 0x17, 0x2c,
0x6a, 0x2f, 0x58, 0xd4, 0xee, 0x6c, 0x91, 0x08, 0xaf, 0x4e, 0x17, 0xd4, 0x14, 0x58, 0xfb, 0x61,
0xb0, 0xd0, 0x89, 0x0d, 0xbe, 0xeb, 0x3e, 0x01, 0x98, 0x9b, 0x76, 0x91, 0x8a, 0x14, 0xea, 0x45,
0xa4, 0x69, 0x23, 0x1e, 0xd1, 0x3c, 0x74, 0xab, 0x14, 0x06, 0xd4, 0xc9, 0x6e, 0x9f, 0x69, 0xf3,
0xde, 0x99, 0xd0, 0x6b, 0xe4, 0xd8, 0x12, 0x6b, 0xd4, 0x72, 0x18, 0xbd, 0xe3, 0x0c, 0x4b, 0xa6,
0x7e, 0x4d, 0x11, 0xf6, 0xaa, 0x2b, 0x98, 0xa2, 0x35, 0x8f, 0x5a, 0x68, 0x09, 0x38, 0x22, 0xe6,
0x38, 0xd2, 0x42, 0xea, 0x2f, 0x4f, 0xd0, 0xb4, 0x64, 0xaf, 0xb0, 0xb8, 0xd8, 0xcb, 0x74, 0x25,
0xb6, 0x22, 0xcc, 0x62, 0x0a, 0x5b, 0x54, 0xed, 0xdf, 0x17, 0x50, 0x0a, 0xfa, 0x79, 0x02, 0x49,
0x6f, 0x09, 0x7a, 0xe6, 0x3e, 0x4c, 0x1c, 0xf6, 0x3a, 0x03, 0x28, 0xfe, 0x0b, 0xa3, 0x6e, 0x86,
0x2e, 0x74, 0x5d, 0xd1, 0x6b, 0x9c, 0xa2, 0x5d, 0x9a, 0x94, 0xd8, 0x0c, 0xbf, 0x08, 0x96, 0xa8,
0x4d, 0x05, 0xc6, 0x5c, 0x68, 0x5d, 0x81, 0x0e, 0x6d, 0x90, 0xcf, 0xdc, 0x50, 0x00, 0xd2, 0x5a,
0x12, 0x23, 0x67, 0x4c, 0x68, 0x46, 0xdd, 0x9d, 0x86, 0x93, 0x44, 0x95, 0x78, 0x5d, 0x93, 0x3d,
0x04, 0x4c, 0x48, 0xfa, 0x15, 0x45, 0x83, 0x66, 0x85, 0x9a, 0x21, 0x16, 0x34, 0x80, 0x57, 0xb9,
0xbd, 0x7d, 0xd8, 0x6d, 0x0a, 0x3b, 0xa4, 0xb9, 0x11, 0x0f, 0xe7, 0xb9, 0x94, 0xbb, 0x5b, 0xd1,
0x27, 0x19, 0x15, 0xd6, 0x6b, 0xf4, 0xd8, 0x4d, 0x38, 0x1b, 0x81, 0xee, 0x5f, 0x9f, 0xbf, 0x14,
0xe9, 0x2b, 0x25, 0xa1, 0xf1, 0x5a, 0x30, 0x30, 0x5a, 0xfd, 0xe1, 0xa0, 0x73, 0xb0, 0x3f, 0xf8,
0xd2, 0x7f, 0x4d, 0xe6, 0x7d, 0x2d, 0x73, 0x06, 0xd5, 0xfd, 0xab, 0x8a, 0xfe, 0xca, 0x7b, 0xff,
0xb8, 0xb8, 0xde, 0xff, 0xf5, 0x55, 0x2d, 0x1f, 0x78, 0xef, 0x9f, 0x95, 0x90, 0x38, 0x71, 0xef,
0x9f, 0x89, 0xf1, 0xfe, 0x97, 0xc4, 0xc4, 0xaf, 0x2a, 0xfb, 0xcb, 0x4a, 0xd6, 0x5a, 0x7e, 0x4d,
0xee, 0x1d, 0xf2, 0xf8, 0x7a, 0x26, 0x32, 0x31, 0x9e, 0x98, 0x4b, 0xcc, 0xe0, 0x1f, 0x4b, 0x23,
0xf1, 0x6e, 0x7e, 0x28, 0x80, 0x14, 0x6f, 0xdc, 0x5c, 0x23, 0x18, 0x88, 0x64, 0xab, 0xbd, 0x92,
0x5a, 0x27, 0xa3, 0xfd, 0x5b, 0x4f, 0xa5, 0xe5, 0xff, 0x7d, 0x06, 0x6e, 0xd2, 0x80, 0x4f, 0xe9,
0x40, 0x5f, 0x01, 0xf4, 0x49, 0x40, 0xbf, 0x6d, 0xfe, 0x07, 0x10, 0x1c, 0x76, 0x1f, 0xeb, 0x14,
0x00, 0x00
}; };
// Autogenerated from wled00/data/settings_leds.htm, do not edit!! // Autogenerated from wled00/data/settings_leds.htm, do not edit!!
const uint16_t PAGE_settings_leds_length = 7391; const uint16_t PAGE_settings_leds_length = 7391;
const uint8_t PAGE_settings_leds[] PROGMEM = { const uint8_t PAGE_settings_leds[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xdd, 0x3c, 0xdb, 0x56, 0xe3, 0x48, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xdd, 0x3c, 0xdb, 0x56, 0xe3, 0x48,
0x92, 0xef, 0xfe, 0x8a, 0x24, 0xbb, 0x9b, 0x96, 0xc6, 0xc2, 0x96, 0x7c, 0xa1, 0x29, 0xdb, 0x32, 0x92, 0xef, 0xfe, 0x8a, 0x24, 0xbb, 0x9b, 0x96, 0xc6, 0xc2, 0x96, 0x7c, 0xa1, 0x29, 0xdb, 0x32,
0x8b, 0x81, 0xaa, 0x66, 0x06, 0x1a, 0x0e, 0xa6, 0xbb, 0x66, 0x4e, 0x75, 0x9d, 0x2a, 0x59, 0x4a, 0x8b, 0x81, 0xaa, 0x66, 0x06, 0x1a, 0x0e, 0xa6, 0xbb, 0x66, 0x4e, 0x75, 0x9d, 0x2a, 0x59, 0x4a,
0xdb, 0x2a, 0x64, 0xc9, 0x23, 0xc9, 0x80, 0x17, 0xbc, 0xdf, 0xb4, 0xdf, 0xb0, 0x5f, 0xb6, 0x11, 0xdb, 0x2a, 0x64, 0xc9, 0x23, 0xc9, 0x80, 0x17, 0xbc, 0xdf, 0xb4, 0xdf, 0xb0, 0x5f, 0xb6, 0x11,
@ -707,7 +741,7 @@ const uint8_t PAGE_settings_leds[] PROGMEM = {
// Autogenerated from wled00/data/settings_dmx.htm, do not edit!! // Autogenerated from wled00/data/settings_dmx.htm, do not edit!!
const uint16_t PAGE_settings_dmx_length = 1612; const uint16_t PAGE_settings_dmx_length = 1612;
const uint8_t PAGE_settings_dmx[] PROGMEM = { const uint8_t PAGE_settings_dmx[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x95, 0x57, 0xdb, 0x72, 0xdb, 0x36, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0x95, 0x57, 0xdb, 0x72, 0xdb, 0x36,
0x10, 0x7d, 0xd7, 0x57, 0x20, 0x78, 0x88, 0xc9, 0x31, 0x43, 0x4a, 0x4e, 0x95, 0x36, 0x32, 0x49, 0x10, 0x7d, 0xd7, 0x57, 0x20, 0x78, 0x88, 0xc9, 0x31, 0x43, 0x4a, 0x4e, 0x95, 0x36, 0x32, 0x49,
0x37, 0x56, 0x5c, 0xdb, 0x1d, 0xdb, 0xf5, 0x44, 0x49, 0xd3, 0x4e, 0xd3, 0xe9, 0x40, 0xe4, 0x4a, 0x37, 0x56, 0x5c, 0xdb, 0x1d, 0xdb, 0xf5, 0x44, 0x49, 0xd3, 0x4e, 0xd3, 0xe9, 0x40, 0xe4, 0x4a,
0x44, 0x4c, 0x02, 0x2c, 0x00, 0x4a, 0x76, 0x2e, 0xff, 0xde, 0x05, 0x48, 0x5d, 0xec, 0xd8, 0x69, 0x44, 0x4c, 0x02, 0x2c, 0x00, 0x4a, 0x76, 0x2e, 0xff, 0xde, 0x05, 0x48, 0x5d, 0xec, 0xd8, 0x69,
@ -814,7 +848,7 @@ const uint8_t PAGE_settings_dmx[] PROGMEM = {
// Autogenerated from wled00/data/settings_ui.htm, do not edit!! // Autogenerated from wled00/data/settings_ui.htm, do not edit!!
const uint16_t PAGE_settings_ui_length = 3090; const uint16_t PAGE_settings_ui_length = 3090;
const uint8_t PAGE_settings_ui[] PROGMEM = { const uint8_t PAGE_settings_ui[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xad, 0x59, 0x6b, 0x73, 0xda, 0x48, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xad, 0x59, 0x6b, 0x73, 0xda, 0x48,
0x16, 0xfd, 0xce, 0xaf, 0xe8, 0x74, 0x52, 0x1e, 0x54, 0x56, 0x04, 0x4e, 0x66, 0x6b, 0x13, 0x40, 0x16, 0xfd, 0xce, 0xaf, 0xe8, 0x74, 0x52, 0x1e, 0x54, 0x56, 0x04, 0x4e, 0x66, 0x6b, 0x13, 0x40,
0x78, 0x63, 0xc7, 0x93, 0x78, 0xca, 0xd9, 0x64, 0x83, 0xbd, 0x99, 0xad, 0xac, 0xcb, 0x23, 0xa4, 0x78, 0x63, 0xc7, 0x93, 0x78, 0xca, 0xd9, 0x64, 0x83, 0xbd, 0x99, 0xad, 0xac, 0xcb, 0x23, 0xa4,
0x06, 0x3a, 0x16, 0x92, 0x46, 0xdd, 0x32, 0x66, 0x09, 0xff, 0x7d, 0xcf, 0xed, 0x96, 0x40, 0x60, 0x06, 0x3a, 0x16, 0x92, 0x46, 0xdd, 0x32, 0x66, 0x09, 0xff, 0x7d, 0xcf, 0xed, 0x96, 0x40, 0x60,
@ -1014,7 +1048,7 @@ const uint8_t PAGE_settings_ui[] PROGMEM = {
// Autogenerated from wled00/data/settings_sync.htm, do not edit!! // Autogenerated from wled00/data/settings_sync.htm, do not edit!!
const uint16_t PAGE_settings_sync_length = 3345; const uint16_t PAGE_settings_sync_length = 3345;
const uint8_t PAGE_settings_sync[] PROGMEM = { const uint8_t PAGE_settings_sync[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xad, 0x5a, 0xeb, 0x73, 0xe2, 0x38, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xad, 0x5a, 0xeb, 0x73, 0xe2, 0x38,
0x12, 0xff, 0xee, 0xbf, 0x42, 0xe3, 0xad, 0x9a, 0x83, 0x0d, 0x01, 0x13, 0x42, 0x26, 0x93, 0x60, 0x12, 0xff, 0xee, 0xbf, 0x42, 0xe3, 0xad, 0x9a, 0x83, 0x0d, 0x01, 0x13, 0x42, 0x26, 0x93, 0x60,
0xcf, 0x85, 0x90, 0x49, 0xb8, 0x9d, 0x24, 0x0c, 0x24, 0xfb, 0xa8, 0xba, 0xaa, 0x2d, 0x61, 0x0b, 0xcf, 0x85, 0x90, 0x49, 0xb8, 0x9d, 0x24, 0x0c, 0x24, 0xfb, 0xa8, 0xba, 0xaa, 0x2d, 0x61, 0x0b,
0x70, 0x62, 0x5b, 0x5e, 0x4b, 0xce, 0xa3, 0x66, 0xe7, 0x7f, 0xbf, 0x6e, 0xc9, 0x36, 0xe0, 0xf0, 0x70, 0x62, 0x5b, 0x5e, 0x4b, 0xce, 0xa3, 0x66, 0xe7, 0x7f, 0xbf, 0x6e, 0xc9, 0x36, 0xe0, 0xf0,
@ -1230,7 +1264,7 @@ const uint8_t PAGE_settings_sync[] PROGMEM = {
// Autogenerated from wled00/data/settings_time.htm, do not edit!! // Autogenerated from wled00/data/settings_time.htm, do not edit!!
const uint16_t PAGE_settings_time_length = 3313; const uint16_t PAGE_settings_time_length = 3313;
const uint8_t PAGE_settings_time[] PROGMEM = { const uint8_t PAGE_settings_time[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xd5, 0x1a, 0x6b, 0x57, 0xdb, 0x38, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xd5, 0x1a, 0x6b, 0x57, 0xdb, 0x38,
0xf6, 0x7b, 0x7e, 0x85, 0x50, 0x7b, 0x98, 0x78, 0x70, 0x9e, 0x90, 0x16, 0x92, 0xd8, 0xdd, 0x10, 0xf6, 0x7b, 0x7e, 0x85, 0x50, 0x7b, 0x98, 0x78, 0x70, 0x9e, 0x90, 0x16, 0x92, 0xd8, 0xdd, 0x10,
0xd2, 0x42, 0x4b, 0x02, 0x67, 0x92, 0x0e, 0xbb, 0xd3, 0xf6, 0x4c, 0x15, 0x5b, 0x49, 0x0c, 0x8e, 0xd2, 0x42, 0x4b, 0x02, 0x67, 0x92, 0x0e, 0xbb, 0xd3, 0xf6, 0x4c, 0x15, 0x5b, 0x49, 0x0c, 0x8e,
0xe4, 0xb5, 0x65, 0x02, 0x4b, 0xf9, 0xef, 0x7b, 0x25, 0x39, 0xce, 0xd3, 0xd0, 0x76, 0x66, 0x3f, 0xe4, 0xb5, 0x65, 0x02, 0x4b, 0xf9, 0xef, 0x7b, 0x25, 0x39, 0xce, 0xd3, 0xd0, 0x76, 0x66, 0x3f,
@ -1444,7 +1478,7 @@ const uint8_t PAGE_settings_time[] PROGMEM = {
// Autogenerated from wled00/data/settings_sec.htm, do not edit!! // Autogenerated from wled00/data/settings_sec.htm, do not edit!!
const uint16_t PAGE_settings_sec_length = 2405; const uint16_t PAGE_settings_sec_length = 2405;
const uint8_t PAGE_settings_sec[] PROGMEM = { const uint8_t PAGE_settings_sec[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xa5, 0x58, 0x6d, 0x53, 0xdb, 0x48, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xa5, 0x58, 0x6d, 0x53, 0xdb, 0x48,
0x12, 0xfe, 0xee, 0x5f, 0x31, 0x4c, 0xaa, 0x58, 0xeb, 0x22, 0x2c, 0x43, 0x72, 0x5b, 0x09, 0x20, 0x12, 0xfe, 0xee, 0x5f, 0x31, 0x4c, 0xaa, 0x58, 0xeb, 0x22, 0x2c, 0x43, 0x72, 0x5b, 0x09, 0x20,
0xe7, 0x20, 0x90, 0x0d, 0x57, 0x10, 0x28, 0x6c, 0x36, 0x77, 0x95, 0x4b, 0xa5, 0xc6, 0xd2, 0xd8, 0xe7, 0x20, 0x90, 0x0d, 0x57, 0x10, 0x28, 0x6c, 0x36, 0x77, 0x95, 0x4b, 0xa5, 0xc6, 0xd2, 0xd8,
0x9a, 0x58, 0xd6, 0x68, 0x67, 0x46, 0x38, 0xbe, 0xec, 0xfe, 0xf7, 0x7b, 0x7a, 0x24, 0xd9, 0x86, 0x9a, 0x58, 0xd6, 0x68, 0x67, 0x46, 0x38, 0xbe, 0xec, 0xfe, 0xf7, 0x7b, 0x7a, 0x24, 0xd9, 0x86,
@ -1601,7 +1635,7 @@ const uint8_t PAGE_settings_sec[] PROGMEM = {
// Autogenerated from wled00/data/settings_um.htm, do not edit!! // Autogenerated from wled00/data/settings_um.htm, do not edit!!
const uint16_t PAGE_settings_um_length = 2640; const uint16_t PAGE_settings_um_length = 2640;
const uint8_t PAGE_settings_um[] PROGMEM = { const uint8_t PAGE_settings_um[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xcd, 0x59, 0xfb, 0x6f, 0xdb, 0x38, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xcd, 0x59, 0xfb, 0x6f, 0xdb, 0x38,
0x12, 0xfe, 0x3d, 0x7f, 0x85, 0xc2, 0x06, 0x89, 0x04, 0x2b, 0xb2, 0xd3, 0xee, 0x02, 0x5d, 0xdb, 0x12, 0xfe, 0x3d, 0x7f, 0x85, 0xc2, 0x06, 0x89, 0x04, 0x2b, 0xb2, 0xd3, 0xee, 0x02, 0x5d, 0xdb,
0x74, 0xae, 0x4d, 0xbb, 0x5b, 0x5f, 0x1f, 0x09, 0xe0, 0x7d, 0xe0, 0x90, 0x0b, 0x1a, 0x59, 0xa2, 0x74, 0xae, 0x4d, 0xbb, 0x5b, 0x5f, 0x1f, 0x09, 0xe0, 0x7d, 0xe0, 0x90, 0x0b, 0x1a, 0x59, 0xa2,
0x6d, 0x36, 0x32, 0xa9, 0x13, 0xa9, 0x3c, 0xce, 0xf1, 0xff, 0x7e, 0xdf, 0x50, 0x92, 0x1f, 0x69, 0x6d, 0x36, 0x32, 0xa9, 0x13, 0xa9, 0x3c, 0xce, 0xf1, 0xff, 0x7e, 0xdf, 0x50, 0x92, 0x1f, 0x69,
@ -1772,7 +1806,7 @@ const uint8_t PAGE_settings_um[] PROGMEM = {
// Autogenerated from wled00/data/settings_2D.htm, do not edit!! // Autogenerated from wled00/data/settings_2D.htm, do not edit!!
const uint16_t PAGE_settings_2D_length = 1745; const uint16_t PAGE_settings_2D_length = 1745;
const uint8_t PAGE_settings_2D[] PROGMEM = { const uint8_t PAGE_settings_2D[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x95, 0x58, 0x5b, 0x6f, 0xdb, 0x36, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0x95, 0x58, 0x5b, 0x6f, 0xdb, 0x36,
0x14, 0x7e, 0xd7, 0xaf, 0x60, 0x88, 0xa2, 0x93, 0x5a, 0x59, 0x8e, 0xbb, 0x0b, 0x8a, 0x58, 0x52, 0x14, 0x7e, 0xd7, 0xaf, 0x60, 0x88, 0xa2, 0x93, 0x5a, 0x59, 0x8e, 0xbb, 0x0b, 0x8a, 0x58, 0x52,
0xd6, 0x34, 0xd9, 0x92, 0x21, 0x41, 0x83, 0xba, 0x4b, 0x31, 0xac, 0x43, 0x4b, 0x4b, 0xc7, 0x16, 0xd6, 0x34, 0xd9, 0x92, 0x21, 0x41, 0x83, 0xba, 0x4b, 0x31, 0xac, 0x43, 0x4b, 0x4b, 0xc7, 0x16,
0x1b, 0x89, 0x14, 0x48, 0xca, 0x49, 0xe6, 0xe6, 0xbf, 0xef, 0x90, 0x92, 0xaf, 0x71, 0xda, 0xee, 0x1b, 0x89, 0x14, 0x48, 0xca, 0x49, 0xe6, 0xe6, 0xbf, 0xef, 0x90, 0x92, 0xaf, 0x71, 0xda, 0xee,
@ -1888,7 +1922,7 @@ const uint8_t PAGE_settings_2D[] PROGMEM = {
// Autogenerated from wled00/data/settings_pin.htm, do not edit!! // Autogenerated from wled00/data/settings_pin.htm, do not edit!!
const uint16_t PAGE_settings_pin_length = 471; const uint16_t PAGE_settings_pin_length = 471;
const uint8_t PAGE_settings_pin[] PROGMEM = { const uint8_t PAGE_settings_pin[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x5d, 0x52, 0x4d, 0x6f, 0x13, 0x31, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0x5d, 0x52, 0x4d, 0x6f, 0x13, 0x31,
0x10, 0xbd, 0xef, 0xaf, 0x30, 0x73, 0x69, 0x82, 0x92, 0x6c, 0xa8, 0xa8, 0x04, 0xaa, 0xbd, 0x42, 0x10, 0xbd, 0xef, 0xaf, 0x30, 0x73, 0x69, 0x82, 0x92, 0x6c, 0xa8, 0xa8, 0x04, 0xaa, 0xbd, 0x42,
0x81, 0x1e, 0xb8, 0x94, 0x48, 0xe5, 0x52, 0x55, 0x55, 0xe5, 0xd8, 0xb3, 0x89, 0x55, 0x7f, 0x2c, 0x81, 0x1e, 0xb8, 0x94, 0x48, 0xe5, 0x52, 0x55, 0x55, 0xe5, 0xd8, 0xb3, 0x89, 0x55, 0x7f, 0x2c,
0xb6, 0x37, 0x21, 0x54, 0xfc, 0x77, 0xc6, 0xbb, 0xa1, 0xa0, 0x5c, 0xd6, 0x7e, 0x33, 0xe3, 0x37, 0xb6, 0x37, 0x21, 0x54, 0xfc, 0x77, 0xc6, 0xbb, 0xa1, 0xa0, 0x5c, 0xd6, 0x7e, 0x33, 0xe3, 0x37,

View File

@ -2,6 +2,14 @@
#include "palettes.h" #include "palettes.h"
#define JSON_PATH_STATE 1
#define JSON_PATH_INFO 2
#define JSON_PATH_STATE_INFO 3
#define JSON_PATH_NODES 4
#define JSON_PATH_PALETTES 5
#define JSON_PATH_FXDATA 6
#define JSON_PATH_NETWORKS 7
/* /*
* JSON API (De)serialization * JSON API (De)serialization
*/ */
@ -872,6 +880,35 @@ void serializePalettes(JsonObject root, AsyncWebServerRequest* request)
} }
} }
void serializeNetworks(JsonObject root)
{
JsonArray networks = root.createNestedArray(F("networks"));
int16_t status = WiFi.scanComplete();
switch (status) {
case WIFI_SCAN_FAILED:
WiFi.scanNetworks(true);
return;
case WIFI_SCAN_RUNNING:
return;
}
for (int i = 0; i < status; i++) {
JsonObject node = networks.createNestedObject();
node["ssid"] = WiFi.SSID(i);
node["rssi"] = WiFi.RSSI(i);
node["bssid"] = WiFi.BSSIDstr(i);
node["channel"] = WiFi.channel(i);
node["enc"] = WiFi.encryptionType(i);
}
WiFi.scanDelete();
if (WiFi.scanComplete() == WIFI_SCAN_FAILED) {
WiFi.scanNetworks(true);
}
}
void serializeNodes(JsonObject root) void serializeNodes(JsonObject root)
{ {
JsonArray nodes = root.createNestedArray("nodes"); JsonArray nodes = root.createNestedArray("nodes");
@ -922,12 +959,13 @@ void serveJson(AsyncWebServerRequest* request)
{ {
byte subJson = 0; byte subJson = 0;
const String& url = request->url(); const String& url = request->url();
if (url.indexOf("state") > 0) subJson = 1; if (url.indexOf("state") > 0) subJson = JSON_PATH_STATE;
else if (url.indexOf("info") > 0) subJson = 2; else if (url.indexOf("info") > 0) subJson = JSON_PATH_INFO;
else if (url.indexOf("si") > 0) subJson = 3; else if (url.indexOf("si") > 0) subJson = JSON_PATH_STATE_INFO;
else if (url.indexOf("nodes") > 0) subJson = 4; else if (url.indexOf("nodes") > 0) subJson = JSON_PATH_NODES;
else if (url.indexOf("palx") > 0) subJson = 5; else if (url.indexOf("palx") > 0) subJson = JSON_PATH_PALETTES;
else if (url.indexOf("fxda") > 0) subJson = 6; else if (url.indexOf("fxda") > 0) subJson = JSON_PATH_FXDATA;
else if (url.indexOf("net") > 0) subJson = JSON_PATH_NETWORKS;
#ifdef WLED_ENABLE_JSONLIVE #ifdef WLED_ENABLE_JSONLIVE
else if (url.indexOf("live") > 0) { else if (url.indexOf("live") > 0) {
serveLiveLeds(request); serveLiveLeds(request);
@ -970,22 +1008,24 @@ void serveJson(AsyncWebServerRequest* request)
switch (subJson) switch (subJson)
{ {
case 1: //state case JSON_PATH_STATE:
serializeState(lDoc); break; serializeState(lDoc); break;
case 2: //info case JSON_PATH_INFO:
serializeInfo(lDoc); break; serializeInfo(lDoc); break;
case 4: //node list case JSON_PATH_NODES:
serializeNodes(lDoc); break; serializeNodes(lDoc); break;
case 5: //palettes case JSON_PATH_PALETTES:
serializePalettes(lDoc, request); break; serializePalettes(lDoc, request); break;
case 6: // FX helper data case JSON_PATH_FXDATA:
serializeModeData(lDoc.as<JsonArray>()); break; serializeModeData(lDoc.as<JsonArray>()); break;
case JSON_PATH_NETWORKS:
serializeNetworks(lDoc); break;
default: //all default: //all
JsonObject state = lDoc.createNestedObject("state"); JsonObject state = lDoc.createNestedObject("state");
serializeState(state); serializeState(state);
JsonObject info = lDoc.createNestedObject("info"); JsonObject info = lDoc.createNestedObject("info");
serializeInfo(info); serializeInfo(info);
if (subJson != 3) if (subJson != JSON_PATH_STATE_INFO)
{ {
JsonArray effects = lDoc.createNestedArray(F("effects")); JsonArray effects = lDoc.createNestedArray(F("effects"));
serializeModeNames(effects); // remove WLED-SR extensions from effect names serializeModeNames(effects); // remove WLED-SR extensions from effect names
@ -1043,4 +1083,4 @@ bool serveLiveLeds(AsyncWebServerRequest* request, uint32_t wsClient)
#endif #endif
return true; return true;
} }
#endif #endif