diff --git a/README.md b/README.md index 136ec13..1d1f5f6 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,68 @@ # 1. Overview T12 焊台控制器功能介绍 T12 Quick Heating Soldering Station featuring - - 烙铁头温度实时监测 - - Temperature measurement of the tip - - PID温度控制 - - Direct or PID control of the heater - - 可以通过编码器进行控制温度 - - Temperature control via rotary encoder - - 短按编码器进入短时升温模式 - - Boost mode by short pressing rotary encoder switch - - 长按编码器进入主菜单 - - Setup menu by long pressing rotary encoder switch - - 手柄震动检测(需要手柄含有震动传感器) - - Handle movement detection (by checking ball switch) - - 手柄连接检测(通过判断烙铁头温度是否能够被读取来实现) - - Iron unconnected detection (by idenfying invalid temperature readings) - - 定时器设定 - 随眠,关机时间 - - Time driven sleep/power off mode if iron is unused (movement detection) - - 可以测量主控芯片电压以及温度 - - Measurement of input voltage, Vcc and ATmega's internal temperature - - 在OLED上实现信息显示 - - Information display on OLED - - 支持无源蜂鸣器 - - Buzzer - - 允许设置不同烙铁头的温度校准值 - - Calibrating and managing different soldering tips - - 设置被保存在EEPROM,掉电不丢失 - - Storing user settings into the EEPROM - - 允许热插拔烙铁头,并弹出烙铁头配置选择菜单 - - Tip change detection - - 芯片过热以及低电压报警 - - Chip overheating and low voltage alarm - - 更好的实时温度条以及实时功率条 - - Better real-time temperature bar and real-time power bar - - 拥有过渡动画 - - Have transition animation - - 内置屏幕保护程序 - - Built in screen saver - - 屏幕翻转设置 - - Screen flip settings - - 内置英文、中文、日文语言包 - - Built in English, Chinese and Japanese language pack - - 开机密码设置 - - Set System Password +- 烙铁头温度实时监测 +- Temperature measurement of the tip +- PID温度控制 +- Direct or PID control of the heater +- 可以通过编码器进行控制温度 +- Temperature control via rotary encoder +- 短按编码器进入短时升温模式 +- Boost mode by short pressing rotary encoder switch +- 长按编码器进入主菜单 +- Setup menu by long pressing rotary encoder switch +- 手柄震动检测(需要手柄含有震动传感器) +- Handle movement detection (by checking ball switch) +- 手柄连接检测(通过判断烙铁头温度是否能够被读取来实现) +- Iron unconnected detection (by idenfying invalid temperature readings) +- 定时器设定 - 随眠,关机时间 +- Time driven sleep/power off mode if iron is unused (movement detection) +- 可以测量主控芯片电压以及温度 +- Measurement of input voltage, Vcc and ATmega's internal temperature +- 在OLED上实现信息显示 +- Information display on OLED +- 支持无源蜂鸣器 +- Buzzer +- 允许设置不同烙铁头的温度校准值 +- Calibrating and managing different soldering tips +- 设置被保存在EEPROM,掉电不丢失 +- Storing user settings into the EEPROM +- 允许热插拔烙铁头,并弹出烙铁头配置选择菜单 +- Tip change detection + +## =========UI upgraded version ========= + + +- 芯片过热以及低电压报警 +- Chip overheating and low voltage alarm +- 更好的实时温度条以及实时功率条 +- Better real-time temperature bar and real-time power bar +- 拥有过渡动画 +- Have transition animation +- 内置屏幕保护程序 +- Built in screen saver +- 屏幕翻转设置 +- Screen flip settings +- 内置英文、中文语言包 +- Built in English and Chinese language pack +- 开机密码设置 +- System Password +- 允许设置旋钮方向 +- Knob direction setting menu +- 内嵌看门狗,宕机自动重启 +- Watchdog timer automatic reset the MCU + +## V1.8t7 New features: + +-EEPROM可用性检查机制 +-EEPROM availability check + +-允许保存最大30个烙铁头的配置 +- Tip change detection30 preservable soldering tip configurations + +-9段温度曲线拟合 +-9 segments of temperature curve fitting + Project Video: https://youtu.be/I9ATDxvQ1Bc @@ -67,19 +87,31 @@ Video from LHW-createskyblue (UI-v1.6L): https://b23.tv/LiOe54 ![IMG_20200816_141230_x.jpg](https://image.easyeda.com/pullimage/B0Crwq4ZAkTLbKYQlWMz32sMSgKbYp6pCCGzzExT.jpeg) ![IMG_20200816_130923_x.jpg](https://image.easyeda.com/pullimage/BpBMLRUhObBq2KgvY0ECxCkv6uOqRW2V4trbMem0.jpeg) -## UI Upgrade by createskyblue & lihaoyun6 +## UI-V1.8t6 UI Upgrade by createskyblue & lihaoyun6 -LHW-createskyblue created an awesome upgrade to the user interface which can be installed optionally. It features: +![](software/UI_upgrade_by_createskyblue/img/readme/1.jpg) -- Beautify the detail page and increase the power bar -- Menus have ICONS -- Better scrolling animation -- Get rid of the U8g graphics library and use the ArduBoy graphics Library (Lite) to improve the frame rate and reduce memory usage to make graphics possible -- Add flip display Settings to adapt to the habits of different people -- English, Chinese and Japanese language pack -- Screen saver -- System Password -- Better numerical input experience +### Default control interface + +![](software/UI_upgrade_by_createskyblue/img/readme/2.jpg) + +### EEPROM availability check + +![](software/UI_upgrade_by_createskyblue/img/readme/3.jpg) + +### Tip menu + +![](software/UI_upgrade_by_createskyblue/img/readme/4.jpg) + +### 9 segments of temperature curve fitting & Soldering tip calibration page + +![](software/UI_upgrade_by_createskyblue/img/readme/5.jpg) + +### Temperature calibration coefficient + +![](software/UI_upgrade_by_createskyblue/img/readme/6.jpg) + +### Encoder direction regulation Video from LHW-createskyblue (UI-v1.6L): https://b23.tv/LiOe54 diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t3/1.8t3.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t3/1.8t3.ino index e1314e4..8f38d0a 100644 --- a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t3/1.8t3.ino +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t3/1.8t3.ino @@ -20,7 +20,7 @@ // // ATmega328-controlled Soldering Station for Hakko T12 Tips. // 此v1.8t3版本功能简介 -// This 1.8t1 version of the code implements: +// This 1.8t3 version of the code implements: // - 烙铁头温度实时监测 // - Temperature measurement of the tip // - PID温度控制 @@ -64,7 +64,9 @@ // - 开机密码设置 // - System Password // - 允许设置旋钮方向 +// - Knob direction setting menu // - 内嵌看门狗,宕机自动重启 +// - Watchdog timer automatic reset the MCU // Power supply should be in the range of 16V/2A to 24V/3A and well // stabilized. diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t3/1.8t3.ino.standard.hex b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t3/1.8t3.ino.standard.hex deleted file mode 100644 index 7d96885..0000000 --- a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t3/1.8t3.ino.standard.hex +++ /dev/null @@ -1,2003 +0,0 @@ -:100000000C948A120C94B2120C94B2120C945529CE -:100010000C94B2120C94B2120C942D2A0C94B212BD -:100020000C94B2120C94B2120C94B2120C94B21240 -:100030000C94B2120C94B2120C94B2120C94B21230 -:100040000C940B290C94B2120C94D9280C94B3285C -:100050000C94B2120C942C2A0C94B2120C94B2127E -:100060000C94B2120C94B21205A84CCDB2D44EB975 -:100070003836A9020C50B9918688083CA6AAAA2A4B -:10008000BE000000803F07634236B79BD8A71A39ED -:10009000685618AEBAAB558C1D3CB7CC5763BD6DD6 -:1000A000EDFD753EF6177231BF000000803F08007D -:1000B0000000BE922449123EABAAAA2ABECDCCCCE7 -:1000C0004C3E00000080BEABAAAAAA3E0000000081 -:1000D000BF000000803F0000000000084178D3BB53 -:1000E0004387D1133D190E3CC3BD4282AD2B3E6800 -:1000F000EC8276BED98FE1A93E4C80EFFFBE01C4F1 -:10010000FF7F3F0000000000800400003FF0383017 -:1001100033103F90381033902790261030903FF0E6 -:1001200000008004800400003FF03DF020103BF010 -:100130003B7030302B502AD031B03FF000008004AB -:10014000800400003FF038703030231027902010DA -:100150002010279027903FF00000800480040000CA -:100160003FF03CF03CF020102490249020103CF014 -:100170003CF03FF000008004800400003FF037B006 -:1001800023103030387038703030231037B03FF0E3 -:1001900000008004FCF4F860E044C08CC11CC22C58 -:1001A000C44CC88CD10CA204C4048FFC187CBCFCC9 -:1001B0008000BFF81FF8B0281FF8B4081FF8B10876 -:1001C0001FF8B048BFF8B288BFF880008000BFF8C1 -:1001D0001FF8B0081808B9E819B8B8381838B9B80D -:1001E000B9F8B0F8BFF8800015543FF815503FF04B -:1001F0001550387010203104138C22A817FC2AA83F -:100200000000000015543FFC15543FFC15543C04FD -:1002100014043CFC14543CFC005400A800000000F2 -:10022000800400003FF03CF034B0249024902790EC -:100230002310303038703FF000008004FF7CFE7CDB -:10024000FCECE8DCC84C984C882408200000000036 -:10025000000000008004E01CF3FCE7FCCE0C8E1CC8 -:100260009F9C1F3C1F0C0E0C0FFC87F881E4C00CF8 -:10027000E01CF87C000458085808580840087FF82B -:1002800060185FE85B685FE85B681CE85FE8000097 -:10029000800400003FF03CF03CF03CF020102010C7 -:1002A0003CF03CF03CF03FF000008004F87CF7BCF0 -:1002B00000007FF80000BFF4AB54AB54AB54AB5418 -:1002C000AB54AB54BFF4C00CF03CCE0CBF04B30431 -:1002D00073007F007E007C007C007C60BC64BE04F8 -:1002E000CF0CF03C81DC559C29045500299055D059 -:1002F00003FCFF002E00267002508270E600EE0420 -:10030000800C001C3FF43FE03FC4378C2318303092 -:1003100038703CF03FF03FF000008004058074B876 -:1003200057A876B80580F97C4694AAA8F97C068877 -:1003300074A8578C75740698F03CCE4CBC34B81435 -:10034000188010804230607860F844C08004B8841F -:10035000CFCCF03CE01CC00C8FC49FE49FE49FE432 -:1003600000000300030003000780078003008004EF -:10037000F87CE01CC00CCFCCCFCCCFCCCFCCCFCC3A -:10038000CFCCCFCCC84CCFCCC00CE01CF87C8004C8 -:10039000BCF43FF03870B7B4B6B4B5B4B7B4387085 -:1003A0003FF0BCF48004F87CFCFCF87CE01CC00C42 -:1003B000C00CC00CC00CC00CC00C80048004FFFC3E -:1003C000F87CFCFC800400002000100008001000F5 -:1003D0002700000000000000000000000000800472 -:1003E000C3FC18001800C3FCFFFCFF0C0060006099 -:1003F000FF0CFFFCF0FC06000600F0FC8FC4102090 -:1004000020104CC89FE43DF03DF01DE03EF03F70F1 -:100410009FE48CC400003030F87CF33CF4BCF6BCA4 -:10042000F4BCF6BCF4BCE49CC84CD02CD02CC84C1A -:10043000E79CF03C88240820383038303830383099 -:100440003830383039303BB03FF03FF000008004A6 -:10045000F21415F0CADFB8CCF0D699E8AEA4DFEEFE -:10046000E8F21D1E08F21C08F21A1B08F071460182 -:10047000F046464A01F219F051F218F05A8DF0C0D8 -:10048000DAEEAEF0C8B8A5F1302924F0B599E1A4B0 -:10049000BDF21415F0CBEEAEBDF218F05A8DF21687 -:1004A00017F21415F0CBEEAEBDF21617F0BCCA9ED3 -:1004B000E0BDF21415F21213F21011F20C0DF094CB -:1004C000F20E0FF0A2D8DFCBE1EEACDCE8F20AF0DE -:1004D0008CF20BF04A8DF209F08DF097C59BBDF2BE -:1004E0000708F21F20F2040506F097DEEED5F0664D -:1004F0008081F22122F0CBABEEF0AEA4DFEEE8F08B -:10050000A8E8BDE2EEE0F0B499D3EEF200010203F8 -:10051000F0CCDFB0B8BD5361766500466C69700001 -:100520004D61696E2053637265656E004A500045E7 -:100530004E00434E00594553004E4F004F4E004F62 -:10054000464600496E666F73004269670050494431 -:1005500000446972656374005361766500426F6F91 -:100560007374004F666600536C6565700053617666 -:100570006500426F6F737400536C6565700044656D -:100580006661756C74005361766500416464004473 -:10059000656C6574650052656E616D650043616CE4 -:1005A000696272617465004368616E6765005265D7 -:1005B0007475726E0041626F7574004C616E6700F5 -:1005C0004C6F636B004C4F5720566F6C00526F742A -:1005D0006172790042757A7A65720053637265655B -:1005E0006E00436F6E74726F6C0054696D657200BB -:1005F00054656D70005469700000000000000F1D0C -:10060000C20800054442080003845FBF000FE444B1 -:1006100010000115451000054CC97F8009244F903A -:100620000007C4C11000054D413F0005544381003F -:1006300007C44D0200054441140005554108000758 -:10064000C881040000000000000000000000010854 -:100650003FFE001FFF810000004002000007FE0F68 -:10066000F8000402080800040208880007FE088851 -:10067000000402088800040208880007FE088800B9 -:100680000402094800040202300007FE040C0004C2 -:10069000021804000000000000000000000007FE37 -:1006A00013FE000402084000040208400004020196 -:1006B000FC000402388400040208840007FE0FFFD7 -:1006C000000402080000040209FE000402090200FE -:1006D00004020B020004020D020007FE09FE0004E2 -:1006E00002010200000000000000000000000110F4 -:1006F0000080001FFF80800001103FFF00004004C9 -:10070000080007FC0408000444041000044402101C -:100710000004440220001FFF812000004000C000B0 -:1007200000A00130000110020800060C0C070018A0 -:1007300003B00200000000000000000000000040C4 -:1007400000800000400080000FFF3FFF00084104D0 -:100750000800084104080008410410000841021084 -:10076000000FFF0220000841012000004000C000EF -:100770000040013000004002080000400C0700006B -:1007800040300200000000000000000000001FDFF9 -:1007900010200002120C20000224042000047F809C -:1007A00020000424B820000FA488500014BF8850F3 -:1007B0000004A488500004A488480004BF8888006E -:1007C00004A48A880007A48C8400044489070000DC -:1007D00081860200000000000000000000000FF011 -:1007E0000491000440025200047F90540004508899 -:1007F000FF0007D08481000451008100044901FFFB -:100800000007CA0281000444048100044A1CFF005E -:1008100007EA0481000C510481000061C4850000D6 -:10082000408082000000000000000000000007FF80 -:10083000802000008407FF0000840401000084047D -:10084000010000840401000FFFC7FF0000840400C2 -:10085000000084040000008405FF000084050100FE -:1008600001040901000104090100020411FF000450 -:1008700004010100000000000000000000000082F0 -:1008800004FF00004402010007FF90210000101047 -:100890002100001017FD0000101021000FFFD06193 -:1008A00000001010A10000281121000028122100D2 -:1008B0000044142100008210A1000301D045000C67 -:1008C000009002000000000000000000000008444A -:1008D00010FE00042810920005FF22920000103C38 -:1008E000920000100892001CFE109200041020FEDE -:1008F0000004103E920005FF809200041000920058 -:1009000005100E92000610309200041000FE000048 -:10091000100082000000000000000000000007DF5F -:100920008840000A24104000114210FE00040022FA -:10093000820002FF3D020008010A420009F910325C -:1009400000090920120009F93E020009090002000D -:1009500009090E020009F9302200080500140008F8 -:1009600002000800000000000000000000000FC3AB -:10097000F1E0000FE3F1F8000C70C19E000C30C1F3 -:1009800086000C30C183000C30C183000C60C18331 -:10099000000C60C183000FC0C183000FC0C186007E -:1009A0000C00C186000C00C198000C03F1F8000C8B -:1009B00003F1E00000000000000000000000002043 -:1009C0000820000FFF09FC00002008000000203E66 -:1009D000880003FE08500002020BFE0003FE0C40DC -:1009E00000020218400003FE2BFE0002020848002D -:1009F00003FE088800020208500002022830001F8F -:100A0000FF91CC0000000000000104047C0000887D -:100A10000444000FFF3F4400002004440000200C69 -:100A2000440000200E44001FFF95440000201444A1 -:100A30000000502444000050044400008804450095 -:100A4000010404850006038503001801040000006A -:100A50000000000000000000000000000000047E14 -:100A600021FC0004421104001F7E090400044221FD -:100A7000FC000542110400067E1104000C0005FC78 -:100A80000015FF880000040813FE000448325200DD -:100A9000044F125200044812520014A812520009C6 -:100AA0001F97FF000000000000000000000002107F -:100AB0003DFC000210250400041025040005FFBDC4 -:100AC000FC000C102520000C38252000143825FED1 -:100AD0000004543D20000454251000049225100009 -:100AE0000511A5090006113D4500041025830004E9 -:100AF00010010100000000000000000000001FC8FD -:100B0000102000124A0C20001AC9042000174800C7 -:100B100020001FFFB8200002080850001FC808501E -:100B200000020808500003C80848001E1408880086 -:100B300001540A880015220C840014438907000020 -:100B400081060200000000000002FE010000028297 -:100B50003FFF00048202000004FE0200000C1004AB -:100B6000FC00141004080005FF8C10000410141081 -:100B700000043825FF00043404100004520410005F -:100B8000049184100005100450000410042000009B -:100B90000000000000000000000000000000020350 -:100BA0000010001FDC3EFE00089002120005100439 -:100BB000FF001FDF84120002120CFE001FD2021081 -:100BC00000021222FE000A921410000A52141000B1 -:100BD00012220DFF0002220810000A421410000425 -:100BE0000223FF00000000000000000000000F785A -:100BF000BC20000948A45000094AA85000094AA88E -:100C00008800094AB104001FFEAAFB00094AA4207B -:100C100000094AA42000094AA7FE00094AB420009E -:100C20000948A924000B48A22200088AA4A20011A6 -:100C3000192040000000000000000000000000201B -:100C4000008000005001FC00008801040001040342 -:100C5000080006FB0490000800C0600007DF018068 -:100C600000045106000004511BFE00045102020062 -:100C700007D90202000456020200001003FE000021 -:100C80001002020000000000000000000000020846 -:100C9000209000027F9890001F8009FF000222012F -:100CA000100006218B100007628DFE000AA20910B9 -:100CB000000A14111000121431FE00020811100075 -:100CC00002141110000222111000024391FF0002D1 -:100CD000811100000000000000000000000010076B -:100CE00000000008F83FFE00048020020000802081 -:100CF000020000BE23E2001C8222220004A4222261 -:100D00000004942222000488222200049423E2009A -:100D1000052220020005422002000A003FFE0011C9 -:100D2000FFA00200000000000000000000000082A0 -:100D30000FFE00004400400007FF8040000010004C -:100D40004000001000400000101FFF800FFFC04057 -:100D50000000100040000028004000002800400073 -:100D6000004400400000820040000301C140000C2C -:100D700000808000000000000009FF004000042007 -:100D80003FFF00042000000000FE0000001C420F96 -:100D9000FC00044200000007FF80000004000FFC7C -:100DA0000004FF000000048100000005810FFC002A -:100DB000068108040004FF08040000810FFC000005 -:100DC00000000000000000000000000000000040E3 -:100DD0001F7E001FFF84020010808442000A4A0424 -:100DE00042000A3108420012C50F42000304197F75 -:100DF000001DF82901000040090100084209FD001A -:100E0000084209010008420F01000FFE0905000019 -:100E100002000200000000000000000000000100CD -:100E20000FFE00010008200003FF08200002010857 -:100E30002000042208200008200BFE0010200820BB -:100E400000005008280000500824000088082200F4 -:100E5000008810200001041020000203A7FF000CEE -:100E60000100000000000000000008000000021F58 -:100E700088FE001FD00E22000420302200045F8074 -:100E8000220007849E220004850822000494082280 -:100E900000049428FE0004971E42000494084200B7 -:100EA00008940842000AAC0A420011440C420000B7 -:100EB0008389FF00000000000000000000000040E7 -:100EC0000080001FFF9FFC0000400410000FFF0285 -:100ED000200000003FFF000FFE00000008420FF856 -:100EE0000008420808000FFE08080008020FF8007A -:100EF0000800080800080008080008000FF80010A3 -:100F0000000808000000000000000000000007FECC -:100F10000FF8000402000000040200000007FE00B9 -:100F2000000004023FFE00040200800007FE008073 -:100F300000009004900008910C8800069310860031 -:100F40000294208200009000800000900280001F28 -:100F5000FF810000000000000000000000000410FD -:100F600012020005FF9FD20005009212001E28A267 -:100F7000120004443FF20004820212000600021232 -:100F8000000CFE1FD2001410125200041012420076 -:100F90000410134200041012820015FF820A000898 -:100FA000000204000000000000000000000000201B -:100FB00000000000203E04001FFFA204001000A259 -:100FC000FF0000012204000FFE22040000403E4406 -:100FD0000000402224000440222400047C2204005B -:100FE00004402204000A403E04000940222400106C -:100FF000FF8014000000000800000000000010FE48 -:1010000008200008820BFF0004820A010010FE3C49 -:1010100051000882088800088209040002FE0C00C2 -:1010200000040019FC0009FF2820001929082000ED -:101030000929082000092908200009292BFF000B95 -:10104000FF900000000000000000000000001F7F73 -:1010500090F80001080888000A10088800047F0141 -:1010600007001FC13A0000054909FC000449088433 -:101070000004490888000449084800044908500051 -:1010800004490A200004160C58001421898700081E -:10109000C086020000000000001FE03FF0703860D2 -:1010A0001860186018FFFCFCFCFCFCFCFCF87CF8E9 -:1010B0007CFCFC7FF81E1033382D7C25382D38251C -:1010C000382D386D80DEC0BF40BF40DEC061803F3C -:1010D000007FF0FFE0C008C01CC038C870DCE4CF5F -:1010E000CCC78CC30CC00CC00CFFFC7FF800000602 -:1010F000000C0018F838F030307060707878F878AC -:10110000003C023F0C1FF80FF003C000007FF8FF07 -:10111000FCC00CC30CCB4CDB6CDB6CD86CDCECCFB8 -:10112000CCC78CC00CFFFC7FF8030007800FC00CFD -:10113000C01CE01CE03CF03CF07FF87FF8FCFCFCBD -:10114000FCFFFC7FF81140820021208FE023FC820D -:10115000004A23E200FE209FF013F880802220C086 -:10116000804221BFF0FBFA88800220848002208424 -:10117000801A208080E3FE8280020101000F421F5E -:10118000C0784110400840904008421FC0084110FC -:1011900040FFFD104008405FC00840800008413F0C -:1011A000E00843252010412520104125202041251D -:1011B0002040417FF07FF84880020049000201FF93 -:1011C000F00201001002027F202200410023F07F84 -:1011D00000220008002200FF802200888022008870 -:1011E0008022008A8022008900FFFC080023F21F71 -:1011F000C022111040FBF0904022121FC02A111093 -:101200004033F1104060005FC0AFFC800020413FE0 -:10121000E0224325202279252022412520A54125B1 -:101220002048FD7FF01083DFC010825040208250A4 -:10123000402FFFDFC06082520061C25200A1C25F36 -:10124000E022A3D20022A2510024925100288E5005 -:1012500090308BD45020825830208010101040479E -:10126000C017FC44402003F44023F844406208C403 -:1012700040A3F8E440200154402FFD444028064498 -:101280004023F844402040445020404850214050E2 -:10129000302080400020921FC03DF9904020909067 -:1012A0004040901FC07BFF0000A0013FE021F902F9 -:1012B00000FD09020021097FF021F90500210945FF -:1012C000002909888031F910702108202030303041 -:1012D0000075407755757740403E4A5E2B5E4A6BFD -:1012E000627F352F357F7C5B5E247B0E3A047E0166 -:1012F0007E4A5E69063A2F3F6B7E46403F41497FFA -:10130000494102626B6B6B62026A6B147D577D1000 -:10131000413F55553D5751213F2D7F2A122E0A77C7 -:101320005A505A770A2024137D5553707A2A7B022B -:101330001A437A4A525E2B5E424A415F353F555FFF -:10134000417D14577D0E407F7F1B54167D165449F6 -:101350003A407E575676423F427E7E427E047E5120 -:10136000377D3750127A1752761E127F557F145DE3 -:101370007F557F557F7F553D577F55377817457F80 -:101380007F2B7B287B2B7F1E12127F12121E7F4128 -:101390006B7F6B517F525A573A575A52007F4949D7 -:1013A00049497F22122A7F2A1222166A5E735662E8 -:1013B000160937315F155F7542221E0B4A7A027E8D -:1013C000023A2B3A427E00000000002F0003000387 -:1013D0003F123F163F1A120824323D2A0201000034 -:1013E0003E41413E000A070A083E08402000080826 -:1013F000080020001008041C2A1C243E20322A2445 -:10140000222A1418143E2E2A121C2A12023A0614FA -:101410002A14242A1C002400402400081422141436 -:101420001422140802290612291E3E093E3F251ADD -:101430001E21213F211E3F25213F05011E21393F4D -:10144000083F213F2110201F3F043B3F20203F0643 -:101450003F3F013E1E211E3F09061E215E3F093609 -:10146000222519013F013F203F3F100F3F183F3316 -:101470000C33033C03312D23007F41153E15417F82 -:101480000002010240404000010218243C3F2418A1 -:1014900018242418243F182C2C043F0548543C3FA2 -:1014A0000438003D00403D003F0834013F003C1C33 -:1014B000383C04381824187C241818247C3C080470 -:1014C000283C14043E243C203C3C100C3C303C2482 -:1014D00018244C503C24342C083641007F004136FF -:1014E000080101011028101F010120203E102000DA -:1014F00000080025150F241C0C103804180C38287F -:10150000382828183C083C18283820242C3C2C2C3F -:101510001C040808211D07083C0306231E223E2246 -:10152000120A3F320F3E0A3F0A24130E271E0222E0 -:10153000223E27120F2525102119273F222E211682 -:101540000F241B0E251F0526261E251D053F0408FA -:10155000241F04202222251927123B1620100F3C9D -:10156000013E1F242421110F0C031C1A3F1A0919D4 -:1015700027222A2A382730320C13053F25023F0E36 -:10158000213F2025253F25251D07201F3C3F203FCB -:1015900020103E223E23110F2121180100010205D7 -:1015A00002000000000000000020400000000000D9 -:1015B000002050200000000000503000000000001B -:1015C000006060000000000000000018180000002B -:1015D0000000003636000000000000563600000013 -:1015E0000000020151090906000000005F00000030 -:1015F00000000000007F41410041417F00000000E9 -:10160000000000003F010101004040407E0000005A -:101610000000003F213D05070070505E427E000043 -:1016200000000000007F63410041637F0000000074 -:10163000000808087F0808080008080808080808C3 -:10164000004444445F4444440041221408142241AD -:10165000000808082A0808080014141414141414A4 -:10166000001434141C141614000808141414222234 -:101670000022221414140808000205023C424224ED -:1016800000002B2C782C2B000000242A7A2F2A1201 -:1016900000001C62322E23140020545E254142209B -:1016A00000422512082452210020623E633E23029C -:1016B0000020564955225840000022147F14220071 -:1016C000001C2259554D120C0000004A55552900A6 -:1016D0000004643C173C64040004643C1F3C640444 -:1016E000001C22414141221C001C3E7F7F7F3E1C8A -:1016F000001C225D555D221C0008142241221408A2 -:1017000000081C3E7F3E1C08007F41414141417F53 -:10171000007F7F7F7F7F7F7F0040704C434C704015 -:101720000040707C7F7C704000010719611907013F -:101730000001071F7F1F0701004922144914224995 -:10174000000505057D05050500080808082A1C0890 -:1017500000081C2A08080808000004027F02040090 -:10176000000010207F20100000003E414141413E1A -:10177000000000427F40000000006251514949468C -:1017800000002241494949360000302824227F20A8 -:1017900000002F454545453900003E494949493239 -:1017A0000000010161190503000036494949493625 -:1017B000000026494949493E000020547E34146007 -:1017C0000020527F2A1A4A3000003C4020041800B2 -:1017D000001E2040200204180000104A4A2A10006F -:1017E00000000845454525180000482A3A4A4000AF -:1017F00000004425153D45400000247E145024007F -:101800000022527F0A484A340044344F44380418B6 -:101810000044344F4439041900002A5A4B4E5A08E8 -:1018200000002A5A4B4E5B080000081414224100A5 -:101830000000081414224504003F0004443F04043F -:10184000003F0004443F0405000020524242424051 -:1018500000002052424342410000245444475C04AB -:101860000000245444475C050000003F40404020F5 -:101870000000003F404140210002020A563F0202A0 -:101880000002020A563F02030004043F44545F442E -:101890000004043F44545F45000008093D4B4908DB -:1018A000000008093D4B490A00423A0722544444CB -:1018B00000423A0722554445000002124E4B4A327C -:1018C000000002124E4B4A3300001010484830000E -:1018D000000404022222221C000404022223221DEE -:1018E000000002021A254341000002021A25434566 -:1018F00000002057484844440000205748494445C8 -:1019000000120A2752503A24007F002052424240DF -:1019100000304E38540F64780024147F0422523C67 -:10192000001824124E422418007F002454543F44CF -:10193000007F002454543F45007F002454563D4608 -:1019400000023A4740413E0400023A4740413E050A -:1019500000023A4740433D06004030404D3210609F -:10196000004030404D321161004030404D32156230 -:1019700000080402040810100008040204091011F1 -:1019800000080402040A1512007F006A6A7E2A4ACF -:10199000007F006A6A7F2A4B007F006A6A7E2D4AB8 -:1019A00000006A6A6A7F2A4A0030291D4B483C10B1 -:1019B00000122A7F4240422400304E38540F4438EF -:1019C00000000A3E4B4A4A300000080E3846140810 -:1019D0000004071C62030A0400001C483E2418008F -:1019E000001E04523F12120C00002050503E4800CE -:1019F00000002050503F244400001C51494A483008 -:101A000000000F4241211E00000010696D4B49305B -:101A10000024147F04023E40000010494D4B493021 -:101A2000000028187E0844380024147F0442423CF9 -:101A3000003049251F2454380040282557352840B8 -:101A400000100A2E5B724A480040300C33404020A0 -:101A5000000004443C140C00000001413D09050352 -:101A6000000020201078040000001010087C020103 -:101A7000000018484C281800000006424322120EAD -:101A80000000404878484000002022223E222220C8 -:101A900000002828587C0800002222124A7F0202F7 -:101AA000000042221F02427E000042221F02427FAB -:101AB000000012121F721210000012121F72131077 -:101AC000000008444322120E000008444322120F73 -:101AD00000080742221E020200080742221F0203DA -:101AE000000042424242427E000042424243427F64 -:101AF0000002024F42221F020002024F42231E0335 -:101B00000000454A4020100C0000454A4021100DBD -:101B100000404222221A264000404222221B264137 -:101B20000004043F4444544C0004043F4445544DD5 -:101B3000000001464020100F000001464020110F18 -:101B4000000008444B2A120E000008444B2A120FD2 -:101B500000080A4A3E09090800080A4A3E0908091D -:101B6000000018405820180000020C424C20100EB3 -:101B700000020C424C21100D000405453D050504F2 -:101B8000000405453D0504050000007F080810001D -:101B90000000007F08091001000444241F0404040D -:101BA0000020222222222220004041251519270050 -:101BB000002022127B06122000404020100807005F -:101BC0000040300E00020C700040300E00020D711B -:101BD0000040300E00020D7200003F484848444467 -:101BE00000003F484849444500003F48484A4546B0 -:101BF000000002424222120E000002424223120F53 -:101C0000000002424222150E0008040204081020BF -:101C1000000804020409102100080402040A152225 -:101C2000002414447F041424002414447F05142544 -:101C3000002414447F0615220002021222520A06D2 -:101C400000002125294A42000040704C43502040AA -:101C50000040442414083700000008093F4949485F -:101C60000000101C680818000004040F74020A0623 -:101C7000000040484878400000202222223E2020D8 -:101C80000000004454547C000000424A4A4A4A7E04 -:101C9000000004454525150C00000F4040201F00A2 -:101CA0000040201E007F20100000007F4020100810 -:101CB00000007E424242427E00000C4444241C004C -:101CC000000006424222120E0010121E12127F1253 -:101CD000002022223A262220000001454525150F2A -:101CE000000041424020100C000006424322120F27 -:101CF000000048281C4878000000100C48380800F4 -:101D0000000804040810100800080000080000087B -:101D10000004080808080808000808080808080857 -:101D200008060505070604070903030504090A0850 -:101D30000303030603050303050503060404050561 -:101D4000040504040304090503F505F005EA05E2AA -:101D500005DB05D405CD05C505C005BB05B505AE3C -:101D600005A7059D0596058F058B0586057E0578DB -:101D70000572056D05670563055D05580551054D3F -:101D800005490543053F053C053905350532052F55 -:101D9000052C0520051B0516053E0053656C656383 -:101DA00074205469700000000000003E5B4F5B3EF1 -:101DB0003E6B4F6B3E1C3E7C3E1C183C7E3C181C10 -:101DC000577D571C1C5E7F5E1C00183C1800FFE707 -:101DD000C3E7FF0018241800FFE7DBE7FF30483AAD -:101DE000060E2629792926407F050507407F05250F -:101DF0003F5A3CE73C5A7F3E1C1C08081C1C3E7F97 -:101E000014227F22145F5F005F5F06097F017F005D -:101E10006689956A606060606094A2FFA29408047D -:101E20007E040810207E201008082A1C08081C2A9E -:101E300008081E101010100C1E0C1E0C30383E38F6 -:101E400030060E3E0E06000000000000005F00009D -:101E50000007000700147F147F14242A7F2A12230E -:101E60001308646236495620500008070300001C1E -:101E70002241000041221C002A1C7F1C2A08083E27 -:101E8000080800807030000808080808000060603A -:101E90000020100804023E5149453E00427F4000A8 -:101EA00072494949462141494D331814127F102780 -:101EB000454545393C4A49493141211109073649CF -:101EC000494936464949291E0000140000004034A3 -:101ED00000000008142241141414141400412214A8 -:101EE0000802015909063E415D594E7C1211127CCF -:101EF0007F494949363E414141227F4141413E7F30 -:101F0000494949417F090909013E414151737F080F -:101F100008087F00417F41002040413F017F0814B5 -:101F200022417F404040407F021C027F7F04081016 -:101F30007F3E4141413E7F090909063E4151215EF4 -:101F40007F09192946264949493203017F01033F88 -:101F50004040403F1F2040201F3F4038403F631417 -:101F600008146303047804036159494D43007F4119 -:101F700041410204081020004141417F0402010256 -:101F8000044040404040000307080020545478407B -:101F90007F284444383844444428384444287F380F -:101FA0005454541800087E090218A4A49C787F0891 -:101FB00004047800447D40002040403D007F10280C -:101FC000440000417F40007C047804787C080404CD -:101FD000783844444438FC1824241818242418FC65 -:101FE0007C08040408485454542404043F44243C0A -:101FF0004040207C1C2040201C3C4030403C442879 -:102000001028444C9090907C4464544C4400083612 -:102010004100000077000000413608000201020480 -:10202000023C2623263C1EA1A161123A4040207AA0 -:1020300038545455592155557941215454784121EA -:102040005554784020545579400C1E52721239551F -:10205000555559395454545939555454580000451C -:102060007C410002457D420001457C40F029242945 -:10207000F0F0282528F07C545545002054547C5419 -:102080007C0A097F4932494949323248484832324C -:102090004A4848303A4141217A3A42402078009DEE -:1020A000A0A07D39444444393D4040403D3C24FF9C -:1020B0002424487E4943662B2FFC2F2BFF0929F649 -:1020C00020C0887E090320545479410000447D419A -:1020D0003048484A32384040227A007A0A0A727DF3 -:1020E0000D19317D2629292F28262929292630480E -:1020F0004D4020380808080808080808382F10C87C -:10210000ACBA2F102834FA00007B000008142A14FF -:102110002222142A14089500220095AA005500AA2C -:10212000AA55AA55AA000000FF00101010FF0014C5 -:102130001414FF001010FF00FF1010F010F0141422 -:1021400014FC001414F700FF0000FF00FF1414F447 -:1021500004FC141417101F10101F101F1414141F48 -:1021600000101010F0000000001F101010101F10C1 -:10217000101010F010000000FF10101010101010C0 -:102180001010FF10000000FF140000FF00FF00000F -:102190001F10170000FC04F414141710171414F483 -:1021A00004F40000FF00F714141414141414F700BE -:1021B000F7141414171410101F101F141414F4140F -:1021C0001010F010F000001F101F0000001F14007E -:1021D0000000FC140000F010F01010FF10FF1414A9 -:1021E00014FF141010101F00000000F010FFFFFF7C -:1021F000FFFFF0F0F0F0F0FFFFFF0000000000FF35 -:10220000FF0F0F0F0F0F38444438447C2A2A3E1426 -:102210007E02020606027E027E0263554941633851 -:1022200044443C04407E201E2006027E020299A502 -:10223000E7A5991C2A492A1C4C7201724C304A4D60 -:102240004D303048784830BC625A463D3E49494995 -:10225000007E0101017E2A2A2A2A2A44445F44443E -:1022600040514A444040444A51400000FF0103E0CD -:1022700080FF000008086B6B083612362436060F04 -:10228000090F06000018180000001010003040FF71 -:102290000101001F01011E00191D1712003C3C3CEA -:1022A0003C000000000000000000240027002A007D -:1022B00000000000250028002B0000000000230083 -:1022C0002600290004040404040404040202020297 -:1022D00002020303030303030102040810204080E9 -:1022E0000102040810200102040810200000000868 -:1022F00000020100000304070000000000000000CD -:10230000AED5F0A83FD300408D14A1C8DA1281CF1A -:10231000D9F1DB40A4A6AF200021007F22000750A6 -:102320006C656173652077616974004144433A20AC -:102330000074656D703A2000536574206D6561739B -:102340007572656400537465703A20002B002D008F -:102350004D4F44452000FFFFFFFFFFFF80038670C5 -:1023600080038003867080039FF3E1309FF39FF327 -:10237000E1309FF3983301CC9833983301CC9833F4 -:10238000983387C098339833E1C098339833E1C0CD -:1023900098339FF398C09FF39FF398C09FF38003F7 -:1023A00066CC8003800366CC8003FFFF010CFFFF37 -:1023B000FFFF01001FFF810061301F3F873CE6FCEB -:1023C0008733873CE6FC87F3F8039E0F1F03F8036F -:1023D0009E0F1F03E13CFE0C07CFE13CFE0C07CF34 -:1023E00099033E3086C3E6CF380F9EF3E6CF380F11 -:1023F0009EF39E0327CC81039E0327CC8103E0FF3D -:10240000E10CE6CFE0FFE10CE6CF9803060000FF09 -:102410009803060000FFFFFF1EF0F80380036630FC -:1024200099C38003663099C39FF3010CF8FF9FF3B3 -:10243000010CF8FF9833393C01CF9833393C01CF78 -:102440009833FF0C793F98333ECCE0F398333ECC81 -:10245000E0F39FF33E0098CF9FF33E0098CF8003B8 -:102460003E30E7C380033E30E7C3FFFFFFFFFFFFBF -:10247000FFFFFFFFFFFF76312E3874330056000F49 -:10248000E01FC01FC03F803FF87FF07FE007C0071C -:10249000800F000E001C0018001000560014A03F12 -:1024A000F07FF8E01C6E18EC1C68186018E01C60E7 -:1024B00058E01C7FF83FF014A043004552524F52A1 -:1024C00000484F4C44004845415400574F524B5927 -:1024D00000424F4F535400534C454550004F464621 -:1024E0000000003BEC7BEE63E663E663E663E663D5 -:1024F000E663E663666226600660067FFE3FFC00D8 -:102500000025004300202070F8010204081020403C -:102510008000422A11241FBECFEFD8E0DEBFCDBF1E -:1025200012E0A0E0B1E0E4E4FBE702C005900D9208 -:10253000A83CB107D9F728E0A8ECB2E001C01D9291 -:10254000A931B207E1F712E1CAE8D2E104C021974C -:10255000FE010E94813DC938D107C9F70E94F72AC0 -:102560000C94A03D0C9400004F925F926F927F926A -:102570008F929F92AF92BF92CF92DF92EF92FF9293 -:102580000F931F93CF93DF9300D000D0CDB7DEB76A -:102590004B015C0129013A016701780120E030E03C -:1025A000A9010E94BC3887FDA6C020E030E0A90147 -:1025B000C301B2010E94BC3887FD9DC020E030E01D -:1025C000A901C801B6010E94BC3887FD94C081E012 -:1025D0002091E3073091E4072130310509F080E0D4 -:1025E000809304088092C9079092CA07A092CB07F3 -:1025F000B092CC074092CD075092CE076092CF07A1 -:102600007092D007C092D107D092D207E092D30740 -:10261000F092D4076091F7077091F8078091F9075D -:102620009091FA070E94C13820E030E04AE754E474 -:102630000E94CB3A69837A838B839C838092D507EF -:102640009092D607A092D707B092D8079B01AC0111 -:10265000C301B2010E9422392B013C014092D907EB -:102660005092DA076092DB077092DC0729813A8189 -:102670004B815C81C701B6010E94CB3A6B017C01A2 -:10268000C092DD07D092DE07E092DF07F092E0070C -:102690008091E1079091E207019769F5A501940106 -:1026A00060E070E0CB010E94593A6093D5077093C7 -:1026B000D6078093D7079093D807A301920160E0D3 -:1026C00070E0CB010E94593A6093D9077093DA0702 -:1026D0008093DB079093DC07A701960160E070E030 -:1026E000CB010E94593A6093DD077093DE07809317 -:1026F000DF079093E0070F900F900F900F90DF91FE -:10270000CF911F910F91FF90EF90DF90CF90BF90EE -:10271000AF909F908F907F906F905F904F900895B3 -:1027200080389105B0F46034710598F4E9E0F5E281 -:1027300090E1969FD001A0781124A80F6770E60F52 -:10274000F11D9491A05EBC4F442321F08C91982BF5 -:102750009C93089590958C919823FACFDF92EF92F5 -:10276000FF920F931F93CF93DF937C01D22E8B01A7 -:10277000040F111DEB0177FF02C0D0E0C0E0C801DB -:102780000134110514F080E490E0C817D9073CF437 -:102790004D2DBE01C7010E9490132196F0CFDF910D -:1027A000CF911F910F91FF90EF90DF900895CF92FE -:1027B000DF92EF92FF920F931F93CF93DF936B0102 -:1027C000122FEC017C01E40EF11CCE15DF0544F460 -:1027D000202F412FB601CE010E94AE132196F5CFD6 -:1027E000DF91CF911F910F91FF90EF90DF90CF90ED -:1027F00008952F923F924F925F926F927F928F92A5 -:102800009F92AF92BF92CF92DF92EF92FF920F937F -:102810001F93CF93DF9300D01F92CDB7DEB7C22EA8 -:10282000D12C9601280F391F37FD4FC080389105F4 -:102830000CF04BC0E9824A017B013C01402E512C37 -:10284000160127E0220E311C93E0359427949A95C7 -:10285000E1F78B01B12CA12C1B821A82EA81FB814A -:1028600083E0F595E7958A95E1F7EA0DFB1DE80D04 -:10287000F91DE4918A819B818770992720E830E0D7 -:1028800002C0359527958A95E2F7C901F0E0E22369 -:10289000F923EF2B41F04981B8018A819B81860D94 -:1028A000971D0E9490138A819B8101969B838A8346 -:1028B0008C159D059CF2A20CB31C0F5F1F4FC80125 -:1028C0008E199F09841595053CF20F900F900F907B -:1028D000DF91CF911F910F91FF90EF90DF90CF90FC -:1028E000BF90AF909F908F907F906F905F904F9030 -:1028F0003F902F9008950F931F93CF93DF93EC0198 -:102900008B0140E001960E94901340E0B801CE0197 -:1029100001970E949013B8016F5F7F4F40E0CE0196 -:102920000E949013B8016150710940E0CE010E94ED -:10293000901340E0B801CE01DF91CF911F910F912C -:102940000C9490132F923F924F925F926F927F92CE -:102950008F929F92AF92BF92CF92DF92EF92FF92AF -:102960000F931F93CF93DF93C82FD0E081E090E0C7 -:102970004C018C1A9D0A442455244C1A5D0A440CBF -:10298000551C7E0188E1E80EF11C40E0B70188E1AA -:1029900090E00E94901308E110E00C1B1D0B40E03A -:1029A000B80188E190E00E94901340E068E170E097 -:1029B000C7010E94901340E068E170E0C8010E94E6 -:1029C000901322242394312C712C612C97FC06C087 -:1029D000219782E0480E511C840C951C8FEF681AD9 -:1029E000780A82E0280E311C820C931C530188E186 -:1029F000A80EB11C40E07E0188E1E80EF11CB70191 -:102A0000C5010E94901388E1C82ED12CC618D708A2 -:102A100040E0B701C6010E94901340E008E110E0D9 -:102A20000C1B1D0BB801C5010E94901340E0B801BA -:102A3000C6010E94901340E0B501C7010E949013A7 -:102A400040E0B501C8010E94901340E0B601C70103 -:102A50000E94901340E0B601C8010E9490136C16CA -:102A60007D060CF4B3CFDF91CF911F910F91FF90B2 -:102A7000EF90DF90CF90BF90AF909F908F907F901E -:102A80006F905F904F903F902F90089580E0E0E22C -:102A9000F3E081118FEF00248193819381938193DF -:102AA0000394D1F7E5E0F8E01786168615861486BC -:102AB00008956F927F928F929F92AF92BF92CF9222 -:102AC000DF92EF92FF920F931F93CF93DF938038A3 -:102AD00091050CF057C0603471050CF053C07B01B8 -:102AE00037E0E322FF2433E0759567953A95E1F7E7 -:102AF000DB01B695BA2FAA27B795A7955D01C0E867 -:102B0000AC0EB11CA80EB91EA80FB91FA05EBC4F19 -:102B100000E810E0081B190B90E080E0E8E0F0E02E -:102B20004F018E189F0830E0FA01E80FF91FC49199 -:102B30007D906D01D1E0CD1AD1080E2C01C0CC0FD3 -:102B40000A94EAF77C2AE6017882E114F10499F00C -:102B50006730710581F0E491EC01CA0DDB1DC05EA8 -:102B6000DC4FF0E0082C02C0F595E7950A94E2F7F7 -:102B7000F881EF2BE8830196821793071CF408175E -:102B8000190791F6DF91CF911F910F91FF90EF9070 -:102B9000DF90CF90BF90AF909F908F907F906F907D -:102BA0000895AF92BF92CF92DF92EF92FF920F9370 -:102BB0001F93CF93DF936C017B018B01040F151FD3 -:102BC000EB015E01AE18BF08C017D10759F069913B -:102BD000D601ED91FC910190F081E02DC60109959F -:102BE000892B79F7C501DF91CF911F910F91FF904C -:102BF000EF90DF90CF90BF90AF900895FC01538D80 -:102C0000448D252F30E0842F90E0821B930B5417C6 -:102C100010F0CF96089501970895FC01918D828D53 -:102C2000981761F0A28DAE0FBF2FB11D5D968C91EC -:102C3000928D9F5F9F73928F90E008958FEF9FEF2B -:102C40000895FC01918D828D981731F0828DE80FE7 -:102C5000F11D858D90E008958FEF9FEF0895FC01A1 -:102C6000918D228D892F90E0805C9F4F821B91096E -:102C70008F739927089580E297E00E942F1621E034 -:102C8000892B09F420E0822F089580E090E0892BC1 -:102C900029F00E943B1681110C9400000895FC015C -:102CA000A48DA80FB92FB11DA35ABF4F2C91848DAD -:102CB00090E001968F739927848FA689B7892C930A -:102CC000A089B1898C91837080648C93938D848D5D -:102CD000981306C00288F389E02D80818F7D808360 -:102CE0000895EF92FF920F931F93CF93DF93EC0120 -:102CF00081E0888F9B8D8C8D98131AC0E889F989A3 -:102D0000808185FF15C09FB7F894EE89FF896083A5 -:102D1000E889F98980818370806480839FBF81E026 -:102D200090E0DF91CF911F910F91FF90EF90089568 -:102D3000F62E0B8D10E00F5F1F4F0F731127E02E43 -:102D40008C8D8E110CC00FB607FCFACFE889F9897B -:102D5000808185FFF5CFCE010E944F16F1CFEB8D1C -:102D6000EC0FFD2FF11DE35AFF4FF0829FB7F8944F -:102D70000B8FEA89FB8980818062CFCFCF93DF936D -:102D8000EC01888D8823B9F0AA89BB89E889F98983 -:102D90008C9185FD03C0808186FD0DC00FB607FCB8 -:102DA000F7CF8C9185FFF2CF808185FFEDCFCE01EB -:102DB0000E944F16E9CFDF91CF910895833081F0C3 -:102DC00028F4813099F08230A9F008958730A9F075 -:102DD0008830C9F08430B1F4809180008F7D03C0C9 -:102DE000809180008F7780938000089584B58F77DD -:102DF00084BD089584B58F7DFBCF8091B0008F771F -:102E00008093B00008958091B0008F7DF9CFCF936B -:102E1000DF93282F30E0F901E451FD4D8491F90151 -:102E2000E852FD4DD491F901EC53FD4DC491CC23F2 -:102E3000A1F081110E94DE16EC2FF0E0EE0FFF1FD3 -:102E4000E654FD4DA591B491EC91ED2381E090E025 -:102E500009F480E0DF91CF91089580E090E0FACF0F -:102E60001F93CF93DF93282F30E0F901E451FD4DFC -:102E70008491F901E852FD4DD491F901EC53FD4DD7 -:102E8000C491CC23A9F0162F81110E94DE16EC2FDD -:102E9000F0E0EE0FFF1FE055FD4DA591B4918FB707 -:102EA000F894EC91111108C0D095DE23DC938FBF0C -:102EB000DF91CF911F910895DE2BF8CFCF93DF9351 -:102EC00090E0FC01E852FD4D24918C539D4DFC0196 -:102ED00084918823C9F090E0880F991FFC01EA557E -:102EE000FD4DA591B491FC01E055FD4DC591D491E6 -:102EF00061110DC09FB7F8948C91209582238C931B -:102F00008881282328839FBFDF91CF910895623065 -:102F100051F49FB7F8943C91822F809583238C9332 -:102F2000E8812E2BEFCF8FB7F894EC912E2B2C93BA -:102F30008FBFEACF1F93CF93DF93182FEB0161E090 -:102F40000E945E17209739F460E0812FDF91CF91C6 -:102F50001F910C943017CF3FD10511F461E0F5CFEC -:102F6000E12FF0E0E451FD4DE491E33031F140F424 -:102F7000E130B1F0E230E1F0C038D1057CF7E4CFC8 -:102F8000E73029F1E83059F1E430B1F78091800061 -:102F9000806280938000D0938B00C0938A0004C02D -:102FA00084B5806884BDC7BDDF91CF911F9108951E -:102FB00084B5806284BDC8BDF7CF809180008068F1 -:102FC00080938000D0938900C0938800EDCF8091DA -:102FD000B00080688093B000C093B300E5CF8091CB -:102FE000B00080628093B000C093B400DDCF3FB7E3 -:102FF000F8948091E8029091E902A091EA02B091E0 -:10300000EB0226B5A89B05C02F3F19F00196A11D24 -:10301000B11D3FBFBA2FA92F982F8827BC01CD0122 -:10302000620F711D811D911D42E0660F771F881F81 -:10303000991F4A95D1F708958F929F92AF92BF92B0 -:10304000CF92DF92EF92FF924B015C010E94F71743 -:103050006B017C010E94F7176C197D098E099F098D -:10306000683E734081059105A8F321E0821A91081A -:10307000A108B10888EEC80E83E0D81EE11CF11C3F -:1030800081149104A104B10429F7FF90EF90DF901F -:10309000CF90BF90AF909F908F9008952FB7F894E6 -:1030A0006091E4027091E5028091E6029091E7025E -:1030B0002FBF089584E98093BC008091BC0084FDFB -:1030C000FCCF08958093BB0084E88093BC0080917E -:1030D000BC0087FFFCCF089584EA8093BC008091F8 -:1030E000BC0087FFFCCF88E70C9462180E946C1824 -:1030F00080E48093BB0084E88093BC00E0E2F3E0CE -:103100009091BC0097FFFCCF91919093BB0080936E -:10311000BC0097E0E032F90799F78091BC0087FF87 -:10312000FCCF0C945A18CF93C82F0E946C1880E0E3 -:103130000E9462188C2F0E946218CF910C945A182A -:10314000480F592F511D14161506D4F580389105D6 -:10315000BCF597FF02C090E080E04138510514F0C3 -:1031600040E850E0481BFB0177FD379633E0F595CA -:10317000E7953A95E1F7F695FE2FEE27F795E79557 -:10318000E80FF91FE05EFC4F6770772781E090E061 -:1031900001C0880F6A95EAF7382F213041F4415079 -:1031A00078F08191DF011197832B8C93F8CF809574 -:1031B000415030F09191DF01119798239C93F8CF03 -:1031C0000895CF92DF92EF92FF920F93CF93DF9308 -:1031D0006C017B01C42FD22F202F0E94A018B701B1 -:1031E0006D0F711D61507109603471052CF4202F31 -:1031F0004C2FC6010E94A018202F4D2FB701C601E9 -:103200000E94AE13C6018C0F911D202F4D2FB701C8 -:103210000197DF91CF910F91FF90EF90DF90CF90CA -:103220000C94AE132F923F924F925F926F927F92C7 -:103230008F929F92AF92BF92CF92DF92EF92FF92C6 -:103240000F931F93CF93DF93CDB7DEB72A970FB6B7 -:10325000F894DEBF0FBECDBF9A8389836A3061F5D3 -:10326000DC0152968C91B8E08B9F90011124E9818A -:10327000FA8186859785820F931F978786871586A3 -:10328000148681E090E02A960FB6F894DEBF0FBE58 -:10329000CDBFDF91CF911F910F91FF90EF90DF9005 -:1032A000CF90BF90AF909F908F907F906F905F90E6 -:1032B0004F903F902F9008956D3019F329813A81F6 -:1032C0003A872987D9011C96AD90BC90B0E8AB161F -:1032D000B1040CF07BC0F901C684D784F0E4CF16AA -:1032E000D1040CF073C0D90152966C90529745E00E -:1032F0009501649E200D311D1124121613060CF049 -:1033000065C0262C312C910153E0220F331F5A95B2 -:10331000E1F72C0D3D1D121613060CF057C0519607 -:10332000BC91BB83E985FA85F089FC83649FB00179 -:1033300011249B012A55324E3A832983712CE9814D -:10334000FA818491F5E07F1201C080E0460138E007 -:10335000532E282F30E03E832D834C8080FF4B80FE -:10336000411004C03B818C813817E1F010E000E08F -:103370000615C0F4D501A00FB11FB887AF83F12C9B -:10338000E12CE61460F4B701680D791D442D8F819E -:1033900098850E949013BFEFEB1AFB0AF2CF0F5FE4 -:1033A0001F4FE6CF8D819E81959587955A94820C0B -:1033B000931C5110CECF7394E981FA813196FA8330 -:1033C000E983A20CB31CF6E07F12B9CFA985BA85B8 -:1033D00052962C915297422F50E01C968D919C91C1 -:1033E000B6E02B9F800D911D1124E985FA85958704 -:1033F00084872389222309F444CF6AEF6403900170 -:10340000659F300D112420583F4F281739070CF0C5 -:1034100038CFDF010190F081E02D0190F081E02DA7 -:103420006AE0CD0109952DCF682F85E098E00C94D6 -:1034300012190F931F93CF93DF938C01D0E0C0E05C -:10344000F801EC0FFD1F6491662341F085E098E0E0 -:103450000E941219892B11F02196F2CFCE01DF9133 -:10346000CF911F910F910895089590E080E0089505 -:1034700080917A00806980937A008EE480937C004A -:1034800061E070E080E090E00E941C1883B7817FCB -:10349000826083BF80E130E020E093B7916093BF0A -:1034A000889593B79E7F93BF90917A0096FDFCCF4D -:1034B0004091780050917900240F351F815069F7B1 -:1034C00080917A008F7780937A0084E036952795F3 -:1034D0008A95E1F750E040E064EB7BE281E190E027 -:1034E0000E94F639C901089580917A00806980931D -:1034F0007A0088EC80937C006AE070E080E090E0E5 -:103500000E941C1883B7817F826083BF80E270E0D5 -:1035100060E093B7916093BF889593B79E7F93BF08 -:1035200090917A0096FDFCCF20917800309179003F -:10353000620F731F815069F780917A008F778093B3 -:103540007A00769567957695679562527A4090E015 -:1035500080E00E94C13826EF38E24CE151E40E943D -:10356000CB3A089590917A00906990937A008E50AA -:10357000806480937C0083B7817F826083BF20E278 -:1035800090E080E033B7316033BF889533B73E7F3A -:1035900033BF30917A0036FDFCCF409178005091D6 -:1035A0007900840F951F215069F720917A002F77B9 -:1035B00020937A0025E0969587952A95E1F708955E -:1035C0008FE00E94B21AA091EF02B091F0029C012C -:1035D0000E944A3A0E94C33828E539E743E353E49E -:1035E0000E94CB3A0E94443BCB0108958091F9029E -:1035F000882369F086E00E940717892B41F06AE072 -:1036000070E080E090E00E941C181092F90208958A -:103610006F927F928F929F92AF92BF92CF92DF92E2 -:10362000EF92FF920F93CF93DF937C01C62F01E0BF -:1036300020E340E370E060E00E94D713570123E0ED -:10364000A20EB11C00E02AE24AE263E070E0C5018C -:103650000E94D71370E060E0C7010E947B146701ED -:103660003FE2C30ED11C70E060E0C6010E947B14F3 -:103670006FE270E0C7010E947B146FE270E0C60148 -:103680000E947B14EC2FF0E0EE0FFF1FE257FE4F7D -:103690008080918053E0E52EF12CD12CC12C60E884 -:1036A000662E712CD0E0C0E0FE0133E0F595E79581 -:1036B0003A95E1F7EC0DFD1DE80DF91DE491CE0101 -:1036C00087709927930102C0359527958A95E2F76F -:1036D000C901F0E0E223F923EF2B69F0CE01880F56 -:1036E000991F8C0F9D1F01E023E043E0B7018A0D75 -:1036F0009B1D0E94D7132196CE30D105A9F632E04A -:10370000C30ED11C83E0E80EF11C2DE2E216F10499 -:1037100049F6DF91CF910F91FF90EF90DF90CF901E -:10372000BF90AF909F908F907F906F900895880F7B -:10373000991F9093E0028093DF02660F771F7093CA -:10374000DE026093DD028091F602882359F05093E7 -:10375000E2024093E102220F331F309305032093CE -:1037600004030895519541955109F1CF0F931F938B -:10377000CF9380914D01882399F0CFEF0FEE11E0A8 -:1037800061E085E00E943017C8010197F1F760E021 -:1037900085E00E943017C8010197F1F7C15081F709 -:1037A000CF911F910F9108958F929F92AF92BF92E8 -:1037B000CF92DF92EF92FF920F931F93CF93DF93FD -:1037C000D12CC12CF12CE12CD6E032E0932E40E339 -:1037D000A42EB12C8E2C86E00E94071721E0892BA5 -:1037E00009F020E02093F90221E430E041E050E0CC -:1037F00060E670E08FE190E00E94971B80910403E7 -:103800009091050395958795C82F8F31B9F52FE5D0 -:1038100030E041E050E060E670E08FE190E00E942F -:10382000971BCFE50E94461590921708D092120878 -:10383000C0921108B0921408A09213088EE50E945D -:10384000141A109212081092110880E290E09093DE -:1038500014088093130810E000E00815E8F4809144 -:103860001A03F801D89FE00DF11D1124E25BFE4F11 -:1038700080810E94141A0F5F1F4FEFCF803691F6A0 -:1038800020E230E041E050E060E670E08FE190E05F -:103890000E94971BC0E2C6CFD0921208C0921108B6 -:1038A00080E290E090931408809313088C2F0E947C -:1038B000141A0E94F61A0E94761886E00E940717D2 -:1038C000892B09F09BCF8091F902811197CF00914C -:1038D0001A03D09F80011124025B1E4FF801EE0DE8 -:1038E000FF1DC0830E94B61B6AE070E080E090E09C -:1038F0000E941C188FEFE81AF80AE0E1CE0ED11CE6 -:10390000F5E0EF16F10409F065CFF8011582DF91BB -:10391000CF911F910F91FF90EF90DF90CF90BF90CC -:10392000AF909F908F9008953F924F925F926F92C9 -:103930007F928F929F92AF92BF92CF92DF92EF923F -:10394000FF920F931F93CF93DF93CDB7DEB72E97E0 -:103950000FB6F894DEBF0FBECDBF80911D03882344 -:1039600009F4A5C11092BD071092BE071092BF07BF -:103970001092C0078090BD079090BE07A090BF072F -:10398000B090C007C0900D03D0900E03E0900F03DD -:10399000F0901003A7019601C501B4010E94593AA5 -:1039A0002B013C0120E030E0A9010E94B23B181637 -:1039B0000CF0A0C1C301B2010E94443B80914801B8 -:1039C000882309F4B8C1C092C507D092C607E09217 -:1039D000C707F092C807E12CF12C00EA10E420E0C0 -:1039E00030E040E450E46E31710540F0E12CF12C00 -:1039F00000E81FE320E030E040E05FE360E070E0DB -:103A000080E391E40E94B41280910308882309F4B2 -:103A10002AC10E944E186D837E838F839887809180 -:103A2000EB079091EC07A091ED07B091EE074D8167 -:103A30005E816F817885481B590B6A0B7B0B8091E7 -:103A4000F7079091F807A091F907B091FA07481786 -:103A500059076A077B0708F406C1E091E507F09172 -:103A6000E60780819181A281B38189839A83AB83A8 -:103A7000BC83E091E907F091EA079C01AD01608108 -:103A80007181828193810E94593A4B015C0120919E -:103A9000F3073091F4074091F5075091F6076981DB -:103AA0007A818B819C810E94593A6B017C01209123 -:103AB000D9073091DA074091DB075091DC07C50147 -:103AC000B4010E9422392091EF073091F007409114 -:103AD000F1075091F2070E945A3A2B013C014092A3 -:103AE000EF075092F0076092F1077092F207309062 -:103AF000040831101AC02091D5073091D6074091A3 -:103B0000D7075091D807C701B6010E9422399B01FF -:103B1000AC01C301B2010E94593A6093EF07709360 -:103B2000F0078093F1079093F2074090EF075090D1 -:103B3000F0076090F1077090F2071091FF079091E5 -:103B400000089E87A0910108AD8700910208212FEF -:103B5000392F4A2F502FC301B2010E94B23B1816D1 -:103B60000CF0CCC0812F9E85AD85B02F8093EF07E0 -:103B70009093F007A093F107B093F207332009F474 -:103B8000D6C02091D5073091D6074091D7075091E4 -:103B9000D807C501B4010E9422394B015C01209174 -:103BA000DD073091DE074091DF075091E007C70144 -:103BB000B6010E9422399B01AC016091EF07709120 -:103BC000F0078091F1079091F2070E94593AA50100 -:103BD00094010E945A3A6B017C019B01AC01612F58 -:103BE0007E858D85902F0E94BC3887FD18C010916E -:103BF000FB079091FC079E87A091FD07AD87009180 -:103C0000FE07212F392F4A2F502FB601C7010E94DE -:103C1000BC3887FD04C01C2DDE86ED860F2DE0919B -:103C2000E707F091E807812F9E85AD85B02F80834F -:103C30009183A283B38389819A81AB81BC81809374 -:103C4000F3079093F407A093F507B093F6078D81DF -:103C50009E81AF81B8858093EB079093EC07A0938A -:103C6000ED07B093EE076091C1077091C207809194 -:103C7000C3079091C4070E943D3B89E02E960FB682 -:103C8000F894DEBF0FBECDBFDF91CF911F910F9192 -:103C9000FF90EF90DF90CF90BF90AF909F908F906C -:103CA0007F906F905F904F903F900C949A17809107 -:103CB0001C03609144017091450181110EC08091F7 -:103CC0000B0390910C0320911B03BC01222329F0CC -:103CD00060914301680F792F711D90E080E00E9490 -:103CE000C1386093BD077093BE078093BF07909360 -:103CF000C00740CEC301B20190585ECE8091FB0751 -:103D00009091FC07A091FD07B091FE0789879A87E3 -:103D1000AB87BC879C01AD01C301B2010E94BC38D6 -:103D200087FF2CCF89859A85AB85BC851FCF812CD9 -:103D3000912C540134CF20E030E040E05FE3C70134 -:103D4000B6010E945A3A9B01AC01C501B4010E9420 -:103D5000B23B18164CF41092C1071092C207109291 -:103D6000C3071092C4077FCF80E090E0AFE7B3E4D1 -:103D70008093C1079093C207A093C307B093C40771 -:103D800072CF4F925F926F927F928F929F92AF927B -:103D9000BF92CF92DF92EF92FF92CF93DF9380900A -:103DA000F1029090F202A090F302B090F402C09160 -:103DB0001A03D0E0C501B4010E943D3B6B017C01B8 -:103DC00020E030E048E453E4C501B4010E94BC386F -:103DD00093E0CC0FDD1F9A95E1F7CE5FDE4F87FFB2 -:103DE00031C02881398150E040E025513109410935 -:103DF0005109C701B6010E945D3D28EC30E040E06A -:103E000050E00E94F639CA01B9016B5E7F4F8F4FB7 -:103E10009F4F0E94C33860930D0370930E038093ED -:103E20000F0390931003DF91CF91FF90EF90DF90FD -:103E3000CF90BF90AF909F908F907F906F905F904A -:103E40004F9008954A805B80712C612C20E030E017 -:103E50004CE853E4C501B4010E94BC3887FF1FC081 -:103E600088809980B12CA12CA7019601285C31098A -:103E700041095109C301B201681979098A099B09ED -:103E80000E945D3D20E530E040E050E00E94F639C0 -:103E9000CA01B901680D791D8A1D9B1DBACF2C81FD -:103EA0003D8150E040E02419350946095709C70112 -:103EB000B60168517140810991090E945D3D20E57C -:103EC00030E040E050E00E94F639CA01B901640DCB -:103ED000751D861D971D9DCFFC0101900020E9F7FF -:103EE0003197AF01481B590BBC0185E098E00C9459 -:103EF000D1158F929F92AF92BF920F931F93CF9342 -:103F0000DF93CDB7DEB7A1970FB6F894DEBF0FBE33 -:103F1000CDBF19A2423008F44AE08E010F5D1F4F59 -:103F2000842E912CB12CA12CA50194010E94283A39 -:103F3000E62FB901CA01EA30F4F4E05DD801EE934E -:103F40008D01232B242B252B79F790E080E010970F -:103F500019F0CD010E946C1FA1960FB6F894DEBF38 -:103F60000FBECDBFDF91CF911F910F91BF90AF904A -:103F70009F908F900895E95CE1CFCF92DF92EF920E -:103F8000FF92CF93DF936C01990FEE08FF08F7FEC5 -:103F900017C08DE20E94141AEC0166277727CB0127 -:103FA0006C197D098E099F094AE00E94791F8C0FC8 -:103FB0009D1FDF91CF91FF90EF90DF90CF900895FC -:103FC0004AE0C701B601DF91CF91FF90EF90DF90FB -:103FD000CF900C94791F0F9329E330E030931208AF -:103FE0002093110822E130E0309314082093130845 -:103FF00024E02093170820911E0330911F03253FD2 -:10400000314078F08DEC92E10E94191A00E020E234 -:1040100048E460E170E087E390E00E94E1180F91CE -:1040200008950E94BD1FF2CF4F925F926F927F92D0 -:104030008F929F92AF92BF92CF92DF92EF92FF92B8 -:104040000F931F93CF936B017C01742EAC019B01E6 -:104050000E940F3C882399F088EB92E0CF911F914A -:104060000F91FF90EF90DF90CF90BF90AF909F9017 -:104070008F907F906F905F904F900C946C1F4601D3 -:104080005701E894B7F82FEF3FEF4FE75FE7C5011F -:10409000B4010E940F3C81110DC02FEF3FEF4FE79D -:1040A0005FE7C501B4010E94BC3818161CF48CEB04 -:1040B00092E0D4CF2FEF3FEF4FE75FE4C701B601A7 -:1040C0000E94B23B18161CF480EC92E0C7CF2FEF91 -:1040D0003FEF4FE75FECC701B6010E94BC3887FD98 -:1040E000F3CF20E030E0A901C701B6010E94BC383F -:1040F00010E000E087FF08C08DE20E94141A8C01D6 -:10410000F7FAF094F7F8F094C0E060E070E080E037 -:104110009FE37C1641F020E030E040E251E40E9451 -:10412000CB3ACF5FF6CFA70196010E945A3A2B01F6 -:104130003C010E94443B4B015C014AE00E94791F14 -:104140007C01E00EF11ECC23B1F1C501B4010E9447 -:10415000C1389B01AC01C301B2010E94593A4B0125 -:104160005C018EE20E94141AE80EF91EC15018F18B -:1041700020E030E040E251E4C501B4010E94223960 -:104180002B013C010E94443B4B01B12CA12C4AE085 -:10419000C501B4010E94791FE80EF91EC501B401E2 -:1041A0000E94C1389B01AC01C301B2010E94593A7F -:1041B0004B015C01DBCFC701CF911F910F91FF90A5 -:1041C000EF90DF90CF90BF90AF909F908F907F90B7 -:1041D0006F905F904F900895CF92DF92EF92FF9291 -:1041E0000F93CF93DF9381E0809316081092150808 -:1041F0008093170800E02EE046E661E370E081E07E -:1042000090E00E94E11820911E0330911F03253F8A -:1042100081E03807B8F4A4E6B0E00E944A3A24EFFF -:1042200031E040E050E00E94F639BA01A9014E5F4A -:104230005F4F6F4F7F4F2EE061E370E081E090E0D1 -:104240000E94D7136091BD077091BE078091BF0790 -:104250009091C0070E943D3B9B01AC01A4E6B0E0F9 -:104260000E94153A34EFC32EDD24D394E12CF12CB7 -:10427000A70196010E94F639DA01C9010296A11D33 -:10428000B11D029700E02DE043E062E370E00E9480 -:10429000D7136091BD077091BE078091BF079091C1 -:1042A000C0070E943D3B9B01AC01A4E6B0E00E9428 -:1042B000153AA70196010E94F639DA01C901029662 -:1042C000A11DB11D039724E045E06CE370E00E945E -:1042D000D7136091BD077091BE078091BF07909181 -:1042E000C0070E943D3B9B01AC01A4E6B0E00E94E8 -:1042F000153AA70196010E94F6392E5F3F4F4F4FA6 -:104300005F4F790181E0E81AF108C1E3D0E041E0B4 -:10431000BE01C7010E9490132196CD33D105B9F794 -:104320006091BD077091BE078091BF079091C00753 -:104330000E943D3B9B01AC01A4E6B0E00E94153A0F -:1043400024EF31E040E050E00E94F639DA01C90183 -:104350000296A11DB11D0397EE24E39404E025E02D -:1043600045E055E26BE370E00E94F91300E02EE0B7 -:1043700047E161E370E088E690E00E94E118609117 -:10438000C1077091C2078091C3079091C4070E9432 -:104390003D3B9B01AC012F5F310941095109A7E168 -:1043A000B0E00E94153ACC24C394DD24DA94ED2CBD -:1043B000FD2CA70196010E94F639422F2EE061E301 -:1043C00070E088E690E00E94D7131092160881E012 -:1043D0008093150882E090E0909312088093110872 -:1043E000C7E3D0E0D0931408C09313086091BD07D1 -:1043F0007091BE078091BF079091C00740E00E9476 -:10440000142088EF0E94141A83E095E20E94191A82 -:1044100089E690E09093120880931108D0931408D5 -:10442000C09313086091C1077091C2078091C307C0 -:104430009091C4070E943D3B9B01AC012F5F310965 -:1044400041095109A4E6B0E00E94153AA70196017E -:104450000E94F63969017A014AE0C701B601F7FE08 -:104460000BC08DE20E94141A66277727CB016C19C6 -:104470007D098E099F094AE00E94791F81E095E23B -:104480000E94191A81E08093160810921508DF9196 -:10449000CF910F91FF90EF90DF90CF9008956F92A2 -:1044A0007F928F929F92AF92BF92CF92DF92EF92C4 -:1044B000FF920F931F93CF93DF93B0901A0377244B -:1044C0007394B11001C0712C2B2D30E0609142012A -:1044D0006150770B41E050E090E080E00E94971B34 -:1044E00086E00E94071721E0892B09F020E0209345 -:1044F000F902FF24F39472E0972EE6E08E2EFCE0A2 -:10450000CF2ED12C0E944615C0910403D0910503F3 -:10451000D595C795EC2E8E011127C801870D911DE9 -:1045200077FC9A958B199109712C97FD06C0833001 -:10453000910514F082E090E0782EF0921608109227 -:1045400015089092170810921208109211081092F4 -:104550001408109213088BE99DE10E94191A109219 -:104560001608F09215081092120810921108A72C44 -:10457000072C000CBB08C501019654E0880F991F59 -:104580005A95E1F7909314088093130889E99DE107 -:104590000E94191A6C2E671890E080E098012A1981 -:1045A0003B095901209142018C010F5F1F4F621698 -:1045B000D0F4D0921208C0921108980144E0220F62 -:1045C000331F4A95E1F730931408209313088A0D9E -:1045D0009B1D889E9001899E300D1124C901825B2C -:1045E0009E4F0E946C1FC801639403301105D1F6E1 -:1045F0000E94F61A0E94761886E00E940717892BFF -:10460000B9F48091F902811113C00E94B61BE092A7 -:104610001A03DF91CF911F910F91FF90EF90DF90E0 -:10462000CF90BF90AF909F908F907F906F900895A4 -:10463000BC2E68CF0E949B3D1F93CF93DF93EC016C -:10464000162F0E94E039181739F0612FCE01DF9143 -:10465000CF911F910C94E839DF91CF911F9108956C -:10466000AF92BF92CF92DF92EF92FF920F931F9380 -:10467000CF93DF936091470182E090E00E941C237A -:104680006091460183E090E00E941C236091450107 -:1046900084E090E00E941C236091440185E090E05A -:1046A0000E941C236091430186E090E00E941C233D -:1046B00060914B0187E090E00E941C2360914A01C9 -:1046C00088E090E00E941C236091490189E090E01D -:1046D0000E941C2360917E018AE090E00E941C23CE -:1046E000609148018BE090E00E941C2360914D0195 -:1046F0008CE090E00E941C2360911A038DE090E012 -:104700000E941C23609142018EE090E00E941C23D5 -:10471000609119038FE090E00E941C236091F502E4 -:1047200080E190E00E941C236091160381E190E0FB -:104730000E941C236091F80282E190E00E941C23F9 -:104740006091F70283E190E00E941C236091F602E1 -:1047500084E190E00E941C2385E1E82EF12C10E01A -:1047600006E0809142011817B8F5109F60011124EE -:10477000D0E0C0E0FE01EC0DFD1DE25BFE4F60816C -:10478000C7018C0F9D1F0E941C232196C630D105A6 -:1047900089F7670186E0C80ED11C88E0189FE00108 -:1047A0001124CE5FDE4F8EE0E80EF11C6981229667 -:1047B000C6010E941C23560182E0A80EB11CFE0116 -:1047C00032976081C60101960E941C236501AE14D8 -:1047D000BF0461F71F5FC5CFDF91CF911F910F918C -:1047E000FF90EF90DF90CF90BF90AF9008958F92A1 -:1047F0009F92AF92BF92CF92DF92EF92FF92CF93B0 -:104800006FEF70E089E00E949A178BEA94E00197BD -:10481000F1F78EE00E94B21A7C018AE00E9407172D -:104820009091C802981729F091E09093110380931A -:10483000C802809101019FEF980F909301018111AF -:1048400006C00E94E01A90931803809317036091AA -:10485000C1077091C2078091C3079091C4070E945D -:104860003D3B89E00E949A178090F1029090F202FD -:10487000A090F302B090F402B70190E080E00E94B3 -:10488000C138A50194010E94593A2DEC3CEC4CE44E -:104890005DE30E942239A50194010E945A3A609377 -:1048A000F1027093F2028093F3029093F4020E945B -:1048B000C11E60911E0370911F0390E080E00E9472 -:1048C000C1384B015C01C090BD07D090BE07E0909D -:1048D000BF07F090C007A70196010E94BC38811164 -:1048E00051C020910D0330910E0340910F03509160 -:1048F0001003C501B4010E94593A4B015C0120E04C -:1049000030E0A9010E94B23B181694F520E030E097 -:1049100040EA50E4C501B4010E94B23B181694F17C -:1049200060911E0370911F0390E080E00E94C138E7 -:10493000A70196010E94593A4B015C0120E030E04A -:10494000A9010E94B23B181664F520E030E040E86F -:104950005FE3C501B4010E94BC38181664F1C701B9 -:10496000B6010E94443B70931F0360931E0323C053 -:1049700020E030E040EA50ECC501B4010E94BC38B0 -:1049800087FFCECF60910D0370910E0380910F03CE -:10499000909110030E94443B70931F0360931E0389 -:1049A000BFCF20E030E040E85FEBC501B4010E94DA -:1049B000B23B87FFD4CF60910B0370910C0390E062 -:1049C00080E00E94C13820910D0330910E03409188 -:1049D0000F03509110030E94593A6B017C0120E0B3 -:1049E00030E0A9010E94B23B18160CF05EC0C7016E -:1049F000B6010E94443B6530710508F05AC08091B1 -:104A00007F01811105C080914C0181110E94B61B6C -:104A100081E080937F0110924C0180911E03909160 -:104A20001F03853F21E0920710F0109200012091B2 -:104A30000001211141C0843F9140F0F56FEF70E01B -:104A400089E00E949A170E94B61BC1E0C093000142 -:104A50000E944F220E943023C09311038EE00E94D7 -:104A6000B21ABC0190E080E00E94C1386093F1026C -:104A70007093F2028093F3029093F4021092030376 -:104A800020910B0330910C034AE050E060E971E0A3 -:104A900086E990E0CF91FF90EF90DF90CF90BF90AC -:104AA000AF909F908F900C94971BC701B6019058C0 -:104AB000A0CF10927F01B1CFCF91FF90EF90DF9008 -:104AC000CF90BF90AF909F908F9008950C94E03955 -:104AD0004F925F926F927F928F929F92AF92BF920E -:104AE000CF92DF92EF92FF920F931F93CF93DF93BA -:104AF000CDB7DEB72B970FB6F894DEBF0FBECDBF94 -:104B000090911903E82FF0E09F01220F331F9111BC -:104B100026C0F901E25DFD4F40815181EE24E3940E -:104B200000E124E260E370E080E390E00E94F9138A -:104B30002B960FB6F894DEBF0FBECDBFDF91CF919D -:104B40001F910F91FF90EF90DF90CF90BF90AF90AB -:104B50009F908F907F906F905F904F9008959230CC -:104B600009F079C0EF5DF24E4490F901E252FE4F38 -:104B7000A080B180F12CE12C04E310E393E0592EE6 -:104B800027E0622EE414A0F6F501EE0DFF1D44911E -:104B900080E1840F833008F45CC081EF7816D1F097 -:104BA00082EF7816C1F1403F90F4193710F0085F9A -:104BB00010E088E0489FA00111244F555A4E602F05 -:104BC00070E028E0812F90E00E945915185F80EF77 -:104BD000782E1DC04E39D8F41D3710F0085F10E054 -:104BE000C02ED12C812E912C459DA001112449531A -:104BF0005C4E23E0B601C4010E94591521E046EC49 -:104C000053E1B601C40103960E9459151C5F8FEF52 -:104C1000E81AF80AB7CF4332D0F7193710F0085F17 -:104C200010E0C02ED12C812E912C469DA001112484 -:104C30004F525D4E27E0B601C4010E94591521E094 -:104C400046EC53E1B601C40107960E945915185F5E -:104C5000DECF742EDCCF80E390E090931208809337 -:104C6000110884E390E0909314088093130881E086 -:104C700080931708F901E75BF24E65917491CE01BC -:104C800001960E94B538CE0101960E946C1F50CF4C -:104C90002F923F924F925F926F927F928F929F924C -:104CA000AF92BF92CF92DF92EF92FF920F931F933A -:104CB000CF93DF9300D01F92CDB7DEB7898386E014 -:104CC0000E94071721E0892B09F020E02093F902C8 -:104CD0005AE0252E312C0E944615009104031091B4 -:104CE00005031595079526E02093170831E03093CA -:104CF0001608109215086091DB027091DC02072EF5 -:104D0000000C880B990B0E94C3384B015C0145EDE8 -:104D1000C42E42E0D42E760182E090E09B838A8309 -:104D2000EA81FB81BF01FF0F880B990B0E94C338FA -:104D30009B01AC0160E070E080E291E40E94B73B2F -:104D40009B01AC01C501B4010E94CB3A0E943D3BDE -:104D5000CB01B1010E946D3DF701819391937F01D9 -:104D60002A813B81215031093B832A832F3F3F4FCA -:104D7000B9F61093DC020093DB02E9ECF2E0FB836E -:104D8000EA8394E0E92EF12C22E0822E912CB401EA -:104D9000092C000C880B990B0E94C3389B01AC01B5 -:104DA00060E070E080E291E40E94B73B2B013C019F -:104DB0006091DB027091DC02072E000C880B990BCE -:104DC0000E94C338A30192010E94CB3A0E943D3B4E -:104DD000CB01B1010E946D3DF60120813181821B22 -:104DE000930BF2E3F89FB001F99F700D1124072E89 -:104DF000000C880B990B0E94C338EA81FB8120814B -:104E00003181428153810E945A3A2B013C0120E0BA -:104E100030E0A9010E94BC3881119BC0EA81FB816E -:104E2000408251826282738201E022E346E270E0B6 -:104E300060E0C70104970E94D7138EECA82EBB2414 -:104E4000BA940FEF1FEFEA81FB812081318142810B -:104E5000538160E070E080E890E40E94593A2B01B1 -:104E60003C01B5010B2C000C880B990B0E94C33838 -:104E70009B01AC01C301B2010E945A3A0E943D3B22 -:104E8000F0921208E09211087093140860931308CE -:104E9000F60180819181800F911F0E94BD1F0F5FDD -:104EA0001F4FF2E3AF0EB11C0230110561F62A81EB -:104EB0003B812C5F3F4F3B832A8331E0831A91086B -:104EC00082E0C80ED11C9CE2E90EF11CE8E8EE1667 -:104ED000F10409F05CCF00E022E040E870E060E01F -:104EE00090E080E00E94D71320E140E860E370E0AA -:104EF00090E080E00E94D71389810E9468250E947B -:104F000076180E94F61A86E00E940717892B09F08E -:104F1000E2CE8091F9028111DECE0E94B61B809113 -:104F2000DB029091DC020F900F900F90DF91CF91F8 -:104F30001F910F91FF90EF90DF90CF90BF90AF90B7 -:104F40009F908F907F906F905F904F903F902F90A9 -:104F50000895C301B20190582DEC3CEC4CE45FE3A2 -:104F60000E942239A30192010E945A3AEA81FB81F0 -:104F7000608371838283938357CF9C0144E650E022 -:104F800064E873E090E080E00E94971B88E00E9454 -:104F90004826BC01665A7F4F9C014AE050E00E94BF -:104FA000971B88E00E944826BC01675F7F4F9C01E9 -:104FB00041E050E00E94971B88E00C9448262F9215 -:104FC0003F924F925F926F927F928F929F92AF9299 -:104FD000BF92CF92DF92EF92FF920F931F93CF93E6 -:104FE000DF93D82E282F30E0E091FA02F0E0EC5762 -:104FF000FE4F60816150770B41E050E090E080E02F -:105000000E94971B86E00E94071721E0892B09F078 -:1050100020E02093F9021092160881E08093150891 -:1050200038E3632EE0900403F0900503F594E794D1 -:10503000AE2C8701112798012D193109629EC001FC -:10504000639E900D1124C80FD91F209709F1662780 -:1050500077276C1B7D0B072E000C880B990B0E9489 -:10506000C3382AE939E949E15FE30E9422391B018B -:105070002C01BE01DD0F880B990B0E94C3389B01E8 -:10508000AC01C201B1010E945A3A0E943D3BEB01C2 -:105090000E944615025011094E0185E0B82E93E09A -:1050A000792E7A0CC090FA02D12C17FD20C0F6019F -:1050B000EC57FE4F808180171106C9F0C4F0E4E878 -:1050C000F1E070E060E0CF01845891408C159D05BF -:1050D00034F48191680F711DF6CFDE2CA3CF872D9C -:1050E0008B19680FC401885491090E94081BBA9457 -:1050F0000F5F1F4F88E3880E911CB110D3CFE4E8F7 -:10510000F1E090E080E09F01245831402C153D05EE -:1051100024F42191820F911DF6CF8E0D0E946825F7 -:105120000E9476180E94F61A86E00E940717892BC3 -:10513000A1F68091F9028111D0CF0E94B61B8A2D71 -:10514000DF91CF911F910F91FF90EF90DF90CF9063 -:10515000BF90AF909F908F907F906F905F904F9097 -:105160003F902F9008951F920F920FB60F92112427 -:105170002F933F934F935F936F937F938F939F935F -:10518000AF93BF93EF93FF9380E297E00E944F1697 -:10519000FF91EF91BF91AF919F918F917F916F910F -:1051A0005F914F913F912F910F900FBE0F901F90E5 -:1051B00018951F920F920FB60F9211242F938F9371 -:1051C0009F93EF93FF93E0913007F0913107808137 -:1051D000E0913607F091370782FD1BC090818091E6 -:1051E00039078F5F8F7320913A07821741F0E09162 -:1051F0003907F0E0E05EF84F958F80933907FF9113 -:10520000EF919F918F912F910F900FBE0F901F9054 -:1052100018958081F4CF1F920F920FB60F92112430 -:105220002F933F938F939F93AF93BF938091E4020B -:105230009091E502A091E602B091E7023091E3027D -:1052400023E0230F2D3758F50196A11DB11D2093A2 -:10525000E3028093E4029093E502A093E602B09308 -:10526000E7028091E8029091E902A091EA02B091F0 -:10527000EB020196A11DB11D8093E8029093E90213 -:10528000A093EA02B093EB02BF91AF919F918F91EF -:105290003F912F910F900FBE0F901F90189526E809 -:1052A000230F0296A11DB11DD2CF1F920F920FB6F0 -:1052B0000F9211242F933F934F935F936F937F939C -:1052C0008F939F93EF93FF9383B1817029B1909156 -:1052D000EE02981709F49DC030E0220F232F221F01 -:1052E000330B922F8093EE024091ED02241709F4C4 -:1052F00090C02093ED022091E1023091E2029817D4 -:1053000019F031952195310940910403509105031D -:105310006091DF027091E002240F351F26173707D6 -:105320000CF48BC02091E1023091E202981719F041 -:105330003195219531094091040350910503609105 -:10534000DD027091DE02240F351F621773070CF423 -:105350006FC04091E1025091E202981719F0519507 -:10536000419551092091040330910503240F351F05 -:10537000309305032093040341E0981340E020910B -:10538000EC02421709F440C02091E1023091E202A0 -:10539000981719F0319521953109609104037091A6 -:1053A0000503E091DF02F091E002260F371F2E1770 -:1053B0003F070CF44CC02091E1023091E2029817B3 -:1053C00019F031952195310960910403709105031D -:1053D000E091DD02F091DE02260F371FE217F3079E -:1053E0008CF12091E1023091E202981719F0319589 -:1053F000219531098091040390910503820F931F39 -:1054000090930503809304034093EC0281E0809322 -:105410001103FF91EF919F918F917F916F915F9118 -:105420004F913F912F910F900FBE0F901F901895A5 -:105430002091DD023091DE029BCF2091DF0230917E -:10544000E00296CF8091DD029091DE02D9CF80916B -:10545000DF029091E002D4CF18951F920F920FB601 -:105460000F9211248F93EF93FF93E0E6F0E0808199 -:1054700080648083FF91EF918F910F900FBE0F900A -:105480001F9018950F931F93CF93DF93E0E2F7E0FF -:105490001382128288EE93E0A0E0B0E084839583CB -:1054A000A683B7838EE992E09183808385EC90E0B8 -:1054B0009587848784EC90E09787868780EC90E0DE -:1054C000918B808B81EC90E0938B828B82EC90E0CF -:1054D000958B848B86EC90E0978B868B118E128E49 -:1054E000138E148EE5E0F8E0138212821682178282 -:1054F00080E1808715821482128680EB92E091838E -:105500008083158614861786168681E0808B118A23 -:10551000828B138AC9ECD7E021EC37E03F8F2E8FC6 -:1055200025EC37E03D8F2C8F2DEB37E039A328A3F6 -:105530001AAE1AAA1BAA1CAA1DAA40E050E06FE7E7 -:1055400073E44EAB5FAB68AF79AF44E650E060E028 -:1055500070E04EA75FA768AB79AB21E030E0398FF0 -:10556000288F3B8F2A8F8BAF80E090E0A0E3B1E4DF -:1055700088839983AA83BB8380E090E0A0E0BFE3A7 -:105580008C839D83AE83BF8380E090E0A0E8BFE37F -:1055900088879987AA87BB8780E090E0A0E3B1EC79 -:1055A0008C879D87AE87BF878DEC9CECACE4BDEB10 -:1055B000888B998BAA8BBB8B80E090E0A0E2B1EC4A -:1055C0008C8B9D8BAE8BBF8B0E944E180EA51FA59A -:1055D00028A939A9601B710B820B930B6AA37BA3CB -:1055E0008CA39DA3DF91CF911F910F910895CF932D -:1055F000DF93CDB7DEB7A5970FB6F894DEBF0FBE29 -:10560000CDBF789484B5826084BD84B5816084BD4B -:1056100085B5826085BD85B5816085BD80916E0050 -:10562000816080936E001092810080918100826081 -:1056300080938100809181008160809381008091BE -:1056400080008160809380008091B10084608093AD -:10565000B1008091B00081608093B00080917A00A9 -:10566000846080937A0080917A00826080937A00CF -:1056700080917A00816080937A0080917A008068BE -:1056800080937A001092C100A89584B7877F84BF69 -:105690008091600088618093600087E18093600062 -:1056A00080916000806480936000809160008860D9 -:1056B000809360001092B90088E48093B8000E9443 -:1056C0006C1880E00E94621800E013E2EFE1EE2E19 -:1056D000E3E2FE2EF80184910E9462180F5F1F4FD3 -:1056E000E016F106B9F70E945A1811E01093B800BD -:1056F0000E94761881E280930D0860E08EE00E949F -:105700005E1760E08FE00E945E1761E085E00E9416 -:105710005E1761E089E00E945E1762E087E00E9408 -:105720005E1762E088E00E945E1762E086E00E94F9 -:105730005E1762E08AE00E945E176FEF70E089E01A -:105740000E949A1760E085E00E94301780917A00ED -:10575000876080937A0080917A00886080937A00D5 -:10576000789410936B00109368001BBB90E080E06E -:105770000E946625182F81E090E00E946625912FF7 -:105780008A30944109F0D3C082E090E00E946625FF -:10579000182F83E090E00E946625912F9093470197 -:1057A0008093460184E090E00E946625182F85E0F2 -:1057B00090E00E946625912F9093450180934401CB -:1057C00086E090E00E9466258093430187E090E0A8 -:1057D0000E94662580934B0188E090E00E94662538 -:1057E00080934A0189E090E00E94662580934901F8 -:1057F0008AE090E00E94662580937E018BE090E035 -:105800000E94662591E0811101C090E090934801CB -:105810008CE090E00E94662591E0811101C090E04B -:1058200090934D018DE090E00E94662580931A03CD -:105830008EE090E00E946625282E809342018FE042 -:1058400090E00E9466258093190380E190E00E9419 -:10585000662591E0811101C090E09093F50281E10D -:1058600090E00E9466258093160382E190E00E94FA -:105870006625182F83E190E00E946625912F909372 -:10588000F8028093F70284E190E00E94662591E09F -:10589000811101C090E09093F60252E0852E51E014 -:1058A000952E6EE4A62E61E0B62E75E1E72EF12C62 -:1058B000312C231409F447C010E000E0C701800F29 -:1058C000911F0E946625F501E00FF11F80830F5F95 -:1058D0001F4F0630110591F7670126E0C20ED11C5B -:1058E0003EE0E30EF11C3401C6010E946625082F3C -:1058F00010E0102F0027F301118300832601F2E04E -:105900004F0E511CC60101960E946625082BF3011B -:10591000019311933F0162014E145F0429F7339400 -:10592000F8E08F0E911C26E0A20EB11CC2CF64E1FC -:1059300090E080E00E941C236AE081E090E00E94F9 -:105940001C230E9430231091F50280EC111101C03C -:1059500088EC0E94931880EA111101C081EA0E942C -:1059600093181092120380E28093130380E48093D3 -:10597000140380E6809315038091F7029091F8025A -:10598000892B19F10E94461568E088E290E00E9498 -:10599000081B88E00E9468250E94761868EE73E074 -:1059A00080E090E00E941C180E94B61B0E94B61B6B -:1059B0000E94B61B90E080E00E94BD272091F70274 -:1059C0003091F80282179307E9F60E94381A9093F3 -:1059D000F0028093EF020E94E01A909318038093E4 -:1059E0001703009146011091470110930C03009397 -:1059F0000B038EE00E94B21ABC0190E080E00E948E -:105A0000C1386093F1027093F2028093F302909395 -:105A1000F4020E94741A0E94C11E20E030E040EAA5 -:105A200051E460910D0370910E0380910F039091EA -:105A300010030E945A3A6B017C01B80190E080E0AB -:105A40000E94C1389B01AC01C701B6010E94BC385D -:105A500087FF05C070E060E089E00E949A1710920D -:105A6000FB071092FC071092FD071092FE07412CD5 -:105A7000512C3FE7632E33E4732E4092FF07509280 -:105A800000086092010870920208A090E707B090A9 -:105A9000E80780910308F501C080D180E280F3809F -:105AA000882311F40C94BB37A3019201C701B601FE -:105AB0000E94B23B181634F5F50140825182628291 -:105AC00073828090EF079090F007A090F107B0905C -:105AD000F207C090FF07D0900008E0900108F09016 -:105AE0000208A7019601C501B4010E94B23B181635 -:105AF000C4F4C092EF07D092F007E092F107F09261 -:105B0000F2071FC020E030E0A901C701B6010E94E2 -:105B1000BC3887FFD6CFF501108211821282138222 -:105B2000D0CFC090FB07D090FC07E090FD07F0902D -:105B3000FE07A7019601C501B4010E94BC3887FD8C -:105B4000D8CF81E08093030883B181708093EE0207 -:105B500089B190E0880F892F881F990B8093ED02FF -:105B60002091EE029091ED0281E0291380E0809374 -:105B7000EC0298014AE050E060E971E086E990E0CB -:105B80000E94971B0E944E186093070370930803AE -:105B90008093090390930A030E94B61B0E94B61BD0 -:105BA00080910403909105039C013595279538A3B6 -:105BB0002F8F30930C0320930B0386E00E9407176E -:105BC00089A3811193C080910303882309F48EC0B7 -:105BD0000E94B61B0E944E186B017C01C092FF020E -:105BE000D0920003E0920103F092020386E00E944B -:105BF0000717892B59F40E944E186C197D098E09DC -:105C00009F09643F71408105910580F30E944E1801 -:105C10006C197D098E099F09643F714081059105CA -:105C200008F424C66FEF70E089E00E949A170E9482 -:105C3000B61B1D861092FA028D850E94DF278D8784 -:105C40008B3008F03FC0E82FF0E0E75DF14D0C9499 -:105C5000813D462EC4300D314E315C318C319A314C -:105C6000EE3301340C34163420E030E0A901C701D2 -:105C7000B6010E94BC3887FF64CF1092EF071092E4 -:105C8000F0071092F1071092F2075BCF18ED212E6A -:105C9000312C0EE1602E712C8BEA482E84E0582EB8 -:105CA00081E08093FA028D850E94DF278D87823004 -:105CB00009F405C208F0DAC0882309F400C1813074 -:105CC00009F400C10E94302381E080931103EF8D1D -:105CD000F8A1F0930C03E0930B039F014AE050E01E -:105CE00060E971E086E990E00E94971BF9A1F093CA -:105CF000030380911B03882309F1109149011123AB -:105D0000E9F00E944E18C090FB02D090FC02E09097 -:105D1000FD02F090FE026C197D098E099F0928EEA4 -:105D200033E040E050E00E94283A211738F010920A -:105D30001B030E94B61B81E080934C0180911103EC -:105D40008823F1F180911C03882351F120E030E099 -:105D500040EA51E460910D0370910E0380910F03AE -:105D6000909110030E945A3A6B017C0160910B03E1 -:105D700070910C0390E080E00E94C1389B01AC015F -:105D8000C701B6010E94BC3887FF05C070E060E023 -:105D900089E00E949A170E94B61B81E080934C0113 -:105DA0001092110310921C0310921D030E944E18B2 -:105DB00060930703709308038093090390930A0389 -:105DC0000E944E18009107031091080320910903C7 -:105DD00030910A03601B710B820B930B20E63AEEA5 -:105DE00040E050E00E94283A122F20930603809151 -:105DF0001C0381110BC080914B01882339F02817B7 -:105E000028F081E080931C030E94B61B80911D0343 -:105E100081110BC080914A01882339F0181728F0AE -:105E200081E080931D030E94B61B0E94F7230E940D -:105E3000941C0E944E1880910E08262F281B822F3A -:105E400090910F08992309F427C520931008109208 -:105E50000F0880E090E0892B09F4A2CE0E943B1647 -:105E6000882309F49DCE0E9400009ACE5D855330B0 -:105E700009F428C1543009F025CF809142018830BF -:105E800008F00ECF91E0980F9093420180931A038F -:105E90000E94D41BE0911A0388E0E89FF0011124CE -:105EA000EE5FFE4F3182208224E331E03383228390 -:105EB00046E851E05583448377826682F1CE0E94A2 -:105EC0004F22EECECE0101967C0101E010E0DD24F0 -:105ED000D394B2E0CB2EE0911A0394E0E99FF00155 -:105EE0001124C8010197E80FF91FEE0FFF1FEE5FA5 -:105EF000FE4F2081318130930C0320930B0341E04E -:105F000050E064EF71E084E690E00E94971BD0922D -:105F10004C0186E00E94071721E0892B09F020E060 -:105F20002093F9020E944615C09217080E94F72399 -:105F30000E94941C109212081092110810921408DA -:105F40001092130885E493E20E94191AC8010E9476 -:105F5000BD1F84EC92E00E946C1F80917F01109223 -:105F6000120810921108882309F481C0E0E1F0E0E2 -:105F7000F0931408E093130888E393E20E94191A3F -:105F8000109212081092110820E230E030931408A9 -:105F90002093130881E393E20E94191A809104036D -:105FA00090910503959587950E94BD1F0E94F61A52 -:105FB0000E94761886E00E940717892B09F0B2CF5D -:105FC0008091F9028111AECF809104039091050375 -:105FD00095958795F701819391937F010E94B61B58 -:105FE0006AE070E080E090E00E941C180F5F1F4F95 -:105FF0000430110509F06FCF6FEF70E089E00E9467 -:106000009A17C2010197F1F70E94741A0E94443B4B -:106010006B0178876F8389809A800B811C81C40112 -:106020004E968017910708F03BCEAD80BE80C80128 -:106030004E968A159B0508F033CE87E08093FA02CE -:1060400080E00E94DF27882309F42ACEE0911A031A -:1060500028E0E29FF0011124EE5FFE4F91828082E2 -:1060600013830283B582A482D782C68219CE40E10F -:1060700050E050931408409313088BE293E20E947F -:10608000191A6091F1027091F2028091F3029091DD -:10609000F4020E94443B90E080E04AE00E94791FB5 -:1060A000109212081092110880E290E09093140868 -:1060B000809313088FE193E20E94191A77CF0E9410 -:1060C000D41BEECD87E08093FA02809142018130AB -:1060D00009F4E6CD80E00E94DF27882309F4E0CDB3 -:1060E00010911A0300914201402F4150550BBA0103 -:1060F0001417150639F4115010931A030150009328 -:106100004201CECD812F90E086179707BCF756E06D -:10611000159FD001112450E040E09C012F5F3F4FBC -:10612000FA01EA0FFB1FE25BFE4FF680F0824F5F41 -:106130005F4F46305105A1F743E0220F331F4A95C8 -:10614000E1F7D901AE5FBE4F2D913C91119753E01D -:10615000880F991F5A95E1F7FC01EE5FFE4F3183DE -:10616000208312968D919C9113979383828314962A -:106170008D919C9115979583848316968D919C9112 -:10618000978386831F5FBECF52E05093FA0210E0E0 -:10619000812F0E94DF27182F8130D1F028F0823024 -:1061A00059F10E94302346CD20914601309147019C -:1061B0004AE050E060E971E086E990E00E94971BB8 -:1061C00082E10E9448269093470180934601E0CFE8 -:1061D00020914401309145014AE050E068EC70E0C4 -:1061E00084E190E00E94971B83E10E9448269093EF -:1061F000450180934401CCCF2091430130E04AE037 -:1062000050E064E670E08AE090E00E94971B84E131 -:106210000E94482680934301BBCF83E08093FA021B -:1062200010E0812F0E94DF27182F813031F1A0F07C -:10623000823009F0B6CF2091490130E04AE050E0C9 -:1062400064EB70E090E080E00E94971B88E10E9480 -:10625000482680934901E5CF20914B0130E041E091 -:1062600050E06EE170E090E080E00E94971B86E1D4 -:106270000E94482680934B01D4CF20914A0130E000 -:1062800045E050E06CE370E090E080E00E94971BF6 -:1062900087E10E94482680934A01C3CF84E080931F -:1062A000FA02809148010E94DF2791E0811101C02C -:1062B00090E090934801BECC10E099E0E92EE09286 -:1062C000FA02812F0E94DF27182F882321F08130C6 -:1062D000E9F000E00AC085E08093FA0280917E0137 -:1062E0000E94DF2780937E0101E0F090F50280ECB0 -:1062F000F11001C088EC0E94931880EAF11001C0EF -:1063000081EA0E9493180111DACF4BCF8091F502F8 -:1063100081278093F502E8CF86E08093FA0280918E -:106320004D010E94DF2791E0811101C090E0909320 -:106330004D0180CC81E0809316081092150886E00C -:106340000E94071721E0892B09F020E02093F90231 -:1063500020EF30E042E150E064EA71E08CE390E04D -:106360000E94971B1A8A91E09093170800910403EA -:106370001091050315950795B801012E000C880BA7 -:10638000990B0E94C3386093BD077093BE0780933A -:10639000BF079093C00710931F0300931E030E9432 -:1063A000461501E020E440E870E060E090E080E025 -:1063B0000E94D7136E857F85888999890E94C63A85 -:1063C0006B8F7C8F8D8F9E8F20E030E040E450E417 -:1063D0000E9422391B012C01AC019B0160E070E09E -:1063E00080EC91E40E94593A0E943D3B6B8B7C8B80 -:1063F0008D8B9E8BEB89FC89FA87E9876E857F857B -:10640000888999890E94073C6B017C0120E030E07B -:1064100040E450E40E9422394B015C01AC019B0135 -:1064200060E070E080EC91E40E94593A0E943D3BAC -:106430006F8B788F898F9A8F6F88788C20E030E00F -:1064400040EC51E4C201B1010E945A3A0E943D3B26 -:106450006E877F87888B998B2E843F8420E030E085 -:1064600040EC51E4C501B4010E945A3A0E943D3B00 -:106470004B012B0120E030E040EC51E4C701B601B4 -:106480000E9422399B01AC0160E070E080EC91E455 -:106490000E94593A0E943D3B6B018B0120E030E0A5 -:1064A00040EC51E46B8D7C8D8D8D9E8D0E94223948 -:1064B00020E030E040EC51E40E945A3A0E943D3B1B -:1064C000AB012C143D040CF084C529853A852C15AC -:1064D0003D050CF496C5302F212F8101232E322E3D -:1064E000342F252FA201432E522E89859A8580179D -:1064F000910709F089C0441655062CF4342F252F36 -:10650000A201432E522E641675062CF04614570431 -:106510000CF423013A010034110540F441E0440D2C -:10652000461920E0B801C3010E94A01886E10E942C -:10653000A21483E10E94A21483E00E94A214E7E364 -:10654000F0E0F0931208E093110821E030E030937E -:1065500014082093130832E03093170880E593E283 -:106560000E94191A8091F602882309F405C18EE46D -:1065700093E20E94191A20E030E040E752E4609173 -:10658000BD077091BE078091BF079091C0070E9420 -:10659000593A20E030E044EB53E40E94CB3A2BED33 -:1065A0003FE049EC50E40E9422392BED3FE049ECFA -:1065B0005FE30E94593A6E877F87888B998B809121 -:1065C0001E0390911F030E94EB1F0E94EC2000E02D -:1065D00024E04A8970E060E090E080E00E94D713F8 -:1065E0000E9476180E94F61A86E00E940717892BEF -:1065F00009F0E8C08091F9028111E4C04A89485F3E -:106600004A8B47FFB0CE16CB362D272D3A01432FAC -:10661000522F39852A851A870987032F122F920155 -:10662000261937093C8F2B8FC101E985FA858E1B0E -:106630009F0B9BA38AA34A018618970898012E1BDB -:106640003F0B3F872E87CA01841995099C8B8B8B42 -:10665000F801E219F309FDA3ECA30215130509F4EF -:1066600041C0910121503109388F2F8BE984FA8480 -:10667000B12CA12CD12CC12C4F89588D4E155F0502 -:10668000A4F1C6016AA17BA10E946D3D9B01260D6C -:10669000371DC5016E857F850E946D3DCB01860D3E -:1066A000971DEB8DFC8DCE0EDF1EA80CB91C82173A -:1066B00093071CF0582FC901252FF0E4EF16F104C1 -:1066C00038F441E0420F481B20E0B7010E94A018B7 -:1066D0002FEFE21AF20AD0CF2B01A4010E851F85FD -:1066E00016019DCF188F0F8BC1CFC7018219930957 -:1066F0004B895C89849F6001859FD00C949FD00C4E -:106700001124C701E985FA858E1B9F0B889D5001D6 -:10671000899DB00C989DB00C11240E151F050CF42A -:1067200005CFC6016CA17DA10E946D3D9B01240D8A -:10673000351DC5016E857F850E946D3DCB01860D9F -:10674000971D4B895C89C40ED51EA80CB91C8217F5 -:1067500093071CF0582FC901252F50E4E516F104CA -:1067600038F441E0420F481B20E0B7010E94A01816 -:106770008FEFE81AF80AD1CF8CE493E20E94191A3D -:106780006091BD077091BE078091BF079091C007CF -:10679000905820E030E040E752E40E94593A20E06F -:1067A00030E044EB53E40E94CB3A2BED3FE049EC60 -:1067B00050E40E94223922E93AE046E05FE30E9479 -:1067C0005A3AF9CE8A8982508E3308F0CBCD809127 -:1067D000F60251E085278093F602BACD2091160388 -:1067E00030E041E050E06AEF70E090E080E00E942D -:1067F000971B87E00E944826809316030E94B61BD1 -:1068000019CA8091F7029091F8020E94BD279093D7 -:10681000F8028093F702F2CF88E08093FA02809129 -:1068200019030E94DF278093190304CA0E944615AA -:10683000EE24E39400E320E346E553E270E060E0F9 -:1068400088E290E00E94F9130E94761864E670E0F6 -:1068500080E090E00E941C1886E00E940717892BB8 -:10686000D9F78091F9028111F7CFC8CF80911B032E -:1068700091E0892780931B03882351F00E944E18D2 -:106880006093FB027093FC028093FD029093FE02E2 -:1068900081E0809311032ACA90910D08291748F4CA -:1068A0008F5F891708F0D5CA81E083BF889513BE32 -:1068B000D0CA81E080930F0860930E088091090888 -:1068C00090910A08019690930A0880930908E09035 -:1068D0001E03F0901F0335EFE31631E0F30608F0D6 -:1068E0001CC180911D03882309F4F5C06FEF70E08F -:1068F00089E00E949A170E94461502E113E0B3E076 -:106900008B2E912CA12CB12C0E945D3822E030E01E -:1069100040E050E00E94F639AB01BC014150510902 -:1069200061097109F8018081682F640F613808F0EE -:1069300049C06083D12C0E945D384D2C512C712CA4 -:10694000612CA50194010E94F6396D5F7F4F8F4F36 -:106950009F4F4616570668067906B4F5F801E080A1 -:10696000F12C0E945D3824E130E040E050E00E94CC -:10697000F6396A507109810991096E0D7F1D6034E5 -:10698000710530F421E040E890E080E00E94A0181A -:10699000F801E080F12C0E945D3824E130E040E015 -:1069A00050E00E94F639DC01CB010A97A109B10938 -:1069B0008E0D9F1D21E040E470E060E00E94AE1368 -:1069C000D394B9CF6058B5CF0F5F1F4FF3E00631B6 -:1069D0001F0709F099CF0E944E180E94C13820E08D -:1069E00030E04AE755E40E94CB3A0E94073C6B0135 -:1069F0007C0120E030E040E853E40E94223920E0AE -:106A000030E040E853E40E945A3A2B013C0110E088 -:106A100000E0B801012E000C880B990B0E94C338CE -:106A2000A30192010E94BC3887FF25C00E945D38F7 -:106A30004B015C010E945D3869877A878B879C8750 -:106A4000C501B40120E430E040E050E00E94F63996 -:106A50004B0169857A858B859C8520E830E040E094 -:106A600050E00E94F639CB0141E0B4010E9490133E -:106A70000F5F1F4FCECF80914D01882349F10E94B7 -:106A80005D3820E130E040E050E00E94F639685087 -:106A90007109810991090E94C3384B015C0120E012 -:106AA00030E040E852E4C701B6010E94223920E0FC -:106AB00030E040E852E40E945A3A9B01AC01C50123 -:106AC000B4010E945A3A0E943D3B85E00E949A1709 -:106AD0000E947618BEC980911C0312E081111EC06D -:106AE00080911B0313E0811119C080917F0114E094 -:106AF000811114C020E030E044E353E46091C10709 -:106B00007091C2078091C3079091C4070E94BC385E -:106B100015E087FD03C016E001C010E080917E0102 -:106B2000882309F4A9C10E94461501E020E440E849 -:106B300070E060E090E080E00E94D71381E08093F5 -:106B400017088093160810921508E12C00E120E147 -:106B500041EE54E270E060E090E080E00E94F913C2 -:106B600083E190E0909312088093110884E090E014 -:106B7000909314088093130880911A0326E0829F53 -:106B8000C0011124825B9E4F0E946C1F85E390E040 -:106B9000909312088093110881E090E0909314087C -:106BA0008093130882E080931708C12ED12C809126 -:106BB0001903CC0CDD1C811107C1F601E457FD4F10 -:106BC000408151810EE02CE161E070E080E590E0D1 -:106BD0000E94F913F601E258FD4F40815181E12CEA -:106BE0000EE02EE061E070E081E790E00E94F91392 -:106BF00081E0809317080E94741A20E030E040EA98 -:106C000052E40E94BC3887FFFEC083E190E090937D -:106C100012088093110840E150E05093140840930B -:106C200013080E94741A41E00E94142088EF0E9409 -:106C3000141A89EB94E20E94191AE12C0EE02EE05E -:106C40004DE954E262E170E082E090E00E94F913C5 -:106C5000609117037091180390E080E00E94C138A2 -:106C60006B017C0120E030E048EC52E40E94CB3A1A -:106C70004B015C016091160370E090E080E00E949F -:106C8000C3389B01AC01C501B4010E94B23B181688 -:106C90000CF0CBC083E190E0909312088093110830 -:106CA00080E290E0909314088093130820E030E095 -:106CB0004AE754E4C701B6010E94CB3A41E00E9482 -:106CC00014208BE994E20E94191AE12C0EE02EE0C8 -:106CD0004FE754E262E270E082E090E00E94F91334 -:106CE00003E110E0109312080093110888E190E08E -:106CF00090931408809313080E94381ABC0190E006 -:106D000080E00E94C13820E030E04AE754E40E946D -:106D1000CB3A42E00E9414208DE794E20E94191AB7 -:106D2000109312080093110888E290E090931408E1 -:106D30008093130886E794E20E94191A80911E033B -:106D400090911F030E94EB1F0E94EC200E94761876 -:106D50000E94741A20E030E040EA52E40E94B23B04 -:106D600018160CF474C0609117037091180390E02A -:106D700080E00E94C13820E030E048EC52E40E94FC -:106D8000CB3A6B017C016091160370E090E080E0EB -:106D90000E94C3389B01AC01C701B6010E94BC38F8 -:106DA00087FF57C80E944E1842E0660F771F881F62 -:106DB000991F4A95D1F728EE33E040E050E00E9459 -:106DC000283A20FD55C045C881ED94E21330C1F04A -:106DD00058F48DED94E2113099F087ED94E2123081 -:106DE00079F08BEB94E20CC086EC94E2153041F024 -:106DF0008BEC94E2153020F081EC94E2163089F7A8 -:106E00000E94191AE7CE0E944E18F2E0660F771F13 -:106E1000881F991FFA95D1F728EE33E040E050E043 -:106E20000E94283A20FDF1CE13CF0E944E18E2E0D6 -:106E3000660F771F881F991FEA95D1F728EE33E078 -:106E400040E050E00E94283A20FD24CF49CF0E9424 -:106E50004E1852E0660F771F881F991F5A95D1F779 -:106E600028EE33E040E050E00E94283A20FF7BCF3C -:106E70000E94B61B0C94292F86E08093170810926D -:106E8000160881E0809315080E9446150E94741A26 -:106E900020E030E040EA52E40E94B23B181694F43D -:106EA0000E944E1832E0660F771F881F991F3A958F -:106EB000D1F728EE33E040E050E00E94283A20FD70 -:106EC0000E94B61B609117037091180390E080E058 -:106ED0000E94C13820E030E048EC52E40E94CB3AF6 -:106EE0004B015C016091160370E090E080E00E942D -:106EF000C3389B01AC01C501B4010E94BC3887FFB7 -:106F000012C00E944E1822E0660F771F881F991F3B -:106F10002A95D1F728EE33E040E050E00E94283A6D -:106F200020FD0E94B61B8CE090E0909312088093A5 -:106F3000110882E090E0909314088093130895EF75 -:106F4000E91691E0F90680F087EE93E00E94BD1FFC -:106F500001E020E140E860E370E090E080E00E9422 -:106F6000D7130E94EC20B4CDB70190E080E04AE056 -:106F70000E94791FEDCFC092EF07D092F007E09208 -:106F8000F107F092F207E091E507F091E6078081C2 -:106F90009181A281B3818093F3079093F407A0932A -:106FA000F507B093F60720E030E04FE753E4C70160 -:106FB000B6010E94B23B181614F00C94342E409285 -:106FC000EF075092F0076092F1077092F2070C946D -:106FD000A12DE985FA85E215F3050CF086CA4985ED -:106FE0005A854C155D050CF477CB34012B014F8984 -:106FF000588D16010B891C898E859F859A878987F4 -:107000006ACA29853A85221533050CF408CB340168 -:107010004F88588CEE85FF85FA87E9872B883C8856 -:10702000FECA8F929F92AF92BF92CF92DF92EF9261 -:10703000FF92CF93DF93EC01688179818A819B81F4 -:10704000611571058105910521F464E279ED8BE507 -:1070500097E02DE133EF41E050E00E94F63949011D -:107060005A019B01AC01A7EAB1E40E94153A6B01F9 -:107070007C01ACEEB4EFA50194010E94233AC60E48 -:10708000D71EE81EF91EF7FE06C081E0C81AD10817 -:10709000E10880E8F80AC882D982EA82FB82C70147 -:1070A000B6019F77DF91CF91FF90EF90DF90CF9067 -:1070B000BF90AF909F908F9008958F929F92AF92C4 -:1070C000BF92CF92DF92EF92FF9260918001709118 -:1070D0008101809182019091830161157105810583 -:1070E000910521F464E279ED8BE597E02DE133EF32 -:1070F00041E050E00E94F63949015A019B01AC0180 -:10710000A7EAB1E40E94153A6B017C01ACEEB4EF42 -:10711000A50194010E94233AC60ED71EE81EF91E4F -:10712000F7FE06C081E0C81AD108E10880E8F80A35 -:10713000C0928001D0928101E0928201F09283019D -:10714000C701B6019F77FF90EF90DF90CF90BF907F -:10715000AF909F908F90089560938001709381010C -:1071600080938201909383010895FB01DC010590D7 -:107170000D920020E1F708950E94FE3808F481E0A6 -:107180000895E89409C097FB3EF49095809570951A -:1071900061957F4F8F4F9F4F9923A9F0F92F96E963 -:1071A000BB279395F695879577956795B795F111D8 -:1071B000F8CFFAF4BB0F11F460FF1BC06F5F7F4F75 -:1071C0008F4F9F4F16C0882311F096E911C0772387 -:1071D00021F09EE8872F762F05C0662371F096E890 -:1071E000862F70E060E02AF09A95660F771F881F5F -:1071F000DAF7880F9695879597F90895990F000803 -:10720000550FAA0BE0E8FEEF16161706E807F90778 -:10721000C0F012161306E407F50798F0621B730B13 -:10722000840B950B39F40A2661F0232B242B252B94 -:1072300021F408950A2609F4A140A6958FEF811D37 -:10724000811D08950E9435390C94A6390E94983901 -:1072500038F00E949F3920F0952311F00C948F395B -:107260000C94953911240C94DA390E94B73970F3D3 -:10727000959FC1F3950F50E0551F629FF001729FDB -:10728000BB27F00DB11D639FAA27F00DB11DAA1FEA -:10729000649F6627B00DA11D661F829F2227B00D37 -:1072A000A11D621F739FB00DA11D621F839FA00DC2 -:1072B000611D221F749F3327A00D611D231F849F12 -:1072C000600D211D822F762F6A2F11249F57504069 -:1072D0009AF0F1F088234AF0EE0FFF1FBB1F661FE4 -:1072E000771F881F91505040A9F79E3F510580F0AD -:1072F0000C948F390C94DA395F3FE4F3983ED4F361 -:10730000869577956795B795F795E7959F5FC1F750 -:10731000FE2B880F911D9695879597F9089597F9FB -:107320009F6780E870E060E008959FEF80EC08952B -:1073300000240A9416161706180609060895002454 -:107340000A9412161306140605060895092E0394CE -:10735000000C11F4882352F0BB0F40F4BF2B11F442 -:1073600060FF04C06F5F7F4F8F4F9F4F089557FDA1 -:107370009058440F551F59F05F3F71F04795880FA3 -:1073800097FB991F61F09F3F79F08795089512163A -:1073900013061406551FF2CF4695F1DF08C01616E6 -:1073A00017061806991FF1CF869571056105089497 -:1073B0000895E894BB2766277727CB0197F90895AE -:1073C000F999FECF92BD81BDF89A992780B50895AD -:1073D000262FF999FECF1FBA92BD81BD20BD0FB6F1 -:1073E000F894FA9AF99A0FBE01960895052E97FB24 -:1073F0001EF400940E940D3A57FD07D00E94283ACF -:1074000007FC03D04EF40C940D3A509540953095FE -:1074100021953F4F4F4F5F4F089590958095709500 -:1074200061957F4F8F4F9F4F08950E944A3AA59FC5 -:10743000900DB49F900DA49F800D911D112408956F -:10744000B7FF0C94153A0E94153A821B930B0895CE -:10745000A1E21A2EAA1BBB1BFD010DC0AA1FBB1F58 -:10746000EE1FFF1FA217B307E407F50720F0A21BCA -:10747000B30BE40BF50B661F771F881F991F1A9437 -:1074800069F760957095809590959B01AC01BD0161 -:10749000CF010895A29FB001B39FC001A39F700DBB -:1074A000811D1124911DB29F700D811D1124911D0C -:1074B00008955058BB27AA270E94713A0C94A63908 -:1074C0000E94983938F00E949F3920F039F49F3F8C -:1074D00019F426F40C9495390EF4E095E7FB0C941E -:1074E0008F39E92F0E94B73958F3BA17620773072B -:1074F0008407950720F079F4A6F50C94D9390EF499 -:10750000E0950B2EBA2FA02D0B01B90190010C01B3 -:10751000CA01A0011124FF27591B99F0593F50F4CB -:10752000503E68F11A16F040A22F232F342F442723 -:10753000585FF3CF469537952795A795F04053951B -:10754000C9F77EF41F16BA0B620B730B840BBAF0EB -:107550009150A1F0FF0FBB1F661F771F881FC2F756 -:107560000EC0BA0F621F731F841F48F4879577956A -:107570006795B795F7959E3F08F0B0CF9395880F24 -:1075800008F09927EE0F9795879508950E94753B0F -:10759000E3950C949E3B0E94DF3A0C94A6390E941E -:1075A0009F3958F00E94983940F029F45F3F29F044 -:1075B0000C948F3951110C94DA390C9495390E943E -:1075C000B73968F39923B1F3552391F3951B550B04 -:1075D000BB27AA2762177307840738F09F5F5F4FA6 -:1075E000220F331F441FAA1FA9F335D00E2E3AF0E5 -:1075F000E0E832D091505040E695001CCAF72BD0FD -:10760000FE2F29D0660F771F881FBB1F261737074D -:107610004807AB07B0E809F0BB0B802DBF01FF277F -:1076200093585F4F3AF09E3F510578F00C948F3994 -:107630000C94DA395F3FE4F3983ED4F3869577955E -:107640006795B795F7959F5FC9F7880F911D969538 -:10765000879597F90895E1E0660F771F881FBB1F94 -:10766000621773078407BA0720F0621B730B840B41 -:10767000BA0BEE1F88F7E09508950E94443B68948A -:10768000B1110C94DA3908950E94BF3988F09F57E0 -:1076900098F0B92F9927B751B0F0E1F0660F771F36 -:1076A000881F991F1AF0BA95C9F714C0B13091F02C -:1076B0000E94D939B1E008950C94D939672F782FF9 -:1076C0008827B85F39F0B93FCCF3869577956795F1 -:1076D000B395D9F73EF490958095709561957F4F5D -:1076E0008F4F9F4F08950C9495390E94BF39D8F35E -:1076F000E894E0E0BB279F57F0F02AED3FE049EC2B -:1077000006C0EE0FBB0F661F771F881F28F0B23A26 -:1077100062077307840728F0B25A620B730B840B5D -:10772000E3959A9572F7803830F49A95BB0F661FEF -:10773000771F881FD2F790480C94503CEF93E0FFDE -:1077400007C0A2EA2AED3FE049EC5FEB0E94713AE4 -:107750000E94A6390F90039401FC9058E8E6F0E0EF -:107760000C94833C0E94FE3808F48FEF0895FA01D0 -:10777000EE0FFF1F309621053105A1F1611571054E -:1077800061F48038BFE39B0749F168949038810524 -:1077900061F08038BFEF9B0741F099234AF5FF3F26 -:1077A000E1053105210519F1E8940894E795D9011F -:1077B000AA2329F4AB2FBE2FF85FD0F310C0FF5FD0 -:1077C00070F4A695E0F7F73950F019F0FF3A38F465 -:1077D0009F779F930DD00F9007FC9058089546F027 -:1077E0000C94953960E070E080E89FE308954FE7DE -:1077F0009F775F934F933F932F930E94E13C2F918C -:107800003F914F915F910E9422390C941C3C9F93B1 -:107810000E94753B0F9007FCEE5F0C949E3B0E940C -:10782000FE38880B990B089529F416F00C948F39C3 -:107830000C94D9390C9495390E94BF39A8F3963825 -:10784000A0F707F80F92E8942BE33AEA48EB5FE7DA -:107850000E9438390F920F920F924DB75EB70F9278 -:107860000E94293DE6E8F0E00E945C3C4F915F9168 -:10787000EF91FF91E595EE1FFF1F49F0FE57E0687D -:107880004427EE0F441FFA95E1F74195550B0E94EE -:10789000A33C0F9007FE0C94973C08959F3F31F056 -:1078A000915020F4879577956795B795880F911D2E -:1078B0009695879597F90895DF93CF931F930F932C -:1078C000FF92EF92DF927B018C01689406C0DA2E62 -:1078D000EF010E943539FE01E894A591259135917B -:1078E00045915591A6F3EF010E94713AFE0197016F -:1078F000A801DA9469F7DF90EF90FF900F911F9144 -:10790000CF91DF9108959F938F937F936F93FF9310 -:10791000EF939B01AC010E942239EF91FF910E94ED -:107920005C3C2F913F914F915F910C9422399B01C8 -:10793000AC0160E070E080E89FE30C94CB3A0C94DB -:107940008F390C944E3C0E94BF39D8F39923C9F368 -:10795000940F511DA3F39150504094F059F0882397 -:1079600032F0660F771F881F91505040C1F79E3F3D -:1079700051052CF7880F911D9695879597F90895D5 -:107980005F3FACF0983E9CF0BB2786957795679556 -:10799000B79508F4B1609395C1F7BB0F58F711F490 -:1079A00060FFE8CF6F5F7F4F8F4F9F4FE3CF0C9407 -:1079B000DA3916F00C944E3C0C94953968940C947A -:1079C0008F390E94BF39A8F39923C1F3AEF3DF9337 -:1079D000CF931F930F93FF92C92FDD2788232AF09F -:1079E0002197660F771F881FDAF720E030E040E824 -:1079F0005FEB9FE3883920F0803E38F021968F7747 -:107A00000E945A3AEEEAF0E004C00E945A3AEBEDC6 -:107A1000F0E00E945C3C8B01BE01EC01FB2E6F5735 -:107A200071097595771F880B990B0E94C33828E15F -:107A300032E741E35FE30E943539AF2D9801AE0193 -:107A4000FF900F911F91CF91DF910E94713A0C949A -:107A5000A639FA01DC01AA0FBB1F9B01AC01BF577D -:107A600028F4222733274427507820C0B75190F4B8 -:107A7000AB2F0024469537952795011CA395D2F38B -:107A8000002071F0220F331F441FB395DAF30ED09C -:107A90000C94593A61307105A0E88A07B94630F470 -:107AA0009B01AC016627772788279078309621F0D4 -:107AB00020833183428353830895DB018F939F9307 -:107AC0000E94153ABF91AF91A29F800D911DA39F77 -:107AD000900DB29F900D1124089597FB072E16F478 -:107AE000009407D077FD09D00E94873D07FC05D0A0 -:107AF0003EF4909581959F4F0895709561957F4FC5 -:107B00000895EE0FFF1F0590F491E02D0994AA1B34 -:107B1000BB1B51E107C0AA1FBB1FA617B70710F078 -:107B2000A61BB70B881F991F5A95A9F780959095AA -:107B3000BC01CD01089581E090E0F8940C94A03D43 -:047B4000F894FFCFE7 -:107B440001FFD800340186011E000000000000007F -:107B54000000000000000000000000000000000021 -:107B64000000000000000000000000000000000011 -:107B74000000000000000000000000000000000001 -:107B84000000013C9600400101280F050101424319 -:107B9400312E35000000000000000000000000004D -:107BA40000000000000000000000000000000000D1 -:107BB40000000000000000000000000000000101BF -:107BC400010000000C060404020202020303340450 -:107BD4001804FC03E003C403A8038C0370035403D8 -:107BE40038031C030003E402C8023404AC0290020C -:107BF4007402340458023C027402580220023C020B -:107C040074020402E801CC01B0019401A8037801D4 -:107C140000035C0140012401C4030801740210053F -:107C24000B050605FF04F904F504EE04E504E2047B -:107C3400DF04DA04D604CD04C304BB04B804B504D9 -:107C4400B204AC04A904A404A1049E0499049404F9 -:107C540091048B04870483047E04790475047004FE -:107C64006C04680465046104580453045004491006 -:107C7400F90FA90F590F090FB90E690E190EC90D85 -:107C8400790D290DD90C4910890C390CE90B990B84 -:107C9400490BF90AA90A590A490BA90A090A590AF6 -:107CA400490BB90969091909C90879082908D907C3 -:107CB40089073907E90699064906F905490B291187 -:107CC4000D11ED107F24D110B510991095125D128D -:107CD4002512ED11B5117D1145110000000071163A -:107CE400D115FE15BE162F160D1621160000000024 -:107CF4001219D115351A341A6E616E00696E660058 -:087D04006F7666002F330000CA -:00000001FF diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t3/1.8t3.ino.with_bootloader.standard.hex b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t3/1.8t3.ino.with_bootloader.standard.hex deleted file mode 100644 index fcceaf6..0000000 --- a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t3/1.8t3.ino.with_bootloader.standard.hex +++ /dev/null @@ -1,2036 +0,0 @@ -:020000040000FA -:100000000C948A120C94B2120C94B2120C945529CE -:100010000C94B2120C94B2120C942D2A0C94B212BD -:100020000C94B2120C94B2120C94B2120C94B21240 -:100030000C94B2120C94B2120C94B2120C94B21230 -:100040000C940B290C94B2120C94D9280C94B3285C -:100050000C94B2120C942C2A0C94B2120C94B2127E -:100060000C94B2120C94B21205A84CCDB2D44EB975 -:100070003836A9020C50B9918688083CA6AAAA2A4B -:10008000BE000000803F07634236B79BD8A71A39ED -:10009000685618AEBAAB558C1D3CB7CC5763BD6DD6 -:1000A000EDFD753EF6177231BF000000803F08007D -:1000B0000000BE922449123EABAAAA2ABECDCCCCE7 -:1000C0004C3E00000080BEABAAAAAA3E0000000081 -:1000D000BF000000803F0000000000084178D3BB53 -:1000E0004387D1133D190E3CC3BD4282AD2B3E6800 -:1000F000EC8276BED98FE1A93E4C80EFFFBE01C4F1 -:10010000FF7F3F0000000000800400003FF0383017 -:1001100033103F90381033902790261030903FF0E6 -:1001200000008004800400003FF03DF020103BF010 -:100130003B7030302B502AD031B03FF000008004AB -:10014000800400003FF038703030231027902010DA -:100150002010279027903FF00000800480040000CA -:100160003FF03CF03CF020102490249020103CF014 -:100170003CF03FF000008004800400003FF037B006 -:1001800023103030387038703030231037B03FF0E3 -:1001900000008004FCF4F860E044C08CC11CC22C58 -:1001A000C44CC88CD10CA204C4048FFC187CBCFCC9 -:1001B0008000BFF81FF8B0281FF8B4081FF8B10876 -:1001C0001FF8B048BFF8B288BFF880008000BFF8C1 -:1001D0001FF8B0081808B9E819B8B8381838B9B80D -:1001E000B9F8B0F8BFF8800015543FF815503FF04B -:1001F0001550387010203104138C22A817FC2AA83F -:100200000000000015543FFC15543FFC15543C04FD -:1002100014043CFC14543CFC005400A800000000F2 -:10022000800400003FF03CF034B0249024902790EC -:100230002310303038703FF000008004FF7CFE7CDB -:10024000FCECE8DCC84C984C882408200000000036 -:10025000000000008004E01CF3FCE7FCCE0C8E1CC8 -:100260009F9C1F3C1F0C0E0C0FFC87F881E4C00CF8 -:10027000E01CF87C000458085808580840087FF82B -:1002800060185FE85B685FE85B681CE85FE8000097 -:10029000800400003FF03CF03CF03CF020102010C7 -:1002A0003CF03CF03CF03FF000008004F87CF7BCF0 -:1002B00000007FF80000BFF4AB54AB54AB54AB5418 -:1002C000AB54AB54BFF4C00CF03CCE0CBF04B30431 -:1002D00073007F007E007C007C007C60BC64BE04F8 -:1002E000CF0CF03C81DC559C29045500299055D059 -:1002F00003FCFF002E00267002508270E600EE0420 -:10030000800C001C3FF43FE03FC4378C2318303092 -:1003100038703CF03FF03FF000008004058074B876 -:1003200057A876B80580F97C4694AAA8F97C068877 -:1003300074A8578C75740698F03CCE4CBC34B81435 -:10034000188010804230607860F844C08004B8841F -:10035000CFCCF03CE01CC00C8FC49FE49FE49FE432 -:1003600000000300030003000780078003008004EF -:10037000F87CE01CC00CCFCCCFCCCFCCCFCCCFCC3A -:10038000CFCCCFCCC84CCFCCC00CE01CF87C8004C8 -:10039000BCF43FF03870B7B4B6B4B5B4B7B4387085 -:1003A0003FF0BCF48004F87CFCFCF87CE01CC00C42 -:1003B000C00CC00CC00CC00CC00C80048004FFFC3E -:1003C000F87CFCFC800400002000100008001000F5 -:1003D0002700000000000000000000000000800472 -:1003E000C3FC18001800C3FCFFFCFF0C0060006099 -:1003F000FF0CFFFCF0FC06000600F0FC8FC4102090 -:1004000020104CC89FE43DF03DF01DE03EF03F70F1 -:100410009FE48CC400003030F87CF33CF4BCF6BCA4 -:10042000F4BCF6BCF4BCE49CC84CD02CD02CC84C1A -:10043000E79CF03C88240820383038303830383099 -:100440003830383039303BB03FF03FF000008004A6 -:10045000F21415F0CADFB8CCF0D699E8AEA4DFEEFE -:10046000E8F21D1E08F21C08F21A1B08F071460182 -:10047000F046464A01F219F051F218F05A8DF0C0D8 -:10048000DAEEAEF0C8B8A5F1302924F0B599E1A4B0 -:10049000BDF21415F0CBEEAEBDF218F05A8DF21687 -:1004A00017F21415F0CBEEAEBDF21617F0BCCA9ED3 -:1004B000E0BDF21415F21213F21011F20C0DF094CB -:1004C000F20E0FF0A2D8DFCBE1EEACDCE8F20AF0DE -:1004D0008CF20BF04A8DF209F08DF097C59BBDF2BE -:1004E0000708F21F20F2040506F097DEEED5F0664D -:1004F0008081F22122F0CBABEEF0AEA4DFEEE8F08B -:10050000A8E8BDE2EEE0F0B499D3EEF200010203F8 -:10051000F0CCDFB0B8BD5361766500466C69700001 -:100520004D61696E2053637265656E004A500045E7 -:100530004E00434E00594553004E4F004F4E004F62 -:10054000464600496E666F73004269670050494431 -:1005500000446972656374005361766500426F6F91 -:100560007374004F666600536C6565700053617666 -:100570006500426F6F737400536C6565700044656D -:100580006661756C74005361766500416464004473 -:10059000656C6574650052656E616D650043616CE4 -:1005A000696272617465004368616E6765005265D7 -:1005B0007475726E0041626F7574004C616E6700F5 -:1005C0004C6F636B004C4F5720566F6C00526F742A -:1005D0006172790042757A7A65720053637265655B -:1005E0006E00436F6E74726F6C0054696D657200BB -:1005F00054656D70005469700000000000000F1D0C -:10060000C20800054442080003845FBF000FE444B1 -:1006100010000115451000054CC97F8009244F903A -:100620000007C4C11000054D413F0005544381003F -:1006300007C44D0200054441140005554108000758 -:10064000C881040000000000000000000000010854 -:100650003FFE001FFF810000004002000007FE0F68 -:10066000F8000402080800040208880007FE088851 -:10067000000402088800040208880007FE088800B9 -:100680000402094800040202300007FE040C0004C2 -:10069000021804000000000000000000000007FE37 -:1006A00013FE000402084000040208400004020196 -:1006B000FC000402388400040208840007FE0FFFD7 -:1006C000000402080000040209FE000402090200FE -:1006D00004020B020004020D020007FE09FE0004E2 -:1006E00002010200000000000000000000000110F4 -:1006F0000080001FFF80800001103FFF00004004C9 -:10070000080007FC0408000444041000044402101C -:100710000004440220001FFF812000004000C000B0 -:1007200000A00130000110020800060C0C070018A0 -:1007300003B00200000000000000000000000040C4 -:1007400000800000400080000FFF3FFF00084104D0 -:100750000800084104080008410410000841021084 -:10076000000FFF0220000841012000004000C000EF -:100770000040013000004002080000400C0700006B -:1007800040300200000000000000000000001FDFF9 -:1007900010200002120C20000224042000047F809C -:1007A00020000424B820000FA488500014BF8850F3 -:1007B0000004A488500004A488480004BF8888006E -:1007C00004A48A880007A48C8400044489070000DC -:1007D00081860200000000000000000000000FF011 -:1007E0000491000440025200047F90540004508899 -:1007F000FF0007D08481000451008100044901FFFB -:100800000007CA0281000444048100044A1CFF005E -:1008100007EA0481000C510481000061C4850000D6 -:10082000408082000000000000000000000007FF80 -:10083000802000008407FF0000840401000084047D -:10084000010000840401000FFFC7FF0000840400C2 -:10085000000084040000008405FF000084050100FE -:1008600001040901000104090100020411FF000450 -:1008700004010100000000000000000000000082F0 -:1008800004FF00004402010007FF90210000101047 -:100890002100001017FD0000101021000FFFD06193 -:1008A00000001010A10000281121000028122100D2 -:1008B0000044142100008210A1000301D045000C67 -:1008C000009002000000000000000000000008444A -:1008D00010FE00042810920005FF22920000103C38 -:1008E000920000100892001CFE109200041020FEDE -:1008F0000004103E920005FF809200041000920058 -:1009000005100E92000610309200041000FE000048 -:10091000100082000000000000000000000007DF5F -:100920008840000A24104000114210FE00040022FA -:10093000820002FF3D020008010A420009F910325C -:1009400000090920120009F93E020009090002000D -:1009500009090E020009F9302200080500140008F8 -:1009600002000800000000000000000000000FC3AB -:10097000F1E0000FE3F1F8000C70C19E000C30C1F3 -:1009800086000C30C183000C30C183000C60C18331 -:10099000000C60C183000FC0C183000FC0C186007E -:1009A0000C00C186000C00C198000C03F1F8000C8B -:1009B00003F1E00000000000000000000000002043 -:1009C0000820000FFF09FC00002008000000203E66 -:1009D000880003FE08500002020BFE0003FE0C40DC -:1009E00000020218400003FE2BFE0002020848002D -:1009F00003FE088800020208500002022830001F8F -:100A0000FF91CC0000000000000104047C0000887D -:100A10000444000FFF3F4400002004440000200C69 -:100A2000440000200E44001FFF95440000201444A1 -:100A30000000502444000050044400008804450095 -:100A4000010404850006038503001801040000006A -:100A50000000000000000000000000000000047E14 -:100A600021FC0004421104001F7E090400044221FD -:100A7000FC000542110400067E1104000C0005FC78 -:100A80000015FF880000040813FE000448325200DD -:100A9000044F125200044812520014A812520009C6 -:100AA0001F97FF000000000000000000000002107F -:100AB0003DFC000210250400041025040005FFBDC4 -:100AC000FC000C102520000C38252000143825FED1 -:100AD0000004543D20000454251000049225100009 -:100AE0000511A5090006113D4500041025830004E9 -:100AF00010010100000000000000000000001FC8FD -:100B0000102000124A0C20001AC9042000174800C7 -:100B100020001FFFB8200002080850001FC808501E -:100B200000020808500003C80848001E1408880086 -:100B300001540A880015220C840014438907000020 -:100B400081060200000000000002FE010000028297 -:100B50003FFF00048202000004FE0200000C1004AB -:100B6000FC00141004080005FF8C10000410141081 -:100B700000043825FF00043404100004520410005F -:100B8000049184100005100450000410042000009B -:100B90000000000000000000000000000000020350 -:100BA0000010001FDC3EFE00089002120005100439 -:100BB000FF001FDF84120002120CFE001FD2021081 -:100BC00000021222FE000A921410000A52141000B1 -:100BD00012220DFF0002220810000A421410000425 -:100BE0000223FF00000000000000000000000F785A -:100BF000BC20000948A45000094AA85000094AA88E -:100C00008800094AB104001FFEAAFB00094AA4207B -:100C100000094AA42000094AA7FE00094AB420009E -:100C20000948A924000B48A22200088AA4A20011A6 -:100C3000192040000000000000000000000000201B -:100C4000008000005001FC00008801040001040342 -:100C5000080006FB0490000800C0600007DF018068 -:100C600000045106000004511BFE00045102020062 -:100C700007D90202000456020200001003FE000021 -:100C80001002020000000000000000000000020846 -:100C9000209000027F9890001F8009FF000222012F -:100CA000100006218B100007628DFE000AA20910B9 -:100CB000000A14111000121431FE00020811100075 -:100CC00002141110000222111000024391FF0002D1 -:100CD000811100000000000000000000000010076B -:100CE00000000008F83FFE00048020020000802081 -:100CF000020000BE23E2001C8222220004A4222261 -:100D00000004942222000488222200049423E2009A -:100D1000052220020005422002000A003FFE0011C9 -:100D2000FFA00200000000000000000000000082A0 -:100D30000FFE00004400400007FF8040000010004C -:100D40004000001000400000101FFF800FFFC04057 -:100D50000000100040000028004000002800400073 -:100D6000004400400000820040000301C140000C2C -:100D700000808000000000000009FF004000042007 -:100D80003FFF00042000000000FE0000001C420F96 -:100D9000FC00044200000007FF80000004000FFC7C -:100DA0000004FF000000048100000005810FFC002A -:100DB000068108040004FF08040000810FFC000005 -:100DC00000000000000000000000000000000040E3 -:100DD0001F7E001FFF84020010808442000A4A0424 -:100DE00042000A3108420012C50F42000304197F75 -:100DF000001DF82901000040090100084209FD001A -:100E0000084209010008420F01000FFE0905000019 -:100E100002000200000000000000000000000100CD -:100E20000FFE00010008200003FF08200002010857 -:100E30002000042208200008200BFE0010200820BB -:100E400000005008280000500824000088082200F4 -:100E5000008810200001041020000203A7FF000CEE -:100E60000100000000000000000008000000021F58 -:100E700088FE001FD00E22000420302200045F8074 -:100E8000220007849E220004850822000494082280 -:100E900000049428FE0004971E42000494084200B7 -:100EA00008940842000AAC0A420011440C420000B7 -:100EB0008389FF00000000000000000000000040E7 -:100EC0000080001FFF9FFC0000400410000FFF0285 -:100ED000200000003FFF000FFE00000008420FF856 -:100EE0000008420808000FFE08080008020FF8007A -:100EF0000800080800080008080008000FF80010A3 -:100F0000000808000000000000000000000007FECC -:100F10000FF8000402000000040200000007FE00B9 -:100F2000000004023FFE00040200800007FE008073 -:100F300000009004900008910C8800069310860031 -:100F40000294208200009000800000900280001F28 -:100F5000FF810000000000000000000000000410FD -:100F600012020005FF9FD20005009212001E28A267 -:100F7000120004443FF20004820212000600021232 -:100F8000000CFE1FD2001410125200041012420076 -:100F90000410134200041012820015FF820A000898 -:100FA000000204000000000000000000000000201B -:100FB00000000000203E04001FFFA204001000A259 -:100FC000FF0000012204000FFE22040000403E4406 -:100FD0000000402224000440222400047C2204005B -:100FE00004402204000A403E04000940222400106C -:100FF000FF8014000000000800000000000010FE48 -:1010000008200008820BFF0004820A010010FE3C49 -:1010100051000882088800088209040002FE0C00C2 -:1010200000040019FC0009FF2820001929082000ED -:101030000929082000092908200009292BFF000B95 -:10104000FF900000000000000000000000001F7F73 -:1010500090F80001080888000A10088800047F0141 -:1010600007001FC13A0000054909FC000449088433 -:101070000004490888000449084800044908500051 -:1010800004490A200004160C58001421898700081E -:10109000C086020000000000001FE03FF0703860D2 -:1010A0001860186018FFFCFCFCFCFCFCFCF87CF8E9 -:1010B0007CFCFC7FF81E1033382D7C25382D38251C -:1010C000382D386D80DEC0BF40BF40DEC061803F3C -:1010D000007FF0FFE0C008C01CC038C870DCE4CF5F -:1010E000CCC78CC30CC00CC00CFFFC7FF800000602 -:1010F000000C0018F838F030307060707878F878AC -:10110000003C023F0C1FF80FF003C000007FF8FF07 -:10111000FCC00CC30CCB4CDB6CDB6CD86CDCECCFB8 -:10112000CCC78CC00CFFFC7FF8030007800FC00CFD -:10113000C01CE01CE03CF03CF07FF87FF8FCFCFCBD -:10114000FCFFFC7FF81140820021208FE023FC820D -:10115000004A23E200FE209FF013F880802220C086 -:10116000804221BFF0FBFA88800220848002208424 -:10117000801A208080E3FE8280020101000F421F5E -:10118000C0784110400840904008421FC0084110FC -:1011900040FFFD104008405FC00840800008413F0C -:1011A000E00843252010412520104125202041251D -:1011B0002040417FF07FF84880020049000201FF93 -:1011C000F00201001002027F202200410023F07F84 -:1011D00000220008002200FF802200888022008870 -:1011E0008022008A8022008900FFFC080023F21F71 -:1011F000C022111040FBF0904022121FC02A111093 -:101200004033F1104060005FC0AFFC800020413FE0 -:10121000E0224325202279252022412520A54125B1 -:101220002048FD7FF01083DFC010825040208250A4 -:10123000402FFFDFC06082520061C25200A1C25F36 -:10124000E022A3D20022A2510024925100288E5005 -:1012500090308BD45020825830208010101040479E -:10126000C017FC44402003F44023F844406208C403 -:1012700040A3F8E440200154402FFD444028064498 -:101280004023F844402040445020404850214050E2 -:10129000302080400020921FC03DF9904020909067 -:1012A0004040901FC07BFF0000A0013FE021F902F9 -:1012B00000FD09020021097FF021F90500210945FF -:1012C000002909888031F910702108202030303041 -:1012D0000075407755757740403E4A5E2B5E4A6BFD -:1012E000627F352F357F7C5B5E247B0E3A047E0166 -:1012F0007E4A5E69063A2F3F6B7E46403F41497FFA -:10130000494102626B6B6B62026A6B147D577D1000 -:10131000413F55553D5751213F2D7F2A122E0A77C7 -:101320005A505A770A2024137D5553707A2A7B022B -:101330001A437A4A525E2B5E424A415F353F555FFF -:10134000417D14577D0E407F7F1B54167D165449F6 -:101350003A407E575676423F427E7E427E047E5120 -:10136000377D3750127A1752761E127F557F145DE3 -:101370007F557F557F7F553D577F55377817457F80 -:101380007F2B7B287B2B7F1E12127F12121E7F4128 -:101390006B7F6B517F525A573A575A52007F4949D7 -:1013A00049497F22122A7F2A1222166A5E735662E8 -:1013B000160937315F155F7542221E0B4A7A027E8D -:1013C000023A2B3A427E00000000002F0003000387 -:1013D0003F123F163F1A120824323D2A0201000034 -:1013E0003E41413E000A070A083E08402000080826 -:1013F000080020001008041C2A1C243E20322A2445 -:10140000222A1418143E2E2A121C2A12023A0614FA -:101410002A14242A1C002400402400081422141436 -:101420001422140802290612291E3E093E3F251ADD -:101430001E21213F211E3F25213F05011E21393F4D -:10144000083F213F2110201F3F043B3F20203F0643 -:101450003F3F013E1E211E3F09061E215E3F093609 -:10146000222519013F013F203F3F100F3F183F3316 -:101470000C33033C03312D23007F41153E15417F82 -:101480000002010240404000010218243C3F2418A1 -:1014900018242418243F182C2C043F0548543C3FA2 -:1014A0000438003D00403D003F0834013F003C1C33 -:1014B000383C04381824187C241818247C3C080470 -:1014C000283C14043E243C203C3C100C3C303C2482 -:1014D00018244C503C24342C083641007F004136FF -:1014E000080101011028101F010120203E102000DA -:1014F00000080025150F241C0C103804180C38287F -:10150000382828183C083C18283820242C3C2C2C3F -:101510001C040808211D07083C0306231E223E2246 -:10152000120A3F320F3E0A3F0A24130E271E0222E0 -:10153000223E27120F2525102119273F222E211682 -:101540000F241B0E251F0526261E251D053F0408FA -:10155000241F04202222251927123B1620100F3C9D -:10156000013E1F242421110F0C031C1A3F1A0919D4 -:1015700027222A2A382730320C13053F25023F0E36 -:10158000213F2025253F25251D07201F3C3F203FCB -:1015900020103E223E23110F2121180100010205D7 -:1015A00002000000000000000020400000000000D9 -:1015B000002050200000000000503000000000001B -:1015C000006060000000000000000018180000002B -:1015D0000000003636000000000000563600000013 -:1015E0000000020151090906000000005F00000030 -:1015F00000000000007F41410041417F00000000E9 -:10160000000000003F010101004040407E0000005A -:101610000000003F213D05070070505E427E000043 -:1016200000000000007F63410041637F0000000074 -:10163000000808087F0808080008080808080808C3 -:10164000004444445F4444440041221408142241AD -:10165000000808082A0808080014141414141414A4 -:10166000001434141C141614000808141414222234 -:101670000022221414140808000205023C424224ED -:1016800000002B2C782C2B000000242A7A2F2A1201 -:1016900000001C62322E23140020545E254142209B -:1016A00000422512082452210020623E633E23029C -:1016B0000020564955225840000022147F14220071 -:1016C000001C2259554D120C0000004A55552900A6 -:1016D0000004643C173C64040004643C1F3C640444 -:1016E000001C22414141221C001C3E7F7F7F3E1C8A -:1016F000001C225D555D221C0008142241221408A2 -:1017000000081C3E7F3E1C08007F41414141417F53 -:10171000007F7F7F7F7F7F7F0040704C434C704015 -:101720000040707C7F7C704000010719611907013F -:101730000001071F7F1F0701004922144914224995 -:10174000000505057D05050500080808082A1C0890 -:1017500000081C2A08080808000004027F02040090 -:10176000000010207F20100000003E414141413E1A -:10177000000000427F40000000006251514949468C -:1017800000002241494949360000302824227F20A8 -:1017900000002F454545453900003E494949493239 -:1017A0000000010161190503000036494949493625 -:1017B000000026494949493E000020547E34146007 -:1017C0000020527F2A1A4A3000003C4020041800B2 -:1017D000001E2040200204180000104A4A2A10006F -:1017E00000000845454525180000482A3A4A4000AF -:1017F00000004425153D45400000247E145024007F -:101800000022527F0A484A340044344F44380418B6 -:101810000044344F4439041900002A5A4B4E5A08E8 -:1018200000002A5A4B4E5B080000081414224100A5 -:101830000000081414224504003F0004443F04043F -:10184000003F0004443F0405000020524242424051 -:1018500000002052424342410000245444475C04AB -:101860000000245444475C050000003F40404020F5 -:101870000000003F404140210002020A563F0202A0 -:101880000002020A563F02030004043F44545F442E -:101890000004043F44545F45000008093D4B4908DB -:1018A000000008093D4B490A00423A0722544444CB -:1018B00000423A0722554445000002124E4B4A327C -:1018C000000002124E4B4A3300001010484830000E -:1018D000000404022222221C000404022223221DEE -:1018E000000002021A254341000002021A25434566 -:1018F00000002057484844440000205748494445C8 -:1019000000120A2752503A24007F002052424240DF -:1019100000304E38540F64780024147F0422523C67 -:10192000001824124E422418007F002454543F44CF -:10193000007F002454543F45007F002454563D4608 -:1019400000023A4740413E0400023A4740413E050A -:1019500000023A4740433D06004030404D3210609F -:10196000004030404D321161004030404D32156230 -:1019700000080402040810100008040204091011F1 -:1019800000080402040A1512007F006A6A7E2A4ACF -:10199000007F006A6A7F2A4B007F006A6A7E2D4AB8 -:1019A00000006A6A6A7F2A4A0030291D4B483C10B1 -:1019B00000122A7F4240422400304E38540F4438EF -:1019C00000000A3E4B4A4A300000080E3846140810 -:1019D0000004071C62030A0400001C483E2418008F -:1019E000001E04523F12120C00002050503E4800CE -:1019F00000002050503F244400001C51494A483008 -:101A000000000F4241211E00000010696D4B49305B -:101A10000024147F04023E40000010494D4B493021 -:101A2000000028187E0844380024147F0442423CF9 -:101A3000003049251F2454380040282557352840B8 -:101A400000100A2E5B724A480040300C33404020A0 -:101A5000000004443C140C00000001413D09050352 -:101A6000000020201078040000001010087C020103 -:101A7000000018484C281800000006424322120EAD -:101A80000000404878484000002022223E222220C8 -:101A900000002828587C0800002222124A7F0202F7 -:101AA000000042221F02427E000042221F02427FAB -:101AB000000012121F721210000012121F72131077 -:101AC000000008444322120E000008444322120F73 -:101AD00000080742221E020200080742221F0203DA -:101AE000000042424242427E000042424243427F64 -:101AF0000002024F42221F020002024F42231E0335 -:101B00000000454A4020100C0000454A4021100DBD -:101B100000404222221A264000404222221B264137 -:101B20000004043F4444544C0004043F4445544DD5 -:101B3000000001464020100F000001464020110F18 -:101B4000000008444B2A120E000008444B2A120FD2 -:101B500000080A4A3E09090800080A4A3E0908091D -:101B6000000018405820180000020C424C20100EB3 -:101B700000020C424C21100D000405453D050504F2 -:101B8000000405453D0504050000007F080810001D -:101B90000000007F08091001000444241F0404040D -:101BA0000020222222222220004041251519270050 -:101BB000002022127B06122000404020100807005F -:101BC0000040300E00020C700040300E00020D711B -:101BD0000040300E00020D7200003F484848444467 -:101BE00000003F484849444500003F48484A4546B0 -:101BF000000002424222120E000002424223120F53 -:101C0000000002424222150E0008040204081020BF -:101C1000000804020409102100080402040A152225 -:101C2000002414447F041424002414447F05142544 -:101C3000002414447F0615220002021222520A06D2 -:101C400000002125294A42000040704C43502040AA -:101C50000040442414083700000008093F4949485F -:101C60000000101C680818000004040F74020A0623 -:101C7000000040484878400000202222223E2020D8 -:101C80000000004454547C000000424A4A4A4A7E04 -:101C9000000004454525150C00000F4040201F00A2 -:101CA0000040201E007F20100000007F4020100810 -:101CB00000007E424242427E00000C4444241C004C -:101CC000000006424222120E0010121E12127F1253 -:101CD000002022223A262220000001454525150F2A -:101CE000000041424020100C000006424322120F27 -:101CF000000048281C4878000000100C48380800F4 -:101D0000000804040810100800080000080000087B -:101D10000004080808080808000808080808080857 -:101D200008060505070604070903030504090A0850 -:101D30000303030603050303050503060404050561 -:101D4000040504040304090503F505F005EA05E2AA -:101D500005DB05D405CD05C505C005BB05B505AE3C -:101D600005A7059D0596058F058B0586057E0578DB -:101D70000572056D05670563055D05580551054D3F -:101D800005490543053F053C053905350532052F55 -:101D9000052C0520051B0516053E0053656C656383 -:101DA00074205469700000000000003E5B4F5B3EF1 -:101DB0003E6B4F6B3E1C3E7C3E1C183C7E3C181C10 -:101DC000577D571C1C5E7F5E1C00183C1800FFE707 -:101DD000C3E7FF0018241800FFE7DBE7FF30483AAD -:101DE000060E2629792926407F050507407F05250F -:101DF0003F5A3CE73C5A7F3E1C1C08081C1C3E7F97 -:101E000014227F22145F5F005F5F06097F017F005D -:101E10006689956A606060606094A2FFA29408047D -:101E20007E040810207E201008082A1C08081C2A9E -:101E300008081E101010100C1E0C1E0C30383E38F6 -:101E400030060E3E0E06000000000000005F00009D -:101E50000007000700147F147F14242A7F2A12230E -:101E60001308646236495620500008070300001C1E -:101E70002241000041221C002A1C7F1C2A08083E27 -:101E8000080800807030000808080808000060603A -:101E90000020100804023E5149453E00427F4000A8 -:101EA00072494949462141494D331814127F102780 -:101EB000454545393C4A49493141211109073649CF -:101EC000494936464949291E0000140000004034A3 -:101ED00000000008142241141414141400412214A8 -:101EE0000802015909063E415D594E7C1211127CCF -:101EF0007F494949363E414141227F4141413E7F30 -:101F0000494949417F090909013E414151737F080F -:101F100008087F00417F41002040413F017F0814B5 -:101F200022417F404040407F021C027F7F04081016 -:101F30007F3E4141413E7F090909063E4151215EF4 -:101F40007F09192946264949493203017F01033F88 -:101F50004040403F1F2040201F3F4038403F631417 -:101F600008146303047804036159494D43007F4119 -:101F700041410204081020004141417F0402010256 -:101F8000044040404040000307080020545478407B -:101F90007F284444383844444428384444287F380F -:101FA0005454541800087E090218A4A49C787F0891 -:101FB00004047800447D40002040403D007F10280C -:101FC000440000417F40007C047804787C080404CD -:101FD000783844444438FC1824241818242418FC65 -:101FE0007C08040408485454542404043F44243C0A -:101FF0004040207C1C2040201C3C4030403C442879 -:102000001028444C9090907C4464544C4400083612 -:102010004100000077000000413608000201020480 -:10202000023C2623263C1EA1A161123A4040207AA0 -:1020300038545455592155557941215454784121EA -:102040005554784020545579400C1E52721239551F -:10205000555559395454545939555454580000451C -:102060007C410002457D420001457C40F029242945 -:10207000F0F0282528F07C545545002054547C5419 -:102080007C0A097F4932494949323248484832324C -:102090004A4848303A4141217A3A42402078009DEE -:1020A000A0A07D39444444393D4040403D3C24FF9C -:1020B0002424487E4943662B2FFC2F2BFF0929F649 -:1020C00020C0887E090320545479410000447D419A -:1020D0003048484A32384040227A007A0A0A727DF3 -:1020E0000D19317D2629292F28262929292630480E -:1020F0004D4020380808080808080808382F10C87C -:10210000ACBA2F102834FA00007B000008142A14FF -:102110002222142A14089500220095AA005500AA2C -:10212000AA55AA55AA000000FF00101010FF0014C5 -:102130001414FF001010FF00FF1010F010F0141422 -:1021400014FC001414F700FF0000FF00FF1414F447 -:1021500004FC141417101F10101F101F1414141F48 -:1021600000101010F0000000001F101010101F10C1 -:10217000101010F010000000FF10101010101010C0 -:102180001010FF10000000FF140000FF00FF00000F -:102190001F10170000FC04F414141710171414F483 -:1021A00004F40000FF00F714141414141414F700BE -:1021B000F7141414171410101F101F141414F4140F -:1021C0001010F010F000001F101F0000001F14007E -:1021D0000000FC140000F010F01010FF10FF1414A9 -:1021E00014FF141010101F00000000F010FFFFFF7C -:1021F000FFFFF0F0F0F0F0FFFFFF0000000000FF35 -:10220000FF0F0F0F0F0F38444438447C2A2A3E1426 -:102210007E02020606027E027E0263554941633851 -:1022200044443C04407E201E2006027E020299A502 -:10223000E7A5991C2A492A1C4C7201724C304A4D60 -:102240004D303048784830BC625A463D3E49494995 -:10225000007E0101017E2A2A2A2A2A44445F44443E -:1022600040514A444040444A51400000FF0103E0CD -:1022700080FF000008086B6B083612362436060F04 -:10228000090F06000018180000001010003040FF71 -:102290000101001F01011E00191D1712003C3C3CEA -:1022A0003C000000000000000000240027002A007D -:1022B00000000000250028002B0000000000230083 -:1022C0002600290004040404040404040202020297 -:1022D00002020303030303030102040810204080E9 -:1022E0000102040810200102040810200000000868 -:1022F00000020100000304070000000000000000CD -:10230000AED5F0A83FD300408D14A1C8DA1281CF1A -:10231000D9F1DB40A4A6AF200021007F22000750A6 -:102320006C656173652077616974004144433A20AC -:102330000074656D703A2000536574206D6561739B -:102340007572656400537465703A20002B002D008F -:102350004D4F44452000FFFFFFFFFFFF80038670C5 -:1023600080038003867080039FF3E1309FF39FF327 -:10237000E1309FF3983301CC9833983301CC9833F4 -:10238000983387C098339833E1C098339833E1C0CD -:1023900098339FF398C09FF39FF398C09FF38003F7 -:1023A00066CC8003800366CC8003FFFF010CFFFF37 -:1023B000FFFF01001FFF810061301F3F873CE6FCEB -:1023C0008733873CE6FC87F3F8039E0F1F03F8036F -:1023D0009E0F1F03E13CFE0C07CFE13CFE0C07CF34 -:1023E00099033E3086C3E6CF380F9EF3E6CF380F11 -:1023F0009EF39E0327CC81039E0327CC8103E0FF3D -:10240000E10CE6CFE0FFE10CE6CF9803060000FF09 -:102410009803060000FFFFFF1EF0F80380036630FC -:1024200099C38003663099C39FF3010CF8FF9FF3B3 -:10243000010CF8FF9833393C01CF9833393C01CF78 -:102440009833FF0C793F98333ECCE0F398333ECC81 -:10245000E0F39FF33E0098CF9FF33E0098CF8003B8 -:102460003E30E7C380033E30E7C3FFFFFFFFFFFFBF -:10247000FFFFFFFFFFFF76312E3874330056000F49 -:10248000E01FC01FC03F803FF87FF07FE007C0071C -:10249000800F000E001C0018001000560014A03F12 -:1024A000F07FF8E01C6E18EC1C68186018E01C60E7 -:1024B00058E01C7FF83FF014A043004552524F52A1 -:1024C00000484F4C44004845415400574F524B5927 -:1024D00000424F4F535400534C454550004F464621 -:1024E0000000003BEC7BEE63E663E663E663E663D5 -:1024F000E663E663666226600660067FFE3FFC00D8 -:102500000025004300202070F8010204081020403C -:102510008000422A11241FBECFEFD8E0DEBFCDBF1E -:1025200012E0A0E0B1E0E4E4FBE702C005900D9208 -:10253000A83CB107D9F728E0A8ECB2E001C01D9291 -:10254000A931B207E1F712E1CAE8D2E104C021974C -:10255000FE010E94813DC938D107C9F70E94F72AC0 -:102560000C94A03D0C9400004F925F926F927F926A -:102570008F929F92AF92BF92CF92DF92EF92FF9293 -:102580000F931F93CF93DF9300D000D0CDB7DEB76A -:102590004B015C0129013A016701780120E030E03C -:1025A000A9010E94BC3887FDA6C020E030E0A90147 -:1025B000C301B2010E94BC3887FD9DC020E030E01D -:1025C000A901C801B6010E94BC3887FD94C081E012 -:1025D0002091E3073091E4072130310509F080E0D4 -:1025E000809304088092C9079092CA07A092CB07F3 -:1025F000B092CC074092CD075092CE076092CF07A1 -:102600007092D007C092D107D092D207E092D30740 -:10261000F092D4076091F7077091F8078091F9075D -:102620009091FA070E94C13820E030E04AE754E474 -:102630000E94CB3A69837A838B839C838092D507EF -:102640009092D607A092D707B092D8079B01AC0111 -:10265000C301B2010E9422392B013C014092D907EB -:102660005092DA076092DB077092DC0729813A8189 -:102670004B815C81C701B6010E94CB3A6B017C01A2 -:10268000C092DD07D092DE07E092DF07F092E0070C -:102690008091E1079091E207019769F5A501940106 -:1026A00060E070E0CB010E94593A6093D5077093C7 -:1026B000D6078093D7079093D807A301920160E0D3 -:1026C00070E0CB010E94593A6093D9077093DA0702 -:1026D0008093DB079093DC07A701960160E070E030 -:1026E000CB010E94593A6093DD077093DE07809317 -:1026F000DF079093E0070F900F900F900F90DF91FE -:10270000CF911F910F91FF90EF90DF90CF90BF90EE -:10271000AF909F908F907F906F905F904F900895B3 -:1027200080389105B0F46034710598F4E9E0F5E281 -:1027300090E1969FD001A0781124A80F6770E60F52 -:10274000F11D9491A05EBC4F442321F08C91982BF5 -:102750009C93089590958C919823FACFDF92EF92F5 -:10276000FF920F931F93CF93DF937C01D22E8B01A7 -:10277000040F111DEB0177FF02C0D0E0C0E0C801DB -:102780000134110514F080E490E0C817D9073CF437 -:102790004D2DBE01C7010E9490132196F0CFDF910D -:1027A000CF911F910F91FF90EF90DF900895CF92FE -:1027B000DF92EF92FF920F931F93CF93DF936B0102 -:1027C000122FEC017C01E40EF11CCE15DF0544F460 -:1027D000202F412FB601CE010E94AE132196F5CFD6 -:1027E000DF91CF911F910F91FF90EF90DF90CF90ED -:1027F00008952F923F924F925F926F927F928F92A5 -:102800009F92AF92BF92CF92DF92EF92FF920F937F -:102810001F93CF93DF9300D01F92CDB7DEB7C22EA8 -:10282000D12C9601280F391F37FD4FC080389105F4 -:102830000CF04BC0E9824A017B013C01402E512C37 -:10284000160127E0220E311C93E0359427949A95C7 -:10285000E1F78B01B12CA12C1B821A82EA81FB814A -:1028600083E0F595E7958A95E1F7EA0DFB1DE80D04 -:10287000F91DE4918A819B818770992720E830E0D7 -:1028800002C0359527958A95E2F7C901F0E0E22369 -:10289000F923EF2B41F04981B8018A819B81860D94 -:1028A000971D0E9490138A819B8101969B838A8346 -:1028B0008C159D059CF2A20CB31C0F5F1F4FC80125 -:1028C0008E199F09841595053CF20F900F900F907B -:1028D000DF91CF911F910F91FF90EF90DF90CF90FC -:1028E000BF90AF909F908F907F906F905F904F9030 -:1028F0003F902F9008950F931F93CF93DF93EC0198 -:102900008B0140E001960E94901340E0B801CE0197 -:1029100001970E949013B8016F5F7F4F40E0CE0196 -:102920000E949013B8016150710940E0CE010E94ED -:10293000901340E0B801CE01DF91CF911F910F912C -:102940000C9490132F923F924F925F926F927F92CE -:102950008F929F92AF92BF92CF92DF92EF92FF92AF -:102960000F931F93CF93DF93C82FD0E081E090E0C7 -:102970004C018C1A9D0A442455244C1A5D0A440CBF -:10298000551C7E0188E1E80EF11C40E0B70188E1AA -:1029900090E00E94901308E110E00C1B1D0B40E03A -:1029A000B80188E190E00E94901340E068E170E097 -:1029B000C7010E94901340E068E170E0C8010E94E6 -:1029C000901322242394312C712C612C97FC06C087 -:1029D000219782E0480E511C840C951C8FEF681AD9 -:1029E000780A82E0280E311C820C931C530188E186 -:1029F000A80EB11C40E07E0188E1E80EF11CB70191 -:102A0000C5010E94901388E1C82ED12CC618D708A2 -:102A100040E0B701C6010E94901340E008E110E0D9 -:102A20000C1B1D0BB801C5010E94901340E0B801BA -:102A3000C6010E94901340E0B501C7010E949013A7 -:102A400040E0B501C8010E94901340E0B601C70103 -:102A50000E94901340E0B601C8010E9490136C16CA -:102A60007D060CF4B3CFDF91CF911F910F91FF90B2 -:102A7000EF90DF90CF90BF90AF909F908F907F901E -:102A80006F905F904F903F902F90089580E0E0E22C -:102A9000F3E081118FEF00248193819381938193DF -:102AA0000394D1F7E5E0F8E01786168615861486BC -:102AB00008956F927F928F929F92AF92BF92CF9222 -:102AC000DF92EF92FF920F931F93CF93DF938038A3 -:102AD00091050CF057C0603471050CF053C07B01B8 -:102AE00037E0E322FF2433E0759567953A95E1F7E7 -:102AF000DB01B695BA2FAA27B795A7955D01C0E867 -:102B0000AC0EB11CA80EB91EA80FB91FA05EBC4F19 -:102B100000E810E0081B190B90E080E0E8E0F0E02E -:102B20004F018E189F0830E0FA01E80FF91FC49199 -:102B30007D906D01D1E0CD1AD1080E2C01C0CC0FD3 -:102B40000A94EAF77C2AE6017882E114F10499F00C -:102B50006730710581F0E491EC01CA0DDB1DC05EA8 -:102B6000DC4FF0E0082C02C0F595E7950A94E2F7F7 -:102B7000F881EF2BE8830196821793071CF408175E -:102B8000190791F6DF91CF911F910F91FF90EF9070 -:102B9000DF90CF90BF90AF909F908F907F906F907D -:102BA0000895AF92BF92CF92DF92EF92FF920F9370 -:102BB0001F93CF93DF936C017B018B01040F151FD3 -:102BC000EB015E01AE18BF08C017D10759F069913B -:102BD000D601ED91FC910190F081E02DC60109959F -:102BE000892B79F7C501DF91CF911F910F91FF904C -:102BF000EF90DF90CF90BF90AF900895FC01538D80 -:102C0000448D252F30E0842F90E0821B930B5417C6 -:102C100010F0CF96089501970895FC01918D828D53 -:102C2000981761F0A28DAE0FBF2FB11D5D968C91EC -:102C3000928D9F5F9F73928F90E008958FEF9FEF2B -:102C40000895FC01918D828D981731F0828DE80FE7 -:102C5000F11D858D90E008958FEF9FEF0895FC01A1 -:102C6000918D228D892F90E0805C9F4F821B91096E -:102C70008F739927089580E297E00E942F1621E034 -:102C8000892B09F420E0822F089580E090E0892BC1 -:102C900029F00E943B1681110C9400000895FC015C -:102CA000A48DA80FB92FB11DA35ABF4F2C91848DAD -:102CB00090E001968F739927848FA689B7892C930A -:102CC000A089B1898C91837080648C93938D848D5D -:102CD000981306C00288F389E02D80818F7D808360 -:102CE0000895EF92FF920F931F93CF93DF93EC0120 -:102CF00081E0888F9B8D8C8D98131AC0E889F989A3 -:102D0000808185FF15C09FB7F894EE89FF896083A5 -:102D1000E889F98980818370806480839FBF81E026 -:102D200090E0DF91CF911F910F91FF90EF90089568 -:102D3000F62E0B8D10E00F5F1F4F0F731127E02E43 -:102D40008C8D8E110CC00FB607FCFACFE889F9897B -:102D5000808185FFF5CFCE010E944F16F1CFEB8D1C -:102D6000EC0FFD2FF11DE35AFF4FF0829FB7F8944F -:102D70000B8FEA89FB8980818062CFCFCF93DF936D -:102D8000EC01888D8823B9F0AA89BB89E889F98983 -:102D90008C9185FD03C0808186FD0DC00FB607FCB8 -:102DA000F7CF8C9185FFF2CF808185FFEDCFCE01EB -:102DB0000E944F16E9CFDF91CF910895833081F0C3 -:102DC00028F4813099F08230A9F008958730A9F075 -:102DD0008830C9F08430B1F4809180008F7D03C0C9 -:102DE000809180008F7780938000089584B58F77DD -:102DF00084BD089584B58F7DFBCF8091B0008F771F -:102E00008093B00008958091B0008F7DF9CFCF936B -:102E1000DF93282F30E0F901E451FD4D8491F90151 -:102E2000E852FD4DD491F901EC53FD4DC491CC23F2 -:102E3000A1F081110E94DE16EC2FF0E0EE0FFF1FD3 -:102E4000E654FD4DA591B491EC91ED2381E090E025 -:102E500009F480E0DF91CF91089580E090E0FACF0F -:102E60001F93CF93DF93282F30E0F901E451FD4DFC -:102E70008491F901E852FD4DD491F901EC53FD4DD7 -:102E8000C491CC23A9F0162F81110E94DE16EC2FDD -:102E9000F0E0EE0FFF1FE055FD4DA591B4918FB707 -:102EA000F894EC91111108C0D095DE23DC938FBF0C -:102EB000DF91CF911F910895DE2BF8CFCF93DF9351 -:102EC00090E0FC01E852FD4D24918C539D4DFC0196 -:102ED00084918823C9F090E0880F991FFC01EA557E -:102EE000FD4DA591B491FC01E055FD4DC591D491E6 -:102EF00061110DC09FB7F8948C91209582238C931B -:102F00008881282328839FBFDF91CF910895623065 -:102F100051F49FB7F8943C91822F809583238C9332 -:102F2000E8812E2BEFCF8FB7F894EC912E2B2C93BA -:102F30008FBFEACF1F93CF93DF93182FEB0161E090 -:102F40000E945E17209739F460E0812FDF91CF91C6 -:102F50001F910C943017CF3FD10511F461E0F5CFEC -:102F6000E12FF0E0E451FD4DE491E33031F140F424 -:102F7000E130B1F0E230E1F0C038D1057CF7E4CFC8 -:102F8000E73029F1E83059F1E430B1F78091800061 -:102F9000806280938000D0938B00C0938A0004C02D -:102FA00084B5806884BDC7BDDF91CF911F9108951E -:102FB00084B5806284BDC8BDF7CF809180008068F1 -:102FC00080938000D0938900C0938800EDCF8091DA -:102FD000B00080688093B000C093B300E5CF8091CB -:102FE000B00080628093B000C093B400DDCF3FB7E3 -:102FF000F8948091E8029091E902A091EA02B091E0 -:10300000EB0226B5A89B05C02F3F19F00196A11D24 -:10301000B11D3FBFBA2FA92F982F8827BC01CD0122 -:10302000620F711D811D911D42E0660F771F881F81 -:10303000991F4A95D1F708958F929F92AF92BF92B0 -:10304000CF92DF92EF92FF924B015C010E94F71743 -:103050006B017C010E94F7176C197D098E099F098D -:10306000683E734081059105A8F321E0821A91081A -:10307000A108B10888EEC80E83E0D81EE11CF11C3F -:1030800081149104A104B10429F7FF90EF90DF901F -:10309000CF90BF90AF909F908F9008952FB7F894E6 -:1030A0006091E4027091E5028091E6029091E7025E -:1030B0002FBF089584E98093BC008091BC0084FDFB -:1030C000FCCF08958093BB0084E88093BC0080917E -:1030D000BC0087FFFCCF089584EA8093BC008091F8 -:1030E000BC0087FFFCCF88E70C9462180E946C1824 -:1030F00080E48093BB0084E88093BC00E0E2F3E0CE -:103100009091BC0097FFFCCF91919093BB0080936E -:10311000BC0097E0E032F90799F78091BC0087FF87 -:10312000FCCF0C945A18CF93C82F0E946C1880E0E3 -:103130000E9462188C2F0E946218CF910C945A182A -:10314000480F592F511D14161506D4F580389105D6 -:10315000BCF597FF02C090E080E04138510514F0C3 -:1031600040E850E0481BFB0177FD379633E0F595CA -:10317000E7953A95E1F7F695FE2FEE27F795E79557 -:10318000E80FF91FE05EFC4F6770772781E090E061 -:1031900001C0880F6A95EAF7382F213041F4415079 -:1031A00078F08191DF011197832B8C93F8CF809574 -:1031B000415030F09191DF01119798239C93F8CF03 -:1031C0000895CF92DF92EF92FF920F93CF93DF9308 -:1031D0006C017B01C42FD22F202F0E94A018B701B1 -:1031E0006D0F711D61507109603471052CF4202F31 -:1031F0004C2FC6010E94A018202F4D2FB701C601E9 -:103200000E94AE13C6018C0F911D202F4D2FB701C8 -:103210000197DF91CF910F91FF90EF90DF90CF90CA -:103220000C94AE132F923F924F925F926F927F92C7 -:103230008F929F92AF92BF92CF92DF92EF92FF92C6 -:103240000F931F93CF93DF93CDB7DEB72A970FB6B7 -:10325000F894DEBF0FBECDBF9A8389836A3061F5D3 -:10326000DC0152968C91B8E08B9F90011124E9818A -:10327000FA8186859785820F931F978786871586A3 -:10328000148681E090E02A960FB6F894DEBF0FBE58 -:10329000CDBFDF91CF911F910F91FF90EF90DF9005 -:1032A000CF90BF90AF909F908F907F906F905F90E6 -:1032B0004F903F902F9008956D3019F329813A81F6 -:1032C0003A872987D9011C96AD90BC90B0E8AB161F -:1032D000B1040CF07BC0F901C684D784F0E4CF16AA -:1032E000D1040CF073C0D90152966C90529745E00E -:1032F0009501649E200D311D1124121613060CF049 -:1033000065C0262C312C910153E0220F331F5A95B2 -:10331000E1F72C0D3D1D121613060CF057C0519607 -:10332000BC91BB83E985FA85F089FC83649FB00179 -:1033300011249B012A55324E3A832983712CE9814D -:10334000FA818491F5E07F1201C080E0460138E007 -:10335000532E282F30E03E832D834C8080FF4B80FE -:10336000411004C03B818C813817E1F010E000E08F -:103370000615C0F4D501A00FB11FB887AF83F12C9B -:10338000E12CE61460F4B701680D791D442D8F819E -:1033900098850E949013BFEFEB1AFB0AF2CF0F5FE4 -:1033A0001F4FE6CF8D819E81959587955A94820C0B -:1033B000931C5110CECF7394E981FA813196FA8330 -:1033C000E983A20CB31CF6E07F12B9CFA985BA85B8 -:1033D00052962C915297422F50E01C968D919C91C1 -:1033E000B6E02B9F800D911D1124E985FA85958704 -:1033F00084872389222309F444CF6AEF6403900170 -:10340000659F300D112420583F4F281739070CF0C5 -:1034100038CFDF010190F081E02D0190F081E02DA7 -:103420006AE0CD0109952DCF682F85E098E00C94D6 -:1034300012190F931F93CF93DF938C01D0E0C0E05C -:10344000F801EC0FFD1F6491662341F085E098E0E0 -:103450000E941219892B11F02196F2CFCE01DF9133 -:10346000CF911F910F910895089590E080E0089505 -:1034700080917A00806980937A008EE480937C004A -:1034800061E070E080E090E00E941C1883B7817FCB -:10349000826083BF80E130E020E093B7916093BF0A -:1034A000889593B79E7F93BF90917A0096FDFCCF4D -:1034B0004091780050917900240F351F815069F7B1 -:1034C00080917A008F7780937A0084E036952795F3 -:1034D0008A95E1F750E040E064EB7BE281E190E027 -:1034E0000E94F639C901089580917A00806980931D -:1034F0007A0088EC80937C006AE070E080E090E0E5 -:103500000E941C1883B7817F826083BF80E270E0D5 -:1035100060E093B7916093BF889593B79E7F93BF08 -:1035200090917A0096FDFCCF20917800309179003F -:10353000620F731F815069F780917A008F778093B3 -:103540007A00769567957695679562527A4090E015 -:1035500080E00E94C13826EF38E24CE151E40E943D -:10356000CB3A089590917A00906990937A008E50AA -:10357000806480937C0083B7817F826083BF20E278 -:1035800090E080E033B7316033BF889533B73E7F3A -:1035900033BF30917A0036FDFCCF409178005091D6 -:1035A0007900840F951F215069F720917A002F77B9 -:1035B00020937A0025E0969587952A95E1F708955E -:1035C0008FE00E94B21AA091EF02B091F0029C012C -:1035D0000E944A3A0E94C33828E539E743E353E49E -:1035E0000E94CB3A0E94443BCB0108958091F9029E -:1035F000882369F086E00E940717892B41F06AE072 -:1036000070E080E090E00E941C181092F90208958A -:103610006F927F928F929F92AF92BF92CF92DF92E2 -:10362000EF92FF920F93CF93DF937C01C62F01E0BF -:1036300020E340E370E060E00E94D713570123E0ED -:10364000A20EB11C00E02AE24AE263E070E0C5018C -:103650000E94D71370E060E0C7010E947B146701ED -:103660003FE2C30ED11C70E060E0C6010E947B14F3 -:103670006FE270E0C7010E947B146FE270E0C60148 -:103680000E947B14EC2FF0E0EE0FFF1FE257FE4F7D -:103690008080918053E0E52EF12CD12CC12C60E884 -:1036A000662E712CD0E0C0E0FE0133E0F595E79581 -:1036B0003A95E1F7EC0DFD1DE80DF91DE491CE0101 -:1036C00087709927930102C0359527958A95E2F76F -:1036D000C901F0E0E223F923EF2B69F0CE01880F56 -:1036E000991F8C0F9D1F01E023E043E0B7018A0D75 -:1036F0009B1D0E94D7132196CE30D105A9F632E04A -:10370000C30ED11C83E0E80EF11C2DE2E216F10499 -:1037100049F6DF91CF910F91FF90EF90DF90CF901E -:10372000BF90AF909F908F907F906F900895880F7B -:10373000991F9093E0028093DF02660F771F7093CA -:10374000DE026093DD028091F602882359F05093E7 -:10375000E2024093E102220F331F309305032093CE -:1037600004030895519541955109F1CF0F931F938B -:10377000CF9380914D01882399F0CFEF0FEE11E0A8 -:1037800061E085E00E943017C8010197F1F760E021 -:1037900085E00E943017C8010197F1F7C15081F709 -:1037A000CF911F910F9108958F929F92AF92BF92E8 -:1037B000CF92DF92EF92FF920F931F93CF93DF93FD -:1037C000D12CC12CF12CE12CD6E032E0932E40E339 -:1037D000A42EB12C8E2C86E00E94071721E0892BA5 -:1037E00009F020E02093F90221E430E041E050E0CC -:1037F00060E670E08FE190E00E94971B80910403E7 -:103800009091050395958795C82F8F31B9F52FE5D0 -:1038100030E041E050E060E670E08FE190E00E942F -:10382000971BCFE50E94461590921708D092120878 -:10383000C0921108B0921408A09213088EE50E945D -:10384000141A109212081092110880E290E09093DE -:1038500014088093130810E000E00815E8F4809144 -:103860001A03F801D89FE00DF11D1124E25BFE4F11 -:1038700080810E94141A0F5F1F4FEFCF803691F6A0 -:1038800020E230E041E050E060E670E08FE190E05F -:103890000E94971BC0E2C6CFD0921208C0921108B6 -:1038A00080E290E090931408809313088C2F0E947C -:1038B000141A0E94F61A0E94761886E00E940717D2 -:1038C000892B09F09BCF8091F902811197CF00914C -:1038D0001A03D09F80011124025B1E4FF801EE0DE8 -:1038E000FF1DC0830E94B61B6AE070E080E090E09C -:1038F0000E941C188FEFE81AF80AE0E1CE0ED11CE6 -:10390000F5E0EF16F10409F065CFF8011582DF91BB -:10391000CF911F910F91FF90EF90DF90CF90BF90CC -:10392000AF909F908F9008953F924F925F926F92C9 -:103930007F928F929F92AF92BF92CF92DF92EF923F -:10394000FF920F931F93CF93DF93CDB7DEB72E97E0 -:103950000FB6F894DEBF0FBECDBF80911D03882344 -:1039600009F4A5C11092BD071092BE071092BF07BF -:103970001092C0078090BD079090BE07A090BF072F -:10398000B090C007C0900D03D0900E03E0900F03DD -:10399000F0901003A7019601C501B4010E94593AA5 -:1039A0002B013C0120E030E0A9010E94B23B181637 -:1039B0000CF0A0C1C301B2010E94443B80914801B8 -:1039C000882309F4B8C1C092C507D092C607E09217 -:1039D000C707F092C807E12CF12C00EA10E420E0C0 -:1039E00030E040E450E46E31710540F0E12CF12C00 -:1039F00000E81FE320E030E040E05FE360E070E0DB -:103A000080E391E40E94B41280910308882309F4B2 -:103A10002AC10E944E186D837E838F839887809180 -:103A2000EB079091EC07A091ED07B091EE074D8167 -:103A30005E816F817885481B590B6A0B7B0B8091E7 -:103A4000F7079091F807A091F907B091FA07481786 -:103A500059076A077B0708F406C1E091E507F09172 -:103A6000E60780819181A281B38189839A83AB83A8 -:103A7000BC83E091E907F091EA079C01AD01608108 -:103A80007181828193810E94593A4B015C0120919E -:103A9000F3073091F4074091F5075091F6076981DB -:103AA0007A818B819C810E94593A6B017C01209123 -:103AB000D9073091DA074091DB075091DC07C50147 -:103AC000B4010E9422392091EF073091F007409114 -:103AD000F1075091F2070E945A3A2B013C014092A3 -:103AE000EF075092F0076092F1077092F207309062 -:103AF000040831101AC02091D5073091D6074091A3 -:103B0000D7075091D807C701B6010E9422399B01FF -:103B1000AC01C301B2010E94593A6093EF07709360 -:103B2000F0078093F1079093F2074090EF075090D1 -:103B3000F0076090F1077090F2071091FF079091E5 -:103B400000089E87A0910108AD8700910208212FEF -:103B5000392F4A2F502FC301B2010E94B23B1816D1 -:103B60000CF0CCC0812F9E85AD85B02F8093EF07E0 -:103B70009093F007A093F107B093F207332009F474 -:103B8000D6C02091D5073091D6074091D7075091E4 -:103B9000D807C501B4010E9422394B015C01209174 -:103BA000DD073091DE074091DF075091E007C70144 -:103BB000B6010E9422399B01AC016091EF07709120 -:103BC000F0078091F1079091F2070E94593AA50100 -:103BD00094010E945A3A6B017C019B01AC01612F58 -:103BE0007E858D85902F0E94BC3887FD18C010916E -:103BF000FB079091FC079E87A091FD07AD87009180 -:103C0000FE07212F392F4A2F502FB601C7010E94DE -:103C1000BC3887FD04C01C2DDE86ED860F2DE0919B -:103C2000E707F091E807812F9E85AD85B02F80834F -:103C30009183A283B38389819A81AB81BC81809374 -:103C4000F3079093F407A093F507B093F6078D81DF -:103C50009E81AF81B8858093EB079093EC07A0938A -:103C6000ED07B093EE076091C1077091C207809194 -:103C7000C3079091C4070E943D3B89E02E960FB682 -:103C8000F894DEBF0FBECDBFDF91CF911F910F9192 -:103C9000FF90EF90DF90CF90BF90AF909F908F906C -:103CA0007F906F905F904F903F900C949A17809107 -:103CB0001C03609144017091450181110EC08091F7 -:103CC0000B0390910C0320911B03BC01222329F0CC -:103CD00060914301680F792F711D90E080E00E9490 -:103CE000C1386093BD077093BE078093BF07909360 -:103CF000C00740CEC301B20190585ECE8091FB0751 -:103D00009091FC07A091FD07B091FE0789879A87E3 -:103D1000AB87BC879C01AD01C301B2010E94BC38D6 -:103D200087FF2CCF89859A85AB85BC851FCF812CD9 -:103D3000912C540134CF20E030E040E05FE3C70134 -:103D4000B6010E945A3A9B01AC01C501B4010E9420 -:103D5000B23B18164CF41092C1071092C207109291 -:103D6000C3071092C4077FCF80E090E0AFE7B3E4D1 -:103D70008093C1079093C207A093C307B093C40771 -:103D800072CF4F925F926F927F928F929F92AF927B -:103D9000BF92CF92DF92EF92FF92CF93DF9380900A -:103DA000F1029090F202A090F302B090F402C09160 -:103DB0001A03D0E0C501B4010E943D3B6B017C01B8 -:103DC00020E030E048E453E4C501B4010E94BC386F -:103DD00093E0CC0FDD1F9A95E1F7CE5FDE4F87FFB2 -:103DE00031C02881398150E040E025513109410935 -:103DF0005109C701B6010E945D3D28EC30E040E06A -:103E000050E00E94F639CA01B9016B5E7F4F8F4FB7 -:103E10009F4F0E94C33860930D0370930E038093ED -:103E20000F0390931003DF91CF91FF90EF90DF90FD -:103E3000CF90BF90AF909F908F907F906F905F904A -:103E40004F9008954A805B80712C612C20E030E017 -:103E50004CE853E4C501B4010E94BC3887FF1FC081 -:103E600088809980B12CA12CA7019601285C31098A -:103E700041095109C301B201681979098A099B09ED -:103E80000E945D3D20E530E040E050E00E94F639C0 -:103E9000CA01B901680D791D8A1D9B1DBACF2C81FD -:103EA0003D8150E040E02419350946095709C70112 -:103EB000B60168517140810991090E945D3D20E57C -:103EC00030E040E050E00E94F639CA01B901640DCB -:103ED000751D861D971D9DCFFC0101900020E9F7FF -:103EE0003197AF01481B590BBC0185E098E00C9459 -:103EF000D1158F929F92AF92BF920F931F93CF9342 -:103F0000DF93CDB7DEB7A1970FB6F894DEBF0FBE33 -:103F1000CDBF19A2423008F44AE08E010F5D1F4F59 -:103F2000842E912CB12CA12CA50194010E94283A39 -:103F3000E62FB901CA01EA30F4F4E05DD801EE934E -:103F40008D01232B242B252B79F790E080E010970F -:103F500019F0CD010E946C1FA1960FB6F894DEBF38 -:103F60000FBECDBFDF91CF911F910F91BF90AF904A -:103F70009F908F900895E95CE1CFCF92DF92EF920E -:103F8000FF92CF93DF936C01990FEE08FF08F7FEC5 -:103F900017C08DE20E94141AEC0166277727CB0127 -:103FA0006C197D098E099F094AE00E94791F8C0FC8 -:103FB0009D1FDF91CF91FF90EF90DF90CF900895FC -:103FC0004AE0C701B601DF91CF91FF90EF90DF90FB -:103FD000CF900C94791F0F9329E330E030931208AF -:103FE0002093110822E130E0309314082093130845 -:103FF00024E02093170820911E0330911F03253FD2 -:10400000314078F08DEC92E10E94191A00E020E234 -:1040100048E460E170E087E390E00E94E1180F91CE -:1040200008950E94BD1FF2CF4F925F926F927F92D0 -:104030008F929F92AF92BF92CF92DF92EF92FF92B8 -:104040000F931F93CF936B017C01742EAC019B01E6 -:104050000E940F3C882399F088EB92E0CF911F914A -:104060000F91FF90EF90DF90CF90BF90AF909F9017 -:104070008F907F906F905F904F900C946C1F4601D3 -:104080005701E894B7F82FEF3FEF4FE75FE7C5011F -:10409000B4010E940F3C81110DC02FEF3FEF4FE79D -:1040A0005FE7C501B4010E94BC3818161CF48CEB04 -:1040B00092E0D4CF2FEF3FEF4FE75FE4C701B601A7 -:1040C0000E94B23B18161CF480EC92E0C7CF2FEF91 -:1040D0003FEF4FE75FECC701B6010E94BC3887FD98 -:1040E000F3CF20E030E0A901C701B6010E94BC383F -:1040F00010E000E087FF08C08DE20E94141A8C01D6 -:10410000F7FAF094F7F8F094C0E060E070E080E037 -:104110009FE37C1641F020E030E040E251E40E9451 -:10412000CB3ACF5FF6CFA70196010E945A3A2B01F6 -:104130003C010E94443B4B015C014AE00E94791F14 -:104140007C01E00EF11ECC23B1F1C501B4010E9447 -:10415000C1389B01AC01C301B2010E94593A4B0125 -:104160005C018EE20E94141AE80EF91EC15018F18B -:1041700020E030E040E251E4C501B4010E94223960 -:104180002B013C010E94443B4B01B12CA12C4AE085 -:10419000C501B4010E94791FE80EF91EC501B401E2 -:1041A0000E94C1389B01AC01C301B2010E94593A7F -:1041B0004B015C01DBCFC701CF911F910F91FF90A5 -:1041C000EF90DF90CF90BF90AF909F908F907F90B7 -:1041D0006F905F904F900895CF92DF92EF92FF9291 -:1041E0000F93CF93DF9381E0809316081092150808 -:1041F0008093170800E02EE046E661E370E081E07E -:1042000090E00E94E11820911E0330911F03253F8A -:1042100081E03807B8F4A4E6B0E00E944A3A24EFFF -:1042200031E040E050E00E94F639BA01A9014E5F4A -:104230005F4F6F4F7F4F2EE061E370E081E090E0D1 -:104240000E94D7136091BD077091BE078091BF0790 -:104250009091C0070E943D3B9B01AC01A4E6B0E0F9 -:104260000E94153A34EFC32EDD24D394E12CF12CB7 -:10427000A70196010E94F639DA01C9010296A11D33 -:10428000B11D029700E02DE043E062E370E00E9480 -:10429000D7136091BD077091BE078091BF079091C1 -:1042A000C0070E943D3B9B01AC01A4E6B0E00E9428 -:1042B000153AA70196010E94F639DA01C901029662 -:1042C000A11DB11D039724E045E06CE370E00E945E -:1042D000D7136091BD077091BE078091BF07909181 -:1042E000C0070E943D3B9B01AC01A4E6B0E00E94E8 -:1042F000153AA70196010E94F6392E5F3F4F4F4FA6 -:104300005F4F790181E0E81AF108C1E3D0E041E0B4 -:10431000BE01C7010E9490132196CD33D105B9F794 -:104320006091BD077091BE078091BF079091C00753 -:104330000E943D3B9B01AC01A4E6B0E00E94153A0F -:1043400024EF31E040E050E00E94F639DA01C90183 -:104350000296A11DB11D0397EE24E39404E025E02D -:1043600045E055E26BE370E00E94F91300E02EE0B7 -:1043700047E161E370E088E690E00E94E118609117 -:10438000C1077091C2078091C3079091C4070E9432 -:104390003D3B9B01AC012F5F310941095109A7E168 -:1043A000B0E00E94153ACC24C394DD24DA94ED2CBD -:1043B000FD2CA70196010E94F639422F2EE061E301 -:1043C00070E088E690E00E94D7131092160881E012 -:1043D0008093150882E090E0909312088093110872 -:1043E000C7E3D0E0D0931408C09313086091BD07D1 -:1043F0007091BE078091BF079091C00740E00E9476 -:10440000142088EF0E94141A83E095E20E94191A82 -:1044100089E690E09093120880931108D0931408D5 -:10442000C09313086091C1077091C2078091C307C0 -:104430009091C4070E943D3B9B01AC012F5F310965 -:1044400041095109A4E6B0E00E94153AA70196017E -:104450000E94F63969017A014AE0C701B601F7FE08 -:104460000BC08DE20E94141A66277727CB016C19C6 -:104470007D098E099F094AE00E94791F81E095E23B -:104480000E94191A81E08093160810921508DF9196 -:10449000CF910F91FF90EF90DF90CF9008956F92A2 -:1044A0007F928F929F92AF92BF92CF92DF92EF92C4 -:1044B000FF920F931F93CF93DF93B0901A0377244B -:1044C0007394B11001C0712C2B2D30E0609142012A -:1044D0006150770B41E050E090E080E00E94971B34 -:1044E00086E00E94071721E0892B09F020E0209345 -:1044F000F902FF24F39472E0972EE6E08E2EFCE0A2 -:10450000CF2ED12C0E944615C0910403D0910503F3 -:10451000D595C795EC2E8E011127C801870D911DE9 -:1045200077FC9A958B199109712C97FD06C0833001 -:10453000910514F082E090E0782EF0921608109227 -:1045400015089092170810921208109211081092F4 -:104550001408109213088BE99DE10E94191A109219 -:104560001608F09215081092120810921108A72C44 -:10457000072C000CBB08C501019654E0880F991F59 -:104580005A95E1F7909314088093130889E99DE107 -:104590000E94191A6C2E671890E080E098012A1981 -:1045A0003B095901209142018C010F5F1F4F621698 -:1045B000D0F4D0921208C0921108980144E0220F62 -:1045C000331F4A95E1F730931408209313088A0D9E -:1045D0009B1D889E9001899E300D1124C901825B2C -:1045E0009E4F0E946C1FC801639403301105D1F6E1 -:1045F0000E94F61A0E94761886E00E940717892BFF -:10460000B9F48091F902811113C00E94B61BE092A7 -:104610001A03DF91CF911F910F91FF90EF90DF90E0 -:10462000CF90BF90AF909F908F907F906F900895A4 -:10463000BC2E68CF0E949B3D1F93CF93DF93EC016C -:10464000162F0E94E039181739F0612FCE01DF9143 -:10465000CF911F910C94E839DF91CF911F9108956C -:10466000AF92BF92CF92DF92EF92FF920F931F9380 -:10467000CF93DF936091470182E090E00E941C237A -:104680006091460183E090E00E941C236091450107 -:1046900084E090E00E941C236091440185E090E05A -:1046A0000E941C236091430186E090E00E941C233D -:1046B00060914B0187E090E00E941C2360914A01C9 -:1046C00088E090E00E941C236091490189E090E01D -:1046D0000E941C2360917E018AE090E00E941C23CE -:1046E000609148018BE090E00E941C2360914D0195 -:1046F0008CE090E00E941C2360911A038DE090E012 -:104700000E941C23609142018EE090E00E941C23D5 -:10471000609119038FE090E00E941C236091F502E4 -:1047200080E190E00E941C236091160381E190E0FB -:104730000E941C236091F80282E190E00E941C23F9 -:104740006091F70283E190E00E941C236091F602E1 -:1047500084E190E00E941C2385E1E82EF12C10E01A -:1047600006E0809142011817B8F5109F60011124EE -:10477000D0E0C0E0FE01EC0DFD1DE25BFE4F60816C -:10478000C7018C0F9D1F0E941C232196C630D105A6 -:1047900089F7670186E0C80ED11C88E0189FE00108 -:1047A0001124CE5FDE4F8EE0E80EF11C6981229667 -:1047B000C6010E941C23560182E0A80EB11CFE0116 -:1047C00032976081C60101960E941C236501AE14D8 -:1047D000BF0461F71F5FC5CFDF91CF911F910F918C -:1047E000FF90EF90DF90CF90BF90AF9008958F92A1 -:1047F0009F92AF92BF92CF92DF92EF92FF92CF93B0 -:104800006FEF70E089E00E949A178BEA94E00197BD -:10481000F1F78EE00E94B21A7C018AE00E9407172D -:104820009091C802981729F091E09093110380931A -:10483000C802809101019FEF980F909301018111AF -:1048400006C00E94E01A90931803809317036091AA -:10485000C1077091C2078091C3079091C4070E945D -:104860003D3B89E00E949A178090F1029090F202FD -:10487000A090F302B090F402B70190E080E00E94B3 -:10488000C138A50194010E94593A2DEC3CEC4CE44E -:104890005DE30E942239A50194010E945A3A609377 -:1048A000F1027093F2028093F3029093F4020E945B -:1048B000C11E60911E0370911F0390E080E00E9472 -:1048C000C1384B015C01C090BD07D090BE07E0909D -:1048D000BF07F090C007A70196010E94BC38811164 -:1048E00051C020910D0330910E0340910F03509160 -:1048F0001003C501B4010E94593A4B015C0120E04C -:1049000030E0A9010E94B23B181694F520E030E097 -:1049100040EA50E4C501B4010E94B23B181694F17C -:1049200060911E0370911F0390E080E00E94C138E7 -:10493000A70196010E94593A4B015C0120E030E04A -:10494000A9010E94B23B181664F520E030E040E86F -:104950005FE3C501B4010E94BC38181664F1C701B9 -:10496000B6010E94443B70931F0360931E0323C053 -:1049700020E030E040EA50ECC501B4010E94BC38B0 -:1049800087FFCECF60910D0370910E0380910F03CE -:10499000909110030E94443B70931F0360931E0389 -:1049A000BFCF20E030E040E85FEBC501B4010E94DA -:1049B000B23B87FFD4CF60910B0370910C0390E062 -:1049C00080E00E94C13820910D0330910E03409188 -:1049D0000F03509110030E94593A6B017C0120E0B3 -:1049E00030E0A9010E94B23B18160CF05EC0C7016E -:1049F000B6010E94443B6530710508F05AC08091B1 -:104A00007F01811105C080914C0181110E94B61B6C -:104A100081E080937F0110924C0180911E03909160 -:104A20001F03853F21E0920710F0109200012091B2 -:104A30000001211141C0843F9140F0F56FEF70E01B -:104A400089E00E949A170E94B61BC1E0C093000142 -:104A50000E944F220E943023C09311038EE00E94D7 -:104A6000B21ABC0190E080E00E94C1386093F1026C -:104A70007093F2028093F3029093F4021092030376 -:104A800020910B0330910C034AE050E060E971E0A3 -:104A900086E990E0CF91FF90EF90DF90CF90BF90AC -:104AA000AF909F908F900C94971BC701B6019058C0 -:104AB000A0CF10927F01B1CFCF91FF90EF90DF9008 -:104AC000CF90BF90AF909F908F9008950C94E03955 -:104AD0004F925F926F927F928F929F92AF92BF920E -:104AE000CF92DF92EF92FF920F931F93CF93DF93BA -:104AF000CDB7DEB72B970FB6F894DEBF0FBECDBF94 -:104B000090911903E82FF0E09F01220F331F9111BC -:104B100026C0F901E25DFD4F40815181EE24E3940E -:104B200000E124E260E370E080E390E00E94F9138A -:104B30002B960FB6F894DEBF0FBECDBFDF91CF919D -:104B40001F910F91FF90EF90DF90CF90BF90AF90AB -:104B50009F908F907F906F905F904F9008959230CC -:104B600009F079C0EF5DF24E4490F901E252FE4F38 -:104B7000A080B180F12CE12C04E310E393E0592EE6 -:104B800027E0622EE414A0F6F501EE0DFF1D44911E -:104B900080E1840F833008F45CC081EF7816D1F097 -:104BA00082EF7816C1F1403F90F4193710F0085F9A -:104BB00010E088E0489FA00111244F555A4E602F05 -:104BC00070E028E0812F90E00E945915185F80EF77 -:104BD000782E1DC04E39D8F41D3710F0085F10E054 -:104BE000C02ED12C812E912C459DA001112449531A -:104BF0005C4E23E0B601C4010E94591521E046EC49 -:104C000053E1B601C40103960E9459151C5F8FEF52 -:104C1000E81AF80AB7CF4332D0F7193710F0085F17 -:104C200010E0C02ED12C812E912C469DA001112484 -:104C30004F525D4E27E0B601C4010E94591521E094 -:104C400046EC53E1B601C40107960E945915185F5E -:104C5000DECF742EDCCF80E390E090931208809337 -:104C6000110884E390E0909314088093130881E086 -:104C700080931708F901E75BF24E65917491CE01BC -:104C800001960E94B538CE0101960E946C1F50CF4C -:104C90002F923F924F925F926F927F928F929F924C -:104CA000AF92BF92CF92DF92EF92FF920F931F933A -:104CB000CF93DF9300D01F92CDB7DEB7898386E014 -:104CC0000E94071721E0892B09F020E02093F902C8 -:104CD0005AE0252E312C0E944615009104031091B4 -:104CE00005031595079526E02093170831E03093CA -:104CF0001608109215086091DB027091DC02072EF5 -:104D0000000C880B990B0E94C3384B015C0145EDE8 -:104D1000C42E42E0D42E760182E090E09B838A8309 -:104D2000EA81FB81BF01FF0F880B990B0E94C338FA -:104D30009B01AC0160E070E080E291E40E94B73B2F -:104D40009B01AC01C501B4010E94CB3A0E943D3BDE -:104D5000CB01B1010E946D3DF701819391937F01D9 -:104D60002A813B81215031093B832A832F3F3F4FCA -:104D7000B9F61093DC020093DB02E9ECF2E0FB836E -:104D8000EA8394E0E92EF12C22E0822E912CB401EA -:104D9000092C000C880B990B0E94C3389B01AC01B5 -:104DA00060E070E080E291E40E94B73B2B013C019F -:104DB0006091DB027091DC02072E000C880B990BCE -:104DC0000E94C338A30192010E94CB3A0E943D3B4E -:104DD000CB01B1010E946D3DF60120813181821B22 -:104DE000930BF2E3F89FB001F99F700D1124072E89 -:104DF000000C880B990B0E94C338EA81FB8120814B -:104E00003181428153810E945A3A2B013C0120E0BA -:104E100030E0A9010E94BC3881119BC0EA81FB816E -:104E2000408251826282738201E022E346E270E0B6 -:104E300060E0C70104970E94D7138EECA82EBB2414 -:104E4000BA940FEF1FEFEA81FB812081318142810B -:104E5000538160E070E080E890E40E94593A2B01B1 -:104E60003C01B5010B2C000C880B990B0E94C33838 -:104E70009B01AC01C301B2010E945A3A0E943D3B22 -:104E8000F0921208E09211087093140860931308CE -:104E9000F60180819181800F911F0E94BD1F0F5FDD -:104EA0001F4FF2E3AF0EB11C0230110561F62A81EB -:104EB0003B812C5F3F4F3B832A8331E0831A91086B -:104EC00082E0C80ED11C9CE2E90EF11CE8E8EE1667 -:104ED000F10409F05CCF00E022E040E870E060E01F -:104EE00090E080E00E94D71320E140E860E370E0AA -:104EF00090E080E00E94D71389810E9468250E947B -:104F000076180E94F61A86E00E940717892B09F08E -:104F1000E2CE8091F9028111DECE0E94B61B809113 -:104F2000DB029091DC020F900F900F90DF91CF91F8 -:104F30001F910F91FF90EF90DF90CF90BF90AF90B7 -:104F40009F908F907F906F905F904F903F902F90A9 -:104F50000895C301B20190582DEC3CEC4CE45FE3A2 -:104F60000E942239A30192010E945A3AEA81FB81F0 -:104F7000608371838283938357CF9C0144E650E022 -:104F800064E873E090E080E00E94971B88E00E9454 -:104F90004826BC01665A7F4F9C014AE050E00E94BF -:104FA000971B88E00E944826BC01675F7F4F9C01E9 -:104FB00041E050E00E94971B88E00C9448262F9215 -:104FC0003F924F925F926F927F928F929F92AF9299 -:104FD000BF92CF92DF92EF92FF920F931F93CF93E6 -:104FE000DF93D82E282F30E0E091FA02F0E0EC5762 -:104FF000FE4F60816150770B41E050E090E080E02F -:105000000E94971B86E00E94071721E0892B09F078 -:1050100020E02093F9021092160881E08093150891 -:1050200038E3632EE0900403F0900503F594E794D1 -:10503000AE2C8701112798012D193109629EC001FC -:10504000639E900D1124C80FD91F209709F1662780 -:1050500077276C1B7D0B072E000C880B990B0E9489 -:10506000C3382AE939E949E15FE30E9422391B018B -:105070002C01BE01DD0F880B990B0E94C3389B01E8 -:10508000AC01C201B1010E945A3A0E943D3BEB01C2 -:105090000E944615025011094E0185E0B82E93E09A -:1050A000792E7A0CC090FA02D12C17FD20C0F6019F -:1050B000EC57FE4F808180171106C9F0C4F0E4E878 -:1050C000F1E070E060E0CF01845891408C159D05BF -:1050D00034F48191680F711DF6CFDE2CA3CF872D9C -:1050E0008B19680FC401885491090E94081BBA9457 -:1050F0000F5F1F4F88E3880E911CB110D3CFE4E8F7 -:10510000F1E090E080E09F01245831402C153D05EE -:1051100024F42191820F911DF6CF8E0D0E946825F7 -:105120000E9476180E94F61A86E00E940717892BC3 -:10513000A1F68091F9028111D0CF0E94B61B8A2D71 -:10514000DF91CF911F910F91FF90EF90DF90CF9063 -:10515000BF90AF909F908F907F906F905F904F9097 -:105160003F902F9008951F920F920FB60F92112427 -:105170002F933F934F935F936F937F938F939F935F -:10518000AF93BF93EF93FF9380E297E00E944F1697 -:10519000FF91EF91BF91AF919F918F917F916F910F -:1051A0005F914F913F912F910F900FBE0F901F90E5 -:1051B00018951F920F920FB60F9211242F938F9371 -:1051C0009F93EF93FF93E0913007F0913107808137 -:1051D000E0913607F091370782FD1BC090818091E6 -:1051E00039078F5F8F7320913A07821741F0E09162 -:1051F0003907F0E0E05EF84F958F80933907FF9113 -:10520000EF919F918F912F910F900FBE0F901F9054 -:1052100018958081F4CF1F920F920FB60F92112430 -:105220002F933F938F939F93AF93BF938091E4020B -:105230009091E502A091E602B091E7023091E3027D -:1052400023E0230F2D3758F50196A11DB11D2093A2 -:10525000E3028093E4029093E502A093E602B09308 -:10526000E7028091E8029091E902A091EA02B091F0 -:10527000EB020196A11DB11D8093E8029093E90213 -:10528000A093EA02B093EB02BF91AF919F918F91EF -:105290003F912F910F900FBE0F901F90189526E809 -:1052A000230F0296A11DB11DD2CF1F920F920FB6F0 -:1052B0000F9211242F933F934F935F936F937F939C -:1052C0008F939F93EF93FF9383B1817029B1909156 -:1052D000EE02981709F49DC030E0220F232F221F01 -:1052E000330B922F8093EE024091ED02241709F4C4 -:1052F00090C02093ED022091E1023091E2029817D4 -:1053000019F031952195310940910403509105031D -:105310006091DF027091E002240F351F26173707D6 -:105320000CF48BC02091E1023091E202981719F041 -:105330003195219531094091040350910503609105 -:10534000DD027091DE02240F351F621773070CF423 -:105350006FC04091E1025091E202981719F0519507 -:10536000419551092091040330910503240F351F05 -:10537000309305032093040341E0981340E020910B -:10538000EC02421709F440C02091E1023091E202A0 -:10539000981719F0319521953109609104037091A6 -:1053A0000503E091DF02F091E002260F371F2E1770 -:1053B0003F070CF44CC02091E1023091E2029817B3 -:1053C00019F031952195310960910403709105031D -:1053D000E091DD02F091DE02260F371FE217F3079E -:1053E0008CF12091E1023091E202981719F0319589 -:1053F000219531098091040390910503820F931F39 -:1054000090930503809304034093EC0281E0809322 -:105410001103FF91EF919F918F917F916F915F9118 -:105420004F913F912F910F900FBE0F901F901895A5 -:105430002091DD023091DE029BCF2091DF0230917E -:10544000E00296CF8091DD029091DE02D9CF80916B -:10545000DF029091E002D4CF18951F920F920FB601 -:105460000F9211248F93EF93FF93E0E6F0E0808199 -:1054700080648083FF91EF918F910F900FBE0F900A -:105480001F9018950F931F93CF93DF93E0E2F7E0FF -:105490001382128288EE93E0A0E0B0E084839583CB -:1054A000A683B7838EE992E09183808385EC90E0B8 -:1054B0009587848784EC90E09787868780EC90E0DE -:1054C000918B808B81EC90E0938B828B82EC90E0CF -:1054D000958B848B86EC90E0978B868B118E128E49 -:1054E000138E148EE5E0F8E0138212821682178282 -:1054F00080E1808715821482128680EB92E091838E -:105500008083158614861786168681E0808B118A23 -:10551000828B138AC9ECD7E021EC37E03F8F2E8FC6 -:1055200025EC37E03D8F2C8F2DEB37E039A328A3F6 -:105530001AAE1AAA1BAA1CAA1DAA40E050E06FE7E7 -:1055400073E44EAB5FAB68AF79AF44E650E060E028 -:1055500070E04EA75FA768AB79AB21E030E0398FF0 -:10556000288F3B8F2A8F8BAF80E090E0A0E3B1E4DF -:1055700088839983AA83BB8380E090E0A0E0BFE3A7 -:105580008C839D83AE83BF8380E090E0A0E8BFE37F -:1055900088879987AA87BB8780E090E0A0E3B1EC79 -:1055A0008C879D87AE87BF878DEC9CECACE4BDEB10 -:1055B000888B998BAA8BBB8B80E090E0A0E2B1EC4A -:1055C0008C8B9D8BAE8BBF8B0E944E180EA51FA59A -:1055D00028A939A9601B710B820B930B6AA37BA3CB -:1055E0008CA39DA3DF91CF911F910F910895CF932D -:1055F000DF93CDB7DEB7A5970FB6F894DEBF0FBE29 -:10560000CDBF789484B5826084BD84B5816084BD4B -:1056100085B5826085BD85B5816085BD80916E0050 -:10562000816080936E001092810080918100826081 -:1056300080938100809181008160809381008091BE -:1056400080008160809380008091B10084608093AD -:10565000B1008091B00081608093B00080917A00A9 -:10566000846080937A0080917A00826080937A00CF -:1056700080917A00816080937A0080917A008068BE -:1056800080937A001092C100A89584B7877F84BF69 -:105690008091600088618093600087E18093600062 -:1056A00080916000806480936000809160008860D9 -:1056B000809360001092B90088E48093B8000E9443 -:1056C0006C1880E00E94621800E013E2EFE1EE2E19 -:1056D000E3E2FE2EF80184910E9462180F5F1F4FD3 -:1056E000E016F106B9F70E945A1811E01093B800BD -:1056F0000E94761881E280930D0860E08EE00E949F -:105700005E1760E08FE00E945E1761E085E00E9416 -:105710005E1761E089E00E945E1762E087E00E9408 -:105720005E1762E088E00E945E1762E086E00E94F9 -:105730005E1762E08AE00E945E176FEF70E089E01A -:105740000E949A1760E085E00E94301780917A00ED -:10575000876080937A0080917A00886080937A00D5 -:10576000789410936B00109368001BBB90E080E06E -:105770000E946625182F81E090E00E946625912FF7 -:105780008A30944109F0D3C082E090E00E946625FF -:10579000182F83E090E00E946625912F9093470197 -:1057A0008093460184E090E00E946625182F85E0F2 -:1057B00090E00E946625912F9093450180934401CB -:1057C00086E090E00E9466258093430187E090E0A8 -:1057D0000E94662580934B0188E090E00E94662538 -:1057E00080934A0189E090E00E94662580934901F8 -:1057F0008AE090E00E94662580937E018BE090E035 -:105800000E94662591E0811101C090E090934801CB -:105810008CE090E00E94662591E0811101C090E04B -:1058200090934D018DE090E00E94662580931A03CD -:105830008EE090E00E946625282E809342018FE042 -:1058400090E00E9466258093190380E190E00E9419 -:10585000662591E0811101C090E09093F50281E10D -:1058600090E00E9466258093160382E190E00E94FA -:105870006625182F83E190E00E946625912F909372 -:10588000F8028093F70284E190E00E94662591E09F -:10589000811101C090E09093F60252E0852E51E014 -:1058A000952E6EE4A62E61E0B62E75E1E72EF12C62 -:1058B000312C231409F447C010E000E0C701800F29 -:1058C000911F0E946625F501E00FF11F80830F5F95 -:1058D0001F4F0630110591F7670126E0C20ED11C5B -:1058E0003EE0E30EF11C3401C6010E946625082F3C -:1058F00010E0102F0027F301118300832601F2E04E -:105900004F0E511CC60101960E946625082BF3011B -:10591000019311933F0162014E145F0429F7339400 -:10592000F8E08F0E911C26E0A20EB11CC2CF64E1FC -:1059300090E080E00E941C236AE081E090E00E94F9 -:105940001C230E9430231091F50280EC111101C03C -:1059500088EC0E94931880EA111101C081EA0E942C -:1059600093181092120380E28093130380E48093D3 -:10597000140380E6809315038091F7029091F8025A -:10598000892B19F10E94461568E088E290E00E9498 -:10599000081B88E00E9468250E94761868EE73E074 -:1059A00080E090E00E941C180E94B61B0E94B61B6B -:1059B0000E94B61B90E080E00E94BD272091F70274 -:1059C0003091F80282179307E9F60E94381A9093F3 -:1059D000F0028093EF020E94E01A909318038093E4 -:1059E0001703009146011091470110930C03009397 -:1059F0000B038EE00E94B21ABC0190E080E00E948E -:105A0000C1386093F1027093F2028093F302909395 -:105A1000F4020E94741A0E94C11E20E030E040EAA5 -:105A200051E460910D0370910E0380910F039091EA -:105A300010030E945A3A6B017C01B80190E080E0AB -:105A40000E94C1389B01AC01C701B6010E94BC385D -:105A500087FF05C070E060E089E00E949A1710920D -:105A6000FB071092FC071092FD071092FE07412CD5 -:105A7000512C3FE7632E33E4732E4092FF07509280 -:105A800000086092010870920208A090E707B090A9 -:105A9000E80780910308F501C080D180E280F3809F -:105AA000882311F40C94BB37A3019201C701B601FE -:105AB0000E94B23B181634F5F50140825182628291 -:105AC00073828090EF079090F007A090F107B0905C -:105AD000F207C090FF07D0900008E0900108F09016 -:105AE0000208A7019601C501B4010E94B23B181635 -:105AF000C4F4C092EF07D092F007E092F107F09261 -:105B0000F2071FC020E030E0A901C701B6010E94E2 -:105B1000BC3887FFD6CFF501108211821282138222 -:105B2000D0CFC090FB07D090FC07E090FD07F0902D -:105B3000FE07A7019601C501B4010E94BC3887FD8C -:105B4000D8CF81E08093030883B181708093EE0207 -:105B500089B190E0880F892F881F990B8093ED02FF -:105B60002091EE029091ED0281E0291380E0809374 -:105B7000EC0298014AE050E060E971E086E990E0CB -:105B80000E94971B0E944E186093070370930803AE -:105B90008093090390930A030E94B61B0E94B61BD0 -:105BA00080910403909105039C013595279538A3B6 -:105BB0002F8F30930C0320930B0386E00E9407176E -:105BC00089A3811193C080910303882309F48EC0B7 -:105BD0000E94B61B0E944E186B017C01C092FF020E -:105BE000D0920003E0920103F092020386E00E944B -:105BF0000717892B59F40E944E186C197D098E09DC -:105C00009F09643F71408105910580F30E944E1801 -:105C10006C197D098E099F09643F714081059105CA -:105C200008F424C66FEF70E089E00E949A170E9482 -:105C3000B61B1D861092FA028D850E94DF278D8784 -:105C40008B3008F03FC0E82FF0E0E75DF14D0C9499 -:105C5000813D462EC4300D314E315C318C319A314C -:105C6000EE3301340C34163420E030E0A901C701D2 -:105C7000B6010E94BC3887FF64CF1092EF071092E4 -:105C8000F0071092F1071092F2075BCF18ED212E6A -:105C9000312C0EE1602E712C8BEA482E84E0582EB8 -:105CA00081E08093FA028D850E94DF278D87823004 -:105CB00009F405C208F0DAC0882309F400C1813074 -:105CC00009F400C10E94302381E080931103EF8D1D -:105CD000F8A1F0930C03E0930B039F014AE050E01E -:105CE00060E971E086E990E00E94971BF9A1F093CA -:105CF000030380911B03882309F1109149011123AB -:105D0000E9F00E944E18C090FB02D090FC02E09097 -:105D1000FD02F090FE026C197D098E099F0928EEA4 -:105D200033E040E050E00E94283A211738F010920A -:105D30001B030E94B61B81E080934C0180911103EC -:105D40008823F1F180911C03882351F120E030E099 -:105D500040EA51E460910D0370910E0380910F03AE -:105D6000909110030E945A3A6B017C0160910B03E1 -:105D700070910C0390E080E00E94C1389B01AC015F -:105D8000C701B6010E94BC3887FF05C070E060E023 -:105D900089E00E949A170E94B61B81E080934C0113 -:105DA0001092110310921C0310921D030E944E18B2 -:105DB00060930703709308038093090390930A0389 -:105DC0000E944E18009107031091080320910903C7 -:105DD00030910A03601B710B820B930B20E63AEEA5 -:105DE00040E050E00E94283A122F20930603809151 -:105DF0001C0381110BC080914B01882339F02817B7 -:105E000028F081E080931C030E94B61B80911D0343 -:105E100081110BC080914A01882339F0181728F0AE -:105E200081E080931D030E94B61B0E94F7230E940D -:105E3000941C0E944E1880910E08262F281B822F3A -:105E400090910F08992309F427C520931008109208 -:105E50000F0880E090E0892B09F4A2CE0E943B1647 -:105E6000882309F49DCE0E9400009ACE5D855330B0 -:105E700009F428C1543009F025CF809142018830BF -:105E800008F00ECF91E0980F9093420180931A038F -:105E90000E94D41BE0911A0388E0E89FF0011124CE -:105EA000EE5FFE4F3182208224E331E03383228390 -:105EB00046E851E05583448377826682F1CE0E94A2 -:105EC0004F22EECECE0101967C0101E010E0DD24F0 -:105ED000D394B2E0CB2EE0911A0394E0E99FF00155 -:105EE0001124C8010197E80FF91FEE0FFF1FEE5FA5 -:105EF000FE4F2081318130930C0320930B0341E04E -:105F000050E064EF71E084E690E00E94971BD0922D -:105F10004C0186E00E94071721E0892B09F020E060 -:105F20002093F9020E944615C09217080E94F72399 -:105F30000E94941C109212081092110810921408DA -:105F40001092130885E493E20E94191AC8010E9476 -:105F5000BD1F84EC92E00E946C1F80917F01109223 -:105F6000120810921108882309F481C0E0E1F0E0E2 -:105F7000F0931408E093130888E393E20E94191A3F -:105F8000109212081092110820E230E030931408A9 -:105F90002093130881E393E20E94191A809104036D -:105FA00090910503959587950E94BD1F0E94F61A52 -:105FB0000E94761886E00E940717892B09F0B2CF5D -:105FC0008091F9028111AECF809104039091050375 -:105FD00095958795F701819391937F010E94B61B58 -:105FE0006AE070E080E090E00E941C180F5F1F4F95 -:105FF0000430110509F06FCF6FEF70E089E00E9467 -:106000009A17C2010197F1F70E94741A0E94443B4B -:106010006B0178876F8389809A800B811C81C40112 -:106020004E968017910708F03BCEAD80BE80C80128 -:106030004E968A159B0508F033CE87E08093FA02CE -:1060400080E00E94DF27882309F42ACEE0911A031A -:1060500028E0E29FF0011124EE5FFE4F91828082E2 -:1060600013830283B582A482D782C68219CE40E10F -:1060700050E050931408409313088BE293E20E947F -:10608000191A6091F1027091F2028091F3029091DD -:10609000F4020E94443B90E080E04AE00E94791FB5 -:1060A000109212081092110880E290E09093140868 -:1060B000809313088FE193E20E94191A77CF0E9410 -:1060C000D41BEECD87E08093FA02809142018130AB -:1060D00009F4E6CD80E00E94DF27882309F4E0CDB3 -:1060E00010911A0300914201402F4150550BBA0103 -:1060F0001417150639F4115010931A030150009328 -:106100004201CECD812F90E086179707BCF756E06D -:10611000159FD001112450E040E09C012F5F3F4FBC -:10612000FA01EA0FFB1FE25BFE4FF680F0824F5F41 -:106130005F4F46305105A1F743E0220F331F4A95C8 -:10614000E1F7D901AE5FBE4F2D913C91119753E01D -:10615000880F991F5A95E1F7FC01EE5FFE4F3183DE -:10616000208312968D919C9113979383828314962A -:106170008D919C9115979583848316968D919C9112 -:10618000978386831F5FBECF52E05093FA0210E0E0 -:10619000812F0E94DF27182F8130D1F028F0823024 -:1061A00059F10E94302346CD20914601309147019C -:1061B0004AE050E060E971E086E990E00E94971BB8 -:1061C00082E10E9448269093470180934601E0CFE8 -:1061D00020914401309145014AE050E068EC70E0C4 -:1061E00084E190E00E94971B83E10E9448269093EF -:1061F000450180934401CCCF2091430130E04AE037 -:1062000050E064E670E08AE090E00E94971B84E131 -:106210000E94482680934301BBCF83E08093FA021B -:1062200010E0812F0E94DF27182F813031F1A0F07C -:10623000823009F0B6CF2091490130E04AE050E0C9 -:1062400064EB70E090E080E00E94971B88E10E9480 -:10625000482680934901E5CF20914B0130E041E091 -:1062600050E06EE170E090E080E00E94971B86E1D4 -:106270000E94482680934B01D4CF20914A0130E000 -:1062800045E050E06CE370E090E080E00E94971BF6 -:1062900087E10E94482680934A01C3CF84E080931F -:1062A000FA02809148010E94DF2791E0811101C02C -:1062B00090E090934801BECC10E099E0E92EE09286 -:1062C000FA02812F0E94DF27182F882321F08130C6 -:1062D000E9F000E00AC085E08093FA0280917E0137 -:1062E0000E94DF2780937E0101E0F090F50280ECB0 -:1062F000F11001C088EC0E94931880EAF11001C0EF -:1063000081EA0E9493180111DACF4BCF8091F502F8 -:1063100081278093F502E8CF86E08093FA0280918E -:106320004D010E94DF2791E0811101C090E0909320 -:106330004D0180CC81E0809316081092150886E00C -:106340000E94071721E0892B09F020E02093F90231 -:1063500020EF30E042E150E064EA71E08CE390E04D -:106360000E94971B1A8A91E09093170800910403EA -:106370001091050315950795B801012E000C880BA7 -:10638000990B0E94C3386093BD077093BE0780933A -:10639000BF079093C00710931F0300931E030E9432 -:1063A000461501E020E440E870E060E090E080E025 -:1063B0000E94D7136E857F85888999890E94C63A85 -:1063C0006B8F7C8F8D8F9E8F20E030E040E450E417 -:1063D0000E9422391B012C01AC019B0160E070E09E -:1063E00080EC91E40E94593A0E943D3B6B8B7C8B80 -:1063F0008D8B9E8BEB89FC89FA87E9876E857F857B -:10640000888999890E94073C6B017C0120E030E07B -:1064100040E450E40E9422394B015C01AC019B0135 -:1064200060E070E080EC91E40E94593A0E943D3BAC -:106430006F8B788F898F9A8F6F88788C20E030E00F -:1064400040EC51E4C201B1010E945A3A0E943D3B26 -:106450006E877F87888B998B2E843F8420E030E085 -:1064600040EC51E4C501B4010E945A3A0E943D3B00 -:106470004B012B0120E030E040EC51E4C701B601B4 -:106480000E9422399B01AC0160E070E080EC91E455 -:106490000E94593A0E943D3B6B018B0120E030E0A5 -:1064A00040EC51E46B8D7C8D8D8D9E8D0E94223948 -:1064B00020E030E040EC51E40E945A3A0E943D3B1B -:1064C000AB012C143D040CF084C529853A852C15AC -:1064D0003D050CF496C5302F212F8101232E322E3D -:1064E000342F252FA201432E522E89859A8580179D -:1064F000910709F089C0441655062CF4342F252F36 -:10650000A201432E522E641675062CF04614570431 -:106510000CF423013A010034110540F441E0440D2C -:10652000461920E0B801C3010E94A01886E10E942C -:10653000A21483E10E94A21483E00E94A214E7E364 -:10654000F0E0F0931208E093110821E030E030937E -:1065500014082093130832E03093170880E593E283 -:106560000E94191A8091F602882309F405C18EE46D -:1065700093E20E94191A20E030E040E752E4609173 -:10658000BD077091BE078091BF079091C0070E9420 -:10659000593A20E030E044EB53E40E94CB3A2BED33 -:1065A0003FE049EC50E40E9422392BED3FE049ECFA -:1065B0005FE30E94593A6E877F87888B998B809121 -:1065C0001E0390911F030E94EB1F0E94EC2000E02D -:1065D00024E04A8970E060E090E080E00E94D713F8 -:1065E0000E9476180E94F61A86E00E940717892BEF -:1065F00009F0E8C08091F9028111E4C04A89485F3E -:106600004A8B47FFB0CE16CB362D272D3A01432FAC -:10661000522F39852A851A870987032F122F920155 -:10662000261937093C8F2B8FC101E985FA858E1B0E -:106630009F0B9BA38AA34A018618970898012E1BDB -:106640003F0B3F872E87CA01841995099C8B8B8B42 -:10665000F801E219F309FDA3ECA30215130509F4EF -:1066600041C0910121503109388F2F8BE984FA8480 -:10667000B12CA12CD12CC12C4F89588D4E155F0502 -:10668000A4F1C6016AA17BA10E946D3D9B01260D6C -:10669000371DC5016E857F850E946D3DCB01860D3E -:1066A000971DEB8DFC8DCE0EDF1EA80CB91C82173A -:1066B00093071CF0582FC901252FF0E4EF16F104C1 -:1066C00038F441E0420F481B20E0B7010E94A018B7 -:1066D0002FEFE21AF20AD0CF2B01A4010E851F85FD -:1066E00016019DCF188F0F8BC1CFC7018219930957 -:1066F0004B895C89849F6001859FD00C949FD00C4E -:106700001124C701E985FA858E1B9F0B889D5001D6 -:10671000899DB00C989DB00C11240E151F050CF42A -:1067200005CFC6016CA17DA10E946D3D9B01240D8A -:10673000351DC5016E857F850E946D3DCB01860D9F -:10674000971D4B895C89C40ED51EA80CB91C8217F5 -:1067500093071CF0582FC901252F50E4E516F104CA -:1067600038F441E0420F481B20E0B7010E94A01816 -:106770008FEFE81AF80AD1CF8CE493E20E94191A3D -:106780006091BD077091BE078091BF079091C007CF -:10679000905820E030E040E752E40E94593A20E06F -:1067A00030E044EB53E40E94CB3A2BED3FE049EC60 -:1067B00050E40E94223922E93AE046E05FE30E9479 -:1067C0005A3AF9CE8A8982508E3308F0CBCD809127 -:1067D000F60251E085278093F602BACD2091160388 -:1067E00030E041E050E06AEF70E090E080E00E942D -:1067F000971B87E00E944826809316030E94B61BD1 -:1068000019CA8091F7029091F8020E94BD279093D7 -:10681000F8028093F702F2CF88E08093FA02809129 -:1068200019030E94DF278093190304CA0E944615AA -:10683000EE24E39400E320E346E553E270E060E0F9 -:1068400088E290E00E94F9130E94761864E670E0F6 -:1068500080E090E00E941C1886E00E940717892BB8 -:10686000D9F78091F9028111F7CFC8CF80911B032E -:1068700091E0892780931B03882351F00E944E18D2 -:106880006093FB027093FC028093FD029093FE02E2 -:1068900081E0809311032ACA90910D08291748F4CA -:1068A0008F5F891708F0D5CA81E083BF889513BE32 -:1068B000D0CA81E080930F0860930E088091090888 -:1068C00090910A08019690930A0880930908E09035 -:1068D0001E03F0901F0335EFE31631E0F30608F0D6 -:1068E0001CC180911D03882309F4F5C06FEF70E08F -:1068F00089E00E949A170E94461502E113E0B3E076 -:106900008B2E912CA12CB12C0E945D3822E030E01E -:1069100040E050E00E94F639AB01BC014150510902 -:1069200061097109F8018081682F640F613808F0EE -:1069300049C06083D12C0E945D384D2C512C712CA4 -:10694000612CA50194010E94F6396D5F7F4F8F4F36 -:106950009F4F4616570668067906B4F5F801E080A1 -:10696000F12C0E945D3824E130E040E050E00E94CC -:10697000F6396A507109810991096E0D7F1D6034E5 -:10698000710530F421E040E890E080E00E94A0181A -:10699000F801E080F12C0E945D3824E130E040E015 -:1069A00050E00E94F639DC01CB010A97A109B10938 -:1069B0008E0D9F1D21E040E470E060E00E94AE1368 -:1069C000D394B9CF6058B5CF0F5F1F4FF3E00631B6 -:1069D0001F0709F099CF0E944E180E94C13820E08D -:1069E00030E04AE755E40E94CB3A0E94073C6B0135 -:1069F0007C0120E030E040E853E40E94223920E0AE -:106A000030E040E853E40E945A3A2B013C0110E088 -:106A100000E0B801012E000C880B990B0E94C338CE -:106A2000A30192010E94BC3887FF25C00E945D38F7 -:106A30004B015C010E945D3869877A878B879C8750 -:106A4000C501B40120E430E040E050E00E94F63996 -:106A50004B0169857A858B859C8520E830E040E094 -:106A600050E00E94F639CB0141E0B4010E9490133E -:106A70000F5F1F4FCECF80914D01882349F10E94B7 -:106A80005D3820E130E040E050E00E94F639685087 -:106A90007109810991090E94C3384B015C0120E012 -:106AA00030E040E852E4C701B6010E94223920E0FC -:106AB00030E040E852E40E945A3A9B01AC01C50123 -:106AC000B4010E945A3A0E943D3B85E00E949A1709 -:106AD0000E947618BEC980911C0312E081111EC06D -:106AE00080911B0313E0811119C080917F0114E094 -:106AF000811114C020E030E044E353E46091C10709 -:106B00007091C2078091C3079091C4070E94BC385E -:106B100015E087FD03C016E001C010E080917E0102 -:106B2000882309F4A9C10E94461501E020E440E849 -:106B300070E060E090E080E00E94D71381E08093F5 -:106B400017088093160810921508E12C00E120E147 -:106B500041EE54E270E060E090E080E00E94F913C2 -:106B600083E190E0909312088093110884E090E014 -:106B7000909314088093130880911A0326E0829F53 -:106B8000C0011124825B9E4F0E946C1F85E390E040 -:106B9000909312088093110881E090E0909314087C -:106BA0008093130882E080931708C12ED12C809126 -:106BB0001903CC0CDD1C811107C1F601E457FD4F10 -:106BC000408151810EE02CE161E070E080E590E0D1 -:106BD0000E94F913F601E258FD4F40815181E12CEA -:106BE0000EE02EE061E070E081E790E00E94F91392 -:106BF00081E0809317080E94741A20E030E040EA98 -:106C000052E40E94BC3887FFFEC083E190E090937D -:106C100012088093110840E150E05093140840930B -:106C200013080E94741A41E00E94142088EF0E9409 -:106C3000141A89EB94E20E94191AE12C0EE02EE05E -:106C40004DE954E262E170E082E090E00E94F913C5 -:106C5000609117037091180390E080E00E94C138A2 -:106C60006B017C0120E030E048EC52E40E94CB3A1A -:106C70004B015C016091160370E090E080E00E949F -:106C8000C3389B01AC01C501B4010E94B23B181688 -:106C90000CF0CBC083E190E0909312088093110830 -:106CA00080E290E0909314088093130820E030E095 -:106CB0004AE754E4C701B6010E94CB3A41E00E9482 -:106CC00014208BE994E20E94191AE12C0EE02EE0C8 -:106CD0004FE754E262E270E082E090E00E94F91334 -:106CE00003E110E0109312080093110888E190E08E -:106CF00090931408809313080E94381ABC0190E006 -:106D000080E00E94C13820E030E04AE754E40E946D -:106D1000CB3A42E00E9414208DE794E20E94191AB7 -:106D2000109312080093110888E290E090931408E1 -:106D30008093130886E794E20E94191A80911E033B -:106D400090911F030E94EB1F0E94EC200E94761876 -:106D50000E94741A20E030E040EA52E40E94B23B04 -:106D600018160CF474C0609117037091180390E02A -:106D700080E00E94C13820E030E048EC52E40E94FC -:106D8000CB3A6B017C016091160370E090E080E0EB -:106D90000E94C3389B01AC01C701B6010E94BC38F8 -:106DA00087FF57C80E944E1842E0660F771F881F62 -:106DB000991F4A95D1F728EE33E040E050E00E9459 -:106DC000283A20FD55C045C881ED94E21330C1F04A -:106DD00058F48DED94E2113099F087ED94E2123081 -:106DE00079F08BEB94E20CC086EC94E2153041F024 -:106DF0008BEC94E2153020F081EC94E2163089F7A8 -:106E00000E94191AE7CE0E944E18F2E0660F771F13 -:106E1000881F991FFA95D1F728EE33E040E050E043 -:106E20000E94283A20FDF1CE13CF0E944E18E2E0D6 -:106E3000660F771F881F991FEA95D1F728EE33E078 -:106E400040E050E00E94283A20FD24CF49CF0E9424 -:106E50004E1852E0660F771F881F991F5A95D1F779 -:106E600028EE33E040E050E00E94283A20FF7BCF3C -:106E70000E94B61B0C94292F86E08093170810926D -:106E8000160881E0809315080E9446150E94741A26 -:106E900020E030E040EA52E40E94B23B181694F43D -:106EA0000E944E1832E0660F771F881F991F3A958F -:106EB000D1F728EE33E040E050E00E94283A20FD70 -:106EC0000E94B61B609117037091180390E080E058 -:106ED0000E94C13820E030E048EC52E40E94CB3AF6 -:106EE0004B015C016091160370E090E080E00E942D -:106EF000C3389B01AC01C501B4010E94BC3887FFB7 -:106F000012C00E944E1822E0660F771F881F991F3B -:106F10002A95D1F728EE33E040E050E00E94283A6D -:106F200020FD0E94B61B8CE090E0909312088093A5 -:106F3000110882E090E0909314088093130895EF75 -:106F4000E91691E0F90680F087EE93E00E94BD1FFC -:106F500001E020E140E860E370E090E080E00E9422 -:106F6000D7130E94EC20B4CDB70190E080E04AE056 -:106F70000E94791FEDCFC092EF07D092F007E09208 -:106F8000F107F092F207E091E507F091E6078081C2 -:106F90009181A281B3818093F3079093F407A0932A -:106FA000F507B093F60720E030E04FE753E4C70160 -:106FB000B6010E94B23B181614F00C94342E409285 -:106FC000EF075092F0076092F1077092F2070C946D -:106FD000A12DE985FA85E215F3050CF086CA4985ED -:106FE0005A854C155D050CF477CB34012B014F8984 -:106FF000588D16010B891C898E859F859A878987F4 -:107000006ACA29853A85221533050CF408CB340168 -:107010004F88588CEE85FF85FA87E9872B883C8856 -:10702000FECA8F929F92AF92BF92CF92DF92EF9261 -:10703000FF92CF93DF93EC01688179818A819B81F4 -:10704000611571058105910521F464E279ED8BE507 -:1070500097E02DE133EF41E050E00E94F63949011D -:107060005A019B01AC01A7EAB1E40E94153A6B01F9 -:107070007C01ACEEB4EFA50194010E94233AC60E48 -:10708000D71EE81EF91EF7FE06C081E0C81AD10817 -:10709000E10880E8F80AC882D982EA82FB82C70147 -:1070A000B6019F77DF91CF91FF90EF90DF90CF9067 -:1070B000BF90AF909F908F9008958F929F92AF92C4 -:1070C000BF92CF92DF92EF92FF9260918001709118 -:1070D0008101809182019091830161157105810583 -:1070E000910521F464E279ED8BE597E02DE133EF32 -:1070F00041E050E00E94F63949015A019B01AC0180 -:10710000A7EAB1E40E94153A6B017C01ACEEB4EF42 -:10711000A50194010E94233AC60ED71EE81EF91E4F -:10712000F7FE06C081E0C81AD108E10880E8F80A35 -:10713000C0928001D0928101E0928201F09283019D -:10714000C701B6019F77FF90EF90DF90CF90BF907F -:10715000AF909F908F90089560938001709381010C -:1071600080938201909383010895FB01DC010590D7 -:107170000D920020E1F708950E94FE3808F481E0A6 -:107180000895E89409C097FB3EF49095809570951A -:1071900061957F4F8F4F9F4F9923A9F0F92F96E963 -:1071A000BB279395F695879577956795B795F111D8 -:1071B000F8CFFAF4BB0F11F460FF1BC06F5F7F4F75 -:1071C0008F4F9F4F16C0882311F096E911C0772387 -:1071D00021F09EE8872F762F05C0662371F096E890 -:1071E000862F70E060E02AF09A95660F771F881F5F -:1071F000DAF7880F9695879597F90895990F000803 -:10720000550FAA0BE0E8FEEF16161706E807F90778 -:10721000C0F012161306E407F50798F0621B730B13 -:10722000840B950B39F40A2661F0232B242B252B94 -:1072300021F408950A2609F4A140A6958FEF811D37 -:10724000811D08950E9435390C94A6390E94983901 -:1072500038F00E949F3920F0952311F00C948F395B -:107260000C94953911240C94DA390E94B73970F3D3 -:10727000959FC1F3950F50E0551F629FF001729FDB -:10728000BB27F00DB11D639FAA27F00DB11DAA1FEA -:10729000649F6627B00DA11D661F829F2227B00D37 -:1072A000A11D621F739FB00DA11D621F839FA00DC2 -:1072B000611D221F749F3327A00D611D231F849F12 -:1072C000600D211D822F762F6A2F11249F57504069 -:1072D0009AF0F1F088234AF0EE0FFF1FBB1F661FE4 -:1072E000771F881F91505040A9F79E3F510580F0AD -:1072F0000C948F390C94DA395F3FE4F3983ED4F361 -:10730000869577956795B795F795E7959F5FC1F750 -:10731000FE2B880F911D9695879597F9089597F9FB -:107320009F6780E870E060E008959FEF80EC08952B -:1073300000240A9416161706180609060895002454 -:107340000A9412161306140605060895092E0394CE -:10735000000C11F4882352F0BB0F40F4BF2B11F442 -:1073600060FF04C06F5F7F4F8F4F9F4F089557FDA1 -:107370009058440F551F59F05F3F71F04795880FA3 -:1073800097FB991F61F09F3F79F08795089512163A -:1073900013061406551FF2CF4695F1DF08C01616E6 -:1073A00017061806991FF1CF869571056105089497 -:1073B0000895E894BB2766277727CB0197F90895AE -:1073C000F999FECF92BD81BDF89A992780B50895AD -:1073D000262FF999FECF1FBA92BD81BD20BD0FB6F1 -:1073E000F894FA9AF99A0FBE01960895052E97FB24 -:1073F0001EF400940E940D3A57FD07D00E94283ACF -:1074000007FC03D04EF40C940D3A509540953095FE -:1074100021953F4F4F4F5F4F089590958095709500 -:1074200061957F4F8F4F9F4F08950E944A3AA59FC5 -:10743000900DB49F900DA49F800D911D112408956F -:10744000B7FF0C94153A0E94153A821B930B0895CE -:10745000A1E21A2EAA1BBB1BFD010DC0AA1FBB1F58 -:10746000EE1FFF1FA217B307E407F50720F0A21BCA -:10747000B30BE40BF50B661F771F881F991F1A9437 -:1074800069F760957095809590959B01AC01BD0161 -:10749000CF010895A29FB001B39FC001A39F700DBB -:1074A000811D1124911DB29F700D811D1124911D0C -:1074B00008955058BB27AA270E94713A0C94A63908 -:1074C0000E94983938F00E949F3920F039F49F3F8C -:1074D00019F426F40C9495390EF4E095E7FB0C941E -:1074E0008F39E92F0E94B73958F3BA17620773072B -:1074F0008407950720F079F4A6F50C94D9390EF499 -:10750000E0950B2EBA2FA02D0B01B90190010C01B3 -:10751000CA01A0011124FF27591B99F0593F50F4CB -:10752000503E68F11A16F040A22F232F342F442723 -:10753000585FF3CF469537952795A795F04053951B -:10754000C9F77EF41F16BA0B620B730B840BBAF0EB -:107550009150A1F0FF0FBB1F661F771F881FC2F756 -:107560000EC0BA0F621F731F841F48F4879577956A -:107570006795B795F7959E3F08F0B0CF9395880F24 -:1075800008F09927EE0F9795879508950E94753B0F -:10759000E3950C949E3B0E94DF3A0C94A6390E941E -:1075A0009F3958F00E94983940F029F45F3F29F044 -:1075B0000C948F3951110C94DA390C9495390E943E -:1075C000B73968F39923B1F3552391F3951B550B04 -:1075D000BB27AA2762177307840738F09F5F5F4FA6 -:1075E000220F331F441FAA1FA9F335D00E2E3AF0E5 -:1075F000E0E832D091505040E695001CCAF72BD0FD -:10760000FE2F29D0660F771F881FBB1F261737074D -:107610004807AB07B0E809F0BB0B802DBF01FF277F -:1076200093585F4F3AF09E3F510578F00C948F3994 -:107630000C94DA395F3FE4F3983ED4F3869577955E -:107640006795B795F7959F5FC9F7880F911D969538 -:10765000879597F90895E1E0660F771F881FBB1F94 -:10766000621773078407BA0720F0621B730B840B41 -:10767000BA0BEE1F88F7E09508950E94443B68948A -:10768000B1110C94DA3908950E94BF3988F09F57E0 -:1076900098F0B92F9927B751B0F0E1F0660F771F36 -:1076A000881F991F1AF0BA95C9F714C0B13091F02C -:1076B0000E94D939B1E008950C94D939672F782FF9 -:1076C0008827B85F39F0B93FCCF3869577956795F1 -:1076D000B395D9F73EF490958095709561957F4F5D -:1076E0008F4F9F4F08950C9495390E94BF39D8F35E -:1076F000E894E0E0BB279F57F0F02AED3FE049EC2B -:1077000006C0EE0FBB0F661F771F881F28F0B23A26 -:1077100062077307840728F0B25A620B730B840B5D -:10772000E3959A9572F7803830F49A95BB0F661FEF -:10773000771F881FD2F790480C94503CEF93E0FFDE -:1077400007C0A2EA2AED3FE049EC5FEB0E94713AE4 -:107750000E94A6390F90039401FC9058E8E6F0E0EF -:107760000C94833C0E94FE3808F48FEF0895FA01D0 -:10777000EE0FFF1F309621053105A1F1611571054E -:1077800061F48038BFE39B0749F168949038810524 -:1077900061F08038BFEF9B0741F099234AF5FF3F26 -:1077A000E1053105210519F1E8940894E795D9011F -:1077B000AA2329F4AB2FBE2FF85FD0F310C0FF5FD0 -:1077C00070F4A695E0F7F73950F019F0FF3A38F465 -:1077D0009F779F930DD00F9007FC9058089546F027 -:1077E0000C94953960E070E080E89FE308954FE7DE -:1077F0009F775F934F933F932F930E94E13C2F918C -:107800003F914F915F910E9422390C941C3C9F93B1 -:107810000E94753B0F9007FCEE5F0C949E3B0E940C -:10782000FE38880B990B089529F416F00C948F39C3 -:107830000C94D9390C9495390E94BF39A8F3963825 -:10784000A0F707F80F92E8942BE33AEA48EB5FE7DA -:107850000E9438390F920F920F924DB75EB70F9278 -:107860000E94293DE6E8F0E00E945C3C4F915F9168 -:10787000EF91FF91E595EE1FFF1F49F0FE57E0687D -:107880004427EE0F441FFA95E1F74195550B0E94EE -:10789000A33C0F9007FE0C94973C08959F3F31F056 -:1078A000915020F4879577956795B795880F911D2E -:1078B0009695879597F90895DF93CF931F930F932C -:1078C000FF92EF92DF927B018C01689406C0DA2E62 -:1078D000EF010E943539FE01E894A591259135917B -:1078E00045915591A6F3EF010E94713AFE0197016F -:1078F000A801DA9469F7DF90EF90FF900F911F9144 -:10790000CF91DF9108959F938F937F936F93FF9310 -:10791000EF939B01AC010E942239EF91FF910E94ED -:107920005C3C2F913F914F915F910C9422399B01C8 -:10793000AC0160E070E080E89FE30C94CB3A0C94DB -:107940008F390C944E3C0E94BF39D8F39923C9F368 -:10795000940F511DA3F39150504094F059F0882397 -:1079600032F0660F771F881F91505040C1F79E3F3D -:1079700051052CF7880F911D9695879597F90895D5 -:107980005F3FACF0983E9CF0BB2786957795679556 -:10799000B79508F4B1609395C1F7BB0F58F711F490 -:1079A00060FFE8CF6F5F7F4F8F4F9F4FE3CF0C9407 -:1079B000DA3916F00C944E3C0C94953968940C947A -:1079C0008F390E94BF39A8F39923C1F3AEF3DF9337 -:1079D000CF931F930F93FF92C92FDD2788232AF09F -:1079E0002197660F771F881FDAF720E030E040E824 -:1079F0005FEB9FE3883920F0803E38F021968F7747 -:107A00000E945A3AEEEAF0E004C00E945A3AEBEDC6 -:107A1000F0E00E945C3C8B01BE01EC01FB2E6F5735 -:107A200071097595771F880B990B0E94C33828E15F -:107A300032E741E35FE30E943539AF2D9801AE0193 -:107A4000FF900F911F91CF91DF910E94713A0C949A -:107A5000A639FA01DC01AA0FBB1F9B01AC01BF577D -:107A600028F4222733274427507820C0B75190F4B8 -:107A7000AB2F0024469537952795011CA395D2F38B -:107A8000002071F0220F331F441FB395DAF30ED09C -:107A90000C94593A61307105A0E88A07B94630F470 -:107AA0009B01AC016627772788279078309621F0D4 -:107AB00020833183428353830895DB018F939F9307 -:107AC0000E94153ABF91AF91A29F800D911DA39F77 -:107AD000900DB29F900D1124089597FB072E16F478 -:107AE000009407D077FD09D00E94873D07FC05D0A0 -:107AF0003EF4909581959F4F0895709561957F4FC5 -:107B00000895EE0FFF1F0590F491E02D0994AA1B34 -:107B1000BB1B51E107C0AA1FBB1FA617B70710F078 -:107B2000A61BB70B881F991F5A95A9F780959095AA -:107B3000BC01CD01089581E090E0F8940C94A03D43 -:107B4000F894FFCF01FFD800340186011E00000029 -:107B50000000000000000000000000000000000025 -:107B60000000000000000000000000000000000015 -:107B70000000000000000000000000000000000005 -:107B8000000000000000013C9600400101280F05A4 -:107B900001014243312E35000000000000000000CA -:107BA00000000000000000000000000000000000D5 -:107BB00000000000000000000000000000000000C5 -:107BC00000000101010000000C0604040202020290 -:107BD000030334041804FC03E003C403A8038C0368 -:107BE0007003540338031C030003E402C802340486 -:107BF000AC0290027402340458023C02740258022F -:107C000020023C0274020402E801CC01B00194019C -:107C1000A803780100035C0140012401C4030801AA -:107C2000740210050B050605FF04F904F504EE04C3 -:107C3000E504E204DF04DA04D604CD04C304BB0483 -:107C4000B804B504B204AC04A904A404A1049E04BD -:107C50009904940491048B04870483047E047904BA -:107C6000750470046C0468046504610458045304CA -:107C700050044910F90FA90F590F090FB90E690ED9 -:107C8000190EC90D790D290DD90C4910890C390C23 -:107C9000E90B990B490BF90AA90A590A490BA90AD8 -:107CA000090A590A490BB90969091909C908790862 -:107CB0002908D90789073907E90699064906F90508 -:107CC000490B29110D11ED107F24D110B510991019 -:107CD00095125D122512ED11B5117D1145110000AF -:107CE00000007116D115FE15BE162F160D162116A1 -:107CF000000000001219D115351A341A6E616E0099 -:0C7D0000696E66006F7666002F3300008D -:107E0000112484B714BE81FFF0D085E080938100F7 -:107E100082E08093C00088E18093C10086E0809377 -:107E2000C20080E18093C4008EE0C9D0259A86E02C -:107E300020E33CEF91E0309385002093840096BBD3 -:107E4000B09BFECF1D9AA8958150A9F7CC24DD24C4 -:107E500088248394B5E0AB2EA1E19A2EF3E0BF2EE7 -:107E6000A2D0813461F49FD0082FAFD0023811F036 -:107E7000013811F484E001C083E08DD089C08234E0 -:107E800011F484E103C0853419F485E0A6D080C0E4 -:107E9000853579F488D0E82EFF2485D0082F10E0AE -:107EA000102F00270E291F29000F111F8ED06801E7 -:107EB0006FC0863521F484E090D080E0DECF843638 -:107EC00009F040C070D06FD0082F6DD080E0C81688 -:107ED00080E7D80618F4F601B7BEE895C0E0D1E017 -:107EE00062D089930C17E1F7F0E0CF16F0E7DF06D8 -:107EF00018F0F601B7BEE89568D007B600FCFDCFD4 -:107F0000A601A0E0B1E02C9130E011968C91119780 -:107F100090E0982F8827822B932B1296FA010C0160 -:107F200087BEE89511244E5F5F4FF1E0A038BF0790 -:107F300051F7F601A7BEE89507B600FCFDCF97BE46 -:107F4000E89526C08437B1F42ED02DD0F82E2BD052 -:107F50003CD0F601EF2C8F010F5F1F4F84911BD097 -:107F6000EA94F801C1F70894C11CD11CFA94CF0C13 -:107F7000D11C0EC0853739F428D08EE10CD085E9AC -:107F80000AD08FE07ACF813511F488E018D01DD067 -:107F900080E101D065CF982F8091C00085FFFCCF94 -:107FA0009093C60008958091C00087FFFCCF809118 -:107FB000C00084FD01C0A8958091C6000895E0E648 -:107FC000F0E098E1908380830895EDDF803219F02E -:107FD00088E0F5DFFFCF84E1DECF1F93182FE3DFCA -:107FE0001150E9F7F2DF1F91089580E0E8DFEE27F6 -:047FF000FF270994CA -:027FFE00040479 -:00000001FF diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t4/1.8t4.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t4/1.8t4.ino new file mode 100644 index 0000000..67f0fa7 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t4/1.8t4.ino @@ -0,0 +1,2302 @@ +/*License: http://creativecommons.org/licenses/by-sa/3.0/ + 采用CC3.0协议共享此程序 + 您可以自由地 + 共享 — 在任何媒介以任何形式复制、发行本作品 + 演绎 — 修改、翻译或以本作品为基础进行创作 + 在任何用途下,甚至商业目的。 + 本许可协议为“自由文化作品(Free Cultural Works)”所接受。 + 只要你遵守许可协议条款,许可人就无法收回你的这些权利。 + + Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) + This is a human-readable summary of (and not a substitute for) the license. Disclaimer. + You are free to: + Share — copy and redistribute the material in any medium or format + Adapt — remix, transform, and build upon the material + for any purpose, even commercially. + This license is acceptable for Free Cultural Works. + The licensor cannot revoke these freedoms as long as you follow the license terms. +*/ +// SolderingStation2 +// +// ATmega328-controlled Soldering Station for Hakko T12 Tips. +// 此v1.8t4版本功能简介 +// This 1.8t4 version of the code implements: +// - 烙铁头温度实时监测 +// - Temperature measurement of the tip +// - PID温度控制 +// - Direct or PID control of the heater +// - 可以通过编码器进行控制温度 +// - Temperature control via rotary encoder +// - 短按编码器进入短时升温模式 +// - Boost mode by short pressing rotary encoder switch +// - 长按编码器进入主菜单 +// - Setup menu by long pressing rotary encoder switch +// - 手柄震动检测(需要手柄含有震动传感器) +// - Handle movement detection (by checking ball switch) +// - 手柄连接检测(通过判断烙铁头温度是否能够被读取来实现) +// - Iron unconnected detection (by idenfying invalid temperature readings) +// - 定时器设定 - 随眠,关机时间 +// - Time driven sleep/power off mode if iron is unused (movement detection) +// - 可以测量主控芯片电压以及温度 +// - Measurement of input voltage, Vcc and ATmega's internal temperature +// - 在OLED上实现信息显示 +// - Information display on OLED +// - 支持无源蜂鸣器 +// - Buzzer +// - 允许设置不同烙铁头的温度校准值 +// - Calibrating and managing different soldering tips +// - 设置被保存在EEPROM,掉电不丢失 +// - Storing user settings into the EEPROM +// - 允许热插拔烙铁头,并弹出烙铁头配置选择菜单 +// - Tip change detection +// - 芯片过热以及低电压报警 +// - Chip overheating and low voltage alarm +// - 更好的实时温度条以及实时功率条 +// - Better real-time temperature bar and real-time power bar +// - 拥有过渡动画 +// - Have transition animation +// - 内置屏幕保护程序 +// - Built in screen saver +// - 屏幕翻转设置 +// - Screen flip settings +// - 内置英文、中文、日文语言包 +// - Built in English, Chinese and Japanese language pack +// - 开机密码设置 +// - System Password +// - 允许设置旋钮方向 +// - Knob direction setting menu +// - 内嵌看门狗,宕机自动重启 +// - Watchdog timer automatic reset the MCU + +// Power supply should be in the range of 16V/2A to 24V/3A and well +// stabilized. +// +// For calibration you need a soldering iron tips thermometer. For best results +// wait at least three minutes after switching on the soldering station before +// you start the calibration process. +// +// Controller: ATmega328p +// Core: Barebones ATmega (https://github.com/carlosefr/atmega) +// Clockspeed: 16 MHz external +// +// 2019/2020 by Stefan Wagner with great support from John Glavinos +// 2020-8 UI upgrade by LHW-createskyblue 、lihaoyun6 +// Project Page: https://easyeda.com/wagiminator + +//关于界面-项目页面二维码 ->为了加入欠压报警只能阉割掉关于页面的二维码 +//const unsigned char QRCode[] PROGMEM = { 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x1f, 0xfe, 0x3f, 0xc1, 0x8c, 0x0c, 0x7f, 0xf8, 0x1f, 0xfe, 0x3f, 0xc1, 0x8c, 0x0c, 0x7f, 0xf8, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x3e, 0x0f, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3e, 0x0f, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x1f, 0xfe, 0x3e, 0x30, 0x70, 0x0c, 0x7f, 0xf8, 0x1f, 0xfe, 0x3e, 0x30, 0x70, 0x0c, 0x7f, 0xf8, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x01, 0x83, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x01, 0x83, 0x8f, 0xff, 0xff, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0xf8, 0x00, 0x3e, 0x3e, 0x03, 0xf0, 0x7f, 0x00, 0xf8, 0x00, 0x3e, 0x3e, 0x03, 0xf0, 0x7f, 0x00, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0x18, 0xc0, 0x31, 0xfe, 0x0c, 0x0c, 0x1c, 0xe0, 0x18, 0xc0, 0x31, 0xfe, 0x0c, 0x0c, 0x1c, 0xe0, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0x1f, 0x00, 0x31, 0xcf, 0xf3, 0x8c, 0x03, 0x00, 0x1f, 0x00, 0x31, 0xcf, 0xf3, 0x8c, 0x03, 0x00, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x3e, 0x7c, 0x0f, 0xe0, 0x00, 0xff, 0xff, 0xf0, 0x3e, 0x7c, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x1f, 0xfe, 0x30, 0x01, 0x83, 0x8f, 0xe0, 0xff, 0x1f, 0xfe, 0x30, 0x01, 0x83, 0x8f, 0xe0, 0xff, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x3f, 0xff, 0x83, 0x83, 0xe3, 0x1f, 0x18, 0x06, 0x3f, 0xff, 0x83, 0x83, 0xe3, 0x1f, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x1f, 0xfe, 0x31, 0xfe, 0x00, 0x0c, 0x60, 0xe7, 0x1f, 0xfe, 0x31, 0xfe, 0x00, 0x0c, 0x60, 0xe7, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0 }; +const unsigned char QRCode[] PROGMEM = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0x86, 0x70, 0x80, 0x03, 0x80, 0x03, 0x86, 0x70, 0x80, 0x03, 0x9f, 0xf3, 0xe1, 0x30, 0x9f, 0xf3, 0x9f, 0xf3, 0xe1, 0x30, 0x9f, 0xf3, 0x98, 0x33, 0x01, 0xcc, 0x98, 0x33, 0x98, 0x33, 0x01, 0xcc, 0x98, 0x33, 0x98, 0x33, 0x87, 0xc0, 0x98, 0x33, 0x98, 0x33, 0xe1, 0xc0, 0x98, 0x33, 0x98, 0x33, 0xe1, 0xc0, 0x98, 0x33, 0x9f, 0xf3, 0x98, 0xc0, 0x9f, 0xf3, 0x9f, 0xf3, 0x98, 0xc0, 0x9f, 0xf3, 0x80, 0x03, 0x66, 0xcc, 0x80, 0x03, 0x80, 0x03, 0x66, 0xcc, 0x80, 0x03, 0xff, 0xff, 0x01, 0x0c, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x61, 0x30, 0x1f, 0x3f, 0x87, 0x3c, 0xe6, 0xfc, 0x87, 0x33, 0x87, 0x3c, 0xe6, 0xfc, 0x87, 0xf3, 0xf8, 0x03, 0x9e, 0x0f, 0x1f, 0x03, 0xf8, 0x03, 0x9e, 0x0f, 0x1f, 0x03, 0xe1, 0x3c, 0xfe, 0x0c, 0x07, 0xcf, 0xe1, 0x3c, 0xfe, 0x0c, 0x07, 0xcf, 0x99, 0x03, 0x3e, 0x30, 0x86, 0xc3, 0xe6, 0xcf, 0x38, 0x0f, 0x9e, 0xf3, 0xe6, 0xcf, 0x38, 0x0f, 0x9e, 0xf3, 0x9e, 0x03, 0x27, 0xcc, 0x81, 0x03, 0x9e, 0x03, 0x27, 0xcc, 0x81, 0x03, 0xe0, 0xff, 0xe1, 0x0c, 0xe6, 0xcf, 0xe0, 0xff, 0xe1, 0x0c, 0xe6, 0xcf, 0x98, 0x03, 0x06, 0x00, 0x00, 0xff, 0x98, 0x03, 0x06, 0x00, 0x00, 0xff, 0xff, 0xff, 0x1e, 0xf0, 0xf8, 0x03, 0x80, 0x03, 0x66, 0x30, 0x99, 0xc3, 0x80, 0x03, 0x66, 0x30, 0x99, 0xc3, 0x9f, 0xf3, 0x01, 0x0c, 0xf8, 0xff, 0x9f, 0xf3, 0x01, 0x0c, 0xf8, 0xff, 0x98, 0x33, 0x39, 0x3c, 0x01, 0xcf, 0x98, 0x33, 0x39, 0x3c, 0x01, 0xcf, 0x98, 0x33, 0xff, 0x0c, 0x79, 0x3f, 0x98, 0x33, 0x3e, 0xcc, 0xe0, 0xf3, 0x98, 0x33, 0x3e, 0xcc, 0xe0, 0xf3, 0x9f, 0xf3, 0x3e, 0x00, 0x98, 0xcf, 0x9f, 0xf3, 0x3e, 0x00, 0x98, 0xcf, 0x80, 0x03, 0x3e, 0x30, 0xe7, 0xc3, 0x80, 0x03, 0x3e, 0x30, 0xe7, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; +//ICO +//width:16,height:16 +const unsigned char Tag[] PROGMEM = { 0x00, 0x00, 0x3b, 0xec, 0x7b, 0xee, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0x66, 0x62, 0x26, 0x60, 0x06, 0x60, 0x06, 0x7f, 0xfe, 0x3f, 0xfc, 0x00, 0x00 }; +const unsigned char Chip[] PROGMEM = { 0x14, 0xa0, 0x3f, 0xf0, 0x7f, 0xf8, 0xe0, 0x1c, 0x6e, 0x18, 0xec, 0x1c, 0x68, 0x18, 0x60, 0x18, 0xe0, 0x1c, 0x60, 0x58, 0xe0, 0x1c, 0x7f, 0xf8, 0x3f, 0xf0, 0x14, 0xa0 }; +//const unsigned char HeatPipe[] PROGMEM = { 0x00, 0x00, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x01, 0x80, 0x00, 0x00 }; +const unsigned char Lightning[] PROGMEM = { 0x0f, 0xe0, 0x1f, 0xc0, 0x1f, 0xc0, 0x3f, 0x80, 0x3f, 0xf8, 0x7f, 0xf0, 0x7f, 0xe0, 0x07, 0xc0, 0x07, 0x80, 0x0f, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x18, 0x00, 0x10, 0x00 }; +//const unsigned char Thermometer[] PROGMEM = { 0x01, 0x80, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0 }; +const unsigned char Pointer[] PROGMEM = { 0x20, 0x20, 0x70, 0xf8 }; +//状态提示 +//width:14,height:14 图标库 + +const unsigned char c1[] PROGMEM = { 0x03, 0x00, 0x07, 0x80, 0x0f, 0xc0, 0x0c, 0xc0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xf0, 0x3c, 0xf0, 0x7f, 0xf8, 0x7f, 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0xff, 0xfc, 0x7f, 0xf8 }; +const unsigned char c2[] PROGMEM = { 0x7f, 0xf8, 0xff, 0xfc, 0xc0, 0x0c, 0xc3, 0x0c, 0xcb, 0x4c, 0xdb, 0x6c, 0xdb, 0x6c, 0xd8, 0x6c, 0xdc, 0xec, 0xcf, 0xcc, 0xc7, 0x8c, 0xc0, 0x0c, 0xff, 0xfc, 0x7f, 0xf8 }; +const unsigned char c3[] PROGMEM = { 0x00, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x18, 0xf8, 0x38, 0xf0, 0x30, 0x30, 0x70, 0x60, 0x70, 0x78, 0x78, 0xf8, 0x78, 0x00, 0x3c, 0x02, 0x3f, 0x0c, 0x1f, 0xf8, 0x0f, 0xf0, 0x03, 0xc0, 0x00, 0x00 }; +const unsigned char c5[] PROGMEM = { 0x7f, 0xf0, 0xff, 0xe0, 0xc0, 0x08, 0xc0, 0x1c, 0xc0, 0x38, 0xc8, 0x70, 0xdc, 0xe4, 0xcf, 0xcc, 0xc7, 0x8c, 0xc3, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xff, 0xfc, 0x7f, 0xf8 }; +const unsigned char c6[] PROGMEM = { 0x1e, 0x10, 0x33, 0x38, 0x2d, 0x7c, 0x25, 0x38, 0x2d, 0x38, 0x25, 0x38, 0x2d, 0x38, 0x6d, 0x80, 0xde, 0xc0, 0xbf, 0x40, 0xbf, 0x40, 0xde, 0xc0, 0x61, 0x80, 0x3f, 0x00 }; +const unsigned char c7[] PROGMEM = { 0x1f, 0xe0, 0x3f, 0xf0, 0x70, 0x38, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0xff, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xf8, 0x7c, 0xf8, 0x7c, 0xfc, 0xfc, 0x7f, 0xf8 }; +const unsigned char c_NO[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x37, 0xb0, 0x23, 0x10, 0x30, 0x30, 0x38, 0x70, 0x38, 0x70, 0x30, 0x30, 0x23, 0x10, 0x37, 0xb0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char *C_table[] = {c1, c2, c3, Lightning, c5, c6, c7}; + +//设置(陈星汉认为语言是一种低像素的表达方式,容易造成隔阂; 交互界面设计尽可能形象化) +// width: 14, height: 14 +const unsigned char QRC[] PROGMEM = { 0x05, 0x80, 0x74, 0xb8, 0x57, 0xa8, 0x76, 0xb8, 0x05, 0x80, 0xf9, 0x7c, 0x46, 0x94, 0xaa, 0xa8, 0xf9, 0x7c, 0x06, 0x88, 0x74, 0xa8, 0x57, 0x8c, 0x75, 0x74, 0x06, 0x98 }; +const unsigned char Set0[] PROGMEM = { 0x88, 0x24, 0x08, 0x20, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x39, 0x30, 0x3b, 0xb0, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set1[] PROGMEM = { 0xf8, 0x7c, 0xf3, 0x3c, 0xf4, 0xbc, 0xf6, 0xbc, 0xf4, 0xbc, 0xf6, 0xbc, 0xf4, 0xbc, 0xe4, 0x9c, 0xc8, 0x4c, 0xd0, 0x2c, 0xd0, 0x2c, 0xc8, 0x4c, 0xe7, 0x9c, 0xf0, 0x3c }; +const unsigned char Set2[] PROGMEM = { 0x8f, 0xc4, 0x10, 0x20, 0x20, 0x10, 0x4c, 0xc8, 0x9f, 0xe4, 0x3d, 0xf0, 0x3d, 0xf0, 0x1d, 0xe0, 0x3e, 0xf0, 0x3f, 0x70, 0x9f, 0xe4, 0x8c, 0xc4, 0x00, 0x00, 0x30, 0x30 }; +const unsigned char Set3[] PROGMEM = { 0xc3, 0xfc, 0x18, 0x00, 0x18, 0x00, 0xc3, 0xfc, 0xff, 0xfc, 0xff, 0x0c, 0x00, 0x60, 0x00, 0x60, 0xff, 0x0c, 0xff, 0xfc, 0xf0, 0xfc, 0x06, 0x00, 0x06, 0x00, 0xf0, 0xfc }; +const unsigned char Set4[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set4F[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x38, 0x30, 0x33, 0x10, 0x3f, 0x90, 0x38, 0x10, 0x33, 0x90, 0x27, 0x90, 0x26, 0x10, 0x30, 0x90, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set4FF[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x24, 0x30, 0x21, 0x90, 0x27, 0x90, 0x27, 0x30, 0x20, 0x70, 0x27, 0xf0, 0x23, 0x30, 0x30, 0x70, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set5[] PROGMEM = { 0xfc, 0xfc, 0xf8, 0x7c, 0xe0, 0x1c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0x80, 0x04, 0x80, 0x04, 0xff, 0xfc, 0xf8, 0x7c, 0xfc, 0xfc }; +const unsigned char Set5_1[] PROGMEM = { 0xfc, 0xf4, 0xf8, 0x60, 0xe0, 0x44, 0xc0, 0x8c, 0xc1, 0x1c, 0xc2, 0x2c, 0xc4, 0x4c, 0xc8, 0x8c, 0xd1, 0x0c, 0xa2, 0x04, 0xc4, 0x04, 0x8f, 0xfc, 0x18, 0x7c, 0xbc, 0xfc }; +const unsigned char Set6[] PROGMEM = { 0xf8, 0x7c, 0xe0, 0x1c, 0xc0, 0x0c, 0xcf, 0xcc, 0xcf, 0xcc, 0xcf, 0xcc, 0xcf, 0xcc, 0xcf, 0xcc, 0xcf, 0xcc, 0xcf, 0xcc, 0xc8, 0x4c, 0xcf, 0xcc, 0xc0, 0x0c, 0xe0, 0x1c }; +const unsigned char Set_LANG[] PROGMEM = { 0xf0, 0x3c, 0xce, 0x4c, 0xbc, 0x34, 0xb8, 0x14, 0x18, 0x80, 0x10, 0x80, 0x42, 0x30, 0x60, 0x78, 0x60, 0xf8, 0x44, 0xc0, 0x80, 0x04, 0xb8, 0x84, 0xcf, 0xcc, 0xf0, 0x3c }; +const unsigned char Set7[] PROGMEM = { 0x80, 0x0c, 0x00, 0x1c, 0x3f, 0xf4, 0x3f, 0xe0, 0x3f, 0xc4, 0x37, 0x8c, 0x23, 0x18, 0x30, 0x30, 0x38, 0x70, 0x3c, 0xf0, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set11[] PROGMEM = { 0xf3, 0xfc, 0xe7, 0xfc, 0xce, 0x0c, 0x8e, 0x1c, 0x9f, 0x9c, 0x1f, 0x3c, 0x1f, 0x0c, 0x0e, 0x0c, 0x0f, 0xfc, 0x87, 0xf8, 0x81, 0xe4, 0xc0, 0x0c, 0xe0, 0x1c, 0xf8, 0x7c }; +const unsigned char Set8[] PROGMEM = { 0x81, 0xdc, 0x55, 0x9c, 0x29, 0x04, 0x55, 0x00, 0x29, 0x90, 0x55, 0xd0, 0x03, 0xfc, 0xff, 0x00, 0x2e, 0x00, 0x26, 0x70, 0x02, 0x50, 0x82, 0x70, 0xe6, 0x00, 0xee, 0x04 }; +const unsigned char Set9[] PROGMEM = { 0xf0, 0x3c, 0xce, 0x0c, 0xbf, 0x04, 0xb3, 0x04, 0x73, 0x00, 0x7f, 0x00, 0x7e, 0x00, 0x7c, 0x00, 0x7c, 0x00, 0x7c, 0x60, 0xbc, 0x64, 0xbe, 0x04, 0xcf, 0x0c, 0xf0, 0x3c }; +const unsigned char Set10[] PROGMEM = { 0xf8, 0x7c, 0xf7, 0xbc, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0xbf, 0xf4, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xbf, 0xf4, 0xc0, 0x0c }; +const unsigned char Set13[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x34, 0xb0, 0x24, 0x90, 0x24, 0x90, 0x27, 0x90, 0x23, 0x10, 0x30, 0x30, 0x38, 0x70, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set12[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x20, 0x10, 0x20, 0x10, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set14[] PROGMEM = { 0xff, 0x7c, 0xfe, 0x7c, 0xfc, 0xec, 0xe8, 0xdc, 0xc8, 0x4c, 0x98, 0x4c, 0x88, 0x24, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x1c }; +const unsigned char Set15[] PROGMEM = { 0x15, 0x54, 0x3f, 0xfc, 0x15, 0x54, 0x3f, 0xfc, 0x15, 0x54, 0x3c, 0x04, 0x14, 0x04, 0x3c, 0xfc, 0x14, 0x54, 0x3c, 0xfc, 0x00, 0x54, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char Set16[] PROGMEM = { 0x15, 0x54, 0x3f, 0xf8, 0x15, 0x50, 0x3f, 0xf0, 0x15, 0x50, 0x38, 0x70, 0x10, 0x20, 0x31, 0x04, 0x13, 0x8c, 0x22, 0xa8, 0x17, 0xfc, 0x2a, 0xa8, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char Set17[] PROGMEM = { 0x80, 0x00, 0xbf, 0xf8, 0x1f, 0xf8, 0xb0, 0x08, 0x18, 0x08, 0xb9, 0xe8, 0x19, 0xb8, 0xb8, 0x38, 0x18, 0x38, 0xb9, 0xb8, 0xb9, 0xf8, 0xb0, 0xf8, 0xbf, 0xf8, 0x80, 0x00 }; +const unsigned char Set18[] PROGMEM = { 0x80, 0x00, 0xbf, 0xf8, 0x1f, 0xf8, 0xb0, 0x28, 0x1f, 0xf8, 0xb4, 0x08, 0x1f, 0xf8, 0xb1, 0x08, 0x1f, 0xf8, 0xb0, 0x48, 0xbf, 0xf8, 0xb2, 0x88, 0xbf, 0xf8, 0x80, 0x00 }; +const unsigned char Lang_CN[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x20, 0x10, 0x24, 0x90, 0x24, 0x90, 0x20, 0x10, 0x3c, 0xf0, 0x3c, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Lang_EN[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x38, 0x70, 0x30, 0x30, 0x23, 0x10, 0x27, 0x90, 0x20, 0x10, 0x20, 0x10, 0x27, 0x90, 0x27, 0x90, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Lang_JP[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3d, 0xf0, 0x20, 0x10, 0x3b, 0xf0, 0x3b, 0x70, 0x30, 0x30, 0x2b, 0x50, 0x2a, 0xd0, 0x31, 0xb0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Save[] PROGMEM = { 0x00, 0x04, 0x58, 0x08, 0x58, 0x08, 0x58, 0x08, 0x40, 0x08, 0x7f, 0xf8, 0x60, 0x18, 0x5f, 0xe8, 0x5b, 0x68, 0x5f, 0xe8, 0x5b, 0x68, 0x1c, 0xe8, 0x5f, 0xe8, 0x00, 0x00 }; +const unsigned char Lock[] PROGMEM = { 0xe0, 0x1c, 0xc0, 0x0c, 0x8f, 0xc4, 0x9f, 0xe4, 0x9f, 0xe4, 0x9f, 0xe4, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0x00, 0x80, 0x04 }; +const unsigned char Set19[] PROGMEM = { 0xf8, 0x7c, 0x80, 0x04, 0xbc, 0xf4, 0x3f, 0xf0, 0x38, 0x70, 0xb7, 0xb4, 0xb6, 0xb4, 0xb5, 0xb4, 0xb7, 0xb4, 0x38, 0x70, 0x3f, 0xf0, 0xbc, 0xf4, 0x80, 0x04, 0xf8, 0x7c }; +const unsigned char *Ico_table[] = { + Set0, Set1, Set2, Set3, Set4, Set5, Set19, Set6, Lock, Set_LANG, QRC, Set7, + Set8, Set9, Set0, Set10, Set12, Save, + Set0, Set11, Set14, Save, + Set11, Set13, Set14, Save, + Set15, Set16, + Set17, Set18, //5 + Set5_1, Set5, + c_NO, Set7, + Lang_CN, Lang_EN, Lang_JP, //8 + Set4, Set4F, Save, +}; +const byte Menu_table[] = {12, 6, 4, 4, 2, 2, 2, 2, 3, 3}; //菜单 标签 温控 定时 控制方式 首页 蜂鸣器 标签删除确认界面 语言菜单 翻转 显示 +byte MenuLevel = 0; //菜单层级 + +/*//////////////////////////////////////////////////////////////////////////////////////////////////// + 多语言支持 + Multilingual support + /////////////////////////////////////////////////////////////////////////////////////////////////// +*/ +/* + 英语库 ENGLISH +*/ +const char EN_0[] PROGMEM = "Tip"; +const char EN_1[] PROGMEM = "Temp"; +const char EN_2[] PROGMEM = "Timer"; +const char EN_3[] PROGMEM = "Control"; +const char EN_4[] PROGMEM = "Screen"; +const char EN_5[] PROGMEM = "Buzzer"; +const char EN_6[] PROGMEM = "LOW Vol"; +const char EN_7[] PROGMEM = "Lang"; +const char EN_8[] PROGMEM = "Return"; +const char EN_9[] PROGMEM = "Change"; +const char EN_10[] PROGMEM = "Calibrate"; +const char EN_11[] PROGMEM = "Rename"; +const char EN_12[] PROGMEM = "Delete"; +const char EN_13[] PROGMEM = "Add"; +const char EN_14[] PROGMEM = "Save"; +const char EN_15[] PROGMEM = "Default"; +const char EN_16[] PROGMEM = "Sleep"; +const char EN_17[] PROGMEM = "Boost"; +const char EN_18[] PROGMEM = "Save"; +const char EN_19[] PROGMEM = "Sleep"; +const char EN_20[] PROGMEM = "Off"; +const char EN_21[] PROGMEM = "Boost"; +const char EN_22[] PROGMEM = "Save"; +const char EN_23[] PROGMEM = "Direct"; +const char EN_24[] PROGMEM = "PID"; +const char EN_25[] PROGMEM = "Big"; +const char EN_26[] PROGMEM = "Infos"; +const char EN_27[] PROGMEM = "OFF"; +const char EN_28[] PROGMEM = "ON"; +const char EN_29[] PROGMEM = "NO"; +const char EN_30[] PROGMEM = "YES"; +const char EN_31[] PROGMEM = "CN"; +const char EN_32[] PROGMEM = "EN"; +const char EN_33[] PROGMEM = "NO"; +const char EN_34[] PROGMEM = "OK"; +const char EN_35[] PROGMEM = "Main Screen"; +const char EN_36[] PROGMEM = "Flip"; +const char EN_37[] PROGMEM = "Save"; +const char EN_38[] PROGMEM = "About"; +const char EN_39[] PROGMEM = "JP"; +const char EN_40[] PROGMEM = "Lock"; +const char EN_41[] PROGMEM = "Rotary"; +const char *const EN_table[] PROGMEM = {EN_0, EN_1, EN_2, EN_3, EN_4, EN_5, EN_41, EN_6, EN_40, EN_7, EN_38, EN_8, EN_9, EN_10, EN_11, EN_12, EN_13, EN_14, EN_15, EN_16, EN_17, EN_18, EN_19, EN_20, EN_21, EN_22, EN_23, EN_24, EN_25, EN_26, EN_27, EN_28, EN_29, EN_30, EN_31, EN_32, EN_39, EN_35, EN_36, EN_37,}; + +/* + #!/usr/bin/python + # -*- coding: UTF-8 -*- + for num in range(0,38): + print("EN_",end="") + print(num,end='') + print(",",end="") +*/ +/* + 中文语言库 CHINESE + + //////////////////////////////////////////////////////////////////////////////////////////////////////// + 本地化提示:你可以按照位图的大小,把这里的文字位图替换成你的语言,确保位图分辨率一致即可,我们欢迎你把程序翻译为你当地的语言! + Localization tips: you can according to the size of the bitmap, + replace the text bitmap here with your language, + ensure that the bitmap resolution is consistent, + we welcome you to translate the program into your local language! + //////////////////////////////////////////////////////////////////////////////////////////////////////// +*/ +//width:28,height:14 主界面中文提示 +//Main Screen +//错误-ERROR +const unsigned char S1[] PROGMEM = { 0x20, 0x92, 0x1f, 0xc0, 0x3d, 0xf9, 0x90, 0x40, 0x20, 0x90, 0x90, 0x40, 0x40, 0x90, 0x1f, 0xc0, 0x7b, 0xff, 0x00, 0x00, 0xa0, 0x01, 0x3f, 0xe0, 0x21, 0xf9, 0x02, 0x00, 0xfd, 0x09, 0x02, 0x00, 0x21, 0x09, 0x7f, 0xf0, 0x21, 0xf9, 0x05, 0x00, 0x21, 0x09, 0x45, 0x00, 0x29, 0x09, 0x88, 0x80, 0x31, 0xf9, 0x10, 0x70, 0x21, 0x08, 0x20, 0x20 }; +//关机-OFF +const unsigned char S2[] PROGMEM = { 0x10, 0x40, 0x47, 0xc0, 0x17, 0xfc, 0x44, 0x40, 0x20, 0x03, 0xf4, 0x40, 0x23, 0xf8, 0x44, 0x40, 0x62, 0x08, 0xc4, 0x40, 0xa3, 0xf8, 0xe4, 0x40, 0x20, 0x01, 0x54, 0x40, 0x2f, 0xfd, 0x44, 0x40, 0x28, 0x06, 0x44, 0x40, 0x23, 0xf8, 0x44, 0x40, 0x20, 0x40, 0x44, 0x50, 0x20, 0x40, 0x48, 0x50, 0x21, 0x40, 0x50, 0x30, 0x20, 0x80, 0x40, 0x00 }; +//休眠-SLEEP +const unsigned char S3[] PROGMEM = { 0x10, 0x83, 0xdf, 0xc0, 0x10, 0x82, 0x50, 0x40, 0x20, 0x82, 0x50, 0x40, 0x2f, 0xff, 0xdf, 0xc0, 0x60, 0x82, 0x52, 0x00, 0x61, 0xc2, 0x52, 0x00, 0xa1, 0xc2, 0x5f, 0xe0, 0x22, 0xa3, 0xd2, 0x00, 0x22, 0xa2, 0x51, 0x00, 0x24, 0x92, 0x51, 0x00, 0x28, 0x8e, 0x50, 0x90, 0x30, 0x8b, 0xd4, 0x50, 0x20, 0x82, 0x58, 0x30, 0x20, 0x80, 0x10, 0x10 }; +//提温-BOOST +const unsigned char S4[] PROGMEM = { 0x23, 0xf2, 0x1f, 0xc0, 0x22, 0x11, 0x10, 0x40, 0xfb, 0xf0, 0x90, 0x40, 0x22, 0x12, 0x1f, 0xc0, 0x2a, 0x11, 0x10, 0x40, 0x33, 0xf1, 0x10, 0x40, 0x60, 0x00, 0x5f, 0xc0, 0xaf, 0xfc, 0x80, 0x00, 0x20, 0x41, 0x3f, 0xe0, 0x22, 0x43, 0x25, 0x20, 0x22, 0x79, 0x25, 0x20, 0x22, 0x41, 0x25, 0x20, 0xa5, 0x41, 0x25, 0x20, 0x48, 0xfd, 0x7f, 0xf0 }; +//正常工作-WORKY +const unsigned char S5[] PROGMEM = { 0x7f, 0xf8, 0x48, 0x80, 0x02, 0x00, 0x49, 0x00, 0x02, 0x01, 0xff, 0xf0, 0x02, 0x01, 0x00, 0x10, 0x02, 0x02, 0x7f, 0x20, 0x22, 0x00, 0x41, 0x00, 0x23, 0xf0, 0x7f, 0x00, 0x22, 0x00, 0x08, 0x00, 0x22, 0x00, 0xff, 0x80, 0x22, 0x00, 0x88, 0x80, 0x22, 0x00, 0x88, 0x80, 0x22, 0x00, 0x8a, 0x80, 0x22, 0x00, 0x89, 0x00, 0xff, 0xfc, 0x08, 0x00 }; +//加热-HEAT +const unsigned char S6[] PROGMEM = { 0x0f, 0x42, 0x1f, 0xc0, 0x78, 0x41, 0x10, 0x40, 0x08, 0x40, 0x90, 0x40, 0x08, 0x42, 0x1f, 0xc0, 0x08, 0x41, 0x10, 0x40, 0xff, 0xfd, 0x10, 0x40, 0x08, 0x40, 0x5f, 0xc0, 0x08, 0x40, 0x80, 0x00, 0x08, 0x41, 0x3f, 0xe0, 0x08, 0x43, 0x25, 0x20, 0x10, 0x41, 0x25, 0x20, 0x10, 0x41, 0x25, 0x20, 0x20, 0x41, 0x25, 0x20, 0x40, 0x41, 0x7f, 0xf0 }; +//维持-HOLD +const unsigned char S7[] PROGMEM = { 0x11, 0x40, 0x82, 0x00, 0x21, 0x20, 0x8f, 0xe0, 0x23, 0xfc, 0x82, 0x00, 0x4a, 0x23, 0xe2, 0x00, 0xfe, 0x20, 0x9f, 0xf0, 0x13, 0xf8, 0x80, 0x80, 0x22, 0x20, 0xc0, 0x80, 0x42, 0x21, 0xbf, 0xf0, 0xfb, 0xfa, 0x88, 0x80, 0x02, 0x20, 0x84, 0x80, 0x02, 0x20, 0x84, 0x80, 0x1a, 0x20, 0x80, 0x80, 0xe3, 0xfe, 0x82, 0x80, 0x02, 0x01, 0x01, 0x00 }; +const unsigned char *S_table[] = {S1, S2, S3, S4, S5, S6, S7}; + +// 菜单 width:36,height:16 +//MENU Oj +/* + The order here(↓) can refer to EN_table(↑↑↑) +*/ +const unsigned char t0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x7f, 0x90, 0xf8, 0x00, 0x01, 0x08, 0x08, 0x88, 0x00, 0x0a, 0x10, 0x08, 0x88, 0x00, 0x04, 0x7f, 0x01, 0x07, 0x00, 0x1f, 0xc1, 0x3a, 0x00, 0x00, 0x05, 0x49, 0x09, 0xfc, 0x00, 0x04, 0x49, 0x08, 0x84, 0x00, 0x04, 0x49, 0x08, 0x88, 0x00, 0x04, 0x49, 0x08, 0x48, 0x00, 0x04, 0x49, 0x08, 0x50, 0x00, 0x04, 0x49, 0x0a, 0x20, 0x00, 0x04, 0x16, 0x0c, 0x58, 0x00, 0x14, 0x21, 0x89, 0x87, 0x00, 0x08, 0xc0, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfe, 0x08, 0x20, 0x00, 0x08, 0x82, 0x0b, 0xff, 0x00, 0x04, 0x82, 0x0a, 0x01, 0x00, 0x10, 0xfe, 0x3c, 0x51, 0x00, 0x08, 0x82, 0x08, 0x88, 0x00, 0x08, 0x82, 0x09, 0x04, 0x00, 0x02, 0xfe, 0x0c, 0x00, 0x00, 0x04, 0x00, 0x19, 0xfc, 0x00, 0x09, 0xff, 0x28, 0x20, 0x00, 0x19, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x2b, 0xff, 0x00, 0x0b, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x20, 0x3e, 0x04, 0x00, 0x1f, 0xff, 0xa2, 0x04, 0x00, 0x10, 0x00, 0xa2, 0xff, 0x00, 0x00, 0x01, 0x22, 0x04, 0x00, 0x0f, 0xfe, 0x22, 0x04, 0x00, 0x00, 0x40, 0x3e, 0x44, 0x00, 0x00, 0x40, 0x22, 0x24, 0x00, 0x04, 0x40, 0x22, 0x24, 0x00, 0x04, 0x7c, 0x22, 0x04, 0x00, 0x04, 0x40, 0x22, 0x04, 0x00, 0x0a, 0x40, 0x3e, 0x04, 0x00, 0x09, 0x40, 0x22, 0x24, 0x00, 0x10, 0xff, 0x80, 0x14, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00 }; +const unsigned char t3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x10, 0x12, 0x02, 0x00, 0x05, 0xff, 0x9f, 0xd2, 0x00, 0x05, 0x00, 0x92, 0x12, 0x00, 0x1e, 0x28, 0xa2, 0x12, 0x00, 0x04, 0x44, 0x3f, 0xf2, 0x00, 0x04, 0x82, 0x02, 0x12, 0x00, 0x06, 0x00, 0x02, 0x12, 0x00, 0x0c, 0xfe, 0x1f, 0xd2, 0x00, 0x14, 0x10, 0x12, 0x52, 0x00, 0x04, 0x10, 0x12, 0x42, 0x00, 0x04, 0x10, 0x13, 0x42, 0x00, 0x04, 0x10, 0x12, 0x82, 0x00, 0x15, 0xff, 0x82, 0x0a, 0x00, 0x08, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x0f, 0xf8, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x04, 0x02, 0x3f, 0xfe, 0x00, 0x04, 0x02, 0x00, 0x80, 0x00, 0x07, 0xfe, 0x00, 0x80, 0x00, 0x00, 0x90, 0x04, 0x90, 0x00, 0x08, 0x91, 0x0c, 0x88, 0x00, 0x06, 0x93, 0x10, 0x86, 0x00, 0x02, 0x94, 0x20, 0x82, 0x00, 0x00, 0x90, 0x00, 0x80, 0x00, 0x00, 0x90, 0x02, 0x80, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t5[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x1f, 0xff, 0x9f, 0xfc, 0x00, 0x00, 0x40, 0x04, 0x10, 0x00, 0x0f, 0xff, 0x02, 0x20, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x08, 0x42, 0x0f, 0xf8, 0x00, 0x08, 0x42, 0x08, 0x08, 0x00, 0x0f, 0xfe, 0x08, 0x08, 0x00, 0x08, 0x02, 0x0f, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x08, 0x00, 0x08, 0x00, 0x08, 0x08, 0x00, 0x08, 0x00, 0x0f, 0xf8, 0x00, 0x10, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t6[] PROGMEM = { 0x09, 0xff, 0x00, 0x40, 0x00, 0x04, 0x20, 0x3f, 0xff, 0x00, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x1c, 0x42, 0x0f, 0xfc, 0x00, 0x04, 0x42, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x04, 0x00, 0x0f, 0xfc, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x04, 0x81, 0x00, 0x00, 0x00, 0x05, 0x81, 0x0f, 0xfc, 0x00, 0x06, 0x81, 0x08, 0x04, 0x00, 0x04, 0xff, 0x08, 0x04, 0x00, 0x00, 0x81, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t7[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xfe, 0x00, 0x01, 0x00, 0x08, 0x20, 0x00, 0x03, 0xff, 0x08, 0x20, 0x00, 0x02, 0x01, 0x08, 0x20, 0x00, 0x04, 0x22, 0x08, 0x20, 0x00, 0x08, 0x20, 0x0b, 0xfe, 0x00, 0x10, 0x20, 0x08, 0x20, 0x00, 0x00, 0x50, 0x08, 0x28, 0x00, 0x00, 0x50, 0x08, 0x24, 0x00, 0x00, 0x88, 0x08, 0x22, 0x00, 0x00, 0x88, 0x10, 0x20, 0x00, 0x01, 0x04, 0x10, 0x20, 0x00, 0x02, 0x03, 0xa7, 0xff, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char Back[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x00, 0x08, 0xf8, 0x3f, 0xfe, 0x00, 0x04, 0x80, 0x20, 0x02, 0x00, 0x00, 0x80, 0x20, 0x02, 0x00, 0x00, 0xbe, 0x23, 0xe2, 0x00, 0x1c, 0x82, 0x22, 0x22, 0x00, 0x04, 0xa4, 0x22, 0x22, 0x00, 0x04, 0x94, 0x22, 0x22, 0x00, 0x04, 0x88, 0x22, 0x22, 0x00, 0x04, 0x94, 0x23, 0xe2, 0x00, 0x05, 0x22, 0x20, 0x02, 0x00, 0x05, 0x42, 0x20, 0x02, 0x00, 0x0a, 0x00, 0x3f, 0xfe, 0x00, 0x11, 0xff, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t1_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x20, 0x90, 0x00, 0x02, 0x7f, 0x98, 0x90, 0x00, 0x1f, 0x80, 0x09, 0xff, 0x00, 0x02, 0x22, 0x01, 0x10, 0x00, 0x06, 0x21, 0x8b, 0x10, 0x00, 0x07, 0x62, 0x8d, 0xfe, 0x00, 0x0a, 0xa2, 0x09, 0x10, 0x00, 0x0a, 0x14, 0x11, 0x10, 0x00, 0x12, 0x14, 0x31, 0xfe, 0x00, 0x02, 0x08, 0x11, 0x10, 0x00, 0x02, 0x14, 0x11, 0x10, 0x00, 0x02, 0x22, 0x11, 0x10, 0x00, 0x02, 0x43, 0x91, 0xff, 0x00, 0x02, 0x81, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t1_2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x80, 0x00, 0x00, 0x50, 0x01, 0xfc, 0x00, 0x00, 0x88, 0x01, 0x04, 0x00, 0x01, 0x04, 0x03, 0x08, 0x00, 0x06, 0xfb, 0x04, 0x90, 0x00, 0x08, 0x00, 0xc0, 0x60, 0x00, 0x07, 0xdf, 0x01, 0x80, 0x00, 0x04, 0x51, 0x06, 0x00, 0x00, 0x04, 0x51, 0x1b, 0xfe, 0x00, 0x04, 0x51, 0x02, 0x02, 0x00, 0x07, 0xd9, 0x02, 0x02, 0x00, 0x04, 0x56, 0x02, 0x02, 0x00, 0x00, 0x10, 0x03, 0xfe, 0x00, 0x00, 0x10, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t1_3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x78, 0xbc, 0x20, 0x00, 0x09, 0x48, 0xa4, 0x50, 0x00, 0x09, 0x4a, 0xa8, 0x50, 0x00, 0x09, 0x4a, 0xa8, 0x88, 0x00, 0x09, 0x4a, 0xb1, 0x04, 0x00, 0x1f, 0xfe, 0xaa, 0xfb, 0x00, 0x09, 0x4a, 0xa4, 0x20, 0x00, 0x09, 0x4a, 0xa4, 0x20, 0x00, 0x09, 0x4a, 0xa7, 0xfe, 0x00, 0x09, 0x4a, 0xb4, 0x20, 0x00, 0x09, 0x48, 0xa9, 0x24, 0x00, 0x0b, 0x48, 0xa2, 0x22, 0x00, 0x08, 0x8a, 0xa4, 0xa2, 0x00, 0x11, 0x19, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t1_4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x10, 0x00, 0x1f, 0xdc, 0x3e, 0xfe, 0x00, 0x08, 0x90, 0x02, 0x12, 0x00, 0x05, 0x10, 0x04, 0xff, 0x00, 0x1f, 0xdf, 0x84, 0x12, 0x00, 0x02, 0x12, 0x0c, 0xfe, 0x00, 0x1f, 0xd2, 0x02, 0x10, 0x00, 0x02, 0x12, 0x22, 0xfe, 0x00, 0x0a, 0x92, 0x14, 0x10, 0x00, 0x0a, 0x52, 0x14, 0x10, 0x00, 0x12, 0x22, 0x0d, 0xff, 0x00, 0x02, 0x22, 0x08, 0x10, 0x00, 0x0a, 0x42, 0x14, 0x10, 0x00, 0x04, 0x02, 0x23, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//默认 +const unsigned char t2_0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc8, 0x10, 0x20, 0x00, 0x12, 0x4a, 0x0c, 0x20, 0x00, 0x1a, 0xc9, 0x04, 0x20, 0x00, 0x17, 0x48, 0x00, 0x20, 0x00, 0x1f, 0xff, 0xb8, 0x20, 0x00, 0x02, 0x08, 0x08, 0x50, 0x00, 0x1f, 0xc8, 0x08, 0x50, 0x00, 0x02, 0x08, 0x08, 0x50, 0x00, 0x03, 0xc8, 0x08, 0x48, 0x00, 0x1e, 0x14, 0x08, 0x88, 0x00, 0x01, 0x54, 0x0a, 0x88, 0x00, 0x15, 0x22, 0x0c, 0x84, 0x00, 0x14, 0x43, 0x89, 0x07, 0x00, 0x00, 0x81, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//休眠 +const unsigned char t2_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x3d, 0xfc, 0x00, 0x02, 0x10, 0x25, 0x04, 0x00, 0x04, 0x10, 0x25, 0x04, 0x00, 0x05, 0xff, 0xbd, 0xfc, 0x00, 0x0c, 0x10, 0x25, 0x20, 0x00, 0x0c, 0x38, 0x25, 0x20, 0x00, 0x14, 0x38, 0x25, 0xfe, 0x00, 0x04, 0x54, 0x3d, 0x20, 0x00, 0x04, 0x54, 0x25, 0x10, 0x00, 0x04, 0x92, 0x25, 0x10, 0x00, 0x05, 0x11, 0xa5, 0x09, 0x00, 0x06, 0x11, 0x3d, 0x45, 0x00, 0x04, 0x10, 0x25, 0x83, 0x00, 0x04, 0x10, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//提温 +const unsigned char t2_2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x21, 0xfc, 0x00, 0x04, 0x42, 0x11, 0x04, 0x00, 0x1f, 0x7e, 0x09, 0x04, 0x00, 0x04, 0x42, 0x21, 0xfc, 0x00, 0x05, 0x42, 0x11, 0x04, 0x00, 0x06, 0x7e, 0x11, 0x04, 0x00, 0x0c, 0x00, 0x05, 0xfc, 0x00, 0x15, 0xff, 0x88, 0x00, 0x00, 0x04, 0x08, 0x13, 0xfe, 0x00, 0x04, 0x48, 0x32, 0x52, 0x00, 0x04, 0x4f, 0x12, 0x52, 0x00, 0x04, 0x48, 0x12, 0x52, 0x00, 0x14, 0xa8, 0x12, 0x52, 0x00, 0x09, 0x1f, 0x97, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//关机 +const unsigned char t3_1[] PROGMEM = { 0x01, 0x04, 0x04, 0x7c, 0x00, 0x00, 0x88, 0x04, 0x44, 0x00, 0x0f, 0xff, 0x3f, 0x44, 0x00, 0x00, 0x20, 0x04, 0x44, 0x00, 0x00, 0x20, 0x0c, 0x44, 0x00, 0x00, 0x20, 0x0e, 0x44, 0x00, 0x1f, 0xff, 0x95, 0x44, 0x00, 0x00, 0x20, 0x14, 0x44, 0x00, 0x00, 0x50, 0x24, 0x44, 0x00, 0x00, 0x50, 0x04, 0x44, 0x00, 0x00, 0x88, 0x04, 0x45, 0x00, 0x01, 0x04, 0x04, 0x85, 0x00, 0x06, 0x03, 0x85, 0x03, 0x00, 0x18, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t_4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x20, 0x00, 0x0f, 0xff, 0x09, 0xfc, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x20, 0x3e, 0x88, 0x00, 0x03, 0xfe, 0x08, 0x50, 0x00, 0x02, 0x02, 0x0b, 0xfe, 0x00, 0x03, 0xfe, 0x0c, 0x40, 0x00, 0x02, 0x02, 0x18, 0x40, 0x00, 0x03, 0xfe, 0x2b, 0xfe, 0x00, 0x02, 0x02, 0x08, 0x48, 0x00, 0x03, 0xfe, 0x08, 0x88, 0x00, 0x02, 0x02, 0x08, 0x50, 0x00, 0x02, 0x02, 0x28, 0x30, 0x00, 0x1f, 0xff, 0x91, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_PID[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc3, 0xf1, 0xe0, 0x00, 0x0f, 0xe3, 0xf1, 0xf8, 0x00, 0x0c, 0x70, 0xc1, 0x9e, 0x00, 0x0c, 0x30, 0xc1, 0x86, 0x00, 0x0c, 0x30, 0xc1, 0x83, 0x00, 0x0c, 0x30, 0xc1, 0x83, 0x00, 0x0c, 0x60, 0xc1, 0x83, 0x00, 0x0c, 0x60, 0xc1, 0x83, 0x00, 0x0f, 0xc0, 0xc1, 0x83, 0x00, 0x0f, 0xc0, 0xc1, 0x86, 0x00, 0x0c, 0x00, 0xc1, 0x86, 0x00, 0x0c, 0x00, 0xc1, 0x98, 0x00, 0x0c, 0x03, 0xf1, 0xf8, 0x00, 0x0c, 0x03, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t5_0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0x88, 0x40, 0x00, 0x0a, 0x24, 0x10, 0x40, 0x00, 0x11, 0x42, 0x10, 0xfe, 0x00, 0x04, 0x00, 0x22, 0x82, 0x00, 0x02, 0xff, 0x3d, 0x02, 0x00, 0x08, 0x01, 0x0a, 0x42, 0x00, 0x09, 0xf9, 0x10, 0x32, 0x00, 0x09, 0x09, 0x20, 0x12, 0x00, 0x09, 0xf9, 0x3e, 0x02, 0x00, 0x09, 0x09, 0x00, 0x02, 0x00, 0x09, 0x09, 0x0e, 0x02, 0x00, 0x09, 0xf9, 0x30, 0x22, 0x00, 0x08, 0x05, 0x00, 0x14, 0x00, 0x08, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t5_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x44, 0x10, 0xfe, 0x00, 0x04, 0x28, 0x10, 0x92, 0x00, 0x05, 0xff, 0x22, 0x92, 0x00, 0x00, 0x10, 0x3c, 0x92, 0x00, 0x00, 0x10, 0x08, 0x92, 0x00, 0x1c, 0xfe, 0x10, 0x92, 0x00, 0x04, 0x10, 0x20, 0xfe, 0x00, 0x04, 0x10, 0x3e, 0x92, 0x00, 0x05, 0xff, 0x80, 0x92, 0x00, 0x04, 0x10, 0x00, 0x92, 0x00, 0x05, 0x10, 0x0e, 0x92, 0x00, 0x06, 0x10, 0x30, 0x92, 0x00, 0x04, 0x10, 0x00, 0xfe, 0x00, 0x00, 0x10, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t5_3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x3f, 0xfe, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x07, 0xfe, 0x0f, 0xf8, 0x00, 0x04, 0x02, 0x08, 0x08, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x07, 0xfe, 0x08, 0x88, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x07, 0xfe, 0x08, 0x88, 0x00, 0x04, 0x02, 0x09, 0x48, 0x00, 0x04, 0x02, 0x02, 0x30, 0x00, 0x07, 0xfe, 0x04, 0x0c, 0x00, 0x04, 0x02, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t_off[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x04, 0xff, 0x00, 0x00, 0x44, 0x02, 0x01, 0x00, 0x07, 0xff, 0x90, 0x21, 0x00, 0x00, 0x10, 0x10, 0x21, 0x00, 0x00, 0x10, 0x17, 0xfd, 0x00, 0x00, 0x10, 0x10, 0x21, 0x00, 0x0f, 0xff, 0xd0, 0x61, 0x00, 0x00, 0x10, 0x10, 0xa1, 0x00, 0x00, 0x28, 0x11, 0x21, 0x00, 0x00, 0x28, 0x12, 0x21, 0x00, 0x00, 0x44, 0x14, 0x21, 0x00, 0x00, 0x82, 0x10, 0xa1, 0x00, 0x03, 0x01, 0xd0, 0x45, 0x00, 0x0c, 0x00, 0x90, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_on[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x20, 0x00, 0x00, 0x84, 0x07, 0xff, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x0f, 0xff, 0xc7, 0xff, 0x00, 0x00, 0x84, 0x04, 0x00, 0x00, 0x00, 0x84, 0x04, 0x00, 0x00, 0x00, 0x84, 0x05, 0xff, 0x00, 0x00, 0x84, 0x05, 0x01, 0x00, 0x01, 0x04, 0x09, 0x01, 0x00, 0x01, 0x04, 0x09, 0x01, 0x00, 0x02, 0x04, 0x11, 0xff, 0x00, 0x04, 0x04, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t_NO[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x04, 0x91, 0x00, 0x04, 0x40, 0x02, 0x52, 0x00, 0x04, 0x7f, 0x90, 0x54, 0x00, 0x04, 0x50, 0x88, 0xff, 0x00, 0x07, 0xd0, 0x84, 0x81, 0x00, 0x04, 0x51, 0x00, 0x81, 0x00, 0x04, 0x49, 0x01, 0xff, 0x00, 0x07, 0xca, 0x02, 0x81, 0x00, 0x04, 0x44, 0x04, 0x81, 0x00, 0x04, 0x4a, 0x1c, 0xff, 0x00, 0x07, 0xea, 0x04, 0x81, 0x00, 0x0c, 0x51, 0x04, 0x81, 0x00, 0x00, 0x61, 0xc4, 0x85, 0x00, 0x00, 0x40, 0x80, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_OK[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xdf, 0x10, 0x20, 0x00, 0x02, 0x12, 0x0c, 0x20, 0x00, 0x02, 0x24, 0x04, 0x20, 0x00, 0x04, 0x7f, 0x80, 0x20, 0x00, 0x04, 0x24, 0xb8, 0x20, 0x00, 0x0f, 0xa4, 0x88, 0x50, 0x00, 0x14, 0xbf, 0x88, 0x50, 0x00, 0x04, 0xa4, 0x88, 0x50, 0x00, 0x04, 0xa4, 0x88, 0x48, 0x00, 0x04, 0xbf, 0x88, 0x88, 0x00, 0x04, 0xa4, 0x8a, 0x88, 0x00, 0x07, 0xa4, 0x8c, 0x84, 0x00, 0x04, 0x44, 0x89, 0x07, 0x00, 0x00, 0x81, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t_CN_CN[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x0f, 0xff, 0x3f, 0xff, 0x00, 0x08, 0x41, 0x04, 0x08, 0x00, 0x08, 0x41, 0x04, 0x08, 0x00, 0x08, 0x41, 0x04, 0x10, 0x00, 0x08, 0x41, 0x02, 0x10, 0x00, 0x0f, 0xff, 0x02, 0x20, 0x00, 0x08, 0x41, 0x01, 0x20, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00, 0x40, 0x01, 0x30, 0x00, 0x00, 0x40, 0x02, 0x08, 0x00, 0x00, 0x40, 0x0c, 0x07, 0x00, 0x00, 0x40, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_CN_EN[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x80, 0x00, 0x1f, 0xff, 0x80, 0x80, 0x00, 0x01, 0x10, 0x3f, 0xff, 0x00, 0x00, 0x40, 0x04, 0x08, 0x00, 0x07, 0xfc, 0x04, 0x08, 0x00, 0x04, 0x44, 0x04, 0x10, 0x00, 0x04, 0x44, 0x02, 0x10, 0x00, 0x04, 0x44, 0x02, 0x20, 0x00, 0x1f, 0xff, 0x81, 0x20, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00, 0xa0, 0x01, 0x30, 0x00, 0x01, 0x10, 0x02, 0x08, 0x00, 0x06, 0x0c, 0x0c, 0x07, 0x00, 0x18, 0x03, 0xb0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_CN_JP[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x13, 0xfe, 0x00, 0x04, 0x02, 0x08, 0x40, 0x00, 0x04, 0x02, 0x08, 0x40, 0x00, 0x04, 0x02, 0x01, 0xfc, 0x00, 0x04, 0x02, 0x38, 0x84, 0x00, 0x04, 0x02, 0x08, 0x84, 0x00, 0x07, 0xfe, 0x0f, 0xff, 0x00, 0x04, 0x02, 0x08, 0x00, 0x00, 0x04, 0x02, 0x09, 0xfe, 0x00, 0x04, 0x02, 0x09, 0x02, 0x00, 0x04, 0x02, 0x0b, 0x02, 0x00, 0x04, 0x02, 0x0d, 0x02, 0x00, 0x07, 0xfe, 0x09, 0xfe, 0x00, 0x04, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +//翻转 +const unsigned char t4f[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x1d, 0xc2, 0x08, 0x00, 0x05, 0x44, 0x42, 0x08, 0x00, 0x03, 0x84, 0x5f, 0xbf, 0x00, 0x0f, 0xe4, 0x44, 0x10, 0x00, 0x01, 0x15, 0x45, 0x10, 0x00, 0x05, 0x4c, 0xc9, 0x7f, 0x80, 0x09, 0x24, 0x4f, 0x90, 0x00, 0x07, 0xc4, 0xc1, 0x10, 0x00, 0x05, 0x4d, 0x41, 0x3f, 0x00, 0x05, 0x54, 0x43, 0x81, 0x00, 0x07, 0xc4, 0x4d, 0x02, 0x00, 0x05, 0x44, 0x41, 0x14, 0x00, 0x05, 0x55, 0x41, 0x08, 0x00, 0x07, 0xc8, 0x81, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//保存 +const unsigned char t_save[] PROGMEM = { 0x02, 0xfe, 0x01, 0x00, 0x00, 0x02, 0x82, 0x3f, 0xff, 0x00, 0x04, 0x82, 0x02, 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x0c, 0x10, 0x04, 0xfc, 0x00, 0x14, 0x10, 0x04, 0x08, 0x00, 0x05, 0xff, 0x8c, 0x10, 0x00, 0x04, 0x10, 0x14, 0x10, 0x00, 0x04, 0x38, 0x25, 0xff, 0x00, 0x04, 0x34, 0x04, 0x10, 0x00, 0x04, 0x52, 0x04, 0x10, 0x00, 0x04, 0x91, 0x84, 0x10, 0x00, 0x05, 0x10, 0x04, 0x50, 0x00, 0x04, 0x10, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char tAbout[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x0f, 0xfe, 0x00, 0x00, 0x44, 0x00, 0x40, 0x00, 0x07, 0xff, 0x80, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x10, 0x1f, 0xff, 0x80, 0x0f, 0xff, 0xc0, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x28, 0x00, 0x40, 0x00, 0x00, 0x28, 0x00, 0x40, 0x00, 0x00, 0x44, 0x00, 0x40, 0x00, 0x00, 0x82, 0x00, 0x40, 0x00, 0x03, 0x01, 0xc1, 0x40, 0x00, 0x0c, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char tPassword[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1f, 0x7e, 0x00, 0x1f, 0xff, 0x84, 0x02, 0x00, 0x10, 0x80, 0x84, 0x42, 0x00, 0x0a, 0x4a, 0x04, 0x42, 0x00, 0x0a, 0x31, 0x08, 0x42, 0x00, 0x12, 0xc5, 0x0f, 0x42, 0x00, 0x03, 0x04, 0x19, 0x7f, 0x00, 0x1d, 0xf8, 0x29, 0x01, 0x00, 0x00, 0x40, 0x09, 0x01, 0x00, 0x08, 0x42, 0x09, 0xfd, 0x00, 0x08, 0x42, 0x09, 0x01, 0x00, 0x08, 0x42, 0x0f, 0x01, 0x00, 0x0f, 0xfe, 0x09, 0x05, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t19[] PROGMEM = { 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x1f, 0x88, 0xfe, 0x00, 0x1f, 0xd0, 0x0e, 0x22, 0x00, 0x04, 0x20, 0x30, 0x22, 0x00, 0x04, 0x5f, 0x80, 0x22, 0x00, 0x07, 0x84, 0x9e, 0x22, 0x00, 0x04, 0x85, 0x08, 0x22, 0x00, 0x04, 0x94, 0x08, 0x22, 0x00, 0x04, 0x94, 0x28, 0xfe, 0x00, 0x04, 0x97, 0x1e, 0x42, 0x00, 0x04, 0x94, 0x08, 0x42, 0x00, 0x08, 0x94, 0x08, 0x42, 0x00, 0x0a, 0xac, 0x0a, 0x42, 0x00, 0x11, 0x44, 0x0c, 0x42, 0x00, 0x00, 0x83, 0x89, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char *CN_table[] = { + t0, t1, t2, t3, t4, t5, t19 , t7, tPassword, t6, tAbout, Back, //0 + t0, t1_1, t1_2, t1_3, t1_4, t_save, //1 + t2_0, t2_1, t2_2, t_save, //2 + t2_1, t3_1, t2_2, t_save,//3 + t_4, t_PID,//4 + t5_0, t5_1,//5 + t_off, t_on,//6 + t_NO, t_OK,//7 + t_CN_CN, t_CN_EN, t_CN_JP, //8 + t5_3, t4f, t_save, //9 +}; + +/* + 日语 Japanese +*/ +/* + 8x8 dot Japanese font for Arduboy + + Copyright (c) 2016 emutyworks + + Released under the MIT license + https://github.com/emutyworks/8x8DotJPFont/blob/master/LICENSE.txt +*/ +#define LANG_JP_State true +#if LANG_JP_State +#define MISAKI_FONT_H + +#define MISAKI_FONT_F0_PAGE 0xF0 +#define MISAKI_FONT_F1_PAGE 0xF1 +#define MISAKI_FONT_F2_PAGE 0xF2 + +#define MISAKI_FONT_F0_W 8 +#define MISAKI_FONT_F1_W 3 +#define MISAKI_FONT_F2_W 7 + +#define MISAKI_FONT_F0_SIZE 0xEF +#define MISAKI_FONT_F1_SIZE 0x9D +#define MISAKI_FONT_F2_SIZE 0x22 // misaki_font_f2.h の最終行の値をここに設定する、最大0xEFまで + +/* + 利用しないフォントデータはヘッダファイルを読み込まないようにするとメモリが節約できます、 + drawText() 実行時にフォントが無い場合は処理がスキップされます。 + + 例) 8x8 dot ひらがな・カタカナ・記号 のみ利用 + #include "misaki_font_f0.h" // 8x8 dot ひらがな・カタカナ・記号 + //#include "misaki_font_f1.h" // 4x8 dot 英語・カタカナ・記号 + //#include "misaki_font_f2.h" // 8x8 dot 漢字 +*/ +PROGMEM const uint8_t misaki_font_0x00[1] = { 0x00 }; +#define MISAKI_FONT_F0_H +PROGMEM const uint8_t misaki_font_f0[ MISAKI_FONT_F0_SIZE + 1 ][ MISAKI_FONT_F0_W ] = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x00   */ + { 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x01 、 */ + { 0x20, 0x50, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x02 。 */ + { 0x50, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x03 , */ + { 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x04 . */ + { 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }, /* 0x05 ・ */ + { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00 }, /* 0x06 : */ + { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00, 0x00, 0x00 }, /* 0x07 ; */ + { 0x00, 0x02, 0x01, 0x51, 0x09, 0x09, 0x06, 0x00 }, /* 0x08 ? */ + { 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00 }, /* 0x09 ! */ + { 0x00, 0x00, 0x00, 0x00, 0x7f, 0x41, 0x41, 0x00 }, /* 0x0A [ */ + { 0x41, 0x41, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x0B ] */ + { 0x00, 0x00, 0x00, 0x3f, 0x01, 0x01, 0x01, 0x00 }, /* 0x0C 「 */ + { 0x40, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00 }, /* 0x0D 」 */ + { 0x00, 0x00, 0x3f, 0x21, 0x3d, 0x05, 0x07, 0x00 }, /* 0x0E 『 */ + { 0x70, 0x50, 0x5e, 0x42, 0x7e, 0x00, 0x00, 0x00 }, /* 0x0F 』 */ + { 0x00, 0x00, 0x00, 0x00, 0x7f, 0x63, 0x41, 0x00 }, /* 0x10 【 */ + { 0x41, 0x63, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x11 】 */ + { 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00 }, /* 0x12 + */ + { 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0x13 - */ + { 0x44, 0x44, 0x44, 0x5f, 0x44, 0x44, 0x44, 0x00 }, /* 0x14 ± */ + { 0x41, 0x22, 0x14, 0x08, 0x14, 0x22, 0x41, 0x00 }, /* 0x15 × */ + { 0x08, 0x08, 0x08, 0x2a, 0x08, 0x08, 0x08, 0x00 }, /* 0x16 ÷ */ + { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00 }, /* 0x17 = */ + { 0x14, 0x34, 0x14, 0x1c, 0x14, 0x16, 0x14, 0x00 }, /* 0x18 ≠ */ + { 0x08, 0x08, 0x14, 0x14, 0x14, 0x22, 0x22, 0x00 }, /* 0x19 < */ + { 0x22, 0x22, 0x14, 0x14, 0x14, 0x08, 0x08, 0x00 }, /* 0x1A > */ + { 0x02, 0x05, 0x02, 0x3c, 0x42, 0x42, 0x24, 0x00 }, /* 0x1B ℃ */ + { 0x00, 0x2b, 0x2c, 0x78, 0x2c, 0x2b, 0x00, 0x00 }, /* 0x1C ¥ */ + { 0x00, 0x24, 0x2a, 0x7a, 0x2f, 0x2a, 0x12, 0x00 }, /* 0x1D $ */ + { 0x00, 0x1c, 0x62, 0x32, 0x2e, 0x23, 0x14, 0x00 }, /* 0x1E ¢ */ + { 0x20, 0x54, 0x5e, 0x25, 0x41, 0x42, 0x20, 0x00 }, /* 0x1F £ */ + { 0x42, 0x25, 0x12, 0x08, 0x24, 0x52, 0x21, 0x00 }, /* 0x20 % */ + { 0x20, 0x62, 0x3e, 0x63, 0x3e, 0x23, 0x02, 0x00 }, /* 0x21 # */ + { 0x20, 0x56, 0x49, 0x55, 0x22, 0x58, 0x40, 0x00 }, /* 0x22 & */ + { 0x00, 0x22, 0x14, 0x7f, 0x14, 0x22, 0x00, 0x00 }, /* 0x23 * */ + { 0x1c, 0x22, 0x59, 0x55, 0x4d, 0x12, 0x0c, 0x00 }, /* 0x24 @ */ + { 0x00, 0x00, 0x4a, 0x55, 0x55, 0x29, 0x00, 0x00 }, /* 0x25 § */ + { 0x04, 0x64, 0x3c, 0x17, 0x3c, 0x64, 0x04, 0x00 }, /* 0x26 ☆ */ + { 0x04, 0x64, 0x3c, 0x1f, 0x3c, 0x64, 0x04, 0x00 }, /* 0x27 ★ */ + { 0x1c, 0x22, 0x41, 0x41, 0x41, 0x22, 0x1c, 0x00 }, /* 0x28 ○ */ + { 0x1c, 0x3e, 0x7f, 0x7f, 0x7f, 0x3e, 0x1c, 0x00 }, /* 0x29 ● */ + { 0x1c, 0x22, 0x5d, 0x55, 0x5d, 0x22, 0x1c, 0x00 }, /* 0x2A ◎ */ + { 0x08, 0x14, 0x22, 0x41, 0x22, 0x14, 0x08, 0x00 }, /* 0x2B ◇ */ + { 0x08, 0x1c, 0x3e, 0x7f, 0x3e, 0x1c, 0x08, 0x00 }, /* 0x2C ◆ */ + { 0x7f, 0x41, 0x41, 0x41, 0x41, 0x41, 0x7f, 0x00 }, /* 0x2D □ */ + { 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00 }, /* 0x2E ■ */ + { 0x40, 0x70, 0x4c, 0x43, 0x4c, 0x70, 0x40, 0x00 }, /* 0x2F △ */ + { 0x40, 0x70, 0x7c, 0x7f, 0x7c, 0x70, 0x40, 0x00 }, /* 0x30 ▲ */ + { 0x01, 0x07, 0x19, 0x61, 0x19, 0x07, 0x01, 0x00 }, /* 0x31 ▽ */ + { 0x01, 0x07, 0x1f, 0x7f, 0x1f, 0x07, 0x01, 0x00 }, /* 0x32 ▼ */ + { 0x49, 0x22, 0x14, 0x49, 0x14, 0x22, 0x49, 0x00 }, /* 0x33 ※ */ + { 0x05, 0x05, 0x05, 0x7d, 0x05, 0x05, 0x05, 0x00 }, /* 0x34 〒 */ + { 0x08, 0x08, 0x08, 0x08, 0x2a, 0x1c, 0x08, 0x00 }, /* 0x35 → */ + { 0x08, 0x1c, 0x2a, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0x36 ← */ + { 0x00, 0x04, 0x02, 0x7f, 0x02, 0x04, 0x00, 0x00 }, /* 0x37 ↑ */ + { 0x00, 0x10, 0x20, 0x7f, 0x20, 0x10, 0x00, 0x00 }, /* 0x38 ↓ */ + { 0x00, 0x3e, 0x41, 0x41, 0x41, 0x41, 0x3e, 0x00 }, /* 0x39 0 */ + { 0x00, 0x00, 0x42, 0x7f, 0x40, 0x00, 0x00, 0x00 }, /* 0x3A 1 */ + { 0x00, 0x62, 0x51, 0x51, 0x49, 0x49, 0x46, 0x00 }, /* 0x3B 2 */ + { 0x00, 0x22, 0x41, 0x49, 0x49, 0x49, 0x36, 0x00 }, /* 0x3C 3 */ + { 0x00, 0x30, 0x28, 0x24, 0x22, 0x7f, 0x20, 0x00 }, /* 0x3D 4 */ + { 0x00, 0x2f, 0x45, 0x45, 0x45, 0x45, 0x39, 0x00 }, /* 0x3E 5 */ + { 0x00, 0x3e, 0x49, 0x49, 0x49, 0x49, 0x32, 0x00 }, /* 0x3F 6 */ + { 0x00, 0x01, 0x01, 0x61, 0x19, 0x05, 0x03, 0x00 }, /* 0x40 7 */ + { 0x00, 0x36, 0x49, 0x49, 0x49, 0x49, 0x36, 0x00 }, /* 0x41 8 */ + { 0x00, 0x26, 0x49, 0x49, 0x49, 0x49, 0x3e, 0x00 }, /* 0x42 9 */ + { 0x00, 0x20, 0x54, 0x7e, 0x34, 0x14, 0x60, 0x00 }, /* 0x43 ぁ */ + { 0x20, 0x52, 0x7f, 0x2a, 0x1a, 0x4a, 0x30, 0x00 }, /* 0x44 あ */ + { 0x00, 0x3c, 0x40, 0x20, 0x04, 0x18, 0x00, 0x00 }, /* 0x45 ぃ */ + { 0x1e, 0x20, 0x40, 0x20, 0x02, 0x04, 0x18, 0x00 }, /* 0x46 い */ + { 0x00, 0x10, 0x4a, 0x4a, 0x2a, 0x10, 0x00, 0x00 }, /* 0x47 ぅ */ + { 0x00, 0x08, 0x45, 0x45, 0x45, 0x25, 0x18, 0x00 }, /* 0x48 う */ + { 0x00, 0x48, 0x2a, 0x3a, 0x4a, 0x40, 0x00, 0x00 }, /* 0x49 ぇ */ + { 0x00, 0x44, 0x25, 0x15, 0x3d, 0x45, 0x40, 0x00 }, /* 0x4A え */ + { 0x00, 0x24, 0x7e, 0x14, 0x50, 0x24, 0x00, 0x00 }, /* 0x4B ぉ */ + { 0x22, 0x52, 0x7f, 0x0a, 0x48, 0x4a, 0x34, 0x00 }, /* 0x4C お */ + { 0x44, 0x34, 0x4f, 0x44, 0x38, 0x04, 0x18, 0x00 }, /* 0x4D か */ + { 0x44, 0x34, 0x4f, 0x44, 0x39, 0x04, 0x19, 0x00 }, /* 0x4E が */ + { 0x00, 0x2a, 0x5a, 0x4b, 0x4e, 0x5a, 0x08, 0x00 }, /* 0x4F き */ + { 0x00, 0x2a, 0x5a, 0x4b, 0x4e, 0x5b, 0x08, 0x00 }, /* 0x50 ぎ */ + { 0x00, 0x08, 0x14, 0x14, 0x22, 0x41, 0x00, 0x00 }, /* 0x51 く */ + { 0x00, 0x08, 0x14, 0x14, 0x22, 0x45, 0x04, 0x00 }, /* 0x52 ぐ */ + { 0x3f, 0x00, 0x04, 0x44, 0x3f, 0x04, 0x04, 0x00 }, /* 0x53 け */ + { 0x3f, 0x00, 0x04, 0x44, 0x3f, 0x04, 0x05, 0x00 }, /* 0x54 げ */ + { 0x00, 0x20, 0x52, 0x42, 0x42, 0x42, 0x40, 0x00 }, /* 0x55 こ */ + { 0x00, 0x20, 0x52, 0x42, 0x43, 0x42, 0x41, 0x00 }, /* 0x56 ご */ + { 0x00, 0x24, 0x54, 0x44, 0x47, 0x5c, 0x04, 0x00 }, /* 0x57 さ */ + { 0x00, 0x24, 0x54, 0x44, 0x47, 0x5c, 0x05, 0x00 }, /* 0x58 ざ */ + { 0x00, 0x00, 0x3f, 0x40, 0x40, 0x40, 0x20, 0x00 }, /* 0x59 し */ + { 0x00, 0x00, 0x3f, 0x40, 0x41, 0x40, 0x21, 0x00 }, /* 0x5A じ */ + { 0x02, 0x02, 0x0a, 0x56, 0x3f, 0x02, 0x02, 0x00 }, /* 0x5B す */ + { 0x02, 0x02, 0x0a, 0x56, 0x3f, 0x02, 0x03, 0x00 }, /* 0x5C ず */ + { 0x04, 0x04, 0x3f, 0x44, 0x54, 0x5f, 0x44, 0x00 }, /* 0x5D せ */ + { 0x04, 0x04, 0x3f, 0x44, 0x54, 0x5f, 0x45, 0x00 }, /* 0x5E ぜ */ + { 0x00, 0x08, 0x09, 0x3d, 0x4b, 0x49, 0x08, 0x00 }, /* 0x5F そ */ + { 0x00, 0x08, 0x09, 0x3d, 0x4b, 0x49, 0x0a, 0x00 }, /* 0x60 ぞ */ + { 0x42, 0x3a, 0x07, 0x22, 0x54, 0x44, 0x44, 0x00 }, /* 0x61 た */ + { 0x42, 0x3a, 0x07, 0x22, 0x55, 0x44, 0x45, 0x00 }, /* 0x62 だ */ + { 0x00, 0x02, 0x12, 0x4e, 0x4b, 0x4a, 0x32, 0x00 }, /* 0x63 ち */ + { 0x00, 0x02, 0x12, 0x4e, 0x4b, 0x4a, 0x33, 0x00 }, /* 0x64 ぢ */ + { 0x00, 0x10, 0x10, 0x48, 0x48, 0x30, 0x00, 0x00 }, /* 0x65 っ */ + { 0x04, 0x04, 0x02, 0x22, 0x22, 0x22, 0x1c, 0x00 }, /* 0x66 つ */ + { 0x04, 0x04, 0x02, 0x22, 0x23, 0x22, 0x1d, 0x00 }, /* 0x67 づ */ + { 0x00, 0x02, 0x02, 0x1a, 0x25, 0x43, 0x41, 0x00 }, /* 0x68 て */ + { 0x00, 0x02, 0x02, 0x1a, 0x25, 0x43, 0x45, 0x00 }, /* 0x69 で */ + { 0x00, 0x20, 0x57, 0x48, 0x48, 0x44, 0x44, 0x00 }, /* 0x6A と */ + { 0x00, 0x20, 0x57, 0x48, 0x49, 0x44, 0x45, 0x00 }, /* 0x6B ど */ + { 0x12, 0x0a, 0x27, 0x52, 0x50, 0x3a, 0x24, 0x00 }, /* 0x6C な */ + { 0x7f, 0x00, 0x20, 0x52, 0x42, 0x42, 0x40, 0x00 }, /* 0x6D に */ + { 0x30, 0x4e, 0x38, 0x54, 0x0f, 0x64, 0x78, 0x00 }, /* 0x6E ぬ */ + { 0x24, 0x14, 0x7f, 0x04, 0x22, 0x52, 0x3c, 0x00 }, /* 0x6F ね */ + { 0x18, 0x24, 0x12, 0x4e, 0x42, 0x24, 0x18, 0x00 }, /* 0x70 の */ + { 0x7f, 0x00, 0x24, 0x54, 0x54, 0x3f, 0x44, 0x00 }, /* 0x71 は */ + { 0x7f, 0x00, 0x24, 0x54, 0x54, 0x3f, 0x45, 0x00 }, /* 0x72 ば */ + { 0x7f, 0x00, 0x24, 0x54, 0x56, 0x3d, 0x46, 0x00 }, /* 0x73 ぱ */ + { 0x02, 0x3a, 0x47, 0x40, 0x41, 0x3e, 0x04, 0x00 }, /* 0x74 ひ */ + { 0x02, 0x3a, 0x47, 0x40, 0x41, 0x3e, 0x05, 0x00 }, /* 0x75 び */ + { 0x02, 0x3a, 0x47, 0x40, 0x43, 0x3d, 0x06, 0x00 }, /* 0x76 ぴ */ + { 0x40, 0x30, 0x40, 0x4d, 0x32, 0x10, 0x60, 0x00 }, /* 0x77 ふ */ + { 0x40, 0x30, 0x40, 0x4d, 0x32, 0x11, 0x61, 0x00 }, /* 0x78 ぶ */ + { 0x40, 0x30, 0x40, 0x4d, 0x32, 0x15, 0x62, 0x00 }, /* 0x79 ぷ */ + { 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x00 }, /* 0x7A へ */ + { 0x08, 0x04, 0x02, 0x04, 0x09, 0x10, 0x11, 0x00 }, /* 0x7B べ */ + { 0x08, 0x04, 0x02, 0x04, 0x0a, 0x15, 0x12, 0x00 }, /* 0x7C ぺ */ + { 0x7f, 0x00, 0x6a, 0x6a, 0x7e, 0x2a, 0x4a, 0x00 }, /* 0x7D ほ */ + { 0x7f, 0x00, 0x6a, 0x6a, 0x7f, 0x2a, 0x4b, 0x00 }, /* 0x7E ぼ */ + { 0x7f, 0x00, 0x6a, 0x6a, 0x7e, 0x2d, 0x4a, 0x00 }, /* 0x7F ぽ */ + { 0x00, 0x6a, 0x6a, 0x6a, 0x7f, 0x2a, 0x4a, 0x00 }, /* 0x80 ま */ + { 0x30, 0x29, 0x1d, 0x4b, 0x48, 0x3c, 0x10, 0x00 }, /* 0x81 み */ + { 0x12, 0x2a, 0x7f, 0x42, 0x40, 0x42, 0x24, 0x00 }, /* 0x82 む */ + { 0x30, 0x4e, 0x38, 0x54, 0x0f, 0x44, 0x38, 0x00 }, /* 0x83 め */ + { 0x00, 0x0a, 0x3e, 0x4b, 0x4a, 0x4a, 0x30, 0x00 }, /* 0x84 も */ + { 0x00, 0x08, 0x0e, 0x38, 0x46, 0x14, 0x08, 0x00 }, /* 0x85 ゃ */ + { 0x04, 0x07, 0x1c, 0x62, 0x03, 0x0a, 0x04, 0x00 }, /* 0x86 や */ + { 0x00, 0x1c, 0x48, 0x3e, 0x24, 0x18, 0x00, 0x00 }, /* 0x87 ゅ */ + { 0x1e, 0x04, 0x52, 0x3f, 0x12, 0x12, 0x0c, 0x00 }, /* 0x88 ゆ */ + { 0x00, 0x20, 0x50, 0x50, 0x3e, 0x48, 0x00, 0x00 }, /* 0x89 ょ */ + { 0x00, 0x20, 0x50, 0x50, 0x3f, 0x24, 0x44, 0x00 }, /* 0x8A よ */ + { 0x00, 0x1c, 0x51, 0x49, 0x4a, 0x48, 0x30, 0x00 }, /* 0x8B ら */ + { 0x00, 0x0f, 0x42, 0x41, 0x21, 0x1e, 0x00, 0x00 }, /* 0x8C り */ + { 0x00, 0x10, 0x69, 0x6d, 0x4b, 0x49, 0x30, 0x00 }, /* 0x8D る */ + { 0x24, 0x14, 0x7f, 0x04, 0x02, 0x3e, 0x40, 0x00 }, /* 0x8E れ */ + { 0x00, 0x10, 0x49, 0x4d, 0x4b, 0x49, 0x30, 0x00 }, /* 0x8F ろ */ + { 0x00, 0x28, 0x18, 0x7e, 0x08, 0x44, 0x38, 0x00 }, /* 0x90 ゎ */ + { 0x24, 0x14, 0x7f, 0x04, 0x42, 0x42, 0x3c, 0x00 }, /* 0x91 わ */ + { 0x30, 0x49, 0x25, 0x1f, 0x24, 0x54, 0x38, 0x00 }, /* 0x92 ゐ */ + { 0x40, 0x28, 0x25, 0x57, 0x35, 0x28, 0x40, 0x00 }, /* 0x93 ゑ */ + { 0x10, 0x0a, 0x2e, 0x5b, 0x72, 0x4a, 0x48, 0x00 }, /* 0x94 を */ + { 0x40, 0x30, 0x0c, 0x33, 0x40, 0x40, 0x20, 0x00 }, /* 0x95 ん */ + { 0x00, 0x04, 0x44, 0x3c, 0x14, 0x0c, 0x00, 0x00 }, /* 0x96 ァ */ + { 0x00, 0x01, 0x41, 0x3d, 0x09, 0x05, 0x03, 0x00 }, /* 0x97 ア */ + { 0x00, 0x20, 0x20, 0x10, 0x78, 0x04, 0x00, 0x00 }, /* 0x98 ィ */ + { 0x00, 0x10, 0x10, 0x08, 0x7c, 0x02, 0x01, 0x00 }, /* 0x99 イ */ + { 0x00, 0x18, 0x48, 0x4c, 0x28, 0x18, 0x00, 0x00 }, /* 0x9A ゥ */ + { 0x00, 0x06, 0x42, 0x43, 0x22, 0x12, 0x0e, 0x00 }, /* 0x9B ウ */ + { 0x00, 0x40, 0x48, 0x78, 0x48, 0x40, 0x00, 0x00 }, /* 0x9C ェ */ + { 0x20, 0x22, 0x22, 0x3e, 0x22, 0x22, 0x20, 0x00 }, /* 0x9D エ */ + { 0x00, 0x28, 0x28, 0x58, 0x7c, 0x08, 0x00, 0x00 }, /* 0x9E ォ */ + { 0x22, 0x22, 0x12, 0x4a, 0x7f, 0x02, 0x02, 0x00 }, /* 0x9F オ */ + { 0x00, 0x42, 0x22, 0x1f, 0x02, 0x42, 0x7e, 0x00 }, /* 0xA0 カ */ + { 0x00, 0x42, 0x22, 0x1f, 0x02, 0x42, 0x7f, 0x00 }, /* 0xA1 ガ */ + { 0x00, 0x12, 0x12, 0x1f, 0x72, 0x12, 0x10, 0x00 }, /* 0xA2 キ */ + { 0x00, 0x12, 0x12, 0x1f, 0x72, 0x13, 0x10, 0x00 }, /* 0xA3 ギ */ + { 0x00, 0x08, 0x44, 0x43, 0x22, 0x12, 0x0e, 0x00 }, /* 0xA4 ク */ + { 0x00, 0x08, 0x44, 0x43, 0x22, 0x12, 0x0f, 0x00 }, /* 0xA5 グ */ + { 0x08, 0x07, 0x42, 0x22, 0x1e, 0x02, 0x02, 0x00 }, /* 0xA6 ケ */ + { 0x08, 0x07, 0x42, 0x22, 0x1f, 0x02, 0x03, 0x00 }, /* 0xA7 ゲ */ + { 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x00 }, /* 0xA8 コ */ + { 0x00, 0x42, 0x42, 0x42, 0x43, 0x42, 0x7f, 0x00 }, /* 0xA9 ゴ */ + { 0x02, 0x02, 0x4f, 0x42, 0x22, 0x1f, 0x02, 0x00 }, /* 0xAA サ */ + { 0x02, 0x02, 0x4f, 0x42, 0x23, 0x1e, 0x03, 0x00 }, /* 0xAB ザ */ + { 0x00, 0x45, 0x4a, 0x40, 0x20, 0x10, 0x0c, 0x00 }, /* 0xAC シ */ + { 0x00, 0x45, 0x4a, 0x40, 0x21, 0x10, 0x0d, 0x00 }, /* 0xAD ジ */ + { 0x40, 0x42, 0x22, 0x22, 0x1a, 0x26, 0x40, 0x00 }, /* 0xAE ス */ + { 0x40, 0x42, 0x22, 0x22, 0x1b, 0x26, 0x41, 0x00 }, /* 0xAF ズ */ + { 0x04, 0x04, 0x3f, 0x44, 0x44, 0x54, 0x4c, 0x00 }, /* 0xB0 セ */ + { 0x04, 0x04, 0x3f, 0x44, 0x45, 0x54, 0x4d, 0x00 }, /* 0xB1 ゼ */ + { 0x00, 0x01, 0x46, 0x40, 0x20, 0x10, 0x0f, 0x00 }, /* 0xB2 ソ */ + { 0x00, 0x01, 0x46, 0x40, 0x20, 0x11, 0x0f, 0x00 }, /* 0xB3 ゾ */ + { 0x00, 0x08, 0x44, 0x4b, 0x2a, 0x12, 0x0e, 0x00 }, /* 0xB4 タ */ + { 0x00, 0x08, 0x44, 0x4b, 0x2a, 0x12, 0x0f, 0x00 }, /* 0xB5 ダ */ + { 0x08, 0x0a, 0x4a, 0x3e, 0x09, 0x09, 0x08, 0x00 }, /* 0xB6 チ */ + { 0x08, 0x0a, 0x4a, 0x3e, 0x09, 0x08, 0x09, 0x00 }, /* 0xB7 ヂ */ + { 0x00, 0x18, 0x40, 0x58, 0x20, 0x18, 0x00, 0x00 }, /* 0xB8 ッ */ + { 0x02, 0x0c, 0x42, 0x4c, 0x20, 0x10, 0x0e, 0x00 }, /* 0xB9 ツ */ + { 0x02, 0x0c, 0x42, 0x4c, 0x21, 0x10, 0x0d, 0x00 }, /* 0xBA ヅ */ + { 0x04, 0x05, 0x45, 0x3d, 0x05, 0x05, 0x04, 0x00 }, /* 0xBB テ */ + { 0x04, 0x05, 0x45, 0x3d, 0x05, 0x04, 0x05, 0x00 }, /* 0xBC デ */ + { 0x00, 0x00, 0x7f, 0x08, 0x08, 0x10, 0x00, 0x00 }, /* 0xBD ト */ + { 0x00, 0x00, 0x7f, 0x08, 0x09, 0x10, 0x01, 0x00 }, /* 0xBE ド */ + { 0x04, 0x44, 0x24, 0x1f, 0x04, 0x04, 0x04, 0x00 }, /* 0xBF ナ */ + { 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00 }, /* 0xC0 ニ */ + { 0x40, 0x41, 0x25, 0x15, 0x19, 0x27, 0x00, 0x00 }, /* 0xC1 ヌ */ + { 0x20, 0x22, 0x12, 0x7b, 0x06, 0x12, 0x20, 0x00 }, /* 0xC2 ネ */ + { 0x40, 0x40, 0x20, 0x10, 0x08, 0x07, 0x00, 0x00 }, /* 0xC3 ノ */ + { 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0c, 0x70, 0x00 }, /* 0xC4 ハ */ + { 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0d, 0x71, 0x00 }, /* 0xC5 バ */ + { 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0d, 0x72, 0x00 }, /* 0xC6 パ */ + { 0x00, 0x3f, 0x48, 0x48, 0x48, 0x44, 0x44, 0x00 }, /* 0xC7 ヒ */ + { 0x00, 0x3f, 0x48, 0x48, 0x49, 0x44, 0x45, 0x00 }, /* 0xC8 ビ */ + { 0x00, 0x3f, 0x48, 0x48, 0x4a, 0x45, 0x46, 0x00 }, /* 0xC9 ピ */ + { 0x00, 0x02, 0x42, 0x42, 0x22, 0x12, 0x0e, 0x00 }, /* 0xCA フ */ + { 0x00, 0x02, 0x42, 0x42, 0x23, 0x12, 0x0f, 0x00 }, /* 0xCB ブ */ + { 0x00, 0x02, 0x42, 0x42, 0x22, 0x15, 0x0e, 0x00 }, /* 0xCC プ */ + { 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00 }, /* 0xCD ヘ */ + { 0x08, 0x04, 0x02, 0x04, 0x09, 0x10, 0x21, 0x00 }, /* 0xCE ベ */ + { 0x08, 0x04, 0x02, 0x04, 0x0a, 0x15, 0x22, 0x00 }, /* 0xCF ペ */ + { 0x24, 0x14, 0x44, 0x7f, 0x04, 0x14, 0x24, 0x00 }, /* 0xD0 ホ */ + { 0x24, 0x14, 0x44, 0x7f, 0x05, 0x14, 0x25, 0x00 }, /* 0xD1 ボ */ + { 0x24, 0x14, 0x44, 0x7f, 0x06, 0x15, 0x22, 0x00 }, /* 0xD2 ポ */ + { 0x02, 0x02, 0x12, 0x22, 0x52, 0x0a, 0x06, 0x00 }, /* 0xD3 マ */ + { 0x00, 0x21, 0x25, 0x29, 0x4a, 0x42, 0x00, 0x00 }, /* 0xD4 ミ */ + { 0x40, 0x70, 0x4c, 0x43, 0x50, 0x20, 0x40, 0x00 }, /* 0xD5 ム */ + { 0x40, 0x44, 0x24, 0x14, 0x08, 0x37, 0x00, 0x00 }, /* 0xD6 メ */ + { 0x00, 0x08, 0x09, 0x3f, 0x49, 0x49, 0x48, 0x00 }, /* 0xD7 モ */ + { 0x00, 0x10, 0x1c, 0x68, 0x08, 0x18, 0x00, 0x00 }, /* 0xD8 ャ */ + { 0x04, 0x04, 0x0f, 0x74, 0x02, 0x0a, 0x06, 0x00 }, /* 0xD9 ヤ */ + { 0x00, 0x40, 0x48, 0x48, 0x78, 0x40, 0x00, 0x00 }, /* 0xDA ュ */ + { 0x20, 0x22, 0x22, 0x22, 0x3e, 0x20, 0x20, 0x00 }, /* 0xDB ユ */ + { 0x00, 0x00, 0x44, 0x54, 0x54, 0x7c, 0x00, 0x00 }, /* 0xDC ョ */ + { 0x00, 0x42, 0x4a, 0x4a, 0x4a, 0x4a, 0x7e, 0x00 }, /* 0xDD ヨ */ + { 0x00, 0x04, 0x45, 0x45, 0x25, 0x15, 0x0c, 0x00 }, /* 0xDE ラ */ + { 0x00, 0x0f, 0x40, 0x40, 0x20, 0x1f, 0x00, 0x00 }, /* 0xDF リ */ + { 0x40, 0x20, 0x1e, 0x00, 0x7f, 0x20, 0x10, 0x00 }, /* 0xE0 ル */ + { 0x00, 0x00, 0x7f, 0x40, 0x20, 0x10, 0x08, 0x00 }, /* 0xE1 レ */ + { 0x00, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x00 }, /* 0xE2 ロ */ + { 0x00, 0x0c, 0x44, 0x44, 0x24, 0x1c, 0x00, 0x00 }, /* 0xE3 ヮ */ + { 0x00, 0x06, 0x42, 0x42, 0x22, 0x12, 0x0e, 0x00 }, /* 0xE4 ワ */ + { 0x10, 0x12, 0x1e, 0x12, 0x12, 0x7f, 0x12, 0x00 }, /* 0xE5 ヰ */ + { 0x20, 0x22, 0x22, 0x3a, 0x26, 0x22, 0x20, 0x00 }, /* 0xE6 ヱ */ + { 0x00, 0x01, 0x45, 0x45, 0x25, 0x15, 0x0f, 0x00 }, /* 0xE7 ヲ */ + { 0x00, 0x41, 0x42, 0x40, 0x20, 0x10, 0x0c, 0x00 }, /* 0xE8 ン */ + { 0x00, 0x06, 0x42, 0x43, 0x22, 0x12, 0x0f, 0x00 }, /* 0xE9 ヴ */ + { 0x00, 0x48, 0x28, 0x1c, 0x48, 0x78, 0x00, 0x00 }, /* 0xEA ヵ */ + { 0x00, 0x10, 0x0c, 0x48, 0x38, 0x08, 0x00, 0x00 }, /* 0xEB ヶ */ + { 0x08, 0x04, 0x04, 0x08, 0x10, 0x10, 0x08, 0x00 }, /* 0xEC 〜 */ + { 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00 }, /* 0xED … */ + { 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0xEE ー */ + { 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08 }, /* 0xEF ― */ +}; + +#define MISAKI_FONT_F1_H +PROGMEM const uint8_t misaki_font_f1[ MISAKI_FONT_F1_SIZE + 1 ][ MISAKI_FONT_F1_W ] = +{ + { 0x00, 0x00, 0x00 }, /* 0x00 */ + { 0x00, 0x2f, 0x00 }, /* 0x01 ! */ + { 0x03, 0x00, 0x03 }, /* 0x02 " */ + { 0x3f, 0x12, 0x3f }, /* 0x03 # */ + { 0x16, 0x3f, 0x1a }, /* 0x04 $ */ + { 0x12, 0x08, 0x24 }, /* 0x05 % */ + { 0x32, 0x3d, 0x2a }, /* 0x06 & */ + { 0x02, 0x01, 0x00 }, /* 0x07 ' */ + { 0x00, 0x3e, 0x41 }, /* 0x08 ( */ + { 0x41, 0x3e, 0x00 }, /* 0x09 ) */ + { 0x0a, 0x07, 0x0a }, /* 0x0A * */ + { 0x08, 0x3e, 0x08 }, /* 0x0B + */ + { 0x40, 0x20, 0x00 }, /* 0x0C , */ + { 0x08, 0x08, 0x08 }, /* 0x0D - */ + { 0x00, 0x20, 0x00 }, /* 0x0E . */ + { 0x10, 0x08, 0x04 }, /* 0x0F / */ + { 0x1c, 0x2a, 0x1c }, /* 0x10 0 */ + { 0x24, 0x3e, 0x20 }, /* 0x11 1 */ + { 0x32, 0x2a, 0x24 }, /* 0x12 2 */ + { 0x22, 0x2a, 0x14 }, /* 0x13 3 */ + { 0x18, 0x14, 0x3e }, /* 0x14 4 */ + { 0x2e, 0x2a, 0x12 }, /* 0x15 5 */ + { 0x1c, 0x2a, 0x12 }, /* 0x16 6 */ + { 0x02, 0x3a, 0x06 }, /* 0x17 7 */ + { 0x14, 0x2a, 0x14 }, /* 0x18 8 */ + { 0x24, 0x2a, 0x1c }, /* 0x19 9 */ + { 0x00, 0x24, 0x00 }, /* 0x1A : */ + { 0x40, 0x24, 0x00 }, /* 0x1B ; */ + { 0x08, 0x14, 0x22 }, /* 0x1C < */ + { 0x14, 0x14, 0x14 }, /* 0x1D = */ + { 0x22, 0x14, 0x08 }, /* 0x1E > */ + { 0x02, 0x29, 0x06 }, /* 0x1F ? */ + { 0x12, 0x29, 0x1e }, /* 0x20 @ */ + { 0x3e, 0x09, 0x3e }, /* 0x21 A */ + { 0x3f, 0x25, 0x1a }, /* 0x22 B */ + { 0x1e, 0x21, 0x21 }, /* 0x23 C */ + { 0x3f, 0x21, 0x1e }, /* 0x24 D */ + { 0x3f, 0x25, 0x21 }, /* 0x25 E */ + { 0x3f, 0x05, 0x01 }, /* 0x26 F */ + { 0x1e, 0x21, 0x39 }, /* 0x27 G */ + { 0x3f, 0x08, 0x3f }, /* 0x28 H */ + { 0x21, 0x3f, 0x21 }, /* 0x29 I */ + { 0x10, 0x20, 0x1f }, /* 0x2A J */ + { 0x3f, 0x04, 0x3b }, /* 0x2B K */ + { 0x3f, 0x20, 0x20 }, /* 0x2C L */ + { 0x3f, 0x06, 0x3f }, /* 0x2D M */ + { 0x3f, 0x01, 0x3e }, /* 0x2E N */ + { 0x1e, 0x21, 0x1e }, /* 0x2F O */ + { 0x3f, 0x09, 0x06 }, /* 0x30 P */ + { 0x1e, 0x21, 0x5e }, /* 0x31 Q */ + { 0x3f, 0x09, 0x36 }, /* 0x32 R */ + { 0x22, 0x25, 0x19 }, /* 0x33 S */ + { 0x01, 0x3f, 0x01 }, /* 0x34 T */ + { 0x3f, 0x20, 0x3f }, /* 0x35 U */ + { 0x3f, 0x10, 0x0f }, /* 0x36 V */ + { 0x3f, 0x18, 0x3f }, /* 0x37 W */ + { 0x33, 0x0c, 0x33 }, /* 0x38 X */ + { 0x03, 0x3c, 0x03 }, /* 0x39 Y */ + { 0x31, 0x2d, 0x23 }, /* 0x3A Z */ + { 0x00, 0x7f, 0x41 }, /* 0x3B [ */ + { 0x15, 0x3e, 0x15 }, /* 0x3C \ */ + { 0x41, 0x7f, 0x00 }, /* 0x3D ] */ + { 0x02, 0x01, 0x02 }, /* 0x3E ^ */ + { 0x40, 0x40, 0x40 }, /* 0x3F _ */ + { 0x00, 0x01, 0x02 }, /* 0x40 ` */ + { 0x18, 0x24, 0x3c }, /* 0x41 a */ + { 0x3f, 0x24, 0x18 }, /* 0x42 b */ + { 0x18, 0x24, 0x24 }, /* 0x43 c */ + { 0x18, 0x24, 0x3f }, /* 0x44 d */ + { 0x18, 0x2c, 0x2c }, /* 0x45 e */ + { 0x04, 0x3f, 0x05 }, /* 0x46 f */ + { 0x48, 0x54, 0x3c }, /* 0x47 g */ + { 0x3f, 0x04, 0x38 }, /* 0x48 h */ + { 0x00, 0x3d, 0x00 }, /* 0x49 i */ + { 0x40, 0x3d, 0x00 }, /* 0x4A j */ + { 0x3f, 0x08, 0x34 }, /* 0x4B k */ + { 0x01, 0x3f, 0x00 }, /* 0x4C l */ + { 0x3c, 0x1c, 0x38 }, /* 0x4D m */ + { 0x3c, 0x04, 0x38 }, /* 0x4E n */ + { 0x18, 0x24, 0x18 }, /* 0x4F o */ + { 0x7c, 0x24, 0x18 }, /* 0x50 p */ + { 0x18, 0x24, 0x7c }, /* 0x51 q */ + { 0x3c, 0x08, 0x04 }, /* 0x52 r */ + { 0x28, 0x3c, 0x14 }, /* 0x53 s */ + { 0x04, 0x3e, 0x24 }, /* 0x54 t */ + { 0x3c, 0x20, 0x3c }, /* 0x55 u */ + { 0x3c, 0x10, 0x0c }, /* 0x56 v */ + { 0x3c, 0x30, 0x3c }, /* 0x57 w */ + { 0x24, 0x18, 0x24 }, /* 0x58 x */ + { 0x4c, 0x50, 0x3c }, /* 0x59 y */ + { 0x24, 0x34, 0x2c }, /* 0x5A z */ + { 0x08, 0x36, 0x41 }, /* 0x5B { */ + { 0x00, 0x7f, 0x00 }, /* 0x5C | */ + { 0x41, 0x36, 0x08 }, /* 0x5D } */ + { 0x01, 0x01, 0x01 }, /* 0x5E ~ */ + { 0x10, 0x28, 0x10 }, /* 0x5F 。 */ + { 0x1f, 0x01, 0x01 }, /* 0x60 「 */ + { 0x20, 0x20, 0x3e }, /* 0x61 」 */ + { 0x10, 0x20, 0x00 }, /* 0x62 、 */ + { 0x00, 0x08, 0x00 }, /* 0x63 ・ */ + { 0x25, 0x15, 0x0f }, /* 0x64 ヲ */ + { 0x24, 0x1c, 0x0c }, /* 0x65 ァ */ + { 0x10, 0x38, 0x04 }, /* 0x66 ィ */ + { 0x18, 0x0c, 0x38 }, /* 0x67 ゥ */ + { 0x28, 0x38, 0x28 }, /* 0x68 ェ */ + { 0x28, 0x18, 0x3c }, /* 0x69 ォ */ + { 0x08, 0x3c, 0x18 }, /* 0x6A ャ */ + { 0x28, 0x38, 0x20 }, /* 0x6B ュ */ + { 0x24, 0x2c, 0x3c }, /* 0x6C ョ */ + { 0x2c, 0x2c, 0x1c }, /* 0x6D ッ */ + { 0x04, 0x08, 0x08 }, /* 0x6E ー */ + { 0x21, 0x1d, 0x07 }, /* 0x6F ア */ + { 0x08, 0x3c, 0x03 }, /* 0x70 イ */ + { 0x06, 0x23, 0x1e }, /* 0x71 ウ */ + { 0x22, 0x3e, 0x22 }, /* 0x72 エ */ + { 0x12, 0x0a, 0x3f }, /* 0x73 オ */ + { 0x32, 0x0f, 0x3e }, /* 0x74 カ */ + { 0x0a, 0x3f, 0x0a }, /* 0x75 キ */ + { 0x24, 0x13, 0x0e }, /* 0x76 ク */ + { 0x27, 0x1e, 0x02 }, /* 0x77 ケ */ + { 0x22, 0x22, 0x3e }, /* 0x78 コ */ + { 0x27, 0x12, 0x0f }, /* 0x79 サ */ + { 0x25, 0x25, 0x10 }, /* 0x7A シ */ + { 0x21, 0x19, 0x27 }, /* 0x7B ス */ + { 0x3f, 0x22, 0x2e }, /* 0x7C セ */ + { 0x21, 0x16, 0x0f }, /* 0x7D ソ */ + { 0x24, 0x1b, 0x0e }, /* 0x7E タ */ + { 0x25, 0x1f, 0x05 }, /* 0x7F チ */ + { 0x26, 0x26, 0x1e }, /* 0x80 ツ */ + { 0x25, 0x1d, 0x05 }, /* 0x81 テ */ + { 0x3f, 0x04, 0x08 }, /* 0x82 ト */ + { 0x24, 0x1f, 0x04 }, /* 0x83 ナ */ + { 0x20, 0x22, 0x22 }, /* 0x84 ニ */ + { 0x25, 0x19, 0x27 }, /* 0x85 ヌ */ + { 0x12, 0x3b, 0x16 }, /* 0x86 ネ */ + { 0x20, 0x10, 0x0f }, /* 0x87 ノ */ + { 0x3c, 0x01, 0x3e }, /* 0x88 ハ */ + { 0x1f, 0x24, 0x24 }, /* 0x89 ヒ */ + { 0x21, 0x11, 0x0f }, /* 0x8A フ */ + { 0x0c, 0x03, 0x1c }, /* 0x8B ヘ */ + { 0x1a, 0x3f, 0x1a }, /* 0x8C ホ */ + { 0x09, 0x19, 0x27 }, /* 0x8D マ */ + { 0x22, 0x2a, 0x2a }, /* 0x8E ミ */ + { 0x38, 0x27, 0x30 }, /* 0x8F ム */ + { 0x32, 0x0c, 0x13 }, /* 0x90 メ */ + { 0x05, 0x3f, 0x25 }, /* 0x91 モ */ + { 0x02, 0x3f, 0x0e }, /* 0x92 ヤ */ + { 0x21, 0x3f, 0x20 }, /* 0x93 ユ */ + { 0x25, 0x25, 0x3f }, /* 0x94 ヨ */ + { 0x25, 0x25, 0x1d }, /* 0x95 ラ */ + { 0x07, 0x20, 0x1f }, /* 0x96 リ */ + { 0x3c, 0x3f, 0x20 }, /* 0x97 ル */ + { 0x3f, 0x20, 0x10 }, /* 0x98 レ */ + { 0x3e, 0x22, 0x3e }, /* 0x99 ロ */ + { 0x23, 0x11, 0x0f }, /* 0x9A ワ */ + { 0x21, 0x21, 0x18 }, /* 0x9B ン */ + { 0x01, 0x00, 0x01 }, /* 0x9C ゙ */ + { 0x02, 0x05, 0x02 }, /* 0x9D ゚ */ +}; +#define MISAKI_FONT_F2_H +PROGMEM const uint8_t misaki_font_f2[ MISAKI_FONT_F2_SIZE + 1 ][ MISAKI_FONT_F2_W ] = +{ + { 0x75, 0x40, 0x77, 0x55, 0x75, 0x77, 0x40 }, /* 0x00 温 */ + { 0x40, 0x3e, 0x4a, 0x5e, 0x2b, 0x5e, 0x4a }, /* 0x01 度 */ + { 0x6b, 0x62, 0x7f, 0x35, 0x2f, 0x35, 0x7f }, /* 0x02 調 */ + { 0x7c, 0x5b, 0x5e, 0x24, 0x7b, 0x0e, 0x3a }, /* 0x03 節 */ + { 0x04, 0x7e, 0x01, 0x7e, 0x4a, 0x5e, 0x69 }, /* 0x04 低 */ + { 0x06, 0x3a, 0x2f, 0x3f, 0x6b, 0x7e, 0x46 }, /* 0x05 電 */ + { 0x40, 0x3f, 0x41, 0x49, 0x7f, 0x49, 0x41 }, /* 0x06 圧 */ + { 0x02, 0x62, 0x6b, 0x6b, 0x6b, 0x62, 0x02 }, /* 0x07 言 */ + { 0x6a, 0x6b, 0x14, 0x7d, 0x57, 0x7d, 0x10 }, /* 0x08 語 */ + { 0x41, 0x3f, 0x55, 0x55, 0x3d, 0x57, 0x51 }, /* 0x09 戻 */ + { 0x21, 0x3f, 0x2d, 0x7f, 0x2a, 0x12, 0x2e }, /* 0x0A 取 */ + { 0x0a, 0x77, 0x5a, 0x50, 0x5a, 0x77, 0x0a }, /* 0x0B 替 */ + { 0x20, 0x24, 0x13, 0x7d, 0x55, 0x53, 0x70 }, /* 0x0C 名 */ + { 0x7a, 0x2a, 0x7b, 0x02, 0x1a, 0x43, 0x7a }, /* 0x0D 前 */ + { 0x4a, 0x52, 0x5e, 0x2b, 0x5e, 0x42, 0x4a }, /* 0x0E 変 */ + { 0x41, 0x5f, 0x35, 0x3f, 0x55, 0x5f, 0x41 }, /* 0x0F 更 */ + { 0x7d, 0x14, 0x57, 0x7d, 0x0e, 0x40, 0x7f }, /* 0x10 削 */ + { 0x7f, 0x1b, 0x54, 0x16, 0x7d, 0x16, 0x54 }, /* 0x11 除 */ + { 0x49, 0x3a, 0x40, 0x7e, 0x57, 0x56, 0x76 }, /* 0x12 追 */ + { 0x42, 0x3f, 0x42, 0x7e, 0x7e, 0x42, 0x7e }, /* 0x13 加 */ + { 0x04, 0x7e, 0x51, 0x37, 0x7d, 0x37, 0x50 }, /* 0x14 保 */ + { 0x12, 0x7a, 0x17, 0x52, 0x76, 0x1e, 0x12 }, /* 0x15 存 */ + { 0x7f, 0x55, 0x7f, 0x14, 0x5d, 0x7f, 0x55 }, /* 0x16 睡 */ + { 0x7f, 0x55, 0x7f, 0x7f, 0x55, 0x3d, 0x57 }, /* 0x17 眠 */ + { 0x7f, 0x55, 0x37, 0x78, 0x17, 0x45, 0x7f }, /* 0x18 閉 */ + { 0x7f, 0x2b, 0x7b, 0x28, 0x7b, 0x2b, 0x7f }, /* 0x19 開 */ + { 0x1e, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x1e }, /* 0x1A 中 */ + { 0x7f, 0x41, 0x6b, 0x7f, 0x6b, 0x51, 0x7f }, /* 0x1B 国 */ + { 0x52, 0x5a, 0x57, 0x3a, 0x57, 0x5a, 0x52 }, /* 0x1C 英 */ + { 0x00, 0x7f, 0x49, 0x49, 0x49, 0x49, 0x7f }, /* 0x1D 日 */ + { 0x22, 0x12, 0x2a, 0x7f, 0x2a, 0x12, 0x22 }, /* 0x1E 本 */ + { 0x16, 0x6a, 0x5e, 0x73, 0x56, 0x62, 0x16 }, /* 0x1F 密 */ + { 0x09, 0x37, 0x31, 0x5f, 0x15, 0x5f, 0x75 }, /* 0x20 碼 */ + { 0x42, 0x22, 0x1e, 0x0b, 0x4a, 0x7a, 0x02 }, /* 0x21 方 */ + { 0x7e, 0x02, 0x3a, 0x2b, 0x3a, 0x42, 0x7e }, /* 0x22 向 */ +}; +/* + プリセット + 温度調節 + タイマー + コントロール + スクリーン + ブザー + 低電圧アラーム + 言語 + 戻る + 取り替える + キャリブレーション + 名前を変更 + 削除 + 追加 + 保存 + デフォルト + 睡眠 + ブースト + 保存 + 睡眠 + 閉じる + ブースト + 保存 + ダイレクト + PID + ビッグ + ニュース + 閉じる + 開く + いいえ、 + はい、 + 中国語 + 英語 + いいえ、 + はい、 + メインスクリーン + フリップ + 保存 + アバウト + 日本語 + つまみ方向 + + 汉字转换表:温度調節低電圧言語戻取替名前変更削除追加保存睡眠閉開中国英日本密碼 +*/ +const char JP_0[] PROGMEM = { 0xf0, 0xcc, 0xdf, 0xb0, 0xb8, 0xbd, }; +const char JP_1[] PROGMEM = { 0xf2, 0x00, 0x01, 0x02, 0x03, }; +const char JP_2[] PROGMEM = { 0xf0, 0xb4, 0x99, 0xd3, 0xee, }; +const char JP_3[] PROGMEM = { 0xf0, 0xa8, 0xe8, 0xbd, 0xe2, 0xee, 0xe0, }; +const char JP_4[] PROGMEM = { 0xf0, 0xae, 0xa4, 0xdf, 0xee, 0xe8, }; +const char JP_5[] PROGMEM = { 0xf0, 0xcb, 0xab, 0xee, }; +const char JP_6[] PROGMEM = { 0xf2, 0x04, 0x05, 0x06, 0xf0, 0x97, 0xde, 0xee, 0xd5, }; +const char JP_7[] PROGMEM = { 0xf2, 0x07, 0x08, }; +const char JP_8[] PROGMEM = { 0xf2, 0x09, 0xf0, 0x8d, }; +const char JP_9[] PROGMEM = { 0xf2, 0x0a, 0xf0, 0x8c, 0xf2, 0x0b, 0xf0, 0x4a, 0x8d, }; +const char JP_10[] PROGMEM = { 0xf0, 0xa2, 0xd8, 0xdf, 0xcb, 0xe1, 0xee, 0xac, 0xdc, 0xe8, }; +const char JP_11[] PROGMEM = { 0xf2, 0x0c, 0x0d, 0xf0, 0x94, 0xf2, 0x0e, 0x0f, }; +const char JP_12[] PROGMEM = { 0xf2, 0x10, 0x11, }; +const char JP_13[] PROGMEM = { 0xf2, 0x12, 0x13, }; +const char JP_14[] PROGMEM = { 0xf2, 0x14, 0x15, }; +const char JP_15[] PROGMEM = { 0xf0, 0xbc, 0xca, 0x9e, 0xe0, 0xbd, }; +const char JP_16[] PROGMEM = { 0xf2, 0x16, 0x17, }; +const char JP_17[] PROGMEM = { 0xf0, 0xcb, 0xee, 0xae, 0xbd, }; +const char JP_18[] PROGMEM = { 0xf2, 0x14, 0x15, }; +const char JP_19[] PROGMEM = { 0xf2, 0x16, 0x17, }; +const char JP_20[] PROGMEM = { 0xf2, 0x18, 0xf0, 0x5a, 0x8d, }; +const char JP_21[] PROGMEM = { 0xf0, 0xcb, 0xee, 0xae, 0xbd, }; +const char JP_22[] PROGMEM = { 0xf2, 0x14, 0x15, }; +const char JP_23[] PROGMEM = { 0xf0, 0xb5, 0x99, 0xe1, 0xa4, 0xbd, }; +const char JP_24[] PROGMEM = { 0xf1, 0x30, 0x29, 0x24, }; +const char JP_25[] PROGMEM = { 0xf0, 0xc8, 0xb8, 0xa5, }; +const char JP_26[] PROGMEM = { 0xf0, 0xc0, 0xda, 0xee, 0xae, }; +const char JP_27[] PROGMEM = { 0xf2, 0x18, 0xf0, 0x5a, 0x8d, }; +const char JP_28[] PROGMEM = { 0xf2, 0x19, 0xf0, 0x51, }; +const char JP_29[] PROGMEM = { 0xf0, 0x46, 0x46, 0x4a, 0x01, }; +const char JP_30[] PROGMEM = { 0xf0, 0x71, 0x46, 0x01, }; +const char JP_31[] PROGMEM = { 0xf2, 0x1a, 0x1b, 0x08, }; +const char JP_32[] PROGMEM = { 0xf2, 0x1c, 0x08, }; +const char JP_33[] PROGMEM = { 0xf0, 0x46, 0x46, 0x4a, 0x01, }; +const char JP_34[] PROGMEM = { 0xf0, 0x71, 0x46, 0x01, }; +const char JP_35[] PROGMEM = { 0xf0, 0xd6, 0x99, 0xe8, 0xae, 0xa4, 0xdf, 0xee, 0xe8, }; +const char JP_36[] PROGMEM = { 0xf0, 0xca, 0xdf, 0xb8, 0xcc, }; +const char JP_37[] PROGMEM = { 0xf2, 0x14, 0x15, }; +const char JP_38[] PROGMEM = { 0xf0, 0x97, 0xc5, 0x9b, 0xbd, }; +const char JP_39[] PROGMEM = { 0xf2, 0x1d, 0x1e, 0x08, }; +const char JP_40[] PROGMEM = { 0xf2, 0x1f, 0x20, }; //密码 +const char JP_41[] PROGMEM = { 0xf0, 0x66, 0x80, 0x81, 0xf2, 0x21, 0x22, }; //つまみ方向 +const char *const JP_table[] = {JP_0, JP_1, JP_2, JP_3, JP_4, JP_5, JP_41, JP_6, JP_40, JP_7, JP_38, JP_8, JP_9, JP_10, JP_11, JP_12, JP_13, JP_14, JP_15, JP_16, JP_17, JP_18, JP_19, JP_20, JP_21, JP_22, JP_23, JP_24, JP_25, JP_26, JP_27, JP_28, JP_29, JP_30, JP_31, JP_32, JP_39, JP_35, JP_36, JP_37,}; +const char JP_Length_table[] PROGMEM = {6, 5, 5, 7, 6, 4, 7, 9, 3, 3 , 5, 4, 9, 10, 8, 3, 3, 3, 6, 3, 5, 3, 3, 5, 5, 3, 6, 4, 4, 5, 5, 4, 5, 4, 4, 3, 4, 9, 5, 3,}; + +#endif + +bool lastbutton; +#include //注意 这里使用被阉割的图形库,只有绘图功能,并非通用的版本 +Arduboy2 arduboy; + +#include +#include +#include + +// Firmware version +#define VERSION "v1.8t4" + +// Type of rotary encoder +#define ROTARY_TYPE 1 // 0: 2 increments/step; 1: 4 increments/step + +// Pins +#define SENSOR_PIN A0 // temperature sense +#define VIN_PIN A1 // input voltage sense +#define BUZZER_PIN 5 // buzzer +#define BUTTON_PIN 6 // rotary encoder switch +#define ROTARY_1_PIN 7 // rotary encoder 1 +#define ROTARY_2_PIN 8 // rotary encoder 2 +#define CONTROL_PIN 9 // heater MOSFET PWM control +#define SWITCH_PIN 10 // handle vibration switch + +// Default temperature control values (recommended soldering temperature: 300-380°C) +#define ChipTempCalVal 335 //芯片内部温度读取校准值 -->可以根据实际情况修改,不同机器情况不同,通常误差在10°C内 +#define TEMP_MIN 150 // min selectable temperature +#define TEMP_MAX 400 // max selectable temperature +#define TEMP_DEFAULT 320 // default start setpoint +#define TEMP_SLEEP 150 // temperature in sleep mode +#define TEMP_BOOST 60 // temperature increase in boost mode +#define TEMP_STEP 10 // rotary encoder temp change steps + +// Default tip temperature calibration values +#define TEMP200 216 // temperature at ADC = 200 +#define TEMP280 308 // temperature at ADC = 280 +#define TEMP360 390 // temperature at ADC = 360 +#define TEMPCHP 30 // chip temperature while calibration +#define TIPMAX 8 // max number of tips +#define TIPNAMELENGTH 6 // max length of tip names (including termination) +#define TIPNAME "BC1.5" // default tip name + +// Default timer values (0 = disabled) +#define TIME2SLEEP 5 // time to enter sleep mode in minutes +#define TIME2OFF 15 // time to shut off heater in minutes +#define TIMEOFBOOST 40 // time to stay in boost mode in seconds + +// Control values +#define TIME2SETTLE 950 // time in microseconds to allow OpAmp output to settle +#define SMOOTHIE 0.05 // OpAmp output smooth factor (1=no smoothing; 0.05 default) +#define PID_ENABLE true // enable PID control +#define BEEP_ENABLE true // enable/disable buzzer +#define MAINSCREEN 1 // type of main screen (0: big numbers; 1: more infos) + +// EEPROM identifier +#define EEPROM_IDENT 0x140A // to identify if EEPROM was written by this program + +//Beep +#define SetBeepCoolTime 200 +unsigned long BeepCoolTime; + +// Define the aggressive and conservative PID tuning parameters +double aggKp = 11, aggKi = 0.5, aggKd = 1; +double consKp = 11, consKi = 3, consKd = 5; + +// Default values that can be changed by the user and stored in the EEPROM +uint16_t DefaultTemp = TEMP_DEFAULT; +uint16_t SleepTemp = TEMP_SLEEP; +uint8_t BoostTemp = TEMP_BOOST; +uint8_t time2sleep = TIME2SLEEP; +uint8_t time2off = TIME2OFF; +uint8_t timeOfBoost = TIMEOFBOOST; +uint8_t MainScrType = MAINSCREEN; +bool PIDenable = PID_ENABLE; +bool beepEnable = BEEP_ENABLE; +// Default values for tips +uint16_t CalTemp[TIPMAX][4] = {TEMP200, TEMP280, TEMP360, TEMPCHP}; +char TipName[TIPMAX][TIPNAMELENGTH] = {TIPNAME}; +uint8_t CurrentTip = 0; +uint8_t NumberOfTips = 1; + +// Menu items +/* + 这个可以选择进行界面美化 + const char *DeleteMessage[] = { "Warning", "You cannot", "delete your", "last tip!" }; + const char *MaxTipMessage[] = { "Warning", "You reached", "maximum number", "of tips!" }; +*/ +// Variables for pin change interrupt +volatile uint8_t a0, b0, c0, d0; +volatile bool ab0; +volatile int count, countMin, countMax, countStep; +volatile bool handleMoved; + +// Variables for temperature control +uint16_t SetTemp, ShowTemp, gap, Step; +double Input, Output, Setpoint, RawTemp, CurrentTemp, ChipTemp; + +// Variables for voltage readings +uint16_t Vcc, Vin; + +// State variables +bool inSleepMode = false; +bool inOffMode = false; +bool inBoostMode = false; +bool inCalibMode = false; +bool isWorky = true; +bool beepIfWorky = true; +bool TipIsPresent = true; +bool FlipState = false; +// Timing variables +uint32_t sleepmillis; +uint32_t boostmillis; +uint32_t buttonmillis; +uint8_t goneMinutes; +uint8_t goneSeconds; +uint8_t SensorCounter = 255; +//串口助手 +int x, y, a, b; +//欠压报警 +byte UnderVoltage = 0; +// Control variables +uint16_t time2settle = 300; + +//模拟数字滚轮 Numerical scrolling effect +int Value; +int LastValue[3]; +float SlidingAnimationY[3]; + +//开机密码 BootPassword +int Password = 0; + +//屏幕保护-主题:密集运算 +byte Line[4]; + +//编码器旋转调整方向设定 +bool RotaryD = false; + +// Specify the links and initial PID tuning parameters +PID ctrl(&Input, &Output, &Setpoint, aggKp, aggKi, aggKd, REVERSE); + +//NMOS - PMOS软件切换 +#define UsePMOS false + +//LANG 语言支持 +/* 0 - 中文 CHINESE + 1 - 英文 ENGLISH + 2 - 日语 +*/ +byte LANG = 0; +void Flip(bool Fmode) { + arduboy.flipVertical(Fmode); + arduboy.flipHorizontal(Fmode); +} + +ISR(WDT_vect) //WDT中断,8秒一次 +{ + WDTCSR |= _BV(WDIE); +} + +void setup() { + //设置看门狗自动复位 + SetWDT(); + //启动arduboy + arduboy.begin(); + arduboy.setFrameRate(30); + + //Serial.begin(115200); + // set the pin modes + + //设置IO + pinMode(SENSOR_PIN, INPUT); + pinMode(VIN_PIN, INPUT); + pinMode(BUZZER_PIN, OUTPUT); + pinMode(CONTROL_PIN, OUTPUT); + pinMode(ROTARY_1_PIN, INPUT_PULLUP); + pinMode(ROTARY_2_PIN, INPUT_PULLUP); + pinMode(BUTTON_PIN, INPUT_PULLUP); + pinMode(SWITCH_PIN, INPUT_PULLUP); +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); // this shuts off the heater +#endif + digitalWrite(BUZZER_PIN, LOW); // must be LOW when buzzer not in use + + // setup ADC 初始化ADC + ADCSRA |= bit (ADPS0) | bit (ADPS1) | bit (ADPS2); // set ADC prescaler to 128 + ADCSRA |= bit (ADIE); // enable ADC interrupt + interrupts (); // enable global interrupts + + // setup pin change interrupt for rotary encoder 初始化编码器IO + PCMSK0 = bit (PCINT0); // Configure pin change interrupt on Pin8 + PCICR = bit (PCIE0); // Enable pin change interrupt + PCIFR = bit (PCIF0); // Clear interrupt flag + + + // get default values from EEPROM + getEEPROM(); + //设置屏幕反转状态 + Flip(FlipState); + //初始化屏幕保护动画 + for (byte a = 0; a < 4; a++) Line[a] = 32 * a; + //开机密码 + BootPassword(); + + // read supply voltages in mV + Vcc = getVCC(); Vin = getVIN(); + + // read and set current iron temperature + SetTemp = DefaultTemp; + RawTemp = denoiseAnalog(SENSOR_PIN); + ChipTemp = getChipTemp(); + calculateTemp(); + + // turn on heater if iron temperature is well below setpoint +#if UsePMOS + if ((CurrentTemp + 20) < DefaultTemp) analogWrite(CONTROL_PIN, 255); +#else + if ((CurrentTemp + 20) < DefaultTemp) analogWrite(CONTROL_PIN, 0); +#endif + + + // tell the PID to range between 0 and the full window size + ctrl.SetOutputLimits(0, 255); + + // start PID + ctrl.SetMode(AUTOMATIC); + + // set initial rotary encoder values + a0 = PINB & 1; b0 = PIND >> 7 & 1; ab0 = (a0 == b0); + setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, DefaultTemp); + + // reset sleep timer + sleepmillis = millis(); + + // long beep for setup completion + beep(); beep(); + +} + + +void loop() { + //HelpMeSerialer(); + ROTARYCheck(); // check rotary encoder (temp/boost setting, enter setup menu) + SLEEPCheck(); // check and activate/deactivate sleep modes + SENSORCheck(); // reads temperature and vibration switch of the iron + Thermostat(); // heater control + MainScreen(); // updates the main page on the OLED + //beep(0); +} + + + + +// check rotary encoder; set temperature, toggle boost mode, enter setup menu accordingly +void ROTARYCheck() { + // set working temperature according to rotary encoder value + SetTemp = getRotary(); + + // check rotary encoder switch + uint8_t c = digitalRead(BUTTON_PIN); + if ( !c && c0 ) { + beep(); + buttonmillis = millis(); + while ( (!digitalRead(BUTTON_PIN)) && ((millis() - buttonmillis) < 500) ); + if ((millis() - buttonmillis) >= 500) SetupScreen(); + else { + inBoostMode = !inBoostMode; + if (inBoostMode) boostmillis = millis(); + handleMoved = true; + } + } + c0 = c; + + // check timer when in boost mode + if (inBoostMode && timeOfBoost) { + goneSeconds = (millis() - boostmillis) / 1000; + if (goneSeconds >= timeOfBoost) { + inBoostMode = false; // stop boost mode + beep(); // beep if boost mode is over + beepIfWorky = true; // beep again when working temperature is reached + } + } +} + + +// check and activate/deactivate sleep modes +void SLEEPCheck() { + if (handleMoved) { // if handle was moved + if (inSleepMode) { // in sleep or off mode? + if ((CurrentTemp + 20) < SetTemp) // if temp is well below setpoint + + // then start the heater right now + +#if UsePMOS + analogWrite(CONTROL_PIN, 255); +#else + analogWrite(CONTROL_PIN, 0); +#endif + + beep(); // beep on wake-up + beepIfWorky = true; // beep again when working temperature is reached + } + handleMoved = false; // reset handleMoved flag + inSleepMode = false; // reset sleep flag + inOffMode = false; // reset off flag + sleepmillis = millis(); // reset sleep timer + } + + // check time passed since the handle was moved + goneMinutes = (millis() - sleepmillis) / 60000; + if ( (!inSleepMode) && (time2sleep > 0) && (goneMinutes >= time2sleep) ) { + inSleepMode = true; + beep(); + } + if ( (!inOffMode) && (time2off > 0) && (goneMinutes >= time2off ) ) { + inOffMode = true; + beep(); + } +} + + +// reads temperature, vibration switch and supply voltages +void SENSORCheck() { + // shut off heater in order to measure temperature +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + delayMicroseconds(time2settle); // wait for voltage to settle + + uint16_t temp = denoiseAnalog(SENSOR_PIN); // read ADC value for temperature + uint8_t d = digitalRead(SWITCH_PIN); // check handle vibration switch + if (d != d0) { + handleMoved = true; // set flag if handle was moved + d0 = d; + } + if (! SensorCounter--) Vin = getVIN(); // get Vin every now and then + + // turn on again heater + +#if UsePMOS + analogWrite(CONTROL_PIN, 255 - Output); +#else + analogWrite(CONTROL_PIN, Output); +#endif + + + RawTemp += (temp - RawTemp) * SMOOTHIE; // stabilize ADC temperature reading + calculateTemp(); + + // stabilize displayed temperature when around setpoint + if ((ShowTemp != Setpoint) || (abs(ShowTemp - CurrentTemp) > 5)) ShowTemp = CurrentTemp; + if (abs(ShowTemp - Setpoint) <= 1) ShowTemp = Setpoint; + // set state variable if temperature is in working range; beep if working temperature was just reached + gap = abs(SetTemp - CurrentTemp); + if (gap < 5) { + if (!isWorky && beepIfWorky) beep(); + isWorky = true; + beepIfWorky = false; + } else { + isWorky = false; + beepIfWorky = true; + } + // checks if tip is present or currently inserted + if (ShowTemp > 500) TipIsPresent = false; // tip removed ? + if (!TipIsPresent && (ShowTemp < 500)) { // new tip inserted ? + //关闭加热 +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + beep(); // beep for info + TipIsPresent = true; // tip is present now + ChangeTipScreen(); // show tip selection screen + updateEEPROM(); // update setting in EEPROM + handleMoved = true; // reset all timers + RawTemp = denoiseAnalog(SENSOR_PIN); // restart temp smooth algorithm + c0 = LOW; // switch must be released + setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, SetTemp); // reset rotary encoder + } +} + + +// calculates real temperature value according to ADC reading and calibration values +void calculateTemp() { + if (RawTemp < 200) CurrentTemp = map (RawTemp, 0, 200, 21, CalTemp[CurrentTip][0]); + else if (RawTemp < 280) CurrentTemp = map (RawTemp, 200, 280, CalTemp[CurrentTip][0], CalTemp[CurrentTip][1]); + else CurrentTemp = map (RawTemp, 280, 360, CalTemp[CurrentTip][1], CalTemp[CurrentTip][2]); +} + + +//调温 +void Thermostat() { + // define Setpoint acoording to current working mode + if (inOffMode) Setpoint = 0; + else if (inSleepMode) Setpoint = SleepTemp; + else if (inBoostMode) Setpoint = SetTemp + BoostTemp; + else Setpoint = SetTemp; + + // control the heater (PID or direct) + gap = abs(Setpoint - CurrentTemp); + if (PIDenable) { + Input = CurrentTemp; + if (gap < 30) ctrl.SetTunings(consKp, consKi, consKd); + else ctrl.SetTunings(aggKp, aggKi, aggKd); + ctrl.Compute(); + } else { + // turn on heater if current temperature is below setpoint + if ((CurrentTemp + 0.5) < Setpoint) Output = 0; else Output = 255; + } + // set heater PWM +#if UsePMOS + analogWrite(CONTROL_PIN, 255 - Output); +#else + analogWrite(CONTROL_PIN, Output); +#endif +} + + +// creates a short beep on the buzzer +void beep() { + /* + if (beepEnable) { + if (BeepCoolTime + SetBeepCoolTime < millis()) { + if (state) BeepCoolTime = millis(); + analogWrite(BUZZER_PIN, 0); + } else analogWrite(BUZZER_PIN, 127); + } else analogWrite(BUZZER_PIN, 0); + */ + //体谅一下,没内存了,只能用原始的办法驱动无源蜂鸣器,否则我也不想牺牲宝贵响应资源换内存 + if (beepEnable) { + for (uint8_t i = 0; i < 255; i++) { + digitalWrite(BUZZER_PIN, HIGH); + delayMicroseconds(125); + digitalWrite(BUZZER_PIN, LOW); + delayMicroseconds(125); + } + } +} + +//设置旋转编码器的起始值 +// sets start values for rotary encoder +void setRotary(int rmin, int rmax, int rstep, int rvalue) { + countMin = rmin << ROTARY_TYPE; + countMax = rmax << ROTARY_TYPE; + if (RotaryD) countStep = rstep; else countStep = -rstep; + count = rvalue << ROTARY_TYPE; +} + + +// reads current rotary encoder value +int getRotary() { + return (count >> ROTARY_TYPE); +} + + +// reads user settings from EEPROM; if EEPROM values are invalid, write defaults +void getEEPROM() { + uint16_t identifier = (EEPROM.read(0) << 8) | EEPROM.read(1); + if (identifier == EEPROM_IDENT) { + DefaultTemp = (EEPROM.read(2) << 8) | EEPROM.read(3); + SleepTemp = (EEPROM.read(4) << 8) | EEPROM.read(5); + BoostTemp = EEPROM.read(6); + time2sleep = EEPROM.read(7); + time2off = EEPROM.read(8); + timeOfBoost = EEPROM.read(9); + MainScrType = EEPROM.read(10); + PIDenable = EEPROM.read(11); + beepEnable = EEPROM.read(12); + CurrentTip = EEPROM.read(13); + NumberOfTips = EEPROM.read(14); + LANG = EEPROM.read(15); + FlipState = EEPROM.read(16); + UnderVoltage = EEPROM.read(17); + Password = (EEPROM.read(18) << 8) | EEPROM.read(19); + RotaryD = EEPROM.read(20); + uint8_t i, j; + uint16_t counter = 21; + for (i = 0; i < NumberOfTips; i++) { + for (j = 0; j < TIPNAMELENGTH; j++) { + TipName[i][j] = EEPROM.read(counter++); + } + for (j = 0; j < 4; j++) { + CalTemp[i][j] = EEPROM.read(counter++) << 8; + CalTemp[i][j] |= EEPROM.read(counter++); + } + } + } + else { + EEPROM.update(0, EEPROM_IDENT >> 8); EEPROM.update(1, EEPROM_IDENT & 0xFF); + updateEEPROM(); + } +} + + +// writes user settings to EEPROM using updade function to minimize write cycles +void updateEEPROM() { + EEPROM.update( 2, DefaultTemp >> 8); + EEPROM.update( 3, DefaultTemp & 0xFF); + EEPROM.update( 4, SleepTemp >> 8); + EEPROM.update( 5, SleepTemp & 0xFF); + EEPROM.update( 6, BoostTemp); + EEPROM.update( 7, time2sleep); + EEPROM.update( 8, time2off); + EEPROM.update( 9, timeOfBoost); + EEPROM.update(10, MainScrType); + EEPROM.update(11, PIDenable); + EEPROM.update(12, beepEnable); + EEPROM.update(13, CurrentTip); + EEPROM.update(14, NumberOfTips); + EEPROM.update(15, LANG); + EEPROM.update(16, FlipState); + EEPROM.update(17, UnderVoltage); + EEPROM.update(18, Password >> 8); + EEPROM.update(19, Password & 0xFF); + EEPROM.update(20, RotaryD); + uint8_t i, j; + uint16_t counter = 21; + for (i = 0; i < NumberOfTips; i++) { + for (j = 0; j < TIPNAMELENGTH; j++) EEPROM.update(counter++, TipName[i][j]); + for (j = 0; j < 4; j++) { + EEPROM.update(counter++, CalTemp[i][j] >> 8); + EEPROM.update(counter++, CalTemp[i][j] & 0xFF); + } + } +} +//此片段用于DEBUG +void HelpMeSerialer() { + //串口助手 + if (Serial.available()) { + char TmpChar = Serial.read(); + switch (TmpChar) { + case 'x': x = Serial.parseInt(); + case 'y': y = Serial.parseInt(); + case 'a': a = Serial.parseInt(); + case 'b': b = Serial.parseInt(); + } + } + /* + Serial.println(String("X ->") + x); + Serial.println(String("Y ->") + y); + Serial.println(String("A ->") + a); + Serial.println(String("B ->") + b); + */ +} +// draws the main screen +void MainScreen() { + if (!(arduboy.nextFrame())) //帧率锁 + return; + //状态 + byte SysState; + if (ShowTemp > 500) SysState = 0; + else if (inOffMode) { + SysState = 1; + DrawIntensiveComputing(); + } else if (inSleepMode) SysState = 2; + else if (inBoostMode) SysState = 3; + else if (isWorky) SysState = 4; + else if (Output < 180) SysState = 5; + else SysState = 6; + if (SysState != 1) { + if (MainScrType) { + //arduboy.invert(0); + arduboy.clear(); + //详细信息页 + arduboy.fillRect(0, 0, 128, 64, 1); //白底 + arduboy.setTextSize(1); + SetTextColor(0); + //预设名 + arduboy.drawSlowXYBitmap(0, 0, Tag, 16, 16, 0); + arduboy.setCursor(19, 4); arduboy.print(TipName[CurrentTip]); + //显示状态 + arduboy.setCursor(53, 1); + arduboy.setTextSize(2); + switch (LANG) { + case 0: arduboy.drawSlowXYBitmap(80, 1, S_table[SysState], 28, 14, 0); break; //中文 Chinese + default: //英文 English + switch (SysState) { + case 1: arduboy.print(F("OFF")); break; + case 2: arduboy.print(F("SLEEP")); break; + case 3: arduboy.print(F("BOOST")); break; + case 4: arduboy.print(F("WORKY")); break; + case 5: arduboy.print(F("HEAT")); break; + case 6: arduboy.print(F("HOLD")); break; + default: arduboy.print(F("ERROR")); break; + } break; + } + arduboy.drawSlowXYBitmap(113, 1, C_table[SysState], 14, 14, 0); + arduboy.setTextSize(1); + //芯片 + //R1 + + //自动报警-图标闪烁 + if (getChipTemp() < 80 || ((millis() * 4) / 1000) % 2) { + arduboy.setCursor(19, 16); arduboy.print(getChipTemp(), 1); arduboy.print((char)248); arduboy.print(F("C")); //芯片温度 + arduboy.drawSlowXYBitmap(2, 18, Chip, 14, 14, 0); + } + //R2 + if ((float)Vin / 100 > UnderVoltage || ((millis() * 4) / 1000) % 2) { + arduboy.setCursor(19, 32); arduboy.print((float)Vin / 1000, 1); arduboy.print(F("V")); //输入电压 + arduboy.drawSlowXYBitmap(2, 34, Lightning, 14, 14, 0); + } + + + //R3 + + arduboy.setCursor(19, 24); arduboy.print((float)getVCC() / 1000, 2); arduboy.print(F("V")); //芯片电压 + + arduboy.setCursor(19, 40); arduboy.print(F(VERSION)); //固件 + //显示探头温度 + DrawNumRect(ShowTemp); + + DrawStatusBar(0); + arduboy.display(); + //警报声 + if (getChipTemp() > 80 && ((millis() * 4) / 1000) % 2 || (float)Vin / 100 < UnderVoltage && ((millis() * 4) / 1000) % 2) beep(); + } else { + //arduboy.invert(1); + arduboy.setTextSize(6); + SetTextColor(1); + arduboy.clear(); + if (getChipTemp() > 80 && ((millis() * 4) / 1000) % 2) beep(); + if ((float)Vin / 100 < UnderVoltage && ((millis() * 4) / 1000) % 2) beep(); + arduboy.setCursor(12, 2); + + if (ShowTemp > 500) arduboy.print(999); else arduboy.print(ShowTemp); + arduboy.fillRect(0, 48, 128, 16, 1); + + DrawStatusBar(0); + arduboy.display(); + } + } +} +void DrawNumRect(int n) { + arduboy.setCursor(57, 18); + arduboy.setTextSize(4); + if (ShowTemp > 500) arduboy.print(F("000")); else arduboy.print(n); + arduboy.drawRect(55, 16, 72, 32, 0); +} +void DrawStatusBar(bool color) { + SetTextColor(color); + arduboy.setTextSize(1); + //温度条 + //框 + arduboy.drawRect(1, 49, 102, 14, color); + //条 + if (ShowTemp <= 500) arduboy.fillRect(1, 49, map(ShowTemp, 0, 500, 2, 102), 14, color); + //指示部分 + arduboy.fillRect(map(Setpoint, 0, 500, 2, 102) - 2, 50, 3, 13, color); + //先来个白底 + arduboy.fillRect(map(Setpoint, 0, 500, 2, 102) - 3, 60, 5, 4, color); + arduboy.drawLine(map(Setpoint, 0, 500, 2, 102) - 1, 60, map(Setpoint, 0, 500, 2, 102) - 1, 49, !color); + + //画指示针 + arduboy.drawSlowXYBitmap(map(Setpoint, 0, 500, 2, 102) - 3, 59, Pointer, 5, 4, !color); + + //功率条 + arduboy.drawRect(104, 49, 23, 14, color); + arduboy.fillRect(104, 49, map(Output, 255, 0, 0, 23), 14, color); + + SetTextColor(!color); + //////////////进入反色//////////////////////////////// + arduboy.setCursor(2, 55); arduboy.print(Setpoint, 0); arduboy.print((char)248); arduboy.print(F("C")); //探头预设温度 + arduboy.setCursor(105, 55); arduboy.print(map(Output, 255, 0, 0, 100)); arduboy.print(F("%")); //功率百分比 + SetTextColor(color); +} + +//设置画笔颜色 +void SetTextColor(bool color) { + arduboy.setTextBackground(!color); + arduboy.setTextColor(color); +} +// setup screen +void SetupScreen() { + //关闭加热 +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + beep(); + uint16_t SaveSetTemp = SetTemp; + uint8_t selection = 0; + bool repeat = true; + + while (repeat) { + //arduboy.invert(0); + MenuLevel = 0; //默认打开主菜单 + selection = MenuScreen(selection); + switch (selection) { + case 0: MenuLevel = 1; TipScreen(); repeat = false; break; + case 1: MenuLevel = 2; TempScreen(); break; + case 2: MenuLevel = 3; TimerScreen(); break; + case 3: MenuLevel = 4; PIDenable = MenuScreen(PIDenable); break; + case 4: ScreenSet(); break; + case 5: MenuLevel = 6; beepEnable = MenuScreen(beepEnable); break; + case 6: RotarySet(); break; + case 7: UnderVoltageSet(); break; + case 8: PasswordSet(); break; + case 9: MenuLevel = 8; LANG = MenuScreen(LANG); if (LANG == 2 && !LANG_JP_State) LANG = 1; break; + case 10: QRcodeScreen(); break; + default: repeat = false; break; + } + } + updateEEPROM(); + handleMoved = true; + SetTemp = SaveSetTemp; + setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, SetTemp); +} + +void RotarySet() { + bool Exit = false; + float rad; + byte ExitBar = 0; + SetTextColor(0); + lastbutton = (!digitalRead(BUTTON_PIN)); + setRotary(60, 420, 18, 240); + do { + arduboy.setTextSize(1); + Setpoint = getRotary(); + ShowTemp = Setpoint; + + arduboy.clear(); + //仪表盘 + arduboy.fillRect(0, 0, 128, 64, 1); + arduboy.fillTriangle(24 + 24 * cos(rad), 24 - 24 * sin(rad), 24 + 3 * sin(rad), 24 + 3 * cos(rad), 24 - 3 * sin(rad), 24 - 3 * cos(rad), 0); + arduboy.drawCircle(24, 24, 22, 0); + arduboy.drawCircle(24, 24, 19, 0); + arduboy.drawCircle(24, 24, 3, 0); + //右上角的模式提示文本 + arduboy.setCursor(55, 1); + arduboy.setTextSize(2); + arduboy.print(F("MODE ")); + if (RotaryD) { + arduboy.print(F("-")); + rad = ((Setpoint - 60) / 360.0) * (2 * PI) - PI / 2; + } else { + arduboy.print(F("+")); + rad = ((-Setpoint - 60) / 360.0) * (2 * PI) + PI * 1 / 6; + } + //右侧数字显示 + DrawNumRect(ShowTemp); + //下端的状态条 + DrawStatusBar(0); + //退出条 + arduboy.fillRect(0, 0, ExitBar, 4, 0); + arduboy.display(); + CheckLastButton(); + if (!digitalRead(BUTTON_PIN) && !lastbutton) { + ExitBar += 8; + if (ExitBar > 127) Exit = true; + } else { + if (ExitBar > 1 && ExitBar < 64) { + RotaryD = !RotaryD; + setRotary(60, 420, 18, 240); + } + ExitBar = 0; + } + + } while (!Exit); + beep(); beep(); +} +//显示设置菜单 +// tip settings screen +void ScreenSet() { + uint8_t selection = 0; + bool repeat = true; + while (repeat) { + MenuLevel = 9; + selection = MenuScreen(selection); + switch (selection) { + case 0: MenuLevel = 5; MainScrType = MenuScreen(MainScrType); break; + case 1: FlipState = !FlipState; break; + default: repeat = false; break; + } + Flip(FlipState); //设置屏幕反转状态 + } + updateEEPROM(); +} + +//预设设置菜单 +// tip settings screen +void TipScreen() { + uint8_t selection = 0; + bool repeat = true; + while (repeat) { + MenuLevel = 1; + selection = MenuScreen(selection); + switch (selection) { + case 0: ChangeTipScreen(); break; + case 1: CalibrationScreen(); break; + case 2: InputNameScreen(); break; + case 3: DeleteTipScreen(); break; + case 4: AddTipScreen(); break; + default: repeat = false; break; + } + } +} + +//温控设置菜单 +// temperature settings screen +void TempScreen() { + uint8_t selection = 0; + bool repeat = true; + while (repeat) { + selection = MenuScreen(selection); + switch (selection) { + case 0: setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, DefaultTemp); + DefaultTemp = InputScreen(18); break; + case 1: setRotary(20, 200, TEMP_STEP, SleepTemp); + SleepTemp = InputScreen(19); break; + case 2: setRotary(10, 100, TEMP_STEP, BoostTemp); + BoostTemp = InputScreen(20); break; + default: repeat = false; break; + } + } + updateEEPROM(); +} + +//定时器设置菜单 +// timer settings screen +void TimerScreen() { + uint8_t selection = 0; + bool repeat = true; + while (repeat) { + selection = MenuScreen(selection); + switch (selection) { + case 0: setRotary(0, 30, 1, time2sleep); + time2sleep = InputScreen(22); break; + case 1: setRotary(0, 60, 5, time2off); + time2off = InputScreen(23); break; + case 2: setRotary(0, 180, 10, timeOfBoost); + timeOfBoost = InputScreen(24); break; + default: repeat = false; break; + } + } + updateEEPROM(); +} +//英语支持 +void Print_EN(byte i) { + char buffer[11]; + strcpy_P(buffer, (char *)pgm_read_word(&(EN_table[i]))); + arduboy.print(buffer); +} +//菜单界面 +// menu screen +uint8_t MenuScreen(uint8_t selected) { + int SlidingAnimationX; + uint8_t lastselected = selected; + setRotary(0, Menu_table[MenuLevel] - 1, 1, selected); + lastbutton = (!digitalRead(BUTTON_PIN)); + SetTextColor(1); + do { + selected = getRotary(); + //非线性滑动动画 + SlidingAnimationX += (selected - lastselected) * 56; + if (SlidingAnimationX != 0) SlidingAnimationX += 0.6 * (-SlidingAnimationX); + lastselected = selected; + arduboy.clear(); + //绘制图标 如果有指定的话 + for (byte i = 0; i < 5; i++) if (selected - 2 + i >= 0 && selected - 2 + i < Menu_table[MenuLevel]) DrawApp(-72 + i * 56 + SlidingAnimationX, selected - 2 + i + QueryMenuObject()); + DrawAppText(selected + QueryMenuObject()); + + arduboy.display(); + CheckLastButton(); + //beep(0); + } while (digitalRead(BUTTON_PIN) || lastbutton); + beep(); + return selected; +} +//显示APP图标 +void DrawApp(int x, byte appID) { + DrawUIFrame(x, 0, 1); + drawSlowXYBitmapResize(x + 3, 3, Ico_table[appID], 14, 14, 3, 1); +} +//显示APP对应的文本 +void DrawAppText(byte appID) { + // arduboy.setCursor(0, 55); arduboy.print(appID); + if (LANG == 0) arduboy.drawSlowXYBitmap(48, 48, CN_table[appID], 36, 16, 1); else if (LANG == 2 && LANG_JP_State) { +#if LANG_JP_State + drawText(48, 52, JP_table[appID], pgm_read_byte(&(JP_Length_table[appID]))); +#endif + } else { + arduboy.setCursor(48, 52); + arduboy.setTextSize(1); + Print_EN(appID); + } +} +void DrawUIFrame(int x, int y, bool color) { + arduboy.fillRect(x, y, 48, 48, color); + arduboy.fillRect(x + 3, y + 3, 42, 42, !color); //雕空 + DrawPoint(x, y, 0); + DrawPoint(x + 47, y, 0); + DrawPoint(x, y + 47, 0); + DrawPoint(x + 47, y + 47, 0); +} +void DrawPoint(int x, int y, bool color) { + arduboy.drawPixel(x + 1, y, color); + arduboy.drawPixel(x - 1, y, color); + arduboy.drawPixel(x, y + 1, color); + arduboy.drawPixel(x, y - 1, color); + arduboy.drawPixel(x, y, color); +} +//检查按键 +void CheckLastButton() { + if (lastbutton && digitalRead(BUTTON_PIN)) { + delay(10); + lastbutton = false; + } +} +//返回对应层数的对象数 +byte QueryMenuObject() { + int SUM = 0; + for (int i = 0; i < (MenuLevel); i++) SUM += Menu_table[i]; + return SUM; +} +//信息窗 +/* + void MessageScreen(const char *Items[], uint8_t numberOfItems) { + lastbutton = (!digitalRead(BUTTON_PIN)); + + //u8g.setFont(//u8g_font_9x15); + //u8g.setFontPosTop(); + for (uint8_t i = 0; i < numberOfItems; i++) //u8g.drawStr( 0, i * 16, Items[i]); + + do { + CheckLastButton(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + beep(); + } +*/ +/* + 好看是好看,但是浪费内存 + int wav(byte wavi, int num) { + return (wavi + byte(millis() / 100)) * (float(float(num - countMin) / float(countMax - countMin)) - 0.5) * 5; + } +*/ +//FP 密集运算屏保 +void DrawIntensiveComputing() { + //关闭加热 +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + float calculate; + // while (1) { + arduboy.clear(); + + //随机线条 + DrawIntensiveComputingLine(); + + calculate = sin(millis() / 4000.0); + //模拟噪点 + for (int i = 0; i < calculate * 256 + 256; i++) arduboy.drawPixel(random(0, 128), random(0, 64), 1); + //声效 + if ((beepEnable)) analogWrite(BUZZER_PIN, 64 + calculate * 64 + random(-8, 8)); + //if ((beepEnable)) tone(BUZZER_PIN, int(calculate * 300) + 500 + random(-50, 50)); //没必要浪费内存 + + arduboy.display(); + //delay(60-calculate*30); + //} +} +//绘制屏保-密集运算线条 +void DrawIntensiveComputingLine() { + for (byte a = 0; a < 4; a++) { + Line[a] += random(-1, 1); + if (Line[a] > 128) Line[a] -= 128; + for (byte b = 0; b < random(3, 6); b++) { + arduboy.drawFastHLine(0, Line[a] + random(-10, 10), 128, 1); //水平线 + arduboy.drawFastVLine(Line[a] + random(-10, 10), 0, 64, 1); //垂直线 + } + } +} +//模拟数字滚轮 Numerical scrolling effect +void DisplayNum(int Num) { + arduboy.setTextSize(6); + SetTextColor(0); + //数字滚轮 + for (byte i = 0; i < 3; i++) LastValue[i] = int(Value / pow(10, 2 - i)) % 10; + Value = Num; + for (byte i = 0; i < 3; i++) { + SlidingAnimationY[i] += ((int(Value / pow(10, 2 - i)) % 10) - LastValue[i]) * 50; + if (SlidingAnimationY[i] != 0) SlidingAnimationY[i] += 0.8 * (-SlidingAnimationY[i]); + arduboy.fillRect(0 + i * 44, 0, 38, 50, 1); //白底 + for (int ii = -1; ii < 2; ii++) { + arduboy.setCursor(4 + i * 44, 4 - SlidingAnimationY[i] + ii * 50); + arduboy.print(LastValue[i] + ii); + } + } + //刻度标 + arduboy.fillRect(0, 0, 128, 2, 0); //上遮罩层 + arduboy.fillRect(0, 48, 128, 16, 0); //下遮罩层 +} + +//数值输入界面 +// input value screen +uint16_t InputScreen(byte appID) { + lastbutton = (!digitalRead(BUTTON_PIN)); + do { + arduboy.clear(); + DisplayNum(getRotary()); + DrawAppText(appID); + arduboy.display(); + CheckLastButton(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + beep(); + return Value; +} +int InputBigNum(int InputPW, byte appID) { + setRotary(0, 900, 100, InputPW); + InputPW = InputScreen(appID); + setRotary(InputPW, InputPW + 90, 10, InputPW); + InputPW = InputScreen(appID); + setRotary(InputPW, InputPW + 9, 1, InputPW); + InputPW = InputScreen(appID); + return InputPW; +} +void QRcodeScreen() { + arduboy.clear(); + arduboy.drawSlowXYBitmap(40, 0, QRCode, 48, 48, 1); + arduboy.display(); + delay(100); + do { + } while (digitalRead(BUTTON_PIN) || lastbutton); + beep(); +} +//欠压报警设置 +// information display screen +void UnderVoltageSet() { + setRotary(0, 250, 1, UnderVoltage); + UnderVoltage = InputScreen(7); + beep(); +} +//设置开机密码 +void PasswordSet() { + Password = InputBigNum(Password, 8); + beep(); +} + +void BootPassword() { + if (Password != 0) { + do { + arduboy.clear(); + DrawApp(40, 8); + DrawAppText(8); + arduboy.display(); + delay(1000); + beep(); beep(); beep(); + } while (InputBigNum(0, 8) != Password); + } +} +//更换预设界面 +// change tip screen +void ChangeTipScreen() { + uint8_t selected = CurrentTip; + uint8_t lastselected = selected; + int8_t arrow = 0; + if (selected) arrow = 1; + setRotary(0, NumberOfTips - 1, 1, selected); + lastbutton = (!digitalRead(BUTTON_PIN)); + do { + //beep(0); + arduboy.clear(); + selected = getRotary(); + arrow = constrain(arrow + selected - lastselected, 0, 2); + lastselected = selected; + SetTextColor(0); + arduboy.setTextSize(2); + arduboy.setCursor(0, 0); arduboy.print(F("Select Tip")); + SetTextColor(1); + arduboy.setCursor(0, 16 * (arrow + 1)); arduboy.print(F(">")); + for (uint8_t i = 0; i < 3; i++) { + uint8_t drawnumber = selected + i - arrow; + if (drawnumber < NumberOfTips) { + arduboy.setCursor(12, 16 * (i + 1)); arduboy.print(TipName[selected + i - arrow]); + } + } + CheckLastButton(); + arduboy.display(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + + beep(); + CurrentTip = selected; +} + +//温度校准界面 +// temperature calibration screen +void CalibrationScreen() { + uint16_t CalTempNew[4]; + for (uint8_t CalStep = 0; CalStep < 3; CalStep++) { + SetTemp = CalTemp[CurrentTip][CalStep]; + setRotary(100, 500, 1, SetTemp); + beepIfWorky = true; + lastbutton = (!digitalRead(BUTTON_PIN)); + do { + arduboy.clear(); + arduboy.setTextSize(2); + SENSORCheck(); // reads temperature and vibration switch of the iron + Thermostat(); // heater control + arduboy.setCursor(0, 0); arduboy.print(F("Step: ")); arduboy.print(CalStep + 1); arduboy.print("/3"); + if (isWorky) { + arduboy.setCursor(0, 16); arduboy.print(F("Set measured")); + arduboy.setCursor(0, 32); arduboy.print(F("temp: ")); arduboy.print(getRotary()); + } else { + arduboy.setCursor(0, 16); arduboy.print(F("ADC: ")); arduboy.print(uint16_t(RawTemp)); + arduboy.setCursor(0, 32); arduboy.print(F("Please wait")); + } + CheckLastButton(); + arduboy.display(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + + CalTempNew[CalStep] = getRotary(); + beep(); delay (10); + } + + //关闭加热 +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + delayMicroseconds(time2settle); // wait for voltage to settle + CalTempNew[3] = getChipTemp(); // read chip temperature + if ((CalTempNew[0] + 30 < CalTempNew[1]) && (CalTempNew[1] + 30 < CalTempNew[2])) { + MenuLevel = 7; + if (MenuScreen(0)) { + for (uint8_t i = 0; i < 4; i++) CalTemp[CurrentTip][i] = CalTempNew[i]; + } + } +} + +//命名界面 文本输入界面 +// input tip name screen +void InputNameScreen() { + uint8_t value; + for (uint8_t digit = 0; digit < (TIPNAMELENGTH - 1); digit++) { + lastbutton = (!digitalRead(BUTTON_PIN)); + setRotary(31, 96, 1, 65); + do { + value = getRotary(); + if (value == 31) { + value = 95; + setRotary(31, 96, 1, 95); + } + if (value == 96) { + value = 32; + setRotary(31, 96, 1, 32); + } + //arduboy.setCursor(0, 0);arduboy.print(); + arduboy.clear(); + arduboy.setTextSize(2); + arduboy.setCursor(16 * digit, 48); arduboy.print(char(94)); + arduboy.setCursor(0, 32); + for (uint8_t i = 0; i < digit; i++) arduboy.print(TipName[CurrentTip][i]); + arduboy.setCursor(16 * digit, 32); arduboy.print(char(value)); + CheckLastButton(); + arduboy.display(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + TipName[CurrentTip][digit] = value; + beep(); delay (10); + } + TipName[CurrentTip][TIPNAMELENGTH - 1] = 0; + return value; +} + + +// delete tip screen +void DeleteTipScreen() { + MenuLevel = 7; + if (NumberOfTips == 1) { + //MessageScreen(DeleteMessage, sizeof(DeleteMessage)); + } + else if (MenuScreen(0)) { + if (CurrentTip == (NumberOfTips - 1)) { + CurrentTip--; + } + else { + for (uint8_t i = CurrentTip; i < (NumberOfTips - 1); i++) { + for (uint8_t j = 0; j < TIPNAMELENGTH; j++) TipName[i][j] = TipName[i + 1][j]; + for (uint8_t j = 0; j < 4; j++) CalTemp[i][j] = CalTemp[i + 1][j]; + } + } + NumberOfTips--; + } +} + + +// add new tip screen +void AddTipScreen() { + if (NumberOfTips < TIPMAX) { + CurrentTip = NumberOfTips++; InputNameScreen(); + CalTemp[CurrentTip][0] = TEMP200; CalTemp[CurrentTip][1] = TEMP280; + CalTemp[CurrentTip][2] = TEMP360; CalTemp[CurrentTip][3] = TEMPCHP; + } //MessageScreen(MaxTipMessage, sizeof(MaxTipMessage)); 信息窗 +} + + +// average several ADC readings in sleep mode to denoise +uint16_t denoiseAnalog (byte port) { + uint16_t result = 0; + ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt + if (port >= A0) port -= A0; // set port and + ADMUX = (0x0F & port) | bit(REFS0); // reference to AVcc + set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction + for (uint8_t i = 0; i < 32; i++) { // get 32 readings + sleep_mode(); // go to sleep while taking ADC sample + while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed + result += ADC; // add them up + } + bitClear (ADCSRA, ADEN); // disable ADC + return (result >> 5); // devide by 32 and return value +} + +/* + //读取芯片温度 + // get internal temperature by reading ADC channel 8 against 1.1V reference + double getChipTemp() { + unsigned int wADC; + double t; + ADMUX = (_BV(REFS1) | _BV(REFS0) | _BV(MUX3)); + ADCSRA |= _BV(ADEN); + delay(5); + ADCSRA |= _BV(ADSC); + while (bit_is_set(ADCSRA, ADSC)); + wADC = ADCW; + t = (wADC - ChipTempCalVal ) / 1.22; + return (t); + } +*/ +// get internal temperature by reading ADC channel 8 against 1.1V reference +double getChipTemp() { + uint16_t result = 0; + ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt + ADMUX = bit (REFS1) | bit (REFS0) | bit (MUX3); // set reference and mux + delay(10); // wait for voltages to settle + set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction + for (uint8_t i = 0; i < 32; i++) { // get 32 readings + sleep_mode(); // go to sleep while taking ADC sample + while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed + result += ADC; // add them up + } + bitClear (ADCSRA, ADEN); // disable ADC + result >>= 2; // devide by 4 + return ((result - 2594) / 9.76); // calculate internal temperature in degrees C +} + +// get input voltage in mV by reading 1.1V reference against AVcc +uint16_t getVCC() { + uint16_t result = 0; + ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt + // set Vcc measurement against 1.1V reference + ADMUX = bit (REFS0) | bit (MUX3) | bit (MUX2) | bit (MUX1); + delay(1); // wait for voltages to settle + set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction + for (uint8_t i = 0; i < 16; i++) { // get 16 readings + sleep_mode(); // go to sleep while taking ADC sample + while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed + result += ADC; // add them up + } + bitClear (ADCSRA, ADEN); // disable ADC + result >>= 4; // devide by 16 + return (1125300L / result); // 1125300 = 1.1 * 1023 * 1000 +} + + +// get supply voltage in mV +uint16_t getVIN() { + long result; + result = denoiseAnalog (VIN_PIN); // read supply voltage via voltage divider + return (result * Vcc / 179.474); // 179.474 = 1023 * R13 / (R12 + R13) +} + +//ADC中断服务 +// ADC interrupt service routine +EMPTY_INTERRUPT (ADC_vect); // nothing to be done here + +//旋转编码器触发中断 +// Pin change interrupt service routine for rotary encoder +ISR (PCINT0_vect) { + uint8_t a = PINB & 1; + uint8_t b = PIND >> 7 & 1; + if (a != a0) { // A changed + a0 = a; + if (b != b0) { // B changed + b0 = b; + count = constrain(count + ((a == b) ? countStep : -countStep), countMin, countMax); + if (ROTARY_TYPE && ((a == b) != ab0)) { + count = constrain(count + ((a == b) ? countStep : -countStep), countMin, countMax);; + } + ab0 = (a == b); + handleMoved = true; + } + } +} + +//显示位图,并允许放大 代码片段改自arduboy2 +void drawSlowXYBitmapResize(int x, int y, const uint8_t *bitmap, uint8_t w, uint8_t h, uint8_t size, uint8_t color) { + // no need to draw at all of we're offscreen + /* + if (x + w < 0 || x > WIDTH - 1 || y + h < 0 || y > HEIGHT - 1) + return; + */ + int16_t xi, yi, byteWidth = (w + 7) / 8; + for (yi = 0; yi < h; yi ++) { + for (xi = 0; xi < w; xi ++) { + if (pgm_read_byte(bitmap + yi * byteWidth + xi / 8) & (128 >> (xi & 7))) { + //arduboy.drawPixel(x + xi, y + yi, color); + arduboy.fillRect(x + xi * size, y + yi * size, size, size, color); + } + } + } +} + +//设置看门狗模式-中断+复位 +void SetWDT() { + byte bb; + bb = 7 & 7; + bb |= (1 << WDCE); + + __asm__ __volatile__ ("wdr"); //看门狗复位 + MCUSR &= ~(1 << WDRF); //MUUSR中的WDRF清零,清除复位标志 + WDTCSR |= (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1 + //设置新的看门狗超时值bb + WDTCSR = bb; + WDTCSR |= _BV(WDIE); //设置中断模式 + WDTCSR |= _BV(WDE); //设置复位模式 +} + +/* + 8x8 dot Japanese font for Arduboy + + Copyright (c) 2016 emutyworks + + Released under the MIT license + https://github.com/emutyworks/8x8DotJPFont/blob/master/LICENSE.txt +*/ +#if LANG_JP_State +void drawText(uint8_t x, uint8_t y, const uint8_t *mes, uint8_t cnt) +{ + uint8_t pb; + uint8_t page; + uint8_t screen_start = 0; + uint8_t screen_end = 128; + + if (x < screen_start) { + x = screen_start; + } + + for (uint8_t i = 0; i < cnt; i++) { + pb = pgm_read_byte_near(mes + i); + + switch (pb) { + case MISAKI_FONT_F0_PAGE: + page = MISAKI_FONT_F0_PAGE; + continue; + case MISAKI_FONT_F1_PAGE: + page = MISAKI_FONT_F1_PAGE; + continue; + case MISAKI_FONT_F2_PAGE: + page = MISAKI_FONT_F2_PAGE; + continue; + } + + if (!page) { + continue; + } + + switch (page) { +#ifdef MISAKI_FONT_F0_H + case MISAKI_FONT_F0_PAGE: + if (pb > MISAKI_FONT_F0_SIZE) { + continue; + } + if ((x + 8) > screen_end) { + x = screen_start; + y = y + 8; + } + arduboy.drawBitmap(x, y, misaki_font_f0[ pb ], MISAKI_FONT_F0_W, 8, WHITE); + x = x + 8; + break; +#endif +#ifdef MISAKI_FONT_F1_H + case MISAKI_FONT_F1_PAGE: + if (pb > MISAKI_FONT_F1_SIZE) { + continue; + } + if ((x + 4) > screen_end) { + x = screen_start; + y = y + 8; + } + arduboy.drawBitmap(x, y, misaki_font_f1[ pb ], MISAKI_FONT_F1_W, 8, WHITE); + arduboy.drawBitmap(x + 3, y, misaki_font_0x00, 1, 8, WHITE); + x = x + 4; + break; +#endif +#ifdef MISAKI_FONT_F2_H + case MISAKI_FONT_F2_PAGE: + if (pb > MISAKI_FONT_F2_SIZE) { + continue; + } + if ((x + 8) > screen_end) { + x = screen_start; + y = y + 8; + } + arduboy.drawBitmap(x, y, misaki_font_f2[ pb ], MISAKI_FONT_F2_W, 8, WHITE); + arduboy.drawBitmap(x + 7, y, misaki_font_0x00, 1, 8, WHITE); + x = x + 8; + break; +#endif + } + } +} +#endif diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t5/1.8t5.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t5/1.8t5.ino new file mode 100644 index 0000000..a109262 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t5/1.8t5.ino @@ -0,0 +1,2309 @@ +/*License: http://creativecommons.org/licenses/by-sa/3.0/ + 采用CC3.0协议共享此程序 + 您可以自由地 + 共享 — 在任何媒介以任何形式复制、发行本作品 + 演绎 — 修改、翻译或以本作品为基础进行创作 + 在任何用途下,甚至商业目的。 + 本许可协议为“自由文化作品(Free Cultural Works)”所接受。 + 只要你遵守许可协议条款,许可人就无法收回你的这些权利。 + + Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) + This is a human-readable summary of (and not a substitute for) the license. Disclaimer. + You are free to: + Share — copy and redistribute the material in any medium or format + Adapt — remix, transform, and build upon the material + for any purpose, even commercially. + This license is acceptable for Free Cultural Works. + The licensor cannot revoke these freedoms as long as you follow the license terms. +*/ +// SolderingStation2 +// +// ATmega328-controlled Soldering Station for Hakko T12 Tips. +// 此v1.8t5版本功能简介 +// This 1.8t5 version of the code implements: +// - 烙铁头温度实时监测 +// - Temperature measurement of the tip +// - PID温度控制 +// - Direct or PID control of the heater +// - 可以通过编码器进行控制温度 +// - Temperature control via rotary encoder +// - 短按编码器进入短时升温模式 +// - Boost mode by short pressing rotary encoder switch +// - 长按编码器进入主菜单 +// - Setup menu by long pressing rotary encoder switch +// - 手柄震动检测(需要手柄含有震动传感器) +// - Handle movement detection (by checking ball switch) +// - 手柄连接检测(通过判断烙铁头温度是否能够被读取来实现) +// - Iron unconnected detection (by idenfying invalid temperature readings) +// - 定时器设定 - 随眠,关机时间 +// - Time driven sleep/power off mode if iron is unused (movement detection) +// - 可以测量主控芯片电压以及温度 +// - Measurement of input voltage, Vcc and ATmega's internal temperature +// - 在OLED上实现信息显示 +// - Information display on OLED +// - 支持无源蜂鸣器 +// - Buzzer +// - 允许设置不同烙铁头的温度校准值 +// - Calibrating and managing different soldering tips +// - 设置被保存在EEPROM,掉电不丢失 +// - Storing user settings into the EEPROM +// - 允许热插拔烙铁头,并弹出烙铁头配置选择菜单 +// - Tip change detection +// - 芯片过热以及低电压报警 +// - Chip overheating and low voltage alarm +// - 更好的实时温度条以及实时功率条 +// - Better real-time temperature bar and real-time power bar +// - 拥有过渡动画 +// - Have transition animation +// - 内置屏幕保护程序 +// - Built in screen saver +// - 屏幕翻转设置 +// - Screen flip settings +// - 内置英文、中文、日文语言包 +// - Built in English, Chinese and Japanese language pack +// - 开机密码设置 +// - System Password +// - 允许设置旋钮方向 +// - Knob direction setting menu +// - 内嵌看门狗,宕机自动重启 +// - Watchdog timer automatic reset the MCU + +// Power supply should be in the range of 16V/2A to 24V/3A and well +// stabilized. +// +// For calibration you need a soldering iron tips thermometer. For best results +// wait at least three minutes after switching on the soldering station before +// you start the calibration process. +// +// Controller: ATmega328p +// Core: Barebones ATmega (https://github.com/carlosefr/atmega) +// Clockspeed: 16 MHz external +// +// 2019/2020 by Stefan Wagner with great support from John Glavinos +// 2020-8 UI upgrade by LHW-createskyblue 、lihaoyun6 +// Project Page: https://easyeda.com/wagiminator + +//关于界面-项目页面二维码 ->为了加入欠压报警只能阉割掉关于页面的二维码 +//const unsigned char QRCode[] PROGMEM = { 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x1f, 0xfe, 0x3f, 0xc1, 0x8c, 0x0c, 0x7f, 0xf8, 0x1f, 0xfe, 0x3f, 0xc1, 0x8c, 0x0c, 0x7f, 0xf8, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x3e, 0x0f, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3e, 0x0f, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x1f, 0xfe, 0x3e, 0x30, 0x70, 0x0c, 0x7f, 0xf8, 0x1f, 0xfe, 0x3e, 0x30, 0x70, 0x0c, 0x7f, 0xf8, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x01, 0x83, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x01, 0x83, 0x8f, 0xff, 0xff, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0xf8, 0x00, 0x3e, 0x3e, 0x03, 0xf0, 0x7f, 0x00, 0xf8, 0x00, 0x3e, 0x3e, 0x03, 0xf0, 0x7f, 0x00, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0x18, 0xc0, 0x31, 0xfe, 0x0c, 0x0c, 0x1c, 0xe0, 0x18, 0xc0, 0x31, 0xfe, 0x0c, 0x0c, 0x1c, 0xe0, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0x1f, 0x00, 0x31, 0xcf, 0xf3, 0x8c, 0x03, 0x00, 0x1f, 0x00, 0x31, 0xcf, 0xf3, 0x8c, 0x03, 0x00, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x3e, 0x7c, 0x0f, 0xe0, 0x00, 0xff, 0xff, 0xf0, 0x3e, 0x7c, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x1f, 0xfe, 0x30, 0x01, 0x83, 0x8f, 0xe0, 0xff, 0x1f, 0xfe, 0x30, 0x01, 0x83, 0x8f, 0xe0, 0xff, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x3f, 0xff, 0x83, 0x83, 0xe3, 0x1f, 0x18, 0x06, 0x3f, 0xff, 0x83, 0x83, 0xe3, 0x1f, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x1f, 0xfe, 0x31, 0xfe, 0x00, 0x0c, 0x60, 0xe7, 0x1f, 0xfe, 0x31, 0xfe, 0x00, 0x0c, 0x60, 0xe7, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0 }; +const unsigned char QRCode[] PROGMEM = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0x86, 0x70, 0x80, 0x03, 0x80, 0x03, 0x86, 0x70, 0x80, 0x03, 0x9f, 0xf3, 0xe1, 0x30, 0x9f, 0xf3, 0x9f, 0xf3, 0xe1, 0x30, 0x9f, 0xf3, 0x98, 0x33, 0x01, 0xcc, 0x98, 0x33, 0x98, 0x33, 0x01, 0xcc, 0x98, 0x33, 0x98, 0x33, 0x87, 0xc0, 0x98, 0x33, 0x98, 0x33, 0xe1, 0xc0, 0x98, 0x33, 0x98, 0x33, 0xe1, 0xc0, 0x98, 0x33, 0x9f, 0xf3, 0x98, 0xc0, 0x9f, 0xf3, 0x9f, 0xf3, 0x98, 0xc0, 0x9f, 0xf3, 0x80, 0x03, 0x66, 0xcc, 0x80, 0x03, 0x80, 0x03, 0x66, 0xcc, 0x80, 0x03, 0xff, 0xff, 0x01, 0x0c, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x61, 0x30, 0x1f, 0x3f, 0x87, 0x3c, 0xe6, 0xfc, 0x87, 0x33, 0x87, 0x3c, 0xe6, 0xfc, 0x87, 0xf3, 0xf8, 0x03, 0x9e, 0x0f, 0x1f, 0x03, 0xf8, 0x03, 0x9e, 0x0f, 0x1f, 0x03, 0xe1, 0x3c, 0xfe, 0x0c, 0x07, 0xcf, 0xe1, 0x3c, 0xfe, 0x0c, 0x07, 0xcf, 0x99, 0x03, 0x3e, 0x30, 0x86, 0xc3, 0xe6, 0xcf, 0x38, 0x0f, 0x9e, 0xf3, 0xe6, 0xcf, 0x38, 0x0f, 0x9e, 0xf3, 0x9e, 0x03, 0x27, 0xcc, 0x81, 0x03, 0x9e, 0x03, 0x27, 0xcc, 0x81, 0x03, 0xe0, 0xff, 0xe1, 0x0c, 0xe6, 0xcf, 0xe0, 0xff, 0xe1, 0x0c, 0xe6, 0xcf, 0x98, 0x03, 0x06, 0x00, 0x00, 0xff, 0x98, 0x03, 0x06, 0x00, 0x00, 0xff, 0xff, 0xff, 0x1e, 0xf0, 0xf8, 0x03, 0x80, 0x03, 0x66, 0x30, 0x99, 0xc3, 0x80, 0x03, 0x66, 0x30, 0x99, 0xc3, 0x9f, 0xf3, 0x01, 0x0c, 0xf8, 0xff, 0x9f, 0xf3, 0x01, 0x0c, 0xf8, 0xff, 0x98, 0x33, 0x39, 0x3c, 0x01, 0xcf, 0x98, 0x33, 0x39, 0x3c, 0x01, 0xcf, 0x98, 0x33, 0xff, 0x0c, 0x79, 0x3f, 0x98, 0x33, 0x3e, 0xcc, 0xe0, 0xf3, 0x98, 0x33, 0x3e, 0xcc, 0xe0, 0xf3, 0x9f, 0xf3, 0x3e, 0x00, 0x98, 0xcf, 0x9f, 0xf3, 0x3e, 0x00, 0x98, 0xcf, 0x80, 0x03, 0x3e, 0x30, 0xe7, 0xc3, 0x80, 0x03, 0x3e, 0x30, 0xe7, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; +//ICO +//width:16,height:16 +const unsigned char Tag[] PROGMEM = { 0x00, 0x00, 0x3b, 0xec, 0x7b, 0xee, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0x66, 0x62, 0x26, 0x60, 0x06, 0x60, 0x06, 0x7f, 0xfe, 0x3f, 0xfc, 0x00, 0x00 }; +const unsigned char Chip[] PROGMEM = { 0x14, 0xa0, 0x3f, 0xf0, 0x7f, 0xf8, 0xe0, 0x1c, 0x6e, 0x18, 0xec, 0x1c, 0x68, 0x18, 0x60, 0x18, 0xe0, 0x1c, 0x60, 0x58, 0xe0, 0x1c, 0x7f, 0xf8, 0x3f, 0xf0, 0x14, 0xa0 }; +//const unsigned char HeatPipe[] PROGMEM = { 0x00, 0x00, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x01, 0x80, 0x00, 0x00 }; +const unsigned char Lightning[] PROGMEM = { 0x0f, 0xe0, 0x1f, 0xc0, 0x1f, 0xc0, 0x3f, 0x80, 0x3f, 0xf8, 0x7f, 0xf0, 0x7f, 0xe0, 0x07, 0xc0, 0x07, 0x80, 0x0f, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x18, 0x00, 0x10, 0x00 }; +//const unsigned char Thermometer[] PROGMEM = { 0x01, 0x80, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0 }; +const unsigned char Pointer[] PROGMEM = { 0x20, 0x20, 0x70, 0xf8 }; +//状态提示 +//width:14,height:14 图标库 + +const unsigned char c1[] PROGMEM = { 0x03, 0x00, 0x07, 0x80, 0x0f, 0xc0, 0x0c, 0xc0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xf0, 0x3c, 0xf0, 0x7f, 0xf8, 0x7f, 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0xff, 0xfc, 0x7f, 0xf8 }; +const unsigned char c2[] PROGMEM = { 0x7f, 0xf8, 0xff, 0xfc, 0xc0, 0x0c, 0xc3, 0x0c, 0xcb, 0x4c, 0xdb, 0x6c, 0xdb, 0x6c, 0xd8, 0x6c, 0xdc, 0xec, 0xcf, 0xcc, 0xc7, 0x8c, 0xc0, 0x0c, 0xff, 0xfc, 0x7f, 0xf8 }; +const unsigned char c3[] PROGMEM = { 0x00, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x18, 0xf8, 0x38, 0xf0, 0x30, 0x30, 0x70, 0x60, 0x70, 0x78, 0x78, 0xf8, 0x78, 0x00, 0x3c, 0x02, 0x3f, 0x0c, 0x1f, 0xf8, 0x0f, 0xf0, 0x03, 0xc0, 0x00, 0x00 }; +const unsigned char c5[] PROGMEM = { 0x7f, 0xf0, 0xff, 0xe0, 0xc0, 0x08, 0xc0, 0x1c, 0xc0, 0x38, 0xc8, 0x70, 0xdc, 0xe4, 0xcf, 0xcc, 0xc7, 0x8c, 0xc3, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xff, 0xfc, 0x7f, 0xf8 }; +const unsigned char c6[] PROGMEM = { 0x1e, 0x10, 0x33, 0x38, 0x2d, 0x7c, 0x25, 0x38, 0x2d, 0x38, 0x25, 0x38, 0x2d, 0x38, 0x6d, 0x80, 0xde, 0xc0, 0xbf, 0x40, 0xbf, 0x40, 0xde, 0xc0, 0x61, 0x80, 0x3f, 0x00 }; +const unsigned char c7[] PROGMEM = { 0x1f, 0xe0, 0x3f, 0xf0, 0x70, 0x38, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0xff, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xf8, 0x7c, 0xf8, 0x7c, 0xfc, 0xfc, 0x7f, 0xf8 }; +const unsigned char c_NO[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x37, 0xb0, 0x23, 0x10, 0x30, 0x30, 0x38, 0x70, 0x38, 0x70, 0x30, 0x30, 0x23, 0x10, 0x37, 0xb0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char *C_table[] = {c1, c2, c3, Lightning, c5, c6, c7}; + +//设置(语言是一种低像素的表达方式,容易造成隔阂; 交互界面设计尽可能形象化) +// width: 14, height: 14 +const unsigned char QRC[] PROGMEM = { 0x05, 0x80, 0x74, 0xb8, 0x57, 0xa8, 0x76, 0xb8, 0x05, 0x80, 0xf9, 0x7c, 0x46, 0x94, 0xaa, 0xa8, 0xf9, 0x7c, 0x06, 0x88, 0x74, 0xa8, 0x57, 0x8c, 0x75, 0x74, 0x06, 0x98 }; +const unsigned char Set0[] PROGMEM = { 0x88, 0x24, 0x08, 0x20, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x39, 0x30, 0x3b, 0xb0, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set1[] PROGMEM = { 0xf8, 0x7c, 0xf3, 0x3c, 0xf4, 0xbc, 0xf6, 0xbc, 0xf4, 0xbc, 0xf6, 0xbc, 0xf4, 0xbc, 0xe4, 0x9c, 0xc8, 0x4c, 0xd0, 0x2c, 0xd0, 0x2c, 0xc8, 0x4c, 0xe7, 0x9c, 0xf0, 0x3c }; +const unsigned char Set2[] PROGMEM = { 0x8f, 0xc4, 0x10, 0x20, 0x20, 0x10, 0x4c, 0xc8, 0x9f, 0xe4, 0x3d, 0xf0, 0x3d, 0xf0, 0x1d, 0xe0, 0x3e, 0xf0, 0x3f, 0x70, 0x9f, 0xe4, 0x8c, 0xc4, 0x00, 0x00, 0x30, 0x30 }; +const unsigned char Set3[] PROGMEM = { 0xc3, 0xfc, 0x18, 0x00, 0x18, 0x00, 0xc3, 0xfc, 0xff, 0xfc, 0xff, 0x0c, 0x00, 0x60, 0x00, 0x60, 0xff, 0x0c, 0xff, 0xfc, 0xf0, 0xfc, 0x06, 0x00, 0x06, 0x00, 0xf0, 0xfc }; +const unsigned char Set4[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set4F[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x38, 0x30, 0x33, 0x10, 0x3f, 0x90, 0x38, 0x10, 0x33, 0x90, 0x27, 0x90, 0x26, 0x10, 0x30, 0x90, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set4FF[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x24, 0x30, 0x21, 0x90, 0x27, 0x90, 0x27, 0x30, 0x20, 0x70, 0x27, 0xf0, 0x23, 0x30, 0x30, 0x70, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set5[] PROGMEM = { 0xfc, 0xfc, 0xf8, 0x7c, 0xe0, 0x1c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0x80, 0x04, 0x80, 0x04, 0xff, 0xfc, 0xf8, 0x7c, 0xfc, 0xfc }; +const unsigned char Set5_1[] PROGMEM = { 0xfc, 0xf4, 0xf8, 0x60, 0xe0, 0x44, 0xc0, 0x8c, 0xc1, 0x1c, 0xc2, 0x2c, 0xc4, 0x4c, 0xc8, 0x8c, 0xd1, 0x0c, 0xa2, 0x04, 0xc4, 0x04, 0x8f, 0xfc, 0x18, 0x7c, 0xbc, 0xfc }; +const unsigned char Set6[] PROGMEM = { 0xf8, 0x7c, 0xe0, 0x1c, 0xc0, 0x0c, 0xcf, 0xcc, 0xcf, 0xcc, 0xcf, 0xcc, 0xcf, 0xcc, 0xcf, 0xcc, 0xcf, 0xcc, 0xcf, 0xcc, 0xc8, 0x4c, 0xcf, 0xcc, 0xc0, 0x0c, 0xe0, 0x1c }; +const unsigned char Set_LANG[] PROGMEM = { 0xf0, 0x3c, 0xce, 0x4c, 0xbc, 0x34, 0xb8, 0x14, 0x18, 0x80, 0x10, 0x80, 0x42, 0x30, 0x60, 0x78, 0x60, 0xf8, 0x44, 0xc0, 0x80, 0x04, 0xb8, 0x84, 0xcf, 0xcc, 0xf0, 0x3c }; +const unsigned char Set7[] PROGMEM = { 0x80, 0x0c, 0x00, 0x1c, 0x3f, 0xf4, 0x3f, 0xe0, 0x3f, 0xc4, 0x37, 0x8c, 0x23, 0x18, 0x30, 0x30, 0x38, 0x70, 0x3c, 0xf0, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set11[] PROGMEM = { 0xf3, 0xfc, 0xe7, 0xfc, 0xce, 0x0c, 0x8e, 0x1c, 0x9f, 0x9c, 0x1f, 0x3c, 0x1f, 0x0c, 0x0e, 0x0c, 0x0f, 0xfc, 0x87, 0xf8, 0x81, 0xe4, 0xc0, 0x0c, 0xe0, 0x1c, 0xf8, 0x7c }; +const unsigned char Set8[] PROGMEM = { 0x81, 0xdc, 0x55, 0x9c, 0x29, 0x04, 0x55, 0x00, 0x29, 0x90, 0x55, 0xd0, 0x03, 0xfc, 0xff, 0x00, 0x2e, 0x00, 0x26, 0x70, 0x02, 0x50, 0x82, 0x70, 0xe6, 0x00, 0xee, 0x04 }; +const unsigned char Set9[] PROGMEM = { 0xf0, 0x3c, 0xce, 0x0c, 0xbf, 0x04, 0xb3, 0x04, 0x73, 0x00, 0x7f, 0x00, 0x7e, 0x00, 0x7c, 0x00, 0x7c, 0x00, 0x7c, 0x60, 0xbc, 0x64, 0xbe, 0x04, 0xcf, 0x0c, 0xf0, 0x3c }; +const unsigned char Set10[] PROGMEM = { 0xf8, 0x7c, 0xf7, 0xbc, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0xbf, 0xf4, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xbf, 0xf4, 0xc0, 0x0c }; +const unsigned char Set13[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x34, 0xb0, 0x24, 0x90, 0x24, 0x90, 0x27, 0x90, 0x23, 0x10, 0x30, 0x30, 0x38, 0x70, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set12[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x20, 0x10, 0x20, 0x10, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set14[] PROGMEM = { 0xff, 0x7c, 0xfe, 0x7c, 0xfc, 0xec, 0xe8, 0xdc, 0xc8, 0x4c, 0x98, 0x4c, 0x88, 0x24, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x1c }; +const unsigned char Set15[] PROGMEM = { 0x15, 0x54, 0x3f, 0xfc, 0x15, 0x54, 0x3f, 0xfc, 0x15, 0x54, 0x3c, 0x04, 0x14, 0x04, 0x3c, 0xfc, 0x14, 0x54, 0x3c, 0xfc, 0x00, 0x54, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char Set16[] PROGMEM = { 0x15, 0x54, 0x3f, 0xf8, 0x15, 0x50, 0x3f, 0xf0, 0x15, 0x50, 0x38, 0x70, 0x10, 0x20, 0x31, 0x04, 0x13, 0x8c, 0x22, 0xa8, 0x17, 0xfc, 0x2a, 0xa8, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char Set17[] PROGMEM = { 0x80, 0x00, 0xbf, 0xf8, 0x1f, 0xf8, 0xb0, 0x08, 0x18, 0x08, 0xb9, 0xe8, 0x19, 0xb8, 0xb8, 0x38, 0x18, 0x38, 0xb9, 0xb8, 0xb9, 0xf8, 0xb0, 0xf8, 0xbf, 0xf8, 0x80, 0x00 }; +const unsigned char Set18[] PROGMEM = { 0x80, 0x00, 0xbf, 0xf8, 0x1f, 0xf8, 0xb0, 0x28, 0x1f, 0xf8, 0xb4, 0x08, 0x1f, 0xf8, 0xb1, 0x08, 0x1f, 0xf8, 0xb0, 0x48, 0xbf, 0xf8, 0xb2, 0x88, 0xbf, 0xf8, 0x80, 0x00 }; +const unsigned char Lang_CN[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x20, 0x10, 0x24, 0x90, 0x24, 0x90, 0x20, 0x10, 0x3c, 0xf0, 0x3c, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Lang_EN[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x38, 0x70, 0x30, 0x30, 0x23, 0x10, 0x27, 0x90, 0x20, 0x10, 0x20, 0x10, 0x27, 0x90, 0x27, 0x90, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Lang_JP[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3d, 0xf0, 0x20, 0x10, 0x3b, 0xf0, 0x3b, 0x70, 0x30, 0x30, 0x2b, 0x50, 0x2a, 0xd0, 0x31, 0xb0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Save[] PROGMEM = { 0x00, 0x04, 0x58, 0x08, 0x58, 0x08, 0x58, 0x08, 0x40, 0x08, 0x7f, 0xf8, 0x60, 0x18, 0x5f, 0xe8, 0x5b, 0x68, 0x5f, 0xe8, 0x5b, 0x68, 0x1c, 0xe8, 0x5f, 0xe8, 0x00, 0x00 }; +const unsigned char Lock[] PROGMEM = { 0xe0, 0x1c, 0xc0, 0x0c, 0x8f, 0xc4, 0x9f, 0xe4, 0x9f, 0xe4, 0x9f, 0xe4, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0x00, 0x80, 0x04 }; +const unsigned char Set19[] PROGMEM = { 0xf8, 0x7c, 0x80, 0x04, 0xbc, 0xf4, 0x3f, 0xf0, 0x38, 0x70, 0xb7, 0xb4, 0xb6, 0xb4, 0xb5, 0xb4, 0xb7, 0xb4, 0x38, 0x70, 0x3f, 0xf0, 0xbc, 0xf4, 0x80, 0x04, 0xf8, 0x7c }; +const unsigned char *Ico_table[] = { + Set0, Set1, Set2, Set3, Set4, Set5, Set19, Set6, Lock, Set_LANG, QRC, Set7, + Set8, Set9, Set0, Set10, Set12, Save, + Set0, Set11, Set14, Save, + Set11, Set13, Set14, Save, + Set15, Set16, + Set17, Set18, //5 + Set5_1, Set5, + c_NO, Set7, + Lang_CN, Lang_EN, Lang_JP, //8 + Set4, Set4F, Save, +}; +const byte Menu_table[] = {12, 6, 4, 4, 2, 2, 2, 2, 3, 3}; //菜单 标签 温控 定时 控制方式 首页 蜂鸣器 标签删除确认界面 语言菜单 翻转 显示 +byte MenuLevel = 0; //菜单层级 + +/*//////////////////////////////////////////////////////////////////////////////////////////////////// + 多语言支持 + Multilingual support + /////////////////////////////////////////////////////////////////////////////////////////////////// +*/ +/* + 英语库 ENGLISH +*/ +const char EN_0[] PROGMEM = "Tip"; +const char EN_1[] PROGMEM = "Temp"; +const char EN_2[] PROGMEM = "Timer"; +const char EN_3[] PROGMEM = "Control"; +const char EN_4[] PROGMEM = "Screen"; +const char EN_5[] PROGMEM = "Buzzer"; +const char EN_6[] PROGMEM = "LOW Vol"; +const char EN_7[] PROGMEM = "Lang"; +const char EN_8[] PROGMEM = "Return"; +const char EN_9[] PROGMEM = "Change"; +const char EN_10[] PROGMEM = "Calibrate"; +const char EN_11[] PROGMEM = "Rename"; +const char EN_12[] PROGMEM = "Delete"; +const char EN_13[] PROGMEM = "Add"; +const char EN_14[] PROGMEM = "Save"; +const char EN_15[] PROGMEM = "Default"; +const char EN_16[] PROGMEM = "Sleep"; +const char EN_17[] PROGMEM = "Boost"; +const char EN_18[] PROGMEM = "Save"; +const char EN_19[] PROGMEM = "Sleep"; +const char EN_20[] PROGMEM = "Off"; +const char EN_21[] PROGMEM = "Boost"; +const char EN_22[] PROGMEM = "Save"; +const char EN_23[] PROGMEM = "Direct"; +const char EN_24[] PROGMEM = "PID"; +const char EN_25[] PROGMEM = "Big"; +const char EN_26[] PROGMEM = "Infos"; +const char EN_27[] PROGMEM = "OFF"; +const char EN_28[] PROGMEM = "ON"; +const char EN_29[] PROGMEM = "NO"; +const char EN_30[] PROGMEM = "YES"; +const char EN_31[] PROGMEM = "CN"; +const char EN_32[] PROGMEM = "EN"; +const char EN_33[] PROGMEM = "NO"; +const char EN_34[] PROGMEM = "OK"; +const char EN_35[] PROGMEM = "Main Screen"; +const char EN_36[] PROGMEM = "Flip"; +const char EN_37[] PROGMEM = "Save"; +const char EN_38[] PROGMEM = "About"; +const char EN_39[] PROGMEM = "JP"; +const char EN_40[] PROGMEM = "Lock"; +const char EN_41[] PROGMEM = "Rotary"; +const char *const EN_table[] PROGMEM = {EN_0, EN_1, EN_2, EN_3, EN_4, EN_5, EN_41, EN_6, EN_40, EN_7, EN_38, EN_8, EN_9, EN_10, EN_11, EN_12, EN_13, EN_14, EN_15, EN_16, EN_17, EN_18, EN_19, EN_20, EN_21, EN_22, EN_23, EN_24, EN_25, EN_26, EN_27, EN_28, EN_29, EN_30, EN_31, EN_32, EN_39, EN_35, EN_36, EN_37,}; + +/* + #!/usr/bin/python + # -*- coding: UTF-8 -*- + for num in range(0,38): + print("EN_",end="") + print(num,end='') + print(",",end="") +*/ +/* + 中文语言库 CHINESE + + //////////////////////////////////////////////////////////////////////////////////////////////////////// + 本地化提示:你可以按照位图的大小,把这里的文字位图替换成你的语言,确保位图分辨率一致即可,我们欢迎你把程序翻译为你当地的语言! + Localization tips: you can according to the size of the bitmap, + replace the text bitmap here with your language, + ensure that the bitmap resolution is consistent, + we welcome you to translate the program into your local language! + //////////////////////////////////////////////////////////////////////////////////////////////////////// +*/ +//width:28,height:14 主界面中文提示 +//Main Screen +//错误-ERROR +const unsigned char S1[] PROGMEM = { 0x20, 0x92, 0x1f, 0xc0, 0x3d, 0xf9, 0x90, 0x40, 0x20, 0x90, 0x90, 0x40, 0x40, 0x90, 0x1f, 0xc0, 0x7b, 0xff, 0x00, 0x00, 0xa0, 0x01, 0x3f, 0xe0, 0x21, 0xf9, 0x02, 0x00, 0xfd, 0x09, 0x02, 0x00, 0x21, 0x09, 0x7f, 0xf0, 0x21, 0xf9, 0x05, 0x00, 0x21, 0x09, 0x45, 0x00, 0x29, 0x09, 0x88, 0x80, 0x31, 0xf9, 0x10, 0x70, 0x21, 0x08, 0x20, 0x20 }; +//关机-OFF +const unsigned char S2[] PROGMEM = { 0x10, 0x40, 0x47, 0xc0, 0x17, 0xfc, 0x44, 0x40, 0x20, 0x03, 0xf4, 0x40, 0x23, 0xf8, 0x44, 0x40, 0x62, 0x08, 0xc4, 0x40, 0xa3, 0xf8, 0xe4, 0x40, 0x20, 0x01, 0x54, 0x40, 0x2f, 0xfd, 0x44, 0x40, 0x28, 0x06, 0x44, 0x40, 0x23, 0xf8, 0x44, 0x40, 0x20, 0x40, 0x44, 0x50, 0x20, 0x40, 0x48, 0x50, 0x21, 0x40, 0x50, 0x30, 0x20, 0x80, 0x40, 0x00 }; +//休眠-SLEEP +const unsigned char S3[] PROGMEM = { 0x10, 0x83, 0xdf, 0xc0, 0x10, 0x82, 0x50, 0x40, 0x20, 0x82, 0x50, 0x40, 0x2f, 0xff, 0xdf, 0xc0, 0x60, 0x82, 0x52, 0x00, 0x61, 0xc2, 0x52, 0x00, 0xa1, 0xc2, 0x5f, 0xe0, 0x22, 0xa3, 0xd2, 0x00, 0x22, 0xa2, 0x51, 0x00, 0x24, 0x92, 0x51, 0x00, 0x28, 0x8e, 0x50, 0x90, 0x30, 0x8b, 0xd4, 0x50, 0x20, 0x82, 0x58, 0x30, 0x20, 0x80, 0x10, 0x10 }; +//提温-BOOST +const unsigned char S4[] PROGMEM = { 0x23, 0xf2, 0x1f, 0xc0, 0x22, 0x11, 0x10, 0x40, 0xfb, 0xf0, 0x90, 0x40, 0x22, 0x12, 0x1f, 0xc0, 0x2a, 0x11, 0x10, 0x40, 0x33, 0xf1, 0x10, 0x40, 0x60, 0x00, 0x5f, 0xc0, 0xaf, 0xfc, 0x80, 0x00, 0x20, 0x41, 0x3f, 0xe0, 0x22, 0x43, 0x25, 0x20, 0x22, 0x79, 0x25, 0x20, 0x22, 0x41, 0x25, 0x20, 0xa5, 0x41, 0x25, 0x20, 0x48, 0xfd, 0x7f, 0xf0 }; +//正常工作-WORKY +const unsigned char S5[] PROGMEM = { 0x7f, 0xf8, 0x48, 0x80, 0x02, 0x00, 0x49, 0x00, 0x02, 0x01, 0xff, 0xf0, 0x02, 0x01, 0x00, 0x10, 0x02, 0x02, 0x7f, 0x20, 0x22, 0x00, 0x41, 0x00, 0x23, 0xf0, 0x7f, 0x00, 0x22, 0x00, 0x08, 0x00, 0x22, 0x00, 0xff, 0x80, 0x22, 0x00, 0x88, 0x80, 0x22, 0x00, 0x88, 0x80, 0x22, 0x00, 0x8a, 0x80, 0x22, 0x00, 0x89, 0x00, 0xff, 0xfc, 0x08, 0x00 }; +//加热-HEAT +const unsigned char S6[] PROGMEM = { 0x0f, 0x42, 0x1f, 0xc0, 0x78, 0x41, 0x10, 0x40, 0x08, 0x40, 0x90, 0x40, 0x08, 0x42, 0x1f, 0xc0, 0x08, 0x41, 0x10, 0x40, 0xff, 0xfd, 0x10, 0x40, 0x08, 0x40, 0x5f, 0xc0, 0x08, 0x40, 0x80, 0x00, 0x08, 0x41, 0x3f, 0xe0, 0x08, 0x43, 0x25, 0x20, 0x10, 0x41, 0x25, 0x20, 0x10, 0x41, 0x25, 0x20, 0x20, 0x41, 0x25, 0x20, 0x40, 0x41, 0x7f, 0xf0 }; +//维持-HOLD +const unsigned char S7[] PROGMEM = { 0x11, 0x40, 0x82, 0x00, 0x21, 0x20, 0x8f, 0xe0, 0x23, 0xfc, 0x82, 0x00, 0x4a, 0x23, 0xe2, 0x00, 0xfe, 0x20, 0x9f, 0xf0, 0x13, 0xf8, 0x80, 0x80, 0x22, 0x20, 0xc0, 0x80, 0x42, 0x21, 0xbf, 0xf0, 0xfb, 0xfa, 0x88, 0x80, 0x02, 0x20, 0x84, 0x80, 0x02, 0x20, 0x84, 0x80, 0x1a, 0x20, 0x80, 0x80, 0xe3, 0xfe, 0x82, 0x80, 0x02, 0x01, 0x01, 0x00 }; +const unsigned char *S_table[] = {S1, S2, S3, S4, S5, S6, S7}; + +// 菜单 width:36,height:16 +//MENU Oj +/* + The order here(↓) can refer to EN_table(↑↑↑) +*/ +const unsigned char t0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x7f, 0x90, 0xf8, 0x00, 0x01, 0x08, 0x08, 0x88, 0x00, 0x0a, 0x10, 0x08, 0x88, 0x00, 0x04, 0x7f, 0x01, 0x07, 0x00, 0x1f, 0xc1, 0x3a, 0x00, 0x00, 0x05, 0x49, 0x09, 0xfc, 0x00, 0x04, 0x49, 0x08, 0x84, 0x00, 0x04, 0x49, 0x08, 0x88, 0x00, 0x04, 0x49, 0x08, 0x48, 0x00, 0x04, 0x49, 0x08, 0x50, 0x00, 0x04, 0x49, 0x0a, 0x20, 0x00, 0x04, 0x16, 0x0c, 0x58, 0x00, 0x14, 0x21, 0x89, 0x87, 0x00, 0x08, 0xc0, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfe, 0x08, 0x20, 0x00, 0x08, 0x82, 0x0b, 0xff, 0x00, 0x04, 0x82, 0x0a, 0x01, 0x00, 0x10, 0xfe, 0x3c, 0x51, 0x00, 0x08, 0x82, 0x08, 0x88, 0x00, 0x08, 0x82, 0x09, 0x04, 0x00, 0x02, 0xfe, 0x0c, 0x00, 0x00, 0x04, 0x00, 0x19, 0xfc, 0x00, 0x09, 0xff, 0x28, 0x20, 0x00, 0x19, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x2b, 0xff, 0x00, 0x0b, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x20, 0x3e, 0x04, 0x00, 0x1f, 0xff, 0xa2, 0x04, 0x00, 0x10, 0x00, 0xa2, 0xff, 0x00, 0x00, 0x01, 0x22, 0x04, 0x00, 0x0f, 0xfe, 0x22, 0x04, 0x00, 0x00, 0x40, 0x3e, 0x44, 0x00, 0x00, 0x40, 0x22, 0x24, 0x00, 0x04, 0x40, 0x22, 0x24, 0x00, 0x04, 0x7c, 0x22, 0x04, 0x00, 0x04, 0x40, 0x22, 0x04, 0x00, 0x0a, 0x40, 0x3e, 0x04, 0x00, 0x09, 0x40, 0x22, 0x24, 0x00, 0x10, 0xff, 0x80, 0x14, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00 }; +const unsigned char t3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x10, 0x12, 0x02, 0x00, 0x05, 0xff, 0x9f, 0xd2, 0x00, 0x05, 0x00, 0x92, 0x12, 0x00, 0x1e, 0x28, 0xa2, 0x12, 0x00, 0x04, 0x44, 0x3f, 0xf2, 0x00, 0x04, 0x82, 0x02, 0x12, 0x00, 0x06, 0x00, 0x02, 0x12, 0x00, 0x0c, 0xfe, 0x1f, 0xd2, 0x00, 0x14, 0x10, 0x12, 0x52, 0x00, 0x04, 0x10, 0x12, 0x42, 0x00, 0x04, 0x10, 0x13, 0x42, 0x00, 0x04, 0x10, 0x12, 0x82, 0x00, 0x15, 0xff, 0x82, 0x0a, 0x00, 0x08, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x0f, 0xf8, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x04, 0x02, 0x3f, 0xfe, 0x00, 0x04, 0x02, 0x00, 0x80, 0x00, 0x07, 0xfe, 0x00, 0x80, 0x00, 0x00, 0x90, 0x04, 0x90, 0x00, 0x08, 0x91, 0x0c, 0x88, 0x00, 0x06, 0x93, 0x10, 0x86, 0x00, 0x02, 0x94, 0x20, 0x82, 0x00, 0x00, 0x90, 0x00, 0x80, 0x00, 0x00, 0x90, 0x02, 0x80, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t5[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x1f, 0xff, 0x9f, 0xfc, 0x00, 0x00, 0x40, 0x04, 0x10, 0x00, 0x0f, 0xff, 0x02, 0x20, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x08, 0x42, 0x0f, 0xf8, 0x00, 0x08, 0x42, 0x08, 0x08, 0x00, 0x0f, 0xfe, 0x08, 0x08, 0x00, 0x08, 0x02, 0x0f, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x08, 0x00, 0x08, 0x00, 0x08, 0x08, 0x00, 0x08, 0x00, 0x0f, 0xf8, 0x00, 0x10, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t6[] PROGMEM = { 0x09, 0xff, 0x00, 0x40, 0x00, 0x04, 0x20, 0x3f, 0xff, 0x00, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x1c, 0x42, 0x0f, 0xfc, 0x00, 0x04, 0x42, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x04, 0x00, 0x0f, 0xfc, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x04, 0x81, 0x00, 0x00, 0x00, 0x05, 0x81, 0x0f, 0xfc, 0x00, 0x06, 0x81, 0x08, 0x04, 0x00, 0x04, 0xff, 0x08, 0x04, 0x00, 0x00, 0x81, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t7[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xfe, 0x00, 0x01, 0x00, 0x08, 0x20, 0x00, 0x03, 0xff, 0x08, 0x20, 0x00, 0x02, 0x01, 0x08, 0x20, 0x00, 0x04, 0x22, 0x08, 0x20, 0x00, 0x08, 0x20, 0x0b, 0xfe, 0x00, 0x10, 0x20, 0x08, 0x20, 0x00, 0x00, 0x50, 0x08, 0x28, 0x00, 0x00, 0x50, 0x08, 0x24, 0x00, 0x00, 0x88, 0x08, 0x22, 0x00, 0x00, 0x88, 0x10, 0x20, 0x00, 0x01, 0x04, 0x10, 0x20, 0x00, 0x02, 0x03, 0xa7, 0xff, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char Back[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x00, 0x08, 0xf8, 0x3f, 0xfe, 0x00, 0x04, 0x80, 0x20, 0x02, 0x00, 0x00, 0x80, 0x20, 0x02, 0x00, 0x00, 0xbe, 0x23, 0xe2, 0x00, 0x1c, 0x82, 0x22, 0x22, 0x00, 0x04, 0xa4, 0x22, 0x22, 0x00, 0x04, 0x94, 0x22, 0x22, 0x00, 0x04, 0x88, 0x22, 0x22, 0x00, 0x04, 0x94, 0x23, 0xe2, 0x00, 0x05, 0x22, 0x20, 0x02, 0x00, 0x05, 0x42, 0x20, 0x02, 0x00, 0x0a, 0x00, 0x3f, 0xfe, 0x00, 0x11, 0xff, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t1_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x20, 0x90, 0x00, 0x02, 0x7f, 0x98, 0x90, 0x00, 0x1f, 0x80, 0x09, 0xff, 0x00, 0x02, 0x22, 0x01, 0x10, 0x00, 0x06, 0x21, 0x8b, 0x10, 0x00, 0x07, 0x62, 0x8d, 0xfe, 0x00, 0x0a, 0xa2, 0x09, 0x10, 0x00, 0x0a, 0x14, 0x11, 0x10, 0x00, 0x12, 0x14, 0x31, 0xfe, 0x00, 0x02, 0x08, 0x11, 0x10, 0x00, 0x02, 0x14, 0x11, 0x10, 0x00, 0x02, 0x22, 0x11, 0x10, 0x00, 0x02, 0x43, 0x91, 0xff, 0x00, 0x02, 0x81, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t1_2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x80, 0x00, 0x00, 0x50, 0x01, 0xfc, 0x00, 0x00, 0x88, 0x01, 0x04, 0x00, 0x01, 0x04, 0x03, 0x08, 0x00, 0x06, 0xfb, 0x04, 0x90, 0x00, 0x08, 0x00, 0xc0, 0x60, 0x00, 0x07, 0xdf, 0x01, 0x80, 0x00, 0x04, 0x51, 0x06, 0x00, 0x00, 0x04, 0x51, 0x1b, 0xfe, 0x00, 0x04, 0x51, 0x02, 0x02, 0x00, 0x07, 0xd9, 0x02, 0x02, 0x00, 0x04, 0x56, 0x02, 0x02, 0x00, 0x00, 0x10, 0x03, 0xfe, 0x00, 0x00, 0x10, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t1_3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x78, 0xbc, 0x20, 0x00, 0x09, 0x48, 0xa4, 0x50, 0x00, 0x09, 0x4a, 0xa8, 0x50, 0x00, 0x09, 0x4a, 0xa8, 0x88, 0x00, 0x09, 0x4a, 0xb1, 0x04, 0x00, 0x1f, 0xfe, 0xaa, 0xfb, 0x00, 0x09, 0x4a, 0xa4, 0x20, 0x00, 0x09, 0x4a, 0xa4, 0x20, 0x00, 0x09, 0x4a, 0xa7, 0xfe, 0x00, 0x09, 0x4a, 0xb4, 0x20, 0x00, 0x09, 0x48, 0xa9, 0x24, 0x00, 0x0b, 0x48, 0xa2, 0x22, 0x00, 0x08, 0x8a, 0xa4, 0xa2, 0x00, 0x11, 0x19, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t1_4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x10, 0x00, 0x1f, 0xdc, 0x3e, 0xfe, 0x00, 0x08, 0x90, 0x02, 0x12, 0x00, 0x05, 0x10, 0x04, 0xff, 0x00, 0x1f, 0xdf, 0x84, 0x12, 0x00, 0x02, 0x12, 0x0c, 0xfe, 0x00, 0x1f, 0xd2, 0x02, 0x10, 0x00, 0x02, 0x12, 0x22, 0xfe, 0x00, 0x0a, 0x92, 0x14, 0x10, 0x00, 0x0a, 0x52, 0x14, 0x10, 0x00, 0x12, 0x22, 0x0d, 0xff, 0x00, 0x02, 0x22, 0x08, 0x10, 0x00, 0x0a, 0x42, 0x14, 0x10, 0x00, 0x04, 0x02, 0x23, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//默认 +const unsigned char t2_0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc8, 0x10, 0x20, 0x00, 0x12, 0x4a, 0x0c, 0x20, 0x00, 0x1a, 0xc9, 0x04, 0x20, 0x00, 0x17, 0x48, 0x00, 0x20, 0x00, 0x1f, 0xff, 0xb8, 0x20, 0x00, 0x02, 0x08, 0x08, 0x50, 0x00, 0x1f, 0xc8, 0x08, 0x50, 0x00, 0x02, 0x08, 0x08, 0x50, 0x00, 0x03, 0xc8, 0x08, 0x48, 0x00, 0x1e, 0x14, 0x08, 0x88, 0x00, 0x01, 0x54, 0x0a, 0x88, 0x00, 0x15, 0x22, 0x0c, 0x84, 0x00, 0x14, 0x43, 0x89, 0x07, 0x00, 0x00, 0x81, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//休眠 +const unsigned char t2_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x3d, 0xfc, 0x00, 0x02, 0x10, 0x25, 0x04, 0x00, 0x04, 0x10, 0x25, 0x04, 0x00, 0x05, 0xff, 0xbd, 0xfc, 0x00, 0x0c, 0x10, 0x25, 0x20, 0x00, 0x0c, 0x38, 0x25, 0x20, 0x00, 0x14, 0x38, 0x25, 0xfe, 0x00, 0x04, 0x54, 0x3d, 0x20, 0x00, 0x04, 0x54, 0x25, 0x10, 0x00, 0x04, 0x92, 0x25, 0x10, 0x00, 0x05, 0x11, 0xa5, 0x09, 0x00, 0x06, 0x11, 0x3d, 0x45, 0x00, 0x04, 0x10, 0x25, 0x83, 0x00, 0x04, 0x10, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//提温 +const unsigned char t2_2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x21, 0xfc, 0x00, 0x04, 0x42, 0x11, 0x04, 0x00, 0x1f, 0x7e, 0x09, 0x04, 0x00, 0x04, 0x42, 0x21, 0xfc, 0x00, 0x05, 0x42, 0x11, 0x04, 0x00, 0x06, 0x7e, 0x11, 0x04, 0x00, 0x0c, 0x00, 0x05, 0xfc, 0x00, 0x15, 0xff, 0x88, 0x00, 0x00, 0x04, 0x08, 0x13, 0xfe, 0x00, 0x04, 0x48, 0x32, 0x52, 0x00, 0x04, 0x4f, 0x12, 0x52, 0x00, 0x04, 0x48, 0x12, 0x52, 0x00, 0x14, 0xa8, 0x12, 0x52, 0x00, 0x09, 0x1f, 0x97, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//关机 +const unsigned char t3_1[] PROGMEM = { 0x01, 0x04, 0x04, 0x7c, 0x00, 0x00, 0x88, 0x04, 0x44, 0x00, 0x0f, 0xff, 0x3f, 0x44, 0x00, 0x00, 0x20, 0x04, 0x44, 0x00, 0x00, 0x20, 0x0c, 0x44, 0x00, 0x00, 0x20, 0x0e, 0x44, 0x00, 0x1f, 0xff, 0x95, 0x44, 0x00, 0x00, 0x20, 0x14, 0x44, 0x00, 0x00, 0x50, 0x24, 0x44, 0x00, 0x00, 0x50, 0x04, 0x44, 0x00, 0x00, 0x88, 0x04, 0x45, 0x00, 0x01, 0x04, 0x04, 0x85, 0x00, 0x06, 0x03, 0x85, 0x03, 0x00, 0x18, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t_4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x20, 0x00, 0x0f, 0xff, 0x09, 0xfc, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x20, 0x3e, 0x88, 0x00, 0x03, 0xfe, 0x08, 0x50, 0x00, 0x02, 0x02, 0x0b, 0xfe, 0x00, 0x03, 0xfe, 0x0c, 0x40, 0x00, 0x02, 0x02, 0x18, 0x40, 0x00, 0x03, 0xfe, 0x2b, 0xfe, 0x00, 0x02, 0x02, 0x08, 0x48, 0x00, 0x03, 0xfe, 0x08, 0x88, 0x00, 0x02, 0x02, 0x08, 0x50, 0x00, 0x02, 0x02, 0x28, 0x30, 0x00, 0x1f, 0xff, 0x91, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_PID[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc3, 0xf1, 0xe0, 0x00, 0x0f, 0xe3, 0xf1, 0xf8, 0x00, 0x0c, 0x70, 0xc1, 0x9e, 0x00, 0x0c, 0x30, 0xc1, 0x86, 0x00, 0x0c, 0x30, 0xc1, 0x83, 0x00, 0x0c, 0x30, 0xc1, 0x83, 0x00, 0x0c, 0x60, 0xc1, 0x83, 0x00, 0x0c, 0x60, 0xc1, 0x83, 0x00, 0x0f, 0xc0, 0xc1, 0x83, 0x00, 0x0f, 0xc0, 0xc1, 0x86, 0x00, 0x0c, 0x00, 0xc1, 0x86, 0x00, 0x0c, 0x00, 0xc1, 0x98, 0x00, 0x0c, 0x03, 0xf1, 0xf8, 0x00, 0x0c, 0x03, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t5_0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0x88, 0x40, 0x00, 0x0a, 0x24, 0x10, 0x40, 0x00, 0x11, 0x42, 0x10, 0xfe, 0x00, 0x04, 0x00, 0x22, 0x82, 0x00, 0x02, 0xff, 0x3d, 0x02, 0x00, 0x08, 0x01, 0x0a, 0x42, 0x00, 0x09, 0xf9, 0x10, 0x32, 0x00, 0x09, 0x09, 0x20, 0x12, 0x00, 0x09, 0xf9, 0x3e, 0x02, 0x00, 0x09, 0x09, 0x00, 0x02, 0x00, 0x09, 0x09, 0x0e, 0x02, 0x00, 0x09, 0xf9, 0x30, 0x22, 0x00, 0x08, 0x05, 0x00, 0x14, 0x00, 0x08, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t5_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x44, 0x10, 0xfe, 0x00, 0x04, 0x28, 0x10, 0x92, 0x00, 0x05, 0xff, 0x22, 0x92, 0x00, 0x00, 0x10, 0x3c, 0x92, 0x00, 0x00, 0x10, 0x08, 0x92, 0x00, 0x1c, 0xfe, 0x10, 0x92, 0x00, 0x04, 0x10, 0x20, 0xfe, 0x00, 0x04, 0x10, 0x3e, 0x92, 0x00, 0x05, 0xff, 0x80, 0x92, 0x00, 0x04, 0x10, 0x00, 0x92, 0x00, 0x05, 0x10, 0x0e, 0x92, 0x00, 0x06, 0x10, 0x30, 0x92, 0x00, 0x04, 0x10, 0x00, 0xfe, 0x00, 0x00, 0x10, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t5_3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x3f, 0xfe, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x07, 0xfe, 0x0f, 0xf8, 0x00, 0x04, 0x02, 0x08, 0x08, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x07, 0xfe, 0x08, 0x88, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x07, 0xfe, 0x08, 0x88, 0x00, 0x04, 0x02, 0x09, 0x48, 0x00, 0x04, 0x02, 0x02, 0x30, 0x00, 0x07, 0xfe, 0x04, 0x0c, 0x00, 0x04, 0x02, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t_off[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x04, 0xff, 0x00, 0x00, 0x44, 0x02, 0x01, 0x00, 0x07, 0xff, 0x90, 0x21, 0x00, 0x00, 0x10, 0x10, 0x21, 0x00, 0x00, 0x10, 0x17, 0xfd, 0x00, 0x00, 0x10, 0x10, 0x21, 0x00, 0x0f, 0xff, 0xd0, 0x61, 0x00, 0x00, 0x10, 0x10, 0xa1, 0x00, 0x00, 0x28, 0x11, 0x21, 0x00, 0x00, 0x28, 0x12, 0x21, 0x00, 0x00, 0x44, 0x14, 0x21, 0x00, 0x00, 0x82, 0x10, 0xa1, 0x00, 0x03, 0x01, 0xd0, 0x45, 0x00, 0x0c, 0x00, 0x90, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_on[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x20, 0x00, 0x00, 0x84, 0x07, 0xff, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x0f, 0xff, 0xc7, 0xff, 0x00, 0x00, 0x84, 0x04, 0x00, 0x00, 0x00, 0x84, 0x04, 0x00, 0x00, 0x00, 0x84, 0x05, 0xff, 0x00, 0x00, 0x84, 0x05, 0x01, 0x00, 0x01, 0x04, 0x09, 0x01, 0x00, 0x01, 0x04, 0x09, 0x01, 0x00, 0x02, 0x04, 0x11, 0xff, 0x00, 0x04, 0x04, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t_NO[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x04, 0x91, 0x00, 0x04, 0x40, 0x02, 0x52, 0x00, 0x04, 0x7f, 0x90, 0x54, 0x00, 0x04, 0x50, 0x88, 0xff, 0x00, 0x07, 0xd0, 0x84, 0x81, 0x00, 0x04, 0x51, 0x00, 0x81, 0x00, 0x04, 0x49, 0x01, 0xff, 0x00, 0x07, 0xca, 0x02, 0x81, 0x00, 0x04, 0x44, 0x04, 0x81, 0x00, 0x04, 0x4a, 0x1c, 0xff, 0x00, 0x07, 0xea, 0x04, 0x81, 0x00, 0x0c, 0x51, 0x04, 0x81, 0x00, 0x00, 0x61, 0xc4, 0x85, 0x00, 0x00, 0x40, 0x80, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_OK[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xdf, 0x10, 0x20, 0x00, 0x02, 0x12, 0x0c, 0x20, 0x00, 0x02, 0x24, 0x04, 0x20, 0x00, 0x04, 0x7f, 0x80, 0x20, 0x00, 0x04, 0x24, 0xb8, 0x20, 0x00, 0x0f, 0xa4, 0x88, 0x50, 0x00, 0x14, 0xbf, 0x88, 0x50, 0x00, 0x04, 0xa4, 0x88, 0x50, 0x00, 0x04, 0xa4, 0x88, 0x48, 0x00, 0x04, 0xbf, 0x88, 0x88, 0x00, 0x04, 0xa4, 0x8a, 0x88, 0x00, 0x07, 0xa4, 0x8c, 0x84, 0x00, 0x04, 0x44, 0x89, 0x07, 0x00, 0x00, 0x81, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t_CN_CN[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x0f, 0xff, 0x3f, 0xff, 0x00, 0x08, 0x41, 0x04, 0x08, 0x00, 0x08, 0x41, 0x04, 0x08, 0x00, 0x08, 0x41, 0x04, 0x10, 0x00, 0x08, 0x41, 0x02, 0x10, 0x00, 0x0f, 0xff, 0x02, 0x20, 0x00, 0x08, 0x41, 0x01, 0x20, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00, 0x40, 0x01, 0x30, 0x00, 0x00, 0x40, 0x02, 0x08, 0x00, 0x00, 0x40, 0x0c, 0x07, 0x00, 0x00, 0x40, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_CN_EN[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x80, 0x00, 0x1f, 0xff, 0x80, 0x80, 0x00, 0x01, 0x10, 0x3f, 0xff, 0x00, 0x00, 0x40, 0x04, 0x08, 0x00, 0x07, 0xfc, 0x04, 0x08, 0x00, 0x04, 0x44, 0x04, 0x10, 0x00, 0x04, 0x44, 0x02, 0x10, 0x00, 0x04, 0x44, 0x02, 0x20, 0x00, 0x1f, 0xff, 0x81, 0x20, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00, 0xa0, 0x01, 0x30, 0x00, 0x01, 0x10, 0x02, 0x08, 0x00, 0x06, 0x0c, 0x0c, 0x07, 0x00, 0x18, 0x03, 0xb0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_CN_JP[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x13, 0xfe, 0x00, 0x04, 0x02, 0x08, 0x40, 0x00, 0x04, 0x02, 0x08, 0x40, 0x00, 0x04, 0x02, 0x01, 0xfc, 0x00, 0x04, 0x02, 0x38, 0x84, 0x00, 0x04, 0x02, 0x08, 0x84, 0x00, 0x07, 0xfe, 0x0f, 0xff, 0x00, 0x04, 0x02, 0x08, 0x00, 0x00, 0x04, 0x02, 0x09, 0xfe, 0x00, 0x04, 0x02, 0x09, 0x02, 0x00, 0x04, 0x02, 0x0b, 0x02, 0x00, 0x04, 0x02, 0x0d, 0x02, 0x00, 0x07, 0xfe, 0x09, 0xfe, 0x00, 0x04, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +//翻转 +const unsigned char t4f[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x1d, 0xc2, 0x08, 0x00, 0x05, 0x44, 0x42, 0x08, 0x00, 0x03, 0x84, 0x5f, 0xbf, 0x00, 0x0f, 0xe4, 0x44, 0x10, 0x00, 0x01, 0x15, 0x45, 0x10, 0x00, 0x05, 0x4c, 0xc9, 0x7f, 0x80, 0x09, 0x24, 0x4f, 0x90, 0x00, 0x07, 0xc4, 0xc1, 0x10, 0x00, 0x05, 0x4d, 0x41, 0x3f, 0x00, 0x05, 0x54, 0x43, 0x81, 0x00, 0x07, 0xc4, 0x4d, 0x02, 0x00, 0x05, 0x44, 0x41, 0x14, 0x00, 0x05, 0x55, 0x41, 0x08, 0x00, 0x07, 0xc8, 0x81, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//保存 +const unsigned char t_save[] PROGMEM = { 0x02, 0xfe, 0x01, 0x00, 0x00, 0x02, 0x82, 0x3f, 0xff, 0x00, 0x04, 0x82, 0x02, 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x0c, 0x10, 0x04, 0xfc, 0x00, 0x14, 0x10, 0x04, 0x08, 0x00, 0x05, 0xff, 0x8c, 0x10, 0x00, 0x04, 0x10, 0x14, 0x10, 0x00, 0x04, 0x38, 0x25, 0xff, 0x00, 0x04, 0x34, 0x04, 0x10, 0x00, 0x04, 0x52, 0x04, 0x10, 0x00, 0x04, 0x91, 0x84, 0x10, 0x00, 0x05, 0x10, 0x04, 0x50, 0x00, 0x04, 0x10, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char tAbout[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x0f, 0xfe, 0x00, 0x00, 0x44, 0x00, 0x40, 0x00, 0x07, 0xff, 0x80, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x10, 0x1f, 0xff, 0x80, 0x0f, 0xff, 0xc0, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x28, 0x00, 0x40, 0x00, 0x00, 0x28, 0x00, 0x40, 0x00, 0x00, 0x44, 0x00, 0x40, 0x00, 0x00, 0x82, 0x00, 0x40, 0x00, 0x03, 0x01, 0xc1, 0x40, 0x00, 0x0c, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char tPassword[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1f, 0x7e, 0x00, 0x1f, 0xff, 0x84, 0x02, 0x00, 0x10, 0x80, 0x84, 0x42, 0x00, 0x0a, 0x4a, 0x04, 0x42, 0x00, 0x0a, 0x31, 0x08, 0x42, 0x00, 0x12, 0xc5, 0x0f, 0x42, 0x00, 0x03, 0x04, 0x19, 0x7f, 0x00, 0x1d, 0xf8, 0x29, 0x01, 0x00, 0x00, 0x40, 0x09, 0x01, 0x00, 0x08, 0x42, 0x09, 0xfd, 0x00, 0x08, 0x42, 0x09, 0x01, 0x00, 0x08, 0x42, 0x0f, 0x01, 0x00, 0x0f, 0xfe, 0x09, 0x05, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t19[] PROGMEM = { 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x1f, 0x88, 0xfe, 0x00, 0x1f, 0xd0, 0x0e, 0x22, 0x00, 0x04, 0x20, 0x30, 0x22, 0x00, 0x04, 0x5f, 0x80, 0x22, 0x00, 0x07, 0x84, 0x9e, 0x22, 0x00, 0x04, 0x85, 0x08, 0x22, 0x00, 0x04, 0x94, 0x08, 0x22, 0x00, 0x04, 0x94, 0x28, 0xfe, 0x00, 0x04, 0x97, 0x1e, 0x42, 0x00, 0x04, 0x94, 0x08, 0x42, 0x00, 0x08, 0x94, 0x08, 0x42, 0x00, 0x0a, 0xac, 0x0a, 0x42, 0x00, 0x11, 0x44, 0x0c, 0x42, 0x00, 0x00, 0x83, 0x89, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char *CN_table[] = { + t0, t1, t2, t3, t4, t5, t19 , t7, tPassword, t6, tAbout, Back, //0 + t0, t1_1, t1_2, t1_3, t1_4, t_save, //1 + t2_0, t2_1, t2_2, t_save, //2 + t2_1, t3_1, t2_2, t_save,//3 + t_4, t_PID,//4 + t5_0, t5_1,//5 + t_off, t_on,//6 + t_NO, t_OK,//7 + t_CN_CN, t_CN_EN, t_CN_JP, //8 + t5_3, t4f, t_save, //9 +}; + +/* + 日语 Japanese +*/ +/* + 8x8 dot Japanese font for Arduboy + + Copyright (c) 2016 emutyworks + + Released under the MIT license + https://github.com/emutyworks/8x8DotJPFont/blob/master/LICENSE.txt +*/ +#define LANG_JP_State true +#if LANG_JP_State +#define MISAKI_FONT_H + +#define MISAKI_FONT_F0_PAGE 0xF0 +#define MISAKI_FONT_F1_PAGE 0xF1 +#define MISAKI_FONT_F2_PAGE 0xF2 + +#define MISAKI_FONT_F0_W 8 +#define MISAKI_FONT_F1_W 3 +#define MISAKI_FONT_F2_W 7 + +#define MISAKI_FONT_F0_SIZE 0xEF +#define MISAKI_FONT_F1_SIZE 0x9D +#define MISAKI_FONT_F2_SIZE 0x22 // misaki_font_f2.h の最終行の値をここに設定する、最大0xEFまで + +/* + 利用しないフォントデータはヘッダファイルを読み込まないようにするとメモリが節約できます、 + drawText() 実行時にフォントが無い場合は処理がスキップされます。 + + 例) 8x8 dot ひらがな・カタカナ・記号 のみ利用 + #include "misaki_font_f0.h" // 8x8 dot ひらがな・カタカナ・記号 + //#include "misaki_font_f1.h" // 4x8 dot 英語・カタカナ・記号 + //#include "misaki_font_f2.h" // 8x8 dot 漢字 +*/ +PROGMEM const uint8_t misaki_font_0x00[1] = { 0x00 }; +#define MISAKI_FONT_F0_H +PROGMEM const uint8_t misaki_font_f0[ MISAKI_FONT_F0_SIZE + 1 ][ MISAKI_FONT_F0_W ] = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x00   */ + { 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x01 、 */ + { 0x20, 0x50, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x02 。 */ + { 0x50, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x03 , */ + { 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x04 . */ + { 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }, /* 0x05 ・ */ + { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00 }, /* 0x06 : */ + { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00, 0x00, 0x00 }, /* 0x07 ; */ + { 0x00, 0x02, 0x01, 0x51, 0x09, 0x09, 0x06, 0x00 }, /* 0x08 ? */ + { 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00 }, /* 0x09 ! */ + { 0x00, 0x00, 0x00, 0x00, 0x7f, 0x41, 0x41, 0x00 }, /* 0x0A [ */ + { 0x41, 0x41, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x0B ] */ + { 0x00, 0x00, 0x00, 0x3f, 0x01, 0x01, 0x01, 0x00 }, /* 0x0C 「 */ + { 0x40, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00 }, /* 0x0D 」 */ + { 0x00, 0x00, 0x3f, 0x21, 0x3d, 0x05, 0x07, 0x00 }, /* 0x0E 『 */ + { 0x70, 0x50, 0x5e, 0x42, 0x7e, 0x00, 0x00, 0x00 }, /* 0x0F 』 */ + { 0x00, 0x00, 0x00, 0x00, 0x7f, 0x63, 0x41, 0x00 }, /* 0x10 【 */ + { 0x41, 0x63, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x11 】 */ + { 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00 }, /* 0x12 + */ + { 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0x13 - */ + { 0x44, 0x44, 0x44, 0x5f, 0x44, 0x44, 0x44, 0x00 }, /* 0x14 ± */ + { 0x41, 0x22, 0x14, 0x08, 0x14, 0x22, 0x41, 0x00 }, /* 0x15 × */ + { 0x08, 0x08, 0x08, 0x2a, 0x08, 0x08, 0x08, 0x00 }, /* 0x16 ÷ */ + { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00 }, /* 0x17 = */ + { 0x14, 0x34, 0x14, 0x1c, 0x14, 0x16, 0x14, 0x00 }, /* 0x18 ≠ */ + { 0x08, 0x08, 0x14, 0x14, 0x14, 0x22, 0x22, 0x00 }, /* 0x19 < */ + { 0x22, 0x22, 0x14, 0x14, 0x14, 0x08, 0x08, 0x00 }, /* 0x1A > */ + { 0x02, 0x05, 0x02, 0x3c, 0x42, 0x42, 0x24, 0x00 }, /* 0x1B ℃ */ + { 0x00, 0x2b, 0x2c, 0x78, 0x2c, 0x2b, 0x00, 0x00 }, /* 0x1C ¥ */ + { 0x00, 0x24, 0x2a, 0x7a, 0x2f, 0x2a, 0x12, 0x00 }, /* 0x1D $ */ + { 0x00, 0x1c, 0x62, 0x32, 0x2e, 0x23, 0x14, 0x00 }, /* 0x1E ¢ */ + { 0x20, 0x54, 0x5e, 0x25, 0x41, 0x42, 0x20, 0x00 }, /* 0x1F £ */ + { 0x42, 0x25, 0x12, 0x08, 0x24, 0x52, 0x21, 0x00 }, /* 0x20 % */ + { 0x20, 0x62, 0x3e, 0x63, 0x3e, 0x23, 0x02, 0x00 }, /* 0x21 # */ + { 0x20, 0x56, 0x49, 0x55, 0x22, 0x58, 0x40, 0x00 }, /* 0x22 & */ + { 0x00, 0x22, 0x14, 0x7f, 0x14, 0x22, 0x00, 0x00 }, /* 0x23 * */ + { 0x1c, 0x22, 0x59, 0x55, 0x4d, 0x12, 0x0c, 0x00 }, /* 0x24 @ */ + { 0x00, 0x00, 0x4a, 0x55, 0x55, 0x29, 0x00, 0x00 }, /* 0x25 § */ + { 0x04, 0x64, 0x3c, 0x17, 0x3c, 0x64, 0x04, 0x00 }, /* 0x26 ☆ */ + { 0x04, 0x64, 0x3c, 0x1f, 0x3c, 0x64, 0x04, 0x00 }, /* 0x27 ★ */ + { 0x1c, 0x22, 0x41, 0x41, 0x41, 0x22, 0x1c, 0x00 }, /* 0x28 ○ */ + { 0x1c, 0x3e, 0x7f, 0x7f, 0x7f, 0x3e, 0x1c, 0x00 }, /* 0x29 ● */ + { 0x1c, 0x22, 0x5d, 0x55, 0x5d, 0x22, 0x1c, 0x00 }, /* 0x2A ◎ */ + { 0x08, 0x14, 0x22, 0x41, 0x22, 0x14, 0x08, 0x00 }, /* 0x2B ◇ */ + { 0x08, 0x1c, 0x3e, 0x7f, 0x3e, 0x1c, 0x08, 0x00 }, /* 0x2C ◆ */ + { 0x7f, 0x41, 0x41, 0x41, 0x41, 0x41, 0x7f, 0x00 }, /* 0x2D □ */ + { 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00 }, /* 0x2E ■ */ + { 0x40, 0x70, 0x4c, 0x43, 0x4c, 0x70, 0x40, 0x00 }, /* 0x2F △ */ + { 0x40, 0x70, 0x7c, 0x7f, 0x7c, 0x70, 0x40, 0x00 }, /* 0x30 ▲ */ + { 0x01, 0x07, 0x19, 0x61, 0x19, 0x07, 0x01, 0x00 }, /* 0x31 ▽ */ + { 0x01, 0x07, 0x1f, 0x7f, 0x1f, 0x07, 0x01, 0x00 }, /* 0x32 ▼ */ + { 0x49, 0x22, 0x14, 0x49, 0x14, 0x22, 0x49, 0x00 }, /* 0x33 ※ */ + { 0x05, 0x05, 0x05, 0x7d, 0x05, 0x05, 0x05, 0x00 }, /* 0x34 〒 */ + { 0x08, 0x08, 0x08, 0x08, 0x2a, 0x1c, 0x08, 0x00 }, /* 0x35 → */ + { 0x08, 0x1c, 0x2a, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0x36 ← */ + { 0x00, 0x04, 0x02, 0x7f, 0x02, 0x04, 0x00, 0x00 }, /* 0x37 ↑ */ + { 0x00, 0x10, 0x20, 0x7f, 0x20, 0x10, 0x00, 0x00 }, /* 0x38 ↓ */ + { 0x00, 0x3e, 0x41, 0x41, 0x41, 0x41, 0x3e, 0x00 }, /* 0x39 0 */ + { 0x00, 0x00, 0x42, 0x7f, 0x40, 0x00, 0x00, 0x00 }, /* 0x3A 1 */ + { 0x00, 0x62, 0x51, 0x51, 0x49, 0x49, 0x46, 0x00 }, /* 0x3B 2 */ + { 0x00, 0x22, 0x41, 0x49, 0x49, 0x49, 0x36, 0x00 }, /* 0x3C 3 */ + { 0x00, 0x30, 0x28, 0x24, 0x22, 0x7f, 0x20, 0x00 }, /* 0x3D 4 */ + { 0x00, 0x2f, 0x45, 0x45, 0x45, 0x45, 0x39, 0x00 }, /* 0x3E 5 */ + { 0x00, 0x3e, 0x49, 0x49, 0x49, 0x49, 0x32, 0x00 }, /* 0x3F 6 */ + { 0x00, 0x01, 0x01, 0x61, 0x19, 0x05, 0x03, 0x00 }, /* 0x40 7 */ + { 0x00, 0x36, 0x49, 0x49, 0x49, 0x49, 0x36, 0x00 }, /* 0x41 8 */ + { 0x00, 0x26, 0x49, 0x49, 0x49, 0x49, 0x3e, 0x00 }, /* 0x42 9 */ + { 0x00, 0x20, 0x54, 0x7e, 0x34, 0x14, 0x60, 0x00 }, /* 0x43 ぁ */ + { 0x20, 0x52, 0x7f, 0x2a, 0x1a, 0x4a, 0x30, 0x00 }, /* 0x44 あ */ + { 0x00, 0x3c, 0x40, 0x20, 0x04, 0x18, 0x00, 0x00 }, /* 0x45 ぃ */ + { 0x1e, 0x20, 0x40, 0x20, 0x02, 0x04, 0x18, 0x00 }, /* 0x46 い */ + { 0x00, 0x10, 0x4a, 0x4a, 0x2a, 0x10, 0x00, 0x00 }, /* 0x47 ぅ */ + { 0x00, 0x08, 0x45, 0x45, 0x45, 0x25, 0x18, 0x00 }, /* 0x48 う */ + { 0x00, 0x48, 0x2a, 0x3a, 0x4a, 0x40, 0x00, 0x00 }, /* 0x49 ぇ */ + { 0x00, 0x44, 0x25, 0x15, 0x3d, 0x45, 0x40, 0x00 }, /* 0x4A え */ + { 0x00, 0x24, 0x7e, 0x14, 0x50, 0x24, 0x00, 0x00 }, /* 0x4B ぉ */ + { 0x22, 0x52, 0x7f, 0x0a, 0x48, 0x4a, 0x34, 0x00 }, /* 0x4C お */ + { 0x44, 0x34, 0x4f, 0x44, 0x38, 0x04, 0x18, 0x00 }, /* 0x4D か */ + { 0x44, 0x34, 0x4f, 0x44, 0x39, 0x04, 0x19, 0x00 }, /* 0x4E が */ + { 0x00, 0x2a, 0x5a, 0x4b, 0x4e, 0x5a, 0x08, 0x00 }, /* 0x4F き */ + { 0x00, 0x2a, 0x5a, 0x4b, 0x4e, 0x5b, 0x08, 0x00 }, /* 0x50 ぎ */ + { 0x00, 0x08, 0x14, 0x14, 0x22, 0x41, 0x00, 0x00 }, /* 0x51 く */ + { 0x00, 0x08, 0x14, 0x14, 0x22, 0x45, 0x04, 0x00 }, /* 0x52 ぐ */ + { 0x3f, 0x00, 0x04, 0x44, 0x3f, 0x04, 0x04, 0x00 }, /* 0x53 け */ + { 0x3f, 0x00, 0x04, 0x44, 0x3f, 0x04, 0x05, 0x00 }, /* 0x54 げ */ + { 0x00, 0x20, 0x52, 0x42, 0x42, 0x42, 0x40, 0x00 }, /* 0x55 こ */ + { 0x00, 0x20, 0x52, 0x42, 0x43, 0x42, 0x41, 0x00 }, /* 0x56 ご */ + { 0x00, 0x24, 0x54, 0x44, 0x47, 0x5c, 0x04, 0x00 }, /* 0x57 さ */ + { 0x00, 0x24, 0x54, 0x44, 0x47, 0x5c, 0x05, 0x00 }, /* 0x58 ざ */ + { 0x00, 0x00, 0x3f, 0x40, 0x40, 0x40, 0x20, 0x00 }, /* 0x59 し */ + { 0x00, 0x00, 0x3f, 0x40, 0x41, 0x40, 0x21, 0x00 }, /* 0x5A じ */ + { 0x02, 0x02, 0x0a, 0x56, 0x3f, 0x02, 0x02, 0x00 }, /* 0x5B す */ + { 0x02, 0x02, 0x0a, 0x56, 0x3f, 0x02, 0x03, 0x00 }, /* 0x5C ず */ + { 0x04, 0x04, 0x3f, 0x44, 0x54, 0x5f, 0x44, 0x00 }, /* 0x5D せ */ + { 0x04, 0x04, 0x3f, 0x44, 0x54, 0x5f, 0x45, 0x00 }, /* 0x5E ぜ */ + { 0x00, 0x08, 0x09, 0x3d, 0x4b, 0x49, 0x08, 0x00 }, /* 0x5F そ */ + { 0x00, 0x08, 0x09, 0x3d, 0x4b, 0x49, 0x0a, 0x00 }, /* 0x60 ぞ */ + { 0x42, 0x3a, 0x07, 0x22, 0x54, 0x44, 0x44, 0x00 }, /* 0x61 た */ + { 0x42, 0x3a, 0x07, 0x22, 0x55, 0x44, 0x45, 0x00 }, /* 0x62 だ */ + { 0x00, 0x02, 0x12, 0x4e, 0x4b, 0x4a, 0x32, 0x00 }, /* 0x63 ち */ + { 0x00, 0x02, 0x12, 0x4e, 0x4b, 0x4a, 0x33, 0x00 }, /* 0x64 ぢ */ + { 0x00, 0x10, 0x10, 0x48, 0x48, 0x30, 0x00, 0x00 }, /* 0x65 っ */ + { 0x04, 0x04, 0x02, 0x22, 0x22, 0x22, 0x1c, 0x00 }, /* 0x66 つ */ + { 0x04, 0x04, 0x02, 0x22, 0x23, 0x22, 0x1d, 0x00 }, /* 0x67 づ */ + { 0x00, 0x02, 0x02, 0x1a, 0x25, 0x43, 0x41, 0x00 }, /* 0x68 て */ + { 0x00, 0x02, 0x02, 0x1a, 0x25, 0x43, 0x45, 0x00 }, /* 0x69 で */ + { 0x00, 0x20, 0x57, 0x48, 0x48, 0x44, 0x44, 0x00 }, /* 0x6A と */ + { 0x00, 0x20, 0x57, 0x48, 0x49, 0x44, 0x45, 0x00 }, /* 0x6B ど */ + { 0x12, 0x0a, 0x27, 0x52, 0x50, 0x3a, 0x24, 0x00 }, /* 0x6C な */ + { 0x7f, 0x00, 0x20, 0x52, 0x42, 0x42, 0x40, 0x00 }, /* 0x6D に */ + { 0x30, 0x4e, 0x38, 0x54, 0x0f, 0x64, 0x78, 0x00 }, /* 0x6E ぬ */ + { 0x24, 0x14, 0x7f, 0x04, 0x22, 0x52, 0x3c, 0x00 }, /* 0x6F ね */ + { 0x18, 0x24, 0x12, 0x4e, 0x42, 0x24, 0x18, 0x00 }, /* 0x70 の */ + { 0x7f, 0x00, 0x24, 0x54, 0x54, 0x3f, 0x44, 0x00 }, /* 0x71 は */ + { 0x7f, 0x00, 0x24, 0x54, 0x54, 0x3f, 0x45, 0x00 }, /* 0x72 ば */ + { 0x7f, 0x00, 0x24, 0x54, 0x56, 0x3d, 0x46, 0x00 }, /* 0x73 ぱ */ + { 0x02, 0x3a, 0x47, 0x40, 0x41, 0x3e, 0x04, 0x00 }, /* 0x74 ひ */ + { 0x02, 0x3a, 0x47, 0x40, 0x41, 0x3e, 0x05, 0x00 }, /* 0x75 び */ + { 0x02, 0x3a, 0x47, 0x40, 0x43, 0x3d, 0x06, 0x00 }, /* 0x76 ぴ */ + { 0x40, 0x30, 0x40, 0x4d, 0x32, 0x10, 0x60, 0x00 }, /* 0x77 ふ */ + { 0x40, 0x30, 0x40, 0x4d, 0x32, 0x11, 0x61, 0x00 }, /* 0x78 ぶ */ + { 0x40, 0x30, 0x40, 0x4d, 0x32, 0x15, 0x62, 0x00 }, /* 0x79 ぷ */ + { 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x00 }, /* 0x7A へ */ + { 0x08, 0x04, 0x02, 0x04, 0x09, 0x10, 0x11, 0x00 }, /* 0x7B べ */ + { 0x08, 0x04, 0x02, 0x04, 0x0a, 0x15, 0x12, 0x00 }, /* 0x7C ぺ */ + { 0x7f, 0x00, 0x6a, 0x6a, 0x7e, 0x2a, 0x4a, 0x00 }, /* 0x7D ほ */ + { 0x7f, 0x00, 0x6a, 0x6a, 0x7f, 0x2a, 0x4b, 0x00 }, /* 0x7E ぼ */ + { 0x7f, 0x00, 0x6a, 0x6a, 0x7e, 0x2d, 0x4a, 0x00 }, /* 0x7F ぽ */ + { 0x00, 0x6a, 0x6a, 0x6a, 0x7f, 0x2a, 0x4a, 0x00 }, /* 0x80 ま */ + { 0x30, 0x29, 0x1d, 0x4b, 0x48, 0x3c, 0x10, 0x00 }, /* 0x81 み */ + { 0x12, 0x2a, 0x7f, 0x42, 0x40, 0x42, 0x24, 0x00 }, /* 0x82 む */ + { 0x30, 0x4e, 0x38, 0x54, 0x0f, 0x44, 0x38, 0x00 }, /* 0x83 め */ + { 0x00, 0x0a, 0x3e, 0x4b, 0x4a, 0x4a, 0x30, 0x00 }, /* 0x84 も */ + { 0x00, 0x08, 0x0e, 0x38, 0x46, 0x14, 0x08, 0x00 }, /* 0x85 ゃ */ + { 0x04, 0x07, 0x1c, 0x62, 0x03, 0x0a, 0x04, 0x00 }, /* 0x86 や */ + { 0x00, 0x1c, 0x48, 0x3e, 0x24, 0x18, 0x00, 0x00 }, /* 0x87 ゅ */ + { 0x1e, 0x04, 0x52, 0x3f, 0x12, 0x12, 0x0c, 0x00 }, /* 0x88 ゆ */ + { 0x00, 0x20, 0x50, 0x50, 0x3e, 0x48, 0x00, 0x00 }, /* 0x89 ょ */ + { 0x00, 0x20, 0x50, 0x50, 0x3f, 0x24, 0x44, 0x00 }, /* 0x8A よ */ + { 0x00, 0x1c, 0x51, 0x49, 0x4a, 0x48, 0x30, 0x00 }, /* 0x8B ら */ + { 0x00, 0x0f, 0x42, 0x41, 0x21, 0x1e, 0x00, 0x00 }, /* 0x8C り */ + { 0x00, 0x10, 0x69, 0x6d, 0x4b, 0x49, 0x30, 0x00 }, /* 0x8D る */ + { 0x24, 0x14, 0x7f, 0x04, 0x02, 0x3e, 0x40, 0x00 }, /* 0x8E れ */ + { 0x00, 0x10, 0x49, 0x4d, 0x4b, 0x49, 0x30, 0x00 }, /* 0x8F ろ */ + { 0x00, 0x28, 0x18, 0x7e, 0x08, 0x44, 0x38, 0x00 }, /* 0x90 ゎ */ + { 0x24, 0x14, 0x7f, 0x04, 0x42, 0x42, 0x3c, 0x00 }, /* 0x91 わ */ + { 0x30, 0x49, 0x25, 0x1f, 0x24, 0x54, 0x38, 0x00 }, /* 0x92 ゐ */ + { 0x40, 0x28, 0x25, 0x57, 0x35, 0x28, 0x40, 0x00 }, /* 0x93 ゑ */ + { 0x10, 0x0a, 0x2e, 0x5b, 0x72, 0x4a, 0x48, 0x00 }, /* 0x94 を */ + { 0x40, 0x30, 0x0c, 0x33, 0x40, 0x40, 0x20, 0x00 }, /* 0x95 ん */ + { 0x00, 0x04, 0x44, 0x3c, 0x14, 0x0c, 0x00, 0x00 }, /* 0x96 ァ */ + { 0x00, 0x01, 0x41, 0x3d, 0x09, 0x05, 0x03, 0x00 }, /* 0x97 ア */ + { 0x00, 0x20, 0x20, 0x10, 0x78, 0x04, 0x00, 0x00 }, /* 0x98 ィ */ + { 0x00, 0x10, 0x10, 0x08, 0x7c, 0x02, 0x01, 0x00 }, /* 0x99 イ */ + { 0x00, 0x18, 0x48, 0x4c, 0x28, 0x18, 0x00, 0x00 }, /* 0x9A ゥ */ + { 0x00, 0x06, 0x42, 0x43, 0x22, 0x12, 0x0e, 0x00 }, /* 0x9B ウ */ + { 0x00, 0x40, 0x48, 0x78, 0x48, 0x40, 0x00, 0x00 }, /* 0x9C ェ */ + { 0x20, 0x22, 0x22, 0x3e, 0x22, 0x22, 0x20, 0x00 }, /* 0x9D エ */ + { 0x00, 0x28, 0x28, 0x58, 0x7c, 0x08, 0x00, 0x00 }, /* 0x9E ォ */ + { 0x22, 0x22, 0x12, 0x4a, 0x7f, 0x02, 0x02, 0x00 }, /* 0x9F オ */ + { 0x00, 0x42, 0x22, 0x1f, 0x02, 0x42, 0x7e, 0x00 }, /* 0xA0 カ */ + { 0x00, 0x42, 0x22, 0x1f, 0x02, 0x42, 0x7f, 0x00 }, /* 0xA1 ガ */ + { 0x00, 0x12, 0x12, 0x1f, 0x72, 0x12, 0x10, 0x00 }, /* 0xA2 キ */ + { 0x00, 0x12, 0x12, 0x1f, 0x72, 0x13, 0x10, 0x00 }, /* 0xA3 ギ */ + { 0x00, 0x08, 0x44, 0x43, 0x22, 0x12, 0x0e, 0x00 }, /* 0xA4 ク */ + { 0x00, 0x08, 0x44, 0x43, 0x22, 0x12, 0x0f, 0x00 }, /* 0xA5 グ */ + { 0x08, 0x07, 0x42, 0x22, 0x1e, 0x02, 0x02, 0x00 }, /* 0xA6 ケ */ + { 0x08, 0x07, 0x42, 0x22, 0x1f, 0x02, 0x03, 0x00 }, /* 0xA7 ゲ */ + { 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x00 }, /* 0xA8 コ */ + { 0x00, 0x42, 0x42, 0x42, 0x43, 0x42, 0x7f, 0x00 }, /* 0xA9 ゴ */ + { 0x02, 0x02, 0x4f, 0x42, 0x22, 0x1f, 0x02, 0x00 }, /* 0xAA サ */ + { 0x02, 0x02, 0x4f, 0x42, 0x23, 0x1e, 0x03, 0x00 }, /* 0xAB ザ */ + { 0x00, 0x45, 0x4a, 0x40, 0x20, 0x10, 0x0c, 0x00 }, /* 0xAC シ */ + { 0x00, 0x45, 0x4a, 0x40, 0x21, 0x10, 0x0d, 0x00 }, /* 0xAD ジ */ + { 0x40, 0x42, 0x22, 0x22, 0x1a, 0x26, 0x40, 0x00 }, /* 0xAE ス */ + { 0x40, 0x42, 0x22, 0x22, 0x1b, 0x26, 0x41, 0x00 }, /* 0xAF ズ */ + { 0x04, 0x04, 0x3f, 0x44, 0x44, 0x54, 0x4c, 0x00 }, /* 0xB0 セ */ + { 0x04, 0x04, 0x3f, 0x44, 0x45, 0x54, 0x4d, 0x00 }, /* 0xB1 ゼ */ + { 0x00, 0x01, 0x46, 0x40, 0x20, 0x10, 0x0f, 0x00 }, /* 0xB2 ソ */ + { 0x00, 0x01, 0x46, 0x40, 0x20, 0x11, 0x0f, 0x00 }, /* 0xB3 ゾ */ + { 0x00, 0x08, 0x44, 0x4b, 0x2a, 0x12, 0x0e, 0x00 }, /* 0xB4 タ */ + { 0x00, 0x08, 0x44, 0x4b, 0x2a, 0x12, 0x0f, 0x00 }, /* 0xB5 ダ */ + { 0x08, 0x0a, 0x4a, 0x3e, 0x09, 0x09, 0x08, 0x00 }, /* 0xB6 チ */ + { 0x08, 0x0a, 0x4a, 0x3e, 0x09, 0x08, 0x09, 0x00 }, /* 0xB7 ヂ */ + { 0x00, 0x18, 0x40, 0x58, 0x20, 0x18, 0x00, 0x00 }, /* 0xB8 ッ */ + { 0x02, 0x0c, 0x42, 0x4c, 0x20, 0x10, 0x0e, 0x00 }, /* 0xB9 ツ */ + { 0x02, 0x0c, 0x42, 0x4c, 0x21, 0x10, 0x0d, 0x00 }, /* 0xBA ヅ */ + { 0x04, 0x05, 0x45, 0x3d, 0x05, 0x05, 0x04, 0x00 }, /* 0xBB テ */ + { 0x04, 0x05, 0x45, 0x3d, 0x05, 0x04, 0x05, 0x00 }, /* 0xBC デ */ + { 0x00, 0x00, 0x7f, 0x08, 0x08, 0x10, 0x00, 0x00 }, /* 0xBD ト */ + { 0x00, 0x00, 0x7f, 0x08, 0x09, 0x10, 0x01, 0x00 }, /* 0xBE ド */ + { 0x04, 0x44, 0x24, 0x1f, 0x04, 0x04, 0x04, 0x00 }, /* 0xBF ナ */ + { 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00 }, /* 0xC0 ニ */ + { 0x40, 0x41, 0x25, 0x15, 0x19, 0x27, 0x00, 0x00 }, /* 0xC1 ヌ */ + { 0x20, 0x22, 0x12, 0x7b, 0x06, 0x12, 0x20, 0x00 }, /* 0xC2 ネ */ + { 0x40, 0x40, 0x20, 0x10, 0x08, 0x07, 0x00, 0x00 }, /* 0xC3 ノ */ + { 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0c, 0x70, 0x00 }, /* 0xC4 ハ */ + { 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0d, 0x71, 0x00 }, /* 0xC5 バ */ + { 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0d, 0x72, 0x00 }, /* 0xC6 パ */ + { 0x00, 0x3f, 0x48, 0x48, 0x48, 0x44, 0x44, 0x00 }, /* 0xC7 ヒ */ + { 0x00, 0x3f, 0x48, 0x48, 0x49, 0x44, 0x45, 0x00 }, /* 0xC8 ビ */ + { 0x00, 0x3f, 0x48, 0x48, 0x4a, 0x45, 0x46, 0x00 }, /* 0xC9 ピ */ + { 0x00, 0x02, 0x42, 0x42, 0x22, 0x12, 0x0e, 0x00 }, /* 0xCA フ */ + { 0x00, 0x02, 0x42, 0x42, 0x23, 0x12, 0x0f, 0x00 }, /* 0xCB ブ */ + { 0x00, 0x02, 0x42, 0x42, 0x22, 0x15, 0x0e, 0x00 }, /* 0xCC プ */ + { 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00 }, /* 0xCD ヘ */ + { 0x08, 0x04, 0x02, 0x04, 0x09, 0x10, 0x21, 0x00 }, /* 0xCE ベ */ + { 0x08, 0x04, 0x02, 0x04, 0x0a, 0x15, 0x22, 0x00 }, /* 0xCF ペ */ + { 0x24, 0x14, 0x44, 0x7f, 0x04, 0x14, 0x24, 0x00 }, /* 0xD0 ホ */ + { 0x24, 0x14, 0x44, 0x7f, 0x05, 0x14, 0x25, 0x00 }, /* 0xD1 ボ */ + { 0x24, 0x14, 0x44, 0x7f, 0x06, 0x15, 0x22, 0x00 }, /* 0xD2 ポ */ + { 0x02, 0x02, 0x12, 0x22, 0x52, 0x0a, 0x06, 0x00 }, /* 0xD3 マ */ + { 0x00, 0x21, 0x25, 0x29, 0x4a, 0x42, 0x00, 0x00 }, /* 0xD4 ミ */ + { 0x40, 0x70, 0x4c, 0x43, 0x50, 0x20, 0x40, 0x00 }, /* 0xD5 ム */ + { 0x40, 0x44, 0x24, 0x14, 0x08, 0x37, 0x00, 0x00 }, /* 0xD6 メ */ + { 0x00, 0x08, 0x09, 0x3f, 0x49, 0x49, 0x48, 0x00 }, /* 0xD7 モ */ + { 0x00, 0x10, 0x1c, 0x68, 0x08, 0x18, 0x00, 0x00 }, /* 0xD8 ャ */ + { 0x04, 0x04, 0x0f, 0x74, 0x02, 0x0a, 0x06, 0x00 }, /* 0xD9 ヤ */ + { 0x00, 0x40, 0x48, 0x48, 0x78, 0x40, 0x00, 0x00 }, /* 0xDA ュ */ + { 0x20, 0x22, 0x22, 0x22, 0x3e, 0x20, 0x20, 0x00 }, /* 0xDB ユ */ + { 0x00, 0x00, 0x44, 0x54, 0x54, 0x7c, 0x00, 0x00 }, /* 0xDC ョ */ + { 0x00, 0x42, 0x4a, 0x4a, 0x4a, 0x4a, 0x7e, 0x00 }, /* 0xDD ヨ */ + { 0x00, 0x04, 0x45, 0x45, 0x25, 0x15, 0x0c, 0x00 }, /* 0xDE ラ */ + { 0x00, 0x0f, 0x40, 0x40, 0x20, 0x1f, 0x00, 0x00 }, /* 0xDF リ */ + { 0x40, 0x20, 0x1e, 0x00, 0x7f, 0x20, 0x10, 0x00 }, /* 0xE0 ル */ + { 0x00, 0x00, 0x7f, 0x40, 0x20, 0x10, 0x08, 0x00 }, /* 0xE1 レ */ + { 0x00, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x00 }, /* 0xE2 ロ */ + { 0x00, 0x0c, 0x44, 0x44, 0x24, 0x1c, 0x00, 0x00 }, /* 0xE3 ヮ */ + { 0x00, 0x06, 0x42, 0x42, 0x22, 0x12, 0x0e, 0x00 }, /* 0xE4 ワ */ + { 0x10, 0x12, 0x1e, 0x12, 0x12, 0x7f, 0x12, 0x00 }, /* 0xE5 ヰ */ + { 0x20, 0x22, 0x22, 0x3a, 0x26, 0x22, 0x20, 0x00 }, /* 0xE6 ヱ */ + { 0x00, 0x01, 0x45, 0x45, 0x25, 0x15, 0x0f, 0x00 }, /* 0xE7 ヲ */ + { 0x00, 0x41, 0x42, 0x40, 0x20, 0x10, 0x0c, 0x00 }, /* 0xE8 ン */ + { 0x00, 0x06, 0x42, 0x43, 0x22, 0x12, 0x0f, 0x00 }, /* 0xE9 ヴ */ + { 0x00, 0x48, 0x28, 0x1c, 0x48, 0x78, 0x00, 0x00 }, /* 0xEA ヵ */ + { 0x00, 0x10, 0x0c, 0x48, 0x38, 0x08, 0x00, 0x00 }, /* 0xEB ヶ */ + { 0x08, 0x04, 0x04, 0x08, 0x10, 0x10, 0x08, 0x00 }, /* 0xEC 〜 */ + { 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00 }, /* 0xED … */ + { 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0xEE ー */ + { 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08 }, /* 0xEF ― */ +}; + +#define MISAKI_FONT_F1_H +PROGMEM const uint8_t misaki_font_f1[ MISAKI_FONT_F1_SIZE + 1 ][ MISAKI_FONT_F1_W ] = +{ + { 0x00, 0x00, 0x00 }, /* 0x00 */ + { 0x00, 0x2f, 0x00 }, /* 0x01 ! */ + { 0x03, 0x00, 0x03 }, /* 0x02 " */ + { 0x3f, 0x12, 0x3f }, /* 0x03 # */ + { 0x16, 0x3f, 0x1a }, /* 0x04 $ */ + { 0x12, 0x08, 0x24 }, /* 0x05 % */ + { 0x32, 0x3d, 0x2a }, /* 0x06 & */ + { 0x02, 0x01, 0x00 }, /* 0x07 ' */ + { 0x00, 0x3e, 0x41 }, /* 0x08 ( */ + { 0x41, 0x3e, 0x00 }, /* 0x09 ) */ + { 0x0a, 0x07, 0x0a }, /* 0x0A * */ + { 0x08, 0x3e, 0x08 }, /* 0x0B + */ + { 0x40, 0x20, 0x00 }, /* 0x0C , */ + { 0x08, 0x08, 0x08 }, /* 0x0D - */ + { 0x00, 0x20, 0x00 }, /* 0x0E . */ + { 0x10, 0x08, 0x04 }, /* 0x0F / */ + { 0x1c, 0x2a, 0x1c }, /* 0x10 0 */ + { 0x24, 0x3e, 0x20 }, /* 0x11 1 */ + { 0x32, 0x2a, 0x24 }, /* 0x12 2 */ + { 0x22, 0x2a, 0x14 }, /* 0x13 3 */ + { 0x18, 0x14, 0x3e }, /* 0x14 4 */ + { 0x2e, 0x2a, 0x12 }, /* 0x15 5 */ + { 0x1c, 0x2a, 0x12 }, /* 0x16 6 */ + { 0x02, 0x3a, 0x06 }, /* 0x17 7 */ + { 0x14, 0x2a, 0x14 }, /* 0x18 8 */ + { 0x24, 0x2a, 0x1c }, /* 0x19 9 */ + { 0x00, 0x24, 0x00 }, /* 0x1A : */ + { 0x40, 0x24, 0x00 }, /* 0x1B ; */ + { 0x08, 0x14, 0x22 }, /* 0x1C < */ + { 0x14, 0x14, 0x14 }, /* 0x1D = */ + { 0x22, 0x14, 0x08 }, /* 0x1E > */ + { 0x02, 0x29, 0x06 }, /* 0x1F ? */ + { 0x12, 0x29, 0x1e }, /* 0x20 @ */ + { 0x3e, 0x09, 0x3e }, /* 0x21 A */ + { 0x3f, 0x25, 0x1a }, /* 0x22 B */ + { 0x1e, 0x21, 0x21 }, /* 0x23 C */ + { 0x3f, 0x21, 0x1e }, /* 0x24 D */ + { 0x3f, 0x25, 0x21 }, /* 0x25 E */ + { 0x3f, 0x05, 0x01 }, /* 0x26 F */ + { 0x1e, 0x21, 0x39 }, /* 0x27 G */ + { 0x3f, 0x08, 0x3f }, /* 0x28 H */ + { 0x21, 0x3f, 0x21 }, /* 0x29 I */ + { 0x10, 0x20, 0x1f }, /* 0x2A J */ + { 0x3f, 0x04, 0x3b }, /* 0x2B K */ + { 0x3f, 0x20, 0x20 }, /* 0x2C L */ + { 0x3f, 0x06, 0x3f }, /* 0x2D M */ + { 0x3f, 0x01, 0x3e }, /* 0x2E N */ + { 0x1e, 0x21, 0x1e }, /* 0x2F O */ + { 0x3f, 0x09, 0x06 }, /* 0x30 P */ + { 0x1e, 0x21, 0x5e }, /* 0x31 Q */ + { 0x3f, 0x09, 0x36 }, /* 0x32 R */ + { 0x22, 0x25, 0x19 }, /* 0x33 S */ + { 0x01, 0x3f, 0x01 }, /* 0x34 T */ + { 0x3f, 0x20, 0x3f }, /* 0x35 U */ + { 0x3f, 0x10, 0x0f }, /* 0x36 V */ + { 0x3f, 0x18, 0x3f }, /* 0x37 W */ + { 0x33, 0x0c, 0x33 }, /* 0x38 X */ + { 0x03, 0x3c, 0x03 }, /* 0x39 Y */ + { 0x31, 0x2d, 0x23 }, /* 0x3A Z */ + { 0x00, 0x7f, 0x41 }, /* 0x3B [ */ + { 0x15, 0x3e, 0x15 }, /* 0x3C \ */ + { 0x41, 0x7f, 0x00 }, /* 0x3D ] */ + { 0x02, 0x01, 0x02 }, /* 0x3E ^ */ + { 0x40, 0x40, 0x40 }, /* 0x3F _ */ + { 0x00, 0x01, 0x02 }, /* 0x40 ` */ + { 0x18, 0x24, 0x3c }, /* 0x41 a */ + { 0x3f, 0x24, 0x18 }, /* 0x42 b */ + { 0x18, 0x24, 0x24 }, /* 0x43 c */ + { 0x18, 0x24, 0x3f }, /* 0x44 d */ + { 0x18, 0x2c, 0x2c }, /* 0x45 e */ + { 0x04, 0x3f, 0x05 }, /* 0x46 f */ + { 0x48, 0x54, 0x3c }, /* 0x47 g */ + { 0x3f, 0x04, 0x38 }, /* 0x48 h */ + { 0x00, 0x3d, 0x00 }, /* 0x49 i */ + { 0x40, 0x3d, 0x00 }, /* 0x4A j */ + { 0x3f, 0x08, 0x34 }, /* 0x4B k */ + { 0x01, 0x3f, 0x00 }, /* 0x4C l */ + { 0x3c, 0x1c, 0x38 }, /* 0x4D m */ + { 0x3c, 0x04, 0x38 }, /* 0x4E n */ + { 0x18, 0x24, 0x18 }, /* 0x4F o */ + { 0x7c, 0x24, 0x18 }, /* 0x50 p */ + { 0x18, 0x24, 0x7c }, /* 0x51 q */ + { 0x3c, 0x08, 0x04 }, /* 0x52 r */ + { 0x28, 0x3c, 0x14 }, /* 0x53 s */ + { 0x04, 0x3e, 0x24 }, /* 0x54 t */ + { 0x3c, 0x20, 0x3c }, /* 0x55 u */ + { 0x3c, 0x10, 0x0c }, /* 0x56 v */ + { 0x3c, 0x30, 0x3c }, /* 0x57 w */ + { 0x24, 0x18, 0x24 }, /* 0x58 x */ + { 0x4c, 0x50, 0x3c }, /* 0x59 y */ + { 0x24, 0x34, 0x2c }, /* 0x5A z */ + { 0x08, 0x36, 0x41 }, /* 0x5B { */ + { 0x00, 0x7f, 0x00 }, /* 0x5C | */ + { 0x41, 0x36, 0x08 }, /* 0x5D } */ + { 0x01, 0x01, 0x01 }, /* 0x5E ~ */ + { 0x10, 0x28, 0x10 }, /* 0x5F 。 */ + { 0x1f, 0x01, 0x01 }, /* 0x60 「 */ + { 0x20, 0x20, 0x3e }, /* 0x61 」 */ + { 0x10, 0x20, 0x00 }, /* 0x62 、 */ + { 0x00, 0x08, 0x00 }, /* 0x63 ・ */ + { 0x25, 0x15, 0x0f }, /* 0x64 ヲ */ + { 0x24, 0x1c, 0x0c }, /* 0x65 ァ */ + { 0x10, 0x38, 0x04 }, /* 0x66 ィ */ + { 0x18, 0x0c, 0x38 }, /* 0x67 ゥ */ + { 0x28, 0x38, 0x28 }, /* 0x68 ェ */ + { 0x28, 0x18, 0x3c }, /* 0x69 ォ */ + { 0x08, 0x3c, 0x18 }, /* 0x6A ャ */ + { 0x28, 0x38, 0x20 }, /* 0x6B ュ */ + { 0x24, 0x2c, 0x3c }, /* 0x6C ョ */ + { 0x2c, 0x2c, 0x1c }, /* 0x6D ッ */ + { 0x04, 0x08, 0x08 }, /* 0x6E ー */ + { 0x21, 0x1d, 0x07 }, /* 0x6F ア */ + { 0x08, 0x3c, 0x03 }, /* 0x70 イ */ + { 0x06, 0x23, 0x1e }, /* 0x71 ウ */ + { 0x22, 0x3e, 0x22 }, /* 0x72 エ */ + { 0x12, 0x0a, 0x3f }, /* 0x73 オ */ + { 0x32, 0x0f, 0x3e }, /* 0x74 カ */ + { 0x0a, 0x3f, 0x0a }, /* 0x75 キ */ + { 0x24, 0x13, 0x0e }, /* 0x76 ク */ + { 0x27, 0x1e, 0x02 }, /* 0x77 ケ */ + { 0x22, 0x22, 0x3e }, /* 0x78 コ */ + { 0x27, 0x12, 0x0f }, /* 0x79 サ */ + { 0x25, 0x25, 0x10 }, /* 0x7A シ */ + { 0x21, 0x19, 0x27 }, /* 0x7B ス */ + { 0x3f, 0x22, 0x2e }, /* 0x7C セ */ + { 0x21, 0x16, 0x0f }, /* 0x7D ソ */ + { 0x24, 0x1b, 0x0e }, /* 0x7E タ */ + { 0x25, 0x1f, 0x05 }, /* 0x7F チ */ + { 0x26, 0x26, 0x1e }, /* 0x80 ツ */ + { 0x25, 0x1d, 0x05 }, /* 0x81 テ */ + { 0x3f, 0x04, 0x08 }, /* 0x82 ト */ + { 0x24, 0x1f, 0x04 }, /* 0x83 ナ */ + { 0x20, 0x22, 0x22 }, /* 0x84 ニ */ + { 0x25, 0x19, 0x27 }, /* 0x85 ヌ */ + { 0x12, 0x3b, 0x16 }, /* 0x86 ネ */ + { 0x20, 0x10, 0x0f }, /* 0x87 ノ */ + { 0x3c, 0x01, 0x3e }, /* 0x88 ハ */ + { 0x1f, 0x24, 0x24 }, /* 0x89 ヒ */ + { 0x21, 0x11, 0x0f }, /* 0x8A フ */ + { 0x0c, 0x03, 0x1c }, /* 0x8B ヘ */ + { 0x1a, 0x3f, 0x1a }, /* 0x8C ホ */ + { 0x09, 0x19, 0x27 }, /* 0x8D マ */ + { 0x22, 0x2a, 0x2a }, /* 0x8E ミ */ + { 0x38, 0x27, 0x30 }, /* 0x8F ム */ + { 0x32, 0x0c, 0x13 }, /* 0x90 メ */ + { 0x05, 0x3f, 0x25 }, /* 0x91 モ */ + { 0x02, 0x3f, 0x0e }, /* 0x92 ヤ */ + { 0x21, 0x3f, 0x20 }, /* 0x93 ユ */ + { 0x25, 0x25, 0x3f }, /* 0x94 ヨ */ + { 0x25, 0x25, 0x1d }, /* 0x95 ラ */ + { 0x07, 0x20, 0x1f }, /* 0x96 リ */ + { 0x3c, 0x3f, 0x20 }, /* 0x97 ル */ + { 0x3f, 0x20, 0x10 }, /* 0x98 レ */ + { 0x3e, 0x22, 0x3e }, /* 0x99 ロ */ + { 0x23, 0x11, 0x0f }, /* 0x9A ワ */ + { 0x21, 0x21, 0x18 }, /* 0x9B ン */ + { 0x01, 0x00, 0x01 }, /* 0x9C ゙ */ + { 0x02, 0x05, 0x02 }, /* 0x9D ゚ */ +}; +#define MISAKI_FONT_F2_H +PROGMEM const uint8_t misaki_font_f2[ MISAKI_FONT_F2_SIZE + 1 ][ MISAKI_FONT_F2_W ] = +{ + { 0x75, 0x40, 0x77, 0x55, 0x75, 0x77, 0x40 }, /* 0x00 温 */ + { 0x40, 0x3e, 0x4a, 0x5e, 0x2b, 0x5e, 0x4a }, /* 0x01 度 */ + { 0x6b, 0x62, 0x7f, 0x35, 0x2f, 0x35, 0x7f }, /* 0x02 調 */ + { 0x7c, 0x5b, 0x5e, 0x24, 0x7b, 0x0e, 0x3a }, /* 0x03 節 */ + { 0x04, 0x7e, 0x01, 0x7e, 0x4a, 0x5e, 0x69 }, /* 0x04 低 */ + { 0x06, 0x3a, 0x2f, 0x3f, 0x6b, 0x7e, 0x46 }, /* 0x05 電 */ + { 0x40, 0x3f, 0x41, 0x49, 0x7f, 0x49, 0x41 }, /* 0x06 圧 */ + { 0x02, 0x62, 0x6b, 0x6b, 0x6b, 0x62, 0x02 }, /* 0x07 言 */ + { 0x6a, 0x6b, 0x14, 0x7d, 0x57, 0x7d, 0x10 }, /* 0x08 語 */ + { 0x41, 0x3f, 0x55, 0x55, 0x3d, 0x57, 0x51 }, /* 0x09 戻 */ + { 0x21, 0x3f, 0x2d, 0x7f, 0x2a, 0x12, 0x2e }, /* 0x0A 取 */ + { 0x0a, 0x77, 0x5a, 0x50, 0x5a, 0x77, 0x0a }, /* 0x0B 替 */ + { 0x20, 0x24, 0x13, 0x7d, 0x55, 0x53, 0x70 }, /* 0x0C 名 */ + { 0x7a, 0x2a, 0x7b, 0x02, 0x1a, 0x43, 0x7a }, /* 0x0D 前 */ + { 0x4a, 0x52, 0x5e, 0x2b, 0x5e, 0x42, 0x4a }, /* 0x0E 変 */ + { 0x41, 0x5f, 0x35, 0x3f, 0x55, 0x5f, 0x41 }, /* 0x0F 更 */ + { 0x7d, 0x14, 0x57, 0x7d, 0x0e, 0x40, 0x7f }, /* 0x10 削 */ + { 0x7f, 0x1b, 0x54, 0x16, 0x7d, 0x16, 0x54 }, /* 0x11 除 */ + { 0x49, 0x3a, 0x40, 0x7e, 0x57, 0x56, 0x76 }, /* 0x12 追 */ + { 0x42, 0x3f, 0x42, 0x7e, 0x7e, 0x42, 0x7e }, /* 0x13 加 */ + { 0x04, 0x7e, 0x51, 0x37, 0x7d, 0x37, 0x50 }, /* 0x14 保 */ + { 0x12, 0x7a, 0x17, 0x52, 0x76, 0x1e, 0x12 }, /* 0x15 存 */ + { 0x7f, 0x55, 0x7f, 0x14, 0x5d, 0x7f, 0x55 }, /* 0x16 睡 */ + { 0x7f, 0x55, 0x7f, 0x7f, 0x55, 0x3d, 0x57 }, /* 0x17 眠 */ + { 0x7f, 0x55, 0x37, 0x78, 0x17, 0x45, 0x7f }, /* 0x18 閉 */ + { 0x7f, 0x2b, 0x7b, 0x28, 0x7b, 0x2b, 0x7f }, /* 0x19 開 */ + { 0x1e, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x1e }, /* 0x1A 中 */ + { 0x7f, 0x41, 0x6b, 0x7f, 0x6b, 0x51, 0x7f }, /* 0x1B 国 */ + { 0x52, 0x5a, 0x57, 0x3a, 0x57, 0x5a, 0x52 }, /* 0x1C 英 */ + { 0x00, 0x7f, 0x49, 0x49, 0x49, 0x49, 0x7f }, /* 0x1D 日 */ + { 0x22, 0x12, 0x2a, 0x7f, 0x2a, 0x12, 0x22 }, /* 0x1E 本 */ + { 0x16, 0x6a, 0x5e, 0x73, 0x56, 0x62, 0x16 }, /* 0x1F 密 */ + { 0x09, 0x37, 0x31, 0x5f, 0x15, 0x5f, 0x75 }, /* 0x20 碼 */ + { 0x42, 0x22, 0x1e, 0x0b, 0x4a, 0x7a, 0x02 }, /* 0x21 方 */ + { 0x7e, 0x02, 0x3a, 0x2b, 0x3a, 0x42, 0x7e }, /* 0x22 向 */ +}; +/* + プリセット + 温度調節 + タイマー + コントロール + スクリーン + ブザー + 低電圧アラーム + 言語 + 戻る + 取り替える + キャリブレーション + 名前を変更 + 削除 + 追加 + 保存 + デフォルト + 睡眠 + ブースト + 保存 + 睡眠 + 閉じる + ブースト + 保存 + ダイレクト + PID + ビッグ + ニュース + 閉じる + 開く + いいえ、 + はい、 + 中国語 + 英語 + いいえ、 + はい、 + メインスクリーン + フリップ + 保存 + アバウト + 日本語 + つまみ方向 + + 汉字转换表:温度調節低電圧言語戻取替名前変更削除追加保存睡眠閉開中国英日本密碼 +*/ +const char JP_0[] PROGMEM = { 0xf0, 0xcc, 0xdf, 0xb0, 0xb8, 0xbd, }; +const char JP_1[] PROGMEM = { 0xf2, 0x00, 0x01, 0x02, 0x03, }; +const char JP_2[] PROGMEM = { 0xf0, 0xb4, 0x99, 0xd3, 0xee, }; +const char JP_3[] PROGMEM = { 0xf0, 0xa8, 0xe8, 0xbd, 0xe2, 0xee, 0xe0, }; +const char JP_4[] PROGMEM = { 0xf0, 0xae, 0xa4, 0xdf, 0xee, 0xe8, }; +const char JP_5[] PROGMEM = { 0xf0, 0xcb, 0xab, 0xee, }; +const char JP_6[] PROGMEM = { 0xf2, 0x04, 0x05, 0x06, 0xf0, 0x97, 0xde, 0xee, 0xd5, }; +const char JP_7[] PROGMEM = { 0xf2, 0x07, 0x08, }; +const char JP_8[] PROGMEM = { 0xf2, 0x09, 0xf0, 0x8d, }; +const char JP_9[] PROGMEM = { 0xf2, 0x0a, 0xf0, 0x8c, 0xf2, 0x0b, 0xf0, 0x4a, 0x8d, }; +const char JP_10[] PROGMEM = { 0xf0, 0xa2, 0xd8, 0xdf, 0xcb, 0xe1, 0xee, 0xac, 0xdc, 0xe8, }; +const char JP_11[] PROGMEM = { 0xf2, 0x0c, 0x0d, 0xf0, 0x94, 0xf2, 0x0e, 0x0f, }; +const char JP_12[] PROGMEM = { 0xf2, 0x10, 0x11, }; +const char JP_13[] PROGMEM = { 0xf2, 0x12, 0x13, }; +const char JP_14[] PROGMEM = { 0xf2, 0x14, 0x15, }; +const char JP_15[] PROGMEM = { 0xf0, 0xbc, 0xca, 0x9e, 0xe0, 0xbd, }; +const char JP_16[] PROGMEM = { 0xf2, 0x16, 0x17, }; +const char JP_17[] PROGMEM = { 0xf0, 0xcb, 0xee, 0xae, 0xbd, }; +const char JP_18[] PROGMEM = { 0xf2, 0x14, 0x15, }; +const char JP_19[] PROGMEM = { 0xf2, 0x16, 0x17, }; +const char JP_20[] PROGMEM = { 0xf2, 0x18, 0xf0, 0x5a, 0x8d, }; +const char JP_21[] PROGMEM = { 0xf0, 0xcb, 0xee, 0xae, 0xbd, }; +const char JP_22[] PROGMEM = { 0xf2, 0x14, 0x15, }; +const char JP_23[] PROGMEM = { 0xf0, 0xb5, 0x99, 0xe1, 0xa4, 0xbd, }; +const char JP_24[] PROGMEM = { 0xf1, 0x30, 0x29, 0x24, }; +const char JP_25[] PROGMEM = { 0xf0, 0xc8, 0xb8, 0xa5, }; +const char JP_26[] PROGMEM = { 0xf0, 0xc0, 0xda, 0xee, 0xae, }; +const char JP_27[] PROGMEM = { 0xf2, 0x18, 0xf0, 0x5a, 0x8d, }; +const char JP_28[] PROGMEM = { 0xf2, 0x19, 0xf0, 0x51, }; +const char JP_29[] PROGMEM = { 0xf0, 0x46, 0x46, 0x4a, 0x01, }; +const char JP_30[] PROGMEM = { 0xf0, 0x71, 0x46, 0x01, }; +const char JP_31[] PROGMEM = { 0xf2, 0x1a, 0x1b, 0x08, }; +const char JP_32[] PROGMEM = { 0xf2, 0x1c, 0x08, }; +const char JP_33[] PROGMEM = { 0xf0, 0x46, 0x46, 0x4a, 0x01, }; +const char JP_34[] PROGMEM = { 0xf0, 0x71, 0x46, 0x01, }; +const char JP_35[] PROGMEM = { 0xf0, 0xd6, 0x99, 0xe8, 0xae, 0xa4, 0xdf, 0xee, 0xe8, }; +const char JP_36[] PROGMEM = { 0xf0, 0xca, 0xdf, 0xb8, 0xcc, }; +const char JP_37[] PROGMEM = { 0xf2, 0x14, 0x15, }; +const char JP_38[] PROGMEM = { 0xf0, 0x97, 0xc5, 0x9b, 0xbd, }; +const char JP_39[] PROGMEM = { 0xf2, 0x1d, 0x1e, 0x08, }; +const char JP_40[] PROGMEM = { 0xf2, 0x1f, 0x20, }; //密码 +const char JP_41[] PROGMEM = { 0xf0, 0x66, 0x80, 0x81, 0xf2, 0x21, 0x22, }; //つまみ方向 +const char *const JP_table[] = {JP_0, JP_1, JP_2, JP_3, JP_4, JP_5, JP_41, JP_6, JP_40, JP_7, JP_38, JP_8, JP_9, JP_10, JP_11, JP_12, JP_13, JP_14, JP_15, JP_16, JP_17, JP_18, JP_19, JP_20, JP_21, JP_22, JP_23, JP_24, JP_25, JP_26, JP_27, JP_28, JP_29, JP_30, JP_31, JP_32, JP_39, JP_35, JP_36, JP_37,}; +const char JP_Length_table[] PROGMEM = {6, 5, 5, 7, 6, 4, 7, 9, 3, 3 , 5, 4, 9, 10, 8, 3, 3, 3, 6, 3, 5, 3, 3, 5, 5, 3, 6, 4, 4, 5, 5, 4, 5, 4, 4, 3, 4, 9, 5, 3,}; + +#endif + +bool lastbutton; +#include //注意 这里使用被阉割的图形库,只有绘图功能,并非通用的版本 +Arduboy2 arduboy; + +#include +#include +#include + +// Firmware version +#define VERSION "v1.8t5" + +// Type of rotary encoder +#define ROTARY_TYPE 1 // 0: 2 increments/step; 1: 4 increments/step + +// Pins +#define SENSOR_PIN A0 // temperature sense +#define VIN_PIN A1 // input voltage sense +#define BUZZER_PIN 5 // buzzer +#define BUTTON_PIN 6 // rotary encoder switch +#define ROTARY_1_PIN 7 // rotary encoder 1 +#define ROTARY_2_PIN 8 // rotary encoder 2 +#define CONTROL_PIN 9 // heater MOSFET PWM control +#define SWITCH_PIN 10 // handle vibration switch + +// Default temperature control values (recommended soldering temperature: 300-380°C) +#define ChipTempCalVal 335 //芯片内部温度读取校准值 -->可以根据实际情况修改,不同机器情况不同,通常误差在10°C内 +#define TEMP_MIN 150 // min selectable temperature +#define TEMP_MAX 400 // max selectable temperature +#define TEMP_DEFAULT 320 // default start setpoint +#define TEMP_SLEEP 150 // temperature in sleep mode +#define TEMP_BOOST 60 // temperature increase in boost mode +#define TEMP_STEP 10 // rotary encoder temp change steps + +// Default tip temperature calibration values +#define TEMP200 216 // temperature at ADC = 200 +#define TEMP280 308 // temperature at ADC = 280 +#define TEMP360 390 // temperature at ADC = 360 +#define TEMPCHP 30 // chip temperature while calibration +#define TIPMAX 8 // max number of tips +#define TIPNAMELENGTH 6 // max length of tip names (including termination) +#define TIPNAME "BC1.5" // default tip name + +// Default timer values (0 = disabled) +#define TIME2SLEEP 5 // time to enter sleep mode in minutes +#define TIME2OFF 15 // time to shut off heater in minutes +#define TIMEOFBOOST 40 // time to stay in boost mode in seconds + +// Control values +#define TIME2SETTLE 950 // time in microseconds to allow OpAmp output to settle +#define SMOOTHIE 0.05 // OpAmp output smooth factor (1=no smoothing; 0.05 default) +#define PID_ENABLE true // enable PID control +#define BEEP_ENABLE true // enable/disable buzzer +#define MAINSCREEN 1 // type of main screen (0: big numbers; 1: more infos) + +// EEPROM identifier +#define EEPROM_IDENT 0x140A // to identify if EEPROM was written by this program + +//Beep +#define SetBeepCoolTime 200 +unsigned long BeepCoolTime; + +// Define the aggressive and conservative PID tuning parameters +double aggKp = 11, aggKi = 0.5, aggKd = 1; +double consKp = 11, consKi = 3, consKd = 5; + +// Default values that can be changed by the user and stored in the EEPROM +uint16_t DefaultTemp = TEMP_DEFAULT; +uint16_t SleepTemp = TEMP_SLEEP; +uint8_t BoostTemp = TEMP_BOOST; +uint8_t time2sleep = TIME2SLEEP; +uint8_t time2off = TIME2OFF; +uint8_t timeOfBoost = TIMEOFBOOST; +uint8_t MainScrType = MAINSCREEN; +bool PIDenable = PID_ENABLE; +bool beepEnable = BEEP_ENABLE; +// Default values for tips +uint16_t CalTemp[TIPMAX][4] = {TEMP200, TEMP280, TEMP360, TEMPCHP}; +char TipName[TIPMAX][TIPNAMELENGTH] = {TIPNAME}; +uint8_t CurrentTip = 0; +uint8_t NumberOfTips = 1; + +// Menu items +/* + 这个可以选择进行界面美化 + const char *DeleteMessage[] = { "Warning", "You cannot", "delete your", "last tip!" }; + const char *MaxTipMessage[] = { "Warning", "You reached", "maximum number", "of tips!" }; +*/ +// Variables for pin change interrupt +volatile uint8_t a0, b0, c0, d0; +volatile bool ab0; +volatile int count, countMin, countMax, countStep; +volatile bool handleMoved; + +// Variables for temperature control +uint16_t SetTemp, ShowTemp, gap, Step; +double Input, Output, Setpoint, RawTemp, CurrentTemp, ChipTemp; + +// Variables for voltage readings +uint16_t Vcc, Vin; + +// State variables +bool inSleepMode = false; +bool inOffMode = false; +bool inBoostMode = false; +bool inCalibMode = false; +bool isWorky = true; +bool beepIfWorky = true; +bool TipIsPresent = true; +bool FlipState = false; +// Timing variables +uint32_t sleepmillis; +uint32_t boostmillis; +uint32_t buttonmillis; +uint8_t goneMinutes; +uint8_t goneSeconds; +uint8_t SensorCounter = 255; +//串口助手 +int x, y, a, b; +//欠压报警 +byte UnderVoltage = 0; +// Control variables +uint16_t time2settle = 300; + +//模拟数字滚轮 Numerical scrolling effect +int Value; +int LastValue[3]; +float SlidingAnimationY[3]; + +//开机密码 BootPassword +int Password = 0; + +//屏幕保护-主题:密集运算 +byte Line[4]; + +//编码器旋转调整方向设定 +bool RotaryD = false; + +// Specify the links and initial PID tuning parameters +PID ctrl(&Input, &Output, &Setpoint, aggKp, aggKi, aggKd, REVERSE); + +//NMOS - PMOS软件切换 +#define UsePMOS false + +//LANG 语言支持 +/* 0 - 中文 CHINESE + 1 - 英文 ENGLISH + 2 - 日语 +*/ +byte LANG = 0; +void Flip(bool Fmode) { + arduboy.flipVertical(Fmode); + arduboy.flipHorizontal(Fmode); +} + +ISR(WDT_vect) //WDT中断,8秒一次 +{ + WDTCSR |= _BV(WDIE); +} + +void setup() { + //设置看门狗自动复位 + SetWDT(); + //启动arduboy + arduboy.begin(); + arduboy.setFrameRate(30); + + //Serial.begin(115200); + // set the pin modes + + //设置IO + pinMode(SENSOR_PIN, INPUT); + pinMode(VIN_PIN, INPUT); + pinMode(BUZZER_PIN, OUTPUT); + pinMode(CONTROL_PIN, OUTPUT); + pinMode(ROTARY_1_PIN, INPUT_PULLUP); + pinMode(ROTARY_2_PIN, INPUT_PULLUP); + pinMode(BUTTON_PIN, INPUT_PULLUP); + pinMode(SWITCH_PIN, INPUT_PULLUP); +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); // this shuts off the heater +#endif + digitalWrite(BUZZER_PIN, LOW); // must be LOW when buzzer not in use + + // setup ADC 初始化ADC + ADCSRA |= bit (ADPS0) | bit (ADPS1) | bit (ADPS2); // set ADC prescaler to 128 + ADCSRA |= bit (ADIE); // enable ADC interrupt + interrupts (); // enable global interrupts + + // setup pin change interrupt for rotary encoder 初始化编码器IO + PCMSK0 = bit (PCINT0); // Configure pin change interrupt on Pin8 + PCICR = bit (PCIE0); // Enable pin change interrupt + PCIFR = bit (PCIF0); // Clear interrupt flag + + + // get default values from EEPROM + getEEPROM(); + //设置屏幕反转状态 + Flip(FlipState); + //初始化屏幕保护动画 + for (byte a = 0; a < 4; a++) Line[a] = 32 * a; + //开机密码 + BootPassword(); + + // read supply voltages in mV + Vcc = getVCC(); Vin = getVIN(); + + // read and set current iron temperature + SetTemp = DefaultTemp; + RawTemp = denoiseAnalog(SENSOR_PIN); + ChipTemp = getChipTemp(); + calculateTemp(); + + // turn on heater if iron temperature is well below setpoint +#if UsePMOS + if ((CurrentTemp + 20) < DefaultTemp) analogWrite(CONTROL_PIN, 255); +#else + if ((CurrentTemp + 20) < DefaultTemp) analogWrite(CONTROL_PIN, 0); +#endif + + + // tell the PID to range between 0 and the full window size + ctrl.SetOutputLimits(0, 255); + + // start PID + ctrl.SetMode(AUTOMATIC); + + // set initial rotary encoder values + a0 = PINB & 1; b0 = PIND >> 7 & 1; ab0 = (a0 == b0); + setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, DefaultTemp); + + // reset sleep timer + sleepmillis = millis(); + + // long beep for setup completion + beep(); beep(); + +} + + +void loop() { + //HelpMeSerialer(); + ROTARYCheck(); // check rotary encoder (temp/boost setting, enter setup menu) + SLEEPCheck(); // check and activate/deactivate sleep modes + SENSORCheck(); // reads temperature and vibration switch of the iron + Thermostat(); // heater control + MainScreen(); // updates the main page on the OLED + //beep(0); +} + + + + +// check rotary encoder; set temperature, toggle boost mode, enter setup menu accordingly +void ROTARYCheck() { + // set working temperature according to rotary encoder value + SetTemp = getRotary(); + + // check rotary encoder switch + uint8_t c = digitalRead(BUTTON_PIN); + if ( !c && c0 ) { + beep(); + buttonmillis = millis(); + while ( (!digitalRead(BUTTON_PIN)) && ((millis() - buttonmillis) < 500) ); + if ((millis() - buttonmillis) >= 500) SetupScreen(); + else { + inBoostMode = !inBoostMode; + if (inBoostMode) boostmillis = millis(); + handleMoved = true; + } + } + c0 = c; + + // check timer when in boost mode + if (inBoostMode && timeOfBoost) { + goneSeconds = (millis() - boostmillis) / 1000; + if (goneSeconds >= timeOfBoost) { + inBoostMode = false; // stop boost mode + beep(); // beep if boost mode is over + beepIfWorky = true; // beep again when working temperature is reached + } + } +} + + +// check and activate/deactivate sleep modes +void SLEEPCheck() { + if (handleMoved) { // if handle was moved + if (inSleepMode) { // in sleep or off mode? + if ((CurrentTemp + 20) < SetTemp) // if temp is well below setpoint + + // then start the heater right now + +#if UsePMOS + analogWrite(CONTROL_PIN, 255); +#else + analogWrite(CONTROL_PIN, 0); +#endif + + beep(); // beep on wake-up + beepIfWorky = true; // beep again when working temperature is reached + } + handleMoved = false; // reset handleMoved flag + inSleepMode = false; // reset sleep flag + inOffMode = false; // reset off flag + sleepmillis = millis(); // reset sleep timer + } + + // check time passed since the handle was moved + goneMinutes = (millis() - sleepmillis) / 60000; + if ( (!inSleepMode) && (time2sleep > 0) && (goneMinutes >= time2sleep) ) { + inSleepMode = true; + beep(); + } + if ( (!inOffMode) && (time2off > 0) && (goneMinutes >= time2off ) ) { + inOffMode = true; + beep(); + } +} + + +// reads temperature, vibration switch and supply voltages +void SENSORCheck() { + // shut off heater in order to measure temperature +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + delayMicroseconds(time2settle); // wait for voltage to settle + + uint16_t temp = denoiseAnalog(SENSOR_PIN); // read ADC value for temperature + uint8_t d = digitalRead(SWITCH_PIN); // check handle vibration switch + if (d != d0) { + handleMoved = true; // set flag if handle was moved + d0 = d; + } + if (! SensorCounter--) Vin = getVIN(); // get Vin every now and then + + // turn on again heater + +#if UsePMOS + analogWrite(CONTROL_PIN, 255 - Output); +#else + analogWrite(CONTROL_PIN, Output); +#endif + + + RawTemp += (temp - RawTemp) * SMOOTHIE; // stabilize ADC temperature reading + calculateTemp(); + + // stabilize displayed temperature when around setpoint + if ((ShowTemp != Setpoint) || (abs(ShowTemp - CurrentTemp) > 5)) ShowTemp = CurrentTemp; + if (abs(ShowTemp - Setpoint) <= 1) ShowTemp = Setpoint; + // set state variable if temperature is in working range; beep if working temperature was just reached + gap = abs(SetTemp - CurrentTemp); + if (gap < 5) { + if (!isWorky && beepIfWorky) beep(); + isWorky = true; + beepIfWorky = false; + } else { + isWorky = false; + beepIfWorky = true; + } + // checks if tip is present or currently inserted + if (ShowTemp > 500) TipIsPresent = false; // tip removed ? + if (!TipIsPresent && (ShowTemp < 500)) { // new tip inserted ? + //关闭加热 +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + beep(); // beep for info + TipIsPresent = true; // tip is present now + ChangeTipScreen(); // show tip selection screen + updateEEPROM(); // update setting in EEPROM + handleMoved = true; // reset all timers + RawTemp = denoiseAnalog(SENSOR_PIN); // restart temp smooth algorithm + c0 = LOW; // switch must be released + setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, SetTemp); // reset rotary encoder + } +} + + +// calculates real temperature value according to ADC reading and calibration values +void calculateTemp() { + if (RawTemp < 200) CurrentTemp = map (RawTemp, 0, 200, 21, CalTemp[CurrentTip][0]); + else if (RawTemp < 280) CurrentTemp = map (RawTemp, 200, 280, CalTemp[CurrentTip][0], CalTemp[CurrentTip][1]); + else CurrentTemp = map (RawTemp, 280, 360, CalTemp[CurrentTip][1], CalTemp[CurrentTip][2]); +} + + +//调温 +void Thermostat() { + // define Setpoint acoording to current working mode + if (inOffMode) Setpoint = 0; + else if (inSleepMode) Setpoint = SleepTemp; + else if (inBoostMode) Setpoint = SetTemp + BoostTemp; + else Setpoint = SetTemp; + + // control the heater (PID or direct) + gap = abs(Setpoint - CurrentTemp); + if (PIDenable) { + Input = CurrentTemp; + if (gap < 30) ctrl.SetTunings(consKp, consKi, consKd); + else ctrl.SetTunings(aggKp, aggKi, aggKd); + ctrl.Compute(); + } else { + // turn on heater if current temperature is below setpoint + if ((CurrentTemp + 0.5) < Setpoint) Output = 0; else Output = 255; + } + // set heater PWM +#if UsePMOS + analogWrite(CONTROL_PIN, 255 - Output); +#else + analogWrite(CONTROL_PIN, Output); +#endif +} + + +// creates a short beep on the buzzer +void beep() { + /* + if (beepEnable) { + if (BeepCoolTime + SetBeepCoolTime < millis()) { + if (state) BeepCoolTime = millis(); + analogWrite(BUZZER_PIN, 0); + } else analogWrite(BUZZER_PIN, 127); + } else analogWrite(BUZZER_PIN, 0); + */ + //体谅一下,没内存了,只能用原始的办法驱动无源蜂鸣器,否则我也不想牺牲宝贵响应资源换内存 + if (beepEnable) { + for (uint8_t i = 0; i < 255; i++) { + digitalWrite(BUZZER_PIN, HIGH); + delayMicroseconds(125); + digitalWrite(BUZZER_PIN, LOW); + delayMicroseconds(125); + } + } +} + +//设置旋转编码器的起始值 +// sets start values for rotary encoder +void setRotary(int rmin, int rmax, int rstep, int rvalue) { + countMin = rmin << ROTARY_TYPE; + countMax = rmax << ROTARY_TYPE; + if (RotaryD) countStep = rstep; else countStep = -rstep; + count = rvalue << ROTARY_TYPE; +} + + +// reads current rotary encoder value +int getRotary() { + return (count >> ROTARY_TYPE); +} + + +// reads user settings from EEPROM; if EEPROM values are invalid, write defaults +void getEEPROM() { + uint16_t identifier = (EEPROM.read(0) << 8) | EEPROM.read(1); + if (identifier == EEPROM_IDENT) { + DefaultTemp = (EEPROM.read(2) << 8) | EEPROM.read(3); + SleepTemp = (EEPROM.read(4) << 8) | EEPROM.read(5); + BoostTemp = EEPROM.read(6); + time2sleep = EEPROM.read(7); + time2off = EEPROM.read(8); + timeOfBoost = EEPROM.read(9); + MainScrType = EEPROM.read(10); + PIDenable = EEPROM.read(11); + beepEnable = EEPROM.read(12); + CurrentTip = EEPROM.read(13); + NumberOfTips = EEPROM.read(14); + LANG = EEPROM.read(15); + FlipState = EEPROM.read(16); + UnderVoltage = EEPROM.read(17); + Password = (EEPROM.read(18) << 8) | EEPROM.read(19); + RotaryD = EEPROM.read(20); + uint8_t i, j; + uint16_t counter = 21; + for (i = 0; i < NumberOfTips; i++) { + for (j = 0; j < TIPNAMELENGTH; j++) { + TipName[i][j] = EEPROM.read(counter++); + } + for (j = 0; j < 4; j++) { + CalTemp[i][j] = EEPROM.read(counter++) << 8; + CalTemp[i][j] |= EEPROM.read(counter++); + } + } + } + else { + EEPROM.update(0, EEPROM_IDENT >> 8); EEPROM.update(1, EEPROM_IDENT & 0xFF); + updateEEPROM(); + } +} + + +// writes user settings to EEPROM using updade function to minimize write cycles +void updateEEPROM() { + EEPROM.update( 2, DefaultTemp >> 8); + EEPROM.update( 3, DefaultTemp & 0xFF); + EEPROM.update( 4, SleepTemp >> 8); + EEPROM.update( 5, SleepTemp & 0xFF); + EEPROM.update( 6, BoostTemp); + EEPROM.update( 7, time2sleep); + EEPROM.update( 8, time2off); + EEPROM.update( 9, timeOfBoost); + EEPROM.update(10, MainScrType); + EEPROM.update(11, PIDenable); + EEPROM.update(12, beepEnable); + EEPROM.update(13, CurrentTip); + EEPROM.update(14, NumberOfTips); + EEPROM.update(15, LANG); + EEPROM.update(16, FlipState); + EEPROM.update(17, UnderVoltage); + EEPROM.update(18, Password >> 8); + EEPROM.update(19, Password & 0xFF); + EEPROM.update(20, RotaryD); + uint8_t i, j; + uint16_t counter = 21; + for (i = 0; i < NumberOfTips; i++) { + for (j = 0; j < TIPNAMELENGTH; j++) EEPROM.update(counter++, TipName[i][j]); + for (j = 0; j < 4; j++) { + EEPROM.update(counter++, CalTemp[i][j] >> 8); + EEPROM.update(counter++, CalTemp[i][j] & 0xFF); + } + } +} +//此片段用于DEBUG +void HelpMeSerialer() { + //串口助手 + if (Serial.available()) { + char TmpChar = Serial.read(); + switch (TmpChar) { + case 'x': x = Serial.parseInt(); + case 'y': y = Serial.parseInt(); + case 'a': a = Serial.parseInt(); + case 'b': b = Serial.parseInt(); + } + } + /* + Serial.println(String("X ->") + x); + Serial.println(String("Y ->") + y); + Serial.println(String("A ->") + a); + Serial.println(String("B ->") + b); + */ +} +// draws the main screen +void MainScreen() { + if (!(arduboy.nextFrame())) //帧率锁 + return; + //状态 + byte SysState; + if (ShowTemp > 500) SysState = 0; + else if (inOffMode) { + SysState = 1; + DrawIntensiveComputing(); + } else if (inSleepMode) SysState = 2; + else if (inBoostMode) SysState = 3; + else if (isWorky) SysState = 4; + else if (Output < 180) SysState = 5; + else SysState = 6; + if (SysState != 1) { + if (MainScrType) { + //arduboy.invert(0); + arduboy.clear(); + //详细信息页 + arduboy.fillRect(0, 0, 128, 64, 1); //白底 + arduboy.setTextSize(1); + SetTextColor(0); + //预设名 + arduboy.drawSlowXYBitmap(0, 0, Tag, 16, 16, 0); + arduboy.setCursor(19, 4); arduboy.print(TipName[CurrentTip]); + //显示状态 + arduboy.setCursor(53, 1); + arduboy.setTextSize(2); + switch (LANG) { + case 0: arduboy.drawSlowXYBitmap(80, 1, S_table[SysState], 28, 14, 0); break; //中文 Chinese + default: //英文 English + switch (SysState) { + case 1: arduboy.print(F("OFF")); break; + case 2: arduboy.print(F("SLEEP")); break; + case 3: arduboy.print(F("BOOST")); break; + case 4: arduboy.print(F("WORKY")); break; + case 5: arduboy.print(F("HEAT")); break; + case 6: arduboy.print(F("HOLD")); break; + default: arduboy.print(F("ERROR")); break; + } break; + } + arduboy.drawSlowXYBitmap(113, 1, C_table[SysState], 14, 14, 0); + arduboy.setTextSize(1); + //芯片 + //R1 + + //自动报警-图标闪烁 + if (getChipTemp() < 80 || ((millis() * 4) / 1000) % 2) { + arduboy.setCursor(19, 16); arduboy.print(getChipTemp(), 1); arduboy.print((char)248); arduboy.print(F("C")); //芯片温度 + arduboy.drawSlowXYBitmap(2, 18, Chip, 14, 14, 0); + } + //R2 + if ((float)Vin / 100 > UnderVoltage || ((millis() * 4) / 1000) % 2) { + arduboy.setCursor(19, 32); arduboy.print((float)Vin / 1000, 1); arduboy.print(F("V")); //输入电压 + arduboy.drawSlowXYBitmap(2, 34, Lightning, 14, 14, 0); + } + + + //R3 + + arduboy.setCursor(19, 24); arduboy.print((float)getVCC() / 1000, 2); arduboy.print(F("V")); //芯片电压 + + arduboy.setCursor(19, 40); arduboy.print(F(VERSION)); //固件 + //显示探头温度 + DrawNumRect(ShowTemp); + + DrawStatusBar(0); + arduboy.display(); + //警报声 + if (getChipTemp() > 80 && ((millis() * 4) / 1000) % 2 || (float)Vin / 100 < UnderVoltage && ((millis() * 4) / 1000) % 2) beep(); + } else { + //arduboy.invert(1); + arduboy.setTextSize(6); + SetTextColor(1); + arduboy.clear(); + if (getChipTemp() > 80 && ((millis() * 4) / 1000) % 2) beep(); + if ((float)Vin / 100 < UnderVoltage && ((millis() * 4) / 1000) % 2) beep(); + arduboy.setCursor(12, 2); + + if (ShowTemp > 500) arduboy.print(999); else arduboy.print(ShowTemp); + arduboy.fillRect(0, 48, 128, 16, 1); + + DrawStatusBar(0); + arduboy.display(); + } + } +} +void DrawNumRect(int n) { + arduboy.setCursor(57, 18); + arduboy.setTextSize(4); + if (ShowTemp > 500) arduboy.print(F("000")); else arduboy.print(n); + arduboy.drawRect(55, 16, 72, 32, 0); +} +void DrawStatusBar(bool color) { + SetTextColor(color); + arduboy.setTextSize(1); + //温度条 + //框 + arduboy.drawRect(1, 49, 102, 14, color); + //条 + if (ShowTemp <= 500) arduboy.fillRect(1, 49, map(ShowTemp, 0, 500, 2, 102), 14, color); + //指示部分 + arduboy.fillRect(map(Setpoint, 0, 500, 2, 102) - 2, 50, 3, 13, color); + //先来个白底 + arduboy.fillRect(map(Setpoint, 0, 500, 2, 102) - 3, 60, 5, 4, color); + arduboy.drawLine(map(Setpoint, 0, 500, 2, 102) - 1, 60, map(Setpoint, 0, 500, 2, 102) - 1, 49, !color); + + //画指示针 + arduboy.drawSlowXYBitmap(map(Setpoint, 0, 500, 2, 102) - 3, 59, Pointer, 5, 4, !color); + + //功率条 + arduboy.drawRect(104, 49, 23, 14, color); + arduboy.fillRect(104, 49, map(Output, 255, 0, 0, 23), 14, color); + + SetTextColor(!color); + //////////////进入反色//////////////////////////////// + arduboy.setCursor(2, 55); arduboy.print(Setpoint, 0); arduboy.print((char)248); arduboy.print(F("C")); //探头预设温度 + arduboy.setCursor(105, 55); arduboy.print(map(Output, 255, 0, 0, 100)); arduboy.print(F("%")); //功率百分比 + SetTextColor(color); +} + +//设置画笔颜色 +void SetTextColor(bool color) { + arduboy.setTextBackground(!color); + arduboy.setTextColor(color); +} +// setup screen +void SetupScreen() { + //关闭加热 +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + beep(); + uint16_t SaveSetTemp = SetTemp; + uint8_t selection = 0; + bool repeat = true; + + while (repeat) { + //arduboy.invert(0); + MenuLevel = 0; //默认打开主菜单 + selection = MenuScreen(selection); + switch (selection) { + case 0: MenuLevel = 1; TipScreen(); repeat = false; break; + case 1: MenuLevel = 2; TempScreen(); break; + case 2: MenuLevel = 3; TimerScreen(); break; + case 3: MenuLevel = 4; PIDenable = MenuScreen(PIDenable); break; + case 4: ScreenSet(); break; + case 5: MenuLevel = 6; beepEnable = MenuScreen(beepEnable); break; + case 6: RotarySet(); break; + case 7: UnderVoltageSet(); break; + case 8: PasswordSet(); break; + case 9: MenuLevel = 8; LANG = MenuScreen(LANG); if (LANG == 2 && !LANG_JP_State) LANG = 1; break; + case 10: QRcodeScreen(); break; + default: repeat = false; break; + } + } + updateEEPROM(); + handleMoved = true; + SetTemp = SaveSetTemp; + setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, SetTemp); +} + +void RotarySet() { + bool Exit = false; + float rad; + byte ExitBar = 0; + SetTextColor(0); + lastbutton = (!digitalRead(BUTTON_PIN)); + setRotary(60, 420, 18, 240); + do { + arduboy.setTextSize(1); + Setpoint = getRotary(); + ShowTemp = Setpoint; + + arduboy.clear(); + //仪表盘 + arduboy.fillRect(0, 0, 128, 64, 1); + arduboy.fillTriangle(24 + 24 * cos(rad), 24 - 24 * sin(rad), 24 + 3 * sin(rad), 24 + 3 * cos(rad), 24 - 3 * sin(rad), 24 - 3 * cos(rad), 0); + arduboy.drawCircle(24, 24, 22, 0); + arduboy.drawCircle(24, 24, 19, 0); + arduboy.drawCircle(24, 24, 3, 0); + //右上角的模式提示文本 + arduboy.setCursor(55, 1); + arduboy.setTextSize(2); + arduboy.print(F("MODE ")); + if (RotaryD) { + arduboy.print(F("-")); + rad = ((Setpoint - 60) / 360.0) * (2 * PI) - PI / 2; + } else { + arduboy.print(F("+")); + rad = ((-Setpoint - 60) / 360.0) * (2 * PI) + PI * 1 / 6; + } + //右侧数字显示 + DrawNumRect(ShowTemp); + //下端的状态条 + DrawStatusBar(0); + //退出条 + arduboy.fillRect(0, 0, ExitBar, 4, 0); + arduboy.display(); + CheckLastButton(); + if (!digitalRead(BUTTON_PIN) && !lastbutton) { + ExitBar += 8; + if (ExitBar > 127) Exit = true; + } else { + if (ExitBar > 1 && ExitBar < 64) { + RotaryD = !RotaryD; + setRotary(60, 420, 18, 240); + } + ExitBar = 0; + } + + } while (!Exit); + beep(); beep(); +} +//显示设置菜单 +// tip settings screen +void ScreenSet() { + uint8_t selection = 0; + bool repeat = true; + while (repeat) { + MenuLevel = 9; + selection = MenuScreen(selection); + switch (selection) { + case 0: MenuLevel = 5; MainScrType = MenuScreen(MainScrType); break; + case 1: FlipState = !FlipState; break; + default: repeat = false; break; + } + Flip(FlipState); //设置屏幕反转状态 + } + updateEEPROM(); +} + +//预设设置菜单 +// tip settings screen +void TipScreen() { + uint8_t selection = 0; + bool repeat = true; + while (repeat) { + MenuLevel = 1; + selection = MenuScreen(selection); + switch (selection) { + case 0: ChangeTipScreen(); break; + case 1: CalibrationScreen(); break; + case 2: InputNameScreen(); break; + case 3: DeleteTipScreen(); break; + case 4: AddTipScreen(); break; + default: repeat = false; break; + } + } +} + +//温控设置菜单 +// temperature settings screen +void TempScreen() { + uint8_t selection = 0; + bool repeat = true; + while (repeat) { + selection = MenuScreen(selection); + switch (selection) { + case 0: setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, DefaultTemp); + DefaultTemp = InputScreen(18); break; + case 1: setRotary(20, 200, TEMP_STEP, SleepTemp); + SleepTemp = InputScreen(19); break; + case 2: setRotary(10, 100, TEMP_STEP, BoostTemp); + BoostTemp = InputScreen(20); break; + default: repeat = false; break; + } + } + updateEEPROM(); +} + +//定时器设置菜单 +// timer settings screen +void TimerScreen() { + uint8_t selection = 0; + bool repeat = true; + while (repeat) { + selection = MenuScreen(selection); + switch (selection) { + case 0: setRotary(0, 30, 1, time2sleep); + time2sleep = InputScreen(22); break; + case 1: setRotary(0, 60, 5, time2off); + time2off = InputScreen(23); break; + case 2: setRotary(0, 180, 10, timeOfBoost); + timeOfBoost = InputScreen(24); break; + default: repeat = false; break; + } + } + updateEEPROM(); +} +//英语支持 +void Print_EN(byte i) { + char buffer[11]; + strcpy_P(buffer, (char *)pgm_read_word(&(EN_table[i]))); + arduboy.print(buffer); +} +//菜单界面 +// menu screen +uint8_t MenuScreen(uint8_t selected) { + int SlidingAnimationX; + uint8_t lastselected = selected; + setRotary(0, Menu_table[MenuLevel] - 1, 1, selected); + lastbutton = (!digitalRead(BUTTON_PIN)); + SetTextColor(1); + do { + selected = getRotary(); + //非线性滑动动画 + SlidingAnimationX += (selected - lastselected) * 56; + if (SlidingAnimationX != 0) SlidingAnimationX += 0.6 * (-SlidingAnimationX); + lastselected = selected; + arduboy.clear(); + //绘制图标 如果有指定的话 + for (byte i = 0; i < 5; i++) if (selected - 2 + i >= 0 && selected - 2 + i < Menu_table[MenuLevel]) DrawApp(-72 + i * 56 + SlidingAnimationX, selected - 2 + i + QueryMenuObject()); + DrawAppText(selected + QueryMenuObject()); + + arduboy.display(); + CheckLastButton(); + //beep(0); + } while (digitalRead(BUTTON_PIN) || lastbutton); + beep(); + return selected; +} +//显示APP图标 +void DrawApp(int x, byte appID) { + DrawUIFrame(x, 0, 1); + drawSlowXYBitmapResize(x + 3, 3, Ico_table[appID], 14, 14, 3, 1); +} +//显示APP对应的文本 +void DrawAppText(byte appID) { + // arduboy.setCursor(0, 55); arduboy.print(appID); + if (LANG == 0) arduboy.drawSlowXYBitmap(48, 48, CN_table[appID], 36, 16, 1); else if (LANG == 2 && LANG_JP_State) { +#if LANG_JP_State + drawText(48, 52, JP_table[appID], pgm_read_byte(&(JP_Length_table[appID]))); +#endif + } else { + arduboy.setCursor(48, 52); + arduboy.setTextSize(1); + Print_EN(appID); + } +} +void DrawUIFrame(int x, int y, bool color) { + arduboy.fillRect(x, y, 48, 48, color); + arduboy.fillRect(x + 3, y + 3, 42, 42, !color); //雕空 + DrawPoint(x, y, 0); + DrawPoint(x + 47, y, 0); + DrawPoint(x, y + 47, 0); + DrawPoint(x + 47, y + 47, 0); +} +void DrawPoint(int x, int y, bool color) { + arduboy.drawPixel(x + 1, y, color); + arduboy.drawPixel(x - 1, y, color); + arduboy.drawPixel(x, y + 1, color); + arduboy.drawPixel(x, y - 1, color); + arduboy.drawPixel(x, y, color); +} +//检查按键 +void CheckLastButton() { + if (lastbutton && digitalRead(BUTTON_PIN)) { + delay(10); + lastbutton = false; + } +} +//返回对应层数的对象数 +byte QueryMenuObject() { + int SUM = 0; + for (int i = 0; i < (MenuLevel); i++) SUM += Menu_table[i]; + return SUM; +} +//信息窗 +/* + void MessageScreen(const char *Items[], uint8_t numberOfItems) { + lastbutton = (!digitalRead(BUTTON_PIN)); + + //u8g.setFont(//u8g_font_9x15); + //u8g.setFontPosTop(); + for (uint8_t i = 0; i < numberOfItems; i++) //u8g.drawStr( 0, i * 16, Items[i]); + + do { + CheckLastButton(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + beep(); + } +*/ +/* + 好看是好看,但是浪费内存 + int wav(byte wavi, int num) { + return (wavi + byte(millis() / 100)) * (float(float(num - countMin) / float(countMax - countMin)) - 0.5) * 5; + } +*/ +//FP 密集运算屏保 +void DrawIntensiveComputing() { + //关闭加热 +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + float calculate; + // while (1) { + arduboy.clear(); + + //随机线条 + DrawIntensiveComputingLine(); + + calculate = sin(millis() / 4000.0); + //模拟噪点 + for (int i = 0; i < calculate * 256 + 256; i++) arduboy.drawPixel(random(0, 128), random(0, 64), 1); + //声效 + if ((beepEnable)) analogWrite(BUZZER_PIN, 64 + calculate * 64 + random(-8, 8)); + //if ((beepEnable)) tone(BUZZER_PIN, int(calculate * 300) + 500 + random(-50, 50)); //没必要浪费内存 + + arduboy.display(); + //delay(60-calculate*30); + //} +} +//绘制屏保-密集运算线条 +void DrawIntensiveComputingLine() { + for (byte a = 0; a < 4; a++) { + Line[a] += random(-1, 1); + if (Line[a] > 128) Line[a] -= 128; + for (byte b = 0; b < random(3, 6); b++) { + arduboy.drawFastHLine(0, Line[a] + random(-10, 10), 128, 1); //水平线 + arduboy.drawFastVLine(Line[a] + random(-10, 10), 0, 64, 1); //垂直线 + } + } +} +//模拟数字滚轮 Numerical scrolling effect +void DisplayNum(int Num) { + arduboy.setTextSize(6); + SetTextColor(0); + //数字滚轮 + for (byte i = 0; i < 3; i++) LastValue[i] = int(Value / pow(10, 2 - i)) % 10; + Value = Num; + for (byte i = 0; i < 3; i++) { + SlidingAnimationY[i] += ((int(Value / pow(10, 2 - i)) % 10) - LastValue[i]) * 50; + if (SlidingAnimationY[i] != 0) SlidingAnimationY[i] += 0.8 * (-SlidingAnimationY[i]); + arduboy.fillRect(0 + i * 44, 0, 38, 50, 1); //白底 + for (int ii = -1; ii < 2; ii++) { + arduboy.setCursor(4 + i * 44, 4 - SlidingAnimationY[i] + ii * 50); + arduboy.print(LastValue[i] + ii); + } + } + //刻度标 + arduboy.fillRect(0, 0, 128, 2, 0); //上遮罩层 + arduboy.fillRect(0, 48, 128, 16, 0); //下遮罩层 +} + +//数值输入界面 +// input value screen +uint16_t InputScreen(byte appID) { + lastbutton = (!digitalRead(BUTTON_PIN)); + do { + arduboy.clear(); + DisplayNum(getRotary()); + DrawAppText(appID); + arduboy.display(); + CheckLastButton(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + beep(); + return Value; +} +int InputBigNum(int InputPW, byte appID) { + setRotary(0, 900, 100, InputPW); + InputPW = InputScreen(appID); + setRotary(InputPW, InputPW + 90, 10, InputPW); + InputPW = InputScreen(appID); + setRotary(InputPW, InputPW + 9, 1, InputPW); + InputPW = InputScreen(appID); + return InputPW; +} +void QRcodeScreen() { + arduboy.clear(); + arduboy.drawSlowXYBitmap(40, 0, QRCode, 48, 48, 1); + arduboy.display(); + delay(100); + do { + } while (digitalRead(BUTTON_PIN) || lastbutton); + beep(); +} +//欠压报警设置 +// information display screen +void UnderVoltageSet() { + setRotary(0, 250, 1, UnderVoltage); + UnderVoltage = InputScreen(7); + beep(); +} +//设置开机密码 +void PasswordSet() { + Password = InputBigNum(Password, 8); + beep(); +} + +void BootPassword() { + if (Password != 0) { + do { + arduboy.clear(); + DrawApp(40, 8); + DrawAppText(8); + arduboy.display(); + delay(1000); + beep(); beep(); beep(); + } while (InputBigNum(0, 8) != Password); + } +} +//更换预设界面 +// change tip screen +void ChangeTipScreen() { + uint8_t selected = CurrentTip; + uint8_t lastselected = selected; + int8_t arrow = 0; + if (selected) arrow = 1; + setRotary(0, NumberOfTips - 1, 1, selected); + lastbutton = (!digitalRead(BUTTON_PIN)); + do { + //beep(0); + arduboy.clear(); + selected = getRotary(); + arrow = constrain(arrow + selected - lastselected, 0, 2); + lastselected = selected; + SetTextColor(0); + arduboy.setTextSize(2); + arduboy.setCursor(0, 0); arduboy.print(F("Select Tip")); + SetTextColor(1); + arduboy.setCursor(0, 16 * (arrow + 1)); arduboy.print(F(">")); + for (uint8_t i = 0; i < 3; i++) { + uint8_t drawnumber = selected + i - arrow; + if (drawnumber < NumberOfTips) { + arduboy.setCursor(12, 16 * (i + 1)); arduboy.print(TipName[selected + i - arrow]); + } + } + CheckLastButton(); + arduboy.display(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + + beep(); + CurrentTip = selected; +} + +//温度校准界面 +// temperature calibration screen +void CalibrationScreen() { + uint16_t CalTempNew[4]; + for (uint8_t CalStep = 0; CalStep < 3; CalStep++) { + SetTemp = CalTemp[CurrentTip][CalStep]; + setRotary(100, 500, 1, SetTemp); + beepIfWorky = true; + lastbutton = (!digitalRead(BUTTON_PIN)); + do { + arduboy.clear(); + arduboy.setTextSize(2); + SENSORCheck(); // reads temperature and vibration switch of the iron + Thermostat(); // heater control + arduboy.setCursor(0, 0); arduboy.print(F("Step: ")); arduboy.print(CalStep + 1); arduboy.print("/3"); + if (isWorky) { + arduboy.setCursor(0, 16); arduboy.print(F("Set measured")); + arduboy.setCursor(0, 32); arduboy.print(F("temp: ")); arduboy.print(getRotary()); + } else { + arduboy.setCursor(0, 16); arduboy.print(F("ADC: ")); arduboy.print(uint16_t(RawTemp)); + arduboy.setCursor(0, 32); arduboy.print(F("Please wait")); + } + CheckLastButton(); + arduboy.display(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + + CalTempNew[CalStep] = getRotary(); + beep(); delay (10); + } + + //关闭加热 +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + delayMicroseconds(time2settle); // wait for voltage to settle + CalTempNew[3] = getChipTemp(); // read chip temperature + if ((CalTempNew[0] + 30 < CalTempNew[1]) && (CalTempNew[1] + 30 < CalTempNew[2])) { + MenuLevel = 7; + if (MenuScreen(0)) { + for (uint8_t i = 0; i < 4; i++) CalTemp[CurrentTip][i] = CalTempNew[i]; + } + } +} + +//命名界面 文本输入界面 +// input tip name screen +void InputNameScreen() { + uint8_t value; + for (uint8_t digit = 0; digit < (TIPNAMELENGTH - 1); digit++) { + lastbutton = (!digitalRead(BUTTON_PIN)); + setRotary(31, 96, 1, 65); + do { + value = getRotary(); + if (value == 31) { + value = 95; + setRotary(31, 96, 1, 95); + } + if (value == 96) { + value = 32; + setRotary(31, 96, 1, 32); + } + //arduboy.setCursor(0, 0);arduboy.print(); + arduboy.clear(); + arduboy.setTextSize(2); + arduboy.setCursor(16 * digit, 48); arduboy.print(char(94)); + arduboy.setCursor(0, 32); + for (uint8_t i = 0; i < digit; i++) arduboy.print(TipName[CurrentTip][i]); + arduboy.setCursor(16 * digit, 32); arduboy.print(char(value)); + CheckLastButton(); + arduboy.display(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + TipName[CurrentTip][digit] = value; + beep(); delay (10); + } + TipName[CurrentTip][TIPNAMELENGTH - 1] = 0; + return value; +} + + +// delete tip screen +void DeleteTipScreen() { + MenuLevel = 7; + if (NumberOfTips == 1) { + //MessageScreen(DeleteMessage, sizeof(DeleteMessage)); + } + else if (MenuScreen(0)) { + if (CurrentTip == (NumberOfTips - 1)) { + CurrentTip--; + } + else { + for (uint8_t i = CurrentTip; i < (NumberOfTips - 1); i++) { + for (uint8_t j = 0; j < TIPNAMELENGTH; j++) TipName[i][j] = TipName[i + 1][j]; + for (uint8_t j = 0; j < 4; j++) CalTemp[i][j] = CalTemp[i + 1][j]; + } + } + NumberOfTips--; + } +} + + +// add new tip screen +void AddTipScreen() { + if (NumberOfTips < TIPMAX) { + CurrentTip = NumberOfTips++; InputNameScreen(); + CalTemp[CurrentTip][0] = TEMP200; CalTemp[CurrentTip][1] = TEMP280; + CalTemp[CurrentTip][2] = TEMP360; CalTemp[CurrentTip][3] = TEMPCHP; + } //MessageScreen(MaxTipMessage, sizeof(MaxTipMessage)); 信息窗 +} + + +// average several ADC readings in sleep mode to denoise +uint16_t denoiseAnalog (byte port) { + uint16_t result = 0; + ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt + if (port >= A0) port -= A0; // set port and + ADMUX = (0x0F & port) | bit(REFS0); // reference to AVcc + set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction + for (uint8_t i = 0; i < 32; i++) { // get 32 readings + sleep_mode(); // go to sleep while taking ADC sample + while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed + result += ADC; // add them up + } + bitClear (ADCSRA, ADEN); // disable ADC + return (result >> 5); // devide by 32 and return value +} + +/* + //读取芯片温度 + // get internal temperature by reading ADC channel 8 against 1.1V reference + double getChipTemp() { + unsigned int wADC; + double t; + ADMUX = (_BV(REFS1) | _BV(REFS0) | _BV(MUX3)); + ADCSRA |= _BV(ADEN); + delay(5); + ADCSRA |= _BV(ADSC); + while (bit_is_set(ADCSRA, ADSC)); + wADC = ADCW; + t = (wADC - ChipTempCalVal ) / 1.22; + return (t); + } +*/ +// get internal temperature by reading ADC channel 8 against 1.1V reference +double getChipTemp() { + uint16_t result = 0; + ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt + ADMUX = bit (REFS1) | bit (REFS0) | bit (MUX3); // set reference and mux + delay(10); // wait for voltages to settle + set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction + for (uint8_t i = 0; i < 32; i++) { // get 32 readings + sleep_mode(); // go to sleep while taking ADC sample + while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed + result += ADC; // add them up + } + bitClear (ADCSRA, ADEN); // disable ADC + result >>= 2; // devide by 4 + return ((result - 2594) / 9.76); // calculate internal temperature in degrees C +} + +// get input voltage in mV by reading 1.1V reference against AVcc +uint16_t getVCC() { + uint16_t result = 0; + ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt + // set Vcc measurement against 1.1V reference + ADMUX = bit (REFS0) | bit (MUX3) | bit (MUX2) | bit (MUX1); + delay(1); // wait for voltages to settle + set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction + for (uint8_t i = 0; i < 16; i++) { // get 16 readings + sleep_mode(); // go to sleep while taking ADC sample + while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed + result += ADC; // add them up + } + bitClear (ADCSRA, ADEN); // disable ADC + result >>= 4; // devide by 16 + return (1125300L / result); // 1125300 = 1.1 * 1023 * 1000 +} + + +// get supply voltage in mV +uint16_t getVIN() { + long result; + result = denoiseAnalog (VIN_PIN);{ + if (result < 540) return (result * Vcc / 184.416+86.987); + else if (result < 660) return (result * Vcc / 173.204-878.29); + else if (result < 745) return (result * Vcc / 143.579-4875); + else if (result < 781) return (result * Vcc / 119.109-10260); + else if (result < 800) return (result * Vcc / 86.178-23013); + else return (result * Vcc / 86.178-23113); +} // read supply voltage via voltage divider + //return (result * Vcc / 179.474); // 179.474 = 1023 * R13 / (R12 + R13) +} + +//ADC中断服务 +// ADC interrupt service routine +EMPTY_INTERRUPT (ADC_vect); // nothing to be done here + +//旋转编码器触发中断 +// Pin change interrupt service routine for rotary encoder +ISR (PCINT0_vect) { + uint8_t a = PINB & 1; + uint8_t b = PIND >> 7 & 1; + if (a != a0) { // A changed + a0 = a; + if (b != b0) { // B changed + b0 = b; + count = constrain(count + ((a == b) ? countStep : -countStep), countMin, countMax); + if (ROTARY_TYPE && ((a == b) != ab0)) { + count = constrain(count + ((a == b) ? countStep : -countStep), countMin, countMax);; + } + ab0 = (a == b); + handleMoved = true; + } + } +} + +//显示位图,并允许放大 代码片段改自arduboy2 +void drawSlowXYBitmapResize(int x, int y, const uint8_t *bitmap, uint8_t w, uint8_t h, uint8_t size, uint8_t color) { + // no need to draw at all of we're offscreen + /* + if (x + w < 0 || x > WIDTH - 1 || y + h < 0 || y > HEIGHT - 1) + return; + */ + int16_t xi, yi, byteWidth = (w + 7) / 8; + for (yi = 0; yi < h; yi ++) { + for (xi = 0; xi < w; xi ++) { + if (pgm_read_byte(bitmap + yi * byteWidth + xi / 8) & (128 >> (xi & 7))) { + //arduboy.drawPixel(x + xi, y + yi, color); + arduboy.fillRect(x + xi * size, y + yi * size, size, size, color); + } + } + } +} + +//设置看门狗模式-中断+复位 +void SetWDT() { + byte bb; + bb = 7 & 7; + bb |= (1 << WDCE); + + __asm__ __volatile__ ("wdr"); //看门狗复位 + MCUSR &= ~(1 << WDRF); //MUUSR中的WDRF清零,清除复位标志 + WDTCSR |= (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1 + //设置新的看门狗超时值bb + WDTCSR = bb; + WDTCSR |= _BV(WDIE); //设置中断模式 + WDTCSR |= _BV(WDE); //设置复位模式 +} + +/* + 8x8 dot Japanese font for Arduboy + + Copyright (c) 2016 emutyworks + + Released under the MIT license + https://github.com/emutyworks/8x8DotJPFont/blob/master/LICENSE.txt +*/ +#if LANG_JP_State +void drawText(uint8_t x, uint8_t y, const uint8_t *mes, uint8_t cnt) +{ + uint8_t pb; + uint8_t page; + uint8_t screen_start = 0; + uint8_t screen_end = 128; + + if (x < screen_start) { + x = screen_start; + } + + for (uint8_t i = 0; i < cnt; i++) { + pb = pgm_read_byte_near(mes + i); + + switch (pb) { + case MISAKI_FONT_F0_PAGE: + page = MISAKI_FONT_F0_PAGE; + continue; + case MISAKI_FONT_F1_PAGE: + page = MISAKI_FONT_F1_PAGE; + continue; + case MISAKI_FONT_F2_PAGE: + page = MISAKI_FONT_F2_PAGE; + continue; + } + + if (!page) { + continue; + } + + switch (page) { +#ifdef MISAKI_FONT_F0_H + case MISAKI_FONT_F0_PAGE: + if (pb > MISAKI_FONT_F0_SIZE) { + continue; + } + if ((x + 8) > screen_end) { + x = screen_start; + y = y + 8; + } + arduboy.drawBitmap(x, y, misaki_font_f0[ pb ], MISAKI_FONT_F0_W, 8, WHITE); + x = x + 8; + break; +#endif +#ifdef MISAKI_FONT_F1_H + case MISAKI_FONT_F1_PAGE: + if (pb > MISAKI_FONT_F1_SIZE) { + continue; + } + if ((x + 4) > screen_end) { + x = screen_start; + y = y + 8; + } + arduboy.drawBitmap(x, y, misaki_font_f1[ pb ], MISAKI_FONT_F1_W, 8, WHITE); + arduboy.drawBitmap(x + 3, y, misaki_font_0x00, 1, 8, WHITE); + x = x + 4; + break; +#endif +#ifdef MISAKI_FONT_F2_H + case MISAKI_FONT_F2_PAGE: + if (pb > MISAKI_FONT_F2_SIZE) { + continue; + } + if ((x + 8) > screen_end) { + x = screen_start; + y = y + 8; + } + arduboy.drawBitmap(x, y, misaki_font_f2[ pb ], MISAKI_FONT_F2_W, 8, WHITE); + arduboy.drawBitmap(x + 7, y, misaki_font_0x00, 1, 8, WHITE); + x = x + 8; + break; +#endif + } + } +} +#endif diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/arduino.json b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/arduino.json new file mode 100644 index 0000000..dee23d3 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/arduino.json @@ -0,0 +1,6 @@ +{ + "board": "arduino:avr:uno", + "programmer": "Arduino as ISP", + "port": "COM3", + "sketch": "1.8t6.ino" +} \ No newline at end of file diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/c_cpp_properties.json b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..42a0f21 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/c_cpp_properties.json @@ -0,0 +1,25 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "D:/Program Files (x86)/Arduino/libraries", + "D:/Program Files (x86)/Arduino/hardware/arduino/avr/**", + "D:/Program Files (x86)/Arduino/hardware/tools/avr/avr/include", + "D:/Program Files (x86)/Arduino/hardware/tools/avr/lib/gcc/avr/7.3.0/include", + "D:/Program Files (x86)/Arduino/hardware/tools/avr/lib/gcc/avr/7.3.0/include-fixed", + "D:/Program Files (x86)/Arduino/tools/**", + "D:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\**", + "D:\\Program Files (x86)\\Arduino\\tools\\**" + ], + "forcedInclude": [ + "D:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino\\Arduino.h" + ], + "intelliSenseMode": "msvc-x64", + "compilerPath": "D:\\mingw64\\bin\\gcc.exe", + "cStandard": "gnu17", + "cppStandard": "gnu++14" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/launch.json b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/launch.json new file mode 100644 index 0000000..f2c6fe4 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/launch.json @@ -0,0 +1,29 @@ +{ + // 使用 IntelliSense 了解相关属性。 + // 悬停以查看现有属性的描述。 + // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "g++.exe - 生成和调试活动文件", + "type": "cppdbg", + "request": "launch", + "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "miDebuggerPath": "D:\\mingw64\\bin\\gdb.exe", + "setupCommands": [ + { + "description": "为 gdb 启用整齐打印", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ], + "preLaunchTask": "C/C++: g++.exe build active file" + } + ] +} \ No newline at end of file diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/tasks.json b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/tasks.json new file mode 100644 index 0000000..abb1243 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/tasks.json @@ -0,0 +1,27 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: g++.exe build active file", + "command": "D:\\mingw64\\bin\\g++.exe", + "args": [ + "-g", + "${file}", + "-o", + "${fileDirname}\\${fileBasenameNoExtension}.exe" + ], + "options": { + "cwd": "D:\\mingw64\\bin" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "Generated task by Debugger" + } + ], + "version": "2.0.0" +} \ No newline at end of file diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/1.8t6.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/1.8t6.ino new file mode 100644 index 0000000..c0d2ca8 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/1.8t6.ino @@ -0,0 +1,328 @@ +/*License: http://creativecommons.org/licenses/by-sa/3.0/ + 采用CC3.0协议共享此程序 + 您可以自由地 + 共享 — 在任何媒介以任何形式复制、发行本作品 + 演绎 — 修改、翻译或以本作品为基础进行创作 + 在任何用途下,甚至商业目的。 + 本许可协议为“自由文化作品(Free Cultural Works)”所接受。 + 只要你遵守许可协议条款,许可人就无法收回你的这些权利。 + + Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) + This is a human-readable summary of (and not a substitute for) the license. Disclaimer. + You are free to: + Share — copy and redistribute the material in any medium or format + Adapt — remix, transform, and build upon the material + for any purpose, even commercially. + This license is acceptable for Free Cultural Works. + The licensor cannot revoke these freedoms as long as you follow the license terms. +*/ +// SolderingStation2 +// +// ATmega328-controlled Soldering Station for Hakko T12 Tips. +// 此v1.8t6版本功能简介 +// This 1.8t5 version of the code implements: +// - 烙铁头温度实时监测 +// - Temperature measurement of the tip +// - PID温度控制 +// - Direct or PID control of the heater +// - 可以通过编码器进行控制温度 +// - Temperature control via rotary encoder +// - 短按编码器进入短时升温模式 +// - Boost mode by short pressing rotary encoder switch +// - 长按编码器进入主菜单 +// - Setup menu by long pressing rotary encoder switch +// - 手柄震动检测(需要手柄含有震动传感器) +// - Handle movement detection (by checking ball switch) +// - 手柄连接检测(通过判断烙铁头温度是否能够被读取来实现) +// - Iron unconnected detection (by idenfying invalid temperature readings) +// - 定时器设定 - 随眠,关机时间 +// - Time driven sleep/power off mode if iron is unused (movement detection) +// - 可以测量主控芯片电压以及温度 +// - Measurement of input voltage, Vcc and ATmega's internal temperature +// - 在OLED上实现信息显示 +// - Information display on OLED +// - 支持无源蜂鸣器 +// - Buzzer +// - 允许设置不同烙铁头的温度校准值 +// - Calibrating and managing different soldering tips +// - 设置被保存在EEPROM,掉电不丢失 +// - Storing user settings into the EEPROM +// - 允许热插拔烙铁头,并弹出烙铁头配置选择菜单 +// - Tip change detection +// - 芯片过热以及低电压报警 +// - Chip overheating and low voltage alarm +// - 更好的实时温度条以及实时功率条 +// - Better real-time temperature bar and real-time power bar +// - 拥有过渡动画 +// - Have transition animation +// - 内置屏幕保护程序 +// - Built in screen saver +// - 屏幕翻转设置 +// - Screen flip settings +// - 内置英文、中文、日文语言包 +// - Built in English, Chinese and Japanese language pack +// - 开机密码设置 +// - System Password +// - 允许设置旋钮方向 +// - Knob direction setting menu +// - 内嵌看门狗,宕机自动重启 +// - Watchdog timer automatic reset the MCU + +// Power supply should be in the range of 16V/2A to 24V/3A and well +// stabilized. +// +// For calibration you need a soldering iron tips thermometer. For best results +// wait at least three minutes after switching on the soldering station before +// you start the calibration process. +// +// Controller: ATmega328p +// Core: Barebones ATmega (https://github.com/carlosefr/atmega) +// Clockspeed: 16 MHz external +// +// 2019/2020 by Stefan Wagner with great support from John Glavinos +// 2020-8 UI upgrade by LHW-createskyblue 、lihaoyun6 +// Project Page: https://easyeda.com/wagiminator + + +bool lastbutton; +#include //注意 这里使用被阉割的图形库,只有绘图功能,并非通用的版本 +Arduboy2 arduboy; + +#include +#include +#include +// Firmware version +#define VERSION "v1.8t6" + +// Type of rotary encoder +#define ROTARY_TYPE 1 // 0: 2 increments/step; 1: 4 increments/step + +// Pins +#define SENSOR_PIN A0 // temperature sense +#define VIN_PIN A1 // input voltage sense +#define BUZZER_PIN 5 // buzzer +#define BUTTON_PIN 6 // rotary encoder switch +#define ROTARY_1_PIN 7 // rotary encoder 1 +#define ROTARY_2_PIN 8 // rotary encoder 2 +#define CONTROL_PIN 9 // heater MOSFET PWM control +#define SWITCH_PIN 10 // handle vibration switch + +// Default temperature control values (recommended soldering temperature: 300-380°C) +#define TEMP_MIN 100 // min selectable temperature +#define TEMP_MAX 400 // max selectable temperature +#define TEMP_DEFAULT 320 // default start setpoint +#define TEMP_SLEEP 150 // temperature in sleep mode +#define TEMP_BOOST 60 // temperature increase in boost mode +#define TEMP_STEP 10 // rotary encoder temp change steps + +// Default tip temperature calibration values +#define TEMPCHP 30 // chip temperature while calibration +#define TIPMAX 2 // max number of tips +#define TIPNAMELENGTH 6 // max length of tip names (including termination) +#define TIPNAME "SZtip" // default tip name + + +// Default timer values (0 = disabled) +#define TIME2SLEEP 5 // time to enter sleep mode in minutes +#define TIME2OFF 15 // time to shut off heater in minutes +#define TIMEOFBOOST 40 // time to stay in boost mode in seconds + +// Control values +#define TIME2SETTLE 950 // time in microseconds to allow OpAmp output to settle +#define SMOOTHIE 0.05 // OpAmp output smooth factor (1=no smoothing; 0.05 default) +#define PID_ENABLE true // enable PID control +#define BEEP_ENABLE false // enable/disable buzzer +#define MAINSCREEN 1 // type of main screen (0: big numbers; 1: more infos) + +// EEPROM identifier +#define EEPROM_IDENT 0x140B // to identify if EEPROM was written by this program + +//Beep +#define SetBeepCoolTime 200 +unsigned long BeepCoolTime; + +// Define the aggressive and conservative PID tuning parameters +double aggKp = 11, aggKi = 0.5, aggKd = 1; +double consKp = 11, consKi = 3, consKd = 5; + +// Default values that can be changed by the user and stored in the EEPROM +uint16_t DefaultTemp = TEMP_DEFAULT; +uint16_t SleepTemp = TEMP_SLEEP; +uint8_t BoostTemp = TEMP_BOOST; +uint8_t Time2sleep = TIME2SLEEP; +uint8_t Time2off = TIME2OFF; +uint8_t TimeOfBoost = TIMEOFBOOST; +uint8_t MainScrType = MAINSCREEN; +bool PIDenable = PID_ENABLE; +bool BeepEnable = BEEP_ENABLE; + +//温度拟合 +#define TempP1 10.2675914764 +#define TempP2 1.7323191166 +#define TempP3 -0.0033245713 +#define TempP4 0.0000045338 +float PTemp[TIPMAX][4] = {TempP1, TempP2, TempP3, TempP4}; //温度拟合系数 +const uint16_t CalTemp[9] = {50,100,150,200,250,300,350,400,450}; +char TipName[TIPMAX][TIPNAMELENGTH] = {TIPNAME}; +uint8_t CurrentTip = 0; +uint8_t NumberOfTips = 1; + +// Variables for pin change interrupt +volatile uint8_t a0, b0, c0, d0; +volatile bool ab0; +volatile int Count, CountMin, CountMax, CountStep; +volatile bool handleMoved; + +// Variables for temperature control +uint16_t SetTemp, ShowTemp, gap, Step; +double Input, Output, Setpoint, RawTemp, CurrentTemp, ChipTemp; + +// Variables for voltage readings +uint16_t Vcc, Vin; + +// State variables +bool InSleepMode = false; +bool InOffMode = false; +bool InBoostMode = false; +bool InCalibMode = false; +bool IsWorky = true; +bool BeepIfWorky = true; +bool TipIsPresent = true; +bool FlipState = false; +// Timing variables +uint32_t Sleepmillis; +uint32_t Boostmillis; +uint32_t Buttonmillis; +uint8_t GoneMinutes; +uint8_t GoneSeconds; +uint8_t SensorCounter = 255; +//串口助手 +//int x, y, a, b; +//欠压报警 +byte UnderVoltage = 0; +// Control variables +uint16_t Time2settle = 300; + +//模拟数字滚轮 Numerical scrolling effect +int Value; +int LastValue[3]; +int SlidingAnimationY[3]; + +//开机密码 BootPassword +int Password = 0; + +//屏幕保护-主题:密集运算 +byte Line[4]; + +//编码器旋转调整方向设定 +bool RotaryD = false; + +//开机非线性动画 +byte BootAnimationY=64; + +// Specify the links and initial PID tuning parameters +PID ctrl(&Input, &Output, &Setpoint, aggKp, aggKi, aggKd, REVERSE); + +//NMOS - PMOS软件切换 +#define UsePMOS false + +//LANG 语言支持 +/* 0 - 中文 CHINESE + 1 - 英文 ENGLISH + 2 - 日语 x (此版本不支持) +*/ +byte LANG = 0; + + + +void setup() { + //设置看门狗自动复位 + set_wdt_mod(3, 7); + + //启动arduboy内核 + arduboy.begin(); + arduboy.setFrameRate(30); + + //Serial.begin(115200); + + // set the pin modes + //设置IO + pinMode(SENSOR_PIN, INPUT); + pinMode(VIN_PIN, INPUT); + pinMode(BUZZER_PIN, OUTPUT); + pinMode(CONTROL_PIN, OUTPUT); + pinMode(ROTARY_1_PIN, INPUT_PULLUP); + pinMode(ROTARY_2_PIN, INPUT_PULLUP); + pinMode(BUTTON_PIN, INPUT_PULLUP); + pinMode(SWITCH_PIN, INPUT_PULLUP); +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); // this shuts off the heater +#endif + digitalWrite(BUZZER_PIN, LOW); // must be LOW when buzzer not in use + + //初始化ADC + //setup ADC + ADCSRA |= bit (ADPS0) | bit (ADPS1) | bit (ADPS2); // set ADC prescaler to 128 + ADCSRA |= bit (ADIE); // enable ADC interrupt + interrupts (); // enable global interrupts + + //初始化编码器IO + // setup pin change interrupt for rotary encoder + PCMSK0 = bit (PCINT0); // Configure pin change interrupt on Pin8 + PCICR = bit (PCIE0); // Enable pin change interrupt + PCIFR = bit (PCIF0); // Clear interrupt flag + + //从EEPROM读取设置 + // get default values from EEPROM + getEEPROM(); + + //设置屏幕反转状态 + Flip(FlipState); + + //设置屏幕亮度 + SetOLEDLightLevel(32); //降低屏幕亮度 延长OLED使用寿命 + + //初始化屏幕保护动画 + for (byte a = 0; a < 4; a++) Line[a] = 32 * a; + + //密码保护 + BootPassword(); + // read supply voltages in mV + Vcc = getVCC(); Vin = getVIN(); + // read and set current iron temperature + SetTemp = DefaultTemp; + RawTemp = denoiseAnalog(SENSOR_PIN); + ChipTemp = getChipTemp(); + calculateTemp(); + // turn on heater if iron temperature is well below setpoint +#if UsePMOS + if ((CurrentTemp + 20) < DefaultTemp) analogWrite(CONTROL_PIN, 255); +#else + if ((CurrentTemp + 20) < DefaultTemp) analogWrite(CONTROL_PIN, 0); +#endif + // tell the PID to range between 0 and the full window size + ctrl.SetOutputLimits(0, 255); + // start PID + ctrl.SetMode(AUTOMATIC); + // set initial rotary encoder values + a0 = PINB & 1; b0 = PIND >> 7 & 1; ab0 = (a0 == b0); + setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, DefaultTemp); + // reset sleep timer + Sleepmillis = millis(); + + // long beep for setup completion + beep(); beep(); + ShowVersion(); +} + +void loop() { + //HelpMeSerialer(); + ROTARYCheck(); // check rotary encoder (temp/boost setting, enter setup menu) + SLEEPCheck(); // check and activate/deactivate sleep modes + SENSORCheck(); // reads temperature and vibration switch of the iron + Thermostat(0); // heater control + MainScreen(); // updates the main page on the OLED + //beep(0); +} diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/A-BitMap.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/A-BitMap.ino new file mode 100644 index 0000000..e968b8b --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/A-BitMap.ino @@ -0,0 +1,85 @@ + +//关于界面-项目页面二维码 ->为了加入欠压报警只能阉割掉关于页面的二维码 +//const unsigned char QRCode[] PROGMEM = { 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x1f, 0xfe, 0x3f, 0xc1, 0x8c, 0x0c, 0x7f, 0xf8, 0x1f, 0xfe, 0x3f, 0xc1, 0x8c, 0x0c, 0x7f, 0xf8, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x3e, 0x0f, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3e, 0x0f, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x1f, 0xfe, 0x3e, 0x30, 0x70, 0x0c, 0x7f, 0xf8, 0x1f, 0xfe, 0x3e, 0x30, 0x70, 0x0c, 0x7f, 0xf8, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x01, 0x83, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x01, 0x83, 0x8f, 0xff, 0xff, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0xf8, 0x00, 0x3e, 0x3e, 0x03, 0xf0, 0x7f, 0x00, 0xf8, 0x00, 0x3e, 0x3e, 0x03, 0xf0, 0x7f, 0x00, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0x18, 0xc0, 0x31, 0xfe, 0x0c, 0x0c, 0x1c, 0xe0, 0x18, 0xc0, 0x31, 0xfe, 0x0c, 0x0c, 0x1c, 0xe0, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0x1f, 0x00, 0x31, 0xcf, 0xf3, 0x8c, 0x03, 0x00, 0x1f, 0x00, 0x31, 0xcf, 0xf3, 0x8c, 0x03, 0x00, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x3e, 0x7c, 0x0f, 0xe0, 0x00, 0xff, 0xff, 0xf0, 0x3e, 0x7c, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x1f, 0xfe, 0x30, 0x01, 0x83, 0x8f, 0xe0, 0xff, 0x1f, 0xfe, 0x30, 0x01, 0x83, 0x8f, 0xe0, 0xff, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x3f, 0xff, 0x83, 0x83, 0xe3, 0x1f, 0x18, 0x06, 0x3f, 0xff, 0x83, 0x83, 0xe3, 0x1f, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x1f, 0xfe, 0x31, 0xfe, 0x00, 0x0c, 0x60, 0xe7, 0x1f, 0xfe, 0x31, 0xfe, 0x00, 0x0c, 0x60, 0xe7, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0 }; +const unsigned char QRCode[] PROGMEM = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0x86, 0x70, 0x80, 0x03, 0x80, 0x03, 0x86, 0x70, 0x80, 0x03, 0x9f, 0xf3, 0xe1, 0x30, 0x9f, 0xf3, 0x9f, 0xf3, 0xe1, 0x30, 0x9f, 0xf3, 0x98, 0x33, 0x01, 0xcc, 0x98, 0x33, 0x98, 0x33, 0x01, 0xcc, 0x98, 0x33, 0x98, 0x33, 0x87, 0xc0, 0x98, 0x33, 0x98, 0x33, 0xe1, 0xc0, 0x98, 0x33, 0x98, 0x33, 0xe1, 0xc0, 0x98, 0x33, 0x9f, 0xf3, 0x98, 0xc0, 0x9f, 0xf3, 0x9f, 0xf3, 0x98, 0xc0, 0x9f, 0xf3, 0x80, 0x03, 0x66, 0xcc, 0x80, 0x03, 0x80, 0x03, 0x66, 0xcc, 0x80, 0x03, 0xff, 0xff, 0x01, 0x0c, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x61, 0x30, 0x1f, 0x3f, 0x87, 0x3c, 0xe6, 0xfc, 0x87, 0x33, 0x87, 0x3c, 0xe6, 0xfc, 0x87, 0xf3, 0xf8, 0x03, 0x9e, 0x0f, 0x1f, 0x03, 0xf8, 0x03, 0x9e, 0x0f, 0x1f, 0x03, 0xe1, 0x3c, 0xfe, 0x0c, 0x07, 0xcf, 0xe1, 0x3c, 0xfe, 0x0c, 0x07, 0xcf, 0x99, 0x03, 0x3e, 0x30, 0x86, 0xc3, 0xe6, 0xcf, 0x38, 0x0f, 0x9e, 0xf3, 0xe6, 0xcf, 0x38, 0x0f, 0x9e, 0xf3, 0x9e, 0x03, 0x27, 0xcc, 0x81, 0x03, 0x9e, 0x03, 0x27, 0xcc, 0x81, 0x03, 0xe0, 0xff, 0xe1, 0x0c, 0xe6, 0xcf, 0xe0, 0xff, 0xe1, 0x0c, 0xe6, 0xcf, 0x98, 0x03, 0x06, 0x00, 0x00, 0xff, 0x98, 0x03, 0x06, 0x00, 0x00, 0xff, 0xff, 0xff, 0x1e, 0xf0, 0xf8, 0x03, 0x80, 0x03, 0x66, 0x30, 0x99, 0xc3, 0x80, 0x03, 0x66, 0x30, 0x99, 0xc3, 0x9f, 0xf3, 0x01, 0x0c, 0xf8, 0xff, 0x9f, 0xf3, 0x01, 0x0c, 0xf8, 0xff, 0x98, 0x33, 0x39, 0x3c, 0x01, 0xcf, 0x98, 0x33, 0x39, 0x3c, 0x01, 0xcf, 0x98, 0x33, 0xff, 0x0c, 0x79, 0x3f, 0x98, 0x33, 0x3e, 0xcc, 0xe0, 0xf3, 0x98, 0x33, 0x3e, 0xcc, 0xe0, 0xf3, 0x9f, 0xf3, 0x3e, 0x00, 0x98, 0xcf, 0x9f, 0xf3, 0x3e, 0x00, 0x98, 0xcf, 0x80, 0x03, 0x3e, 0x30, 0xe7, 0xc3, 0x80, 0x03, 0x3e, 0x30, 0xe7, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; +//ICO +//width:16,height:16 +const unsigned char Tag[] PROGMEM = { 0x00, 0x00, 0x3b, 0xec, 0x7b, 0xee, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0x66, 0x62, 0x26, 0x60, 0x06, 0x60, 0x06, 0x7f, 0xfe, 0x3f, 0xfc, 0x00, 0x00 }; +const unsigned char Chip[] PROGMEM = { 0x14, 0xa0, 0x3f, 0xf0, 0x7f, 0xf8, 0xe0, 0x1c, 0x6e, 0x18, 0xec, 0x1c, 0x68, 0x18, 0x60, 0x18, 0xe0, 0x1c, 0x60, 0x58, 0xe0, 0x1c, 0x7f, 0xf8, 0x3f, 0xf0, 0x14, 0xa0 }; +//const unsigned char HeatPipe[] PROGMEM = { 0x00, 0x00, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x01, 0x80, 0x00, 0x00 }; +const unsigned char Lightning[] PROGMEM = { 0x0f, 0xe0, 0x1f, 0xc0, 0x1f, 0xc0, 0x3f, 0x80, 0x3f, 0xf8, 0x7f, 0xf0, 0x7f, 0xe0, 0x07, 0xc0, 0x07, 0x80, 0x0f, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x18, 0x00, 0x10, 0x00 }; +//const unsigned char Thermometer[] PROGMEM = { 0x01, 0x80, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0 }; +const unsigned char Pointer[] PROGMEM = { 0x20, 0x20, 0x70, 0xf8 }; +//状态提示 +//width:14,height:14 图标库 + +const unsigned char c1[] PROGMEM = { 0x03, 0x00, 0x07, 0x80, 0x0f, 0xc0, 0x0c, 0xc0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xf0, 0x3c, 0xf0, 0x7f, 0xf8, 0x7f, 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0xff, 0xfc, 0x7f, 0xf8 }; +const unsigned char c2[] PROGMEM = { 0x7f, 0xf8, 0xff, 0xfc, 0xc0, 0x0c, 0xc3, 0x0c, 0xcb, 0x4c, 0xdb, 0x6c, 0xdb, 0x6c, 0xd8, 0x6c, 0xdc, 0xec, 0xcf, 0xcc, 0xc7, 0x8c, 0xc0, 0x0c, 0xff, 0xfc, 0x7f, 0xf8 }; +const unsigned char c3[] PROGMEM = { 0x00, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x18, 0xf8, 0x38, 0xf0, 0x30, 0x30, 0x70, 0x60, 0x70, 0x78, 0x78, 0xf8, 0x78, 0x00, 0x3c, 0x02, 0x3f, 0x0c, 0x1f, 0xf8, 0x0f, 0xf0, 0x03, 0xc0, 0x00, 0x00 }; +const unsigned char c5[] PROGMEM = { 0x7f, 0xf0, 0xff, 0xe0, 0xc0, 0x08, 0xc0, 0x1c, 0xc0, 0x38, 0xc8, 0x70, 0xdc, 0xe4, 0xcf, 0xcc, 0xc7, 0x8c, 0xc3, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xff, 0xfc, 0x7f, 0xf8 }; +const unsigned char c6[] PROGMEM = { 0x1e, 0x10, 0x33, 0x38, 0x2d, 0x7c, 0x25, 0x38, 0x2d, 0x38, 0x25, 0x38, 0x2d, 0x38, 0x6d, 0x80, 0xde, 0xc0, 0xbf, 0x40, 0xbf, 0x40, 0xde, 0xc0, 0x61, 0x80, 0x3f, 0x00 }; +const unsigned char c7[] PROGMEM = { 0x1f, 0xe0, 0x3f, 0xf0, 0x70, 0x38, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0xff, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xf8, 0x7c, 0xf8, 0x7c, 0xfc, 0xfc, 0x7f, 0xf8 }; +const unsigned char c_NO[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x37, 0xb0, 0x23, 0x10, 0x30, 0x30, 0x38, 0x70, 0x38, 0x70, 0x30, 0x30, 0x23, 0x10, 0x37, 0xb0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char *C_table[] = {c1, c2, c3, Lightning, c5, c6, c7}; + +//设置(语言是一种低像素的表达方式,容易造成隔阂; 交互界面设计尽可能形象化) +// width: 14, height: 14 +const unsigned char QRC[] PROGMEM = { 0x05, 0x80, 0x74, 0xb8, 0x57, 0xa8, 0x76, 0xb8, 0x05, 0x80, 0xf9, 0x7c, 0x46, 0x94, 0xaa, 0xa8, 0xf9, 0x7c, 0x06, 0x88, 0x74, 0xa8, 0x57, 0x8c, 0x75, 0x74, 0x06, 0x98 }; +const unsigned char Set0[] PROGMEM = { 0x88, 0x24, 0x08, 0x20, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x39, 0x30, 0x3b, 0xb0, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set1[] PROGMEM = { 0xf8, 0x7c, 0xf3, 0x3c, 0xf4, 0xbc, 0xf6, 0xbc, 0xf4, 0xbc, 0xf6, 0xbc, 0xf4, 0xbc, 0xe4, 0x9c, 0xc8, 0x4c, 0xd0, 0x2c, 0xd0, 0x2c, 0xc8, 0x4c, 0xe7, 0x9c, 0xf0, 0x3c }; +const unsigned char Set2[] PROGMEM = { 0x8f, 0xc4, 0x10, 0x20, 0x20, 0x10, 0x4c, 0xc8, 0x9f, 0xe4, 0x3d, 0xf0, 0x3d, 0xf0, 0x1d, 0xe0, 0x3e, 0xf0, 0x3f, 0x70, 0x9f, 0xe4, 0x8c, 0xc4, 0x00, 0x00, 0x30, 0x30 }; +const unsigned char Set3[] PROGMEM = { 0xc3, 0xfc, 0x18, 0x00, 0x18, 0x00, 0xc3, 0xfc, 0xff, 0xfc, 0xff, 0x0c, 0x00, 0x60, 0x00, 0x60, 0xff, 0x0c, 0xff, 0xfc, 0xf0, 0xfc, 0x06, 0x00, 0x06, 0x00, 0xf0, 0xfc }; +const unsigned char Set4[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set4F[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x38, 0x30, 0x33, 0x10, 0x3f, 0x90, 0x38, 0x10, 0x33, 0x90, 0x27, 0x90, 0x26, 0x10, 0x30, 0x90, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set4FF[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x24, 0x30, 0x21, 0x90, 0x27, 0x90, 0x27, 0x30, 0x20, 0x70, 0x27, 0xf0, 0x23, 0x30, 0x30, 0x70, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set5[] PROGMEM = { 0xfc, 0xfc, 0xf8, 0x7c, 0xe0, 0x1c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0x80, 0x04, 0x80, 0x04, 0xff, 0xfc, 0xf8, 0x7c, 0xfc, 0xfc }; +const unsigned char Set5_1[] PROGMEM = { 0xfc, 0xf4, 0xf8, 0x60, 0xe0, 0x44, 0xc0, 0x8c, 0xc1, 0x1c, 0xc2, 0x2c, 0xc4, 0x4c, 0xc8, 0x8c, 0xd1, 0x0c, 0xa2, 0x04, 0xc4, 0x04, 0x8f, 0xfc, 0x18, 0x7c, 0xbc, 0xfc }; +const unsigned char Set6[] PROGMEM = { 0xf8,0x7c,0xc0,0x0c,0xc0,0x0c,0xcf,0xcc,0xcf,0xcc,0xcf,0xcc,0xcf,0xcc,0xcf,0xcc,0xcf,0xcc,0xc8,0x4c,0xc8,0x4c,0xcf,0xcc,0xc0,0x0c,0xc0,0x0c }; +const unsigned char Set_LANG[] PROGMEM = { 0xf0, 0x3c, 0xce, 0x4c, 0xbc, 0x34, 0xb8, 0x14, 0x18, 0x80, 0x10, 0x80, 0x42, 0x30, 0x60, 0x78, 0x60, 0xf8, 0x44, 0xc0, 0x80, 0x04, 0xb8, 0x84, 0xcf, 0xcc, 0xf0, 0x3c }; +const unsigned char Set7[] PROGMEM = { 0x80, 0x0c, 0x00, 0x1c, 0x3f, 0xf4, 0x3f, 0xe0, 0x3f, 0xc4, 0x37, 0x8c, 0x23, 0x18, 0x30, 0x30, 0x38, 0x70, 0x3c, 0xf0, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set11[] PROGMEM = { 0xf3, 0xfc, 0xe7, 0xfc, 0xce, 0x0c, 0x8e, 0x1c, 0x9f, 0x9c, 0x1f, 0x3c, 0x1f, 0x0c, 0x0e, 0x0c, 0x0f, 0xfc, 0x87, 0xf8, 0x81, 0xe4, 0xc0, 0x0c, 0xe0, 0x1c, 0xf8, 0x7c }; +const unsigned char Set8[] PROGMEM = { 0x81, 0xdc, 0x55, 0x9c, 0x29, 0x04, 0x55, 0x00, 0x29, 0x90, 0x55, 0xd0, 0x03, 0xfc, 0xff, 0x00, 0x2e, 0x00, 0x26, 0x70, 0x02, 0x50, 0x82, 0x70, 0xe6, 0x00, 0xee, 0x04 }; +const unsigned char Set9[] PROGMEM = { 0xf0, 0x3c, 0xce, 0x0c, 0xbf, 0x04, 0xb3, 0x04, 0x73, 0x00, 0x7f, 0x00, 0x7e, 0x00, 0x7c, 0x00, 0x7c, 0x00, 0x7c, 0x60, 0xbc, 0x64, 0xbe, 0x04, 0xcf, 0x0c, 0xf0, 0x3c }; +const unsigned char Set10[] PROGMEM = { 0xf8, 0x7c, 0xf7, 0xbc, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0xbf, 0xf4, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xbf, 0xf4, 0xc0, 0x0c }; +const unsigned char Set13[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x34, 0xb0, 0x24, 0x90, 0x24, 0x90, 0x27, 0x90, 0x23, 0x10, 0x30, 0x30, 0x38, 0x70, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set12[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x20, 0x10, 0x20, 0x10, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set14[] PROGMEM = { 0xff, 0x7c, 0xfe, 0x7c, 0xfc, 0xec, 0xe8, 0xdc, 0xc8, 0x4c, 0x98, 0x4c, 0x88, 0x24, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x1c }; +const unsigned char Set15[] PROGMEM = { 0x15, 0x54, 0x3f, 0xfc, 0x15, 0x54, 0x3f, 0xfc, 0x15, 0x54, 0x3c, 0x04, 0x14, 0x04, 0x3c, 0xfc, 0x14, 0x54, 0x3c, 0xfc, 0x00, 0x54, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char Set16[] PROGMEM = { 0x15, 0x54, 0x3f, 0xf8, 0x15, 0x50, 0x3f, 0xf0, 0x15, 0x50, 0x38, 0x70, 0x10, 0x20, 0x31, 0x04, 0x13, 0x8c, 0x22, 0xa8, 0x17, 0xfc, 0x2a, 0xa8, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char Set17[] PROGMEM = { 0x80, 0x00, 0xbf, 0xf8, 0x1f, 0xf8, 0xb0, 0x08, 0x18, 0x08, 0xb9, 0xe8, 0x19, 0xb8, 0xb8, 0x38, 0x18, 0x38, 0xb9, 0xb8, 0xb9, 0xf8, 0xb0, 0xf8, 0xbf, 0xf8, 0x80, 0x00 }; +const unsigned char Set18[] PROGMEM = { 0x80, 0x00, 0xbf, 0xf8, 0x1f, 0xf8, 0xb0, 0x28, 0x1f, 0xf8, 0xb4, 0x08, 0x1f, 0xf8, 0xb1, 0x08, 0x1f, 0xf8, 0xb0, 0x48, 0xbf, 0xf8, 0xb2, 0x88, 0xbf, 0xf8, 0x80, 0x00 }; +const unsigned char Lang_CN[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x20, 0x10, 0x24, 0x90, 0x24, 0x90, 0x20, 0x10, 0x3c, 0xf0, 0x3c, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Lang_EN[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x38, 0x70, 0x30, 0x30, 0x23, 0x10, 0x27, 0x90, 0x20, 0x10, 0x20, 0x10, 0x27, 0x90, 0x27, 0x90, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Lang_JP[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3d, 0xf0, 0x20, 0x10, 0x3b, 0xf0, 0x3b, 0x70, 0x30, 0x30, 0x2b, 0x50, 0x2a, 0xd0, 0x31, 0xb0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Save[] PROGMEM = { 0x00, 0x04, 0x58, 0x08, 0x58, 0x08, 0x58, 0x08, 0x40, 0x08, 0x7f, 0xf8, 0x60, 0x18, 0x5f, 0xe8, 0x5b, 0x68, 0x5f, 0xe8, 0x5b, 0x68, 0x1c, 0xe8, 0x5f, 0xe8, 0x00, 0x00 }; +const unsigned char Lock[] PROGMEM = { 0xe0, 0x1c, 0xc0, 0x0c, 0x8f, 0xc4, 0x9f, 0xe4, 0x9f, 0xe4, 0x9f, 0xe4, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0x00, 0x80, 0x04 }; +const unsigned char Set19[] PROGMEM = { 0xf8, 0x7c, 0x80, 0x04, 0xbc, 0xf4, 0x3f, 0xf0, 0x38, 0x70, 0xb7, 0xb4, 0xb6, 0xb4, 0xb5, 0xb4, 0xb7, 0xb4, 0x38, 0x70, 0x3f, 0xf0, 0xbc, 0xf4, 0x80, 0x04, 0xf8, 0x7c }; +#if LANG_JP_State +const unsigned char *Ico_table[] = { + Set0, Set1, Set2, Set3, Set4, Set5, Set19, Set6, Lock, Set_LANG, QRC, Set7, + Set8, Set9, Set0, Set10, Set12, Save, + Set0, Set11, Set14, Save, + Set11, Set13, Set14, Save, + Set15, Set16, + Set17, Set18, //5 + Set5_1, Set5, + c_NO, Set7, + Lang_CN, Lang_EN, Lang_JP, //8 + Set4, Set4F, Save, +}; +#else +const unsigned char *Ico_table[] = { + Set0, Set1, Set2, Set3, Set4, Set5, Set19, Set6, Lock, Set_LANG, QRC, Set7, + Set8, Set9, Set0, Set10, Set12, Save, + Set0, Set11, Set14, Save, + Set11, Set13, Set14, Save, + Set15, Set16, + Set17, Set18, //5 + Set5_1, Set5, + c_NO, Set7, + Lang_CN, Lang_EN,c_NO, //8 + Set4, Set4F, Save, +}; +#endif +const byte Menu_table[] = {12, 6, 4, 4, 2, 2, 2, 2, 3, 3}; //菜单 标签 温控 定时 控制方式 首页 蜂鸣器 标签删除确认界面 语言菜单 翻转 显示 +byte MenuLevel = 0; //菜单层级 diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/B-Lang.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/B-Lang.ino new file mode 100644 index 0000000..02734b8 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/B-Lang.ino @@ -0,0 +1,824 @@ +#define LANG_JP_State false +/*//////////////////////////////////////////////////////////////////////////////////////////////////// + 多语言支持 + Multilingual support + /////////////////////////////////////////////////////////////////////////////////////////////////// +*/ +/* + 英语库 ENGLISH +*/ +const char EN_0[] PROGMEM = "Tip"; +const char EN_1[] PROGMEM = "Temp"; +const char EN_2[] PROGMEM = "Timer"; +const char EN_3[] PROGMEM = "Control"; +const char EN_4[] PROGMEM = "Screen"; +const char EN_5[] PROGMEM = "Buzzer"; +const char EN_6[] PROGMEM = "LOW Vol"; +const char EN_7[] PROGMEM = "Lang"; +const char EN_8[] PROGMEM = "Return"; +const char EN_9[] PROGMEM = "Change"; +const char EN_10[] PROGMEM = "Calibrate"; +const char EN_11[] PROGMEM = "Rename"; +const char EN_12[] PROGMEM = "Delete"; +const char EN_13[] PROGMEM = "Add"; +const char EN_14[] PROGMEM = "Save"; +const char EN_15[] PROGMEM = "Default"; +const char EN_16[] PROGMEM = "Sleep"; +const char EN_17[] PROGMEM = "Boost"; +const char EN_18[] PROGMEM = "Save"; +const char EN_19[] PROGMEM = "Sleep"; +const char EN_20[] PROGMEM = "Off"; +const char EN_21[] PROGMEM = "Boost"; +const char EN_22[] PROGMEM = "Save"; +const char EN_23[] PROGMEM = "Direct"; +const char EN_24[] PROGMEM = "PID"; +const char EN_25[] PROGMEM = "Big"; +const char EN_26[] PROGMEM = "Infos"; +const char EN_27[] PROGMEM = "OFF"; +const char EN_28[] PROGMEM = "ON"; +const char EN_29[] PROGMEM = "NO"; +const char EN_30[] PROGMEM = "YES"; +const char EN_31[] PROGMEM = "CN"; +const char EN_32[] PROGMEM = "EN"; +const char EN_33[] PROGMEM = "NO"; +const char EN_34[] PROGMEM = "OK"; +const char EN_35[] PROGMEM = "Main Screen"; +const char EN_36[] PROGMEM = "Flip"; +const char EN_37[] PROGMEM = "Save"; +const char EN_38[] PROGMEM = "About"; +const char EN_39[] PROGMEM = "JP"; +const char EN_40[] PROGMEM = "Lock"; +const char EN_41[] PROGMEM = "Rotary"; + +const char *const EN_table[] PROGMEM = {EN_0, EN_1, EN_2, EN_3, EN_4, EN_5, EN_41, EN_6, EN_40, EN_7, EN_38, EN_8, EN_9, EN_10, EN_11, EN_12, EN_13, EN_14, EN_15, EN_16, EN_17, EN_18, EN_19, EN_20, EN_21, EN_22, EN_23, EN_24, EN_25, EN_26, EN_27, EN_28, EN_29, EN_30, EN_31, EN_32, EN_39, EN_35, EN_36, EN_37,}; + +/* + #!/usr/bin/python + # -*- coding: UTF-8 -*- + for num in range(0,38): + print("EN_",end="") + print(num,end='') + print(",",end="") +*/ + +/*//////////////////////////////////////////////////////////////////////////////////////////////////// + 多语言支持 + Multilingual support + /////////////////////////////////////////////////////////////////////////////////////////////////// +*/ + +/* + 中文语言库 CHINESE + + //////////////////////////////////////////////////////////////////////////////////////////////////////// + 本地化提示:你可以按照位图的大小,把这里的文字位图替换成你的语言,确保位图分辨率一致即可,我们欢迎你把程序翻译为你当地的语言! + Localization tips: you can according to the size of the bitmap, + replace the text bitmap here with your language, + ensure that the bitmap resolution is consistent, + we welcome you to translate the program into your local language! + //////////////////////////////////////////////////////////////////////////////////////////////////////// +*/ +//width:28,height:14 主界面中文提示 +//Main Screen +//错误-ERROR +const unsigned char S1[] PROGMEM = { 0x20, 0x92, 0x1f, 0xc0, 0x3d, 0xf9, 0x90, 0x40, 0x20, 0x90, 0x90, 0x40, 0x40, 0x90, 0x1f, 0xc0, 0x7b, 0xff, 0x00, 0x00, 0xa0, 0x01, 0x3f, 0xe0, 0x21, 0xf9, 0x02, 0x00, 0xfd, 0x09, 0x02, 0x00, 0x21, 0x09, 0x7f, 0xf0, 0x21, 0xf9, 0x05, 0x00, 0x21, 0x09, 0x45, 0x00, 0x29, 0x09, 0x88, 0x80, 0x31, 0xf9, 0x10, 0x70, 0x21, 0x08, 0x20, 0x20 }; +//关机-OFF +const unsigned char S2[] PROGMEM = { 0x10, 0x40, 0x47, 0xc0, 0x17, 0xfc, 0x44, 0x40, 0x20, 0x03, 0xf4, 0x40, 0x23, 0xf8, 0x44, 0x40, 0x62, 0x08, 0xc4, 0x40, 0xa3, 0xf8, 0xe4, 0x40, 0x20, 0x01, 0x54, 0x40, 0x2f, 0xfd, 0x44, 0x40, 0x28, 0x06, 0x44, 0x40, 0x23, 0xf8, 0x44, 0x40, 0x20, 0x40, 0x44, 0x50, 0x20, 0x40, 0x48, 0x50, 0x21, 0x40, 0x50, 0x30, 0x20, 0x80, 0x40, 0x00 }; +//休眠-SLEEP +const unsigned char S3[] PROGMEM = { 0x10, 0x83, 0xdf, 0xc0, 0x10, 0x82, 0x50, 0x40, 0x20, 0x82, 0x50, 0x40, 0x2f, 0xff, 0xdf, 0xc0, 0x60, 0x82, 0x52, 0x00, 0x61, 0xc2, 0x52, 0x00, 0xa1, 0xc2, 0x5f, 0xe0, 0x22, 0xa3, 0xd2, 0x00, 0x22, 0xa2, 0x51, 0x00, 0x24, 0x92, 0x51, 0x00, 0x28, 0x8e, 0x50, 0x90, 0x30, 0x8b, 0xd4, 0x50, 0x20, 0x82, 0x58, 0x30, 0x20, 0x80, 0x10, 0x10 }; +//提温-BOOST +const unsigned char S4[] PROGMEM = { 0x23, 0xf2, 0x1f, 0xc0, 0x22, 0x11, 0x10, 0x40, 0xfb, 0xf0, 0x90, 0x40, 0x22, 0x12, 0x1f, 0xc0, 0x2a, 0x11, 0x10, 0x40, 0x33, 0xf1, 0x10, 0x40, 0x60, 0x00, 0x5f, 0xc0, 0xaf, 0xfc, 0x80, 0x00, 0x20, 0x41, 0x3f, 0xe0, 0x22, 0x43, 0x25, 0x20, 0x22, 0x79, 0x25, 0x20, 0x22, 0x41, 0x25, 0x20, 0xa5, 0x41, 0x25, 0x20, 0x48, 0xfd, 0x7f, 0xf0 }; +//正常工作-WORKY +const unsigned char S5[] PROGMEM = { 0x7f, 0xf8, 0x48, 0x80, 0x02, 0x00, 0x49, 0x00, 0x02, 0x01, 0xff, 0xf0, 0x02, 0x01, 0x00, 0x10, 0x02, 0x02, 0x7f, 0x20, 0x22, 0x00, 0x41, 0x00, 0x23, 0xf0, 0x7f, 0x00, 0x22, 0x00, 0x08, 0x00, 0x22, 0x00, 0xff, 0x80, 0x22, 0x00, 0x88, 0x80, 0x22, 0x00, 0x88, 0x80, 0x22, 0x00, 0x8a, 0x80, 0x22, 0x00, 0x89, 0x00, 0xff, 0xfc, 0x08, 0x00 }; +//加热-HEAT +const unsigned char S6[] PROGMEM = { 0x0f, 0x42, 0x1f, 0xc0, 0x78, 0x41, 0x10, 0x40, 0x08, 0x40, 0x90, 0x40, 0x08, 0x42, 0x1f, 0xc0, 0x08, 0x41, 0x10, 0x40, 0xff, 0xfd, 0x10, 0x40, 0x08, 0x40, 0x5f, 0xc0, 0x08, 0x40, 0x80, 0x00, 0x08, 0x41, 0x3f, 0xe0, 0x08, 0x43, 0x25, 0x20, 0x10, 0x41, 0x25, 0x20, 0x10, 0x41, 0x25, 0x20, 0x20, 0x41, 0x25, 0x20, 0x40, 0x41, 0x7f, 0xf0 }; +//维持-HOLD +const unsigned char S7[] PROGMEM = { 0x11, 0x40, 0x82, 0x00, 0x21, 0x20, 0x8f, 0xe0, 0x23, 0xfc, 0x82, 0x00, 0x4a, 0x23, 0xe2, 0x00, 0xfe, 0x20, 0x9f, 0xf0, 0x13, 0xf8, 0x80, 0x80, 0x22, 0x20, 0xc0, 0x80, 0x42, 0x21, 0xbf, 0xf0, 0xfb, 0xfa, 0x88, 0x80, 0x02, 0x20, 0x84, 0x80, 0x02, 0x20, 0x84, 0x80, 0x1a, 0x20, 0x80, 0x80, 0xe3, 0xfe, 0x82, 0x80, 0x02, 0x01, 0x01, 0x00 }; +const unsigned char *S_table[] = {S1, S2, S3, S4, S5, S6, S7}; + +// 菜单 width:36,height:16 +//MENU Oj +/* + The order here(↓) can refer to EN_table(↑↑↑) +*/ +const unsigned char t0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x7f, 0x90, 0xf8, 0x00, 0x01, 0x08, 0x08, 0x88, 0x00, 0x0a, 0x10, 0x08, 0x88, 0x00, 0x04, 0x7f, 0x01, 0x07, 0x00, 0x1f, 0xc1, 0x3a, 0x00, 0x00, 0x05, 0x49, 0x09, 0xfc, 0x00, 0x04, 0x49, 0x08, 0x84, 0x00, 0x04, 0x49, 0x08, 0x88, 0x00, 0x04, 0x49, 0x08, 0x48, 0x00, 0x04, 0x49, 0x08, 0x50, 0x00, 0x04, 0x49, 0x0a, 0x20, 0x00, 0x04, 0x16, 0x0c, 0x58, 0x00, 0x14, 0x21, 0x89, 0x87, 0x00, 0x08, 0xc0, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfe, 0x08, 0x20, 0x00, 0x08, 0x82, 0x0b, 0xff, 0x00, 0x04, 0x82, 0x0a, 0x01, 0x00, 0x10, 0xfe, 0x3c, 0x51, 0x00, 0x08, 0x82, 0x08, 0x88, 0x00, 0x08, 0x82, 0x09, 0x04, 0x00, 0x02, 0xfe, 0x0c, 0x00, 0x00, 0x04, 0x00, 0x19, 0xfc, 0x00, 0x09, 0xff, 0x28, 0x20, 0x00, 0x19, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x2b, 0xff, 0x00, 0x0b, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x20, 0x3e, 0x04, 0x00, 0x1f, 0xff, 0xa2, 0x04, 0x00, 0x10, 0x00, 0xa2, 0xff, 0x00, 0x00, 0x01, 0x22, 0x04, 0x00, 0x0f, 0xfe, 0x22, 0x04, 0x00, 0x00, 0x40, 0x3e, 0x44, 0x00, 0x00, 0x40, 0x22, 0x24, 0x00, 0x04, 0x40, 0x22, 0x24, 0x00, 0x04, 0x7c, 0x22, 0x04, 0x00, 0x04, 0x40, 0x22, 0x04, 0x00, 0x0a, 0x40, 0x3e, 0x04, 0x00, 0x09, 0x40, 0x22, 0x24, 0x00, 0x10, 0xff, 0x80, 0x14, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00 }; +const unsigned char t3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x10, 0x12, 0x02, 0x00, 0x05, 0xff, 0x9f, 0xd2, 0x00, 0x05, 0x00, 0x92, 0x12, 0x00, 0x1e, 0x28, 0xa2, 0x12, 0x00, 0x04, 0x44, 0x3f, 0xf2, 0x00, 0x04, 0x82, 0x02, 0x12, 0x00, 0x06, 0x00, 0x02, 0x12, 0x00, 0x0c, 0xfe, 0x1f, 0xd2, 0x00, 0x14, 0x10, 0x12, 0x52, 0x00, 0x04, 0x10, 0x12, 0x42, 0x00, 0x04, 0x10, 0x13, 0x42, 0x00, 0x04, 0x10, 0x12, 0x82, 0x00, 0x15, 0xff, 0x82, 0x0a, 0x00, 0x08, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x0f, 0xf8, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x04, 0x02, 0x3f, 0xfe, 0x00, 0x04, 0x02, 0x00, 0x80, 0x00, 0x07, 0xfe, 0x00, 0x80, 0x00, 0x00, 0x90, 0x04, 0x90, 0x00, 0x08, 0x91, 0x0c, 0x88, 0x00, 0x06, 0x93, 0x10, 0x86, 0x00, 0x02, 0x94, 0x20, 0x82, 0x00, 0x00, 0x90, 0x00, 0x80, 0x00, 0x00, 0x90, 0x02, 0x80, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t5[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x1f, 0xff, 0x9f, 0xfc, 0x00, 0x00, 0x40, 0x04, 0x10, 0x00, 0x0f, 0xff, 0x02, 0x20, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x08, 0x42, 0x0f, 0xf8, 0x00, 0x08, 0x42, 0x08, 0x08, 0x00, 0x0f, 0xfe, 0x08, 0x08, 0x00, 0x08, 0x02, 0x0f, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x08, 0x00, 0x08, 0x00, 0x08, 0x08, 0x00, 0x08, 0x00, 0x0f, 0xf8, 0x00, 0x10, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t6[] PROGMEM = { 0x09, 0xff, 0x00, 0x40, 0x00, 0x04, 0x20, 0x3f, 0xff, 0x00, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x1c, 0x42, 0x0f, 0xfc, 0x00, 0x04, 0x42, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x04, 0x00, 0x0f, 0xfc, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x04, 0x81, 0x00, 0x00, 0x00, 0x05, 0x81, 0x0f, 0xfc, 0x00, 0x06, 0x81, 0x08, 0x04, 0x00, 0x04, 0xff, 0x08, 0x04, 0x00, 0x00, 0x81, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t7[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xfe, 0x00, 0x01, 0x00, 0x08, 0x20, 0x00, 0x03, 0xff, 0x08, 0x20, 0x00, 0x02, 0x01, 0x08, 0x20, 0x00, 0x04, 0x22, 0x08, 0x20, 0x00, 0x08, 0x20, 0x0b, 0xfe, 0x00, 0x10, 0x20, 0x08, 0x20, 0x00, 0x00, 0x50, 0x08, 0x28, 0x00, 0x00, 0x50, 0x08, 0x24, 0x00, 0x00, 0x88, 0x08, 0x22, 0x00, 0x00, 0x88, 0x10, 0x20, 0x00, 0x01, 0x04, 0x10, 0x20, 0x00, 0x02, 0x03, 0xa7, 0xff, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char Back[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x00, 0x08, 0xf8, 0x3f, 0xfe, 0x00, 0x04, 0x80, 0x20, 0x02, 0x00, 0x00, 0x80, 0x20, 0x02, 0x00, 0x00, 0xbe, 0x23, 0xe2, 0x00, 0x1c, 0x82, 0x22, 0x22, 0x00, 0x04, 0xa4, 0x22, 0x22, 0x00, 0x04, 0x94, 0x22, 0x22, 0x00, 0x04, 0x88, 0x22, 0x22, 0x00, 0x04, 0x94, 0x23, 0xe2, 0x00, 0x05, 0x22, 0x20, 0x02, 0x00, 0x05, 0x42, 0x20, 0x02, 0x00, 0x0a, 0x00, 0x3f, 0xfe, 0x00, 0x11, 0xff, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t1_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x20, 0x90, 0x00, 0x02, 0x7f, 0x98, 0x90, 0x00, 0x1f, 0x80, 0x09, 0xff, 0x00, 0x02, 0x22, 0x01, 0x10, 0x00, 0x06, 0x21, 0x8b, 0x10, 0x00, 0x07, 0x62, 0x8d, 0xfe, 0x00, 0x0a, 0xa2, 0x09, 0x10, 0x00, 0x0a, 0x14, 0x11, 0x10, 0x00, 0x12, 0x14, 0x31, 0xfe, 0x00, 0x02, 0x08, 0x11, 0x10, 0x00, 0x02, 0x14, 0x11, 0x10, 0x00, 0x02, 0x22, 0x11, 0x10, 0x00, 0x02, 0x43, 0x91, 0xff, 0x00, 0x02, 0x81, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t1_2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x80, 0x00, 0x00, 0x50, 0x01, 0xfc, 0x00, 0x00, 0x88, 0x01, 0x04, 0x00, 0x01, 0x04, 0x03, 0x08, 0x00, 0x06, 0xfb, 0x04, 0x90, 0x00, 0x08, 0x00, 0xc0, 0x60, 0x00, 0x07, 0xdf, 0x01, 0x80, 0x00, 0x04, 0x51, 0x06, 0x00, 0x00, 0x04, 0x51, 0x1b, 0xfe, 0x00, 0x04, 0x51, 0x02, 0x02, 0x00, 0x07, 0xd9, 0x02, 0x02, 0x00, 0x04, 0x56, 0x02, 0x02, 0x00, 0x00, 0x10, 0x03, 0xfe, 0x00, 0x00, 0x10, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t1_3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x78, 0xbc, 0x20, 0x00, 0x09, 0x48, 0xa4, 0x50, 0x00, 0x09, 0x4a, 0xa8, 0x50, 0x00, 0x09, 0x4a, 0xa8, 0x88, 0x00, 0x09, 0x4a, 0xb1, 0x04, 0x00, 0x1f, 0xfe, 0xaa, 0xfb, 0x00, 0x09, 0x4a, 0xa4, 0x20, 0x00, 0x09, 0x4a, 0xa4, 0x20, 0x00, 0x09, 0x4a, 0xa7, 0xfe, 0x00, 0x09, 0x4a, 0xb4, 0x20, 0x00, 0x09, 0x48, 0xa9, 0x24, 0x00, 0x0b, 0x48, 0xa2, 0x22, 0x00, 0x08, 0x8a, 0xa4, 0xa2, 0x00, 0x11, 0x19, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t1_4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x10, 0x00, 0x1f, 0xdc, 0x3e, 0xfe, 0x00, 0x08, 0x90, 0x02, 0x12, 0x00, 0x05, 0x10, 0x04, 0xff, 0x00, 0x1f, 0xdf, 0x84, 0x12, 0x00, 0x02, 0x12, 0x0c, 0xfe, 0x00, 0x1f, 0xd2, 0x02, 0x10, 0x00, 0x02, 0x12, 0x22, 0xfe, 0x00, 0x0a, 0x92, 0x14, 0x10, 0x00, 0x0a, 0x52, 0x14, 0x10, 0x00, 0x12, 0x22, 0x0d, 0xff, 0x00, 0x02, 0x22, 0x08, 0x10, 0x00, 0x0a, 0x42, 0x14, 0x10, 0x00, 0x04, 0x02, 0x23, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//默认 +const unsigned char t2_0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc8, 0x10, 0x20, 0x00, 0x12, 0x4a, 0x0c, 0x20, 0x00, 0x1a, 0xc9, 0x04, 0x20, 0x00, 0x17, 0x48, 0x00, 0x20, 0x00, 0x1f, 0xff, 0xb8, 0x20, 0x00, 0x02, 0x08, 0x08, 0x50, 0x00, 0x1f, 0xc8, 0x08, 0x50, 0x00, 0x02, 0x08, 0x08, 0x50, 0x00, 0x03, 0xc8, 0x08, 0x48, 0x00, 0x1e, 0x14, 0x08, 0x88, 0x00, 0x01, 0x54, 0x0a, 0x88, 0x00, 0x15, 0x22, 0x0c, 0x84, 0x00, 0x14, 0x43, 0x89, 0x07, 0x00, 0x00, 0x81, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//休眠 +const unsigned char t2_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x3d, 0xfc, 0x00, 0x02, 0x10, 0x25, 0x04, 0x00, 0x04, 0x10, 0x25, 0x04, 0x00, 0x05, 0xff, 0xbd, 0xfc, 0x00, 0x0c, 0x10, 0x25, 0x20, 0x00, 0x0c, 0x38, 0x25, 0x20, 0x00, 0x14, 0x38, 0x25, 0xfe, 0x00, 0x04, 0x54, 0x3d, 0x20, 0x00, 0x04, 0x54, 0x25, 0x10, 0x00, 0x04, 0x92, 0x25, 0x10, 0x00, 0x05, 0x11, 0xa5, 0x09, 0x00, 0x06, 0x11, 0x3d, 0x45, 0x00, 0x04, 0x10, 0x25, 0x83, 0x00, 0x04, 0x10, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//提温 +const unsigned char t2_2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x21, 0xfc, 0x00, 0x04, 0x42, 0x11, 0x04, 0x00, 0x1f, 0x7e, 0x09, 0x04, 0x00, 0x04, 0x42, 0x21, 0xfc, 0x00, 0x05, 0x42, 0x11, 0x04, 0x00, 0x06, 0x7e, 0x11, 0x04, 0x00, 0x0c, 0x00, 0x05, 0xfc, 0x00, 0x15, 0xff, 0x88, 0x00, 0x00, 0x04, 0x08, 0x13, 0xfe, 0x00, 0x04, 0x48, 0x32, 0x52, 0x00, 0x04, 0x4f, 0x12, 0x52, 0x00, 0x04, 0x48, 0x12, 0x52, 0x00, 0x14, 0xa8, 0x12, 0x52, 0x00, 0x09, 0x1f, 0x97, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//关机 +const unsigned char t3_1[] PROGMEM = { 0x01, 0x04, 0x04, 0x7c, 0x00, 0x00, 0x88, 0x04, 0x44, 0x00, 0x0f, 0xff, 0x3f, 0x44, 0x00, 0x00, 0x20, 0x04, 0x44, 0x00, 0x00, 0x20, 0x0c, 0x44, 0x00, 0x00, 0x20, 0x0e, 0x44, 0x00, 0x1f, 0xff, 0x95, 0x44, 0x00, 0x00, 0x20, 0x14, 0x44, 0x00, 0x00, 0x50, 0x24, 0x44, 0x00, 0x00, 0x50, 0x04, 0x44, 0x00, 0x00, 0x88, 0x04, 0x45, 0x00, 0x01, 0x04, 0x04, 0x85, 0x00, 0x06, 0x03, 0x85, 0x03, 0x00, 0x18, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t_4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x20, 0x00, 0x0f, 0xff, 0x09, 0xfc, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x20, 0x3e, 0x88, 0x00, 0x03, 0xfe, 0x08, 0x50, 0x00, 0x02, 0x02, 0x0b, 0xfe, 0x00, 0x03, 0xfe, 0x0c, 0x40, 0x00, 0x02, 0x02, 0x18, 0x40, 0x00, 0x03, 0xfe, 0x2b, 0xfe, 0x00, 0x02, 0x02, 0x08, 0x48, 0x00, 0x03, 0xfe, 0x08, 0x88, 0x00, 0x02, 0x02, 0x08, 0x50, 0x00, 0x02, 0x02, 0x28, 0x30, 0x00, 0x1f, 0xff, 0x91, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_PID[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc3, 0xf1, 0xe0, 0x00, 0x0f, 0xe3, 0xf1, 0xf8, 0x00, 0x0c, 0x70, 0xc1, 0x9e, 0x00, 0x0c, 0x30, 0xc1, 0x86, 0x00, 0x0c, 0x30, 0xc1, 0x83, 0x00, 0x0c, 0x30, 0xc1, 0x83, 0x00, 0x0c, 0x60, 0xc1, 0x83, 0x00, 0x0c, 0x60, 0xc1, 0x83, 0x00, 0x0f, 0xc0, 0xc1, 0x83, 0x00, 0x0f, 0xc0, 0xc1, 0x86, 0x00, 0x0c, 0x00, 0xc1, 0x86, 0x00, 0x0c, 0x00, 0xc1, 0x98, 0x00, 0x0c, 0x03, 0xf1, 0xf8, 0x00, 0x0c, 0x03, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t5_0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0x88, 0x40, 0x00, 0x0a, 0x24, 0x10, 0x40, 0x00, 0x11, 0x42, 0x10, 0xfe, 0x00, 0x04, 0x00, 0x22, 0x82, 0x00, 0x02, 0xff, 0x3d, 0x02, 0x00, 0x08, 0x01, 0x0a, 0x42, 0x00, 0x09, 0xf9, 0x10, 0x32, 0x00, 0x09, 0x09, 0x20, 0x12, 0x00, 0x09, 0xf9, 0x3e, 0x02, 0x00, 0x09, 0x09, 0x00, 0x02, 0x00, 0x09, 0x09, 0x0e, 0x02, 0x00, 0x09, 0xf9, 0x30, 0x22, 0x00, 0x08, 0x05, 0x00, 0x14, 0x00, 0x08, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t5_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x44, 0x10, 0xfe, 0x00, 0x04, 0x28, 0x10, 0x92, 0x00, 0x05, 0xff, 0x22, 0x92, 0x00, 0x00, 0x10, 0x3c, 0x92, 0x00, 0x00, 0x10, 0x08, 0x92, 0x00, 0x1c, 0xfe, 0x10, 0x92, 0x00, 0x04, 0x10, 0x20, 0xfe, 0x00, 0x04, 0x10, 0x3e, 0x92, 0x00, 0x05, 0xff, 0x80, 0x92, 0x00, 0x04, 0x10, 0x00, 0x92, 0x00, 0x05, 0x10, 0x0e, 0x92, 0x00, 0x06, 0x10, 0x30, 0x92, 0x00, 0x04, 0x10, 0x00, 0xfe, 0x00, 0x00, 0x10, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t5_3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x3f, 0xfe, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x07, 0xfe, 0x0f, 0xf8, 0x00, 0x04, 0x02, 0x08, 0x08, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x07, 0xfe, 0x08, 0x88, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x07, 0xfe, 0x08, 0x88, 0x00, 0x04, 0x02, 0x09, 0x48, 0x00, 0x04, 0x02, 0x02, 0x30, 0x00, 0x07, 0xfe, 0x04, 0x0c, 0x00, 0x04, 0x02, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t_off[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x04, 0xff, 0x00, 0x00, 0x44, 0x02, 0x01, 0x00, 0x07, 0xff, 0x90, 0x21, 0x00, 0x00, 0x10, 0x10, 0x21, 0x00, 0x00, 0x10, 0x17, 0xfd, 0x00, 0x00, 0x10, 0x10, 0x21, 0x00, 0x0f, 0xff, 0xd0, 0x61, 0x00, 0x00, 0x10, 0x10, 0xa1, 0x00, 0x00, 0x28, 0x11, 0x21, 0x00, 0x00, 0x28, 0x12, 0x21, 0x00, 0x00, 0x44, 0x14, 0x21, 0x00, 0x00, 0x82, 0x10, 0xa1, 0x00, 0x03, 0x01, 0xd0, 0x45, 0x00, 0x0c, 0x00, 0x90, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_on[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x20, 0x00, 0x00, 0x84, 0x07, 0xff, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x0f, 0xff, 0xc7, 0xff, 0x00, 0x00, 0x84, 0x04, 0x00, 0x00, 0x00, 0x84, 0x04, 0x00, 0x00, 0x00, 0x84, 0x05, 0xff, 0x00, 0x00, 0x84, 0x05, 0x01, 0x00, 0x01, 0x04, 0x09, 0x01, 0x00, 0x01, 0x04, 0x09, 0x01, 0x00, 0x02, 0x04, 0x11, 0xff, 0x00, 0x04, 0x04, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t_NO[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x04, 0x91, 0x00, 0x04, 0x40, 0x02, 0x52, 0x00, 0x04, 0x7f, 0x90, 0x54, 0x00, 0x04, 0x50, 0x88, 0xff, 0x00, 0x07, 0xd0, 0x84, 0x81, 0x00, 0x04, 0x51, 0x00, 0x81, 0x00, 0x04, 0x49, 0x01, 0xff, 0x00, 0x07, 0xca, 0x02, 0x81, 0x00, 0x04, 0x44, 0x04, 0x81, 0x00, 0x04, 0x4a, 0x1c, 0xff, 0x00, 0x07, 0xea, 0x04, 0x81, 0x00, 0x0c, 0x51, 0x04, 0x81, 0x00, 0x00, 0x61, 0xc4, 0x85, 0x00, 0x00, 0x40, 0x80, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_OK[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xdf, 0x10, 0x20, 0x00, 0x02, 0x12, 0x0c, 0x20, 0x00, 0x02, 0x24, 0x04, 0x20, 0x00, 0x04, 0x7f, 0x80, 0x20, 0x00, 0x04, 0x24, 0xb8, 0x20, 0x00, 0x0f, 0xa4, 0x88, 0x50, 0x00, 0x14, 0xbf, 0x88, 0x50, 0x00, 0x04, 0xa4, 0x88, 0x50, 0x00, 0x04, 0xa4, 0x88, 0x48, 0x00, 0x04, 0xbf, 0x88, 0x88, 0x00, 0x04, 0xa4, 0x8a, 0x88, 0x00, 0x07, 0xa4, 0x8c, 0x84, 0x00, 0x04, 0x44, 0x89, 0x07, 0x00, 0x00, 0x81, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t_CN_CN[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x0f, 0xff, 0x3f, 0xff, 0x00, 0x08, 0x41, 0x04, 0x08, 0x00, 0x08, 0x41, 0x04, 0x08, 0x00, 0x08, 0x41, 0x04, 0x10, 0x00, 0x08, 0x41, 0x02, 0x10, 0x00, 0x0f, 0xff, 0x02, 0x20, 0x00, 0x08, 0x41, 0x01, 0x20, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00, 0x40, 0x01, 0x30, 0x00, 0x00, 0x40, 0x02, 0x08, 0x00, 0x00, 0x40, 0x0c, 0x07, 0x00, 0x00, 0x40, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_CN_EN[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x80, 0x00, 0x1f, 0xff, 0x80, 0x80, 0x00, 0x01, 0x10, 0x3f, 0xff, 0x00, 0x00, 0x40, 0x04, 0x08, 0x00, 0x07, 0xfc, 0x04, 0x08, 0x00, 0x04, 0x44, 0x04, 0x10, 0x00, 0x04, 0x44, 0x02, 0x10, 0x00, 0x04, 0x44, 0x02, 0x20, 0x00, 0x1f, 0xff, 0x81, 0x20, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00, 0xa0, 0x01, 0x30, 0x00, 0x01, 0x10, 0x02, 0x08, 0x00, 0x06, 0x0c, 0x0c, 0x07, 0x00, 0x18, 0x03, 0xb0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_CN_JP[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x13, 0xfe, 0x00, 0x04, 0x02, 0x08, 0x40, 0x00, 0x04, 0x02, 0x08, 0x40, 0x00, 0x04, 0x02, 0x01, 0xfc, 0x00, 0x04, 0x02, 0x38, 0x84, 0x00, 0x04, 0x02, 0x08, 0x84, 0x00, 0x07, 0xfe, 0x0f, 0xff, 0x00, 0x04, 0x02, 0x08, 0x00, 0x00, 0x04, 0x02, 0x09, 0xfe, 0x00, 0x04, 0x02, 0x09, 0x02, 0x00, 0x04, 0x02, 0x0b, 0x02, 0x00, 0x04, 0x02, 0x0d, 0x02, 0x00, 0x07, 0xfe, 0x09, 0xfe, 0x00, 0x04, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +//翻转 +const unsigned char t4f[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x1d, 0xc2, 0x08, 0x00, 0x05, 0x44, 0x42, 0x08, 0x00, 0x03, 0x84, 0x5f, 0xbf, 0x00, 0x0f, 0xe4, 0x44, 0x10, 0x00, 0x01, 0x15, 0x45, 0x10, 0x00, 0x05, 0x4c, 0xc9, 0x7f, 0x80, 0x09, 0x24, 0x4f, 0x90, 0x00, 0x07, 0xc4, 0xc1, 0x10, 0x00, 0x05, 0x4d, 0x41, 0x3f, 0x00, 0x05, 0x54, 0x43, 0x81, 0x00, 0x07, 0xc4, 0x4d, 0x02, 0x00, 0x05, 0x44, 0x41, 0x14, 0x00, 0x05, 0x55, 0x41, 0x08, 0x00, 0x07, 0xc8, 0x81, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//保存 +const unsigned char t_save[] PROGMEM = { 0x02, 0xfe, 0x01, 0x00, 0x00, 0x02, 0x82, 0x3f, 0xff, 0x00, 0x04, 0x82, 0x02, 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x0c, 0x10, 0x04, 0xfc, 0x00, 0x14, 0x10, 0x04, 0x08, 0x00, 0x05, 0xff, 0x8c, 0x10, 0x00, 0x04, 0x10, 0x14, 0x10, 0x00, 0x04, 0x38, 0x25, 0xff, 0x00, 0x04, 0x34, 0x04, 0x10, 0x00, 0x04, 0x52, 0x04, 0x10, 0x00, 0x04, 0x91, 0x84, 0x10, 0x00, 0x05, 0x10, 0x04, 0x50, 0x00, 0x04, 0x10, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char tAbout[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x0f, 0xfe, 0x00, 0x00, 0x44, 0x00, 0x40, 0x00, 0x07, 0xff, 0x80, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x10, 0x1f, 0xff, 0x80, 0x0f, 0xff, 0xc0, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x28, 0x00, 0x40, 0x00, 0x00, 0x28, 0x00, 0x40, 0x00, 0x00, 0x44, 0x00, 0x40, 0x00, 0x00, 0x82, 0x00, 0x40, 0x00, 0x03, 0x01, 0xc1, 0x40, 0x00, 0x0c, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char tPassword[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1f, 0x7e, 0x00, 0x1f, 0xff, 0x84, 0x02, 0x00, 0x10, 0x80, 0x84, 0x42, 0x00, 0x0a, 0x4a, 0x04, 0x42, 0x00, 0x0a, 0x31, 0x08, 0x42, 0x00, 0x12, 0xc5, 0x0f, 0x42, 0x00, 0x03, 0x04, 0x19, 0x7f, 0x00, 0x1d, 0xf8, 0x29, 0x01, 0x00, 0x00, 0x40, 0x09, 0x01, 0x00, 0x08, 0x42, 0x09, 0xfd, 0x00, 0x08, 0x42, 0x09, 0x01, 0x00, 0x08, 0x42, 0x0f, 0x01, 0x00, 0x0f, 0xfe, 0x09, 0x05, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t19[] PROGMEM = { 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x1f, 0x88, 0xfe, 0x00, 0x1f, 0xd0, 0x0e, 0x22, 0x00, 0x04, 0x20, 0x30, 0x22, 0x00, 0x04, 0x5f, 0x80, 0x22, 0x00, 0x07, 0x84, 0x9e, 0x22, 0x00, 0x04, 0x85, 0x08, 0x22, 0x00, 0x04, 0x94, 0x08, 0x22, 0x00, 0x04, 0x94, 0x28, 0xfe, 0x00, 0x04, 0x97, 0x1e, 0x42, 0x00, 0x04, 0x94, 0x08, 0x42, 0x00, 0x08, 0x94, 0x08, 0x42, 0x00, 0x0a, 0xac, 0x0a, 0x42, 0x00, 0x11, 0x44, 0x0c, 0x42, 0x00, 0x00, 0x83, 0x89, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char *CN_table[] = { + t0, t1, t2, t3, t4, t5, t19 , t7, tPassword, t6, tAbout, Back, //0 + t0, t1_1, t1_2, t1_3, t1_4, t_save, //1 + t2_0, t2_1, t2_2, t_save, //2 + t2_1, t3_1, t2_2, t_save,//3 + t_4, t_PID,//4 + t5_0, t5_1,//5 + t_off, t_on,//6 + t_NO, t_OK,//7 + t_CN_CN, t_CN_EN, t_CN_JP, //8 + t5_3, t4f, t_save, //9 +}; + +/* + 日语 Japanese +*/ +/* + 8x8 dot Japanese font for Arduboy + + Copyright (c) 2016 emutyworks + + Released under the MIT license + https://github.com/emutyworks/8x8DotJPFont/blob/master/LICENSE.txt +*/ + + +/* + 利用しないフォントデータはヘッダファイルを読み込まないようにするとメモリが節約できます、 + drawText() 実行時にフォントが無い場合は処理がスキップされます。 + + 例) 8x8 dot ひらがな・カタカナ・記号 のみ利用 + #include "misaki_font_f0.h" // 8x8 dot ひらがな・カタカナ・記号 + //#include "misaki_font_f1.h" // 4x8 dot 英語・カタカナ・記号 + //#include "misaki_font_f2.h" // 8x8 dot 漢字 +*/ + +#if LANG_JP_State +#define MISAKI_FONT_H + +#define MISAKI_FONT_F0_PAGE 0xF0 +#define MISAKI_FONT_F1_PAGE 0xF1 +#define MISAKI_FONT_F2_PAGE 0xF2 + +#define MISAKI_FONT_F0_W 8 +#define MISAKI_FONT_F1_W 3 +#define MISAKI_FONT_F2_W 7 + +#define MISAKI_FONT_F0_SIZE 0xEF +#define MISAKI_FONT_F1_SIZE 0x9D +#define MISAKI_FONT_F2_SIZE 0x22 // misaki_font_f2.h の最終行の値をここに設定する、最大0xEFまで +PROGMEM const uint8_t misaki_font_0x00[1] = { 0x00 }; +#define MISAKI_FONT_F0_H +PROGMEM const uint8_t misaki_font_f0[ MISAKI_FONT_F0_SIZE + 1 ][ MISAKI_FONT_F0_W ] = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x00   */ + { 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x01 、 */ + { 0x20, 0x50, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x02 。 */ + { 0x50, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x03 , */ + { 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x04 . */ + { 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }, /* 0x05 ・ */ + { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00 }, /* 0x06 : */ + { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00, 0x00, 0x00 }, /* 0x07 ; */ + { 0x00, 0x02, 0x01, 0x51, 0x09, 0x09, 0x06, 0x00 }, /* 0x08 ? */ + { 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00 }, /* 0x09 ! */ + { 0x00, 0x00, 0x00, 0x00, 0x7f, 0x41, 0x41, 0x00 }, /* 0x0A [ */ + { 0x41, 0x41, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x0B ] */ + { 0x00, 0x00, 0x00, 0x3f, 0x01, 0x01, 0x01, 0x00 }, /* 0x0C 「 */ + { 0x40, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00 }, /* 0x0D 」 */ + { 0x00, 0x00, 0x3f, 0x21, 0x3d, 0x05, 0x07, 0x00 }, /* 0x0E 『 */ + { 0x70, 0x50, 0x5e, 0x42, 0x7e, 0x00, 0x00, 0x00 }, /* 0x0F 』 */ + { 0x00, 0x00, 0x00, 0x00, 0x7f, 0x63, 0x41, 0x00 }, /* 0x10 【 */ + { 0x41, 0x63, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x11 】 */ + { 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00 }, /* 0x12 + */ + { 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0x13 - */ + { 0x44, 0x44, 0x44, 0x5f, 0x44, 0x44, 0x44, 0x00 }, /* 0x14 ± */ + { 0x41, 0x22, 0x14, 0x08, 0x14, 0x22, 0x41, 0x00 }, /* 0x15 × */ + { 0x08, 0x08, 0x08, 0x2a, 0x08, 0x08, 0x08, 0x00 }, /* 0x16 ÷ */ + { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00 }, /* 0x17 = */ + { 0x14, 0x34, 0x14, 0x1c, 0x14, 0x16, 0x14, 0x00 }, /* 0x18 ≠ */ + { 0x08, 0x08, 0x14, 0x14, 0x14, 0x22, 0x22, 0x00 }, /* 0x19 < */ + { 0x22, 0x22, 0x14, 0x14, 0x14, 0x08, 0x08, 0x00 }, /* 0x1A > */ + { 0x02, 0x05, 0x02, 0x3c, 0x42, 0x42, 0x24, 0x00 }, /* 0x1B ℃ */ + { 0x00, 0x2b, 0x2c, 0x78, 0x2c, 0x2b, 0x00, 0x00 }, /* 0x1C ¥ */ + { 0x00, 0x24, 0x2a, 0x7a, 0x2f, 0x2a, 0x12, 0x00 }, /* 0x1D $ */ + { 0x00, 0x1c, 0x62, 0x32, 0x2e, 0x23, 0x14, 0x00 }, /* 0x1E ¢ */ + { 0x20, 0x54, 0x5e, 0x25, 0x41, 0x42, 0x20, 0x00 }, /* 0x1F £ */ + { 0x42, 0x25, 0x12, 0x08, 0x24, 0x52, 0x21, 0x00 }, /* 0x20 % */ + { 0x20, 0x62, 0x3e, 0x63, 0x3e, 0x23, 0x02, 0x00 }, /* 0x21 # */ + { 0x20, 0x56, 0x49, 0x55, 0x22, 0x58, 0x40, 0x00 }, /* 0x22 & */ + { 0x00, 0x22, 0x14, 0x7f, 0x14, 0x22, 0x00, 0x00 }, /* 0x23 * */ + { 0x1c, 0x22, 0x59, 0x55, 0x4d, 0x12, 0x0c, 0x00 }, /* 0x24 @ */ + { 0x00, 0x00, 0x4a, 0x55, 0x55, 0x29, 0x00, 0x00 }, /* 0x25 § */ + { 0x04, 0x64, 0x3c, 0x17, 0x3c, 0x64, 0x04, 0x00 }, /* 0x26 ☆ */ + { 0x04, 0x64, 0x3c, 0x1f, 0x3c, 0x64, 0x04, 0x00 }, /* 0x27 ★ */ + { 0x1c, 0x22, 0x41, 0x41, 0x41, 0x22, 0x1c, 0x00 }, /* 0x28 ○ */ + { 0x1c, 0x3e, 0x7f, 0x7f, 0x7f, 0x3e, 0x1c, 0x00 }, /* 0x29 ● */ + { 0x1c, 0x22, 0x5d, 0x55, 0x5d, 0x22, 0x1c, 0x00 }, /* 0x2A ◎ */ + { 0x08, 0x14, 0x22, 0x41, 0x22, 0x14, 0x08, 0x00 }, /* 0x2B ◇ */ + { 0x08, 0x1c, 0x3e, 0x7f, 0x3e, 0x1c, 0x08, 0x00 }, /* 0x2C ◆ */ + { 0x7f, 0x41, 0x41, 0x41, 0x41, 0x41, 0x7f, 0x00 }, /* 0x2D □ */ + { 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00 }, /* 0x2E ■ */ + { 0x40, 0x70, 0x4c, 0x43, 0x4c, 0x70, 0x40, 0x00 }, /* 0x2F △ */ + { 0x40, 0x70, 0x7c, 0x7f, 0x7c, 0x70, 0x40, 0x00 }, /* 0x30 ▲ */ + { 0x01, 0x07, 0x19, 0x61, 0x19, 0x07, 0x01, 0x00 }, /* 0x31 ▽ */ + { 0x01, 0x07, 0x1f, 0x7f, 0x1f, 0x07, 0x01, 0x00 }, /* 0x32 ▼ */ + { 0x49, 0x22, 0x14, 0x49, 0x14, 0x22, 0x49, 0x00 }, /* 0x33 ※ */ + { 0x05, 0x05, 0x05, 0x7d, 0x05, 0x05, 0x05, 0x00 }, /* 0x34 〒 */ + { 0x08, 0x08, 0x08, 0x08, 0x2a, 0x1c, 0x08, 0x00 }, /* 0x35 → */ + { 0x08, 0x1c, 0x2a, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0x36 ← */ + { 0x00, 0x04, 0x02, 0x7f, 0x02, 0x04, 0x00, 0x00 }, /* 0x37 ↑ */ + { 0x00, 0x10, 0x20, 0x7f, 0x20, 0x10, 0x00, 0x00 }, /* 0x38 ↓ */ + { 0x00, 0x3e, 0x41, 0x41, 0x41, 0x41, 0x3e, 0x00 }, /* 0x39 0 */ + { 0x00, 0x00, 0x42, 0x7f, 0x40, 0x00, 0x00, 0x00 }, /* 0x3A 1 */ + { 0x00, 0x62, 0x51, 0x51, 0x49, 0x49, 0x46, 0x00 }, /* 0x3B 2 */ + { 0x00, 0x22, 0x41, 0x49, 0x49, 0x49, 0x36, 0x00 }, /* 0x3C 3 */ + { 0x00, 0x30, 0x28, 0x24, 0x22, 0x7f, 0x20, 0x00 }, /* 0x3D 4 */ + { 0x00, 0x2f, 0x45, 0x45, 0x45, 0x45, 0x39, 0x00 }, /* 0x3E 5 */ + { 0x00, 0x3e, 0x49, 0x49, 0x49, 0x49, 0x32, 0x00 }, /* 0x3F 6 */ + { 0x00, 0x01, 0x01, 0x61, 0x19, 0x05, 0x03, 0x00 }, /* 0x40 7 */ + { 0x00, 0x36, 0x49, 0x49, 0x49, 0x49, 0x36, 0x00 }, /* 0x41 8 */ + { 0x00, 0x26, 0x49, 0x49, 0x49, 0x49, 0x3e, 0x00 }, /* 0x42 9 */ + { 0x00, 0x20, 0x54, 0x7e, 0x34, 0x14, 0x60, 0x00 }, /* 0x43 ぁ */ + { 0x20, 0x52, 0x7f, 0x2a, 0x1a, 0x4a, 0x30, 0x00 }, /* 0x44 あ */ + { 0x00, 0x3c, 0x40, 0x20, 0x04, 0x18, 0x00, 0x00 }, /* 0x45 ぃ */ + { 0x1e, 0x20, 0x40, 0x20, 0x02, 0x04, 0x18, 0x00 }, /* 0x46 い */ + { 0x00, 0x10, 0x4a, 0x4a, 0x2a, 0x10, 0x00, 0x00 }, /* 0x47 ぅ */ + { 0x00, 0x08, 0x45, 0x45, 0x45, 0x25, 0x18, 0x00 }, /* 0x48 う */ + { 0x00, 0x48, 0x2a, 0x3a, 0x4a, 0x40, 0x00, 0x00 }, /* 0x49 ぇ */ + { 0x00, 0x44, 0x25, 0x15, 0x3d, 0x45, 0x40, 0x00 }, /* 0x4A え */ + { 0x00, 0x24, 0x7e, 0x14, 0x50, 0x24, 0x00, 0x00 }, /* 0x4B ぉ */ + { 0x22, 0x52, 0x7f, 0x0a, 0x48, 0x4a, 0x34, 0x00 }, /* 0x4C お */ + { 0x44, 0x34, 0x4f, 0x44, 0x38, 0x04, 0x18, 0x00 }, /* 0x4D か */ + { 0x44, 0x34, 0x4f, 0x44, 0x39, 0x04, 0x19, 0x00 }, /* 0x4E が */ + { 0x00, 0x2a, 0x5a, 0x4b, 0x4e, 0x5a, 0x08, 0x00 }, /* 0x4F き */ + { 0x00, 0x2a, 0x5a, 0x4b, 0x4e, 0x5b, 0x08, 0x00 }, /* 0x50 ぎ */ + { 0x00, 0x08, 0x14, 0x14, 0x22, 0x41, 0x00, 0x00 }, /* 0x51 く */ + { 0x00, 0x08, 0x14, 0x14, 0x22, 0x45, 0x04, 0x00 }, /* 0x52 ぐ */ + { 0x3f, 0x00, 0x04, 0x44, 0x3f, 0x04, 0x04, 0x00 }, /* 0x53 け */ + { 0x3f, 0x00, 0x04, 0x44, 0x3f, 0x04, 0x05, 0x00 }, /* 0x54 げ */ + { 0x00, 0x20, 0x52, 0x42, 0x42, 0x42, 0x40, 0x00 }, /* 0x55 こ */ + { 0x00, 0x20, 0x52, 0x42, 0x43, 0x42, 0x41, 0x00 }, /* 0x56 ご */ + { 0x00, 0x24, 0x54, 0x44, 0x47, 0x5c, 0x04, 0x00 }, /* 0x57 さ */ + { 0x00, 0x24, 0x54, 0x44, 0x47, 0x5c, 0x05, 0x00 }, /* 0x58 ざ */ + { 0x00, 0x00, 0x3f, 0x40, 0x40, 0x40, 0x20, 0x00 }, /* 0x59 し */ + { 0x00, 0x00, 0x3f, 0x40, 0x41, 0x40, 0x21, 0x00 }, /* 0x5A じ */ + { 0x02, 0x02, 0x0a, 0x56, 0x3f, 0x02, 0x02, 0x00 }, /* 0x5B す */ + { 0x02, 0x02, 0x0a, 0x56, 0x3f, 0x02, 0x03, 0x00 }, /* 0x5C ず */ + { 0x04, 0x04, 0x3f, 0x44, 0x54, 0x5f, 0x44, 0x00 }, /* 0x5D せ */ + { 0x04, 0x04, 0x3f, 0x44, 0x54, 0x5f, 0x45, 0x00 }, /* 0x5E ぜ */ + { 0x00, 0x08, 0x09, 0x3d, 0x4b, 0x49, 0x08, 0x00 }, /* 0x5F そ */ + { 0x00, 0x08, 0x09, 0x3d, 0x4b, 0x49, 0x0a, 0x00 }, /* 0x60 ぞ */ + { 0x42, 0x3a, 0x07, 0x22, 0x54, 0x44, 0x44, 0x00 }, /* 0x61 た */ + { 0x42, 0x3a, 0x07, 0x22, 0x55, 0x44, 0x45, 0x00 }, /* 0x62 だ */ + { 0x00, 0x02, 0x12, 0x4e, 0x4b, 0x4a, 0x32, 0x00 }, /* 0x63 ち */ + { 0x00, 0x02, 0x12, 0x4e, 0x4b, 0x4a, 0x33, 0x00 }, /* 0x64 ぢ */ + { 0x00, 0x10, 0x10, 0x48, 0x48, 0x30, 0x00, 0x00 }, /* 0x65 っ */ + { 0x04, 0x04, 0x02, 0x22, 0x22, 0x22, 0x1c, 0x00 }, /* 0x66 つ */ + { 0x04, 0x04, 0x02, 0x22, 0x23, 0x22, 0x1d, 0x00 }, /* 0x67 づ */ + { 0x00, 0x02, 0x02, 0x1a, 0x25, 0x43, 0x41, 0x00 }, /* 0x68 て */ + { 0x00, 0x02, 0x02, 0x1a, 0x25, 0x43, 0x45, 0x00 }, /* 0x69 で */ + { 0x00, 0x20, 0x57, 0x48, 0x48, 0x44, 0x44, 0x00 }, /* 0x6A と */ + { 0x00, 0x20, 0x57, 0x48, 0x49, 0x44, 0x45, 0x00 }, /* 0x6B ど */ + { 0x12, 0x0a, 0x27, 0x52, 0x50, 0x3a, 0x24, 0x00 }, /* 0x6C な */ + { 0x7f, 0x00, 0x20, 0x52, 0x42, 0x42, 0x40, 0x00 }, /* 0x6D に */ + { 0x30, 0x4e, 0x38, 0x54, 0x0f, 0x64, 0x78, 0x00 }, /* 0x6E ぬ */ + { 0x24, 0x14, 0x7f, 0x04, 0x22, 0x52, 0x3c, 0x00 }, /* 0x6F ね */ + { 0x18, 0x24, 0x12, 0x4e, 0x42, 0x24, 0x18, 0x00 }, /* 0x70 の */ + { 0x7f, 0x00, 0x24, 0x54, 0x54, 0x3f, 0x44, 0x00 }, /* 0x71 は */ + { 0x7f, 0x00, 0x24, 0x54, 0x54, 0x3f, 0x45, 0x00 }, /* 0x72 ば */ + { 0x7f, 0x00, 0x24, 0x54, 0x56, 0x3d, 0x46, 0x00 }, /* 0x73 ぱ */ + { 0x02, 0x3a, 0x47, 0x40, 0x41, 0x3e, 0x04, 0x00 }, /* 0x74 ひ */ + { 0x02, 0x3a, 0x47, 0x40, 0x41, 0x3e, 0x05, 0x00 }, /* 0x75 び */ + { 0x02, 0x3a, 0x47, 0x40, 0x43, 0x3d, 0x06, 0x00 }, /* 0x76 ぴ */ + { 0x40, 0x30, 0x40, 0x4d, 0x32, 0x10, 0x60, 0x00 }, /* 0x77 ふ */ + { 0x40, 0x30, 0x40, 0x4d, 0x32, 0x11, 0x61, 0x00 }, /* 0x78 ぶ */ + { 0x40, 0x30, 0x40, 0x4d, 0x32, 0x15, 0x62, 0x00 }, /* 0x79 ぷ */ + { 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x00 }, /* 0x7A へ */ + { 0x08, 0x04, 0x02, 0x04, 0x09, 0x10, 0x11, 0x00 }, /* 0x7B べ */ + { 0x08, 0x04, 0x02, 0x04, 0x0a, 0x15, 0x12, 0x00 }, /* 0x7C ぺ */ + { 0x7f, 0x00, 0x6a, 0x6a, 0x7e, 0x2a, 0x4a, 0x00 }, /* 0x7D ほ */ + { 0x7f, 0x00, 0x6a, 0x6a, 0x7f, 0x2a, 0x4b, 0x00 }, /* 0x7E ぼ */ + { 0x7f, 0x00, 0x6a, 0x6a, 0x7e, 0x2d, 0x4a, 0x00 }, /* 0x7F ぽ */ + { 0x00, 0x6a, 0x6a, 0x6a, 0x7f, 0x2a, 0x4a, 0x00 }, /* 0x80 ま */ + { 0x30, 0x29, 0x1d, 0x4b, 0x48, 0x3c, 0x10, 0x00 }, /* 0x81 み */ + { 0x12, 0x2a, 0x7f, 0x42, 0x40, 0x42, 0x24, 0x00 }, /* 0x82 む */ + { 0x30, 0x4e, 0x38, 0x54, 0x0f, 0x44, 0x38, 0x00 }, /* 0x83 め */ + { 0x00, 0x0a, 0x3e, 0x4b, 0x4a, 0x4a, 0x30, 0x00 }, /* 0x84 も */ + { 0x00, 0x08, 0x0e, 0x38, 0x46, 0x14, 0x08, 0x00 }, /* 0x85 ゃ */ + { 0x04, 0x07, 0x1c, 0x62, 0x03, 0x0a, 0x04, 0x00 }, /* 0x86 や */ + { 0x00, 0x1c, 0x48, 0x3e, 0x24, 0x18, 0x00, 0x00 }, /* 0x87 ゅ */ + { 0x1e, 0x04, 0x52, 0x3f, 0x12, 0x12, 0x0c, 0x00 }, /* 0x88 ゆ */ + { 0x00, 0x20, 0x50, 0x50, 0x3e, 0x48, 0x00, 0x00 }, /* 0x89 ょ */ + { 0x00, 0x20, 0x50, 0x50, 0x3f, 0x24, 0x44, 0x00 }, /* 0x8A よ */ + { 0x00, 0x1c, 0x51, 0x49, 0x4a, 0x48, 0x30, 0x00 }, /* 0x8B ら */ + { 0x00, 0x0f, 0x42, 0x41, 0x21, 0x1e, 0x00, 0x00 }, /* 0x8C り */ + { 0x00, 0x10, 0x69, 0x6d, 0x4b, 0x49, 0x30, 0x00 }, /* 0x8D る */ + { 0x24, 0x14, 0x7f, 0x04, 0x02, 0x3e, 0x40, 0x00 }, /* 0x8E れ */ + { 0x00, 0x10, 0x49, 0x4d, 0x4b, 0x49, 0x30, 0x00 }, /* 0x8F ろ */ + { 0x00, 0x28, 0x18, 0x7e, 0x08, 0x44, 0x38, 0x00 }, /* 0x90 ゎ */ + { 0x24, 0x14, 0x7f, 0x04, 0x42, 0x42, 0x3c, 0x00 }, /* 0x91 わ */ + { 0x30, 0x49, 0x25, 0x1f, 0x24, 0x54, 0x38, 0x00 }, /* 0x92 ゐ */ + { 0x40, 0x28, 0x25, 0x57, 0x35, 0x28, 0x40, 0x00 }, /* 0x93 ゑ */ + { 0x10, 0x0a, 0x2e, 0x5b, 0x72, 0x4a, 0x48, 0x00 }, /* 0x94 を */ + { 0x40, 0x30, 0x0c, 0x33, 0x40, 0x40, 0x20, 0x00 }, /* 0x95 ん */ + { 0x00, 0x04, 0x44, 0x3c, 0x14, 0x0c, 0x00, 0x00 }, /* 0x96 ァ */ + { 0x00, 0x01, 0x41, 0x3d, 0x09, 0x05, 0x03, 0x00 }, /* 0x97 ア */ + { 0x00, 0x20, 0x20, 0x10, 0x78, 0x04, 0x00, 0x00 }, /* 0x98 ィ */ + { 0x00, 0x10, 0x10, 0x08, 0x7c, 0x02, 0x01, 0x00 }, /* 0x99 イ */ + { 0x00, 0x18, 0x48, 0x4c, 0x28, 0x18, 0x00, 0x00 }, /* 0x9A ゥ */ + { 0x00, 0x06, 0x42, 0x43, 0x22, 0x12, 0x0e, 0x00 }, /* 0x9B ウ */ + { 0x00, 0x40, 0x48, 0x78, 0x48, 0x40, 0x00, 0x00 }, /* 0x9C ェ */ + { 0x20, 0x22, 0x22, 0x3e, 0x22, 0x22, 0x20, 0x00 }, /* 0x9D エ */ + { 0x00, 0x28, 0x28, 0x58, 0x7c, 0x08, 0x00, 0x00 }, /* 0x9E ォ */ + { 0x22, 0x22, 0x12, 0x4a, 0x7f, 0x02, 0x02, 0x00 }, /* 0x9F オ */ + { 0x00, 0x42, 0x22, 0x1f, 0x02, 0x42, 0x7e, 0x00 }, /* 0xA0 カ */ + { 0x00, 0x42, 0x22, 0x1f, 0x02, 0x42, 0x7f, 0x00 }, /* 0xA1 ガ */ + { 0x00, 0x12, 0x12, 0x1f, 0x72, 0x12, 0x10, 0x00 }, /* 0xA2 キ */ + { 0x00, 0x12, 0x12, 0x1f, 0x72, 0x13, 0x10, 0x00 }, /* 0xA3 ギ */ + { 0x00, 0x08, 0x44, 0x43, 0x22, 0x12, 0x0e, 0x00 }, /* 0xA4 ク */ + { 0x00, 0x08, 0x44, 0x43, 0x22, 0x12, 0x0f, 0x00 }, /* 0xA5 グ */ + { 0x08, 0x07, 0x42, 0x22, 0x1e, 0x02, 0x02, 0x00 }, /* 0xA6 ケ */ + { 0x08, 0x07, 0x42, 0x22, 0x1f, 0x02, 0x03, 0x00 }, /* 0xA7 ゲ */ + { 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x00 }, /* 0xA8 コ */ + { 0x00, 0x42, 0x42, 0x42, 0x43, 0x42, 0x7f, 0x00 }, /* 0xA9 ゴ */ + { 0x02, 0x02, 0x4f, 0x42, 0x22, 0x1f, 0x02, 0x00 }, /* 0xAA サ */ + { 0x02, 0x02, 0x4f, 0x42, 0x23, 0x1e, 0x03, 0x00 }, /* 0xAB ザ */ + { 0x00, 0x45, 0x4a, 0x40, 0x20, 0x10, 0x0c, 0x00 }, /* 0xAC シ */ + { 0x00, 0x45, 0x4a, 0x40, 0x21, 0x10, 0x0d, 0x00 }, /* 0xAD ジ */ + { 0x40, 0x42, 0x22, 0x22, 0x1a, 0x26, 0x40, 0x00 }, /* 0xAE ス */ + { 0x40, 0x42, 0x22, 0x22, 0x1b, 0x26, 0x41, 0x00 }, /* 0xAF ズ */ + { 0x04, 0x04, 0x3f, 0x44, 0x44, 0x54, 0x4c, 0x00 }, /* 0xB0 セ */ + { 0x04, 0x04, 0x3f, 0x44, 0x45, 0x54, 0x4d, 0x00 }, /* 0xB1 ゼ */ + { 0x00, 0x01, 0x46, 0x40, 0x20, 0x10, 0x0f, 0x00 }, /* 0xB2 ソ */ + { 0x00, 0x01, 0x46, 0x40, 0x20, 0x11, 0x0f, 0x00 }, /* 0xB3 ゾ */ + { 0x00, 0x08, 0x44, 0x4b, 0x2a, 0x12, 0x0e, 0x00 }, /* 0xB4 タ */ + { 0x00, 0x08, 0x44, 0x4b, 0x2a, 0x12, 0x0f, 0x00 }, /* 0xB5 ダ */ + { 0x08, 0x0a, 0x4a, 0x3e, 0x09, 0x09, 0x08, 0x00 }, /* 0xB6 チ */ + { 0x08, 0x0a, 0x4a, 0x3e, 0x09, 0x08, 0x09, 0x00 }, /* 0xB7 ヂ */ + { 0x00, 0x18, 0x40, 0x58, 0x20, 0x18, 0x00, 0x00 }, /* 0xB8 ッ */ + { 0x02, 0x0c, 0x42, 0x4c, 0x20, 0x10, 0x0e, 0x00 }, /* 0xB9 ツ */ + { 0x02, 0x0c, 0x42, 0x4c, 0x21, 0x10, 0x0d, 0x00 }, /* 0xBA ヅ */ + { 0x04, 0x05, 0x45, 0x3d, 0x05, 0x05, 0x04, 0x00 }, /* 0xBB テ */ + { 0x04, 0x05, 0x45, 0x3d, 0x05, 0x04, 0x05, 0x00 }, /* 0xBC デ */ + { 0x00, 0x00, 0x7f, 0x08, 0x08, 0x10, 0x00, 0x00 }, /* 0xBD ト */ + { 0x00, 0x00, 0x7f, 0x08, 0x09, 0x10, 0x01, 0x00 }, /* 0xBE ド */ + { 0x04, 0x44, 0x24, 0x1f, 0x04, 0x04, 0x04, 0x00 }, /* 0xBF ナ */ + { 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00 }, /* 0xC0 ニ */ + { 0x40, 0x41, 0x25, 0x15, 0x19, 0x27, 0x00, 0x00 }, /* 0xC1 ヌ */ + { 0x20, 0x22, 0x12, 0x7b, 0x06, 0x12, 0x20, 0x00 }, /* 0xC2 ネ */ + { 0x40, 0x40, 0x20, 0x10, 0x08, 0x07, 0x00, 0x00 }, /* 0xC3 ノ */ + { 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0c, 0x70, 0x00 }, /* 0xC4 ハ */ + { 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0d, 0x71, 0x00 }, /* 0xC5 バ */ + { 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0d, 0x72, 0x00 }, /* 0xC6 パ */ + { 0x00, 0x3f, 0x48, 0x48, 0x48, 0x44, 0x44, 0x00 }, /* 0xC7 ヒ */ + { 0x00, 0x3f, 0x48, 0x48, 0x49, 0x44, 0x45, 0x00 }, /* 0xC8 ビ */ + { 0x00, 0x3f, 0x48, 0x48, 0x4a, 0x45, 0x46, 0x00 }, /* 0xC9 ピ */ + { 0x00, 0x02, 0x42, 0x42, 0x22, 0x12, 0x0e, 0x00 }, /* 0xCA フ */ + { 0x00, 0x02, 0x42, 0x42, 0x23, 0x12, 0x0f, 0x00 }, /* 0xCB ブ */ + { 0x00, 0x02, 0x42, 0x42, 0x22, 0x15, 0x0e, 0x00 }, /* 0xCC プ */ + { 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00 }, /* 0xCD ヘ */ + { 0x08, 0x04, 0x02, 0x04, 0x09, 0x10, 0x21, 0x00 }, /* 0xCE ベ */ + { 0x08, 0x04, 0x02, 0x04, 0x0a, 0x15, 0x22, 0x00 }, /* 0xCF ペ */ + { 0x24, 0x14, 0x44, 0x7f, 0x04, 0x14, 0x24, 0x00 }, /* 0xD0 ホ */ + { 0x24, 0x14, 0x44, 0x7f, 0x05, 0x14, 0x25, 0x00 }, /* 0xD1 ボ */ + { 0x24, 0x14, 0x44, 0x7f, 0x06, 0x15, 0x22, 0x00 }, /* 0xD2 ポ */ + { 0x02, 0x02, 0x12, 0x22, 0x52, 0x0a, 0x06, 0x00 }, /* 0xD3 マ */ + { 0x00, 0x21, 0x25, 0x29, 0x4a, 0x42, 0x00, 0x00 }, /* 0xD4 ミ */ + { 0x40, 0x70, 0x4c, 0x43, 0x50, 0x20, 0x40, 0x00 }, /* 0xD5 ム */ + { 0x40, 0x44, 0x24, 0x14, 0x08, 0x37, 0x00, 0x00 }, /* 0xD6 メ */ + { 0x00, 0x08, 0x09, 0x3f, 0x49, 0x49, 0x48, 0x00 }, /* 0xD7 モ */ + { 0x00, 0x10, 0x1c, 0x68, 0x08, 0x18, 0x00, 0x00 }, /* 0xD8 ャ */ + { 0x04, 0x04, 0x0f, 0x74, 0x02, 0x0a, 0x06, 0x00 }, /* 0xD9 ヤ */ + { 0x00, 0x40, 0x48, 0x48, 0x78, 0x40, 0x00, 0x00 }, /* 0xDA ュ */ + { 0x20, 0x22, 0x22, 0x22, 0x3e, 0x20, 0x20, 0x00 }, /* 0xDB ユ */ + { 0x00, 0x00, 0x44, 0x54, 0x54, 0x7c, 0x00, 0x00 }, /* 0xDC ョ */ + { 0x00, 0x42, 0x4a, 0x4a, 0x4a, 0x4a, 0x7e, 0x00 }, /* 0xDD ヨ */ + { 0x00, 0x04, 0x45, 0x45, 0x25, 0x15, 0x0c, 0x00 }, /* 0xDE ラ */ + { 0x00, 0x0f, 0x40, 0x40, 0x20, 0x1f, 0x00, 0x00 }, /* 0xDF リ */ + { 0x40, 0x20, 0x1e, 0x00, 0x7f, 0x20, 0x10, 0x00 }, /* 0xE0 ル */ + { 0x00, 0x00, 0x7f, 0x40, 0x20, 0x10, 0x08, 0x00 }, /* 0xE1 レ */ + { 0x00, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x00 }, /* 0xE2 ロ */ + { 0x00, 0x0c, 0x44, 0x44, 0x24, 0x1c, 0x00, 0x00 }, /* 0xE3 ヮ */ + { 0x00, 0x06, 0x42, 0x42, 0x22, 0x12, 0x0e, 0x00 }, /* 0xE4 ワ */ + { 0x10, 0x12, 0x1e, 0x12, 0x12, 0x7f, 0x12, 0x00 }, /* 0xE5 ヰ */ + { 0x20, 0x22, 0x22, 0x3a, 0x26, 0x22, 0x20, 0x00 }, /* 0xE6 ヱ */ + { 0x00, 0x01, 0x45, 0x45, 0x25, 0x15, 0x0f, 0x00 }, /* 0xE7 ヲ */ + { 0x00, 0x41, 0x42, 0x40, 0x20, 0x10, 0x0c, 0x00 }, /* 0xE8 ン */ + { 0x00, 0x06, 0x42, 0x43, 0x22, 0x12, 0x0f, 0x00 }, /* 0xE9 ヴ */ + { 0x00, 0x48, 0x28, 0x1c, 0x48, 0x78, 0x00, 0x00 }, /* 0xEA ヵ */ + { 0x00, 0x10, 0x0c, 0x48, 0x38, 0x08, 0x00, 0x00 }, /* 0xEB ヶ */ + { 0x08, 0x04, 0x04, 0x08, 0x10, 0x10, 0x08, 0x00 }, /* 0xEC 〜 */ + { 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00 }, /* 0xED … */ + { 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0xEE ー */ + { 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08 }, /* 0xEF ― */ +}; + +#define MISAKI_FONT_F1_H +PROGMEM const uint8_t misaki_font_f1[ MISAKI_FONT_F1_SIZE + 1 ][ MISAKI_FONT_F1_W ] = +{ + { 0x00, 0x00, 0x00 }, /* 0x00 */ + { 0x00, 0x2f, 0x00 }, /* 0x01 ! */ + { 0x03, 0x00, 0x03 }, /* 0x02 " */ + { 0x3f, 0x12, 0x3f }, /* 0x03 # */ + { 0x16, 0x3f, 0x1a }, /* 0x04 $ */ + { 0x12, 0x08, 0x24 }, /* 0x05 % */ + { 0x32, 0x3d, 0x2a }, /* 0x06 & */ + { 0x02, 0x01, 0x00 }, /* 0x07 ' */ + { 0x00, 0x3e, 0x41 }, /* 0x08 ( */ + { 0x41, 0x3e, 0x00 }, /* 0x09 ) */ + { 0x0a, 0x07, 0x0a }, /* 0x0A * */ + { 0x08, 0x3e, 0x08 }, /* 0x0B + */ + { 0x40, 0x20, 0x00 }, /* 0x0C , */ + { 0x08, 0x08, 0x08 }, /* 0x0D - */ + { 0x00, 0x20, 0x00 }, /* 0x0E . */ + { 0x10, 0x08, 0x04 }, /* 0x0F / */ + { 0x1c, 0x2a, 0x1c }, /* 0x10 0 */ + { 0x24, 0x3e, 0x20 }, /* 0x11 1 */ + { 0x32, 0x2a, 0x24 }, /* 0x12 2 */ + { 0x22, 0x2a, 0x14 }, /* 0x13 3 */ + { 0x18, 0x14, 0x3e }, /* 0x14 4 */ + { 0x2e, 0x2a, 0x12 }, /* 0x15 5 */ + { 0x1c, 0x2a, 0x12 }, /* 0x16 6 */ + { 0x02, 0x3a, 0x06 }, /* 0x17 7 */ + { 0x14, 0x2a, 0x14 }, /* 0x18 8 */ + { 0x24, 0x2a, 0x1c }, /* 0x19 9 */ + { 0x00, 0x24, 0x00 }, /* 0x1A : */ + { 0x40, 0x24, 0x00 }, /* 0x1B ; */ + { 0x08, 0x14, 0x22 }, /* 0x1C < */ + { 0x14, 0x14, 0x14 }, /* 0x1D = */ + { 0x22, 0x14, 0x08 }, /* 0x1E > */ + { 0x02, 0x29, 0x06 }, /* 0x1F ? */ + { 0x12, 0x29, 0x1e }, /* 0x20 @ */ + { 0x3e, 0x09, 0x3e }, /* 0x21 A */ + { 0x3f, 0x25, 0x1a }, /* 0x22 B */ + { 0x1e, 0x21, 0x21 }, /* 0x23 C */ + { 0x3f, 0x21, 0x1e }, /* 0x24 D */ + { 0x3f, 0x25, 0x21 }, /* 0x25 E */ + { 0x3f, 0x05, 0x01 }, /* 0x26 F */ + { 0x1e, 0x21, 0x39 }, /* 0x27 G */ + { 0x3f, 0x08, 0x3f }, /* 0x28 H */ + { 0x21, 0x3f, 0x21 }, /* 0x29 I */ + { 0x10, 0x20, 0x1f }, /* 0x2A J */ + { 0x3f, 0x04, 0x3b }, /* 0x2B K */ + { 0x3f, 0x20, 0x20 }, /* 0x2C L */ + { 0x3f, 0x06, 0x3f }, /* 0x2D M */ + { 0x3f, 0x01, 0x3e }, /* 0x2E N */ + { 0x1e, 0x21, 0x1e }, /* 0x2F O */ + { 0x3f, 0x09, 0x06 }, /* 0x30 P */ + { 0x1e, 0x21, 0x5e }, /* 0x31 Q */ + { 0x3f, 0x09, 0x36 }, /* 0x32 R */ + { 0x22, 0x25, 0x19 }, /* 0x33 S */ + { 0x01, 0x3f, 0x01 }, /* 0x34 T */ + { 0x3f, 0x20, 0x3f }, /* 0x35 U */ + { 0x3f, 0x10, 0x0f }, /* 0x36 V */ + { 0x3f, 0x18, 0x3f }, /* 0x37 W */ + { 0x33, 0x0c, 0x33 }, /* 0x38 X */ + { 0x03, 0x3c, 0x03 }, /* 0x39 Y */ + { 0x31, 0x2d, 0x23 }, /* 0x3A Z */ + { 0x00, 0x7f, 0x41 }, /* 0x3B [ */ + { 0x15, 0x3e, 0x15 }, /* 0x3C \ */ + { 0x41, 0x7f, 0x00 }, /* 0x3D ] */ + { 0x02, 0x01, 0x02 }, /* 0x3E ^ */ + { 0x40, 0x40, 0x40 }, /* 0x3F _ */ + { 0x00, 0x01, 0x02 }, /* 0x40 ` */ + { 0x18, 0x24, 0x3c }, /* 0x41 a */ + { 0x3f, 0x24, 0x18 }, /* 0x42 b */ + { 0x18, 0x24, 0x24 }, /* 0x43 c */ + { 0x18, 0x24, 0x3f }, /* 0x44 d */ + { 0x18, 0x2c, 0x2c }, /* 0x45 e */ + { 0x04, 0x3f, 0x05 }, /* 0x46 f */ + { 0x48, 0x54, 0x3c }, /* 0x47 g */ + { 0x3f, 0x04, 0x38 }, /* 0x48 h */ + { 0x00, 0x3d, 0x00 }, /* 0x49 i */ + { 0x40, 0x3d, 0x00 }, /* 0x4A j */ + { 0x3f, 0x08, 0x34 }, /* 0x4B k */ + { 0x01, 0x3f, 0x00 }, /* 0x4C l */ + { 0x3c, 0x1c, 0x38 }, /* 0x4D m */ + { 0x3c, 0x04, 0x38 }, /* 0x4E n */ + { 0x18, 0x24, 0x18 }, /* 0x4F o */ + { 0x7c, 0x24, 0x18 }, /* 0x50 p */ + { 0x18, 0x24, 0x7c }, /* 0x51 q */ + { 0x3c, 0x08, 0x04 }, /* 0x52 r */ + { 0x28, 0x3c, 0x14 }, /* 0x53 s */ + { 0x04, 0x3e, 0x24 }, /* 0x54 t */ + { 0x3c, 0x20, 0x3c }, /* 0x55 u */ + { 0x3c, 0x10, 0x0c }, /* 0x56 v */ + { 0x3c, 0x30, 0x3c }, /* 0x57 w */ + { 0x24, 0x18, 0x24 }, /* 0x58 x */ + { 0x4c, 0x50, 0x3c }, /* 0x59 y */ + { 0x24, 0x34, 0x2c }, /* 0x5A z */ + { 0x08, 0x36, 0x41 }, /* 0x5B { */ + { 0x00, 0x7f, 0x00 }, /* 0x5C | */ + { 0x41, 0x36, 0x08 }, /* 0x5D } */ + { 0x01, 0x01, 0x01 }, /* 0x5E ~ */ + { 0x10, 0x28, 0x10 }, /* 0x5F 。 */ + { 0x1f, 0x01, 0x01 }, /* 0x60 「 */ + { 0x20, 0x20, 0x3e }, /* 0x61 」 */ + { 0x10, 0x20, 0x00 }, /* 0x62 、 */ + { 0x00, 0x08, 0x00 }, /* 0x63 ・ */ + { 0x25, 0x15, 0x0f }, /* 0x64 ヲ */ + { 0x24, 0x1c, 0x0c }, /* 0x65 ァ */ + { 0x10, 0x38, 0x04 }, /* 0x66 ィ */ + { 0x18, 0x0c, 0x38 }, /* 0x67 ゥ */ + { 0x28, 0x38, 0x28 }, /* 0x68 ェ */ + { 0x28, 0x18, 0x3c }, /* 0x69 ォ */ + { 0x08, 0x3c, 0x18 }, /* 0x6A ャ */ + { 0x28, 0x38, 0x20 }, /* 0x6B ュ */ + { 0x24, 0x2c, 0x3c }, /* 0x6C ョ */ + { 0x2c, 0x2c, 0x1c }, /* 0x6D ッ */ + { 0x04, 0x08, 0x08 }, /* 0x6E ー */ + { 0x21, 0x1d, 0x07 }, /* 0x6F ア */ + { 0x08, 0x3c, 0x03 }, /* 0x70 イ */ + { 0x06, 0x23, 0x1e }, /* 0x71 ウ */ + { 0x22, 0x3e, 0x22 }, /* 0x72 エ */ + { 0x12, 0x0a, 0x3f }, /* 0x73 オ */ + { 0x32, 0x0f, 0x3e }, /* 0x74 カ */ + { 0x0a, 0x3f, 0x0a }, /* 0x75 キ */ + { 0x24, 0x13, 0x0e }, /* 0x76 ク */ + { 0x27, 0x1e, 0x02 }, /* 0x77 ケ */ + { 0x22, 0x22, 0x3e }, /* 0x78 コ */ + { 0x27, 0x12, 0x0f }, /* 0x79 サ */ + { 0x25, 0x25, 0x10 }, /* 0x7A シ */ + { 0x21, 0x19, 0x27 }, /* 0x7B ス */ + { 0x3f, 0x22, 0x2e }, /* 0x7C セ */ + { 0x21, 0x16, 0x0f }, /* 0x7D ソ */ + { 0x24, 0x1b, 0x0e }, /* 0x7E タ */ + { 0x25, 0x1f, 0x05 }, /* 0x7F チ */ + { 0x26, 0x26, 0x1e }, /* 0x80 ツ */ + { 0x25, 0x1d, 0x05 }, /* 0x81 テ */ + { 0x3f, 0x04, 0x08 }, /* 0x82 ト */ + { 0x24, 0x1f, 0x04 }, /* 0x83 ナ */ + { 0x20, 0x22, 0x22 }, /* 0x84 ニ */ + { 0x25, 0x19, 0x27 }, /* 0x85 ヌ */ + { 0x12, 0x3b, 0x16 }, /* 0x86 ネ */ + { 0x20, 0x10, 0x0f }, /* 0x87 ノ */ + { 0x3c, 0x01, 0x3e }, /* 0x88 ハ */ + { 0x1f, 0x24, 0x24 }, /* 0x89 ヒ */ + { 0x21, 0x11, 0x0f }, /* 0x8A フ */ + { 0x0c, 0x03, 0x1c }, /* 0x8B ヘ */ + { 0x1a, 0x3f, 0x1a }, /* 0x8C ホ */ + { 0x09, 0x19, 0x27 }, /* 0x8D マ */ + { 0x22, 0x2a, 0x2a }, /* 0x8E ミ */ + { 0x38, 0x27, 0x30 }, /* 0x8F ム */ + { 0x32, 0x0c, 0x13 }, /* 0x90 メ */ + { 0x05, 0x3f, 0x25 }, /* 0x91 モ */ + { 0x02, 0x3f, 0x0e }, /* 0x92 ヤ */ + { 0x21, 0x3f, 0x20 }, /* 0x93 ユ */ + { 0x25, 0x25, 0x3f }, /* 0x94 ヨ */ + { 0x25, 0x25, 0x1d }, /* 0x95 ラ */ + { 0x07, 0x20, 0x1f }, /* 0x96 リ */ + { 0x3c, 0x3f, 0x20 }, /* 0x97 ル */ + { 0x3f, 0x20, 0x10 }, /* 0x98 レ */ + { 0x3e, 0x22, 0x3e }, /* 0x99 ロ */ + { 0x23, 0x11, 0x0f }, /* 0x9A ワ */ + { 0x21, 0x21, 0x18 }, /* 0x9B ン */ + { 0x01, 0x00, 0x01 }, /* 0x9C ゙ */ + { 0x02, 0x05, 0x02 }, /* 0x9D ゚ */ +}; +#define MISAKI_FONT_F2_H +PROGMEM const uint8_t misaki_font_f2[ MISAKI_FONT_F2_SIZE + 1 ][ MISAKI_FONT_F2_W ] = +{ + { 0x75, 0x40, 0x77, 0x55, 0x75, 0x77, 0x40 }, /* 0x00 温 */ + { 0x40, 0x3e, 0x4a, 0x5e, 0x2b, 0x5e, 0x4a }, /* 0x01 度 */ + { 0x6b, 0x62, 0x7f, 0x35, 0x2f, 0x35, 0x7f }, /* 0x02 調 */ + { 0x7c, 0x5b, 0x5e, 0x24, 0x7b, 0x0e, 0x3a }, /* 0x03 節 */ + { 0x04, 0x7e, 0x01, 0x7e, 0x4a, 0x5e, 0x69 }, /* 0x04 低 */ + { 0x06, 0x3a, 0x2f, 0x3f, 0x6b, 0x7e, 0x46 }, /* 0x05 電 */ + { 0x40, 0x3f, 0x41, 0x49, 0x7f, 0x49, 0x41 }, /* 0x06 圧 */ + { 0x02, 0x62, 0x6b, 0x6b, 0x6b, 0x62, 0x02 }, /* 0x07 言 */ + { 0x6a, 0x6b, 0x14, 0x7d, 0x57, 0x7d, 0x10 }, /* 0x08 語 */ + { 0x41, 0x3f, 0x55, 0x55, 0x3d, 0x57, 0x51 }, /* 0x09 戻 */ + { 0x21, 0x3f, 0x2d, 0x7f, 0x2a, 0x12, 0x2e }, /* 0x0A 取 */ + { 0x0a, 0x77, 0x5a, 0x50, 0x5a, 0x77, 0x0a }, /* 0x0B 替 */ + { 0x20, 0x24, 0x13, 0x7d, 0x55, 0x53, 0x70 }, /* 0x0C 名 */ + { 0x7a, 0x2a, 0x7b, 0x02, 0x1a, 0x43, 0x7a }, /* 0x0D 前 */ + { 0x4a, 0x52, 0x5e, 0x2b, 0x5e, 0x42, 0x4a }, /* 0x0E 変 */ + { 0x41, 0x5f, 0x35, 0x3f, 0x55, 0x5f, 0x41 }, /* 0x0F 更 */ + { 0x7d, 0x14, 0x57, 0x7d, 0x0e, 0x40, 0x7f }, /* 0x10 削 */ + { 0x7f, 0x1b, 0x54, 0x16, 0x7d, 0x16, 0x54 }, /* 0x11 除 */ + { 0x49, 0x3a, 0x40, 0x7e, 0x57, 0x56, 0x76 }, /* 0x12 追 */ + { 0x42, 0x3f, 0x42, 0x7e, 0x7e, 0x42, 0x7e }, /* 0x13 加 */ + { 0x04, 0x7e, 0x51, 0x37, 0x7d, 0x37, 0x50 }, /* 0x14 保 */ + { 0x12, 0x7a, 0x17, 0x52, 0x76, 0x1e, 0x12 }, /* 0x15 存 */ + { 0x7f, 0x55, 0x7f, 0x14, 0x5d, 0x7f, 0x55 }, /* 0x16 睡 */ + { 0x7f, 0x55, 0x7f, 0x7f, 0x55, 0x3d, 0x57 }, /* 0x17 眠 */ + { 0x7f, 0x55, 0x37, 0x78, 0x17, 0x45, 0x7f }, /* 0x18 閉 */ + { 0x7f, 0x2b, 0x7b, 0x28, 0x7b, 0x2b, 0x7f }, /* 0x19 開 */ + { 0x1e, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x1e }, /* 0x1A 中 */ + { 0x7f, 0x41, 0x6b, 0x7f, 0x6b, 0x51, 0x7f }, /* 0x1B 国 */ + { 0x52, 0x5a, 0x57, 0x3a, 0x57, 0x5a, 0x52 }, /* 0x1C 英 */ + { 0x00, 0x7f, 0x49, 0x49, 0x49, 0x49, 0x7f }, /* 0x1D 日 */ + { 0x22, 0x12, 0x2a, 0x7f, 0x2a, 0x12, 0x22 }, /* 0x1E 本 */ + { 0x16, 0x6a, 0x5e, 0x73, 0x56, 0x62, 0x16 }, /* 0x1F 密 */ + { 0x09, 0x37, 0x31, 0x5f, 0x15, 0x5f, 0x75 }, /* 0x20 碼 */ + { 0x42, 0x22, 0x1e, 0x0b, 0x4a, 0x7a, 0x02 }, /* 0x21 方 */ + { 0x7e, 0x02, 0x3a, 0x2b, 0x3a, 0x42, 0x7e }, /* 0x22 向 */ +}; +/* + プリセット + 温度調節 + タイマー + コントロール + スクリーン + ブザー + 低電圧アラーム + 言語 + 戻る + 取り替える + キャリブレーション + 名前を変更 + 削除 + 追加 + 保存 + デフォルト + 睡眠 + ブースト + 保存 + 睡眠 + 閉じる + ブースト + 保存 + ダイレクト + PID + ビッグ + ニュース + 閉じる + 開く + いいえ、 + はい、 + 中国語 + 英語 + いいえ、 + はい、 + メインスクリーン + フリップ + 保存 + アバウト + 日本語 + つまみ方向 + + 汉字转换表:温度調節低電圧言語戻取替名前変更削除追加保存睡眠閉開中国英日本密碼 +*/ +const char JP_0[] PROGMEM = { 0xf0, 0xcc, 0xdf, 0xb0, 0xb8, 0xbd, }; +const char JP_1[] PROGMEM = { 0xf2, 0x00, 0x01, 0x02, 0x03, }; +const char JP_2[] PROGMEM = { 0xf0, 0xb4, 0x99, 0xd3, 0xee, }; +const char JP_3[] PROGMEM = { 0xf0, 0xa8, 0xe8, 0xbd, 0xe2, 0xee, 0xe0, }; +const char JP_4[] PROGMEM = { 0xf0, 0xae, 0xa4, 0xdf, 0xee, 0xe8, }; +const char JP_5[] PROGMEM = { 0xf0, 0xcb, 0xab, 0xee, }; +const char JP_6[] PROGMEM = { 0xf2, 0x04, 0x05, 0x06, 0xf0, 0x97, 0xde, 0xee, 0xd5, }; +const char JP_7[] PROGMEM = { 0xf2, 0x07, 0x08, }; +const char JP_8[] PROGMEM = { 0xf2, 0x09, 0xf0, 0x8d, }; +const char JP_9[] PROGMEM = { 0xf2, 0x0a, 0xf0, 0x8c, 0xf2, 0x0b, 0xf0, 0x4a, 0x8d, }; +const char JP_10[] PROGMEM = { 0xf0, 0xa2, 0xd8, 0xdf, 0xcb, 0xe1, 0xee, 0xac, 0xdc, 0xe8, }; +const char JP_11[] PROGMEM = { 0xf2, 0x0c, 0x0d, 0xf0, 0x94, 0xf2, 0x0e, 0x0f, }; +const char JP_12[] PROGMEM = { 0xf2, 0x10, 0x11, }; +const char JP_13[] PROGMEM = { 0xf2, 0x12, 0x13, }; +const char JP_14[] PROGMEM = { 0xf2, 0x14, 0x15, }; +const char JP_15[] PROGMEM = { 0xf0, 0xbc, 0xca, 0x9e, 0xe0, 0xbd, }; +const char JP_16[] PROGMEM = { 0xf2, 0x16, 0x17, }; +const char JP_17[] PROGMEM = { 0xf0, 0xcb, 0xee, 0xae, 0xbd, }; +const char JP_18[] PROGMEM = { 0xf2, 0x14, 0x15, }; +const char JP_19[] PROGMEM = { 0xf2, 0x16, 0x17, }; +const char JP_20[] PROGMEM = { 0xf2, 0x18, 0xf0, 0x5a, 0x8d, }; +const char JP_21[] PROGMEM = { 0xf0, 0xcb, 0xee, 0xae, 0xbd, }; +const char JP_22[] PROGMEM = { 0xf2, 0x14, 0x15, }; +const char JP_23[] PROGMEM = { 0xf0, 0xb5, 0x99, 0xe1, 0xa4, 0xbd, }; +const char JP_24[] PROGMEM = { 0xf1, 0x30, 0x29, 0x24, }; +const char JP_25[] PROGMEM = { 0xf0, 0xc8, 0xb8, 0xa5, }; +const char JP_26[] PROGMEM = { 0xf0, 0xc0, 0xda, 0xee, 0xae, }; +const char JP_27[] PROGMEM = { 0xf2, 0x18, 0xf0, 0x5a, 0x8d, }; +const char JP_28[] PROGMEM = { 0xf2, 0x19, 0xf0, 0x51, }; +const char JP_29[] PROGMEM = { 0xf0, 0x46, 0x46, 0x4a, 0x01, }; +const char JP_30[] PROGMEM = { 0xf0, 0x71, 0x46, 0x01, }; +const char JP_31[] PROGMEM = { 0xf2, 0x1a, 0x1b, 0x08, }; +const char JP_32[] PROGMEM = { 0xf2, 0x1c, 0x08, }; +const char JP_33[] PROGMEM = { 0xf0, 0x46, 0x46, 0x4a, 0x01, }; +const char JP_34[] PROGMEM = { 0xf0, 0x71, 0x46, 0x01, }; +const char JP_35[] PROGMEM = { 0xf0, 0xd6, 0x99, 0xe8, 0xae, 0xa4, 0xdf, 0xee, 0xe8, }; +const char JP_36[] PROGMEM = { 0xf0, 0xca, 0xdf, 0xb8, 0xcc, }; +const char JP_37[] PROGMEM = { 0xf2, 0x14, 0x15, }; +const char JP_38[] PROGMEM = { 0xf0, 0x97, 0xc5, 0x9b, 0xbd, }; +const char JP_39[] PROGMEM = { 0xf2, 0x1d, 0x1e, 0x08, }; +const char JP_40[] PROGMEM = { 0xf2, 0x1f, 0x20, }; //密码 +const char JP_41[] PROGMEM = { 0xf0, 0x66, 0x80, 0x81, 0xf2, 0x21, 0x22, }; //つまみ方向 +const char *const JP_table[] = {JP_0, JP_1, JP_2, JP_3, JP_4, JP_5, JP_41, JP_6, JP_40, JP_7, JP_38, JP_8, JP_9, JP_10, JP_11, JP_12, JP_13, JP_14, JP_15, JP_16, JP_17, JP_18, JP_19, JP_20, JP_21, JP_22, JP_23, JP_24, JP_25, JP_26, JP_27, JP_28, JP_29, JP_30, JP_31, JP_32, JP_39, JP_35, JP_36, JP_37,}; +const char JP_Length_table[] PROGMEM = {6, 5, 5, 7, 6, 4, 7, 9, 3, 3 , 5, 4, 9, 10, 8, 3, 3, 3, 6, 3, 5, 3, 3, 5, 5, 3, 6, 4, 4, 5, 5, 4, 5, 4, 4, 3, 4, 9, 5, 3,}; +#endif + +/* + 8x8 dot Japanese font for Arduboy + + Copyright (c) 2016 emutyworks + + Released under the MIT license + https://github.com/emutyworks/8x8DotJPFont/blob/master/LICENSE.txt +*/ +#if LANG_JP_State +void drawText(uint8_t x, uint8_t y, const uint8_t *mes, uint8_t cnt) +{ + uint8_t pb; + uint8_t page; + uint8_t screen_start = 0; + uint8_t screen_end = 128; + + if (x < screen_start) { + x = screen_start; + } + + for (uint8_t i = 0; i < cnt; i++) { + pb = pgm_read_byte_near(mes + i); + + switch (pb) { + case MISAKI_FONT_F0_PAGE: + page = MISAKI_FONT_F0_PAGE; + continue; + case MISAKI_FONT_F1_PAGE: + page = MISAKI_FONT_F1_PAGE; + continue; + case MISAKI_FONT_F2_PAGE: + page = MISAKI_FONT_F2_PAGE; + continue; + } + + if (!page) { + continue; + } + + switch (page) { +#ifdef MISAKI_FONT_F0_H + case MISAKI_FONT_F0_PAGE: + if (pb > MISAKI_FONT_F0_SIZE) { + continue; + } + if ((x + 8) > screen_end) { + x = screen_start; + y = y + 8; + } + arduboy.drawBitmap(x, y, misaki_font_f0[ pb ], MISAKI_FONT_F0_W, 8, WHITE); + x = x + 8; + break; +#endif +#ifdef MISAKI_FONT_F1_H + case MISAKI_FONT_F1_PAGE: + if (pb > MISAKI_FONT_F1_SIZE) { + continue; + } + if ((x + 4) > screen_end) { + x = screen_start; + y = y + 8; + } + arduboy.drawBitmap(x, y, misaki_font_f1[ pb ], MISAKI_FONT_F1_W, 8, WHITE); + arduboy.drawBitmap(x + 3, y, misaki_font_0x00, 1, 8, WHITE); + x = x + 4; + break; +#endif +#ifdef MISAKI_FONT_F2_H + case MISAKI_FONT_F2_PAGE: + if (pb > MISAKI_FONT_F2_SIZE) { + continue; + } + if ((x + 8) > screen_end) { + x = screen_start; + y = y + 8; + } + arduboy.drawBitmap(x, y, misaki_font_f2[ pb ], MISAKI_FONT_F2_W, 8, WHITE); + arduboy.drawBitmap(x + 7, y, misaki_font_0x00, 1, 8, WHITE); + x = x + 8; + break; +#endif + } + } +} +#endif diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/C-Debug.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/C-Debug.ino new file mode 100644 index 0000000..5518d73 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/C-Debug.ino @@ -0,0 +1,21 @@ +/* +//此片段用于DEBUG +void HelpMeSerialer() { + //串口助手 + if (Serial.available()) { + char TmpChar = Serial.read(); + switch (TmpChar) { + case 'x': x = Serial.parseInt(); + case 'y': y = Serial.parseInt(); + case 'a': a = Serial.parseInt(); + case 'b': b = Serial.parseInt(); + } + } + + Serial.println(String("X ->") + x); + Serial.println(String("Y ->") + y); + Serial.println(String("A ->") + a); + Serial.println(String("B ->") + b); + +} +*/ diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/CurveFitting.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/CurveFitting.ino new file mode 100644 index 0000000..2979e6c --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/CurveFitting.ino @@ -0,0 +1,103 @@ +//********** 曲线拟合程序 ********** +//曲线拟合算法来至https://blog.csdn.net/m0_37362454/article/details/82456616 by欧阳小俊 + +/*==================polyfit(n,x,y,poly_n,a)===================*/ +/*=======拟合y=a0+a1*x+a2*x^2+……+apoly_n*x^poly_n========*/ +/*=====n是数据个数 xy是数据值 poly_n是多项式的项数======*/ +/*===返回a0,a1,a2,……a[poly_n],系数比项数多一(常数项)=====*/ +void polyfit(int n, int x[], int y[], int poly_n, float p[]) +{ + int i, j; + float *tempx, *tempy, *sumxx, *sumxy, *ata; + + tempx = (float *)calloc(n , sizeof(float)); + sumxx = (float *)calloc((poly_n * 2 + 1) , sizeof(float)); + tempy = (float *)calloc(n , sizeof(float)); + sumxy = (float *)calloc((poly_n + 1) , sizeof(float)); + ata = (float *)calloc( (poly_n + 1) * (poly_n + 1) , sizeof(float) ); + for (i = 0; i < n; i++) + { + tempx[i] = 1; + tempy[i] = y[i]; + } + for (i = 0; i < 2 * poly_n + 1; i++) + { + for (sumxx[i] = 0, j = 0; j < n; j++) + { + sumxx[i] += tempx[j]; + tempx[j] *= x[j]; + } + } + for (i = 0; i < poly_n + 1; i++) + { + for (sumxy[i] = 0, j = 0; j < n; j++) + { + sumxy[i] += tempy[j]; + tempy[j] *= x[j]; + } + } + for (i = 0; i < poly_n + 1; i++) + { + for (j = 0; j < poly_n + 1; j++) + { + ata[i * (poly_n + 1) + j] = sumxx[i + j]; + } + } + gauss_solve(poly_n + 1, ata, p, sumxy); + + free(tempx); + free(sumxx); + free(tempy); + free(sumxy); + free(ata); +} +/*============================================================ + 高斯消元法计算得到 n 次多项式的系数 + n: 系数的个数 + ata: 线性矩阵 + sumxy: 线性方程组的Y值 + p: 返回拟合的结果 + ============================================================*/ +void gauss_solve(int n, float A[], float x[], float b[]) +{ + int i, j, k, r; + float max; + for (k = 0; k < n - 1; k++) + { + max = fabs(A[k * n + k]); // find maxmum + r = k; + for (i = k + 1; i < n - 1; i++) + { + if (max < fabs(A[i * n + i])) + { + max = fabs(A[i * n + i]); + r = i; + } + } + if (r != k) + { + for (i = 0; i < n; i++) //change array:A[k]&A[r] + { + max = A[k * n + i]; + A[k * n + i] = A[r * n + i]; + A[r * n + i] = max; + } + max = b[k]; //change array:b[k]&b[r] + b[k] = b[r]; + b[r] = max; + } + + for (i = k + 1; i < n; i++) + { + for (j = k + 1; j < n; j++) + A[i * n + j] -= A[i * n + k] * A[k * n + j] / A[k * n + k]; + b[i] -= A[i * n + k] * b[k] / A[k * n + k]; + } + } + + for (i = n - 1; i >= 0; x[i] /= A[i * n + i], i--) + { + for (j = i + 1, x[i] = b[i]; j < n; j++) + x[i] -= A[i * n + j] * x[j]; + } +} diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/D-EEProm.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/D-EEProm.ino new file mode 100644 index 0000000..22afbc7 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/D-EEProm.ino @@ -0,0 +1,69 @@ + +// reads user settings from EEPROM; if EEPROM values are invalid, write defaults +void getEEPROM() { + uint16_t identifier = (EEPROM.read(0) << 8) | EEPROM.read(1); + if (identifier == EEPROM_IDENT) { + DefaultTemp = (EEPROM.read(2) << 8) | EEPROM.read(3); + SleepTemp = (EEPROM.read(4) << 8) | EEPROM.read(5); + BoostTemp = EEPROM.read(6); + Time2sleep = EEPROM.read(7); + Time2off = EEPROM.read(8); + TimeOfBoost = EEPROM.read(9); + MainScrType = EEPROM.read(10); + PIDenable = EEPROM.read(11); + BeepEnable = EEPROM.read(12); + CurrentTip = EEPROM.read(13); + NumberOfTips = EEPROM.read(14); + LANG = EEPROM.read(15); + FlipState = EEPROM.read(16); + UnderVoltage = EEPROM.read(17); + Password = (EEPROM.read(18) << 8) | EEPROM.read(19); + RotaryD = EEPROM.read(20); + uint8_t i, j; + uint16_t Counter = 21; + for (i = 0; i < NumberOfTips; i++) { + for (j = 0; j < TIPNAMELENGTH; j++) { + TipName[i][j] = EEPROM.read(Counter++); + } + //0 8 16 24 + for (j = 0; j < 4; j++) { + EEPROM.get(Counter+=4,PTemp[i][j]); + } + } + } + else { + EEPROM.update(0, EEPROM_IDENT >> 8); EEPROM.update(1, EEPROM_IDENT & 0xFF); + updateEEPROM(); + } +} + + +// writes user settings to EEPROM using updade function to minimize write cycles +void updateEEPROM() { + EEPROM.update( 2, DefaultTemp >> 8); + EEPROM.update( 3, DefaultTemp & 0xFF); + EEPROM.update( 4, SleepTemp >> 8); + EEPROM.update( 5, SleepTemp & 0xFF); + EEPROM.update( 6, BoostTemp); + EEPROM.update( 7, Time2sleep); + EEPROM.update( 8, Time2off); + EEPROM.update( 9, TimeOfBoost); + EEPROM.update(10, MainScrType); + EEPROM.update(11, PIDenable); + EEPROM.update(12, BeepEnable); + EEPROM.update(13, CurrentTip); + EEPROM.update(14, NumberOfTips); + EEPROM.update(15, LANG); + EEPROM.update(16, FlipState); + EEPROM.update(17, UnderVoltage); + EEPROM.update(18, Password >> 8); + EEPROM.update(19, Password & 0xFF); + EEPROM.update(20, RotaryD); + + uint8_t i, j; + uint16_t Counter = 21; + for (i = 0; i < NumberOfTips; i++) { + for (j = 0; j < TIPNAMELENGTH; j++) EEPROM.update(Counter++, TipName[i][j]); + for (j = 0; j < 4; j++) EEPROM.put(Counter+=4, PTemp[i][j]); + } +} diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/F.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/F.ino new file mode 100644 index 0000000..4fab96a --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/F.ino @@ -0,0 +1,315 @@ + +// reads current rotary encoder value +int getRotary() { + return (Count >> ROTARY_TYPE); +} + +//检查按键 +void CheckLastButton() { + if (lastbutton && digitalRead(BUTTON_PIN)) { + delay(10); + lastbutton = false; + } +} +//返回对应层数的对象数 +byte QueryMenuObject() { + int SUM = 0; + for (int i = 0; i < (MenuLevel); i++) SUM += Menu_table[i]; + return SUM; +} + + +// average several ADC readings in sleep mode to denoise +uint16_t denoiseAnalog (byte port) { + uint16_t result = 0; + ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt + if (port >= A0) port -= A0; // set port and + ADMUX = (0x0F & port) | bit(REFS0); // reference to AVcc + set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction + for (uint8_t i = 0; i < 32; i++) { // get 32 readings + sleep_mode(); // go to sleep while taking ADC sample + while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed + result += ADC; // add them up + } + bitClear (ADCSRA, ADEN); // disable ADC + return (result >> 5); // devide by 32 and return value +} + +// get internal temperature by reading ADC channel 8 against 1.1V reference +float getChipTemp() { + uint16_t result = 0; + ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt + ADMUX = bit (REFS1) | bit (REFS0) | bit (MUX3); // set reference and mux + delay(10); // wait for voltages to settle + set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction + for (uint8_t i = 0; i < 32; i++) { // get 32 readings + sleep_mode(); // go to sleep while taking ADC sample + while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed + result += ADC; // add them up + } + bitClear (ADCSRA, ADEN); // disable ADC + result >>= 2; // devide by 4 + return ((result - 2594) / 9.76); // calculate internal temperature in degrees C +} + +// get input voltage in mV by reading 1.1V reference against AVcc +uint16_t getVCC() { + uint16_t result = 0; + ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt + // set Vcc measurement against 1.1V reference + ADMUX = bit (REFS0) | bit (MUX3) | bit (MUX2) | bit (MUX1); + delay(1); // wait for voltages to settle + set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction + for (uint8_t i = 0; i < 16; i++) { // get 16 readings + sleep_mode(); // go to sleep while taking ADC sample + while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed + result += ADC; // add them up + } + bitClear (ADCSRA, ADEN); // disable ADC + result >>= 4; // devide by 16 + return (1125300L / result); // 1125300 = 1.1 * 1023 * 1000 +} + + +// get supply voltage in mV +uint16_t getVIN() { + long result; + result = denoiseAnalog (VIN_PIN); { + if (result < 540) return (result * Vcc / 184.416 + 86.987); + else if (result < 660) return (result * Vcc / 173.204 - 878.29); + else if (result < 745) return (result * Vcc / 143.579 - 4875); + else if (result < 781) return (result * Vcc / 119.109 - 10260); + else if (result < 800) return (result * Vcc / 86.178 - 23013); + else return (result * Vcc / 86.178 - 23113); + } // read supply voltage via voltage divider + //return (result * Vcc / 179.474); // 179.474 = 1023 * R13 / (R12 + R13) +} + +//ADC中断服务 +// ADC interrupt service routine +EMPTY_INTERRUPT (ADC_vect); // nothing to be done here + +//旋转编码器触发中断 +// Pin change interrupt service routine for rotary encoder +ISR (PCINT0_vect) { + uint8_t a = PINB & 1; + uint8_t b = PIND >> 7 & 1; + if (a != a0) { // A changed + a0 = a; + if (b != b0) { // B changed + b0 = b; + Count = constrain(Count + ((a == b) ? CountStep : -CountStep), CountMin, CountMax); + if (ROTARY_TYPE && ((a == b) != ab0)) { + Count = constrain(Count + ((a == b) ? CountStep : -CountStep), CountMin, CountMax);; + } + ab0 = (a == b); + handleMoved = true; + } + } +} + +//计算实际温度 +// calculates real temperature value according to ADC reading and calibration values +void calculateTemp() { + CurrentTemp = PTemp[CurrentTip][0] + RawTemp * PTemp[CurrentTip][1] + RawTemp * RawTemp * PTemp[CurrentTip][2] + RawTemp * RawTemp * RawTemp * PTemp[CurrentTip][3]; +} + +/* + * 温度控制 + * mode-> 0:以实际温度数值为基准 1:以ADC数值为基准(非PID模式) +*/ +void Thermostat(bool mode) { + // define Setpoint acoording to current working mode + if (InOffMode) Setpoint = 0; + else if (InSleepMode) Setpoint = SleepTemp; + else if (InBoostMode) Setpoint = SetTemp + BoostTemp; + else Setpoint = SetTemp; + + // control the heater (PID or direct) + if (!mode) { + gap = abs(Setpoint - CurrentTemp); + if (PIDenable) { + Input = CurrentTemp; + if (gap < 30) ctrl.SetTunings(consKp, consKi, consKd); + else ctrl.SetTunings(aggKp, aggKi, aggKd); + ctrl.Compute(); + } else { + // turn on heater if current temperature is below setpoint + if ((CurrentTemp + 0.5) < Setpoint) Output = 0; else Output = 255; + } + } else { + gap = 0; //此模式下不计算温度差 + if ((RawTemp + 0.5) < Setpoint) Output = 0; else Output = 255; + } + // set heater PWM +#if UsePMOS + analogWrite(CONTROL_PIN, 255 - Output); +#else + analogWrite(CONTROL_PIN, Output); +#endif +} + + +// creates a short beep on the buzzer +void beep() { + //体谅一下,没内存了,只能用原始的办法驱动无源蜂鸣器,否则我也不想牺牲宝贵响应资源换内存 + if (BeepEnable) { + for (uint8_t i = 0; i < 255; i++) { + digitalWrite(BUZZER_PIN, HIGH); + delayMicroseconds(125); + digitalWrite(BUZZER_PIN, LOW); + delayMicroseconds(125); + } + } +} + +//设置旋转编码器的起始值 +// sets start values for rotary encoder +void setRotary(int rmin, int rmax, int rstep, int rvalue) { + CountMin = rmin << ROTARY_TYPE; + CountMax = rmax << ROTARY_TYPE; + if (RotaryD) CountStep = rstep; else CountStep = -rstep; + Count = rvalue << ROTARY_TYPE; +} + +// reads temperature, vibration switch and supply voltages +void SENSORCheck() { + // shut off heater in order to measure temperature +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + delayMicroseconds(Time2settle); // wait for voltage to settle + + uint16_t temp = denoiseAnalog(SENSOR_PIN); // read ADC value for temperature + uint8_t d = digitalRead(SWITCH_PIN); // check handle vibration switch + if (d != d0) { + handleMoved = true; // set flag if handle was moved + d0 = d; + } + if (! SensorCounter--) Vin = getVIN(); // get Vin every now and then + + // turn on again heater + +#if UsePMOS + analogWrite(CONTROL_PIN, 255 - Output); +#else + analogWrite(CONTROL_PIN, Output); +#endif + + + RawTemp += (temp - RawTemp) * SMOOTHIE; // stabilize ADC temperature reading + calculateTemp(); + + // stabilize displayed temperature when around setpoint + if ((ShowTemp != Setpoint) || (abs(ShowTemp - CurrentTemp) > 5)) ShowTemp = CurrentTemp; + if (abs(ShowTemp - Setpoint) <= 1) ShowTemp = Setpoint; + // set state variable if temperature is in working range; beep if working temperature was just reached + gap = abs(SetTemp - CurrentTemp); + if (gap < 10) { + if (!IsWorky && BeepIfWorky) beep(); + IsWorky = true; + BeepIfWorky = false; + } else { + IsWorky = false; + BeepIfWorky = true; + } + // checks if tip is present or currently inserted + if (ShowTemp > 500) TipIsPresent = false; // tip removed ? + if (!TipIsPresent && (ShowTemp < 500)) { // new tip inserted ? + //关闭加热 +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + beep(); // beep for info + TipIsPresent = true; // tip is present now + ChangeTipScreen(); // show tip selection screen + updateEEPROM(); // update setting in EEPROM + handleMoved = true; // reset all timers + RawTemp = denoiseAnalog(SENSOR_PIN); // restart temp smooth algorithm + c0 = LOW; // switch must be released + setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, SetTemp); // reset rotary encoder + } +} + + + +// check rotary encoder; set temperature, toggle boost mode, enter setup menu accordingly +void ROTARYCheck() { + // set working temperature according to rotary encoder value + SetTemp = getRotary(); + + // check rotary encoder switch + uint8_t c = digitalRead(BUTTON_PIN); + if ( !c && c0 ) { + beep(); + Buttonmillis = millis(); + while ( (!digitalRead(BUTTON_PIN)) && ((millis() - Buttonmillis) < 500) ); + if ((millis() - Buttonmillis) >= 500) SetupScreen(); + else { + InBoostMode = !InBoostMode; + if (InBoostMode) Boostmillis = millis(); + handleMoved = true; + } + } + c0 = c; + + // check timer when in boost mode + if (InBoostMode && TimeOfBoost) { + GoneSeconds = (millis() - Boostmillis) / 1000; + if (GoneSeconds >= TimeOfBoost) { + InBoostMode = false; // stop boost mode + beep(); // beep if boost mode is over + BeepIfWorky = true; // beep again when working temperature is reached + } + } +} + + +// check and activate/deactivate sleep modes +void SLEEPCheck() { + if (handleMoved) { // if handle was moved + if (InSleepMode) { // in sleep or off mode? + if ((CurrentTemp + 20) < SetTemp) // if temp is well below setpoint + + // then start the heater right now + +#if UsePMOS + analogWrite(CONTROL_PIN, 255); +#else + analogWrite(CONTROL_PIN, 0); +#endif + + beep(); // beep on wake-up + BeepIfWorky = true; // beep again when working temperature is reached + } + handleMoved = false; // reset handleMoved flag + InSleepMode = false; // reset sleep flag + InOffMode = false; // reset off flag + Sleepmillis = millis(); // reset sleep timer + } + + // check time passed since the handle was moved + GoneMinutes = (millis() - Sleepmillis) / 60000; + if ( (!InSleepMode) && (Time2sleep > 0) && (GoneMinutes >= Time2sleep) ) { + InSleepMode = true; + beep(); + } + if ( (!InOffMode) && (Time2off > 0) && (GoneMinutes >= Time2off ) ) { + InOffMode = true; + beep(); + } +} + +void SetOLEDLightLevel(uint8_t level) { + arduboy.sendLCDCommand(0x81); //向SSD1306发送指令:设置内部电阻微调 + arduboy.sendLCDCommand(level); //微调范围(0-255) +} + +ISR(WDT_vect) //WDT中断,8秒一次 +{ + WDTCSR |= _BV(WDIE); +} diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/GUI.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/GUI.ino new file mode 100644 index 0000000..9f43ad5 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/GUI.ino @@ -0,0 +1,710 @@ + +// draws the main screen +void MainScreen() { + if (!(arduboy.nextFrame())) //帧率锁 + return; + //状态 + byte SysState; + if (ShowTemp > 500) SysState = 0; + else if (InOffMode) { + SysState = 1; + DrawIntensiveComputing(); + } else if (InSleepMode) SysState = 2; + else if (InBoostMode) SysState = 3; + else if (IsWorky) SysState = 4; + else if (Output < 180) SysState = 5; + else SysState = 6; + if (SysState != 1) { + if (MainScrType) { + //arduboy.invert(0); + arduboy.clear(); + //详细信息页 + arduboy.fillRect(0, 0, 128, 64, 1); //白底 + arduboy.setTextSize(1); + SetTextColor(0); + //预设名 + //arduboy.drawSlowXYBitmap(0, 0, Tag, 16, 16, 0); + arduboy.setCursor(7, 4); arduboy.print(TipName[CurrentTip]); + //显示状态 + arduboy.setCursor(53, 1); + arduboy.setTextSize(2); + switch (LANG) { + case 0: arduboy.drawSlowXYBitmap(95, 1, S_table[SysState], 28, 14, 0); break; //中文 Chinese + default: //英文 English + switch (SysState) { + case 1: arduboy.print(F("OFF")); break; + case 2: arduboy.print(F("SLEEP")); break; + case 3: arduboy.print(F("BOOST")); break; + case 4: arduboy.print(F("WORKY")); break; + case 5: arduboy.print(F("HEAT")); break; + case 6: arduboy.print(F("HOLD")); break; + default: arduboy.print(F("ERROR")); break; + } break; + } + + //运行状态图标 + arduboy.drawSlowXYBitmap(74, 1, C_table[SysState], 14, 14, 0); + arduboy.setTextSize(1); + + //显示探头温度 + DrawNumRect(0, 15, 5, ShowTemp); + + //状态条 + DrawStatusBar(0); + + //状态图标 以及 信息 + //自动报警-图标闪烁 + if (getChipTemp() < 80 || ((millis() * 4) / 1000) % 2) { + arduboy.setCursor(91, 20); arduboy.print(getChipTemp(), 1); arduboy.print((char)248); arduboy.print(F("C")); //芯片温度 + arduboy.drawSlowXYBitmap(42, 1, Chip, 14, 14, 0); + } + if ((float)Vin / 100 > UnderVoltage || ((millis() * 4) / 1000) % 2) { + arduboy.setCursor(91, 28); arduboy.print((float)getVIN() / 1000, 2); arduboy.print(F("V")); //输入电压 + arduboy.drawSlowXYBitmap(58, 1, Lightning, 14, 14, 0); + } + arduboy.setCursor(91, 36); arduboy.print((float)getVCC() / 1000, 3); arduboy.print(F("V")); //芯片电压 + arduboy.setCursor(91, 44); arduboy.print(RawTemp, 0); //烙铁头热偶原始数据 + + + + + arduboy.display(); + //警报声 + if (getChipTemp() > 80 && ((millis() * 4) / 1000) % 2 || (float)Vin / 100 < UnderVoltage && ((millis() * 4) / 1000) % 2) beep(); + } else { + //arduboy.invert(1); + arduboy.setTextSize(6); + SetTextColor(1); + arduboy.clear(); + if (getChipTemp() > 80 && ((millis() * 4) / 1000) % 2) beep(); + if ((float)Vin / 100 < UnderVoltage && ((millis() * 4) / 1000) % 2) beep(); + arduboy.setCursor(12, 2); + + if (ShowTemp > 500) arduboy.print(999); else arduboy.print(ShowTemp); + DrawStatusBar(1); + arduboy.display(); + } + } +} +void DrawNumRect(byte x, byte y, byte size, int n) { + arduboy.setCursor(3 + x, 3 + y); + arduboy.setTextSize(size); + if (ShowTemp > 500) arduboy.print(F("000")); else arduboy.print(n); + arduboy.drawRect(1 + x, 1 + y, 89, 39, 0); +} + +//绘制状态条 +void DrawStatusBar(bool color) { + SetTextColor(color); + arduboy.setTextSize(1); + //温度条 + //框 + arduboy.drawRect(1, 54, 102, 9, color); + //条 + if (ShowTemp <= 500) arduboy.fillRect(1, 54, map(ShowTemp, 0, 500, 2, 102), 9, color); + //指示部分 + arduboy.fillRect(map(Setpoint, 0, 500, 2, 102) - 2, 55, 3, 7, color); + //先来个白底 + arduboy.fillRect(map(Setpoint, 0, 500, 2, 102) - 3, 63, 5, 1, color); + arduboy.drawLine(map(Setpoint, 0, 500, 2, 102) - 1, 63, map(Setpoint, 0, 500, 2, 102) - 1, 54, !color); + + //画指示针 + arduboy.drawSlowXYBitmap(map(Setpoint, 0, 500, 2, 102) - 3, 59, Pointer, 5, 4, !color); + + //功率条 + arduboy.drawRect(104, 54, 23, 9, color); + arduboy.fillRect(104, 54, map(Output, 255, 0, 0, 23), 9, color); + + SetTextColor(!color); + //////////////进入反色//////////////////////////////// + arduboy.setCursor(2, 55); arduboy.print(Setpoint, 0);//探头预设温度 + arduboy.setCursor(105, 55); arduboy.print(map(Output, 255, 0, 0, 100)); arduboy.print(F("%")); //功率百分比 + SetTextColor(color); +} + +//设置画笔颜色 +void SetTextColor(bool color) { + arduboy.setTextBackground(!color); + arduboy.setTextColor(color); +} + + +// setup screen +void SetupScreen() { + //关闭加热 +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + beep(); + uint16_t SaveSetTemp = SetTemp; + uint8_t selection = 0; + bool repeat = true; + + while (repeat) { + //arduboy.invert(0); + MenuLevel = 0; //默认打开主菜单 + selection = MenuScreen(selection); + switch (selection) { + case 0: MenuLevel = 1; TipScreen(); repeat = false; break; + case 1: MenuLevel = 2; TempScreen(); break; + case 2: MenuLevel = 3; TimerScreen(); break; + case 3: MenuLevel = 4; PIDenable = MenuScreen(PIDenable); break; + case 4: ScreenSet(); break; + case 5: MenuLevel = 6; BeepEnable = MenuScreen(BeepEnable); break; + case 6: RotarySet(); break; + case 7: UnderVoltageSet(); break; + case 8: PasswordSet(); break; + case 9: MenuLevel = 8; LANG = MenuScreen(LANG); if (LANG == 2 && !LANG_JP_State) LANG = 1; break; + case 10: QRcodeScreen(); break; + default: repeat = false; break; + } + } + updateEEPROM(); + handleMoved = true; + SetTemp = SaveSetTemp; + setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, SetTemp); +} + +//设置滚轮方向 +void RotarySet() { + bool Exit = false; + float rad; + byte ExitBar = 0; + bool color = 0; + SetTextColor(!color); + lastbutton = (!digitalRead(BUTTON_PIN)); + setRotary(60, 420, 18, 240); + do { + arduboy.setTextSize(1); + Setpoint = getRotary(); + ShowTemp = Setpoint; + + arduboy.clear(); + + arduboy.fillRect(0, 0, 128, 64, color); + + //仪表盘 + arduboy.fillCircle(24 + 12 * cos(rad), 24 - 12 * sin(rad), 5, !color); + arduboy.drawCircle(24, 24, 20, !color); + + //右上角的模式提示文本 + arduboy.setCursor(55, 1); + arduboy.setTextSize(2); + arduboy.print(F("MODE ")); + if (RotaryD) { + arduboy.print(F("-")); + rad = ((Setpoint - 60) / 360.0) * (2 * PI) - PI / 2; + } else { + arduboy.print(F("+")); + rad = ((-Setpoint - 60) / 360.0) * (2 * PI) + PI * 1 / 6; + } + //右侧数字显示 + DrawNumRect(55, 18, 4, ShowTemp); + //下端的状态条 + DrawStatusBar(!color); + //退出条 + arduboy.fillRect(0, 0, ExitBar, 4, !color); + arduboy.display(); + CheckLastButton(); + if (!digitalRead(BUTTON_PIN) && !lastbutton) { + ExitBar += 8; + arduboy.display(); + if (ExitBar > 127) Exit = true; + } else { + if (ExitBar > 1 && ExitBar < 64) { + RotaryD = !RotaryD; + setRotary(60, 420, 18, 240); + beep(); + } + ExitBar = 0; + } + + } while (!Exit); + beep(); beep(); +} +//显示设置菜单 +// tip settings screen +void ScreenSet() { + uint8_t selection = 0; + bool repeat = true; + while (repeat) { + MenuLevel = 9; + selection = MenuScreen(selection); + switch (selection) { + case 0: MenuLevel = 5; MainScrType = MenuScreen(MainScrType); break; + case 1: FlipState = !FlipState; break; + default: repeat = false; break; + } + Flip(FlipState); //设置屏幕反转状态 + } + updateEEPROM(); +} + +//预设设置菜单 +// tip settings screen +void TipScreen() { + uint8_t selection = 0; + bool repeat = true; + while (repeat) { + MenuLevel = 1; + selection = MenuScreen(selection); + switch (selection) { + case 0: ChangeTipScreen(); break; + case 1: CalibrationScreen(); break; + case 2: InputNameScreen(); break; + case 3: DeleteTipScreen(); break; + case 4: AddTipScreen(); break; + default: repeat = false; break; + } + } +} + +//温控设置菜单 +// temperature settings screen +void TempScreen() { + uint8_t selection = 0; + bool repeat = true; + while (repeat) { + selection = MenuScreen(selection); + switch (selection) { + case 0: setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, DefaultTemp); + DefaultTemp = InputScreen(18); break; + case 1: setRotary(20, 200, TEMP_STEP, SleepTemp); + SleepTemp = InputScreen(19); break; + case 2: setRotary(10, 100, TEMP_STEP, BoostTemp); + BoostTemp = InputScreen(20); break; + default: repeat = false; break; + } + } + updateEEPROM(); +} + + +//定时器设置菜单 +// timer settings screen +void TimerScreen() { + uint8_t selection = 0; + bool repeat = true; + while (repeat) { + selection = MenuScreen(selection); + switch (selection) { + case 0: setRotary(0, 30, 1, Time2sleep); + Time2sleep = InputScreen(22); break; + case 1: setRotary(0, 60, 5, Time2off); + Time2off = InputScreen(23); break; + case 2: setRotary(0, 180, 10, TimeOfBoost); + TimeOfBoost = InputScreen(24); break; + default: repeat = false; break; + } + } + updateEEPROM(); +} +//英语支持 +//i-文本id c-居中 +void Print_EN(byte i) { + char buffer[11]; + byte a = 0; + strcpy_P(buffer, (char *)pgm_read_word(&(EN_table[i]))); + while (1) { + if (buffer[a] != '\0') a++; else break; + } + arduboy.setCursor((128 - a * 6) / 2, 52); + arduboy.print(buffer); +} +//菜单界面 +// menu screen +uint8_t MenuScreen(uint8_t selected) { + int SlidingAnimationX; + uint8_t lastselected = selected; + setRotary(0, Menu_table[MenuLevel] - 1, 1, selected); + lastbutton = (!digitalRead(BUTTON_PIN)); + SetTextColor(1); + do { + selected = getRotary(); + //非线性滑动动画 + SlidingAnimationX += (selected - lastselected) * 56; + if (SlidingAnimationX != 0) SlidingAnimationX += 0.55 * (-SlidingAnimationX); + lastselected = selected; + arduboy.clear(); + //绘制图标 如果有指定的话 + for (byte i = 0; i < 5; i++) if (selected - 2 + i >= 0 && selected - 2 + i < Menu_table[MenuLevel]) DrawApp(-72 + i * 56 + SlidingAnimationX, selected - 2 + i + QueryMenuObject()); + DrawAppText(selected + QueryMenuObject()); + + arduboy.display(); + CheckLastButton(); + //beep(0); + } while (digitalRead(BUTTON_PIN) || lastbutton); + beep(); + return selected; +} + +//显示APP图标 +void DrawApp(int x, byte appID) { + DrawUIFrame(x, 0, 1); + drawSlowXYBitmapResize(x + 3, 3, Ico_table[appID], 14, 14, 3, 1); +} + +//显示APP对应的文本 +void DrawAppText(byte appID) { + // arduboy.setCursor(0, 55); arduboy.print(appID); + if (LANG == 0) arduboy.drawSlowXYBitmap(48, 48, CN_table[appID], 36, 16, 1); else if (LANG == 2 && LANG_JP_State) { +#if LANG_JP_State + drawText(48, 52, JP_table[appID], pgm_read_byte(&(JP_Length_table[appID]))); +#endif + } else { + arduboy.setCursor(48, 52); + arduboy.setTextSize(1); + Print_EN(appID); + } +} + +void DrawUIFrame(int x, int y, bool color) { + arduboy.fillRect(x, y, 48, 48, color); + arduboy.fillRect(x + 3, y + 3, 42, 42, !color); //雕空 + DrawPoint(x, y, 0); + DrawPoint(x + 47, y, 0); + DrawPoint(x, y + 47, 0); + DrawPoint(x + 47, y + 47, 0); +} + +void DrawPoint(int x, int y, bool color) { + arduboy.drawPixel(x + 1, y, color); + arduboy.drawPixel(x - 1, y, color); + arduboy.drawPixel(x, y + 1, color); + arduboy.drawPixel(x, y - 1, color); + arduboy.drawPixel(x, y, color); +} + +//FP 密集运算屏保 +void DrawIntensiveComputing() { + //关闭加热 +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + float calculate; + // while (1) { + arduboy.clear(); + + //随机线条 + DrawIntensiveComputingLine(); + + calculate = sin(millis() / 4000.0); + //模拟噪点 + for (int i = 0; i < calculate * 256 + 256; i++) arduboy.drawPixel(random(0, 128), random(0, 64), 1); + //声效 + if ((BeepEnable)) analogWrite(BUZZER_PIN, 64 + calculate * 64 + random(-8, 8)); + //if ((BeepEnable)) tone(BUZZER_PIN, int(calculate * 300) + 500 + random(-50, 50)); //没必要浪费内存 + + arduboy.display(); + //delay(60-calculate*30); + //} +} +//绘制屏保-密集运算线条 +void DrawIntensiveComputingLine() { + for (byte a = 0; a < 4; a++) { + Line[a] += random(-1, 1); + if (Line[a] > 128) Line[a] -= 128; + for (byte b = 0; b < random(3, 6); b++) { + arduboy.drawFastHLine(0, Line[a] + random(-10, 10), 128, 1); //水平线 + arduboy.drawFastVLine(Line[a] + random(-10, 10), 0, 64, 1); //垂直线 + } + } +} +//模拟数字滚轮 Numerical scrolling effect +void DisplayNum(int Num) { + arduboy.setTextSize(6); + SetTextColor(0); + //数字滚轮 + for (byte i = 0; i < 3; i++) LastValue[i] = int(Value / pow(10, 2 - i)) % 10; + Value = Num; + for (byte i = 0; i < 3; i++) { + SlidingAnimationY[i] += ((int(Value / pow(10, 2 - i)) % 10) - LastValue[i]) * 50; + if (SlidingAnimationY[i] != 0) SlidingAnimationY[i] += 0.8 * (-SlidingAnimationY[i]); + arduboy.fillRect(0 + i * 44, 0, 38, 50, 1); //白底 + for (int ii = -1; ii < 2; ii++) { + arduboy.setCursor(4 + i * 44, 4 - SlidingAnimationY[i] + ii * 50); + arduboy.print(LastValue[i] + ii); + } + } + //刻度标 + arduboy.fillRect(0, 0, 128, 2, 0); //上遮罩层 + arduboy.fillRect(0, 48, 128, 16, 0); //下遮罩层 +} + +//数值输入界面 +// input value screen +uint16_t InputScreen(byte appID) { + lastbutton = (!digitalRead(BUTTON_PIN)); + do { + arduboy.clear(); + DisplayNum(getRotary()); + DrawAppText(appID); + arduboy.display(); + CheckLastButton(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + beep(); + return Value; +} + +//设置开机密码 +void PasswordSet() { + Password = InputBigNum(Password, 8); + beep(); +} + +void BootPassword() { + if (Password != 0) { + do { + arduboy.clear(); + DrawApp(40, 8); + DrawAppText(8); + arduboy.display(); + delay(1000); + beep(); beep(); beep(); + } while (InputBigNum(0, 8) != Password); + } +} + +//欠压报警设置 +// information display screen +void UnderVoltageSet() { + setRotary(0, 250, 1, UnderVoltage); + UnderVoltage = InputScreen(7); + beep(); +} + + +//更换烙铁头预设界面 +// change tip screen +void ChangeTipScreen() { + uint8_t selected = CurrentTip; + uint8_t lastselected = selected; + int8_t arrow = 0; + if (selected) arrow = 1; + setRotary(0, NumberOfTips - 1, 1, selected); + lastbutton = (!digitalRead(BUTTON_PIN)); + do { + //beep(0); + arduboy.clear(); + selected = getRotary(); + arrow = constrain(arrow + selected - lastselected, 0, 2); + lastselected = selected; + SetTextColor(0); + arduboy.setTextSize(2); + arduboy.setCursor(0, 0); arduboy.print(F("Select Tip")); + SetTextColor(1); + arduboy.setCursor(0, 16 * (arrow + 1)); arduboy.print(F(">")); + for (uint8_t i = 0; i < 3; i++) { + uint8_t drawnumber = selected + i - arrow; + if (drawnumber < NumberOfTips) { + arduboy.setCursor(12, 16 * (i + 1)); arduboy.print(TipName[selected + i - arrow]); + } + } + CheckLastButton(); + arduboy.display(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + + beep(); + CurrentTip = selected; + beep(); + ShowPTemp(&PTemp[CurrentTip][0]); + + +} + +//温度校准界面 +// temperature calibration screen +void CalibrationScreen() { + float P[4]; + int xx[9]; + for (int CalStep = 0; CalStep < 9; CalStep++) { + if (CalStep != 0) setRotary(0, 1023, 1, xx[CalStep - 1]); else setRotary(0, 1023, 1, 0); + BeepIfWorky = true; + lastbutton = (!digitalRead(BUTTON_PIN)); + do { + arduboy.clear(); + arduboy.setTextSize(1); + SENSORCheck(); //读取传感器 + SetTemp = getRotary(); + Thermostat(1); //加热控制 - ADC数值为基准 + + arduboy.setCursor(8, 0); + arduboy.print(F("Cal ADC-> ")); + arduboy.print(RawTemp); + + for (byte y = 0; y < 5; y++) { + for (byte x = 0; x < 2; x++) { + if (2 * y + x > CalStep) break; + arduboy.setCursor(x * 64 + 4, y * 8 + 16); + arduboy.print(CalTemp[2 * y + x]); + arduboy.print(F(" - ")); + if (2 * y + x == CalStep) arduboy.print(getRotary()); + else arduboy.print(xx[2 * y + x]); + } + } + + CheckLastButton(); + arduboy.display(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + xx[CalStep] = getRotary(); + beep(); delay (10); + } + + //关闭加热 +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + delayMicroseconds(Time2settle); // wait for voltage to settle + bool pass = true; + for (int i = 0; i < 8; i++) if (xx[i] + 5 >= xx[i + 1]) pass = false; + if (pass) { + MenuLevel = 7; + free(&pass); + polyfit(9, xx, CalTemp, 3, P); //拟合程序 + free(xx); + ShowPTemp(&P[0]); + if (MenuScreen(0)) { + for (uint8_t i = 0; i < 4; i++) PTemp[CurrentTip][i] = P[i]; //写入拟合系数 + free(P); + } + } else { + arduboy.clear(); + arduboy.setCursor(0, 24); arduboy.print(F("ERROR")); + arduboy.display(); + delay(5000); + } +} +//显示默认烙铁头温度曲线系数 +void ShowPTemp(float *p) { + arduboy.clear(); + arduboy.setTextSize(1); + for (int i = 0; i < 4; i++) { + arduboy.setCursor(12, i * 8 + 16); + arduboy.print(F("P[")); + arduboy.print(i, 7); + arduboy.print(F("] = ")); + arduboy.print(*p, 7); + p++; + } + arduboy.display(); + lastbutton = (!digitalRead(BUTTON_PIN)); + while (digitalRead(BUTTON_PIN) || lastbutton) CheckLastButton(); + +} +//命名界面 文本输入界面 +// input tip name screen +void InputNameScreen() { + uint8_t value; + for (uint8_t digit = 0; digit < (TIPNAMELENGTH - 1); digit++) { + lastbutton = (!digitalRead(BUTTON_PIN)); + setRotary(31, 96, 1, 65); + do { + value = getRotary(); + if (value == 31) { + value = 95; + setRotary(31, 96, 1, 95); + } + if (value == 96) { + value = 32; + setRotary(31, 96, 1, 32); + } + //arduboy.setCursor(0, 0);arduboy.print(); + arduboy.clear(); + arduboy.setTextSize(2); + arduboy.setCursor(16 * digit, 48); arduboy.print(char(94)); + arduboy.setCursor(0, 32); + for (uint8_t i = 0; i < digit; i++) arduboy.print(TipName[CurrentTip][i]); + arduboy.setCursor(16 * digit, 32); arduboy.print(char(value)); + CheckLastButton(); + arduboy.display(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + TipName[CurrentTip][digit] = value; + beep(); delay (10); + } + TipName[CurrentTip][TIPNAMELENGTH - 1] = 0; + return value; +} + + +// delete tip screen +void DeleteTipScreen() { + MenuLevel = 7; + if (NumberOfTips == 1) { + //MessageScreen(DeleteMessage, sizeof(DeleteMessage)); + } + else if (MenuScreen(0)) { + if (CurrentTip == (NumberOfTips - 1)) { + CurrentTip--; + } + else { + for (uint8_t i = CurrentTip; i < (NumberOfTips - 1); i++) { + for (uint8_t j = 0; j < TIPNAMELENGTH; j++) TipName[i][j] = TipName[i + 1][j]; + } + } + NumberOfTips--; + } +} + +//新建烙铁 预设 +// add new tip screen +void AddTipScreen() { + if (NumberOfTips < TIPMAX) { + CurrentTip = NumberOfTips++; InputNameScreen(); + PTemp[CurrentTip][0] = TempP1; + PTemp[CurrentTip][1] = TempP2; + PTemp[CurrentTip][2] = TempP3; + PTemp[CurrentTip][3] = TempP4; + } +} + +int InputBigNum(int InputPW, byte appID) { + setRotary(0, 900, 100, InputPW); + InputPW = InputScreen(appID); + setRotary(InputPW, InputPW + 90, 10, InputPW); + InputPW = InputScreen(appID); + setRotary(InputPW, InputPW + 9, 1, InputPW); + InputPW = InputScreen(appID); + return InputPW; +} +void QRcodeScreen() { + arduboy.clear(); + arduboy.drawSlowXYBitmap(40, 0, QRCode, 48, 48, 1); + arduboy.display(); + delay(100); + do { + } while (digitalRead(BUTTON_PIN) || lastbutton); + beep(); +} + +//位图缩放 代码片段改自arduboy2 +void drawSlowXYBitmapResize(int x, int y, const uint8_t *bitmap, uint8_t w, uint8_t h, uint8_t size, uint8_t color) { + int16_t xi, yi, byteWidth = (w + 7) / 8; + for (yi = 0; yi < h; yi ++) { + for (xi = 0; xi < w; xi ++) { + if (pgm_read_byte(bitmap + yi * byteWidth + xi / 8) & (128 >> (xi & 7))) { + arduboy.fillRect(x + xi * size, y + yi * size, size, size, color); + } + } + } +} + +//翻转 +void Flip(bool Fmode) { + arduboy.flipVertical(Fmode); + arduboy.flipHorizontal(Fmode); +} + +//展示版本号 +void ShowVersion() { + arduboy.clear(); + arduboy.setCursor(43, 28); + arduboy.print(F(VERSION)); + arduboy.display(); + delay(1000); +} diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/WDT.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/WDT.ino new file mode 100644 index 0000000..6fd9c38 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/WDT.ino @@ -0,0 +1,54 @@ +//********** 看门狗函数 ********** +void set_wdt_mod(uint8_t mod, uint8_t ii) //模式,超时时间 +{ + /* + WDCE + 该位在定时序列中用于更改WDE和预分频器位 + 要清除WDE位或更改预分频器位,必须将WDCE置1。 + 一旦写入1,硬件将在四个时钟周期后清除WDCE。 + 0=16ms,1=32ms,2=64ms,3=128ms,4=250ms + 5=500ms,6=1s,7=2s,8=4s,9=8s + */ + if (ii > 9 ) ii = 9; + byte bb; + bb = ii & 7; + if (ii > 7) bb |= (1 << 5); + bb |= (1 << WDCE); + + switch (mod) { + case 0: //关闭看门狗 + __asm__ __volatile__ ("wdr"); //看门狗复位 + MCUSR = 0x00; //看门狗复位标志清零 + WDTCSR = (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1 + WDTCSR = 0x00; //清除所有预分频位 + break; + + case 1: //打开看门狗,设置复位模式 + __asm__ __volatile__ ("wdr"); //看门狗复位 + MCUSR &= ~(1 << WDRF); //MUUSR中的WDRF清零,清除复位标志 + WDTCSR |= (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1 + //设置新的看门狗超时值bb + WDTCSR = bb; //8秒时bb=0011 0001 + WDTCSR |= _BV(WDE); //设置复位模式 + break; + + case 2: //打开看门狗,设置中断模式 + __asm__ __volatile__ ("wdr"); //看门狗复位 + MCUSR &= ~(1 << WDRF); //MUUSR中的WDRF清零,清除复位标志 + WDTCSR |= (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1 + //设置新的看门狗超时值bb + WDTCSR = bb; //8秒时bb=0011 0001 + WDTCSR |= _BV(WDIE); //设置中断模式 + break; + + case 3: //打开看门狗,设置中断和复位模式 + __asm__ __volatile__ ("wdr"); //看门狗复位 + MCUSR &= ~(1 << WDRF); //MUUSR中的WDRF清零,清除复位标志 + WDTCSR |= (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1 + //设置新的看门狗超时值bb + WDTCSR = bb; //8秒时bb=0011 0001 + WDTCSR |= _BV(WDIE); //设置中断模式 + WDTCSR |= _BV(WDE); //设置复位模式 + break; + } +} diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/1.8t7.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/1.8t7.ino new file mode 100644 index 0000000..aba2842 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/1.8t7.ino @@ -0,0 +1,350 @@ +/*License: http://creativecommons.org/licenses/by-sa/3.0/ + 采用CC3.0协议共享此程序 + 您可以自由地 + 共享 — 在任何媒介以任何形式复制、发行本作品 + 演绎 — 修改、翻译或以本作品为基础进行创作 + 在任何用途下,甚至商业目的。 + 本许可协议为“自由文化作品(Free Cultural Works)”所接受。 + 只要你遵守许可协议条款,许可人就无法收回你的这些权利。 + + Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) + This is a human-readable summary of (and not a substitute for) the license. Disclaimer. + You are free to: + Share — copy and redistribute the material in any medium or format + Adapt — remix, transform, and build upon the material + for any purpose, even commercially. + This license is acceptable for Free Cultural Works. + The licensor cannot revoke these freedoms as long as you follow the license terms. +*/ +// SolderingStation2 +// +// ATmega328-controlled Soldering Station for Hakko T12 Tips. +// 此v1.8t7版本功能简介 +// This 1.8t7 version of the code implements: +// - 烙铁头温度实时监测 +// - Temperature measurement of the tip +// - PID温度控制 +// - Direct or PID control of the heater +// - 可以通过编码器进行控制温度 +// - Temperature control via rotary encoder +// - 短按编码器进入短时升温模式 +// - Boost mode by short pressing rotary encoder switch +// - 长按编码器进入主菜单 +// - Setup menu by long pressing rotary encoder switch +// - 手柄震动检测(需要手柄含有震动传感器) +// - Handle movement detection (by checking ball switch) +// - 手柄连接检测(通过判断烙铁头温度是否能够被读取来实现) +// - Iron unconnected detection (by idenfying invalid temperature readings) +// - 定时器设定 - 随眠,关机时间 +// - Time driven sleep/power off mode if iron is unused (movement detection) +// - 可以测量主控芯片电压以及温度 +// - Measurement of input voltage, Vcc and ATmega's internal temperature +// - 在OLED上实现信息显示 +// - Information display on OLED +// - 支持无源蜂鸣器 +// - Buzzer +// - 允许设置不同烙铁头的温度校准值 +// - Calibrating and managing different soldering tips +// - 设置被保存在EEPROM,掉电不丢失 +// - Storing user settings into the EEPROM +// - 允许热插拔烙铁头,并弹出烙铁头配置选择菜单 +// - Tip change detection +// - 芯片过热以及低电压报警 +// - Chip overheating and low voltage alarm +// - 更好的实时温度条以及实时功率条 +// - Better real-time temperature bar and real-time power bar +// - 拥有过渡动画 +// - Have transition animation +// - 内置屏幕保护程序 +// - Built in screen saver +// - 屏幕翻转设置 +// - Screen flip settings +// - 内置英文、中文、日文语言包 +// - Built in English, Chinese and Japanese language pack +// - 开机密码设置 +// - System Password +// - 允许设置旋钮方向 +// - Knob direction setting menu +// - 内嵌看门狗,宕机自动重启 +// - Watchdog timer automatic reset the MCU + +// - V1.8t7 New features: +// ------ EEPROM可用性检查机制 +// ------ EEPROM availability check + +// ------ 允许保存最大30个烙铁头的配置 +// ------ 30 preservable soldering tip configurations + +// ------ 9段温度曲线拟合 +// ------ 9 segments of temperature curve fitting + +/* +增加"EEPROM"和"RESET." 指令,可以给标签命名为指令的名字,点击标签即可执行 +关于"EEPROM"指令:查看EEPROM内容 +关于"RESET."指令:重置EEPROM *警告! 你会失去所有烙铁头的温度校准数据!!! + +Add "EEPROM" and "RESET." to give the label the name of the instruction. Click the label to execute +Regarding "EEPROM" instruction: View EEPROM contents +Regarding "RESET." instruction: RESET EEPROM +* warning! You will lose all the temperature calibration data for the tip of the soldering iron!! +*/ + + +// Power supply should be in the range of 16V/2A to 24V/3A and well +// stabilized. +// +// For calibration you need a soldering iron tips thermometer. For best results +// wait at least three minutes after switching on the soldering station before +// you start the calibration process. +// +// Controller: ATmega328p +// Core: Barebones ATmega (https://github.com/carlosefr/atmega) +// Clockspeed: 16 MHz external +// +// 2019/2020 by Stefan Wagner with great support from John Glavinos +// 2020-8 UI upgrade by LHW-createskyblue 、lihaoyun6 +// Project Page: https://easyeda.com/wagiminator + + +bool lastbutton; +#include //注意 这里使用被阉割的图形库,只有绘图功能,并非通用的版本 +Arduboy2 arduboy; + +#include +#include +#include +// Firmware version +#define VERSION "v1.8t7" + +// Type of rotary encoder +#define ROTARY_TYPE 1 // 0: 2 increments/step; 1: 4 increments/step + +// Pins +#define SENSOR_PIN A0 // temperature sense +#define VIN_PIN A1 // input voltage sense +#define BUZZER_PIN 5 // buzzer +#define BUTTON_PIN 6 // rotary encoder switch +#define ROTARY_1_PIN 7 // rotary encoder 1 +#define ROTARY_2_PIN 8 // rotary encoder 2 +#define CONTROL_PIN 9 // heater MOSFET PWM control +#define SWITCH_PIN 10 // handle vibration switch + +// Default temperature control values (recommended soldering temperature: 300-380°C) +#define TEMP_MIN 100 // min selectable temperature +#define TEMP_MAX 400 // max selectable temperature +#define TEMP_DEFAULT 320 // default start setpoint +#define TEMP_SLEEP 150 // temperature in sleep mode +#define TEMP_BOOST 60 // temperature increase in boost mode +#define TEMP_STEP 5 // rotary encoder temp change steps + +// Default tip temperature calibration values +#define TEMPCHP 30 // chip temperature while calibration +#define TIPMAX 30 // max number of tips +#define TIPNAMELENGTH 7 // max length of tip names (including termination) +#define TIPNAME "SZtip" // default tip name + + +// Default timer values (0 = disabled) +#define TIME2SLEEP 5 // time to enter sleep mode in minutes +#define TIME2OFF 15 // time to shut off heater in minutes +#define TIMEOFBOOST 40 // time to stay in boost mode in seconds + +// Control values +#define TIME2SETTLE 950 // time in microseconds to allow OpAmp output to settle +#define SMOOTHIE 0.05 // OpAmp output smooth factor (1=no smoothing; 0.05 default) +#define PID_ENABLE true // enable PID control +#define BEEP_ENABLE true // enable/disable buzzer +#define MAINSCREEN 1 // type of main screen (0: big numbers; 1: more infos) + +// EEPROM identifier +#define EEPROM_IDENT 0x140C // to identify if EEPROM was written by this program + +//Beep +#define SetBeepCoolTime 200 +unsigned long BeepCoolTime; + +// Define the aggressive and conservative PID tuning parameters +double aggKp = 11, aggKi = 0.5, aggKd = 1; +double consKp = 11, consKi = 3, consKd = 5; + +// Default values that can be changed by the user and stored in the EEPROM +uint16_t DefaultTemp = TEMP_DEFAULT; +uint16_t SleepTemp = TEMP_SLEEP; +uint8_t BoostTemp = TEMP_BOOST; +uint8_t Time2sleep = TIME2SLEEP; +uint8_t Time2off = TIME2OFF; +uint8_t TimeOfBoost = TIMEOFBOOST; +uint8_t MainScrType = MAINSCREEN; +bool PIDenable = PID_ENABLE; +bool BeepEnable = BEEP_ENABLE; + +//温度拟合 +#define TempP1 10.2675914764 +#define TempP2 1.7323191166 +#define TempP3 -0.0033245713 +#define TempP4 0.0000045338 +float PTemp[4] = {TempP1, TempP2, TempP3, TempP4}; //温度拟合系数 +const uint16_t CalTemp[9] = {50, 100, 150, 200, 250, 300, 350, 400, 450}; +char TipName[TIPNAMELENGTH] = {TIPNAME}; +uint8_t CurrentTip = 0; +uint8_t NumberOfTips = 1; + +// Variables for pin change interrupt +volatile uint8_t a0, b0, c0, d0; +volatile bool ab0; +volatile int Count, CountMin, CountMax, CountStep; +volatile bool handleMoved; + +// Variables for temperature control +uint16_t SetTemp, ShowTemp, gap, Step; +double Input, Output, Setpoint, RawTemp, CurrentTemp, ChipTemp; + +// Variables for voltage readings +uint16_t Vcc, Vin; + +// State variables +bool InSleepMode = false; +bool InOffMode = false; +bool InBoostMode = false; +bool InCalibMode = false; +bool IsWorky = true; +bool BeepIfWorky = true; +bool TipIsPresent = true; +bool FlipState = false; +// Timing variables +uint32_t Sleepmillis; +uint32_t Boostmillis; +uint32_t Buttonmillis; +uint8_t GoneMinutes; +uint8_t GoneSeconds; +uint8_t SensorCounter = 255; +//串口助手 +//int x, y, a, b; +//欠压报警 +byte UnderVoltage = 0; +// Control variables +uint16_t Time2settle = 300; + +//模拟数字滚轮 Numerical scrolling effect +int Value; +int LastValue[3]; +int SlidingAnimationY[3]; + +//开机密码 BootPassword +int Password = 0; + +//屏幕保护-主题:密集运算 +byte Line[4]; + +//编码器旋转调整方向设定 +bool RotaryD = false; + +//开机非线性动画 +byte BootAnimationY = 64; + +// Specify the links and initial PID tuning parameters +PID ctrl(&Input, &Output, &Setpoint, aggKp, aggKi, aggKd, REVERSE); + +//NMOS - PMOS软件切换 +#define UsePMOS false + +//LANG 语言支持 +/* 0 - 中文 CHINESE + 1 - 英文 ENGLISH + 2 - 日语 x (此版本不支持) +*/ +byte LANG = 1; + + + +void setup() { + //设置看门狗自动复位 + set_wdt_mod(3, 7); + + //启动arduboy内核 + arduboy.begin(); + arduboy.setFrameRate(15); + + //Serial.begin(115200); + + // set the pin modes + //设置IO + pinMode(SENSOR_PIN, INPUT); + pinMode(VIN_PIN, INPUT); + pinMode(BUZZER_PIN, OUTPUT); + pinMode(CONTROL_PIN, OUTPUT); + pinMode(ROTARY_1_PIN, INPUT_PULLUP); + pinMode(ROTARY_2_PIN, INPUT_PULLUP); + pinMode(BUTTON_PIN, INPUT_PULLUP); + pinMode(SWITCH_PIN, INPUT_PULLUP); +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); // this shuts off the heater +#endif + digitalWrite(BUZZER_PIN, LOW); // must be LOW when buzzer not in use + + //初始化ADC + //setup ADC + ADCSRA |= bit (ADPS0) | bit (ADPS1) | bit (ADPS2); // set ADC prescaler to 128 + ADCSRA |= bit (ADIE); // enable ADC interrupt + interrupts (); // enable global interrupts + + //初始化编码器IO + // setup pin change interrupt for rotary encoder + PCMSK0 = bit (PCINT0); // Configure pin change interrupt on Pin8 + PCICR = bit (PCIE0); // Enable pin change interrupt + PCIFR = bit (PCIF0); // Clear interrupt flag + + //从EEPROM读取设置 + // get default values from EEPROM + GetEEPROM(); + + //设置屏幕反转状态 + Flip(FlipState); + + //设置屏幕亮度 + SetOLEDLightLevel(32); //降低屏幕亮度 延长OLED使用寿命 + + //初始化屏幕保护动画 + for (byte a = 0; a < 4; a++) Line[a] = 32 * a; + + //密码保护 + BootPassword(); + // read supply voltages in mV + Vcc = getVCC(); Vin = getVIN(); + // read and set current iron temperature + SetTemp = DefaultTemp; + RawTemp = denoiseAnalog(SENSOR_PIN); + ChipTemp = getChipTemp(); + CurrentTemp = calculateTemp(RawTemp); + // turn on heater if iron temperature is well below setpoint +#if UsePMOS + if ((CurrentTemp + 20) < DefaultTemp) analogWrite(CONTROL_PIN, 255); +#else + if ((CurrentTemp + 20) < DefaultTemp) analogWrite(CONTROL_PIN, 0); +#endif + // tell the PID to range between 0 and the full window size + ctrl.SetOutputLimits(0, 255); + // start PID + ctrl.SetMode(AUTOMATIC); + // set initial rotary encoder values + a0 = PINB & 1; b0 = PIND >> 7 & 1; ab0 = (a0 == b0); + setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, DefaultTemp); + // reset sleep timer + Sleepmillis = millis(); + + // long beep for setup completion + beep(); beep(); + ShowVersion(); +} + +void loop() { + //HelpMeSerialer(); + ROTARYCheck(); // check rotary encoder (temp/boost setting, enter setup menu) + SLEEPCheck(); // check and activate/deactivate sleep modes + SENSORCheck(); // reads temperature and vibration switch of the iron + Thermostat(0); // heater control + MainScreen(); // updates the main page on the OLED + //beep(0); +} diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/1.8t7.ino.standard.hex b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/1.8t7.ino.standard.hex new file mode 100644 index 0000000..5e53aee --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/1.8t7.ino.standard.hex @@ -0,0 +1,1980 @@ +:100000000C94EF0C0C94170D0C94170D0C94AF225C +:100010000C94170D0C94170D0C949A220C94170D38 +:100020000C94170D0C94170D0C94170D0C94170DC0 +:100030000C94170D0C94170D0C94170D0C94170DB0 +:100040000C9450220C94170D0C94170D0C94170D52 +:100050000C94170D0C9486230C94170D0C94170D0B +:100060000C94170D0C94170D05A84CCDB2D44EB9B5 +:100070003836A9020C50B9918688083CA6AAAA2A4B +:10008000BE000000803F07634236B79BD8A71A39ED +:10009000685618AEBAAB558C1D3CB7CC5763BD6DD6 +:1000A000EDFD753EF6177231BF000000803F08007D +:1000B0000000BE922449123EABAAAA2ABECDCCCCE7 +:1000C0004C3E00000080BEABAAAAAA3E0000000081 +:1000D000BF000000803F0000000000084178D3BB53 +:1000E0004387D1133D190E3CC3BD4282AD2B3E6800 +:1000F000EC8276BED98FE1A93E4C80EFFFBE01C4F1 +:10010000FF7F3F0000000000800400003FF0383017 +:1001100033103F90381033902790261030903FF0E6 +:1001200000008004800400003FF03870303023105D +:10013000279020102010279027903FF00000800487 +:10014000800400003FF03CF03CF02010249024900C +:1001500020103CF03CF03FF00000800480040000E0 +:100160003FF037B023103030387038703030231003 +:1001700037B03FF000008004FCF4F860E044C08C2D +:10018000C11CC22CC44CC88CD10CA204C4048FFC6A +:10019000187CBCFC8000BFF81FF8B0281FF8B4081A +:1001A0001FF8B1081FF8B048BFF8B288BFF8800048 +:1001B0008000BFF81FF8B0081808B9E819B8B838B7 +:1001C0001838B9B8B9F8B0F8BFF8800015543FF83E +:1001D00015503FF01550387010203104138C22A8B0 +:1001E00017FC2AA80000000015543FFC15543FFCE2 +:1001F00015543C0414043CFC14543CFC005400A86A +:1002000000000000800400003FF03CF034B0249077 +:10021000249027902310303038703FF00000800485 +:10022000FF7CFE7CFCECE8DCC84C984C8824082061 +:1002300000000000000000008004E01CF3FCE7FC6C +:10024000CE0C8E1C9F9C1F3C1F0C0E0C0FFC87F8C5 +:1002500081E4C00CE01CF87C0004580858085808D9 +:1002600040087FF860185FE85B685FE85B681CE83F +:100270005FE80000800400003FF03CF03CF03CF000 +:10028000201020103CF03CF03CF03FF000008004D7 +:10029000F87CF7BC00007FF80000BFF4AB54AB540F +:1002A000AB54AB54AB54AB54BFF4C00CF03CCE0CCD +:1002B000BF04B30473007F007E007C007C007C6080 +:1002C000BC64BE04CF0CF03C81DC559C2904550075 +:1002D000299055D003FCFF002E002670025082703A +:1002E000E600EE04800C001C3FF43FE03FC4378C76 +:1002F0002318303038703CF03FF03FF000008004AD +:10030000058074B857A876B80580F97C4694AAA8E9 +:10031000F97C068874A8578C75740698F03CCE4C0E +:10032000BC34B814188010804230607860F844C043 +:100330008004B884CFCCF03CE01CC00C8FC49FE498 +:100340009FE49FE400000300030003000780078090 +:1003500003008004F87CC00CC00CCFCCCFCCCFCC39 +:10036000CFCCCFCCCFCCC84CC84CCFCCC00CC00C61 +:10037000F87C8004BCF43FF03870B7B4B6B4B5B4C0 +:10038000B7B438703FF0BCF48004F87CFCFCF87C17 +:10039000E01CC00CC00CC00CC00CC00CC00C800415 +:1003A0008004FFFCF87CFCFC8004000020001000AE +:1003B00008001000270000000000000000000000FE +:1003C00000008004C3FC18001800C3FCFFFCFF0CF5 +:1003D00000600060FF0CFFFCF0FC06000600F0FC73 +:1003E0008FC4102020104CC89FE43DF03DF01DE06C +:1003F0003EF03F709FE48CC400003030F87CF33C4A +:10040000F4BCF6BCF4BCF6BCF4BCE49CC84CD02CE8 +:10041000D02CC84CE79CF03C882408203830383079 +:10042000383038303830383039303BB03FF03FF07A +:100430000000800400000000000F1DC208000544F9 +:1004400042080003845FBF000FE44410000115451B +:100450001000054CC97F8009244F900007C4C110CB +:1004600000054D413F00055443810007C44D020083 +:100470000544411400055541080007C881040000E7 +:1004800000000000000000000001083FFE001FFF08 +:10049000810000004002000007FE0FF8000402087F +:1004A0000800040208880007FE0888000402088883 +:1004B00000040208880007FE0888000402094800BA +:1004C000040202300007FE040C00040218040000BD +:1004D00000000000000000000007FE13FE00040200 +:1004E0000840000402084000040201FC0004023835 +:1004F0008400040208840007FE0FFF0004020800C5 +:1005000000040209FE00040209020004020B0200BA +:1005100004020D020007FE09FE00040201020000B1 +:1005200000000000000000000001100080001FFF1C +:1005300080800001103FFF00004004080007FC0419 +:100540000800044404100004440210000444022083 +:10055000001FFF812000004000C00000A00130000B +:100560000110020800060C0C07001803B00200007E +:10057000000000000000000000004000800000407B +:100580000080000FFF3FFF000841040800084104FD +:100590000800084104100008410210000FFF02206B +:1005A000000841012000004000C000004001300070 +:1005B000004002080000400C07000040300200002C +:1005C0000000000000000000001FDF1020000212E9 +:1005D0000C20000224042000047F8020000424B8A2 +:1005E00020000FA488500014BF88500004A4885035 +:1005F0000004A488480004BF88880004A48A8800F6 +:1006000007A48C840004448907000081860200004E +:100610000000000000000000000FF0049100044002 +:10062000025200047F905400045088FF0007D084D9 +:1006300081000451008100044901FF0007CA0281C2 +:10064000000444048100044A1CFF0007EA048100FE +:100650000C510481000061C48500004080820000CC +:1006600000000000000000000007FF802000008460 +:1006700007FF0000840401000084040100008404DA +:1006800001000FFFC7FF0000840400000084040085 +:1006900000008405FF000084050100010409010039 +:1006A0000104090100020411FF000404010100001B +:1006B000000000000000000000008204FF00004471 +:1006C00002010007FF902100001010210000101708 +:1006D000FD0000101021000FFFD06100001010A1DC +:1006E00000002811210000281221000044142100DC +:1006F000008210A1000301D045000C009002000010 +:10070000000000000000000000084410FE00042863 +:1007100010920005FF22920000103C920000100889 +:1007200092001CFE109200041020FE0004103E9265 +:100730000005FF809200041000920005100E920048 +:100740000610309200041000FE000010008200002D +:1007500000000000000000000007DF8840000A24BD +:10076000104000114210FE00040022820002FF3DF2 +:10077000020008010A420009F9103200090920129A +:100780000009F93E0200090900020009090E0200F1 +:1007900009F93022000805001400080200080000D2 +:1007A0000000000000000000000FC3F1E0000FE3B4 +:1007B000F1F8000C70C19E000C30C186000C30C1F5 +:1007C00083000C30C183000C60C183000C60C183C6 +:1007D000000FC0C183000FC0C186000C00C186009D +:1007E0000C00C198000C03F1F8000C03F1E00000CC +:1007F00000000000000000000000200820000FFFA3 +:1008000009FC00002008000000203E880003FE08CC +:10081000500002020BFE0003FE0C400002021840D2 +:100820000003FE2BFE00020208480003FE088800B9 +:10083000020208500002022830001FFF91CC000085 +:10084000000000000104047C0000880444000FFF45 +:100850003F4400002004440000200C440000200E0F +:1008600044001FFF9544000020144400005024441D +:100870000000500444000088044500010404850081 +:1008800006038503001801040000000000000000BA +:100890000000000002FE01000002823FFF0004820F +:1008A00002000004FE0200000C1004FC00141004FE +:1008B000080005FF8C10000410141000043825FFF8 +:1008C0000004340410000452041000049184100049 +:1008D0000510045000041004200000000000000077 +:1008E000000000000000000000047E21FC00044223 +:1008F0001104001F7E090400044221FC000542117E +:100900000400067E1104000C0005FC0015FF8800A1 +:1009100000040813FE000448325200044F12520033 +:10092000044812520014A8125200091F97FF000039 +:1009300000000000000000000002103DFC0002105A +:10094000250400041025040005FFBDFC000C102543 +:1009500020000C38252000143825FE0004543D20CA +:1009600000045425100004922510000511A509006B +:1009700006113D450004102583000410010100000C +:100980000000000000000000001FC8102000124AF4 +:100990000C20001AC904200017480020001FFFB8CF +:1009A000200002080850001FC80850000208085024 +:1009B0000003C80848001E1408880001540A880073 +:1009C00015220C84001443890700008106020000F0 +:1009D00000000000000000000002030010001FDC07 +:1009E0003EFE000890021200051004FF001FDF8485 +:1009F000120002120CFE001FD2021000021222FE90 +:100A0000000A921410000A5214100012220DFF0066 +:100A100002220810000A42141000040223FF000002 +:100A20000000000000000000000F78BC2000094812 +:100A3000A45000094AA85000094AA88800094AB1F0 +:100A400004001FFEAAFB00094AA42000094AA420B2 +:100A500000094AA7FE00094AB420000948A9240059 +:100A60000B48A22200088AA4A2001119204000000D +:100A70000000000000000000000020008000005086 +:100A800001FC000088010400010403080006FB04C7 +:100A900090000800C0600007DF01800004510600DC +:100AA0000004511BFE00045102020007D90202009B +:100AB0000456020200001003FE00001002020000B3 +:100AC0000000000000000000000208209000027FEB +:100AD0009890001F8009FF00022201100006218B60 +:100AE000100007628DFE000AA20910000A141110FE +:100AF00000121431FE00020811100002141110003F +:100B00000222111000024391FF0002811100000037 +:100B1000000000000000000000100700000008F8BE +:100B20003FFE000480200200008020020000BE235F +:100B3000E2001C8222220004A42222000494222229 +:100B4000000488222200049423E2000522200200EF +:100B500005422002000A003FFE0011FFA002000033 +:100B600000000000000000000000820FFE000044B2 +:100B700000400007FF80400000100040000010000F +:100B8000400000101FFF800FFFC040000010004019 +:100B90000000280040000028004000004400400001 +:100BA00000820040000301C140000C008080000072 +:100BB0000000000009FF00400004203FFF00042067 +:100BC00000000000FE0000001C420FFC0004420078 +:100BD000000007FF80000004000FFC0004FF00007D +:100BE00000048100000005810FFC0006810804005C +:100BF00004FF08040000810FFC000000000000005A +:100C000000000000000000000000401F7E001FFFE9 +:100C100084020010808442000A4A0442000A31081B +:100C2000420012C50F42000304197F001DF829017C +:100C3000000040090100084209FD000842090100C6 +:100C400008420F01000FFE0905000002000200002B +:100C500000000000000000000001000FFE00010085 +:100C600008200003FF0820000201082000042208D9 +:100C7000200008200BFE001020082000005008284B +:100C8000000050082400008808220000881020007E +:100C900001041020000203A7FF000C010000000067 +:100CA000000000000008000000021F88FE001FD0A6 +:100CB0000E22000420302200045F80220007849E60 +:100CC000220004850822000494082200049428FECF +:100CD0000004971E42000494084200089408420051 +:100CE0000AAC0A420011440C4200008389FF000054 +:100CF00000000000000000000000400080001FFF16 +:100D00009FFC0000400410000FFF02200000003F85 +:100D1000FF000FFE00000008420FF800084208081C +:100D2000000FFE08080008020FF80008000808007D +:100D3000080008080008000FF8001000080800006C +:100D400000000000000000000007FE0FF800040291 +:100D5000000000040200000007FE00000004023F43 +:100D6000FE00040200800007FE0080000090049056 +:100D70000008910C880006931086000294208200DF +:100D8000009000800000900280001FFF81000000A2 +:100D9000000000000000000000041012020005FF27 +:100DA0009FD20005009212001E28A2120004443FA8 +:100DB000F200048202120006000212000CFE1FD292 +:100DC00000141012520004101242000410134200CA +:100DD000041012820015FF820A00080002040000BD +:100DE00000000000000000000000200000000020C3 +:100DF0003E04001FFFA204001000A2FF0000012219 +:100E000004000FFE22040000403E44000040222463 +:100E1000000440222400047C220400044022040038 +:100E20000A403E0400094022240010FF8014000004 +:100E300000000800000000000010FE0820000882EA +:100E40000BFF0004820A010010FE3C5100088208DA +:100E50008800088209040002FE0C0000040019FC4E +:100E60000009FF282000192908200009290820006E +:100E7000092908200009292BFF000BFF9000000022 +:100E80000000000000000000001F7F90F800010833 +:100E90000888000A10088800047F0107001FC13A73 +:100EA0000000054909FC0004490884000449088839 +:100EB000000449084800044908500004490A200079 +:100EC00004160C5800142189870008C0860200000F +:100ED000000000005361766500466C6970004D614A +:100EE000696E2053637265656E004A5000454E007E +:100EF000434E00594553004E4F004F4E004F46465B +:100F000000496E666F7300426967005049440044AF +:100F10006972656374005361766500426F6F737424 +:100F2000004F666600536C6565700053617665001E +:100F3000426F6F737400536C656570004465666141 +:100F4000756C74004164640044656C65746500529E +:100F5000656E616D650043616C6962726174650004 +:100F60004368616E67650052657475726E00416218 +:100F70006F7574004C616E67004C6F636B004C4F73 +:100F80005720566F6C00526F746172790042757A07 +:100F90007A65720053637265656E00436F6E74729A +:100FA0006F6C0054696D65720054656D7000546912 +:100FB00070001FE03FF07038601860186018FFFC88 +:100FC000FCFCFCFCFCFCF87CF87CFCFC7FF81E10B4 +:100FD00033382D7C25382D3825382D386D80DEC0EE +:100FE000BF40BF40DEC061803F007FF0FFE0C0082F +:100FF000C01CC038C870DCE4CFCCC78CC30CC00C9C +:10100000C00CFFFC7FF8000006000C0018F838F058 +:1010100030307060707878F878003C023F0C1FF830 +:101020000FF003C000007FF8FFFCC00CC30CCB4CDA +:10103000DB6CDB6CD86CDCECCFCCC78CC00CFFFC61 +:101040007FF8030007800FC00CC01CE01CE03CF0E0 +:101050003CF07FF87FF8FCFCFCFCFFFC7FF81140C3 +:10106000820021208FE023FC82004A23E200FE2040 +:101070009FF013F880802220C0804221BFF0FBFA4D +:10108000888002208480022084801A208080E3FEF1 +:101090008280020101000F421FC0784110400840C9 +:1010A000904008421FC008411040FFFD104008401A +:1010B0005FC00840800008413FE008432520104100 +:1010C0002520104125202041252040417FF07FF838 +:1010D0004880020049000201FFF0020100100202F4 +:1010E0007F202200410023F07F0022000800220020 +:1010F000FF80220088802200888022008A802200CF +:101100008900FFFC080023F21FC022111040FBF0F1 +:10111000904022121FC02A11104033F1104060008D +:101120005FC0AFFC800020413FE0224325202279B0 +:10113000252022412520A541252048FD7FF0108350 +:10114000DFC010825040208250402FFFDFC06082FD +:10115000520061C25200A1C25FE022A3D20022A2CB +:10116000510024925100288E5090308BD450208210 +:10117000583020801010104047C017FC4440200316 +:10118000F44023F844406208C440A3F8E44020013E +:1011900054402FFD44402806444023F8444020405A +:1011A0004450204048502140503020804000209240 +:1011B0001FC03DF990402090904040901FC07BFFA1 +:1011C0000000A0013FE021F90200FD090200210911 +:1011D0007FF021F90500210945002909888031F9AE +:1011E0001070210820202500202070F8AE0FA90FD4 +:1011F000A30F9B0F940F8D0F860F7E0F790F740F27 +:101200006E0F670F600F560F4F0F480F440F670F99 +:101210003C0F360F300F2B0F250F210F1B0F160F12 +:101220000F0F0B0F070F010FFD0EFA0EF70EF30E47 +:10123000F00EED0EEA0EDE0ED90ED40E2D3E003E5F +:101240000053656C65637420546970005D203D2017 +:1012500000505B0000000000003E5B4F5B3E3E6BB9 +:101260004F6B3E1C3E7C3E1C183C7E3C181C577D40 +:10127000571C1C5E7F5E1C00183C1800FFE7C3E78C +:10128000FF0018241800FFE7DBE7FF30483A060E9E +:101290002629792926407F050507407F05253F5AE5 +:1012A0003CE73C5A7F3E1C1C08081C1C3E7F142255 +:1012B0007F22145F5F005F5F06097F017F00668900 +:1012C000956A606060606094A2FFA29408047E0446 +:1012D0000810207E201008082A1C08081C2A08086C +:1012E0001E101010100C1E0C1E0C30383E3830062C +:1012F0000E3E0E06000000000000005F0000000728 +:10130000000700147F147F14242A7F2A1223130855 +:10131000646236495620500008070300001C224131 +:10132000000041221C002A1C7F1C2A08083E0808D5 +:101330000080703000080808080800006060002085 +:10134000100804023E5149453E00427F4000724968 +:101350004949462141494D331814127F102745450C +:1013600045393C4A49493141211109073649494922 +:1013700036464949291E0000140000004034000090 +:1013800000081422411414141414004122140802F9 +:10139000015909063E415D594E7C1211127C7F496C +:1013A0004949363E414141227F4141413E7F4949C1 +:1013B00049417F090909013E414151737F080808ED +:1013C0007F00417F41002040413F017F08142241BE +:1013D0007F404040407F021C027F7F0408107F3E18 +:1013E0004141413E7F090909063E4151215E7F0985 +:1013F000192946264949493203017F01033F4040EC +:10140000403F1F2040201F3F4038403F63140814D6 +:101410006303047804036159494D43007F4141410E +:101420000204081020004141417F040201020440EF +:1014300040404040000307080020545478407F2873 +:101440004444383844444428384444287F38545469 +:10145000541800087E090218A4A49C787F0804048C +:101460007800447D40002040403D007F102844002B +:1014700000417F40007C047804787C0804047838BC +:1014800044444438FC1824241818242418FC7C08EC +:10149000040408485454542404043F44243C404069 +:1014A000207C1C2040201C3C4030403C442810281C +:1014B000444C9090907C4464544C44000836410065 +:1014C0000000770000004136080002010204023CDF +:1014D0002623263C1EA1A161123A4040207A3854AE +:1014E0005455592155557941215454784121555429 +:1014F000784020545579400C1E527212395555557A +:1015000059395454545939555454580000457C4164 +:101510000002457D420001457C40F0292429F0F07D +:10152000282528F07C545545002054547C547C0ACE +:10153000097F4932494949323248484832324A489B +:1015400048303A4141217A3A42402078009DA0A09B +:101550007D39444444393D4040403D3C24FF2424EF +:10156000487E4943662B2FFC2F2BFF0929F620C00C +:10157000887E090320545479410000447D4130485D +:10158000484A32384040227A007A0A0A727D0D19A0 +:10159000317D2629292F28262929292630484D4002 +:1015A00020380808080808080808382F10C8ACBAFE +:1015B0002F102834FA00007B000008142A1422227D +:1015C000142A14089500220095AA005500AAAA55CD +:1015D000AA55AA000000FF00101010FF00141414F8 +:1015E000FF001010FF00FF1010F010F0141414FC96 +:1015F000001414F700FF0000FF00FF1414F404FCB3 +:10160000141417101F10101F101F1414141F001093 +:101610001010F0000000001F101010101F1010100C +:1016200010F010000000FF1010101010101010101B +:10163000FF10000000FF140000FF00FF00001F105B +:10164000170000FC04F414141710171414F404F415 +:101650000000FF00F714141414141414F700F71406 +:101660001414171410101F101F141414F414101055 +:10167000F010F000001F101F0000001F14000000F9 +:10168000FC140000F010F01010FF10FF141414FFF1 +:10169000141010101F00000000F010FFFFFFFFFFEC +:1016A000F0F0F0F0F0FFFFFF0000000000FFFF0F80 +:1016B0000F0F0F0F38444438447C2A2A3E147E0210 +:1016C000020606027E027E026355494163384444A5 +:1016D0003C04407E201E2006027E020299A5E7A55A +:1016E000991C2A492A1C4C7201724C304A4D4D30CB +:1016F0003048784830BC625A463D3E494949007EF0 +:101700000101017E2A2A2A2A2A44445F4444405186 +:101710004A444040444A51400000FF0103E080FF3A +:10172000000008086B6B083612362436060F090FC6 +:1017300006000018180000001010003040FF0101E2 +:10174000001F01011E00191D1712003C3C3C3C000B +:101750000000000000000000240027002A00000014 +:101760000000250028002B000000000023002600B8 +:101770002900040404040404040402020202020214 +:101780000303030303030102040810204080010245 +:1017900004081020010204081020000000080002C4 +:1017A0000100000304070000000000000000AED5A7 +:1017B000F0A83FD300408D14A1C8DA1281CFD9F12F +:1017C000DB40A4A6AF200021007F220007424F4F3C +:1017D00054204641494C45440044414D414745440D +:1017E0000052202D3E200057202D3E20004641492A +:1017F0004C2D00504153532D002F00204D454D20BE +:10180000434845434B200076312E387437007631FB +:101810002E387437005265626F6F74004572726FB4 +:1018200072002D20004144432D3E20004F6E6C7904 +:10183000206F6E65004F7574206F66204D656D00DA +:101840002B002D004D4F44452000FFFFFFFFFFFF01 +:101850008003867080038003867080039FF3E130ED +:101860009FF39FF3E1309FF3983301CC9833983383 +:1018700001CC9833983387C098339833E1C09833BC +:101880009833E1C098339FF398C09FF39FF398C0BB +:101890009FF3800366CC8003800366CC8003FFFF48 +:1018A000010CFFFFFFFF01001FFF810061301F3FA0 +:1018B000873CE6FC8733873CE6FC87F3F8039E0F02 +:1018C0001F03F8039E0F1F03E13CFE0C07CFE13C12 +:1018D000FE0C07CF99033E3086C3E6CF380F9EF348 +:1018E000E6CF380F9EF39E0327CC81039E0327CCBF +:1018F0008103E0FFE10CE6CFE0FFE10CE6CF9803C7 +:10190000060000FF9803060000FFFFFF1EF0F8032B +:101910008003663099C38003663099C39FF3010C3E +:10192000F8FF9FF3010CF8FF9833393C01CF98334F +:10193000393C01CF9833FF0C793F98333ECCE0F32C +:1019400098333ECCE0F39FF33E0098CF9FF33E00E8 +:1019500098CF80033E30E7C380033E30E7C3FFFFEC +:10196000FFFFFFFFFFFFFFFFFFFF3030300056009B +:101970000FE01FC01FC03F803FF87FF07FE007C02F +:1019800007800F000E001C0018001000560014A065 +:101990003FF07FF8E01C6E18EC1C68186018E01C23 +:1019A0006058E01C7FF83FF014A043004552524FAE +:1019B0005200484F4C44004845415400574F524B49 +:1019C0005900424F4F535400534C454550004F4629 +:1019D000460025000102040810204080CC34112468 +:1019E0001FBECFEFD8E0DEBFCDBF12E0A0E0B1E078 +:1019F000E4E6FAE702C005900D92A233B107D9F7E9 +:101A000026E0A2E3B2E001C01D92A33EB207E1F7D7 +:101A10001CE0CFEEDCE004C02197FE010E94EC3A0E +:101A2000CE3ED107C9F70E9487230C94303D0C9419 +:101A3000000080389105B0F46034710598F4E4ED4D +:101A4000F9E190E1969FD001A0781124A80F67706A +:101A5000E60FF11D9491A152BD4F442321F08C91CA +:101A6000982B9C93089590958C919823FACF2F9260 +:101A70003F924F925F926F927F928F929F92AF921E +:101A8000BF92CF92DF92EF92FF920F931F93CF936B +:101A9000DF9300D01F92CDB7DEB7C22ED12C9601B6 +:101AA000280F391F37FD4FC0803891050CF04BC00F +:101AB000E9824A017B013C01402E512C160127E0AE +:101AC000220E311C93E0359427949A95E1F78B010F +:101AD000B12CA12C1B821A82EA81FB8183E0F5954F +:101AE000E7958A95E1F7EA0DFB1DE80DF91DE491F4 +:101AF0008A819B818770992720E830E002C0359564 +:101B000027958A95E2F7C901F0E0E223F923EF2B4C +:101B100041F04981B8018A819B81860D971D0E9401 +:101B2000190D8A819B8101969B838A838C159D0563 +:101B30009CF2A20CB31C0F5F1F4FC8018E199F09A6 +:101B4000841595053CF20F900F900F90DF91CF9187 +:101B50001F910F91FF90EF90DF90CF90BF90AF90CB +:101B60009F908F907F906F905F904F903F902F90BD +:101B700008954F925F926F927F928F929F92AF9251 +:101B8000BF92CF92DF92EF92FF92CF93DF93C090FC +:101B9000C702D090C802E090C902F090CA02A70123 +:101BA0009601C701B6010E9466364B015C01C8E18F +:101BB000D1E02C813D814E815F81C701B6010E9439 +:101BC0006636288139814A815B810E94D5372B0195 +:101BD0003C01288539854A855B85C501B4010E9491 +:101BE00066369B01AC01C301B2010E94D5372B01BF +:101BF0003C01A5019401C701B6010E9466362C85FF +:101C00003D854E855F850E9466369B01AC01C30110 +:101C1000B2010E94D537DF91CF91FF90EF90DF9016 +:101C2000CF90BF90AF909F908F907F906F905F907C +:101C30004F9008954F925F926F927F928F929F92F2 +:101C4000AF92BF92CF92DF92EF92FF920F931F93CA +:101C5000CF93DF9300D000D0CDB7DEB74B015C014E +:101C600029013A016701780120E030E0A9010E94D2 +:101C7000003687FDA6C020E030E0A901C301B20113 +:101C80000E94003687FD9DC020E030E0A901C80118 +:101C9000B6010E94003687FD94C081E02091A50224 +:101CA0003091A6022130310509F080E08093C60210 +:101CB00080928B0290928C02A0928D02B0928E0242 +:101CC00040928F0250929002609291027092920222 +:101CD000C0929302D0929402E0929502F092960202 +:101CE0006091B9027091BA028091BB029091BC02DE +:101CF0000E94053620E030E04AE754E40E9446386E +:101D000069837A838B839C83809297029092980256 +:101D1000A0929902B0929A029B01AC01C301B20158 +:101D20000E9466362B013C0140929B0250929C021D +:101D300060929D0270929E0229813A814B815C8162 +:101D4000C701B6010E9446386B017C01C0929F0218 +:101D5000D092A002E092A102F092A2028091A3028E +:101D60009091A402019769F5A501940160E070E0EB +:101D7000CB010E94D43760939702709398028093AE +:101D8000990290939A02A301920160E070E0CB0166 +:101D90000E94D43760939B0270939C0280939D02B3 +:101DA00090939E02A701960160E070E0CB010E9433 +:101DB000D43760939F027093A0028093A102909306 +:101DC000A2020F900F900F900F90DF91CF911F9173 +:101DD0000F91FF90EF90DF90CF90BF90AF909F90CA +:101DE0008F907F906F905F904F90089580E0EFED1F +:101DF000F2E081118FEF002481938193819381938D +:101E00000394D1F7EBECF2E017861686158614865C +:101E10000895DF92EF92FF920F931F93CF93DF937A +:101E20007C01D22E8B01040F111DEB0177FF02C044 +:101E3000D0E0C0E0C8010134110514F080E490E066 +:101E4000C817D9073CF44D2DBE01C7010E94190DDA +:101E50002196F0CFDF91CF911F910F91FF90EF90DE +:101E6000DF900895CF92DF92EF92FF920F931F932E +:101E7000CF93DF936B01122FEC017C01E40EF11C78 +:101E8000CE15DF0544F4202F412FB601CE010E946C +:101E9000090F2196F5CFDF91CF911F910F91FF9000 +:101EA000EF90DF90CF9008950F931F93CF93DF9320 +:101EB000EC018B0140E001960E94190D40E0B80151 +:101EC000CE0101970E94190DB8016F5F7F4F40E06E +:101ED000CE010E94190DB8016150710940E0CE0198 +:101EE0000E94190D40E0B801CE01DF91CF911F9102 +:101EF0000F910C94190DAF92BF92CF92DF92EF9297 +:101F0000FF920F931F93CF93DF936C017B018B01A3 +:101F1000040F151FEB015E01AE18BF08C017D107F3 +:101F200059F06991D601ED91FC910190F081E02D7D +:101F3000C6010995892B79F7C501DF91CF911F91D2 +:101F40000F91FF90EF90DF90CF90BF90AF900895EA +:101F5000833081F028F4813099F08230A9F008951F +:101F60008730A9F08830C9F08430B1F480918000C6 +:101F70008F7D03C0809180008F77809380000895CB +:101F800084B58F7784BD089584B58F7DFBCF809114 +:101F9000B0008F778093B00008958091B0008F7D5E +:101FA000F9CFCF93DF93282F30E0F901E656F84EB2 +:101FB0008491F901EA57F84ED491F901EE58F84EA0 +:101FC000C491CC23A1F081110E94A80FEC2FF0E066 +:101FD000EE0FFF1FE859F84EA591B491EC91ED2357 +:101FE00081E090E009F480E0DF91CF91089580E0F6 +:101FF00090E0FACF1F93CF93DF93282F30E0F901C1 +:10200000E656F84E8491F901EA57F84ED491F90159 +:10201000EE58F84EC491CC23A9F0162F81110E94DE +:10202000A80FEC2FF0E0EE0FFF1FE25AF84EA5913B +:10203000B4918FB7F894EC91111108C0D095DE23BC +:10204000DC938FBFDF91CF911F910895DE2BF8CFE6 +:10205000CF93DF9390E0FC01EA57F84E24918E581D +:10206000984EFC0184918823C9F090E0880F991F55 +:10207000FC01EC5AF84EA591B491FC01E25AF84EDD +:10208000C591D49161110DC09FB7F8948C912095A2 +:1020900082238C938881282328839FBFDF91CF914F +:1020A0000895623051F49FB7F8943C91822F809547 +:1020B00083238C93E8812E2BEFCF8FB7F894EC918C +:1020C0002E2B2C938FBFEACF1F93CF93DF93182F24 +:1020D000EB0161E00E942810209739F460E0812F25 +:1020E000DF91CF911F910C94FA0FCF3FD10511F4DE +:1020F00061E0F5CFE12FF0E0E656F84EE491E330F1 +:1021000031F140F4E130B1F0E230E1F0C038D10516 +:102110007CF7E4CFE73029F1E83059F1E430B1F74A +:1021200080918000806280938000D0938B00C09368 +:102130008A0004C084B5806884BDC7BDDF91CF919B +:102140001F91089584B5806284BDC8BDF7CF80918A +:102150008000806880938000D0938900C0938800BD +:10216000EDCF8091B00080688093B000C093B30041 +:10217000E5CF8091B00080628093B000C093B4003E +:10218000DDCF3FB7F8948091500290915102A09119 +:102190005202B091530226B5A89B05C02F3F19F0FB +:1021A0000196A11DB11D3FBFBA2FA92F982F8827D7 +:1021B000BC01CD01620F711D811D911D42E0660FB2 +:1021C000771F881F991F4A95D1F708958F929F9284 +:1021D000AF92BF92CF92DF92EF92FF924B015C01E0 +:1021E0000E94C1106B017C010E94C1106C197D0915 +:1021F0008E099F09683E734081059105A8F321E08F +:10220000821A9108A108B10888EEC80E83E0D81E92 +:10221000E11CF11C81149104A104B10429F7FF9081 +:10222000EF90DF90CF90BF90AF909F908F900895E8 +:102230002FB7F89460914C0270914D0280914E023C +:1022400090914F022FBF08950E9418118091D402DF +:10225000962F981B8091D502882331F09093D60257 +:102260001092D50280E008952091D302921740F495 +:102270009F5F9217A0F491E093BF889513BE0895D5 +:1022800081E08093D5026093D4028091CF02909137 +:10229000D00201969093D0028093CF0281E00895FE +:1022A00084E98093BC008091BC0084FDFCCF08953C +:1022B0008093BB0084E88093BC008091BC0087FFC2 +:1022C000FCCF089584EA8093BC008091BC0087FF16 +:1022D000FCCF88E70C9458110E94621180E480932F +:1022E000BB0084E88093BC00EFEDF2E09091BC006D +:1022F00097FFFCCF91919093BB008093BC0096E038 +:10230000EF3DF90799F78091BC0087FFFCCF0C9453 +:102310005011CF93C82F0E94621180E00E94581183 +:102320008C2F0E945811CF910C9450118038910538 +:10233000B4F5480F592F511D4138510514F040E8AC +:1023400050E0481BFB0177FD379633E0F595E795A4 +:102350003A95E1F7F695FE2FEE27F795E795E80F0A +:10236000F91FE152FD4F6770772781E090E001C0CF +:10237000880F6A95EAF7382F213041F4415078F000 +:102380008191DF011197832B8C93F8CF8095415079 +:1023900030F09191DF01119798239C93F8CF089525 +:1023A000CF92DF92EF92FF920F93CF93DF936C0166 +:1023B0007B01C42FD22F6034710524F4202FC60175 +:1023C0000E949611B7016D0F711D61507109603443 +:1023D00071052CF4202F4C2FC6010E949611202F3E +:1023E0004D2FB701C6010E94090FC6018C0F911D28 +:1023F000202F4D2FB7010197DF91CF910F91FF90C3 +:10240000EF90DF90CF900C94090F2F923F924F9254 +:102410005F926F927F928F929F92AF92BF92CF9274 +:10242000DF92EF92FF920F931F93CF93DF93CDB77D +:10243000DEB72A970FB6F894DEBF0FBECDBF9A83E2 +:1024400089836A3061F5DC0152968C91B8E08B9FEC +:1024500090011124E981FA8186859785820F931F67 +:10246000978786871586148681E090E02A960FB6B6 +:10247000F894DEBF0FBECDBFDF91CF911F910F91BA +:10248000FF90EF90DF90CF90BF90AF909F908F9094 +:102490007F906F905F904F903F902F9008956D3098 +:1024A00019F329813A813A872987D9011C96AD9081 +:1024B000BC90B0E8AB16B1040CF07BC0F901C68447 +:1024C000D784F0E4CF16D1040CF073C0D901529632 +:1024D0006C90529745E09501649E200D311D1124AA +:1024E000121613060CF065C0262C312C910153E016 +:1024F000220F331F5A95E1F72C0D3D1D12161306BE +:102500000CF057C05196BC91BB83E985FA85F089E0 +:10251000FC83649FB00111249B012C5A3D4E3A83E9 +:102520002983712CE981FA818491F5E07F1201C041 +:1025300080E0460138E0532E282F30E03E832D8383 +:102540004C8080FF4B80411004C03B818C81381748 +:10255000E1F010E000E00615C0F4D501A00FB11FB6 +:10256000B887AF83F12CE12CE61460F4B701680D55 +:10257000791D442D8F8198850E94190DBFEFEB1AAC +:10258000FB0AF2CF0F5F1F4FE6CF8D819E8195959D +:1025900087955A94820C931C5110CECF7394E98185 +:1025A000FA813196FA83E983A20CB31CF6E07F121C +:1025B000B9CFA985BA8552962C915297422F50E0F7 +:1025C0001C968D919C91B6E02B9F800D911D11243E +:1025D000E985FA85958784872389222309F444CFE6 +:1025E0006AEF64039001659F300D112420583F4F1E +:1025F000281739070CF038CFDF010190F081E02D6A +:102600000190F081E02D6AE0CD0109952DCF682F72 +:102610008BEC92E00C9405120F931F93CF93DF93F2 +:102620008C01D0E0C0E0F801EC0FFD1F649166233F +:1026300041F08BEC92E00E940512892B11F021965B +:10264000F2CFCE01DF91CF911F910F9108950895A0 +:1026500090E080E008956F927F928F929F92AF9268 +:10266000BF92CF92DF92EF92FF920F93CF93DF93BF +:102670007C01C62F01E020E340E370E060E00E94AF +:10268000320F570123E0A20EB11C00E02AE24AE219 +:1026900063E070E0C5010E94320F70E060E0C701A6 +:1026A0000E94540F67013FE2C30ED11C70E060E04E +:1026B000C6010E94540F6FE270E0C7010E94540FE0 +:1026C0006FE270E0C6010E94540FEC2FF0E0EE0FB5 +:1026D000FF1FE45BFE4F8080918053E0E52EF12CDC +:1026E000D12CC12C60E8662E712CD0E0C0E0FE0138 +:1026F00033E0F595E7953A95E1F7EC0DFD1DE80D12 +:10270000F91DE491CE0187709927930102C0359598 +:1027100027958A95E2F7C901F0E0E223F923EF2B30 +:1027200069F0CE01880F991F8C0F9D1F01E023E0F7 +:1027300043E0B7018A0D9B1D0E94320F2196CE30D7 +:10274000D105A9F632E0C30ED11C83E0E80EF11CDE +:102750002DE2E216F10449F6DF91CF910F91FF903F +:10276000EF90DF90CF90BF90AF909F908F907F9031 +:102770006F900895880F991F9093370280933602C7 +:10278000660F771F709335026093340280915B026D +:10279000882359F05093330240933202220F331FA3 +:1027A00030936E0220936D02089551954195510921 +:1027B000F1CF0F931F93CF9380910D01882399F050 +:1027C000CFEF0FEE11E061E085E00E94FA0FC80143 +:1027D0000197F1F760E085E00E94FA0FC8010197C8 +:1027E000F1F7C15081F7CF911F910F9108953F925A +:1027F0004F925F926F927F928F929F92AF92BF9211 +:10280000CF92DF92EF92FF920F931F93CF93DF93BC +:10281000CDB7DEB72E970FB6F894DEBF0FBECDBF93 +:10282000898380918802882309F4A8C110925C02F0 +:1028300010925D0210925E0210925F02C0905C02E4 +:10284000D0905D02E0905E02F0905F02898181117C +:10285000FDC18090760290907702A0907802B090AF +:102860007902A5019401C701B6010E94D4372B015A +:102870003C0120E030E0A9010E942D3918160CF02F +:10288000A0C1C301B2010E94BF3880910801882312 +:1028900009F4B8C18092470290924802A09249027E +:1028A000B0924A02E12CF12C00EA10E420E030E082 +:1028B00040E450E46E31710540F0E12CF12C00E869 +:1028C0001FE320E030E040E05FE360E070E080E3A1 +:1028D00091E40E941A0E8091C502882309F42AC14E +:1028E0000E9418116D837E838F8398878091AD023B +:1028F0009091AE02A091AF02B091B0024D815E8185 +:102900006F817885481B590B6A0B7B0B8091B9024C +:102910009091BA02A091BB02B091BC02481759072E +:102920006A077B0708F406C1E091A702F091A802AC +:1029300080819181A281B38189839A83AB83BC8397 +:10294000E091AB02F091AC029C01AD01608171811C +:10295000828193810E94D4374B015C012091B502A2 +:102960003091B6024091B7025091B80269817A81E4 +:102970008B819C810E94D4376B017C0120919B024A +:1029800030919C0240919D0250919E02C501B4017C +:102990000E9466362091B1023091B2024091B3029A +:1029A0005091B4020E94D5372B013C014092B102F4 +:1029B0005092B2026092B3027092B4023090C6029A +:1029C00031101AC0209197023091980240919902DB +:1029D00050919A02C701B6010E9466369B01AC0174 +:1029E000C301B2010E94D4376093B1027093B20266 +:1029F0008093B3029093B4024090B1025090B2021F +:102A00006090B3027090B4021091C1029091C20222 +:102A10009E87A091C302AD870091C402212F392F58 +:102A20004A2F502FC301B2010E942D3918160CF005 +:102A3000CCC0812F9E85AD85B02F8093B10290933D +:102A4000B202A093B302B093B402332009F4D6C00B +:102A500020919702309198024091990250919A02E8 +:102A6000C501B4010E9466364B015C0120919F02B2 +:102A70003091A0024091A1025091A202C701B6017B +:102A80000E9466369B01AC016091B1027091B20266 +:102A90008091B3029091B4020E94D437A5019401B1 +:102AA0000E94D5376B017C019B01AC01612F7E85B3 +:102AB0008D85902F0E94003687FD18C01091BD02B1 +:102AC0009091BE029E87A091BF02AD870091C00287 +:102AD000212F392F4A2F502FB601C7010E940036EF +:102AE00087FD04C01C2DDE86ED860F2DE091A90226 +:102AF000F091AA02812F9E85AD85B02F80839183AE +:102B0000A283B38389819A81AB81BC818093B50212 +:102B10009093B602A093B702B093B8028D819E81C4 +:102B2000AF81B8858093AD029093AE02A093AF02BF +:102B3000B093B0026091820270918302809184020E +:102B4000909185020E94B83889E02E960FB6F894CD +:102B5000DEBF0FBECDBFDF91CF911F910F91FF90D0 +:102B6000EF90DF90CF90BF90AF909F908F907F902D +:102B70006F905F904F903F900C946410809187020B +:102B8000609104017091050181110EC08091740261 +:102B90009091750220918602BC01222329F0609158 +:102BA0000301680F792F711D90E080E00E940536C7 +:102BB00060935C0270935D0280935E0290935F026B +:102BC0003DCEC301B20190585ECE8091BD0290917E +:102BD000BE02A091BF02B091C00289879A87AB87DD +:102BE000BC879C01AD01C301B2010E94003687FF82 +:102BF0002CCF89859A85AB85BC851FCF812C912CE4 +:102C0000540134CF20E030E040E05FE3C501B4017F +:102C10000E94D537A70196010E94003687FF09C0A0 +:102C20001092820210928302109284021092850206 +:102C300081CF80E090E0AFE7B3E48093820290938D +:102C40008302A0938402B093850274CF20E030E029 +:102C500040E05FE36091C7027091C8028091C902B1 +:102C60009091CA02D5CF80917A00806980937A00D2 +:102C70008EE480937C0061E070E080E090E00E9450 +:102C8000E61083B7817F826083BF80E130E020E07F +:102C900093B7916093BF889593B79E7F93BF9091B0 +:102CA0007A0096FDFCCF4091780050917900240F76 +:102CB000351F815069F780917A008F7780937A0071 +:102CC00084E0369527958A95E1F750E040E064EB83 +:102CD0007BE281E190E00E943A37C901089580913A +:102CE0007A00806980937A0088EC80937C006AE0A7 +:102CF00070E080E090E00E94E61083B7817F826000 +:102D000083BF80E270E060E093B7916093BF8895E5 +:102D100093B79E7F93BF90917A0096FDFCCF209150 +:102D2000780030917900620F731F815069F78091AC +:102D30007A008F7780937A00769567957695679578 +:102D400062527A4090E080E00E94053626EF38E239 +:102D50004CE151E40E944638089590917A009069C0 +:102D600090937A008E50806480937C0083B7817F3B +:102D7000826083BF20E290E080E033B7316033BFF0 +:102D8000889533B73E7F33BF30917A0036FDFCCF54 +:102D90004091780050917900840F951F215069F778 +:102DA00020917A002F7720937A0025E096958795D9 +:102DB0002A95E1F708958FE00E94AD16A091570281 +:102DC000B09158029C010E94C5370E94073628E541 +:102DD00039E743E353E40E9446380E94BF38CB01F1 +:102DE000089580916202882369F086E00E94D10FE5 +:102DF000892B41F06AE070E080E090E00E94E610EC +:102E0000109262020895FC0101900020E9F73197C9 +:102E1000AF01481B590BBC018BEC92E00C947B0F6B +:102E20008F929F92AF92BF920F931F93CF93DF9396 +:102E3000CDB7DEB7A1970FB6F894DEBF0FBECDBFFA +:102E400019A2423008F44AE08E010F5D1F4F842E14 +:102E5000912CB12CA12CA50194010E94A337E62F3F +:102E6000B901CA01EA30F4F4E05DD801EE938D01B6 +:102E7000232B242B252B79F790E080E0109719F075 +:102E8000CD010E940317A1960FB6F894DEBF0FBEC6 +:102E9000CDBFDF91CF911F910F91BF90AF909F90C9 +:102EA0008F900895E95CE1CFCF92DF92EF92FF928D +:102EB000CF93DF936C01990FEE08FF086A3071051C +:102EC000D1F44AE0F7FE18C08DE20E940713EC012E +:102ED00066277727CB016C197D098E099F094AE087 +:102EE0000E9410178C0F9D1FDF91CF91FF90EF90E4 +:102EF000DF90CF900895462FC701B601DF91CF91A3 +:102F0000FF90EF90DF90CF900C9410174F925F924C +:102F10006F927F928F929F92AF92BF92CF92DF92E9 +:102F2000EF92FF920F931F93CF936B017C01742E4E +:102F3000AC019B010E948A39882399F086E292E0D5 +:102F4000CF911F910F91FF90EF90DF90CF90BF90A6 +:102F5000AF909F908F907F906F905F904F900C9468 +:102F6000031746015701E894B7F82FEF3FEF4FE7FB +:102F70005FE7C501B4010E948A3981110DC02FEFAE +:102F80003FEF4FE75FE7C501B4010E940036181616 +:102F90001CF48AE292E0D4CF2FEF3FEF4FE75FE4DB +:102FA000C701B6010E942D3918161CF48EE292E07A +:102FB000C7CF2FEF3FEF4FE75FECC701B6010E948D +:102FC000003687FDF3CF20E030E0A901C701B6014C +:102FD0000E94003610E000E087FF08C08DE20E94EA +:102FE00007138C01F7FAF094F7F8F094C0E060E072 +:102FF00070E080E09FE37C1641F020E030E040E2AA +:1030000051E40E944638CF5FF6CFA70196010E9497 +:10301000D5372B013C010E94BF384B015C014AE0CF +:103020000E9410177C01E00EF11ECC23B1F1C50106 +:10303000B4010E9405369B01AC01C301B2010E949C +:10304000D4374B015C018EE20E940713E80EF91E93 +:10305000C15018F120E030E040E251E4C501B40174 +:103060000E9466362B013C010E94BF384B01B12CF7 +:10307000A12C4AE0C501B4010E941017E80EF91E08 +:10308000C501B4010E9405369B01AC01C301B20128 +:103090000E94D4374B015C01DBCFC701CF911F9158 +:1030A0000F91FF90EF90DF90CF90BF90AF909F90E7 +:1030B0008F907F906F905F904F9008954F925F92A6 +:1030C0006F927F928F929F92AF92BF92CF92DF9238 +:1030D000EF92FF920F93CF93DF936C01CBECD2E092 +:1030E000198A81E0888B8A8B4B01770FAA08BB086D +:1030F0002CE530E0D6010E94F23AA50194010E942D +:103100003A373D872C8784E390E09F878E870D2C8C +:10311000000CEE08FF08C701B6010E9407362B011C +:103120003C01C501B4010E9407369B01AC01C301FB +:10313000B2010E94463820E030E048EC52E40E94A0 +:10314000663642E00E94861782ED99E10E940C13D8 +:10315000C701B60127E0660F771F881F991F2A95C0 +:10316000D1F7A50194010E943A37422F01E024E0F3 +:103170006CE370E090E080E00E94320FDF91CF912D +:103180000F91FF90EF90DF90CF90BF90AF909F9006 +:103190008F907F906F905F904F900895CF92DF92C5 +:1031A000EF92FF920F931F93CF93DF937C010E94C6 +:1031B000F60E81E08093DD0200E110E0D0E0C0E097 +:1031C0008CE0C82ED12CD092D802C092D702109396 +:1031D000DA020093D90281E592E10E940C1367E0C4 +:1031E00070E0CE010E9454178CE492E10E940C130F +:1031F000F70161917191819191917F0147E00E9466 +:1032000086172196085F1F4FC430D105E1F60E9452 +:103210006C1186E00E94D10F21E0892B09F020E09B +:103220002093620286E00E94D10F892B21F48091C5 +:103230006202882319F00E94F116F4CFDF91CF913A +:103240001F910F91FF90EF90DF90CF900895CF9254 +:10325000DF92EF92FF920F931F93CF93DF93C82FCC +:1032600081E0DC2FD827D093DC02C093DB0280936F +:10327000DD020C2F29E046E666E370E081E090E095 +:103280000E94D0112091890230918A02253F81E06D +:103290003807B8F4A4E6B0E00E94C53724EF31E067 +:1032A00040E050E00E943A37BA01A9014E5F5F4FFB +:1032B0006F4F7F4F29E066E370E081E090E00E946D +:1032C000320F60915C0270915D0280915E0290917C +:1032D0005F020E94B8389B01AC01A4E6B0E00E94F6 +:1032E000593734EFC32EDD24D394E12CF12CA70100 +:1032F00096010E943A37DA01C9010296A11DB11D5B +:1033000002970C2F27E043E067E370E00E94320F42 +:1033100060915C0270915D0280915E0290915F020B +:103320000E94B8389B01AC01A4E6B0E00E94593776 +:10333000A70196010E943A37DA01C9010296A11D40 +:10334000B11D039721E045E06FE370E00E94320F6A +:1033500060915C0270915D0280915E0290915F02CB +:103360000E94B8389B01AC01A4E6B0E00E94593736 +:10337000A70196010E943A372E5F3F4F4F4F5F4F94 +:10338000790181E0E81AF10806E310E04D2FB80159 +:10339000C7010E94190D0F5F1F4F00341105B1F7CF +:1033A00060915C0270915D0280915E0290915F027B +:1033B0000E94B8389B01AC01A4E6B0E00E945937E6 +:1033C00024EF31E040E050E00E943A37DA01C901D1 +:1033D0000296A11DB11D0397ED2E04E025E048EEF5 +:1033E00051E16CE370E00E94370D0C2F29E047E1BA +:1033F00066E370E088E690E00E94D011609182025E +:103400007091830280918402909185020E94B83865 +:103410009B01AC012F5F310941095109A7E1B0E0DF +:103420000E945937CC24C394DD24DA94ED2CFD2C72 +:10343000A70196010E943A37422F29E066E370E027 +:1034400088E690E00E94320FC093DC02D093DB024A +:1034500082E090E09093D8028093D70207E310E0D7 +:103460001093DA020093D90260915C0270915D02C0 +:1034700080915E0290915F0240E00E94861789E68B +:1034800090E09093D8028093D7021093DA020093D1 +:10349000D90260918202709183028091840290919E +:1034A00085020E94B8389B01AC012F5F31094109A8 +:1034B0005109A4E6B0E00E945937A70196010E9485 +:1034C0003A3769017A014AE0C701B601F7FE0BC03D +:1034D0008DE20E94071366277727CB016C197D09BF +:1034E0008E099F094AE00E94101786EE91E10E9422 +:1034F0000C13D093DC02C093DB02DF91CF911F91BC +:103500000F91FF90EF90DF90CF9008951F93CF938E +:10351000DF93EC01162F0E942437181739F0612F22 +:10352000CE01DF91CF911F910C942C37DF91CF9179 +:103530001F9108950C9424378F929F92AF92BF925F +:10354000CF92DF92EF92FF920F931F93CF93DF936F +:103550009CE1899F80011124E80165969FE0E92E96 +:1035600091E0F92E6801EDE1CE0ED11CCE010E9452 +:103570009A1AF70181937F012196CC15DD05B1F7E9 +:1035800088E1C82E81E0D82E7801FDE2EF0EF11C13 +:103590005E0184E0A80EB11C289646018501C80191 +:1035A0000E942437F40181934F010F5F1F4FC01712 +:1035B000D107A9F7F4E0CF0ED11CE501EA14FB0412 +:1035C00039F7DF91CF911F910F91FF90EF90DF902E +:1035D000CF90BF90AF909F908F9008957F928F92E1 +:1035E0009F92AF92BF92CF92DF92EF92FF920F9392 +:1035F0001F93CF93DF936091070182E090E00E94D8 +:10360000861A6091060183E090E00E94861A60911C +:10361000050184E090E00E94861A6091040185E033 +:1036200090E00E94861A6091030186E090E00E947B +:10363000861A60910B0187E090E00E94861A6091E3 +:103640000A0188E090E00E94861A6091090189E0F1 +:1036500090E00E94861A609116018AE090E00E9434 +:10366000861A609108018BE090E00E94861A6091B2 +:103670000D018CE090E00E94861A609159028DE065 +:1036800090E00E94861A609102018EE090E00E9414 +:10369000861A60910E018FE090E00E94861A609178 +:1036A0005A0280E190E00E94861A60917F0281E1D7 +:1036B00090E00E94861A6091610282E190E00E948F +:1036C000861A6091600283E190E00E94861A609100 +:1036D0005B0284E190E00E94861A009159020F314A +:1036E000F0F58CE1089F80011124E80165969FE0C8 +:1036F000E92E91E0F92E6801EDE1CE0ED11CF70123 +:1037000061917F01CE010E94861A2196CC15DD05BC +:10371000B1F788E1E82E81E0F82E035D1F4F6E01BE +:10372000F4E0CF0ED11C289657014601F5017190A7 +:103730005F01C4010E942437781621F0672DC4016F +:103740000E942C37FFEF8F1A9F0AC815D90571F711 +:1037500084E0E80EF11CE6010C151D0501F7DF9170 +:10376000CF911F910F91FF90EF90DF90CF90BF907E +:10377000AF909F908F907F9008958F929F92AF927D +:10378000BF92CF92DF92EF92FF920F931F93CF934E +:10379000DF933FE0E32E31E0F32E10E000E0B12CA8 +:1037A00042E0A42E50E3C52ED12C86E00E94D10F1A +:1037B00021E0892B09F020E02093620221E430E02F +:1037C00041E050E060E670E08FE190E00E94BA13C3 +:1037D00080916D0290916E0295958795C82F8F31DB +:1037E00091F52FE530E041E050E060E670E08FE1D8 +:1037F00090E00E94BA13CFE50E94F60EA092DD027F +:103800001093D8020093D702D092DA02C092D90264 +:103810008EE50E9407131092D8021092D70280E220 +:1038200090E09093DA028093D9028FE0882E81E0B5 +:10383000982ED0E0DB15A9F0F40181914F010E9490 +:103840000713DF5FF7CF8036B9F620E230E041E0C2 +:1038500050E060E670E08FE190E00E94BA13C0E2B1 +:10386000CBCF1093D8020093D70280E290E09093E0 +:10387000DA028093D9028C2F0E9407130E94F1165E +:103880000E946C1186E00E94D10F892B09F0A0CF15 +:103890008091620281119CCFF701C1937F010E9448 +:1038A000EE1A0E94D9136AE070E080E090E00E9476 +:1038B000E610BB24B394BD0E005F1F4FF6E0BF12AD +:1038C00074CF10921501DF91CF911F910F91FF904E +:1038D000EF90DF90CF90BF90AF909F908F90089522 +:1038E0000E940B3DEF920F93CF93DF93CDB7DEB7DE +:1038F0002B970FB6F894DEBF0FBECDBFE82FF0E0D8 +:1039000080910E01EE0FFF1F811119C0E456FE4F8A +:1039100040815181EE24E39400E124E260E370E011 +:1039200080E390E00E94370D2B960FB6F894DEBF2F +:103930000FBECDBFDF91CF910F91EF90089580E33F +:1039400090E09093D8028093D70284E390E0909324 +:10395000DA028093D90281E08093DD02E451FE4EC9 +:1039600065917491CE0101960E94F93580E0282F6F +:1039700030E0E1E0F0E0EC0FFD1FE20FF31F90817B +:10398000992311F08F5FF3CF4AEF4203C001439FA9 +:10399000900D112480589F4F97FD0196959587951E +:1039A0009093D8028093D70284E390E09093DA0258 +:1039B0008093D902CE0101960E940317B5CF2F92B2 +:1039C0003F924F925F926F927F928F929F92AF92AF +:1039D000BF92CF92DF92EF92FF920F931F93CF93FC +:1039E000DF9300D01F92CDB7DEB7898386E00E94B7 +:1039F000D10F21E0892B09F020E0209362025AE0E8 +:103A0000252E312C0E94F60E00916D0210916E024F +:103A10001595079526E02093DD0231E03093DC0216 +:103A20001092DB026091450270914602072E000C55 +:103A3000880B990B0E9407362B013C014FE3A42E03 +:103A400042E0B42E750182E090E09B838A83EA8194 +:103A5000FB81BF01FF0F880B990B0E9407369B016A +:103A6000AC0160E070E080E291E40E9432399B0199 +:103A7000AC01C301B2010E9446380E94B838CB01A4 +:103A8000B1010E94D83AF701819391937F012A8175 +:103A90003B81215031093B832A832F3F3F4FB9F6A9 +:103AA000109346020093450289E3E82E82E0F82E47 +:103AB00094E0C92ED12C22E0822E912CB401092C45 +:103AC000000C880B990B0E9407369B01AC0160E04B +:103AD00070E080E291E40E9432392B013C01609158 +:103AE000450270914602072E000C880B990B0E942C +:103AF0000736A30192010E9446380E94B838CB01D4 +:103B0000B1010E94D83AF50120813181821B930BCB +:103B100042E3489F9001499F300D1124F7016081D5 +:103B20007181260F371F3B832A83232B09F086C020 +:103B30001182108201E022E346E270E060E0C601FB +:103B400004970E94320F0EEC1FEF2FEF3FEF3B83E5 +:103B50002A83F7018081918124E030E0281B390B12 +:103B6000C901800F911FD092D802C092D7029093C2 +:103B7000DA028093D902F501808191816AE070E0D8 +:103B80002A813B81820F931F0E9454178A819B8157 +:103B900001969B838A830E5C1F4F0297D1F692E0B9 +:103BA000E90EF11CE1E08E1A9108F2E0AF0EB11CB3 +:103BB0002CE2C20ED11C38E8C316D10409F07ECF26 +:103BC00000E022E040E870E060E090E080E00E94E9 +:103BD000320F20E140E860E370E090E080E00E9476 +:103BE000320F89810E94721C0E946C110E94F11692 +:103BF00086E00E94D10F892B09F004CF80916202E8 +:103C0000811100CF0E94D913809145029091460204 +:103C10000F900F900F90DF91CF911F910F91FF9018 +:103C2000EF90DF90CF90BF90AF909F908F907F905C +:103C30006F905F904F903F902F9008956A817B81A5 +:103C4000719561957109072E000C880B990B0E94E4 +:103C500007362DEC3CEC4CE45FE30E9466362B010A +:103C60003C012A813B81B901330F880B990B0E94DB +:103C700007369B01AC01C301B2010E94D5370E94F7 +:103C8000B838F7017183608355CF9C0144E650E05A +:103C900064E873E090E080E00E94BA1388E00E943C +:103CA000DF1CBC01665A7F4F9C014AE050E00E9435 +:103CB000BA1388E00E94DF1CBC01675F7F4F9C0144 +:103CC00041E050E00E94BA1388E00C94DF1C2F9270 +:103CD0003F924F925F926F927F928F929F92AF929C +:103CE000BF92CF92DF92EF92FF920F931F93CF93E9 +:103CF000DF93D82E282F30E0E0916302F0E0EE5BF6 +:103D0000FE4F60816150770B41E050E090E080E031 +:103D10000E94BA1386E00E94D10F21E0892B09F09E +:103D200020E0209362021092DC0281E08093DB02AB +:103D300038E3632EE0906D02F0906E02F594E79404 +:103D4000AE2C8701112798012D193109629EC001FF +:103D5000639E900D1124C80FD91F209709F1662783 +:103D600077276C1B7D0B072E000C880B990B0E948C +:103D700007362DEC3CEC4CE05FE30E9466361B01FD +:103D80002C01BE01DD0F880B990B0E9407369B01A9 +:103D9000AC01C201B1010E94D5370E94B838EB01D5 +:103DA0000E94F60E025011094E0185E0B82E93E0F4 +:103DB000792E7A0CC0906302D12C17FD20C0F60139 +:103DC000EE5BFE4F808180171106C9F0C4F0E2E47B +:103DD000F1E070E060E0CF01825491408C159D05C8 +:103DE00034F48191680F711DF6CFDE2CA3CF872D9F +:103DF0008B19680FC401885491090E942B13BA943F +:103E00000F5F1F4F88E3880E911CB110D3CFE2E4FF +:103E1000F1E090E080E09F01225431402C153D05F7 +:103E200024F42191820F911DF6CF8E0D0E94721CF9 +:103E30000E946C110E94F11686E00E94D10F892B1E +:103E4000A1F6809162028111D0CF0E94D9138A2DF0 +:103E5000DF91CF911F910F91FF90EF90DF90CF9066 +:103E6000BF90AF909F908F907F906F905F904F909A +:103E70003F902F9008959F92AF92BF92CF92DF9282 +:103E8000EF92FF920F931F93CF93DF93D09059023D +:103E9000FF24F394D11001C0F12C2D2D30E060915E +:103EA00002016150770B41E050E090E080E00E9419 +:103EB000BA1386E00E94D10F21E0892B09F020E09F +:103EC00020936202BB24B394F2E0AF2E0CE010E02A +:103ED0000E94F60EC0916D02D0916E02D595C795E5 +:103EE000EC2E8F2DFF0C990B8C0F911D8D199109C4 +:103EF000F12C97FD06C08330910514F082E090E02C +:103F0000F82EB092DC021092DB02A092DD02109239 +:103F1000D8021092D7021092DA021092D90281E4EC +:103F200092E10E940C131092DC02B092DB0210921C +:103F3000D8021092D7028F2D0F2C000C990B0196EE +:103F400064E0880F991F6A95E1F79093DA028093F5 +:103F5000D9028FE392E10E940C139C2E9F1870E10E +:103F6000C72ED12C80910201981690F41093D8029C +:103F70000093D702D092DA02C092D9028EE189155D +:103F800018F0892D0E949C1A8FE091E00E9403177F +:103F90009394E0E1CE0ED11CF0E4CF16D10411F7DA +:103FA0000E94F1160E946C1186E00E94D10F892BAD +:103FB00091F58091620281112EC00E94D913E09286 +:103FC00059022EE12E1518F08E2D0E949C1A0E9487 +:103FD000D9130FE011E0F80101900020E9F78F01FB +:103FE00000511140B8016F5F7F4F90E080E00E9468 +:103FF0004E3CEC01009789F488E191E0DF91CF918C +:104000001F910F91FF90EF90DF90CF90BF90AF90F6 +:104010009F900C94CE18DC2E5BCF18826FE071E07D +:104020000E94293D012B09F4B2C062E371E0CE0188 +:104030000E94203D892B09F08DC030E020E044E053 +:1040400050E06FEF73E090E080E00E94BA1386E0EA +:104050000E94D10F21E0892B09F020E02093620219 +:1040600081E08093DD020E94F60ED12CC12CB12C90 +:10407000A12C8501F12CE12C80916D0290916E02B2 +:1040800095958795800F911F813094400CF049C021 +:10409000F092D802E092D702D092DA02C092D9020E +:1040A00080916D0290916E02959587956AE070E01F +:1040B000800F911F0E9454178CE392E10E940C1311 +:1040C00080916D0290916E0295958795800F911F5A +:1040D0000E942437682F70E090E080E04AE00E9460 +:1040E0001017C701C6969093D8028093D702D0923A +:1040F000DA02C092D90280916D0290916E0295957C +:104100008795800F911F0E9424370E9407130F5F2D +:104110001F4F20E4E20EF11C80E8E816F10409F0DC +:10412000ABCFE2E0AE0EB11CF8E0CF0ED11C20E127 +:10413000A216B10409F09DCF0E94F1160E946C11E5 +:1041400086E00E94D10F892B09F08DCF8091620209 +:10415000811189CF6AE371E0CE010E94203D8C017C +:10416000892BA9F487E08093630280E00E94671E98 +:10417000882369F06FEFC8010E942C370F5F1F4F33 +:10418000011584E01807B1F7F0E0E0E0099588E157 +:1041900091E00E94CE18CE01DF91CF911F910F9137 +:1041A000FF90EF90DF90CF90BF90AF909F900C94D6 +:1041B000C53B4F925F926F927F928F929F92AF9288 +:1041C000BF92CF92DF92EF92FF92CF936FEF70E0AA +:1041D00089E00E9464108BEA94E00197F1F78EE089 +:1041E0000E94AD167C018AE00E94D10F90913802A6 +:1041F000981729F091E090937A0280933802809189 +:1042000001019FEF980F90930101811106C00E9458 +:10421000DB169093810280938002609182027091FC +:10422000830280918402909185020E94B83889E0CF +:104230000E9464108090C7029090C802A090C902AA +:10424000B090CA02B70190E080E00E940536A50157 +:1042500094010E94D4372DEC3CEC4CE45DE30E94C9 +:104260006636A50194010E94D5376093C70270930A +:10427000C8028093C9029093CA020E94B90D6B01D3 +:104280007C01C0927602D0927702E0927802F0929E +:1042900079026091890270918A0290E080E00E9428 +:1042A00005362B013C0180905C0290905D02A0904D +:1042B0005E02B0905F02A50194010E940036811158 +:1042C0004BC0A7019601C301B2010E94D4372B0154 +:1042D0003C0120E030E0A9010E942D39181694F528 +:1042E00020E030E040EA50E4C301B2010E942D39E1 +:1042F000181694F16091890270918A0290E080E032 +:104300000E940536A50194010E94D4372B013C017F +:1043100020E030E0A9010E942D39181634F520E084 +:1043200030E040E85FE3C301B2010E940036181696 +:1043300034F1C501B4010E94BF3870938A026093C2 +:1043400089021DC020E030E040EA50ECC301B20118 +:104350000E94003687FFCECFC701B6010E94BF384A +:1043600070938A0260938902C5CF20E030E040E874 +:104370005FEBC301B2010E942D3987FFDACF609154 +:1043800074027091750290E080E00E940536A701EA +:1043900096010E94D4376B017C0120E030E0A90136 +:1043A0000E942D3918160CF063C0C701B6010E9497 +:1043B000BF386A30710508F05FC080911701811124 +:1043C00005C080910C0181110E94D91381E0809376 +:1043D000170110920C018091890290918A02853F09 +:1043E00021E0920710F010920001209100012111AC +:1043F00049C0843F914008F045C06FEF70E089E00C +:104400000E9464100E94D913C1E0C09300010E9471 +:104410003B1F0E94EE1AC0937A028EE00E94AD16F6 +:10442000BC0190E080E00E9405366093C702709363 +:10443000C8028093C9029093CA0210926C02209124 +:1044400074023091750245E050E060E971E084E665 +:1044500090E0CF91FF90EF90DF90CF90BF90AF9022 +:104460009F908F907F906F905F904F900C94BA13B5 +:10447000C701B60190589BCF1092170181E080933D +:104480000C01A9CFCF91FF90EF90DF90CF90BF901C +:10449000AF909F908F907F906F905F904F90089516 +:1044A0001F920F920FB60F9211242F933F938F9369 +:1044B0009F93AF93BF9380914C0290914D02A09136 +:1044C0004E02B0914F0230914B0223E0230F2D3763 +:1044D00058F50196A11DB11D20934B0280934C020B +:1044E00090934D02A0934E02B0934F0280915002E0 +:1044F00090915102A0915202B09153020196A11DD8 +:10450000B11D8093500290935102A0935202B09338 +:104510005302BF91AF919F918F913F912F910F9037 +:104520000FBE0F901F90189526E8230F0296A11D2D +:10453000B11DD2CF1F920F920FB60F9211248F93FD +:10454000EF93FF93E0E6F0E0808180648083FF9149 +:10455000EF918F910F900FBE0F901F9018951F92A3 +:104560000F920FB60F9211242F933F934F935F93A7 +:104570006F937F938F939F93EF93FF9383B181709A +:1045800029B190915602981709F49DC030E0220F8E +:10459000232F221F330B922F8093560240915502F6 +:1045A000241709F490C020935502209132023091D3 +:1045B0003302981719F031952195310940916D0218 +:1045C00050916E026091360270913702240F351FB0 +:1045D000261737070CF48BC020913202309133023A +:1045E000981719F031952195310940916D0250913C +:1045F0006E026091340270913502240F351F6217EC +:1046000073070CF46FC04091320250913302981737 +:1046100019F051954195510920916D0230916E022A +:10462000240F351F30936E0220936D0241E09813E2 +:1046300040E020915402421709F440C02091320218 +:1046400030913302981719F0319521953109609115 +:104650006D0270916E02E0913602F0913702260FE2 +:10466000371F2E173F070CF44CC0209132023091B7 +:104670003302981719F031952195310960916D0237 +:1046800070916E02E0913402F0913502260F371FCF +:10469000E217F3078CF12091320230913302981720 +:1046A00019F031952195310980916D0290916E023A +:1046B000820F931F90936E0280936D024093540279 +:1046C00081E080937A02FF91EF919F918F917F918A +:1046D0006F915F914F913F912F910F900FBE0F906F +:1046E0001F90189520913402309135029BCF209174 +:1046F00036023091370296CF809134029091350284 +:10470000D9CF8091360290913702D4CF1895CF93AC +:10471000DF93CDB7DEB7C554D1090FB6F894DEBF2D +:104720000FBECDBF789484B5826084BD84B58160AE +:1047300084BD85B5826085BD85B5816085BD80916C +:104740006E00816080936E001092810080918100E4 +:1047500082608093810080918100816080938100DC +:10476000809180008160809380008091B10084609E +:104770008093B1008091B00081608093B0008091FF +:104780007A00846080937A0080917A0082608093BE +:104790007A0080917A00816080937A0080917A001B +:1047A000806880937A001092C100A89584B7877FB3 +:1047B00084BF8091600088618093600087E180936E +:1047C0006000809160008064809360008091600050 +:1047D0008860809360001092B90088E48093B800EC +:1047E0000E94621180E00E9458110EEA17E1BDECB0 +:1047F000EB2EB7E1FB2EF80184910E9458110F5F58 +:104800001F4FE016F106B9F70E94501111E0109306 +:10481000B8000E946C1182E48093D30260E08EE0C5 +:104820000E94281060E08FE00E94281061E085E07F +:104830000E94281061E089E00E94281062E087E071 +:104840000E94281062E088E00E94281062E086E062 +:104850000E94281062E08AE00E9428106FEF70E04A +:1048600089E00E94641060E085E00E94FA0F809168 +:104870007A00876080937A0080917A0088608093C4 +:104880007A00789410936B00109368001BBB90E043 +:1048900080E00E949A1A182F81E090E00E949A1AF4 +:1048A000912F8C30944109F075C182E090E00E9414 +:1048B0009A1A182F83E090E00E949A1A912F9093F1 +:1048C00007018093060184E090E00E949A1A182F55 +:1048D00085E090E00E949A1A912F909305018093B1 +:1048E000040186E090E00E949A1A8093030187E019 +:1048F00090E00E949A1A80930B0188E090E00E9459 +:104900009A1A80930A0189E090E00E949A1A809393 +:1049100009018AE090E00E949A1A809316018BE0C8 +:1049200090E00E949A1A91E0811101C090E090936A +:1049300008018CE090E00E949A1A91E0811101C078 +:1049400090E090930D018DE090E00E949A1A809380 +:1049500059028EE090E00E949A1A809302018FE043 +:1049600090E00E949A1A80930E0180E190E00E94EC +:104970009A1A91E0811101C090E090935A0281E16E +:1049800090E00E949A1A80937F0282E190E00E9458 +:104990009A1A182F83E190E00E949A1A912F90930F +:1049A00061028093600284E190E00E949A1A91E093 +:1049B000811101C090E090935B02809159028F3188 +:1049C00010F40E949C1A10915A0280EC111101C03F +:1049D00088EC0E94891180EA111101C081EA0E94CD +:1049E000891181E80E94891180E20E948911109248 +:1049F0007B0280E280937C0280E480937D0280E6EB +:104A000080937E028091600290916102892B19F15E +:104A10000E94F60E68E088E290E00E942B1388E086 +:104A20000E94721C0E946C1168EE73E080E090E0BE +:104A30000E94E6100E94D9130E94D9130E94D91334 +:104A400090E080E00E94451E20916002309161025A +:104A500082179307E9F60E943316909358028093C9 +:104A600057020E94DB16909381028093800200918E +:104A700006011091070110937502009374028EE0F5 +:104A80000E94AD16BC0190E080E00E940536609364 +:104A9000C7027093C8028093C9029093CA020E9411 +:104AA0006F160E94B90D609376027093770280931F +:104AB00078029093790220E030E040EA51E40E94CD +:104AC000D5376B017C01B80190E080E00E9405368B +:104AD0009B01AC01C701B6010E94003687FF05C0EB +:104AE00070E060E089E00E9464101092BD021092B4 +:104AF000BE021092BF021092C002412C512C3FE71F +:104B0000632E33E4732E4092C1025092C20260922F +:104B1000C3027092C402A090A902B090AA02809130 +:104B2000C502D501CD90DD90ED90FC90882311F465 +:104B30000C949E34A3019201C701B6010E942D3945 +:104B400018160CF03FC1F5014082518262827382D7 +:104B50008090B1029090B202A090B302B090B402E3 +:104B6000C090C102D090C202E090C302F090C40293 +:104B7000A7019601C501B4010E942D3918160CF049 +:104B800031C1C092B102D092B202E092B302F0926F +:104B9000B40238C1B12CA12C312C212C10E000E042 +:104BA00066246394F8E08F2E912CA8E14A2E512CB4 +:104BB0000E94A1352FEF30E040E050E00E943A37EC +:104BC0006B017C0169A7C8010E942C37C8010E94B3 +:104BD0002437782E29A52813E4C03FEF231A330A7F +:104BE0000E942411882309F48DC00E94F60E52E021 +:104BF0005093DD026092DC021092DB021092D80228 +:104C00001092D7021092DA021092D9028BEF97E13C +:104C10000E940C136092DD029092D8028092D7021B +:104C200088E290E09093DA028093D9026AE070E023 +:104C3000C8010E94541789EF97E10E940C134AE0C3 +:104C400060E074E080E090E00E9410171092DC02B7 +:104C50006092DB029092D8028092D7025092DA02E0 +:104C60004092D90283EF97E10E940C136AE070E052 +:104C7000C1010E945417A8E4B0E0B093D802A093F9 +:104C8000D7025092DA024092D9028DEE97E10E944B +:104C90000C136AE070E0C5010E9454179092D8028C +:104CA0008092D702E0E2F0E0F093DA02E093D902DA +:104CB00087EE97E10E940C13C701B601772788277A +:104CC00099274AE00E94101728E430E03093D80278 +:104CD0002093D70240E250E05093DA024093D90289 +:104CE00081EE97E10E940C13672D70E090E080E068 +:104CF0004AE00E94101760E074E0C8010E945E184C +:104D00000E946C110F5F1F4F011554E0150709F049 +:104D10004FCF02E011E046E1E42EF12C50E1C52E28 +:104D2000D12C6FE1862E912C7CE2672E712CE8EE5F +:104D30002E2EE3E03E2E412C512CA114B104A9F1FA +:104D40000E94F60E0093DD021092DC021093DB024B +:104D5000F092D802E092D702D092DA02C092D90241 +:104D600089ED97E10E940C131093DD029092D80216 +:104D70008092D7027092DA026092D9021093DC021C +:104D80001092DB020E941811A20191010E94A33728 +:104D900020FD04C08DEC97E10E940C130E946C1161 +:104DA000CCCF4FEFA41AB40A1BCF64E190E080E0AF +:104DB0000E94861A6CE081E090E00E94861A0E94B0 +:104DC000EE1AFBCD20E030E0A901C701B6010E9438 +:104DD000003687FFBDCED5011D921D921D921C92FB +:104DE0001397B6CEC090BD02D090BE02E090BF0235 +:104DF000F090C002A7019601C501B4010E940036DF +:104E000087FDBFCE81E08093C50283B1817080931E +:104E1000560289B190E0880F892F881F990B8093E3 +:104E20005502209156029091550281E0291380E0AD +:104E300080935402980145E050E060E971E084E617 +:104E400090E00E94BA130E94181160937002709350 +:104E5000710280937202909373020E94D9130E9490 +:104E6000D9130E94F60E82E08093DD02BCE1EB2EA6 +:104E7000F12CF092D802E092D70208E110E01093F2 +:104E8000DA020093D9028EE098E10E940C130E948E +:104E90006C116CEB72E080E090E00E94E6100E94E2 +:104EA000F60E81E08093DC021092DB02F092D802D1 +:104EB000E092D7021093DA020093D90287E098E1DA +:104EC0000E940C130E946C116CE271E080E090E093 +:104ED0000E94E61080916D0290916E02FC01F595A2 +:104EE000E795FEAFEDAFF0937502E093740286E0B4 +:104EF0000E94D10F24968FAF2497811195C0809185 +:104F00006C02882309F490C00E94D9130E941811E2 +:104F10006B017C01C0926802D0926902E0926A0241 +:104F2000F0926B0286E00E94D10F892B59F40E9407 +:104F300018116C197D098E099F09643F7140810524 +:104F4000910580F30E9418116C197D098E099F0943 +:104F5000643F71408105910510F40C948A3186EA12 +:104F60000E9489116FEF70E089E00E9464100E9436 +:104F7000D91319A61092630289A50E94671E89A7FA +:104F80008B3008F03EC0E82FF0E0E753F84D0C946A +:104F9000EC3AE6274D2E962ED72EE52E152F232FF1 +:104FA000403151315C316A3120E030E0A901C70164 +:104FB000B6010E94003687FF25CF1092B1021092F1 +:104FC000B2021092B3021092B4021CCFAE014F5E37 +:104FD0005F4F5CA34BA3CE0183969EA38DA311E0EC +:104FE0001093630289A50E94671E89A7823009F485 +:104FF000CCC508F051C1882309F495C1813009F46A +:1050000095C10E94EE1A81E080937A022DAD3EADEB +:10501000309375022093740245E050E060E971E03E +:1050200084E690E00E94BA1324963FAD2497309313 +:105030006C0280918602882309F1109109011123E5 +:10504000E9F00E941811C0906402D0906502E090CF +:105050006602F09067026C197D098E099F0928EE9F +:1050600033E040E050E00E94A337211738F010925F +:1050700086020E94D91381E080930C0180917A020C +:105080008823F1F180918702882351F120E030E0FC +:1050900040EA51E460917602709177028091780243 +:1050A000909179020E94D5376B017C016091740266 +:1050B0007091750290E080E00E9405369B01AC0182 +:1050C000C701B6010E94003687FF05C070E060E0AE +:1050D00089E00E9464100E94D91381E080930C0142 +:1050E00010927A0210928702109288020E94181180 +:1050F00060937002709371028093720290937302B6 +:105100000E94181100917002109171022091720298 +:1051100030917302601B710B820B930B20E63AEE09 +:1051200040E050E00E94A337122F20936F0280913D +:10513000870281110BC080910B01882339F0281759 +:1051400028F081E0809387020E94D9138091880221 +:1051500081110BC080910A01882339F0181728F0BB +:1051600081E0809388020E94D9130E94D92080E0B8 +:105170000E94F7130E942411882311F40C941B340D +:10518000A0908902B0908A0245EFA41641E0B406CF +:1051900010F00C944F3280918802882311F40C9403 +:1051A0002D326FEF70E089E00E9464100E94F60ECD +:1051B0000BE712E0BFE72B2EB2E03B2E82E0882EF9 +:1051C000912CA12CB12C93E0492E512C612C712CE7 +:1051D0000E94A135A50194010E943A37AB01BC01A0 +:1051E0004150510961097109D8018C91682F640FF0 +:1051F000613810F00C94A1316C9319A60E94A1356E +:10520000F9A5CF2ED12CF12CE12CA30192010E9403 +:105210003A376D5F7F4F8F4F9F4FA701960126173B +:1052200037074807590714F00C94A631D801EC90C1 +:10523000F12C0E94A13524E130E040E050E00E94D2 +:105240003A376A507109810991096E0D7F1D6034EA +:10525000710530F421E040E890E080E00E94961172 +:10526000F801E080F12C0E94A13524E130E040E01B +:1052700050E00E943A37DC01CB010A97A109B1093D +:105280008E0D9F1D21E040E470E060E00E94090F58 +:10529000F9A5FF5FF9A7B2CF99A5933009F478C4B7 +:1052A000943009F0AECE809102018E3108F0E0C456 +:1052B00091E0980F90930201809359020E94BD1BC8 +:1052C0008EE098E4A4E2B1E4809318019093190170 +:1052D000A0931A01B0931B0122EA3CEB4DED5FE372 +:1052E00020931C0130931D0140931E0150931F0118 +:1052F0008DE091EEA9E5BBEB809320019093210115 +:10530000A0932201B09323012CE031E248E956E357 +:1053100020932401309325014093260150932701C7 +:105320000E94EE1A5CCE0E943B1F59CEDE01119600 +:105330002D01712C612C30E020E06114710421F00A +:10534000F20132972081318141E050E06FEF73E04C +:1053500090E080E00E94BA13B1E0B0930C0186E0C7 +:105360000E94D10F21E0892B09F020E020936202F6 +:105370001301EFEF2E1A3E0A0E94F60EF1E0F093B1 +:10538000DD020E94D92080916D0290916E02959568 +:105390008795909375028093740281E00E94F713C1 +:1053A00029E130E03093D8022093D7021092DA023C +:1053B0001092D90231E03093DC021092DB0285E2D8 +:1053C00098E10E940C136091C7027091C80280910D +:1053D000C9029091CA0242E00E9486171092DC0234 +:1053E00041E04093DB02E0E18E2E912C10E000E0E2 +:1053F0006801CC0CDD1C580164E0E62EF12C6A1427 +:105400007B04A4F1F092D802E092D7029092DA02E3 +:105410008092D902F601E850FE4F6081718190E0E0 +:1054200080E04AE00E94101788EF0E94071382E292 +:1054300098E10E940C136A147B0409F0C4C18091A6 +:105440006D0290916E026AE070E0959587950E94DA +:1054500054175FEFA51AB50A80E4E80EF11C92E03C +:10546000C90ED11CA4E8EA16F10449F60E5F1F4FDD +:10547000B8E08B0E911C0A30110509F0B9CF69E034 +:1054800070E0C1010E945E180E94F1160E946C112A +:1054900086E00E94D10F892B09F06ECF80916202C5 +:1054A00081116ACF80916D0290916E0295958795DA +:1054B000F201819391932F010E94D9136AE070E069 +:1054C00080E090E00E94E6103101F9E02F163104EF +:1054D00009F031CF6FEF70E089E00E9464108BEA31 +:1054E00094E00197F1F7FE01319621E081919191CD +:1054F000059640815181841795070CF020E04BA15F +:105500005CA1E417F50791F7222309F418C387E09B +:105510008093630264E070E089E090E00E940D3BBC +:1055200098AF8FAB64E070E087E090E00E940D3BA5 +:105530009AAF89AF64E070E089E090E00E940D3B93 +:105540009CAF8BAF64E070E084E090E00E940D3B84 +:1055500098AB8FA764E070E080E190E00E940D3B83 +:105560009EA78DA728EFE22E21E0F22ECFA8D8AC7F +:1055700054E2C50ED11C0BAD1CAD2FA838ACF10107 +:1055800080E090E0A0E8BFE381939193A193B19371 +:105590001F01D7016D917D917D01072E000C880BB5 +:1055A000990B0E940736F80161937193819391934F +:1055B0008F01C214D30419F729AD3AAD38A72FA330 +:1055C00069013CE1C30ED11C09AD1AADD8011D9291 +:1055D0001D921D921D928D01FE013196FAABE9AB31 +:1055E000EFA8F8AC812C912C5401D7014D905D901F +:1055F0006D907D907D01A3019201C501B4010E94CF +:10560000D5374B015C01E9A9FAA961917191FAAB17 +:10561000E9AB9701245031093EAB2DAB072E000CAE +:10562000880B990B0E940736A30192010E946636EF +:10563000ADA9BEA96D937D938D939C931397E214AE +:10564000F30499F6F801349780829182A282B382A2 +:105650000C151D0509F0BACFEFA5F8A9FEABEDAB0F +:105660006F01F0E1CF0ED11C0FA518A92BAC3CACFB +:1056700024E2220E311CD8011D921D921D921D9212 +:105680008D01FE013196FAABE9ABEBACFCAC812CA1 +:10569000912C5401D7014D905D906D907D907D01CE +:1056A000A3019201C501B4010E94D5374B015C01F1 +:1056B000E9A9FAA961917191FAABE9AB970124507C +:1056C00031093CAB2BAB072E000C880B990B0E94C9 +:1056D0000736A30192010E946636ABA9BCA96D935F +:1056E0007D938D939C9313972E143F0499F6F801A4 +:1056F000349780829182A282B382C016D10609F0CB +:10570000BACF4DA55EA5405C5F4F2DA53EA590E0AC +:1057100080E0F901E80FF91FAFA1B8A5A80FB91FE4 +:10572000CD90DD90ED90FC90C082D182E282F38238 +:1057300004968031910569F7EFA1F8A53496F8A792 +:10574000EFA3205F3F4F4217530709F7ADA5BEA552 +:10575000B8A7AFA3B12CA12C1AAA19AAEFA1F8A53A +:10576000C080D180E280F380E894F7F81501FFEF64 +:105770002F1A3F0A2FA138A53CAB2BAB8501410165 +:1057800033E08316910461F1ABA9BCA954964D9006 +:105790005D906D907C905797E89477F8A7019601FB +:1057A000C301B2010E942D391816C4F02601370139 +:1057B000BFEF8B1A9B0AEBA9FCA97496FCABEBAB71 +:1057C00073016201DDCF6AE070E0E1E0F0E0EC0F30 +:1057D000FD1FEC0DFD1D8081918139CE8401E8CF44 +:1057E000A016B10609F44AC0ADA4BEA429A93AA9DD +:1057F000A20EB31E000F111F000F111FF801EE0FB4 +:10580000FF1FEE0FFF1F4DA55EA5E40FF51F90E0F3 +:1058100080E0D5014D915D916D917D915D01C080DC +:10582000D180E280F3809D0124503109D901CD92CD +:10583000DD92ED92FC921397419351936193719392 +:1058400001968430910529F7EDA9FEA98081918107 +:10585000A281B3812FA538A9020F131FF80140813F +:10586000518162817381EDA9FEA9408351836283D6 +:105870007383F80180839183A283B3832DA93EA90A +:105880002C5F3F4F26963FAF2EAF269710EFA12EED +:10589000BB24BA9449A95AA9A41AB50A0FA118A5FC +:1058A0003CAB2BAB6101780154E1E50EF11C4101E9 +:1058B000F501EE0DFF1D89A99AA9E80FF91FD8017E +:1058C00050962D913D914D915C91539760817181DE +:1058D000828193810E946636EFA1F8A520813181F3 +:1058E000428153810E9446389B01AC01D7016D91E2 +:1058F0007D918D919C910E94D437F70161937193B2 +:10590000819391937F01FFEF8F1A9F0A24E0821603 +:10591000910471F6ABA9BCA94D905D906D907D90FE +:10592000BCABABAB7D01B4E0EB1AF108EDA9FEA96D +:105930002081318142815381D80150966D917D91B2 +:105940008D919C9153970E946636EFA1F8A5208116 +:105950003181428153810E9446389B01AC01C301D1 +:10596000B2010E94D437D7016D937D938D939C93A0 +:105970001397BFEFCB1ADB0A005F1F4FE0E1AE1AAF +:10598000B108F4E0CF16D10409F08DCF2FA138A5CE +:105990002C5E3F4F38A72FA349A95AA9405F5F4FFC +:1059A0005AAB49AB510126968EAD9FAD26979EAB63 +:1059B0008DAB93E02916310409F0D0CE8FA498A8BE +:1059C00020E1820E911C8E01015E1F4FEDA4FEA40A +:1059D0003CE3E30EF11CF401B291A2919291829109 +:1059E0004F01F80180839183A283B3835101D12CAD +:1059F000C12CD8014D905D906D907C90BFEFAB1A9B +:105A0000BB0AE4E0CE0ED11CF4E0AF16B104E9F01D +:105A1000F801EC0DFD1D2081318142815381F70198 +:105A2000EC0DFD1D60817181828193810E9466363B +:105A30009B01AC01C301B2010E94D437D8016D9320 +:105A40007D938D939C931397D4CFF701208131815F +:105A500042815381C301B2010E944638D8016D933F +:105A60007D938D939C931397B1E02B1A31080450CA +:105A70001109E4E1EE1AF108FFEF2F163F0609F0D5 +:105A8000AACF8FA998AD0E94C53B89AD9AAD0E945F +:105A9000C53B8BAD9CAD0E94C53B8FA598A90E94CC +:105AA000C53B8DA59EA50E94C53BCE0101960E94D7 +:105AB000C53BCE0143960E94CE1880E00E94671E2F +:105AC0008823B9F0FE017396A8E1B1E041915191AC +:105AD000619171914D935D936D937D932DA13EA145 +:105AE0002E173F0799F7CE0143960E94C53B0E94AF +:105AF000EE1A0E94F60E82E08093DD0281E0809330 +:105B0000DC021092DB028CE190E09093D80280934B +:105B1000D70228E130E03093DA022093D90285E100 +:105B200098E10E940C130E946C1168E873E180E018 +:105B300090E00E94E610F0E0E0E0099550CA0E9473 +:105B4000F60E82E08093DD0281E08093DC02109209 +:105B5000DB0280E290E09093D8028093D70248E184 +:105B600050E05093DA024093D9028CE198E10E9410 +:105B70000C130E946C1168E873E180E090E00E94D1 +:105B8000E610F0E0E0E00995B4CF0E94BD1B27CA03 +:105B900087E08093630210910201113011F50E9499 +:105BA000F60E82E08093DD021093DC021092DB029D +:105BB00020E130E03093D8022093D70248E150E052 +:105BC0005093DA024093D9028CE298E10E940C13C0 +:105BD0000E946C1168EE73E080E090E00E94E61095 +:105BE000FEC980E00E94671E882309F4F8C98091ED +:105BF000590290910201082F10E0A92FA150BB0B70 +:105C00000A171B0749F481508093590280910201C1 +:105C1000815080930201E3C98F31C0F7DD24DA940B +:105C2000D90ED81AB3E0000F111FBA95E1F7B4E10D +:105C30008B9F000D111D11240F5C1F4FDA94EFEFA5 +:105C4000DE1621F37801FCE1EF1AF108E016F10607 +:105C500018F0045E1F4FF2CFC7014C960E94243704 +:105C6000682FC7010E942C372FEFE21AF20AEECFFD +:105C70000E94F60E1093DC021092DB0285E090E0A9 +:105C80009093D8028093D70248E150E05093DA0213 +:105C90004093D90285E398E199CF82E08093630233 +:105CA00010E0812F0E94671E182F8130D1F028F05C +:105CB000823059F10E94EE1A5DC92091060130919F +:105CC000070145E050E060E971E084E690E00E9461 +:105CD000BA1382E10E94DF1C9093070180930601B2 +:105CE000E0CF209104013091050145E050E068ECDF +:105CF00070E084E190E00E94BA1383E10E94DF1C0F +:105D00009093050180930401CCCF2091030130E0F2 +:105D100045E050E064E670E08AE090E00E94BA134B +:105D200084E10E94DF1C80930301BBCF83E080935A +:105D3000630210E0812F0E94671E182F813031F11D +:105D4000A0F0823009F0B6CF2091090130E04AE09E +:105D500050E064EB70E090E080E00E94BA1388E1CC +:105D60000E94DF1C80930901E5CF20910B0130E0F8 +:105D700041E050E06EE170E090E080E00E94BA13F4 +:105D800086E10E94DF1C80930B01D4CF20910A0191 +:105D900030E045E050E06CE370E090E080E00E948D +:105DA000BA1387E10E94DF1C80930A01C3CF84E00D +:105DB00080936302809108010E94671E91E0811127 +:105DC00001C090E090930801D5C810E0A9E0EA2E48 +:105DD000E0926302812F0E94671E182F882321F012 +:105DE0008130E9F000E00AC055E0509363028091F1 +:105DF00016010E94671E8093160101E0F0905A027E +:105E000080ECF11001C088EC0E94891180EAF11049 +:105E100001C081EA0E9489110111DACF4BCF809134 +:105E20005A02812780935A02E8CF86E0809363026A +:105E300080910D010E94671E91E0811101C090E0E8 +:105E400090930D0197C81092DC0281E08093DB02F1 +:105E500086E00E94D10F21E0892B09F020E02093F9 +:105E6000620220EF30E042E150E064EA71E08CE34E +:105E700090E00E94BA131FA281E08093DD0200919E +:105E80006D0210916E0215950795B801012E000C58 +:105E9000880B990B0E94073660935C0270935D0239 +:105EA00080935E0290935F0210938A0200938902AE +:105EB0000E94F60E00E020E440E870E060E090E030 +:105EC00080E00E94320F23966CAD7DAD8EAD9FAD0C +:105ED00023970E94823920E030E040E451E40E94A0 +:105EE00066369B01AC0160E070E080EC91E40E94BA +:105EF000D4370E94B8384B017EA76DA723966CADAE +:105F00007DAD8EAD9FAD23970E94413820E030E0FB +:105F100040E451E40E94663620E030E040EC51E479 +:105F20000E94D5370E94B838CB017B01B40165507F +:105F3000710921E04BE00E94090F712C612CCC24E7 +:105F4000C394D12C05E010E0E6EFAE2EBB24BA944A +:105F5000FCEF4F2E55245A94AFEF6A1A7A0AB2E03A +:105F6000CB0ED11C4C0C5D1C302E330C33943FA651 +:105F700021E0432D2DA43EA4201A310AB101C7010E +:105F8000860D971D0E94090F8DA49EA48618970860 +:105F900021E04C2DB401C701800F911F0E94090F11 +:105FA00021E04FA5B101C701861997090E94090F89 +:105FB00021E04C2DB401C701801B910B0E94090FF9 +:105FC000601671060CF404C141E06CE270E088E1F7 +:105FD00090E00E94190D41E064E070E088E190E0FB +:105FE0000E94190D41E068E170E08CE290E00E94AF +:105FF000190D41E068E170E084E090E00E94190D25 +:10600000E1E0F0E0FEA7EDA7312C212C34E1C32E16 +:10601000D12C48ED642E77247A945DEE452E5524DC +:106020005A943FEF231A330A4DA55EA54E5F5F4F8A +:106030005EA74DA7440E551E410158E1850E911CE7 +:1060400041E0760188E1E80EF11CB701C4010E942D +:10605000190D28E1A22EB12CA218B30841E0B70116 +:10606000C5010E94190D41E008E110E00C191D095D +:10607000B801C4010E94190D41E0B801C5010E9498 +:10608000190D41E0B401C7010E94190D41E0B401AE +:10609000C8010E94190D41E0B501C7010E94190D08 +:1060A00041E0B501C8010E94190D2C143D040CF407 +:1060B00099C0A7E3B0E0B093D802A093D702E1E083 +:1060C000F0E0F093DA02E093D902F2E0F093DD021F +:1060D00084E498E10E940C1380915B02882309F408 +:1060E0008CC082E498E10E940C1320E030E040E78D +:1060F00052E460915C0270915D0280915E02909129 +:106100005F020E94D43720E030E044EB53E40E9469 +:1061100046382BED3FE049EC50E40E9466362BED0B +:106120003FE049EC5FE30E94D43723966CAF7DAF2C +:106130008EAF9FAF23978091890290918A022AE3C4 +:1061400030E03093D8022093D70245E150E05093DD +:10615000DA024093D90254E05093DD02853FA1E07A +:106160009A0708F470C08AE699E10E940C1300E0D7 +:1061700027E249E563E170E088E390E00E94D011F6 +:1061800081E00E94271901E024E04FA170E060E067 +:1061900090E080E00E94320F0E946C110E94F11684 +:1061A00086E00E94D10F892B09F052C080916202D3 +:1061B00081114EC0BFA1B85FBFA30E946C11EFA1B7 +:1061C000E7FF5ACE0E94D9130E94D9130C94BA2724 +:1061D00057FCC2CE0150110992E0A90EB11C4A0C25 +:1061E0005B1CBACE57FC1DCFF1E0CF1AD10822E0DC +:1061F000620E711C460C571C14CF80E498E10E947B +:106200000C1360915C0270915D0280915E0290912E +:106210005F02905820E030E040E752E40E94D4371B +:1062200020E030E044EB53E40E9446382BED3FE0A1 +:1062300049EC50E40E94663622E93AE046E05FE32A +:106240000E94D53772CF6AE070E00E9454178FCF5A +:106250008FA182508E3308F00ECE80915B02F1E068 +:106260008F2780935B0220EF30E042E150E064EA48 +:1062700071E08CE390E00E94BA130E94D913FBCD29 +:1062800020917F0230E041E050E06AEF70E090E062 +:1062900080E00E94BA1387E00E94DF1C80937F0297 +:1062A00093CF80916002909161020E94451E90936D +:1062B00061028093600288CF88E0809363028091BE +:1062C0000E010E94671E823009F481E080930E0166 +:1062D0000C94BA270E94F60EEE24E39400E320E328 +:1062E0004AE458E170E060E088E290E00E94370DF7 +:1062F0000E946C1164E670E080E090E00E94E6107D +:1063000086E00E94D10F892BD9F78091620281111A +:10631000F7CF5ACF8091860291E089278093860239 +:10632000882351F00E9418116093640270936502F3 +:10633000809366029093670281E080937A020C94C6 +:1063400014286058F80160830C94FD280F5F1F4FDC +:106350002016310611F00C94E8280E9418110E94B2 +:10636000053620E030E04AE755E40E9446380E94B6 +:1063700082396B017C0120E030E040E853E40E9468 +:10638000663620E030E040E853E40E94D5372B0128 +:106390003C0110E000E0B801012E000C880B990BC5 +:1063A0000E940736A30192010E94003687FF25C094 +:1063B0000E94A1354B015C010E94A13569A77AA713 +:1063C0008BA79CA7C501B40120E430E040E050E079 +:1063D0000E943A374B0169A57AA58BA59CA520E8B8 +:1063E00030E040E050E00E943A37CB0141E0B40198 +:1063F0000E94190D0F5F1F4FCECF80910D01882392 +:1064000049F10E94A13520E130E040E050E00E94D7 +:106410003A3768507109810991090E9407364B018A +:106420005C0120E030E040E852E4C701B6010E9480 +:10643000663620E030E040E852E40E94D5379B0108 +:10644000AC01C501B4010E94D5370E94B83885E07F +:106450000E9464100E946C11EEC18091870212E0CC +:1064600081111EC08091860213E0811119C08091B4 +:10647000170114E0811114C020E030E044E353E43C +:1064800060918202709183028091840290918502D2 +:106490000E94003615E087FD03C016E001C010E041 +:1064A00080911601882309F4D0C187EA0E948911DE +:1064B0000E94F60E01E020E440E870E060E090E029 +:1064C00080E00E94320F81E08093DD028093DC0245 +:1064D0001092DB0282E090E09093D8028093D70282 +:1064E00084E090E09093DA028093D9028FE091E00B +:1064F0000E9403178EE590E09093D8028093D70214 +:1065000085E090E09093DA028093D902C12ED12CDD +:1065100080910E01CC0CDD1C81112FC1F601E85ECB +:10652000FD4F40815181E12C0EE02CE161E070E0F3 +:106530008FE590E00E94370DF601E65FFD4F408148 +:106540005181E12C0EE02EE061E070E08AE490E001 +:106550000E94370D8091890290918A0223E030E0F9 +:106560003093D8022093D70222E130E03093DA0250 +:106570002093D90225E02093DD02853F21E0920798 +:1065800008F41AC18AE699E10E940C1300E027E2A0 +:1065900049E560E170E081E090E00E94D01180E088 +:1065A0000E9427190E946F1620E030E040EA52E472 +:1065B0000E94003687FF05C18BE590E09093D802DA +:1065C0008093D70284E190E09093DA028093D9021D +:1065D0000E946F1641E00E94861788EF0E94071301 +:1065E0008AEA99E10E940C13E12C0EE02EE04EE8BD +:1065F00059E161E070E08AE290E00E94370D60911D +:1066000080027091810290E080E00E94053620E0D7 +:1066100030E048EC52E40E9446386B017C01609106 +:106620007F0270E090E080E00E9407369B01AC01A1 +:10663000C701B6010E942D3918160CF0D4C08BE5A5 +:1066400090E09093D8028093D7028CE190E09093F1 +:10665000DA028093D9020E94DB16BC0190E080E050 +:106660000E94053620E030E04AE754E40E944638B4 +:1066700042E00E9486178CE899E10E940C13E12CFD +:106680000EE02EE040E759E161E070E08AE390E03F +:106690000E94370D0BE510E01093D8020093D7024B +:1066A00084E290E09093DA028093D9020E9433163C +:1066B000BC0190E080E00E94053620E030E04AE72F +:1066C00054E40E94463843E00E9486178EE699E122 +:1066D0000E940C131093D8020093D7028CE290E032 +:1066E0009093DA028093D9026091C7027091C80238 +:1066F0008091C9029091CA0240E00E9486170E94D0 +:106700006C110E946F1620E030E040EA52E40E94D3 +:106710002D3918160CF479C06091800270918102B5 +:1067200090E080E00E94053620E030E048EC52E442 +:106730000E9446386B017C0160917F0270E090E01E +:1067400080E00E9407369B01AC01C701B6010E94A0 +:10675000003687FF70C00E94181142E0660F771F55 +:10676000881F991F4A95D1F728EE33E040E050E0AA +:106770000E94A33720FD5AC05EC082EC99E113301D +:10678000C1F058F48EEC99E1113099F088EC99E160 +:10679000123079F08CEA99E10CC087EB99E1153061 +:1067A00041F08CEB99E1153020F082EB99E1163045 +:1067B00089F70E940C13C0CE6AE070E00E94541763 +:1067C000E5CE0E941811F2E0660F771F881F991F0F +:1067D000FA95D1F728EE33E040E050E00E94A3376D +:1067E00020FDEACE0CCF0E941811E2E0660F771F61 +:1067F000881F991FEA95D1F728EE33E040E050E07A +:106800000E94A33720FD1BCF45CF0E94181152E0F4 +:10681000660F771F881F991F5A95D1F728EE33E02E +:1068200040E050E00E94A33720FF76CF0E94D913AA +:1068300086EA0E94891180E090E0892B11F40C9483 +:106840006A270E9400000C946A2786E08093DD028C +:106850001092DC0281E08093DB020E94F60E0E941F +:106860006F1620E030E040EA52E40E942D391816FD +:1068700094F40E94181132E0660F771F881F991F49 +:106880003A95D1F728EE33E040E050E00E94A3377C +:1068900020FD0E94D913609180027091810290E0E6 +:1068A00080E00E94053620E030E048EC52E40E948F +:1068B00046386B017C0160917F0270E090E080E0DF +:1068C0000E9407369B01AC01C701B6010E94003649 +:1068D00087FF12C00E94181122E0660F771F881FE1 +:1068E000991F2A95D1F728EE33E040E050E00E944E +:1068F000A33720FD0E94D9138CE090E09093D8023A +:106900008093D70282E090E09093DA028093D902DC +:1069100035EFA31631E0B30650F06AE070E087EE81 +:1069200093E00E94541781E00E94271993CDB5018E +:1069300090E080E04AE00E941017F5CFC092B102CB +:10694000D092B202E092B302F092B402E091A702B8 +:10695000F091A80280819181A281B3818093B502D8 +:106960009093B602A093B702B093B80220E030E053 +:106970004FE753E4C701B6010E942D39181614F0F1 +:106980000C94D4274092B1025092B2026092B302AA +:106990007092B4020C9402270F931F93CF93DF934E +:1069A000EBECF2E0138212821682178280E180877C +:1069B00015821482128680EF91E091838083158680 +:1069C00014861786168681E0808B118A828B138A43 +:1069D000CBE8D2E022E832E03F8F2E8F27E432E08E +:1069E0003D8F2C8F2CE532E039A328A31AAE1AAACA +:1069F0001BAA1CAA1DAA40E050E06FE773E44EAB4F +:106A00005FAB68AF79AF44E650E060E070E04EA75E +:106A10005FA768AB79AB21E030E0398F288F3B8FDF +:106A20002A8F8BAF80E090E0A0E3B1E48883998364 +:106A3000AA83BB8380E090E0A0E0BFE38C839D83CA +:106A4000AE83BF8380E090E0A0E8BFE388879987AA +:106A5000AA87BB8780E090E0A0E3B1EC8C879D879C +:106A6000AE87BF878DEC9CECACE4BDEB888B998B3B +:106A7000AA8BBB8B80E090E0A0E2B1EC8C8B9D8B6D +:106A8000AE8BBF8B0E9418110EA51FA528A939A98E +:106A9000601B710B820B930B6AA37BA38CA39DA33A +:106AA000DF91CF911F910F9108958F929F92AF9296 +:106AB000BF92CF92DF92EF92FF92CF93DF93EC01E0 +:106AC000688179818A819B816115710581059105B4 +:106AD00021F464E279ED8BE597E02DE133EF41E0BD +:106AE00050E00E943A3749015A019B01AC01A7EAE4 +:106AF000B1E40E9459376B017C01ACEEB4EFA50103 +:106B000094010E946737C60ED71EE81EF91EF7FED5 +:106B100006C081E0C81AD108E10880E8F80AC882F6 +:106B2000D982EA82FB82C701B6019F77DF91CF91BC +:106B3000FF90EF90DF90CF90BF90AF909F908F909D +:106B400008958F929F92AF92BF92CF92DF92EF9271 +:106B5000FF92609128017091290180912A01909102 +:106B60002B01611571058105910521F464E279ED30 +:106B70008BE597E02DE133EF41E050E00E943A379A +:106B800049015A019B01AC01A7EAB1E40E945937BF +:106B90006B017C01ACEEB4EFA50194010E94673754 +:106BA000C60ED71EE81EF91EF7FE06C081E0C81A01 +:106BB000D108E10880E8F80AC0922801D0922901A2 +:106BC000E0922A01F0922B01C701B6019F77FF9056 +:106BD000EF90DF90CF90BF90AF909F908F900895EF +:106BE000609328017093290180932A0190932B01CF +:106BF0000895FB01DC0105900D920020E1F7089556 +:106C00000E94423608F481E00895E89409C097FB99 +:106C10003EF490958095709561957F4F8F4F9F4F73 +:106C20009923A9F0F92F96E9BB279395F6958795B7 +:106C300077956795B795F111F8CFFAF4BB0F11F47A +:106C400060FF1BC06F5F7F4F8F4F9F4F16C0882321 +:106C500011F096E911C0772321F09EE8872F762F57 +:106C600005C0662371F096E8862F70E060E02AF098 +:106C70009A95660F771F881FDAF7880F9695879584 +:106C800097F90895990F0008550FAA0BE0E8FEEF59 +:106C900016161706E807F907C0F012161306E407E0 +:106CA000F50798F0621B730B840B950B39F40A26D9 +:106CB00061F0232B242B252B21F408950A2609F4B7 +:106CC000A140A6958FEF811D811D08950E94793600 +:106CD0000C94EA360E94DC3638F00E94E33620F04D +:106CE000952311F00C94D3360C94D93611240C94BE +:106CF0001E370E94FB3670F3959FC1F3950F50E04D +:106D0000551F629FF001729FBB27F00DB11D639F5D +:106D1000AA27F00DB11DAA1F649F6627B00DA11D03 +:106D2000661F829F2227B00DA11D621F739FB00DA9 +:106D3000A11D621F839FA00D611D221F749F332719 +:106D4000A00D611D231F849F600D211D822F762FB2 +:106D50006A2F11249F5750409AF0F1F088234AF08F +:106D6000EE0FFF1FBB1F661F771F881F91505040FB +:106D7000A9F79E3F510580F00C94D3360C941E3732 +:106D80005F3FE4F3983ED4F3869577956795B79582 +:106D9000F795E7959F5FC1F7FE2B880F911D96959C +:106DA000879597F9089597F99F6780E870E060E00C +:106DB00008959FEF80EC089500240A941616170694 +:106DC00018060906089500240A94121613061406DC +:106DD00005060895092E0394000C11F4882352F03F +:106DE000BB0F40F4BF2B11F460FF04C06F5F7F4FF7 +:106DF0008F4F9F4F089557FD9058440F551F59F0DE +:106E00005F3F71F04795880F97FB991F61F09F3F97 +:106E100079F087950895121613061406551FF2CFC0 +:106E20004695F1DF08C0161617061806991FF1CF10 +:106E300086957105610508940895E894BB27662737 +:106E40007727CB0197F90895F999FECF92BD81BDBF +:106E5000F89A992780B50895262FF999FECF1FBA81 +:106E600092BD81BD20BD0FB6F894FA9AF99A0FBE73 +:106E700001960895052E97FB1EF400940E94513749 +:106E800057FD07D00E94A33707FC03D04EF40C94A3 +:106E9000513750954095309521953F4F4F4F5F4F5B +:106EA000089590958095709561957F4F8F4F9F4F76 +:106EB00008950E94C537A59F900DB49F900DA49F83 +:106EC000800D911D11240895B7FF0C9459370E942D +:106ED0005937821B930B08952F923F924F925F92E6 +:106EE0006F927F928F929F92AF92BF92CF92DF92DA +:106EF000EF92FF920F931F93CF93DF93CDB7DEB73F +:106F0000CA1BDB0B0FB6F894DEBF0FBECDBF0994D2 +:106F10002A88398848885F846E847D848C849B8429 +:106F2000AA84B984C884DF80EE80FD800C811B8137 +:106F3000AA81B981CE0FD11D0FB6F894DEBF0FBE66 +:106F4000CDBFED010895A1E21A2EAA1BBB1BFD01C6 +:106F50000DC0AA1FBB1FEE1FFF1FA217B307E40738 +:106F6000F50720F0A21BB30BE40BF50B661F771F90 +:106F7000881F991F1A9469F7609570958095909570 +:106F80009B01AC01BD01CF010895A29FB001B39F49 +:106F9000C001A39F700D811D1124911DB29F700D22 +:106FA000811D1124911D08955058BB27AA270E94C6 +:106FB000EC370C94EA360E94DC3638F00E94E33657 +:106FC00020F039F49F3F19F426F40C94D9360EF4CE +:106FD000E095E7FB0C94D336E92F0E94FB3658F37B +:106FE000BA17620773078407950720F079F4A6F5AE +:106FF0000C941D370EF4E0950B2EBA2FA02D0B012B +:10700000B90190010C01CA01A0011124FF27591BED +:1070100099F0593F50F4503E68F11A16F040A22FF3 +:10702000232F342F4427585FF3CF46953795279564 +:10703000A795F0405395C9F77EF41F16BA0B620B63 +:10704000730B840BBAF09150A1F0FF0FBB1F661FAA +:10705000771F881FC2F70EC0BA0F621F731F841FED +:1070600048F4879577956795B795F7959E3F08F013 +:10707000B0CF9395880F08F09927EE0F97958795D5 +:1070800008950E94F038E3950C9419390E945A38FB +:107090000C94EA360E94E33658F00E94DC3640F049 +:1070A00029F45F3F29F00C94D33651110C941E370C +:1070B0000C94D9360E94FB3668F39923B1F355231B +:1070C00091F3951B550BBB27AA27621773078407FB +:1070D00038F09F5F5F4F220F331F441FAA1FA9F391 +:1070E00035D00E2E3AF0E0E832D091505040E6957F +:1070F000001CCAF72BD0FE2F29D0660F771F881FE0 +:10710000BB1F261737074807AB07B0E809F0BB0BD2 +:10711000802DBF01FF2793585F4F3AF09E3F5105E6 +:1071200078F00C94D3360C941E375F3FE4F3983E0E +:10713000D4F3869577956795B795F7959F5FC9F7CF +:10714000880F911D9695879597F90895E1E0660F50 +:10715000771F881FBB1F621773078407BA0720F0C9 +:10716000621B730B840BBA0BEE1F88F7E095089532 +:107170000E94BF386894B1110C941E3708950E9484 +:10718000033788F09F5798F0B92F9927B751B0F07F +:10719000E1F0660F771F881F991F1AF0BA95C9F79B +:1071A00014C0B13091F00E941D37B1E008950C94E5 +:1071B0001D37672F782F8827B85F39F0B93FCCF398 +:1071C000869577956795B395D9F73EF49095809518 +:1071D000709561957F4F8F4F9F4F08950C94D936CE +:1071E0000E940337D8F3E894E0E0BB279F57F0F004 +:1071F0002AED3FE049EC06C0EE0FBB0F661F771F7C +:10720000881F28F0B23A62077307840728F0B25A41 +:10721000620B730B840BE3959A9572F7803830F408 +:107220009A95BB0F661F771F881FD2F790480C9462 +:10723000CB39EF93E0FF07C0A2EA2AED3FE049EC2B +:107240005FEB0E94EC370E94EA360F90039401FC3A +:107250009058E8E6F0E00C94FE390E94423608F4BB +:107260008FEF0895FA01EE0FFF1F309621053105CB +:10727000A1F16115710561F48038BFE39B0749F105 +:1072800068949038810561F08038BFEF9B0741F02A +:1072900099234AF5FF3FE1053105210519F1E894ED +:1072A0000894E795D901AA2329F4AB2FBE2FF85FE4 +:1072B000D0F310C0FF5F70F4A695E0F7F73950F0F7 +:1072C00019F0FF3A38F49F779F930DD00F9007FC89 +:1072D0009058089546F00C94D93660E070E080E84C +:1072E0009FE308954FE79F775F934F933F932F93CB +:1072F0000E945C3A2F913F914F915F910E946636B8 +:107300000C9497399F930E94F0380F9007FCEE5F22 +:107310000C9419390E944236880B990B089529F470 +:1073200016F00C94D3360C941D370C94D9360E9469 +:107330000337A8F39638A0F707F80F92E8942BE3E9 +:107340003AEA48EB5FE70E947C360F920F920F9269 +:107350004DB75EB70F920E94A43AE6E8F0E00E94B3 +:10736000D7394F915F91EF91FF91E595EE1FFF1F88 +:1073700049F0FE57E0684427EE0F441FFA95E1F705 +:107380004195550B0E941E3A0F9007FE0C94123A3D +:1073900008959F3F31F0915020F487957795679538 +:1073A000B795880F911D9695879597F90895DF9366 +:1073B000CF931F930F93FF92EF92DF927B018C018B +:1073C000689406C0DA2EEF010E947936FE01E89437 +:1073D000A5912591359145915591A6F3EF010E9414 +:1073E000EC37FE019701A801DA9469F7DF90EF907E +:1073F000FF900F911F91CF91DF9108959F938F93ED +:107400007F936F93FF93EF939B01AC010E946636CD +:10741000EF91FF910E94D7392F913F914F915F914A +:107420000C9466369B01AC0160E070E080E89FE35D +:107430000C9446380C94D3360C94C9390E94033707 +:10744000D8F39923C9F3940F511DA3F391505040E1 +:1074500094F059F0882332F0660F771F881F9150FF +:107460005040C1F79E3F51052CF7880F911D96950E +:10747000879597F908955F3FACF0983E9CF0BB2745 +:10748000869577956795B79508F4B1609395C1F7A0 +:10749000BB0F58F711F460FFE8CF6F5F7F4F8F4F3E +:1074A0009F4FE3CF0C941E3716F00C94C9390C94FF +:1074B000D93668940C94D3360E940337A8F39923E5 +:1074C000C1F3AEF3DF93CF931F930F93FF92C92FB6 +:1074D000DD2788232AF02197660F771F881FDAF7A8 +:1074E00020E030E040E85FEB9FE3883920F0803E09 +:1074F00038F021968F770E94D537EEEAF0E004C08D +:107500000E94D537EBEDF0E00E94D7398B01BE0128 +:10751000EC01FB2E6F5771097595771F880B990B3E +:107520000E94073628E132E741E35FE30E947936A3 +:10753000AF2D9801AE01FF900F911F91CF91DF9178 +:107540000E94EC370C94EA36FA01DC01AA0FBB1F4B +:107550009B01AC01BF5728F42227332744275078DA +:1075600020C0B75190F4AB2F00244695379527954E +:10757000011CA395D2F3002071F0220F331F441F8A +:10758000B395DAF30ED00C94D43761307105A0E8CE +:107590008A07B94630F49B01AC0166277727882714 +:1075A0009078309621F0208331834283538308956D +:1075B00097FB072E16F4009407D077FD09D00E94A0 +:1075C000F93A07FC05D03EF4909581959F4F0895B8 +:1075D000709561957F4F0895EE0FFF1F0590F49110 +:1075E000E02D09940E94C537B7FF0895821B930BC5 +:1075F0000895AA1BBB1B51E107C0AA1FBB1FA617FA +:10760000B70710F0A61BB70B881F991F5A95A9F74B +:1076100080959095BC01CD0108950F931F93CF9352 +:10762000DF93869F8001879F100D969F100D112478 +:10763000C8010E94293BEC01009729F0A80170E0E5 +:1076400060E00E94193DCE01DF91CF911F910F9113 +:1076500008950F931F93CF93DF938230910510F419 +:1076600082E090E0E091E106F091E20630E020E077 +:10767000B0E0A0E0309799F42115310509F44AC033 +:10768000281B390B24303105D8F58A819B8161157F +:10769000710589F1FB0193838283FE0111C0408152 +:1076A00051810281138148175907E0F048175907A3 +:1076B00099F4109761F012960C93129713961C93FD +:1076C0003296CF01DF91CF911F910F9108950093D2 +:1076D000E1061093E206F4CF2115310551F042176F +:1076E000530738F0A901DB019A01BD01DF01F80160 +:1076F000C1CFEF01F9CF9093E2068093E106CDCFA1 +:10770000FE01E20FF31F81939193225031093983D7 +:107710002883D7CF2091DF063091E006232B41F458 +:1077200020912E0130912F013093E0062093DF0647 +:1077300020912C0130912D012115310541F42DB7F7 +:107740003EB74091300150913101241B350BE0913F +:10775000DF06F091E006E217F307A0F42E1B3F0BC3 +:107760002817390778F0AC014E5F5F4F24173507B3 +:1077700048F04E0F5F1F5093E0064093DF06819361 +:1077800091939FCFF0E0E0E09CCFCF93DF93009701 +:10779000E9F0FC01329713821282A091E106B091C8 +:1077A000E206ED0130E020E01097A1F42081318164 +:1077B000820F931F2091DF063091E00628173907CA +:1077C00009F061C0F093E006E093DF06DF91CF910E +:1077D0000895EA01CE17DF07E8F54A815B819E0133 +:1077E00041155105B1F7E901FB83EA8349915991AC +:1077F000C40FD51FEC17FD0761F4808191810296BB +:10780000840F951FE90199838883828193819B83EB +:107810008A83F0E0E0E012968D919C911397009797 +:10782000B9F52D913C911197CD010296820F931FCE +:107830002091DF063091E0062817390739F6309796 +:1078400051F51092E2061092E106B093E006A09383 +:10785000DF06BCCFD383C28340815181840F951F43 +:10786000C817D90761F44E5F5F4F88819981480F2F +:10787000591F518340838A819B8193838283211581 +:10788000310509F0B0CFF093E206E093E1069ECF18 +:10789000FD01DC01C0CF13821282D7CFB0E0A0E09F +:1078A000E4E5FCE30C946E378C01009751F4CB01B6 +:1078B0000E94293B8C01C801CDB7DEB7E0E10C94F2 +:1078C0008A37FC01E60FF71F9C0122503109E217AD +:1078D000F30708F49DC0D901CD91DC911197C6172B +:1078E000D70798F0C530D10530F3CE01049786173D +:1078F000970708F3C61BD70B2297C193D1936D93BB +:107900007C93CF010E94C53BD6CF5B01AC1ABD0A68 +:107910004C018C0E9D1EA091E106B091E206512C07 +:10792000412CF12CE12C109731F58091DF069091DC +:10793000E0068815990509F05CC04616570608F060 +:1079400058C080912C0190912D01009741F48DB782 +:107950009EB74091300150913101841B950BE8177F +:10796000F90708F055C0F093E006E093DF06F9014F +:1079700071836083A0CF8D919C91119712966C902A +:10798000129713967C901397A815B90559F56C01B9 +:1079900042E0C40ED11CCA14DB0420F1AC014A1928 +:1079A0005B09DA011296159780F062827382518327 +:1079B0004083D9016D937C93E114F10471F0D701F8 +:1079C0001396FC93EE93129776CF22968C0F9D1F01 +:1079D000F90191838083F301EFCFF093E206E09306 +:1079E000E10669CF4816590608F42C017D01D30140 +:1079F0009ACFCB010E94293B7C01009749F0AE0150 +:107A0000B8010E94103DC8010E94C53B870153CFB9 +:107A100010E000E050CF81E090E0F8940C94303D0D +:107A2000FB01DC0102C001900D9241505040D8F79B +:107A30000895DC0101C06D9341505040E0F7089576 +:107A4000FB01DC018D91019080190110D9F3990B94 +:107A50000895FB01DC0101900D920020E1F70895EB +:047A6000F894FFCFC8 +:107A640001FF013C9600400101280F05010101536B +:107A74005A746970000001010E482441A2BCDD3F24 +:107A84000DE159BB0C219836010000000000E3060B +:107A94008000454550524F4D000052455345542EE9 +:107AA40000000C0604040202020203031804FC038F +:107AB400E003C403A8038C037003540338031C03BA +:107AC4000003E402C802AC021804900274025802D3 +:107AD40018043C02200258023C020402200258020C +:107AE400E801CC01B001940178018C035C01E4024B +:107AF400400124015C01A80308015802840E340EDD +:107B0400E40D940D440DF40CA40C540C040CB40BAF +:107B1400640B140B840EC40A740A240AD409140BCB +:107B240084093409E408940834094408E4089408EE +:107B3400F407A40754070407B40664061406C4052E +:107B440074052405D404840434049408000000005B +:107B540005127B0F28132713320064009600C80017 +:107B6400FA002C015E019001C20142102610061099 +:107B74007019EA0FCE0FB20FAE1176113E11061135 +:107B8400CE1096105E106E616E00696E66006F76A0 +:027B9400660089 +:00000001FF diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/1.8t7.ino.with_bootloader.standard.hex b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/1.8t7.ino.with_bootloader.standard.hex new file mode 100644 index 0000000..68ff2e9 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/1.8t7.ino.with_bootloader.standard.hex @@ -0,0 +1,2013 @@ +:020000040000FA +:100000000C94EF0C0C94170D0C94170D0C94AF225C +:100010000C94170D0C94170D0C949A220C94170D38 +:100020000C94170D0C94170D0C94170D0C94170DC0 +:100030000C94170D0C94170D0C94170D0C94170DB0 +:100040000C9450220C94170D0C94170D0C94170D52 +:100050000C94170D0C9486230C94170D0C94170D0B +:100060000C94170D0C94170D05A84CCDB2D44EB9B5 +:100070003836A9020C50B9918688083CA6AAAA2A4B +:10008000BE000000803F07634236B79BD8A71A39ED +:10009000685618AEBAAB558C1D3CB7CC5763BD6DD6 +:1000A000EDFD753EF6177231BF000000803F08007D +:1000B0000000BE922449123EABAAAA2ABECDCCCCE7 +:1000C0004C3E00000080BEABAAAAAA3E0000000081 +:1000D000BF000000803F0000000000084178D3BB53 +:1000E0004387D1133D190E3CC3BD4282AD2B3E6800 +:1000F000EC8276BED98FE1A93E4C80EFFFBE01C4F1 +:10010000FF7F3F0000000000800400003FF0383017 +:1001100033103F90381033902790261030903FF0E6 +:1001200000008004800400003FF03870303023105D +:10013000279020102010279027903FF00000800487 +:10014000800400003FF03CF03CF02010249024900C +:1001500020103CF03CF03FF00000800480040000E0 +:100160003FF037B023103030387038703030231003 +:1001700037B03FF000008004FCF4F860E044C08C2D +:10018000C11CC22CC44CC88CD10CA204C4048FFC6A +:10019000187CBCFC8000BFF81FF8B0281FF8B4081A +:1001A0001FF8B1081FF8B048BFF8B288BFF8800048 +:1001B0008000BFF81FF8B0081808B9E819B8B838B7 +:1001C0001838B9B8B9F8B0F8BFF8800015543FF83E +:1001D00015503FF01550387010203104138C22A8B0 +:1001E00017FC2AA80000000015543FFC15543FFCE2 +:1001F00015543C0414043CFC14543CFC005400A86A +:1002000000000000800400003FF03CF034B0249077 +:10021000249027902310303038703FF00000800485 +:10022000FF7CFE7CFCECE8DCC84C984C8824082061 +:1002300000000000000000008004E01CF3FCE7FC6C +:10024000CE0C8E1C9F9C1F3C1F0C0E0C0FFC87F8C5 +:1002500081E4C00CE01CF87C0004580858085808D9 +:1002600040087FF860185FE85B685FE85B681CE83F +:100270005FE80000800400003FF03CF03CF03CF000 +:10028000201020103CF03CF03CF03FF000008004D7 +:10029000F87CF7BC00007FF80000BFF4AB54AB540F +:1002A000AB54AB54AB54AB54BFF4C00CF03CCE0CCD +:1002B000BF04B30473007F007E007C007C007C6080 +:1002C000BC64BE04CF0CF03C81DC559C2904550075 +:1002D000299055D003FCFF002E002670025082703A +:1002E000E600EE04800C001C3FF43FE03FC4378C76 +:1002F0002318303038703CF03FF03FF000008004AD +:10030000058074B857A876B80580F97C4694AAA8E9 +:10031000F97C068874A8578C75740698F03CCE4C0E +:10032000BC34B814188010804230607860F844C043 +:100330008004B884CFCCF03CE01CC00C8FC49FE498 +:100340009FE49FE400000300030003000780078090 +:1003500003008004F87CC00CC00CCFCCCFCCCFCC39 +:10036000CFCCCFCCCFCCC84CC84CCFCCC00CC00C61 +:10037000F87C8004BCF43FF03870B7B4B6B4B5B4C0 +:10038000B7B438703FF0BCF48004F87CFCFCF87C17 +:10039000E01CC00CC00CC00CC00CC00CC00C800415 +:1003A0008004FFFCF87CFCFC8004000020001000AE +:1003B00008001000270000000000000000000000FE +:1003C00000008004C3FC18001800C3FCFFFCFF0CF5 +:1003D00000600060FF0CFFFCF0FC06000600F0FC73 +:1003E0008FC4102020104CC89FE43DF03DF01DE06C +:1003F0003EF03F709FE48CC400003030F87CF33C4A +:10040000F4BCF6BCF4BCF6BCF4BCE49CC84CD02CE8 +:10041000D02CC84CE79CF03C882408203830383079 +:10042000383038303830383039303BB03FF03FF07A +:100430000000800400000000000F1DC208000544F9 +:1004400042080003845FBF000FE44410000115451B +:100450001000054CC97F8009244F900007C4C110CB +:1004600000054D413F00055443810007C44D020083 +:100470000544411400055541080007C881040000E7 +:1004800000000000000000000001083FFE001FFF08 +:10049000810000004002000007FE0FF8000402087F +:1004A0000800040208880007FE0888000402088883 +:1004B00000040208880007FE0888000402094800BA +:1004C000040202300007FE040C00040218040000BD +:1004D00000000000000000000007FE13FE00040200 +:1004E0000840000402084000040201FC0004023835 +:1004F0008400040208840007FE0FFF0004020800C5 +:1005000000040209FE00040209020004020B0200BA +:1005100004020D020007FE09FE00040201020000B1 +:1005200000000000000000000001100080001FFF1C +:1005300080800001103FFF00004004080007FC0419 +:100540000800044404100004440210000444022083 +:10055000001FFF812000004000C00000A00130000B +:100560000110020800060C0C07001803B00200007E +:10057000000000000000000000004000800000407B +:100580000080000FFF3FFF000841040800084104FD +:100590000800084104100008410210000FFF02206B +:1005A000000841012000004000C000004001300070 +:1005B000004002080000400C07000040300200002C +:1005C0000000000000000000001FDF1020000212E9 +:1005D0000C20000224042000047F8020000424B8A2 +:1005E00020000FA488500014BF88500004A4885035 +:1005F0000004A488480004BF88880004A48A8800F6 +:1006000007A48C840004448907000081860200004E +:100610000000000000000000000FF0049100044002 +:10062000025200047F905400045088FF0007D084D9 +:1006300081000451008100044901FF0007CA0281C2 +:10064000000444048100044A1CFF0007EA048100FE +:100650000C510481000061C48500004080820000CC +:1006600000000000000000000007FF802000008460 +:1006700007FF0000840401000084040100008404DA +:1006800001000FFFC7FF0000840400000084040085 +:1006900000008405FF000084050100010409010039 +:1006A0000104090100020411FF000404010100001B +:1006B000000000000000000000008204FF00004471 +:1006C00002010007FF902100001010210000101708 +:1006D000FD0000101021000FFFD06100001010A1DC +:1006E00000002811210000281221000044142100DC +:1006F000008210A1000301D045000C009002000010 +:10070000000000000000000000084410FE00042863 +:1007100010920005FF22920000103C920000100889 +:1007200092001CFE109200041020FE0004103E9265 +:100730000005FF809200041000920005100E920048 +:100740000610309200041000FE000010008200002D +:1007500000000000000000000007DF8840000A24BD +:10076000104000114210FE00040022820002FF3DF2 +:10077000020008010A420009F9103200090920129A +:100780000009F93E0200090900020009090E0200F1 +:1007900009F93022000805001400080200080000D2 +:1007A0000000000000000000000FC3F1E0000FE3B4 +:1007B000F1F8000C70C19E000C30C186000C30C1F5 +:1007C00083000C30C183000C60C183000C60C183C6 +:1007D000000FC0C183000FC0C186000C00C186009D +:1007E0000C00C198000C03F1F8000C03F1E00000CC +:1007F00000000000000000000000200820000FFFA3 +:1008000009FC00002008000000203E880003FE08CC +:10081000500002020BFE0003FE0C400002021840D2 +:100820000003FE2BFE00020208480003FE088800B9 +:10083000020208500002022830001FFF91CC000085 +:10084000000000000104047C0000880444000FFF45 +:100850003F4400002004440000200C440000200E0F +:1008600044001FFF9544000020144400005024441D +:100870000000500444000088044500010404850081 +:1008800006038503001801040000000000000000BA +:100890000000000002FE01000002823FFF0004820F +:1008A00002000004FE0200000C1004FC00141004FE +:1008B000080005FF8C10000410141000043825FFF8 +:1008C0000004340410000452041000049184100049 +:1008D0000510045000041004200000000000000077 +:1008E000000000000000000000047E21FC00044223 +:1008F0001104001F7E090400044221FC000542117E +:100900000400067E1104000C0005FC0015FF8800A1 +:1009100000040813FE000448325200044F12520033 +:10092000044812520014A8125200091F97FF000039 +:1009300000000000000000000002103DFC0002105A +:10094000250400041025040005FFBDFC000C102543 +:1009500020000C38252000143825FE0004543D20CA +:1009600000045425100004922510000511A509006B +:1009700006113D450004102583000410010100000C +:100980000000000000000000001FC8102000124AF4 +:100990000C20001AC904200017480020001FFFB8CF +:1009A000200002080850001FC80850000208085024 +:1009B0000003C80848001E1408880001540A880073 +:1009C00015220C84001443890700008106020000F0 +:1009D00000000000000000000002030010001FDC07 +:1009E0003EFE000890021200051004FF001FDF8485 +:1009F000120002120CFE001FD2021000021222FE90 +:100A0000000A921410000A5214100012220DFF0066 +:100A100002220810000A42141000040223FF000002 +:100A20000000000000000000000F78BC2000094812 +:100A3000A45000094AA85000094AA88800094AB1F0 +:100A400004001FFEAAFB00094AA42000094AA420B2 +:100A500000094AA7FE00094AB420000948A9240059 +:100A60000B48A22200088AA4A2001119204000000D +:100A70000000000000000000000020008000005086 +:100A800001FC000088010400010403080006FB04C7 +:100A900090000800C0600007DF01800004510600DC +:100AA0000004511BFE00045102020007D90202009B +:100AB0000456020200001003FE00001002020000B3 +:100AC0000000000000000000000208209000027FEB +:100AD0009890001F8009FF00022201100006218B60 +:100AE000100007628DFE000AA20910000A141110FE +:100AF00000121431FE00020811100002141110003F +:100B00000222111000024391FF0002811100000037 +:100B1000000000000000000000100700000008F8BE +:100B20003FFE000480200200008020020000BE235F +:100B3000E2001C8222220004A42222000494222229 +:100B4000000488222200049423E2000522200200EF +:100B500005422002000A003FFE0011FFA002000033 +:100B600000000000000000000000820FFE000044B2 +:100B700000400007FF80400000100040000010000F +:100B8000400000101FFF800FFFC040000010004019 +:100B90000000280040000028004000004400400001 +:100BA00000820040000301C140000C008080000072 +:100BB0000000000009FF00400004203FFF00042067 +:100BC00000000000FE0000001C420FFC0004420078 +:100BD000000007FF80000004000FFC0004FF00007D +:100BE00000048100000005810FFC0006810804005C +:100BF00004FF08040000810FFC000000000000005A +:100C000000000000000000000000401F7E001FFFE9 +:100C100084020010808442000A4A0442000A31081B +:100C2000420012C50F42000304197F001DF829017C +:100C3000000040090100084209FD000842090100C6 +:100C400008420F01000FFE0905000002000200002B +:100C500000000000000000000001000FFE00010085 +:100C600008200003FF0820000201082000042208D9 +:100C7000200008200BFE001020082000005008284B +:100C8000000050082400008808220000881020007E +:100C900001041020000203A7FF000C010000000067 +:100CA000000000000008000000021F88FE001FD0A6 +:100CB0000E22000420302200045F80220007849E60 +:100CC000220004850822000494082200049428FECF +:100CD0000004971E42000494084200089408420051 +:100CE0000AAC0A420011440C4200008389FF000054 +:100CF00000000000000000000000400080001FFF16 +:100D00009FFC0000400410000FFF02200000003F85 +:100D1000FF000FFE00000008420FF800084208081C +:100D2000000FFE08080008020FF80008000808007D +:100D3000080008080008000FF8001000080800006C +:100D400000000000000000000007FE0FF800040291 +:100D5000000000040200000007FE00000004023F43 +:100D6000FE00040200800007FE0080000090049056 +:100D70000008910C880006931086000294208200DF +:100D8000009000800000900280001FFF81000000A2 +:100D9000000000000000000000041012020005FF27 +:100DA0009FD20005009212001E28A2120004443FA8 +:100DB000F200048202120006000212000CFE1FD292 +:100DC00000141012520004101242000410134200CA +:100DD000041012820015FF820A00080002040000BD +:100DE00000000000000000000000200000000020C3 +:100DF0003E04001FFFA204001000A2FF0000012219 +:100E000004000FFE22040000403E44000040222463 +:100E1000000440222400047C220400044022040038 +:100E20000A403E0400094022240010FF8014000004 +:100E300000000800000000000010FE0820000882EA +:100E40000BFF0004820A010010FE3C5100088208DA +:100E50008800088209040002FE0C0000040019FC4E +:100E60000009FF282000192908200009290820006E +:100E7000092908200009292BFF000BFF9000000022 +:100E80000000000000000000001F7F90F800010833 +:100E90000888000A10088800047F0107001FC13A73 +:100EA0000000054909FC0004490884000449088839 +:100EB000000449084800044908500004490A200079 +:100EC00004160C5800142189870008C0860200000F +:100ED000000000005361766500466C6970004D614A +:100EE000696E2053637265656E004A5000454E007E +:100EF000434E00594553004E4F004F4E004F46465B +:100F000000496E666F7300426967005049440044AF +:100F10006972656374005361766500426F6F737424 +:100F2000004F666600536C6565700053617665001E +:100F3000426F6F737400536C656570004465666141 +:100F4000756C74004164640044656C65746500529E +:100F5000656E616D650043616C6962726174650004 +:100F60004368616E67650052657475726E00416218 +:100F70006F7574004C616E67004C6F636B004C4F73 +:100F80005720566F6C00526F746172790042757A07 +:100F90007A65720053637265656E00436F6E74729A +:100FA0006F6C0054696D65720054656D7000546912 +:100FB00070001FE03FF07038601860186018FFFC88 +:100FC000FCFCFCFCFCFCF87CF87CFCFC7FF81E10B4 +:100FD00033382D7C25382D3825382D386D80DEC0EE +:100FE000BF40BF40DEC061803F007FF0FFE0C0082F +:100FF000C01CC038C870DCE4CFCCC78CC30CC00C9C +:10100000C00CFFFC7FF8000006000C0018F838F058 +:1010100030307060707878F878003C023F0C1FF830 +:101020000FF003C000007FF8FFFCC00CC30CCB4CDA +:10103000DB6CDB6CD86CDCECCFCCC78CC00CFFFC61 +:101040007FF8030007800FC00CC01CE01CE03CF0E0 +:101050003CF07FF87FF8FCFCFCFCFFFC7FF81140C3 +:10106000820021208FE023FC82004A23E200FE2040 +:101070009FF013F880802220C0804221BFF0FBFA4D +:10108000888002208480022084801A208080E3FEF1 +:101090008280020101000F421FC0784110400840C9 +:1010A000904008421FC008411040FFFD104008401A +:1010B0005FC00840800008413FE008432520104100 +:1010C0002520104125202041252040417FF07FF838 +:1010D0004880020049000201FFF0020100100202F4 +:1010E0007F202200410023F07F0022000800220020 +:1010F000FF80220088802200888022008A802200CF +:101100008900FFFC080023F21FC022111040FBF0F1 +:10111000904022121FC02A11104033F1104060008D +:101120005FC0AFFC800020413FE0224325202279B0 +:10113000252022412520A541252048FD7FF0108350 +:10114000DFC010825040208250402FFFDFC06082FD +:10115000520061C25200A1C25FE022A3D20022A2CB +:10116000510024925100288E5090308BD450208210 +:10117000583020801010104047C017FC4440200316 +:10118000F44023F844406208C440A3F8E44020013E +:1011900054402FFD44402806444023F8444020405A +:1011A0004450204048502140503020804000209240 +:1011B0001FC03DF990402090904040901FC07BFFA1 +:1011C0000000A0013FE021F90200FD090200210911 +:1011D0007FF021F90500210945002909888031F9AE +:1011E0001070210820202500202070F8AE0FA90FD4 +:1011F000A30F9B0F940F8D0F860F7E0F790F740F27 +:101200006E0F670F600F560F4F0F480F440F670F99 +:101210003C0F360F300F2B0F250F210F1B0F160F12 +:101220000F0F0B0F070F010FFD0EFA0EF70EF30E47 +:10123000F00EED0EEA0EDE0ED90ED40E2D3E003E5F +:101240000053656C65637420546970005D203D2017 +:1012500000505B0000000000003E5B4F5B3E3E6BB9 +:101260004F6B3E1C3E7C3E1C183C7E3C181C577D40 +:10127000571C1C5E7F5E1C00183C1800FFE7C3E78C +:10128000FF0018241800FFE7DBE7FF30483A060E9E +:101290002629792926407F050507407F05253F5AE5 +:1012A0003CE73C5A7F3E1C1C08081C1C3E7F142255 +:1012B0007F22145F5F005F5F06097F017F00668900 +:1012C000956A606060606094A2FFA29408047E0446 +:1012D0000810207E201008082A1C08081C2A08086C +:1012E0001E101010100C1E0C1E0C30383E3830062C +:1012F0000E3E0E06000000000000005F0000000728 +:10130000000700147F147F14242A7F2A1223130855 +:10131000646236495620500008070300001C224131 +:10132000000041221C002A1C7F1C2A08083E0808D5 +:101330000080703000080808080800006060002085 +:10134000100804023E5149453E00427F4000724968 +:101350004949462141494D331814127F102745450C +:1013600045393C4A49493141211109073649494922 +:1013700036464949291E0000140000004034000090 +:1013800000081422411414141414004122140802F9 +:10139000015909063E415D594E7C1211127C7F496C +:1013A0004949363E414141227F4141413E7F4949C1 +:1013B00049417F090909013E414151737F080808ED +:1013C0007F00417F41002040413F017F08142241BE +:1013D0007F404040407F021C027F7F0408107F3E18 +:1013E0004141413E7F090909063E4151215E7F0985 +:1013F000192946264949493203017F01033F4040EC +:10140000403F1F2040201F3F4038403F63140814D6 +:101410006303047804036159494D43007F4141410E +:101420000204081020004141417F040201020440EF +:1014300040404040000307080020545478407F2873 +:101440004444383844444428384444287F38545469 +:10145000541800087E090218A4A49C787F0804048C +:101460007800447D40002040403D007F102844002B +:1014700000417F40007C047804787C0804047838BC +:1014800044444438FC1824241818242418FC7C08EC +:10149000040408485454542404043F44243C404069 +:1014A000207C1C2040201C3C4030403C442810281C +:1014B000444C9090907C4464544C44000836410065 +:1014C0000000770000004136080002010204023CDF +:1014D0002623263C1EA1A161123A4040207A3854AE +:1014E0005455592155557941215454784121555429 +:1014F000784020545579400C1E527212395555557A +:1015000059395454545939555454580000457C4164 +:101510000002457D420001457C40F0292429F0F07D +:10152000282528F07C545545002054547C547C0ACE +:10153000097F4932494949323248484832324A489B +:1015400048303A4141217A3A42402078009DA0A09B +:101550007D39444444393D4040403D3C24FF2424EF +:10156000487E4943662B2FFC2F2BFF0929F620C00C +:10157000887E090320545479410000447D4130485D +:10158000484A32384040227A007A0A0A727D0D19A0 +:10159000317D2629292F28262929292630484D4002 +:1015A00020380808080808080808382F10C8ACBAFE +:1015B0002F102834FA00007B000008142A1422227D +:1015C000142A14089500220095AA005500AAAA55CD +:1015D000AA55AA000000FF00101010FF00141414F8 +:1015E000FF001010FF00FF1010F010F0141414FC96 +:1015F000001414F700FF0000FF00FF1414F404FCB3 +:10160000141417101F10101F101F1414141F001093 +:101610001010F0000000001F101010101F1010100C +:1016200010F010000000FF1010101010101010101B +:10163000FF10000000FF140000FF00FF00001F105B +:10164000170000FC04F414141710171414F404F415 +:101650000000FF00F714141414141414F700F71406 +:101660001414171410101F101F141414F414101055 +:10167000F010F000001F101F0000001F14000000F9 +:10168000FC140000F010F01010FF10FF141414FFF1 +:10169000141010101F00000000F010FFFFFFFFFFEC +:1016A000F0F0F0F0F0FFFFFF0000000000FFFF0F80 +:1016B0000F0F0F0F38444438447C2A2A3E147E0210 +:1016C000020606027E027E026355494163384444A5 +:1016D0003C04407E201E2006027E020299A5E7A55A +:1016E000991C2A492A1C4C7201724C304A4D4D30CB +:1016F0003048784830BC625A463D3E494949007EF0 +:101700000101017E2A2A2A2A2A44445F4444405186 +:101710004A444040444A51400000FF0103E080FF3A +:10172000000008086B6B083612362436060F090FC6 +:1017300006000018180000001010003040FF0101E2 +:10174000001F01011E00191D1712003C3C3C3C000B +:101750000000000000000000240027002A00000014 +:101760000000250028002B000000000023002600B8 +:101770002900040404040404040402020202020214 +:101780000303030303030102040810204080010245 +:1017900004081020010204081020000000080002C4 +:1017A0000100000304070000000000000000AED5A7 +:1017B000F0A83FD300408D14A1C8DA1281CFD9F12F +:1017C000DB40A4A6AF200021007F220007424F4F3C +:1017D00054204641494C45440044414D414745440D +:1017E0000052202D3E200057202D3E20004641492A +:1017F0004C2D00504153532D002F00204D454D20BE +:10180000434845434B200076312E387437007631FB +:101810002E387437005265626F6F74004572726FB4 +:1018200072002D20004144432D3E20004F6E6C7904 +:10183000206F6E65004F7574206F66204D656D00DA +:101840002B002D004D4F44452000FFFFFFFFFFFF01 +:101850008003867080038003867080039FF3E130ED +:101860009FF39FF3E1309FF3983301CC9833983383 +:1018700001CC9833983387C098339833E1C09833BC +:101880009833E1C098339FF398C09FF39FF398C0BB +:101890009FF3800366CC8003800366CC8003FFFF48 +:1018A000010CFFFFFFFF01001FFF810061301F3FA0 +:1018B000873CE6FC8733873CE6FC87F3F8039E0F02 +:1018C0001F03F8039E0F1F03E13CFE0C07CFE13C12 +:1018D000FE0C07CF99033E3086C3E6CF380F9EF348 +:1018E000E6CF380F9EF39E0327CC81039E0327CCBF +:1018F0008103E0FFE10CE6CFE0FFE10CE6CF9803C7 +:10190000060000FF9803060000FFFFFF1EF0F8032B +:101910008003663099C38003663099C39FF3010C3E +:10192000F8FF9FF3010CF8FF9833393C01CF98334F +:10193000393C01CF9833FF0C793F98333ECCE0F32C +:1019400098333ECCE0F39FF33E0098CF9FF33E00E8 +:1019500098CF80033E30E7C380033E30E7C3FFFFEC +:10196000FFFFFFFFFFFFFFFFFFFF3030300056009B +:101970000FE01FC01FC03F803FF87FF07FE007C02F +:1019800007800F000E001C0018001000560014A065 +:101990003FF07FF8E01C6E18EC1C68186018E01C23 +:1019A0006058E01C7FF83FF014A043004552524FAE +:1019B0005200484F4C44004845415400574F524B49 +:1019C0005900424F4F535400534C454550004F4629 +:1019D000460025000102040810204080CC34112468 +:1019E0001FBECFEFD8E0DEBFCDBF12E0A0E0B1E078 +:1019F000E4E6FAE702C005900D92A233B107D9F7E9 +:101A000026E0A2E3B2E001C01D92A33EB207E1F7D7 +:101A10001CE0CFEEDCE004C02197FE010E94EC3A0E +:101A2000CE3ED107C9F70E9487230C94303D0C9419 +:101A3000000080389105B0F46034710598F4E4ED4D +:101A4000F9E190E1969FD001A0781124A80F67706A +:101A5000E60FF11D9491A152BD4F442321F08C91CA +:101A6000982B9C93089590958C919823FACF2F9260 +:101A70003F924F925F926F927F928F929F92AF921E +:101A8000BF92CF92DF92EF92FF920F931F93CF936B +:101A9000DF9300D01F92CDB7DEB7C22ED12C9601B6 +:101AA000280F391F37FD4FC0803891050CF04BC00F +:101AB000E9824A017B013C01402E512C160127E0AE +:101AC000220E311C93E0359427949A95E1F78B010F +:101AD000B12CA12C1B821A82EA81FB8183E0F5954F +:101AE000E7958A95E1F7EA0DFB1DE80DF91DE491F4 +:101AF0008A819B818770992720E830E002C0359564 +:101B000027958A95E2F7C901F0E0E223F923EF2B4C +:101B100041F04981B8018A819B81860D971D0E9401 +:101B2000190D8A819B8101969B838A838C159D0563 +:101B30009CF2A20CB31C0F5F1F4FC8018E199F09A6 +:101B4000841595053CF20F900F900F90DF91CF9187 +:101B50001F910F91FF90EF90DF90CF90BF90AF90CB +:101B60009F908F907F906F905F904F903F902F90BD +:101B700008954F925F926F927F928F929F92AF9251 +:101B8000BF92CF92DF92EF92FF92CF93DF93C090FC +:101B9000C702D090C802E090C902F090CA02A70123 +:101BA0009601C701B6010E9466364B015C01C8E18F +:101BB000D1E02C813D814E815F81C701B6010E9439 +:101BC0006636288139814A815B810E94D5372B0195 +:101BD0003C01288539854A855B85C501B4010E9491 +:101BE00066369B01AC01C301B2010E94D5372B01BF +:101BF0003C01A5019401C701B6010E9466362C85FF +:101C00003D854E855F850E9466369B01AC01C30110 +:101C1000B2010E94D537DF91CF91FF90EF90DF9016 +:101C2000CF90BF90AF909F908F907F906F905F907C +:101C30004F9008954F925F926F927F928F929F92F2 +:101C4000AF92BF92CF92DF92EF92FF920F931F93CA +:101C5000CF93DF9300D000D0CDB7DEB74B015C014E +:101C600029013A016701780120E030E0A9010E94D2 +:101C7000003687FDA6C020E030E0A901C301B20113 +:101C80000E94003687FD9DC020E030E0A901C80118 +:101C9000B6010E94003687FD94C081E02091A50224 +:101CA0003091A6022130310509F080E08093C60210 +:101CB00080928B0290928C02A0928D02B0928E0242 +:101CC00040928F0250929002609291027092920222 +:101CD000C0929302D0929402E0929502F092960202 +:101CE0006091B9027091BA028091BB029091BC02DE +:101CF0000E94053620E030E04AE754E40E9446386E +:101D000069837A838B839C83809297029092980256 +:101D1000A0929902B0929A029B01AC01C301B20158 +:101D20000E9466362B013C0140929B0250929C021D +:101D300060929D0270929E0229813A814B815C8162 +:101D4000C701B6010E9446386B017C01C0929F0218 +:101D5000D092A002E092A102F092A2028091A3028E +:101D60009091A402019769F5A501940160E070E0EB +:101D7000CB010E94D43760939702709398028093AE +:101D8000990290939A02A301920160E070E0CB0166 +:101D90000E94D43760939B0270939C0280939D02B3 +:101DA00090939E02A701960160E070E0CB010E9433 +:101DB000D43760939F027093A0028093A102909306 +:101DC000A2020F900F900F900F90DF91CF911F9173 +:101DD0000F91FF90EF90DF90CF90BF90AF909F90CA +:101DE0008F907F906F905F904F90089580E0EFED1F +:101DF000F2E081118FEF002481938193819381938D +:101E00000394D1F7EBECF2E017861686158614865C +:101E10000895DF92EF92FF920F931F93CF93DF937A +:101E20007C01D22E8B01040F111DEB0177FF02C044 +:101E3000D0E0C0E0C8010134110514F080E490E066 +:101E4000C817D9073CF44D2DBE01C7010E94190DDA +:101E50002196F0CFDF91CF911F910F91FF90EF90DE +:101E6000DF900895CF92DF92EF92FF920F931F932E +:101E7000CF93DF936B01122FEC017C01E40EF11C78 +:101E8000CE15DF0544F4202F412FB601CE010E946C +:101E9000090F2196F5CFDF91CF911F910F91FF9000 +:101EA000EF90DF90CF9008950F931F93CF93DF9320 +:101EB000EC018B0140E001960E94190D40E0B80151 +:101EC000CE0101970E94190DB8016F5F7F4F40E06E +:101ED000CE010E94190DB8016150710940E0CE0198 +:101EE0000E94190D40E0B801CE01DF91CF911F9102 +:101EF0000F910C94190DAF92BF92CF92DF92EF9297 +:101F0000FF920F931F93CF93DF936C017B018B01A3 +:101F1000040F151FEB015E01AE18BF08C017D107F3 +:101F200059F06991D601ED91FC910190F081E02D7D +:101F3000C6010995892B79F7C501DF91CF911F91D2 +:101F40000F91FF90EF90DF90CF90BF90AF900895EA +:101F5000833081F028F4813099F08230A9F008951F +:101F60008730A9F08830C9F08430B1F480918000C6 +:101F70008F7D03C0809180008F77809380000895CB +:101F800084B58F7784BD089584B58F7DFBCF809114 +:101F9000B0008F778093B00008958091B0008F7D5E +:101FA000F9CFCF93DF93282F30E0F901E656F84EB2 +:101FB0008491F901EA57F84ED491F901EE58F84EA0 +:101FC000C491CC23A1F081110E94A80FEC2FF0E066 +:101FD000EE0FFF1FE859F84EA591B491EC91ED2357 +:101FE00081E090E009F480E0DF91CF91089580E0F6 +:101FF00090E0FACF1F93CF93DF93282F30E0F901C1 +:10200000E656F84E8491F901EA57F84ED491F90159 +:10201000EE58F84EC491CC23A9F0162F81110E94DE +:10202000A80FEC2FF0E0EE0FFF1FE25AF84EA5913B +:10203000B4918FB7F894EC91111108C0D095DE23BC +:10204000DC938FBFDF91CF911F910895DE2BF8CFE6 +:10205000CF93DF9390E0FC01EA57F84E24918E581D +:10206000984EFC0184918823C9F090E0880F991F55 +:10207000FC01EC5AF84EA591B491FC01E25AF84EDD +:10208000C591D49161110DC09FB7F8948C912095A2 +:1020900082238C938881282328839FBFDF91CF914F +:1020A0000895623051F49FB7F8943C91822F809547 +:1020B00083238C93E8812E2BEFCF8FB7F894EC918C +:1020C0002E2B2C938FBFEACF1F93CF93DF93182F24 +:1020D000EB0161E00E942810209739F460E0812F25 +:1020E000DF91CF911F910C94FA0FCF3FD10511F4DE +:1020F00061E0F5CFE12FF0E0E656F84EE491E330F1 +:1021000031F140F4E130B1F0E230E1F0C038D10516 +:102110007CF7E4CFE73029F1E83059F1E430B1F74A +:1021200080918000806280938000D0938B00C09368 +:102130008A0004C084B5806884BDC7BDDF91CF919B +:102140001F91089584B5806284BDC8BDF7CF80918A +:102150008000806880938000D0938900C0938800BD +:10216000EDCF8091B00080688093B000C093B30041 +:10217000E5CF8091B00080628093B000C093B4003E +:10218000DDCF3FB7F8948091500290915102A09119 +:102190005202B091530226B5A89B05C02F3F19F0FB +:1021A0000196A11DB11D3FBFBA2FA92F982F8827D7 +:1021B000BC01CD01620F711D811D911D42E0660FB2 +:1021C000771F881F991F4A95D1F708958F929F9284 +:1021D000AF92BF92CF92DF92EF92FF924B015C01E0 +:1021E0000E94C1106B017C010E94C1106C197D0915 +:1021F0008E099F09683E734081059105A8F321E08F +:10220000821A9108A108B10888EEC80E83E0D81E92 +:10221000E11CF11C81149104A104B10429F7FF9081 +:10222000EF90DF90CF90BF90AF909F908F900895E8 +:102230002FB7F89460914C0270914D0280914E023C +:1022400090914F022FBF08950E9418118091D402DF +:10225000962F981B8091D502882331F09093D60257 +:102260001092D50280E008952091D302921740F495 +:102270009F5F9217A0F491E093BF889513BE0895D5 +:1022800081E08093D5026093D4028091CF02909137 +:10229000D00201969093D0028093CF0281E00895FE +:1022A00084E98093BC008091BC0084FDFCCF08953C +:1022B0008093BB0084E88093BC008091BC0087FFC2 +:1022C000FCCF089584EA8093BC008091BC0087FF16 +:1022D000FCCF88E70C9458110E94621180E480932F +:1022E000BB0084E88093BC00EFEDF2E09091BC006D +:1022F00097FFFCCF91919093BB008093BC0096E038 +:10230000EF3DF90799F78091BC0087FFFCCF0C9453 +:102310005011CF93C82F0E94621180E00E94581183 +:102320008C2F0E945811CF910C9450118038910538 +:10233000B4F5480F592F511D4138510514F040E8AC +:1023400050E0481BFB0177FD379633E0F595E795A4 +:102350003A95E1F7F695FE2FEE27F795E795E80F0A +:10236000F91FE152FD4F6770772781E090E001C0CF +:10237000880F6A95EAF7382F213041F4415078F000 +:102380008191DF011197832B8C93F8CF8095415079 +:1023900030F09191DF01119798239C93F8CF089525 +:1023A000CF92DF92EF92FF920F93CF93DF936C0166 +:1023B0007B01C42FD22F6034710524F4202FC60175 +:1023C0000E949611B7016D0F711D61507109603443 +:1023D00071052CF4202F4C2FC6010E949611202F3E +:1023E0004D2FB701C6010E94090FC6018C0F911D28 +:1023F000202F4D2FB7010197DF91CF910F91FF90C3 +:10240000EF90DF90CF900C94090F2F923F924F9254 +:102410005F926F927F928F929F92AF92BF92CF9274 +:10242000DF92EF92FF920F931F93CF93DF93CDB77D +:10243000DEB72A970FB6F894DEBF0FBECDBF9A83E2 +:1024400089836A3061F5DC0152968C91B8E08B9FEC +:1024500090011124E981FA8186859785820F931F67 +:10246000978786871586148681E090E02A960FB6B6 +:10247000F894DEBF0FBECDBFDF91CF911F910F91BA +:10248000FF90EF90DF90CF90BF90AF909F908F9094 +:102490007F906F905F904F903F902F9008956D3098 +:1024A00019F329813A813A872987D9011C96AD9081 +:1024B000BC90B0E8AB16B1040CF07BC0F901C68447 +:1024C000D784F0E4CF16D1040CF073C0D901529632 +:1024D0006C90529745E09501649E200D311D1124AA +:1024E000121613060CF065C0262C312C910153E016 +:1024F000220F331F5A95E1F72C0D3D1D12161306BE +:102500000CF057C05196BC91BB83E985FA85F089E0 +:10251000FC83649FB00111249B012C5A3D4E3A83E9 +:102520002983712CE981FA818491F5E07F1201C041 +:1025300080E0460138E0532E282F30E03E832D8383 +:102540004C8080FF4B80411004C03B818C81381748 +:10255000E1F010E000E00615C0F4D501A00FB11FB6 +:10256000B887AF83F12CE12CE61460F4B701680D55 +:10257000791D442D8F8198850E94190DBFEFEB1AAC +:10258000FB0AF2CF0F5F1F4FE6CF8D819E8195959D +:1025900087955A94820C931C5110CECF7394E98185 +:1025A000FA813196FA83E983A20CB31CF6E07F121C +:1025B000B9CFA985BA8552962C915297422F50E0F7 +:1025C0001C968D919C91B6E02B9F800D911D11243E +:1025D000E985FA85958784872389222309F444CFE6 +:1025E0006AEF64039001659F300D112420583F4F1E +:1025F000281739070CF038CFDF010190F081E02D6A +:102600000190F081E02D6AE0CD0109952DCF682F72 +:102610008BEC92E00C9405120F931F93CF93DF93F2 +:102620008C01D0E0C0E0F801EC0FFD1F649166233F +:1026300041F08BEC92E00E940512892B11F021965B +:10264000F2CFCE01DF91CF911F910F9108950895A0 +:1026500090E080E008956F927F928F929F92AF9268 +:10266000BF92CF92DF92EF92FF920F93CF93DF93BF +:102670007C01C62F01E020E340E370E060E00E94AF +:10268000320F570123E0A20EB11C00E02AE24AE219 +:1026900063E070E0C5010E94320F70E060E0C701A6 +:1026A0000E94540F67013FE2C30ED11C70E060E04E +:1026B000C6010E94540F6FE270E0C7010E94540FE0 +:1026C0006FE270E0C6010E94540FEC2FF0E0EE0FB5 +:1026D000FF1FE45BFE4F8080918053E0E52EF12CDC +:1026E000D12CC12C60E8662E712CD0E0C0E0FE0138 +:1026F00033E0F595E7953A95E1F7EC0DFD1DE80D12 +:10270000F91DE491CE0187709927930102C0359598 +:1027100027958A95E2F7C901F0E0E223F923EF2B30 +:1027200069F0CE01880F991F8C0F9D1F01E023E0F7 +:1027300043E0B7018A0D9B1D0E94320F2196CE30D7 +:10274000D105A9F632E0C30ED11C83E0E80EF11CDE +:102750002DE2E216F10449F6DF91CF910F91FF903F +:10276000EF90DF90CF90BF90AF909F908F907F9031 +:102770006F900895880F991F9093370280933602C7 +:10278000660F771F709335026093340280915B026D +:10279000882359F05093330240933202220F331FA3 +:1027A00030936E0220936D02089551954195510921 +:1027B000F1CF0F931F93CF9380910D01882399F050 +:1027C000CFEF0FEE11E061E085E00E94FA0FC80143 +:1027D0000197F1F760E085E00E94FA0FC8010197C8 +:1027E000F1F7C15081F7CF911F910F9108953F925A +:1027F0004F925F926F927F928F929F92AF92BF9211 +:10280000CF92DF92EF92FF920F931F93CF93DF93BC +:10281000CDB7DEB72E970FB6F894DEBF0FBECDBF93 +:10282000898380918802882309F4A8C110925C02F0 +:1028300010925D0210925E0210925F02C0905C02E4 +:10284000D0905D02E0905E02F0905F02898181117C +:10285000FDC18090760290907702A0907802B090AF +:102860007902A5019401C701B6010E94D4372B015A +:102870003C0120E030E0A9010E942D3918160CF02F +:10288000A0C1C301B2010E94BF3880910801882312 +:1028900009F4B8C18092470290924802A09249027E +:1028A000B0924A02E12CF12C00EA10E420E030E082 +:1028B00040E450E46E31710540F0E12CF12C00E869 +:1028C0001FE320E030E040E05FE360E070E080E3A1 +:1028D00091E40E941A0E8091C502882309F42AC14E +:1028E0000E9418116D837E838F8398878091AD023B +:1028F0009091AE02A091AF02B091B0024D815E8185 +:102900006F817885481B590B6A0B7B0B8091B9024C +:102910009091BA02A091BB02B091BC02481759072E +:102920006A077B0708F406C1E091A702F091A802AC +:1029300080819181A281B38189839A83AB83BC8397 +:10294000E091AB02F091AC029C01AD01608171811C +:10295000828193810E94D4374B015C012091B502A2 +:102960003091B6024091B7025091B80269817A81E4 +:102970008B819C810E94D4376B017C0120919B024A +:1029800030919C0240919D0250919E02C501B4017C +:102990000E9466362091B1023091B2024091B3029A +:1029A0005091B4020E94D5372B013C014092B102F4 +:1029B0005092B2026092B3027092B4023090C6029A +:1029C00031101AC0209197023091980240919902DB +:1029D00050919A02C701B6010E9466369B01AC0174 +:1029E000C301B2010E94D4376093B1027093B20266 +:1029F0008093B3029093B4024090B1025090B2021F +:102A00006090B3027090B4021091C1029091C20222 +:102A10009E87A091C302AD870091C402212F392F58 +:102A20004A2F502FC301B2010E942D3918160CF005 +:102A3000CCC0812F9E85AD85B02F8093B10290933D +:102A4000B202A093B302B093B402332009F4D6C00B +:102A500020919702309198024091990250919A02E8 +:102A6000C501B4010E9466364B015C0120919F02B2 +:102A70003091A0024091A1025091A202C701B6017B +:102A80000E9466369B01AC016091B1027091B20266 +:102A90008091B3029091B4020E94D437A5019401B1 +:102AA0000E94D5376B017C019B01AC01612F7E85B3 +:102AB0008D85902F0E94003687FD18C01091BD02B1 +:102AC0009091BE029E87A091BF02AD870091C00287 +:102AD000212F392F4A2F502FB601C7010E940036EF +:102AE00087FD04C01C2DDE86ED860F2DE091A90226 +:102AF000F091AA02812F9E85AD85B02F80839183AE +:102B0000A283B38389819A81AB81BC818093B50212 +:102B10009093B602A093B702B093B8028D819E81C4 +:102B2000AF81B8858093AD029093AE02A093AF02BF +:102B3000B093B0026091820270918302809184020E +:102B4000909185020E94B83889E02E960FB6F894CD +:102B5000DEBF0FBECDBFDF91CF911F910F91FF90D0 +:102B6000EF90DF90CF90BF90AF909F908F907F902D +:102B70006F905F904F903F900C946410809187020B +:102B8000609104017091050181110EC08091740261 +:102B90009091750220918602BC01222329F0609158 +:102BA0000301680F792F711D90E080E00E940536C7 +:102BB00060935C0270935D0280935E0290935F026B +:102BC0003DCEC301B20190585ECE8091BD0290917E +:102BD000BE02A091BF02B091C00289879A87AB87DD +:102BE000BC879C01AD01C301B2010E94003687FF82 +:102BF0002CCF89859A85AB85BC851FCF812C912CE4 +:102C0000540134CF20E030E040E05FE3C501B4017F +:102C10000E94D537A70196010E94003687FF09C0A0 +:102C20001092820210928302109284021092850206 +:102C300081CF80E090E0AFE7B3E48093820290938D +:102C40008302A0938402B093850274CF20E030E029 +:102C500040E05FE36091C7027091C8028091C902B1 +:102C60009091CA02D5CF80917A00806980937A00D2 +:102C70008EE480937C0061E070E080E090E00E9450 +:102C8000E61083B7817F826083BF80E130E020E07F +:102C900093B7916093BF889593B79E7F93BF9091B0 +:102CA0007A0096FDFCCF4091780050917900240F76 +:102CB000351F815069F780917A008F7780937A0071 +:102CC00084E0369527958A95E1F750E040E064EB83 +:102CD0007BE281E190E00E943A37C901089580913A +:102CE0007A00806980937A0088EC80937C006AE0A7 +:102CF00070E080E090E00E94E61083B7817F826000 +:102D000083BF80E270E060E093B7916093BF8895E5 +:102D100093B79E7F93BF90917A0096FDFCCF209150 +:102D2000780030917900620F731F815069F78091AC +:102D30007A008F7780937A00769567957695679578 +:102D400062527A4090E080E00E94053626EF38E239 +:102D50004CE151E40E944638089590917A009069C0 +:102D600090937A008E50806480937C0083B7817F3B +:102D7000826083BF20E290E080E033B7316033BFF0 +:102D8000889533B73E7F33BF30917A0036FDFCCF54 +:102D90004091780050917900840F951F215069F778 +:102DA00020917A002F7720937A0025E096958795D9 +:102DB0002A95E1F708958FE00E94AD16A091570281 +:102DC000B09158029C010E94C5370E94073628E541 +:102DD00039E743E353E40E9446380E94BF38CB01F1 +:102DE000089580916202882369F086E00E94D10FE5 +:102DF000892B41F06AE070E080E090E00E94E610EC +:102E0000109262020895FC0101900020E9F73197C9 +:102E1000AF01481B590BBC018BEC92E00C947B0F6B +:102E20008F929F92AF92BF920F931F93CF93DF9396 +:102E3000CDB7DEB7A1970FB6F894DEBF0FBECDBFFA +:102E400019A2423008F44AE08E010F5D1F4F842E14 +:102E5000912CB12CA12CA50194010E94A337E62F3F +:102E6000B901CA01EA30F4F4E05DD801EE938D01B6 +:102E7000232B242B252B79F790E080E0109719F075 +:102E8000CD010E940317A1960FB6F894DEBF0FBEC6 +:102E9000CDBFDF91CF911F910F91BF90AF909F90C9 +:102EA0008F900895E95CE1CFCF92DF92EF92FF928D +:102EB000CF93DF936C01990FEE08FF086A3071051C +:102EC000D1F44AE0F7FE18C08DE20E940713EC012E +:102ED00066277727CB016C197D098E099F094AE087 +:102EE0000E9410178C0F9D1FDF91CF91FF90EF90E4 +:102EF000DF90CF900895462FC701B601DF91CF91A3 +:102F0000FF90EF90DF90CF900C9410174F925F924C +:102F10006F927F928F929F92AF92BF92CF92DF92E9 +:102F2000EF92FF920F931F93CF936B017C01742E4E +:102F3000AC019B010E948A39882399F086E292E0D5 +:102F4000CF911F910F91FF90EF90DF90CF90BF90A6 +:102F5000AF909F908F907F906F905F904F900C9468 +:102F6000031746015701E894B7F82FEF3FEF4FE7FB +:102F70005FE7C501B4010E948A3981110DC02FEFAE +:102F80003FEF4FE75FE7C501B4010E940036181616 +:102F90001CF48AE292E0D4CF2FEF3FEF4FE75FE4DB +:102FA000C701B6010E942D3918161CF48EE292E07A +:102FB000C7CF2FEF3FEF4FE75FECC701B6010E948D +:102FC000003687FDF3CF20E030E0A901C701B6014C +:102FD0000E94003610E000E087FF08C08DE20E94EA +:102FE00007138C01F7FAF094F7F8F094C0E060E072 +:102FF00070E080E09FE37C1641F020E030E040E2AA +:1030000051E40E944638CF5FF6CFA70196010E9497 +:10301000D5372B013C010E94BF384B015C014AE0CF +:103020000E9410177C01E00EF11ECC23B1F1C50106 +:10303000B4010E9405369B01AC01C301B2010E949C +:10304000D4374B015C018EE20E940713E80EF91E93 +:10305000C15018F120E030E040E251E4C501B40174 +:103060000E9466362B013C010E94BF384B01B12CF7 +:10307000A12C4AE0C501B4010E941017E80EF91E08 +:10308000C501B4010E9405369B01AC01C301B20128 +:103090000E94D4374B015C01DBCFC701CF911F9158 +:1030A0000F91FF90EF90DF90CF90BF90AF909F90E7 +:1030B0008F907F906F905F904F9008954F925F92A6 +:1030C0006F927F928F929F92AF92BF92CF92DF9238 +:1030D000EF92FF920F93CF93DF936C01CBECD2E092 +:1030E000198A81E0888B8A8B4B01770FAA08BB086D +:1030F0002CE530E0D6010E94F23AA50194010E942D +:103100003A373D872C8784E390E09F878E870D2C8C +:10311000000CEE08FF08C701B6010E9407362B011C +:103120003C01C501B4010E9407369B01AC01C301FB +:10313000B2010E94463820E030E048EC52E40E94A0 +:10314000663642E00E94861782ED99E10E940C13D8 +:10315000C701B60127E0660F771F881F991F2A95C0 +:10316000D1F7A50194010E943A37422F01E024E0F3 +:103170006CE370E090E080E00E94320FDF91CF912D +:103180000F91FF90EF90DF90CF90BF90AF909F9006 +:103190008F907F906F905F904F900895CF92DF92C5 +:1031A000EF92FF920F931F93CF93DF937C010E94C6 +:1031B000F60E81E08093DD0200E110E0D0E0C0E097 +:1031C0008CE0C82ED12CD092D802C092D702109396 +:1031D000DA020093D90281E592E10E940C1367E0C4 +:1031E00070E0CE010E9454178CE492E10E940C130F +:1031F000F70161917191819191917F0147E00E9466 +:1032000086172196085F1F4FC430D105E1F60E9452 +:103210006C1186E00E94D10F21E0892B09F020E09B +:103220002093620286E00E94D10F892B21F48091C5 +:103230006202882319F00E94F116F4CFDF91CF913A +:103240001F910F91FF90EF90DF90CF900895CF9254 +:10325000DF92EF92FF920F931F93CF93DF93C82FCC +:1032600081E0DC2FD827D093DC02C093DB0280936F +:10327000DD020C2F29E046E666E370E081E090E095 +:103280000E94D0112091890230918A02253F81E06D +:103290003807B8F4A4E6B0E00E94C53724EF31E067 +:1032A00040E050E00E943A37BA01A9014E5F5F4FFB +:1032B0006F4F7F4F29E066E370E081E090E00E946D +:1032C000320F60915C0270915D0280915E0290917C +:1032D0005F020E94B8389B01AC01A4E6B0E00E94F6 +:1032E000593734EFC32EDD24D394E12CF12CA70100 +:1032F00096010E943A37DA01C9010296A11DB11D5B +:1033000002970C2F27E043E067E370E00E94320F42 +:1033100060915C0270915D0280915E0290915F020B +:103320000E94B8389B01AC01A4E6B0E00E94593776 +:10333000A70196010E943A37DA01C9010296A11D40 +:10334000B11D039721E045E06FE370E00E94320F6A +:1033500060915C0270915D0280915E0290915F02CB +:103360000E94B8389B01AC01A4E6B0E00E94593736 +:10337000A70196010E943A372E5F3F4F4F4F5F4F94 +:10338000790181E0E81AF10806E310E04D2FB80159 +:10339000C7010E94190D0F5F1F4F00341105B1F7CF +:1033A00060915C0270915D0280915E0290915F027B +:1033B0000E94B8389B01AC01A4E6B0E00E945937E6 +:1033C00024EF31E040E050E00E943A37DA01C901D1 +:1033D0000296A11DB11D0397ED2E04E025E048EEF5 +:1033E00051E16CE370E00E94370D0C2F29E047E1BA +:1033F00066E370E088E690E00E94D011609182025E +:103400007091830280918402909185020E94B83865 +:103410009B01AC012F5F310941095109A7E1B0E0DF +:103420000E945937CC24C394DD24DA94ED2CFD2C72 +:10343000A70196010E943A37422F29E066E370E027 +:1034400088E690E00E94320FC093DC02D093DB024A +:1034500082E090E09093D8028093D70207E310E0D7 +:103460001093DA020093D90260915C0270915D02C0 +:1034700080915E0290915F0240E00E94861789E68B +:1034800090E09093D8028093D7021093DA020093D1 +:10349000D90260918202709183028091840290919E +:1034A00085020E94B8389B01AC012F5F31094109A8 +:1034B0005109A4E6B0E00E945937A70196010E9485 +:1034C0003A3769017A014AE0C701B601F7FE0BC03D +:1034D0008DE20E94071366277727CB016C197D09BF +:1034E0008E099F094AE00E94101786EE91E10E9422 +:1034F0000C13D093DC02C093DB02DF91CF911F91BC +:103500000F91FF90EF90DF90CF9008951F93CF938E +:10351000DF93EC01162F0E942437181739F0612F22 +:10352000CE01DF91CF911F910C942C37DF91CF9179 +:103530001F9108950C9424378F929F92AF92BF925F +:10354000CF92DF92EF92FF920F931F93CF93DF936F +:103550009CE1899F80011124E80165969FE0E92E96 +:1035600091E0F92E6801EDE1CE0ED11CCE010E9452 +:103570009A1AF70181937F012196CC15DD05B1F7E9 +:1035800088E1C82E81E0D82E7801FDE2EF0EF11C13 +:103590005E0184E0A80EB11C289646018501C80191 +:1035A0000E942437F40181934F010F5F1F4FC01712 +:1035B000D107A9F7F4E0CF0ED11CE501EA14FB0412 +:1035C00039F7DF91CF911F910F91FF90EF90DF902E +:1035D000CF90BF90AF909F908F9008957F928F92E1 +:1035E0009F92AF92BF92CF92DF92EF92FF920F9392 +:1035F0001F93CF93DF936091070182E090E00E94D8 +:10360000861A6091060183E090E00E94861A60911C +:10361000050184E090E00E94861A6091040185E033 +:1036200090E00E94861A6091030186E090E00E947B +:10363000861A60910B0187E090E00E94861A6091E3 +:103640000A0188E090E00E94861A6091090189E0F1 +:1036500090E00E94861A609116018AE090E00E9434 +:10366000861A609108018BE090E00E94861A6091B2 +:103670000D018CE090E00E94861A609159028DE065 +:1036800090E00E94861A609102018EE090E00E9414 +:10369000861A60910E018FE090E00E94861A609178 +:1036A0005A0280E190E00E94861A60917F0281E1D7 +:1036B00090E00E94861A6091610282E190E00E948F +:1036C000861A6091600283E190E00E94861A609100 +:1036D0005B0284E190E00E94861A009159020F314A +:1036E000F0F58CE1089F80011124E80165969FE0C8 +:1036F000E92E91E0F92E6801EDE1CE0ED11CF70123 +:1037000061917F01CE010E94861A2196CC15DD05BC +:10371000B1F788E1E82E81E0F82E035D1F4F6E01BE +:10372000F4E0CF0ED11C289657014601F5017190A7 +:103730005F01C4010E942437781621F0672DC4016F +:103740000E942C37FFEF8F1A9F0AC815D90571F711 +:1037500084E0E80EF11CE6010C151D0501F7DF9170 +:10376000CF911F910F91FF90EF90DF90CF90BF907E +:10377000AF909F908F907F9008958F929F92AF927D +:10378000BF92CF92DF92EF92FF920F931F93CF934E +:10379000DF933FE0E32E31E0F32E10E000E0B12CA8 +:1037A00042E0A42E50E3C52ED12C86E00E94D10F1A +:1037B00021E0892B09F020E02093620221E430E02F +:1037C00041E050E060E670E08FE190E00E94BA13C3 +:1037D00080916D0290916E0295958795C82F8F31DB +:1037E00091F52FE530E041E050E060E670E08FE1D8 +:1037F00090E00E94BA13CFE50E94F60EA092DD027F +:103800001093D8020093D702D092DA02C092D90264 +:103810008EE50E9407131092D8021092D70280E220 +:1038200090E09093DA028093D9028FE0882E81E0B5 +:10383000982ED0E0DB15A9F0F40181914F010E9490 +:103840000713DF5FF7CF8036B9F620E230E041E0C2 +:1038500050E060E670E08FE190E00E94BA13C0E2B1 +:10386000CBCF1093D8020093D70280E290E09093E0 +:10387000DA028093D9028C2F0E9407130E94F1165E +:103880000E946C1186E00E94D10F892B09F0A0CF15 +:103890008091620281119CCFF701C1937F010E9448 +:1038A000EE1A0E94D9136AE070E080E090E00E9476 +:1038B000E610BB24B394BD0E005F1F4FF6E0BF12AD +:1038C00074CF10921501DF91CF911F910F91FF904E +:1038D000EF90DF90CF90BF90AF909F908F90089522 +:1038E0000E940B3DEF920F93CF93DF93CDB7DEB7DE +:1038F0002B970FB6F894DEBF0FBECDBFE82FF0E0D8 +:1039000080910E01EE0FFF1F811119C0E456FE4F8A +:1039100040815181EE24E39400E124E260E370E011 +:1039200080E390E00E94370D2B960FB6F894DEBF2F +:103930000FBECDBFDF91CF910F91EF90089580E33F +:1039400090E09093D8028093D70284E390E0909324 +:10395000DA028093D90281E08093DD02E451FE4EC9 +:1039600065917491CE0101960E94F93580E0282F6F +:1039700030E0E1E0F0E0EC0FFD1FE20FF31F90817B +:10398000992311F08F5FF3CF4AEF4203C001439FA9 +:10399000900D112480589F4F97FD0196959587951E +:1039A0009093D8028093D70284E390E09093DA0258 +:1039B0008093D902CE0101960E940317B5CF2F92B2 +:1039C0003F924F925F926F927F928F929F92AF92AF +:1039D000BF92CF92DF92EF92FF920F931F93CF93FC +:1039E000DF9300D01F92CDB7DEB7898386E00E94B7 +:1039F000D10F21E0892B09F020E0209362025AE0E8 +:103A0000252E312C0E94F60E00916D0210916E024F +:103A10001595079526E02093DD0231E03093DC0216 +:103A20001092DB026091450270914602072E000C55 +:103A3000880B990B0E9407362B013C014FE3A42E03 +:103A400042E0B42E750182E090E09B838A83EA8194 +:103A5000FB81BF01FF0F880B990B0E9407369B016A +:103A6000AC0160E070E080E291E40E9432399B0199 +:103A7000AC01C301B2010E9446380E94B838CB01A4 +:103A8000B1010E94D83AF701819391937F012A8175 +:103A90003B81215031093B832A832F3F3F4FB9F6A9 +:103AA000109346020093450289E3E82E82E0F82E47 +:103AB00094E0C92ED12C22E0822E912CB401092C45 +:103AC000000C880B990B0E9407369B01AC0160E04B +:103AD00070E080E291E40E9432392B013C01609158 +:103AE000450270914602072E000C880B990B0E942C +:103AF0000736A30192010E9446380E94B838CB01D4 +:103B0000B1010E94D83AF50120813181821B930BCB +:103B100042E3489F9001499F300D1124F7016081D5 +:103B20007181260F371F3B832A83232B09F086C020 +:103B30001182108201E022E346E270E060E0C601FB +:103B400004970E94320F0EEC1FEF2FEF3FEF3B83E5 +:103B50002A83F7018081918124E030E0281B390B12 +:103B6000C901800F911FD092D802C092D7029093C2 +:103B7000DA028093D902F501808191816AE070E0D8 +:103B80002A813B81820F931F0E9454178A819B8157 +:103B900001969B838A830E5C1F4F0297D1F692E0B9 +:103BA000E90EF11CE1E08E1A9108F2E0AF0EB11CB3 +:103BB0002CE2C20ED11C38E8C316D10409F07ECF26 +:103BC00000E022E040E870E060E090E080E00E94E9 +:103BD000320F20E140E860E370E090E080E00E9476 +:103BE000320F89810E94721C0E946C110E94F11692 +:103BF00086E00E94D10F892B09F004CF80916202E8 +:103C0000811100CF0E94D913809145029091460204 +:103C10000F900F900F90DF91CF911F910F91FF9018 +:103C2000EF90DF90CF90BF90AF909F908F907F905C +:103C30006F905F904F903F902F9008956A817B81A5 +:103C4000719561957109072E000C880B990B0E94E4 +:103C500007362DEC3CEC4CE45FE30E9466362B010A +:103C60003C012A813B81B901330F880B990B0E94DB +:103C700007369B01AC01C301B2010E94D5370E94F7 +:103C8000B838F7017183608355CF9C0144E650E05A +:103C900064E873E090E080E00E94BA1388E00E943C +:103CA000DF1CBC01665A7F4F9C014AE050E00E9435 +:103CB000BA1388E00E94DF1CBC01675F7F4F9C0144 +:103CC00041E050E00E94BA1388E00C94DF1C2F9270 +:103CD0003F924F925F926F927F928F929F92AF929C +:103CE000BF92CF92DF92EF92FF920F931F93CF93E9 +:103CF000DF93D82E282F30E0E0916302F0E0EE5BF6 +:103D0000FE4F60816150770B41E050E090E080E031 +:103D10000E94BA1386E00E94D10F21E0892B09F09E +:103D200020E0209362021092DC0281E08093DB02AB +:103D300038E3632EE0906D02F0906E02F594E79404 +:103D4000AE2C8701112798012D193109629EC001FF +:103D5000639E900D1124C80FD91F209709F1662783 +:103D600077276C1B7D0B072E000C880B990B0E948C +:103D700007362DEC3CEC4CE05FE30E9466361B01FD +:103D80002C01BE01DD0F880B990B0E9407369B01A9 +:103D9000AC01C201B1010E94D5370E94B838EB01D5 +:103DA0000E94F60E025011094E0185E0B82E93E0F4 +:103DB000792E7A0CC0906302D12C17FD20C0F60139 +:103DC000EE5BFE4F808180171106C9F0C4F0E2E47B +:103DD000F1E070E060E0CF01825491408C159D05C8 +:103DE00034F48191680F711DF6CFDE2CA3CF872D9F +:103DF0008B19680FC401885491090E942B13BA943F +:103E00000F5F1F4F88E3880E911CB110D3CFE2E4FF +:103E1000F1E090E080E09F01225431402C153D05F7 +:103E200024F42191820F911DF6CF8E0D0E94721CF9 +:103E30000E946C110E94F11686E00E94D10F892B1E +:103E4000A1F6809162028111D0CF0E94D9138A2DF0 +:103E5000DF91CF911F910F91FF90EF90DF90CF9066 +:103E6000BF90AF909F908F907F906F905F904F909A +:103E70003F902F9008959F92AF92BF92CF92DF9282 +:103E8000EF92FF920F931F93CF93DF93D09059023D +:103E9000FF24F394D11001C0F12C2D2D30E060915E +:103EA00002016150770B41E050E090E080E00E9419 +:103EB000BA1386E00E94D10F21E0892B09F020E09F +:103EC00020936202BB24B394F2E0AF2E0CE010E02A +:103ED0000E94F60EC0916D02D0916E02D595C795E5 +:103EE000EC2E8F2DFF0C990B8C0F911D8D199109C4 +:103EF000F12C97FD06C08330910514F082E090E02C +:103F0000F82EB092DC021092DB02A092DD02109239 +:103F1000D8021092D7021092DA021092D90281E4EC +:103F200092E10E940C131092DC02B092DB0210921C +:103F3000D8021092D7028F2D0F2C000C990B0196EE +:103F400064E0880F991F6A95E1F79093DA028093F5 +:103F5000D9028FE392E10E940C139C2E9F1870E10E +:103F6000C72ED12C80910201981690F41093D8029C +:103F70000093D702D092DA02C092D9028EE189155D +:103F800018F0892D0E949C1A8FE091E00E9403177F +:103F90009394E0E1CE0ED11CF0E4CF16D10411F7DA +:103FA0000E94F1160E946C1186E00E94D10F892BAD +:103FB00091F58091620281112EC00E94D913E09286 +:103FC00059022EE12E1518F08E2D0E949C1A0E9487 +:103FD000D9130FE011E0F80101900020E9F78F01FB +:103FE00000511140B8016F5F7F4F90E080E00E9468 +:103FF0004E3CEC01009789F488E191E0DF91CF918C +:104000001F910F91FF90EF90DF90CF90BF90AF90F6 +:104010009F900C94CE18DC2E5BCF18826FE071E07D +:104020000E94293D012B09F4B2C062E371E0CE0188 +:104030000E94203D892B09F08DC030E020E044E053 +:1040400050E06FEF73E090E080E00E94BA1386E0EA +:104050000E94D10F21E0892B09F020E02093620219 +:1040600081E08093DD020E94F60ED12CC12CB12C90 +:10407000A12C8501F12CE12C80916D0290916E02B2 +:1040800095958795800F911F813094400CF049C021 +:10409000F092D802E092D702D092DA02C092D9020E +:1040A00080916D0290916E02959587956AE070E01F +:1040B000800F911F0E9454178CE392E10E940C1311 +:1040C00080916D0290916E0295958795800F911F5A +:1040D0000E942437682F70E090E080E04AE00E9460 +:1040E0001017C701C6969093D8028093D702D0923A +:1040F000DA02C092D90280916D0290916E0295957C +:104100008795800F911F0E9424370E9407130F5F2D +:104110001F4F20E4E20EF11C80E8E816F10409F0DC +:10412000ABCFE2E0AE0EB11CF8E0CF0ED11C20E127 +:10413000A216B10409F09DCF0E94F1160E946C11E5 +:1041400086E00E94D10F892B09F08DCF8091620209 +:10415000811189CF6AE371E0CE010E94203D8C017C +:10416000892BA9F487E08093630280E00E94671E98 +:10417000882369F06FEFC8010E942C370F5F1F4F33 +:10418000011584E01807B1F7F0E0E0E0099588E157 +:1041900091E00E94CE18CE01DF91CF911F910F9137 +:1041A000FF90EF90DF90CF90BF90AF909F900C94D6 +:1041B000C53B4F925F926F927F928F929F92AF9288 +:1041C000BF92CF92DF92EF92FF92CF936FEF70E0AA +:1041D00089E00E9464108BEA94E00197F1F78EE089 +:1041E0000E94AD167C018AE00E94D10F90913802A6 +:1041F000981729F091E090937A0280933802809189 +:1042000001019FEF980F90930101811106C00E9458 +:10421000DB169093810280938002609182027091FC +:10422000830280918402909185020E94B83889E0CF +:104230000E9464108090C7029090C802A090C902AA +:10424000B090CA02B70190E080E00E940536A50157 +:1042500094010E94D4372DEC3CEC4CE45DE30E94C9 +:104260006636A50194010E94D5376093C70270930A +:10427000C8028093C9029093CA020E94B90D6B01D3 +:104280007C01C0927602D0927702E0927802F0929E +:1042900079026091890270918A0290E080E00E9428 +:1042A00005362B013C0180905C0290905D02A0904D +:1042B0005E02B0905F02A50194010E940036811158 +:1042C0004BC0A7019601C301B2010E94D4372B0154 +:1042D0003C0120E030E0A9010E942D39181694F528 +:1042E00020E030E040EA50E4C301B2010E942D39E1 +:1042F000181694F16091890270918A0290E080E032 +:104300000E940536A50194010E94D4372B013C017F +:1043100020E030E0A9010E942D39181634F520E084 +:1043200030E040E85FE3C301B2010E940036181696 +:1043300034F1C501B4010E94BF3870938A026093C2 +:1043400089021DC020E030E040EA50ECC301B20118 +:104350000E94003687FFCECFC701B6010E94BF384A +:1043600070938A0260938902C5CF20E030E040E874 +:104370005FEBC301B2010E942D3987FFDACF609154 +:1043800074027091750290E080E00E940536A701EA +:1043900096010E94D4376B017C0120E030E0A90136 +:1043A0000E942D3918160CF063C0C701B6010E9497 +:1043B000BF386A30710508F05FC080911701811124 +:1043C00005C080910C0181110E94D91381E0809376 +:1043D000170110920C018091890290918A02853F09 +:1043E00021E0920710F010920001209100012111AC +:1043F00049C0843F914008F045C06FEF70E089E00C +:104400000E9464100E94D913C1E0C09300010E9471 +:104410003B1F0E94EE1AC0937A028EE00E94AD16F6 +:10442000BC0190E080E00E9405366093C702709363 +:10443000C8028093C9029093CA0210926C02209124 +:1044400074023091750245E050E060E971E084E665 +:1044500090E0CF91FF90EF90DF90CF90BF90AF9022 +:104460009F908F907F906F905F904F900C94BA13B5 +:10447000C701B60190589BCF1092170181E080933D +:104480000C01A9CFCF91FF90EF90DF90CF90BF901C +:10449000AF909F908F907F906F905F904F90089516 +:1044A0001F920F920FB60F9211242F933F938F9369 +:1044B0009F93AF93BF9380914C0290914D02A09136 +:1044C0004E02B0914F0230914B0223E0230F2D3763 +:1044D00058F50196A11DB11D20934B0280934C020B +:1044E00090934D02A0934E02B0934F0280915002E0 +:1044F00090915102A0915202B09153020196A11DD8 +:10450000B11D8093500290935102A0935202B09338 +:104510005302BF91AF919F918F913F912F910F9037 +:104520000FBE0F901F90189526E8230F0296A11D2D +:10453000B11DD2CF1F920F920FB60F9211248F93FD +:10454000EF93FF93E0E6F0E0808180648083FF9149 +:10455000EF918F910F900FBE0F901F9018951F92A3 +:104560000F920FB60F9211242F933F934F935F93A7 +:104570006F937F938F939F93EF93FF9383B181709A +:1045800029B190915602981709F49DC030E0220F8E +:10459000232F221F330B922F8093560240915502F6 +:1045A000241709F490C020935502209132023091D3 +:1045B0003302981719F031952195310940916D0218 +:1045C00050916E026091360270913702240F351FB0 +:1045D000261737070CF48BC020913202309133023A +:1045E000981719F031952195310940916D0250913C +:1045F0006E026091340270913502240F351F6217EC +:1046000073070CF46FC04091320250913302981737 +:1046100019F051954195510920916D0230916E022A +:10462000240F351F30936E0220936D0241E09813E2 +:1046300040E020915402421709F440C02091320218 +:1046400030913302981719F0319521953109609115 +:104650006D0270916E02E0913602F0913702260FE2 +:10466000371F2E173F070CF44CC0209132023091B7 +:104670003302981719F031952195310960916D0237 +:1046800070916E02E0913402F0913502260F371FCF +:10469000E217F3078CF12091320230913302981720 +:1046A00019F031952195310980916D0290916E023A +:1046B000820F931F90936E0280936D024093540279 +:1046C00081E080937A02FF91EF919F918F917F918A +:1046D0006F915F914F913F912F910F900FBE0F906F +:1046E0001F90189520913402309135029BCF209174 +:1046F00036023091370296CF809134029091350284 +:10470000D9CF8091360290913702D4CF1895CF93AC +:10471000DF93CDB7DEB7C554D1090FB6F894DEBF2D +:104720000FBECDBF789484B5826084BD84B58160AE +:1047300084BD85B5826085BD85B5816085BD80916C +:104740006E00816080936E001092810080918100E4 +:1047500082608093810080918100816080938100DC +:10476000809180008160809380008091B10084609E +:104770008093B1008091B00081608093B0008091FF +:104780007A00846080937A0080917A0082608093BE +:104790007A0080917A00816080937A0080917A001B +:1047A000806880937A001092C100A89584B7877FB3 +:1047B00084BF8091600088618093600087E180936E +:1047C0006000809160008064809360008091600050 +:1047D0008860809360001092B90088E48093B800EC +:1047E0000E94621180E00E9458110EEA17E1BDECB0 +:1047F000EB2EB7E1FB2EF80184910E9458110F5F58 +:104800001F4FE016F106B9F70E94501111E0109306 +:10481000B8000E946C1182E48093D30260E08EE0C5 +:104820000E94281060E08FE00E94281061E085E07F +:104830000E94281061E089E00E94281062E087E071 +:104840000E94281062E088E00E94281062E086E062 +:104850000E94281062E08AE00E9428106FEF70E04A +:1048600089E00E94641060E085E00E94FA0F809168 +:104870007A00876080937A0080917A0088608093C4 +:104880007A00789410936B00109368001BBB90E043 +:1048900080E00E949A1A182F81E090E00E949A1AF4 +:1048A000912F8C30944109F075C182E090E00E9414 +:1048B0009A1A182F83E090E00E949A1A912F9093F1 +:1048C00007018093060184E090E00E949A1A182F55 +:1048D00085E090E00E949A1A912F909305018093B1 +:1048E000040186E090E00E949A1A8093030187E019 +:1048F00090E00E949A1A80930B0188E090E00E9459 +:104900009A1A80930A0189E090E00E949A1A809393 +:1049100009018AE090E00E949A1A809316018BE0C8 +:1049200090E00E949A1A91E0811101C090E090936A +:1049300008018CE090E00E949A1A91E0811101C078 +:1049400090E090930D018DE090E00E949A1A809380 +:1049500059028EE090E00E949A1A809302018FE043 +:1049600090E00E949A1A80930E0180E190E00E94EC +:104970009A1A91E0811101C090E090935A0281E16E +:1049800090E00E949A1A80937F0282E190E00E9458 +:104990009A1A182F83E190E00E949A1A912F90930F +:1049A00061028093600284E190E00E949A1A91E093 +:1049B000811101C090E090935B02809159028F3188 +:1049C00010F40E949C1A10915A0280EC111101C03F +:1049D00088EC0E94891180EA111101C081EA0E94CD +:1049E000891181E80E94891180E20E948911109248 +:1049F0007B0280E280937C0280E480937D0280E6EB +:104A000080937E028091600290916102892B19F15E +:104A10000E94F60E68E088E290E00E942B1388E086 +:104A20000E94721C0E946C1168EE73E080E090E0BE +:104A30000E94E6100E94D9130E94D9130E94D91334 +:104A400090E080E00E94451E20916002309161025A +:104A500082179307E9F60E943316909358028093C9 +:104A600057020E94DB16909381028093800200918E +:104A700006011091070110937502009374028EE0F5 +:104A80000E94AD16BC0190E080E00E940536609364 +:104A9000C7027093C8028093C9029093CA020E9411 +:104AA0006F160E94B90D609376027093770280931F +:104AB00078029093790220E030E040EA51E40E94CD +:104AC000D5376B017C01B80190E080E00E9405368B +:104AD0009B01AC01C701B6010E94003687FF05C0EB +:104AE00070E060E089E00E9464101092BD021092B4 +:104AF000BE021092BF021092C002412C512C3FE71F +:104B0000632E33E4732E4092C1025092C20260922F +:104B1000C3027092C402A090A902B090AA02809130 +:104B2000C502D501CD90DD90ED90FC90882311F465 +:104B30000C949E34A3019201C701B6010E942D3945 +:104B400018160CF03FC1F5014082518262827382D7 +:104B50008090B1029090B202A090B302B090B402E3 +:104B6000C090C102D090C202E090C302F090C40293 +:104B7000A7019601C501B4010E942D3918160CF049 +:104B800031C1C092B102D092B202E092B302F0926F +:104B9000B40238C1B12CA12C312C212C10E000E042 +:104BA00066246394F8E08F2E912CA8E14A2E512CB4 +:104BB0000E94A1352FEF30E040E050E00E943A37EC +:104BC0006B017C0169A7C8010E942C37C8010E94B3 +:104BD0002437782E29A52813E4C03FEF231A330A7F +:104BE0000E942411882309F48DC00E94F60E52E021 +:104BF0005093DD026092DC021092DB021092D80228 +:104C00001092D7021092DA021092D9028BEF97E13C +:104C10000E940C136092DD029092D8028092D7021B +:104C200088E290E09093DA028093D9026AE070E023 +:104C3000C8010E94541789EF97E10E940C134AE0C3 +:104C400060E074E080E090E00E9410171092DC02B7 +:104C50006092DB029092D8028092D7025092DA02E0 +:104C60004092D90283EF97E10E940C136AE070E052 +:104C7000C1010E945417A8E4B0E0B093D802A093F9 +:104C8000D7025092DA024092D9028DEE97E10E944B +:104C90000C136AE070E0C5010E9454179092D8028C +:104CA0008092D702E0E2F0E0F093DA02E093D902DA +:104CB00087EE97E10E940C13C701B601772788277A +:104CC00099274AE00E94101728E430E03093D80278 +:104CD0002093D70240E250E05093DA024093D90289 +:104CE00081EE97E10E940C13672D70E090E080E068 +:104CF0004AE00E94101760E074E0C8010E945E184C +:104D00000E946C110F5F1F4F011554E0150709F049 +:104D10004FCF02E011E046E1E42EF12C50E1C52E28 +:104D2000D12C6FE1862E912C7CE2672E712CE8EE5F +:104D30002E2EE3E03E2E412C512CA114B104A9F1FA +:104D40000E94F60E0093DD021092DC021093DB024B +:104D5000F092D802E092D702D092DA02C092D90241 +:104D600089ED97E10E940C131093DD029092D80216 +:104D70008092D7027092DA026092D9021093DC021C +:104D80001092DB020E941811A20191010E94A33728 +:104D900020FD04C08DEC97E10E940C130E946C1161 +:104DA000CCCF4FEFA41AB40A1BCF64E190E080E0AF +:104DB0000E94861A6CE081E090E00E94861A0E94B0 +:104DC000EE1AFBCD20E030E0A901C701B6010E9438 +:104DD000003687FFBDCED5011D921D921D921C92FB +:104DE0001397B6CEC090BD02D090BE02E090BF0235 +:104DF000F090C002A7019601C501B4010E940036DF +:104E000087FDBFCE81E08093C50283B1817080931E +:104E1000560289B190E0880F892F881F990B8093E3 +:104E20005502209156029091550281E0291380E0AD +:104E300080935402980145E050E060E971E084E617 +:104E400090E00E94BA130E94181160937002709350 +:104E5000710280937202909373020E94D9130E9490 +:104E6000D9130E94F60E82E08093DD02BCE1EB2EA6 +:104E7000F12CF092D802E092D70208E110E01093F2 +:104E8000DA020093D9028EE098E10E940C130E948E +:104E90006C116CEB72E080E090E00E94E6100E94E2 +:104EA000F60E81E08093DC021092DB02F092D802D1 +:104EB000E092D7021093DA020093D90287E098E1DA +:104EC0000E940C130E946C116CE271E080E090E093 +:104ED0000E94E61080916D0290916E02FC01F595A2 +:104EE000E795FEAFEDAFF0937502E093740286E0B4 +:104EF0000E94D10F24968FAF2497811195C0809185 +:104F00006C02882309F490C00E94D9130E941811E2 +:104F10006B017C01C0926802D0926902E0926A0241 +:104F2000F0926B0286E00E94D10F892B59F40E9407 +:104F300018116C197D098E099F09643F7140810524 +:104F4000910580F30E9418116C197D098E099F0943 +:104F5000643F71408105910510F40C948A3186EA12 +:104F60000E9489116FEF70E089E00E9464100E9436 +:104F7000D91319A61092630289A50E94671E89A7FA +:104F80008B3008F03EC0E82FF0E0E753F84D0C946A +:104F9000EC3AE6274D2E962ED72EE52E152F232FF1 +:104FA000403151315C316A3120E030E0A901C70164 +:104FB000B6010E94003687FF25CF1092B1021092F1 +:104FC000B2021092B3021092B4021CCFAE014F5E37 +:104FD0005F4F5CA34BA3CE0183969EA38DA311E0EC +:104FE0001093630289A50E94671E89A7823009F485 +:104FF000CCC508F051C1882309F495C1813009F46A +:1050000095C10E94EE1A81E080937A022DAD3EADEB +:10501000309375022093740245E050E060E971E03E +:1050200084E690E00E94BA1324963FAD2497309313 +:105030006C0280918602882309F1109109011123E5 +:10504000E9F00E941811C0906402D0906502E090CF +:105050006602F09067026C197D098E099F0928EE9F +:1050600033E040E050E00E94A337211738F010925F +:1050700086020E94D91381E080930C0180917A020C +:105080008823F1F180918702882351F120E030E0FC +:1050900040EA51E460917602709177028091780243 +:1050A000909179020E94D5376B017C016091740266 +:1050B0007091750290E080E00E9405369B01AC0182 +:1050C000C701B6010E94003687FF05C070E060E0AE +:1050D00089E00E9464100E94D91381E080930C0142 +:1050E00010927A0210928702109288020E94181180 +:1050F00060937002709371028093720290937302B6 +:105100000E94181100917002109171022091720298 +:1051100030917302601B710B820B930B20E63AEE09 +:1051200040E050E00E94A337122F20936F0280913D +:10513000870281110BC080910B01882339F0281759 +:1051400028F081E0809387020E94D9138091880221 +:1051500081110BC080910A01882339F0181728F0BB +:1051600081E0809388020E94D9130E94D92080E0B8 +:105170000E94F7130E942411882311F40C941B340D +:10518000A0908902B0908A0245EFA41641E0B406CF +:1051900010F00C944F3280918802882311F40C9403 +:1051A0002D326FEF70E089E00E9464100E94F60ECD +:1051B0000BE712E0BFE72B2EB2E03B2E82E0882EF9 +:1051C000912CA12CB12C93E0492E512C612C712CE7 +:1051D0000E94A135A50194010E943A37AB01BC01A0 +:1051E0004150510961097109D8018C91682F640FF0 +:1051F000613810F00C94A1316C9319A60E94A1356E +:10520000F9A5CF2ED12CF12CE12CA30192010E9403 +:105210003A376D5F7F4F8F4F9F4FA701960126173B +:1052200037074807590714F00C94A631D801EC90C1 +:10523000F12C0E94A13524E130E040E050E00E94D2 +:105240003A376A507109810991096E0D7F1D6034EA +:10525000710530F421E040E890E080E00E94961172 +:10526000F801E080F12C0E94A13524E130E040E01B +:1052700050E00E943A37DC01CB010A97A109B1093D +:105280008E0D9F1D21E040E470E060E00E94090F58 +:10529000F9A5FF5FF9A7B2CF99A5933009F478C4B7 +:1052A000943009F0AECE809102018E3108F0E0C456 +:1052B00091E0980F90930201809359020E94BD1BC8 +:1052C0008EE098E4A4E2B1E4809318019093190170 +:1052D000A0931A01B0931B0122EA3CEB4DED5FE372 +:1052E00020931C0130931D0140931E0150931F0118 +:1052F0008DE091EEA9E5BBEB809320019093210115 +:10530000A0932201B09323012CE031E248E956E357 +:1053100020932401309325014093260150932701C7 +:105320000E94EE1A5CCE0E943B1F59CEDE01119600 +:105330002D01712C612C30E020E06114710421F00A +:10534000F20132972081318141E050E06FEF73E04C +:1053500090E080E00E94BA13B1E0B0930C0186E0C7 +:105360000E94D10F21E0892B09F020E020936202F6 +:105370001301EFEF2E1A3E0A0E94F60EF1E0F093B1 +:10538000DD020E94D92080916D0290916E02959568 +:105390008795909375028093740281E00E94F713C1 +:1053A00029E130E03093D8022093D7021092DA023C +:1053B0001092D90231E03093DC021092DB0285E2D8 +:1053C00098E10E940C136091C7027091C80280910D +:1053D000C9029091CA0242E00E9486171092DC0234 +:1053E00041E04093DB02E0E18E2E912C10E000E0E2 +:1053F0006801CC0CDD1C580164E0E62EF12C6A1427 +:105400007B04A4F1F092D802E092D7029092DA02E3 +:105410008092D902F601E850FE4F6081718190E0E0 +:1054200080E04AE00E94101788EF0E94071382E292 +:1054300098E10E940C136A147B0409F0C4C18091A6 +:105440006D0290916E026AE070E0959587950E94DA +:1054500054175FEFA51AB50A80E4E80EF11C92E03C +:10546000C90ED11CA4E8EA16F10449F60E5F1F4FDD +:10547000B8E08B0E911C0A30110509F0B9CF69E034 +:1054800070E0C1010E945E180E94F1160E946C112A +:1054900086E00E94D10F892B09F06ECF80916202C5 +:1054A00081116ACF80916D0290916E0295958795DA +:1054B000F201819391932F010E94D9136AE070E069 +:1054C00080E090E00E94E6103101F9E02F163104EF +:1054D00009F031CF6FEF70E089E00E9464108BEA31 +:1054E00094E00197F1F7FE01319621E081919191CD +:1054F000059640815181841795070CF020E04BA15F +:105500005CA1E417F50791F7222309F418C387E09B +:105510008093630264E070E089E090E00E940D3BBC +:1055200098AF8FAB64E070E087E090E00E940D3BA5 +:105530009AAF89AF64E070E089E090E00E940D3B93 +:105540009CAF8BAF64E070E084E090E00E940D3B84 +:1055500098AB8FA764E070E080E190E00E940D3B83 +:105560009EA78DA728EFE22E21E0F22ECFA8D8AC7F +:1055700054E2C50ED11C0BAD1CAD2FA838ACF10107 +:1055800080E090E0A0E8BFE381939193A193B19371 +:105590001F01D7016D917D917D01072E000C880BB5 +:1055A000990B0E940736F80161937193819391934F +:1055B0008F01C214D30419F729AD3AAD38A72FA330 +:1055C00069013CE1C30ED11C09AD1AADD8011D9291 +:1055D0001D921D921D928D01FE013196FAABE9AB31 +:1055E000EFA8F8AC812C912C5401D7014D905D901F +:1055F0006D907D907D01A3019201C501B4010E94CF +:10560000D5374B015C01E9A9FAA961917191FAAB17 +:10561000E9AB9701245031093EAB2DAB072E000CAE +:10562000880B990B0E940736A30192010E946636EF +:10563000ADA9BEA96D937D938D939C931397E214AE +:10564000F30499F6F801349780829182A282B382A2 +:105650000C151D0509F0BACFEFA5F8A9FEABEDAB0F +:105660006F01F0E1CF0ED11C0FA518A92BAC3CACFB +:1056700024E2220E311CD8011D921D921D921D9212 +:105680008D01FE013196FAABE9ABEBACFCAC812CA1 +:10569000912C5401D7014D905D906D907D907D01CE +:1056A000A3019201C501B4010E94D5374B015C01F1 +:1056B000E9A9FAA961917191FAABE9AB970124507C +:1056C00031093CAB2BAB072E000C880B990B0E94C9 +:1056D0000736A30192010E946636ABA9BCA96D935F +:1056E0007D938D939C9313972E143F0499F6F801A4 +:1056F000349780829182A282B382C016D10609F0CB +:10570000BACF4DA55EA5405C5F4F2DA53EA590E0AC +:1057100080E0F901E80FF91FAFA1B8A5A80FB91FE4 +:10572000CD90DD90ED90FC90C082D182E282F38238 +:1057300004968031910569F7EFA1F8A53496F8A792 +:10574000EFA3205F3F4F4217530709F7ADA5BEA552 +:10575000B8A7AFA3B12CA12C1AAA19AAEFA1F8A53A +:10576000C080D180E280F380E894F7F81501FFEF64 +:105770002F1A3F0A2FA138A53CAB2BAB8501410165 +:1057800033E08316910461F1ABA9BCA954964D9006 +:105790005D906D907C905797E89477F8A7019601FB +:1057A000C301B2010E942D391816C4F02601370139 +:1057B000BFEF8B1A9B0AEBA9FCA97496FCABEBAB71 +:1057C00073016201DDCF6AE070E0E1E0F0E0EC0F30 +:1057D000FD1FEC0DFD1D8081918139CE8401E8CF44 +:1057E000A016B10609F44AC0ADA4BEA429A93AA9DD +:1057F000A20EB31E000F111F000F111FF801EE0FB4 +:10580000FF1FEE0FFF1F4DA55EA5E40FF51F90E0F3 +:1058100080E0D5014D915D916D917D915D01C080DC +:10582000D180E280F3809D0124503109D901CD92CD +:10583000DD92ED92FC921397419351936193719392 +:1058400001968430910529F7EDA9FEA98081918107 +:10585000A281B3812FA538A9020F131FF80140813F +:10586000518162817381EDA9FEA9408351836283D6 +:105870007383F80180839183A283B3832DA93EA90A +:105880002C5F3F4F26963FAF2EAF269710EFA12EED +:10589000BB24BA9449A95AA9A41AB50A0FA118A5FC +:1058A0003CAB2BAB6101780154E1E50EF11C4101E9 +:1058B000F501EE0DFF1D89A99AA9E80FF91FD8017E +:1058C00050962D913D914D915C91539760817181DE +:1058D000828193810E946636EFA1F8A520813181F3 +:1058E000428153810E9446389B01AC01D7016D91E2 +:1058F0007D918D919C910E94D437F70161937193B2 +:10590000819391937F01FFEF8F1A9F0A24E0821603 +:10591000910471F6ABA9BCA94D905D906D907D90FE +:10592000BCABABAB7D01B4E0EB1AF108EDA9FEA96D +:105930002081318142815381D80150966D917D91B2 +:105940008D919C9153970E946636EFA1F8A5208116 +:105950003181428153810E9446389B01AC01C301D1 +:10596000B2010E94D437D7016D937D938D939C93A0 +:105970001397BFEFCB1ADB0A005F1F4FE0E1AE1AAF +:10598000B108F4E0CF16D10409F08DCF2FA138A5CE +:105990002C5E3F4F38A72FA349A95AA9405F5F4FFC +:1059A0005AAB49AB510126968EAD9FAD26979EAB63 +:1059B0008DAB93E02916310409F0D0CE8FA498A8BE +:1059C00020E1820E911C8E01015E1F4FEDA4FEA40A +:1059D0003CE3E30EF11CF401B291A2919291829109 +:1059E0004F01F80180839183A283B3835101D12CAD +:1059F000C12CD8014D905D906D907C90BFEFAB1A9B +:105A0000BB0AE4E0CE0ED11CF4E0AF16B104E9F01D +:105A1000F801EC0DFD1D2081318142815381F70198 +:105A2000EC0DFD1D60817181828193810E9466363B +:105A30009B01AC01C301B2010E94D437D8016D9320 +:105A40007D938D939C931397D4CFF701208131815F +:105A500042815381C301B2010E944638D8016D933F +:105A60007D938D939C931397B1E02B1A31080450CA +:105A70001109E4E1EE1AF108FFEF2F163F0609F0D5 +:105A8000AACF8FA998AD0E94C53B89AD9AAD0E945F +:105A9000C53B8BAD9CAD0E94C53B8FA598A90E94CC +:105AA000C53B8DA59EA50E94C53BCE0101960E94D7 +:105AB000C53BCE0143960E94CE1880E00E94671E2F +:105AC0008823B9F0FE017396A8E1B1E041915191AC +:105AD000619171914D935D936D937D932DA13EA145 +:105AE0002E173F0799F7CE0143960E94C53B0E94AF +:105AF000EE1A0E94F60E82E08093DD0281E0809330 +:105B0000DC021092DB028CE190E09093D80280934B +:105B1000D70228E130E03093DA022093D90285E100 +:105B200098E10E940C130E946C1168E873E180E018 +:105B300090E00E94E610F0E0E0E0099550CA0E9473 +:105B4000F60E82E08093DD0281E08093DC02109209 +:105B5000DB0280E290E09093D8028093D70248E184 +:105B600050E05093DA024093D9028CE198E10E9410 +:105B70000C130E946C1168E873E180E090E00E94D1 +:105B8000E610F0E0E0E00995B4CF0E94BD1B27CA03 +:105B900087E08093630210910201113011F50E9499 +:105BA000F60E82E08093DD021093DC021092DB029D +:105BB00020E130E03093D8022093D70248E150E052 +:105BC0005093DA024093D9028CE298E10E940C13C0 +:105BD0000E946C1168EE73E080E090E00E94E61095 +:105BE000FEC980E00E94671E882309F4F8C98091ED +:105BF000590290910201082F10E0A92FA150BB0B70 +:105C00000A171B0749F481508093590280910201C1 +:105C1000815080930201E3C98F31C0F7DD24DA940B +:105C2000D90ED81AB3E0000F111FBA95E1F7B4E10D +:105C30008B9F000D111D11240F5C1F4FDA94EFEFA5 +:105C4000DE1621F37801FCE1EF1AF108E016F10607 +:105C500018F0045E1F4FF2CFC7014C960E94243704 +:105C6000682FC7010E942C372FEFE21AF20AEECFFD +:105C70000E94F60E1093DC021092DB0285E090E0A9 +:105C80009093D8028093D70248E150E05093DA0213 +:105C90004093D90285E398E199CF82E08093630233 +:105CA00010E0812F0E94671E182F8130D1F028F05C +:105CB000823059F10E94EE1A5DC92091060130919F +:105CC000070145E050E060E971E084E690E00E9461 +:105CD000BA1382E10E94DF1C9093070180930601B2 +:105CE000E0CF209104013091050145E050E068ECDF +:105CF00070E084E190E00E94BA1383E10E94DF1C0F +:105D00009093050180930401CCCF2091030130E0F2 +:105D100045E050E064E670E08AE090E00E94BA134B +:105D200084E10E94DF1C80930301BBCF83E080935A +:105D3000630210E0812F0E94671E182F813031F11D +:105D4000A0F0823009F0B6CF2091090130E04AE09E +:105D500050E064EB70E090E080E00E94BA1388E1CC +:105D60000E94DF1C80930901E5CF20910B0130E0F8 +:105D700041E050E06EE170E090E080E00E94BA13F4 +:105D800086E10E94DF1C80930B01D4CF20910A0191 +:105D900030E045E050E06CE370E090E080E00E948D +:105DA000BA1387E10E94DF1C80930A01C3CF84E00D +:105DB00080936302809108010E94671E91E0811127 +:105DC00001C090E090930801D5C810E0A9E0EA2E48 +:105DD000E0926302812F0E94671E182F882321F012 +:105DE0008130E9F000E00AC055E0509363028091F1 +:105DF00016010E94671E8093160101E0F0905A027E +:105E000080ECF11001C088EC0E94891180EAF11049 +:105E100001C081EA0E9489110111DACF4BCF809134 +:105E20005A02812780935A02E8CF86E0809363026A +:105E300080910D010E94671E91E0811101C090E0E8 +:105E400090930D0197C81092DC0281E08093DB02F1 +:105E500086E00E94D10F21E0892B09F020E02093F9 +:105E6000620220EF30E042E150E064EA71E08CE34E +:105E700090E00E94BA131FA281E08093DD0200919E +:105E80006D0210916E0215950795B801012E000C58 +:105E9000880B990B0E94073660935C0270935D0239 +:105EA00080935E0290935F0210938A0200938902AE +:105EB0000E94F60E00E020E440E870E060E090E030 +:105EC00080E00E94320F23966CAD7DAD8EAD9FAD0C +:105ED00023970E94823920E030E040E451E40E94A0 +:105EE00066369B01AC0160E070E080EC91E40E94BA +:105EF000D4370E94B8384B017EA76DA723966CADAE +:105F00007DAD8EAD9FAD23970E94413820E030E0FB +:105F100040E451E40E94663620E030E040EC51E479 +:105F20000E94D5370E94B838CB017B01B40165507F +:105F3000710921E04BE00E94090F712C612CCC24E7 +:105F4000C394D12C05E010E0E6EFAE2EBB24BA944A +:105F5000FCEF4F2E55245A94AFEF6A1A7A0AB2E03A +:105F6000CB0ED11C4C0C5D1C302E330C33943FA651 +:105F700021E0432D2DA43EA4201A310AB101C7010E +:105F8000860D971D0E94090F8DA49EA48618970860 +:105F900021E04C2DB401C701800F911F0E94090F11 +:105FA00021E04FA5B101C701861997090E94090F89 +:105FB00021E04C2DB401C701801B910B0E94090FF9 +:105FC000601671060CF404C141E06CE270E088E1F7 +:105FD00090E00E94190D41E064E070E088E190E0FB +:105FE0000E94190D41E068E170E08CE290E00E94AF +:105FF000190D41E068E170E084E090E00E94190D25 +:10600000E1E0F0E0FEA7EDA7312C212C34E1C32E16 +:10601000D12C48ED642E77247A945DEE452E5524DC +:106020005A943FEF231A330A4DA55EA54E5F5F4F8A +:106030005EA74DA7440E551E410158E1850E911CE7 +:1060400041E0760188E1E80EF11CB701C4010E942D +:10605000190D28E1A22EB12CA218B30841E0B70116 +:10606000C5010E94190D41E008E110E00C191D095D +:10607000B801C4010E94190D41E0B801C5010E9498 +:10608000190D41E0B401C7010E94190D41E0B401AE +:10609000C8010E94190D41E0B501C7010E94190D08 +:1060A00041E0B501C8010E94190D2C143D040CF407 +:1060B00099C0A7E3B0E0B093D802A093D702E1E083 +:1060C000F0E0F093DA02E093D902F2E0F093DD021F +:1060D00084E498E10E940C1380915B02882309F408 +:1060E0008CC082E498E10E940C1320E030E040E78D +:1060F00052E460915C0270915D0280915E02909129 +:106100005F020E94D43720E030E044EB53E40E9469 +:1061100046382BED3FE049EC50E40E9466362BED0B +:106120003FE049EC5FE30E94D43723966CAF7DAF2C +:106130008EAF9FAF23978091890290918A022AE3C4 +:1061400030E03093D8022093D70245E150E05093DD +:10615000DA024093D90254E05093DD02853FA1E07A +:106160009A0708F470C08AE699E10E940C1300E0D7 +:1061700027E249E563E170E088E390E00E94D011F6 +:1061800081E00E94271901E024E04FA170E060E067 +:1061900090E080E00E94320F0E946C110E94F11684 +:1061A00086E00E94D10F892B09F052C080916202D3 +:1061B00081114EC0BFA1B85FBFA30E946C11EFA1B7 +:1061C000E7FF5ACE0E94D9130E94D9130C94BA2724 +:1061D00057FCC2CE0150110992E0A90EB11C4A0C25 +:1061E0005B1CBACE57FC1DCFF1E0CF1AD10822E0DC +:1061F000620E711C460C571C14CF80E498E10E947B +:106200000C1360915C0270915D0280915E0290912E +:106210005F02905820E030E040E752E40E94D4371B +:1062200020E030E044EB53E40E9446382BED3FE0A1 +:1062300049EC50E40E94663622E93AE046E05FE32A +:106240000E94D53772CF6AE070E00E9454178FCF5A +:106250008FA182508E3308F00ECE80915B02F1E068 +:106260008F2780935B0220EF30E042E150E064EA48 +:1062700071E08CE390E00E94BA130E94D913FBCD29 +:1062800020917F0230E041E050E06AEF70E090E062 +:1062900080E00E94BA1387E00E94DF1C80937F0297 +:1062A00093CF80916002909161020E94451E90936D +:1062B00061028093600288CF88E0809363028091BE +:1062C0000E010E94671E823009F481E080930E0166 +:1062D0000C94BA270E94F60EEE24E39400E320E328 +:1062E0004AE458E170E060E088E290E00E94370DF7 +:1062F0000E946C1164E670E080E090E00E94E6107D +:1063000086E00E94D10F892BD9F78091620281111A +:10631000F7CF5ACF8091860291E089278093860239 +:10632000882351F00E9418116093640270936502F3 +:10633000809366029093670281E080937A020C94C6 +:1063400014286058F80160830C94FD280F5F1F4FDC +:106350002016310611F00C94E8280E9418110E94B2 +:10636000053620E030E04AE755E40E9446380E94B6 +:1063700082396B017C0120E030E040E853E40E9468 +:10638000663620E030E040E853E40E94D5372B0128 +:106390003C0110E000E0B801012E000C880B990BC5 +:1063A0000E940736A30192010E94003687FF25C094 +:1063B0000E94A1354B015C010E94A13569A77AA713 +:1063C0008BA79CA7C501B40120E430E040E050E079 +:1063D0000E943A374B0169A57AA58BA59CA520E8B8 +:1063E00030E040E050E00E943A37CB0141E0B40198 +:1063F0000E94190D0F5F1F4FCECF80910D01882392 +:1064000049F10E94A13520E130E040E050E00E94D7 +:106410003A3768507109810991090E9407364B018A +:106420005C0120E030E040E852E4C701B6010E9480 +:10643000663620E030E040E852E40E94D5379B0108 +:10644000AC01C501B4010E94D5370E94B83885E07F +:106450000E9464100E946C11EEC18091870212E0CC +:1064600081111EC08091860213E0811119C08091B4 +:10647000170114E0811114C020E030E044E353E43C +:1064800060918202709183028091840290918502D2 +:106490000E94003615E087FD03C016E001C010E041 +:1064A00080911601882309F4D0C187EA0E948911DE +:1064B0000E94F60E01E020E440E870E060E090E029 +:1064C00080E00E94320F81E08093DD028093DC0245 +:1064D0001092DB0282E090E09093D8028093D70282 +:1064E00084E090E09093DA028093D9028FE091E00B +:1064F0000E9403178EE590E09093D8028093D70214 +:1065000085E090E09093DA028093D902C12ED12CDD +:1065100080910E01CC0CDD1C81112FC1F601E85ECB +:10652000FD4F40815181E12C0EE02CE161E070E0F3 +:106530008FE590E00E94370DF601E65FFD4F408148 +:106540005181E12C0EE02EE061E070E08AE490E001 +:106550000E94370D8091890290918A0223E030E0F9 +:106560003093D8022093D70222E130E03093DA0250 +:106570002093D90225E02093DD02853F21E0920798 +:1065800008F41AC18AE699E10E940C1300E027E2A0 +:1065900049E560E170E081E090E00E94D01180E088 +:1065A0000E9427190E946F1620E030E040EA52E472 +:1065B0000E94003687FF05C18BE590E09093D802DA +:1065C0008093D70284E190E09093DA028093D9021D +:1065D0000E946F1641E00E94861788EF0E94071301 +:1065E0008AEA99E10E940C13E12C0EE02EE04EE8BD +:1065F00059E161E070E08AE290E00E94370D60911D +:1066000080027091810290E080E00E94053620E0D7 +:1066100030E048EC52E40E9446386B017C01609106 +:106620007F0270E090E080E00E9407369B01AC01A1 +:10663000C701B6010E942D3918160CF0D4C08BE5A5 +:1066400090E09093D8028093D7028CE190E09093F1 +:10665000DA028093D9020E94DB16BC0190E080E050 +:106660000E94053620E030E04AE754E40E944638B4 +:1066700042E00E9486178CE899E10E940C13E12CFD +:106680000EE02EE040E759E161E070E08AE390E03F +:106690000E94370D0BE510E01093D8020093D7024B +:1066A00084E290E09093DA028093D9020E9433163C +:1066B000BC0190E080E00E94053620E030E04AE72F +:1066C00054E40E94463843E00E9486178EE699E122 +:1066D0000E940C131093D8020093D7028CE290E032 +:1066E0009093DA028093D9026091C7027091C80238 +:1066F0008091C9029091CA0240E00E9486170E94D0 +:106700006C110E946F1620E030E040EA52E40E94D3 +:106710002D3918160CF479C06091800270918102B5 +:1067200090E080E00E94053620E030E048EC52E442 +:106730000E9446386B017C0160917F0270E090E01E +:1067400080E00E9407369B01AC01C701B6010E94A0 +:10675000003687FF70C00E94181142E0660F771F55 +:10676000881F991F4A95D1F728EE33E040E050E0AA +:106770000E94A33720FD5AC05EC082EC99E113301D +:10678000C1F058F48EEC99E1113099F088EC99E160 +:10679000123079F08CEA99E10CC087EB99E1153061 +:1067A00041F08CEB99E1153020F082EB99E1163045 +:1067B00089F70E940C13C0CE6AE070E00E94541763 +:1067C000E5CE0E941811F2E0660F771F881F991F0F +:1067D000FA95D1F728EE33E040E050E00E94A3376D +:1067E00020FDEACE0CCF0E941811E2E0660F771F61 +:1067F000881F991FEA95D1F728EE33E040E050E07A +:106800000E94A33720FD1BCF45CF0E94181152E0F4 +:10681000660F771F881F991F5A95D1F728EE33E02E +:1068200040E050E00E94A33720FF76CF0E94D913AA +:1068300086EA0E94891180E090E0892B11F40C9483 +:106840006A270E9400000C946A2786E08093DD028C +:106850001092DC0281E08093DB020E94F60E0E941F +:106860006F1620E030E040EA52E40E942D391816FD +:1068700094F40E94181132E0660F771F881F991F49 +:106880003A95D1F728EE33E040E050E00E94A3377C +:1068900020FD0E94D913609180027091810290E0E6 +:1068A00080E00E94053620E030E048EC52E40E948F +:1068B00046386B017C0160917F0270E090E080E0DF +:1068C0000E9407369B01AC01C701B6010E94003649 +:1068D00087FF12C00E94181122E0660F771F881FE1 +:1068E000991F2A95D1F728EE33E040E050E00E944E +:1068F000A33720FD0E94D9138CE090E09093D8023A +:106900008093D70282E090E09093DA028093D902DC +:1069100035EFA31631E0B30650F06AE070E087EE81 +:1069200093E00E94541781E00E94271993CDB5018E +:1069300090E080E04AE00E941017F5CFC092B102CB +:10694000D092B202E092B302F092B402E091A702B8 +:10695000F091A80280819181A281B3818093B502D8 +:106960009093B602A093B702B093B80220E030E053 +:106970004FE753E4C701B6010E942D39181614F0F1 +:106980000C94D4274092B1025092B2026092B302AA +:106990007092B4020C9402270F931F93CF93DF934E +:1069A000EBECF2E0138212821682178280E180877C +:1069B00015821482128680EF91E091838083158680 +:1069C00014861786168681E0808B118A828B138A43 +:1069D000CBE8D2E022E832E03F8F2E8F27E432E08E +:1069E0003D8F2C8F2CE532E039A328A31AAE1AAACA +:1069F0001BAA1CAA1DAA40E050E06FE773E44EAB4F +:106A00005FAB68AF79AF44E650E060E070E04EA75E +:106A10005FA768AB79AB21E030E0398F288F3B8FDF +:106A20002A8F8BAF80E090E0A0E3B1E48883998364 +:106A3000AA83BB8380E090E0A0E0BFE38C839D83CA +:106A4000AE83BF8380E090E0A0E8BFE388879987AA +:106A5000AA87BB8780E090E0A0E3B1EC8C879D879C +:106A6000AE87BF878DEC9CECACE4BDEB888B998B3B +:106A7000AA8BBB8B80E090E0A0E2B1EC8C8B9D8B6D +:106A8000AE8BBF8B0E9418110EA51FA528A939A98E +:106A9000601B710B820B930B6AA37BA38CA39DA33A +:106AA000DF91CF911F910F9108958F929F92AF9296 +:106AB000BF92CF92DF92EF92FF92CF93DF93EC01E0 +:106AC000688179818A819B816115710581059105B4 +:106AD00021F464E279ED8BE597E02DE133EF41E0BD +:106AE00050E00E943A3749015A019B01AC01A7EAE4 +:106AF000B1E40E9459376B017C01ACEEB4EFA50103 +:106B000094010E946737C60ED71EE81EF91EF7FED5 +:106B100006C081E0C81AD108E10880E8F80AC882F6 +:106B2000D982EA82FB82C701B6019F77DF91CF91BC +:106B3000FF90EF90DF90CF90BF90AF909F908F909D +:106B400008958F929F92AF92BF92CF92DF92EF9271 +:106B5000FF92609128017091290180912A01909102 +:106B60002B01611571058105910521F464E279ED30 +:106B70008BE597E02DE133EF41E050E00E943A379A +:106B800049015A019B01AC01A7EAB1E40E945937BF +:106B90006B017C01ACEEB4EFA50194010E94673754 +:106BA000C60ED71EE81EF91EF7FE06C081E0C81A01 +:106BB000D108E10880E8F80AC0922801D0922901A2 +:106BC000E0922A01F0922B01C701B6019F77FF9056 +:106BD000EF90DF90CF90BF90AF909F908F900895EF +:106BE000609328017093290180932A0190932B01CF +:106BF0000895FB01DC0105900D920020E1F7089556 +:106C00000E94423608F481E00895E89409C097FB99 +:106C10003EF490958095709561957F4F8F4F9F4F73 +:106C20009923A9F0F92F96E9BB279395F6958795B7 +:106C300077956795B795F111F8CFFAF4BB0F11F47A +:106C400060FF1BC06F5F7F4F8F4F9F4F16C0882321 +:106C500011F096E911C0772321F09EE8872F762F57 +:106C600005C0662371F096E8862F70E060E02AF098 +:106C70009A95660F771F881FDAF7880F9695879584 +:106C800097F90895990F0008550FAA0BE0E8FEEF59 +:106C900016161706E807F907C0F012161306E407E0 +:106CA000F50798F0621B730B840B950B39F40A26D9 +:106CB00061F0232B242B252B21F408950A2609F4B7 +:106CC000A140A6958FEF811D811D08950E94793600 +:106CD0000C94EA360E94DC3638F00E94E33620F04D +:106CE000952311F00C94D3360C94D93611240C94BE +:106CF0001E370E94FB3670F3959FC1F3950F50E04D +:106D0000551F629FF001729FBB27F00DB11D639F5D +:106D1000AA27F00DB11DAA1F649F6627B00DA11D03 +:106D2000661F829F2227B00DA11D621F739FB00DA9 +:106D3000A11D621F839FA00D611D221F749F332719 +:106D4000A00D611D231F849F600D211D822F762FB2 +:106D50006A2F11249F5750409AF0F1F088234AF08F +:106D6000EE0FFF1FBB1F661F771F881F91505040FB +:106D7000A9F79E3F510580F00C94D3360C941E3732 +:106D80005F3FE4F3983ED4F3869577956795B79582 +:106D9000F795E7959F5FC1F7FE2B880F911D96959C +:106DA000879597F9089597F99F6780E870E060E00C +:106DB00008959FEF80EC089500240A941616170694 +:106DC00018060906089500240A94121613061406DC +:106DD00005060895092E0394000C11F4882352F03F +:106DE000BB0F40F4BF2B11F460FF04C06F5F7F4FF7 +:106DF0008F4F9F4F089557FD9058440F551F59F0DE +:106E00005F3F71F04795880F97FB991F61F09F3F97 +:106E100079F087950895121613061406551FF2CFC0 +:106E20004695F1DF08C0161617061806991FF1CF10 +:106E300086957105610508940895E894BB27662737 +:106E40007727CB0197F90895F999FECF92BD81BDBF +:106E5000F89A992780B50895262FF999FECF1FBA81 +:106E600092BD81BD20BD0FB6F894FA9AF99A0FBE73 +:106E700001960895052E97FB1EF400940E94513749 +:106E800057FD07D00E94A33707FC03D04EF40C94A3 +:106E9000513750954095309521953F4F4F4F5F4F5B +:106EA000089590958095709561957F4F8F4F9F4F76 +:106EB00008950E94C537A59F900DB49F900DA49F83 +:106EC000800D911D11240895B7FF0C9459370E942D +:106ED0005937821B930B08952F923F924F925F92E6 +:106EE0006F927F928F929F92AF92BF92CF92DF92DA +:106EF000EF92FF920F931F93CF93DF93CDB7DEB73F +:106F0000CA1BDB0B0FB6F894DEBF0FBECDBF0994D2 +:106F10002A88398848885F846E847D848C849B8429 +:106F2000AA84B984C884DF80EE80FD800C811B8137 +:106F3000AA81B981CE0FD11D0FB6F894DEBF0FBE66 +:106F4000CDBFED010895A1E21A2EAA1BBB1BFD01C6 +:106F50000DC0AA1FBB1FEE1FFF1FA217B307E40738 +:106F6000F50720F0A21BB30BE40BF50B661F771F90 +:106F7000881F991F1A9469F7609570958095909570 +:106F80009B01AC01BD01CF010895A29FB001B39F49 +:106F9000C001A39F700D811D1124911DB29F700D22 +:106FA000811D1124911D08955058BB27AA270E94C6 +:106FB000EC370C94EA360E94DC3638F00E94E33657 +:106FC00020F039F49F3F19F426F40C94D9360EF4CE +:106FD000E095E7FB0C94D336E92F0E94FB3658F37B +:106FE000BA17620773078407950720F079F4A6F5AE +:106FF0000C941D370EF4E0950B2EBA2FA02D0B012B +:10700000B90190010C01CA01A0011124FF27591BED +:1070100099F0593F50F4503E68F11A16F040A22FF3 +:10702000232F342F4427585FF3CF46953795279564 +:10703000A795F0405395C9F77EF41F16BA0B620B63 +:10704000730B840BBAF09150A1F0FF0FBB1F661FAA +:10705000771F881FC2F70EC0BA0F621F731F841FED +:1070600048F4879577956795B795F7959E3F08F013 +:10707000B0CF9395880F08F09927EE0F97958795D5 +:1070800008950E94F038E3950C9419390E945A38FB +:107090000C94EA360E94E33658F00E94DC3640F049 +:1070A00029F45F3F29F00C94D33651110C941E370C +:1070B0000C94D9360E94FB3668F39923B1F355231B +:1070C00091F3951B550BBB27AA27621773078407FB +:1070D00038F09F5F5F4F220F331F441FAA1FA9F391 +:1070E00035D00E2E3AF0E0E832D091505040E6957F +:1070F000001CCAF72BD0FE2F29D0660F771F881FE0 +:10710000BB1F261737074807AB07B0E809F0BB0BD2 +:10711000802DBF01FF2793585F4F3AF09E3F5105E6 +:1071200078F00C94D3360C941E375F3FE4F3983E0E +:10713000D4F3869577956795B795F7959F5FC9F7CF +:10714000880F911D9695879597F90895E1E0660F50 +:10715000771F881FBB1F621773078407BA0720F0C9 +:10716000621B730B840BBA0BEE1F88F7E095089532 +:107170000E94BF386894B1110C941E3708950E9484 +:10718000033788F09F5798F0B92F9927B751B0F07F +:10719000E1F0660F771F881F991F1AF0BA95C9F79B +:1071A00014C0B13091F00E941D37B1E008950C94E5 +:1071B0001D37672F782F8827B85F39F0B93FCCF398 +:1071C000869577956795B395D9F73EF49095809518 +:1071D000709561957F4F8F4F9F4F08950C94D936CE +:1071E0000E940337D8F3E894E0E0BB279F57F0F004 +:1071F0002AED3FE049EC06C0EE0FBB0F661F771F7C +:10720000881F28F0B23A62077307840728F0B25A41 +:10721000620B730B840BE3959A9572F7803830F408 +:107220009A95BB0F661F771F881FD2F790480C9462 +:10723000CB39EF93E0FF07C0A2EA2AED3FE049EC2B +:107240005FEB0E94EC370E94EA360F90039401FC3A +:107250009058E8E6F0E00C94FE390E94423608F4BB +:107260008FEF0895FA01EE0FFF1F309621053105CB +:10727000A1F16115710561F48038BFE39B0749F105 +:1072800068949038810561F08038BFEF9B0741F02A +:1072900099234AF5FF3FE1053105210519F1E894ED +:1072A0000894E795D901AA2329F4AB2FBE2FF85FE4 +:1072B000D0F310C0FF5F70F4A695E0F7F73950F0F7 +:1072C00019F0FF3A38F49F779F930DD00F9007FC89 +:1072D0009058089546F00C94D93660E070E080E84C +:1072E0009FE308954FE79F775F934F933F932F93CB +:1072F0000E945C3A2F913F914F915F910E946636B8 +:107300000C9497399F930E94F0380F9007FCEE5F22 +:107310000C9419390E944236880B990B089529F470 +:1073200016F00C94D3360C941D370C94D9360E9469 +:107330000337A8F39638A0F707F80F92E8942BE3E9 +:107340003AEA48EB5FE70E947C360F920F920F9269 +:107350004DB75EB70F920E94A43AE6E8F0E00E94B3 +:10736000D7394F915F91EF91FF91E595EE1FFF1F88 +:1073700049F0FE57E0684427EE0F441FFA95E1F705 +:107380004195550B0E941E3A0F9007FE0C94123A3D +:1073900008959F3F31F0915020F487957795679538 +:1073A000B795880F911D9695879597F90895DF9366 +:1073B000CF931F930F93FF92EF92DF927B018C018B +:1073C000689406C0DA2EEF010E947936FE01E89437 +:1073D000A5912591359145915591A6F3EF010E9414 +:1073E000EC37FE019701A801DA9469F7DF90EF907E +:1073F000FF900F911F91CF91DF9108959F938F93ED +:107400007F936F93FF93EF939B01AC010E946636CD +:10741000EF91FF910E94D7392F913F914F915F914A +:107420000C9466369B01AC0160E070E080E89FE35D +:107430000C9446380C94D3360C94C9390E94033707 +:10744000D8F39923C9F3940F511DA3F391505040E1 +:1074500094F059F0882332F0660F771F881F9150FF +:107460005040C1F79E3F51052CF7880F911D96950E +:10747000879597F908955F3FACF0983E9CF0BB2745 +:10748000869577956795B79508F4B1609395C1F7A0 +:10749000BB0F58F711F460FFE8CF6F5F7F4F8F4F3E +:1074A0009F4FE3CF0C941E3716F00C94C9390C94FF +:1074B000D93668940C94D3360E940337A8F39923E5 +:1074C000C1F3AEF3DF93CF931F930F93FF92C92FB6 +:1074D000DD2788232AF02197660F771F881FDAF7A8 +:1074E00020E030E040E85FEB9FE3883920F0803E09 +:1074F00038F021968F770E94D537EEEAF0E004C08D +:107500000E94D537EBEDF0E00E94D7398B01BE0128 +:10751000EC01FB2E6F5771097595771F880B990B3E +:107520000E94073628E132E741E35FE30E947936A3 +:10753000AF2D9801AE01FF900F911F91CF91DF9178 +:107540000E94EC370C94EA36FA01DC01AA0FBB1F4B +:107550009B01AC01BF5728F42227332744275078DA +:1075600020C0B75190F4AB2F00244695379527954E +:10757000011CA395D2F3002071F0220F331F441F8A +:10758000B395DAF30ED00C94D43761307105A0E8CE +:107590008A07B94630F49B01AC0166277727882714 +:1075A0009078309621F0208331834283538308956D +:1075B00097FB072E16F4009407D077FD09D00E94A0 +:1075C000F93A07FC05D03EF4909581959F4F0895B8 +:1075D000709561957F4F0895EE0FFF1F0590F49110 +:1075E000E02D09940E94C537B7FF0895821B930BC5 +:1075F0000895AA1BBB1B51E107C0AA1FBB1FA617FA +:10760000B70710F0A61BB70B881F991F5A95A9F74B +:1076100080959095BC01CD0108950F931F93CF9352 +:10762000DF93869F8001879F100D969F100D112478 +:10763000C8010E94293BEC01009729F0A80170E0E5 +:1076400060E00E94193DCE01DF91CF911F910F9113 +:1076500008950F931F93CF93DF938230910510F419 +:1076600082E090E0E091E106F091E20630E020E077 +:10767000B0E0A0E0309799F42115310509F44AC033 +:10768000281B390B24303105D8F58A819B8161157F +:10769000710589F1FB0193838283FE0111C0408152 +:1076A00051810281138148175907E0F048175907A3 +:1076B00099F4109761F012960C93129713961C93FD +:1076C0003296CF01DF91CF911F910F9108950093D2 +:1076D000E1061093E206F4CF2115310551F042176F +:1076E000530738F0A901DB019A01BD01DF01F80160 +:1076F000C1CFEF01F9CF9093E2068093E106CDCFA1 +:10770000FE01E20FF31F81939193225031093983D7 +:107710002883D7CF2091DF063091E006232B41F458 +:1077200020912E0130912F013093E0062093DF0647 +:1077300020912C0130912D012115310541F42DB7F7 +:107740003EB74091300150913101241B350BE0913F +:10775000DF06F091E006E217F307A0F42E1B3F0BC3 +:107760002817390778F0AC014E5F5F4F24173507B3 +:1077700048F04E0F5F1F5093E0064093DF06819361 +:1077800091939FCFF0E0E0E09CCFCF93DF93009701 +:10779000E9F0FC01329713821282A091E106B091C8 +:1077A000E206ED0130E020E01097A1F42081318164 +:1077B000820F931F2091DF063091E00628173907CA +:1077C00009F061C0F093E006E093DF06DF91CF910E +:1077D0000895EA01CE17DF07E8F54A815B819E0133 +:1077E00041155105B1F7E901FB83EA8349915991AC +:1077F000C40FD51FEC17FD0761F4808191810296BB +:10780000840F951FE90199838883828193819B83EB +:107810008A83F0E0E0E012968D919C911397009797 +:10782000B9F52D913C911197CD010296820F931FCE +:107830002091DF063091E0062817390739F6309796 +:1078400051F51092E2061092E106B093E006A09383 +:10785000DF06BCCFD383C28340815181840F951F43 +:10786000C817D90761F44E5F5F4F88819981480F2F +:10787000591F518340838A819B8193838283211581 +:10788000310509F0B0CFF093E206E093E1069ECF18 +:10789000FD01DC01C0CF13821282D7CFB0E0A0E09F +:1078A000E4E5FCE30C946E378C01009751F4CB01B6 +:1078B0000E94293B8C01C801CDB7DEB7E0E10C94F2 +:1078C0008A37FC01E60FF71F9C0122503109E217AD +:1078D000F30708F49DC0D901CD91DC911197C6172B +:1078E000D70798F0C530D10530F3CE01049786173D +:1078F000970708F3C61BD70B2297C193D1936D93BB +:107900007C93CF010E94C53BD6CF5B01AC1ABD0A68 +:107910004C018C0E9D1EA091E106B091E206512C07 +:10792000412CF12CE12C109731F58091DF069091DC +:10793000E0068815990509F05CC04616570608F060 +:1079400058C080912C0190912D01009741F48DB782 +:107950009EB74091300150913101841B950BE8177F +:10796000F90708F055C0F093E006E093DF06F9014F +:1079700071836083A0CF8D919C91119712966C902A +:10798000129713967C901397A815B90559F56C01B9 +:1079900042E0C40ED11CCA14DB0420F1AC014A1928 +:1079A0005B09DA011296159780F062827382518327 +:1079B0004083D9016D937C93E114F10471F0D701F8 +:1079C0001396FC93EE93129776CF22968C0F9D1F01 +:1079D000F90191838083F301EFCFF093E206E09306 +:1079E000E10669CF4816590608F42C017D01D30140 +:1079F0009ACFCB010E94293B7C01009749F0AE0150 +:107A0000B8010E94103DC8010E94C53B870153CFB9 +:107A100010E000E050CF81E090E0F8940C94303D0D +:107A2000FB01DC0102C001900D9241505040D8F79B +:107A30000895DC0101C06D9341505040E0F7089576 +:107A4000FB01DC018D91019080190110D9F3990B94 +:107A50000895FB01DC0101900D920020E1F70895EB +:107A6000F894FFCF01FF013C9600400101280F056B +:107A7000010101535A746970000001010E4824414C +:107A8000A2BCDD3F0DE159BB0C219836010000007E +:107A90000000E3068000454550524F4D000052451E +:107AA0005345542E00000C06040402020202030394 +:107AB0001804FC03E003C403A8038C0370035403FD +:107AC00038031C030003E402C802AC02180490024D +:107AD0007402580218043C02200258023C020402BC +:107AE00020025802E801CC01B001940178018C0316 +:107AF0005C01E402400124015C01A8030801580272 +:107B0000840E340EE40D940D440DF40CA40C540CAE +:107B1000040CB40B640B140B840EC40A740A240AFC +:107B2000D409140B84093409E4089408340944087E +:107B3000E4089408F407A40754070407B40664068D +:107B40001406C40574052405D4048404340494087C +:107B50000000000005127B0F281327133200640079 +:107B60009600C800FA002C015E019001C20142108B +:107B7000261006107019EA0FCE0FB20FAE11761153 +:107B80003E110611CE1096105E106E616E00696E89 +:067B900066006F7666003E +:107E0000112484B714BE81FFF0D085E080938100F7 +:107E100082E08093C00088E18093C10086E0809377 +:107E2000C20080E18093C4008EE0C9D0259A86E02C +:107E300020E33CEF91E0309385002093840096BBD3 +:107E4000B09BFECF1D9AA8958150A9F7CC24DD24C4 +:107E500088248394B5E0AB2EA1E19A2EF3E0BF2EE7 +:107E6000A2D0813461F49FD0082FAFD0023811F036 +:107E7000013811F484E001C083E08DD089C08234E0 +:107E800011F484E103C0853419F485E0A6D080C0E4 +:107E9000853579F488D0E82EFF2485D0082F10E0AE +:107EA000102F00270E291F29000F111F8ED06801E7 +:107EB0006FC0863521F484E090D080E0DECF843638 +:107EC00009F040C070D06FD0082F6DD080E0C81688 +:107ED00080E7D80618F4F601B7BEE895C0E0D1E017 +:107EE00062D089930C17E1F7F0E0CF16F0E7DF06D8 +:107EF00018F0F601B7BEE89568D007B600FCFDCFD4 +:107F0000A601A0E0B1E02C9130E011968C91119780 +:107F100090E0982F8827822B932B1296FA010C0160 +:107F200087BEE89511244E5F5F4FF1E0A038BF0790 +:107F300051F7F601A7BEE89507B600FCFDCF97BE46 +:107F4000E89526C08437B1F42ED02DD0F82E2BD052 +:107F50003CD0F601EF2C8F010F5F1F4F84911BD097 +:107F6000EA94F801C1F70894C11CD11CFA94CF0C13 +:107F7000D11C0EC0853739F428D08EE10CD085E9AC +:107F80000AD08FE07ACF813511F488E018D01DD067 +:107F900080E101D065CF982F8091C00085FFFCCF94 +:107FA0009093C60008958091C00087FFFCCF809118 +:107FB000C00084FD01C0A8958091C6000895E0E648 +:107FC000F0E098E1908380830895EDDF803219F02E +:107FD00088E0F5DFFFCF84E1DECF1F93182FE3DFCA +:107FE0001150E9F7F2DF1F91089580E0E8DFEE27F6 +:047FF000FF270994CA +:027FFE00040479 +:00000001FF diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/A-BitMap.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/A-BitMap.ino new file mode 100644 index 0000000..6b763e9 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/A-BitMap.ino @@ -0,0 +1,85 @@ + +//关于界面-项目页面二维码 ->为了加入欠压报警只能阉割掉关于页面的二维码 +//const unsigned char QRCode[] PROGMEM = { 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x1f, 0xfe, 0x3f, 0xc1, 0x8c, 0x0c, 0x7f, 0xf8, 0x1f, 0xfe, 0x3f, 0xc1, 0x8c, 0x0c, 0x7f, 0xf8, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x3e, 0x0f, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3e, 0x0f, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x1f, 0xfe, 0x3e, 0x30, 0x70, 0x0c, 0x7f, 0xf8, 0x1f, 0xfe, 0x3e, 0x30, 0x70, 0x0c, 0x7f, 0xf8, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x01, 0x83, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x01, 0x83, 0x8f, 0xff, 0xff, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0xf8, 0x00, 0x3e, 0x3e, 0x03, 0xf0, 0x7f, 0x00, 0xf8, 0x00, 0x3e, 0x3e, 0x03, 0xf0, 0x7f, 0x00, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0x18, 0xc0, 0x31, 0xfe, 0x0c, 0x0c, 0x1c, 0xe0, 0x18, 0xc0, 0x31, 0xfe, 0x0c, 0x0c, 0x1c, 0xe0, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0x1f, 0x00, 0x31, 0xcf, 0xf3, 0x8c, 0x03, 0x00, 0x1f, 0x00, 0x31, 0xcf, 0xf3, 0x8c, 0x03, 0x00, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x3e, 0x7c, 0x0f, 0xe0, 0x00, 0xff, 0xff, 0xf0, 0x3e, 0x7c, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x1f, 0xfe, 0x30, 0x01, 0x83, 0x8f, 0xe0, 0xff, 0x1f, 0xfe, 0x30, 0x01, 0x83, 0x8f, 0xe0, 0xff, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x3f, 0xff, 0x83, 0x83, 0xe3, 0x1f, 0x18, 0x06, 0x3f, 0xff, 0x83, 0x83, 0xe3, 0x1f, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x1f, 0xfe, 0x31, 0xfe, 0x00, 0x0c, 0x60, 0xe7, 0x1f, 0xfe, 0x31, 0xfe, 0x00, 0x0c, 0x60, 0xe7, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0 }; +const unsigned char QRCode[] PROGMEM = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0x86, 0x70, 0x80, 0x03, 0x80, 0x03, 0x86, 0x70, 0x80, 0x03, 0x9f, 0xf3, 0xe1, 0x30, 0x9f, 0xf3, 0x9f, 0xf3, 0xe1, 0x30, 0x9f, 0xf3, 0x98, 0x33, 0x01, 0xcc, 0x98, 0x33, 0x98, 0x33, 0x01, 0xcc, 0x98, 0x33, 0x98, 0x33, 0x87, 0xc0, 0x98, 0x33, 0x98, 0x33, 0xe1, 0xc0, 0x98, 0x33, 0x98, 0x33, 0xe1, 0xc0, 0x98, 0x33, 0x9f, 0xf3, 0x98, 0xc0, 0x9f, 0xf3, 0x9f, 0xf3, 0x98, 0xc0, 0x9f, 0xf3, 0x80, 0x03, 0x66, 0xcc, 0x80, 0x03, 0x80, 0x03, 0x66, 0xcc, 0x80, 0x03, 0xff, 0xff, 0x01, 0x0c, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x61, 0x30, 0x1f, 0x3f, 0x87, 0x3c, 0xe6, 0xfc, 0x87, 0x33, 0x87, 0x3c, 0xe6, 0xfc, 0x87, 0xf3, 0xf8, 0x03, 0x9e, 0x0f, 0x1f, 0x03, 0xf8, 0x03, 0x9e, 0x0f, 0x1f, 0x03, 0xe1, 0x3c, 0xfe, 0x0c, 0x07, 0xcf, 0xe1, 0x3c, 0xfe, 0x0c, 0x07, 0xcf, 0x99, 0x03, 0x3e, 0x30, 0x86, 0xc3, 0xe6, 0xcf, 0x38, 0x0f, 0x9e, 0xf3, 0xe6, 0xcf, 0x38, 0x0f, 0x9e, 0xf3, 0x9e, 0x03, 0x27, 0xcc, 0x81, 0x03, 0x9e, 0x03, 0x27, 0xcc, 0x81, 0x03, 0xe0, 0xff, 0xe1, 0x0c, 0xe6, 0xcf, 0xe0, 0xff, 0xe1, 0x0c, 0xe6, 0xcf, 0x98, 0x03, 0x06, 0x00, 0x00, 0xff, 0x98, 0x03, 0x06, 0x00, 0x00, 0xff, 0xff, 0xff, 0x1e, 0xf0, 0xf8, 0x03, 0x80, 0x03, 0x66, 0x30, 0x99, 0xc3, 0x80, 0x03, 0x66, 0x30, 0x99, 0xc3, 0x9f, 0xf3, 0x01, 0x0c, 0xf8, 0xff, 0x9f, 0xf3, 0x01, 0x0c, 0xf8, 0xff, 0x98, 0x33, 0x39, 0x3c, 0x01, 0xcf, 0x98, 0x33, 0x39, 0x3c, 0x01, 0xcf, 0x98, 0x33, 0xff, 0x0c, 0x79, 0x3f, 0x98, 0x33, 0x3e, 0xcc, 0xe0, 0xf3, 0x98, 0x33, 0x3e, 0xcc, 0xe0, 0xf3, 0x9f, 0xf3, 0x3e, 0x00, 0x98, 0xcf, 0x9f, 0xf3, 0x3e, 0x00, 0x98, 0xcf, 0x80, 0x03, 0x3e, 0x30, 0xe7, 0xc3, 0x80, 0x03, 0x3e, 0x30, 0xe7, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; +//ICO +//width:16,height:16 +const unsigned char Tag[] PROGMEM = { 0x00, 0x00, 0x3b, 0xec, 0x7b, 0xee, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0x66, 0x62, 0x26, 0x60, 0x06, 0x60, 0x06, 0x7f, 0xfe, 0x3f, 0xfc, 0x00, 0x00 }; +const unsigned char Chip[] PROGMEM = { 0x14, 0xa0, 0x3f, 0xf0, 0x7f, 0xf8, 0xe0, 0x1c, 0x6e, 0x18, 0xec, 0x1c, 0x68, 0x18, 0x60, 0x18, 0xe0, 0x1c, 0x60, 0x58, 0xe0, 0x1c, 0x7f, 0xf8, 0x3f, 0xf0, 0x14, 0xa0 }; +//const unsigned char HeatPipe[] PROGMEM = { 0x00, 0x00, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x01, 0x80, 0x00, 0x00 }; +const unsigned char Lightning[] PROGMEM = { 0x0f, 0xe0, 0x1f, 0xc0, 0x1f, 0xc0, 0x3f, 0x80, 0x3f, 0xf8, 0x7f, 0xf0, 0x7f, 0xe0, 0x07, 0xc0, 0x07, 0x80, 0x0f, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x18, 0x00, 0x10, 0x00 }; +//const unsigned char Thermometer[] PROGMEM = { 0x01, 0x80, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0 }; +const unsigned char Pointer[] PROGMEM = { 0x20, 0x20, 0x70, 0xf8 }; +//状态提示 +//width:14,height:14 图标库 + +const unsigned char c1[] PROGMEM = { 0x03, 0x00, 0x07, 0x80, 0x0f, 0xc0, 0x0c, 0xc0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xf0, 0x3c, 0xf0, 0x7f, 0xf8, 0x7f, 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0xff, 0xfc, 0x7f, 0xf8 }; +const unsigned char c2[] PROGMEM = { 0x7f, 0xf8, 0xff, 0xfc, 0xc0, 0x0c, 0xc3, 0x0c, 0xcb, 0x4c, 0xdb, 0x6c, 0xdb, 0x6c, 0xd8, 0x6c, 0xdc, 0xec, 0xcf, 0xcc, 0xc7, 0x8c, 0xc0, 0x0c, 0xff, 0xfc, 0x7f, 0xf8 }; +const unsigned char c3[] PROGMEM = { 0x00, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x18, 0xf8, 0x38, 0xf0, 0x30, 0x30, 0x70, 0x60, 0x70, 0x78, 0x78, 0xf8, 0x78, 0x00, 0x3c, 0x02, 0x3f, 0x0c, 0x1f, 0xf8, 0x0f, 0xf0, 0x03, 0xc0, 0x00, 0x00 }; +const unsigned char c5[] PROGMEM = { 0x7f, 0xf0, 0xff, 0xe0, 0xc0, 0x08, 0xc0, 0x1c, 0xc0, 0x38, 0xc8, 0x70, 0xdc, 0xe4, 0xcf, 0xcc, 0xc7, 0x8c, 0xc3, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xff, 0xfc, 0x7f, 0xf8 }; +const unsigned char c6[] PROGMEM = { 0x1e, 0x10, 0x33, 0x38, 0x2d, 0x7c, 0x25, 0x38, 0x2d, 0x38, 0x25, 0x38, 0x2d, 0x38, 0x6d, 0x80, 0xde, 0xc0, 0xbf, 0x40, 0xbf, 0x40, 0xde, 0xc0, 0x61, 0x80, 0x3f, 0x00 }; +const unsigned char c7[] PROGMEM = { 0x1f, 0xe0, 0x3f, 0xf0, 0x70, 0x38, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0xff, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xf8, 0x7c, 0xf8, 0x7c, 0xfc, 0xfc, 0x7f, 0xf8 }; +const unsigned char c_NO[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x37, 0xb0, 0x23, 0x10, 0x30, 0x30, 0x38, 0x70, 0x38, 0x70, 0x30, 0x30, 0x23, 0x10, 0x37, 0xb0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char *C_table[] = {c1, c2, c3, Lightning, c5, c6, c7}; + +//设置(语言是一种低像素的表达方式,容易造成隔阂; 交互界面设计尽可能形象化) +// width: 14, height: 14 +const unsigned char QRC[] PROGMEM = { 0x05, 0x80, 0x74, 0xb8, 0x57, 0xa8, 0x76, 0xb8, 0x05, 0x80, 0xf9, 0x7c, 0x46, 0x94, 0xaa, 0xa8, 0xf9, 0x7c, 0x06, 0x88, 0x74, 0xa8, 0x57, 0x8c, 0x75, 0x74, 0x06, 0x98 }; +const unsigned char Set0[] PROGMEM = { 0x88, 0x24, 0x08, 0x20, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x39, 0x30, 0x3b, 0xb0, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set1[] PROGMEM = { 0xf8, 0x7c, 0xf3, 0x3c, 0xf4, 0xbc, 0xf6, 0xbc, 0xf4, 0xbc, 0xf6, 0xbc, 0xf4, 0xbc, 0xe4, 0x9c, 0xc8, 0x4c, 0xd0, 0x2c, 0xd0, 0x2c, 0xc8, 0x4c, 0xe7, 0x9c, 0xf0, 0x3c }; +const unsigned char Set2[] PROGMEM = { 0x8f, 0xc4, 0x10, 0x20, 0x20, 0x10, 0x4c, 0xc8, 0x9f, 0xe4, 0x3d, 0xf0, 0x3d, 0xf0, 0x1d, 0xe0, 0x3e, 0xf0, 0x3f, 0x70, 0x9f, 0xe4, 0x8c, 0xc4, 0x00, 0x00, 0x30, 0x30 }; +const unsigned char Set3[] PROGMEM = { 0xc3, 0xfc, 0x18, 0x00, 0x18, 0x00, 0xc3, 0xfc, 0xff, 0xfc, 0xff, 0x0c, 0x00, 0x60, 0x00, 0x60, 0xff, 0x0c, 0xff, 0xfc, 0xf0, 0xfc, 0x06, 0x00, 0x06, 0x00, 0xf0, 0xfc }; +const unsigned char Set4[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set4F[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x38, 0x30, 0x33, 0x10, 0x3f, 0x90, 0x38, 0x10, 0x33, 0x90, 0x27, 0x90, 0x26, 0x10, 0x30, 0x90, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set4FF[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x24, 0x30, 0x21, 0x90, 0x27, 0x90, 0x27, 0x30, 0x20, 0x70, 0x27, 0xf0, 0x23, 0x30, 0x30, 0x70, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set5[] PROGMEM = { 0xfc, 0xfc, 0xf8, 0x7c, 0xe0, 0x1c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0x80, 0x04, 0x80, 0x04, 0xff, 0xfc, 0xf8, 0x7c, 0xfc, 0xfc }; +const unsigned char Set5_1[] PROGMEM = { 0xfc, 0xf4, 0xf8, 0x60, 0xe0, 0x44, 0xc0, 0x8c, 0xc1, 0x1c, 0xc2, 0x2c, 0xc4, 0x4c, 0xc8, 0x8c, 0xd1, 0x0c, 0xa2, 0x04, 0xc4, 0x04, 0x8f, 0xfc, 0x18, 0x7c, 0xbc, 0xfc }; +const unsigned char Set6[] PROGMEM = { 0xf8,0x7c,0xc0,0x0c,0xc0,0x0c,0xcf,0xcc,0xcf,0xcc,0xcf,0xcc,0xcf,0xcc,0xcf,0xcc,0xcf,0xcc,0xc8,0x4c,0xc8,0x4c,0xcf,0xcc,0xc0,0x0c,0xc0,0x0c }; +const unsigned char Set_LANG[] PROGMEM = { 0xf0, 0x3c, 0xce, 0x4c, 0xbc, 0x34, 0xb8, 0x14, 0x18, 0x80, 0x10, 0x80, 0x42, 0x30, 0x60, 0x78, 0x60, 0xf8, 0x44, 0xc0, 0x80, 0x04, 0xb8, 0x84, 0xcf, 0xcc, 0xf0, 0x3c }; +const unsigned char Set7[] PROGMEM = { 0x80, 0x0c, 0x00, 0x1c, 0x3f, 0xf4, 0x3f, 0xe0, 0x3f, 0xc4, 0x37, 0x8c, 0x23, 0x18, 0x30, 0x30, 0x38, 0x70, 0x3c, 0xf0, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set11[] PROGMEM = { 0xf3, 0xfc, 0xe7, 0xfc, 0xce, 0x0c, 0x8e, 0x1c, 0x9f, 0x9c, 0x1f, 0x3c, 0x1f, 0x0c, 0x0e, 0x0c, 0x0f, 0xfc, 0x87, 0xf8, 0x81, 0xe4, 0xc0, 0x0c, 0xe0, 0x1c, 0xf8, 0x7c }; +const unsigned char Set8[] PROGMEM = { 0x81, 0xdc, 0x55, 0x9c, 0x29, 0x04, 0x55, 0x00, 0x29, 0x90, 0x55, 0xd0, 0x03, 0xfc, 0xff, 0x00, 0x2e, 0x00, 0x26, 0x70, 0x02, 0x50, 0x82, 0x70, 0xe6, 0x00, 0xee, 0x04 }; +const unsigned char Set9[] PROGMEM = { 0xf0, 0x3c, 0xce, 0x0c, 0xbf, 0x04, 0xb3, 0x04, 0x73, 0x00, 0x7f, 0x00, 0x7e, 0x00, 0x7c, 0x00, 0x7c, 0x00, 0x7c, 0x60, 0xbc, 0x64, 0xbe, 0x04, 0xcf, 0x0c, 0xf0, 0x3c }; +const unsigned char Set10[] PROGMEM = { 0xf8, 0x7c, 0xf7, 0xbc, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0xbf, 0xf4, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xbf, 0xf4, 0xc0, 0x0c }; +const unsigned char Set13[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x34, 0xb0, 0x24, 0x90, 0x24, 0x90, 0x27, 0x90, 0x23, 0x10, 0x30, 0x30, 0x38, 0x70, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set12[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x20, 0x10, 0x20, 0x10, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Set14[] PROGMEM = { 0xff, 0x7c, 0xfe, 0x7c, 0xfc, 0xec, 0xe8, 0xdc, 0xc8, 0x4c, 0x98, 0x4c, 0x88, 0x24, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x1c }; +const unsigned char Set15[] PROGMEM = { 0x15, 0x54, 0x3f, 0xfc, 0x15, 0x54, 0x3f, 0xfc, 0x15, 0x54, 0x3c, 0x04, 0x14, 0x04, 0x3c, 0xfc, 0x14, 0x54, 0x3c, 0xfc, 0x00, 0x54, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char Set16[] PROGMEM = { 0x15, 0x54, 0x3f, 0xf8, 0x15, 0x50, 0x3f, 0xf0, 0x15, 0x50, 0x38, 0x70, 0x10, 0x20, 0x31, 0x04, 0x13, 0x8c, 0x22, 0xa8, 0x17, 0xfc, 0x2a, 0xa8, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char Set17[] PROGMEM = { 0x80, 0x00, 0xbf, 0xf8, 0x1f, 0xf8, 0xb0, 0x08, 0x18, 0x08, 0xb9, 0xe8, 0x19, 0xb8, 0xb8, 0x38, 0x18, 0x38, 0xb9, 0xb8, 0xb9, 0xf8, 0xb0, 0xf8, 0xbf, 0xf8, 0x80, 0x00 }; +const unsigned char Set18[] PROGMEM = { 0x80, 0x00, 0xbf, 0xf8, 0x1f, 0xf8, 0xb0, 0x28, 0x1f, 0xf8, 0xb4, 0x08, 0x1f, 0xf8, 0xb1, 0x08, 0x1f, 0xf8, 0xb0, 0x48, 0xbf, 0xf8, 0xb2, 0x88, 0xbf, 0xf8, 0x80, 0x00 }; +const unsigned char Lang_CN[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x20, 0x10, 0x24, 0x90, 0x24, 0x90, 0x20, 0x10, 0x3c, 0xf0, 0x3c, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Lang_EN[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x38, 0x70, 0x30, 0x30, 0x23, 0x10, 0x27, 0x90, 0x20, 0x10, 0x20, 0x10, 0x27, 0x90, 0x27, 0x90, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Lang_JP[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3d, 0xf0, 0x20, 0x10, 0x3b, 0xf0, 0x3b, 0x70, 0x30, 0x30, 0x2b, 0x50, 0x2a, 0xd0, 0x31, 0xb0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 }; +const unsigned char Save[] PROGMEM = { 0x00, 0x04, 0x58, 0x08, 0x58, 0x08, 0x58, 0x08, 0x40, 0x08, 0x7f, 0xf8, 0x60, 0x18, 0x5f, 0xe8, 0x5b, 0x68, 0x5f, 0xe8, 0x5b, 0x68, 0x1c, 0xe8, 0x5f, 0xe8, 0x00, 0x00 }; +const unsigned char Lock[] PROGMEM = { 0xe0, 0x1c, 0xc0, 0x0c, 0x8f, 0xc4, 0x9f, 0xe4, 0x9f, 0xe4, 0x9f, 0xe4, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0x00, 0x80, 0x04 }; +const unsigned char Set19[] PROGMEM = { 0xf8, 0x7c, 0x80, 0x04, 0xbc, 0xf4, 0x3f, 0xf0, 0x38, 0x70, 0xb7, 0xb4, 0xb6, 0xb4, 0xb5, 0xb4, 0xb7, 0xb4, 0x38, 0x70, 0x3f, 0xf0, 0xbc, 0xf4, 0x80, 0x04, 0xf8, 0x7c }; +#if LANG_JP_State +const unsigned char *Ico_table[] = { + Set0, Set1, Set2, Set3, Set4, Set5, Set19, Set6, Lock, Set_LANG, QRC, Set7, + Set8, Set9, Set0, Set10, Set12, Set7, + Set0, Set11, Set14, Save, + Set11, Set13, Set14, Save, + Set15, Set16, + Set17, Set18, //5 + Set5_1, Set5, + c_NO, Set7, + Lang_CN, Lang_EN, Lang_JP, //8 + Set4, Set4F, Save, +}; +#else +const unsigned char *Ico_table[] = { + Set0, Set1, Set2, Set3, Set4, Set5, Set19, Set6, Lock, Set_LANG, QRC, Set7, + Set8, Set9, Set0, Set10, Set12, Save, + Set0, Set11, Set14, Save, + Set11, Set13, Set14, Save, + Set15, Set16, + Set17, Set18, //5 + Set5_1, Set5, + c_NO, Set7, + Lang_CN, Lang_EN,c_NO, //8 + Set4, Set4F, Save, +}; +#endif +const byte Menu_table[] = {12, 6, 4, 4, 2, 2, 2, 2, 3, 3}; //菜单 标签 温控 定时 控制方式 首页 蜂鸣器 标签删除确认界面 语言菜单 翻转 显示 +byte MenuLevel = 0; //菜单层级 diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/B-Lang.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/B-Lang.ino new file mode 100644 index 0000000..7944797 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/B-Lang.ino @@ -0,0 +1,824 @@ +#define LANG_JP_State false +/*//////////////////////////////////////////////////////////////////////////////////////////////////// + 多语言支持 + Multilingual support + /////////////////////////////////////////////////////////////////////////////////////////////////// +*/ +/* + 英语库 ENGLISH +*/ +const char EN_0[] PROGMEM = "Tip"; +const char EN_1[] PROGMEM = "Temp"; +const char EN_2[] PROGMEM = "Timer"; +const char EN_3[] PROGMEM = "Control"; +const char EN_4[] PROGMEM = "Screen"; +const char EN_5[] PROGMEM = "Buzzer"; +const char EN_6[] PROGMEM = "LOW Vol"; +const char EN_7[] PROGMEM = "Lang"; +const char EN_8[] PROGMEM = "Return"; +const char EN_9[] PROGMEM = "Change"; +const char EN_10[] PROGMEM = "Calibrate"; +const char EN_11[] PROGMEM = "Rename"; +const char EN_12[] PROGMEM = "Delete"; +const char EN_13[] PROGMEM = "Add"; +const char EN_14[] PROGMEM = "Save"; +const char EN_15[] PROGMEM = "Default"; +const char EN_16[] PROGMEM = "Sleep"; +const char EN_17[] PROGMEM = "Boost"; +const char EN_18[] PROGMEM = "Save"; +const char EN_19[] PROGMEM = "Sleep"; +const char EN_20[] PROGMEM = "Off"; +const char EN_21[] PROGMEM = "Boost"; +const char EN_22[] PROGMEM = "Save"; +const char EN_23[] PROGMEM = "Direct"; +const char EN_24[] PROGMEM = "PID"; +const char EN_25[] PROGMEM = "Big"; +const char EN_26[] PROGMEM = "Infos"; +const char EN_27[] PROGMEM = "OFF"; +const char EN_28[] PROGMEM = "ON"; +const char EN_29[] PROGMEM = "NO"; +const char EN_30[] PROGMEM = "YES"; +const char EN_31[] PROGMEM = "CN"; +const char EN_32[] PROGMEM = "EN"; +const char EN_33[] PROGMEM = "NO"; +const char EN_34[] PROGMEM = "OK"; +const char EN_35[] PROGMEM = "Main Screen"; +const char EN_36[] PROGMEM = "Flip"; +const char EN_37[] PROGMEM = "Save"; +const char EN_38[] PROGMEM = "About"; +const char EN_39[] PROGMEM = "JP"; +const char EN_40[] PROGMEM = "Lock"; +const char EN_41[] PROGMEM = "Rotary"; + +const char *const EN_table[] PROGMEM = {EN_0, EN_1, EN_2, EN_3, EN_4, EN_5, EN_41, EN_6, EN_40, EN_7, EN_38, EN_8, EN_9, EN_10, EN_11, EN_12, EN_13, EN_8, EN_15, EN_16, EN_17, EN_18, EN_19, EN_20, EN_21, EN_22, EN_23, EN_24, EN_25, EN_26, EN_27, EN_28, EN_29, EN_30, EN_31, EN_32, EN_39, EN_35, EN_36, EN_37,}; + +/* + #!/usr/bin/python + # -*- coding: UTF-8 -*- + for num in range(0,38): + print("EN_",end="") + print(num,end='') + print(",",end="") +*/ + +/*//////////////////////////////////////////////////////////////////////////////////////////////////// + 多语言支持 + Multilingual support + /////////////////////////////////////////////////////////////////////////////////////////////////// +*/ + +/* + 中文语言库 CHINESE + + //////////////////////////////////////////////////////////////////////////////////////////////////////// + 本地化提示:你可以按照位图的大小,把这里的文字位图替换成你的语言,确保位图分辨率一致即可,我们欢迎你把程序翻译为你当地的语言! + Localization tips: you can according to the size of the bitmap, + replace the text bitmap here with your language, + ensure that the bitmap resolution is consistent, + we welcome you to translate the program into your local language! + //////////////////////////////////////////////////////////////////////////////////////////////////////// +*/ +//width:28,height:14 主界面中文提示 +//Main Screen +//错误-ERROR +const unsigned char S1[] PROGMEM = { 0x20, 0x92, 0x1f, 0xc0, 0x3d, 0xf9, 0x90, 0x40, 0x20, 0x90, 0x90, 0x40, 0x40, 0x90, 0x1f, 0xc0, 0x7b, 0xff, 0x00, 0x00, 0xa0, 0x01, 0x3f, 0xe0, 0x21, 0xf9, 0x02, 0x00, 0xfd, 0x09, 0x02, 0x00, 0x21, 0x09, 0x7f, 0xf0, 0x21, 0xf9, 0x05, 0x00, 0x21, 0x09, 0x45, 0x00, 0x29, 0x09, 0x88, 0x80, 0x31, 0xf9, 0x10, 0x70, 0x21, 0x08, 0x20, 0x20 }; +//关机-OFF +const unsigned char S2[] PROGMEM = { 0x10, 0x40, 0x47, 0xc0, 0x17, 0xfc, 0x44, 0x40, 0x20, 0x03, 0xf4, 0x40, 0x23, 0xf8, 0x44, 0x40, 0x62, 0x08, 0xc4, 0x40, 0xa3, 0xf8, 0xe4, 0x40, 0x20, 0x01, 0x54, 0x40, 0x2f, 0xfd, 0x44, 0x40, 0x28, 0x06, 0x44, 0x40, 0x23, 0xf8, 0x44, 0x40, 0x20, 0x40, 0x44, 0x50, 0x20, 0x40, 0x48, 0x50, 0x21, 0x40, 0x50, 0x30, 0x20, 0x80, 0x40, 0x00 }; +//休眠-SLEEP +const unsigned char S3[] PROGMEM = { 0x10, 0x83, 0xdf, 0xc0, 0x10, 0x82, 0x50, 0x40, 0x20, 0x82, 0x50, 0x40, 0x2f, 0xff, 0xdf, 0xc0, 0x60, 0x82, 0x52, 0x00, 0x61, 0xc2, 0x52, 0x00, 0xa1, 0xc2, 0x5f, 0xe0, 0x22, 0xa3, 0xd2, 0x00, 0x22, 0xa2, 0x51, 0x00, 0x24, 0x92, 0x51, 0x00, 0x28, 0x8e, 0x50, 0x90, 0x30, 0x8b, 0xd4, 0x50, 0x20, 0x82, 0x58, 0x30, 0x20, 0x80, 0x10, 0x10 }; +//提温-BOOST +const unsigned char S4[] PROGMEM = { 0x23, 0xf2, 0x1f, 0xc0, 0x22, 0x11, 0x10, 0x40, 0xfb, 0xf0, 0x90, 0x40, 0x22, 0x12, 0x1f, 0xc0, 0x2a, 0x11, 0x10, 0x40, 0x33, 0xf1, 0x10, 0x40, 0x60, 0x00, 0x5f, 0xc0, 0xaf, 0xfc, 0x80, 0x00, 0x20, 0x41, 0x3f, 0xe0, 0x22, 0x43, 0x25, 0x20, 0x22, 0x79, 0x25, 0x20, 0x22, 0x41, 0x25, 0x20, 0xa5, 0x41, 0x25, 0x20, 0x48, 0xfd, 0x7f, 0xf0 }; +//正常工作-WORKY +const unsigned char S5[] PROGMEM = { 0x7f, 0xf8, 0x48, 0x80, 0x02, 0x00, 0x49, 0x00, 0x02, 0x01, 0xff, 0xf0, 0x02, 0x01, 0x00, 0x10, 0x02, 0x02, 0x7f, 0x20, 0x22, 0x00, 0x41, 0x00, 0x23, 0xf0, 0x7f, 0x00, 0x22, 0x00, 0x08, 0x00, 0x22, 0x00, 0xff, 0x80, 0x22, 0x00, 0x88, 0x80, 0x22, 0x00, 0x88, 0x80, 0x22, 0x00, 0x8a, 0x80, 0x22, 0x00, 0x89, 0x00, 0xff, 0xfc, 0x08, 0x00 }; +//加热-HEAT +const unsigned char S6[] PROGMEM = { 0x0f, 0x42, 0x1f, 0xc0, 0x78, 0x41, 0x10, 0x40, 0x08, 0x40, 0x90, 0x40, 0x08, 0x42, 0x1f, 0xc0, 0x08, 0x41, 0x10, 0x40, 0xff, 0xfd, 0x10, 0x40, 0x08, 0x40, 0x5f, 0xc0, 0x08, 0x40, 0x80, 0x00, 0x08, 0x41, 0x3f, 0xe0, 0x08, 0x43, 0x25, 0x20, 0x10, 0x41, 0x25, 0x20, 0x10, 0x41, 0x25, 0x20, 0x20, 0x41, 0x25, 0x20, 0x40, 0x41, 0x7f, 0xf0 }; +//维持-HOLD +const unsigned char S7[] PROGMEM = { 0x11, 0x40, 0x82, 0x00, 0x21, 0x20, 0x8f, 0xe0, 0x23, 0xfc, 0x82, 0x00, 0x4a, 0x23, 0xe2, 0x00, 0xfe, 0x20, 0x9f, 0xf0, 0x13, 0xf8, 0x80, 0x80, 0x22, 0x20, 0xc0, 0x80, 0x42, 0x21, 0xbf, 0xf0, 0xfb, 0xfa, 0x88, 0x80, 0x02, 0x20, 0x84, 0x80, 0x02, 0x20, 0x84, 0x80, 0x1a, 0x20, 0x80, 0x80, 0xe3, 0xfe, 0x82, 0x80, 0x02, 0x01, 0x01, 0x00 }; +const unsigned char *S_table[] = {S1, S2, S3, S4, S5, S6, S7}; + +// 菜单 width:36,height:16 +//MENU Oj +/* + The order here(↓) can refer to EN_table(↑↑↑) +*/ +const unsigned char t0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x7f, 0x90, 0xf8, 0x00, 0x01, 0x08, 0x08, 0x88, 0x00, 0x0a, 0x10, 0x08, 0x88, 0x00, 0x04, 0x7f, 0x01, 0x07, 0x00, 0x1f, 0xc1, 0x3a, 0x00, 0x00, 0x05, 0x49, 0x09, 0xfc, 0x00, 0x04, 0x49, 0x08, 0x84, 0x00, 0x04, 0x49, 0x08, 0x88, 0x00, 0x04, 0x49, 0x08, 0x48, 0x00, 0x04, 0x49, 0x08, 0x50, 0x00, 0x04, 0x49, 0x0a, 0x20, 0x00, 0x04, 0x16, 0x0c, 0x58, 0x00, 0x14, 0x21, 0x89, 0x87, 0x00, 0x08, 0xc0, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfe, 0x08, 0x20, 0x00, 0x08, 0x82, 0x0b, 0xff, 0x00, 0x04, 0x82, 0x0a, 0x01, 0x00, 0x10, 0xfe, 0x3c, 0x51, 0x00, 0x08, 0x82, 0x08, 0x88, 0x00, 0x08, 0x82, 0x09, 0x04, 0x00, 0x02, 0xfe, 0x0c, 0x00, 0x00, 0x04, 0x00, 0x19, 0xfc, 0x00, 0x09, 0xff, 0x28, 0x20, 0x00, 0x19, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x2b, 0xff, 0x00, 0x0b, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x20, 0x3e, 0x04, 0x00, 0x1f, 0xff, 0xa2, 0x04, 0x00, 0x10, 0x00, 0xa2, 0xff, 0x00, 0x00, 0x01, 0x22, 0x04, 0x00, 0x0f, 0xfe, 0x22, 0x04, 0x00, 0x00, 0x40, 0x3e, 0x44, 0x00, 0x00, 0x40, 0x22, 0x24, 0x00, 0x04, 0x40, 0x22, 0x24, 0x00, 0x04, 0x7c, 0x22, 0x04, 0x00, 0x04, 0x40, 0x22, 0x04, 0x00, 0x0a, 0x40, 0x3e, 0x04, 0x00, 0x09, 0x40, 0x22, 0x24, 0x00, 0x10, 0xff, 0x80, 0x14, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00 }; +const unsigned char t3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x10, 0x12, 0x02, 0x00, 0x05, 0xff, 0x9f, 0xd2, 0x00, 0x05, 0x00, 0x92, 0x12, 0x00, 0x1e, 0x28, 0xa2, 0x12, 0x00, 0x04, 0x44, 0x3f, 0xf2, 0x00, 0x04, 0x82, 0x02, 0x12, 0x00, 0x06, 0x00, 0x02, 0x12, 0x00, 0x0c, 0xfe, 0x1f, 0xd2, 0x00, 0x14, 0x10, 0x12, 0x52, 0x00, 0x04, 0x10, 0x12, 0x42, 0x00, 0x04, 0x10, 0x13, 0x42, 0x00, 0x04, 0x10, 0x12, 0x82, 0x00, 0x15, 0xff, 0x82, 0x0a, 0x00, 0x08, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x0f, 0xf8, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x04, 0x02, 0x3f, 0xfe, 0x00, 0x04, 0x02, 0x00, 0x80, 0x00, 0x07, 0xfe, 0x00, 0x80, 0x00, 0x00, 0x90, 0x04, 0x90, 0x00, 0x08, 0x91, 0x0c, 0x88, 0x00, 0x06, 0x93, 0x10, 0x86, 0x00, 0x02, 0x94, 0x20, 0x82, 0x00, 0x00, 0x90, 0x00, 0x80, 0x00, 0x00, 0x90, 0x02, 0x80, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t5[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x1f, 0xff, 0x9f, 0xfc, 0x00, 0x00, 0x40, 0x04, 0x10, 0x00, 0x0f, 0xff, 0x02, 0x20, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x08, 0x42, 0x0f, 0xf8, 0x00, 0x08, 0x42, 0x08, 0x08, 0x00, 0x0f, 0xfe, 0x08, 0x08, 0x00, 0x08, 0x02, 0x0f, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x08, 0x00, 0x08, 0x00, 0x08, 0x08, 0x00, 0x08, 0x00, 0x0f, 0xf8, 0x00, 0x10, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t6[] PROGMEM = { 0x09, 0xff, 0x00, 0x40, 0x00, 0x04, 0x20, 0x3f, 0xff, 0x00, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x1c, 0x42, 0x0f, 0xfc, 0x00, 0x04, 0x42, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x04, 0x00, 0x0f, 0xfc, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x04, 0x81, 0x00, 0x00, 0x00, 0x05, 0x81, 0x0f, 0xfc, 0x00, 0x06, 0x81, 0x08, 0x04, 0x00, 0x04, 0xff, 0x08, 0x04, 0x00, 0x00, 0x81, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t7[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xfe, 0x00, 0x01, 0x00, 0x08, 0x20, 0x00, 0x03, 0xff, 0x08, 0x20, 0x00, 0x02, 0x01, 0x08, 0x20, 0x00, 0x04, 0x22, 0x08, 0x20, 0x00, 0x08, 0x20, 0x0b, 0xfe, 0x00, 0x10, 0x20, 0x08, 0x20, 0x00, 0x00, 0x50, 0x08, 0x28, 0x00, 0x00, 0x50, 0x08, 0x24, 0x00, 0x00, 0x88, 0x08, 0x22, 0x00, 0x00, 0x88, 0x10, 0x20, 0x00, 0x01, 0x04, 0x10, 0x20, 0x00, 0x02, 0x03, 0xa7, 0xff, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char Back[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x00, 0x08, 0xf8, 0x3f, 0xfe, 0x00, 0x04, 0x80, 0x20, 0x02, 0x00, 0x00, 0x80, 0x20, 0x02, 0x00, 0x00, 0xbe, 0x23, 0xe2, 0x00, 0x1c, 0x82, 0x22, 0x22, 0x00, 0x04, 0xa4, 0x22, 0x22, 0x00, 0x04, 0x94, 0x22, 0x22, 0x00, 0x04, 0x88, 0x22, 0x22, 0x00, 0x04, 0x94, 0x23, 0xe2, 0x00, 0x05, 0x22, 0x20, 0x02, 0x00, 0x05, 0x42, 0x20, 0x02, 0x00, 0x0a, 0x00, 0x3f, 0xfe, 0x00, 0x11, 0xff, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t1_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x20, 0x90, 0x00, 0x02, 0x7f, 0x98, 0x90, 0x00, 0x1f, 0x80, 0x09, 0xff, 0x00, 0x02, 0x22, 0x01, 0x10, 0x00, 0x06, 0x21, 0x8b, 0x10, 0x00, 0x07, 0x62, 0x8d, 0xfe, 0x00, 0x0a, 0xa2, 0x09, 0x10, 0x00, 0x0a, 0x14, 0x11, 0x10, 0x00, 0x12, 0x14, 0x31, 0xfe, 0x00, 0x02, 0x08, 0x11, 0x10, 0x00, 0x02, 0x14, 0x11, 0x10, 0x00, 0x02, 0x22, 0x11, 0x10, 0x00, 0x02, 0x43, 0x91, 0xff, 0x00, 0x02, 0x81, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t1_2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x80, 0x00, 0x00, 0x50, 0x01, 0xfc, 0x00, 0x00, 0x88, 0x01, 0x04, 0x00, 0x01, 0x04, 0x03, 0x08, 0x00, 0x06, 0xfb, 0x04, 0x90, 0x00, 0x08, 0x00, 0xc0, 0x60, 0x00, 0x07, 0xdf, 0x01, 0x80, 0x00, 0x04, 0x51, 0x06, 0x00, 0x00, 0x04, 0x51, 0x1b, 0xfe, 0x00, 0x04, 0x51, 0x02, 0x02, 0x00, 0x07, 0xd9, 0x02, 0x02, 0x00, 0x04, 0x56, 0x02, 0x02, 0x00, 0x00, 0x10, 0x03, 0xfe, 0x00, 0x00, 0x10, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t1_3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x78, 0xbc, 0x20, 0x00, 0x09, 0x48, 0xa4, 0x50, 0x00, 0x09, 0x4a, 0xa8, 0x50, 0x00, 0x09, 0x4a, 0xa8, 0x88, 0x00, 0x09, 0x4a, 0xb1, 0x04, 0x00, 0x1f, 0xfe, 0xaa, 0xfb, 0x00, 0x09, 0x4a, 0xa4, 0x20, 0x00, 0x09, 0x4a, 0xa4, 0x20, 0x00, 0x09, 0x4a, 0xa7, 0xfe, 0x00, 0x09, 0x4a, 0xb4, 0x20, 0x00, 0x09, 0x48, 0xa9, 0x24, 0x00, 0x0b, 0x48, 0xa2, 0x22, 0x00, 0x08, 0x8a, 0xa4, 0xa2, 0x00, 0x11, 0x19, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t1_4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x10, 0x00, 0x1f, 0xdc, 0x3e, 0xfe, 0x00, 0x08, 0x90, 0x02, 0x12, 0x00, 0x05, 0x10, 0x04, 0xff, 0x00, 0x1f, 0xdf, 0x84, 0x12, 0x00, 0x02, 0x12, 0x0c, 0xfe, 0x00, 0x1f, 0xd2, 0x02, 0x10, 0x00, 0x02, 0x12, 0x22, 0xfe, 0x00, 0x0a, 0x92, 0x14, 0x10, 0x00, 0x0a, 0x52, 0x14, 0x10, 0x00, 0x12, 0x22, 0x0d, 0xff, 0x00, 0x02, 0x22, 0x08, 0x10, 0x00, 0x0a, 0x42, 0x14, 0x10, 0x00, 0x04, 0x02, 0x23, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//默认 +const unsigned char t2_0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc8, 0x10, 0x20, 0x00, 0x12, 0x4a, 0x0c, 0x20, 0x00, 0x1a, 0xc9, 0x04, 0x20, 0x00, 0x17, 0x48, 0x00, 0x20, 0x00, 0x1f, 0xff, 0xb8, 0x20, 0x00, 0x02, 0x08, 0x08, 0x50, 0x00, 0x1f, 0xc8, 0x08, 0x50, 0x00, 0x02, 0x08, 0x08, 0x50, 0x00, 0x03, 0xc8, 0x08, 0x48, 0x00, 0x1e, 0x14, 0x08, 0x88, 0x00, 0x01, 0x54, 0x0a, 0x88, 0x00, 0x15, 0x22, 0x0c, 0x84, 0x00, 0x14, 0x43, 0x89, 0x07, 0x00, 0x00, 0x81, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//休眠 +const unsigned char t2_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x3d, 0xfc, 0x00, 0x02, 0x10, 0x25, 0x04, 0x00, 0x04, 0x10, 0x25, 0x04, 0x00, 0x05, 0xff, 0xbd, 0xfc, 0x00, 0x0c, 0x10, 0x25, 0x20, 0x00, 0x0c, 0x38, 0x25, 0x20, 0x00, 0x14, 0x38, 0x25, 0xfe, 0x00, 0x04, 0x54, 0x3d, 0x20, 0x00, 0x04, 0x54, 0x25, 0x10, 0x00, 0x04, 0x92, 0x25, 0x10, 0x00, 0x05, 0x11, 0xa5, 0x09, 0x00, 0x06, 0x11, 0x3d, 0x45, 0x00, 0x04, 0x10, 0x25, 0x83, 0x00, 0x04, 0x10, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//提温 +const unsigned char t2_2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x21, 0xfc, 0x00, 0x04, 0x42, 0x11, 0x04, 0x00, 0x1f, 0x7e, 0x09, 0x04, 0x00, 0x04, 0x42, 0x21, 0xfc, 0x00, 0x05, 0x42, 0x11, 0x04, 0x00, 0x06, 0x7e, 0x11, 0x04, 0x00, 0x0c, 0x00, 0x05, 0xfc, 0x00, 0x15, 0xff, 0x88, 0x00, 0x00, 0x04, 0x08, 0x13, 0xfe, 0x00, 0x04, 0x48, 0x32, 0x52, 0x00, 0x04, 0x4f, 0x12, 0x52, 0x00, 0x04, 0x48, 0x12, 0x52, 0x00, 0x14, 0xa8, 0x12, 0x52, 0x00, 0x09, 0x1f, 0x97, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//关机 +const unsigned char t3_1[] PROGMEM = { 0x01, 0x04, 0x04, 0x7c, 0x00, 0x00, 0x88, 0x04, 0x44, 0x00, 0x0f, 0xff, 0x3f, 0x44, 0x00, 0x00, 0x20, 0x04, 0x44, 0x00, 0x00, 0x20, 0x0c, 0x44, 0x00, 0x00, 0x20, 0x0e, 0x44, 0x00, 0x1f, 0xff, 0x95, 0x44, 0x00, 0x00, 0x20, 0x14, 0x44, 0x00, 0x00, 0x50, 0x24, 0x44, 0x00, 0x00, 0x50, 0x04, 0x44, 0x00, 0x00, 0x88, 0x04, 0x45, 0x00, 0x01, 0x04, 0x04, 0x85, 0x00, 0x06, 0x03, 0x85, 0x03, 0x00, 0x18, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t_4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x20, 0x00, 0x0f, 0xff, 0x09, 0xfc, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x20, 0x3e, 0x88, 0x00, 0x03, 0xfe, 0x08, 0x50, 0x00, 0x02, 0x02, 0x0b, 0xfe, 0x00, 0x03, 0xfe, 0x0c, 0x40, 0x00, 0x02, 0x02, 0x18, 0x40, 0x00, 0x03, 0xfe, 0x2b, 0xfe, 0x00, 0x02, 0x02, 0x08, 0x48, 0x00, 0x03, 0xfe, 0x08, 0x88, 0x00, 0x02, 0x02, 0x08, 0x50, 0x00, 0x02, 0x02, 0x28, 0x30, 0x00, 0x1f, 0xff, 0x91, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_PID[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc3, 0xf1, 0xe0, 0x00, 0x0f, 0xe3, 0xf1, 0xf8, 0x00, 0x0c, 0x70, 0xc1, 0x9e, 0x00, 0x0c, 0x30, 0xc1, 0x86, 0x00, 0x0c, 0x30, 0xc1, 0x83, 0x00, 0x0c, 0x30, 0xc1, 0x83, 0x00, 0x0c, 0x60, 0xc1, 0x83, 0x00, 0x0c, 0x60, 0xc1, 0x83, 0x00, 0x0f, 0xc0, 0xc1, 0x83, 0x00, 0x0f, 0xc0, 0xc1, 0x86, 0x00, 0x0c, 0x00, 0xc1, 0x86, 0x00, 0x0c, 0x00, 0xc1, 0x98, 0x00, 0x0c, 0x03, 0xf1, 0xf8, 0x00, 0x0c, 0x03, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t5_0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0x88, 0x40, 0x00, 0x0a, 0x24, 0x10, 0x40, 0x00, 0x11, 0x42, 0x10, 0xfe, 0x00, 0x04, 0x00, 0x22, 0x82, 0x00, 0x02, 0xff, 0x3d, 0x02, 0x00, 0x08, 0x01, 0x0a, 0x42, 0x00, 0x09, 0xf9, 0x10, 0x32, 0x00, 0x09, 0x09, 0x20, 0x12, 0x00, 0x09, 0xf9, 0x3e, 0x02, 0x00, 0x09, 0x09, 0x00, 0x02, 0x00, 0x09, 0x09, 0x0e, 0x02, 0x00, 0x09, 0xf9, 0x30, 0x22, 0x00, 0x08, 0x05, 0x00, 0x14, 0x00, 0x08, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t5_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x44, 0x10, 0xfe, 0x00, 0x04, 0x28, 0x10, 0x92, 0x00, 0x05, 0xff, 0x22, 0x92, 0x00, 0x00, 0x10, 0x3c, 0x92, 0x00, 0x00, 0x10, 0x08, 0x92, 0x00, 0x1c, 0xfe, 0x10, 0x92, 0x00, 0x04, 0x10, 0x20, 0xfe, 0x00, 0x04, 0x10, 0x3e, 0x92, 0x00, 0x05, 0xff, 0x80, 0x92, 0x00, 0x04, 0x10, 0x00, 0x92, 0x00, 0x05, 0x10, 0x0e, 0x92, 0x00, 0x06, 0x10, 0x30, 0x92, 0x00, 0x04, 0x10, 0x00, 0xfe, 0x00, 0x00, 0x10, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t5_3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x3f, 0xfe, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x07, 0xfe, 0x0f, 0xf8, 0x00, 0x04, 0x02, 0x08, 0x08, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x07, 0xfe, 0x08, 0x88, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x07, 0xfe, 0x08, 0x88, 0x00, 0x04, 0x02, 0x09, 0x48, 0x00, 0x04, 0x02, 0x02, 0x30, 0x00, 0x07, 0xfe, 0x04, 0x0c, 0x00, 0x04, 0x02, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t_off[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x04, 0xff, 0x00, 0x00, 0x44, 0x02, 0x01, 0x00, 0x07, 0xff, 0x90, 0x21, 0x00, 0x00, 0x10, 0x10, 0x21, 0x00, 0x00, 0x10, 0x17, 0xfd, 0x00, 0x00, 0x10, 0x10, 0x21, 0x00, 0x0f, 0xff, 0xd0, 0x61, 0x00, 0x00, 0x10, 0x10, 0xa1, 0x00, 0x00, 0x28, 0x11, 0x21, 0x00, 0x00, 0x28, 0x12, 0x21, 0x00, 0x00, 0x44, 0x14, 0x21, 0x00, 0x00, 0x82, 0x10, 0xa1, 0x00, 0x03, 0x01, 0xd0, 0x45, 0x00, 0x0c, 0x00, 0x90, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_on[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x20, 0x00, 0x00, 0x84, 0x07, 0xff, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x0f, 0xff, 0xc7, 0xff, 0x00, 0x00, 0x84, 0x04, 0x00, 0x00, 0x00, 0x84, 0x04, 0x00, 0x00, 0x00, 0x84, 0x05, 0xff, 0x00, 0x00, 0x84, 0x05, 0x01, 0x00, 0x01, 0x04, 0x09, 0x01, 0x00, 0x01, 0x04, 0x09, 0x01, 0x00, 0x02, 0x04, 0x11, 0xff, 0x00, 0x04, 0x04, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t_NO[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x04, 0x91, 0x00, 0x04, 0x40, 0x02, 0x52, 0x00, 0x04, 0x7f, 0x90, 0x54, 0x00, 0x04, 0x50, 0x88, 0xff, 0x00, 0x07, 0xd0, 0x84, 0x81, 0x00, 0x04, 0x51, 0x00, 0x81, 0x00, 0x04, 0x49, 0x01, 0xff, 0x00, 0x07, 0xca, 0x02, 0x81, 0x00, 0x04, 0x44, 0x04, 0x81, 0x00, 0x04, 0x4a, 0x1c, 0xff, 0x00, 0x07, 0xea, 0x04, 0x81, 0x00, 0x0c, 0x51, 0x04, 0x81, 0x00, 0x00, 0x61, 0xc4, 0x85, 0x00, 0x00, 0x40, 0x80, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_OK[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xdf, 0x10, 0x20, 0x00, 0x02, 0x12, 0x0c, 0x20, 0x00, 0x02, 0x24, 0x04, 0x20, 0x00, 0x04, 0x7f, 0x80, 0x20, 0x00, 0x04, 0x24, 0xb8, 0x20, 0x00, 0x0f, 0xa4, 0x88, 0x50, 0x00, 0x14, 0xbf, 0x88, 0x50, 0x00, 0x04, 0xa4, 0x88, 0x50, 0x00, 0x04, 0xa4, 0x88, 0x48, 0x00, 0x04, 0xbf, 0x88, 0x88, 0x00, 0x04, 0xa4, 0x8a, 0x88, 0x00, 0x07, 0xa4, 0x8c, 0x84, 0x00, 0x04, 0x44, 0x89, 0x07, 0x00, 0x00, 0x81, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +const unsigned char t_CN_CN[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x0f, 0xff, 0x3f, 0xff, 0x00, 0x08, 0x41, 0x04, 0x08, 0x00, 0x08, 0x41, 0x04, 0x08, 0x00, 0x08, 0x41, 0x04, 0x10, 0x00, 0x08, 0x41, 0x02, 0x10, 0x00, 0x0f, 0xff, 0x02, 0x20, 0x00, 0x08, 0x41, 0x01, 0x20, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00, 0x40, 0x01, 0x30, 0x00, 0x00, 0x40, 0x02, 0x08, 0x00, 0x00, 0x40, 0x0c, 0x07, 0x00, 0x00, 0x40, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_CN_EN[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x80, 0x00, 0x1f, 0xff, 0x80, 0x80, 0x00, 0x01, 0x10, 0x3f, 0xff, 0x00, 0x00, 0x40, 0x04, 0x08, 0x00, 0x07, 0xfc, 0x04, 0x08, 0x00, 0x04, 0x44, 0x04, 0x10, 0x00, 0x04, 0x44, 0x02, 0x10, 0x00, 0x04, 0x44, 0x02, 0x20, 0x00, 0x1f, 0xff, 0x81, 0x20, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00, 0xa0, 0x01, 0x30, 0x00, 0x01, 0x10, 0x02, 0x08, 0x00, 0x06, 0x0c, 0x0c, 0x07, 0x00, 0x18, 0x03, 0xb0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t_CN_JP[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x13, 0xfe, 0x00, 0x04, 0x02, 0x08, 0x40, 0x00, 0x04, 0x02, 0x08, 0x40, 0x00, 0x04, 0x02, 0x01, 0xfc, 0x00, 0x04, 0x02, 0x38, 0x84, 0x00, 0x04, 0x02, 0x08, 0x84, 0x00, 0x07, 0xfe, 0x0f, 0xff, 0x00, 0x04, 0x02, 0x08, 0x00, 0x00, 0x04, 0x02, 0x09, 0xfe, 0x00, 0x04, 0x02, 0x09, 0x02, 0x00, 0x04, 0x02, 0x0b, 0x02, 0x00, 0x04, 0x02, 0x0d, 0x02, 0x00, 0x07, 0xfe, 0x09, 0xfe, 0x00, 0x04, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +//翻转 +const unsigned char t4f[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x1d, 0xc2, 0x08, 0x00, 0x05, 0x44, 0x42, 0x08, 0x00, 0x03, 0x84, 0x5f, 0xbf, 0x00, 0x0f, 0xe4, 0x44, 0x10, 0x00, 0x01, 0x15, 0x45, 0x10, 0x00, 0x05, 0x4c, 0xc9, 0x7f, 0x80, 0x09, 0x24, 0x4f, 0x90, 0x00, 0x07, 0xc4, 0xc1, 0x10, 0x00, 0x05, 0x4d, 0x41, 0x3f, 0x00, 0x05, 0x54, 0x43, 0x81, 0x00, 0x07, 0xc4, 0x4d, 0x02, 0x00, 0x05, 0x44, 0x41, 0x14, 0x00, 0x05, 0x55, 0x41, 0x08, 0x00, 0x07, 0xc8, 0x81, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +//保存 +const unsigned char t_save[] PROGMEM = { 0x02, 0xfe, 0x01, 0x00, 0x00, 0x02, 0x82, 0x3f, 0xff, 0x00, 0x04, 0x82, 0x02, 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x0c, 0x10, 0x04, 0xfc, 0x00, 0x14, 0x10, 0x04, 0x08, 0x00, 0x05, 0xff, 0x8c, 0x10, 0x00, 0x04, 0x10, 0x14, 0x10, 0x00, 0x04, 0x38, 0x25, 0xff, 0x00, 0x04, 0x34, 0x04, 0x10, 0x00, 0x04, 0x52, 0x04, 0x10, 0x00, 0x04, 0x91, 0x84, 0x10, 0x00, 0x05, 0x10, 0x04, 0x50, 0x00, 0x04, 0x10, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char tAbout[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x0f, 0xfe, 0x00, 0x00, 0x44, 0x00, 0x40, 0x00, 0x07, 0xff, 0x80, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x10, 0x1f, 0xff, 0x80, 0x0f, 0xff, 0xc0, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x28, 0x00, 0x40, 0x00, 0x00, 0x28, 0x00, 0x40, 0x00, 0x00, 0x44, 0x00, 0x40, 0x00, 0x00, 0x82, 0x00, 0x40, 0x00, 0x03, 0x01, 0xc1, 0x40, 0x00, 0x0c, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char tPassword[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1f, 0x7e, 0x00, 0x1f, 0xff, 0x84, 0x02, 0x00, 0x10, 0x80, 0x84, 0x42, 0x00, 0x0a, 0x4a, 0x04, 0x42, 0x00, 0x0a, 0x31, 0x08, 0x42, 0x00, 0x12, 0xc5, 0x0f, 0x42, 0x00, 0x03, 0x04, 0x19, 0x7f, 0x00, 0x1d, 0xf8, 0x29, 0x01, 0x00, 0x00, 0x40, 0x09, 0x01, 0x00, 0x08, 0x42, 0x09, 0xfd, 0x00, 0x08, 0x42, 0x09, 0x01, 0x00, 0x08, 0x42, 0x0f, 0x01, 0x00, 0x0f, 0xfe, 0x09, 0x05, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char t19[] PROGMEM = { 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x1f, 0x88, 0xfe, 0x00, 0x1f, 0xd0, 0x0e, 0x22, 0x00, 0x04, 0x20, 0x30, 0x22, 0x00, 0x04, 0x5f, 0x80, 0x22, 0x00, 0x07, 0x84, 0x9e, 0x22, 0x00, 0x04, 0x85, 0x08, 0x22, 0x00, 0x04, 0x94, 0x08, 0x22, 0x00, 0x04, 0x94, 0x28, 0xfe, 0x00, 0x04, 0x97, 0x1e, 0x42, 0x00, 0x04, 0x94, 0x08, 0x42, 0x00, 0x08, 0x94, 0x08, 0x42, 0x00, 0x0a, 0xac, 0x0a, 0x42, 0x00, 0x11, 0x44, 0x0c, 0x42, 0x00, 0x00, 0x83, 0x89, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +const unsigned char *CN_table[] = { + t0, t1, t2, t3, t4, t5, t19 , t7, tPassword, t6, tAbout, Back, //0 + t0, t1_1, t1_2, t1_3, t1_4, Back, //1 + t2_0, t2_1, t2_2, t_save, //2 + t2_1, t3_1, t2_2, t_save,//3 + t_4, t_PID,//4 + t5_0, t5_1,//5 + t_off, t_on,//6 + t_NO, t_OK,//7 + t_CN_CN, t_CN_EN, t_CN_JP, //8 + t5_3, t4f, t_save, //9 +}; + +/* + 日语 Japanese +*/ +/* + 8x8 dot Japanese font for Arduboy + + Copyright (c) 2016 emutyworks + + Released under the MIT license + https://github.com/emutyworks/8x8DotJPFont/blob/master/LICENSE.txt +*/ + + +/* + 利用しないフォントデータはヘッダファイルを読み込まないようにするとメモリが節約できます、 + drawText() 実行時にフォントが無い場合は処理がスキップされます。 + + 例) 8x8 dot ひらがな・カタカナ・記号 のみ利用 + #include "misaki_font_f0.h" // 8x8 dot ひらがな・カタカナ・記号 + //#include "misaki_font_f1.h" // 4x8 dot 英語・カタカナ・記号 + //#include "misaki_font_f2.h" // 8x8 dot 漢字 +*/ + +#if LANG_JP_State +#define MISAKI_FONT_H + +#define MISAKI_FONT_F0_PAGE 0xF0 +#define MISAKI_FONT_F1_PAGE 0xF1 +#define MISAKI_FONT_F2_PAGE 0xF2 + +#define MISAKI_FONT_F0_W 8 +#define MISAKI_FONT_F1_W 3 +#define MISAKI_FONT_F2_W 7 + +#define MISAKI_FONT_F0_SIZE 0xEF +#define MISAKI_FONT_F1_SIZE 0x9D +#define MISAKI_FONT_F2_SIZE 0x22 // misaki_font_f2.h の最終行の値をここに設定する、最大0xEFまで +PROGMEM const uint8_t misaki_font_0x00[1] = { 0x00 }; +#define MISAKI_FONT_F0_H +PROGMEM const uint8_t misaki_font_f0[ MISAKI_FONT_F0_SIZE + 1 ][ MISAKI_FONT_F0_W ] = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x00   */ + { 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x01 、 */ + { 0x20, 0x50, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x02 。 */ + { 0x50, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x03 , */ + { 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x04 . */ + { 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }, /* 0x05 ・ */ + { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00 }, /* 0x06 : */ + { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00, 0x00, 0x00 }, /* 0x07 ; */ + { 0x00, 0x02, 0x01, 0x51, 0x09, 0x09, 0x06, 0x00 }, /* 0x08 ? */ + { 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00 }, /* 0x09 ! */ + { 0x00, 0x00, 0x00, 0x00, 0x7f, 0x41, 0x41, 0x00 }, /* 0x0A [ */ + { 0x41, 0x41, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x0B ] */ + { 0x00, 0x00, 0x00, 0x3f, 0x01, 0x01, 0x01, 0x00 }, /* 0x0C 「 */ + { 0x40, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00 }, /* 0x0D 」 */ + { 0x00, 0x00, 0x3f, 0x21, 0x3d, 0x05, 0x07, 0x00 }, /* 0x0E 『 */ + { 0x70, 0x50, 0x5e, 0x42, 0x7e, 0x00, 0x00, 0x00 }, /* 0x0F 』 */ + { 0x00, 0x00, 0x00, 0x00, 0x7f, 0x63, 0x41, 0x00 }, /* 0x10 【 */ + { 0x41, 0x63, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x11 】 */ + { 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00 }, /* 0x12 + */ + { 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0x13 - */ + { 0x44, 0x44, 0x44, 0x5f, 0x44, 0x44, 0x44, 0x00 }, /* 0x14 ± */ + { 0x41, 0x22, 0x14, 0x08, 0x14, 0x22, 0x41, 0x00 }, /* 0x15 × */ + { 0x08, 0x08, 0x08, 0x2a, 0x08, 0x08, 0x08, 0x00 }, /* 0x16 ÷ */ + { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00 }, /* 0x17 = */ + { 0x14, 0x34, 0x14, 0x1c, 0x14, 0x16, 0x14, 0x00 }, /* 0x18 ≠ */ + { 0x08, 0x08, 0x14, 0x14, 0x14, 0x22, 0x22, 0x00 }, /* 0x19 < */ + { 0x22, 0x22, 0x14, 0x14, 0x14, 0x08, 0x08, 0x00 }, /* 0x1A > */ + { 0x02, 0x05, 0x02, 0x3c, 0x42, 0x42, 0x24, 0x00 }, /* 0x1B ℃ */ + { 0x00, 0x2b, 0x2c, 0x78, 0x2c, 0x2b, 0x00, 0x00 }, /* 0x1C ¥ */ + { 0x00, 0x24, 0x2a, 0x7a, 0x2f, 0x2a, 0x12, 0x00 }, /* 0x1D $ */ + { 0x00, 0x1c, 0x62, 0x32, 0x2e, 0x23, 0x14, 0x00 }, /* 0x1E ¢ */ + { 0x20, 0x54, 0x5e, 0x25, 0x41, 0x42, 0x20, 0x00 }, /* 0x1F £ */ + { 0x42, 0x25, 0x12, 0x08, 0x24, 0x52, 0x21, 0x00 }, /* 0x20 % */ + { 0x20, 0x62, 0x3e, 0x63, 0x3e, 0x23, 0x02, 0x00 }, /* 0x21 # */ + { 0x20, 0x56, 0x49, 0x55, 0x22, 0x58, 0x40, 0x00 }, /* 0x22 & */ + { 0x00, 0x22, 0x14, 0x7f, 0x14, 0x22, 0x00, 0x00 }, /* 0x23 * */ + { 0x1c, 0x22, 0x59, 0x55, 0x4d, 0x12, 0x0c, 0x00 }, /* 0x24 @ */ + { 0x00, 0x00, 0x4a, 0x55, 0x55, 0x29, 0x00, 0x00 }, /* 0x25 § */ + { 0x04, 0x64, 0x3c, 0x17, 0x3c, 0x64, 0x04, 0x00 }, /* 0x26 ☆ */ + { 0x04, 0x64, 0x3c, 0x1f, 0x3c, 0x64, 0x04, 0x00 }, /* 0x27 ★ */ + { 0x1c, 0x22, 0x41, 0x41, 0x41, 0x22, 0x1c, 0x00 }, /* 0x28 ○ */ + { 0x1c, 0x3e, 0x7f, 0x7f, 0x7f, 0x3e, 0x1c, 0x00 }, /* 0x29 ● */ + { 0x1c, 0x22, 0x5d, 0x55, 0x5d, 0x22, 0x1c, 0x00 }, /* 0x2A ◎ */ + { 0x08, 0x14, 0x22, 0x41, 0x22, 0x14, 0x08, 0x00 }, /* 0x2B ◇ */ + { 0x08, 0x1c, 0x3e, 0x7f, 0x3e, 0x1c, 0x08, 0x00 }, /* 0x2C ◆ */ + { 0x7f, 0x41, 0x41, 0x41, 0x41, 0x41, 0x7f, 0x00 }, /* 0x2D □ */ + { 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00 }, /* 0x2E ■ */ + { 0x40, 0x70, 0x4c, 0x43, 0x4c, 0x70, 0x40, 0x00 }, /* 0x2F △ */ + { 0x40, 0x70, 0x7c, 0x7f, 0x7c, 0x70, 0x40, 0x00 }, /* 0x30 ▲ */ + { 0x01, 0x07, 0x19, 0x61, 0x19, 0x07, 0x01, 0x00 }, /* 0x31 ▽ */ + { 0x01, 0x07, 0x1f, 0x7f, 0x1f, 0x07, 0x01, 0x00 }, /* 0x32 ▼ */ + { 0x49, 0x22, 0x14, 0x49, 0x14, 0x22, 0x49, 0x00 }, /* 0x33 ※ */ + { 0x05, 0x05, 0x05, 0x7d, 0x05, 0x05, 0x05, 0x00 }, /* 0x34 〒 */ + { 0x08, 0x08, 0x08, 0x08, 0x2a, 0x1c, 0x08, 0x00 }, /* 0x35 → */ + { 0x08, 0x1c, 0x2a, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0x36 ← */ + { 0x00, 0x04, 0x02, 0x7f, 0x02, 0x04, 0x00, 0x00 }, /* 0x37 ↑ */ + { 0x00, 0x10, 0x20, 0x7f, 0x20, 0x10, 0x00, 0x00 }, /* 0x38 ↓ */ + { 0x00, 0x3e, 0x41, 0x41, 0x41, 0x41, 0x3e, 0x00 }, /* 0x39 0 */ + { 0x00, 0x00, 0x42, 0x7f, 0x40, 0x00, 0x00, 0x00 }, /* 0x3A 1 */ + { 0x00, 0x62, 0x51, 0x51, 0x49, 0x49, 0x46, 0x00 }, /* 0x3B 2 */ + { 0x00, 0x22, 0x41, 0x49, 0x49, 0x49, 0x36, 0x00 }, /* 0x3C 3 */ + { 0x00, 0x30, 0x28, 0x24, 0x22, 0x7f, 0x20, 0x00 }, /* 0x3D 4 */ + { 0x00, 0x2f, 0x45, 0x45, 0x45, 0x45, 0x39, 0x00 }, /* 0x3E 5 */ + { 0x00, 0x3e, 0x49, 0x49, 0x49, 0x49, 0x32, 0x00 }, /* 0x3F 6 */ + { 0x00, 0x01, 0x01, 0x61, 0x19, 0x05, 0x03, 0x00 }, /* 0x40 7 */ + { 0x00, 0x36, 0x49, 0x49, 0x49, 0x49, 0x36, 0x00 }, /* 0x41 8 */ + { 0x00, 0x26, 0x49, 0x49, 0x49, 0x49, 0x3e, 0x00 }, /* 0x42 9 */ + { 0x00, 0x20, 0x54, 0x7e, 0x34, 0x14, 0x60, 0x00 }, /* 0x43 ぁ */ + { 0x20, 0x52, 0x7f, 0x2a, 0x1a, 0x4a, 0x30, 0x00 }, /* 0x44 あ */ + { 0x00, 0x3c, 0x40, 0x20, 0x04, 0x18, 0x00, 0x00 }, /* 0x45 ぃ */ + { 0x1e, 0x20, 0x40, 0x20, 0x02, 0x04, 0x18, 0x00 }, /* 0x46 い */ + { 0x00, 0x10, 0x4a, 0x4a, 0x2a, 0x10, 0x00, 0x00 }, /* 0x47 ぅ */ + { 0x00, 0x08, 0x45, 0x45, 0x45, 0x25, 0x18, 0x00 }, /* 0x48 う */ + { 0x00, 0x48, 0x2a, 0x3a, 0x4a, 0x40, 0x00, 0x00 }, /* 0x49 ぇ */ + { 0x00, 0x44, 0x25, 0x15, 0x3d, 0x45, 0x40, 0x00 }, /* 0x4A え */ + { 0x00, 0x24, 0x7e, 0x14, 0x50, 0x24, 0x00, 0x00 }, /* 0x4B ぉ */ + { 0x22, 0x52, 0x7f, 0x0a, 0x48, 0x4a, 0x34, 0x00 }, /* 0x4C お */ + { 0x44, 0x34, 0x4f, 0x44, 0x38, 0x04, 0x18, 0x00 }, /* 0x4D か */ + { 0x44, 0x34, 0x4f, 0x44, 0x39, 0x04, 0x19, 0x00 }, /* 0x4E が */ + { 0x00, 0x2a, 0x5a, 0x4b, 0x4e, 0x5a, 0x08, 0x00 }, /* 0x4F き */ + { 0x00, 0x2a, 0x5a, 0x4b, 0x4e, 0x5b, 0x08, 0x00 }, /* 0x50 ぎ */ + { 0x00, 0x08, 0x14, 0x14, 0x22, 0x41, 0x00, 0x00 }, /* 0x51 く */ + { 0x00, 0x08, 0x14, 0x14, 0x22, 0x45, 0x04, 0x00 }, /* 0x52 ぐ */ + { 0x3f, 0x00, 0x04, 0x44, 0x3f, 0x04, 0x04, 0x00 }, /* 0x53 け */ + { 0x3f, 0x00, 0x04, 0x44, 0x3f, 0x04, 0x05, 0x00 }, /* 0x54 げ */ + { 0x00, 0x20, 0x52, 0x42, 0x42, 0x42, 0x40, 0x00 }, /* 0x55 こ */ + { 0x00, 0x20, 0x52, 0x42, 0x43, 0x42, 0x41, 0x00 }, /* 0x56 ご */ + { 0x00, 0x24, 0x54, 0x44, 0x47, 0x5c, 0x04, 0x00 }, /* 0x57 さ */ + { 0x00, 0x24, 0x54, 0x44, 0x47, 0x5c, 0x05, 0x00 }, /* 0x58 ざ */ + { 0x00, 0x00, 0x3f, 0x40, 0x40, 0x40, 0x20, 0x00 }, /* 0x59 し */ + { 0x00, 0x00, 0x3f, 0x40, 0x41, 0x40, 0x21, 0x00 }, /* 0x5A じ */ + { 0x02, 0x02, 0x0a, 0x56, 0x3f, 0x02, 0x02, 0x00 }, /* 0x5B す */ + { 0x02, 0x02, 0x0a, 0x56, 0x3f, 0x02, 0x03, 0x00 }, /* 0x5C ず */ + { 0x04, 0x04, 0x3f, 0x44, 0x54, 0x5f, 0x44, 0x00 }, /* 0x5D せ */ + { 0x04, 0x04, 0x3f, 0x44, 0x54, 0x5f, 0x45, 0x00 }, /* 0x5E ぜ */ + { 0x00, 0x08, 0x09, 0x3d, 0x4b, 0x49, 0x08, 0x00 }, /* 0x5F そ */ + { 0x00, 0x08, 0x09, 0x3d, 0x4b, 0x49, 0x0a, 0x00 }, /* 0x60 ぞ */ + { 0x42, 0x3a, 0x07, 0x22, 0x54, 0x44, 0x44, 0x00 }, /* 0x61 た */ + { 0x42, 0x3a, 0x07, 0x22, 0x55, 0x44, 0x45, 0x00 }, /* 0x62 だ */ + { 0x00, 0x02, 0x12, 0x4e, 0x4b, 0x4a, 0x32, 0x00 }, /* 0x63 ち */ + { 0x00, 0x02, 0x12, 0x4e, 0x4b, 0x4a, 0x33, 0x00 }, /* 0x64 ぢ */ + { 0x00, 0x10, 0x10, 0x48, 0x48, 0x30, 0x00, 0x00 }, /* 0x65 っ */ + { 0x04, 0x04, 0x02, 0x22, 0x22, 0x22, 0x1c, 0x00 }, /* 0x66 つ */ + { 0x04, 0x04, 0x02, 0x22, 0x23, 0x22, 0x1d, 0x00 }, /* 0x67 づ */ + { 0x00, 0x02, 0x02, 0x1a, 0x25, 0x43, 0x41, 0x00 }, /* 0x68 て */ + { 0x00, 0x02, 0x02, 0x1a, 0x25, 0x43, 0x45, 0x00 }, /* 0x69 で */ + { 0x00, 0x20, 0x57, 0x48, 0x48, 0x44, 0x44, 0x00 }, /* 0x6A と */ + { 0x00, 0x20, 0x57, 0x48, 0x49, 0x44, 0x45, 0x00 }, /* 0x6B ど */ + { 0x12, 0x0a, 0x27, 0x52, 0x50, 0x3a, 0x24, 0x00 }, /* 0x6C な */ + { 0x7f, 0x00, 0x20, 0x52, 0x42, 0x42, 0x40, 0x00 }, /* 0x6D に */ + { 0x30, 0x4e, 0x38, 0x54, 0x0f, 0x64, 0x78, 0x00 }, /* 0x6E ぬ */ + { 0x24, 0x14, 0x7f, 0x04, 0x22, 0x52, 0x3c, 0x00 }, /* 0x6F ね */ + { 0x18, 0x24, 0x12, 0x4e, 0x42, 0x24, 0x18, 0x00 }, /* 0x70 の */ + { 0x7f, 0x00, 0x24, 0x54, 0x54, 0x3f, 0x44, 0x00 }, /* 0x71 は */ + { 0x7f, 0x00, 0x24, 0x54, 0x54, 0x3f, 0x45, 0x00 }, /* 0x72 ば */ + { 0x7f, 0x00, 0x24, 0x54, 0x56, 0x3d, 0x46, 0x00 }, /* 0x73 ぱ */ + { 0x02, 0x3a, 0x47, 0x40, 0x41, 0x3e, 0x04, 0x00 }, /* 0x74 ひ */ + { 0x02, 0x3a, 0x47, 0x40, 0x41, 0x3e, 0x05, 0x00 }, /* 0x75 び */ + { 0x02, 0x3a, 0x47, 0x40, 0x43, 0x3d, 0x06, 0x00 }, /* 0x76 ぴ */ + { 0x40, 0x30, 0x40, 0x4d, 0x32, 0x10, 0x60, 0x00 }, /* 0x77 ふ */ + { 0x40, 0x30, 0x40, 0x4d, 0x32, 0x11, 0x61, 0x00 }, /* 0x78 ぶ */ + { 0x40, 0x30, 0x40, 0x4d, 0x32, 0x15, 0x62, 0x00 }, /* 0x79 ぷ */ + { 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x00 }, /* 0x7A へ */ + { 0x08, 0x04, 0x02, 0x04, 0x09, 0x10, 0x11, 0x00 }, /* 0x7B べ */ + { 0x08, 0x04, 0x02, 0x04, 0x0a, 0x15, 0x12, 0x00 }, /* 0x7C ぺ */ + { 0x7f, 0x00, 0x6a, 0x6a, 0x7e, 0x2a, 0x4a, 0x00 }, /* 0x7D ほ */ + { 0x7f, 0x00, 0x6a, 0x6a, 0x7f, 0x2a, 0x4b, 0x00 }, /* 0x7E ぼ */ + { 0x7f, 0x00, 0x6a, 0x6a, 0x7e, 0x2d, 0x4a, 0x00 }, /* 0x7F ぽ */ + { 0x00, 0x6a, 0x6a, 0x6a, 0x7f, 0x2a, 0x4a, 0x00 }, /* 0x80 ま */ + { 0x30, 0x29, 0x1d, 0x4b, 0x48, 0x3c, 0x10, 0x00 }, /* 0x81 み */ + { 0x12, 0x2a, 0x7f, 0x42, 0x40, 0x42, 0x24, 0x00 }, /* 0x82 む */ + { 0x30, 0x4e, 0x38, 0x54, 0x0f, 0x44, 0x38, 0x00 }, /* 0x83 め */ + { 0x00, 0x0a, 0x3e, 0x4b, 0x4a, 0x4a, 0x30, 0x00 }, /* 0x84 も */ + { 0x00, 0x08, 0x0e, 0x38, 0x46, 0x14, 0x08, 0x00 }, /* 0x85 ゃ */ + { 0x04, 0x07, 0x1c, 0x62, 0x03, 0x0a, 0x04, 0x00 }, /* 0x86 や */ + { 0x00, 0x1c, 0x48, 0x3e, 0x24, 0x18, 0x00, 0x00 }, /* 0x87 ゅ */ + { 0x1e, 0x04, 0x52, 0x3f, 0x12, 0x12, 0x0c, 0x00 }, /* 0x88 ゆ */ + { 0x00, 0x20, 0x50, 0x50, 0x3e, 0x48, 0x00, 0x00 }, /* 0x89 ょ */ + { 0x00, 0x20, 0x50, 0x50, 0x3f, 0x24, 0x44, 0x00 }, /* 0x8A よ */ + { 0x00, 0x1c, 0x51, 0x49, 0x4a, 0x48, 0x30, 0x00 }, /* 0x8B ら */ + { 0x00, 0x0f, 0x42, 0x41, 0x21, 0x1e, 0x00, 0x00 }, /* 0x8C り */ + { 0x00, 0x10, 0x69, 0x6d, 0x4b, 0x49, 0x30, 0x00 }, /* 0x8D る */ + { 0x24, 0x14, 0x7f, 0x04, 0x02, 0x3e, 0x40, 0x00 }, /* 0x8E れ */ + { 0x00, 0x10, 0x49, 0x4d, 0x4b, 0x49, 0x30, 0x00 }, /* 0x8F ろ */ + { 0x00, 0x28, 0x18, 0x7e, 0x08, 0x44, 0x38, 0x00 }, /* 0x90 ゎ */ + { 0x24, 0x14, 0x7f, 0x04, 0x42, 0x42, 0x3c, 0x00 }, /* 0x91 わ */ + { 0x30, 0x49, 0x25, 0x1f, 0x24, 0x54, 0x38, 0x00 }, /* 0x92 ゐ */ + { 0x40, 0x28, 0x25, 0x57, 0x35, 0x28, 0x40, 0x00 }, /* 0x93 ゑ */ + { 0x10, 0x0a, 0x2e, 0x5b, 0x72, 0x4a, 0x48, 0x00 }, /* 0x94 を */ + { 0x40, 0x30, 0x0c, 0x33, 0x40, 0x40, 0x20, 0x00 }, /* 0x95 ん */ + { 0x00, 0x04, 0x44, 0x3c, 0x14, 0x0c, 0x00, 0x00 }, /* 0x96 ァ */ + { 0x00, 0x01, 0x41, 0x3d, 0x09, 0x05, 0x03, 0x00 }, /* 0x97 ア */ + { 0x00, 0x20, 0x20, 0x10, 0x78, 0x04, 0x00, 0x00 }, /* 0x98 ィ */ + { 0x00, 0x10, 0x10, 0x08, 0x7c, 0x02, 0x01, 0x00 }, /* 0x99 イ */ + { 0x00, 0x18, 0x48, 0x4c, 0x28, 0x18, 0x00, 0x00 }, /* 0x9A ゥ */ + { 0x00, 0x06, 0x42, 0x43, 0x22, 0x12, 0x0e, 0x00 }, /* 0x9B ウ */ + { 0x00, 0x40, 0x48, 0x78, 0x48, 0x40, 0x00, 0x00 }, /* 0x9C ェ */ + { 0x20, 0x22, 0x22, 0x3e, 0x22, 0x22, 0x20, 0x00 }, /* 0x9D エ */ + { 0x00, 0x28, 0x28, 0x58, 0x7c, 0x08, 0x00, 0x00 }, /* 0x9E ォ */ + { 0x22, 0x22, 0x12, 0x4a, 0x7f, 0x02, 0x02, 0x00 }, /* 0x9F オ */ + { 0x00, 0x42, 0x22, 0x1f, 0x02, 0x42, 0x7e, 0x00 }, /* 0xA0 カ */ + { 0x00, 0x42, 0x22, 0x1f, 0x02, 0x42, 0x7f, 0x00 }, /* 0xA1 ガ */ + { 0x00, 0x12, 0x12, 0x1f, 0x72, 0x12, 0x10, 0x00 }, /* 0xA2 キ */ + { 0x00, 0x12, 0x12, 0x1f, 0x72, 0x13, 0x10, 0x00 }, /* 0xA3 ギ */ + { 0x00, 0x08, 0x44, 0x43, 0x22, 0x12, 0x0e, 0x00 }, /* 0xA4 ク */ + { 0x00, 0x08, 0x44, 0x43, 0x22, 0x12, 0x0f, 0x00 }, /* 0xA5 グ */ + { 0x08, 0x07, 0x42, 0x22, 0x1e, 0x02, 0x02, 0x00 }, /* 0xA6 ケ */ + { 0x08, 0x07, 0x42, 0x22, 0x1f, 0x02, 0x03, 0x00 }, /* 0xA7 ゲ */ + { 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x00 }, /* 0xA8 コ */ + { 0x00, 0x42, 0x42, 0x42, 0x43, 0x42, 0x7f, 0x00 }, /* 0xA9 ゴ */ + { 0x02, 0x02, 0x4f, 0x42, 0x22, 0x1f, 0x02, 0x00 }, /* 0xAA サ */ + { 0x02, 0x02, 0x4f, 0x42, 0x23, 0x1e, 0x03, 0x00 }, /* 0xAB ザ */ + { 0x00, 0x45, 0x4a, 0x40, 0x20, 0x10, 0x0c, 0x00 }, /* 0xAC シ */ + { 0x00, 0x45, 0x4a, 0x40, 0x21, 0x10, 0x0d, 0x00 }, /* 0xAD ジ */ + { 0x40, 0x42, 0x22, 0x22, 0x1a, 0x26, 0x40, 0x00 }, /* 0xAE ス */ + { 0x40, 0x42, 0x22, 0x22, 0x1b, 0x26, 0x41, 0x00 }, /* 0xAF ズ */ + { 0x04, 0x04, 0x3f, 0x44, 0x44, 0x54, 0x4c, 0x00 }, /* 0xB0 セ */ + { 0x04, 0x04, 0x3f, 0x44, 0x45, 0x54, 0x4d, 0x00 }, /* 0xB1 ゼ */ + { 0x00, 0x01, 0x46, 0x40, 0x20, 0x10, 0x0f, 0x00 }, /* 0xB2 ソ */ + { 0x00, 0x01, 0x46, 0x40, 0x20, 0x11, 0x0f, 0x00 }, /* 0xB3 ゾ */ + { 0x00, 0x08, 0x44, 0x4b, 0x2a, 0x12, 0x0e, 0x00 }, /* 0xB4 タ */ + { 0x00, 0x08, 0x44, 0x4b, 0x2a, 0x12, 0x0f, 0x00 }, /* 0xB5 ダ */ + { 0x08, 0x0a, 0x4a, 0x3e, 0x09, 0x09, 0x08, 0x00 }, /* 0xB6 チ */ + { 0x08, 0x0a, 0x4a, 0x3e, 0x09, 0x08, 0x09, 0x00 }, /* 0xB7 ヂ */ + { 0x00, 0x18, 0x40, 0x58, 0x20, 0x18, 0x00, 0x00 }, /* 0xB8 ッ */ + { 0x02, 0x0c, 0x42, 0x4c, 0x20, 0x10, 0x0e, 0x00 }, /* 0xB9 ツ */ + { 0x02, 0x0c, 0x42, 0x4c, 0x21, 0x10, 0x0d, 0x00 }, /* 0xBA ヅ */ + { 0x04, 0x05, 0x45, 0x3d, 0x05, 0x05, 0x04, 0x00 }, /* 0xBB テ */ + { 0x04, 0x05, 0x45, 0x3d, 0x05, 0x04, 0x05, 0x00 }, /* 0xBC デ */ + { 0x00, 0x00, 0x7f, 0x08, 0x08, 0x10, 0x00, 0x00 }, /* 0xBD ト */ + { 0x00, 0x00, 0x7f, 0x08, 0x09, 0x10, 0x01, 0x00 }, /* 0xBE ド */ + { 0x04, 0x44, 0x24, 0x1f, 0x04, 0x04, 0x04, 0x00 }, /* 0xBF ナ */ + { 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00 }, /* 0xC0 ニ */ + { 0x40, 0x41, 0x25, 0x15, 0x19, 0x27, 0x00, 0x00 }, /* 0xC1 ヌ */ + { 0x20, 0x22, 0x12, 0x7b, 0x06, 0x12, 0x20, 0x00 }, /* 0xC2 ネ */ + { 0x40, 0x40, 0x20, 0x10, 0x08, 0x07, 0x00, 0x00 }, /* 0xC3 ノ */ + { 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0c, 0x70, 0x00 }, /* 0xC4 ハ */ + { 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0d, 0x71, 0x00 }, /* 0xC5 バ */ + { 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0d, 0x72, 0x00 }, /* 0xC6 パ */ + { 0x00, 0x3f, 0x48, 0x48, 0x48, 0x44, 0x44, 0x00 }, /* 0xC7 ヒ */ + { 0x00, 0x3f, 0x48, 0x48, 0x49, 0x44, 0x45, 0x00 }, /* 0xC8 ビ */ + { 0x00, 0x3f, 0x48, 0x48, 0x4a, 0x45, 0x46, 0x00 }, /* 0xC9 ピ */ + { 0x00, 0x02, 0x42, 0x42, 0x22, 0x12, 0x0e, 0x00 }, /* 0xCA フ */ + { 0x00, 0x02, 0x42, 0x42, 0x23, 0x12, 0x0f, 0x00 }, /* 0xCB ブ */ + { 0x00, 0x02, 0x42, 0x42, 0x22, 0x15, 0x0e, 0x00 }, /* 0xCC プ */ + { 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00 }, /* 0xCD ヘ */ + { 0x08, 0x04, 0x02, 0x04, 0x09, 0x10, 0x21, 0x00 }, /* 0xCE ベ */ + { 0x08, 0x04, 0x02, 0x04, 0x0a, 0x15, 0x22, 0x00 }, /* 0xCF ペ */ + { 0x24, 0x14, 0x44, 0x7f, 0x04, 0x14, 0x24, 0x00 }, /* 0xD0 ホ */ + { 0x24, 0x14, 0x44, 0x7f, 0x05, 0x14, 0x25, 0x00 }, /* 0xD1 ボ */ + { 0x24, 0x14, 0x44, 0x7f, 0x06, 0x15, 0x22, 0x00 }, /* 0xD2 ポ */ + { 0x02, 0x02, 0x12, 0x22, 0x52, 0x0a, 0x06, 0x00 }, /* 0xD3 マ */ + { 0x00, 0x21, 0x25, 0x29, 0x4a, 0x42, 0x00, 0x00 }, /* 0xD4 ミ */ + { 0x40, 0x70, 0x4c, 0x43, 0x50, 0x20, 0x40, 0x00 }, /* 0xD5 ム */ + { 0x40, 0x44, 0x24, 0x14, 0x08, 0x37, 0x00, 0x00 }, /* 0xD6 メ */ + { 0x00, 0x08, 0x09, 0x3f, 0x49, 0x49, 0x48, 0x00 }, /* 0xD7 モ */ + { 0x00, 0x10, 0x1c, 0x68, 0x08, 0x18, 0x00, 0x00 }, /* 0xD8 ャ */ + { 0x04, 0x04, 0x0f, 0x74, 0x02, 0x0a, 0x06, 0x00 }, /* 0xD9 ヤ */ + { 0x00, 0x40, 0x48, 0x48, 0x78, 0x40, 0x00, 0x00 }, /* 0xDA ュ */ + { 0x20, 0x22, 0x22, 0x22, 0x3e, 0x20, 0x20, 0x00 }, /* 0xDB ユ */ + { 0x00, 0x00, 0x44, 0x54, 0x54, 0x7c, 0x00, 0x00 }, /* 0xDC ョ */ + { 0x00, 0x42, 0x4a, 0x4a, 0x4a, 0x4a, 0x7e, 0x00 }, /* 0xDD ヨ */ + { 0x00, 0x04, 0x45, 0x45, 0x25, 0x15, 0x0c, 0x00 }, /* 0xDE ラ */ + { 0x00, 0x0f, 0x40, 0x40, 0x20, 0x1f, 0x00, 0x00 }, /* 0xDF リ */ + { 0x40, 0x20, 0x1e, 0x00, 0x7f, 0x20, 0x10, 0x00 }, /* 0xE0 ル */ + { 0x00, 0x00, 0x7f, 0x40, 0x20, 0x10, 0x08, 0x00 }, /* 0xE1 レ */ + { 0x00, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x00 }, /* 0xE2 ロ */ + { 0x00, 0x0c, 0x44, 0x44, 0x24, 0x1c, 0x00, 0x00 }, /* 0xE3 ヮ */ + { 0x00, 0x06, 0x42, 0x42, 0x22, 0x12, 0x0e, 0x00 }, /* 0xE4 ワ */ + { 0x10, 0x12, 0x1e, 0x12, 0x12, 0x7f, 0x12, 0x00 }, /* 0xE5 ヰ */ + { 0x20, 0x22, 0x22, 0x3a, 0x26, 0x22, 0x20, 0x00 }, /* 0xE6 ヱ */ + { 0x00, 0x01, 0x45, 0x45, 0x25, 0x15, 0x0f, 0x00 }, /* 0xE7 ヲ */ + { 0x00, 0x41, 0x42, 0x40, 0x20, 0x10, 0x0c, 0x00 }, /* 0xE8 ン */ + { 0x00, 0x06, 0x42, 0x43, 0x22, 0x12, 0x0f, 0x00 }, /* 0xE9 ヴ */ + { 0x00, 0x48, 0x28, 0x1c, 0x48, 0x78, 0x00, 0x00 }, /* 0xEA ヵ */ + { 0x00, 0x10, 0x0c, 0x48, 0x38, 0x08, 0x00, 0x00 }, /* 0xEB ヶ */ + { 0x08, 0x04, 0x04, 0x08, 0x10, 0x10, 0x08, 0x00 }, /* 0xEC 〜 */ + { 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00 }, /* 0xED … */ + { 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0xEE ー */ + { 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08 }, /* 0xEF ― */ +}; + +#define MISAKI_FONT_F1_H +PROGMEM const uint8_t misaki_font_f1[ MISAKI_FONT_F1_SIZE + 1 ][ MISAKI_FONT_F1_W ] = +{ + { 0x00, 0x00, 0x00 }, /* 0x00 */ + { 0x00, 0x2f, 0x00 }, /* 0x01 ! */ + { 0x03, 0x00, 0x03 }, /* 0x02 " */ + { 0x3f, 0x12, 0x3f }, /* 0x03 # */ + { 0x16, 0x3f, 0x1a }, /* 0x04 $ */ + { 0x12, 0x08, 0x24 }, /* 0x05 % */ + { 0x32, 0x3d, 0x2a }, /* 0x06 & */ + { 0x02, 0x01, 0x00 }, /* 0x07 ' */ + { 0x00, 0x3e, 0x41 }, /* 0x08 ( */ + { 0x41, 0x3e, 0x00 }, /* 0x09 ) */ + { 0x0a, 0x07, 0x0a }, /* 0x0A * */ + { 0x08, 0x3e, 0x08 }, /* 0x0B + */ + { 0x40, 0x20, 0x00 }, /* 0x0C , */ + { 0x08, 0x08, 0x08 }, /* 0x0D - */ + { 0x00, 0x20, 0x00 }, /* 0x0E . */ + { 0x10, 0x08, 0x04 }, /* 0x0F / */ + { 0x1c, 0x2a, 0x1c }, /* 0x10 0 */ + { 0x24, 0x3e, 0x20 }, /* 0x11 1 */ + { 0x32, 0x2a, 0x24 }, /* 0x12 2 */ + { 0x22, 0x2a, 0x14 }, /* 0x13 3 */ + { 0x18, 0x14, 0x3e }, /* 0x14 4 */ + { 0x2e, 0x2a, 0x12 }, /* 0x15 5 */ + { 0x1c, 0x2a, 0x12 }, /* 0x16 6 */ + { 0x02, 0x3a, 0x06 }, /* 0x17 7 */ + { 0x14, 0x2a, 0x14 }, /* 0x18 8 */ + { 0x24, 0x2a, 0x1c }, /* 0x19 9 */ + { 0x00, 0x24, 0x00 }, /* 0x1A : */ + { 0x40, 0x24, 0x00 }, /* 0x1B ; */ + { 0x08, 0x14, 0x22 }, /* 0x1C < */ + { 0x14, 0x14, 0x14 }, /* 0x1D = */ + { 0x22, 0x14, 0x08 }, /* 0x1E > */ + { 0x02, 0x29, 0x06 }, /* 0x1F ? */ + { 0x12, 0x29, 0x1e }, /* 0x20 @ */ + { 0x3e, 0x09, 0x3e }, /* 0x21 A */ + { 0x3f, 0x25, 0x1a }, /* 0x22 B */ + { 0x1e, 0x21, 0x21 }, /* 0x23 C */ + { 0x3f, 0x21, 0x1e }, /* 0x24 D */ + { 0x3f, 0x25, 0x21 }, /* 0x25 E */ + { 0x3f, 0x05, 0x01 }, /* 0x26 F */ + { 0x1e, 0x21, 0x39 }, /* 0x27 G */ + { 0x3f, 0x08, 0x3f }, /* 0x28 H */ + { 0x21, 0x3f, 0x21 }, /* 0x29 I */ + { 0x10, 0x20, 0x1f }, /* 0x2A J */ + { 0x3f, 0x04, 0x3b }, /* 0x2B K */ + { 0x3f, 0x20, 0x20 }, /* 0x2C L */ + { 0x3f, 0x06, 0x3f }, /* 0x2D M */ + { 0x3f, 0x01, 0x3e }, /* 0x2E N */ + { 0x1e, 0x21, 0x1e }, /* 0x2F O */ + { 0x3f, 0x09, 0x06 }, /* 0x30 P */ + { 0x1e, 0x21, 0x5e }, /* 0x31 Q */ + { 0x3f, 0x09, 0x36 }, /* 0x32 R */ + { 0x22, 0x25, 0x19 }, /* 0x33 S */ + { 0x01, 0x3f, 0x01 }, /* 0x34 T */ + { 0x3f, 0x20, 0x3f }, /* 0x35 U */ + { 0x3f, 0x10, 0x0f }, /* 0x36 V */ + { 0x3f, 0x18, 0x3f }, /* 0x37 W */ + { 0x33, 0x0c, 0x33 }, /* 0x38 X */ + { 0x03, 0x3c, 0x03 }, /* 0x39 Y */ + { 0x31, 0x2d, 0x23 }, /* 0x3A Z */ + { 0x00, 0x7f, 0x41 }, /* 0x3B [ */ + { 0x15, 0x3e, 0x15 }, /* 0x3C \ */ + { 0x41, 0x7f, 0x00 }, /* 0x3D ] */ + { 0x02, 0x01, 0x02 }, /* 0x3E ^ */ + { 0x40, 0x40, 0x40 }, /* 0x3F _ */ + { 0x00, 0x01, 0x02 }, /* 0x40 ` */ + { 0x18, 0x24, 0x3c }, /* 0x41 a */ + { 0x3f, 0x24, 0x18 }, /* 0x42 b */ + { 0x18, 0x24, 0x24 }, /* 0x43 c */ + { 0x18, 0x24, 0x3f }, /* 0x44 d */ + { 0x18, 0x2c, 0x2c }, /* 0x45 e */ + { 0x04, 0x3f, 0x05 }, /* 0x46 f */ + { 0x48, 0x54, 0x3c }, /* 0x47 g */ + { 0x3f, 0x04, 0x38 }, /* 0x48 h */ + { 0x00, 0x3d, 0x00 }, /* 0x49 i */ + { 0x40, 0x3d, 0x00 }, /* 0x4A j */ + { 0x3f, 0x08, 0x34 }, /* 0x4B k */ + { 0x01, 0x3f, 0x00 }, /* 0x4C l */ + { 0x3c, 0x1c, 0x38 }, /* 0x4D m */ + { 0x3c, 0x04, 0x38 }, /* 0x4E n */ + { 0x18, 0x24, 0x18 }, /* 0x4F o */ + { 0x7c, 0x24, 0x18 }, /* 0x50 p */ + { 0x18, 0x24, 0x7c }, /* 0x51 q */ + { 0x3c, 0x08, 0x04 }, /* 0x52 r */ + { 0x28, 0x3c, 0x14 }, /* 0x53 s */ + { 0x04, 0x3e, 0x24 }, /* 0x54 t */ + { 0x3c, 0x20, 0x3c }, /* 0x55 u */ + { 0x3c, 0x10, 0x0c }, /* 0x56 v */ + { 0x3c, 0x30, 0x3c }, /* 0x57 w */ + { 0x24, 0x18, 0x24 }, /* 0x58 x */ + { 0x4c, 0x50, 0x3c }, /* 0x59 y */ + { 0x24, 0x34, 0x2c }, /* 0x5A z */ + { 0x08, 0x36, 0x41 }, /* 0x5B { */ + { 0x00, 0x7f, 0x00 }, /* 0x5C | */ + { 0x41, 0x36, 0x08 }, /* 0x5D } */ + { 0x01, 0x01, 0x01 }, /* 0x5E ~ */ + { 0x10, 0x28, 0x10 }, /* 0x5F 。 */ + { 0x1f, 0x01, 0x01 }, /* 0x60 「 */ + { 0x20, 0x20, 0x3e }, /* 0x61 」 */ + { 0x10, 0x20, 0x00 }, /* 0x62 、 */ + { 0x00, 0x08, 0x00 }, /* 0x63 ・ */ + { 0x25, 0x15, 0x0f }, /* 0x64 ヲ */ + { 0x24, 0x1c, 0x0c }, /* 0x65 ァ */ + { 0x10, 0x38, 0x04 }, /* 0x66 ィ */ + { 0x18, 0x0c, 0x38 }, /* 0x67 ゥ */ + { 0x28, 0x38, 0x28 }, /* 0x68 ェ */ + { 0x28, 0x18, 0x3c }, /* 0x69 ォ */ + { 0x08, 0x3c, 0x18 }, /* 0x6A ャ */ + { 0x28, 0x38, 0x20 }, /* 0x6B ュ */ + { 0x24, 0x2c, 0x3c }, /* 0x6C ョ */ + { 0x2c, 0x2c, 0x1c }, /* 0x6D ッ */ + { 0x04, 0x08, 0x08 }, /* 0x6E ー */ + { 0x21, 0x1d, 0x07 }, /* 0x6F ア */ + { 0x08, 0x3c, 0x03 }, /* 0x70 イ */ + { 0x06, 0x23, 0x1e }, /* 0x71 ウ */ + { 0x22, 0x3e, 0x22 }, /* 0x72 エ */ + { 0x12, 0x0a, 0x3f }, /* 0x73 オ */ + { 0x32, 0x0f, 0x3e }, /* 0x74 カ */ + { 0x0a, 0x3f, 0x0a }, /* 0x75 キ */ + { 0x24, 0x13, 0x0e }, /* 0x76 ク */ + { 0x27, 0x1e, 0x02 }, /* 0x77 ケ */ + { 0x22, 0x22, 0x3e }, /* 0x78 コ */ + { 0x27, 0x12, 0x0f }, /* 0x79 サ */ + { 0x25, 0x25, 0x10 }, /* 0x7A シ */ + { 0x21, 0x19, 0x27 }, /* 0x7B ス */ + { 0x3f, 0x22, 0x2e }, /* 0x7C セ */ + { 0x21, 0x16, 0x0f }, /* 0x7D ソ */ + { 0x24, 0x1b, 0x0e }, /* 0x7E タ */ + { 0x25, 0x1f, 0x05 }, /* 0x7F チ */ + { 0x26, 0x26, 0x1e }, /* 0x80 ツ */ + { 0x25, 0x1d, 0x05 }, /* 0x81 テ */ + { 0x3f, 0x04, 0x08 }, /* 0x82 ト */ + { 0x24, 0x1f, 0x04 }, /* 0x83 ナ */ + { 0x20, 0x22, 0x22 }, /* 0x84 ニ */ + { 0x25, 0x19, 0x27 }, /* 0x85 ヌ */ + { 0x12, 0x3b, 0x16 }, /* 0x86 ネ */ + { 0x20, 0x10, 0x0f }, /* 0x87 ノ */ + { 0x3c, 0x01, 0x3e }, /* 0x88 ハ */ + { 0x1f, 0x24, 0x24 }, /* 0x89 ヒ */ + { 0x21, 0x11, 0x0f }, /* 0x8A フ */ + { 0x0c, 0x03, 0x1c }, /* 0x8B ヘ */ + { 0x1a, 0x3f, 0x1a }, /* 0x8C ホ */ + { 0x09, 0x19, 0x27 }, /* 0x8D マ */ + { 0x22, 0x2a, 0x2a }, /* 0x8E ミ */ + { 0x38, 0x27, 0x30 }, /* 0x8F ム */ + { 0x32, 0x0c, 0x13 }, /* 0x90 メ */ + { 0x05, 0x3f, 0x25 }, /* 0x91 モ */ + { 0x02, 0x3f, 0x0e }, /* 0x92 ヤ */ + { 0x21, 0x3f, 0x20 }, /* 0x93 ユ */ + { 0x25, 0x25, 0x3f }, /* 0x94 ヨ */ + { 0x25, 0x25, 0x1d }, /* 0x95 ラ */ + { 0x07, 0x20, 0x1f }, /* 0x96 リ */ + { 0x3c, 0x3f, 0x20 }, /* 0x97 ル */ + { 0x3f, 0x20, 0x10 }, /* 0x98 レ */ + { 0x3e, 0x22, 0x3e }, /* 0x99 ロ */ + { 0x23, 0x11, 0x0f }, /* 0x9A ワ */ + { 0x21, 0x21, 0x18 }, /* 0x9B ン */ + { 0x01, 0x00, 0x01 }, /* 0x9C ゙ */ + { 0x02, 0x05, 0x02 }, /* 0x9D ゚ */ +}; +#define MISAKI_FONT_F2_H +PROGMEM const uint8_t misaki_font_f2[ MISAKI_FONT_F2_SIZE + 1 ][ MISAKI_FONT_F2_W ] = +{ + { 0x75, 0x40, 0x77, 0x55, 0x75, 0x77, 0x40 }, /* 0x00 温 */ + { 0x40, 0x3e, 0x4a, 0x5e, 0x2b, 0x5e, 0x4a }, /* 0x01 度 */ + { 0x6b, 0x62, 0x7f, 0x35, 0x2f, 0x35, 0x7f }, /* 0x02 調 */ + { 0x7c, 0x5b, 0x5e, 0x24, 0x7b, 0x0e, 0x3a }, /* 0x03 節 */ + { 0x04, 0x7e, 0x01, 0x7e, 0x4a, 0x5e, 0x69 }, /* 0x04 低 */ + { 0x06, 0x3a, 0x2f, 0x3f, 0x6b, 0x7e, 0x46 }, /* 0x05 電 */ + { 0x40, 0x3f, 0x41, 0x49, 0x7f, 0x49, 0x41 }, /* 0x06 圧 */ + { 0x02, 0x62, 0x6b, 0x6b, 0x6b, 0x62, 0x02 }, /* 0x07 言 */ + { 0x6a, 0x6b, 0x14, 0x7d, 0x57, 0x7d, 0x10 }, /* 0x08 語 */ + { 0x41, 0x3f, 0x55, 0x55, 0x3d, 0x57, 0x51 }, /* 0x09 戻 */ + { 0x21, 0x3f, 0x2d, 0x7f, 0x2a, 0x12, 0x2e }, /* 0x0A 取 */ + { 0x0a, 0x77, 0x5a, 0x50, 0x5a, 0x77, 0x0a }, /* 0x0B 替 */ + { 0x20, 0x24, 0x13, 0x7d, 0x55, 0x53, 0x70 }, /* 0x0C 名 */ + { 0x7a, 0x2a, 0x7b, 0x02, 0x1a, 0x43, 0x7a }, /* 0x0D 前 */ + { 0x4a, 0x52, 0x5e, 0x2b, 0x5e, 0x42, 0x4a }, /* 0x0E 変 */ + { 0x41, 0x5f, 0x35, 0x3f, 0x55, 0x5f, 0x41 }, /* 0x0F 更 */ + { 0x7d, 0x14, 0x57, 0x7d, 0x0e, 0x40, 0x7f }, /* 0x10 削 */ + { 0x7f, 0x1b, 0x54, 0x16, 0x7d, 0x16, 0x54 }, /* 0x11 除 */ + { 0x49, 0x3a, 0x40, 0x7e, 0x57, 0x56, 0x76 }, /* 0x12 追 */ + { 0x42, 0x3f, 0x42, 0x7e, 0x7e, 0x42, 0x7e }, /* 0x13 加 */ + { 0x04, 0x7e, 0x51, 0x37, 0x7d, 0x37, 0x50 }, /* 0x14 保 */ + { 0x12, 0x7a, 0x17, 0x52, 0x76, 0x1e, 0x12 }, /* 0x15 存 */ + { 0x7f, 0x55, 0x7f, 0x14, 0x5d, 0x7f, 0x55 }, /* 0x16 睡 */ + { 0x7f, 0x55, 0x7f, 0x7f, 0x55, 0x3d, 0x57 }, /* 0x17 眠 */ + { 0x7f, 0x55, 0x37, 0x78, 0x17, 0x45, 0x7f }, /* 0x18 閉 */ + { 0x7f, 0x2b, 0x7b, 0x28, 0x7b, 0x2b, 0x7f }, /* 0x19 開 */ + { 0x1e, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x1e }, /* 0x1A 中 */ + { 0x7f, 0x41, 0x6b, 0x7f, 0x6b, 0x51, 0x7f }, /* 0x1B 国 */ + { 0x52, 0x5a, 0x57, 0x3a, 0x57, 0x5a, 0x52 }, /* 0x1C 英 */ + { 0x00, 0x7f, 0x49, 0x49, 0x49, 0x49, 0x7f }, /* 0x1D 日 */ + { 0x22, 0x12, 0x2a, 0x7f, 0x2a, 0x12, 0x22 }, /* 0x1E 本 */ + { 0x16, 0x6a, 0x5e, 0x73, 0x56, 0x62, 0x16 }, /* 0x1F 密 */ + { 0x09, 0x37, 0x31, 0x5f, 0x15, 0x5f, 0x75 }, /* 0x20 碼 */ + { 0x42, 0x22, 0x1e, 0x0b, 0x4a, 0x7a, 0x02 }, /* 0x21 方 */ + { 0x7e, 0x02, 0x3a, 0x2b, 0x3a, 0x42, 0x7e }, /* 0x22 向 */ +}; +/* + プリセット + 温度調節 + タイマー + コントロール + スクリーン + ブザー + 低電圧アラーム + 言語 + 戻る + 取り替える + キャリブレーション + 名前を変更 + 削除 + 追加 + 保存 + デフォルト + 睡眠 + ブースト + 保存 + 睡眠 + 閉じる + ブースト + 保存 + ダイレクト + PID + ビッグ + ニュース + 閉じる + 開く + いいえ、 + はい、 + 中国語 + 英語 + いいえ、 + はい、 + メインスクリーン + フリップ + 保存 + アバウト + 日本語 + つまみ方向 + + 汉字转换表:温度調節低電圧言語戻取替名前変更削除追加保存睡眠閉開中国英日本密碼 +*/ +const char JP_0[] PROGMEM = { 0xf0, 0xcc, 0xdf, 0xb0, 0xb8, 0xbd, }; +const char JP_1[] PROGMEM = { 0xf2, 0x00, 0x01, 0x02, 0x03, }; +const char JP_2[] PROGMEM = { 0xf0, 0xb4, 0x99, 0xd3, 0xee, }; +const char JP_3[] PROGMEM = { 0xf0, 0xa8, 0xe8, 0xbd, 0xe2, 0xee, 0xe0, }; +const char JP_4[] PROGMEM = { 0xf0, 0xae, 0xa4, 0xdf, 0xee, 0xe8, }; +const char JP_5[] PROGMEM = { 0xf0, 0xcb, 0xab, 0xee, }; +const char JP_6[] PROGMEM = { 0xf2, 0x04, 0x05, 0x06, 0xf0, 0x97, 0xde, 0xee, 0xd5, }; +const char JP_7[] PROGMEM = { 0xf2, 0x07, 0x08, }; +const char JP_8[] PROGMEM = { 0xf2, 0x09, 0xf0, 0x8d, }; +const char JP_9[] PROGMEM = { 0xf2, 0x0a, 0xf0, 0x8c, 0xf2, 0x0b, 0xf0, 0x4a, 0x8d, }; +const char JP_10[] PROGMEM = { 0xf0, 0xa2, 0xd8, 0xdf, 0xcb, 0xe1, 0xee, 0xac, 0xdc, 0xe8, }; +const char JP_11[] PROGMEM = { 0xf2, 0x0c, 0x0d, 0xf0, 0x94, 0xf2, 0x0e, 0x0f, }; +const char JP_12[] PROGMEM = { 0xf2, 0x10, 0x11, }; +const char JP_13[] PROGMEM = { 0xf2, 0x12, 0x13, }; +const char JP_14[] PROGMEM = { 0xf2, 0x14, 0x15, }; +const char JP_15[] PROGMEM = { 0xf0, 0xbc, 0xca, 0x9e, 0xe0, 0xbd, }; +const char JP_16[] PROGMEM = { 0xf2, 0x16, 0x17, }; +const char JP_17[] PROGMEM = { 0xf0, 0xcb, 0xee, 0xae, 0xbd, }; +const char JP_18[] PROGMEM = { 0xf2, 0x14, 0x15, }; +const char JP_19[] PROGMEM = { 0xf2, 0x16, 0x17, }; +const char JP_20[] PROGMEM = { 0xf2, 0x18, 0xf0, 0x5a, 0x8d, }; +const char JP_21[] PROGMEM = { 0xf0, 0xcb, 0xee, 0xae, 0xbd, }; +const char JP_22[] PROGMEM = { 0xf2, 0x14, 0x15, }; +const char JP_23[] PROGMEM = { 0xf0, 0xb5, 0x99, 0xe1, 0xa4, 0xbd, }; +const char JP_24[] PROGMEM = { 0xf1, 0x30, 0x29, 0x24, }; +const char JP_25[] PROGMEM = { 0xf0, 0xc8, 0xb8, 0xa5, }; +const char JP_26[] PROGMEM = { 0xf0, 0xc0, 0xda, 0xee, 0xae, }; +const char JP_27[] PROGMEM = { 0xf2, 0x18, 0xf0, 0x5a, 0x8d, }; +const char JP_28[] PROGMEM = { 0xf2, 0x19, 0xf0, 0x51, }; +const char JP_29[] PROGMEM = { 0xf0, 0x46, 0x46, 0x4a, 0x01, }; +const char JP_30[] PROGMEM = { 0xf0, 0x71, 0x46, 0x01, }; +const char JP_31[] PROGMEM = { 0xf2, 0x1a, 0x1b, 0x08, }; +const char JP_32[] PROGMEM = { 0xf2, 0x1c, 0x08, }; +const char JP_33[] PROGMEM = { 0xf0, 0x46, 0x46, 0x4a, 0x01, }; +const char JP_34[] PROGMEM = { 0xf0, 0x71, 0x46, 0x01, }; +const char JP_35[] PROGMEM = { 0xf0, 0xd6, 0x99, 0xe8, 0xae, 0xa4, 0xdf, 0xee, 0xe8, }; +const char JP_36[] PROGMEM = { 0xf0, 0xca, 0xdf, 0xb8, 0xcc, }; +const char JP_37[] PROGMEM = { 0xf2, 0x14, 0x15, }; +const char JP_38[] PROGMEM = { 0xf0, 0x97, 0xc5, 0x9b, 0xbd, }; +const char JP_39[] PROGMEM = { 0xf2, 0x1d, 0x1e, 0x08, }; +const char JP_40[] PROGMEM = { 0xf2, 0x1f, 0x20, }; //密码 +const char JP_41[] PROGMEM = { 0xf0, 0x66, 0x80, 0x81, 0xf2, 0x21, 0x22, }; //つまみ方向 +const char *const JP_table[] = {JP_0, JP_1, JP_2, JP_3, JP_4, JP_5, JP_41, JP_6, JP_40, JP_7, JP_38, JP_8, JP_9, JP_10, JP_11, JP_12, JP_13, JP_14, JP_15, JP_16, JP_17, JP_18, JP_19, JP_20, JP_21, JP_22, JP_23, JP_24, JP_25, JP_26, JP_27, JP_28, JP_29, JP_30, JP_31, JP_32, JP_39, JP_35, JP_36, JP_37,}; +const char JP_Length_table[] PROGMEM = {6, 5, 5, 7, 6, 4, 7, 9, 3, 3 , 5, 4, 9, 10, 8, 3, 3, 3, 6, 3, 5, 3, 3, 5, 5, 3, 6, 4, 4, 5, 5, 4, 5, 4, 4, 3, 4, 9, 5, 3,}; +#endif + +/* + 8x8 dot Japanese font for Arduboy + + Copyright (c) 2016 emutyworks + + Released under the MIT license + https://github.com/emutyworks/8x8DotJPFont/blob/master/LICENSE.txt +*/ +#if LANG_JP_State +void drawText(uint8_t x, uint8_t y, const uint8_t *mes, uint8_t cnt) +{ + uint8_t pb; + uint8_t page; + uint8_t screen_start = 0; + uint8_t screen_end = 128; + + if (x < screen_start) { + x = screen_start; + } + + for (uint8_t i = 0; i < cnt; i++) { + pb = pgm_read_byte_near(mes + i); + + switch (pb) { + case MISAKI_FONT_F0_PAGE: + page = MISAKI_FONT_F0_PAGE; + continue; + case MISAKI_FONT_F1_PAGE: + page = MISAKI_FONT_F1_PAGE; + continue; + case MISAKI_FONT_F2_PAGE: + page = MISAKI_FONT_F2_PAGE; + continue; + } + + if (!page) { + continue; + } + + switch (page) { +#ifdef MISAKI_FONT_F0_H + case MISAKI_FONT_F0_PAGE: + if (pb > MISAKI_FONT_F0_SIZE) { + continue; + } + if ((x + 8) > screen_end) { + x = screen_start; + y = y + 8; + } + arduboy.drawBitmap(x, y, misaki_font_f0[ pb ], MISAKI_FONT_F0_W, 8, WHITE); + x = x + 8; + break; +#endif +#ifdef MISAKI_FONT_F1_H + case MISAKI_FONT_F1_PAGE: + if (pb > MISAKI_FONT_F1_SIZE) { + continue; + } + if ((x + 4) > screen_end) { + x = screen_start; + y = y + 8; + } + arduboy.drawBitmap(x, y, misaki_font_f1[ pb ], MISAKI_FONT_F1_W, 8, WHITE); + arduboy.drawBitmap(x + 3, y, misaki_font_0x00, 1, 8, WHITE); + x = x + 4; + break; +#endif +#ifdef MISAKI_FONT_F2_H + case MISAKI_FONT_F2_PAGE: + if (pb > MISAKI_FONT_F2_SIZE) { + continue; + } + if ((x + 8) > screen_end) { + x = screen_start; + y = y + 8; + } + arduboy.drawBitmap(x, y, misaki_font_f2[ pb ], MISAKI_FONT_F2_W, 8, WHITE); + arduboy.drawBitmap(x + 7, y, misaki_font_0x00, 1, 8, WHITE); + x = x + 8; + break; +#endif + } + } +} +#endif diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/C-Debug.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/C-Debug.ino new file mode 100644 index 0000000..5518d73 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/C-Debug.ino @@ -0,0 +1,21 @@ +/* +//此片段用于DEBUG +void HelpMeSerialer() { + //串口助手 + if (Serial.available()) { + char TmpChar = Serial.read(); + switch (TmpChar) { + case 'x': x = Serial.parseInt(); + case 'y': y = Serial.parseInt(); + case 'a': a = Serial.parseInt(); + case 'b': b = Serial.parseInt(); + } + } + + Serial.println(String("X ->") + x); + Serial.println(String("Y ->") + y); + Serial.println(String("A ->") + a); + Serial.println(String("B ->") + b); + +} +*/ diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/CurveFitting.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/CurveFitting.ino new file mode 100644 index 0000000..2979e6c --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/CurveFitting.ino @@ -0,0 +1,103 @@ +//********** 曲线拟合程序 ********** +//曲线拟合算法来至https://blog.csdn.net/m0_37362454/article/details/82456616 by欧阳小俊 + +/*==================polyfit(n,x,y,poly_n,a)===================*/ +/*=======拟合y=a0+a1*x+a2*x^2+……+apoly_n*x^poly_n========*/ +/*=====n是数据个数 xy是数据值 poly_n是多项式的项数======*/ +/*===返回a0,a1,a2,……a[poly_n],系数比项数多一(常数项)=====*/ +void polyfit(int n, int x[], int y[], int poly_n, float p[]) +{ + int i, j; + float *tempx, *tempy, *sumxx, *sumxy, *ata; + + tempx = (float *)calloc(n , sizeof(float)); + sumxx = (float *)calloc((poly_n * 2 + 1) , sizeof(float)); + tempy = (float *)calloc(n , sizeof(float)); + sumxy = (float *)calloc((poly_n + 1) , sizeof(float)); + ata = (float *)calloc( (poly_n + 1) * (poly_n + 1) , sizeof(float) ); + for (i = 0; i < n; i++) + { + tempx[i] = 1; + tempy[i] = y[i]; + } + for (i = 0; i < 2 * poly_n + 1; i++) + { + for (sumxx[i] = 0, j = 0; j < n; j++) + { + sumxx[i] += tempx[j]; + tempx[j] *= x[j]; + } + } + for (i = 0; i < poly_n + 1; i++) + { + for (sumxy[i] = 0, j = 0; j < n; j++) + { + sumxy[i] += tempy[j]; + tempy[j] *= x[j]; + } + } + for (i = 0; i < poly_n + 1; i++) + { + for (j = 0; j < poly_n + 1; j++) + { + ata[i * (poly_n + 1) + j] = sumxx[i + j]; + } + } + gauss_solve(poly_n + 1, ata, p, sumxy); + + free(tempx); + free(sumxx); + free(tempy); + free(sumxy); + free(ata); +} +/*============================================================ + 高斯消元法计算得到 n 次多项式的系数 + n: 系数的个数 + ata: 线性矩阵 + sumxy: 线性方程组的Y值 + p: 返回拟合的结果 + ============================================================*/ +void gauss_solve(int n, float A[], float x[], float b[]) +{ + int i, j, k, r; + float max; + for (k = 0; k < n - 1; k++) + { + max = fabs(A[k * n + k]); // find maxmum + r = k; + for (i = k + 1; i < n - 1; i++) + { + if (max < fabs(A[i * n + i])) + { + max = fabs(A[i * n + i]); + r = i; + } + } + if (r != k) + { + for (i = 0; i < n; i++) //change array:A[k]&A[r] + { + max = A[k * n + i]; + A[k * n + i] = A[r * n + i]; + A[r * n + i] = max; + } + max = b[k]; //change array:b[k]&b[r] + b[k] = b[r]; + b[r] = max; + } + + for (i = k + 1; i < n; i++) + { + for (j = k + 1; j < n; j++) + A[i * n + j] -= A[i * n + k] * A[k * n + j] / A[k * n + k]; + b[i] -= A[i * n + k] * b[k] / A[k * n + k]; + } + } + + for (i = n - 1; i >= 0; x[i] /= A[i * n + i], i--) + { + for (j = i + 1, x[i] = b[i]; j < n; j++) + x[i] -= A[i * n + j] * x[j]; + } +} diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/D-EEProm.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/D-EEProm.ino new file mode 100644 index 0000000..13b99c3 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/D-EEProm.ino @@ -0,0 +1,185 @@ +/*EEPROM可用性检查 + 作用:防止因为EEPROM损坏而载入了错误的运行参数导致参数生产安全事故 +*/ +void CheckEEPROM() { + byte w, r; + int pass = 0, fail = 0; + for (int i = 0; i < EEPROM.length(); i++) { + //内存测试程序 + w = random(0, 255); + EEPROM[i] = w; + r = EEPROM[i]; + if (w == r) pass++; else fail++; + if (arduboy.nextFrame()) { + //显示测试数据 + arduboy.clear(); + arduboy.setTextSize(2); + SetTextColor(0); + arduboy.setCursor(0, 0); + arduboy.print(F(" MEM CHECK ")); + + arduboy.setTextSize(1); + arduboy.setCursor(8, 40); + arduboy.print(i); arduboy.print(F("/")); arduboy.print(EEPROM.length()); + SetTextColor(1); + arduboy.setCursor(0 + 8, 24); arduboy.print(F("PASS-")); arduboy.print(pass); + arduboy.setCursor(64 + 8, 24); arduboy.print(F("FAIL-")); arduboy.print(fail); + + arduboy.setCursor(0 + 8, 32); arduboy.print(F("W -> ")); arduboy.print(w); + arduboy.setCursor(64 + 8, 32); arduboy.print(F("R -> ")); arduboy.print(r); + + ProgressBar(i, 0, EEPROM.length(), 0, 60, 128, 4, 1); + + arduboy.display(); + } + } + //EEPROM存储器可用性检查失败 + while (fail != 0) { + arduboy.clear(); + arduboy.setTextSize(2); + SetTextColor(1); + arduboy.setCursor(22, 16); + arduboy.print(F("DAMAGED")); + arduboy.setTextSize(1); + arduboy.setCursor(31, 44); + SetTextColor(0); + if (millis() / 1000 % 2 == 0)arduboy.print(F("BOOT FAILED")); + arduboy.display(); + } + +} + +/*查看EEPROM内存 + 通过板载的旋转编码器可以上下滚动翻阅EEPROM中的数据 +*/ +void ViewEEPRom() { + setRotary(0, 1023, 4, 0); + lastbutton = (!digitalRead(BUTTON_PIN)); + arduboy.setTextSize(1); + do { + arduboy.clear(); + for (byte y = 0; y < 8; y++) { + for (byte x = 0; x < 2; x++) { + if (2 * y + x + getRotary() > 1024) break; + arduboy.setCursor(x * 64, y * 8); + arduboy.print(2 * y + x + getRotary()); + arduboy.print(F("->")); + arduboy.print(EEPROM[2 * y + x + getRotary()]); + arduboy.setCursor(x * 64 + 54, y * 8); + arduboy.print((char)EEPROM[2 * y + x + getRotary()]); + } + } + CheckLastButton(); + arduboy.display(); + } while (digitalRead(BUTTON_PIN) || lastbutton); +} +/* 从EEPROM读取烙铁头参数 + 传入:烙铁头的序号 + 作用:把对应序号的烙铁头参数直接载入内存 + 原理: + 1 计算地址 + 2 读取数据 +*/ +void GetEEPRomTip(byte n) { + if (n <= TIPMAX) { + uint16_t Counter = 21; + //跳转到目标地址 + Counter += (TIPNAMELENGTH + 1) * n; + Counter += 5 * 4 * n; + //从EEPRom读取数据并载入内存 + for (int i = 0; i < (TIPNAMELENGTH + 1); i++) TipName[i] = EEPROM.read(Counter++); + for (int i = 0; i < 4; i++) EEPROM.get(Counter += 4, PTemp[i]); + } +} + +/* 把烙铁头参数写入EEPRom + 传入:烙铁头的序号 + 作用:把对应序号的烙铁头参数从运行内存载入到EEPRom + 原理: + 1 计算地址 + 2 写入EEProm +*/ +void PutEEPRomTip(byte n) { + if (n <= TIPMAX) { + uint16_t Counter = 21; + //跳转到目标地址 + Counter += (TIPNAMELENGTH + 1) * n; + Counter += 5 * 4 * n; + //从EEPRom读取数据并载入内存 + for (int i = 0; i < (TIPNAMELENGTH + 1); i++) EEPROM.update(Counter++, TipName[i]); + for (int i = 0; i < 4; i++) EEPROM.put(Counter += 4, PTemp[i]); + } +} + +/* 从EEPROM删除某一项烙铁头参数 + 传入:烙铁头序号 + 作用:把序号后的烙铁头数据位覆盖移到序号的位置,实现删除数据的目的 +*/ +void DelEEPRomTip(byte n) { + if (n <= TIPMAX) { + uint16_t Counter = 21; + //跳转到目标地址 + Counter += (TIPNAMELENGTH + 1) * n; + Counter += 5 * 4 * n; + //开始覆盖移动后面的数据 + byte moveN = NumberOfTips - n - 1; + while (moveN--) { + for (int i = Counter; i < Counter + (TIPNAMELENGTH + 1) + 4 * 5; i++) EEPROM[i] = EEPROM[i + (TIPNAMELENGTH + 1) + 4 * 5]; + Counter += (TIPNAMELENGTH + 1) + 4 * 5; + } + } +} + +// reads user settings from EEPROM; if EEPROM values are invalid, write defaults +void GetEEPROM() { + uint16_t identifier = (EEPROM.read(0) << 8) | EEPROM.read(1); + if (identifier == EEPROM_IDENT) { + DefaultTemp = (EEPROM.read(2) << 8) | EEPROM.read(3); + SleepTemp = (EEPROM.read(4) << 8) | EEPROM.read(5); + BoostTemp = EEPROM.read(6); + Time2sleep = EEPROM.read(7); + Time2off = EEPROM.read(8); + TimeOfBoost = EEPROM.read(9); + MainScrType = EEPROM.read(10); + PIDenable = EEPROM.read(11); + BeepEnable = EEPROM.read(12); + CurrentTip = EEPROM.read(13); + NumberOfTips = EEPROM.read(14); + LANG = EEPROM.read(15); + FlipState = EEPROM.read(16); + UnderVoltage = EEPROM.read(17); + Password = (EEPROM.read(18) << 8) | EEPROM.read(19); + RotaryD = EEPROM.read(20); + } + else { + CheckEEPROM(); + EEPROM.update(0, EEPROM_IDENT >> 8); EEPROM.update(1, EEPROM_IDENT & 0xFF); + UpdateEEPROM(); + } + GetEEPRomTip(CurrentTip); +} + + +// writes user settings to EEPROM using updade function to minimize write cycles +void UpdateEEPROM() { + EEPROM.update( 2, DefaultTemp >> 8); + EEPROM.update( 3, DefaultTemp & 0xFF); + EEPROM.update( 4, SleepTemp >> 8); + EEPROM.update( 5, SleepTemp & 0xFF); + EEPROM.update( 6, BoostTemp); + EEPROM.update( 7, Time2sleep); + EEPROM.update( 8, Time2off); + EEPROM.update( 9, TimeOfBoost); + EEPROM.update(10, MainScrType); + EEPROM.update(11, PIDenable); + EEPROM.update(12, BeepEnable); + EEPROM.update(13, CurrentTip); + EEPROM.update(14, NumberOfTips); + EEPROM.update(15, LANG); + EEPROM.update(16, FlipState); + EEPROM.update(17, UnderVoltage); + EEPROM.update(18, Password >> 8); + EEPROM.update(19, Password & 0xFF); + EEPROM.update(20, RotaryD); + PutEEPRomTip(CurrentTip); +} diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/F.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/F.ino new file mode 100644 index 0000000..2ca41b6 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/F.ino @@ -0,0 +1,308 @@ +void(* resetFunc) (void) = 0; +// reads current rotary encoder value +int getRotary() { + return (Count >> ROTARY_TYPE); +} + +//检查按键 +void CheckLastButton() { + if (lastbutton && digitalRead(BUTTON_PIN)) { + delay(10); + lastbutton = false; + } +} +//返回对应层数的对象数 +byte QueryMenuObject() { + int SUM = 0; + for (int i = 0; i < (MenuLevel); i++) SUM += Menu_table[i]; + return SUM; +} + + +// average several ADC readings in sleep mode to denoise +uint16_t denoiseAnalog (byte port) { + uint16_t result = 0; + ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt + if (port >= A0) port -= A0; // set port and + ADMUX = (0x0F & port) | bit(REFS0); // reference to AVcc + set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction + for (uint8_t i = 0; i < 32; i++) { // get 32 readings + sleep_mode(); // go to sleep while taking ADC sample + while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed + result += ADC; // add them up + } + bitClear (ADCSRA, ADEN); // disable ADC + return (result >> 5); // devide by 32 and return value +} + +// get internal temperature by reading ADC channel 8 against 1.1V reference +float getChipTemp() { + uint16_t result = 0; + ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt + ADMUX = bit (REFS1) | bit (REFS0) | bit (MUX3); // set reference and mux + delay(10); // wait for voltages to settle + set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction + for (uint8_t i = 0; i < 32; i++) { // get 32 readings + sleep_mode(); // go to sleep while taking ADC sample + while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed + result += ADC; // add them up + } + bitClear (ADCSRA, ADEN); // disable ADC + result >>= 2; // devide by 4 + return ((result - 2594) / 9.76); // calculate internal temperature in degrees C +} + +// get input voltage in mV by reading 1.1V reference against AVcc +uint16_t getVCC() { + uint16_t result = 0; + ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt + // set Vcc measurement against 1.1V reference + ADMUX = bit (REFS0) | bit (MUX3) | bit (MUX2) | bit (MUX1); + delay(1); // wait for voltages to settle + set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction + for (uint8_t i = 0; i < 16; i++) { // get 16 readings + sleep_mode(); // go to sleep while taking ADC sample + while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed + result += ADC; // add them up + } + bitClear (ADCSRA, ADEN); // disable ADC + result >>= 4; // devide by 16 + return (1125300L / result); // 1125300 = 1.1 * 1023 * 1000 +} + + +// get supply voltage in mV +uint16_t getVIN() { + long result; + result = denoiseAnalog (VIN_PIN); // read supply voltage via voltage divider + return (result * Vcc / 179.474); // 179.474 = 1023 * R13 / (R12 + R13) +} + +//ADC中断服务 +// ADC interrupt service routine +EMPTY_INTERRUPT (ADC_vect); // nothing to be done here + +//旋转编码器触发中断 +// Pin change interrupt service routine for rotary encoder +ISR (PCINT0_vect) { + uint8_t a = PINB & 1; + uint8_t b = PIND >> 7 & 1; + if (a != a0) { // A changed + a0 = a; + if (b != b0) { // B changed + b0 = b; + Count = constrain(Count + ((a == b) ? CountStep : -CountStep), CountMin, CountMax); + if (ROTARY_TYPE && ((a == b) != ab0)) { + Count = constrain(Count + ((a == b) ? CountStep : -CountStep), CountMin, CountMax);; + } + ab0 = (a == b); + handleMoved = true; + } + } +} + +//计算实际温度 +// calculates real temperature value according to ADC reading and calibration values +float calculateTemp(float t) { + return PTemp[0] + RawTemp * PTemp[1] + RawTemp * RawTemp * PTemp[2] + RawTemp * RawTemp * RawTemp * PTemp[3]; +} + +/* + * 温度控制 + * mode-> 0:以实际温度数值为基准 1:以ADC数值为基准(非PID模式) +*/ +void Thermostat(bool mode) { + // define Setpoint acoording to current working mode + if (InOffMode) Setpoint = 0; + else if (InSleepMode) Setpoint = SleepTemp; + else if (InBoostMode) Setpoint = SetTemp + BoostTemp; + else Setpoint = SetTemp; + + // control the heater (PID or direct) + if (!mode) { + gap = abs(Setpoint - CurrentTemp); + if (PIDenable) { + Input = CurrentTemp; + if (gap < 30) ctrl.SetTunings(consKp, consKi, consKd); + else ctrl.SetTunings(aggKp, aggKi, aggKd); + ctrl.Compute(); + } else { + // turn on heater if current temperature is below setpoint + if ((CurrentTemp + 0.5) < Setpoint) Output = 0; else Output = 255; + } + } else { + gap = 0; //此模式下不计算温度差 + if ((RawTemp + 0.5) < Setpoint) Output = 0; else Output = 255; + } + // set heater PWM +#if UsePMOS + analogWrite(CONTROL_PIN, 255 - Output); +#else + analogWrite(CONTROL_PIN, Output); +#endif +} + + +// creates a short beep on the buzzer +void beep() { + //体谅一下,没内存了,只能用原始的办法驱动无源蜂鸣器,否则我也不想牺牲宝贵响应资源换内存 + if (BeepEnable) { + for (uint8_t i = 0; i < 255; i++) { + digitalWrite(BUZZER_PIN, HIGH); + delayMicroseconds(125); + digitalWrite(BUZZER_PIN, LOW); + delayMicroseconds(125); + } + } +} + +//设置旋转编码器的起始值 +// sets start values for rotary encoder +void setRotary(int rmin, int rmax, int rstep, int rvalue) { + CountMin = rmin << ROTARY_TYPE; + CountMax = rmax << ROTARY_TYPE; + if (RotaryD) CountStep = rstep; else CountStep = -rstep; + Count = rvalue << ROTARY_TYPE; +} + +// reads temperature, vibration switch and supply voltages +void SENSORCheck() { + // shut off heater in order to measure temperature +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + delayMicroseconds(Time2settle); // wait for voltage to settle + + uint16_t temp = denoiseAnalog(SENSOR_PIN); // read ADC value for temperature + uint8_t d = digitalRead(SWITCH_PIN); // check handle vibration switch + if (d != d0) { + handleMoved = true; // set flag if handle was moved + d0 = d; + } + if (! SensorCounter--) Vin = getVIN(); // get Vin every now and then + + // turn on again heater + +#if UsePMOS + analogWrite(CONTROL_PIN, 255 - Output); +#else + analogWrite(CONTROL_PIN, Output); +#endif + + + RawTemp += (temp - RawTemp) * SMOOTHIE; // stabilize ADC temperature reading + CurrentTemp = calculateTemp(RawTemp); + + // stabilize displayed temperature when around setpoint + if ((ShowTemp != Setpoint) || (abs(ShowTemp - CurrentTemp) > 5)) ShowTemp = CurrentTemp; + if (abs(ShowTemp - Setpoint) <= 1) ShowTemp = Setpoint; + // set state variable if temperature is in working range; beep if working temperature was just reached + gap = abs(SetTemp - CurrentTemp); + if (gap < 10) { + if (!IsWorky && BeepIfWorky) beep(); + IsWorky = true; + BeepIfWorky = false; + } else { + IsWorky = false; + BeepIfWorky = true; + } + // checks if tip is present or currently inserted + if (ShowTemp > 500) TipIsPresent = false; // tip removed ? + if (!TipIsPresent && (ShowTemp < 500)) { // new tip inserted ? + //关闭加热 +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + beep(); // beep for info + TipIsPresent = true; // tip is present now + ChangeTipScreen(); // show tip selection screen + UpdateEEPROM(); // update setting in EEPROM + handleMoved = true; // reset all timers + RawTemp = denoiseAnalog(SENSOR_PIN); // restart temp smooth algorithm + c0 = LOW; // switch must be released + setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, SetTemp); // reset rotary encoder + } +} + + + +// check rotary encoder; set temperature, toggle boost mode, enter setup menu accordingly +void ROTARYCheck() { + // set working temperature according to rotary encoder value + SetTemp = getRotary(); + + // check rotary encoder switch + uint8_t c = digitalRead(BUTTON_PIN); + if ( !c && c0 ) { + beep(); + Buttonmillis = millis(); + while ( (!digitalRead(BUTTON_PIN)) && ((millis() - Buttonmillis) < 500) ); + if ((millis() - Buttonmillis) >= 500) SetupScreen(); + else { + InBoostMode = !InBoostMode; + if (InBoostMode) Boostmillis = millis(); + handleMoved = true; + } + } + c0 = c; + + // check timer when in boost mode + if (InBoostMode && TimeOfBoost) { + GoneSeconds = (millis() - Boostmillis) / 1000; + if (GoneSeconds >= TimeOfBoost) { + InBoostMode = false; // stop boost mode + beep(); // beep if boost mode is over + BeepIfWorky = true; // beep again when working temperature is reached + } + } +} + + +// check and activate/deactivate sleep modes +void SLEEPCheck() { + if (handleMoved) { // if handle was moved + if (InSleepMode) { // in sleep or off mode? + if ((CurrentTemp + 20) < SetTemp) // if temp is well below setpoint + + // then start the heater right now + +#if UsePMOS + analogWrite(CONTROL_PIN, 255); +#else + analogWrite(CONTROL_PIN, 0); +#endif + + beep(); // beep on wake-up + BeepIfWorky = true; // beep again when working temperature is reached + } + handleMoved = false; // reset handleMoved flag + InSleepMode = false; // reset sleep flag + InOffMode = false; // reset off flag + Sleepmillis = millis(); // reset sleep timer + } + + // check time passed since the handle was moved + GoneMinutes = (millis() - Sleepmillis) / 60000; + if ( (!InSleepMode) && (Time2sleep > 0) && (GoneMinutes >= Time2sleep) ) { + InSleepMode = true; + beep(); + } + if ( (!InOffMode) && (Time2off > 0) && (GoneMinutes >= Time2off ) ) { + InOffMode = true; + beep(); + } +} + +void SetOLEDLightLevel(uint8_t level) { + arduboy.sendLCDCommand(0x81); //向SSD1306发送指令:设置内部电阻微调 + arduboy.sendLCDCommand(level); //微调范围(0-255) +} + +ISR(WDT_vect) //WDT中断,8秒一次 +{ + WDTCSR |= _BV(WDIE); +} diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/GUI.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/GUI.ino new file mode 100644 index 0000000..de5f0c5 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/GUI.ino @@ -0,0 +1,788 @@ + +// draws the main screen +void MainScreen() { + if (!(arduboy.nextFrame())) return; + //状态 + byte SysState; + if (ShowTemp > 500) SysState = 0; + else if (InOffMode) { + SysState = 1; + DrawIntensiveComputing(); + } else if (InSleepMode) SysState = 2; + else if (InBoostMode) SysState = 3; + else if (IsWorky) SysState = 4; + else if (Output < 180) SysState = 5; + else SysState = 6; + if (SysState != 1) { + if (MainScrType) { + arduboy.invert(1); + arduboy.clear(); + //详细信息页 + arduboy.fillRect(0, 0, 128, 64, 1); //白底 + arduboy.setTextSize(1); + SetTextColor(0); + //预设名 + //arduboy.drawSlowXYBitmap(0, 0, Tag, 16, 16, 0); + arduboy.setCursor(2, 4); arduboy.print(TipName); + //显示状态 + arduboy.setCursor(94, 5); + switch (LANG) { + case 0: arduboy.drawSlowXYBitmap(95, 1, S_table[SysState], 28, 14, 0); break; //中文 Chinese + default: //英文 English + switch (SysState) { + case 1: arduboy.print(F("OFF")); break; + case 2: arduboy.print(F("SLEEP")); break; + case 3: arduboy.print(F("BOOST")); break; + case 4: arduboy.print(F("WORKY")); break; + case 5: arduboy.print(F("HEAT")); break; + case 6: arduboy.print(F("HOLD")); break; + default: arduboy.print(F("ERROR")); break; + } break; + } + + //运行状态图标 + arduboy.drawSlowXYBitmap(74, 1, C_table[SysState], 14, 14, 0); + arduboy.setTextSize(1); + + //显示探头温度 + DrawNumRect(0, 15, 5, ShowTemp); + + //状态条 + DrawStatusBar(0); + + //状态图标 以及 信息 + //自动报警-图标闪烁 + if (getChipTemp() < 80 || ((millis() * 4) / 1000) % 2) { + arduboy.setCursor(91, 20); arduboy.print(getChipTemp(), 1); arduboy.print((char)248); arduboy.print(F("C")); //芯片温度 + arduboy.drawSlowXYBitmap(42, 1, Chip, 14, 14, 0); + } + if ((float)Vin / 100 > UnderVoltage || ((millis() * 4) / 1000) % 2) { + arduboy.setCursor(91, 28); arduboy.print((float)getVIN() / 1000, 2); arduboy.print(F("V")); //输入电压 + arduboy.drawSlowXYBitmap(58, 1, Lightning, 14, 14, 0); + } + arduboy.setCursor(91, 36); arduboy.print((float)getVCC() / 1000, 3); arduboy.print(F("V")); //芯片电压 + arduboy.setCursor(91, 44); arduboy.print(RawTemp, 0); //烙铁头热偶原始数据 + + + + + arduboy.display(); + //警报声 + if (getChipTemp() > 80 && ((millis() * 4) / 1000) % 2 || (float)Vin / 100 < UnderVoltage && ((millis() * 4) / 1000) % 2) { + beep(); + arduboy.invert(0); + }; + + } else { + //arduboy.invert(1); + arduboy.setTextSize(6); + SetTextColor(1); + arduboy.clear(); + if (getChipTemp() > 80 && ((millis() * 4) / 1000) % 2) beep(); + if ((float)Vin / 100 < UnderVoltage && ((millis() * 4) / 1000) % 2) beep(); + arduboy.setCursor(12, 2); + + if (ShowTemp > 500) arduboy.print(999); else arduboy.print(ShowTemp); + DrawStatusBar(1); + arduboy.display(); + } + } + + +} +void DrawNumRect(byte x, byte y, byte size, int n) { + arduboy.setCursor(3 + x, 3 + y); + arduboy.setTextSize(size); + if (ShowTemp > 500) arduboy.print(F("000")); else arduboy.print(n); + arduboy.drawRect(1 + x, 1 + y, 89, 39, 0); +} + +//绘制状态条 +void DrawStatusBar(bool color) { + SetTextColor(color); + arduboy.setTextSize(1); + //温度条 + //框 + arduboy.drawRect(1, 54, 102, 9, color); + //条 + if (ShowTemp <= 500) arduboy.fillRect(1, 54, map(ShowTemp, 0, 500, 2, 102), 9, color); + //指示部分 + arduboy.fillRect(map(Setpoint, 0, 500, 2, 102) - 2, 55, 3, 7, color); + //先来个白底 + arduboy.fillRect(map(Setpoint, 0, 500, 2, 102) - 3, 63, 5, 1, color); + arduboy.drawLine(map(Setpoint, 0, 500, 2, 102) - 1, 63, map(Setpoint, 0, 500, 2, 102) - 1, 54, !color); + + //画指示针 + arduboy.drawSlowXYBitmap(map(Setpoint, 0, 500, 2, 102) - 3, 60, Pointer, 5, 4, !color); + + //功率条 + arduboy.drawRect(104, 54, 23, 9, color); + arduboy.fillRect(104, 54, map(Output, 255, 0, 0, 23), 9, color); + + SetTextColor(!color); + //////////////进入反色//////////////////////////////// + arduboy.setCursor(2, 55); arduboy.print(Setpoint, 0);//探头预设温度 + arduboy.setCursor(105, 55); arduboy.print(map(Output, 255, 0, 0, 100)); arduboy.print(F("%")); //功率百分比 + SetTextColor(color); +} + +//设置画笔颜色 +void SetTextColor(bool color) { + arduboy.setTextBackground(!color); + arduboy.setTextColor(color); +} + + +// setup screen +void SetupScreen() { + arduboy.invert(0); + //关闭加热 +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + beep(); + uint16_t SaveSetTemp = SetTemp; + uint8_t selection = 0; + bool repeat = true; + + while (repeat) { + //arduboy.invert(0); + MenuLevel = 0; //默认打开主菜单 + selection = MenuScreen(selection); + switch (selection) { + case 0: MenuLevel = 1; TipScreen(); repeat = false; break; + case 1: MenuLevel = 2; TempScreen(); break; + case 2: MenuLevel = 3; TimerScreen(); break; + case 3: MenuLevel = 4; PIDenable = MenuScreen(PIDenable); break; + case 4: ScreenSet(); break; + case 5: MenuLevel = 6; BeepEnable = MenuScreen(BeepEnable); break; + case 6: RotarySet(); break; + case 7: UnderVoltageSet(); break; + case 8: PasswordSet(); break; + case 9: MenuLevel = 8; LANG = MenuScreen(LANG); if (LANG == 2 && !LANG_JP_State) LANG = 1; break; + case 10: QRcodeScreen(); break; + default: repeat = false; break; + } + } + UpdateEEPROM(); + handleMoved = true; + SetTemp = SaveSetTemp; + setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, SetTemp); +} + +//设置滚轮方向 +void RotarySet() { + bool Exit = false; + float rad; + byte ExitBar = 0; + bool color = 0; + SetTextColor(!color); + lastbutton = (!digitalRead(BUTTON_PIN)); + setRotary(60, 420, 18, 240); + do { + arduboy.setTextSize(1); + Setpoint = getRotary(); + ShowTemp = Setpoint; + + arduboy.clear(); + + arduboy.fillRect(0, 0, 128, 64, color); + + //仪表盘 + arduboy.fillCircle(24 + 12 * cos(rad), 24 - 12 * sin(rad), 5, !color); + arduboy.drawCircle(24, 24, 20, !color); + + //右上角的模式提示文本 + arduboy.setCursor(55, 1); + arduboy.setTextSize(2); + arduboy.print(F("MODE ")); + if (RotaryD) { + arduboy.print(F("-")); + rad = ((Setpoint - 60) / 360.0) * (2 * PI) - PI / 2; + } else { + arduboy.print(F("+")); + rad = ((-Setpoint - 60) / 360.0) * (2 * PI) + PI * 1 / 6; + } + //右侧数字显示 + DrawNumRect(55, 18, 4, ShowTemp); + //下端的状态条 + DrawStatusBar(!color); + //退出条 + arduboy.fillRect(0, 0, ExitBar, 4, !color); + arduboy.display(); + CheckLastButton(); + if (!digitalRead(BUTTON_PIN) && !lastbutton) { + ExitBar += 8; + arduboy.display(); + if (ExitBar > 127) Exit = true; + } else { + if (ExitBar > 1 && ExitBar < 64) { + RotaryD = !RotaryD; + setRotary(60, 420, 18, 240); + beep(); + } + ExitBar = 0; + } + + } while (!Exit); + beep(); beep(); +} +//显示设置菜单 +// tip settings screen +void ScreenSet() { + uint8_t selection = 0; + bool repeat = true; + while (repeat) { + MenuLevel = 9; + selection = MenuScreen(selection); + switch (selection) { + case 0: MenuLevel = 5; MainScrType = MenuScreen(MainScrType); break; + case 1: FlipState = !FlipState; break; + default: repeat = false; break; + } + Flip(FlipState); //设置屏幕反转状态 + } + UpdateEEPROM(); +} + +//预设设置菜单 +// tip settings screen +void TipScreen() { + uint8_t selection = 0; + bool repeat = true; + while (repeat) { + MenuLevel = 1; + selection = MenuScreen(selection); + switch (selection) { + case 0: ChangeTipScreen(); break; + case 1: CalibrationScreen(); break; + case 2: InputNameScreen(); break; + case 3: DeleteTipScreen(); break; + case 4: AddTipScreen(); break; + default: repeat = false; break; + } + } +} + +//温控设置菜单 +// temperature settings screen +void TempScreen() { + uint8_t selection = 0; + bool repeat = true; + while (repeat) { + selection = MenuScreen(selection); + switch (selection) { + case 0: setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, DefaultTemp); + DefaultTemp = InputScreen(18); break; + case 1: setRotary(20, 200, TEMP_STEP, SleepTemp); + SleepTemp = InputScreen(19); break; + case 2: setRotary(10, 100, TEMP_STEP, BoostTemp); + BoostTemp = InputScreen(20); break; + default: repeat = false; break; + } + } + UpdateEEPROM(); +} + + +//定时器设置菜单 +// timer settings screen +void TimerScreen() { + uint8_t selection = 0; + bool repeat = true; + while (repeat) { + selection = MenuScreen(selection); + switch (selection) { + case 0: setRotary(0, 30, 1, Time2sleep); + Time2sleep = InputScreen(22); break; + case 1: setRotary(0, 60, 5, Time2off); + Time2off = InputScreen(23); break; + case 2: setRotary(0, 180, 10, TimeOfBoost); + TimeOfBoost = InputScreen(24); break; + default: repeat = false; break; + } + } + UpdateEEPROM(); +} +//英语支持 +//i-文本id c-居中 +void Print_EN(byte i) { + char buffer[11]; + byte a = 0; + strcpy_P(buffer, (char *)pgm_read_word(&(EN_table[i]))); + while (1) { + if (buffer[a] != '\0') a++; else break; + } + arduboy.setCursor((128 - a * 6) / 2, 52); + arduboy.print(buffer); +} +//菜单界面 +// menu screen +uint8_t MenuScreen(uint8_t selected) { + int SlidingAnimationX; + uint8_t lastselected = selected; + setRotary(0, Menu_table[MenuLevel] - 1, 1, selected); + lastbutton = (!digitalRead(BUTTON_PIN)); + SetTextColor(1); + do { + selected = getRotary(); + //非线性滑动动画 + SlidingAnimationX += (selected - lastselected) * 56; + if (SlidingAnimationX != 0) SlidingAnimationX += 0.55 * (-SlidingAnimationX); + lastselected = selected; + arduboy.clear(); + //绘制图标 如果有指定的话 + for (byte i = 0; i < 5; i++) if (selected - 2 + i >= 0 && selected - 2 + i < Menu_table[MenuLevel]) DrawApp(-72 + i * 56 + SlidingAnimationX, selected - 2 + i + QueryMenuObject()); + DrawAppText(selected + QueryMenuObject()); + + arduboy.display(); + CheckLastButton(); + //beep(0); + } while (digitalRead(BUTTON_PIN) || lastbutton); + beep(); + return selected; +} + +//显示APP图标 +void DrawApp(int x, byte appID) { + DrawUIFrame(x, 0, 1); + drawSlowXYBitmapResize(x + 3, 3, Ico_table[appID], 14, 14, 3, 1); +} + +//显示APP对应的文本 +void DrawAppText(byte appID) { + // arduboy.setCursor(0, 55); arduboy.print(appID); + if (LANG == 0) arduboy.drawSlowXYBitmap(48, 48, CN_table[appID], 36, 16, 1); else if (LANG == 2 && LANG_JP_State) { +#if LANG_JP_State + drawText(48, 52, JP_table[appID], pgm_read_byte(&(JP_Length_table[appID]))); +#endif + } else { + arduboy.setCursor(48, 52); + arduboy.setTextSize(1); + Print_EN(appID); + } +} + +void DrawUIFrame(int x, int y, bool color) { + arduboy.fillRect(x, y, 48, 48, color); + arduboy.fillRect(x + 3, y + 3, 42, 42, !color); //雕空 + DrawPoint(x, y, 0); + DrawPoint(x + 47, y, 0); + DrawPoint(x, y + 47, 0); + DrawPoint(x + 47, y + 47, 0); +} + +void DrawPoint(int x, int y, bool color) { + arduboy.drawPixel(x + 1, y, color); + arduboy.drawPixel(x - 1, y, color); + arduboy.drawPixel(x, y + 1, color); + arduboy.drawPixel(x, y - 1, color); + arduboy.drawPixel(x, y, color); +} + +//FP 密集运算屏保 +void DrawIntensiveComputing() { + //关闭加热 +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + float calculate; + // while (1) { + arduboy.clear(); + + //随机线条 + DrawIntensiveComputingLine(); + + calculate = sin(millis() / 4000.0); + //模拟噪点 + for (int i = 0; i < calculate * 256 + 256; i++) arduboy.drawPixel(random(0, 128), random(0, 64), 1); + //声效 + if ((BeepEnable)) analogWrite(BUZZER_PIN, 64 + calculate * 64 + random(-8, 8)); + //if ((BeepEnable)) tone(BUZZER_PIN, int(calculate * 300) + 500 + random(-50, 50)); //没必要浪费内存 + + arduboy.display(); + //delay(60-calculate*30); + //} +} +//绘制屏保-密集运算线条 +void DrawIntensiveComputingLine() { + for (byte a = 0; a < 4; a++) { + Line[a] += random(-1, 1); + if (Line[a] > 128) Line[a] -= 128; + for (byte b = 0; b < random(3, 6); b++) { + arduboy.drawFastHLine(0, Line[a] + random(-10, 10), 128, 1); //水平线 + arduboy.drawFastVLine(Line[a] + random(-10, 10), 0, 64, 1); //垂直线 + } + } +} +//模拟数字滚轮 Numerical scrolling effect +void DisplayNum(int Num) { + arduboy.setTextSize(6); + SetTextColor(0); + //数字滚轮 + for (byte i = 0; i < 3; i++) LastValue[i] = int(Value / pow(10, 2 - i)) % 10; + Value = Num; + for (byte i = 0; i < 3; i++) { + SlidingAnimationY[i] += ((int(Value / pow(10, 2 - i)) % 10) - LastValue[i]) * 50; + if (SlidingAnimationY[i] != 0) SlidingAnimationY[i] += 0.8 * (-SlidingAnimationY[i]); + arduboy.fillRect(0 + i * 44, 0, 38, 50, 1); //白底 + for (int ii = -1; ii < 2; ii++) { + arduboy.setCursor(4 + i * 44, 4 - SlidingAnimationY[i] + ii * 50); + arduboy.print(LastValue[i] + ii); + } + } + //刻度标 + arduboy.fillRect(0, 0, 128, 2, 0); //上遮罩层 + arduboy.fillRect(0, 48, 128, 16, 0); //下遮罩层 +} + +//数值输入界面 +// input value screen +uint16_t InputScreen(byte appID) { + lastbutton = (!digitalRead(BUTTON_PIN)); + do { + arduboy.clear(); + DisplayNum(getRotary()); + DrawAppText(appID); + arduboy.display(); + CheckLastButton(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + beep(); + return Value; +} + +//设置开机密码 +void PasswordSet() { + Password = InputBigNum(Password, 8); + beep(); +} + +void BootPassword() { + if (Password != 0) { + do { + arduboy.clear(); + DrawApp(40, 8); + DrawAppText(8); + arduboy.display(); + delay(1000); + beep(); beep(); beep(); + } while (InputBigNum(0, 8) != Password); + } +} + +//欠压报警设置 +// information display screen +void UnderVoltageSet() { + setRotary(0, 250, 1, UnderVoltage); + UnderVoltage = InputScreen(7); + beep(); +} + + +//更换烙铁头预设界面 +// change tip screen +void ChangeTipScreen() { + uint8_t selected = CurrentTip; + uint8_t lastselected = selected; + int8_t arrow = 0; + if (selected) arrow = 1; + setRotary(0, NumberOfTips - 1, 1, selected); + lastbutton = (!digitalRead(BUTTON_PIN)); + do { + //beep(0); + arduboy.clear(); + selected = getRotary(); + arrow = constrain(arrow + selected - lastselected, 0, 2); + lastselected = selected; + SetTextColor(0); + arduboy.setTextSize(2); + arduboy.setCursor(0, 0); arduboy.print(F("Select Tip")); + SetTextColor(1); + arduboy.setCursor(0, 16 * (arrow + 1)); arduboy.print(F(">")); + for (uint8_t i = 0; i < 3; i++) { + uint8_t drawnumber = selected + i - arrow; + if (drawnumber < NumberOfTips) { + arduboy.setCursor(12, 16 * (i + 1)); + GetEEPRomTip(selected + i - arrow); + arduboy.print(TipName); + } + } + CheckLastButton(); + arduboy.display(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + + beep(); + CurrentTip = selected; + GetEEPRomTip(CurrentTip); + beep(); + //控制台指令 + String s = TipName; + if (s == "EEPROM\0") ViewEEPRom(); + if (s == "RESET.\0") { + MenuLevel = 7; + if (MenuScreen(0)) { + for (int i = 0 ; i < EEPROM.length() ; i++) EEPROM.write(i, 255); + resetFunc(); + } + } + // if (s == "LIGHT.\0") + ShowPTemp(&PTemp[0]); + + +} + +//温度校准界面 +// temperature calibration screen +void CalibrationScreen() { + float P[4]; + int xx[9]; + for (int CalStep = 0; CalStep < 9; CalStep++) { + if (CalStep != 0) setRotary(0, 1023, 1, xx[CalStep - 1]); else setRotary(0, 1023, 1, 0); + BeepIfWorky = true; + lastbutton = (!digitalRead(BUTTON_PIN)); + do { + arduboy.clear(); + arduboy.setTextSize(1); + SENSORCheck(); //读取传感器 + SetTemp = getRotary(); + Thermostat(1); //加热控制 - ADC数值为基准 + + arduboy.setCursor(25, 0); + SetTextColor(0); + arduboy.print(F("ADC-> ")); + arduboy.print(RawTemp); + SetTextColor(1); + for (byte y = 0; y < 5; y++) { + for (byte x = 0; x < 2; x++) { + if (2 * y + x > CalStep) break; + arduboy.setCursor(x * 64 + 4, y * 8 + 16); + arduboy.print(CalTemp[2 * y + x]); + arduboy.print((char)248); + arduboy.print(F("- ")); + if (2 * y + x == CalStep) arduboy.print(getRotary()); + else arduboy.print(xx[2 * y + x]); + } + } + //进度条 + ProgressBar(CalStep + 1, 0, 9, 0, 60, 128, 4, 1); + + CheckLastButton(); + arduboy.display(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + xx[CalStep] = getRotary(); + beep(); delay (10); + } + + //关闭加热 +#if UsePMOS + analogWrite(CONTROL_PIN, 0); +#else + analogWrite(CONTROL_PIN, 255); +#endif + delayMicroseconds(Time2settle); // wait for voltage to settle + bool pass = true; + for (int i = 0; i < 8; i++) if (xx[i] + 5 >= xx[i + 1]) pass = false; + if (pass) { + MenuLevel = 7; + polyfit(9, xx, CalTemp, 3, P); //拟合程序 + free(xx); + ShowPTemp(&P[0]); + if (MenuScreen(0)) { + for (uint8_t i = 0; i < 4; i++) PTemp[i] = P[i]; //写入拟合系数 + free(P); + UpdateEEPROM(); + } + } else { + arduboy.clear(); + arduboy.setTextSize(2); + SetTextColor(0); + arduboy.setCursor(32, 24); + arduboy.print(F("Error")); + arduboy.display(); + delay(5000); + resetFunc(); + } + arduboy.clear(); + arduboy.setTextSize(2); + SetTextColor(0); + arduboy.setCursor(28, 24); + arduboy.print(F("Reboot")); + arduboy.display(); + delay(5000); + resetFunc(); +} +//显示默认烙铁头温度曲线系数 +void ShowPTemp(float *p) { + arduboy.clear(); + arduboy.setTextSize(1); + for (int i = 0; i < 4; i++) { + arduboy.setCursor(12, i * 8 + 16); + arduboy.print(F("P[")); + arduboy.print(i, 7); + arduboy.print(F("] = ")); + arduboy.print(*p, 7); + p++; + } + arduboy.display(); + + lastbutton = (!digitalRead(BUTTON_PIN)); + while (digitalRead(BUTTON_PIN) || lastbutton) CheckLastButton(); + /* + lastbutton = (!digitalRead(BUTTON_PIN)); + setRotary(50, 450, 1, 0); + do { + arduboy.clear(); + for (int y = 0; y < 64; y++) arduboy.drawPixel(map(calculateTemp(map(y, 0, 63, 0, 400)), CalTemp[0], CalTemp[8], 0, 127), y,1); + arduboy.display(); + CheckLastButton(); + } while (digitalRead(BUTTON_PIN) || lastbutton);*/ +} +//命名界面 文本输入界面 +// input tip name screen +void InputNameScreen() { + uint8_t value; + for (uint8_t digit = 0; digit < (TIPNAMELENGTH - 1); digit++) { + lastbutton = (!digitalRead(BUTTON_PIN)); + setRotary(31, 96, 1, 65); + do { + value = getRotary(); + if (value == 31) { + value = 95; + setRotary(31, 96, 1, 95); + } + if (value == 96) { + value = 32; + setRotary(31, 96, 1, 32); + } + //arduboy.setCursor(0, 0);arduboy.print(); + arduboy.clear(); + arduboy.setTextSize(2); + arduboy.setCursor(16 * digit, 48); arduboy.print(char(94)); + arduboy.setCursor(0, 32); + for (uint8_t i = 0; i < digit; i++) arduboy.print(TipName[i]); + arduboy.setCursor(16 * digit, 32); arduboy.print(char(value)); + CheckLastButton(); + arduboy.display(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + TipName[digit] = value; + UpdateEEPROM(); + beep(); delay (10); + } + TipName[TIPNAMELENGTH - 1] = 0; + return value; +} + +//删除烙铁头 +// delete tip screen +void DeleteTipScreen() { + MenuLevel = 7; + if (NumberOfTips == 1) { + arduboy.clear(); + arduboy.setTextSize(2); + SetTextColor(0); + arduboy.setCursor(16, 24); + arduboy.print(F("Only one")); + arduboy.display(); + delay(1000); + } + else if (MenuScreen(0)) { + if (CurrentTip == (NumberOfTips - 1)) { + CurrentTip--; + } + else { + DelEEPRomTip(CurrentTip); + } + NumberOfTips--; + } +} + +//新建烙铁 预设 +// add new tip screen +void AddTipScreen() { + if (NumberOfTips < TIPMAX) { + CurrentTip = NumberOfTips++; InputNameScreen(); + PTemp[0] = TempP1; + PTemp[1] = TempP2; + PTemp[2] = TempP3; + PTemp[3] = TempP4; + UpdateEEPROM(); + } else { + arduboy.clear(); + SetTextColor(0); + arduboy.setCursor(5, 24); + arduboy.print(F("Out of Mem")); + arduboy.display(); + delay(1000); + } + +} + +int InputBigNum(int InputPW, byte appID) { + setRotary(0, 900, 100, InputPW); + InputPW = InputScreen(appID); + setRotary(InputPW, InputPW + 90, 10, InputPW); + InputPW = InputScreen(appID); + setRotary(InputPW, InputPW + 9, 1, InputPW); + InputPW = InputScreen(appID); + return InputPW; +} +void QRcodeScreen() { + arduboy.clear(); + arduboy.drawSlowXYBitmap(40, 0, QRCode, 48, 48, 1); + arduboy.display(); + delay(100); + do { + } while (digitalRead(BUTTON_PIN) || lastbutton); + beep(); +} + +//位图缩放 代码片段改自arduboy2 +void drawSlowXYBitmapResize(int x, int y, const uint8_t *bitmap, uint8_t w, uint8_t h, uint8_t size, uint8_t color) { + int16_t xi, yi, byteWidth = (w + 7) / 8; + for (yi = 0; yi < h; yi ++) { + for (xi = 0; xi < w; xi ++) { + if (pgm_read_byte(bitmap + yi * byteWidth + xi / 8) & (128 >> (xi & 7))) { + arduboy.fillRect(x + xi * size, y + yi * size, size, size, color); + } + } + } +} + +//翻转 +void Flip(bool Fmode) { + arduboy.flipVertical(Fmode); + arduboy.flipHorizontal(Fmode); +} + +//展示版本号 +void ShowVersion() { + arduboy.clear(); + arduboy.setTextSize(2); + arduboy.setCursor(28, 24); + arduboy.print(F(VERSION)); + arduboy.display(); + delay(700); + arduboy.clear(); + SetTextColor(0); + arduboy.setCursor(28, 24); + arduboy.print(F(VERSION)); + arduboy.display(); + delay(300); +} + +/*进度条 + 传入:i=值 a=值的最小值 b=值的最大值 x=左上顶点x轴坐标 y=左上顶点y轴坐标 w=宽度 h=高度 c=颜色 +*/ +void ProgressBar(int i, int a, int b, byte x, byte y, byte w, byte h, bool c) { + SetTextColor(c); + arduboy.setTextSize(c); + //进度标 + arduboy.setCursor(map(i, a, b, 0, 92), 52); + arduboy.print(((float)i / (b - a)) * 100); arduboy.print(F("%")); + //进度条 + arduboy.fillRect(x, y, map(i, a, b, 0, w), h, c); +} diff --git a/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/WDT.ino b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/WDT.ino new file mode 100644 index 0000000..6fd9c38 --- /dev/null +++ b/software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/WDT.ino @@ -0,0 +1,54 @@ +//********** 看门狗函数 ********** +void set_wdt_mod(uint8_t mod, uint8_t ii) //模式,超时时间 +{ + /* + WDCE + 该位在定时序列中用于更改WDE和预分频器位 + 要清除WDE位或更改预分频器位,必须将WDCE置1。 + 一旦写入1,硬件将在四个时钟周期后清除WDCE。 + 0=16ms,1=32ms,2=64ms,3=128ms,4=250ms + 5=500ms,6=1s,7=2s,8=4s,9=8s + */ + if (ii > 9 ) ii = 9; + byte bb; + bb = ii & 7; + if (ii > 7) bb |= (1 << 5); + bb |= (1 << WDCE); + + switch (mod) { + case 0: //关闭看门狗 + __asm__ __volatile__ ("wdr"); //看门狗复位 + MCUSR = 0x00; //看门狗复位标志清零 + WDTCSR = (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1 + WDTCSR = 0x00; //清除所有预分频位 + break; + + case 1: //打开看门狗,设置复位模式 + __asm__ __volatile__ ("wdr"); //看门狗复位 + MCUSR &= ~(1 << WDRF); //MUUSR中的WDRF清零,清除复位标志 + WDTCSR |= (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1 + //设置新的看门狗超时值bb + WDTCSR = bb; //8秒时bb=0011 0001 + WDTCSR |= _BV(WDE); //设置复位模式 + break; + + case 2: //打开看门狗,设置中断模式 + __asm__ __volatile__ ("wdr"); //看门狗复位 + MCUSR &= ~(1 << WDRF); //MUUSR中的WDRF清零,清除复位标志 + WDTCSR |= (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1 + //设置新的看门狗超时值bb + WDTCSR = bb; //8秒时bb=0011 0001 + WDTCSR |= _BV(WDIE); //设置中断模式 + break; + + case 3: //打开看门狗,设置中断和复位模式 + __asm__ __volatile__ ("wdr"); //看门狗复位 + MCUSR &= ~(1 << WDRF); //MUUSR中的WDRF清零,清除复位标志 + WDTCSR |= (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1 + //设置新的看门狗超时值bb + WDTCSR = bb; //8秒时bb=0011 0001 + WDTCSR |= _BV(WDIE); //设置中断模式 + WDTCSR |= _BV(WDE); //设置复位模式 + break; + } +} diff --git a/software/UI_upgrade_by_createskyblue/img/readme/1.jpg b/software/UI_upgrade_by_createskyblue/img/readme/1.jpg new file mode 100644 index 0000000..658511a Binary files /dev/null and b/software/UI_upgrade_by_createskyblue/img/readme/1.jpg differ diff --git a/software/UI_upgrade_by_createskyblue/img/readme/2.jpg b/software/UI_upgrade_by_createskyblue/img/readme/2.jpg new file mode 100644 index 0000000..81f3ede Binary files /dev/null and b/software/UI_upgrade_by_createskyblue/img/readme/2.jpg differ diff --git a/software/UI_upgrade_by_createskyblue/img/readme/3.jpg b/software/UI_upgrade_by_createskyblue/img/readme/3.jpg new file mode 100644 index 0000000..b9e0fa5 Binary files /dev/null and b/software/UI_upgrade_by_createskyblue/img/readme/3.jpg differ diff --git a/software/UI_upgrade_by_createskyblue/img/readme/4.jpg b/software/UI_upgrade_by_createskyblue/img/readme/4.jpg new file mode 100644 index 0000000..3aebd2d Binary files /dev/null and b/software/UI_upgrade_by_createskyblue/img/readme/4.jpg differ diff --git a/software/UI_upgrade_by_createskyblue/img/readme/5.jpg b/software/UI_upgrade_by_createskyblue/img/readme/5.jpg new file mode 100644 index 0000000..8f0fa10 Binary files /dev/null and b/software/UI_upgrade_by_createskyblue/img/readme/5.jpg differ diff --git a/software/UI_upgrade_by_createskyblue/img/readme/6.jpg b/software/UI_upgrade_by_createskyblue/img/readme/6.jpg new file mode 100644 index 0000000..84a5ec5 Binary files /dev/null and b/software/UI_upgrade_by_createskyblue/img/readme/6.jpg differ diff --git a/software/UI_upgrade_by_createskyblue/img/设置/Set6.png b/software/UI_upgrade_by_createskyblue/img/设置/Set6.png index 1b8b15a..4fcade3 100644 Binary files a/software/UI_upgrade_by_createskyblue/img/设置/Set6.png and b/software/UI_upgrade_by_createskyblue/img/设置/Set6.png differ diff --git a/software/original/binaries/SolderingStation2_v1.7.hex b/software/original/binaries/SolderingStation2_v1.7.hex index 4786e3d..04b4099 100644 --- a/software/original/binaries/SolderingStation2_v1.7.hex +++ b/software/original/binaries/SolderingStation2_v1.7.hex @@ -1,1503 +1,1503 @@ -:100000000C94F00C0C94180D0C94180D0C94922078 -:100010000C94180D0C94180D0C94180D0C94180DCC -:100020000C94180D0C94180D0C94180D0C94180DBC -:100030000C94180D0C94180D0C94180D0C94180DAC -:100040000C9448200C94180D0C94180D0C94180D59 -:100050000C94180D0C9469210C94180D0C94180D27 -:100060000C94180D0C94180D4465616374697661E5 -:100070007465640053656C65637420546970004551 -:100080006E74657220546970204E616D6500FFE0EA -:10009000FFD1AFFF32FFD0FFFEFFE0FFD1AEFFD0B8 -:1000A000FFFEFFE0FFD11000FFFEFFD0FFE0FFC129 -:1000B000FFD1AED580A83FD300408D142000A1C849 -:1000C000DA1281CFD9F1DB402EA4A6AFFFD0FFFE1C -:1000D000506C6561736520776169742E2E2E004126 -:1000E00044433A20200074656D703A2000536574D3 -:1000F000206D6561737572656400537465703A2094 -:100100000043616C6962726174696F6E0020560011 -:100110005663633A20200020560056696E3A20004C -:10012000204300546D703A20004669726D77617209 -:10013000653A200030303000303030005600204822 -:100140004F4C4400204845415400574F524B5900F2 -:10015000424F4F535400534C4545500020204F46CA -:1001600046004552524F5200000000002400270074 -:100170002A0000000000250028002B0000000000DD -:1001800023002600290004040404040404040202D9 -:100190000202020203030303030301020408102006 -:1001A0004080010204081020010204081020000011 -:1001B0000008000201000003040700000000000026 -:1001C000000000574DFBF12A000000002A3A002BE6 -:1001D000F82A001717452507140082000383800FB3 -:1001E00083E01FC7E00FC7E007C7C003EF8001EF40 -:1001F0000000FE00F8FE3EFFFFFEFFFFFEFFFFFED9 -:10020000FE7CFE80FE0201EF0003EF8007EFC007D7 -:10021000C7C00FC7E01F83F00783C00183002323FB -:10022000AF3B0C000001E000000001E00000000115 -:10023000E000000001E000000001E000000001E03B -:1002400000000001E000000001E000000001E0000B -:10025000000001E000000001E000000001E00000FB -:100260000001E000000001E000000001E0000000EB -:1002700001E00000FFFFFFFFE0FFFFFFFFE0FFFFE7 -:10028000FFFFE0FFFFFFFFE00001E000000001E0F2 -:1002900000000001E000000001E000000001E000BB -:1002A000000001E000000001E000000001E00000AB -:1002B0000001E000000001E000000001E00000009B -:1002C00001E000000001E000000001E0000000018A -:1002D000E000000C0F1E1203F80FF00FF00FE01FEC -:1002E000E01FC01FC03F803F803F007F007E007E38 -:1002F000007C00FC00FC000F081013020BFFFEFF47 -:10030000FEFFFEFFFEFFFEFFFEFFFEFFFE080808E9 -:10031000120600FFFFFFFFFFFFFFFF132E8A1903E6 -:10032000FD0007E00007E00007C0000FC0000FC09D -:10033000000F80001F80001F80001F80001F000032 -:100340003F00003F00003E00007E00007E00007C79 -:100350000000FC0000FC0000FC0000F80001F800B8 -:1003600001F80001F00003F00003F00003F00007C3 -:10037000E00007E00007E00007C0000FC0000FC06A -:10038000000F80001F80001F80001F80003F0000C2 -:100390003F00003F00003E00007E00007E00007C29 -:1003A0000000FC0000FC0000FC00001D2CB021023D -:1003B000FF001FC00000FFF80003FFFC0007FFFF65 -:1003C000000FFFFF800FFFFF801FF0FFC03FC03F07 -:1003D000C03FC03FE03F801FE07F801FF07F001FD5 -:1003E000F07F000FF07F000FF0FF000FF0FF000F15 -:1003F000F8FF000FF8FF000FF8FF000FF8FF000FE5 -:10040000F8FF000FF8FF000FF8FF000FF8FF000FD4 -:10041000F8FF000FF8FF000FF8FF000FF8FF000FC4 -:10042000F8FF000FF87F000FF07F000FF07F000F44 -:10043000F07F001FF07F801FF03F801FE03FC03F34 -:10044000E03FC03FC01FF0FFC00FFFFF800FFFFF66 -:100450000007FFFF0003FFFE0000FFF800001FC0C1 -:1004600000122A7E210600003FC0007FC000FFC0AE -:1004700003FFC00FFFC03FFFC0FFFFC0FFFFC0FF73 -:10048000FFC0FF3FC0FE3FC0F83FC0E03FC0003F9D -:10049000C0003FC0003FC0003FC0003FC0003FC0A1 -:1004A000003FC0003FC0003FC0003FC0003FC00051 -:1004B0003FC0003FC0003FC0003FC0003FC0003F02 -:1004C000C0003FC0003FC0003FC0003FC0003FC071 -:1004D000003FC0003FC0003FC0003FC0003FC00021 -:1004E0003FC0003FC01D2BAC210200000FF00000F8 -:1004F0007FFE0001FFFF0003FFFF8007FFFFC00F2B -:10050000FFFFE01FF83FF01FF01FF01FE00FF03F6C -:10051000C007F83FC007F83FC007F8000007F80021 -:100520000007F800000FF800000FF000001FF000B7 -:10053000001FF000003FE000007FE00000FFC0006F -:1005400001FF800003FF800007FF00000FFE000096 -:100550001FFC00003FF800007FF00000FFE00001FA -:10056000FF800003FF00000FFE00001FFC00003FA3 -:10057000F000007FE00000FFC00000FFFFFFF8FF79 -:10058000FFFFF8FFFFFFF8FFFFFFF8FFFFFFF8FF97 -:10059000FFFFF8FFFFFFF81C2CB02103FF007FC016 -:1005A0000003FFF80007FFFC001FFFFF003FFFFFF5 -:1005B000003FFFFF807FE0FFC07FC07FC0FF803F24 -:1005C000C0FF001FE0FF001FE0FF001FE000001F52 -:1005D000E000001FE000001FE000003FC000007FBF -:1005E000C00003FF80007FFF00007FFC00007FF061 -:1005F00000007FF800007FFE00007FFF800000FF0A -:10060000C000003FE000001FE000001FE000000FFE -:10061000F000000FF000000FF0FF000FF0FF000FE0 -:10062000F0FF000FF0FF001FE0FF801FE07FC03FE2 -:10063000E07FE0FFC03FFFFF803FFFFF001FFFFEA6 -:10064000000FFFFC0003FFF800007FC0001F2AA876 -:100650002101000001FFC00001FFC00003FFC00036 -:1006600007FFC00007FFC0000FFFC0000FFFC00062 -:100670001FFFC0003FFFC0003FBFC0007F3FC00062 -:10068000FF3FC000FE3FC001FE3FC001FC3FC00372 -:10069000F83FC007F83FC007F03FC00FF03FC01F52 -:1006A000E03FC01FC03FC03FC03FC03F803FC07F52 -:1006B000803FC0FF003FC0FF003FC0FFFFFFFEFFC5 -:1006C000FFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFF3E -:1006D000FFFFFEFFFFFFFE00003FC000003FC00025 -:1006E000003FC000003FC000003FC000003FC0000E -:1006F000003FC000003FC000003FC01D2BAC2102E6 -:10070000FF7FFFFFE07FFFFFE07FFFFFE07FFFFF56 -:10071000E07FFFFFE07FFFFFE07FFFFFE07F8000E3 -:10072000007F8000007F8000007F8000007F8000CD -:10073000007F8000007F8000007F8000007F87F8BE -:10074000007F9FFE007FFFFF807FFFFFC07FFFFFD6 -:10075000C07FFFFFE07FF03FF07FC01FF07F800F82 -:10076000F07F800FF87F0007F8000007F80000070F -:10077000F8000007F8000007F8000007F80000077D -:10078000F0FF000FF0FF000FF0FF001FF0FF803FB1 -:10079000E07FE0FFC07FFFFFC03FFFFF801FFFFF44 -:1007A000000FFFFC0003FFF800007FC0001D2CB00D -:1007B0002102FF000FF000007FFC0000FFFF00039C -:1007C000FFFF8007FFFFC007FFFFE00FFC3FE01FB8 -:1007D000F00FF01FE00FF03FC007F83FC007F83FF1 -:1007E0008000007F8000007F8000007F8000007F0D -:1007F000000000FF03F800FF1FFE00FF3FFF00FFA7 -:100800007FFF80FFFFFFC0FFFFFFE0FFF83FF0FF2B -:10081000E01FF0FFC00FF0FFC00FF8FF8007F8FFE8 -:100820008007F8FF8007F8FF8007F8FF8007F87F50 -:100830008007F87F8007F87F8007F07FC00FF03FC8 -:10084000C00FF03FE01FE01FF83FE01FFFFFC00FA9 -:10085000FFFF8007FFFF0003FFFE0000FFF800001E -:100860003FC0001C2AA8210300FFFFFFF0FFFFFF8D -:10087000F0FFFFFFF0FFFFFFF0FFFFFFF0FFFFFFC4 -:10088000F0FFFFFFF000000FF000000FF000001F6E -:10089000F000001FE000003FE000003FC000007FCC -:1008A000C000007FC00000FF800000FF800001FF4B -:1008B000000001FF000001FE000003FE000003FE37 -:1008C000000007FC000007FC00000FF800000FF814 -:1008D00000001FF800001FF000001FF000003FE0C4 -:1008E00000003FE000007FC000007FC00000FFC0AC -:1008F0000000FF800001FF800001FF000003FF00F7 -:100900000003FF000003FE000007FE000007FC00DC -:10091000001D2CB02102FF003FF00001FFFE000788 -:10092000FFFF800FFFFFC01FFFFFE03FFFFFF03F13 -:10093000F87FF07FE01FF07FE01FF87FC00FF87FA7 -:10094000C00FF87FC00FF87FC00FF87FC00FF83FCF -:10095000E01FF03FE01FF01FF87FE00FFFFFC00730 -:10096000FFFF0001FFFC0000FFF80003FFFE000F87 -:10097000FFFF801FFFFFC03FF03FE07FE01FE07FF1 -:10098000C00FF07FC00FF0FF8007F8FF8007F8FF6F -:100990008007F8FF8007F8FF8007F8FF8007F8FF5F -:1009A000C00FF8FFC00FF87FE01FF07FF03FF07F2F -:1009B000FFFFE03FFFFFE01FFFFFC00FFFFF8003CF -:1009C000FFFE00007FF0001D2CB02102FF001FC0C1 -:1009D0000000FFF80003FFFE0007FFFF000FFFFF0E -:1009E000801FFFFF803FE0FFC03FC03FE07F801FD0 -:1009F000E07F801FE07F000FF0FF000FF0FF000F8F -:100A0000F0FF000FF0FF000FF8FF000FF8FF000FDE -:100A1000F8FF000FF8FF801FF87F801FF87FC03FAE -:100A2000F87FE0FFF83FFFFFF81FFFFFF81FFFF719 -:100A3000F80FFFE7F803FFC7F800FE07F000000714 -:100A4000F000000FF000000FF000000FF000000FAA -:100A5000E07F801FE07F801FE03F803FC03FC07F7E -:100A6000C03FE0FF801FFFFF800FFFFF0007FFFE7A -:100A70000003FFFC0001FFF000003FC000081D1D47 -:100A8000130800FFFFFFFFFFFFFFFF000000000053 -:100A90000000000000000000FFFFFFFFFFFFFFFF5E -:100AA00000121A00001803700390207F001A00182B -:100AB000000000000B0000FFFFFFFFFFFFFFFFFF34 -:100AC000FF11103013010601C00001C00001C00079 -:100AD00001C00001C00001C00001C000FFFF80FF95 -:100AE000FF8001C00001C00001C00001C00001C0C2 -:100AF0000001C00001C0000708080B03023E3E3E93 -:100B00003E3EF0F0F00902040B010DFF80FF80056E -:100B100005050B0502F8F8F8F8F8FF11184813015D -:100B200002FFFF80FFFF80C00380C00380C00380FE -:100B3000C00380C00380C00380C00380C00380C0A6 -:100B40000380C00380C00380C00380C00380C00353 -:100B500080C00380C00380C00380C00380C00380C6 -:100B6000FFFF80FFFF80FFFF80061818130702FCBD -:100B7000FC1C1C1C1C1C1C1C1C1C1C1C1C1C1C1CD5 -:100B80001C1C1C1C1C1C1C111848130102FFFF809C -:100B9000FFFF8000038000038000038000038000CB -:100BA0000380000380000380000380000380FFFFB8 -:100BB00080FFFF80C00000C00000C00000C0000037 -:100BC000C00000C00000C00000C00000FFFF80FFA8 -:100BD000FF80FFFF80111848130102FFFF80FFFF15 -:100BE00080000380000380000380000380000380F6 -:100BF0000003800003800003800003801FFF801F2C -:100C0000FF80000380000380000380000380000356 -:100C100080000380000380000380FFFF80FFFF80CF -:100C2000FFFF80111848130102C00380C00380C079 -:100C30000380C00380C00380C00380C00380C00362 -:100C400080C00380C00380C00380FFFF80FFFF805F -:100C50000003800003800003800003800003800005 -:100C600003800003800003800003800003800003F2 -:100C700080111848130102FFFF80FFFF80C00000B1 -:100C8000C00000C00000C00000C00000C00000C0E4 -:100C90000000C00000C00000FFFF80FFFF800003D5 -:100CA0008000038000038000038000038000038035 -:100CB000000380000380FFFF80FFFF80FFFF8011A3 -:100CC0001848130102FFFF80FFFF80C00000C00032 -:100CD00000C00000C00000C00000C00000C0000054 -:100CE000C00000C00000FFFF80FFFF80C00380C085 -:100CF0000380C00380C00380C00380C00380C003A2 -:100D000080C00380FFFF80FFFF80FFFF801018304E -:100D1000130202FFFFFFFF000700070007000700A4 -:100D2000070007000700070007000700070007008B -:100D3000070007000700070007000700070007007B -:100D4000070007111848130102FFFF80FFFF80C052 -:100D50000380C00380C00380C00380C00380C00341 -:100D600080C00380C00380C00380FFFF80FFFF803E -:100D7000C00380C00380C00380C00380C00380C064 -:100D80000380C00380C00380FFFF80FFFF80FFFF60 -:100D900080111848130102FFFF80FFFF80C003800D -:100DA000C00380C00380C00380C00380C00380C034 -:100DB0000380C00380C00380FFFF80FFFF8000032B -:100DC0008000038000038000038000038000038014 -:100DD000000380000380FFFF80FFFF80FFFF80058E -:100DE00010100B0502F8F8F8F8F8000000000000F9 -:100DF000F8F8F8F8F80710100B03023E3E3E3E3EAE -:100E00000000003E3E3E3E3EF0F0F0FFFFFFFFFFE1 -:100E1000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 -:100E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 -:100E3000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 -:100E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00B1 -:100E5000090F00FD0A01E803D820FFFD0CFD0BFD82 -:100E600000000009000C010B0B0904008080808049 -:100E70008080800000808004030309030790909025 -:100E80000608080901014848FC4848FC4848070B87 -:100E90000B0901FF107C929050381412927C1007BD -:100EA0000A0A09010042A4A4481010244A4A8407EF -:100EB0000A0A09010060909090606294889462012F -:100EC0000303090407808080030C0C0903FF204002 -:100ED00040808080808080404020030C0C0903FF0C -:100EE0008040402020202020204040800707070924 -:100EF000010310925438549210070707090101109A -:100F00001010FE1010100205050904FDC0C040407D -:100F100080070101090104FE020202090400C0C0A9 -:100F2000070A0A090100020404081010204040804A -:100F3000070A0A0901003844828282828282443888 -:100F4000070A0A090100103050901010101010FE0E -:100F5000070A0A0901007C8282040810204080FEF2 -:100F6000070A0A090100FE0204081C020202827C30 -:100F7000070A0A090100040C14244484FE04040432 -:100F8000070A0A090100FE8080BCC2020202827CBC -:100F9000070A0A0901003C408080BCC28282827C30 -:100FA000070A0A090100FE020404080810102020A4 -:100FB000070A0A09010038448244384482824438CE -:100FC000070A0A0901007C828282867A020204787A -:100FD000020707090400C0C0000000C0C0020A0ADE -:100FE0000904FDC0C0000000C0C0404080050A0ADE -:100FF00009020008102040808040201008070404E7 -:10100000090102FE0000FE050A0A090200804020D4 -:1010100010080810204080070A0A0901007C82821B -:1010200002040810100010070A0A0901007C8282DD -:101030009EA2A69A80807C070A0A09010010284413 -:10104000828282FE828282070A0A090100F8848273 -:1010500084F884828284F8070A0A0901007C82806D -:101060008080808080827C070A0A090100F88482DF -:10107000828282828284F8070A0A090100FE808047 -:1010800080F880808080FE070A0A090100FE8080C7 -:1010900080F88080808080070A0A0901007C8280B5 -:1010A00080808E8282827C070A0A09010082828205 -:1010B00082FE8282828282050A0A090200F82020CA -:1010C000202020202020F8080A0A0901001F04041B -:1010D00004040404048478070A0A0901008284884D -:1010E00090E0A090888482070A0A0901008080802D -:1010F000808080808080FE070A0A0901008282C603 -:10110000AAAA9292828282070A0A0901008282C2F6 -:10111000A2928A86828282070A0A0901007C828260 -:101120008282828282827C070A0A090100FC828212 -:1011300082FC8080808080070C0C0901FE7C82820A -:1011400082828282A2927C0806070A0A090100FCB8 -:10115000828282FC9088848282070A0A0901007CCC -:10116000828280700C0282827C070A0A090100FEDA -:10117000101010101010101010070A0A0901008238 -:1011800082828282828282827C070A0A090100822C -:10119000828244444428282810070A0A0901008250 -:1011A00082828292929292AA44070A0A09010082DC -:1011B000824428101028448282070A0A090100820A -:1011C000824428101010101010070A0A090100FEAE -:1011D0000204081020408080FE040C0C0903FFF07C -:1011E00080808080808080808080F0070A0A0901EA -:1011F0000080404020101008040402040C0C090276 -:10120000FFF010101010101010101010F007040450 -:10121000090106102844820801010900FFFF0303A9 -:10122000030903088040200707070901007C020228 -:101230007E82867A070A0A090100808080BCC28209 -:101240008282C2BC0707070901007C8280808082FD -:101250007C070A0A0901000202027A8682828286DB -:101260007A0707070901007C8282FE80807C070ADA -:101270000A0901001C22222020F820202020070A31 -:101280000A0901FD7A84848478807C82827C070A42 -:101290000A090100808080BCC28282828282050AA3 -:1012A0000A090200600000E02020202020F8060D3E -:1012B0000D0901FD0C00001C040404040484848452 -:1012C00078070A0A090100808080828CB0C0B08C47 -:1012D00082050A0A090200E0202020202020202088 -:1012E000F8070707090100EC929292929282070791 -:1012F00007090100BCC282828282820707070901B6 -:10130000007C82828282827C070A0A0901FDBCC2BB -:10131000828282C2BC808080070A0A0901FD7A8627 -:10132000828282867A0202020707070901009C6214 -:1013300042404040400707070901007C82807C0250 -:10134000827C0709090901002020FC20202020229E -:101350001C0707070901008484848484847A0707B2 -:101360000709010082824444282810070707090161 -:10137000008282929292AA440707070901008244E0 -:101380002810284482060A0A0901FD848484848482 -:101390008C74048478070707090100FE04081020F4 -:1013A00040FE050C0C0903FF3840404020C0C0201F -:1013B00040404038010C0C0904FF80808080808010 -:1013C000808080808080050C0C0901FFE0101010E7 -:1013D00020181820101010E007030309010762927B -:1013E0008CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 -:1013F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD -:10140000FFFF00000009000C010B0B0904008080A5 -:101410000000808080808080800608080901000824 -:10142000789490A0A47840070A0A0901001C2220A1 -:1014300020F8202060A25C070606090103827C4494 -:10144000447C82070A0A090100828244287C107CBD -:10145000101010010B0B0904FF8080808080008039 -:1014600080808080040B0B0902FF60908060909068 -:101470009060109060050202090209888808090935 -:101480000900013C4299A5A1A599423C050707091D -:101490000103609070907800F807080809010112B4 -:1014A00024489090482412060404090102FC040414 -:1014B00004050101090204F80809090900013C4278 -:1014C000B9A5B9A9A5423C060101090109FC04041A -:1014D00004090306609090600709090901011010D2 -:1014E00010FE10101000FE040606090104609010A2 -:1014F0006080F004060609010460902010906003EB -:1015000003030903082040800709090901FE8282BC -:10151000828282C6BA8080070A0A0901007E8A8A0E -:101520008A7A0A0A0A0A0A020202090404C0C004EA -:1015300003030902FD30906003060609010440C060 -:10154000404040E00506060901047088887000F8F4 -:101550000708080901019048241212244890070A3C -:101560000A09010040C0404042E60A121A06070A72 -:101570000A09010040C040404CF2020C101E070A4C -:101580000A0901006090201092660A121A06070AE2 -:101590000A0901001000101020408082827C070C94 -:1015A0000C0901004020100038448282FE828282B1 -:1015B000070C0C0901000408100038448282FE82E6 -:1015C0008282070C0C0901001028440038448282F2 -:1015D000FE828282070B0B090100629C0038448264 -:1015E00082FE828282070B0B0901004444003844CA -:1015F0008282FE828282070B0B0901003844382860 -:10160000448282FE828282070A0A0901006E90905B -:101610009090FC9090909E070D0D0901FD7C8280BA -:101620008080808080827C184830070C0C09010083 -:1016300040201000FE404078404040FE070C0C095E -:10164000010004081000FE404078404040FE070CB6 -:101650000C09010010284400FE404078404040FE44 -:10166000070B0B090100444400FE40407840404015 -:10167000FE050C0C09020080402000F820202020EC -:101680002020F8050C0C09020008102000F820208A -:1016900020202020F8050C0C09020020508800F8BA -:1016A000202020202020F8050B0B0902008888004C -:1016B000F8202020202020F8080A0A0900007C4297 -:1016C0004141E1414141427C070B0B090100629C11 -:1016D0000082C2A292928A8682070C0C0901004005 -:1016E0002010007C8282828282827C070C0C09019D -:1016F00000040810007C8282828282827C070C0CAB -:10170000090100102844007C8282828282827C0748 -:101710000B0B090100629C007C8282828282827CA7 -:10172000070B0B0901004444007C82828282828282 -:101730007C07070709010182442810284482070C0E -:101740000C0901FF027C868A8A9292A2A2C27C8046 -:10175000070C0C09010040201000828282828282E4 -:10176000827C070C0C09010004081000828282822E -:101770008282827C070C0C090100102844008282BE -:1017800082828282827C070B0B0901004444008222 -:101790008282828282827C070C0C0901000408107C -:1017A000008282442810101010070A0A09010080E4 -:1017B00080FC828282FC808080060A0A090100384F -:1017C000444448D04844444458070B0B09010020C6 -:1017D0001008007C02027E82867A070B0B0901004A -:1017E000040810007C02027E82867A070B0B090136 -:1017F00000102844007C02027E82867A070A0A09C9 -:101800000100324C007C02027E82867A070A0A09B5 -:1018100001004444007C02027E82867A070B0B0999 -:101820000100182418007C02027E82867A070707CE -:101830000901006C92127C90926E070A0A0901FD60 -:101840007C82808080827C184830070B0B09010065 -:10185000402010007C8282FE80807C070B0B0901F7 -:1018600000040810007C8282FE80807C070B0B093C -:101870000100102844007C8282FE80807C070A0AD6 -:101880000901004444007C8282FE80807C050B0BB1 -:1018900009020080402000E02020202020F8050BD5 -:1018A0000B09020010204000E02020202020F80634 -:1018B0000B0B090100205088007010101010107CD4 -:1018C000050A0A090200909000E02020202020F85C -:1018D000070B0B090100483050087C82828282820B -:1018E0007C070A0A090100629C00BCC282828282D3 -:1018F00082070B0B090100402010007C828282824B -:10190000827C070B0B090100040810007C82828294 -:1019100082827C070B0B090100102844007C828224 -:101920008282827C070A0A090100629C007C828212 -:101930008282827C070A0A0901004444007C828278 -:101940008282827C07090909010010381000FE001C -:101950001038100709090901FF027C8A8A92A2A2A5 -:101960007C80070B0B0901004020100084848484D4 -:1019700084847A070B0B0901000408100084848416 -:101980008484847A070B0B090100102844008484A6 -:10199000848484847A070A0A090100484800848400 -:1019A000848484847A060E0E0901FD0810200084C8 -:1019B000848484848C74048478070C0C0901FD8071 -:1019C0008080BCC28282C2BC808080060D0D09016D -:1019D000FD48480084848484848C74048478A92914 -:1019E00011241FBECFEFD8E0DEBFCDBF13E0A0E0D3 -:1019F000B1E0E4EEFAE502C005900D92A23EB10717 -:101A0000D9F725E0A2EEB3E001C01D92A432B207DF -:101A1000E1F71CE0C0EFDCE004C02197FE010E946A -:101A20006A2DCF3ED107C9F70E946A210C94702D10 -:101A30000C9400004F925F926F927F928F929F92D0 -:101A4000AF92BF92CF92DF92EF92FF920F931F93CC -:101A5000CF93DF9300D000D0CDB7DEB74B015C0150 -:101A600029013A016701780120E030E0A9010E94D4 -:101A7000842B87FDA6C020E030E0A901C301B2019C -:101A80000E94842B87FD9DC020E030E0A901C801A1 -:101A9000B6010E94842B87FD94C081E02091C4048C -:101AA0003091C5042130310509F080E08093E504D0 -:101AB0008092AA049092AB04A092AC04B092AD04C0 -:101AC0004092AE045092AF046092B0047092B104A0 -:101AD000C092B204D092B304E092B404F092B50480 -:101AE0006091D8047091D9048091DA049091DB045C -:101AF0000E94312C20E030E04AE754E40E94892B18 -:101B000069837A838B839C838092B6049092B70416 -:101B1000A092B804B092B9049B01AC01C301B20118 -:101B20000E94E82C2B013C014092BA045092BB0465 -:101B30006092BC047092BD0429813A814B815C8122 -:101B4000C701B6010E94892B6B017C01C092BE04C3 -:101B5000D092BF04E092C004F092C1048091C2040C -:101B60009091C304019769F5A501940160E070E0CC -:101B7000CB010E94172B6093B6047093B704809337 -:101B8000B8049093B904A301920160E070E0CB0126 -:101B90000E94172B6093BA047093BB048093BC041B -:101BA0009093BD04A701960160E070E0CB010E9414 -:101BB000172B6093BE047093BF048093C00490936E -:101BC000C1040F900F900F900F90DF91CF911F9154 -:101BD0000F91FF90EF90DF90CF90BF90AF909F90CC -:101BE0008F907F906F905F904F90089580E0089560 -:101BF0002091EE043091EF042817390799F1909362 -:101C0000EF048093EE04009739F120910105FC0167 -:101C1000211129C03596E491E09302050C96FC0150 -:101C200084918093030580910205082E000C990B86 -:101C300020910305821B910927FD939520910405AE -:101C4000203441F0829FC001112426E096958795AB -:101C50002A95E1F78093050586EF9DE090930005B6 -:101C60008093FF040895213031F43F96E491E0938E -:101C700002054096D4CF3D96E491E09302050E967E -:101C8000CECFFC01808D8F5F0895833081F028F4E2 -:101C9000813099F08230A9F008958730A9F088301A -:101CA000C9F08430B1F4809180008F7D03C08091B1 -:101CB00080008F7780938000089584B58F7784BDEE -:101CC000089584B58F7DFBCF8091B0008F7780938E -:101CD000B00008958091B0008F7DF9CFCF93DF934E -:101CE000282F30E0F901E255FE4F8491F901E656C4 -:101CF000FE4FD491F901EA57FE4FC491CC23A1F0D5 -:101D000081110E94450EEC2FF0E0EE0FFF1FE4580A -:101D1000FE4FA591B491EC91ED2381E090E009F4A0 -:101D200080E0DF91CF91089580E090E0FACF1F939B -:101D3000CF93DF93282F30E0F901E255FE4F8491D5 -:101D4000F901E656FE4FD491F901EA57FE4FC491CE -:101D5000CC23A9F0162F81110E94450EEC2FF0E044 -:101D6000EE0FFF1FEE58FE4FA591B4918FB7F89478 -:101D7000EC91111108C0D095DE23DC938FBFDF9169 -:101D8000CF911F910895DE2BF8CFCF93DF9390E092 -:101D9000FC01E656FE4F24918A579E4FFC01849128 -:101DA0008823C9F090E0880F991FFC01E859FE4F85 -:101DB000A591B491FC01EE58FE4FC591D4916111EB -:101DC0000DC09FB7F8948C91209582238C938881C5 -:101DD000282328839FBFDF91CF910895623051F46B -:101DE0009FB7F8943C91822F809583238C93E88150 -:101DF0002E2BEFCF8FB7F894EC912E2B2C938FBF17 -:101E0000EACFCF93DF93EC0161E089E00E94C50E39 -:101E1000209731F460E089E0DF91CF910C94970E28 -:101E2000CF3FD10511F461E0F6CFE7EBF1E0E491AB -:101E3000E33029F140F4E130B1F0E230D9F0C038BC -:101E4000D1058CF7E7CFE73021F1E83051F1E430EC -:101E5000B1F780918000806280938000D0938B00E6 -:101E6000C0938A0004C084B5806884BDC7BDDF917B -:101E7000CF91089584B5806284BDC8BDF8CF8091AC -:101E80008000806880938000D0938900C093880090 -:101E9000EECF8091B00080688093B000C093B30013 -:101EA000E6CF8091B00080628093B000C093B40010 -:101EB000DECF3FB7F8948091A4049091A504A0913F -:101EC000A604B091A70426B5A89B05C02F3F19F022 -:101ED0000196A11DB11D3FBFBA2FA92F982F8827AA -:101EE000BC01CD01620F711D811D911D42E0660F85 -:101EF000771F881F991F4A95D1F708958F929F9257 -:101F0000AF92BF92CF92DF92EF92FF924B015C01B2 -:101F10000E94590F6B017C010E94590F6C197D09B9 -:101F20008E099F09683E734081059105A8F321E061 -:101F3000821A9108A108B10888EEC80E83E0D81E65 -:101F4000E11CF11C81149104A104B10429F7FF9054 -:101F5000EF90DF90CF90BF90AF909F908F900895BB -:101F60002FB7F8946091A0047091A1048091A2040D -:101F70009091A3042FBF0895AF92BF92CF92DF92AA -:101F8000EF92FF920F931F93CF93DF936C017B012E -:101F90008B01040F151FEB015E01AE18BF08C017BF -:101FA000D10759F06991D601ED91FC910190F08132 -:101FB000E02DC6010995892B79F7C501DF91CF91F5 -:101FC0001F910F91FF90EF90DF90CF90BF90AF9057 -:101FD00008950895DC011696ED91FC9117971296DD -:101FE0008C91481B477081E090E001C0880F4A95B2 -:101FF000EAF7E60FF11D3081222319F0832B80834D -:10200000089580958323FBCFFB014181DC0112966B -:102010002C911297421768F013962C91139724175E -:1020200040F0608115962C91621718F424810C946D -:10203000EA0F0895FC0180819281980F928321819B -:10204000921760F494819F5F94839381890F821724 -:1020500010F08FEF820F838381E0089580E0089570 -:10206000FC01128280818150838314820895DB01F8 -:10207000ED91FC9109940F931F93CF93DF931F92DF -:10208000CDB7DEB70091EC041091ED04E0911B0593 -:10209000F0911C0582E0099530E020E04AE0B801AB -:1020A0008AEE94E00E943710182FE0911B05F09102 -:1020B0001C0583E00995E0911B05F0911C0580E06B -:1020C00009951123B9F16091EC047091ED049E0122 -:1020D0002F5F3F4F46E48AEE94E00E9437108981DB -:1020E0008093EA046091EC047091ED049E012F5FEF -:1020F0003F4F47E48AEE94E00E9437108981809335 -:10210000EB046091EC047091ED0430E020E048E4D1 -:102110008AEE94E00E9437108093F5046091EC04FD -:102120007091ED042DE135E047E18AEE94E00E94E4 -:10213000371011E0812F0F90DF91CF911F910F91F8 -:102140000895CF93DF9380912305811105C081E02D -:10215000809323050E943B10C091EC04D091ED04C4 -:10216000E0911B05F0911C0582E00995E0911B05AB -:10217000F0911C0581E0099530E020E044E1BE01CA -:102180008AEE94E00E9437102DE135E047E1BE0170 -:102190008AEE94E00E943710E0911B05F0911C0537 -:1021A00080E0DF91CF9109940F931F93CF93E0913B -:1021B000F804F091F904309719F08AEE94E009954B -:1021C0000091EC041091ED04E0911B05F0911C05C9 -:1021D00082E00995E0911B05F0911C0581E00995CD -:1021E00030E020E045E1B8018AEE94E00E9437102B -:1021F000C82F882341F02DE135E047E1B8018AEE90 -:1022000094E00E943710E0911B05F0911C0580E0DE -:1022100009958C2FCF911F910F9108950B96FC017A -:10222000849108950A96FC0184910895FC0184919B -:1022300008950E941611882321F0823011F083E066 -:10224000089586E00895FC01E60FF11D849190E069 -:10225000982F88273196E4918E0F911D089568E09C -:102260000C94231166E00C9423115F926F927F927D -:102270008F929F92AF92BF92CF92DF92EF92FF9296 -:102280000F931F93CF93DF93EC01E62EF42EC22E13 -:102290000C811D81C8010E941611D82E8C819D8150 -:1022A0000E941911982E21E0AA24AA94D21202C0E9 -:1022B0002FE0A22E8C819D810E941211D82E8C813C -:1022C0009D810E940E11B82E8C819D810E942F113C -:1022D000E0E6EC1578F4009769F0080F191F91E615 -:1022E000D92EBC14C0F4188A1B8A1C8A198A1A8A2F -:1022F00080E0A0C08C819D810E943211F0E4FC1529 -:1023000038F4009729F0080F191F81E4D82EE9CF7F -:102310000F5E1F4FE6CFBD1430F3892D90E0F8011A -:1023200024912F3F31F40F5F1F4FBD14E1F2D3947E -:10233000F6CFCD1072C08C819D810E94161198013C -:102340002F5F3F4FF801882319F0823009F04EC00B -:1023500084918B8BF90124912C8BF8013396E491B5 -:10236000E88BF8013496E491E98BF8013596E49115 -:10237000EA8B0115110509F4BBCF8C819D810E9468 -:1023800019113C89F31A9A89F91A9FEF930F9F0D3F -:102390002CA94EA94F1508F449C0921718F49F159F -:1023A00008F047C02B899989E90E9FEF920F9E0D87 -:1023B0004BA95DA95E1508F44DC0941718F49E153D -:1023C00008F037C0080F111D295F722E769476949D -:1023D00076946F2C630E5E01FCE1AF0EB11C872C6E -:1023E000912CF61431F15E2C68014AC08491982F2B -:1023F0009F7092509A8B82958F70898BF9012491EE -:10240000822F8F708C8B22952F702B8BF801329638 -:10241000E491E295EF70E88BACCF3296E491EA213B -:10242000E80FF92FF11D0E0F1F1F7FCF921708F035 -:10243000B6CF8889DF91CF911F910F91FF90EF90D8 -:10244000DF90CF90BF90AF909F908F907F906F90D4 -:102450005F900895941708F0B2CFEBCFF601849106 -:102460006A817B815C8EFD8E1F8E8E8F95014BE382 -:10247000CE010E943710FFEFCF1ADF0A28E0520E7C -:102480008C2D801B871550F3080D191DF394A9CFCF -:10249000EF92FF920F931F93CF93DF93F82E062FA7 -:1024A000E42E152FE091FF04F09100058AEE94E0F0 -:1024B0000995080FCE2DD12F10E02991211108C0C8 -:1024C000812FDF91CF911F910F91FF90EF90089591 -:1024D000402F6F2D8AEE94E00E943511F80E180FF0 -:1024E000ECCF0F931F93CF93DF938C01E091FF0408 -:1024F000F09100058AEE94E00995D82FC0E0F8012C -:102500002491222351F04D2F6C2F8AEE94E00E94EB -:102510003511C80F0F5F1F4FF2CF8C2FDF91CF9176 -:102520001F910F9108952EE93FE0009709F4089557 -:10253000F9013197F1F70197F8CFCF93DF9300D0EE -:10254000CDB7DEB720ED37E03A8329839091BC0008 -:10255000982311F081E00FC029813A81232B81F467 -:102560008091A90481FDF6CF8091A80481110DC04E -:1025700091E09093A8040F900F90DF91CF91089570 -:1025800029813A8121503109DFCF80E0F4CF84EAFC -:102590008093BC0061E080E80E949D12811102C01E -:1025A00080E008958091B900887F883051F08031B3 -:1025B00041F08091A8048111F3CF82E08093A804B8 -:1025C000EFCF88E78093BB0084E88093BC0062E093 -:1025D00080E80E949D12882319F38091A90481FD4F -:1025E00005C08091B900887F883119F781E008958E -:1025F00084E98093BC0064E080E10C949D12809398 -:10260000BB0084E88093BC0063E080E80E949D12D8 -:102610008823A1F08091A90481FD0DC08091B900AB -:10262000887F883241F08091A804811106C092E031 -:102630009093A804089581E0089580E00895109291 -:10264000A80408958093A9041092B90084FF05C0DE -:102650008CE08093B8000C941F1388E4FACFCF93DA -:10266000DF93FC0123A5222389F0EC010E94C7120D -:10267000811104C080E0DF91CF9108958EA1811176 -:1026800007C00E94FF128823A9F31BA681E0F3CFA5 -:1026900080E4F7CF0F931F93CF93DF93C62FD42FF0 -:1026A0008901633001F138F4613099F0623009F446 -:1026B00049C0C1E012C0663029F1673091F1653040 -:1026C000C1F70E942F13811117C00E94F812C0E0B9 -:1026D00004C0FC0186A50E9422138C2FDF91CF91AC -:1026E0001F910F910895FC0116A221E023A741112B -:1026F000E0CF0E94F812DDCF8D2F0E94FF128111D2 -:10270000D8CFE3CF0E942F138823F9F2DD2389F27B -:10271000F80181918F010E94FF128823B1F2D150FC -:10272000F5CF0E942F13882381F2DD2311F2F801E7 -:1027300084910E94FF12C82F882379F20F5F1F4FE8 -:10274000D150F3CFFC0146A321E023A7B2CFDB0198 -:102750001496ED91FC9130E020E065E00994DB01F6 -:102760001496ED91FC9130E020E062E00994DB01E9 -:102770001496ED91FC9130E020E063E00994CF9253 -:10278000DF92EF92FF920F931F93CF93DF938C0111 -:102790007B016A0180E0F601C491811110C081E0E3 -:1027A000CF3F49F04C2FB701C8010E94A7138823DF -:1027B00009F444C080E0BFEFCB1ADB0AECCF4FEF47 -:1027C000CF3F89F3CE3FD9F1C03FA0F7C03E38F0EC -:1027D0004C2F4F70B701C8010E94AF13EBCFC03D23 -:1027E00038F04C2F4F70B701C8010E94B713E2CFE9 -:1027F000C03CF8F0D7011496ED91FC9130E020E058 -:1028000040E064E0C8010995C295C07FCE5FD0E08A -:10281000CE010E949312D7011496ED91FC9130E005 -:1028200020E041E064E0C8010995CE010E949312C6 -:10283000C1CFC7FDBFCF8C2F90E0F8CF80E0DF91F4 -:10284000CF911F910F91FF90EF90DF90CF9008955F -:10285000AF92BF92CF92DF92FF920F931F93CF93CD -:10286000DF936C018B01F42EE90180E1481709F434 -:102870007EC0841778F1AAE04A1709F461C0BFE06E -:102880004B1709F47FC0F80102811381F2E3FF16B0 -:1028900009F4DDC0FF1508F48EC085E1F81609F4CF -:1028A000DBC0A7E1FA1609F4ECC0B4E1FB1265C085 -:1028B000D8011696ED91FC91179715968C918E0F75 -:1028C0009F2F911D11928E179F07E1F7C8010E945B -:1028D000301053C0E1E14E1709F451C0F5E14F1338 -:1028E000D2CFFB01A280B38042EA50E0C6010E9431 -:1028F000BF13D50114964C91406BB801C6010E94DC -:10290000A71341E0B801C6010E94AF13F50126816B -:102910003781D8011496ED91FC91D50115964C9113 -:1029200066E0C601099581111CC080E0DF91CF915E -:102930001F910F91FF90DF90CF90BF90AF900895BF -:10294000DB011496ED91FC9130E020E042E061E083 -:10295000C60109954AEA50E0B801C6010E94BF13BA -:1029600092CF40E0B801C6010E94B7138CCF49E96D -:1029700050E0B801C6010E94BF1381E0D7CF4EE8F6 -:1029800050E0F7CF41E0C6010E94B71340E0B80124 -:10299000C6010E94AF1341E8B801C6010E94A71307 -:1029A0004881B801C6010E94A71340E0B801C601E2 -:1029B0000E94B713E2CFE6E4FE1609F46CC0F7E418 -:1029C000FF1609F46DC08BE3F812D7CF99818B8184 -:1029D00038E0390F813031F0833011F0392F02C0E7 -:1029E000392F985021E0D80113964C91491708F4DB -:1029F00020E041E0391708F040E091E0F801528111 -:102A0000351708F490E0322F342B932319F4242344 -:102A100009F4B3CFFA80D12CC12C843048F490E073 -:102A2000FC01EA5EFD4FC0808E5E9D4FDC01DC90B4 -:102A3000F7FE04C0BE01C8010E94041088818C0DFD -:102A4000888389818D0D8983FF0C91F796CFBE0114 -:102A5000C8010E94041091CFC8010E941A10882357 -:102A600009F463CFD8011696ED91FC91179715964E -:102A70008C918E0F9F2F911D11928E179F07E1F75A -:102A80007CCF1882F80182818983858181508A8375 -:102A900083818B8372CFD80115968C9188836DCFFB -:102AA000F8018181FBCF80917A00806980937A0060 -:102AB0008EE480937C0061E070E080E090E00E9412 -:102AC0007E0F83B7817F826083BF80E130E020E0AA -:102AD00093B7916093BF889593B79E7F93BF909172 -:102AE0007A0096FDFCCF4091780050917900240F38 -:102AF000351F815069F780917A008F7780937A0033 -:102B000084E0369527958A95E1F750E040E064EB44 -:102B10007BE281E190E00E94BC2AC9010895809186 -:102B20007A00806980937A0088EC80937C0064E16D -:102B300070E080E090E00E947E0F83B7817F82602A -:102B400083BF80E270E060E093B7916093BF8895A7 -:102B500093B79E7F93BF90917A0096FDFCCF209112 -:102B6000780030917900620F731F815069F780916E -:102B70007A008F7780937A0076956795769567953A -:102B800062527A4090E080E00E94312C26EF38E2D9 -:102B90004CE151E40E94892B089590917A0090694C -:102BA00090937A008E50806480937C0083B7817FFD -:102BB000826083BF20E290E080E033B7316033BFB2 -:102BC000889533B73E7F33BF30917A0036FDFCCF16 -:102BD0004091780050917900840F951F215069F73A -:102BE00020917A002F7720937A0025E0969587959B -:102BF0002A95E1F708958FE00E94CD15A0916E040B -:102C0000B0916F049C010E94082B0E94332C28E590 -:102C100039E743E353E40E94892B0E94022CCB0145 -:102C200008950F931F93CF938091B201882399F059 -:102C3000CFEF0FEE11E061E085E00E94970EC80132 -:102C40000197F1F760E085E00E94970EC8010197B7 -:102C5000F1F7C15081F7CF911F910F910895CF9255 -:102C6000DF92EF92FF920F931F93CF93DF93D82EB3 -:102C7000C92E86E00E946E0EC1E0892B09F0C0E0EB -:102C80000E94A11081E4E82E8EE0F82E8FE49EE0F1 -:102C90000E94F80DF0920005E092FF040D2D1C2D0E -:102CA000D0E0F801419151918F016D2F80E00E9499 -:102CB0004812D05FD038A9F70E94D4108111E6CF16 -:102CC000CC2369F086E00E946E0EC1E0892B39F0BA -:102CD0006AE070E080E090E00E947E0FC0E086E055 -:102CE0000E946E0E892B61F7C111ECCFDF91CF915D -:102CF0001F910F91FF90EF90DF90CF900C941116E1 -:102D00005F926F927F928F929F92AF92BF92CF927B -:102D1000DF92EF92FF920F931F93CF93DF939090E8 -:102D20008E04AA24A394911001C0A12C80916C015F -:102D30008150990B1092750410927404880F991F9A -:102D4000909373048093720481E090E090937104F7 -:102D500080937004892D90E0880F991F90938104CF -:102D60008093800486E00E946E0EDD24D394892B2C -:102D700009F0D12C01E41EE046E0B42EC09180049D -:102D8000D0918104D595C795CC2E7E01FF24C70133 -:102D90008A0D911DA7FC9A9589199109A12C97FD7F -:102DA00006C08330910514F082E090E0A82E0E94C6 -:102DB000A1108A2D0A2C000C990B3C012FEF621AEE -:102DC000720A629420EF62225C2C5A18E81AF90AFF -:102DD0008FE49EE00E94F80D109300050093FF041D -:102DE00084E790E00E9471124AE152E0662D80E093 -:102DF0000E944812912C812C712C852D870D739483 -:102E000090916C01891780F4C701880D991DB89EB7 -:102E1000A001B99E500D11244B525E4F672D629553 -:102E2000607F8CE00E9448128FEF881A980A23E096 -:102E30007212E3CF0E94D4108111CACFDD2061F05D -:102E400086E00E946E0E892B39F06AE070E080E027 -:102E500090E00E947E0FD12C86E00E946E0E892B9E -:102E6000B1F4D11014C00E941116C0928E04DF91EB -:102E7000CF911F910F91FF90EF90DF90CF90BF9077 -:102E8000AF909F908F907F906F905F9008959C2E51 -:102E900075CF2F923F924F925F926F927F928F9257 -:102EA0009F92AF92BF92CF92DF92EF92FF920F93D9 -:102EB0001F93CF93DF9300D000D0CDB7DEB77C0156 -:102EC000942EFC012080318077247394411101C03D -:102ED000712C70E0759567956A8310927504109255 -:102EE000740462507109660F771F709373046093C6 -:102EF000720481E090E09093710480937004892DB6 -:102F000090E0880F991F909381048093800486E05D -:102F10000E946E0E66246394892B09F0612CCC24E8 -:102F2000CA944FE7D42E51E4A52E5EE0B52E8091D1 -:102F3000800490918104959587959C838B835B8019 -:102F40008C011127C801870D911D77FC9A9589196D -:102F50009109712C97FD06C08330910514F082E031 -:102F600090E0782E0E94A110272D072C000C330B27 -:102F7000C9010196E82FE295E07FE9832C9DC0010D -:102F80002D9D900D3C9D900D1124080F191F000FD1 -:102F9000111F8FE49EE00E94F80DB0920005A092F0 -:102FA000FF04F7014081518160E080E00E944812F7 -:102FB000FCE12F16F2E03F0661F440918E0486E0BA -:102FC000489FA00111244B525E4F60E086E30E94AF -:102FD00048124AE152E0698180E00E944812882448 -:102FE0008394912C412C4394852D840D87199A81CB -:102FF000891778F4F401EE0FFF1FE00FF11FEE0DBB -:10300000FF1D40815181642D6295607F8CE00E949C -:103010004812EFEF8E1A9E0AF3E04F12E4CF0E949F -:10302000D4108111B6CF662061F086E00E946E0E4A -:10303000892B39F06AE070E080E090E00E947E0F1A -:10304000612C86E00E946E0E892BE1F461101AC09B -:103050000E941116852D0F900F900F900F90DF9109 -:10306000CF911F910F91FF90EF90DF90CF90BF9085 -:10307000AF909F908F907F906F905F904F903F9018 -:103080002F9008959B8053CF3F924F925F926F9203 -:103090007F928F929F92AF92BF92CF92DF92EF92E8 -:1030A000FF920F931F93CF93DF93CDB7DEB72E9789 -:1030B0000FB6F894DEBF0FBECDBF80919804882371 -:1030C00009F4A5C110929B0410929C0410929D04D7 -:1030D00010929E0480909B0490909C04A0909D046C -:1030E000B0909E04C0908904D0908A04E0908B0434 -:1030F000F0908C04A7019601C501B4010E94172B22 -:103100002B013C0120E030E0A9010E94E32C1816BD -:103110000CF0A0C1C301B2010E94022C8091760480 -:10312000882309F4B8C1C0926304D0926404E09289 -:103130006504F0926604E12CF12C00EA10E420E032 -:1031400030E040E450E46E31710540F0E12CF12CA8 -:1031500000E81FE320E030E040E05FE360E070E083 -:1031600080E391E40E941A0D8091E404882309F41D -:103170002AC10E94B00F6D837E838F8398878091D0 -:10318000CC049091CD04A091CE04B091CF044D8198 -:103190005E816F817885481B590B6A0B7B0B809190 -:1031A000D8049091D904A091DA04B091DB044817B7 -:1031B00059076A077B0708F406C1E091C604F0913D -:1031C000C70480819181A281B38189839A83AB8373 -:1031D000BC83E091CA04F091CB049C01AD016081F5 -:1031E0007181828193810E94172B4B015C01209198 -:1031F000D4043091D5044091D6045091D70469810C -:103200007A818B819C810E94172B6B017C0120911C -:10321000BA043091BB044091BC045091BD04C50177 -:10322000B4010E94E82C2091D0043091D104409147 -:10323000D2045091D3040E94182B2B013C014092E0 -:10324000D0045092D1046092D2047092D304309092 -:10325000E50431101AC02091B6043091B7044091B2 -:10326000B8045091B904C701B6010E94E82C9B0133 -:10327000AC01C301B2010E94172B6093D00470937C -:10328000D1048093D2049093D3044090D004509002 -:10329000D1046090D2047090D3041091E004909116 -:1032A000E1049E87A091E204AD870091E304212F01 -:1032B000392F4A2F502FC301B2010E94E32C181658 -:1032C0000CF0CCC0812F9E85AD85B02F8093D004AB -:1032D0009093D104A093D204B093D304332009F483 -:1032E000D6C02091B6043091B7044091B8045091F3 -:1032F000B904C501B4010E94E82C4B015C01209186 -:10330000BE043091BF044091C0045091C104C70174 -:10331000B6010E94E82C9B01AC016091D004709131 -:10332000D1048091D2049091D3040E94172BA5015F -:1033300094010E94182B6B017C019B01AC01612F51 -:103340007E858D85902F0E94842B87FD18C010915B -:10335000DC049091DD049E87A091DE04AD8700918E -:10336000DF04212F392F4A2F502FB601C7010E94A9 -:10337000842B87FD04C01C2DDE86ED860F2DE09189 -:10338000C804F091C904812F9E85AD85B02F80833C -:103390009183A283B38389819A81AB81BC8180931D -:1033A000D4049093D504A093D604B093D7048D8110 -:1033B0009E81AF81B8858093CC049093CD04A09377 -:1033C000CE04B093CF0460919204709193048091E5 -:1033D0009404909195040E94FB2BCB012E960FB67E -:1033E000F894DEBF0FBECDBFDF91CF911F910F913B -:1033F000FF90EF90DF90CF90BF90AF909F908F9015 -:103400007F906F905F904F903F900C94010F809150 -:103410009704609184017091850181110EC08091A3 -:1034200087049091880420919604BC01222329F0FE -:1034300060917F01680F792F711D90E080E00E94FC -:10344000312C60939B0470939C0480939D04909313 -:103450009E0440CEC301B20190585ECE8091DC0440 -:103460009091DD04A091DE04B091DF0489879A87F2 -:10347000AB87BC879C01AD01C301B2010E94842BC4 -:1034800087FF2CCF89859A85AB85BC851FCF812C82 -:10349000912C540134CF20E030E040E05FE3C701DD -:1034A000B6010E94182B9B01AC01C501B4010E941A -:1034B000E32C18164CF4109292041092930410927C -:1034C0009404109295047FCF80E090E0AFE7B3E4DE -:1034D0008093920490939304A0939404B0939504E2 -:1034E00072CF4F925F926F927F928F929F92AF9224 -:1034F000BF92CF92DF92EF92FF92CF93DF938090B3 -:103500006A0490906B04A0906C04B0906D04C0911C -:103510008E04D0E0C501B4010E94FB2B6B017C013D -:1035200020E030E048E453E4C501B4010E94842B5C -:1035300093E0CC0FDD1F9A95E1F7C45DDE4F87FF66 -:1035400031C02881398150E040E0255131094109DD -:103550005109C701B6010E945A2D28EC30E040E025 -:1035600050E00E94BC2ACA01B9016B5E7F4F8F4FA9 -:103570009F4F0E94332C6093890470938A04809338 -:103580008B0490938C04DF91CF91FF90EF90DF90AC -:10359000CF90BF90AF909F908F907F906F905F90F3 -:1035A0004F9008954A805B80712C612C20E030E0C0 -:1035B0004CE853E4C501B4010E94842B87FF1FC06F -:1035C00088809980B12CA12CA7019601285C310933 -:1035D00041095109C301B201681979098A099B0996 -:1035E0000E945A2D20E530E040E050E00E94BC2AC5 -:1035F000CA01B901680D791D8A1D9B1DBACF2C81A6 -:103600003D8150E040E02419350946095709C701BA -:10361000B60168517140810991090E945A2D20E537 -:1036200030E040E050E00E94BC2ACA01B901640DBC -:10363000751D861D971D9DCFDF92EF92FF920F9310 -:103640001F93CF93DF93EC01D62E1CAD0BAD7C0105 -:1036500084E0E80EF11CE98DFA8DC7010995412F30 -:10366000480F2D2D602FC7010E9435119BAD890F8A -:103670008BAF81E090E0DF91CF911F910F91FF9090 -:10368000EF90DF9008950F931F93CF93DF938C01FA -:10369000D0E0C0E0F801EC0FFD1F6491662341F01B -:1036A00086EE94E00E941C1B892B11F02196F2CF2C -:1036B000CE01DF91CF911F910F910895682F86EE73 -:1036C00094E00C941C1B2F923F924F925F926F924A -:1036D0007F928F929F92AF92BF92CF92DF92EF92A2 -:1036E000FF920F931F93CF93DF9300D01F92CDB71C -:1036F000DEB7412C1B821A820EE310E040ECE42E70 -:10370000F12CCC24C394D12C60E2262E7EEB872EA4 -:10371000912C8A81898386E00E946E0E3324339433 -:10372000892B09F0312C1093750400937404F092E6 -:103730007304E0927204D0927104C0927004E2E8C3 -:10374000F0E0F0938104E093800431E4A32E3EE0A6 -:10375000B32E809180049091810495958795582E81 -:10376000FFE18F1342C01093750400937404F0922C -:103770007304E0927204D0927104C092700490922B -:103780008104809280049FE5592E0E94A1108FE44D -:103790009EE00E94F80DB0920005A092FF048FE712 -:1037A00090E00E94711240922105F0E3F09322050F -:1037B0008EE50E945E1B1092210520922205712C3D -:1037C000612C8981681648F580918E04F30196E09A -:1037D000989FE00DF11D1124EB52FE4F80810E9455 -:1037E0005E1BEFEF6E1A7E0AECCF80E65812CDCF4B -:1037F0001093750400937404F0927304E0927204C1 -:10380000D0927104C0927004E0E4F0E0F09381047F -:10381000E093800480E2582EB8CF40922105209298 -:103820002205852D0E945E1B0E94D4108111AFCF0E -:10383000332061F086E00E946E0E892B39F06AE039 -:1038400070E080E090E00E947E0F312C86E00E94C4 -:103850006E0E892B09F07DCF31107BCFA0908E04A6 -:10386000F6E0FA9D50011124C5018B529E4F5C0178 -:10387000EA81FB81E80FF91F50820E9411166AE06D -:1038800070E080E090E00E947E0FEA81FB8131963B -:10389000FB83EA83F9E04F0E8DE248123ACFF5013F -:1038A00015820F900F900F90DF91CF911F910F9184 -:1038B000FF90EF90DF90CF90BF90AF909F908F9050 -:1038C0007F906F905F904F903F902F900895089554 -:1038D00090E080E00895FC0101900020E9F7319725 -:1038E000AF01481B590BBC0186EE94E00C94BC0F51 -:1038F0008F929F92AF92BF920F931F93CF93DF93BC -:10390000CDB7DEB7A1970FB6F894DEBF0FBECDBF1F -:1039100019A2423008F44AE08E010F5D1F4F842E39 -:10392000912CB12CA12CA50194010E94E62AE62F2E -:10393000B901CA01EA30F4F4E05DD801EE938D01DB -:10394000232B242B252B79F790E080E0109719F09A -:10395000CD010E946B1CA1960FB6F894DEBF0FBE7E -:10396000CDBFDF91CF911F910F91BF90AF909F90EE -:103970008F900895E95CE1CF4F925F926F927F92B2 -:103980008F929F92AF92BF92CF92DF92EF92FF926F -:103990000F931F93CF936B017C01742EAC019B019D -:1039A0000E94552D882399F081E292E0CF911F91DA -:1039B0000F91FF90EF90DF90CF90BF90AF909F90CE -:1039C0008F907F906F905F904F900C946B1C46018E -:1039D0005701E894B7F82FEF3FEF4FE75FE7C501D6 -:1039E000B4010E94552D81110DC02FEF3FEF4FE71D -:1039F0005FE7C501B4010E94842B18161CF485E210 -:103A000092E0D4CF2FEF3FEF4FE75FE4C701B6015D -:103A10000E94E32C18161CF489E292E0C7CF2FEF26 -:103A20003FEF4FE75FECC701B6010E94842B87FD93 -:103A3000F3CF20E030E0A901C701B6010E94842B3A -:103A400010E000E087FF08C08DE20E945E1B8C0141 -:103A5000F7FAF094F7F8F094C0E060E070E080E0EE -:103A60009FE37C1641F020E030E040E251E40E9408 -:103A7000892BCF5FF6CFA70196010E94182B2B014F -:103A80003C010E94022C4B015C014AE00E94781C20 -:103A90007C01E00EF11ECC23B1F1C501B4010E94FE -:103AA000312C9B01AC01C301B2010E94172B4B01C9 -:103AB0005C018EE20E945E1BE80EF91EC15018F1F7 -:103AC00020E030E040E251E4C501B4010E94E82C5E -:103AD0002B013C010E94022C4B01B12CA12C4AE08D -:103AE000C501B4010E94781CE80EF91EC501B4019D -:103AF0000E94312C9B01AC01C301B2010E94172B23 -:103B00004B015C01DBCFC701CF911F910F91FF905B -:103B1000EF90DF90CF90BF90AF909F908F907F906D -:103B20006F905F904F9008957F928F929F92AF9287 -:103B3000BF92CF92DF92EF92FF920F931F93CF939A -:103B4000DF937C0186E00E946E0E11E0892B09F064 -:103B500010E091E4C92E9EE0D92E00E22AE0722EF8 -:103B6000C0918004D0918104D595C7950E94A11081 -:103B70004E01B12CA12C8FE49EE00E94F80DD09252 -:103B80000005C092FF04F7014081518160E080E0B0 -:103B90000E94481210922105009322058AE192E0CA -:103BA0000E946B1C7092210500932205209779F5E5 -:103BB00088E690E00E94431B0E94D4108111DBCF65 -:103BC000112361F086E00E946E0E892B39F06AE0C5 -:103BD00070E080E090E00E947E0F10E086E00E949E -:103BE0006E0E892B09F0BCCF1111BACF0E941116AD -:103BF000CE01DF91CF911F910F91FF90EF90DF9059 -:103C0000CF90BF90AF909F908F907F9008954AE0A3 -:103C1000C501B4010E94781C8DE292E00E946B1CE9 -:103C2000F70182819381009739F20E946B1CC4CF07 -:103C30001F93CF93DF93EC01162F0E94A62A18172B -:103C400039F0612FCE01DF91CF911F910C94AE2AF4 -:103C5000DF91CF911F910895AF92BF92CF92DF92E3 -:103C6000EF92FF920F931F93CF93DF9360918B019D -:103C700082E090E00E94181E60918A0183E090E04B -:103C80000E94181E6091850184E090E00E94181E39 -:103C90006091840185E090E00E94181E60917F0190 -:103CA00086E090E00E94181E6091D30187E090E0CA -:103CB0000E94181E6091D20188E090E00E94181EB8 -:103CC0006091D10189E090E00E94181E60919104FA -:103CD0008AE090E00E94181E609176048BE090E0EC -:103CE0000E94181E6091B2018CE090E00E94181EA4 -:103CF00060918E048DE090E00E94181E60916C012E -:103D00008EE090E00E94181E8FE0E82EF12C10E06B -:103D100006E080916C011817B8F5109F600111241E -:103D2000D0E0C0E0FE01EC0DFD1DEB52FE4F6081C6 -:103D3000C7018C0F9D1F0E94181E2196C630D10509 -:103D400089F7670186E0C80ED11C88E0189FE00162 -:103D50001124C45DDE4F8EE0E80EF11C69812296CD -:103D6000C6010E94181E560182E0A80EB11CFE0179 -:103D700032976081C60101960E94181E6501AE143B -:103D8000BF0461F71F5FC5CFDF91CF911F910F91E6 -:103D9000FF90EF90DF90CF90BF90AF9008958F92FB -:103DA0009F92AF92BF92CF92DF92EF92FF92CF930A -:103DB0008FEF90E00E94010F83ED9EE00197F1F7F5 -:103DC0008EE00E94CD15BC0190E080E00E94312C75 -:103DD0004B015C018AE00E946E0E9091620498177C -:103DE00029F091E090938D04809362048091090101 -:103DF0009FEF980F90930901811106C00E94FB1557 -:103E00009093900480938F04609192047091930436 -:103E100080919404909195040E94FB2BCB010E9409 -:103E2000010FC0906A04D0906B04E0906C04F09095 -:103E30006D04A7019601C501B4010E94172B2DEC5A -:103E40003CEC4CE45DE30E94E82CA70196010E9443 -:103E5000182B60936A0470936B0480936C049093A6 -:103E60006D040E94711A6091990470919A0490E017 -:103E700080E00E94312C4B015C01C0909B04D090EB -:103E80009C04E0909D04F0909E04A70196010E947E -:103E9000842B811151C02091890430918A04409172 -:103EA0008B0450918C04C501B4010E94172B4B0167 -:103EB0005C0120E030E0A9010E94E32C181694F583 -:103EC00020E030E040EA50E4C501B4010E94E32C58 -:103ED000181694F16091990470919A0490E080E032 -:103EE0000E94312CA70196010E94172B4B015C0107 -:103EF00020E030E0A9010E94E32C181664F520E0D0 -:103F000030E040E85FE3C501B4010E94842B18163D -:103F100064F1C701B6010E94022C70939A04609369 -:103F2000990423C020E030E040EA50ECC501B40120 -:103F30000E94842B87FFCECF6091890470918A0400 -:103F400080918B0490918C040E94022C70939A04AF -:103F500060939904BFCF20E030E040E85FEBC501FB -:103F6000B4010E94E32C87FFD4CF60918704709145 -:103F7000880490E080E00E94312C209189043091E7 -:103F80008A0440918B0450918C040E94172B6B0182 -:103F90007C0120E030E0A9010E94E32C18160CF00F -:103FA0006EC0C701B6010E94022C6530710508F091 -:103FB0006AC080910502811105C08091D4018111F0 -:103FC0000E94111681E0809305021092D401809125 -:103FD000990490919A04853F21E0920710F0109285 -:103FE000080120910801211140C0843F9140E8F56B -:103FF0008FEF90E00E94010F0E941116C1E0C09364 -:1040000008010E9480160E942C1EC0938D048EE031 -:104010000E94CD15BC0190E080E00E94312C60939D -:104020006A0470936B0480936C0490936D041092F7 -:104030007F0480918704909188042CE231E03093D2 -:1040400075042093740420E233E0309373042093CA -:1040500072042AE030E03093710420937004880FDA -:10406000991F9093810480938004CF91FF90EF90EB -:10407000DF90CF90BF90AF909F908F900895C70131 -:10408000B601905890CF10920502A1CF0C94A62AA9 -:104090001F920F920FB60F9211242F933F938F937D -:1040A0009F93AF93BF938091A0049091A104A0919E -:1040B000A204B091A30430919F0423E0230F2D3775 -:1040C00058F50196A11DB11D20939F048093A00473 -:1040D0009093A104A093A204B093A3048091A4049C -:1040E0009091A504A091A604B091A7040196A11DEA -:1040F000B11D8093A4049093A504A093A604B0934B -:10410000A704BF91AF919F918F913F912F910F90F5 -:104110000FBE0F901F90189526E8230F0296A11D41 -:10412000B11DD2CF1F920F920FB60F9211242F9371 -:104130003F934F935F936F937F938F939F93EF93EF -:10414000FF9383B1817029B190916904981709F4A4 -:104150009DC030E0220F232F221F330B922F80931C -:10416000690440916804241709F490C020936804FE -:104170002091700430917104981719F031952195B0 -:1041800031094091800450918104609174047091D0 -:104190007504240F351F261737070CF48BC02091A8 -:1041A000700430917104981719F0319521953109F7 -:1041B0004091800450918104609172047091730465 -:1041C000240F351F621773070CF46FC04091700401 -:1041D00050917104981719F051954195510920910A -:1041E000800430918104240F351F30938104209383 -:1041F000800441E0981340E020916704421709F4DD -:1042000040C02091700430917104981719F03195D5 -:10421000219531096091800470918104E0917404CA -:10422000F0917504260F371F2E173F070CF44CC072 -:104230002091700430917104981719F031952195EF -:1042400031096091800470918104E0917204F091D1 -:104250007304260F371FE217F3078CF120917004C7 -:1042600030917104981719F0319521953109809199 -:10427000800490918104820F931F90938104809316 -:1042800080044093670481E080938D04FF91EF9157 -:104290009F918F917F916F915F914F913F912F915E -:1042A0000F900FBE0F901F901895209172043091BF -:1042B00073049BCF209174043091750496CF809144 -:1042C000720490917304D9CF809174049091750415 -:1042D000D4CF1895CF93DF93CDB7DEB72D970FB618 -:1042E000F894DEBF0FBECDBF789484B5826084BDE4 -:1042F00084B5816084BD85B5826085BD85B58160EA -:1043000085BD80916E00816080936E001092810067 -:104310008091810082608093810080918100816022 -:1043200080938100809180008160809380008091E3 -:10433000B10084608093B1008091B000816080936F -:10434000B00080917A00846080937A0080917A0036 -:10435000826080937A0080917A00816080937A00F5 -:1043600080917A00806880937A001092C10060E0AA -:104370008EE00E94C50E60E08FE00E94C50E61E0F5 -:1043800085E00E94C50E61E089E00E94C50E62E0F2 -:1043900087E00E94C50E62E088E00E94C50E62E0E0 -:1043A00086E00E94C50E62E08AE00E94C50E8FEF93 -:1043B00090E00E94010F60E085E00E94970E8091DE -:1043C0007A00876080937A0080917A008860809379 -:1043D0007A00789481E080936B00809368008BBBB7 -:1043E0008091F504883209F0B6C08FEF80930A05FA -:1043F00090E080E00E944620182F81E090E00E942B -:104400004620912F8C36974E09F0B5C082E090E09F -:104410000E944620182F83E090E00E944620912FB2 -:1044200090938B0180938A0184E090E00E94462063 -:10443000182F85E090E00E944620912F90938501EF -:104440008093840186E090E00E94462080937F0163 -:1044500087E090E00E9446208093D30188E090E0BE -:104460000E9446208093D20189E090E00E9446207D -:104470008093D1018AE090E00E94462080939104CD -:104480008BE090E00E94462091E0811101C090E015 -:10449000909376048CE090E00E94462091E0811198 -:1044A00001C090E09093B2018DE090E00E94462020 -:1044B00080938E048EE090E00E944620282E809308 -:1044C0006C01FCE28F2EF1E09F2EA5EDAA2EA1E05B -:1044D000BA2EBFE0EB2EF12C312C231409F457C077 -:1044E00010E000E0C701800F911F0E944620F501F7 -:1044F000E00FF11F80830F5F1F4F0630110591F70A -:10450000670136E0C30ED11C6EE0E60EF11C3401EB -:10451000C6010E944620082F10E0102F0027D3016B -:104520000D931C932601B2E04B0E511CC60101965F -:104530000E944620082BF301019311933F01620171 -:104540004E145F0429F73394F8E08F0E911C26E097 -:10455000A20EB11CC2CF823011F483E047CF81306C -:1045600009F444CF803309F043CF8FEF80930A05DD -:1045700080930B053DCF67EE90E080E00E94181E0F -:104580006CE681E090E00E94181E0E942C1E0E94A2 -:10459000531590936F0480936E040E94FB159093C3 -:1045A000900480938F0400918A0110918B011093E5 -:1045B0008804009387048EE00E94CD15BC0190E032 -:1045C00080E00E94312C60936A0470936B048093A6 -:1045D0006C0490936D040E948F150E94711A20E064 -:1045E00030E040EA51E46091890470918A0480913E -:1045F0008B0490918C040E94182B6B017C01B801F4 -:1046000090E080E00E94312C9B01AC01C701B60113 -:104610000E94842B87FF04C090E080E00E94010F7D -:104620001092DC041092DD041092DE041092DF047C -:10463000412C512C7FE7672E73E4772E4092E004E3 -:104640005092E1046092E2047092E304A090C804E6 -:10465000B090C9048091E404D501CD90DD90ED9037 -:10466000FC90882309F449C6A3019201C701B60151 -:104670000E94E32C181634F5F501408251826282C3 -:1046800073828090D0049090D104A090D204B09016 -:10469000D304C090E004D090E104E090E204F090F4 -:1046A000E304A7019601C501B4010E94E32C18168A -:1046B000CCF4C092D004D092D104E092D204F09213 -:1046C000D30420C020E030E0A901C701B6010E9458 -:1046D000842B87FFD6CFD5011D921D921D921C926F -:1046E0001397CFCFC090DC04D090DD04E090DE04BF -:1046F000F090DF04A7019601C501B4010E94842B4C -:1047000087FDD7CF81E08093E40483B181708093EB -:10471000690489B190E0880F892F881F990B8093D5 -:104720006804209169049091680481E0291380E075 -:10473000809367048CE291E09093750480937404F5 -:1047400080E293E090937304809372048AE090E097 -:104750009093710480937004000F111F10938104D3 -:10476000009380040E94B00F6093830470938404CC -:1047700080938504909386040E9411160E9411165E -:10478000E0918004F0918104FA87E987F595E79537 -:10479000FC87EB87F0938804E093870486E00E940F -:1047A0006E0E8D8781119BC080917F04882309F450 -:1047B00096C00E9411160E94B00F6B017C01C0923E -:1047C0007B04D0927C04E0927D04F0927E0486E02B -:1047D0000E946E0E892B59F40E94B00F6C197D094E -:1047E0008E099F09643F71408105910580F30E9405 -:1047F000B00F6C197D098E099F09643F71408105D6 -:10480000910508F40DC58FEF90E00E94010F0E9402 -:10481000111610E03AE0232E312C412F62E18FEB8C -:1048200091E00E944917182F8730A8F5E82FF0E093 -:10483000E45EFB4D0C946A2D35246327E1274E2856 -:104840005C286628742820E030E0A901C701B60181 -:104850000E94842B87FF56CF1092D0041092D1046F -:104860001092D2041092D3044DCF90E2792E20E31F -:10487000622E412F6EE08DE691E00E944917182FBD -:10488000823009F4B1C208F059C1882309F482C109 -:10489000813009F482C10E942C1E81E080938D0436 -:1048A000AB85BC85B0938804A09387048CE291E02B -:1048B000909375048093740480E293E09093730462 -:1048C000809372048AE090E0909371048093700466 -:1048D00089859A858E7F9093810480938004BD851D -:1048E000B0937F0480919604882309F11091D1013F -:1048F0001123E9F00E94B00FC0907704D0907804A3 -:10490000E0907904F0907A046C197D098E099F0972 -:1049100028EE33E040E050E00E94E62A211738F00C -:10492000109296040E94111681E08093D401809128 -:104930008D048823E9F180919704882349F120E0D0 -:1049400030E040EA51E46091890470918A048091DA -:104950008B0490918C040E94182B6B017C01609158 -:1049600087047091880490E080E00E94312C9B01C4 -:10497000AC01C701B6010E94842B87FF04C090E000 -:1049800080E00E94010F0E94111681E08093D40103 -:1049900010928D0410929704109298040E94B00F08 -:1049A00060938304709384048093850490938604B9 -:1049B0000E94B00F0091830410918404209185041B -:1049C00030918604601B710B820B930B20E63AEE4C -:1049D00040E050E00E94E62A122F2093820480914A -:1049E000970481110BC08091D301882339F02817D7 -:1049F00028F081E0809397040E941116809198041A -:104A000081110BC08091D201882339F0181728F04A -:104A100081E0809398040E9411160E94CF1E0E948C -:104A200044180E94A11001E41EE088E2D82E93E50C -:104A3000F92E2FE0C22E34E1B32E44E3E42E56E0EB -:104A4000A52E65E2962E76E1872E8FE49EE00E94E9 -:104A5000F80D109300050093FF044AE352E060E074 -:104A600080E00E944812D0922105109222056091A8 -:104A70009B0470919C0480919D0490919E0440E061 -:104A80000E94BC1CF092210510922205809199048D -:104A900090919A04853F914008F4D8C382E691E052 -:104AA0000E94431B80919104882309F401C4609102 -:104AB0008F047091900490E080E00E94312C20E0FF -:104AC00030E04AE754E40E94892B2B013C0110920C -:104AD0002105E092220580918E048A9DC001112457 -:104AE0008B529E4F0E946B1CF0922105E092220592 -:104AF00041E0C301B2010E94BC1C8CE391E00E9422 -:104B0000431B80EA9AE00E94F80D10930005009381 -:104B1000FF04909221058092220560919904709182 -:104B20009A0488E391E0653FF1E07F0708F0D7C37E -:104B300090E080E04AE00E94781CD3C3833009F4FF -:104B400056C1843009F0A7CE80916C01883008F0FE -:104B5000B7C191E0980F90936C0180938E040E94EE -:104B6000631BE0918E04B8E0EB9FF0011124E45D3B -:104B7000FE4F28ED30E03183208384E391E093837E -:104B80008283A6E8B1E0B583A4832EE130E03783C9 -:104B900026836FCE0E9480166CCECE0101962C012A -:104BA000C12CD12C7601C39481E4282E8EE0382EBE -:104BB000E0918E0494E0E99FF0011124C601019771 -:104BC000E80FF91FEE0FFF1FE45DFE4F808191811A -:104BD0009093880480938704A8ECB0E0B0937504A8 -:104BE000A0937404E8EEF3E0F0937304E09372048E -:104BF00021E030E03093710420937004880F991FF6 -:104C0000909381048093800431E03093D40186E056 -:104C10000E946E0E01E0892B09F000E00E94CF1E79 -:104C20000E9444180E94A1108FE49EE00E94F80D9B -:104C3000309200052092FF0481E091E00E94711201 -:104C40001092210560E1609322058AEF90E00E94B6 -:104C5000431B4AE0C701B6010E94781C8FE292E034 -:104C60000E946B1C80910502109221057092220512 -:104C7000882309F49DC08DEE90E00E94431B1092A2 -:104C800021056092220586EE90E00E94431B8091F0 -:104C9000800490918104959587954C01092E000C14 -:104CA000AA08BB0897FF80C08DE20E945E1B6627A2 -:104CB0007727CB01681979098A099B094AE00E9484 -:104CC000781C0E94D4108111AFCF002361F086E0E0 -:104CD0000E946E0E892B39F06AE070E080E090E06F -:104CE0000E947E0F00E086E00E946E0E892B09F084 -:104CF00095CF011193CF8091800490918104959577 -:104D00008795D2018D939D932D010E9411166AE023 -:104D100070E080E090E00E947E0FBFEFCB1ADB0ACC -:104D2000EB0AFB0AE4E0CE16D104E104F10409F039 -:104D30003FCF8FEF90E00E94010F83ED9EE001973F -:104D4000F1F70E948F150E94022C1B0178876F8358 -:104D5000A980BA80EB80FC80C5010A968E159F055C -:104D600008F087CDCD80DE80C7010A968C159D05A1 -:104D700008F07FCD40E066E080E191E00E944917B5 -:104D8000882309F476CDE0918E0428E0E29FF001BB -:104D90001124E45DFE4FB182A082F382E282D582CB -:104DA000C4823782268265CD4AE0C501B40187CF2F -:104DB0008FED90E00E94431B60916A0470916B0438 -:104DC00080916C0490916D040E94022C90E080E030 -:104DD0004AE00E94781C109221056092220580ED25 -:104DE00090E00E94431B6DCF0E94631B42CD8091D7 -:104DF0006C01813029F486E191E00E942F1639CDB3 -:104E000040E066E08EE191E00E944917882309F4B2 -:104E100030CD80918E0490916C01A92FA150BB0BD5 -:104E2000AD0106E08A171B0639F4815080938E0489 -:104E3000915090936C011DCDE82FF0E0E417F50739 -:104E4000BCF7809F7001112430E020E05F01BFEFCC -:104E5000AB1ABB0AB9016E0D7F1D6B527E4FDB0191 -:104E60001696DC901697DC922F5F3F4F2630310567 -:104E700089F7D50123E0AA0FBB1F2A95E1F7A45DAE -:104E8000BE4F2D913C91119763E0EE0FFF1F6A9585 -:104E9000E1F7E45DFE4F3183208312962D913C9122 -:104EA00013973383228314962D913C911597358364 -:104EB000248316962D913C91378326838F5FBCCF38 -:104EC00084E291E09ACF00E048E2442E512C50E970 -:104ED000652E772473946CE2862E9924939470E265 -:104EE000A72E73E0B72EE4E1CE2ED12CF8ECEF2EF6 -:104EF000F12C402F6AE08CE891E00E944917082FBE -:104F0000813009F43FC0F8F0823009F086CC8091FE -:104F10007F0190E0D0927504C0927404F092730403 -:104F2000E09272043092710420927004880F991FED -:104F300090938104809380048BE791E00E94941DFC -:104F400080937F01D6CF80918A0190918B019092BE -:104F5000750480927404B0927304A092720430922B -:104F6000710420927004880F991F9093810480939C -:104F7000800486E891E00E94941D90938B018093B9 -:104F80008A01B7CF80918401909185015092750478 -:104F900040927404709273046092720430927104AF -:104FA00020927004880F991F90938104809380044D -:104FB00080E891E00E94941D909385018093840184 -:104FC00098CF00E0402F6AE082EA91E00E94491702 -:104FD000082F813009F442C008F1823009F01DCC5D -:104FE0008091D10190E01092750410927404E8E66B -:104FF000F1E0F0937304E093720430927104209214 -:105000007004880F991F909381048093800486E92F -:1050100091E00E94941D8093D101D4CF8091D3015F -:1050200090E01092750410927404ACE3B0E0B09379 -:105030007304A0937204E1E0F0E0F0937104E09354 -:105040007004880F991F90938104809380048EE9E7 -:1050500091E00E94941D8093D301B4CF8091D2013E -:1050600090E0109275041092740428E730E03093B9 -:10507000730420937204A5E0B0E0B0937104A09390 -:105080007004880F991F90938104809380048AE9AB -:1050900091E00E94941D8093D20194CF40917604B8 -:1050A00066E089EB91E00E94491791E0811101C00F -:1050B00090E090937604B1CB4091910466E083EB4D -:1050C00091E00E94491780939104A7CB4091B201CF -:1050D00066E08CEA91E00E94491791E0811101C0DD -:1050E00090E09093B20199CB86E00E946E0E01E0B1 -:1050F000892B09F000E00E94531590936F04809370 -:105100006E04BC0190E080E00E94312C20E030E091 -:105110004AE754E40E94892B6B017C010E94FB1535 -:105120009093900480938F04BC0190E080E00E94F3 -:10513000312C20E030E04AE754E40E94892B4B01F7 -:105140005C010E948F152B013C010E94A1108FE48D -:105150009EE00E94F80D21E43EE03093000520938C -:10516000FF04109221051092220589E291E00E942D -:10517000431B85E392E00E946B1C1092210530E1F5 -:105180003093220583E291E00E94431B41E0C3017A -:10519000B2010E94BC1C80E291E00E94431B10926D -:1051A000210560E2609322058AE191E00E94431BA1 -:1051B00041E0C501B4010E94BC1C87E191E00E945E -:1051C000431B1092210580E38093220580E191E04A -:1051D0000E94431B41E0C701B6010E94BC1C8DE048 -:1051E00091E00E94431B0E94D4108111B0CF002394 -:1051F00061F086E00E946E0E892B39F06AE070E063 -:1052000080E090E00E947E0F00E086E00E946E0E3B -:10521000892B09F070CF01116ECF0E941116FDCAC3 -:105220008091960491E0892780939604882351F019 -:105230000E94B00F60937704709378048093790490 -:1052400090937A0481E080938D0449CB80919804F7 -:10525000882319F08CE591E023CC80919704882372 -:1052600019F086E591E01CCC80919604882319F012 -:1052700080E591E015CC80910502882319F08AE43D -:1052800091E00ECC20E030E044E353E460919204DE -:105290007091930480919404909195040E94842BC2 -:1052A00087FF03C084E491E0FBCB8EE391E0F8CB71 -:1052B00082EC91E00E94F80D109300050093FF042A -:1052C000C0922105B09222056091990470919A04D0 -:1052D000653F21E0720708F42BCC84E391E00E9443 -:1052E000431B0E94D4108111B0CB80E090E0892B49 -:1052F00009F446CA0E94000043CAC092D004D0926A -:10530000D104E092D204F092D304E091C604F0916B -:10531000C70480819181A281B3818093D40490934A -:10532000D504A093D604B093D70420E030E04FE733 -:1053300053E4C701B6010E94E32C18160CF083CA8F -:105340004092D0045092D1046092D2047092D3045F -:10535000D9C90F931F93CF9382E994E09093C90426 -:105360008093C80483E694E09093C7048093C604B6 -:105370008BE994E09093CB048093CA041092E404E8 -:105380001092DC041092DD041092DE041092DF040F -:1053900080E090E0AFE7B3E48093E0049093E10411 -:1053A000A093E204B093E30484E690E0A0E0B0E0D0 -:1053B0008093D8049093D904A093DA04B093DB04CB -:1053C00081E090E09093C3048093C2049093C5045D -:1053D0008093C404C1E0C093E50480E090E0A0E3C2 -:1053E000B1E48093AA049093AB04A093AC04B0936F -:1053F000AD0480E090E0A0E0BFE38093AE04909322 -:10540000AF04A093B004B093B10480E090E0A0E8B2 -:10541000BFE38093B2049093B304A093B404B09319 -:10542000B50480E090E0A0E3B1EC8093B6049093E3 -:10543000B704A093B804B093B9048DEC9CECACE431 -:10544000BDEB8093BA049093BB04A093BC04B093CB -:10545000BD0480E090E0A0E2B1EC8093BE049093A4 -:10546000BF04A093C004B093C1040E94B00F009188 -:10547000D8041091D9042091DA043091DB04601B28 -:10548000710B820B930B6093CC047093CD048093CB -:10549000CE049093CF041092E9041092E8048AE0BD -:1054A00092E09093E7048093E60410922105109215 -:1054B0002205109223051092EF041092EE04109230 -:1054C000F1041092F0041092F304C093F20482E20B -:1054D0008093F4041092F9041092F804EDE0F5E0E2 -:1054E0008BE195E02FEF21938E179F07E1F781E085 -:1054F00080930A0526EF3DE0309300052093FF04DA -:1055000080930105109202051092030580E48093B8 -:1055100004051092050589EE9FE090931C05809389 -:105520001B058AE091E09093ED048093EC0482E106 -:10553000809318050E943B108AE092E09093E70464 -:105540008093E604CF911F910F910895F999FECFB2 -:1055500092BD81BDF89A992780B50895262FF999B3 -:10556000FECF1FBA92BD81BD20BD0FB6F894FA9A46 -:10557000F99A0FBE01960895052E97FB1EF400942C -:105580000E94D32A57FD07D00E94E62A07FC03D0C9 -:105590004EF40C94D32A50954095309521953F4F69 -:1055A0004F4F5F4F089590958095709561957F4F0F -:1055B0008F4F9F4F08950E94082BA59F900DB49F79 -:1055C000900DA49F800D911D11240895A1E21A2E23 -:1055D000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F97 -:1055E000A217B307E407F50720F0A21BB30BE40BE7 -:1055F000F50B661F771F881F991F1A9469F760952E -:105600007095809590959B01AC01BD01CF010895E7 -:10561000A29FB001B39FC001A39F700D811D1124F3 -:10562000911DB29F700D811D1124911D0895505838 -:10563000BB27AA270E942F2B0C94A92C0E949B2CDD -:1056400038F00E94A22C20F039F49F3F19F426F480 -:105650000C94982C0EF4E095E7FB0C94922CE92F17 -:105660000E94BA2C58F3BA1762077307840795078C -:1056700020F079F4A6F50C94DC2C0EF4E0950B2EBA -:10568000BA2FA02D0B01B90190010C01CA01A00194 -:105690001124FF27591B99F0593F50F4503E68F1EF -:1056A0001A16F040A22F232F342F4427585FF3CF30 -:1056B000469537952795A795F0405395C9F77EF401 -:1056C0001F16BA0B620B730B840BBAF09150A1F04A -:1056D000FF0FBB1F661F771F881FC2F70EC0BA0FD0 -:1056E000621F731F841F48F4879577956795B79558 -:1056F000F7959E3F08F0B0CF9395880F08F0992753 -:10570000EE0F9795879508950E946E2C08F481E01E -:1057100008950E949D2B0C94A92C0E94A22C58F055 -:105720000E949B2C40F029F45F3F29F00C94922CAE -:1057300051110C94DD2C0C94982C0E94BA2C68F317 -:105740009923B1F3552391F3951B550BBB27AA273A -:1057500062177307840738F09F5F5F4F220F331F74 -:10576000441FAA1FA9F335D00E2E3AF0E0E832D03C -:1057700091505040E695001CCAF72BD0FE2F29D03F -:10578000660F771F881FBB1F261737074807AB0711 -:10579000B0E809F0BB0B802DBF01FF2793585F4F86 -:1057A0003AF09E3F510578F00C94922C0C94DD2C2D -:1057B0005F3FE4F3983ED4F3869577956795B79568 -:1057C000F7959F5FC9F7880F911D9695879597F973 -:1057D0000895E1E0660F771F881FBB1F62177307EC -:1057E0008407BA0720F0621B730B840BBA0BEE1F01 -:1057F00088F7E09508950E94022C6894B1110C94EA -:10580000DD2C08950E94C22C88F09F5798F0B92F84 -:105810009927B751B0F0E1F0660F771F881F991FE5 -:105820001AF0BA95C9F714C0B13091F00E94DC2C7F -:10583000B1E008950C94DC2C672F782F8827B85F8F -:1058400039F0B93FCCF3869577956795B395D9F73D -:105850003EF490958095709561957F4F8F4F9F4F47 -:105860000895E89409C097FB3EF490958095709553 -:1058700061957F4F8F4F9F4F9923A9F0F92F96E99C -:10588000BB279395F695879577956795B795F11111 -:10589000F8CFFAF4BB0F11F460FF1BC06F5F7F4FAE -:1058A0008F4F9F4F16C0882311F096E911C07723C0 -:1058B00021F09EE8872F762F05C0662371F096E8C9 -:1058C000862F70E060E02AF09A95660F771F881F98 -:1058D000DAF7880F9695879597F90895990F00083C -:1058E000550FAA0BE0E8FEEF16161706E807F907B2 -:1058F000C0F012161306E407F50798F0621B730B4D -:10590000840B950B39F40A2661F0232B242B252BCD -:1059100021F408950A2609F4A140A6958FEF811D70 -:10592000811D089597F99F6780E870E060E0089511 -:105930009FEF80EC089500240A94161617061806A7 -:105940000906089500240A94121613061406050683 -:105950000895092E0394000C11F4882352F0BB0F14 -:1059600040F4BF2B11F460FF04C06F5F7F4F8F4F77 -:105970009F4F089557FD9058440F551F59F05F3FB2 -:1059800071F04795880F97FB991F61F09F3F79F061 -:1059900087950895121613061406551FF2CF4695E3 -:1059A000F1DF08C0161617061806991FF1CF869565 -:1059B0007105610508940895E894BB276627772749 -:1059C000CB0197F908950E946E2C08F48FEF08958B -:1059D0000E94FB2C0C94A92C0E949B2C38F00E9456 -:1059E000A22C20F0952311F00C94922C0C94982C5E -:1059F00011240C94DD2C0E94BA2C70F3959FC1F3F6 -:105A0000950F50E0551F629FF001729FBB27F00D6C -:105A1000B11D639FAA27F00DB11DAA1F649F6627C1 -:105A2000B00DA11D661F829F2227B00DA11D621F10 -:105A3000739FB00DA11D621F839FA00D611D221FCA -:105A4000749F3327A00D611D231F849F600D211DAE -:105A5000822F762F6A2F11249F5750409AF0F1F031 -:105A600088234AF0EE0FFF1FBB1F661F771F881F9A -:105A700091505040A9F79E3F510580F00C94922C14 -:105A80000C94DD2C5F3FE4F3983ED4F38695779534 -:105A90006795B795F795E7959F5FC1F7FE2B880F40 -:105AA000911D9695879597F908950E946E2C880B05 -:105AB000990B0895DB018F939F930E94DB2ABF917E -:105AC000AF91A29F800D911DA39F900DB29F900D4D -:105AD00011240895EE0FFF1F0590F491E02D099415 -:045AE000F894FFCF68 -:105AE400084000000080E20301FF281400014A136B -:105AF4003F025002530257025F026A02760280029A -:105B04005002530257028F029B02AA02D8003401AA -:105B140086011E00000000000000000000000000DC -:105B24000000000000000000000000000000000071 -:105B34000000000000000000000000000000000061 -:105B4400000000000000000000000000011C02B37F -:105B540002BE02CC02D702E202EE02F502000332D8 -:105B64000603000396001103000340011E03110302 -:105B74000603F502EE022C03380340034A035203E2 -:105B84004A035E03520340032C03EE026D037403C5 -:105B94007C030183038F039B03A603B303BA03BEF1 -:105BA40003C9031E035E03A60383036D03D603EE3A -:105BB40002280F05014243312E3500000000000089 -:105BC40000000000000000000000000000000000D1 -:105BD40000000000000000000000000000000000C1 -:105BE400000000000001000000001C1BBC0F681C2A -:105BF400671C000100FF0100FF003E005469703A79 -:105C0400006E616E00696E66006F7666002000208B -:105C14006F6620330076312E37005345543A0053D3 -:105C2400746F72652053657474696E6773203F00E6 -:105C34004E6F00596573005761726E696E67005943 -:105C44006F752063616E6E6F740064656C65746556 -:105C540020796F7572006C6173742074697021000F -:105C640041726520796F752073757265203F005904 -:105C74006F752072656163686564006D6178696D34 -:105C8400756D206E756D626572006F662074697043 -:105C94007321004368616E67652054697000436135 -:105CA4006C696272617465205469700052656E613A -:105CB4006D65205469700044656C65746520546991 -:105CC4007000416464206E657720546970005265E9 -:105CD4007475726E00426F6F73742054656D70003A -:105CE400646567204300536C6565702054656D706E -:105CF4000044656661756C742054656D700054656C -:105D04006D702053657474696E677300426F6F73AE -:105D1400742054696D6572005365636F6E6473001B -:105D24004F66662054696D6572004D696E757465C1 -:105D34007300536C6565702054696D657200546915 -:105D44006D65722053657474696E67730042757A69 -:105D54007A65720044697361626C6500456E6162C4 -:105D64006C65004D61696E2053637265656E004217 -:105D74006967204E756D62657273004D6F726520A0 -:105D8400496E666F7300436F6E74726F6C20547942 -:105D9400706500446972656374005049440053653A -:105DA400747570204D656E75005469702053657468 -:105DB40074696E677300496E666F726D6174696FA2 -:025DC4006E006F -:00000001FF +:100000000C94F00C0C94180D0C94180D0C94922078 +:100010000C94180D0C94180D0C94180D0C94180DCC +:100020000C94180D0C94180D0C94180D0C94180DBC +:100030000C94180D0C94180D0C94180D0C94180DAC +:100040000C9448200C94180D0C94180D0C94180D59 +:100050000C94180D0C9469210C94180D0C94180D27 +:100060000C94180D0C94180D4465616374697661E5 +:100070007465640053656C65637420546970004551 +:100080006E74657220546970204E616D6500FFE0EA +:10009000FFD1AFFF32FFD0FFFEFFE0FFD1AEFFD0B8 +:1000A000FFFEFFE0FFD11000FFFEFFD0FFE0FFC129 +:1000B000FFD1AED580A83FD300408D142000A1C849 +:1000C000DA1281CFD9F1DB402EA4A6AFFFD0FFFE1C +:1000D000506C6561736520776169742E2E2E004126 +:1000E00044433A20200074656D703A2000536574D3 +:1000F000206D6561737572656400537465703A2094 +:100100000043616C6962726174696F6E0020560011 +:100110005663633A20200020560056696E3A20004C +:10012000204300546D703A20004669726D77617209 +:10013000653A200030303000303030005600204822 +:100140004F4C4400204845415400574F524B5900F2 +:10015000424F4F535400534C4545500020204F46CA +:1001600046004552524F5200000000002400270074 +:100170002A0000000000250028002B0000000000DD +:1001800023002600290004040404040404040202D9 +:100190000202020203030303030301020408102006 +:1001A0004080010204081020010204081020000011 +:1001B0000008000201000003040700000000000026 +:1001C000000000574DFBF12A000000002A3A002BE6 +:1001D000F82A001717452507140082000383800FB3 +:1001E00083E01FC7E00FC7E007C7C003EF8001EF40 +:1001F0000000FE00F8FE3EFFFFFEFFFFFEFFFFFED9 +:10020000FE7CFE80FE0201EF0003EF8007EFC007D7 +:10021000C7C00FC7E01F83F00783C00183002323FB +:10022000AF3B0C000001E000000001E00000000115 +:10023000E000000001E000000001E000000001E03B +:1002400000000001E000000001E000000001E0000B +:10025000000001E000000001E000000001E00000FB +:100260000001E000000001E000000001E0000000EB +:1002700001E00000FFFFFFFFE0FFFFFFFFE0FFFFE7 +:10028000FFFFE0FFFFFFFFE00001E000000001E0F2 +:1002900000000001E000000001E000000001E000BB +:1002A000000001E000000001E000000001E00000AB +:1002B0000001E000000001E000000001E00000009B +:1002C00001E000000001E000000001E0000000018A +:1002D000E000000C0F1E1203F80FF00FF00FE01FEC +:1002E000E01FC01FC03F803F803F007F007E007E38 +:1002F000007C00FC00FC000F081013020BFFFEFF47 +:10030000FEFFFEFFFEFFFEFFFEFFFEFFFE080808E9 +:10031000120600FFFFFFFFFFFFFFFF132E8A1903E6 +:10032000FD0007E00007E00007C0000FC0000FC09D +:10033000000F80001F80001F80001F80001F000032 +:100340003F00003F00003E00007E00007E00007C79 +:100350000000FC0000FC0000FC0000F80001F800B8 +:1003600001F80001F00003F00003F00003F00007C3 +:10037000E00007E00007E00007C0000FC0000FC06A +:10038000000F80001F80001F80001F80003F0000C2 +:100390003F00003F00003E00007E00007E00007C29 +:1003A0000000FC0000FC0000FC00001D2CB021023D +:1003B000FF001FC00000FFF80003FFFC0007FFFF65 +:1003C000000FFFFF800FFFFF801FF0FFC03FC03F07 +:1003D000C03FC03FE03F801FE07F801FF07F001FD5 +:1003E000F07F000FF07F000FF0FF000FF0FF000F15 +:1003F000F8FF000FF8FF000FF8FF000FF8FF000FE5 +:10040000F8FF000FF8FF000FF8FF000FF8FF000FD4 +:10041000F8FF000FF8FF000FF8FF000FF8FF000FC4 +:10042000F8FF000FF87F000FF07F000FF07F000F44 +:10043000F07F001FF07F801FF03F801FE03FC03F34 +:10044000E03FC03FC01FF0FFC00FFFFF800FFFFF66 +:100450000007FFFF0003FFFE0000FFF800001FC0C1 +:1004600000122A7E210600003FC0007FC000FFC0AE +:1004700003FFC00FFFC03FFFC0FFFFC0FFFFC0FF73 +:10048000FFC0FF3FC0FE3FC0F83FC0E03FC0003F9D +:10049000C0003FC0003FC0003FC0003FC0003FC0A1 +:1004A000003FC0003FC0003FC0003FC0003FC00051 +:1004B0003FC0003FC0003FC0003FC0003FC0003F02 +:1004C000C0003FC0003FC0003FC0003FC0003FC071 +:1004D000003FC0003FC0003FC0003FC0003FC00021 +:1004E0003FC0003FC01D2BAC210200000FF00000F8 +:1004F0007FFE0001FFFF0003FFFF8007FFFFC00F2B +:10050000FFFFE01FF83FF01FF01FF01FE00FF03F6C +:10051000C007F83FC007F83FC007F8000007F80021 +:100520000007F800000FF800000FF000001FF000B7 +:10053000001FF000003FE000007FE00000FFC0006F +:1005400001FF800003FF800007FF00000FFE000096 +:100550001FFC00003FF800007FF00000FFE00001FA +:10056000FF800003FF00000FFE00001FFC00003FA3 +:10057000F000007FE00000FFC00000FFFFFFF8FF79 +:10058000FFFFF8FFFFFFF8FFFFFFF8FFFFFFF8FF97 +:10059000FFFFF8FFFFFFF81C2CB02103FF007FC016 +:1005A0000003FFF80007FFFC001FFFFF003FFFFFF5 +:1005B000003FFFFF807FE0FFC07FC07FC0FF803F24 +:1005C000C0FF001FE0FF001FE0FF001FE000001F52 +:1005D000E000001FE000001FE000003FC000007FBF +:1005E000C00003FF80007FFF00007FFC00007FF061 +:1005F00000007FF800007FFE00007FFF800000FF0A +:10060000C000003FE000001FE000001FE000000FFE +:10061000F000000FF000000FF0FF000FF0FF000FE0 +:10062000F0FF000FF0FF001FE0FF801FE07FC03FE2 +:10063000E07FE0FFC03FFFFF803FFFFF001FFFFEA6 +:10064000000FFFFC0003FFF800007FC0001F2AA876 +:100650002101000001FFC00001FFC00003FFC00036 +:1006600007FFC00007FFC0000FFFC0000FFFC00062 +:100670001FFFC0003FFFC0003FBFC0007F3FC00062 +:10068000FF3FC000FE3FC001FE3FC001FC3FC00372 +:10069000F83FC007F83FC007F03FC00FF03FC01F52 +:1006A000E03FC01FC03FC03FC03FC03F803FC07F52 +:1006B000803FC0FF003FC0FF003FC0FFFFFFFEFFC5 +:1006C000FFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFF3E +:1006D000FFFFFEFFFFFFFE00003FC000003FC00025 +:1006E000003FC000003FC000003FC000003FC0000E +:1006F000003FC000003FC000003FC01D2BAC2102E6 +:10070000FF7FFFFFE07FFFFFE07FFFFFE07FFFFF56 +:10071000E07FFFFFE07FFFFFE07FFFFFE07F8000E3 +:10072000007F8000007F8000007F8000007F8000CD +:10073000007F8000007F8000007F8000007F87F8BE +:10074000007F9FFE007FFFFF807FFFFFC07FFFFFD6 +:10075000C07FFFFFE07FF03FF07FC01FF07F800F82 +:10076000F07F800FF87F0007F8000007F80000070F +:10077000F8000007F8000007F8000007F80000077D +:10078000F0FF000FF0FF000FF0FF001FF0FF803FB1 +:10079000E07FE0FFC07FFFFFC03FFFFF801FFFFF44 +:1007A000000FFFFC0003FFF800007FC0001D2CB00D +:1007B0002102FF000FF000007FFC0000FFFF00039C +:1007C000FFFF8007FFFFC007FFFFE00FFC3FE01FB8 +:1007D000F00FF01FE00FF03FC007F83FC007F83FF1 +:1007E0008000007F8000007F8000007F8000007F0D +:1007F000000000FF03F800FF1FFE00FF3FFF00FFA7 +:100800007FFF80FFFFFFC0FFFFFFE0FFF83FF0FF2B +:10081000E01FF0FFC00FF0FFC00FF8FF8007F8FFE8 +:100820008007F8FF8007F8FF8007F8FF8007F87F50 +:100830008007F87F8007F87F8007F07FC00FF03FC8 +:10084000C00FF03FE01FE01FF83FE01FFFFFC00FA9 +:10085000FFFF8007FFFF0003FFFE0000FFF800001E +:100860003FC0001C2AA8210300FFFFFFF0FFFFFF8D +:10087000F0FFFFFFF0FFFFFFF0FFFFFFF0FFFFFFC4 +:10088000F0FFFFFFF000000FF000000FF000001F6E +:10089000F000001FE000003FE000003FC000007FCC +:1008A000C000007FC00000FF800000FF800001FF4B +:1008B000000001FF000001FE000003FE000003FE37 +:1008C000000007FC000007FC00000FF800000FF814 +:1008D00000001FF800001FF000001FF000003FE0C4 +:1008E00000003FE000007FC000007FC00000FFC0AC +:1008F0000000FF800001FF800001FF000003FF00F7 +:100900000003FF000003FE000007FE000007FC00DC +:10091000001D2CB02102FF003FF00001FFFE000788 +:10092000FFFF800FFFFFC01FFFFFE03FFFFFF03F13 +:10093000F87FF07FE01FF07FE01FF87FC00FF87FA7 +:10094000C00FF87FC00FF87FC00FF87FC00FF83FCF +:10095000E01FF03FE01FF01FF87FE00FFFFFC00730 +:10096000FFFF0001FFFC0000FFF80003FFFE000F87 +:10097000FFFF801FFFFFC03FF03FE07FE01FE07FF1 +:10098000C00FF07FC00FF0FF8007F8FF8007F8FF6F +:100990008007F8FF8007F8FF8007F8FF8007F8FF5F +:1009A000C00FF8FFC00FF87FE01FF07FF03FF07F2F +:1009B000FFFFE03FFFFFE01FFFFFC00FFFFF8003CF +:1009C000FFFE00007FF0001D2CB02102FF001FC0C1 +:1009D0000000FFF80003FFFE0007FFFF000FFFFF0E +:1009E000801FFFFF803FE0FFC03FC03FE07F801FD0 +:1009F000E07F801FE07F000FF0FF000FF0FF000F8F +:100A0000F0FF000FF0FF000FF8FF000FF8FF000FDE +:100A1000F8FF000FF8FF801FF87F801FF87FC03FAE +:100A2000F87FE0FFF83FFFFFF81FFFFFF81FFFF719 +:100A3000F80FFFE7F803FFC7F800FE07F000000714 +:100A4000F000000FF000000FF000000FF000000FAA +:100A5000E07F801FE07F801FE03F803FC03FC07F7E +:100A6000C03FE0FF801FFFFF800FFFFF0007FFFE7A +:100A70000003FFFC0001FFF000003FC000081D1D47 +:100A8000130800FFFFFFFFFFFFFFFF000000000053 +:100A90000000000000000000FFFFFFFFFFFFFFFF5E +:100AA00000121A00001803700390207F001A00182B +:100AB000000000000B0000FFFFFFFFFFFFFFFFFF34 +:100AC000FF11103013010601C00001C00001C00079 +:100AD00001C00001C00001C00001C000FFFF80FF95 +:100AE000FF8001C00001C00001C00001C00001C0C2 +:100AF0000001C00001C0000708080B03023E3E3E93 +:100B00003E3EF0F0F00902040B010DFF80FF80056E +:100B100005050B0502F8F8F8F8F8FF11184813015D +:100B200002FFFF80FFFF80C00380C00380C00380FE +:100B3000C00380C00380C00380C00380C00380C0A6 +:100B40000380C00380C00380C00380C00380C00353 +:100B500080C00380C00380C00380C00380C00380C6 +:100B6000FFFF80FFFF80FFFF80061818130702FCBD +:100B7000FC1C1C1C1C1C1C1C1C1C1C1C1C1C1C1CD5 +:100B80001C1C1C1C1C1C1C111848130102FFFF809C +:100B9000FFFF8000038000038000038000038000CB +:100BA0000380000380000380000380000380FFFFB8 +:100BB00080FFFF80C00000C00000C00000C0000037 +:100BC000C00000C00000C00000C00000FFFF80FFA8 +:100BD000FF80FFFF80111848130102FFFF80FFFF15 +:100BE00080000380000380000380000380000380F6 +:100BF0000003800003800003800003801FFF801F2C +:100C0000FF80000380000380000380000380000356 +:100C100080000380000380000380FFFF80FFFF80CF +:100C2000FFFF80111848130102C00380C00380C079 +:100C30000380C00380C00380C00380C00380C00362 +:100C400080C00380C00380C00380FFFF80FFFF805F +:100C50000003800003800003800003800003800005 +:100C600003800003800003800003800003800003F2 +:100C700080111848130102FFFF80FFFF80C00000B1 +:100C8000C00000C00000C00000C00000C00000C0E4 +:100C90000000C00000C00000FFFF80FFFF800003D5 +:100CA0008000038000038000038000038000038035 +:100CB000000380000380FFFF80FFFF80FFFF8011A3 +:100CC0001848130102FFFF80FFFF80C00000C00032 +:100CD00000C00000C00000C00000C00000C0000054 +:100CE000C00000C00000FFFF80FFFF80C00380C085 +:100CF0000380C00380C00380C00380C00380C003A2 +:100D000080C00380FFFF80FFFF80FFFF801018304E +:100D1000130202FFFFFFFF000700070007000700A4 +:100D2000070007000700070007000700070007008B +:100D3000070007000700070007000700070007007B +:100D4000070007111848130102FFFF80FFFF80C052 +:100D50000380C00380C00380C00380C00380C00341 +:100D600080C00380C00380C00380FFFF80FFFF803E +:100D7000C00380C00380C00380C00380C00380C064 +:100D80000380C00380C00380FFFF80FFFF80FFFF60 +:100D900080111848130102FFFF80FFFF80C003800D +:100DA000C00380C00380C00380C00380C00380C034 +:100DB0000380C00380C00380FFFF80FFFF8000032B +:100DC0008000038000038000038000038000038014 +:100DD000000380000380FFFF80FFFF80FFFF80058E +:100DE00010100B0502F8F8F8F8F8000000000000F9 +:100DF000F8F8F8F8F80710100B03023E3E3E3E3EAE +:100E00000000003E3E3E3E3EF0F0F0FFFFFFFFFFE1 +:100E1000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:100E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:100E3000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:100E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00B1 +:100E5000090F00FD0A01E803D820FFFD0CFD0BFD82 +:100E600000000009000C010B0B0904008080808049 +:100E70008080800000808004030309030790909025 +:100E80000608080901014848FC4848FC4848070B87 +:100E90000B0901FF107C929050381412927C1007BD +:100EA0000A0A09010042A4A4481010244A4A8407EF +:100EB0000A0A09010060909090606294889462012F +:100EC0000303090407808080030C0C0903FF204002 +:100ED00040808080808080404020030C0C0903FF0C +:100EE0008040402020202020204040800707070924 +:100EF000010310925438549210070707090101109A +:100F00001010FE1010100205050904FDC0C040407D +:100F100080070101090104FE020202090400C0C0A9 +:100F2000070A0A090100020404081010204040804A +:100F3000070A0A0901003844828282828282443888 +:100F4000070A0A090100103050901010101010FE0E +:100F5000070A0A0901007C8282040810204080FEF2 +:100F6000070A0A090100FE0204081C020202827C30 +:100F7000070A0A090100040C14244484FE04040432 +:100F8000070A0A090100FE8080BCC2020202827CBC +:100F9000070A0A0901003C408080BCC28282827C30 +:100FA000070A0A090100FE020404080810102020A4 +:100FB000070A0A09010038448244384482824438CE +:100FC000070A0A0901007C828282867A020204787A +:100FD000020707090400C0C0000000C0C0020A0ADE +:100FE0000904FDC0C0000000C0C0404080050A0ADE +:100FF00009020008102040808040201008070404E7 +:10100000090102FE0000FE050A0A090200804020D4 +:1010100010080810204080070A0A0901007C82821B +:1010200002040810100010070A0A0901007C8282DD +:101030009EA2A69A80807C070A0A09010010284413 +:10104000828282FE828282070A0A090100F8848273 +:1010500084F884828284F8070A0A0901007C82806D +:101060008080808080827C070A0A090100F88482DF +:10107000828282828284F8070A0A090100FE808047 +:1010800080F880808080FE070A0A090100FE8080C7 +:1010900080F88080808080070A0A0901007C8280B5 +:1010A00080808E8282827C070A0A09010082828205 +:1010B00082FE8282828282050A0A090200F82020CA +:1010C000202020202020F8080A0A0901001F04041B +:1010D00004040404048478070A0A0901008284884D +:1010E00090E0A090888482070A0A0901008080802D +:1010F000808080808080FE070A0A0901008282C603 +:10110000AAAA9292828282070A0A0901008282C2F6 +:10111000A2928A86828282070A0A0901007C828260 +:101120008282828282827C070A0A090100FC828212 +:1011300082FC8080808080070C0C0901FE7C82820A +:1011400082828282A2927C0806070A0A090100FCB8 +:10115000828282FC9088848282070A0A0901007CCC +:10116000828280700C0282827C070A0A090100FEDA +:10117000101010101010101010070A0A0901008238 +:1011800082828282828282827C070A0A090100822C +:10119000828244444428282810070A0A0901008250 +:1011A00082828292929292AA44070A0A09010082DC +:1011B000824428101028448282070A0A090100820A +:1011C000824428101010101010070A0A090100FEAE +:1011D0000204081020408080FE040C0C0903FFF07C +:1011E00080808080808080808080F0070A0A0901EA +:1011F0000080404020101008040402040C0C090276 +:10120000FFF010101010101010101010F007040450 +:10121000090106102844820801010900FFFF0303A9 +:10122000030903088040200707070901007C020228 +:101230007E82867A070A0A090100808080BCC28209 +:101240008282C2BC0707070901007C8280808082FD +:101250007C070A0A0901000202027A8682828286DB +:101260007A0707070901007C8282FE80807C070ADA +:101270000A0901001C22222020F820202020070A31 +:101280000A0901FD7A84848478807C82827C070A42 +:101290000A090100808080BCC28282828282050AA3 +:1012A0000A090200600000E02020202020F8060D3E +:1012B0000D0901FD0C00001C040404040484848452 +:1012C00078070A0A090100808080828CB0C0B08C47 +:1012D00082050A0A090200E0202020202020202088 +:1012E000F8070707090100EC929292929282070791 +:1012F00007090100BCC282828282820707070901B6 +:10130000007C82828282827C070A0A0901FDBCC2BB +:10131000828282C2BC808080070A0A0901FD7A8627 +:10132000828282867A0202020707070901009C6214 +:1013300042404040400707070901007C82807C0250 +:10134000827C0709090901002020FC20202020229E +:101350001C0707070901008484848484847A0707B2 +:101360000709010082824444282810070707090161 +:10137000008282929292AA440707070901008244E0 +:101380002810284482060A0A0901FD848484848482 +:101390008C74048478070707090100FE04081020F4 +:1013A00040FE050C0C0903FF3840404020C0C0201F +:1013B00040404038010C0C0904FF80808080808010 +:1013C000808080808080050C0C0901FFE0101010E7 +:1013D00020181820101010E007030309010762927B +:1013E0008CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:1013F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:10140000FFFF00000009000C010B0B0904008080A5 +:101410000000808080808080800608080901000824 +:10142000789490A0A47840070A0A0901001C2220A1 +:1014300020F8202060A25C070606090103827C4494 +:10144000447C82070A0A090100828244287C107CBD +:10145000101010010B0B0904FF8080808080008039 +:1014600080808080040B0B0902FF60908060909068 +:101470009060109060050202090209888808090935 +:101480000900013C4299A5A1A599423C050707091D +:101490000103609070907800F807080809010112B4 +:1014A00024489090482412060404090102FC040414 +:1014B00004050101090204F80809090900013C4278 +:1014C000B9A5B9A9A5423C060101090109FC04041A +:1014D00004090306609090600709090901011010D2 +:1014E00010FE10101000FE040606090104609010A2 +:1014F0006080F004060609010460902010906003EB +:1015000003030903082040800709090901FE8282BC +:10151000828282C6BA8080070A0A0901007E8A8A0E +:101520008A7A0A0A0A0A0A020202090404C0C004EA +:1015300003030902FD30906003060609010440C060 +:10154000404040E00506060901047088887000F8F4 +:101550000708080901019048241212244890070A3C +:101560000A09010040C0404042E60A121A06070A72 +:101570000A09010040C040404CF2020C101E070A4C +:101580000A0901006090201092660A121A06070AE2 +:101590000A0901001000101020408082827C070C94 +:1015A0000C0901004020100038448282FE828282B1 +:1015B000070C0C0901000408100038448282FE82E6 +:1015C0008282070C0C0901001028440038448282F2 +:1015D000FE828282070B0B090100629C0038448264 +:1015E00082FE828282070B0B0901004444003844CA +:1015F0008282FE828282070B0B0901003844382860 +:10160000448282FE828282070A0A0901006E90905B +:101610009090FC9090909E070D0D0901FD7C8280BA +:101620008080808080827C184830070C0C09010083 +:1016300040201000FE404078404040FE070C0C095E +:10164000010004081000FE404078404040FE070CB6 +:101650000C09010010284400FE404078404040FE44 +:10166000070B0B090100444400FE40407840404015 +:10167000FE050C0C09020080402000F820202020EC +:101680002020F8050C0C09020008102000F820208A +:1016900020202020F8050C0C09020020508800F8BA +:1016A000202020202020F8050B0B0902008888004C +:1016B000F8202020202020F8080A0A0900007C4297 +:1016C0004141E1414141427C070B0B090100629C11 +:1016D0000082C2A292928A8682070C0C0901004005 +:1016E0002010007C8282828282827C070C0C09019D +:1016F00000040810007C8282828282827C070C0CAB +:10170000090100102844007C8282828282827C0748 +:101710000B0B090100629C007C8282828282827CA7 +:10172000070B0B0901004444007C82828282828282 +:101730007C07070709010182442810284482070C0E +:101740000C0901FF027C868A8A9292A2A2C27C8046 +:10175000070C0C09010040201000828282828282E4 +:10176000827C070C0C09010004081000828282822E +:101770008282827C070C0C090100102844008282BE +:1017800082828282827C070B0B0901004444008222 +:101790008282828282827C070C0C0901000408107C +:1017A000008282442810101010070A0A09010080E4 +:1017B00080FC828282FC808080060A0A090100384F +:1017C000444448D04844444458070B0B09010020C6 +:1017D0001008007C02027E82867A070B0B0901004A +:1017E000040810007C02027E82867A070B0B090136 +:1017F00000102844007C02027E82867A070A0A09C9 +:101800000100324C007C02027E82867A070A0A09B5 +:1018100001004444007C02027E82867A070B0B0999 +:101820000100182418007C02027E82867A070707CE +:101830000901006C92127C90926E070A0A0901FD60 +:101840007C82808080827C184830070B0B09010065 +:10185000402010007C8282FE80807C070B0B0901F7 +:1018600000040810007C8282FE80807C070B0B093C +:101870000100102844007C8282FE80807C070A0AD6 +:101880000901004444007C8282FE80807C050B0BB1 +:1018900009020080402000E02020202020F8050BD5 +:1018A0000B09020010204000E02020202020F80634 +:1018B0000B0B090100205088007010101010107CD4 +:1018C000050A0A090200909000E02020202020F85C +:1018D000070B0B090100483050087C82828282820B +:1018E0007C070A0A090100629C00BCC282828282D3 +:1018F00082070B0B090100402010007C828282824B +:10190000827C070B0B090100040810007C82828294 +:1019100082827C070B0B090100102844007C828224 +:101920008282827C070A0A090100629C007C828212 +:101930008282827C070A0A0901004444007C828278 +:101940008282827C07090909010010381000FE001C +:101950001038100709090901FF027C8A8A92A2A2A5 +:101960007C80070B0B0901004020100084848484D4 +:1019700084847A070B0B0901000408100084848416 +:101980008484847A070B0B090100102844008484A6 +:10199000848484847A070A0A090100484800848400 +:1019A000848484847A060E0E0901FD0810200084C8 +:1019B000848484848C74048478070C0C0901FD8071 +:1019C0008080BCC28282C2BC808080060D0D09016D +:1019D000FD48480084848484848C74048478A92914 +:1019E00011241FBECFEFD8E0DEBFCDBF13E0A0E0D3 +:1019F000B1E0E4EEFAE502C005900D92A23EB10717 +:101A0000D9F725E0A2EEB3E001C01D92A432B207DF +:101A1000E1F71CE0C0EFDCE004C02197FE010E946A +:101A20006A2DCF3ED107C9F70E946A210C94702D10 +:101A30000C9400004F925F926F927F928F929F92D0 +:101A4000AF92BF92CF92DF92EF92FF920F931F93CC +:101A5000CF93DF9300D000D0CDB7DEB74B015C0150 +:101A600029013A016701780120E030E0A9010E94D4 +:101A7000842B87FDA6C020E030E0A901C301B2019C +:101A80000E94842B87FD9DC020E030E0A901C801A1 +:101A9000B6010E94842B87FD94C081E02091C4048C +:101AA0003091C5042130310509F080E08093E504D0 +:101AB0008092AA049092AB04A092AC04B092AD04C0 +:101AC0004092AE045092AF046092B0047092B104A0 +:101AD000C092B204D092B304E092B404F092B50480 +:101AE0006091D8047091D9048091DA049091DB045C +:101AF0000E94312C20E030E04AE754E40E94892B18 +:101B000069837A838B839C838092B6049092B70416 +:101B1000A092B804B092B9049B01AC01C301B20118 +:101B20000E94E82C2B013C014092BA045092BB0465 +:101B30006092BC047092BD0429813A814B815C8122 +:101B4000C701B6010E94892B6B017C01C092BE04C3 +:101B5000D092BF04E092C004F092C1048091C2040C +:101B60009091C304019769F5A501940160E070E0CC +:101B7000CB010E94172B6093B6047093B704809337 +:101B8000B8049093B904A301920160E070E0CB0126 +:101B90000E94172B6093BA047093BB048093BC041B +:101BA0009093BD04A701960160E070E0CB010E9414 +:101BB000172B6093BE047093BF048093C00490936E +:101BC000C1040F900F900F900F90DF91CF911F9154 +:101BD0000F91FF90EF90DF90CF90BF90AF909F90CC +:101BE0008F907F906F905F904F90089580E0089560 +:101BF0002091EE043091EF042817390799F1909362 +:101C0000EF048093EE04009739F120910105FC0167 +:101C1000211129C03596E491E09302050C96FC0150 +:101C200084918093030580910205082E000C990B86 +:101C300020910305821B910927FD939520910405AE +:101C4000203441F0829FC001112426E096958795AB +:101C50002A95E1F78093050586EF9DE090930005B6 +:101C60008093FF040895213031F43F96E491E0938E +:101C700002054096D4CF3D96E491E09302050E967E +:101C8000CECFFC01808D8F5F0895833081F028F4E2 +:101C9000813099F08230A9F008958730A9F088301A +:101CA000C9F08430B1F4809180008F7D03C08091B1 +:101CB00080008F7780938000089584B58F7784BDEE +:101CC000089584B58F7DFBCF8091B0008F7780938E +:101CD000B00008958091B0008F7DF9CFCF93DF934E +:101CE000282F30E0F901E255FE4F8491F901E656C4 +:101CF000FE4FD491F901EA57FE4FC491CC23A1F0D5 +:101D000081110E94450EEC2FF0E0EE0FFF1FE4580A +:101D1000FE4FA591B491EC91ED2381E090E009F4A0 +:101D200080E0DF91CF91089580E090E0FACF1F939B +:101D3000CF93DF93282F30E0F901E255FE4F8491D5 +:101D4000F901E656FE4FD491F901EA57FE4FC491CE +:101D5000CC23A9F0162F81110E94450EEC2FF0E044 +:101D6000EE0FFF1FEE58FE4FA591B4918FB7F89478 +:101D7000EC91111108C0D095DE23DC938FBFDF9169 +:101D8000CF911F910895DE2BF8CFCF93DF9390E092 +:101D9000FC01E656FE4F24918A579E4FFC01849128 +:101DA0008823C9F090E0880F991FFC01E859FE4F85 +:101DB000A591B491FC01EE58FE4FC591D4916111EB +:101DC0000DC09FB7F8948C91209582238C938881C5 +:101DD000282328839FBFDF91CF910895623051F46B +:101DE0009FB7F8943C91822F809583238C93E88150 +:101DF0002E2BEFCF8FB7F894EC912E2B2C938FBF17 +:101E0000EACFCF93DF93EC0161E089E00E94C50E39 +:101E1000209731F460E089E0DF91CF910C94970E28 +:101E2000CF3FD10511F461E0F6CFE7EBF1E0E491AB +:101E3000E33029F140F4E130B1F0E230D9F0C038BC +:101E4000D1058CF7E7CFE73021F1E83051F1E430EC +:101E5000B1F780918000806280938000D0938B00E6 +:101E6000C0938A0004C084B5806884BDC7BDDF917B +:101E7000CF91089584B5806284BDC8BDF8CF8091AC +:101E80008000806880938000D0938900C093880090 +:101E9000EECF8091B00080688093B000C093B30013 +:101EA000E6CF8091B00080628093B000C093B40010 +:101EB000DECF3FB7F8948091A4049091A504A0913F +:101EC000A604B091A70426B5A89B05C02F3F19F022 +:101ED0000196A11DB11D3FBFBA2FA92F982F8827AA +:101EE000BC01CD01620F711D811D911D42E0660F85 +:101EF000771F881F991F4A95D1F708958F929F9257 +:101F0000AF92BF92CF92DF92EF92FF924B015C01B2 +:101F10000E94590F6B017C010E94590F6C197D09B9 +:101F20008E099F09683E734081059105A8F321E061 +:101F3000821A9108A108B10888EEC80E83E0D81E65 +:101F4000E11CF11C81149104A104B10429F7FF9054 +:101F5000EF90DF90CF90BF90AF909F908F900895BB +:101F60002FB7F8946091A0047091A1048091A2040D +:101F70009091A3042FBF0895AF92BF92CF92DF92AA +:101F8000EF92FF920F931F93CF93DF936C017B012E +:101F90008B01040F151FEB015E01AE18BF08C017BF +:101FA000D10759F06991D601ED91FC910190F08132 +:101FB000E02DC6010995892B79F7C501DF91CF91F5 +:101FC0001F910F91FF90EF90DF90CF90BF90AF9057 +:101FD00008950895DC011696ED91FC9117971296DD +:101FE0008C91481B477081E090E001C0880F4A95B2 +:101FF000EAF7E60FF11D3081222319F0832B80834D +:10200000089580958323FBCFFB014181DC0112966B +:102010002C911297421768F013962C91139724175E +:1020200040F0608115962C91621718F424810C946D +:10203000EA0F0895FC0180819281980F928321819B +:10204000921760F494819F5F94839381890F821724 +:1020500010F08FEF820F838381E0089580E0089570 +:10206000FC01128280818150838314820895DB01F8 +:10207000ED91FC9109940F931F93CF93DF931F92DF +:10208000CDB7DEB70091EC041091ED04E0911B0593 +:10209000F0911C0582E0099530E020E04AE0B801AB +:1020A0008AEE94E00E943710182FE0911B05F09102 +:1020B0001C0583E00995E0911B05F0911C0580E06B +:1020C00009951123B9F16091EC047091ED049E0122 +:1020D0002F5F3F4F46E48AEE94E00E9437108981DB +:1020E0008093EA046091EC047091ED049E012F5FEF +:1020F0003F4F47E48AEE94E00E9437108981809335 +:10210000EB046091EC047091ED0430E020E048E4D1 +:102110008AEE94E00E9437108093F5046091EC04FD +:102120007091ED042DE135E047E18AEE94E00E94E4 +:10213000371011E0812F0F90DF91CF911F910F91F8 +:102140000895CF93DF9380912305811105C081E02D +:10215000809323050E943B10C091EC04D091ED04C4 +:10216000E0911B05F0911C0582E00995E0911B05AB +:10217000F0911C0581E0099530E020E044E1BE01CA +:102180008AEE94E00E9437102DE135E047E1BE0170 +:102190008AEE94E00E943710E0911B05F0911C0537 +:1021A00080E0DF91CF9109940F931F93CF93E0913B +:1021B000F804F091F904309719F08AEE94E009954B +:1021C0000091EC041091ED04E0911B05F0911C05C9 +:1021D00082E00995E0911B05F0911C0581E00995CD +:1021E00030E020E045E1B8018AEE94E00E9437102B +:1021F000C82F882341F02DE135E047E1B8018AEE90 +:1022000094E00E943710E0911B05F0911C0580E0DE +:1022100009958C2FCF911F910F9108950B96FC017A +:10222000849108950A96FC0184910895FC0184919B +:1022300008950E941611882321F0823011F083E066 +:10224000089586E00895FC01E60FF11D849190E069 +:10225000982F88273196E4918E0F911D089568E09C +:102260000C94231166E00C9423115F926F927F927D +:102270008F929F92AF92BF92CF92DF92EF92FF9296 +:102280000F931F93CF93DF93EC01E62EF42EC22E13 +:102290000C811D81C8010E941611D82E8C819D8150 +:1022A0000E941911982E21E0AA24AA94D21202C0E9 +:1022B0002FE0A22E8C819D810E941211D82E8C813C +:1022C0009D810E940E11B82E8C819D810E942F113C +:1022D000E0E6EC1578F4009769F0080F191F91E615 +:1022E000D92EBC14C0F4188A1B8A1C8A198A1A8A2F +:1022F00080E0A0C08C819D810E943211F0E4FC1529 +:1023000038F4009729F0080F191F81E4D82EE9CF7F +:102310000F5E1F4FE6CFBD1430F3892D90E0F8011A +:1023200024912F3F31F40F5F1F4FBD14E1F2D3947E +:10233000F6CFCD1072C08C819D810E94161198013C +:102340002F5F3F4FF801882319F0823009F04EC00B +:1023500084918B8BF90124912C8BF8013396E491B5 +:10236000E88BF8013496E491E98BF8013596E49115 +:10237000EA8B0115110509F4BBCF8C819D810E9468 +:1023800019113C89F31A9A89F91A9FEF930F9F0D3F +:102390002CA94EA94F1508F449C0921718F49F159F +:1023A00008F047C02B899989E90E9FEF920F9E0D87 +:1023B0004BA95DA95E1508F44DC0941718F49E153D +:1023C00008F037C0080F111D295F722E769476949D +:1023D00076946F2C630E5E01FCE1AF0EB11C872C6E +:1023E000912CF61431F15E2C68014AC08491982F2B +:1023F0009F7092509A8B82958F70898BF9012491EE +:10240000822F8F708C8B22952F702B8BF801329638 +:10241000E491E295EF70E88BACCF3296E491EA213B +:10242000E80FF92FF11D0E0F1F1F7FCF921708F035 +:10243000B6CF8889DF91CF911F910F91FF90EF90D8 +:10244000DF90CF90BF90AF909F908F907F906F90D4 +:102450005F900895941708F0B2CFEBCFF601849106 +:102460006A817B815C8EFD8E1F8E8E8F95014BE382 +:10247000CE010E943710FFEFCF1ADF0A28E0520E7C +:102480008C2D801B871550F3080D191DF394A9CFCF +:10249000EF92FF920F931F93CF93DF93F82E062FA7 +:1024A000E42E152FE091FF04F09100058AEE94E0F0 +:1024B0000995080FCE2DD12F10E02991211108C0C8 +:1024C000812FDF91CF911F910F91FF90EF90089591 +:1024D000402F6F2D8AEE94E00E943511F80E180FF0 +:1024E000ECCF0F931F93CF93DF938C01E091FF0408 +:1024F000F09100058AEE94E00995D82FC0E0F8012C +:102500002491222351F04D2F6C2F8AEE94E00E94EB +:102510003511C80F0F5F1F4FF2CF8C2FDF91CF9176 +:102520001F910F9108952EE93FE0009709F4089557 +:10253000F9013197F1F70197F8CFCF93DF9300D0EE +:10254000CDB7DEB720ED37E03A8329839091BC0008 +:10255000982311F081E00FC029813A81232B81F467 +:102560008091A90481FDF6CF8091A80481110DC04E +:1025700091E09093A8040F900F90DF91CF91089570 +:1025800029813A8121503109DFCF80E0F4CF84EAFC +:102590008093BC0061E080E80E949D12811102C01E +:1025A00080E008958091B900887F883051F08031B3 +:1025B00041F08091A8048111F3CF82E08093A804B8 +:1025C000EFCF88E78093BB0084E88093BC0062E093 +:1025D00080E80E949D12882319F38091A90481FD4F +:1025E00005C08091B900887F883119F781E008958E +:1025F00084E98093BC0064E080E10C949D12809398 +:10260000BB0084E88093BC0063E080E80E949D12D8 +:102610008823A1F08091A90481FD0DC08091B900AB +:10262000887F883241F08091A804811106C092E031 +:102630009093A804089581E0089580E00895109291 +:10264000A80408958093A9041092B90084FF05C0DE +:102650008CE08093B8000C941F1388E4FACFCF93DA +:10266000DF93FC0123A5222389F0EC010E94C7120D +:10267000811104C080E0DF91CF9108958EA1811176 +:1026800007C00E94FF128823A9F31BA681E0F3CFA5 +:1026900080E4F7CF0F931F93CF93DF93C62FD42FF0 +:1026A0008901633001F138F4613099F0623009F446 +:1026B00049C0C1E012C0663029F1673091F1653040 +:1026C000C1F70E942F13811117C00E94F812C0E0B9 +:1026D00004C0FC0186A50E9422138C2FDF91CF91AC +:1026E0001F910F910895FC0116A221E023A741112B +:1026F000E0CF0E94F812DDCF8D2F0E94FF128111D2 +:10270000D8CFE3CF0E942F138823F9F2DD2389F27B +:10271000F80181918F010E94FF128823B1F2D150FC +:10272000F5CF0E942F13882381F2DD2311F2F801E7 +:1027300084910E94FF12C82F882379F20F5F1F4FE8 +:10274000D150F3CFFC0146A321E023A7B2CFDB0198 +:102750001496ED91FC9130E020E065E00994DB01F6 +:102760001496ED91FC9130E020E062E00994DB01E9 +:102770001496ED91FC9130E020E063E00994CF9253 +:10278000DF92EF92FF920F931F93CF93DF938C0111 +:102790007B016A0180E0F601C491811110C081E0E3 +:1027A000CF3F49F04C2FB701C8010E94A7138823DF +:1027B00009F444C080E0BFEFCB1ADB0AECCF4FEF47 +:1027C000CF3F89F3CE3FD9F1C03FA0F7C03E38F0EC +:1027D0004C2F4F70B701C8010E94AF13EBCFC03D23 +:1027E00038F04C2F4F70B701C8010E94B713E2CFE9 +:1027F000C03CF8F0D7011496ED91FC9130E020E058 +:1028000040E064E0C8010995C295C07FCE5FD0E08A +:10281000CE010E949312D7011496ED91FC9130E005 +:1028200020E041E064E0C8010995CE010E949312C6 +:10283000C1CFC7FDBFCF8C2F90E0F8CF80E0DF91F4 +:10284000CF911F910F91FF90EF90DF90CF9008955F +:10285000AF92BF92CF92DF92FF920F931F93CF93CD +:10286000DF936C018B01F42EE90180E1481709F434 +:102870007EC0841778F1AAE04A1709F461C0BFE06E +:102880004B1709F47FC0F80102811381F2E3FF16B0 +:1028900009F4DDC0FF1508F48EC085E1F81609F4CF +:1028A000DBC0A7E1FA1609F4ECC0B4E1FB1265C085 +:1028B000D8011696ED91FC91179715968C918E0F75 +:1028C0009F2F911D11928E179F07E1F7C8010E945B +:1028D000301053C0E1E14E1709F451C0F5E14F1338 +:1028E000D2CFFB01A280B38042EA50E0C6010E9431 +:1028F000BF13D50114964C91406BB801C6010E94DC +:10290000A71341E0B801C6010E94AF13F50126816B +:102910003781D8011496ED91FC91D50115964C9113 +:1029200066E0C601099581111CC080E0DF91CF915E +:102930001F910F91FF90DF90CF90BF90AF900895BF +:10294000DB011496ED91FC9130E020E042E061E083 +:10295000C60109954AEA50E0B801C6010E94BF13BA +:1029600092CF40E0B801C6010E94B7138CCF49E96D +:1029700050E0B801C6010E94BF1381E0D7CF4EE8F6 +:1029800050E0F7CF41E0C6010E94B71340E0B80124 +:10299000C6010E94AF1341E8B801C6010E94A71307 +:1029A0004881B801C6010E94A71340E0B801C601E2 +:1029B0000E94B713E2CFE6E4FE1609F46CC0F7E418 +:1029C000FF1609F46DC08BE3F812D7CF99818B8184 +:1029D00038E0390F813031F0833011F0392F02C0E7 +:1029E000392F985021E0D80113964C91491708F4DB +:1029F00020E041E0391708F040E091E0F801528111 +:102A0000351708F490E0322F342B932319F4242344 +:102A100009F4B3CFFA80D12CC12C843048F490E073 +:102A2000FC01EA5EFD4FC0808E5E9D4FDC01DC90B4 +:102A3000F7FE04C0BE01C8010E94041088818C0DFD +:102A4000888389818D0D8983FF0C91F796CFBE0114 +:102A5000C8010E94041091CFC8010E941A10882357 +:102A600009F463CFD8011696ED91FC91179715964E +:102A70008C918E0F9F2F911D11928E179F07E1F75A +:102A80007CCF1882F80182818983858181508A8375 +:102A900083818B8372CFD80115968C9188836DCFFB +:102AA000F8018181FBCF80917A00806980937A0060 +:102AB0008EE480937C0061E070E080E090E00E9412 +:102AC0007E0F83B7817F826083BF80E130E020E0AA +:102AD00093B7916093BF889593B79E7F93BF909172 +:102AE0007A0096FDFCCF4091780050917900240F38 +:102AF000351F815069F780917A008F7780937A0033 +:102B000084E0369527958A95E1F750E040E064EB44 +:102B10007BE281E190E00E94BC2AC9010895809186 +:102B20007A00806980937A0088EC80937C0064E16D +:102B300070E080E090E00E947E0F83B7817F82602A +:102B400083BF80E270E060E093B7916093BF8895A7 +:102B500093B79E7F93BF90917A0096FDFCCF209112 +:102B6000780030917900620F731F815069F780916E +:102B70007A008F7780937A0076956795769567953A +:102B800062527A4090E080E00E94312C26EF38E2D9 +:102B90004CE151E40E94892B089590917A0090694C +:102BA00090937A008E50806480937C0083B7817FFD +:102BB000826083BF20E290E080E033B7316033BFB2 +:102BC000889533B73E7F33BF30917A0036FDFCCF16 +:102BD0004091780050917900840F951F215069F73A +:102BE00020917A002F7720937A0025E0969587959B +:102BF0002A95E1F708958FE00E94CD15A0916E040B +:102C0000B0916F049C010E94082B0E94332C28E590 +:102C100039E743E353E40E94892B0E94022CCB0145 +:102C200008950F931F93CF938091B201882399F059 +:102C3000CFEF0FEE11E061E085E00E94970EC80132 +:102C40000197F1F760E085E00E94970EC8010197B7 +:102C5000F1F7C15081F7CF911F910F910895CF9255 +:102C6000DF92EF92FF920F931F93CF93DF93D82EB3 +:102C7000C92E86E00E946E0EC1E0892B09F0C0E0EB +:102C80000E94A11081E4E82E8EE0F82E8FE49EE0F1 +:102C90000E94F80DF0920005E092FF040D2D1C2D0E +:102CA000D0E0F801419151918F016D2F80E00E9499 +:102CB0004812D05FD038A9F70E94D4108111E6CF16 +:102CC000CC2369F086E00E946E0EC1E0892B39F0BA +:102CD0006AE070E080E090E00E947E0FC0E086E055 +:102CE0000E946E0E892B61F7C111ECCFDF91CF915D +:102CF0001F910F91FF90EF90DF90CF900C941116E1 +:102D00005F926F927F928F929F92AF92BF92CF927B +:102D1000DF92EF92FF920F931F93CF93DF939090E8 +:102D20008E04AA24A394911001C0A12C80916C015F +:102D30008150990B1092750410927404880F991F9A +:102D4000909373048093720481E090E090937104F7 +:102D500080937004892D90E0880F991F90938104CF +:102D60008093800486E00E946E0EDD24D394892B2C +:102D700009F0D12C01E41EE046E0B42EC09180049D +:102D8000D0918104D595C795CC2E7E01FF24C70133 +:102D90008A0D911DA7FC9A9589199109A12C97FD7F +:102DA00006C08330910514F082E090E0A82E0E94C6 +:102DB000A1108A2D0A2C000C990B3C012FEF621AEE +:102DC000720A629420EF62225C2C5A18E81AF90AFF +:102DD0008FE49EE00E94F80D109300050093FF041D +:102DE00084E790E00E9471124AE152E0662D80E093 +:102DF0000E944812912C812C712C852D870D739483 +:102E000090916C01891780F4C701880D991DB89EB7 +:102E1000A001B99E500D11244B525E4F672D629553 +:102E2000607F8CE00E9448128FEF881A980A23E096 +:102E30007212E3CF0E94D4108111CACFDD2061F05D +:102E400086E00E946E0E892B39F06AE070E080E027 +:102E500090E00E947E0FD12C86E00E946E0E892B9E +:102E6000B1F4D11014C00E941116C0928E04DF91EB +:102E7000CF911F910F91FF90EF90DF90CF90BF9077 +:102E8000AF909F908F907F906F905F9008959C2E51 +:102E900075CF2F923F924F925F926F927F928F9257 +:102EA0009F92AF92BF92CF92DF92EF92FF920F93D9 +:102EB0001F93CF93DF9300D000D0CDB7DEB77C0156 +:102EC000942EFC012080318077247394411101C03D +:102ED000712C70E0759567956A8310927504109255 +:102EE000740462507109660F771F709373046093C6 +:102EF000720481E090E09093710480937004892DB6 +:102F000090E0880F991F909381048093800486E05D +:102F10000E946E0E66246394892B09F0612CCC24E8 +:102F2000CA944FE7D42E51E4A52E5EE0B52E8091D1 +:102F3000800490918104959587959C838B835B8019 +:102F40008C011127C801870D911D77FC9A9589196D +:102F50009109712C97FD06C08330910514F082E031 +:102F600090E0782E0E94A110272D072C000C330B27 +:102F7000C9010196E82FE295E07FE9832C9DC0010D +:102F80002D9D900D3C9D900D1124080F191F000FD1 +:102F9000111F8FE49EE00E94F80DB0920005A092F0 +:102FA000FF04F7014081518160E080E00E944812F7 +:102FB000FCE12F16F2E03F0661F440918E0486E0BA +:102FC000489FA00111244B525E4F60E086E30E94AF +:102FD00048124AE152E0698180E00E944812882448 +:102FE0008394912C412C4394852D840D87199A81CB +:102FF000891778F4F401EE0FFF1FE00FF11FEE0DBB +:10300000FF1D40815181642D6295607F8CE00E949C +:103010004812EFEF8E1A9E0AF3E04F12E4CF0E949F +:10302000D4108111B6CF662061F086E00E946E0E4A +:10303000892B39F06AE070E080E090E00E947E0F1A +:10304000612C86E00E946E0E892BE1F461101AC09B +:103050000E941116852D0F900F900F900F90DF9109 +:10306000CF911F910F91FF90EF90DF90CF90BF9085 +:10307000AF909F908F907F906F905F904F903F9018 +:103080002F9008959B8053CF3F924F925F926F9203 +:103090007F928F929F92AF92BF92CF92DF92EF92E8 +:1030A000FF920F931F93CF93DF93CDB7DEB72E9789 +:1030B0000FB6F894DEBF0FBECDBF80919804882371 +:1030C00009F4A5C110929B0410929C0410929D04D7 +:1030D00010929E0480909B0490909C04A0909D046C +:1030E000B0909E04C0908904D0908A04E0908B0434 +:1030F000F0908C04A7019601C501B4010E94172B22 +:103100002B013C0120E030E0A9010E94E32C1816BD +:103110000CF0A0C1C301B2010E94022C8091760480 +:10312000882309F4B8C1C0926304D0926404E09289 +:103130006504F0926604E12CF12C00EA10E420E032 +:1031400030E040E450E46E31710540F0E12CF12CA8 +:1031500000E81FE320E030E040E05FE360E070E083 +:1031600080E391E40E941A0D8091E404882309F41D +:103170002AC10E94B00F6D837E838F8398878091D0 +:10318000CC049091CD04A091CE04B091CF044D8198 +:103190005E816F817885481B590B6A0B7B0B809190 +:1031A000D8049091D904A091DA04B091DB044817B7 +:1031B00059076A077B0708F406C1E091C604F0913D +:1031C000C70480819181A281B38189839A83AB8373 +:1031D000BC83E091CA04F091CB049C01AD016081F5 +:1031E0007181828193810E94172B4B015C01209198 +:1031F000D4043091D5044091D6045091D70469810C +:103200007A818B819C810E94172B6B017C0120911C +:10321000BA043091BB044091BC045091BD04C50177 +:10322000B4010E94E82C2091D0043091D104409147 +:10323000D2045091D3040E94182B2B013C014092E0 +:10324000D0045092D1046092D2047092D304309092 +:10325000E50431101AC02091B6043091B7044091B2 +:10326000B8045091B904C701B6010E94E82C9B0133 +:10327000AC01C301B2010E94172B6093D00470937C +:10328000D1048093D2049093D3044090D004509002 +:10329000D1046090D2047090D3041091E004909116 +:1032A000E1049E87A091E204AD870091E304212F01 +:1032B000392F4A2F502FC301B2010E94E32C181658 +:1032C0000CF0CCC0812F9E85AD85B02F8093D004AB +:1032D0009093D104A093D204B093D304332009F483 +:1032E000D6C02091B6043091B7044091B8045091F3 +:1032F000B904C501B4010E94E82C4B015C01209186 +:10330000BE043091BF044091C0045091C104C70174 +:10331000B6010E94E82C9B01AC016091D004709131 +:10332000D1048091D2049091D3040E94172BA5015F +:1033300094010E94182B6B017C019B01AC01612F51 +:103340007E858D85902F0E94842B87FD18C010915B +:10335000DC049091DD049E87A091DE04AD8700918E +:10336000DF04212F392F4A2F502FB601C7010E94A9 +:10337000842B87FD04C01C2DDE86ED860F2DE09189 +:10338000C804F091C904812F9E85AD85B02F80833C +:103390009183A283B38389819A81AB81BC8180931D +:1033A000D4049093D504A093D604B093D7048D8110 +:1033B0009E81AF81B8858093CC049093CD04A09377 +:1033C000CE04B093CF0460919204709193048091E5 +:1033D0009404909195040E94FB2BCB012E960FB67E +:1033E000F894DEBF0FBECDBFDF91CF911F910F913B +:1033F000FF90EF90DF90CF90BF90AF909F908F9015 +:103400007F906F905F904F903F900C94010F809150 +:103410009704609184017091850181110EC08091A3 +:1034200087049091880420919604BC01222329F0FE +:1034300060917F01680F792F711D90E080E00E94FC +:10344000312C60939B0470939C0480939D04909313 +:103450009E0440CEC301B20190585ECE8091DC0440 +:103460009091DD04A091DE04B091DF0489879A87F2 +:10347000AB87BC879C01AD01C301B2010E94842BC4 +:1034800087FF2CCF89859A85AB85BC851FCF812C82 +:10349000912C540134CF20E030E040E05FE3C701DD +:1034A000B6010E94182B9B01AC01C501B4010E941A +:1034B000E32C18164CF4109292041092930410927C +:1034C0009404109295047FCF80E090E0AFE7B3E4DE +:1034D0008093920490939304A0939404B0939504E2 +:1034E00072CF4F925F926F927F928F929F92AF9224 +:1034F000BF92CF92DF92EF92FF92CF93DF938090B3 +:103500006A0490906B04A0906C04B0906D04C0911C +:103510008E04D0E0C501B4010E94FB2B6B017C013D +:1035200020E030E048E453E4C501B4010E94842B5C +:1035300093E0CC0FDD1F9A95E1F7C45DDE4F87FF66 +:1035400031C02881398150E040E0255131094109DD +:103550005109C701B6010E945A2D28EC30E040E025 +:1035600050E00E94BC2ACA01B9016B5E7F4F8F4FA9 +:103570009F4F0E94332C6093890470938A04809338 +:103580008B0490938C04DF91CF91FF90EF90DF90AC +:10359000CF90BF90AF909F908F907F906F905F90F3 +:1035A0004F9008954A805B80712C612C20E030E0C0 +:1035B0004CE853E4C501B4010E94842B87FF1FC06F +:1035C00088809980B12CA12CA7019601285C310933 +:1035D00041095109C301B201681979098A099B0996 +:1035E0000E945A2D20E530E040E050E00E94BC2AC5 +:1035F000CA01B901680D791D8A1D9B1DBACF2C81A6 +:103600003D8150E040E02419350946095709C701BA +:10361000B60168517140810991090E945A2D20E537 +:1036200030E040E050E00E94BC2ACA01B901640DBC +:10363000751D861D971D9DCFDF92EF92FF920F9310 +:103640001F93CF93DF93EC01D62E1CAD0BAD7C0105 +:1036500084E0E80EF11CE98DFA8DC7010995412F30 +:10366000480F2D2D602FC7010E9435119BAD890F8A +:103670008BAF81E090E0DF91CF911F910F91FF9090 +:10368000EF90DF9008950F931F93CF93DF938C01FA +:10369000D0E0C0E0F801EC0FFD1F6491662341F01B +:1036A00086EE94E00E941C1B892B11F02196F2CF2C +:1036B000CE01DF91CF911F910F910895682F86EE73 +:1036C00094E00C941C1B2F923F924F925F926F924A +:1036D0007F928F929F92AF92BF92CF92DF92EF92A2 +:1036E000FF920F931F93CF93DF9300D01F92CDB71C +:1036F000DEB7412C1B821A820EE310E040ECE42E70 +:10370000F12CCC24C394D12C60E2262E7EEB872EA4 +:10371000912C8A81898386E00E946E0E3324339433 +:10372000892B09F0312C1093750400937404F092E6 +:103730007304E0927204D0927104C0927004E2E8C3 +:10374000F0E0F0938104E093800431E4A32E3EE0A6 +:10375000B32E809180049091810495958795582E81 +:10376000FFE18F1342C01093750400937404F0922C +:103770007304E0927204D0927104C092700490922B +:103780008104809280049FE5592E0E94A1108FE44D +:103790009EE00E94F80DB0920005A092FF048FE712 +:1037A00090E00E94711240922105F0E3F09322050F +:1037B0008EE50E945E1B1092210520922205712C3D +:1037C000612C8981681648F580918E04F30196E09A +:1037D000989FE00DF11D1124EB52FE4F80810E9455 +:1037E0005E1BEFEF6E1A7E0AECCF80E65812CDCF4B +:1037F0001093750400937404F0927304E0927204C1 +:10380000D0927104C0927004E0E4F0E0F09381047F +:10381000E093800480E2582EB8CF40922105209298 +:103820002205852D0E945E1B0E94D4108111AFCF0E +:10383000332061F086E00E946E0E892B39F06AE039 +:1038400070E080E090E00E947E0F312C86E00E94C4 +:103850006E0E892B09F07DCF31107BCFA0908E04A6 +:10386000F6E0FA9D50011124C5018B529E4F5C0178 +:10387000EA81FB81E80FF91F50820E9411166AE06D +:1038800070E080E090E00E947E0FEA81FB8131963B +:10389000FB83EA83F9E04F0E8DE248123ACFF5013F +:1038A00015820F900F900F90DF91CF911F910F9184 +:1038B000FF90EF90DF90CF90BF90AF909F908F9050 +:1038C0007F906F905F904F903F902F900895089554 +:1038D00090E080E00895FC0101900020E9F7319725 +:1038E000AF01481B590BBC0186EE94E00C94BC0F51 +:1038F0008F929F92AF92BF920F931F93CF93DF93BC +:10390000CDB7DEB7A1970FB6F894DEBF0FBECDBF1F +:1039100019A2423008F44AE08E010F5D1F4F842E39 +:10392000912CB12CA12CA50194010E94E62AE62F2E +:10393000B901CA01EA30F4F4E05DD801EE938D01DB +:10394000232B242B252B79F790E080E0109719F09A +:10395000CD010E946B1CA1960FB6F894DEBF0FBE7E +:10396000CDBFDF91CF911F910F91BF90AF909F90EE +:103970008F900895E95CE1CF4F925F926F927F92B2 +:103980008F929F92AF92BF92CF92DF92EF92FF926F +:103990000F931F93CF936B017C01742EAC019B019D +:1039A0000E94552D882399F081E292E0CF911F91DA +:1039B0000F91FF90EF90DF90CF90BF90AF909F90CE +:1039C0008F907F906F905F904F900C946B1C46018E +:1039D0005701E894B7F82FEF3FEF4FE75FE7C501D6 +:1039E000B4010E94552D81110DC02FEF3FEF4FE71D +:1039F0005FE7C501B4010E94842B18161CF485E210 +:103A000092E0D4CF2FEF3FEF4FE75FE4C701B6015D +:103A10000E94E32C18161CF489E292E0C7CF2FEF26 +:103A20003FEF4FE75FECC701B6010E94842B87FD93 +:103A3000F3CF20E030E0A901C701B6010E94842B3A +:103A400010E000E087FF08C08DE20E945E1B8C0141 +:103A5000F7FAF094F7F8F094C0E060E070E080E0EE +:103A60009FE37C1641F020E030E040E251E40E9408 +:103A7000892BCF5FF6CFA70196010E94182B2B014F +:103A80003C010E94022C4B015C014AE00E94781C20 +:103A90007C01E00EF11ECC23B1F1C501B4010E94FE +:103AA000312C9B01AC01C301B2010E94172B4B01C9 +:103AB0005C018EE20E945E1BE80EF91EC15018F1F7 +:103AC00020E030E040E251E4C501B4010E94E82C5E +:103AD0002B013C010E94022C4B01B12CA12C4AE08D +:103AE000C501B4010E94781CE80EF91EC501B4019D +:103AF0000E94312C9B01AC01C301B2010E94172B23 +:103B00004B015C01DBCFC701CF911F910F91FF905B +:103B1000EF90DF90CF90BF90AF909F908F907F906D +:103B20006F905F904F9008957F928F929F92AF9287 +:103B3000BF92CF92DF92EF92FF920F931F93CF939A +:103B4000DF937C0186E00E946E0E11E0892B09F064 +:103B500010E091E4C92E9EE0D92E00E22AE0722EF8 +:103B6000C0918004D0918104D595C7950E94A11081 +:103B70004E01B12CA12C8FE49EE00E94F80DD09252 +:103B80000005C092FF04F7014081518160E080E0B0 +:103B90000E94481210922105009322058AE192E0CA +:103BA0000E946B1C7092210500932205209779F5E5 +:103BB00088E690E00E94431B0E94D4108111DBCF65 +:103BC000112361F086E00E946E0E892B39F06AE0C5 +:103BD00070E080E090E00E947E0F10E086E00E949E +:103BE0006E0E892B09F0BCCF1111BACF0E941116AD +:103BF000CE01DF91CF911F910F91FF90EF90DF9059 +:103C0000CF90BF90AF909F908F907F9008954AE0A3 +:103C1000C501B4010E94781C8DE292E00E946B1CE9 +:103C2000F70182819381009739F20E946B1CC4CF07 +:103C30001F93CF93DF93EC01162F0E94A62A18172B +:103C400039F0612FCE01DF91CF911F910C94AE2AF4 +:103C5000DF91CF911F910895AF92BF92CF92DF92E3 +:103C6000EF92FF920F931F93CF93DF9360918B019D +:103C700082E090E00E94181E60918A0183E090E04B +:103C80000E94181E6091850184E090E00E94181E39 +:103C90006091840185E090E00E94181E60917F0190 +:103CA00086E090E00E94181E6091D30187E090E0CA +:103CB0000E94181E6091D20188E090E00E94181EB8 +:103CC0006091D10189E090E00E94181E60919104FA +:103CD0008AE090E00E94181E609176048BE090E0EC +:103CE0000E94181E6091B2018CE090E00E94181EA4 +:103CF00060918E048DE090E00E94181E60916C012E +:103D00008EE090E00E94181E8FE0E82EF12C10E06B +:103D100006E080916C011817B8F5109F600111241E +:103D2000D0E0C0E0FE01EC0DFD1DEB52FE4F6081C6 +:103D3000C7018C0F9D1F0E94181E2196C630D10509 +:103D400089F7670186E0C80ED11C88E0189FE00162 +:103D50001124C45DDE4F8EE0E80EF11C69812296CD +:103D6000C6010E94181E560182E0A80EB11CFE0179 +:103D700032976081C60101960E94181E6501AE143B +:103D8000BF0461F71F5FC5CFDF91CF911F910F91E6 +:103D9000FF90EF90DF90CF90BF90AF9008958F92FB +:103DA0009F92AF92BF92CF92DF92EF92FF92CF930A +:103DB0008FEF90E00E94010F83ED9EE00197F1F7F5 +:103DC0008EE00E94CD15BC0190E080E00E94312C75 +:103DD0004B015C018AE00E946E0E9091620498177C +:103DE00029F091E090938D04809362048091090101 +:103DF0009FEF980F90930901811106C00E94FB1557 +:103E00009093900480938F04609192047091930436 +:103E100080919404909195040E94FB2BCB010E9409 +:103E2000010FC0906A04D0906B04E0906C04F09095 +:103E30006D04A7019601C501B4010E94172B2DEC5A +:103E40003CEC4CE45DE30E94E82CA70196010E9443 +:103E5000182B60936A0470936B0480936C049093A6 +:103E60006D040E94711A6091990470919A0490E017 +:103E700080E00E94312C4B015C01C0909B04D090EB +:103E80009C04E0909D04F0909E04A70196010E947E +:103E9000842B811151C02091890430918A04409172 +:103EA0008B0450918C04C501B4010E94172B4B0167 +:103EB0005C0120E030E0A9010E94E32C181694F583 +:103EC00020E030E040EA50E4C501B4010E94E32C58 +:103ED000181694F16091990470919A0490E080E032 +:103EE0000E94312CA70196010E94172B4B015C0107 +:103EF00020E030E0A9010E94E32C181664F520E0D0 +:103F000030E040E85FE3C501B4010E94842B18163D +:103F100064F1C701B6010E94022C70939A04609369 +:103F2000990423C020E030E040EA50ECC501B40120 +:103F30000E94842B87FFCECF6091890470918A0400 +:103F400080918B0490918C040E94022C70939A04AF +:103F500060939904BFCF20E030E040E85FEBC501FB +:103F6000B4010E94E32C87FFD4CF60918704709145 +:103F7000880490E080E00E94312C209189043091E7 +:103F80008A0440918B0450918C040E94172B6B0182 +:103F90007C0120E030E0A9010E94E32C18160CF00F +:103FA0006EC0C701B6010E94022C6530710508F091 +:103FB0006AC080910502811105C08091D4018111F0 +:103FC0000E94111681E0809305021092D401809125 +:103FD000990490919A04853F21E0920710F0109285 +:103FE000080120910801211140C0843F9140E8F56B +:103FF0008FEF90E00E94010F0E941116C1E0C09364 +:1040000008010E9480160E942C1EC0938D048EE031 +:104010000E94CD15BC0190E080E00E94312C60939D +:104020006A0470936B0480936C0490936D041092F7 +:104030007F0480918704909188042CE231E03093D2 +:1040400075042093740420E233E0309373042093CA +:1040500072042AE030E03093710420937004880FDA +:10406000991F9093810480938004CF91FF90EF90EB +:10407000DF90CF90BF90AF909F908F900895C70131 +:10408000B601905890CF10920502A1CF0C94A62AA9 +:104090001F920F920FB60F9211242F933F938F937D +:1040A0009F93AF93BF938091A0049091A104A0919E +:1040B000A204B091A30430919F0423E0230F2D3775 +:1040C00058F50196A11DB11D20939F048093A00473 +:1040D0009093A104A093A204B093A3048091A4049C +:1040E0009091A504A091A604B091A7040196A11DEA +:1040F000B11D8093A4049093A504A093A604B0934B +:10410000A704BF91AF919F918F913F912F910F90F5 +:104110000FBE0F901F90189526E8230F0296A11D41 +:10412000B11DD2CF1F920F920FB60F9211242F9371 +:104130003F934F935F936F937F938F939F93EF93EF +:10414000FF9383B1817029B190916904981709F4A4 +:104150009DC030E0220F232F221F330B922F80931C +:10416000690440916804241709F490C020936804FE +:104170002091700430917104981719F031952195B0 +:1041800031094091800450918104609174047091D0 +:104190007504240F351F261737070CF48BC02091A8 +:1041A000700430917104981719F0319521953109F7 +:1041B0004091800450918104609172047091730465 +:1041C000240F351F621773070CF46FC04091700401 +:1041D00050917104981719F051954195510920910A +:1041E000800430918104240F351F30938104209383 +:1041F000800441E0981340E020916704421709F4DD +:1042000040C02091700430917104981719F03195D5 +:10421000219531096091800470918104E0917404CA +:10422000F0917504260F371F2E173F070CF44CC072 +:104230002091700430917104981719F031952195EF +:1042400031096091800470918104E0917204F091D1 +:104250007304260F371FE217F3078CF120917004C7 +:1042600030917104981719F0319521953109809199 +:10427000800490918104820F931F90938104809316 +:1042800080044093670481E080938D04FF91EF9157 +:104290009F918F917F916F915F914F913F912F915E +:1042A0000F900FBE0F901F901895209172043091BF +:1042B00073049BCF209174043091750496CF809144 +:1042C000720490917304D9CF809174049091750415 +:1042D000D4CF1895CF93DF93CDB7DEB72D970FB618 +:1042E000F894DEBF0FBECDBF789484B5826084BDE4 +:1042F00084B5816084BD85B5826085BD85B58160EA +:1043000085BD80916E00816080936E001092810067 +:104310008091810082608093810080918100816022 +:1043200080938100809180008160809380008091E3 +:10433000B10084608093B1008091B000816080936F +:10434000B00080917A00846080937A0080917A0036 +:10435000826080937A0080917A00816080937A00F5 +:1043600080917A00806880937A001092C10060E0AA +:104370008EE00E94C50E60E08FE00E94C50E61E0F5 +:1043800085E00E94C50E61E089E00E94C50E62E0F2 +:1043900087E00E94C50E62E088E00E94C50E62E0E0 +:1043A00086E00E94C50E62E08AE00E94C50E8FEF93 +:1043B00090E00E94010F60E085E00E94970E8091DE +:1043C0007A00876080937A0080917A008860809379 +:1043D0007A00789481E080936B00809368008BBBB7 +:1043E0008091F504883209F0B6C08FEF80930A05FA +:1043F00090E080E00E944620182F81E090E00E942B +:104400004620912F8C36974E09F0B5C082E090E09F +:104410000E944620182F83E090E00E944620912FB2 +:1044200090938B0180938A0184E090E00E94462063 +:10443000182F85E090E00E944620912F90938501EF +:104440008093840186E090E00E94462080937F0163 +:1044500087E090E00E9446208093D30188E090E0BE +:104460000E9446208093D20189E090E00E9446207D +:104470008093D1018AE090E00E94462080939104CD +:104480008BE090E00E94462091E0811101C090E015 +:10449000909376048CE090E00E94462091E0811198 +:1044A00001C090E09093B2018DE090E00E94462020 +:1044B00080938E048EE090E00E944620282E809308 +:1044C0006C01FCE28F2EF1E09F2EA5EDAA2EA1E05B +:1044D000BA2EBFE0EB2EF12C312C231409F457C077 +:1044E00010E000E0C701800F911F0E944620F501F7 +:1044F000E00FF11F80830F5F1F4F0630110591F70A +:10450000670136E0C30ED11C6EE0E60EF11C3401EB +:10451000C6010E944620082F10E0102F0027D3016B +:104520000D931C932601B2E04B0E511CC60101965F +:104530000E944620082BF301019311933F01620171 +:104540004E145F0429F73394F8E08F0E911C26E097 +:10455000A20EB11CC2CF823011F483E047CF81306C +:1045600009F444CF803309F043CF8FEF80930A05DD +:1045700080930B053DCF67EE90E080E00E94181E0F +:104580006CE681E090E00E94181E0E942C1E0E94A2 +:10459000531590936F0480936E040E94FB159093C3 +:1045A000900480938F0400918A0110918B011093E5 +:1045B0008804009387048EE00E94CD15BC0190E032 +:1045C00080E00E94312C60936A0470936B048093A6 +:1045D0006C0490936D040E948F150E94711A20E064 +:1045E00030E040EA51E46091890470918A0480913E +:1045F0008B0490918C040E94182B6B017C01B801F4 +:1046000090E080E00E94312C9B01AC01C701B60113 +:104610000E94842B87FF04C090E080E00E94010F7D +:104620001092DC041092DD041092DE041092DF047C +:10463000412C512C7FE7672E73E4772E4092E004E3 +:104640005092E1046092E2047092E304A090C804E6 +:10465000B090C9048091E404D501CD90DD90ED9037 +:10466000FC90882309F449C6A3019201C701B60151 +:104670000E94E32C181634F5F501408251826282C3 +:1046800073828090D0049090D104A090D204B09016 +:10469000D304C090E004D090E104E090E204F090F4 +:1046A000E304A7019601C501B4010E94E32C18168A +:1046B000CCF4C092D004D092D104E092D204F09213 +:1046C000D30420C020E030E0A901C701B6010E9458 +:1046D000842B87FFD6CFD5011D921D921D921C926F +:1046E0001397CFCFC090DC04D090DD04E090DE04BF +:1046F000F090DF04A7019601C501B4010E94842B4C +:1047000087FDD7CF81E08093E40483B181708093EB +:10471000690489B190E0880F892F881F990B8093D5 +:104720006804209169049091680481E0291380E075 +:10473000809367048CE291E09093750480937404F5 +:1047400080E293E090937304809372048AE090E097 +:104750009093710480937004000F111F10938104D3 +:10476000009380040E94B00F6093830470938404CC +:1047700080938504909386040E9411160E9411165E +:10478000E0918004F0918104FA87E987F595E79537 +:10479000FC87EB87F0938804E093870486E00E940F +:1047A0006E0E8D8781119BC080917F04882309F450 +:1047B00096C00E9411160E94B00F6B017C01C0923E +:1047C0007B04D0927C04E0927D04F0927E0486E02B +:1047D0000E946E0E892B59F40E94B00F6C197D094E +:1047E0008E099F09643F71408105910580F30E9405 +:1047F000B00F6C197D098E099F09643F71408105D6 +:10480000910508F40DC58FEF90E00E94010F0E9402 +:10481000111610E03AE0232E312C412F62E18FEB8C +:1048200091E00E944917182F8730A8F5E82FF0E093 +:10483000E45EFB4D0C946A2D35246327E1274E2856 +:104840005C286628742820E030E0A901C701B60181 +:104850000E94842B87FF56CF1092D0041092D1046F +:104860001092D2041092D3044DCF90E2792E20E31F +:10487000622E412F6EE08DE691E00E944917182FBD +:10488000823009F4B1C208F059C1882309F482C109 +:10489000813009F482C10E942C1E81E080938D0436 +:1048A000AB85BC85B0938804A09387048CE291E02B +:1048B000909375048093740480E293E09093730462 +:1048C000809372048AE090E0909371048093700466 +:1048D00089859A858E7F9093810480938004BD851D +:1048E000B0937F0480919604882309F11091D1013F +:1048F0001123E9F00E94B00FC0907704D0907804A3 +:10490000E0907904F0907A046C197D098E099F0972 +:1049100028EE33E040E050E00E94E62A211738F00C +:10492000109296040E94111681E08093D401809128 +:104930008D048823E9F180919704882349F120E0D0 +:1049400030E040EA51E46091890470918A048091DA +:104950008B0490918C040E94182B6B017C01609158 +:1049600087047091880490E080E00E94312C9B01C4 +:10497000AC01C701B6010E94842B87FF04C090E000 +:1049800080E00E94010F0E94111681E08093D40103 +:1049900010928D0410929704109298040E94B00F08 +:1049A00060938304709384048093850490938604B9 +:1049B0000E94B00F0091830410918404209185041B +:1049C00030918604601B710B820B930B20E63AEE4C +:1049D00040E050E00E94E62A122F2093820480914A +:1049E000970481110BC08091D301882339F02817D7 +:1049F00028F081E0809397040E941116809198041A +:104A000081110BC08091D201882339F0181728F04A +:104A100081E0809398040E9411160E94CF1E0E948C +:104A200044180E94A11001E41EE088E2D82E93E50C +:104A3000F92E2FE0C22E34E1B32E44E3E42E56E0EB +:104A4000A52E65E2962E76E1872E8FE49EE00E94E9 +:104A5000F80D109300050093FF044AE352E060E074 +:104A600080E00E944812D0922105109222056091A8 +:104A70009B0470919C0480919D0490919E0440E061 +:104A80000E94BC1CF092210510922205809199048D +:104A900090919A04853F914008F4D8C382E691E052 +:104AA0000E94431B80919104882309F401C4609102 +:104AB0008F047091900490E080E00E94312C20E0FF +:104AC00030E04AE754E40E94892B2B013C0110920C +:104AD0002105E092220580918E048A9DC001112457 +:104AE0008B529E4F0E946B1CF0922105E092220592 +:104AF00041E0C301B2010E94BC1C8CE391E00E9422 +:104B0000431B80EA9AE00E94F80D10930005009381 +:104B1000FF04909221058092220560919904709182 +:104B20009A0488E391E0653FF1E07F0708F0D7C37E +:104B300090E080E04AE00E94781CD3C3833009F4FF +:104B400056C1843009F0A7CE80916C01883008F0FE +:104B5000B7C191E0980F90936C0180938E040E94EE +:104B6000631BE0918E04B8E0EB9FF0011124E45D3B +:104B7000FE4F28ED30E03183208384E391E093837E +:104B80008283A6E8B1E0B583A4832EE130E03783C9 +:104B900026836FCE0E9480166CCECE0101962C012A +:104BA000C12CD12C7601C39481E4282E8EE0382EBE +:104BB000E0918E0494E0E99FF0011124C601019771 +:104BC000E80FF91FEE0FFF1FE45DFE4F808191811A +:104BD0009093880480938704A8ECB0E0B0937504A8 +:104BE000A0937404E8EEF3E0F0937304E09372048E +:104BF00021E030E03093710420937004880F991FF6 +:104C0000909381048093800431E03093D40186E056 +:104C10000E946E0E01E0892B09F000E00E94CF1E79 +:104C20000E9444180E94A1108FE49EE00E94F80D9B +:104C3000309200052092FF0481E091E00E94711201 +:104C40001092210560E1609322058AEF90E00E94B6 +:104C5000431B4AE0C701B6010E94781C8FE292E034 +:104C60000E946B1C80910502109221057092220512 +:104C7000882309F49DC08DEE90E00E94431B1092A2 +:104C800021056092220586EE90E00E94431B8091F0 +:104C9000800490918104959587954C01092E000C14 +:104CA000AA08BB0897FF80C08DE20E945E1B6627A2 +:104CB0007727CB01681979098A099B094AE00E9484 +:104CC000781C0E94D4108111AFCF002361F086E0E0 +:104CD0000E946E0E892B39F06AE070E080E090E06F +:104CE0000E947E0F00E086E00E946E0E892B09F084 +:104CF00095CF011193CF8091800490918104959577 +:104D00008795D2018D939D932D010E9411166AE023 +:104D100070E080E090E00E947E0FBFEFCB1ADB0ACC +:104D2000EB0AFB0AE4E0CE16D104E104F10409F039 +:104D30003FCF8FEF90E00E94010F83ED9EE001973F +:104D4000F1F70E948F150E94022C1B0178876F8358 +:104D5000A980BA80EB80FC80C5010A968E159F055C +:104D600008F087CDCD80DE80C7010A968C159D05A1 +:104D700008F07FCD40E066E080E191E00E944917B5 +:104D8000882309F476CDE0918E0428E0E29FF001BB +:104D90001124E45DFE4FB182A082F382E282D582CB +:104DA000C4823782268265CD4AE0C501B40187CF2F +:104DB0008FED90E00E94431B60916A0470916B0438 +:104DC00080916C0490916D040E94022C90E080E030 +:104DD0004AE00E94781C109221056092220580ED25 +:104DE00090E00E94431B6DCF0E94631B42CD8091D7 +:104DF0006C01813029F486E191E00E942F1639CDB3 +:104E000040E066E08EE191E00E944917882309F4B2 +:104E100030CD80918E0490916C01A92FA150BB0BD5 +:104E2000AD0106E08A171B0639F4815080938E0489 +:104E3000915090936C011DCDE82FF0E0E417F50739 +:104E4000BCF7809F7001112430E020E05F01BFEFCC +:104E5000AB1ABB0AB9016E0D7F1D6B527E4FDB0191 +:104E60001696DC901697DC922F5F3F4F2630310567 +:104E700089F7D50123E0AA0FBB1F2A95E1F7A45DAE +:104E8000BE4F2D913C91119763E0EE0FFF1F6A9585 +:104E9000E1F7E45DFE4F3183208312962D913C9122 +:104EA00013973383228314962D913C911597358364 +:104EB000248316962D913C91378326838F5FBCCF38 +:104EC00084E291E09ACF00E048E2442E512C50E970 +:104ED000652E772473946CE2862E9924939470E265 +:104EE000A72E73E0B72EE4E1CE2ED12CF8ECEF2EF6 +:104EF000F12C402F6AE08CE891E00E944917082FBE +:104F0000813009F43FC0F8F0823009F086CC8091FE +:104F10007F0190E0D0927504C0927404F092730403 +:104F2000E09272043092710420927004880F991FED +:104F300090938104809380048BE791E00E94941DFC +:104F400080937F01D6CF80918A0190918B019092BE +:104F5000750480927404B0927304A092720430922B +:104F6000710420927004880F991F9093810480939C +:104F7000800486E891E00E94941D90938B018093B9 +:104F80008A01B7CF80918401909185015092750478 +:104F900040927404709273046092720430927104AF +:104FA00020927004880F991F90938104809380044D +:104FB00080E891E00E94941D909385018093840184 +:104FC00098CF00E0402F6AE082EA91E00E94491702 +:104FD000082F813009F442C008F1823009F01DCC5D +:104FE0008091D10190E01092750410927404E8E66B +:104FF000F1E0F0937304E093720430927104209214 +:105000007004880F991F909381048093800486E92F +:1050100091E00E94941D8093D101D4CF8091D3015F +:1050200090E01092750410927404ACE3B0E0B09379 +:105030007304A0937204E1E0F0E0F0937104E09354 +:105040007004880F991F90938104809380048EE9E7 +:1050500091E00E94941D8093D301B4CF8091D2013E +:1050600090E0109275041092740428E730E03093B9 +:10507000730420937204A5E0B0E0B0937104A09390 +:105080007004880F991F90938104809380048AE9AB +:1050900091E00E94941D8093D20194CF40917604B8 +:1050A00066E089EB91E00E94491791E0811101C00F +:1050B00090E090937604B1CB4091910466E083EB4D +:1050C00091E00E94491780939104A7CB4091B201CF +:1050D00066E08CEA91E00E94491791E0811101C0DD +:1050E00090E09093B20199CB86E00E946E0E01E0B1 +:1050F000892B09F000E00E94531590936F04809370 +:105100006E04BC0190E080E00E94312C20E030E091 +:105110004AE754E40E94892B6B017C010E94FB1535 +:105120009093900480938F04BC0190E080E00E94F3 +:10513000312C20E030E04AE754E40E94892B4B01F7 +:105140005C010E948F152B013C010E94A1108FE48D +:105150009EE00E94F80D21E43EE03093000520938C +:10516000FF04109221051092220589E291E00E942D +:10517000431B85E392E00E946B1C1092210530E1F5 +:105180003093220583E291E00E94431B41E0C3017A +:10519000B2010E94BC1C80E291E00E94431B10926D +:1051A000210560E2609322058AE191E00E94431BA1 +:1051B00041E0C501B4010E94BC1C87E191E00E945E +:1051C000431B1092210580E38093220580E191E04A +:1051D0000E94431B41E0C701B6010E94BC1C8DE048 +:1051E00091E00E94431B0E94D4108111B0CF002394 +:1051F00061F086E00E946E0E892B39F06AE070E063 +:1052000080E090E00E947E0F00E086E00E946E0E3B +:10521000892B09F070CF01116ECF0E941116FDCAC3 +:105220008091960491E0892780939604882351F019 +:105230000E94B00F60937704709378048093790490 +:1052400090937A0481E080938D0449CB80919804F7 +:10525000882319F08CE591E023CC80919704882372 +:1052600019F086E591E01CCC80919604882319F012 +:1052700080E591E015CC80910502882319F08AE43D +:1052800091E00ECC20E030E044E353E460919204DE +:105290007091930480919404909195040E94842BC2 +:1052A00087FF03C084E491E0FBCB8EE391E0F8CB71 +:1052B00082EC91E00E94F80D109300050093FF042A +:1052C000C0922105B09222056091990470919A04D0 +:1052D000653F21E0720708F42BCC84E391E00E9443 +:1052E000431B0E94D4108111B0CB80E090E0892B49 +:1052F00009F446CA0E94000043CAC092D004D0926A +:10530000D104E092D204F092D304E091C604F0916B +:10531000C70480819181A281B3818093D40490934A +:10532000D504A093D604B093D70420E030E04FE733 +:1053300053E4C701B6010E94E32C18160CF083CA8F +:105340004092D0045092D1046092D2047092D3045F +:10535000D9C90F931F93CF9382E994E09093C90426 +:105360008093C80483E694E09093C7048093C604B6 +:105370008BE994E09093CB048093CA041092E404E8 +:105380001092DC041092DD041092DE041092DF040F +:1053900080E090E0AFE7B3E48093E0049093E10411 +:1053A000A093E204B093E30484E690E0A0E0B0E0D0 +:1053B0008093D8049093D904A093DA04B093DB04CB +:1053C00081E090E09093C3048093C2049093C5045D +:1053D0008093C404C1E0C093E50480E090E0A0E3C2 +:1053E000B1E48093AA049093AB04A093AC04B0936F +:1053F000AD0480E090E0A0E0BFE38093AE04909322 +:10540000AF04A093B004B093B10480E090E0A0E8B2 +:10541000BFE38093B2049093B304A093B404B09319 +:10542000B50480E090E0A0E3B1EC8093B6049093E3 +:10543000B704A093B804B093B9048DEC9CECACE431 +:10544000BDEB8093BA049093BB04A093BC04B093CB +:10545000BD0480E090E0A0E2B1EC8093BE049093A4 +:10546000BF04A093C004B093C1040E94B00F009188 +:10547000D8041091D9042091DA043091DB04601B28 +:10548000710B820B930B6093CC047093CD048093CB +:10549000CE049093CF041092E9041092E8048AE0BD +:1054A00092E09093E7048093E60410922105109215 +:1054B0002205109223051092EF041092EE04109230 +:1054C000F1041092F0041092F304C093F20482E20B +:1054D0008093F4041092F9041092F804EDE0F5E0E2 +:1054E0008BE195E02FEF21938E179F07E1F781E085 +:1054F00080930A0526EF3DE0309300052093FF04DA +:1055000080930105109202051092030580E48093B8 +:1055100004051092050589EE9FE090931C05809389 +:105520001B058AE091E09093ED048093EC0482E106 +:10553000809318050E943B108AE092E09093E70464 +:105540008093E604CF911F910F910895F999FECFB2 +:1055500092BD81BDF89A992780B50895262FF999B3 +:10556000FECF1FBA92BD81BD20BD0FB6F894FA9A46 +:10557000F99A0FBE01960895052E97FB1EF400942C +:105580000E94D32A57FD07D00E94E62A07FC03D0C9 +:105590004EF40C94D32A50954095309521953F4F69 +:1055A0004F4F5F4F089590958095709561957F4F0F +:1055B0008F4F9F4F08950E94082BA59F900DB49F79 +:1055C000900DA49F800D911D11240895A1E21A2E23 +:1055D000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F97 +:1055E000A217B307E407F50720F0A21BB30BE40BE7 +:1055F000F50B661F771F881F991F1A9469F760952E +:105600007095809590959B01AC01BD01CF010895E7 +:10561000A29FB001B39FC001A39F700D811D1124F3 +:10562000911DB29F700D811D1124911D0895505838 +:10563000BB27AA270E942F2B0C94A92C0E949B2CDD +:1056400038F00E94A22C20F039F49F3F19F426F480 +:105650000C94982C0EF4E095E7FB0C94922CE92F17 +:105660000E94BA2C58F3BA1762077307840795078C +:1056700020F079F4A6F50C94DC2C0EF4E0950B2EBA +:10568000BA2FA02D0B01B90190010C01CA01A00194 +:105690001124FF27591B99F0593F50F4503E68F1EF +:1056A0001A16F040A22F232F342F4427585FF3CF30 +:1056B000469537952795A795F0405395C9F77EF401 +:1056C0001F16BA0B620B730B840BBAF09150A1F04A +:1056D000FF0FBB1F661F771F881FC2F70EC0BA0FD0 +:1056E000621F731F841F48F4879577956795B79558 +:1056F000F7959E3F08F0B0CF9395880F08F0992753 +:10570000EE0F9795879508950E946E2C08F481E01E +:1057100008950E949D2B0C94A92C0E94A22C58F055 +:105720000E949B2C40F029F45F3F29F00C94922CAE +:1057300051110C94DD2C0C94982C0E94BA2C68F317 +:105740009923B1F3552391F3951B550BBB27AA273A +:1057500062177307840738F09F5F5F4F220F331F74 +:10576000441FAA1FA9F335D00E2E3AF0E0E832D03C +:1057700091505040E695001CCAF72BD0FE2F29D03F +:10578000660F771F881FBB1F261737074807AB0711 +:10579000B0E809F0BB0B802DBF01FF2793585F4F86 +:1057A0003AF09E3F510578F00C94922C0C94DD2C2D +:1057B0005F3FE4F3983ED4F3869577956795B79568 +:1057C000F7959F5FC9F7880F911D9695879597F973 +:1057D0000895E1E0660F771F881FBB1F62177307EC +:1057E0008407BA0720F0621B730B840BBA0BEE1F01 +:1057F00088F7E09508950E94022C6894B1110C94EA +:10580000DD2C08950E94C22C88F09F5798F0B92F84 +:105810009927B751B0F0E1F0660F771F881F991FE5 +:105820001AF0BA95C9F714C0B13091F00E94DC2C7F +:10583000B1E008950C94DC2C672F782F8827B85F8F +:1058400039F0B93FCCF3869577956795B395D9F73D +:105850003EF490958095709561957F4F8F4F9F4F47 +:105860000895E89409C097FB3EF490958095709553 +:1058700061957F4F8F4F9F4F9923A9F0F92F96E99C +:10588000BB279395F695879577956795B795F11111 +:10589000F8CFFAF4BB0F11F460FF1BC06F5F7F4FAE +:1058A0008F4F9F4F16C0882311F096E911C07723C0 +:1058B00021F09EE8872F762F05C0662371F096E8C9 +:1058C000862F70E060E02AF09A95660F771F881F98 +:1058D000DAF7880F9695879597F90895990F00083C +:1058E000550FAA0BE0E8FEEF16161706E807F907B2 +:1058F000C0F012161306E407F50798F0621B730B4D +:10590000840B950B39F40A2661F0232B242B252BCD +:1059100021F408950A2609F4A140A6958FEF811D70 +:10592000811D089597F99F6780E870E060E0089511 +:105930009FEF80EC089500240A94161617061806A7 +:105940000906089500240A94121613061406050683 +:105950000895092E0394000C11F4882352F0BB0F14 +:1059600040F4BF2B11F460FF04C06F5F7F4F8F4F77 +:105970009F4F089557FD9058440F551F59F05F3FB2 +:1059800071F04795880F97FB991F61F09F3F79F061 +:1059900087950895121613061406551FF2CF4695E3 +:1059A000F1DF08C0161617061806991FF1CF869565 +:1059B0007105610508940895E894BB276627772749 +:1059C000CB0197F908950E946E2C08F48FEF08958B +:1059D0000E94FB2C0C94A92C0E949B2C38F00E9456 +:1059E000A22C20F0952311F00C94922C0C94982C5E +:1059F00011240C94DD2C0E94BA2C70F3959FC1F3F6 +:105A0000950F50E0551F629FF001729FBB27F00D6C +:105A1000B11D639FAA27F00DB11DAA1F649F6627C1 +:105A2000B00DA11D661F829F2227B00DA11D621F10 +:105A3000739FB00DA11D621F839FA00D611D221FCA +:105A4000749F3327A00D611D231F849F600D211DAE +:105A5000822F762F6A2F11249F5750409AF0F1F031 +:105A600088234AF0EE0FFF1FBB1F661F771F881F9A +:105A700091505040A9F79E3F510580F00C94922C14 +:105A80000C94DD2C5F3FE4F3983ED4F38695779534 +:105A90006795B795F795E7959F5FC1F7FE2B880F40 +:105AA000911D9695879597F908950E946E2C880B05 +:105AB000990B0895DB018F939F930E94DB2ABF917E +:105AC000AF91A29F800D911DA39F900DB29F900D4D +:105AD00011240895EE0FFF1F0590F491E02D099415 +:045AE000F894FFCF68 +:105AE400084000000080E20301FF281400014A136B +:105AF4003F025002530257025F026A02760280029A +:105B04005002530257028F029B02AA02D8003401AA +:105B140086011E00000000000000000000000000DC +:105B24000000000000000000000000000000000071 +:105B34000000000000000000000000000000000061 +:105B4400000000000000000000000000011C02B37F +:105B540002BE02CC02D702E202EE02F502000332D8 +:105B64000603000396001103000340011E03110302 +:105B74000603F502EE022C03380340034A035203E2 +:105B84004A035E03520340032C03EE026D037403C5 +:105B94007C030183038F039B03A603B303BA03BEF1 +:105BA40003C9031E035E03A60383036D03D603EE3A +:105BB40002280F05014243312E3500000000000089 +:105BC40000000000000000000000000000000000D1 +:105BD40000000000000000000000000000000000C1 +:105BE400000000000001000000001C1BBC0F681C2A +:105BF400671C000100FF0100FF003E005469703A79 +:105C0400006E616E00696E66006F7666002000208B +:105C14006F6620330076312E37005345543A0053D3 +:105C2400746F72652053657474696E6773203F00E6 +:105C34004E6F00596573005761726E696E67005943 +:105C44006F752063616E6E6F740064656C65746556 +:105C540020796F7572006C6173742074697021000F +:105C640041726520796F752073757265203F005904 +:105C74006F752072656163686564006D6178696D34 +:105C8400756D206E756D626572006F662074697043 +:105C94007321004368616E67652054697000436135 +:105CA4006C696272617465205469700052656E613A +:105CB4006D65205469700044656C65746520546991 +:105CC4007000416464206E657720546970005265E9 +:105CD4007475726E00426F6F73742054656D70003A +:105CE400646567204300536C6565702054656D706E +:105CF4000044656661756C742054656D700054656C +:105D04006D702053657474696E677300426F6F73AE +:105D1400742054696D6572005365636F6E6473001B +:105D24004F66662054696D6572004D696E757465C1 +:105D34007300536C6565702054696D657200546915 +:105D44006D65722053657474696E67730042757A69 +:105D54007A65720044697361626C6500456E6162C4 +:105D64006C65004D61696E2053637265656E004217 +:105D74006967204E756D62657273004D6F726520A0 +:105D8400496E666F7300436F6E74726F6C20547942 +:105D9400706500446972656374005049440053653A +:105DA400747570204D656E75005469702053657468 +:105DB40074696E677300496E666F726D6174696FA2 +:025DC4006E006F +:00000001FF