diff --git a/img/PixeSymbol2字符映射表.png b/img/PixeSymbol2字符映射表.png new file mode 100644 index 0000000..8ffe36a Binary files /dev/null and b/img/PixeSymbol2字符映射表.png differ diff --git a/img/PixeSymbol3.ttf b/img/PixeSymbol3.ttf new file mode 100644 index 0000000..c678226 Binary files /dev/null and b/img/PixeSymbol3.ttf differ diff --git a/img/PixeSymbol3字符映射表.png b/img/PixeSymbol3字符映射表.png new file mode 100644 index 0000000..83efead Binary files /dev/null and b/img/PixeSymbol3字符映射表.png differ diff --git a/img/PixeSymbol字符映射表.png b/img/PixeSymbol字符映射表.png new file mode 100644 index 0000000..37a466e Binary files /dev/null and b/img/PixeSymbol字符映射表.png differ diff --git a/img/README.txt b/img/README.txt new file mode 100644 index 0000000..220dcbd --- /dev/null +++ b/img/README.txt @@ -0,0 +1,2 @@ +感谢 千年板蓝根(github: lihaoyun6) 提供的字体文件以及相关素材!!! +Thanks for the font files and related materials provided by 千年板蓝根 (GitHub: lihaoyun6)!!! \ No newline at end of file diff --git a/img/StartTFBitMa.bat b/img/StartTFBitMa.bat new file mode 100644 index 0000000..6a8dd8f --- /dev/null +++ b/img/StartTFBitMa.bat @@ -0,0 +1,6 @@ +@echo off +for %%s in (\*.png) do ( +echo %%s +java -jar compressor2.0.jar %%s -anp %%s >>bitmaps.h +) +pause \ No newline at end of file diff --git a/img/千年板蓝根/c1.png b/img/c1.png similarity index 100% rename from img/千年板蓝根/c1.png rename to img/c1.png diff --git a/img/千年板蓝根/c2.png b/img/c2.png similarity index 100% rename from img/千年板蓝根/c2.png rename to img/c2.png diff --git a/img/千年板蓝根/c3.png b/img/c3.png similarity index 100% rename from img/千年板蓝根/c3.png rename to img/c3.png diff --git a/img/千年板蓝根/c4.png b/img/c4.png similarity index 100% rename from img/千年板蓝根/c4.png rename to img/c4.png diff --git a/img/千年板蓝根/c5.png b/img/c5.png similarity index 100% rename from img/千年板蓝根/c5.png rename to img/c5.png diff --git a/img/千年板蓝根/c6.png b/img/c6.png similarity index 100% rename from img/千年板蓝根/c6.png rename to img/c6.png diff --git a/img/千年板蓝根/c7.png b/img/c7.png similarity index 100% rename from img/千年板蓝根/c7.png rename to img/c7.png diff --git a/img/compressor2.0.jar b/img/compressor2.0.jar new file mode 100644 index 0000000..dbcb013 Binary files /dev/null and b/img/compressor2.0.jar differ diff --git a/img/千年板蓝根/1.jpg b/img/千年板蓝根/1.jpg deleted file mode 100644 index 7f6ba08..0000000 Binary files a/img/千年板蓝根/1.jpg and /dev/null differ diff --git a/img/千年板蓝根/指示针.png b/img/千年板蓝根/指示针.png deleted file mode 100644 index 284d447..0000000 Binary files a/img/千年板蓝根/指示针.png and /dev/null differ diff --git a/img/千年板蓝根/无.png b/img/千年板蓝根/无.png deleted file mode 100644 index 03ff12e..0000000 Binary files a/img/千年板蓝根/无.png and /dev/null differ diff --git a/img/千年板蓝根/标签.png b/img/千年板蓝根/标签.png deleted file mode 100644 index 842ae6a..0000000 Binary files a/img/千年板蓝根/标签.png and /dev/null differ diff --git a/img/千年板蓝根/温度计.png b/img/千年板蓝根/温度计.png deleted file mode 100644 index da4edbf..0000000 Binary files a/img/千年板蓝根/温度计.png and /dev/null differ diff --git a/img/千年板蓝根/芯片16x16.png b/img/千年板蓝根/芯片16x16.png deleted file mode 100644 index 0f83e44..0000000 Binary files a/img/千年板蓝根/芯片16x16.png and /dev/null differ diff --git a/img/千年板蓝根/设置/0.png b/img/千年板蓝根/设置/0.png deleted file mode 100644 index 48e17a0..0000000 Binary files a/img/千年板蓝根/设置/0.png and /dev/null differ diff --git a/img/千年板蓝根/设置/1.png b/img/千年板蓝根/设置/1.png deleted file mode 100644 index 1f218b7..0000000 Binary files a/img/千年板蓝根/设置/1.png and /dev/null differ diff --git a/img/千年板蓝根/设置/3.png b/img/千年板蓝根/设置/3.png deleted file mode 100644 index 9274f46..0000000 Binary files a/img/千年板蓝根/设置/3.png and /dev/null differ diff --git a/img/千年板蓝根/设置/4.png b/img/千年板蓝根/设置/4.png deleted file mode 100644 index 684b440..0000000 Binary files a/img/千年板蓝根/设置/4.png and /dev/null differ diff --git a/img/千年板蓝根/设置/5-1.png b/img/千年板蓝根/设置/5-1.png deleted file mode 100644 index 5e7f2b6..0000000 Binary files a/img/千年板蓝根/设置/5-1.png and /dev/null differ diff --git a/img/千年板蓝根/设置/5.png b/img/千年板蓝根/设置/5.png deleted file mode 100644 index d6871ba..0000000 Binary files a/img/千年板蓝根/设置/5.png and /dev/null differ diff --git a/img/千年板蓝根/设置/6.png b/img/千年板蓝根/设置/6.png deleted file mode 100644 index a1659e9..0000000 Binary files a/img/千年板蓝根/设置/6.png and /dev/null differ diff --git a/img/千年板蓝根/设置/7.png b/img/千年板蓝根/设置/7.png deleted file mode 100644 index 23aeb97..0000000 Binary files a/img/千年板蓝根/设置/7.png and /dev/null differ diff --git a/img/千年板蓝根/设置/PID.png b/img/千年板蓝根/设置/PID.png deleted file mode 100644 index 4476e3a..0000000 Binary files a/img/千年板蓝根/设置/PID.png and /dev/null differ diff --git a/img/千年板蓝根/设置/中文.png b/img/千年板蓝根/设置/中文.png deleted file mode 100644 index bc829ec..0000000 Binary files a/img/千年板蓝根/设置/中文.png and /dev/null differ diff --git a/img/千年板蓝根/设置/关机.png b/img/千年板蓝根/设置/关机.png deleted file mode 100644 index c93883d..0000000 Binary files a/img/千年板蓝根/设置/关机.png and /dev/null differ diff --git a/img/千年板蓝根/设置/删除.png b/img/千年板蓝根/设置/删除.png deleted file mode 100644 index c64399c..0000000 Binary files a/img/千年板蓝根/设置/删除.png and /dev/null differ diff --git a/img/千年板蓝根/设置/取消.png b/img/千年板蓝根/设置/取消.png deleted file mode 100644 index 90fb88f..0000000 Binary files a/img/千年板蓝根/设置/取消.png and /dev/null differ diff --git a/img/千年板蓝根/设置/提温.png b/img/千年板蓝根/设置/提温.png deleted file mode 100644 index 42e890a..0000000 Binary files a/img/千年板蓝根/设置/提温.png and /dev/null differ diff --git a/img/千年板蓝根/设置/无.png b/img/千年板蓝根/设置/无.png deleted file mode 100644 index 7237551..0000000 Binary files a/img/千年板蓝根/设置/无.png and /dev/null differ diff --git a/img/千年板蓝根/设置/更换.png b/img/千年板蓝根/设置/更换.png deleted file mode 100644 index 6d78605..0000000 Binary files a/img/千年板蓝根/设置/更换.png and /dev/null differ diff --git a/img/千年板蓝根/设置/校准.png b/img/千年板蓝根/设置/校准.png deleted file mode 100644 index 9a8813e..0000000 Binary files a/img/千年板蓝根/设置/校准.png and /dev/null differ diff --git a/img/千年板蓝根/设置/添加.png b/img/千年板蓝根/设置/添加.png deleted file mode 100644 index 52b8028..0000000 Binary files a/img/千年板蓝根/设置/添加.png and /dev/null differ diff --git a/img/千年板蓝根/设置/直接控制.png b/img/千年板蓝根/设置/直接控制.png deleted file mode 100644 index 8bad0ff..0000000 Binary files a/img/千年板蓝根/设置/直接控制.png and /dev/null differ diff --git a/img/千年板蓝根/设置/睡眠.png b/img/千年板蓝根/设置/睡眠.png deleted file mode 100644 index cd47641..0000000 Binary files a/img/千年板蓝根/设置/睡眠.png and /dev/null differ diff --git a/img/千年板蓝根/设置/确认.png b/img/千年板蓝根/设置/确认.png deleted file mode 100644 index c33277e..0000000 Binary files a/img/千年板蓝根/设置/确认.png and /dev/null differ diff --git a/img/千年板蓝根/设置/简约.png b/img/千年板蓝根/设置/简约.png deleted file mode 100644 index 1517ac6..0000000 Binary files a/img/千年板蓝根/设置/简约.png and /dev/null differ diff --git a/img/千年板蓝根/设置/翻转.png b/img/千年板蓝根/设置/翻转.png deleted file mode 100644 index 6fed064..0000000 Binary files a/img/千年板蓝根/设置/翻转.png and /dev/null differ diff --git a/img/千年板蓝根/设置/英文.png b/img/千年板蓝根/设置/英文.png deleted file mode 100644 index 198728b..0000000 Binary files a/img/千年板蓝根/设置/英文.png and /dev/null differ diff --git a/img/千年板蓝根/设置/详细.png b/img/千年板蓝根/设置/详细.png deleted file mode 100644 index 13e08c9..0000000 Binary files a/img/千年板蓝根/设置/详细.png and /dev/null differ diff --git a/img/千年板蓝根/设置/语言.png b/img/千年板蓝根/设置/语言.png deleted file mode 100644 index ee68341..0000000 Binary files a/img/千年板蓝根/设置/语言.png and /dev/null differ diff --git a/img/千年板蓝根/设置/软盘.png b/img/千年板蓝根/设置/软盘.png deleted file mode 100644 index a10264d..0000000 Binary files a/img/千年板蓝根/设置/软盘.png and /dev/null differ diff --git a/img/设置/0.png b/img/设置/0.png deleted file mode 100644 index 48e17a0..0000000 Binary files a/img/设置/0.png and /dev/null differ diff --git a/img/设置/1.png b/img/设置/1.png deleted file mode 100644 index 1f218b7..0000000 Binary files a/img/设置/1.png and /dev/null differ diff --git a/img/设置/2.png b/img/设置/2.png deleted file mode 100644 index 4402983..0000000 Binary files a/img/设置/2.png and /dev/null differ diff --git a/img/设置/3.png b/img/设置/3.png deleted file mode 100644 index 9274f46..0000000 Binary files a/img/设置/3.png and /dev/null differ diff --git a/img/设置/4.png b/img/设置/4.png deleted file mode 100644 index 684b440..0000000 Binary files a/img/设置/4.png and /dev/null differ diff --git a/img/设置/5-1.png b/img/设置/5-1.png deleted file mode 100644 index 5e7f2b6..0000000 Binary files a/img/设置/5-1.png and /dev/null differ diff --git a/img/设置/5.png b/img/设置/5.png deleted file mode 100644 index d6871ba..0000000 Binary files a/img/设置/5.png and /dev/null differ diff --git a/img/设置/6-1弃.png b/img/设置/6-1弃.png deleted file mode 100644 index abf9888..0000000 Binary files a/img/设置/6-1弃.png and /dev/null differ diff --git a/img/设置/6-2弃.png b/img/设置/6-2弃.png deleted file mode 100644 index f02fecd..0000000 Binary files a/img/设置/6-2弃.png and /dev/null differ diff --git a/img/设置/6.png b/img/设置/6.png deleted file mode 100644 index a1659e9..0000000 Binary files a/img/设置/6.png and /dev/null differ diff --git a/img/设置/7.png b/img/设置/7.png deleted file mode 100644 index 23aeb97..0000000 Binary files a/img/设置/7.png and /dev/null differ diff --git a/img/设置/Lang_CN.png b/img/设置/Lang_CN.png new file mode 100644 index 0000000..ba079fd Binary files /dev/null and b/img/设置/Lang_CN.png differ diff --git a/img/设置/Lang_EN.png b/img/设置/Lang_EN.png new file mode 100644 index 0000000..5818ff3 Binary files /dev/null and b/img/设置/Lang_EN.png differ diff --git a/img/设置/PID.png b/img/设置/PID.png deleted file mode 100644 index 4476e3a..0000000 Binary files a/img/设置/PID.png and /dev/null differ diff --git a/img/设置/Set0.png b/img/设置/Set0.png new file mode 100644 index 0000000..89214ae Binary files /dev/null and b/img/设置/Set0.png differ diff --git a/img/设置/Set1.png b/img/设置/Set1.png new file mode 100644 index 0000000..d02e3c7 Binary files /dev/null and b/img/设置/Set1.png differ diff --git a/img/设置/Set10.png b/img/设置/Set10.png new file mode 100644 index 0000000..ec38faf Binary files /dev/null and b/img/设置/Set10.png differ diff --git a/img/设置/Set11.png b/img/设置/Set11.png new file mode 100644 index 0000000..715f945 Binary files /dev/null and b/img/设置/Set11.png differ diff --git a/img/设置/Set12.png b/img/设置/Set12.png new file mode 100644 index 0000000..1b463da Binary files /dev/null and b/img/设置/Set12.png differ diff --git a/img/设置/Set13.png b/img/设置/Set13.png new file mode 100644 index 0000000..9aa492d Binary files /dev/null and b/img/设置/Set13.png differ diff --git a/img/设置/Set14.png b/img/设置/Set14.png new file mode 100644 index 0000000..eef78d9 Binary files /dev/null and b/img/设置/Set14.png differ diff --git a/img/设置/Set15.png b/img/设置/Set15.png new file mode 100644 index 0000000..7756b34 Binary files /dev/null and b/img/设置/Set15.png differ diff --git a/img/设置/Set16.png b/img/设置/Set16.png new file mode 100644 index 0000000..58e269d Binary files /dev/null and b/img/设置/Set16.png differ diff --git a/img/设置/Set17.png b/img/设置/Set17.png new file mode 100644 index 0000000..7fa00c0 Binary files /dev/null and b/img/设置/Set17.png differ diff --git a/img/设置/Set18.png b/img/设置/Set18.png new file mode 100644 index 0000000..a968cec Binary files /dev/null and b/img/设置/Set18.png differ diff --git a/img/千年板蓝根/设置/2.png b/img/设置/Set2.png similarity index 100% rename from img/千年板蓝根/设置/2.png rename to img/设置/Set2.png diff --git a/img/设置/Set3.png b/img/设置/Set3.png new file mode 100644 index 0000000..970c26b Binary files /dev/null and b/img/设置/Set3.png differ diff --git a/img/设置/Set4.png b/img/设置/Set4.png new file mode 100644 index 0000000..a8214ca Binary files /dev/null and b/img/设置/Set4.png differ diff --git a/img/设置/Set4F.png b/img/设置/Set4F.png new file mode 100644 index 0000000..710a5dd Binary files /dev/null and b/img/设置/Set4F.png differ diff --git a/img/设置/Set4FF.png b/img/设置/Set4FF.png new file mode 100644 index 0000000..af5062c Binary files /dev/null and b/img/设置/Set4FF.png differ diff --git a/img/设置/Set5.png b/img/设置/Set5.png new file mode 100644 index 0000000..5a6d7a5 Binary files /dev/null and b/img/设置/Set5.png differ diff --git a/img/设置/Set5_1.png b/img/设置/Set5_1.png new file mode 100644 index 0000000..200b292 Binary files /dev/null and b/img/设置/Set5_1.png differ diff --git a/img/设置/Set6.png b/img/设置/Set6.png new file mode 100644 index 0000000..1b8b15a Binary files /dev/null and b/img/设置/Set6.png differ diff --git a/img/设置/Set7.png b/img/设置/Set7.png new file mode 100644 index 0000000..bb84ee7 Binary files /dev/null and b/img/设置/Set7.png differ diff --git a/img/设置/Set8.png b/img/设置/Set8.png new file mode 100644 index 0000000..1251da6 Binary files /dev/null and b/img/设置/Set8.png differ diff --git a/img/设置/Set9.png b/img/设置/Set9.png new file mode 100644 index 0000000..ad1ca15 Binary files /dev/null and b/img/设置/Set9.png differ diff --git a/img/设置/Set_LANG.png b/img/设置/Set_LANG.png new file mode 100644 index 0000000..b0bedc8 Binary files /dev/null and b/img/设置/Set_LANG.png differ diff --git a/img/设置/c_NO.png b/img/设置/c_NO.png new file mode 100644 index 0000000..99c4112 Binary files /dev/null and b/img/设置/c_NO.png differ diff --git a/img/设置/save.png b/img/设置/save.png new file mode 100644 index 0000000..895d09a Binary files /dev/null and b/img/设置/save.png differ diff --git a/img/设置/中文.png b/img/设置/中文.png deleted file mode 100644 index bc829ec..0000000 Binary files a/img/设置/中文.png and /dev/null differ diff --git a/img/设置/关机.png b/img/设置/关机.png deleted file mode 100644 index c93883d..0000000 Binary files a/img/设置/关机.png and /dev/null differ diff --git a/img/设置/删除.png b/img/设置/删除.png deleted file mode 100644 index c64399c..0000000 Binary files a/img/设置/删除.png and /dev/null differ diff --git a/img/设置/取消.png b/img/设置/取消.png deleted file mode 100644 index 90fb88f..0000000 Binary files a/img/设置/取消.png and /dev/null differ diff --git a/img/设置/提温.png b/img/设置/提温.png deleted file mode 100644 index 42e890a..0000000 Binary files a/img/设置/提温.png and /dev/null differ diff --git a/img/设置/无.png b/img/设置/无.png deleted file mode 100644 index 7237551..0000000 Binary files a/img/设置/无.png and /dev/null differ diff --git a/img/设置/更换.png b/img/设置/更换.png deleted file mode 100644 index 6d78605..0000000 Binary files a/img/设置/更换.png and /dev/null differ diff --git a/img/设置/校准.png b/img/设置/校准.png deleted file mode 100644 index 9a8813e..0000000 Binary files a/img/设置/校准.png and /dev/null differ diff --git a/img/设置/添加.png b/img/设置/添加.png deleted file mode 100644 index 52b8028..0000000 Binary files a/img/设置/添加.png and /dev/null differ diff --git a/img/设置/直接控制.png b/img/设置/直接控制.png deleted file mode 100644 index 8bad0ff..0000000 Binary files a/img/设置/直接控制.png and /dev/null differ diff --git a/img/设置/睡眠.png b/img/设置/睡眠.png deleted file mode 100644 index cd47641..0000000 Binary files a/img/设置/睡眠.png and /dev/null differ diff --git a/img/设置/确认.png b/img/设置/确认.png deleted file mode 100644 index c33277e..0000000 Binary files a/img/设置/确认.png and /dev/null differ diff --git a/img/设置/简约.png b/img/设置/简约.png deleted file mode 100644 index 1517ac6..0000000 Binary files a/img/设置/简约.png and /dev/null differ diff --git a/img/设置/翻转.png b/img/设置/翻转.png deleted file mode 100644 index 6fed064..0000000 Binary files a/img/设置/翻转.png and /dev/null differ diff --git a/img/设置/英文.png b/img/设置/英文.png deleted file mode 100644 index 198728b..0000000 Binary files a/img/设置/英文.png and /dev/null differ diff --git a/img/设置/详细.png b/img/设置/详细.png deleted file mode 100644 index 13e08c9..0000000 Binary files a/img/设置/详细.png and /dev/null differ diff --git a/img/设置/语言.png b/img/设置/语言.png deleted file mode 100644 index ee68341..0000000 Binary files a/img/设置/语言.png and /dev/null differ diff --git a/img/设置/软盘.png b/img/设置/软盘.png deleted file mode 100644 index 3034d86..0000000 Binary files a/img/设置/软盘.png and /dev/null differ diff --git a/software/binaries/1.7t1/T12.ino.standard.hex b/software/binaries/1.7t1/T12.ino.standard.hex new file mode 100644 index 0000000..bb92c1f --- /dev/null +++ b/software/binaries/1.7t1/T12.ino.standard.hex @@ -0,0 +1,1592 @@ +:100000000C94330B0C945B0B0C945B0B0C942F2017 +:100010000C945B0B0C945B0B0C945B0B0C945B0BC8 +:100020000C945B0B0C945B0B0C945B0B0C945B0BB8 +:100030000C945B0B0C945B0B0C945B0B0C945B0BA8 +:100040000C94E51F0C945B0B0C94B31F0C948D1F48 +:100050000C945B0B0C9406210C945B0B0C945B0BC7 +:100060000C945B0B0C945B0B5361766500466C69DA +:1000700070004D61696E2053637265656E004F4B71 +:10008000004E4F00454E00434E00594553004E4F21 +:10009000004F4E004F464600496E666F730042693E +:1000A0006700504944004469726563740053617687 +:1000B0006500426F6F7374004F666600536C656530 +:1000C00070005361766500426F6F737400536C6506 +:1000D00065700044656661756C74005361766500F7 +:1000E0004164640044656C6574650052656E616DC1 +:1000F000650043616C696272617465004368616E9A +:1001000067650052657475726E004C616E67004CD5 +:100110004F5720566F6C0042757A7A6572005363B0 +:100120007265656E00436F6E74726F6C0054696D1A +:1001300065720054656D7000546970000000000025 +:10014000000F1DC20800054442080003845FBF0081 +:100150000FE44410000115451000054CC97F8009CB +:10016000244F900007C4C11000054D413F000554C5 +:1001700043810007C44D0200054441140005554168 +:10018000080007C881040000000000000000000013 +:100190000001083FFE001FFF810000004002000038 +:1001A00007FE0FF800040208080004020888000790 +:1001B000FE0888000402088800040208880007FE80 +:1001C0000888000402094800040202300007FE0407 +:1001D0000C000402180400000000000000000000F1 +:1001E0000001100080001FFF80800001103FFF0011 +:1001F000004004080007FC04080004440410000444 +:100200004402100004440220001FFF81200000402F +:1002100000C00000A00130000110020800060C0C14 +:1002200007001803B00200000000000000000000FA +:1002300000004000800000400080000FFF3FFF00F2 +:10024000084104080008410408000841041000089F +:10025000410210000FFF0220000841012000004071 +:1002600000C0000040013000004002080000400CC7 +:100270000700004030020000000000000000000005 +:10028000001FDF10200002120C20000224042000B6 +:10029000047F8020000424B820000FA4885000149C +:1002A000BF88500004A488500004A488480004BFFC +:1002B00088880004A48A880007A48C8400044489E8 +:1002C000070000818602000000000000000000001E +:1002D000000FF00491000440025200047F9054008B +:1002E000045088FF0007D08481000451008100047D +:1002F0004901FF0007CA0281000444048100044A46 +:100300001CFF0007EA0481000C510481000061C455 +:100310008500004080820000000000000000000016 +:100320000007FF802000008407FF00008404010014 +:10033000008404010000840401000FFFC7FF0000D7 +:10034000840400000084040000008405FF00008491 +:100350000501000104090100010409010002041162 +:10036000FF00040401010000000000000000000084 +:1003700000008204FF00004402010007FF902100FA +:100380000010102100001017FD0000101021000FB8 +:10039000FFD06100001010A10000281121000028EA +:1003A0001221000044142100008210A1000301D09A +:1003B00045000C009002000000000000000000005A +:1003C00000084410FE00042810920005FF2292004D +:1003D00000103C920000100892001CFE10920004D5 +:1003E0001020FE0004103E920005FF8092000410D1 +:1003F00000920005100E92000610309200041000CA +:10040000FE0000100082000000000000000000005C +:100410000007DF8840000A24104000114210FE004F +:10042000040022820002FF3D020008010A42000986 +:10043000F9103200090920120009F93E02000909E9 +:1004400000020009090E020009F930220008050027 +:100450001400080200080000000000000000000076 +:10046000000FC3F1E0000FE3F1F8000C70C19E0033 +:100470000C30C186000C30C183000C30C183000CED +:1004800060C183000C60C183000FC0C183000FC036 +:10049000C186000C00C186000C00C198000C03F15D +:1004A000F8000C03F1E00000000000000000000074 +:1004B0000000200820000FFF09FC000020080000B9 +:1004C00000203E880003FE08500002020BFE0003DD +:1004D000FE0C4000020218400003FE2BFE00020248 +:1004E00008480003FE0888000202085000020228A3 +:1004F00030001FFF91CC0000000000000104047CCC +:100500000000880444000FFF3F4400002004440022 +:1005100000200C440000200E44001FFF9544000002 +:10052000201444000050244400005004440000887B +:100530000445000104048500060385030018010436 +:1005400000000000000000000000000000000000AB +:1005500000047E21FC0004421104001F7E090400F7 +:10056000044221FC000542110400067E1104000C27 +:100570000005FC0015FF880000040813FE00044875 +:10058000325200044F125200044812520014A812B2 +:100590005200091F97FF000000000000000000004B +:1005A0000002103DFC000210250400041025040088 +:1005B00005FFBDFC000C102520000C382520001480 +:1005C0003825FE0004543D200004542510000492F8 +:1005D0002510000511A5090006113D450004102550 +:1005E0008300041001010000000000000000000072 +:1005F000001FC8102000124A0C20001AC904200055 +:1006000017480020001FFFB8200002080850001FF4 +:10061000C8085000020808500003C80848001E140B +:1006200008880001540A880015220C8400144389AC +:1006300007000081060200000000000002FE010029 +:100640000002823FFF00048202000004FE0200005C +:100650000C1004FC00141004080005FF8C100004AA +:1006600010141000043825FF000434041000045254 +:1006700004100004918410000510045000041004BC +:10068000200000000000000000000000000000004A +:100690000002030010001FDC3EFE00089002120062 +:1006A000051004FF001FDF84120002120CFE001F61 +:1006B000D2021000021222FE000A921410000A5206 +:1006C00014100012220DFF0002220810000A42142A +:1006D0001000040223FF00000000000000000000E2 +:1006E000000F78BC20000948A45000094AA8500017 +:1006F000094AA88800094AB104001FFEAAFB0009A4 +:100700004AA42000094AA42000094AA7FE00094A79 +:10071000B420000948A924000B48A22200088AA49A +:10072000A20011192040000000000000000000009D +:10073000000020008000005001FC0000880104003F +:10074000010403080006FB0490000800C0600007D5 +:10075000DF018000045106000004511BFE0004511B +:1007600002020007D9020200045602020000100330 +:10077000FE00001002020000000000000000000067 +:10078000000208209000027F9890001F8009FF005F +:10079000022201100006218B100007628DFE000A64 +:1007A000A20910000A14111000121431FE000208F0 +:1007B00011100002141110000222111000024391C6 +:1007C000FF00028111000000000000000000000096 +:1007D00000100700000008F83FFE0004802002001F +:1007E000008020020000BE23E2001C8222220004BE +:1007F000A4222200049422220004882222000494CD +:1008000023E200052220020005422002000A003FE8 +:10081000FE0011FFA00200000000000009FF0040E0 +:100820000004203FFF00042000000000FE00000044 +:100830001C420FFC00044200000007FF800000047F +:10084000000FFC0004FF000000048100000005818F +:100850000FFC00068108040004FF08040000810F5B +:10086000FC0000000000000000000000000000008C +:100870000001000FFE00010008200003FF08200017 +:100880000201082000042208200008200BFE0010AE +:10089000200820000050082800005008240000888C +:1008A000082200008810200001041020000203A785 +:1008B000FF000C010000000000000000000000002C +:1008C0000000400080001FFF9FFC0000400410005B +:1008D0000FFF02200000003FFF000FFE0000000895 +:1008E000420FF80008420808000FFE08080008023E +:1008F0000FF8000800080800080008080008000FAA +:10090000F8001000080800000000000000000000CF +:100910000007FE0FF80004020000000402000000BF +:1009200007FE00000004023FFE00040200800007F2 +:10093000FE008000009004900008910C880006934F +:100940001086000294208200009000800000900237 +:1009500080001FFF81000000000000000000000078 +:1009600000041012020005FF9FD200050092120041 +:100970001E28A2120004443FF20004820212000664 +:10098000000212000CFE1FD20014101252000410BC +:100990001242000410134200041012820015FF825C +:1009A0000A0008000204000000000000000000002F +:1009B00000002000000000203E04001FFFA20400F1 +:1009C0001000A2FF0000012204000FFE220400001C +:1009D000403E440000402224000440222400047CC5 +:1009E00022040004402204000A403E040009402280 +:1009F000240010FF80140000000008000000000028 +:100A00000010FE08200008820BFF0004820A01008B +:100A100010FE3C5100088208880008820904000288 +:100A2000FE0C0000040019FC0009FF282000192911 +:100A30000820000929082000092908200009292B7D +:100A4000FF000BFF9000000000000000000000000D +:100A5000001F7F90F80001080888000A100888002D +:100A6000047F0107001FC13A0000054909FC00048A +:100A700049088400044908880004490848000449DA +:100A800008500004490A200004160C58001421895B +:100A9000870008C0860200000000000080040000FB +:100AA0003FF02430219027902730207027F023300A +:100AB00030703FF000008004800400003FF03830C8 +:100AC00033103F90381033902790261030903FF02D +:100AD00000008004800400003FF0387030302310A4 +:100AE000279020102010279027903FF000008004CE +:100AF000800400003FF03CF03CF020102490249053 +:100B000020103CF03CF03FF0000080048004000026 +:100B10003FF037B023103030387038703030231049 +:100B200037B03FF000008004FCF4F860E044C08C73 +:100B3000C11CC22CC44CC88CD10CA204C4048FFCB0 +:100B4000187CBCFC8000BFF81FF8B0281FF8B40860 +:100B50001FF8B1081FF8B048BFF8B288BFF880008E +:100B60008000BFF81FF8B0081808B9E819B8B838FD +:100B70001838B9B8B9F8B0F8BFF8800015543FF884 +:100B800015503FF01550387010203104138C22A8F6 +:100B900017FC2AA80000000015543FFC15543FFC28 +:100BA00015543C0414043CFC14543CFC005400A8B0 +:100BB00000000000800400003FF03CF034B02490BE +:100BC000249027902310303038703FF000008004CC +:100BD000FF7CFE7CFCECE8DCC84C984C88240820A8 +:100BE00000000000000000008004E01CF3FCE7FCB3 +:100BF000CE0C8E1C9F9C1F3C1F0C0E0C0FFC87F80C +:100C000081E4C00CE01CF87C00045808580858081F +:100C100040087FF860185FE85B685FE85B681CE885 +:100C20005FE80000800400003FF03CF03CF03CF046 +:100C3000201020103CF03CF03CF03FF0000080041D +:100C4000F87CF7BC00007FF80000BFF4AB54AB5455 +:100C5000AB54AB54AB54AB54BFF4C00CF03CCE0C13 +:100C6000BF04B30473007F007E007C007C007C60C6 +:100C7000BC64BE04CF0CF03C81DC559C29045500BB +:100C8000299055D003FCFF002E0026700250827080 +:100C9000E600EE04800C001C3FF43FE03FC4378CBC +:100CA0002318303038703CF03FF03FF000008004F3 +:100CB000F03CCE4CBC34B8141880108042306078C0 +:100CC00060F844C08004B884CFCCF03CF87CE01CD1 +:100CD000C00CCFCCCFCCCFCCCFCCCFCCCFCCCFCC0B +:100CE000C84CCFCCC00CE01CFCFCF87CE01CC00C59 +:100CF000C00CC00CC00CC00CC00C80048004FFFCF5 +:100D0000F87CFCFC800400002000100008001000AB +:100D10002700000000000000000000000000800428 +:100D2000C3FC18001800C3FCFFFCFF0C006000604F +:100D3000FF0CFFFCF0FC06000600F0FC8FC4102046 +:100D400020104CC89FE43DF03DF01DE03EF03F70A8 +:100D50009FE48CC400003030F87CF33CF4BCF6BC5B +:100D6000F4BCF6BCF4BCE49CC84CD02CD02CC84CD1 +:100D7000E79CF03C88240820383038303830383050 +:100D80003830383039303BB03FF03FF0000080045D +:100D90001FE03FF07038601860186018FFFCFCFC22 +:100DA000FCFCFCFCF87CF87CFCFC7FF81E10333863 +:100DB0002D7C25382D3825382D386D80DEC0BF407C +:100DC000BF40DEC061803F007FF0FFE0C008C01C74 +:100DD000C038C870DCE4CFCCC78CC30CC00CC00CCE +:100DE000FFFC7FF8000006000C0018F838F03030E7 +:100DF0007060707878F878003C023F0C1FF80FF0B4 +:100E000003C000007FF8FFFCC00CC30CCB4CDB6CB4 +:100E1000DB6CD86CDCECCFCCC78CC00CFFFC7FF853 +:100E2000030007800FC00CC01CE01CE03CF03CF04D +:100E30007FF87FF8FCFCFCFCFFFC7FF8114082008F +:100E400021208FE023FC82004A23E200FE209FF055 +:100E500013F880802220C0804221BFF0FBFA8880F6 +:100E600002208480022084801A208080E3FE828019 +:100E7000020101000F421FC078411040084090401D +:100E800008421FC008411040FFFD104008405FC0ED +:100E90000840800008413FE00843252010412520FC +:100EA000104125202041252040417FF07FF84880D7 +:100EB000020049000201FFF00201001002027F203F +:100EC0002200410023F07F00220008002200FF8062 +:100ED000220088802200888022008A8022008900E7 +:100EE000FFFC080023F21FC022111040FBF09040CD +:100EF00022121FC02A11104033F1104060005FC061 +:100F0000AFFC800020413FE02243252022792520AC +:100F100022412520A541252048FD7FF01083DFC018 +:100F200010825040208250402FFFDFC0608252006C +:100F300061C25200A1C25FE022A3D20022A25100EE +:100F400024925100288E5090308BD45020825830FB +:100F500020801010104047C017FC44402003F4408C +:100F600023F844406208C440A3F8E4402001544000 +:100F70002FFD44402806444023F84440204044507C +:100F800020404850214050302080400020921FC017 +:100F90003DF990402090904040901FC07BFF0000A2 +:100FA000A0013FE021F90200FD09020021097FF0C4 +:100FB00021F90500210945002909888031F91070BF +:100FC0002108202025004300202070F8380133013B +:100FD0002D0125011E0117010F010A010301FC006B +:100FE000F200EB00E400E000DB00D300CD00C7001E +:100FF000C200BC00B800B200AD00A600A2009E0076 +:101000009800940091008E008A008700840081007F +:101010007E0072006D0068003E0053656C6563746D +:10102000205469700000000000003E5B4F5B3E3EB4 +:101030006B4F6B3E1C3E7C3E1C183C7E3C181C5784 +:101040007D571C1C5E7F5E1C00183C1800FFE7C328 +:10105000E7FF0018241800FFE7DBE7FF30483A06F7 +:101060000E2629792926407F050507407F05253F63 +:101070005A3CE73C5A7F3E1C1C08081C1C3E7F144F +:10108000227F22145F5F005F5F06097F017F006699 +:1010900089956A606060606094A2FFA29408047EF3 +:1010A000040810207E201008082A1C08081C2A08A2 +:1010B000081E101010100C1E0C1E0C30383E38305C +:1010C000060E3E0E06000000000000005F0000005B +:1010D00007000700147F147F14242A7F2A12231389 +:1010E00008646236495620500008070300001C229D +:1010F00041000041221C002A1C7F1C2A08083E08CF +:1011000008008070300008080808080000606000CF +:1011100020100804023E5149453E00427F400072C3 +:10112000494949462141494D331814127F1027453A +:101130004545393C4A494931412111090736494958 +:101140004936464949291E00001400000040340079 +:10115000000008142241141414141400412214082D +:1011600002015909063E415D594E7C1211127C7FE5 +:10117000494949363E414141227F4141413E7F49F3 +:101180004949417F090909013E414151737F0808DE +:10119000087F00417F41002040413F017F08142229 +:1011A000417F404040407F021C027F7F0408107F47 +:1011B0003E4141413E7F090909063E4151215E7F82 +:1011C00009192946264949493203017F01033F4055 +:1011D00040403F1F2040201F3F4038403F631408DD +:1011E000146303047804036159494D43007F41416E +:1011F000410204081020004141417F040201020421 +:101200004040404040000307080020545478407F8D +:10121000284444383844444428384444287F3854C7 +:1012200054541800087E090218A4A49C787F08046E +:10123000047800447D40002040403D007F10284459 +:101240000000417F40007C047804787C0804047826 +:101250003844444438FC1824241818242418FC7CEE +:1012600008040408485454542404043F44243C40D3 +:1012700040207C1C2040201C3C4030403C44281036 +:1012800028444C9090907C4464544C44000836416F +:10129000000000770000004136080002010204024D +:1012A0003C2623263C1EA1A161123A4040207A38F8 +:1012B000545455592155557941215454784121555B +:1012C00054784020545579400C1E527212395555AD +:1012D0005559395454545939555454580000457C83 +:1012E000410002457D420001457C40F0292429F05F +:1012F000F0282528F07C545545002054547C547C1B +:101300000A097F4932494949323248484832324A0B +:101310004848303A4141217A3A42402078009DA025 +:10132000A07D39444444393D4040403D3C24FF24A5 +:1013300024487E4943662B2FFC2F2BFF0929F620DA +:10134000C0887E090320545479410000447D413017 +:1013500048484A32384040227A007A0A0A727D0DA3 +:1013600019317D2629292F28262929292630484D5B +:101370004020380808080808080808382F10C8ACAA +:10138000BA2F102834FA00007B000008142A142217 +:1013900022142A14089500220095AA005500AAAA32 +:1013A00055AA55AA000000FF00101010FF001414E9 +:1013B00014FF001010FF00FF1010F010F0141414B0 +:1013C000FC001414F700FF0000FF00FF1414F404E5 +:1013D000FC141417101F10101F101F1414141F00DA +:1013E000101010F0000000001F101010101F10103F +:1013F0001010F010000000FF10101010101010104E +:1014000010FF10000000FF140000FF00FF00001F8D +:1014100010170000FC04F414141710171414F4042B +:10142000F40000FF00F714141414141414F700F758 +:10143000141414171410101F101F141414F4141083 +:1014400010F010F000001F101F0000001F1400001B +:1014500000FC140000F010F01010FF10FF14141422 +:10146000FF141010101F00000000F010FFFFFFFF1E +:10147000FFF0F0F0F0F0FFFFFF0000000000FFFFC2 +:101480000F0F0F0F0F38444438447C2A2A3E147E35 +:1014900002020606027E027E026355494163384419 +:1014A000443C04407E201E2006027E020299A5E7ED +:1014B000A5991C2A492A1C4C7201724C304A4D4D88 +:1014C000303048784830BC625A463D3E4949490070 +:1014D0007E0101017E2A2A2A2A2A44445F4444408C +:1014E000514A444040444A51400000FF0103E0801B +:1014F000FF000008086B6B083612362436060F0909 +:101500000F06000018180000001010003040FF0106 +:1015100001001F01011E00191D1712003C3C3C3C3C +:10152000000000000000000000240027002A000046 +:10153000000000250028002B0000000000230026EA +:101540000029000404040404040404020202020248 +:101550000203030303030301020408102040800177 +:101560000204081020010204081020AED5F0A83FA4 +:10157000D300408D14A1C8DA1281CFD9F1DB40A489 +:10158000A6AF200021007F220007506C65617365C3 +:101590002077616974004144433A200074656D709E +:1015A0003A2000536574206D65617375726564003F +:1015B000537465703A20003030300076312E377425 +:1015C00031005600560043000FE01FC01FC03F808F +:1015D0003FF87FF07FE007C007800F000E001C007F +:1015E0001800100014A03FF07FF8E01C6E18EC1CEF +:1015F00068186018E01C6058E01C7FF83FF014A0E9 +:101600004552524F5200484F4C4400484541540007 +:10161000574F524B5900424F4F535400534C45457E +:1016200050004F46460000003BEC7BEE63E663E66D +:1016300063E663E663E663E6636662266006600669 +:101640007FFE3FFC000001020408102040800000E3 +:101650000008000201000003040700000000000071 +:10166000000007216C2B11241FBECFEFD8E0DEBF96 +:10167000CDBF12E0A0E0B1E0E4EEF1E602C00590DB +:101680000D92A237B107D9F727E0A2E7B2E001C077 +:101690001D92A53CB207E1F71BE0C2E3DBE004C00A +:1016A0002197FE010E94E82EC133D107C9F70E949D +:1016B000CB210C94E5300C9400004F925F926F9216 +:1016C0007F928F929F92AF92BF92CF92DF92EF92D2 +:1016D000FF920F931F93CF93DF9300D000D0CDB72D +:1016E000DEB74B015C0129013A016701780120E076 +:1016F00030E0A9010E94ED2B87FDA6C020E030E07C +:10170000A901C301B2010E94ED2B87FD9DC020E01D +:1017100030E0A901C801B6010E94ED2B87FD94C0FD +:1017200081E020918507309186072130310509F04D +:1017300080E08093A60780926B0790926C07A0923E +:101740006D07B0926E0740926F07509270076092DB +:10175000710770927207C0927307D0927407E0927B +:101760007507F09276076091990770919A078091BA +:101770009B0790919C070E94F22B20E030E04AE703 +:1017800054E40E94262E69837A838B839C83809203 +:10179000770790927807A0927907B0927A079B0119 +:1017A000AC01C301B2010E94532C2B013C014092B9 +:1017B0007B0750927C0760927D0770927E0729819B +:1017C0003A814B815C81C701B6010E94262E6B01D4 +:1017D0007C01C0927F07D0928007E0928107F0924F +:1017E00082078091830790918407019769F5A5018D +:1017F000940160E070E0CB010E94B92D60937707FF +:10180000709378078093790790937A07A3019201E8 +:1018100060E070E0CB010E94B92D60937B0770936C +:101820007C0780937D0790937E07A701960160E077 +:1018300070E0CB010E94B92D60937F077093800701 +:1018400080938107909382070F900F900F900F90D5 +:10185000DF91CF911F910F91FF90EF90DF90CF908C +:10186000BF90AF909F908F907F906F905F904F90C0 +:10187000089580389105B0F46034710598F4E6E479 +:10188000F6E190E1969FD001A0781124A80F67702F +:10189000E60FF11D9491AE53BD4F442321F08C917E +:1018A000982B9C93089590958C919823FACFDF9272 +:1018B000EF92FF920F931F93CF93DF937C01D22E71 +:1018C0008B01040F111DEB0177FF02C0D0E0C0E0D7 +:1018D000C8010134110514F080E490E0C817D9075D +:1018E0003CF44D2DBE01C7010E94390C2196F0CF6A +:1018F000DF91CF911F910F91FF90EF90DF900895AE +:10190000CF92DF92EF92FF920F931F93CF93DF93CB +:101910006B01122FEC017C01E40EF11CCE15DF05EA +:1019200044F4202F412FB601CE010E94570C21967E +:10193000F5CFDF91CF911F910F91FF90EF90DF9046 +:10194000CF9008952F923F924F925F926F927F9225 +:101950008F929F92AF92BF92CF92DF92EF92FF92BF +:101960000F931F93CF93DF9300D01F92CDB7DEB7B5 +:10197000C22ED12C9601280F391F37FD4FC0803859 +:1019800091050CF04BC0E9824A017B013C01402EDD +:10199000512C160127E0220E311C93E03594279438 +:1019A0009A95E1F78B01B12CA12C1B821A82EA8156 +:1019B000FB8183E0F595E7958A95E1F7EA0DFB1D3C +:1019C000E80DF91DE4918A819B818770992720E8B1 +:1019D00030E002C0359527958A95E2F7C901F0E01D +:1019E000E223F923EF2B41F04981B8018A819B81E1 +:1019F000860D971D0E94390C8A819B8101969B83DD +:101A00008A838C159D059CF2A20CB31C0F5F1F4F9F +:101A1000C8018E199F09841595053CF20F900F900F +:101A20000F90DF91CF911F910F91FF90EF90DF907A +:101A3000CF90BF90AF909F908F907F906F905F906E +:101A40004F903F902F9008950F931F93CF93DF9364 +:101A5000EC018B0140E001960E94390C40E0B80196 +:101A6000CE0101970E94390CB8016F5F7F4F40E0B3 +:101A7000CE010E94390CB8016150710940E0CE01DD +:101A80000E94390C40E0B801CE01DF91CF911F9147 +:101A90000F910C94390C80E0E2ECF2E081118FEFB1 +:101AA000002481938193819381930394D1F70895C6 +:101AB0000895AF92BF92CF92DF92EF92FF920F9371 +:101AC0001F93CF93DF936C017B018B01040F151FD4 +:101AD000EB015E01AE18BF08C017D10759F069913C +:101AE000D601ED91FC910190F081E02DC6010995A0 +:101AF000892B79F7C501DF91CF911F910F91FF904D +:101B0000EF90DF90CF90BF90AF900895FC01538D80 +:101B1000448D252F30E0842F90E0821B930B5417C7 +:101B200010F0CF96089501970895FC01918D828D54 +:101B3000981761F0A28DAE0FBF2FB11D5D968C91ED +:101B4000928D9F5F9F73928F90E008958FEF9FEF2C +:101B50000895FC01918D828D981731F0828DE80FE8 +:101B6000F11D858D90E008958FEF9FEF0895FC01A2 +:101B7000918D228D892F90E0805C9F4F821B91096F +:101B80008F739927089582EC96E00E94B70D21E0AB +:101B9000892B09F420E0822F089580E090E0892BC2 +:101BA00029F00E94C30D81110C9400000895FC01DE +:101BB000A48DA80FB92FB11DA35ABF4F2C91848DAE +:101BC00090E001968F739927848FA689B7892C930B +:101BD000A089B1898C91837080648C93938D848D5E +:101BE000981306C00288F389E02D80818F7D808361 +:101BF0000895EF92FF920F931F93CF93DF93EC0121 +:101C000081E0888F9B8D8C8D98131AC0E889F989A3 +:101C1000808185FF15C09FB7F894EE89FF896083A6 +:101C2000E889F98980818370806480839FBF81E027 +:101C300090E0DF91CF911F910F91FF90EF90089569 +:101C4000F62E0B8D10E00F5F1F4F0F731127E02E44 +:101C50008C8D8E110CC00FB607FCFACFE889F9897C +:101C6000808185FFF5CFCE010E94D70DF1CFEB8D9E +:101C7000EC0FFD2FF11DE35AFF4FF0829FB7F89450 +:101C80000B8FEA89FB8980818062CFCFCF93DF936E +:101C9000EC01888D8823B9F0AA89BB89E889F98984 +:101CA0008C9185FD03C0808186FD0DC00FB607FCB9 +:101CB000F7CF8C9185FFF2CF808185FFEDCFCE01EC +:101CC0000E94D70DE9CFDF91CF910895833081F045 +:101CD00028F4813099F08230A9F008958730A9F076 +:101CE0008830C9F08430B1F4809180008F7D03C0CA +:101CF000809180008F7780938000089584B58F77DE +:101D000084BD089584B58F7DFBCF8091B0008F771F +:101D10008093B00008958091B0008F7DF9CFCF936C +:101D2000DF93282F30E0F901E25BF94E8491F9014D +:101D3000E95AFA4ED491F901ED5BFA4EC491CC23E5 +:101D4000A1F081110E94660EEC2FF0E0EE0FFF1F54 +:101D5000E75CFA4EA591B491EC91ED2381E090E01F +:101D600009F480E0DF91CF91089580E090E0FACF10 +:101D70001F93CF93DF93282F30E0F901E25BF94EF8 +:101D80008491F901E95AFA4ED491F901ED5BFA4ECA +:101D9000C491CC23A9F0162F81110E94660EEC2F5E +:101DA000F0E0EE0FFF1FE15DFA4EA591B4918FB701 +:101DB000F894EC91111108C0D095DE23DC938FBF0D +:101DC000DF91CF911F910895DE2BF8CFCF93DF9352 +:101DD00090E0FC01E95AFA4E24918D5B9A4EFC0189 +:101DE00084918823C9F090E0880F991FFC01EB5D76 +:101DF000FA4EA591B491FC01E15DFA4EC591D491E2 +:101E000061110DC09FB7F8948C91209582238C931B +:101E10008881282328839FBFDF91CF910895623066 +:101E200051F49FB7F8943C91822F809583238C9333 +:101E3000E8812E2BEFCF8FB7F894EC912E2B2C93BB +:101E40008FBFEACFCF93DF93EC0161E089E00E947E +:101E5000E60E209731F460E089E0DF91CF910C9499 +:101E6000B80ECF3FD10511F461E0F6CFE7E5F6E11A +:101E7000E491E33029F140F4E130B1F0E230D9F0FF +:101E8000C038D1058CF7E7CFE73021F1E83051F1C8 +:101E9000E430B1F780918000806280938000D0931D +:101EA0008B00C0938A0004C084B5806884BDC7BD20 +:101EB000DF91CF91089584B5806284BDC8BDF8CF0D +:101EC00080918000806880938000D0938900C093C7 +:101ED0008800EECF8091B00080688093B000C093FE +:101EE000B300E6CF8091B00080628093B000C093D1 +:101EF000B400DECF3FB7F89480918B0290918C02B2 +:101F0000A0918D02B0918E0226B5A89B05C02F3FEF +:101F100019F00196A11DB11D3FBFBA2FA92F982F0F +:101F20008827BC01CD01620F711D811D911D42E00A +:101F3000660F771F881F991F4A95D1F708958F92D2 +:101F40009F92AF92BF92CF92DF92EF92FF924B019E +:101F50005C010E947A0F6B017C010E947A0F6C1960 +:101F60007D098E099F09683E734081059105A8F39C +:101F700021E0821A9108A108B10888EEC80E83E01A +:101F8000D81EE11CF11C81149104A104B10429F7AD +:101F9000FF90EF90DF90CF90BF90AF909F908F9089 +:101FA00008952FB7F894609187027091880280910C +:101FB000890290918A022FBF089584E98093BC0022 +:101FC0008091BC0084FDFCCF08958093BB0084E821 +:101FD0008093BC008091BC0087FFFCCF089584EA09 +:101FE0008093BC008091BC0087FFFCCF88E70C94F5 +:101FF000E50F0E94EF0F80E48093BB0084E880939C +:10200000BC00E2ECF2E09091BC0097FFFCCF919114 +:102010009093BB008093BC0096E0E23CF90799F7EF +:102020008091BC0087FFFCCF0C94DD0FCF93C82FAD +:102030000E94EF0F80E00E94E50F8C2F0E94E50FB9 +:10204000CF910C94DD0F480F592F511D4138510588 +:1020500014F040E850E0481BFB0177FD379633E071 +:10206000F595E7953A95E1F7F695FE2FEE27F7956A +:10207000E795E80FF91FEE53FD4F6770772781E072 +:1020800090E001C0880F6A95EAF7382F213041F4BB +:10209000415078F08191DF011197832B8C93F8CF19 +:1020A0008095415030F09191DF01119798239C93D6 +:1020B000F8CF0895CF92DF92EF92FF920F93CF93D4 +:1020C000DF936C017B01C42FD22F202F0E9423109D +:1020D000B7016D0F711D61507109603471052CF4E9 +:1020E000202F4C2FC6010E942310202F4D2FB70107 +:1020F000C6010E94570CC6018C0F911D202F4D2F39 +:10210000B7010197DF91CF910F91FF90EF90DF9092 +:10211000CF900C94570C2F923F924F925F926F92F8 +:102120007F928F929F92AF92BF92CF92DF92EF9267 +:10213000FF920F931F93CF93DF93CDB7DEB72A970C +:102140000FB6F894DEBF0FBECDBF9A8389836A3085 +:1021500061F5DC0152968C91B8E08B9F90011124BF +:10216000E981FA8186859785820F931F97878687F5 +:102170001586148681E090E02A960FB6F894DEBFAB +:102180000FBECDBFDF91CF911F910F91FF90EF90C8 +:10219000DF90CF90BF90AF909F908F907F906F9087 +:1021A0005F904F903F902F9008956D3019F32981E3 +:1021B0003A813A872987D9011C96AD90BC90B0E846 +:1021C000AB16B1040CF07BC0F901C684D784F0E4EF +:1021D000CF16D1040CF073C0D90152966C9052976F +:1021E00045E09501649E200D311D11241216130641 +:1021F0000CF065C0262C312C910153E0220F331FC7 +:102200005A95E1F72C0D3D1D121613060CF057C020 +:102210005196BC91BB83E985FA85F089FC83649F64 +:10222000B00111249B012B5D3F4E3A832983712C11 +:10223000E981FA818491F5E07F1201C080E04601D6 +:1022400038E0532E282F30E03E832D834C8080FFD2 +:102250004B80411004C03B818C813817E1F010E0C5 +:1022600000E00615C0F4D501A00FB11FB887AF83F9 +:10227000F12CE12CE61460F4B701680D791D442DB2 +:102280008F8198850E94390CBFEFEB1AFB0AF2CFC1 +:102290000F5F1F4FE6CF8D819E81959587955A944C +:1022A000820C931C5110CECF7394E981FA81319640 +:1022B000FA83E983A20CB31CF6E07F12B9CFA9859B +:1022C000BA8552962C915297422F50E01C968D91D0 +:1022D0009C91B6E02B9F800D911D1124E985FA8514 +:1022E000958784872389222309F444CF6AEF640306 +:1022F0009001659F300D112420583F4F2817390752 +:102300000CF038CFDF010190F081E02D0190F081D9 +:10231000E02D6AE0CD0109952DCF0F931F93CF9348 +:10232000DF938C01D0E0C0E0F801EC0FFD1F649159 +:10233000662341F08DEA97E00E948B10892B11F003 +:102340002196F2CFCE01DF91CF911F910F91089589 +:10235000682F8DEA97E00C948B1090E080E0089550 +:1023600080917A00806980937A008EE480937C006B +:1023700061E070E080E090E00E949F0F83B7817F72 +:10238000826083BF80E130E020E093B7916093BF2B +:10239000889593B79E7F93BF90917A0096FDFCCF6E +:1023A0004091780050917900240F351F815069F7D2 +:1023B00080917A008F7780937A0084E03695279514 +:1023C0008A95E1F750E040E064EB7BE281E190E048 +:1023D0000E94272DC901089588EC80937C0080918C +:1023E0007A00806880937A0065E070E080E090E099 +:1023F0000E949F0F80917A00806480937A00809180 +:102400007A0086FDFCCF60917800709179006A5463 +:10241000714090E080E00E94F22B26EF38E24CE918 +:102420005FE30E94262E089590917A009069909320 +:102430007A008E50806480937C0083B7817F8260B5 +:1024400083BF20E290E080E033B7316033BF8895EE +:1024500033B73E7F33BF30917A0036FDFCCF4091D9 +:10246000780050917900840F951F215069F72091D1 +:102470007A002F7720937A0025E0969587952A9504 +:10248000E1F708958FE00E941412A0919202B0919A +:1024900093029C010E94AA2D0E94F42B28E539E7A3 +:1024A00043E353E40E94262E0E949F2ECB01089501 +:1024B0002091A00230E0EEE1F2E090E080E0AF0198 +:1024C0004E5152404217530724F44191840F911DFD +:1024D000F6CF089580919802882369F086E00E94E3 +:1024E0008F0E892B41F06AE070E080E090E00E945E +:1024F0009F0F1092980208950F931F93CF9380918E +:102500004801882399F0CFEF0FEE11E061E085E0FC +:102510000E94B80EC8010197F1F760E085E00E94C3 +:10252000B80EC8010197F1F7C15081F7CF911F9103 +:102530000F9108952F923F924F925F926F927F92E8 +:102540008F929F92AF92BF92CF92DF92EF92FF92C3 +:102550000F931F93CF93DF9310E000E0D0E0C0E033 +:102560003EE3E32EF12C40ECC42ED12CAA24A394FC +:10257000B12C60E2662E712C70E4272E312C4C2E8B +:1025800086E00E948F0E21E0892B09F020E0209345 +:102590009802F0929F02E0929E02D0929D02C09219 +:1025A0009C02B0929B02A0929A0282E890E09093E3 +:1025B000AB028093AA028091AA029091AB029595FA +:1025C0008795582E9FE1591243C0F0929F02E092E6 +:1025D0009E02D0929D02C0929C02B0929B02A09259 +:1025E0009A02EEEBF0E0F093AB02E093AA029FE5D3 +:1025F000592E0E944B0D82E08093BF071093BA07BB +:102600000093B907E0E3F0E0F093BC07E093BB0769 +:102610008EE50E94A8111092BA071092B907709225 +:10262000BC076092BB07912C812C841438F58091F3 +:10263000C102F40196E0989FE00DF11D1124E15BC9 +:10264000FE4F80810E94A811EFEF8E1A9E0AEDCFF7 +:10265000F0E65F12CECFF0929F02E0929E02D092FF +:102660009D02C0929C02B0929B02A0929A0230926C +:10267000AB022092AA0280E2582EBBCF1093BA0779 +:102680000093B9077092BC076092BB07852D0E942A +:10269000A8110E946A120E94F90F86E00E948F0E14 +:1026A000892B09F088CF80919802811184CF809086 +:1026B000C102F6E08F9E40011124C401815B9E4F50 +:1026C0004C01FC01EC0FFD1F50820E947C126AE05D +:1026D00070E080E090E00E949F0F2196005F1F4F06 +:1026E000C530D10509F04BCFF4011582DF91CF91B0 +:1026F0001F910F91FF90EF90DF90CF90BF90AF9020 +:102700009F908F907F906F905F904F903F902F9011 +:1027100008953F924F925F926F927F928F929F9215 +:10272000AF92BF92CF92DF92EF92FF920F931F93DF +:10273000CF93DF93CDB7DEB72E970FB6F894DEBFF9 +:102740000FBECDBF8091BE02882309F4A5C11092AF +:102750005F071092600710926107109262078090E5 +:102760005F0790906007A0906107B0906207C090EB +:10277000B302D090B402E090B502F090B602A70187 +:102780009601C501B4010E94B92D2B013C0120E046 +:1027900030E0A9010E94CE2E18160CF0A0C1C30192 +:1027A000B2010E949F2E80914901882309F4B8C18B +:1027B000C0926707D0926807E0926907F0926A07B3 +:1027C000E12CF12C00EA10E420E030E040E450E499 +:1027D0006E31710540F0E12CF12C00E81FE320E0A0 +:1027E00030E040E05FE360E070E080E391E40E946D +:1027F0005D0B8091A507882309F42AC10E94D10F9F +:102800006D837E838F83988780918D0790918E074B +:10281000A0918F07B09190074D815E816F8178857F +:10282000481B590B6A0B7B0B8091990790919A0773 +:10283000A0919B07B0919C07481759076A077B072F +:1028400008F406C1E0918707F091880780819181A3 +:10285000A281B38189839A83AB83BC83E0918B0788 +:10286000F0918C079C01AD0160817181828193811F +:102870000E94B92D4B015C0120919507309196077C +:10288000409197075091980769817A818B819C814B +:102890000E94B92D6B017C0120917B0730917C0750 +:1028A00040917D0750917E07C501B4010E94532CD1 +:1028B000209191073091920740919307509194078E +:1028C0000E94BA2D2B013C01409291075092920731 +:1028D00060929307709294073090A60731101AC047 +:1028E00020917707309178074091790750917A07C6 +:1028F000C701B6010E94532C9B01AC01C301B20178 +:102900000E94B92D6093910770939207809393076B +:10291000909394074090910750909207609093078E +:10292000709094071091A1079091A2079E87A091A3 +:10293000A307AD870091A407212F392F4A2F502FCD +:10294000C301B2010E94CE2E18160CF0CCC0812F0C +:102950009E85AD85B02F8093910790939207A093A9 +:102960009307B0939407332009F4D6C020917707DA +:10297000309178074091790750917A07C501B401E9 +:102980000E94532C4B015C0120917F0730918007FE +:102990004091810750918207C701B6010E94532CD4 +:1029A0009B01AC0160919107709192078091930710 +:1029B000909194070E94B92DA50194010E94BA2D0F +:1029C0006B017C019B01AC01612F7E858D85902F71 +:1029D0000E94ED2B87FD18C010919D0790919E07D6 +:1029E0009E87A0919F07AD870091A007212F392FC7 +:1029F0004A2F502FB601C7010E94ED2B87FD04C05E +:102A00001C2DDE86ED860F2DE0918907F0918A0757 +:102A1000812F9E85AD85B02F80839183A283B38360 +:102A200089819A81AB81BC818093950790939607A9 +:102A3000A0939707B09398078D819E81AF81B88549 +:102A400080938D0790938E07A0938F07B093900784 +:102A500060916307709164078091650790916607A4 +:102A60000E94982ECB012E960FB6F894DEBF0FBEB3 +:102A7000CDBFDF91CF911F910F91FF90EF90DF902D +:102A8000CF90BF90AF909F908F907F906F905F900E +:102A90004F903F900C94220F8091BD0260914401B1 +:102AA0007091450181110EC08091B1029091B202E6 +:102AB0002091BC02BC01222329F060914301680FE0 +:102AC000792F711D90E080E00E94F22B60935F07E8 +:102AD00070936007809361079093620740CEC301B3 +:102AE000B20190585ECE80919D0790919E07A09173 +:102AF0009F07B091A00789879A87AB87BC879C0105 +:102B0000AD01C301B2010E94ED2B87FF2CCF898557 +:102B10009A85AB85BC851FCF812C912C540134CF75 +:102B200020E030E040E05FE3C701B6010E94BA2D2B +:102B30009B01AC01C501B4010E94CE2E18164CF4C5 +:102B4000109263071092640710926507109266074F +:102B50007FCF80E090E0AFE7B3E48093630790938A +:102B60006407A0936507B093660772CF4F925F9298 +:102B70006F927F928F929F92AF92BF92CF92DF928D +:102B8000EF92FF92CF93DF93809094029090950202 +:102B9000A0909602B0909702C091C102D0E0C5010A +:102BA000B4010E94982E6B017C0120E030E048E4E3 +:102BB00053E4C501B4010E94ED2B93E0CC0FDD1F5F +:102BC0009A95E1F7CE5FDE4F87FF31C028813981CA +:102BD00050E040E02551310941095109C701B601D2 +:102BE0000E94D82E28EC30E040E050E00E94272DD3 +:102BF000CA01B9016B5E7F4F8F4F9F4F0E94F42B2C +:102C00006093B3027093B4028093B5029093B602BE +:102C1000DF91CF91FF90EF90DF90CF90BF90AF907A +:102C20009F908F907F906F905F904F9008954A8013 +:102C30005B80712C612C20E030E04CE853E4C5014E +:102C4000B4010E94ED2B87FF1FC088809980B12CB2 +:102C5000A12CA7019601285C310941095109C30142 +:102C6000B201681979098A099B090E94D82E20E5CA +:102C700030E040E050E00E94272DCA01B901680D04 +:102C8000791D8A1D9B1DBACF2C813D8150E040E00B +:102C90002419350946095709C701B6016851714021 +:102CA000810991090E94D82E20E530E040E050E0F3 +:102CB0000E94272DCA01B901640D751D861D971D3F +:102CC0009DCFFC0101900020E9F73197AF01481B2F +:102CD000590BBC018DEA97E00C94590D8F929F928D +:102CE000AF92BF920F931F93CF93DF93CDB7DEB711 +:102CF000A1970FB6F894DEBF0FBECDBF19A2423028 +:102D000008F44AE08E010F5D1F4F842E912CB12CE8 +:102D1000A12CA50194010E94882DE62FB901CA01BA +:102D2000EA30F4F4E05DD801EE938D01232B242BDF +:102D3000252B79F790E080E0109719F0CD010E94E3 +:102D40006116A1960FB6F894DEBF0FBECDBFDF911E +:102D5000CF911F910F91BF90AF909F908F9008954A +:102D6000E95CE1CFCF92DF92EF92FF92CF93DF93B6 +:102D700097FF19C06B017C018DE20E94A811EC0144 +:102D800066277727CB016C197D098E099F094AE0D8 +:102D90000E946E168C0F9D1FDF91CF91FF90EF90D8 +:102DA000DF90CF9008954AE0DF91CF91FF90EF90B0 +:102DB000DF90CF900C946E164F925F926F927F923D +:102DC0008F929F92AF92BF92CF92DF92EF92FF923B +:102DD0000F931F93CF936B017C01742EAC019B0169 +:102DE0000E94D32E882399F083E692E0CF911F9121 +:102DF0000F91FF90EF90DF90CF90BF90AF909F909A +:102E00008F907F906F905F904F900C946116460169 +:102E10005701E894B7F82FEF3FEF4FE75FE7C501A1 +:102E2000B4010E94D32E81110DC02FEF3FEF4FE769 +:102E30005FE7C501B4010E94ED2B18161CF487E66C +:102E400092E0D4CF2FEF3FEF4FE75FE4C701B60129 +:102E50000E94CE2E18161CF48BE692E0C7CF2FEFFF +:102E60003FEF4FE75FECC701B6010E94ED2B87FDF6 +:102E7000F3CF20E030E0A901C701B6010E94ED2B9D +:102E800010E000E087FF08C08DE20E94A8118C01CD +:102E9000F7FAF094F7F8F094C0E060E070E080E0BA +:102EA0009FE37C1641F020E030E040E251E40E94D4 +:102EB000262ECF5FF6CFA70196010E94BA2D2B01D7 +:102EC0003C010E949F2E4B015C014AE00E946E165D +:102ED0007C01E00EF11ECC23B1F1C501B4010E94CA +:102EE000F22B9B01AC01C301B2010E94B92D4B0131 +:102EF0005C018EE20E94A811E80EF91EC15018F183 +:102F000020E030E040E251E4C501B4010E94532CBE +:102F10002B013C010E949F2E4B01B12CA12C4AE0B9 +:102F2000C501B4010E946E16E80EF91EC501B40178 +:102F30000E94F22B9B01AC01C301B2010E94B92D8A +:102F40004B015C01DBCFC701CF911F910F91FF9027 +:102F5000EF90DF90CF90BF90AF909F908F907F9039 +:102F60006F905F904F900895CF92DF92EF92FF9213 +:102F70000F931F93CF93DF93C82F81E0DC2FD827C7 +:102F8000D093BE07C093BD078093BF070C2F2EE0E0 +:102F900046E661E370E081E090E00E945A102091E3 +:102FA000BF023091C002253F81E03807B8F4A4E6A3 +:102FB000B0E00E94AA2D24EF31E040E050E00E94F2 +:102FC000272DBA01A9014E5F5F4F6F4F7F4F2EE053 +:102FD00061E370E081E090E00E94800C60915F0707 +:102FE0007091600780916107909162070E94982E0E +:102FF0009B01AC01A4E6B0E00E94462D34EFC32E45 +:10300000DD24D394E12CF12CA70196010E94272DF9 +:10301000DA01C9010296A11DB11D02970C2F2DE006 +:1030200043E062E370E00E94800C60915F07709162 +:10303000600780916107909162070E94982E9B0122 +:10304000AC01A4E6B0E00E94462DA70196010E94C3 +:10305000272DDA01C9010296A11DB11D039724E0B5 +:1030600045E06CE370E00E94800C60915F07709116 +:10307000600780916107909162070E94982E9B01E2 +:10308000AC01A4E6B0E00E94462DA70196010E9483 +:10309000272D89019A010E5F1F4F2F4F3F4F01507F +:1030A000110941E3E42EF12C4D2FB701C8010E9414 +:1030B000390C8FEFE81AF80A8DE3E816F104A1F74E +:1030C00060915F077091600780916107909162073E +:1030D0000E94982E9B01AC01A4E6B0E00E94462D10 +:1030E00024EF31E040E050E00E94272DDA01C901D1 +:1030F0000296A11DB11D0397ED2E04E025E048ECDA +:103100005FE06BE370E00E94A20C0C2F2EE047E121 +:1031100061E370E088E690E00E945A1060916307D6 +:103120007091640780916507909166070E94982EC0 +:103130009B01AC012F5F310941095109A7E1B0E0C2 +:103140000E94462DCC24C394DD24DA94ED2CFD2C72 +:10315000A70196010E94272D422F2EE061E370E027 +:1031600088E690E00E94800CC093BE07D093BD0714 +:1031700082E090E09093BA078093B90707E310E0EC +:103180001093BC070093BB0760915F0770916007C5 +:10319000809161079091620740E00E94DC1688EF01 +:1031A0000E94A81186EC9FE00E948D1189E690E0B4 +:1031B0009093BA078093B9071093BC070093BB079D +:1031C000609163077091640780916507909166072D +:1031D0000E94982E9B01AC012F5F310941095109D2 +:1031E000A4E6B0E00E94462DA70196010E94272D7B +:1031F000CA01B9010E94B21684EC9FE00E948D11B1 +:10320000D093BE07C093BD07DF91CF911F910F915F +:10321000FF90EF90DF90CF9008956F927F928F9202 +:103220009F92AF92BF92CF92DF92EF92FF920F9355 +:103230001F93CF93DF93B090C10277247394B110A2 +:1032400001C0712C809142018150990B10929F0214 +:1032500010929E02880F991F90939D0280939C026A +:1032600081E090E090939B0280939A028B2D90E0F6 +:10327000880F991F9093AB028093AA0286E00E9468 +:103280008F0E21E0892B09F020E020939802FF2483 +:10329000F39472E0972EE6E08E2EFCE0CF2ED12C38 +:1032A0000E944B0D1092BC071092BB071092BA07F8 +:1032B0001092B907C091AA02D091AB02D595C795DB +:1032C000EC2E8E011127C801870D911D77FC9A9570 +:1032D0008B199109712C97FD06C08330910514F06C +:1032E00082E090E0782EF092BE071092BD07909297 +:1032F000BF078AE190E10E948D111092BE07F09203 +:10330000BD071092BA071092B907A72C072C000C22 +:10331000BB08C501019654E0880F991F5A95E1F743 +:103320009093BC078093BB0788E190E10E948D11C8 +:103330006C2E671890E080E098012A193B0959012A +:10334000209142018C010F5F1F4F6216D0F4D09282 +:10335000BA07C092B907980144E0220F331F4A957B +:10336000E1F73093BC072093BB078A0D9B1D889E15 +:103370009001899E300D1124C901815B9E4F0E94EE +:103380006116C801639403301105D1F60E946A12D8 +:103390000E94F90F86E00E948F0E892BB9F480916C +:1033A0009802811113C00E947C12E092C102DF9149 +:1033B000CF911F910F91FF90EF90DF90CF90BF9032 +:1033C000AF909F908F907F906F900895BC2E68CFA4 +:1033D0000E94D030EF92FF920F931F93CF93DF9311 +:1033E000EC017B018A0188819981009729F02A816B +:1033F0003B812417350788F4B8016F5F7F4F0E9427 +:103400001330009791F0998388831B830A832C8162 +:103410003D81232B11F4FC0110821D830C83B70125 +:10342000888199810E94DE300CC088819981009743 +:1034300011F00E948A2F198218821D821C821B8221 +:103440001A82CE01DF91CF911F910F91FF90EF90E3 +:1034500008951F93CF93DF93EC01162F0E94112D37 +:10346000181739F0612FCE01DF91CF911F910C9485 +:10347000192DDF91CF911F910895AF92BF92CF92F6 +:10348000DF92EF92FF920F931F93CF93DF936091A0 +:10349000470182E090E00E94291A6091460183E092 +:1034A00090E00E94291A6091450184E090E00E941A +:1034B000291A6091440185E090E00E94291A6091E8 +:1034C000430186E090E00E94291A60914C0187E058 +:1034D00090E00E94291A60914B0188E090E00E94E0 +:1034E000291A60914A0189E090E00E94291A6091AE +:1034F0007F018AE090E00E94291A609149018BE0E7 +:1035000090E00E94291A609148018CE090E00E94AE +:10351000291A6091C1028DE090E00E94291A609101 +:1035200042018EE090E00E94291A6091BB028FE078 +:1035300090E00E94291A6091990280E190E00E9437 +:10354000291A6091B80281E190E00E94291A82E173 +:10355000E82EF12C10E006E0809142011817B8F532 +:10356000109F60011124D0E0C0E0FE01EC0DFD1DB4 +:10357000E15BFE4F6081C7018C0F9D1F0E94291ADD +:103580002196C630D10589F7670186E0C80ED11CA7 +:1035900088E0189FE0011124CE5FDE4F8EE0E80E38 +:1035A000F11C69812296C6010E94291A560182E007 +:1035B000A80EB11CFE0132976081C60101960E94DF +:1035C000291A6501AE14BF0461F71F5FC5CFDF91F3 +:1035D000CF911F910F91FF90EF90DF90CF90BF9010 +:1035E000AF9008958F929F92AF92BF92CF92DF9249 +:1035F000EF92FF92CF938FEF90E00E94220F8BEA21 +:1036000094E00197F1F78EE00E9414127C018AE0A9 +:103610000E948F0E90917202981729F091E090937A +:10362000B70280937202809101019FEF980F9093EF +:103630000101811106C00E9442129093BA02809348 +:10364000B90260916307709164078091650790915A +:1036500066070E94982ECB010E94220F8090940250 +:1036600090909502A0909602B0909702B70190E0DA +:1036700080E00E94F22BA50194010E94B92D2DEC4F +:103680003CEC4CE45DE30E94532CA50194010E94A4 +:10369000BA2D609394027093950280939602909352 +:1036A00097020E94B6156091BF027091C00290E02F +:1036B00080E00E94F22B6B017C0120915F0730912A +:1036C000600740916107509162070E94ED2B8111C4 +:1036D000B5C02091B3023091B4024091B50250912F +:1036E000B602C701B6010E94B92D6B017C0120E032 +:1036F00030E0A9010E94CE2E18160CF095C020E0F3 +:1037000030E040EA50E4C701B6010E94CE2E181600 +:103710000CF494C06091B1027091B20290E080E02C +:103720000E94F22B2091B3023091B4024091B50275 +:103730005091B6020E94B92D6B017C0120E030E06F +:10374000A9010E94CE2E18160CF087C0C701B60141 +:103750000E949F2E6530710508F083C080914E0154 +:10376000811105C080914D0181110E947C1281E080 +:1037700080934E0110924D018091BF029091C00242 +:10378000853F21E0920710F0109200012091000186 +:10379000211140C0843F9140E8F58FEF90E00E94F6 +:1037A000220F0E947C12C1E0C09300010E940D19FB +:1037B0000E943D1AC093B7028EE00E941412BC0111 +:1037C00090E080E00E94F22B609394027093950247 +:1037D00080939602909397021092A9028091B10271 +:1037E0009091B20224E630E030939F0220939E0233 +:1037F00020E233E030939D0220939C022AE030E0E7 +:1038000030939B0220939A02880F991F9093AB02EA +:103810008093AA02CF91FF90EF90DF90CF90BF905E +:10382000AF909F908F90089520E030E040EA50ECF8 +:10383000C701B6010E94ED2B87FF6CCF6091B302E8 +:103840007091B4028091B5029091B6020E949F2EB1 +:103850007093C0026093BF025DCFC701B60190585C +:1038600077CF10924E0188CF0C94112D2F923F925A +:103870004F925F926F927F928F929F92AF92BF9280 +:10388000CF92DF92EF92FF920F931F93CF93DF932C +:10389000CDB7DEB768970FB6F894DEBF0FBECDBFC9 +:1038A00026E02093BF0721E02093BE071092BD07BA +:1038B0000091AB071091AC076091A7077091A80722 +:1038C00030E8232E32E0332EF10130E020E02017E3 +:1038D000310730F4DB01A20FB31F6115710521F42C +:1038E00010927302A3E7B2E04C9150E041935193E0 +:1038F0002F5F3F4F2330310551F71C8A1B8A1E8AE8 +:103900001D8A188E1F8A4AE08E010F5F1F4FB80173 +:103910000E94A32BF80101900020E9F73197AF0135 +:10392000401B510BB801CE0143960E94EA198091C9 +:10393000A7079091A807009709F4E8C06B897C89D4 +:103940006115710509F4E0C04091A9075091AA07DB +:103950002F89388D4217530708F4D6C00E94DE30F5 +:103960008F89988D9093AC078093AB07188E1F8A30 +:103970008B899C89009711F00E948A2F94E7E92E89 +:1039800092E0F92E24E0A22EB12CD12CC12C8091F2 +:10399000AB079091AC07C816D90638F4E091A70799 +:1039A000F091A807309709F0C8C010927302E3E7BE +:1039B000F2E0808190E0F10120813181821B930B44 +:1039C000F2E3F89FB001F99F700D1124072E000C4F +:1039D000880B990B0E94F42BF701208131814281E1 +:1039E00053810E94BA2D2B013C0120E030E0A90157 +:1039F0000E94ED2B8111A4C0F701408251826282A6 +:103A0000738201E022E346E270E060E0C5010497C2 +:103A10000E94800C8EEC882E99249A940FEF1FEF51 +:103A2000F701208131814281538160E070E080E8BC +:103A300090E40E94B92D2B013C01B401092C000C2B +:103A4000880B990B0E94F42B9B01AC01C301B201BE +:103A50000E94BA2D0E94982EB092BA07A092B90780 +:103A60007093BC076093BB07F10160817181600FA7 +:103A7000711F60537109072E000C880B990B0E946F +:103A8000B2160F5F1F4FF2E38F0E911C023011052B +:103A900039F62FEFC21AD20A84E0E80EF11CECE2EC +:103AA000AE0EB11CF2E02F0E311C23E0C216D10481 +:103AB00009F06DCF00E022E040E870E060E090E0C7 +:103AC00080E00E94800C2DE040E863E370E090E02D +:103AD00080E00E94800C68960FB6F894DEBF0FBE9F +:103AE000CDBFDF91CF911F910F91FF90EF90DF90AD +:103AF000CF90BF90AF909F908F907F906F905F908E +:103B00004F903F902F9008950E948A2F8B899C8917 +:103B10009093A8078093A7078D899E899093AA0701 +:103B20008093A9078F89988D9093AC078093AB07FA +:103B30001C8A1B8A1E8A1D8A19CFEC0DFD1D39CFE8 +:103B4000C301B20190582DEC3CEC4CE45FE30E94C1 +:103B5000532CA30192010E94BA2DF7016083718357 +:103B6000828393834ECF86E00E948F0E21E0892BC3 +:103B700009F020E0209398020E944B0D1092BC07A0 +:103B80001092BB071092BA071092B9078091AA024F +:103B90009091AB02959587950E94361C0E94F90F73 +:103BA0000E946A1286E00E948F0E892B29F780916D +:103BB00098028111E1CF0E947C128091A707909119 +:103BC000A807009721F00E94752BCB01089560E0B3 +:103BD00070E0CB01FACF2F923F924F925F926F929B +:103BE0007F928F929F92AF92BF92CF92DF92EF928D +:103BF000FF920F931F93CF93DF93CDB7DEB76397F9 +:103C00000FB6F894DEBF0FBECDBFB82EE091A00274 +:103C1000F0E0E25EFD4F80818150990B10929F028F +:103C200010929E02880F991F90939D0280939C0290 +:103C300081E090E090939B0280939A028B2D90E01C +:103C4000880F991F9093AB028093AA0286E00E948E +:103C50008F0E21E0892B09F020E02093980210922A +:103C6000BE0781E08093BD078091AA029091AB02CC +:103C70009C01359527953D872C871C857901FF246C +:103C800097012B19310948E3429FC001439F900DD2 +:103C90001124C80ED91EC114D10409F16627772753 +:103CA0006C197D09072E000C880B990B0E94F42BD0 +:103CB00020E030E040E05FE30E94532C4B015C01C8 +:103CC000B601DD0C880B990B0E94F42B9B01AC0113 +:103CD000C501B4010E94BA2D0E94982E6B010E946A +:103CE0004B0D1092BC071092BB071092BA071092AE +:103CF000B907370182E0681A7108560198E4A91AD9 +:103D0000B108F7013396FB8BEA8B77FC92C0E09108 +:103D1000A002F0E0E25EFD4F80818615170409F0F5 +:103D20000CF487C001E020E340E370E060E0C501EF +:103D30000E94800C95012D5F3F4F398B288B00E04E +:103D40002AE24AE263E070E0888999890E94800C47 +:103D500070E060E0C5010E94240D70E060E0450164 +:103D60003FE2830E911CC4010E94240D6FE270E0BB +:103D7000C5010E94240D6FE270E0C4010E94240D71 +:103D80000E945812E82FC50141968E38910508F01F +:103D900050C0E60DF72DF11DEE0FFF1FEE52FE4F46 +:103DA000808191819F878E8753E0452E512C312C45 +:103DB000212C912C812CF40133E0F595E7953A956F +:103DC000E1F7E20DF31D2E853F85E20FF31FE4912D +:103DD000C4018770992720E830E002C03595279507 +:103DE0008A95E2F7C901F0E0E223F923EF2B79F09D +:103DF000C401880F991F880D991D01E023E043E05D +:103E0000B201E889F9898E0F9F1F0E94800CFFEF95 +:103E10008F1A9F0A2EE08216910469F632E0230E73 +:103E2000311C43E0440E511C8DE24816510409F048 +:103E3000C0CF9FEF691A790AE8E3AE0EB11C2A8958 +:103E40003B892615370509F060CF8091BB028111AF +:103E500040C00E945812F701E80FF11DEE0FFF1F3E +:103E6000EA57FE4F40815181EE24E39400E124E2C1 +:103E700060E370E080E390E00E94A20C0E94F90FE2 +:103E80000E946A1286E00E948F0E892B01F58091B4 +:103E9000980281111CC00E947C12812F63960FB67C +:103EA000F894DEBF0FBECDBFDF91CF911F910F9170 +:103EB000FF90EF90DF90CF90BF90AF909F908F904A +:103EC0007F906F905F904F903F902F900895BC84AB +:103ED000CBCE80E390E09093BA078093B907E1E3FB +:103EE000F0E0F093BC07E093BB0781E08093BF074D +:103EF0000E945812FC858F0FE82FF0E0EE0FFF1F95 +:103F0000E453F04F65917491CE0101960E949C2B71 +:103F1000CE0101960E946116B1CF1F920F920FB68B +:103F20000F9211242F933F934F935F936F937F933F +:103F30008F939F93AF93BF93EF93FF9382EC96E0A1 +:103F40000E94D70DFF91EF91BF91AF919F918F91FB +:103F50007F916F915F914F913F912F910F900FBE85 +:103F60000F901F9018951F920F920FB60F92112469 +:103F70002F938F939F93EF93FF93E091D206F0914D +:103F8000D3068081E091D806F091D90682FD1BC04E +:103F900090818091DB068F5F8F732091DC06821702 +:103FA00041F0E091DB06F0E0EE53F94F958F8093FE +:103FB000DB06FF91EF919F918F912F910F900FBE94 +:103FC0000F901F9018958081F4CF1F920F920FB61B +:103FD0000F9211242F933F938F939F93AF93BF938F +:103FE0008091870290918802A0918902B0918A0203 +:103FF0003091860223E0230F2D3758F50196A11D3D +:10400000B11D209386028093870290938802A0932B +:104010008902B0938A0280918B0290918C02A091C8 +:104020008D02B0918E020196A11DB11D80938B026D +:1040300090938C02A0938D02B0938E02BF91AF91AA +:104040009F918F913F912F910F900FBE0F901F90D6 +:10405000189526E8230F0296A11DB11DD2CF1F92FD +:104060000F920FB60F9211242F933F934F935F93AC +:104070006F937F938F939F93EF93FF9383B181709F +:1040800029B190919102981709F49DC030E0220F58 +:10409000232F221F330B922F809391024091900285 +:1040A000241709F490C02093900220919A02309135 +:1040B0009B02981719F03195219531094091AA0278 +:1040C0005091AB0260919E0270919F02240F351FA8 +:1040D000261737070CF48BC020919A0230919B026F +:1040E000981719F03195219531094091AA02509104 +:1040F000AB0260919C0270919D02240F351F6217E4 +:1041000073070CF46FC040919A0250919B0298176C +:1041100019F05195419551092091AA023091AB02B5 +:10412000240F351F3093AB022093AA0241E098136D +:1041300040E020918F02421709F440C020919A027A +:1041400030919B02981719F03195219531096091B2 +:10415000AA027091AB02E0919E02F0919F02260F9D +:10416000371F2E173F070CF44CC020919A02309154 +:104170009B02981719F03195219531096091AA0297 +:104180007091AB02E0919C02F0919D02260F371FC7 +:10419000E217F3078CF120919A0230919B02981755 +:1041A00019F03195219531098091AA029091AB02C5 +:1041B000820F931F9093AB028093AA0240938F02C9 +:1041C00081E08093B702FF91EF919F918F917F9152 +:1041D0006F915F914F913F912F910F900FBE0F9074 +:1041E0001F90189520919C0230919D029BCF2091A9 +:1041F0009E0230919F0296CF80919C0290919D02E9 +:10420000D9CF80919E0290919F02D4CF18950F93A1 +:104210001F93CF93DF93E2ECF6E01382128288EED5 +:1042200093E0A0E0B0E084839583A683B78389E41C +:1042300092E09183808385EC90E09587848784EC7D +:1042400090E09787868780EC90E0918B808B81EC63 +:1042500090E0938B828B82EC90E0958B848B86EC44 +:1042600090E0978B868B118E128E138E148EEDEA52 +:10427000F7E0138212821682178280E1808715820E +:10428000148212868BE592E09183808315861486D2 +:104290001786168611E0108B118A128B138AE7EAB3 +:1042A000F7E011821082138212821582148250E08C +:1042B00040E061E772E0CF010E94EA19CBE6D7E067 +:1042C00083E697E09F8F8E8F87E697E09D8F8C8F98 +:1042D0008FE597E099A388A31AAE1AAA1BAA1CAA75 +:1042E0001DAA80E090E0AFE7B3E48EAB9FABA8AF30 +:1042F000B9AF84E690E0A0E0B0E08EA79FA7A8AB9E +:10430000B9AB81E090E0998F888F9B8F8A8F1BAF2C +:1043100080E090E0A0E3B1E488839983AA83BB8323 +:1043200080E090E0A0E0BFE38C839D83AE83BF83F9 +:1043300080E090E0A0E8BFE388879987AA87BB87E1 +:1043400080E090E0A0E3B1EC8C879D87AE87BF87CB +:104350008DEC9CECACE4BDEB888B998BAA8BBB8B72 +:1043600080E090E0A0E2B1EC8C8B9D8BAE8BBF8B9C +:104370000E94D10F0EA51FA528A939A9601B710B9A +:10438000820B930B6AA37BA38CA39DA3DF91CF9198 +:104390001F910F910895CF93DF93CDB7DEB72B9781 +:1043A0000FB6F894DEBF0FBECDBF789484B582609F +:1043B00084BD84B5816084BD85B5826085BD85B5C9 +:1043C000816085BD80916E00816080936E00109247 +:1043D00081008091810082608093810080918100C2 +:1043E0008160809381008091800081608093800053 +:1043F0008091B10084608093B1008091B0008160B1 +:104400008093B00080917A00846080937A008091DC +:104410007A00826080937A0080917A008160809334 +:104420007A0080917A00806880937A001092C100AF +:104430001092B90088E48093B8000E94EF0F80E0EA +:104440000E94E50F0BE615E18AE8E82E85E1F82EDB +:10445000F80184910E94E50F0F5F1F4FE016F106EF +:10446000B9F70E94DD0F11E01093B8000E94F90F18 +:1044700081E28093B50760E08EE00E94E60E60E086 +:104480008FE00E94E60E61E085E00E94E60E61E0AA +:1044900089E00E94E60E62E087E00E94E60E62E09C +:1044A00088E00E94E60E62E086E00E94E60E62E08E +:1044B0008AE00E94E60E8FEF90E00E94220F60E0FB +:1044C00085E00E94B80E80917A00876080937A0020 +:1044D00080917A00886080937A00789410936B00C2 +:1044E000109368001BBB90E080E00E94341C182FE2 +:1044F00081E090E00E94341C912F8F3F984009F09A +:10450000BBC082E090E00E94341C182F83E090E052 +:104510000E94341C912F909347018093460184E0C0 +:1045200090E00E94341C182F85E090E00E94341C1B +:10453000912F909345018093440186E090E00E9482 +:10454000341C8093430187E090E00E94341C8093E8 +:104550004C0188E090E00E94341C80934B0189E07C +:1045600090E00E94341C80934A018AE090E00E940F +:10457000341C80937F018BE090E00E94341C91E01A +:10458000811101C090E0909349018CE090E00E947D +:10459000341C91E0811101C090E0909348018DE0BE +:1045A00090E00E94341C8093C1028EE090E00E9453 +:1045B000341C282E809342018FE090E00E94341C2E +:1045C0008093BB0280E190E00E94341C91E0811155 +:1045D00001C090E09093990281E190E00E94341C28 +:1045E0008093B802B2E08B2EB1E09B2E1FE4A12E87 +:1045F00011E0B12E02E1E02EF12C312C231409F44C +:1046000047C010E000E0C701800F911F0E94341CDA +:10461000F501E00FF11F80830F5F1F4F063011057A +:1046200091F7670126E0C20ED11C3EE0E30EF11CBB +:104630003401C6010E94341C082F10E0102F0027FF +:10464000F301118300832601F2E04F0E511CC601D5 +:1046500001960E94341C082BF301019311933F0132 +:1046600062014E145F0429F73394F8E08F0E911C19 +:1046700026E0A20EB11CC2CF68E090E080E00E946C +:10468000291A6FEF81E090E00E94291A0E943D1ADA +:104690001091990280EC111101C088EC0E94161053 +:1046A00080EA111101C081EA0E9416100E94B01127 +:1046B00090939302809392020E9442129093BA02C6 +:1046C0008093B90200914601109147011093B20204 +:1046D0000093B1028EE00E941412BC0190E080E0D1 +:1046E0000E94F22B6093940270939502809396023D +:1046F000909397020E94EC110E94B61520E030E0E2 +:1047000040EA51E46091B3027091B4028091B50225 +:104710009091B6020E94BA2D6B017C01B80190E025 +:1047200080E00E94F22B9B01AC01C701B6010E9400 +:10473000ED2B87FF04C090E080E00E94220F1092D2 +:104740009D0710929E0710929F071092A007412C80 +:10475000512CFFE76F2EF3E47F2E4092A107509279 +:10476000A2076092A3077092A407A0908907B09057 +:104770008A078091A507F501C080D180E280F3808F +:10478000882309F47DC7A3019201C701B6010E94E5 +:10479000CE2E181634F5F501408251826282738262 +:1047A0008090910790909207A0909307B090940703 +:1047B000C090A107D090A207E090A307F090A407B3 +:1047C000A7019601C501B4010E94CE2E1816C4F4AB +:1047D000C0929107D0929207E0929307F0929407CB +:1047E0001FC020E030E0A901C701B6010E94ED2BF7 +:1047F00087FFD6CFF5011082118212821382D0CFAB +:10480000C0909D07D0909E07E0909F07F090A00772 +:10481000A7019601C501B4010E94ED2B87FDD8CFF9 +:1048200081E08093A50783B181708093910289B163 +:1048300090E0880F892F881F990B80939002209118 +:1048400091029091900281E0291380E080938F0281 +:1048500084E690E090939F0280939E0280E293E032 +:1048600090939D0280939C028AE090E090939B023B +:1048700080939A02000F111F1093AB020093AA02BB +:104880000E94D10F6093AD027093AE028093AF028D +:104890009093B0020E947C120E947C122090AA0287 +:1048A0003090AB029101359527953A87298730934F +:1048B000B2022093B10286E00E948F0E8B87811195 +:1048C0009EC08091A902882309F499C00E947C129D +:1048D0000E94D10F6B017C01C092A502D092A6026A +:1048E000E092A702F092A80286E00E948F0E892B28 +:1048F00059F40E94D10F6C197D098E099F09643FFC +:1049000071408105910580F30E94D10F6C197D09DA +:104910008E099F09643F71408105910508F448C4E0 +:104920008FEF90E00E94220F0E947C12512C5AE0DF +:10493000652E712C1092A002852D0E94EB1D582E21 +:10494000F7E0F81708F438C0E82FF0E0E655FB4D23 +:104950000C94E82EC4247627F02758286628A0282F +:10496000B828AE2820E030E0A901C701B6010E94B6 +:10497000ED2B87FF55CF109291071092920710925E +:104980009307109294074CCF4EE1642E712C81E076 +:104990008093A002852D0E94EB1D582E22E08217E5 +:1049A00009F43EC2281708F4E9C0882309F411C1AC +:1049B00031E0831709F410C10E943D1A81E0809311 +:1049C000B70229853A853093B2022093B10284E67A +:1049D00090E090939F0280939E0280E293E09093F8 +:1049E0009D0280939C028AE090E090939B028093CA +:1049F0009A02C1018E7F9093AB028093AA023B85FD +:104A00003093A9028091BC02882309F110914A01D8 +:104A10001123E9F00E94D10FC090A102D090A20210 +:104A2000E090A302F090A4026C197D098E099F0901 +:104A300028EE33E040E050E00E94882D211738F046 +:104A40001092BC020E947C1281E080934D01809103 +:104A5000B7028823E9F18091BD02882349F120E063 +:104A600030E040EA51E46091B3027091B402809169 +:104A7000B5029091B6020E94BA2D6B017C01609143 +:104A8000B1027091B20290E080E00E94F22B9B0193 +:104A9000AC01C701B6010E94ED2B87FF04C090E076 +:104AA00080E00E94220F0E947C1281E080934D01E1 +:104AB0001092B7021092BD021092BE020E94D10F56 +:104AC0006093AD027093AE028093AF029093B002F8 +:104AD0000E94D10F0091AD021091AE022091AF0261 +:104AE0003091B002601B710B820B930B20E63AEE03 +:104AF00040E050E00E94882D122F2093AC0280915C +:104B0000BD0281110BC080914C01882339F0281718 +:104B100028F081E08093BD020E947C128091BE0249 +:104B200081110BC080914B01882339F0181728F0B0 +:104B300081E08093BE020E947C120E94F21A0E94C1 +:104B400089130E94D10F8091B607962F981B892F49 +:104B50009091B707992309F441C38093B807109245 +:104B6000B70780E090E0892B09F498CE0E94C30D2E +:104B7000882309F493CE0E94000090CE83E058165B +:104B800009F451C194E0591217CF80914201883045 +:104B900008F0FDCE91E0980F909342018093C102FE +:104BA0000E949A12E091C10228E0E29FF0011124D4 +:104BB000EE5FFE4F88ED90E09183808324E331E047 +:104BC0003383228386E891E09583848377826682AB +:104BD000DECE0E940D19DBCE8E010F5F1F4F812CA0 +:104BE000912C5401839498EEE92E93E0F92ECC2475 +:104BF000C394D12C32E0432EE091C10224E0E29F25 +:104C0000F0011124C4010197E80FF91FEE0FFF1FF7 +:104C1000EE5FFE4F808191819093B2028093B1024A +:104C2000E8ECF0E0F0939F02E0939E02F0929D0288 +:104C3000E0929C02D0929B02C0929A02880F991F28 +:104C40009093AB028093AA02F1E0F0934D0186E0CD +:104C50000E948F0E21E0892B09F020E0209398021A +:104C60000E944B0D1092BC071092BB071092BA071E +:104C70001092B9074092BF070E94F21A0E9489134E +:104C80001092BA071092B9071092BC071092BB0796 +:104C900080EB95E10E948D11C501B4010E94B2160E +:104CA0008FE692E00E94611680914E011092BA0741 +:104CB0001092B907882309F48BC020E130E03093CB +:104CC000BC072093BB0783EA95E10E948D111092E7 +:104CD000BA071092B90780E290E09093BC078093E6 +:104CE000BB078CE995E10E948D116091AA02709139 +:104CF000AB0275956795072E000C880B990B0E94E7 +:104D0000B2160E946A120E94F90F86E00E948F0E6E +:104D1000892B09F0A5CF809198028111A1CF8091B4 +:104D2000AA029091AB0295958795F8018193919392 +:104D30008F010E947C126AE070E080E090E00E94A7 +:104D40009F0FFFEF8F1A9F0AAF0ABF0A24E0821657 +:104D50009104A104B10409F04FCF8FEF90E00E94BD +:104D6000220F8BEA94E00197F1F70E94EC110E9468 +:104D70009F2E4B0178876F83C980DA800B811C815D +:104D8000C6014E968017910708F001CEED80FE8097 +:104D9000C8014E968E159F0508F0F9CD87E08093E7 +:104DA000A00280E00E94EB1D882309F4F0CDE09181 +:104DB000C10238E0E39FF0011124EE5FFE4FD18283 +:104DC000C08213830283F582E48297828682DFCDDC +:104DD000E0E1F0E0F093BC07E093BB0786E995E1E2 +:104DE0000E948D11609194027091950280919602BB +:104DF000909197020E949F2E90E080E04AE00E94EE +:104E00006E161092BA071092B90720E230E0309384 +:104E1000BC072093BB078AE895E10E948D1171CFF2 +:104E20000E949A12B4CD87E08093A0028091420143 +:104E3000813009F4ACCD80E00E94EB1D882309F499 +:104E4000A6CD1091C10200914201802F8150990B93 +:104E5000BC011817190639F411501093C102015002 +:104E60000093420194CD812F90E086179707BCF7FD +:104E7000E6E01E9FD001112450E040E09C012F5F2E +:104E80003F4FFA01EA0FFB1FE15BFE4FF680F08215 +:104E90004F5F5F4F46305105A1F7B3E0220F331F3C +:104EA000BA95E1F7F901EE5FFE4F2081318143E0D1 +:104EB000880F991F4A95E1F7DC01AE5FBE4F11964E +:104EC0003C932E938281938113969C938E93129799 +:104ED0008481958115969C938E93149786819781F2 +:104EE00017969C938E9316971F5FBDCF82E0809399 +:104EF000A002412C70E9C72EDD24D394E4E6AE2E47 +:104F0000B12CF0E28F2EF3E09F2EA4E1EA2EF12CDB +:104F100008EC10E0842D0E94EB1D482E91E08917CB +:104F200031F1891738F0E2E08E1709F43FC00E9492 +:104F30003D1A00CD8091460190914701B0929F02A9 +:104F4000A0929E0290929D0280929C0270929B027F +:104F500060929A02880F991F9093AB028093AA02E5 +:104F60000E94B31D9093470180934601D3CF809157 +:104F700044019091450128E230E030939F02209354 +:104F80009E02D0929D02C0929C0270929B026092FF +:104F90009A02880F991F9093AB028093AA020E94F5 +:104FA000B31D9093450180934401B4CF8091430198 +:104FB00090E0F0929F02E0929E0210939D02009377 +:104FC0009C0270929B0260929A02880F991F9093A4 +:104FD000AB028093AA020E94B31D809343019ACF33 +:104FE00083E08093A002F12C01E010E08F2D0E945D +:104FF000EB1DF82E31E08317E9F18317F8F082E01A +:10500000F81295CF80914A0190E010929F02109281 +:105010009E0228E631E030939D0220939C0270921C +:105020009B0260929A02880F991F9093AB02809323 +:10503000AA020E94B31D80934A01D8CF80914C01EF +:1050400090E010929F0210929E02ECE3F0E0F09349 +:105050009D02E0939C0210939B0200939A02880F9A +:10506000991F9093AB028093AA020E94B31D809374 +:105070004C01BCCF80914B0190E010929F021092A6 +:105080009E0228E730E030939D0220939C02E5E0E9 +:10509000F0E0F0939B02E0939A02880F991F90939F +:1050A000AB028093AA020E94B31D80934B019ECF56 +:1050B00084E08093A002809149010E94EB1D91E061 +:1050C000811101C090E09093490134CC10E0EAE0F6 +:1050D000EE2EF5E0DF2EA9E0CA2EE092A002812F8D +:1050E0000E94EB1D182F882321F08130E1F000E0B1 +:1050F00009C0D092A00280917F010E94EB1D809395 +:105100007F0101E0F090990280ECF11001C088EC81 +:105110000E94161080EAF11001C081EA0E94161068 +:105120000111DBCF04CFC092A002809199020E94AE +:10513000EB1D91E0811101C090E090939902E1CFC5 +:1051400086E08093A002809148010E94EB1D91E0CF +:10515000811101C090E090934801ECCB88E08093EE +:10516000A0028091BB020E94EB1D8093BB02E2CBA8 +:105170008091B80290E010929F0210929E02E4EF9C +:10518000F1E0F0939D02E0939C0221E030E0309347 +:105190009B0220939A02880F991F9093AB028093F1 +:1051A000AA020E94B31D8093B8020E947C12C2CB57 +:1051B0008091BC0291E089278093BC02882351F042 +:1051C0000E94D10F6093A1027093A2028093A30268 +:1051D0009093A40281E08093B70211CC9091B5071F +:1051E000891748F48F5F891708F0BBCC81E083BF33 +:1051F000889513BEB6CC11E01093B7076093B6073D +:105200008091B1079091B20701969093B207809375 +:10521000B10780917F01882309F4C4C10E944B0D1E +:105220001092BC071092BB071092BA071092B907F0 +:1052300001E020E440E870E060E090E080E00E945F +:10524000800C1093BF071093BE071092BD07E12C8E +:1052500000E120E146E256E170E060E090E080E0AD +:105260000E94A20C83E190E09093BA078093B90763 +:1052700084E090E09093BC078093BB078091C102CB +:10528000E6E08E9FC0011124815B9E4F0E94611653 +:105290008091BF029091C002853F914008F02DC1DE +:1052A0008091BE0281112BC18091BD02811129C163 +:1052B0008091BC02811127C180914E01811125C1CD +:1052C00020E030E044E353E46091630770916407A9 +:1052D00080916507909166070E94ED2B87FF17C1AB +:1052E00085E025E330E03093BA072093B90721E049 +:1052F00030E03093BC072093BB0792E09093BF0748 +:10530000C82ED12C9091BB02CC0CDD1C911101C197 +:10531000F601E95CFD4F40815181E12C0EE02CE16A +:1053200061E070E080E590E00E94A20CF601E75D8C +:10533000FD4F40815181E12C0EE02EE061E070E0F4 +:1053400081E790E00E94A20C81E08093BF070E9459 +:10535000EC1120E030E040EA52E40E94CE2E181614 +:105360000CF0FAC00E94D10F52E0660F771F881F21 +:10537000991F5A95D1F728EE33E040E050E00E94A3 +:10538000882D20FFE9C00E947C126091B9027091C3 +:10539000BA0290E080E00E94F22B20E030E048EC7E +:1053A00052E40E94262E6B017C016091B80270E0ED +:1053B00090E080E00E94F42B9B01AC01C701B60194 +:1053C0000E94ED2B87FDD4C0E12C0EE02EE048ECCE +:1053D00055E162E270E082E090E00E94A20C03E1FD +:1053E00010E01093BA070093B90720E130E0309342 +:1053F000BC072093BB070E94EC1141E00E94DC1621 +:1054000088EF0E94A81186EC95E10E948D111093FF +:10541000BA070093B90788E190E09093BC078093A6 +:10542000BB070E94B011BC0190E080E00E94F22B0B +:1054300020E030E04AE754E40E94262E42E00E9439 +:10544000DC1684EC95E10E948D111093BA0700934D +:10545000B90780E290E09093BC078093BB0760910E +:10546000B9027091BA0290E080E00E94F22B20E035 +:1054700030E04AE754E40E94262E41E00E94DC1608 +:1054800082EC95E10E948D111093BA070093B90741 +:1054900088E290E09093BC078093BB078BEB95E18B +:1054A0000E948D1189E390E09093BA078093B90729 +:1054B00082E190E09093BC078093BB0784E08093E7 +:1054C000BF076091BF027091C002653F91E079070C +:1054D00008F462C087EB95E10E948D1100E020E2A4 +:1054E00048E460E170E087E390E00E945A1080E0B9 +:1054F0000E94B4170E94F90F34CB80E0F2CE81E015 +:10550000F0CE82E0EECE83E0ECCE84E0EACE86E020 +:10551000E8CE8330C1F038F4813069F0823081F018 +:1055200080E096E10AC08530A1F080F08630C1F7B6 +:1055300086E096E102C082E296E10E948D11F6CEED +:105540008CE196E1FACF86E196E1F7CF80E196E132 +:10555000F4CF8BE096E1F1CFE12C0EE02EE044EEAB +:1055600055E162E170E082E090E00E94A20C0DCF74 +:105570000E94D10F42E0660F771F881F991F4A953E +:10558000D1F728EE33E040E050E00E94882D20FF64 +:105590001BCF0E947C1223CF90E080E04AE00E9463 +:1055A0006E169CCF0E944B0D1092BC071092BB0749 +:1055B0001092BA071092B9070E94EC1120E030E077 +:1055C00040EA52E40E94CE2E181694F40E94D10FA5 +:1055D00032E0660F771F881F991F3A95D1F728EEA2 +:1055E00033E040E050E00E94882D20FD0E947C12B4 +:1055F0006091B9027091BA0290E080E00E94F22BB3 +:1056000020E030E048EC52E40E94262E6B017C0141 +:105610006091B80270E090E080E00E94F42B9B0162 +:10562000AC01C701B6010E94ED2B87FF12C00E949A +:10563000D10F22E0660F771F881F991F2A95D1F797 +:1056400028EE33E040E050E00E94882D20FD0E94CB +:105650007C128091BF029091C002853FE1E09E07DD +:1056600010F087EE93E00E94361C00E023E040E853 +:1056700060E370E090E080E00E94800C81E038CF31 +:10568000C0929107D0929207E0929307F09294070C +:10569000E0918707F091880780819181A281B38191 +:1056A0008093950790939607A0939707B0939807D8 +:1056B00020E030E04FE753E4C701B6010E94CE2E50 +:1056C00018160CF04FC940929107509292076092C1 +:1056D000930770929407A4C88091A7079091A80798 +:1056E000009711F00C948A2F08951F93FC019927BD +:1056F0008827BC01E89411911032E9F3193010F0B9 +:105700001E30C8F31B3251F01D3249F4689406C0B4 +:105710000E94AE2B610F711D811D911D11911053BF +:105720001A30B0F33EF490958095709561957F4F57 +:105730008F4F9F4F1F910895FB01DC0105900D9243 +:105740000020E1F70895BB274A3031F4992322F471 +:10575000BDE2909581959F4F0C94C42B592F482FF3 +:10576000372F262F660F771F881F991F660F771F09 +:10577000881F991F620F731F841F951F660F771F65 +:10578000881F991F0895BB27FB015527AA27880F5B +:10579000991FAA1FA41710F0A41B83955051B9F7A5 +:1057A000A05DAA3308F0A95DA193009779F7B11124 +:1057B000B1931192CB010C94DD2BDC01FC01672F1E +:1057C00071917723E1F7329704C07C916D937083D8 +:1057D0006291AE17BF07C8F308950E942F2C08F4FA +:1057E00081E00895E89409C097FB3EF49095809578 +:1057F000709561957F4F8F4F9F4F9923A9F0F92F97 +:1058000096E9BB279395F695879577956795B79514 +:10581000F111F8CFFAF4BB0F11F460FF1BC06F5FFA +:105820007F4F8F4F9F4F16C0882311F096E911C00C +:10583000772321F09EE8872F762F05C0662371F02D +:1058400096E8862F70E060E02AF09A95660F771F41 +:10585000881FDAF7880F9695879597F90895990F1D +:105860000008550FAA0BE0E8FEEF16161706E8072A +:10587000F907C0F012161306E407F50798F0621B4B +:10588000730B840B950B39F40A2661F0232B242B20 +:10589000252B21F408950A2609F4A140A6958FEF3F +:1058A000811D811D08950E94662C0C94D72C0E94A6 +:1058B000C92C38F00E94D02C20F0952311F00C94C4 +:1058C000C02C0C94C62C11240C940B2D0E94E82C97 +:1058D00070F3959FC1F3950F50E0551F629FF00143 +:1058E000729FBB27F00DB11D639FAA27F00DB11D5C +:1058F000AA1F649F6627B00DA11D661F829F2227E5 +:10590000B00DA11D621F739FB00DA11D621F839F6B +:10591000A00D611D221F749F3327A00D611D231F41 +:10592000849F600D211D822F762F6A2F11249F578F +:1059300050409AF0F1F088234AF0EE0FFF1FBB1F92 +:10594000661F771F881F91505040A9F79E3F510551 +:1059500080F00C94C02C0C940B2D5F3FE4F3983E28 +:10596000D4F3869577956795B795F795E7959F5FFB +:10597000C1F7FE2B880F911D9695879597F908958D +:1059800097F99F6780E870E060E008959FEF80ECF2 +:10599000089500240A941616170618060906089595 +:1059A00000240A9412161306140605060895092EFB +:1059B0000394000C11F4882352F0BB0F40F4BF2B6A +:1059C00011F460FF04C06F5F7F4F8F4F9F4F0895AA +:1059D00057FD9058440F551F59F05F3F71F04795A0 +:1059E000880F97FB991F61F09F3F79F08795089585 +:1059F000121613061406551FF2CF4695F1DF08C0A4 +:105A0000161617061806991FF1CF869571056105C0 +:105A100008940895E894BB2766277727CB0197F968 +:105A20000895F999FECF92BD81BDF89A992780B566 +:105A30000895262FF999FECF1FBA92BD81BD20BDD2 +:105A40000FB6F894FA9AF99A0FBE01960895052EAA +:105A500097FB1EF400940E943E2D57FD07D00E9434 +:105A6000882D07FC03D04EF40C943E2D50954095A4 +:105A7000309521953F4F4F4F5F4F089590958095FA +:105A8000709561957F4F8F4F9F4F08950E94AA2D6B +:105A9000A59F900DB49F900DA49F800D911D112482 +:105AA00008952F923F924F925F926F927F928F92C2 +:105AB0009F92AF92BF92CF92DF92EF92FF920F939D +:105AC0001F93CF93DF93CDB7DEB7CA1BDB0B0FB6A7 +:105AD000F894DEBF0FBECDBF09942A883988488864 +:105AE0005F846E847D848C849B84AA84B984C884FA +:105AF000DF80EE80FD800C811B81AA81B981CE0FF1 +:105B0000D11D0FB6F894DEBF0FBECDBFED010895D5 +:105B1000A1E21A2EAA1BBB1BFD010DC0AA1FBB1FB1 +:105B2000EE1FFF1FA217B307E407F50720F0A21B23 +:105B3000B30BE40BF50B661F771F881F991F1A9490 +:105B400069F760957095809590959B01AC01BD01BA +:105B5000CF010895A29FB001B39FC001A39F700D14 +:105B6000811D1124911DB29F700D811D1124911D65 +:105B700008955058BB27AA270E94D12D0C94D72CEA +:105B80000E94C92C38F00E94D02C20F039F49F3F9D +:105B900019F426F40C94C62C0EF4E095E7FB0C9453 +:105BA000C02CE92F0E94E82C58F3BA17620773073C +:105BB0008407950720F079F4A6F50C940A2D0EF4CD +:105BC000E0950B2EBA2FA02D0B01B90190010C010D +:105BD000CA01A0011124FF27591B99F0593F50F425 +:105BE000503E68F11A16F040A22F232F342F44277D +:105BF000585FF3CF469537952795A795F040539575 +:105C0000C9F77EF41F16BA0B620B730B840BBAF044 +:105C10009150A1F0FF0FBB1F661F771F881FC2F7AF +:105C20000EC0BA0F621F731F841F48F487957795C3 +:105C30006795B795F7959E3F08F0B0CF9395880F7D +:105C400008F09927EE0F9795879508950E943A2EB0 +:105C50000C94D72C0E94D02C58F00E94C92C40F0F4 +:105C600029F45F3F29F00C94C02C51110C940B2D9A +:105C70000C94C62C0E94E82C68F39923B1F35523A9 +:105C800091F3951B550BBB27AA276217730784074F +:105C900038F09F5F5F4F220F331F441FAA1FA9F3E5 +:105CA00035D00E2E3AF0E0E832D091505040E695D3 +:105CB000001CCAF72BD0FE2F29D0660F771F881F34 +:105CC000BB1F261737074807AB07B0E809F0BB0B27 +:105CD000802DBF01FF2793585F4F3AF09E3F51053B +:105CE00078F00C94C02C0C940B2D5F3FE4F3983E9D +:105CF000D4F3869577956795B795F7959F5FC9F724 +:105D0000880F911D9695879597F90895E1E0660FA4 +:105D1000771F881FBB1F621773078407BA0720F01D +:105D2000621B730B840BBA0BEE1F88F7E095089586 +:105D30000E949F2E6894B1110C940B2D08950E941F +:105D4000F02C88F09F5798F0B92F9927B751B0F0F1 +:105D5000E1F0660F771F881F991F1AF0BA95C9F7EF +:105D600014C0B13091F00E940A2DB1E008950C9456 +:105D70000A2D672F782F8827B85F39F0B93FCCF309 +:105D8000869577956795B395D9F73EF4909580956C +:105D9000709561957F4F8F4F9F4F08950E942F2CD4 +:105DA00008F48FEF08950E942F2C880B990B08950B +:105DB000DB018F939F930E94462DBF91AF91A29FCD +:105DC000800D911DA39F900DB29F900D11240895F9 +:105DD000EE0FFF1F0590F491E02D09940F931F9390 +:105DE000CF93DF938230910510F482E090E0E09150 +:105DF000C307F091C40730E020E0B0E0A0E03097A6 +:105E000099F42115310509F44AC0281B390B2430B7 +:105E10003105D8F58A819B816115710589F1FB01F6 +:105E200093838283FE0111C04081518102811381DD +:105E300048175907E0F04817590799F4109761F08F +:105E400012960C93129713961C933296CF01DF9102 +:105E5000CF911F910F9108950093C3071093C4072A +:105E6000F4CF2115310551F04217530738F0A9013D +:105E7000DB019A01BD01DF01F801C1CFEF01F9CFCC +:105E80009093C4078093C307CDCFFE01E20FF31FA9 +:105E9000819391932250310939832883D7CF209160 +:105EA000C1073091C207232B41F420918201309128 +:105EB00083013093C2072093C10720918001309164 +:105EC00081012115310541F42DB73EB74091840180 +:105ED00050918501241B350BE091C107F091C20759 +:105EE000E217F307A0F42E1B3F0B2817390778F0B1 +:105EF000AC014E5F5F4F2417350748F04E0F5F1F10 +:105F00005093C2074093C107819391939FCFF0E0D4 +:105F1000E0E09CCFCF93DF930097E9F0FC0132974C +:105F200013821282A091C307B091C407ED0130E043 +:105F300020E01097A1F420813181820F931F2091DE +:105F4000C1073091C2072817390709F061C0F093E3 +:105F5000C207E093C107DF91CF910895EA01CE1700 +:105F6000DF07E8F54A815B819E0141155105B1F7D4 +:105F7000E901FB83EA8349915991C40FD51FEC17BE +:105F8000FD0761F4808191810296840F951FE901DC +:105F900099838883828193819B838A83F0E0E0E008 +:105FA00012968D919C9113970097B9F52D913C9184 +:105FB0001197CD010296820F931F2091C107309156 +:105FC000C2072817390739F6309751F51092C407E0 +:105FD0001092C307B093C207A093C107BCCFD3836D +:105FE000C28340815181840F951FC817D90761F47E +:105FF0004E5F5F4F88819981480F591F51834083BD +:106000008A819B81938382832115310509F0B0CF6A +:10601000F093C407E093C3079ECFFD01DC01C0CF1E +:1060200013821282D7CFB0E0A0E0E9E1F0E30C9454 +:10603000532D8C01009751F4CB010E94EE2E8C0160 +:10604000C801CDB7DEB7E0E10C946F2DFC01E60F7F +:10605000F71F9C0122503109E217F30708F49DC095 +:10606000D901CD91DC911197C617D70798F0C530AB +:10607000D10530F3CE0104978617970708F3C61BA6 +:10608000D70B2297C193D1936D937C93CF010E943C +:106090008A2FD6CF5B01AC1ABD0A4C018C0E9D1E17 +:1060A000A091C307B091C407512C412CF12CE12CD5 +:1060B000109731F58091C1079091C2078815990515 +:1060C00009F05CC04616570608F058C08091800160 +:1060D00090918101009741F48DB79EB74091840162 +:1060E00050918501841B950BE817F90708F055C0FE +:1060F000F093C207E093C107F90171836083A0CFD9 +:106100008D919C91119712966C90129713967C909A +:106110001397A815B90559F56C0142E0C40ED11CBE +:10612000CA14DB0420F1AC014A195B09DA011296AA +:10613000159780F06282738251834083D9016D93F9 +:106140007C93E114F10471F0D7011396FC93EE9364 +:10615000129776CF22968C0F9D1FF9019183808331 +:10616000F301EFCFF093C407E093C30769CF48165C +:10617000590608F42C017D01D3019ACFCB010E946E +:10618000EE2E7C01009749F0AE01B8010E94D53097 +:10619000C8010E948A2F870153CF10E000E050CF42 +:1061A00081E090E0F8940C94E530FB01DC0102C042 +:1061B00001900D9241505040D8F70895FB01DC0149 +:1061C00001900D920020E1F708951BE0C2E3DBE0AF +:1061D00004C0FE010E94E82E2196C333D107C9F7FF +:0461E000F894FFCF61 +:1061E40001FFD800340186011E00000000000000F9 +:1061F400000000000000000000000000000000009B +:10620400000000000000000000000000000000008A +:10621400000000000000000000000000000000007A +:106224000000013C960040010101280F05010142D4 +:1062340043312E3500000000000000000000000083 +:10624400000000000000000000000000000000004A +:106254000000000000000000000000000000000139 +:106264000000C50780004C0AFC09AC095C090C0954 +:10627400BC086C081C08CC074C0A7C072C07DC06FD +:106284008C063C06EC059C054C053C069C05FC0470 +:106294004C053C06AC045C040C04BC036C031C03FA +:1062A400CC027C022C02DC01CC027C028C013C017D +:1062B4003C06740D580D3C0D200D040DE80CCC0C5F +:1062C400B00C940C780C5C0C740D400C240C080C71 +:1062D400740DEC0BD00B080CEC0BB40BD00B080CAE +:1062E400980B7C0B600B440B280BE80C0C0B940CE8 +:1062F400F00AD40AB80A9C0A040DB80A080C090664 +:10630400040402020202020203200E040EE40DC879 +:1063140015C80DAC0D900D8C0F540F1C0FE40EAC72 +:106324000E740E3C0E00000000F90D590D860D464A +:106334000EB70D950DA90D000000008B10590DAD81 +:1063440011580D6E616E00696E66006F7666002FDF +:02635400330014 +:00000001FF diff --git a/software/binaries/1.7t1/T12.ino.with_bootloader.standard.hex b/software/binaries/1.7t1/T12.ino.with_bootloader.standard.hex new file mode 100644 index 0000000..15f7f07 --- /dev/null +++ b/software/binaries/1.7t1/T12.ino.with_bootloader.standard.hex @@ -0,0 +1,1625 @@ +:020000040000FA +:100000000C94330B0C945B0B0C945B0B0C942F2017 +:100010000C945B0B0C945B0B0C945B0B0C945B0BC8 +:100020000C945B0B0C945B0B0C945B0B0C945B0BB8 +:100030000C945B0B0C945B0B0C945B0B0C945B0BA8 +:100040000C94E51F0C945B0B0C94B31F0C948D1F48 +:100050000C945B0B0C9406210C945B0B0C945B0BC7 +:100060000C945B0B0C945B0B5361766500466C69DA +:1000700070004D61696E2053637265656E004F4B71 +:10008000004E4F00454E00434E00594553004E4F21 +:10009000004F4E004F464600496E666F730042693E +:1000A0006700504944004469726563740053617687 +:1000B0006500426F6F7374004F666600536C656530 +:1000C00070005361766500426F6F737400536C6506 +:1000D00065700044656661756C74005361766500F7 +:1000E0004164640044656C6574650052656E616DC1 +:1000F000650043616C696272617465004368616E9A +:1001000067650052657475726E004C616E67004CD5 +:100110004F5720566F6C0042757A7A6572005363B0 +:100120007265656E00436F6E74726F6C0054696D1A +:1001300065720054656D7000546970000000000025 +:10014000000F1DC20800054442080003845FBF0081 +:100150000FE44410000115451000054CC97F8009CB +:10016000244F900007C4C11000054D413F000554C5 +:1001700043810007C44D0200054441140005554168 +:10018000080007C881040000000000000000000013 +:100190000001083FFE001FFF810000004002000038 +:1001A00007FE0FF800040208080004020888000790 +:1001B000FE0888000402088800040208880007FE80 +:1001C0000888000402094800040202300007FE0407 +:1001D0000C000402180400000000000000000000F1 +:1001E0000001100080001FFF80800001103FFF0011 +:1001F000004004080007FC04080004440410000444 +:100200004402100004440220001FFF81200000402F +:1002100000C00000A00130000110020800060C0C14 +:1002200007001803B00200000000000000000000FA +:1002300000004000800000400080000FFF3FFF00F2 +:10024000084104080008410408000841041000089F +:10025000410210000FFF0220000841012000004071 +:1002600000C0000040013000004002080000400CC7 +:100270000700004030020000000000000000000005 +:10028000001FDF10200002120C20000224042000B6 +:10029000047F8020000424B820000FA4885000149C +:1002A000BF88500004A488500004A488480004BFFC +:1002B00088880004A48A880007A48C8400044489E8 +:1002C000070000818602000000000000000000001E +:1002D000000FF00491000440025200047F9054008B +:1002E000045088FF0007D08481000451008100047D +:1002F0004901FF0007CA0281000444048100044A46 +:100300001CFF0007EA0481000C510481000061C455 +:100310008500004080820000000000000000000016 +:100320000007FF802000008407FF00008404010014 +:10033000008404010000840401000FFFC7FF0000D7 +:10034000840400000084040000008405FF00008491 +:100350000501000104090100010409010002041162 +:10036000FF00040401010000000000000000000084 +:1003700000008204FF00004402010007FF902100FA +:100380000010102100001017FD0000101021000FB8 +:10039000FFD06100001010A10000281121000028EA +:1003A0001221000044142100008210A1000301D09A +:1003B00045000C009002000000000000000000005A +:1003C00000084410FE00042810920005FF2292004D +:1003D00000103C920000100892001CFE10920004D5 +:1003E0001020FE0004103E920005FF8092000410D1 +:1003F00000920005100E92000610309200041000CA +:10040000FE0000100082000000000000000000005C +:100410000007DF8840000A24104000114210FE004F +:10042000040022820002FF3D020008010A42000986 +:10043000F9103200090920120009F93E02000909E9 +:1004400000020009090E020009F930220008050027 +:100450001400080200080000000000000000000076 +:10046000000FC3F1E0000FE3F1F8000C70C19E0033 +:100470000C30C186000C30C183000C30C183000CED +:1004800060C183000C60C183000FC0C183000FC036 +:10049000C186000C00C186000C00C198000C03F15D +:1004A000F8000C03F1E00000000000000000000074 +:1004B0000000200820000FFF09FC000020080000B9 +:1004C00000203E880003FE08500002020BFE0003DD +:1004D000FE0C4000020218400003FE2BFE00020248 +:1004E00008480003FE0888000202085000020228A3 +:1004F00030001FFF91CC0000000000000104047CCC +:100500000000880444000FFF3F4400002004440022 +:1005100000200C440000200E44001FFF9544000002 +:10052000201444000050244400005004440000887B +:100530000445000104048500060385030018010436 +:1005400000000000000000000000000000000000AB +:1005500000047E21FC0004421104001F7E090400F7 +:10056000044221FC000542110400067E1104000C27 +:100570000005FC0015FF880000040813FE00044875 +:10058000325200044F125200044812520014A812B2 +:100590005200091F97FF000000000000000000004B +:1005A0000002103DFC000210250400041025040088 +:1005B00005FFBDFC000C102520000C382520001480 +:1005C0003825FE0004543D200004542510000492F8 +:1005D0002510000511A5090006113D450004102550 +:1005E0008300041001010000000000000000000072 +:1005F000001FC8102000124A0C20001AC904200055 +:1006000017480020001FFFB8200002080850001FF4 +:10061000C8085000020808500003C80848001E140B +:1006200008880001540A880015220C8400144389AC +:1006300007000081060200000000000002FE010029 +:100640000002823FFF00048202000004FE0200005C +:100650000C1004FC00141004080005FF8C100004AA +:1006600010141000043825FF000434041000045254 +:1006700004100004918410000510045000041004BC +:10068000200000000000000000000000000000004A +:100690000002030010001FDC3EFE00089002120062 +:1006A000051004FF001FDF84120002120CFE001F61 +:1006B000D2021000021222FE000A921410000A5206 +:1006C00014100012220DFF0002220810000A42142A +:1006D0001000040223FF00000000000000000000E2 +:1006E000000F78BC20000948A45000094AA8500017 +:1006F000094AA88800094AB104001FFEAAFB0009A4 +:100700004AA42000094AA42000094AA7FE00094A79 +:10071000B420000948A924000B48A22200088AA49A +:10072000A20011192040000000000000000000009D +:10073000000020008000005001FC0000880104003F +:10074000010403080006FB0490000800C0600007D5 +:10075000DF018000045106000004511BFE0004511B +:1007600002020007D9020200045602020000100330 +:10077000FE00001002020000000000000000000067 +:10078000000208209000027F9890001F8009FF005F +:10079000022201100006218B100007628DFE000A64 +:1007A000A20910000A14111000121431FE000208F0 +:1007B00011100002141110000222111000024391C6 +:1007C000FF00028111000000000000000000000096 +:1007D00000100700000008F83FFE0004802002001F +:1007E000008020020000BE23E2001C8222220004BE +:1007F000A4222200049422220004882222000494CD +:1008000023E200052220020005422002000A003FE8 +:10081000FE0011FFA00200000000000009FF0040E0 +:100820000004203FFF00042000000000FE00000044 +:100830001C420FFC00044200000007FF800000047F +:10084000000FFC0004FF000000048100000005818F +:100850000FFC00068108040004FF08040000810F5B +:10086000FC0000000000000000000000000000008C +:100870000001000FFE00010008200003FF08200017 +:100880000201082000042208200008200BFE0010AE +:10089000200820000050082800005008240000888C +:1008A000082200008810200001041020000203A785 +:1008B000FF000C010000000000000000000000002C +:1008C0000000400080001FFF9FFC0000400410005B +:1008D0000FFF02200000003FFF000FFE0000000895 +:1008E000420FF80008420808000FFE08080008023E +:1008F0000FF8000800080800080008080008000FAA +:10090000F8001000080800000000000000000000CF +:100910000007FE0FF80004020000000402000000BF +:1009200007FE00000004023FFE00040200800007F2 +:10093000FE008000009004900008910C880006934F +:100940001086000294208200009000800000900237 +:1009500080001FFF81000000000000000000000078 +:1009600000041012020005FF9FD200050092120041 +:100970001E28A2120004443FF20004820212000664 +:10098000000212000CFE1FD20014101252000410BC +:100990001242000410134200041012820015FF825C +:1009A0000A0008000204000000000000000000002F +:1009B00000002000000000203E04001FFFA20400F1 +:1009C0001000A2FF0000012204000FFE220400001C +:1009D000403E440000402224000440222400047CC5 +:1009E00022040004402204000A403E040009402280 +:1009F000240010FF80140000000008000000000028 +:100A00000010FE08200008820BFF0004820A01008B +:100A100010FE3C5100088208880008820904000288 +:100A2000FE0C0000040019FC0009FF282000192911 +:100A30000820000929082000092908200009292B7D +:100A4000FF000BFF9000000000000000000000000D +:100A5000001F7F90F80001080888000A100888002D +:100A6000047F0107001FC13A0000054909FC00048A +:100A700049088400044908880004490848000449DA +:100A800008500004490A200004160C58001421895B +:100A9000870008C0860200000000000080040000FB +:100AA0003FF02430219027902730207027F023300A +:100AB00030703FF000008004800400003FF03830C8 +:100AC00033103F90381033902790261030903FF02D +:100AD00000008004800400003FF0387030302310A4 +:100AE000279020102010279027903FF000008004CE +:100AF000800400003FF03CF03CF020102490249053 +:100B000020103CF03CF03FF0000080048004000026 +:100B10003FF037B023103030387038703030231049 +:100B200037B03FF000008004FCF4F860E044C08C73 +:100B3000C11CC22CC44CC88CD10CA204C4048FFCB0 +:100B4000187CBCFC8000BFF81FF8B0281FF8B40860 +:100B50001FF8B1081FF8B048BFF8B288BFF880008E +:100B60008000BFF81FF8B0081808B9E819B8B838FD +:100B70001838B9B8B9F8B0F8BFF8800015543FF884 +:100B800015503FF01550387010203104138C22A8F6 +:100B900017FC2AA80000000015543FFC15543FFC28 +:100BA00015543C0414043CFC14543CFC005400A8B0 +:100BB00000000000800400003FF03CF034B02490BE +:100BC000249027902310303038703FF000008004CC +:100BD000FF7CFE7CFCECE8DCC84C984C88240820A8 +:100BE00000000000000000008004E01CF3FCE7FCB3 +:100BF000CE0C8E1C9F9C1F3C1F0C0E0C0FFC87F80C +:100C000081E4C00CE01CF87C00045808580858081F +:100C100040087FF860185FE85B685FE85B681CE885 +:100C20005FE80000800400003FF03CF03CF03CF046 +:100C3000201020103CF03CF03CF03FF0000080041D +:100C4000F87CF7BC00007FF80000BFF4AB54AB5455 +:100C5000AB54AB54AB54AB54BFF4C00CF03CCE0C13 +:100C6000BF04B30473007F007E007C007C007C60C6 +:100C7000BC64BE04CF0CF03C81DC559C29045500BB +:100C8000299055D003FCFF002E0026700250827080 +:100C9000E600EE04800C001C3FF43FE03FC4378CBC +:100CA0002318303038703CF03FF03FF000008004F3 +:100CB000F03CCE4CBC34B8141880108042306078C0 +:100CC00060F844C08004B884CFCCF03CF87CE01CD1 +:100CD000C00CCFCCCFCCCFCCCFCCCFCCCFCCCFCC0B +:100CE000C84CCFCCC00CE01CFCFCF87CE01CC00C59 +:100CF000C00CC00CC00CC00CC00C80048004FFFCF5 +:100D0000F87CFCFC800400002000100008001000AB +:100D10002700000000000000000000000000800428 +:100D2000C3FC18001800C3FCFFFCFF0C006000604F +:100D3000FF0CFFFCF0FC06000600F0FC8FC4102046 +:100D400020104CC89FE43DF03DF01DE03EF03F70A8 +:100D50009FE48CC400003030F87CF33CF4BCF6BC5B +:100D6000F4BCF6BCF4BCE49CC84CD02CD02CC84CD1 +:100D7000E79CF03C88240820383038303830383050 +:100D80003830383039303BB03FF03FF0000080045D +:100D90001FE03FF07038601860186018FFFCFCFC22 +:100DA000FCFCFCFCF87CF87CFCFC7FF81E10333863 +:100DB0002D7C25382D3825382D386D80DEC0BF407C +:100DC000BF40DEC061803F007FF0FFE0C008C01C74 +:100DD000C038C870DCE4CFCCC78CC30CC00CC00CCE +:100DE000FFFC7FF8000006000C0018F838F03030E7 +:100DF0007060707878F878003C023F0C1FF80FF0B4 +:100E000003C000007FF8FFFCC00CC30CCB4CDB6CB4 +:100E1000DB6CD86CDCECCFCCC78CC00CFFFC7FF853 +:100E2000030007800FC00CC01CE01CE03CF03CF04D +:100E30007FF87FF8FCFCFCFCFFFC7FF8114082008F +:100E400021208FE023FC82004A23E200FE209FF055 +:100E500013F880802220C0804221BFF0FBFA8880F6 +:100E600002208480022084801A208080E3FE828019 +:100E7000020101000F421FC078411040084090401D +:100E800008421FC008411040FFFD104008405FC0ED +:100E90000840800008413FE00843252010412520FC +:100EA000104125202041252040417FF07FF84880D7 +:100EB000020049000201FFF00201001002027F203F +:100EC0002200410023F07F00220008002200FF8062 +:100ED000220088802200888022008A8022008900E7 +:100EE000FFFC080023F21FC022111040FBF09040CD +:100EF00022121FC02A11104033F1104060005FC061 +:100F0000AFFC800020413FE02243252022792520AC +:100F100022412520A541252048FD7FF01083DFC018 +:100F200010825040208250402FFFDFC0608252006C +:100F300061C25200A1C25FE022A3D20022A25100EE +:100F400024925100288E5090308BD45020825830FB +:100F500020801010104047C017FC44402003F4408C +:100F600023F844406208C440A3F8E4402001544000 +:100F70002FFD44402806444023F84440204044507C +:100F800020404850214050302080400020921FC017 +:100F90003DF990402090904040901FC07BFF0000A2 +:100FA000A0013FE021F90200FD09020021097FF0C4 +:100FB00021F90500210945002909888031F91070BF +:100FC0002108202025004300202070F8380133013B +:100FD0002D0125011E0117010F010A010301FC006B +:100FE000F200EB00E400E000DB00D300CD00C7001E +:100FF000C200BC00B800B200AD00A600A2009E0076 +:101000009800940091008E008A008700840081007F +:101010007E0072006D0068003E0053656C6563746D +:10102000205469700000000000003E5B4F5B3E3EB4 +:101030006B4F6B3E1C3E7C3E1C183C7E3C181C5784 +:101040007D571C1C5E7F5E1C00183C1800FFE7C328 +:10105000E7FF0018241800FFE7DBE7FF30483A06F7 +:101060000E2629792926407F050507407F05253F63 +:101070005A3CE73C5A7F3E1C1C08081C1C3E7F144F +:10108000227F22145F5F005F5F06097F017F006699 +:1010900089956A606060606094A2FFA29408047EF3 +:1010A000040810207E201008082A1C08081C2A08A2 +:1010B000081E101010100C1E0C1E0C30383E38305C +:1010C000060E3E0E06000000000000005F0000005B +:1010D00007000700147F147F14242A7F2A12231389 +:1010E00008646236495620500008070300001C229D +:1010F00041000041221C002A1C7F1C2A08083E08CF +:1011000008008070300008080808080000606000CF +:1011100020100804023E5149453E00427F400072C3 +:10112000494949462141494D331814127F1027453A +:101130004545393C4A494931412111090736494958 +:101140004936464949291E00001400000040340079 +:10115000000008142241141414141400412214082D +:1011600002015909063E415D594E7C1211127C7FE5 +:10117000494949363E414141227F4141413E7F49F3 +:101180004949417F090909013E414151737F0808DE +:10119000087F00417F41002040413F017F08142229 +:1011A000417F404040407F021C027F7F0408107F47 +:1011B0003E4141413E7F090909063E4151215E7F82 +:1011C00009192946264949493203017F01033F4055 +:1011D00040403F1F2040201F3F4038403F631408DD +:1011E000146303047804036159494D43007F41416E +:1011F000410204081020004141417F040201020421 +:101200004040404040000307080020545478407F8D +:10121000284444383844444428384444287F3854C7 +:1012200054541800087E090218A4A49C787F08046E +:10123000047800447D40002040403D007F10284459 +:101240000000417F40007C047804787C0804047826 +:101250003844444438FC1824241818242418FC7CEE +:1012600008040408485454542404043F44243C40D3 +:1012700040207C1C2040201C3C4030403C44281036 +:1012800028444C9090907C4464544C44000836416F +:10129000000000770000004136080002010204024D +:1012A0003C2623263C1EA1A161123A4040207A38F8 +:1012B000545455592155557941215454784121555B +:1012C00054784020545579400C1E527212395555AD +:1012D0005559395454545939555454580000457C83 +:1012E000410002457D420001457C40F0292429F05F +:1012F000F0282528F07C545545002054547C547C1B +:101300000A097F4932494949323248484832324A0B +:101310004848303A4141217A3A42402078009DA025 +:10132000A07D39444444393D4040403D3C24FF24A5 +:1013300024487E4943662B2FFC2F2BFF0929F620DA +:10134000C0887E090320545479410000447D413017 +:1013500048484A32384040227A007A0A0A727D0DA3 +:1013600019317D2629292F28262929292630484D5B +:101370004020380808080808080808382F10C8ACAA +:10138000BA2F102834FA00007B000008142A142217 +:1013900022142A14089500220095AA005500AAAA32 +:1013A00055AA55AA000000FF00101010FF001414E9 +:1013B00014FF001010FF00FF1010F010F0141414B0 +:1013C000FC001414F700FF0000FF00FF1414F404E5 +:1013D000FC141417101F10101F101F1414141F00DA +:1013E000101010F0000000001F101010101F10103F +:1013F0001010F010000000FF10101010101010104E +:1014000010FF10000000FF140000FF00FF00001F8D +:1014100010170000FC04F414141710171414F4042B +:10142000F40000FF00F714141414141414F700F758 +:10143000141414171410101F101F141414F4141083 +:1014400010F010F000001F101F0000001F1400001B +:1014500000FC140000F010F01010FF10FF14141422 +:10146000FF141010101F00000000F010FFFFFFFF1E +:10147000FFF0F0F0F0F0FFFFFF0000000000FFFFC2 +:101480000F0F0F0F0F38444438447C2A2A3E147E35 +:1014900002020606027E027E026355494163384419 +:1014A000443C04407E201E2006027E020299A5E7ED +:1014B000A5991C2A492A1C4C7201724C304A4D4D88 +:1014C000303048784830BC625A463D3E4949490070 +:1014D0007E0101017E2A2A2A2A2A44445F4444408C +:1014E000514A444040444A51400000FF0103E0801B +:1014F000FF000008086B6B083612362436060F0909 +:101500000F06000018180000001010003040FF0106 +:1015100001001F01011E00191D1712003C3C3C3C3C +:10152000000000000000000000240027002A000046 +:10153000000000250028002B0000000000230026EA +:101540000029000404040404040404020202020248 +:101550000203030303030301020408102040800177 +:101560000204081020010204081020AED5F0A83FA4 +:10157000D300408D14A1C8DA1281CFD9F1DB40A489 +:10158000A6AF200021007F220007506C65617365C3 +:101590002077616974004144433A200074656D709E +:1015A0003A2000536574206D65617375726564003F +:1015B000537465703A20003030300076312E377425 +:1015C00031005600560043000FE01FC01FC03F808F +:1015D0003FF87FF07FE007C007800F000E001C007F +:1015E0001800100014A03FF07FF8E01C6E18EC1CEF +:1015F00068186018E01C6058E01C7FF83FF014A0E9 +:101600004552524F5200484F4C4400484541540007 +:10161000574F524B5900424F4F535400534C45457E +:1016200050004F46460000003BEC7BEE63E663E66D +:1016300063E663E663E663E6636662266006600669 +:101640007FFE3FFC000001020408102040800000E3 +:101650000008000201000003040700000000000071 +:10166000000007216C2B11241FBECFEFD8E0DEBF96 +:10167000CDBF12E0A0E0B1E0E4EEF1E602C00590DB +:101680000D92A237B107D9F727E0A2E7B2E001C077 +:101690001D92A53CB207E1F71BE0C2E3DBE004C00A +:1016A0002197FE010E94E82EC133D107C9F70E949D +:1016B000CB210C94E5300C9400004F925F926F9216 +:1016C0007F928F929F92AF92BF92CF92DF92EF92D2 +:1016D000FF920F931F93CF93DF9300D000D0CDB72D +:1016E000DEB74B015C0129013A016701780120E076 +:1016F00030E0A9010E94ED2B87FDA6C020E030E07C +:10170000A901C301B2010E94ED2B87FD9DC020E01D +:1017100030E0A901C801B6010E94ED2B87FD94C0FD +:1017200081E020918507309186072130310509F04D +:1017300080E08093A60780926B0790926C07A0923E +:101740006D07B0926E0740926F07509270076092DB +:10175000710770927207C0927307D0927407E0927B +:101760007507F09276076091990770919A078091BA +:101770009B0790919C070E94F22B20E030E04AE703 +:1017800054E40E94262E69837A838B839C83809203 +:10179000770790927807A0927907B0927A079B0119 +:1017A000AC01C301B2010E94532C2B013C014092B9 +:1017B0007B0750927C0760927D0770927E0729819B +:1017C0003A814B815C81C701B6010E94262E6B01D4 +:1017D0007C01C0927F07D0928007E0928107F0924F +:1017E00082078091830790918407019769F5A5018D +:1017F000940160E070E0CB010E94B92D60937707FF +:10180000709378078093790790937A07A3019201E8 +:1018100060E070E0CB010E94B92D60937B0770936C +:101820007C0780937D0790937E07A701960160E077 +:1018300070E0CB010E94B92D60937F077093800701 +:1018400080938107909382070F900F900F900F90D5 +:10185000DF91CF911F910F91FF90EF90DF90CF908C +:10186000BF90AF909F908F907F906F905F904F90C0 +:10187000089580389105B0F46034710598F4E6E479 +:10188000F6E190E1969FD001A0781124A80F67702F +:10189000E60FF11D9491AE53BD4F442321F08C917E +:1018A000982B9C93089590958C919823FACFDF9272 +:1018B000EF92FF920F931F93CF93DF937C01D22E71 +:1018C0008B01040F111DEB0177FF02C0D0E0C0E0D7 +:1018D000C8010134110514F080E490E0C817D9075D +:1018E0003CF44D2DBE01C7010E94390C2196F0CF6A +:1018F000DF91CF911F910F91FF90EF90DF900895AE +:10190000CF92DF92EF92FF920F931F93CF93DF93CB +:101910006B01122FEC017C01E40EF11CCE15DF05EA +:1019200044F4202F412FB601CE010E94570C21967E +:10193000F5CFDF91CF911F910F91FF90EF90DF9046 +:10194000CF9008952F923F924F925F926F927F9225 +:101950008F929F92AF92BF92CF92DF92EF92FF92BF +:101960000F931F93CF93DF9300D01F92CDB7DEB7B5 +:10197000C22ED12C9601280F391F37FD4FC0803859 +:1019800091050CF04BC0E9824A017B013C01402EDD +:10199000512C160127E0220E311C93E03594279438 +:1019A0009A95E1F78B01B12CA12C1B821A82EA8156 +:1019B000FB8183E0F595E7958A95E1F7EA0DFB1D3C +:1019C000E80DF91DE4918A819B818770992720E8B1 +:1019D00030E002C0359527958A95E2F7C901F0E01D +:1019E000E223F923EF2B41F04981B8018A819B81E1 +:1019F000860D971D0E94390C8A819B8101969B83DD +:101A00008A838C159D059CF2A20CB31C0F5F1F4F9F +:101A1000C8018E199F09841595053CF20F900F900F +:101A20000F90DF91CF911F910F91FF90EF90DF907A +:101A3000CF90BF90AF909F908F907F906F905F906E +:101A40004F903F902F9008950F931F93CF93DF9364 +:101A5000EC018B0140E001960E94390C40E0B80196 +:101A6000CE0101970E94390CB8016F5F7F4F40E0B3 +:101A7000CE010E94390CB8016150710940E0CE01DD +:101A80000E94390C40E0B801CE01DF91CF911F9147 +:101A90000F910C94390C80E0E2ECF2E081118FEFB1 +:101AA000002481938193819381930394D1F70895C6 +:101AB0000895AF92BF92CF92DF92EF92FF920F9371 +:101AC0001F93CF93DF936C017B018B01040F151FD4 +:101AD000EB015E01AE18BF08C017D10759F069913C +:101AE000D601ED91FC910190F081E02DC6010995A0 +:101AF000892B79F7C501DF91CF911F910F91FF904D +:101B0000EF90DF90CF90BF90AF900895FC01538D80 +:101B1000448D252F30E0842F90E0821B930B5417C7 +:101B200010F0CF96089501970895FC01918D828D54 +:101B3000981761F0A28DAE0FBF2FB11D5D968C91ED +:101B4000928D9F5F9F73928F90E008958FEF9FEF2C +:101B50000895FC01918D828D981731F0828DE80FE8 +:101B6000F11D858D90E008958FEF9FEF0895FC01A2 +:101B7000918D228D892F90E0805C9F4F821B91096F +:101B80008F739927089582EC96E00E94B70D21E0AB +:101B9000892B09F420E0822F089580E090E0892BC2 +:101BA00029F00E94C30D81110C9400000895FC01DE +:101BB000A48DA80FB92FB11DA35ABF4F2C91848DAE +:101BC00090E001968F739927848FA689B7892C930B +:101BD000A089B1898C91837080648C93938D848D5E +:101BE000981306C00288F389E02D80818F7D808361 +:101BF0000895EF92FF920F931F93CF93DF93EC0121 +:101C000081E0888F9B8D8C8D98131AC0E889F989A3 +:101C1000808185FF15C09FB7F894EE89FF896083A6 +:101C2000E889F98980818370806480839FBF81E027 +:101C300090E0DF91CF911F910F91FF90EF90089569 +:101C4000F62E0B8D10E00F5F1F4F0F731127E02E44 +:101C50008C8D8E110CC00FB607FCFACFE889F9897C +:101C6000808185FFF5CFCE010E94D70DF1CFEB8D9E +:101C7000EC0FFD2FF11DE35AFF4FF0829FB7F89450 +:101C80000B8FEA89FB8980818062CFCFCF93DF936E +:101C9000EC01888D8823B9F0AA89BB89E889F98984 +:101CA0008C9185FD03C0808186FD0DC00FB607FCB9 +:101CB000F7CF8C9185FFF2CF808185FFEDCFCE01EC +:101CC0000E94D70DE9CFDF91CF910895833081F045 +:101CD00028F4813099F08230A9F008958730A9F076 +:101CE0008830C9F08430B1F4809180008F7D03C0CA +:101CF000809180008F7780938000089584B58F77DE +:101D000084BD089584B58F7DFBCF8091B0008F771F +:101D10008093B00008958091B0008F7DF9CFCF936C +:101D2000DF93282F30E0F901E25BF94E8491F9014D +:101D3000E95AFA4ED491F901ED5BFA4EC491CC23E5 +:101D4000A1F081110E94660EEC2FF0E0EE0FFF1F54 +:101D5000E75CFA4EA591B491EC91ED2381E090E01F +:101D600009F480E0DF91CF91089580E090E0FACF10 +:101D70001F93CF93DF93282F30E0F901E25BF94EF8 +:101D80008491F901E95AFA4ED491F901ED5BFA4ECA +:101D9000C491CC23A9F0162F81110E94660EEC2F5E +:101DA000F0E0EE0FFF1FE15DFA4EA591B4918FB701 +:101DB000F894EC91111108C0D095DE23DC938FBF0D +:101DC000DF91CF911F910895DE2BF8CFCF93DF9352 +:101DD00090E0FC01E95AFA4E24918D5B9A4EFC0189 +:101DE00084918823C9F090E0880F991FFC01EB5D76 +:101DF000FA4EA591B491FC01E15DFA4EC591D491E2 +:101E000061110DC09FB7F8948C91209582238C931B +:101E10008881282328839FBFDF91CF910895623066 +:101E200051F49FB7F8943C91822F809583238C9333 +:101E3000E8812E2BEFCF8FB7F894EC912E2B2C93BB +:101E40008FBFEACFCF93DF93EC0161E089E00E947E +:101E5000E60E209731F460E089E0DF91CF910C9499 +:101E6000B80ECF3FD10511F461E0F6CFE7E5F6E11A +:101E7000E491E33029F140F4E130B1F0E230D9F0FF +:101E8000C038D1058CF7E7CFE73021F1E83051F1C8 +:101E9000E430B1F780918000806280938000D0931D +:101EA0008B00C0938A0004C084B5806884BDC7BD20 +:101EB000DF91CF91089584B5806284BDC8BDF8CF0D +:101EC00080918000806880938000D0938900C093C7 +:101ED0008800EECF8091B00080688093B000C093FE +:101EE000B300E6CF8091B00080628093B000C093D1 +:101EF000B400DECF3FB7F89480918B0290918C02B2 +:101F0000A0918D02B0918E0226B5A89B05C02F3FEF +:101F100019F00196A11DB11D3FBFBA2FA92F982F0F +:101F20008827BC01CD01620F711D811D911D42E00A +:101F3000660F771F881F991F4A95D1F708958F92D2 +:101F40009F92AF92BF92CF92DF92EF92FF924B019E +:101F50005C010E947A0F6B017C010E947A0F6C1960 +:101F60007D098E099F09683E734081059105A8F39C +:101F700021E0821A9108A108B10888EEC80E83E01A +:101F8000D81EE11CF11C81149104A104B10429F7AD +:101F9000FF90EF90DF90CF90BF90AF909F908F9089 +:101FA00008952FB7F894609187027091880280910C +:101FB000890290918A022FBF089584E98093BC0022 +:101FC0008091BC0084FDFCCF08958093BB0084E821 +:101FD0008093BC008091BC0087FFFCCF089584EA09 +:101FE0008093BC008091BC0087FFFCCF88E70C94F5 +:101FF000E50F0E94EF0F80E48093BB0084E880939C +:10200000BC00E2ECF2E09091BC0097FFFCCF919114 +:102010009093BB008093BC0096E0E23CF90799F7EF +:102020008091BC0087FFFCCF0C94DD0FCF93C82FAD +:102030000E94EF0F80E00E94E50F8C2F0E94E50FB9 +:10204000CF910C94DD0F480F592F511D4138510588 +:1020500014F040E850E0481BFB0177FD379633E071 +:10206000F595E7953A95E1F7F695FE2FEE27F7956A +:10207000E795E80FF91FEE53FD4F6770772781E072 +:1020800090E001C0880F6A95EAF7382F213041F4BB +:10209000415078F08191DF011197832B8C93F8CF19 +:1020A0008095415030F09191DF01119798239C93D6 +:1020B000F8CF0895CF92DF92EF92FF920F93CF93D4 +:1020C000DF936C017B01C42FD22F202F0E9423109D +:1020D000B7016D0F711D61507109603471052CF4E9 +:1020E000202F4C2FC6010E942310202F4D2FB70107 +:1020F000C6010E94570CC6018C0F911D202F4D2F39 +:10210000B7010197DF91CF910F91FF90EF90DF9092 +:10211000CF900C94570C2F923F924F925F926F92F8 +:102120007F928F929F92AF92BF92CF92DF92EF9267 +:10213000FF920F931F93CF93DF93CDB7DEB72A970C +:102140000FB6F894DEBF0FBECDBF9A8389836A3085 +:1021500061F5DC0152968C91B8E08B9F90011124BF +:10216000E981FA8186859785820F931F97878687F5 +:102170001586148681E090E02A960FB6F894DEBFAB +:102180000FBECDBFDF91CF911F910F91FF90EF90C8 +:10219000DF90CF90BF90AF909F908F907F906F9087 +:1021A0005F904F903F902F9008956D3019F32981E3 +:1021B0003A813A872987D9011C96AD90BC90B0E846 +:1021C000AB16B1040CF07BC0F901C684D784F0E4EF +:1021D000CF16D1040CF073C0D90152966C9052976F +:1021E00045E09501649E200D311D11241216130641 +:1021F0000CF065C0262C312C910153E0220F331FC7 +:102200005A95E1F72C0D3D1D121613060CF057C020 +:102210005196BC91BB83E985FA85F089FC83649F64 +:10222000B00111249B012B5D3F4E3A832983712C11 +:10223000E981FA818491F5E07F1201C080E04601D6 +:1022400038E0532E282F30E03E832D834C8080FFD2 +:102250004B80411004C03B818C813817E1F010E0C5 +:1022600000E00615C0F4D501A00FB11FB887AF83F9 +:10227000F12CE12CE61460F4B701680D791D442DB2 +:102280008F8198850E94390CBFEFEB1AFB0AF2CFC1 +:102290000F5F1F4FE6CF8D819E81959587955A944C +:1022A000820C931C5110CECF7394E981FA81319640 +:1022B000FA83E983A20CB31CF6E07F12B9CFA9859B +:1022C000BA8552962C915297422F50E01C968D91D0 +:1022D0009C91B6E02B9F800D911D1124E985FA8514 +:1022E000958784872389222309F444CF6AEF640306 +:1022F0009001659F300D112420583F4F2817390752 +:102300000CF038CFDF010190F081E02D0190F081D9 +:10231000E02D6AE0CD0109952DCF0F931F93CF9348 +:10232000DF938C01D0E0C0E0F801EC0FFD1F649159 +:10233000662341F08DEA97E00E948B10892B11F003 +:102340002196F2CFCE01DF91CF911F910F91089589 +:10235000682F8DEA97E00C948B1090E080E0089550 +:1023600080917A00806980937A008EE480937C006B +:1023700061E070E080E090E00E949F0F83B7817F72 +:10238000826083BF80E130E020E093B7916093BF2B +:10239000889593B79E7F93BF90917A0096FDFCCF6E +:1023A0004091780050917900240F351F815069F7D2 +:1023B00080917A008F7780937A0084E03695279514 +:1023C0008A95E1F750E040E064EB7BE281E190E048 +:1023D0000E94272DC901089588EC80937C0080918C +:1023E0007A00806880937A0065E070E080E090E099 +:1023F0000E949F0F80917A00806480937A00809180 +:102400007A0086FDFCCF60917800709179006A5463 +:10241000714090E080E00E94F22B26EF38E24CE918 +:102420005FE30E94262E089590917A009069909320 +:102430007A008E50806480937C0083B7817F8260B5 +:1024400083BF20E290E080E033B7316033BF8895EE +:1024500033B73E7F33BF30917A0036FDFCCF4091D9 +:10246000780050917900840F951F215069F72091D1 +:102470007A002F7720937A0025E0969587952A9504 +:10248000E1F708958FE00E941412A0919202B0919A +:1024900093029C010E94AA2D0E94F42B28E539E7A3 +:1024A00043E353E40E94262E0E949F2ECB01089501 +:1024B0002091A00230E0EEE1F2E090E080E0AF0198 +:1024C0004E5152404217530724F44191840F911DFD +:1024D000F6CF089580919802882369F086E00E94E3 +:1024E0008F0E892B41F06AE070E080E090E00E945E +:1024F0009F0F1092980208950F931F93CF9380918E +:102500004801882399F0CFEF0FEE11E061E085E0FC +:102510000E94B80EC8010197F1F760E085E00E94C3 +:10252000B80EC8010197F1F7C15081F7CF911F9103 +:102530000F9108952F923F924F925F926F927F92E8 +:102540008F929F92AF92BF92CF92DF92EF92FF92C3 +:102550000F931F93CF93DF9310E000E0D0E0C0E033 +:102560003EE3E32EF12C40ECC42ED12CAA24A394FC +:10257000B12C60E2662E712C70E4272E312C4C2E8B +:1025800086E00E948F0E21E0892B09F020E0209345 +:102590009802F0929F02E0929E02D0929D02C09219 +:1025A0009C02B0929B02A0929A0282E890E09093E3 +:1025B000AB028093AA028091AA029091AB029595FA +:1025C0008795582E9FE1591243C0F0929F02E092E6 +:1025D0009E02D0929D02C0929C02B0929B02A09259 +:1025E0009A02EEEBF0E0F093AB02E093AA029FE5D3 +:1025F000592E0E944B0D82E08093BF071093BA07BB +:102600000093B907E0E3F0E0F093BC07E093BB0769 +:102610008EE50E94A8111092BA071092B907709225 +:10262000BC076092BB07912C812C841438F58091F3 +:10263000C102F40196E0989FE00DF11D1124E15BC9 +:10264000FE4F80810E94A811EFEF8E1A9E0AEDCFF7 +:10265000F0E65F12CECFF0929F02E0929E02D092FF +:102660009D02C0929C02B0929B02A0929A0230926C +:10267000AB022092AA0280E2582EBBCF1093BA0779 +:102680000093B9077092BC076092BB07852D0E942A +:10269000A8110E946A120E94F90F86E00E948F0E14 +:1026A000892B09F088CF80919802811184CF809086 +:1026B000C102F6E08F9E40011124C401815B9E4F50 +:1026C0004C01FC01EC0FFD1F50820E947C126AE05D +:1026D00070E080E090E00E949F0F2196005F1F4F06 +:1026E000C530D10509F04BCFF4011582DF91CF91B0 +:1026F0001F910F91FF90EF90DF90CF90BF90AF9020 +:102700009F908F907F906F905F904F903F902F9011 +:1027100008953F924F925F926F927F928F929F9215 +:10272000AF92BF92CF92DF92EF92FF920F931F93DF +:10273000CF93DF93CDB7DEB72E970FB6F894DEBFF9 +:102740000FBECDBF8091BE02882309F4A5C11092AF +:102750005F071092600710926107109262078090E5 +:102760005F0790906007A0906107B0906207C090EB +:10277000B302D090B402E090B502F090B602A70187 +:102780009601C501B4010E94B92D2B013C0120E046 +:1027900030E0A9010E94CE2E18160CF0A0C1C30192 +:1027A000B2010E949F2E80914901882309F4B8C18B +:1027B000C0926707D0926807E0926907F0926A07B3 +:1027C000E12CF12C00EA10E420E030E040E450E499 +:1027D0006E31710540F0E12CF12C00E81FE320E0A0 +:1027E00030E040E05FE360E070E080E391E40E946D +:1027F0005D0B8091A507882309F42AC10E94D10F9F +:102800006D837E838F83988780918D0790918E074B +:10281000A0918F07B09190074D815E816F8178857F +:10282000481B590B6A0B7B0B8091990790919A0773 +:10283000A0919B07B0919C07481759076A077B072F +:1028400008F406C1E0918707F091880780819181A3 +:10285000A281B38189839A83AB83BC83E0918B0788 +:10286000F0918C079C01AD0160817181828193811F +:102870000E94B92D4B015C0120919507309196077C +:10288000409197075091980769817A818B819C814B +:102890000E94B92D6B017C0120917B0730917C0750 +:1028A00040917D0750917E07C501B4010E94532CD1 +:1028B000209191073091920740919307509194078E +:1028C0000E94BA2D2B013C01409291075092920731 +:1028D00060929307709294073090A60731101AC047 +:1028E00020917707309178074091790750917A07C6 +:1028F000C701B6010E94532C9B01AC01C301B20178 +:102900000E94B92D6093910770939207809393076B +:10291000909394074090910750909207609093078E +:10292000709094071091A1079091A2079E87A091A3 +:10293000A307AD870091A407212F392F4A2F502FCD +:10294000C301B2010E94CE2E18160CF0CCC0812F0C +:102950009E85AD85B02F8093910790939207A093A9 +:102960009307B0939407332009F4D6C020917707DA +:10297000309178074091790750917A07C501B401E9 +:102980000E94532C4B015C0120917F0730918007FE +:102990004091810750918207C701B6010E94532CD4 +:1029A0009B01AC0160919107709192078091930710 +:1029B000909194070E94B92DA50194010E94BA2D0F +:1029C0006B017C019B01AC01612F7E858D85902F71 +:1029D0000E94ED2B87FD18C010919D0790919E07D6 +:1029E0009E87A0919F07AD870091A007212F392FC7 +:1029F0004A2F502FB601C7010E94ED2B87FD04C05E +:102A00001C2DDE86ED860F2DE0918907F0918A0757 +:102A1000812F9E85AD85B02F80839183A283B38360 +:102A200089819A81AB81BC818093950790939607A9 +:102A3000A0939707B09398078D819E81AF81B88549 +:102A400080938D0790938E07A0938F07B093900784 +:102A500060916307709164078091650790916607A4 +:102A60000E94982ECB012E960FB6F894DEBF0FBEB3 +:102A7000CDBFDF91CF911F910F91FF90EF90DF902D +:102A8000CF90BF90AF909F908F907F906F905F900E +:102A90004F903F900C94220F8091BD0260914401B1 +:102AA0007091450181110EC08091B1029091B202E6 +:102AB0002091BC02BC01222329F060914301680FE0 +:102AC000792F711D90E080E00E94F22B60935F07E8 +:102AD00070936007809361079093620740CEC301B3 +:102AE000B20190585ECE80919D0790919E07A09173 +:102AF0009F07B091A00789879A87AB87BC879C0105 +:102B0000AD01C301B2010E94ED2B87FF2CCF898557 +:102B10009A85AB85BC851FCF812C912C540134CF75 +:102B200020E030E040E05FE3C701B6010E94BA2D2B +:102B30009B01AC01C501B4010E94CE2E18164CF4C5 +:102B4000109263071092640710926507109266074F +:102B50007FCF80E090E0AFE7B3E48093630790938A +:102B60006407A0936507B093660772CF4F925F9298 +:102B70006F927F928F929F92AF92BF92CF92DF928D +:102B8000EF92FF92CF93DF93809094029090950202 +:102B9000A0909602B0909702C091C102D0E0C5010A +:102BA000B4010E94982E6B017C0120E030E048E4E3 +:102BB00053E4C501B4010E94ED2B93E0CC0FDD1F5F +:102BC0009A95E1F7CE5FDE4F87FF31C028813981CA +:102BD00050E040E02551310941095109C701B601D2 +:102BE0000E94D82E28EC30E040E050E00E94272DD3 +:102BF000CA01B9016B5E7F4F8F4F9F4F0E94F42B2C +:102C00006093B3027093B4028093B5029093B602BE +:102C1000DF91CF91FF90EF90DF90CF90BF90AF907A +:102C20009F908F907F906F905F904F9008954A8013 +:102C30005B80712C612C20E030E04CE853E4C5014E +:102C4000B4010E94ED2B87FF1FC088809980B12CB2 +:102C5000A12CA7019601285C310941095109C30142 +:102C6000B201681979098A099B090E94D82E20E5CA +:102C700030E040E050E00E94272DCA01B901680D04 +:102C8000791D8A1D9B1DBACF2C813D8150E040E00B +:102C90002419350946095709C701B6016851714021 +:102CA000810991090E94D82E20E530E040E050E0F3 +:102CB0000E94272DCA01B901640D751D861D971D3F +:102CC0009DCFFC0101900020E9F73197AF01481B2F +:102CD000590BBC018DEA97E00C94590D8F929F928D +:102CE000AF92BF920F931F93CF93DF93CDB7DEB711 +:102CF000A1970FB6F894DEBF0FBECDBF19A2423028 +:102D000008F44AE08E010F5D1F4F842E912CB12CE8 +:102D1000A12CA50194010E94882DE62FB901CA01BA +:102D2000EA30F4F4E05DD801EE938D01232B242BDF +:102D3000252B79F790E080E0109719F0CD010E94E3 +:102D40006116A1960FB6F894DEBF0FBECDBFDF911E +:102D5000CF911F910F91BF90AF909F908F9008954A +:102D6000E95CE1CFCF92DF92EF92FF92CF93DF93B6 +:102D700097FF19C06B017C018DE20E94A811EC0144 +:102D800066277727CB016C197D098E099F094AE0D8 +:102D90000E946E168C0F9D1FDF91CF91FF90EF90D8 +:102DA000DF90CF9008954AE0DF91CF91FF90EF90B0 +:102DB000DF90CF900C946E164F925F926F927F923D +:102DC0008F929F92AF92BF92CF92DF92EF92FF923B +:102DD0000F931F93CF936B017C01742EAC019B0169 +:102DE0000E94D32E882399F083E692E0CF911F9121 +:102DF0000F91FF90EF90DF90CF90BF90AF909F909A +:102E00008F907F906F905F904F900C946116460169 +:102E10005701E894B7F82FEF3FEF4FE75FE7C501A1 +:102E2000B4010E94D32E81110DC02FEF3FEF4FE769 +:102E30005FE7C501B4010E94ED2B18161CF487E66C +:102E400092E0D4CF2FEF3FEF4FE75FE4C701B60129 +:102E50000E94CE2E18161CF48BE692E0C7CF2FEFFF +:102E60003FEF4FE75FECC701B6010E94ED2B87FDF6 +:102E7000F3CF20E030E0A901C701B6010E94ED2B9D +:102E800010E000E087FF08C08DE20E94A8118C01CD +:102E9000F7FAF094F7F8F094C0E060E070E080E0BA +:102EA0009FE37C1641F020E030E040E251E40E94D4 +:102EB000262ECF5FF6CFA70196010E94BA2D2B01D7 +:102EC0003C010E949F2E4B015C014AE00E946E165D +:102ED0007C01E00EF11ECC23B1F1C501B4010E94CA +:102EE000F22B9B01AC01C301B2010E94B92D4B0131 +:102EF0005C018EE20E94A811E80EF91EC15018F183 +:102F000020E030E040E251E4C501B4010E94532CBE +:102F10002B013C010E949F2E4B01B12CA12C4AE0B9 +:102F2000C501B4010E946E16E80EF91EC501B40178 +:102F30000E94F22B9B01AC01C301B2010E94B92D8A +:102F40004B015C01DBCFC701CF911F910F91FF9027 +:102F5000EF90DF90CF90BF90AF909F908F907F9039 +:102F60006F905F904F900895CF92DF92EF92FF9213 +:102F70000F931F93CF93DF93C82F81E0DC2FD827C7 +:102F8000D093BE07C093BD078093BF070C2F2EE0E0 +:102F900046E661E370E081E090E00E945A102091E3 +:102FA000BF023091C002253F81E03807B8F4A4E6A3 +:102FB000B0E00E94AA2D24EF31E040E050E00E94F2 +:102FC000272DBA01A9014E5F5F4F6F4F7F4F2EE053 +:102FD00061E370E081E090E00E94800C60915F0707 +:102FE0007091600780916107909162070E94982E0E +:102FF0009B01AC01A4E6B0E00E94462D34EFC32E45 +:10300000DD24D394E12CF12CA70196010E94272DF9 +:10301000DA01C9010296A11DB11D02970C2F2DE006 +:1030200043E062E370E00E94800C60915F07709162 +:10303000600780916107909162070E94982E9B0122 +:10304000AC01A4E6B0E00E94462DA70196010E94C3 +:10305000272DDA01C9010296A11DB11D039724E0B5 +:1030600045E06CE370E00E94800C60915F07709116 +:10307000600780916107909162070E94982E9B01E2 +:10308000AC01A4E6B0E00E94462DA70196010E9483 +:10309000272D89019A010E5F1F4F2F4F3F4F01507F +:1030A000110941E3E42EF12C4D2FB701C8010E9414 +:1030B000390C8FEFE81AF80A8DE3E816F104A1F74E +:1030C00060915F077091600780916107909162073E +:1030D0000E94982E9B01AC01A4E6B0E00E94462D10 +:1030E00024EF31E040E050E00E94272DDA01C901D1 +:1030F0000296A11DB11D0397ED2E04E025E048ECDA +:103100005FE06BE370E00E94A20C0C2F2EE047E121 +:1031100061E370E088E690E00E945A1060916307D6 +:103120007091640780916507909166070E94982EC0 +:103130009B01AC012F5F310941095109A7E1B0E0C2 +:103140000E94462DCC24C394DD24DA94ED2CFD2C72 +:10315000A70196010E94272D422F2EE061E370E027 +:1031600088E690E00E94800CC093BE07D093BD0714 +:1031700082E090E09093BA078093B90707E310E0EC +:103180001093BC070093BB0760915F0770916007C5 +:10319000809161079091620740E00E94DC1688EF01 +:1031A0000E94A81186EC9FE00E948D1189E690E0B4 +:1031B0009093BA078093B9071093BC070093BB079D +:1031C000609163077091640780916507909166072D +:1031D0000E94982E9B01AC012F5F310941095109D2 +:1031E000A4E6B0E00E94462DA70196010E94272D7B +:1031F000CA01B9010E94B21684EC9FE00E948D11B1 +:10320000D093BE07C093BD07DF91CF911F910F915F +:10321000FF90EF90DF90CF9008956F927F928F9202 +:103220009F92AF92BF92CF92DF92EF92FF920F9355 +:103230001F93CF93DF93B090C10277247394B110A2 +:1032400001C0712C809142018150990B10929F0214 +:1032500010929E02880F991F90939D0280939C026A +:1032600081E090E090939B0280939A028B2D90E0F6 +:10327000880F991F9093AB028093AA0286E00E9468 +:103280008F0E21E0892B09F020E020939802FF2483 +:10329000F39472E0972EE6E08E2EFCE0CF2ED12C38 +:1032A0000E944B0D1092BC071092BB071092BA07F8 +:1032B0001092B907C091AA02D091AB02D595C795DB +:1032C000EC2E8E011127C801870D911D77FC9A9570 +:1032D0008B199109712C97FD06C08330910514F06C +:1032E00082E090E0782EF092BE071092BD07909297 +:1032F000BF078AE190E10E948D111092BE07F09203 +:10330000BD071092BA071092B907A72C072C000C22 +:10331000BB08C501019654E0880F991F5A95E1F743 +:103320009093BC078093BB0788E190E10E948D11C8 +:103330006C2E671890E080E098012A193B0959012A +:10334000209142018C010F5F1F4F6216D0F4D09282 +:10335000BA07C092B907980144E0220F331F4A957B +:10336000E1F73093BC072093BB078A0D9B1D889E15 +:103370009001899E300D1124C901815B9E4F0E94EE +:103380006116C801639403301105D1F60E946A12D8 +:103390000E94F90F86E00E948F0E892BB9F480916C +:1033A0009802811113C00E947C12E092C102DF9149 +:1033B000CF911F910F91FF90EF90DF90CF90BF9032 +:1033C000AF909F908F907F906F900895BC2E68CFA4 +:1033D0000E94D030EF92FF920F931F93CF93DF9311 +:1033E000EC017B018A0188819981009729F02A816B +:1033F0003B812417350788F4B8016F5F7F4F0E9427 +:103400001330009791F0998388831B830A832C8162 +:103410003D81232B11F4FC0110821D830C83B70125 +:10342000888199810E94DE300CC088819981009743 +:1034300011F00E948A2F198218821D821C821B8221 +:103440001A82CE01DF91CF911F910F91FF90EF90E3 +:1034500008951F93CF93DF93EC01162F0E94112D37 +:10346000181739F0612FCE01DF91CF911F910C9485 +:10347000192DDF91CF911F910895AF92BF92CF92F6 +:10348000DF92EF92FF920F931F93CF93DF936091A0 +:10349000470182E090E00E94291A6091460183E092 +:1034A00090E00E94291A6091450184E090E00E941A +:1034B000291A6091440185E090E00E94291A6091E8 +:1034C000430186E090E00E94291A60914C0187E058 +:1034D00090E00E94291A60914B0188E090E00E94E0 +:1034E000291A60914A0189E090E00E94291A6091AE +:1034F0007F018AE090E00E94291A609149018BE0E7 +:1035000090E00E94291A609148018CE090E00E94AE +:10351000291A6091C1028DE090E00E94291A609101 +:1035200042018EE090E00E94291A6091BB028FE078 +:1035300090E00E94291A6091990280E190E00E9437 +:10354000291A6091B80281E190E00E94291A82E173 +:10355000E82EF12C10E006E0809142011817B8F532 +:10356000109F60011124D0E0C0E0FE01EC0DFD1DB4 +:10357000E15BFE4F6081C7018C0F9D1F0E94291ADD +:103580002196C630D10589F7670186E0C80ED11CA7 +:1035900088E0189FE0011124CE5FDE4F8EE0E80E38 +:1035A000F11C69812296C6010E94291A560182E007 +:1035B000A80EB11CFE0132976081C60101960E94DF +:1035C000291A6501AE14BF0461F71F5FC5CFDF91F3 +:1035D000CF911F910F91FF90EF90DF90CF90BF9010 +:1035E000AF9008958F929F92AF92BF92CF92DF9249 +:1035F000EF92FF92CF938FEF90E00E94220F8BEA21 +:1036000094E00197F1F78EE00E9414127C018AE0A9 +:103610000E948F0E90917202981729F091E090937A +:10362000B70280937202809101019FEF980F9093EF +:103630000101811106C00E9442129093BA02809348 +:10364000B90260916307709164078091650790915A +:1036500066070E94982ECB010E94220F8090940250 +:1036600090909502A0909602B0909702B70190E0DA +:1036700080E00E94F22BA50194010E94B92D2DEC4F +:103680003CEC4CE45DE30E94532CA50194010E94A4 +:10369000BA2D609394027093950280939602909352 +:1036A00097020E94B6156091BF027091C00290E02F +:1036B00080E00E94F22B6B017C0120915F0730912A +:1036C000600740916107509162070E94ED2B8111C4 +:1036D000B5C02091B3023091B4024091B50250912F +:1036E000B602C701B6010E94B92D6B017C0120E032 +:1036F00030E0A9010E94CE2E18160CF095C020E0F3 +:1037000030E040EA50E4C701B6010E94CE2E181600 +:103710000CF494C06091B1027091B20290E080E02C +:103720000E94F22B2091B3023091B4024091B50275 +:103730005091B6020E94B92D6B017C0120E030E06F +:10374000A9010E94CE2E18160CF087C0C701B60141 +:103750000E949F2E6530710508F083C080914E0154 +:10376000811105C080914D0181110E947C1281E080 +:1037700080934E0110924D018091BF029091C00242 +:10378000853F21E0920710F0109200012091000186 +:10379000211140C0843F9140E8F58FEF90E00E94F6 +:1037A000220F0E947C12C1E0C09300010E940D19FB +:1037B0000E943D1AC093B7028EE00E941412BC0111 +:1037C00090E080E00E94F22B609394027093950247 +:1037D00080939602909397021092A9028091B10271 +:1037E0009091B20224E630E030939F0220939E0233 +:1037F00020E233E030939D0220939C022AE030E0E7 +:1038000030939B0220939A02880F991F9093AB02EA +:103810008093AA02CF91FF90EF90DF90CF90BF905E +:10382000AF909F908F90089520E030E040EA50ECF8 +:10383000C701B6010E94ED2B87FF6CCF6091B302E8 +:103840007091B4028091B5029091B6020E949F2EB1 +:103850007093C0026093BF025DCFC701B60190585C +:1038600077CF10924E0188CF0C94112D2F923F925A +:103870004F925F926F927F928F929F92AF92BF9280 +:10388000CF92DF92EF92FF920F931F93CF93DF932C +:10389000CDB7DEB768970FB6F894DEBF0FBECDBFC9 +:1038A00026E02093BF0721E02093BE071092BD07BA +:1038B0000091AB071091AC076091A7077091A80722 +:1038C00030E8232E32E0332EF10130E020E02017E3 +:1038D000310730F4DB01A20FB31F6115710521F42C +:1038E00010927302A3E7B2E04C9150E041935193E0 +:1038F0002F5F3F4F2330310551F71C8A1B8A1E8AE8 +:103900001D8A188E1F8A4AE08E010F5F1F4FB80173 +:103910000E94A32BF80101900020E9F73197AF0135 +:10392000401B510BB801CE0143960E94EA198091C9 +:10393000A7079091A807009709F4E8C06B897C89D4 +:103940006115710509F4E0C04091A9075091AA07DB +:103950002F89388D4217530708F4D6C00E94DE30F5 +:103960008F89988D9093AC078093AB07188E1F8A30 +:103970008B899C89009711F00E948A2F94E7E92E89 +:1039800092E0F92E24E0A22EB12CD12CC12C8091F2 +:10399000AB079091AC07C816D90638F4E091A70799 +:1039A000F091A807309709F0C8C010927302E3E7BE +:1039B000F2E0808190E0F10120813181821B930B44 +:1039C000F2E3F89FB001F99F700D1124072E000C4F +:1039D000880B990B0E94F42BF701208131814281E1 +:1039E00053810E94BA2D2B013C0120E030E0A90157 +:1039F0000E94ED2B8111A4C0F701408251826282A6 +:103A0000738201E022E346E270E060E0C5010497C2 +:103A10000E94800C8EEC882E99249A940FEF1FEF51 +:103A2000F701208131814281538160E070E080E8BC +:103A300090E40E94B92D2B013C01B401092C000C2B +:103A4000880B990B0E94F42B9B01AC01C301B201BE +:103A50000E94BA2D0E94982EB092BA07A092B90780 +:103A60007093BC076093BB07F10160817181600FA7 +:103A7000711F60537109072E000C880B990B0E946F +:103A8000B2160F5F1F4FF2E38F0E911C023011052B +:103A900039F62FEFC21AD20A84E0E80EF11CECE2EC +:103AA000AE0EB11CF2E02F0E311C23E0C216D10481 +:103AB00009F06DCF00E022E040E870E060E090E0C7 +:103AC00080E00E94800C2DE040E863E370E090E02D +:103AD00080E00E94800C68960FB6F894DEBF0FBE9F +:103AE000CDBFDF91CF911F910F91FF90EF90DF90AD +:103AF000CF90BF90AF909F908F907F906F905F908E +:103B00004F903F902F9008950E948A2F8B899C8917 +:103B10009093A8078093A7078D899E899093AA0701 +:103B20008093A9078F89988D9093AC078093AB07FA +:103B30001C8A1B8A1E8A1D8A19CFEC0DFD1D39CFE8 +:103B4000C301B20190582DEC3CEC4CE45FE30E94C1 +:103B5000532CA30192010E94BA2DF7016083718357 +:103B6000828393834ECF86E00E948F0E21E0892BC3 +:103B700009F020E0209398020E944B0D1092BC07A0 +:103B80001092BB071092BA071092B9078091AA024F +:103B90009091AB02959587950E94361C0E94F90F73 +:103BA0000E946A1286E00E948F0E892B29F780916D +:103BB00098028111E1CF0E947C128091A707909119 +:103BC000A807009721F00E94752BCB01089560E0B3 +:103BD00070E0CB01FACF2F923F924F925F926F929B +:103BE0007F928F929F92AF92BF92CF92DF92EF928D +:103BF000FF920F931F93CF93DF93CDB7DEB76397F9 +:103C00000FB6F894DEBF0FBECDBFB82EE091A00274 +:103C1000F0E0E25EFD4F80818150990B10929F028F +:103C200010929E02880F991F90939D0280939C0290 +:103C300081E090E090939B0280939A028B2D90E01C +:103C4000880F991F9093AB028093AA0286E00E948E +:103C50008F0E21E0892B09F020E02093980210922A +:103C6000BE0781E08093BD078091AA029091AB02CC +:103C70009C01359527953D872C871C857901FF246C +:103C800097012B19310948E3429FC001439F900DD2 +:103C90001124C80ED91EC114D10409F16627772753 +:103CA0006C197D09072E000C880B990B0E94F42BD0 +:103CB00020E030E040E05FE30E94532C4B015C01C8 +:103CC000B601DD0C880B990B0E94F42B9B01AC0113 +:103CD000C501B4010E94BA2D0E94982E6B010E946A +:103CE0004B0D1092BC071092BB071092BA071092AE +:103CF000B907370182E0681A7108560198E4A91AD9 +:103D0000B108F7013396FB8BEA8B77FC92C0E09108 +:103D1000A002F0E0E25EFD4F80818615170409F0F5 +:103D20000CF487C001E020E340E370E060E0C501EF +:103D30000E94800C95012D5F3F4F398B288B00E04E +:103D40002AE24AE263E070E0888999890E94800C47 +:103D500070E060E0C5010E94240D70E060E0450164 +:103D60003FE2830E911CC4010E94240D6FE270E0BB +:103D7000C5010E94240D6FE270E0C4010E94240D71 +:103D80000E945812E82FC50141968E38910508F01F +:103D900050C0E60DF72DF11DEE0FFF1FEE52FE4F46 +:103DA000808191819F878E8753E0452E512C312C45 +:103DB000212C912C812CF40133E0F595E7953A956F +:103DC000E1F7E20DF31D2E853F85E20FF31FE4912D +:103DD000C4018770992720E830E002C03595279507 +:103DE0008A95E2F7C901F0E0E223F923EF2B79F09D +:103DF000C401880F991F880D991D01E023E043E05D +:103E0000B201E889F9898E0F9F1F0E94800CFFEF95 +:103E10008F1A9F0A2EE08216910469F632E0230E73 +:103E2000311C43E0440E511C8DE24816510409F048 +:103E3000C0CF9FEF691A790AE8E3AE0EB11C2A8958 +:103E40003B892615370509F060CF8091BB028111AF +:103E500040C00E945812F701E80FF11DEE0FFF1F3E +:103E6000EA57FE4F40815181EE24E39400E124E2C1 +:103E700060E370E080E390E00E94A20C0E94F90FE2 +:103E80000E946A1286E00E948F0E892B01F58091B4 +:103E9000980281111CC00E947C12812F63960FB67C +:103EA000F894DEBF0FBECDBFDF91CF911F910F9170 +:103EB000FF90EF90DF90CF90BF90AF909F908F904A +:103EC0007F906F905F904F903F902F900895BC84AB +:103ED000CBCE80E390E09093BA078093B907E1E3FB +:103EE000F0E0F093BC07E093BB0781E08093BF074D +:103EF0000E945812FC858F0FE82FF0E0EE0FFF1F95 +:103F0000E453F04F65917491CE0101960E949C2B71 +:103F1000CE0101960E946116B1CF1F920F920FB68B +:103F20000F9211242F933F934F935F936F937F933F +:103F30008F939F93AF93BF93EF93FF9382EC96E0A1 +:103F40000E94D70DFF91EF91BF91AF919F918F91FB +:103F50007F916F915F914F913F912F910F900FBE85 +:103F60000F901F9018951F920F920FB60F92112469 +:103F70002F938F939F93EF93FF93E091D206F0914D +:103F8000D3068081E091D806F091D90682FD1BC04E +:103F900090818091DB068F5F8F732091DC06821702 +:103FA00041F0E091DB06F0E0EE53F94F958F8093FE +:103FB000DB06FF91EF919F918F912F910F900FBE94 +:103FC0000F901F9018958081F4CF1F920F920FB61B +:103FD0000F9211242F933F938F939F93AF93BF938F +:103FE0008091870290918802A0918902B0918A0203 +:103FF0003091860223E0230F2D3758F50196A11D3D +:10400000B11D209386028093870290938802A0932B +:104010008902B0938A0280918B0290918C02A091C8 +:104020008D02B0918E020196A11DB11D80938B026D +:1040300090938C02A0938D02B0938E02BF91AF91AA +:104040009F918F913F912F910F900FBE0F901F90D6 +:10405000189526E8230F0296A11DB11DD2CF1F92FD +:104060000F920FB60F9211242F933F934F935F93AC +:104070006F937F938F939F93EF93FF9383B181709F +:1040800029B190919102981709F49DC030E0220F58 +:10409000232F221F330B922F809391024091900285 +:1040A000241709F490C02093900220919A02309135 +:1040B0009B02981719F03195219531094091AA0278 +:1040C0005091AB0260919E0270919F02240F351FA8 +:1040D000261737070CF48BC020919A0230919B026F +:1040E000981719F03195219531094091AA02509104 +:1040F000AB0260919C0270919D02240F351F6217E4 +:1041000073070CF46FC040919A0250919B0298176C +:1041100019F05195419551092091AA023091AB02B5 +:10412000240F351F3093AB022093AA0241E098136D +:1041300040E020918F02421709F440C020919A027A +:1041400030919B02981719F03195219531096091B2 +:10415000AA027091AB02E0919E02F0919F02260F9D +:10416000371F2E173F070CF44CC020919A02309154 +:104170009B02981719F03195219531096091AA0297 +:104180007091AB02E0919C02F0919D02260F371FC7 +:10419000E217F3078CF120919A0230919B02981755 +:1041A00019F03195219531098091AA029091AB02C5 +:1041B000820F931F9093AB028093AA0240938F02C9 +:1041C00081E08093B702FF91EF919F918F917F9152 +:1041D0006F915F914F913F912F910F900FBE0F9074 +:1041E0001F90189520919C0230919D029BCF2091A9 +:1041F0009E0230919F0296CF80919C0290919D02E9 +:10420000D9CF80919E0290919F02D4CF18950F93A1 +:104210001F93CF93DF93E2ECF6E01382128288EED5 +:1042200093E0A0E0B0E084839583A683B78389E41C +:1042300092E09183808385EC90E09587848784EC7D +:1042400090E09787868780EC90E0918B808B81EC63 +:1042500090E0938B828B82EC90E0958B848B86EC44 +:1042600090E0978B868B118E128E138E148EEDEA52 +:10427000F7E0138212821682178280E1808715820E +:10428000148212868BE592E09183808315861486D2 +:104290001786168611E0108B118A128B138AE7EAB3 +:1042A000F7E011821082138212821582148250E08C +:1042B00040E061E772E0CF010E94EA19CBE6D7E067 +:1042C00083E697E09F8F8E8F87E697E09D8F8C8F98 +:1042D0008FE597E099A388A31AAE1AAA1BAA1CAA75 +:1042E0001DAA80E090E0AFE7B3E48EAB9FABA8AF30 +:1042F000B9AF84E690E0A0E0B0E08EA79FA7A8AB9E +:10430000B9AB81E090E0998F888F9B8F8A8F1BAF2C +:1043100080E090E0A0E3B1E488839983AA83BB8323 +:1043200080E090E0A0E0BFE38C839D83AE83BF83F9 +:1043300080E090E0A0E8BFE388879987AA87BB87E1 +:1043400080E090E0A0E3B1EC8C879D87AE87BF87CB +:104350008DEC9CECACE4BDEB888B998BAA8BBB8B72 +:1043600080E090E0A0E2B1EC8C8B9D8BAE8BBF8B9C +:104370000E94D10F0EA51FA528A939A9601B710B9A +:10438000820B930B6AA37BA38CA39DA3DF91CF9198 +:104390001F910F910895CF93DF93CDB7DEB72B9781 +:1043A0000FB6F894DEBF0FBECDBF789484B582609F +:1043B00084BD84B5816084BD85B5826085BD85B5C9 +:1043C000816085BD80916E00816080936E00109247 +:1043D00081008091810082608093810080918100C2 +:1043E0008160809381008091800081608093800053 +:1043F0008091B10084608093B1008091B0008160B1 +:104400008093B00080917A00846080937A008091DC +:104410007A00826080937A0080917A008160809334 +:104420007A0080917A00806880937A001092C100AF +:104430001092B90088E48093B8000E94EF0F80E0EA +:104440000E94E50F0BE615E18AE8E82E85E1F82EDB +:10445000F80184910E94E50F0F5F1F4FE016F106EF +:10446000B9F70E94DD0F11E01093B8000E94F90F18 +:1044700081E28093B50760E08EE00E94E60E60E086 +:104480008FE00E94E60E61E085E00E94E60E61E0AA +:1044900089E00E94E60E62E087E00E94E60E62E09C +:1044A00088E00E94E60E62E086E00E94E60E62E08E +:1044B0008AE00E94E60E8FEF90E00E94220F60E0FB +:1044C00085E00E94B80E80917A00876080937A0020 +:1044D00080917A00886080937A00789410936B00C2 +:1044E000109368001BBB90E080E00E94341C182FE2 +:1044F00081E090E00E94341C912F8F3F984009F09A +:10450000BBC082E090E00E94341C182F83E090E052 +:104510000E94341C912F909347018093460184E0C0 +:1045200090E00E94341C182F85E090E00E94341C1B +:10453000912F909345018093440186E090E00E9482 +:10454000341C8093430187E090E00E94341C8093E8 +:104550004C0188E090E00E94341C80934B0189E07C +:1045600090E00E94341C80934A018AE090E00E940F +:10457000341C80937F018BE090E00E94341C91E01A +:10458000811101C090E0909349018CE090E00E947D +:10459000341C91E0811101C090E0909348018DE0BE +:1045A00090E00E94341C8093C1028EE090E00E9453 +:1045B000341C282E809342018FE090E00E94341C2E +:1045C0008093BB0280E190E00E94341C91E0811155 +:1045D00001C090E09093990281E190E00E94341C28 +:1045E0008093B802B2E08B2EB1E09B2E1FE4A12E87 +:1045F00011E0B12E02E1E02EF12C312C231409F44C +:1046000047C010E000E0C701800F911F0E94341CDA +:10461000F501E00FF11F80830F5F1F4F063011057A +:1046200091F7670126E0C20ED11C3EE0E30EF11CBB +:104630003401C6010E94341C082F10E0102F0027FF +:10464000F301118300832601F2E04F0E511CC601D5 +:1046500001960E94341C082BF301019311933F0132 +:1046600062014E145F0429F73394F8E08F0E911C19 +:1046700026E0A20EB11CC2CF68E090E080E00E946C +:10468000291A6FEF81E090E00E94291A0E943D1ADA +:104690001091990280EC111101C088EC0E94161053 +:1046A00080EA111101C081EA0E9416100E94B01127 +:1046B00090939302809392020E9442129093BA02C6 +:1046C0008093B90200914601109147011093B20204 +:1046D0000093B1028EE00E941412BC0190E080E0D1 +:1046E0000E94F22B6093940270939502809396023D +:1046F000909397020E94EC110E94B61520E030E0E2 +:1047000040EA51E46091B3027091B4028091B50225 +:104710009091B6020E94BA2D6B017C01B80190E025 +:1047200080E00E94F22B9B01AC01C701B6010E9400 +:10473000ED2B87FF04C090E080E00E94220F1092D2 +:104740009D0710929E0710929F071092A007412C80 +:10475000512CFFE76F2EF3E47F2E4092A107509279 +:10476000A2076092A3077092A407A0908907B09057 +:104770008A078091A507F501C080D180E280F3808F +:10478000882309F47DC7A3019201C701B6010E94E5 +:10479000CE2E181634F5F501408251826282738262 +:1047A0008090910790909207A0909307B090940703 +:1047B000C090A107D090A207E090A307F090A407B3 +:1047C000A7019601C501B4010E94CE2E1816C4F4AB +:1047D000C0929107D0929207E0929307F0929407CB +:1047E0001FC020E030E0A901C701B6010E94ED2BF7 +:1047F00087FFD6CFF5011082118212821382D0CFAB +:10480000C0909D07D0909E07E0909F07F090A00772 +:10481000A7019601C501B4010E94ED2B87FDD8CFF9 +:1048200081E08093A50783B181708093910289B163 +:1048300090E0880F892F881F990B80939002209118 +:1048400091029091900281E0291380E080938F0281 +:1048500084E690E090939F0280939E0280E293E032 +:1048600090939D0280939C028AE090E090939B023B +:1048700080939A02000F111F1093AB020093AA02BB +:104880000E94D10F6093AD027093AE028093AF028D +:104890009093B0020E947C120E947C122090AA0287 +:1048A0003090AB029101359527953A87298730934F +:1048B000B2022093B10286E00E948F0E8B87811195 +:1048C0009EC08091A902882309F499C00E947C129D +:1048D0000E94D10F6B017C01C092A502D092A6026A +:1048E000E092A702F092A80286E00E948F0E892B28 +:1048F00059F40E94D10F6C197D098E099F09643FFC +:1049000071408105910580F30E94D10F6C197D09DA +:104910008E099F09643F71408105910508F448C4E0 +:104920008FEF90E00E94220F0E947C12512C5AE0DF +:10493000652E712C1092A002852D0E94EB1D582E21 +:10494000F7E0F81708F438C0E82FF0E0E655FB4D23 +:104950000C94E82EC4247627F02758286628A0282F +:10496000B828AE2820E030E0A901C701B6010E94B6 +:10497000ED2B87FF55CF109291071092920710925E +:104980009307109294074CCF4EE1642E712C81E076 +:104990008093A002852D0E94EB1D582E22E08217E5 +:1049A00009F43EC2281708F4E9C0882309F411C1AC +:1049B00031E0831709F410C10E943D1A81E0809311 +:1049C000B70229853A853093B2022093B10284E67A +:1049D00090E090939F0280939E0280E293E09093F8 +:1049E0009D0280939C028AE090E090939B028093CA +:1049F0009A02C1018E7F9093AB028093AA023B85FD +:104A00003093A9028091BC02882309F110914A01D8 +:104A10001123E9F00E94D10FC090A102D090A20210 +:104A2000E090A302F090A4026C197D098E099F0901 +:104A300028EE33E040E050E00E94882D211738F046 +:104A40001092BC020E947C1281E080934D01809103 +:104A5000B7028823E9F18091BD02882349F120E063 +:104A600030E040EA51E46091B3027091B402809169 +:104A7000B5029091B6020E94BA2D6B017C01609143 +:104A8000B1027091B20290E080E00E94F22B9B0193 +:104A9000AC01C701B6010E94ED2B87FF04C090E076 +:104AA00080E00E94220F0E947C1281E080934D01E1 +:104AB0001092B7021092BD021092BE020E94D10F56 +:104AC0006093AD027093AE028093AF029093B002F8 +:104AD0000E94D10F0091AD021091AE022091AF0261 +:104AE0003091B002601B710B820B930B20E63AEE03 +:104AF00040E050E00E94882D122F2093AC0280915C +:104B0000BD0281110BC080914C01882339F0281718 +:104B100028F081E08093BD020E947C128091BE0249 +:104B200081110BC080914B01882339F0181728F0B0 +:104B300081E08093BE020E947C120E94F21A0E94C1 +:104B400089130E94D10F8091B607962F981B892F49 +:104B50009091B707992309F441C38093B807109245 +:104B6000B70780E090E0892B09F498CE0E94C30D2E +:104B7000882309F493CE0E94000090CE83E058165B +:104B800009F451C194E0591217CF80914201883045 +:104B900008F0FDCE91E0980F909342018093C102FE +:104BA0000E949A12E091C10228E0E29FF0011124D4 +:104BB000EE5FFE4F88ED90E09183808324E331E047 +:104BC0003383228386E891E09583848377826682AB +:104BD000DECE0E940D19DBCE8E010F5F1F4F812CA0 +:104BE000912C5401839498EEE92E93E0F92ECC2475 +:104BF000C394D12C32E0432EE091C10224E0E29F25 +:104C0000F0011124C4010197E80FF91FEE0FFF1FF7 +:104C1000EE5FFE4F808191819093B2028093B1024A +:104C2000E8ECF0E0F0939F02E0939E02F0929D0288 +:104C3000E0929C02D0929B02C0929A02880F991F28 +:104C40009093AB028093AA02F1E0F0934D0186E0CD +:104C50000E948F0E21E0892B09F020E0209398021A +:104C60000E944B0D1092BC071092BB071092BA071E +:104C70001092B9074092BF070E94F21A0E9489134E +:104C80001092BA071092B9071092BC071092BB0796 +:104C900080EB95E10E948D11C501B4010E94B2160E +:104CA0008FE692E00E94611680914E011092BA0741 +:104CB0001092B907882309F48BC020E130E03093CB +:104CC000BC072093BB0783EA95E10E948D111092E7 +:104CD000BA071092B90780E290E09093BC078093E6 +:104CE000BB078CE995E10E948D116091AA02709139 +:104CF000AB0275956795072E000C880B990B0E94E7 +:104D0000B2160E946A120E94F90F86E00E948F0E6E +:104D1000892B09F0A5CF809198028111A1CF8091B4 +:104D2000AA029091AB0295958795F8018193919392 +:104D30008F010E947C126AE070E080E090E00E94A7 +:104D40009F0FFFEF8F1A9F0AAF0ABF0A24E0821657 +:104D50009104A104B10409F04FCF8FEF90E00E94BD +:104D6000220F8BEA94E00197F1F70E94EC110E9468 +:104D70009F2E4B0178876F83C980DA800B811C815D +:104D8000C6014E968017910708F001CEED80FE8097 +:104D9000C8014E968E159F0508F0F9CD87E08093E7 +:104DA000A00280E00E94EB1D882309F4F0CDE09181 +:104DB000C10238E0E39FF0011124EE5FFE4FD18283 +:104DC000C08213830283F582E48297828682DFCDDC +:104DD000E0E1F0E0F093BC07E093BB0786E995E1E2 +:104DE0000E948D11609194027091950280919602BB +:104DF000909197020E949F2E90E080E04AE00E94EE +:104E00006E161092BA071092B90720E230E0309384 +:104E1000BC072093BB078AE895E10E948D1171CFF2 +:104E20000E949A12B4CD87E08093A0028091420143 +:104E3000813009F4ACCD80E00E94EB1D882309F499 +:104E4000A6CD1091C10200914201802F8150990B93 +:104E5000BC011817190639F411501093C102015002 +:104E60000093420194CD812F90E086179707BCF7FD +:104E7000E6E01E9FD001112450E040E09C012F5F2E +:104E80003F4FFA01EA0FFB1FE15BFE4FF680F08215 +:104E90004F5F5F4F46305105A1F7B3E0220F331F3C +:104EA000BA95E1F7F901EE5FFE4F2081318143E0D1 +:104EB000880F991F4A95E1F7DC01AE5FBE4F11964E +:104EC0003C932E938281938113969C938E93129799 +:104ED0008481958115969C938E93149786819781F2 +:104EE00017969C938E9316971F5FBDCF82E0809399 +:104EF000A002412C70E9C72EDD24D394E4E6AE2E47 +:104F0000B12CF0E28F2EF3E09F2EA4E1EA2EF12CDB +:104F100008EC10E0842D0E94EB1D482E91E08917CB +:104F200031F1891738F0E2E08E1709F43FC00E9492 +:104F30003D1A00CD8091460190914701B0929F02A9 +:104F4000A0929E0290929D0280929C0270929B027F +:104F500060929A02880F991F9093AB028093AA02E5 +:104F60000E94B31D9093470180934601D3CF809157 +:104F700044019091450128E230E030939F02209354 +:104F80009E02D0929D02C0929C0270929B026092FF +:104F90009A02880F991F9093AB028093AA020E94F5 +:104FA000B31D9093450180934401B4CF8091430198 +:104FB00090E0F0929F02E0929E0210939D02009377 +:104FC0009C0270929B0260929A02880F991F9093A4 +:104FD000AB028093AA020E94B31D809343019ACF33 +:104FE00083E08093A002F12C01E010E08F2D0E945D +:104FF000EB1DF82E31E08317E9F18317F8F082E01A +:10500000F81295CF80914A0190E010929F02109281 +:105010009E0228E631E030939D0220939C0270921C +:105020009B0260929A02880F991F9093AB02809323 +:10503000AA020E94B31D80934A01D8CF80914C01EF +:1050400090E010929F0210929E02ECE3F0E0F09349 +:105050009D02E0939C0210939B0200939A02880F9A +:10506000991F9093AB028093AA020E94B31D809374 +:105070004C01BCCF80914B0190E010929F021092A6 +:105080009E0228E730E030939D0220939C02E5E0E9 +:10509000F0E0F0939B02E0939A02880F991F90939F +:1050A000AB028093AA020E94B31D80934B019ECF56 +:1050B00084E08093A002809149010E94EB1D91E061 +:1050C000811101C090E09093490134CC10E0EAE0F6 +:1050D000EE2EF5E0DF2EA9E0CA2EE092A002812F8D +:1050E0000E94EB1D182F882321F08130E1F000E0B1 +:1050F00009C0D092A00280917F010E94EB1D809395 +:105100007F0101E0F090990280ECF11001C088EC81 +:105110000E94161080EAF11001C081EA0E94161068 +:105120000111DBCF04CFC092A002809199020E94AE +:10513000EB1D91E0811101C090E090939902E1CFC5 +:1051400086E08093A002809148010E94EB1D91E0CF +:10515000811101C090E090934801ECCB88E08093EE +:10516000A0028091BB020E94EB1D8093BB02E2CBA8 +:105170008091B80290E010929F0210929E02E4EF9C +:10518000F1E0F0939D02E0939C0221E030E0309347 +:105190009B0220939A02880F991F9093AB028093F1 +:1051A000AA020E94B31D8093B8020E947C12C2CB57 +:1051B0008091BC0291E089278093BC02882351F042 +:1051C0000E94D10F6093A1027093A2028093A30268 +:1051D0009093A40281E08093B70211CC9091B5071F +:1051E000891748F48F5F891708F0BBCC81E083BF33 +:1051F000889513BEB6CC11E01093B7076093B6073D +:105200008091B1079091B20701969093B207809375 +:10521000B10780917F01882309F4C4C10E944B0D1E +:105220001092BC071092BB071092BA071092B907F0 +:1052300001E020E440E870E060E090E080E00E945F +:10524000800C1093BF071093BE071092BD07E12C8E +:1052500000E120E146E256E170E060E090E080E0AD +:105260000E94A20C83E190E09093BA078093B90763 +:1052700084E090E09093BC078093BB078091C102CB +:10528000E6E08E9FC0011124815B9E4F0E94611653 +:105290008091BF029091C002853F914008F02DC1DE +:1052A0008091BE0281112BC18091BD02811129C163 +:1052B0008091BC02811127C180914E01811125C1CD +:1052C00020E030E044E353E46091630770916407A9 +:1052D00080916507909166070E94ED2B87FF17C1AB +:1052E00085E025E330E03093BA072093B90721E049 +:1052F00030E03093BC072093BB0792E09093BF0748 +:10530000C82ED12C9091BB02CC0CDD1C911101C197 +:10531000F601E95CFD4F40815181E12C0EE02CE16A +:1053200061E070E080E590E00E94A20CF601E75D8C +:10533000FD4F40815181E12C0EE02EE061E070E0F4 +:1053400081E790E00E94A20C81E08093BF070E9459 +:10535000EC1120E030E040EA52E40E94CE2E181614 +:105360000CF0FAC00E94D10F52E0660F771F881F21 +:10537000991F5A95D1F728EE33E040E050E00E94A3 +:10538000882D20FFE9C00E947C126091B9027091C3 +:10539000BA0290E080E00E94F22B20E030E048EC7E +:1053A00052E40E94262E6B017C016091B80270E0ED +:1053B00090E080E00E94F42B9B01AC01C701B60194 +:1053C0000E94ED2B87FDD4C0E12C0EE02EE048ECCE +:1053D00055E162E270E082E090E00E94A20C03E1FD +:1053E00010E01093BA070093B90720E130E0309342 +:1053F000BC072093BB070E94EC1141E00E94DC1621 +:1054000088EF0E94A81186EC95E10E948D111093FF +:10541000BA070093B90788E190E09093BC078093A6 +:10542000BB070E94B011BC0190E080E00E94F22B0B +:1054300020E030E04AE754E40E94262E42E00E9439 +:10544000DC1684EC95E10E948D111093BA0700934D +:10545000B90780E290E09093BC078093BB0760910E +:10546000B9027091BA0290E080E00E94F22B20E035 +:1054700030E04AE754E40E94262E41E00E94DC1608 +:1054800082EC95E10E948D111093BA070093B90741 +:1054900088E290E09093BC078093BB078BEB95E18B +:1054A0000E948D1189E390E09093BA078093B90729 +:1054B00082E190E09093BC078093BB0784E08093E7 +:1054C000BF076091BF027091C002653F91E079070C +:1054D00008F462C087EB95E10E948D1100E020E2A4 +:1054E00048E460E170E087E390E00E945A1080E0B9 +:1054F0000E94B4170E94F90F34CB80E0F2CE81E015 +:10550000F0CE82E0EECE83E0ECCE84E0EACE86E020 +:10551000E8CE8330C1F038F4813069F0823081F018 +:1055200080E096E10AC08530A1F080F08630C1F7B6 +:1055300086E096E102C082E296E10E948D11F6CEED +:105540008CE196E1FACF86E196E1F7CF80E196E132 +:10555000F4CF8BE096E1F1CFE12C0EE02EE044EEAB +:1055600055E162E170E082E090E00E94A20C0DCF74 +:105570000E94D10F42E0660F771F881F991F4A953E +:10558000D1F728EE33E040E050E00E94882D20FF64 +:105590001BCF0E947C1223CF90E080E04AE00E9463 +:1055A0006E169CCF0E944B0D1092BC071092BB0749 +:1055B0001092BA071092B9070E94EC1120E030E077 +:1055C00040EA52E40E94CE2E181694F40E94D10FA5 +:1055D00032E0660F771F881F991F3A95D1F728EEA2 +:1055E00033E040E050E00E94882D20FD0E947C12B4 +:1055F0006091B9027091BA0290E080E00E94F22BB3 +:1056000020E030E048EC52E40E94262E6B017C0141 +:105610006091B80270E090E080E00E94F42B9B0162 +:10562000AC01C701B6010E94ED2B87FF12C00E949A +:10563000D10F22E0660F771F881F991F2A95D1F797 +:1056400028EE33E040E050E00E94882D20FD0E94CB +:105650007C128091BF029091C002853FE1E09E07DD +:1056600010F087EE93E00E94361C00E023E040E853 +:1056700060E370E090E080E00E94800C81E038CF31 +:10568000C0929107D0929207E0929307F09294070C +:10569000E0918707F091880780819181A281B38191 +:1056A0008093950790939607A0939707B0939807D8 +:1056B00020E030E04FE753E4C701B6010E94CE2E50 +:1056C00018160CF04FC940929107509292076092C1 +:1056D000930770929407A4C88091A7079091A80798 +:1056E000009711F00C948A2F08951F93FC019927BD +:1056F0008827BC01E89411911032E9F3193010F0B9 +:105700001E30C8F31B3251F01D3249F4689406C0B4 +:105710000E94AE2B610F711D811D911D11911053BF +:105720001A30B0F33EF490958095709561957F4F57 +:105730008F4F9F4F1F910895FB01DC0105900D9243 +:105740000020E1F70895BB274A3031F4992322F471 +:10575000BDE2909581959F4F0C94C42B592F482FF3 +:10576000372F262F660F771F881F991F660F771F09 +:10577000881F991F620F731F841F951F660F771F65 +:10578000881F991F0895BB27FB015527AA27880F5B +:10579000991FAA1FA41710F0A41B83955051B9F7A5 +:1057A000A05DAA3308F0A95DA193009779F7B11124 +:1057B000B1931192CB010C94DD2BDC01FC01672F1E +:1057C00071917723E1F7329704C07C916D937083D8 +:1057D0006291AE17BF07C8F308950E942F2C08F4FA +:1057E00081E00895E89409C097FB3EF49095809578 +:1057F000709561957F4F8F4F9F4F9923A9F0F92F97 +:1058000096E9BB279395F695879577956795B79514 +:10581000F111F8CFFAF4BB0F11F460FF1BC06F5FFA +:105820007F4F8F4F9F4F16C0882311F096E911C00C +:10583000772321F09EE8872F762F05C0662371F02D +:1058400096E8862F70E060E02AF09A95660F771F41 +:10585000881FDAF7880F9695879597F90895990F1D +:105860000008550FAA0BE0E8FEEF16161706E8072A +:10587000F907C0F012161306E407F50798F0621B4B +:10588000730B840B950B39F40A2661F0232B242B20 +:10589000252B21F408950A2609F4A140A6958FEF3F +:1058A000811D811D08950E94662C0C94D72C0E94A6 +:1058B000C92C38F00E94D02C20F0952311F00C94C4 +:1058C000C02C0C94C62C11240C940B2D0E94E82C97 +:1058D00070F3959FC1F3950F50E0551F629FF00143 +:1058E000729FBB27F00DB11D639FAA27F00DB11D5C +:1058F000AA1F649F6627B00DA11D661F829F2227E5 +:10590000B00DA11D621F739FB00DA11D621F839F6B +:10591000A00D611D221F749F3327A00D611D231F41 +:10592000849F600D211D822F762F6A2F11249F578F +:1059300050409AF0F1F088234AF0EE0FFF1FBB1F92 +:10594000661F771F881F91505040A9F79E3F510551 +:1059500080F00C94C02C0C940B2D5F3FE4F3983E28 +:10596000D4F3869577956795B795F795E7959F5FFB +:10597000C1F7FE2B880F911D9695879597F908958D +:1059800097F99F6780E870E060E008959FEF80ECF2 +:10599000089500240A941616170618060906089595 +:1059A00000240A9412161306140605060895092EFB +:1059B0000394000C11F4882352F0BB0F40F4BF2B6A +:1059C00011F460FF04C06F5F7F4F8F4F9F4F0895AA +:1059D00057FD9058440F551F59F05F3F71F04795A0 +:1059E000880F97FB991F61F09F3F79F08795089585 +:1059F000121613061406551FF2CF4695F1DF08C0A4 +:105A0000161617061806991FF1CF869571056105C0 +:105A100008940895E894BB2766277727CB0197F968 +:105A20000895F999FECF92BD81BDF89A992780B566 +:105A30000895262FF999FECF1FBA92BD81BD20BDD2 +:105A40000FB6F894FA9AF99A0FBE01960895052EAA +:105A500097FB1EF400940E943E2D57FD07D00E9434 +:105A6000882D07FC03D04EF40C943E2D50954095A4 +:105A7000309521953F4F4F4F5F4F089590958095FA +:105A8000709561957F4F8F4F9F4F08950E94AA2D6B +:105A9000A59F900DB49F900DA49F800D911D112482 +:105AA00008952F923F924F925F926F927F928F92C2 +:105AB0009F92AF92BF92CF92DF92EF92FF920F939D +:105AC0001F93CF93DF93CDB7DEB7CA1BDB0B0FB6A7 +:105AD000F894DEBF0FBECDBF09942A883988488864 +:105AE0005F846E847D848C849B84AA84B984C884FA +:105AF000DF80EE80FD800C811B81AA81B981CE0FF1 +:105B0000D11D0FB6F894DEBF0FBECDBFED010895D5 +:105B1000A1E21A2EAA1BBB1BFD010DC0AA1FBB1FB1 +:105B2000EE1FFF1FA217B307E407F50720F0A21B23 +:105B3000B30BE40BF50B661F771F881F991F1A9490 +:105B400069F760957095809590959B01AC01BD01BA +:105B5000CF010895A29FB001B39FC001A39F700D14 +:105B6000811D1124911DB29F700D811D1124911D65 +:105B700008955058BB27AA270E94D12D0C94D72CEA +:105B80000E94C92C38F00E94D02C20F039F49F3F9D +:105B900019F426F40C94C62C0EF4E095E7FB0C9453 +:105BA000C02CE92F0E94E82C58F3BA17620773073C +:105BB0008407950720F079F4A6F50C940A2D0EF4CD +:105BC000E0950B2EBA2FA02D0B01B90190010C010D +:105BD000CA01A0011124FF27591B99F0593F50F425 +:105BE000503E68F11A16F040A22F232F342F44277D +:105BF000585FF3CF469537952795A795F040539575 +:105C0000C9F77EF41F16BA0B620B730B840BBAF044 +:105C10009150A1F0FF0FBB1F661F771F881FC2F7AF +:105C20000EC0BA0F621F731F841F48F487957795C3 +:105C30006795B795F7959E3F08F0B0CF9395880F7D +:105C400008F09927EE0F9795879508950E943A2EB0 +:105C50000C94D72C0E94D02C58F00E94C92C40F0F4 +:105C600029F45F3F29F00C94C02C51110C940B2D9A +:105C70000C94C62C0E94E82C68F39923B1F35523A9 +:105C800091F3951B550BBB27AA276217730784074F +:105C900038F09F5F5F4F220F331F441FAA1FA9F3E5 +:105CA00035D00E2E3AF0E0E832D091505040E695D3 +:105CB000001CCAF72BD0FE2F29D0660F771F881F34 +:105CC000BB1F261737074807AB07B0E809F0BB0B27 +:105CD000802DBF01FF2793585F4F3AF09E3F51053B +:105CE00078F00C94C02C0C940B2D5F3FE4F3983E9D +:105CF000D4F3869577956795B795F7959F5FC9F724 +:105D0000880F911D9695879597F90895E1E0660FA4 +:105D1000771F881FBB1F621773078407BA0720F01D +:105D2000621B730B840BBA0BEE1F88F7E095089586 +:105D30000E949F2E6894B1110C940B2D08950E941F +:105D4000F02C88F09F5798F0B92F9927B751B0F0F1 +:105D5000E1F0660F771F881F991F1AF0BA95C9F7EF +:105D600014C0B13091F00E940A2DB1E008950C9456 +:105D70000A2D672F782F8827B85F39F0B93FCCF309 +:105D8000869577956795B395D9F73EF4909580956C +:105D9000709561957F4F8F4F9F4F08950E942F2CD4 +:105DA00008F48FEF08950E942F2C880B990B08950B +:105DB000DB018F939F930E94462DBF91AF91A29FCD +:105DC000800D911DA39F900DB29F900D11240895F9 +:105DD000EE0FFF1F0590F491E02D09940F931F9390 +:105DE000CF93DF938230910510F482E090E0E09150 +:105DF000C307F091C40730E020E0B0E0A0E03097A6 +:105E000099F42115310509F44AC0281B390B2430B7 +:105E10003105D8F58A819B816115710589F1FB01F6 +:105E200093838283FE0111C04081518102811381DD +:105E300048175907E0F04817590799F4109761F08F +:105E400012960C93129713961C933296CF01DF9102 +:105E5000CF911F910F9108950093C3071093C4072A +:105E6000F4CF2115310551F04217530738F0A9013D +:105E7000DB019A01BD01DF01F801C1CFEF01F9CFCC +:105E80009093C4078093C307CDCFFE01E20FF31FA9 +:105E9000819391932250310939832883D7CF209160 +:105EA000C1073091C207232B41F420918201309128 +:105EB00083013093C2072093C10720918001309164 +:105EC00081012115310541F42DB73EB74091840180 +:105ED00050918501241B350BE091C107F091C20759 +:105EE000E217F307A0F42E1B3F0B2817390778F0B1 +:105EF000AC014E5F5F4F2417350748F04E0F5F1F10 +:105F00005093C2074093C107819391939FCFF0E0D4 +:105F1000E0E09CCFCF93DF930097E9F0FC0132974C +:105F200013821282A091C307B091C407ED0130E043 +:105F300020E01097A1F420813181820F931F2091DE +:105F4000C1073091C2072817390709F061C0F093E3 +:105F5000C207E093C107DF91CF910895EA01CE1700 +:105F6000DF07E8F54A815B819E0141155105B1F7D4 +:105F7000E901FB83EA8349915991C40FD51FEC17BE +:105F8000FD0761F4808191810296840F951FE901DC +:105F900099838883828193819B838A83F0E0E0E008 +:105FA00012968D919C9113970097B9F52D913C9184 +:105FB0001197CD010296820F931F2091C107309156 +:105FC000C2072817390739F6309751F51092C407E0 +:105FD0001092C307B093C207A093C107BCCFD3836D +:105FE000C28340815181840F951FC817D90761F47E +:105FF0004E5F5F4F88819981480F591F51834083BD +:106000008A819B81938382832115310509F0B0CF6A +:10601000F093C407E093C3079ECFFD01DC01C0CF1E +:1060200013821282D7CFB0E0A0E0E9E1F0E30C9454 +:10603000532D8C01009751F4CB010E94EE2E8C0160 +:10604000C801CDB7DEB7E0E10C946F2DFC01E60F7F +:10605000F71F9C0122503109E217F30708F49DC095 +:10606000D901CD91DC911197C617D70798F0C530AB +:10607000D10530F3CE0104978617970708F3C61BA6 +:10608000D70B2297C193D1936D937C93CF010E943C +:106090008A2FD6CF5B01AC1ABD0A4C018C0E9D1E17 +:1060A000A091C307B091C407512C412CF12CE12CD5 +:1060B000109731F58091C1079091C2078815990515 +:1060C00009F05CC04616570608F058C08091800160 +:1060D00090918101009741F48DB79EB74091840162 +:1060E00050918501841B950BE817F90708F055C0FE +:1060F000F093C207E093C107F90171836083A0CFD9 +:106100008D919C91119712966C90129713967C909A +:106110001397A815B90559F56C0142E0C40ED11CBE +:10612000CA14DB0420F1AC014A195B09DA011296AA +:10613000159780F06282738251834083D9016D93F9 +:106140007C93E114F10471F0D7011396FC93EE9364 +:10615000129776CF22968C0F9D1FF9019183808331 +:10616000F301EFCFF093C407E093C30769CF48165C +:10617000590608F42C017D01D3019ACFCB010E946E +:10618000EE2E7C01009749F0AE01B8010E94D53097 +:10619000C8010E948A2F870153CF10E000E050CF42 +:1061A00081E090E0F8940C94E530FB01DC0102C042 +:1061B00001900D9241505040D8F70895FB01DC0149 +:1061C00001900D920020E1F708951BE0C2E3DBE0AF +:1061D00004C0FE010E94E82E2196C333D107C9F7FF +:1061E000F894FFCF01FFD800340186011E000000A3 +:1061F000000000000000000000000000000000009F +:10620000000000000000000000000000000000008E +:10621000000000000000000000000000000000007E +:10622000000000000000013C960040010101280F21 +:106230000501014243312E3500000000000000003E +:10624000000000000000000000000000000000004E +:10625000000000000000000000000000000000003E +:10626000000000010000C50780004C0AFC09AC09D1 +:106270005C090C09BC086C081C08CC074C0A7C079C +:106280002C07DC068C063C06EC059C054C053C0600 +:106290009C05FC044C053C06AC045C040C04BC03EB +:1062A0006C031C03CC027C022C02DC01CC027C02BD +:1062B0008C013C013C06740D580D3C0D200D040D65 +:1062C000E80CCC0CB00C940C780C5C0C740D400CED +:1062D000240C080C740DEC0BD00B080CEC0BB40B5D +:1062E000D00B080C980B7C0B600B440B280BE80CB4 +:1062F0000C0B940CF00AD40AB80A9C0A040DB80AD4 +:10630000080C0906040402020202020203200E0421 +:106310000EE40DC815C80DAC0D900D8C0F540F1C5C +:106320000FE40EAC0E740E3C0E00000000F90D5987 +:106330000D860D460EB70D950DA90D000000008BC2 +:1063400010590DAD11580D6E616E00696E66006FCB +:066350007666002F330009 +: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/sources/SolderingStation2_arduboy_gplib_v1.7t1.ino b/software/sources/SolderingStation2_arduboy_gplib_v1.7t1.ino new file mode 100644 index 0000000..1b36635 --- /dev/null +++ b/software/sources/SolderingStation2_arduboy_gplib_v1.7t1.ino @@ -0,0 +1,1345 @@ +/*License: http://creativecommons.org/licenses/by-sa/3.0/ + 采用CC3.0协议共享此程序 + 您可以自由地:- + -AZ + 共享 — 在任何媒介以任何形式复制、发行本作品 + 演绎 — 修改、转换或以本作品为基础进行创作 + 在任何用途下,甚至商业目的。 + 本许可协议为“自由文化作品(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. +// +// This version of the code implements: +// - Temperature measurement of the tip +// - 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 +// - Information display on OLED +// - Buzzer +// - Calibrating and managing different soldering tips +// - Storing user settings into the EEPROM +// - Tip change detection +// +// 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 + +// 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: 48, height: 48 + +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 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 *Ico_table[] = { + Set0, Set1, Set2, Set3, Set4, Set5, Set6, Set_LANG, 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, //8 + Set4F, Set4FF, + Set4, Set4F, Save, +}; +const byte Menu_table[] = {9, 6, 4, 4, 2, 2, 2, 2, 2, 2, 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 *const EN_table[] PROGMEM = {EN_0, EN_1, EN_2, EN_3, EN_4, EN_5, EN_6, EN_7, 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_33, EN_34, 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 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 *CN_table[] = { + t0, t1, t2, t3, t4, t5, t7, t6, 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,//8 + t_NO, t_OK,//9 + t5_3, t4f, t_save, //10 +}; + +bool lastbutton; +#include //注意 这里使用被阉割的图形库,只有绘图功能,并非通用的版本 +Arduboy2 arduboy; + +#include +#include +#include + +// Firmware version +#define VERSION "v1.7t1" + +// 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 330 //芯片内部温度读取校准值 -->可以根据实际情况修改,不同机器情况不同,通常误差在10°C内 +#define TEMP_MIN 50 // 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 0x08FF // 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 +String value; +int LastValue[3]; +float SlidingAnimationY[3]; + +// Specify the links and initial PID tuning parameters +PID ctrl(&Input, &Output, &Setpoint, aggKp, aggKi, aggKd, REVERSE); + + + +//LANG 语言支持 +/* 0 - 中文 CHINESE + 1 - 英文 ENGLISH +*/ +byte LANG = 0; +void Flip(bool Fmode) { + arduboy.flipVertical(Fmode); + arduboy.flipHorizontal(Fmode); +} +void setup() { + arduboy.begin(); + arduboy.setFrameRate(30); + + //Serial.begin(115200); + // set the pin modes + 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); + + analogWrite(CONTROL_PIN, 255); // this shuts off the heater + digitalWrite(BUZZER_PIN, LOW); // must be LOW when buzzer not in use + + // setup 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 + 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); + // 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 ((CurrentTemp + 20) < DefaultTemp) analogWrite(CONTROL_PIN, 0); + + // 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 + analogWrite(CONTROL_PIN, 0); // then start the heater right now + 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() { + analogWrite(CONTROL_PIN, 255); // shut off heater in order to measure temperature + 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 + + analogWrite(CONTROL_PIN, Output); // turn on again heater + + RawTemp += (temp - RawTemp) * SMOOTHIE; // stabilize ADC temperature reading + calculateTemp(); + + // stabilize displayed temperature when around setpoint + if ((ShowTemp != Setpoint) || (abs(ShowTemp - CurrentTemp) > 5)) ShowTemp = CurrentTemp; + + // 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; + // checks if tip is present or currently inserted + if (ShowTemp > 500) TipIsPresent = false; // tip removed ? + if (!TipIsPresent && (ShowTemp < 500)) { // new tip inserted ? + analogWrite(CONTROL_PIN, 255); // shut off heater + 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; + } + analogWrite(CONTROL_PIN, Output); // set heater PWM +} + + +// 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; + 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); + uint8_t i, j; + uint16_t counter = 18; + 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); + uint8_t i, j; + uint16_t counter = 18; + 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 (MainScrType) { + 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]); + //状态显示 + if (ShowTemp > 500) SysState = 0; + else if (inOffMode) SysState = 1; + else if (inSleepMode) SysState = 2; + else if (inBoostMode) SysState = 3; + else if (isWorky) SysState = 4; + else if (Output < 180) SysState = 5; + else SysState = 6; + //显示状态 + 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) beep(); else arduboy.drawSlowXYBitmap(2, 18, Chip, 14, 14, 0); + + //R2 + if ((float)Vin / 100 < UnderVoltage && ((millis() * 4) / 1000) % 2) beep(); else arduboy.drawSlowXYBitmap(2, 34, Lightning, 14, 14, 0); + //R3 + arduboy.setCursor(19, 16); arduboy.print(getChipTemp(), 1); arduboy.print((char)248); arduboy.print(F("C")); //芯片温度 + arduboy.setCursor(19, 24); arduboy.print((float)getVCC() / 1000, 2); arduboy.print(F("V")); //芯片电压 + arduboy.setCursor(19, 32); arduboy.print((float)Vin / 1000, 1); arduboy.print(F("V")); //输入电压 + arduboy.setCursor(19, 40); arduboy.print(F(VERSION)); //固件 + //显示探头温度 + arduboy.setCursor(57, 18); + arduboy.setTextSize(4); + if (ShowTemp > 500) arduboy.print(F("000")); else arduboy.print(ShowTemp); + arduboy.drawRect(55, 16, 72, 32, 0); + + DrawStatusBar(0); + arduboy.display(); + } else { + arduboy.clear(); + if (getChipTemp() > 80 && ((millis() * 4) / 1000) % 2) beep(); + if ((float)Vin / 100 < UnderVoltage && ((millis() * 4) / 1000) % 2) beep(); + if (ShowTemp > 500) DisplayNum(999); else DisplayNum(ShowTemp); + arduboy.fillRect(0, 48, 128, 3, 0); + DrawStatusBar(1); + arduboy.display(); + } + +} + +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() { + analogWrite(CONTROL_PIN, 255); // shut off heater + beep(); + uint16_t SaveSetTemp = SetTemp; + uint8_t selection = 0; + bool repeat = true; + + while (repeat) { + 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: MenuLevel = 10; ScreenSet(); break; + case 5: MenuLevel = 6; beepEnable = MenuScreen(beepEnable); break; + case 7: MenuLevel = 8; LANG = MenuScreen(LANG); break; + case 6: UnderVoltageSet(); break; + default: repeat = false; break; + } + } + updateEEPROM(); + handleMoved = true; + SetTemp = SaveSetTemp; + setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, SetTemp); +} + + +//显示设置菜单 +// tip settings screen +void ScreenSet() { + uint8_t selection = 0; + bool repeat = true; + while (repeat) { + MenuLevel = 10; + selection = MenuScreen(selection); + switch (selection) { + case 0: MenuLevel = 5; MainScrType = MenuScreen(MainScrType); break; + case 1: MenuLevel = 9; FlipState = MenuScreen(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(); break; + case 1: setRotary(20, 200, TEMP_STEP, SleepTemp); + SleepTemp = InputScreen(); break; + case 2: setRotary(10, 100, TEMP_STEP, BoostTemp); + BoostTemp = InputScreen(); 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(); break; + case 1: setRotary(0, 60, 5, time2off); + time2off = InputScreen(); break; + case 2: setRotary(0, 180, 10, timeOfBoost); + timeOfBoost = InputScreen(); 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.5 * (-SlidingAnimationX); + lastselected = selected; + arduboy.clear(); + //绘制图标 如果有指定的话 + for (byte i = 0; i < 5; i++) if (selected - 2 + i >= 0 && selected - 2 + i < Menu_table[MenuLevel]) { + DrawUIFrame(-72 + i * 56 + SlidingAnimationX, 0, 1); + drawSlowXYBitmapResize(-72 + i * 56 + SlidingAnimationX + 3, 3, Ico_table[selected - 2 + i + QueryMenuObject()], 14, 14, 3, 1); + } + + if (LANG == 0) arduboy.drawSlowXYBitmap(48, 48, CN_table[selected + QueryMenuObject()], 36, 16, 1); else { + arduboy.setCursor(48, 49); + arduboy.setTextSize(1); + Print_EN(selected + QueryMenuObject()); + } + + + arduboy.display(); + CheckLastButton(); + //beep(0); + } while (digitalRead(BUTTON_PIN) || lastbutton); + beep(); + return selected; +} +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; + } +*/ + +//模拟数字滚轮 Numerical scrolling effect +void DisplayNum(int Num) { + + arduboy.setTextSize(6); + SetTextColor(0); + //数字滚轮 + for (byte i = 0; i < 3; i++) LastValue[i] = byte(value[i]); + value = Num; + for (byte i = 0; i < 3; i++) { + SlidingAnimationY[i] += (byte(value[i]) - 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 - 48); + } + } + //刻度标 + arduboy.fillRect(0, 0, 128, 2, 0); //上遮罩层 + arduboy.fillRect(0, 51, 128, 13, 0); //下遮罩层 +} + +//数值输入界面 +// input value screen +uint16_t InputScreen() { + lastbutton = (!digitalRead(BUTTON_PIN)); + do { + arduboy.clear(); + DisplayNum(getRotary()); + arduboy.display(); + CheckLastButton(); + } while (digitalRead(BUTTON_PIN) || lastbutton); + beep(); + return value.toInt(); +} + +//欠压报警设置 +// information display screen +void UnderVoltageSet() { + setRotary(0, 250, 1, UnderVoltage); + UnderVoltage = InputScreen(); + 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; +} + +//温度校准界面 +// 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); + } + + analogWrite(CONTROL_PIN, 255); // shut off heater + 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(20); // 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); + } + } + } +}