Build-time detection of secret.h
Added geocode call to devserver and fixed frontend implementation
This commit is contained in:
parent
5d6c5f7b74
commit
6cc2b5de02
5
API.md
5
API.md
@ -6,6 +6,7 @@
|
|||||||
- [POST /api/connection](#post-apiconnection)
|
- [POST /api/connection](#post-apiconnection)
|
||||||
- [GET /api/steps](#get-apisteps)
|
- [GET /api/steps](#get-apisteps)
|
||||||
- [POST /api/steps](#post-apisteps)
|
- [POST /api/steps](#post-apisteps)
|
||||||
|
- [GET /api/geocode/latlong](#get-apigeocodelatlong)
|
||||||
- [POST /api/firmware](#post-apifirmware)
|
- [POST /api/firmware](#post-apifirmware)
|
||||||
|
|
||||||
## GET /api/version
|
## GET /api/version
|
||||||
@ -116,6 +117,10 @@ An optional array 'startTime' can be included which specifies the delay, for eac
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## GET /api/geocode/latlong
|
||||||
|
|
||||||
|
Internally calls the Google Maps Geocode API and returns the results as-is. Only accepts the 'address' GET parameter. If configured in the firmware, the API key is added as well. This prevents the API key from being exposed.
|
||||||
|
|
||||||
## POST /api/firmware
|
## POST /api/firmware
|
||||||
|
|
||||||
Uploads new firmware. The bin file should be posted as a multipart/form-data file attachment. Name is not relevant.
|
Uploads new firmware. The bin file should be posted as a multipart/form-data file attachment. Name is not relevant.
|
16
devserver.js
16
devserver.js
@ -83,6 +83,22 @@ app.post('/api/steps', function(req, res)
|
|||||||
res.sendStatus(400);
|
res.sendStatus(400);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
app.get('/api/geocode/latlong', function(req, res)
|
||||||
|
{
|
||||||
|
res.send({
|
||||||
|
results: [{
|
||||||
|
geometry: {
|
||||||
|
location: {
|
||||||
|
lat: 51.5719149,
|
||||||
|
lng: 4.768323
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
status: 'OK'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
app.listen(3000, function()
|
app.listen(3000, function()
|
||||||
{
|
{
|
||||||
console.log('Development server listening on port 3000')
|
console.log('Development server listening on port 3000')
|
||||||
|
7
platformio-buildflags.bat
Normal file
7
platformio-buildflags.bat
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
@Echo Off
|
||||||
|
echo -DASYNC_TCP_SSL_ENABLED=1
|
||||||
|
|
||||||
|
if exist src\secret.h (
|
||||||
|
echo -DSecretsPresent=1
|
||||||
|
)
|
||||||
|
echo -D
|
@ -18,4 +18,4 @@ lib_deps =
|
|||||||
ESP Async WebServer
|
ESP Async WebServer
|
||||||
NTPClient
|
NTPClient
|
||||||
Time
|
Time
|
||||||
build_flags = -D ASYNC_TCP_SSL_ENABLED=1
|
build_flags = !platformio-buildflags.bat
|
@ -5,108 +5,109 @@
|
|||||||
|
|
||||||
const uint8_t EmbeddedIndex[] PROGMEM = {
|
const uint8_t EmbeddedIndex[] PROGMEM = {
|
||||||
0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xcd,0x59,0x69,0x7b,0xe2,0x38,0x12,0xfe,0x2b,0x8e,
|
0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xcd,0x59,0x69,0x7b,0xe2,0x38,0x12,0xfe,0x2b,0x8e,
|
||||||
0x77,0xf6,0x21,0xd9,0x34,0x04,0x08,0x49,0x77,0xb2,0x21,0x3b,0xdc,0x37,0xe1,0x0e,0xf0,0x4d,0xb6,0x85,
|
0x77,0xf6,0x21,0xd9,0x34,0x67,0x48,0xba,0x93,0x0d,0xd9,0xe1,0x0c,0x10,0x20,0xdc,0x01,0xbe,0xc9,0xb6,
|
||||||
0xad,0x20,0x1f,0xb1,0x64,0x08,0xdd,0x33,0xff,0x7d,0xe4,0x5b,0x80,0x49,0xd2,0xdb,0xcf,0x3c,0xbb,0xf9,
|
0xb0,0x15,0xe4,0x23,0x96,0x0c,0xa1,0x7b,0xe6,0xbf,0x8f,0x7c,0x0b,0x30,0x09,0xbd,0xfd,0xcc,0xb3,0x9b,
|
||||||
0x10,0x23,0xd5,0xa1,0xb7,0x4a,0x55,0xaa,0x92,0xfd,0x70,0x56,0x7d,0xaa,0x4c,0x16,0x83,0x9a,0xa0,0x51,
|
0x0f,0x31,0x52,0x1d,0x7a,0xab,0x54,0xa5,0x2a,0xd9,0xf7,0x67,0xb5,0xe7,0xea,0x78,0xde,0xaf,0x0b,0x1a,
|
||||||
0x1d,0x3f,0x3e,0x04,0xff,0x21,0x50,0x1e,0x1f,0x74,0x48,0x81,0x20,0x6b,0xc0,0x26,0x90,0x16,0xc5,0xe9,
|
0xd5,0xf1,0xc3,0x7d,0xf0,0x1f,0x02,0xe5,0xe1,0x5e,0x87,0x14,0x08,0xb2,0x06,0x6c,0x02,0x69,0x49,0x9c,
|
||||||
0xa4,0x9e,0xfe,0x26,0x3e,0x3e,0x50,0x44,0x31,0x7c,0x7c,0xb8,0x0a,0x9e,0x1e,0x93,0x01,0x74,0x58,0x14,
|
0x8c,0x1b,0xe9,0x6f,0xe2,0xc3,0x3d,0x45,0x14,0xc3,0x87,0xfb,0x6c,0xf0,0xf4,0x98,0x0c,0xa0,0xc3,0x92,
|
||||||
0xa9,0x06,0x75,0x98,0x96,0x4d,0x6c,0xda,0xa2,0x20,0x9b,0x06,0x85,0x06,0x93,0xfb,0x47,0xd6,0xfb,0x13,
|
0x48,0x35,0xa8,0xc3,0xb4,0x6c,0x62,0xd3,0x16,0x05,0xd9,0x34,0x28,0x34,0x98,0xdc,0x3f,0x72,0xde,0x9f,
|
||||||
0xf7,0x58,0x37,0x08,0x6e,0x2d,0xd3,0xa6,0x1c,0xdf,0x16,0x29,0x54,0x2b,0x2a,0x70,0x83,0x64,0x98,0xf6,
|
0xb8,0xc3,0xba,0x46,0x70,0x63,0x99,0x36,0xe5,0xf8,0x36,0x48,0xa1,0x5a,0x49,0x81,0x6b,0x24,0xc3,0xb4,
|
||||||
0x06,0x5f,0x90,0x81,0x28,0x02,0x38,0x4d,0x64,0x80,0x61,0x31,0xc7,0x54,0x60,0x64,0xac,0x05,0x1b,0xe2,
|
0x37,0xf8,0x82,0x0c,0x44,0x11,0xc0,0x69,0x22,0x03,0x0c,0x4b,0x79,0xa6,0x02,0x23,0x63,0x25,0xd8,0x10,
|
||||||
0xa2,0x48,0xe8,0x0e,0x43,0xa2,0x41,0xc8,0x74,0x68,0x36,0x5c,0x15,0x45,0xc9,0x31,0x14,0x0c,0x33,0x32,
|
0x97,0x44,0x42,0xb7,0x18,0x12,0x0d,0x42,0xa6,0x43,0xb3,0xe1,0xb2,0x24,0x4a,0x8e,0xa1,0x60,0x98,0x91,
|
||||||
0x21,0x8c,0x91,0xc8,0x36,0xb2,0xa8,0x40,0x6c,0x39,0x22,0xbc,0xb8,0xf3,0x57,0x3e,0x81,0xfd,0xf0,0x6d,
|
0x09,0x61,0x8c,0x44,0xb6,0x91,0x45,0x05,0x62,0xcb,0x11,0xe1,0xd5,0x9d,0xcf,0xfa,0x04,0xf6,0xc3,0xb7,
|
||||||
0x94,0x4c,0x65,0xf7,0xf8,0xa0,0xa0,0x8d,0x80,0x94,0xa2,0x08,0x2c,0x4b,0xf4,0x47,0x9b,0xb4,0x8c,0x4d,
|
0x51,0x32,0x95,0xed,0xc3,0xbd,0x82,0xd6,0x02,0x52,0x4a,0x22,0xb0,0x2c,0xd1,0x1f,0xad,0xd3,0x32,0x36,
|
||||||
0xb0,0x8e,0x49,0x2e,0x4e,0x80,0x0c,0x68,0x07,0x0c,0x32,0x06,0x84,0x14,0x45,0x57,0x8b,0x37,0x87,0x74,
|
0xc1,0x2a,0x26,0xb9,0x38,0x01,0x32,0xa0,0x1d,0x30,0xc8,0x18,0x10,0x52,0x12,0x5d,0x2d,0xde,0x1c,0xd2,
|
||||||
0xd5,0x5f,0x4d,0x01,0x14,0xdc,0x23,0x1d,0xa8,0xf0,0xca,0x32,0xd4,0x7f,0x4b,0x80,0xc0,0xdb,0xc2,0x17,
|
0x55,0x7f,0x35,0x05,0x50,0x70,0x87,0x74,0xa0,0xc2,0xac,0x65,0xa8,0xff,0x96,0x00,0x81,0x37,0xc5,0x2f,
|
||||||
0x34,0x2b,0x3f,0x8d,0xb6,0xd9,0x4e,0x43,0x35,0x4b,0xec,0xaf,0x3f,0x9e,0x6a,0xb5,0xa9,0xca,0x7e,0x55,
|
0x68,0x5a,0x79,0x1e,0x6e,0x72,0x4f,0x8f,0xaa,0x59,0x66,0x7f,0xbd,0xd1,0x44,0xab,0x4f,0x54,0xf6,0xab,
|
||||||
0xdd,0x61,0x69,0x5b,0x29,0x2d,0xd8,0xa3,0x3c,0x2f,0x6d,0xf4,0xa6,0x3b,0xd1,0x98,0x8f,0xea,0xcf,0xcd,
|
0xe6,0x0e,0xcb,0x9b,0x6a,0x79,0xce,0x1e,0x95,0x59,0x79,0xad,0x37,0xdd,0x89,0xc7,0xd9,0xb0,0xf1,0xd2,
|
||||||
0xd1,0x44,0xca,0x2f,0xb3,0x4a,0xbe,0xbe,0x5b,0x0e,0xcb,0xe5,0x65,0xe3,0x0e,0x2d,0xc7,0xe5,0xb6,0xf4,
|
0x1c,0x8e,0xa5,0xc2,0x22,0xa7,0x14,0x1a,0xdb,0xc5,0xa0,0x52,0x59,0x3c,0xde,0xa2,0xc5,0xa8,0xd2,0x96,
|
||||||
0x5c,0x37,0x96,0xb3,0x36,0x5e,0x3c,0x8f,0x6e,0x64,0x19,0xe3,0x81,0x2b,0x30,0x2f,0xb7,0x47,0xb5,0xfa,
|
0x5e,0x1a,0xc6,0x62,0xda,0xc6,0xf3,0x97,0xe1,0xb5,0x2c,0x63,0xdc,0x77,0x05,0x66,0x95,0xf6,0xb0,0xde,
|
||||||
0x14,0xf6,0x6d,0xf2,0xac,0xd4,0xfa,0xea,0x4b,0x69,0xd8,0x95,0x17,0x65,0xb9,0x34,0x90,0x4b,0x15,0x65,
|
0x98,0xc0,0x9e,0x4d,0x5e,0x94,0x7a,0x4f,0x7d,0x2d,0x0f,0x3a,0xf2,0xbc,0x22,0x97,0xfb,0x72,0xb9,0xaa,
|
||||||
0xd8,0x2f,0x94,0xfa,0xf9,0x5e,0xa5,0xa0,0x8e,0xc8,0xa2,0x7d,0x57,0xeb,0x2b,0xa5,0xc1,0xa2,0x54,0x05,
|
0x0c,0x7a,0xc5,0x72,0xaf,0xd0,0xad,0x16,0xd5,0x21,0x99,0xb7,0x6f,0xeb,0x3d,0xa5,0xdc,0x9f,0x97,0x6b,
|
||||||
0xa5,0x2a,0xb4,0x94,0xa9,0xd6,0xcb,0xbd,0xd6,0x5f,0x1c,0x5b,0xb5,0xee,0xc6,0x72,0xaf,0xa9,0x2a,0x5f,
|
0xa0,0x5c,0x83,0x96,0x32,0xd1,0xba,0xf9,0xb7,0xc6,0xab,0x63,0xab,0xd6,0xed,0x48,0xee,0x36,0x55,0xe5,
|
||||||
0x73,0xd7,0xb3,0xeb,0x15,0x9d,0x5a,0x37,0xb0,0xa9,0xf6,0xea,0x39,0xdb,0x6e,0xd4,0x80,0x73,0x3b,0x6b,
|
0x6b,0xfe,0x6a,0x7a,0xb5,0xa4,0x13,0xeb,0x1a,0x36,0xd5,0x6e,0x23,0x6f,0xdb,0x8f,0x75,0xe0,0xdc,0x4c,
|
||||||
0x56,0xf3,0xcd,0x9e,0xd4,0xbc,0x79,0x6d,0x3f,0x75,0x9b,0x36,0xb8,0x5c,0xad,0xbf,0x4b,0x64,0x31,0x22,
|
0x9b,0xb5,0x42,0xb3,0x2b,0x35,0xaf,0xdf,0xda,0xcf,0x9d,0xa6,0x0d,0x2e,0x97,0xab,0xef,0x12,0x99,0x0f,
|
||||||
0x5a,0xef,0x9b,0xd5,0x9d,0xa8,0xd3,0x96,0x3a,0x56,0x37,0x4e,0xaf,0x67,0x2e,0xb6,0x97,0xa8,0xb7,0x98,
|
0x89,0xd6,0xfd,0x66,0x75,0xc6,0xea,0xa4,0xa5,0x8e,0xd4,0xb5,0xd3,0xed,0x9a,0xf3,0xcd,0x25,0xea,0xce,
|
||||||
0xd8,0xb7,0x43,0xad,0xbf,0xe8,0xd9,0x7d,0xd4,0xdf,0x6d,0x5b,0x5d,0xbc,0x9b,0x75,0x14,0x79,0xb7,0x1b,
|
0xc7,0xf6,0xcd,0x40,0xeb,0xcd,0xbb,0x76,0x0f,0xf5,0xb6,0x9b,0x56,0x07,0x6f,0xa7,0x4f,0x8a,0xbc,0xdd,
|
||||||
0x10,0x5d,0x1e,0x91,0xdd,0xf4,0x26,0xbb,0x56,0x9b,0x74,0x38,0x74,0xf2,0x25,0xa5,0xdf,0xae,0x5b,0xd5,
|
0xf6,0x89,0x2e,0x0f,0xc9,0x76,0x72,0x9d,0x5b,0xa9,0x4d,0x3a,0x18,0x38,0x85,0xb2,0xd2,0x6b,0x37,0xac,
|
||||||
0x75,0xa9,0x53,0x68,0x5d,0x75,0x5b,0xcf,0x3d,0x29,0x5f,0x22,0xad,0xb2,0xfc,0x9a,0x45,0xa3,0x06,0x1c,
|
0xda,0xaa,0xfc,0x54,0x6c,0x65,0x3b,0xad,0x97,0xae,0x54,0x28,0x93,0x56,0x45,0x7e,0xcb,0xa1,0xe1,0x23,
|
||||||
0x36,0x06,0x93,0xe5,0x6a,0x76,0x3b,0xac,0x65,0x2f,0xd5,0x6a,0xa3,0x9e,0xb7,0x4d,0xd2,0xa8,0xa9,0xbd,
|
0x1c,0x3c,0xf6,0xc7,0x8b,0xe5,0xf4,0x66,0x50,0xcf,0x5d,0xaa,0xb5,0xc7,0x46,0xc1,0x36,0xc9,0x63,0x5d,
|
||||||
0xe1,0x5b,0xab,0xa4,0x19,0xcb,0x12,0x1a,0xf4,0xbf,0x15,0x1c,0x6b,0xb4,0xca,0x5e,0x3d,0x61,0x8b,0x74,
|
0xed,0x0e,0xde,0x5b,0x65,0xcd,0x58,0x94,0x51,0xbf,0xf7,0xad,0xe8,0x58,0xc3,0x65,0x2e,0xfb,0x8c,0x2d,
|
||||||
0x2b,0x65,0xeb,0x7a,0xf7,0x9a,0x95,0x35,0x95,0x56,0xa6,0xd3,0xa5,0x3d,0xda,0xde,0x0e,0xab,0x4f,0xd7,
|
0xd2,0xa9,0x56,0xac,0xab,0xed,0x5b,0x4e,0xd6,0x54,0x5a,0x9d,0x4c,0x16,0xf6,0x70,0x73,0x33,0xa8,0x3d,
|
||||||
0xb5,0xe7,0xe6,0xf8,0xb5,0x7e,0x47,0x81,0xbd,0x04,0xe3,0x4e,0x7b,0x0e,0xdb,0x55,0x45,0x1a,0x62,0x52,
|
0x5f,0xd5,0x5f,0x9a,0xa3,0xb7,0xc6,0x2d,0x05,0xf6,0x02,0x8c,0x9e,0xda,0x33,0xd8,0xae,0x29,0xd2,0x00,
|
||||||
0xcb,0x76,0xaa,0xb7,0xed,0xfe,0x55,0xc7,0x1c,0x91,0x86,0xf6,0x36,0xef,0x54,0x70,0xa5,0xd3,0x6c,0xb7,
|
0x93,0x7a,0xee,0xa9,0x76,0xd3,0xee,0x65,0x9f,0xcc,0x21,0x79,0xd4,0xde,0x67,0x4f,0x55,0x5c,0x7d,0x6a,
|
||||||
0x56,0xeb,0x89,0xb6,0xed,0x3d,0x6b,0xa5,0x5b,0xa5,0x3c,0x36,0xf1,0x08,0xbd,0xac,0xdb,0x4f,0x4a,0x6e,
|
0xb6,0x5b,0xcb,0xd5,0x58,0xdb,0x74,0x5f,0xb4,0xf2,0x8d,0x52,0x19,0x99,0x78,0x88,0x5e,0x57,0xed,0x67,
|
||||||
0x39,0xdd,0xdc,0xed,0x86,0x77,0x4f,0xd6,0xab,0xd4,0xb4,0x10,0x98,0xce,0x40,0x4d,0x5a,0xd6,0xbe,0xd2,
|
0x25,0xbf,0x98,0xac,0x6f,0xb7,0x83,0xdb,0x67,0xeb,0x4d,0x6a,0x5a,0x08,0x4c,0xa6,0xa0,0x2e,0x2d,0xea,
|
||||||
0x56,0xeb,0xc5,0x2c,0x77,0xe6,0x3b,0x62,0x92,0x9c,0x5c,0x98,0x7d,0x83,0x52,0xb7,0xa6,0x48,0x9b,0xbc,
|
0x5f,0x69,0xab,0xf5,0x6a,0x56,0x9e,0x66,0x5b,0x62,0x92,0xbc,0x5c,0x9c,0x7e,0x83,0x52,0xa7,0xae,0x48,
|
||||||
0x24,0xf7,0x48,0xed,0xab,0xfa,0xe2,0x94,0x95,0xcd,0x7c,0x34,0x6e,0x17,0xea,0x97,0x57,0xdb,0xd7,0xd6,
|
0xeb,0x82,0x24,0x77,0x49,0xfd,0xab,0xfa,0xea,0x54,0x94,0xf5,0x6c,0x38,0x6a,0x17,0x1b,0x97,0xd9,0xcd,
|
||||||
0x7c,0x6e,0xb7,0x1a,0x5b,0x7d,0x7e,0xfd,0x7d,0x0b,0xe4,0x6e,0x55,0x83,0xfd,0xa7,0xbb,0xdc,0xd3,0x4b,
|
0x5b,0x6b,0x36,0xb3,0x5b,0x8f,0x1b,0x7d,0x76,0xf5,0x7d,0x03,0xe4,0x4e,0x4d,0x83,0xbd,0xe7,0xdb,0xfc,
|
||||||
0x77,0xd8,0x51,0x72,0x85,0x59,0xaf,0x5a,0x31,0x16,0x6a,0xe5,0x6d,0xf6,0xd2,0xba,0xee,0x4f,0x60,0x4e,
|
0xf3,0x6b,0x67,0xf0,0xa4,0xe4,0x8b,0xd3,0x6e,0xad,0x6a,0xcc,0xd5,0xea,0xfb,0xf4,0xb5,0x75,0xd5,0x1b,
|
||||||
0x1f,0x9b,0x83,0x6a,0xe1,0xee,0xad,0x30,0xb6,0x59,0x70,0xdc,0xbd,0x0e,0x8c,0x02,0x34,0x37,0x95,0x9e,
|
0xc3,0xbc,0x3e,0x32,0xfb,0xb5,0xe2,0xed,0x7b,0x71,0x64,0xb3,0xe0,0xb8,0x7d,0xeb,0x1b,0x45,0x68,0xae,
|
||||||
0x17,0x3d,0x35,0x5c,0x9f,0xac,0xc7,0xce,0x50,0xaf,0x54,0x58,0x24,0x6a,0xb9,0xc7,0x1f,0x3f,0x84,0xdf,
|
0xab,0x5d,0x2f,0x7a,0xea,0xb8,0x31,0x5e,0x8d,0x9c,0x81,0x5e,0xad,0xb2,0x48,0xd4,0xf2,0x0f,0x3f,0x7e,
|
||||||
0xe8,0x79,0xca,0x4b,0xd1,0xd4,0x85,0xf0,0xe7,0x9f,0x2c,0xdc,0x73,0x8c,0x92,0x77,0x29,0x1b,0x68,0x13,
|
0x08,0xbf,0xd1,0xf3,0x94,0x97,0xa2,0xa9,0x0b,0xe1,0xcf,0x3f,0x59,0xb8,0xe7,0x19,0xa5,0xe0,0x52,0xd6,
|
||||||
0x64,0x1a,0x19,0xb2,0x23,0x14,0xea,0xad,0xaa,0x70,0x56,0x2c,0x0a,0x86,0x83,0xb1,0xf0,0x1f,0x4f,0x2a,
|
0xd0,0x26,0xc8,0x34,0x32,0x64,0x4b,0x28,0xd4,0x5b,0x35,0xe1,0xac,0x54,0x12,0x0c,0x07,0x63,0xe1,0x3f,
|
||||||
0x9c,0x67,0x82,0x97,0x42,0xea,0x5e,0x48,0xb1,0xc7,0x91,0x0c,0x9b,0x4e,0xf9,0x7a,0xf3,0x7b,0xf9,0xb0,
|
0x9e,0x54,0x38,0xcf,0x04,0x2f,0x85,0xd4,0x9d,0x90,0x62,0x8f,0x03,0x19,0x36,0x9d,0xf2,0xf5,0x16,0x76,
|
||||||
0x45,0x2b,0x44,0x28,0xa0,0x0e,0xd9,0xcf,0x13,0x96,0x3e,0x06,0x94,0x29,0xd3,0xb1,0x3f,0x8f,0x0c,0x05,
|
0xf2,0x61,0x83,0x96,0x88,0x50,0x40,0x1d,0xb2,0x9b,0x27,0x2c,0x7d,0x0c,0x28,0x53,0xa6,0x63,0x77,0x1e,
|
||||||
0xc9,0x80,0xba,0x27,0xc6,0xbd,0x9b,0x39,0x69,0x5f,0xd8,0x57,0x34,0xf6,0x7e,0x67,0x80,0x95,0x81,0x06,
|
0x19,0x0a,0x92,0x01,0x75,0x4f,0x8c,0x3b,0x37,0x73,0xd2,0xbe,0xb0,0xaf,0x68,0xe4,0xfd,0xce,0x00,0x2b,
|
||||||
0x90,0x30,0x54,0x18,0xc2,0x54,0xa0,0x09,0x2a,0x29,0x17,0x84,0x82,0x48,0x3c,0xe1,0xe6,0x37,0xd3,0x1d,
|
0x03,0x0d,0x20,0x61,0xa8,0x30,0x84,0xa9,0x40,0x13,0x54,0x52,0x2e,0x08,0x05,0x91,0x78,0xc2,0xcd,0x6f,
|
||||||
0x9a,0xcf,0xab,0x90,0x65,0x48,0x88,0x65,0x22,0x83,0x66,0x62,0xaf,0x08,0x8c,0xf1,0xd4,0x3a,0xfb,0xf3,
|
0xa6,0x3b,0x34,0x9f,0x57,0x21,0xcb,0x90,0x10,0xcb,0x44,0x06,0xcd,0xc4,0x5e,0x11,0x18,0xe3,0xb1,0x75,
|
||||||
0xc8,0x62,0x8b,0xbd,0xa3,0x93,0xc1,0xf0,0x04,0x03,0x67,0xbb,0x20,0x7e,0xc9,0x7a,0x15,0xd2,0x67,0x54,
|
0x76,0xe7,0x91,0xc5,0x16,0xfb,0x40,0x27,0x83,0xe1,0x09,0x06,0xce,0x76,0x41,0xfc,0x92,0xf5,0x2a,0xa4,
|
||||||
0xf7,0x56,0x62,0x42,0xfe,0x82,0xe7,0x17,0xa7,0xed,0x23,0x3e,0xa3,0x6e,0x2a,0xf0,0xc0,0xbe,0x24,0x4d,
|
0x2f,0xa8,0xe1,0xad,0xc4,0x84,0xfc,0x05,0xcf,0x2f,0x8e,0xdb,0x47,0x7c,0x46,0xdd,0x54,0xe0,0x9e,0x7d,
|
||||||
0x13,0xf8,0x46,0xcf,0x39,0xa4,0xfc,0x7f,0xff,0xf0,0x43,0xec,0x3c,0x65,0xe7,0x9f,0x82,0x0c,0x55,0x0c,
|
0x49,0x9a,0xc6,0xf0,0x9d,0x9e,0x73,0x48,0xf9,0xff,0xfe,0xe1,0x87,0xd8,0x79,0xca,0xce,0x3f,0x05,0x19,
|
||||||
0xc1,0x86,0xe3,0x70,0xf9,0x60,0x1c,0xad,0x14,0x8c,0x5b,0xa1,0x4d,0xfb,0x9e,0xf0,0x75,0x9e,0x45,0x4a,
|
0xaa,0x18,0x82,0x0d,0xc7,0xe1,0xf2,0xc1,0x38,0x5a,0x29,0x18,0xb7,0x42,0x9b,0x76,0x3d,0xe1,0xeb,0x3c,
|
||||||
0x78,0x37,0x50,0x20,0xb9,0xe1,0x22,0x39,0x94,0x9a,0x46,0x38,0xe9,0x8f,0x98,0x63,0x82,0xf1,0x0f,0x21,
|
0x8b,0x94,0xf0,0x6e,0xa0,0x40,0x72,0xc3,0x45,0x72,0x28,0x35,0x8d,0x70,0xd2,0x1f,0x31,0xc7,0x04,0xe3,
|
||||||
0xe5,0x4f,0xa5,0x4d,0x87,0xb2,0x3a,0x00,0x59,0x68,0x02,0xe6,0xd3,0x0d,0x9c,0x00,0x89,0xc5,0xb0,0x90,
|
0x1f,0x42,0xca,0x9f,0x4a,0x9b,0x0e,0x65,0x75,0x00,0xb2,0xd0,0x04,0xcc,0xa7,0x6b,0x38,0x06,0x12,0x8b,
|
||||||
0xf2,0x9d,0xc7,0xc2,0x52,0x14,0x7e,0x97,0x31,0x92,0xd7,0xec,0x40,0x8f,0x18,0x62,0x7a,0x64,0x80,0x3f,
|
0x61,0x21,0xe5,0x3b,0x8f,0x85,0xa5,0x28,0xfc,0x2e,0x63,0x24,0xaf,0xd8,0x81,0x1e,0x31,0xc4,0xf4,0xc8,
|
||||||
0xce,0xb0,0xd5,0x27,0x5c,0xa2,0xf8,0x8b,0x3c,0x0a,0xbf,0x0c,0x87,0xda,0x48,0x55,0x59,0xde,0x9c,0x06,
|
0x00,0x7f,0x9c,0x61,0xab,0x8f,0xb9,0x44,0xf1,0x17,0x79,0x10,0x7e,0x19,0x0e,0xb5,0x91,0xaa,0xb2,0xbc,
|
||||||
0x14,0x71,0x44,0x90,0xc2,0x99,0xbf,0x0d,0x54,0x1c,0x89,0xa7,0x61,0x71,0x3c,0x11,0xb0,0x78,0xee,0x6f,
|
0x39,0x0e,0x28,0xe2,0x88,0x20,0x85,0x33,0x7f,0x1b,0xa8,0x38,0x12,0x8f,0xc3,0xe2,0x78,0x22,0x60,0xf1,
|
||||||
0x83,0xb6,0x42,0xb6,0xbe,0x05,0x36,0x3c,0x0d,0x2c,0xe2,0x88,0x60,0x85,0x33,0x27,0x40,0x1d,0xc5,0x1f,
|
0xdc,0xdf,0x06,0x6d,0x89,0x6c,0x7d,0x03,0x6c,0x78,0x1c,0x58,0xc4,0x11,0xc1,0x0a,0x67,0x8e,0x80,0x3a,
|
||||||
0xa7,0x8e,0x0f,0x88,0x07,0xed,0xfa,0x30,0x28,0xf8,0xa3,0xf3,0xda,0x53,0xc1,0x6a,0xbc,0x61,0x39,0x54,
|
0x88,0x3f,0x4e,0x1d,0x1f,0x10,0xf7,0xda,0xd5,0x7e,0x50,0xf0,0x47,0xe7,0x95,0xa7,0x82,0xd5,0x78,0xc3,
|
||||||
0xa0,0x3b,0x8b,0x75,0x30,0x36,0x8b,0x63,0x53,0x0c,0xda,0x19,0x80,0xf1,0x98,0x42,0x8b,0x30,0x73,0x37,
|
0x72,0xa8,0x40,0xb7,0x16,0xeb,0x60,0x6c,0x16,0xc7,0xa6,0x18,0xb4,0x33,0x00,0xe3,0x11,0x85,0x16,0x61,
|
||||||
0x00,0x3b,0x6e,0x2f,0x64,0x3b,0x50,0x64,0x8b,0xba,0x19,0x89,0x79,0x06,0xaf,0xcd,0x08,0x46,0x13,0x97,
|
0xe6,0xae,0x01,0x76,0xdc,0x5e,0xc8,0x76,0xa0,0xc8,0x16,0x75,0x33,0x12,0xf3,0x0c,0x5e,0x9b,0x11,0x8c,
|
||||||
0x89,0x35,0x35,0x40,0x82,0x38,0xca,0x32,0x77,0x90,0x46,0x86,0xeb,0x22,0x51,0x58,0x99,0xf6,0x21,0xfb,
|
0xc6,0x2e,0x13,0x6b,0x6a,0x80,0x04,0x71,0x94,0x65,0xee,0x20,0x8d,0x0c,0xd7,0x45,0xa2,0xb0,0x34,0xed,
|
||||||
0x3e,0x4e,0x9e,0x16,0xc0,0xf5,0x34,0x70,0xa6,0xff,0x14,0xee,0x15,0xc0,0xe4,0x63,0xe0,0x75,0x8f,0xeb,
|
0x7d,0xf6,0x5d,0x9c,0x3c,0x2d,0x80,0xeb,0x69,0xe0,0x4c,0xff,0x29,0xdc,0x4b,0x80,0xc9,0xe7,0xc0,0x1b,
|
||||||
0xf3,0xc8,0x03,0xfe,0x64,0xe8,0x1e,0xf1,0x04,0xf6,0x50,0x37,0xc1,0x88,0xb5,0x59,0x07,0x35,0x85,0x95,
|
0x1e,0xd7,0xe9,0xc8,0x03,0xfe,0x64,0xe8,0x1e,0xf1,0x08,0xf6,0x50,0x37,0xc1,0x88,0xb5,0x59,0x7b,0x35,
|
||||||
0x22,0x4b,0x0c,0x37,0x36,0xc4,0xc9,0x5a,0x3f,0x0b,0x44,0x51,0xe8,0x59,0xe5,0x2d,0xdc,0x03,0x54,0xcb,
|
0x85,0x95,0x22,0x4b,0x0c,0x37,0x36,0xc4,0xc9,0x5a,0x3f,0x0b,0x44,0x51,0xe8,0x59,0xe5,0x2d,0xdc,0x05,
|
||||||
0xac,0xb0,0x69,0xda,0xe7,0x21,0xef,0xcc,0x25,0x0a,0x57,0x42,0xfe,0xe6,0x46,0xf8,0x97,0x90,0xcb,0x66,
|
0x54,0xcb,0x2c,0xb1,0x69,0xda,0xe7,0x21,0xef,0xd4,0x25,0x0a,0x59,0xa1,0x70,0x7d,0x2d,0xfc,0x4b,0xc8,
|
||||||
0x5d,0x0c,0xff,0x64,0x2d,0x22,0x53,0x90,0xb0,0x3a,0xdf,0x01,0xee,0x7b,0xd4,0x50,0x99,0xc1,0x3a,0x32,
|
0xe7,0x72,0x2e,0x86,0x7f,0xb2,0x16,0x91,0x29,0x48,0x58,0x9d,0xef,0x00,0x77,0x3d,0x6a,0xa8,0xcc,0x60,
|
||||||
0x8a,0x62,0x96,0x3d,0xc1,0x5b,0x51,0x64,0x2a,0xc5,0x7d,0xe9,0xc8,0xa7,0x19,0xc3,0xd1,0x25,0xc8,0x39,
|
0x1d,0x19,0x25,0x31,0xc7,0x9e,0xe0,0xbd,0x24,0x32,0x95,0xe2,0xae,0x74,0xe4,0xd3,0x8c,0xe1,0xe8,0x12,
|
||||||
0x67,0xe6,0x63,0x3c,0x3a,0x85,0x13,0xac,0x3c,0x8b,0xb7,0x63,0x93,0xf6,0x3c,0x7c,0xee,0x92,0xbf,0x08,
|
0xe4,0x9c,0x33,0xf5,0x31,0x1e,0x9c,0xc2,0x09,0x56,0x9e,0xc5,0xdb,0xb1,0x4e,0x7b,0x1e,0x3e,0x77,0xc9,
|
||||||
0xac,0x90,0xc0,0xb7,0x0b,0xf6,0x10,0xc8,0x67,0xbd,0xe0,0x32,0x66,0x36,0xff,0x5b,0x17,0xc4,0x18,0x0e,
|
0x5f,0x04,0x56,0x48,0xe0,0xfb,0x05,0x7b,0x08,0xe4,0x54,0x2f,0xb8,0x8c,0x99,0xf5,0xff,0xd6,0x05,0x31,
|
||||||
0xec,0x4f,0xae,0x48,0xfb,0xd9,0xcb,0x9d,0x9e,0x0f,0xcc,0x17,0xba,0xf0,0x3b,0x71,0x24,0x1d,0xd1,0x8c,
|
0x86,0x3d,0xfb,0x93,0x2b,0xd2,0x6e,0xf6,0x72,0xa7,0xe7,0x3d,0xf3,0x85,0x2e,0xfc,0x4e,0x1c,0x49,0x47,
|
||||||
0x65,0xc3,0x8d,0x77,0xa5,0x60,0xed,0x3c,0xde,0x4d,0x02,0x36,0x97,0x0b,0x41,0xac,0xb0,0xcb,0x0c,0x9f,
|
0x34,0x63,0xd9,0x70,0xed,0x5d,0x29,0x58,0x3b,0x8f,0xb7,0xe3,0x80,0xcd,0xe5,0x42,0x10,0x2b,0xec,0x32,
|
||||||
0xef,0xf1,0x89,0x8b,0x74,0x38,0x39,0xce,0xfa,0xa8,0xb1,0x01,0xb6,0xe1,0x55,0xc3,0x60,0x27,0x8e,0x8b,
|
0xc3,0xe7,0x7b,0x7c,0xe2,0x22,0x1d,0x8e,0x0f,0xb3,0x3e,0x6a,0x6c,0x80,0x6d,0x78,0xd5,0x30,0xd8,0x89,
|
||||||
0x6f,0xd4,0x3c,0xfc,0xf1,0x87,0x90,0x40,0xf5,0xa3,0xde,0x3d,0xe9,0xae,0x13,0x8e,0x7b,0xb6,0x78,0x8b,
|
0xc3,0xe2,0x1b,0x35,0x0f,0x7f,0xfc,0x21,0x24,0x50,0xfd,0xa8,0x77,0x4f,0xba,0xab,0x84,0xe3,0x9e,0x2d,
|
||||||
0x5d,0x84,0x6c,0x03,0x52,0xbe,0x87,0xf0,0x13,0xcc,0xdb,0x69,0x0c,0x28,0x36,0xb9,0xf2,0xbb,0x27,0xdb,
|
0xde,0x62,0x17,0x21,0xdb,0x80,0x94,0xef,0x21,0xfc,0x04,0xf3,0x76,0x1a,0x03,0x8a,0x4d,0xae,0xfc,0xee,
|
||||||
0x05,0xb4,0x6b,0x06,0xb5,0x38,0xca,0x22,0x7e,0x87,0x28,0x2b,0xf9,0x7e,0x0e,0x87,0x7a,0xe2,0x1c,0xdf,
|
0xc8,0x76,0x00,0xed,0x98,0x41,0x2d,0x8e,0xb2,0x88,0xdf,0x21,0xca,0x4a,0xbe,0x9f,0xc3,0xa1,0x9e,0x38,
|
||||||
0xd3,0x94,0x89,0xd6,0xd9,0x5b,0xdc,0x94,0x3d,0x2b,0xc4,0xc4,0x64,0x4f,0x86,0x14,0x88,0x7c,0x0a,0x53,
|
0xc7,0x77,0x34,0x65,0xa2,0x75,0x76,0xb6,0xdf,0x91,0x4c,0xcb,0x35,0x83,0x88,0xbb,0xa0,0x4c,0xd9,0xb3,
|
||||||
0xa4,0xfe,0x14,0xa8,0x90,0xe1,0x64,0x9d,0xf1,0x0b,0x46,0xbc,0xf7,0x04,0x02,0x5b,0xd6,0xba,0x91,0xe2,
|
0x4e,0x4c,0x3c,0x04,0x92,0xa1,0x06,0x22,0x27,0x61,0x8d,0xd4,0x1f,0x03,0x1b,0x32,0x1c,0xad,0x3f,0x7e,
|
||||||
0xfb,0xb0,0x45,0x0b,0x49,0x6c,0x33,0x23,0xea,0xbb,0x06,0x8c,0x3d,0xf6,0xc3,0xc2,0x12,0xc7,0xd2,0xbb,
|
0x21,0x89,0x63,0x82,0x40,0x60,0xcb,0x5a,0x27,0x52,0x7c,0x17,0xb6,0x6e,0x21,0x89,0x6d,0x72,0x44,0xfd,
|
||||||
0x51,0xa5,0x9b,0xae,0x8a,0xc3,0xb8,0xe2,0xa4,0xaf,0xdc,0xd0,0xfd,0x28,0xd4,0xf7,0x2a,0xf2,0x7b,0xc1,
|
0xd0,0x80,0x91,0xc7,0x9e,0x58,0x70,0xb2,0x71,0xa4,0x7d,0x18,0x73,0xba,0xe9,0x2a,0xda,0x8f,0x3a,0x4e,
|
||||||
0x5e,0xe1,0x1b,0xcd,0x24,0x60,0x7c,0x1d,0x3f,0x00,0xc5,0x6f,0x8d,0xac,0x41,0x79,0x2d,0x99,0x6f,0xc1,
|
0x3a,0xeb,0x06,0xf6,0x67,0x89,0xb0,0x53,0xaf,0x3f,0x4a,0x85,0x2a,0xdf,0x86,0x26,0x01,0xe3,0xab,0xfc,
|
||||||
0xb1,0x1f,0x77,0xba,0xdc,0x0e,0x71,0xaa,0x78,0x86,0x4f,0x54,0x05,0x9e,0xfb,0x18,0x17,0x47,0xde,0x8f,
|
0x1e,0x28,0x7e,0x83,0x64,0x0d,0xca,0x2b,0xc9,0x7c,0x0f,0x8a,0x42,0xdc,0x07,0x73,0xfb,0xc4,0xa9,0xe2,
|
||||||
0x1d,0xfe,0x48,0xd3,0x3e,0x16,0x6e,0xc6,0x0a,0xbc,0xe3,0x4c,0x78,0xc7,0xc2,0x20,0x49,0x93,0xad,0x0b,
|
0x19,0x4e,0xa8,0x19,0x3c,0xf7,0x21,0x2e,0x8e,0xbc,0x1b,0x41,0xfc,0x81,0xa7,0x7d,0x2e,0xdc,0x8c,0x15,
|
||||||
0x89,0x1f,0x5b,0x16,0x71,0x1e,0x03,0xe3,0x3a,0xf4,0x9f,0xb7,0x8a,0x13,0x3e,0xb4,0x8a,0xcf,0x52,0x42,
|
0x78,0x87,0x9d,0xf0,0x81,0x85,0x41,0x0a,0x27,0x5b,0x17,0x12,0x3f,0xb7,0x2c,0xe2,0x3c,0x04,0xc6,0xf5,
|
||||||
0x90,0x92,0x28,0xce,0xe6,0x3f,0x93,0x86,0x9e,0x7c,0xb2,0x0b,0x3c,0x0a,0x97,0x43,0x67,0xef,0xf8,0xc7,
|
0xef,0x3f,0x6f,0x15,0x27,0xbc,0x6f,0x15,0x9f,0xab,0x84,0x20,0x25,0x51,0x9c,0xcd,0x9f,0x92,0x8c,0x9e,
|
||||||
0xc3,0x62,0x31,0x83,0xb6,0xa6,0x9d,0x88,0x27,0xa4,0x9d,0xc6,0x14,0x49,0x7b,0xb8,0xe2,0x51,0x12,0xb6,
|
0x7c,0xb2,0x0b,0x3c,0x0a,0x97,0x49,0x67,0x1f,0xf8,0xc7,0xc3,0x62,0x31,0x83,0x36,0xa6,0x9d,0x88,0x27,
|
||||||
0x98,0xfa,0x11,0xbe,0xf7,0x22,0x40,0xd1,0x64,0x2b,0x59,0xbf,0x4f,0xf9,0xa4,0xed,0xa7,0x63,0xc3,0x53,
|
0xa4,0x1d,0xc7,0x14,0x49,0x7b,0xb8,0xe2,0x51,0x12,0xb6,0x98,0xfa,0x19,0xbe,0x8f,0x22,0x40,0xd1,0x64,
|
||||||
0x93,0xe0,0x0c,0x77,0xfe,0xe7,0x23,0xc2,0x95,0x3a,0x0a,0x05,0xbe,0x5e,0x3b,0x92,0x69,0xb9,0x9c,0x64,
|
0x2b,0x59,0xbf,0x4f,0x39,0xd1,0xf6,0xe3,0xb1,0xe1,0xa9,0x49,0x70,0x86,0x3b,0xff,0xf3,0x11,0xe1,0x4a,
|
||||||
0x7f,0x5b,0x50,0x22,0x06,0x64,0x01,0x45,0xb1,0x59,0xe2,0x7c,0x26,0x4a,0xd0,0x09,0x3f,0xa1,0x0f,0xbd,
|
0x1d,0x84,0xc2,0x09,0xc7,0x39,0x4a,0xc4,0x80,0x2c,0xa0,0x28,0x36,0x4b,0x9c,0x53,0xa2,0x04,0x1d,0xf1,
|
||||||
0xe4,0x56,0xc6,0x43,0xc7,0xee,0x07,0xb0,0x23,0xb1,0x02,0xa8,0x03,0xb2,0x4e,0x0c,0xe3,0x88,0xfa,0xa9,
|
0x13,0xfa,0xd4,0x4b,0x6e,0xdd,0xdc,0x77,0xec,0x6e,0x00,0x3b,0x12,0x2b,0x8f,0x3a,0x20,0xab,0xc4,0x30,
|
||||||
0x60,0x8e,0x75,0x25,0x87,0x34,0x47,0xff,0x45,0xd8,0x2a,0xa0,0x70,0x0b,0x76,0x49,0x98,0x03,0xd2,0x67,
|
0x8e,0xa8,0x27,0x05,0x73,0xac,0x2b,0x39,0xa4,0x39,0xfa,0x2f,0xc2,0x56,0x01,0x85,0x1b,0xb0,0x4d,0xc2,
|
||||||
0x00,0x87,0x5a,0x12,0xd1,0x46,0xc4,0xff,0x06,0xea,0x51,0x2f,0xa1,0x99,0x84,0xba,0x37,0x80,0x24,0xc4,
|
0x1c,0x90,0x4e,0x01,0x1c,0x6a,0x49,0x44,0x1b,0x11,0xff,0x1b,0xa8,0x07,0x9d,0x86,0x66,0x12,0xea,0xde,
|
||||||
0x21,0xed,0x23,0xc8,0xf7,0x16,0x06,0x32,0xd4,0x4c,0xac,0xb8,0x9d,0xdc,0x09,0x25,0x83,0x98,0x27,0x75,
|
0x0f,0x92,0x10,0x87,0xb4,0xcf,0x20,0xdf,0x59,0x18,0xc8,0x50,0x33,0xb1,0xe2,0xf6,0x79,0x47,0x94,0xf4,
|
||||||
0xe1,0x9b,0x19,0xad,0x9d,0x68,0x67,0x4c,0xfd,0x30,0xe1,0xb8,0x68,0xf7,0xab,0x32,0x89,0xba,0xd2,0xbd,
|
0x63,0x9e,0xd4,0x85,0x6f,0x66,0xb4,0x76,0xa2,0x9d,0x31,0xf5,0xd3,0x84,0xe3,0xa2,0xdd,0xaf,0xcd,0x24,
|
||||||
0xe9,0xb4,0x65,0x23,0x1d,0xd8,0xcc,0x77,0x3e,0x7c,0xbf,0x70,0xee,0x77,0x04,0x60,0xe3,0xf5,0x76,0xe1,
|
0xea,0x59,0x77,0xa6,0xd3,0x96,0x8d,0x74,0x60,0x33,0xdf,0xf9,0xf0,0xfd,0xc2,0xb9,0xdb,0x17,0x80,0xb5,
|
||||||
0x2d,0xc8,0x1f,0x07,0xef,0xc3,0xbc,0xc2,0x5a,0xf6,0x54,0x8d,0xbd,0x79,0xe6,0x99,0xfb,0x43,0x4a,0xea,
|
0xd7,0xf9,0x85,0x77,0x24,0x7f,0x1c,0xbc,0x2d,0xf3,0x0a,0x6b,0xc5,0x53,0x35,0xf2,0xe6,0x99,0x67,0xee,
|
||||||
0x22,0xee,0x60,0x7f,0xb2,0xb8,0x73,0xb7,0xda,0x13,0xa5,0xdd,0xb1,0xdc,0xd7,0x26,0xf5,0x80,0xcf,0x77,
|
0xf6,0x29,0xa9,0x0b,0x31,0xa1,0x35,0x38,0xa9,0xb8,0x73,0x77,0xde,0x23,0xa5,0xdd,0xb1,0xdc,0x97,0x2a,
|
||||||
0x63,0x28,0x75,0xa2,0xce,0xc7,0x17,0xe3,0x77,0xaa,0xfc,0x0a,0xe1,0x03,0x6d,0x75,0x77,0xe6,0xff,0xd7,
|
0x8d,0x80,0xcf,0x77,0x63,0x28,0x75,0xa4,0xce,0xc7,0xd7,0xe6,0x0f,0xaa,0xfc,0x12,0xe1,0x3d,0x6d,0x0d,
|
||||||
0xb5,0xb1,0x0b,0x7d,0x97,0x0c,0x6c,0x53,0x75,0x8f,0x2d,0xef,0x15,0xe6,0x2a,0xba,0x64,0x1e,0x10,0xbd,
|
0x77,0xe6,0xff,0xd7,0xb5,0xb1,0x0b,0x7d,0x97,0xf4,0x6d,0x53,0x75,0x8f,0x2d,0xef,0x05,0xe7,0x32,0xba,
|
||||||
0x1b,0xcd,0xbb,0x5b,0x73,0xfc,0xc2,0x0e,0xb3,0xa6,0x6f,0x85,0xde,0x4e,0x5f,0xcb,0x82,0x37,0xa2,0x5c,
|
0x82,0xee,0x11,0xbd,0xfb,0xce,0x87,0x5b,0x73,0xf8,0x3a,0x0f,0xb3,0xd6,0x6f,0x89,0xde,0x8f,0x5f,0xda,
|
||||||
0x06,0x59,0x3b,0xd6,0xf4,0x69,0xc1,0x89,0x2c,0xd9,0xfc,0xab,0xd6,0xe0,0x79,0xf8,0xa6,0x35,0xf4,0xfa,
|
0x82,0xf7,0xa5,0x5c,0x06,0x59,0x5b,0xd6,0xf4,0x69,0xc1,0x89,0x2c,0xd9,0xfc,0x8b,0xd8,0xe0,0xb9,0xff,
|
||||||
0xcc,0x27,0x7b,0x2f,0x5c,0x0f,0x45,0xa2,0x17,0xad,0x47,0xf7,0xa2,0xe0,0x13,0x07,0x66,0x77,0x2f,0x07,
|
0x1e,0x36,0xf4,0xfa,0xd4,0x27,0x7b,0xaf,0x63,0xf7,0x45,0xa2,0xd7,0xb0,0x07,0xb7,0xa6,0xe0,0x03,0x08,
|
||||||
0xa8,0xcc,0xb5,0x2f,0x60,0x03,0xfc,0x49,0xf1,0x91,0x65,0x0c,0x31,0xb1,0xdb,0x38,0xab,0xe7,0x62,0xcb,
|
0x66,0x37,0x33,0x07,0xa8,0xcc,0xb5,0xaf,0x60,0x0d,0xfc,0x49,0xf1,0x81,0x65,0x0c,0x31,0xb1,0xdb,0x3e,
|
||||||
0xff,0x8e,0x82,0xbe,0x33,0x0f,0x67,0x32,0x19,0xf1,0xe2,0x0b,0xcb,0x22,0x9b,0x96,0x2c,0xeb,0xfc,0x82,
|
0xab,0xe7,0x62,0xcb,0xff,0xca,0x82,0xbe,0x33,0x0f,0x67,0x32,0x19,0xf1,0xe2,0x0b,0xcb,0x22,0x9b,0x96,
|
||||||
0xfb,0x22,0xe2,0x7f,0x0b,0xb9,0xf2,0x3e,0x01,0xfd,0x05,0x7b,0x73,0x38,0x18,0x18,0x1a,0x00,0x00};
|
0x2d,0xeb,0xfc,0x82,0xfb,0x5e,0xe2,0x7f,0x29,0xc9,0x7a,0x1f,0x88,0xfe,0x02,0x33,0x94,0x47,0xb7,0x36,
|
||||||
|
0x1a,0x00,0x00};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
4320
src/assets/js.h
4320
src/assets/js.h
File diff suppressed because it is too large
Load Diff
@ -4,10 +4,10 @@
|
|||||||
const uint8_t VersionMajor = 2;
|
const uint8_t VersionMajor = 2;
|
||||||
const uint8_t VersionMinor = 0;
|
const uint8_t VersionMinor = 0;
|
||||||
const uint8_t VersionPatch = 0;
|
const uint8_t VersionPatch = 0;
|
||||||
const uint8_t VersionMetadata = 10;
|
const uint8_t VersionMetadata = 12;
|
||||||
const char VersionBranch[] = "release/2.0";
|
const char VersionBranch[] = "release/2.0";
|
||||||
const char VersionSemVer[] = "2.0.0-beta.1";
|
const char VersionSemVer[] = "2.0.0-beta.1";
|
||||||
const char VersionFullSemVer[] = "2.0.0-beta.1+10";
|
const char VersionFullSemVer[] = "2.0.0-beta.1+12";
|
||||||
const char VersionCommitDate[] = "2018-01-07";
|
const char VersionCommitDate[] = "2018-01-08";
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -5,10 +5,6 @@
|
|||||||
// It is included in .gitignore by default so that you won't
|
// It is included in .gitignore by default so that you won't
|
||||||
// accidentally commit the dark secrets hidden within.
|
// accidentally commit the dark secrets hidden within.
|
||||||
|
|
||||||
#define SecretsPresent
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// They're not really that dark though.
|
// They're not really that dark though.
|
||||||
|
|
||||||
// Used for the Geocode API to get the local timezone
|
// Used for the Geocode API to get the local timezone
|
||||||
|
@ -9,7 +9,10 @@
|
|||||||
#include <ESPAsyncTCP.h>
|
#include <ESPAsyncTCP.h>
|
||||||
|
|
||||||
#include "../debug.h"
|
#include "../debug.h"
|
||||||
|
|
||||||
|
#ifdef SecretsPresent
|
||||||
#include "../secret.h"
|
#include "../secret.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
struct ResponseBuffer
|
struct ResponseBuffer
|
||||||
@ -20,6 +23,15 @@ struct ResponseBuffer
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct RequestArg
|
||||||
|
{
|
||||||
|
String address;
|
||||||
|
AsyncWebServerRequest *request;
|
||||||
|
ResponseBuffer* responseData;
|
||||||
|
size_t responseOffset;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
String urlencode(const String url)
|
String urlencode(const String url)
|
||||||
{
|
{
|
||||||
String encoded;
|
String encoded;
|
||||||
@ -59,133 +71,161 @@ void memcpy_unaligned(void* dest, void* source, size_t length)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void mapsGeocodeDisconnect(void* arg, AsyncClient* c);
|
||||||
|
void mapsGeocodeData(void* arg, AsyncClient* c, void* data, size_t len);
|
||||||
|
|
||||||
|
|
||||||
|
void mapsGeocodeConnect(void* arg, AsyncClient* client)
|
||||||
|
{
|
||||||
|
RequestArg* requestArg = (RequestArg*)arg;
|
||||||
|
|
||||||
|
client->onError(nullptr, nullptr);
|
||||||
|
client->onData(mapsGeocodeData, arg);
|
||||||
|
client->onDisconnect(mapsGeocodeDisconnect, arg);
|
||||||
|
|
||||||
|
#ifdef SecretsPresent
|
||||||
|
String url = "/maps/api/geocode/json?address=" + urlencode(requestArg->address) + "&key=" + urlencode(GoogleAPIKey);
|
||||||
|
#else
|
||||||
|
String url = "/maps/api/geocode/json?address=" + urlencode(requestArg->address);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
client->write(String("GET " + url + " HTTP/1.0\r\nHost: maps.googleapis.com\n\r\n").c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void mapsGeocodeData(void* arg, AsyncClient* c, void* data, size_t len)
|
||||||
|
{
|
||||||
|
RequestArg* requestArg = (RequestArg*)arg;
|
||||||
|
|
||||||
|
_dln("> OnData");
|
||||||
|
|
||||||
|
// Store all received chunks in a linked list
|
||||||
|
ResponseBuffer* next = new ResponseBuffer;
|
||||||
|
next->data = malloc(len);
|
||||||
|
memcpy_unaligned(next->data, data, len);
|
||||||
|
next->length = len;
|
||||||
|
next->next = nullptr;
|
||||||
|
|
||||||
|
if (requestArg->responseData == nullptr)
|
||||||
|
requestArg->responseData = next;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ResponseBuffer* prev = requestArg->responseData;
|
||||||
|
while (prev->next != nullptr)
|
||||||
|
prev = prev->next;
|
||||||
|
|
||||||
|
prev->next = next;
|
||||||
|
}
|
||||||
|
_dln("< OnData");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void mapsGeocodeDisconnect(void* arg, AsyncClient* client)
|
||||||
|
{
|
||||||
|
RequestArg* requestArg = (RequestArg*)arg;
|
||||||
|
|
||||||
|
_dln("> OnDisconnect");
|
||||||
|
if (requestArg->responseData == nullptr)
|
||||||
|
{
|
||||||
|
requestArg->request->send(500);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send back the linked list using a chunked response
|
||||||
|
AsyncWebServerResponse *response = requestArg->request->beginChunkedResponse("application/json", [requestArg](uint8_t *buffer, size_t maxLen, size_t index) -> size_t
|
||||||
|
{
|
||||||
|
_dln("> ChunkedResponse");
|
||||||
|
if (requestArg->responseOffset >= requestArg->responseData->length)
|
||||||
|
{
|
||||||
|
// End of the chunk, go to the next one
|
||||||
|
ResponseBuffer* next = requestArg->responseData->next;
|
||||||
|
delete requestArg->responseData;
|
||||||
|
|
||||||
|
requestArg->responseData = next;
|
||||||
|
requestArg->responseOffset = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (requestArg->responseData == nullptr)
|
||||||
|
{
|
||||||
|
// We sent the last one, clean up what remains
|
||||||
|
ResponseBuffer* next;
|
||||||
|
while (requestArg->responseData != nullptr)
|
||||||
|
{
|
||||||
|
next = requestArg->responseData->next;
|
||||||
|
|
||||||
|
free(requestArg->responseData->data);
|
||||||
|
delete requestArg->responseData;
|
||||||
|
|
||||||
|
requestArg->responseData = next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maxLen >= requestArg->responseData->length - requestArg->responseOffset)
|
||||||
|
{
|
||||||
|
// Send the remainder of the chunk
|
||||||
|
memcpy_unaligned(buffer, (uint8_t*)requestArg->responseData->data + requestArg->responseOffset, requestArg->responseData->length - requestArg->responseOffset);
|
||||||
|
requestArg->responseOffset = requestArg->responseData->length;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memcpy_unaligned(buffer, (uint8_t*)requestArg->responseData->data + requestArg->responseOffset, maxLen);
|
||||||
|
requestArg->responseOffset += maxLen;
|
||||||
|
}
|
||||||
|
_dln("< ChunkedResponse");
|
||||||
|
});
|
||||||
|
|
||||||
|
requestArg->request->send(response);
|
||||||
|
|
||||||
|
delete requestArg;
|
||||||
|
delete client;
|
||||||
|
_dln("< OnDisconnect");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void handleGetLatLong(AsyncWebServerRequest *request)
|
void handleGetLatLong(AsyncWebServerRequest *request)
|
||||||
{
|
{
|
||||||
_dln("API :: get lat long");
|
_dln("API :: get lat long");
|
||||||
|
|
||||||
|
RequestArg* requestArg = new RequestArg();
|
||||||
|
requestArg->request = request;
|
||||||
|
requestArg->responseData = nullptr;
|
||||||
|
requestArg->responseOffset = 0;
|
||||||
|
|
||||||
AsyncWebParameter* addressParam = request->getParam("address");
|
AsyncWebParameter* addressParam = request->getParam("address");
|
||||||
if (addressParam == nullptr)
|
if (addressParam == nullptr)
|
||||||
{
|
{
|
||||||
request->send(400);
|
request->send(400);
|
||||||
|
delete requestArg;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String address = addressParam->value();
|
requestArg->address = addressParam->value();
|
||||||
if (!address.length())
|
if (!requestArg->address.length())
|
||||||
{
|
{
|
||||||
request->send(400);
|
request->send(400);
|
||||||
|
delete requestArg;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncClient* httpClient = new AsyncClient();
|
AsyncClient* httpClient = new AsyncClient();
|
||||||
httpClient->onError([&](void* arg, AsyncClient* client, int error)
|
httpClient->onError([](void* arg, AsyncClient* client, int error)
|
||||||
{
|
{
|
||||||
|
RequestArg* requestArg = (RequestArg*)arg;
|
||||||
|
|
||||||
_dln("API :: get lat long: OnError");
|
_dln("API :: get lat long: OnError");
|
||||||
request->send(500);
|
requestArg->request->send(500);
|
||||||
|
|
||||||
|
delete requestArg;
|
||||||
delete client;
|
delete client;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
httpClient->onConnect(mapsGeocodeConnect, requestArg);
|
||||||
httpClient->onConnect([&](void * arg, AsyncClient* client)
|
|
||||||
{
|
|
||||||
client->onError(nullptr, nullptr);
|
|
||||||
ResponseBuffer* responseData = nullptr;
|
|
||||||
|
|
||||||
client->onData([&](void* arg, AsyncClient* c, void* data, size_t len)
|
|
||||||
{
|
|
||||||
_dln("> OnData");
|
|
||||||
// Store all received chunks in a linked list
|
|
||||||
ResponseBuffer* next = new ResponseBuffer;
|
|
||||||
next->data = malloc(len);
|
|
||||||
memcpy_unaligned(next->data, data, len);
|
|
||||||
next->length = len;
|
|
||||||
next->next = nullptr;
|
|
||||||
|
|
||||||
if (responseData == nullptr)
|
|
||||||
responseData = next;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ResponseBuffer* prev = responseData;
|
|
||||||
while (prev->next != nullptr)
|
|
||||||
prev = prev->next;
|
|
||||||
|
|
||||||
prev->next = next;
|
|
||||||
}
|
|
||||||
_dln("< OnData");
|
|
||||||
});
|
|
||||||
|
|
||||||
client->onDisconnect([&](void* arg, AsyncClient* c)
|
|
||||||
{
|
|
||||||
_dln("> OnDisconnect");
|
|
||||||
if (responseData == nullptr)
|
|
||||||
{
|
|
||||||
request->send(500);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send back the linked list using a chunked response
|
|
||||||
ResponseBuffer* sendChunk = responseData;
|
|
||||||
size_t sendOffset = 0;
|
|
||||||
|
|
||||||
AsyncWebServerResponse *response = request->beginChunkedResponse("application/json", [&](uint8_t *buffer, size_t maxLen, size_t index) -> size_t
|
|
||||||
{
|
|
||||||
_dln("> ChunkedResponse");
|
|
||||||
if (sendOffset >= sendChunk->length)
|
|
||||||
{
|
|
||||||
// End of the chunk, go to the next one
|
|
||||||
sendChunk = sendChunk->next;
|
|
||||||
sendOffset = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sendChunk == nullptr)
|
|
||||||
{
|
|
||||||
// We sent the last one, clean up the linked list
|
|
||||||
ResponseBuffer* next;
|
|
||||||
while (responseData != nullptr)
|
|
||||||
{
|
|
||||||
next = responseData->next;
|
|
||||||
|
|
||||||
free(responseData->data);
|
|
||||||
delete responseData;
|
|
||||||
|
|
||||||
responseData = next;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (maxLen >= sendChunk->length - sendOffset)
|
|
||||||
{
|
|
||||||
// Send the remainder of the chunk
|
|
||||||
memcpy_unaligned(buffer, (uint8_t*)sendChunk->data + sendOffset, sendChunk->length - sendOffset);
|
|
||||||
sendOffset = sendChunk->length;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memcpy_unaligned(buffer, (uint8_t*)sendChunk->data + sendOffset, maxLen);
|
|
||||||
sendOffset += maxLen;
|
|
||||||
}
|
|
||||||
_dln("< ChunkedResponse");
|
|
||||||
});
|
|
||||||
request->send(response);
|
|
||||||
|
|
||||||
delete c;
|
|
||||||
_dln("< OnDisconnect");
|
|
||||||
});
|
|
||||||
|
|
||||||
#ifdef SecretsPresent
|
|
||||||
String url = "/maps/api/geocode/json?address=" + urlencode(address) + "&key=" + urlencode(GoogleAPIKey);
|
|
||||||
#else
|
|
||||||
String url = "/maps/api/geocode/json?address=" + urlencode(address);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
client->write(String("GET " + url + " HTTP/1.0\r\nHost: maps.googleapis.com\n\r\n").c_str());
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
if (!httpClient->connect("maps.googleapis.com", 443, true))
|
if (!httpClient->connect("maps.googleapis.com", 443, true))
|
||||||
{
|
{
|
||||||
_dln("API :: get lat long: failed to connect to Google API");
|
_dln("API :: get lat long: failed to connect to Google API");
|
||||||
|
delete requestArg;
|
||||||
delete httpClient;
|
delete httpClient;
|
||||||
|
|
||||||
request->send(500);
|
request->send(500);
|
||||||
|
11
web/app.js
11
web/app.js
@ -298,8 +298,6 @@ function startApp()
|
|||||||
{
|
{
|
||||||
// TODO show "now updating, please wait"
|
// TODO show "now updating, please wait"
|
||||||
console.log("Update sent");
|
console.log("Update sent");
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
.catch(function(error)
|
.catch(function(error)
|
||||||
{
|
{
|
||||||
@ -384,10 +382,14 @@ function startApp()
|
|||||||
|
|
||||||
self.searchingLocation = true;
|
self.searchingLocation = true;
|
||||||
|
|
||||||
axios.get('http://maps.googleapis.com/maps/api/geocode/json', { params: { address: self.triggers.time.location }})
|
axios.get('/api/geocode/latlong', { params: { address: self.triggers.time.location }})
|
||||||
.then(function(response)
|
.then(function(response)
|
||||||
{
|
{
|
||||||
alert(response.data);
|
if (Array.isArray(response.data.results) && response.data.results.length > 0)
|
||||||
|
{
|
||||||
|
var location = response.data.results[0].geometry.location;
|
||||||
|
self.triggers.time.latlong = location.lat + ',' + location.lng;
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.catch(function(error)
|
.catch(function(error)
|
||||||
{
|
{
|
||||||
@ -420,7 +422,6 @@ function startApp()
|
|||||||
|
|
||||||
activeTab: function(newValue)
|
activeTab: function(newValue)
|
||||||
{
|
{
|
||||||
console.log(newValue);
|
|
||||||
window.location.hash = '#' + newValue;
|
window.location.hash = '#' + newValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
2
web/dist/bundle.js
vendored
2
web/dist/bundle.js
vendored
File diff suppressed because one or more lines are too long
@ -91,9 +91,11 @@
|
|||||||
<label for="latlong">{{ $t('triggers.timeLatLong') }}</label>
|
<label for="latlong">{{ $t('triggers.timeLatLong') }}</label>
|
||||||
<input type="text" id="latlong" v-model="triggers.time.latlong">
|
<input type="text" id="latlong" v-model="triggers.time.latlong">
|
||||||
|
|
||||||
<label for="location" class="label-inline">{{ $t('triggers.timeLocation') }}</label>
|
<div class="suboptions">
|
||||||
<input type="text" id="location" v-model="triggers.time.location">
|
<label for="location" class="label-inline">{{ $t('triggers.timeLocation') }}</label>
|
||||||
<button class="button" @click.prevent="searchLocation" :disabled="searchingLocation">{{ $t('triggers.timeLocationSearch') }}</button>
|
<input type="text" id="location" v-model="triggers.time.location">
|
||||||
|
<button class="button" @click.prevent="searchLocation" :disabled="searchingLocation">{{ $t('triggers.timeLocationSearch') }}</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user