Compare commits

..

No commits in common. "master" and "1.1.7" have entirely different histories.

97 changed files with 11817 additions and 20287 deletions

View File

@ -1,27 +0,0 @@
name: Build Example Watchfaces
on:
push:
branches:
- "dev"
pull_request:
branches:
- "dev"
jobs:
build:
name: Build Example Watchfaces
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: ArminJo/arduino-test-compile@v3
with:
arduino-board-fqbn: esp32:esp32:watchy:Revision=v20,PartitionScheme=min_spiffs,UploadSpeed=921600,DebugLevel=none,EraseFlash=none
platform-url: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
required-libraries: Adafruit GFX Library,Arduino_JSON,DS3232RTC,NTPClient,Rtc_Pcf8563,GxEPD2,WiFiManager
set-build-path: true
- uses: actions/upload-artifact@v3
with:
name: binaries
path: ${{ github.workspace }}/examples/WatchFaces/**/build/*.bin
- uses: actions/download-artifact@v3
- name: Display structure of downloaded files
run: ls -R

View File

@ -1,38 +0,0 @@
name: Release
on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+"
jobs:
release:
name: Build and Release
runs-on: ubuntu-latest
strategy:
matrix:
board-revisions: [v10, v15, v20]
steps:
- uses: actions/checkout@master
- uses: ArminJo/arduino-test-compile@v3
with:
arduino-board-fqbn: esp32:esp32:watchy:Revision=${{ matrix.board-revisions }},PartitionScheme=min_spiffs,UploadSpeed=921600,DebugLevel=none,EraseFlash=none
platform-url: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
required-libraries: Adafruit GFX Library,Arduino_JSON,DS3232RTC,NTPClient,Rtc_Pcf8563,GxEPD2,WiFiManager
set-build-path: true
- name: Rename binaries with board revision
run: |
parent_dir="${{ github.workspace }}/examples/WatchFaces"
for dir in "$parent_dir"/*; do
if [ -d "$dir" ]; then
cd "$dir/build"
for file in *; do
name="${file%%.*}"
ext="${file#$name.}"
mv "$file" "$name-${{ matrix.board-revisions }}.$ext"
done
cd -
fi
done
- uses: softprops/action-gh-release@v1
with:
name: "Watchy Arduino Library ${{ github.ref_name }}"
files: ${{ github.workspace }}/examples/WatchFaces/**/build/*.bin

1
.gitignore vendored
View File

@ -67,4 +67,3 @@ avr-toolchain-*.zip
manifest.mf
nbbuild.xml
nbproject
.vscode

View File

@ -1,15 +0,0 @@
# How to contribute
### Check out the issue tracker
Search through [Issue tracker](https://github.com/sqfmi/Watchy/issues) for matching topics. It is also recommended to check with current [Pull requests](https://github.com/sqfmi/Watchy/pulls).
### Issue Pull Request
1. Fork this repo and branch out from `dev`.
2. Push commits.
3. Issue pull request.
## Community
- [Discord](https://discord.gg/ZXDegGV8E7)

21
LICENSE
View File

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2023 SQFMI
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -2,31 +2,19 @@
![Watchy](https://watchy.sqfmi.com/img/watchy_render.png)
**Buy Watchy from [The Pi Hut](https://thepihut.com/collections/sqfmi), [Crowd Supply](https://www.crowdsupply.com/sqfmi/watchy), and [Mouser](https://www.mouser.com/ProductDetail/SQFMI/SQFMI-WATCHY-10?qs=DRkmTr78QARN9VSJRzqRxw%3D%3D)!**
[**Watchy Case & Accessories**](https://shop.sqfmi.com)
Visit [**https://watchy.sqfmi.com**](https://watchy.sqfmi.com) for documentation, hardware design files, and more!
## Setup
1. In the Arduino IDE Boards Manager, [install support for the ESP32](https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html).
* Arduino > Preferences > Additional Board Manager URLs
* ```https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json```
2. Install this library (search for **Watchy** in the library manager), and any other dependencies when prompted
1. In the Arduino IDE Boards Manager, install support for the ESP32. You can find instructions here: https://github.com/espressif/arduino-esp32/blob/master/docs/arduino-ide/boards_manager.md
2. Install this library (search for **Watchy** in the library manager), and any other depdencies when prompted
3. Check out the examples under ```Examples``` -> ```Watchy```
4. Compile & Upload with these board settings:
* Board: "Watchy"
* Partition Scheme: "Huge App"
* Board Revision: Choose your Watchy version
* Board: "ESP32 Dev Module"
* Partition Scheme: "Minimal SPIFFS"
* All Other Settings: leave to default
You may also have to install the [CP2104 USB to Serial drivers](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers) if the port is not automatically detected.
You may also have to install the [CP2104 USB to Serial drivers](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers) if the port is not automatically detected
### Have Fun! :)
### Got Questions?
Join our [Discord](https://discord.gg/ZXDegGV8E7)

Binary file not shown.

View File

@ -1,7 +1,6 @@
#include "Watchy_7_SEG.h"
#include "settings.h"
Watchy7SEG watchy(settings);
Watchy7SEG watchy;
void setup(){
watchy.init();

View File

@ -1 +0,0 @@
To toggle between Dark Mode/Light Mode, change `#define DARKMODE true` in `Watchy_7_SEG.cpp`

View File

@ -1,40 +1,33 @@
#include "Watchy_7_SEG.h"
#define DARKMODE true
const uint8_t BATTERY_SEGMENT_WIDTH = 7;
const uint8_t BATTERY_SEGMENT_HEIGHT = 11;
const uint8_t BATTERY_SEGMENT_SPACING = 9;
const uint8_t WEATHER_ICON_WIDTH = 48;
const uint8_t WEATHER_ICON_HEIGHT = 32;
Watchy7SEG::Watchy7SEG(){} //constructor
void Watchy7SEG::drawWatchFace(){
display.fillScreen(DARKMODE ? GxEPD_BLACK : GxEPD_WHITE);
display.setTextColor(DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.fillScreen(GxEPD_BLACK);
drawTime();
drawDate();
drawSteps();
drawWeather();
drawBattery();
display.drawBitmap(120, 77, WIFI_CONFIGURED ? wifi : wifioff, 26, 18, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.drawBitmap(120, 77, WIFI_CONFIGURED ? wifi : wifioff, 26, 18, GxEPD_WHITE);
if(BLE_CONFIGURED){
display.drawBitmap(100, 75, bluetooth, 13, 21, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.drawBitmap(100, 75, bluetooth, 13, 21, GxEPD_WHITE);
}
}
void Watchy7SEG::drawTime(){
display.setFont(&DSEG7_Classic_Bold_53);
display.setCursor(5, 53+5);
int displayHour;
if(HOUR_12_24==12){
displayHour = ((currentTime.Hour+11)%12)+1;
} else {
displayHour = currentTime.Hour;
}
if(displayHour < 10){
if(currentTime.Hour < 10){
display.print("0");
}
display.print(displayHour);
display.print(currentTime.Hour);
display.print(":");
if(currentTime.Minute < 10){
display.print("0");
@ -50,9 +43,6 @@ void Watchy7SEG::drawDate(){
String dayOfWeek = dayStr(currentTime.Wday);
display.getTextBounds(dayOfWeek, 5, 85, &x1, &y1, &w, &h);
if(currentTime.Wday == 4){
w = w - 5;
}
display.setCursor(85 - w, 85);
display.println(dayOfWeek);
@ -68,21 +58,17 @@ void Watchy7SEG::drawDate(){
}
display.println(currentTime.Day);
display.setCursor(5, 150);
display.println(tmYearToCalendar(currentTime.Year));// offset from 1970, since year is stored in uint8_t
display.println(currentTime.Year + YEAR_OFFSET);// offset from 1970, since year is stored in uint8_t
}
void Watchy7SEG::drawSteps(){
// reset step counter at midnight
if (currentTime.Hour == 0 && currentTime.Minute == 0){
sensor.resetStepCounter();
}
uint32_t stepCount = sensor.getCounter();
display.drawBitmap(10, 165, steps, 19, 23, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.drawBitmap(10, 165, steps, 19, 23, GxEPD_WHITE);
display.setCursor(35, 190);
display.println(stepCount);
}
void Watchy7SEG::drawBattery(){
display.drawBitmap(154, 73, battery, 37, 21, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.fillRect(159, 78, 27, BATTERY_SEGMENT_HEIGHT, DARKMODE ? GxEPD_BLACK : GxEPD_WHITE);//clear battery segments
display.drawBitmap(154, 73, battery, 37, 21, GxEPD_WHITE);
display.fillRect(159, 78, 27, BATTERY_SEGMENT_HEIGHT, GxEPD_BLACK);//clear battery segments
int8_t batteryLevel = 0;
float VBAT = getBatteryVoltage();
if(VBAT > 4.1){
@ -99,55 +85,72 @@ void Watchy7SEG::drawBattery(){
}
for(int8_t batterySegments = 0; batterySegments < batteryLevel; batterySegments++){
display.fillRect(159 + (batterySegments * BATTERY_SEGMENT_SPACING), 78, BATTERY_SEGMENT_WIDTH, BATTERY_SEGMENT_HEIGHT, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.fillRect(159 + (batterySegments * BATTERY_SEGMENT_SPACING), 78, BATTERY_SEGMENT_WIDTH, BATTERY_SEGMENT_HEIGHT, GxEPD_WHITE);
}
}
void Watchy7SEG::drawWeather(){
weatherData currentWeather = getWeatherData();
int8_t temperature = currentWeather.temperature;
int16_t weatherConditionCode = currentWeather.weatherConditionCode;
display.setFont(&DSEG7_Classic_Regular_39);
int16_t x1, y1;
uint16_t w, h;
display.getTextBounds(String(temperature), 0, 0, &x1, &y1, &w, &h);
if(159 - w - x1 > 87){
display.setCursor(159 - w - x1, 150);
}else{
display.setFont(&DSEG7_Classic_Bold_25);
display.getTextBounds(String(temperature), 0, 0, &x1, &y1, &w, &h);
display.setCursor(159 - w - x1, 136);
}
display.getTextBounds(String(temperature), 100, 150, &x1, &y1, &w, &h);
display.setCursor(155 - w, 150);
display.println(temperature);
display.drawBitmap(165, 110, currentWeather.isMetric ? celsius : fahrenheit, 26, 20, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.drawBitmap(165, 110, TEMP_UNIT == "metric" ? celsius : fahrenheit, 26, 20, GxEPD_WHITE);
const unsigned char* weatherIcon;
if(WIFI_CONFIGURED){
//https://openweathermap.org/weather-conditions
if(weatherConditionCode > 801){//Cloudy
weatherIcon = cloudy;
}else if(weatherConditionCode == 801){//Few Clouds
weatherIcon = cloudsun;
}else if(weatherConditionCode == 800){//Clear
weatherIcon = sunny;
}else if(weatherConditionCode >=700){//Atmosphere
weatherIcon = atmosphere;
}else if(weatherConditionCode >=600){//Snow
weatherIcon = snow;
}else if(weatherConditionCode >=500){//Rain
weatherIcon = rain;
}else if(weatherConditionCode >=300){//Drizzle
weatherIcon = drizzle;
}else if(weatherConditionCode >=200){//Thunderstorm
weatherIcon = thunderstorm;
}else
return;
}else{
weatherIcon = chip;
//https://openweathermap.org/weather-conditions
if(weatherConditionCode > 801){//Cloudy
weatherIcon = cloudy;
}else if(weatherConditionCode == 801){//Few Clouds
weatherIcon = cloudsun;
}else if(weatherConditionCode == 800){//Clear
weatherIcon = sunny;
}else if(weatherConditionCode >=700){//Atmosphere
weatherIcon = cloudy;
}else if(weatherConditionCode >=600){//Snow
weatherIcon = snow;
}else if(weatherConditionCode >=500){//Rain
weatherIcon = rain;
}else if(weatherConditionCode >=300){//Drizzle
weatherIcon = rain;
}else if(weatherConditionCode >=200){//Thunderstorm
weatherIcon = rain;
}
display.drawBitmap(145, 158, weatherIcon, WEATHER_ICON_WIDTH, WEATHER_ICON_HEIGHT, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.drawBitmap(145, 158, weatherIcon, WEATHER_ICON_WIDTH, WEATHER_ICON_HEIGHT, GxEPD_WHITE);
}
//#include "pokemon.h"
// class WatchyPokemon : public Watchy{
// public:
// void updateWatchFace(bool partialRefresh){
// display.init(0, false); //_initial_refresh to false to prevent full update on init
// display.setFullWindow();
// display.fillScreen(GxEPD_WHITE);
// display.drawBitmap(0, 0, pokemon, DISPLAY_WIDTH, DISPLAY_HEIGHT, GxEPD_BLACK);
// display.setTextColor(GxEPD_BLACK);
// display.setFont(&FreeMonoBold9pt7b);
// display.setCursor(10, 170);
// if(currentTime.Hour < 10){
// display.print('0');
// }
// display.print(currentTime.Hour);
// display.print(':');
// if(currentTime.Minute < 10){
// display.print('0');
// }
// display.print(currentTime.Minute);
// display.display(partialRefresh); //partial refresh
// display.hibernate();
// guiState = WATCHFACE_STATE;
// }
// };

View File

@ -9,8 +9,8 @@
#include "icons.h"
class Watchy7SEG : public Watchy{
using Watchy::Watchy;
public:
Watchy7SEG();
void drawWatchFace();
void drawTime();
void drawDate();

View File

@ -105,66 +105,6 @@ const unsigned char sunny [] PROGMEM = {
0xc0, 0x00, 0x00, 0x18, 0x20, 0x10, 0x60, 0x00, 0x00, 0x00, 0x21, 0x08, 0x00, 0x00, 0x00, 0x00,
0x41, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
};
// 'atmosphere', 48x32px
const unsigned char atmosphere[] PROGMEM = {
0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x03, 0x81, 0x80, 0x00, 0x00, 0x00, 0x06, 0x00, 0x60,
0x00, 0x00, 0x00, 0x08, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x30,
0x00, 0x00, 0x30, 0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00,
0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x07, 0x80, 0x00, 0xc0, 0x00, 0x00,
0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00,
0x00, 0x00, 0x00, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08,
0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00,
0x00, 0x08, 0x04, 0x07, 0xff, 0xf8, 0xf0, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x01, 0x80,
0x00, 0x00, 0x00, 0x60, 0x00, 0x9f, 0x1f, 0xff, 0xfc, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xf8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0xff, 0xfc, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'drizzle', 48x32px
const unsigned char drizzle[] PROGMEM = {
0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x03, 0x81, 0x80, 0x00, 0x00, 0x00, 0x06, 0x00, 0x60,
0x00, 0x00, 0x00, 0x08, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x30,
0x00, 0x00, 0x30, 0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00,
0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x07, 0x80, 0x00, 0xc0, 0x00, 0x00,
0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00,
0x00, 0x00, 0x00, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08,
0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00,
0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x01, 0x80,
0x00, 0x00, 0x00, 0x60, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x20, 0x08, 0x00, 0x00
};
// 'thunderstorm', 48x32px
const unsigned char thunderstorm[] PROGMEM = {
0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x03, 0x81, 0x80, 0x00, 0x00, 0x00, 0x06, 0x00, 0x60,
0x00, 0x00, 0x00, 0x08, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x30,
0x00, 0x00, 0x30, 0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00,
0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x07, 0x80, 0x00, 0xc0, 0x0f, 0x80,
0x00, 0xc0, 0x03, 0x00, 0x0f, 0x80, 0x00, 0x20, 0x02, 0x00, 0x1f, 0x00, 0x00, 0x10, 0x04, 0x00,
0x1e, 0x00, 0x00, 0x18, 0x04, 0x00, 0x3e, 0x00, 0x00, 0x08, 0x08, 0x00, 0x3c, 0x00, 0x00, 0x08,
0x08, 0x00, 0x7c, 0x00, 0x00, 0x08, 0x04, 0x00, 0x78, 0x00, 0x00, 0x08, 0x04, 0x00, 0xf8, 0x00,
0x00, 0x08, 0x04, 0x00, 0xff, 0x00, 0x00, 0x10, 0x02, 0x00, 0x1f, 0x00, 0x00, 0x30, 0x01, 0x80,
0x1e, 0x00, 0x00, 0x60, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'cputemp', 48x32px
const unsigned char cputemp [] PROGMEM = {
0x00, 0x01, 0x8c, 0xe7, 0x00, 0x00, 0x00, 0x01, 0x8c, 0xe7, 0x00, 0x00, 0x00, 0x01, 0x8c, 0xe7,
0x00, 0x00, 0x00, 0x01, 0x8c, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
0xff, 0xff, 0xe0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x03, 0xef, 0xff, 0xff, 0xef, 0x80,
0x03, 0xef, 0xff, 0xff, 0xef, 0x80, 0x03, 0xef, 0xff, 0xff, 0xe7, 0x80, 0x00, 0x0f, 0xff, 0xff,
0xe0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x03, 0xef, 0xff, 0xff, 0xef, 0x80, 0x03, 0xef,
0xff, 0xff, 0xef, 0x80, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00,
0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x03, 0xef, 0xff, 0xff, 0xef, 0x80, 0x03, 0xef, 0xff, 0xff,
0xef, 0x80, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x0f,
0xff, 0xff, 0xe0, 0x00, 0x03, 0xef, 0xff, 0xff, 0xef, 0x80, 0x03, 0xef, 0xff, 0xff, 0xef, 0x80,
0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8c, 0xe7, 0x00, 0x00, 0x00, 0x01,
0x8c, 0xe7, 0x00, 0x00, 0x00, 0x01, 0x8c, 0xe7, 0x00, 0x00, 0x00, 0x01, 0x8c, 0xe7, 0x00, 0x00
};
// 'steps', 19x23px
const unsigned char steps [] PROGMEM = {
0x00, 0x03, 0xc0, 0x00, 0x07, 0xe0, 0x00, 0x07, 0xe0, 0x00, 0x0f, 0xe0, 0x78, 0x0f, 0xe0, 0xfc,
@ -189,19 +129,3 @@ const unsigned char wifioff [] PROGMEM = {
0x01, 0xff, 0xc0, 0x00, 0x07, 0xe1, 0xc0, 0x00, 0x0f, 0xc0, 0x80, 0x00, 0x1f, 0x0c, 0x00, 0x00,
0x3c, 0x1e, 0x00, 0x00, 0xf8, 0x0c, 0x00, 0x00
};
// 'chip', 48x32px
const unsigned char chip [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x48, 0x00, 0x00, 0x00, 0x00,
0x12, 0x48, 0x00, 0x00, 0x00, 0x00, 0x12, 0x48, 0x00, 0x00, 0x00, 0x00, 0x12, 0x48, 0x00, 0x00,
0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01,
0x00, 0x00, 0x00, 0x0f, 0x87, 0xf9, 0xf0, 0x00, 0x00, 0x00, 0x88, 0x09, 0x00, 0x00, 0x00, 0x00,
0x90, 0x09, 0x00, 0x00, 0x00, 0x0f, 0x90, 0x09, 0xf0, 0x00, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00,
0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x00, 0x0f, 0x90, 0x09, 0xf0, 0x00, 0x00, 0x00, 0x90, 0x09,
0x00, 0x00, 0x00, 0x00, 0x90, 0x09, 0x00, 0x00, 0x00, 0x0f, 0x9f, 0xf9, 0xf0, 0x00, 0x00, 0x00,
0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
0x00, 0x00, 0x12, 0x48, 0x00, 0x00, 0x00, 0x00, 0x12, 0x48, 0x00, 0x00, 0x00, 0x00, 0x12, 0x48,
0x00, 0x00, 0x00, 0x00, 0x12, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

View File

@ -1,43 +0,0 @@
#ifndef SETTINGS_H
#define SETTINGS_H
//Weather Settings
#define CITY_ID "5128581" //New York City https://openweathermap.org/current#cityid
//You can also use LAT,LON for your location instead of CITY_ID, but not both
//#define LAT "40.7127" //New York City, Looked up on https://www.latlong.net/
//#define LON "-74.0059"
#ifdef CITY_ID
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?id={cityID}&lang={lang}&units={units}&appid={apiKey}" //open weather api using city ID
#else
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&lang={lang}&units={units}&appid={apiKey}" //open weather api using lat lon
#endif
#define OPENWEATHERMAP_APIKEY "f058fe1cad2afe8e2ddc5d063a64cecb" //use your own API key :)
#define TEMP_UNIT "metric" //metric = Celsius , imperial = Fahrenheit
#define TEMP_LANG "en"
#define WEATHER_UPDATE_INTERVAL 30 //must be greater than 5, measured in minutes
//NTP Settings
#define NTP_SERVER "pool.ntp.org"
#define GMT_OFFSET_SEC 3600 * -5 //New York is UTC -5 EST, -4 EDT, will be overwritten by weather data
watchySettings settings{
#ifdef CITY_ID
.cityID = CITY_ID,
#else
.cityID = "",
.lat = LAT,
.lon = LON,
#endif
.weatherAPIKey = OPENWEATHERMAP_APIKEY,
.weatherURL = OPENWEATHERMAP_URL,
.weatherUnit = TEMP_UNIT,
.weatherLang = TEMP_LANG,
.weatherUpdateInterval = WEATHER_UPDATE_INTERVAL,
.ntpServer = NTP_SERVER,
.gmtOffset = GMT_OFFSET_SEC,
.vibrateOClock = true,
};
#endif

Binary file not shown.

View File

@ -1,7 +1,6 @@
#include <Watchy.h>
#include "settings.h"
Watchy watchy(settings);
Watchy watchy;
void setup(){
watchy.init();

View File

@ -1,43 +0,0 @@
#ifndef SETTINGS_H
#define SETTINGS_H
//Weather Settings
#define CITY_ID "5128581" //New York City https://openweathermap.org/current#cityid
//You can also use LAT,LON for your location instead of CITY_ID, but not both
//#define LAT "40.7127" //New York City, Looked up on https://www.latlong.net/
//#define LON "-74.0059"
#ifdef CITY_ID
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?id={cityID}&lang={lang}&units={units}&appid={apiKey}" //open weather api using city ID
#else
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&lang={lang}&units={units}&appid={apiKey}" //open weather api using lat lon
#endif
#define OPENWEATHERMAP_APIKEY "f058fe1cad2afe8e2ddc5d063a64cecb" //use your own API key :)
#define TEMP_UNIT "metric" //metric = Celsius , imperial = Fahrenheit
#define TEMP_LANG "en"
#define WEATHER_UPDATE_INTERVAL 30 //must be greater than 5, measured in minutes
//NTP Settings
#define NTP_SERVER "pool.ntp.org"
#define GMT_OFFSET_SEC 3600 * -5 //New York is UTC -5 EST, -4 EDT, will be overwritten by weather data
watchySettings settings{
#ifdef CITY_ID
.cityID = CITY_ID,
#else
.cityID = "",
.lat = LAT,
.lon = LON,
#endif
.weatherAPIKey = OPENWEATHERMAP_APIKEY,
.weatherURL = OPENWEATHERMAP_URL,
.weatherUnit = TEMP_UNIT,
.weatherLang = TEMP_LANG,
.weatherUpdateInterval = WEATHER_UPDATE_INTERVAL,
.ntpServer = NTP_SERVER,
.gmtOffset = GMT_OFFSET_SEC,
.vibrateOClock = true,
};
#endif

Binary file not shown.

View File

@ -1,10 +0,0 @@
#include "Watchy_DOS.h"
#include "settings.h"
WatchyDOS watchy(settings);
void setup(){
watchy.init();
}
void loop(){}

View File

@ -1,174 +0,0 @@
//created using https://rop.nl/truetype2gfx/
//https://github.com/ropg/truetype2gfx
//@ropg
//Px437_IBM_BIOS.ttf
const uint8_t Px437_IBM_BIOS5pt7bBitmaps[] PROGMEM = {
0x00, 0x73, 0xFF, 0xF7, 0x39, 0xC0, 0x70, 0xEF, 0xDF, 0xBF, 0x70, 0x77,
0x3B, 0x9D, 0xDF, 0xF7, 0x77, 0xFF, 0xDC, 0xEE, 0x77, 0x00, 0x38, 0x3F,
0x7F, 0xE0, 0x7C, 0x07, 0x04, 0xFC, 0x38, 0xE3, 0xF1, 0xF9, 0xC1, 0x83,
0x81, 0x9D, 0xCF, 0xC7, 0x3C, 0x1B, 0x9D, 0xC7, 0x87, 0xBF, 0x7B, 0xBD,
0xCE, 0x7B, 0x80, 0x77, 0x7E, 0x18, 0x9D, 0xCE, 0x73, 0xCE, 0x18, 0xE7,
0x9C, 0x31, 0x8C, 0x4E, 0xE0, 0x73, 0x9C, 0xE3, 0xF3, 0xFF, 0x3F, 0x0C,
0xE7, 0x38, 0x38, 0x38, 0x38, 0xFF, 0x38, 0x38, 0x38, 0x77, 0x7E, 0xFF,
0xFF, 0x80, 0x03, 0x81, 0x81, 0xC1, 0x83, 0x83, 0x81, 0x81, 0xC0, 0x80,
0x00, 0x7F, 0x31, 0xF8, 0xFC, 0xFE, 0xFF, 0xDF, 0xCF, 0xE7, 0x7F, 0x00,
0x38, 0x38, 0x78, 0x38, 0x38, 0x38, 0x38, 0x38, 0xFF, 0x7C, 0x67, 0xE7,
0x07, 0x3C, 0x70, 0x67, 0xE7, 0xFF, 0x7C, 0x67, 0xE7, 0x07, 0x3C, 0x07,
0xE7, 0xE7, 0x7C, 0x0F, 0x07, 0x8F, 0xCE, 0xEE, 0x77, 0xFF, 0xFC, 0x0E,
0x0F, 0x80, 0xFF, 0xE0, 0xE0, 0xFC, 0x07, 0x07, 0xE7, 0xE7, 0x7C, 0x3C,
0x30, 0x70, 0xE0, 0xFC, 0xE7, 0xE7, 0xE7, 0x7C, 0xFF, 0xE7, 0xE7, 0x07,
0x0C, 0x38, 0x38, 0x38, 0x38, 0x7C, 0x67, 0xE7, 0xE7, 0x7C, 0xE7, 0xE7,
0xE7, 0x7C, 0x7C, 0x67, 0xE7, 0xE7, 0x7F, 0x07, 0x04, 0x0C, 0x78, 0xFF,
0x81, 0xFF, 0x77, 0x70, 0x07, 0x77, 0xE0, 0x0C, 0x23, 0x9C, 0xE1, 0xC7,
0x8E, 0x0C, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xE1, 0xE1, 0xC0, 0xC0, 0xE3,
0x04, 0x38, 0xE0, 0x7C, 0x67, 0xE7, 0x07, 0x0C, 0x38, 0x38, 0x00, 0x38,
0x7F, 0x31, 0xF8, 0xFD, 0xFE, 0xFF, 0x7F, 0xBF, 0xC0, 0x7C, 0x00, 0x38,
0x3C, 0x7C, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0xE7, 0xFF, 0x79, 0xDC, 0xEE,
0x77, 0xF3, 0x9D, 0xCE, 0xE7, 0xFF, 0x00, 0x3F, 0x19, 0xDC, 0xFC, 0x0E,
0x07, 0x03, 0xCE, 0xE7, 0x3F, 0x00, 0xFC, 0x7B, 0x9D, 0xCE, 0x77, 0x3B,
0x9D, 0xCC, 0xEE, 0xFC, 0x00, 0xFF, 0xF8, 0xDC, 0x6E, 0x87, 0xC3, 0xA1,
0xD6, 0xE3, 0xFF, 0x80, 0xFF, 0xF8, 0xDC, 0x6E, 0x87, 0xC3, 0xA1, 0xD0,
0xE0, 0xF8, 0x00, 0x3F, 0x19, 0xDC, 0xFC, 0x0E, 0x07, 0x3F, 0xDE, 0xE7,
0x3F, 0x80, 0xE7, 0xE7, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0xE7, 0xE7, 0xFF,
0x9C, 0xE7, 0x39, 0xCE, 0xF8, 0x0F, 0x87, 0x81, 0xC0, 0xE0, 0x77, 0x3B,
0x9D, 0xCE, 0x7C, 0x00, 0xF3, 0xF9, 0xDC, 0xEE, 0xE7, 0xC3, 0xB9, 0xDE,
0xE7, 0xF3, 0x80, 0xF8, 0x78, 0x1C, 0x0E, 0x07, 0x03, 0x8D, 0xC6, 0xE7,
0xFF, 0x80, 0xE3, 0xF9, 0xFD, 0xFF, 0xFF, 0xFF, 0x5F, 0xAF, 0xC7, 0xE3,
0x80, 0xE3, 0xF9, 0xFC, 0xFF, 0x7E, 0xFF, 0x3F, 0x9F, 0xC7, 0xE3, 0x80,
0x3C, 0x1B, 0x9D, 0xDC, 0x7E, 0x3F, 0x1F, 0xCC, 0xEE, 0x3C, 0x00, 0xFF,
0x79, 0xDC, 0xEE, 0x77, 0xF3, 0x81, 0xC0, 0xE0, 0xF8, 0x00, 0x7C, 0x67,
0xE7, 0xE7, 0xE7, 0xEF, 0xEC, 0x7C, 0x0F, 0xFF, 0x79, 0xDC, 0xEE, 0x77,
0xF3, 0xB9, 0xDE, 0xE7, 0xF3, 0x80, 0x7C, 0x67, 0xE7, 0xF0, 0x78, 0x0F,
0xEF, 0xE7, 0x7C, 0xFF, 0xBB, 0xBB, 0x38, 0x38, 0x38, 0x38, 0x38, 0x7C,
0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0xE7,
0xE7, 0xE7, 0xE7, 0xE4, 0x7C, 0x38, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0xBF,
0xFF, 0xDF, 0xEF, 0xE3, 0x80, 0xE3, 0xF1, 0xF8, 0xEE, 0xE3, 0xC1, 0xE0,
0xDC, 0xEE, 0xE3, 0x80, 0xE7, 0xE7, 0xE7, 0xE7, 0x7C, 0x38, 0x38, 0x38,
0x7C, 0xFF, 0xF1, 0xF8, 0xF0, 0xE0, 0xC1, 0xCC, 0xC6, 0xE7, 0xFF, 0x80,
0xFF, 0x39, 0xCE, 0x73, 0x9C, 0xF8, 0xE0, 0x78, 0x1C, 0x07, 0x00, 0xC0,
0x38, 0x1E, 0x07, 0x01, 0x80, 0xFF, 0xC6, 0x31, 0x8C, 0x63, 0xF8, 0x08,
0x06, 0x0F, 0x0E, 0xEE, 0x38, 0xFF, 0xC0, 0xEE, 0xE3, 0x7C, 0x03, 0x9F,
0xCC, 0xEE, 0x73, 0xDC, 0xF0, 0x78, 0x1C, 0x0E, 0x07, 0xF3, 0x9D, 0xCE,
0xE7, 0xEF, 0x00, 0x7C, 0xE7, 0xE0, 0xE7, 0xE7, 0x7C, 0x0F, 0x07, 0x81,
0xC0, 0xE7, 0xF7, 0x3B, 0x9D, 0xCE, 0x7B, 0x80, 0x7C, 0xE7, 0xFF, 0xE0,
0xE0, 0x7C, 0x3C, 0x37, 0x77, 0x70, 0xF8, 0x70, 0x70, 0x70, 0xF8, 0x7B,
0xF3, 0xB9, 0xDC, 0xE7, 0xF0, 0x3B, 0xF0, 0xF0, 0x78, 0x1C, 0x0E, 0xE7,
0xBB, 0x9D, 0xCE, 0xE7, 0xF3, 0x80, 0x73, 0x81, 0xE7, 0x39, 0xCE, 0xF8,
0x07, 0x07, 0x00, 0x07, 0x07, 0x07, 0xE7, 0xE7, 0xE7, 0x7C, 0xF0, 0x78,
0x1C, 0x0E, 0x77, 0x73, 0xE1, 0xDC, 0xEE, 0xF3, 0x80, 0xF7, 0x9C, 0xE7,
0x39, 0xCE, 0xF8, 0xE7, 0x7F, 0xFF, 0xFD, 0x7E, 0xBF, 0x1C, 0xFC, 0xE7,
0xE7, 0xE7, 0xE7, 0xE7, 0x7C, 0xE7, 0xE7, 0xE7, 0xE7, 0x7C, 0xEF, 0x39,
0xDC, 0xEE, 0x67, 0xF3, 0x83, 0xE0, 0x7B, 0xF3, 0xB9, 0xDC, 0xE7, 0xF0,
0x38, 0x3E, 0xEF, 0x3D, 0xDC, 0xEE, 0x77, 0x07, 0xC0, 0x7F, 0xE0, 0x7C,
0x7F, 0x07, 0xFC, 0x10, 0x21, 0xC7, 0xF7, 0x0E, 0x1D, 0xBB, 0x18, 0xE7,
0x73, 0xB9, 0xDC, 0xEE, 0x73, 0xDC, 0xE7, 0xE7, 0xE7, 0xE4, 0x7C, 0x38,
0xE3, 0xF5, 0xFF, 0xFF, 0xFF, 0xFB, 0xB8, 0xE3, 0xBB, 0x8F, 0x06, 0xE7,
0x77, 0x1C, 0xE7, 0xE7, 0xE7, 0xE7, 0x7F, 0x07, 0xFC, 0xFF, 0x8C, 0x38,
0x33, 0x73, 0xFF, 0x0F, 0x08, 0x38, 0x38, 0xF0, 0x38, 0x38, 0x38, 0x0F,
0xFF, 0x3F, 0xC0, 0xF0, 0xF8, 0x38, 0x38, 0x0F, 0x38, 0x38, 0x38, 0xF0,
0x7B, 0xB5, 0xBB, 0xC0 };
const GFXglyph Px437_IBM_BIOS5pt7bGlyphs[] PROGMEM = {
{ 0, 1, 1, 10, 0, 0 }, // 0x20 ' '
{ 1, 5, 9, 10, 1, -8 }, // 0x21 '!'
{ 7, 7, 4, 10, 1, -8 }, // 0x22 '"'
{ 11, 9, 9, 10, 0, -8 }, // 0x23 '#'
{ 22, 8, 9, 10, 0, -8 }, // 0x24 '$'
{ 31, 9, 8, 10, 0, -7 }, // 0x25 '%'
{ 40, 9, 9, 10, 0, -8 }, // 0x26 '&'
{ 51, 4, 4, 10, 0, -8 }, // 0x27 '''
{ 53, 5, 9, 10, 1, -8 }, // 0x28 '('
{ 59, 5, 9, 10, 1, -8 }, // 0x29 ')'
{ 65, 10, 7, 10, 0, -7 }, // 0x2A '*'
{ 74, 8, 7, 10, 0, -7 }, // 0x2B '+'
{ 81, 4, 4, 10, 1, -2 }, // 0x2C ','
{ 83, 8, 1, 10, 0, -4 }, // 0x2D '-'
{ 84, 3, 3, 10, 2, -2 }, // 0x2E '.'
{ 86, 9, 9, 10, 0, -8 }, // 0x2F '/'
{ 97, 9, 9, 10, 0, -8 }, // 0x30 '0'
{ 108, 8, 9, 10, 0, -8 }, // 0x31 '1'
{ 117, 8, 9, 10, 0, -8 }, // 0x32 '2'
{ 126, 8, 9, 10, 0, -8 }, // 0x33 '3'
{ 135, 9, 9, 10, 0, -8 }, // 0x34 '4'
{ 146, 8, 9, 10, 0, -8 }, // 0x35 '5'
{ 155, 8, 9, 10, 0, -8 }, // 0x36 '6'
{ 164, 8, 9, 10, 0, -8 }, // 0x37 '7'
{ 173, 8, 9, 10, 0, -8 }, // 0x38 '8'
{ 182, 8, 9, 10, 0, -8 }, // 0x39 '9'
{ 191, 3, 8, 10, 2, -7 }, // 0x3A ':'
{ 194, 4, 9, 10, 1, -7 }, // 0x3B ';'
{ 199, 6, 9, 10, 0, -8 }, // 0x3C '<'
{ 206, 8, 5, 10, 0, -5 }, // 0x3D '='
{ 211, 7, 9, 10, 1, -8 }, // 0x3E '>'
{ 219, 8, 9, 10, 0, -8 }, // 0x3F '?'
{ 228, 9, 9, 10, 0, -8 }, // 0x40 '@'
{ 239, 8, 9, 10, 0, -8 }, // 0x41 'A'
{ 248, 9, 9, 10, 0, -8 }, // 0x42 'B'
{ 259, 9, 9, 10, 0, -8 }, // 0x43 'C'
{ 270, 9, 9, 10, 0, -8 }, // 0x44 'D'
{ 281, 9, 9, 10, 0, -8 }, // 0x45 'E'
{ 292, 9, 9, 10, 0, -8 }, // 0x46 'F'
{ 303, 9, 9, 10, 0, -8 }, // 0x47 'G'
{ 314, 8, 9, 10, 0, -8 }, // 0x48 'H'
{ 323, 5, 9, 10, 1, -8 }, // 0x49 'I'
{ 329, 9, 9, 10, 0, -8 }, // 0x4A 'J'
{ 340, 9, 9, 10, 0, -8 }, // 0x4B 'K'
{ 351, 9, 9, 10, 0, -8 }, // 0x4C 'L'
{ 362, 9, 9, 10, 0, -8 }, // 0x4D 'M'
{ 373, 9, 9, 10, 0, -8 }, // 0x4E 'N'
{ 384, 9, 9, 10, 0, -8 }, // 0x4F 'O'
{ 395, 9, 9, 10, 0, -8 }, // 0x50 'P'
{ 406, 8, 9, 10, 0, -8 }, // 0x51 'Q'
{ 415, 9, 9, 10, 0, -8 }, // 0x52 'R'
{ 426, 8, 9, 10, 0, -8 }, // 0x53 'S'
{ 435, 8, 9, 10, 0, -8 }, // 0x54 'T'
{ 444, 8, 9, 10, 0, -8 }, // 0x55 'U'
{ 453, 8, 9, 10, 0, -8 }, // 0x56 'V'
{ 462, 9, 9, 10, 0, -8 }, // 0x57 'W'
{ 473, 9, 9, 10, 0, -8 }, // 0x58 'X'
{ 484, 8, 9, 10, 0, -8 }, // 0x59 'Y'
{ 493, 9, 9, 10, 0, -8 }, // 0x5A 'Z'
{ 504, 5, 9, 10, 1, -8 }, // 0x5B '['
{ 510, 9, 9, 10, 0, -8 }, // 0x5C '\'
{ 521, 5, 9, 10, 1, -8 }, // 0x5D ']'
{ 527, 9, 5, 10, 0, -8 }, // 0x5E '^'
{ 533, 10, 1, 10, 0, 1 }, // 0x5F '_'
{ 535, 4, 4, 10, 2, -8 }, // 0x60 '`'
{ 537, 9, 6, 10, 0, -5 }, // 0x61 'a'
{ 544, 9, 9, 10, 0, -8 }, // 0x62 'b'
{ 555, 8, 6, 10, 0, -5 }, // 0x63 'c'
{ 561, 9, 9, 10, 0, -8 }, // 0x64 'd'
{ 572, 8, 6, 10, 0, -5 }, // 0x65 'e'
{ 578, 8, 9, 10, 0, -8 }, // 0x66 'f'
{ 587, 9, 7, 10, 0, -5 }, // 0x67 'g'
{ 595, 9, 9, 10, 0, -8 }, // 0x68 'h'
{ 606, 5, 9, 10, 1, -8 }, // 0x69 'i'
{ 612, 8, 10, 10, 0, -8 }, // 0x6A 'j'
{ 622, 9, 9, 10, 0, -8 }, // 0x6B 'k'
{ 633, 5, 9, 10, 1, -8 }, // 0x6C 'l'
{ 639, 9, 6, 10, 0, -5 }, // 0x6D 'm'
{ 646, 8, 6, 10, 0, -5 }, // 0x6E 'n'
{ 652, 8, 6, 10, 0, -5 }, // 0x6F 'o'
{ 658, 9, 7, 10, 0, -5 }, // 0x70 'p'
{ 666, 9, 7, 10, 0, -5 }, // 0x71 'q'
{ 674, 9, 6, 10, 0, -5 }, // 0x72 'r'
{ 681, 8, 6, 10, 0, -5 }, // 0x73 's'
{ 687, 7, 9, 10, 1, -8 }, // 0x74 't'
{ 695, 9, 6, 10, 0, -5 }, // 0x75 'u'
{ 702, 8, 6, 10, 0, -5 }, // 0x76 'v'
{ 708, 9, 6, 10, 0, -5 }, // 0x77 'w'
{ 715, 9, 6, 10, 0, -5 }, // 0x78 'x'
{ 722, 8, 7, 10, 0, -5 }, // 0x79 'y'
{ 729, 8, 6, 10, 0, -5 }, // 0x7A 'z'
{ 735, 8, 9, 10, 0, -8 }, // 0x7B '{'
{ 744, 2, 9, 10, 4, -8 }, // 0x7C '|'
{ 747, 8, 9, 10, 0, -8 }, // 0x7D '}'
{ 756, 9, 3, 10, 0, -8 } }; // 0x7E '~'
const GFXfont Px437_IBM_BIOS5pt7b PROGMEM = {
(uint8_t *)Px437_IBM_BIOS5pt7bBitmaps,
(GFXglyph *)Px437_IBM_BIOS5pt7bGlyphs,
0x20, 0x7E, 10 };
// Approx. 1432 bytes

View File

@ -1,31 +0,0 @@
#include "Watchy_DOS.h"
void WatchyDOS::drawWatchFace(){
char time[6];
time[0] = '0' + ((currentTime.Hour/10)%10);
time[1] = '0' + (currentTime.Hour%10);
time[2] = ':';
time[3] = '0' + ((currentTime.Minute/10)%10);
time[4] = '0' + (currentTime.Minute%10);
time[5] = 0;
display.fillScreen(GxEPD_BLACK);
display.setTextColor(GxEPD_WHITE);
display.setFont(&Px437_IBM_BIOS5pt7b);
display.setCursor(0, 24);
display.println("WATCHY-DOS 1.1.8");
display.println("Copyright (c) 2020");
display.println(" ");
display.print("AUTOEXEC BAT ");
display.println(time);
display.print("COMMAND COM ");
display.println(time);
display.print("CONFIG SYS ");
display.println(time);
display.print("ESPTOOL PY ");
display.println(time);
display.println(" ");
display.println(" 4 files 563 bytes");
display.println(" 2048 bytes free");
display.println(" ");
display.println("<C:\\>esptool");
}

View File

@ -1,13 +0,0 @@
#ifndef WATCHY_DOS_H
#define WATCHY_DOS_H
#include <Watchy.h>
#include "Px437_IBM_BIOS5pt7b.h"
class WatchyDOS : public Watchy{
using Watchy::Watchy;
public:
void drawWatchFace();
};
#endif

View File

@ -1,43 +0,0 @@
#ifndef SETTINGS_H
#define SETTINGS_H
//Weather Settings
#define CITY_ID "5128581" //New York City https://openweathermap.org/current#cityid
//You can also use LAT,LON for your location instead of CITY_ID, but not both
//#define LAT "40.7127" //New York City, Looked up on https://www.latlong.net/
//#define LON "-74.0059"
#ifdef CITY_ID
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?id={cityID}&lang={lang}&units={units}&appid={apiKey}" //open weather api using city ID
#else
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&lang={lang}&units={units}&appid={apiKey}" //open weather api using lat lon
#endif
#define OPENWEATHERMAP_APIKEY "f058fe1cad2afe8e2ddc5d063a64cecb" //use your own API key :)
#define TEMP_UNIT "metric" //metric = Celsius , imperial = Fahrenheit
#define TEMP_LANG "en"
#define WEATHER_UPDATE_INTERVAL 30 //must be greater than 5, measured in minutes
//NTP Settings
#define NTP_SERVER "pool.ntp.org"
#define GMT_OFFSET_SEC 3600 * -5 //New York is UTC -5 EST, -4 EDT, will be overwritten by weather data
watchySettings settings{
#ifdef CITY_ID
.cityID = CITY_ID,
#else
.cityID = "",
.lat = LAT,
.lon = LON,
#endif
.weatherAPIKey = OPENWEATHERMAP_APIKEY,
.weatherURL = OPENWEATHERMAP_URL,
.weatherUnit = TEMP_UNIT,
.weatherLang = TEMP_LANG,
.weatherUpdateInterval = WEATHER_UPDATE_INTERVAL,
.ntpServer = NTP_SERVER,
.gmtOffset = GMT_OFFSET_SEC,
.vibrateOClock = true,
};
#endif

View File

@ -1,10 +0,0 @@
#include "Watchy_MacPaint.h"
#include "settings.h"
WatchyMacPaint watchy(settings);
void setup(){
watchy.init();
}
void loop(){}

View File

@ -1,19 +0,0 @@
#include "Watchy_MacPaint.h"
const unsigned char *numbers [10] = {numbers0, numbers1, numbers2, numbers3, numbers4, numbers5, numbers6, numbers7, numbers8, numbers9};
void WatchyMacPaint::drawWatchFace(){
display.fillScreen(GxEPD_WHITE);
display.drawBitmap(0, 0, window, DISPLAY_WIDTH, DISPLAY_HEIGHT, GxEPD_BLACK);
//Hour
display.drawBitmap(35, 70, numbers[currentTime.Hour/10], 38, 50, GxEPD_BLACK); //first digit
display.drawBitmap(70, 70, numbers[currentTime.Hour%10], 38, 50, GxEPD_BLACK); //second digit
//Colon
display.drawBitmap(100, 80, colon, 11, 31, GxEPD_BLACK); //second digit
//Minute
display.drawBitmap(115, 70, numbers[currentTime.Minute/10], 38, 50, GxEPD_BLACK); //first digit
display.drawBitmap(153, 70, numbers[currentTime.Minute%10], 38, 50, GxEPD_BLACK); //second digit
}

View File

@ -1,13 +0,0 @@
#ifndef WATCHY_MACPAINT_H
#define WATCHY_MACPAINT_H
#include <Watchy.h>
#include "macpaint.h"
class WatchyMacPaint : public Watchy{
using Watchy::Watchy;
public:
void drawWatchFace();
};
#endif

View File

@ -1,513 +0,0 @@
// 'colon', 11x31px
const unsigned char colon [] PROGMEM = {
0x00, 0x00, 0x07, 0x00, 0x0f, 0xc0, 0x1f, 0xc0, 0x3f, 0xc0, 0x3f, 0xc0, 0x3f, 0xc0, 0x1f, 0xc0,
0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x1f, 0x80, 0x3f, 0x80,
0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x3f, 0x80, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00
};
// 'h0', 38x50px
const unsigned char numbers0 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc,
0x00, 0x00, 0x00, 0x03, 0xfe, 0x00, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00,
0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0xff, 0xfc, 0xe0, 0x00,
0x01, 0xff, 0x81, 0xf0, 0x00, 0x01, 0xff, 0x03, 0xf8, 0x00, 0x01, 0xfe, 0x03, 0xfc, 0x00, 0x03,
0xfc, 0x03, 0xfe, 0x00, 0x03, 0xf8, 0x01, 0xfe, 0x00, 0x07, 0xf8, 0x00, 0xfe, 0x00, 0x07, 0xf0,
0x00, 0xff, 0x00, 0x07, 0xf0, 0x00, 0xff, 0x00, 0x07, 0xf0, 0x00, 0x7f, 0x00, 0x07, 0xf8, 0x00,
0x7f, 0x00, 0x07, 0xfc, 0x00, 0x7f, 0x00, 0x03, 0xfc, 0x00, 0x7f, 0x00, 0x01, 0xfc, 0x00, 0xff,
0x00, 0x01, 0xfc, 0x00, 0xfe, 0x00, 0x01, 0xfe, 0x01, 0xfe, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00,
0x00, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x7f, 0xff, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0xf8, 0x00, 0x00,
0x1f, 0xff, 0xe0, 0x00, 0x00, 0x0f, 0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'h1', 38x50px
const unsigned char numbers1 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x01,
0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00,
0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x1f, 0x7f, 0x80, 0x00, 0x00, 0x0e, 0x3f, 0x80, 0x00,
0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00,
0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00,
0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f,
0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x80,
0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00,
0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00,
0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f,
0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00,
0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00,
0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'h2', 38x50px
const unsigned char numbers2 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x3f,
0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00, 0xff, 0xff,
0xe0, 0x00, 0x01, 0xff, 0xff, 0xf0, 0x00, 0x03, 0xfe, 0x3f, 0xf8, 0x00, 0x07, 0xfc, 0x07, 0xf8,
0x00, 0x07, 0xf8, 0x03, 0xf8, 0x00, 0x07, 0xf0, 0x03, 0xf8, 0x00, 0x07, 0xf0, 0x03, 0xfc, 0x00,
0x07, 0xf0, 0x01, 0xfc, 0x00, 0x07, 0xf0, 0x01, 0xfc, 0x00, 0x07, 0xf0, 0x03, 0xfc, 0x00, 0x07,
0xf8, 0x03, 0xfc, 0x00, 0x07, 0xf8, 0x07, 0xf8, 0x00, 0x03, 0xf8, 0x07, 0xf0, 0x00, 0x01, 0xf0,
0x0f, 0xf0, 0x00, 0x00, 0xe0, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x3f,
0xc0, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0x01, 0xff, 0x00,
0x00, 0x00, 0x03, 0xfe, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00,
0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x01,
0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0x80, 0x00, 0x00, 0x07, 0xff, 0x00, 0x01, 0xc0, 0x0f, 0xfe,
0x00, 0x03, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff,
0xff, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xe0, 0x01, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0xff,
0x80, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'h3', 38x50px
const unsigned char numbers3 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0xff, 0x80, 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x3f, 0xff, 0xf8, 0x00, 0x00, 0x7f,
0xff, 0xfc, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x01, 0xff, 0xff, 0xff, 0x00, 0x01, 0xff, 0xff,
0xff, 0x00, 0x01, 0xff, 0x01, 0xff, 0x80, 0x01, 0xfc, 0x00, 0x7f, 0x80, 0x01, 0xfc, 0x00, 0x3f,
0xc0, 0x01, 0xfc, 0x00, 0x3f, 0xc0, 0x01, 0xfc, 0x00, 0x1f, 0xc0, 0x01, 0xfc, 0x00, 0x3f, 0xc0,
0x01, 0xfc, 0x00, 0x7f, 0xc0, 0x00, 0xf8, 0x00, 0x7f, 0x80, 0x00, 0x70, 0x00, 0x7f, 0x00, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00,
0x0f, 0xfc, 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f,
0xf0, 0x00, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x03, 0x80, 0x0f, 0xfe,
0x00, 0x07, 0xc0, 0x07, 0xff, 0x00, 0x0f, 0xe0, 0x00, 0xff, 0x00, 0x1f, 0xe0, 0x00, 0x7f, 0x00,
0x1f, 0xe0, 0x00, 0x7f, 0x00, 0x1f, 0xc0, 0x00, 0x7f, 0x00, 0x1f, 0xc0, 0x00, 0x7f, 0x00, 0x1f,
0xc0, 0x00, 0x7f, 0x00, 0x1f, 0xc0, 0x00, 0x7f, 0x00, 0x1f, 0xf0, 0x00, 0x7f, 0x00, 0x1f, 0xf8,
0x00, 0xff, 0x00, 0x1f, 0xfc, 0x07, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xfe, 0x00, 0x07, 0xff, 0xff,
0xfc, 0x00, 0x03, 0xff, 0xff, 0xf8, 0x00, 0x01, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x3f, 0xff, 0xe0,
0x00, 0x00, 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'h4', 38x50px
const unsigned char numbers4 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7f,
0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00,
0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x70, 0x00, 0x00, 0x7f, 0x00, 0xf8,
0x00, 0x00, 0x7f, 0x01, 0xfc, 0x00, 0x00, 0x7f, 0x01, 0xfc, 0x00, 0x00, 0xff, 0x01, 0xfc, 0x00,
0x00, 0xff, 0x01, 0xfc, 0x00, 0x00, 0xfe, 0x01, 0xfc, 0x00, 0x00, 0xfe, 0x01, 0xfc, 0x00, 0x00,
0xfe, 0x01, 0xfc, 0x00, 0x00, 0xfe, 0x01, 0xff, 0x00, 0x00, 0xfe, 0x01, 0xff, 0x80, 0x01, 0xfe,
0x01, 0xff, 0xc0, 0x01, 0xfe, 0x0f, 0xff, 0xc0, 0x01, 0xfd, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff,
0xff, 0x80, 0x01, 0xff, 0xff, 0xff, 0x00, 0x01, 0xff, 0xff, 0xfe, 0x00, 0x01, 0xff, 0xff, 0xfe,
0x00, 0x01, 0xff, 0xff, 0xfe, 0x00, 0x01, 0xff, 0xfc, 0xfe, 0x00, 0x00, 0xff, 0x80, 0xfe, 0x00,
0x00, 0x70, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00,
0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00,
0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00,
0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'h5', 38x50px
const unsigned char numbers5 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, 0x00, 0x07,
0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0x80, 0x0f, 0xff, 0xff, 0xff, 0x80, 0x0f, 0xff,
0xff, 0xff, 0x80, 0x07, 0xff, 0xff, 0xff, 0x00, 0x07, 0xff, 0xff, 0xfe, 0x00, 0x07, 0xf0, 0x00,
0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00,
0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x7c, 0x00, 0x00, 0x07, 0xff, 0xff, 0x80, 0x00,
0x07, 0xff, 0xff, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xff, 0xf8, 0x00, 0x07,
0xff, 0xff, 0xfc, 0x00, 0x07, 0xff, 0xff, 0xfe, 0x00, 0x07, 0xff, 0xef, 0xff, 0x00, 0x07, 0xf0,
0x00, 0xff, 0x80, 0x03, 0xe0, 0x00, 0x7f, 0x80, 0x01, 0xc0, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00,
0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f,
0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x7f, 0x80,
0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00,
0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x07, 0xff, 0xfc, 0x00, 0x00, 0x0f,
0xff, 0xf8, 0x00, 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x1f, 0xff,
0xc0, 0x00, 0x00, 0x0f, 0xff, 0x80, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'h6', 38x50px
const unsigned char numbers6 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01,
0xff, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x00, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x0f, 0xf8,
0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00,
0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x03,
0xfe, 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00, 0x00, 0x03, 0xf8, 0xfe, 0x00, 0x00, 0x07, 0xf9,
0xff, 0x00, 0x00, 0x07, 0xf3, 0xff, 0x80, 0x00, 0x0f, 0xf3, 0xff, 0xc0, 0x00, 0x0f, 0xe3, 0xff,
0xe0, 0x00, 0x0f, 0xe1, 0xff, 0xf0, 0x00, 0x1f, 0xe0, 0xff, 0xf8, 0x00, 0x1f, 0xe0, 0x07, 0xfc,
0x00, 0x1f, 0xc0, 0x03, 0xfc, 0x00, 0x1f, 0xc0, 0x01, 0xfc, 0x00, 0x1f, 0xc0, 0x01, 0xfc, 0x00,
0x1f, 0xc0, 0x01, 0xfc, 0x00, 0x1f, 0xc0, 0x01, 0xfc, 0x00, 0x1f, 0xc0, 0x01, 0xfc, 0x00, 0x1f,
0xc0, 0x01, 0xfc, 0x00, 0x1f, 0xe0, 0x01, 0xfc, 0x00, 0x1f, 0xe0, 0x03, 0xfc, 0x00, 0x0f, 0xe0,
0x1f, 0xf8, 0x00, 0x0f, 0xfc, 0x3f, 0xf8, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xff,
0xe0, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 0xff, 0xff, 0x00,
0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'h7', 38x50px
const unsigned char numbers7 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xfe, 0x00, 0x00, 0x07, 0xff,
0xff, 0xfc, 0x00, 0x0f, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff,
0xff, 0x80, 0x07, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x07, 0xff,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00,
0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00,
0x00, 0x03, 0xf8, 0x00, 0x00, 0x01, 0xc3, 0xf8, 0x00, 0x00, 0x03, 0xff, 0xf8, 0x00, 0x00, 0x07,
0xff, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x03, 0xff,
0xf8, 0x00, 0x00, 0x01, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x1f, 0xfc,
0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00,
0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00,
0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'h8', 38x50px
const unsigned char numbers8 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x80, 0x00, 0x00,
0x3f, 0xff, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x01, 0xff,
0xff, 0xf8, 0x00, 0x03, 0xff, 0xff, 0xf8, 0x00, 0x07, 0xff, 0x8f, 0xf8, 0x00, 0x07, 0xf8, 0x03,
0xf8, 0x00, 0x07, 0xf0, 0x03, 0xf8, 0x00, 0x0f, 0xf0, 0x03, 0xf8, 0x00, 0x0f, 0xf0, 0x03, 0xf8,
0x00, 0x0f, 0xe0, 0x07, 0xf8, 0x00, 0x0f, 0xe0, 0x07, 0xf8, 0x00, 0x0f, 0xe0, 0x07, 0xf0, 0x00,
0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x0f, 0xf8, 0x1f, 0xf0, 0x00, 0x07, 0xff, 0xdf, 0xe0, 0x00, 0x03,
0xff, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x7f,
0xff, 0xf0, 0x00, 0x00, 0x3f, 0xff, 0xf8, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x00, 0x00, 0x03, 0xff,
0xfc, 0x00, 0x00, 0x07, 0xff, 0xfe, 0x00, 0x00, 0x07, 0xf9, 0xff, 0x00, 0x00, 0x0f, 0xf0, 0xff,
0x80, 0x00, 0x1f, 0xe0, 0x7f, 0xc0, 0x00, 0x1f, 0xe0, 0x3f, 0xe0, 0x00, 0x1f, 0xc0, 0x1f, 0xe0,
0x00, 0x3f, 0xc0, 0x0f, 0xe0, 0x00, 0x3f, 0xc0, 0x0f, 0xf0, 0x00, 0x3f, 0x80, 0x0f, 0xf0, 0x00,
0x7f, 0x80, 0x07, 0xf0, 0x00, 0x7f, 0x80, 0x0f, 0xf0, 0x00, 0x7f, 0x00, 0x0f, 0xf0, 0x00, 0x7f,
0x80, 0x0f, 0xe0, 0x00, 0x7f, 0x80, 0x1f, 0xe0, 0x00, 0x3f, 0xf0, 0x3f, 0xe0, 0x00, 0x3f, 0xff,
0xff, 0xc0, 0x00, 0x3f, 0xff, 0xff, 0x80, 0x00, 0x1f, 0xff, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xfe,
0x00, 0x00, 0x07, 0xff, 0xfc, 0x00, 0x00, 0x01, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'h9', 38x50px
const unsigned char numbers9 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00,
0x03, 0xf8, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x00, 0x7f,
0xff, 0x80, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, 0x03, 0xff, 0xff,
0xe0, 0x00, 0x03, 0xff, 0x1f, 0xe0, 0x00, 0x03, 0xf8, 0x0f, 0xe0, 0x00, 0x07, 0xf8, 0x0f, 0xe0,
0x00, 0x07, 0xf8, 0x1f, 0xe0, 0x00, 0x07, 0xf0, 0x1f, 0xe0, 0x00, 0x07, 0xf0, 0x1f, 0xc0, 0x00,
0x07, 0xf0, 0x3f, 0xc0, 0x00, 0x07, 0xf0, 0x7f, 0xc0, 0x00, 0x07, 0xf0, 0x7f, 0x80, 0x00, 0x07,
0xf8, 0x7f, 0x00, 0x00, 0x07, 0xff, 0xfe, 0x00, 0x00, 0x03, 0xff, 0xfe, 0x00, 0x00, 0x03, 0xff,
0xff, 0x00, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00,
0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00,
0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00,
0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00,
0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'macpaint', 200x200px
const unsigned char window [] PROGMEM = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x40, 0x00, 0x10, 0x10, 0x00, 0x80, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1b, 0x00,
0x8a, 0x40, 0x11, 0xc6, 0x01, 0x08, 0x46, 0x91, 0x00, 0x84, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x96, 0xa0, 0x12, 0xb4, 0x01, 0x15, 0x5a,
0xaa, 0x00, 0xca, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x1f, 0x00, 0x9a, 0xe0, 0x12, 0x94, 0x01, 0x55, 0x55, 0xbb, 0x00, 0x8a, 0xa4, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x92, 0x80, 0x32, 0xd6, 0x01,
0x55, 0x56, 0xa1, 0x80, 0xca, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x09, 0x00, 0x00, 0x88, 0x88, 0x10, 0x00, 0x04, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4a, 0xaa, 0xaa, 0xa5, 0x52, 0x55, 0x55, 0x49, 0x24, 0x95,
0x54, 0xa5, 0x55, 0x55, 0x55, 0x4a, 0x55, 0x54, 0xa5, 0x55, 0x4a, 0x55, 0x54, 0xa5, 0x55, 0xb5,
0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x4a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x55, 0xbf, 0xde, 0xff, 0xfa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0x40, 0x01, 0x00, 0x0d, 0x5f, 0x77,
0x77, 0x7f, 0xff, 0x77, 0x77, 0xff, 0x77, 0x77, 0x77, 0x7d, 0xf7, 0x77, 0xdf, 0x77, 0x7d, 0xf7,
0x77, 0xdd, 0x55, 0xc0, 0x00, 0x00, 0x05, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x41, 0xe2, 0x36, 0x4d,
0x4d, 0xbb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xbb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0xdb,
0x6d, 0xb6, 0xdb, 0x6d, 0x55, 0x84, 0x09, 0x00, 0x2d, 0x6a, 0x02, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0xab, 0x48, 0x08,
0x00, 0x06, 0xab, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x88, 0x31, 0x20, 0x2d, 0x55, 0x05, 0x56, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xad, 0xaa,
0x4b, 0x80, 0x00, 0x0d, 0x6a, 0x05, 0x6a, 0xd5, 0x55, 0xb6, 0xdb, 0x55, 0xb6, 0xd5, 0xb6, 0xd6,
0xdb, 0x6d, 0x6d, 0xb6, 0xdb, 0x5b, 0x6d, 0x69, 0x55, 0xc4, 0x02, 0x00, 0x0a, 0xab, 0x7a, 0xaa,
0xad, 0xb6, 0xaa, 0xaa, 0xb6, 0xaa, 0xad, 0x55, 0x5a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xad, 0xab, 0x42, 0x01, 0x2a, 0xcd, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x84, 0x00, 0x00, 0x0d, 0x75,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x55, 0x55, 0x55, 0xaa, 0x40, 0x02, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0xf7, 0x7b, 0xff,
0xfd, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x40, 0x00, 0x00, 0x05, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40,
0x82, 0x04, 0x0d, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x85, 0x60, 0x06, 0x0d, 0xa0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x55, 0x41, 0x29, 0x0a, 0x05, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0xc6, 0x28, 0x0b, 0x0d, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x55, 0x4a, 0x02, 0x11, 0x0d, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x84, 0x11, 0x1d, 0x85,
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x10, 0x20, 0x8d, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x82, 0x22,
0x20, 0xcd, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x00, 0x61, 0xa5, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa,
0xd5, 0x53, 0x14, 0x4d, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x0a, 0x82, 0x2d, 0xa0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0xab, 0x81, 0x00, 0x00, 0x0d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x42, 0x82, 0x20, 0x05, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0xaa, 0xc2, 0x81, 0x16, 0x0d, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x42, 0xa0, 0x05,
0x0d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x44, 0x9a, 0x0b, 0x0d, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x88,
0x18, 0x0a, 0x05, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x40, 0x32, 0x0b, 0x0d, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x55, 0xc4, 0x59, 0x09, 0x0d, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x42, 0x90, 0x0b, 0x0d, 0x60, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x55, 0x80, 0x01, 0x00, 0x05, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x7f, 0xff, 0x7b, 0xfd,
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x55, 0xff, 0xfe, 0x00, 0x06, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x7f, 0x7e,
0x03, 0x0d, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0xff, 0x3e, 0x00, 0x8d, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa,
0x7f, 0x7e, 0x07, 0x05, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0xff, 0x3e, 0x01, 0x0d, 0x60, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0xab, 0x7d, 0x5e, 0x0a, 0x0d, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0xfc, 0x9e, 0x12, 0x05, 0xa0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0xaa, 0x7f, 0xfe, 0x14, 0x0d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0xfc, 0x9e, 0x18,
0x0d, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x7a, 0x5e, 0x00, 0x05, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0xff,
0xff, 0x52, 0x4d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x40, 0x02, 0x09, 0x2d, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x55, 0x80, 0x01, 0x00, 0x0d, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x40, 0x00, 0x03, 0x85, 0x60, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x55, 0x88, 0x02, 0x04, 0x4d, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x46, 0x01, 0x08, 0xcd,
0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x55, 0xc1, 0x82, 0x11, 0x8d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x40, 0x60,
0x2b, 0x05, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x80, 0x12, 0x26, 0x0d, 0xa0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa,
0x40, 0x01, 0x34, 0x0c, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x80, 0x00, 0x00, 0x06, 0xa0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0xab, 0x40, 0x02, 0x00, 0x0d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0xff, 0xfb, 0xfb, 0xed, 0x50,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0xaa, 0x40, 0x00, 0x00, 0x0d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x80, 0x02, 0x00,
0x05, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x4d, 0xb1, 0x3e, 0xcd, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x80,
0x08, 0x22, 0xad, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x48, 0x09, 0x35, 0x45, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x55, 0xc8, 0x08, 0x2a, 0xcd, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x48, 0x0a, 0x2a, 0xad, 0x60, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x55, 0x8a, 0xa8, 0x3f, 0xc5, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x40, 0x01, 0x00, 0x0d,
0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x55, 0x80, 0x02, 0x00, 0x0d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x52, 0xa9,
0x22, 0x0d, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0xc8, 0x45, 0x49, 0x55, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa,
0x40, 0x00, 0x00, 0x0d, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x80, 0x02, 0x00, 0x0d, 0x60, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0xab, 0x47, 0xf1, 0x1f, 0xc5, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x88, 0x08, 0x2a, 0x4d, 0x60,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0xaa, 0x48, 0x09, 0x35, 0xad, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0xc8, 0x08, 0x2a,
0x8d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x40, 0x02, 0x2a, 0xc5, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x87,
0x61, 0x1d, 0x0d, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x40, 0x00, 0x00, 0x0d, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x55, 0x80, 0x02, 0x00, 0x0d, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x7f, 0xff, 0xf7, 0xf5, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x55, 0x80, 0x00, 0x00, 0x0d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x40, 0x01, 0x00, 0x0d,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x55, 0xc2, 0xc0, 0x0d, 0x05, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x44, 0x32,
0x15, 0xcd, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x88, 0x08, 0x2a, 0xad, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa,
0x48, 0x09, 0x35, 0x45, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x88, 0x10, 0x35, 0x4d, 0x60, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0xab, 0x46, 0xb2, 0x1f, 0x8d, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0xc0, 0x01, 0x00, 0x06, 0xa0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0xaa, 0x40, 0x00, 0x00, 0x0d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x82, 0x93, 0x00,
0x4d, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x69, 0x4a, 0xb6, 0x95, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x80,
0x00, 0x00, 0x0d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x40, 0x02, 0x00, 0x0d, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x55, 0xc7, 0x31, 0x19, 0x8d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x48, 0x88, 0x2e, 0xc5, 0x50, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x55, 0x88, 0x09, 0x32, 0x4d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x40, 0x10, 0x2a, 0xcd,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x55, 0x84, 0x22, 0x15, 0x8d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x41, 0x81,
0x0e, 0x05, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0xc0, 0x00, 0x00, 0x0d, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa,
0x40, 0x02, 0x00, 0x0d, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x7f, 0xfb, 0xf7, 0xb5, 0x60, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0xab, 0x80, 0x00, 0x00, 0x0d, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x02, 0x00, 0x0d, 0x60,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0xaa, 0xc1, 0xb0, 0x06, 0xc5, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x42, 0x12, 0x0a,
0xcd, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x84, 0x21, 0x1a, 0x8d, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x44,
0x60, 0x2b, 0x05, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x80, 0x22, 0x29, 0x8e, 0xa0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x55, 0x4d, 0x11, 0x3f, 0xca, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0xc0, 0x40, 0x00, 0x0d, 0x50, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x55, 0x40, 0x02, 0x00, 0x05, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x80, 0x01, 0x00, 0x0d,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x55, 0x7f, 0xff, 0xff, 0xfd, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0xaa, 0xaa,
0xaa, 0xaa, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0xab, 0xdb, 0x6d, 0xad, 0xad, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x00, 0x00, 0x0d, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0xaa, 0x80, 0x00, 0x00, 0x0d, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x00, 0x00,
0x04, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x80, 0x00, 0x00, 0x0e, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40,
0x00, 0x00, 0x0a, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0xc0, 0x2a, 0xa8, 0x4d, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x55, 0x40, 0x00, 0x00, 0x05, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0x80, 0x00, 0x00, 0x0d, 0x50, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x55, 0x40, 0x40, 0x00, 0x0d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x81, 0x80, 0x00, 0x0d,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x55, 0x43, 0x00, 0x00, 0x05, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xab, 0xda, 0x3f,
0xff, 0x8d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x4c, 0x00, 0x00, 0x0d, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa,
0x80, 0x00, 0x00, 0x0d, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x02,
0x04, 0x08, 0x10, 0x20, 0x40, 0x81, 0x00, 0x01, 0x55, 0x40, 0x00, 0x00, 0x05, 0x64, 0x92, 0x94,
0xa5, 0x29, 0x4a, 0x52, 0x94, 0xa5, 0x54, 0x28, 0x50, 0xa1, 0x42, 0x85, 0x0a, 0x14, 0x28, 0x54,
0x91, 0xab, 0x80, 0x00, 0x00, 0x0d, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x55, 0x40, 0x3f, 0xff, 0x8d, 0xa4,
0x94, 0x92, 0x49, 0x24, 0x92, 0x49, 0x49, 0x29, 0x25, 0x4a, 0x95, 0x29, 0x29, 0x52, 0xa4, 0xa5,
0x25, 0x24, 0x95, 0x55, 0xc0, 0x00, 0x00, 0x85, 0x55, 0x6a, 0xd5, 0xad, 0x5b, 0x5a, 0xb6, 0xaa,
0xd5, 0x55, 0x55, 0x55, 0x56, 0xaa, 0xaa, 0xab, 0x55, 0x5a, 0xab, 0x6a, 0xab, 0x40, 0x00, 0x00,
0x0d, 0x55, 0x55, 0x55, 0x55, 0x54, 0xaa, 0xa9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x55, 0x55, 0x55, 0x55, 0x2a, 0xaa, 0x80, 0x00, 0x00, 0x0d, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40,
0x00, 0x00, 0x0d, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x4a, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0x80, 0x00, 0x40, 0x05, 0x6e, 0xdb, 0x6d, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xef, 0x6d, 0xf7, 0x7d, 0xdf, 0xdd, 0xdd, 0xfb, 0xbb, 0xfb,
0xd5, 0x40, 0x3f, 0xff, 0x8d, 0x40, 0x00, 0x00, 0xff, 0xfb, 0xba, 0xdb, 0x08, 0x5b, 0xb8, 0x41,
0x00, 0x00, 0x00, 0x88, 0xa2, 0x48, 0x84, 0x46, 0x88, 0xd5, 0xc0, 0x3f, 0xff, 0x8d, 0x40, 0x00,
0x00, 0xff, 0xfd, 0xdf, 0x77, 0x6b, 0x6e, 0xef, 0x7f, 0x00, 0x48, 0x89, 0x05, 0x77, 0x45, 0x31,
0x12, 0xad, 0xd5, 0x40, 0x00, 0x00, 0x0d, 0x43, 0xff, 0xf8, 0xff, 0xee, 0xeb, 0xdd, 0x55, 0x7b,
0xb9, 0x00, 0x00, 0x40, 0x4e, 0x72, 0xaa, 0xe2, 0x12, 0xaa, 0xee, 0xd5, 0x80, 0x00, 0x00, 0x0a,
0xc3, 0xff, 0xf8, 0xff, 0xfd, 0xdd, 0x7f, 0x55, 0x5e, 0xed, 0xff, 0x00, 0x41, 0x08, 0x85, 0x9c,
0x94, 0xaa, 0xaa, 0x99, 0xd5, 0x40, 0x00, 0x00, 0x0d, 0x43, 0xff, 0xf0, 0xff, 0xfb, 0xbf, 0xd5,
0xaa, 0xb7, 0xb8, 0x00, 0x00, 0x42, 0x28, 0x8a, 0xaa, 0xc8, 0x94, 0x03, 0x88, 0xd5, 0x80, 0x00,
0x00, 0x0d, 0x43, 0xff, 0xf8, 0xff, 0xfd, 0xd5, 0x7f, 0x55, 0x6d, 0xef, 0xff, 0x08, 0x48, 0x08,
0x89, 0x67, 0x4a, 0x91, 0x12, 0xad, 0xd6, 0x40, 0x00, 0x00, 0x05, 0x43, 0xff, 0xf8, 0xff, 0xee,
0xff, 0xeb, 0x55, 0x7e, 0xb8, 0x01, 0x00, 0x44, 0x4a, 0x22, 0x2a, 0x62, 0x32, 0xaa, 0xea, 0xd5,
0xc0, 0x3f, 0xff, 0x8d, 0x43, 0xff, 0xf8, 0xff, 0xff, 0xda, 0xdf, 0x55, 0x57, 0xed, 0xdd, 0x00,
0x41, 0x09, 0x55, 0xdc, 0xa2, 0x2a, 0xa2, 0xaa, 0xd5, 0x40, 0x3f, 0xff, 0x8d, 0x43, 0xff, 0xf0,
0xaa, 0xb1, 0x36, 0xb5, 0xaa, 0xba, 0xba, 0xab, 0xff, 0xfa, 0xbd, 0xab, 0x33, 0xdd, 0xdb, 0xbe,
0xdd, 0xd5, 0x80, 0x3f, 0xff, 0x8d, 0x43, 0xff, 0xf8, 0x80, 0x24, 0x04, 0x01, 0x12, 0x60, 0x0c,
0x41, 0x00, 0x00, 0x00, 0x8a, 0xcc, 0x40, 0x0b, 0x9a, 0x00, 0x6b, 0x40, 0x3f, 0xff, 0x8d, 0x43,
0xff, 0xf8, 0x00, 0x20, 0x12, 0x81, 0x44, 0x25, 0x48, 0xa6, 0x44, 0x48, 0x89, 0x14, 0x44, 0x51,
0x1e, 0xa4, 0x84, 0x55, 0x80, 0x00, 0x00, 0x05, 0x43, 0xff, 0xf9, 0x00, 0x20, 0x44, 0x11, 0x11,
0x60, 0x2b, 0x11, 0x11, 0x80, 0x0a, 0x23, 0x33, 0x7f, 0xfc, 0xee, 0xaa, 0xea, 0x40, 0x00, 0x00,
0x0d, 0xc3, 0xff, 0xf0, 0x80, 0x21, 0x04, 0x01, 0x44, 0x2a, 0x88, 0x01, 0x44, 0x62, 0x28, 0x8a,
0x11, 0x40, 0x0a, 0xaa, 0x8c, 0xd5, 0xc0, 0x00, 0x00, 0x0d, 0x43, 0xff, 0xf8, 0x00, 0x20, 0x04,
0x45, 0x12, 0xa0, 0x0c, 0x43, 0x00, 0x40, 0x08, 0x8a, 0xcc, 0x48, 0x93, 0x9a, 0x40, 0x55, 0x40,
0x00, 0x00, 0x0d, 0x40, 0x00, 0x00, 0x80, 0x20, 0x04, 0x01, 0x24, 0x64, 0xac, 0x4d, 0x4a, 0x48,
0xc9, 0x12, 0x44, 0x41, 0x1e, 0x64, 0x04, 0x6b, 0x80, 0x00, 0x00, 0x05, 0x40, 0x00, 0x00, 0x80,
0x21, 0x10, 0x21, 0x01, 0x21, 0x09, 0x31, 0x11, 0x40, 0x0a, 0x23, 0x33, 0x7b, 0x7c, 0xee, 0xca,
0xd5, 0x40, 0x00, 0x00, 0x0d, 0x40, 0x00, 0x01, 0x00, 0x24, 0x45, 0x05, 0x54, 0x64, 0x4a, 0x01,
0x00, 0x53, 0x29, 0x11, 0x11, 0x4c, 0x93, 0xaa, 0xaa, 0xd5, 0xff, 0xff, 0xff, 0xfd, 0x7f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0xaa, 0x92, 0x54, 0xa4, 0xaa, 0x4a,
0x55, 0x55, 0x55, 0x49, 0x24, 0xaa, 0xa4, 0xa4, 0xa4, 0x49, 0x29, 0x55, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x5b, 0x55, 0x56,
0xab, 0x55, 0xaa, 0xaa, 0xab, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};

View File

@ -1,43 +0,0 @@
#ifndef SETTINGS_H
#define SETTINGS_H
//Weather Settings
#define CITY_ID "5128581" //New York City https://openweathermap.org/current#cityid
//You can also use LAT,LON for your location instead of CITY_ID, but not both
//#define LAT "40.7127" //New York City, Looked up on https://www.latlong.net/
//#define LON "-74.0059"
#ifdef CITY_ID
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?id={cityID}&lang={lang}&units={units}&appid={apiKey}" //open weather api using city ID
#else
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&lang={lang}&units={units}&appid={apiKey}" //open weather api using lat lon
#endif
#define OPENWEATHERMAP_APIKEY "f058fe1cad2afe8e2ddc5d063a64cecb" //use your own API key :)
#define TEMP_UNIT "metric" //metric = Celsius , imperial = Fahrenheit
#define TEMP_LANG "en"
#define WEATHER_UPDATE_INTERVAL 30 //must be greater than 5, measured in minutes
//NTP Settings
#define NTP_SERVER "pool.ntp.org"
#define GMT_OFFSET_SEC 3600 * -5 //New York is UTC -5 EST, -4 EDT, will be overwritten by weather data
watchySettings settings{
#ifdef CITY_ID
.cityID = CITY_ID,
#else
.cityID = "",
.lat = LAT,
.lon = LON,
#endif
.weatherAPIKey = OPENWEATHERMAP_APIKEY,
.weatherURL = OPENWEATHERMAP_URL,
.weatherUnit = TEMP_UNIT,
.weatherLang = TEMP_LANG,
.weatherUpdateInterval = WEATHER_UPDATE_INTERVAL,
.ntpServer = NTP_SERVER,
.gmtOffset = GMT_OFFSET_SEC,
.vibrateOClock = true,
};
#endif

View File

@ -1,10 +0,0 @@
#include "Watchy_Mario.h"
#include "settings.h"
WatchyMario watchy(settings);
void setup(){
watchy.init();
}
void loop(){}

View File

@ -1,65 +0,0 @@
#include "Watchy_Mario.h"
#define NUM_W 44
#define NUM_H 44
#define COIN_W 24
#define COIN_H 30
#define PIPE_W 42
#define PIPE_H 47
#define MARIO_W 56
#define MARIO_H 54
#define NUM_SPACING 4
#define COIN_SPACING 4
#define FLOOR_H 19
#define PIPE_PADDING DISPLAY_HEIGHT - FLOOR_H - PIPE_H
#define X_PADDING (DISPLAY_WIDTH - (4*NUM_W) - (3*NUM_SPACING))/2
#define Y_PADDING 2*COIN_SPACING+COIN_H
const unsigned char *numbers [10] = {mario0, mario1, mario2, mario3, mario4, mario5, mario6, mario7, mario8, mario9};
void WatchyMario::drawWatchFace(){
display.fillScreen(GxEPD_WHITE);
display.drawBitmap(0, 0, mariobg, DISPLAY_WIDTH, DISPLAY_HEIGHT, GxEPD_BLACK);
int hour10 = currentTime.Hour/10;
int hour01 = currentTime.Hour%10;
int minute10 = currentTime.Minute/10;
int minute01 = currentTime.Minute%10;
int pos = 0;
if(hour01 == 0 && minute10 == 0 && minute01 == 0){
pos = 0;
}
else if(minute10 == 0 && minute01 == 0){
pos = 1;
}
else if(minute01 == 0){
pos = 2;
}else{
pos = 3;
}
display.drawBitmap(X_PADDING + pos*(NUM_SPACING + NUM_W) + (NUM_W/2 - MARIO_W/2) + (pos < 2 ? 8 : -8), Y_PADDING+NUM_H + 4, pos < 2 ? mariomariol : mariomarior, MARIO_W, MARIO_H, GxEPD_BLACK); //mario
display.drawBitmap(X_PADDING + pos*(NUM_SPACING + NUM_W) + (NUM_W/2 - COIN_W/2), COIN_SPACING, mariocoin, COIN_W, COIN_H, GxEPD_BLACK); //coin
if(pos == 0){
display.drawBitmap(DISPLAY_WIDTH - 2*PIPE_W, PIPE_PADDING, mariopipe, PIPE_W, PIPE_H, GxEPD_BLACK); //pipe
}
else if(pos == 1 || pos == 2){
display.drawBitmap(X_PADDING, PIPE_PADDING, mariopipe, PIPE_W, PIPE_H, GxEPD_BLACK); //pipe
display.drawBitmap(DISPLAY_WIDTH - PIPE_W - X_PADDING, PIPE_PADDING, mariopipe, PIPE_W, PIPE_H, GxEPD_BLACK); //pipe
}
else{
display.drawBitmap(2*PIPE_W, PIPE_PADDING, mariopipe, PIPE_W, PIPE_H, GxEPD_BLACK); //pipe
}
//Hour
display.drawBitmap(X_PADDING, pos == 0 ? Y_PADDING : Y_PADDING + 20, numbers[hour10], NUM_W, NUM_H, GxEPD_BLACK); //first digit
display.drawBitmap(X_PADDING+NUM_SPACING+NUM_W, pos == 1 ? Y_PADDING : Y_PADDING + 20, numbers[hour01], NUM_W, NUM_H, GxEPD_BLACK); //second digit
//Minute
display.drawBitmap(X_PADDING+2*(NUM_SPACING+NUM_W), pos == 2 ? Y_PADDING : Y_PADDING + 20, numbers[minute10], NUM_W, NUM_H, GxEPD_BLACK); //first digit
display.drawBitmap(X_PADDING+3*(NUM_SPACING+NUM_W), pos == 3 ? Y_PADDING : Y_PADDING + 20, numbers[minute01], NUM_W, NUM_H, GxEPD_BLACK); //second digit
}

View File

@ -1,13 +0,0 @@
#ifndef WATCHY_MARIO_H
#define WATCHY_MARIO_H
#include <Watchy.h>
#include "mario.h"
class WatchyMario: public Watchy{
using Watchy::Watchy;
public:
void drawWatchFace();
};
#endif

View File

@ -1,600 +0,0 @@
// '0', 44x44px
const unsigned char mario0 [] PROGMEM = {
0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x35, 0x55, 0x55, 0x55,
0x55, 0xc0, 0x38, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0xd0, 0x00, 0x00, 0x00, 0x05, 0x70, 0xe0, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd0, 0x0f, 0xff, 0xfc, 0x01, 0x70, 0xe0, 0x0f, 0xff, 0xfc, 0x02, 0xb0,
0xd0, 0x0c, 0x00, 0x0c, 0x01, 0x70, 0xe0, 0x0c, 0x00, 0x0c, 0x02, 0xb0, 0xd0, 0xfc, 0x00, 0x0f,
0xc1, 0x70, 0xe0, 0xfc, 0x00, 0x0f, 0xc2, 0xb0, 0xd0, 0xc0, 0x7f, 0x80, 0xc1, 0x70, 0xe0, 0xc0,
0x7f, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x61, 0x80, 0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0,
0xd0, 0xc0, 0x61, 0x80, 0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x61, 0x80,
0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x61, 0x80, 0xc1, 0x70, 0xe0, 0xc0,
0x61, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x61, 0x80, 0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0,
0xd0, 0xc0, 0x61, 0x80, 0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x61, 0x80,
0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x61, 0x80, 0xc1, 0x70, 0xe0, 0xc0,
0x7f, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x7f, 0x80, 0xc1, 0x70, 0xe0, 0xfc, 0x00, 0x0f, 0xc2, 0xb0,
0xd0, 0xfc, 0x00, 0x0f, 0xc1, 0x70, 0xe0, 0x0c, 0x00, 0x0c, 0x02, 0xb0, 0xd0, 0x0c, 0x00, 0x0c,
0x01, 0x70, 0xe0, 0x0f, 0xff, 0xfc, 0x02, 0xb0, 0xd0, 0x0f, 0xff, 0xfc, 0x01, 0x70, 0xe8, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd4, 0x00, 0x00, 0x00, 0x05, 0x70, 0xea, 0x00, 0x00, 0x00, 0x0a, 0xb0,
0x35, 0x55, 0x55, 0x55, 0x55, 0xc0, 0x3a, 0xaa, 0xaa, 0xaa, 0xaa, 0xc0, 0x0f, 0xff, 0xff, 0xff,
0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00
};
// '1', 44x44px
const unsigned char mario1 [] PROGMEM = {
0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x35, 0x55, 0x55, 0x55,
0x55, 0xc0, 0x38, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0xd0, 0x00, 0x00, 0x00, 0x05, 0x70, 0xe0, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd0, 0x00, 0xff, 0xc0, 0x01, 0x70, 0xe0, 0x00, 0xff, 0xc0, 0x02, 0xb0,
0xd0, 0x00, 0xc0, 0xc0, 0x01, 0x70, 0xe0, 0x00, 0xc0, 0xc0, 0x02, 0xb0, 0xd0, 0x03, 0x00, 0xc0,
0x01, 0x70, 0xe0, 0x03, 0x00, 0xc0, 0x02, 0xb0, 0xd0, 0x0c, 0x00, 0xc0, 0x01, 0x70, 0xe0, 0x0c,
0x00, 0xc0, 0x02, 0xb0, 0xd0, 0x0c, 0x00, 0xc0, 0x01, 0x70, 0xe0, 0x0c, 0x00, 0xc0, 0x02, 0xb0,
0xd0, 0x0c, 0x00, 0xc0, 0x01, 0x70, 0xe0, 0x0f, 0xc0, 0xc0, 0x02, 0xb0, 0xd0, 0x0f, 0xc0, 0xc0,
0x01, 0x70, 0xe0, 0x00, 0xc0, 0xc0, 0x02, 0xb0, 0xd0, 0x00, 0xc0, 0xc0, 0x01, 0x70, 0xe0, 0x00,
0xc0, 0xc0, 0x02, 0xb0, 0xd0, 0x00, 0xc0, 0xc0, 0x01, 0x70, 0xe0, 0x00, 0xc0, 0xc0, 0x02, 0xb0,
0xd0, 0x00, 0xc0, 0xc0, 0x01, 0x70, 0xe0, 0x00, 0xc0, 0xc0, 0x02, 0xb0, 0xd0, 0x00, 0xc0, 0xc0,
0x01, 0x70, 0xe0, 0x00, 0xc0, 0xc0, 0x02, 0xb0, 0xd0, 0x00, 0xc0, 0xc0, 0x01, 0x70, 0xe0, 0x0f,
0xc0, 0xfc, 0x02, 0xb0, 0xd0, 0x0f, 0xc0, 0xfc, 0x01, 0x70, 0xe0, 0x0c, 0x00, 0x0c, 0x02, 0xb0,
0xd0, 0x0c, 0x00, 0x0c, 0x01, 0x70, 0xe0, 0x0c, 0x00, 0x0c, 0x02, 0xb0, 0xd0, 0x0c, 0x00, 0x0c,
0x01, 0x70, 0xe0, 0x0f, 0xff, 0xfc, 0x02, 0xb0, 0xd0, 0x0f, 0xff, 0xfc, 0x01, 0x70, 0xe8, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd4, 0x00, 0x00, 0x00, 0x05, 0x70, 0xea, 0x00, 0x00, 0x00, 0x0a, 0xb0,
0x35, 0x55, 0x55, 0x55, 0x55, 0xc0, 0x3a, 0xaa, 0xaa, 0xaa, 0xaa, 0xc0, 0x0f, 0xff, 0xff, 0xff,
0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00
};
// '2', 44x44px
const unsigned char mario2 [] PROGMEM = {
0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x35, 0x55, 0x55, 0x55,
0x55, 0xc0, 0x38, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0xd0, 0x00, 0x00, 0x00, 0x05, 0x70, 0xe0, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd0, 0x0f, 0xff, 0xfc, 0x01, 0x70, 0xe0, 0x0f, 0xff, 0xfc, 0x02, 0xb0,
0xd0, 0x0c, 0x00, 0x0c, 0x01, 0x70, 0xe0, 0x0c, 0x00, 0x0c, 0x02, 0xb0, 0xd0, 0xfc, 0x00, 0x0f,
0xc1, 0x70, 0xe0, 0xfc, 0x00, 0x0f, 0xc2, 0xb0, 0xd0, 0xc0, 0x7f, 0x80, 0xc1, 0x70, 0xe0, 0xc0,
0x7f, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x61, 0x80, 0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0,
0xd0, 0xff, 0xe1, 0x80, 0xc1, 0x70, 0xe0, 0xff, 0xe1, 0x80, 0xc2, 0xb0, 0xd0, 0x00, 0x01, 0x80,
0xc1, 0x70, 0xe0, 0x00, 0x07, 0x80, 0xc2, 0xb0, 0xd0, 0x00, 0x07, 0x80, 0xc1, 0x70, 0xe0, 0x00,
0x38, 0x0f, 0xc2, 0xb0, 0xd0, 0x00, 0x38, 0x0f, 0xc1, 0x70, 0xe0, 0x00, 0xc0, 0x0c, 0x02, 0xb0,
0xd0, 0x00, 0xc0, 0x0c, 0x01, 0x70, 0xe0, 0x0f, 0x00, 0xfc, 0x02, 0xb0, 0xd0, 0x0f, 0x00, 0xfc,
0x01, 0x70, 0xe0, 0x30, 0x00, 0xc0, 0x02, 0xb0, 0xd0, 0x30, 0x00, 0xc0, 0x01, 0x70, 0xe0, 0xc0,
0x00, 0xff, 0xc2, 0xb0, 0xd0, 0xc0, 0x00, 0xff, 0xc1, 0x70, 0xe0, 0xc0, 0x00, 0x00, 0xc2, 0xb0,
0xd0, 0xc0, 0x00, 0x00, 0xc1, 0x70, 0xe0, 0xc0, 0x00, 0x00, 0xc2, 0xb0, 0xd0, 0xc0, 0x00, 0x00,
0xc1, 0x70, 0xe0, 0xff, 0xff, 0xff, 0xc2, 0xb0, 0xd0, 0xff, 0xff, 0xff, 0xc1, 0x70, 0xe8, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd4, 0x00, 0x00, 0x00, 0x05, 0x70, 0xea, 0x00, 0x00, 0x00, 0x0a, 0xb0,
0x35, 0x55, 0x55, 0x55, 0x55, 0xc0, 0x3a, 0xaa, 0xaa, 0xaa, 0xaa, 0xc0, 0x0f, 0xff, 0xff, 0xff,
0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00
};
// '3', 44x44px
const unsigned char mario3 [] PROGMEM = {
0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x35, 0x55, 0x55, 0x55,
0x55, 0xc0, 0x38, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0xd0, 0x00, 0x00, 0x00, 0x05, 0x70, 0xe0, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd0, 0x0f, 0xff, 0xfc, 0x01, 0x70, 0xe0, 0x0f, 0xff, 0xfc, 0x02, 0xb0,
0xd0, 0x0c, 0x00, 0x0c, 0x01, 0x70, 0xe0, 0x0c, 0x00, 0x0c, 0x02, 0xb0, 0xd0, 0xfc, 0x00, 0x0f,
0xc1, 0x70, 0xe0, 0xfc, 0x00, 0x0f, 0xc2, 0xb0, 0xd0, 0xc0, 0x7f, 0x80, 0xc1, 0x70, 0xe0, 0xc0,
0x7f, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x61, 0x80, 0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0,
0xd0, 0xff, 0xe1, 0x80, 0xc1, 0x70, 0xe0, 0xff, 0xe1, 0x80, 0xc2, 0xb0, 0xd0, 0x00, 0x07, 0x80,
0xc1, 0x70, 0xe0, 0x00, 0x07, 0x80, 0xc2, 0xb0, 0xd0, 0x00, 0x18, 0x03, 0xc1, 0x70, 0xe0, 0x00,
0x18, 0x03, 0xc2, 0xb0, 0xd0, 0x00, 0x18, 0x03, 0xc1, 0x70, 0xe0, 0x00, 0x07, 0x83, 0xc2, 0xb0,
0xd0, 0x00, 0x07, 0x80, 0xc1, 0x70, 0xe0, 0xff, 0xe1, 0x80, 0xc2, 0xb0, 0xd0, 0xff, 0xe1, 0x80,
0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x61, 0x80, 0xc1, 0x70, 0xe0, 0xc0,
0x7f, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x7f, 0x80, 0xc1, 0x70, 0xe0, 0xfc, 0x00, 0x0f, 0xc2, 0xb0,
0xd0, 0xfc, 0x00, 0x0f, 0xc1, 0x70, 0xe0, 0x0c, 0x00, 0x0c, 0x02, 0xb0, 0xd0, 0x0c, 0x00, 0x0c,
0x01, 0x70, 0xe0, 0x0f, 0xff, 0xfc, 0x02, 0xb0, 0xd0, 0x0f, 0xff, 0xfc, 0x01, 0x70, 0xe8, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd4, 0x00, 0x00, 0x00, 0x05, 0x70, 0xea, 0x00, 0x00, 0x00, 0x0a, 0xb0,
0x35, 0x55, 0x55, 0x55, 0x55, 0xc0, 0x3a, 0xaa, 0xaa, 0xaa, 0xaa, 0xc0, 0x0f, 0xff, 0xff, 0xff,
0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00
};
// '4', 44x44px
const unsigned char mario4 [] PROGMEM = {
0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x35, 0x55, 0x55, 0x55,
0x55, 0xc0, 0x38, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0xd0, 0x00, 0x00, 0x00, 0x05, 0x70, 0xe0, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd0, 0x00, 0xff, 0xfc, 0x01, 0x70, 0xe0, 0x00, 0xff, 0xfc, 0x02, 0xb0,
0xd0, 0x03, 0x00, 0x0c, 0x01, 0x70, 0xe0, 0x03, 0x00, 0x0c, 0x02, 0xb0, 0xd0, 0x0c, 0x00, 0x0c,
0x01, 0x70, 0xe0, 0x0c, 0x00, 0x0c, 0x02, 0xb0, 0xd0, 0x30, 0x00, 0x0c, 0x01, 0x70, 0xe0, 0x30,
0x00, 0x0c, 0x02, 0xb0, 0xd0, 0x30, 0x1e, 0x0c, 0x01, 0x70, 0xe0, 0x30, 0x1e, 0x0c, 0x02, 0xb0,
0xd0, 0x30, 0x66, 0x0c, 0x01, 0x70, 0xe0, 0x30, 0x66, 0x0c, 0x02, 0xb0, 0xd0, 0x30, 0x7e, 0x0f,
0xc1, 0x70, 0xe0, 0x30, 0x7e, 0x0f, 0xc2, 0xb0, 0xd0, 0xc0, 0x00, 0x00, 0xc1, 0x70, 0xe0, 0xc0,
0x00, 0x00, 0xc2, 0xb0, 0xd0, 0xc0, 0x00, 0x00, 0xc1, 0x70, 0xe0, 0xc0, 0x00, 0x00, 0xc2, 0xb0,
0xd0, 0xc0, 0x00, 0x00, 0xc1, 0x70, 0xe0, 0xc0, 0x00, 0x00, 0xc2, 0xb0, 0xd0, 0xc0, 0x00, 0x00,
0xc1, 0x70, 0xe0, 0xff, 0xfc, 0x0f, 0xc2, 0xb0, 0xd0, 0xff, 0xfc, 0x0f, 0xc1, 0x70, 0xe0, 0x00,
0x0c, 0x0c, 0x02, 0xb0, 0xd0, 0x00, 0x0c, 0x0c, 0x01, 0x70, 0xe0, 0x00, 0x0c, 0x0c, 0x02, 0xb0,
0xd0, 0x00, 0x0c, 0x0c, 0x01, 0x70, 0xe0, 0x00, 0x0c, 0x0c, 0x02, 0xb0, 0xd0, 0x00, 0x0c, 0x0c,
0x01, 0x70, 0xe0, 0x00, 0x0f, 0xfc, 0x02, 0xb0, 0xd0, 0x00, 0x0f, 0xfc, 0x01, 0x70, 0xe8, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd4, 0x00, 0x00, 0x00, 0x05, 0x70, 0xea, 0x00, 0x00, 0x00, 0x0a, 0xb0,
0x35, 0x55, 0x55, 0x55, 0x55, 0xc0, 0x3a, 0xaa, 0xaa, 0xaa, 0xaa, 0xc0, 0x0f, 0xff, 0xff, 0xff,
0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00
};
// '5', 44x44px
const unsigned char mario5 [] PROGMEM = {
0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x35, 0x55, 0x55, 0x55,
0x55, 0xc0, 0x38, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0xd0, 0x00, 0x00, 0x00, 0x05, 0x70, 0xe0, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd0, 0xff, 0xff, 0xff, 0xc1, 0x70, 0xe0, 0xff, 0xff, 0xff, 0xc2, 0xb0,
0xd0, 0xc0, 0x00, 0x00, 0xc1, 0x70, 0xe0, 0xc0, 0x00, 0x00, 0xc2, 0xb0, 0xd0, 0xc0, 0x00, 0x00,
0xc1, 0x70, 0xe0, 0xc0, 0x00, 0x00, 0xc2, 0xb0, 0xd0, 0xc0, 0x7f, 0xff, 0xc1, 0x70, 0xe0, 0xc0,
0x7f, 0xff, 0xc2, 0xb0, 0xd0, 0xc0, 0x60, 0x00, 0x01, 0x70, 0xe0, 0xc0, 0x60, 0x00, 0x02, 0xb0,
0xd0, 0xc0, 0x7f, 0xfc, 0x01, 0x70, 0xe0, 0xc0, 0x7f, 0xfc, 0x02, 0xb0, 0xd0, 0xc0, 0x00, 0x0c,
0x01, 0x70, 0xe0, 0xc0, 0x00, 0x0c, 0x02, 0xb0, 0xd0, 0xc0, 0x00, 0x0f, 0xc1, 0x70, 0xe0, 0xff,
0xfe, 0x0f, 0xc2, 0xb0, 0xd0, 0x3f, 0xff, 0x80, 0xc1, 0x70, 0xe0, 0x00, 0x01, 0x80, 0xc2, 0xb0,
0xd0, 0x00, 0x01, 0x80, 0xc1, 0x70, 0xe0, 0xff, 0xe1, 0x80, 0xc2, 0xb0, 0xd0, 0xff, 0xe1, 0x80,
0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x61, 0x80, 0xc1, 0x70, 0xe0, 0xc0,
0x7f, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x7f, 0x80, 0xc1, 0x70, 0xe0, 0xfc, 0x00, 0x0f, 0xc2, 0xb0,
0xd0, 0xfc, 0x00, 0x0f, 0xc1, 0x70, 0xe0, 0x0c, 0x00, 0x0c, 0x02, 0xb0, 0xd0, 0x0c, 0x00, 0x0c,
0x01, 0x70, 0xe0, 0x0f, 0xff, 0xfc, 0x02, 0xb0, 0xd0, 0x0f, 0xff, 0xfc, 0x01, 0x70, 0xe8, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd4, 0x00, 0x00, 0x00, 0x05, 0x70, 0xea, 0x00, 0x00, 0x00, 0x0a, 0xb0,
0x35, 0x55, 0x55, 0x55, 0x55, 0xc0, 0x3a, 0xaa, 0xaa, 0xaa, 0xaa, 0xc0, 0x0f, 0xff, 0xff, 0xff,
0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00
};
// '6', 44x44px
const unsigned char mario6 [] PROGMEM = {
0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x35, 0x55, 0x55, 0x55,
0x55, 0xc0, 0x38, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0xd0, 0x00, 0x00, 0x00, 0x05, 0x70, 0xe0, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd0, 0x03, 0xff, 0xff, 0xc1, 0x70, 0xe0, 0x03, 0xff, 0xff, 0xc2, 0xb0,
0xd0, 0x0c, 0x00, 0x00, 0xc1, 0x70, 0xe0, 0x0c, 0x00, 0x00, 0xc2, 0xb0, 0xd0, 0x30, 0x00, 0x00,
0xc1, 0x70, 0xe0, 0x30, 0x00, 0x00, 0xc2, 0xb0, 0xd0, 0xc0, 0x7f, 0xff, 0xc1, 0x70, 0xe0, 0xc0,
0x7f, 0xff, 0xc2, 0xb0, 0xd0, 0xc0, 0x60, 0x00, 0x01, 0x70, 0xe0, 0xc0, 0x60, 0x00, 0x02, 0xb0,
0xd0, 0xc0, 0x7f, 0xfc, 0x01, 0x70, 0xe0, 0xc0, 0x7f, 0xfc, 0x02, 0xb0, 0xd0, 0xc0, 0x00, 0x0c,
0x01, 0x70, 0xe0, 0xc0, 0x00, 0x0c, 0x02, 0xb0, 0xd0, 0xc0, 0x00, 0x0f, 0xc1, 0x70, 0xe0, 0xc0,
0x00, 0x0f, 0xc2, 0xb0, 0xd0, 0xc0, 0x7f, 0x80, 0xc1, 0x70, 0xe0, 0xc0, 0x7f, 0x80, 0xc2, 0xb0,
0xd0, 0xc0, 0x61, 0x80, 0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x61, 0x80,
0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x61, 0x80, 0xc1, 0x70, 0xe0, 0xc0,
0x7f, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x7f, 0x80, 0xc1, 0x70, 0xe0, 0xfc, 0x00, 0x0f, 0xc2, 0xb0,
0xd0, 0xfc, 0x00, 0x0f, 0xc1, 0x70, 0xe0, 0x0c, 0x00, 0x0c, 0x02, 0xb0, 0xd0, 0x0c, 0x00, 0x0c,
0x01, 0x70, 0xe0, 0x0f, 0xff, 0xfc, 0x02, 0xb0, 0xd0, 0x0f, 0xff, 0xfc, 0x01, 0x70, 0xe8, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd4, 0x00, 0x00, 0x00, 0x05, 0x70, 0xea, 0x00, 0x00, 0x00, 0x0a, 0xb0,
0x35, 0x55, 0x55, 0x55, 0x55, 0xc0, 0x3a, 0xaa, 0xaa, 0xaa, 0xaa, 0xc0, 0x0f, 0xff, 0xff, 0xff,
0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00
};
// '7', 44x44px
const unsigned char mario7 [] PROGMEM = {
0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x35, 0x55, 0x55, 0x55,
0x55, 0xc0, 0x38, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0xd0, 0x00, 0x00, 0x00, 0x05, 0x70, 0xe0, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd0, 0xff, 0xff, 0xff, 0xc1, 0x70, 0xe0, 0xff, 0xff, 0xff, 0xc2, 0xb0,
0xd0, 0xc0, 0x00, 0x00, 0xc1, 0x70, 0xe0, 0xc0, 0x00, 0x00, 0xc2, 0xb0, 0xd0, 0xc0, 0x00, 0x00,
0xc1, 0x70, 0xe0, 0xc0, 0x00, 0x00, 0xc2, 0xb0, 0xd0, 0xff, 0xff, 0x80, 0xc1, 0x70, 0xe0, 0xff,
0xff, 0x80, 0xc2, 0xb0, 0xd0, 0x00, 0x01, 0x80, 0xc1, 0x70, 0xe0, 0x00, 0x01, 0x80, 0xc2, 0xb0,
0xd0, 0x00, 0x06, 0x03, 0x01, 0x70, 0xe0, 0x00, 0x06, 0x03, 0x02, 0xb0, 0xd0, 0x00, 0x18, 0x0c,
0x01, 0x70, 0xe0, 0x00, 0x18, 0x0c, 0x02, 0xb0, 0xd0, 0x00, 0x60, 0x30, 0x01, 0x70, 0xe0, 0x00,
0x60, 0x30, 0x02, 0xb0, 0xd0, 0x01, 0x80, 0xc0, 0x01, 0x70, 0xe0, 0x01, 0x80, 0xc0, 0x02, 0xb0,
0xd0, 0x01, 0x80, 0xc0, 0x01, 0x70, 0xe0, 0x01, 0x80, 0xc0, 0x02, 0xb0, 0xd0, 0x01, 0x80, 0xc0,
0x01, 0x70, 0xe0, 0x01, 0x80, 0xc0, 0x02, 0xb0, 0xd0, 0x01, 0x80, 0xc0, 0x01, 0x70, 0xe0, 0x01,
0x80, 0xc0, 0x02, 0xb0, 0xd0, 0x01, 0x80, 0xc0, 0x01, 0x70, 0xe0, 0x01, 0x80, 0xc0, 0x02, 0xb0,
0xd0, 0x01, 0x80, 0xc0, 0x01, 0x70, 0xe0, 0x01, 0x80, 0xc0, 0x02, 0xb0, 0xd0, 0x01, 0x80, 0xc0,
0x01, 0x70, 0xe0, 0x01, 0xff, 0xc0, 0x02, 0xb0, 0xd0, 0x01, 0xff, 0xc0, 0x01, 0x70, 0xe8, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd4, 0x00, 0x00, 0x00, 0x05, 0x70, 0xea, 0x00, 0x00, 0x00, 0x0a, 0xb0,
0x35, 0x55, 0x55, 0x55, 0x55, 0xc0, 0x3a, 0xaa, 0xaa, 0xaa, 0xaa, 0xc0, 0x0f, 0xff, 0xff, 0xff,
0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00
};
// '8', 44x44px
const unsigned char mario8 [] PROGMEM = {
0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x35, 0x55, 0x55, 0x55,
0x55, 0xc0, 0x38, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0xd0, 0x00, 0x00, 0x00, 0x05, 0x70, 0xe0, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd0, 0x0f, 0xff, 0xfc, 0x01, 0x70, 0xe0, 0x0f, 0xff, 0xfc, 0x02, 0xb0,
0xd0, 0x0c, 0x00, 0x0c, 0x01, 0x70, 0xe0, 0x0c, 0x00, 0x0c, 0x02, 0xb0, 0xd0, 0xfc, 0x00, 0x0f,
0xc1, 0x70, 0xe0, 0xfc, 0x00, 0x0f, 0xc2, 0xb0, 0xd0, 0xc0, 0x7f, 0x80, 0xc1, 0x70, 0xe0, 0xc0,
0x7f, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x61, 0x80, 0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0,
0xd0, 0xc0, 0x61, 0x80, 0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x7f, 0x80,
0xc1, 0x70, 0xe0, 0xc0, 0x7f, 0x80, 0xc2, 0xb0, 0xd0, 0xf0, 0x00, 0x03, 0xc1, 0x70, 0xe0, 0xf0,
0x00, 0x03, 0xc2, 0xb0, 0xd0, 0xf0, 0x00, 0x03, 0xc1, 0x70, 0xe0, 0xf0, 0x7f, 0x83, 0xc2, 0xb0,
0xd0, 0xc0, 0x7f, 0x80, 0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x61, 0x80,
0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x61, 0x80, 0xc1, 0x70, 0xe0, 0xc0,
0x7f, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x7f, 0x80, 0xc1, 0x70, 0xe0, 0xfc, 0x00, 0x0f, 0xc2, 0xb0,
0xd0, 0xfc, 0x00, 0x0f, 0xc1, 0x70, 0xe0, 0x0c, 0x00, 0x0c, 0x02, 0xb0, 0xd0, 0x0c, 0x00, 0x0c,
0x01, 0x70, 0xe0, 0x0f, 0xff, 0xfc, 0x02, 0xb0, 0xd0, 0x0f, 0xff, 0xfc, 0x01, 0x70, 0xe8, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd4, 0x00, 0x00, 0x00, 0x05, 0x70, 0xea, 0x00, 0x00, 0x00, 0x0a, 0xb0,
0x35, 0x55, 0x55, 0x55, 0x55, 0xc0, 0x3a, 0xaa, 0xaa, 0xaa, 0xaa, 0xc0, 0x0f, 0xff, 0xff, 0xff,
0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00
};
// '9', 44x44px
const unsigned char mario9 [] PROGMEM = {
0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x35, 0x55, 0x55, 0x55,
0x55, 0xc0, 0x38, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0xd0, 0x00, 0x00, 0x00, 0x05, 0x70, 0xe0, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd0, 0x0f, 0xff, 0xfc, 0x01, 0x70, 0xe0, 0x0f, 0xff, 0xfc, 0x02, 0xb0,
0xd0, 0x0c, 0x00, 0x0c, 0x01, 0x70, 0xe0, 0x0c, 0x00, 0x0c, 0x02, 0xb0, 0xd0, 0xfc, 0x00, 0x0f,
0xc1, 0x70, 0xe0, 0xfc, 0x00, 0x0f, 0xc2, 0xb0, 0xd0, 0xc0, 0x7f, 0x80, 0xc1, 0x70, 0xe0, 0xc0,
0x7f, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x61, 0x80, 0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0,
0xd0, 0xc0, 0x61, 0x80, 0xc1, 0x70, 0xe0, 0xc0, 0x61, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x61, 0x80,
0xc1, 0x70, 0xe0, 0xc0, 0x7f, 0x80, 0xc2, 0xb0, 0xd0, 0xc0, 0x7f, 0x80, 0xc1, 0x70, 0xe0, 0xfc,
0x00, 0x00, 0xc2, 0xb0, 0xd0, 0xfc, 0x00, 0x00, 0xc1, 0x70, 0xe0, 0x0c, 0x00, 0x00, 0xc2, 0xb0,
0xd0, 0x0c, 0x00, 0x00, 0xc1, 0x70, 0xe0, 0x0f, 0xff, 0x80, 0xc2, 0xb0, 0xd0, 0x0f, 0xff, 0x80,
0xc1, 0x70, 0xe0, 0x00, 0x01, 0x80, 0xc2, 0xb0, 0xd0, 0x00, 0x01, 0x80, 0xc1, 0x70, 0xe0, 0xff,
0xff, 0x80, 0xc2, 0xb0, 0xd0, 0xff, 0xff, 0x80, 0xc1, 0x70, 0xe0, 0xc0, 0x00, 0x03, 0x02, 0xb0,
0xd0, 0xc0, 0x00, 0x03, 0x01, 0x70, 0xe0, 0xc0, 0x00, 0x0c, 0x02, 0xb0, 0xd0, 0xc0, 0x00, 0x0c,
0x01, 0x70, 0xe0, 0xff, 0xff, 0xf0, 0x02, 0xb0, 0xd0, 0xff, 0xff, 0xf0, 0x01, 0x70, 0xe8, 0x00,
0x00, 0x00, 0x02, 0xb0, 0xd4, 0x00, 0x00, 0x00, 0x05, 0x70, 0xea, 0x00, 0x00, 0x00, 0x0a, 0xb0,
0x35, 0x55, 0x55, 0x55, 0x55, 0xc0, 0x3a, 0xaa, 0xaa, 0xaa, 0xaa, 0xc0, 0x0f, 0xff, 0xff, 0xff,
0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00
};
// 'bg', 200x200px
const unsigned char mariobg [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xfe, 0xff, 0xfe, 0xbf,
0xff, 0xaf, 0xff, 0xeb, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xfe, 0xbf, 0xff, 0xaf, 0xff, 0xef, 0xff,
0xeb, 0xff, 0xfa, 0xe4, 0x7f, 0xfc, 0x7f, 0xfc, 0x4f, 0xff, 0x47, 0xff, 0xc5, 0xff, 0xe4, 0xff,
0xf4, 0x7f, 0xfc, 0x5f, 0xfe, 0x47, 0xff, 0xc7, 0xff, 0xc4, 0xff, 0xf4, 0xaa, 0xaf, 0xea, 0xaf,
0xea, 0xab, 0xfa, 0xaa, 0xfe, 0xaa, 0xbf, 0xaa, 0xbf, 0xaa, 0xaf, 0xea, 0xab, 0xfa, 0xaa, 0xfe,
0xaa, 0xfe, 0xaa, 0xbf, 0xaa, 0x11, 0x17, 0x91, 0x13, 0xd1, 0x11, 0xf1, 0x11, 0x79, 0x11, 0x1f,
0x11, 0x1f, 0x11, 0x13, 0xd1, 0x11, 0xf1, 0x11, 0x79, 0x11, 0x3d, 0x11, 0x1f, 0x11, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44
};
// 'coin', 24x30px
const unsigned char mariocoin [] PROGMEM = {
0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x0f, 0x00, 0xf0, 0x0f, 0x00, 0xf0, 0x30, 0x00, 0x0c, 0x30,
0x00, 0x0c, 0x30, 0x14, 0x0c, 0x30, 0x28, 0x0c, 0xc0, 0x43, 0x03, 0xc0, 0x83, 0x03, 0xc0, 0x43,
0x03, 0xc0, 0x83, 0x03, 0xc0, 0x43, 0x03, 0xc0, 0x83, 0x03, 0xc0, 0x43, 0x03, 0xc0, 0x83, 0x03,
0xc0, 0x43, 0x03, 0xc0, 0x83, 0x03, 0xc0, 0x43, 0x03, 0xc0, 0x83, 0x03, 0xc0, 0x43, 0x03, 0xc0,
0x83, 0x03, 0x30, 0x3c, 0x0c, 0x30, 0x3c, 0x0c, 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x0f, 0x00,
0xf0, 0x0f, 0x00, 0xf0, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00
};
// 'mario', 56x54px
const unsigned char mariomarior [] PROGMEM = {
0x00, 0x00, 0x03, 0xfc, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x3f, 0x00, 0x00, 0x00,
0x03, 0x03, 0x3f, 0xf3, 0xfc, 0x00, 0x00, 0x03, 0x03, 0x3f, 0xf3, 0xfc, 0x00, 0x00, 0x03, 0x00,
0xff, 0xf3, 0x03, 0x00, 0x00, 0x03, 0x00, 0xff, 0xf3, 0x03, 0x00, 0x00, 0x03, 0x00, 0xff, 0xfc,
0x03, 0x00, 0x00, 0x03, 0x00, 0xff, 0xfc, 0x03, 0x00, 0x00, 0x03, 0x00, 0xff, 0xff, 0xcc, 0x00,
0x00, 0x03, 0x03, 0xff, 0xff, 0xcc, 0x00, 0x00, 0x03, 0x03, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x03,
0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x03, 0xff, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xff, 0x00,
0x03, 0xc0, 0x00, 0x00, 0x0f, 0xfc, 0x0c, 0xc3, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x0c, 0xc3, 0x00,
0x00, 0x00, 0x3c, 0xfc, 0x0c, 0xc3, 0x00, 0x00, 0x00, 0x3c, 0xfc, 0x0c, 0xc3, 0x00, 0x00, 0x00,
0x30, 0xff, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x30, 0xff, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x30, 0x00,
0x30, 0x00, 0xc0, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0xc0, 0x00, 0x00, 0x3c, 0x00, 0xff, 0x03,
0xf0, 0x00, 0x00, 0x3c, 0x00, 0xff, 0x03, 0xf0, 0x00, 0x00, 0x03, 0xc0, 0x0f, 0xff, 0x00, 0x00,
0x00, 0x03, 0xc0, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00,
0xff, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0f, 0x03, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x0f, 0x03, 0xff,
0xfc, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0xf0, 0xfc, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0xf0, 0xfc, 0x00,
0x00, 0x3c, 0x03, 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x3c, 0x03, 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x3c,
0x00, 0xc0, 0x3c, 0x03, 0xc0, 0x00, 0x3c, 0x00, 0xc0, 0x3c, 0x03, 0xc0, 0x00, 0x3f, 0xf0, 0xc3,
0xff, 0xff, 0xc0, 0x3f, 0xff, 0xf0, 0xc3, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xff, 0xff, 0xf0, 0xfc,
0xf0, 0xfc, 0x3f, 0xff, 0xff, 0xf0, 0xfc, 0xf0, 0xfc, 0x3f, 0xc3, 0xff, 0xf0, 0xff, 0x0c, 0xfc,
0x3f, 0xc3, 0xff, 0xf0, 0xff, 0x0c, 0xfc, 0x3f, 0xcc, 0x0f, 0xff, 0xfc, 0x0c, 0xfc, 0x3f, 0xcc,
0x0f, 0xff, 0xfc, 0x0c, 0xfc, 0x3f, 0xfc, 0xff, 0xff, 0xfc, 0x0c, 0xfc, 0x3f, 0xfc, 0xff, 0xff,
0xfc, 0x0c, 0x3f, 0xff, 0xf0, 0xff, 0xff, 0xfc, 0x0c, 0x3f, 0xff, 0xf0, 0xff, 0xff, 0xfc, 0x0c,
0x00, 0x00, 0x30, 0xff, 0xc0, 0x06, 0x3c, 0x00, 0x00, 0x30, 0xff, 0xc0, 0x06, 0x3c, 0x00, 0x00,
0x30, 0xc0, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x30, 0xc0, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x3f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00
};
// 'mariol', 56x54px
const unsigned char mariomariol [] PROGMEM = {
0x00, 0xfc, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x3f, 0xcf,
0xfc, 0xc0, 0xc0, 0x00, 0x00, 0x3f, 0xcf, 0xfc, 0xc0, 0xc0, 0x00, 0x00, 0xc0, 0xcf, 0xff, 0x00,
0xc0, 0x00, 0x00, 0xc0, 0xcf, 0xff, 0x00, 0xc0, 0x00, 0x00, 0xc0, 0x3f, 0xff, 0x00, 0xc0, 0x00,
0x00, 0xc0, 0x3f, 0xff, 0x00, 0xc0, 0x00, 0x00, 0x33, 0xff, 0xff, 0x00, 0xc0, 0x00, 0x00, 0x33,
0xff, 0xff, 0xc0, 0xc0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0xc0, 0x00, 0x00, 0x0f, 0xff, 0xff,
0xff, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0xff, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0xff, 0xc0,
0x00, 0x00, 0x00, 0xc3, 0x30, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0xc3, 0x30, 0x3f, 0xf0, 0x00, 0x00,
0x00, 0xc3, 0x30, 0x3f, 0x3c, 0x00, 0x00, 0x00, 0xc3, 0x30, 0x3f, 0x3c, 0x00, 0x00, 0x03, 0x00,
0x00, 0xff, 0x0c, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x0c, 0x00, 0x00, 0x03, 0x00, 0x0c, 0x00,
0x0c, 0x00, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x00, 0x0f, 0xc0, 0xff, 0x00, 0x3c, 0x00,
0x00, 0x0f, 0xc0, 0xff, 0x00, 0x3c, 0x00, 0x00, 0x00, 0xff, 0xf0, 0x03, 0xc0, 0x00, 0x00, 0x00,
0xff, 0xf0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x30, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00,
0xff, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0, 0xf0,
0x00, 0x00, 0x00, 0x3f, 0x0f, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x3f, 0x0f, 0x00, 0x3f, 0xf0, 0x00,
0x00, 0xf0, 0x3c, 0x00, 0xc0, 0x3c, 0x00, 0x00, 0xf0, 0x3c, 0x00, 0xc0, 0x3c, 0x00, 0x03, 0xc0,
0x3c, 0x03, 0x00, 0x3c, 0x00, 0x03, 0xc0, 0x3c, 0x03, 0x00, 0x3c, 0x00, 0x03, 0xff, 0xff, 0xc3,
0x0f, 0xfc, 0x00, 0x03, 0xff, 0xff, 0xc3, 0x0f, 0xff, 0xfc, 0x0f, 0x3f, 0x0f, 0xff, 0xff, 0xff,
0xfc, 0x0f, 0x3f, 0x0f, 0xff, 0xff, 0xfc, 0x3f, 0x30, 0xff, 0x0f, 0xff, 0xc3, 0xfc, 0x3f, 0x30,
0xff, 0x0f, 0xff, 0xc3, 0xfc, 0x3f, 0x30, 0x3f, 0xff, 0xf0, 0x33, 0xfc, 0x3f, 0x30, 0x3f, 0xff,
0xf0, 0x33, 0xfc, 0x3f, 0x30, 0x3f, 0xff, 0xff, 0x3f, 0xfc, 0x3f, 0x30, 0x3f, 0xff, 0xff, 0x3f,
0xfc, 0x3f, 0x30, 0x3f, 0xff, 0xff, 0x0f, 0xff, 0xfc, 0x30, 0x3f, 0xff, 0xff, 0x0f, 0xff, 0xfc,
0x3c, 0x60, 0x03, 0xff, 0x0c, 0x00, 0x00, 0x3c, 0x60, 0x03, 0xff, 0x0c, 0x00, 0x00, 0x1f, 0x80,
0x00, 0x03, 0x0c, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00
};
// 'pipe', 42x47px
const unsigned char mariopipe [] PROGMEM = {
0x3f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x50, 0x01, 0x11, 0x15, 0x55, 0x80, 0xa8, 0x02, 0xaa, 0xaa,
0xab, 0xc0, 0xd0, 0x04, 0x44, 0x45, 0x55, 0xc0, 0xa8, 0x02, 0xaa, 0xaa, 0xab, 0xc0, 0xd0, 0x01,
0x11, 0x15, 0x55, 0xc0, 0xa8, 0x02, 0xaa, 0xaa, 0xab, 0xc0, 0xd0, 0x04, 0x44, 0x45, 0x55, 0xc0,
0xa8, 0x02, 0xaa, 0xaa, 0xab, 0xc0, 0xd0, 0x01, 0x11, 0x15, 0x55, 0xc0, 0xa8, 0x02, 0xaa, 0xaa,
0xab, 0xc0, 0xd0, 0x04, 0x44, 0x45, 0x55, 0xc0, 0xa8, 0x02, 0xaa, 0xaa, 0xab, 0xc0, 0xd0, 0x01,
0x11, 0x15, 0x55, 0xc0, 0xa8, 0x02, 0xaa, 0xaa, 0xab, 0xc0, 0xd0, 0x04, 0x44, 0x45, 0x55, 0xc0,
0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x2a, 0x05, 0x55, 0x55,
0x57, 0x00, 0x34, 0x08, 0x88, 0x8a, 0xaf, 0x00, 0x2a, 0x05, 0x55, 0x55, 0x57, 0x00, 0x34, 0x02,
0x22, 0x2a, 0xaf, 0x00, 0x2a, 0x05, 0x55, 0x55, 0x57, 0x00, 0x34, 0x08, 0x88, 0x8a, 0xaf, 0x00,
0x2a, 0x05, 0x55, 0x55, 0x57, 0x00, 0x34, 0x02, 0x22, 0x2a, 0xaf, 0x00, 0x2a, 0x05, 0x55, 0x55,
0x57, 0x00, 0x34, 0x08, 0x88, 0x8a, 0xaf, 0x00, 0x2a, 0x05, 0x55, 0x55, 0x57, 0x00, 0x34, 0x02,
0x22, 0x2a, 0xaf, 0x00, 0x2a, 0x05, 0x55, 0x55, 0x57, 0x00, 0x34, 0x08, 0x88, 0x8a, 0xaf, 0x00,
0x2a, 0x05, 0x55, 0x55, 0x57, 0x00, 0x34, 0x02, 0x22, 0x2a, 0xaf, 0x00, 0x2a, 0x05, 0x55, 0x55,
0x57, 0x00, 0x34, 0x08, 0x88, 0x8a, 0xaf, 0x00, 0x2a, 0x05, 0x55, 0x55, 0x57, 0x00, 0x34, 0x02,
0x22, 0x2a, 0xaf, 0x00, 0x2a, 0x05, 0x55, 0x55, 0x57, 0x00, 0x34, 0x08, 0x88, 0x8a, 0xaf, 0x00,
0x2a, 0x05, 0x55, 0x55, 0x57, 0x00, 0x34, 0x02, 0x22, 0x2a, 0xaf, 0x00, 0x2a, 0x05, 0x55, 0x55,
0x57, 0x00, 0x34, 0x08, 0x88, 0x8a, 0xaf, 0x00, 0x2a, 0x05, 0x55, 0x55, 0x57, 0x00, 0x34, 0x02,
0x22, 0x2a, 0xaf, 0x00, 0x2a, 0x05, 0x55, 0x55, 0x57, 0x00
};

View File

@ -1,43 +0,0 @@
#ifndef SETTINGS_H
#define SETTINGS_H
//Weather Settings
#define CITY_ID "5128581" //New York City https://openweathermap.org/current#cityid
//You can also use LAT,LON for your location instead of CITY_ID, but not both
//#define LAT "40.7127" //New York City, Looked up on https://www.latlong.net/
//#define LON "-74.0059"
#ifdef CITY_ID
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?id={cityID}&lang={lang}&units={units}&appid={apiKey}" //open weather api using city ID
#else
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&lang={lang}&units={units}&appid={apiKey}" //open weather api using lat lon
#endif
#define OPENWEATHERMAP_APIKEY "f058fe1cad2afe8e2ddc5d063a64cecb" //use your own API key :)
#define TEMP_UNIT "metric" //metric = Celsius , imperial = Fahrenheit
#define TEMP_LANG "en"
#define WEATHER_UPDATE_INTERVAL 30 //must be greater than 5, measured in minutes
//NTP Settings
#define NTP_SERVER "pool.ntp.org"
#define GMT_OFFSET_SEC 3600 * -5 //New York is UTC -5 EST, -4 EDT, will be overwritten by weather data
watchySettings settings{
#ifdef CITY_ID
.cityID = CITY_ID,
#else
.cityID = "",
.lat = LAT,
.lon = LON,
#endif
.weatherAPIKey = OPENWEATHERMAP_APIKEY,
.weatherURL = OPENWEATHERMAP_URL,
.weatherUnit = TEMP_UNIT,
.weatherLang = TEMP_LANG,
.weatherUpdateInterval = WEATHER_UPDATE_INTERVAL,
.ntpServer = NTP_SERVER,
.gmtOffset = GMT_OFFSET_SEC,
.vibrateOClock = true,
};
#endif

View File

@ -1,10 +0,0 @@
#include "Watchy_Pokemon.h"
#include "settings.h"
WatchyPokemon watchy(settings);
void setup(){
watchy.init();
}
void loop(){}

View File

@ -1,18 +0,0 @@
#include "Watchy_Pokemon.h"
void WatchyPokemon::drawWatchFace(){
display.fillScreen(GxEPD_WHITE);
display.drawBitmap(0, 0, pokemon, DISPLAY_WIDTH, DISPLAY_HEIGHT, GxEPD_BLACK);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(10, 170);
if(currentTime.Hour < 10){
display.print('0');
}
display.print(currentTime.Hour);
display.print(':');
if(currentTime.Minute < 10){
display.print('0');
}
display.print(currentTime.Minute);
}

View File

@ -1,13 +0,0 @@
#ifndef WATCHY_POKEMON_H
#define WATCHY_POKEMON_H
#include <Watchy.h>
#include "pokemon.h"
class WatchyPokemon : public Watchy{
using Watchy::Watchy;
public:
void drawWatchFace();
};
#endif

View File

@ -1,315 +0,0 @@
const unsigned char pokemon [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3f, 0xef, 0xfa, 0x06, 0xff, 0xbf, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x02,
0x06, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x03, 0x04, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
0x08, 0x01, 0x8c, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xcf, 0xf1, 0x8c, 0xff, 0x3f, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x20, 0x08, 0x00, 0x50, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0xd0, 0x80, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3e, 0x8f, 0xa0, 0x30, 0xfa, 0x3e, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xef, 0xf8, 0x20,
0xff, 0xbf, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3f, 0xc0, 0x83, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x21, 0x42, 0x02,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x63, 0x42, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x21,
0x42, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc6, 0x23, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x07, 0xf2, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x1a, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x20, 0x08, 0x1a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x0a, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x4f, 0x00, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00,
0x00, 0x00, 0x00, 0x03, 0x07, 0x4f, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00,
0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x5d, 0xa1,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00,
0x7b, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0xdf, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00,
0x08, 0x00, 0x00, 0x00, 0x1c, 0xe0, 0x00, 0x00, 0x07, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07,
0x4c, 0x20, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x1b, 0x10, 0x00,
0x00, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x4c, 0x20, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x0d, 0x90, 0x00, 0x00, 0xbb, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
0xc8, 0x00, 0x00, 0xe7, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xe8, 0x00, 0x01, 0x3f, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x02, 0xe4, 0x00, 0x02, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x02, 0xf4, 0x66, 0x0d, 0xff, 0xe0,
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f,
0x80, 0x00, 0x00, 0x01, 0xf6, 0x66, 0x07, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x01, 0x33, 0x89, 0xd7,
0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf0, 0x00, 0x00, 0x01, 0x16, 0x00, 0x2f, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0xc0,
0x00, 0x01, 0xff, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x02, 0x01, 0xf8, 0x1a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x14, 0x01, 0x83, 0xf8, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x05, 0xc7, 0xe0, 0x12, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x19, 0x02, 0x27, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x02, 0xe7, 0x00,
0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x03, 0xef, 0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x03,
0xef, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x03, 0xef, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x60, 0x71, 0xcf, 0x03, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x1e, 0x04, 0x00, 0x60, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x10, 0xf8, 0x7e, 0x08, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf3, 0xff, 0x18, 0x00,
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3e, 0x03, 0xf1, 0x30, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0xff, 0xf0,
0xf0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0xff, 0xc0, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06,
0x00, 0x00, 0x60, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x08, 0x00, 0x00, 0x70, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x70, 0x01, 0xc0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xd0, 0x00, 0x20, 0xf8, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x21, 0xf8,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x61, 0xf8, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1c, 0x00,
0xf1, 0xf8, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x81, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x07, 0x03, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x27, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xee, 0x7b, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x19, 0xf8, 0xfc, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x38, 0x19, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xf8,
0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xf0, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0xe0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf1, 0xfc, 0x83, 0x02, 0x03, 0xe2, 0x06, 0x81, 0x80, 0x00,
0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08,
0x20, 0x84, 0x05, 0x06, 0x1a, 0x06, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x60,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x18, 0x20, 0x8c, 0x0d, 0x0c, 0x02, 0x06, 0x81,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xce, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x08, 0x08, 0x20, 0x88, 0x05, 0x08, 0x02, 0x06, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xce,
0x00, 0xe0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x20, 0xb8, 0x18, 0x88, 0x03,
0xfe, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc3, 0x80, 0xfc, 0x00, 0x00, 0x00, 0x1f, 0x80,
0x00, 0x00, 0x08, 0x00, 0x20, 0xe4, 0x1f, 0xc8, 0x02, 0x02, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00,
0x01, 0xc3, 0x80, 0xfc, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x08, 0x00, 0x20, 0x82, 0x20,
0x64, 0x0a, 0x06, 0x41, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc1, 0xe0, 0x7f, 0x00, 0x00, 0x00,
0x7f, 0x80, 0x00, 0x00, 0x08, 0x00, 0xf8, 0x81, 0x20, 0x63, 0xe2, 0x02, 0x3f, 0x80, 0x00, 0x00,
0x00, 0x00, 0x01, 0xc0, 0x70, 0x7f, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, 0x08, 0x01, 0xf8,
0x80, 0xa0, 0x21, 0xe2, 0x02, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x70, 0x7f, 0x00,
0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x1f, 0xe0, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x1c,
0x1f, 0xe0, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0x1f, 0xf8, 0x00, 0x0f, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0e, 0x03, 0x9c, 0x38, 0x00, 0x0e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x03, 0x9c, 0x38, 0x00, 0x0e, 0x1c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xc3, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0x80, 0xe3, 0xff, 0xff, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc0, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0xe3, 0xff, 0xff,
0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xc3, 0x0e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0xe3, 0xff, 0xff, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf1, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xe7,
0xe0, 0x01, 0xc0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0xf8, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xe7, 0xe0, 0x01, 0xc0, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
0x03, 0xe3, 0x00, 0x01, 0x80, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x03, 0xe3, 0x00, 0x01, 0x80, 0x1c, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00,
0x01, 0xf0, 0x7c, 0x7f, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x02, 0x4f, 0x00, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc0, 0x00, 0x00, 0x01, 0xc0, 0x7c, 0x1c, 0x00, 0x00, 0x00,
0x70, 0x00, 0x00, 0x00, 0x07, 0x4f, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc0,
0x00, 0x00, 0x01, 0xc0, 0x7c, 0x1c, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x07, 0x5d, 0xa1,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xc0, 0x00, 0x00, 0x01, 0xc0, 0x70, 0x18, 0x00,
0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x07, 0xdf, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf8, 0xc0, 0x00, 0x00, 0x01, 0xc0, 0x70, 0x18, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x07,
0x4c, 0x20, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc0, 0x00, 0x00, 0x01, 0xf0, 0x70,
0x78, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x20, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x70, 0xe0, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x70, 0x70, 0xe0, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x0e, 0x70, 0x60, 0x00, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00,
0x00, 0x00, 0x0e, 0x70, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
0x1f, 0x80, 0x08, 0x00, 0x0c, 0x1f, 0x80, 0xc0, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x3f, 0xc0, 0x10, 0x00, 0x1c, 0x3f, 0xc0,
0xc0, 0x00, 0x00, 0x00, 0x7f, 0xe3, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1c, 0x38, 0xe0, 0x20, 0x00, 0x1c, 0x38, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x7f, 0xe3, 0x00,
0x00, 0x00, 0x0e, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x38, 0xe0, 0x40, 0x00, 0x0c,
0x38, 0xe0, 0xc0, 0x00, 0x00, 0x01, 0xff, 0x83, 0x80, 0x00, 0x00, 0x7e, 0x0c, 0x60, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0c, 0x1f, 0xe0, 0x80, 0x00, 0x0c, 0x1f, 0xe0, 0xc0, 0x00, 0x00, 0x01, 0xff,
0x83, 0x80, 0x00, 0x00, 0x7e, 0x0c, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0xe1, 0x00,
0x00, 0x0c, 0x00, 0xe0, 0xc0, 0x00, 0x00, 0x01, 0xff, 0x83, 0xe0, 0x00, 0x00, 0x3c, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x0e, 0xc0, 0x00, 0x00, 0x3f, 0x0e, 0xc0, 0xc0, 0x00, 0x00,
0x01, 0xfe, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x9f,
0x84, 0x00, 0x00, 0x7f, 0x9f, 0x80, 0xc0, 0x00, 0x00, 0x01, 0xfe, 0x0f, 0xfc, 0x00, 0x00, 0x00,
0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0x00, 0x00, 0x00, 0x7f, 0x9f, 0xff, 0xe0, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x7f, 0x9f, 0xff, 0xe0,
0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0x00, 0x00, 0x00, 0x3f, 0x9c, 0x1f, 0xf8, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x01, 0xf0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0x9c,
0x07, 0xff, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0x9c, 0x07, 0xff, 0x00, 0x00, 0x03, 0xf8, 0x00,
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00,
0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x16, 0x7f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfe, 0x58, 0x37, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x37, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xdc, 0x7f,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x61, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x61, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
0x86, 0x33, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x7f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xcc, 0x1e, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x1e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x78, 0x0d, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb0, 0x0b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x34, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0,
0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x34, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x34,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x0f, 0xf9, 0xfc, 0x3e, 0x20,
0x6f, 0xf8, 0x00, 0xf0, 0x33, 0x00, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x34, 0x1c, 0x08, 0x00, 0x20, 0x61, 0xa0, 0x60, 0x80, 0x00, 0xb0, 0x2d, 0x00, 0x00,
0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x1e, 0x08, 0x00, 0x20,
0xc0, 0x20, 0x60, 0x80, 0x00, 0xf0, 0x21, 0x00, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x34, 0x1e, 0x08, 0x00, 0x20, 0x80, 0x20, 0x60, 0x80, 0x00, 0xf0, 0x21,
0x00, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x1f, 0x0f,
0xf0, 0x20, 0x8f, 0xbf, 0xe0, 0x80, 0x00, 0x85, 0xa1, 0x00, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x1f, 0xc8, 0x00, 0x20, 0x81, 0xa0, 0x20, 0x80, 0x00,
0x85, 0xa2, 0x60, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34,
0x1f, 0x08, 0x00, 0x20, 0x41, 0xa0, 0x60, 0x80, 0x00, 0x07, 0x03, 0x20, 0x00, 0xd0, 0x34, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x1f, 0x08, 0x00, 0xf8, 0x3f, 0x20, 0x20,
0x80, 0x00, 0x07, 0x03, 0xe0, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x34, 0x1e, 0x08, 0x01, 0xf8, 0x1e, 0x20, 0x20, 0x80, 0x00, 0x05, 0x82, 0xe0, 0x00, 0xd0,
0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x1c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x05, 0x82, 0x60, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x34, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x34,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x07,
0xe3, 0xfe, 0xff, 0xa0, 0x60, 0x00, 0x00, 0xff, 0x20, 0x28, 0x08, 0xd0, 0x34, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x80, 0x20, 0x80, 0x30, 0xe0, 0x00, 0x00,
0x80, 0xa0, 0x2c, 0x08, 0x50, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34,
0x00, 0x00, 0x80, 0x20, 0x80, 0x30, 0xe0, 0x00, 0x00, 0x80, 0xa0, 0x2c, 0x08, 0x50, 0x34, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x80, 0x20, 0x80, 0x25, 0x20,
0x00, 0x00, 0x81, 0xa0, 0x29, 0x18, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x34, 0x00, 0x00, 0x80, 0x20, 0xfe, 0x22, 0x20, 0x00, 0x00, 0xff, 0x20, 0x68, 0x98, 0x50,
0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x80, 0x20, 0x80,
0x20, 0x20, 0x00, 0x00, 0x84, 0x20, 0x68, 0x48, 0x50, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x80, 0x20, 0x80, 0x20, 0x20, 0x00, 0x00, 0x82, 0x10, 0x68,
0x38, 0x50, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x03, 0xe0,
0x20, 0xee, 0x20, 0x60, 0x00, 0x00, 0x81, 0x06, 0xe8, 0x18, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x07, 0xe0, 0x20, 0xff, 0xa0, 0x20, 0x00, 0x00, 0x80,
0x87, 0xe8, 0x08, 0xd0, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x0b, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x0d, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0d, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb0, 0x17,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0xff, 0xff, 0xe5, 0x80, 0x00, 0xf2,
0x80, 0x03, 0xf8, 0x00, 0x1e, 0x10, 0x01, 0x18, 0x37, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x37, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
0x5c, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x60, 0xbf, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x60, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfd, 0x82, 0x33, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x7f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xc8, 0x1a, 0x7f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x7f, 0xff, 0xd0, 0x60, 0x04, 0x80, 0x00, 0x00, 0x00,
0x00, 0x03, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

View File

@ -1,43 +0,0 @@
#ifndef SETTINGS_H
#define SETTINGS_H
//Weather Settings
#define CITY_ID "5128581" //New York City https://openweathermap.org/current#cityid
//You can also use LAT,LON for your location instead of CITY_ID, but not both
//#define LAT "40.7127" //New York City, Looked up on https://www.latlong.net/
//#define LON "-74.0059"
#ifdef CITY_ID
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?id={cityID}&lang={lang}&units={units}&appid={apiKey}" //open weather api using city ID
#else
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&lang={lang}&units={units}&appid={apiKey}" //open weather api using lat lon
#endif
#define OPENWEATHERMAP_APIKEY "f058fe1cad2afe8e2ddc5d063a64cecb" //use your own API key :)
#define TEMP_UNIT "metric" //metric = Celsius , imperial = Fahrenheit
#define TEMP_LANG "en"
#define WEATHER_UPDATE_INTERVAL 30 //must be greater than 5, measured in minutes
//NTP Settings
#define NTP_SERVER "pool.ntp.org"
#define GMT_OFFSET_SEC 3600 * -5 //New York is UTC -5 EST, -4 EDT, will be overwritten by weather data
watchySettings settings{
#ifdef CITY_ID
.cityID = CITY_ID,
#else
.cityID = "",
.lat = LAT,
.lon = LON,
#endif
.weatherAPIKey = OPENWEATHERMAP_APIKEY,
.weatherURL = OPENWEATHERMAP_URL,
.weatherUnit = TEMP_UNIT,
.weatherLang = TEMP_LANG,
.weatherUpdateInterval = WEATHER_UPDATE_INTERVAL,
.ntpServer = NTP_SERVER,
.gmtOffset = GMT_OFFSET_SEC,
.vibrateOClock = true,
};
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,151 +0,0 @@
// STARRY HORIZON for Watchy by SQFMI
// Copyright 2021 Dan Delany dan.delany@gmail.com
// Released under free MIT License : https://github.com/dandelany/watchy-faces/blob/main/LICENSE
#include <Watchy.h> //include the Watchy library
#include <Fonts/FreeSansBold9pt7b.h> //include any fonts you want to use
#include "MadeSunflower39pt7b.h"
#include "stars.h"
#include "settings.h"
#define STAR_COUNT 900
const int horizonY = 150;
const int planetR = 650;
struct xyPoint {
int x;
int y;
};
//Star myStars[STAR_COUNT];
void initStars() {
// The random star field is loaded from PROGMEM - see stars.h
// this is the function that was used to generate the stars in stars.h
// it does not run normally but can be used to re-generate stars with different parameters
// tweak as needed, call this function in init, open serial monitor, and paste the results into stars.h
srand(5287); // randomSeed() is not stable on ESP32, use srand
printf("const Star STARS[] PROGMEM = {\n");
for(int i = 0; i < STAR_COUNT; i++) {
int starX = (rand() % 260) - 30;
int starY = (rand() % 260) - 30;
int radius = 0;
if (i > STAR_COUNT * 0.99) radius = 2;
else if (i > STAR_COUNT * 0.80) radius = 1;
printf(" { %d, %d, %d },\n", starX, starY, radius);
// myStars[i] = { starX, starY, radius };
}
printf("};\n");
}
struct xyPoint rotatePointAround(int x, int y, int ox, int oy, double angle) {
// rotate X,Y point around given origin point by a given angle
// based on https://gist.github.com/LyleScott/e36e08bfb23b1f87af68c9051f985302#file-rotate_2d_point-py-L38
double qx = (double)ox + (cos(angle) * (double)(x - ox)) + (sin(angle) * (double)(y - oy));
double qy = (double)oy + (-sin(angle) * (double)(x - ox)) + (cos(angle) * (double)(y - oy));
struct xyPoint newPoint;
newPoint.x = (int)qx;
newPoint.y = (int)qy;
return newPoint;
}
class StarryHorizon : public Watchy {
public:
StarryHorizon(const watchySettings& s) : Watchy(s) {
// uncomment to re-generate stars
// initStars();
}
void drawWatchFace(){
display.fillScreen(GxEPD_BLACK);
display.fillCircle(100, horizonY + planetR, planetR, GxEPD_WHITE);
drawGrid();
drawStars(STARS);
drawTime();
drawDate();
}
void drawGrid() {
int prevY = horizonY;
for(int i = 0; i < 40; i+= 1) {
int y = prevY + int(abs(sin(double(i) / 10) * 10));
if(y <= 200) {
display.drawFastHLine(0, y, 200, GxEPD_BLACK);
}
prevY = y;
}
int vanishY = horizonY - 25;
for (int x = -230; x < 430; x += 20) {
display.drawLine(x, 200, 100, vanishY, GxEPD_BLACK);
}
}
void drawStars(const Star stars[]) {
// draw field of stars
// rotate stars so that they make an entire revolution once per hour
int minute = (int)currentTime.Minute;
double minuteAngle = ((2.0 * M_PI) / 60.0) * (double)minute;
// printf("Minute %d, angle %f\n", (int)currentTime.Minute, minuteAngle);
for(int starI = 0; starI < STAR_COUNT; starI++) {
int starX = stars[starI].x;
int starY = stars[starI].y;
int starR = stars[starI].r;
struct xyPoint rotated = rotatePointAround(starX, starY, 100, 100, minuteAngle);
if(rotated.x < 0 || rotated.y < 0 || rotated.x > 200 || rotated.y > horizonY) {
continue;
}
if(starR == 0) {
display.drawPixel(rotated.x, rotated.y, GxEPD_WHITE);
} else {
display.fillCircle(rotated.x, rotated.y, starR, GxEPD_WHITE);
}
}
}
void drawTime() {
display.setFont(&MADE_Sunflower_PERSONAL_USE39pt7b);
display.setTextColor(GxEPD_WHITE);
display.setTextWrap(false);
char* timeStr;
asprintf(&timeStr, "%d:%02d", currentTime.Hour, currentTime.Minute);
drawCenteredString(timeStr, 100, 115, false);
free(timeStr);
}
void drawDate() {
String monthStr = monthShortStr(currentTime.Month);
String dayOfWeek = dayShortStr(currentTime.Wday);
display.setFont(&FreeSansBold9pt7b);
display.setTextColor(GxEPD_WHITE);
display.setTextWrap(false);
char* dateStr;
asprintf(&dateStr, "%s %s %d", dayOfWeek.c_str(), monthStr.c_str(), currentTime.Day);
drawCenteredString(dateStr, 100, 140, true);
free(dateStr);
}
void drawCenteredString(const String &str, int x, int y, bool drawBg) {
int16_t x1, y1;
uint16_t w, h;
display.getTextBounds(str, x, y, &x1, &y1, &w, &h);
// printf("bounds: %d x %d y, %d x1 %d y1, %d w, %d h\n", 0, 100, x1, y1, w, h);
display.setCursor(x - w / 2, y);
if(drawBg) {
int padY = 3;
int padX = 10;
display.fillRect(x - (w / 2 + padX), y - (h + padY), w + padX*2, h + padY*2, GxEPD_BLACK);
}
// uncomment to draw bounding box
// display.drawRect(x - w / 2, y - h, w, h, GxEPD_WHITE);
display.print(str);
}
};
StarryHorizon face(settings); //instantiate watchface
void setup() {
face.init(); //call init in setup
}
void loop() {
// this should never run, Watchy deep sleeps after init();
}

View File

@ -1,43 +0,0 @@
#ifndef SETTINGS_H
#define SETTINGS_H
//Weather Settings
#define CITY_ID "5128581" //New York City https://openweathermap.org/current#cityid
//You can also use LAT,LON for your location instead of CITY_ID, but not both
//#define LAT "40.7127" //New York City, Looked up on https://www.latlong.net/
//#define LON "-74.0059"
#ifdef CITY_ID
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?id={cityID}&lang={lang}&units={units}&appid={apiKey}" //open weather api using city ID
#else
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&lang={lang}&units={units}&appid={apiKey}" //open weather api using lat lon
#endif
#define OPENWEATHERMAP_APIKEY "f058fe1cad2afe8e2ddc5d063a64cecb" //use your own API key :)
#define TEMP_UNIT "metric" //metric = Celsius , imperial = Fahrenheit
#define TEMP_LANG "en"
#define WEATHER_UPDATE_INTERVAL 30 //must be greater than 5, measured in minutes
//NTP Settings
#define NTP_SERVER "pool.ntp.org"
#define GMT_OFFSET_SEC 3600 * -5 //New York is UTC -5 EST, -4 EDT, will be overwritten by weather data
watchySettings settings{
#ifdef CITY_ID
.cityID = CITY_ID,
#else
.cityID = "",
.lat = LAT,
.lon = LON,
#endif
.weatherAPIKey = OPENWEATHERMAP_APIKEY,
.weatherURL = OPENWEATHERMAP_URL,
.weatherUnit = TEMP_UNIT,
.weatherLang = TEMP_LANG,
.weatherUpdateInterval = WEATHER_UPDATE_INTERVAL,
.ntpServer = NTP_SERVER,
.gmtOffset = GMT_OFFSET_SEC,
.vibrateOClock = true,
};
#endif

View File

@ -1,910 +0,0 @@
struct Star {
int16_t x;
int16_t y;
int16_t r;
};
// pre-generated random star field
// run initStars to re-generate with different params
const Star STARS[] PROGMEM = {
{ 158, 153, 0 },
{ 180, 217, 0 },
{ 229, 208, 0 },
{ 17, 153, 0 },
{ 115, 13, 0 },
{ 174, 78, 0 },
{ 27, 181, 0 },
{ 80, 15, 0 },
{ 105, 27, 0 },
{ 149, -5, 0 },
{ 12, 150, 0 },
{ 142, 88, 0 },
{ 79, 226, 0 },
{ 159, -19, 0 },
{ 219, 112, 0 },
{ 182, 97, 0 },
{ 167, 225, 0 },
{ 199, -2, 0 },
{ 191, 169, 0 },
{ 209, 24, 0 },
{ 28, 87, 0 },
{ 29, -18, 0 },
{ 66, 107, 0 },
{ 85, 182, 0 },
{ 29, -9, 0 },
{ 141, 108, 0 },
{ 185, -24, 0 },
{ 200, 193, 0 },
{ 135, 128, 0 },
{ 8, 66, 0 },
{ 19, 103, 0 },
{ 52, 74, 0 },
{ 203, -6, 0 },
{ 20, 42, 0 },
{ 59, 106, 0 },
{ -5, 213, 0 },
{ 29, 118, 0 },
{ 215, 85, 0 },
{ 67, 169, 0 },
{ 213, 212, 0 },
{ 15, 37, 0 },
{ 5, 79, 0 },
{ 78, 172, 0 },
{ 4, 138, 0 },
{ 35, 5, 0 },
{ 180, 170, 0 },
{ 61, -3, 0 },
{ 29, 53, 0 },
{ 156, 58, 0 },
{ 162, 38, 0 },
{ -26, 153, 0 },
{ 11, 183, 0 },
{ 76, 181, 0 },
{ -27, 14, 0 },
{ 195, 112, 0 },
{ -26, 185, 0 },
{ 76, 123, 0 },
{ 208, 106, 0 },
{ 123, 55, 0 },
{ 227, 115, 0 },
{ 105, 186, 0 },
{ 29, 14, 0 },
{ -10, 65, 0 },
{ 52, 112, 0 },
{ 56, -5, 0 },
{ 40, 176, 0 },
{ 42, 103, 0 },
{ 94, 33, 0 },
{ 194, 91, 0 },
{ 19, 174, 0 },
{ 121, -20, 0 },
{ 7, 141, 0 },
{ 50, 192, 0 },
{ 96, 113, 0 },
{ 40, -2, 0 },
{ 205, 31, 0 },
{ 64, 201, 0 },
{ 205, 99, 0 },
{ 181, 8, 0 },
{ 178, 138, 0 },
{ 196, 195, 0 },
{ -23, -8, 0 },
{ 89, 37, 0 },
{ 1, 96, 0 },
{ 59, 37, 0 },
{ 113, 85, 0 },
{ -8, 224, 0 },
{ 125, 30, 0 },
{ 131, 67, 0 },
{ -27, 85, 0 },
{ 6, -17, 0 },
{ 215, 175, 0 },
{ 193, -16, 0 },
{ 55, 156, 0 },
{ 119, 24, 0 },
{ 94, 165, 0 },
{ 207, 75, 0 },
{ 195, 137, 0 },
{ 33, 197, 0 },
{ 204, 134, 0 },
{ 59, 98, 0 },
{ 217, 142, 0 },
{ 36, 5, 0 },
{ 104, 218, 0 },
{ 176, 26, 0 },
{ 163, 33, 0 },
{ 91, 48, 0 },
{ 206, 219, 0 },
{ 114, -22, 0 },
{ 27, 98, 0 },
{ 61, 28, 0 },
{ 108, -21, 0 },
{ -8, 173, 0 },
{ 225, 3, 0 },
{ 68, 133, 0 },
{ 116, 188, 0 },
{ 38, 193, 0 },
{ -22, 126, 0 },
{ -8, 179, 0 },
{ 140, 157, 0 },
{ 205, 165, 0 },
{ 143, 98, 0 },
{ 148, 196, 0 },
{ 2, 81, 0 },
{ 49, 71, 0 },
{ 6, 117, 0 },
{ 74, -13, 0 },
{ 161, 208, 0 },
{ 183, 159, 0 },
{ 48, 107, 0 },
{ 72, -19, 0 },
{ 166, 19, 0 },
{ 172, 175, 0 },
{ 3, 55, 0 },
{ 18, 83, 0 },
{ -26, 107, 0 },
{ 58, 164, 0 },
{ 202, 162, 0 },
{ 13, 60, 0 },
{ 85, 86, 0 },
{ 211, 41, 0 },
{ 29, 155, 0 },
{ 144, 22, 0 },
{ -24, 90, 0 },
{ 161, 0, 0 },
{ 5, 153, 0 },
{ 115, 207, 0 },
{ 105, 104, 0 },
{ 124, 158, 0 },
{ 226, 138, 0 },
{ 65, 226, 0 },
{ 181, 191, 0 },
{ 151, -20, 0 },
{ 78, 142, 0 },
{ 149, 35, 0 },
{ 56, 74, 0 },
{ 50, 193, 0 },
{ -13, 121, 0 },
{ 16, 229, 0 },
{ 162, 128, 0 },
{ 36, 202, 0 },
{ 171, 132, 0 },
{ 144, 10, 0 },
{ 197, 114, 0 },
{ 83, 7, 0 },
{ 217, -17, 0 },
{ 218, 191, 0 },
{ 106, 81, 0 },
{ 0, -29, 0 },
{ 181, -25, 0 },
{ 2, 131, 0 },
{ 106, 172, 0 },
{ 39, 191, 0 },
{ 167, 133, 0 },
{ 13, 204, 0 },
{ 15, 214, 0 },
{ 129, 212, 0 },
{ -19, 187, 0 },
{ -23, 119, 0 },
{ 207, 69, 0 },
{ 134, 135, 0 },
{ 15, 137, 0 },
{ 19, 7, 0 },
{ -13, 96, 0 },
{ 105, 160, 0 },
{ 16, -11, 0 },
{ -2, 136, 0 },
{ 39, 160, 0 },
{ 45, 150, 0 },
{ -11, 5, 0 },
{ 76, 61, 0 },
{ -16, 223, 0 },
{ 109, 143, 0 },
{ 144, 94, 0 },
{ 69, 170, 0 },
{ -13, 163, 0 },
{ 141, -21, 0 },
{ 152, -24, 0 },
{ 44, 97, 0 },
{ 98, 57, 0 },
{ 201, -25, 0 },
{ 222, 120, 0 },
{ 132, 221, 0 },
{ 199, 47, 0 },
{ 64, 66, 0 },
{ 105, 201, 0 },
{ -12, -15, 0 },
{ -22, 77, 0 },
{ 59, 222, 0 },
{ 52, 159, 0 },
{ 28, 153, 0 },
{ 20, 83, 0 },
{ 90, 157, 0 },
{ 159, 81, 0 },
{ 99, -27, 0 },
{ -11, 161, 0 },
{ 194, -7, 0 },
{ 52, 196, 0 },
{ 156, 61, 0 },
{ 187, -10, 0 },
{ -22, 225, 0 },
{ 139, 10, 0 },
{ 95, 192, 0 },
{ 172, 86, 0 },
{ 220, 171, 0 },
{ 182, -11, 0 },
{ 8, 155, 0 },
{ -18, -9, 0 },
{ 67, 132, 0 },
{ 11, -30, 0 },
{ 146, 55, 0 },
{ 201, 77, 0 },
{ 117, 223, 0 },
{ 227, 228, 0 },
{ -7, 107, 0 },
{ 102, 206, 0 },
{ 81, 15, 0 },
{ 135, 106, 0 },
{ -29, -2, 0 },
{ -7, 105, 0 },
{ 62, 159, 0 },
{ 59, 21, 0 },
{ 154, 131, 0 },
{ -11, 104, 0 },
{ 24, -24, 0 },
{ 23, 70, 0 },
{ 10, 220, 0 },
{ 192, 195, 0 },
{ 123, 79, 0 },
{ 178, 138, 0 },
{ -12, -1, 0 },
{ 48, 220, 0 },
{ 25, 45, 0 },
{ 67, 199, 0 },
{ 6, 162, 0 },
{ 2, 136, 0 },
{ 171, 47, 0 },
{ 173, 88, 0 },
{ 93, 222, 0 },
{ 139, 180, 0 },
{ 130, 33, 0 },
{ 53, 71, 0 },
{ 39, 108, 0 },
{ 175, 210, 0 },
{ 112, 180, 0 },
{ 155, 200, 0 },
{ 69, -12, 0 },
{ 30, 166, 0 },
{ 197, -6, 0 },
{ 214, 178, 0 },
{ 71, 8, 0 },
{ 126, 14, 0 },
{ 54, 181, 0 },
{ 41, 212, 0 },
{ 145, 182, 0 },
{ 187, 125, 0 },
{ 53, 131, 0 },
{ 83, 63, 0 },
{ 81, 15, 0 },
{ 85, 41, 0 },
{ 54, -9, 0 },
{ 30, -23, 0 },
{ 35, 126, 0 },
{ 40, 36, 0 },
{ 2, 108, 0 },
{ 112, 120, 0 },
{ 64, 82, 0 },
{ 218, 162, 0 },
{ -8, 110, 0 },
{ 87, 78, 0 },
{ 182, 89, 0 },
{ 44, 102, 0 },
{ 227, -10, 0 },
{ 186, 220, 0 },
{ 209, 181, 0 },
{ 180, -6, 0 },
{ 126, 65, 0 },
{ 166, 13, 0 },
{ 191, 29, 0 },
{ 210, 219, 0 },
{ 80, 122, 0 },
{ 109, 74, 0 },
{ 75, 58, 0 },
{ 155, 223, 0 },
{ 153, 48, 0 },
{ 164, 66, 0 },
{ 78, 135, 0 },
{ 159, 217, 0 },
{ 70, 86, 0 },
{ 136, 174, 0 },
{ 56, 57, 0 },
{ 125, 155, 0 },
{ 40, -17, 0 },
{ 193, 109, 0 },
{ -28, 228, 0 },
{ 90, 32, 0 },
{ 18, 228, 0 },
{ 107, 113, 0 },
{ 14, 127, 0 },
{ -26, 221, 0 },
{ 159, 211, 0 },
{ 69, 204, 0 },
{ 78, 109, 0 },
{ 91, 73, 0 },
{ 16, 223, 0 },
{ 134, 225, 0 },
{ 23, 138, 0 },
{ 38, 55, 0 },
{ -20, 104, 0 },
{ 4, 99, 0 },
{ 221, 177, 0 },
{ 108, 68, 0 },
{ 216, 206, 0 },
{ 97, -3, 0 },
{ -23, 215, 0 },
{ 127, -19, 0 },
{ 39, 48, 0 },
{ 66, 170, 0 },
{ 211, 19, 0 },
{ 18, 189, 0 },
{ 11, 129, 0 },
{ 93, 18, 0 },
{ 157, 168, 0 },
{ 71, 118, 0 },
{ 88, -16, 0 },
{ 188, 142, 0 },
{ 97, 165, 0 },
{ 184, 39, 0 },
{ 27, 211, 0 },
{ 172, 126, 0 },
{ 46, 101, 0 },
{ 61, 42, 0 },
{ 75, -4, 0 },
{ 18, 195, 0 },
{ 164, 111, 0 },
{ -27, 158, 0 },
{ 63, -24, 0 },
{ 159, 83, 0 },
{ 225, 1, 0 },
{ 146, 208, 0 },
{ 38, 54, 0 },
{ -10, 200, 0 },
{ 22, 79, 0 },
{ 208, -16, 0 },
{ 229, 21, 0 },
{ -2, 7, 0 },
{ 171, 32, 0 },
{ 57, 156, 0 },
{ 160, 203, 0 },
{ 219, 2, 0 },
{ 202, 91, 0 },
{ 26, -18, 0 },
{ 192, 181, 0 },
{ -20, 125, 0 },
{ 47, 91, 0 },
{ -10, 200, 0 },
{ 38, -20, 0 },
{ 68, 63, 0 },
{ 103, 169, 0 },
{ 68, 78, 0 },
{ 112, -13, 0 },
{ -16, 92, 0 },
{ 2, 63, 0 },
{ 72, 85, 0 },
{ 209, 54, 0 },
{ 218, 70, 0 },
{ 27, 36, 0 },
{ 145, 167, 0 },
{ -25, -30, 0 },
{ 131, -8, 0 },
{ 135, 167, 0 },
{ 119, 163, 0 },
{ 18, 73, 0 },
{ -18, 220, 0 },
{ 127, 227, 0 },
{ 45, 31, 0 },
{ 198, 116, 0 },
{ 133, 197, 0 },
{ 12, 144, 0 },
{ 114, 33, 0 },
{ 218, 217, 0 },
{ 106, 101, 0 },
{ 117, 132, 0 },
{ 127, 206, 0 },
{ 184, 141, 0 },
{ 228, -11, 0 },
{ 87, 112, 0 },
{ 122, 145, 0 },
{ 43, 6, 0 },
{ 90, 205, 0 },
{ 26, 120, 0 },
{ 198, 107, 0 },
{ -20, 225, 0 },
{ -26, 32, 0 },
{ -27, 179, 0 },
{ -3, 151, 0 },
{ 111, 28, 0 },
{ 223, 53, 0 },
{ 45, -5, 0 },
{ 154, -3, 0 },
{ 50, 34, 0 },
{ 193, 134, 0 },
{ 31, 126, 0 },
{ 132, 11, 0 },
{ 128, 65, 0 },
{ -24, 157, 0 },
{ 100, 87, 0 },
{ 21, 31, 0 },
{ 156, 144, 0 },
{ 191, 208, 0 },
{ 134, 51, 0 },
{ 75, 176, 0 },
{ 18, 119, 0 },
{ 101, 122, 0 },
{ 99, 217, 0 },
{ 221, 157, 0 },
{ 172, 229, 0 },
{ 186, 166, 0 },
{ 2, 178, 0 },
{ 149, 105, 0 },
{ 66, 49, 0 },
{ 200, 62, 0 },
{ 107, 150, 0 },
{ 29, 124, 0 },
{ 223, 15, 0 },
{ 80, 51, 0 },
{ 41, 155, 0 },
{ 59, 89, 0 },
{ 164, 126, 0 },
{ 159, 141, 0 },
{ 198, 93, 0 },
{ 35, 181, 0 },
{ 129, 226, 0 },
{ 4, 124, 0 },
{ 23, 198, 0 },
{ 138, -26, 0 },
{ 22, -8, 0 },
{ 134, 70, 0 },
{ 56, 61, 0 },
{ 157, 216, 0 },
{ 217, 40, 0 },
{ 222, 220, 0 },
{ 52, -4, 0 },
{ 13, 125, 0 },
{ 220, 105, 0 },
{ 49, 177, 0 },
{ 92, 194, 0 },
{ 26, 127, 0 },
{ 107, 110, 0 },
{ -25, 172, 0 },
{ 207, 138, 0 },
{ 228, 83, 0 },
{ 80, 152, 0 },
{ 36, 213, 0 },
{ 136, 62, 0 },
{ 135, 93, 0 },
{ 223, 32, 0 },
{ 199, 213, 0 },
{ 203, 35, 0 },
{ 200, 114, 0 },
{ 165, 179, 0 },
{ 212, 87, 0 },
{ 158, 82, 0 },
{ 113, 122, 0 },
{ 132, 48, 0 },
{ 221, 32, 0 },
{ 121, -4, 0 },
{ 93, -26, 0 },
{ -18, -15, 0 },
{ 158, -6, 0 },
{ 172, 205, 0 },
{ -14, 46, 0 },
{ 144, 205, 0 },
{ 22, 74, 0 },
{ 212, 174, 0 },
{ 228, 225, 0 },
{ -23, 155, 0 },
{ -17, 70, 0 },
{ 144, 109, 0 },
{ 91, 153, 0 },
{ 98, 72, 0 },
{ 201, 91, 0 },
{ 66, -7, 0 },
{ 72, 181, 0 },
{ 32, 23, 0 },
{ 135, 155, 0 },
{ 13, 155, 0 },
{ 98, 31, 0 },
{ 186, -5, 0 },
{ 170, 186, 0 },
{ 103, 103, 0 },
{ 105, 26, 0 },
{ 192, 57, 0 },
{ 144, 208, 0 },
{ 39, 165, 0 },
{ 47, 101, 0 },
{ 34, 146, 0 },
{ 198, 174, 0 },
{ 158, 180, 0 },
{ 156, 89, 0 },
{ 83, 23, 0 },
{ 202, 109, 0 },
{ 67, 196, 0 },
{ -15, -27, 0 },
{ 135, 90, 0 },
{ 207, 73, 0 },
{ 38, 180, 0 },
{ 186, 210, 0 },
{ 92, 129, 0 },
{ 4, 102, 0 },
{ 209, 108, 0 },
{ 88, 59, 0 },
{ 102, 54, 0 },
{ 133, 91, 0 },
{ 110, 60, 0 },
{ 22, -12, 0 },
{ 96, 82, 0 },
{ -11, 63, 0 },
{ 92, 17, 0 },
{ 102, 149, 0 },
{ 224, 107, 0 },
{ 24, 229, 0 },
{ 69, 31, 0 },
{ 46, 192, 0 },
{ 24, 176, 0 },
{ 161, 25, 0 },
{ 113, 103, 0 },
{ 132, 130, 0 },
{ 163, 194, 0 },
{ -14, -27, 0 },
{ 200, 203, 0 },
{ 88, 199, 0 },
{ 72, 83, 0 },
{ -17, 222, 0 },
{ 82, 87, 0 },
{ 157, 83, 0 },
{ -28, 86, 0 },
{ 181, 2, 0 },
{ 63, 169, 0 },
{ 188, 148, 0 },
{ 195, 150, 0 },
{ 107, 202, 0 },
{ 229, 101, 0 },
{ 226, -27, 0 },
{ 105, 43, 0 },
{ 36, 94, 0 },
{ 171, 82, 0 },
{ 224, 205, 0 },
{ 152, 170, 0 },
{ 11, 161, 0 },
{ 209, 134, 0 },
{ -15, 79, 0 },
{ 95, -12, 0 },
{ 61, 156, 0 },
{ 139, 185, 0 },
{ 105, 108, 0 },
{ 163, 166, 0 },
{ 68, 191, 0 },
{ 172, 157, 0 },
{ 5, 148, 0 },
{ 178, 214, 0 },
{ -9, 115, 0 },
{ 87, 28, 0 },
{ 57, 198, 0 },
{ 119, 147, 0 },
{ 129, 78, 0 },
{ 94, -2, 0 },
{ 98, 128, 0 },
{ 140, 24, 0 },
{ -15, 39, 0 },
{ 116, 53, 0 },
{ 71, 226, 0 },
{ 143, 174, 0 },
{ 199, 162, 0 },
{ 208, 44, 0 },
{ 101, 42, 0 },
{ 181, 5, 0 },
{ 58, 120, 0 },
{ 57, 33, 0 },
{ 184, -17, 0 },
{ 27, 32, 0 },
{ 174, 60, 0 },
{ 139, 224, 0 },
{ 141, 80, 0 },
{ 21, 103, 0 },
{ 29, 159, 0 },
{ 97, 141, 0 },
{ 24, 192, 0 },
{ 174, 8, 0 },
{ -27, 41, 0 },
{ 217, 11, 0 },
{ 85, 128, 0 },
{ 186, 199, 0 },
{ 202, 158, 0 },
{ 210, 207, 0 },
{ 135, 68, 0 },
{ 115, 170, 0 },
{ 64, 6, 0 },
{ 79, 208, 0 },
{ 174, 154, 0 },
{ 78, 55, 0 },
{ 153, 120, 0 },
{ 210, 38, 0 },
{ 216, 162, 0 },
{ 15, 220, 0 },
{ 196, 2, 0 },
{ 6, 100, 0 },
{ 166, 225, 0 },
{ 72, 95, 0 },
{ 206, 60, 0 },
{ 179, -29, 0 },
{ 19, -1, 0 },
{ 121, 148, 0 },
{ 86, 8, 0 },
{ 50, 214, 0 },
{ 28, 225, 0 },
{ 120, 111, 0 },
{ -18, 28, 0 },
{ 83, 86, 0 },
{ 38, 207, 0 },
{ -14, 206, 0 },
{ -3, 0, 0 },
{ 187, -29, 0 },
{ 100, 159, 0 },
{ 107, 94, 0 },
{ 73, 173, 0 },
{ 206, -25, 0 },
{ 174, 47, 0 },
{ 137, 71, 0 },
{ -16, 180, 0 },
{ 52, 91, 0 },
{ 66, 51, 0 },
{ 51, -21, 0 },
{ 185, 79, 0 },
{ -6, 210, 0 },
{ 110, 84, 0 },
{ 138, 150, 0 },
{ 191, 43, 0 },
{ 4, 109, 0 },
{ 173, 82, 0 },
{ 95, 1, 0 },
{ 183, 36, 0 },
{ 186, -4, 0 },
{ 194, 194, 0 },
{ 170, 166, 0 },
{ 97, 71, 0 },
{ 21, 114, 0 },
{ 206, 127, 0 },
{ 156, 24, 0 },
{ 110, 0, 0 },
{ -2, 151, 0 },
{ 199, -21, 0 },
{ 20, 24, 0 },
{ 27, 8, 0 },
{ 0, 173, 0 },
{ 67, 101, 0 },
{ 21, 68, 0 },
{ 39, 45, 0 },
{ 109, 123, 0 },
{ 72, 70, 0 },
{ 149, 93, 0 },
{ 179, 152, 0 },
{ 175, 51, 0 },
{ 66, -25, 0 },
{ 127, 51, 0 },
{ 71, 36, 0 },
{ 49, 56, 0 },
{ 207, 138, 0 },
{ 15, 123, 0 },
{ 40, 3, 0 },
{ 135, 219, 0 },
{ 96, 39, 0 },
{ 109, -16, 0 },
{ 222, -3, 0 },
{ 45, -16, 0 },
{ 73, 212, 0 },
{ 174, 72, 0 },
{ 52, 229, 0 },
{ 132, -4, 0 },
{ 27, 102, 0 },
{ -3, 60, 0 },
{ 196, 14, 0 },
{ -28, 74, 0 },
{ 59, 27, 0 },
{ 58, 160, 0 },
{ 109, 204, 0 },
{ 91, 41, 0 },
{ 137, 61, 0 },
{ 54, 14, 0 },
{ 23, 63, 0 },
{ 35, 22, 0 },
{ 159, -21, 0 },
{ 136, 43, 0 },
{ 193, -13, 0 },
{ -19, 110, 0 },
{ 164, 122, 0 },
{ 225, 116, 0 },
{ -8, 85, 0 },
{ 97, 6, 0 },
{ 44, 133, 0 },
{ -4, 205, 0 },
{ 207, -17, 1 },
{ 48, 15, 1 },
{ 7, 183, 1 },
{ 227, 218, 1 },
{ 152, 217, 1 },
{ 45, 59, 1 },
{ 66, 96, 1 },
{ 98, 103, 1 },
{ 96, -18, 1 },
{ 54, 140, 1 },
{ 0, 107, 1 },
{ 164, 151, 1 },
{ 152, 97, 1 },
{ 129, 132, 1 },
{ 8, 165, 1 },
{ 13, 50, 1 },
{ 43, 92, 1 },
{ 218, 110, 1 },
{ -8, -23, 1 },
{ 176, 164, 1 },
{ -29, 202, 1 },
{ 208, 203, 1 },
{ 177, 100, 1 },
{ 149, 224, 1 },
{ 184, 197, 1 },
{ 110, 207, 1 },
{ 7, -10, 1 },
{ 127, 219, 1 },
{ 22, 168, 1 },
{ 158, 180, 1 },
{ -7, 8, 1 },
{ 34, 98, 1 },
{ 62, -3, 1 },
{ 39, 105, 1 },
{ 16, 20, 1 },
{ 25, 127, 1 },
{ 147, 18, 1 },
{ -3, 36, 1 },
{ 208, 12, 1 },
{ 9, 132, 1 },
{ -14, -26, 1 },
{ 69, 181, 1 },
{ 206, 98, 1 },
{ 118, 120, 1 },
{ 175, 79, 1 },
{ 214, 109, 1 },
{ 24, 54, 1 },
{ 1, 25, 1 },
{ 73, 121, 1 },
{ 216, -26, 1 },
{ 54, 90, 1 },
{ 193, 190, 1 },
{ 197, 25, 1 },
{ 84, 196, 1 },
{ 76, 158, 1 },
{ 47, -30, 1 },
{ 64, 125, 1 },
{ 31, 36, 1 },
{ 229, -27, 1 },
{ -24, 205, 1 },
{ 46, 11, 1 },
{ 198, 131, 1 },
{ 183, 108, 1 },
{ 38, 116, 1 },
{ 40, 37, 1 },
{ 102, 120, 1 },
{ 198, 160, 1 },
{ 88, 170, 1 },
{ 45, 198, 1 },
{ 3, 202, 1 },
{ 201, 208, 1 },
{ 142, 69, 1 },
{ 56, 6, 1 },
{ 213, 61, 1 },
{ 16, 159, 1 },
{ 160, 8, 1 },
{ 68, 80, 1 },
{ 225, 125, 1 },
{ 124, 4, 1 },
{ 195, 128, 1 },
{ 68, 37, 1 },
{ 228, 193, 1 },
{ 129, 68, 1 },
{ 167, 100, 1 },
{ 115, -6, 1 },
{ -9, 3, 1 },
{ 50, 43, 1 },
{ 229, 111, 1 },
{ 228, 192, 1 },
{ 101, 222, 1 },
{ 9, 165, 1 },
{ 171, 159, 1 },
{ 25, 220, 1 },
{ 59, 68, 1 },
{ 37, 190, 1 },
{ 161, 61, 1 },
{ 111, 189, 1 },
{ -18, 26, 1 },
{ 107, 169, 1 },
{ 29, 193, 1 },
{ -23, 97, 1 },
{ 146, 129, 1 },
{ -10, 116, 1 },
{ 189, 207, 1 },
{ -18, 43, 1 },
{ 9, 212, 1 },
{ 184, -10, 1 },
{ 53, 110, 1 },
{ 155, 96, 1 },
{ 77, 87, 1 },
{ 94, 144, 1 },
{ 189, 180, 1 },
{ -18, 55, 1 },
{ 175, 142, 1 },
{ 225, -28, 1 },
{ 80, 74, 1 },
{ 156, 14, 1 },
{ 138, 222, 1 },
{ 78, -16, 1 },
{ 148, 61, 1 },
{ 221, 197, 1 },
{ 132, 175, 1 },
{ -26, 204, 1 },
{ 25, -24, 1 },
{ 50, 139, 1 },
{ 22, 214, 1 },
{ 15, 204, 1 },
{ 93, 101, 1 },
{ -2, 167, 1 },
{ 151, 80, 1 },
{ 122, 153, 1 },
{ 185, 84, 1 },
{ 23, 221, 1 },
{ 79, 222, 1 },
{ 194, 138, 1 },
{ 198, 222, 1 },
{ 92, -8, 1 },
{ 25, -20, 1 },
{ 32, 174, 1 },
{ -3, 31, 1 },
{ 190, 79, 1 },
{ -18, 23, 1 },
{ 24, 210, 1 },
{ 7, 213, 1 },
{ 184, 109, 1 },
{ 46, 116, 1 },
{ 44, 198, 1 },
{ 202, 31, 1 },
{ 90, 15, 1 },
{ 119, 7, 1 },
{ 4, 149, 1 },
{ 202, 185, 1 },
{ 76, 159, 1 },
{ 187, 36, 1 },
{ 207, 126, 1 },
{ 61, 14, 1 },
{ 149, 108, 1 },
{ 93, 95, 1 },
{ 57, 89, 1 },
{ -13, 91, 1 },
{ 14, 18, 1 },
{ 132, 164, 1 },
{ 186, 188, 1 },
{ 102, 104, 1 },
{ 205, 223, 1 },
{ 38, 110, 1 },
{ 11, 205, 1 },
{ 145, 155, 1 },
{ 197, -3, 1 },
{ 43, 140, 1 },
{ 107, 35, 1 },
{ 142, 155, 2 },
{ 13, 79, 2 },
{ 148, 18, 2 },
{ 204, 104, 2 },
{ 198, 143, 2 },
{ 152, 221, 2 },
{ 96, 184, 2 },
{ -25, 225, 2 },
};

View File

@ -1,10 +0,0 @@
#include "Watchy_Tetris.h"
#include "settings.h"
WatchyTetris watchy(settings);
void setup(){
watchy.init();
}
void loop(){}

View File

@ -1,16 +0,0 @@
#include "Watchy_Tetris.h"
const unsigned char *tetris_nums [10] = {tetris0, tetris1, tetris2, tetris3, tetris4, tetris5, tetris6, tetris7, tetris8, tetris9};
void WatchyTetris::drawWatchFace(){
display.fillScreen(GxEPD_WHITE);
display.drawBitmap(0, 0, tetrisbg, DISPLAY_WIDTH, DISPLAY_HEIGHT, GxEPD_BLACK);
//Hour
display.drawBitmap(25, 20, tetris_nums[currentTime.Hour/10], 40, 60, GxEPD_BLACK); //first digit
display.drawBitmap(75, 20, tetris_nums[currentTime.Hour%10], 40, 60, GxEPD_BLACK); //second digit
//Minute
display.drawBitmap(25, 110, tetris_nums[currentTime.Minute/10], 40, 60, GxEPD_BLACK); //first digit
display.drawBitmap(75, 110, tetris_nums[currentTime.Minute%10], 40, 60, GxEPD_BLACK); //second digit
}

View File

@ -1,13 +0,0 @@
#ifndef WATCHY_TETRIS_H
#define WATCHY_TETRIS_H
#include <Watchy.h>
#include "tetris.h"
class WatchyTetris : public Watchy{
public:
using Watchy::Watchy;
void drawWatchFace();
};
#endif

View File

@ -1,43 +0,0 @@
#ifndef SETTINGS_H
#define SETTINGS_H
//Weather Settings
#define CITY_ID "5128581" //New York City https://openweathermap.org/current#cityid
//You can also use LAT,LON for your location instead of CITY_ID, but not both
//#define LAT "40.7127" //New York City, Looked up on https://www.latlong.net/
//#define LON "-74.0059"
#ifdef CITY_ID
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?id={cityID}&lang={lang}&units={units}&appid={apiKey}" //open weather api using city ID
#else
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&lang={lang}&units={units}&appid={apiKey}" //open weather api using lat lon
#endif
#define OPENWEATHERMAP_APIKEY "f058fe1cad2afe8e2ddc5d063a64cecb" //use your own API key :)
#define TEMP_UNIT "metric" //metric = Celsius , imperial = Fahrenheit
#define TEMP_LANG "en"
#define WEATHER_UPDATE_INTERVAL 30 //must be greater than 5, measured in minutes
//NTP Settings
#define NTP_SERVER "pool.ntp.org"
#define GMT_OFFSET_SEC 3600 * -5 //New York is UTC -5 EST, -4 EDT, will be overwritten by weather data
watchySettings settings{
#ifdef CITY_ID
.cityID = CITY_ID,
#else
.cityID = "",
.lat = LAT,
.lon = LON,
#endif
.weatherAPIKey = OPENWEATHERMAP_APIKEY,
.weatherURL = OPENWEATHERMAP_URL,
.weatherUnit = TEMP_UNIT,
.weatherLang = TEMP_LANG,
.weatherUpdateInterval = WEATHER_UPDATE_INTERVAL,
.ntpServer = NTP_SERVER,
.gmtOffset = GMT_OFFSET_SEC,
.vibrateOClock = true,
};
#endif

View File

@ -1,536 +0,0 @@
// 'dither_it_tetris_0', 40x60px
const unsigned char tetris0 [] PROGMEM = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x75, 0x5d, 0x57, 0x55, 0x80, 0xe0, 0x38, 0x0e, 0x03, 0xc0,
0xf0, 0x3d, 0xd7, 0x75, 0x8b, 0x62, 0xd9, 0xce, 0xb3, 0xc3, 0x70, 0xdc, 0xee, 0x7b, 0xbf, 0x6f,
0xda, 0x87, 0x21, 0xad, 0x6b, 0x59, 0x2e, 0x97, 0xd2, 0xf4, 0xbd, 0x57, 0x53, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcd, 0x6a, 0xba, 0xae, 0xa5, 0xa4, 0xf0, 0x1c, 0x07,
0x13, 0xb2, 0xe0, 0x58, 0x16, 0x55, 0xc9, 0x72, 0xdc, 0xb7, 0x73, 0xc4, 0xe0, 0xd8, 0x36, 0x79,
0xaa, 0xff, 0xdf, 0xf7, 0x13, 0xd5, 0x66, 0xb9, 0xae, 0xa5, 0xa4, 0xf2, 0xbc, 0xaf, 0x55, 0x92,
0x7f, 0xff, 0xff, 0xff, 0xd9, 0xc0, 0x00, 0x03, 0xff, 0xc4, 0xc0, 0x00, 0x02, 0x93, 0xd5, 0x40,
0x00, 0x02, 0x49, 0x95, 0xc0, 0x00, 0x03, 0x25, 0xd0, 0x40, 0x00, 0x02, 0xbb, 0xa5, 0xc0, 0x00,
0x03, 0x73, 0xda, 0xc0, 0x00, 0x02, 0x29, 0xc9, 0x40, 0x00, 0x03, 0x45, 0xa5, 0x40, 0x00, 0x02,
0xab, 0xb0, 0xc0, 0x00, 0x03, 0xff, 0xcd, 0xc0, 0x00, 0x03, 0xff, 0xd2, 0x40, 0x00, 0x03, 0x25,
0xa4, 0xc0, 0x00, 0x02, 0xdb, 0xca, 0xc0, 0x00, 0x02, 0xfd, 0xb2, 0xc0, 0x00, 0x03, 0x4b, 0x89,
0x40, 0x00, 0x02, 0xcd, 0xea, 0xc0, 0x00, 0x02, 0xfd, 0xc9, 0x40, 0x00, 0x03, 0x55, 0xa5, 0x40,
0x00, 0x02, 0xab, 0xb2, 0xc0, 0x00, 0x03, 0xff, 0xc9, 0x7f, 0xff, 0xff, 0xff, 0x94, 0xf5, 0x5d,
0x57, 0x25, 0xd2, 0xea, 0xba, 0xae, 0xdb, 0xca, 0x6f, 0xdb, 0xf6, 0xfd, 0xa9, 0x74, 0xdd, 0x37,
0x4b, 0xd5, 0xec, 0xbb, 0x2e, 0xcd, 0xc4, 0xef, 0xdb, 0xf6, 0xfb, 0xaa, 0x75, 0x5d, 0x57, 0x59,
0xd5, 0xea, 0xba, 0xae, 0xa7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
0x7b, 0x7e, 0xde, 0x93, 0xd6, 0xed, 0xbb, 0x6e, 0xed, 0xdb, 0xf6, 0xfd, 0xbe, 0xfb, 0xed, 0x7b,
0x5e, 0xd6, 0xcd, 0xdb, 0xf6, 0xfb, 0x7e, 0xcb, 0xed, 0x7b, 0x5e, 0xd7, 0x7d, 0xb7, 0xed, 0xfd,
0xbe, 0xd5, 0xed, 0x7b, 0x5f, 0x6f, 0x2b, 0xff, 0xff, 0xff, 0xff, 0xff
};
// 'dither_it_tetris_1', 40x60px
const unsigned char tetris1 [] PROGMEM = {
0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x0d, 0x57, 0x55, 0x00, 0x00, 0x09, 0x56, 0x03, 0x00,
0x00, 0x0d, 0x1f, 0x75, 0x00, 0x00, 0x08, 0xa6, 0xb3, 0x00, 0x00, 0x0e, 0x4e, 0x7b, 0x00, 0x00,
0x0a, 0xaf, 0x21, 0x00, 0x00, 0x0d, 0x56, 0x97, 0x00, 0x00, 0x0a, 0x4f, 0x53, 0x00, 0x00, 0x09,
0x27, 0xff, 0x00, 0x00, 0x0c, 0x9f, 0xff, 0x00, 0x00, 0x0d, 0x4e, 0xa5, 0x00, 0x00, 0x0c, 0xae,
0x13, 0x00, 0x00, 0x0a, 0x57, 0x55, 0x00, 0x00, 0x0b, 0x2e, 0xb3, 0x00, 0x00, 0x0c, 0x96, 0x79,
0x00, 0x00, 0x0d, 0x4f, 0x25, 0x00, 0x00, 0x0a, 0xae, 0x93, 0x00, 0x00, 0x0c, 0x27, 0x55, 0x00,
0x00, 0x0b, 0x57, 0xff, 0x00, 0x00, 0x09, 0x9f, 0xff, 0x00, 0x00, 0x0c, 0x46, 0xab, 0x00, 0x00,
0x0d, 0x5f, 0x03, 0x00, 0x00, 0x0a, 0x4e, 0x75, 0x00, 0x00, 0x0b, 0x27, 0x33, 0x00, 0x00, 0x0c,
0x9e, 0xb9, 0x00, 0x00, 0x0c, 0xae, 0x55, 0x00, 0x00, 0x0a, 0xa7, 0x23, 0x00, 0x00, 0x0d, 0x2e,
0xab, 0x00, 0x00, 0x0a, 0x97, 0xff, 0x00, 0x00, 0x09, 0x2f, 0xff, 0x00, 0x00, 0x0c, 0x97, 0x25,
0x00, 0x00, 0x0d, 0x56, 0xdb, 0x00, 0x00, 0x0c, 0xae, 0xfd, 0x00, 0x00, 0x0a, 0x8e, 0xcb, 0x00,
0x00, 0x0d, 0x5e, 0xcd, 0x00, 0x00, 0x0c, 0x47, 0x7d, 0x00, 0x00, 0x0a, 0xae, 0xd5, 0x00, 0x00,
0x0d, 0x57, 0x2b, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x0f,
0xbe, 0x93, 0x00, 0x00, 0x0d, 0x6e, 0xed, 0x00, 0x00, 0x0d, 0xb6, 0xfb, 0x00, 0x00, 0x0e, 0xdf,
0x4d, 0x00, 0x00, 0x0b, 0x6e, 0xcb, 0x00, 0x00, 0x0e, 0xde, 0xfd, 0x00, 0x00, 0x0d, 0xb7, 0x55,
0x00, 0x00, 0x0f, 0x7e, 0xab, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00,
0x00, 0x0a, 0x96, 0x93, 0x00, 0x00, 0x0c, 0x0e, 0xed, 0x00, 0x00, 0x08, 0x0e, 0xfb, 0x00, 0x00,
0x0c, 0xb6, 0xcd, 0x00, 0x00, 0x08, 0x37, 0x4b, 0x00, 0x00, 0x0f, 0xf6, 0xfd, 0x00, 0x00, 0x09,
0xae, 0xab, 0x00, 0x00, 0x0c, 0xaf, 0x55, 0x00, 0x00, 0x0f, 0xff, 0xff
};
// 'dither_it_tetris_2', 40x60px
const unsigned char tetris2 [] PROGMEM = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x75, 0x5d, 0x57, 0x55, 0x80, 0xe0, 0x38, 0x0e, 0x03, 0xc0,
0xf0, 0x3c, 0x0f, 0x75, 0x8b, 0x62, 0xd8, 0xb6, 0x73, 0xc3, 0x70, 0xdc, 0x37, 0x3b, 0xbf, 0x6f,
0xdb, 0xf6, 0xa1, 0xad, 0x6b, 0x5a, 0xd6, 0x4b, 0xd2, 0xf4, 0xbd, 0x2f, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc9, 0x6a, 0xba, 0xae, 0xab, 0xb6, 0xf0, 0x18, 0x07,
0x03, 0xbf, 0x60, 0x5d, 0xde, 0x75, 0xd2, 0xf2, 0xda, 0xc7, 0x33, 0xb3, 0x60, 0xdd, 0xee, 0xb9,
0xbf, 0x7f, 0xd8, 0x4e, 0x55, 0xd5, 0x66, 0xbd, 0x27, 0x23, 0xaa, 0xf2, 0xba, 0xae, 0xab, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x03, 0x53, 0x00, 0x00,
0x00, 0x02, 0x09, 0x00, 0x00, 0x00, 0x03, 0x65, 0x00, 0x00, 0x00, 0x02, 0xbb, 0x00, 0x00, 0x00,
0x02, 0x73, 0x00, 0x00, 0x00, 0x03, 0x29, 0x00, 0x00, 0x00, 0x02, 0x85, 0x00, 0x00, 0x00, 0x03,
0x77, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x75, 0x5d, 0x57, 0x13,
0x80, 0xe0, 0x3a, 0xae, 0xe9, 0xc0, 0xf7, 0x5b, 0xf6, 0xff, 0x8b, 0x67, 0x3b, 0x36, 0xc9, 0xc3,
0x73, 0xbb, 0x2f, 0x4f, 0xbf, 0x6a, 0x1d, 0xf6, 0xf9, 0xad, 0x64, 0xbb, 0x56, 0xad, 0xd2, 0xf5,
0x5c, 0xaf, 0x53, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0xd5, 0x72, 0x50,
0x00, 0x00, 0x80, 0xed, 0xb0, 0x00, 0x00, 0xc0, 0x6f, 0xd0, 0x00, 0x00, 0x8b, 0xec, 0xb0, 0x00,
0x00, 0xc3, 0x74, 0xd0, 0x00, 0x00, 0xbf, 0x6f, 0xd0, 0x00, 0x00, 0xad, 0x6a, 0xb0, 0x00, 0x00,
0xd2, 0xf5, 0x50, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5,
0x69, 0x3d, 0x57, 0x55, 0x80, 0xee, 0xd8, 0x0e, 0xab, 0xc0, 0x6f, 0xbc, 0x0e, 0xfd, 0x8b, 0xec,
0xd8, 0xb6, 0xcd, 0xc3, 0x74, 0xdc, 0x37, 0x4b, 0xbf, 0x6f, 0xbb, 0xf6, 0xfd, 0xad, 0x6a, 0xba,
0xd7, 0x55, 0xd2, 0xf5, 0x5d, 0x2e, 0xab, 0xff, 0xff, 0xff, 0xff, 0xff
};
// 'dither_it_tetris_3', 40x60px
const unsigned char tetris3 [] PROGMEM = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x55, 0x6b, 0x5a, 0xab, 0xa2, 0x29, 0x24, 0x49, 0x29, 0xc9,
0x55, 0x4a, 0xa5, 0x4b, 0xa5, 0x8a, 0x33, 0x14, 0x25, 0xb4, 0x51, 0x88, 0xa9, 0xab, 0xc3, 0x14,
0x56, 0x52, 0x53, 0x9a, 0x52, 0xa4, 0x95, 0x49, 0xd9, 0xd6, 0xd5, 0xb5, 0x5f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc9, 0x6a, 0xba, 0x97, 0x49, 0xb6, 0xe0, 0x1c, 0x4e,
0x23, 0xbf, 0x70, 0x59, 0x57, 0x55, 0xd2, 0xe2, 0xdd, 0xce, 0x73, 0xb3, 0x70, 0xd9, 0xe7, 0x3b,
0xbe, 0xef, 0xdc, 0x4e, 0xa5, 0xd6, 0x6b, 0x5a, 0x96, 0x49, 0xa9, 0xf4, 0xbd, 0x57, 0x57, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x03, 0x53, 0x00, 0x00,
0x00, 0x02, 0x09, 0x00, 0x00, 0x00, 0x03, 0x65, 0x00, 0x00, 0x00, 0x02, 0xbb, 0x00, 0x00, 0x00,
0x02, 0x71, 0x00, 0x00, 0x00, 0x03, 0x2b, 0x00, 0x00, 0x00, 0x02, 0x85, 0x00, 0x00, 0x00, 0x03,
0x75, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x35, 0x5d, 0x57, 0x13,
0x00, 0x20, 0x3a, 0xae, 0xed, 0x00, 0x37, 0x5b, 0xf6, 0xfb, 0x00, 0x2b, 0x3b, 0x36, 0xcd, 0x00,
0x27, 0xbb, 0x2f, 0x4b, 0x00, 0x32, 0x1d, 0xf6, 0xfd, 0x00, 0x29, 0x7b, 0x56, 0xab, 0x00, 0x35,
0x3c, 0xaf, 0x55, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00,
0x02, 0x93, 0x00, 0x00, 0x00, 0x03, 0x6d, 0x00, 0x00, 0x00, 0x02, 0xfd, 0x00, 0x00, 0x00, 0x02,
0xcb, 0x00, 0x00, 0x00, 0x03, 0x4d, 0x00, 0x00, 0x00, 0x02, 0xfb, 0x00, 0x00, 0x00, 0x02, 0xab,
0x00, 0x00, 0x00, 0x03, 0x55, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5,
0x75, 0x5d, 0x57, 0x25, 0x80, 0xe0, 0x38, 0x0e, 0xdb, 0xc0, 0xf0, 0x3c, 0x0e, 0xfd, 0x8b, 0x62,
0xd8, 0xb6, 0xcb, 0xc3, 0x70, 0xdc, 0x37, 0x4d, 0xbf, 0x6f, 0xdb, 0xf6, 0xfd, 0xad, 0x6b, 0x5a,
0xd6, 0xab, 0xd2, 0xf4, 0xbd, 0x2f, 0x53, 0xff, 0xff, 0xff, 0xff, 0xff
};
// 'dither_it_tetris_4', 40x60px
const unsigned char tetris4 [] PROGMEM = {
0xff, 0xc0, 0x00, 0x03, 0xff, 0xd5, 0x40, 0x00, 0x03, 0xff, 0x80, 0xc0, 0x00, 0x03, 0x4b, 0xc0,
0xc0, 0x00, 0x03, 0x77, 0x8b, 0x40, 0x00, 0x03, 0xad, 0xc3, 0x40, 0x00, 0x03, 0x77, 0xbf, 0x40,
0x00, 0x03, 0xad, 0xad, 0x40, 0x00, 0x02, 0xf7, 0xd2, 0xc0, 0x00, 0x03, 0xaf, 0xff, 0xc0, 0x00,
0x03, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xff, 0xc9, 0x40, 0x00, 0x03, 0xbb, 0xb6, 0xc0, 0x00, 0x03,
0x6f, 0xbf, 0x40, 0x00, 0x03, 0xb5, 0xd2, 0xc0, 0x00, 0x02, 0xdb, 0xb3, 0x40, 0x00, 0x03, 0xb7,
0xbf, 0x40, 0x00, 0x03, 0x6d, 0xd5, 0x40, 0x00, 0x03, 0xb7, 0xaa, 0xc0, 0x00, 0x03, 0x7b, 0xff,
0xc0, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0xf5, 0x5d, 0x57, 0xb7, 0x88, 0x60,
0x38, 0x0f, 0x6d, 0xd5, 0xf0, 0x3c, 0x0f, 0xb7, 0x9c, 0x62, 0xd8, 0xb6, 0xdb, 0xce, 0xf0, 0xdc,
0x37, 0x6f, 0xa9, 0x6f, 0xdb, 0xf7, 0xb5, 0x92, 0xeb, 0x5a, 0xd7, 0x6f, 0xd4, 0xf4, 0xbd, 0x2f,
0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0xe9, 0x5a, 0x4e, 0x4b,
0x82, 0x64, 0x3b, 0xb7, 0x75, 0xd9, 0x73, 0x5b, 0xf6, 0xfd, 0xae, 0xeb, 0x3d, 0x2e, 0xcb, 0x9c,
0xe7, 0x9b, 0x37, 0x4d, 0xca, 0x72, 0x5b, 0xee, 0xfb, 0xa1, 0x69, 0x3d, 0x66, 0xab, 0xdd, 0xf5,
0x5a, 0x9f, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00,
0x02, 0x93, 0x00, 0x00, 0x00, 0x02, 0xed, 0x00, 0x00, 0x00, 0x03, 0x7d, 0x00, 0x00, 0x00, 0x02,
0xcb, 0x00, 0x00, 0x00, 0x02, 0xcd, 0x00, 0x00, 0x00, 0x03, 0x7b, 0x00, 0x00, 0x00, 0x02, 0xd9,
0x00, 0x00, 0x00, 0x03, 0x27, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00,
0x00, 0x00, 0x03, 0x25, 0x00, 0x00, 0x00, 0x02, 0xdb, 0x00, 0x00, 0x00, 0x02, 0xfd, 0x00, 0x00,
0x00, 0x03, 0x4b, 0x00, 0x00, 0x00, 0x02, 0xcd, 0x00, 0x00, 0x00, 0x02, 0xfd, 0x00, 0x00, 0x00,
0x03, 0x55, 0x00, 0x00, 0x00, 0x02, 0xab, 0x00, 0x00, 0x00, 0x03, 0xff
};
// 'dither_it_tetris_5', 40x60px
const unsigned char tetris5 [] PROGMEM = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x75, 0x5f, 0xbf, 0xef, 0x80, 0xe0, 0x3d, 0xee, 0xbb, 0xc0,
0xf0, 0x3f, 0xbf, 0xff, 0x8b, 0x62, 0xdb, 0x37, 0xcd, 0xc3, 0x70, 0xdf, 0x3e, 0xcf, 0xbf, 0x6f,
0xdd, 0xf7, 0xfb, 0xad, 0x6b, 0x5f, 0xdf, 0x6f, 0xd2, 0xf4, 0xbd, 0x77, 0xbb, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0xc9, 0x40, 0x00, 0x00, 0x00, 0xb6, 0xc0, 0x00, 0x00,
0x00, 0xbf, 0x40, 0x00, 0x00, 0x00, 0xd2, 0xc0, 0x00, 0x00, 0x00, 0xb3, 0x40, 0x00, 0x00, 0x00,
0xbf, 0x40, 0x00, 0x00, 0x00, 0xd5, 0x40, 0x00, 0x00, 0x00, 0xaa, 0xc0, 0x00, 0x00, 0x00, 0xff,
0xc0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0xff, 0xfd, 0x57, 0xff, 0x88, 0x74,
0xba, 0xaf, 0x4b, 0xd5, 0xf7, 0x7b, 0xf7, 0x77, 0x9c, 0x7a, 0xdb, 0x37, 0xad, 0xce, 0xed, 0xbd,
0x2e, 0xf7, 0xa9, 0x77, 0x7b, 0xf7, 0x5b, 0x92, 0xfa, 0xda, 0xaf, 0xad, 0xd4, 0xf7, 0xbd, 0x57,
0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0xe9, 0x3a, 0x4e, 0x93,
0x82, 0x64, 0x9b, 0xb6, 0xed, 0xd9, 0x72, 0x5d, 0xf7, 0x7d, 0xae, 0xeb, 0xbb, 0x2e, 0xcb, 0x9c,
0xe7, 0x3b, 0x36, 0xcd, 0xca, 0x72, 0x9b, 0xee, 0xfb, 0xa1, 0x68, 0x5d, 0x67, 0x59, 0xdd, 0xf7,
0x7a, 0x9e, 0xa7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00,
0x03, 0x25, 0x00, 0x00, 0x00, 0x02, 0xdb, 0x00, 0x00, 0x00, 0x02, 0xfd, 0x00, 0x00, 0x00, 0x03,
0x4b, 0x00, 0x00, 0x00, 0x02, 0xcd, 0x00, 0x00, 0x00, 0x02, 0xfb, 0x00, 0x00, 0x00, 0x03, 0x59,
0x00, 0x00, 0x00, 0x02, 0xa7, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0xff,
0xff, 0xff, 0xfc, 0x00, 0xd2, 0xea, 0x5d, 0x2c, 0x00, 0xdd, 0xfb, 0xbd, 0xdc, 0x00, 0xeb, 0x76,
0xfe, 0xb4, 0x00, 0xdd, 0xfb, 0x5b, 0x6c, 0x00, 0xeb, 0x6d, 0xbd, 0xdc, 0x00, 0xbd, 0xf6, 0xfe,
0xb4, 0x00, 0xeb, 0xfb, 0xbd, 0xec, 0x00, 0xff, 0xff, 0xff, 0xfc, 0x00
};
// 'dither_it_tetris_6', 40x60px
const unsigned char tetris6 [] PROGMEM = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x75, 0x5f, 0xbf, 0xef, 0x80, 0xe0, 0x3d, 0xee, 0xbb, 0xc0,
0xf0, 0x3f, 0xbf, 0xff, 0x8b, 0x62, 0xdb, 0x37, 0xcd, 0xc3, 0x70, 0xdf, 0x3e, 0xcf, 0xbf, 0x6f,
0xdd, 0xf7, 0xfb, 0xad, 0x6b, 0x5f, 0xdf, 0x6f, 0xd2, 0xf4, 0xbd, 0x77, 0xbb, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0xc9, 0x40, 0x00, 0x00, 0x00, 0xb6, 0xc0, 0x00, 0x00,
0x00, 0xbf, 0x40, 0x00, 0x00, 0x00, 0xd2, 0xc0, 0x00, 0x00, 0x00, 0xb3, 0x40, 0x00, 0x00, 0x00,
0xbf, 0x40, 0x00, 0x00, 0x00, 0xd5, 0x40, 0x00, 0x00, 0x00, 0xaa, 0xc0, 0x00, 0x00, 0x00, 0xff,
0xc0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0xf5, 0x5d, 0x57, 0x55, 0x88, 0x60,
0x3a, 0xae, 0x55, 0xd5, 0xf7, 0x5b, 0xf7, 0x47, 0x9c, 0x67, 0x3b, 0x36, 0x29, 0xce, 0xf3, 0x9d,
0x2f, 0x93, 0xa9, 0x6a, 0x5b, 0xf6, 0xab, 0x92, 0xe4, 0xba, 0xae, 0x95, 0xd4, 0xf5, 0x5d, 0x57,
0x53, 0xff, 0xff, 0xff, 0xfe, 0x49, 0xff, 0xff, 0xff, 0xff, 0x27, 0xf7, 0x7b, 0x7e, 0xdf, 0x53,
0xde, 0xef, 0xdb, 0xf6, 0x95, 0xfb, 0xfe, 0xff, 0xbe, 0xab, 0xb3, 0x78, 0xde, 0x36, 0xc5, 0xf3,
0xec, 0xfb, 0x3f, 0x17, 0xff, 0x7f, 0xdf, 0xf7, 0x63, 0xb7, 0xf7, 0xfd, 0xfe, 0x99, 0xed, 0x7d,
0x5f, 0x56, 0x4b, 0xff, 0xff, 0xff, 0xff, 0x45, 0xff, 0xc0, 0x00, 0x02, 0xb7, 0xee, 0xc0, 0x00,
0x03, 0x41, 0xdf, 0xc0, 0x00, 0x03, 0x37, 0xfb, 0x40, 0x00, 0x02, 0x93, 0xe3, 0xc0, 0x00, 0x02,
0xc9, 0xb3, 0x40, 0x00, 0x03, 0x17, 0xff, 0xc0, 0x00, 0x03, 0x63, 0xde, 0xc0, 0x00, 0x02, 0x95,
0xf5, 0xc0, 0x00, 0x03, 0x2b, 0xff, 0xc0, 0x00, 0x02, 0xc3, 0xff, 0xff, 0xff, 0xfe, 0x2b, 0xee,
0xff, 0xff, 0xff, 0x55, 0xdb, 0xf4, 0xba, 0x97, 0x25, 0xed, 0x77, 0x7e, 0xef, 0x4b, 0xb6, 0xfa,
0xdd, 0xbe, 0x69, 0xdb, 0xed, 0xbe, 0xd7, 0x87, 0xed, 0x77, 0x7b, 0x6e, 0x33, 0xdb, 0xfa, 0xdd,
0xbf, 0x55, 0xf6, 0xf7, 0xbf, 0x6e, 0xcb, 0xff, 0xff, 0xff, 0xff, 0xff
};
// 'dither_it_tetris_7', 40x60px
const unsigned char tetris7 [] PROGMEM = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x75, 0x5d, 0x57, 0x55, 0x80, 0xe0, 0x38, 0x0e, 0xab, 0xc0,
0xf0, 0x3c, 0x0e, 0xfd, 0x8b, 0x62, 0xd8, 0xb6, 0xcd, 0xc3, 0x70, 0xdc, 0x37, 0x4b, 0xbf, 0x6f,
0xdb, 0xf6, 0xfd, 0xad, 0x6b, 0x5a, 0xd7, 0x55, 0xd2, 0xf4, 0xbd, 0x2e, 0xab, 0xff, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x0a, 0x4e, 0x93, 0x00, 0x00, 0x0d, 0xee,
0xed, 0x00, 0x00, 0x0b, 0xb6, 0xfb, 0x00, 0x00, 0x0b, 0x37, 0x4d, 0x00, 0x00, 0x0d, 0x2e, 0xcd,
0x00, 0x00, 0x0b, 0xf6, 0xfb, 0x00, 0x00, 0x0a, 0xae, 0xab, 0x00, 0x00, 0x0d, 0x57, 0x55, 0x00,
0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x03, 0x25, 0x00, 0x00,
0x00, 0x02, 0xdb, 0x00, 0x00, 0x00, 0x02, 0xfd, 0x00, 0x00, 0x00, 0x03, 0x4b, 0x00, 0x00, 0x00,
0x02, 0xcd, 0x00, 0x00, 0x00, 0x02, 0xfd, 0x00, 0x00, 0x00, 0x03, 0x55, 0x00, 0x00, 0x00, 0x02,
0xab, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x03, 0xb7,
0x00, 0x00, 0x00, 0x03, 0x6d, 0x00, 0x00, 0x00, 0x03, 0xb7, 0x00, 0x00, 0x00, 0x02, 0xdb, 0x00,
0x00, 0x00, 0x03, 0xb7, 0x00, 0x00, 0x00, 0x03, 0x6d, 0x00, 0x00, 0x00, 0x03, 0xb7, 0x00, 0x00,
0x00, 0x03, 0x7d, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00,
0x03, 0xb7, 0x00, 0x00, 0x00, 0x03, 0x6b, 0x00, 0x00, 0x00, 0x03, 0xbd, 0x00, 0x00, 0x00, 0x02,
0xd7, 0x00, 0x00, 0x00, 0x03, 0xbb, 0x00, 0x00, 0x00, 0x03, 0x6d, 0x00, 0x00, 0x00, 0x03, 0xb7,
0x00, 0x00, 0x00, 0x03, 0x6d, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00,
0x00, 0x00, 0x03, 0x55, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x00, 0x03, 0x75, 0x00, 0x00,
0x00, 0x02, 0xb3, 0x00, 0x00, 0x00, 0x02, 0x79, 0x00, 0x00, 0x00, 0x03, 0x25, 0x00, 0x00, 0x00,
0x02, 0x93, 0x00, 0x00, 0x00, 0x03, 0x55, 0x00, 0x00, 0x00, 0x03, 0xff
};
// 'dither_it_tetris_8', 40x60px
const unsigned char tetris8 [] PROGMEM = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x75, 0x5d, 0x57, 0x55, 0x80, 0xe0, 0x38, 0x0e, 0x03, 0xc0,
0xf0, 0x3d, 0xd7, 0x75, 0x8b, 0x62, 0xd9, 0xce, 0xb3, 0xc3, 0x70, 0xdc, 0xee, 0x7b, 0xbf, 0x6f,
0xda, 0x87, 0x21, 0xad, 0x6b, 0x59, 0x2e, 0x97, 0xd2, 0xf4, 0xbd, 0x57, 0x53, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xff, 0xc9, 0x40, 0x00, 0x03, 0x2b, 0xb6, 0xc0, 0x00, 0x02,
0x81, 0xbf, 0x40, 0x00, 0x02, 0x6b, 0xd2, 0xc0, 0x00, 0x03, 0x3b, 0xb3, 0x40, 0x00, 0x02, 0xb1,
0xbf, 0x40, 0x00, 0x03, 0x57, 0xd5, 0x40, 0x00, 0x02, 0x09, 0xaa, 0xc0, 0x00, 0x03, 0xb5, 0xff,
0xc0, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xff, 0xcc, 0xc0, 0x00, 0x02, 0x93, 0xa5, 0x40,
0x00, 0x03, 0x25, 0xb1, 0xc0, 0x00, 0x02, 0xab, 0xca, 0x40, 0x00, 0x02, 0x71, 0xc4, 0xc0, 0x00,
0x03, 0x3b, 0xaa, 0xc0, 0x00, 0x02, 0xa5, 0xd5, 0x40, 0x00, 0x02, 0x4b, 0xa4, 0xc0, 0x00, 0x03,
0x53, 0x92, 0x40, 0x00, 0x03, 0xff, 0xd9, 0xff, 0xff, 0xff, 0xff, 0xc4, 0xf5, 0x5d, 0x57, 0x25,
0xd5, 0x60, 0x3a, 0xae, 0xdb, 0x95, 0xf7, 0x5b, 0xf6, 0xfd, 0xd0, 0x67, 0x3b, 0x37, 0x4b, 0xa5,
0xf3, 0xbb, 0x2e, 0xcd, 0xda, 0xea, 0x1d, 0xf6, 0xfd, 0xc9, 0x64, 0xbb, 0x57, 0x55, 0xa5, 0x75,
0x5c, 0xae, 0xab, 0xb0, 0xff, 0xff, 0xff, 0xff, 0xcb, 0x40, 0x00, 0x03, 0xff, 0xd4, 0xc0, 0x00,
0x03, 0x25, 0xa5, 0x40, 0x00, 0x02, 0xdb, 0xca, 0xc0, 0x00, 0x02, 0xfd, 0xb0, 0xc0, 0x00, 0x03,
0x4b, 0x8b, 0x40, 0x00, 0x02, 0xcd, 0xe8, 0xc0, 0x00, 0x02, 0xfb, 0xca, 0xc0, 0x00, 0x03, 0x59,
0xa5, 0x40, 0x00, 0x02, 0xa7, 0xb2, 0x40, 0x00, 0x03, 0xff, 0xc9, 0xff, 0xff, 0xff, 0xff, 0x94,
0xff, 0xff, 0xff, 0x25, 0xd2, 0x74, 0xba, 0x96, 0xdb, 0xcb, 0x77, 0x7e, 0xee, 0xfd, 0xa8, 0xfa,
0xdd, 0xbe, 0xcb, 0xd5, 0xed, 0xbe, 0xd7, 0x4d, 0xc4, 0x77, 0x7b, 0x6e, 0xfd, 0xaa, 0xfa, 0xdd,
0xbe, 0xab, 0xd5, 0x77, 0xbf, 0x6f, 0x53, 0xff, 0xff, 0xff, 0xff, 0xff
};
// 'dither_it_tetris_9', 40x60px
const unsigned char tetris9 [] PROGMEM = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x75, 0x5f, 0xff, 0xff, 0x80, 0xe0, 0x3d, 0x2e, 0xa5, 0xc0,
0xf0, 0x3d, 0xdf, 0xbb, 0x8b, 0x62, 0xde, 0xb7, 0x6f, 0xc3, 0x70, 0xdb, 0x6f, 0xb5, 0xbf, 0x6f,
0xdd, 0xde, 0xdb, 0xad, 0x6b, 0x5e, 0xb7, 0x6f, 0xd2, 0xf4, 0xbf, 0xef, 0xdb, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xff, 0xd5, 0x40, 0x00, 0x03, 0xbb, 0x80, 0xc0, 0x00, 0x03,
0x6f, 0xc0, 0x40, 0x00, 0x03, 0xb5, 0x8b, 0xc0, 0x00, 0x02, 0xdb, 0xc3, 0x40, 0x00, 0x03, 0x6f,
0xbf, 0x40, 0x00, 0x03, 0xb5, 0xad, 0x40, 0x00, 0x03, 0x6f, 0xd2, 0xc0, 0x00, 0x03, 0xdb, 0xff,
0xc0, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0xfe, 0xff, 0xbf, 0x77, 0x82, 0x77,
0xba, 0xef, 0xad, 0xd9, 0x7e, 0xff, 0xfe, 0xdb, 0xae, 0xec, 0xdf, 0x37, 0x6f, 0x9c, 0xfc, 0xfb,
0x3f, 0xb5, 0xca, 0x77, 0xdf, 0xee, 0xdf, 0xa1, 0x7f, 0x7d, 0xbf, 0x6b, 0xdd, 0x75, 0xde, 0xef,
0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0x95, 0x53, 0x29, 0x23,
0xca, 0x54, 0x49, 0x54, 0xa9, 0xd1, 0x25, 0xac, 0x45, 0x17, 0x8d, 0x94, 0x13, 0x54, 0xa1, 0xf0,
0x4a, 0xd0, 0xab, 0x6f, 0x87, 0x31, 0x26, 0x20, 0x83, 0xd8, 0x94, 0x95, 0x95, 0x59, 0xaa, 0xd6,
0xf4, 0xb5, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00,
0x03, 0x4b, 0x00, 0x00, 0x00, 0x02, 0xb9, 0x00, 0x00, 0x00, 0x02, 0xfd, 0x00, 0x00, 0x00, 0x03,
0x4b, 0x00, 0x00, 0x00, 0x02, 0xcd, 0x00, 0x00, 0x00, 0x02, 0xfd, 0x00, 0x00, 0x00, 0x03, 0x55,
0x00, 0x00, 0x00, 0x02, 0xab, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00,
0x00, 0x00, 0x03, 0x25, 0x00, 0x00, 0x00, 0x02, 0xdb, 0x00, 0x00, 0x00, 0x02, 0xfd, 0x00, 0x00,
0x00, 0x03, 0x4b, 0x00, 0x00, 0x00, 0x02, 0xcd, 0x00, 0x00, 0x00, 0x02, 0xfd, 0x00, 0x00, 0x00,
0x03, 0x55, 0x00, 0x00, 0x00, 0x02, 0xab, 0x00, 0x00, 0x00, 0x03, 0xff
};
// 'tetris_bg_dither', 200x200px
const unsigned char tetrisbg [] PROGMEM = {
0xff, 0x8a, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29,
0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x42, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x1f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xb1, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xc6, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x86, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x92, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xdf,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x95, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xca, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x82,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xdf, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
0xdf, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x1f, 0x1b, 0x76, 0xed, 0xdb, 0xb7, 0x6e,
0xdc, 0x3f, 0xff, 0x92, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xca, 0x1f, 0x0d, 0xad, 0xb6, 0xb6, 0xda, 0xdb, 0x6a, 0x3f, 0xff, 0xb1, 0xa0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x9f, 0x70, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0x3f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xdf, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3f, 0xff, 0x86, 0x10,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x5f, 0x63, 0xe0,
0xf8, 0x3e, 0x1f, 0x87, 0xf9, 0x3f, 0xff, 0x92, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xdf, 0x47, 0x01, 0xce, 0x73, 0x9c, 0xe7, 0x01, 0x3f, 0xff,
0x96, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x5f,
0x67, 0x01, 0xce, 0x73, 0x9c, 0xe7, 0x01, 0x3f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0x23, 0xe1, 0xc0, 0x73, 0x9c, 0xe7, 0xe1,
0x3f, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x42, 0x1f, 0x60, 0x79, 0xc0, 0x73, 0x9f, 0x87, 0x01, 0x3f, 0xff, 0x95, 0xa0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x80, 0x44, 0x79, 0xce, 0x73, 0x9d,
0x07, 0x01, 0x00, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xdd, 0x63, 0xe0, 0xf8, 0x3e, 0x1c, 0xe7, 0xf9, 0x37, 0xff, 0xbf, 0xf0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xd7, 0x23, 0xe0, 0xf8,
0x3e, 0x1c, 0xe7, 0xf9, 0x1a, 0xff, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x55, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x37, 0xff, 0x96,
0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xdb, 0x50,
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x2d, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xcd, 0x1b, 0xbd, 0xdd, 0xdd, 0xdd, 0xdd, 0xda, 0x36,
0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xff, 0x92, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0x16, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xad, 0xff, 0xb1, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x46, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf6, 0xff, 0xbf, 0xf0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xd6, 0xa9, 0x4a, 0x55, 0x55,
0x55, 0x55, 0x55, 0xad, 0xff, 0x86, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x28, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x92, 0xb0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xdf, 0xbf, 0xff,
0xef, 0x77, 0x77, 0x77, 0x7f, 0x7f, 0xff, 0x96, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x54, 0xd5, 0x29, 0x5a, 0xda, 0xda, 0xda, 0xd2, 0xd5, 0xff,
0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0x95, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xd6, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x83, 0xe0, 0x00, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x1d,
0x84, 0x78, 0x00, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x84, 0x78, 0x00, 0xff, 0x82, 0x10, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, 0x00, 0x00, 0x00,
0x00, 0x11, 0x83, 0xe0, 0x00, 0xff, 0x96, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xaa, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x11, 0xe4, 0x78, 0x00, 0xff, 0xbf,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xe4, 0x78, 0x00, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x83, 0xe0, 0x00,
0xff, 0x92, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x83, 0xe0, 0x00, 0xff, 0xb1, 0xa0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x86, 0x10, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x5f, 0xff, 0xff, 0xff, 0xff,
0xfe, 0xf7, 0x7b, 0xff, 0xff, 0x92, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8a, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x96, 0x50,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x1f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x95, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x08, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0xb0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xdf, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x1f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xb1, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46,
0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x86, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x28, 0x5f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x92, 0xb0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xdf, 0x1b, 0x76, 0xed, 0xdb,
0xb7, 0x6e, 0xdc, 0x3f, 0xff, 0x96, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x59, 0x5f, 0x0d, 0xad, 0xb6, 0xb6, 0xda, 0xdb, 0x6a, 0x3f, 0xff, 0xbf, 0xf0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0x70, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x3f, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x1f, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3f, 0xff,
0x95, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x9f,
0x67, 0x01, 0xfe, 0x43, 0x9f, 0xe7, 0x01, 0x3f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0x47, 0x01, 0xc0, 0x43, 0x9c, 0x07, 0x01,
0x3f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xdf, 0x67, 0x01, 0xc0, 0x43, 0x9c, 0x07, 0x01, 0x3f, 0xff, 0x82, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x5f, 0x27, 0x01, 0xf8, 0x43, 0x9f,
0x87, 0x01, 0x3f, 0xff, 0x96, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xaa, 0xdf, 0x67, 0x01, 0xc0, 0x43, 0x9c, 0x07, 0x01, 0x3f, 0xff, 0xbf, 0xf0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0x47, 0x01, 0xc0,
0x36, 0x1c, 0x07, 0x01, 0x3f, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x42, 0x1f, 0x67, 0xf9, 0xfe, 0x0c, 0x1f, 0xe7, 0xf9, 0x3f, 0xff, 0x92,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0x1f, 0x27,
0xf9, 0xfe, 0x0c, 0x1f, 0xe7, 0xf9, 0x3f, 0xff, 0xb1, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x9f, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3f,
0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
0xdf, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3f, 0xff, 0x86, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x5f, 0x60, 0x00, 0x00, 0x00, 0x0f, 0x80,
0x01, 0x3f, 0xff, 0x92, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x8a, 0xdf, 0x20, 0x00, 0x00, 0x00, 0x11, 0xe0, 0x01, 0x3f, 0xff, 0x96, 0x50, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x5f, 0x60, 0x00, 0x00, 0x00,
0x11, 0xe0, 0x01, 0x3f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xdf, 0x40, 0x00, 0x00, 0x00, 0x11, 0xe0, 0x01, 0x3f, 0xff, 0x90, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x1f, 0x60, 0x00,
0x00, 0x00, 0x0f, 0xe0, 0x01, 0x3f, 0xff, 0x95, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x9f, 0x20, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x01, 0x3f, 0xff,
0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf,
0x60, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x3f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0x40, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x01,
0x3f, 0xff, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x5f, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3f, 0xff, 0x96, 0xb0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xdf, 0x30, 0x00, 0x00, 0x00, 0x00,
0x00, 0x02, 0x3f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xdf, 0x17, 0xff, 0xff, 0xff, 0xfb, 0xbd, 0xec, 0x3f, 0xff, 0x90, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x1f, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x92, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xca, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb1,
0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x9f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x86, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28,
0x5f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x92, 0xb0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xdf, 0x1b, 0x76, 0xed, 0xdb, 0xb7, 0x6e,
0xdc, 0x3f, 0xff, 0x96, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x59, 0x5f, 0x0d, 0xad, 0xb6, 0xb6, 0xda, 0xdb, 0x6a, 0x3f, 0xff, 0xbf, 0xf0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0x70, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0x3f, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x42, 0x1f, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3f, 0xff, 0x95, 0xa0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x9f, 0x67, 0x00,
0xf8, 0x43, 0x9f, 0xe3, 0xe1, 0x3f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0x47, 0x00, 0x30, 0x73, 0x9c, 0x07, 0x01, 0x3f, 0xff,
0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf,
0x67, 0x00, 0x30, 0x73, 0x9c, 0x07, 0x01, 0x3f, 0xff, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x5f, 0x27, 0x00, 0x30, 0x7b, 0x9f, 0x83, 0xe1,
0x3f, 0xff, 0x96, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xdf, 0x67, 0x00, 0x30, 0x4f, 0x9c, 0x00, 0x79, 0x3f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0x47, 0x00, 0x30, 0x47, 0x9c,
0x04, 0x79, 0x3f, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x42, 0x1f, 0x67, 0xf8, 0xf8, 0x43, 0x9f, 0xe3, 0xe1, 0x3f, 0xff, 0x92, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0x1f, 0x27, 0xf8, 0xf8,
0x43, 0x9f, 0xe3, 0xe1, 0x3f, 0xff, 0xb1, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x46, 0x9f, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3f, 0xff, 0xbf,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0x40,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3f, 0xff, 0x86, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x5f, 0x60, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x3f,
0xff, 0x92, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a,
0xdf, 0x20, 0x00, 0x00, 0x00, 0x1c, 0xe0, 0x01, 0x3f, 0xff, 0x96, 0x50, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x5f, 0x60, 0x00, 0x00, 0x00, 0x1c, 0xe0,
0x01, 0x3f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0xdf, 0x40, 0x00, 0x00, 0x00, 0x1c, 0xe0, 0x01, 0x3f, 0xff, 0x90, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x1f, 0x60, 0x00, 0x00, 0x00,
0x1c, 0xe0, 0x01, 0x3f, 0xff, 0x95, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xd6, 0x9f, 0x20, 0x00, 0x00, 0x00, 0x1c, 0xe0, 0x01, 0x3f, 0xff, 0xbf, 0xf0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0x60, 0x00,
0x00, 0x00, 0x0f, 0x80, 0x01, 0x3f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0x40, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x3f, 0xff,
0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x5f,
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3f, 0xff, 0x96, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xdf, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x3f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xdf, 0x17, 0xff, 0xff, 0xff, 0xfb, 0xbd, 0xec, 0x3f, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0x92, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xca, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb1, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x9f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x86,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x5f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x96, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59,
0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x42, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x95, 0xa0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x9f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x5f, 0xff, 0xc9, 0x24, 0x92, 0x49, 0x24, 0x92, 0x7f, 0xff,
0x96, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xdf,
0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0x17, 0xff, 0xff, 0xff, 0xff, 0xfe,
0x0f, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x42, 0x1f, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xff, 0x92, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0x1f, 0xff, 0x2f, 0xff, 0xff, 0xff,
0xff, 0xfe, 0x1f, 0xff, 0xb1, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x46, 0x9f, 0xff, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xff, 0xbf, 0xf0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0x38, 0x00,
0x00, 0x00, 0x00, 0x01, 0x9f, 0xff, 0x86, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x28, 0x5f, 0xff, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xff, 0x92,
0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xdf, 0xff,
0x18, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4f, 0xff, 0x96, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x5f, 0xff, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf,
0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
0xdf, 0xff, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4f, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x1f, 0xff, 0x38, 0x00, 0x00, 0x00, 0x00,
0x01, 0xcf, 0xff, 0x95, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xd6, 0x9f, 0xff, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4f, 0xff, 0xbf, 0xf0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0x38, 0x00, 0x00,
0x00, 0x00, 0x01, 0xcf, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0x98, 0x00, 0x00, 0x00, 0x00, 0x01, 0x9f, 0xff, 0x82, 0x10,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x5f, 0xff, 0x38,
0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xff, 0x96, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xdf, 0xff, 0x3b, 0xff, 0xff, 0xc0, 0x00, 0x01, 0x4f, 0xff,
0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf,
0xff, 0xba, 0x49, 0x92, 0x40, 0x00, 0x01, 0x9f, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x1f, 0xff, 0x3b, 0x25, 0xc9, 0x40, 0x00, 0x01,
0xcf, 0xff, 0x92, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xca, 0x1f, 0xff, 0x3a, 0x93, 0xa4, 0xc0, 0x00, 0x01, 0x4f, 0xff, 0xb1, 0xa0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x9f, 0xff, 0x3a, 0x75, 0x9d, 0x40,
0x00, 0x01, 0xcf, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xdf, 0xff, 0x9b, 0x31, 0xac, 0x40, 0x00, 0x01, 0x9f, 0xff, 0x86, 0x10, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x5f, 0xff, 0x3a, 0x4b,
0x85, 0x40, 0x00, 0x01, 0xcf, 0xff, 0x92, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x8a, 0xdf, 0xff, 0x3a, 0xa5, 0xd2, 0xc0, 0x00, 0x01, 0x4f, 0xff, 0x96,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x5f, 0xff,
0xba, 0x13, 0x94, 0x40, 0x00, 0x01, 0x9f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0x3b, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xcf,
0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
0x1f, 0xff, 0x38, 0x00, 0xff, 0xff, 0xf0, 0x01, 0x4f, 0xff, 0x95, 0xa0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x9f, 0xff, 0x38, 0x00, 0x82, 0x64, 0x90,
0x01, 0xcf, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0xdf, 0xff, 0x98, 0x00, 0xd9, 0x72, 0x50, 0x01, 0x9f, 0xff, 0xbf, 0xf0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0x38, 0x00, 0x84,
0xe9, 0x30, 0x01, 0xcf, 0xff, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x08, 0x5f, 0xff, 0x38, 0x00, 0xad, 0x67, 0x50, 0x01, 0x4f, 0xff, 0x96, 0xb0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xdf, 0xff, 0xb8,
0x00, 0xac, 0x6b, 0x10, 0x01, 0x9f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0x38, 0x00, 0x92, 0xe1, 0x50, 0x01, 0xcf, 0xff,
0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x1f,
0xff, 0x38, 0x00, 0xca, 0x74, 0xb0, 0x01, 0x4f, 0xff, 0x92, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0x1f, 0xff, 0x38, 0x00, 0xa1, 0x65, 0x10, 0x01,
0xcf, 0xff, 0xb1, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x46, 0x9f, 0xff, 0x98, 0x00, 0xff, 0xff, 0xf0, 0x01, 0x9f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0x38, 0x00, 0x00, 0x00,
0x00, 0x01, 0xcf, 0xff, 0x86, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x28, 0x5f, 0xff, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4f, 0xff, 0x92, 0xb0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xdf, 0xff, 0xb8, 0x00,
0x00, 0x00, 0x00, 0x01, 0x9f, 0xff, 0x96, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x59, 0x5f, 0xff, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xff, 0xbf,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff,
0x38, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4f, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x1f, 0xff, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf,
0xff, 0x95, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6,
0x9f, 0xff, 0x98, 0x00, 0x00, 0x00, 0x00, 0x01, 0x9f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0x38, 0x00, 0x00, 0x00, 0x00,
0x01, 0xcf, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0xdf, 0xff, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4f, 0xff, 0x82, 0x10, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x5f, 0xff, 0xb8, 0x00, 0x00,
0x00, 0x00, 0x01, 0x9f, 0xff, 0x96, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xaa, 0xdf, 0xff, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xff, 0xbf, 0xf0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0x17,
0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x1f, 0xff, 0x0d, 0xbb, 0x76, 0xed, 0xdb, 0xb6, 0x1f, 0xff,
0x92, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0x1f,
0xff, 0x86, 0xd6, 0xdb, 0x5b, 0x6d, 0x6c, 0x0f, 0xff, 0xb1, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x9f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xdf, 0xff, 0xd5, 0x2a, 0x49, 0x54, 0x95, 0x2a, 0xbf, 0xff, 0x86, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x92, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x8a, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0x50, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x5f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x96, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa,
0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x42, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0x1f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xb1, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x46, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x86, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x92, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xdf,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

View File

@ -1,76 +0,0 @@
{
"watchfaces" : [
{
"id" : "1",
"name" : "Basic",
"author" : "SQFMI",
"screenshot" : "https://raw.githubusercontent.com/sqfmi/Watchy/master/extras/WatchFaces/1_Basic.png",
"source" : "https://github.com/sqfmi/Watchy/tree/master/examples/WatchFaces/Basic",
"version" : "1.0.0"
},
{
"id" : "2",
"name" : "7_SEG",
"author" : "SQFMI",
"screenshot" : "https://raw.githubusercontent.com/sqfmi/Watchy/master/extras/WatchFaces/2_7_SEG.png",
"source" : "https://github.com/sqfmi/Watchy/tree/master/examples/WatchFaces/7_SEG",
"version" : "1.0.0"
},
{
"id" : "2A",
"name" : "7_SEG_LIGHT",
"author" : "SQFMI",
"screenshot" : "https://raw.githubusercontent.com/sqfmi/Watchy/master/extras/WatchFaces/2_7_SEG_LIGHT.png",
"source" : "https://github.com/sqfmi/Watchy/tree/master/examples/WatchFaces/7_SEG",
"version" : "1.0.0"
},
{
"id" : "3",
"name" : "DOS",
"author" : "SQFMI",
"screenshot" : "https://raw.githubusercontent.com/sqfmi/Watchy/master/extras/WatchFaces/3_DOS.png",
"source" : "https://github.com/sqfmi/Watchy/tree/master/examples/WatchFaces/DOS",
"version" : "1.0.0"
},
{
"id" : "4",
"name" : "Pokemon",
"author" : "SQFMI",
"screenshot" : "https://raw.githubusercontent.com/sqfmi/Watchy/master/extras/WatchFaces/4_Pokemon.png",
"source" : "https://github.com/sqfmi/Watchy/tree/master/examples/WatchFaces/Pokemon",
"version" : "1.0.0"
},
{
"id" : "5",
"name" : "StarryHorizon",
"author" : "dandelany",
"screenshot" : "https://raw.githubusercontent.com/sqfmi/Watchy/master/extras/WatchFaces/5_StarryHorizon.png",
"source" : "https://github.com/sqfmi/Watchy/tree/master/examples/WatchFaces/StarryHorizon",
"version" : "1.0.0"
},
{
"id" : "6",
"name" : "Tetris",
"author" : "SQFMI",
"screenshot" : "https://raw.githubusercontent.com/sqfmi/Watchy/master/extras/WatchFaces/6_Tetris.png",
"source" : "https://github.com/sqfmi/Watchy/tree/master/examples/WatchFaces/Tetris",
"version" : "1.0.0"
},
{
"id" : "7",
"name" : "MacPaint",
"author" : "SQFMI",
"screenshot" : "https://raw.githubusercontent.com/sqfmi/Watchy/master/extras/WatchFaces/7_MacPaint.png",
"source" : "https://github.com/sqfmi/Watchy/tree/master/examples/WatchFaces/MacPaint",
"version" : "1.0.0"
},
{
"id" : "8",
"name" : "Bahn",
"author" : "BraininaBowl",
"screenshot" : "https://raw.githubusercontent.com/sqfmi/Watchy/master/extras/WatchFaces/8_Bahn.png",
"source" : "https://github.com/BraininaBowl/Bahn-for-Watchy",
"version" : "1.0.0"
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 B

View File

@ -1,36 +0,0 @@
{
"name": "Watchy",
"version": "1.4.10",
"description": "Watchy - An Open Source E-Paper Watch by SQFMI",
"authors": [
{
"name": "SQFMI",
"url": "https://github.com/sqfmi"
}
],
"homepage": "https://watchy.sqfmi.com",
"repository": {
"type": "git",
"url": "https://github.com/sqfmi/Watchy.git"
},
"frameworks": "arduino",
"platforms": ["espressif32"],
"dependencies": [
{ "name": "Adafruit GFX Library" },
{ "name": "Arduino_JSON" },
{ "name": "DS3232RTC" },
{ "name": "NTPClient" },
{
"name": "Rtc_Pcf8563",
"version": "https://github.com/orbitalair/Rtc_Pcf8563.git#master"
},
{
"name": "GxEPD2",
"version": "https://github.com/ZinggJM/GxEPD2.git#master"
},
{
"name": "WiFiManager",
"version": "https://github.com/tzapu/WiFiManager.git#2.0.3-alpha"
}
]
}

View File

@ -1,5 +1,5 @@
name=Watchy
version=1.4.10
version=1.1.7
author=SQFMI
maintainer=SQFMI
sentence=Watchy - An Open Source E-Paper Watch by SQFMI
@ -7,4 +7,4 @@ paragraph=This library contains drivers and code samples for Watchy
category=Other
url=https://watchy.sqfmi.com
architectures=esp32
depends=Adafruit GFX Library,Arduino_JSON,DS3232RTC,NTPClient,Rtc_Pcf8563,GxEPD2,WiFiManager
depends=Adafruit GFX Library,Arduino_JSON,DS3232RTC,GxEPD2,WiFiManager

View File

@ -1,85 +1,99 @@
#include "BLE.h"
#define SERVICE_UUID_ESPOTA "cd77498e-1ac8-48b6-aba8-4161c7342fce"
#define CHARACTERISTIC_UUID_ID "cd77498f-1ac8-48b6-aba8-4161c7342fce"
#define SERVICE_UUID_ESPOTA "cd77498e-1ac8-48b6-aba8-4161c7342fce"
#define CHARACTERISTIC_UUID_ID "cd77498f-1ac8-48b6-aba8-4161c7342fce"
#define SERVICE_UUID_OTA "86b12865-4b70-4893-8ce6-9864fc00374d"
#define CHARACTERISTIC_UUID_FW "86b12866-4b70-4893-8ce6-9864fc00374d"
#define CHARACTERISTIC_UUID_HW_VERSION "86b12867-4b70-4893-8ce6-9864fc00374d"
#define CHARACTERISTIC_UUID_WATCHFACE_NAME \
"86b12868-4b70-4893-8ce6-9864fc00374d"
#define SERVICE_UUID_OTA "86b12865-4b70-4893-8ce6-9864fc00374d"
#define CHARACTERISTIC_UUID_FW "86b12866-4b70-4893-8ce6-9864fc00374d"
#define CHARACTERISTIC_UUID_HW_VERSION "86b12867-4b70-4893-8ce6-9864fc00374d"
#define CHARACTERISTIC_UUID_WATCHFACE_NAME "86b12868-4b70-4893-8ce6-9864fc00374d"
#define FULL_PACKET 512
#define FULL_PACKET 512
#define CHARPOS_UPDATE_FLAG 5
#define STATUS_CONNECTED 0
#define STATUS_CONNECTED 0
#define STATUS_DISCONNECTED 4
#define STATUS_UPDATING 1
#define STATUS_READY 2
#define STATUS_UPDATING 1
#define STATUS_READY 2
esp_ota_handle_t otaHandler = 0;
int status = -1;
int status = -1;
int bytesReceived = 0;
bool updateFlag = false;
bool updateFlag = false;
class BLECustomServerCallbacks : public BLEServerCallbacks {
void onConnect(BLEServer *pServer) { status = STATUS_CONNECTED; };
void onDisconnect(BLEServer *pServer) { status = STATUS_DISCONNECTED; }
class BLECustomServerCallbacks: public BLEServerCallbacks {
void onConnect(BLEServer* pServer) {
status = STATUS_CONNECTED;
};
void onDisconnect(BLEServer* pServer) {
status = STATUS_DISCONNECTED;
}
};
class otaCallback : public BLECharacteristicCallbacks {
public:
otaCallback(BLE *ble) { _p_ble = ble; }
BLE *_p_ble;
class otaCallback: public BLECharacteristicCallbacks {
public:
otaCallback(BLE* ble) {
_p_ble = ble;
}
BLE* _p_ble;
void onWrite(BLECharacteristic *pCharacteristic);
void onWrite(BLECharacteristic *pCharacteristic);
};
void otaCallback::onWrite(BLECharacteristic *pCharacteristic) {
void otaCallback::onWrite(BLECharacteristic *pCharacteristic)
{
std::string rxData = pCharacteristic->getValue();
if (!updateFlag) { // If it's the first packet of OTA since bootup, begin OTA
// Serial.println("Begin FW Update");
esp_ota_begin(esp_ota_get_next_update_partition(NULL), OTA_SIZE_UNKNOWN,
&otaHandler);
if (!updateFlag) { //If it's the first packet of OTA since bootup, begin OTA
//Serial.println("Begin FW Update");
esp_ota_begin(esp_ota_get_next_update_partition(NULL), OTA_SIZE_UNKNOWN, &otaHandler);
updateFlag = true;
status = STATUS_UPDATING;
status = STATUS_UPDATING;
}
if (_p_ble != NULL) {
if (rxData.length() > 0) {
if (_p_ble != NULL)
{
if (rxData.length() > 0)
{
esp_ota_write(otaHandler, rxData.c_str(), rxData.length());
bytesReceived = bytesReceived + rxData.length();
if (rxData.length() != FULL_PACKET) {
if (rxData.length() != FULL_PACKET)
{
esp_ota_end(otaHandler);
// Serial.println("End FW Update");
if (ESP_OK == esp_ota_set_boot_partition(
esp_ota_get_next_update_partition(NULL))) {
//Serial.println("End FW Update");
if (ESP_OK == esp_ota_set_boot_partition(esp_ota_get_next_update_partition(NULL))) {
status = STATUS_READY;
} else {
// Serial.println("Upload Error");
}
else {
//Serial.println("Upload Error");
}
}
}
}
uint8_t txData[5] = {1, 2, 3, 4, 5};
// delay(1000);
pCharacteristic->setValue((uint8_t *)txData, 5);
//delay(1000);
pCharacteristic->setValue((uint8_t*)txData, 5);
pCharacteristic->notify();
}
//
// Constructor
BLE::BLE(void) {}
BLE::BLE(void) {
}
//
// Destructor
BLE::~BLE(void) {}
BLE::~BLE(void)
{
}
//
// begin
bool BLE::begin(const char *localName = "Watchy BLE OTA") {
bool BLE::begin(const char* localName = "Watchy BLE OTA") {
// Create the BLE Device
BLEDevice::init(localName);
@ -89,21 +103,28 @@ bool BLE::begin(const char *localName = "Watchy BLE OTA") {
// Create the BLE Service
pESPOTAService = pServer->createService(SERVICE_UUID_ESPOTA);
pService = pServer->createService(SERVICE_UUID_OTA);
pService = pServer->createService(SERVICE_UUID_OTA);
// Create a BLE Characteristic
pESPOTAIdCharacteristic = pESPOTAService->createCharacteristic(
CHARACTERISTIC_UUID_ID, BLECharacteristic::PROPERTY_READ);
CHARACTERISTIC_UUID_ID,
BLECharacteristic::PROPERTY_READ
);
pVersionCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID_HW_VERSION, BLECharacteristic::PROPERTY_READ);
CHARACTERISTIC_UUID_HW_VERSION,
BLECharacteristic::PROPERTY_READ
);
pWatchFaceNameCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID_WATCHFACE_NAME, BLECharacteristic::PROPERTY_READ);
CHARACTERISTIC_UUID_WATCHFACE_NAME,
BLECharacteristic::PROPERTY_READ
);
pOtaCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID_FW,
BLECharacteristic::PROPERTY_NOTIFY | BLECharacteristic::PROPERTY_WRITE);
CHARACTERISTIC_UUID_FW,
BLECharacteristic::PROPERTY_NOTIFY | BLECharacteristic::PROPERTY_WRITE
);
pOtaCharacteristic->addDescriptor(new BLE2902());
pOtaCharacteristic->setCallbacks(new otaCallback(this));
@ -116,15 +137,17 @@ bool BLE::begin(const char *localName = "Watchy BLE OTA") {
pServer->getAdvertising()->addServiceUUID(SERVICE_UUID_ESPOTA);
pServer->getAdvertising()->start();
uint8_t hardwareVersion[5] = {HARDWARE_VERSION_MAJOR, HARDWARE_VERSION_MINOR,
SOFTWARE_VERSION_MAJOR, SOFTWARE_VERSION_MINOR,
SOFTWARE_VERSION_PATCH};
pVersionCharacteristic->setValue((uint8_t *)hardwareVersion, 5);
uint8_t hardwareVersion[5] = {HARDWARE_VERSION_MAJOR, HARDWARE_VERSION_MINOR, SOFTWARE_VERSION_MAJOR, SOFTWARE_VERSION_MINOR, SOFTWARE_VERSION_PATCH};
pVersionCharacteristic->setValue((uint8_t*)hardwareVersion, 5);
pWatchFaceNameCharacteristic->setValue("Watchy 7 Segment");
return true;
}
int BLE::updateStatus() { return status; }
int BLE::updateStatus(){
return status;
}
int BLE::howManyBytes() { return bytesReceived; }
int BLE::howManyBytes(){
return bytesReceived;
}

View File

@ -3,10 +3,10 @@
#include "Arduino.h"
#include <BLE2902.h>
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
#include "esp_ota_ops.h"
@ -14,27 +14,29 @@
class BLE;
class BLE {
public:
BLE(void);
~BLE(void);
class BLE
{
public:
bool begin(const char *localName);
int updateStatus();
int howManyBytes();
BLE(void);
~BLE(void);
private:
String local_name;
bool begin(const char* localName);
int updateStatus();
int howManyBytes();
BLEServer *pServer = NULL;
private:
String local_name;
BLEService *pESPOTAService = NULL;
BLECharacteristic *pESPOTAIdCharacteristic = NULL;
BLEServer *pServer = NULL;
BLEService *pService = NULL;
BLECharacteristic *pVersionCharacteristic = NULL;
BLECharacteristic *pOtaCharacteristic = NULL;
BLECharacteristic *pWatchFaceNameCharacteristic = NULL;
BLEService *pESPOTAService = NULL;
BLECharacteristic * pESPOTAIdCharacteristic = NULL;
BLEService *pService = NULL;
BLECharacteristic * pVersionCharacteristic = NULL;
BLECharacteristic * pOtaCharacteristic = NULL;
BLECharacteristic * pWatchFaceNameCharacteristic = NULL;
};
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,502 +0,0 @@
// Display Library for SPI e-paper panels from Dalian Good Display and boards from Waveshare.
// Requires HW SPI and Adafruit_GFX. Caution: the e-paper panels require 3.3V supply AND data lines!
//
// based on Demo Example from Good Display, available here: http://www.e-paper-display.com/download_detail/downloadsId=806.html
// Panel: GDEH0154D67 : http://www.e-paper-display.com/products_detail/productId=455.html
// Controller : SSD1681 : http://www.e-paper-display.com/download_detail/downloadsId=825.html
//
// Author: Jean-Marc Zingg
//
// Version: see library.properties
//
// Library: https://github.com/ZinggJM/GxEPD2
//
// The original code from the author has been slightly modified to improve the performance for Watchy Project:
// Link: https://github.com/sqfmi/Watchy
#include "Display.h"
#include "config.h"
RTC_DATA_ATTR bool displayFullInit = true;
void WatchyDisplay::busyCallback(const void *) {
gpio_wakeup_enable((gpio_num_t)DISPLAY_BUSY, GPIO_INTR_LOW_LEVEL);
esp_sleep_enable_gpio_wakeup();
esp_light_sleep_start();
}
WatchyDisplay::WatchyDisplay() :
GxEPD2_EPD(DISPLAY_CS, DISPLAY_DC, DISPLAY_RES, DISPLAY_BUSY, HIGH, 10000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate)
{
// Setup callback and SPI by default
selectSPI(SPI, SPISettings(20000000, MSBFIRST, SPI_MODE0));
setBusyCallback(busyCallback);
}
void WatchyDisplay::initWatchy() {
// Watchy default initialization
init(0, displayFullInit, 2, true);
}
void WatchyDisplay::asyncPowerOn() {
// This is expensive if unused
if (!waitingPowerOn && !_hibernating) {
_InitDisplay();
_PowerOnAsync();
}
}
void WatchyDisplay::setDarkBorder(bool dark) {
if (_hibernating) return;
darkBorder = dark;
_startTransfer();
_transferCommand(0x3C); // BorderWavefrom
_transfer(dark ? 0x02 : 0x05);
_endTransfer();
}
void WatchyDisplay::clearScreen(uint8_t value)
{
writeScreenBuffer(value);
refresh(true);
writeScreenBufferAgain(value);
}
void WatchyDisplay::writeScreenBuffer(uint8_t value)
{
if (!_using_partial_mode) _Init_Part();
if (_initial_write) _writeScreenBuffer(0x26, value); // set previous
_writeScreenBuffer(0x24, value); // set current
_initial_write = false; // initial full screen buffer clean done
}
void WatchyDisplay::writeScreenBufferAgain(uint8_t value)
{
if (!_using_partial_mode) _Init_Part();
_writeScreenBuffer(0x24, value); // set current
}
void WatchyDisplay::_writeScreenBuffer(uint8_t command, uint8_t value)
{
_startTransfer();
_transferCommand(command);
for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 8; i++)
{
_transfer(value);
}
_endTransfer();
}
void WatchyDisplay::writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
{
_writeImage(0x24, bitmap, x, y, w, h, invert, mirror_y, pgm);
}
void WatchyDisplay::writeImageForFullRefresh(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
{
_writeImage(0x26, bitmap, x, y, w, h, invert, mirror_y, pgm);
_writeImage(0x24, bitmap, x, y, w, h, invert, mirror_y, pgm);
}
void WatchyDisplay::writeImageAgain(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
{
_writeImage(0x24, bitmap, x, y, w, h, invert, mirror_y, pgm);
}
void WatchyDisplay::_writeImage(uint8_t command, const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
{
if (_initial_write) writeScreenBuffer(); // initial full screen buffer clean
#if defined(ESP8266) || defined(ESP32)
yield(); // avoid wdt
#endif
int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded
x -= x % 8; // byte boundary
w = wb * 8; // byte boundary
int16_t x1 = x < 0 ? 0 : x; // limit
int16_t y1 = y < 0 ? 0 : y; // limit
int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit
int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit
int16_t dx = x1 - x;
int16_t dy = y1 - y;
w1 -= dx;
h1 -= dy;
if ((w1 <= 0) || (h1 <= 0)) return;
if (!_using_partial_mode) _Init_Part();
_setPartialRamArea(x1, y1, w1, h1);
_startTransfer();
_transferCommand(command);
for (int16_t i = 0; i < h1; i++)
{
for (int16_t j = 0; j < w1 / 8; j++)
{
uint8_t data;
// use wb, h of bitmap for index!
int16_t idx = mirror_y ? j + dx / 8 + ((h - 1 - (i + dy))) * wb : j + dx / 8 + (i + dy) * wb;
if (pgm)
{
#if defined(__AVR) || defined(ESP8266) || defined(ESP32)
data = pgm_read_byte(&bitmap[idx]);
#else
data = bitmap[idx];
#endif
}
else
{
data = bitmap[idx];
}
if (invert) data = ~data;
_transfer(data);
}
}
_endTransfer();
#if defined(ESP8266) || defined(ESP32)
yield(); // avoid wdt
#endif
}
void WatchyDisplay::writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
{
_writeImagePart(0x24, bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
}
void WatchyDisplay::writeImagePartAgain(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
{
_writeImagePart(0x24, bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
}
void WatchyDisplay::_writeImagePart(uint8_t command, const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
{
if (_initial_write) writeScreenBuffer(); // initial full screen buffer clean
#if defined(ESP8266) || defined(ESP32)
yield(); // avoid wdt
#endif
if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return;
if ((x_part < 0) || (x_part >= w_bitmap)) return;
if ((y_part < 0) || (y_part >= h_bitmap)) return;
int16_t wb_bitmap = (w_bitmap + 7) / 8; // width bytes, bitmaps are padded
x_part -= x_part % 8; // byte boundary
w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit
h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit
x -= x % 8; // byte boundary
w = 8 * ((w + 7) / 8); // byte boundary, bitmaps are padded
int16_t x1 = x < 0 ? 0 : x; // limit
int16_t y1 = y < 0 ? 0 : y; // limit
int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit
int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit
int16_t dx = x1 - x;
int16_t dy = y1 - y;
w1 -= dx;
h1 -= dy;
if ((w1 <= 0) || (h1 <= 0)) return;
if (!_using_partial_mode) _Init_Part();
_setPartialRamArea(x1, y1, w1, h1);
_startTransfer();
_transferCommand(command);
for (int16_t i = 0; i < h1; i++)
{
for (int16_t j = 0; j < w1 / 8; j++)
{
uint8_t data;
// use wb_bitmap, h_bitmap of bitmap for index!
int16_t idx = mirror_y ? x_part / 8 + j + dx / 8 + ((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 8 + j + dx / 8 + (y_part + i + dy) * wb_bitmap;
if (pgm)
{
#if defined(__AVR) || defined(ESP8266) || defined(ESP32)
data = pgm_read_byte(&bitmap[idx]);
#else
data = bitmap[idx];
#endif
}
else
{
data = bitmap[idx];
}
if (invert) data = ~data;
_transfer(data);
}
}
_endTransfer();
#if defined(ESP8266) || defined(ESP32)
yield(); // avoid wdt
#endif
}
void WatchyDisplay::writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
{
if (black)
{
writeImage(black, x, y, w, h, invert, mirror_y, pgm);
}
}
void WatchyDisplay::writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
{
if (black)
{
writeImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
}
}
void WatchyDisplay::writeNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
{
if (data1)
{
writeImage(data1, x, y, w, h, invert, mirror_y, pgm);
}
}
void WatchyDisplay::drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
{
writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm);
refresh(x, y, w, h);
writeImageAgain(bitmap, x, y, w, h, invert, mirror_y, pgm);
}
void WatchyDisplay::drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
{
writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
refresh(x, y, w, h);
writeImagePartAgain(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
}
void WatchyDisplay::drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
{
if (black)
{
drawImage(black, x, y, w, h, invert, mirror_y, pgm);
}
}
void WatchyDisplay::drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
{
if (black)
{
drawImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
}
}
void WatchyDisplay::drawNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
{
if (data1)
{
drawImage(data1, x, y, w, h, invert, mirror_y, pgm);
}
}
void WatchyDisplay::refresh(bool partial_update_mode)
{
if (partial_update_mode) refresh(0, 0, WIDTH, HEIGHT);
else
{
if (_using_partial_mode) _Init_Full();
_Update_Full();
_initial_refresh = false; // initial full update done
}
}
void WatchyDisplay::refresh(int16_t x, int16_t y, int16_t w, int16_t h)
{
if (_initial_refresh) return refresh(false); // initial update needs be full update
// intersection with screen
int16_t w1 = x < 0 ? w + x : w; // reduce
int16_t h1 = y < 0 ? h + y : h; // reduce
int16_t x1 = x < 0 ? 0 : x; // limit
int16_t y1 = y < 0 ? 0 : y; // limit
w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit
h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit
if ((w1 <= 0) || (h1 <= 0)) return;
// make x1, w1 multiple of 8
w1 += x1 % 8;
if (w1 % 8 > 0) w1 += 8 - w1 % 8;
x1 -= x1 % 8;
if (!_using_partial_mode) _Init_Part();
_setPartialRamArea(x1, y1, w1, h1);
_Update_Part();
}
void WatchyDisplay::powerOff()
{
_PowerOff();
}
void WatchyDisplay::hibernate()
{
//_PowerOff(); // Not needed before entering deep sleep
if (_rst >= 0)
{
_writeCommand(0x10); // deep sleep mode
_writeData(0x1); // enter deep sleep
_hibernating = true;
}
}
void WatchyDisplay::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h)
{
_startTransfer();
_transferCommand(0x11); // set ram entry mode
_transfer(0x03); // x increase, y increase : normal mode
_transferCommand(0x44);
_transfer(x / 8);
_transfer((x + w - 1) / 8);
_transferCommand(0x45);
_transfer(y % 256);
_transfer(y / 256);
_transfer((y + h - 1) % 256);
_transfer((y + h - 1) / 256);
_transferCommand(0x4e);
_transfer(x / 8);
_transferCommand(0x4f);
_transfer(y % 256);
_transfer(y / 256);
_endTransfer();
}
void WatchyDisplay::_PowerOnAsync()
{
if (_power_is_on)
return;
_startTransfer();
_transferCommand(0x22);
_transfer(0xf8);
_transferCommand(0x20);
_endTransfer();
waitingPowerOn = true;
_power_is_on = true;
}
void WatchyDisplay::_PowerOn()
{
if (waitingPowerOn)
{
waitingPowerOn = false;
_waitWhileBusy("_PowerOn", power_on_time);
}
if (_power_is_on)
return;
_startTransfer();
_transferCommand(0x22);
_transfer(0xf8);
_transferCommand(0x20);
_endTransfer();
_waitWhileBusy("_PowerOn", power_on_time);
_power_is_on = true;
}
void WatchyDisplay::_PowerOff()
{
if (waitingPowerOn)
{
waitingPowerOn = false;
_waitWhileBusy("_PowerOn", power_on_time);
}
if (!_power_is_on)
return;
_startTransfer();
_transferCommand(0x22);
_transfer(0x83);
_transferCommand(0x20);
_endTransfer();
_waitWhileBusy("_PowerOff", power_off_time);
_power_is_on = false;
_using_partial_mode = false;
}
void WatchyDisplay::_InitDisplay()
{
if (_hibernating) _reset();
// No need to soft reset, the Display goes to same state after hard reset
// _writeCommand(0x12); // soft reset
// _waitWhileBusy("_SoftReset", 10); // 10ms max according to specs*/
_startTransfer();
_transferCommand(0x01); // Driver output control
_transfer(0xC7);
_transfer(0x00);
_transfer(0x00);
if (reduceBoosterTime) {
// SSD1675B controller datasheet
_transferCommand(0x0C); // BOOSTER_SOFT_START_CONTROL
// Set the driving strength of GDR for all phases to maximun 0b111 -> 0xF
// Set the minimum off time of GDR to minimum 0x4 (values below sould be same)
_transfer(0xF4); // Phase1 Default value 0x8B
_transfer(0xF4); // Phase2 Default value 0x9C
_transfer(0xF4); // Phase3 Default value 0x96
_transfer(0x00); // Duration of phases, Default 0xF = 0b00 11 11 (40ms Phase 1/2, 10ms Phase 3)
}
_transferCommand(0x18); // Read built-in temperature sensor
_transfer(0x80);
_endTransfer();
setDarkBorder(darkBorder);
_setPartialRamArea(0, 0, WIDTH, HEIGHT);
}
void WatchyDisplay::_reset()
{
// Call default method if not configured the same way
if (_rst < 0 || !_pulldown_rst_mode) {
GxEPD2_EPD::_reset();
return;
}
digitalWrite(_rst, LOW);
pinMode(_rst, OUTPUT);
delay(_reset_duration);
pinMode(_rst, INPUT_PULLUP);
// Tested calling _powerOn() inmediately, and works ok, no need to sleep
// delay(_reset_duration > 10 ? _reset_duration : 0);
_hibernating = false;
}
void WatchyDisplay::_Init_Full()
{
_InitDisplay();
_PowerOn();
_using_partial_mode = false;
}
void WatchyDisplay::_Init_Part()
{
_InitDisplay();
_PowerOn();
_using_partial_mode = true;
}
void WatchyDisplay::_Update_Full()
{
_startTransfer();
_transferCommand(0x22);
_transfer(0xf4);
_transferCommand(0x20);
_endTransfer();
_waitWhileBusy("_Update_Full", full_refresh_time);
displayFullInit = false;
}
void WatchyDisplay::_Update_Part()
{
_startTransfer();
_transferCommand(0x22);
//_transfer(0xcc); // skip temperature load (-5ms)
_transfer(0xfc);
_transferCommand(0x20);
_endTransfer();
_waitWhileBusy("_Update_Part", partial_refresh_time);
}
void WatchyDisplay::_transferCommand(uint8_t value)
{
if (_dc >= 0) digitalWrite(_dc, LOW);
SPI.transfer(value);
if (_dc >= 0) digitalWrite(_dc, HIGH);
}

View File

@ -1,97 +0,0 @@
// Display Library for SPI e-paper panels from Dalian Good Display and boards from Waveshare.
// Requires HW SPI and Adafruit_GFX. Caution: the e-paper panels require 3.3V supply AND data lines!
//
// based on Demo Example from Good Display, available here: http://www.e-paper-display.com/download_detail/downloadsId=806.html
// Panel: GDEH0154D67 : http://www.e-paper-display.com/products_detail/productId=455.html
// Controller : SSD1681 : http://www.e-paper-display.com/download_detail/downloadsId=825.html
//
// Author: Jean-Marc Zingg
//
// Version: see library.properties
//
// Library: https://github.com/ZinggJM/GxEPD2
//
// The original code from the author has been slightly modified to improve the performance for Watchy Project:
// Link: https://github.com/sqfmi/Watchy
#pragma once
#include <GxEPD2_EPD.h>
class WatchyDisplay : public GxEPD2_EPD
{
public:
// attributes
static const uint16_t WIDTH = 200;
static const uint16_t WIDTH_VISIBLE = WIDTH;
static const uint16_t HEIGHT = 200;
static const GxEPD2::Panel panel = GxEPD2::GDEH0154D67;
static const bool hasColor = false;
static const bool hasPartialUpdate = true;
static const bool hasFastPartialUpdate = true;
static const uint16_t power_on_time = 100; // ms, e.g. 95583us
static const uint16_t power_off_time = 150; // ms, e.g. 140621us
static const uint16_t full_refresh_time = 2600; // ms, e.g. 2509602us
static const uint16_t partial_refresh_time = 500; // ms, e.g. 457282us
// constructor
WatchyDisplay();
void initWatchy();
void setDarkBorder(bool darkBorder);
void asyncPowerOn();
void _PowerOnAsync();
bool waitingPowerOn = false;
static void busyCallback(const void *);
// methods (virtual)
// Support for Bitmaps (Sprites) to Controller Buffer and to Screen
void clearScreen(uint8_t value = 0xFF); // init controller memory and screen (default white)
void writeScreenBuffer(uint8_t value = 0xFF); // init controller memory (default white)
void writeScreenBufferAgain(uint8_t value = 0xFF); // init previous buffer controller memory (default white)
// write to controller memory, without screen refresh; x and w should be multiple of 8
void writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false);
void writeImageForFullRefresh(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false);
void writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false);
void writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false);
void writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false);
// for differential update: set current and previous buffers equal (for fast partial update to work correctly)
void writeImageAgain(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false);
void writeImagePartAgain(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false);
// write sprite of native data to controller memory, without screen refresh; x and w should be multiple of 8
void writeNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false);
// write to controller memory, with screen refresh; x and w should be multiple of 8
void drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false);
void drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false);
void drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false);
void drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false);
// write sprite of native data to controller memory, with screen refresh; x and w should be multiple of 8
void drawNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false);
void refresh(bool partial_update_mode = false); // screen refresh from controller memory to full screen
void refresh(int16_t x, int16_t y, int16_t w, int16_t h); // screen refresh from controller memory, partial screen
void powerOff(); // turns off generation of panel driving voltages, avoids screen fading over time
void hibernate(); // turns powerOff() and sets controller to deep sleep for minimum power use, ONLY if wakeable by RST (rst >= 0)
bool darkBorder = false; // adds a dark border outside the normal screen area
static constexpr bool reduceBoosterTime = true; // Saves ~200ms
private:
void _writeScreenBuffer(uint8_t command, uint8_t value);
void _writeImage(uint8_t command, const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false);
void _writeImagePart(uint8_t command, const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false);
void _setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h);
void _PowerOn();
void _PowerOff();
void _InitDisplay();
void _Init_Full();
void _Init_Part();
void _Update_Full();
void _Update_Part();
void _reset();
void _transferCommand(uint8_t command);
};

File diff suppressed because it is too large Load Diff

View File

@ -4,92 +4,54 @@
#include <Arduino.h>
#include <WiFiManager.h>
#include <HTTPClient.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <Arduino_JSON.h>
#include <DS3232RTC.h>
#include <GxEPD2_BW.h>
#include <Wire.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include "DSEG7_Classic_Bold_53.h"
#include "Display.h"
#include "WatchyRTC.h"
#include "BLE.h"
#include "bma.h"
#include "config.h"
#include "esp_chip_info.h"
typedef struct weatherData {
int8_t temperature;
int16_t weatherConditionCode;
bool isMetric;
String weatherDescription;
bool external;
tmElements_t sunrise;
tmElements_t sunset;
} weatherData;
typedef struct watchySettings {
// Weather Settings
String cityID;
String lat;
String lon;
String weatherAPIKey;
String weatherURL;
String weatherUnit;
String weatherLang;
int8_t weatherUpdateInterval;
// NTP Settings
String ntpServer;
int gmtOffset;
//
bool vibrateOClock;
} watchySettings;
typedef struct weatherData{
int8_t temperature;
int16_t weatherConditionCode;
}weatherData;
class Watchy {
public:
static WatchyRTC RTC;
static GxEPD2_BW<WatchyDisplay, WatchyDisplay::HEIGHT> display;
tmElements_t currentTime;
watchySettings settings;
public:
static DS3232RTC RTC;
static GxEPD2_BW<GxEPD2_154_D67, GxEPD2_154_D67::HEIGHT> display;
tmElements_t currentTime;
public:
Watchy();
void init();
void deepSleep();
float getBatteryVoltage();
void vibMotor(uint8_t intervalMs = 100, uint8_t length = 20);
public:
explicit Watchy(const watchySettings &s) : settings(s) {} // constructor
void init(String datetime = "");
void deepSleep();
float getBatteryVoltage();
uint8_t getBoardRevision();
void vibMotor(uint8_t intervalMs = 100, uint8_t length = 20);
void handleButtonPress();
void showMenu(byte menuIndex, bool partialRefresh);
void showBattery();
void showBuzz();
void showAccelerometer();
void showUpdateFW();
void setTime();
void setupWifi();
bool connectWiFi();
weatherData getWeatherData();
void updateFWBegin();
virtual void handleButtonPress();
void showMenu(byte menuIndex, bool partialRefresh);
void showFastMenu(byte menuIndex);
void showAbout();
void showBuzz();
void showAccelerometer();
void showUpdateFW();
void showSyncNTP();
bool syncNTP();
bool syncNTP(long gmt);
bool syncNTP(long gmt, String ntpServer);
void setTime();
void setupWifi();
bool connectWiFi();
weatherData getWeatherData();
void updateFWBegin();
void showWatchFace(bool partialRefresh);
virtual void drawWatchFace(); //override this method for different watch faces
void showWatchFace(bool partialRefresh);
virtual void drawWatchFace(); // override this method for different watch
// faces
private:
void _bmaConfig();
static void _configModeCallback(WiFiManager *myWiFiManager);
static uint16_t _readRegister(uint8_t address, uint8_t reg, uint8_t *data,
uint16_t len);
static uint16_t _writeRegister(uint8_t address, uint8_t reg, uint8_t *data,
uint16_t len);
weatherData _getWeatherData(String cityID, String lat, String lon, String units, String lang,
String url, String apiKey, uint8_t updateInterval);
private:
void _rtcConfig();
void _bmaConfig();
static void _configModeCallback(WiFiManager *myWiFiManager);
static uint16_t _readRegister(uint8_t address, uint8_t reg, uint8_t *data, uint16_t len);
static uint16_t _writeRegister(uint8_t address, uint8_t reg, uint8_t *data, uint16_t len);
};
extern RTC_DATA_ATTR int guiState;

View File

@ -1,150 +0,0 @@
#include "WatchyRTC.h"
WatchyRTC::WatchyRTC() : rtc_ds(false) {}
void WatchyRTC::init() {
byte error;
Wire.beginTransmission(RTC_DS_ADDR);
error = Wire.endTransmission();
if (error == 0) {
rtcType = DS3231;
} else {
Wire.beginTransmission(RTC_PCF_ADDR);
error = Wire.endTransmission();
if (error == 0) {
rtcType = PCF8563;
} else {
// RTC Error
}
}
}
void WatchyRTC::config(
String datetime) { // String datetime format is YYYY:MM:DD:HH:MM:SS
if (rtcType == DS3231) {
_DSConfig(datetime);
} else {
_PCFConfig(datetime);
}
}
void WatchyRTC::clearAlarm() {
if (rtcType == DS3231) {
rtc_ds.alarm(DS3232RTC::ALARM_2);
} else {
int nextAlarmMinute = 0;
rtc_pcf.clearAlarm(); // resets the alarm flag in the RTC
nextAlarmMinute = rtc_pcf.getMinute();
nextAlarmMinute =
(nextAlarmMinute == 59)
? 0
: (nextAlarmMinute + 1); // set alarm to trigger 1 minute from now
rtc_pcf.setAlarm(nextAlarmMinute, 99, 99, 99);
}
}
void WatchyRTC::read(tmElements_t &tm) {
if (rtcType == DS3231) {
rtc_ds.read(tm);
} else {
rtc_pcf.getDate();
tm.Year = y2kYearToTm(rtc_pcf.getYear());
tm.Month = rtc_pcf.getMonth();
tm.Day = rtc_pcf.getDay();
tm.Wday =
rtc_pcf.getWeekday() + 1; // TimeLib & DS3231 has Wday range of 1-7, but
// PCF8563 stores day of week in 0-6 range
tm.Hour = rtc_pcf.getHour();
tm.Minute = rtc_pcf.getMinute();
tm.Second = rtc_pcf.getSecond();
}
}
void WatchyRTC::set(tmElements_t tm) {
if (rtcType == DS3231) {
time_t t = makeTime(tm);
rtc_ds.set(t);
} else {
time_t t = makeTime(tm); // make and break to calculate tm.Wday
breakTime(t, tm);
// day, weekday, month, century(1=1900, 0=2000), year(0-99)
rtc_pcf.setDate(
tm.Day, tm.Wday - 1, tm.Month, 0,
tmYearToY2k(tm.Year)); // TimeLib & DS3231 has Wday range of 1-7, but
// PCF8563 stores day of week in 0-6 range
// hr, min, sec
rtc_pcf.setTime(tm.Hour, tm.Minute, tm.Second);
clearAlarm();
}
}
uint8_t WatchyRTC::temperature() {
if (rtcType == DS3231) {
return rtc_ds.temperature();
} else {
return 255; // error
}
}
void WatchyRTC::_DSConfig(
String datetime) { // String datetime is YYYY:MM:DD:HH:MM:SS
if (datetime != "") {
tmElements_t tm;
tm.Year = CalendarYrToTm(_getValue(datetime, ':', 0).toInt()); // YYYY -
// 1970
tm.Month = _getValue(datetime, ':', 1).toInt();
tm.Day = _getValue(datetime, ':', 2).toInt();
tm.Hour = _getValue(datetime, ':', 3).toInt();
tm.Minute = _getValue(datetime, ':', 4).toInt();
tm.Second = _getValue(datetime, ':', 5).toInt();
time_t t = makeTime(tm);
rtc_ds.set(t);
}
// https://github.com/JChristensen/DS3232RTC
rtc_ds.squareWave(DS3232RTC::SQWAVE_NONE); // disable square wave output
rtc_ds.setAlarm(DS3232RTC::ALM2_EVERY_MINUTE, 0, 0, 0,
0); // alarm wakes up Watchy every minute
rtc_ds.alarmInterrupt(DS3232RTC::ALARM_2, true); // enable alarm interrupt
}
void WatchyRTC::_PCFConfig(
String datetime) { // String datetime is YYYY:MM:DD:HH:MM:SS
if (datetime != "") {
tmElements_t tm;
tm.Year = CalendarYrToTm(_getValue(datetime, ':', 0).toInt()); // YYYY -
// 1970
tm.Month = _getValue(datetime, ':', 1).toInt();
tm.Day = _getValue(datetime, ':', 2).toInt();
tm.Hour = _getValue(datetime, ':', 3).toInt();
tm.Minute = _getValue(datetime, ':', 4).toInt();
tm.Second = _getValue(datetime, ':', 5).toInt();
time_t t = makeTime(tm); // make and break to calculate tm.Wday
breakTime(t, tm);
// day, weekday, month, century(1=1900, 0=2000), year(0-99)
rtc_pcf.setDate(
tm.Day, tm.Wday - 1, tm.Month, 0,
tmYearToY2k(tm.Year)); // TimeLib & DS3231 has Wday range of 1-7, but
// PCF8563 stores day of week in 0-6 range
// hr, min, sec
rtc_pcf.setTime(tm.Hour, tm.Minute, tm.Second);
}
// on POR event, PCF8563 sets month to 0, which will give an error since
// months are 1-12
clearAlarm();
}
String WatchyRTC::_getValue(String data, char separator, int index) {
int found = 0;
int strIndex[] = {0, -1};
int maxIndex = data.length() - 1;
for (int i = 0; i <= maxIndex && found <= index; i++) {
if (data.charAt(i) == separator || i == maxIndex) {
found++;
strIndex[0] = strIndex[1] + 1;
strIndex[1] = (i == maxIndex) ? i + 1 : i;
}
}
return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
}

View File

@ -1,38 +0,0 @@
#ifndef WATCHY_RTC_H
#define WATCHY_RTC_H
#include "config.h"
#include "time.h"
#include <DS3232RTC.h>
#include <Rtc_Pcf8563.h>
#define DS3231 1
#define PCF8563 2
#define RTC_DS_ADDR 0x68
#define RTC_PCF_ADDR 0x51
#define YEAR_OFFSET_DS 1970
#define YEAR_OFFSET_PCF 2000
class WatchyRTC {
public:
DS3232RTC rtc_ds;
Rtc_Pcf8563 rtc_pcf;
uint8_t rtcType;
public:
WatchyRTC();
void init();
void config(String datetime); // String datetime format is YYYY:MM:DD:HH:MM:SS
void clearAlarm();
void read(tmElements_t &tm);
void set(tmElements_t tm);
uint8_t temperature();
private:
void _DSConfig(String datetime);
void _PCFConfig(String datetime);
int _getDayOfWeek(int d, int m, int y);
String _getValue(String data, char separator, int index);
};
#endif

View File

@ -2,282 +2,328 @@
#define DEBUGPORT Serial
#ifdef DEBUGPORT
#define DEBUG(...) DEBUGPORT.printf(__VA_ARGS__)
#define DEBUG(...) DEBUGPORT.printf(__VA_ARGS__)
#else
#define DEBUG(...)
#endif
BMA423::BMA423() {
__readRegisterFptr = nullptr;
__writeRegisterFptr = nullptr;
__delayCallBlackFptr = nullptr;
__init = false;
BMA423::BMA423()
{
__readRegisterFptr = nullptr;
__writeRegisterFptr = nullptr;
__delayCallBlackFptr = nullptr;
__init = false;
}
BMA423::~BMA423() {}
BMA423::~BMA423()
{
}
bool BMA423::begin(bma4_com_fptr_t readCallBlack,
bma4_com_fptr_t writeCallBlack,
bma4_delay_fptr_t delayCallBlack, uint8_t address) {
bma4_delay_fptr_t delayCallBlack,
uint8_t address)
{
if (__init || readCallBlack == nullptr || writeCallBlack == nullptr ||
delayCallBlack == nullptr) {
if (__init ||
readCallBlack == nullptr ||
writeCallBlack == nullptr ||
delayCallBlack == nullptr) {
return true;
}
__readRegisterFptr = readCallBlack;
__writeRegisterFptr = writeCallBlack;
__delayCallBlackFptr = delayCallBlack;
__devFptr.dev_addr = address;
__devFptr.interface = BMA4_I2C_INTERFACE;
__devFptr.bus_read = readCallBlack;
__devFptr.bus_write = writeCallBlack;
__devFptr.delay = delayCallBlack;
__devFptr.read_write_len = 8;
__devFptr.resolution = 12;
__devFptr.feature_len = BMA423_FEATURE_SIZE;
softReset();
__delayCallBlackFptr(20);
if (bma423_init(&__devFptr) != BMA4_OK) {
DEBUG("BMA423 FAIL\n");
return false;
}
if (bma423_write_config_file(&__devFptr) != BMA4_OK) {
DEBUG("BMA423 Write Config FAIL\n");
return false;
}
__init = true;
struct bma4_int_pin_config config ;
config.edge_ctrl = BMA4_LEVEL_TRIGGER;
config.lvl = BMA4_ACTIVE_HIGH;
config.od = BMA4_PUSH_PULL;
config.output_en = BMA4_OUTPUT_ENABLE;
config.input_en = BMA4_INPUT_DISABLE;
if (bma4_set_int_pin_config(&config, BMA4_INTR1_MAP, &__devFptr) != BMA4_OK) {
DEBUG("BMA423 SET INT FAIL\n");
return false;
}
return true;
}
__readRegisterFptr = readCallBlack;
__writeRegisterFptr = writeCallBlack;
__delayCallBlackFptr = delayCallBlack;
__devFptr.dev_addr = address;
__devFptr.interface = BMA4_I2C_INTERFACE;
__devFptr.bus_read = readCallBlack;
__devFptr.bus_write = writeCallBlack;
__devFptr.delay = delayCallBlack;
__devFptr.read_write_len = 8;
__devFptr.resolution = 12;
__devFptr.feature_len = BMA423_FEATURE_SIZE;
softReset();
__delayCallBlackFptr(20);
if (bma423_init(&__devFptr) != BMA4_OK) {
DEBUG("BMA423 FAIL\n");
return false;
}
if (bma423_write_config_file(&__devFptr) != BMA4_OK) {
DEBUG("BMA423 Write Config FAIL\n");
return false;
}
__init = true;
struct bma4_int_pin_config config;
config.edge_ctrl = BMA4_LEVEL_TRIGGER;
config.lvl = BMA4_ACTIVE_HIGH;
config.od = BMA4_PUSH_PULL;
config.output_en = BMA4_OUTPUT_ENABLE;
config.input_en = BMA4_INPUT_DISABLE;
if (bma4_set_int_pin_config(&config, BMA4_INTR1_MAP, &__devFptr) != BMA4_OK) {
DEBUG("BMA423 SET INT FAIL\n");
return false;
}
return true;
}
void BMA423::softReset() {
uint8_t reg = BMA4_RESET_ADDR;
__writeRegisterFptr(BMA4_I2C_ADDR_PRIMARY, BMA4_RESET_SET_MASK, &reg, 1);
void BMA423::softReset()
{
uint8_t reg = BMA4_RESET_ADDR;
__writeRegisterFptr(BMA4_I2C_ADDR_PRIMARY, BMA4_RESET_SET_MASK, &reg, 1);
}
void BMA423::shutDown() {
bma4_set_advance_power_save(BMA4_DISABLE, &__devFptr);
void BMA423::shutDown()
{
bma4_set_advance_power_save(BMA4_DISABLE, &__devFptr);
}
void BMA423::wakeUp() { bma4_set_advance_power_save(BMA4_ENABLE, &__devFptr); }
uint16_t BMA423::getErrorCode() {
struct bma4_err_reg err;
uint16_t rslt = bma4_get_error_status(&err, &__devFptr);
return rslt;
void BMA423::wakeUp()
{
bma4_set_advance_power_save(BMA4_ENABLE, &__devFptr);
}
uint16_t BMA423::getStatus() {
uint8_t status;
bma4_get_status(&status, &__devFptr);
return status;
uint16_t BMA423::getErrorCode()
{
struct bma4_err_reg err;
uint16_t rslt = bma4_get_error_status(&err, &__devFptr);
return rslt;
}
uint32_t BMA423::getSensorTime() {
uint32_t ms;
bma4_get_sensor_time(&ms, &__devFptr);
return ms;
uint16_t BMA423::getStatus()
{
uint8_t status;
bma4_get_status(&status, &__devFptr);
return status;
}
bool BMA423::selfTest() {
return (BMA4_OK ==
bma4_selftest_config(BMA4_ACCEL_SELFTEST_ENABLE_MSK, &__devFptr));
uint32_t BMA423::getSensorTime()
{
uint32_t ms;
bma4_get_sensor_time(&ms, &__devFptr);
return ms;
}
uint8_t BMA423::getDirection() {
Accel acc;
if (bma4_read_accel_xyz(&acc, &__devFptr) != BMA4_OK) {
bool BMA423::selfTest()
{
return (BMA4_OK == bma4_selftest_config(BMA4_ACCEL_SELFTEST_ENABLE_MSK, &__devFptr));
}
uint8_t BMA423::getDirection()
{
Accel acc;
if (bma4_read_accel_xyz(&acc, &__devFptr) != BMA4_OK) {
return 0;
}
uint16_t absX = abs(acc.x);
uint16_t absY = abs(acc.y);
uint16_t absZ = abs(acc.z);
if ((absZ > absX) && (absZ > absY)) {
if (acc.z > 0) {
return DIRECTION_DISP_DOWN;
} else {
return DIRECTION_DISP_UP;
}
} else if ((absY > absX) && (absY > absZ)) {
if (acc.y > 0) {
return DIRECTION_RIGHT_EDGE;
} else {
return DIRECTION_LEFT_EDGE;
}
} else {
if (acc.x < 0) {
return DIRECTION_BOTTOM_EDGE;
} else {
return DIRECTION_TOP_EDGE;
}
}
}
float BMA423::readTemperature()
{
int32_t data = 0;
bma4_get_temperature(&data, BMA4_DEG, &__devFptr);
float res = (float)data / (float)BMA4_SCALE_TEMP;
/* 0x80 - temp read from the register and 23 is the ambient temp added.
* If the temp read from register is 0x80, it means no valid
* information is available */
if (((data - 23) / BMA4_SCALE_TEMP) == 0x80) {
res = 0;
}
return res;
}
float BMA423::readTemperatureF()
{
float temp = readTemperature();
if (temp != 0) {
temp = temp * 1.8 + 32.0;
}
return (temp);
}
bool BMA423::getAccel(Accel &acc)
{
memset(&acc, 0, sizeof(acc));
if (bma4_read_accel_xyz(&acc, &__devFptr) != BMA4_OK) {
return false;
}
return true;
}
bool BMA423::getAccelEnable()
{
uint8_t en;
bma4_get_accel_enable(&en, &__devFptr);
return (en & BMA4_ACCEL_ENABLE_POS) == BMA4_ACCEL_ENABLE_POS;
}
bool BMA423::disableAccel()
{
return enableAccel(false);
}
bool BMA423::enableAccel(bool en)
{
return (BMA4_OK == bma4_set_accel_enable(en ? BMA4_ENABLE : BMA4_DISABLE, &__devFptr));
}
bool BMA423::setAccelConfig(Acfg &cfg)
{
return (BMA4_OK == bma4_set_accel_config(&cfg, &__devFptr));
}
bool BMA423::getAccelConfig(Acfg &cfg)
{
return (BMA4_OK == bma4_get_accel_config(&cfg, &__devFptr));
}
bool BMA423::setRemapAxes(struct bma423_axes_remap *remap_data)
{
return (BMA4_OK == bma423_set_remap_axes(remap_data, &__devFptr));
}
bool BMA423::resetStepCounter()
{
return BMA4_OK == bma423_reset_step_counter(&__devFptr) ;
}
uint32_t BMA423::getCounter()
{
uint32_t stepCount;
if (bma423_step_counter_output(&stepCount, &__devFptr) == BMA4_OK) {
return stepCount;
}
return 0;
}
uint16_t absX = abs(acc.x);
uint16_t absY = abs(acc.y);
uint16_t absZ = abs(acc.z);
}
if ((absZ > absX) && (absZ > absY)) {
if (acc.z > 0) {
return DIRECTION_DISP_DOWN;
} else {
return DIRECTION_DISP_UP;
bool BMA423::setINTPinConfig(struct bma4_int_pin_config config, uint8_t pinMap)
{
return BMA4_OK == bma4_set_int_pin_config(&config, pinMap, &__devFptr);
}
bool BMA423::getINT()
{
return bma423_read_int_status(&__IRQ_MASK, &__devFptr) == BMA4_OK;
}
uint8_t BMA423::getIRQMASK()
{
return __IRQ_MASK;
}
bool BMA423::disableIRQ(uint16_t int_map)
{
return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, int_map, BMA4_DISABLE, &__devFptr));
}
bool BMA423::enableIRQ(uint16_t int_map)
{
return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, int_map, BMA4_ENABLE, &__devFptr));
}
bool BMA423::enableFeature(uint8_t feature, uint8_t enable)
{
if ((feature & BMA423_STEP_CNTR) == BMA423_STEP_CNTR) {
bma423_step_detector_enable(enable ? BMA4_ENABLE : BMA4_DISABLE, &__devFptr);
}
} else if ((absY > absX) && (absY > absZ)) {
if (acc.y > 0) {
return DIRECTION_RIGHT_EDGE;
} else {
return DIRECTION_LEFT_EDGE;
return (BMA4_OK == bma423_feature_enable(feature, enable, &__devFptr));
}
bool BMA423::isStepCounter()
{
return (bool)(BMA423_STEP_CNTR_INT & __IRQ_MASK);
}
bool BMA423::isDoubleClick()
{
return (bool)(BMA423_WAKEUP_INT & __IRQ_MASK);
}
bool BMA423::isTilt()
{
return (bool)(BMA423_TILT_INT & __IRQ_MASK);
}
bool BMA423::isActivity()
{
return (bool)(BMA423_ACTIVITY_INT & __IRQ_MASK);
}
bool BMA423::isAnyNoMotion()
{
return (bool)(BMA423_ANY_NO_MOTION_INT & __IRQ_MASK);
}
bool BMA423::enableStepCountInterrupt(bool en)
{
return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, BMA423_STEP_CNTR_INT, en, &__devFptr));
}
bool BMA423::enableTiltInterrupt(bool en)
{
return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, BMA423_TILT_INT, en, &__devFptr));
}
bool BMA423::enableWakeupInterrupt(bool en)
{
return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, BMA423_WAKEUP_INT, en, &__devFptr));
}
bool BMA423::enableAnyNoMotionInterrupt(bool en)
{
return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, BMA423_ANY_NO_MOTION_INT, en, &__devFptr));
}
bool BMA423::enableActivityInterrupt(bool en)
{
return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, BMA423_ACTIVITY_INT, en, &__devFptr));
}
const char *BMA423::getActivity()
{
uint8_t activity;
bma423_activity_output(&activity, &__devFptr);
if (activity & BMA423_USER_STATIONARY) {
return "BMA423_USER_STATIONARY";
} else if (activity & BMA423_USER_WALKING) {
return "BMA423_USER_WALKING";
} else if (activity & BMA423_USER_RUNNING) {
return "BMA423_USER_RUNNING";
} else if (activity & BMA423_STATE_INVALID) {
return "BMA423_STATE_INVALID";
}
} else {
if (acc.x < 0) {
return DIRECTION_BOTTOM_EDGE;
} else {
return DIRECTION_TOP_EDGE;
}
}
}
float BMA423::readTemperature() {
int32_t data = 0;
bma4_get_temperature(&data, BMA4_DEG, &__devFptr);
float res = (float)data / (float)BMA4_SCALE_TEMP;
/* 0x80 - temp read from the register and 23 is the ambient temp added.
* If the temp read from register is 0x80, it means no valid
* information is available */
if (((data - 23) / BMA4_SCALE_TEMP) == 0x80) {
res = 0;
}
return res;
}
float BMA423::readTemperatureF() {
float temp = readTemperature();
if (temp != 0) {
temp = temp * 1.8 + 32.0;
}
return (temp);
}
bool BMA423::getAccel(Accel &acc) {
memset(&acc, 0, sizeof(acc));
if (bma4_read_accel_xyz(&acc, &__devFptr) != BMA4_OK) {
return false;
}
return true;
}
bool BMA423::getAccelEnable() {
uint8_t en;
bma4_get_accel_enable(&en, &__devFptr);
return (en & BMA4_ACCEL_ENABLE_POS) == BMA4_ACCEL_ENABLE_POS;
}
bool BMA423::disableAccel() { return enableAccel(false); }
bool BMA423::enableAccel(bool en) {
return (BMA4_OK ==
bma4_set_accel_enable(en ? BMA4_ENABLE : BMA4_DISABLE, &__devFptr));
}
bool BMA423::setAccelConfig(Acfg &cfg) {
return (BMA4_OK == bma4_set_accel_config(&cfg, &__devFptr));
}
bool BMA423::getAccelConfig(Acfg &cfg) {
return (BMA4_OK == bma4_get_accel_config(&cfg, &__devFptr));
}
bool BMA423::setRemapAxes(struct bma423_axes_remap *remap_data) {
return (BMA4_OK == bma423_set_remap_axes(remap_data, &__devFptr));
}
bool BMA423::resetStepCounter() {
return BMA4_OK == bma423_reset_step_counter(&__devFptr);
}
uint32_t BMA423::getCounter() {
uint32_t stepCount;
if (bma423_step_counter_output(&stepCount, &__devFptr) == BMA4_OK) {
return stepCount;
}
return 0;
}
bool BMA423::setINTPinConfig(struct bma4_int_pin_config config,
uint8_t pinMap) {
return BMA4_OK == bma4_set_int_pin_config(&config, pinMap, &__devFptr);
}
bool BMA423::getINT() {
return bma423_read_int_status(&__IRQ_MASK, &__devFptr) == BMA4_OK;
}
uint8_t BMA423::getIRQMASK() { return __IRQ_MASK; }
bool BMA423::disableIRQ(uint16_t int_map) {
return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, int_map, BMA4_DISABLE,
&__devFptr));
}
bool BMA423::enableIRQ(uint16_t int_map) {
return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, int_map, BMA4_ENABLE,
&__devFptr));
}
bool BMA423::enableFeature(uint8_t feature, uint8_t enable) {
if ((feature & BMA423_STEP_CNTR) == BMA423_STEP_CNTR) {
bma423_step_detector_enable(enable ? BMA4_ENABLE : BMA4_DISABLE,
&__devFptr);
}
return (BMA4_OK == bma423_feature_enable(feature, enable, &__devFptr));
}
bool BMA423::isStepCounter() {
return (bool)(BMA423_STEP_CNTR_INT & __IRQ_MASK);
}
bool BMA423::isDoubleClick() { return (bool)(BMA423_WAKEUP_INT & __IRQ_MASK); }
bool BMA423::isTilt() { return (bool)(BMA423_TILT_INT & __IRQ_MASK); }
bool BMA423::isActivity() { return (bool)(BMA423_ACTIVITY_INT & __IRQ_MASK); }
bool BMA423::isAnyNoMotion() {
return (bool)(BMA423_ANY_NO_MOTION_INT & __IRQ_MASK);
}
bool BMA423::enableStepCountInterrupt(bool en) {
return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, BMA423_STEP_CNTR_INT,
en, &__devFptr));
}
bool BMA423::enableTiltInterrupt(bool en) {
return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, BMA423_TILT_INT, en,
&__devFptr));
}
bool BMA423::enableWakeupInterrupt(bool en) {
return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, BMA423_WAKEUP_INT, en,
&__devFptr));
}
bool BMA423::enableAnyNoMotionInterrupt(bool en) {
return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP,
BMA423_ANY_NO_MOTION_INT, en,
&__devFptr));
}
bool BMA423::enableActivityInterrupt(bool en) {
return (BMA4_OK == bma423_map_interrupt(BMA4_INTR1_MAP, BMA423_ACTIVITY_INT,
en, &__devFptr));
}
const char *BMA423::getActivity() {
uint8_t activity;
bma423_activity_output(&activity, &__devFptr);
if (activity & BMA423_USER_STATIONARY) {
return "BMA423_USER_STATIONARY";
} else if (activity & BMA423_USER_WALKING) {
return "BMA423_USER_WALKING";
} else if (activity & BMA423_USER_RUNNING) {
return "BMA423_USER_RUNNING";
} else if (activity & BMA423_STATE_INVALID) {
return "BMA423_STATE_INVALID";
}
return "None";
return "None";
}

115
src/bma.h
View File

@ -1,6 +1,6 @@
#pragma once
#ifdef ARDUINO
#ifdef ARDUINO
#include <Arduino.h>
#else
#include <stdlib.h>
@ -9,79 +9,80 @@
#include "bma423.h"
enum {
DIRECTION_TOP_EDGE = 0,
DIRECTION_BOTTOM_EDGE = 1,
DIRECTION_LEFT_EDGE = 2,
DIRECTION_RIGHT_EDGE = 3,
DIRECTION_DISP_UP = 4,
DIRECTION_DISP_DOWN = 5
};
DIRECTION_TOP_EDGE = 0,
DIRECTION_BOTTOM_EDGE = 1,
DIRECTION_LEFT_EDGE = 2,
DIRECTION_RIGHT_EDGE = 3,
DIRECTION_DISP_UP = 4,
DIRECTION_DISP_DOWN = 5
} ;
typedef struct bma4_accel Accel;
typedef struct bma4_accel_config Acfg;
class BMA423 {
class BMA423
{
public:
BMA423();
~BMA423();
BMA423();
~BMA423();
bool begin(bma4_com_fptr_t readCallBlack, bma4_com_fptr_t writeCallBlack,
bma4_delay_fptr_t delayCallBlack,
uint8_t address = BMA4_I2C_ADDR_PRIMARY);
bool begin(bma4_com_fptr_t readCallBlack, bma4_com_fptr_t writeCallBlack, bma4_delay_fptr_t delayCallBlack,
uint8_t address = BMA4_I2C_ADDR_PRIMARY);
void softReset();
void shutDown();
void wakeUp();
bool selfTest();
void softReset();
void shutDown();
void wakeUp();
bool selfTest();
uint8_t getDirection();
uint8_t getDirection();
bool setAccelConfig(Acfg &cfg);
bool getAccelConfig(Acfg &cfg);
bool getAccel(Accel &acc);
bool getAccelEnable();
bool disableAccel();
bool enableAccel(bool en = true);
bool setAccelConfig(Acfg &cfg);
bool getAccelConfig(Acfg &cfg);
bool getAccel(Accel &acc);
bool getAccelEnable();
bool disableAccel();
bool enableAccel(bool en = true);
bool setINTPinConfig(struct bma4_int_pin_config config, uint8_t pinMap);
bool getINT();
uint8_t getIRQMASK();
bool disableIRQ(uint16_t int_map = BMA423_STEP_CNTR_INT);
bool enableIRQ(uint16_t int_map = BMA423_STEP_CNTR_INT);
bool isStepCounter();
bool isDoubleClick();
bool isTilt();
bool isActivity();
bool isAnyNoMotion();
bool setINTPinConfig(struct bma4_int_pin_config config, uint8_t pinMap);
bool getINT();
uint8_t getIRQMASK();
bool disableIRQ(uint16_t int_map = BMA423_STEP_CNTR_INT);
bool enableIRQ(uint16_t int_map = BMA423_STEP_CNTR_INT);
bool isStepCounter();
bool isDoubleClick();
bool isTilt();
bool isActivity();
bool isAnyNoMotion();
bool resetStepCounter();
uint32_t getCounter();
bool resetStepCounter();
uint32_t getCounter();
float readTemperature();
float readTemperatureF();
float readTemperature();
float readTemperatureF();
uint16_t getErrorCode();
uint16_t getStatus();
uint32_t getSensorTime();
uint16_t getErrorCode();
uint16_t getStatus();
uint32_t getSensorTime();
const char *getActivity();
bool setRemapAxes(struct bma423_axes_remap *remap_data);
bool enableFeature(uint8_t feature, uint8_t enable);
bool enableStepCountInterrupt(bool en = true);
bool enableTiltInterrupt(bool en = true);
bool enableWakeupInterrupt(bool en = true);
bool enableAnyNoMotionInterrupt(bool en = true);
bool enableActivityInterrupt(bool en = true);
const char *getActivity();
bool setRemapAxes(struct bma423_axes_remap *remap_data);
bool enableFeature(uint8_t feature, uint8_t enable );
bool enableStepCountInterrupt(bool en = true);
bool enableTiltInterrupt(bool en = true);
bool enableWakeupInterrupt(bool en = true);
bool enableAnyNoMotionInterrupt(bool en = true);
bool enableActivityInterrupt(bool en = true);
private:
bma4_com_fptr_t __readRegisterFptr;
bma4_com_fptr_t __writeRegisterFptr;
bma4_delay_fptr_t __delayCallBlackFptr;
bma4_com_fptr_t __readRegisterFptr;
bma4_com_fptr_t __writeRegisterFptr;
bma4_delay_fptr_t __delayCallBlackFptr;
uint8_t __address;
uint16_t __IRQ_MASK;
bool __init;
struct bma4_dev __devFptr;
uint8_t __address;
uint16_t __IRQ_MASK;
bool __init;
struct bma4_dev __devFptr;
};

4994
src/bma4.c

File diff suppressed because it is too large Load Diff

View File

@ -1,91 +1,91 @@
/*
*
****************************************************************************
* Copyright (C) 2015 - 2016 Bosch Sensortec GmbH
*
* File : bma4.h
*
* Date: 12 Oct 2017
*
* Revision: 2.1.9 $
*
* Usage: Sensor Driver for BMA4 family of sensors
*
****************************************************************************
*
* Disclaimer
*
* Common:
* Bosch Sensortec products are developed for the consumer goods industry.
* They may only be used within the parameters of the respective valid
* product data sheet. Bosch Sensortec products are provided with the
* express understanding that there is no warranty of fitness for a
* particular purpose.They are not fit for use in life-sustaining,
* safety or security sensitive systems or any system or device
* that may lead to bodily harm or property damage if the system
* or device malfunctions. In addition,Bosch Sensortec products are
* not fit for use in products which interact with motor vehicle systems.
* The resale and or use of products are at the purchasers own risk and
* his own responsibility. The examination of fitness for the intended use
* is the sole responsibility of the Purchaser.
*
* The purchaser shall indemnify Bosch Sensortec from all third party
* claims, including any claims for incidental, or consequential damages,
* arising from any product use not covered by the parameters of
* the respective valid product data sheet or not approved by
* Bosch Sensortec and reimburse Bosch Sensortec for all costs in
* connection with such claims.
*
* The purchaser must monitor the market for the purchased products,
* particularly with regard to product safety and inform Bosch Sensortec
* without delay of all security relevant incidents.
*
* Engineering Samples are marked with an asterisk (*) or (e).
* Samples may vary from the valid technical specifications of the product
* series. They are therefore not intended or fit for resale to third
* parties or for use in end products. Their sole purpose is internal
* client testing. The testing of an engineering sample may in no way
* replace the testing of a product series. Bosch Sensortec assumes
* no liability for the use of engineering samples.
* By accepting the engineering samples, the Purchaser agrees to indemnify
* Bosch Sensortec from all claims arising from the use of engineering
* samples.
*
* Special:
* This software module (hereinafter called "Software") and any information
* on application-sheets (hereinafter called "Information") is provided
* free of charge for the sole purpose to support your application work.
* The Software and Information is subject to the following
* terms and conditions:
*
* The Software is specifically designed for the exclusive use for
* Bosch Sensortec products by personnel who have special experience
* and training. Do not use this Software if you do not have the
* proper experience or training.
*
* This Software package is provided `` as is `` and without any expressed
* or implied warranties,including without limitation, the implied warranties
* of merchantability and fitness for a particular purpose.
*
* Bosch Sensortec and their representatives and agents deny any liability
* for the functional impairment
* of this Software in terms of fitness, performance and safety.
* Bosch Sensortec and their representatives and agents shall not be liable
* for any direct or indirect damages or injury, except as
* otherwise stipulated in mandatory applicable law.
*
* The Information provided is believed to be accurate and reliable.
* Bosch Sensortec assumes no responsibility for the consequences of use
* of such Information nor for any infringement of patents or
* other rights of third parties which may result from its use.
* No license is granted by implication or otherwise under any patent or
* patent rights of Bosch. Specifications mentioned in the Information are
* subject to change without notice.
**************************************************************************/
*
****************************************************************************
* Copyright (C) 2015 - 2016 Bosch Sensortec GmbH
*
* File : bma4.h
*
* Date: 12 Oct 2017
*
* Revision: 2.1.9 $
*
* Usage: Sensor Driver for BMA4 family of sensors
*
****************************************************************************
*
* Disclaimer
*
* Common:
* Bosch Sensortec products are developed for the consumer goods industry.
* They may only be used within the parameters of the respective valid
* product data sheet. Bosch Sensortec products are provided with the
* express understanding that there is no warranty of fitness for a
* particular purpose.They are not fit for use in life-sustaining,
* safety or security sensitive systems or any system or device
* that may lead to bodily harm or property damage if the system
* or device malfunctions. In addition,Bosch Sensortec products are
* not fit for use in products which interact with motor vehicle systems.
* The resale and or use of products are at the purchasers own risk and
* his own responsibility. The examination of fitness for the intended use
* is the sole responsibility of the Purchaser.
*
* The purchaser shall indemnify Bosch Sensortec from all third party
* claims, including any claims for incidental, or consequential damages,
* arising from any product use not covered by the parameters of
* the respective valid product data sheet or not approved by
* Bosch Sensortec and reimburse Bosch Sensortec for all costs in
* connection with such claims.
*
* The purchaser must monitor the market for the purchased products,
* particularly with regard to product safety and inform Bosch Sensortec
* without delay of all security relevant incidents.
*
* Engineering Samples are marked with an asterisk (*) or (e).
* Samples may vary from the valid technical specifications of the product
* series. They are therefore not intended or fit for resale to third
* parties or for use in end products. Their sole purpose is internal
* client testing. The testing of an engineering sample may in no way
* replace the testing of a product series. Bosch Sensortec assumes
* no liability for the use of engineering samples.
* By accepting the engineering samples, the Purchaser agrees to indemnify
* Bosch Sensortec from all claims arising from the use of engineering
* samples.
*
* Special:
* This software module (hereinafter called "Software") and any information
* on application-sheets (hereinafter called "Information") is provided
* free of charge for the sole purpose to support your application work.
* The Software and Information is subject to the following
* terms and conditions:
*
* The Software is specifically designed for the exclusive use for
* Bosch Sensortec products by personnel who have special experience
* and training. Do not use this Software if you do not have the
* proper experience or training.
*
* This Software package is provided `` as is `` and without any expressed
* or implied warranties,including without limitation, the implied warranties
* of merchantability and fitness for a particular purpose.
*
* Bosch Sensortec and their representatives and agents deny any liability
* for the functional impairment
* of this Software in terms of fitness, performance and safety.
* Bosch Sensortec and their representatives and agents shall not be liable
* for any direct or indirect damages or injury, except as
* otherwise stipulated in mandatory applicable law.
*
* The Information provided is believed to be accurate and reliable.
* Bosch Sensortec assumes no responsibility for the consequences of use
* of such Information nor for any infringement of patents or
* other rights of third parties which may result from its use.
* No license is granted by implication or otherwise under any patent or
* patent rights of Bosch. Specifications mentioned in the Information are
* subject to change without notice.
**************************************************************************/
/*! \file bma4.h
\brief Sensor Driver for BMA4 family of sensors */
#ifndef BMA4_H__
#define BMA4_H__
#define BMA4_H__
/*********************************************************************/
/* header files */
@ -157,8 +157,7 @@ uint16_t bma4_write_config_file(struct bma4_dev *dev);
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t bma4_write_regs(uint8_t addr, uint8_t *data, uint8_t len,
struct bma4_dev *dev);
uint16_t bma4_write_regs(uint8_t addr, uint8_t *data, uint8_t len, struct bma4_dev *dev);
/*!
* @brief This API checks whether the read operation requested is for
@ -173,8 +172,7 @@ uint16_t bma4_write_regs(uint8_t addr, uint8_t *data, uint8_t len,
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t bma4_read_regs(uint8_t addr, uint8_t *data, uint8_t len,
struct bma4_dev *dev);
uint16_t bma4_read_regs(uint8_t addr, uint8_t *data, uint8_t len, struct bma4_dev *dev);
/*!
* @brief This API reads the error status from the sensor.
@ -213,8 +211,7 @@ uint16_t bma4_read_regs(uint8_t addr, uint8_t *data, uint8_t len,
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t bma4_get_error_status(struct bma4_err_reg *err_reg,
struct bma4_dev *dev);
uint16_t bma4_get_error_status(struct bma4_err_reg *err_reg, struct bma4_dev *dev);
/*!
* @brief This API reads the sensor status from the dev sensor.
@ -294,8 +291,7 @@ uint16_t bma4_get_sensor_time(uint32_t *sensor_time, struct bma4_dev *dev);
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_get_temperature(int32_t *temp, uint8_t temp_unit,
struct bma4_dev *dev);
uint16_t bma4_get_temperature(int32_t *temp, uint8_t temp_unit, struct bma4_dev *dev);
/*!
* @brief This API reads the Output data rate, Bandwidth, perf_mode
@ -346,8 +342,7 @@ uint16_t bma4_get_temperature(int32_t *temp, uint8_t temp_unit,
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_get_accel_config(struct bma4_accel_config *accel,
struct bma4_dev *dev);
uint16_t bma4_get_accel_config(struct bma4_accel_config *accel, struct bma4_dev *dev);
/*!
* @brief This API sets the output_data_rate, bandwidth, perf_mode
@ -398,8 +393,7 @@ uint16_t bma4_get_accel_config(struct bma4_accel_config *accel,
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_set_accel_config(const struct bma4_accel_config *accel,
struct bma4_dev *dev);
uint16_t bma4_set_accel_config(const struct bma4_accel_config *accel, struct bma4_dev *dev);
/*!
* @brief This API sets the advance power save mode in the sensor.
@ -417,7 +411,7 @@ uint16_t bma4_set_accel_config(const struct bma4_accel_config *accel,
*
*/
uint16_t bma4_set_advance_power_save(uint8_t adv_pwr_save,
struct bma4_dev *dev);
struct bma4_dev *dev);
/*!
* @brief This API reads the status of advance power save mode
@ -435,8 +429,7 @@ uint16_t bma4_set_advance_power_save(uint8_t adv_pwr_save,
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_get_advance_power_save(uint8_t *adv_pwr_save,
struct bma4_dev *dev);
uint16_t bma4_get_advance_power_save(uint8_t *adv_pwr_save, struct bma4_dev *dev);
/*!
* @brief This API sets the FIFO self wake up functionality in the sensor.
@ -453,8 +446,7 @@ uint16_t bma4_get_advance_power_save(uint8_t *adv_pwr_save,
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_set_fifo_self_wakeup(uint8_t fifo_self_wakeup,
struct bma4_dev *dev);
uint16_t bma4_set_fifo_self_wakeup(uint8_t fifo_self_wakeup, struct bma4_dev *dev);
/*!
* @brief This API gets the status of FIFO self wake up functionality from
@ -472,8 +464,7 @@ uint16_t bma4_set_fifo_self_wakeup(uint8_t fifo_self_wakeup,
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_get_fifo_self_wakeup(uint8_t *fifo_self_wake_up,
struct bma4_dev *dev);
uint16_t bma4_get_fifo_self_wakeup(uint8_t *fifo_self_wake_up, struct bma4_dev *dev);
/*!
* @brief This API enables or disables the Accel in the sensor.
@ -571,7 +562,7 @@ uint16_t bma4_get_spi_interface(uint8_t *spi, struct bma4_dev *dev);
*/
uint16_t bma4_set_spi_interface(uint8_t spi, struct bma4_dev *dev);
/*!
/*!
* @brief This API writes the available sensor specific commands
* to the sensor.
*
@ -860,8 +851,7 @@ uint16_t bma4_set_fifo_wm(uint16_t fifo_wm, struct bma4_dev *dev);
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_get_accel_fifo_filter_data(uint8_t *accel_fifo_filter,
struct bma4_dev *dev);
uint16_t bma4_get_accel_fifo_filter_data(uint8_t *accel_fifo_filter, struct bma4_dev *dev);
/*!
* @brief This API sets the condition of Accel FIFO data either to
@ -880,8 +870,7 @@ uint16_t bma4_get_accel_fifo_filter_data(uint8_t *accel_fifo_filter,
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_set_accel_fifo_filter_data(uint8_t accel_fifo_filter,
struct bma4_dev *dev);
uint16_t bma4_set_accel_fifo_filter_data(uint8_t accel_fifo_filter, struct bma4_dev *dev);
/*!
* @brief This API reads the down sampling rates which is configured
@ -950,10 +939,9 @@ uint16_t bma4_get_fifo_length(uint16_t *fifo_length, struct bma4_dev *dev);
* @retval Any non zero value -> Fail
*
*/
uint16_t
bma4_second_if_mag_compensate_xyz(struct bma4_mag_fifo_data mag_fifo_data,
uint8_t mag_second_if,
struct bma4_mag *compensated_mag_data);
uint16_t bma4_second_if_mag_compensate_xyz(struct bma4_mag_fifo_data mag_fifo_data,
uint8_t mag_second_if,
struct bma4_mag *compensated_mag_data);
/*!
* @brief This API reads Mag. x,y and z axis data from either BMM150 or
@ -975,8 +963,7 @@ bma4_second_if_mag_compensate_xyz(struct bma4_mag_fifo_data mag_fifo_data,
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_read_mag_xyz(struct bma4_mag *mag, uint8_t sensor_select,
struct bma4_dev *dev);
uint16_t bma4_read_mag_xyz(struct bma4_mag *mag, uint8_t sensor_select, struct bma4_dev *dev);
/*!
* @brief This API reads the auxiliary I2C interface configuration which
@ -1069,8 +1056,7 @@ uint16_t bma4_get_mag_data_rdy(uint8_t *data_rdy, struct bma4_dev *dev);
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_get_asic_status(struct bma4_asic_status *asic_status,
struct bma4_dev *dev);
uint16_t bma4_get_asic_status(struct bma4_asic_status *asic_status, struct bma4_dev *dev);
/*!
* @brief This API enables the offset compensation for filtered and
@ -1136,8 +1122,7 @@ uint16_t bma4_get_offset_comp(uint8_t *offset_en, struct bma4_dev *dev);
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_extract_accel(struct bma4_accel *accel_data,
uint16_t *accel_length, const struct bma4_dev *dev);
uint16_t bma4_extract_accel(struct bma4_accel *accel_data, uint16_t *accel_length, const struct bma4_dev *dev);
/*!
* @brief This API parses and extracts the magnetometer frames from
@ -1163,8 +1148,7 @@ uint16_t bma4_extract_accel(struct bma4_accel *accel_data,
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_extract_mag(struct bma4_mag *mag_data, uint16_t *mag_length,
const struct bma4_dev *dev);
uint16_t bma4_extract_mag(struct bma4_mag *mag_data, uint16_t *mag_length, const struct bma4_dev *dev);
/*!
* @brief This API performs Fast Offset Compensation for Accel.
@ -1186,8 +1170,7 @@ uint16_t bma4_extract_mag(struct bma4_mag *mag_data, uint16_t *mag_length,
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_perform_accel_foc(const int32_t accel_g_value[3],
struct bma4_dev *dev);
uint16_t bma4_perform_accel_foc(const int32_t accel_g_value[3], struct bma4_dev *dev);
/*!
* @brief This API checks whether the self test functionality of the sensor
* is working or not
@ -1247,8 +1230,7 @@ uint16_t bma4_selftest_config(uint8_t sign, struct bma4_dev *dev);
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_map_interrupt(uint8_t int_line, uint16_t int_map, uint8_t enable,
struct bma4_dev *dev);
uint16_t bma4_map_interrupt(uint8_t int_line, uint16_t int_map, uint8_t enable, struct bma4_dev *dev);
/*!
* @brief This API sets the interrupt mode in the sensor.
@ -1323,8 +1305,7 @@ uint16_t bma4_get_interrupt_mode(uint8_t *mode, struct bma4_dev *dev);
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_set_aux_mag_config(const struct bma4_aux_mag_config *aux_mag,
struct bma4_dev *dev);
uint16_t bma4_set_aux_mag_config(const struct bma4_aux_mag_config *aux_mag, struct bma4_dev *dev);
/*!
* @brief This API reads the auxiliary Mag(BMM150 or AKM9916) output data
@ -1362,8 +1343,7 @@ uint16_t bma4_set_aux_mag_config(const struct bma4_aux_mag_config *aux_mag,
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_get_aux_mag_config(struct bma4_aux_mag_config *aux_mag,
struct bma4_dev *dev);
uint16_t bma4_get_aux_mag_config(struct bma4_aux_mag_config *aux_mag, struct bma4_dev *dev);
/*! @brief This API sets the FIFO configuration in the sensor.
*
@ -1392,8 +1372,7 @@ uint16_t bma4_get_aux_mag_config(struct bma4_aux_mag_config *aux_mag,
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_set_fifo_config(uint8_t config, uint8_t enable,
struct bma4_dev *dev);
uint16_t bma4_set_fifo_config(uint8_t config, uint8_t enable, struct bma4_dev *dev);
/*! @brief This API reads the FIFO configuration from the sensor.
*
@ -1462,9 +1441,8 @@ uint16_t bma4_get_fifo_config(uint8_t *fifo_config, struct bma4_dev *dev);
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t
bma4_set_int_pin_config(const struct bma4_int_pin_config *int_pin_config,
uint8_t int_line, struct bma4_dev *dev);
uint16_t bma4_set_int_pin_config(const struct bma4_int_pin_config *int_pin_config, uint8_t int_line,
struct bma4_dev *dev);
/*! @brief This API reads the electrical behavior of interrupt pin1 or pin2
* from the sensor.
@ -1505,12 +1483,10 @@ bma4_set_int_pin_config(const struct bma4_int_pin_config *int_pin_config,
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_get_int_pin_config(struct bma4_int_pin_config *int_pin_config,
uint8_t int_line, struct bma4_dev *dev);
uint16_t bma4_get_int_pin_config(struct bma4_int_pin_config *int_pin_config, uint8_t int_line, struct bma4_dev *dev);
/*!
* @brief This API reads the Feature and Hardware interrupt status from the
*sensor.
* @brief This API reads the Feature and Hardware interrupt status from the sensor.
*
* @param[out] int_status : Variable used to get the interrupt status.
* @param[in] dev : Structure instance of bma4_dev.
@ -1568,16 +1544,14 @@ uint16_t bma4_aux_interface_init(struct bma4_dev *dev);
* @param[in] len : User specified data length
* @param[out] aux_data : Pointer variable to store data read
* @param[in] aux_reg_addr : Variable to pass address from where
* data is to be
*read
* data is to be read
*
* @return Result of API execution status
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_aux_read(uint8_t aux_reg_addr, uint8_t *aux_data, uint16_t len,
struct bma4_dev *dev);
uint16_t bma4_aux_read(uint8_t aux_reg_addr, uint8_t *aux_data, uint16_t len, struct bma4_dev *dev);
/*!
* @brief This API writes the data into the auxiliary sensor
@ -1586,16 +1560,15 @@ uint16_t bma4_aux_read(uint8_t aux_reg_addr, uint8_t *aux_data, uint16_t len,
* @param[in] len : User specified data length
* @param[out] aux_data : Pointer variable to store data read
* @param[in] aux_reg_addr : Variable to pass address from where
* data is to be
*written
* data is to be written
*
* @return Result of API execution status
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*
*/
uint16_t bma4_aux_write(uint8_t aux_reg_addr, uint8_t *aux_data, uint16_t len,
struct bma4_dev *dev);
uint16_t bma4_aux_write(uint8_t aux_reg_addr, uint8_t *aux_data, uint16_t len, struct bma4_dev *dev);
#endif
/* End of __BMA4_H__ */

File diff suppressed because it is too large Load Diff

View File

@ -1,87 +1,87 @@
/*
*
****************************************************************************
* Copyright (C) 2017 - 2018 Bosch Sensortec GmbH
*
* File : bma423.h
*
* Date: 12 Oct 2017
*
* Revision : 1.1.4 $
*
* Usage: Sensor Driver for BMA423 sensor
*
****************************************************************************
*
* Disclaimer
*
* Common:
* Bosch Sensortec products are developed for the consumer goods industry.
* They may only be used within the parameters of the respective valid
* product data sheet. Bosch Sensortec products are provided with the
* express understanding that there is no warranty of fitness for a
* particular purpose.They are not fit for use in life-sustaining,
* safety or security sensitive systems or any system or device
* that may lead to bodily harm or property damage if the system
* or device malfunctions. In addition,Bosch Sensortec products are
* not fit for use in products which interact with motor vehicle systems.
* The resale and or use of products are at the purchasers own risk and
* his own responsibility. The examination of fitness for the intended use
* is the sole responsibility of the Purchaser.
*
* The purchaser shall indemnify Bosch Sensortec from all third party
* claims, including any claims for incidental, or consequential damages,
* arising from any product use not covered by the parameters of
* the respective valid product data sheet or not approved by
* Bosch Sensortec and reimburse Bosch Sensortec for all costs in
* connection with such claims.
*
* The purchaser must monitor the market for the purchased products,
* particularly with regard to product safety and inform Bosch Sensortec
* without delay of all security relevant incidents.
*
* Engineering Samples are marked with an asterisk (*) or (e).
* Samples may vary from the valid technical specifications of the product
* series. They are therefore not intended or fit for resale to third
* parties or for use in end products. Their sole purpose is internal
* client testing. The testing of an engineering sample may in no way
* replace the testing of a product series. Bosch Sensortec assumes
* no liability for the use of engineering samples.
* By accepting the engineering samples, the Purchaser agrees to indemnify
* Bosch Sensortec from all claims arising from the use of engineering
* samples.
*
* Special:
* This software module (hereinafter called "Software") and any information
* on application-sheets (hereinafter called "Information") is provided
* free of charge for the sole purpose to support your application work.
* The Software and Information is subject to the following
* terms and conditions:
*
* The Software is specifically designed for the exclusive use for
* Bosch Sensortec products by personnel who have special experience
* and training. Do not use this Software if you do not have the
* proper experience or training.
*
* This Software package is provided `` as is `` and without any expressed
* or implied warranties,including without limitation, the implied warranties
* of merchantability and fitness for a particular purpose.
*
* Bosch Sensortec and their representatives and agents deny any liability
* for the functional impairment
* of this Software in terms of fitness, performance and safety.
* Bosch Sensortec and their representatives and agents shall not be liable
* for any direct or indirect damages or injury, except as
* otherwise stipulated in mandatory applicable law.
*
* The Information provided is believed to be accurate and reliable.
* Bosch Sensortec assumes no responsibility for the consequences of use
* of such Information nor for any infringement of patents or
* other rights of third parties which may result from its use.
* No license is granted by implication or otherwise under any patent or
* patent rights of Bosch. Specifications mentioned in the Information are
* subject to change without notice.
**************************************************************************/
*
****************************************************************************
* Copyright (C) 2017 - 2018 Bosch Sensortec GmbH
*
* File : bma423.h
*
* Date: 12 Oct 2017
*
* Revision : 1.1.4 $
*
* Usage: Sensor Driver for BMA423 sensor
*
****************************************************************************
*
* Disclaimer
*
* Common:
* Bosch Sensortec products are developed for the consumer goods industry.
* They may only be used within the parameters of the respective valid
* product data sheet. Bosch Sensortec products are provided with the
* express understanding that there is no warranty of fitness for a
* particular purpose.They are not fit for use in life-sustaining,
* safety or security sensitive systems or any system or device
* that may lead to bodily harm or property damage if the system
* or device malfunctions. In addition,Bosch Sensortec products are
* not fit for use in products which interact with motor vehicle systems.
* The resale and or use of products are at the purchasers own risk and
* his own responsibility. The examination of fitness for the intended use
* is the sole responsibility of the Purchaser.
*
* The purchaser shall indemnify Bosch Sensortec from all third party
* claims, including any claims for incidental, or consequential damages,
* arising from any product use not covered by the parameters of
* the respective valid product data sheet or not approved by
* Bosch Sensortec and reimburse Bosch Sensortec for all costs in
* connection with such claims.
*
* The purchaser must monitor the market for the purchased products,
* particularly with regard to product safety and inform Bosch Sensortec
* without delay of all security relevant incidents.
*
* Engineering Samples are marked with an asterisk (*) or (e).
* Samples may vary from the valid technical specifications of the product
* series. They are therefore not intended or fit for resale to third
* parties or for use in end products. Their sole purpose is internal
* client testing. The testing of an engineering sample may in no way
* replace the testing of a product series. Bosch Sensortec assumes
* no liability for the use of engineering samples.
* By accepting the engineering samples, the Purchaser agrees to indemnify
* Bosch Sensortec from all claims arising from the use of engineering
* samples.
*
* Special:
* This software module (hereinafter called "Software") and any information
* on application-sheets (hereinafter called "Information") is provided
* free of charge for the sole purpose to support your application work.
* The Software and Information is subject to the following
* terms and conditions:
*
* The Software is specifically designed for the exclusive use for
* Bosch Sensortec products by personnel who have special experience
* and training. Do not use this Software if you do not have the
* proper experience or training.
*
* This Software package is provided `` as is `` and without any expressed
* or implied warranties,including without limitation, the implied warranties
* of merchantability and fitness for a particular purpose.
*
* Bosch Sensortec and their representatives and agents deny any liability
* for the functional impairment
* of this Software in terms of fitness, performance and safety.
* Bosch Sensortec and their representatives and agents shall not be liable
* for any direct or indirect damages or injury, except as
* otherwise stipulated in mandatory applicable law.
*
* The Information provided is believed to be accurate and reliable.
* Bosch Sensortec assumes no responsibility for the consequences of use
* of such Information nor for any infringement of patents or
* other rights of third parties which may result from its use.
* No license is granted by implication or otherwise under any patent or
* patent rights of Bosch. Specifications mentioned in the Information are
* subject to change without notice.
**************************************************************************/
/*! \file bma423.h
\brief Sensor Driver for BMA423 sensor */
#ifndef BMA423_H
@ -93,257 +93,258 @@ extern "C" {
#include "bma4.h"
/**\name Chip ID of BMA423 sensor */
#define BMA423_CHIP_ID UINT8_C(0x13)
#define BMA423_CHIP_ID UINT8_C(0x13)
/**\name Sensor feature size */
#define BMA423_FEATURE_SIZE UINT8_C(64)
#define BMA423_ANYMOTION_EN_LEN UINT8_C(2)
#define BMA423_RD_WR_MIN_LEN UINT8_C(2)
#define BMA423_FEATURE_SIZE UINT8_C(64)
#define BMA423_ANYMOTION_EN_LEN UINT8_C(2)
#define BMA423_RD_WR_MIN_LEN UINT8_C(2)
/**\name Feature offset address */
#define BMA423_ANY_NO_MOTION_OFFSET UINT8_C(0x00)
#define BMA423_STEP_CNTR_OFFSET UINT8_C(0x36)
#define BMA423_STEP_CNTR_PARAM_OFFSET UINT8_C(0x04)
#define BMA423_WAKEUP_OFFSET UINT8_C(0x38)
#define BMA423_TILT_OFFSET UINT8_C(0x3A)
#define BMA423_CONFIG_ID_OFFSET UINT8_C(0x3C)
#define BMA423_AXES_REMAP_OFFSET UINT8_C(0x3E)
#define BMA423_ANY_NO_MOTION_OFFSET UINT8_C(0x00)
#define BMA423_STEP_CNTR_OFFSET UINT8_C(0x36)
#define BMA423_STEP_CNTR_PARAM_OFFSET UINT8_C(0x04)
#define BMA423_WAKEUP_OFFSET UINT8_C(0x38)
#define BMA423_TILT_OFFSET UINT8_C(0x3A)
#define BMA423_CONFIG_ID_OFFSET UINT8_C(0x3C)
#define BMA423_AXES_REMAP_OFFSET UINT8_C(0x3E)
/**************************************************************/
/**\name Remap Axes */
/**************************************************************/
#define BMA423_X_AXIS_MASK UINT8_C(0x03)
#define BMA423_X_AXIS_SIGN_MASK UINT8_C(0x04)
#define BMA423_Y_AXIS_MASK UINT8_C(0x18)
#define BMA423_Y_AXIS_SIGN_MASK UINT8_C(0x20)
#define BMA423_Z_AXIS_MASK UINT8_C(0xC0)
#define BMA423_Z_AXIS_SIGN_MASK UINT8_C(0x01)
#define BMA423_X_AXIS_MASK UINT8_C(0x03)
#define BMA423_X_AXIS_SIGN_MASK UINT8_C(0x04)
#define BMA423_Y_AXIS_MASK UINT8_C(0x18)
#define BMA423_Y_AXIS_SIGN_MASK UINT8_C(0x20)
#define BMA423_Z_AXIS_MASK UINT8_C(0xC0)
#define BMA423_Z_AXIS_SIGN_MASK UINT8_C(0x01)
/**************************************************************/
/**\name Step Counter & Detector */
/**************************************************************/
/**\name Step counter enable macros */
#define BMA423_STEP_CNTR_EN_POS UINT8_C(4)
#define BMA423_STEP_CNTR_EN_MSK UINT8_C(0x10)
#define BMA423_ACTIVITY_EN_MSK UINT8_C(0x20)
#define BMA423_STEP_CNTR_EN_POS UINT8_C(4)
#define BMA423_STEP_CNTR_EN_MSK UINT8_C(0x10)
#define BMA423_ACTIVITY_EN_MSK UINT8_C(0x20)
/**\name Step counter watermark macros */
#define BMA423_STEP_CNTR_WM_MSK UINT16_C(0x03FF)
#define BMA423_STEP_CNTR_WM_MSK UINT16_C(0x03FF)
/**\name Step counter reset macros */
#define BMA423_STEP_CNTR_RST_POS UINT8_C(2)
#define BMA423_STEP_CNTR_RST_MSK UINT8_C(0x04)
#define BMA423_STEP_CNTR_RST_POS UINT8_C(2)
#define BMA423_STEP_CNTR_RST_MSK UINT8_C(0x04)
/**\name Step detector enable macros */
#define BMA423_STEP_DETECTOR_EN_POS UINT8_C(3)
#define BMA423_STEP_DETECTOR_EN_MSK UINT8_C(0x08)
#define BMA423_STEP_DETECTOR_EN_POS UINT8_C(3)
#define BMA423_STEP_DETECTOR_EN_MSK UINT8_C(0x08)
/**\name Tilt enable macros */
#define BMA423_TILT_EN_MSK UINT8_C(0x01)
#define BMA423_TILT_EN_MSK UINT8_C(0x01)
/**\name Step count output length*/
#define BMA423_STEP_CNTR_DATA_SIZE UINT16_C(4)
#define BMA423_STEP_CNTR_DATA_SIZE UINT16_C(4)
/**\name Wakeup enable macros */
#define BMA423_WAKEUP_EN_MSK UINT8_C(0x01)
#define BMA423_WAKEUP_EN_MSK UINT8_C(0x01)
/**\name Wake up sensitivity macros */
#define BMA423_WAKEUP_SENS_POS UINT8_C(1)
#define BMA423_WAKEUP_SENS_MSK UINT8_C(0x0E)
#define BMA423_WAKEUP_SENS_POS UINT8_C(1)
#define BMA423_WAKEUP_SENS_MSK UINT8_C(0x0E)
/**\name Tap selection macro */
#define BMA423_TAP_SEL_POS UINT8_C(4)
#define BMA423_TAP_SEL_MSK UINT8_C(0x10)
#define BMA423_TAP_SEL_POS UINT8_C(4)
#define BMA423_TAP_SEL_MSK UINT8_C(0x10)
/**************************************************************/
/**\name Any Motion */
/**************************************************************/
/**\name Any motion threshold macros */
#define BMA423_ANY_NO_MOTION_THRES_POS UINT8_C(0)
#define BMA423_ANY_NO_MOTION_THRES_MSK UINT16_C(0x07FF)
#define BMA423_ANY_NO_MOTION_THRES_POS UINT8_C(0)
#define BMA423_ANY_NO_MOTION_THRES_MSK UINT16_C(0x07FF)
/**\name Any motion selection macros */
#define BMA423_ANY_NO_MOTION_SEL_POS UINT8_C(3)
#define BMA423_ANY_NO_MOTION_SEL_MSK UINT8_C(0x08)
#define BMA423_ANY_NO_MOTION_SEL_POS UINT8_C(3)
#define BMA423_ANY_NO_MOTION_SEL_MSK UINT8_C(0x08)
/**\name Any motion enable macros */
#define BMA423_ANY_NO_MOTION_AXIS_EN_POS UINT8_C(5)
#define BMA423_ANY_NO_MOTION_AXIS_EN_MSK UINT8_C(0xE0)
#define BMA423_ANY_NO_MOTION_AXIS_EN_POS UINT8_C(5)
#define BMA423_ANY_NO_MOTION_AXIS_EN_MSK UINT8_C(0xE0)
/**\name Any motion duration macros */
#define BMA423_ANY_NO_MOTION_DUR_MSK UINT16_C(0x1FFF)
#define BMA423_ANY_NO_MOTION_DUR_MSK UINT16_C(0x1FFF)
/**************************************************************/
/**\name User macros */
/**************************************************************/
/**\name Anymotion/Nomotion axis enable macros */
#define BMA423_X_AXIS_EN UINT8_C(0x01)
#define BMA423_Y_AXIS_EN UINT8_C(0x02)
#define BMA423_Z_AXIS_EN UINT8_C(0x04)
#define BMA423_ALL_AXIS_EN UINT8_C(0x07)
#define BMA423_ALL_AXIS_DIS UINT8_C(0x00)
#define BMA423_X_AXIS_EN UINT8_C(0x01)
#define BMA423_Y_AXIS_EN UINT8_C(0x02)
#define BMA423_Z_AXIS_EN UINT8_C(0x04)
#define BMA423_ALL_AXIS_EN UINT8_C(0x07)
#define BMA423_ALL_AXIS_DIS UINT8_C(0x00)
/**\name Feature enable macros for the sensor */
#define BMA423_STEP_CNTR UINT8_C(0x01)
#define BMA423_STEP_CNTR UINT8_C(0x01)
/**\name Below macros are mutually exclusive */
#define BMA423_ANY_MOTION UINT8_C(0x02)
#define BMA423_NO_MOTION UINT8_C(0x04)
#define BMA423_ACTIVITY UINT8_C(0x08)
#define BMA423_TILT UINT8_C(0x10)
#define BMA423_WAKEUP UINT8_C(0x20)
#define BMA423_ANY_MOTION UINT8_C(0x02)
#define BMA423_NO_MOTION UINT8_C(0x04)
#define BMA423_ACTIVITY UINT8_C(0x08)
#define BMA423_TILT UINT8_C(0x10)
#define BMA423_WAKEUP UINT8_C(0x20)
/**\name Interrupt status macros */
#define BMA423_STEP_CNTR_INT UINT8_C(0x02)
#define BMA423_ACTIVITY_INT UINT8_C(0x04)
#define BMA423_TILT_INT UINT8_C(0x08)
#define BMA423_WAKEUP_INT UINT8_C(0x20)
#define BMA423_ANY_NO_MOTION_INT UINT8_C(0x40)
#define BMA423_ERROR_INT UINT8_C(0x80)
#define BMA423_STEP_CNTR_INT UINT8_C(0x02)
#define BMA423_ACTIVITY_INT UINT8_C(0x04)
#define BMA423_TILT_INT UINT8_C(0x08)
#define BMA423_WAKEUP_INT UINT8_C(0x20)
#define BMA423_ANY_NO_MOTION_INT UINT8_C(0x40)
#define BMA423_ERROR_INT UINT8_C(0x80)
/**\name Activity recognition macros */
#define BMA423_USER_STATIONARY UINT8_C(0x00)
#define BMA423_USER_WALKING UINT8_C(0x01)
#define BMA423_USER_RUNNING UINT8_C(0x02)
#define BMA423_STATE_INVALID UINT8_C(0x03)
#define BMA423_USER_STATIONARY UINT8_C(0x00)
#define BMA423_USER_WALKING UINT8_C(0x01)
#define BMA423_USER_RUNNING UINT8_C(0x02)
#define BMA423_STATE_INVALID UINT8_C(0x03)
/**\name Configuration selection macros */
#define BMA423_PHONE_CONFIG UINT8_C(0x00)
#define BMA423_WRIST_CONFIG UINT8_C(0x01)
#define BMA423_PHONE_CONFIG UINT8_C(0x00)
#define BMA423_WRIST_CONFIG UINT8_C(0x01)
/**\name Step counter parameter setting(1-25) for phone */
#define BMA423_PHONE_SC_PARAM_1 UINT16_C(0x132)
#define BMA423_PHONE_SC_PARAM_2 UINT16_C(0x78E6)
#define BMA423_PHONE_SC_PARAM_3 UINT16_C(0x84)
#define BMA423_PHONE_SC_PARAM_4 UINT16_C(0x6C9C)
#define BMA423_PHONE_SC_PARAM_5 UINT8_C(0x07)
#define BMA423_PHONE_SC_PARAM_6 UINT16_C(0x7564)
#define BMA423_PHONE_SC_PARAM_7 UINT16_C(0x7EAA)
#define BMA423_PHONE_SC_PARAM_8 UINT16_C(0x55F)
#define BMA423_PHONE_SC_PARAM_9 UINT16_C(0xABE)
#define BMA423_PHONE_SC_PARAM_10 UINT16_C(0x55F)
#define BMA423_PHONE_SC_PARAM_11 UINT16_C(0xE896)
#define BMA423_PHONE_SC_PARAM_12 UINT16_C(0x41EF)
#define BMA423_PHONE_SC_PARAM_13 UINT8_C(0x01)
#define BMA423_PHONE_SC_PARAM_14 UINT8_C(0x0C)
#define BMA423_PHONE_SC_PARAM_15 UINT8_C(0x0C)
#define BMA423_PHONE_SC_PARAM_16 UINT8_C(0x4A)
#define BMA423_PHONE_SC_PARAM_17 UINT8_C(0xA0)
#define BMA423_PHONE_SC_PARAM_18 UINT8_C(0x00)
#define BMA423_PHONE_SC_PARAM_19 UINT8_C(0x0C)
#define BMA423_PHONE_SC_PARAM_20 UINT16_C(0x3CF0)
#define BMA423_PHONE_SC_PARAM_21 UINT16_C(0x100)
#define BMA423_PHONE_SC_PARAM_22 UINT8_C(0x00)
#define BMA423_PHONE_SC_PARAM_23 UINT8_C(0x00)
#define BMA423_PHONE_SC_PARAM_24 UINT8_C(0x00)
#define BMA423_PHONE_SC_PARAM_25 UINT8_C(0x00)
#define BMA423_PHONE_SC_PARAM_1 UINT16_C(0x132)
#define BMA423_PHONE_SC_PARAM_2 UINT16_C(0x78E6)
#define BMA423_PHONE_SC_PARAM_3 UINT16_C(0x84)
#define BMA423_PHONE_SC_PARAM_4 UINT16_C(0x6C9C)
#define BMA423_PHONE_SC_PARAM_5 UINT8_C(0x07)
#define BMA423_PHONE_SC_PARAM_6 UINT16_C(0x7564)
#define BMA423_PHONE_SC_PARAM_7 UINT16_C(0x7EAA)
#define BMA423_PHONE_SC_PARAM_8 UINT16_C(0x55F)
#define BMA423_PHONE_SC_PARAM_9 UINT16_C(0xABE)
#define BMA423_PHONE_SC_PARAM_10 UINT16_C(0x55F)
#define BMA423_PHONE_SC_PARAM_11 UINT16_C(0xE896)
#define BMA423_PHONE_SC_PARAM_12 UINT16_C(0x41EF)
#define BMA423_PHONE_SC_PARAM_13 UINT8_C(0x01)
#define BMA423_PHONE_SC_PARAM_14 UINT8_C(0x0C)
#define BMA423_PHONE_SC_PARAM_15 UINT8_C(0x0C)
#define BMA423_PHONE_SC_PARAM_16 UINT8_C(0x4A)
#define BMA423_PHONE_SC_PARAM_17 UINT8_C(0xA0)
#define BMA423_PHONE_SC_PARAM_18 UINT8_C(0x00)
#define BMA423_PHONE_SC_PARAM_19 UINT8_C(0x0C)
#define BMA423_PHONE_SC_PARAM_20 UINT16_C(0x3CF0)
#define BMA423_PHONE_SC_PARAM_21 UINT16_C(0x100)
#define BMA423_PHONE_SC_PARAM_22 UINT8_C(0x00)
#define BMA423_PHONE_SC_PARAM_23 UINT8_C(0x00)
#define BMA423_PHONE_SC_PARAM_24 UINT8_C(0x00)
#define BMA423_PHONE_SC_PARAM_25 UINT8_C(0x00)
/**\name Step counter parameter setting(1-25) for wrist (Default) */
#define BMA423_WRIST_SC_PARAM_1 UINT16_C(0x12D)
#define BMA423_WRIST_SC_PARAM_2 UINT16_C(0x7BD4)
#define BMA423_WRIST_SC_PARAM_3 UINT16_C(0x13B)
#define BMA423_WRIST_SC_PARAM_4 UINT16_C(0x7ADB)
#define BMA423_WRIST_SC_PARAM_5 UINT8_C(0x04)
#define BMA423_WRIST_SC_PARAM_6 UINT16_C(0x7B3F)
#define BMA423_WRIST_SC_PARAM_7 UINT16_C(0x6CCD)
#define BMA423_WRIST_SC_PARAM_8 UINT16_C(0x4C3)
#define BMA423_WRIST_SC_PARAM_9 UINT16_C(0x985)
#define BMA423_WRIST_SC_PARAM_10 UINT16_C(0x4C3)
#define BMA423_WRIST_SC_PARAM_11 UINT16_C(0xE6EC)
#define BMA423_WRIST_SC_PARAM_12 UINT16_C(0x460C)
#define BMA423_WRIST_SC_PARAM_13 UINT8_C(0x01)
#define BMA423_WRIST_SC_PARAM_14 UINT8_C(0x27)
#define BMA423_WRIST_SC_PARAM_15 UINT8_C(0x19)
#define BMA423_WRIST_SC_PARAM_16 UINT8_C(0x96)
#define BMA423_WRIST_SC_PARAM_17 UINT8_C(0xA0)
#define BMA423_WRIST_SC_PARAM_18 UINT8_C(0x01)
#define BMA423_WRIST_SC_PARAM_19 UINT8_C(0x0C)
#define BMA423_WRIST_SC_PARAM_20 UINT16_C(0x3CF0)
#define BMA423_WRIST_SC_PARAM_21 UINT16_C(0x100)
#define BMA423_WRIST_SC_PARAM_22 UINT8_C(0x01)
#define BMA423_WRIST_SC_PARAM_23 UINT8_C(0x03)
#define BMA423_WRIST_SC_PARAM_24 UINT8_C(0x01)
#define BMA423_WRIST_SC_PARAM_25 UINT8_C(0x0E)
#define BMA423_WRIST_SC_PARAM_1 UINT16_C(0x12D)
#define BMA423_WRIST_SC_PARAM_2 UINT16_C(0x7BD4)
#define BMA423_WRIST_SC_PARAM_3 UINT16_C(0x13B)
#define BMA423_WRIST_SC_PARAM_4 UINT16_C(0x7ADB)
#define BMA423_WRIST_SC_PARAM_5 UINT8_C(0x04)
#define BMA423_WRIST_SC_PARAM_6 UINT16_C(0x7B3F)
#define BMA423_WRIST_SC_PARAM_7 UINT16_C(0x6CCD)
#define BMA423_WRIST_SC_PARAM_8 UINT16_C(0x4C3)
#define BMA423_WRIST_SC_PARAM_9 UINT16_C(0x985)
#define BMA423_WRIST_SC_PARAM_10 UINT16_C(0x4C3)
#define BMA423_WRIST_SC_PARAM_11 UINT16_C(0xE6EC)
#define BMA423_WRIST_SC_PARAM_12 UINT16_C(0x460C)
#define BMA423_WRIST_SC_PARAM_13 UINT8_C(0x01)
#define BMA423_WRIST_SC_PARAM_14 UINT8_C(0x27)
#define BMA423_WRIST_SC_PARAM_15 UINT8_C(0x19)
#define BMA423_WRIST_SC_PARAM_16 UINT8_C(0x96)
#define BMA423_WRIST_SC_PARAM_17 UINT8_C(0xA0)
#define BMA423_WRIST_SC_PARAM_18 UINT8_C(0x01)
#define BMA423_WRIST_SC_PARAM_19 UINT8_C(0x0C)
#define BMA423_WRIST_SC_PARAM_20 UINT16_C(0x3CF0)
#define BMA423_WRIST_SC_PARAM_21 UINT16_C(0x100)
#define BMA423_WRIST_SC_PARAM_22 UINT8_C(0x01)
#define BMA423_WRIST_SC_PARAM_23 UINT8_C(0x03)
#define BMA423_WRIST_SC_PARAM_24 UINT8_C(0x01)
#define BMA423_WRIST_SC_PARAM_25 UINT8_C(0x0E)
/*!
* @brief Any motion configuration
*/
struct bma423_anymotion_config {
/*! Expressed in 50 Hz samples (20 ms) */
uint16_t duration;
/*! Threshold value for Any-motion / No-motion detection in
5.11g format */
uint16_t threshold;
/*! Indicates if No-motion or Any-motion is selected */
uint8_t nomotion_sel;
/*! Expressed in 50 Hz samples (20 ms) */
uint16_t duration;
/*! Threshold value for Any-motion / No-motion detection in
5.11g format */
uint16_t threshold;
/*! Indicates if No-motion or Any-motion is selected */
uint8_t nomotion_sel;
};
/*!
* @brief Axes remapping configuration
*/
struct bma423_axes_remap {
uint8_t x_axis;
uint8_t x_axis_sign;
uint8_t y_axis;
uint8_t y_axis_sign;
uint8_t z_axis;
uint8_t z_axis_sign;
uint8_t x_axis;
uint8_t x_axis_sign;
uint8_t y_axis;
uint8_t y_axis_sign;
uint8_t z_axis;
uint8_t z_axis_sign;
};
/*!
* @brief Step counter param settings
*/
struct bma423_stepcounter_settings {
/*! Step Counter param 1 */
uint16_t param1;
/*! Step Counter param 2 */
uint16_t param2;
/*! Step Counter param 3 */
uint16_t param3;
/*! Step Counter param 4 */
uint16_t param4;
/*! Step Counter param 5 */
uint16_t param5;
/*! Step Counter param 6 */
uint16_t param6;
/*! Step Counter param 7 */
uint16_t param7;
/*! Step Counter param 8 */
uint16_t param8;
/*! Step Counter param 9 */
uint16_t param9;
/*! Step Counter param 10 */
uint16_t param10;
/*! Step Counter param 11 */
uint16_t param11;
/*! Step Counter param 12 */
uint16_t param12;
/*! Step Counter param 13 */
uint16_t param13;
/*! Step Counter param 14 */
uint16_t param14;
/*! Step Counter param 15 */
uint16_t param15;
/*! Step Counter param 16 */
uint16_t param16;
/*! Step Counter param 17 */
uint16_t param17;
/*! Step Counter param 18 */
uint16_t param18;
/*! Step Counter param 19 */
uint16_t param19;
/*! Step Counter param 20 */
uint16_t param20;
/*! Step Counter param 21 */
uint16_t param21;
/*! Step Counter param 22 */
uint16_t param22;
/*! Step Counter param 23 */
uint16_t param23;
/*! Step Counter param 24 */
uint16_t param24;
/*! Step Counter param 25 */
uint16_t param25;
/*! Step Counter param 1 */
uint16_t param1;
/*! Step Counter param 2 */
uint16_t param2;
/*! Step Counter param 3 */
uint16_t param3;
/*! Step Counter param 4 */
uint16_t param4;
/*! Step Counter param 5 */
uint16_t param5;
/*! Step Counter param 6 */
uint16_t param6;
/*! Step Counter param 7 */
uint16_t param7;
/*! Step Counter param 8 */
uint16_t param8;
/*! Step Counter param 9 */
uint16_t param9;
/*! Step Counter param 10 */
uint16_t param10;
/*! Step Counter param 11 */
uint16_t param11;
/*! Step Counter param 12 */
uint16_t param12;
/*! Step Counter param 13 */
uint16_t param13;
/*! Step Counter param 14 */
uint16_t param14;
/*! Step Counter param 15 */
uint16_t param15;
/*! Step Counter param 16 */
uint16_t param16;
/*! Step Counter param 17 */
uint16_t param17;
/*! Step Counter param 18 */
uint16_t param18;
/*! Step Counter param 19 */
uint16_t param19;
/*! Step Counter param 20 */
uint16_t param20;
/*! Step Counter param 21 */
uint16_t param21;
/*! Step Counter param 22 */
uint16_t param22;
/*! Step Counter param 23 */
uint16_t param23;
/*! Step Counter param 24 */
uint16_t param24;
/*! Step Counter param 25 */
uint16_t param25;
};
/*!
@ -384,6 +385,7 @@ uint16_t bma423_write_config_file(struct bma4_dev *dev);
*/
uint16_t bma423_get_config_id(uint16_t *config_id, struct bma4_dev *dev);
/*!
* @brief This API sets/unsets the user provided interrupt to either
* interrupt pin1 or pin2 in the sensor.
@ -420,8 +422,7 @@ uint16_t bma423_get_config_id(uint16_t *config_id, struct bma4_dev *dev);
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t bma423_map_interrupt(uint8_t int_line, uint16_t int_map,
uint8_t enable, struct bma4_dev *dev);
uint16_t bma423_map_interrupt(uint8_t int_line, uint16_t int_map, uint8_t enable, struct bma4_dev *dev);
/*!
* @brief This API reads the bma423 interrupt status from the sensor.
@ -478,8 +479,8 @@ uint16_t bma423_read_int_status(uint16_t *int_status, struct bma4_dev *dev);
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t bma423_feature_enable(uint8_t feature, uint8_t enable,
struct bma4_dev *dev);
uint16_t bma423_feature_enable(uint8_t feature, uint8_t enable, struct bma4_dev *dev);
/*!
* @brief This API performs x, y and z axis remapping in the sensor.
@ -491,8 +492,7 @@ uint16_t bma423_feature_enable(uint8_t feature, uint8_t enable,
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t bma423_set_remap_axes(const struct bma423_axes_remap *remap_data,
struct bma4_dev *dev);
uint16_t bma423_set_remap_axes(const struct bma423_axes_remap *remap_data, struct bma4_dev *dev);
/*!
* @brief This API reads the x, y and z axis remap data from the sensor.
@ -505,8 +505,8 @@ uint16_t bma423_set_remap_axes(const struct bma423_axes_remap *remap_data,
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t bma423_get_remap_axes(struct bma423_axes_remap *remap_data,
struct bma4_dev *dev);
uint16_t bma423_get_remap_axes(struct bma423_axes_remap *remap_data, struct bma4_dev *dev);
/*!
* @brief This API sets the watermark level for step counter
@ -522,8 +522,7 @@ uint16_t bma423_get_remap_axes(struct bma423_axes_remap *remap_data,
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t bma423_step_counter_set_watermark(uint16_t step_counter_wm,
struct bma4_dev *dev);
uint16_t bma423_step_counter_set_watermark(uint16_t step_counter_wm, struct bma4_dev *dev);
/*!
* @brief This API gets the water mark level set for step counter interrupt
@ -539,8 +538,7 @@ uint16_t bma423_step_counter_set_watermark(uint16_t step_counter_wm,
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t bma423_step_counter_get_watermark(uint16_t *step_counter_wm,
struct bma4_dev *dev);
uint16_t bma423_step_counter_get_watermark(uint16_t *step_counter_wm, struct bma4_dev *dev);
/*!
* @brief This API resets the counted steps of step counter.
@ -615,9 +613,7 @@ uint16_t bma423_select_platform(uint8_t platform, struct bma4_dev *dev);
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t
bma423_stepcounter_get_parameter(struct bma423_stepcounter_settings *setting,
struct bma4_dev *dev);
uint16_t bma423_stepcounter_get_parameter(struct bma423_stepcounter_settings *setting, struct bma4_dev *dev);
/*!
* @brief This API sets the parameter1 to parameter7 settings of the
@ -631,8 +627,7 @@ bma423_stepcounter_get_parameter(struct bma423_stepcounter_settings *setting,
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t bma423_stepcounter_set_parameter(
const struct bma423_stepcounter_settings *setting, struct bma4_dev *dev);
uint16_t bma423_stepcounter_set_parameter(const struct bma423_stepcounter_settings *setting, struct bma4_dev *dev);
/*!
* @brief This API enables or disables the step detector feature in the
@ -708,9 +703,7 @@ uint16_t bma423_anymotion_enable_axis(uint8_t axis, struct bma4_dev *dev);
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t
bma423_set_any_motion_config(const struct bma423_anymotion_config *any_motion,
struct bma4_dev *dev);
uint16_t bma423_set_any_motion_config(const struct bma423_anymotion_config *any_motion, struct bma4_dev *dev);
/*! @brief This API gets the configuration of any motion feature from
* the sensor.
@ -748,9 +741,7 @@ bma423_set_any_motion_config(const struct bma423_anymotion_config *any_motion,
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t
bma423_get_any_motion_config(struct bma423_anymotion_config *any_motion,
struct bma4_dev *dev);
uint16_t bma423_get_any_motion_config(struct bma423_anymotion_config *any_motion, struct bma4_dev *dev);
/*!
* @brief This API sets the sensitivity of wake up feature in the sensor
@ -767,8 +758,7 @@ bma423_get_any_motion_config(struct bma423_anymotion_config *any_motion,
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t bma423_wakeup_set_sensitivity(uint8_t sensitivity,
struct bma4_dev *dev);
uint16_t bma423_wakeup_set_sensitivity(uint8_t sensitivity, struct bma4_dev *dev);
/*!
* @brief This API gets the sensitivity of wake up feature in the sensor
@ -785,8 +775,7 @@ uint16_t bma423_wakeup_set_sensitivity(uint8_t sensitivity,
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t bma423_wakeup_get_sensitivity(uint8_t *sensitivity,
struct bma4_dev *dev);
uint16_t bma423_wakeup_get_sensitivity(uint8_t *sensitivity, struct bma4_dev *dev);
/*!
* @brief This API is used to select single/double tap

File diff suppressed because it is too large Load Diff

View File

@ -1,81 +1,59 @@
#ifndef CONFIG_H
#define CONFIG_H
// Versioning
#define WATCHY_LIB_VER "1.4.10"
//pins
#if !defined(ARDUINO_WATCHY_V10) && !defined(ARDUINO_WATCHY_V15) && !defined(ARDUINO_WATCHY_V20)
#pragma message "Please install the latest ESP32 Arduino Core (2.0.5+) and choose Watchy as the target board"
#pragma message "Hardware revision is not defined at the project level, please define in config.h. Defaulting to ARDUINO_WATCHY_V20"
//Change to your board version
#define ARDUINO_WATCHY_V20
#define SDA 21
#define SCL 22
#define ADC_PIN 33
#define RTC_PIN GPIO_NUM_27
#define CS 5
#define DC 10
#define RESET 9
#define BUSY 19
#define VIB_MOTOR_PIN 13
#define MENU_BTN_PIN 26
#define BACK_BTN_PIN 25
#define UP_BTN_PIN 32
#define DOWN_BTN_PIN 4
#define DISPLAY_CS 5
#define DISPLAY_RES 9
#define DISPLAY_DC 10
#define DISPLAY_BUSY 19
#define ACC_INT_1_PIN 14
#define ACC_INT_2_PIN 12
#define VIB_MOTOR_PIN 13
#define RTC_INT_PIN 27
#if defined (ARDUINO_WATCHY_V10)
#define UP_BTN_PIN 32
#define BATT_ADC_PIN 33
#define UP_BTN_MASK GPIO_SEL_32
#define RTC_TYPE 1 //DS3231
#elif defined (ARDUINO_WATCHY_V15)
#define UP_BTN_PIN 32
#define BATT_ADC_PIN 35
#define UP_BTN_MASK GPIO_SEL_32
#define RTC_TYPE 2 //PCF8563
#elif defined (ARDUINO_WATCHY_V20)
#define UP_BTN_PIN 35
#define BATT_ADC_PIN 34
#define UP_BTN_MASK GPIO_SEL_35
#define RTC_TYPE 2 //PCF8563
#endif
#define MENU_BTN_MASK GPIO_SEL_26
#define BACK_BTN_MASK GPIO_SEL_25
#define UP_BTN_MASK GPIO_SEL_32
#define DOWN_BTN_MASK GPIO_SEL_4
#define ACC_INT_MASK GPIO_SEL_14
#define BTN_PIN_MASK MENU_BTN_MASK|BACK_BTN_MASK|UP_BTN_MASK|DOWN_BTN_MASK
#endif
#define ACC_INT_MASK GPIO_SEL_14
#define BTN_PIN_MASK MENU_BTN_MASK|BACK_BTN_MASK|UP_BTN_MASK|DOWN_BTN_MASK
//display
#define DISPLAY_WIDTH 200
#define DISPLAY_HEIGHT 200
// wifi
//weather api
#define CITY_NAME "NEW+YORK" //if your city name has a space, replace with '+'
#define COUNTRY_CODE "US"
#define OPENWEATHERMAP_APIKEY "f058fe1cad2afe8e2ddc5d063a64cecb" //use your own API key :)
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?q="
#define TEMP_UNIT "metric" //use "imperial" for Fahrenheit"
//wifi
#define WIFI_AP_TIMEOUT 60
#define WIFI_AP_SSID "Watchy AP"
// menu
#define WIFI_AP_SSID "Watchy AP"
//menu
#define WATCHFACE_STATE -1
#define MAIN_MENU_STATE 0
#define APP_STATE 1
#define APP_STATE 1
#define FW_UPDATE_STATE 2
#define MENU_HEIGHT 25
#define MENU_LENGTH 7
// set time
#define SET_HOUR 0
#define MENU_HEIGHT 30
#define MENU_LENGTH 6
//set time
#define SET_HOUR 0
#define SET_MINUTE 1
#define SET_YEAR 2
#define SET_MONTH 3
#define SET_DAY 4
#define HOUR_12_24 24
// BLE OTA
#define BLE_DEVICE_NAME "Watchy BLE OTA"
#define WATCHFACE_NAME "Watchy 7 Segment"
#define SET_YEAR 2
#define SET_MONTH 3
#define SET_DAY 4
#define YEAR_OFFSET 1970
//BLE OTA
#define BLE_DEVICE_NAME "Watchy BLE OTA"
#define WATCHFACE_NAME "Watchy 7 Segment"
#define SOFTWARE_VERSION_MAJOR 1
#define SOFTWARE_VERSION_MINOR 0
#define SOFTWARE_VERSION_PATCH 0
#define HARDWARE_VERSION_MAJOR 1
#define HARDWARE_VERSION_MINOR 0
#endif

View File

@ -1,4 +0,0 @@
#!/ bin / bash
STYLE_OPT = "{BasedOnStyle: llvm, AlignConsecutiveMacros: true, "
"AlignConsecutiveAssignments: true}" clang -
format-- style = "$STYLE_OPT" - i *