diff --git a/Example/EpaperModuleTest_APM32F103/Epaper/epaper.c b/Example/EpaperModuleTest_APM32F103/Epaper/epaper.c index 0514bfd..5120719 100644 --- a/Example/EpaperModuleTest_APM32F103/Epaper/epaper.c +++ b/Example/EpaperModuleTest_APM32F103/Epaper/epaper.c @@ -219,6 +219,7 @@ uint8_t epd_init(void) if (epd_wait_busy()) return 1; + #if defined(EPD_29) || defined(EPD_213) || defined(EPD_154) epd_write_reg(0x01); // Driver output control #if defined(EPD_29) || defined(EPD_213) epd_write_data(0x27); @@ -262,6 +263,21 @@ uint8_t epd_init(void) epd_write_reg(0x21); // Display update control epd_write_data(0x00); epd_write_data(0x80); + #endif + + #elif defined(EPD_42) + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x40); + epd_write_data(0x00); + epd_write_reg(0x01); // Set MUX as 300 + epd_write_data(0x2B); + epd_write_data(0x01); + epd_write_data(0x00); + epd_write_reg(0x3C); //BorderWavefrom + epd_write_data(0x01); + epd_write_reg(0x11); // data entry mode + epd_write_data(0x03); // X-mode + epd_address_set(0,0,EPD_W-1,EPD_H-1); #endif epd_write_reg(0x18); // Read built-in temperature sensor @@ -289,6 +305,12 @@ uint8_t epd_init_partial(void) } _epd_write_data_over(); epd_cs_set(); + #elif defined(EPD_42) + epd_write_reg(0x3C); //BorderWavefrom + epd_write_data(0x80); + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application #endif return 0; @@ -304,8 +326,13 @@ void epd_enter_deepsleepmode(uint8_t mode) uint8_t epd_power_on(void) { + #if defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xe0); + #else epd_write_reg(0x22); // Display Update Control epd_write_data(0xf8); + #endif epd_write_reg(0x20); // Activate Display Update Sequence return epd_wait_busy(); @@ -327,15 +354,20 @@ void epd_init_internalTempSensor(void) epd_write_reg(0x1A); epd_write_data(0x7F); - epd_write_data(0xF0); +// epd_write_data(0xF0); } void epd_update(void) { + + #ifdef EPD_154 epd_write_reg(0x22); // Display Update Control -#ifdef EPD_154 epd_write_data(0xF4); + #elif defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xF7); #else + epd_write_reg(0x22); // Display Update Control epd_write_data(0xF7); #endif epd_write_reg(0x20); // Activate Display Update Sequence @@ -345,10 +377,14 @@ void epd_update(void) void epd_update_partial(void) { + #ifdef EPD_154 epd_write_reg(0x22); // Display Update Control -#ifdef EPD_154 epd_write_data(0xFC); + #elif defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xFF); #else + epd_write_reg(0x22); // Display Update Control epd_write_data(0xCC); #endif epd_write_reg(0x20); // Activate Display Update Sequence @@ -356,6 +392,19 @@ void epd_update_partial(void) epd_wait_busy(); } +void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end) +{ + epd_write_reg(0x44); // SET_RAM_X_ADDRESS_START_END_POSITION + epd_write_data((x_start>>3) & 0xFF); + epd_write_data((x_end>>3) & 0xFF); + + epd_write_reg(0x45); // SET_RAM_Y_ADDRESS_START_END_POSITION + epd_write_data(y_start & 0xFF); + epd_write_data((y_start >> 8) & 0xFF); + epd_write_data(y_end & 0xFF); + epd_write_data((y_end >> 8) & 0xFF); +} + void epd_setpos(uint16_t x, uint16_t y) { uint8_t _x; @@ -365,8 +414,10 @@ void epd_setpos(uint16_t x, uint16_t y) #ifdef EPD_154 _y = 199 - y; - #else + #elif defined(EPD_29) || defined(EPD_213) _y = 295 - y; + #elif defined(EPD_42) + _y = y; #endif epd_write_reg(0x4E); // set RAM x address count to 0; @@ -387,6 +438,17 @@ void epd_writedata(uint8_t *Image1, uint32_t length) epd_cs_set(); } +void epd_writedata2(uint8_t data, uint32_t length) +{ + epd_cs_reset(); + for (uint32_t j = 0; j < length; j++) + { + _epd_write_data(data); + } + _epd_write_data_over(); + epd_cs_set(); +} + void epd_display(uint8_t *Image1, uint8_t *Image2) { uint32_t Width, Height, i, j; @@ -415,6 +477,12 @@ void epd_display(uint8_t *Image1, uint8_t *Image2) _epd_write_data_over(); epd_cs_set(); + #if defined EPD_42 + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application + #endif + epd_update(); } @@ -466,6 +534,11 @@ void epd_displayRED(uint8_t *Image) epd_write_reg(0x26); epd_writedata(Image, Width * Height); + #if defined EPD_42 + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application + #endif epd_update(); } diff --git a/Example/EpaperModuleTest_APM32F103/Epaper/epaper.h b/Example/EpaperModuleTest_APM32F103/Epaper/epaper.h index ed4aa89..f51fd3a 100644 --- a/Example/EpaperModuleTest_APM32F103/Epaper/epaper.h +++ b/Example/EpaperModuleTest_APM32F103/Epaper/epaper.h @@ -8,11 +8,12 @@ extern "C" #include "apm32f10x.h" +//#define EPD_42 //#define EPD_29 //#define EPD_213 //#define EPD_154 -#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) +#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) && (!defined EPD_42) #error EPD Type Undefine #endif @@ -31,6 +32,10 @@ extern "C" #define EPD_H 200 #endif +#ifdef EPD_42 +#define EPD_W 400 +#define EPD_H 300 +#endif #define EPD_OK 0 #define EPD_ERROR 1 @@ -76,6 +81,7 @@ extern "C" void epd_init_internalTempSensor(void); void epd_update(void); void epd_update_partial(void); + void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end); void epd_setpos(uint16_t x, uint16_t y); void epd_display(uint8_t *Image1, uint8_t *Image2); void epd_displayBW(uint8_t *Image); diff --git a/Example/EpaperModuleTest_APM32F103/Src/main.c b/Example/EpaperModuleTest_APM32F103/Src/main.c index 27aad2d..f971a78 100644 --- a/Example/EpaperModuleTest_APM32F103/Src/main.c +++ b/Example/EpaperModuleTest_APM32F103/Src/main.c @@ -52,16 +52,25 @@ int main(void) epd_init(); #ifdef EPD_BWR + #ifdef EPD_42 + epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); + epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); + #else epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + #endif epd_paint_selectimage(image_bw); epd_paint_clear(EPD_COLOR_WHITE); epd_paint_selectimage(image_red); epd_paint_clear(EPD_COLOR_WHITE); + + #ifdef EPD_42 + epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #else epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #endif epd_display(image_bw, image_red); epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); @@ -79,6 +88,10 @@ int main(void) #ifdef EPD_29 epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); +#endif +#ifdef EPD_42 + epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); #endif epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); @@ -95,8 +108,13 @@ int main(void) #endif epd_display(image_bw, image_red); + #else + #ifdef EPD_42 + epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); + #else epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + #endif epd_paint_selectimage(image_bw); @@ -105,8 +123,12 @@ int main(void) epd_paint_showPicture((EPD_H - 200) / 2,(EPD_W - 64) / 2,200,64,gImage_5,EPD_COLOR_WHITE); #else epd_paint_clear(EPD_COLOR_WHITE); + #ifdef EPD_42 + epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #else epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); -#endif + #endif + #endif epd_displayBW(image_bw); epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); @@ -134,11 +156,15 @@ int main(void) epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); #endif - +#ifdef EPD_42 + epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); +#endif #if 1 epd_paint_showString(10,100,(uint8_t *)&"APM32F103CBT6 Example",EPD_FONT_SIZE16x8,EPD_COLOR_BLACK); #else - epd_paint_drawRectangle(10, 103, EPD_H - 10, 116, EPD_COLOR_BLACK, 1); + epd_paint_drawRectangle(10, EPD_W-20, EPD_H - 10, EPD_W-6, EPD_COLOR_BLACK, 1); #endif sprintf((char *)&text, ">> Partial Mode"); diff --git a/Example/EpaperModuleTest_AT32F403A/Epaper/epaper.c b/Example/EpaperModuleTest_AT32F403A/Epaper/epaper.c index cc59656..3565bd2 100644 --- a/Example/EpaperModuleTest_AT32F403A/Epaper/epaper.c +++ b/Example/EpaperModuleTest_AT32F403A/Epaper/epaper.c @@ -234,54 +234,70 @@ uint8_t epd_init(void) if (epd_wait_busy()) return 1; - epd_write_reg(0x01); // Driver output control - #if defined(EPD_29) || defined(EPD_213) - epd_write_data(0x27); - epd_write_data(0x01); - epd_write_data(0x01); - #else - epd_write_data(0xC7); - epd_write_data(0x00); - epd_write_data(0x01); + #if defined(EPD_29) || defined(EPD_213) || defined(EPD_154) + epd_write_reg(0x01); // Driver output control + #if defined(EPD_29) || defined(EPD_213) + epd_write_data(0x27); + epd_write_data(0x01); + epd_write_data(0x01); + #else + epd_write_data(0xC7); + epd_write_data(0x00); + epd_write_data(0x01); + #endif + + epd_write_reg(0x11); // data entry mode + epd_write_data(0x01); + + #ifdef EPD_154 + epd_write_reg(0x44); // set Ram-X address start/end position + epd_write_data(0x00); + epd_write_data(0x18); + + epd_write_reg(0x45); // set Ram-Y address start/end position + epd_write_data(0xC7); + epd_write_data(0x00); + epd_write_data(0x00); + epd_write_data(0x00); + #else + epd_write_reg(0x44); // set Ram-X address start/end position + epd_write_data(0x00); + epd_write_data(0x0F); // 0x0F-->(15+1)*8=128 + + epd_write_reg(0x45); // set Ram-Y address start/end position + epd_write_data(0x27); // 0x127-->(295+1)=296 + epd_write_data(0x01); + epd_write_data(0x00); + epd_write_data(0x00); + #endif + + epd_write_reg(0x3C); // BorderWavefrom + epd_write_data(0x05); + + #if defined(EPD_29) || defined(EPD_213) + epd_write_reg(0x21); // Display update control + epd_write_data(0x00); + epd_write_data(0x80); + #endif + + #elif defined(EPD_42) + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x40); + epd_write_data(0x00); + epd_write_reg(0x01); // Set MUX as 300 + epd_write_data(0x2B); + epd_write_data(0x01); + epd_write_data(0x00); + epd_write_reg(0x3C); //BorderWavefrom + epd_write_data(0x01); + epd_write_reg(0x11); // data entry mode + epd_write_data(0x03); // X-mode + epd_address_set(0,0,EPD_W-1,EPD_H-1); #endif - epd_write_reg(0x11); // data entry mode - epd_write_data(0x01); - - #ifdef EPD_154 - epd_write_reg(0x44); // set Ram-X address start/end position - epd_write_data(0x00); - epd_write_data(0x18); - - epd_write_reg(0x45); // set Ram-Y address start/end position - epd_write_data(0xC7); - epd_write_data(0x00); - epd_write_data(0x00); - epd_write_data(0x00); - #else - epd_write_reg(0x44); // set Ram-X address start/end position - epd_write_data(0x00); - epd_write_data(0x0F); // 0x0F-->(15+1)*8=128 - - epd_write_reg(0x45); // set Ram-Y address start/end position - epd_write_data(0x27); // 0x127-->(295+1)=296 - epd_write_data(0x01); - epd_write_data(0x00); - epd_write_data(0x00); - #endif - - epd_write_reg(0x3C); // BorderWavefrom - epd_write_data(0x05); - - #if defined(EPD_29) || defined(EPD_213) - epd_write_reg(0x21); // Display update control - epd_write_data(0x00); - epd_write_data(0x80); - #endif - - epd_write_reg(0x18); // Read built-in temperature sensor - epd_write_data(0x80); - + epd_write_reg(0x18); // Read built-in temperature sensor + epd_write_data(0x80); + epd_setpos(0,0); if (epd_power_on()) @@ -304,6 +320,12 @@ uint8_t epd_init_partial(void) } _epd_write_data_over(); epd_cs_set(); + #elif defined(EPD_42) + epd_write_reg(0x3C); //BorderWavefrom + epd_write_data(0x80); + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application #endif return 0; @@ -319,8 +341,13 @@ void epd_enter_deepsleepmode(uint8_t mode) uint8_t epd_power_on(void) { + #if defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xe0); + #else epd_write_reg(0x22); // Display Update Control epd_write_data(0xf8); + #endif epd_write_reg(0x20); // Activate Display Update Sequence return epd_wait_busy(); @@ -342,15 +369,20 @@ void epd_init_internalTempSensor(void) epd_write_reg(0x1A); epd_write_data(0x7F); - epd_write_data(0xF0); +// epd_write_data(0xF0); } void epd_update(void) { - epd_write_reg(0x22); // Display Update Control + #ifdef EPD_154 + epd_write_reg(0x22); // Display Update Control epd_write_data(0xF4); + #elif defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xF7); #else + epd_write_reg(0x22); // Display Update Control epd_write_data(0xF7); #endif epd_write_reg(0x20); // Activate Display Update Sequence @@ -360,10 +392,14 @@ void epd_update(void) void epd_update_partial(void) { - epd_write_reg(0x22); // Display Update Control #ifdef EPD_154 + epd_write_reg(0x22); // Display Update Control epd_write_data(0xFC); + #elif defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xFF); #else + epd_write_reg(0x22); // Display Update Control epd_write_data(0xCC); #endif epd_write_reg(0x20); // Activate Display Update Sequence @@ -371,6 +407,19 @@ void epd_update_partial(void) epd_wait_busy(); } +void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end) +{ + epd_write_reg(0x44); // SET_RAM_X_ADDRESS_START_END_POSITION + epd_write_data((x_start>>3) & 0xFF); + epd_write_data((x_end>>3) & 0xFF); + + epd_write_reg(0x45); // SET_RAM_Y_ADDRESS_START_END_POSITION + epd_write_data(y_start & 0xFF); + epd_write_data((y_start >> 8) & 0xFF); + epd_write_data(y_end & 0xFF); + epd_write_data((y_end >> 8) & 0xFF); +} + void epd_setpos(uint16_t x, uint16_t y) { uint8_t _x; @@ -380,8 +429,10 @@ void epd_setpos(uint16_t x, uint16_t y) #ifdef EPD_154 _y = 199 - y; - #else + #elif defined(EPD_29) || defined(EPD_213) _y = 295 - y; + #elif defined(EPD_42) + _y = y; #endif epd_write_reg(0x4E); // set RAM x address count to 0; @@ -402,6 +453,17 @@ void epd_writedata(uint8_t *Image1, uint32_t length) epd_cs_set(); } +void epd_writedata2(uint8_t data, uint32_t length) +{ + epd_cs_reset(); + for (uint32_t j = 0; j < length; j++) + { + _epd_write_data(data); + } + _epd_write_data_over(); + epd_cs_set(); +} + void epd_display(uint8_t *Image1, uint8_t *Image2) { uint32_t Width, Height, i, j; @@ -430,6 +492,12 @@ void epd_display(uint8_t *Image1, uint8_t *Image2) _epd_write_data_over(); epd_cs_set(); + #if defined EPD_42 + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application + #endif + epd_update(); } @@ -481,6 +549,11 @@ void epd_displayRED(uint8_t *Image) epd_write_reg(0x26); epd_writedata(Image, Width * Height); + #if defined EPD_42 + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application + #endif epd_update(); } diff --git a/Example/EpaperModuleTest_AT32F403A/Epaper/epaper.h b/Example/EpaperModuleTest_AT32F403A/Epaper/epaper.h index 0a5be53..4e87135 100644 --- a/Example/EpaperModuleTest_AT32F403A/Epaper/epaper.h +++ b/Example/EpaperModuleTest_AT32F403A/Epaper/epaper.h @@ -8,11 +8,12 @@ extern "C" #include "at32f403a_407.h" +//#define EPD_42 //#define EPD_29 //#define EPD_213 //#define EPD_154 -#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) +#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) && (!defined EPD_42) #error EPD Type Undefine #endif @@ -31,6 +32,10 @@ extern "C" #define EPD_H 200 #endif +#ifdef EPD_42 +#define EPD_W 400 +#define EPD_H 300 +#endif #define EPD_OK 0 #define EPD_ERROR 1 @@ -76,6 +81,7 @@ extern "C" void epd_init_internalTempSensor(void); void epd_update(void); void epd_update_partial(void); + void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end); void epd_setpos(uint16_t x, uint16_t y); void epd_display(uint8_t *Image1, uint8_t *Image2); void epd_displayBW(uint8_t *Image); diff --git a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/EpaperModuleTest_AT32F403A.uvprojx b/Example/EpaperModuleTest_AT32F403A/MDK-ARM/EpaperModuleTest_AT32F403A.uvprojx index 208f5b1..0608784 100644 --- a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/EpaperModuleTest_AT32F403A.uvprojx +++ b/Example/EpaperModuleTest_AT32F403A/MDK-ARM/EpaperModuleTest_AT32F403A.uvprojx @@ -10,7 +10,7 @@ Target 1 0x4 ARM-ADS - 6190000::V6.19::ARMCLANG + 6210000::V6.21::ARMCLANG 1 diff --git a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/EpaperModuleTest_AT32F403A.axf b/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/EpaperModuleTest_AT32F403A.axf index bf5c4bf..bf4bbe7 100644 Binary files a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/EpaperModuleTest_AT32F403A.axf and b/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/EpaperModuleTest_AT32F403A.axf differ diff --git a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/EpaperModuleTest_AT32F403A.hex b/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/EpaperModuleTest_AT32F403A.hex index 7ff37f9..ce22728 100644 --- a/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/EpaperModuleTest_AT32F403A.hex +++ b/Example/EpaperModuleTest_AT32F403A/MDK-ARM/Objects/EpaperModuleTest_AT32F403A.hex @@ -1,999 +1,999 @@ :020000040800F2 -:10000000882B00202502000829030008210300088E -:1000100025030008E1020008990300080000000021 -:100020000000000000000000000000003103000894 -:10003000E5020008000000002D0300083503000859 -:100040003F0200083F0200083F0200083F0200088C -:100050003F0200083F020008E90200083F020008D2 -:100060003F0200083F0200083F0200083F0200086C -:100070003F0200083F0200083F0200083F0200085C -:100080003F0200083F0200083F0200083F0200084C -:100090003F0200083F0200083F0200083F0200083C -:1000A0003F0200083F0200083F0200083F0200082C -:1000B0003F0200083F0200083F0200083F0200081C -:1000C0003F0200083F0200083F0200083F0200080C -:1000D0003F0200083F0200083F0200083F020008FC -:1000E0003F0200083F0200083F0200083F020008EC -:1000F0003F0200083F0200083F0200083F020008DC -:100100003F0200083F0200083F0200083F020008CB -:100110003F0200083F0200083F0200083F020008BB -:100120003F0200083F0200083F0200083F020008AB -:100130003F0200083F0200083F0200083F0200089B +:100000002041002059020008510500084905000858 +:100010004D05000809050008C105000800000000A2 +:10002000000000000000000000000000590500086A +:100030000D05000800000000550500085D050008DA +:1000400073020008730200087302000873020008BC +:10005000730200087302000811050008730200080B +:10006000730200087302000873020008730200089C +:10007000730200087302000873020008730200088C +:10008000730200087302000873020008730200087C +:10009000730200087302000873020008730200086C +:1000A000730200087302000873020008730200085C +:1000B000730200087302000873020008730200084C +:1000C000730200087302000873020008730200083C +:1000D000730200087302000873020008730200082C +:1000E000730200087302000873020008730200081C +:1000F000730200087302000873020008730200080C +:1001000073020008730200087302000873020008FB +:1001100073020008730200087302000873020008EB +:1001200073020008730200087302000873020008DB +:1001300073020008730200087302000873020008CB :1001400000000000000000000000000000000000AF -:100150003F0200083F0200083F0200083F0200087B -:100160003F0200083F0200083F0200083F0200086B -:100170003F0200083F0200083F0200083F0200085B -:100180003F02000800F002F800F03CF80AA090E8F6 -:10019000000C82448344AAF10107DA4501D100F042 -:1001A00031F8AFF2090EBAE80F0013F0010F18BFD3 -:1001B000FB1A43F00103184788470000A8470000D6 -:1001C000103A24BF78C878C1FAD8520724BF30C883 -:1001D00030C144BF04680C60704700000023002455 -:1001E00000250026103A28BF78C1FBD8520728BF47 -:1001F00030C148BF0B6070471FB501F0CFFE1FBD77 -:1002000010B510BD00F031F81146FFF7F5FF01F011 -:100210007FFC00F04FF803B4FFF7F2FF03BC00F0DF -:1002200057F800000948804709480047FEE7FEE705 -:10023000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE796 -:1002400004480549054A064B704700003903000879 -:100250008501000888250020882B002088270020A1 -:1002600088270020704770477047754600F02CF8CB -:10027000AE4605006946534620F00700854618B093 -:1002800020B5FFF7DDFFBDE820404FF000064FF03E -:1002900000074FF000084FF0000BAC46ACE8C00977 -:1002A000ACE8C009ACE8C009ACE8C00921F007011E -:1002B0008D46704710B50446AFF300802046BDE878 -:1002C0001040FFF7A8BF000000487047080000205A -:1002D00001491820ABBEFEE726000200704700006F -:1002E000FEE700007047000080B5052000F0D2F95D -:1002F000012001F0E9FA40F60000C4F201000121FA -:1003000001F0D6FB002818BF80BD40F20000C2F209 -:10031000000001780422042908BF0122027080BD78 -:10032000FEE70000FEE70000704700007047000095 -:1003300070470000704700004EF6885CCEF2000C5B -:10034000DCF8002041F2000142F47002C4F2020124 -:10035000CCF800200A6842F001020A600A6892079D -:10036000FCD54A6822F003024A6000BF4A6812F0D6 -:100370000C0FFBD100224A600B684FF6FF70CFF6DE -:10038000F260184008604FF41F000A6388604FF065 -:1003900000604CF8800C7047FEE7000070B584B038 -:1003A0004FF4C0100121012500F0DCF800200021ED -:1003B000002601F0D7FA01AC204601F07FFA40F2A6 -:1003C0000110ADF80C0020468DF80460029501F094 -:1003D00081FA032001F0A4FC06200021002201F094 -:1003E00065FC04B070BD0000B0B582B00220C0F260 -:1003F00018000121012500F0B5F86C46204601F0F7 -:10040000A7FA41F60000C0F20010CDE9005040F616 -:100410000000C4F20100214601F0EAFA02B0B0BDCA -:1004200041F20401C4F202010A6800F00F0022F058 -:10043000F00242EA001008607047000041F2040137 -:10044000C4F202010A6800F0070022F4E06242EA06 -:10045000002008607047000041F20401C4F202016C -:100460000A6800F0070022F4605242EAC0200860E7 -:100470007047000041F25401C4F202010A680128E9 -:1004800022F0300208BF30320A607047042888BF6B -:100490007047DFE800F0030C19262F0041F200003E -:1004A000C4F20200026861F300020260704741F288 -:1004B0000000C4F20200026801F0010122F480325F -:1004C00042EA01410160704741F20000C4F20200BB -:1004D000026801F0010122F0807242EA01610160CC -:1004E000704741F20000C4F20200026A61F30002A8 -:1004F0000262704741F20000C4F20200426A61F3F6 -:10050000000242627047000041F20002010CC4F296 -:100510000202895800F01F0021FA00F000F00100EB -:100520007047000041F25401C4F202010A6800F071 -:10053000030022F4405242EA003008607047000095 -:1005400041F200010020C4F2020100BF0A689203D8 -:1005500004D4B0F5405F00F10100F7D30868C0F3A0 -:100560004040704741F2000200F01F034FF0010CC1 -:10057000C4F2020201290CFA03F14FEA1040835839 -:1005800014BF23EA010119438150704780B541F23D -:10059000040EC4F2020EDEF800C060B14CF48033E9 -:1005A000CEF80030DEF800C0012814BF4CF4003053 -:1005B0002CF4003001E02CF48030CEF80000DEF89E -:1005C000000061F39540CEF80000DEF80000090954 -:1005D00061F35E70CEF80000DEF8000020F000400D -:1005E00040EAC270CEF8000080BD000041F2000079 -:1005F000C4F20200016841F001010160016889074D -:10060000FCD5416821F00301416000BF416811F051 -:100610000C0FFBD10021416002684FF6FF73CFF64B -:10062000F2631A40026001634FF41F01816070475A -:1006300041F20401C4F202010A6860F301020A6097 -:100640007047000041F20400C4F202000068C0F3E9 -:100650008100704780B5042001F094FC40F2040052 -:10066000C2F2000000684DF68361C4F21B31A0FBAA -:100670000101880C40F28401C2F2000108600868A0 -:100680004FF47A71484340F28001C2F200010860E1 -:1006900080BD000080B5002808BF80BD4EF210016B -:1006A00040F2800ECEF20001C2F2000E4FF0320C8A -:1006B000002300BF82B2332A06D3DEF8002032388E -:1006C00002FB0CF24A6004E0DEF800005043486090 -:1006D00000208B600A6842F001020A600A6802F09A -:1006E0000112012AFAD00A6822F001020A6002040B -:1006F0008B60DFD180BD00002DE9F04381B08946D9 -:10070000074640F6004800200021C4F2010800F02E -:10071000D7FF40464FF4804101F016F940464FF4B0 -:10072000805101F011F9A8F554463046242101F01A -:1007300019FB00BF3046802101F016FB0028F9D1DB -:1007400040464FF4805101F001F940464FF480419A -:1007500001F0FCF840464FF4805101F0F5F8002517 -:100760007C5D00BF3046022101F0FEFA0028F9D07E -:100770003046214601F0F6FA0135B5F5945FEFD128 -:100780003046802101F0F0FA0028F9D140464FF4BC -:10079000805101F0DBF80020002100F091FF40467D -:1007A0004FF4804101F0D0F840464FF4805101F001 -:1007B000CBF83046262101F0D5FA00BF3046802123 -:1007C00001F0D2FA0028F9D140464FF4805101F0EF -:1007D000BDF840464FF4804101F0B8F840464FF470 -:1007E000805101F0B1F8002419F80450304602217C -:1007F00001F0BAFA0028F9D085F0FF01304601F087 -:10080000B1FA0134B4F5945FEED100BF30468021D7 -:1008100001F0AAFA0028F9D140464FF4805101F0C6 -:1008200095F801B0BDE8F04300F0D6BF70B540F6D2 -:1008300000440546C4F2010400F05AFE20464FF47D -:10084000804101F081F820464FF4805101F07CF89E -:10085000A4F554463046102101F084FA3046802138 -:1008600001F082FA0028F9D120464FF4805101F0BE -:100870006DF820464FF4804101F068F820464FF4AF -:10088000805101F061F83046294601F06BFA00BF53 -:100890003046802101F068FA0028F9D120464FF453 -:1008A000805101F053F840F27C00C2F200000021B8 -:1008B000017070BDF0B581B040F27C06C2F2000656 -:1008C000307840F60044C4F2010498B9A4F580657C -:1008D00028464FF4807101F037F83220FFF7DAFE36 -:1008E00028464FF4807101F031F83220FFF7D2FE34 -:1008F00001203070A4F5806630464FF4007101F09D -:10090000D7F870B149F641450120013D00F044821D -:10091000FFF7C0FE30464FF4007101F0C9F800281F -:10092000F2D120464FF4804101F00EF820464FF4FA -:10093000805101F009F8A4F554452846122101F030 -:1009400011FA00BF2846802101F00EFA0028F9D1E3 -:1009500020464FF4805100F0F9FF20464FF48041CB -:1009600000F0F4FF0A20FFF795FE30464FF40071C7 -:1009700001F09EF878B149F6414700BF0120013FE0 -:1009800000F00A82FFF786FE30464FF4007101F056 -:100990008FF80028F2D120464FF4804100F0D4FFB8 -:1009A00020464FF4805100F0CFFF2846012101F08E -:1009B000D9F900BF2846802101F0D6F90028F9D1E5 -:1009C00020464FF4805100F0C1FF20464FF4804193 -:1009D00000F0BCFF20464FF4805100F0B5FF2846E0 -:1009E000272101F0BFF900BF2846802101F0BCF9A2 -:1009F0000028F9D120464FF4805100F0A7FF20468F -:100A00004FF4805100F0A0FF2846012101F0AAF91F -:100A10002846802101F0A8F90028F9D120464FF49A -:100A2000805100F093FF20464FF4805100F08CFF7E -:100A30002846012101F096F92846802101F094F919 -:100A40000028F9D120464FF4805100F07FFF204666 -:100A50004FF4804100F078FF20464FF4805100F0C1 -:100A600073FF2846112101F07DF900BF284680213F -:100A700001F07AF90028F9D120464FF4805100F0B6 -:100A800065FF20464FF4804100F060FF20464FF4A0 -:100A9000805100F059FF2846012101F063F900BFA1 -:100AA0002846802101F060F90028F9D120464FF452 -:100AB000805100F04BFF20464FF4804100F044FF8E -:100AC00020464FF4805100F03FFF2846442101F0BA -:100AD00049F900BF2846802101F046F90028F9D1E4 -:100AE00020464FF4805100F031FF20464FF4804102 -:100AF00000F02CFF20464FF4805100F025FF2846DF -:100B0000002101F02FF900BF2846802101F02CF9C7 -:100B10000028F9D120464FF4805100F017FF2046FD -:100B20004FF4805100F010FF28460F2101F01AF910 -:100B30002846802101F018F90028F9D120464FF409 -:100B4000805100F003FF20464FF4804100F0FCFE8E -:100B500020464FF4805100F0F7FE2846452101F071 -:100B600001F900BF2846802101F0FEF80028F9D1E4 -:100B700020464FF4805100F0E9FE20464FF48041BA -:100B800000F0E4FE20464FF4805100F0DDFE2846E0 -:100B9000272101F0E7F800BF2846802101F0E4F8A2 -:100BA0000028F9D120464FF4805100F0CFFE2046B6 -:100BB0004FF4805100F0C8FE2846012101F0D2F820 -:100BC0002846802101F0D0F80028F9D120464FF4C2 -:100BD000805100F0BBFE20464FF4805100F0B4FE7F -:100BE0002846002101F0BEF82846802101F0BCF81B -:100BF0000028F9D120464FF4805100F0A7FE20468E -:100C00004FF4805100F0A0FE2846002101F0AAF820 -:100C10002846802101F0A8F80028F9D120464FF499 -:100C2000805100F093FE20464FF4804100F08CFE8E -:100C300020464FF4805100F087FE28463C2101F009 -:100C400091F800BF2846802101F08EF80028F9D1E4 -:100C500020464FF4805100F079FE20464FF4804149 -:100C600000F074FE20464FF4805100F06DFE2846DF -:100C7000052101F077F800BF2846802101F074F8C3 -:100C80000028F9D120464FF4805100F05FFE204645 -:100C90004FF4804100F058FE20464FF4805100F0A0 -:100CA00053FE2846212101F05DF800BF284680212F -:100CB00001F05AF80028F9D120464FF4805100F095 -:100CC00045FE20464FF4804100F040FE20464FF4A0 -:100CD000805100F039FE2846002101F043F800BFA2 -:100CE0002846802101F040F80028F9D120464FF431 -:100CF000805100F02BFE20464FF4805100F024FE7E -:100D00002846802101F02EF82846802101F02CF899 -:100D10000028F9D120464FF4805100F017FE2046FC -:100D20004FF4804100F010FE20464FF4805100F057 -:100D30000BFE2846182101F015F800BF2846802137 -:100D400001F012F80028F9D120464FF4805100F04C -:100D5000FDFD20464FF4804100F0F8FD20464FF4A1 -:100D6000805100F0F1FD2846802100F0FBFF00BF1C -:100D70002846802100F0F8FF0028F9D120464FF4E2 -:100D8000805100F0E3FD0020002100F099FC00F00C -:100D900023FC002818BF012001B0F0BD2DE9F0416F -:100DA00084B00224C0F2180420460121FFF7DAFBC8 -:100DB000601C0121FFF7D6FB02AD284600F0C8FDFC -:100DC00040F60044C4F20104A4F5806630464FF4B6 -:100DD00080714FF4807700F0B7FD40F20040C0F220 -:100DE0001010CDE902703046294600F001FE1820AF -:100DF000ADF80D004FF4007002903046294600F027 -:100E0000F7FD20464FF480414FF4804600F09EFDF0 -:100E10004FF010084FF48067204629468DF80E8069 -:100E2000ADF80C70029600F0E3FD4FF40050082678 -:100E3000029020462946ADF80C708DF80E6000F047 -:100E4000D7FD4FF400400290204629468DF80E60F1 -:100E500000F0CEFD20464FF480514FF4805600F054 -:100E600075FD204629468DF80E80ADF80C7002966F -:100E700000F0BEFD0E20C0F21C000121FFF772FB46 -:100E80006D46284600F05CFF40F20310C0F20500FA -:100E9000009040F20010C0F20110A4F554440190FB -:100EA0002046294600F066FF2046012100F050FF51 -:100EB00004B0BDE8F081000080B540F2680CC2F2D9 -:100EC000000CBCF81210002908BF80BD4FF0000EC6 -:100ED00006E000BFBCF812100EF1010E8E4512D2D2 -:100EE000BCF81030002BF5D04FF0FF31DCF80020BB -:100EF0000EFB03220A445070BCF810308A1C0131EA -:100F00009A42F3D3E6E780BD2DE9F04F86B0B2EB0D -:100F1000000C0D46924648BFCCF1000C5F1B4FF011 -:100F2000FF314FF6FF7248BF7F424FF0FF368245D8 -:100F300088BF0121029119460193AB4288BF012667 -:100F400040F26809A2F18003C7F1000B0096ACEBF8 -:100F50000706C2F200090FFA83FE0397691E049583 -:100F6000059102E0BCEB460F4CDAB9F80E30A0F167 -:100F70000108B32B0CDC9BB15A2B38D1B9F80830DF -:100F8000B9F80A700499A3EB00087B1A17E000BFB8 -:100F9000B42B0FD0B3F5877F059B10D027E000BF9F -:100FA0005146B9F808A0049A4346AAEB02088A46BB -:100FB00005E000BFB9F80A30DDF814801B1AB9F853 -:100FC00010209BB21FFA88F75A43D9F8003002EB81 -:100FD000D7029F5C08F007058021E9400F9C394348 -:100FE0004EFA05F5002C08BF07EA05019954BBEB42 -:100FF000460FB7DC81B251450ED00399761A02999B -:101000000844AFE70499019A89B2914204D0049D43 -:10101000009966440D44A1E706B0BDE8F08F0000DA -:101020002DE9F04182B00F46DDE908811C461546E6 -:10103000064681B1A7420BD2B9B230462A460B46CA -:10104000CDF80080FFF760FF0137B8B2A042F3D3BC -:1010500002B0BDE8F081304639462A463B46CDF81D -:101060000080FFF751FF3046394632462346CDF81F -:101070000080FFF749FF284621462A463B46CDF827 -:101080000080FFF741FF2846214632462346CDF82F -:101090000080FFF739FF02B0BDE8F08110B540F2E3 -:1010A000680EDDF808C0C2F2000ECEF80000C808D5 -:1010B000AEF80810AEF80A20AEF80CC04FF0010CE4 -:1010C0004C0718BF0CEBD100AEF81000AEF80E3094 -:1010D000B3FA83F0B43BB3FA83F340095B091843D6 -:1010E0000846AEF812201CBF10460A46AEF80400AF -:1010F000AEF8062010BD000040F26801C2F2000107 -:10110000086070472DE9F04F8BB00130069080B237 -:101110000590C01AB0F5947F00F3EF80082B02D140 -:1011200006276FB9E9E0D8085F074FF0010618BF3E -:1011300006EBD3005F08784387B2002F00F0DD8014 -:10114000A2F1200085B25808039041F6B67005EB75 -:101150004502C0F6000000EB4200049042F25260EB -:1011600040F26806C0F60000DDF818E001314FF6E5 -:101170007F7B00240192C2F20006802200EB051062 -:1011800002950090CDE9077312E000BF05991FFAA0 -:101190008EF0401A03998842069808BF864609993E -:1011A00008BF083107980A9C0134844200F0A580EA -:1011B000082B0A9402D1049818E000BF182B0AD01B -:1011C000102B12D00C2B40F09880019842F2DE13C5 -:1011D000C0F6000306E0029842F6424300EBC0006E -:1011E000C0F6000303EB800000E00098204490F874 -:1011F0000090AEF101084FF0000C099124E07089D5 -:10120000A0EB0E00348A80B21FFA8AF36043346880 -:1012100000EBD303E018E35C0AF007050FFA8BF745 -:1012200022FA05F447FA05F51C4303EA0507149B67 -:10123000002B08BF274607704FEA59090131BCF15E -:10124000070F0CF1010C4FD2F0895FEAC974A1F1CC -:10125000010A0BD1B32815DC20B35A28ECD1308910 -:101260007389A0EB0E0A581ACCE700BFB32811DC33 -:10127000E8B15A28E0D130897489A0EB0E0A601ACF -:101280001DE000BFB428BAD0B0F5877F5046C246F3 -:10129000B8D0D1E7B4280FD0B0F5877F5046C2460A -:1012A0000DD0C9E73089A0EB010A4046AAE7308992 -:1012B000A0EB010A404602E07089A0EB0E00378ADD -:1012C00080B21FFA8AF47843376800EBD4043819E7 -:1012D0003C5D0AF007030FFA8BF522FA03F745FA93 -:1012E00003F327431C40A2E7089B0EF1010E082BD5 -:1012F0007FF44CAF0798099955E70BB0BDE8F08F24 -:101300002DE9F04F89B0DE085F0705924FF001022A -:1013100018BF02EBD306002E009600F0BB80013010 -:10132000DDF84C904E1C81B240F268070391002515 -:10133000C2F200074FF0800C0024314604900AE00E -:101340000599019C029D0C4431460135009BAAB2CF -:101350009A4280F09F80059A002AF6D000230295D9 -:10136000019413E00130039A81B2891A059A069C10 -:101370009142049908BF0846089E08BF0836079B9B -:101380000134013399B291423146D9D2CDE90643B5 -:10139000129BA2B213F80280A0F1010B4FF0000AD9 -:1013A000089623E07A89121A3C8A92B21FFA8EF3C9 -:1013B00062433C6802EBD302A518A35C4FF67F742E -:1013C0000EF0070624B22CFA06F244FA06F61A4387 -:1013D0003340B9F1000F08BF1A462A704FEA580887 -:1013E0000131BAF1070F0AF1010ABBD2FD895FEAA8 -:1013F000C872A1F1010E0BD1B32D15DC25B35A2D06 -:10140000ECD13A897B89A2EB000E5A1ACCE700BFD7 -:10141000B32D11DCEDB15A2DE0D13A897B89A2EBD5 -:10142000000E5A1A1CE000BFB42DBBD0B5F5877F63 -:101430007246DE46B8D0D1E7B42D0FD0B5F5877F20 -:101440007246DE460CD0C9E73A89A2EB010E5A4635 -:10145000AAE73A89A2EB010E5A4601E07A89121AEC -:101460003D8A92B21FFA8EF36A434C46D7F8009039 -:1014700002EBD3024FF67F7609EB020519F8022042 -:10148000A1460EF0070436B22CFA04F326411343AA -:1014900032409EE709B0BDE8F08F00002DE9F0472B -:1014A00082B01C461378FBB1DDF828804FEA540A5D -:1014B0000D460646CAF59479571C06E05644B0B26C -:1014C000814511DB17F8013B73B1B0B2DAB229469E -:1014D0002346CDF80080FFF715FE082CEED1063626 -:1014E000B0B2B0F5917FEDD902B0BDE8F087000051 -:1014F000B0B540F60044C4F2010420464FF48041E8 -:1015000000F022FA20464FF4805100F01DFAA4F5B5 -:1015100054452846222100F025FC00BF28468021A2 -:1015200000F022FC0028F9D120464FF4805100F051 -:101530000DFA20464FF4804100F008FA20464FF49F -:10154000805100F001FA2846832100F00BFC00BF17 -:101550002846802100F008FC0028F9D120464FF4ED -:10156000805100F0F3F920464FF4804100F0ECF98F -:1015700020464FF4805100F0E7F92846202100F082 -:10158000F1FB00BF2846802100F0EEFB0028F9D1D6 -:1015900020464FF4805100F0D9F920464FF48041A5 -:1015A00000F0D4F9A4F5806420464FF4007100F0F7 -:1015B0007FFA70B149F641450120013D08BFB0BD39 -:1015C000FFF768F820464FF4007100F071FA002828 -:1015D000F2D10020B0BD0000B0B540F60044C4F226 -:1015E000010420464FF4804100F0AEF920464FF44C -:1015F000805100F0A9F9A4F554452846222100F0B5 -:10160000B1FB00BF2846802100F0AEFB0028F9D1D5 -:1016100020464FF4805100F099F920464FF4804164 -:1016200000F094F920464FF4805100F08DF92846DF -:10163000F82100F097FB00BF2846802100F094FBC2 -:101640000028F9D120464FF4805100F07FF9204660 -:101650004FF4804100F078F920464FF4805100F0BB -:1016600073F92846202100F07DFB00BF2846802129 -:1016700000F07AFB0028F9D120464FF4805100F0A9 -:1016800065F920464FF4804100F060F9A4F58064CC -:1016900020464FF4007100F00BFA70B149F6414555 -:1016A0000120013D08BFB0BDFEF7F4FF20464FF416 -:1016B000007100F0FDF90028F2D10020B0BD00005B -:1016C000F0B581B040F60044C4F201040E46C708EC -:1016D00020464FF4804100F037F920464FF4805106 -:1016E00000F032F9A4F5544528464E2100F03AFBAB -:1016F0002846802100F038FB0028F9D120464FF41D -:10170000805100F023F920464FF4804100F01EF98B -:1017100020464FF4805100F017F9F9B2284600F046 -:1017200021FB00BF2846802100F01EFB0028F9D1D4 -:1017300020464FF4805100F009F920464FF48041D3 -:1017400000F002F920464FF4805100F0FDF82846E1 -:101750004F2100F007FB00BF2846802100F004FB6A -:101760000028F9D140F22710861B20464FF4805103 -:1017700000F0ECF820464FF4804100F0E7F82046F6 -:101780004FF4805100F0E0F8F1B2284600F0EAFA98 -:101790002846802100F0E8FA0028F9D120464FF4CD -:1017A000805100F0D3F820464FF4805100F0CCF87F -:1017B000C6F30021284600F0D5FA00BF2846802154 -:1017C00000F0D2FA0028F9D120464FF4805101B040 -:1017D000BDE8F04000F0BAB8B0B540F60044C4F23D -:1017E000010420464FF4804100F0AEF820464FF44B -:1017F000805100F0A9F8A4F554452846222100F0B4 -:10180000B1FA00BF2846802100F0AEFA0028F9D1D5 -:1018100020464FF4805100F099F820464FF4804163 -:1018200000F094F820464FF4805100F08DF82846DF -:10183000F72100F097FA00BF2846802100F094FAC3 -:101840000028F9D120464FF4805100F07FF820465F -:101850004FF4804100F078F820464FF4805100F0BA -:1018600073F82846202100F07DFA00BF2846802129 -:1018700000F07AFA0028F9D120464FF4805100F0A8 -:1018800065F820464FF4804100F060F8A4F58064CC -:1018900020464FF4007100F00BF970B149F6414554 -:1018A000013D08BFB0BD0120FEF7F4FE20464FF415 -:1018B000007100F0FDF80028F2D1B0BD00214160B8 -:1018C000012101810170704740F21441C4F201010D -:1018D0000860704740F20841C4F20101426851F8C3 -:1018E000083C934341F8083C51F8043C934341F8C9 -:1018F000043C437A002B08BF704703786FEA020C60 -:101900002BB151F8043C134341F8043C04E051F876 -:10191000083C134341F8083C0B6803EA0C030B60D6 -:101920004B6803EA0C034B60007A012807D018B912 -:1019300008681043086070470868104308604868EA -:101940001043486070470000416170470161704773 -:1019500040F200424FF6FF71C0F20012C0E90012DF -:101960007047000080B58B08032B88BF80BD0C2218 -:1019700002EA810E4FF00F0C02EB83010CFA0EF21B -:10198000DFE803F002290F1C0821C4F201010B68F3 -:1019900000FA0EF023EA02020A600A6810430860A7 -:1019A00080BD0821C4F201018B6800FA0EF023EA21 -:1019B00002028A608A681043886080BD0821C4F2F0 -:1019C0000101CB6800FA0EF023EA0202CA60CA687D -:1019D0001043C86080BD0821C4F201014B6800FAC1 -:1019E0000EF023EA02024A604A681043486080BD54 -:1019F000B0B58B790A88032B0BD07BB9497928299C -:101A000001F00F0E18D0182908BF0261110616D177 -:101A10002EE04FF0000E110611D129E003F0080C62 -:101A20000B79C97903F00403634401F0030103EB6C -:101A3000010E110603D11BE04261110618D00023EC -:101A40004FF00F0C002104E00131082903F10403D9 -:101A50000ED022FA01F4E407F6D004680CFA03F57C -:101A6000AC43046004680EFA03F52C430460EBE712 -:101A7000B2F5807F38BFB0BD120A00234FF00F0CC3 -:101A8000002104E00131082903F104030ED022FAF9 -:101A900001F4E407F6D044680CFA03F5AC43446063 -:101AA00044680EFA03F52C434460EBE7B0BD000038 -:101AB00080680840401AB0FA80F040097047000082 -:101AC00010B582B00420C0F218000121FEF74AFDD3 -:101AD0006C462046FFF73CFF40F20040C0F2101079 -:101AE00001904FF40050009041F20000C4F2010058 -:101AF0002146FFF77DFF02B010BD000041F20C004F -:101B0000C4F20100016881F40051016070470000D7 -:101B100088B000F0A5F9FEF79DFDFEF765FCFEF725 -:101B20003DFCFFF7CDFFFFF739F9FEF7C3FE40F2AA -:101B30008804C2F20004FF26204680214FF49472EC -:101B4000B4230096FFF7AAFA41F20835C2F2000565 -:101B5000284680214FF49472B4230096FFF79EFA32 -:101B60002046FFF7C9FAFF20FFF7A6F92846FFF73E -:101B7000C3FAFF20FFF7A0F943F69E10C0F600005D -:101B8000009017200321FA227A230196FFF7B8FB71 -:101B900020462946FEF7B0FD01200126FEF746FE4D -:101BA0004FF4FA50FEF776FDFEF784FE2046FFF76D -:101BB000A3FAFF20FFF780F9002729A20A200021BD -:101BC00018230097FFF76AFC2AA20A20322110236B -:101BD0000097FFF763FC2EA20A201D211023009717 -:101BE000FFF75CFC2846FFF787FAFF20FFF764F950 -:101BF00046F26C40C0F22E00069045F22070C7F20B -:101C00006F20059046F66540C6F66C70049043F66A -:101C10003E60C4F62000039003AA0A20472118233F -:101C20000097FFF73BFC0A2067214FF48F72742363 -:101C300000970196FFF7F4F920462946FEF75CFD70 -:101C40000120FEF7F3FD40F20004C2F20004642517 -:101C5000FFF754FF20786843FEF71CFDF8E700BF4C -:101C6000322E3920457061706572204D6F64756C3D -:101C70006500000077697468203239362078203199 -:101C80003238207265736F6C7574696F6E00000076 -:101C900044657369676E65642042792057654163C6 -:101CA000742053747564696F00000000B0B54EF67F -:101CB0000C5ECEF2000EDEF800304FF0FF35C3F3BD -:101CC000022383F00704042C28BF0424033B05FAF5 -:101CD00004F438BF0023A143994005FA03F39A4363 -:101CE00000F00F03043B4EF2001C7344CEF2000CD4 -:101CF00011430C33B0F1FF3F4FEA011100EB0C022E -:101D0000C8BF02F540730028197048BFB0BD00F08D -:101D10001F01012202FA01F140094CF82010B0BD68 -:101D20004EF60C51CEF200010A684FF6FF031A403E -:101D300060F30A2242F0806040F0FD700860704756 -:101D40000021C0F8031001600121C171704700003B -:101D5000026801F0010122F0400242EA81110160B3 -:101D600070470000C16070478068084018BF0120BC -:101D700070470000C26922F40062C2610A78032A37 -:101D800027D8DFE802F00206121A026822F40042A5 -:101D90000EE0026822F400420260026822F48042EF -:101DA0000260026842F4806212E0026842F400427B -:101DB0000260026822F4804206E0026842F40042B7 -:101DC0000260026842F480420260026822F480628B -:101DD0000260CA79036802F0010223F4007343EA47 -:101DE000422202604A78012A06D1CA79012A03D127 -:101DF000026842F4807202E0026822F4807202609B -:101E00004A78036862F3820303608A784368072A8A -:101E100023F4807388BF03F5807343608A78036876 -:101E200062F3C5030360CA78036802F0010223F07D -:101E3000800343EAC21202600A79036802F00102D9 -:101E400023F4006343EAC22202604A79036862F322 -:101E5000410303608979026861F300020260704700 -:101E600080B5FEF7C3FB01200121FEF70FFB00BF89 -:101E7000FEF766FB0028FBD002203B210122FEF783 -:101E800085FB0020FEF74EFB02200121FEF7FEFA43 -:101E90001920FEF739FB0128FAD10020FEF7C0FA1D -:101EA0000420FEF7D9FA0420FEF7C8FA0120FEF755 -:101EB000E1FA0220FEF7BCFBFEF7C4FB0228FBD1CF -:101EC0000020FEF7D7FABDE8804000F001B800001E -:101ED000B0B541F2040441F20025C4F20204C0F29C -:101EE0007A05FEF7AFFB02280BD0A0BB206D800562 -:101EF00031D5E06A800144BF46F60045C0F2DC25DA -:101F000029E0D4F800C021682268C1F38341C2F3FC -:101F100041721301581C0F29034618BF0223002ADF -:101F200018BF03465FEACC3003EB010006D440F64D -:101F30000011C0F23D0100FB01F50CE021688903AE -:101F400001D4454307E0216DC1F301310231B5FBF6 -:101F5000F1F101FB00F540F20400C2F2000005605F -:101F6000216804A2C1F30311515C026822FA01F155 -:101F70000160B0BD00000000000000000102030489 -:101F8000060708094EF21001CEF200010A68042883 -:101F900022F0040208BF04320A607047F1EE100A12 -:101FA0004FF6FF71C0F2C03120EA010040F04070EE -:101FB000E1EE100A70470000000000000000002F52 -:101FC000000000000700070000147F147F140024A5 -:101FD0002A7F2A12006264081323003649552250D2 -:101FE00000000503000000001C2241000000412207 -:101FF0001C000014083E08140008083E08080000F1 -:1020000000A06000000808080808000060600000E8 -:10201000002010080402003E5149453E0000427F66 -:102020004000004261514946002141454B310018B2 -:1020300014127F10002745454539003C4A49493074 -:10204000000171090503003649494936000649492E -:10205000291E000036360000000056360000000839 -:102060001422410000141414141400004122140816 -:1020700000020151090600324959513E007C1211FB -:10208000127C007F49494936003E41414122007F90 -:102090004141221C007F49494941007F090909014A -:1020A000003E4149497A007F0808087F0000417FCF -:1020B0004100002040413F01007F08142241007F81 -:1020C00040404040007F020C027F007F0408107FE8 -:1020D000003E4141413E007F09090906003E415151 -:1020E000215E007F0919294600464949493100010E -:1020F000017F0101003F4040403F001F2040201F62 -:10210000003F4038403F0063140814630007087024 -:10211000080700615149454300007F4141000055D7 -:102120002A552A55000041417F00000402010204A3 -:102130000040404040400000010204000020545490 -:102140005478007F484444380038444444200038E0 -:102150004444487F00385454541800087E09010252 -:102160000018A4A4A47C007F080404780000447D27 -:102170004000004080847D00007F10284400000063 -:10218000417F4000007C04180478007C0804047837 -:1021900000384444443800FC242424180018242423 -:1021A00018FC007C0804040800485454542000041F -:1021B0003F444020003C4040207C001C2040201C2C -:1021C000003C4030403C004428102844001CA0A0A3 -:1021D000A07C004464544C441414141414140000DF -:1021E000000000000000000000000000FC000000F3 -:1021F000000002000000000C020C020000000000C1 -:10220000000090D0BCD0BC90000300030000182454 -:10221000FE448C000302070201001824D8B04C8051 -:10222000000300010201C038E438E00001020201AD -:10223000020208060000000000000000000000008C -:1022400000F80402000000010204000204F800008B -:102250000004020100009060F8609000000001009E -:1022600000002020FC2020000000010000000000F1 -:1022700000000000080600000000202020202000B0 -:10228000000000000000000000000000000200004C -:1022900000000080601C0200040300000000F8043D -:1022A0000404F8000102020201000008FC00000022 -:1022B00000020302000018844424180003020202F2 -:1022C000020008042424D80001020202010040B0E8 -:1022D00088FC80000000000302003C242424C40089 -:1022E000010202020100F824242CC00001020202B3 -:1022F00001000C04E41C0400000003000000D824CA -:102300002424D80001020202010038444444F800A9 -:1023100000030202010000001000000000000200A3 -:102320000000000020000000000006000000002067 -:1023300050880402000000000102909090909000EC -:10234000000000000000000204885020000201008C -:1023500000001804C4241800000002000000F80463 -:10236000E494F80001020202020000E09CF0800008 -:1023700002030000030204FC2424D800020302022A -:102380000100F80404040C0001020202010004FC34 -:102390000404F80002030202010004FC24740C008F -:1023A00002030202030004FC24740C000203020076 -:1023B0000000F0080444CC4000010202010004FCCB -:1023C0002020FC040203000003020404FC040400B7 -:1023D000020203020200000404FC040406040403D5 -:1023E000000004FC24D00C0402030200030204FCDD -:1023F00004000000020302020203FC3CC03CFC009B -:1024000003000300030004FC30C4FC0402030200C8 -:102410000300F8040404F80001020202010004FCB5 -:1024200024241800020302000000F8848404F80049 -:1024300001020207050004FC246498000203020064 -:102440000302182424448C000302020201000C043D -:10245000FC040C0000020302000004FC0000FC0469 -:10246000000102020100047C80E01C040000030063 -:1024700000001CE03CE01C00000300030000049C82 -:10248000609C0400020300030200041CE01C040022 -:102490000002030200000C84641C04000203020218 -:1024A00003000000FE020200000007040400000E0A -:1024B00030C00000000000010200000202FE000027 -:1024C00000040407000000040204000000000000F3 -:1024D00000000000000000000808080808080000CC -:1024E000020000000000000000000040A0A0C000AA -:1024F00000010202030204FC2020C00000030202CB -:10250000010000C02020600000010202020000C0A3 -:102510002024FC0000010202030200C0A0A0C000B1 -:102520000001020202000020F82424040002030239 -:1025300002000040A0A0602000070A0A0A0404FC70 -:102540002020C0000203020003020020E40000007B -:10255000000203020000000020E400000808080751 -:10256000000004FC80E020200203020003020404B7 -:10257000FC000000020203020200E020E020C00094 -:1025800003000300030020E02020C000020302003B -:10259000030200C02020C00000010202010020E070 -:1025A0002020C000080F0A02010000C02020E00027 -:1025B0000001020A0F0820E0402020000203020070 -:1025C00000000060A0A02000000202020300002022 -:1025D000F820000000000102020020E00020E000DE -:1025E00000010202030220E02080602000000301BD -:1025F00000006080E08060000003000300002060B5 -:102600008060200002030003020020E020806020A0 -:102610000808070100000020A0602000000203025B -:102620000200000020DE020000000007040000009D -:1026300000FF00000000000F00000002DE2000008C -:102640000004070000000201020404020000000070 -:10265000000000000000000000000000000000007A -:102660000000000000F8000000000000003330000F -:10267000000000100C06100C060000000000000016 -:10268000000040C07840C0784000043F04043F048C -:102690000400007088FC08300000001820FF211E94 -:1026A0000000F008F000E018000000211C031E21CB -:1026B0001E0000F00888700000001E212324192746 -:1026C000211010160E0000000000000000000000A5 -:1026D0000000000000E018040200000000071820BD -:1026E000400000020418E00000000040201807002D -:1026F0000000404080F0804040000202010F0102D3 -:102700000200000000F0000000000101011F0101B3 -:102710000100000000000000000080B07000000018 -:1027200000000000000000000000000101010101A4 -:102730000101000000000000000000303000000037 -:10274000000000000000806018040060180601000E -:10275000000000E010080810E000000F102020101A -:102760000F00001010F8000000000020203F202083 -:10277000000000700808088870000030282422211A -:1027800030000030088888483000001820202011D0 -:102790000E000000C02010F8000000070424243FB1 -:1027A000240000F80888880808000019212020115A -:1027B0000E0000E0108888180000000F1120201182 -:1027C0000E0000380808C83808000000003F00006C -:1027D00000000070880808887000001C2221212257 -:1027E0001C0000E010080810E00000003122221157 -:1027F0000F00000000C0C0000000000000303000EA -:102800000000000000800000000000008060000068 -:1028100000000000804020100800000102040810A1 -:1028200020004040404040404000040404040404B0 -:10283000040000081020408000000020100804025E -:102840000100007048080808F00000000030360160 -:102850000000C030C828E810E0000718272423141F -:102860000B000000C038E0000000203C23020227DB -:10287000382008F8888888700000203F2020201128 -:102880000E00C03008080808380007182020201063 -:10289000080008F808080810E000203F2020201059 -:1028A0000F0008F88888E8081000203F2020232027 -:1028B000180008F88888E8081000203F200003006E -:1028C0000000C03008080838000007182020221E29 -:1028D000020008F808000008F808203F2101012143 -:1028E0003F20000808F8080800000020203F2020B2 -:1028F000000000000808F8080800C08080807F0001 -:10290000000008F888C028180800203F2001263859 -:10291000200008F8080000000000203F20202020B0 -:10292000300008F8F800F8F80800203F003F003FAA -:10293000200008F830C00008F808203F20000718E1 -:102940003F00E01008080810E0000F1020202010C1 -:102950000F0008F808080808F000203F21010101D5 -:102960000000E01008080810E0000F182424385078 -:102970004F0008F8888888887000203F2000030CEA -:1029800030200070880808083800003820212122F3 -:102990001C00180808F8080818000000203F200054 -:1029A000000008F808000008F808001F2020202078 -:1029B0001F000878880000C83808000007380E019A -:1029C0000000F80800F80008F800033C0700073C86 -:1029D0000300081868808068180820302C03032C36 -:1029E00030200838C800C83808000000203F200008 -:1029F000000010080808C8380800203826212020C8 -:102A00001800000000FE020202000000007F4040AB -:102A10004000000C30C0000000000000000106383B -:102A2000C00000020202FE000000004040407F00A3 -:102A30000000000004020202040000000000000088 -:102A40000000000000000000000080808080808086 -:102A5000808000020204000000000000000000006E -:102A600000000000808080800000001924222222C3 -:102A70003F2008F8008080000000003F1120201156 -:102A80000E000000008080800000000E1120202039 -:102A90001100000000808088F800000E1120201036 -:102AA0003F200000808080800000001F2222222220 -:102AB0001300008080F0888888180020203F2020A4 -:102AC00000000000808080808000006B94949493CC -:102AD000600008F8008080800000203F2100002076 -:102AE0003F2000809898000000000020203F202018 -:102AF0000000000000809898000000C08080807F67 -:102B0000000008F8000080808000203F24022D3063 -:102B10002000000808F8000000000020203F2020CE -:102B200000008080808080808000203F20003F2047 -:102B3000003F8080008080800000203F2100002036 -:102B40003F200000808080800000001F2020202087 -:102B50001F00808000808000000080FFA1202011E5 -:102B60000E000000008080808000000E112020A058 -:102B7000FF80808080008080800020203F21200016 -:102B80000100000080808080800000332424242401 -:102B90001900008080E0808000000000001F2020DD -:102BA00000008080000000808000001F2020201096 -:102BB0003F20808080000080808000010E30080669 -:102BC000010080800080008080800F300C030C307A -:102BD0000F0000808000808080000020312E0E31A8 -:102BE0002000808080000080808080818E701806A8 -:102BF000010000808080808080000021302C222114 -:102C0000300000000000807C020200000000003F55 -:102C1000404000000000FF00000000000000FF0036 -:102C200000000002027C800000000040403F0000E5 -:102C30000000000601010202040400000000000080 -:102C40000000000000000000000000000000000084 -:102C50000000000000000000000000000000000074 -:102C60000000000000000000000000F0F0F0000094 -:102C700000000000000000017F01000000000000D3 -:102C80000000001C1C1C0000000000008060301CC4 -:102C90008C60301C0C0000000000000000000000F0 -:102CA0000000000000000000000000000000000024 -:102CB00000E00000000000E000000086E69F86863D -:102CC0008686E69F860000011F01010101011F01A8 -:102CD0000100000080C06020F820E0C0000000007B -:102CE00003070C18FF70E18100000000070F1010AF -:102CF0007F100F0700008060206080000000E0204F -:102D000000000F3020309F70DC371030C000000012 -:102D1000100E03000718101807000000C02020E064 -:102D2000C0000000000080E01F38E88703C43C04B6 -:102D30000000070F1810100B070D1010080000807E -:102D40008C4C380000000000000000000000000073 -:102D50000000000000000000000000000000000073 -:102D6000000000000000000080E0300804000000C7 -:102D7000000000FEFF010000000000000000000055 -:102D8000030F1820400000040830E080000000001D -:102D900000000000000001FFFE00000000000040F5 -:102DA00020180F03000000000000000000000000D9 -:102DB000C00000000000004266663C18FF183C6638 -:102DC0006642000000000000030000000000000058 -:102DD0000000000080000000000000101010101023 -:102DE000FF10101010100000000000000300000091 -:102DF00000000000000000000000000000000000D3 -:102E00000000000000000000000000808C4C380032 -:102E100000000000000000000000000000000000B2 -:102E20000000001010101010101010101000000002 -:102E30000000000000000000000000000000000092 -:102E40000000000000000000000000000000000082 -:102E5000000000001C1C1C0000000000000000001E -:102E6000000000000000E0380C000000000080704E -:102E70001C03000000000060380E0100000000008C -:102E80000000000080C060202060C080000000FEC4 -:102E9000FF010000000001FFFE000001070E1810F6 -:102EA00010180E0701000000808080C0E0000000C4 -:102EB00000000000000000FFFF0000000000000014 -:102EC0001010101F1F101010000000804020202044 -:102ED0002060C080000000030300804020381F07EE -:102EE0000000001C1A1918181818181F000000807C -:102EF000C020202060C080000000000303001010EC -:102F0000182FE780000000070F10101010180F078F -:102F10000000000000000000C0E0F000000000C061 -:102F2000B088868180FFFF808000000000000010D4 -:102F3000101F1F1010000000E060606060606060A3 -:102F4000000000003F1008080818F0E0000000072B -:102F50000B101010101C0F030000000080C0402058 -:102F60002020E0C0000000FCFF211008080818F035 -:102F7000E0000001070C18101010080F03000000FB -:102F8000C0E06060606060E060000000030000007E -:102F9000E0180700000000000000001F1F000000F4 -:102FA00000000080C0602020202060C080000087DA -:102FB000EF2C1818303068CF830000070F0810106E -:102FC0001010180F07000000C0C020202020C08073 -:102FD0000000001F3F604040402010FFFE00000046 -:102FE0000C1C101010080F0300000000000000006F -:102FF00000000000000000000000000E0E0E0000A7 -:10300000000000000000001C1C1C0000000000006C -:103010000000000000000000000000000000000CA4 -:103020000C00000000000000000000583800000004 -:1030300000000000000000000080402010000000A0 -:103040001028448201000000000000000000000081 -:103050000102040810000000000000000000000051 -:103060000000008484848484848484848400000038 -:103070000000000000000000000000001020408060 -:103080000000000000000000000000000182442851 -:10309000100000001008040201000000000000C041 -:1030A00020201010101030E0C0000003030000F0DA -:1030B00010080C070300000000001C1C1C0000008E -:1030C0000000000000C0406020202040C00000FC44 -:1030D000FF01F00E03C1FE03807F0001070E0811FF -:1030E0001110110904020000000080E0E00000005F -:1030F00000000000807C4340477FF88000001018EB -:103100001F1000000000131F1C1020E0E0202020F2 -:103110002060C080000000FFFF10101010182FE783 -:103120008000101F1F1010101010180F0700000053 -:1031300080C0402020202060E00000FCFF01000053 -:103140000000000001000001070E18101010080414 -:10315000030020E0E02020202040C080000000FF8D -:10316000FF000000000001FFFE00101F1F101010E4 -:1031700018080E07010020E0E02020202020206019 -:10318000800000FFFF101010107C00000000101FD6 -:103190001F10101010101018060020E0E020202052 -:1031A00020206060800000FFFF101010107C0000E5 -:1031B0000100101F1F1000000000000000000000B0 -:1031C00080C06020202040E0000000FCFF010000E3 -:1031D0004040C0C140400001070E181010100F0FF2 -:1031E000000020E0E0200000000020E0E02000FFE0 -:1031F000FF101010101010FFFF00101F1F10000014 -:103200000000101F1F100000202020E0E0202020E0 -:1032100000000000000000FFFF00000000000000B0 -:103220001010101F1F1010100000000000002020C0 -:1032300020E0E020202000000000000000FFFF0050 -:1032400000000060E0808080C07F3F00000020E040 -:10325000E020000020A06020200000FFFF30187C4C -:10326000E3C000000000101F1F10000001131F1C0E -:10327000181020E0E020000000000000000000FF27 -:10328000FF000000000000000000101F1F101010C1 -:1032900010101018060020E0E0E000000000E0E060 -:1032A000E02000FF013FFEC0E01E01FFFF00101FF5 -:1032B0001000031F0300101F1F1020E0E0C00000DB -:1032C00000000020E02000FF0003071C78E08000E1 -:1032D000FF00101F100000000000030F1F0000007F -:1032E00080C060202060C080000000FEFF01000060 -:1032F000000000FFFE000001070E181010180C0758 -:10330000010020E0E0202020202060C0800000FF9D -:10331000FF2020202020301F0F00101F1F10000052 -:10332000000000000000000080C060202060C0801D -:10333000000000FEFF010000000000FFFE00000191 -:10334000070E1111133C7C67210020E0E0202020B3 -:10335000202060C0800000FFFF101030F0D0080F68 -:103360000700101F1F10000000030F1C101000802A -:10337000C060202020204040E00000070F0C1818FB -:10338000303060E08100001F0C0810101010180F82 -:1033900007008060202020E0E020202060800100E5 -:1033A000000000FFFF000000000100000000101FEF -:1033B0001F100000000020E0E020000000000020BE -:1033C000E02000FFFF00000000000000FF000007F9 -:1033D0000F1810101010100807002060E0E0200007 -:1033E000000020E060200000077FF88000807C0360 -:1033F000000000000000071F1C070000000020E084 -:10340000E02000E0E0200020E0200007FFF8E01FBF -:10341000FFFCE01F00000000031F0300011F03006A -:103420000000002060E0A0000020E060200000001C -:1034300000038F7CF8C6010000000010181E130066 -:1034400001171F1810002060E0E02000000020E0BD -:103450006020000001073EF8E018070000000000AF -:103460000010101F1F10100000000080602020209E -:1034700020A0E0E0200000000000C0F03E0F0300AC -:10348000000000101C1F171010101018060000007C -:10349000000000FC0404040404000000000000FF1D -:1034A00000000000000000000000007F404040409D -:1034B0004000000010E000000000000000000000DC -:1034C0000000031C608000000000000000000000FD -:1034D00000030C70800000000404040404FC0000DD -:1034E000000000000000000000FF000000000000DD -:1034F00040404040407F0000000000000010080CE9 -:10350000040C081000000000000000000000000093 -:1035100000000000000000000000000000000000AB -:10352000000000000000000000000000000000009B -:10353000000000000000808080808080808080808B -:103540008080000000040408080000000000000063 -:10355000000000000000000000000000000000006B -:10356000000000000000000000000000000000005B -:103570000000000098D844642424FCF80000000FE8 -:103580001F18101010081F1F10180020E0F0000076 -:103590000000000000000000FFFF180804040CF801 -:1035A000F00000001F0F18101010180F030000008B -:1035B0000000000000000000000000E0F818040413 -:1035C000043C3800000000030F0C10101010080617 -:1035D00000000000000000000020E0F0000000E01B -:1035E000F81C04040408FFFF000000030F1810106B -:1035F00010081F0F0800000000000000000000007D -:1036000000000000E0F8484444444C78700000009A -:10361000030F0C181010100804000000000080C0F8 -:10362000602020E0C00000040404FFFF0404040440 -:103630000000000010101F1F1010100000000000FC -:1036400000000000000000000000000070F88C0482 -:10365000048CF874040C007076CF8D8D8D89C87839 -:1036600070000020E0F000000000000000000000FA -:10367000FFFF08040404FCF8000000101F1F1000E6 -:1036800000101F1F1000000000000060600000001C -:1036900000000000040404FCFC0000000000000026 -:1036A0001010101F1F10101000000000000000007C -:1036B00000606000000000000000040404FCFC0046 -:1036C00000000000C0C08080C07F3F0000000020DC -:1036D000E0F000000000000000000000FFFF80C0DC -:1036E000F41C0404000000101F1F1100031F1C1015 -:1036F00010000000202020E0F0000000000000008A -:10370000000000FFFF000000000000001010101F6C -:103710001F1010100000000000000000000000005A -:10372000000004FCFC0804FCFC0804FCFC00101F66 -:103730001F10001F1F10001F1F10000000000000BE -:103740000000000000000004FCFC08080404FCF871 -:10375000000000101F1F100000101F1F10000000AD -:103760000000000000000000000000E0F0180C0461 -:10377000040C18F0E00000030F0C101010100C0FD8 -:103780000300000000000000000000000000000432 -:10379000FCFC080404040CF8F0000080FFFF889093 -:1037A00010101C0F030000000000000000000000CB -:1037B000000000E0F81C04040408F8FC000000030A -:1037C0000F1810109088FFFF80000000000000001C -:1037D000000000000000040404FCFC100804040CB9 -:1037E0000C001010101F1F1010100000000000002F -:1037F0000000000000000000000000003078CCC491 -:103800008484840C1C0000001E1810101011190F65 -:1038100006000000000000C00000000000000004DE -:103820000404FFFF040404000000000000000F1F58 -:103830001010100C0000000000000000000000004C -:1038400000000004FCFE00000004FCFE000000007C -:103850000F1F181010081F0F0800000000000000C4 -:1038600000000000000000040C3CFCC40000C43C4C -:103870000C0400000000010F1E0E010000000000FB -:1038800000000000000000000000043CFCC400E454 -:103890007CFC84807C040000071F070000071F07D2 -:1038A0000000000000000000000000000000000414 -:1038B000041C7CE4C0341C0404000010101C16011D -:1038C000131F1C1810000000000000000000000082 -:1038D000000000040C3CFCC400C43C0404000000D4 -:1038E000C080C1370E010000000000000000000091 -:1038F00000000000000000001C0404C4F47C1C0450 -:1039000000000000101C1F17111010180E000000FE -:103910000000000000F80C0400000000000000108F -:1039200028EF00000000000000000000003F6040A1 -:103930000000000000000000FF0000000000000088 -:1039400000000000FF000000000000000000000078 -:10395000FF00000000000000040CF8000000000060 -:10396000000000000000EF28100000000000000030 -:1039700040603F0000000000000000180602020442 -:1039800008102020300800000000000000000000A7 -:103990000000000000000000000000000000000027 -:1039A0000000000000000000000000000000000017 +:1001500073020008730200087302000873020008AB +:10016000730200087302000873020008730200089B +:10017000730200087302000873020008730200088B +:100180007302000800F002F800F057F814A696E891 +:10019000000CB244B344DA4501D100F04EF8BAE89D +:1001A0000F000FA696E83000A5EB040504EB060748 +:1001B000AAEB0704A7F101074FEA15154FEA34141B +:1001C000A4F10104AC4201D300F037F813F0010FA1 +:1001D00018BFFB1A43F0010300F001F8DBE71847F2 +:1001E000004C0000204C0000103A24BF78C878C1B1 +:1001F000FAD8520724BF30C830C144BF04680C602D +:1002000070470000704700000023002400250026EE +:10021000103A28BF78C1FBD8520728BF30C148BF69 +:100220000B607047642900F07F80002070471FB585 +:1002300002F004F91FBD10B510BD00F02AF91146F7 +:10024000FFF7F5FF01F074FE00F048F903B4FFF783 +:10025000F2FF03BC00F050F9094880470948004705 +:10026000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE766 +:10027000FEE7FEE704480549054A064B70470000C3 +:100280006105000885010008203B00202041002076 +:10029000203D0020203D00200FB41CB5074B06AACE +:1002A0007B4469460090059800F0DBF80020694621 +:1002B00000F0EAF81CBC5DF814FB0000E50100004A +:1002C0002DE9F0410E460446002020622046E168F8 +:1002D000884730B3252805D0D4E901219047206A0A +:1002E000401CF2E7E168204600278847050018D047 +:1002F000A5F14100192802D820354FF40067324695 +:10030000294620462760FFF78DFF40B1012804D021 +:10031000F61D26F007060836D8E7361DD6E728462C +:10032000DAE7206ABDE8F0812DE9F04106460024B5 +:1003300010687529314616A510D0AFF3008000284B +:1003400002DA404213A507E031688A0701D512A5F9 +:1003500002E0490704D511A5012401E0AFF30080B4 +:1003600000210A2206F1240709E0B0FBF2FCB0FBF1 +:10037000F2F302FB1C00303078541846491C002868 +:10038000F3D123462A463046BDE8F04100F00BB8D1 +:10039000000000002D0000002B00000020000000E5 +:1003A0007047704770472DE9F0470D4699469246D1 +:1003B000044600F124080168880604D5E06921F0AC +:1003C0001001216000E00120A84201DD471B00E090 +:1003D0000027A1697A1902EB0900081AA0612078A8 +:1003E000C00602D42046AFF30080002608E0D4E91E +:1003F00001211AF806009047206A401C761C2062F2 +:100400004E45F4DB2078C0060AD52046AFF30080C5 +:1004100006E0D4E9012130209047206A401C206288 +:10042000381EA7F10107F4DC07E0D4E9012118F830 +:1004300005009047206A401C2062281EA5F1010596 +:10044000F3DC2046AFF300802078000602D50220BE +:10045000BDE8F0870120FBE701694A1C02610878CA +:10046000704700B58FB0CDE90131002105910549F4 +:100470007944CDE9031011466846FFF721FF0FB01C +:1004800000BD0000E5FFFFFF0A6802F8010B0A60EB +:100490007047754600F02CF8AE4605006946534695 +:1004A00020F00700854618B020B5FFF7E3FEBDE851 +:1004B00020404FF000064FF000074FF000084FF0CB +:1004C000000BAC46ACE8C009ACE8C009ACE8C00918 +:1004D000ACE8C00921F007018D46704710B504460D +:1004E000AFF300802046BDE81040FFF7AFBE00002C +:1004F000004870470800002001491820ABBEFEE705 +:100500002600020070470000FEE700007047000070 +:1005100080B5052000F0D2F9012001F0DDFB40F6A6 +:100520000000C4F20100012101F0D2FC002818BF34 +:1005300080BD40F20000C2F20000017804220429CC +:1005400008BF0122027080BDFEE70000FEE7000048 +:1005500070470000704700007047000070470000BF +:100560004EF6885CCEF2000CDCF8002041F200016F +:1005700042F47002C4F20201CCF800200A6842F092 +:1005800001020A600A689207FCD54A6822F0030259 +:100590004A6000BF4A6812F00C0FFBD100224A608B +:1005A0000B684FF6FF70CFF6F260184008604FF40A +:1005B0001F000A6388604FF000604CF8800C7047A1 +:1005C000FEE7000070B584B04FF4C0100121012592 +:1005D00000F0DCF800200021002601F0CBFB01AC8C +:1005E000204601F073FB40F20110ADF80C002046EC +:1005F0008DF80460029501F075FB032001F0E0FD29 +:1006000006200021002201F0A1FD04B070BD000011 +:10061000B0B582B00220C0F218000121012500F01F +:10062000B5F86C46204601F09BFB41F60000C0F295 +:100630000010CDE9005040F60000C4F20100214650 +:1006400001F0E6FB02B0B0BD41F20401C4F20201C8 +:100650000A6800F00F0022F0F00242EA0010086081 +:100660007047000041F20401C4F202010A6800F080 +:10067000070022F4E06242EA0020086070470000B0 +:1006800041F20401C4F202010A6800F0070022F4FA +:10069000605242EAC02008607047000041F25401F5 +:1006A000C4F202010A68012822F0300208BF303289 +:1006B0000A607047042888BF7047DFE800F0030C29 +:1006C00019262F0041F20000C4F20200026861F313 +:1006D00000020260704741F20000C4F202000268AA +:1006E00001F0010122F4803242EA014101607047C9 +:1006F00041F20000C4F20200026801F0010122F0A0 +:10070000807242EA01610160704741F20000C4F268 +:100710000200026A61F300020262704741F20000C7 +:10072000C4F20200426A61F30002426270470000B4 +:1007300041F20002010CC4F20202895800F01F00CD +:1007400021FA00F000F001007047000041F254016E +:10075000C4F202010A6800F0030022F4405242EAA7 +:10076000003008607047000041F200010020C4F230 +:10077000020100BF0A68920304D4B0F5405F00F1A3 +:100780000100F7D30868C0F34040704741F200020F +:1007900000F01F034FF0010CC4F2020201290CFA11 +:1007A00003F14FEA1040835814BF23EA01011943B3 +:1007B0008150704780B541F2040EC4F2020EDEF89B +:1007C00000C060B14CF48033CEF80030DEF800C0D9 +:1007D000012814BF4CF400302CF4003001E02CF45C +:1007E0008030CEF80000DEF8000061F39540CEF8CE +:1007F0000000DEF80000090961F35E70CEF8000029 +:10080000DEF8000020F0004040EAC270CEF80000A0 +:1008100080BD000041F20000C4F20200016841F016 +:100820000101016001688907FCD5416821F00301DD +:10083000416000BF416811F00C0FFBD10021416005 +:1008400002684FF6FF73CFF6F2631A40026001634D +:100850004FF41F018160704741F20401C4F20201AC +:100860000A6860F301020A607047000041F2040068 +:10087000C4F202000068C0F38100704780B5042014 +:1008800001F0D0FD40F20400C2F2000000684DF615 +:100890008361C4F21B31A0FB0101880C40F284018A +:1008A000C2F20001086008684FF47A71484340F2D0 +:1008B0008001C2F20001086080BD0000002808BF6E +:1008C000704780B54EF2100140F2800ECEF200016A +:1008D000C2F2000E4FF0320C002300BF82B2332A66 +:1008E00006D3DEF80020323802FB0CF24A6004E046 +:1008F000DEF800005043486000208B600A6842F038 +:1009000001020A600A6802F00112012AFAD00A689C +:1009100022F001020A6002048B60DFD1BDE8804052 +:10092000704700002DE9F04381B040F60044C4F266 +:1009300001048946074620464FF4804198461646F2 +:1009400001F00AFA20464FF4805101F005FAA4F5AF +:1009500054452846442101F055FC00BF284680211B +:1009600001F052FC0028F9D120464FF4805101F0EB +:10097000F5F920464FF4804101F0F0F920464FF49C +:10098000805101F0E9F9C7F3C701284601F03AFCAC +:100990002846802101F038FC0028F9D120464FF488 +:1009A000805101F0DBF920464FF4805101F0D4F979 +:1009B000C6F3C701284601F025FC00BF2846802168 +:1009C00001F022FC0028F9D120464FF4805101F0BB +:1009D000C5F920464FF4804101F0BEF920464FF49E +:1009E000805101F0B9F92846452101F00BFC00BF08 +:1009F0002846802101F008FC0028F9D120464FF458 +:100A0000805101F0ABF920464FF4804101F0A6F986 +:100A100020464FF4805101F09FF95FFA89F1284692 +:100A200001F0F0FB2846802101F0EEFB0028F9D10F +:100A300020464FF4805101F091F920464FF4805147 +:100A40004FEA192601F088F92846314601F0DAFB11 +:100A50002846802101F0D8FB0028F9D120464FF428 +:100A6000805101F07BF920464FF4805101F074F978 +:100A70005FFA88F1284601F0C5FB00BF28468021B7 +:100A800001F0C2FB0028F9D120464FF4805101F05B +:100A900065F920464FF480514FEA182601F05CF9C1 +:100AA0002846314601F0AEFB2846802101F0ACFB20 +:100AB0000028F9D120464FF4805101B0BDE8F04341 +:100AC00001F04CB92DE9F04381B0814640F6004871 +:100AD00000200021C4F2010800F08AFF40464FF4D4 +:100AE000804101F039F940464FF4805101F034F96A +:100AF000A8F554463046262101F084FB304680217B +:100B000001F082FB0028F9D140464FF4805101F0FA +:100B100025F940464FF4804101F020F940464FF45A +:100B2000805101F019F9002443F6982519F8047052 +:100B30003046022101F068FB0028F9D030463946E2 +:100B400001F060FB0134AC42F0D100BF304680219F +:100B500001F05AFB0028F9D140464FF4805101F0D2 +:100B6000FDF80020002100F043FF40464FF4804193 +:100B700001F0F2F840464FF4805101F0EDF83046B4 +:100B8000242101F03FFB00BF3046802101F03CFBF7 +:100B90000028F9D140464FF4805101F0DFF840467B +:100BA0004FF4804101F0DAF840464FF4805101F0F3 +:100BB000D3F8002443F6982519F804703046022132 +:100BC00001F022FB0028F9D03046394601F01AFB2B +:100BD0000134AC42F0D100BF3046802101F014FB5B +:100BE0000028F9D140464FF4805101F0B7F801B028 +:100BF000BDE8F04300F086BF2DE9F04381B08146A7 +:100C000040F6004800200021C4F2010800F0F0FE88 +:100C100040464FF4804101F09FF840464FF4805128 +:100C200001F09AF8A8F554463046242101F0EAFA7A +:100C30003046802101F0E8FA0028F9D140464FF40F +:100C4000805101F08BF840464FF4804101F086F866 +:100C500040464FF4805101F07FF8002443F6982578 +:100C600019F804703046022101F0CEFA0028F9D0BC +:100C70003046394601F0C6FA0134AC42F0D100BF2B +:100C80003046802101F0C0FA0028F9D140464FF4E7 +:100C9000805101F063F800F0A7FF0020002100F070 +:100CA000A7FE40464FF4804101F056F840464FF40D +:100CB000805101F051F83046262101F0A3FA00BF1F +:100CC0003046802101F0A0FA0028F9D140464FF4C7 +:100CD000805101F043F840464FF4804101F03EF866 +:100CE00040464FF4805101F037F8002443F6982530 +:100CF00019F804703046022101F086FA0028F9D074 +:100D00003046394601F07EFA0134AC42F0D100BFE2 +:100D10003046802101F078FA0028F9D140464FF49E +:100D2000805101B0BDE8F04301F018B870B540F64D +:100D300000440546C4F2010400F072FD20464FF461 +:100D4000804101F009F820464FF4805101F004F889 +:100D5000A4F554463046102101F054FA3046802163 +:100D600001F052FA0028F9D120464FF4805100F0EA +:100D7000F5FF20464FF4804100F0F0FF20464FF48D +:100D8000805100F0E9FF3046294601F03BFA00BFF0 +:100D90003046802101F038FA0028F9D120464FF47E +:100DA000805100F0DBFF40F27C00C2F20000002125 +:100DB000017070BDF0B581B040F27C06C2F2000651 +:100DC000307840F60044C4F2010498B9A4F5806577 +:100DD00028464FF4807100F0BFFF3220FFF76EFD10 +:100DE00028464FF4807100F0B9FF3220FFF766FD0E +:100DF00001203070A4F5806630464FF4007101F098 +:100E000067F870B149F64145013D00F09581012038 +:100E1000FFF754FD30464FF4007101F059F80028F7 +:100E2000F2D120464FF4804100F096FF20464FF467 +:100E3000805100F091FFA4F554452846122101F09D +:100E4000E1F900BF2846802101F0DEF90028F9D140 +:100E500020464FF4805100F081FF20464FF480413E +:100E600000F07CFF0A20FFF729FD30464FF40071A7 +:100E700001F02EF878B149F6414700BF013F00F07C +:100E80005B810120FFF71AFD30464FF4007101F03D +:100E90001FF80028F2D120464FF4804100F05CFF9B +:100EA00020464FF4805100F057FF2846212101F0E1 +:100EB000A9F900BF2846802101F0A6F90028F9D140 +:100EC00020464FF4805100F049FF20464FF4804106 +:100ED00000F044FF20464FF4805100F03DFF2846CB +:100EE000402101F08FF900BF2846802101F08CF9E4 +:100EF0000028F9D120464FF4805100F02FFF204602 +:100F00004FF4805100F028FF2846002101F07AF9C3 +:100F10002846802101F078F90028F9D120464FF4C5 +:100F2000805100F01BFF20464FF4804100F014FF79 +:100F300020464FF4805100F00FFF2846012101F0B8 +:100F400061F900BF2846802101F05EF90028F9D13F +:100F500020464FF4805100F001FF20464FF48041BD +:100F600000F0FCFE20464FF4805100F0F5FE2846CC +:100F70002B2101F047F900BF2846802101F044F9F8 +:100F80000028F9D120464FF4805100F0E7FE2046BA +:100F90004FF4805100F0E0FE2846012101F032F9C3 +:100FA0002846802101F030F90028F9D120464FF47D +:100FB000805100F0D3FE20464FF4805100F0CCFE6B +:100FC0002846002101F01EF92846802101F01CF975 +:100FD0000028F9D120464FF4805100F0BFFE204692 +:100FE0004FF4804100F0B8FE20464FF4805100F0ED +:100FF000B3FE28463C2101F005F900BF28468021B8 +:1010000001F002F90028F9D120464FF4805100F098 +:10101000A5FE20464FF4804100F0A0FE20464FF48C +:10102000805100F099FE2846012101F0EBF800BF45 +:101030002846802101F0E8F80028F9D120464FF435 +:10104000805100F08BFE20464FF4804100F084FE7A +:1010500020464FF4805100F07FFE2846112101F018 +:10106000D1F800BF2846802101F0CEF80028F9D140 +:1010700020464FF4805100F071FE20464FF480412D +:1010800000F06CFE20464FF4805100F065FE2846CB +:10109000032101F0B7F800BF2846802101F0B4F821 +:1010A0000028F9D120464FF4805100F057FE00206F +:1010B000002140F28F1240F22B13FFF733FC204641 +:1010C0004FF4804100F048FE20464FF4805100F07C +:1010D00043FE2846182101F095F800BF28468021DC +:1010E00001F092F80028F9D120464FF4805100F029 +:1010F00035FE20464FF4804100F030FE20464FF48C +:10110000805100F029FE2846802101F07BF800BFC5 +:101110002846802101F078F80028F9D120464FF4C4 +:10112000805100F01BFE0020002100F061FC01B0A6 +:10113000BDE8F04000F0E8BB012001B0F0BD0000C8 +:10114000B0B5FFF737FE00281CBF0120B0BD40F648 +:101150000044C4F2010420464FF4804100F0FCFD3D +:1011600020464FF4805100F0F7FDA4F55445284681 +:101170003C2101F047F800BF2846802101F044F8E7 +:101180000028F9D120464FF4805100F0E7FD2046B9 +:101190004FF4804100F0E2FD20464FF4805100F012 +:1011A000DBFD2846802101F02DF800BF2846802174 +:1011B00001F02AF80028F9D120464FF4805100F0C0 +:1011C000CDFD20464FF4804100F0C6FD20464FF48F +:1011D000805100F0C1FD2846212101F013F800BF25 +:1011E0002846802101F010F80028F9D120464FF45C +:1011F000805100F0B3FD20464FF4804100F0AEFD79 +:1012000020464FF4805100F0A7FD2846002100F051 +:10121000F9FF00BF2846802100F0F6FF0028F9D131 +:1012200020464FF4805100F099FD20464FF4805144 +:1012300000F092FD2846002100F0E4FF28468021BE +:1012400000F0E2FF0028F9D120464FF4805100F071 +:1012500085FD0020B0BD00002DE9F04184B00224DE +:10126000C0F2180420460121FFF790FA601C01210A +:10127000FFF78CFA02AD284600F072FD40F60044FC +:10128000C4F20104A4F5806630464FF480714FF437 +:10129000807700F061FD40F20040C0F21010CDE90F +:1012A00002703046294600F0B3FD1820ADF80D005D +:1012B0004FF4007002903046294600F0A9FD204608 +:1012C0004FF480414FF4804600F048FD4FF0100885 +:1012D0004FF48067204629468DF80E80ADF80C70DB +:1012E000029600F095FD4FF400500826029020462B +:1012F0002946ADF80C708DF80E6000F089FD4FF4B2 +:1013000000400290204629468DF80E6000F080FDD6 +:1013100020464FF480514FF4805600F01FFD2046C8 +:1013200029468DF80E80ADF80C70029600F070FD25 +:101330000E20C0F21C000121FFF728FA6D46284656 +:1013400000F04EFF40F20310C0F20500009040F2A2 +:101350000010C0F20110A4F5544401902046294623 +:1013600000F058FF2046012100F042FF04B0BDE824 +:10137000F081000040F2680CC2F2000CBCF81210C0 +:10138000002908BF704780B54FF0000E06E000BF8F +:10139000BCF812100EF1010E8E4513D2BCF81030BD +:1013A000002BF5D04FF0FF31DCF800209BB20EFB94 +:1013B00003220A445070BCF810308A1C01319A4252 +:1013C000F2D3E5E7BDE880407047000010B540F279 +:1013D000680EDDF808C0C2F2000ECEF80000C808A2 +:1013E000AEF80810AEF80A20AEF80CC04FF0010CB1 +:1013F0004C0718BF0CEBD100AEF81000AEF80E3061 +:10140000B3FA83F0B43BB3FA83F340095B091843A2 +:101410000846AEF812201CBF10460A46AEF804007B +:10142000AEF8062010BD000040F26801C2F20001D3 +:10143000086070472DE9F04F8BB00130069080B204 +:101440000590C01AB0F5967F00F3EF80082B02D10B +:1014500006276FB9E9E0D8085F074FF0010618BF0B +:1014600006EBD3005F08784387B2002F00F0DD80E1 +:10147000A2F1200085B25808039042F2564005EBD5 +:101480004502C0F6000000EB4200049042F6F22054 +:1014900040F26806C0F60000DDF818E001314FF6B2 +:1014A0007F7B00240192C2F20006802200EB05102F +:1014B00002950090CDE9077312E000BF05991FFA6D +:1014C0008EF0401A03998842069808BF864609990B +:1014D00008BF083107980A9C0134844200F0A580B7 +:1014E000082B0A9402D1049818E000BF182B0AD0E8 +:1014F000102B12D00C2B40F09880019842F27E63A2 +:10150000C0F6000306E0029843F2E20300EBC000DD +:10151000C0F6000303EB800000E00098204490F840 +:101520000090AEF101084FF0000C099124E07089A1 +:10153000A0EB0E00348A80B21FFA8AF3604334684D +:1015400000EBD303E018E35C0AF007050FFA8BF712 +:1015500022FA05F447FA05F51C4303EA0507149B34 +:10156000002B08BF274607704FEA59090131BCF12B +:10157000070F0CF1010C4FD2F0895FEAC974A1F199 +:10158000010A0BD1B32815DC20B35A28ECD13089DD +:101590007389A0EB0E0A581ACCE700BFB32811DC00 +:1015A000E8B15A28E0D130897489A0EB0E0A601A9C +:1015B0001DE000BFB428BAD0B0F5877F5046C246C0 +:1015C000B8D0D1E7B4280FD0B0F5877F5046C246D7 +:1015D0000DD0C9E73089A0EB010A4046AAE730895F +:1015E000A0EB010A404602E07089A0EB0E00378AAA +:1015F00080B21FFA8AF47843376800EBD4043819B4 +:101600003C5D0AF007030FFA8BF522FA03F745FA5F +:1016100003F327431C40A2E7089B0EF1010E082BA1 +:101620007FF44CAF0798099955E70BB0BDE8F08FF0 +:101630002DE9F04F89B0DE085F0705924FF00102F7 +:1016400018BF02EBD306002E009600F0BB800130DD +:10165000DDF84C904E1C81B240F2680703910025E2 +:10166000C2F200074FF0800C0024314604900AE0DB +:101670000599019C029D0C4431460135009BAAB29C +:101680009A4280F09F80059A002AF6D000230295A6 +:10169000019413E00130039A81B2891A059A069CDD +:1016A0009142049908BF0846089E08BF0836079B68 +:1016B0000134013399B291423146D9D2CDE9064382 +:1016C000129BA2B213F80280A0F1010B4FF0000AA6 +:1016D000089623E07A89121A3C8A92B21FFA8EF396 +:1016E00062433C6802EBD302A518A35C4FF67F74FB +:1016F0000EF0070624B22CFA06F244FA06F61A4354 +:101700003340B9F1000F08BF1A462A704FEA580853 +:101710000131BAF1070F0AF1010ABBD2FD895FEA74 +:10172000C872A1F1010E0BD1B32D15DC25B35A2DD2 +:10173000ECD13A897B89A2EB000E5A1ACCE700BFA4 +:10174000B32D11DCEDB15A2DE0D13A897B89A2EBA2 +:10175000000E5A1A1CE000BFB42DBBD0B5F5877F30 +:101760007246DE46B8D0D1E7B42D0FD0B5F5877FED +:101770007246DE460CD0C9E73A89A2EB010E5A4602 +:10178000AAE73A89A2EB010E5A4601E07A89121AB9 +:101790003D8A92B21FFA8EF36A434C46D7F8009006 +:1017A00002EBD3024FF67F7609EB020519F802200F +:1017B000A1460EF0070436B22CFA04F32641134377 +:1017C00032409EE709B0BDE8F08F00002DE9F047F8 +:1017D00082B01C461378FBB1DDF828804FEA540A2A +:1017E0000D460646CAF59679571C06E05644B0B237 +:1017F000814511DB17F8013B73B1B0B2DAB229466B +:101800002346CDF80080FFF715FE082CEED10636F2 +:10181000B0B2B0F5937FEDD902B0BDE8F08700001B +:10182000B0B540F60044C4F2010420464FF48041B4 +:1018300000F092FA20464FF4805100F08DFAA4F5A2 +:1018400054452846222100F0DDFC00BF28468021B7 +:1018500000F0DAFC0028F9D120464FF4805100F066 +:101860007DFA20464FF4804100F078FA20464FF48C +:10187000805100F071FA2846832100F0C3FC00BFBC +:101880002846802100F0C0FC0028F9D120464FF402 +:10189000805100F063FA20464FF4804100F05CFA7A +:1018A00020464FF4805100F057FA2846202100F0DE +:1018B000A9FC00BF2846802100F0A6FC0028F9D131 +:1018C00020464FF4805100F049FA20464FF4804101 +:1018D00000F044FAA4F5806420464FF4007100F053 +:1018E000F7FA70B149F641450120013D08BFB0BD8E +:1018F000FEF7E4FF20464FF4007100F0E9FA0028FB +:10190000F2D10020B0BD0000B0B540F60044C4F2F2 +:10191000010420464FF4804100F01EFA20464FF4A7 +:10192000805100F019FAA4F554452846222100F010 +:1019300069FC00BF2846802100F066FC0028F9D130 +:1019400020464FF4805100F009FA20464FF48041C0 +:1019500000F004FA20464FF4805100F0FDF92846CB +:10196000E02100F04FFC00BF2846802100F04CFC35 +:101970000028F9D120464FF4805100F0EFF92046BD +:101980004FF4804100F0E8F920464FF4805100F018 +:10199000E3F92846202100F035FC00BF28468021CD +:1019A00000F032FC0028F9D120464FF4805100F0BD +:1019B000D5F920464FF4804100F0D0F9A4F58064B9 +:1019C00020464FF4007100F083FA70B149F64145AA +:1019D0000120013D08BFB0BDFEF770FF20464FF467 +:1019E000007100F075FA0028F2D10020B0BD0000AF +:1019F000F0B581B040F60044C4F201040E4607463B +:101A000020464FF4804100F0A7F920464FF4805162 +:101A100000F0A2F9A4F5544528464E2100F0F2FB4F +:101A20002846802100F0F0FB0028F9D120464FF431 +:101A3000805100F093F920464FF4804100F08EF978 +:101A400020464FF4805100F087F9C7F3C7012846BC +:101A500000F0D8FB2846802100F0D6FB0028F9D101 +:101A600020464FF4805100F079F920464FF4804130 +:101A700000F072F920464FF4805100F06DF92846CD +:101A80004F2100F0BFFB00BF2846802100F0BCFBC7 +:101A90000028F9D120464FF4805100F05FF920462C +:101AA0004FF4804100F05AF920464FF4805100F085 +:101AB00053F9F1B2284600F0A5FB00BF284680216B +:101AC00000F0A2FB0028F9D120464FF4805100F02D +:101AD00045F920464FF4805100F03EF9C6F300214D +:101AE000284600F08FFB00BF2846802100F08CFBC9 +:101AF0000028F9D120464FF4805101B0BDE8F040F4 +:101B000000F02CB9B0B540F60044C4F20104204600 +:101B10004FF4804100F020F920464FF4805100F04E +:101B20001BF9A4F554452846222100F06BFB00BFA9 +:101B30002846802100F068FB0028F9D120464FF4A8 +:101B4000805100F00BF920464FF4804100F006F977 +:101B500020464FF4805100F0FFF82846F72100F0AE +:101B600051FB00BF2846802100F04EFB0028F9D130 +:101B700020464FF4805100F0F1F820464FF48041A8 +:101B800000F0EAF820464FF4805100F0E5F82846CE +:101B9000202100F037FB00BF2846802100F034FBF5 +:101BA0000028F9D120464FF4805100F0D7F82046A4 +:101BB0004FF4804100F0D2F8A4F5806420464FF441 +:101BC000007100F085F970B149F64145013D08BF4B +:101BD000B0BD0120FEF772FE20464FF4007100F008 +:101BE00077F90028F2D1B0BDB0B540F60044C4F298 +:101BF000010420464FF4804100F0AEF820464FF437 +:101C0000805100F0A9F8A4F554452846222100F09F +:101C1000F9FA00BF2846802100F0F6FA0028F9D131 +:101C200020464FF4805100F099F820464FF480414F +:101C300000F094F820464FF4805100F08DF82846CB +:101C4000FF2100F0DFFA00BF2846802100F0DCFA17 +:101C50000028F9D120464FF4805100F07FF820464B +:101C60004FF4804100F078F820464FF4805100F0A6 +:101C700073F82846202100F0C5FA00BF28468021CD +:101C800000F0C2FA0028F9D120464FF4805100F04C +:101C900065F820464FF4804100F060F8A4F58064B8 +:101CA00020464FF4007100F013F970B149F6414538 +:101CB000013D08BFB0BD0120FEF700FE20464FF4F5 +:101CC000007100F005F90028F2D1B0BD002141609B +:101CD000012101810170704740F21441C4F20101F9 +:101CE0000860704740F20841C4F20101426851F8AF +:101CF000083C934341F8083C51F8043C934341F8B5 +:101D0000043C437A002B08BF704703786FEA020C4B +:101D10002BB151F8043C134341F8043C04E051F862 +:101D2000083C134341F8083C0B6803EA0C030B60C2 +:101D30004B6803EA0C034B60007A012807D018B9FE +:101D400008681043086070470868104308604868D6 +:101D5000104348607047000041617047016170475F +:101D600040F200424FF6FF71C0F20012C0E90012CB +:101D7000704700008B08032B88BF704780B50C228A +:101D800002EA810E4FF00F0C02EB83010CFA0EF207 +:101D9000DFE803F0022F11200821C4F201010B68D3 +:101DA00000FA0EF023EA02020A600A681043086093 +:101DB000BDE8804070470821C4F201018B6800FA39 +:101DC0000EF023EA02028A608A6810438860BDE848 +:101DD000804070470821C4F20101CB6800FA0EF080 +:101DE00023EA0202CA60CA681043C860BDE88040A6 +:101DF00070470821C4F201014B6800FA0EF023EA93 +:101E000002024A604A6810434860BDE8804070475B +:101E1000B0B58B790A88032B0BD07BB94979282977 +:101E200001F00F0E18D0182908BF0261110616D153 +:101E30002EE04FF0000E110611D129E003F0080C3E +:101E40000B79C97903F00403634401F0030103EB48 +:101E5000010E110603D11BE04261110618D00023C8 +:101E60004FF00F0C002104E00131082903F10403B5 +:101E70000ED022FA01F4E407F6D004680CFA03F558 +:101E8000AC43046004680EFA03F52C430460EBE7EE +:101E9000B2F5807F38BFB0BD120A00234FF00F0C9F +:101EA000002104E00131082903F104030ED022FAD5 +:101EB00001F4E407F6D044680CFA03F5AC4344603F +:101EC00044680EFA03F52C434460EBE7B0BD000014 +:101ED00080680840401AB0FA80F04009704700005E +:101EE00010B582B00420C0F218000121FEF74EFCAC +:101EF0006C462046FFF734FF40F20040C0F210105D +:101F000001904FF40050009041F20000C4F2010033 +:101F10002146FFF77DFF02B010BD000041F20C002A +:101F2000C4F20100016881F40051016070470000B3 +:101F300088B000F0E5F9FEF7A1FCFEF769FBFEF7BB +:101F400041FBFFF7CDFFFFF787F9FEF733FF40F2C4 +:101F50008808C2F20008FF2440464FF4C8714FF4CD +:101F600096724FF487730094FFF730FA4046FFF7FC +:101F70005BFAFF20FFF7FEF943F63E67C0F6000765 +:101F80004B205921FA227A23CDE90074FFF750FB48 +:101F90004046FEF797FD0120FEF7C8FE41F288306B +:101FA000FEF78CFCFFF7CCF84046FFF73DFAFF2028 +:101FB000FFF7E0F9002447A20A200021182300942B +:101FC000FFF704FC49A20A20322110230094FFF7F6 +:101FD000FDFB4DA20A201D2110230094FFF7F6FB04 +:101FE00050A20A20642110230094FFF7EFFB46F271 +:101FF0006F40C0F26500069046F66140C4F620507E +:10200000059047F26120C6F67410049043F63E60D6 +:10201000C5F2200003AD03900A2047212A46182369 +:102020000094FFF7D3FB4046FEF7E6FD4FF47A70CD +:10203000FEF744FC41A600277B37284631463A4646 +:10204000FEF72AF90A2047212A4618230094FFF7B1 +:10205000BDFB4046FEF7D0FD6420FEF72FFCB7F530 +:10206000577FE9D946F26C40C0F22E00069045F247 +:102070002070C7F26F20059046F66540C6F66C707A +:10208000049043F63E60C4F620000390002703AAA4 +:102090000A20472118230097FFF798FB40F2880099 +:1020A000C2F20000FEF7A8FD4FF47A70FEF706FCBE +:1020B000FFF728FD0120FEF739FE40F20004C2F2CE +:1020C00000046425FFF72AFF20786843FEF7F6FB3B +:1020D000F8E700BF342E3220496E636820457061F6 +:1020E000706572204D6F64756C6500007769746867 +:1020F00020343030207820333030207265736F6C9C +:102100007574696F6E00000044657369676E65647D +:102110002042792057654163742053747564696F58 +:1021200000000000415433324634303341434755B8 +:1021300037204578616D706C650000003E3E204E92 +:10214000756D3D256420202020200000B0B54EF69E +:102150000C5ECEF2000EDEF800304FF0FF35C3F318 +:10216000022383F00704042C28BF0424033B05FA50 +:1021700004F438BF0023A143994005FA03F39A43BE +:1021800000F00F03043B4EF2001C7344CEF2000C2F +:1021900011430C33B0F1FF3F4FEA011100EB0C0289 +:1021A000C8BF02F540730028197048BFB0BD00F0E9 +:1021B0001F01012202FA01F140094CF82010B0BDC4 +:1021C0004EF60C51CEF200010A684FF6FF031A409A +:1021D00060F30A2242F0806040F0FD7008607047B2 +:1021E0000021C0F8031001600121C1717047000097 +:1021F000026801F0010122F0400242EA811101600F +:1022000070470000C16070478068084018BF012017 +:1022100070470000C26922F40062C2610A78032A92 +:1022200027D8DFE802F00206121A026822F4004200 +:102230000EE0026822F400420260026822F480424A +:102240000260026842F4806212E0026842F40042D6 +:102250000260026822F4804206E0026842F4004212 +:102260000260026842F480420260026822F48062E6 +:102270000260CA79036802F0010223F4007343EAA2 +:10228000422202604A78012A06D1CA79012A03D182 +:10229000026842F4807202E0026822F480720260F6 +:1022A0004A78036862F3820303608A784368072AE6 +:1022B00023F4807388BF03F5807343608A780368D2 +:1022C00062F3C5030360CA78036802F0010223F0D9 +:1022D000800343EAC21202600A79036802F0010235 +:1022E00023F4006343EAC22202604A79036862F37E +:1022F000410303608979026861F30002026070475C +:1023000080B5FEF787FA01200121FEF7D3F900BF5F +:10231000FEF72AFA0028FBD002203B210122FEF71B +:1023200049FA0020FEF712FA02200121FEF7C2F955 +:102330001920FEF7FDF90128FAD10020FEF784F9F3 +:102340000420FEF79DF90420FEF78CF90120FEF72A +:10235000A5F90220FEF780FAFEF788FA0228FBD1E1 +:102360000020FEF79BF9BDE8804000F001B80000B6 +:10237000B0B541F2040441F20025C4F20204C0F2F7 +:102380007A05FEF773FA02280BD0A0BB206D8005FA +:1023900031D5E06A800144BF46F60045C0F2DC2535 +:1023A00029E0D4F800C021682268C1F38341C2F358 +:1023B00041721301581C0F29034618BF0223002A3B +:1023C00018BF03465FEACC3003EB010006D440F6A9 +:1023D0000011C0F23D0100FB01F50CE0216889030A +:1023E00001D4454307E0216DC1F301310231B5FB52 +:1023F000F1F101FB00F540F20400C2F200000560BB +:10240000216804A2C1F30311515C026822FA01F1B0 +:102410000160B0BD000000000000000001020304E4 +:10242000060708094EF21001CEF200010A680428DE +:1024300022F0040208BF04320A607047F1EE100A6D +:102440004FF6FF71C0F2C03120EA010040F0407049 +:10245000E1EE100A70470000000000000000002FAD +:10246000000000000700070000147F147F14002400 +:102470002A7F2A120062640813230036495522502D +:1024800000000503000000001C2241000000412262 +:102490001C000014083E08140008083E080800004C +:1024A00000A0600000080808080800006060000044 +:1024B000002010080402003E5149453E0000427FC2 +:1024C0004000004261514946002141454B3100180E +:1024D00014127F10002745454539003C4A494930D0 +:1024E000000171090503003649494936000649498A +:1024F000291E000036360000000056360000000895 +:102500001422410000141414141400004122140871 +:1025100000020151090600324959513E007C121156 +:10252000127C007F49494936003E41414122007FEB +:102530004141221C007F49494941007F09090901A5 +:10254000003E4149497A007F0808087F0000417F2A +:102550004100002040413F01007F08142241007FDC +:1025600040404040007F020C027F007F0408107F43 +:10257000003E4141413E007F09090906003E4151AC +:10258000215E007F09192946004649494931000169 +:10259000017F0101003F4040403F001F2040201FBD +:1025A000003F4038403F0063140814630007087080 +:1025B000080700615149454300007F414100005533 +:1025C0002A552A55000041417F00000402010204FF +:1025D00000404040404000000102040000205454EC +:1025E0005478007F4844443800384444442000383C +:1025F0004444487F00385454541800087E090102AE +:102600000018A4A4A47C007F080404780000447D82 +:102610004000004080847D00007F102844000000BE +:10262000417F4000007C04180478007C0804047892 +:1026300000384444443800FC24242418001824247E +:1026400018FC007C0804040800485454542000047A +:102650003F444020003C4040207C001C2040201C87 +:10266000003C4030403C004428102844001CA0A0FE +:10267000A07C004464544C4414141414141400003A +:10268000000000000000000000000000FC0000004E +:10269000000002000000000C020C0200000000001C +:1026A000000090D0BCD0BC900003000300001824B0 +:1026B000FE448C000302070201001824D8B04C80AD +:1026C000000300010201C038E438E0000102020109 +:1026D00002020806000000000000000000000000E8 +:1026E00000F80402000000010204000204F80000E7 +:1026F0000004020100009060F860900000000100FA +:1027000000002020FC20200000000100000000004C +:10271000000000000806000000002020202020000B +:1027200000000000000000000000000000020000A7 +:1027300000000080601C0200040300000000F80498 +:102740000404F8000102020201000008FC0000007D +:10275000000203020000188444241800030202024D +:10276000020008042424D80001020202010040B043 +:1027700088FC80000000000302003C242424C400E4 +:10278000010202020100F824242CC000010202020E +:1027900001000C04E41C0400000003000000D82425 +:1027A0002424D80001020202010038444444F80005 +:1027B00000030202010000001000000000000200FF +:1027C00000000000200000000000060000000020C3 +:1027D0005088040200000000010290909090900048 +:1027E00000000000000000020488502000020100E8 +:1027F00000001804C4241800000002000000F804BF +:10280000E494F80001020202020000E09CF0800063 +:1028100002030000030204FC2424D8000203020285 +:102820000100F80404040C0001020202010004FC8F +:102830000404F80002030202010004FC24740C00EA +:1028400002030202030004FC24740C0002030200D1 +:102850000000F0080444CC4000010202010004FC26 +:102860002020FC040203000003020404FC04040012 +:10287000020203020200000404FC04040604040330 +:10288000000004FC24D00C0402030200030204FC38 +:1028900004000000020302020203FC3CC03CFC00F6 +:1028A00003000300030004FC30C4FC040203020024 +:1028B0000300F8040404F80001020202010004FC11 +:1028C00024241800020302000000F8848404F800A5 +:1028D00001020207050004FC2464980002030200C0 +:1028E0000302182424448C000302020201000C0499 +:1028F000FC040C0000020302000004FC0000FC04C5 +:10290000000102020100047C80E01C0400000300BE +:1029100000001CE03CE01C00000300030000049CDD +:10292000609C0400020300030200041CE01C04007D +:102930000002030200000C84641C04000203020273 +:1029400003000000FE020200000007040400000E65 +:1029500030C00000000000010200000202FE000082 +:10296000000404070000000402040000000000004E +:102970000000000000000000080808080808000027 +:10298000020000000000000000000040A0A0C00005 +:1029900000010202030204FC2020C0000003020226 +:1029A000010000C02020600000010202020000C0FF +:1029B0002024FC0000010202030200C0A0A0C0000D +:1029C0000001020202000020F82424040002030295 +:1029D00002000040A0A0602000070A0A0A0404FCCC +:1029E0002020C0000203020003020020E4000000D7 +:1029F000000203020000000020E4000008080807AD +:102A0000000004FC80E02020020302000302040412 +:102A1000FC000000020203020200E020E020C000EF +:102A200003000300030020E02020C0000203020096 +:102A3000030200C02020C00000010202010020E0CB +:102A40002020C000080F0A02010000C02020E00082 +:102A50000001020A0F0820E04020200002030200CB +:102A600000000060A0A0200000020202030000207D +:102A7000F820000000000102020020E00020E00039 +:102A800000010202030220E0208060200000030118 +:102A900000006080E0806000000300030000206010 +:102AA0008060200002030003020020E020806020FC +:102AB0000808070100000020A060200000020302B7 +:102AC0000200000020DE02000000000704000000F9 +:102AD00000FF00000000000F00000002DE200000E8 +:102AE00000040700000002010204040200000000CC +:102AF00000000000000000000000000000000000D6 +:102B00000000000000F8000000000000003330006A +:102B1000000000100C06100C060000000000000071 +:102B2000000040C07840C0784000043F04043F04E7 +:102B30000400007088FC08300000001820FF211EEF +:102B40000000F008F000E018000000211C031E2126 +:102B50001E0000F00888700000001E2123241927A1 +:102B6000211010160E000000000000000000000000 +:102B70000000000000E01804020000000007182018 +:102B8000400000020418E000000000402018070088 +:102B90000000404080F0804040000202010F01022E +:102BA0000200000000F0000000000101011F01010F +:102BB0000100000000000000000080B07000000074 +:102BC0000000000000000000000000010101010100 +:102BD0000101000000000000000000303000000093 +:102BE000000000000000806018040060180601006A +:102BF000000000E010080810E000000F1020201076 +:102C00000F00001010F8000000000020203F2020DE +:102C10000000007008080888700000302824222175 +:102C2000300000300888884830000018202020112B +:102C30000E000000C02010F8000000070424243F0C +:102C4000240000F8088888080800001921202011B5 +:102C50000E0000E0108888180000000F11202011DD +:102C60000E0000380808C83808000000003F0000C7 +:102C700000000070880808887000001C22212122B2 +:102C80001C0000E010080810E000000031222211B2 +:102C90000F00000000C0C000000000000030300045 +:102CA00000000000008000000000000080600000C4 +:102CB00000000000804020100800000102040810FD +:102CC000200040404040404040000404040404040C +:102CD00004000008102040800000002010080402BA +:102CE0000100007048080808F000000000303601BC +:102CF0000000C030C828E810E0000718272423147B +:102D00000B000000C038E0000000203C2302022736 +:102D1000382008F8888888700000203F2020201183 +:102D20000E00C030080808083800071820202010BE +:102D3000080008F808080810E000203F20202010B4 +:102D40000F0008F88888E8081000203F2020232082 +:102D5000180008F88888E8081000203F20000300C9 +:102D60000000C03008080838000007182020221E84 +:102D7000020008F808000008F808203F210101219E +:102D80003F20000808F8080800000020203F20200D +:102D9000000000000808F8080800C08080807F005C +:102DA000000008F888C028180800203F20012638B5 +:102DB000200008F8080000000000203F202020200C +:102DC000300008F8F800F8F80800203F003F003F06 +:102DD000200008F830C00008F808203F200007183D +:102DE0003F00E01008080810E0000F10202020101D +:102DF0000F0008F808080808F000203F2101010131 +:102E00000000E01008080810E0000F1824243850D3 +:102E10004F0008F8888888887000203F2000030C45 +:102E2000302000708808080838000038202121224E +:102E30001C00180808F8080818000000203F2000AF +:102E4000000008F808000008F808001F20202020D3 +:102E50001F000878880000C83808000007380E01F5 +:102E60000000F80800F80008F800033C0700073CE1 +:102E70000300081868808068180820302C03032C91 +:102E800030200838C800C83808000000203F200063 +:102E9000000010080808C838080020382621202023 +:102EA0001800000000FE020202000000007F404007 +:102EB0004000000C30C00000000000000001063897 +:102EC000C00000020202FE000000004040407F00FF +:102ED00000000000040202020400000000000000E4 +:102EE00000000000000000000000808080808080E2 +:102EF00080800002020400000000000000000000CA +:102F0000000000008080808000000019242222221E +:102F10003F2008F8008080000000003F11202011B1 +:102F20000E000000008080800000000E1120202094 +:102F30001100000000808088F800000E1120201091 +:102F40003F200000808080800000001F222222227B +:102F50001300008080F0888888180020203F2020FF +:102F600000000000808080808000006B9494949327 +:102F7000600008F8008080800000203F21000020D1 +:102F80003F2000809898000000000020203F202073 +:102F90000000000000809898000000C08080807FC2 +:102FA000000008F8000080808000203F24022D30BF +:102FB0002000000808F8000000000020203F20202A +:102FC00000008080808080808000203F20003F20A3 +:102FD000003F8080008080800000203F2100002092 +:102FE0003F200000808080800000001F20202020E3 +:102FF0001F00808000808000000080FFA120201141 +:103000000E000000008080808000000E112020A0B3 +:10301000FF80808080008080800020203F21200071 +:10302000010000008080808080000033242424245C +:103030001900008080E0808000000000001F202038 +:1030400000008080000000808000001F20202010F1 +:103050003F20808080000080808000010E300806C4 +:10306000010080800080008080800F300C030C30D5 +:103070000F0000808000808080000020312E0E3103 +:103080002000808080000080808080818E70180603 +:10309000010000808080808080000021302C22216F +:1030A000300000000000807C020200000000003FB1 +:1030B000404000000000FF00000000000000FF0092 +:1030C00000000002027C800000000040403F000041 +:1030D00000000006010102020404000000000000DC +:1030E00000000000000000000000000000000000E0 +:1030F00000000000000000000000000000000000D0 +:103100000000000000000000000000F0F0F00000EF +:1031100000000000000000017F010000000000002E +:103120000000001C1C1C0000000000008060301C1F +:103130008C60301C0C00000000000000000000004B +:10314000000000000000000000000000000000007F +:1031500000E00000000000E000000086E69F868698 +:103160008686E69F860000011F01010101011F0103 +:103170000100000080C06020F820E0C000000000D6 +:1031800003070C18FF70E18100000000070F10100A +:103190007F100F0700008060206080000000E020AA +:1031A00000000F3020309F70DC371030C00000006E +:1031B000100E03000718101807000000C02020E0C0 +:1031C000C0000000000080E01F38E88703C43C0412 +:1031D0000000070F1810100B070D101008000080DA +:1031E0008C4C3800000000000000000000000000CF +:1031F00000000000000000000000000000000000CF +:10320000000000000000000080E030080400000022 +:10321000000000FEFF0100000000000000000000B0 +:10322000030F1820400000040830E0800000000078 +:1032300000000000000001FFFE0000000000004050 +:1032400020180F0300000000000000000000000034 +:10325000C00000000000004266663C18FF183C6693 +:1032600066420000000000000300000000000000B3 +:10327000000000008000000000000010101010107E +:10328000FF101010101000000000000003000000EC +:10329000000000000000000000000000000000002E +:1032A0000000000000000000000000808C4C38008E +:1032B000000000000000000000000000000000000E +:1032C000000000101010101010101010100000005E +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE +:1032F000000000001C1C1C0000000000000000007A +:10330000000000000000E0380C00000000008070A9 +:103310001C03000000000060380E010000000000E7 +:103320000000000080C060202060C080000000FE1F +:10333000FF010000000001FFFE000001070E181051 +:1033400010180E0701000000808080C0E00000001F +:1033500000000000000000FFFF000000000000006F +:103360001010101F1F10101000000080402020209F +:103370002060C080000000030300804020381F0749 +:103380000000001C1A1918181818181F00000080D7 +:10339000C020202060C08000000000030300101047 +:1033A000182FE780000000070F10101010180F07EB +:1033B0000000000000000000C0E0F000000000C0BD +:1033C000B088868180FFFF80800000000000001030 +:1033D000101F1F1010000000E060606060606060FF +:1033E000000000003F1008080818F0E00000000787 +:1033F0000B101010101C0F030000000080C04020B4 +:103400002020E0C0000000FCFF211008080818F090 +:10341000E0000001070C18101010080F0300000056 +:10342000C0E06060606060E06000000003000000D9 +:10343000E0180700000000000000001F1F0000004F +:1034400000000080C0602020202060C08000008735 +:10345000EF2C1818303068CF830000070F081010C9 +:103460001010180F07000000C0C020202020C080CE +:103470000000001F3F604040402010FFFE000000A1 +:103480000C1C101010080F030000000000000000CA +:1034900000000000000000000000000E0E0E000002 +:1034A000000000000000001C1C1C000000000000C8 +:1034B0000000000000000000000000000000000C00 +:1034C0000C00000000000000000000583800000060 +:1034D00000000000000000000080402010000000FC +:1034E00010284482010000000000000000000000DD +:1034F00001020408100000000000000000000000AD +:103500000000008484848484848484848400000093 +:1035100000000000000000000000000010204080BB +:1035200000000000000000000000000001824428AC +:10353000100000001008040201000000000000C09C +:1035400020201010101030E0C0000003030000F035 +:1035500010080C070300000000001C1C1C000000E9 +:103560000000000000C0406020202040C00000FC9F +:10357000FF01F00E03C1FE03807F0001070E08115A +:103580001110110904020000000080E0E0000000BA +:1035900000000000807C4340477FF8800000101846 +:1035A0001F1000000000131F1C1020E0E02020204E +:1035B0002060C080000000FFFF10101010182FE7DF +:1035C0008000101F1F1010101010180F07000000AF +:1035D00080C0402020202060E00000FCFF010000AF +:1035E0000000000001000001070E18101010080470 +:1035F000030020E0E02020202040C080000000FFE9 +:10360000FF000000000001FFFE00101F1F1010103F +:1036100018080E07010020E0E02020202020206074 +:10362000800000FFFF101010107C00000000101F31 +:103630001F10101010101018060020E0E0202020AD +:1036400020206060800000FFFF101010107C000040 +:103650000100101F1F10000000000000000000000B +:1036600080C06020202040E0000000FCFF0100003E +:103670004040C0C140400001070E181010100F0F4D +:10368000000020E0E0200000000020E0E02000FF3B +:10369000FF101010101010FFFF00101F1F1000006F +:1036A0000000101F1F100000202020E0E02020203C +:1036B00000000000000000FFFF000000000000000C +:1036C0001010101F1F10101000000000000020201C +:1036D00020E0E020202000000000000000FFFF00AC +:1036E00000000060E0808080C07F3F00000020E09C +:1036F000E020000020A06020200000FFFF30187CA8 +:10370000E3C000000000101F1F10000001131F1C69 +:10371000181020E0E020000000000000000000FF82 +:10372000FF000000000000000000101F1F1010101C +:1037300010101018060020E0E0E000000000E0E0BB +:10374000E02000FF013FFEC0E01E01FFFF00101F50 +:103750001000031F0300101F1F1020E0E0C0000036 +:1037600000000020E02000FF0003071C78E080003C +:10377000FF00101F100000000000030F1F000000DA +:1037800080C060202060C080000000FEFF010000BB +:10379000000000FFFE000001070E181010180C07B3 +:1037A000010020E0E0202020202060C0800000FFF9 +:1037B000FF2020202020301F0F00101F1F100000AE +:1037C000000000000000000080C060202060C08079 +:1037D000000000FEFF010000000000FFFE000001ED +:1037E000070E1111133C7C67210020E0E02020200F +:1037F000202060C0800000FFFF101030F0D0080FC4 +:103800000700101F1F10000000030F1C1010008085 +:10381000C060202020204040E00000070F0C181856 +:10382000303060E08100001F0C0810101010180FDD +:1038300007008060202020E0E02020206080010040 +:10384000000000FFFF000000000100000000101F4A +:103850001F100000000020E0E02000000000002019 +:10386000E02000FFFF00000000000000FF00000754 +:103870000F1810101010100807002060E0E0200062 +:10388000000020E060200000077FF88000807C03BB +:10389000000000000000071F1C070000000020E0DF +:1038A000E02000E0E0200020E0200007FFF8E01F1B +:1038B000FFFCE01F00000000031F0300011F0300C6 +:1038C0000000002060E0A0000020E0602000000078 +:1038D00000038F7CF8C6010000000010181E1300C2 +:1038E00001171F1810002060E0E02000000020E019 +:1038F0006020000001073EF8E0180700000000000B +:103900000010101F1F1010000000008060202020F9 +:1039100020A0E0E0200000000000C0F03E0F030007 +:10392000000000101C1F17101010101806000000D7 +:10393000000000FC0404040404000000000000FF78 +:1039400000000000000000000000007F40404040F8 +:103950004000000010E00000000000000000000037 +:103960000000031C60800000000000000000000058 +:1039700000030C70800000000404040404FC000038 +:10398000000000000000000000FF00000000000038 +:1039900040404040407F0000000000000010080C44 +:1039A000040C0810000000000000000000000000EF :1039B0000000000000000000000000000000000007 :1039C00000000000000000000000000000000000F7 -:1039D00000000000000000000000000000000000E7 -:1039E00000000000000000000000000000000000D7 +:1039D00000000000000080808080808080808080E7 +:1039E00080800000000404080800000000000000BF :1039F00000000000000000000000000000000000C7 :103A000000000000000000000000000000000000B6 -:103A100000000000000000000000000000000000A6 -:103A20000000000000000000000000000000000096 -:103A30000000000000000000000000000000000086 -:103A40000000000000000000000000000000000076 -:103A50000000000000000000000000000000000066 -:103A60000000000000000000000000000000000056 -:103A70000000000000000000000000000000000046 -:103A80000000000000000000000000000000000036 -:103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000000000000006 -:103AC00000000000000000000000000000000000F6 -:103AD00000000000000000000000000000000000E6 -:103AE00000000000000000000000000000000000D6 -:103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000000000B5 -:103B100000000000000000000000000000000000A5 -:103B20000000000000000000000000000000000095 -:103B30000000000000000000000000000000000085 -:103B40000000000000000000000000000000000075 -:103B50000000000000000000000000000000000065 -:103B60000000000000000000000000000000000055 -:103B70000000000000000000000000000000000045 -:103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000000025 -:103BA0000000000000000000000000000000000015 -:103BB0000000000000000000000000000000000005 -:103BC00000000000000000000000000000000000F5 -:103BD00000000000000000000000000000000000E5 -:103BE00000000000000000000000000000000000D5 -:103BF00000000000000000000000000000000000C5 -:103C000000000000000000000000000000000000B4 -:103C100000000000000000000000000000000000A4 -:103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 -:103C40000000000000000000000000000000000074 -:103C50000000000000000000000000000000000064 -:103C60000000000000000000000000000000000054 -:103C70000000000000000000000000000000000044 -:103C80000000000000000000000000000000000034 -:103C90000000000000000000000000000000000024 -:103CA0000000000000000000000000000000000014 -:103CB0000000000000000000000000000000000004 -:103CC00000000000000000000000000000000000F4 -:103CD00000000000000000000000000000000000E4 -:103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 -:103D000000000000000000000000000000000000B3 -:103D100000000000000000000000000000000000A3 -:103D20000000000000000000000000000000000093 -:103D30000000000000000000000000000000000083 -:103D40000000000000000000000000000000000073 -:103D50000000000000000000000000000000000063 -:103D60000000000000000000000000000000000053 -:103D70000000000000000000000000000000000043 -:103D80000000000000000000000000000000000033 -:103D90000000000000000000000000000000000023 -:103DA0000000000000000000000000000000000013 -:103DB0000000000000000000000000000000000003 -:103DC00000000000000000000000000000000000F3 -:103DD00000000000000000000000000000000000E3 -:103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E100000000000000000000000000000000000A2 -:103E20000000000000000000000000000000000092 +:103A10000000000098D844642424FCF80000000F43 +:103A20001F18101010081F1F10180020E0F00000D1 +:103A30000000000000000000FFFF180804040CF85C +:103A4000F00000001F0F18101010180F03000000E6 +:103A50000000000000000000000000E0F81804046E +:103A6000043C3800000000030F0C10101010080672 +:103A700000000000000000000020E0F0000000E076 +:103A8000F81C04040408FFFF000000030F181010C6 +:103A900010081F0F080000000000000000000000D8 +:103AA00000000000E0F8484444444C7870000000F6 +:103AB000030F0C181010100804000000000080C054 +:103AC000602020E0C00000040404FFFF040404049C +:103AD0000000000010101F1F101010000000000058 +:103AE00000000000000000000000000070F88C04DE +:103AF000048CF874040C007076CF8D8D8D89C87895 +:103B000070000020E0F00000000000000000000055 +:103B1000FFFF08040404FCF8000000101F1F100041 +:103B200000101F1F10000000000000606000000077 +:103B300000000000040404FCFC0000000000000081 +:103B40001010101F1F1010100000000000000000D7 +:103B500000606000000000000000040404FCFC00A1 +:103B600000000000C0C08080C07F3F000000002037 +:103B7000E0F000000000000000000000FFFF80C037 +:103B8000F41C0404000000101F1F1100031F1C1070 +:103B900010000000202020E0F000000000000000E5 +:103BA000000000FFFF000000000000001010101FC8 +:103BB0001F101010000000000000000000000000B6 +:103BC000000004FCFC0804FCFC0804FCFC00101FC2 +:103BD0001F10001F1F10001F1F100000000000001A +:103BE0000000000000000004FCFC08080404FCF8CD +:103BF000000000101F1F100000101F1F1000000009 +:103C00000000000000000000000000E0F0180C04BC +:103C1000040C18F0E00000030F0C101010100C0F33 +:103C2000030000000000000000000000000000048D +:103C3000FCFC080404040CF8F0000080FFFF8890EE +:103C400010101C0F03000000000000000000000026 +:103C5000000000E0F81C04040408F8FC0000000365 +:103C60000F1810109088FFFF800000000000000077 +:103C7000000000000000040404FCFC100804040C14 +:103C80000C001010101F1F1010100000000000008A +:103C90000000000000000000000000003078CCC4EC +:103CA0008484840C1C0000001E1810101011190FC1 +:103CB00006000000000000C000000000000000043A +:103CC0000404FFFF040404000000000000000F1FB4 +:103CD0001010100C000000000000000000000000A8 +:103CE00000000004FCFE00000004FCFE00000000D8 +:103CF0000F1F181010081F0F080000000000000020 +:103D000000000000000000040C3CFCC40000C43CA7 +:103D10000C0400000000010F1E0E01000000000056 +:103D200000000000000000000000043CFCC400E4AF +:103D30007CFC84807C040000071F070000071F072D +:103D4000000000000000000000000000000000046F +:103D5000041C7CE4C0341C0404000010101C160178 +:103D6000131F1C18100000000000000000000000DD +:103D7000000000040C3CFCC400C43C04040000002F +:103D8000C080C1370E0100000000000000000000EC +:103D900000000000000000001C0404C4F47C1C04AB +:103DA00000000000101C1F17111010180E0000005A +:103DB0000000000000F80C040000000000000010EB +:103DC00028EF00000000000000000000003F6040FD +:103DD0000000000000000000FF00000000000000E4 +:103DE00000000000FF0000000000000000000000D4 +:103DF000FF00000000000000040CF80000000000BC +:103E0000000000000000EF2810000000000000008B +:103E100040603F000000000000000018060202049D +:103E20000810202030080000000000000000000002 :103E30000000000000000000000000000000000082 :103E40000000000000000000000000000000000072 :103E50000000000000000000000000000000000062 @@ -1011,72 +1011,72 @@ :103F100000000000000000000000000000000000A1 :103F20000000000000000000000000000000000091 :103F30000000000000000000000000000000000081 -:103F40000000000000008080808080800000000071 -:103F500000C0E0E0E0E0C0C00000000000000000A1 +:103F40000000000000000000000000000000000071 +:103F50000000000000000000000000000000000061 :103F60000000000000000000000000000000000051 :103F70000000000000000000000000000000000041 -:103F800000000000000000007EFEFEFEFEFEFE00BF -:103F9000000080FEFEFEFEFEFEFEFC00000000FCB7 -:103FA000FEFEFEFEFE3E00000000000000008080DD -:103FB0008080808000000000000000000000000001 -:103FC00080F8FEFEFEFEFEFEFEFEF0800000000019 -:103FD00000000000000000000080808080808000E1 -:103FE0000000000000F8F8F8F8F8F8F80000000009 -:103FF000000000000000000000000000E0F0F8FCFD -:10400000FCFEFE7E7E3E3E7E7EFEFCFC78300000A6 -:104010000000F8F8F8F8F8F8F800000000000000D8 +:103F80000000000000000000000000000000000031 +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000000011 +:103FB0000000000000000000000000000000000001 +:103FC00000000000000000000000000000000000F1 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000000000000000000000000C1 +:1040000000000000000000000000000000000000B0 +:1040100000000000000000000000000000000000A0 :104020000000000000000000000000000000000090 -:104030000000000000000000000080808080800000 -:10404000FFFFFFFFFFFFFF000000030F1F1F1F1FE9 -:104050000F0F0000000000000000008080808080C2 -:104060008080000000000000000000000000000050 +:104030000000000000000000000000000000000080 +:104040000000000000000000000000000000000070 +:104050000000000000000000000000000000000060 +:104060000000000000000000000000000000000050 :104070000000000000000000000000000000000040 -:104080000000003FFFFFFFFFFFFC00C0FFFFFFFF3E -:104090007FFFFFFFFFFF8000FEFFFFFFFFFF0F001E -:1040A0000000F0F8FEFEFFFF7F1F0F0F1FFFFFFF56 -:1040B000FEFCF8C000000000C0FCFFFFFFFF7F0710 -:1040C0001FFFFFFFFFFFF88000000000C0F0FCFEB4 -:1040D000FFFFFF7F1F1F1F1F3F3F3F0E041F1FFFDC -:1040E000FFFFFFFFFFFF1F1F1F1F0000000000005A -:1040F0000000000000001F7FFFFFFFFFFFFCF8F83B -:10410000F0F0E0E0C1C08000001F1F1FFFFFFFFFB5 -:10411000FFFFFF1F1F1F0F000000FFFFFFFFFFFF3C -:1041200000000000FFFFFFFFFFFFFF000000C0F8DE -:10413000FCFEFFFFFF7F1F1F1F3FFFFFFFFFFFFF73 -:10414000FF00000000FFFFFFFFFFFFFF000000C0B7 -:10415000F8FCFEFFFFFF3F1F1F1F3FFFFFFFFEFC9E -:10416000F8E0000000000000000000000000000077 -:1041700000000000000000000000000000000FFF31 -:10418000FFFFFFFFFCFFFFFFFF1F0001FFFFFFFF1F -:10419000FFFEFFFFFFFFFF070000001EFFFFFFFF06 -:1041A000FFFFDF1F1F1F1F1F1F9F9F1F1F1F0000DD -:1041B000E0FEFFFFFFFFFFFFFCFCFCFDFFFFFFFF3A -:1041C000FFFFFCC00000FFFFFFFFFFFFFF800000BC -:1041D000000000800000000000FFFFFFFFFFFFFF66 +:104080000000000000000000000000000000000030 +:104090000000000000000000000000000000000020 +:1040A0000000000000000000000000000000000010 +:1040B0000000000000000000000000000000000000 +:1040C00000000000000000000000000000000000F0 +:1040D00000000000000000000000000000000000E0 +:1040E00000000000000000000000000000000000D0 +:1040F00000000000000000000000000000000000C0 +:1041000000000000000000000000000000000000AF +:10411000000000000000000000000000000000009F +:10412000000000000000000000000000000000008F +:10413000000000000000000000000000000000007F +:10414000000000000000000000000000000000006F +:10415000000000000000000000000000000000005F +:10416000000000000000000000000000000000004F +:10417000000000000000000000000000000000003F +:10418000000000000000000000000000000000002F +:10419000000000000000000000000000000000001F +:1041A000000000000000000000000000000000000F +:1041B00000000000000000000000000000000000FF +:1041C00000000000000000000000000000000000EF +:1041D00000000000000000000000000000000000DF :1041E00000000000000000000000000000000000CF -:1041F00080C0C0800101030303070FFFFFFFFFFF23 -:10420000FFFF70000000FFFFFFFFFFFFFF00000047 -:1042100000000000FFFFFFFFFFFF00000080FFFF26 -:10422000FFFFFFFFFF000000FFFFFFFFFFFFFF801A -:1042300000000000FFFFFFFFFFFFFF00000000FF86 -:10424000FFFFFFFFFFFF000000FFFFFFFFFFFFFF7B -:104250008000000000FFFFFFFFFFFFFF00000000E5 +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000000000AE +:10421000000000000000000000000000000000009E +:10422000000000000000000000000000000000008E +:10423000000000000000000000000000000000007E +:10424000000000000000000000000000000000006E +:10425000000000000000000000000000000000005E :10426000000000000000000000000000000000004E -:10427000000000000000000000073F3F3F3F3F3FBD -:104280003F3F0F000000003F3F3F3F3F3F3F3F3F6A -:1042900001000000000001070F1F1F3F3F3F3E3E8F -:1042A0003E3E3F3F1F1F0E00303E3F3F3F3F3F1F00 -:1042B00001000000000000033F3F3F3F3F3F3C0044 -:1042C0000003070F1F3F3F3F3F3E3E3F3F3F1F1E44 -:1042D000080000030F1F3F3F3F3F3F3E3F3F1C187A -:1042E000000000000000000000070F1F1F3F3F3FBD -:1042F0003F3E3E3F3F3F3F1F1F0F070300000000B0 -:10430000070F1F3F3F3F3F3E3F3F3F1C00000F1F37 -:104310003F3F3F3F3F3E3F1F1F3F3F3F3F3F3F002D -:10432000000000070F1F3F3F3F3F3F3E3F1F1F3F23 -:104330003F3F3F3F3F000000003F3F3F3F3F3F3F89 -:104340000000000003070F1F3F3F3F3F3E3E3F3F3F -:104350003F1F1F0F030000000000000000000000CE +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E +:10429000000000000000000000000000000000001E +:1042A000000000000000000000000000000000000E +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000000000EE +:1042D00000000000000000000000000000000000DE +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD +:10431000000000000000000000000000000000009D +:10432000000000000000000000000000000000008D +:10433000000000000000000000000000000000007D +:10434000000000000000000000000000000000006D +:10435000000000000000000000000000000000005D :10436000000000000000000000000000000000004D :10437000000000000000000000000000000000003D :10438000000000000000000000000000000000002D @@ -1085,72 +1085,72 @@ :1043B00000000000000000000000000000000000FD :1043C00000000000000000000000000000000000ED :1043D00000000000000000000000000000000000DD -:1043E00000000000000000000000000000000000CD -:1043F00000000000000000000000000000000000BD +:1043E00000000000000080808080808000000000CD +:1043F00000C0E0E0E0E0C0C00000000000000000FD :1044000000000000000000000000000000000000AC :10441000000000000000000000000000000000009C -:10442000000000000000000000000000000000008C -:10443000000000000000000000000000000000007C -:10444000000000000000000000000000000000006C -:10445000000000000000000000000000000000005C -:10446000000000000000000000000000000000004C -:10447000000000000000000000000000000000003C -:10448000000000000000000000000000000000002C -:10449000000000000000000000000000000000001C -:1044A000000000000000000000000000000000000C -:1044B00000000000000000000000000000000000FC +:1044200000000000000000007EFEFEFEFEFEFE001A +:10443000000080FEFEFEFEFEFEFEFC00000000FC12 +:10444000FEFEFEFEFE3E0000000000000000808038 +:10445000808080800000000000000000000000005C +:1044600080F8FEFEFEFEFEFEFEFEF0800000000074 +:10447000000000000000000000808080808080003C +:104480000000000000F8F8F8F8F8F8F80000000064 +:10449000000000000000000000000000E0F0F8FC58 +:1044A000FCFEFE7E7E3E3E7E7EFEFCFC7830000002 +:1044B0000000F8F8F8F8F8F8F80000000000000034 :1044C00000000000000000000000000000000000EC -:1044D00000000000000000000000000000000000DC -:1044E00000000000000000000000000000000000CC -:1044F00000000000000000000000000000000000BC -:1045000000000000000000000000000000000000AB +:1044D000000000000000000000008080808080005C +:1044E000FFFFFFFFFFFFFF000000030F1F1F1F1F45 +:1044F0000F0F00000000000000000080808080801E +:1045000080800000000000000000000000000000AB :10451000000000000000000000000000000000009B -:10452000000000000000000000000000000000008B -:10453000000000000000000000000000000000007B -:10454000000000000000000000000000000000006B -:10455000000000000000000000000000000000005B -:10456000000000000000000000000000000000004B -:10457000000000000000000000000000000000003B -:10458000000000000000000000000000000000002B -:10459000000000000000000000000000000000001B -:1045A000000000000000000000000000000000000B -:1045B00000000000000000000000000000000000FB -:1045C00000000000000000000000000000000000EB -:1045D00000000000000000000000000000000000DB -:1045E00000000000000000000000000000000000CB -:1045F00000000000000000000000000000000000BB -:1046000000000000000000000000000000000000AA -:10461000000000000000000000000000000000009A -:10462000000000000000000000000000000000008A -:10463000000000000000000000000000000000007A -:10464000000000000000000000000000000000006A -:10465000000000000000000000000000000000005A -:10466000000000000000000000000000000000004A -:10467000000000000000000000000000000000003A +:104520000000003FFFFFFFFFFFFC00C0FFFFFFFF99 +:104530007FFFFFFFFFFF8000FEFFFFFFFFFF0F0079 +:104540000000F0F8FEFEFFFF7F1F0F0F1FFFFFFFB1 +:10455000FEFCF8C000000000C0FCFFFFFFFF7F076B +:104560001FFFFFFFFFFFF88000000000C0F0FCFE0F +:10457000FFFFFF7F1F1F1F1F3F3F3F0E041F1FFF37 +:10458000FFFFFFFFFFFF1F1F1F1F000000000000B5 +:104590000000000000001F7FFFFFFFFFFFFCF8F896 +:1045A000F0F0E0E0C1C08000001F1F1FFFFFFFFF11 +:1045B000FFFFFF1F1F1F0F000000FFFFFFFFFFFF98 +:1045C00000000000FFFFFFFFFFFFFF000000C0F83A +:1045D000FCFEFFFFFF7F1F1F1F3FFFFFFFFFFFFFCF +:1045E000FF00000000FFFFFFFFFFFFFF000000C013 +:1045F000F8FCFEFFFFFF3F1F1F1F3FFFFFFFFEFCFA +:10460000F8E00000000000000000000000000000D2 +:1046100000000000000000000000000000000FFF8C +:10462000FFFFFFFFFCFFFFFFFF1F0001FFFFFFFF7A +:10463000FFFEFFFFFFFFFF070000001EFFFFFFFF61 +:10464000FFFFDF1F1F1F1F1F1F9F9F1F1F1F000038 +:10465000E0FEFFFFFFFFFFFFFCFCFCFDFFFFFFFF95 +:10466000FFFFFCC00000FFFFFFFFFFFFFF80000017 +:10467000000000800000000000FFFFFFFFFFFFFFC1 :10468000000000000000000000000000000000002A -:10469000000000000000000000000000000000001A -:1046A000000000000000000000000000000000000A -:1046B00000000000000000000000000000000000FA -:1046C00000000000000000000000000000000000EA -:1046D00000000000000000000000000000000000DA -:1046E00000000000000000000000000000000000CA -:1046F00000000000000000000000000000000000BA +:1046900080C0C0800101030303070FFFFFFFFFFF7E +:1046A000FFFF70000000FFFFFFFFFFFFFF000000A3 +:1046B00000000000FFFFFFFFFFFF00000080FFFF82 +:1046C000FFFFFFFFFF000000FFFFFFFFFFFFFF8076 +:1046D00000000000FFFFFFFFFFFFFF00000000FFE2 +:1046E000FFFFFFFFFFFF000000FFFFFFFFFFFFFFD7 +:1046F0008000000000FFFFFFFFFFFFFF0000000041 :1047000000000000000000000000000000000000A9 -:104710000000000000000000000000000000000099 -:104720000000000000000000000000000000000089 -:104730000000000000000000000000000000000079 -:104740000000000000000000000000000000000069 -:104750000000000000000000000000000000000059 -:104760000000000000000000000000000000000049 -:104770000000000000000000000000000000000039 -:104780000000000000000000000000000000000029 -:104790000000000000000000000000000000000019 -:1047A0000000000000000000000000000000000009 -:1047B00000000000000000000000000000000000F9 -:1047C00000000000000000000000000000000000E9 -:1047D00000000000000000000000000000000000D9 -:1047E00000000000000000000000000000000000C9 -:1047F00000000000000000000000000000000000B9 +:10471000000000000000000000073F3F3F3F3F3F18 +:104720003F3F0F000000003F3F3F3F3F3F3F3F3FC5 +:1047300001000000000001070F1F1F3F3F3F3E3EEA +:104740003E3E3F3F1F1F0E00303E3F3F3F3F3F1F5B +:1047500001000000000000033F3F3F3F3F3F3C009F +:104760000003070F1F3F3F3F3F3E3E3F3F3F1F1E9F +:10477000080000030F1F3F3F3F3F3F3E3F3F1C18D5 +:10478000000000000000000000070F1F1F3F3F3F18 +:104790003F3E3E3F3F3F3F1F1F0F0703000000000B +:1047A000070F1F3F3F3F3F3E3F3F3F1C00000F1F93 +:1047B0003F3F3F3F3F3E3F1F1F3F3F3F3F3F3F0089 +:1047C000000000070F1F3F3F3F3F3F3E3F1F1F3F7F +:1047D0003F3F3F3F3F000000003F3F3F3F3F3F3FE5 +:1047E0000000000003070F1F3F3F3F3F3E3E3F3F9B +:1047F0003F1F1F0F0300000000000000000000002A :1048000000000000000000000000000000000000A8 :104810000000000000000000000000000000000098 :104820000000000000000000000000000000000088 @@ -1171,8 +1171,82 @@ :104910000000000000000000000000000000000097 :104920000000000000000000000000000000000087 :104930000000000000000000000000000000000077 -:10494000604900080000002008000000C0010008C5 -:104950006849000808000020802B0000DC010008E6 -:084960000100000000127A00C2 +:104940000000000000000000000000000000000067 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000000000000047 +:104970000000000000000000000000000000000037 +:104980000000000000000000000000000000000027 +:104990000000000000000000000000000000000017 +:1049A0000000000000000000000000000000000007 +:1049B00000000000000000000000000000000000F7 +:1049C00000000000000000000000000000000000E7 +:1049D00000000000000000000000000000000000D7 +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 +:104A000000000000000000000000000000000000A6 +:104A10000000000000000000000000000000000096 +:104A20000000000000000000000000000000000086 +:104A30000000000000000000000000000000000076 +:104A40000000000000000000000000000000000066 +:104A50000000000000000000000000000000000056 +:104A60000000000000000000000000000000000046 +:104A70000000000000000000000000000000000036 +:104A80000000000000000000000000000000000026 +:104A90000000000000000000000000000000000016 +:104AA0000000000000000000000000000000000006 +:104AB00000000000000000000000000000000000F6 +:104AC00000000000000000000000000000000000E6 +:104AD00000000000000000000000000000000000D6 +:104AE00000000000000000000000000000000000C6 +:104AF00000000000000000000000000000000000B6 +:104B000000000000000000000000000000000000A5 +:104B10000000000000000000000000000000000095 +:104B20000000000000000000000000000000000085 +:104B30000000000000000000000000000000000075 +:104B40000000000000000000000000000000000065 +:104B50000000000000000000000000000000000055 +:104B60000000000000000000000000000000000045 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 +:104B90000000000000000000000000000000000015 +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000000000000E5 +:104BD00000000000000000000000000000000000D5 +:104BE00000000000000000000000000000000000C5 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000000000A4 +:104C10000000000000000000000000000000000094 +:104C20000000000000000000000000000000000084 +:104C30000000000000000000000000000000000074 +:104C40000000000000000000000000000000000064 +:104C50000000000000000000000000000000000054 +:104C60000000000000000000000000000000000044 +:104C70000000000000000000000000000000000034 +:104C80000000000000000000000000000000000024 +:104C90000000000000000000000000000000000014 +:104CA0000000000000000000000000000000000004 +:104CB00000000000000000000000000000000000F4 +:104CC00000000000000000000000000000000000E4 +:104CD00000000000000000000000000000000000D4 +:104CE00000000000000000000000000000000000C4 +:104CF00000000000000000000000000000000000B4 +:104D000000000000000000000000000000000000A3 +:104D10000000000000000000000000000000000093 +:104D20000000000000000000000000000000000083 +:104D30000000000000000000000000000000000073 +:104D40000000000000000000000000000000000063 +:104D50000000000000000000000000000000000053 +:104D60000000000000000000000000000000000043 +:104D70000000000000000000000000000000000033 +:104D80000000000000000000000000000000000023 +:104D90000000000000000000000000000000000013 +:104DA0000000000000000000000000000000000003 +:104DB00000000000000000000000000000000000F3 +:104DC00000000000000000000000000000000000E3 +:104DD00000000000000000000000000000000000D3 +:104DE000004E00080000002008000000E801000854 +:104DF000084E0008080000201841000008020008C2 +:084E00000100000000127A001D :040000050800018569 :00000001FF diff --git a/Example/EpaperModuleTest_AT32F403A/Src/main.c b/Example/EpaperModuleTest_AT32F403A/Src/main.c index 90e036e..aa44f27 100644 --- a/Example/EpaperModuleTest_AT32F403A/Src/main.c +++ b/Example/EpaperModuleTest_AT32F403A/Src/main.c @@ -49,16 +49,25 @@ int main(void) epd_init(); #ifdef EPD_BWR + #ifdef EPD_42 + epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); + epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); + #else epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + #endif epd_paint_selectimage(image_bw); epd_paint_clear(EPD_COLOR_WHITE); epd_paint_selectimage(image_red); epd_paint_clear(EPD_COLOR_WHITE); - epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + + #ifdef EPD_42 + epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #else + epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #endif epd_display(image_bw, image_red); epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); @@ -76,6 +85,10 @@ int main(void) #ifdef EPD_29 epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); +#endif +#ifdef EPD_42 + epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); #endif epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); @@ -85,15 +98,20 @@ int main(void) sprintf((char *)&text, ">> Hello World."); epd_paint_showString(10, 71, text, EPD_FONT_SIZE24x12, EPD_COLOR_RED); -#if 0 +#if 1 epd_paint_showString(10,100,(uint8_t *)&"AT32F403ACGU7 Example",EPD_FONT_SIZE16x8,EPD_COLOR_RED); #else epd_paint_drawRectangle(10, 103, EPD_H - 10, 116, EPD_COLOR_RED, 1); #endif epd_display(image_bw, image_red); + #else - epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + #ifdef EPD_42 + epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); + #else + epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + #endif epd_paint_selectimage(image_bw); @@ -102,7 +120,11 @@ int main(void) epd_paint_showPicture((EPD_H - 200) / 2,(EPD_W - 64) / 2,200,64,gImage_5,EPD_COLOR_WHITE); #else epd_paint_clear(EPD_COLOR_WHITE); - epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #ifdef EPD_42 + epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #else + epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #endif #endif epd_displayBW(image_bw); @@ -131,7 +153,11 @@ int main(void) epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); #endif - +#ifdef EPD_42 + epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); +#endif #if 1 epd_paint_showString(10,100,(uint8_t *)&"AT32F403ACGU7 Example",EPD_FONT_SIZE16x8,EPD_COLOR_BLACK); #else diff --git a/Example/EpaperModuleTest_Arduino_ESP32/EpaperModuleTest_Arduino_ESP32.ino b/Example/EpaperModuleTest_Arduino_ESP32/EpaperModuleTest_Arduino_ESP32.ino index 0c2b308..e73cd8d 100644 --- a/Example/EpaperModuleTest_Arduino_ESP32/EpaperModuleTest_Arduino_ESP32.ino +++ b/Example/EpaperModuleTest_Arduino_ESP32/EpaperModuleTest_Arduino_ESP32.ino @@ -20,6 +20,9 @@ GxEPD2_BW display(GxEPD2_213_BN(/*CS=5*/ 5 //GxEPD2_BW display(GxEPD2_290_BS(/*CS=5*/ 5, /*DC=*/ 0, /*RES=*/ 2, /*BUSY=*/ 15)); // DEPG0290BS 128x296, SSD1680 //GxEPD2_3C display(GxEPD2_290_C90c(/*CS=5*/ 5, /*DC=*/ 0, /*RES=*/ 2, /*BUSY=*/ 15)); // GDEM029C90 128x296, SSD1680 +// 4.2'' EPD Module +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ 5, /*DC=*/ 0, /*RES=*/ 2, /*BUSY=*/ 15)); // 400x300, SSD1683 + void setup() { display.init(115200,true,50,false); diff --git a/Example/EpaperModuleTest_Arduino_ESP32C3/EpaperModuleTest_Arduino_ESP32C3.ino b/Example/EpaperModuleTest_Arduino_ESP32C3/EpaperModuleTest_Arduino_ESP32C3.ino index 0da05e1..6a1db2a 100644 --- a/Example/EpaperModuleTest_Arduino_ESP32C3/EpaperModuleTest_Arduino_ESP32C3.ino +++ b/Example/EpaperModuleTest_Arduino_ESP32C3/EpaperModuleTest_Arduino_ESP32C3.ino @@ -20,6 +20,9 @@ GxEPD2_BW display(GxEPD2_213_BN(/*CS=5*/ S //GxEPD2_BW display(GxEPD2_290_BS(/*CS=5*/ SS, /*DC=*/ 1, /*RES=*/ 2, /*BUSY=*/ 3)); // DEPG0290BS 128x296, SSD1680 //GxEPD2_3C display(GxEPD2_290_C90c(/*CS=5*/ SS, /*DC=*/ 1, /*RES=*/ 2, /*BUSY=*/ 3)); // GDEM029C90 128x296, SSD1680 +// 4.2'' EPD Module +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ SS, /*DC=*/ 1, /*RES=*/ 2, /*BUSY=*/ 3)); // 400x300, SSD1683 + void setup() { pinMode(8, OUTPUT); diff --git a/Example/EpaperModuleTest_Arduino_ESP8266/EpaperModuleTest_Arduino_ESP8266.ino b/Example/EpaperModuleTest_Arduino_ESP8266/EpaperModuleTest_Arduino_ESP8266.ino index c8cb04d..4b4ba36 100644 --- a/Example/EpaperModuleTest_Arduino_ESP8266/EpaperModuleTest_Arduino_ESP8266.ino +++ b/Example/EpaperModuleTest_Arduino_ESP8266/EpaperModuleTest_Arduino_ESP8266.ino @@ -20,6 +20,9 @@ GxEPD2_BW display(GxEPD2_213_BN(/*CS=5*/ 1 //GxEPD2_BW display(GxEPD2_290_BS(/*CS=5*/ 15, /*DC=*/ 4, /*RES=*/ 5, /*BUSY=*/ 16)); // DEPG0290BS 128x296, SSD1680 //GxEPD2_3C display(GxEPD2_290_C90c(/*CS=5*/ 15, /*DC=*/ 4, /*RES=*/ 5, /*BUSY=*/ 16)); // GDEM029C90 128x296, SSD1680 +// 4.2'' EPD Module +//GxEPD2_BW display(GxEPD2_420_GDEY042T81(/*CS=5*/ 15, /*DC=*/ 4, /*RES=*/ 5, /*BUSY=*/ 16)); // 400x300, SSD1683 + void setup() { display.init(115200,true,50,false); diff --git a/Example/EpaperModuleTest_CH32F103/Epaper/epaper.c b/Example/EpaperModuleTest_CH32F103/Epaper/epaper.c index 7c8a477..abb4ef7 100644 --- a/Example/EpaperModuleTest_CH32F103/Epaper/epaper.c +++ b/Example/EpaperModuleTest_CH32F103/Epaper/epaper.c @@ -218,6 +218,7 @@ uint8_t epd_init(void) if (epd_wait_busy()) return 1; + #if defined(EPD_29) || defined(EPD_213) || defined(EPD_154) epd_write_reg(0x01); // Driver output control #if defined(EPD_29) || defined(EPD_213) epd_write_data(0x27); @@ -261,6 +262,21 @@ uint8_t epd_init(void) epd_write_reg(0x21); // Display update control epd_write_data(0x00); epd_write_data(0x80); + #endif + + #elif defined(EPD_42) + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x40); + epd_write_data(0x00); + epd_write_reg(0x01); // Set MUX as 300 + epd_write_data(0x2B); + epd_write_data(0x01); + epd_write_data(0x00); + epd_write_reg(0x3C); //BorderWavefrom + epd_write_data(0x01); + epd_write_reg(0x11); // data entry mode + epd_write_data(0x03); // X-mode + epd_address_set(0,0,EPD_W-1,EPD_H-1); #endif epd_write_reg(0x18); // Read built-in temperature sensor @@ -288,6 +304,12 @@ uint8_t epd_init_partial(void) } _epd_write_data_over(); epd_cs_set(); + #elif defined(EPD_42) + epd_write_reg(0x3C); //BorderWavefrom + epd_write_data(0x80); + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application #endif return 0; @@ -303,8 +325,13 @@ void epd_enter_deepsleepmode(uint8_t mode) uint8_t epd_power_on(void) { + #if defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xe0); + #else epd_write_reg(0x22); // Display Update Control epd_write_data(0xf8); + #endif epd_write_reg(0x20); // Activate Display Update Sequence return epd_wait_busy(); @@ -326,15 +353,20 @@ void epd_init_internalTempSensor(void) epd_write_reg(0x1A); epd_write_data(0x7F); - epd_write_data(0xF0); +// epd_write_data(0xF0); } void epd_update(void) { + + #ifdef EPD_154 epd_write_reg(0x22); // Display Update Control -#ifdef EPD_154 epd_write_data(0xF4); + #elif defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xF7); #else + epd_write_reg(0x22); // Display Update Control epd_write_data(0xF7); #endif epd_write_reg(0x20); // Activate Display Update Sequence @@ -344,10 +376,14 @@ void epd_update(void) void epd_update_partial(void) { + #ifdef EPD_154 epd_write_reg(0x22); // Display Update Control -#ifdef EPD_154 epd_write_data(0xFC); + #elif defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xFF); #else + epd_write_reg(0x22); // Display Update Control epd_write_data(0xCC); #endif epd_write_reg(0x20); // Activate Display Update Sequence @@ -355,6 +391,19 @@ void epd_update_partial(void) epd_wait_busy(); } +void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end) +{ + epd_write_reg(0x44); // SET_RAM_X_ADDRESS_START_END_POSITION + epd_write_data((x_start>>3) & 0xFF); + epd_write_data((x_end>>3) & 0xFF); + + epd_write_reg(0x45); // SET_RAM_Y_ADDRESS_START_END_POSITION + epd_write_data(y_start & 0xFF); + epd_write_data((y_start >> 8) & 0xFF); + epd_write_data(y_end & 0xFF); + epd_write_data((y_end >> 8) & 0xFF); +} + void epd_setpos(uint16_t x, uint16_t y) { uint8_t _x; @@ -364,8 +413,10 @@ void epd_setpos(uint16_t x, uint16_t y) #ifdef EPD_154 _y = 199 - y; - #else + #elif defined(EPD_29) || defined(EPD_213) _y = 295 - y; + #elif defined(EPD_42) + _y = y; #endif epd_write_reg(0x4E); // set RAM x address count to 0; @@ -386,6 +437,17 @@ void epd_writedata(uint8_t *Image1, uint32_t length) epd_cs_set(); } +void epd_writedata2(uint8_t data, uint32_t length) +{ + epd_cs_reset(); + for (uint32_t j = 0; j < length; j++) + { + _epd_write_data(data); + } + _epd_write_data_over(); + epd_cs_set(); +} + void epd_display(uint8_t *Image1, uint8_t *Image2) { uint32_t Width, Height, i, j; @@ -414,6 +476,12 @@ void epd_display(uint8_t *Image1, uint8_t *Image2) _epd_write_data_over(); epd_cs_set(); + #if defined EPD_42 + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application + #endif + epd_update(); } @@ -465,6 +533,11 @@ void epd_displayRED(uint8_t *Image) epd_write_reg(0x26); epd_writedata(Image, Width * Height); + #if defined EPD_42 + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application + #endif epd_update(); } diff --git a/Example/EpaperModuleTest_CH32F103/Epaper/epaper.h b/Example/EpaperModuleTest_CH32F103/Epaper/epaper.h index 4cc7786..a1395a1 100644 --- a/Example/EpaperModuleTest_CH32F103/Epaper/epaper.h +++ b/Example/EpaperModuleTest_CH32F103/Epaper/epaper.h @@ -8,11 +8,12 @@ extern "C" #include "ch32f10x.h" +//#define EPD_42 //#define EPD_29 //#define EPD_213 //#define EPD_154 -#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) +#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) && (!defined EPD_42) #error EPD Type Undefine #endif @@ -31,6 +32,10 @@ extern "C" #define EPD_H 200 #endif +#ifdef EPD_42 +#define EPD_W 400 +#define EPD_H 300 +#endif #define EPD_OK 0 #define EPD_ERROR 1 @@ -76,6 +81,7 @@ extern "C" void epd_init_internalTempSensor(void); void epd_update(void); void epd_update_partial(void); + void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end); void epd_setpos(uint16_t x, uint16_t y); void epd_display(uint8_t *Image1, uint8_t *Image2); void epd_displayBW(uint8_t *Image); diff --git a/Example/EpaperModuleTest_CH32F103/Src/main.c b/Example/EpaperModuleTest_CH32F103/Src/main.c index 12203da..09c9fdf 100644 --- a/Example/EpaperModuleTest_CH32F103/Src/main.c +++ b/Example/EpaperModuleTest_CH32F103/Src/main.c @@ -15,7 +15,7 @@ #include "bmp.h" // define for White Black Red Epaper Module -#define EPD_BWR +//#define EPD_BWR uint8_t image_bw[EPD_W_BUFF_SIZE * EPD_H]; #ifdef EPD_BWR @@ -56,16 +56,25 @@ int main(void) epd_init(); #ifdef EPD_BWR + #ifdef EPD_42 + epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); + epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); + #else epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + #endif epd_paint_selectimage(image_bw); epd_paint_clear(EPD_COLOR_WHITE); epd_paint_selectimage(image_red); epd_paint_clear(EPD_COLOR_WHITE); + + #ifdef EPD_42 + epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #else epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #endif epd_display(image_bw, image_red); epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); @@ -83,6 +92,10 @@ int main(void) #ifdef EPD_29 epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); +#endif +#ifdef EPD_42 + epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); #endif epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); @@ -99,8 +112,13 @@ int main(void) #endif epd_display(image_bw, image_red); + +#else + #ifdef EPD_42 + epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); #else epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + #endif epd_paint_selectimage(image_bw); @@ -109,8 +127,12 @@ int main(void) epd_paint_showPicture((EPD_H - 200) / 2,(EPD_W - 64) / 2,200,64,gImage_5,EPD_COLOR_WHITE); #else epd_paint_clear(EPD_COLOR_WHITE); + #ifdef EPD_42 + epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #else epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); #endif + #endif epd_displayBW(image_bw); epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); @@ -138,11 +160,15 @@ int main(void) epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); #endif - +#ifdef EPD_42 + epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); +#endif #if 1 epd_paint_showString(10,100,(uint8_t *)&"CH32F103C8T6 Example",EPD_FONT_SIZE16x8,EPD_COLOR_BLACK); #else - epd_paint_drawRectangle(10, 103, EPD_H - 10, 116, EPD_COLOR_BLACK, 1); + epd_paint_drawRectangle(10, EPD_W-20, EPD_H - 10, EPD_W-6, EPD_COLOR_BLACK, 1); #endif sprintf((char *)&text, ">> Partial Mode"); diff --git a/Example/EpaperModuleTest_CH32V103/User/Epaper/epaper.c b/Example/EpaperModuleTest_CH32V103/User/Epaper/epaper.c index cc5012c..c4496a5 100644 --- a/Example/EpaperModuleTest_CH32V103/User/Epaper/epaper.c +++ b/Example/EpaperModuleTest_CH32V103/User/Epaper/epaper.c @@ -218,6 +218,7 @@ uint8_t epd_init(void) if (epd_wait_busy()) return 1; + #if defined(EPD_29) || defined(EPD_213) || defined(EPD_154) epd_write_reg(0x01); // Driver output control #if defined(EPD_29) || defined(EPD_213) epd_write_data(0x27); @@ -261,6 +262,21 @@ uint8_t epd_init(void) epd_write_reg(0x21); // Display update control epd_write_data(0x00); epd_write_data(0x80); + #endif + + #elif defined(EPD_42) + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x40); + epd_write_data(0x00); + epd_write_reg(0x01); // Set MUX as 300 + epd_write_data(0x2B); + epd_write_data(0x01); + epd_write_data(0x00); + epd_write_reg(0x3C); //BorderWavefrom + epd_write_data(0x01); + epd_write_reg(0x11); // data entry mode + epd_write_data(0x03); // X-mode + epd_address_set(0,0,EPD_W-1,EPD_H-1); #endif epd_write_reg(0x18); // Read built-in temperature sensor @@ -288,6 +304,12 @@ uint8_t epd_init_partial(void) } _epd_write_data_over(); epd_cs_set(); + #elif defined(EPD_42) + epd_write_reg(0x3C); //BorderWavefrom + epd_write_data(0x80); + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application #endif return 0; @@ -303,8 +325,13 @@ void epd_enter_deepsleepmode(uint8_t mode) uint8_t epd_power_on(void) { + #if defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xe0); + #else epd_write_reg(0x22); // Display Update Control epd_write_data(0xf8); + #endif epd_write_reg(0x20); // Activate Display Update Sequence return epd_wait_busy(); @@ -326,15 +353,20 @@ void epd_init_internalTempSensor(void) epd_write_reg(0x1A); epd_write_data(0x7F); - epd_write_data(0xF0); +// epd_write_data(0xF0); } void epd_update(void) { + + #ifdef EPD_154 epd_write_reg(0x22); // Display Update Control -#ifdef EPD_154 epd_write_data(0xF4); + #elif defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xF7); #else + epd_write_reg(0x22); // Display Update Control epd_write_data(0xF7); #endif epd_write_reg(0x20); // Activate Display Update Sequence @@ -344,10 +376,14 @@ void epd_update(void) void epd_update_partial(void) { + #ifdef EPD_154 epd_write_reg(0x22); // Display Update Control -#ifdef EPD_154 epd_write_data(0xFC); + #elif defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xFF); #else + epd_write_reg(0x22); // Display Update Control epd_write_data(0xCC); #endif epd_write_reg(0x20); // Activate Display Update Sequence @@ -355,6 +391,19 @@ void epd_update_partial(void) epd_wait_busy(); } +void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end) +{ + epd_write_reg(0x44); // SET_RAM_X_ADDRESS_START_END_POSITION + epd_write_data((x_start>>3) & 0xFF); + epd_write_data((x_end>>3) & 0xFF); + + epd_write_reg(0x45); // SET_RAM_Y_ADDRESS_START_END_POSITION + epd_write_data(y_start & 0xFF); + epd_write_data((y_start >> 8) & 0xFF); + epd_write_data(y_end & 0xFF); + epd_write_data((y_end >> 8) & 0xFF); +} + void epd_setpos(uint16_t x, uint16_t y) { uint8_t _x; @@ -364,8 +413,10 @@ void epd_setpos(uint16_t x, uint16_t y) #ifdef EPD_154 _y = 199 - y; - #else + #elif defined(EPD_29) || defined(EPD_213) _y = 295 - y; + #elif defined(EPD_42) + _y = y; #endif epd_write_reg(0x4E); // set RAM x address count to 0; @@ -386,6 +437,17 @@ void epd_writedata(uint8_t *Image1, uint32_t length) epd_cs_set(); } +void epd_writedata2(uint8_t data, uint32_t length) +{ + epd_cs_reset(); + for (uint32_t j = 0; j < length; j++) + { + _epd_write_data(data); + } + _epd_write_data_over(); + epd_cs_set(); +} + void epd_display(uint8_t *Image1, uint8_t *Image2) { uint32_t Width, Height, i, j; @@ -414,6 +476,12 @@ void epd_display(uint8_t *Image1, uint8_t *Image2) _epd_write_data_over(); epd_cs_set(); + #if defined EPD_42 + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application + #endif + epd_update(); } @@ -465,6 +533,11 @@ void epd_displayRED(uint8_t *Image) epd_write_reg(0x26); epd_writedata(Image, Width * Height); + #if defined EPD_42 + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application + #endif epd_update(); } diff --git a/Example/EpaperModuleTest_CH32V103/User/Epaper/epaper.h b/Example/EpaperModuleTest_CH32V103/User/Epaper/epaper.h index be64e0f..769d9e8 100644 --- a/Example/EpaperModuleTest_CH32V103/User/Epaper/epaper.h +++ b/Example/EpaperModuleTest_CH32V103/User/Epaper/epaper.h @@ -8,11 +8,12 @@ extern "C" #include "ch32v10x.h" +//#define EPD_42 //#define EPD_29 //#define EPD_213 //#define EPD_154 -#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) +#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) && (!defined EPD_42) #error EPD Type Undefine #endif @@ -31,6 +32,10 @@ extern "C" #define EPD_H 200 #endif +#ifdef EPD_42 +#define EPD_W 400 +#define EPD_H 300 +#endif #define EPD_OK 0 #define EPD_ERROR 1 @@ -76,6 +81,7 @@ extern "C" void epd_init_internalTempSensor(void); void epd_update(void); void epd_update_partial(void); + void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end); void epd_setpos(uint16_t x, uint16_t y); void epd_display(uint8_t *Image1, uint8_t *Image2); void epd_displayBW(uint8_t *Image); diff --git a/Example/EpaperModuleTest_CH32V103/User/main.c b/Example/EpaperModuleTest_CH32V103/User/main.c index 39f8ad1..03a87aa 100644 --- a/Example/EpaperModuleTest_CH32V103/User/main.c +++ b/Example/EpaperModuleTest_CH32V103/User/main.c @@ -15,7 +15,7 @@ #include "bmp.h" // define for White Black Red Epaper Module -#define EPD_BWR +//#define EPD_BWR uint8_t image_bw[EPD_W_BUFF_SIZE * EPD_H]; #ifdef EPD_BWR @@ -56,16 +56,25 @@ int main(void) epd_init(); #ifdef EPD_BWR + #ifdef EPD_42 + epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); + epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); + #else epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + #endif epd_paint_selectimage(image_bw); epd_paint_clear(EPD_COLOR_WHITE); epd_paint_selectimage(image_red); epd_paint_clear(EPD_COLOR_WHITE); + + #ifdef EPD_42 + epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #else epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #endif epd_display(image_bw, image_red); epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); @@ -83,6 +92,10 @@ int main(void) #ifdef EPD_29 epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); +#endif +#ifdef EPD_42 + epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); #endif epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); @@ -99,8 +112,13 @@ int main(void) #endif epd_display(image_bw, image_red); + +#else + #ifdef EPD_42 + epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); #else epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + #endif epd_paint_selectimage(image_bw); @@ -109,8 +127,12 @@ int main(void) epd_paint_showPicture((EPD_H - 200) / 2,(EPD_W - 64) / 2,200,64,gImage_5,EPD_COLOR_WHITE); #else epd_paint_clear(EPD_COLOR_WHITE); + #ifdef EPD_42 + epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #else epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); #endif + #endif epd_displayBW(image_bw); epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); @@ -138,11 +160,15 @@ epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SI epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); #endif - +#ifdef EPD_42 + epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); +#endif #if 1 epd_paint_showString(10,100,(uint8_t *)&"CH32V103C8T6 Example",EPD_FONT_SIZE16x8,EPD_COLOR_BLACK); #else - epd_paint_drawRectangle(10, 103, EPD_H - 10, 116, EPD_COLOR_BLACK, 1); + epd_paint_drawRectangle(10, EPD_W-20, EPD_H - 10, EPD_W-6, EPD_COLOR_BLACK, 1); #endif sprintf((char *)&text, ">> Partial Mode"); diff --git a/Example/EpaperModuleTest_GD32F103/Epaper/epaper.c b/Example/EpaperModuleTest_GD32F103/Epaper/epaper.c index 13c5f17..6e4cb34 100644 --- a/Example/EpaperModuleTest_GD32F103/Epaper/epaper.c +++ b/Example/EpaperModuleTest_GD32F103/Epaper/epaper.c @@ -208,6 +208,7 @@ uint8_t epd_init(void) if (epd_wait_busy()) return 1; + #if defined(EPD_29) || defined(EPD_213) || defined(EPD_154) epd_write_reg(0x01); // Driver output control #if defined(EPD_29) || defined(EPD_213) epd_write_data(0x27); @@ -251,6 +252,21 @@ uint8_t epd_init(void) epd_write_reg(0x21); // Display update control epd_write_data(0x00); epd_write_data(0x80); + #endif + + #elif defined(EPD_42) + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x40); + epd_write_data(0x00); + epd_write_reg(0x01); // Set MUX as 300 + epd_write_data(0x2B); + epd_write_data(0x01); + epd_write_data(0x00); + epd_write_reg(0x3C); //BorderWavefrom + epd_write_data(0x01); + epd_write_reg(0x11); // data entry mode + epd_write_data(0x03); // X-mode + epd_address_set(0,0,EPD_W-1,EPD_H-1); #endif epd_write_reg(0x18); // Read built-in temperature sensor @@ -278,6 +294,12 @@ uint8_t epd_init_partial(void) } _epd_write_data_over(); epd_cs_set(); + #elif defined(EPD_42) + epd_write_reg(0x3C); //BorderWavefrom + epd_write_data(0x80); + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application #endif return 0; @@ -293,8 +315,13 @@ epd_power_off(); uint8_t epd_power_on(void) { + #if defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xe0); + #else epd_write_reg(0x22); // Display Update Control epd_write_data(0xf8); + #endif epd_write_reg(0x20); // Activate Display Update Sequence return epd_wait_busy(); @@ -316,15 +343,20 @@ void epd_init_internalTempSensor(void) epd_write_reg(0x1A); epd_write_data(0x7F); - epd_write_data(0xF0); +// epd_write_data(0xF0); } void epd_update(void) { + + #ifdef EPD_154 epd_write_reg(0x22); // Display Update Control -#ifdef EPD_154 epd_write_data(0xF4); + #elif defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xF7); #else + epd_write_reg(0x22); // Display Update Control epd_write_data(0xF7); #endif epd_write_reg(0x20); // Activate Display Update Sequence @@ -334,10 +366,14 @@ void epd_update(void) void epd_update_partial(void) { + #ifdef EPD_154 epd_write_reg(0x22); // Display Update Control -#ifdef EPD_154 epd_write_data(0xFC); + #elif defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xFF); #else + epd_write_reg(0x22); // Display Update Control epd_write_data(0xCC); #endif epd_write_reg(0x20); // Activate Display Update Sequence @@ -345,6 +381,19 @@ void epd_update_partial(void) epd_wait_busy(); } +void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end) +{ + epd_write_reg(0x44); // SET_RAM_X_ADDRESS_START_END_POSITION + epd_write_data((x_start>>3) & 0xFF); + epd_write_data((x_end>>3) & 0xFF); + + epd_write_reg(0x45); // SET_RAM_Y_ADDRESS_START_END_POSITION + epd_write_data(y_start & 0xFF); + epd_write_data((y_start >> 8) & 0xFF); + epd_write_data(y_end & 0xFF); + epd_write_data((y_end >> 8) & 0xFF); +} + void epd_setpos(uint16_t x, uint16_t y) { uint8_t _x; @@ -354,8 +403,10 @@ void epd_setpos(uint16_t x, uint16_t y) #ifdef EPD_154 _y = 199 - y; - #else + #elif defined(EPD_29) || defined(EPD_213) _y = 295 - y; + #elif defined(EPD_42) + _y = y; #endif epd_write_reg(0x4E); // set RAM x address count to 0; @@ -376,6 +427,17 @@ void epd_writedata(uint8_t *Image1, uint32_t length) epd_cs_set(); } +void epd_writedata2(uint8_t data, uint32_t length) +{ + epd_cs_reset(); + for (uint32_t j = 0; j < length; j++) + { + _epd_write_data(data); + } + _epd_write_data_over(); + epd_cs_set(); +} + void epd_display(uint8_t *Image1, uint8_t *Image2) { uint32_t Width, Height, i, j; @@ -404,6 +466,12 @@ void epd_display(uint8_t *Image1, uint8_t *Image2) _epd_write_data_over(); epd_cs_set(); + #if defined EPD_42 + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application + #endif + epd_update(); } @@ -455,6 +523,11 @@ void epd_displayRED(uint8_t *Image) epd_write_reg(0x26); epd_writedata(Image, Width * Height); + #if defined EPD_42 + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application + #endif epd_update(); } diff --git a/Example/EpaperModuleTest_GD32F103/Epaper/epaper.h b/Example/EpaperModuleTest_GD32F103/Epaper/epaper.h index f9dbc60..1653675 100644 --- a/Example/EpaperModuleTest_GD32F103/Epaper/epaper.h +++ b/Example/EpaperModuleTest_GD32F103/Epaper/epaper.h @@ -8,11 +8,12 @@ extern "C" #include "gd32f10x.h" +//#define EPD_42 //#define EPD_29 //#define EPD_213 //#define EPD_154 -#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) +#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) && (!defined EPD_42) #error EPD Type Undefine #endif @@ -31,6 +32,10 @@ extern "C" #define EPD_H 200 #endif +#ifdef EPD_42 +#define EPD_W 400 +#define EPD_H 300 +#endif #define EPD_OK 0 #define EPD_ERROR 1 @@ -76,6 +81,7 @@ extern "C" void epd_init_internalTempSensor(void); void epd_update(void); void epd_update_partial(void); + void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end); void epd_setpos(uint16_t x, uint16_t y); void epd_display(uint8_t *Image1, uint8_t *Image2); void epd_displayBW(uint8_t *Image); diff --git a/Example/EpaperModuleTest_GD32F103/Src/main.c b/Example/EpaperModuleTest_GD32F103/Src/main.c index c0bd4a2..b41e445 100644 --- a/Example/EpaperModuleTest_GD32F103/Src/main.c +++ b/Example/EpaperModuleTest_GD32F103/Src/main.c @@ -18,7 +18,7 @@ #include "bmp.h" // define for White Black Red Epaper Module -#define EPD_BWR +//#define EPD_BWR uint8_t image_bw[EPD_W_BUFF_SIZE * EPD_H]; #ifdef EPD_BWR @@ -56,16 +56,25 @@ int main(void) epd_init(); #ifdef EPD_BWR + #ifdef EPD_42 + epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); + epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); + #else epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + #endif epd_paint_selectimage(image_bw); epd_paint_clear(EPD_COLOR_WHITE); epd_paint_selectimage(image_red); epd_paint_clear(EPD_COLOR_WHITE); + + #ifdef EPD_42 + epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #else epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #endif epd_display(image_bw, image_red); epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); @@ -83,6 +92,10 @@ int main(void) #ifdef EPD_29 epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); +#endif +#ifdef EPD_42 + epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); #endif epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); @@ -99,8 +112,13 @@ int main(void) #endif epd_display(image_bw, image_red); + +#else + #ifdef EPD_42 + epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); #else epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + #endif epd_paint_selectimage(image_bw); @@ -109,8 +127,12 @@ int main(void) epd_paint_showPicture((EPD_H - 200) / 2,(EPD_W - 64) / 2,200,64,gImage_5,EPD_COLOR_WHITE); #else epd_paint_clear(EPD_COLOR_WHITE); + #ifdef EPD_42 + epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #else epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); #endif + #endif epd_displayBW(image_bw); epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); @@ -138,11 +160,15 @@ epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SI epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); #endif - +#ifdef EPD_42 + epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); +#endif #if 1 epd_paint_showString(10,100,(uint8_t *)&"GD32F103CBT6 Example",EPD_FONT_SIZE16x8,EPD_COLOR_BLACK); #else - epd_paint_drawRectangle(10, 103, EPD_H - 10, 116, EPD_COLOR_BLACK, 1); + epd_paint_drawRectangle(10, EPD_W-20, EPD_H - 10, EPD_W-6, EPD_COLOR_BLACK, 1); #endif sprintf((char *)&text, ">> Partial Mode"); diff --git a/Example/EpaperModuleTest_GD32F303/Epaper/epaper.c b/Example/EpaperModuleTest_GD32F303/Epaper/epaper.c index 3902730..e8a1780 100644 --- a/Example/EpaperModuleTest_GD32F303/Epaper/epaper.c +++ b/Example/EpaperModuleTest_GD32F303/Epaper/epaper.c @@ -208,6 +208,7 @@ uint8_t epd_init(void) if (epd_wait_busy()) return 1; + #if defined(EPD_29) || defined(EPD_213) || defined(EPD_154) epd_write_reg(0x01); // Driver output control #if defined(EPD_29) || defined(EPD_213) epd_write_data(0x27); @@ -251,6 +252,21 @@ uint8_t epd_init(void) epd_write_reg(0x21); // Display update control epd_write_data(0x00); epd_write_data(0x80); + #endif + + #elif defined(EPD_42) + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x40); + epd_write_data(0x00); + epd_write_reg(0x01); // Set MUX as 300 + epd_write_data(0x2B); + epd_write_data(0x01); + epd_write_data(0x00); + epd_write_reg(0x3C); //BorderWavefrom + epd_write_data(0x01); + epd_write_reg(0x11); // data entry mode + epd_write_data(0x03); // X-mode + epd_address_set(0,0,EPD_W-1,EPD_H-1); #endif epd_write_reg(0x18); // Read built-in temperature sensor @@ -278,6 +294,12 @@ uint8_t epd_init_partial(void) } _epd_write_data_over(); epd_cs_set(); + #elif defined(EPD_42) + epd_write_reg(0x3C); //BorderWavefrom + epd_write_data(0x80); + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application #endif return 0; @@ -293,8 +315,13 @@ epd_power_off(); uint8_t epd_power_on(void) { + #if defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xe0); + #else epd_write_reg(0x22); // Display Update Control epd_write_data(0xf8); + #endif epd_write_reg(0x20); // Activate Display Update Sequence return epd_wait_busy(); @@ -316,15 +343,20 @@ void epd_init_internalTempSensor(void) epd_write_reg(0x1A); epd_write_data(0x7F); - epd_write_data(0xF0); +// epd_write_data(0xF0); } void epd_update(void) { + + #ifdef EPD_154 epd_write_reg(0x22); // Display Update Control -#ifdef EPD_154 epd_write_data(0xF4); + #elif defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xF7); #else + epd_write_reg(0x22); // Display Update Control epd_write_data(0xF7); #endif epd_write_reg(0x20); // Activate Display Update Sequence @@ -334,10 +366,14 @@ void epd_update(void) void epd_update_partial(void) { + #ifdef EPD_154 epd_write_reg(0x22); // Display Update Control -#ifdef EPD_154 epd_write_data(0xFC); + #elif defined EPD_42 + epd_write_reg(0x22); // Display Update Control + epd_write_data(0xFF); #else + epd_write_reg(0x22); // Display Update Control epd_write_data(0xCC); #endif epd_write_reg(0x20); // Activate Display Update Sequence @@ -345,6 +381,19 @@ void epd_update_partial(void) epd_wait_busy(); } +void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end) +{ + epd_write_reg(0x44); // SET_RAM_X_ADDRESS_START_END_POSITION + epd_write_data((x_start>>3) & 0xFF); + epd_write_data((x_end>>3) & 0xFF); + + epd_write_reg(0x45); // SET_RAM_Y_ADDRESS_START_END_POSITION + epd_write_data(y_start & 0xFF); + epd_write_data((y_start >> 8) & 0xFF); + epd_write_data(y_end & 0xFF); + epd_write_data((y_end >> 8) & 0xFF); +} + void epd_setpos(uint16_t x, uint16_t y) { uint8_t _x; @@ -354,8 +403,10 @@ void epd_setpos(uint16_t x, uint16_t y) #ifdef EPD_154 _y = 199 - y; - #else + #elif defined(EPD_29) || defined(EPD_213) _y = 295 - y; + #elif defined(EPD_42) + _y = y; #endif epd_write_reg(0x4E); // set RAM x address count to 0; @@ -376,6 +427,17 @@ void epd_writedata(uint8_t *Image1, uint32_t length) epd_cs_set(); } +void epd_writedata2(uint8_t data, uint32_t length) +{ + epd_cs_reset(); + for (uint32_t j = 0; j < length; j++) + { + _epd_write_data(data); + } + _epd_write_data_over(); + epd_cs_set(); +} + void epd_display(uint8_t *Image1, uint8_t *Image2) { uint32_t Width, Height, i, j; @@ -404,6 +466,12 @@ void epd_display(uint8_t *Image1, uint8_t *Image2) _epd_write_data_over(); epd_cs_set(); + #if defined EPD_42 + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application + #endif + epd_update(); } @@ -455,6 +523,11 @@ void epd_displayRED(uint8_t *Image) epd_write_reg(0x26); epd_writedata(Image, Width * Height); + #if defined EPD_42 + epd_write_reg(0x21); // Display Update Controll + epd_write_data(0x00); // RED normal + epd_write_data(0x00); // single chip application + #endif epd_update(); } diff --git a/Example/EpaperModuleTest_GD32F303/Epaper/epaper.h b/Example/EpaperModuleTest_GD32F303/Epaper/epaper.h index 40eef6c..c8df27e 100644 --- a/Example/EpaperModuleTest_GD32F303/Epaper/epaper.h +++ b/Example/EpaperModuleTest_GD32F303/Epaper/epaper.h @@ -8,11 +8,12 @@ extern "C" #include "gd32f30x.h" +//#define EPD_42 //#define EPD_29 //#define EPD_213 //#define EPD_154 -#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) +#if (!defined EPD_29) && (!defined EPD_213) && (!defined EPD_154) && (!defined EPD_42) #error EPD Type Undefine #endif @@ -31,6 +32,10 @@ extern "C" #define EPD_H 200 #endif +#ifdef EPD_42 +#define EPD_W 400 +#define EPD_H 300 +#endif #define EPD_OK 0 #define EPD_ERROR 1 @@ -76,6 +81,7 @@ extern "C" void epd_init_internalTempSensor(void); void epd_update(void); void epd_update_partial(void); + void epd_address_set(uint16_t x_start,uint16_t y_start,uint16_t x_end,uint16_t y_end); void epd_setpos(uint16_t x, uint16_t y); void epd_display(uint8_t *Image1, uint8_t *Image2); void epd_displayBW(uint8_t *Image); diff --git a/Example/EpaperModuleTest_GD32F303/Src/main.c b/Example/EpaperModuleTest_GD32F303/Src/main.c index a54d22d..7e517fb 100644 --- a/Example/EpaperModuleTest_GD32F303/Src/main.c +++ b/Example/EpaperModuleTest_GD32F303/Src/main.c @@ -24,7 +24,7 @@ void jump_to_app(uint32_t addr); #include "bmp.h" // define for White Black Red Epaper Module -#define EPD_BWR +//#define EPD_BWR uint8_t image_bw[EPD_W_BUFF_SIZE * EPD_H]; #ifdef EPD_BWR @@ -82,16 +82,25 @@ int main(void) epd_init(); #ifdef EPD_BWR + #ifdef EPD_42 + epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); + epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); + #else epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); - epd_paint_newimage(image_red, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + #endif epd_paint_selectimage(image_bw); epd_paint_clear(EPD_COLOR_WHITE); epd_paint_selectimage(image_red); epd_paint_clear(EPD_COLOR_WHITE); + + #ifdef EPD_42 + epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #else epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #endif epd_display(image_bw, image_red); epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); @@ -109,6 +118,10 @@ int main(void) #ifdef EPD_29 epd_paint_showString(10, 0, (uint8_t *)&"2.9 Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); +#endif +#ifdef EPD_42 + epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); #endif epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); @@ -125,8 +138,13 @@ int main(void) #endif epd_display(image_bw, image_red); + +#else + #ifdef EPD_42 + epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_270, EPD_COLOR_WHITE); #else epd_paint_newimage(image_bw, EPD_W, EPD_H, EPD_ROTATE_180, EPD_COLOR_WHITE); + #endif epd_paint_selectimage(image_bw); @@ -135,8 +153,12 @@ int main(void) epd_paint_showPicture((EPD_H - 200) / 2,(EPD_W - 64) / 2,200,64,gImage_5,EPD_COLOR_WHITE); #else epd_paint_clear(EPD_COLOR_WHITE); + #ifdef EPD_42 + epd_paint_showPicture((EPD_W - 250) / 2, (EPD_H - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); + #else epd_paint_showPicture((EPD_H - 250) / 2, (EPD_W - 122) / 2, 250, 122, gImage_4, EPD_COLOR_WHITE); #endif + #endif epd_displayBW(image_bw); epd_enter_deepsleepmode(EPD_DEEPSLEEP_MODE1); @@ -164,11 +186,15 @@ epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SI epd_paint_showString(10, 50, (uint8_t *)&"with 296 x 128 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); #endif - +#ifdef EPD_42 + epd_paint_showString(10, 0, (uint8_t *)&"4.2 Inch Epaper Module", EPD_FONT_SIZE24x12, EPD_COLOR_BLACK); + epd_paint_showString(10, 50, (uint8_t *)&"with 400 x 300 resolution", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); + epd_paint_showString(10, 29, (uint8_t *)&"Designed By WeAct Studio", EPD_FONT_SIZE16x8, EPD_COLOR_BLACK); +#endif #if 1 epd_paint_showString(10,100,(uint8_t *)&"GD32F303CCT6 Example",EPD_FONT_SIZE16x8,EPD_COLOR_BLACK); #else - epd_paint_drawRectangle(10, 103, EPD_H - 10, 116, EPD_COLOR_BLACK, 1); + epd_paint_drawRectangle(10, EPD_W-20, EPD_H - 10, EPD_W-6, EPD_COLOR_BLACK, 1); #endif sprintf((char *)&text, ">> Partial Mode");