From 4a2ba4b7105d168932163cbd07a062fdf2ba00e9 Mon Sep 17 00:00:00 2001 From: sicarius Date: Sat, 17 Feb 2007 00:35:01 +0000 Subject: +++ enhanced framework hardware interface --- source/AVR_Studio/Soccer/Soccer.aps | 2 +- source/AVR_Studio/Soccer/Soccer.c | 37 +- source/AVR_Studio/Soccer/default/Soccer.elf | Bin 87393 -> 87759 bytes source/AVR_Studio/Soccer/default/Soccer.hex | 2301 +++++++++++------------ source/AVR_Studio/Soccer/default/dep/Soccer.o.d | 19 +- source/AVR_Studio/Soccer/default/dep/board.o.d | 6 +- source/AVR_Studio/Soccer/default/dep/keylcd.o.d | 52 - source/AVR_Studio/Soccer/hal/board.c | 47 +- source/AVR_Studio/Soccer/hal/board.h | 14 +- source/AVR_Studio/Soccer/hal/keylcd.c | 15 +- source/AVR_Studio/Soccer/hal/keylcd.h | 8 +- source/AVR_Studio/Soccer/navigation.c | 10 +- source/Concept/Framework/RoboCode.aps | 2 +- source/Concept/Framework/atmega128io.cpp | 586 +++++- source/Concept/Framework/atmega128io.h | 177 +- source/Concept/Framework/default/Makefile | 4 +- source/Concept/Framework/defines.h | 26 +- source/Concept/Framework/display.cpp | 1 + source/Concept/Framework/display.h | 60 + source/Concept/Framework/distance_sensor.cpp | 27 +- source/Concept/Framework/distance_sensor.h | 46 +- source/Concept/Framework/dribbler.cpp | 1 + source/Concept/Framework/dribbler.h | 118 ++ source/Concept/Framework/engine.cpp | 2 +- source/Concept/Framework/engine.h | 32 +- source/Concept/Framework/io_module.cpp | 2 +- source/Concept/Framework/ir_sensor.cpp | 2 +- source/Concept/Framework/kicker.cpp | 2 +- source/Concept/Framework/led.cpp | 2 +- source/Concept/Framework/main.cpp | 26 + source/Concept/Framework/robot.cpp | 10 +- source/Concept/Framework/stdafx.h | 2 + source/Concept/Framework/tools.h | 30 +- 33 files changed, 2328 insertions(+), 1341 deletions(-) create mode 100644 source/Concept/Framework/display.cpp create mode 100644 source/Concept/Framework/display.h create mode 100644 source/Concept/Framework/dribbler.cpp create mode 100644 source/Concept/Framework/dribbler.h (limited to 'source') diff --git a/source/AVR_Studio/Soccer/Soccer.aps b/source/AVR_Studio/Soccer/Soccer.aps index 04830f4..459bdc6 100755 --- a/source/AVR_Studio/Soccer/Soccer.aps +++ b/source/AVR_Studio/Soccer/Soccer.aps @@ -1 +1 @@ -Soccer07-Feb-2007 15:43:1214-Feb-2007 18:24:30241007-Feb-2007 15:43:1244, 12, 0, 462AVR GCCdefault\Soccer.elfY:\AVR_Studio\Soccer\AVR SimulatorATmega128falseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto000Soccer.chal\board.chal\keylcd.chal\i2c.cglobal.chal\uart.cnavigation.csensor\sensor.csensor\ballsensor.chal\maussensor.csensor\position.csensor\abstand.chal\board.hhal\keylcd.hhal\i2c.hglobal.hhal\uart.hnavigation.hsensor\sensor.hsensor\ballsensor.hhal\maussensor.hsensor\position.hsensor\abstand.hdefaultNOatmega128100Soccer.elfdefault\1-Wall -gdwarf-2 -DF_CPU=16000000ULUL -O3 -fsigned-chardefault0C:\WinAVR\bin\avr-g++.exeC:\WinAVR\utils\bin\make.exeY:\AVR_Studio\Soccer\hal\board.hY:\AVR_Studio\Soccer\hal\keylcd.hY:\AVR_Studio\Soccer\hal\i2c.hY:\AVR_Studio\Soccer\global.hY:\AVR_Studio\Soccer\hal\uart.hY:\AVR_Studio\Soccer\navigation.hY:\AVR_Studio\Soccer\sensor\sensor.hY:\AVR_Studio\Soccer\sensor\ballsensor.hY:\AVR_Studio\Soccer\hal\maussensor.hY:\AVR_Studio\Soccer\sensor\position.hY:\AVR_Studio\Soccer\sensor\abstand.hY:\AVR_Studio\Soccer\Soccer.cY:\AVR_Studio\Soccer\hal\board.cY:\AVR_Studio\Soccer\hal\keylcd.cY:\AVR_Studio\Soccer\hal\i2c.cY:\AVR_Studio\Soccer\global.cY:\AVR_Studio\Soccer\hal\uart.cY:\AVR_Studio\Soccer\navigation.cY:\AVR_Studio\Soccer\sensor\sensor.cY:\AVR_Studio\Soccer\sensor\ballsensor.cY:\AVR_Studio\Soccer\hal\maussensor.cY:\AVR_Studio\Soccer\sensor\position.cY:\AVR_Studio\Soccer\sensor\abstand.c00000Soccer.c100001hal\board.c100002hal\keylcd.h100003hal\keylcd.c100004hal\i2c.h100005hal\i2c.c100006global.h100007global.c100008c:\WinAVR\avr\include\avr\iom128.h100009hal\board.h100010hal\uart.c100011navigation.h100012hal\uart.h100013navigation.c100014sensor\sensor.h100015sensor\sensor.c100016sensor\ballsensor.h100017sensor\ballsensor.c100018c:\WinAVR\avr\include\stdlib.h100019c:\WinAVR\avr\include\avr\signal.h100020hal\maussensor.h100021hal\maussensor.c100022sensor\position.h100023sensor\position.c100024sensor\abstand.h100025sensor\abstand.c1299 72 1025 52727 13Maximized293 68 1019 523108 6248 200 994 4426 0160 84 906 32626 0275 56 777 34354 0281 60 1007 51513 0156 54 968 44626 13287 64 1013 5198 0373 206 1003 511769 0310 121 940 42636 24291 94 921 399277 0313 123 943 4283 0335 152 965 4570 0357 181 987 48642 41379 210 1009 5156 20290 66 1016 52112 58313 123 943 42814 16335 152 965 45740 29357 181 987 486115 0382 212 1012 51735 0300 100 930 405116 22296 70 1022 52527 5347 160 977 46518 11369 189 999 49427 0391 218 1021 5237 3303 102 933 40720 23 +Soccer07-Feb-2007 15:43:1217-Feb-2007 01:32:56241007-Feb-2007 15:43:1244, 12, 0, 462AVR GCCdefault\Soccer.elfY:\AVR_Studio\Soccer\AVR SimulatorATmega12851402falseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto000Soccer.chal\board.chal\keylcd.chal\i2c.cglobal.chal\uart.cnavigation.csensor\sensor.csensor\ballsensor.chal\maussensor.csensor\position.csensor\abstand.chal\board.hhal\keylcd.hhal\i2c.hglobal.hhal\uart.hnavigation.hsensor\sensor.hsensor\ballsensor.hhal\maussensor.hsensor\position.hsensor\abstand.hdefaultNOatmega128100Soccer.elfdefault\1-Wall -gdwarf-2 -DF_CPU=16000000ULUL -O3 -fsigned-chardefault0C:\WinAVR\bin\avr-g++.exeC:\WinAVR\utils\bin\make.exeY:\AVR_Studio\Soccer\hal\board.hY:\AVR_Studio\Soccer\hal\keylcd.hY:\AVR_Studio\Soccer\hal\i2c.hY:\AVR_Studio\Soccer\global.hY:\AVR_Studio\Soccer\hal\uart.hY:\AVR_Studio\Soccer\navigation.hY:\AVR_Studio\Soccer\sensor\sensor.hY:\AVR_Studio\Soccer\sensor\ballsensor.hY:\AVR_Studio\Soccer\hal\maussensor.hY:\AVR_Studio\Soccer\sensor\position.hY:\AVR_Studio\Soccer\sensor\abstand.hY:\AVR_Studio\Soccer\Soccer.cY:\AVR_Studio\Soccer\hal\board.cY:\AVR_Studio\Soccer\hal\keylcd.cY:\AVR_Studio\Soccer\hal\i2c.cY:\AVR_Studio\Soccer\global.cY:\AVR_Studio\Soccer\hal\uart.cY:\AVR_Studio\Soccer\navigation.cY:\AVR_Studio\Soccer\sensor\sensor.cY:\AVR_Studio\Soccer\sensor\ballsensor.cY:\AVR_Studio\Soccer\hal\maussensor.cY:\AVR_Studio\Soccer\sensor\position.cY:\AVR_Studio\Soccer\sensor\abstand.c00000Soccer.c100001hal\board.c100002hal\keylcd.h100003hal\keylcd.c100004hal\i2c.h100005hal\i2c.c100006global.h100007global.c100008c:\WinAVR\avr\include\avr\iom128.h100009hal\board.h100010hal\uart.c100011navigation.h100012hal\uart.h100013navigation.c100014sensor\sensor.h100015sensor\sensor.c100016sensor\ballsensor.h100017sensor\ballsensor.c100018c:\WinAVR\avr\include\stdlib.h100019c:\WinAVR\avr\include\avr\signal.h100020hal\maussensor.h100021hal\maussensor.c100022sensor\position.h100023sensor\position.c100024sensor\abstand.h100025sensor\abstand.c100026c:\WinAVR\avr\include\avr\io.h100027c:\WinAVR\avr\include\math.h100028c:\WinAVR\avr\include\inttypes.h100029c:\WinAVR\avr\include\avr\sfr_defs.h100030c:\WinAVR\avr\include\avr\version.h100031c:\WinAVR\avr\include\stdint.h100032c:\WinAVR\lib\gcc\avr\4.1.1\include\stddef.h1299 73 1025 52817 0287 64 1013 51912 0242 196 988 43816 2154 80 900 3224 12269 52 771 33954 0275 56 1001 51113 0150 50 962 44232 2281 60 1007 5158 0367 202 997 507114 24304 117 934 42248 27285 90 915 395576 20307 119 937 42413 0329 148 959 45315 34351 177 981 48231 0373 206 1003 5116 0284 62 1010 51712 0307 119 937 42414 0329 148 959 45340 0351 177 981 482115 0376 208 1006 51335 0299 72 1025 527116 0Maximized290 66 1016 52127 0347 160 977 46518 0363 185 993 49027 0385 214 1015 5197 0297 98 927 40320 0325 131 955 4360 0347 160 977 4650 0369 189 999 4940 0391 218 1021 52323 17303 102 933 4070 0325 131 955 4360 0347 160 977 4650 0 diff --git a/source/AVR_Studio/Soccer/Soccer.c b/source/AVR_Studio/Soccer/Soccer.c index 117b6bc..00f1dcf 100755 --- a/source/AVR_Studio/Soccer/Soccer.c +++ b/source/AVR_Studio/Soccer/Soccer.c @@ -10,19 +10,29 @@ Sensor sensor; int main() { //board.ledOn(); - sleep(2); + sleep(1); uart1_puts("Hallo hier ist das RNMega128Funk-Board"); + while(true) + { + uart1_puts("3"); + sleep(1); + } + + int speed = 100; - int speed = 255; - board.motor(0, speed); - board.motor(1, speed); - board.motor(2, speed); - - sleep(2); - navigation.Aktualisieren(180,0,speed); - while(true) { sleep(1); } + /*for(int i=0;i<360;i+=5) { + navigation.Aktualisieren(0,i,0); + msleep(1000); + }*/ + + /*sleep(2); + board.motor(0,0); + board.motor(1,0); + board.motor(2,0); + board.motor(3,0); + while(true) { sleep(1); }*/ /*board.motor(0,speed); board.motor(2,speed); sleep(2); @@ -83,11 +93,16 @@ int main() { while(true) { navigation.Aktualisieren(0,0,speed); sleep(2); - navigation.Aktualisieren(90,0,speed); + navigation.Aktualisieren(135,0,speed); sleep(2); navigation.Aktualisieren(180,0,speed); sleep(2); - navigation.Aktualisieren(270,0,speed); + navigation.Aktualisieren(225,0,speed); + sleep(2); + board.motor(0,0); + board.motor(1,0); + board.motor(2,0); + board.motor(3,0); sleep(2); } diff --git a/source/AVR_Studio/Soccer/default/Soccer.elf b/source/AVR_Studio/Soccer/default/Soccer.elf index 5c63ac2..d0dc77f 100755 Binary files a/source/AVR_Studio/Soccer/default/Soccer.elf and b/source/AVR_Studio/Soccer/default/Soccer.elf differ diff --git a/source/AVR_Studio/Soccer/default/Soccer.hex b/source/AVR_Studio/Soccer/default/Soccer.hex index 1bf5d66..1944751 100755 --- a/source/AVR_Studio/Soccer/default/Soccer.hex +++ b/source/AVR_Studio/Soccer/default/Soccer.hex @@ -2,1168 +2,1159 @@ :100010000C9483000C9483000C9483000C94830054 :100020000C9483000C9483000C9483000C94830044 :100030000C9483000C9483000C9483000C94830034 -:100040000C94D4010C9483000C94CD040C94FE0405 +:100040000C9487010C9483000C9484040C94B504E4 :100050000C9483000C9483000C9483000C94830014 :100060000C9483000C9483000C9483000C94830004 -:100070000C9483000C9483000C946B050C949E05E7 +:100070000C9483000C9483000C9422050C94550579 :100080000C9483000C9483000C9483000829573F40 :100090009F2D49CBA5310F76C73493F27E37D00D13 :1000A000013AB60B613D2AAAAB3F0000003F800039 :1000B0000000BA00B30011241FBECFEFD0E1DEBFB5 -:1000C000CDBF11E0A0E0B1E0E4EBF8E400E00BBF4D -:1000D00002C007900D92A833B107D9F711E0A8E349 -:1000E000B1E001C01D92AE3FB107E1F710E0C4EBF3 -:1000F000D0E004C02297FE010E940123C23BD10739 +:1000C000CDBF11E0A0E0B1E0EEE2F8E400E00BBF4C +:1000D00002C007900D92AA33B107D9F712E0AAE344 +:1000E000B1E001C01D92A030B107E1F710E0C4EB10 +:1000F000D0E004C02297FE010E94BE22C23BD1077D :10010000C9F70C94C1000C9400008130910531F0C6 :10011000892B19F46F5F7F4FA9F008956F5F7F4FB0 -:10012000E1F788E391E00E94610289E391E00E9497 -:1001300027038BE391E00E94870781E491E00E940E -:10014000D907089581E491E00E94B9078BE391E01B -:100150000E94940689E391E00E94D80288E391E02E -:100160000E94270108956FEF7FEF80E090E00E94EA +:10012000E1F78AE391E00E941A028BE391E00E94DA +:10013000DE028DE391E00E94440783E491E00E9497 +:100140009607089583E491E00E9476078DE391E09D +:100150000E944B068BE391E00E948F028AE391E0BC +:100160000E94EB0008956FEF7FEF80E090E00E9427 :10017000850008956FEF7FEF81E090E00E94850099 -:10018000089520E030E080E090E0A0E0B0E00000E2 -:100190000196A11DB11D8E3E42E7940745E1A407DB -:1001A00040E0B407A1F72F5F3F4F2230310559F7E8 -:1001B00080E091E00E9417064FEF50E060E070E0B1 -:1001C00088E391E00E944F014FEF50E061E070E062 -:1001D00088E391E00E944F014FEF50E062E070E051 -:1001E00088E391E00E944F0120E030E080E090E061 -:1001F000A0E0B0E000000196A11DB11D8E3E42E7D7 -:10020000940745E1A40740E0B407A1F72F5F3F4FF3 -:100210002230310559F72FEF30E040E050E064EB39 -:1002200070E08BE391E00E949B0780E090E0A0E00B -:10023000B0E000000196A11DB11D8E3E22E792079D -:1002400025E1A20720E0B207A1F7EFCF08950895B6 -:1002500086E886B967B987B1806C87B9369A3699CE -:10026000FECF40E020E030E0369A3699FECF84B1F0 -:1002700095B1280F391F4F5F4330B1F73798C90147 -:1002800063E070E00E94B422CB01089570936E0188 -:1002900060936D010895C19A0895C19808956430DE -:1002A000710598F44115510589F480E090E06115DD -:1002B0007105C9F49BBD8ABD14161506B4F5C09A24 -:1002C000C1980895979A969ADD980895CA0157FDA6 -:1002D00031C088968F3F910551F34CF38FEF90E03A -:1002E0006115710539F361307105B9F0623071053E -:1002F00051F06330710549F71416150644F5969AC6 -:100300009798DD9A0895909387008093860014163D -:10031000150624F5959A9498089599BD88BD1416EC -:10032000150684F4C29AC3980895452B41F4C19AE6 -:10033000C09A089588279927841B950BCACFC19A24 -:10034000C0980895452B79F0C39AC2980895452B1B -:1003500009F4B8CF979A9698DD9A0895452B31F015 -:10036000949A95980895C39AC29A0895949A959AE2 -:1003700008958091650088608093650020E030E0FA -:1003800080E090E00000019645E08D379407D1F7BA -:100390002F5F3F4F83E0283E380791F7809165003B -:1003A000877F8093650008951F920F920FB60F927A -:1003B00011242F933F938F939F9320912701309186 -:1003C000280180916D0190916E0197FD23C0959554 -:1003D0008795821793077CF48091650084608093F1 -:1003E00065002115310579F48FEF90E09093280195 -:1003F0008093270111C0809165008B7F80936500F9 -:100400002115310589F32150304030932801209384 -:10041000270102C00196DBCF9F918F913F912F91D1 -:100420000F900FBE0F901F9018956430710508F063 -:100430003EC084B321E030E0062E02C0220F331FFD -:100440000A94E2F7822B84BB85B3822B85BBE0E064 -:10045000F0E040E050E000004F5F5F4F85E04D3737 -:100460005807C9F7319683E0E83EF80791F785B35E -:10047000922F9095892385BB84B3982394BB83B333 -:10048000992786239723892BD1F383B39927862332 -:100490009723892B61F02FEF3FEF2F5F3F4F000035 -:1004A00083B3992786239723892BB9F702C02FEFAF -:1004B0003FEFC9010895662311F0C1980895C19ACC -:1004C00008958EE78ABB1BBA2FEF27BB82E088BB5B -:1004D0008FEC84BB15BA8CEF81BB93E092BB8FEDA0 -:1004E00082B913B810926100209362008FE180936B -:1004F00064009093650091EA9FBD85E88EBD90935E -:100500008B0080938A001BBC1ABCC19AC09A19BC8C -:1005100018BCC39AC29A1092870010928600949ACF -:10052000959A979A969ADD981E98DA9A8AE090E0C2 -:100530000E94C805789408958EE78ABB1BBA2FEFF6 -:1005400027BB82E088BB8FEC84BB15BA8CEF81BBE4 -:1005500093E092BB8FED82B913B8109261002093A3 -:1005600062008FE1809364009093650091EA9FBDE3 -:1005700085E88EBD90938B0080938A001BBC1ABCCB -:10058000C19AC09A19BC18BCC39AC29A109287002B -:1005900010928600949A959A979A969ADD981E984A -:1005A000DA9A8AE090E00E94C80578940895089548 -:1005B000089508950E94430399270895CF92DF92EA -:1005C000EF92FF920F931F93CF93DF93CDB7DEB7D8 -:1005D0008C01FB01EDB6FEB6DB010D900020E9F7C2 -:1005E0006D010894C108D108C61AD70AC601019640 -:1005F0002DB73EB7281B390B0FB6F8943EBF0FBE80 -:100600002DBF4DB75EB74F5F5F4F1C141D0464F4E0 -:1006100020E030E0BA018191DB018D93BD012F5FB5 -:100620003F4FC216D306B9F7960162E0C8010E9497 -:1006300070040FB6F894FEBE0FBEEDBEDF91CF91F1 -:100640001F910F91FF90EF90DF90CF9008950E943F -:10065000380308950E9438030895FC0180E48093D4 -:10066000700084E4809374001092710010820895E9 -:10067000FC0180E48093700084E480937400109205 -:10068000710010820895FC01808199270895660FFA -:1006900060937200089580917400992787FD90956A -:1006A0008827990F881F99270895FC0190E020E082 -:1006B00030E0660F44EC80917400806A809374008F -:1006C0008091740087FFFCCF80917100887F883013 -:1006D00001F560937300409374008091740087FF6C -:1006E000FCCF80917100887F883189F08091710002 -:1006F000887F803221F09923F1F2108208952F5FD4 -:100700003F4F2A303105B9F781E08083089591E0A9 -:10071000EDCF82E080830895660F616024EC8091C4 -:100720007400806A809374008091740087FFFCCF0E -:100730008091710060937300209374008091740025 -:1007400087FFFCCF809171009091710080917100C2 -:1007500080917400806880937400987F9034F9F6DB -:1007600008956093730084EC80937400809174000A -:1007700087FFFCCF8091710080917100089584ED16 -:1007800080937400089584EC8093740080917400C9 -:1007900087FFFCCF20E030E094ECFB0180917100FA -:1007A000887F803889F480917300808390937400EF -:1007B0008091740087FFFCCF2F5F3F4F319680916F -:1007C0007100887F803879F38091710084EC809388 -:1007D0007400C9010895FB018091740087FFFCCF6C -:1007E000809171008091710080917300808384EC0E -:1007F0008093740008951F93141615060CF5DA0102 -:10080000119720E030E014E894ECFB0180818093A4 -:100810007300A217B30789F090937400809174005D -:1008200087FFFCCF80917100809171002F5F3F4F57 -:1008300031964217530751F703C010937400EECF5F -:1008400084EC809374001F910895FC01660F616031 -:1008500074EC80917400806A8093740080917400BD -:1008600087FFFCCF809171006093730070937400D8 -:100870008091740087FFFCCF80917100909171008E -:100880008091710080917400806880937400987FDB -:100890009034F9F680818823E9F412161306B4F433 -:1008A00060E070E094ECFA018091740087FFFCCF67 -:1008B0008091710080917100809173008193909379 -:1008C00074006F5F7F4F2617370771F784ED8093B1 -:1008D0007400089584ED8093740083E0808308950C -:1008E000DC0190E0E0E0F0E0660F74EC80917400D1 -:1008F000806A809374008091740087FFFCCF8091A0 -:100900007100887F8830E9F56093730070937400FC -:100910008091740087FFFCCF80917100887F8831BF -:1009200071F180917100887F803211F19923F1F289 -:100930001C9212161306BCF460E070E094ECFA010D -:10094000808180937300909374008091740087FF7E -:10095000FCCF80917100809171006F5F7F4F319665 -:100960002617370769F784ED809374001C92089569 -:100970003196EA30F105D1F681E08C9304C091E024 -:10098000D0CF82E08C9384ED8093740008950E9410 -:100990005E2208950E94BB2108951F920F920FB608 -:1009A0000F9211242F933F934F938F939F93EF9325 -:1009B000FF933BB14CB12091D6012F5F2F718091F5 -:1009C000D701E22FFF279927E817F90741F0832F76 -:1009D00088712093D601E852FE4F408301C082E027 -:1009E0008093F801FF91EF919F918F914F913F91EB -:1009F0002F910F900FBE0F901F9018951F920F927E -:100A00000FB60F9211248F939F93EF93FF939091C2 -:100A1000B4018091B501981761F0E091B501EF5FE5 -:100A2000EF71E093B501FF27EA54FE4F80818CB946 -:100A300001C05598FF91EF919F918F910F900FBE3C -:100A40000F901F9018959C011092B4011092B5015F -:100A50001092D6011092D70197FF03C082E08BB9A4 -:100A60003F77832F99278093900029B988E98AB925 -:100A700086E08093950008959091D6018091D701EA -:100A8000981791F0E091D701EF5FEF71E093D701F4 -:100A9000FF27E852FE4F20818091F8019927982F77 -:100AA0008827820F911D089580E091E00895382FE6 -:100AB0002091B4012F5F2F71E22FFF278091B501A4 -:100AC00099278E179F07D1F3EA54FE4F3083209366 -:100AD000B401559A08951F920F920FB60F921124E8 -:100AE0002F933F934F938F939F93EF93FF93309167 -:100AF0009B0040919C00209191012F5F2F7180916C -:100B00009201E22FFF279927E817F90741F0832F79 -:100B1000887120939101ED56FE4F408301C082E021 -:100B20008093B301FF91EF919F918F914F913F91EE -:100B30002F910F900FBE0F901F9018951F920F923C -:100B40000FB60F9211248F939F93EF93FF93909181 -:100B50006F0180917001981769F0E0917001EF5F6B -:100B6000EF71E0937001FF27EF58FE4F8081809373 -:100B70009C0005C080919A008F7D80939A00FF9120 -:100B8000EF919F918F910F900FBE0F901F9018952E -:100B90009C0110926F0110927001109291011092BD -:100BA000920197FF04C082E080939B003F77832FE0 -:100BB0009927809398002093990088E980939A0060 -:100BC00086E080939D00089590919101809192011B -:100BD000981791F0E0919201EF5FEF71E09392012D -:100BE000FF27ED56FE4F20818091B3019927982F62 -:100BF0008827820F911D089580E091E00895382F95 -:100C000020916F012F5F2F71E22FFF2780917001DC -:100C100099278E179F07D1F3EF58FE4F308320930B -:100C20006F0180919A00806280939A000895DC01A0 -:100C30003C913323D1F0119620916F012F5F2F71DA -:100C4000E22FFF27809170019927E817F907D1F368 -:100C5000EF58FE4F308320936F0180919A0080629D -:100C600080939A003C91332331F70895FC018491DD -:100C70008823D1F0AF014F5F5F4F382F2091B4012F -:100C80002F5F2F71E22FFF278091B5019927E81779 -:100C9000F907D1F3EA54FE4F30832093B401559AFB -:100CA000FA018491882339F70895DC013C913323BC -:100CB000B1F011962091B4012F5F2F71E22FFF2721 -:100CC0008091B5019927E817F907D1F3EA54FE4F4F -:100CD00030832093B401559A3C91332351F7089502 -:100CE000FC0184918823F1F0AF014F5F5F4F382FF3 -:100CF00020916F012F5F2F71E22FFF2780917001EC -:100D00009927E817F907D1F3EF58FE4F3083209366 -:100D10006F0180919A00806280939A00FA01849119 -:100D2000882319F7089508950895FC01718360835D -:100D30000895FC01738362830895FC0175836483C5 -:100D400008952F923F924F925F926F927F928F926F -:100D50009F92AF92BF92CF92DF92EF92FF920F934A -:100D60001F93CF93DF93CDB7DEB724970FB6F894D8 -:100D7000DEBF0FBECDBF1C01FC01608171818827E1 -:100D800077FD8095982F0E94411F7B018C010E9466 -:100D9000052369837A838B839C83C801B7010E94F2 -:100DA000A2235B016C0181E491E00E94A507F1019F -:100DB00022813381821B930BAA2797FDA095BA2F1E -:100DC000BC01CD010E94411F3B014C0127ED33EBDB -:100DD0004DED5FEB69817A818B819C810E94231E9E -:100DE000A60195010E94C51D20E030E040E05FE3D0 -:100DF0000E94231E7B018C01F1016481758188278B -:100E000077FD8095982F0E94411F9B01AC01C8017E -:100E1000B7010E94231EA40193010E94F61D0E94A7 -:100E2000AA1FAB01BC0188E3482E81E0582E60E088 -:100E300070E0C2010E944F01F10164817581882731 -:100E400077FD8095982F0E94411F9B01AC01C60140 -:100E5000B5010E94231E9B01AC01C401B3010E9495 -:100E6000F61D0E94AA1FAB01BC0161E070E0C20147 -:100E70000E944F0127ED33EB4DED5FE369817A81ED -:100E80008B819C810E94231EA60195010E94C51D95 -:100E900020E030E040E05FE30E94231E7B018C01F4 -:100EA000F10164817581882777FD8095982F0E94D4 -:100EB000411F9B01AC01C801B7010E94231E9B0189 -:100EC000AC01C401B3010E94F61D0E94AA1FAB0130 -:100ED000BC0162E070E0C2010E944F0124960FB68F -:100EE000F894DEBF0FBECDBFDF91CF911F910F9160 -:100EF000FF90EF90DF90CF90BF90AF909F908F903A -:100F00007F906F905F904F903F902F900895FC01DD -:100F10001182108213821282158214820E94A1060D -:100F20000895FC01118210821382128215821482AC -:100F30000E94A1060895FC0171836083538342835C -:100F4000358324830E94A106089542960E94E31AE5 -:100F500008950F931F938C0142960E94E71AC801CF -:100F60000E944308C80184960E946C1C1F910F9137 -:100F700008950F931F938C0184960E945D1CC801F5 -:100F800042960E94D21BC8010E943E081F910F91F9 -:100F900008950F931F938C0184960E945D1CC801D5 -:100FA00042960E94D21BC8010E943E081F910F91D9 -:100FB00008950F931F938C010E941B08C80142964D -:100FC0000E94EA1BC80184960E94501C1F910F9139 -:100FD00008950F931F938C010E941B08C80142962D -:100FE0000E94EA1BC80184960E94501C1F910F9119 -:100FF0000895FC01118210828EE190E09383828338 -:101000008CE390E09583848384E690E097838683E5 -:1010100084EB90E09187808784E091E093878287DA -:101020008CE291E0958784878AE491E097878687B0 -:10103000118A108A0895FC01118210828EE190E0DD -:10104000938382838CE390E09583848384E690E0AD -:101050009783868384EB90E09187808784E091E09A -:10106000938782878CE291E0958784878AE491E078 -:1010700097878687118A108A089508950895FC013C -:101080008089918908950F931F93CF93DF93CDB7F4 -:10109000DEB760970FB6F894DEBF0FBECDBF8C01F0 -:1010A00060E088E391E00E9428019A83898361E0EF -:1010B00088E391E00E9428019C838B8362E088E3AF -:1010C00091E00E9428019E838D8363E088E391E094 -:1010D0000E94280198878F8364E088E391E00E9452 -:1010E00028019A87898765E088E391E00E942801BA -:1010F0009C878B8766E088E391E00E9428019E87A9 -:101100008D8767E088E391E00E942801988B8F87A4 -:1011100029813A8144E02030340714F020E034E0A3 -:101120004B815C8142175307ACF5E1E0F0E02D8183 -:101130003E812417350764F5E2E0F0E04F815885E1 -:10114000421753071CF5E3E0F0E029853A852417A0 -:101150003507D4F4E4E0F0E04B855C854217530793 -:101160008CF4E5E0F0E02D853E852417350744F446 -:10117000E6E0F0E0821793078CF4E7E0F0E00EC0C1 -:101180009A01F8CFA901EFCF9A01E6CFA901DDCFEF -:101190009A01D4CFA901E0E0F0E0C9CFEE0FFF1F24 -:1011A000E00FF11F80819181F801918B808B609617 -:1011B0000FB6F894DEBF0FBECDBFDF91CF911F9168 -:1011C0000F91089508950895089508950F931F931A -:1011D000CF93DF93DC0184B32D913C91119741E0D3 -:1011E00050E0FA01022E02C0EE0FFF1F0A94E2F750 -:1011F0008E2B84BB07E010E0021B130BED010A806D -:1012000002C0440F551F0A94E2F7342F309585B37E -:10121000832385BB25B383B380952823862F992705 -:10122000002E02C0959587950A94E2F78E23282B0D -:1012300025BB660F000085B3842B85BB85B3832354 -:1012400085BB25B383B380952823862F9927002E4D -:1012500002C0959587950A94E2F78E23282B25BB2B -:10126000660F000085B3842B85BB85B3832385BBC4 -:1012700025B383B380952823862F9927002E02C09B -:10128000959587950A94E2F78E23282B25BB660F48 -:10129000000085B3842B85BB85B3832385BB25B331 -:1012A00083B380952823862F9927002E02C0959519 -:1012B00087950A94E2F78E23282B25BB660F000042 -:1012C00085B3842B85BB85B3832385BB25B383B3CB -:1012D00080952823862F9927002E02C09595879503 -:1012E0000A94E2F78E23282B25BB660F000085B3F6 -:1012F000842B85BB85B3832385BB25B383B38095BE -:101300002823862F9927002E02C0959587950A9449 -:10131000E2F78E23282B25BB660F000085B3842BB4 -:1013200085BB85B3832385BB25B383B380952823F1 -:10133000862F9927002E02C0959587950A94E2F78B -:101340008E23282B25BB000085B3842B85BB85B35A -:10135000832385BB95B383B380959823660F772746 -:1013600002C0759567950A95E2F7E6239E2B95BB1B -:10137000000085B3482B45BBDF91CF911F910F91A2 -:101380000895FC0124B3A081B18161E070E0CB013C -:101390000A2E02C0880F991F0A94E2F7809528232D -:1013A00024BB028002C0660F771F0A94E2F7362F33 -:1013B000309585B3832385BB000085B3862B85BB21 -:1013C00043B385B3832385BB55270A2E02C05595A9 -:1013D00047950A94E2F741705070440F000085B3BE -:1013E000862B85BB83B325B3232325BB99270A2EE0 -:1013F00002C0959587950A94E2F78170482B440FB7 -:10140000000085B3862B85BB83B325B3232325BB7F -:1014100099270A2E02C0959587950A94E2F7817064 -:10142000482B440F000085B3862B85BB83B325B3BF -:10143000232325BB99270A2E02C0959587950A94E8 -:10144000E2F78170482B440F000085B3862B85BBE3 -:1014500083B325B3232325BB99270A2E02C0959574 -:1014600087950A94E2F78170482B440F000085B3FA -:10147000862B85BB83B325B3232325BB99270A2E4F -:1014800002C0959587950A94E2F78170482B440F26 -:10149000000085B3862B85BB83B325B3232325BBEF -:1014A00099270A2E02C0959587950A94E2F78170D4 -:1014B000482B440F000085B3682B65BB83B3992785 -:1014C00002C095958795AA95E2F78170482B842FE5 -:1014D00099270895CF93DF93FC0144B3C081D18154 -:1014E00021E030E0C9010C2E02C0880F991F0A9438 -:1014F000E2F7A82F482B44BB47E050E04C1B5D0BA4 -:10150000028002C0220F331F0A94E2F7322FE22F2B -:10151000E09585B38E2385BB25B383B380952823BF -:10152000862F9927042E02C0959587950A94E2F795 -:101530008A23282B25BB660F000085B3832B85BB30 -:1015400085B38E2385BB25B383B380952823862F4F -:101550009927042E02C0959587950A94E2F78A236D -:10156000282B25BB660F000085B3832B85BB85B375 -:101570008E2385BB25B383B380952823862F992797 -:10158000042E02C0959587950A94E2F78A23282BAA -:1015900025BB660F000085B3832B85BB85B38E23E7 -:1015A00085BB25B383B380952823862F9927042EE6 -:1015B00002C0959587950A94E2F78A23282B25BBCC -:1015C000660F000085B3832B85BB85B38E2385BB57 -:1015D00025B383B380952823862F9927042E02C034 -:1015E000959587950A94E2F78A23282B25BB660FE9 -:1015F000000085B3832B85BB85B38E2385BB25B3C4 -:1016000083B380952823862F9927042E02C09595B1 -:1016100087950A94E2F78A23282B25BB660F0000E2 -:1016200085B3832B85BB85B38E2385BB25B383B35D -:1016300080952823862F9927042E02C0959587959B -:101640000A94E2F78A23282B25BB000085B3832B5D -:1016500085BB85B38E2385BB95B383B380959823D3 -:10166000660F772702C0759567954A95E2F78A2F2E -:101670008623982B95BB000085B3832B85BB80E028 -:1016800090E00000019621E08C329207D1F784B3FC -:10169000A0958A2384BB85B38E2385BB000085B3C8 -:1016A000832B85BB43B385B38E2385BB55270C2E77 -:1016B00002C0559547950A94E2F741705070440F67 -:1016C000000085B3832B85BB83B325B32E2325BBB5 -:1016D00099270C2E02C0959587950A94E2F78170A0 -:1016E000482B440F000085B3832B85BB83B325B300 -:1016F0002E2325BB99270C2E02C0959587950A9419 -:10170000E2F78170482B440F000085B3832B85BB23 -:1017100083B325B32E2325BB99270C2E02C09595A4 -:1017200087950A94E2F78170482B440F000085B337 -:10173000832B85BB83B325B32E2325BB99270C2E82 -:1017400002C0959587950A94E2F78170482B440F63 -:10175000000085B3832B85BB83B325B32E2325BB24 -:1017600099270C2E02C0959587950A94E2F781700F -:10177000482B440F000085B3832B85BB83B325B36F -:101780002E2325BB99270C2E02C0959587950A9488 -:10179000E2F78170482B440F000085B3832B85BB93 -:1017A00083B3992702C095958795CA95E2F7817012 -:1017B000482B842F9927DF91CF910895EF92FF92C4 -:1017C0000F931F93CF93DF937C01606884B3E7018D -:1017D00028813981A1E0B0E0FD01022E02C0EE0FA8 -:1017E000FF1F0A94E2F78E2B84BB07E010E0021B78 -:1017F000130B0A8002C0AA0FBB1F0A94E2F73A2F0C -:10180000309585B3832385BB25B383B38095282387 -:10181000862F9927002E02C0959587950A94E2F7A6 -:101820008E23282B25BB660F000085B38A2B85BB32 -:1018300085B3832385BB25B383B380952823862F67 -:101840009927002E02C0959587950A94E2F78E237A -:10185000282B25BB660F000085B38A2B85BB85B37B -:10186000832385BB25B383B380952823862F9927AF -:10187000002E02C0959587950A94E2F78E23282BB7 -:1018800025BB660F000085B38A2B85BB85B38323F8 -:1018900085BB25B383B380952823862F9927002EF7 -:1018A00002C0959587950A94E2F78E23282B25BBD5 -:1018B000660F000085B38A2B85BB85B3832385BB68 -:1018C00025B383B380952823862F9927002E02C045 -:1018D000959587950A94E2F78E23282B25BB660FF2 -:1018E000000085B38A2B85BB85B3832385BB25B3D5 -:1018F00083B380952823862F9927002E02C09595C3 -:1019000087950A94E2F78E23282B25BB660F0000EB -:1019100085B38A2B85BB85B3832385BB25B383B36E -:1019200080952823862F9927002E02C095958795AC -:101930000A94E2F78E23282B25BB000085B38A2B5F -:1019400085BB85B3832385BB95B383B380959823EB -:10195000660F7727002E02C0759567950A94E2F707 -:101960008E2F8623982B95BB000085B38A2B85BBD1 -:1019700084B38E2B84BB85B3832385BB25B383B30C -:1019800080952823842F9927002E02C0959587954E -:101990000A94E2F78E23282B25BB440F000085B361 -:1019A0008A2B85BB85B3832385BB25B383B3809501 -:1019B0002823842F9927002E02C0959587950A9495 -:1019C000E2F78E23282B25BB440F000085B38A2B1A -:1019D00085BB85B3832385BB25B383B3809528233B -:1019E000842F9927002E02C0959587950A94E2F7D7 -:1019F0008E23282B25BB440F000085B38A2B85BB83 -:101A000085B3832385BB25B383B380952823842F97 -:101A10009927002E02C0959587950A94E2F78E23A8 -:101A2000282B25BB440F000085B38A2B85BB85B3CB -:101A3000832385BB25B383B380952823842F9927DF -:101A4000002E02C0959587950A94E2F78E23282BE5 -:101A500025BB440F000085B38A2B85BB85B3832348 -:101A600085BB25B383B380952823842F9927002E27 -:101A700002C0959587950A94E2F78E23282B25BB03 -:101A8000440F000085B38A2B85BB85B3832385BBB8 -:101A900025B383B380952823842F9927002E02C075 -:101AA000959587950A94E2F78E23282B25BB000095 -:101AB00085B38A2B85BB85B3832385BB95B383B35D -:101AC00080959823440F552702C0559547950A9550 -:101AD000E2F7E4239E2B95BB000085B38A2B85BBE0 -:101AE00080E090E000000196E1E08C329E07D1F7A3 -:101AF000DF91CF911F910F91FF90EF900895CF93B9 -:101B0000DF93FC0124B34081518161E070E0CB019F -:101B1000042E02C0880F991F0A94E2F7A82F282BE1 -:101B200024BBC7E0D0E0C41BD50BCB01028002C0B0 -:101B3000880F991F0A94E2F7582F482F409585B3D4 -:101B4000842385BB25B383B38095282380E890E068 -:101B50000C2E02C0959587950A94E2F73A2F382308 -:101B6000232B25BB000085B3852B85BB85B3842340 -:101B700085BB95B383B38095982395BB000085B34F -:101B8000852B85BB85B3842385BB95B383B38095B3 -:101B9000982395BB000085B3852B85BB85B3842333 -:101BA00085BB95B383B38095982395BB000085B31F -:101BB000852B85BB85B3842385BB95B383B3809583 -:101BC000982395BB000085B3852B85BB85B3842303 -:101BD00085BB95B383B38095982395BB000085B3EF -:101BE000852B85BB85B3842385BB95B383B3809553 -:101BF000982395BB000085B3852B85BB85B38423D3 -:101C000085BB95B383B38095982395BB000085B3BE -:101C1000852B85BB84B38A2B84BB85B3842385BB8A -:101C200095B383B3809598230C2E02C07595679564 -:101C30000A94E2F78A2F8623982B95BB000085B380 -:101C4000852B85BB85B3842385BB25B383B3809562 -:101C5000282382E090E00C2E02C0959587950A9487 -:101C6000E2F78A23282B25BB000085B3852B85BB93 -:101C700085B3842385BB25B383B38095282384E073 -:101C800090E00C2E02C0959587950A94E2F78A237E -:101C9000282B25BB000085B3852B85BB85B384230A -:101CA00085BB25B383B38095282388E090E00C2E74 -:101CB00002C0959587950A94E2F78A23282B25BBC5 -:101CC000000085B3852B85BB85B3842385BB25B3F5 -:101CD00083B38095282380E190E00C2E02C0959577 -:101CE00087950A94E2F78A23282B25BB000085B349 -:101CF000852B85BB85B3842385BB25B383B38095B2 -:101D0000282380E290E00C2E02C0959587950A94D6 -:101D1000E2F78A23282B25BB000085B3852B85BBE2 -:101D200085B3842385BB25B383B38095282380E4C2 -:101D300090E00C2E02C0959587950A94E2F78A23CD -:101D4000282B25BB000085B3852B85BB85B3842359 -:101D500085BB95B383B380959823932B95BB0000E7 -:101D600085B3852B85BB80E090E00000019621E0E3 -:101D70008C329207D1F784B38A2B84BB85B384233A -:101D800085BB25B383B38095282388E890E00C2E8B -:101D900002C0959587950A94E2F78A23282B25BBE4 -:101DA000000085B3852B85BB85B3842385BB25B314 -:101DB00083B38095282380E190E00C2E02C0959596 -:101DC00087950A94E2F78A23282B25BB000085B368 -:101DD000852B85BB85B3842385BB25B383B38095D1 -:101DE000282380E290E00C2E02C0959587950A94F6 -:101DF000E2F78A23282B25BB000085B3852B85BB02 -:101E000085B3842385BB25B383B38095282380E4E1 -:101E100090E00C2E02C0959587950A94E2F78A23EC -:101E2000282B25BB000085B3852B85BB85B3842378 -:101E300085BB25B383B38095282380E890E002C05A -:101E400095958795CA95E2F78A23282B25BB000034 -:101E500085B3852B85BB85B3842385BB95B383B3BD -:101E60008095982395BB000085B3852B85BB85B3F2 -:101E7000842385BB95B383B38095982395BB0000DD -:101E800085B3852B85BB85B3842385BB95B383B38D -:101E90008095982395BB000085B3852B85BB84B3C3 -:101EA000A82BA4BB85B3842385BB95B383B380954E -:101EB000982395BB000085B3852B85BB85B3842310 -:101EC00085BB95B383B38095982395BB000085B3FC -:101ED000852B85BB85B3842385BB95B383B3809560 -:101EE000982395BB000085B3852B85BB85B38423E0 -:101EF00085BB95B383B38095982395BB000085B3CC -:101F0000852B85BB85B3842385BB95B383B380952F -:101F1000982395BB000085B3852B85BB85B38423AF -:101F200085BB95B383B38095982395BB000085B39B -:101F3000852B85BB85B3842385BB95B383B38095FF -:101F4000982395BB000085B3852B85BB85B384237F -:101F500085BB95B383B38095982395BB000085B36B -:101F6000852B85BB80E090E00000019621E08C325B -:101F70009207D1F781E08093F901DF91CF91089525 -:101F8000FC0120E030E080E090E00000019645E0B8 -:101F90008D379407D1F72F5F3F4F2436310599F7DE -:101FA00084B321E030E0028002C0220F331F0A9484 -:101FB000E2F7322F822B84BB85B3622F6095862394 -:101FC00085BB40E050E080E090E00000019625E015 -:101FD0008D379207D1F74F5F5F4F4A30510599F720 -:101FE00024B34081518181E090E0042E02C0880F2B -:101FF000991F0A94E2F7782F282B24BBE7E0F0E042 -:10200000E41BF50B85B3862385BB25B383B380958D -:10201000282380E890E00E2E02C0959587950A94BB -:10202000E2F7472F4823242B25BB000085B3832BE1 -:1020300085BB85B3862385BB95B383B380959823F1 -:1020400095BB000085B3832B85BB85B3862385BBF9 -:1020500095B383B38095982395BB000085B3832BFC -:1020600085BB85B3862385BB95B383B380959823C1 -:1020700095BB000085B3832B85BB85B3862385BBC9 -:1020800095B383B38095982395BB000085B3832BCC -:1020900085BB85B3862385BB95B383B38095982391 -:1020A00095BB000085B3832B85BB85B3862385BB99 -:1020B00095B383B38095982395BB000085B3832B9C -:1020C00085BB85B3862385BB95B383B38095982361 -:1020D00095BB000085B3832B85BB84B3872B84BB62 -:1020E00085B3862385BB95B383B380959823942BC2 -:1020F00095BB000085B3832B85BB85B3862385BB49 -:1021000095B383B38095982395BB000085B3832B4B -:1021100085BB85B3862385BB95B383B38095982310 -:1021200095BB000085B3832B85BB85B3862385BB18 -:1021300095B383B38095982395BB000085B3832B1B -:1021400085BB85B3862385BB95B383B380959823E0 -:1021500095BB000085B3832B85BB85B3862385BBE8 -:1021600095B383B38095982395BB000085B3832BEB -:1021700085BB85B3862385BB95B383B380959823B0 -:1021800095BB000085B3832B85BB85B3862385BBB8 -:1021900095B383B38095982395BB000085B3832BBB -:1021A00085BB80E090E00000019621E08C32920730 -:1021B000D1F784B3872B84BB85B3862385BB25B336 -:1021C00083B38095282380E890E00E2E02C0959579 -:1021D00087950A94E2F78723282B25BB000085B357 -:1021E000832B85BB85B3862385BB95B383B380954D -:1021F000982395BB000085B3832B85BB85B38623CD -:1022000085BB95B383B38095982395BB000085B3B8 -:10221000832B85BB85B3862385BB95B383B380951C -:10222000982395BB000085B3832B85BB85B386239C -:1022300085BB95B383B38095982395BB000085B388 -:10224000832B85BB85B3862385BB95B383B38095EC -:10225000982395BB000085B3832B85BB85B386236C -:1022600085BB95B383B38095982395BB000085B358 -:10227000832B85BB85B3862385BB95B383B38095BC -:10228000982395BB000085B3832B85BB84B3872B34 -:1022900084BB85B3862385BB25B383B38095282370 -:1022A00081E090E00E2E02C0959587950A94E2F7A2 -:1022B0008723282B25BB000085B3832B85BB85B3E3 -:1022C000862385BB25B383B38095282382E090E0E5 -:1022D0000E2E02C0959587950A94E2F78723282B46 -:1022E00025BB000085B3832B85BB85B3862385BBC7 -:1022F00025B383B38095282384E090E00E2E02C09E -:10230000959587950A94E2F78723282B25BB000033 -:1023100085B3832B85BB85B3862385BB25B383B368 -:102320008095282388E090E00E2E02C09595879531 -:102330000A94E2F78723282B25BB000085B3832B63 -:1023400085BB85B3862385BB25B383B380952823BE -:1023500080E190E00E2E02C0959587950A94E2F7F1 -:102360008723282B25BB000085B3832B85BB85B332 -:10237000862385BB25B383B38095282380E290E034 -:102380000E2E02C0959587950A94E2F78723282B95 -:1023900025BB000085B3832B85BB85B3862385BB16 -:1023A00025B383B38095282380E490E002C09595FF -:1023B0008795EA95E2F77823272B25BB000085B3A4 -:1023C000832B85BB85B3682365BB95B383B38095A9 -:1023D0009823942B95BB000085B3382B35BB80E048 -:1023E00090E00000019641E08C329407D1F7089507 -:1023F000EF92FF920F931F93FC0144B3A081B18130 -:1024000021E030E0C9010A2E02C0880F991F0A940A -:10241000E2F7182F482B44BB47E050E04A1B5B0B08 -:10242000028002C0220F331F0A94E2F7722F622F3C -:10243000609585B3862385BB35B323B388E090E0F0 -:10244000042E02C0959587950A94E2F7F12EF822A2 -:10245000209532233F2935BB000085B3872B85BBF0 -:1024600085B3862385BB35B323B380E190E0042E8A -:1024700002C0959587950A94E2F7E12EE82220950F -:1024800032233E2935BB000085B3872B85BB85B33E -:10249000862385BB35B323B380E290E0042E02C0CF -:1024A000959587950A94E2F7012F0823209532230A -:1024B000302B35BB000085B3872B85BB85B38623C6 -:1024C00085BB35B323B380E490E0042E02C095951C -:1024D00087950A94E2F7F12FF823209532233F2BBA -:1024E00035BB000085B3872B85BB85B3862385BBB1 -:1024F00035B323B380E890E002C0959587954A955F -:10250000E2F7E12FE823209532233E2B35BB000074 -:1025100085B3872B85BB85B3862385BB95B383B3F2 -:102520008095982395BB000085B3872B85BB85B329 -:10253000862385BB95B383B38095982395BB000014 -:1025400085B3872B85BB85B3862385BB95B383B3C2 -:102550008095982395BB000085B3872B85BB80E0D1 -:1025600090E00000019621E08C329207D1F784B30D -:10257000312F3095832384BB85B3862385BB000030 -:1025800085B3872B85BB43B385B3862385BB55278E -:102590000A2E02C0559547950A94E2F74170507093 -:1025A000440F000085B3872B85BB83B325B3262357 -:1025B00025BB99270A2E02C0959587950A94E2F7C4 -:1025C0008170482B440F000085B3872B85BB83B3F4 -:1025D00025B3262325BB99270A2E02C095958795FA -:1025E0000A94E2F78170482B440F000085B3872BD3 -:1025F00085BB83B325B3262325BB99270A2E02C0AA -:10260000959587950A94E2F78170482B440F000056 -:1026100085B3872B85BB83B325B3262325BB992799 -:102620000A2E02C0959587950A94E2F78170482B8F -:10263000440F000085B3872B85BB83B325B32623C6 -:1026400025BB99270A2E02C0959587950A94E2F733 -:102650008170482B440F000085B3872B85BB83B363 -:1026600025B3262325BB99270A2E02C09595879569 -:102670000A94E2F78170482B440F000085B3872B42 -:1026800085BB83B399270A2E02C0959587950A9436 -:10269000E2F78170482B5527242F8091F901813072 -:1026A00009F00BC147FD07C184B3812B84BB85B3FF -:1026B000862385BB95B383B3809598239F2995BBCB -:1026C000000085B3872B85BB85B3862385BB95B377 -:1026D00083B3809598239E2995BB000085B3872BF3 -:1026E00085BB85B3862385BB95B383B3809598233B -:1026F000902B95BB000085B3872B85BB85B38623C4 -:1027000085BB95B383B3809598239F2B95BB000021 -:1027100085B3872B85BB85B3862385BB95B383B3F0 -:10272000809598239E2B95BB000085B3872B85BB96 -:1027300085B3862385BB95B383B38095982395BBDA -:10274000000085B3872B85BB85B3862385BB95B3F6 -:1027500083B38095982395BB000085B3872B85BBF9 -:1027600085B3862385BB95B383B38095982395BBAA -:10277000000085B3872B85BB80E090E000000196C8 -:1027800021E08C329207D1F784B3832384BB85B3D5 -:10279000862385BB000085B3872B85BB43B385B3F8 -:1027A000862385BB55270A2E02C0559547950A9466 -:1027B000E2F741705070440F000085B3872B85BB52 -:1027C00083B325B3262325BB99270A2E02C09595EE -:1027D00087950A94E2F78170482B440F000085B377 -:1027E000872B85BB83B325B3262325BB99270A2EC8 -:1027F00002C0959587950A94E2F78170482B440FA3 -:10280000000085B3872B85BB83B325B3262325BB67 -:1028100099270A2E02C0959587950A94E2F7817050 -:10282000482B440F000085B3872B85BB83B325B3AA -:10283000262325BB99270A2E02C0959587950A94D1 -:10284000E2F78170482B440F000085B3872B85BBCE -:1028500083B325B3262325BB99270A2E02C095955D -:1028600087950A94E2F78170482B440F000085B3E6 -:10287000872B85BB83B325B3262325BB99270A2E37 -:1028800002C0959587950A94E2F78170482B440F12 -:10289000000085B3872B85BB83B399270A2E02C01E -:1028A000959587950A94E2F78170482B842F992794 -:1028B000282F87FFF9CE1092F901822F992787FDE3 -:1028C00090951F910F91FF90EF900895FC0144B3F4 -:1028D000A081B18121E030E0C9010A2E02C0880F39 -:1028E000991F0A94E2F7782F482B44BB47E050E049 -:1028F0004A1B5B0B028002C0220F331F0A94E2F7CF -:10290000322F622F609585B3862385BB25B383B3B1 -:102910008095282384E090E0042E02C09595879549 -:102920000A94E2F78723282B25BB000085B3832B6D -:1029300085BB85B3862385BB25B383B380952823C8 -:1029400088E090E0042E02C0959587950A94E2F7FE -:102950008723282B25BB000085B3832B85BB85B33C -:10296000862385BB25B383B38095282380E190E03F -:10297000042E02C0959587950A94E2F78723282BA9 -:1029800025BB000085B3832B85BB85B3862385BB20 -:1029900025B383B38095282380E290E0042E02C003 -:1029A000959587950A94E2F78723282B25BB00008D -:1029B00085B3832B85BB85B3862385BB25B383B3C2 -:1029C0008095282380E490E0042E02C09595879599 -:1029D0000A94E2F78723282B25BB000085B3832BBD -:1029E00085BB85B3862385BB25B383B38095282318 -:1029F00080E890E002C0959587954A95E2F7872395 -:102A0000282B25BB000085B3832B85BB85B386238C -:102A100085BB95B383B38095982395BB000085B3A0 -:102A2000832B85BB85B3862385BB95B383B3809504 -:102A3000982395BB000085B3832B85BB80E090E095 -:102A40000000019621E08C329207D1F784B3709593 -:102A5000872384BB85B3862385BB000085B3832B86 -:102A600085BB43B385B3862385BB55270A2E02C099 -:102A7000559547950A94E2F741705070440F000055 -:102A800085B3832B85BB83B325B3262325BB992729 -:102A90000A2E02C0959587950A94E2F78170482B1B -:102AA000440F000085B3832B85BB83B325B3262356 -:102AB00025BB99270A2E02C0959587950A94E2F7BF -:102AC0008170482B440F000085B3832B85BB83B3F3 -:102AD00025B3262325BB99270A2E02C095958795F5 -:102AE0000A94E2F78170482B440F000085B3832BD2 -:102AF00085BB83B325B3262325BB99270A2E02C0A5 -:102B0000959587950A94E2F78170482B440F000051 -:102B100085B3832B85BB83B325B3262325BB992798 -:102B20000A2E02C0959587950A94E2F78170482B8A -:102B3000440F000085B3832B85BB83B325B32623C5 -:102B400025BB99270A2E02C0959587950A94E2F72E -:102B50008170482B440F000085B3832B85BB83B362 -:102B6000992702C095958795AA95E2F78170482B21 -:102B7000842F99270895FC0144B3A081B18121E0FD -:102B800030E0C9010A2E02C0880F991F0A94E2F7AB -:102B9000782F482B44BB47E050E04A1B5B0B028078 -:102BA00002C0220F331F0A94E2F7322F622F609582 -:102BB00085B3862385BB25B383B38095282382E024 -:102BC00090E0042E02C0959587950A94E2F787233A -:102BD000282B25BB000085B3832B85BB85B38623BB -:102BE00085BB25B383B38095282384E090E0042E31 -:102BF00002C0959587950A94E2F78723282B25BB79 -:102C0000000085B3832B85BB85B3862385BB25B3A5 -:102C100083B38095282388E090E0042E02C0959528 -:102C200087950A94E2F78723282B25BB000085B3FC -:102C3000832B85BB85B3862385BB25B383B3809562 -:102C4000282380E190E0042E02C0959587950A9490 -:102C5000E2F78723282B25BB000085B3832B85BB98 -:102C600085B3862385BB25B383B38095282380E273 -:102C700090E0042E02C0959587950A94E2F7872389 -:102C8000282B25BB000085B3832B85BB85B386230A -:102C900085BB25B383B38095282380E490E0042E80 -:102CA00002C0959587950A94E2F78723282B25BBC8 -:102CB000000085B3832B85BB85B3862385BB25B3F5 -:102CC00083B38095282380E890E002C0959587958E -:102CD0004A95E2F78723282B25BB000085B3832B79 -:102CE00085BB85B3862385BB95B383B38095982335 -:102CF00095BB000085B3832B85BB80E090E000008E -:102D0000019621E08C329207D1F784B37095872326 -:102D100084BB85B3862385BB000085B3832B85BB2D -:102D200043B385B3862385BB55270A2E02C055952C -:102D300047950A94E2F741705070440F000085B344 -:102D4000832B85BB83B325B3262325BB99270A2E66 -:102D500002C0959587950A94E2F78170482B440F3D -:102D6000000085B3832B85BB83B325B3262325BB06 -:102D700099270A2E02C0959587950A94E2F78170EB -:102D8000482B440F000085B3832B85BB83B325B349 -:102D9000262325BB99270A2E02C0959587950A946C -:102DA000E2F78170482B440F000085B3832B85BB6D -:102DB00083B325B3262325BB99270A2E02C09595F8 -:102DC00087950A94E2F78170482B440F000085B381 -:102DD000832B85BB83B325B3262325BB99270A2ED6 -:102DE00002C0959587950A94E2F78170482B440FAD -:102DF000000085B3832B85BB83B325B3262325BB76 -:102E000099270A2E02C0959587950A94E2F781705A -:102E1000482B440F000085B3832B85BB83B39927D0 -:102E200002C095958795AA95E2F78170482B842F6B -:102E300099270895FC0144B3A081B18121E030E0DD -:102E4000C9010A2E02C0880F991F0A94E2F7782F51 -:102E5000482B44BB47E050E04A1B5B0B028002C09A -:102E6000220F331F0A94E2F7322F622F609585B349 -:102E7000862385BB25B383B38095282383E090E028 -:102E8000042E02C0959587950A94E2F78723282B94 -:102E900025BB000085B3832B85BB85B3862385BB0B -:102EA00025B383B38095282386E090E0042E02C0EA -:102EB000959587950A94E2F78723282B25BB000078 -:102EC00085B3832B85BB85B3862385BB25B383B3AD -:102ED000809528238CE090E0042E02C0959587957C -:102EE0000A94E2F78723282B25BB000085B3832BA8 -:102EF00085BB85B3862385BB25B383B38095282303 -:102F000088E190E0042E02C0959587950A94E2F737 -:102F10008723282B25BB000085B3832B85BB85B376 -:102F2000862385BB25B383B38095282380E390E077 -:102F3000042E02C0959587950A94E2F78723282BE3 -:102F400025BB000085B3832B85BB85B3862385BB5A -:102F500025B383B38095282380E690E0042E02C039 -:102F6000959587950A94E2F78723282B25BB0000C7 -:102F700085B3832B85BB85B3862385BB25B383B3FC -:102F80008095282380EC90E0042E02C095958795CB -:102F90000A94E2F78723282B25BB000085B3832BF7 -:102FA00085BB85B3862385BB25B383B38095282352 -:102FB00080E890E002C0959587954A95E2F78723CF -:102FC000282B25BB000085B3832B85BB80E090E0D8 -:102FD0000000019621E08C329207D1F784B37095FE -:102FE000872384BB85B3862385BB000085B3832BF1 -:102FF00085BB43B385B3862385BB55270A2E02C004 -:10300000559547950A94E2F741705070440F0000BF -:1030100085B3832B85BB83B325B3262325BB992793 -:103020000A2E02C0959587950A94E2F78170482B85 -:10303000440F000085B3832B85BB83B325B32623C0 -:1030400025BB99270A2E02C0959587950A94E2F729 -:103050008170482B440F000085B3832B85BB83B35D -:1030600025B3262325BB99270A2E02C0959587955F -:103070000A94E2F78170482B440F000085B3832B3C -:1030800085BB83B325B3262325BB99270A2E02C00F -:10309000959587950A94E2F78170482B440F0000BC -:1030A00085B3832B85BB83B325B3262325BB992703 -:1030B0000A2E02C0959587950A94E2F78170482BF5 -:1030C000440F000085B3832B85BB83B325B3262330 -:1030D00025BB99270A2E02C0959587950A94E2F799 -:1030E0008170482B440F000085B3832B85BB83B3CD -:1030F000992702C095958795AA95E2F78170482B8C -:10310000842F99270895FC01672B09F03FC284E0C2 -:1031100090E09183808386E090E09383828320E037 -:1031200030E080E090E00000019645E08D379407A4 -:10313000D1F72F5F3F4F2436310599F784B321E053 -:1031400030E0028002C0220F331F0A94E2F7322FD0 -:10315000822B84BB85B3622F6095862385BB40E0BC -:1031600050E080E090E00000019625E08D37920766 -:10317000D1F74F5F5F4F4A30510599F724B3408133 -:10318000518181E090E0042E02C0880F991F0A94BB -:10319000E2F7782F282B24BBE7E0F0E0E41BF50BE7 -:1031A00085B3862385BB25B383B38095282380E828 -:1031B00090E00E2E02C0959587950A94E2F7472F6E -:1031C0004823242B25BB000085B3832B85BB85B307 -:1031D000862385BB95B383B38095982395BB000068 -:1031E00085B3832B85BB85B3862385BB95B383B31A -:1031F0008095982395BB000085B3832B85BB85B351 -:10320000862385BB95B383B38095982395BB000037 -:1032100085B3832B85BB85B3862385BB95B383B3E9 -:103220008095982395BB000085B3832B85BB85B320 -:10323000862385BB95B383B38095982395BB000007 -:1032400085B3832B85BB85B3862385BB95B383B3B9 -:103250008095982395BB000085B3832B85BB85B3F0 -:10326000862385BB95B383B38095982395BB0000D7 -:1032700085B3832B85BB84B3872B84BB85B386231F -:1032800085BB95B383B380959823942B95BB0000A1 -:1032900085B3832B85BB85B3862385BB95B383B369 -:1032A0008095982395BB000085B3832B85BB85B3A0 -:1032B000862385BB95B383B38095982395BB000087 -:1032C00085B3832B85BB85B3862385BB95B383B339 -:1032D0008095982395BB000085B3832B85BB85B370 -:1032E000862385BB95B383B38095982395BB000057 -:1032F00085B3832B85BB85B3862385BB95B383B309 -:103300008095982395BB000085B3832B85BB85B33F -:10331000862385BB95B383B38095982395BB000026 -:1033200085B3832B85BB85B3862385BB95B383B3D8 -:103330008095982395BB000085B3832B85BB80E0E7 -:1033400090E00000019621E08C329207D1F784B31F -:10335000872B84BB85B3862385BB25B383B3809538 -:10336000282380E890E00E2E02C0959587950A9458 -:10337000E2F78723282B25BB000085B3832B85BB71 -:1033800085B3862385BB95B383B38095982395BB7E -:10339000000085B3832B85BB85B3862385BB95B39E -:1033A00083B38095982395BB000085B3832B85BBA1 -:1033B00085B3862385BB95B383B38095982395BB4E -:1033C000000085B3832B85BB85B3862385BB95B36E -:1033D00083B38095982395BB000085B3832B85BB71 -:1033E00085B3862385BB95B383B38095982395BB1E -:1033F000000085B3832B85BB85B3862385BB95B33E -:1034000083B38095982395BB000085B3832B85BB40 -:1034100085B3862385BB95B383B38095982395BBED -:10342000000085B3832B85BB84B3872B84BB85B316 -:10343000862385BB25B383B38095282381E090E064 -:103440000E2E02C0959587950A94E2F78723282BC4 -:1034500025BB000085B3832B85BB85B3862385BB45 -:1034600025B383B38095282382E090E00E2E02C01E -:10347000959587950A94E2F78723282B25BB0000B2 -:1034800085B3832B85BB85B3862385BB25B383B3E7 -:103490008095282384E090E00E2E02C095958795B4 -:1034A0000A94E2F78723282B25BB000085B3832BE2 -:1034B00085BB85B3862385BB25B383B3809528233D -:1034C00088E090E00E2E02C0959587950A94E2F769 -:1034D0008723282B25BB000085B3832B85BB85B3B1 -:1034E000862385BB25B383B38095282380E190E0B4 -:1034F0000E2E02C0959587950A94E2F78723282B14 -:1035000025BB000085B3832B85BB85B3862385BB94 -:1035100025B383B38095282380E290E00E2E02C06D -:10352000959587950A94E2F78723282B25BB000001 -:1035300085B3832B85BB85B3862385BB25B383B336 -:103540008095282380E490E002C095958795EA95C0 -:10355000E2F77823272B25BB000085B3832B85BB9F -:1035600085B3682365BB95B383B380959823942B6B -:1035700095BB000085B3382B35BB80E090E00000A0 -:10358000019641E08C329407D1F7089585E090E0F0 -:103590009183808387E090E093838283C0CDFC0198 -:1035A00060857185828593850E94AA1FDC01CB010D -:1035B0000895FC0164857585868597850E94AA1FFC -:1035C000DC01CB010895FC018089918908952F9237 -:1035D0003F924F925F926F927F928F929F92AF92A3 -:1035E000BF92CF92DF92EF92FF920F931F93CF93F0 -:1035F000DF93CDB7DEB725970FB6F894DEBF0FBEC9 -:10360000CDBF1C010E941A17E82EC1010E94BB15F4 -:10361000482E84E0882E912C820C931CC4010E94B9 -:103620001A17A82EC4010E94BB158983F101608975 -:103630007189635D7F4F882777FD8095982F0E9461 -:10364000411F6A837B838C839D83FF240027F7FCC3 -:103650000095102FC801B7010E94411F7B018C010A -:103660006A817B818C819D810E94A2239B01AC0198 -:10367000C801B7010E94231E3B014C01BB24CC248E -:10368000B7FCC094DC2CC601B5010E94411F7B0130 -:103690008C016A817B818C819D810E9405239B0125 -:1036A000AC01C801B7010E94231E9B01AC01C401FB -:1036B000B3010E94F61D20E030E040E05FE30E948D -:1036C000231E9B01AC01F101608571858285938584 -:1036D0000E94F61DF10160877187828793875524C8 -:1036E000662457FC6094762CC301B2010E94411FEE -:1036F0007B018C016A817B818C819D810E94A22348 -:103700009B01AC01C801B7010E94231E5B016C0143 -:10371000F9816F2F7727882777FD8095982F0E9452 -:10372000411F7B018C016A817B818C819D810E947C -:1037300005239B01AC01C801B7010E94231E9B0118 -:10374000AC01C601B5010E94F61D20E030E040E06A -:103750005FE30E94231E9B01AC01F1016485758526 -:10376000868597850E94F61DF10164877587868797 -:10377000978725960FB6F894DEBF0FBECDBFDF91B9 -:10378000CF911F910F91FF90EF90DF90CF90BF905E -:10379000AF909F908F907F906F905F904F903F90F1 -:1037A0002F9008950F931F938C0104960E94E508B3 -:1037B000C8010E94E5081F910F9108950F931F9370 -:1037C0008C0104960E94E508C8010E94E5081F913B -:1037D0000F910895EF92FF920F931F938C010E9417 -:1037E000E30894E0E92EF12CE00EF11EC7010E94DF -:1037F000E30860E070E0C8010E94831861E070E0B7 -:10380000C7010E94831880E090E0A0E0B0E0F801DA -:1038100080879187A287B38784879587A687B78794 -:10382000118A108A1F910F91FF90EF900895EF92E7 -:10383000FF920F931F938C010E94E30824E0E22E75 -:10384000F12CE00EF11EC7010E94E30860E070E079 -:10385000C8010E94831861E070E0C7010E948318CC -:1038600080E090E0A0E0B0E0F80180879187A28737 -:10387000B38784879587A687B787118A108A1F9197 -:103880000F91FF90EF900895FC018FEF9FEF9183D0 -:10389000808393838283958384839783868308952B -:1038A000FC018FEF9FEF91838083938382839583C5 -:1038B000848397838683089508950895FB01643077 -:1038C000710538F4EE0FFF1FE80FF91F8081918119 -:1038D00008958FEF9FEF0895EF92FF920F931F933C -:1038E0007C0108E311E060E070E0C8010E9415026D -:1038F000F7019183808361E070E0C8010E941502A6 -:10390000F7019383828362E070E0C8010E94150290 -:10391000F7019583848363E070E0C8010E9415027B -:10392000F701978386831F910F91FF90EF90089581 -:10393000A0E0B0E0EEE9FCE10C94CC22FC016A01CD -:103940009081923008F41BC1DB018C91823080F0B1 -:10395000943061F4843009F012C19181EB018981C6 -:10396000981709F40CC1E9E2F1E009C1843011F4BF -:10397000FB0105C1823091F4923009F000C1EA01E7 -:10398000DF0188E00D9009928150E1F78181FB0110 -:1039900091818923E6018983F601F1C0923041F3D8 -:1039A00062807380EB018A809B80E480F5800681D1 -:1039B00017812C813D814E815F815301A818B90880 -:1039C000C501B7FCABC080970CF457C086149704B0 -:1039D0000CF4BEC03401EE24FF2487019181FB0169 -:1039E0008181981709F4A6C0992309F49CC02E1967 -:1039F0003F09400B510B57FDB0C0E60119827B8295 -:103A00006A82F6012483358346835783E6012C813D -:103A10003D814E815F8179018A01DA01C9010197F7 -:103A2000A109B1098F5F9F4FAF4FBF43F8F4E60183 -:103A30006A817B81A8019701220F331F441F551F04 -:103A40006150704079018A01DA01C9010197A10929 -:103A5000B1098F5F9F4FAF4FBF4360F3E6017B8398 -:103A60006A83F601248335834683578383E0D60136 -:103A70008C9357FD39C0F60182C086149704B4F4C4 -:103A8000C0E0D0E0DA01C90181709070A070B07020 -:103A90005695479537952795282B392B4A2B5B2B25 -:103AA0002196AC16BD0671F78A0C9B1C681479042C -:103AB0000CF094CFC0E0D0E05401A618B708D801AC -:103AC000C70181709070A070B07016950795F7943B -:103AD000E794E82AF92A0A2B1B2B2196AC16BD067F -:103AE00071F76A0C7B1C7ACFDA01C901B695A795EC -:103AF000979587952170307040705070282B392B26 -:103B00004A2B5B2BE6012C833D834E835F838A81A6 -:103B10009B8101969B838A83F60131C08827992770 -:103B20008A199B0950CFE21AF30A040B150BA8015E -:103B3000970161CFE60199837B826A822E0D3F1D3A -:103B4000401F511FF60124833583468357838ECF50 -:103B500020E030E040E050E041CF81E0E6018983A1 -:103B60007B826A8250954095309521953F4F4F4F0B -:103B70005F4FF601248335834683578347CFCF01B8 -:103B8000EEE0CDB7DEB70C94E822A0E2B0E0EBECBB -:103B9000FDE10C94D42269837A838B839C832D83EB -:103BA0003E834F83588789E1E82EF12CEC0EFD1EF1 -:103BB000B701CE0101960E941C218E010F5E1F4F9E -:103BC000B801CE0105960E941C218A8991E08927BF -:103BD0008A8BAE01475F5F4FB801C7010E94981CF6 -:103BE0000E94FA1FE6E0A0960C94F022A0E2B0E05A -:103BF000ECEFFDE10C94D42269837A838B839C8360 -:103C00002D833E834F83588799E1E92EF12CEC0EEA -:103C1000FD1EB701CE0101960E941C218E010F5E90 -:103C20001F4FB801CE0105960E941C21AE01475FCF -:103C30005F4FB801C7010E94981C0E94FA1FE6E07E -:103C4000A0960C94F022A0E2B0E0E9E2FEE10C9430 -:103C5000C82269837A838B839C832D833E834F8321 -:103C600058878E01075E1F4FB801CE0101960E9452 -:103C70001C21F1E1EF2EF12CEC0EFD1EB701CE015F -:103C800005960E941C21898D823078F099899230A6 -:103C900040F420E09A8D8A89981321E02A8BB7019D -:103CA000E9C0843051F4923061F020E09A8D8A8925 -:103CB000981321E02A8FB801DDC0943029F48230B6 -:103CC00041F769E271E0D6C0823079F3923009F3AE -:103CD0002D8D3E8D4F8D58A18D899E89AF89B88DD0 -:103CE000222433242101AA24BB246501EE24FF24CD -:103CF000870160E070E00DC06F5F7F4F603271053B -:103D000099F1880F991FAA1FBB1F569547953795A4 -:103D1000279520FF19C0280E391E4A1E5B1E6624F7 -:103D200077244301281639064A065B0628F4E1E0A9 -:103D30006E2E712C812C912CAE0CBF1CC01ED11E7E -:103D4000A60CB71CC81CD91CEE0CFF1C001F111FB1 -:103D5000B7FFD2CFE1E06E2E712C812C912CE6289A -:103D6000F72808291929C8CF8B8D9C8D2B893C8970 -:103D7000820F931F02969C878B871A869A8D8A8959 -:103D8000981711F081E08A87D7FE17C08B859C8534 -:103D9000A0FE0CC0569447943794279420E030E05E -:103DA00040E050E8222A332A442A552AD694C79460 -:103DB000B794A79401969C878B8730E0A31630E0D8 -:103DC000B30630E0C30630E4D30618F58B859C8536 -:103DD0000EC0220C331C441C551C019720E0A21677 -:103DE00020E0B20620E0C20620E4D20680F4AA0C4D -:103DF000BB1CCC1CDD1C57FEECCF31E0632E712CBC -:103E0000812C912CA628B728C828D928E2CF9C87D6 -:103E10008B87D601C5018F779070A070B070803409 -:103E20009105A105B10551F0AD86BE86CF86D88A31 -:103E300083E08987BE01675F7F4F1CC0A7FCF4CF7A -:103E4000211431044104510479F380E490E0A0E0AE -:103E5000B0E0A80EB91ECA1EDB1E80E8682E8FEFE8 -:103E6000782E8FEF882E8FEF982EA620B720C820AF -:103E7000D920DACFCB010E94FA1FE2E1A0960C9480 -:103E8000E422A8E0B0E0E7E4FFE10C94D7229B0134 -:103E9000AC0183E089831A8257FD51C02115310599 -:103EA0004105510539F482E08983CE0101960E94D3 -:103EB000FA1F4CC0EEE1F0E0FC83EB838A8188239B -:103EC000C9F1203010E0310710E0410710E8510738 -:103ED000C9F188279927DC01821B930BA40BB50B32 -:103EE0008D839E83AF83B8872D813E814F81588516 -:103EF000203080E0380780E0480780E45807A8F6C3 -:103F0000EB81FC81DA01C901880F991FAA1FBB1F31 -:103F100031979C01AD01803010E0910710E0A107BE -:103F200010E4B10778F3FC83EB838D839E83AF832A -:103F3000B887BBCF2D833E834F835887D5CF81E091 -:103F40008A83ACCF60E070E080E09FECE3E02896ED -:103F50000C94F322ACE0B0E0E0EBFFE10C94D8224B -:103F600069837A838B839C83BE016B5F7F4FCE0115 -:103F700001960E941C218D81823061F0823050F0C8 -:103F8000843069F48E81882359F52FEF3FEF4FEF8E -:103F90005FE72AC020E030E040E050E025C02F81FC -:103FA000388537FDF7CF2F31310564F78EE190E08A -:103FB000821B930B29853A854B855C8504C05695F9 -:103FC0004795379527958A95D2F78E81882361F09A -:103FD00050954095309521953F4F4F4F5F4F04C00E -:103FE00020E030E040E050E8CA01B901E2E02C9660 -:103FF0000C94F4224F925F926F927F928F929F92D5 -:10400000AF92BF92DF92EF92FF920F931F9320E047 -:1040100030E040E050E0FC01E480F580068117814B -:10402000D1808081823038F4D801C701A061AF7798 -:10403000B0706FEFD9C0843009F46EC0823009F4DB -:1040400071C0E114F1040105110509F46BC082810E -:1040500093816FEF823896070CF06AC062E87FEFB9 -:10406000681B790B6A3171050CF080C0470158015B -:10407000062E04C0B694A794979487940A94D2F716 -:1040800044245524320181E090E0A0E0B0E004C077 -:10409000880F991FAA1FBB1F6A95D2F70197A10924 -:1040A000B109E822F9220A231B23E114F1040105D6 -:1040B000110529F061E0462E512C612C712C8501EF -:1040C0007401E428F52806291729D801C7018F773C -:1040D0009070A070B07080349105A105B10509F40D -:1040E00057C0D801C701CF96A11DB11D60E070E097 -:1040F0008030E0E09E07E0E0AE07E0E4BE0710F0AD -:1041000061E070E027E0B695A795979587952A9589 -:10411000D1F7AF77B07068C080E090E0A0E0B0E089 -:104120006FEF62C080E090E0A0E0B0E060E05CC0D3 -:10413000803891058CF7BC0161587F4FD801C701C9 -:104140008F779070A070B07080349105A105B10593 -:10415000A1F08FE390E0A0E0B0E0E80EF91E0A1FA6 -:104160001B1F17FD28C0D801C701CCCF60E070E04D -:1041700080E090E0A0E0B0E0CCCFE7FEF2CF80E4BA -:1041800090E0A0E0B0E0E80EF91E0A1F1B1FE9CF87 -:10419000E7FC18C080E090E060E0E61660E0F6061C -:1041A00060E0060760E4160710F081E090E0BC01D3 -:1041B000D801C701A7CF16950795F794E7946F5FCD -:1041C0007F4FD1CFD801C701805C9F4FAF4FBF4F0A -:1041D00060E070E08030E0E09E07E0E0AE07E0E401 -:1041E000BE0708F48FCF8CCF282F392F9A2F9F77B7 -:1041F000842F8078892B962F9795992797958F777D -:10420000482F492B6695852F8078862BD794DD24FF -:10421000D7948F77582F5D29CA01B9011F910F914B -:10422000FF90EF90DF90BF90AF909F908F907F9026 -:104230006F905F904F900895FC01DB0120813181E8 -:104240009281492F4F7750E0991F9927991F8381B9 -:10425000682F660F692B881F8827881FFD018183BF -:10426000662309F049C0211531054105510509F4BE -:1042700070C082E89FEFFD0193838283220F331F7A -:10428000441F551F220F331F441F551F220F331F7A -:10429000441F551F220F331F441F551F220F331F6A -:1042A000441F551F220F331F441F551F220F331F5A -:1042B000441F551F83E08C932030F0E03F07F0E06F -:1042C0004F07F0E45F0790F482E89FEF220F331F5F -:1042D000441F551F0197203060E0360760E0460715 -:1042E00060E4560798F3FD0193838283FD012483E4 -:1042F00035834683578308956F3F71F1862F992741 -:104300008F579040FD019383828383E08C93220F2B -:10431000331F441F551F220F331F441F551F220FE9 -:10432000331F441F551F220F331F441F551F220FD9 -:10433000331F441F551F220F331F441F551F220FC9 -:10434000331F441F551F506424833583468357838E -:10435000089582E08C93089521153105410551059A -:1043600019F484E08C93089544FD02C01C92BECFE2 -:1043700081E08C93BBCFCF93DF93AC01029710F415 -:1043800042E050E0A091FC01B091FD01FD01C0E0D0 -:10439000D0E020E030E020C0808191818417950733 -:1043A00069F482819381209719F09B838A8304C0EA -:1043B0009093FD018093FC01CF0132C0481759074B -:1043C00038F42115310519F08217930708F49C0180 -:1043D000EF010280F381E02D3097F1F621153105D0 -:1043E00089F1C901841B950B049708F4A901E0E049 -:1043F000F0E026C08D919C91119782179307E9F404 -:104400004817590779F4ED018A819B81309719F09B -:104410009383828304C09093FD018093FC01CD01BE -:10442000029649C0841B950BFD01E80FF91F4193CB -:10443000519302978D939C933AC0FD01A281B38161 -:104440001097C1F68091FA019091FB01892B41F4FC -:1044500080913301909134019093FB018093FA0194 -:1044600020913501309136012115310541F42DB7E8 -:104470003EB78091310190913201281B390BE091B8 -:10448000FA01F091FB012E1B3F0B2417350788F032 -:10449000CA0102962817390760F0CF01840F951FD3 -:1044A00002969093FB018093FA0141935193CF01BF -:1044B00002C080E090E0DF91CF910895CF93DF9329 -:1044C000009709F44EC0EC0122971B821A82A0913A -:1044D000FC01B091FD01109711F140E050E001C0E6 -:1044E000DC01AC17BD0700F1BB83AA83FE0121915B -:1044F0003191E20FF31FEA17FB0771F42E5F3F4F74 -:104500008D919C911197820F931F99838883FD0150 -:10451000828193819B838A834115510559F4D093FD -:10452000FD01C093FC011DC0FD0182819381AD019D -:104530000097B1F6FA01D383C28321913191E20F42 -:10454000F31FEC17FD0769F42E5F3F4F88819981B7 -:10455000820F931FFA01918380838A819B819383C9 -:104560008283DF91CF910895AA1BBB1B51E107C045 -:10457000AA1FBB1FA617B70710F0A61BB70B881FF3 -:10458000991F5A95A9F780959095BC01CD01089582 -:104590002F923F924F925F926F927F928F929F9253 -:1045A000AF92BF92CF92DF92EF92FF920F931F9341 -:1045B000CF93DF93CDB7DEB7CA1BDB0B0FB6F894F2 -:1045C000DEBF0FBECDBF09942A88398848885F8432 -:1045D0006E847D848C849B84AA84B984C884DF80A3 -:1045E000EE80FD800C811B81AA81B981CE0FD11D87 -:1045F0000FB6F894DEBF0FBECDBFED010895EE0FEC -:10460000FF1F0590F491E02D099450E449EC3FE040 -:104610002BED01D013C05F77552319F444230AF022 -:104620002BC02F933F934F935F93A3D055274427DD -:1046300059D05F914F913F912F9105CB1F939F7759 -:1046400050EC49E43FE02BEDD1DA10E89F775FE3CF -:1046500049EC3FE02BED621773078407950720F0C4 -:1046600050EC49E4C3DA112780D09068ECE8F0E020 -:1046700006D091271F9108959FEF80EC0895FF9237 -:10468000EF92DF92CF92BF926B017C01B59016D072 -:10469000B590BB2069F09F938F937F936F93B60182 -:1046A000C7010CD02F913F914F915F910E94B92388 -:1046B000BF90CF90DF90EF90FF900895A0D002C000 -:1046C0009601A701EF93FF930E94231EFF91EF91A4 -:1046D00096D0EF93FF930E94F61DFF91EF91BA944D -:1046E00079F70895C8D0CF93DF93D52FC42F5527DE -:1046F0004427332722279923D9F09F37C8F0F92F71 -:1047000088D0592F482F372F262FF63968F422DC0E -:10471000B8DBC030CD0721F06993799389939993E1 -:104720009058DF91CF9162CA99278827772766270B -:10473000C030CD0721F02993399349935993DF91E4 -:10474000CF9167C09F939F77993358F050E449EC1D -:104750003FE02BED60DF5FEB49EC3FE02BED46DA0D -:104760006DDF5F915078952708959B01AC010C9403 -:10477000231E67D001D04DC0552359F0992369F00D -:104780009F575F57951B33F442F4903811F49158BA -:1047900005C072CF91589F3F09F47FC0BB271124F9 -:1047A00062177307840730F4660F771F881FBB1FDB -:1047B000915098F311D00F920FD00F920DD0A0E826 -:1047C0002617370748071B0609F0A048BA2F602DA7 -:1047D0007F918F9100240895A0E800246217730749 -:1047E0008407B10528F0621B730B840BB1090A2AF8 -:1047F000660F771F881FBB1FA69581F708955591F7 -:1048000045913591259108959A95BB0F661F771FA5 -:10481000881F11249923A1F08823B2F79F3F59F0F4 -:10482000BB0F48F421F4002011F460FF04C06F5F57 -:104830007F4F8F4F9F4F881F9795879597F90895C2 -:1048400029C0052E092607FA440F551F5F3F79F04E -:10485000AA27A51708F051E04795880F991F9F3F99 -:1048600031F0BB27B91708F091E0879508959F9123 -:104870009F91112401CF97FB880F991F9F3F31F023 -:10488000BB27B91708F091E0879508959F919F91F4 -:104890001124F2CE6627772788279927089510E0FC -:1048A000C4EBD0E004C0FE010E9401232296C63B67 -:0448B000D107C9F76C -:1048B40048616C6C6F206869657220697374206448 -:1048C400617320524E4D65676131323846756E6BA7 -:1048D4002D426F61726400FF0000000000000000C0 -:0848E400002000FE01000000AD +:10018000089580E090E0A0E0B0E000000196A11D9D +:10019000B11D8E3E22E7920725E1A20720E0B207BB +:1001A000A1F782E091E00E94CE0580E091E00E94FC +:1001B000CE0580E090E0A0E0B0E000000196A11D37 +:1001C000B11D8E3E22E7920725E1A20720E0B2078B +:1001D000A1F7EBCF0895089586E886B967B987B18E +:1001E000806C87B9369A3699FECF40E020E030E047 +:1001F000369A3699FECF84B195B1280F391F4F5FDB +:100200004330B1F73798C90163E070E00E94712272 +:10021000CB0108957093700160936F010895C19AA6 +:100220000895C19808956430710590F44115510501 +:1002300081F480E090E061157105C1F49BBD8ABD39 +:100240001416150684F5C09AC1980895949A959A43 +:100250000895CA0157FD22C088968F3F910559F332 +:1002600054F38FEF90E06115710541F36130710532 +:1002700069F06230710561F7909387008093860082 +:1002800014161506C4F4959A9498089599BD88BDDE +:1002900014161506ACF4C29AC398089588279927B6 +:1002A000841B950BD9CF452B19F4C19AC09A089598 +:1002B000C19AC0980895452B49F2949A959808954B +:1002C000452B19F0C39AC2980895C39AC29A08950B +:1002D0008091650088608093650020E030E080E0D8 +:1002E00090E00000019645E08D379407D1F72F5F2D +:1002F0003F4F83E0283E380791F780916500877F64 +:10030000809365000895DD9A0895DD9808951F9201 +:100310000F920FB60F9211242F933F938F939F93B9 +:100320002091290130912A0180916F0190917001F3 +:1003300097FD23C095958795821793077CF480914C +:1003400065008460809365002115310579F48FEF95 +:1003500090E090932A018093290111C0809165005B +:100360008B7F809365002115310589F32150304042 +:1003700030932A012093290102C00196DBCF9F917F +:100380008F913F912F910F900FBE0F901F90189556 +:100390006430710508F03EC084B321E030E0062EE1 +:1003A00002C0220F331F0A94E2F7822B84BB85B36D +:1003B000822B85BBE0E0F0E040E050E000004F5FC2 +:1003C0005F4F85E04D375807C9F7319683E0E83E27 +:1003D000F80791F785B3922F9095892385BB84B355 +:1003E000982394BB83B3992786239723892BD1F332 +:1003F00083B3992786239723892B61F02FEF3FEF53 +:100400002F5F3F4F000083B3992786239723892BC3 +:10041000B9F702C02FEF3FEFC9010895662311F02D +:10042000C1980895C19A0895662311F0DD9A089540 +:10043000DD9808958EE78ABB1BBA2FEF27BB82E0B9 +:1004400088BB8FEC84BB15BA88EF81BB93E092BB6D +:100450008FED82B913B810926100209362008FE192 +:10046000809364009093650091EA9FBD82E88EBD01 +:1004700090938B0080938A001BBC1ABCC19AC09ACF +:1004800019BC18BCC39AC29A1092870010928600B9 +:10049000949A959A1E98DA9A969A979887E690E099 +:1004A0000E947F05789408958EE78ABB1BBA2FEFD0 +:1004B00027BB82E088BB8FEC84BB15BA88EF81BB79 +:1004C00093E092BB8FED82B913B810926100209334 +:1004D00062008FE1809364009093650091EA9FBD74 +:1004E00082E88EBD90938B0080938A001BBC1ABC5F +:1004F000C19AC09A19BC18BCC39AC29A10928700BC +:1005000010928600949A959A1E98DA9A969A9798DD +:1005100087E690E00E947F057894089508950895F5 +:1005200008950E94FA0299270895CF92DF92EF92E0 +:10053000FF920F931F93CF93DF93CDB7DEB78C015C +:10054000FB01EDB6FEB6DB010D900020E9F76D0171 +:100550000894C108D108C61AD70AC60101962DB75A +:100560003EB7281B390B0FB6F8943EBF0FBE2DBF08 +:100570004DB75EB74F5F5F4F1C141D0464F420E05D +:1005800030E0BA018191DB018D93BD012F5F3F4FB8 +:10059000C216D306B9F7960162E0C8010E9427048B +:1005A0000FB6F894FEBE0FBEEDBEDF91CF911F9146 +:1005B0000F91FF90EF90DF90CF9008950E94EF028F +:1005C00008950E94EF020895FC0180E4809370007A +:1005D00084E4809374001092710010820895FC01ED +:1005E00080E48093700084E4809374001092710022 +:1005F00010820895FC01808199270895660F609309 +:100600007200089580917400992787FD909588273E +:10061000990F881F99270895FC0190E020E030E0B1 +:10062000660F44EC80917400806A8093740080911E +:10063000740087FFFCCF80917100887F883001F5BE +:1006400060937300409374008091740087FFFCCF27 +:1006500080917100887F883189F080917100887F56 +:10066000803221F09923F1F2108208952F5F3F4FDD +:100670002A303105B9F781E08083089591E0EDCF0C +:1006800082E080830895660F616024EC809174009D +:10069000806A809374008091740087FFFCCF809102 +:1006A000710060937300209374008091740087FF41 +:1006B000FCCF8091710090917100809171008091C8 +:1006C0007400806880937400987F9034F9F60895E0 +:1006D0006093730084EC809374008091740087FFB2 +:1006E000FCCF8091710080917100089584ED80931A +:1006F0007400089584EC809374008091740087FFE7 +:10070000FCCF20E030E094ECFB0180917100887F09 +:10071000803889F480917300808390937400809175 +:10072000740087FFFCCF2F5F3F4F3196809171009F +:10073000887F803879F38091710084EC8093740015 +:10074000C9010895FB018091740087FFFCCF80915F +:1007500071008091710080917300808384EC80939C +:10076000740008951F93141615060CF5DA011197FD +:1007700020E030E014E894ECFB018081809373006A +:10078000A217B30789F0909374008091740087FFDB +:10079000FCCF80917100809171002F5F3F4F3196A7 +:1007A0004217530751F703C010937400EECF84EC47 +:1007B000809374001F910895FC01660F616074ECD2 +:1007C00080917400806A809374008091740087FF28 +:1007D000FCCF8091710060937300709374008091DE +:1007E000740087FFFCCF809171009091710080911F +:1007F000710080917400806880937400987F9034B9 +:10080000F9F680818823E9F412161306B4F460E047 +:1008100070E094ECFA018091740087FFFCCF809126 +:1008200071008091710080917300819390937400A6 +:100830006F5F7F4F2617370771F784ED8093740041 +:10084000089584ED8093740083E080830895DC0133 +:1008500090E0E0E0F0E0660F74EC80917400806A54 +:10086000809374008091740087FFFCCF80917100A9 +:10087000887F8830E9F560937300709374008091ED +:10088000740087FFFCCF80917100887F883171F1FF +:1008900080917100887F803211F19923F1F21C92CE +:1008A00012161306BCF460E070E094ECFA0180814B +:1008B00080937300909374008091740087FFFCCF45 +:1008C00080917100809171006F5F7F4F3196261784 +:1008D000370769F784ED809374001C920895319670 +:1008E000EA30F105D1F681E08C9304C091E0D0CFDD +:1008F00082E08C9384ED8093740008950E941B2203 +:1009000008950E94782108951F920F920FB60F92BA +:1009100011242F933F934F938F939F93EF93FF93C4 +:100920003BB14CB12091D8012F5F2F718091D9013B +:10093000E22FFF279927E817F90741F0832F8871E5 +:100940002093D801E652FE4F408301C082E080939D +:10095000FA01FF91EF919F918F914F913F912F91CC +:100960000F900FBE0F901F9018951F920F920FB609 +:100970000F9211248F939F93EF93FF939091B60161 +:100980008091B701981761F0E091B701EF5FEF71C7 +:10099000E093B701FF27E854FE4F80818CB901C076 +:1009A0005598FF91EF919F918F910F900FBE0F90EF +:1009B0001F9018959C011092B6011092B7011092E9 +:1009C000D8011092D90197FF03C082E08BB93F771D +:1009D000832F99278093900029B988E98AB986E006 +:1009E0008093950008959091D8018091D90198172E +:1009F00091F0E091D901EF5FEF71E093D901FF270A +:100A0000E652FE4F20818091FA019927982F88277E +:100A1000820F911D089580E091E00895382F209174 +:100A2000B6012F5F2F71E22FFF278091B701992721 +:100A30008E179F07D1F3E854FE4F30832093B60101 +:100A4000559A08951F920F920FB60F9211242F936B +:100A50003F934F938F939F93EF93FF9330919B001E +:100A600040919C00209193012F5F2F718091940100 +:100A7000E22FFF279927E817F90741F0832F8871A4 +:100A800020939301EB56FE4F408301C082E0809398 +:100A9000B501FF91EF919F918F914F913F912F91D0 +:100AA0000F900FBE0F901F9018951F920F920FB6C8 +:100AB0000F9211248F939F93EF93FF939091710165 +:100AC00080917201981769F0E0917201EF5FEF7108 +:100AD000E0937201FF27ED58FE4F808180939C00C8 +:100AE00005C080919A008F7D80939A00FF91EF91CD +:100AF0009F918F910F900FBE0F901F9018959C01A2 +:100B0000109271011092720110929301109294014F +:100B100097FF04C082E080939B003F77832F992743 +:100B2000809398002093990088E980939A0086E04A +:100B300080939D000895909193018091940198175E +:100B400091F0E0919401EF5FEF71E0939401FF2742 +:100B5000EB56FE4F20818091B5019927982F882769 +:100B6000820F911D089580E091E00895382F209123 +:100B700071012F5F2F71E22FFF278091720199275A +:100B80008E179F07D1F3ED58FE4F308320937101EC +:100B900080919A00806280939A000895DC013C91D4 +:100BA0003323D1F01196209171012F5F2F71E22F25 +:100BB000FF27809172019927E817F907D1F3ED58C3 +:100BC000FE4F30832093710180919A008062809360 +:100BD0009A003C91332331F70895FC0184918823D6 +:100BE000D1F0AF014F5F5F4F382F2091B6012F5FDB +:100BF0002F71E22FFF278091B7019927E817F90796 +:100C0000D1F3E854FE4F30832093B601559AFA0190 +:100C10008491882339F70895DC013C913323B1F0A6 +:100C200011962091B6012F5F2F71E22FFF2780913F +:100C3000B7019927E817F907D1F3E854FE4F30833D +:100C40002093B601559A3C91332351F70895FC0146 +:100C500084918823F1F0AF014F5F5F4F382F2091CF +:100C600071012F5F2F71E22FFF2780917201992769 +:100C7000E817F907D1F3ED58FE4F30832093710147 +:100C800080919A00806280939A00FA01849188236F +:100C900019F7089508950895FC01718360830895FC +:100CA000FC01738362830895FC0175836483089556 +:100CB0002F923F924F925F926F927F928F929F926C +:100CC000AF92BF92CF92DF92EF92FF920F931F935A +:100CD000CF93DF93CDB7DEB724970FB6F894DEBF7E +:100CE0000FBECDBF1C01FC0160817181882777FD9B +:100CF0008095982F0E94FE1E2DE433EF4EE85CE3B2 +:100D00000E94E01D7B018C010E94C22269837A83CC +:100D10008B839C83C801B7010E945F235B016C0138 +:100D200083E491E00E946207F10122813381821BFA +:100D3000930BAA2797FDA095BA2FBC01CD010E9465 +:100D4000FE1E3B014C0127ED33EB4DED5FE3698166 +:100D50007A818B819C810E94E01DA60195010E94F1 +:100D6000821D20E030E040E05FE30E94E01D7B0157 +:100D70008C01F10164817581882777FD8095982F1A +:100D80000E94FE1E9B01AC01C801B7010E94E01D3C +:100D9000A40193010E94B31D0E94671FAB01BC0117 +:100DA0008AE3482E81E0582E60E070E0C2010E9484 +:100DB0001301F10164817581882777FD8095982F53 +:100DC0000E94FE1E9B01AC01C601B5010E94E01D00 +:100DD0009B01AC01C401B3010E94B31D0E94671FB7 +:100DE000AB01BC0161E070E0C2010E94130127ED7C +:100DF00033EB4DED5FEB69817A818B819C810E94A1 +:100E0000E01DA60195010E94821D20E030E040E037 +:100E10005FE30E94E01D7B018C01F101648175811B +:100E2000882777FD8095982F0E94FE1E9B01AC01BC +:100E3000C801B7010E94E01D9B01AC01C401B301D0 +:100E40000E94B31D0E94671FAB01BC0162E070E00D +:100E5000C2010E94130124960FB6F894DEBF0FBEA4 +:100E6000CDBFDF91CF911F910F91FF90EF90DF9059 +:100E7000CF90BF90AF909F908F907F906F905F903A +:100E80004F903F902F900895FC01118210821382A1 +:100E90001282158214820E9458060895FC01118264 +:100EA000108213821282158214820E9458060895BD +:100EB000FC017183608353834283358324830E94C2 +:100EC0005806089542960E94A01A08950F931F9302 +:100ED0008C0142960E94A41AC8010E940008C80111 +:100EE00084960E94291C1F910F9108950F931F93C0 +:100EF0008C0184960E941A1CC80142960E948F1B86 +:100F0000C8010E94FB071F910F9108950F931F9333 +:100F10008C0184960E941A1CC80142960E948F1B65 +:100F2000C8010E94FB071F910F9108950F931F9313 +:100F30008C010E94D807C80142960E94A71BC801D5 +:100F400084960E940D1C1F910F9108950F931F937B +:100F50008C010E94D807C80142960E94A71BC801B5 +:100F600084960E940D1C1F910F910895FC0111821F +:100F700010828EE190E0938382838CE390E09583EE +:100F8000848384E690E09783868384EB90E0918766 +:100F9000808784E091E0938782878CE291E0958757 +:100FA00084878AE491E097878687118A108A08955A +:100FB000FC01118210828EE190E0938382838CE3A6 +:100FC00090E09583848384E690E09783868384EB26 +:100FD00090E09187808784E091E0938782878CE21C +:100FE00091E0958784878AE491E097878687118AC4 +:100FF000108A089508950895FC01808991890895C3 +:101000000F931F93CF93DF93CDB7DEB760970FB6E3 +:10101000F894DEBF0FBECDBF8C0160E08AE391E0A3 +:101020000E94EC009A83898361E08AE391E00E9448 +:10103000EC009C838B8362E08AE391E00E94EC00E9 +:101040009E838D8363E08AE391E00E94EC009887A1 +:101050008F8364E08AE391E00E94EC009A8789879D +:1010600065E08AE391E00E94EC009C878B8766E054 +:101070008AE391E00E94EC009E878D8767E08AE317 +:1010800091E00E94EC00988B8F8729813A8144E09F +:101090002030340714F020E034E04B815C814217AB +:1010A0005307ACF5E1E0F0E02D813E8124173507D0 +:1010B00064F5E2E0F0E04F815885421753071CF5D4 +:1010C000E3E0F0E029853A8524173507D4F4E4E01D +:1010D000F0E04B855C85421753078CF4E5E0F0E0C7 +:1010E0002D853E852417350744F4E6E0F0E08217AD +:1010F00093078CF4E7E0F0E00EC09A01F8CFA90165 +:10110000EFCF9A01E6CFA901DDCF9A01D4CFA90193 +:10111000E0E0F0E0C9CFEE0FFF1FE00FF11F80818C +:101120009181F801918B808B60960FB6F894DEBFA9 +:101130000FBECDBFDF91CF911F910F9108950895FC +:101140000895089508950F931F93CF93DF93DC01C3 +:1011500084B32D913C91119741E050E0FA01022EA9 +:1011600002C0EE0FFF1F0A94E2F78E2B84BB07E04C +:1011700010E0021B130BED010A8002C0440F551F43 +:101180000A94E2F7342F309585B3832385BB25B3CA +:1011900083B380952823862F9927002E02C095952A +:1011A00087950A94E2F78E23282B25BB660F000053 +:1011B00085B3842B85BB85B3832385BB25B383B3DC +:1011C00080952823862F9927002E02C09595879514 +:1011D0000A94E2F78E23282B25BB660F000085B307 +:1011E000842B85BB85B3832385BB25B383B38095CF +:1011F0002823862F9927002E02C0959587950A945B +:10120000E2F78E23282B25BB660F000085B3842BC5 +:1012100085BB85B3832385BB25B383B38095282302 +:10122000862F9927002E02C0959587950A94E2F79C +:101230008E23282B25BB660F000085B3842B85BB2E +:1012400085B3832385BB25B383B380952823862F5D +:101250009927002E02C0959587950A94E2F78E2370 +:10126000282B25BB660F000085B3842B85BB85B377 +:10127000832385BB25B383B380952823862F9927A5 +:10128000002E02C0959587950A94E2F78E23282BAD +:1012900025BB660F000085B3842B85BB85B38323F4 +:1012A00085BB25B383B380952823862F9927002EED +:1012B00002C0959587950A94E2F78E23282B25BBCB +:1012C000000085B3842B85BB85B3832385BB95B391 +:1012D00083B380959823660F772702C0759567952D +:1012E0000A95E2F7E6239E2B95BB000085B3482BB9 +:1012F00045BBDF91CF911F910F910895FC0124B35D +:10130000A081B18161E070E0CB010A2E02C0880F9C +:10131000991F0A94E2F78095282324BB028002C01B +:10132000660F771F0A94E2F7362F309585B3832333 +:1013300085BB000085B3862B85BB43B385B3832370 +:1013400085BB55270A2E02C0559547950A94E2F7AA +:1013500041705070440F000085B3862B85BB83B36A +:1013600025B3232325BB99270A2E02C0959587957F +:101370000A94E2F78170482B440F000085B3862B56 +:1013800085BB83B325B3232325BB99270A2E02C02F +:10139000959587950A94E2F78170482B440F0000D9 +:1013A00085B3862B85BB83B325B3232325BB992720 +:1013B0000A2E02C0959587950A94E2F78170482B12 +:1013C000440F000085B3862B85BB83B325B323234D +:1013D00025BB99270A2E02C0959587950A94E2F7B6 +:1013E0008170482B440F000085B3862B85BB83B3E7 +:1013F00025B3232325BB99270A2E02C095958795EF +:101400000A94E2F78170482B440F000085B3862BC5 +:1014100085BB83B325B3232325BB99270A2E02C09E +:10142000959587950A94E2F78170482B440F000048 +:1014300085B3682B65BB83B3992702C095958795C3 +:10144000AA95E2F78170482B842F99270895CF93AE +:10145000DF93FC0144B3C081D18121E030E0C901B8 +:101460000C2E02C0880F991F0A94E2F7A82F482B70 +:1014700044BB47E050E04C1B5D0B028002C0220FD2 +:10148000331F0A94E2F7322FE22FE09585B38E23C3 +:1014900085BB25B383B380952823862F9927042EF7 +:1014A00002C0959587950A94E2F78A23282B25BBDD +:1014B000660F000085B3832B85BB85B38E2385BB68 +:1014C00025B383B380952823862F9927042E02C045 +:1014D000959587950A94E2F78A23282B25BB660FFA +:1014E000000085B3832B85BB85B38E2385BB25B3D5 +:1014F00083B380952823862F9927042E02C09595C3 +:1015000087950A94E2F78A23282B25BB660F0000F3 +:1015100085B3832B85BB85B38E2385BB25B383B36E +:1015200080952823862F9927042E02C095958795AC +:101530000A94E2F78A23282B25BB660F000085B3A7 +:10154000832B85BB85B38E2385BB25B383B3809561 +:101550002823862F9927042E02C0959587950A94F3 +:10156000E2F78A23282B25BB660F000085B3832B67 +:1015700085BB85B38E2385BB25B383B38095282394 +:10158000862F9927042E02C0959587950A94E2F735 +:101590008A23282B25BB660F000085B3832B85BBD0 +:1015A00085B38E2385BB25B383B380952823862FEF +:1015B0009927042E02C0959587950A94E2F78A230D +:1015C000282B25BB000085B3832B85BB85B38E23D9 +:1015D00085BB95B383B380959823660F772702C0A8 +:1015E000759567954A95E2F78A2F8623982B95BBC8 +:1015F000000085B3832B85BB80E090E0000001965E +:1016000021E08C329207D1F784B3A0958A2384BB62 +:1016100085B38E2385BB000085B3832B85BB43B385 +:1016200085B38E2385BB55270C2E02C05595479553 +:101630000A94E2F741705070440F000085B3832B89 +:1016400085BB83B325B32E2325BB99270C2E02C05F +:10165000959587950A94E2F78170482B440F000016 +:1016600085B3832B85BB83B325B32E2325BB992755 +:101670000C2E02C0959587950A94E2F78170482B4D +:10168000440F000085B3832B85BB83B325B32E2382 +:1016900025BB99270C2E02C0959587950A94E2F7F1 +:1016A0008170482B440F000085B3832B85BB83B327 +:1016B00025B32E2325BB99270C2E02C0959587951F +:1016C0000A94E2F78170482B440F000085B3832B06 +:1016D00085BB83B325B32E2325BB99270C2E02C0CF +:1016E000959587950A94E2F78170482B440F000086 +:1016F00085B3832B85BB83B325B32E2325BB9927C5 +:101700000C2E02C0959587950A94E2F78170482BBC +:10171000440F000085B3832B85BB83B3992702C098 +:1017200095958795CA95E2F78170482B842F992764 +:10173000DF91CF910895EF92FF920F931F93CF9374 +:10174000DF937C01606884B3E70128813981A1E0DF +:10175000B0E0FD01022E02C0EE0FFF1F0A94E2F777 +:101760008E2B84BB07E010E0021B130B0A8002C023 +:10177000AA0FBB1F0A94E2F73A2F309585B3832353 +:1017800085BB25B383B380952823862F9927002E08 +:1017900002C0959587950A94E2F78E23282B25BBE6 +:1017A000660F000085B38A2B85BB85B3832385BB79 +:1017B00025B383B380952823862F9927002E02C056 +:1017C000959587950A94E2F78E23282B25BB660F03 +:1017D000000085B38A2B85BB85B3832385BB25B3E6 +:1017E00083B380952823862F9927002E02C09595D4 +:1017F00087950A94E2F78E23282B25BB660F0000FD +:1018000085B38A2B85BB85B3832385BB25B383B37F +:1018100080952823862F9927002E02C095958795BD +:101820000A94E2F78E23282B25BB660F000085B3B0 +:101830008A2B85BB85B3832385BB25B383B3809572 +:101840002823862F9927002E02C0959587950A9404 +:10185000E2F78E23282B25BB660F000085B38A2B69 +:1018600085BB85B3832385BB25B383B380952823AC +:10187000862F9927002E02C0959587950A94E2F746 +:101880008E23282B25BB660F000085B38A2B85BBD2 +:1018900085B3832385BB25B383B380952823862F07 +:1018A0009927002E02C0959587950A94E2F78E231A +:1018B000282B25BB000085B38A2B85BB85B38323EA +:1018C00085BB95B383B380959823660F7727002E49 +:1018D00002C0759567950A94E2F78E2F8623982BA0 +:1018E00095BB000085B38A2B85BB84B38E2B84BB4C +:1018F00085B3832385BB25B383B380952823842FA9 +:101900009927002E02C0959587950A94E2F78E23B9 +:10191000282B25BB440F000085B38A2B85BB85B3DC +:10192000832385BB25B383B380952823842F9927F0 +:10193000002E02C0959587950A94E2F78E23282BF6 +:1019400025BB440F000085B38A2B85BB85B3832359 +:1019500085BB25B383B380952823842F9927002E38 +:1019600002C0959587950A94E2F78E23282B25BB14 +:10197000440F000085B38A2B85BB85B3832385BBC9 +:1019800025B383B380952823842F9927002E02C086 +:10199000959587950A94E2F78E23282B25BB440F53 +:1019A000000085B38A2B85BB85B3832385BB25B314 +:1019B00083B380952823842F9927002E02C0959504 +:1019C00087950A94E2F78E23282B25BB440F00004D +:1019D00085B38A2B85BB85B3832385BB25B383B3AE +:1019E00080952823842F9927002E02C095958795EE +:1019F0000A94E2F78E23282B25BB440F000085B301 +:101A00008A2B85BB85B3832385BB25B383B38095A0 +:101A10002823842F9927002E02C0959587950A9434 +:101A2000E2F78E23282B25BB000085B38A2B85BBCC +:101A300085B3832385BB95B383B380959823440FE7 +:101A4000552702C0559547950A95E2F7E4239E2B4A +:101A500095BB000085B38A2B85BB80E090E0000039 +:101A60000196E1E08C329E07D1F7DF91CF911F9173 +:101A70000F91FF90EF900895CF93DF93FC0124B373 +:101A80004081518161E070E0CB01042E02C0880FDB +:101A9000991F0A94E2F7A82F282B24BBC7E0D0E0B7 +:101AA000C41BD50BCB01028002C0880F991F0A947A +:101AB000E2F7582F482F409585B3842385BB25B383 +:101AC00083B38095282380E890E00C2E02C0959582 +:101AD00087950A94E2F73A2F3823232B25BB000081 +:101AE00085B3852B85BB85B3842385BB95B383B331 +:101AF0008095982395BB000085B3852B85BB85B366 +:101B0000842385BB95B383B38095982395BB000050 +:101B100085B3852B85BB85B3842385BB95B383B300 +:101B20008095982395BB000085B3852B85BB85B335 +:101B3000842385BB95B383B38095982395BB000020 +:101B400085B3852B85BB85B3842385BB95B383B3D0 +:101B50008095982395BB000085B3852B85BB85B305 +:101B6000842385BB95B383B38095982395BB0000F0 +:101B700085B3852B85BB85B3842385BB95B383B3A0 +:101B80008095982395BB000085B3852B85BB84B3D6 +:101B90008A2B84BB85B3842385BB95B383B380959F +:101BA00098230C2E02C0759567950A94E2F78A2F48 +:101BB0008623982B95BB000085B3852B85BB85B309 +:101BC000842385BB25B383B38095282382E090E0EE +:101BD0000C2E02C0959587950A94E2F78A23282B4C +:101BE00025BB000085B3852B85BB85B3842385BBCE +:101BF00025B383B38095282384E090E00C2E02C0A7 +:101C0000959587950A94E2F78A23282B25BB000037 +:101C100085B3852B85BB85B3842385BB25B383B36F +:101C20008095282388E090E00C2E02C0959587953A +:101C30000A94E2F78A23282B25BB000085B3852B65 +:101C400085BB85B3842385BB25B383B380952823C7 +:101C500080E190E00C2E02C0959587950A94E2F7FA +:101C60008A23282B25BB000085B3852B85BB85B334 +:101C7000842385BB25B383B38095282380E290E03D +:101C80000C2E02C0959587950A94E2F78A23282B9B +:101C900025BB000085B3852B85BB85B3842385BB1D +:101CA00025B383B38095282380E490E00C2E02C0F6 +:101CB000959587950A94E2F78A23282B25BB000087 +:101CC00085B3852B85BB85B3842385BB95B383B34F +:101CD00080959823932B95BB000085B3852B85BBFE +:101CE00080E090E00000019621E08C329207D1F76D +:101CF00084B38A2B84BB85B3842385BB25B383B38C +:101D00008095282388E890E00C2E02C09595879551 +:101D10000A94E2F78A23282B25BB000085B3852B84 +:101D200085BB85B3842385BB25B383B380952823E6 +:101D300080E190E00C2E02C0959587950A94E2F719 +:101D40008A23282B25BB000085B3852B85BB85B353 +:101D5000842385BB25B383B38095282380E290E05C +:101D60000C2E02C0959587950A94E2F78A23282BBA +:101D700025BB000085B3852B85BB85B3842385BB3C +:101D800025B383B38095282380E490E00C2E02C015 +:101D9000959587950A94E2F78A23282B25BB0000A6 +:101DA00085B3852B85BB85B3842385BB25B383B3DE +:101DB0008095282380E890E002C095958795CA9584 +:101DC000E2F78A23282B25BB000085B3852B85BB32 +:101DD00085B3842385BB95B383B38095982395BB46 +:101DE000000085B3852B85BB85B3842385BB95B364 +:101DF00083B38095982395BB000085B3852B85BB65 +:101E000085B3842385BB95B383B38095982395BB15 +:101E1000000085B3852B85BB84B3A82BA4BB85B3F9 +:101E2000842385BB95B383B38095982395BB00002D +:101E300085B3852B85BB85B3842385BB95B383B3DD +:101E40008095982395BB000085B3852B85BB85B312 +:101E5000842385BB95B383B38095982395BB0000FD +:101E600085B3852B85BB85B3842385BB95B383B3AD +:101E70008095982395BB000085B3852B85BB85B3E2 +:101E8000842385BB95B383B38095982395BB0000CD +:101E900085B3852B85BB85B3842385BB95B383B37D +:101EA0008095982395BB000085B3852B85BB85B3B2 +:101EB000842385BB95B383B38095982395BB00009D +:101EC00085B3852B85BB85B3842385BB95B383B34D +:101ED0008095982395BB000085B3852B85BB80E05A +:101EE00090E00000019621E08C329207D1F781E06A +:101EF0008093FB01DF91CF910895FC0120E030E059 +:101F000080E090E00000019645E08D379407D1F71E +:101F10002F5F3F4F2436310599F784B321E030E03D +:101F2000028002C0220F331F0A94E2F7322F822B65 +:101F300084BB85B3622F6095862385BB40E050E06B +:101F400080E090E00000019625E08D379207D1F700 +:101F50004F5F5F4F4A30510599F724B3408151815B +:101F600081E090E0042E02C0880F991F0A94E2F7E6 +:101F7000782F282B24BBE7E0F0E0E41BF50B85B3BA +:101F8000862385BB25B383B38095282380E890E022 +:101F90000E2E02C0959587950A94E2F7472F4823A5 +:101FA000242B25BB000085B3832B85BB85B38623FB +:101FB00085BB95B383B38095982395BB000085B30B +:101FC000832B85BB85B3862385BB95B383B380956F +:101FD000982395BB000085B3832B85BB85B38623EF +:101FE00085BB95B383B38095982395BB000085B3DB +:101FF000832B85BB85B3862385BB95B383B380953F +:10200000982395BB000085B3832B85BB85B38623BE +:1020100085BB95B383B38095982395BB000085B3AA +:10202000832B85BB85B3862385BB95B383B380950E +:10203000982395BB000085B3832B85BB85B386238E +:1020400085BB95B383B38095982395BB000085B37A +:10205000832B85BB84B3872B84BB85B3862385BB49 +:1020600095B383B380959823942B95BB000085B3DB +:10207000832B85BB85B3862385BB95B383B38095BE +:10208000982395BB000085B3832B85BB85B386233E +:1020900085BB95B383B38095982395BB000085B32A +:1020A000832B85BB85B3862385BB95B383B380958E +:1020B000982395BB000085B3832B85BB85B386230E +:1020C00085BB95B383B38095982395BB000085B3FA +:1020D000832B85BB85B3862385BB95B383B380955E +:1020E000982395BB000085B3832B85BB85B38623DE +:1020F00085BB95B383B38095982395BB000085B3CA +:10210000832B85BB85B3862385BB95B383B380952D +:10211000982395BB000085B3832B85BB80E090E0BE +:102120000000019621E08C329207D1F784B3872B0F +:1021300084BB85B3862385BB25B383B380952823D1 +:1021400080E890E00E2E02C0959587950A94E2F7FC +:102150008723282B25BB000085B3832B85BB85B344 +:10216000862385BB95B383B38095982395BB0000E8 +:1021700085B3832B85BB85B3862385BB95B383B39A +:102180008095982395BB000085B3832B85BB85B3D1 +:10219000862385BB95B383B38095982395BB0000B8 +:1021A00085B3832B85BB85B3862385BB95B383B36A +:1021B0008095982395BB000085B3832B85BB85B3A1 +:1021C000862385BB95B383B38095982395BB000088 +:1021D00085B3832B85BB85B3862385BB95B383B33A +:1021E0008095982395BB000085B3832B85BB85B371 +:1021F000862385BB95B383B38095982395BB000058 +:1022000085B3832B85BB84B3872B84BB85B386239F +:1022100085BB25B383B38095282381E090E00E2E03 +:1022200002C0959587950A94E2F78723282B25BB52 +:10223000000085B3832B85BB85B3862385BB25B37F +:1022400083B38095282382E090E00E2E02C09595FE +:1022500087950A94E2F78723282B25BB000085B3D6 +:10226000832B85BB85B3862385BB25B383B380953C +:10227000282384E090E00E2E02C0959587950A945D +:10228000E2F78723282B25BB000085B3832B85BB72 +:1022900085B3862385BB25B383B38095282388E047 +:1022A00090E00E2E02C0959587950A94E2F7872359 +:1022B000282B25BB000085B3832B85BB85B38623E4 +:1022C00085BB25B383B38095282380E190E00E2E53 +:1022D00002C0959587950A94E2F78723282B25BBA2 +:1022E000000085B3832B85BB85B3862385BB25B3CF +:1022F00083B38095282380E290E00E2E02C095954E +:1023000087950A94E2F78723282B25BB000085B325 +:10231000832B85BB85B3862385BB25B383B380958B +:10232000282380E490E002C095958795EA95E2F72E +:102330007823272B25BB000085B3832B85BB85B372 +:10234000682365BB95B383B380959823942B95BB85 +:10235000000085B3382B35BB80E090E0000001968B +:1023600041E08C329407D1F70895EF92FF920F93DA +:102370001F93FC0144B3A081B18121E030E0C90189 +:102380000A2E02C0880F991F0A94E2F7182F482BD3 +:1023900044BB47E050E04A1B5B0B028002C0220FA7 +:1023A000331F0A94E2F7722F622F609585B386235C +:1023B00085BB35B323B388E090E0042E02C0959529 +:1023C00087950A94E2F7F12EF822209532233F29CF +:1023D00035BB000085B3872B85BB85B3862385BBC2 +:1023E00035B323B380E190E0042E02C09595879524 +:1023F0000A94E2F7E12EE822209532233E2935BBEC +:10240000000085B3872B85BB85B3862385BB35B399 +:1024100023B380E290E0042E02C0959587950A943C +:10242000E2F7012F082320953223302B35BB000023 +:1024300085B3872B85BB85B3862385BB35B323B393 +:1024400080E490E0042E02C0959587950A94E2F707 +:10245000F12FF823209532233F2B35BB000085B3A5 +:10246000872B85BB85B3862385BB35B323B380E833 +:1024700090E002C0959587954A95E2F7E12FE82311 +:10248000209532233E2B35BB000085B3872B85BBBF +:1024900085B3862385BB95B383B38095982395BB7D +:1024A000000085B3872B85BB85B3862385BB95B399 +:1024B00083B38095982395BB000085B3872B85BB9C +:1024C00085B3862385BB95B383B38095982395BB4D +:1024D000000085B3872B85BB80E090E0000001966B +:1024E00021E08C329207D1F784B3312F30958323CA +:1024F00084BB85B3862385BB000085B3872B85BB52 +:1025000043B385B3862385BB55270A2E02C0559554 +:1025100047950A94E2F741705070440F000085B36C +:10252000872B85BB83B325B3262325BB99270A2E8A +:1025300002C0959587950A94E2F78170482B440F65 +:10254000000085B3872B85BB83B325B3262325BB2A +:1025500099270A2E02C0959587950A94E2F7817013 +:10256000482B440F000085B3872B85BB83B325B36D +:10257000262325BB99270A2E02C0959587950A9494 +:10258000E2F78170482B440F000085B3872B85BB91 +:1025900083B325B3262325BB99270A2E02C0959520 +:1025A00087950A94E2F78170482B440F000085B3A9 +:1025B000872B85BB83B325B3262325BB99270A2EFA +:1025C00002C0959587950A94E2F78170482B440FD5 +:1025D000000085B3872B85BB83B325B3262325BB9A +:1025E00099270A2E02C0959587950A94E2F7817083 +:1025F000482B440F000085B3872B85BB83B39927F5 +:102600000A2E02C0959587950A94E2F78170482BAF +:102610005527242F8091FB01813009F00BC147FD24 +:1026200007C184B3812B84BB85B3862385BB95B357 +:1026300083B3809598239F2995BB000085B3872B92 +:1026400085BB85B3862385BB95B383B380959823DB +:102650009E2995BB000085B3872B85BB85B3862358 +:1026600085BB95B383B380959823902B95BB0000D1 +:1026700085B3872B85BB85B3862385BB95B383B391 +:10268000809598239F2B95BB000085B3872B85BB36 +:1026900085B3862385BB95B383B3809598239E2B02 +:1026A00095BB000085B3872B85BB85B3862385BB8F +:1026B00095B383B38095982395BB000085B3872B92 +:1026C00085BB85B3862385BB95B383B3809598235B +:1026D00095BB000085B3872B85BB85B3862385BB5F +:1026E00095B383B38095982395BB000085B3872B62 +:1026F00085BB80E090E00000019621E08C329207DB +:10270000D1F784B3832384BB85B3862385BB0000C4 +:1027100085B3872B85BB43B385B3862385BB5527FC +:102720000A2E02C0559547950A94E2F74170507001 +:10273000440F000085B3872B85BB83B325B32623C5 +:1027400025BB99270A2E02C0959587950A94E2F732 +:102750008170482B440F000085B3872B85BB83B362 +:1027600025B3262325BB99270A2E02C09595879568 +:102770000A94E2F78170482B440F000085B3872B41 +:1027800085BB83B325B3262325BB99270A2E02C018 +:10279000959587950A94E2F78170482B440F0000C5 +:1027A00085B3872B85BB83B325B3262325BB992708 +:1027B0000A2E02C0959587950A94E2F78170482BFE +:1027C000440F000085B3872B85BB83B325B3262335 +:1027D00025BB99270A2E02C0959587950A94E2F7A2 +:1027E0008170482B440F000085B3872B85BB83B3D2 +:1027F00025B3262325BB99270A2E02C095958795D8 +:102800000A94E2F78170482B440F000085B3872BB0 +:1028100085BB83B399270A2E02C0959587950A94A4 +:10282000E2F78170482B842F9927282F87FFF9CE54 +:102830001092FB01822F992787FD90951F910F9190 +:10284000FF90EF900895FC0144B3A081B18121E095 +:1028500030E0C9010A2E02C0880F991F0A94E2F7DE +:10286000782F482B44BB47E050E04A1B5B0B0280AB +:1028700002C0220F331F0A94E2F7322F622F6095B5 +:1028800085B3862385BB25B383B38095282384E055 +:1028900090E0042E02C0959587950A94E2F787236D +:1028A000282B25BB000085B3832B85BB85B38623EE +:1028B00085BB25B383B38095282388E090E0042E60 +:1028C00002C0959587950A94E2F78723282B25BBAC +:1028D000000085B3832B85BB85B3862385BB25B3D9 +:1028E00083B38095282380E190E0042E02C0959563 +:1028F00087950A94E2F78723282B25BB000085B330 +:10290000832B85BB85B3862385BB25B383B3809595 +:10291000282380E290E0042E02C0959587950A94C2 +:10292000E2F78723282B25BB000085B3832B85BBCB +:1029300085B3862385BB25B383B38095282380E4A4 +:1029400090E0042E02C0959587950A94E2F78723BC +:10295000282B25BB000085B3832B85BB85B386233D +:1029600085BB25B383B38095282380E890E002C01F +:10297000959587954A95E2F78723282B25BB00007C +:1029800085B3832B85BB85B3862385BB95B383B382 +:102990008095982395BB000085B3832B85BB85B3B9 +:1029A000862385BB95B383B38095982395BB0000A0 +:1029B00085B3832B85BB80E090E00000019621E089 +:1029C0008C329207D1F784B37095872384BB85B38B +:1029D000862385BB000085B3832B85BB43B385B3BA +:1029E000862385BB55270A2E02C0559547950A9424 +:1029F000E2F741705070440F000085B3832B85BB14 +:102A000083B325B3262325BB99270A2E02C09595AB +:102A100087950A94E2F78170482B440F000085B334 +:102A2000832B85BB83B325B3262325BB99270A2E89 +:102A300002C0959587950A94E2F78170482B440F60 +:102A4000000085B3832B85BB83B325B3262325BB29 +:102A500099270A2E02C0959587950A94E2F781700E +:102A6000482B440F000085B3832B85BB83B325B36C +:102A7000262325BB99270A2E02C0959587950A948F +:102A8000E2F78170482B440F000085B3832B85BB90 +:102A900083B325B3262325BB99270A2E02C095951B +:102AA00087950A94E2F78170482B440F000085B3A4 +:102AB000832B85BB83B325B3262325BB99270A2EF9 +:102AC00002C0959587950A94E2F78170482B440FD0 +:102AD000000085B3832B85BB83B3992702C09595EE +:102AE0008795AA95E2F78170482B842F992708953E +:102AF000FC0144B3A081B18121E030E0C9010A2E7C +:102B000002C0880F991F0A94E2F7782F482B44BB24 +:102B100047E050E04A1B5B0B028002C0220F331FCC +:102B20000A94E2F7322F622F609585B3862385BB26 +:102B300025B383B38095282382E090E0042E02C061 +:102B4000959587950A94E2F78723282B25BB0000EB +:102B500085B3832B85BB85B3862385BB25B383B320 +:102B60008095282384E090E0042E02C095958795F7 +:102B70000A94E2F78723282B25BB000085B3832B1B +:102B800085BB85B3862385BB25B383B38095282376 +:102B900088E090E0042E02C0959587950A94E2F7AC +:102BA0008723282B25BB000085B3832B85BB85B3EA +:102BB000862385BB25B383B38095282380E190E0ED +:102BC000042E02C0959587950A94E2F78723282B57 +:102BD00025BB000085B3832B85BB85B3862385BBCE +:102BE00025B383B38095282380E290E0042E02C0B1 +:102BF000959587950A94E2F78723282B25BB00003B +:102C000085B3832B85BB85B3862385BB25B383B36F +:102C10008095282380E490E0042E02C09595879546 +:102C20000A94E2F78723282B25BB000085B3832B6A +:102C300085BB85B3862385BB25B383B380952823C5 +:102C400080E890E002C0959587954A95E2F7872342 +:102C5000282B25BB000085B3832B85BB85B386233A +:102C600085BB95B383B38095982395BB000085B34E +:102C7000832B85BB80E090E00000019621E08C3240 +:102C80009207D1F784B37095872384BB85B38623DD +:102C900085BB000085B3832B85BB43B385B38623F7 +:102CA00085BB55270A2E02C0559547950A94E2F731 +:102CB00041705070440F000085B3832B85BB83B3F4 +:102CC00025B3262325BB99270A2E02C09595879503 +:102CD0000A94E2F78170482B440F000085B3832BE0 +:102CE00085BB83B325B3262325BB99270A2E02C0B3 +:102CF000959587950A94E2F78170482B440F000060 +:102D000085B3832B85BB83B325B3262325BB9927A6 +:102D10000A2E02C0959587950A94E2F78170482B98 +:102D2000440F000085B3832B85BB83B325B32623D3 +:102D300025BB99270A2E02C0959587950A94E2F73C +:102D40008170482B440F000085B3832B85BB83B370 +:102D500025B3262325BB99270A2E02C09595879572 +:102D60000A94E2F78170482B440F000085B3832B4F +:102D700085BB83B325B3262325BB99270A2E02C022 +:102D8000959587950A94E2F78170482B440F0000CF +:102D900085B3832B85BB83B3992702C0959587950F +:102DA000AA95E2F78170482B842F99270895FC019A +:102DB00044B3A081B18121E030E0C9010A2E02C0F4 +:102DC000880F991F0A94E2F7782F482B44BB47E0FD +:102DD00050E04A1B5B0B028002C0220F331F0A9493 +:102DE000E2F7322F622F609585B3862385BB25B32A +:102DF00083B38095282383E090E0042E02C095954C +:102E000087950A94E2F78723282B25BB000085B31A +:102E1000832B85BB85B3862385BB25B383B3809580 +:102E2000282386E090E0042E02C0959587950A94A9 +:102E3000E2F78723282B25BB000085B3832B85BBB6 +:102E400085B3862385BB25B383B3809528238CE087 +:102E500090E0042E02C0959587950A94E2F78723A7 +:102E6000282B25BB000085B3832B85BB85B3862328 +:102E700085BB25B383B38095282388E190E0042E99 +:102E800002C0959587950A94E2F78723282B25BBE6 +:102E9000000085B3832B85BB85B3862385BB25B313 +:102EA00083B38095282380E390E0042E02C095959B +:102EB00087950A94E2F78723282B25BB000085B36A +:102EC000832B85BB85B3862385BB25B383B38095D0 +:102ED000282380E690E0042E02C0959587950A94F9 +:102EE000E2F78723282B25BB000085B3832B85BB06 +:102EF00085B3862385BB25B383B38095282380ECD7 +:102F000090E0042E02C0959587950A94E2F78723F6 +:102F1000282B25BB000085B3832B85BB85B3862377 +:102F200085BB25B383B38095282380E890E002C059 +:102F3000959587954A95E2F78723282B25BB0000B6 +:102F400085B3832B85BB80E090E00000019621E0F3 +:102F50008C329207D1F784B37095872384BB85B3F5 +:102F6000862385BB000085B3832B85BB43B385B324 +:102F7000862385BB55270A2E02C0559547950A948E +:102F8000E2F741705070440F000085B3832B85BB7E +:102F900083B325B3262325BB99270A2E02C0959516 +:102FA00087950A94E2F78170482B440F000085B39F +:102FB000832B85BB83B325B3262325BB99270A2EF4 +:102FC00002C0959587950A94E2F78170482B440FCB +:102FD000000085B3832B85BB83B325B3262325BB94 +:102FE00099270A2E02C0959587950A94E2F7817079 +:102FF000482B440F000085B3832B85BB83B325B3D7 +:10300000262325BB99270A2E02C0959587950A94F9 +:10301000E2F78170482B440F000085B3832B85BBFA +:1030200083B325B3262325BB99270A2E02C0959585 +:1030300087950A94E2F78170482B440F000085B30E +:10304000832B85BB83B325B3262325BB99270A2E63 +:1030500002C0959587950A94E2F78170482B440F3A +:10306000000085B3832B85BB83B3992702C0959558 +:103070008795AA95E2F78170482B842F99270895A8 +:10308000FC01672B09F03FC284E090E091838083CC +:1030900086E090E09383828320E030E080E090E05F +:1030A0000000019645E08D379407D1F72F5F3F4F21 +:1030B0002436310599F784B321E030E0028002C064 +:1030C000220F331F0A94E2F7322F822B84BB85B381 +:1030D000622F6095862385BB40E050E080E090E061 +:1030E0000000019625E08D379207D1F74F5F5F4FC3 +:1030F0004A30510599F724B34081518181E090E035 +:10310000042E02C0880F991F0A94E2F7782F282B0B +:1031100024BBE7E0F0E0E41BF50B85B3862385BB19 +:1031200025B383B38095282380E890E00E2E02C05B +:10313000959587950A94E2F7472F4823242B25BBC2 +:10314000000085B3832B85BB85B3862385BB95B3F0 +:1031500083B38095982395BB000085B3832B85BBF3 +:1031600085B3862385BB95B383B38095982395BBA0 +:10317000000085B3832B85BB85B3862385BB95B3C0 +:1031800083B38095982395BB000085B3832B85BBC3 +:1031900085B3862385BB95B383B38095982395BB70 +:1031A000000085B3832B85BB85B3862385BB95B390 +:1031B00083B38095982395BB000085B3832B85BB93 +:1031C00085B3862385BB95B383B38095982395BB40 +:1031D000000085B3832B85BB85B3862385BB95B360 +:1031E00083B38095982395BB000085B3832B85BB63 +:1031F00084B3872B84BB85B3862385BB95B383B308 +:1032000080959823942B95BB000085B3832B85BBB9 +:1032100085B3862385BB95B383B38095982395BBEF +:10322000000085B3832B85BB85B3862385BB95B30F +:1032300083B38095982395BB000085B3832B85BB12 +:1032400085B3862385BB95B383B38095982395BBBF +:10325000000085B3832B85BB85B3862385BB95B3DF +:1032600083B38095982395BB000085B3832B85BBE2 +:1032700085B3862385BB95B383B38095982395BB8F +:10328000000085B3832B85BB85B3862385BB95B3AF +:1032900083B38095982395BB000085B3832B85BBB2 +:1032A00085B3862385BB95B383B38095982395BB5F +:1032B000000085B3832B85BB80E090E00000019681 +:1032C00021E08C329207D1F784B3872B84BB85B37E +:1032D000862385BB25B383B38095282380E890E0BF +:1032E0000E2E02C0959587950A94E2F78723282B26 +:1032F00025BB000085B3832B85BB85B3862385BBA7 +:1033000095B383B38095982395BB000085B3832B39 +:1033100085BB85B3862385BB95B383B380959823FE +:1033200095BB000085B3832B85BB85B3862385BB06 +:1033300095B383B38095982395BB000085B3832B09 +:1033400085BB85B3862385BB95B383B380959823CE +:1033500095BB000085B3832B85BB85B3862385BBD6 +:1033600095B383B38095982395BB000085B3832BD9 +:1033700085BB85B3862385BB95B383B3809598239E +:1033800095BB000085B3832B85BB85B3862385BBA6 +:1033900095B383B38095982395BB000085B3832BA9 +:1033A00085BB84B3872B84BB85B3862385BB25B3BC +:1033B00083B38095282381E090E00E2E02C095957E +:1033C00087950A94E2F78723282B25BB000085B355 +:1033D000832B85BB85B3862385BB25B383B38095BB +:1033E000282382E090E00E2E02C0959587950A94DE +:1033F000E2F78723282B25BB000085B3832B85BBF1 +:1034000085B3862385BB25B383B38095282384E0C9 +:1034100090E00E2E02C0959587950A94E2F78723D7 +:10342000282B25BB000085B3832B85BB85B3862362 +:1034300085BB25B383B38095282388E090E00E2ECA +:1034400002C0959587950A94E2F78723282B25BB20 +:10345000000085B3832B85BB85B3862385BB25B34D +:1034600083B38095282380E190E00E2E02C09595CD +:1034700087950A94E2F78723282B25BB000085B3A4 +:10348000832B85BB85B3862385BB25B383B380950A +:10349000282380E290E00E2E02C0959587950A942D +:1034A000E2F78723282B25BB000085B3832B85BB40 +:1034B00085B3862385BB25B383B38095282380E419 +:1034C00090E002C095958795EA95E2F77823272B3F +:1034D00025BB000085B3832B85BB85B3682365BB03 +:1034E00095B383B380959823942B95BB000085B347 +:1034F000382B35BB80E090E00000019641E08C3233 +:103500009407D1F7089585E090E09183808387E068 +:1035100090E093838283C0CDFC01608571858285B4 +:1035200093850E94671FDC01CB010895FC0164852F +:103530007585868597850E94671FDC01CB010895FC +:10354000FC018089918908952F923F924F925F925A +:103550006F927F928F929F92AF92BF92CF92DF92A3 +:10356000EF92FF920F931F93CF93DF93CDB7DEB708 +:1035700025970FB6F894DEBF0FBECDBF1C010E9489 +:10358000D716E82EC1010E947815482E84E0882EB7 +:10359000912C820C931CC4010E94D716A82EC40142 +:1035A0000E9478158983F10160897189635D7F4F7D +:1035B000882777FD8095982F0E94FE1E6A837B8363 +:1035C0008C839D83FF240027F7FC0095102FC801F2 +:1035D000B7010E94FE1E7B018C016A817B818C8178 +:1035E0009D810E945F239B01AC01C801B7010E942D +:1035F000E01D3B014C01BB24CC24B7FCC094DC2C67 +:10360000C601B5010E94FE1E7B018C016A817B818F +:103610008C819D810E94C2229B01AC01C801B7012F +:103620000E94E01D9B01AC01C401B3010E94B31DC7 +:1036300020E030E040E05FE30E94E01D9B01AC0130 +:10364000F10160857185828593850E94B31DF1012A +:1036500060877187828793875524662457FC60941E +:10366000762CC301B2010E94FE1E7B018C016A818F +:103670007B818C819D810E945F239B01AC01C801ED +:10368000B7010E94E01D5B016C01F9816F2F772764 +:10369000882777FD8095982F0E94FE1E7B018C0164 +:1036A0006A817B818C819D810E94C2229B01AC0139 +:1036B000C801B7010E94E01D9B01AC01C601B50124 +:1036C0000E94B31D20E030E040E05FE30E94E01D77 +:1036D0009B01AC01F10164857585868597850E9403 +:1036E000B31DF101648775878687978725960FB686 +:1036F000F894DEBF0FBECDBFDF91CF911F910F9128 +:10370000FF90EF90DF90CF90BF90AF909F908F9001 +:103710007F906F905F904F903F902F9008950F9300 +:103720001F938C0104960E94A208C8010E94A2085F +:103730001F910F9108950F931F938C0104960E947F +:10374000A208C8010E94A2081F910F910895EF924C +:10375000FF920F931F938C010E94A00894E0E92E22 +:10376000F12CE00EF11EC7010E94A00860E070E09D +:10377000C8010E94401861E070E0C7010E94401833 +:1037800080E090E0A0E0B0E0F80180879187A28718 +:10379000B38784879587A687B787118A108A1F9178 +:1037A0000F91FF90EF900895EF92FF920F931F9368 +:1037B0008C010E94A00824E0E22EF12CE00EF11E04 +:1037C000C7010E94A00860E070E0C8010E94401894 +:1037D00061E070E0C7010E94401880E090E0A0E046 +:1037E000B0E0F80180879187A287B38784879587A7 +:1037F000A687B787118A108A1F910F91FF90EF90CB +:103800000895FC018FEF9FEF9183808393838283E0 +:1038100095838483978386830895FC018FEF9FEFC0 +:103820009183808393838283958384839783868324 +:10383000089508950895FB016430710538F4EE0F82 +:10384000FF1FE80FF91F8081918108958FEF9FEF8F +:103850000895EF92FF920F931F937C010AE311E00A +:1038600060E070E0C8010E94C801F7019183808385 +:1038700061E070E0C8010E94C801F7019383828370 +:1038800062E070E0C8010E94C801F701958384835B +:1038900063E070E0C8010E94C801F7019783868346 +:1038A0001F910F91FF90EF900895A0E0B0E0EBE53D +:1038B000FCE10C948922FC016A019081923008F4A9 +:1038C0001BC1DB018C91823080F0943061F4843034 +:1038D00009F012C19181EB018981981709F40CC19B +:1038E000EBE2F1E009C1843011F4FB0105C1823043 +:1038F00091F4923009F000C1EA01DF0188E00D90F7 +:1039000009928150E1F78181FB0191818923E601D0 +:103910008983F601F1C0923041F362807380EB013C +:103920008A809B80E480F580068117812C813D810F +:103930004E815F815301A818B908C501B7FCABC01F +:1039400080970CF457C0861497040CF4BEC0340161 +:10395000EE24FF2487019181FB018181981709F4EE +:10396000A6C0992309F49CC02E193F09400B510BA6 +:1039700057FDB0C0E60119827B826A82F60124837A +:10398000358346835783E6012C813D814E815F81DB +:1039900079018A01DA01C9010197A109B1098F5F93 +:1039A0009F4FAF4FBF43F8F4E6016A817B81A801C6 +:1039B0009701220F331F441F551F6150704079013A +:1039C0008A01DA01C9010197A109B1098F5F9F4FEF +:1039D000AF4FBF4360F3E6017B836A83F601248324 +:1039E00035834683578383E0D6018C9357FD39C0D6 +:1039F000F60182C086149704B4F4C0E0D0E0DA0186 +:103A0000C90181709070A070B07056954795379538 +:103A10002795282B392B4A2B5B2B2196AC16BD06FC +:103A200071F78A0C9B1C681479040CF094CFC0E0E9 +:103A3000D0E05401A618B708D801C7018170907072 +:103A4000A070B07016950795F794E794E82AF92AC4 +:103A50000A2B1B2B2196AC16BD0671F76A0C7B1C3A +:103A60007ACFDA01C901B695A79597958795217008 +:103A7000307040705070282B392B4A2B5B2BE6019D +:103A80002C833D834E835F838A819B8101969B8338 +:103A90008A83F60131C0882799278A199B0950CF5C +:103AA000E21AF30A040B150BA801970161CFE60196 +:103AB00099837B826A822E0D3F1D401F511FF601A4 +:103AC00024833583468357838ECF20E030E040E067 +:103AD00050E041CF81E0E60189837B826A82509584 +:103AE0004095309521953F4F4F4F5F4FF60124830E +:103AF00035834683578347CFCF01EEE0CDB7DEB79E +:103B00000C94A522A0E2B0E0E8E8FDE10C9491223B +:103B100069837A838B839C832D833E834F8358876D +:103B200089E1E82EF12CEC0EFD1EB701CE010196C5 +:103B30000E94D9208E010F5E1F4FB801CE0105965D +:103B40000E94D9208A8991E089278A8BAE01475F3C +:103B50005F4FB801C7010E94551C0E94B71FE6E0E5 +:103B6000A0960C94AD22A0E2B0E0E9EBFDE10C944C +:103B7000912269837A838B839C832D833E834F8339 +:103B8000588799E1E92EF12CEC0EFD1EB701CE010C +:103B900001960E94D9208E010F5E1F4FB801CE0101 +:103BA00005960E94D920AE01475F5F4FB801C7015B +:103BB0000E94551C0E94B71FE6E0A0960C94AD220F +:103BC000A0E2B0E0E6EEFDE10C94852269837A8301 +:103BD0008B839C832D833E834F8358878E01075EA2 +:103BE0001F4FB801CE0101960E94D920F1E1EF2EBE +:103BF000F12CEC0EFD1EB701CE0105960E94D920D6 +:103C0000898D823078F09989923040F420E09A8D45 +:103C10008A89981321E02A8BB701E9C0843051F4D6 +:103C2000923061F020E09A8D8A89981321E02A8FE2 +:103C3000B801DDC0943029F4823041F76BE271E0C5 +:103C4000D6C0823079F3923009F32D8D3E8D4F8DA1 +:103C500058A18D899E89AF89B88D222433242101F2 +:103C6000AA24BB246501EE24FF24870160E070E0F4 +:103C70000DC06F5F7F4F6032710599F1880F991FFA +:103C8000AA1FBB1F569547953795279520FF19C04A +:103C9000280E391E4A1E5B1E66247724430128160F +:103CA00039064A065B0628F4E1E06E2E712C812C61 +:103CB000912CAE0CBF1CC01ED11EA60CB71CC81C7C +:103CC000D91CEE0CFF1C001F111FB7FFD2CFE1E083 +:103CD0006E2E712C812C912CE628F72808291929A1 +:103CE000C8CF8B8D9C8D2B893C89820F931F0296A8 +:103CF0009C878B871A869A8D8A89981711F081E0A4 +:103D00008A87D7FE17C08B859C85A0FE0CC0569471 +:103D100047943794279420E030E040E050E8222A8E +:103D2000332A442A552AD694C794B794A794019667 +:103D30009C878B8730E0A31630E0B30630E0C306E3 +:103D400030E4D30618F58B859C850EC0220C331CFD +:103D5000441C551C019720E0A21620E0B20620E08A +:103D6000C20620E4D20680F4AA0CBB1CCC1CDD1CCD +:103D700057FEECCF31E0632E712C812C912CA628BC +:103D8000B728C828D928E2CF9C878B87D601C501E0 +:103D90008F779070A070B07080349105A105B10547 +:103DA00051F0AD86BE86CF86D88A83E08987BE0172 +:103DB000675F7F4F1CC0A7FCF4CF2114310441047E +:103DC000510479F380E490E0A0E0B0E0A80EB91EC1 +:103DD000CA1EDB1E80E8682E8FEF782E8FEF882EAC +:103DE0008FEF982EA620B720C820D920DACFCB019C +:103DF0000E94B71FE2E1A0960C94A122A8E0B0E0D7 +:103E0000E4E0FFE10C9494229B01AC0183E0898300 +:103E10001A8257FD51C0211531054105510539F46C +:103E200082E08983CE0101960E94B71F4CC0EEE16B +:103E3000F0E0FC83EB838A818823C9F1203010E015 +:103E4000310710E0410710E85107C9F18827992789 +:103E5000DC01821B930BA40BB50B8D839E83AF8378 +:103E6000B8872D813E814F815885203080E038070A +:103E700080E0480780E45807A8F6EB81FC81DA016E +:103E8000C901880F991FAA1FBB1F31979C01AD0163 +:103E9000803010E0910710E0A10710E4B10778F33B +:103EA000FC83EB838D839E83AF83B887BBCF2D8349 +:103EB0003E834F835887D5CF81E08A83ACCF60E0C3 +:103EC00070E080E09FECE3E028960C94B022ACE038 +:103ED000B0E0EDE6FFE10C94952269837A838B8351 +:103EE0009C83BE016B5F7F4FCE0101960E94D9205B +:103EF0008D81823061F0823050F0843069F48E819F +:103F0000882359F52FEF3FEF4FEF5FE72AC020E0FE +:103F100030E040E050E025C02F81388537FDF7CFF5 +:103F20002F31310564F78EE190E0821B930B2985D8 +:103F30003A854B855C8504C05695479537952795FE +:103F40008A95D2F78E81882361F0509540953095FF +:103F500021953F4F4F4F5F4F04C020E030E040E0DD +:103F600050E8CA01B901E2E02C960C94B1224F92BC +:103F70005F926F927F928F929F92AF92BF92DF92E9 +:103F8000EF92FF920F931F9320E030E040E050E06B +:103F9000FC01E480F58006811781D1808081823028 +:103FA00038F4D801C701A061AF77B0706FEFD9C006 +:103FB000843009F46EC0823009F471C0E114F10458 +:103FC0000105110509F46BC0828193816FEF82387E +:103FD00096070CF06AC062E87FEF681B790B6A31C4 +:103FE00071050CF080C047015801062E04C0B6943C +:103FF000A794979487940A94D2F7442455243201C5 +:1040000081E090E0A0E0B0E004C0880F991FAA1FF3 +:10401000BB1F6A95D2F70197A109B109E822F922DD +:104020000A231B23E114F1040105110529F061E0C5 +:10403000462E512C612C712C85017401E428F52841 +:1040400006291729D801C7018F779070A070B0702A +:1040500080349105A105B10509F457C0D801C70105 +:10406000CF96A11DB11D60E070E08030E0E09E07BA +:10407000E0E0AE07E0E4BE0710F061E070E027E0AA +:10408000B695A795979587952A95D1F7AF77B07094 +:1040900068C080E090E0A0E0B0E06FEF62C080E038 +:1040A00090E0A0E0B0E060E05CC0803891058CF763 +:1040B000BC0161587F4FD801C7018F779070A07005 +:1040C000B07080349105A105B105A1F08FE390E0B7 +:1040D000A0E0B0E0E80EF91E0A1F1B1F17FD28C064 +:1040E000D801C701CCCF60E070E080E090E0A0E0B4 +:1040F000B0E0CCCFE7FEF2CF80E490E0A0E0B0E00B +:10410000E80EF91E0A1F1B1FE9CFE7FC18C080E06C +:1041100090E060E0E61660E0F60660E0060760E426 +:10412000160710F081E090E0BC01D801C701A7CFCD +:1041300016950795F794E7946F5F7F4FD1CFD8011D +:10414000C701805C9F4FAF4FBF4F60E070E0803091 +:10415000E0E09E07E0E0AE07E0E4BE0708F48FCFA2 +:104160008CCF282F392F9A2F9F77842F8078892BF7 +:10417000962F9795992797958F77482F492B669576 +:10418000852F8078862BD794DD24D7948F77582F6E +:104190005D29CA01B9011F910F91FF90EF90DF9047 +:1041A000BF90AF909F908F907F906F905F904F9057 +:1041B0000895FC01DB01208131819281492F4F77E5 +:1041C00050E0991F9927991F8381682F660F692BEB +:1041D000881F8827881FFD018183662309F049C055 +:1041E000211531054105510509F470C082E89FEFA2 +:1041F000FD0193838283220F331F441F551F220F1B +:10420000331F441F551F220F331F441F551F220FFA +:10421000331F441F551F220F331F441F551F220FEA +:10422000331F441F551F220F331F441F551F83E0A8 +:104230008C932030F0E03F07F0E04F07F0E45F0799 +:1042400090F482E89FEF220F331F441F551F019700 +:10425000203060E0360760E0460760E4560798F3D8 +:10426000FD0193838283FD01248335834683578335 +:1042700008956F3F71F1862F99278F579040FD0168 +:104280009383828383E08C93220F331F441F551F37 +:10429000220F331F441F551F220F331F441F551F6A +:1042A000220F331F441F551F220F331F441F551F5A +:1042B000220F331F441F551F220F331F441F551F4A +:1042C00050642483358346835783089582E08C931A +:1042D0000895211531054105510519F484E08C93A9 +:1042E000089544FD02C01C92BECF81E08C93BBCFE9 +:1042F000CF93DF93AC01029710F442E050E0A0911D +:10430000FE01B091FF01FD01C0E0D0E020E030E00F +:1043100020C0808191818417950769F482819381FF +:10432000209719F09B838A8304C09093FF018093A8 +:10433000FE01CF0132C04817590738F42115310565 +:1043400019F08217930708F49C01EF010280F381B2 +:10435000E02D3097F1F62115310589F1C901841B53 +:10436000950B049708F4A901E0E0F0E026C08D91D8 +:104370009C91119782179307E9F44817590779F42C +:10438000ED018A819B81309719F09383828304C069 +:104390009093FF018093FE01CD01029649C0841BDA +:1043A000950BFD01E80FF91F4193519302978D93EF +:1043B0009C933AC0FD01A281B3811097C1F6809110 +:1043C000FC019091FD01892B41F480913501909180 +:1043D00036019093FD018093FC01209137013091CB +:1043E00038012115310541F42DB73EB780913301D5 +:1043F00090913401281B390BE091FC01F091FD01F3 +:104400002E1B3F0B2417350788F0CA010296281788 +:10441000390760F0CF01840F951F02969093FD013C +:104420008093FC0141935193CF0102C080E090E062 +:10443000DF91CF910895CF93DF93009709F44EC099 +:10444000EC0122971B821A82A091FE01B091FF011C +:10445000109711F140E050E001C0DC01AC17BD073E +:1044600000F1BB83AA83FE0121913191E20FF31F7A +:10447000EA17FB0771F42E5F3F4F8D919C911197C6 +:10448000820F931F99838883FD01828193819B838F +:104490008A834115510559F4D093FF01C093FE0161 +:1044A0001DC0FD0182819381AD010097B1F6FA0133 +:1044B000D383C28321913191E20FF31FEC17FD07E3 +:1044C00069F42E5F3F4F88819981820F931FFA0113 +:1044D000918380838A819B8193838283DF91CF91B3 +:1044E0000895AA1BBB1B51E107C0AA1FBB1FA6173B +:1044F000B70710F0A61BB70B881F991F5A95A9F78D +:1045000080959095BC01CD0108952F923F924F92D6 +:104510005F926F927F928F929F92AF92BF92CF9253 +:10452000DF92EF92FF920F931F93CF93DF93CDB75C +:10453000DEB7CA1BDB0B0FB6F894DEBF0FBECDBFD4 +:1045400009942A88398848885F846E847D848C84A5 +:104550009B84AA84B984C884DF80EE80FD800C81AE +:104560001B81AA81B981CE0FD11D0FB6F894DEBF91 +:104570000FBECDBFED010895EE0FFF1F0590F49122 +:10458000E02D099450E449EC3FE02BED01D013C03D +:104590005F77552319F444230AF02BC02F933F93E0 +:1045A0004F935F93A3D05527442759D05F914F91E4 +:1045B0003F912F9105CB1F939F7750EC49E43FE04B +:1045C0002BEDD1DA10E89F775FE349EC3FE02BED6C +:1045D000621773078407950720F050EC49E4C3DAAB +:1045E000112780D09068ECE8F0E006D091271F9169 +:1045F00008959FEF80EC0895FF92EF92DF92CF92A3 +:10460000BF926B017C01B59016D0B590BB2069F0CC +:104610009F938F937F936F93B601C7010CD02F9117 +:104620003F914F915F910E947623BF90CF90DF9092 +:10463000EF90FF900895A0D002C09601A701EF93DC +:10464000FF930E94E01DFF91EF9196D0EF93FF93AF +:104650000E94B31DFF91EF91BA9479F70895C8D0E5 +:10466000CF93DF93D52FC42F5527442733272227F5 +:104670009923D9F09F37C8F0F92F88D0592F482FA8 +:10468000372F262FF63968F422DCB8DBC030CD078F +:1046900021F069937993899399939058DF91CF9101 +:1046A00062CA9927882777276627C030CD0721F06F +:1046B0002993399349935993DF91CF9167C09F9381 +:1046C0009F77993358F050E449EC3FE02BED60DFE1 +:1046D0005FEB49EC3FE02BED46DA6DDF5F91507800 +:1046E000952708959B01AC010C94E01D67D001D083 +:1046F0004DC0552359F0992369F09F575F57951B7B +:1047000033F442F4903811F4915805C072CF9158A7 +:104710009F3F09F47FC0BB271124621773078407EA +:1047200030F4660F771F881FBB1F915098F311D08C +:104730000F920FD00F920DD0A0E826173707480729 +:104740001B0609F0A048BA2F602D7F918F9100249D +:104750000895A0E80024621773078407B10528F0C4 +:10476000621B730B840BB1090A2A660F771F881F1F +:10477000BB1FA69581F708955591459135912591D7 +:1047800008959A95BB0F661F771F881F11249923E0 +:10479000A1F08823B2F79F3F59F0BB0F48F421F4F2 +:1047A000002011F460FF04C06F5F7F4F8F4F9F4F59 +:1047B000881F9795879597F9089529C0052E092692 +:1047C00007FA440F551F5F3F79F0AA27A51708F095 +:1047D00051E04795880F991F9F3F31F0BB27B917CC +:1047E00008F091E0879508959F919F91112401CF42 +:1047F00097FB880F991F9F3F31F0BB27B91708F02F +:1048000091E0879508959F919F911124F2CE66279C +:10481000772788279927089510E0C4EBD0E004C0DB +:0E482000FE010E94BE222296C63BD107C9F7B8 +:10482E00330048616C6C6F2068696572206973741F +:10483E002064617320524E4D656761313238467582 +:10484E006E6B2D426F61726400FF0000000000006D +:0A485E00000000200000020000002E :00000001FF diff --git a/source/AVR_Studio/Soccer/default/dep/Soccer.o.d b/source/AVR_Studio/Soccer/default/dep/Soccer.o.d index 4c16d08..51a77bf 100755 --- a/source/AVR_Studio/Soccer/default/dep/Soccer.o.d +++ b/source/AVR_Studio/Soccer/default/dep/Soccer.o.d @@ -7,12 +7,9 @@ Soccer.o: ../Soccer.c ../global.h c:/winavr/bin/../avr/include/stdlib.h \ c:/winavr/bin/../avr/include/avr/iom128.h \ c:/winavr/bin/../avr/include/avr/portpins.h \ c:/winavr/bin/../avr/include/avr/version.h \ - c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/uart.h \ - ../hal/../global.h ../hal/keylcd.h ../hal/i2c.h \ - c:/winavr/bin/../avr/include/compat/twi.h \ - c:/winavr/bin/../avr/include/util/twi.h \ - c:/winavr/bin/../avr/include/string.h ../navigation.h \ - c:/winavr/bin/../avr/include/math.h ../sensor/sensor.h \ + c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/../global.h \ + ../hal/keylcd.h c:/winavr/bin/../avr/include/string.h ../hal/uart.h \ + ../navigation.h c:/winavr/bin/../avr/include/math.h ../sensor/sensor.h \ ../sensor/../hal/board.h ../sensor/ballsensor.h ../sensor/position.h \ ../sensor/../hal/maussensor.h ../sensor/../hal/../global.h \ ../sensor/abstand.h ../sensor/../global.h @@ -41,20 +38,14 @@ c:/winavr/bin/../avr/include/avr/version.h: c:/winavr/bin/../avr/include/avr/interrupt.h: -../hal/uart.h: - ../hal/../global.h: ../hal/keylcd.h: -../hal/i2c.h: - -c:/winavr/bin/../avr/include/compat/twi.h: - -c:/winavr/bin/../avr/include/util/twi.h: - c:/winavr/bin/../avr/include/string.h: +../hal/uart.h: + ../navigation.h: c:/winavr/bin/../avr/include/math.h: diff --git a/source/AVR_Studio/Soccer/default/dep/board.o.d b/source/AVR_Studio/Soccer/default/dep/board.o.d index 255bb8a..1553156 100755 --- a/source/AVR_Studio/Soccer/default/dep/board.o.d +++ b/source/AVR_Studio/Soccer/default/dep/board.o.d @@ -8,8 +8,8 @@ board.o: ../hal/board.c ../hal/board.h \ c:/winavr/bin/../avr/include/avr/version.h \ c:/winavr/bin/../avr/include/avr/interrupt.h \ c:/winavr/bin/../avr/include/stdlib.h \ - c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h ../hal/uart.h \ - ../hal/../global.h ../hal/../hal/board.h + c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h ../hal/../global.h \ + ../hal/../hal/board.h ../hal/board.h: @@ -33,8 +33,6 @@ c:/winavr/bin/../avr/include/stdlib.h: c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h: -../hal/uart.h: - ../hal/../global.h: ../hal/../hal/board.h: diff --git a/source/AVR_Studio/Soccer/default/dep/keylcd.o.d b/source/AVR_Studio/Soccer/default/dep/keylcd.o.d index 5a3eaeb..e69de29 100755 --- a/source/AVR_Studio/Soccer/default/dep/keylcd.o.d +++ b/source/AVR_Studio/Soccer/default/dep/keylcd.o.d @@ -1,52 +0,0 @@ -keylcd.o: ../hal/keylcd.c ../hal/keylcd.h ../hal/i2c.h ../hal/../global.h \ - c:/winavr/bin/../avr/include/stdlib.h \ - c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h \ - ../hal/../hal/board.h c:/winavr/bin/../avr/include/avr/io.h \ - c:/winavr/bin/../avr/include/avr/sfr_defs.h \ - c:/winavr/bin/../avr/include/inttypes.h \ - c:/winavr/bin/../avr/include/stdint.h \ - c:/winavr/bin/../avr/include/avr/iom128.h \ - c:/winavr/bin/../avr/include/avr/portpins.h \ - c:/winavr/bin/../avr/include/avr/version.h \ - c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/../hal/uart.h \ - ../hal/../hal/../global.h c:/winavr/bin/../avr/include/compat/twi.h \ - c:/winavr/bin/../avr/include/util/twi.h \ - c:/winavr/bin/../avr/include/string.h - -../hal/keylcd.h: - -../hal/i2c.h: - -../hal/../global.h: - -c:/winavr/bin/../avr/include/stdlib.h: - -c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h: - -../hal/../hal/board.h: - -c:/winavr/bin/../avr/include/avr/io.h: - -c:/winavr/bin/../avr/include/avr/sfr_defs.h: - -c:/winavr/bin/../avr/include/inttypes.h: - -c:/winavr/bin/../avr/include/stdint.h: - -c:/winavr/bin/../avr/include/avr/iom128.h: - -c:/winavr/bin/../avr/include/avr/portpins.h: - -c:/winavr/bin/../avr/include/avr/version.h: - -c:/winavr/bin/../avr/include/avr/interrupt.h: - -../hal/../hal/uart.h: - -../hal/../hal/../global.h: - -c:/winavr/bin/../avr/include/compat/twi.h: - -c:/winavr/bin/../avr/include/util/twi.h: - -c:/winavr/bin/../avr/include/string.h: diff --git a/source/AVR_Studio/Soccer/hal/board.c b/source/AVR_Studio/Soccer/hal/board.c index 458ed03..9d895e8 100755 --- a/source/AVR_Studio/Soccer/hal/board.c +++ b/source/AVR_Studio/Soccer/hal/board.c @@ -16,7 +16,7 @@ Board::Board() { PORTC = 0; // Alle Low, kein Pollup // Alle Ausgänge bis auf PD0+1(I2C) + 2+3(RS232) - DDRD = (1 << PD2) | (1 << PD3) | (1 << PD4) | (1 << PD5) | (1 << PD6) | (1 << PD7); + DDRD = (1 << PD3) | (1 << PD4) | (1 << PD5) | (1 << PD6) | (1 << PD7); PORTD = (1 << PD0) | (1 << PD1); // Pollup-Widerstand an PD0+1 aktivieren // PE5 ist eingang @@ -33,11 +33,11 @@ Board::Board() { // aktiviere Kanal A+B auf PWM1 mit 8Bit TCCR1A = (1<< COM1A1) | (1<< COM1B1) | (1<< WGM10); - TCCR1B = (1< enable counter + TCCR1B = (1< enable counter // aktiviere Kanal A+B auf PWM3 mit 8Bit TCCR3A = (1<< COM3A1) | (1<< COM3B1) | (1<< WGM10); - TCCR3B = (1< enable counter + TCCR3B = (1< enable counter // Schalte Motoren auf 0 motor(0,0); @@ -49,8 +49,11 @@ Board::Board() { PORTE &= ~(1 << PE6); // Pin2 low PORTA |= (1 << PA2); // Pin1 high - // Uart-Interface einschalten - uart1_init( 10); // 9600 BAUD bei 16MHz Atmel + // Dribbler-richtung einstellen + DRIBBLER_PORT |= DRIBBLER_A; // Pin1 high + DRIBBLER_PORT &= ~DRIBBLER_B; // Pin2 low + + // aktiviere interrupt sei(); @@ -202,27 +205,6 @@ void Board::motor(int i, int speed) MOTOR2_PORT |= MOTOR2_A;//In 1 ein } } - else if(i == 3) // Dribbler... hier haben wir kein PWM - { - if(speed > 0) - { - DRIBBLER_PORT |= DRIBBLER_A;//In 1 ein - DRIBBLER_PORT &= ~DRIBBLER_B;//In 2 aus - DRIBBLER_PWMPORT |= DRIBBLER_PWM; - } - else if(speed < 0) - { - DRIBBLER_PORT |= DRIBBLER_B;//In 2 ein - DRIBBLER_PORT &= ~DRIBBLER_A;//In 1 aus - DRIBBLER_PWMPORT |= DRIBBLER_PWM; - } - else - { - DRIBBLER_PORT |= DRIBBLER_B;//In 2 ein - DRIBBLER_PORT |= DRIBBLER_A;//In 1 ein - DRIBBLER_PWMPORT &= ~DRIBBLER_PWM; - } - } } void Board::kicker() { @@ -231,6 +213,19 @@ void Board::kicker() { KICKER_AUS } +void Board::dribblerOn() { + DRIBBLER_AN +} + +void Board::dribblerOff() { + DRIBBLER_AUS +} + +void Board::dribbler(bool status) { + if(status) dribblerOn(); + else dribblerOff(); +} + //PWM routine für den Beeper ISR (TIMER0_OVF_vect) { diff --git a/source/AVR_Studio/Soccer/hal/board.h b/source/AVR_Studio/Soccer/hal/board.h index a76aeb7..e608836 100755 --- a/source/AVR_Studio/Soccer/hal/board.h +++ b/source/AVR_Studio/Soccer/hal/board.h @@ -4,7 +4,7 @@ #include #include #include -#include "uart.h" +//#include "uart.h" #include "../global.h" //#define abs(a) ((a < 0)? -a : a) @@ -26,10 +26,12 @@ #define MOTOR2_PWM OCR3A #define MOTOR2_A (1 << 5) #define MOTOR2_B (1 << 4) - + + +// Dribbler #define DRIBBLER_PORT PORTD -#define DRIBBLER_PWMPORT PORTA -#define DRIBBLER_PWM (1 << 5) +#define DRIBBLER_AN PORTA |= (1 << 5); +#define DRIBBLER_AUS PORTA &= ~(1 << 5); #define DRIBBLER_A (1 << 6) #define DRIBBLER_B (1 << 7) @@ -62,6 +64,10 @@ public: void led(bool status); void motor(int i, int speed); void kicker(); + + void dribbler(bool status); + void dribblerOn(); + void dribblerOff(); }; #endif diff --git a/source/AVR_Studio/Soccer/hal/keylcd.c b/source/AVR_Studio/Soccer/hal/keylcd.c index fb2efa6..4b98f75 100755 --- a/source/AVR_Studio/Soccer/hal/keylcd.c +++ b/source/AVR_Studio/Soccer/hal/keylcd.c @@ -1,7 +1,8 @@ #include "keylcd.h" -KeyLCD::KeyLCD() : i2c() { - +KeyLCD::KeyLCD() { + // Uart-Interface einschalten + uart1_init( 103); // 9600 BAUD bei 16MHz Atmel } KeyLCD::~KeyLCD() { @@ -10,12 +11,7 @@ KeyLCD::~KeyLCD() { // Gibt Daten auf dem keyLCD aus void KeyLCD::print(char *data) { - int len=strlen(data); - uint8_t buf[len+1]; - - for (int i=0; iRoboCode16-Feb-2007 15:16:4616-Feb-2007 16:19:25241016-Feb-2007 15:16:4644, 12, 0, 462AVR GCCdefault\RoboCode.elfI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\falseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31000main.cppsensor.cpptools.cppatmega128io.cppdistance_sensor.cppengine.cppio_module.cppir_sensor.cppkicker.cppled.cpprobot.cppsensor.hstdafx.htools.hatmega128io.hdefines.hdistance_sensor.hengine.hio_module.hir_sensor.hkicker.hled.hrobot.hdefault\MakefiledefaultYESdefault\Makefileatmega128100RoboCode.elfdefault\1-Wall -gdwarf-2 -O0 -fsigned-chardefault1G:\_Tools\Winavr\bin\avr-gcc.exeG:\_Tools\Winavr\utils\bin\make.exeI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\sensor.hI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\stdafx.hI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\tools.hI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\atmega128io.hI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\defines.hI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\distance_sensor.hI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\engine.hI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\io_module.hI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\ir_sensor.hI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\kicker.hI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\led.hI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\robot.hI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\main.cppI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\sensor.cppI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\tools.cppI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\atmega128io.cppI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\distance_sensor.cppI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\engine.cppI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\io_module.cppI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\ir_sensor.cppI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\kicker.cppI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\led.cppI:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\robot.cpp00000stdafx.h100001engine.h100002defines.h100003io_module.h100004robot.h100005robot.cpp100006atmega128io.h100007main.cpp100008tools.cpp100009tools.h1331 119 937 3937 24353 141 953 387123 3375 163 975 409107 8397 185 997 43116 0419 207 1019 4533 19309 97 909 34344 0353 141 953 3874 26375 163 975 4095 0397 185 997 4312 11419 207 1019 4535 11 +RoboCode16-Feb-2007 15:16:4617-Feb-2007 01:31:58241016-Feb-2007 15:16:4644, 12, 0, 462AVR GCCdefault\RoboCode.elfY:\Concept\Framework\falseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31000main.cppsensor.cpptools.cppatmega128io.cppdistance_sensor.cppengine.cppio_module.cppir_sensor.cppkicker.cppled.cpprobot.cppdribbler.cppdisplay.cppsensor.hstdafx.htools.hatmega128io.hdefines.hdistance_sensor.hengine.hio_module.hir_sensor.hkicker.hled.hrobot.hdribbler.hdisplay.hdefault\MakefiledefaultYESdefault\Makefileatmega128100RoboCode.elfdefault\1-Wall -gdwarf-2 -O0 -fsigned-chardefault1C:\WinAVR\bin\avr-gcc.exeC:\WinAVR\utils\bin\make.exeY:\Concept\Framework\sensor.hY:\Concept\Framework\stdafx.hY:\Concept\Framework\tools.hY:\Concept\Framework\atmega128io.hY:\Concept\Framework\defines.hY:\Concept\Framework\distance_sensor.hY:\Concept\Framework\engine.hY:\Concept\Framework\io_module.hY:\Concept\Framework\ir_sensor.hY:\Concept\Framework\kicker.hY:\Concept\Framework\led.hY:\Concept\Framework\robot.hY:\Concept\Framework\dribbler.hY:\Concept\Framework\display.hY:\Concept\Framework\main.cppY:\Concept\Framework\sensor.cppY:\Concept\Framework\tools.cppY:\Concept\Framework\atmega128io.cppY:\Concept\Framework\distance_sensor.cppY:\Concept\Framework\engine.cppY:\Concept\Framework\io_module.cppY:\Concept\Framework\ir_sensor.cppY:\Concept\Framework\kicker.cppY:\Concept\Framework\led.cppY:\Concept\Framework\robot.cppY:\Concept\Framework\dribbler.cppY:\Concept\Framework\display.cpp00000stdafx.h100001engine.h100002defines.h100003io_module.h100004robot.h100005robot.cpp100006atmega128io.h100007main.cpp100008tools.cpp100009tools.h100010distance_sensor.h100011ir_sensor.h100012kicker.h100013led.h100014sensor.h100015dribbler.h100016kicker.cpp100017dribbler.cpp100018ir_sensor.cpp100019io_module.cpp100020engine.cpp100021distance_sensor.cpp100022atmega128io.cpp100023led.cpp100024sensor.cpp100025display.h100026display.cpp1299 73 1025 5287 24347 137 947 38311 21369 159 969 40557 11391 181 991 42716 0413 203 1013 44919 38303 93 903 33969 15347 137 947 38318 37299 72 1025 52786 2Maximized391 181 991 4272 0413 203 1013 44936 2300 100 930 4054 19322 129 952 43423 0344 158 974 46329 0366 187 996 49258 0388 216 1018 5210 0300 100 930 40543 0344 158 974 4631 0366 187 996 4920 0388 216 1018 5219 0300 100 930 4051 0322 129 952 4341 0344 158 974 4630 28366 187 996 492463 0388 216 1018 5211 0300 100 930 4050 19303 102 933 40726 11347 160 977 4650 0 diff --git a/source/Concept/Framework/atmega128io.cpp b/source/Concept/Framework/atmega128io.cpp index cf8fb98..b1d6f4d 100644 --- a/source/Concept/Framework/atmega128io.cpp +++ b/source/Concept/Framework/atmega128io.cpp @@ -1 +1,585 @@ -#include "atmega128io.h" \ No newline at end of file +#include "atmega128io.h" + +/************************************************************************* +Title: Interrupt UART library with receive/transmit circular buffers +Author: Peter Fleury http://jump.to/fleury +File: $Id: uart.c,v 1.5.2.10 2005/11/15 19:49:12 peter Exp $ +Software: AVR-GCC 3.3 +Hardware: any AVR with built-in UART, + tested on AT90S8515 at 4 Mhz and ATmega at 1Mhz + +DESCRIPTION: + An interrupt is generated when the UART has finished transmitting or + receiving a byte. The interrupt handling routines use circular buffers + for buffering received and transmitted data. + + The UART_RX_BUFFER_SIZE and UART_TX_BUFFER_SIZE variables define + the buffer size in bytes. Note that these variables must be a + power of 2. + +USAGE: + Refere to the header file uart.h for a description of the routines. + See also example test_uart.c. + +NOTES: + Based on Atmel Application Note AVR306 + +*************************************************************************/ +#include +#include +//#include +#include + +/* + * constants and macros + */ + +/* size of RX/TX buffers */ +#define UART_RX_BUFFER_MASK ( UART_RX_BUFFER_SIZE - 1) +#define UART_TX_BUFFER_MASK ( UART_TX_BUFFER_SIZE - 1) + +#if ( UART_RX_BUFFER_SIZE & UART_RX_BUFFER_MASK ) +#error RX buffer size is not a power of 2 +#endif +#if ( UART_TX_BUFFER_SIZE & UART_TX_BUFFER_MASK ) +#error TX buffer size is not a power of 2 +#endif + +#if defined(__AVR_AT90S2313__) \ + || defined(__AVR_AT90S4414__) || defined(__AVR_AT90S4434__) \ + || defined(__AVR_AT90S8515__) || defined(__AVR_AT90S8535__) \ + || defined(__AVR_ATmega103__) + /* old AVR classic or ATmega103 with one UART */ + #define AT90_UART + #define UART0_RECEIVE_INTERRUPT SIG_UART_RECV + #define UART0_TRANSMIT_INTERRUPT SIG_UART_DATA + #define UART0_STATUS USR + #define UART0_CONTROL UCR + #define UART0_DATA UDR + #define UART0_UDRIE UDRIE +#elif defined(__AVR_AT90S2333__) || defined(__AVR_AT90S4433__) + /* old AVR classic with one UART */ + #define AT90_UART + #define UART0_RECEIVE_INTERRUPT SIG_UART_RECV + #define UART0_TRANSMIT_INTERRUPT SIG_UART_DATA + #define UART0_STATUS UCSRA + #define UART0_CONTROL UCSRB + #define UART0_DATA UDR + #define UART0_UDRIE UDRIE +#elif defined(__AVR_ATmega8__) || defined(__AVR_ATmega16__) || defined(__AVR_ATmega32__) \ + || defined(__AVR_ATmega8515__) || defined(__AVR_ATmega8535__) \ + || defined(__AVR_ATmega323__) + /* ATmega with one USART */ + #define ATMEGA_USART + #define UART0_RECEIVE_INTERRUPT SIG_UART_RECV + #define UART0_TRANSMIT_INTERRUPT SIG_UART_DATA + #define UART0_STATUS UCSRA + #define UART0_CONTROL UCSRB + #define UART0_DATA UDR + #define UART0_UDRIE UDRIE +#elif defined(__AVR_ATmega163__) + /* ATmega163 with one UART */ + #define ATMEGA_UART + #define UART0_RECEIVE_INTERRUPT SIG_UART_RECV + #define UART0_TRANSMIT_INTERRUPT SIG_UART_DATA + #define UART0_STATUS UCSRA + #define UART0_CONTROL UCSRB + #define UART0_DATA UDR + #define UART0_UDRIE UDRIE +#elif defined(__AVR_ATmega162__) + /* ATmega with two USART */ + #define ATMEGA_USART0 + #define ATMEGA_USART1 + #define UART0_RECEIVE_INTERRUPT SIG_USART0_RECV + #define UART1_RECEIVE_INTERRUPT SIG_USART1_RECV + #define UART0_TRANSMIT_INTERRUPT SIG_USART0_DATA + #define UART1_TRANSMIT_INTERRUPT SIG_USART1_DATA + #define UART0_STATUS UCSR0A + #define UART0_CONTROL UCSR0B + #define UART0_DATA UDR0 + #define UART0_UDRIE UDRIE0 + #define UART1_STATUS UCSR1A + #define UART1_CONTROL UCSR1B + #define UART1_DATA UDR1 + #define UART1_UDRIE UDRIE1 +#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) + /* ATmega with two USART */ + #define ATMEGA_USART0 + #define ATMEGA_USART1 + #define UART0_RECEIVE_INTERRUPT SIG_UART0_RECV + #define UART1_RECEIVE_INTERRUPT SIG_UART1_RECV + #define UART0_TRANSMIT_INTERRUPT SIG_UART0_DATA + #define UART1_TRANSMIT_INTERRUPT SIG_UART1_DATA + #define UART0_STATUS UCSR0A + #define UART0_CONTROL UCSR0B + #define UART0_DATA UDR0 + #define UART0_UDRIE UDRIE0 + #define UART1_STATUS UCSR1A + #define UART1_CONTROL UCSR1B + #define UART1_DATA UDR1 + #define UART1_UDRIE UDRIE1 +#elif defined(__AVR_ATmega161__) + /* ATmega with UART */ + #error "AVR ATmega161 currently not supported by this libaray !" +#elif defined(__AVR_ATmega169__) + /* ATmega with one USART */ + #define ATMEGA_USART + #define UART0_RECEIVE_INTERRUPT SIG_USART_RECV + #define UART0_TRANSMIT_INTERRUPT SIG_USART_DATA + #define UART0_STATUS UCSRA + #define UART0_CONTROL UCSRB + #define UART0_DATA UDR + #define UART0_UDRIE UDRIE +#elif defined(__AVR_ATmega48__) ||defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__) + #define ATMEGA_USART0 + #define UART0_RECEIVE_INTERRUPT SIG_USART_RECV + #define UART0_TRANSMIT_INTERRUPT SIG_USART_DATA + #define UART0_STATUS UCSR0A + #define UART0_CONTROL UCSR0B + #define UART0_DATA UDR0 + #define UART0_UDRIE UDRIE0 +#elif defined(__AVR_ATtiny2313__) + #define ATMEGA_USART + #define UART0_RECEIVE_INTERRUPT SIG_USART0_RX + #define UART0_TRANSMIT_INTERRUPT SIG_USART0_UDRE + #define UART0_STATUS UCSRA + #define UART0_CONTROL UCSRB + #define UART0_DATA UDR + #define UART0_UDRIE UDRIE +#else + #error "no UART definition for MCU available" +#endif + + +/* + * module global variables + */ +static volatile unsigned char UART_TxBuf[UART_TX_BUFFER_SIZE]; +static volatile unsigned char UART_RxBuf[UART_RX_BUFFER_SIZE]; +static volatile unsigned char UART_TxHead; +static volatile unsigned char UART_TxTail; +static volatile unsigned char UART_RxHead; +static volatile unsigned char UART_RxTail; +static volatile unsigned char UART_LastRxError; + +#if defined( ATMEGA_USART1 ) +static volatile unsigned char UART1_TxBuf[UART_TX_BUFFER_SIZE]; +static volatile unsigned char UART1_RxBuf[UART_RX_BUFFER_SIZE]; +static volatile unsigned char UART1_TxHead; +static volatile unsigned char UART1_TxTail; +static volatile unsigned char UART1_RxHead; +static volatile unsigned char UART1_RxTail; +static volatile unsigned char UART1_LastRxError; +#endif + + + +SIGNAL(UART0_RECEIVE_INTERRUPT) +/************************************************************************* +Function: UART Receive Complete interrupt +Purpose: called when the UART has received a character +**************************************************************************/ +{ + unsigned char tmphead; + unsigned char data; + unsigned char usr; + unsigned char lastRxError; + + + /* read UART status register and UART data register */ + usr = UART0_STATUS; + data = UART0_DATA; + + /* */ +#if defined( AT90_UART ) + lastRxError = (usr & (_BV(FE)|_BV(DOR)) ); +#elif defined( ATMEGA_USART ) + lastRxError = (usr & (_BV(FE)|_BV(DOR)) ); +#elif defined( ATMEGA_USART0 ) + lastRxError = (usr & (_BV(FE0)|_BV(DOR0)) ); +#elif defined ( ATMEGA_UART ) + lastRxError = (usr & (_BV(FE)|_BV(DOR)) ); +#endif + + /* calculate buffer index */ + tmphead = ( UART_RxHead + 1) & UART_RX_BUFFER_MASK; + + if ( tmphead == UART_RxTail ) { + /* error: receive buffer overflow */ + lastRxError = UART_BUFFER_OVERFLOW >> 8; + }else{ + /* store new index */ + UART_RxHead = tmphead; + /* store received data in buffer */ + UART_RxBuf[tmphead] = data; + } + UART_LastRxError = lastRxError; +} + + +SIGNAL(UART0_TRANSMIT_INTERRUPT) +/************************************************************************* +Function: UART Data Register Empty interrupt +Purpose: called when the UART is ready to transmit the next byte +**************************************************************************/ +{ + unsigned char tmptail; + + + if ( UART_TxHead != UART_TxTail) { + /* calculate and store new buffer index */ + tmptail = (UART_TxTail + 1) & UART_TX_BUFFER_MASK; + UART_TxTail = tmptail; + /* get one byte from buffer and write it to UART */ + UART0_DATA = UART_TxBuf[tmptail]; /* start transmission */ + }else{ + /* tx buffer empty, disable UDRE interrupt */ + UART0_CONTROL &= ~_BV(UART0_UDRIE); + } +} + + +/************************************************************************* +Function: uart_init() +Purpose: initialize UART and set baudrate +Input: baudrate using macro UART_BAUD_SELECT() +Returns: none +**************************************************************************/ +void uart_init(unsigned int baudrate) +{ + UART_TxHead = 0; + UART_TxTail = 0; + UART_RxHead = 0; + UART_RxTail = 0; + +#if defined( AT90_UART ) + /* set baud rate */ + UBRR = (unsigned char)baudrate; + + /* enable UART receiver and transmmitter and receive complete interrupt */ + UART0_CONTROL = _BV(RXCIE)|_BV(RXEN)|_BV(TXEN); + +#elif defined (ATMEGA_USART) + /* Set baud rate */ + if ( baudrate & 0x8000 ) + { + UART0_STATUS = (1<>8); + UBRRL = (unsigned char) baudrate; + + /* Enable USART receiver and transmitter and receive complete interrupt */ + UART0_CONTROL = _BV(RXCIE)|(1<>8); + UBRR0L = (unsigned char) baudrate; + + /* Enable USART receiver and transmitter and receive complete interrupt */ + UART0_CONTROL = _BV(RXCIE0)|(1<>8); + UBRR = (unsigned char) baudrate; + + /* Enable UART receiver and transmitter and receive complete interrupt */ + UART0_CONTROL = _BV(RXCIE)|(1<> 8; + }else{ + /* store new index */ + UART1_RxHead = tmphead; + /* store received data in buffer */ + UART1_RxBuf[tmphead] = data; + } + UART1_LastRxError = lastRxError; +} + + +SIGNAL(UART1_TRANSMIT_INTERRUPT) +/************************************************************************* +Function: UART1 Data Register Empty interrupt +Purpose: called when the UART1 is ready to transmit the next byte +**************************************************************************/ +{ + unsigned char tmptail; + + + if ( UART1_TxHead != UART1_TxTail) { + /* calculate and store new buffer index */ + tmptail = (UART1_TxTail + 1) & UART_TX_BUFFER_MASK; + UART1_TxTail = tmptail; + /* get one byte from buffer and write it to UART */ + UART1_DATA = UART1_TxBuf[tmptail]; /* start transmission */ + }else{ + /* tx buffer empty, disable UDRE interrupt */ + UART1_CONTROL &= ~_BV(UART1_UDRIE); + } +} + + +/************************************************************************* +Function: uart1_init() +Purpose: initialize UART1 and set baudrate +Input: baudrate using macro UART_BAUD_SELECT() +Returns: none +**************************************************************************/ +void uart1_init(unsigned int baudrate) +{ + UART1_TxHead = 0; + UART1_TxTail = 0; + UART1_RxHead = 0; + UART1_RxTail = 0; + + + /* Set baud rate */ + if ( baudrate & 0x8000 ) + { + UART1_STATUS = (1<>8); + UBRR1L = (unsigned char) baudrate; + + /* Enable USART receiver and transmitter and receive complete interrupt */ + UART1_CONTROL = _BV(RXCIE1)|(1< #include -namespace hardware -{ +/************************************************************************ +Title: Interrupt UART library with receive/transmit circular buffers +Author: Peter Fleury http://jump.to/fleury +File: $Id: uart.h,v 1.7.2.5 2005/08/14 11:25:41 Peter Exp $ +Software: AVR-GCC 3.3 +Hardware: any AVR with built-in UART, tested on AT90S8515 at 4 Mhz +Usage: see Doxygen manual +************************************************************************/ + +/** + * @defgroup pfleury_uart UART Library + * @code #include @endcode + * + * @brief Interrupt UART library using the built-in UART with transmit and receive circular buffers. + * + * This library can be used to transmit and receive data through the built in UART. + * + * An interrupt is generated when the UART has finished transmitting or + * receiving a byte. The interrupt handling routines use circular buffers + * for buffering received and transmitted data. + * + * The UART_RX_BUFFER_SIZE and UART_TX_BUFFER_SIZE constants define + * the size of the circular buffers in bytes. Note that these constants must be a power of 2. + * You may need to adapt this constants to your target and your application by adding + * CDEFS += -DUART_RX_BUFFER_SIZE=nn -DUART_RX_BUFFER_SIZE=nn to your Makefile. + * + * @note Based on Atmel Application Note AVR306 + * @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury + */ + +/**@{*/ + + +#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304 +#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !" +#endif + + +/* +** constants and macros +*/ + +/** @brief UART Baudrate Expression + * @param xtalcpu system clock in Mhz, e.g. 4000000L for 4Mhz + * @param baudrate baudrate in bps, e.g. 1200, 2400, 9600 + */ +#define UART_BAUD_SELECT(baudRate,xtalCpu) ((xtalCpu)/((baudRate)*16l)-1) + +/** @brief UART Baudrate Expression for ATmega double speed mode + * @param xtalcpu system clock in Mhz, e.g. 4000000L for 4Mhz + * @param baudrate baudrate in bps, e.g. 1200, 2400, 9600 + */ +#define UART_BAUD_SELECT_DOUBLE_SPEED(baudRate,xtalCpu) (((xtalCpu)/((baudRate)*8l)-1)|0x8000) + + +/** Size of the circular receive buffer, must be power of 2 */ +#ifndef UART_RX_BUFFER_SIZE +#define UART_RX_BUFFER_SIZE 32 +#endif +/** Size of the circular transmit buffer, must be power of 2 */ +#ifndef UART_TX_BUFFER_SIZE +#define UART_TX_BUFFER_SIZE 32 +#endif + +/* test if the size of the circular buffers fits into SRAM */ +#if ( (UART_RX_BUFFER_SIZE+UART_TX_BUFFER_SIZE) >= (RAMEND-0x60 ) ) +#error "size of UART_RX_BUFFER_SIZE + UART_TX_BUFFER_SIZE larger than size of SRAM" +#endif + +/* +** high byte error return code of uart_getc() +*/ +#define UART_FRAME_ERROR 0x0800 /* Framing Error by UART */ +#define UART_OVERRUN_ERROR 0x0400 /* Overrun condition by UART */ +#define UART_BUFFER_OVERFLOW 0x0200 /* receive ringbuffer overflow */ +#define UART_NO_DATA 0x0100 /* no receive data available */ + + +/* +** function prototypes +*/ + +/** + @brief Initialize UART and set baudrate + @param baudrate Specify baudrate using macro UART_BAUD_SELECT() + @return none +*/ +extern void uart_init(unsigned int baudrate); + + +/** + * @brief Get received byte from ringbuffer + * + * Returns in the lower byte the received character and in the + * higher byte the last receive error. + * UART_NO_DATA is returned when no data is available. + * + * @param void + * @return lower byte: received byte from ringbuffer + * @return higher byte: last receive status + * - \b 0 successfully received data from UART + * - \b UART_NO_DATA + *
no receive data available + * - \b UART_BUFFER_OVERFLOW + *
Receive ringbuffer overflow. + * We are not reading the receive buffer fast enough, + * one or more received character have been dropped + * - \b UART_OVERRUN_ERROR + *
Overrun condition by UART. + * A character already present in the UART UDR register was + * not read by the interrupt handler before the next character arrived, + * one or more received characters have been dropped. + * - \b UART_FRAME_ERROR + *
Framing Error by UART + */ +extern unsigned int uart_getc(void); + + +/** + * @brief Put byte to ringbuffer for transmitting via UART + * @param data byte to be transmitted + * @return none + */ +extern void uart_putc(unsigned char data); + + +/** + * @brief Put string to ringbuffer for transmitting via UART + * + * The string is buffered by the uart library in a circular buffer + * and one character at a time is transmitted to the UART using interrupts. + * Blocks if it can not write the whole string into the circular buffer. + * + * @param s string to be transmitted + * @return none + */ +extern void uart_puts(const char *s ); + + +/** + * @brief Put string from program memory to ringbuffer for transmitting via UART. + * + * The string is buffered by the uart library in a circular buffer + * and one character at a time is transmitted to the UART using interrupts. + * Blocks if it can not write the whole string into the circular buffer. + * + * @param s program memory string to be transmitted + * @return none + * @see uart_puts_P + */ +extern void uart_puts_p(const char *s ); + +/** + * @brief Macro to automatically put a string constant into program memory + */ +#define uart_puts_P(__s) uart_puts_p(PSTR(__s)) + + + +/** @brief Initialize USART1 (only available on selected ATmegas) @see uart_init */ +extern void uart1_init(unsigned int baudrate); +/** @brief Get received byte of USART1 from ringbuffer. (only available on selected ATmega) @see uart_getc */ +extern unsigned int uart1_getc(void); +/** @brief Put byte to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_putc */ +extern void uart1_putc(unsigned char data); +/** @brief Put string to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts */ +extern void uart1_puts(const char *s ); +/** @brief Put string from program memory to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts_p */ +extern void uart1_puts_p(const char *s ); +/** @brief Macro to automatically put a string constant into program memory */ +#define uart1_puts_P(__s) uart1_puts_p(PSTR(__s)) -}; +/**@}*/ #endif diff --git a/source/Concept/Framework/default/Makefile b/source/Concept/Framework/default/Makefile index ca32983..20eef5c 100644 --- a/source/Concept/Framework/default/Makefile +++ b/source/Concept/Framework/default/Makefile @@ -6,14 +6,14 @@ PROJECT = RoboCode MCU = atmega128 TARGET = RoboCode.elf -CC = avr-gcc.exe +CC = avr-g++.exe ## Options common to compile, link and assembly rules COMMON = -mmcu=$(MCU) ## Compile options common for all C compilation units. CFLAGS = $(COMMON) -CFLAGS += -Wall -gdwarf-2 -O0 +CFLAGS += -Wall -gdwarf-2 -DF_CPU=16000000ULUL -O3 -fsigned-char CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d ## Assembly specific flags diff --git a/source/Concept/Framework/defines.h b/source/Concept/Framework/defines.h index 1b14aa7..1e25ba5 100644 --- a/source/Concept/Framework/defines.h +++ b/source/Concept/Framework/defines.h @@ -57,6 +57,7 @@ //Constants #define SPEED_PER_PWM 1 +#define DISTANCE_PER_VALUE 1 //IO Module Names enum IOModuleNames @@ -70,13 +71,20 @@ enum IOModuleNames IO_ENGINE_DRIVE_LEFT = IO_ENGINE_START, IO_ENGINE_DRIVE_RIGHT, IO_ENGINE_DRIVE_BACK, - IO_ENGINE_DRIBBLER, IO_ENGINE_END, + //Dribbler + + IO_DRIBBLER_START = IO_ENGINE_END, + + IO_DRIBBLER_MAIN = IO_DRIBBLER_START, + + IO_DRIBBLER_END, + //Kicker - IO_KICKER_START = IO_ENGINE_END, + IO_KICKER_START = IO_DRIBBLER_END, IO_KICKER_MAIN = IO_KICKER_START, @@ -93,6 +101,10 @@ enum IOModuleNames IO_SENSOR_IR_260_DEG, IO_SENSOR_IR_300_DEG, IO_SENSOR_IR_330_DEG, + IO_SENSOR_DISTANCE_0_DEG, + IO_SENSOR_DISTANCE_90_DEG, + IO_SENSOR_DISTANCE_180_DEG, + IO_SENSOR_DISTANCE_270_DEG, IO_SENSOR_END, @@ -104,8 +116,16 @@ enum IOModuleNames IO_LED_END, + //Displays + + IO_DISPLAY_START = IO_LED_END, + + IO_DISPLAY_MAIN = IO_DISPLAY_START, + + IO_DISPLAY_END, + //General - IO_END = IO_LED_END, + IO_END = IO_DISPLAY_END, }; #endif diff --git a/source/Concept/Framework/display.cpp b/source/Concept/Framework/display.cpp new file mode 100644 index 0000000..82fbb41 --- /dev/null +++ b/source/Concept/Framework/display.cpp @@ -0,0 +1 @@ +#include "display.h" diff --git a/source/Concept/Framework/display.h b/source/Concept/Framework/display.h new file mode 100644 index 0000000..8e6e0a4 --- /dev/null +++ b/source/Concept/Framework/display.h @@ -0,0 +1,60 @@ +#ifndef _DISPLAY_H +#define _DISPLAY_H + +#include "stdafx.h" + +class Display : public IO_Module +{ +public: + Display() + { + this->parent = NULL; + this->moduleId = 0; + } + + Display(uint32 displayId) + { + this->parent = NULL; + this->moduleId = displayId; + + switch(displayId) + { + case IO_DISPLAY_MAIN: + msleep(500); + uart1_init(103);//9600 BAUD at 16MHz Atmel + sleep(2); + break; + default: + break; + } + } + +protected: + //Hardware + volatile uint8* hardwarePort; + volatile uint16* pwmSpeed; + uint8 pinForward; + uint8 pinReverse; + +public: + void Print(char* newString) + { + switch(moduleId) + { + case IO_DISPLAY_MAIN: + uart1_puts(newString); + break; + default: + break; + } + } + + void Print(int32 newInteger) + { + char buffer[12]; + ltoa(newInteger, buffer, 10); + Print(buffer); + } +}; + +#endif diff --git a/source/Concept/Framework/distance_sensor.cpp b/source/Concept/Framework/distance_sensor.cpp index a11460c..c6c0582 100644 --- a/source/Concept/Framework/distance_sensor.cpp +++ b/source/Concept/Framework/distance_sensor.cpp @@ -1 +1,26 @@ -#include "distance_sensor.h" \ No newline at end of file +#include "distance_sensor.h" + +//----------------------------------------------------------------------------- +float Distance_Sensor::GetDistance() +{ + uint32 result = 0; + + //Generate pulse + *hardwareDDR |= pin;//Set pin output + *hardwarePort |= pin;//Activate port + usleep(10);//Wait for 10µs + *hardwarePort &= ~pin;//Deactivate port + *hardwareDDR &= ~pin;//Set pin input + + //Wait for response + while(!(*hardwarePin & pin)); + + //Calculate duration of response + while(*hardwarePin & pin) + { + result++; + asm volatile("nop"); + } + + return (float(result) * DISTANCE_PER_VALUE); +} diff --git a/source/Concept/Framework/distance_sensor.h b/source/Concept/Framework/distance_sensor.h index 7690ab4..832e556 100644 --- a/source/Concept/Framework/distance_sensor.h +++ b/source/Concept/Framework/distance_sensor.h @@ -1,7 +1,7 @@ #ifndef _DISTANCE_SENSOR_H #define _DISTANCE_SENSOR_H -//#include "stdafx.h" +#include "stdafx.h" #include "sensor.h" class Distance_Sensor : public Sensor @@ -11,17 +11,61 @@ public: { this->parent = NULL; this->moduleId = 0; + this->hardwarePort = NULL; + this->hardwareDDR = NULL; + this->hardwarePin = NULL; + this->pin = 0; } Distance_Sensor(uint32 sensorId) { this->parent = NULL; this->moduleId = sensorId; + + switch(sensorId) + { + case IO_SENSOR_DISTANCE_0_DEG: + this->hardwarePort = &PORTC; + this->hardwareDDR = &DDRC; + this->hardwarePin = &PINC; + this->pin = (1 << 0); + break; + case IO_SENSOR_DISTANCE_90_DEG: + this->hardwarePort = &PORTC; + this->hardwareDDR = &DDRC; + this->hardwarePin = &PINC; + this->pin = (1 << 1); + break; + case IO_SENSOR_DISTANCE_180_DEG: + this->hardwarePort = &PORTC; + this->hardwareDDR = &DDRC; + this->hardwarePin = &PINC; + this->pin = (1 << 2); + break; + case IO_SENSOR_DISTANCE_270_DEG: + this->hardwarePort = &PORTC; + this->hardwareDDR = &DDRC; + this->hardwarePin = &PINC; + this->pin = (1 << 3); + break; + default: + this->hardwarePort = NULL; + this->hardwareDDR = NULL; + this->hardwarePin = NULL; + this->pin = 0; + break; + } } protected: + //Hardware + volatile uint8* hardwarePort; + volatile uint8* hardwareDDR; + volatile uint8* hardwarePin; + uint8 pin; public: + float GetDistance(); }; #endif diff --git a/source/Concept/Framework/dribbler.cpp b/source/Concept/Framework/dribbler.cpp new file mode 100644 index 0000000..20557e4 --- /dev/null +++ b/source/Concept/Framework/dribbler.cpp @@ -0,0 +1 @@ +#include "dribbler.h" diff --git a/source/Concept/Framework/dribbler.h b/source/Concept/Framework/dribbler.h new file mode 100644 index 0000000..64c045a --- /dev/null +++ b/source/Concept/Framework/dribbler.h @@ -0,0 +1,118 @@ +#ifndef _DRIBBLER_H +#define _DRIBBLER_H + +#include "stdafx.h" + +class Dribbler : public IO_Module +{ +public: + Dribbler() + { + this->enabled = false; + this->curSpeed = 0; + this->parent = NULL; + this->moduleId = 0; + this->hardwarePort = NULL; + this->portPower = NULL; + this->pinForward = 0; + this->pinReverse = 0; + this->pinPower = 0; + } + + Dribbler(uint32 dribblerId) + { + this->enabled = false; + this->curSpeed = 1.0f; + this->parent = NULL; + this->moduleId = dribblerId; + + switch(dribblerId) + { + case IO_DRIBBLER_MAIN: + this->hardwarePort = &PORTD; + this->portPower = &PORTA; + this->pinForward = (1 << 6); + this->pinReverse = (1 << 7); + this->pinPower = (1 << 5); + break; + default: + this->hardwarePort = NULL; + this->portPower = NULL; + this->pinForward = 0; + this->pinReverse = 0; + this->pinPower = 0; + break; + } + + UpdateDirection(); + } + +protected: + bool enabled; + float curSpeed; + + //Hardware + volatile uint8* hardwarePort; + volatile uint8* portPower; + uint8 pinForward; + uint8 pinReverse; + uint8 pinPower; + + void UpdateDirection() + { + if(enabled) + { + if(curSpeed > 0) + { + *hardwarePort |= pinForward; + *hardwarePort &= ~pinReverse; + } + else if(curSpeed < 0) + { + *hardwarePort |= pinReverse; + *hardwarePort &= ~pinForward; + } + else + { + *hardwarePort |= pinForward; + *hardwarePort |= pinReverse; + } + + *portPower |= pinPower; + } + else + { + *hardwarePort &= ~pinForward; + *hardwarePort &= ~pinReverse; + + *portPower &= ~pinPower; + } + } + +public: + float GetSpeed() + { + return curSpeed; + } + + void SetSpeed(float newSpeed) + { + curSpeed = newSpeed; + + UpdateDirection(); + } + + bool GetEnabled() + { + return enabled; + } + + void SetEnabled(bool newStatus) + { + enabled = newStatus; + + UpdateDirection(); + } +}; + +#endif diff --git a/source/Concept/Framework/engine.cpp b/source/Concept/Framework/engine.cpp index 11856cc..5c14c17 100644 --- a/source/Concept/Framework/engine.cpp +++ b/source/Concept/Framework/engine.cpp @@ -1 +1 @@ -#include "engine.h" \ No newline at end of file +#include "engine.h" diff --git a/source/Concept/Framework/engine.h b/source/Concept/Framework/engine.h index 2d8c409..0e7cf8c 100644 --- a/source/Concept/Framework/engine.h +++ b/source/Concept/Framework/engine.h @@ -14,10 +14,8 @@ public: this->moduleId = 0; this->hardwarePort = NULL; this->pwmSpeed = NULL; - this->pwmPort = NULL; this->pinForward = 0; this->pinReverse = 0; - this->pinPwm = 0; } Engine(uint32 engineId) @@ -26,9 +24,6 @@ public: this->curSpeed = 0; this->parent = NULL; this->moduleId = engineId; - this->pwmSpeed = NULL; - this->pwmPort = NULL; - this->pinPwm = 0; switch(engineId) { @@ -38,25 +33,18 @@ public: this->pinForward = (1 << 0); this->pinReverse = (1 << 1); break; - case IO_ENGINE_DRIVE_RIGHT: + case IO_ENGINE_DRIVE_BACK: this->hardwarePort = &PORTB; this->pwmSpeed = &OCR1B; this->pinForward = (1 << 2); this->pinReverse = (1 << 3); break; - case IO_ENGINE_DRIVE_BACK: + case IO_ENGINE_DRIVE_RIGHT: this->hardwarePort = &PORTD; this->pwmSpeed = &OCR3A; this->pinForward = (1 << 5); this->pinReverse = (1 << 4); break; - case IO_ENGINE_DRIBBLER: - this->hardwarePort = &PORTD; - this->pwmPort = &PORTA; - this->pinForward = (1 << 6); - this->pinReverse = (1 << 7); - this->pinPwm = (1 << 5); - break; default: this->hardwarePort = NULL; this->pwmSpeed = NULL; @@ -77,9 +65,6 @@ protected: volatile uint16* pwmSpeed; uint8 pinForward; uint8 pinReverse; - //Dribbler only - volatile uint8* pwmPort; - uint8 pinPwm; void UpdateDirection() { @@ -118,18 +103,7 @@ public: { curSpeed = newSpeed; - if(pwmSpeed) - { - *pwmSpeed = abs(newSpeed / SPEED_PER_PWM); - } - else if(pwmPort && (uint16)(abs(newSpeed / SPEED_PER_PWM))) - { - *pwmPort |= pinPwm; - } - else if(pwmPort) - { - *pwmPort &= ~pinPwm; - } + *pwmSpeed = abs(newSpeed / SPEED_PER_PWM); UpdateDirection(); } diff --git a/source/Concept/Framework/io_module.cpp b/source/Concept/Framework/io_module.cpp index 93f78ae..3549af5 100644 --- a/source/Concept/Framework/io_module.cpp +++ b/source/Concept/Framework/io_module.cpp @@ -1 +1 @@ -#include "io_module.h" \ No newline at end of file +#include "io_module.h" diff --git a/source/Concept/Framework/ir_sensor.cpp b/source/Concept/Framework/ir_sensor.cpp index 065143e..c34feed 100644 --- a/source/Concept/Framework/ir_sensor.cpp +++ b/source/Concept/Framework/ir_sensor.cpp @@ -6,4 +6,4 @@ uint16 IR_Sensor::GetIRIntensity() if(!parent) return 0; return parent->GetADCValue(channel); -} \ No newline at end of file +} diff --git a/source/Concept/Framework/kicker.cpp b/source/Concept/Framework/kicker.cpp index 94bd711..6670efb 100644 --- a/source/Concept/Framework/kicker.cpp +++ b/source/Concept/Framework/kicker.cpp @@ -1 +1 @@ -#include "kicker.h" \ No newline at end of file +#include "kicker.h" diff --git a/source/Concept/Framework/led.cpp b/source/Concept/Framework/led.cpp index a81aaf4..687b2db 100644 --- a/source/Concept/Framework/led.cpp +++ b/source/Concept/Framework/led.cpp @@ -1 +1 @@ -#include "led.h" \ No newline at end of file +#include "led.h" diff --git a/source/Concept/Framework/main.cpp b/source/Concept/Framework/main.cpp index d6e1d92..a3cd05c 100644 --- a/source/Concept/Framework/main.cpp +++ b/source/Concept/Framework/main.cpp @@ -13,6 +13,14 @@ int main() newEngine = NULL; } + //Init Dribbler + for(uint8 i = IO_DRIBBLER_START; i < IO_DRIBBLER_END; i++) + { + Dribbler* newDribbler = new Dribbler(i); + localRobot->AddModule(newDribbler); + newDribbler = NULL; + } + //Init Kicker for(uint8 i = IO_KICKER_START; i < IO_KICKER_END; i++) { @@ -41,6 +49,16 @@ int main() newSensor = NULL; break; } + case IO_SENSOR_DISTANCE_0_DEG: + case IO_SENSOR_DISTANCE_90_DEG: + case IO_SENSOR_DISTANCE_180_DEG: + case IO_SENSOR_DISTANCE_270_DEG: + { + Distance_Sensor* newSensor = new Distance_Sensor(i); + localRobot->AddModule(newSensor); + newSensor = NULL; + break; + } //Other cases default: { @@ -60,6 +78,14 @@ int main() newLed = NULL; } + //Init Displays + for(uint8 i = IO_DISPLAY_START; i < IO_DISPLAY_END; i++) + { + Display* newDisplay = new Display(i); + localRobot->AddModule(newDisplay); + newDisplay = NULL; + } + //Run while(true) { diff --git a/source/Concept/Framework/robot.cpp b/source/Concept/Framework/robot.cpp index f14f2f7..a051dd4 100644 --- a/source/Concept/Framework/robot.cpp +++ b/source/Concept/Framework/robot.cpp @@ -18,7 +18,7 @@ Robot::Robot() PORTC = 0; //All output except PD0+1(I2C) + 2+3(RS232) - DDRD = (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7); + DDRD = (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7); PORTD = (1 << 0) | (1 << 1);//Activate pullup at PD0+1 //PE5 for input @@ -34,12 +34,12 @@ Robot::Robot() PORTG = (1 << 0) | (1 << 1); // activate channel A+B on PWM1 at 8Bit - TCCR1A = (1 << COM1A1) | (1 << COM1B1) | (1 << WGM10); - TCCR1B = (1 < enable counter + TCCR1A = (1<< COM1A1) | (1<< COM1B1) | (1<< WGM10); + TCCR1B = (1< enable counter // activate Kanal A+B on PWM3 at 8Bit - TCCR3A = (1 << COM3A1) | (1 << COM3B1) | (1 << WGM10); - TCCR3B = (1 < enable counter + TCCR3A = (1<< COM3A1) | (1<< COM3B1) | (1<< WGM10); + TCCR3B = (1< enable counter //Activate interrupt sei(); diff --git a/source/Concept/Framework/stdafx.h b/source/Concept/Framework/stdafx.h index 218b774..f48adfe 100644 --- a/source/Concept/Framework/stdafx.h +++ b/source/Concept/Framework/stdafx.h @@ -8,8 +8,10 @@ #include "atmega128io.h" #include "tools.h" #include "io_module.h" +#include "display.h" #include "sensor.h" #include "engine.h" +#include "dribbler.h" #include "kicker.h" #include "led.h" #include "distance_sensor.h" diff --git a/source/Concept/Framework/tools.h b/source/Concept/Framework/tools.h index 2af60df..6519a1b 100644 --- a/source/Concept/Framework/tools.h +++ b/source/Concept/Framework/tools.h @@ -6,6 +6,34 @@ #ifndef new void* operator new(size_t sz); void operator delete(void* p); -#endif +#endif + +inline void sleep(int sec) +{ + for (int s=0; s