This commit is contained in:
shhds 2023-06-12 15:10:45 +08:00
parent d56d7b2d4f
commit fc4f54334d
37 changed files with 13805 additions and 701 deletions

12
.vscode/settings.json vendored
View File

@ -1,12 +0,0 @@
{
"files.associations": {
"imagedata.h": "c",
"epd_5in65f.h": "c",
"gui_paint.h": "c",
"math.h": "c",
"dev_config.h": "c",
"epd_4in37g.h": "c",
"epd_test.h": "c",
"epd_3in0g.h": "c"
}
}

View File

@ -0,0 +1,244 @@
/*****************************************************************************
* | File : EPD_2in13g.c
* | Author : Waveshare team
* | Function : 2inch13 e-paper (G)
* | Info :
*----------------
* | This version: V1.0
* | Date : 2023-05-29
* | Info :
* -----------------------------------------------------------------------------
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation 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
# furished 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 OR 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.
#
******************************************************************************/
#include "EPD_2in13g.h"
#include <stdlib.h>
Epd::~Epd() {
};
Epd::Epd() {
reset_pin = RST_PIN;
dc_pin = DC_PIN;
cs_pin = CS_PIN;
busy_pin = BUSY_PIN;
WIDTH = EPD_2IN13G_WIDTH;
HEIGHT = EPD_2IN13G_HEIGHT;
};
/******************************************************************************
function : Software reset
parameter:
******************************************************************************/
void Epd::Reset(void)
{
DigitalWrite(RST_PIN, 1);
DelayMs(200);
DigitalWrite(RST_PIN, 0);
DelayMs(2);
DigitalWrite(RST_PIN, 1);
DelayMs(200);
}
/******************************************************************************
function : send command
parameter:
Reg : Command register
******************************************************************************/
void Epd::SendCommand(UBYTE Reg)
{
DigitalWrite(DC_PIN, 0);
DigitalWrite(CS_PIN, 0);
SpiTransfer(Reg);
DigitalWrite(CS_PIN, 1);
}
/******************************************************************************
function : send data
parameter:
Data : Write data
******************************************************************************/
void Epd::SendData(UBYTE Data)
{
DigitalWrite(DC_PIN, 1);
DigitalWrite(CS_PIN, 0);
SpiTransfer(Data);
DigitalWrite(CS_PIN, 1);
}
/******************************************************************************
function : Wait until the busy_pin goes HIGH
parameter:
******************************************************************************/
void Epd::ReadBusy(void)
{
DelayMs(100);
Serial.println("busy");
while(DigitalRead(BUSY_PIN) != 1) { //HIGH: idle, LOW: busy
DelayMs(100);
}
Serial.println("idie");
}
/******************************************************************************
function : Turn On Display
parameter:
******************************************************************************/
void Epd::TurnOnDisplay(void)
{
SendCommand(0x12); // DISPLAY_REFRESH
SendData(0x00);
ReadBusy();
}
/******************************************************************************
function : Setting the display window
parameter:
******************************************************************************/
void Epd::SetWindows(void)
{
SendCommand(0x61); //TRES
SendData(Source_BITS/256); // EPD_2IN13G_WIDTH_H
SendData(Source_BITS%256); // EPD_2IN13G_WIDTH_L
SendData(EPD_2IN13G_HEIGHT/256); // EPD_2IN13G_HEIGHT_H
SendData(EPD_2IN13G_HEIGHT%256); // EPD_2IN13G_HEIGHT_L
}
/******************************************************************************
function : Initialize the e-Paper register
parameter:
******************************************************************************/
int Epd::Init(void)
{
if (IfInit() != 0) {
return -1;
}
Reset();
ReadBusy();
SendCommand(0x4D);
SendData(0x78);
SendCommand(0x00); //PSR
SendData(0x0F);
SendData(0x29);
SendCommand(0x01); //PWRR
SendData(0x07);
SendData(0x00);
SendCommand(0x03); //POFS
SendData(0x10);
SendData(0x54);
SendData(0x44);
SendCommand(0x06); //BTST_P
SendData(0x05);
SendData(0x00);
SendData(0x3F);
SendData(0x0A);
SendData(0x25);
SendData(0x12);
SendData(0x1A);
SendCommand(0x50); //CDI
SendData(0x37);
SendCommand(0x60); //TCON
SendData(0x02);
SendData(0x02);
SetWindows(); // Setting the display window
SendCommand(0xE7);
SendData(0x1C);
SendCommand(0xE3);
SendData(0x22);
SendCommand(0xB4);
SendData(0xD0);
SendCommand(0xB5);
SendData(0x03);
SendCommand(0xE9);
SendData(0x01);
SendCommand(0x30);
SendData(0x08);
SendCommand(0x04);
ReadBusy();
return 0;
}
/******************************************************************************
function : Clear screen
parameter:
******************************************************************************/
void Epd::Clear(UBYTE color)
{
UWORD Width, Height;
Width = Source_BITS / 4 ;
Height = EPD_2IN13G_HEIGHT;
SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < Width; i++) {
SendData((color << 6) | (color << 4) | (color << 2) | color);
}
}
TurnOnDisplay();
}
/******************************************************************************
function : Sends the image buffer in RAM to e-Paper and displays
parameter:
******************************************************************************/
void Epd::Display(const UBYTE *Image)
{
UWORD Width, Height;
Width = (EPD_2IN13G_WIDTH % 4 == 0)? (EPD_2IN13G_WIDTH / 4 ): (EPD_2IN13G_WIDTH / 4 + 1);
Height = EPD_2IN13G_HEIGHT;
SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < (Source_BITS/4); i++) {
if(i < 31 )
SendData(pgm_read_byte(&Image[i + j * Width]));
else SendData(0x00);
}
}
TurnOnDisplay();
}
/******************************************************************************
function : Enter sleep mode
parameter:
******************************************************************************/
void Epd::Sleep(void)
{
SendCommand(0x02); //power off
ReadBusy(); //waiting for the electronic paper IC to release the idle signal
DelayMs(100); //!!!The delay here is necessary,100mS at least!!!
SendCommand(0x07); //deep sleep
SendData(0XA5);
}

View File

@ -0,0 +1,58 @@
/*****************************************************************************
* | File : EPD_2in13g.h
* | Author : Waveshare team
* | Function : 2inch13 e-paper (G)
* | Info :
*----------------
* | This version: V1.0
* | Date : 2023-05-29
* | Info :
* -----------------------------------------------------------------------------
******************************************************************************/
#ifndef __EPD_2IN13G_H_
#define __EPD_2IN13G_H_
#include "epdif.h"
// Display resolution
#define EPD_2IN13G_WIDTH 122
#define EPD_2IN13G_HEIGHT 250
#define UWORD unsigned int
#define UBYTE unsigned char
#define UDOUBLE unsigned long
// Color
#define BLACK 0x0
#define WHITE 0x1
#define YELLOW 0x2
#define RED 0x3
#define Source_BITS 128
class Epd : EpdIf {
public:
unsigned long WIDTH;
unsigned long HEIGHT;
Epd();
~Epd();
int Init();
void SendCommand(unsigned char command);
void SendData(unsigned char data);
void Reset(void);
void SetWindows(void);
void ReadBusy(void);
void TurnOnDisplay(void);
void Clear(UBYTE color);
void Display(const UBYTE *Image);
void Sleep(void);
private:
unsigned int reset_pin;
unsigned int dc_pin;
unsigned int cs_pin;
unsigned int busy_pin;
};
#endif /* EPD4IN37_H */
/* END OF FILE */

View File

@ -0,0 +1,60 @@
/**
* @filename : epd2in36g-demo.ino
* @brief : 2.36inch e-Paper (G) display demo
* @author : Waveshare
*
* Copyright (C) Waveshare 2023-05-29
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation 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
* furished 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 OR 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.
*/
#include <SPI.h>
#include "EPD_2in13g.h"
#include "imagedata.h"
Epd epd;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.print("e-Paper init \r\n");
if (epd.Init() != 0) {
Serial.print("e-Paper init failed");
return;
}
Serial.print("White \r\n");
epd.Clear(WHITE);
delay(2000);
Serial.print("Small Image \r\n");
epd.Display(gImage_2in13g);
delay(2000);
Serial.print("Clear...\r\n");
epd.Clear(WHITE);
delay(2000);
Serial.print("Goto Sleep...\r\n");
epd.Sleep();
}
void loop() {
}

View File

@ -0,0 +1,64 @@
/**
* @filename : epdif.cpp
* @brief : Implements EPD interface functions
* Users have to implement all the functions in epdif.cpp
* @author : Yehui from Waveshare
*
* Copyright (C) Waveshare August 10 2017
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation 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
* furished 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 OR 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.
*/
#include "epdif.h"
#include <spi.h>
EpdIf::EpdIf() {
};
EpdIf::~EpdIf() {
};
void EpdIf::DigitalWrite(int pin, int value) {
digitalWrite(pin, value);
}
int EpdIf::DigitalRead(int pin) {
return digitalRead(pin);
}
void EpdIf::DelayMs(unsigned int delaytime) {
delay(delaytime);
}
void EpdIf::SpiTransfer(unsigned char data) {
digitalWrite(CS_PIN, LOW);
SPI.transfer(data);
digitalWrite(CS_PIN, HIGH);
}
int EpdIf::IfInit(void) {
pinMode(CS_PIN, OUTPUT);
pinMode(RST_PIN, OUTPUT);
pinMode(DC_PIN, OUTPUT);
pinMode(BUSY_PIN, INPUT);
SPI.begin();
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
return 0;
}

51
Arduino/epd2in13g/epdif.h Normal file
View File

@ -0,0 +1,51 @@
/**
* @filename : epdif.h
* @brief : Header file of epdif.cpp providing EPD interface functions
* Users have to implement all the functions in epdif.cpp
* @author : Yehui from Waveshare
*
* Copyright (C) Waveshare August 10 2017
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation 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
* furished 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 OR 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.
*/
#ifndef EPDIF_H
#define EPDIF_H
#include <arduino.h>
// Pin definition
#define RST_PIN 8
#define DC_PIN 9
#define CS_PIN 10
#define BUSY_PIN 7
class EpdIf {
public:
EpdIf(void);
~EpdIf(void);
static int IfInit(void);
static void DigitalWrite(int pin, int value);
static int DigitalRead(int pin);
static void DelayMs(unsigned int delaytime);
static void SpiTransfer(unsigned char data);
};
#endif

View File

@ -0,0 +1,515 @@
/**
* @filename : imagedata.cpp
* @brief : data file for epd demo
*
* Copyright (C) Waveshare 2022/7/22
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation 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
* furished 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 OR 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.
*/
#include "imagedata.h"
#include <avr/pgmspace.h>
// 4 Color Image Data 124*250
const unsigned char gImage_2in13g[7750] 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,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x55,0x55,0x55,0x7D,0x55,0x55,0x55,0x55,0x55,0x75,0xD7,0xF5,0x55,
0x55,0x55,0x55,0x55,0x75,0x75,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x55,0x55,0x55,0x7F,0x55,0x55,0x55,0x55,0x55,0x75,0xFF,0x7F,0x55,0x55,
0x55,0x55,0x55,0x75,0xF5,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x55,0x57,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x79,0xDF,0xD7,0xD5,0x55,0x55,
0x55,0x7F,0xF5,0x7D,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x55,0x57,0xFF,0xFF,0xD5,0x55,0x55,0x55,0x55,0xFD,0xD5,0xF5,0x55,0x55,0x55,0x55,
0x7F,0xFD,0x7F,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,
0x57,0x55,0x7D,0xF5,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFD,0x55,0x55,0x55,0x55,0x5D,
0x5D,0xF7,0xD5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,
0x55,0x7D,0x7D,0x55,0x55,0x55,0x55,0xFF,0xFF,0xFD,0x55,0x55,0x55,0x55,0x5D,0x5F,
0xD7,0xF5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0x5D,
0x7D,0x5F,0x55,0x55,0x55,0x55,0xFF,0xFD,0xDD,0x55,0x55,0x55,0x55,0x5D,0x7F,0x57,
0x75,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0x5D,0x7D,
0x7D,0x55,0x55,0x55,0x55,0x5B,0x7D,0xDD,0xD5,0x55,0x55,0x55,0x5D,0x75,0xD7,0x55,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0x5D,0x7D,0xF5,
0x55,0x55,0x55,0x55,0x7F,0xFD,0xDF,0xD5,0x55,0x55,0x55,0x5D,0x7D,0xF7,0x55,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0x5F,0xFF,0xD5,0x55,
0x55,0x55,0x55,0x5F,0x7D,0xDD,0x55,0x55,0x55,0x55,0x5D,0x7D,0xF7,0x55,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0x55,0x5F,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFD,0xDD,0x55,0x55,0x55,0x55,0x7F,0xF5,0x7F,0x55,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0xF5,0x5F,0x55,0x55,0x55,0x55,
0x55,0xFF,0xFD,0xFD,0x55,0x55,0x55,0x55,0x7F,0xF5,0x5F,0x55,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x7D,0x55,0x55,0x55,0x55,0x55,
0x7F,0xFD,0xFD,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x55,0x55,0x57,0xFD,0x55,0x55,0x55,0x55,0x55,0x55,0x7D,0x55,
0x55,0x55,0x55,0x55,0x55,0xF5,0xF7,0xD5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x55,0x57,0xFF,0xFF,0xD5,0x55,0x55,0x55,0x55,0x55,0x7D,0x55,0x55,
0x55,0x55,0x55,0x55,0x7F,0xF7,0xD5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x55,0x57,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x57,0xFD,0xFF,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFF,0xD5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x55,0x55,0x55,0x55,0x7F,0x55,0x55,0x55,0x55,0x57,0xFD,0xD7,0x55,0x55,0x55,
0x55,0x55,0x7D,0xF5,0xD5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x55,0x57,0xD5,0x55,0xD5,0x55,0x55,0x55,0x55,0x57,0x7D,0xD7,0x55,0x55,0x55,0x55,
0x57,0x6D,0xF5,0xD5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,
0x57,0xD5,0xFD,0xD5,0x55,0x55,0x55,0x55,0xF7,0x7D,0xD7,0x55,0x55,0x55,0x55,0x57,
0xF5,0xFD,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,
0x5F,0xF5,0xD5,0x55,0x55,0x55,0x55,0xF7,0x7D,0xD7,0x55,0x55,0x55,0x55,0x7D,0x5D,
0x7F,0xF5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0x5D,
0x55,0xDF,0x55,0x55,0x55,0x55,0xF7,0x7D,0xD7,0x55,0x55,0x55,0x55,0x7D,0x55,0x5F,
0xD5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0xD5,0x55,
0xFF,0x55,0x55,0x55,0x55,0xF7,0x7D,0xD7,0x55,0x55,0x55,0x55,0x7F,0xFF,0xDF,0x55,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0xFF,0x55,0xD5,
0x55,0x55,0x55,0x55,0xFF,0x7D,0xD7,0x55,0x55,0x55,0x55,0x5F,0xFF,0xDF,0x55,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0xDF,0xFD,0xD5,0x55,
0x55,0x55,0x55,0x7F,0x7D,0xFF,0x55,0x55,0x55,0x55,0x55,0x7D,0xDF,0x55,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0xD5,0x7D,0xD5,0x55,0x55,
0x55,0x55,0x55,0x7D,0x55,0x55,0x55,0x55,0x55,0x55,0xFD,0xFF,0x55,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0xD5,0x55,0xD5,0x55,0x55,0x55,
0x55,0x55,0x7D,0x55,0x55,0x55,0x55,0x55,0x57,0xD5,0x5F,0x55,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x55,0x57,0xD5,0x7D,0x55,0x55,0x55,0x55,0x55,0x7D,0x5F,0x55,0x55,
0x55,0x55,0x55,0x5F,0x57,0xD5,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x55,0x57,0xD5,0x7D,0x55,0x55,0x55,0x55,0x55,0x75,0x5F,0x55,0x55,0x55,
0x55,0x55,0x5F,0x57,0xD5,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,
0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,
0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,
0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,
0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,
0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,
0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,
0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,
0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,
0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x15,0x55,0x41,0x55,0x55,0x57,0x55,0x55,0x55,0x50,
0x15,0x55,0x55,0x75,0x50,0x55,0x54,0x15,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x5D,0x54,0x05,0x55,0x40,0x55,0x55,0x57,0x55,0x55,0x55,0x54,0x15,
0x55,0x55,0x75,0x50,0x15,0x54,0x05,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x5D,0x54,0x00,0x55,0x50,0x15,0x55,0x57,0x55,0x55,0x55,0x54,0x05,0x55,
0x55,0x75,0x50,0x05,0x55,0x01,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x54,0x00,0x15,0x54,0x15,0x55,0x57,0x55,0x40,0x00,0x00,0x05,0x55,0x55,
0x75,0x50,0x01,0x55,0x41,0x55,0x7F,0xFF,0xFF,0xFF,0xEB,0xFF,0xFF,0xFF,0xFF,0x55,
0x5D,0x54,0x10,0x05,0x54,0x15,0x55,0x57,0x55,0x40,0x00,0x00,0x05,0x55,0x55,0x75,
0x51,0x40,0x55,0x41,0x55,0x7F,0xFF,0xFF,0xFF,0xEB,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,
0x54,0x15,0x01,0x54,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x50,
0x50,0x15,0x41,0x55,0x7F,0xFF,0xFF,0xFF,0xEA,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,
0x15,0x40,0x00,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x50,0x54,
0x00,0x01,0x55,0x7F,0xFF,0xEA,0xAA,0xAA,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x15,
0x50,0x00,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x50,0x55,0x00,
0x05,0x55,0x7F,0xFF,0xAA,0xAA,0xAA,0xBF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x15,0x55,
0x05,0x55,0x55,0x57,0x55,0x50,0x55,0x55,0x05,0x55,0x55,0x75,0x50,0x55,0x50,0x55,
0x55,0x7F,0xFF,0xAF,0xFF,0xEE,0xAF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,
0x55,0x55,0x57,0x55,0x50,0x55,0x55,0x05,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,
0x7F,0xFF,0xAF,0xFF,0xEF,0xAB,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,
0x55,0x57,0x55,0x41,0x54,0x15,0x05,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,
0xFF,0xAF,0xFF,0xEF,0xEA,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x41,0x55,0x55,0x55,
0x57,0x55,0x45,0x50,0x05,0x05,0x55,0x55,0x75,0x50,0x55,0x55,0x55,0x55,0x7F,0xFF,
0xAF,0xAF,0xEF,0xFA,0xBF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x41,0x55,0x55,0x55,0x57,
0x55,0x41,0x54,0x01,0x05,0x55,0x55,0x75,0x50,0x15,0x55,0x55,0x55,0x7F,0xFF,0xAF,
0xAF,0xEF,0xFA,0xBF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x41,0x00,0x05,0x55,0x57,0x55,
0x41,0x50,0x40,0x05,0x55,0x55,0x75,0x50,0x55,0x55,0x55,0x55,0x7F,0xFF,0xAF,0xAF,
0xEF,0xEA,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x01,0x00,0x05,0x55,0x57,0x55,0x41,
0x40,0x50,0x05,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xAF,0xAB,0xEF,
0xAB,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x01,0x05,0x05,0x55,0x57,0x55,0x40,0x00,
0x54,0x05,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xAF,0xAA,0xAE,0xAF,
0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x41,0x05,0x05,0x55,0x57,0x55,0x50,0x01,0x55,
0x05,0x55,0x55,0x75,0x55,0x55,0x54,0x05,0x55,0x7F,0xFF,0xAF,0xEA,0xAA,0xBF,0xFF,
0xFF,0xFF,0x55,0x5D,0x54,0x50,0x41,0x05,0x05,0x55,0x57,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x75,0x55,0x55,0x55,0x05,0x55,0x7F,0xFF,0xAB,0xFF,0xFA,0xBF,0xFF,0xFF,
0xFF,0x55,0x5D,0x54,0x50,0x41,0x05,0x05,0x55,0x57,0x55,0x54,0x15,0x55,0x55,0x55,
0x55,0x75,0x55,0x55,0x55,0x01,0x55,0x7F,0xFF,0xAA,0xBF,0xEA,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x54,0x50,0x41,0x05,0x05,0x55,0x57,0x55,0x54,0x05,0x55,0x55,0x55,0x55,
0x75,0x50,0x00,0x00,0x01,0x55,0x7F,0xFF,0xEA,0xBF,0xEB,0xFF,0xFF,0xFF,0xFF,0x55,
0x5D,0x54,0x50,0x41,0x05,0x05,0x55,0x57,0x55,0x54,0x00,0x55,0x55,0x55,0x55,0x75,
0x50,0x00,0x00,0x01,0x55,0x7F,0xFF,0xFF,0xFF,0xEB,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,
0x54,0x50,0x41,0x05,0x05,0x55,0x57,0x55,0x54,0x00,0x05,0x55,0x55,0x55,0x75,0x55,
0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,
0x10,0x41,0x05,0x05,0x55,0x57,0x55,0x54,0x14,0x00,0x55,0x55,0x55,0x75,0x55,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x00,
0x41,0x00,0x05,0x55,0x57,0x55,0x54,0x15,0x40,0x05,0x55,0x55,0x75,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x00,0x41,
0x00,0x05,0x55,0x57,0x55,0x54,0x15,0x54,0x05,0x55,0x55,0x75,0x54,0x15,0x55,0x41,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x41,0x55,
0x55,0x55,0x57,0x55,0x40,0x00,0x00,0x05,0x55,0x55,0x75,0x54,0x05,0x55,0x41,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x41,0x55,0x55,
0x55,0x57,0x55,0x40,0x00,0x00,0x05,0x55,0x55,0x75,0x50,0x15,0x05,0x41,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,
0x57,0x55,0x54,0x15,0x55,0x55,0x55,0x55,0x75,0x50,0x54,0x01,0x41,0x55,0x7F,0xFF,
0xAF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,
0x55,0x54,0x15,0x55,0x55,0x55,0x55,0x75,0x50,0x55,0x00,0x41,0x55,0x7F,0xFE,0xAA,
0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x54,0x55,0x55,0x55,0x57,0x55,
0x54,0x15,0x55,0x55,0x55,0x55,0x75,0x50,0x54,0x10,0x01,0x55,0x7F,0xFF,0xEA,0xAA,
0xAA,0xAB,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x50,0x15,0x55,0x55,0x57,0x55,0x54,
0x05,0x55,0x55,0x55,0x55,0x75,0x50,0x10,0x14,0x01,0x55,0x7F,0xFF,0xFF,0xAA,0xAA,
0xAB,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x54,0x05,0x55,0x55,0x57,0x55,0x54,0x00,
0x55,0x55,0x55,0x55,0x75,0x50,0x00,0x15,0x01,0x55,0x7F,0xFF,0xFA,0xFF,0xFB,0xEB,
0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x00,0x00,0x05,0x55,0x55,0x57,0x55,0x54,0x00,0x05,
0x55,0x55,0x55,0x75,0x55,0x00,0x55,0x41,0x55,0x7F,0xFF,0xFA,0xFA,0xFB,0xEB,0xFF,
0xFF,0xFF,0x55,0x5D,0x54,0x00,0x00,0x41,0x55,0x55,0x57,0x55,0x54,0x14,0x00,0x55,
0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFA,0xFA,0xBB,0xEB,0xFF,0xFF,
0xFF,0x55,0x5D,0x54,0x55,0x50,0x40,0x55,0x55,0x57,0x55,0x54,0x15,0x40,0x05,0x55,
0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFA,0xFA,0xAB,0xEB,0xFF,0xFF,0xFF,
0x55,0x5D,0x54,0x55,0x50,0x50,0x15,0x55,0x57,0x55,0x54,0x15,0x54,0x05,0x55,0x55,
0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFA,0xFB,0xEA,0xEB,0xBF,0xFF,0xFF,0x55,
0x5D,0x54,0x50,0x50,0x55,0x05,0x55,0x57,0x55,0x40,0x00,0x00,0x05,0x55,0x55,0x75,
0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFA,0xFA,0xFA,0xAA,0xBF,0xFF,0xFF,0x55,0x5D,
0x54,0x50,0x50,0x55,0x05,0x55,0x57,0x55,0x40,0x00,0x00,0x05,0x55,0x55,0x75,0x55,
0x55,0x55,0x55,0x55,0x7F,0xFF,0xAA,0xAA,0xBB,0xAA,0xBF,0xFF,0xFF,0x55,0x5D,0x54,
0x50,0x50,0x54,0x05,0x55,0x57,0x55,0x54,0x15,0x55,0x55,0x55,0x55,0x75,0x55,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xAA,0xAA,0xBB,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x50,
0x50,0x50,0x55,0x55,0x57,0x55,0x54,0x15,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFA,0xFA,0xFB,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x50,0x00,
0x41,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,
0x55,0x7F,0xFF,0xFA,0xFA,0xFB,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x55,0x00,0x01,
0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,
0x7F,0xFF,0xFA,0xFA,0xFB,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x01,0x54,0x05,0x55,
0x55,0x57,0x55,0x50,0x05,0x51,0x55,0x55,0x55,0x75,0x41,0x41,0x55,0x41,0x55,0x7F,
0xFF,0xFA,0xFA,0xFB,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x01,0x54,0x15,0x55,0x55,
0x57,0x55,0x50,0x01,0x00,0x15,0x55,0x55,0x75,0x41,0x41,0x55,0x41,0x55,0x7F,0xFF,
0xFA,0xFA,0xFB,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x50,0x15,0x55,0x55,0x57,
0x55,0x41,0x40,0x00,0x05,0x55,0x55,0x75,0x41,0x40,0x01,0x41,0x55,0x7F,0xFF,0xFA,
0xFF,0xFF,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,
0x41,0x50,0x15,0x05,0x55,0x55,0x75,0x40,0x40,0x01,0x41,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x41,
0x50,0x55,0x05,0x55,0x55,0x75,0x50,0x41,0x41,0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x41,0x50,
0x55,0x05,0x55,0x55,0x75,0x50,0x41,0x41,0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x41,0x50,0x14,
0x05,0x55,0x55,0x75,0x54,0x05,0x41,0x41,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x40,0x00,0x00,0x05,
0x55,0x55,0x75,0x55,0x00,0x00,0x41,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x50,0x01,0x00,0x15,0x55,
0x55,0x75,0x55,0x00,0x00,0x41,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x50,0x15,0x55,0x55,0x55,0x55,
0x75,0x54,0x05,0x41,0x41,0x55,0x7F,0xFF,0xEB,0xFB,0xEA,0xFF,0xFF,0xFF,0xFF,0x55,
0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,
0x50,0x41,0x41,0x00,0x55,0x7F,0xFF,0xEA,0xEA,0xFA,0xAF,0xFF,0xFF,0xFF,0x55,0x5D,
0x55,0x40,0x05,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x50,
0x41,0x41,0x00,0x55,0x7F,0xFF,0xFA,0xEA,0xAB,0xAA,0xFF,0xFF,0xFF,0x55,0x5D,0x55,
0x00,0x00,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x40,0x40,
0x01,0x41,0x55,0x7F,0xFF,0xFA,0xEF,0xAB,0xFA,0xBF,0xFF,0xFF,0x55,0x5D,0x54,0x05,
0x00,0x05,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x40,0x01,
0x41,0x55,0x7F,0xFF,0xEA,0xFA,0xEA,0xBF,0xBF,0xFF,0xFF,0x55,0x5D,0x54,0x15,0x40,
0x00,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x41,0x55,0x41,
0x55,0x7F,0xFF,0xAA,0xBF,0xFE,0xBF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x15,0x50,0x40,
0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x41,0x55,0x41,0x55,
0x7F,0xFF,0xFA,0xAA,0xAA,0xAB,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x15,0x50,0x54,0x15,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,
0xFF,0xFF,0xFA,0xAA,0xAB,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x15,0x40,0x55,0x15,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,
0xAA,0xAA,0xBE,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x00,0x01,0x55,0x55,0x55,0x57,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x54,0x15,0x55,0x7F,0xFF,0xFF,
0xAF,0xBE,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x00,0x01,0x55,0x55,0x55,0x57,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x54,0x15,0x55,0x7F,0xFF,0xEA,0xAA,
0xBE,0xEA,0xBF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x15,0x55,0x55,0x55,0x57,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x14,0x15,0x55,0x7F,0xFF,0xEA,0xAA,0xBE,
0xEA,0xBF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x04,0x15,0x55,0x7F,0xFF,0xFF,0xAF,0xBE,0xEA,
0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x55,0x55,0x01,0x55,0x55,0x57,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x75,0x55,0x54,0x04,0x15,0x55,0x7F,0xFF,0xEA,0xAA,0xBE,0xEB,0xFF,
0xFF,0xFF,0x55,0x5D,0x54,0x55,0x55,0x41,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x75,0x55,0x40,0x14,0x15,0x55,0x7F,0xFF,0xEF,0xAF,0xBE,0xEB,0xFF,0xFF,
0xFF,0x55,0x5D,0x54,0x50,0x04,0x00,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x75,0x41,0x41,0x54,0x15,0x55,0x7F,0xFF,0xAF,0xAF,0xBE,0xAB,0xFF,0xFF,0xFF,
0x55,0x5D,0x54,0x50,0x04,0x00,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x75,0x41,0x50,0x54,0x15,0x55,0x7F,0xFF,0xAA,0xAA,0xBE,0xAB,0xFF,0xFF,0xFF,0x55,
0x5D,0x54,0x15,0x45,0x55,0x01,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,
0x41,0x55,0x54,0x15,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,
0x54,0x15,0x45,0x41,0x45,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,
0x55,0x54,0x15,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,
0x05,0x45,0x41,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x40,0x00,
0x00,0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x00,
0x45,0x41,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x40,0x00,0x00,
0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x00,0x45,
0x00,0x05,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x54,0x00,0x00,0x00,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x05,0x44,0x00,
0x05,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x54,0x15,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x15,0x44,0x10,0x55,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x54,0x15,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x15,0x44,0x14,0x55,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x54,0x15,0x55,0x7F,0xFF,
0xFF,0xFA,0xFF,0xFA,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x00,0x04,0x14,0x15,0x55,0x57,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,
0xFE,0xAF,0xFA,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x50,0x04,0x14,0x15,0x55,0x57,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xAA,0xAA,
0xAA,0xBA,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x55,0x54,0x01,0x05,0x55,0x57,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x04,0x55,0x55,0x55,0x7F,0xFF,0xEB,0xFF,0xEA,
0xAA,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x55,0x55,0x01,0x55,0x55,0x57,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x75,0x41,0x04,0x44,0x00,0x55,0x7F,0xFF,0xEB,0xFF,0xEF,0xEA,
0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x75,0x41,0x10,0x44,0x00,0x55,0x7F,0xFF,0xEA,0xAA,0xAF,0xFA,0xFF,
0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x75,0x41,0x14,0x44,0x50,0x55,0x7F,0xFF,0xEA,0xAA,0xAF,0xFA,0xFF,0xFF,
0xFF,0x55,0x5D,0x54,0x14,0x11,0x54,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x75,0x41,0x14,0x44,0x40,0x55,0x7F,0xFF,0xFF,0xAF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x54,0x14,0x10,0x54,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x75,0x41,0x04,0x44,0x00,0x55,0x7F,0xFF,0xFF,0xAF,0xAF,0xFA,0xFF,0xFF,0xFF,0x55,
0x5D,0x54,0x14,0x14,0x00,0x05,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,
0x41,0x04,0x44,0x50,0x55,0x7F,0xFF,0xFF,0xAF,0xAA,0xBA,0xFF,0xFF,0xFF,0x55,0x5D,
0x54,0x04,0x15,0x00,0x05,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x40,
0x04,0x00,0x00,0x55,0x7F,0xFF,0xFF,0xAF,0xAA,0xBA,0xFF,0xFF,0xFF,0x55,0x5D,0x55,
0x04,0x10,0x54,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x40,0x04,
0x00,0x00,0x55,0x7F,0xFF,0xAF,0xAF,0xBF,0xFA,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x40,
0x10,0x54,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x04,0x44,
0x50,0x55,0x7F,0xFF,0xAF,0xAF,0xBF,0xFA,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x40,0x10,
0x00,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x00,0x44,0x00,
0x55,0x7F,0xFF,0xAF,0xAF,0xAF,0xFA,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x00,0x04,0x00,
0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x14,0x44,0x40,0x55,
0x7F,0xFF,0xAF,0xFF,0xAA,0xAA,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x00,0x05,0x55,0x55,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x14,0x44,0x50,0x55,0x7F,
0xFF,0xAA,0xAA,0xAA,0xAA,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x40,0x14,0x00,0x15,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x10,0x44,0x00,0x55,0x7F,0xFF,
0xEA,0xAA,0xBF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x40,0x14,0x00,0x15,0x55,0x57,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x04,0x44,0x00,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x04,0x14,0x14,0x15,0x55,0x57,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x04,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x04,0x14,0x14,0x15,0x55,0x57,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x14,0x14,0x00,0x15,0x55,0x57,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x14,0x14,0x00,0x15,0x55,0x57,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x75,0x50,0x15,0x50,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x5D,0x54,0x14,0x15,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x75,0x54,0x15,0x50,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x75,0x55,0x05,0x50,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x75,0x55,0x40,0x10,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,
0x41,0x50,0x00,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,
0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,
0x55,0x40,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,
0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,
0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x40,0x00,0x00,
0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,
0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x40,0x00,0x00,0x00,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,
0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x00,0x55,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x51,0x55,0x55,0x55,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x50,0x01,0x55,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x15,0x55,0x55,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x40,0x41,0x55,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x01,0x55,0x55,0x55,0x57,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x41,0x50,0x55,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x00,0x15,0x55,0x55,0x57,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x05,0x54,0x05,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x50,0x01,0x55,0x55,0x57,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x75,0x50,0x05,0x54,0x15,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x55,0x00,0x15,0x55,0x57,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x75,0x54,0x15,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x55,0x50,0x15,0x55,0x57,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x5D,0x54,0x00,0x00,0x00,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x5D,0x54,0x00,0x00,0x00,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x75,0x41,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x55,0x50,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x75,0x40,0x00,0x00,0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x5D,0x55,0x50,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,
0x54,0x00,0x00,0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,
0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,
0x55,0x54,0x10,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,
0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x45,0x04,
0x14,0x10,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x00,
0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x01,0x04,0x14,
0x10,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x00,0x00,
0x00,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x50,0x00,0x00,0x10,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x45,
0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x54,0x00,0x00,0x10,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x50,0x55,0x45,0x15,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x04,0x14,0x10,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x10,0x51,0x45,0x15,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x04,0x14,0x10,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x00,0x51,0x45,0x15,0x55,0x57,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x04,0x14,0x10,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x50,0x51,0x45,0x15,0x55,0x57,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x40,0x00,0x00,0x10,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x50,0x51,0x45,0x15,0x55,0x57,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x75,0x40,0x00,0x00,0x10,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x50,0x51,0x45,0x15,0x55,0x57,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x75,0x55,0x04,0x10,0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x10,0x51,0x45,0x15,0x55,0x57,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x75,0x55,0x04,0x14,0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x5D,0x54,0x50,0x51,0x45,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x75,0x55,0x05,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x5D,0x54,0x00,0x51,0x45,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x54,0x10,0x51,0x40,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x5D,0x50,0x50,0x51,0x40,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,
0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,
0x50,0x50,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,
0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,
0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,
0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,
0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,
0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,
0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,
0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,
0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,
0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,
0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,
0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,
0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,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

@ -0,0 +1,30 @@
/**
* @filename : imagedata.h
* @brief : head file for imagedata.cpp
*
* Copyright (C) Waveshare 2022/08/16
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation 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
* furished 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 OR 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.
*/
extern const unsigned char gImage_2in13g[];
/* FILE END */

View File

@ -102,6 +102,9 @@ else ifeq ($(EPD), epd2in13bV4)
else ifeq ($(EPD), epd2in13d)
OBJ_C_EPD = ${DIR_EPD}/EPD_2in13d.c
OBJ_C_Examples = ${DIR_Examples}/EPD_2in13d_test.c
else ifeq ($(EPD), epd2in13g)
OBJ_C_EPD = ${DIR_EPD}/EPD_2in13g.c
OBJ_C_Examples = ${DIR_Examples}/EPD_2in13g_test.c
else ifeq ($(EPD), epd3in52)
OBJ_C_EPD = ${DIR_EPD}/EPD_3in52.c
OBJ_C_Examples = ${DIR_Examples}/EPD_3in52_test.c

View File

@ -0,0 +1,162 @@
/*****************************************************************************
* | File : EPD_2in13g_test.c
* | Author : Waveshare team
* | Function : 2inch13 e-paper (G) test demo
* | Info :
*----------------
* | This version: V1.0
* | Date : 2023-05-29
* | Info :
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation 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
# furished 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 OR 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.
#
******************************************************************************/
#include "EPD_Test.h"
#include "EPD_2in13g.h"
#include "time.h"
int EPD_2in13g_test(void)
{
printf("EPD_2IN13G_test Demo\r\n");
if(DEV_Module_Init()!=0){
return -1;
}
printf("e-Paper Init and Clear...\r\n");
EPD_2IN13G_Init();
struct timespec start={0,0}, finish={0,0};
clock_gettime(CLOCK_REALTIME, &start);
EPD_2IN13G_Clear(EPD_2IN13G_WHITE); // White
clock_gettime(CLOCK_REALTIME, &finish);
printf("%ld S\r\n", finish.tv_sec-start.tv_sec);
DEV_Delay_ms(2000);
//Create a new image cache
UBYTE *BlackImage;
UWORD Imagesize = ((EPD_2IN13G_WIDTH % 4 == 0)? (EPD_2IN13G_WIDTH / 4 ): (EPD_2IN13G_WIDTH / 4 + 1)) * EPD_2IN13G_HEIGHT;
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) {
printf("Failed to apply for black memory...\r\n");
return -1;
}
printf("Paint_NewImage\r\n");
Paint_NewImage(BlackImage, EPD_2IN13G_WIDTH, EPD_2IN13G_HEIGHT, 0, EPD_2IN13G_WHITE);
Paint_SetScale(4);
#if 1 // show bmp
printf("show BMP-----------------\r\n");
Paint_SelectImage(BlackImage);
GUI_ReadBmp_RGB_4Color("./pic/2in13g.bmp", 0, 0);
EPD_2IN13G_Display(BlackImage);
DEV_Delay_ms(2000);
#endif
#if 1 // Drawing on the image
Paint_NewImage(BlackImage, EPD_2IN13G_WIDTH, EPD_2IN13G_HEIGHT, 90, EPD_2IN13G_WHITE);
Paint_SetScale(4);
//1.Select Image
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(EPD_2IN13G_WHITE);
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
Paint_DrawPoint(10, 80, EPD_2IN13G_RED, DOT_PIXEL_1X1, DOT_STYLE_DFT);
Paint_DrawPoint(10, 90, EPD_2IN13G_YELLOW, DOT_PIXEL_2X2, DOT_STYLE_DFT);
Paint_DrawPoint(10, 100, EPD_2IN13G_BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT);
Paint_DrawLine(20, 70, 70, 120, EPD_2IN13G_RED, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(70, 70, 20, 120, EPD_2IN13G_RED, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawRectangle(20, 70, 70, 120, EPD_2IN13G_YELLOW, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawRectangle(80, 70, 130, 120, EPD_2IN13G_YELLOW, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawCircle(45, 95, 20, EPD_2IN13G_BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawCircle(105, 95, 20, EPD_2IN13G_BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawLine(85, 95, 125, 95, EPD_2IN13G_RED, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawLine(105, 75, 105, 115, EPD_2IN13G_YELLOW, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawString_EN(0, 0, "Red,yellow,white,black", &Font16, EPD_2IN13G_RED, EPD_2IN13G_YELLOW);
Paint_DrawString_EN(0, 16, "Four color e-Paper", &Font12, EPD_2IN13G_YELLOW, EPD_2IN13G_BLACK);
Paint_DrawString_CN(120, 28, "΢ѩµç×Ó", &Font24CN, EPD_2IN13G_RED, EPD_2IN13G_WHITE);
Paint_DrawNum(0, 28, 123456, &Font12, EPD_2IN13G_RED, EPD_2IN13G_WHITE);
printf("EPD_Display\r\n");
EPD_2IN13G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
Paint_NewImage(BlackImage, EPD_2IN13G_WIDTH, EPD_2IN13G_HEIGHT, 0, EPD_2IN13G_WHITE);
Paint_SetScale(4);
#if 1 // Drawing on the image
//1.Select Image
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(EPD_2IN13G_WHITE);
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
Paint_DrawRectangle(1, 1, EPD_2IN13G_WIDTH, EPD_2IN13G_HEIGHT/4, EPD_2IN13G_RED, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(1, EPD_2IN13G_HEIGHT/4, EPD_2IN13G_WIDTH, EPD_2IN13G_HEIGHT/2, EPD_2IN13G_YELLOW, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(1, EPD_2IN13G_HEIGHT/2, EPD_2IN13G_WIDTH, 3*EPD_2IN13G_HEIGHT/4, EPD_2IN13G_BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
printf("EPD_Display\r\n");
EPD_2IN13G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
#if 1 // Drawing on the image
//1.Select Image
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(EPD_2IN13G_WHITE);
int hNumber, hWidth, vNumber, vWidth;
hNumber = 20;
hWidth = EPD_2IN13G_HEIGHT/hNumber;
vNumber = 8;
vWidth = EPD_2IN13G_WIDTH/vNumber;
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
for(int i=0; i<hNumber; i++) { // horizontal
Paint_DrawRectangle(1, 1+i*hWidth, EPD_2IN13G_WIDTH, hWidth*(1+i), EPD_2IN13G_BLACK + (i % 2), DOT_PIXEL_1X1, DRAW_FILL_FULL);
}
for(int i=0; i<vNumber; i++) { // vertical
if(i%2) {
Paint_DrawRectangle(1+i*vWidth, 1, vWidth*(i+1), EPD_2IN13G_HEIGHT, EPD_2IN13G_YELLOW + (i/2%2), DOT_PIXEL_1X1, DRAW_FILL_FULL);
}
}
printf("EPD_Display\r\n");
EPD_2IN13G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
printf("Clear...\r\n");
EPD_2IN13G_Clear(EPD_2IN13G_WHITE);
printf("Goto Sleep...\r\n");
EPD_2IN13G_Sleep();
free(BlackImage);
BlackImage = NULL;
DEV_Delay_ms(2000);//important, at least 2s
// close 5V
printf("close 5V, Module enters 0 power consumption ...\r\n");
DEV_Module_Exit();
return 0;
}

View File

@ -75,6 +75,7 @@ int EPD_2in13bc_test(void);
int EPD_2in13b_V3_test(void);
int EPD_2in13b_V4_test(void);
int EPD_2in13d_test(void);
int EPD_2in13g_test(void);
int EPD_3in52_test(void);

View File

@ -112,6 +112,9 @@ int main(void)
#elif epd2in13d
EPD_2in13d_test();
#elif epd2in13g
EPD_2in13g_test();
#elif epd3in52
EPD_3in52_test();

View File

@ -422,6 +422,16 @@ UBYTE GUI_ReadBmp_RGB_4Color(const char *path, UWORD Xstart, UWORD Ystart)
Image[x+(y* bmpInfoHeader.biWidth )] = 3;//Red
}
}
if(bmpInfoHeader.biWidth % 4 != 0)
{
for (UWORD i = 0; i < (bmpInfoHeader.biWidth % 4); i++)
{
if(fread((char *)Rdata, 1, 1, fp) != 1) {
perror("get bmpdata:\r\n");
break;
}
}
}
}
fclose(fp);

View File

@ -0,0 +1,237 @@
/*****************************************************************************
* | File : EPD_2in13g.c
* | Author : Waveshare team
* | Function : 2inch13 e-paper (G)
* | Info :
*----------------
* | This version: V1.0
* | Date : 2023-05-29
* | Info :
* -----------------------------------------------------------------------------
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation 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
# furished 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 OR 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.
#
******************************************************************************/
#include "EPD_2in13g.h"
#include "Debug.h"
UWORD Source_BITS = EPD_2IN13G_WIDTH;
UWORD Gate_BITS = EPD_2IN13G_HEIGHT;
/******************************************************************************
function : Software reset
parameter:
******************************************************************************/
static void EPD_2IN13G_Reset(void)
{
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(200);
DEV_Digital_Write(EPD_RST_PIN, 0);
DEV_Delay_ms(2);
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(200);
}
/******************************************************************************
function : send command
parameter:
Reg : Command register
******************************************************************************/
static void EPD_2IN13G_SendCommand(UBYTE Reg)
{
DEV_Digital_Write(EPD_DC_PIN, 0);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_SPI_WriteByte(Reg);
DEV_Digital_Write(EPD_CS_PIN, 1);
}
/******************************************************************************
function : send data
parameter:
Data : Write data
******************************************************************************/
static void EPD_2IN13G_SendData(UBYTE Data)
{
DEV_Digital_Write(EPD_DC_PIN, 1);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_SPI_WriteByte(Data);
DEV_Digital_Write(EPD_CS_PIN, 1);
}
/******************************************************************************
function : Wait until the busy_pin goes HIGH
parameter:
******************************************************************************/
void EPD_2IN13G_ReadBusy(void)
{
Debug("e-Paper busy\r\n");
DEV_Delay_ms(100);
while(DEV_Digital_Read(EPD_BUSY_PIN) != 1) { //HIGH: idle, LOW: busy
DEV_Delay_ms(100);
}
Debug("e-Paper busy release\r\n");
}
/******************************************************************************
function : Turn On Display
parameter:
******************************************************************************/
static void EPD_2IN13G_TurnOnDisplay(void)
{
EPD_2IN13G_SendCommand(0x12); // DISPLAY_REFRESH
EPD_2IN13G_SendData(0x00);
EPD_2IN13G_ReadBusy();
}
/******************************************************************************
function : Setting the display window
parameter:
******************************************************************************/
static void EPD_2IN9_V2_SetWindows(void)
{
if(EPD_2IN13G_WIDTH < 128)
Source_BITS = 128;
EPD_2IN13G_SendCommand(0x61); //TRES
EPD_2IN13G_SendData(Source_BITS/256); // EPD_2IN13G_WIDTH_H
EPD_2IN13G_SendData(Source_BITS%256); // EPD_2IN13G_WIDTH_L
EPD_2IN13G_SendData(Gate_BITS/256); // EPD_2IN13G_HEIGHT_H
EPD_2IN13G_SendData(Gate_BITS%256); // EPD_2IN13G_HEIGHT_L
}
/******************************************************************************
function : Initialize the e-Paper register
parameter:
******************************************************************************/
void EPD_2IN13G_Init(void)
{
EPD_2IN13G_Reset();
EPD_2IN13G_ReadBusy();
EPD_2IN13G_SendCommand(0x4D);
EPD_2IN13G_SendData(0x78);
EPD_2IN13G_SendCommand(0x00); //PSR
EPD_2IN13G_SendData(0x0F);
EPD_2IN13G_SendData(0x29);
EPD_2IN13G_SendCommand(0x01); //PWRR
EPD_2IN13G_SendData(0x07);
EPD_2IN13G_SendData(0x00);
EPD_2IN13G_SendCommand(0x03); //POFS
EPD_2IN13G_SendData(0x10);
EPD_2IN13G_SendData(0x54);
EPD_2IN13G_SendData(0x44);
EPD_2IN13G_SendCommand(0x06); //BTST_P
EPD_2IN13G_SendData(0x05);
EPD_2IN13G_SendData(0x00);
EPD_2IN13G_SendData(0x3F);
EPD_2IN13G_SendData(0x0A);
EPD_2IN13G_SendData(0x25);
EPD_2IN13G_SendData(0x12);
EPD_2IN13G_SendData(0x1A);
EPD_2IN13G_SendCommand(0x50); //CDI
EPD_2IN13G_SendData(0x37);
EPD_2IN13G_SendCommand(0x60); //TCON
EPD_2IN13G_SendData(0x02);
EPD_2IN13G_SendData(0x02);
EPD_2IN9_V2_SetWindows(); // Setting the display window
EPD_2IN13G_SendCommand(0xE7);
EPD_2IN13G_SendData(0x1C);
EPD_2IN13G_SendCommand(0xE3);
EPD_2IN13G_SendData(0x22);
EPD_2IN13G_SendCommand(0xB4);
EPD_2IN13G_SendData(0xD0);
EPD_2IN13G_SendCommand(0xB5);
EPD_2IN13G_SendData(0x03);
EPD_2IN13G_SendCommand(0xE9);
EPD_2IN13G_SendData(0x01);
EPD_2IN13G_SendCommand(0x30);
EPD_2IN13G_SendData(0x08);
EPD_2IN13G_SendCommand(0x04);
EPD_2IN13G_ReadBusy();
}
/******************************************************************************
function : Clear screen
parameter:
******************************************************************************/
void EPD_2IN13G_Clear(UBYTE color)
{
UWORD Width, Height;
Width = Source_BITS / 4 ;
Height = EPD_2IN13G_HEIGHT;
EPD_2IN13G_SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < Width; i++) {
EPD_2IN13G_SendData((color << 6) | (color << 4) | (color << 2) | color);
}
}
EPD_2IN13G_TurnOnDisplay();
}
/******************************************************************************
function : Sends the image buffer in RAM to e-Paper and displays
parameter:
******************************************************************************/
void EPD_2IN13G_Display(UBYTE *Image)
{
UWORD Width, Height;
Width = (EPD_2IN13G_WIDTH % 4 == 0)? (EPD_2IN13G_WIDTH / 4 ): (EPD_2IN13G_WIDTH / 4 + 1);
Height = EPD_2IN13G_HEIGHT;
EPD_2IN13G_SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < (Source_BITS / 4); i++) {
if(i < 31 ) EPD_2IN13G_SendData(Image[i + j * Width]);
else EPD_2IN13G_SendData(0x00);
}
}
EPD_2IN13G_TurnOnDisplay();
}
/******************************************************************************
function : Enter sleep mode
parameter:
******************************************************************************/
void EPD_2IN13G_Sleep(void)
{
EPD_2IN13G_SendCommand(0x02); //power off
EPD_2IN13G_ReadBusy(); //waiting for the electronic paper IC to release the idle signal
DEV_Delay_ms(100); //!!!The delay here is necessary,100mS at least!!!
EPD_2IN13G_SendCommand(0x07); //deep sleep
EPD_2IN13G_SendData(0XA5);
}

View File

@ -0,0 +1,32 @@
/*****************************************************************************
* | File : EPD_2in13g.h
* | Author : Waveshare team
* | Function : 2inch13 e-paper (G)
* | Info :
*----------------
* | This version: V1.0
* | Date : 2023-05-29
* | Info :
* -----------------------------------------------------------------------------
******************************************************************************/
#ifndef __EPD_2IN13G_H_
#define __EPD_2IN13G_H_
#include "DEV_Config.h"
// Display resolution
#define EPD_2IN13G_WIDTH 122
#define EPD_2IN13G_HEIGHT 250
// Color
#define EPD_2IN13G_BLACK 0x0
#define EPD_2IN13G_WHITE 0x1
#define EPD_2IN13G_YELLOW 0x2
#define EPD_2IN13G_RED 0x3
void EPD_2IN13G_Init(void);
void EPD_2IN13G_Clear(UBYTE color);
void EPD_2IN13G_Display(UBYTE *Image);
void EPD_2IN13G_Sleep(void);
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

View File

@ -0,0 +1,68 @@
#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
import os
picdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'pic')
libdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'lib')
if os.path.exists(libdir):
sys.path.append(libdir)
import logging
from waveshare_epd import epd2in13g
import time
from PIL import Image,ImageDraw,ImageFont
import traceback
logging.basicConfig(level=logging.DEBUG)
try:
logging.info("epd2in13g Demo")
epd = epd2in13g.EPD()
logging.info("init and Clear")
epd.init()
epd.Clear()
font15 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 15)
font18 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 18)
font24 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 24)
font40 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 40)
# Drawing on the image
logging.info("1.Drawing on the image...")
Himage = Image.new('RGB', (epd.height, epd.width), epd.WHITE)
draw = ImageDraw.Draw(Himage)
draw.rectangle([(0,0),(50,50)],outline = epd.BLACK)
draw.rectangle([(55,0),(100,50)],fill = epd.RED)
draw.line([(0,0),(50,50)], fill = epd.YELLOW,width = 1)
draw.line([(0,50),(50,0)], fill = epd.YELLOW,width = 1)
draw.pieslice((55, 60, 95, 100), 90, 180, outline = epd.RED)
draw.pieslice((55, 60, 95, 100), 270, 360, fill = epd.BLACK)
draw.chord((10, 60, 50, 100), 0, 360, fill = epd.YELLOW)
draw.ellipse((55, 60, 95, 100), outline = epd.RED)
draw.polygon([(110,0),(110,50),(150,25)],outline = epd.BLACK)
draw.polygon([(190,0),(190,50),(150,25)],fill = epd.BLACK)
draw.text((120, 60), 'e-Paper demo', font = font15, fill = epd.YELLOW)
draw.text((110, 90), u'微雪电子', font = font24, fill = epd.RED)
epd.display(epd.getbuffer(Himage))
time.sleep(3)
# read bmp file
logging.info("2.read bmp file")
Himage = Image.open(os.path.join(picdir, '2in13g.bmp'))
epd.display(epd.getbuffer(Himage))
time.sleep(3)
logging.info("Clear...")
epd.Clear()
logging.info("Goto Sleep...")
epd.sleep()
except IOError as e:
logging.info(e)
except KeyboardInterrupt:
logging.info("ctrl + c:")
epd2in13g.epdconfig.module_exit()
exit()

View File

@ -0,0 +1,242 @@
# *****************************************************************************
# * | File : epd2in13g.py
# * | Author : Waveshare team
# * | Function : Electronic paper driver
# * | Info :
# *----------------
# * | This version: V1.0
# * | Date : 2023-05-29
# # | Info : python demo
# -----------------------------------------------------------------------------
# ******************************************************************************/
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation 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
# furished 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 OR 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.
#
import logging
from . import epdconfig
import PIL
from PIL import Image
import io
# Display resolution
EPD_WIDTH = 122
EPD_HEIGHT = 250
logger = logging.getLogger(__name__)
class EPD:
def __init__(self):
self.reset_pin = epdconfig.RST_PIN
self.dc_pin = epdconfig.DC_PIN
self.busy_pin = epdconfig.BUSY_PIN
self.cs_pin = epdconfig.CS_PIN
self.width = EPD_WIDTH
self.height = EPD_HEIGHT
self.BLACK = 0x000000 # 00 BGR
self.WHITE = 0xffffff # 01
self.YELLOW = 0x00ffff # 10
self.RED = 0x0000ff # 11
self.Gate_BITS = EPD_HEIGHT
if self.width < 128:
self.Source_BITS = 128
else:
self.Source_BITS = self.width
# Hardware reset
def reset(self):
epdconfig.digital_write(self.reset_pin, 1)
epdconfig.delay_ms(200)
epdconfig.digital_write(self.reset_pin, 0) # module reset
epdconfig.delay_ms(2)
epdconfig.digital_write(self.reset_pin, 1)
epdconfig.delay_ms(200)
def send_command(self, command):
epdconfig.digital_write(self.dc_pin, 0)
epdconfig.digital_write(self.cs_pin, 0)
epdconfig.spi_writebyte([command])
epdconfig.digital_write(self.cs_pin, 1)
def send_data(self, data):
epdconfig.digital_write(self.dc_pin, 1)
epdconfig.digital_write(self.cs_pin, 0)
epdconfig.spi_writebyte([data])
epdconfig.digital_write(self.cs_pin, 1)
def ReadBusy(self):
logger.debug("e-Paper busy H")
epdconfig.delay_ms(100)
while(epdconfig.digital_read(self.busy_pin) == 0): # 0: idle, 1: busy
epdconfig.delay_ms(5)
logger.debug("e-Paper busy release")
def SetWindow(self):
self.send_command(0x61) # SET_RAM_X_ADDRESS_START_END_POSITION
# x point must be the multiple of 8 or the last 3 bits will be ignored
self.send_data(self.Source_BITS/256)
self.send_data(self.Source_BITS%256)
self.send_data(self.Gate_BITS/256)
self.send_data(self.Gate_BITS%256)
def TurnOnDisplay(self):
self.send_command(0x12) # DISPLAY_REFRESH
self.send_data(0X00)
self.ReadBusy()
def init(self):
if (epdconfig.module_init() != 0):
return -1
# EPD hardware init start
self.reset()
self.ReadBusy()
self.send_command(0x4D)
self.send_data(0x78)
self.send_command(0x00)
self.send_data(0x0F)
self.send_data(0x29)
self.send_command(0x01)
self.send_data(0x07)
self.send_data(0x00)
self.send_command(0x03)
self.send_data(0x10)
self.send_data(0x54)
self.send_data(0x44)
self.send_command(0x06)
self.send_data(0x05)
self.send_data(0x00)
self.send_data(0x3F)
self.send_data(0x0A)
self.send_data(0x25)
self.send_data(0x12)
self.send_data(0x1A)
self.send_command(0x50)
self.send_data(0x37)
self.send_command(0x60)
self.send_data(0x02)
self.send_data(0x02)
self.SetWindow()
self.send_command(0xE7)
self.send_data(0x1C)
self.send_command(0xE3)
self.send_data(0x22)
self.send_command(0xB4)
self.send_data(0xD0)
self.send_command(0xB5)
self.send_data(0x03)
self.send_command(0xE9)
self.send_data(0x01)
self.send_command(0x30)
self.send_data(0x08)
self.send_command(0x04)
self.ReadBusy()
return 0
def getbuffer(self, image):
# Create a pallette with the 4 colors supported by the panel
pal_image = Image.new("P", (1,1))
pal_image.putpalette( (0,0,0, 255,255,255, 255,255,0, 255,0,0) + (0,0,0)*252)
# Check if we need to rotate the image
imwidth, imheight = image.size
if(imwidth == self.width and imheight == self.height):
image_temp = image
elif(imwidth == self.height and imheight == self.width):
image_temp = image.rotate(90, expand=True)
else:
logger.warning("Invalid image dimensions: %d x %d, expected %d x %d" % (imwidth, imheight, self.width, self.height))
# Convert the soruce image to the 4 colors, dithering if needed
image_4color = image_temp.convert("RGB").quantize(palette=pal_image)
buf_4color = bytearray(image_4color.tobytes('raw'))
# into a single byte to transfer to the panel
if self.width % 4 == 0 :
Width = self.width // 4
else :
Width = self.width // 4 + 1
Height = self.height
buf = [0x00] * int(Width * Height)
idx = 0
for j in range(0, Height):
for i in range(0, Width):
if i == Width -1:
buf[i + j * Width] = (buf_4color[idx] << 6) + (buf_4color[idx+1] << 4)
idx = idx + 2
else:
buf[i + j * Width] = (buf_4color[idx] << 6) + (buf_4color[idx+1] << 4) + (buf_4color[idx+2] << 2) + buf_4color[idx+3]
idx = idx + 4
return buf
def display(self, image):
if self.width % 4 == 0 :
Width = self.width // 4
else :
Width = self.width // 4 + 1
Height = self.height
self.send_command(0x10)
for j in range(0, Height):
for i in range(0, self.Source_BITS//4):
if i < 31 :
self.send_data(image[i + j * Width])
else :
self.send_data(0x00)
self.TurnOnDisplay()
def Clear(self, color=0x55):
Width = self.Source_BITS//4
Height = self.height
self.send_command(0x10)
for j in range(0, Height):
for i in range(0, Width):
self.send_data(color)
self.TurnOnDisplay()
def sleep(self):
self.send_command(0x02) # POWER_OFF
self.ReadBusy()
epdconfig.delay_ms(100)
self.send_command(0x07) # DEEP_SLEEP
self.send_data(0XA5)
epdconfig.delay_ms(2000)
epdconfig.module_exit()
### END OF FILE ###

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

View File

@ -0,0 +1,97 @@
// <<< Use Configuration Wizard in Context Menu >>>
// <h> Debug MCU Configuration
// <o0.0> DBG_SLEEP
// <i> Debug Sleep Mode
// <i> 0: (FCLK=On, HCLK=Off) FCLK is clocked by the system clock as previously configured by the software while HCLK is disabled
// <i> 1: (FCLK=On, HCLK=On) HCLK is fed by the same clock that is provided to FCLK
// <o0.1> DBG_STOP
// <i> Debug Stop Mode
// <i> 0: (FCLK=Off, HCLK=Off) Clock controller disables all clocks
// <i> 1: (FCLK=On, HCLK=On) FCLK and HCLK are provided by the internal RC oscillator which remains active
// <o0.2> DBG_STANDBY
// <i> Debug Standby Mode
// <i> 0: (FCLK=Off, HCLK=Off) The whole digital part is unpowered.
// <i> 1: (FCLK=On, HCLK=On) Digital part is powered and FCLK and HCLK are provided by the internal RC oscillator which remains active
// <o0.8> DBG_IWDG_STOP
// <i> Debug independent watchdog stopped when core is halted
// <i> 0: The watchdog counter clock continues even if the core is halted
// <i> 1: The watchdog counter clock is stopped when the core is halted
// <o0.9> DBG_WWDG_STOP
// <i> Debug window watchdog stopped when core is halted
// <i> 0: The window watchdog counter clock continues even if the core is halted
// <i> 1: The window watchdog counter clock is stopped when the core is halted
// <o0.10> DBG_TIM1_STOP
// <i> Timer 1 counter stopped when core is halted
// <i> 0: The clock of the involved Timer Counter is fed even if the core is halted
// <i> 1: The clock of the involved Timer counter is stopped when the core is halted
// <o0.11> DBG_TIM2_STOP
// <i> Timer 2 counter stopped when core is halted
// <i> 0: The clock of the involved Timer Counter is fed even if the core is halted
// <i> 1: The clock of the involved Timer counter is stopped when the core is halted
// <o0.12> DBG_TIM3_STOP
// <i> Timer 3 counter stopped when core is halted
// <i> 0: The clock of the involved Timer Counter is fed even if the core is halted
// <i> 1: The clock of the involved Timer counter is stopped when the core is halted
// <o0.13> DBG_TIM4_STOP
// <i> Timer 4 counter stopped when core is halted
// <i> 0: The clock of the involved Timer Counter is fed even if the core is halted
// <i> 1: The clock of the involved Timer counter is stopped when the core is halted
// <o0.14> DBG_CAN1_STOP
// <i> Debug CAN1 stopped when Core is halted
// <i> 0: Same behavior as in normal mode
// <i> 1: CAN1 receive registers are frozen
// <o0.15> DBG_I2C1_SMBUS_TIMEOUT
// <i> I2C1 SMBUS timeout mode stopped when Core is halted
// <i> 0: Same behavior as in normal mode
// <i> 1: The SMBUS timeout is frozen
// <o0.16> DBG_I2C2_SMBUS_TIMEOUT
// <i> I2C2 SMBUS timeout mode stopped when Core is halted
// <i> 0: Same behavior as in normal mode
// <i> 1: The SMBUS timeout is frozen
// <o0.17> DBG_TIM8_STOP
// <i> Timer 8 counter stopped when core is halted
// <i> 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally.
// <i> 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event).
// <o0.18> DBG_TIM5_STOP
// <i> Timer 5 counter stopped when core is halted
// <i> 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally.
// <i> 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event).
// <o0.19> DBG_TIM6_STOP
// <i> Timer 6 counter stopped when core is halted
// <i> 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally.
// <i> 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event).
// <o0.20> DBG_TIM7_STOP
// <i> Timer 7 counter stopped when core is halted
// <i> 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally.
// <i> 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event).
// <o0.21> DBG_CAN2_STOP
// <i> Debug CAN2 stopped when Core is halted
// <i> 0: Same behavior as in normal mode
// <i> 1: CAN2 receive registers are frozen
// <o0.25> DBG_TIM12_STOP
// <i> Timer 12 counter stopped when core is halted
// <i> 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally.
// <i> 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event).
// <o0.26> DBG_TIM13_STOP
// <i> Timer 13 counter stopped when core is halted
// <i> 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally.
// <i> 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event).
// <o0.27> DBG_TIM14_STOP
// <i> Timer 14 counter stopped when core is halted
// <i> 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally.
// <i> 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event).
// <o0.28> DBG_TIM9_STOP
// <i> Timer 9 counter stopped when core is halted
// <i> 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally.
// <i> 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event).
// <o0.29> DBG_TIM10_STOP
// <i> Timer 10 counter stopped when core is halted
// <i> 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally.
// <i> 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event).
// <o0.30> DBG_TIM11_STOP
// <i> Timer 11 counter stopped when core is halted
// <i> 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally.
// <i> 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event).
// </h>
DbgMCU_CR = 0x00000007;
// <<< end of configuration section >>>

View File

@ -0,0 +1,20 @@
/*
* Auto generated Run-Time-Environment Component Configuration File
* *** Do not modify ! ***
*
* Project: 'epd-demo'
* Target: 'EPD_2in13g_test'
*/
#ifndef RTE_COMPONENTS_H
#define RTE_COMPONENTS_H
/*
* Define the Device Header File:
*/
#define CMSIS_device_header "stm32f10x.h"
#endif /* RTE_COMPONENTS_H */

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,94 @@
<html>
<body>
<pre>
<h1>µVision Build Log</h1>
<h2>Tool Versions:</h2>
IDE-Version: ¦ÌVision V5.26.2.0
Copyright (C) 2018 ARM Ltd and ARM Germany GmbH. All rights reserved.
License Information: , , LIC=RC93N-YLJYL-JJH6S-LI3Z1-D1AV2-99PL8
Tool Versions:
Toolchain: MDK-ARM Plus Version: 5.26.2.0
Toolchain Path: D:\KEIL\azwz\ARM\ARMCC\Bin
C Compiler: Armcc.exe V5.06 update 6 (build 750)
Assembler: Armasm.exe V5.06 update 6 (build 750)
Linker/Locator: ArmLink.exe V5.06 update 6 (build 750)
Library Manager: ArmAr.exe V5.06 update 6 (build 750)
Hex Converter: FromElf.exe V5.06 update 6 (build 750)
CPU DLL: SARMCM3.DLL V5.26.2.0
Dialog DLL: DCM.DLL V1.17.2.0
Target DLL: STLink\ST-LINKIII-KEIL_SWO.dll V3.0.5.0
Dialog DLL: TCM.DLL V1.36.1.0
<h2>Project:</h2>
E:\ÏîÄ¿\e-Paper\Code\e-Paper\STM32\STM32-F103ZET6\MDK-ARM\epd-demo.uvprojx
Project File Date: 05/29/2023
<h2>Output:</h2>
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\KEIL\azwz\ARM\ARMCC\Bin'
Build target 'EPD_2in66b_test'
assembling startup_stm32f103xe.s...
compiling stm32f1xx_it.c...
compiling gpio.c...
compiling usart.c...
compiling spi.c...
compiling main.c...
compiling ImageData.c...
compiling DEV_Config.c...
compiling EPD_2in66b.c...
compiling stm32f1xx_hal_msp.c...
compiling EPD_2in66b_test.c...
compiling font8.c...
compiling font12.c...
compiling font12CN.c...
compiling font16.c...
compiling font20.c...
compiling font24.c...
compiling font24CN.c...
compiling GUI_Paint.c...
compiling system_stm32f1xx.c...
compiling stm32f1xx_hal_gpio_ex.c...
compiling stm32f1xx_hal.c...
compiling stm32f1xx_hal_rcc.c...
compiling stm32f1xx_hal_spi.c...
compiling stm32f1xx_hal_gpio.c...
compiling stm32f1xx_hal_rcc_ex.c...
compiling stm32f1xx_hal_pwr.c...
compiling stm32f1xx_hal_cortex.c...
compiling stm32f1xx_hal_dma.c...
compiling stm32f1xx_hal_tim.c...
compiling stm32f1xx_hal_flash.c...
compiling stm32f1xx_hal_flash_ex.c...
compiling stm32f1xx_hal_tim_ex.c...
compiling stm32f1xx_hal_exti.c...
compiling stm32f1xx_hal_uart.c...
linking...
Program Size: Code=23508 RO-data=22012 RW-data=68 ZI-data=53428
FromELF: creating hex file...
"epd-demo\epd-demo.axf" - 0 Error(s), 0 Warning(s).
<h2>Software Packages used:</h2>
Package Vendor: ARM
http://www.keil.com/pack/ARM.CMSIS.5.9.0.pack
ARM.CMSIS.5.9.0
CMSIS (Common Microcontroller Software Interface Standard)
* Component: CORE Version: 5.6.0
Package Vendor: Keil
http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.1.0.pack
Keil.STM32F1xx_DFP.2.1.0
STMicroelectronics STM32F1 Series Device Support, Drivers and Examples
<h2>Collection of Component include folders:</h2>
.\RTE\_EPD_2in66b_test
D:\KEIL\azwz\ARM\PACK\ARM\CMSIS\5.9.0\CMSIS\Core\Include
D:\KEIL\azwz\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include
<h2>Collection of Component Files used:</h2>
* Component: ARM::CMSIS:CORE:5.6.0
Build Time Elapsed: 00:00:13
</pre>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,160 @@
/*****************************************************************************
* | File : EPD_2IN13G_test.c
* | Author : Waveshare team
* | Function : 2.13inch e-paper (G) test demo
* | Info :
*----------------
* | This version: V1.0
* | Date : 2023-05-24
* | Info :
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation 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
# furished 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 OR 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.
#
******************************************************************************/
#include "EPD_Test.h"
#include "EPD_2in13g.h"
int EPD_test(void)
{
printf("EPD_2IN13G_test Demo\r\n");
if(DEV_Module_Init()!=0){
return -1;
}
printf("e-Paper Init and Clear...\r\n");
EPD_2IN13G_Init();
EPD_2IN13G_Clear(EPD_2IN13G_WHITE);
DEV_Delay_ms(2000);
//Create a new image cache
UBYTE *BlackImage,*BlackImage1;
/* you have to edit the startup_stm32fxxx.s file and set a big enough heap size */
UWORD Imagesize = ((EPD_2IN13G_WIDTH % 4 == 0)? (EPD_2IN13G_WIDTH / 4 ): (EPD_2IN13G_WIDTH / 4 + 1)) * EPD_2IN13G_HEIGHT;
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) {
printf("Failed to apply for black memory...\r\n");
return -1;
}
if((BlackImage1 = (UBYTE *)malloc(Imagesize)) == NULL) {
printf("Failed to apply for black memory...\r\n");
return -1;
}
printf("Paint_NewImage\r\n");
Paint_NewImage(BlackImage, EPD_2IN13G_WIDTH, EPD_2IN13G_HEIGHT, 90, EPD_2IN13G_WHITE);
Paint_SetScale(4);
Paint_NewImage(BlackImage1, EPD_2IN13G_WIDTH, EPD_2IN13G_HEIGHT, 0, EPD_2IN13G_WHITE);
Paint_SetScale(4);
#if 1 // show image for array
printf("show image for array\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(EPD_2IN13G_WHITE);
Paint_DrawBitMap(gImage_2in13g);
EPD_2IN13G_Display(BlackImage);
DEV_Delay_ms(2000);
#endif
#if 1 // Drawing on the image
//1.Select Image
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(EPD_2IN13G_WHITE);
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
Paint_DrawPoint(10, 80, EPD_2IN13G_RED, DOT_PIXEL_1X1, DOT_STYLE_DFT);
Paint_DrawPoint(10, 90, EPD_2IN13G_YELLOW, DOT_PIXEL_2X2, DOT_STYLE_DFT);
Paint_DrawPoint(10, 100, EPD_2IN13G_BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT);
Paint_DrawLine(20, 70, 70, 120, EPD_2IN13G_RED, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(70, 70, 20, 120, EPD_2IN13G_RED, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawRectangle(20, 70, 70, 120, EPD_2IN13G_YELLOW, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawRectangle(80, 70, 130, 120, EPD_2IN13G_YELLOW, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawCircle(45, 95, 20, EPD_2IN13G_BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawCircle(105, 95, 20, EPD_2IN13G_BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawLine(85, 95, 125, 95, EPD_2IN13G_RED, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawLine(105, 75, 105, 115, EPD_2IN13G_YELLOW, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawString_EN(10, 0, "Red, yellow, white and black", &Font16, EPD_2IN13G_RED, EPD_2IN13G_YELLOW);
Paint_DrawString_EN(10, 35, "Four color e-Paper", &Font12, EPD_2IN13G_YELLOW, EPD_2IN13G_BLACK);
Paint_DrawString_CN(10, 125, "΢ѩµç×Ó", &Font24CN, EPD_2IN13G_RED, EPD_2IN13G_WHITE);
Paint_DrawNum(10, 50, 123456, &Font12, EPD_2IN13G_RED, EPD_2IN13G_WHITE);
printf("EPD_Display\r\n");
EPD_2IN13G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
#if 1 // Drawing on the image
//1.Select Image
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(EPD_2IN13G_WHITE);
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
Paint_DrawRectangle(1, 1, 168, 55, EPD_2IN13G_RED, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(1, 112, 167, 167, EPD_2IN13G_YELLOW, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(59, 1, 109, 167, EPD_2IN13G_BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
printf("EPD_Display\r\n");
EPD_2IN13G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
#if 1 // Drawing on the image
//1.Select Image
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(EPD_2IN13G_WHITE);
int hNumber, hWidth, vNumber, vWidth;
hNumber = 8;
hWidth = EPD_2IN13G_HEIGHT/hNumber; // 168/16=21
vNumber = 8;
vWidth = EPD_2IN13G_WIDTH/vNumber; // 168/16=21
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
for(int i=0; i<hNumber; i++) { // horizontal
Paint_DrawRectangle(1, 1+i*hWidth, EPD_2IN13G_WIDTH, hWidth*(1+i), EPD_2IN13G_BLACK + (i % 2), DOT_PIXEL_1X1, DRAW_FILL_FULL);
}
for(int i=0; i<vNumber; i++) { // vertical
if(i%2) {
Paint_DrawRectangle(1+i*vWidth, 1, vWidth*(i+1), EPD_2IN13G_HEIGHT, EPD_2IN13G_YELLOW + (i/2%2), DOT_PIXEL_1X1, DRAW_FILL_FULL);
}
}
printf("EPD_Display\r\n");
EPD_2IN13G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
printf("Clear...\r\n");
EPD_2IN13G_Clear(EPD_2IN13G_WHITE);
printf("Goto Sleep...\r\n");
EPD_2IN13G_Sleep();
free(BlackImage);
BlackImage = NULL;
DEV_Delay_ms(2000);//important, at least 2s
// close 5V
printf("close 5V, Module enters 0 power consumption ...\r\n");
DEV_Module_Exit();
return 0;
}

View File

@ -34,6 +34,7 @@
// ImageData2.c
/* --------------------------------------- */
extern const unsigned char gImage_2in13g[];
extern const unsigned char gImage_2in13b_V4b[];
extern const unsigned char gImage_2in13b_V4r[];

View File

@ -30,6 +30,492 @@
******************************************************************************/
#include "ImageData.h"
const unsigned char gImage_2in13g[7750] = {
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x55,0x55,0x55,0x7D,0x55,0x55,0x55,0x55,0x55,0x75,0xD7,0xF5,0x55,
0x55,0x55,0x55,0x55,0x75,0x75,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x55,0x55,0x55,0x7F,0x55,0x55,0x55,0x55,0x55,0x75,0xFF,0x7F,0x55,0x55,
0x55,0x55,0x55,0x75,0xF5,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x55,0x57,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x79,0xDF,0xD7,0xD5,0x55,0x55,
0x55,0x7F,0xF5,0x7D,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x55,0x57,0xFF,0xFF,0xD5,0x55,0x55,0x55,0x55,0xFD,0xD5,0xF5,0x55,0x55,0x55,0x55,
0x7F,0xFD,0x7F,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,
0x57,0x55,0x7D,0xF5,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFD,0x55,0x55,0x55,0x55,0x5D,
0x5D,0xF7,0xD5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,
0x55,0x7D,0x7D,0x55,0x55,0x55,0x55,0xFF,0xFF,0xFD,0x55,0x55,0x55,0x55,0x5D,0x5F,
0xD7,0xF5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0x5D,
0x7D,0x5F,0x55,0x55,0x55,0x55,0xFF,0xFD,0xDD,0x55,0x55,0x55,0x55,0x5D,0x7F,0x57,
0x75,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0x5D,0x7D,
0x7D,0x55,0x55,0x55,0x55,0x5B,0x7D,0xDD,0xD5,0x55,0x55,0x55,0x5D,0x75,0xD7,0x55,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0x5D,0x7D,0xF5,
0x55,0x55,0x55,0x55,0x7F,0xFD,0xDF,0xD5,0x55,0x55,0x55,0x5D,0x7D,0xF7,0x55,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0x5F,0xFF,0xD5,0x55,
0x55,0x55,0x55,0x5F,0x7D,0xDD,0x55,0x55,0x55,0x55,0x5D,0x7D,0xF7,0x55,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0x55,0x5F,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFD,0xDD,0x55,0x55,0x55,0x55,0x7F,0xF5,0x7F,0x55,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0xF5,0x5F,0x55,0x55,0x55,0x55,
0x55,0xFF,0xFD,0xFD,0x55,0x55,0x55,0x55,0x7F,0xF5,0x5F,0x55,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x7D,0x55,0x55,0x55,0x55,0x55,
0x7F,0xFD,0xFD,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x55,0x55,0x57,0xFD,0x55,0x55,0x55,0x55,0x55,0x55,0x7D,0x55,
0x55,0x55,0x55,0x55,0x55,0xF5,0xF7,0xD5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x55,0x57,0xFF,0xFF,0xD5,0x55,0x55,0x55,0x55,0x55,0x7D,0x55,0x55,
0x55,0x55,0x55,0x55,0x7F,0xF7,0xD5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x55,0x57,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x57,0xFD,0xFF,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFF,0xD5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x55,0x55,0x55,0x55,0x7F,0x55,0x55,0x55,0x55,0x57,0xFD,0xD7,0x55,0x55,0x55,
0x55,0x55,0x7D,0xF5,0xD5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x55,0x57,0xD5,0x55,0xD5,0x55,0x55,0x55,0x55,0x57,0x7D,0xD7,0x55,0x55,0x55,0x55,
0x57,0x6D,0xF5,0xD5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,
0x57,0xD5,0xFD,0xD5,0x55,0x55,0x55,0x55,0xF7,0x7D,0xD7,0x55,0x55,0x55,0x55,0x57,
0xF5,0xFD,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,
0x5F,0xF5,0xD5,0x55,0x55,0x55,0x55,0xF7,0x7D,0xD7,0x55,0x55,0x55,0x55,0x7D,0x5D,
0x7F,0xF5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0x5D,
0x55,0xDF,0x55,0x55,0x55,0x55,0xF7,0x7D,0xD7,0x55,0x55,0x55,0x55,0x7D,0x55,0x5F,
0xD5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0xD5,0x55,
0xFF,0x55,0x55,0x55,0x55,0xF7,0x7D,0xD7,0x55,0x55,0x55,0x55,0x7F,0xFF,0xDF,0x55,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0xFF,0x55,0xD5,
0x55,0x55,0x55,0x55,0xFF,0x7D,0xD7,0x55,0x55,0x55,0x55,0x5F,0xFF,0xDF,0x55,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0xDF,0xFD,0xD5,0x55,
0x55,0x55,0x55,0x7F,0x7D,0xFF,0x55,0x55,0x55,0x55,0x55,0x7D,0xDF,0x55,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0xD5,0x7D,0xD5,0x55,0x55,
0x55,0x55,0x55,0x7D,0x55,0x55,0x55,0x55,0x55,0x55,0xFD,0xFF,0x55,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0xD5,0x55,0xD5,0x55,0x55,0x55,
0x55,0x55,0x7D,0x55,0x55,0x55,0x55,0x55,0x57,0xD5,0x5F,0x55,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x55,0x57,0xD5,0x7D,0x55,0x55,0x55,0x55,0x55,0x7D,0x5F,0x55,0x55,
0x55,0x55,0x55,0x5F,0x57,0xD5,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x55,0x57,0xD5,0x7D,0x55,0x55,0x55,0x55,0x55,0x75,0x5F,0x55,0x55,0x55,
0x55,0x55,0x5F,0x57,0xD5,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,
0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,
0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,
0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,
0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,
0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,
0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,
0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,
0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,
0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x15,0x55,0x41,0x55,0x55,0x57,0x55,0x55,0x55,0x50,
0x15,0x55,0x55,0x75,0x50,0x55,0x54,0x15,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x5D,0x54,0x05,0x55,0x40,0x55,0x55,0x57,0x55,0x55,0x55,0x54,0x15,
0x55,0x55,0x75,0x50,0x15,0x54,0x05,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x5D,0x54,0x00,0x55,0x50,0x15,0x55,0x57,0x55,0x55,0x55,0x54,0x05,0x55,
0x55,0x75,0x50,0x05,0x55,0x01,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x54,0x00,0x15,0x54,0x15,0x55,0x57,0x55,0x40,0x00,0x00,0x05,0x55,0x55,
0x75,0x50,0x01,0x55,0x41,0x55,0x7F,0xFF,0xFF,0xFF,0xEB,0xFF,0xFF,0xFF,0xFF,0x55,
0x5D,0x54,0x10,0x05,0x54,0x15,0x55,0x57,0x55,0x40,0x00,0x00,0x05,0x55,0x55,0x75,
0x51,0x40,0x55,0x41,0x55,0x7F,0xFF,0xFF,0xFF,0xEB,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,
0x54,0x15,0x01,0x54,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x50,
0x50,0x15,0x41,0x55,0x7F,0xFF,0xFF,0xFF,0xEA,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,
0x15,0x40,0x00,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x50,0x54,
0x00,0x01,0x55,0x7F,0xFF,0xEA,0xAA,0xAA,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x15,
0x50,0x00,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x50,0x55,0x00,
0x05,0x55,0x7F,0xFF,0xAA,0xAA,0xAA,0xBF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x15,0x55,
0x05,0x55,0x55,0x57,0x55,0x50,0x55,0x55,0x05,0x55,0x55,0x75,0x50,0x55,0x50,0x55,
0x55,0x7F,0xFF,0xAF,0xFF,0xEE,0xAF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,
0x55,0x55,0x57,0x55,0x50,0x55,0x55,0x05,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,
0x7F,0xFF,0xAF,0xFF,0xEF,0xAB,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,
0x55,0x57,0x55,0x41,0x54,0x15,0x05,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,
0xFF,0xAF,0xFF,0xEF,0xEA,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x41,0x55,0x55,0x55,
0x57,0x55,0x45,0x50,0x05,0x05,0x55,0x55,0x75,0x50,0x55,0x55,0x55,0x55,0x7F,0xFF,
0xAF,0xAF,0xEF,0xFA,0xBF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x41,0x55,0x55,0x55,0x57,
0x55,0x41,0x54,0x01,0x05,0x55,0x55,0x75,0x50,0x15,0x55,0x55,0x55,0x7F,0xFF,0xAF,
0xAF,0xEF,0xFA,0xBF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x41,0x00,0x05,0x55,0x57,0x55,
0x41,0x50,0x40,0x05,0x55,0x55,0x75,0x50,0x55,0x55,0x55,0x55,0x7F,0xFF,0xAF,0xAF,
0xEF,0xEA,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x01,0x00,0x05,0x55,0x57,0x55,0x41,
0x40,0x50,0x05,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xAF,0xAB,0xEF,
0xAB,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x01,0x05,0x05,0x55,0x57,0x55,0x40,0x00,
0x54,0x05,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xAF,0xAA,0xAE,0xAF,
0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x41,0x05,0x05,0x55,0x57,0x55,0x50,0x01,0x55,
0x05,0x55,0x55,0x75,0x55,0x55,0x54,0x05,0x55,0x7F,0xFF,0xAF,0xEA,0xAA,0xBF,0xFF,
0xFF,0xFF,0x55,0x5D,0x54,0x50,0x41,0x05,0x05,0x55,0x57,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x75,0x55,0x55,0x55,0x05,0x55,0x7F,0xFF,0xAB,0xFF,0xFA,0xBF,0xFF,0xFF,
0xFF,0x55,0x5D,0x54,0x50,0x41,0x05,0x05,0x55,0x57,0x55,0x54,0x15,0x55,0x55,0x55,
0x55,0x75,0x55,0x55,0x55,0x01,0x55,0x7F,0xFF,0xAA,0xBF,0xEA,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x54,0x50,0x41,0x05,0x05,0x55,0x57,0x55,0x54,0x05,0x55,0x55,0x55,0x55,
0x75,0x50,0x00,0x00,0x01,0x55,0x7F,0xFF,0xEA,0xBF,0xEB,0xFF,0xFF,0xFF,0xFF,0x55,
0x5D,0x54,0x50,0x41,0x05,0x05,0x55,0x57,0x55,0x54,0x00,0x55,0x55,0x55,0x55,0x75,
0x50,0x00,0x00,0x01,0x55,0x7F,0xFF,0xFF,0xFF,0xEB,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,
0x54,0x50,0x41,0x05,0x05,0x55,0x57,0x55,0x54,0x00,0x05,0x55,0x55,0x55,0x75,0x55,
0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,
0x10,0x41,0x05,0x05,0x55,0x57,0x55,0x54,0x14,0x00,0x55,0x55,0x55,0x75,0x55,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x00,
0x41,0x00,0x05,0x55,0x57,0x55,0x54,0x15,0x40,0x05,0x55,0x55,0x75,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x00,0x41,
0x00,0x05,0x55,0x57,0x55,0x54,0x15,0x54,0x05,0x55,0x55,0x75,0x54,0x15,0x55,0x41,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x41,0x55,
0x55,0x55,0x57,0x55,0x40,0x00,0x00,0x05,0x55,0x55,0x75,0x54,0x05,0x55,0x41,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x41,0x55,0x55,
0x55,0x57,0x55,0x40,0x00,0x00,0x05,0x55,0x55,0x75,0x50,0x15,0x05,0x41,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,
0x57,0x55,0x54,0x15,0x55,0x55,0x55,0x55,0x75,0x50,0x54,0x01,0x41,0x55,0x7F,0xFF,
0xAF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,
0x55,0x54,0x15,0x55,0x55,0x55,0x55,0x75,0x50,0x55,0x00,0x41,0x55,0x7F,0xFE,0xAA,
0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x54,0x55,0x55,0x55,0x57,0x55,
0x54,0x15,0x55,0x55,0x55,0x55,0x75,0x50,0x54,0x10,0x01,0x55,0x7F,0xFF,0xEA,0xAA,
0xAA,0xAB,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x50,0x15,0x55,0x55,0x57,0x55,0x54,
0x05,0x55,0x55,0x55,0x55,0x75,0x50,0x10,0x14,0x01,0x55,0x7F,0xFF,0xFF,0xAA,0xAA,
0xAB,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x54,0x05,0x55,0x55,0x57,0x55,0x54,0x00,
0x55,0x55,0x55,0x55,0x75,0x50,0x00,0x15,0x01,0x55,0x7F,0xFF,0xFA,0xFF,0xFB,0xEB,
0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x00,0x00,0x05,0x55,0x55,0x57,0x55,0x54,0x00,0x05,
0x55,0x55,0x55,0x75,0x55,0x00,0x55,0x41,0x55,0x7F,0xFF,0xFA,0xFA,0xFB,0xEB,0xFF,
0xFF,0xFF,0x55,0x5D,0x54,0x00,0x00,0x41,0x55,0x55,0x57,0x55,0x54,0x14,0x00,0x55,
0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFA,0xFA,0xBB,0xEB,0xFF,0xFF,
0xFF,0x55,0x5D,0x54,0x55,0x50,0x40,0x55,0x55,0x57,0x55,0x54,0x15,0x40,0x05,0x55,
0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFA,0xFA,0xAB,0xEB,0xFF,0xFF,0xFF,
0x55,0x5D,0x54,0x55,0x50,0x50,0x15,0x55,0x57,0x55,0x54,0x15,0x54,0x05,0x55,0x55,
0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFA,0xFB,0xEA,0xEB,0xBF,0xFF,0xFF,0x55,
0x5D,0x54,0x50,0x50,0x55,0x05,0x55,0x57,0x55,0x40,0x00,0x00,0x05,0x55,0x55,0x75,
0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFA,0xFA,0xFA,0xAA,0xBF,0xFF,0xFF,0x55,0x5D,
0x54,0x50,0x50,0x55,0x05,0x55,0x57,0x55,0x40,0x00,0x00,0x05,0x55,0x55,0x75,0x55,
0x55,0x55,0x55,0x55,0x7F,0xFF,0xAA,0xAA,0xBB,0xAA,0xBF,0xFF,0xFF,0x55,0x5D,0x54,
0x50,0x50,0x54,0x05,0x55,0x57,0x55,0x54,0x15,0x55,0x55,0x55,0x55,0x75,0x55,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xAA,0xAA,0xBB,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x50,
0x50,0x50,0x55,0x55,0x57,0x55,0x54,0x15,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFA,0xFA,0xFB,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x50,0x00,
0x41,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,
0x55,0x7F,0xFF,0xFA,0xFA,0xFB,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x55,0x00,0x01,
0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,
0x7F,0xFF,0xFA,0xFA,0xFB,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x01,0x54,0x05,0x55,
0x55,0x57,0x55,0x50,0x05,0x51,0x55,0x55,0x55,0x75,0x41,0x41,0x55,0x41,0x55,0x7F,
0xFF,0xFA,0xFA,0xFB,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x01,0x54,0x15,0x55,0x55,
0x57,0x55,0x50,0x01,0x00,0x15,0x55,0x55,0x75,0x41,0x41,0x55,0x41,0x55,0x7F,0xFF,
0xFA,0xFA,0xFB,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x50,0x15,0x55,0x55,0x57,
0x55,0x41,0x40,0x00,0x05,0x55,0x55,0x75,0x41,0x40,0x01,0x41,0x55,0x7F,0xFF,0xFA,
0xFF,0xFF,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,
0x41,0x50,0x15,0x05,0x55,0x55,0x75,0x40,0x40,0x01,0x41,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x41,
0x50,0x55,0x05,0x55,0x55,0x75,0x50,0x41,0x41,0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x41,0x50,
0x55,0x05,0x55,0x55,0x75,0x50,0x41,0x41,0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x41,0x50,0x14,
0x05,0x55,0x55,0x75,0x54,0x05,0x41,0x41,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x40,0x00,0x00,0x05,
0x55,0x55,0x75,0x55,0x00,0x00,0x41,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x50,0x01,0x00,0x15,0x55,
0x55,0x75,0x55,0x00,0x00,0x41,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x50,0x15,0x55,0x55,0x55,0x55,
0x75,0x54,0x05,0x41,0x41,0x55,0x7F,0xFF,0xEB,0xFB,0xEA,0xFF,0xFF,0xFF,0xFF,0x55,
0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,
0x50,0x41,0x41,0x00,0x55,0x7F,0xFF,0xEA,0xEA,0xFA,0xAF,0xFF,0xFF,0xFF,0x55,0x5D,
0x55,0x40,0x05,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x50,
0x41,0x41,0x00,0x55,0x7F,0xFF,0xFA,0xEA,0xAB,0xAA,0xFF,0xFF,0xFF,0x55,0x5D,0x55,
0x00,0x00,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x40,0x40,
0x01,0x41,0x55,0x7F,0xFF,0xFA,0xEF,0xAB,0xFA,0xBF,0xFF,0xFF,0x55,0x5D,0x54,0x05,
0x00,0x05,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x40,0x01,
0x41,0x55,0x7F,0xFF,0xEA,0xFA,0xEA,0xBF,0xBF,0xFF,0xFF,0x55,0x5D,0x54,0x15,0x40,
0x00,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x41,0x55,0x41,
0x55,0x7F,0xFF,0xAA,0xBF,0xFE,0xBF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x15,0x50,0x40,
0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x41,0x55,0x41,0x55,
0x7F,0xFF,0xFA,0xAA,0xAA,0xAB,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x15,0x50,0x54,0x15,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,
0xFF,0xFF,0xFA,0xAA,0xAB,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x15,0x40,0x55,0x15,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,
0xAA,0xAA,0xBE,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x00,0x01,0x55,0x55,0x55,0x57,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x54,0x15,0x55,0x7F,0xFF,0xFF,
0xAF,0xBE,0xEB,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x00,0x01,0x55,0x55,0x55,0x57,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x54,0x15,0x55,0x7F,0xFF,0xEA,0xAA,
0xBE,0xEA,0xBF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x15,0x55,0x55,0x55,0x57,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x14,0x15,0x55,0x7F,0xFF,0xEA,0xAA,0xBE,
0xEA,0xBF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x04,0x15,0x55,0x7F,0xFF,0xFF,0xAF,0xBE,0xEA,
0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x55,0x55,0x01,0x55,0x55,0x57,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x75,0x55,0x54,0x04,0x15,0x55,0x7F,0xFF,0xEA,0xAA,0xBE,0xEB,0xFF,
0xFF,0xFF,0x55,0x5D,0x54,0x55,0x55,0x41,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x75,0x55,0x40,0x14,0x15,0x55,0x7F,0xFF,0xEF,0xAF,0xBE,0xEB,0xFF,0xFF,
0xFF,0x55,0x5D,0x54,0x50,0x04,0x00,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x75,0x41,0x41,0x54,0x15,0x55,0x7F,0xFF,0xAF,0xAF,0xBE,0xAB,0xFF,0xFF,0xFF,
0x55,0x5D,0x54,0x50,0x04,0x00,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x75,0x41,0x50,0x54,0x15,0x55,0x7F,0xFF,0xAA,0xAA,0xBE,0xAB,0xFF,0xFF,0xFF,0x55,
0x5D,0x54,0x15,0x45,0x55,0x01,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,
0x41,0x55,0x54,0x15,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,
0x54,0x15,0x45,0x41,0x45,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,
0x55,0x54,0x15,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,
0x05,0x45,0x41,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x40,0x00,
0x00,0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x00,
0x45,0x41,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x40,0x00,0x00,
0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x00,0x45,
0x00,0x05,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x54,0x00,0x00,0x00,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x05,0x44,0x00,
0x05,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x54,0x15,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x15,0x44,0x10,0x55,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x54,0x15,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x15,0x44,0x14,0x55,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x54,0x15,0x55,0x7F,0xFF,
0xFF,0xFA,0xFF,0xFA,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x00,0x04,0x14,0x15,0x55,0x57,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,
0xFE,0xAF,0xFA,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x50,0x04,0x14,0x15,0x55,0x57,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xAA,0xAA,
0xAA,0xBA,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x55,0x54,0x01,0x05,0x55,0x57,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x04,0x55,0x55,0x55,0x7F,0xFF,0xEB,0xFF,0xEA,
0xAA,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x55,0x55,0x01,0x55,0x55,0x57,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x75,0x41,0x04,0x44,0x00,0x55,0x7F,0xFF,0xEB,0xFF,0xEF,0xEA,
0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x75,0x41,0x10,0x44,0x00,0x55,0x7F,0xFF,0xEA,0xAA,0xAF,0xFA,0xFF,
0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x75,0x41,0x14,0x44,0x50,0x55,0x7F,0xFF,0xEA,0xAA,0xAF,0xFA,0xFF,0xFF,
0xFF,0x55,0x5D,0x54,0x14,0x11,0x54,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x75,0x41,0x14,0x44,0x40,0x55,0x7F,0xFF,0xFF,0xAF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x54,0x14,0x10,0x54,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x75,0x41,0x04,0x44,0x00,0x55,0x7F,0xFF,0xFF,0xAF,0xAF,0xFA,0xFF,0xFF,0xFF,0x55,
0x5D,0x54,0x14,0x14,0x00,0x05,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,
0x41,0x04,0x44,0x50,0x55,0x7F,0xFF,0xFF,0xAF,0xAA,0xBA,0xFF,0xFF,0xFF,0x55,0x5D,
0x54,0x04,0x15,0x00,0x05,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x40,
0x04,0x00,0x00,0x55,0x7F,0xFF,0xFF,0xAF,0xAA,0xBA,0xFF,0xFF,0xFF,0x55,0x5D,0x55,
0x04,0x10,0x54,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x40,0x04,
0x00,0x00,0x55,0x7F,0xFF,0xAF,0xAF,0xBF,0xFA,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x40,
0x10,0x54,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x04,0x44,
0x50,0x55,0x7F,0xFF,0xAF,0xAF,0xBF,0xFA,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x40,0x10,
0x00,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x00,0x44,0x00,
0x55,0x7F,0xFF,0xAF,0xAF,0xAF,0xFA,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x00,0x04,0x00,
0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x14,0x44,0x40,0x55,
0x7F,0xFF,0xAF,0xFF,0xAA,0xAA,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x00,0x05,0x55,0x55,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x14,0x44,0x50,0x55,0x7F,
0xFF,0xAA,0xAA,0xAA,0xAA,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x40,0x14,0x00,0x15,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x10,0x44,0x00,0x55,0x7F,0xFF,
0xEA,0xAA,0xBF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x40,0x14,0x00,0x15,0x55,0x57,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x04,0x44,0x00,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x04,0x14,0x14,0x15,0x55,0x57,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x04,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x04,0x14,0x14,0x15,0x55,0x57,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x14,0x14,0x00,0x15,0x55,0x57,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x14,0x14,0x00,0x15,0x55,0x57,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x75,0x50,0x15,0x50,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x5D,0x54,0x14,0x15,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x75,0x54,0x15,0x50,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x75,0x55,0x05,0x50,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x75,0x55,0x40,0x10,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,
0x41,0x50,0x00,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,
0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,
0x55,0x40,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,
0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x41,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,
0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x40,0x00,0x00,
0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,
0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x40,0x00,0x00,0x00,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,
0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x00,0x55,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x51,0x55,0x55,0x55,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x50,0x01,0x55,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x15,0x55,0x55,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x40,0x41,0x55,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x01,0x55,0x55,0x55,0x57,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x41,0x50,0x55,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x00,0x15,0x55,0x55,0x57,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x05,0x54,0x05,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x50,0x01,0x55,0x55,0x57,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x75,0x50,0x05,0x54,0x15,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x55,0x00,0x15,0x55,0x57,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x75,0x54,0x15,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x50,0x55,0x50,0x15,0x55,0x57,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x5D,0x54,0x00,0x00,0x00,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x5D,0x54,0x00,0x00,0x00,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x75,0x41,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x55,0x50,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x75,0x40,0x00,0x00,0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x5D,0x55,0x50,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,
0x54,0x00,0x00,0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,
0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,
0x55,0x54,0x10,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,
0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x45,0x04,
0x14,0x10,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x00,
0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x01,0x04,0x14,
0x10,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x00,0x00,
0x00,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x50,0x00,0x00,0x10,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x45,
0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x54,0x00,0x00,0x10,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x50,0x55,0x45,0x15,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x04,0x14,0x10,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x10,0x51,0x45,0x15,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x04,0x14,0x10,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x00,0x51,0x45,0x15,0x55,0x57,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x04,0x14,0x10,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x50,0x51,0x45,0x15,0x55,0x57,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x40,0x00,0x00,0x10,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x50,0x51,0x45,0x15,0x55,0x57,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x75,0x40,0x00,0x00,0x10,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x50,0x51,0x45,0x15,0x55,0x57,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x75,0x55,0x04,0x10,0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x5D,0x54,0x10,0x51,0x45,0x15,0x55,0x57,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x75,0x55,0x04,0x14,0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x5D,0x54,0x50,0x51,0x45,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x75,0x55,0x05,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x5D,0x54,0x00,0x51,0x45,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x54,0x10,0x51,0x40,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x5D,0x50,0x50,0x51,0x40,0x15,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,
0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,
0x50,0x50,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,
0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,
0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,
0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,
0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,
0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x5D,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,
0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,
0x55,0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,
0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,
0x55,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,
0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,
0x55,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,
0x55,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,
0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5D,0x55,0x55,0x55,0x55,0x55,0x55,
0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,};
const unsigned char gImage_2in13b_V4b[4000] = { /*0X00,0X01,0X7A,0X00,0XFA,0X00,*/

View File

@ -0,0 +1,237 @@
/*****************************************************************************
* | File : EPD_2in13g.c
* | Author : Waveshare team
* | Function : 2inch13 e-paper (G)
* | Info :
*----------------
* | This version: V1.0
* | Date : 2023-04-07
* | Info :
* -----------------------------------------------------------------------------
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation 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
# furished 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 OR 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.
#
******************************************************************************/
#include "EPD_2in13g.h"
#include "Debug.h"
UWORD Source_BITS = EPD_2IN13G_WIDTH;
UWORD Gate_BITS = EPD_2IN13G_HEIGHT;
/******************************************************************************
function : Software reset
parameter:
******************************************************************************/
static void EPD_2IN13G_Reset(void)
{
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(200);
DEV_Digital_Write(EPD_RST_PIN, 0);
DEV_Delay_ms(2);
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(200);
}
/******************************************************************************
function : send command
parameter:
Reg : Command register
******************************************************************************/
static void EPD_2IN13G_SendCommand(UBYTE Reg)
{
DEV_Digital_Write(EPD_DC_PIN, 0);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_SPI_WriteByte(Reg);
DEV_Digital_Write(EPD_CS_PIN, 1);
}
/******************************************************************************
function : send data
parameter:
Data : Write data
******************************************************************************/
static void EPD_2IN13G_SendData(UBYTE Data)
{
DEV_Digital_Write(EPD_DC_PIN, 1);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_SPI_WriteByte(Data);
DEV_Digital_Write(EPD_CS_PIN, 1);
}
/******************************************************************************
function : Wait until the busy_pin goes HIGH
parameter:
******************************************************************************/
void EPD_2IN13G_ReadBusy(void)
{
Debug("e-Paper busy\r\n");
DEV_Delay_ms(100);
while(DEV_Digital_Read(EPD_BUSY_PIN) != 1) { //HIGH: idle, LOW: busy
DEV_Delay_ms(100);
}
Debug("e-Paper busy release\r\n");
}
/******************************************************************************
function : Turn On Display
parameter:
******************************************************************************/
static void EPD_2IN13G_TurnOnDisplay(void)
{
EPD_2IN13G_SendCommand(0x12); // DISPLAY_REFRESH
EPD_2IN13G_SendData(0x00);
EPD_2IN13G_ReadBusy();
}
/******************************************************************************
function : Setting the display window
parameter:
******************************************************************************/
static void EPD_2IN9_V2_SetWindows(void)
{
if(EPD_2IN13G_WIDTH < 128)
Source_BITS = 128;
EPD_2IN13G_SendCommand(0x61); //TRES
EPD_2IN13G_SendData(Source_BITS/256); // EPD_2IN13G_WIDTH_H
EPD_2IN13G_SendData(Source_BITS%256); // EPD_2IN13G_WIDTH_L
EPD_2IN13G_SendData(Gate_BITS/256); // EPD_2IN13G_HEIGHT_H
EPD_2IN13G_SendData(Gate_BITS%256); // EPD_2IN13G_HEIGHT_L
}
/******************************************************************************
function : Initialize the e-Paper register
parameter:
******************************************************************************/
void EPD_2IN13G_Init(void)
{
EPD_2IN13G_Reset();
EPD_2IN13G_ReadBusy();
EPD_2IN13G_SendCommand(0x4D);
EPD_2IN13G_SendData(0x78);
EPD_2IN13G_SendCommand(0x00); //PSR
EPD_2IN13G_SendData(0x0F);
EPD_2IN13G_SendData(0x29);
EPD_2IN13G_SendCommand(0x01); //PWRR
EPD_2IN13G_SendData(0x07);
EPD_2IN13G_SendData(0x00);
EPD_2IN13G_SendCommand(0x03); //POFS
EPD_2IN13G_SendData(0x10);
EPD_2IN13G_SendData(0x54);
EPD_2IN13G_SendData(0x44);
EPD_2IN13G_SendCommand(0x06); //BTST_P
EPD_2IN13G_SendData(0x05);
EPD_2IN13G_SendData(0x00);
EPD_2IN13G_SendData(0x3F);
EPD_2IN13G_SendData(0x0A);
EPD_2IN13G_SendData(0x25);
EPD_2IN13G_SendData(0x12);
EPD_2IN13G_SendData(0x1A);
EPD_2IN13G_SendCommand(0x50); //CDI
EPD_2IN13G_SendData(0x37);
EPD_2IN13G_SendCommand(0x60); //TCON
EPD_2IN13G_SendData(0x02);
EPD_2IN13G_SendData(0x02);
EPD_2IN9_V2_SetWindows(); // Setting the display window
EPD_2IN13G_SendCommand(0xE7);
EPD_2IN13G_SendData(0x1C);
EPD_2IN13G_SendCommand(0xE3);
EPD_2IN13G_SendData(0x22);
EPD_2IN13G_SendCommand(0xB4);
EPD_2IN13G_SendData(0xD0);
EPD_2IN13G_SendCommand(0xB5);
EPD_2IN13G_SendData(0x03);
EPD_2IN13G_SendCommand(0xE9);
EPD_2IN13G_SendData(0x01);
EPD_2IN13G_SendCommand(0x30);
EPD_2IN13G_SendData(0x08);
EPD_2IN13G_SendCommand(0x04);
EPD_2IN13G_ReadBusy();
}
/******************************************************************************
function : Clear screen
parameter:
******************************************************************************/
void EPD_2IN13G_Clear(UBYTE color)
{
UWORD Width, Height;
Width = Source_BITS / 4 ;
Height = EPD_2IN13G_HEIGHT;
EPD_2IN13G_SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < Width; i++) {
EPD_2IN13G_SendData((color << 6) | (color << 4) | (color << 2) | color);
}
}
EPD_2IN13G_TurnOnDisplay();
}
/******************************************************************************
function : Sends the image buffer in RAM to e-Paper and displays
parameter:
******************************************************************************/
void EPD_2IN13G_Display(UBYTE *Image)
{
UWORD Width, Height;
Width = (EPD_2IN13G_WIDTH % 4 == 0)? (EPD_2IN13G_WIDTH / 4 ): (EPD_2IN13G_WIDTH / 4 + 1);
Height = EPD_2IN13G_HEIGHT;
EPD_2IN13G_SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < (Source_BITS / 4); i++) {
if(i < 31 ) EPD_2IN13G_SendData(Image[i + j * Width]);
else EPD_2IN13G_SendData(0x00);
}
}
EPD_2IN13G_TurnOnDisplay();
}
/******************************************************************************
function : Enter sleep mode
parameter:
******************************************************************************/
void EPD_2IN13G_Sleep(void)
{
EPD_2IN13G_SendCommand(0x02); //power off
EPD_2IN13G_ReadBusy(); //waiting for the electronic paper IC to release the idle signal
DEV_Delay_ms(100); //!!!The delay here is necessary,100mS at least!!!
EPD_2IN13G_SendCommand(0x07); //deep sleep
EPD_2IN13G_SendData(0XA5);
}

View File

@ -0,0 +1,32 @@
/*****************************************************************************
* | File : EPD_2in13g.h
* | Author : Waveshare team
* | Function : 2inch13 e-paper (G)
* | Info :
*----------------
* | This version: V1.0
* | Date : 2023-04-07
* | Info :
* -----------------------------------------------------------------------------
******************************************************************************/
#ifndef __EPD_2IN13G_H_
#define __EPD_2IN13G_H_
#include "DEV_Config.h"
// Display resolution
#define EPD_2IN13G_WIDTH 122
#define EPD_2IN13G_HEIGHT 250
// Color
#define EPD_2IN13G_BLACK 0x0
#define EPD_2IN13G_WHITE 0x1
#define EPD_2IN13G_YELLOW 0x2
#define EPD_2IN13G_RED 0x3
void EPD_2IN13G_Init(void);
void EPD_2IN13G_Clear(UBYTE color);
void EPD_2IN13G_Display(UBYTE *Image);
void EPD_2IN13G_Sleep(void);
#endif

View File

@ -35,3 +35,4 @@
2022-08-17添加新程序2.36inch e-Paper (G)例程。
2022-10-22添加新程序7.3inch e-Paper (F)例程。
2022-10-27添加新程序2.7inch V2 e-Paper 例程。
2023-05-29添加新程序2.13inch e-Paper (G)例程。

View File

@ -34,3 +34,4 @@
2022-08-17: Added new programs 2.36inch e-Paper (G) routine.
2022-10-22: Added new programs 7.3inch e-Paper (F) routine.
2022-10-27: Added new programs 2.7inch V2 e-Paper routine.
2023-05-29: Added new programs 2.13inch e-Paper (G) routine.