add 4.01f demo

This commit is contained in:
SSYYL 2021-01-05 15:21:46 +08:00
parent c65eec8e5e
commit 7b958776c8
52 changed files with 11253 additions and 1905 deletions

View file

@ -0,0 +1,228 @@
/*****************************************************************************
* | File : EPD_4in01f.c
* | Author : Waveshare team
* | Function : 4.01inch e-paper
* | Info :
*----------------
* | This version: V1.0
* | Date : 2020-12-25
* | 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 <stdlib.h>
#include "epd4in01f.h"
#include "imagedata.h"
Epd::~Epd() {
};
Epd::Epd() {
reset_pin = RST_PIN;
dc_pin = DC_PIN;
cs_pin = CS_PIN;
busy_pin = BUSY_PIN;
width = EPD_WIDTH;
height = EPD_HEIGHT;
};
/******************************************************************************
function : Initialize the e-Paper register
parameter:
******************************************************************************/
int Epd::Init(void) {
if (IfInit() != 0) {
return -1;
}
Reset();
EPD_4IN01F_BusyHigh();
SendCommand(0x00);
SendData(0x2f);
SendData(0x00);
SendCommand(0x01);
SendData(0x37);
SendData(0x00);
SendData(0x05);
SendData(0x05);
SendCommand(0x03);
SendData(0x00);
SendCommand(0x06);
SendData(0xC7);
SendData(0xC7);
SendData(0x1D);
SendCommand(0x41);
SendData(0x00);
SendCommand(0x50);
SendData(0x37);
SendCommand(0x60);
SendData(0x22);
SendCommand(0x61);
SendData(0x02);
SendData(0x80);
SendData(0x01);
SendData(0x90);
SendCommand(0xE3);
SendData(0xAA);
}
/**
* @brief: basic function for sending commands
*/
void Epd::SendCommand(unsigned char command) {
DigitalWrite(dc_pin, LOW);
SpiTransfer(command);
}
/**
* @brief: basic function for sending data
*/
void Epd::SendData(unsigned char data) {
DigitalWrite(dc_pin, HIGH);
SpiTransfer(data);
}
void Epd::EPD_4IN01F_BusyHigh(void)// If BUSYN=0 then waiting
{
while(!(DigitalRead(BUSY_PIN)));
}
void Epd::EPD_4IN01F_BusyLow(void)// If BUSYN=1 then waiting
{
while(DigitalRead(BUSY_PIN));
}
/**
* @brief: module reset.
* often used to awaken the module in deep sleep,
* see Epd::Sleep();
*/
void Epd::Reset(void) {
DigitalWrite(reset_pin, HIGH);
DelayMs(200);
DigitalWrite(reset_pin, LOW); //module reset
DelayMs(1);
DigitalWrite(reset_pin, HIGH);
DelayMs(200);
}
/******************************************************************************
function : Sends the image buffer in RAM to e-Paper and displays
parameter:
******************************************************************************/
void Epd::EPD_4IN01F_Display(const UBYTE *image) {
unsigned long i,j;
SendCommand(0x61);//Set Resolution setting
SendData(0x02);
SendData(0x80);
SendData(0x01);
SendData(0x90);
SendCommand(0x10);
for(i=0; i<height; i++) {
for(j=0; j<width/2; j++) {
SendData(image[j+((width/2)*i)]);
}
}
SendCommand(0x04);//0x04
EPD_4IN01F_BusyHigh();
SendCommand(0x12);//0x12
EPD_4IN01F_BusyHigh();
SendCommand(0x02); //0x02
EPD_4IN01F_BusyLow();
DelayMs(200);
}
/******************************************************************************
function : Sends the part image buffer in RAM to e-Paper and displays
parameter:
******************************************************************************/
void Epd::EPD_4IN01F_Display_part(const UBYTE *image, UWORD xstart, UWORD ystart,
UWORD image_width, UWORD image_heigh)
{
unsigned long i,j;
SendCommand(0x61);//Set Resolution setting
SendData(0x02);
SendData(0x80);
SendData(0x01);
SendData(0x90);
SendCommand(0x10);
for(i=0; i<height; i++) {
for(j=0; j< width/2; j++) {
if(i<image_heigh+ystart && i>=ystart && j<(image_width+xstart)/2 && j>=xstart/2) {
SendData(pgm_read_byte(&image[(j-xstart/2) + (image_width/2*(i-ystart))]));
}
else {
SendData(0x11);
}
}
}
SendCommand(0x04);//0x04
EPD_4IN01F_BusyHigh();
SendCommand(0x12);//0x12
EPD_4IN01F_BusyHigh();
SendCommand(0x02); //0x02
EPD_4IN01F_BusyLow();
DelayMs(200);
}
/******************************************************************************
function :
Clear screen
******************************************************************************/
void Epd::Clear(UBYTE color) {
SendCommand(0x61);//Set Resolution setting
SendData(0x02);
SendData(0x80);
SendData(0x01);
SendData(0x90);
SendCommand(0x10);
for(int i=0; i<width/2; i++) {
for(int j=0; j<height; j++) {
SendData((color<<4)|color);
}
}
SendCommand(0x04);//0x04
EPD_4IN01F_BusyHigh();
SendCommand(0x12);//0x12
EPD_4IN01F_BusyHigh();
SendCommand(0x02); //0x02
EPD_4IN01F_BusyLow();
DelayMs(500);
}
/**
* @brief: After this command is transmitted, the chip would enter the
* deep-sleep mode to save power.
* The deep sleep mode would return to standby by hardware reset.
* The only one parameter is a check code, the command would be
* You can use EPD_Reset() to awaken
*/
void Epd::Sleep(void) {
DelayMs(100);
SendCommand(0x07);
SendData(0xA5);
DelayMs(100);
DigitalWrite(RST_PIN, 0); // Reset
}
/* END OF FILE */

View file

@ -0,0 +1,84 @@
/*****************************************************************************
* | File : EPD_4in01f.h
* | Author : Waveshare team
* | Function : 4.01inch e-paper
* | Info :
*----------------
* | This version: V1.0
* | Date : 2020-12-25
* | 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.
#
******************************************************************************/
#ifndef __EPD_4IN01F_H__
#define __EPD_4IN01F_H__
#include "epdif.h"
// Display resolution
#define EPD_WIDTH 640
#define EPD_HEIGHT 400
#define UWORD unsigned int
#define UBYTE unsigned char
#define UDOUBLE unsigned long
/**********************************
Color Index
**********************************/
#define EPD_4IN01F_BLACK 0x0 /// 000
#define EPD_4IN01F_WHITE 0x1 /// 001
#define EPD_4IN01F_GREEN 0x2 /// 010
#define EPD_4IN01F_BLUE 0x3 /// 011
#define EPD_4IN01F_RED 0x4 /// 100
#define EPD_4IN01F_YELLOW 0x5 /// 101
#define EPD_4IN01F_ORANGE 0x6 /// 110
#define EPD_4IN01F_CLEAN 0x7 /// 111 unavailable Afterimage
class Epd : EpdIf {
public:
Epd();
~Epd();
int Init(void);
void EPD_4IN01F_BusyHigh(void);
void EPD_4IN01F_BusyLow(void);
void Reset(void);
void EPD_4IN01F_Display(const UBYTE *image);
void EPD_4IN01F_Display_part(const UBYTE *image, UWORD xstart, UWORD ystart,
UWORD image_width, UWORD image_heigh);
void SendCommand(unsigned char command);
void SendData(unsigned char data);
void Sleep(void);
void Clear(UBYTE color);
private:
unsigned int reset_pin;
unsigned int dc_pin;
unsigned int cs_pin;
unsigned int busy_pin;
unsigned long width;
unsigned long height;
};
#endif /* EPD5IN83B_HD_H */
/* END OF FILE */

View file

@ -0,0 +1,52 @@
/**
@filename : EPD_4in01f.ino
@brief : EPD_4in01 e-paper F display demo
@author : Waveshare
Copyright (C) Waveshare Dec 25 2020
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 "imagedata.h"
#include "epd4in01f.h"
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Epd epd;
if (epd.Init() != 0) {
Serial.print("e-Paper init failed");
return;
}
Serial.print("e-Paper Clear\r\n ");
epd.Clear(EPD_4IN01F_WHITE);
Serial.print("draw image\r\n ");
epd.EPD_4IN01F_Display_part(gImage_4in01f, 204, 153, 192, 143);
delay(2000);
}
void loop() {
// put your main code here, to run repeatedly:
}

View file

@ -0,0 +1,65 @@
/**
* @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(2000000, MSBFIRST, SPI_MODE0));
return 0;
}

51
Arduino/epd4in01f/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,888 @@
/**
* @filename : imagedata.cpp
* @brief : data file for epd demo
*
* Copyright (C) Waveshare July 8 2020
*
* 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>
const unsigned char gImage_4in01f[13728] PROGMEM = {
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x36, 0x6, 0x36, 0x36, 0x36, 0x36, 0x6, 0x36, 0x6,
0x36, 0x6, 0x36, 0x6, 0x36, 0x36, 0x0, 0x61, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x6, 0x36,
0x6, 0x36, 0x6, 0x36, 0x36, 0x6, 0x36, 0x6, 0x36, 0x6, 0x36, 0x36, 0x36, 0x6, 0x36, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x2, 0x36, 0x32, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
0x63, 0x63, 0x63, 0x63, 0x60, 0x23, 0x63, 0x23, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x3, 0x26,
0x36, 0x36, 0x36, 0x36, 0x23, 0x63, 0x63, 0x63, 0x63, 0x63, 0x60, 0x63, 0x26, 0x36, 0x2, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x12, 0x11, 0x12, 0x11, 0x21, 0x12, 0x11, 0x21, 0x11, 0x12, 0x11, 0x21, 0x12, 0x11, 0x21,
0x12, 0x13, 0x12, 0x16, 0x13, 0x12, 0x11, 0x31, 0x21, 0x31, 0x23, 0x12, 0x32, 0x13, 0x23, 0x21,
0x11, 0x11, 0x31, 0x11, 0x13, 0x11, 0x11, 0x36, 0x36, 0x36, 0x32, 0x63, 0x26, 0x36, 0x6, 0x36,
0x36, 0x6, 0x32, 0x63, 0x63, 0x66, 0x36, 0x36, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x6, 0x36,
0x36, 0x23, 0x62, 0x36, 0x36, 0x1, 0x6, 0x36, 0x6, 0x32, 0x36, 0x36, 0x63, 0x23, 0x63, 0x1,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x31, 0x11, 0x13, 0x11, 0x31, 0x21, 0x13, 0x12,
0x11, 0x31, 0x11, 0x31, 0x11, 0x13, 0x11, 0x13, 0x11, 0x12, 0x11, 0x31, 0x13, 0x11, 0x13, 0x11,
0x31, 0x11, 0x11, 0x12, 0x11, 0x11, 0x21, 0x21, 0x11, 0x21, 0x11, 0x61, 0x11, 0x21, 0x11, 0x31,
0x11, 0x21, 0x11, 0x12, 0x11, 0x11, 0x23, 0x60, 0x10, 0x23, 0x66, 0x36, 0x36, 0x36, 0x36, 0x6,
0x36, 0x36, 0x36, 0x36, 0x36, 0x32, 0x36, 0x6, 0x21, 0x11, 0x11, 0x11, 0x11, 0x10, 0x1, 0x36,
0x32, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x24, 0x36, 0x36, 0x36, 0x36, 0x0, 0x61,
0x11, 0x11, 0x11, 0x11, 0x11, 0x31, 0x16, 0x11, 0x11, 0x12, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x12, 0x11, 0x61, 0x11, 0x13, 0x11, 0x11, 0x11, 0x12, 0x13, 0x11, 0x11, 0x11, 0x13, 0x11, 0x12,
0x11, 0x21, 0x21, 0x31, 0x12, 0x13, 0x11, 0x11, 0x31, 0x11, 0x21, 0x21, 0x23, 0x11, 0x21, 0x21,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x32, 0x36, 0x36, 0x32, 0x36, 0x36, 0x6, 0x36, 0x36,
0x36, 0x6, 0x36, 0x6, 0x36, 0x36, 0x6, 0x30, 0x31, 0x11, 0x11, 0x11, 0x11, 0x36, 0x6, 0x32,
0x63, 0x60, 0x60, 0x63, 0x63, 0x63, 0x20, 0x63, 0x63, 0x63, 0x63, 0x62, 0x31, 0x6, 0x32, 0x36,
0x31, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x16, 0x11, 0x11, 0x21, 0x16, 0x11, 0x21, 0x13,
0x11, 0x11, 0x12, 0x16, 0x11, 0x11, 0x21, 0x21, 0x11, 0x11, 0x11, 0x12, 0x12, 0x11, 0x12, 0x11,
0x11, 0x13, 0x11, 0x11, 0x31, 0x11, 0x13, 0x21, 0x11, 0x31, 0x13, 0x13, 0x11, 0x13, 0x13, 0x61,
0x11, 0x31, 0x13, 0x11, 0x31, 0x11, 0x36, 0x6, 0x36, 0x23, 0x63, 0x62, 0x36, 0x36, 0x36, 0x32,
0x6, 0x36, 0x36, 0x36, 0x26, 0x36, 0x32, 0x6, 0x31, 0x11, 0x31, 0x11, 0x11, 0x23, 0x23, 0x63,
0x63, 0x63, 0x23, 0x62, 0x36, 0x26, 0x36, 0x36, 0x6, 0x36, 0x6, 0x36, 0x36, 0x1, 0x6, 0x2,
0x11, 0x11, 0x13, 0x11, 0x11, 0x11, 0x31, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x11, 0x11,
0x11, 0x61, 0x21, 0x11, 0x12, 0x11, 0x11, 0x13, 0x11, 0x21, 0x61, 0x21, 0x11, 0x12, 0x11, 0x31,
0x13, 0x11, 0x12, 0x11, 0x12, 0x12, 0x11, 0x16, 0x21, 0x11, 0x21, 0x12, 0x12, 0x12, 0x11, 0x21,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x36, 0x36, 0x32, 0x63, 0x63, 0x63, 0x60, 0x63, 0x63,
0x63, 0x20, 0x63, 0x63, 0x3, 0x26, 0x36, 0x30, 0x63, 0x11, 0x11, 0x31, 0x11, 0x60, 0x63, 0x26,
0x36, 0x36, 0x36, 0x36, 0x63, 0x3, 0x63, 0x63, 0x63, 0x63, 0x23, 0x63, 0x63, 0x23, 0x63, 0x63,
0x11, 0x31, 0x11, 0x11, 0x13, 0x11, 0x11, 0x11, 0x13, 0x11, 0x61, 0x13, 0x12, 0x11, 0x11, 0x21,
0x13, 0x11, 0x11, 0x12, 0x11, 0x31, 0x13, 0x11, 0x11, 0x31, 0x11, 0x16, 0x13, 0x11, 0x61, 0x12,
0x11, 0x21, 0x13, 0x12, 0x11, 0x11, 0x31, 0x11, 0x12, 0x16, 0x12, 0x11, 0x31, 0x61, 0x21, 0x31,
0x11, 0x21, 0x21, 0x16, 0x11, 0x11, 0x36, 0x32, 0x63, 0x63, 0x63, 0x63, 0x60, 0x63, 0x60, 0x63,
0x63, 0x63, 0x63, 0x60, 0x66, 0x36, 0x36, 0x32, 0x1, 0x11, 0x11, 0x11, 0x11, 0x30, 0x63, 0x63,
0x63, 0x26, 0x36, 0x36, 0x36, 0x66, 0x36, 0x36, 0x36, 0x36, 0x36, 0x6, 0x36, 0x36, 0x32, 0x36,
0x21, 0x11, 0x11, 0x13, 0x11, 0x11, 0x11, 0x21, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x11,
0x21, 0x13, 0x11, 0x31, 0x11, 0x11, 0x21, 0x12, 0x11, 0x11, 0x21, 0x31, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x21, 0x13, 0x16, 0x31, 0x12, 0x13, 0x11, 0x31, 0x21, 0x31, 0x12, 0x13, 0x11, 0x21,
0x11, 0x11, 0x11, 0x11, 0x13, 0x11, 0x16, 0x6, 0x32, 0x36, 0x32, 0x63, 0x63, 0x26, 0x36, 0x36,
0x36, 0x63, 0x60, 0x63, 0x63, 0x63, 0x23, 0x66, 0x0, 0x11, 0x11, 0x11, 0x11, 0x63, 0x62, 0x36,
0x23, 0x63, 0x42, 0x36, 0x36, 0x33, 0x62, 0x63, 0x26, 0x6, 0x36, 0x32, 0x60, 0x63, 0x60, 0x60,
0x31, 0x11, 0x12, 0x11, 0x11, 0x12, 0x11, 0x11, 0x11, 0x11, 0x31, 0x21, 0x11, 0x11, 0x31, 0x11,
0x11, 0x11, 0x21, 0x11, 0x31, 0x11, 0x11, 0x11, 0x31, 0x21, 0x11, 0x11, 0x21, 0x31, 0x21, 0x31,
0x21, 0x31, 0x12, 0x11, 0x11, 0x12, 0x11, 0x11, 0x21, 0x11, 0x31, 0x12, 0x11, 0x21, 0x21, 0x31,
0x11, 0x31, 0x13, 0x11, 0x21, 0x11, 0x32, 0x36, 0x36, 0x6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x6,
0x36, 0x36, 0x36, 0x36, 0x36, 0x6, 0x63, 0x23, 0x66, 0x11, 0x21, 0x11, 0x13, 0x2, 0x36, 0x36,
0x36, 0x6, 0x36, 0x6, 0x23, 0x66, 0x36, 0x36, 0x36, 0x36, 0x6, 0x36, 0x36, 0x32, 0x36, 0x30,
0x11, 0x11, 0x11, 0x16, 0x11, 0x11, 0x13, 0x11, 0x31, 0x21, 0x11, 0x11, 0x31, 0x12, 0x11, 0x21,
0x12, 0x11, 0x11, 0x11, 0x11, 0x21, 0x12, 0x11, 0x11, 0x13, 0x11, 0x21, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x61, 0x12, 0x12, 0x11, 0x31, 0x21, 0x31, 0x21, 0x11, 0x21, 0x31, 0x13, 0x13, 0x12,
0x11, 0x11, 0x11, 0x21, 0x11, 0x11, 0x10, 0x63, 0x60, 0x13, 0x26, 0x36, 0x36, 0x36, 0x36, 0x32,
0x63, 0x60, 0x63, 0x60, 0x63, 0x63, 0x36, 0x60, 0x30, 0x31, 0x11, 0x61, 0x11, 0x0, 0x63, 0x63,
0x63, 0x63, 0x23, 0x63, 0x63, 0x23, 0x63, 0x63, 0x60, 0x63, 0x63, 0x63, 0x63, 0x63, 0x62, 0x36,
0x2, 0x11, 0x31, 0x11, 0x11, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13,
0x11, 0x13, 0x11, 0x21, 0x21, 0x11, 0x31, 0x16, 0x12, 0x11, 0x21, 0x11, 0x31, 0x21, 0x13, 0x12,
0x13, 0x12, 0x13, 0x11, 0x31, 0x21, 0x11, 0x11, 0x11, 0x31, 0x21, 0x31, 0x53, 0x11, 0x21, 0x61,
0x12, 0x11, 0x11, 0x11, 0x16, 0x11, 0x63, 0x23, 0x63, 0x60, 0x63, 0x62, 0x6, 0x36, 0x6, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x63, 0x23, 0x60, 0x11, 0x11, 0x11, 0x11, 0x6, 0x32, 0x63,
0x20, 0x63, 0x60, 0x63, 0x63, 0x66, 0x6, 0x36, 0x3, 0x63, 0x60, 0x63, 0x60, 0x60, 0x63, 0x60,
0x31, 0x11, 0x11, 0x12, 0x13, 0x11, 0x11, 0x21, 0x11, 0x31, 0x16, 0x11, 0x12, 0x13, 0x11, 0x11,
0x11, 0x61, 0x11, 0x31, 0x11, 0x31, 0x11, 0x31, 0x11, 0x16, 0x11, 0x31, 0x11, 0x11, 0x31, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x12, 0x31, 0x21, 0x11, 0x31, 0x11, 0x21, 0x21, 0x13, 0x12,
0x13, 0x11, 0x61, 0x13, 0x11, 0x11, 0x13, 0x42, 0x36, 0x23, 0x63, 0x63, 0x60, 0x63, 0x63, 0x63,
0x60, 0x10, 0x10, 0x63, 0x60, 0x63, 0x63, 0x63, 0x23, 0x61, 0x31, 0x13, 0x11, 0x6, 0x36, 0x36,
0x36, 0x6, 0x36, 0x36, 0x36, 0x3, 0x10, 0x63, 0x16, 0x6, 0x31, 0x6, 0x36, 0x32, 0x36, 0x32,
0x36, 0x11, 0x12, 0x11, 0x11, 0x11, 0x31, 0x11, 0x21, 0x12, 0x11, 0x31, 0x11, 0x11, 0x12, 0x11,
0x21, 0x12, 0x11, 0x16, 0x11, 0x12, 0x11, 0x12, 0x13, 0x11, 0x21, 0x11, 0x21, 0x21, 0x12, 0x16,
0x12, 0x13, 0x12, 0x13, 0x12, 0x11, 0x11, 0x11, 0x11, 0x21, 0x12, 0x13, 0x11, 0x13, 0x12, 0x11,
0x11, 0x12, 0x11, 0x11, 0x12, 0x11, 0x10, 0x63, 0x62, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x6,
0x36, 0x36, 0x36, 0x36, 0x3, 0x60, 0x23, 0x66, 0x36, 0x21, 0x11, 0x11, 0x16, 0x30, 0x23, 0x26,
0x3, 0x63, 0x63, 0x62, 0x36, 0x36, 0x6, 0x36, 0x3, 0x63, 0x60, 0x36, 0x6, 0x36, 0x63, 0x60,
0x62, 0x13, 0x11, 0x13, 0x12, 0x11, 0x11, 0x16, 0x11, 0x11, 0x12, 0x11, 0x13, 0x11, 0x11, 0x31,
0x11, 0x31, 0x11, 0x21, 0x12, 0x11, 0x11, 0x21, 0x11, 0x12, 0x11, 0x61, 0x13, 0x11, 0x11, 0x11,
0x11, 0x11, 0x21, 0x11, 0x11, 0x31, 0x21, 0x31, 0x63, 0x11, 0x21, 0x12, 0x13, 0x12, 0x11, 0x31,
0x11, 0x11, 0x31, 0x21, 0x11, 0x31, 0x12, 0x36, 0x36, 0x36, 0x32, 0x60, 0x63, 0x60, 0x63, 0x63,
0x60, 0x63, 0x60, 0x63, 0x66, 0x36, 0x34, 0x23, 0x60, 0x31, 0x11, 0x11, 0x11, 0x63, 0x63, 0x63,
0x63, 0x60, 0x6, 0x30, 0x63, 0x63, 0x63, 0x63, 0x66, 0x6, 0x36, 0x36, 0x32, 0x36, 0x32, 0x3,
0x63, 0x31, 0x23, 0x11, 0x11, 0x12, 0x11, 0x31, 0x11, 0x13, 0x11, 0x12, 0x11, 0x11, 0x21, 0x11,
0x11, 0x11, 0x13, 0x11, 0x13, 0x11, 0x21, 0x16, 0x12, 0x11, 0x13, 0x12, 0x11, 0x11, 0x21, 0x13,
0x21, 0x31, 0x11, 0x31, 0x21, 0x13, 0x11, 0x12, 0x11, 0x13, 0x11, 0x31, 0x12, 0x11, 0x31, 0x21,
0x11, 0x11, 0x11, 0x11, 0x31, 0x11, 0x10, 0x63, 0x23, 0x62, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x32, 0x43, 0x63, 0x60, 0x60, 0x10, 0x63, 0x51, 0x11, 0x21, 0x12, 0x30, 0x63, 0x63,
0x60, 0x63, 0x63, 0x66, 0x36, 0x6, 0x36, 0x6, 0x33, 0x63, 0x60, 0x63, 0x60, 0x63, 0x26, 0x36,
0x2, 0x12, 0x31, 0x12, 0x11, 0x11, 0x11, 0x11, 0x21, 0x11, 0x11, 0x11, 0x12, 0x13, 0x11, 0x12,
0x13, 0x11, 0x21, 0x11, 0x11, 0x16, 0x13, 0x11, 0x13, 0x11, 0x61, 0x11, 0x11, 0x21, 0x31, 0x11,
0x11, 0x11, 0x21, 0x12, 0x11, 0x21, 0x12, 0x11, 0x12, 0x11, 0x23, 0x11, 0x21, 0x31, 0x21, 0x31,
0x11, 0x31, 0x21, 0x61, 0x11, 0x11, 0x16, 0x3, 0x66, 0x36, 0x63, 0x63, 0x63, 0x60, 0x63, 0x60,
0x63, 0x60, 0x63, 0x60, 0x60, 0x36, 0x3, 0x63, 0x23, 0x1, 0x13, 0x11, 0x11, 0x2, 0x36, 0x20,
0x63, 0x6, 0x36, 0x3, 0x63, 0x63, 0x63, 0x63, 0x60, 0x63, 0x63, 0x60, 0x63, 0x63, 0x63, 0x63,
0x63, 0x31, 0x23, 0x11, 0x31, 0x13, 0x12, 0x11, 0x16, 0x11, 0x12, 0x13, 0x11, 0x11, 0x13, 0x11,
0x11, 0x21, 0x11, 0x13, 0x12, 0x11, 0x11, 0x12, 0x11, 0x13, 0x11, 0x21, 0x31, 0x61, 0x11, 0x12,
0x11, 0x21, 0x16, 0x11, 0x13, 0x16, 0x11, 0x31, 0x31, 0x21, 0x11, 0x21, 0x31, 0x21, 0x11, 0x21,
0x12, 0x11, 0x11, 0x31, 0x11, 0x21, 0x13, 0x62, 0x33, 0x23, 0x60, 0x63, 0x60, 0x63, 0x24, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0x6, 0x36, 0x36, 0x36, 0x21, 0x11, 0x11, 0x11, 0x0, 0x63, 0x36,
0x36, 0x3, 0x60, 0x36, 0x23, 0x63, 0x60, 0x63, 0x63, 0x60, 0x63, 0x63, 0x60, 0x63, 0x63, 0x20,
0x63, 0x12, 0x31, 0x21, 0x11, 0x11, 0x11, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16,
0x11, 0x11, 0x31, 0x11, 0x11, 0x13, 0x11, 0x11, 0x11, 0x21, 0x12, 0x11, 0x11, 0x11, 0x21, 0x31,
0x13, 0x11, 0x31, 0x21, 0x61, 0x12, 0x13, 0x11, 0x11, 0x31, 0x21, 0x13, 0x11, 0x61, 0x31, 0x13,
0x11, 0x11, 0x11, 0x12, 0x11, 0x11, 0x16, 0x30, 0x66, 0x36, 0x3, 0x63, 0x63, 0x63, 0x60, 0x63,
0x60, 0x26, 0x36, 0x6, 0x36, 0x36, 0x6, 0x36, 0x63, 0x1, 0x11, 0x11, 0x11, 0x63, 0x5, 0x36,
0x23, 0x60, 0x36, 0x6, 0x36, 0x63, 0x63, 0x60, 0x63, 0x63, 0x6, 0x36, 0x3, 0x63, 0x26, 0x36,
0x32, 0x31, 0x31, 0x31, 0x16, 0x11, 0x21, 0x11, 0x11, 0x13, 0x11, 0x61, 0x13, 0x12, 0x12, 0x11,
0x21, 0x31, 0x11, 0x21, 0x21, 0x11, 0x21, 0x21, 0x31, 0x11, 0x11, 0x13, 0x12, 0x11, 0x31, 0x11,
0x11, 0x21, 0x11, 0x13, 0x12, 0x11, 0x11, 0x21, 0x21, 0x13, 0x12, 0x11, 0x21, 0x31, 0x21, 0x21,
0x11, 0x13, 0x11, 0x11, 0x13, 0x11, 0x32, 0x6, 0x32, 0x63, 0x63, 0x60, 0x63, 0x60, 0x63, 0x63,
0x63, 0x63, 0x63, 0x63, 0x6, 0x30, 0x36, 0x2, 0x36, 0x1, 0x11, 0x21, 0x13, 0x60, 0x63, 0x23,
0x60, 0x63, 0x60, 0x63, 0x60, 0x36, 0x6, 0x36, 0x36, 0x6, 0x36, 0x6, 0x36, 0x2, 0x43, 0x60,
0x23, 0x16, 0x23, 0x11, 0x21, 0x11, 0x11, 0x11, 0x21, 0x11, 0x11, 0x11, 0x21, 0x11, 0x11, 0x13,
0x11, 0x11, 0x12, 0x11, 0x13, 0x11, 0x11, 0x31, 0x11, 0x31, 0x21, 0x11, 0x11, 0x31, 0x11, 0x21,
0x61, 0x13, 0x12, 0x11, 0x11, 0x31, 0x21, 0x13, 0x11, 0x21, 0x13, 0x12, 0x11, 0x21, 0x13, 0x11,
0x12, 0x11, 0x12, 0x11, 0x11, 0x11, 0x13, 0x63, 0x63, 0x63, 0x60, 0x63, 0x6, 0x36, 0x36, 0x6,
0x36, 0x36, 0x36, 0x6, 0x30, 0x66, 0x3, 0x63, 0x63, 0x63, 0x11, 0x11, 0x11, 0x10, 0x36, 0x36,
0x3, 0x60, 0x36, 0x36, 0x36, 0x36, 0x36, 0x32, 0x36, 0x36, 0x36, 0x30, 0x63, 0x63, 0x63, 0x23,
0x6, 0x13, 0x12, 0x31, 0x11, 0x13, 0x11, 0x31, 0x11, 0x21, 0x11, 0x31, 0x11, 0x11, 0x31, 0x11,
0x11, 0x21, 0x11, 0x16, 0x11, 0x13, 0x11, 0x11, 0x21, 0x11, 0x11, 0x61, 0x21, 0x11, 0x21, 0x11,
0x31, 0x11, 0x11, 0x31, 0x21, 0x11, 0x13, 0x11, 0x11, 0x16, 0x11, 0x11, 0x31, 0x13, 0x11, 0x21,
0x11, 0x11, 0x21, 0x13, 0x11, 0x12, 0x16, 0x32, 0x6, 0x32, 0x3, 0x6, 0x36, 0x6, 0x36, 0x36,
0x36, 0x6, 0x2, 0x36, 0x6, 0x30, 0x60, 0x63, 0x60, 0x1, 0x11, 0x31, 0x11, 0x30, 0x26, 0x36,
0x36, 0x0, 0x63, 0x60, 0x63, 0x62, 0x36, 0x4, 0x60, 0x36, 0x6, 0x36, 0x30, 0x63, 0x63, 0x60,
0x63, 0x21, 0x13, 0x12, 0x11, 0x21, 0x11, 0x11, 0x13, 0x11, 0x12, 0x11, 0x11, 0x21, 0x11, 0x21,
0x13, 0x11, 0x31, 0x31, 0x12, 0x11, 0x12, 0x11, 0x11, 0x21, 0x31, 0x11, 0x31, 0x16, 0x11, 0x31,
0x11, 0x21, 0x61, 0x11, 0x11, 0x31, 0x21, 0x12, 0x13, 0x12, 0x13, 0x21, 0x12, 0x31, 0x23, 0x13,
0x11, 0x31, 0x11, 0x11, 0x16, 0x11, 0x11, 0x3, 0x63, 0x63, 0x66, 0x36, 0x6, 0x36, 0x6, 0x36,
0x6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x32, 0x36, 0x1, 0x11, 0x11, 0x11, 0x16, 0x36, 0x32,
0x63, 0x63, 0x60, 0x36, 0x36, 0x43, 0x60, 0x10, 0x36, 0x63, 0x63, 0x60, 0x60, 0x63, 0x26, 0x36,
0x1, 0x36, 0x32, 0x61, 0x31, 0x11, 0x16, 0x12, 0x11, 0x13, 0x11, 0x11, 0x31, 0x11, 0x61, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x61, 0x11, 0x21, 0x13, 0x11, 0x11, 0x21, 0x12, 0x11, 0x21, 0x11,
0x21, 0x11, 0x12, 0x12, 0x12, 0x11, 0x11, 0x11, 0x21, 0x13, 0x11, 0x11, 0x31, 0x11, 0x11, 0x21,
0x11, 0x11, 0x31, 0x12, 0x11, 0x11, 0x10, 0x60, 0x23, 0x66, 0x30, 0x6, 0x36, 0x30, 0x36, 0x6,
0x36, 0x36, 0x36, 0x6, 0x36, 0x0, 0x60, 0x36, 0x10, 0x31, 0x11, 0x11, 0x11, 0x0, 0x2, 0x36,
0x36, 0x0, 0x63, 0x60, 0x63, 0x24, 0x30, 0x36, 0x36, 0x30, 0x60, 0x63, 0x3, 0x63, 0x63, 0x23,
0x63, 0x21, 0x31, 0x31, 0x11, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x31, 0x11, 0x31, 0x11, 0x31,
0x21, 0x12, 0x12, 0x11, 0x31, 0x11, 0x31, 0x11, 0x61, 0x12, 0x13, 0x11, 0x11, 0x13, 0x11, 0x12,
0x11, 0x31, 0x21, 0x11, 0x31, 0x13, 0x12, 0x31, 0x11, 0x21, 0x12, 0x13, 0x11, 0x26, 0x31, 0x61,
0x11, 0x21, 0x16, 0x11, 0x13, 0x12, 0x11, 0x36, 0x36, 0x36, 0x6, 0x36, 0x3, 0x66, 0x36, 0x36,
0x36, 0x6, 0x36, 0x36, 0x6, 0x36, 0x36, 0x6, 0x32, 0x60, 0x11, 0x13, 0x11, 0x13, 0x63, 0x63,
0x63, 0x63, 0x6, 0x3, 0x63, 0x63, 0x66, 0x6, 0x6, 0x6, 0x36, 0x30, 0x60, 0x32, 0x63, 0x60,
0x1, 0x33, 0x12, 0x32, 0x12, 0x11, 0x11, 0x31, 0x11, 0x21, 0x21, 0x11, 0x21, 0x11, 0x21, 0x11,
0x13, 0x11, 0x11, 0x21, 0x11, 0x21, 0x11, 0x31, 0x11, 0x11, 0x11, 0x11, 0x13, 0x11, 0x13, 0x11,
0x11, 0x11, 0x11, 0x31, 0x12, 0x11, 0x11, 0x11, 0x61, 0x31, 0x13, 0x11, 0x21, 0x11, 0x13, 0x21,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x36, 0x6, 0x23, 0x63, 0x0, 0x66, 0x30, 0x60, 0x63,
0x60, 0x36, 0x6, 0x30, 0x63, 0x6, 0x3, 0x63, 0x60, 0x31, 0x11, 0x11, 0x11, 0x12, 0x0, 0x62,
0x36, 0x6, 0x3, 0x60, 0x63, 0x63, 0x63, 0x3, 0x63, 0x63, 0x60, 0x60, 0x60, 0x63, 0x63, 0x63,
0x63, 0x21, 0x31, 0x31, 0x11, 0x11, 0x11, 0x11, 0x16, 0x11, 0x11, 0x12, 0x11, 0x11, 0x11, 0x12,
0x11, 0x16, 0x13, 0x11, 0x12, 0x11, 0x21, 0x11, 0x21, 0x31, 0x12, 0x13, 0x11, 0x12, 0x11, 0x13,
0x12, 0x13, 0x11, 0x11, 0x11, 0x12, 0x13, 0x12, 0x13, 0x11, 0x21, 0x12, 0x13, 0x12, 0x12, 0x11,
0x12, 0x13, 0x12, 0x13, 0x11, 0x13, 0x11, 0x20, 0x36, 0x32, 0x36, 0x60, 0x36, 0x6, 0x36, 0x36,
0x36, 0x63, 0x63, 0x66, 0x30, 0x63, 0x6, 0x32, 0x36, 0x0, 0x11, 0x21, 0x11, 0x11, 0x6, 0x36,
0x1, 0x3, 0x60, 0x36, 0x36, 0x6, 0x6, 0x6, 0x6, 0x36, 0x36, 0x30, 0x36, 0x36, 0x36, 0x20,
0x60, 0x13, 0x23, 0x23, 0x11, 0x13, 0x12, 0x11, 0x13, 0x11, 0x13, 0x11, 0x11, 0x13, 0x11, 0x31,
0x11, 0x21, 0x11, 0x12, 0x11, 0x11, 0x16, 0x11, 0x11, 0x11, 0x13, 0x11, 0x12, 0x11, 0x12, 0x11,
0x11, 0x11, 0x21, 0x61, 0x21, 0x31, 0x11, 0x11, 0x11, 0x13, 0x12, 0x11, 0x21, 0x13, 0x11, 0x31,
0x11, 0x11, 0x11, 0x11, 0x12, 0x11, 0x11, 0x6, 0x32, 0x36, 0x63, 0x3, 0x63, 0x63, 0x63, 0x60,
0x63, 0x6, 0x36, 0x3, 0x60, 0x60, 0x63, 0x63, 0x62, 0x36, 0x11, 0x11, 0x61, 0x13, 0x63, 0x2,
0x36, 0x36, 0x3, 0x60, 0x6, 0x30, 0x36, 0x36, 0x30, 0x60, 0x3, 0x60, 0x60, 0x63, 0x23, 0x36,
0x32, 0x31, 0x31, 0x13, 0x11, 0x21, 0x11, 0x11, 0x21, 0x12, 0x11, 0x16, 0x12, 0x11, 0x12, 0x11,
0x61, 0x13, 0x11, 0x61, 0x31, 0x61, 0x31, 0x13, 0x12, 0x12, 0x11, 0x12, 0x11, 0x13, 0x11, 0x12,
0x13, 0x11, 0x11, 0x31, 0x11, 0x12, 0x12, 0x13, 0x12, 0x11, 0x13, 0x13, 0x11, 0x21, 0x23, 0x12,
0x11, 0x21, 0x13, 0x11, 0x11, 0x11, 0x11, 0x36, 0x6, 0x36, 0x36, 0x6, 0x6, 0x30, 0x60, 0x63,
0x6, 0x36, 0x3, 0x60, 0x60, 0x36, 0x0, 0x63, 0x63, 0x63, 0x11, 0x31, 0x11, 0x11, 0x20, 0x63,
0x63, 0x60, 0x6, 0x36, 0x36, 0x36, 0x60, 0x60, 0x36, 0x3, 0x60, 0x63, 0x3, 0x6, 0x36, 0x60,
0x63, 0x23, 0x12, 0x32, 0x61, 0x11, 0x11, 0x31, 0x11, 0x11, 0x61, 0x11, 0x11, 0x16, 0x11, 0x11,
0x11, 0x11, 0x21, 0x11, 0x11, 0x11, 0x12, 0x11, 0x11, 0x11, 0x16, 0x11, 0x16, 0x11, 0x11, 0x61,
0x11, 0x31, 0x21, 0x12, 0x13, 0x11, 0x13, 0x12, 0x11, 0x12, 0x11, 0x11, 0x21, 0x31, 0x12, 0x11,
0x16, 0x11, 0x11, 0x12, 0x13, 0x11, 0x21, 0x10, 0x6, 0x32, 0x63, 0x63, 0x6, 0x6, 0x36, 0x36,
0x63, 0x6, 0x36, 0x3, 0x63, 0x60, 0x36, 0x36, 0x23, 0x62, 0x11, 0x11, 0x13, 0x11, 0x30, 0x63,
0x62, 0x36, 0x3, 0x60, 0x6, 0x6, 0x30, 0x36, 0x6, 0x36, 0x6, 0x30, 0x66, 0x63, 0x26, 0x30,
0x36, 0x13, 0x23, 0x11, 0x11, 0x31, 0x21, 0x11, 0x11, 0x31, 0x11, 0x11, 0x31, 0x12, 0x11, 0x31,
0x21, 0x21, 0x11, 0x31, 0x21, 0x31, 0x11, 0x12, 0x13, 0x11, 0x31, 0x13, 0x11, 0x12, 0x13, 0x11,
0x21, 0x11, 0x11, 0x11, 0x12, 0x16, 0x11, 0x11, 0x13, 0x11, 0x31, 0x21, 0x31, 0x11, 0x31, 0x31,
0x13, 0x11, 0x21, 0x11, 0x11, 0x11, 0x11, 0x16, 0x23, 0x63, 0x63, 0x6, 0x3, 0x60, 0x63, 0x63,
0x6, 0x30, 0x63, 0x60, 0x6, 0x30, 0x60, 0x36, 0x36, 0x3, 0x11, 0x12, 0x11, 0x11, 0x16, 0x2,
0x3, 0x63, 0x60, 0x36, 0x3, 0x63, 0x6, 0x3, 0x60, 0x6, 0x30, 0x60, 0x30, 0x36, 0x32, 0x36,
0x23, 0x21, 0x32, 0x33, 0x21, 0x11, 0x16, 0x11, 0x21, 0x11, 0x21, 0x12, 0x11, 0x13, 0x11, 0x11,
0x11, 0x11, 0x31, 0x11, 0x11, 0x12, 0x13, 0x11, 0x11, 0x11, 0x12, 0x11, 0x13, 0x11, 0x11, 0x31,
0x11, 0x21, 0x32, 0x13, 0x11, 0x13, 0x12, 0x13, 0x11, 0x21, 0x16, 0x11, 0x12, 0x12, 0x11, 0x21,
0x11, 0x11, 0x13, 0x11, 0x21, 0x16, 0x13, 0x23, 0x6, 0x32, 0x36, 0x3, 0x6, 0x36, 0x30, 0x60,
0x63, 0x60, 0x6, 0x3, 0x63, 0x6, 0x30, 0x63, 0x63, 0x62, 0x11, 0x11, 0x11, 0x11, 0x10, 0x36,
0x36, 0x36, 0x0, 0x60, 0x36, 0x0, 0x63, 0x60, 0x3, 0x63, 0x6, 0x30, 0x60, 0x10, 0x63, 0x60,
0x36, 0x13, 0x13, 0x12, 0x11, 0x13, 0x11, 0x21, 0x11, 0x11, 0x11, 0x31, 0x11, 0x11, 0x12, 0x13,
0x11, 0x31, 0x11, 0x21, 0x11, 0x11, 0x11, 0x11, 0x31, 0x21, 0x11, 0x12, 0x11, 0x16, 0x11, 0x11,
0x21, 0x11, 0x11, 0x11, 0x12, 0x11, 0x21, 0x12, 0x16, 0x13, 0x12, 0x13, 0x16, 0x13, 0x12, 0x13,
0x11, 0x12, 0x11, 0x61, 0x13, 0x11, 0x11, 0x16, 0x36, 0x36, 0x63, 0x60, 0x60, 0x0, 0x63, 0x63,
0x0, 0x63, 0x63, 0x60, 0x60, 0x60, 0x60, 0x63, 0x26, 0x3, 0x11, 0x13, 0x11, 0x21, 0x11, 0x0,
0x36, 0x23, 0x60, 0x30, 0x60, 0x36, 0x0, 0x63, 0x66, 0x0, 0x60, 0x60, 0x6, 0x36, 0x36, 0x6,
0x32, 0x31, 0x32, 0x36, 0x31, 0x11, 0x11, 0x11, 0x31, 0x21, 0x31, 0x11, 0x11, 0x21, 0x11, 0x11,
0x11, 0x12, 0x11, 0x11, 0x31, 0x21, 0x31, 0x21, 0x11, 0x11, 0x13, 0x11, 0x12, 0x11, 0x21, 0x21,
0x13, 0x16, 0x13, 0x12, 0x11, 0x31, 0x11, 0x31, 0x12, 0x11, 0x11, 0x21, 0x31, 0x12, 0x13, 0x11,
0x12, 0x11, 0x11, 0x11, 0x11, 0x12, 0x11, 0x13, 0x6, 0x2, 0x36, 0x36, 0x30, 0x63, 0x60, 0x6,
0x63, 0x60, 0x6, 0x3, 0x6, 0x30, 0x36, 0x36, 0x36, 0x36, 0x11, 0x11, 0x11, 0x11, 0x12, 0x36,
0x6, 0x36, 0x36, 0x6, 0x30, 0x60, 0x63, 0x6, 0x3, 0x6, 0x30, 0x36, 0x30, 0x63, 0x23, 0x63,
0x24, 0x13, 0x21, 0x31, 0x11, 0x21, 0x13, 0x11, 0x11, 0x11, 0x11, 0x12, 0x13, 0x11, 0x31, 0x11,
0x21, 0x11, 0x13, 0x12, 0x11, 0x11, 0x11, 0x11, 0x21, 0x31, 0x21, 0x12, 0x13, 0x11, 0x31, 0x11,
0x31, 0x11, 0x21, 0x11, 0x13, 0x11, 0x31, 0x11, 0x21, 0x31, 0x23, 0x11, 0x21, 0x31, 0x12, 0x13,
0x13, 0x11, 0x21, 0x31, 0x21, 0x11, 0x21, 0x11, 0x2, 0x36, 0x32, 0x60, 0x63, 0x60, 0x36, 0x30,
0x36, 0x3, 0x63, 0x6, 0x30, 0x6, 0x0, 0x63, 0x20, 0x63, 0x11, 0x21, 0x61, 0x11, 0x11, 0x60,
0x32, 0x36, 0x36, 0x0, 0x6, 0x30, 0x36, 0x3, 0x60, 0x60, 0x6, 0x0, 0x63, 0x26, 0x36, 0x6,
0x32, 0x31, 0x32, 0x32, 0x31, 0x11, 0x11, 0x12, 0x11, 0x61, 0x21, 0x11, 0x11, 0x11, 0x11, 0x21,
0x13, 0x16, 0x11, 0x11, 0x11, 0x31, 0x21, 0x31, 0x11, 0x11, 0x11, 0x11, 0x11, 0x21, 0x11, 0x61,
0x11, 0x21, 0x16, 0x12, 0x11, 0x12, 0x11, 0x21, 0x31, 0x13, 0x11, 0x13, 0x11, 0x21, 0x31, 0x21,
0x11, 0x11, 0x11, 0x11, 0x11, 0x31, 0x11, 0x11, 0x6, 0x63, 0x63, 0x63, 0x0, 0x6, 0x6, 0x6,
0x6, 0x36, 0x0, 0x63, 0x60, 0x63, 0x6, 0x36, 0x36, 0x32, 0x11, 0x11, 0x11, 0x31, 0x11, 0x10,
0x60, 0x62, 0x36, 0x36, 0x3, 0x60, 0x60, 0x36, 0x3, 0x63, 0x63, 0x6, 0x6, 0x36, 0x32, 0x36,
0x6, 0x32, 0x31, 0x31, 0x21, 0x13, 0x12, 0x11, 0x13, 0x11, 0x11, 0x31, 0x61, 0x21, 0x12, 0x11,
0x31, 0x11, 0x21, 0x61, 0x21, 0x11, 0x11, 0x11, 0x31, 0x21, 0x31, 0x31, 0x11, 0x11, 0x31, 0x21,
0x21, 0x31, 0x11, 0x31, 0x12, 0x11, 0x16, 0x11, 0x11, 0x21, 0x12, 0x12, 0x13, 0x11, 0x21, 0x31,
0x11, 0x21, 0x31, 0x12, 0x11, 0x11, 0x13, 0x11, 0x23, 0x63, 0x26, 0x36, 0x36, 0x3, 0x60, 0x36,
0x30, 0x60, 0x36, 0x0, 0x63, 0x6, 0x36, 0x23, 0x53, 0x60, 0x11, 0x31, 0x11, 0x11, 0x21, 0x11,
0x0, 0x36, 0x36, 0x3, 0x60, 0x3, 0x60, 0x60, 0x60, 0x6, 0x0, 0x63, 0x3, 0x63, 0x63, 0x60,
0x31, 0x31, 0x23, 0x13, 0x31, 0x11, 0x11, 0x31, 0x11, 0x11, 0x61, 0x11, 0x11, 0x13, 0x11, 0x61,
0x11, 0x31, 0x11, 0x13, 0x11, 0x21, 0x31, 0x21, 0x11, 0x11, 0x11, 0x11, 0x31, 0x21, 0x11, 0x11,
0x11, 0x11, 0x21, 0x13, 0x11, 0x13, 0x12, 0x13, 0x21, 0x13, 0x11, 0x31, 0x12, 0x13, 0x12, 0x11,
0x11, 0x11, 0x11, 0x11, 0x13, 0x16, 0x11, 0x11, 0x10, 0x6, 0x36, 0x26, 0x6, 0x36, 0x3, 0x60,
0x6, 0x30, 0x60, 0x36, 0x0, 0x63, 0x6, 0x36, 0x36, 0x1, 0x11, 0x11, 0x12, 0x11, 0x11, 0x13,
0x63, 0x60, 0x23, 0x60, 0x6, 0x36, 0x3, 0x3, 0x63, 0x63, 0x6, 0x30, 0x66, 0x32, 0x63, 0x63,
0x23, 0x23, 0x13, 0x23, 0x11, 0x21, 0x11, 0x11, 0x21, 0x21, 0x11, 0x21, 0x21, 0x11, 0x11, 0x11,
0x12, 0x11, 0x21, 0x11, 0x11, 0x11, 0x11, 0x11, 0x21, 0x31, 0x21, 0x21, 0x11, 0x11, 0x21, 0x31,
0x31, 0x61, 0x11, 0x11, 0x13, 0x11, 0x21, 0x11, 0x16, 0x11, 0x12, 0x11, 0x21, 0x12, 0x13, 0x12,
0x13, 0x11, 0x21, 0x31, 0x11, 0x11, 0x21, 0x11, 0x16, 0x32, 0x63, 0x36, 0x30, 0x0, 0x6, 0x6,
0x36, 0x6, 0x36, 0x3, 0x63, 0x6, 0x32, 0x36, 0x32, 0x3, 0x11, 0x11, 0x11, 0x11, 0x31, 0x11,
0x20, 0x63, 0x66, 0x36, 0x30, 0x63, 0x6, 0x6, 0x0, 0x6, 0x30, 0x60, 0x36, 0x36, 0x36, 0x20,
0x63, 0x13, 0x63, 0x12, 0x31, 0x11, 0x12, 0x11, 0x11, 0x11, 0x13, 0x11, 0x11, 0x61, 0x12, 0x13,
0x11, 0x11, 0x31, 0x21, 0x61, 0x31, 0x21, 0x31, 0x11, 0x11, 0x11, 0x16, 0x12, 0x13, 0x11, 0x12,
0x11, 0x11, 0x32, 0x12, 0x11, 0x21, 0x13, 0x21, 0x13, 0x12, 0x11, 0x31, 0x31, 0x31, 0x11, 0x31,
0x11, 0x16, 0x11, 0x11, 0x21, 0x12, 0x11, 0x31, 0x30, 0x63, 0x36, 0x23, 0x60, 0x63, 0x63, 0x3,
0x60, 0x36, 0x0, 0x60, 0x40, 0x60, 0x6, 0x36, 0x24, 0x35, 0x11, 0x21, 0x13, 0x11, 0x11, 0x11,
0x36, 0x3, 0x63, 0x60, 0x6, 0x0, 0x63, 0x63, 0x6, 0x30, 0x6, 0x3, 0x60, 0x23, 0x63, 0x6,
0x31, 0x23, 0x12, 0x36, 0x11, 0x13, 0x11, 0x16, 0x13, 0x11, 0x21, 0x13, 0x11, 0x13, 0x11, 0x11,
0x12, 0x11, 0x11, 0x13, 0x11, 0x11, 0x11, 0x12, 0x16, 0x13, 0x16, 0x11, 0x13, 0x11, 0x12, 0x11,
0x12, 0x13, 0x11, 0x13, 0x11, 0x16, 0x11, 0x11, 0x31, 0x13, 0x16, 0x11, 0x21, 0x16, 0x21, 0x12,
0x12, 0x11, 0x12, 0x11, 0x13, 0x11, 0x11, 0x11, 0x11, 0x6, 0x36, 0x36, 0x63, 0x60, 0x6, 0x6,
0x0, 0x60, 0x36, 0x36, 0x36, 0x3, 0x63, 0x63, 0x63, 0x63, 0x11, 0x11, 0x11, 0x11, 0x12, 0x11,
0x53, 0x6, 0x32, 0x36, 0x3, 0x63, 0x0, 0x6, 0x30, 0x6, 0x3, 0x60, 0x63, 0x66, 0x32, 0x63,
0x23, 0x13, 0x23, 0x13, 0x32, 0x11, 0x13, 0x11, 0x11, 0x31, 0x11, 0x11, 0x12, 0x11, 0x13, 0x16,
0x11, 0x13, 0x12, 0x11, 0x11, 0x21, 0x36, 0x11, 0x11, 0x21, 0x11, 0x32, 0x11, 0x12, 0x11, 0x61,
0x13, 0x11, 0x61, 0x11, 0x21, 0x31, 0x13, 0x12, 0x11, 0x21, 0x12, 0x13, 0x11, 0x31, 0x13, 0x11,
0x11, 0x13, 0x11, 0x13, 0x11, 0x13, 0x12, 0x11, 0x12, 0x36, 0x6, 0x32, 0x30, 0x3, 0x63, 0x3,
0x63, 0x63, 0x60, 0x0, 0x6, 0x36, 0x6, 0x23, 0x63, 0x21, 0x11, 0x31, 0x11, 0x21, 0x11, 0x11,
0x10, 0x63, 0x24, 0x63, 0x60, 0x6, 0x6, 0x30, 0x60, 0x63, 0x60, 0x3, 0x63, 0x63, 0x24, 0x36,
0x31, 0x32, 0x31, 0x32, 0x11, 0x11, 0x11, 0x12, 0x11, 0x11, 0x31, 0x12, 0x11, 0x12, 0x11, 0x11,
0x21, 0x11, 0x11, 0x12, 0x13, 0x11, 0x11, 0x13, 0x12, 0x11, 0x21, 0x11, 0x13, 0x11, 0x13, 0x12,
0x11, 0x12, 0x13, 0x11, 0x11, 0x12, 0x11, 0x11, 0x12, 0x11, 0x31, 0x12, 0x13, 0x12, 0x31, 0x23,
0x13, 0x11, 0x21, 0x11, 0x11, 0x11, 0x11, 0x21, 0x11, 0x63, 0x23, 0x63, 0x66, 0x6, 0x0, 0x60,
0x6, 0x0, 0x3, 0x66, 0x30, 0x0, 0x36, 0x36, 0x36, 0x6, 0x11, 0x11, 0x11, 0x11, 0x13, 0x11,
0x11, 0x20, 0x63, 0x36, 0x3, 0x60, 0x30, 0x60, 0x63, 0x0, 0x3, 0x60, 0x62, 0x36, 0x36, 0x0,
0x10, 0x13, 0x10, 0x13, 0x31, 0x61, 0x21, 0x11, 0x12, 0x11, 0x12, 0x11, 0x13, 0x11, 0x11, 0x21,
0x11, 0x31, 0x21, 0x31, 0x11, 0x13, 0x12, 0x11, 0x11, 0x11, 0x31, 0x12, 0x11, 0x13, 0x11, 0x11,
0x12, 0x11, 0x11, 0x26, 0x13, 0x11, 0x12, 0x13, 0x11, 0x31, 0x12, 0x31, 0x15, 0x31, 0x11, 0x11,
0x11, 0x11, 0x13, 0x11, 0x21, 0x61, 0x13, 0x11, 0x11, 0x30, 0x63, 0x62, 0x63, 0x63, 0x6, 0x30,
0x63, 0x6, 0x36, 0x3, 0x60, 0x63, 0x62, 0x36, 0x32, 0x31, 0x11, 0x16, 0x12, 0x16, 0x11, 0x11,
0x13, 0x3, 0x63, 0x53, 0x60, 0x3, 0x60, 0x30, 0x30, 0x63, 0x60, 0x3, 0x63, 0x60, 0x63, 0x2,
0x31, 0x32, 0x13, 0x12, 0x61, 0x11, 0x31, 0x16, 0x11, 0x12, 0x11, 0x16, 0x11, 0x13, 0x11, 0x13,
0x16, 0x11, 0x11, 0x11, 0x61, 0x11, 0x11, 0x12, 0x31, 0x31, 0x11, 0x21, 0x12, 0x11, 0x12, 0x13,
0x11, 0x31, 0x21, 0x11, 0x21, 0x13, 0x11, 0x31, 0x13, 0x12, 0x11, 0x11, 0x31, 0x12, 0x13, 0x21,
0x11, 0x21, 0x11, 0x11, 0x11, 0x12, 0x11, 0x11, 0x21, 0x13, 0x60, 0x63, 0x36, 0x6, 0x30, 0x63,
0x6, 0x30, 0x60, 0x60, 0x3, 0x6, 0x36, 0x23, 0x60, 0x63, 0x11, 0x11, 0x11, 0x31, 0x11, 0x21,
0x11, 0x10, 0x36, 0x32, 0x63, 0x60, 0x60, 0x60, 0x60, 0x6, 0x0, 0x63, 0x23, 0x63, 0x20, 0x63,
0x12, 0x31, 0x36, 0x13, 0x23, 0x11, 0x12, 0x11, 0x13, 0x11, 0x13, 0x11, 0x12, 0x11, 0x13, 0x11,
0x11, 0x13, 0x11, 0x31, 0x12, 0x12, 0x13, 0x11, 0x11, 0x11, 0x21, 0x16, 0x13, 0x12, 0x11, 0x21,
0x31, 0x11, 0x13, 0x13, 0x11, 0x21, 0x12, 0x11, 0x21, 0x11, 0x13, 0x12, 0x12, 0x13, 0x21, 0x31,
0x12, 0x11, 0x31, 0x21, 0x31, 0x11, 0x16, 0x13, 0x11, 0x20, 0x63, 0x23, 0x62, 0x36, 0x6, 0x0,
0x60, 0x6, 0x30, 0x36, 0x6, 0x3, 0x63, 0x60, 0x63, 0x21, 0x11, 0x31, 0x21, 0x11, 0x21, 0x11,
0x11, 0x60, 0x62, 0x36, 0x36, 0x3, 0x3, 0x63, 0x43, 0x60, 0x36, 0x36, 0x63, 0x63, 0x63, 0x63,
0x23, 0x13, 0x23, 0x23, 0x11, 0x11, 0x11, 0x13, 0x11, 0x16, 0x11, 0x12, 0x11, 0x12, 0x11, 0x12,
0x12, 0x11, 0x12, 0x11, 0x21, 0x13, 0x11, 0x12, 0x12, 0x13, 0x11, 0x31, 0x11, 0x11, 0x31, 0x11,
0x11, 0x21, 0x31, 0x11, 0x16, 0x11, 0x31, 0x12, 0x16, 0x23, 0x12, 0x11, 0x13, 0x11, 0x11, 0x12,
0x11, 0x61, 0x11, 0x11, 0x12, 0x13, 0x11, 0x11, 0x11, 0x11, 0x6, 0x36, 0x36, 0x36, 0x30, 0x36,
0x3, 0x60, 0x6, 0x4, 0x30, 0x63, 0x62, 0x36, 0x36, 0x1, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13,
0x11, 0x12, 0x36, 0x36, 0x36, 0x6, 0x6, 0x0, 0x60, 0x36, 0x0, 0x63, 0x63, 0x26, 0x0, 0x23,
0x13, 0x13, 0x61, 0x31, 0x33, 0x11, 0x61, 0x11, 0x21, 0x11, 0x21, 0x11, 0x13, 0x11, 0x12, 0x11,
0x11, 0x13, 0x11, 0x11, 0x13, 0x11, 0x21, 0x11, 0x31, 0x11, 0x21, 0x11, 0x31, 0x21, 0x11, 0x31,
0x21, 0x11, 0x11, 0x12, 0x11, 0x21, 0x13, 0x11, 0x31, 0x11, 0x11, 0x13, 0x11, 0x21, 0x31, 0x31,
0x11, 0x11, 0x21, 0x61, 0x11, 0x11, 0x11, 0x31, 0x12, 0x13, 0x6, 0x36, 0x32, 0x63, 0x60, 0x60,
0x36, 0x3, 0x63, 0x6, 0x6, 0x36, 0x36, 0x32, 0x36, 0x31, 0x12, 0x11, 0x31, 0x13, 0x11, 0x11,
0x11, 0x13, 0x6, 0x23, 0x62, 0x36, 0x30, 0x6, 0x30, 0x60, 0x6, 0x32, 0x36, 0x3, 0x63, 0x63,
0x23, 0x21, 0x32, 0x32, 0x31, 0x12, 0x13, 0x11, 0x11, 0x21, 0x11, 0x31, 0x11, 0x13, 0x11, 0x13,
0x13, 0x11, 0x13, 0x13, 0x11, 0x11, 0x13, 0x11, 0x11, 0x61, 0x11, 0x31, 0x11, 0x31, 0x61, 0x11,
0x13, 0x12, 0x16, 0x13, 0x13, 0x11, 0x21, 0x12, 0x11, 0x31, 0x23, 0x12, 0x13, 0x11, 0x21, 0x21,
0x11, 0x31, 0x13, 0x11, 0x13, 0x11, 0x21, 0x21, 0x11, 0x12, 0x60, 0x2, 0x63, 0x23, 0x60, 0x36,
0x0, 0x60, 0x6, 0x30, 0x30, 0x2, 0x36, 0x6, 0x2, 0x1, 0x11, 0x11, 0x12, 0x11, 0x13, 0x11,
0x21, 0x11, 0x60, 0x36, 0x36, 0x36, 0x6, 0x30, 0x60, 0x36, 0x3, 0x64, 0x23, 0x63, 0x20, 0x63,
0x11, 0x32, 0x31, 0x31, 0x23, 0x11, 0x11, 0x11, 0x31, 0x11, 0x31, 0x12, 0x12, 0x11, 0x16, 0x11,
0x11, 0x12, 0x11, 0x11, 0x12, 0x13, 0x11, 0x12, 0x13, 0x11, 0x31, 0x11, 0x21, 0x11, 0x21, 0x32,
0x11, 0x11, 0x31, 0x11, 0x11, 0x13, 0x11, 0x31, 0x12, 0x13, 0x11, 0x16, 0x11, 0x21, 0x31, 0x31,
0x12, 0x11, 0x11, 0x12, 0x11, 0x12, 0x11, 0x11, 0x31, 0x11, 0x30, 0x13, 0x63, 0x66, 0x36, 0x0,
0x36, 0x30, 0x60, 0x6, 0x6, 0x36, 0x6, 0x36, 0x36, 0x61, 0x11, 0x31, 0x11, 0x11, 0x21, 0x11,
0x11, 0x11, 0x30, 0x62, 0x36, 0x36, 0x30, 0x6, 0x0, 0x60, 0x36, 0x30, 0x36, 0x6, 0x3, 0x12,
0x36, 0x31, 0x31, 0x32, 0x31, 0x11, 0x31, 0x21, 0x11, 0x12, 0x11, 0x11, 0x31, 0x11, 0x21, 0x12,
0x12, 0x11, 0x12, 0x12, 0x11, 0x31, 0x12, 0x13, 0x11, 0x12, 0x11, 0x21, 0x11, 0x21, 0x11, 0x11,
0x13, 0x12, 0x11, 0x21, 0x21, 0x21, 0x12, 0x11, 0x31, 0x11, 0x12, 0x31, 0x12, 0x13, 0x11, 0x12,
0x11, 0x21, 0x12, 0x11, 0x12, 0x11, 0x11, 0x31, 0x16, 0x11, 0x10, 0x6, 0x36, 0x32, 0x36, 0x36,
0x0, 0x60, 0x36, 0x36, 0x30, 0x63, 0x63, 0x23, 0x63, 0x31, 0x11, 0x11, 0x61, 0x11, 0x11, 0x13,
0x11, 0x21, 0x53, 0x63, 0x63, 0x26, 0x6, 0x3, 0x60, 0x30, 0x63, 0x62, 0x63, 0x23, 0x6, 0x31,
0x31, 0x23, 0x10, 0x13, 0x63, 0x21, 0x11, 0x12, 0x11, 0x31, 0x11, 0x11, 0x16, 0x11, 0x13, 0x11,
0x31, 0x13, 0x13, 0x11, 0x31, 0x11, 0x31, 0x11, 0x12, 0x11, 0x13, 0x11, 0x31, 0x13, 0x13, 0x16,
0x11, 0x11, 0x21, 0x13, 0x11, 0x16, 0x11, 0x11, 0x12, 0x12, 0x11, 0x21, 0x36, 0x21, 0x12, 0x31,
0x11, 0x13, 0x11, 0x13, 0x11, 0x13, 0x16, 0x11, 0x11, 0x21, 0x10, 0x63, 0x26, 0x36, 0x63, 0x60,
0x36, 0x3, 0x60, 0x0, 0x6, 0x32, 0x63, 0x60, 0x20, 0x11, 0x21, 0x11, 0x21, 0x31, 0x11, 0x11,
0x16, 0x11, 0x10, 0x6, 0x23, 0x63, 0x63, 0x6, 0x3, 0x60, 0x63, 0x23, 0x6, 0x36, 0x63, 0x23,
0x12, 0x31, 0x32, 0x31, 0x21, 0x11, 0x12, 0x11, 0x11, 0x11, 0x62, 0x13, 0x11, 0x13, 0x11, 0x11,
0x11, 0x31, 0x11, 0x16, 0x11, 0x21, 0x11, 0x61, 0x13, 0x11, 0x21, 0x13, 0x11, 0x21, 0x11, 0x21,
0x21, 0x31, 0x13, 0x11, 0x13, 0x11, 0x31, 0x31, 0x11, 0x13, 0x11, 0x11, 0x11, 0x11, 0x31, 0x12,
0x13, 0x11, 0x13, 0x11, 0x61, 0x11, 0x11, 0x31, 0x13, 0x11, 0x11, 0x3, 0x63, 0x63, 0x20, 0x10,
0x43, 0x6, 0x3, 0x60, 0x63, 0x63, 0x23, 0x63, 0x60, 0x21, 0x11, 0x31, 0x11, 0x12, 0x16, 0x12,
0x11, 0x11, 0x16, 0x3, 0x63, 0x62, 0x36, 0x3, 0x60, 0x0, 0x36, 0x6, 0x30, 0x63, 0x23, 0x12,
0x63, 0x62, 0x31, 0x23, 0x33, 0x13, 0x11, 0x11, 0x31, 0x21, 0x11, 0x11, 0x12, 0x11, 0x21, 0x12,
0x11, 0x12, 0x13, 0x11, 0x21, 0x11, 0x31, 0x12, 0x11, 0x31, 0x11, 0x11, 0x16, 0x11, 0x21, 0x11,
0x31, 0x16, 0x11, 0x12, 0x11, 0x21, 0x11, 0x11, 0x13, 0x11, 0x13, 0x13, 0x21, 0x32, 0x11, 0x11,
0x11, 0x12, 0x11, 0x12, 0x11, 0x21, 0x12, 0x11, 0x21, 0x13, 0x12, 0x6, 0x2, 0x36, 0x36, 0x36,
0x6, 0x0, 0x36, 0x3, 0x63, 0x63, 0x63, 0x62, 0x30, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x13, 0x6, 0x36, 0x36, 0x36, 0x6, 0x0, 0x63, 0x53, 0x63, 0x66, 0x30, 0x63, 0x13,
0x31, 0x31, 0x36, 0x31, 0x21, 0x21, 0x11, 0x31, 0x11, 0x11, 0x31, 0x13, 0x11, 0x11, 0x13, 0x11,
0x16, 0x11, 0x11, 0x21, 0x13, 0x11, 0x11, 0x21, 0x16, 0x11, 0x32, 0x12, 0x11, 0x31, 0x13, 0x11,
0x11, 0x21, 0x12, 0x11, 0x31, 0x11, 0x11, 0x16, 0x31, 0x63, 0x23, 0x63, 0x13, 0x26, 0x32, 0x31,
0x12, 0x11, 0x12, 0x11, 0x11, 0x13, 0x11, 0x21, 0x11, 0x11, 0x11, 0x60, 0x36, 0x2, 0x36, 0x23,
0x60, 0x36, 0x0, 0x60, 0x2, 0x36, 0x26, 0x30, 0x63, 0x61, 0x31, 0x11, 0x13, 0x11, 0x21, 0x31,
0x12, 0x13, 0x15, 0x30, 0x26, 0x32, 0x63, 0x3, 0x63, 0x6, 0x36, 0x2, 0x36, 0x2, 0x36, 0x21,
0x31, 0x23, 0x13, 0x26, 0x33, 0x11, 0x21, 0x11, 0x11, 0x31, 0x11, 0x11, 0x61, 0x21, 0x11, 0x13,
0x11, 0x31, 0x21, 0x13, 0x11, 0x31, 0x21, 0x13, 0x11, 0x21, 0x11, 0x31, 0x21, 0x12, 0x11, 0x31,
0x21, 0x13, 0x11, 0x31, 0x11, 0x61, 0x15, 0x11, 0x63, 0x23, 0x13, 0x23, 0x23, 0x13, 0x63, 0x23,
0x11, 0x13, 0x11, 0x13, 0x12, 0x11, 0x13, 0x11, 0x31, 0x21, 0x11, 0x32, 0x6, 0x36, 0x36, 0x36,
0x30, 0x60, 0x36, 0x30, 0x10, 0x63, 0x36, 0x6, 0x36, 0x11, 0x11, 0x23, 0x16, 0x13, 0x63, 0x53,
0x63, 0x62, 0x13, 0x60, 0x30, 0x63, 0x62, 0x60, 0x0, 0x61, 0x2, 0x36, 0x36, 0x30, 0x11, 0x33,
0x53, 0x13, 0x21, 0x31, 0x31, 0x13, 0x11, 0x21, 0x61, 0x12, 0x32, 0x11, 0x13, 0x11, 0x31, 0x21,
0x12, 0x11, 0x13, 0x11, 0x11, 0x11, 0x13, 0x11, 0x12, 0x11, 0x11, 0x11, 0x13, 0x11, 0x12, 0x11,
0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x61, 0x36, 0x31, 0x36, 0x36, 0x36, 0x31, 0x30, 0x31, 0x31,
0x13, 0x11, 0x16, 0x11, 0x11, 0x12, 0x32, 0x33, 0x21, 0x11, 0x21, 0x63, 0x63, 0x63, 0x23, 0x63,
0x26, 0x36, 0x0, 0x63, 0x63, 0x26, 0x32, 0x36, 0x0, 0x32, 0x63, 0x10, 0x60, 0x6, 0x36, 0x6,
0x36, 0x36, 0x6, 0x36, 0x63, 0x63, 0x63, 0x36, 0x36, 0x36, 0x36, 0x6, 0x32, 0x6, 0x32, 0x13,
0x12, 0x31, 0x63, 0x23, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x63, 0x3, 0x11, 0x11, 0x11, 0x13,
0x11, 0x13, 0x11, 0x12, 0x12, 0x12, 0x11, 0x13, 0x11, 0x32, 0x13, 0x16, 0x11, 0x11, 0x31, 0x12,
0x11, 0x21, 0x32, 0x11, 0x31, 0x61, 0x36, 0x32, 0x36, 0x32, 0x32, 0x32, 0x36, 0x31, 0x23, 0x3,
0x11, 0x12, 0x11, 0x12, 0x13, 0x13, 0x63, 0x12, 0x33, 0x11, 0x11, 0x10, 0x2, 0x6, 0x36, 0x20,
0x63, 0x0, 0x43, 0x6, 0x36, 0x36, 0x6, 0x32, 0x36, 0x63, 0x60, 0x63, 0x63, 0x63, 0x60, 0x63,
0x20, 0x63, 0x63, 0x20, 0x2, 0x0, 0x63, 0x53, 0x63, 0x23, 0x63, 0x63, 0x24, 0x36, 0x26, 0x35,
0x31, 0x31, 0x31, 0x31, 0x23, 0x11, 0x21, 0x31, 0x13, 0x11, 0x11, 0x10, 0x21, 0x31, 0x21, 0x11,
0x12, 0x11, 0x12, 0x11, 0x31, 0x13, 0x11, 0x21, 0x16, 0x11, 0x11, 0x11, 0x21, 0x21, 0x11, 0x31,
0x11, 0x11, 0x11, 0x16, 0x16, 0x36, 0x36, 0x36, 0x32, 0x36, 0x33, 0x13, 0x63, 0x23, 0x36, 0x23,
0x12, 0x11, 0x31, 0x31, 0x11, 0x32, 0x32, 0x31, 0x31, 0x21, 0x31, 0x11, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x6, 0x36, 0x2, 0x63, 0x63, 0x60, 0x63, 0x26, 0x31, 0x6, 0x32, 0x6, 0x23, 0x60,
0x63, 0x60, 0x60, 0x63, 0x63, 0x63, 0x2, 0x36, 0x6, 0x36, 0x23, 0x63, 0x60, 0x1, 0x31, 0x31,
0x31, 0x62, 0x36, 0x26, 0x31, 0x31, 0x11, 0x11, 0x11, 0x11, 0x21, 0x11, 0x12, 0x13, 0x12, 0x61,
0x11, 0x16, 0x11, 0x31, 0x16, 0x11, 0x31, 0x12, 0x11, 0x13, 0x12, 0x13, 0x11, 0x31, 0x61, 0x11,
0x61, 0x32, 0x13, 0x11, 0x33, 0x13, 0x23, 0x23, 0x36, 0x33, 0x63, 0x3, 0x23, 0x36, 0x3, 0x13,
0x11, 0x11, 0x11, 0x11, 0x21, 0x63, 0x13, 0x23, 0x23, 0x11, 0x11, 0x11, 0x60, 0x2, 0x36, 0x36,
0x32, 0x63, 0x0, 0x63, 0x23, 0x63, 0x26, 0x21, 0x16, 0x16, 0x26, 0x32, 0x63, 0x63, 0x6, 0x32,
0x36, 0x2, 0x36, 0x36, 0x23, 0x62, 0x63, 0x60, 0x10, 0x63, 0x63, 0x20, 0x63, 0x63, 0x12, 0x13,
0x53, 0x23, 0x13, 0x13, 0x10, 0x11, 0x12, 0x11, 0x31, 0x21, 0x31, 0x13, 0x11, 0x11, 0x13, 0x13,
0x13, 0x11, 0x13, 0x11, 0x11, 0x11, 0x11, 0x61, 0x31, 0x21, 0x11, 0x11, 0x11, 0x11, 0x31, 0x21,
0x31, 0x11, 0x11, 0x13, 0x12, 0x33, 0x63, 0x36, 0x23, 0x23, 0x23, 0x23, 0x63, 0x23, 0x32, 0x33,
0x13, 0x16, 0x12, 0x11, 0x11, 0x13, 0x23, 0x31, 0x31, 0x21, 0x12, 0x11, 0x16, 0x34, 0x23, 0x62,
0x36, 0x36, 0x63, 0x6, 0x36, 0x36, 0x63, 0x16, 0x11, 0x61, 0x11, 0x63, 0x64, 0x26, 0x36, 0x36,
0x63, 0x63, 0x62, 0x36, 0x36, 0x63, 0x16, 0x16, 0x36, 0x32, 0x36, 0x36, 0x3, 0x21, 0x13, 0x21,
0x31, 0x13, 0x12, 0x31, 0x32, 0x31, 0x31, 0x11, 0x11, 0x11, 0x11, 0x21, 0x11, 0x16, 0x11, 0x11,
0x61, 0x23, 0x11, 0x21, 0x21, 0x31, 0x21, 0x31, 0x11, 0x11, 0x13, 0x12, 0x13, 0x21, 0x11, 0x11,
0x11, 0x13, 0x12, 0x11, 0x36, 0x31, 0x36, 0x23, 0x31, 0x33, 0x63, 0x63, 0x23, 0x63, 0x63, 0x26,
0x11, 0x11, 0x11, 0x13, 0x11, 0x32, 0x36, 0x13, 0x23, 0x11, 0x31, 0x13, 0x13, 0x6, 0x36, 0x3,
0x60, 0x10, 0x23, 0x63, 0x6, 0x21, 0x11, 0x11, 0x16, 0x11, 0x63, 0x16, 0x10, 0x36, 0x26, 0x36,
0x32, 0x63, 0x63, 0x66, 0x35, 0x36, 0x63, 0x13, 0x51, 0x6, 0x36, 0x2, 0x36, 0x63, 0x63, 0x16,
0x12, 0x31, 0x63, 0x10, 0x13, 0x11, 0x11, 0x61, 0x11, 0x31, 0x16, 0x11, 0x13, 0x12, 0x11, 0x21,
0x11, 0x31, 0x23, 0x11, 0x13, 0x11, 0x11, 0x11, 0x21, 0x31, 0x21, 0x11, 0x11, 0x13, 0x12, 0x13,
0x12, 0x11, 0x11, 0x12, 0x31, 0x32, 0x32, 0x36, 0x33, 0x62, 0x32, 0x33, 0x63, 0x23, 0x13, 0x63,
0x11, 0x21, 0x13, 0x11, 0x12, 0x13, 0x13, 0x1, 0x36, 0x32, 0x11, 0x11, 0x11, 0x20, 0x63, 0x26,
0x36, 0x36, 0x36, 0x6, 0x1, 0x16, 0x16, 0x16, 0x11, 0x61, 0x11, 0x11, 0x31, 0x66, 0x36, 0x26,
0x36, 0x36, 0x26, 0x32, 0x60, 0x16, 0x21, 0x61, 0x11, 0x16, 0x26, 0x36, 0x0, 0x13, 0x16, 0x13,
0x11, 0x61, 0x32, 0x13, 0x62, 0x31, 0x21, 0x11, 0x21, 0x11, 0x13, 0x12, 0x11, 0x11, 0x31, 0x11,
0x31, 0x11, 0x11, 0x36, 0x11, 0x21, 0x31, 0x31, 0x11, 0x11, 0x11, 0x21, 0x31, 0x11, 0x13, 0x11,
0x13, 0x12, 0x13, 0x11, 0x32, 0x36, 0x33, 0x13, 0x62, 0x33, 0x36, 0x32, 0x36, 0x36, 0x32, 0x36,
0x11, 0x11, 0x21, 0x12, 0x13, 0x32, 0x32, 0x13, 0x23, 0x36, 0x31, 0x21, 0x11, 0x36, 0x6, 0x36,
0x32, 0x6, 0x32, 0x35, 0x11, 0x61, 0x11, 0x11, 0x16, 0x11, 0x16, 0x16, 0x16, 0x32, 0x63, 0x63,
0x62, 0x63, 0x63, 0x66, 0x31, 0x63, 0x16, 0x11, 0x61, 0x61, 0x13, 0x60, 0x36, 0x31, 0x23, 0x16,
0x13, 0x13, 0x16, 0x31, 0x23, 0x11, 0x11, 0x31, 0x11, 0x21, 0x31, 0x11, 0x31, 0x13, 0x11, 0x31,
0x11, 0x21, 0x61, 0x13, 0x11, 0x11, 0x11, 0x11, 0x31, 0x21, 0x31, 0x31, 0x11, 0x21, 0x11, 0x12,
0x11, 0x11, 0x11, 0x11, 0x63, 0x13, 0x62, 0x36, 0x33, 0x62, 0x36, 0x36, 0x32, 0x32, 0x36, 0x32,
0x11, 0x31, 0x11, 0x11, 0x11, 0x13, 0x23, 0x31, 0x31, 0x32, 0x31, 0x12, 0x11, 0x16, 0x3, 0x63,
0x66, 0x32, 0x36, 0x61, 0x61, 0x16, 0x16, 0x16, 0x11, 0x16, 0x11, 0x11, 0x21, 0x63, 0x13, 0x62,
0x63, 0x60, 0x63, 0x23, 0x62, 0x31, 0x61, 0x61, 0x11, 0x11, 0x61, 0x26, 0x32, 0x63, 0x13, 0x13,
0x23, 0x62, 0x31, 0x36, 0x36, 0x31, 0x21, 0x11, 0x31, 0x11, 0x11, 0x61, 0x11, 0x11, 0x11, 0x11,
0x21, 0x31, 0x12, 0x11, 0x31, 0x61, 0x31, 0x21, 0x11, 0x61, 0x11, 0x11, 0x31, 0x13, 0x12, 0x13,
0x12, 0x16, 0x13, 0x12, 0x13, 0x23, 0x13, 0x1, 0x1, 0x36, 0x32, 0x32, 0x31, 0x36, 0x32, 0x33,
0x12, 0x11, 0x31, 0x13, 0x10, 0x31, 0x31, 0x23, 0x23, 0x23, 0x11, 0x61, 0x13, 0x13, 0x20, 0x63,
0x23, 0x63, 0x61, 0x11, 0x11, 0x61, 0x11, 0x11, 0x16, 0x11, 0x16, 0x16, 0x16, 0x35, 0x66, 0x23,
0x63, 0x62, 0x66, 0x36, 0x63, 0x51, 0x61, 0x11, 0x61, 0x61, 0x11, 0x16, 0x6, 0x31, 0x26, 0x13,
0x16, 0x13, 0x12, 0x31, 0x13, 0x21, 0x11, 0x11, 0x11, 0x12, 0x11, 0x11, 0x13, 0x12, 0x12, 0x13,
0x11, 0x11, 0x31, 0x12, 0x61, 0x21, 0x11, 0x13, 0x12, 0x11, 0x31, 0x21, 0x11, 0x61, 0x11, 0x11,
0x13, 0x11, 0x21, 0x11, 0x32, 0x36, 0x36, 0x33, 0x23, 0x3, 0x36, 0x33, 0x63, 0x3, 0x23, 0x63,
0x11, 0x11, 0x12, 0x12, 0x31, 0x32, 0x3, 0x13, 0x13, 0x10, 0x32, 0x31, 0x11, 0x26, 0x36, 0x0,
0x63, 0x63, 0x61, 0x61, 0x61, 0x16, 0x16, 0x16, 0x11, 0x16, 0x11, 0x11, 0x11, 0x13, 0x13, 0x63,
0x65, 0x36, 0x32, 0x62, 0x1, 0x66, 0x11, 0x13, 0x11, 0x16, 0x16, 0x11, 0x62, 0x63, 0x13, 0x62,
0x13, 0x16, 0x31, 0x63, 0x21, 0x36, 0x13, 0x11, 0x21, 0x11, 0x13, 0x12, 0x11, 0x11, 0x11, 0x11,
0x11, 0x21, 0x11, 0x11, 0x13, 0x11, 0x13, 0x11, 0x11, 0x31, 0x11, 0x11, 0x21, 0x12, 0x13, 0x12,
0x11, 0x13, 0x11, 0x31, 0x13, 0x13, 0x23, 0x23, 0x32, 0x36, 0x23, 0x62, 0x33, 0x26, 0x31, 0x36,
0x11, 0x31, 0x11, 0x13, 0x10, 0x21, 0x32, 0x32, 0x13, 0x23, 0x63, 0x11, 0x21, 0x33, 0x63, 0x23,
0x60, 0x26, 0x11, 0x16, 0x11, 0x61, 0x11, 0x31, 0x16, 0x11, 0x16, 0x16, 0x16, 0x16, 0x62, 0x61,
0x63, 0x16, 0x36, 0x36, 0x36, 0x11, 0x16, 0x11, 0x51, 0x61, 0x11, 0x16, 0x13, 0x61, 0x21, 0x31,
0x31, 0x23, 0x13, 0x23, 0x13, 0x61, 0x11, 0x12, 0x11, 0x31, 0x11, 0x11, 0x16, 0x13, 0x13, 0x12,
0x13, 0x11, 0x61, 0x31, 0x31, 0x12, 0x11, 0x12, 0x11, 0x11, 0x21, 0x31, 0x13, 0x11, 0x31, 0x11,
0x11, 0x21, 0x11, 0x11, 0x32, 0x36, 0x33, 0x63, 0x63, 0x63, 0x31, 0x33, 0x63, 0x63, 0x32, 0x32,
0x11, 0x12, 0x11, 0x12, 0x31, 0x31, 0x31, 0x31, 0x36, 0x32, 0x32, 0x31, 0x11, 0x12, 0x30, 0x60,
0x36, 0x31, 0x16, 0x13, 0x16, 0x11, 0x61, 0x16, 0x11, 0x16, 0x11, 0x13, 0x11, 0x13, 0x13, 0x63,
0x26, 0x36, 0x26, 0x36, 0x10, 0x13, 0x11, 0x61, 0x61, 0x16, 0x16, 0x11, 0x11, 0x36, 0x36, 0x21,
0x61, 0x35, 0x31, 0x61, 0x1, 0x31, 0x21, 0x11, 0x11, 0x11, 0x31, 0x21, 0x31, 0x11, 0x11, 0x13,
0x11, 0x13, 0x11, 0x11, 0x53, 0x13, 0x16, 0x11, 0x62, 0x13, 0x11, 0x11, 0x11, 0x31, 0x11, 0x13,
0x13, 0x11, 0x31, 0x21, 0x11, 0x32, 0x32, 0x36, 0x32, 0x36, 0x23, 0x63, 0x23, 0x23, 0x63, 0x63,
0x11, 0x11, 0x13, 0x13, 0x13, 0x23, 0x23, 0x23, 0x23, 0x23, 0x36, 0x21, 0x31, 0x63, 0x6, 0x36,
0x26, 0x11, 0x61, 0x11, 0x11, 0x16, 0x11, 0x11, 0x63, 0x11, 0x16, 0x11, 0x16, 0x16, 0x26, 0x16,
0x16, 0x61, 0x36, 0x26, 0x36, 0x11, 0x51, 0x13, 0x11, 0x61, 0x11, 0x16, 0x10, 0x61, 0x31, 0x36,
0x32, 0x61, 0x32, 0x33, 0x10, 0x21, 0x11, 0x31, 0x61, 0x12, 0x11, 0x11, 0x11, 0x21, 0x21, 0x11,
0x12, 0x11, 0x12, 0x11, 0x31, 0x11, 0x12, 0x13, 0x11, 0x11, 0x13, 0x12, 0x11, 0x11, 0x21, 0x21,
0x11, 0x12, 0x11, 0x11, 0x33, 0x63, 0x63, 0x63, 0x23, 0x13, 0x36, 0x32, 0x36, 0x36, 0x32, 0x33,
0x12, 0x13, 0x11, 0x12, 0x36, 0x31, 0x33, 0x13, 0x13, 0x63, 0x23, 0x31, 0x11, 0x23, 0x23, 0x63,
0x63, 0x16, 0x16, 0x16, 0x16, 0x10, 0x36, 0x1, 0x11, 0x61, 0x31, 0x16, 0x11, 0x11, 0x61, 0x36,
0x31, 0x36, 0x63, 0x63, 0x62, 0x61, 0x13, 0x51, 0x11, 0x16, 0x16, 0x11, 0x11, 0x32, 0x61, 0x31,
0x11, 0x36, 0x16, 0x10, 0x13, 0x63, 0x11, 0x11, 0x13, 0x11, 0x11, 0x13, 0x11, 0x11, 0x13, 0x12,
0x13, 0x13, 0x11, 0x21, 0x10, 0x11, 0x11, 0x11, 0x13, 0x12, 0x11, 0x11, 0x21, 0x31, 0x13, 0x16,
0x12, 0x11, 0x21, 0x31, 0x12, 0x31, 0x32, 0x36, 0x36, 0x36, 0x13, 0x63, 0x63, 0x23, 0x63, 0x23,
0x11, 0x11, 0x12, 0x31, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x36, 0x32, 0x13, 0x36, 0x30, 0x62,
0x61, 0x61, 0x13, 0x11, 0x10, 0x0, 0x0, 0x0, 0x6, 0x11, 0x15, 0x61, 0x16, 0x13, 0x13, 0x61,
0x66, 0x26, 0x31, 0x62, 0x13, 0x16, 0x11, 0x16, 0x16, 0x11, 0x11, 0x16, 0x16, 0x16, 0x31, 0x21,
0x36, 0x13, 0x23, 0x16, 0x21, 0x31, 0x12, 0x11, 0x31, 0x11, 0x31, 0x11, 0x12, 0x31, 0x11, 0x13,
0x11, 0x11, 0x21, 0x31, 0x23, 0x12, 0x31, 0x21, 0x31, 0x11, 0x31, 0x61, 0x11, 0x11, 0x61, 0x12,
0x13, 0x11, 0x31, 0x11, 0x23, 0x10, 0x36, 0x33, 0x23, 0x23, 0x32, 0x31, 0x32, 0x36, 0x33, 0x63,
0x11, 0x61, 0x11, 0x12, 0x31, 0x31, 0x36, 0x31, 0x13, 0x63, 0x30, 0x13, 0x11, 0x23, 0x23, 0x63,
0x1, 0x16, 0x51, 0x10, 0x3, 0x6, 0x0, 0x0, 0x0, 0x6, 0x11, 0x16, 0x11, 0x16, 0x16, 0x26,
0x31, 0x36, 0x53, 0x63, 0x66, 0x11, 0x16, 0x11, 0x11, 0x26, 0x30, 0x1, 0x11, 0x36, 0x16, 0x36,
0x13, 0x16, 0x11, 0x31, 0x36, 0x21, 0x13, 0x11, 0x11, 0x21, 0x12, 0x16, 0x11, 0x13, 0x12, 0x11,
0x11, 0x11, 0x31, 0x11, 0x16, 0x11, 0x11, 0x31, 0x12, 0x11, 0x11, 0x13, 0x13, 0x21, 0x13, 0x11,
0x11, 0x61, 0x11, 0x21, 0x11, 0x33, 0x10, 0x36, 0x36, 0x30, 0x63, 0x3, 0x63, 0x36, 0x32, 0x36,
0x13, 0x11, 0x21, 0x33, 0x13, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x21, 0x12, 0x33, 0x63, 0x66,
0x11, 0x61, 0x11, 0x0, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x61, 0x11, 0x13, 0x11, 0x61, 0x36,
0x16, 0x61, 0x36, 0x26, 0x31, 0x16, 0x13, 0x11, 0x3, 0x0, 0x0, 0x0, 0x61, 0x16, 0x32, 0x11,
0x35, 0x31, 0x36, 0x12, 0x11, 0x31, 0x61, 0x11, 0x21, 0x11, 0x11, 0x31, 0x11, 0x11, 0x11, 0x11,
0x31, 0x21, 0x11, 0x13, 0x13, 0x11, 0x13, 0x11, 0x13, 0x13, 0x12, 0x11, 0x11, 0x11, 0x31, 0x13,
0x12, 0x13, 0x11, 0x31, 0x32, 0x36, 0x33, 0x23, 0x3, 0x26, 0x32, 0x36, 0x36, 0x23, 0x3, 0x63,
0x11, 0x11, 0x11, 0x12, 0x1, 0x36, 0x36, 0x31, 0x31, 0x30, 0x36, 0x33, 0x16, 0x10, 0x32, 0x30,
0x16, 0x11, 0x10, 0x0, 0x0, 0x0, 0x63, 0x61, 0x61, 0x60, 0x0, 0x16, 0x11, 0x61, 0x61, 0x61,
0x1, 0x36, 0x26, 0x31, 0x66, 0x16, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x11, 0x1, 0x31,
0x61, 0x16, 0x12, 0x36, 0x36, 0x23, 0x12, 0x11, 0x13, 0x11, 0x31, 0x11, 0x32, 0x11, 0x31, 0x31,
0x11, 0x13, 0x12, 0x11, 0x10, 0x13, 0x11, 0x12, 0x11, 0x11, 0x11, 0x31, 0x13, 0x11, 0x12, 0x11,
0x31, 0x11, 0x21, 0x11, 0x13, 0x13, 0x23, 0x63, 0x23, 0x32, 0x36, 0x23, 0x23, 0x63, 0x63, 0x23,
0x11, 0x21, 0x31, 0x32, 0x31, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x31, 0x12, 0x33, 0x26, 0x61,
0x16, 0x11, 0x0, 0x6, 0x0, 0x1, 0x11, 0x62, 0x11, 0x11, 0x30, 0x1, 0x15, 0x11, 0x63, 0x63,
0x16, 0x61, 0x36, 0x36, 0x31, 0x21, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0x1, 0x61,
0x32, 0x31, 0x36, 0x31, 0x31, 0x31, 0x11, 0x31, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x11, 0x11,
0x21, 0x31, 0x11, 0x13, 0x12, 0x11, 0x12, 0x13, 0x11, 0x21, 0x31, 0x11, 0x21, 0x12, 0x11, 0x11,
0x11, 0x21, 0x13, 0x11, 0x21, 0x32, 0x30, 0x30, 0x36, 0x23, 0x36, 0x33, 0x63, 0x32, 0x32, 0x30,
0x11, 0x11, 0x12, 0x11, 0x32, 0x32, 0x31, 0x31, 0x33, 0x13, 0x63, 0x32, 0x11, 0x36, 0x33, 0x63,
0x61, 0x11, 0x0, 0x0, 0x6, 0x11, 0x0, 0x3, 0x0, 0x1, 0x11, 0x0, 0x11, 0x11, 0x21, 0x16,
0x62, 0x36, 0x61, 0x26, 0x26, 0x16, 0x16, 0x0, 0x61, 0x61, 0x13, 0x60, 0x0, 0x61, 0x63, 0x10,
0x16, 0x13, 0x21, 0x36, 0x23, 0x63, 0x11, 0x13, 0x16, 0x12, 0x13, 0x12, 0x13, 0x11, 0x12, 0x13,
0x11, 0x11, 0x13, 0x11, 0x13, 0x23, 0x11, 0x11, 0x13, 0x11, 0x11, 0x31, 0x11, 0x11, 0x31, 0x21,
0x31, 0x13, 0x11, 0x61, 0x13, 0x63, 0x63, 0x23, 0x63, 0x36, 0x30, 0x32, 0x30, 0x63, 0x3, 0x63,
0x13, 0x16, 0x11, 0x32, 0x31, 0x36, 0x32, 0x13, 0x21, 0x30, 0x32, 0x31, 0x13, 0x23, 0x26, 0x61,
0x11, 0x60, 0x0, 0x6, 0x11, 0x60, 0x3, 0x4, 0x30, 0x0, 0x11, 0x0, 0x11, 0x61, 0x16, 0x32,
0x31, 0x63, 0x10, 0x63, 0x11, 0x61, 0x30, 0x6, 0x30, 0x16, 0x11, 0x11, 0x0, 0x1, 0x6, 0x21,
0x31, 0x35, 0x36, 0x31, 0x36, 0x21, 0x16, 0x11, 0x11, 0x31, 0x11, 0x11, 0x11, 0x12, 0x11, 0x11,
0x13, 0x12, 0x11, 0x12, 0x16, 0x11, 0x13, 0x11, 0x21, 0x16, 0x12, 0x11, 0x31, 0x31, 0x11, 0x31,
0x11, 0x21, 0x12, 0x13, 0x11, 0x32, 0x36, 0x36, 0x32, 0x63, 0x23, 0x63, 0x63, 0x23, 0x63, 0x3,
0x11, 0x11, 0x21, 0x13, 0x13, 0x23, 0x61, 0x36, 0x33, 0x21, 0x30, 0x32, 0x16, 0x36, 0x36, 0x31,
0x61, 0x10, 0x6, 0x31, 0x11, 0x3, 0x1, 0x60, 0x36, 0x30, 0x1, 0x10, 0x1, 0x11, 0x61, 0x61,
0x63, 0x62, 0x63, 0x66, 0x31, 0x11, 0x60, 0x30, 0x0, 0x0, 0x1, 0x11, 0x10, 0x1, 0x10, 0x31,
0x61, 0x61, 0x31, 0x26, 0x31, 0x31, 0x31, 0x11, 0x21, 0x11, 0x12, 0x13, 0x16, 0x11, 0x36, 0x13,
0x11, 0x11, 0x61, 0x31, 0x13, 0x36, 0x11, 0x31, 0x13, 0x11, 0x31, 0x21, 0x11, 0x11, 0x21, 0x11,
0x61, 0x13, 0x11, 0x21, 0x12, 0x63, 0x23, 0x23, 0x63, 0x23, 0x63, 0x32, 0x36, 0x30, 0x32, 0x36,
0x12, 0x13, 0x11, 0x32, 0x32, 0x31, 0x32, 0x32, 0x31, 0x33, 0x23, 0x61, 0x13, 0x23, 0x26, 0x35,
0x11, 0x60, 0x0, 0x11, 0x10, 0x3, 0x61, 0x60, 0x0, 0x36, 0x6, 0x10, 0x1, 0x11, 0x61, 0x36,
0x35, 0x63, 0x62, 0x31, 0x61, 0x13, 0x0, 0x0, 0x36, 0x33, 0x0, 0x61, 0x16, 0x6, 0x63, 0x56,
0x32, 0x31, 0x63, 0x63, 0x10, 0x10, 0x11, 0x23, 0x11, 0x13, 0x11, 0x11, 0x11, 0x31, 0x11, 0x11,
0x12, 0x13, 0x11, 0x11, 0x16, 0x11, 0x21, 0x11, 0x31, 0x12, 0x11, 0x13, 0x12, 0x13, 0x11, 0x21,
0x31, 0x11, 0x13, 0x11, 0x31, 0x33, 0x63, 0x63, 0x32, 0x33, 0x32, 0x3, 0x63, 0x36, 0x36, 0x32,
0x13, 0x11, 0x12, 0x13, 0x16, 0x32, 0x33, 0x13, 0x23, 0x23, 0x32, 0x33, 0x11, 0x36, 0x30, 0x61,
0x61, 0x10, 0x36, 0x11, 0x60, 0x60, 0x0, 0x0, 0x0, 0x3, 0x30, 0x11, 0x6, 0x11, 0x16, 0x16,
0x53, 0x61, 0x36, 0x60, 0x16, 0x16, 0x0, 0x1, 0x60, 0x0, 0x63, 0x6, 0x11, 0x3, 0x16, 0x31,
0x16, 0x13, 0x13, 0x16, 0x23, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x31, 0x21, 0x11, 0x13, 0x12,
0x11, 0x11, 0x13, 0x13, 0x12, 0x31, 0x13, 0x21, 0x11, 0x11, 0x13, 0x11, 0x11, 0x11, 0x13, 0x11,
0x13, 0x12, 0x11, 0x21, 0x11, 0x32, 0x32, 0x33, 0x63, 0x60, 0x63, 0x10, 0x36, 0x23, 0x23, 0x3,
0x11, 0x11, 0x11, 0x31, 0x33, 0x36, 0x32, 0x31, 0x31, 0x31, 0x3, 0x21, 0x12, 0x36, 0x61, 0x61,
0x11, 0x0, 0x61, 0x11, 0x3, 0x30, 0x0, 0x0, 0x0, 0x0, 0x60, 0x11, 0x6, 0x11, 0x32, 0x36,
0x31, 0x63, 0x66, 0x32, 0x11, 0x10, 0x0, 0x31, 0x60, 0x0, 0x30, 0x3, 0x11, 0x6, 0x10, 0x26,
0x31, 0x35, 0x21, 0x32, 0x31, 0x1, 0x21, 0x31, 0x13, 0x12, 0x11, 0x11, 0x11, 0x31, 0x21, 0x11,
0x31, 0x13, 0x11, 0x11, 0x13, 0x11, 0x31, 0x11, 0x31, 0x23, 0x11, 0x11, 0x31, 0x21, 0x31, 0x12,
0x11, 0x13, 0x11, 0x31, 0x21, 0x31, 0x33, 0x63, 0x23, 0x32, 0x30, 0x36, 0x32, 0x36, 0x36, 0x32,
0x11, 0x31, 0x21, 0x32, 0x12, 0x32, 0x36, 0x13, 0x23, 0x23, 0x26, 0x33, 0x63, 0x62, 0x30, 0x36,
0x11, 0x60, 0x36, 0x11, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x61, 0x3, 0x15, 0x11, 0x61,
0x63, 0x26, 0x32, 0x60, 0x16, 0x10, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x11, 0x60, 0x11, 0x36,
0x12, 0x11, 0x63, 0x16, 0x13, 0x13, 0x11, 0x16, 0x11, 0x11, 0x31, 0x13, 0x11, 0x11, 0x31, 0x31,
0x16, 0x11, 0x11, 0x32, 0x11, 0x1, 0x11, 0x61, 0x11, 0x11, 0x21, 0x12, 0x13, 0x11, 0x11, 0x11,
0x32, 0x11, 0x21, 0x11, 0x31, 0x63, 0x23, 0x3, 0x63, 0x63, 0x36, 0x32, 0x33, 0x63, 0x3, 0x63,
0x11, 0x11, 0x13, 0x12, 0x33, 0x13, 0x13, 0x23, 0x13, 0x13, 0x33, 0x21, 0x30, 0x63, 0x66, 0x12,
0x11, 0x0, 0x11, 0x11, 0x63, 0x0, 0x0, 0x0, 0x0, 0x0, 0x34, 0x11, 0x6, 0x11, 0x66, 0x32,
0x36, 0x63, 0x66, 0x36, 0x11, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x63, 0x61, 0x63, 0x66, 0x63,
0x13, 0x63, 0x12, 0x13, 0x16, 0x35, 0x11, 0x11, 0x12, 0x11, 0x11, 0x21, 0x12, 0x13, 0x12, 0x36,
0x23, 0x11, 0x23, 0x13, 0x10, 0x31, 0x12, 0x13, 0x12, 0x16, 0x13, 0x11, 0x11, 0x13, 0x12, 0x13,
0x11, 0x11, 0x31, 0x16, 0x11, 0x32, 0x36, 0x32, 0x32, 0x32, 0x63, 0x3, 0x63, 0x3, 0x23, 0x23,
0x12, 0x16, 0x11, 0x36, 0x13, 0x23, 0x23, 0x13, 0x13, 0x23, 0x21, 0x33, 0x26, 0x30, 0x23, 0x1,
0x61, 0x10, 0x26, 0x11, 0x10, 0x30, 0x0, 0x0, 0x0, 0x6, 0x30, 0x11, 0x0, 0x11, 0x11, 0x16,
0x53, 0x62, 0x63, 0x23, 0x61, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x31, 0x10, 0x11, 0x20,
0x63, 0x16, 0x13, 0x61, 0x32, 0x31, 0x31, 0x13, 0x11, 0x31, 0x13, 0x11, 0x11, 0x11, 0x31, 0x31,
0x32, 0x63, 0x32, 0x10, 0x13, 0x21, 0x13, 0x11, 0x11, 0x31, 0x11, 0x13, 0x12, 0x11, 0x11, 0x11,
0x11, 0x31, 0x11, 0x31, 0x21, 0x31, 0x33, 0x63, 0x63, 0x63, 0x13, 0x13, 0x23, 0x26, 0x36, 0x30,
0x13, 0x11, 0x21, 0x21, 0x32, 0x31, 0x31, 0x32, 0x32, 0x13, 0x33, 0x23, 0x63, 0x62, 0x46, 0x61,
0x61, 0x60, 0x31, 0x11, 0x10, 0x4, 0x0, 0x0, 0x0, 0x3, 0x6, 0x11, 0x6, 0x11, 0x63, 0x63,
0x66, 0x36, 0x36, 0x63, 0x51, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x60, 0x61, 0x10, 0x61, 0x36,
0x35, 0x23, 0x16, 0x13, 0x11, 0x62, 0x11, 0x11, 0x11, 0x11, 0x61, 0x13, 0x13, 0x13, 0x23, 0x23,
0x13, 0x31, 0x13, 0x32, 0x31, 0x31, 0x61, 0x12, 0x13, 0x11, 0x31, 0x11, 0x11, 0x31, 0x31, 0x16,
0x12, 0x11, 0x21, 0x11, 0x13, 0x10, 0x23, 0x32, 0x31, 0x32, 0x36, 0x36, 0x36, 0x33, 0x63, 0x13,
0x11, 0x11, 0x31, 0x32, 0x13, 0x23, 0x10, 0x13, 0x13, 0x23, 0x26, 0x36, 0x6, 0x3, 0x23, 0x63,
0x61, 0x16, 0x6, 0x11, 0x11, 0x3, 0x33, 0x0, 0x3, 0x63, 0x1, 0x11, 0x2, 0x11, 0x11, 0x61,
0x35, 0x36, 0x23, 0x63, 0x61, 0x60, 0x0, 0x0, 0x0, 0x0, 0x6, 0x33, 0x61, 0x53, 0x1, 0x62,
0x36, 0x36, 0x23, 0x21, 0x1, 0x31, 0x31, 0x13, 0x12, 0x11, 0x11, 0x11, 0x11, 0x11, 0x31, 0x32,
0x31, 0x32, 0x1, 0x31, 0x23, 0x23, 0x11, 0x13, 0x11, 0x21, 0x11, 0x21, 0x31, 0x11, 0x11, 0x31,
0x11, 0x31, 0x12, 0x13, 0x11, 0x31, 0x32, 0x36, 0x30, 0x36, 0x33, 0x23, 0x31, 0x61, 0x32, 0x36,
0x23, 0x23, 0x11, 0x31, 0x32, 0x36, 0x32, 0x32, 0x31, 0x31, 0x33, 0x20, 0x63, 0x66, 0x36, 0x32,
0x11, 0x61, 0x0, 0x11, 0x11, 0x60, 0x6, 0x36, 0x36, 0x30, 0x11, 0x16, 0x36, 0x16, 0x10, 0x10,
0x62, 0x63, 0x63, 0x26, 0x11, 0x30, 0x6, 0x30, 0x0, 0x0, 0x3, 0x0, 0x11, 0x60, 0x11, 0x6,
0x6, 0x32, 0x36, 0x13, 0x12, 0x13, 0x11, 0x11, 0x11, 0x13, 0x12, 0x16, 0x12, 0x13, 0x13, 0x63,
0x12, 0x31, 0x32, 0x31, 0x36, 0x31, 0x12, 0x11, 0x11, 0x13, 0x11, 0x31, 0x11, 0x21, 0x21, 0x11,
0x31, 0x11, 0x61, 0x11, 0x21, 0x13, 0x36, 0x32, 0x32, 0x13, 0x66, 0x36, 0x16, 0x13, 0x61, 0x36,
0x63, 0x63, 0x23, 0x23, 0x63, 0x10, 0x13, 0x13, 0x23, 0x23, 0x23, 0x63, 0x60, 0x36, 0x32, 0x60,
0x63, 0x11, 0x10, 0x6, 0x11, 0x11, 0x0, 0x3, 0x0, 0x61, 0x11, 0x15, 0x36, 0x11, 0x61, 0x1,
0x63, 0x61, 0x6, 0x30, 0x1, 0x10, 0x3, 0x0, 0x0, 0x3, 0x63, 0x6, 0x11, 0x10, 0x36, 0x13,
0x63, 0x60, 0x23, 0x61, 0x13, 0x12, 0x11, 0x21, 0x13, 0x11, 0x11, 0x11, 0x13, 0x11, 0x23, 0x12,
0x36, 0x31, 0x36, 0x23, 0x13, 0x23, 0x11, 0x32, 0x13, 0x11, 0x21, 0x16, 0x11, 0x31, 0x13, 0x21,
0x12, 0x13, 0x11, 0x31, 0x11, 0x31, 0x32, 0x33, 0x63, 0x63, 0x13, 0x13, 0x63, 0x61, 0x36, 0x16,
0x32, 0x30, 0x6, 0x0, 0x23, 0x3, 0x21, 0x36, 0x31, 0x36, 0x36, 0x2, 0x6, 0x6, 0x6, 0x36,
0x35, 0x61, 0x61, 0x0, 0x31, 0x11, 0x11, 0x66, 0x11, 0x11, 0x16, 0x10, 0x61, 0x13, 0x16, 0x10,
0x36, 0x10, 0x63, 0x66, 0x11, 0x60, 0x0, 0x43, 0x63, 0x63, 0x40, 0x61, 0x16, 0x0, 0x15, 0x36,
0x20, 0x63, 0x61, 0x11, 0x35, 0x13, 0x11, 0x13, 0x11, 0x11, 0x31, 0x31, 0x11, 0x13, 0x13, 0x23,
0x13, 0x12, 0x31, 0x31, 0x32, 0x31, 0x11, 0x11, 0x11, 0x11, 0x13, 0x11, 0x13, 0x11, 0x11, 0x11,
0x11, 0x11, 0x21, 0x21, 0x31, 0x23, 0x63, 0x63, 0x32, 0x32, 0x30, 0x30, 0x36, 0x33, 0x63, 0x63,
0x63, 0x2, 0x3, 0x63, 0x2, 0x36, 0x3, 0x23, 0x63, 0x23, 0x23, 0x63, 0x63, 0x23, 0x63, 0x62,
0x66, 0x36, 0x31, 0x16, 0x0, 0x61, 0x11, 0x11, 0x11, 0x16, 0x11, 0x36, 0x36, 0x16, 0x13, 0x61,
0x62, 0x6, 0x36, 0x23, 0x6, 0x16, 0x6, 0x0, 0x0, 0x30, 0x1, 0x11, 0x11, 0x36, 0x16, 0x6,
0x36, 0x32, 0x36, 0x32, 0x13, 0x16, 0x13, 0x11, 0x11, 0x21, 0x11, 0x11, 0x31, 0x12, 0x13, 0x13,
0x61, 0x36, 0x13, 0x10, 0x13, 0x63, 0x13, 0x11, 0x31, 0x13, 0x11, 0x12, 0x11, 0x13, 0x13, 0x11,
0x31, 0x31, 0x13, 0x11, 0x11, 0x13, 0x13, 0x23, 0x63, 0x63, 0x23, 0x12, 0x33, 0x26, 0x33, 0x23,
0x30, 0x63, 0x6, 0x0, 0x3, 0x0, 0x36, 0x2, 0x30, 0x36, 0x36, 0x0, 0x63, 0x66, 0x26, 0x36,
0x36, 0x26, 0x16, 0x31, 0x16, 0x36, 0x1, 0x61, 0x16, 0x11, 0x36, 0x21, 0x11, 0x63, 0x26, 0x10,
0x36, 0x31, 0x6, 0x36, 0x63, 0x11, 0x31, 0x11, 0x63, 0x61, 0x11, 0x16, 0x30, 0x61, 0x36, 0x36,
0x36, 0x6, 0x0, 0x6, 0x31, 0x23, 0x26, 0x11, 0x21, 0x11, 0x11, 0x21, 0x11, 0x23, 0x13, 0x16,
0x13, 0x12, 0x31, 0x31, 0x32, 0x31, 0x11, 0x21, 0x11, 0x31, 0x63, 0x13, 0x11, 0x21, 0x11, 0x12,
0x11, 0x11, 0x11, 0x12, 0x13, 0x13, 0x23, 0x36, 0x32, 0x31, 0x36, 0x33, 0x62, 0x33, 0x23, 0x63,
0x32, 0x0, 0x3, 0x20, 0x60, 0x60, 0x2, 0x30, 0x2, 0x32, 0x36, 0x36, 0x2, 0x3, 0x63, 0x26,
0x36, 0x36, 0x32, 0x66, 0x36, 0x11, 0x63, 0x61, 0x31, 0x61, 0x61, 0x36, 0x53, 0x16, 0x16, 0x1,
0x62, 0x63, 0x60, 0x63, 0x26, 0x36, 0x16, 0x61, 0x11, 0x11, 0x16, 0x16, 0x1, 0x23, 0x62, 0x36,
0x26, 0x36, 0x3, 0x0, 0x0, 0x6, 0x31, 0x31, 0x13, 0x11, 0x31, 0x13, 0x11, 0x11, 0x35, 0x31,
0x31, 0x11, 0x61, 0x61, 0x31, 0x63, 0x21, 0x11, 0x31, 0x12, 0x11, 0x11, 0x13, 0x12, 0x16, 0x11,
0x31, 0x21, 0x31, 0x13, 0x11, 0x21, 0x36, 0x32, 0x33, 0x63, 0x63, 0x23, 0x36, 0x36, 0x36, 0x33,
0x63, 0x32, 0x30, 0x3, 0x0, 0x3, 0x60, 0x6, 0x30, 0x3, 0x60, 0x23, 0x63, 0x66, 0x36, 0x63,
0x62, 0x36, 0x66, 0x36, 0x26, 0x36, 0x21, 0x63, 0x56, 0x31, 0x62, 0x61, 0x36, 0x63, 0x63, 0x10,
0x36, 0x36, 0x2, 0x36, 0x6, 0x26, 0x13, 0x16, 0x16, 0x16, 0x10, 0x63, 0x16, 0x36, 0x63, 0x60,
0x36, 0x32, 0x0, 0x20, 0x60, 0x32, 0x31, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x16, 0x11, 0x11,
0x11, 0x61, 0x31, 0x13, 0x16, 0x32, 0x11, 0x31, 0x61, 0x61, 0x31, 0x23, 0x11, 0x11, 0x31, 0x13,
0x11, 0x11, 0x11, 0x61, 0x11, 0x33, 0x13, 0x23, 0x16, 0x32, 0x31, 0x36, 0x33, 0x23, 0x32, 0x36,
0x36, 0x0, 0x6, 0x0, 0x2, 0x0, 0x0, 0x30, 0x23, 0x62, 0x36, 0x36, 0x6, 0x30, 0x63, 0x26,
0x36, 0x62, 0x31, 0x66, 0x36, 0x53, 0x63, 0x65, 0x31, 0x26, 0x31, 0x31, 0x61, 0x21, 0x61, 0x65,
0x36, 0x26, 0x36, 0x36, 0x33, 0x63, 0x65, 0x31, 0x36, 0x13, 0x61, 0x26, 0x36, 0x63, 0x26, 0x36,
0x60, 0x63, 0x60, 0x63, 0x0, 0x63, 0x62, 0x13, 0x16, 0x11, 0x61, 0x21, 0x11, 0x12, 0x61, 0x31,
0x61, 0x31, 0x13, 0x61, 0x11, 0x36, 0x31, 0x11, 0x11, 0x11, 0x13, 0x61, 0x16, 0x31, 0x13, 0x11,
0x11, 0x31, 0x21, 0x13, 0x12, 0x11, 0x31, 0x36, 0x33, 0x13, 0x23, 0x23, 0x23, 0x13, 0x63, 0x23,
0x13, 0x23, 0x60, 0x30, 0x3, 0x0, 0x6, 0x6, 0x36, 0x23, 0x60, 0x63, 0x23, 0x62, 0x66, 0x63,
0x66, 0x36, 0x60, 0x36, 0x63, 0x66, 0x35, 0x63, 0x66, 0x61, 0x66, 0x16, 0x13, 0x66, 0x36, 0x31,
0x66, 0x33, 0x66, 0x6, 0x26, 0x63, 0x53, 0x56, 0x21, 0x36, 0x10, 0x63, 0x56, 0x36, 0x63, 0x62,
0x36, 0x36, 0x3, 0x0, 0x20, 0x2, 0x36, 0x11, 0x11, 0x13, 0x11, 0x13, 0x11, 0x13, 0x13, 0x16,
0x31, 0x16, 0x31, 0x13, 0x23, 0x63, 0x11, 0x63, 0x13, 0x23, 0x61, 0x13, 0x31, 0x11, 0x31, 0x12,
0x16, 0x11, 0x31, 0x11, 0x13, 0x13, 0x23, 0x31, 0x32, 0x36, 0x33, 0x13, 0x63, 0x23, 0x23, 0x63,
0x36, 0x32, 0x30, 0x20, 0x60, 0x6, 0x30, 0x32, 0x3, 0x3, 0x23, 0x20, 0x66, 0x36, 0x36, 0x35,
0x36, 0x13, 0x61, 0x63, 0x26, 0x31, 0x61, 0x21, 0x11, 0x13, 0x11, 0x16, 0x11, 0x10, 0x61, 0x66,
0x31, 0x62, 0x63, 0x61, 0x63, 0x66, 0x35, 0x36, 0x36, 0x53, 0x63, 0x16, 0x36, 0x26, 0x36, 0x63,
0x62, 0x63, 0x26, 0x3, 0x63, 0x60, 0x63, 0x32, 0x12, 0x11, 0x11, 0x11, 0x12, 0x11, 0x11, 0x61,
0x21, 0x31, 0x13, 0x21, 0x31, 0x23, 0x11, 0x11, 0x61, 0x31, 0x31, 0x31, 0x12, 0x31, 0x11, 0x13,
0x11, 0x21, 0x13, 0x12, 0x11, 0x31, 0x31, 0x32, 0x31, 0x31, 0x36, 0x32, 0x36, 0x31, 0x32, 0x33,
0x13, 0x23, 0x63, 0x0, 0x0, 0x0, 0x2, 0x6, 0x36, 0x2, 0x36, 0x6, 0x32, 0x63, 0x62, 0x66,
0x16, 0x66, 0x23, 0x61, 0x61, 0x66, 0x13, 0x61, 0x63, 0x16, 0x11, 0x61, 0x16, 0x16, 0x0, 0x1,
0x66, 0x36, 0x61, 0x63, 0x66, 0x36, 0x16, 0x16, 0x35, 0x31, 0x61, 0x63, 0x53, 0x13, 0x62, 0x36,
0x63, 0x63, 0x63, 0x2, 0x0, 0x13, 0x23, 0x51, 0x11, 0x11, 0x12, 0x11, 0x31, 0x13, 0x13, 0x13,
0x16, 0x11, 0x31, 0x13, 0x13, 0x31, 0x23, 0x13, 0x13, 0x11, 0x32, 0x12, 0x31, 0x31, 0x21, 0x31,
0x13, 0x11, 0x11, 0x11, 0x12, 0x31, 0x32, 0x36, 0x32, 0x32, 0x32, 0x33, 0x13, 0x23, 0x63, 0x32,
0x13, 0x63, 0x20, 0x6, 0x32, 0x6, 0x30, 0x0, 0x0, 0x30, 0x63, 0x63, 0x63, 0x66, 0x36, 0x36,
0x32, 0x31, 0x61, 0x66, 0x31, 0x32, 0x61, 0x61, 0x26, 0x36, 0x16, 0x11, 0x11, 0x11, 0x10, 0x3,
0x66, 0x63, 0x43, 0x66, 0x0, 0x16, 0x12, 0x11, 0x61, 0x61, 0x63, 0x26, 0x16, 0x61, 0x63, 0x53,
0x63, 0x62, 0x6, 0x3, 0x60, 0x3, 0x60, 0x36, 0x31, 0x11, 0x31, 0x11, 0x11, 0x11, 0x16, 0x11,
0x31, 0x36, 0x13, 0x61, 0x61, 0x63, 0x11, 0x13, 0x21, 0x63, 0x11, 0x31, 0x12, 0x13, 0x11, 0x11,
0x11, 0x11, 0x21, 0x21, 0x31, 0x12, 0x31, 0x31, 0x36, 0x31, 0x36, 0x32, 0x33, 0x33, 0x36, 0x33,
0x32, 0x32, 0x36, 0x30, 0x0, 0x30, 0x6, 0x32, 0x31, 0x23, 0x32, 0x6, 0x36, 0x32, 0x66, 0x16,
0x61, 0x66, 0x36, 0x31, 0x66, 0x16, 0x16, 0x13, 0x60, 0x1, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10,
0x63, 0x66, 0x66, 0x30, 0x31, 0x11, 0x11, 0x61, 0x13, 0x12, 0x61, 0x63, 0x63, 0x63, 0x66, 0x63,
0x62, 0x63, 0x63, 0x66, 0x30, 0x20, 0x0, 0x20, 0x11, 0x31, 0x11, 0x16, 0x13, 0x12, 0x31, 0x31,
0x61, 0x11, 0x35, 0x31, 0x32, 0x33, 0x23, 0x21, 0x31, 0x31, 0x23, 0x13, 0x13, 0x11, 0x13, 0x21,
0x21, 0x31, 0x13, 0x11, 0x12, 0x31, 0x36, 0x32, 0x33, 0x63, 0x3, 0x33, 0x32, 0x32, 0x33, 0x32,
0x13, 0x13, 0x20, 0x0, 0x36, 0x32, 0x30, 0x3, 0x23, 0x61, 0x36, 0x36, 0x32, 0x66, 0x36, 0x1,
0x36, 0x31, 0x62, 0x16, 0x16, 0x13, 0x16, 0x16, 0x61, 0x6, 0x16, 0x16, 0x11, 0x61, 0x11, 0x11,
0x16, 0x63, 0x63, 0x65, 0x16, 0x11, 0x61, 0x16, 0x11, 0x61, 0x16, 0x11, 0x61, 0x26, 0x13, 0x65,
0x36, 0x36, 0x2, 0x32, 0x53, 0x63, 0x60, 0x3, 0x1, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13,
0x16, 0x31, 0x61, 0x13, 0x13, 0x16, 0x31, 0x36, 0x32, 0x31, 0x31, 0x61, 0x31, 0x23, 0x11, 0x31,
0x11, 0x13, 0x11, 0x13, 0x11, 0x13, 0x63, 0x3, 0x60, 0x0, 0x63, 0x23, 0x63, 0x33, 0x32, 0x33,
0x32, 0x36, 0x30, 0x32, 0x2, 0x36, 0x2, 0x36, 0x31, 0x32, 0x32, 0x36, 0x6, 0x36, 0x16, 0x35,
0x62, 0x66, 0x31, 0x63, 0x61, 0x61, 0x61, 0x61, 0x11, 0x0, 0x11, 0x11, 0x16, 0x11, 0x61, 0x61,
0x61, 0x10, 0x61, 0x11, 0x61, 0x11, 0x11, 0x11, 0x16, 0x11, 0x61, 0x31, 0x63, 0x61, 0x36, 0x23,
0x63, 0x62, 0x36, 0x36, 0x31, 0x1, 0x23, 0x60, 0x26, 0x31, 0x21, 0x31, 0x11, 0x31, 0x63, 0x11,
0x61, 0x13, 0x13, 0x26, 0x31, 0x30, 0x13, 0x13, 0x16, 0x13, 0x16, 0x31, 0x21, 0x31, 0x16, 0x11,
0x31, 0x21, 0x12, 0x31, 0x63, 0x0, 0x30, 0x60, 0x0, 0x0, 0x3, 0x32, 0x32, 0x32, 0x33, 0x3,
0x13, 0x23, 0x60, 0x0, 0x36, 0x30, 0x36, 0x0, 0x23, 0x13, 0x13, 0x6, 0x36, 0x36, 0x1, 0x53,
0x16, 0x31, 0x66, 0x16, 0x13, 0x65, 0x31, 0x11, 0x61, 0x10, 0x6, 0x16, 0x11, 0x11, 0x16, 0x11,
0x16, 0x13, 0x61, 0x66, 0x11, 0x16, 0x16, 0x16, 0x16, 0x13, 0x11, 0x16, 0x11, 0x36, 0x16, 0x36,
0x53, 0x63, 0x60, 0x23, 0x62, 0x36, 0x36, 0x0, 0x31, 0x1, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13,
0x13, 0x61, 0x61, 0x63, 0x10, 0x13, 0x21, 0x35, 0x33, 0x21, 0x31, 0x21, 0x31, 0x13, 0x21, 0x11,
0x13, 0x11, 0x36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x32, 0x33, 0x33, 0x33, 0x33, 0x23,
0x32, 0x36, 0x30, 0x0, 0x0, 0x2, 0x30, 0x36, 0x31, 0x32, 0x31, 0x32, 0x6, 0x26, 0x31, 0x6,
0x63, 0x16, 0x21, 0x35, 0x35, 0x16, 0x16, 0x16, 0x11, 0x10, 0x0, 0x0, 0x6, 0x63, 0x61, 0x36,
0x36, 0x6, 0x6, 0x11, 0x16, 0x11, 0x11, 0x36, 0x31, 0x11, 0x61, 0x61, 0x61, 0x61, 0x1, 0x63,
0x62, 0x63, 0x63, 0x61, 0x3, 0x60, 0x30, 0x32, 0x61, 0x11, 0x31, 0x11, 0x31, 0x11, 0x31, 0x61,
0x11, 0x13, 0x13, 0x31, 0x1, 0x30, 0x13, 0x12, 0x31, 0x63, 0x13, 0x13, 0x11, 0x31, 0x13, 0x23,
0x12, 0x10, 0x0, 0x36, 0x0, 0x60, 0x63, 0x63, 0x11, 0x0, 0x3, 0x32, 0x32, 0x32, 0x32, 0x33,
0x13, 0x13, 0x20, 0x0, 0x0, 0x6, 0x2, 0x3, 0x62, 0x31, 0x32, 0x36, 0x36, 0x32, 0x66, 0x13,
0x61, 0x61, 0x36, 0x16, 0x16, 0x61, 0x61, 0x61, 0x11, 0x11, 0x0, 0x0, 0x13, 0x6, 0x0, 0x6,
0x3, 0x61, 0x10, 0x6, 0x36, 0x6, 0x36, 0x6, 0x12, 0x66, 0x11, 0x11, 0x31, 0x61, 0x63, 0x53,
0x63, 0x62, 0x36, 0x3, 0x26, 0x32, 0x6, 0x0, 0x0, 0x1, 0x16, 0x12, 0x11, 0x31, 0x61, 0x36,
0x30, 0x36, 0x21, 0x6, 0x30, 0x63, 0x1, 0x31, 0x13, 0x12, 0x16, 0x11, 0x31, 0x21, 0x21, 0x15,
0x31, 0x13, 0x4, 0x0, 0x36, 0x31, 0x36, 0x31, 0x3, 0x14, 0x2, 0x33, 0x23, 0x33, 0x33, 0x3,
0x32, 0x32, 0x30, 0x0, 0x63, 0x3, 0x0, 0x32, 0x33, 0x13, 0x23, 0x13, 0x23, 0x66, 0x31, 0x5,
0x16, 0x26, 0x61, 0x63, 0x16, 0x13, 0x16, 0x11, 0x61, 0x11, 0x60, 0x6, 0x11, 0x11, 0x61, 0x11,
0x11, 0x13, 0x11, 0x13, 0x51, 0x36, 0x0, 0x11, 0x61, 0x31, 0x16, 0x61, 0x16, 0x13, 0x16, 0x16,
0x23, 0x63, 0x0, 0x60, 0x63, 0x6, 0x0, 0x0, 0x30, 0x3, 0x3, 0x30, 0x30, 0x23, 0x3, 0x0,
0x6, 0x0, 0x30, 0x3, 0x2, 0x32, 0x36, 0x13, 0x11, 0x11, 0x11, 0x12, 0x11, 0x31, 0x31, 0x23,
0x12, 0x36, 0x3, 0x63, 0x60, 0x3, 0x2, 0x0, 0x0, 0x63, 0x3, 0x32, 0x33, 0x23, 0x23, 0x30,
0x63, 0x63, 0x60, 0x3, 0x2, 0x6, 0x0, 0x0, 0x63, 0x23, 0x63, 0x23, 0x36, 0x36, 0x36, 0x63,
0x63, 0x13, 0x53, 0x61, 0x61, 0x61, 0x61, 0x61, 0x11, 0x11, 0x10, 0x0, 0x16, 0x16, 0x36, 0x11,
0x11, 0x66, 0x16, 0x16, 0x11, 0x11, 0x3, 0x61, 0x31, 0x51, 0x31, 0x16, 0x13, 0x16, 0x53, 0x63,
0x66, 0x36, 0x0, 0x36, 0x2, 0x0, 0x30, 0x0, 0x0, 0x60, 0x21, 0x6, 0x6, 0x0, 0x16, 0x10,
0x3, 0x0, 0x0, 0x6, 0x0, 0x34, 0x23, 0x21, 0x21, 0x11, 0x11, 0x11, 0x21, 0x12, 0x13, 0x11,
0x31, 0x13, 0x0, 0x60, 0x3, 0x60, 0x36, 0x36, 0x0, 0x63, 0x6, 0x33, 0x23, 0x33, 0x3, 0x23,
0x30, 0x32, 0x30, 0x6, 0x0, 0x30, 0x0, 0x60, 0x2, 0x36, 0x32, 0x36, 0x30, 0x62, 0x66, 0x16,
0x16, 0x61, 0x61, 0x16, 0x23, 0x16, 0x11, 0x61, 0x61, 0x11, 0x11, 0x60, 0x1, 0x13, 0x11, 0x26,
0x63, 0x63, 0x10, 0x63, 0x16, 0x60, 0x61, 0x16, 0x16, 0x16, 0x16, 0x13, 0x16, 0x12, 0x31, 0x62,
0x63, 0x60, 0x0, 0x23, 0x6, 0x13, 0x60, 0x0, 0x60, 0x3, 0x11, 0x63, 0x0, 0x36, 0x13, 0x20,
0x30, 0x60, 0x63, 0x63, 0x21, 0x13, 0x31, 0x11, 0x13, 0x13, 0x1, 0x31, 0x61, 0x21, 0x31, 0x23,
0x12, 0x30, 0x60, 0x3, 0x16, 0x0, 0x63, 0x13, 0x3, 0x2, 0x3, 0x33, 0x33, 0x23, 0x33, 0x3,
0x21, 0x0, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x34, 0x32, 0x36, 0x33, 0x23, 0x33, 0x36, 0x32,
0x63, 0x10, 0x16, 0x61, 0x61, 0x61, 0x61, 0x61, 0x11, 0x61, 0x11, 0x11, 0x0, 0x2, 0x61, 0x11,
0x11, 0x11, 0x11, 0x21, 0x11, 0x63, 0x16, 0x13, 0x16, 0x13, 0x11, 0x61, 0x65, 0x31, 0x66, 0x36,
0x36, 0x0, 0x3, 0x6, 0x13, 0x62, 0x0, 0x0, 0x0, 0x0, 0x1, 0x11, 0x0, 0x3, 0x11, 0x10,
0x60, 0x0, 0x0, 0x13, 0x13, 0x21, 0x23, 0x10, 0x36, 0x6, 0x0, 0x3, 0x3, 0x32, 0x36, 0x32,
0x33, 0x0, 0x0, 0x2, 0x31, 0x33, 0x1, 0x31, 0x10, 0x36, 0x3, 0x23, 0x23, 0x32, 0x32, 0x33,
0x33, 0x6, 0x30, 0x0, 0x0, 0x63, 0x0, 0x3, 0x0, 0x36, 0x32, 0x36, 0x30, 0x60, 0x10, 0x61,
0x35, 0x61, 0x63, 0x16, 0x31, 0x62, 0x16, 0x11, 0x61, 0x11, 0x11, 0x11, 0x11, 0x63, 0x0, 0x0,
0x0, 0x61, 0x63, 0x61, 0x0, 0x16, 0x16, 0x35, 0x16, 0x16, 0x10, 0x13, 0x13, 0x56, 0x31, 0x6,
0x10, 0x0, 0x6, 0x2, 0x36, 0x36, 0x30, 0x0, 0x6, 0x0, 0x11, 0x10, 0x3, 0x6, 0x30, 0x30,
0x30, 0x30, 0x32, 0x32, 0x13, 0x13, 0x0, 0x0, 0x0, 0x30, 0x20, 0x60, 0x20, 0x63, 0x63, 0x13,
0x60, 0x63, 0x0, 0x63, 0x13, 0x60, 0x21, 0x31, 0x30, 0x13, 0x0, 0x33, 0x33, 0x23, 0x33, 0x32,
0x26, 0x32, 0x36, 0x0, 0x0, 0x0, 0x1, 0x6, 0x32, 0x32, 0x36, 0x33, 0x23, 0x33, 0x23, 0x60,
0x61, 0x1, 0x61, 0x26, 0x16, 0x13, 0x61, 0x61, 0x11, 0x61, 0x61, 0x61, 0x11, 0x11, 0x11, 0x16,
0x66, 0x36, 0x36, 0x63, 0x61, 0x31, 0x61, 0x11, 0x61, 0x31, 0x61, 0x61, 0x65, 0x31, 0x66, 0x36,
0x30, 0x0, 0x0, 0x30, 0x36, 0x21, 0x60, 0x30, 0x0, 0x60, 0x3, 0x12, 0x36, 0x3, 0x63, 0x0,
0x0, 0x2, 0x3, 0x63, 0x32, 0x1, 0x36, 0x3, 0x62, 0x16, 0x13, 0x63, 0x63, 0x23, 0x21, 0x1,
0x32, 0x0, 0x4, 0x0, 0x13, 0x10, 0x33, 0x12, 0x10, 0x36, 0x3, 0x23, 0x23, 0x33, 0x32, 0x33,
0x33, 0x23, 0x0, 0x3, 0x0, 0x63, 0x20, 0x3, 0x23, 0x63, 0x23, 0x2, 0x30, 0x60, 0x3, 0x63,
0x10, 0x66, 0x31, 0x61, 0x61, 0x66, 0x16, 0x16, 0x16, 0x11, 0x11, 0x11, 0x61, 0x15, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x16, 0x16, 0x31, 0x66, 0x13, 0x51, 0x36, 0x26, 0x31, 0x66, 0x32, 0x63,
0x0, 0x0, 0x6, 0x6, 0x6, 0x13, 0x3, 0x60, 0x63, 0x0, 0x6, 0x33, 0x30, 0x32, 0x30, 0x63,
0x23, 0x60, 0x6, 0x2, 0x63, 0x63, 0x20, 0x62, 0x61, 0x31, 0x2, 0x0, 0x26, 0x13, 0x13, 0x13,
0x23, 0x6, 0x3, 0x1, 0x61, 0x3, 0x61, 0x36, 0x36, 0x36, 0x3, 0x33, 0x32, 0x32, 0x33, 0x32,
0x23, 0x63, 0x60, 0x0, 0x0, 0x0, 0x36, 0x0, 0x32, 0x36, 0x32, 0x3, 0x60, 0x32, 0x0, 0x6,
0x36, 0x31, 0x66, 0x31, 0x63, 0x16, 0x16, 0x16, 0x11, 0x16, 0x16, 0x11, 0x11, 0x61, 0x11, 0x61,
0x11, 0x61, 0x61, 0x66, 0x31, 0x61, 0x16, 0x13, 0x61, 0x66, 0x13, 0x16, 0x16, 0x32, 0x63, 0x20,
0x0, 0x6, 0x30, 0x3, 0x23, 0x63, 0x62, 0x13, 0x60, 0x36, 0x3, 0x60, 0x32, 0x33, 0x63, 0x3,
0x0, 0x3, 0x63, 0x3, 0x0, 0x30, 0x36, 0x30, 0x30, 0x23, 0x61, 0x16, 0x13, 0x11, 0x16, 0x11,
0x66, 0x3, 0x6, 0x1, 0x33, 0x60, 0x2, 0x13, 0x10, 0x23, 0x0, 0x12, 0x33, 0x23, 0x32, 0x33,
0x36, 0x0, 0x0, 0x0, 0x0, 0x23, 0x60, 0x30, 0x63, 0x0, 0x3, 0x63, 0x0, 0x3, 0x3, 0x0,
0x2, 0x63, 0x63, 0x56, 0x16, 0x13, 0x16, 0x16, 0x16, 0x11, 0x11, 0x16, 0x11, 0x11, 0x61, 0x11,
0x61, 0x16, 0x13, 0x11, 0x16, 0x16, 0x13, 0x16, 0x12, 0x31, 0x62, 0x63, 0x63, 0x66, 0x30, 0x43,
0x6, 0x0, 0x2, 0x31, 0x36, 0x32, 0x33, 0x13, 0x23, 0x63, 0x63, 0x3, 0x63, 0x0, 0x32, 0x36,
0x3, 0x60, 0x0, 0x60, 0x63, 0x62, 0x36, 0x35, 0x11, 0x61, 0x11, 0x11, 0x16, 0x11, 0x61, 0x13,
0x13, 0x6, 0x6, 0x36, 0x36, 0x30, 0x36, 0x32, 0x0, 0x36, 0x3, 0x33, 0x32, 0x33, 0x23, 0x32,
0x23, 0x32, 0x30, 0x0, 0x0, 0x0, 0x0, 0x3, 0x6, 0x32, 0x0, 0x2, 0x36, 0x32, 0x6, 0x0,
0x3, 0x60, 0x15, 0x31, 0x36, 0x55, 0x31, 0x61, 0x61, 0x16, 0x16, 0x11, 0x61, 0x61, 0x16, 0x16,
0x16, 0x16, 0x15, 0x31, 0x62, 0x13, 0x61, 0x61, 0x36, 0x16, 0x31, 0x61, 0x62, 0x36, 0x3, 0x60,
0x0, 0x0, 0x36, 0x13, 0x23, 0x63, 0x6, 0x36, 0x6, 0x36, 0x6, 0x32, 0x33, 0x23, 0x63, 0x3,
0x60, 0x11, 0x11, 0x13, 0x0, 0x36, 0x2, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x21, 0x13, 0x11,
0x61, 0x6, 0x36, 0x0, 0x0, 0x0, 0x63, 0x43, 0x0, 0x63, 0x6, 0x32, 0x33, 0x23, 0x32, 0x33,
0x36, 0x20, 0x60, 0x6, 0x0, 0x63, 0x0, 0x60, 0x20, 0x0, 0x36, 0x30, 0x2, 0x6, 0x30, 0x0,
0x0, 0x0, 0x3, 0x66, 0x26, 0x31, 0x61, 0x21, 0x61, 0x61, 0x11, 0x11, 0x11, 0x11, 0x61, 0x16,
0x13, 0x11, 0x36, 0x16, 0x11, 0x61, 0x16, 0x31, 0x61, 0x62, 0x66, 0x36, 0x33, 0x60, 0x36, 0x23,
0x60, 0x36, 0x1, 0x30, 0x60, 0x60, 0x23, 0x6, 0x36, 0x63, 0x63, 0x63, 0x60, 0x36, 0x36, 0x6,
0x32, 0x11, 0x11, 0x10, 0x60, 0x62, 0x36, 0x11, 0x16, 0x11, 0x11, 0x11, 0x16, 0x11, 0x11, 0x16,
0x12, 0x63, 0x66, 0x36, 0x6, 0x0, 0x0, 0x0, 0x0, 0x36, 0x3, 0x23, 0x13, 0x33, 0x23, 0x32,
0x63, 0x36, 0x30, 0x3, 0x3, 0x0, 0x60, 0x0, 0x30, 0x0, 0x0, 0x6, 0x0, 0x0, 0x20, 0x36,
0x0, 0x0, 0x0, 0x3, 0x63, 0x62, 0x63, 0x61, 0x31, 0x61, 0x61, 0x61, 0x61, 0x61, 0x16, 0x16,
0x11, 0x66, 0x11, 0x61, 0x36, 0x13, 0x61, 0x26, 0x13, 0x63, 0x13, 0x60, 0x20, 0x36, 0x26, 0x36,
0x6, 0x3, 0x2, 0x6, 0x32, 0x36, 0x36, 0x63, 0x63, 0x63, 0x53, 0x63, 0x13, 0x63, 0x63, 0x30,
0x36, 0x11, 0x11, 0x13, 0x20, 0x31, 0x3, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x61, 0x16, 0x11,
0x11, 0x16, 0x1, 0x6, 0x36, 0x36, 0x6, 0x30, 0x40, 0x1, 0x0, 0x33, 0x32, 0x0, 0x32, 0x33,
0x32, 0x3, 0x20, 0x63, 0x26, 0x32, 0x30, 0x36, 0x0, 0x63, 0x2, 0x30, 0x3, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x63, 0x63, 0x61, 0x63, 0x56, 0x31, 0x61, 0x61, 0x16, 0x16, 0x31, 0x31,
0x36, 0x13, 0x10, 0x16, 0x16, 0x35, 0x13, 0x63, 0x66, 0x13, 0x60, 0x23, 0x6, 0x0, 0x36, 0x32,
0x3, 0x6, 0x6, 0x36, 0x36, 0x36, 0x62, 0x35, 0x6, 0x66, 0x63, 0x63, 0x63, 0x63, 0x23, 0x63,
0x61, 0x11, 0x11, 0x16, 0x36, 0x6, 0x1, 0x61, 0x11, 0x61, 0x11, 0x11, 0x16, 0x11, 0x11, 0x16,
0x13, 0x66, 0x16, 0x36, 0x31, 0x0, 0x3, 0x63, 0x63, 0x1, 0x3, 0x12, 0x30, 0x0, 0x33, 0x23,
0x3, 0x60, 0x3, 0x6, 0x32, 0x36, 0x6, 0x32, 0x3, 0x26, 0x0, 0x0, 0x60, 0x0, 0x30, 0x0,
0x0, 0x0, 0x6, 0x0, 0x2, 0x36, 0x3, 0x66, 0x36, 0x50, 0x10, 0x13, 0x61, 0x36, 0x16, 0x16,
0x53, 0x26, 0x61, 0x32, 0x36, 0x16, 0x36, 0x66, 0x23, 0x60, 0x10, 0x36, 0x3, 0x65, 0x30, 0x63,
0x6, 0x32, 0x30, 0x16, 0x16, 0x61, 0x36, 0x61, 0x63, 0x63, 0x66, 0x13, 0x61, 0x31, 0x63, 0x26,
0x36, 0x11, 0x11, 0x11, 0x0, 0x31, 0x60, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x26, 0x36, 0x60, 0x16, 0x36, 0x6, 0x32, 0x36, 0x36, 0x0, 0x33, 0x3, 0x60, 0x0, 0x33,
0x0, 0x30, 0x60, 0x3, 0x0, 0x63, 0x23, 0x3, 0x6, 0x13, 0x3, 0x60, 0x30, 0x60, 0x60, 0x36,
0x36, 0x30, 0x63, 0x0, 0x30, 0x60, 0x32, 0x3, 0x63, 0x23, 0x63, 0x66, 0x23, 0x51, 0x6, 0x31,
0x61, 0x61, 0x36, 0x66, 0x16, 0x32, 0x63, 0x23, 0x36, 0x32, 0x30, 0x63, 0x26, 0x36, 0x6, 0x30,
0x60, 0x6, 0x35, 0x16, 0x31, 0x61, 0x61, 0x61, 0x35, 0x61, 0x66, 0x35, 0x13, 0x66, 0x31, 0x63,
0x16, 0x11, 0x11, 0x16, 0x6, 0x2, 0x36, 0x11, 0x61, 0x11, 0x11, 0x11, 0x16, 0x21, 0x61, 0x16,
0x11, 0x61, 0x66, 0x36, 0x13, 0x10, 0x31, 0x21, 0x32, 0x36, 0x30, 0x23, 0x0, 0x3, 0x63, 0x26,
0x6, 0x0, 0x30, 0x0, 0x60, 0x30, 0x0, 0x63, 0x23, 0x1, 0x2, 0x0, 0x0, 0x3, 0x6, 0x0,
0x2, 0x63, 0x0, 0x0, 0x60, 0x6, 0x4, 0x2, 0x6, 0x36, 0x6, 0x3, 0x60, 0x6, 0x31, 0x6,
0x3, 0x63, 0x60, 0x36, 0x32, 0x63, 0x6, 0x36, 0x23, 0x63, 0x53, 0x66, 0x36, 0x36, 0x30, 0x63,
0x6, 0x30, 0x6, 0x11, 0x61, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x61, 0x61, 0x66, 0x16,
0x31, 0x11, 0x11, 0x16, 0x30, 0x34, 0x23, 0x63, 0x12, 0x16, 0x11, 0x61, 0x61, 0x31, 0x61, 0x21,
0x61, 0x36, 0x36, 0x63, 0x1, 0x36, 0x3, 0x13, 0x11, 0x3, 0x60, 0x31, 0x60, 0x0, 0x3, 0x33,
0x0, 0x2, 0x0, 0x60, 0x3, 0x60, 0x30, 0x36, 0x30, 0x63, 0x3, 0x0, 0x30, 0x20, 0x3, 0x0,
0x36, 0x30, 0x60, 0x63, 0x23, 0x63, 0x2, 0x36, 0x30, 0x6, 0x30, 0x23, 0x0, 0x30, 0x0, 0x0,
0x0, 0x0, 0x3, 0x60, 0x6, 0x36, 0x32, 0x30, 0x36, 0x36, 0x61, 0x63, 0x16, 0x23, 0x60, 0x20,
0x63, 0x6, 0x31, 0x11, 0x11, 0x61, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x36,
0x66, 0x11, 0x11, 0x16, 0x0, 0x60, 0x36, 0x21, 0x61, 0x11, 0x16, 0x11, 0x11, 0x61, 0x12, 0x13,
0x12, 0x66, 0x66, 0x36, 0x61, 0x36, 0x6, 0x31, 0x13, 0x1, 0x0, 0x32, 0x30, 0x3, 0x6, 0x23,
0x32, 0x3, 0x60, 0x3, 0x20, 0x30, 0x60, 0x23, 0x62, 0x31, 0x66, 0x36, 0x4, 0x36, 0x6, 0x6,
0x0, 0x63, 0x63, 0x61, 0x0, 0x30, 0x63, 0x60, 0x6, 0x30, 0x63, 0x60, 0x0, 0x60, 0x0, 0x0,
0x0, 0x3, 0x60, 0x6, 0x30, 0x23, 0x63, 0x66, 0x30, 0x23, 0x61, 0x26, 0x11, 0x42, 0x63, 0x32,
0x36, 0x32, 0x60, 0x11, 0x61, 0x11, 0x31, 0x61, 0x66, 0x16, 0x16, 0x16, 0x31, 0x63, 0x16, 0x13,
0x16, 0x11, 0x11, 0x13, 0x60, 0x1, 0x66, 0x31, 0x16, 0x11, 0x11, 0x11, 0x11, 0x16, 0x11, 0x11,
0x11, 0x60, 0x36, 0x63, 0x23, 0x60, 0x3, 0x26, 0x31, 0x3, 0x60, 0x3, 0x0, 0x0, 0x0, 0x3,
0x6, 0x36, 0x30, 0x63, 0x63, 0x60, 0x36, 0x36, 0x3, 0x10, 0x30, 0x60, 0x63, 0x60, 0x63, 0x66,
0x61, 0x66, 0x16, 0x10, 0x6, 0x6, 0x30, 0x3, 0x63, 0x20, 0x32, 0x0, 0x6, 0x30, 0x0, 0x0,
0x0, 0x6, 0x3, 0x3, 0x0, 0x61, 0x26, 0x32, 0x61, 0x36, 0x13, 0x63, 0x30, 0x36, 0x36, 0x3,
0x60, 0x36, 0x31, 0x16, 0x16, 0x66, 0x66, 0x36, 0x63, 0x66, 0x63, 0x66, 0x16, 0x31, 0x63, 0x61,
0x63, 0x11, 0x11, 0x16, 0x30, 0x36, 0x33, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x11, 0x16, 0x16,
0x13, 0x63, 0x60, 0x36, 0x36, 0x36, 0x36, 0x33, 0x63, 0x6, 0x30, 0x60, 0x0, 0x6, 0x30, 0x6,
0x36, 0x30, 0x6, 0x36, 0x6, 0x36, 0x63, 0x63, 0x66, 0x66, 0x61, 0x61, 0x66, 0x61, 0x65, 0x31,
0x66, 0x15, 0x61, 0x60, 0x36, 0x36, 0x23, 0x62, 0x0, 0x6, 0x36, 0x0, 0x0, 0x6, 0x0, 0x0,
0x0, 0x3, 0x0, 0x60, 0x60, 0x36, 0x11, 0x11, 0x16, 0x13, 0x26, 0x36, 0x65, 0x36, 0x32, 0x36,
0x32, 0x32, 0x6, 0x11, 0x61, 0x32, 0x36, 0x63, 0x66, 0x13, 0x66, 0x13, 0x61, 0x63, 0x61, 0x63,
0x66, 0x11, 0x11, 0x16, 0x60, 0x2, 0x60, 0x6, 0x63, 0x66, 0x11, 0x66, 0x11, 0x16, 0x13, 0x13,
0x61, 0x26, 0x6, 0x60, 0x1, 0x36, 0x0, 0x66, 0x36, 0x3, 0x60, 0x36, 0x0, 0x30, 0x63, 0x3,
0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x16, 0x31, 0x66, 0x16, 0x61, 0x66, 0x66, 0x66,
0x61, 0x66, 0x66, 0x30, 0x63, 0x2, 0x34, 0x3, 0x63, 0x63, 0x60, 0x3, 0x0, 0x60, 0x0, 0x0,
0x0, 0x60, 0x2, 0x30, 0x23, 0x0, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x12, 0x63, 0x63,
0x60, 0x63, 0x63, 0x56, 0x36, 0x63, 0x63, 0x26, 0x36, 0x36, 0x13, 0x66, 0x13, 0x61, 0x36, 0x36,
0x31, 0x66, 0x61, 0x63, 0x0, 0x63, 0x3, 0x63, 0x26, 0x63, 0x66, 0x31, 0x60, 0x63, 0x66, 0x66,
0x3, 0x43, 0x0, 0x36, 0x6, 0x30, 0x0, 0x33, 0x0, 0x6, 0x30, 0x3, 0x6, 0x0, 0x30, 0x63,
0x66, 0x66, 0x16, 0x66, 0x16, 0x66, 0x66, 0x66, 0x66, 0x66, 0x16, 0x66, 0x16, 0x16, 0x61, 0x61,
0x66, 0x66, 0x36, 0x66, 0x51, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x63, 0x60, 0x3, 0x60, 0x0,
0x3, 0x0, 0x30, 0x6, 0x36, 0x30, 0x61, 0x66, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12,
0x16, 0x16, 0x36, 0x3, 0x63, 0x6, 0x36, 0x36, 0x3, 0x60, 0x0, 0x63, 0x6, 0x36, 0x36, 0x32,
0x63, 0x63, 0x63, 0x62, 0x63, 0x0, 0x42, 0x6, 0x36, 0x36, 0x26, 0x60, 0x61, 0x66, 0x63, 0x63,
0x60, 0x6, 0x6, 0x4, 0x30, 0x6, 0x6, 0x6, 0x36, 0x3, 0x60, 0x60, 0x3, 0x0, 0x63, 0x0,
0x66, 0x36, 0x66, 0x36, 0x66, 0x66, 0x31, 0x66, 0x66, 0x16, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
0x63, 0x63, 0x61, 0x11, 0x56, 0x3, 0x63, 0x63, 0x60, 0x6, 0x3, 0x20, 0x63, 0x0, 0x0, 0x60,
0x0, 0x6, 0x6, 0x36, 0x0, 0x66, 0x36, 0x11, 0x36, 0x66, 0x61, 0x61, 0x15, 0x16, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x26, 0x13, 0x20, 0x30, 0x36, 0x3, 0x60, 0x36, 0x32, 0x6, 0x32, 0x6,
0x36, 0x60, 0x60, 0x63, 0x0, 0x6, 0x30, 0x30, 0x0, 0x60, 0x36, 0x36, 0x63, 0x66, 0x36, 0x60,
0x60, 0x0, 0x0, 0x36, 0x36, 0x36, 0x36, 0x31, 0x1, 0x36, 0x3, 0x0, 0x0, 0x60, 0x0, 0x23,
0x61, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x63,
0x60, 0x0, 0x16, 0x50, 0x63, 0x2, 0x0, 0x23, 0x63, 0x20, 0x36, 0x32, 0x36, 0x36, 0x0, 0x0,
0x6, 0x0, 0x0, 0x0, 0x30, 0x32, 0x60, 0x1, 0x11, 0x11, 0x36, 0x36, 0x11, 0x11, 0x11, 0x66,
0x61, 0x61, 0x11, 0x11, 0x11, 0x16, 0x16, 0x66, 0x26, 0x6, 0x36, 0x60, 0x6, 0x30, 0x60, 0x30,
0x3, 0x60, 0x63, 0x66, 0x60, 0x0, 0x0, 0x60, 0x60, 0x3, 0x62, 0x63, 0x66, 0x36, 0x60, 0x60,
0x30, 0x60, 0x6, 0x3, 0x63, 0x11, 0x31, 0x21, 0x31, 0x31, 0x6, 0x0, 0x0, 0x3, 0x63, 0x0,
0x66, 0x61, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x61, 0x31, 0x31, 0x31, 0x36,
0x30, 0x36, 0x26, 0x3, 0x0, 0x63, 0x63, 0x60, 0x2, 0x36, 0x36, 0x6, 0x36, 0x30, 0x0, 0x0,
0x0, 0x30, 0x6, 0x35, 0x62, 0x3, 0x3, 0x6, 0x11, 0x11, 0x11, 0x11, 0x16, 0x11, 0x11, 0x11,
0x11, 0x11, 0x61, 0x11, 0x11, 0x11, 0x11, 0x13, 0x13, 0x10, 0x23, 0x32, 0x63, 0x62, 0x36, 0x36,
0x6, 0x3, 0x60, 0x0, 0x3, 0x6, 0x36, 0x30, 0x63, 0x66, 0x3, 0x60, 0x60, 0x60, 0x60, 0x63,
0x60, 0x0, 0x0, 0x6, 0x6, 0x30, 0x36, 0x33, 0x6, 0x30, 0x0, 0x6, 0x30, 0x60, 0x0, 0x60,
0x66, 0x66, 0x66, 0x66, 0x66, 0x61, 0x66, 0x36, 0x16, 0x66, 0x13, 0x13, 0x66, 0x36, 0x36, 0x30,
0x60, 0x63, 0x3, 0x6, 0x36, 0x3, 0x20, 0x63, 0x63, 0x60, 0x23, 0x63, 0x23, 0x60, 0x0, 0x0,
0x0, 0x60, 0x36, 0x16, 0x61, 0x66, 0x2, 0x30, 0x1, 0x11, 0x11, 0x11, 0x11, 0x61, 0x61, 0x61,
0x11, 0x11, 0x11, 0x51, 0x61, 0x11, 0x11, 0x11, 0x11, 0x11, 0x15, 0x13, 0x13, 0x63, 0x60, 0x63,
0x63, 0x60, 0x3, 0x60, 0x60, 0x30, 0x60, 0x2, 0x6, 0x23, 0x66, 0x6, 0x36, 0x6, 0x36, 0x0,
0x0, 0x6, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x60, 0x3, 0x0, 0x63, 0x0, 0x0, 0x30,
0x66, 0x66, 0x63, 0x66, 0x66, 0x36, 0x61, 0x61, 0x36, 0x31, 0x36, 0x36, 0x13, 0x61, 0x36, 0x0,
0x30, 0x36, 0x6, 0x2, 0x3, 0x24, 0x3, 0x60, 0x36, 0x33, 0x63, 0x6, 0x36, 0x0, 0x0, 0x0,
0x0, 0x0, 0x61, 0x0, 0x10, 0x16, 0x63, 0x0, 0x61, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16,
0x16, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x26,
0x36, 0x32, 0x36, 0x3, 0x60, 0x62, 0x36, 0x31, 0x61, 0x36, 0x21, 0x35, 0x26, 0x32, 0x6, 0x36,
0x6, 0x30, 0x36, 0x30, 0x60, 0x6, 0x0, 0x6, 0x0, 0x0, 0x0, 0x0, 0x32, 0x63, 0x60, 0x26,
0x63, 0x66, 0x66, 0x66, 0x36, 0x66, 0x36, 0x36, 0x36, 0x36, 0x31, 0x63, 0x36, 0x31, 0x3, 0x63,
0x26, 0x3, 0x3, 0x63, 0x6, 0x3, 0x60, 0x36, 0x0, 0x60, 0x6, 0x30, 0x6, 0x30, 0x60, 0x0,
0x3, 0x0, 0x1, 0x66, 0x66, 0x1, 0x60, 0x60, 0x1, 0x11, 0x61, 0x66, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x61, 0x66, 0x16, 0x16, 0x11, 0x11, 0x11, 0x15, 0x16, 0x16, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x63, 0x66, 0x32, 0x36, 0x32, 0x66, 0x30, 0x13, 0x60, 0x16, 0x36, 0x36, 0x30, 0x23,
0x63, 0x6, 0x0, 0x63, 0x0, 0x3, 0x6, 0x0, 0x3, 0x0, 0x60, 0x60, 0x63, 0x0, 0x36, 0x30,
0x66, 0x63, 0x63, 0x13, 0x61, 0x33, 0x13, 0x63, 0x61, 0x36, 0x36, 0x36, 0x61, 0x36, 0x6, 0x6,
0x30, 0x6, 0x20, 0x6, 0x3, 0x6, 0x26, 0x61, 0x26, 0x16, 0x63, 0x26, 0x32, 0x0, 0x0, 0x0,
0x0, 0x60, 0x66, 0x6, 0x32, 0x66, 0x3, 0x3, 0x0, 0x11, 0x11, 0x11, 0x66, 0x61, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x16, 0x16, 0x66, 0x16, 0x11, 0x11, 0x11, 0x11, 0x16, 0x16, 0x61, 0x61,
0x11, 0x11, 0x11, 0x11, 0x16, 0x61, 0x63, 0x63, 0x66, 0x36, 0x31, 0x30, 0x10, 0x10, 0x16, 0x36,
0x32, 0x63, 0x23, 0x60, 0x63, 0x60, 0x3, 0x6, 0x36, 0x6, 0x30, 0x30, 0x0, 0x60, 0x0, 0x36,
0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x66, 0x36, 0x36, 0x32, 0x60, 0x13, 0x63, 0x60, 0x30, 0x36,
0x6, 0x30, 0x36, 0x3, 0x66, 0x61, 0x61, 0x66, 0x16, 0x61, 0x56, 0x30, 0x36, 0x0, 0x0, 0x0,
0x0, 0x0, 0x16, 0x32, 0x66, 0x1, 0x0, 0x6, 0x0, 0x11, 0x11, 0x11, 0x11, 0x13, 0x60, 0x16,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x61, 0x66, 0x66, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16,
0x66, 0x66, 0x15, 0x11, 0x11, 0x11, 0x11, 0x12, 0x11, 0x62, 0x60, 0x66, 0x32, 0x36, 0x33, 0x63,
0x63, 0x13, 0x63, 0x23, 0x62, 0x31, 0x36, 0x23, 0x63, 0x23, 0x60, 0x63, 0x23, 0x3, 0x60, 0x20,
0x63, 0x16, 0x36, 0x36, 0x23, 0x61, 0x3, 0x13, 0x63, 0x63, 0x63, 0x63, 0x26, 0x30, 0x20, 0x63,
0x2, 0x36, 0x6, 0x36, 0x51, 0x66, 0x16, 0x56, 0x61, 0x66, 0x30, 0x6, 0x3, 0x0, 0x60, 0x0,
0x0, 0x0, 0x62, 0x66, 0x36, 0x62, 0x6, 0x3, 0x0, 0x61, 0x11, 0x11, 0x11, 0x11, 0x16, 0x63,
0x66, 0x61, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x31, 0x66, 0x61, 0x61, 0x11, 0x11, 0x11,
0x11, 0x11, 0x61, 0x66, 0x66, 0x16, 0x16, 0x11, 0x11, 0x11, 0x11, 0x13, 0x66, 0x36, 0x26, 0x23,
0x62, 0x36, 0x31, 0x31, 0x31, 0x6, 0x23, 0x13, 0x23, 0x63, 0x23, 0x63, 0x60, 0x26, 0x32, 0x36,
0x36, 0x1, 0x36, 0x13, 0x66, 0x30, 0x10, 0x63, 0x26, 0x36, 0x36, 0x36, 0x30, 0x3, 0x63, 0x63,
0x60, 0x63, 0x20, 0x0, 0x16, 0x16, 0x66, 0x36, 0x0, 0x30, 0x63, 0x63, 0x26, 0x0, 0x0, 0x0,
0x0, 0x0, 0x36, 0x36, 0x26, 0x36, 0x3, 0x0, 0x6, 0x31, 0x11, 0x11, 0x11, 0x11, 0x11, 0x15,
0x32, 0x30, 0x63, 0x61, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x63, 0x66, 0x36, 0x16, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x66, 0x16, 0x66, 0x16, 0x16, 0x11, 0x11, 0x11, 0x11, 0x31, 0x61,
0x36, 0x11, 0x61, 0x62, 0x63, 0x13, 0x13, 0x63, 0x61, 0x36, 0x31, 0x32, 0x31, 0x33, 0x63, 0x63,
0x63, 0x63, 0x62, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x31, 0x6, 0x36, 0x6, 0x30, 0x6,
0x3, 0x60, 0x6, 0x36, 0x20, 0x0, 0x30, 0x3, 0x2, 0x6, 0x30, 0x3, 0x63, 0x0, 0x0, 0x0,
0x0, 0x3, 0x0, 0x16, 0x36, 0x0, 0x0, 0x60, 0x30, 0x21, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x16, 0x61, 0x66, 0x63, 0x66, 0x61, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x63, 0x63, 0x66,
0x61, 0x61, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x16, 0x36, 0x63, 0x66, 0x16, 0x15, 0x11, 0x11,
0x51, 0x11, 0x13, 0x11, 0x31, 0x23, 0x10, 0x13, 0x23, 0x13, 0x10, 0x13, 0x63, 0x61, 0x32, 0x31,
0x63, 0x13, 0x63, 0x63, 0x63, 0x26, 0x36, 0x36, 0x36, 0x1, 0x6, 0x30, 0x23, 0x3, 0x6, 0x23,
0x60, 0x30, 0x36, 0x0, 0x36, 0x30, 0x23, 0x26, 0x36, 0x30, 0x23, 0x60, 0x6, 0x0, 0x0, 0x0,
0x0, 0x0, 0x60, 0x6, 0x60, 0x3, 0x63, 0x6, 0x6, 0x6, 0x61, 0x61, 0x11, 0x11, 0x11, 0x11,
0x11, 0x16, 0x13, 0x66, 0x32, 0x36, 0x36, 0x61, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x31,
0x3, 0x60, 0x60, 0x61, 0x61, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x16, 0x36, 0x63, 0x66, 0x61,
0x16, 0x16, 0x11, 0x61, 0x11, 0x11, 0x11, 0x11, 0x61, 0x62, 0x13, 0x63, 0x13, 0x23, 0x16, 0x36,
0x63, 0x60, 0x63, 0x63, 0x63, 0x63, 0x62, 0x36, 0x32, 0x36, 0x36, 0x6, 0x30, 0x62, 0x3, 0x0,
0x63, 0x20, 0x60, 0x36, 0x3, 0x60, 0x60, 0x3, 0x60, 0x6, 0x36, 0x3, 0x23, 0x6, 0x63, 0x66,
0x6, 0x6, 0x30, 0x3, 0x0, 0x36, 0x26, 0x3, 0x1, 0x1, 0x61, 0x61, 0x61, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x63, 0x66, 0x63, 0x62, 0x36, 0x66, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16,
0x61, 0x63, 0x13, 0x63, 0x63, 0x66, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x51, 0x61, 0x63, 0x63,
0x61, 0x61, 0x61, 0x16, 0x61, 0x66, 0x16, 0x31, 0x13, 0x13, 0x16, 0x12, 0x61, 0x36, 0x23, 0x13,
0x32, 0x36, 0x32, 0x63, 0x26, 0x31, 0x36, 0x23, 0x63, 0x63, 0x6, 0x15, 0x60, 0x36, 0x6, 0x63,
0x6, 0x0, 0x2, 0x3, 0x2, 0x3, 0x63, 0x60, 0x6, 0x36, 0x0, 0x63, 0x60, 0x63, 0x65, 0x2,
0x61, 0x60, 0x63, 0x60, 0x6, 0x0, 0x2, 0x60, 0x6, 0x1, 0x66, 0x16, 0x16, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x13, 0x66, 0x36, 0x63, 0x63, 0x6, 0x61, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x16, 0x61, 0x66, 0x26, 0x36, 0x36, 0x36, 0x66, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x61,
0x66, 0x36, 0x30, 0x61, 0x36, 0x11, 0x61, 0x16, 0x16, 0x11, 0x61, 0x61, 0x36, 0x13, 0x11, 0x36,
0x63, 0x63, 0x10, 0x36, 0x63, 0x10, 0x63, 0x36, 0x36, 0x32, 0x63, 0x50, 0x30, 0x63, 0x3, 0x2,
0x3, 0x0, 0x0, 0x6, 0x6, 0x36, 0x0, 0x63, 0x63, 0x2, 0x36, 0x30, 0x6, 0x0, 0x0, 0x3,
0x0, 0x0, 0x0, 0x0, 0x30, 0x35, 0x30, 0x63, 0x61, 0x6, 0x11, 0x66, 0x16, 0x16, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x15, 0x11, 0x63, 0x66, 0x32, 0x63, 0x20, 0x61, 0x61, 0x11, 0x11, 0x11,
0x11, 0x11, 0x12, 0x13, 0x16, 0x16, 0x26, 0x36, 0x36, 0x35, 0x66, 0x16, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x61, 0x63, 0x66, 0x36, 0x36, 0x61, 0x61, 0x61, 0x61, 0x31, 0x61, 0x61, 0x63, 0x51,
0x26, 0x36, 0x36, 0x13, 0x16, 0x36, 0x36, 0x60, 0x23, 0x63, 0x1, 0x60, 0x63, 0x2, 0x66, 0x3,
0x60, 0x6, 0x3, 0x0, 0x30, 0x0, 0x63, 0x2, 0x6, 0x36, 0x0, 0x63, 0x23, 0x6, 0x0, 0x0,
0x0, 0x6, 0x30, 0x36, 0x6, 0x0, 0x63, 0x62, 0x6, 0x10, 0x16, 0x11, 0x66, 0x16, 0x16, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x36, 0x63, 0x66, 0x36, 0x0, 0x36, 0x16, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x16, 0x16, 0x31, 0x61, 0x61, 0x1, 0x36, 0x1, 0x66, 0x16, 0x15, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x66, 0x16, 0x36, 0x36, 0x36, 0x31, 0x61, 0x61, 0x36, 0x11, 0x36,
};

View file

@ -0,0 +1,28 @@
/**
* @filename : imagedata.h
* @brief : head file for imagedata.cpp
*
* Copyright (C) Waveshare July 8 2020
*
* 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.
*/
//gImage_4in01f: 192*143
extern const unsigned char gImage_4in01f[];
/* FILE END */

View file

@ -91,7 +91,7 @@ void Epd::Reset(void) {
DigitalWrite(reset_pin, HIGH);
DelayMs(200);
DigitalWrite(reset_pin, LOW);
DelayMs(5);
DelayMs(2);
DigitalWrite(reset_pin, HIGH);
DelayMs(200);
}

View file

@ -128,46 +128,6 @@ void Epd::Reset(void) {
DelayMs(200);
}
/******************************************************************************
function : show 7 kind of color block
parameter:
******************************************************************************/
void Epd::EPD_5IN65F_Show7Block(void)
{
unsigned long i,j,k;
unsigned char const Color_seven[8] =
{EPD_5IN65F_BLACK,EPD_5IN65F_BLUE,EPD_5IN65F_GREEN,EPD_5IN65F_ORANGE,
EPD_5IN65F_RED,EPD_5IN65F_YELLOW,EPD_5IN65F_WHITE,EPD_5IN65F_WHITE};
SendCommand(0x61);//Set Resolution setting
SendData(0x02);
SendData(0x58);
SendData(0x01);
SendData(0xC0);
SendCommand(0x10);
for(i=0; i<224; i++) {
for(k = 0 ; k < 4; k ++) {
for(j = 0 ; j < 75; j ++) {
SendData((Color_seven[k]<<4) |Color_seven[k]);
}
}
}
for(i=0; i<224; i++) {
for(k = 4 ; k < 8; k ++) {
for(j = 0 ; j < 75; j ++) {
SendData((Color_seven[k]<<4) |Color_seven[k]);
}
}
}
SendCommand(0x04);//0x04
EPD_5IN65F_BusyHigh();
SendCommand(0x12);//0x12
EPD_5IN65F_BusyHigh();
SendCommand(0x02); //0x02
EPD_5IN65F_BusyLow();
DelayMs(200);
}
/******************************************************************************
function : Sends the image buffer in RAM to e-Paper and displays
parameter:
@ -181,8 +141,9 @@ void Epd::EPD_5IN65F_Display(const UBYTE *image) {
SendData(0xC0);
SendCommand(0x10);
for(i=0; i<height; i++) {
for(j=0; j<width/2; j++)
for(j=0; j<width/2; j++) {
SendData(image[j+((width/2)*i)]);
}
}
SendCommand(0x04);//0x04
EPD_5IN65F_BusyHigh();
@ -208,13 +169,14 @@ void Epd::EPD_5IN65F_Display_part(const UBYTE *image, UWORD xstart, UWORD ystart
SendData(0xC0);
SendCommand(0x10);
for(i=0; i<height; i++) {
for(j=0; j< width/2; j++)
for(j=0; j< width/2; j++) {
if(i<image_heigh+ystart && i>=ystart && j<(image_width+xstart)/2 && j>=xstart/2) {
SendData(pgm_read_byte(&image[(j-xstart/2) + (image_width/2*(i-ystart))]));
}
else {
SendData(0x11);
}
else {
SendData(0x11);
}
}
}
SendCommand(0x04);//0x04
EPD_5IN65F_BusyHigh();
@ -237,9 +199,10 @@ void Epd::Clear(UBYTE color) {
SendData(0xC0);
SendCommand(0x10);
for(int i=0; i<width/2; i++) {
for(int j=0; j<height; j++)
for(int j=0; j<height; j++) {
SendData((color<<4)|color);
}
}
}
SendCommand(0x04);//0x04
EPD_5IN65F_BusyHigh();
SendCommand(0x12);//0x12

View file

@ -65,7 +65,6 @@ public:
void EPD_5IN65F_Display(const UBYTE *image);
void EPD_5IN65F_Display_part(const UBYTE *image, UWORD xstart, UWORD ystart,
UWORD image_width, UWORD image_heigh);
void EPD_5IN65F_Show7Block(void);
void SendCommand(unsigned char command);
void SendData(unsigned char data);
void Sleep(void);

View file

@ -42,7 +42,7 @@ void setup() {
Serial.print("draw image\r\n ");
epd.EPD_5IN65F_Display_part(gImage_5in65f, 204, 153, 192, 143);
// epd.EPD_5IN65F_Show7Block();
delay(2000);
}

View file

@ -56,7 +56,7 @@ int EPD_2in13_V2_test(void)
Paint_SetMirroring(MIRROR_HORIZONTAL); //
Paint_Clear(WHITE);
#if 0 // show bmp
#if 1 // show bmp
printf("show window BMP-----------------\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(WHITE);
@ -82,7 +82,7 @@ int EPD_2in13_V2_test(void)
DEV_Delay_ms(2000);
#endif
#if 0 // Drawing on the image
#if 1 // Drawing on the image
printf("Drawing\r\n");
//1.Select Image
Paint_SelectImage(BlackImage);
@ -150,7 +150,7 @@ int EPD_2in13_V2_test(void)
Paint_DrawString_CN(60, 55, "΢ѩµç×Ó", &Font24CN, WHITE, BLACK);
EPD_2IN13_V2_Display(BlackImage);
DEV_Delay_ms(20000);
DEV_Delay_ms(2000);
#endif
#if 1 //Partial refresh, example shows time

View file

@ -0,0 +1,170 @@
/*****************************************************************************
* | File : EPD_2in13_V3_test.c
* | Author : Waveshare team
* | Function : 2.13inch e-paper V3 test demo
* | Info :
*----------------
* | This version: V1.0
* | Date : 2020-12-22
* | 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_2in13_V3.h"
#include <time.h>
int EPD_2in13_V3_test(void)
{
printf("EPD_2in13_V3_test Demo\r\n");
if(DEV_Module_Init()!=0){
return -1;
}
printf("e-Paper Init and Clear...\r\n");
EPD_2in13_V3_Init();
struct timespec start={0,0}, finish={0,0};
clock_gettime(CLOCK_REALTIME,&start);
EPD_2in13_V3_Clear();
clock_gettime(CLOCK_REALTIME,&finish);
printf("%ld S\r\n",finish.tv_sec-start.tv_sec);
//Create a new image cache
UBYTE *BlackImage;
UWORD Imagesize = ((EPD_2in13_V3_WIDTH % 8 == 0)? (EPD_2in13_V3_WIDTH / 8 ): (EPD_2in13_V3_WIDTH / 8 + 1)) * EPD_2in13_V3_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_2in13_V3_WIDTH, EPD_2in13_V3_HEIGHT, 90, WHITE);
Paint_Clear(WHITE);
#if 1 // show bmp
Paint_NewImage(BlackImage, EPD_2in13_V3_WIDTH, EPD_2in13_V3_HEIGHT, 0, WHITE);
printf("show window BMP-----------------\r\n");
Paint_SelectImage(BlackImage);
GUI_ReadBmp("./pic/100x100.bmp", 0, 0);
EPD_2in13_V3_Display(BlackImage);
DEV_Delay_ms(3000);
printf("show bmp------------------------\r\n");
Paint_SelectImage(BlackImage);
GUI_ReadBmp("./pic/2in13-v2.bmp", 0, 0);
EPD_2in13_V3_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
#if 0 //show image for array
printf("show image for array\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(WHITE);
Paint_DrawBitMap(gImage_2in13);
EPD_2in13_V3_Display(BlackImage);
DEV_Delay_ms(2000);
#endif
#if 1 // Drawing on the image
Paint_NewImage(BlackImage, EPD_2in13_V3_WIDTH, EPD_2in13_V3_HEIGHT, 90, WHITE);
printf("Drawing\r\n");
//1.Select Image
Paint_SelectImage(BlackImage);
Paint_Clear(WHITE);
// 2.Drawing on the image
Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT);
Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT);
Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT);
Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT);
Paint_DrawLine(20, 10, 70, 60, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(70, 10, 20, 60, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawRectangle(20, 10, 70, 60, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawRectangle(85, 10, 135, 60, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawLine(45, 15, 45, 55, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawLine(25, 35, 70, 35, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawCircle(45, 35, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawCircle(110, 35, 20, WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawString_EN(140, 15, "waveshare", &Font16, BLACK, WHITE);
Paint_DrawNum(140, 40, 123456789, &Font16, BLACK, WHITE);
Paint_DrawString_CN(140, 60, "你好abc", &Font12CN, BLACK, WHITE);
Paint_DrawString_CN(5, 65, "微雪电子", &Font24CN, WHITE, BLACK);
EPD_2in13_V3_Display_Base(BlackImage);
DEV_Delay_ms(3000);
#endif
#if 1 //Partial refresh, example shows time
Paint_NewImage(BlackImage, EPD_2in13_V3_WIDTH, EPD_2in13_V3_HEIGHT, 90, WHITE);
printf("Partial refresh\r\n");
Paint_SelectImage(BlackImage);
PAINT_TIME sPaint_time;
sPaint_time.Hour = 12;
sPaint_time.Min = 34;
sPaint_time.Sec = 56;
UBYTE num = 10;
for (;;) {
sPaint_time.Sec = sPaint_time.Sec + 1;
if (sPaint_time.Sec == 60) {
sPaint_time.Min = sPaint_time.Min + 1;
sPaint_time.Sec = 0;
if (sPaint_time.Min == 60) {
sPaint_time.Hour = sPaint_time.Hour + 1;
sPaint_time.Min = 0;
if (sPaint_time.Hour == 24) {
sPaint_time.Hour = 0;
sPaint_time.Min = 0;
sPaint_time.Sec = 0;
}
}
}
Paint_ClearWindows(150, 80, 150 + Font20.Width * 7, 80 + Font20.Height, WHITE);
Paint_DrawTime(150, 80, &sPaint_time, &Font20, WHITE, BLACK);
num = num - 1;
if(num == 0) {
break;
}
EPD_2in13_V3_Display_Partial(BlackImage);
DEV_Delay_ms(500);//Analog clock 1s
}
#endif
printf("Clear...\r\n");
EPD_2in13_V3_Init();
EPD_2in13_V3_Clear();
printf("Goto Sleep...\r\n");
EPD_2in13_V3_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

@ -60,9 +60,9 @@ int EPD_4in01f_test(void)
#if 1
printf("show image for array\r\n");
Paint_Clear(EPD_4IN01F_WHITE);
GUI_ReadBmp_RGB_7Color("./pic/4in01f.bmp", 0, 0);
GUI_ReadBmp_RGB_7Color("./pic/4in01-1.bmp", 0, 0);
EPD_4IN01F_Display(BlackImage);
// EPD_4IN01F_Display_part(BlackImage, 0, 0, 600, 260);
// EPD_4IN01F_Display_part(BlackImage, 0, 0, 640, 200);
DEV_Delay_ms(4000);
#endif

View file

@ -31,6 +31,8 @@
#include "EPD_4in2b_V2.h"
#include <time.h>
int EPD_4in2b_V2_test(void)
{
printf("EPD_4IN2B_V2_test Demo\r\n");

View file

@ -1,4 +1,4 @@
/* DEV_Delay_ms(2000);//important, at least 2s/*****************************************************************************
/*****************************************************************************
* | File : EPD_5in65f_test.c
* | Author : Waveshare team
* | Function : 5.65inch F e-paper test demo
@ -47,9 +47,6 @@ int EPD_5in65f_test(void)
printf("%ld S\r\n",finish.tv_sec-start.tv_sec);
DEV_Delay_ms(100);
// EPD_5IN65F_Show7Block();
// DEV_Delay_ms(10000);
UBYTE *BlackImage;
/* you have to edit the startup_stm32fxxx.s file and set a big enough heap size */
UDOUBLE Imagesize = ((EPD_5IN65F_WIDTH % 2 == 0)? (EPD_5IN65F_WIDTH / 2 ): (EPD_5IN65F_WIDTH / 2 + 1)) * EPD_5IN65F_HEIGHT;
@ -69,6 +66,14 @@ int EPD_5in65f_test(void)
DEV_Delay_ms(4000);
#endif
#if 1
printf("show image for array\r\n");
Paint_Clear(EPD_5IN65F_WHITE);
GUI_ReadBmp_RGB_7Color("./pic/5in65f.bmp", 0, 0);
EPD_5IN65F_Display(BlackImage);
DEV_Delay_ms(4000);
#endif
#if 1
Paint_Clear(EPD_5IN65F_WHITE);
printf("Drawing:BlackImage\r\n");

View file

@ -32,8 +32,6 @@
#include <time.h>
int EPD_7in5_HD_test(void)
{
while(1)
{
printf("EPD_7IN5_HD_test Demo\r\n");
if(DEV_Module_Init()!=0){
@ -119,7 +117,7 @@ while(1)
// close 5V
printf("close 5V, Module enters 0 power consumption ...\r\n");
DEV_Module_Exit();
}
return 0;
}

View file

@ -69,6 +69,7 @@ int EPD_7in5_V2_test(void)
printf("show bmp------------------------\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(WHITE);
GUI_ReadBmp("./pic/100x100.bmp", 0, 0);
EPD_7IN5_V2_Display(BlackImage);
DEV_Delay_ms(2000);

View file

@ -60,6 +60,7 @@ int EPD_2in9d_test(void);
int EPD_2in13_test(void);
int EPD_2in13_V2_test(void);
int EPD_2in13_V3_test(void);
int EPD_2in13bc_test(void);
int EPD_2in13b_V3_test(void);
int EPD_2in13d_test(void);

View file

@ -45,6 +45,7 @@ int main(void)
// EPD_2in13_test();
// EPD_2in13_V2_test();
// EPD_2in13_V3_test();
// EPD_2in13bc_test();
// EPD_2in13b_V3_test();
// EPD_2in13d_test();

View file

@ -0,0 +1,259 @@
/*****************************************************************************
* | File : EPD_2in13_V3.c
* | Author : Waveshare team
* | Function : 2.13inch e-paper V3
* | Info :
*----------------
* | This version: V1.0
* | Date : 2020-12-22
* | 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_2in13_V3.h"
#include "Debug.h"
/******************************************************************************
function : Software reset
parameter:
******************************************************************************/
static void EPD_2in13_V3_Reset(void)
{
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(100);
DEV_Digital_Write(EPD_RST_PIN, 0);
DEV_Delay_ms(2);
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(100);
}
/******************************************************************************
function : send command
parameter:
Reg : Command register
******************************************************************************/
static void EPD_2in13_V3_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_2in13_V3_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 LOW
parameter:
******************************************************************************/
void EPD_2in13_V3_ReadBusy(void)
{
Debug("e-Paper busy\r\n");
while(1)
{ //=1 BUSY
if(DEV_Digital_Read(EPD_BUSY_PIN)==0)
break;
DEV_Delay_ms(50);
}
DEV_Delay_ms(50);
Debug("e-Paper busy release\r\n");
}
/******************************************************************************
function : Turn On Display
parameter:
******************************************************************************/
static void EPD_2in13_V3_TurnOnDisplay(void)
{
EPD_2in13_V3_SendCommand(0x22); //Display Update Control
EPD_2in13_V3_SendData(0xF7);
EPD_2in13_V3_SendCommand(0x20); //Activate Display Update Sequence
EPD_2in13_V3_ReadBusy();
}
static void EPD_2in13_V3_TurnOnDisplay_Partial(void)
{
EPD_2in13_V3_SendCommand(0x22); //Display Update Control
EPD_2in13_V3_SendData(0xFF);
EPD_2in13_V3_SendCommand(0x20); //Activate Display Update Sequence
EPD_2in13_V3_ReadBusy();
}
/******************************************************************************
function : Setting the display window
parameter:
******************************************************************************/
static void EPD_2in13_V3_SetWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend)
{
EPD_2in13_V3_SendCommand(0x44); // SET_RAM_X_ADDRESS_START_END_POSITION
EPD_2in13_V3_SendData((Xstart>>3) & 0xFF);
EPD_2in13_V3_SendData((Xend>>3) & 0xFF);
EPD_2in13_V3_SendCommand(0x45); // SET_RAM_Y_ADDRESS_START_END_POSITION
EPD_2in13_V3_SendData(Ystart & 0xFF);
EPD_2in13_V3_SendData((Ystart >> 8) & 0xFF);
EPD_2in13_V3_SendData(Yend & 0xFF);
EPD_2in13_V3_SendData((Yend >> 8) & 0xFF);
}
/******************************************************************************
function : Set Cursor
parameter:
******************************************************************************/
static void EPD_2in13_V3_SetCursor(UWORD Xstart, UWORD Ystart)
{
EPD_2in13_V3_SendCommand(0x4E); // SET_RAM_X_ADDRESS_COUNTER
EPD_2in13_V3_SendData(Xstart & 0xFF);
EPD_2in13_V3_SendCommand(0x4F); // SET_RAM_Y_ADDRESS_COUNTER
EPD_2in13_V3_SendData(Ystart & 0xFF);
EPD_2in13_V3_SendData((Ystart >> 8) & 0xFF);
}
/******************************************************************************
function : Initialize the e-Paper register
parameter:
******************************************************************************/
void EPD_2in13_V3_Init(void)
{
EPD_2in13_V3_Reset();
DEV_Delay_ms(100);
EPD_2in13_V3_ReadBusy();
EPD_2in13_V3_SendCommand(0x12); //SWRESET
EPD_2in13_V3_ReadBusy();
EPD_2in13_V3_SendCommand(0x01); //Driver output control
EPD_2in13_V3_SendData(0x27);
EPD_2in13_V3_SendData(0x01);
EPD_2in13_V3_SendData(0x00);
EPD_2in13_V3_SendCommand(0x11); //data entry mode
EPD_2in13_V3_SendData(0x03);
EPD_2in13_V3_SetWindows(0, 0, EPD_2in13_V3_WIDTH-1, EPD_2in13_V3_HEIGHT-1);
EPD_2in13_V3_SendCommand(0x3C); //BorderWavefrom
EPD_2in13_V3_SendData(0x05);
EPD_2in13_V3_SendCommand(0x21); // Display update control
EPD_2in13_V3_SendData(0x00);
EPD_2in13_V3_SendData(0x80);
EPD_2in13_V3_SendCommand(0x18); //Read built-in temperature sensor
EPD_2in13_V3_SendData(0x80);
EPD_2in13_V3_SetCursor(0, 0);
EPD_2in13_V3_ReadBusy();
}
/******************************************************************************
function : Clear screen
parameter:
******************************************************************************/
void EPD_2in13_V3_Clear(void)
{
UWORD i;
EPD_2in13_V3_SendCommand(0x24); //write RAM for black(0)/white (1)
for(i=0;i<4736;i++)
{
EPD_2in13_V3_SendData(0xff);
}
EPD_2in13_V3_TurnOnDisplay();
}
/******************************************************************************
function : Sends the image buffer in RAM to e-Paper and displays
parameter:
******************************************************************************/
void EPD_2in13_V3_Display(UBYTE *Image)
{
UWORD i;
EPD_2in13_V3_SendCommand(0x24); //write RAM for black(0)/white (1)
for(i=0;i<4736;i++)
{
EPD_2in13_V3_SendData(Image[i]);
}
EPD_2in13_V3_TurnOnDisplay();
}
void EPD_2in13_V3_Display_Base(UBYTE *Image)
{
UWORD i;
EPD_2in13_V3_SendCommand(0x24); //Write Black and White image to RAM
for(i=0;i<4736;i++)
{
EPD_2in13_V3_SendData(Image[i]);
}
EPD_2in13_V3_SendCommand(0x26); //Write Black and White image to RAM
for(i=0;i<4736;i++)
{
EPD_2in13_V3_SendData(Image[i]);
}
EPD_2in13_V3_TurnOnDisplay();
}
void EPD_2in13_V3_Display_Partial(UBYTE *Image)
{
UWORD i;
//Reset
DEV_Digital_Write(EPD_RST_PIN, 0);
DEV_Delay_ms(5);
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(10);
EPD_2in13_V3_SendCommand(0x3C); //BorderWavefrom
EPD_2in13_V3_SendData(0x80);
EPD_2in13_V3_SetWindows(0, 0, EPD_2in13_V3_WIDTH-1, EPD_2in13_V3_HEIGHT-1);
EPD_2in13_V3_SetCursor(0, 0);
EPD_2in13_V3_SendCommand(0x24); //Write Black and White image to RAM
for(i=0;i<4736;i++)
{
EPD_2in13_V3_SendData(Image[i]);
}
EPD_2in13_V3_TurnOnDisplay_Partial();
}
/******************************************************************************
function : Enter sleep mode
parameter:
******************************************************************************/
void EPD_2in13_V3_Sleep(void)
{
EPD_2in13_V3_SendCommand(0x10); //enter deep sleep
EPD_2in13_V3_SendData(0x01);
DEV_Delay_ms(100);
}

View file

@ -0,0 +1,47 @@
/*****************************************************************************
* | File : EPD_2Iin13_V3.h
* | Author : Waveshare team
* | Function : 2.13inch e-paper V3
* | Info :
*----------------
* | This version: V1.0
* | Date : 2020-12-22
* | 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.
#
******************************************************************************/
#ifndef __EPD_2in13_V3_H_
#define __EPD_2in13_V3_H_
#include "DEV_Config.h"
// Display resolution
#define EPD_2in13_V3_WIDTH 122
#define EPD_2in13_V3_HEIGHT 250
void EPD_2in13_V3_Init(void);
void EPD_2in13_V3_Clear(void);
void EPD_2in13_V3_Display(UBYTE *Image);
void EPD_2in13_V3_Display_Base(UBYTE *Image);
void EPD_2in13_V3_Display_Partial(UBYTE *Image);
void EPD_2in13_V3_Sleep(void);
#endif

View file

@ -548,30 +548,30 @@ notes:
******************************************************************************/
void EPD_3IN7_1Gray_Display_Part(const UBYTE *Image, UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend)
{
UWORD i, Width;
Width = (Xend-Xstart)%8 == 0 ? (Xend-Xstart)/8 : (Xend-Xstart)/8+1;
UWORD IMAGE_COUNTER = Width * (Yend-Ystart);
UWORD i, Width;
Width = (Xend-Xstart)%8 == 0 ? (Xend-Xstart)/8 : (Xend-Xstart)/8+1;
UWORD IMAGE_COUNTER = Width * (Yend-Ystart);
EPD_3IN7_SendCommand(0x44);
EPD_3IN7_SendData(Xstart & 0xff);
EPD_3IN7_SendData((Xstart>>8) & 0x03);
EPD_3IN7_SendData(Xend & 0xff);
EPD_3IN7_SendData((Xend>>8) & 0x03);
EPD_3IN7_SendCommand(0x45);
EPD_3IN7_SendData(Ystart & 0xff);
EPD_3IN7_SendData((Ystart>>8) & 0x03);
EPD_3IN7_SendData(Yend & 0xff);
EPD_3IN7_SendData((Yend>>8) & 0x03);
EPD_3IN7_SendCommand(0x44);
EPD_3IN7_SendData(Xstart & 0xff);
EPD_3IN7_SendData((Xstart>>8) & 0x03);
EPD_3IN7_SendData(Xend & 0xff);
EPD_3IN7_SendData((Xend>>8) & 0x03);
EPD_3IN7_SendCommand(0x45);
EPD_3IN7_SendData(Ystart & 0xff);
EPD_3IN7_SendData((Ystart>>8) & 0x03);
EPD_3IN7_SendData(Yend & 0xff);
EPD_3IN7_SendData((Yend>>8) & 0x03);
EPD_3IN7_SendCommand(0x24);
for (i = 0; i < IMAGE_COUNTER; i++)
{
EPD_3IN7_SendData(Image[i]);
}
EPD_3IN7_SendCommand(0x24);
for (i = 0; i < IMAGE_COUNTER; i++)
{
EPD_3IN7_SendData(Image[i]);
}
EPD_3IN7_Load_LUT(2);
EPD_3IN7_SendCommand(0x20);
EPD_3IN7_ReadBusy_HIGH();
EPD_3IN7_Load_LUT(2);
EPD_3IN7_SendCommand(0x20);
EPD_3IN7_ReadBusy_HIGH();
}
/******************************************************************************

View file

@ -195,7 +195,7 @@ function:
void EPD_4IN01F_Display(const UBYTE *image)
{
unsigned long i, j;
// UBYTE k = 0;
UBYTE k = 0;
EPD_4IN01F_SendCommand(0x61);//Set Resolution setting
EPD_4IN01F_SendData(0x02);
EPD_4IN01F_SendData(0x80);
@ -205,12 +205,12 @@ void EPD_4IN01F_Display(const UBYTE *image)
for(i=0; i<EPD_4IN01F_HEIGHT; i++) {
for(j=0; j<EPD_4IN01F_WIDTH/2; j++) {
EPD_4IN01F_SendData(image[j+((EPD_4IN01F_WIDTH/2)*i)]);
// printf("0x%x, ", image[j+((EPD_4IN01F_WIDTH/2)*i)]);
// k++;
// if(k == 16) {
// printf("\n");
// k = 0;
// }
printf("0x%x, ", image[j+((EPD_4IN01F_WIDTH/2)*i)]);
k++;
if(k == 16) {
printf("\n");
k = 0;
}
}
}
EPD_4IN01F_SendCommand(0x04);//0x04

View file

@ -150,45 +150,6 @@ void EPD_5IN65F_Clear(UBYTE color)
DEV_Delay_ms(500);
}
/******************************************************************************
function:
show 7 kind of color block
******************************************************************************/
void EPD_5IN65F_Show7Block(void)
{
unsigned long i,j,k;
unsigned char const Color_seven[8] =
{EPD_5IN65F_BLACK,EPD_5IN65F_BLUE,EPD_5IN65F_GREEN,EPD_5IN65F_ORANGE,
EPD_5IN65F_RED,EPD_5IN65F_YELLOW,EPD_5IN65F_WHITE,EPD_5IN65F_WHITE};
EPD_5IN65F_SendCommand(0x61);//Set Resolution setting
EPD_5IN65F_SendData(0x02);
EPD_5IN65F_SendData(0x58);
EPD_5IN65F_SendData(0x01);
EPD_5IN65F_SendData(0xC0);
EPD_5IN65F_SendCommand(0x10);
for(i=0; i<224; i++) {
for(k = 0 ; k < 4; k ++) {
for(j = 0 ; j < 75; j ++) {
EPD_5IN65F_SendData((Color_seven[k]<<4) |Color_seven[k]);
}
}
}
for(i=0; i<224; i++) {
for(k = 4 ; k < 8; k ++) {
for(j = 0 ; j < 75; j ++) {
EPD_5IN65F_SendData((Color_seven[k]<<4) |Color_seven[k]);
}
}
}
EPD_5IN65F_SendCommand(0x04);//0x04
EPD_5IN65F_BusyHigh();
EPD_5IN65F_SendCommand(0x12);//0x12
EPD_5IN65F_BusyHigh();
EPD_5IN65F_SendCommand(0x02); //0x02
EPD_5IN65F_BusyLow();
DEV_Delay_ms(200);
}
/******************************************************************************
function:
refresh display
@ -236,19 +197,19 @@ void EPD_5IN65F_Display_part(const UBYTE *image, UWORD xstart, UWORD ystart,
EPD_5IN65F_SendCommand(0x10);
for(i=0; i<EPD_5IN65F_HEIGHT; i++) {
for(j=0; j< EPD_5IN65F_WIDTH/2; j++) {
if(i<image_heigh+ystart && i>=ystart && j<(image_width+xstart)/2 && j>=xstart/2) {
EPD_5IN65F_SendData(image[(j-xstart/2) + (image_width/2*(i-ystart))]);
// printf("0x%x, ", image[j+((EPD_5IN65F_WIDTH/2)*i)]);
// k++;
// if(k == 16) {
// printf("\r\n");
// k = 0;
// }
}
else {
EPD_5IN65F_SendData(0x11);
}
}
if(i<image_heigh+ystart && i>=ystart && j<(image_width+xstart)/2 && j>=xstart/2) {
EPD_5IN65F_SendData(image[(j-xstart/2) + (image_width/2*(i-ystart))]);
// printf("0x%x, ", image[j+((EPD_5IN65F_WIDTH/2)*i)]);
// k++;
// if(k == 16) {
// printf("\r\n");
// k = 0;
// }
}
else {
EPD_5IN65F_SendData(0x11);
}
}
}
EPD_5IN65F_SendCommand(0x04);//0x04
EPD_5IN65F_BusyHigh();

View file

@ -51,7 +51,6 @@ Color Index
void EPD_5IN65F_Clear(UBYTE color);
void EPD_5IN65F_Sleep(void);
void EPD_Init(void);
void EPD_5IN65F_Show7Block(void);
void EPD_5IN65F_Display(const UBYTE *image);
void EPD_5IN65F_Init(void);
void EPD_5IN65F_Display_part(const UBYTE *image, UWORD xstart, UWORD ystart,

View file

@ -80,11 +80,10 @@ static void EPD_5in83_V2_ReadBusy(void)
Debug("e-Paper busy\r\n");
do {
EPD_5in83_V2_SendCommand(0x71);
DEV_Delay_ms(50);
DEV_Delay_ms(10);
}
while(!DEV_Digital_Read(EPD_BUSY_PIN));
Debug("e-Paper busy release\r\n");
DEV_Delay_ms(50);
}
/******************************************************************************

View file

@ -126,12 +126,6 @@ UBYTE EPD_7IN5_V2_Init(void)
EPD_SendData(0x01); //gate 480
EPD_SendData(0xE0);
// EPD_SendCommand(0x06);
// EPD_SendData(0xff);
// EPD_SendData(0xff);
// EPD_SendData(0xff);
// EPD_SendData(0xff);
EPD_SendCommand(0X15);
EPD_SendData(0x00);

View file

@ -19,82 +19,82 @@ try:
logging.info("epd2in7b_V2 Demo")
epd = epd2in7b_V2.EPD()
while(1) :
logging.info("init and Clear")
epd.init()
epd.Clear()
time.sleep(1)
logging.info("init and Clear")
epd.init()
epd.Clear()
time.sleep(1)
# Drawing on the image
logging.info("Drawing")
blackimage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame
redimage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame
# Drawing on the image
logging.info("Drawing")
blackimage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame
redimage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame
font24 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 24)
font18 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 18)
font24 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 24)
font18 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 18)
# Drawing on the Horizontal image
logging.info("1.Drawing on the Horizontal image...")
HBlackimage = Image.new('1', (epd.height, epd.width), 255) # 298*126
HRedimage = Image.new('1', (epd.height, epd.width), 255) # 298*126
drawblack = ImageDraw.Draw(HBlackimage)
drawred = ImageDraw.Draw(HRedimage)
drawblack.text((10, 0), 'hello world', font = font24, fill = 0)
drawblack.text((10, 20), '2.7inch e-Paper', font = font24, fill = 0)
drawblack.text((150, 0), u'微雪电子', font = font24, fill = 0)
drawblack.line((20, 50, 70, 100), fill = 0)
drawblack.line((70, 50, 20, 100), fill = 0)
drawblack.rectangle((20, 50, 70, 100), outline = 0)
drawred.line((165, 50, 165, 100), fill = 0)
drawred.line((140, 75, 190, 75), fill = 0)
drawred.arc((140, 50, 190, 100), 0, 360, fill = 0)
drawred.rectangle((80, 50, 130, 100), fill = 0)
drawred.chord((200, 50, 250, 100), 0, 360, fill = 0)
epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRedimage))
time.sleep(20)
# Drawing on the Horizontal image
logging.info("1.Drawing on the Horizontal image...")
HBlackimage = Image.new('1', (epd.height, epd.width), 255) # 298*126
HRedimage = Image.new('1', (epd.height, epd.width), 255) # 298*126
drawblack = ImageDraw.Draw(HBlackimage)
drawred = ImageDraw.Draw(HRedimage)
drawblack.text((10, 0), 'hello world', font = font24, fill = 0)
drawblack.text((10, 20), '2.7inch e-Paper', font = font24, fill = 0)
drawblack.text((150, 0), u'微雪电子', font = font24, fill = 0)
drawblack.line((20, 50, 70, 100), fill = 0)
drawblack.line((70, 50, 20, 100), fill = 0)
drawblack.rectangle((20, 50, 70, 100), outline = 0)
drawred.line((165, 50, 165, 100), fill = 0)
drawred.line((140, 75, 190, 75), fill = 0)
drawred.arc((140, 50, 190, 100), 0, 360, fill = 0)
drawred.rectangle((80, 50, 130, 100), fill = 0)
drawred.chord((200, 50, 250, 100), 0, 360, fill = 0)
epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRedimage))
time.sleep(20)
# Drawing on the Vertical image
logging.info("2.Drawing on the Vertical image...")
LBlackimage = Image.new('1', (epd.width, epd.height), 255) # 126*298
LRedimage = Image.new('1', (epd.width, epd.height), 255) # 126*298
drawblack = ImageDraw.Draw(LBlackimage)
drawred = ImageDraw.Draw(LRedimage)
# Drawing on the Vertical image
logging.info("2.Drawing on the Vertical image...")
LBlackimage = Image.new('1', (epd.width, epd.height), 255) # 126*298
LRedimage = Image.new('1', (epd.width, epd.height), 255) # 126*298
drawblack = ImageDraw.Draw(LBlackimage)
drawred = ImageDraw.Draw(LRedimage)
drawblack.text((2, 0), 'hello world', font = font18, fill = 0)
drawblack.text((2, 20), '2.9inch epd', font = font18, fill = 0)
drawblack.text((20, 50), u'微雪电子', font = font18, fill = 0)
drawblack.line((10, 90, 60, 140), fill = 0)
drawblack.line((60, 90, 10, 140), fill = 0)
drawblack.rectangle((10, 90, 60, 140), outline = 0)
drawred.line((95, 90, 95, 140), fill = 0)
drawred.line((70, 115, 120, 115), fill = 0)
drawred.arc((70, 90, 120, 140), 0, 360, fill = 0)
drawred.rectangle((10, 150, 60, 200), fill = 0)
drawred.chord((70, 150, 120, 200), 0, 360, fill = 0)
epd.display(epd.getbuffer(LBlackimage), epd.getbuffer(LRedimage))
time.sleep(2)
drawblack.text((2, 0), 'hello world', font = font18, fill = 0)
drawblack.text((2, 20), '2.9inch epd', font = font18, fill = 0)
drawblack.text((20, 50), u'微雪电子', font = font18, fill = 0)
drawblack.line((10, 90, 60, 140), fill = 0)
drawblack.line((60, 90, 10, 140), fill = 0)
drawblack.rectangle((10, 90, 60, 140), outline = 0)
drawred.line((95, 90, 95, 140), fill = 0)
drawred.line((70, 115, 120, 115), fill = 0)
drawred.arc((70, 90, 120, 140), 0, 360, fill = 0)
drawred.rectangle((10, 150, 60, 200), fill = 0)
drawred.chord((70, 150, 120, 200), 0, 360, fill = 0)
epd.display(epd.getbuffer(LBlackimage), epd.getbuffer(LRedimage))
time.sleep(2)
logging.info("3.read bmp file")
HBlackimage = Image.open(os.path.join(picdir, '2in7b-b.bmp'))
HRedimage = Image.open(os.path.join(picdir, '2in7b-r.bmp'))
epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRedimage))
time.sleep(2)
logging.info("3.read bmp file")
HBlackimage = Image.open(os.path.join(picdir, '2in7b-b.bmp'))
HRedimage = Image.open(os.path.join(picdir, '2in7b-r.bmp'))
epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRedimage))
time.sleep(2)
logging.info("4.read bmp file on window")
blackimage1 = Image.new('1', (epd.height, epd.width), 255) # 298*126
redimage1 = Image.new('1', (epd.height, epd.width), 255) # 298*126
newimage = Image.open(os.path.join(picdir, '100x100.bmp'))
blackimage1.paste(newimage, (50,10))
epd.display(epd.getbuffer(blackimage1), epd.getbuffer(redimage1))
logging.info("4.read bmp file on window")
blackimage1 = Image.new('1', (epd.height, epd.width), 255) # 298*126
redimage1 = Image.new('1', (epd.height, epd.width), 255) # 298*126
newimage = Image.open(os.path.join(picdir, '100x100.bmp'))
blackimage1.paste(newimage, (50,10))
epd.display(epd.getbuffer(blackimage1), epd.getbuffer(redimage1))
logging.info("Clear...")
epd.init()
epd.Clear()
logging.info("Clear...")
epd.init()
epd.Clear()
logging.info("Goto Sleep...")
epd.sleep()
logging.info("Goto Sleep...")
epd.sleep()
time.sleep(3)
time.sleep(30)
epd.Dev_exit()
except IOError as e:

View file

@ -96,7 +96,7 @@ try:
epd.display_1Gray(epd.getbuffer(time_image))
num = num + 1
if(num == 10):
if(num == 20):
break
logging.info("Clear...")

View file

@ -72,7 +72,7 @@ try:
time.sleep(3)
logging.info("3.read bmp file")
Himage = Image.open(os.path.join(picdir, 'N-Color1.bmp'))
Himage = Image.open(os.path.join(picdir, '5in65f.bmp'))
epd.display(epd.getbuffer(Himage))
time.sleep(3)

View file

@ -21,7 +21,7 @@ try:
epd = epd5in83_V2.EPD()
logging.info("init and Clear")
epd.init()
epd.Clear()
# epd.Clear()
font24 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 24)
font18 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 18)

View file

@ -134,7 +134,7 @@ class EPD:
def ReadBusy(self):
logging.debug("e-Paper busy")
while(epdconfig.digital_read(self.busy_pin) == 1): # 0: idle, 1: busy
epdconfig.delay_ms(200)
epdconfig.delay_ms(10)
logging.debug("e-Paper busy release")
@ -401,7 +401,7 @@ class EPD:
for i in range(0, int(self.width / 8)):
self.send_data(image[i + j * int(self.width / 8)])
self.load_lut(self.lut_1Gray_DU)
self.load_lut(self.lut_1Gray_A2)
self.send_command(0x20)
self.ReadBusy()

File diff suppressed because one or more lines are too long

View file

@ -827,6 +827,18 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\Examples\EPD_4in01f_test.c</PathWithFileName>
<FilenameWithoutPath>EPD_4in01f_test.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>47</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\Examples\EPD_4in2_test.c</PathWithFileName>
<FilenameWithoutPath>EPD_4in2_test.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
@ -834,7 +846,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>47</FileNumber>
<FileNumber>48</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -846,7 +858,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>48</FileNumber>
<FileNumber>49</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -858,7 +870,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>49</FileNumber>
<FileNumber>50</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -870,7 +882,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>50</FileNumber>
<FileNumber>51</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -882,7 +894,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>51</FileNumber>
<FileNumber>52</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -894,7 +906,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>52</FileNumber>
<FileNumber>53</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -906,7 +918,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>53</FileNumber>
<FileNumber>54</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -918,7 +930,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>54</FileNumber>
<FileNumber>55</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -930,7 +942,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>55</FileNumber>
<FileNumber>56</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -942,7 +954,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>56</FileNumber>
<FileNumber>57</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -954,7 +966,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>57</FileNumber>
<FileNumber>58</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -966,7 +978,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>58</FileNumber>
<FileNumber>59</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -978,7 +990,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>59</FileNumber>
<FileNumber>60</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -998,7 +1010,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>60</FileNumber>
<FileNumber>61</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1010,7 +1022,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>61</FileNumber>
<FileNumber>62</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1022,7 +1034,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>62</FileNumber>
<FileNumber>63</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1034,7 +1046,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>63</FileNumber>
<FileNumber>64</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1046,7 +1058,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>64</FileNumber>
<FileNumber>65</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1058,7 +1070,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>65</FileNumber>
<FileNumber>66</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1070,7 +1082,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>66</FileNumber>
<FileNumber>67</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1082,7 +1094,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>67</FileNumber>
<FileNumber>68</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1094,7 +1106,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>68</FileNumber>
<FileNumber>69</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1106,7 +1118,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>69</FileNumber>
<FileNumber>70</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1118,7 +1130,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>70</FileNumber>
<FileNumber>71</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1130,7 +1142,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>71</FileNumber>
<FileNumber>72</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1142,7 +1154,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>72</FileNumber>
<FileNumber>73</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1154,7 +1166,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>73</FileNumber>
<FileNumber>74</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1166,7 +1178,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>74</FileNumber>
<FileNumber>75</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1178,7 +1190,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>75</FileNumber>
<FileNumber>76</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1190,7 +1202,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>76</FileNumber>
<FileNumber>77</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1202,7 +1214,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>77</FileNumber>
<FileNumber>78</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1214,7 +1226,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>78</FileNumber>
<FileNumber>79</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1226,7 +1238,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>79</FileNumber>
<FileNumber>80</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1238,7 +1250,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>80</FileNumber>
<FileNumber>81</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1250,7 +1262,19 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>81</FileNumber>
<FileNumber>82</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\e-Paper\EPD_4in01f.c</PathWithFileName>
<FilenameWithoutPath>EPD_4in01f.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>83</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1262,7 +1286,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>82</FileNumber>
<FileNumber>84</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1274,7 +1298,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>83</FileNumber>
<FileNumber>85</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1286,7 +1310,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>84</FileNumber>
<FileNumber>86</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1298,7 +1322,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>85</FileNumber>
<FileNumber>87</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1310,7 +1334,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>86</FileNumber>
<FileNumber>88</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1322,7 +1346,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>87</FileNumber>
<FileNumber>89</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1334,7 +1358,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>88</FileNumber>
<FileNumber>90</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1346,7 +1370,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>89</FileNumber>
<FileNumber>91</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1358,7 +1382,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>90</FileNumber>
<FileNumber>92</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1370,7 +1394,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>91</FileNumber>
<FileNumber>93</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1382,7 +1406,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>92</FileNumber>
<FileNumber>94</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1394,7 +1418,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>93</FileNumber>
<FileNumber>95</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1406,7 +1430,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>94</FileNumber>
<FileNumber>96</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1426,7 +1450,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>95</FileNumber>
<FileNumber>97</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1446,7 +1470,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>96</FileNumber>
<FileNumber>98</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1466,7 +1490,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>97</FileNumber>
<FileNumber>99</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1478,7 +1502,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>98</FileNumber>
<FileNumber>100</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1490,7 +1514,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>99</FileNumber>
<FileNumber>101</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1502,7 +1526,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>100</FileNumber>
<FileNumber>102</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1514,7 +1538,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>101</FileNumber>
<FileNumber>103</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1526,7 +1550,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>102</FileNumber>
<FileNumber>104</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1538,7 +1562,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>103</FileNumber>
<FileNumber>105</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1558,7 +1582,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>104</FileNumber>
<FileNumber>106</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1570,7 +1594,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>105</FileNumber>
<FileNumber>107</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

View file

@ -627,6 +627,11 @@
<FileType>1</FileType>
<FilePath>..\User\Examples\EPD_3in7_test.c</FilePath>
</File>
<File>
<FileName>EPD_4in01f_test.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\Examples\EPD_4in01f_test.c</FilePath>
</File>
<File>
<FileName>EPD_4in2_test.c</FileName>
<FileType>1</FileType>
@ -807,6 +812,11 @@
<FileType>1</FileType>
<FilePath>..\User\e-Paper\EPD_3in7.c</FilePath>
</File>
<File>
<FileName>EPD_4in01f.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\e-Paper\EPD_4in01f.c</FilePath>
</File>
<File>
<FileName>EPD_4in2.c</FileName>
<FileType>1</FileType>

View file

@ -22,14 +22,14 @@ Dialog DLL: TCM.DLL V1.36.1.0
<h2>Project:</h2>
E:\project\E-Paper_code\STM32\STM32-F103ZET6\MDK-ARM\epd-demo.uvprojx
Project File Date: 12/09/2020
Project File Date: 12/25/2020
<h2>Output:</h2>
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Program Files\keil5\ARM\ARMCC\Bin'
Build target 'epd-demo'
assembling startup_stm32f103xe.s...
compiling main.c...
linking...
Program Size: Code=21540 RO-data=49640 RW-data=68 ZI-data=45236
Program Size: Code=11536 RO-data=360 RW-data=20 ZI-data=4252
FromELF: creating hex file...
"epd-demo\epd-demo.axf" - 0 Error(s), 0 Warning(s).
@ -54,7 +54,7 @@ Package Vendor: Keil
<h2>Collection of Component Files used:</h2>
* Component: ARM::CMSIS:CORE:5.2.0
Build Time Elapsed: 00:00:02
Build Time Elapsed: 00:00:03
</pre>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -16,7 +16,6 @@ Section Cross References
main.o(.text) refers to gpio.o(.text) for MX_GPIO_Init
main.o(.text) refers to usart.o(.text) for MX_USART1_UART_Init
main.o(.text) refers to spi.o(.text) for MX_SPI1_Init
main.o(.text) refers to epd_5in83_v2_test.o(.text) for EPD_5in83_V2_test
gpio.o(.text) refers to stm32f1xx_hal_gpio.o(.text) for HAL_GPIO_WritePin
spi.o(.text) refers to stm32f1xx_hal_spi_ex.o(.text) for HAL_SPI_Init
spi.o(.text) refers to main.o(.text) for _Error_Handler
@ -318,6 +317,18 @@ Section Cross References
epd_3in7_test.o(.text) refers to font12.o(.data) for Font12
epd_3in7_test.o(.text) refers to font24.o(.data) for Font24
epd_3in7_test.o(.text) refers to font20.o(.data) for Font20
epd_4in01f_test.o(.text) refers to printf3.o(i.__0printf$3) for __2printf
epd_4in01f_test.o(.text) refers to dev_config.o(.text) for DEV_Module_Init
epd_4in01f_test.o(.text) refers to epd_4in01f.o(.text) for EPD_4IN01F_Init
epd_4in01f_test.o(.text) refers to stm32f1xx_hal.o(.text) for HAL_Delay
epd_4in01f_test.o(.text) refers to malloc.o(i.malloc) for malloc
epd_4in01f_test.o(.text) refers to gui_paint.o(.text) for Paint_NewImage
epd_4in01f_test.o(.text) refers to malloc.o(i.free) for free
epd_4in01f_test.o(.text) refers to imagedata.o(.constdata) for gImage_4in01
epd_4in01f_test.o(.text) refers to font16.o(.data) for Font16
epd_4in01f_test.o(.text) refers to font12.o(.data) for Font12
epd_4in01f_test.o(.text) refers to font12cn.o(.data) for Font12CN
epd_4in01f_test.o(.text) refers to font24cn.o(.data) for Font24CN
epd_4in2_test.o(.text) refers to printf3.o(i.__0printf$3) for __2printf
epd_4in2_test.o(.text) refers to dev_config.o(.text) for DEV_Module_Init
epd_4in2_test.o(.text) refers to epd_4in2.o(.text) for EPD_4IN2_Init
@ -535,11 +546,10 @@ Section Cross References
epd_2in9.o(.text) refers to stm32f1xx_hal_gpio.o(.text) for HAL_GPIO_ReadPin
epd_2in9.o(.text) refers to dev_config.o(.text) for DEV_SPI_WriteByte
epd_2in9.o(.text) refers to epd_2in9.o(.constdata) for .constdata
epd_2in9_v2.o(.text) refers to stm32f1xx_hal_gpio.o(.text) for HAL_GPIO_WritePin
epd_2in9_v2.o(.text) refers to stm32f1xx_hal.o(.text) for HAL_Delay
epd_2in9_v2.o(.text) refers to printf3.o(i.__0printf$3) for __2printf
epd_2in9_v2.o(.text) refers to stm32f1xx_hal_gpio.o(.text) for HAL_GPIO_ReadPin
epd_2in9_v2.o(.text) refers to stm32f1xx_hal.o(.text) for HAL_Delay
epd_2in9_v2.o(.text) refers to dev_config.o(.text) for DEV_SPI_WriteByte
epd_2in9_v2.o(.text) refers to epd_2in9_v2.o(.data) for .data
epd_2in9bc.o(.text) refers to printf3.o(i.__0printf$3) for __2printf
epd_2in9bc.o(.text) refers to stm32f1xx_hal.o(.text) for HAL_Delay
epd_2in9bc.o(.text) refers to stm32f1xx_hal_gpio.o(.text) for HAL_GPIO_ReadPin
@ -590,6 +600,9 @@ Section Cross References
epd_3in7.o(.text) refers to printf3.o(i.__0printf$3) for __2printf
epd_3in7.o(.text) refers to epd_3in7.o(.constdata) for .constdata
epd_3in7.o(.text) refers to dev_config.o(.text) for DEV_SPI_WriteByte
epd_4in01f.o(.text) refers to stm32f1xx_hal_gpio.o(.text) for HAL_GPIO_WritePin
epd_4in01f.o(.text) refers to stm32f1xx_hal.o(.text) for HAL_Delay
epd_4in01f.o(.text) refers to dev_config.o(.text) for DEV_SPI_WriteByte
epd_4in2.o(.text) refers to stm32f1xx_hal_gpio.o(.text) for HAL_GPIO_WritePin
epd_4in2.o(.text) refers to stm32f1xx_hal.o(.text) for HAL_Delay
epd_4in2.o(.text) refers to printf3.o(i.__0printf$3) for __2printf
@ -960,6 +973,7 @@ Section Cross References
Removing Unused input sections from the image.
Removing startup_stm32f103xe.o(HEAP), (40960 bytes).
Removing main.o(.rev16_text), (4 bytes).
Removing main.o(.revsh_text), (4 bytes).
Removing main.o(.rrx_text), (6 bytes).
@ -985,6 +999,7 @@ Removing Unused input sections from the image.
Removing stm32f1xx_hal_spi.o(.rev16_text), (4 bytes).
Removing stm32f1xx_hal_spi.o(.revsh_text), (4 bytes).
Removing stm32f1xx_hal_spi.o(.rrx_text), (6 bytes).
Removing stm32f1xx_hal_spi.o(.text), (4612 bytes).
Removing stm32f1xx_hal_spi_ex.o(.rev16_text), (4 bytes).
Removing stm32f1xx_hal_spi_ex.o(.revsh_text), (4 bytes).
Removing stm32f1xx_hal_spi_ex.o(.rrx_text), (6 bytes).
@ -1057,12 +1072,14 @@ Removing Unused input sections from the image.
Removing imagedata.o(.constdata), (5630 bytes).
Removing imagedata.o(.constdata), (5630 bytes).
Removing imagedata.o(.constdata), (33606 bytes).
Removing imagedata.o(.constdata), (128000 bytes).
Removing imagedata.o(.constdata), (15000 bytes).
Removing imagedata.o(.constdata), (30000 bytes).
Removing imagedata.o(.constdata), (15000 bytes).
Removing imagedata.o(.constdata), (15000 bytes).
Removing imagedata.o(.constdata), (13728 bytes).
Removing imagedata.o(.constdata), (33600 bytes).
Removing imagedata.o(.constdata), (38886 bytes).
Removing imagedata.o(.constdata), (33600 bytes).
Removing imagedata.o(.constdata), (33600 bytes).
Removing imagedata.o(.constdata), (38886 bytes).
@ -1157,6 +1174,10 @@ Removing Unused input sections from the image.
Removing epd_3in7_test.o(.revsh_text), (4 bytes).
Removing epd_3in7_test.o(.rrx_text), (6 bytes).
Removing epd_3in7_test.o(.text), (1280 bytes).
Removing epd_4in01f_test.o(.rev16_text), (4 bytes).
Removing epd_4in01f_test.o(.revsh_text), (4 bytes).
Removing epd_4in01f_test.o(.rrx_text), (6 bytes).
Removing epd_4in01f_test.o(.text), (968 bytes).
Removing epd_4in2_test.o(.rev16_text), (4 bytes).
Removing epd_4in2_test.o(.revsh_text), (4 bytes).
Removing epd_4in2_test.o(.rrx_text), (6 bytes).
@ -1181,6 +1202,7 @@ Removing Unused input sections from the image.
Removing epd_5in83_v2_test.o(.rev16_text), (4 bytes).
Removing epd_5in83_v2_test.o(.revsh_text), (4 bytes).
Removing epd_5in83_v2_test.o(.rrx_text), (6 bytes).
Removing epd_5in83_v2_test.o(.text), (872 bytes).
Removing epd_5in83bc_test.o(.rev16_text), (4 bytes).
Removing epd_5in83bc_test.o(.revsh_text), (4 bytes).
Removing epd_5in83bc_test.o(.rrx_text), (6 bytes).
@ -1258,7 +1280,7 @@ Removing Unused input sections from the image.
Removing epd_2in9_v2.o(.rev16_text), (4 bytes).
Removing epd_2in9_v2.o(.revsh_text), (4 bytes).
Removing epd_2in9_v2.o(.rrx_text), (6 bytes).
Removing epd_2in9_v2.o(.text), (1106 bytes).
Removing epd_2in9_v2.o(.text), (788 bytes).
Removing epd_2in9_v2.o(.data), (159 bytes).
Removing epd_2in9bc.o(.rev16_text), (4 bytes).
Removing epd_2in9bc.o(.revsh_text), (4 bytes).
@ -1310,6 +1332,10 @@ Removing Unused input sections from the image.
Removing epd_3in7.o(.rrx_text), (6 bytes).
Removing epd_3in7.o(.text), (1928 bytes).
Removing epd_3in7.o(.constdata), (420 bytes).
Removing epd_4in01f.o(.rev16_text), (4 bytes).
Removing epd_4in01f.o(.revsh_text), (4 bytes).
Removing epd_4in01f.o(.rrx_text), (6 bytes).
Removing epd_4in01f.o(.text), (792 bytes).
Removing epd_4in2.o(.rev16_text), (4 bytes).
Removing epd_4in2.o(.revsh_text), (4 bytes).
Removing epd_4in2.o(.rrx_text), (6 bytes).
@ -1326,7 +1352,7 @@ Removing Unused input sections from the image.
Removing epd_5in65f.o(.rev16_text), (4 bytes).
Removing epd_5in65f.o(.revsh_text), (4 bytes).
Removing epd_5in65f.o(.rrx_text), (6 bytes).
Removing epd_5in65f.o(.text), (1012 bytes).
Removing epd_5in65f.o(.text), (840 bytes).
Removing epd_5in83.o(.rev16_text), (4 bytes).
Removing epd_5in83.o(.revsh_text), (4 bytes).
Removing epd_5in83.o(.rrx_text), (6 bytes).
@ -1334,6 +1360,7 @@ Removing Unused input sections from the image.
Removing epd_5in83_v2.o(.rev16_text), (4 bytes).
Removing epd_5in83_v2.o(.revsh_text), (4 bytes).
Removing epd_5in83_v2.o(.rrx_text), (6 bytes).
Removing epd_5in83_v2.o(.text), (600 bytes).
Removing epd_5in83bc.o(.rev16_text), (4 bytes).
Removing epd_5in83bc.o(.revsh_text), (4 bytes).
Removing epd_5in83bc.o(.rrx_text), (6 bytes).
@ -1369,15 +1396,27 @@ Removing Unused input sections from the image.
Removing dev_config.o(.rev16_text), (4 bytes).
Removing dev_config.o(.revsh_text), (4 bytes).
Removing dev_config.o(.rrx_text), (6 bytes).
Removing dev_config.o(.text), (104 bytes).
Removing gui_paint.o(.rev16_text), (4 bytes).
Removing gui_paint.o(.revsh_text), (4 bytes).
Removing gui_paint.o(.rrx_text), (6 bytes).
Removing gui_paint.o(.text), (3588 bytes).
Removing gui_paint.o(.bss), (24 bytes).
Removing gui_paint.o(.conststring), (236 bytes).
Removing font8.o(.constdata), (760 bytes).
Removing font8.o(.data), (8 bytes).
Removing font12.o(.constdata), (1140 bytes).
Removing font12.o(.data), (8 bytes).
Removing font12cn.o(.constdata), (1494 bytes).
Removing font12cn.o(.data), (12 bytes).
Removing font16.o(.constdata), (3040 bytes).
Removing font16.o(.data), (8 bytes).
Removing font20.o(.constdata), (3800 bytes).
Removing font20.o(.data), (8 bytes).
Removing font24.o(.constdata), (6840 bytes).
Removing font24.o(.data), (8 bytes).
Removing font24cn.o(.constdata), (4482 bytes).
Removing font24cn.o(.data), (12 bytes).
Removing dadd.o(.text), (334 bytes).
Removing dmul.o(.text), (228 bytes).
Removing ddiv.o(.text), (222 bytes).
@ -1385,7 +1424,7 @@ Removing Unused input sections from the image.
Removing cdrcmple.o(.text), (48 bytes).
Removing depilogue.o(.text), (186 bytes).
424 unused section(s) (total 733723 bytes) removed from the image.
450 unused section(s) (total 963099 bytes) removed from the image.
==============================================================================
@ -1417,44 +1456,44 @@ Image Symbol Table
../Src/stm32f1xx_hal_msp.c 0x00000000 Number 0 stm32f1xx_hal_msp.o ABSOLUTE
../Src/stm32f1xx_it.c 0x00000000 Number 0 stm32f1xx_it.o ABSOLUTE
../Src/usart.c 0x00000000 Number 0 usart.o ABSOLUTE
../clib/microlib/division.c 0x00000000 Number 0 uidiv.o ABSOLUTE
../clib/microlib/division.c 0x00000000 Number 0 uldiv.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE
../clib/microlib/division.c 0x00000000 Number 0 uidiv.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry8b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry8a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry5.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry8a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry8b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry5.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE
../clib/microlib/longlong.c 0x00000000 Number 0 llsshr.o ABSOLUTE
../clib/microlib/longlong.c 0x00000000 Number 0 llshl.o ABSOLUTE
../clib/microlib/longlong.c 0x00000000 Number 0 llushr.o ABSOLUTE
../clib/microlib/longlong.c 0x00000000 Number 0 llsshr.o ABSOLUTE
../clib/microlib/malloc/malloc.c 0x00000000 Number 0 mallocr.o ABSOLUTE
../clib/microlib/malloc/malloc.c 0x00000000 Number 0 malloc.o ABSOLUTE
../clib/microlib/malloc/malloc.c 0x00000000 Number 0 mallocra.o ABSOLUTE
../clib/microlib/malloc/malloc.c 0x00000000 Number 0 malloca.o ABSOLUTE
../clib/microlib/malloc/malloc.c 0x00000000 Number 0 malloc.o ABSOLUTE
../clib/microlib/malloc/malloc.c 0x00000000 Number 0 mallocr.o ABSOLUTE
../clib/microlib/malloc/mvars.c 0x00000000 Number 0 mvars.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf6.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf7.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf5.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf4.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf3.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf2.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf1.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf0.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf2.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf8.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printfb.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf7.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printfa.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf6.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf5.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf8.o ABSOLUTE
../clib/microlib/printf/stubs.s 0x00000000 Number 0 stubs.o ABSOLUTE
../clib/microlib/stdio/streams.c 0x00000000 Number 0 stdout.o ABSOLUTE
../clib/microlib/string/memcpy.c 0x00000000 Number 0 memcpyb.o ABSOLUTE
../clib/microlib/string/memcpy.c 0x00000000 Number 0 memcpya.o ABSOLUTE
../clib/microlib/string/memcpy.c 0x00000000 Number 0 memcpyb.o ABSOLUTE
../clib/microlib/string/memset.c 0x00000000 Number 0 memseta.o ABSOLUTE
../clib/microlib/stubs.s 0x00000000 Number 0 iusefp.o ABSOLUTE
../fplib/microlib/fpadd.c 0x00000000 Number 0 dadd.o ABSOLUTE
@ -1505,6 +1544,7 @@ Image Symbol Table
..\User\Examples\EPD_2in9bc_test.c 0x00000000 Number 0 epd_2in9bc_test.o ABSOLUTE
..\User\Examples\EPD_2in9d_test.c 0x00000000 Number 0 epd_2in9d_test.o ABSOLUTE
..\User\Examples\EPD_3in7_test.c 0x00000000 Number 0 epd_3in7_test.o ABSOLUTE
..\User\Examples\EPD_4in01f_test.c 0x00000000 Number 0 epd_4in01f_test.o ABSOLUTE
..\User\Examples\EPD_4in2_test.c 0x00000000 Number 0 epd_4in2_test.o ABSOLUTE
..\User\Examples\EPD_4in2b_V2_test.c 0x00000000 Number 0 epd_4in2b_v2_test.o ABSOLUTE
..\User\Examples\EPD_4in2bc_test.c 0x00000000 Number 0 epd_4in2bc_test.o ABSOLUTE
@ -1549,6 +1589,7 @@ Image Symbol Table
..\User\e-Paper\EPD_2in9bc.c 0x00000000 Number 0 epd_2in9bc.o ABSOLUTE
..\User\e-Paper\EPD_2in9d.c 0x00000000 Number 0 epd_2in9d.o ABSOLUTE
..\User\e-Paper\EPD_3in7.c 0x00000000 Number 0 epd_3in7.o ABSOLUTE
..\User\e-Paper\EPD_4in01f.c 0x00000000 Number 0 epd_4in01f.o ABSOLUTE
..\User\e-Paper\EPD_4in2.c 0x00000000 Number 0 epd_4in2.o ABSOLUTE
..\User\e-Paper\EPD_4in2b_V2.c 0x00000000 Number 0 epd_4in2b_v2.o ABSOLUTE
..\User\e-Paper\EPD_4in2bc.c 0x00000000 Number 0 epd_4in2bc.o ABSOLUTE
@ -1586,6 +1627,7 @@ Image Symbol Table
..\\User\\Examples\\EPD_2in9bc_test.c 0x00000000 Number 0 epd_2in9bc_test.o ABSOLUTE
..\\User\\Examples\\EPD_2in9d_test.c 0x00000000 Number 0 epd_2in9d_test.o ABSOLUTE
..\\User\\Examples\\EPD_3in7_test.c 0x00000000 Number 0 epd_3in7_test.o ABSOLUTE
..\\User\\Examples\\EPD_4in01f_test.c 0x00000000 Number 0 epd_4in01f_test.o ABSOLUTE
..\\User\\Examples\\EPD_4in2_test.c 0x00000000 Number 0 epd_4in2_test.o ABSOLUTE
..\\User\\Examples\\EPD_4in2b_V2_test.c 0x00000000 Number 0 epd_4in2b_v2_test.o ABSOLUTE
..\\User\\Examples\\EPD_4in2bc_test.c 0x00000000 Number 0 epd_4in2bc_test.o ABSOLUTE
@ -1622,6 +1664,7 @@ Image Symbol Table
..\\User\\e-Paper\\EPD_2in9bc.c 0x00000000 Number 0 epd_2in9bc.o ABSOLUTE
..\\User\\e-Paper\\EPD_2in9d.c 0x00000000 Number 0 epd_2in9d.o ABSOLUTE
..\\User\\e-Paper\\EPD_3in7.c 0x00000000 Number 0 epd_3in7.o ABSOLUTE
..\\User\\e-Paper\\EPD_4in01f.c 0x00000000 Number 0 epd_4in01f.o ABSOLUTE
..\\User\\e-Paper\\EPD_4in2.c 0x00000000 Number 0 epd_4in2.o ABSOLUTE
..\\User\\e-Paper\\EPD_4in2b_V2.c 0x00000000 Number 0 epd_4in2b_v2.o ABSOLUTE
..\\User\\e-Paper\\EPD_4in2bc.c 0x00000000 Number 0 epd_4in2bc.o ABSOLUTE
@ -1654,104 +1697,53 @@ Image Symbol Table
__lit__00000000 0x08000140 Data 4 entry2.o(.ARM.Collect$$$$00002712)
.text 0x08000144 Section 36 startup_stm32f103xe.o(.text)
.text 0x08000168 Section 0 main.o(.text)
.text 0x08000228 Section 0 gpio.o(.text)
.text 0x0800027c Section 0 spi.o(.text)
.text 0x08000330 Section 0 usart.o(.text)
.text 0x08000404 Section 0 stm32f1xx_it.o(.text)
.text 0x0800043c Section 0 stm32f1xx_hal_msp.o(.text)
.text 0x080004bc Section 0 stm32f1xx_hal_spi.o(.text)
SPI_WaitFlagStateUntilTimeout 0x0800056f Thumb Code 150 stm32f1xx_hal_spi.o(.text)
SPI_CloseTx_ISR 0x08000a97 Thumb Code 118 stm32f1xx_hal_spi.o(.text)
SPI_TxISR_8BIT 0x08000b0d Thumb Code 28 stm32f1xx_hal_spi.o(.text)
SPI_TxISR_16BIT 0x08000b29 Thumb Code 30 stm32f1xx_hal_spi.o(.text)
SPI_CloseRx_ISR 0x08000bd7 Thumb Code 78 stm32f1xx_hal_spi.o(.text)
SPI_RxISR_8BIT 0x08000c25 Thumb Code 28 stm32f1xx_hal_spi.o(.text)
SPI_RxISR_16BIT 0x08000c41 Thumb Code 30 stm32f1xx_hal_spi.o(.text)
SPI_CloseRxTx_ISR 0x08000c61 Thumb Code 138 stm32f1xx_hal_spi.o(.text)
SPI_2linesTxISR_8BIT 0x08000ceb Thumb Code 44 stm32f1xx_hal_spi.o(.text)
SPI_2linesRxISR_8BIT 0x08000d17 Thumb Code 44 stm32f1xx_hal_spi.o(.text)
SPI_2linesTxISR_16BIT 0x08000d43 Thumb Code 46 stm32f1xx_hal_spi.o(.text)
SPI_2linesRxISR_16BIT 0x08000d71 Thumb Code 46 stm32f1xx_hal_spi.o(.text)
SPI_DMAError 0x08000eef Thumb Code 34 stm32f1xx_hal_spi.o(.text)
SPI_DMATransmitCplt 0x08000f11 Thumb Code 90 stm32f1xx_hal_spi.o(.text)
SPI_DMAHalfTransmitCplt 0x08000f6d Thumb Code 10 stm32f1xx_hal_spi.o(.text)
SPI_DMAReceiveCplt 0x08001021 Thumb Code 82 stm32f1xx_hal_spi.o(.text)
SPI_DMAHalfReceiveCplt 0x08001075 Thumb Code 10 stm32f1xx_hal_spi.o(.text)
SPI_DMATransmitReceiveCplt 0x0800107f Thumb Code 80 stm32f1xx_hal_spi.o(.text)
SPI_DMAHalfTransmitReceiveCplt 0x080010d1 Thumb Code 10 stm32f1xx_hal_spi.o(.text)
SPI_AbortRx_ISR 0x08001291 Thumb Code 114 stm32f1xx_hal_spi.o(.text)
SPI_AbortTx_ISR 0x08001303 Thumb Code 22 stm32f1xx_hal_spi.o(.text)
SPI_DMARxAbortCallback 0x080013c9 Thumb Code 66 stm32f1xx_hal_spi.o(.text)
SPI_DMATxAbortCallback 0x0800140b Thumb Code 92 stm32f1xx_hal_spi.o(.text)
SPI_DMAAbortOnError 0x080015ad Thumb Code 16 stm32f1xx_hal_spi.o(.text)
SPI_CheckFlag_BSY 0x08001689 Thumb Code 32 stm32f1xx_hal_spi.o(.text)
.text 0x080016c0 Section 0 stm32f1xx_hal_spi_ex.o(.text)
.text 0x08001744 Section 0 stm32f1xx_hal_uart.o(.text)
UART_SetConfig 0x08001745 Thumb Code 364 stm32f1xx_hal_uart.o(.text)
UART_WaitOnFlagUntilTimeout 0x08001aa5 Thumb Code 98 stm32f1xx_hal_uart.o(.text)
UART_DMAError 0x08001d0d Thumb Code 74 stm32f1xx_hal_uart.o(.text)
UART_DMATxHalfCplt 0x08001d59 Thumb Code 10 stm32f1xx_hal_uart.o(.text)
UART_DMATransmitCplt 0x08001d65 Thumb Code 46 stm32f1xx_hal_uart.o(.text)
UART_DMARxHalfCplt 0x08001e07 Thumb Code 10 stm32f1xx_hal_uart.o(.text)
UART_DMAReceiveCplt 0x08001e13 Thumb Code 60 stm32f1xx_hal_uart.o(.text)
UART_DMARxAbortCallback 0x080020dd Thumb Code 42 stm32f1xx_hal_uart.o(.text)
UART_DMATxAbortCallback 0x08002107 Thumb Code 42 stm32f1xx_hal_uart.o(.text)
UART_DMATxOnlyAbortCallback 0x080021f3 Thumb Code 20 stm32f1xx_hal_uart.o(.text)
UART_DMARxOnlyAbortCallback 0x08002257 Thumb Code 20 stm32f1xx_hal_uart.o(.text)
UART_DMAAbortOnError 0x080022c3 Thumb Code 16 stm32f1xx_hal_uart.o(.text)
UART_Receive_IT 0x080022d3 Thumb Code 150 stm32f1xx_hal_uart.o(.text)
UART_EndRxTransfer 0x0800256d Thumb Code 28 stm32f1xx_hal_uart.o(.text)
UART_EndTxTransfer 0x08002589 Thumb Code 18 stm32f1xx_hal_uart.o(.text)
UART_Transmit_IT 0x0800259b Thumb Code 98 stm32f1xx_hal_uart.o(.text)
.text 0x08002608 Section 0 stm32f1xx_hal_rcc.o(.text)
.text 0x08002cf0 Section 0 stm32f1xx_hal_gpio.o(.text)
.text 0x0800300c Section 0 stm32f1xx_hal.o(.text)
.text 0x08003184 Section 0 stm32f1xx_hal_dma.o(.text)
DMA_SetConfig 0x08003269 Thumb Code 42 stm32f1xx_hal_dma.o(.text)
.text 0x08003b7c Section 0 stm32f1xx_hal_cortex.o(.text)
NVIC_SetPriority 0x08003d2d Thumb Code 32 stm32f1xx_hal_cortex.o(.text)
.text 0x08003d54 Section 0 system_stm32f1xx.o(.text)
.text 0x08003e00 Section 0 epd_5in83_v2_test.o(.text)
.text 0x08004168 Section 0 epd_5in83_v2.o(.text)
EPD_5in83_V2_ReadBusy 0x08004169 Thumb Code 50 epd_5in83_v2.o(.text)
EPD_5in83_V2_SendCommand 0x08004315 Thumb Code 46 epd_5in83_v2.o(.text)
EPD_5in83_V2_SendData 0x08004343 Thumb Code 46 epd_5in83_v2.o(.text)
EPD_5in83_V2_TurnOnDisplay 0x08004371 Thumb Code 20 epd_5in83_v2.o(.text)
.text 0x080043c0 Section 0 dev_config.o(.text)
.text 0x08004428 Section 0 gui_paint.o(.text)
.text 0x0800522c Section 0 memseta.o(.text)
.text 0x08005250 Section 0 uidiv.o(.text)
.text 0x0800527c Section 36 init.o(.text)
i.__0printf$3 0x080052a0 Section 0 printf3.o(i.__0printf$3)
i.__scatterload_copy 0x080052c0 Section 14 handlers.o(i.__scatterload_copy)
i.__scatterload_null 0x080052ce Section 2 handlers.o(i.__scatterload_null)
i.__scatterload_zeroinit 0x080052d0 Section 14 handlers.o(i.__scatterload_zeroinit)
i._printf_core 0x080052e0 Section 0 printf3.o(i._printf_core)
_printf_core 0x080052e1 Thumb Code 436 printf3.o(i._printf_core)
i.free 0x08005498 Section 0 malloc.o(i.free)
i.malloc 0x080054e8 Section 0 malloc.o(i.malloc)
.constdata 0x08005554 Section 16 system_stm32f1xx.o(.constdata)
.constdata 0x08005564 Section 8 system_stm32f1xx.o(.constdata)
.constdata 0x0800556c Section 38886 imagedata.o(.constdata)
.constdata 0x0800ed52 Section 1140 font12.o(.constdata)
.constdata 0x0800f1c6 Section 1494 font12cn.o(.constdata)
.constdata 0x0800f79c Section 3040 font16.o(.constdata)
.constdata 0x0801037c Section 4482 font24cn.o(.constdata)
.conststring 0x08011500 Section 233 gui_paint.o(.conststring)
.text 0x08000224 Section 0 gpio.o(.text)
.text 0x08000278 Section 0 spi.o(.text)
.text 0x0800032c Section 0 usart.o(.text)
.text 0x08000400 Section 0 stm32f1xx_it.o(.text)
.text 0x08000438 Section 0 stm32f1xx_hal_msp.o(.text)
.text 0x080004b8 Section 0 stm32f1xx_hal_spi_ex.o(.text)
.text 0x0800053c Section 0 stm32f1xx_hal_uart.o(.text)
UART_SetConfig 0x0800053d Thumb Code 364 stm32f1xx_hal_uart.o(.text)
UART_WaitOnFlagUntilTimeout 0x0800089d Thumb Code 98 stm32f1xx_hal_uart.o(.text)
UART_DMAError 0x08000b05 Thumb Code 74 stm32f1xx_hal_uart.o(.text)
UART_DMATxHalfCplt 0x08000b51 Thumb Code 10 stm32f1xx_hal_uart.o(.text)
UART_DMATransmitCplt 0x08000b5d Thumb Code 46 stm32f1xx_hal_uart.o(.text)
UART_DMARxHalfCplt 0x08000bff Thumb Code 10 stm32f1xx_hal_uart.o(.text)
UART_DMAReceiveCplt 0x08000c0b Thumb Code 60 stm32f1xx_hal_uart.o(.text)
UART_DMARxAbortCallback 0x08000ed5 Thumb Code 42 stm32f1xx_hal_uart.o(.text)
UART_DMATxAbortCallback 0x08000eff Thumb Code 42 stm32f1xx_hal_uart.o(.text)
UART_DMATxOnlyAbortCallback 0x08000feb Thumb Code 20 stm32f1xx_hal_uart.o(.text)
UART_DMARxOnlyAbortCallback 0x0800104f Thumb Code 20 stm32f1xx_hal_uart.o(.text)
UART_DMAAbortOnError 0x080010bb Thumb Code 16 stm32f1xx_hal_uart.o(.text)
UART_Receive_IT 0x080010cb Thumb Code 150 stm32f1xx_hal_uart.o(.text)
UART_EndRxTransfer 0x08001365 Thumb Code 28 stm32f1xx_hal_uart.o(.text)
UART_EndTxTransfer 0x08001381 Thumb Code 18 stm32f1xx_hal_uart.o(.text)
UART_Transmit_IT 0x08001393 Thumb Code 98 stm32f1xx_hal_uart.o(.text)
.text 0x08001400 Section 0 stm32f1xx_hal_rcc.o(.text)
.text 0x08001ae8 Section 0 stm32f1xx_hal_gpio.o(.text)
.text 0x08001e04 Section 0 stm32f1xx_hal.o(.text)
.text 0x08001f7c Section 0 stm32f1xx_hal_dma.o(.text)
DMA_SetConfig 0x08002061 Thumb Code 42 stm32f1xx_hal_dma.o(.text)
.text 0x08002974 Section 0 stm32f1xx_hal_cortex.o(.text)
NVIC_SetPriority 0x08002b25 Thumb Code 32 stm32f1xx_hal_cortex.o(.text)
.text 0x08002b4c Section 0 system_stm32f1xx.o(.text)
.text 0x08002bf8 Section 0 uidiv.o(.text)
.text 0x08002c24 Section 36 init.o(.text)
i.__0printf$3 0x08002c48 Section 0 printf3.o(i.__0printf$3)
i.__scatterload_copy 0x08002c68 Section 14 handlers.o(i.__scatterload_copy)
i.__scatterload_null 0x08002c76 Section 2 handlers.o(i.__scatterload_null)
i.__scatterload_zeroinit 0x08002c78 Section 14 handlers.o(i.__scatterload_zeroinit)
i._printf_core 0x08002c88 Section 0 printf3.o(i._printf_core)
_printf_core 0x08002c89 Thumb Code 436 printf3.o(i._printf_core)
.constdata 0x08002e40 Section 16 system_stm32f1xx.o(.constdata)
.constdata 0x08002e50 Section 8 system_stm32f1xx.o(.constdata)
.data 0x20000000 Section 12 stm32f1xx_hal.o(.data)
.data 0x2000000c Section 4 system_stm32f1xx.o(.data)
.data 0x20000010 Section 8 font12.o(.data)
.data 0x20000018 Section 12 font12cn.o(.data)
.data 0x20000024 Section 8 font16.o(.data)
.data 0x2000002c Section 12 font24cn.o(.data)
.data 0x20000038 Section 4 stdout.o(.data)
.data 0x2000003c Section 4 mvars.o(.data)
.data 0x20000040 Section 4 mvars.o(.data)
.bss 0x20000044 Section 88 spi.o(.bss)
.bss 0x2000009c Section 64 usart.o(.bss)
.bss 0x200000dc Section 24 gui_paint.o(.bss)
HEAP 0x200000f8 Section 40960 startup_stm32f103xe.o(HEAP)
STACK 0x2000a0f8 Section 4096 startup_stm32f103xe.o(STACK)
.data 0x20000010 Section 4 stdout.o(.data)
.bss 0x20000014 Section 88 spi.o(.bss)
.bss 0x2000006c Section 64 usart.o(.bss)
STACK 0x200000b0 Section 4096 startup_stm32f103xe.o(STACK)
Global Symbols
@ -1880,234 +1872,157 @@ Image Symbol Table
WWDG_IRQHandler 0x0800015f Thumb Code 0 startup_stm32f103xe.o(.text)
_Error_Handler 0x08000169 Thumb Code 8 main.o(.text)
SystemClock_Config 0x08000171 Thumb Code 112 main.o(.text)
main 0x080001e1 Thumb Code 36 main.o(.text)
MX_GPIO_Init 0x08000229 Thumb Code 76 gpio.o(.text)
MX_SPI1_Init 0x0800027d Thumb Code 66 spi.o(.text)
HAL_SPI_MspInit 0x080002bf Thumb Code 54 spi.o(.text)
HAL_SPI_MspDeInit 0x080002f5 Thumb Code 28 spi.o(.text)
MX_USART1_UART_Init 0x08000331 Thumb Code 52 usart.o(.text)
HAL_UART_MspInit 0x08000365 Thumb Code 76 usart.o(.text)
HAL_UART_MspDeInit 0x080003b1 Thumb Code 30 usart.o(.text)
fputc 0x080003cf Thumb Code 20 usart.o(.text)
NMI_Handler 0x08000405 Thumb Code 2 stm32f1xx_it.o(.text)
HardFault_Handler 0x08000407 Thumb Code 8 stm32f1xx_it.o(.text)
MemManage_Handler 0x0800040f Thumb Code 2 stm32f1xx_it.o(.text)
BusFault_Handler 0x08000411 Thumb Code 2 stm32f1xx_it.o(.text)
UsageFault_Handler 0x08000413 Thumb Code 2 stm32f1xx_it.o(.text)
SVC_Handler 0x08000415 Thumb Code 2 stm32f1xx_it.o(.text)
DebugMon_Handler 0x08000417 Thumb Code 2 stm32f1xx_it.o(.text)
PendSV_Handler 0x08000419 Thumb Code 2 stm32f1xx_it.o(.text)
SysTick_Handler 0x0800041b Thumb Code 14 stm32f1xx_it.o(.text)
HAL_MspInit 0x0800043d Thumb Code 118 stm32f1xx_hal_msp.o(.text)
HAL_SPI_DeInit 0x08000541 Thumb Code 46 stm32f1xx_hal_spi.o(.text)
HAL_SPI_Transmit 0x08000605 Thumb Code 360 stm32f1xx_hal_spi.o(.text)
HAL_SPI_TransmitReceive 0x0800076d Thumb Code 472 stm32f1xx_hal_spi.o(.text)
HAL_SPI_Receive 0x08000945 Thumb Code 334 stm32f1xx_hal_spi.o(.text)
HAL_SPI_TxCpltCallback 0x08000a93 Thumb Code 2 stm32f1xx_hal_spi.o(.text)
HAL_SPI_ErrorCallback 0x08000a95 Thumb Code 2 stm32f1xx_hal_spi.o(.text)
HAL_SPI_Transmit_IT 0x08000b47 Thumb Code 142 stm32f1xx_hal_spi.o(.text)
HAL_SPI_RxCpltCallback 0x08000bd5 Thumb Code 2 stm32f1xx_hal_spi.o(.text)
HAL_SPI_TxRxCpltCallback 0x08000c5f Thumb Code 2 stm32f1xx_hal_spi.o(.text)
HAL_SPI_TransmitReceive_IT 0x08000d9f Thumb Code 148 stm32f1xx_hal_spi.o(.text)
HAL_SPI_Receive_IT 0x08000e33 Thumb Code 188 stm32f1xx_hal_spi.o(.text)
HAL_SPI_TxHalfCpltCallback 0x08000f6b Thumb Code 2 stm32f1xx_hal_spi.o(.text)
HAL_SPI_Transmit_DMA 0x08000f77 Thumb Code 170 stm32f1xx_hal_spi.o(.text)
HAL_SPI_RxHalfCpltCallback 0x08001073 Thumb Code 2 stm32f1xx_hal_spi.o(.text)
HAL_SPI_TxRxHalfCpltCallback 0x080010cf Thumb Code 2 stm32f1xx_hal_spi.o(.text)
HAL_SPI_TransmitReceive_DMA 0x080010db Thumb Code 242 stm32f1xx_hal_spi.o(.text)
HAL_SPI_Receive_DMA 0x080011cd Thumb Code 196 stm32f1xx_hal_spi.o(.text)
HAL_SPI_Abort 0x08001319 Thumb Code 174 stm32f1xx_hal_spi.o(.text)
HAL_SPI_AbortCpltCallback 0x080013c7 Thumb Code 2 stm32f1xx_hal_spi.o(.text)
HAL_SPI_Abort_IT 0x08001467 Thumb Code 210 stm32f1xx_hal_spi.o(.text)
HAL_SPI_DMAPause 0x08001539 Thumb Code 38 stm32f1xx_hal_spi.o(.text)
HAL_SPI_DMAResume 0x0800155f Thumb Code 38 stm32f1xx_hal_spi.o(.text)
HAL_SPI_DMAStop 0x08001585 Thumb Code 40 stm32f1xx_hal_spi.o(.text)
HAL_SPI_IRQHandler 0x080015bd Thumb Code 190 stm32f1xx_hal_spi.o(.text)
HAL_SPI_GetState 0x0800167b Thumb Code 6 stm32f1xx_hal_spi.o(.text)
HAL_SPI_GetError 0x08001681 Thumb Code 4 stm32f1xx_hal_spi.o(.text)
SPI_ISCRCErrorValid 0x08001685 Thumb Code 4 stm32f1xx_hal_spi.o(.text)
HAL_SPI_Init 0x080016c1 Thumb Code 130 stm32f1xx_hal_spi_ex.o(.text)
HAL_UART_Init 0x080018b3 Thumb Code 98 stm32f1xx_hal_uart.o(.text)
HAL_HalfDuplex_Init 0x08001915 Thumb Code 108 stm32f1xx_hal_uart.o(.text)
HAL_LIN_Init 0x08001981 Thumb Code 122 stm32f1xx_hal_uart.o(.text)
HAL_MultiProcessor_Init 0x080019fb Thumb Code 128 stm32f1xx_hal_uart.o(.text)
HAL_UART_DeInit 0x08001a7d Thumb Code 40 stm32f1xx_hal_uart.o(.text)
HAL_UART_Transmit 0x08001b07 Thumb Code 190 stm32f1xx_hal_uart.o(.text)
HAL_UART_Receive 0x08001bc5 Thumb Code 182 stm32f1xx_hal_uart.o(.text)
HAL_UART_Transmit_IT 0x08001c7b Thumb Code 62 stm32f1xx_hal_uart.o(.text)
HAL_UART_Receive_IT 0x08001cb9 Thumb Code 82 stm32f1xx_hal_uart.o(.text)
HAL_UART_ErrorCallback 0x08001d0b Thumb Code 2 stm32f1xx_hal_uart.o(.text)
HAL_UART_TxHalfCpltCallback 0x08001d57 Thumb Code 2 stm32f1xx_hal_uart.o(.text)
HAL_UART_TxCpltCallback 0x08001d63 Thumb Code 2 stm32f1xx_hal_uart.o(.text)
HAL_UART_Transmit_DMA 0x08001d93 Thumb Code 114 stm32f1xx_hal_uart.o(.text)
HAL_UART_RxHalfCpltCallback 0x08001e05 Thumb Code 2 stm32f1xx_hal_uart.o(.text)
HAL_UART_RxCpltCallback 0x08001e11 Thumb Code 2 stm32f1xx_hal_uart.o(.text)
HAL_UART_Receive_DMA 0x08001e4f Thumb Code 138 stm32f1xx_hal_uart.o(.text)
HAL_UART_DMAPause 0x08001ed9 Thumb Code 102 stm32f1xx_hal_uart.o(.text)
HAL_UART_DMAResume 0x08001f3f Thumb Code 94 stm32f1xx_hal_uart.o(.text)
HAL_UART_DMAStop 0x08001f9d Thumb Code 88 stm32f1xx_hal_uart.o(.text)
HAL_UART_Abort 0x08001ff5 Thumb Code 104 stm32f1xx_hal_uart.o(.text)
HAL_UART_AbortTransmit 0x0800205d Thumb Code 58 stm32f1xx_hal_uart.o(.text)
HAL_UART_AbortReceive 0x08002097 Thumb Code 68 stm32f1xx_hal_uart.o(.text)
HAL_UART_AbortCpltCallback 0x080020db Thumb Code 2 stm32f1xx_hal_uart.o(.text)
HAL_UART_Abort_IT 0x08002131 Thumb Code 192 stm32f1xx_hal_uart.o(.text)
HAL_UART_AbortTransmitCpltCallback 0x080021f1 Thumb Code 2 stm32f1xx_hal_uart.o(.text)
HAL_UART_AbortTransmit_IT 0x08002207 Thumb Code 78 stm32f1xx_hal_uart.o(.text)
HAL_UART_AbortReceiveCpltCallback 0x08002255 Thumb Code 2 stm32f1xx_hal_uart.o(.text)
HAL_UART_AbortReceive_IT 0x0800226b Thumb Code 88 stm32f1xx_hal_uart.o(.text)
HAL_UART_IRQHandler 0x08002369 Thumb Code 264 stm32f1xx_hal_uart.o(.text)
HAL_LIN_SendBreak 0x08002471 Thumb Code 46 stm32f1xx_hal_uart.o(.text)
HAL_MultiProcessor_EnterMuteMode 0x0800249f Thumb Code 46 stm32f1xx_hal_uart.o(.text)
HAL_MultiProcessor_ExitMuteMode 0x080024cd Thumb Code 46 stm32f1xx_hal_uart.o(.text)
HAL_HalfDuplex_EnableTransmitter 0x080024fb Thumb Code 50 stm32f1xx_hal_uart.o(.text)
HAL_HalfDuplex_EnableReceiver 0x0800252d Thumb Code 50 stm32f1xx_hal_uart.o(.text)
HAL_UART_GetState 0x0800255f Thumb Code 10 stm32f1xx_hal_uart.o(.text)
HAL_UART_GetError 0x08002569 Thumb Code 4 stm32f1xx_hal_uart.o(.text)
HAL_RCC_DeInit 0x08002609 Thumb Code 202 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_OscConfig 0x080026d3 Thumb Code 752 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_GetSysClockFreq 0x080029c3 Thumb Code 120 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_ClockConfig 0x08002a3b Thumb Code 320 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_MCOConfig 0x08002b7b Thumb Code 64 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_EnableCSS 0x08002bbb Thumb Code 8 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_DisableCSS 0x08002bc3 Thumb Code 8 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_GetHCLKFreq 0x08002bcb Thumb Code 6 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_GetPCLK1Freq 0x08002bd1 Thumb Code 20 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_GetPCLK2Freq 0x08002be5 Thumb Code 20 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_GetOscConfig 0x08002bf9 Thumb Code 140 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_GetClockConfig 0x08002c85 Thumb Code 54 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_CSSCallback 0x08002cbb Thumb Code 2 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_NMI_IRQHandler 0x08002cbd Thumb Code 20 stm32f1xx_hal_rcc.o(.text)
HAL_GPIO_Init 0x08002cf1 Thumb Code 446 stm32f1xx_hal_gpio.o(.text)
HAL_GPIO_DeInit 0x08002eaf Thumb Code 224 stm32f1xx_hal_gpio.o(.text)
HAL_GPIO_ReadPin 0x08002f8f Thumb Code 10 stm32f1xx_hal_gpio.o(.text)
HAL_GPIO_WritePin 0x08002f99 Thumb Code 10 stm32f1xx_hal_gpio.o(.text)
HAL_GPIO_TogglePin 0x08002fa3 Thumb Code 8 stm32f1xx_hal_gpio.o(.text)
HAL_GPIO_LockPin 0x08002fab Thumb Code 34 stm32f1xx_hal_gpio.o(.text)
HAL_GPIO_EXTI_Callback 0x08002fcd Thumb Code 2 stm32f1xx_hal_gpio.o(.text)
HAL_GPIO_EXTI_IRQHandler 0x08002fcf Thumb Code 20 stm32f1xx_hal_gpio.o(.text)
HAL_InitTick 0x0800300f Thumb Code 54 stm32f1xx_hal.o(.text)
HAL_Init 0x08003045 Thumb Code 32 stm32f1xx_hal.o(.text)
HAL_MspDeInit 0x08003065 Thumb Code 2 stm32f1xx_hal.o(.text)
HAL_DeInit 0x08003067 Thumb Code 26 stm32f1xx_hal.o(.text)
HAL_IncTick 0x08003081 Thumb Code 12 stm32f1xx_hal.o(.text)
HAL_GetTick 0x0800308d Thumb Code 6 stm32f1xx_hal.o(.text)
HAL_GetTickPrio 0x08003093 Thumb Code 6 stm32f1xx_hal.o(.text)
HAL_SetTickFreq 0x08003099 Thumb Code 24 stm32f1xx_hal.o(.text)
HAL_GetTickFreq 0x080030b1 Thumb Code 6 stm32f1xx_hal.o(.text)
HAL_Delay 0x080030b7 Thumb Code 32 stm32f1xx_hal.o(.text)
HAL_SuspendTick 0x080030d7 Thumb Code 14 stm32f1xx_hal.o(.text)
HAL_ResumeTick 0x080030e5 Thumb Code 14 stm32f1xx_hal.o(.text)
HAL_GetHalVersion 0x080030f3 Thumb Code 4 stm32f1xx_hal.o(.text)
HAL_GetREVID 0x080030f7 Thumb Code 8 stm32f1xx_hal.o(.text)
HAL_GetDEVID 0x080030ff Thumb Code 10 stm32f1xx_hal.o(.text)
HAL_DBGMCU_EnableDBGSleepMode 0x08003109 Thumb Code 12 stm32f1xx_hal.o(.text)
HAL_DBGMCU_DisableDBGSleepMode 0x08003115 Thumb Code 12 stm32f1xx_hal.o(.text)
HAL_DBGMCU_EnableDBGStopMode 0x08003121 Thumb Code 12 stm32f1xx_hal.o(.text)
HAL_DBGMCU_DisableDBGStopMode 0x0800312d Thumb Code 12 stm32f1xx_hal.o(.text)
HAL_DBGMCU_EnableDBGStandbyMode 0x08003139 Thumb Code 12 stm32f1xx_hal.o(.text)
HAL_DBGMCU_DisableDBGStandbyMode 0x08003145 Thumb Code 12 stm32f1xx_hal.o(.text)
HAL_GetUID 0x08003151 Thumb Code 24 stm32f1xx_hal.o(.text)
HAL_DMA_Init 0x08003185 Thumb Code 120 stm32f1xx_hal_dma.o(.text)
HAL_DMA_DeInit 0x080031fd Thumb Code 108 stm32f1xx_hal_dma.o(.text)
HAL_DMA_Start 0x08003293 Thumb Code 80 stm32f1xx_hal_dma.o(.text)
HAL_DMA_Start_IT 0x080032e3 Thumb Code 112 stm32f1xx_hal_dma.o(.text)
HAL_DMA_Abort 0x08003353 Thumb Code 48 stm32f1xx_hal_dma.o(.text)
HAL_DMA_Abort_IT 0x08003383 Thumb Code 296 stm32f1xx_hal_dma.o(.text)
HAL_DMA_PollForTransfer 0x080034ab Thumb Code 998 stm32f1xx_hal_dma.o(.text)
HAL_DMA_IRQHandler 0x08003891 Thumb Code 574 stm32f1xx_hal_dma.o(.text)
HAL_DMA_RegisterCallback 0x08003acf Thumb Code 74 stm32f1xx_hal_dma.o(.text)
HAL_DMA_UnRegisterCallback 0x08003b19 Thumb Code 82 stm32f1xx_hal_dma.o(.text)
HAL_DMA_GetState 0x08003b6b Thumb Code 6 stm32f1xx_hal_dma.o(.text)
HAL_DMA_GetError 0x08003b71 Thumb Code 4 stm32f1xx_hal_dma.o(.text)
HAL_NVIC_SetPriorityGrouping 0x08003b7d Thumb Code 26 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_SetPriority 0x08003b97 Thumb Code 60 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_EnableIRQ 0x08003bd3 Thumb Code 22 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_DisableIRQ 0x08003be9 Thumb Code 22 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_SystemReset 0x08003bff Thumb Code 28 stm32f1xx_hal_cortex.o(.text)
HAL_SYSTICK_Config 0x08003c1b Thumb Code 40 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_GetPriorityGrouping 0x08003c43 Thumb Code 10 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_GetPriority 0x08003c4d Thumb Code 82 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_SetPendingIRQ 0x08003c9f Thumb Code 22 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_GetPendingIRQ 0x08003cb5 Thumb Code 32 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_ClearPendingIRQ 0x08003cd5 Thumb Code 22 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_GetActive 0x08003ceb Thumb Code 32 stm32f1xx_hal_cortex.o(.text)
HAL_SYSTICK_CLKSourceConfig 0x08003d0b Thumb Code 24 stm32f1xx_hal_cortex.o(.text)
HAL_SYSTICK_Callback 0x08003d23 Thumb Code 2 stm32f1xx_hal_cortex.o(.text)
HAL_SYSTICK_IRQHandler 0x08003d25 Thumb Code 8 stm32f1xx_hal_cortex.o(.text)
SystemInit 0x08003d55 Thumb Code 56 system_stm32f1xx.o(.text)
SystemCoreClockUpdate 0x08003d8d Thumb Code 82 system_stm32f1xx.o(.text)
EPD_5in83_V2_test 0x08003e01 Thumb Code 506 epd_5in83_v2_test.o(.text)
EPD_5in83_V2_Init 0x0800419b Thumb Code 186 epd_5in83_v2.o(.text)
EPD_5in83_V2_Clear 0x08004255 Thumb Code 66 epd_5in83_v2.o(.text)
EPD_5in83_V2_Display 0x08004297 Thumb Code 98 epd_5in83_v2.o(.text)
EPD_5in83_V2_Sleep 0x080042f9 Thumb Code 28 epd_5in83_v2.o(.text)
DEV_SPI_WriteByte 0x080043c1 Thumb Code 18 dev_config.o(.text)
DEV_Module_Init 0x080043d3 Thumb Code 38 dev_config.o(.text)
DEV_Module_Exit 0x080043f9 Thumb Code 38 dev_config.o(.text)
Paint_NewImage 0x08004429 Thumb Code 56 gui_paint.o(.text)
Paint_SelectImage 0x08004461 Thumb Code 6 gui_paint.o(.text)
Paint_SetRotate 0x08004467 Thumb Code 44 gui_paint.o(.text)
Paint_SetScale 0x08004493 Thumb Code 80 gui_paint.o(.text)
Paint_SetMirroring 0x080044e3 Thumb Code 62 gui_paint.o(.text)
Paint_SetPixel 0x08004521 Thumb Code 238 gui_paint.o(.text)
Paint_Clear 0x0800460f Thumb Code 104 gui_paint.o(.text)
Paint_ClearWindows 0x08004677 Thumb Code 52 gui_paint.o(.text)
Paint_DrawPoint 0x080046ab Thumb Code 180 gui_paint.o(.text)
Paint_DrawLine 0x0800475f Thumb Code 654 gui_paint.o(.text)
Paint_DrawRectangle 0x080049ed Thumb Code 170 gui_paint.o(.text)
Paint_DrawCircle 0x08004a97 Thumb Code 528 gui_paint.o(.text)
Paint_DrawChar 0x08004ca7 Thumb Code 172 gui_paint.o(.text)
Paint_DrawString_EN 0x08004d53 Thumb Code 116 gui_paint.o(.text)
Paint_DrawString_CN 0x08004dc7 Thumb Code 518 gui_paint.o(.text)
Paint_DrawNum 0x08004fcd Thumb Code 140 gui_paint.o(.text)
Paint_DrawTime 0x08005059 Thumb Code 282 gui_paint.o(.text)
Paint_DrawBitMap 0x08005173 Thumb Code 46 gui_paint.o(.text)
Paint_DrawBitMap_Block 0x080051a1 Thumb Code 56 gui_paint.o(.text)
__aeabi_memset 0x0800522d Thumb Code 14 memseta.o(.text)
__aeabi_memset4 0x0800522d Thumb Code 0 memseta.o(.text)
__aeabi_memset8 0x0800522d Thumb Code 0 memseta.o(.text)
__aeabi_memclr 0x0800523b Thumb Code 4 memseta.o(.text)
__aeabi_memclr4 0x0800523b Thumb Code 0 memseta.o(.text)
__aeabi_memclr8 0x0800523b Thumb Code 0 memseta.o(.text)
_memset$wrapper 0x0800523f Thumb Code 18 memseta.o(.text)
__aeabi_uidiv 0x08005251 Thumb Code 0 uidiv.o(.text)
__aeabi_uidivmod 0x08005251 Thumb Code 44 uidiv.o(.text)
__scatterload 0x0800527d Thumb Code 28 init.o(.text)
__scatterload_rt2 0x0800527d Thumb Code 0 init.o(.text)
__0printf$3 0x080052a1 Thumb Code 22 printf3.o(i.__0printf$3)
__1printf$3 0x080052a1 Thumb Code 0 printf3.o(i.__0printf$3)
__2printf 0x080052a1 Thumb Code 0 printf3.o(i.__0printf$3)
__scatterload_copy 0x080052c1 Thumb Code 14 handlers.o(i.__scatterload_copy)
__scatterload_null 0x080052cf Thumb Code 2 handlers.o(i.__scatterload_null)
__scatterload_zeroinit 0x080052d1 Thumb Code 14 handlers.o(i.__scatterload_zeroinit)
free 0x08005499 Thumb Code 76 malloc.o(i.free)
malloc 0x080054e9 Thumb Code 92 malloc.o(i.malloc)
AHBPrescTable 0x08005554 Data 16 system_stm32f1xx.o(.constdata)
APBPrescTable 0x08005564 Data 8 system_stm32f1xx.o(.constdata)
gImage_5in83_V2 0x0800556c Data 38886 imagedata.o(.constdata)
Font12_Table 0x0800ed52 Data 1140 font12.o(.constdata)
Font12CN_Table 0x0800f1c6 Data 1494 font12cn.o(.constdata)
Font16_Table 0x0800f79c Data 3040 font16.o(.constdata)
Font24CN_Table 0x0801037c Data 4482 font24cn.o(.constdata)
Region$$Table$$Base 0x080115ec Number 0 anon$$obj.o(Region$$Table)
Region$$Table$$Limit 0x0801160c Number 0 anon$$obj.o(Region$$Table)
main 0x080001e1 Thumb Code 32 main.o(.text)
MX_GPIO_Init 0x08000225 Thumb Code 76 gpio.o(.text)
MX_SPI1_Init 0x08000279 Thumb Code 66 spi.o(.text)
HAL_SPI_MspInit 0x080002bb Thumb Code 54 spi.o(.text)
HAL_SPI_MspDeInit 0x080002f1 Thumb Code 28 spi.o(.text)
MX_USART1_UART_Init 0x0800032d Thumb Code 52 usart.o(.text)
HAL_UART_MspInit 0x08000361 Thumb Code 76 usart.o(.text)
HAL_UART_MspDeInit 0x080003ad Thumb Code 30 usart.o(.text)
fputc 0x080003cb Thumb Code 20 usart.o(.text)
NMI_Handler 0x08000401 Thumb Code 2 stm32f1xx_it.o(.text)
HardFault_Handler 0x08000403 Thumb Code 8 stm32f1xx_it.o(.text)
MemManage_Handler 0x0800040b Thumb Code 2 stm32f1xx_it.o(.text)
BusFault_Handler 0x0800040d Thumb Code 2 stm32f1xx_it.o(.text)
UsageFault_Handler 0x0800040f Thumb Code 2 stm32f1xx_it.o(.text)
SVC_Handler 0x08000411 Thumb Code 2 stm32f1xx_it.o(.text)
DebugMon_Handler 0x08000413 Thumb Code 2 stm32f1xx_it.o(.text)
PendSV_Handler 0x08000415 Thumb Code 2 stm32f1xx_it.o(.text)
SysTick_Handler 0x08000417 Thumb Code 14 stm32f1xx_it.o(.text)
HAL_MspInit 0x08000439 Thumb Code 118 stm32f1xx_hal_msp.o(.text)
HAL_SPI_Init 0x080004b9 Thumb Code 130 stm32f1xx_hal_spi_ex.o(.text)
HAL_UART_Init 0x080006ab Thumb Code 98 stm32f1xx_hal_uart.o(.text)
HAL_HalfDuplex_Init 0x0800070d Thumb Code 108 stm32f1xx_hal_uart.o(.text)
HAL_LIN_Init 0x08000779 Thumb Code 122 stm32f1xx_hal_uart.o(.text)
HAL_MultiProcessor_Init 0x080007f3 Thumb Code 128 stm32f1xx_hal_uart.o(.text)
HAL_UART_DeInit 0x08000875 Thumb Code 40 stm32f1xx_hal_uart.o(.text)
HAL_UART_Transmit 0x080008ff Thumb Code 190 stm32f1xx_hal_uart.o(.text)
HAL_UART_Receive 0x080009bd Thumb Code 182 stm32f1xx_hal_uart.o(.text)
HAL_UART_Transmit_IT 0x08000a73 Thumb Code 62 stm32f1xx_hal_uart.o(.text)
HAL_UART_Receive_IT 0x08000ab1 Thumb Code 82 stm32f1xx_hal_uart.o(.text)
HAL_UART_ErrorCallback 0x08000b03 Thumb Code 2 stm32f1xx_hal_uart.o(.text)
HAL_UART_TxHalfCpltCallback 0x08000b4f Thumb Code 2 stm32f1xx_hal_uart.o(.text)
HAL_UART_TxCpltCallback 0x08000b5b Thumb Code 2 stm32f1xx_hal_uart.o(.text)
HAL_UART_Transmit_DMA 0x08000b8b Thumb Code 114 stm32f1xx_hal_uart.o(.text)
HAL_UART_RxHalfCpltCallback 0x08000bfd Thumb Code 2 stm32f1xx_hal_uart.o(.text)
HAL_UART_RxCpltCallback 0x08000c09 Thumb Code 2 stm32f1xx_hal_uart.o(.text)
HAL_UART_Receive_DMA 0x08000c47 Thumb Code 138 stm32f1xx_hal_uart.o(.text)
HAL_UART_DMAPause 0x08000cd1 Thumb Code 102 stm32f1xx_hal_uart.o(.text)
HAL_UART_DMAResume 0x08000d37 Thumb Code 94 stm32f1xx_hal_uart.o(.text)
HAL_UART_DMAStop 0x08000d95 Thumb Code 88 stm32f1xx_hal_uart.o(.text)
HAL_UART_Abort 0x08000ded Thumb Code 104 stm32f1xx_hal_uart.o(.text)
HAL_UART_AbortTransmit 0x08000e55 Thumb Code 58 stm32f1xx_hal_uart.o(.text)
HAL_UART_AbortReceive 0x08000e8f Thumb Code 68 stm32f1xx_hal_uart.o(.text)
HAL_UART_AbortCpltCallback 0x08000ed3 Thumb Code 2 stm32f1xx_hal_uart.o(.text)
HAL_UART_Abort_IT 0x08000f29 Thumb Code 192 stm32f1xx_hal_uart.o(.text)
HAL_UART_AbortTransmitCpltCallback 0x08000fe9 Thumb Code 2 stm32f1xx_hal_uart.o(.text)
HAL_UART_AbortTransmit_IT 0x08000fff Thumb Code 78 stm32f1xx_hal_uart.o(.text)
HAL_UART_AbortReceiveCpltCallback 0x0800104d Thumb Code 2 stm32f1xx_hal_uart.o(.text)
HAL_UART_AbortReceive_IT 0x08001063 Thumb Code 88 stm32f1xx_hal_uart.o(.text)
HAL_UART_IRQHandler 0x08001161 Thumb Code 264 stm32f1xx_hal_uart.o(.text)
HAL_LIN_SendBreak 0x08001269 Thumb Code 46 stm32f1xx_hal_uart.o(.text)
HAL_MultiProcessor_EnterMuteMode 0x08001297 Thumb Code 46 stm32f1xx_hal_uart.o(.text)
HAL_MultiProcessor_ExitMuteMode 0x080012c5 Thumb Code 46 stm32f1xx_hal_uart.o(.text)
HAL_HalfDuplex_EnableTransmitter 0x080012f3 Thumb Code 50 stm32f1xx_hal_uart.o(.text)
HAL_HalfDuplex_EnableReceiver 0x08001325 Thumb Code 50 stm32f1xx_hal_uart.o(.text)
HAL_UART_GetState 0x08001357 Thumb Code 10 stm32f1xx_hal_uart.o(.text)
HAL_UART_GetError 0x08001361 Thumb Code 4 stm32f1xx_hal_uart.o(.text)
HAL_RCC_DeInit 0x08001401 Thumb Code 202 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_OscConfig 0x080014cb Thumb Code 752 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_GetSysClockFreq 0x080017bb Thumb Code 120 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_ClockConfig 0x08001833 Thumb Code 320 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_MCOConfig 0x08001973 Thumb Code 64 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_EnableCSS 0x080019b3 Thumb Code 8 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_DisableCSS 0x080019bb Thumb Code 8 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_GetHCLKFreq 0x080019c3 Thumb Code 6 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_GetPCLK1Freq 0x080019c9 Thumb Code 20 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_GetPCLK2Freq 0x080019dd Thumb Code 20 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_GetOscConfig 0x080019f1 Thumb Code 140 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_GetClockConfig 0x08001a7d Thumb Code 54 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_CSSCallback 0x08001ab3 Thumb Code 2 stm32f1xx_hal_rcc.o(.text)
HAL_RCC_NMI_IRQHandler 0x08001ab5 Thumb Code 20 stm32f1xx_hal_rcc.o(.text)
HAL_GPIO_Init 0x08001ae9 Thumb Code 446 stm32f1xx_hal_gpio.o(.text)
HAL_GPIO_DeInit 0x08001ca7 Thumb Code 224 stm32f1xx_hal_gpio.o(.text)
HAL_GPIO_ReadPin 0x08001d87 Thumb Code 10 stm32f1xx_hal_gpio.o(.text)
HAL_GPIO_WritePin 0x08001d91 Thumb Code 10 stm32f1xx_hal_gpio.o(.text)
HAL_GPIO_TogglePin 0x08001d9b Thumb Code 8 stm32f1xx_hal_gpio.o(.text)
HAL_GPIO_LockPin 0x08001da3 Thumb Code 34 stm32f1xx_hal_gpio.o(.text)
HAL_GPIO_EXTI_Callback 0x08001dc5 Thumb Code 2 stm32f1xx_hal_gpio.o(.text)
HAL_GPIO_EXTI_IRQHandler 0x08001dc7 Thumb Code 20 stm32f1xx_hal_gpio.o(.text)
HAL_InitTick 0x08001e07 Thumb Code 54 stm32f1xx_hal.o(.text)
HAL_Init 0x08001e3d Thumb Code 32 stm32f1xx_hal.o(.text)
HAL_MspDeInit 0x08001e5d Thumb Code 2 stm32f1xx_hal.o(.text)
HAL_DeInit 0x08001e5f Thumb Code 26 stm32f1xx_hal.o(.text)
HAL_IncTick 0x08001e79 Thumb Code 12 stm32f1xx_hal.o(.text)
HAL_GetTick 0x08001e85 Thumb Code 6 stm32f1xx_hal.o(.text)
HAL_GetTickPrio 0x08001e8b Thumb Code 6 stm32f1xx_hal.o(.text)
HAL_SetTickFreq 0x08001e91 Thumb Code 24 stm32f1xx_hal.o(.text)
HAL_GetTickFreq 0x08001ea9 Thumb Code 6 stm32f1xx_hal.o(.text)
HAL_Delay 0x08001eaf Thumb Code 32 stm32f1xx_hal.o(.text)
HAL_SuspendTick 0x08001ecf Thumb Code 14 stm32f1xx_hal.o(.text)
HAL_ResumeTick 0x08001edd Thumb Code 14 stm32f1xx_hal.o(.text)
HAL_GetHalVersion 0x08001eeb Thumb Code 4 stm32f1xx_hal.o(.text)
HAL_GetREVID 0x08001eef Thumb Code 8 stm32f1xx_hal.o(.text)
HAL_GetDEVID 0x08001ef7 Thumb Code 10 stm32f1xx_hal.o(.text)
HAL_DBGMCU_EnableDBGSleepMode 0x08001f01 Thumb Code 12 stm32f1xx_hal.o(.text)
HAL_DBGMCU_DisableDBGSleepMode 0x08001f0d Thumb Code 12 stm32f1xx_hal.o(.text)
HAL_DBGMCU_EnableDBGStopMode 0x08001f19 Thumb Code 12 stm32f1xx_hal.o(.text)
HAL_DBGMCU_DisableDBGStopMode 0x08001f25 Thumb Code 12 stm32f1xx_hal.o(.text)
HAL_DBGMCU_EnableDBGStandbyMode 0x08001f31 Thumb Code 12 stm32f1xx_hal.o(.text)
HAL_DBGMCU_DisableDBGStandbyMode 0x08001f3d Thumb Code 12 stm32f1xx_hal.o(.text)
HAL_GetUID 0x08001f49 Thumb Code 24 stm32f1xx_hal.o(.text)
HAL_DMA_Init 0x08001f7d Thumb Code 120 stm32f1xx_hal_dma.o(.text)
HAL_DMA_DeInit 0x08001ff5 Thumb Code 108 stm32f1xx_hal_dma.o(.text)
HAL_DMA_Start 0x0800208b Thumb Code 80 stm32f1xx_hal_dma.o(.text)
HAL_DMA_Start_IT 0x080020db Thumb Code 112 stm32f1xx_hal_dma.o(.text)
HAL_DMA_Abort 0x0800214b Thumb Code 48 stm32f1xx_hal_dma.o(.text)
HAL_DMA_Abort_IT 0x0800217b Thumb Code 296 stm32f1xx_hal_dma.o(.text)
HAL_DMA_PollForTransfer 0x080022a3 Thumb Code 998 stm32f1xx_hal_dma.o(.text)
HAL_DMA_IRQHandler 0x08002689 Thumb Code 574 stm32f1xx_hal_dma.o(.text)
HAL_DMA_RegisterCallback 0x080028c7 Thumb Code 74 stm32f1xx_hal_dma.o(.text)
HAL_DMA_UnRegisterCallback 0x08002911 Thumb Code 82 stm32f1xx_hal_dma.o(.text)
HAL_DMA_GetState 0x08002963 Thumb Code 6 stm32f1xx_hal_dma.o(.text)
HAL_DMA_GetError 0x08002969 Thumb Code 4 stm32f1xx_hal_dma.o(.text)
HAL_NVIC_SetPriorityGrouping 0x08002975 Thumb Code 26 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_SetPriority 0x0800298f Thumb Code 60 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_EnableIRQ 0x080029cb Thumb Code 22 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_DisableIRQ 0x080029e1 Thumb Code 22 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_SystemReset 0x080029f7 Thumb Code 28 stm32f1xx_hal_cortex.o(.text)
HAL_SYSTICK_Config 0x08002a13 Thumb Code 40 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_GetPriorityGrouping 0x08002a3b Thumb Code 10 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_GetPriority 0x08002a45 Thumb Code 82 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_SetPendingIRQ 0x08002a97 Thumb Code 22 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_GetPendingIRQ 0x08002aad Thumb Code 32 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_ClearPendingIRQ 0x08002acd Thumb Code 22 stm32f1xx_hal_cortex.o(.text)
HAL_NVIC_GetActive 0x08002ae3 Thumb Code 32 stm32f1xx_hal_cortex.o(.text)
HAL_SYSTICK_CLKSourceConfig 0x08002b03 Thumb Code 24 stm32f1xx_hal_cortex.o(.text)
HAL_SYSTICK_Callback 0x08002b1b Thumb Code 2 stm32f1xx_hal_cortex.o(.text)
HAL_SYSTICK_IRQHandler 0x08002b1d Thumb Code 8 stm32f1xx_hal_cortex.o(.text)
SystemInit 0x08002b4d Thumb Code 56 system_stm32f1xx.o(.text)
SystemCoreClockUpdate 0x08002b85 Thumb Code 82 system_stm32f1xx.o(.text)
__aeabi_uidiv 0x08002bf9 Thumb Code 0 uidiv.o(.text)
__aeabi_uidivmod 0x08002bf9 Thumb Code 44 uidiv.o(.text)
__scatterload 0x08002c25 Thumb Code 28 init.o(.text)
__scatterload_rt2 0x08002c25 Thumb Code 0 init.o(.text)
__0printf$3 0x08002c49 Thumb Code 22 printf3.o(i.__0printf$3)
__1printf$3 0x08002c49 Thumb Code 0 printf3.o(i.__0printf$3)
__2printf 0x08002c49 Thumb Code 0 printf3.o(i.__0printf$3)
__scatterload_copy 0x08002c69 Thumb Code 14 handlers.o(i.__scatterload_copy)
__scatterload_null 0x08002c77 Thumb Code 2 handlers.o(i.__scatterload_null)
__scatterload_zeroinit 0x08002c79 Thumb Code 14 handlers.o(i.__scatterload_zeroinit)
AHBPrescTable 0x08002e40 Data 16 system_stm32f1xx.o(.constdata)
APBPrescTable 0x08002e50 Data 8 system_stm32f1xx.o(.constdata)
Region$$Table$$Base 0x08002e58 Number 0 anon$$obj.o(Region$$Table)
Region$$Table$$Limit 0x08002e78 Number 0 anon$$obj.o(Region$$Table)
uwTickFreq 0x20000000 Data 1 stm32f1xx_hal.o(.data)
uwTickPrio 0x20000004 Data 4 stm32f1xx_hal.o(.data)
uwTick 0x20000008 Data 4 stm32f1xx_hal.o(.data)
SystemCoreClock 0x2000000c Data 4 system_stm32f1xx.o(.data)
Font12 0x20000010 Data 8 font12.o(.data)
Font12CN 0x20000018 Data 12 font12cn.o(.data)
Font16 0x20000024 Data 8 font16.o(.data)
Font24CN 0x2000002c Data 12 font24cn.o(.data)
__stdout 0x20000038 Data 4 stdout.o(.data)
__microlib_freelist 0x2000003c Data 4 mvars.o(.data)
__microlib_freelist_initialised 0x20000040 Data 4 mvars.o(.data)
hspi1 0x20000044 Data 88 spi.o(.bss)
huart1 0x2000009c Data 64 usart.o(.bss)
Paint 0x200000dc Data 24 gui_paint.o(.bss)
__heap_base 0x200000f8 Data 0 startup_stm32f103xe.o(HEAP)
__heap_limit 0x2000a0f8 Data 0 startup_stm32f103xe.o(HEAP)
__initial_sp 0x2000b0f8 Data 0 startup_stm32f103xe.o(STACK)
__stdout 0x20000010 Data 4 stdout.o(.data)
hspi1 0x20000014 Data 88 spi.o(.bss)
huart1 0x2000006c Data 64 usart.o(.bss)
__initial_sp 0x200010b0 Data 0 startup_stm32f103xe.o(STACK)
@ -2117,86 +2032,62 @@ Memory Map of the image
Image Entry point : 0x08000131
Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00011650, Max: 0x00080000, ABSOLUTE)
Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00002e8c, Max: 0x00080000, ABSOLUTE)
Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x0001160c, Max: 0x00080000, ABSOLUTE)
Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00002e78, Max: 0x00080000, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x08000000 0x08000000 0x00000130 Data RO 3 RESET startup_stm32f103xe.o
0x08000130 0x08000130 0x00000000 Code RO 2736 * .ARM.Collect$$$$00000000 mc_w.l(entry.o)
0x08000130 0x08000130 0x00000004 Code RO 3036 .ARM.Collect$$$$00000001 mc_w.l(entry2.o)
0x08000134 0x08000134 0x00000004 Code RO 3039 .ARM.Collect$$$$00000004 mc_w.l(entry5.o)
0x08000138 0x08000138 0x00000000 Code RO 3041 .ARM.Collect$$$$00000008 mc_w.l(entry7b.o)
0x08000138 0x08000138 0x00000000 Code RO 3043 .ARM.Collect$$$$0000000A mc_w.l(entry8b.o)
0x08000138 0x08000138 0x00000008 Code RO 3044 .ARM.Collect$$$$0000000B mc_w.l(entry9a.o)
0x08000140 0x08000140 0x00000000 Code RO 3046 .ARM.Collect$$$$0000000D mc_w.l(entry10a.o)
0x08000140 0x08000140 0x00000000 Code RO 3048 .ARM.Collect$$$$0000000F mc_w.l(entry11a.o)
0x08000140 0x08000140 0x00000004 Code RO 3037 .ARM.Collect$$$$00002712 mc_w.l(entry2.o)
0x08000130 0x08000130 0x00000000 Code RO 2791 * .ARM.Collect$$$$00000000 mc_w.l(entry.o)
0x08000130 0x08000130 0x00000004 Code RO 3091 .ARM.Collect$$$$00000001 mc_w.l(entry2.o)
0x08000134 0x08000134 0x00000004 Code RO 3094 .ARM.Collect$$$$00000004 mc_w.l(entry5.o)
0x08000138 0x08000138 0x00000000 Code RO 3096 .ARM.Collect$$$$00000008 mc_w.l(entry7b.o)
0x08000138 0x08000138 0x00000000 Code RO 3098 .ARM.Collect$$$$0000000A mc_w.l(entry8b.o)
0x08000138 0x08000138 0x00000008 Code RO 3099 .ARM.Collect$$$$0000000B mc_w.l(entry9a.o)
0x08000140 0x08000140 0x00000000 Code RO 3101 .ARM.Collect$$$$0000000D mc_w.l(entry10a.o)
0x08000140 0x08000140 0x00000000 Code RO 3103 .ARM.Collect$$$$0000000F mc_w.l(entry11a.o)
0x08000140 0x08000140 0x00000004 Code RO 3092 .ARM.Collect$$$$00002712 mc_w.l(entry2.o)
0x08000144 0x08000144 0x00000024 Code RO 4 .text startup_stm32f103xe.o
0x08000168 0x08000168 0x000000c0 Code RO 13 .text main.o
0x08000228 0x08000228 0x00000054 Code RO 152 .text gpio.o
0x0800027c 0x0800027c 0x000000b4 Code RO 176 .text spi.o
0x08000330 0x08000330 0x000000d4 Code RO 206 .text usart.o
0x08000404 0x08000404 0x00000038 Code RO 236 .text stm32f1xx_it.o
0x0800043c 0x0800043c 0x00000080 Code RO 263 .text stm32f1xx_hal_msp.o
0x080004bc 0x080004bc 0x00001204 Code RO 311 .text stm32f1xx_hal_spi.o
0x080016c0 0x080016c0 0x00000082 Code RO 335 .text stm32f1xx_hal_spi_ex.o
0x08001742 0x08001742 0x00000002 PAD
0x08001744 0x08001744 0x00000ec4 Code RO 395 .text stm32f1xx_hal_uart.o
0x08002608 0x08002608 0x000006e8 Code RO 419 .text stm32f1xx_hal_rcc.o
0x08002cf0 0x08002cf0 0x0000031c Code RO 468 .text stm32f1xx_hal_gpio.o
0x0800300c 0x0800300c 0x00000178 Code RO 492 .text stm32f1xx_hal.o
0x08003184 0x08003184 0x000009f8 Code RO 519 .text stm32f1xx_hal_dma.o
0x08003b7c 0x08003b7c 0x000001d8 Code RO 543 .text stm32f1xx_hal_cortex.o
0x08003d54 0x08003d54 0x000000ac Code RO 647 .text system_stm32f1xx.o
0x08003e00 0x08003e00 0x00000368 Code RO 1438 .text epd_5in83_v2_test.o
0x08004168 0x08004168 0x00000258 Code RO 2364 .text epd_5in83_v2.o
0x080043c0 0x080043c0 0x00000068 Code RO 2580 .text dev_config.o
0x08004428 0x08004428 0x00000e04 Code RO 2605 .text gui_paint.o
0x0800522c 0x0800522c 0x00000024 Code RO 2743 .text mc_w.l(memseta.o)
0x08005250 0x08005250 0x0000002c Code RO 3051 .text mc_w.l(uidiv.o)
0x0800527c 0x0800527c 0x00000024 Code RO 3068 .text mc_w.l(init.o)
0x080052a0 0x080052a0 0x00000020 Code RO 2836 i.__0printf$3 mc_w.l(printf3.o)
0x080052c0 0x080052c0 0x0000000e Code RO 3078 i.__scatterload_copy mc_w.l(handlers.o)
0x080052ce 0x080052ce 0x00000002 Code RO 3079 i.__scatterload_null mc_w.l(handlers.o)
0x080052d0 0x080052d0 0x0000000e Code RO 3080 i.__scatterload_zeroinit mc_w.l(handlers.o)
0x080052de 0x080052de 0x00000002 PAD
0x080052e0 0x080052e0 0x000001b8 Code RO 2843 i._printf_core mc_w.l(printf3.o)
0x08005498 0x08005498 0x00000050 Code RO 3008 i.free mc_w.l(malloc.o)
0x080054e8 0x080054e8 0x0000006c Code RO 3009 i.malloc mc_w.l(malloc.o)
0x08005554 0x08005554 0x00000010 Data RO 648 .constdata system_stm32f1xx.o
0x08005564 0x08005564 0x00000008 Data RO 649 .constdata system_stm32f1xx.o
0x0800556c 0x0800556c 0x000097e6 Data RO 707 .constdata imagedata.o
0x0800ed52 0x0800ed52 0x00000474 Data RO 2652 .constdata font12.o
0x0800f1c6 0x0800f1c6 0x000005d6 Data RO 2666 .constdata font12cn.o
0x0800f79c 0x0800f79c 0x00000be0 Data RO 2680 .constdata font16.o
0x0801037c 0x0801037c 0x00001182 Data RO 2722 .constdata font24cn.o
0x080114fe 0x080114fe 0x00000002 PAD
0x08011500 0x08011500 0x000000e9 Data RO 2607 .conststring gui_paint.o
0x080115e9 0x080115e9 0x00000003 PAD
0x080115ec 0x080115ec 0x00000020 Data RO 3076 Region$$Table anon$$obj.o
0x08000168 0x08000168 0x000000bc Code RO 13 .text main.o
0x08000224 0x08000224 0x00000054 Code RO 152 .text gpio.o
0x08000278 0x08000278 0x000000b4 Code RO 176 .text spi.o
0x0800032c 0x0800032c 0x000000d4 Code RO 206 .text usart.o
0x08000400 0x08000400 0x00000038 Code RO 236 .text stm32f1xx_it.o
0x08000438 0x08000438 0x00000080 Code RO 263 .text stm32f1xx_hal_msp.o
0x080004b8 0x080004b8 0x00000082 Code RO 335 .text stm32f1xx_hal_spi_ex.o
0x0800053a 0x0800053a 0x00000002 PAD
0x0800053c 0x0800053c 0x00000ec4 Code RO 395 .text stm32f1xx_hal_uart.o
0x08001400 0x08001400 0x000006e8 Code RO 419 .text stm32f1xx_hal_rcc.o
0x08001ae8 0x08001ae8 0x0000031c Code RO 468 .text stm32f1xx_hal_gpio.o
0x08001e04 0x08001e04 0x00000178 Code RO 492 .text stm32f1xx_hal.o
0x08001f7c 0x08001f7c 0x000009f8 Code RO 519 .text stm32f1xx_hal_dma.o
0x08002974 0x08002974 0x000001d8 Code RO 543 .text stm32f1xx_hal_cortex.o
0x08002b4c 0x08002b4c 0x000000ac Code RO 647 .text system_stm32f1xx.o
0x08002bf8 0x08002bf8 0x0000002c Code RO 3106 .text mc_w.l(uidiv.o)
0x08002c24 0x08002c24 0x00000024 Code RO 3123 .text mc_w.l(init.o)
0x08002c48 0x08002c48 0x00000020 Code RO 2891 i.__0printf$3 mc_w.l(printf3.o)
0x08002c68 0x08002c68 0x0000000e Code RO 3133 i.__scatterload_copy mc_w.l(handlers.o)
0x08002c76 0x08002c76 0x00000002 Code RO 3134 i.__scatterload_null mc_w.l(handlers.o)
0x08002c78 0x08002c78 0x0000000e Code RO 3135 i.__scatterload_zeroinit mc_w.l(handlers.o)
0x08002c86 0x08002c86 0x00000002 PAD
0x08002c88 0x08002c88 0x000001b8 Code RO 2898 i._printf_core mc_w.l(printf3.o)
0x08002e40 0x08002e40 0x00000010 Data RO 648 .constdata system_stm32f1xx.o
0x08002e50 0x08002e50 0x00000008 Data RO 649 .constdata system_stm32f1xx.o
0x08002e58 0x08002e58 0x00000020 Data RO 3131 Region$$Table anon$$obj.o
Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x0801160c, Size: 0x0000b0f8, Max: 0x00010000, ABSOLUTE)
Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08002e78, Size: 0x000010b0, Max: 0x00010000, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x20000000 0x0801160c 0x0000000c Data RW 493 .data stm32f1xx_hal.o
0x2000000c 0x08011618 0x00000004 Data RW 650 .data system_stm32f1xx.o
0x20000010 0x0801161c 0x00000008 Data RW 2653 .data font12.o
0x20000018 0x08011624 0x0000000c Data RW 2667 .data font12cn.o
0x20000024 0x08011630 0x00000008 Data RW 2681 .data font16.o
0x2000002c 0x08011638 0x0000000c Data RW 2723 .data font24cn.o
0x20000038 0x08011644 0x00000004 Data RW 3050 .data mc_w.l(stdout.o)
0x2000003c 0x08011648 0x00000004 Data RW 3055 .data mc_w.l(mvars.o)
0x20000040 0x0801164c 0x00000004 Data RW 3056 .data mc_w.l(mvars.o)
0x20000044 - 0x00000058 Zero RW 177 .bss spi.o
0x2000009c - 0x00000040 Zero RW 207 .bss usart.o
0x200000dc - 0x00000018 Zero RW 2606 .bss gui_paint.o
0x200000f4 0x08011650 0x00000004 PAD
0x200000f8 - 0x0000a000 Zero RW 2 HEAP startup_stm32f103xe.o
0x2000a0f8 - 0x00001000 Zero RW 1 STACK startup_stm32f103xe.o
0x20000000 0x08002e78 0x0000000c Data RW 493 .data stm32f1xx_hal.o
0x2000000c 0x08002e84 0x00000004 Data RW 650 .data system_stm32f1xx.o
0x20000010 0x08002e88 0x00000004 Data RW 3105 .data mc_w.l(stdout.o)
0x20000014 - 0x00000058 Zero RW 177 .bss spi.o
0x2000006c - 0x00000040 Zero RW 207 .bss usart.o
0x200000ac 0x08002e8c 0x00000004 PAD
0x200000b0 - 0x00001000 Zero RW 1 STACK startup_stm32f103xe.o
==============================================================================
@ -2206,26 +2097,16 @@ Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug Object Name
104 10 0 0 0 780 dev_config.o
600 60 0 0 0 2555 epd_5in83_v2.o
872 366 0 0 0 1256 epd_5in83_v2_test.o
0 0 1140 8 0 1361 font12.o
0 0 1494 12 0 1363 font12cn.o
0 0 3040 8 0 1361 font16.o
0 0 4482 12 0 1363 font24cn.o
84 8 0 0 0 799 gpio.o
3588 660 233 0 24 13545 gui_paint.o
0 0 38886 0 0 3005 imagedata.o
192 36 0 0 0 460465 main.o
188 36 0 0 0 459599 main.o
180 32 0 0 88 1413 spi.o
36 8 304 0 45056 796 startup_stm32f103xe.o
36 8 304 0 4096 796 startup_stm32f103xe.o
376 28 0 12 0 4769 stm32f1xx_hal.o
472 8 0 0 0 27198 stm32f1xx_hal_cortex.o
2552 66 0 0 0 6117 stm32f1xx_hal_dma.o
796 42 0 0 0 4263 stm32f1xx_hal_gpio.o
128 10 0 0 0 858 stm32f1xx_hal_msp.o
1768 78 0 0 0 5641 stm32f1xx_hal_rcc.o
4612 92 0 0 0 17361 stm32f1xx_hal_spi.o
130 0 0 0 0 1051 stm32f1xx_hal_spi_ex.o
3780 46 0 0 0 15932 stm32f1xx_hal_uart.o
56 20 0 0 0 1286 stm32f1xx_it.o
@ -2233,9 +2114,9 @@ Image component sizes
212 34 0 0 64 1657 usart.o
----------------------------------------------------------------------
20712 1638 49640 56 45236 577680 Object Totals
10932 450 360 16 4252 532864 Object Totals
0 0 32 0 0 0 (incl. Generated)
2 0 5 0 4 0 (incl. Padding)
2 0 0 0 4 0 (incl. Padding)
----------------------------------------------------------------------
@ -2251,25 +2132,22 @@ Image component sizes
8 4 0 0 0 0 entry9a.o
30 0 0 0 0 0 handlers.o
36 8 0 0 0 68 init.o
188 20 0 0 0 160 malloc.o
36 0 0 0 0 108 memseta.o
0 0 0 8 0 0 mvars.o
472 14 0 0 0 184 printf3.o
0 0 0 4 0 0 stdout.o
44 0 0 0 0 80 uidiv.o
----------------------------------------------------------------------
828 50 0 12 0 600 Library Totals
604 30 0 4 0 332 Library Totals
2 0 0 0 0 0 (incl. Padding)
----------------------------------------------------------------------
Code (inc. data) RO Data RW Data ZI Data Debug Library Name
826 50 0 12 0 600 mc_w.l
602 30 0 4 0 332 mc_w.l
----------------------------------------------------------------------
828 50 0 12 0 600 Library Totals
604 30 0 4 0 332 Library Totals
----------------------------------------------------------------------
@ -2278,15 +2156,15 @@ Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug
21540 1688 49640 68 45236 576092 Grand Totals
21540 1688 49640 68 45236 576092 ELF Image Totals
21540 1688 49640 68 0 0 ROM Totals
11536 480 360 20 4252 531684 Grand Totals
11536 480 360 20 4252 531684 ELF Image Totals
11536 480 360 20 0 0 ROM Totals
==============================================================================
Total RO Size (Code + RO Data) 71180 ( 69.51kB)
Total RW Size (RW Data + ZI Data) 45304 ( 44.24kB)
Total ROM Size (Code + RO Data + RW Data) 71248 ( 69.58kB)
Total RO Size (Code + RO Data) 11896 ( 11.62kB)
Total RW Size (RW Data + ZI Data) 4272 ( 4.17kB)
Total ROM Size (Code + RO Data + RW Data) 11916 ( 11.64kB)
==============================================================================

View file

@ -98,6 +98,8 @@ int main(void)
// EPD_3in7_test();
// EPD_4in01f_test();
// EPD_4in2_test();
// EPD_4in2bc_test();
// EPD_4in2b_V2_test();

View file

@ -0,0 +1,110 @@
/*****************************************************************************
* | File : EPD_4IN01F_test.c
* | Author : Waveshare team
* | Function : 4.01inch F e-paper test demo
* | Info :
*----------------
* | This version: V1.0
* | Date : 2020-12-25
* | 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_4IN01F.h"
#include "EPD_Test.h"
int EPD_4in01f_test(void)
{
printf("EPD_4in01f_test Demo\r\n");
if(DEV_Module_Init()!=0){
return -1;
}
printf("e-Paper Init and Clear...\r\n");
EPD_4IN01F_Init();
EPD_4IN01F_Clear(EPD_4IN01F_WHITE);
DEV_Delay_ms(100);
UBYTE *BlackImage;
/* you have to edit the startup_stm32fxxx.s file and set a big enough heap size */
UDOUBLE Imagesize = ((EPD_4IN01F_WIDTH % 2 == 0)? (EPD_4IN01F_WIDTH / 2 ): (EPD_4IN01F_WIDTH / 2 + 1)) * EPD_4IN01F_HEIGHT;
Imagesize = Imagesize/4;
printf("Not enough memory, only part of the window is displayed\r\n");
printf("Imagesize %d\r\n",Imagesize);
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) {
printf("Failed to apply for black memory...\r\n");
return -1;
}
Paint_NewImage(BlackImage, EPD_4IN01F_WIDTH/2, EPD_4IN01F_HEIGHT/2, 0, EPD_4IN01F_WHITE);
Paint_SetScale(7);
#if 1
EPD_4IN01F_Display(gImage_4in01);
DEV_Delay_ms(5000);
#endif
#if 1
Paint_Clear(EPD_4IN01F_WHITE);
printf("Drawing:BlackImage\r\n");
Paint_DrawPoint(10, 80, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT);
Paint_DrawPoint(10, 90, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT);
Paint_DrawPoint(10, 100, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT);
Paint_DrawLine(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(70, 70, 20, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawRectangle(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawRectangle(80, 70, 130, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawCircle(45, 95, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawCircle(105, 95, 20, WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawLine(85, 95, 125, 95, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawLine(105, 75, 105, 115, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawString_EN(10, 0, "waveshare", &Font16, BLACK, WHITE);
Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK);
Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE);
Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK);
Paint_DrawString_CN(10, 120, "ÄãºÃabc", &Font12CN, EPD_4IN01F_BLACK, WHITE);
Paint_DrawString_CN(10, 140, "ÄãºÃabc", &Font12CN, EPD_4IN01F_GREEN, WHITE);
Paint_DrawString_CN(10, 160, "ÄãºÃabc", &Font12CN, EPD_4IN01F_BLUE, WHITE);
Paint_DrawString_CN(10, 180, "ÄãºÃabc", &Font12CN, EPD_4IN01F_RED, WHITE);
Paint_DrawString_CN(10, 200, "ÄãºÃabc", &Font12CN, EPD_4IN01F_ORANGE, WHITE);
Paint_DrawString_CN(150, 0, "΢ѩµç×Ó", &Font24CN, WHITE, BLACK);
Paint_DrawString_CN(150, 40, "΢ѩµç×Ó", &Font24CN, EPD_4IN01F_GREEN, BLACK);
Paint_DrawString_CN(150, 80, "΢ѩµç×Ó", &Font24CN, EPD_4IN01F_BLUE, BLACK);
Paint_DrawString_CN(150, 120, "΢ѩµç×Ó", &Font24CN, EPD_4IN01F_RED, BLACK);
Paint_DrawString_CN(150, 160, "΢ѩµç×Ó", &Font24CN, EPD_4IN01F_YELLOW, BLACK);
EPD_4IN01F_Display_part(BlackImage, 0, 0, 320, 200);
DEV_Delay_ms(5000);
#endif
printf("e-Paper Clear...\r\n");
EPD_4IN01F_Clear(EPD_4IN01F_WHITE);
DEV_Delay_ms(1000);
EPD_4IN01F_Sleep();
free(BlackImage);
BlackImage = NULL;
// close 5V
printf("close 5V, Module enters 0 power consumption ...\r\n");
DEV_Module_Exit();
return 0;
}

View file

@ -37,10 +37,10 @@ int EPD_5in65f_test(void)
return -1;
}
printf("e-Paper Init and Clear...\r\n");
printf("e-Paper Init and Clear...\r\n");
EPD_5IN65F_Init();
EPD_5IN65F_Clear(EPD_5IN65F_WHITE);
DEV_Delay_ms(100);
DEV_Delay_ms(100);
UBYTE *BlackImage;
/* you have to edit the startup_stm32fxxx.s file and set a big enough heap size */

View file

@ -64,6 +64,8 @@ int EPD_2in66b_test(void);
int EPD_3in7_test(void);
int EPD_4in01f_test(void);
int EPD_4in2_test(void);
int EPD_4in2bc_test(void);
int EPD_4in2b_V2_test(void);

File diff suppressed because it is too large Load diff

View file

@ -64,6 +64,8 @@ extern const unsigned char gImage_2in66br[];
extern const unsigned char gImage_3in7[]; //4 Gray
extern const unsigned char gImage_4in01[];
extern const unsigned char gImage_4in2[];
extern const unsigned char gImage_4in2_4Gray[];
extern const unsigned char gImage_4in2bc_b[];

View file

@ -0,0 +1,216 @@
/*****************************************************************************
* | File : EPD_4IN01F.c
* | Author : Waveshare team
* | Function : 4.01inch e-paper
* | Info :
*----------------
* | This version: V1.0
* | Date : 2020-12-25
* | 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_4in01f.h"
/******************************************************************************
function : Software reset
parameter:
******************************************************************************/
static void EPD_4IN01F_Reset(void)
{
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(200);
DEV_Digital_Write(EPD_RST_PIN, 0);
DEV_Delay_ms(1);
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(200);
}
/******************************************************************************
function : send command
parameter:
Reg : Command register
******************************************************************************/
static void EPD_4IN01F_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_4IN01F_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);
}
static void EPD_4IN01F_BusyHigh(void)// If BUSYN=0 then waiting
{
while(!(DEV_Digital_Read(EPD_BUSY_PIN)));
}
static void EPD_4IN01F_BusyLow(void)// If BUSYN=1 then waiting
{
while(DEV_Digital_Read(EPD_BUSY_PIN));
}
/******************************************************************************
function : Initialize the e-Paper register
parameter:
******************************************************************************/
void EPD_4IN01F_Init(void)
{
EPD_4IN01F_Reset();
EPD_4IN01F_BusyHigh();
EPD_4IN01F_SendCommand(0x00);
EPD_4IN01F_SendData(0x2f);
EPD_4IN01F_SendData(0x00);
EPD_4IN01F_SendCommand(0x01);
EPD_4IN01F_SendData(0x37);
EPD_4IN01F_SendData(0x00);
EPD_4IN01F_SendData(0x05);
EPD_4IN01F_SendData(0x05);
EPD_4IN01F_SendCommand(0x03);
EPD_4IN01F_SendData(0x00);
EPD_4IN01F_SendCommand(0x06);
EPD_4IN01F_SendData(0xC7);
EPD_4IN01F_SendData(0xC7);
EPD_4IN01F_SendData(0x1D);
EPD_4IN01F_SendCommand(0x41);
EPD_4IN01F_SendData(0x00);
EPD_4IN01F_SendCommand(0x50);
EPD_4IN01F_SendData(0x37);
EPD_4IN01F_SendCommand(0x60);
EPD_4IN01F_SendData(0x22);
EPD_4IN01F_SendCommand(0x61);
EPD_4IN01F_SendData(0x02);
EPD_4IN01F_SendData(0x80);
EPD_4IN01F_SendData(0x01);
EPD_4IN01F_SendData(0x90);
EPD_4IN01F_SendCommand(0xE3);
EPD_4IN01F_SendData(0xAA);
}
/******************************************************************************
function : Clear screen
parameter:
******************************************************************************/
void EPD_4IN01F_Clear(UBYTE color)
{
EPD_4IN01F_SendCommand(0x61);//Set Resolution setting
EPD_4IN01F_SendData(0x02);
EPD_4IN01F_SendData(0x80);
EPD_4IN01F_SendData(0x01);
EPD_4IN01F_SendData(0x90);
EPD_4IN01F_SendCommand(0x10);
for(int i=0; i<EPD_4IN01F_WIDTH/2; i++) {
for(int j=0; j<EPD_4IN01F_HEIGHT; j++)
EPD_4IN01F_SendData((color<<4)|color);
}
EPD_4IN01F_SendCommand(0x04);//0x04
EPD_4IN01F_BusyHigh();
EPD_4IN01F_SendCommand(0x12);//0x12
EPD_4IN01F_BusyHigh();
EPD_4IN01F_SendCommand(0x02); //0x02
EPD_4IN01F_BusyLow();
DEV_Delay_ms(500);
}
/******************************************************************************
function : Sends the image buffer in RAM to e-Paper and displays
parameter:
******************************************************************************/
void EPD_4IN01F_Display(const UBYTE *image)
{
unsigned long i,j;
EPD_4IN01F_SendCommand(0x61);//Set Resolution setting
EPD_4IN01F_SendData(0x02);
EPD_4IN01F_SendData(0x80);
EPD_4IN01F_SendData(0x01);
EPD_4IN01F_SendData(0x90);
EPD_4IN01F_SendCommand(0x10);
for(i=0; i<EPD_4IN01F_HEIGHT; i++) {
for(j=0; j<EPD_4IN01F_WIDTH/2; j++)
EPD_4IN01F_SendData(image[j+((EPD_4IN01F_WIDTH/2)*i)]);
}
EPD_4IN01F_SendCommand(0x04);//0x04
EPD_4IN01F_BusyHigh();
EPD_4IN01F_SendCommand(0x12);//0x12
EPD_4IN01F_BusyHigh();
EPD_4IN01F_SendCommand(0x02); //0x02
EPD_4IN01F_BusyLow();
DEV_Delay_ms(200);
}
/******************************************************************************
function : Sends the part image buffer in RAM to e-Paper and displays
parameter:
******************************************************************************/
void EPD_4IN01F_Display_part(const UBYTE *image, UWORD xstart, UWORD ystart,
UWORD image_width, UWORD image_heigh)
{
unsigned long i,j;
EPD_4IN01F_SendCommand(0x61);//Set Resolution setting
EPD_4IN01F_SendData(0x02);
EPD_4IN01F_SendData(0x80);
EPD_4IN01F_SendData(0x01);
EPD_4IN01F_SendData(0x90);
EPD_4IN01F_SendCommand(0x10);
for(i=0; i<EPD_4IN01F_HEIGHT; i++) {
for(j=0; j< EPD_4IN01F_WIDTH/2; j++) {
if(i<image_heigh+ystart && i>=ystart && j<(image_width+xstart)/2 && j>=xstart/2) {
EPD_4IN01F_SendData(image[(j-xstart/2) + (image_width/2*(i-ystart))]);
}
else {
EPD_4IN01F_SendData(0x11);
}
}
}
EPD_4IN01F_SendCommand(0x04);//0x04
EPD_4IN01F_BusyHigh();
EPD_4IN01F_SendCommand(0x12);//0x12
EPD_4IN01F_BusyHigh();
EPD_4IN01F_SendCommand(0x02); //0x02
EPD_4IN01F_BusyLow();
DEV_Delay_ms(200);
}
/******************************************************************************
function : Enter sleep mode
parameter:
******************************************************************************/
void EPD_4IN01F_Sleep(void)
{
DEV_Delay_ms(100);
EPD_4IN01F_SendCommand(0x07);
EPD_4IN01F_SendData(0xA5);
}

View file

@ -0,0 +1,60 @@
/*****************************************************************************
* | File : EPD_4IN01F.h
* | Author : Waveshare team
* | Function : 4.01inch e-paper
* | Info :
*----------------
* | This version: V1.0
* | Date : 2020-12-25
* | 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.
#
******************************************************************************/
#ifndef __EPD_4IN01F_H__
#define __EPD_4IN01F_H__
#include "DEV_Config.h"
/**********************************
Color Index
**********************************/
#define EPD_4IN01F_BLACK 0x0 /// 000
#define EPD_4IN01F_WHITE 0x1 /// 001
#define EPD_4IN01F_GREEN 0x2 /// 010
#define EPD_4IN01F_BLUE 0x3 /// 011
#define EPD_4IN01F_RED 0x4 /// 100
#define EPD_4IN01F_YELLOW 0x5 /// 101
#define EPD_4IN01F_ORANGE 0x6 /// 110
#define EPD_4IN01F_CLEAN 0x7 /// 111 unavailable Afterimage
#define EPD_4IN01F_WIDTH 640
#define EPD_4IN01F_HEIGHT 400
void EPD_4IN01F_Clear(UBYTE color);
void EPD_4IN01F_Sleep(void);
void EPD_4IN01F_Display(const UBYTE *image);
void EPD_4IN01F_Init(void);
void EPD_4IN01F_Display_part(const UBYTE *image, UWORD xstart, UWORD ystart, UWORD image_width, UWORD image_heigh);
#endif

View file

@ -40,7 +40,7 @@ static void EPD_4IN2B_V2_Reset(void)
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(200);
DEV_Digital_Write(EPD_RST_PIN, 0);
DEV_Delay_ms(5);
DEV_Delay_ms(2);
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(200);
}

View file

@ -149,46 +149,6 @@ void EPD_5IN65F_Clear(UBYTE color)
DEV_Delay_ms(500);
}
/******************************************************************************
function : show 7 kind of color block
parameter:
******************************************************************************/
void EPD_5IN65F_Show7Block(void)
{
unsigned long i,j,k;
unsigned char const Color_seven[8] =
{EPD_5IN65F_BLACK,EPD_5IN65F_BLUE,EPD_5IN65F_GREEN,EPD_5IN65F_ORANGE,
EPD_5IN65F_RED,EPD_5IN65F_YELLOW,EPD_5IN65F_WHITE,EPD_5IN65F_WHITE};
EPD_5IN65F_SendCommand(0x61);//Set Resolution setting
EPD_5IN65F_SendData(0x02);
EPD_5IN65F_SendData(0x58);
EPD_5IN65F_SendData(0x01);
EPD_5IN65F_SendData(0xC0);
EPD_5IN65F_SendCommand(0x10);
for(i=0; i<224; i++) {
for(k = 0 ; k < 4; k ++) {
for(j = 0 ; j < 75; j ++) {
EPD_5IN65F_SendData((Color_seven[k]<<4) |Color_seven[k]);
}
}
}
for(i=0; i<224; i++) {
for(k = 4 ; k < 8; k ++) {
for(j = 0 ; j < 75; j ++) {
EPD_5IN65F_SendData((Color_seven[k]<<4) |Color_seven[k]);
}
}
}
EPD_5IN65F_SendCommand(0x04);//0x04
EPD_5IN65F_BusyHigh();
EPD_5IN65F_SendCommand(0x12);//0x12
EPD_5IN65F_BusyHigh();
EPD_5IN65F_SendCommand(0x02); //0x02
EPD_5IN65F_BusyLow();
DEV_Delay_ms(200);
}
/******************************************************************************
function : Sends the image buffer in RAM to e-Paper and displays
parameter:

View file

@ -49,7 +49,6 @@ Color Index
#define EPD_5IN65F_HEIGHT 448
void EPD_5IN65F_Clear(UBYTE color);
void EPD_5IN65F_Show7Block(void);
void EPD_5IN65F_Sleep(void);
void EPD_5IN65F_Display(const UBYTE *image);
void EPD_5IN65F_Init(void);