/tags/V2.06e/FlightCtrl.aps |
---|
0,0 → 1,0 |
<AVRStudio><MANAGEMENT><ProjectName>FlightCtrl</ProjectName><Created>15-May-2007 11:20:41</Created><LastEdit>11-Oct-2007 22:58:54</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>15-May-2007 11:20:41</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\Flight-Ctrl.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>F:\SVN\MikroKopter\FlightCtrl\branches\V0.64_ZeroWarnings\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>uart.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><HEADERFILE>uart.h</HEADERFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>old_macros.h</HEADERFILE><HEADERFILE>printf_P.h</HEADERFILE><HEADERFILE>rc.h</HEADERFILE><HEADERFILE>Settings.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Flight-Ctrl.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>GPS.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>analog.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>eeprom.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>fc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>main.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>menu.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>printf_P.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>rc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>timer0.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>twimaster.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>uart.c</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS/><LIBDIRS/><LIBS><LIB>libc.a</LIB><LIB>libm.a</LIB></LIBS><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Wstrict-prototypes -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -DVERSION_HAUPTVERSION=0 -DVERSION_NEBENVERSION=64 -DVERSION_KOMPATIBEL=5</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>uart.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>menu.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>timer0.c</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>fc.c</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>fc.h</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>menu.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>TWIMASTER.C</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>twimaster.h</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>uart.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>_Settings.h</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>analog.h</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>gps.h</FileName><Status>1</Status></File00012><File00013><FileId>00013</FileId><FileName>main.h</FileName><Status>1</Status></File00013><File00014><FileId>00014</FileId><FileName>old_macros.h</FileName><Status>1</Status></File00014><File00015><FileId>00015</FileId><FileName>printf_P.h</FileName><Status>1</Status></File00015><File00016><FileId>00016</FileId><FileName>rc.h</FileName><Status>1</Status></File00016><File00017><FileId>00017</FileId><FileName>Settings.h</FileName><Status>1</Status></File00017><File00018><FileId>00018</FileId><FileName>timer0.h</FileName><Status>1</Status></File00018></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio> |
/tags/V2.06e/GPS.c |
---|
0,0 → 1,16 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) Holger Buss, Ingo Busker |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
signed int GPS_Nick = 0; |
signed int GPS_Roll = 0; |
unsigned char GPS_Aid_StickMultiplikator = 0; // 64 = 100% |
/tags/V2.06e/Hex-Files/Flight-Ctrl_MEGA1284p_V2_06e.hex |
---|
0,0 → 1,5577 |
:100000000C941F0C0C94790C0C94790C0C94790CB6 |
:100010000C94790C0C94790C0C94790C0C94790C4C |
:100020000C94790C0C949D200C94790C0C94790C04 |
:100030000C94CC3B0C94790C0C94790C0C94790CAA |
:100040000C94790C0C94790C0C94C01C0C94790CC5 |
:100050000C9415130C94790C0C94DF120C94790CFD |
:100060000C94AB220C94790C0C94E3360C94790C20 |
:100070000C94CFA90C94790C0C940D9F0C94790CD2 |
:100080000C94790C0C94790C0C94790CD422D92210 |
:10009000DE22E722FE22152325233523A323FB2579 |
:1000A0001523BF24D024E524042521256C25B8255B |
:1000B0006B285129F4296D2AA52A552B0F2C782C51 |
:1000C000F32C252D912DBF2DEC2D4C2EA52E0A2F76 |
:1000D000552F9F2F0330FF30FA7416769B769E754E |
:1000E000EF7620773975CD75498AEA8A6F8BCA8B8E |
:1000F0001B8C858C449A068D3A8D3A8D3A8D3A8DBB |
:100100003A8D3A8D3A8D3A8D3A8D6E8DEA8D7B8E91 |
:10011000A18EE58E3F8FD68FEC90509150915091EB |
:10012000509150915091509150915091839198914C |
:10013000B89114925092AB92D8926E93449AC39312 |
:10014000C393C393C393C393C393C393C393CCA7E2 |
:10015000CFA7CFA7CFA7D8A7DBA7DEA7F0A7EDA78C |
:100160000A0D3D3D3D3D3D3D3D3D3D3D3D3D3D3D22 |
:100170003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3DAF |
:100180003D3D3D3D3D000A0D426174743A0020251D |
:10019000642043656C6C732000204C6F772077617E |
:1001A000726E696E673A2025642E25645600202001 |
:1001B0004175746F2D43483A2025642E25645600FE |
:1001C00020204175746F6C616E64696E673A2025FA |
:1001D000642E256456000A0D4F6C64204643204867 |
:1001E00061726477617265206E6F742073757070D0 |
:1001F0006F7274656420627920746869732046693F |
:10020000726D7761726521000A0D466F756E64200C |
:10021000424C2D4374726C3A20002564000A0D0A8A |
:100220000D2121204D495353494E4720424C2D4327 |
:1002300054524C3A202564202121000A0D424C2DB5 |
:100240004669726D776172652025642E25303264AF |
:10025000003C2D2D207761726E696E67206F6C6493 |
:100260002056657273696F6E21000A0D43616C69D7 |
:1002700062726174696E67207072657373757265FE |
:100280002073656E736F722E2E004F4B0A0D000A9D |
:100290000D466C696768742D74696D65202575203D |
:1002A0006D696E20546F74616C3A2575206D696EAE |
:1002B00000416E676C654E69636B20202020202012 |
:1002C00020416E676C65526F6C6C202020202020CE |
:1002D000204163634E69636B202020202020202072 |
:1002E00020416363526F6C6C20202020202020204E |
:1002F000205961774779726F20202020202020200C |
:1003000020416C746974756465205B302E316D5DBD |
:10031000204163635A2020202020202020202020FC |
:100320002047617320202020202020202020202012 |
:1003300020436F6D706173732056616C756520206A |
:1003400020566F6C74616765205B302E31565D20DE |
:10035000205265636569766572204C6576656C2010 |
:10036000204779726F20436F6D7061737320202076 |
:10037000204D6F746F7220312020202020202020FB |
:10038000204D6F746F7220322020202020202020EA |
:10039000204D6F746F7220332020202020202020D9 |
:1003A000204D6F746F7220342020202020202020C8 |
:1003B0002031362020202020202020202020202016 |
:1003C0002031372020202020202020202020202005 |
:1003D00020313820202020202020202020202020F4 |
:1003E00020313920202020202020202020202020E3 |
:1003F00020536572766F202020202020202020208E |
:1004000020486F76657267617320202020202020AD |
:100410002043757272656E74205B302E31415D2011 |
:10042000204361706163697479205B6D41685D2070 |
:100430002048656967687420536574706F696E74CD |
:100440002032352020202020202020202020202085 |
:100450002032362020202020202020202020202074 |
:100460002032372020202020202020202020202063 |
:10047000204932432D4572726F72202020202020A7 |
:1004800020424C204C696D697420202020202020BF |
:10049000204750535F4E69636B202020202020208E |
:1004A000204750535F526F6C6C202020202020206A |
:1004B0002021212120494E434F4D50415449424C67 |
:1004C0004520212121002E005B25695D005B256907 |
:1004D0005D002B204D696B726F4B6F7074657220DD |
:1004E0002B0048573A5625642E25642053573A2549 |
:1004F000642E253032642563200053657474696E60 |
:10050000673A2564202573004D697865722045722D |
:10051000726F7221004552522532643A004861726E |
:100520006477617265204572726F7220313A25647A |
:10053000202121004D697373696E6720424C2D4361 |
:1005400074726C3A256420212100493243204552BF |
:10055000524F5221212100424C2D53656C66746527 |
:100560007374204572723A25326400486569676881 |
:10057000743A202025356900536574706F696E7474 |
:100580003A2535690050726573737572653A253581 |
:1005900069004F66667365743A2020253569002826 |
:1005A0004129002569006163742E206265617269CA |
:1005B0006E67004E69636B3A20202020202025358D |
:1005C0006900526F6C6C3A2020202020202535696C |
:1005D00000436F6D706173733A20202025356900E8 |
:1005E0004B25693A25346920204B25693A25346921 |
:1005F00020004E693A2534692020526F3A2534692B |
:10060000200047733A253469202047693A25346928 |
:10061000200050313A253469202050323A2534697F |
:10062000200050333A253469202050343A2534696B |
:1006300020004779726F202D2053656E736F720012 |
:100640004E69636B2025346920282533692E25786F |
:100650002900526F6C6C2025346920282533692EBF |
:1006600025782900596177202025346920282533F1 |
:10067000692900414343202D2053656E736F72003A |
:100680004E69636B2025346920282533692900527F |
:100690006F6C6C20253469202825336929005A2085 |
:1006A00020202025346920282533692900566F6CC5 |
:1006B000746167653A2020202533692E25316956FB |
:1006C0000043757272656E743A2020202533692EBE |
:1006D0002531694100506F7765723A202020202033 |
:1006E00025346957004469736368617267653A200D |
:1006F0002535696D416800526563656976657200EC |
:1007000052432D5175616C6974793A202534690022 |
:1007100052432D4368616E6E656C733A25346900EF |
:10072000556E646572766F6C746167657320200026 |
:100730005761726E3A202532642E25645600486F48 |
:100740006D653A202532642E256456004C616E6436 |
:100750003A202532642E25645600506F746925694D |
:100760003A202025336900506F746925693A2020AA |
:1007700025336900466C696768742D54696D65207E |
:100780002000546F74616C3A2535756D696E0041B7 |
:1007900063743A20202535756D696E002872657383 |
:1007A00065742900436F6D70617373004D61676EEE |
:1007B00065743A202020253569004779726F3A2008 |
:1007C0002020202025356900547275653A202020AC |
:1007D000202025356900536572766F20200053650F |
:1007E00074706F696E74202025336900506F7369CF |
:1007F00074696F6E3A202533690052616E67653AFD |
:100800002533692D25336900424C2D4374726C20C9 |
:100810004572726F72732000253364202533642083 |
:10082000253364202533642000424C2054656D70CC |
:100830006572617475726500253364202533642008 |
:10084000253364202533642000424C2043757272A6 |
:10085000656E740028696E20302E314129002533E1 |
:10086000642025336420253364202533642000422E |
:100870004C2D4374726C20666F756E6420002025C9 |
:10088000632020202563202020256320202025634D |
:1008900020002025632020202563202020256320A0 |
:1008A0002020256320002025632020202D202020CB |
:1008B0002D2020202D200031300031310031320038 |
:1008C000424C2056657273696F6E73002531642E39 |
:1008D00025303264202531642E25303264202531C4 |
:1008E000642E25303264202531642E253032640098 |
:1008F0000A0D2D2D3E204861726477617265205685 |
:10090000657273696F6E2042797465204368616E09 |
:10091000676564203C2D2D000A0D47656E65726188 |
:1009200074696E672064656661756C7420506172CD |
:10093000616D6574657220536574202564000A0D2D |
:100940005573696E6720506172616D6574657220C0 |
:10095000536574202564000A0D47656E65726174E5 |
:10096000696E672064656661756C74204D69786591 |
:1009700072205461626C65000A0D4D697865722DB4 |
:10098000436F6E6669673A202725732720282575EF |
:10099000204D6F746F727329000A0D414343206E1E |
:1009A0006F742063616C69627261746564210D0A01 |
:1009B0000000008F001E01AD013B02CA025803E691 |
:1009C00003740402058F051B06A7063307BE0748FC |
:1009D00008D2085B09E3096B0AF20A780BFD0B8168 |
:1009E0000C040D860D070E870E060F840F00107B7A |
:1009F00010F5106E11E5115B12CF124213B31323E1 |
:100A0000149214FE146A15D3153B16A11605176728 |
:100A100017C81727188318DE1837198E19E31936E7 |
:100A20001A871AD61A231B6E1BB61BFD1B411C838B |
:100A30001CC31C001D3C1D751DAB1DE01D121E427C |
:100A40001E6F1E9A1EC31EE91E0D1F2E1F4D1F690D |
:100A50001F841F9B1FB01FC31FD31FE11FEC1FF577 |
:100A60001FFB1FFF1F002008010000757C00020112 |
:100A700001D17D01030202657E02040303D58203D6 |
:100A80000504090D7F0406050A387F0507060B6378 |
:100A90007F0608070C787F07000806C27E04090954 |
:100AA000091481050A0A0AEC81060B0B0B4A800720 |
:100AB0000C0C0C8D7F2532692E25316956002533AB |
:100AC00064256320253033646D256300537461749D |
:100AD0007573004552524F523A202532642000531C |
:100AE000657425643A257320200025346920253259 |
:100AF000693A25303269002534696D25630052005A |
:100B00002533692025336920253369202533690081 |
:100B10002533692025336920253369202533690071 |
:100B200054656D7065726174757265732020202044 |
:100B3000002563432020202020002532692E253106 |
:100B40006956202533692E253169410025346957BE |
:100B5000202536696D4168004D61676E65743A25E0 |
:100B60003369252520253369256300496E636C6947 |
:100B70002E3A2533692563202825692920004C6FEA |
:100B8000616420576179706F696E747300284669DB |
:100B900078656429202020202020004C6F6164208B |
:100BA000576179706F696E7473002852656C617457 |
:100BB00069766529202020004C6F61642073696E7E |
:100BC000676C2E506F696E7400536176652073698F |
:100BD0006E676C2E506F696E74005361766520509D |
:100BE0006F696E743A006E6F2053442D43617264D6 |
:100BF000006E6F204750532D4669780025326400FF |
:100C00004469723A25336420416C743A2533646D2B |
:100C1000002D3E002020004C6F616420506F696EF3 |
:100C200074006E6F2053442D43617264002532645A |
:100C300000446973743A25336420416C743A253357 |
:100C40006420002020202020202020202020202080 |
:100C5000202020002D3E00202000464958205761CA |
:100C600079706F696E7473004649583A2573006E47 |
:100C70006F2053442D436172640023253264205752 |
:100C8000503A002532642F256420002D2D2F2D2D64 |
:100C9000002D3E0020200052656C6174697665204D |
:100CA000575073200052656C3A2573006E6F2053C5 |
:100CB000442D43617264006E6F204750532D466986 |
:100CC000780023253264205750733A002532642F70 |
:100CD000256420002D2D2F2D2D002D3E00202000DD |
:100CE0002532756D2F73205361743A2564200020DE |
:100CF000203344004E6F4678004447505300486FFD |
:100D00006D653A2533646D202533642563202563A2 |
:100D1000004E6F204E6176694374726C21000000B2 |
:100D20000500050004010601080006010200040098 |
:100D3000040007000700070007000700070007007E |
:100D400003010301050017010F01060009010A0153 |
:100D500019010501050119011A010F01010009001E |
:100D6000060006004E6F204572726F722020202010 |
:100D700020202020004E6F7420636F6D70617469B5 |
:100D8000626C652020004D4B334D6167206E6F749F |
:100D900020636F6D7061004E6F20464320636F6D5E |
:100DA0006D756E6963617400436F6D70617373205C |
:100DB000636F6D6D756E69630047505320636F6D8F |
:100DC0006D756E69636174696F00636F6D706173D7 |
:100DD000732076616C756520202000524320536992 |
:100DE000676E616C206C6F73742020004643207323 |
:100DF0007069207278206572726F7220004E6F20C9 |
:100E00004E4320636F6D6D756E6963617400464378 |
:100E1000204E69636B204779726F202020200046A6 |
:100E20004320526F6C6C204779726F202020200085 |
:100E3000464320596177204779726F202020202077 |
:100E4000004643204E69636B20414343202020200D |
:100E50002000464320526F6C6C20414343202020E9 |
:100E60002020004643205A2D4143432020202020AB |
:100E70002020200050726573737572652073656E53 |
:100E8000736F7220004932432046432D3E424C2D61 |
:100E90004374726C2000426C204D697373696E67F5 |
:100EA000202020202020004D697865722045727234 |
:100EB0006F72202020202000436172656672656594 |
:100EC000204572726F722020004750532046697887 |
:100ED000206C6F737420202020004D61676E657454 |
:100EE000204572726F7220202020004D6F746F7247 |
:100EF000207265737461727420202000424C204C73 |
:100F0000696D69746174696F6E20202000475053C9 |
:100F10002052616E676520202020202020004E6F27 |
:100F20002053442D43617264202020202020005350 |
:100F3000442D4C6F6767696E67206572726F72002F |
:100F4000466C79696E672072616E6765212020208A |
:100F5000004D617820416C746974756465212020AE |
:100F600020004E6F204750532066697820202020B3 |
:100F7000202000636F6D70617373206E6F74206347 |
:100F8000616C2E00424C2D53656C66746573742041 |
:100F900020202020006E6F206578742E20636F6DF6 |
:100FA000706173732000636F6D706173732073657C |
:100FB0006E736F7220200053657420203A00202148 |
:100FC000212020204C414E44494E47202020202102 |
:100FD00021202000202121204C69506F20766F6C49 |
:100FE0007461676520212120200020202020204DD1 |
:100FF000696B726F4B6F7074657220202020200027 |
:1010000020202020202020202020202020202020E0 |
:1010100020202020200020202532692E25316956ED |
:1010200020200020202532692E25316956202000FD |
:10103000414C543A2534696D20256300414C543AA3 |
:101040002534696D202000414C543A2D2D2D2D2042 |
:101050000020202532693A253032692020002020E6 |
:101060002532693A253032692020004449523A201D |
:1010700025336425630043002000202025356920A6 |
:1010800020002020253569202000493A2532692E8C |
:101090002531694120003A003A003A002D2D2D2DCE |
:1010A0002D2D2D2D2D2B2D2D2D2D2D2D2D2D2D2D72 |
:1010B0002D002D2D2D2D2D2D2D2D2D2D2D2D2D2D8D |
:1010C0002D2D2D2D2D2D2D003A005341543A253232 |
:1010D000642000444953543A2533646D0044200091 |
:1010E0003344002121004D41473A25337525252001 |
:1010F00000484D3A253364256320256300696E63FB |
:101100006C3A253264256328253269290020202085 |
:10111000202532756D2F733A2020484D3A253364CF |
:101120002563202563004552523A20253264202150 |
:10113000004552523A20002121204C69506F207600 |
:101140006F6C7461676520212100207777772E4DC1 |
:10115000696B726F4B6F707465722E64652020002E |
:10116000202532693A2530326920202532692E2522 |
:10117000316956202534696D416800202532693A6D |
:101180002530326920202532692E253169562025E7 |
:1011900034696D4168004449523A2533642563003F |
:1011A000414C543A2534696D00414C543A25346918 |
:1011B0006D00414C543A2D2D2D2D20002563004803 |
:1011C0004D3A25336425632020444953543A25334E |
:1011D000646D202563005057523A2532692E25311F |
:1011E0006941202825695729200043460020200016 |
:1011F0004750533A2532756D2F73205341543A2589 |
:101200006420002020334420004E4F4649580044BB |
:1012100047505320002020204E6F204E61766943B6 |
:1012200074726C20202020202020002532692E2579 |
:1012300069202532692E2569202532692E256920ED |
:101240002532692E2569410025336920253369201F |
:1012500025336920253369256343002532692E250E |
:1012600069202532692E256941002532692E2569BC |
:10127000202532692E2569202532692E25692025F1 |
:1012800032692E256941002533692025336925639C |
:1012900043202020202020202000253369202533D2 |
:1012A000692025336920253369256343004552525F |
:1012B0003A202532642021004552523A2000212153 |
:1012C000204C69506F20766F6C7461676520212116 |
:1012D00000207777772E4D696B726F4B6F70746556 |
:1012E000722E646520200053657474696E673A2518 |
:1012F0007520257320004D696E3A2532692E2531FF |
:1013000069562025732000414C543A00504F5449EF |
:101310003A2533752000284F4E29202000284F46BB |
:10132000462920004C494D495400564152494F002E |
:1013300044495341424C45440043463A00444953D2 |
:1013400041424C45440020284F4E29200020284F80 |
:1013500046462900205445414348004750533A002F |
:1013600044495341424C45440028465245452900D2 |
:1013700028484F4D45290028414944292000284844 |
:101380004F4C4429002046533A257573656B200065 |
:10139000484F4D4520414C543A0025756D00484F4B |
:1013A0004C4420004E693A25346920526F3A253466 |
:1013B0006920433A2533690047733A253469205937 |
:1013C000613A253469200050313A25346920503281 |
:1013D0003A25346920333A2533690050343A2534AC |
:1013E000692050353A25346920363A25336900435F |
:1013F0004F55504C494E47204F46462120004C4FF8 |
:101400004F50494E472120004848212000434F4D6E |
:1014100050415353204F46462120004C6F616420B9 |
:10142000576179706F696E7473002852656C6174CE |
:1014300069766520506F736974696F6E7329004116 |
:1014400063746976652057503A2532642F256420ED |
:10145000004E6F20575073206163746976652020B9 |
:10146000202020002532692E253169562000257361 |
:101470000020202000253269202020004C6F61646C |
:10148000206C6973743A004C6F6164206C697374EA |
:101490003A202D2D20004E6F2053442D436172645D |
:1014A0002020200028536574202D3E204C6F61645D |
:1014B0002900202020202020202020202020200063 |
:1014C000214E6F204750532D4669782120004C6FE4 |
:1014D000616420576179706F696E74730028466982 |
:1014E00078656420506F736974696F6E7329004169 |
:1014F00063746976652057503A2532642F2564203D |
:10150000004E6F2057507320616374697665202008 |
:101510002020002532692E253169562000257300D0 |
:101520004C6F6164206C6973743A002020200025A0 |
:10153000326420284649582900202D2D004E6F2066 |
:1015400053442D4361726420202000285365742089 |
:101550002D3E204C6F616429002020202020202077 |
:101560002020202020200053746F72652073696E44 |
:10157000676C6520506F736974696F6E0020253247 |
:10158000692E253169562000202532693A253032EE |
:10159000692000414C543A2534696D004449523A5F |
:1015A0002025336425630043616D3A2025336900AB |
:1015B00053746F726520706F696E743A002020203A |
:1015C0000025326420002D2D004E6F2053442D4302 |
:1015D0006172642020200028536574202D3E205322 |
:1015E000746F72652900214E6F204750532D466954 |
:1015F000782120004C6F61642073696E676C6520F0 |
:10160000506F736974696F6E00202532692E253121 |
:1016100069562000202532693A253032692000576A |
:10162000503A2532642F256420446973743A253377 |
:10163000646D2000414C543A2534692F25696D2092 |
:1016400000414C543A2534696D2020202000444943 |
:10165000523A2025336425630043616D3A202533D7 |
:1016600069006C6F616420706F696E743A002020AD |
:101670002000253264002D2D004E6F2053442D4351 |
:101680006172642020200028536574202D3E204C78 |
:101690006F61642900257300004F50515253545319 |
:1016A000565748005859005A554546474841004941 |
:1016B000424A4A0000000000000000000000444CC4 |
:1016C0004D00000000004E0000004B00430A0D7763 |
:1016D00077772E4D696B726F4B6F707465722E64E5 |
:1016E000652028632920486953797374656D7320D8 |
:1016F000476D6248000A0D74686520757365206F38 |
:1017000066207468697320736F66747761726520F0 |
:101710006973206F6E6C79207065726D6974746581 |
:1017200064200A0D6F6E206F726967696E616C20AC |
:101730004D696B726F4B6F707465722D4861726486 |
:1017400077617265005573657200486F5454205676 |
:1017500034004143542044534C004A65746900539B |
:1017600070656B7472756D0050504D000A0D5265B6 |
:101770006365697665723A2000532E427573007571 |
:101780006E6B6E6F776E2E205573696E67205050AA |
:101790004D2E2E2E006E6F7420737570706F7274E4 |
:1017A00065642062792068617264776172652100E6 |
:1017B0000A0D202D204C4942204E4F5420434F4DBE |
:1017C00050415449424C452021212121000A0D0A53 |
:1017D0000D212120426F6F746C6F61646572206E01 |
:1017E0006F7420636F6D70617469626C6520746FD3 |
:1017F000204861726477617265203E20322E32206B |
:1018000021210A0D0A0D000A0D466C6967687443B0 |
:101810006F6E74726F6C0A0D4861726477617265E5 |
:101820003A25642E25640A0D536F667477617265DC |
:101830003A5625642E253032642563200000112499 |
:101840001FBECFEFD0E4DEBFCDBF12E0A0E0B1E01D |
:10185000E0E8FAE501E00BBF02C007900D92A03F5F |
:10186000B107D9F71DE0A0EFB2E001C01D92A73883 |
:10187000B107E1F77AEAE2E0F0E081E28093570015 |
:10188000149120EF37EF41E050E0C6EBD5E06FE078 |
:10189000DA01C9012F5F3F4F4F4F5F4FABBFFC01D4 |
:1018A00087918993615067FFF3CF84EE8ABD809161 |
:1018B000BE0580938A05893138F086E08093140153 |
:1018C00087E0809313017BEAE6EBF5E06EE081911F |
:1018D00078277095615067FFFACF8091C50578171A |
:1018E00021F0173911F40000FECF0E94AE0D0C94C8 |
:1018F0003FAD0C94000080E691E09F938F938FE9B9 |
:1019000099E19F938F93E091C905F091CA050995DC |
:101910000F900F900F900F90089580916E08E82F10 |
:10192000FF27EE0FFF1FE35CF54F808191818D5EF5 |
:101930009F4F14F010920401808191818A5B9F4F28 |
:10194000CCF4809104018823A9F481E08093040100 |
:101950008091FD058F5F8093FD05853038F088EE1E |
:1019600093E09093290380932803089566E970E03B |
:101970000E94F23E0895CF93DF93C82F882311F180 |
:1019800086E891E09F938F938FE999E19F938F93DE |
:10199000E091C905F091CA050995809126019091C1 |
:1019A00027016BE270E00E94B2ACCB018F5F8093A5 |
:1019B00000010F900F900F900F90873018F086E085 |
:1019C0008093000180919108823328F59091000165 |
:1019D000989F802D112480930201CC23F1F068ECB4 |
:1019E00070E0892F0E94F23E8091000199279F9319 |
:1019F0008F938EE891E09F938F938FE999E19F9366 |
:101A00008F93E091C905F091CA0509958DB79EB7EE |
:101A100006968DBF02C0809302019091E108923337 |
:101A200040F480910001899F802D11248093FA0257 |
:101A300002C09093FA023091E208323340F4809170 |
:101A40000001839F802D11248093F90202C03093FE |
:101A5000F9028091FA0290910201981720F49150B6 |
:101A60009093FA029F5F8091F902891720F09150BC |
:101A70009093F9029F5F8091FA022091F9028217F8 |
:101A800028F0332319F021502093FA02CC2309F4D3 |
:101A900062C0892F6AE00E9492AC892F99279F9398 |
:101AA0008F93809102010E9492AC99279F938F930C |
:101AB00089E991E09F938F93CFE9D9E1DF93CF93A9 |
:101AC000E091C905F091CA0509958DB79EB70896B2 |
:101AD0008DBF8091F9028823E9F06AE00E9492AC00 |
:101AE000892F99279F938F938091F9020E9492AC3E |
:101AF00099279F938F938EEA91E09F938F93DF9323 |
:101B0000CF93E091C905F091CA0509958DB79EB7AD |
:101B100008968DBF8091FA028823E9F06AE00E945E |
:101B200092AC892F99279F938F938091FA020E94FC |
:101B300092AC99279F938F9380EC91E09F938F9322 |
:101B4000DF93CF93E091C905F091CA0509958DB750 |
:101B50009EB708968DBFDF91CF910895CFEFD0E467 |
:101B6000DEBFCDBF88249924C1E07C2E14B815B8FF |
:101B70008AE08AB98FE58BB9B7EECB2EB3E0DB2EC6 |
:101B80002EEC3FEFC20ED31ED7FEFACF6624199B70 |
:101B900008C04C9B04C085E18093030108C086E126 |
:101BA00001C089E18093030181E08093170481E8FB |
:101BB00087B93E9A8FEF88B98BE184B981E085B906 |
:101BC000469A84B7877F84BF809160008861809344 |
:101BD00060001092600084EC99E090932903809358 |
:101BE000280310926504109264041092420A109225 |
:101BF000410A1092670410926604109269041092D0 |
:101C0000680420910301243128F084EC94E0A0E0E2 |
:101C1000B0E004C08BE095E0A0E0B0E08093440128 |
:101C200090934501A0934601B0934701289829312C |
:101C300011F4299A01C029980E94111E0E94E21DE8 |
:101C40000E94A7190E94933B0E94CD2181E00E942F |
:101C500090360E94A0730E94D18386E00E9444A81F |
:101C600080910301893111F4299A01C0299878944F |
:101C70000E947735809103018431E8F488E190E097 |
:101C80002CE00FB6F894A895809360000FBE2093C7 |
:101C9000600086ED91E09F938F938FE999E19F9388 |
:101CA0008F93E091C905F091CA0509950F900F90A7 |
:101CB0000F900F90EECF809177038260809377032F |
:101CC00010927A03C0E0D0E00E94944A85E090E050 |
:101CD0000E94A81D6C018091770380FD05C0C6019C |
:101CE0000E94B11D8823B9F3219631E0C43FD30788 |
:101CF00058F388E092E09F938F93AFE9AA2EA9E171 |
:101D0000BA2EBF92AF92E091C905F091CA0509952C |
:101D1000C0E0D0E00F900F900F900F9008E819E00E |
:101D2000F3E0EF2EF9E0FF2EF701808124E030E0B0 |
:101D3000E20EF31E1816ACF40BC00E94944A809178 |
:101D4000770380FD05C0C6010E94B11D8823B9F349 |
:101D5000C6010E94B11D882321F4F80183818823E4 |
:101D600064F7F801838187FF2CC0CE0101966AE0F9 |
:101D700070E00E949EAC9F938F938AE192E09F93C4 |
:101D80008F93BF92AF92E091C905F091CA05099572 |
:101D90008091F2028F5F8093F202F801948584E6CD |
:101DA0009802C00111242585280F8DB79EB706968D |
:101DB0008DBF222331F08091E505281710F4209380 |
:101DC000E5052196015F1F4FCC30D10508F4ACCF5B |
:101DD000C0E0D0E008E819E0E3E0EE2EE9E0FE2EF6 |
:101DE000F801838187FD1DC0F70180811816CCF4AE |
:101DF0002196DF93CF9321978DE192E09F938F936C |
:101E00008FE999E19F938F93E091C905F091CA05FD |
:101E1000099582E0809326032DB73EB72A5F3F4F96 |
:101E20002DBFF801838180788383219624E030E000 |
:101E3000E20EF31E015F1F4FCC30D10588F2809176 |
:101E4000E5058F3F99F164E60E9492AC892F9927AE |
:101E50009F938F938091E5050E9492AC99279F9361 |
:101E60008F938BE392E09F938F93CFE9D9E1DF9338 |
:101E7000CF93E091C905F091CA0509958091E505D8 |
:101E80008456EDB7FEB73896EDBF833078F481E520 |
:101E900092E09F938F93DF93CF93E091C905F091E8 |
:101EA000CA0509950F900F900F900F900E947B0C20 |
:101EB00090916C088091F202981728F48091E305C4 |
:101EC00080618093E305993020F088E080933E01A3 |
:101ED00002C090933E018AE692E09F938F93CFE9F0 |
:101EE000D9E1DF93CF93E091C905F091CA05099537 |
:101EF00088EE93E00E94A81D6C010E940B220F90B7 |
:101F00000F900F900F90C6010E94B11D8823D9F346 |
:101F10008AE892E09F938F93DF93CF93E091C90576 |
:101F2000F091CA05099580E00E94A73F289880EDAE |
:101F300097E0909329038093280385E58093FF051C |
:101F40008EE090E00E9497339927182F00278FE0AA |
:101F500090E00E949733080F111D1093F802009330 |
:101F6000F7028AE090E00E9497339927182F002704 |
:101F70008BE090E00E949733080F111D1093F6023A |
:101F80000093F5020F900F900F900F900F5F1F4F6F |
:101F900039F08091F7029091F8028F5F9F4F41F4E2 |
:101FA0001092F8021092F7021092F6021092F502C7 |
:101FB0008091F5029091F6029F938F938091F702A2 |
:101FC0009091F8029F938F938FE892E09F938F9365 |
:101FD000DF93CF93E091C905F091CA0509950E945E |
:101FE000E32788E893E190933D0180933C01C1E0B1 |
:101FF000C093FE058C2F0E94BB0C809194080E9418 |
:1020000090A70E947B0C80ED97E00E94A81D6C01B8 |
:102010008AEF90E00E94A81D93E09093C60710926B |
:10202000F1028091E708EDB7FEB73896EDBF84FF67 |
:1020300002C0C093FB0290933F0112BC11BC80917F |
:10204000FD02882311F04798FECF80912C0388234E |
:1020500009F4A4C280911801882309F49FC2F8945E |
:1020600080912C03815080932C0378948091FD05FE |
:10207000882319F00E948D0C02C00E94504E0E94CD |
:10208000944A289880915804882331F0809158040C |
:102090008150809358040EC080916F0080628093BD |
:1020A0006F0010923E0A10923D0A8091E30588600D |
:1020B0008093E30580913C0190913D0101979093BD |
:1020C0003D0180933C0180913C0190913D01892B21 |
:1020D00021F0809178038823C9F180913C0190918F |
:1020E0003D01892BD9F40E94C13685E090E09093A0 |
:1020F0003D0180933C018091000890910108019678 |
:1021000090930108809300088091E305816080939B |
:10211000E3058091C70782608093C70780910B0118 |
:1021200090910C018F5F9F4F91F480915704882309 |
:1021300071F088EA91E6909329038093280380E860 |
:1021400090E090930C0180930B0101C028980E94AD |
:1021500042A980912C03882309F01EC28091850535 |
:10216000882319F00E94C49A17C2809127038823FC |
:1021700011F40E94C17380911101882311F00E9413 |
:102180006B1E0E94F3190E946A15C6010E94B11DC0 |
:10219000882309F4FDC124E130E0C20ED31E0E9461 |
:1021A000291E80919408863019F40E94EA8904C09F |
:1021B000843011F40E94949B80911704882331F19C |
:1021C00080910D0890910E088C52914074F080918E |
:1021D000D6079091D70780509240C4F480910D08A3 |
:1021E00090910E08835593408CF0639422E326155A |
:1021F00070F480915704882331F08091E205806269 |
:102200008093E20504C08093430401C0662480915A |
:102210007803882329F48091B70B8E3150F405C0E0 |
:102220008091E30582608093E3058091C707826017 |
:102230000FC08091280390912903892B59F4809134 |
:102240003C0190913D01079728F08091C7078D7F51 |
:102250008093C7078091FB02882361F08091580426 |
:10226000873940F01092FB0288E893E190932903AC |
:102270008093280380910601882321F08150809368 |
:1022800006012EC08093090610922B0410922A0496 |
:102290001092290410922804109227041092260408 |
:1022A000809158048823E1F480910B0190910C01F6 |
:1022B0008F5F9F4FA9F42091FB02223089F088E9BB |
:1022C0009AE3909329038093280380E09CE0909305 |
:1022D0000C0180930B01222319F082E08093FB0212 |
:1022E0008091A601893C70F081508093A601809175 |
:1022F000E3058B7F8093E3058091E6058160809301 |
:10230000E60551C08091440B8823F9F08091E305E4 |
:1023100084608093E30589E08093380580910B0108 |
:1023200090910C018F5F9F4F81F480915704882317 |
:1023300061F088E99AE3909329038093280380E071 |
:1023400098EA90930C0180930B0110922B05109248 |
:102350002A0510922905109228051092270510923F |
:10236000370B8FEF8093AC0B1092760B1092750B9E |
:102370001092780B1092770B8FEF9FEF9093740B66 |
:102380008093730B109247041092480410924904F2 |
:1023900010924A0410924B048091E6058E7F809340 |
:1023A000E6051092A60160910201262F3327809145 |
:1023B00026019091270128173907F4F080911F0416 |
:1023C000806280931F0480910B0190910C018F5FBC |
:1023D0009F4F91F480912601909127010B9764F013 |
:1023E00080E797E1909329038093280380E093E0AE |
:1023F00090930C0180930B018091FC028F5F80937E |
:10240000FC02813309F07BC01092FC0280916505CB |
:10241000882319F081508093650580911F0481FF06 |
:102420000AC08091F3029091F40201969093F40215 |
:102430008093F30204C05AEA852E55E0952E8091D0 |
:102440002004909121048050944008F049C02091CC |
:102450000F08309110084091110850911208809196 |
:102460001E0190911F01A0912001B0912101281718 |
:1024700039074A075B0764F480910F0890911008B0 |
:10248000A0911108B09112080596A11DB11D20C0A0 |
:1024900020910F08309110084091110850911208B6 |
:1024A00080911E0190911F01A0912001B091210106 |
:1024B00082179307A407B5079CF480910F089091A9 |
:1024C0001008A0911108B09112080597A109B1094F |
:1024D00080930F0890931008A0931108B0931208EE |
:1024E000862F992701962091260130912701821786 |
:1024F00093072CF480911F048F7D80931F04089410 |
:10250000811C911C32E783163BE0930609F040C022 |
:10251000882499242091F7023091F8022F5F3F4FD1 |
:102520003093F8022093F7028091F5029091F60221 |
:1025300001969093F6028093F502832F9927682FD6 |
:102540008EE090E00E949F338091F7029091F80214 |
:102550009070682F8FE090E00E949F338091F50289 |
:102560009091F602892F9927682F8AE090E00E94C7 |
:102570009F338091F5029091F6029070682F8BE066 |
:1025800090E00E949F3384E190E00E94A81D6C01BE |
:102590000E940A790E940B8471107A94772039F492 |
:1025A0000E94CE78882319F08CE0782E46CD809159 |
:1025B0002703882309F041CD0E94C1733ECD1F92AD |
:1025C0000F920FB60F9211248F939F93EF93FF9367 |
:1025D000809108018823E1F48091170390911803FA |
:1025E00001969093180380931703FC01E651F94F6D |
:1025F000E081ED3019F08C3D910539F4109218030B |
:102600001092170381E080930801E093C60004C094 |
:102610001092180310921703FF91EF919F918F91E1 |
:102620000F900FBE0F901F9018951F920F920FB62C |
:102630000F9211242F933F934F935F936F937F9348 |
:102640008F939F93AF93BF93CF93EF93FF9390E0BC |
:102650008091FD02813029F48091C6008093CE00E4 |
:10266000D1C08091FD02823029F48091C600809310 |
:102670000C06C8C08091C60080930F0350911D03C3 |
:102680005C3D10F090931E0380910F038D3009F094 |
:102690006AC080911E03823009F065C090931E03CA |
:1026A000852F9927845F994FFC01329740812091B3 |
:1026B000190330911A03241B3109DC0111978C9105 |
:1026C000281B3109C9019F7090931A038093190345 |
:1026D00046E0969587954A95E1F7982F935C9093FD |
:1026E0001B032F733070235C20931C038081981789 |
:1026F00029F48C91281711F491E006C090E08091A4 |
:102700000C038F5F80930C0380910E03882309F0E4 |
:1027100079C0992309F476C081E080930E03580FA5 |
:1027200050930B035150E52FFF27E45FF94F8DE0E5 |
:10273000808380910E06823509F064C0C0915704F1 |
:10274000CC2309F05FC00E94E32788E190E02CE0F1 |
:102750000FB6F894A895809360000FBE2093600098 |
:10276000C09326034FC020911E03822F99278130EA |
:102770009105F9F0823091051CF4892B21F040C0BD |
:10278000029711F13DC080910F03833239F480919B |
:102790000E03882319F481E080931E0380910F03B8 |
:1027A00080930C0681E080931D0380910F0399278D |
:1027B00022C02F5F20931E03E52FFF27E45FF94F10 |
:1027C00080910F03808309C0E52FFF27E45FF94F55 |
:1027D00080910F0380835C3D20F45F5F50931D0365 |
:1027E00002C010921E0320910F0380911903909153 |
:1027F0001A03820F911D90931A038093190302C04C |
:1028000010921E03FF91EF91CF91BF91AF919F91D5 |
:102810008F917F916F915F914F913F912F910F9089 |
:102820000FBE0F901F901895AC01A0E0B0E09D0185 |
:10283000A817B90748F4EAEEF6E08191280F311D98 |
:102840001196A417B507C8F33F70FD01E651F94F83 |
:10285000C90156E0969587955A95E1F7835C808388 |
:102860001196FD01E651F94F2F733070822F835C72 |
:102870008083A551B94F8DE08C931092080180910F |
:10288000EA068093C6000895A0E0B0E0EAE4F4E12F |
:102890000C940BAD2C859D850E85BB2483E2809323 |
:1028A000EA069F599093EB062093EC0633E0E32E63 |
:1028B000F12C002309F49EC0CF84D888BE016D5E40 |
:1028C0007F4FA989BA890150109709F493C01097D6 |
:1028D000B9F0F601EB0DF11DB3949081119791F4CD |
:1028E000002349F1FB016E5F7F4FDB01C080D18087 |
:1028F0006E5F7F4F0D90BC91A02DBB24015002C094 |
:1029000090E019C01097B9F0F601EB0DF11DB394EA |
:102910004081119791F4002341F1FB016E5F7F4FDD |
:10292000DB01C080D1806E5F7F4F0D90BC91A02DE8 |
:10293000BB24015002C040E018C01097B1F0F6016E |
:10294000EB0DF11DB3941081119781F4002371F008 |
:10295000FB013296DB01CD90DC90BF016E5F7F4FB3 |
:10296000A081B181BB24015001C010E0F701E65104 |
:10297000F94F892F86958695835C80830894E11CA6 |
:10298000F11CF701E651F94F892F99278370907058 |
:1029900024E0880F991F2A95E1F755279A0194E0C2 |
:1029A000369527959A95E1F7822B835C808308946E |
:1029B000E11CF11CF701E651F94F4F705070440FC4 |
:1029C000551F440F551F812F992726E0969587950F |
:1029D0002A95E1F7842B835C80830894E11CF11C29 |
:1029E000F701E651F94F1F73135C10830894E11C43 |
:1029F000F11C6ACFC7010E941414E9E00C9427ADC2 |
:102A0000A3E07A2F40910B034650442309F458C0A9 |
:102A1000E72FFF27E45FF94F80818D537F5FE72F1A |
:102A2000FF27E45FF94F20812D537F5FE72FFF27BA |
:102A3000E45FF94F30813D537F5FE72FFF27E45F6D |
:102A4000F94F60816D537F5F9927880F991F880F19 |
:102A5000991F522F52955F70582B822F99278F7094 |
:102A60009070F4E0880F991FFA95E1F7232F2695CF |
:102A70002695282B832F992783709070E6E0880F86 |
:102A8000991FEA95E1F7682B41504F3FC9F0EA2FB3 |
:102A9000FF27E45FF94F5083AF5F41504F3F81F014 |
:102AA000EA2FFF27E45FF94F2083AF5F41504F3F8C |
:102AB00039F0EA2FFF27E45FF94F6083AF5FA5CFBE |
:102AC0008FE096E090930A0380930903A350A093AC |
:102AD00008030895A2E0B0E0E0E7F5E10C9411AD41 |
:102AE00080910E03882309F426C40E94001580916A |
:102AF0000D06823609F0E4C280910E0699278037D0 |
:102B0000910509F4AFC081379105C4F48A36910567 |
:102B100009F441C28B36910544F48B34910571F16F |
:102B20008636910509F46AC1CBC28D36910509F448 |
:102B300069C08E36910509F44DC0C2C28437910533 |
:102B400041F1853791054CF48137910509F491C025 |
:102B50008337910509F4EAC0B3C28737910509F4B8 |
:102B6000DCC1883791052CF48537910509F498C1AB |
:102B7000A7C28937910509F47DC1A2C2E09109037A |
:102B8000F0910A0380819181909393018093920147 |
:102B900097C280910B03A0910903B0910A0385317C |
:102BA00040F080E1E7EEF5E00D9001928A95E1F7C3 |
:102BB0000DC08D919D910D90BC91A02D8093E70546 |
:102BC0009093E805A093E905B093EA0580EF809320 |
:102BD00006034BC0809108018823E1F38DE490E067 |
:102BE0009F938F9386EF98E09F938F9381E08F93CD |
:102BF0008F938EE48F930E9444148DB79EB70796EF |
:102C00008DBF5EC2A0910903B0910A031C911130DF |
:102C100081F48DE4E6EFF8E00D9001928A95E1F7FA |
:102C20000E94B23419838091E3058F7E8093E3057F |
:102C300001C01982809108018823E1F381E090E0CE |
:102C40009F938F93CE0101969F938F9381E08F93F3 |
:102C50008F938DE48F930E944414ADB7BEB717963F |
:102C6000ADBF2EC281E0809311038FEF80930601E8 |
:102C700027C2809157048823E1F5E0910903F09180 |
:102C80000A03E0818E2F8A508A3058F48983882382 |
:102C900011F481E003C0863010F085E0898361E0A3 |
:102CA0000EC08E2F84518A3070F48983882311F4EA |
:102CB00081E003C0863010F085E0898360E089817F |
:102CC0000E94343512C0E983EF3F19F40E94153594 |
:102CD00089838981882311F481E003C0863010F054 |
:102CE00085E0898389810E94B53380E00E94BB0C16 |
:102CF00003C00E9415358983809108018823E1F380 |
:102D000088E890E09F938F938DE698E09F938F9350 |
:102D100081E090E09F938F93CE0101969F938F93D4 |
:102D200082E08F9381E08F9381E52DC1209109038B |
:102D300030910A03D9018C918150853008F045C04B |
:102D4000F9018181863609F040C0809157048823BB |
:102D5000E1F52F5F3F4F88E8EDE6F8E0D9010D90EF |
:102D600001928A95E1F7F90182910E9422348091C3 |
:102D7000AE089927AA27BB27BC01CD0124EC39E076 |
:102D800040E050E00E9473ACDC01CB0180938A01EB |
:102D900090938B01A0938C01B0938D018091AF082B |
:102DA0009927AA27BB27BC01CD010E9473ACDC0187 |
:102DB000CB018093860190938701A0938801B09303 |
:102DC00089010E941535898301C01982809108010B |
:102DD0008823E1F381E090E09F938F93CE010196E9 |
:102DE0009F938F9381E08F938F9383E58F930E94BE |
:102DF00044148DB79EB707968DBF2BC080915704A2 |
:102E0000882309F05DC1E0910903F0910A03E08194 |
:102E10008E2F8150853018F48E2F0E94B5330E947A |
:102E200015358983809108018823E1F381E090E0E2 |
:102E30009F938F93CE0101969F938F9381E08F9301 |
:102E40008F9386E48F930E944414ADB7BEB7179654 |
:102E5000ADBF10915704112341F46EE670E08981F3 |
:102E60000E94F23E812F0E94BB0C809194080E9428 |
:102E700090A726C119822981A0910903B0910A0364 |
:102E8000EDE3FAE08D91992787FD909593A382A3B6 |
:102E9000822F8F5F8983282F32968C3098F310C150 |
:102EA000E0910903F0910A0380810E94033B8A8329 |
:102EB000882319F481E0898301C019828091080177 |
:102EC0008823E1F388E090E09F938F9380E899E076 |
:102ED0009F938F9321E030E03F932F9380910903DC |
:102EE00090910A039F938F933F932F93CE01029665 |
:102EF0009F938F933F932F93CE01820F931F9F93A6 |
:102F00008F9384E08F9381E08F9385E58F930E9468 |
:102F10004414EDB7FEB773963CC080910803893026 |
:102F200008F4CEC02091090330910A032F5F3F4F70 |
:102F300088E0A0E8B9E0F90101900D928A95E1F7E7 |
:102F4000D9018E910E945D3A8A83882319F481E029 |
:102F5000898301C01982809108018823E1F321E06F |
:102F600030E03F932F93CE0102969F938F933F9330 |
:102F70002F93CE01820F931F9F938F9382E08F93A5 |
:102F800081E08F9387E58F930E944414EDB7FEB7DD |
:102F90003B96EDBF95C080915704882309F090C0FF |
:102FA0000E9447A78983823019F0843009F088C0D5 |
:102FB00020E430E0F8948091C1008F738093C100C9 |
:102FC0008091C9008F738093C9008091C100877E72 |
:102FD0008093C1008091C900877E8093C900809151 |
:102FE000C80087FF03C08091CE00F9CF8091C00058 |
:102FF00087FF03C08091C600F9CFE0910903F091EB |
:103000000A03E081E13021F482E08093FD022EC0CA |
:10301000E43611F421E830E081E08093FD02832F53 |
:1030200099278093CD002093CC008091CD00809390 |
:10303000C5008091CC008093C4008091CA008F7D30 |
:103040008093CA008091CA008F7E8093CA008091CD |
:10305000C9008B7F8093C9008091CA0084608093EF |
:10306000CA008091CA0082608093CA008091CA0021 |
:10307000877F8093CA008091C200877F8093C200BF |
:103080008091C9008E7F8093C9008091C1008861C2 |
:103090008093C1008091C90088618093C9008091AC |
:1030A000C10080688093C1008091C90080688093CE |
:1030B000C90010926E0010926F0010927000789408 |
:1030C00080910E0699278436910509F4BBC0853698 |
:1030D0009105ACF48136910509F46FC082369105F3 |
:1030E0002CF48B34910509F45DC01DC18236910525 |
:1030F00009F470C08336910509F47FC014C18C3681 |
:10310000910509F4EDC08D3691054CF48736910593 |
:1031100009F406C18836910509F4B2C004C18437A8 |
:10312000910529F08637910509F4E8C0FCC080912B |
:103130000B03A0910903B0910A03803140F080E1B4 |
:10314000E7EEF5E00D9001928A95E1F70DC08D91C3 |
:103150009D910D90BC91A02D8093E7059093E8057B |
:10316000A093E905B093EA05809108018823E1F373 |
:103170001F92809105018F9384E58F930E944414E0 |
:103180008AEF809306038FEF8093060180EA9FE029 |
:103190000E94A81D9093FF028093FE020F900F9053 |
:1031A0000F90C1C0E0910903F0910A0380819181E1 |
:1031B0009093930180939201B6C0E0910903F0913E |
:1031C0000A03808180930701803298F08FE1809319 |
:1031D00007010FC0A0910903B0910A038BE0EFEF44 |
:1031E000F5E00D9001928A95E1F7809108068093B1 |
:1031F00008088FEF8093060196C08091020390919A |
:103200000303892B89F4E0910903F0910A03E0811B |
:10321000EE2351F08AE0E89FC00111240E94A81D0E |
:103220009093DA058093D905E0910903F0910A03A0 |
:1032300090818AE0989FC0011124909303038093AA |
:10324000020315C08FEF80930601E0910903F0910E |
:103250000A0390818AE0989FC0011124909305038E |
:1032600080930403892B19F081E08093130380EA93 |
:103270009FE00E94A81D9093FF028093FE0253C01E |
:103280008FEF80930601E0910903F0910A0390818A |
:1032900097FD08C082E08093100310920103109202 |
:1032A00000031AC0909580917003892B809370035E |
:1032B00091818AE0989FC00111249093010380932B |
:1032C000000384E08093100380EA9FE00E94A81D21 |
:1032D0009093FF028093FE0281E08093140323C049 |
:1032E0008FEF80930601E0910903F0910A0380813A |
:1032F0008093710381E08093150315C080910803CA |
:10330000882351F0E0910903F0910A03E081E23053 |
:1033100019F4E093120307C081E08093120303C005 |
:1033200081E08093160310920E0310920A0310920C |
:10333000090310920803E3E0CE5F0C942DAD982FA3 |
:103340008091C00085FFFCCF9093C60008950F9335 |
:103350001F9388E18093C1008091C00082608093B8 |
:10336000C0008091C10080688093C1008091C1003D |
:1033700080648093C10000E010E00093C5008AE201 |
:1033800090E08093C40080910403909105030E9413 |
:10339000A81D9093DC058093DB058CED90E00E94E6 |
:1033A000A81D90930B0680930A0682E08093DD05AA |
:1033B00086E08093DE0584E08093E1058BE08093D6 |
:1033C000DF051092E0058FEF8093E5058091030102 |
:1033D0008093E40510930A030093090310920803F5 |
:1033E0001F910F910895AAE1B0E0E9EFF9E10C9483 |
:1033F00010AD80910801882309F4BEC28091FE02BD |
:103400009091FF020E94B11D882361F01092010388 |
:10341000109200031092050310920403109203030C |
:10342000109202038091000390910103892B41F0D7 |
:103430008091E8069091E9060E94B11D882329F445 |
:1034400080911403882309F460C0809108018823C7 |
:1034500009F45BC0809110030CE118E08430A8F0FF |
:103460000E94F92780E590E09F938F931F930F931D |
:1034700081E08F938F9388E48F930E9444142DB73B |
:103480003EB7295F3F4F2DBF34C01092720381EBCE |
:1034900094E09F938F938CEE97E29F938F93E091AC |
:1034A000C905F091CA05099584E190E09F938F9337 |
:1034B0001F930F9381E090E09F938F9380E193E0BF |
:1034C0009F938F9382E08F9381E08F9388E48F9313 |
:1034D0000E94441480911003982F8F5F80931003F3 |
:1034E0002DB73EB7215F3F4F2DBF943010F01092A3 |
:1034F000100380910003909101030E94A81D9093F6 |
:10350000E9068093E806109214038091150388233E |
:1035100051F180910801882331F10E94F92780E55B |
:1035200090E09F938F938CE198E09F938F9321E09D |
:1035300030E03F932F9388E291E09F938F933F93E6 |
:103540002F9381E793E09F938F9383E08F9381E0A4 |
:103550008F938CE48F930E944414109215038DB7BF |
:103560009EB70F968DBF90911203992309F44AC01C |
:1035700080910801882309F445C0923071F580914B |
:10358000410B89838091420B8A838091430B8D8309 |
:103590008091450B88878FEF8E838F838091DF0525 |
:1035A0008B838091E50589878091E6058A871C8257 |
:1035B0008AE090E09F938F93CE0101969F938F9323 |
:1035C00081E08F938F9386E58F930E9444142DB7EB |
:1035D0003EB7295F3F4F2DBF13C08AE090E09F9315 |
:1035E0008F938DED95E09F938F9381E08F938F93D1 |
:1035F00086E58F930E9444148DB79EB707968DBFC2 |
:1036000010921203809116038823E1F08091080143 |
:103610008823C1F08BE090E09F938F938FEF95E02C |
:103620009F938F9381E08F93809105018F9387E41F |
:103630008F930E944414109216032DB73EB7295F52 |
:103640003F4F2DBF8091040390910503892B41F0DA |
:103650008091DB059091DC050E94B11D882321F447 |
:1036600080911303882339F180910801882319F18F |
:103670000E94043E82E490E09F938F9386EC97E053 |
:103680009F938F9381E08F938F9384E48F930E9415 |
:103690004414109213038DB79EB707968DBF809187 |
:1036A000040390910503009731F00E94A81D9093A8 |
:1036B000DC058093DB058091020390910303892B45 |
:1036C00009F498C08091D9059091DA050E94B11D46 |
:1036D000882309F48FC080910801882309F48AC0E7 |
:1036E00080914A0B90914B0B9093CC058093CB0526 |
:1036F00080914C0B90914D0B9093CE058093CD050E |
:1037000020912C0B30912D0B40912E0B50912F0BB3 |
:10371000DA01C90163E0880F991FAA1FBB1F6A95D0 |
:10372000D1F7820F931FA41FB51F820F931FA41FF1 |
:10373000B51F2091440130914501409146015091BF |
:103740004701BC01CD010E94E7AC3093D005209326 |
:10375000CF0580917A0490917B04A0917C04B09174 |
:103760007D0449E0B595A795979587954A95D1F73A |
:103770008093D1058091760490917704A09178048C |
:10378000B091790439E0B595A795979587953A95C5 |
:10379000D1F78093D2058091820490918304A09107 |
:1037A0008404B091850429E0B595A79597958795F0 |
:1037B0002A95D1F78093D3058EE090E09F938F9365 |
:1037C0008BEC95E09F938F9381E08F938F9383E4AD |
:1037D0008F930E94441480910203909103030E94EE |
:1037E000A81D9093DA058093D9052DB73EB7295FC0 |
:1037F0003F4F2DBF809107018F3F71F1992704E062 |
:10380000880F991F0A95E1F78F549D4F8E01055F30 |
:103810001F4F40E150E0BC01C8010E94BDAA80E1F9 |
:1038200090E09F938F931F930F9381E090E09F937D |
:103830008F9387E091E09F938F9382E08F9381E055 |
:103840008F9381E48F930E9444148FEF809307013C |
:103850008DB79EB70B968DBF809108088823D1F055 |
:10386000809108018823B1F081E090E09F938F93CD |
:1038700088E098E09F938F9381E08F938F9382E409 |
:103880008F930E944414109208082DB73EB7295F09 |
:103890003F4F2DBF809111038823C9F0809108010B |
:1038A0008823A9F086E490E09F938F938DE39AE0BC |
:1038B0009F938F9381E08F938F9380E58F930E94E6 |
:1038C0004414109211038DB79EB707968DBF809157 |
:1038D0000A0690910B060E94B11D882309F44CC082 |
:1038E00080910801882309F447C08091A6018823AC |
:1038F00069F580914A0B90914B0B9093F80580935A |
:10390000F70580914C0B90914D0B9093FA058093A5 |
:10391000F905809134048093FB05809133048093F2 |
:10392000FC0588E090E09F938F9387EF95E09F934D |
:103930008F9381E08F9383E08F938BE68F930E9428 |
:1039400044142DB73EB7295F3F4F2DBF8091FD0531 |
:10395000853018F086E08093FD058091250388234B |
:1039600019F083E690E002C087EE93E00E94A81D64 |
:1039700090930B0680930A06E4E0C65E0C942CAD8F |
:103980001F920F920FB60F9211242F933F935F93C4 |
:103990006F937F938F939F93AF93BF93EF93FF9317 |
:1039A00080912703882329F08091270381508093F9 |
:1039B000270380914B05882319F0815080934B0594 |
:1039C00080912F03815080932F038F3F09F051C0C6 |
:1039D00089E080932F0380912D0390912E0301960F |
:1039E00090932E0380932D03809112018F5F81703D |
:1039F00080931201882349F480912C03843028F4A9 |
:103A000080912C038F5F80932C03349903C081E055 |
:103A1000809325038091280390912903892B11F12C |
:103A200080912803909129030B9750F080912803EF |
:103A3000909129030A97909329038093280304C047 |
:103A40001092290310922803809128039091290352 |
:103A500020910B0130910C0182239323892B41F09B |
:103A6000479A07C08FEF9FEF90930C0180930B0153 |
:103A7000479880912503882309F45AC02091A60114 |
:103A8000222309F055C080911A0B83FF51C086B1E3 |
:103A90009927FC01E071F07084FF13C080912A0324 |
:103AA00090912B03019690932B0380932A0380918E |
:103AB0002A0390912B03895E9340D0F12093250334 |
:103AC00037C080912A0390912B03892B69F1809153 |
:103AD0002A0390912B038A56914030F580912A0356 |
:103AE00090912B0369E270E00E949EAC80912A03C2 |
:103AF00090912B03860F971F90932B0380932A039B |
:103B000080912A0390912B030B9750F080912A0308 |
:103B100090912B030A97909393018093920104C094 |
:103B2000F0939301E093920110922B0310922A03D9 |
:103B3000FF91EF91BF91AF919F918F917F916F9185 |
:103B40005F913F912F910F900FBE0F901F9018958E |
:103B500020912D0330912E03280F391FC9010196A2 |
:103B6000089520912D0330912E03821B930B892FF2 |
:103B700099278695807490700895CF93DF930E9463 |
:103B8000A81DEC01CE010E94B11D8823D9F3DF915D |
:103B9000CF910895CF93DF930E94A81DEC0109C037 |
:103BA00080911801882329F0909318018FEC80935D |
:103BB0007A00CE010E94B11D982F882389F3DF91EE |
:103BC000CF9108959FB7F8945F983E9A469A809156 |
:103BD000B0008F708093B0008091B00083608093BC |
:103BE000B0008091B1008B738093B1008091B100DF |
:103BF0008B608093B1001092B2008FEF8093B3007E |
:103C00008091B00080688093B000809170008A7FBE |
:103C100080937000809170008260809370009FBFDD |
:103C200008958AE090E00E94A81D90930A0880936E |
:103C3000090882E085BD83EB84BD8FEF88BD84EBEE |
:103C400087BD86E086BD80916E00816080936E00A6 |
:103C500008958091E6082091710182FF30C0909113 |
:103C60009D088CE3989FB001112490919C0880E5F9 |
:103C7000989FA0011124922F905897FD9D5F9595D4 |
:103C8000959586E09802C001112420910901309198 |
:103C90000A01281B390B30930A01209309014217AE |
:103CA00053072CF050930A014093090108952617F9 |
:103CB000370784F070930A01609309010895822FF9 |
:103CC000992736E0880F991F3A95E1F790930A01FA |
:103CD000809309010895EF92FF920F931F93CF9362 |
:103CE000DF938091A408E82FFF27E65BFE4F9681C3 |
:103CF000C08180911101813009F021C18091E808D3 |
:103D000087FF05C0C0E0D0E0E0E0F0E046C0892FCA |
:103D1000992787FD9095A92FB92F2091B204309152 |
:103D2000B3044091B4045091B504BC01CD010E948C |
:103D300073AC97FF04C061587F4F8F4F9F4F7B013B |
:103D40008C0187E015950795F794E7948A95D1F74C |
:103D50008C2F992787FD9095A92FB92F2091AA0420 |
:103D60003091AB044091AC045091AD04BC01CD0145 |
:103D70000E9473AC97FF04C061587F4F8F4F9F4FD5 |
:103D8000B7E09595879577956795BA95D1F7F8013E |
:103D9000E701C61BD70BE80BF90B209132053091D8 |
:103DA0003305C901A3E0880F991FAA95E1F7821B8B |
:103DB000930BAA2797FDA095BA2FC81BD90BEA0B26 |
:103DC000FB0B80916F019927AA27BB27BC01CD016E |
:103DD0009E01AF010E9473AC97FF04C061507E4FFB |
:103DE0008F4F9F4FFC01EB0179E0F595E795D79553 |
:103DF000C7957A95D1F71091E60860910901709105 |
:103E00000A0112FF05C07093100160930F0118C0E2 |
:103E100040910F01509110018091A308282F332762 |
:103E2000CB01841B950BB9010E94B2AC80910F01AC |
:103E300090911001860F971F9093100180930F01AE |
:103E400010FF14C080910F019091100197FD0F9603 |
:103E500064E0959587956A95E1F7AA2797FDA09567 |
:103E6000BA2FC80FD91FEA1FFB1F15C080910F0181 |
:103E70009091100197FD0F9654E0959587955A956E |
:103E8000E1F7AA2797FDA095BA2F8C1B9D0BAE0BCF |
:103E9000BF0BFD01EC012091D808222321F133272B |
:103EA0008091210390912203829FA001839F500D56 |
:103EB000929F500D1124CA01AA2797FDA095BA2FF1 |
:103EC0008C0F9D1FAE1FBF1F2F5F3F4F442737FD35 |
:103ED0004095542FBC01CD010E94E7AC30932203E2 |
:103EE0002093210304C0D0932203C0932103809127 |
:103EF0009C08282F3327220F331F220F331F809156 |
:103F0000210390912203821793077CF080919D08F2 |
:103F1000282F3327220F331F220F331F80912103B5 |
:103F2000909122032817390724F430932203209319 |
:103F30002103809111018F5F80931101F9C0892FB6 |
:103F4000992787FD9095A92FB92F2091AA04309128 |
:103F5000AB044091AC045091AD04BC01CD010E9472 |
:103F600073AC97FF04C061587F4F8F4F9F4F7B0109 |
:103F70008C0187E015950795F794E7948A95D1F71A |
:103F80008C2F992787FD9095A92FB92F2091B204E6 |
:103F90003091B3044091B4045091B504BC01CD01FB |
:103FA0000E9473AC9B01AC0197FF04C021583F4FA6 |
:103FB0004F4F5F4FC7E05595479537952795CA9561 |
:103FC000D1F72E0D3F1D401F511F80916E01992783 |
:103FD000AA27BB27BC01CD010E9473AC97FF04C088 |
:103FE00061507E4F8F4F9F4FFC01EB01B9E0F5957B |
:103FF000E795D795C795BA95D1F780917001992724 |
:10400000A6E0880F991FAA95E1F740910D01509104 |
:104010000E012091A3083327841B950BB9010E9440 |
:10402000B2AC80910D0190910E01860F971F909375 |
:104030000E0180930D018091E60881FF14C08091EC |
:104040000D0190910E0197FD0F9674E0959587955F |
:104050007A95E1F7AA2797FDA095BA2FC80FD91F27 |
:10406000EA1FFB1F15C080910D0190910E0197FD75 |
:104070000F9664E0959587956A95E1F7AA2797FDD5 |
:10408000A095BA2F8C1B9D0BAE0BBF0BFD01EC0155 |
:104090002091D908222321F1332780911F03909189 |
:1040A0002003829FA001839F500D929F500D1124E9 |
:1040B000CA01AA2797FDA095BA2F8C0F9D1FAE1F8E |
:1040C000BF1F2F5F3F4F442737FD4095542FBC0142 |
:1040D000CD010E94E7AC3093200320931F0304C05E |
:1040E000D0932003C0931F038091A008282F33276B |
:1040F000220F331F220F331F80911F039091200343 |
:10410000821793077CF08091A108282F3327220F74 |
:10411000331F220F331F80911F0390912003281714 |
:10412000390724F43093200320931F0310921101C8 |
:10413000E6E0CDB7DEB70C942AAD1F920F920FB612 |
:104140000F9211242F933F934F935F938F939F93DD |
:10415000EF93FF9380913003882309F0DDC08091B5 |
:10416000B00086FF9FC08091B0008F7B8093B0002D |
:10417000E09133032091A208EE23D9F433278DED8B |
:1041800096E0289FA001299F500D389F500D1124C3 |
:10419000CA012091310330913203821B930B90931B |
:1041A0002403809323031092320310923103469A22 |
:1041B000B0C02E1738F48AE090E0909324038093E7 |
:1041C0002303A7C089EA93E09093240380932303F9 |
:1041D0008E2F992783309105D9F08430910534F4DE |
:1041E0008130910549F0029761F020C0843091053B |
:1041F00091F0059799F01AC08091210390912203C4 |
:1042000004C080911F039091200387559E4F1DC0CD |
:104210008091F60A05C08091CF0A02C08091FF0A02 |
:104220009927880F991F880F991FEFCFFF27EE0F4F |
:10423000FF1FE35CF54F20813181220F331F8091F6 |
:10424000230390912403820F931F90932403809360 |
:104250002303809123039091240355E08D3D95071E |
:1042600018F08CED95E005C08757914030F487E752 |
:1042700091E09093240380932303209123033091B2 |
:1042800024032C5B3040309324032093230380913C |
:10429000310390913203820F931F909332038093E6 |
:1042A000310337C08091B00080648093B0008CEB04 |
:1042B00090E09093240380932303809131039091A5 |
:1042C000320384549F4F9093320380933103809143 |
:1042D0002603882321F080915804882321F48091BB |
:1042E0002603823011F4469801C0469A8091330328 |
:1042F0008F5F80933303282F33278091A20899275B |
:104300000196821793072CF481E08093110110929B |
:10431000330381E080933003209123033091240301 |
:1043200041E02F37340730F08FEF8093B3002F5FD9 |
:1043300030400FC02F3F3105C9F0C0F0A9014F5FD9 |
:1043400050404F37510550F480E88093B300205817 |
:104350003040309324032093230312C08FEF8093C7 |
:10436000B30050932403409323030AC08091230396 |
:104370008093B30010922403109223031092300311 |
:10438000FF91EF919F918F915F914F913F912F916D |
:104390000F900FBE0F901F90189510927C008FEC1D |
:1043A00080937A00089580911704609116017091AE |
:1043B000170120914003882379F0CB01AA27BB275E |
:1043C000332727FD3095432F532FBC01CD010E9489 |
:1043D00073ACDC01CB0116C084E0660F771F8A95B1 |
:1043E000E1F7CB01AA27BB27332727FD3095432FC1 |
:1043F000532FBC01CD010E9473ACDC01CB010497AB |
:10440000A109B1098093380390933903A0933A032B |
:10441000B0933B030895CF93DF93109240030E9423 |
:10442000D32183E090E00E949733C82FDD27C03F5F |
:10443000D10508F42A96C7BD8C2F809588BD86E9E2 |
:1044400090E00E94CA1D80911C0190911D01815233 |
:10445000934010F0C0EFD0E0C630D10510F1C7BDD9 |
:104460008C2F809588BD84E690E00E94CA1D86EC62 |
:1044700094E09F938F938FE999E19F938F93E091BD |
:10448000C905F091CA05099580911C0190911D0103 |
:104490000F900F900F900F908152934010F421973E |
:1044A000DBCFC09319086C2F83E090E00E949F330C |
:1044B00080917A0880FF0AC0809119088A508C3D4B |
:1044C00028F08091E20580648093E20580E180938A |
:1044D0001501809117048823E9F080910301873149 |
:1044E00050F4CC38D105B0F480EA90E08C1B9D0BE1 |
:1044F0006AE170E009C0CA3AD10560F48CEB90E043 |
:104500008C1B9D0B63E170E00E949EACCB01805F31 |
:104510008093150180911501282F332780911C016C |
:1045200090911D01829FA001839F500D929F500D7D |
:104530001124CA01AA27BB2780931E0190931F0153 |
:10454000A0932001B09321018CE291E00E94CA1D4A |
:10455000DF91CF9108951F920F920FB60F92112401 |
:10456000EF92FF920F931F932F933F934F935F937D |
:104570006F937F938F939F93AF93BF93CF93DF936B |
:10458000EF93FF9380915803282F33274427552713 |
:104590008F5F80935803F9012231310508F0ECC494 |
:1045A000EA5BFF4F0C9439AD8091780090917900CF |
:1045B00046C08091780090917900EBC1809178009D |
:1045C0009091790090935C0380935B03FBC1809191 |
:1045D000BC049091BD042091780030917900821B39 |
:1045E000930B90930C0880930B0880910B0890918B |
:1045F0000C08909366038093650303C28091780052 |
:10460000909179002091BE043091BF04821B930BDE |
:1046100090931808809317088091170890911808B4 |
:104620009093680380936703A9C480915F0390917E |
:1046300060032091780030917900820F931F90934E |
:10464000600380935F0381E09AC480915D03909141 |
:104650005E032091780030917900820F931F909330 |
:104660005E0380935D0384E08AC48091E70883FF42 |
:1046700026C080912601909127019C01220F331FB3 |
:10468000280F391F40917800509179008BE090E01D |
:10469000489FB001499F700D589F700D1124CB01A8 |
:1046A0006EE170E00E949EAC260F371F369527956D |
:1046B00036952795309327012093260142C080919B |
:1046C0006E0390916F03892B91F4209178003091C3 |
:1046D0007900C90153E0880F991F5A95E1F7820FBD |
:1046E000931F820F931F90936F0380936E0320910B |
:1046F000780030917900C90143E0880F991F4A95ED |
:10470000E1F7820F931F820F931F20916E03309168 |
:104710006F038217930718F02E5F3F4F02C022509D |
:10472000304030936F0320936E0380916E0390911D |
:104730006F036FE170E00E949EAC7093270160935D |
:10474000260185E01CC480917800909179009093B7 |
:104750000E0880930D0880910D0890910E084091ED |
:10476000B8045091B904841B950B6091B704262FAF |
:10477000332727FD3095821B930B9093460380933C |
:10478000450380911704882309F071C08091450387 |
:104790009091460302977CF172E04E3E57070CF071 |
:1047A000A7C02091590330915A032B5F3F4F30939C |
:1047B0005A03209359032550304080912004909152 |
:1047C0002104845F914030F4215F3F4F30935A03BE |
:1047D000209359038091590390915A03853691058E |
:1047E0000CF486C04F5F5F4F5093B9044093B804F8 |
:1047F0008456904037C080914503909146038F5F67 |
:104800009F4F0CF075C082E0473258070CF470C01F |
:104810002091590330915A032550304030935A0368 |
:10482000209359032B5F3F4F8091200490912104E6 |
:10483000845F914030F42F50304030935A032093DE |
:1048400059038091590390915A037FEF8C39970750 |
:104850000CF04EC0415050405093B9044093B804FE |
:104860008C599F4F90935A038093590341C0809174 |
:10487000EB0A9091EC0A8F5C9F41D4F18091450343 |
:10488000909146030297ACF02091590330915A035E |
:10489000C901019690935A03809359038958934113 |
:1048A0003CF166301CF46F5F6093B70427583341C6 |
:1048B0001BC080914503909146038F5F9F4FC4F4C6 |
:1048C0002091590330915A03C901019790935A03DB |
:1048D0008093590388579C4E5CF46B3F1CF06150E9 |
:1048E0006093B70429573C4E30935A0320935903E1 |
:1048F00080914503909146039C01442737FD4095E4 |
:10490000542F8091720490917304A0917404B0911B |
:104910007504820F931FA41FB51F80937204909398 |
:104920007304A0937404B0937504209172043091C1 |
:104930007304409174045091750457FF04C02150D2 |
:104940003C4F4F4F5F4F9AE05595479537952795C8 |
:104950009A95D1F78091720490917304A091740498 |
:10496000B0917504821B930BA40BB50B809372045A |
:1049700090937304A0937404B0937504F7C080916E |
:104980005D0390915E032091780030917900820F51 |
:10499000931F90935E0380935D0310925703F1C2BF |
:1049A000209178003091790080915B0390915C03B5 |
:1049B000280F391F8FEF97E0821B930B90934C03C6 |
:1049C00080934B0380911401DAC28091BC049091D2 |
:1049D000BD042091780030917900821B930B909355 |
:1049E0000C0880930B0880910B0890910C08209183 |
:1049F000650330916603820F931F90934A0380935F |
:104A0000490380911301BBC2809178009091790095 |
:104A10002091BE043091BF04821B930B9093180821 |
:104A200080931708809117089091180820916703C8 |
:104A300030916803820F931F90934803809347033C |
:104A40009DC220915F033091600380917800909126 |
:104A50007900280F391F220F331F220F331F309385 |
:104A6000600320935F03C90137FD079603E0959526 |
:104A700087950A95E1F79093500380934F038091B7 |
:104A8000610390916203820F931F97FD01969595A4 |
:104A9000879590936203809361032091C8043091BD |
:104AA000C904821B930B90932501809324012091CC |
:104AB0005503309156038091240190912501280FD0 |
:104AC000391F37FF02C02F5F3F4F35952795309331 |
:104AD000560320935503B7CD20915D0330915E03BB |
:104AE0008091780090917900280F391F220F331F91 |
:104AF000220F331F30935E0320935D03C90137FDFE |
:104B00000796A3E095958795AA95E1F790934E03B4 |
:104B100080934D038091630390916403820F931FF0 |
:104B200097FD019695958795909364038093630311 |
:104B30002091C6043091C704821B930B90932301EC |
:104B400080932201209153033091540380912201DC |
:104B500090912301280F391F37FF02C02F5F3F4F6D |
:104B600035952795309354032093530383E007C270 |
:104B700080911704882309F180E00E94C8A59B0159 |
:104B8000AC0120503F4F4F4F5F4F57FF06C09B0176 |
:104B9000AC0121503D4F4F4F5F4F79E05595479500 |
:104BA000379527957A95D1F72093340330933503C1 |
:104BB000409336035093370310C080915204909174 |
:104BC0005304A0915404B0915504809334039093FE |
:104BD0003503A0933603B09337031092580381E056 |
:104BE0008093180180913C0390913D03019690932E |
:104BF0003D0380933C0380917800909179009093DD |
:104C00001D0180931C0180911704882309F472C050 |
:104C100080911C0190911D017C010027112780913A |
:104C2000380390913903A0913A03B0913B03E81AFD |
:104C3000F90A0A0B1B0BE0926903F0926A030093D6 |
:104C40006B0310936C0380911501282F33274427A1 |
:104C5000552780911E0190911F01A0912001B091D4 |
:104C60002101BC01CD010E94E7AC80911E01909111 |
:104C70001F01A0912001B0912101821B930BA40B75 |
:104C8000B50B80931E0190931F01A0932001B09358 |
:104C9000210180911E0190911F01A0912001B091EE |
:104CA00021018E0D9F1DA01FB11F80931E019093A7 |
:104CB0001F01A0932001B093210180910F089091D2 |
:104CC0001008A0911108B091120820911E01309196 |
:104CD0001F014091200150912101821B930BA40BD5 |
:104CE000B50B8093520490935304A0935404B09353 |
:104CF000550444C180911C0190911D01AA27BB2736 |
:104D0000C0916903D0916A03E0916B03F0916C0349 |
:104D1000C80FD91FEA1FFB1FC0936903D0936A0312 |
:104D2000E0936B03F0936C0380916D038F5F80932E |
:104D30006D03803108F422C180911E0190911F0102 |
:104D4000A0912001B09121019C01AD0163E0220FEF |
:104D5000331F441F551F6A95D1F7281B390B4A0B87 |
:104D60005B0B2C0F3D1F4E1F5F1F809138039091EE |
:104D70003903A0913A03B0913B03281B390B4A0B2E |
:104D80005B0B57FF04C0295F3F4F4F4F5F4F03E05E |
:104D900055954795379527950A95D1F720931E018C |
:104DA00030931F014093200150932101C0910F08BF |
:104DB000D0911008E0911108F091120880911E0125 |
:104DC00090911F01A0912001B0912101C81BD90B26 |
:104DD000EA0BFB0BC0935204D0935304E0935404AA |
:104DE000F0935504209141033091420340914303D5 |
:104DF0005091440357FF04C0215F3F4F4F4F5F4F17 |
:104E000014E055954795379527951A95D1F78091D8 |
:104E1000410390914203A0914303B0914403821B4C |
:104E2000930BA40BB50B8093410390934203A09383 |
:104E30004303B09344038091410390914203A091B6 |
:104E40004303B09144038C0F9D1FAE1FBF1F80937F |
:104E5000410390934203A0934303B0934403809192 |
:104E6000410390914203A0914303B0914403B7FFE3 |
:104E700003C00F96A11DB11DC4E0B595A7959795E8 |
:104E80008795CA95D1F72091520430915304281B7D |
:104E9000390B64E0213036071CF020E034E006C016 |
:104EA0007CEF2030370714F420E03CEF80913E0384 |
:104EB00090913F0380913E0390913F0397FF03C081 |
:104EC000909581959F4FA901F3E0440F551FFA95E6 |
:104ED000E1F78D5B9240C4F080913E0390913F03D7 |
:104EE0009C01E4E0220F331FEA95E1F7281B390B00 |
:104EF000240F351F37FF02C0215F3F4F74E0359507 |
:104F000027957A95E1F717C080913E0390913F0372 |
:104F10009C0165E0220F331F6A95E1F7281B390BCE |
:104F2000240F351F37FF02C0215E3F4F45E0359506 |
:104F300027954A95E1F730933F0320933E038091F4 |
:104F4000690390916A03A0916B03B0916C03B7FF62 |
:104F500003C00196A11DB11DB595A795979587959D |
:104F60008093690390936A03A0936B03B0936C03DF |
:104F700088E080936D0302C01092580382E0809312 |
:104F800057038091570380937C00809158038823B6 |
:104F900019F08FEC80937A00FF91EF91DF91CF9120 |
:104FA000BF91AF919F918F917F916F915F914F9141 |
:104FB0003F912F911F910F91FF90EF900F900FBE97 |
:104FC0000F901F90189590E2ECE1F8E08FE4919338 |
:104FD000815087FFFCCF089590917203903540F483 |
:104FE000E92FFF27E45EF74F80839F5F9093720362 |
:104FF0000895A0E0B0E0EFEFF7E20C940AAD209145 |
:10500000700320FF0AC080917103882311F0815042 |
:1050100002C0809128018093710321FF0CC0909100 |
:10502000710380912801981719F41092710303C03D |
:105030009F5F90937103822F992780FF04C081FFA7 |
:1050400002C0109271030E94E32780917103282F00 |
:1050500033270CEE17E2C091C905D091CA058A30FA |
:1050600098F481E1809372033F932F9388EC94E04E |
:105070009F938F931F930F93FE0109952DB73EB712 |
:105080002A5F3F4F2DBF12C080E1809372033F9390 |
:105090002F938DEC94E09F938F931F930F93FE01BA |
:1050A00009954DB75EB74A5F5F4F4DBF20917103C1 |
:1050B000822F9927AA27BB27FC01449710F00C9454 |
:1050C0007031E85AFF4F0CEE17E2C091C905D0913C |
:1050D000CA050C9439AD1092720382ED94E09F934F |
:1050E0008F935CEEE52E57E2F52E1F930F93FE0192 |
:1050F000099584E1809372030F900F900F900F90A9 |
:1051000085E690E09F938F9386E090E09F938F9346 |
:1051100082E090E09F938F93809103016AE00E9468 |
:1051200092AC892F99279F938F93809103010E94BE |
:1051300092AC99279F938F9382EE94E09F938F93E5 |
:105140001F930F93E091C905F091CA05099588E274 |
:10515000809372038DB79EB70E968DBF87EF98E050 |
:105160009F938F938091010199279F938F938AEF4B |
:1051700094E09F938F931F930F93E091C905F09153 |
:10518000CA0509958091E3059927EDB7FEB73896D2 |
:10519000EDBFEC01C071D07084FF0BC08CE3809335 |
:1051A000720388E095E09F938F931F930F930C9465 |
:1051B000F53090913805992351F18CE38093720377 |
:1051C000892F99279F938F9385E195E09F938F93E4 |
:1051D000FF92EF92E091C905F091CA050995DF931E |
:1051E000CF939091380581E1989FC00111248C598B |
:1051F000924F9F938F93FF92EF92E091C905F091A8 |
:10520000CA0509952DB73EB7245F3F4F01C690915F |
:10521000E205992371F08CE380937203892F99271B |
:105220009F938F938DE195E09F938F93FF92EF92E1 |
:1052300081C5909178039923C1F08CE38093720328 |
:10524000892F99279F938F9384E395E09F938F9362 |
:10525000FF92EF92E091C905F091CA0509958DB7CB |
:105260009EB706968DBF0C94793180913C01909148 |
:105270003D01069730F48CE3809372038AE495E055 |
:10528000B0C79091B70B9E3110F00C9479318CE33C |
:1052900080937203892F99279F938F9387E595E0D9 |
:1052A00017C1109272038091520490915304A091FF |
:1052B0005404B0915504BC01CD0125E030E040E03C |
:1052C00050E00E94E7AC3F932F938BE695E09F93CD |
:1052D0008F931F930F93FE01099584E180937203CE |
:1052E0002DB73EB72A5F3F4F2DBF80914E0490915E |
:1052F0004F04A0915004B0915104BC01CD0125E0B0 |
:1053000030E040E050E00E94E7AC3F932F9388E705 |
:1053100095E09F938F931F930F93E091C905F091B0 |
:10532000CA05099588E2809372034DB75EB74A5F5C |
:105330005F4F4DBF80911C0190911D019F938F93F2 |
:1053400085E895E09F938F931F930F93E091C90594 |
:10535000F091CA0509958CE3809372038DB79EB7CF |
:1053600006968DBF87B599279F938F9382E995E025 |
:105370009F938F931F930F93E091C905F091CA05F6 |
:105380000995EDB7FEB73696EDBF809117048823D7 |
:1053900009F4AFC789E3809372038FE995E09F9387 |
:1053A0008F931F930F93E091C905F091CA0509955A |
:1053B0008DE4809372030F900F900F900F90809167 |
:1053C000150199279F938F9383EA95E09F938F937D |
:1053D0001F930F93E091C905F091CA0509952DB768 |
:1053E0003EB72A5F3F4F14C51092720386EA95E0DC |
:1053F0009F938F934CEEE42E47E2F42E1F930F936E |
:10540000FE01099584E1809372030F900F900F9035 |
:105410000F908091B2049091B304A091B404B09124 |
:10542000B504B7FF04C081509C4FAF4FBF4F3AE067 |
:10543000B595A795979587953A95D1F7BF93AF9373 |
:105440009F938F9383EB95E09F938F93FF92EF92BF |
:10545000E091C905F091CA05099588E2809372032D |
:105460004DB75EB7485F5F4F4DBF8091AA049091E2 |
:10547000AB04A091AC04B091AD04B7FF04C081505F |
:105480009C4FAF4FBF4F2AE0B595A795979587954D |
:105490002A95D1F7BF93AF939F938F9382EC95E0BA |
:1054A0009F938F93FF92EF92E091C905F091CA0507 |
:1054B00009958CE3809372038DB79EB708968DBFD4 |
:1054C0008091230B9091240B9F938F9381ED95E016 |
:1054D0009F938F93FF92EF927CC291E0F92EC1E0EF |
:1054E000D0E00FE31AE09F2D969584E1989FC001CC |
:1054F000112480937203F801828193819F938F938B |
:105500002196DF93CF932197808191819F938F93F1 |
:10551000DF93CF9380EE95E09F938F938CEE97E28D |
:105520009F938F93E091C905F091CA0509952DB716 |
:105530003EB7245F3F4F2DBF32E0F30E22960C5F43 |
:105540001F4F48E04F1578F6D4C610927203809131 |
:105550006F08E82FFF27EE0FFF1FE35CF54F8081F8 |
:1055600091819F938F9380916E08E82FFF27EE0F14 |
:10557000FF1FE35CF54F808191819F938F9382EFB2 |
:1055800095E09F938F931F930F93FE01099584E1FC |
:10559000809372038DB79EB708968DBF8091710876 |
:1055A000E82FFF27EE0FFF1FE35CF54F808191810D |
:1055B0009F938F9380917008E82FFF27EE0FFF1FB6 |
:1055C000E35CF54F8081918181589F4F9F938F932A |
:1055D00082E096E09F938F931F930F93E091C9050C |
:1055E000F091CA05099588E280937203EDB7FEB782 |
:1055F0003896EDBF80917308E82FFF27EE0FFF1F4D |
:10560000E35CF54F8081918181589F4F9F938F93E9 |
:1056100080917208E82FFF27EE0FFF1FE35CF54F24 |
:105620008081918181589F4F9F938F9382E196E073 |
:105630009F938F931F930F93E091C905F091CA0533 |
:1056400009958CE3809372032DB73EB7285F3F4FD7 |
:105650002DBF80917508E82FFF27EE0FFF1FE35C39 |
:10566000F54F8081918181589F4F9F938F938091B7 |
:105670007408E82FFF27EE0FFF1FE35CF54F8081D2 |
:10568000918181589F4F9F938F9382E296E09F93E1 |
:105690008F931F930F93E091C905F091CA05099567 |
:1056A0004DB75EB7485F5F4F4EC31092720382E3FF |
:1056B00096E09F938F938CEEE82E87E2F82E1F934F |
:1056C0000F93FE01099584E1809372030F900F9070 |
:1056D0000F900F908091C8049091C9049C0197FF8E |
:1056E00002C0215F3F4F207F821B930B97FD0196E5 |
:1056F000959587959F938F938091C8049091C90445 |
:1057000097FD0F96B4E095958795BA95E1F79F932D |
:105710008F932091C8043091C90437FF02C0295FDC |
:105720003F4FA3E035952795AA95E1F780914F0368 |
:1057300090915003821B930B9F938F9380E496E08C |
:105740009F938F93FF92EF92E091C905F091CA0564 |
:10575000099588E2809372038DB79EB70A968DBF34 |
:105760008091C6049091C7049C0197FF02C0215FFD |
:105770003F4F207F821B930B97FD01969595879550 |
:105780009F938F938091C6049091C70497FD0F96C5 |
:10579000E4E095958795EA95E1F79F938F932091A3 |
:1057A000C6043091C70437FF02C0295F3F4F73E042 |
:1057B000359527957A95E1F780914D0390914E03A9 |
:1057C000821B930B9F938F9382E596E09F938F9319 |
:1057D000FF92EF92E091C905F091CA0509958CE31B |
:1057E00080937203EDB7FEB73A96EDBF8091C40483 |
:1057F0009091C50497FD0196959587959F938F93FA |
:105800008091C4049091C50420914B0330914C03C6 |
:10581000821B930B9F938F9384E696E0ECC21092C9 |
:10582000720383E796E09F938F931F930F93FE017C |
:10583000099584E1809372030F900F900F900F9061 |
:105840008091BE049091BF049F938F9380914703F2 |
:10585000909148039F938F9380E896E09F938F9356 |
:105860001F930F93E091C905F091CA05099588E24D |
:10587000809372034DB75EB7485F5F4F4DBF809115 |
:10588000BC049091BD049F938F93809149039091A4 |
:105890004A039F938F938FE896E09F938F931F9374 |
:1058A0000F93E091C905F091CA0509958CE38093A7 |
:1058B00072038DB79EB708968DBF8091B804909102 |
:1058C000B9049F938F9380914503909146039F93D2 |
:1058D0008F938EE996E09F938F931F930F93E091A0 |
:1058E000C905F091CA050995EDB7FEB7389679C09C |
:1058F0001092720380912601909127016AE070E076 |
:105900000E94B2AC9F938F938091260190912701C2 |
:105910006AE070E00E94B2AC7F936F938DEA96E0EC |
:105920009F938F931F930F93FE01099584E18093BA |
:1059300072032DB73EB7285F3F4F2DBF8091B10B4B |
:105940009091B20B6AE070E00E949EAC9F938F939F |
:105950008091B10B9091B20B6AE070E00E949EAC16 |
:105960007F936F9381EC96E09F938F931F930F9398 |
:10597000E091C905F091CA05099588E28093720308 |
:105980004DB75EB7485F5F4F4DBF8091B30B9091AD |
:10599000B40B9F938F9385ED96E09F938F931F9306 |
:1059A0000F93E091C905F091CA0509958CE38093A6 |
:1059B00072038DB79EB706968DBF8091B50B9091FF |
:1059C000B60B9F938F9385EE96E09F938F931F93D3 |
:1059D0000F93E091C905F091CA050995EDB7FEB79F |
:1059E0003696EDBF86C41092720387EF96E09F93C0 |
:1059F0008F931F930F93FE01099588E280937203A2 |
:105A00000F900F900F900F908091580499279F93BB |
:105A10008F9380E097E09F938F931F930F93E09174 |
:105A2000C905F091CA0509958CE3809372032DB7DF |
:105A30003EB72A5F3F4F2DBF80913C0A99270197BF |
:105A40009F938F9380E197E071C11092720380E27F |
:105A500097E09F938F931F930F93FE01099584E125 |
:105A6000809372030F900F900F900F90809102011E |
:105A70006AE00E9492AC892F99279F938F9380911F |
:105A800002010E9492AC99279F938F9380E397E045 |
:105A90009F938F931F930F93E091C905F091CA05CF |
:105AA000099588E2809372038DB79EB708968DBFE3 |
:105AB0008091F9026AE00E9492AC892F99279F9306 |
:105AC0008F938091F9020E9492AC99279F938F93B4 |
:105AD0008EE397E09F938F931F930F93E091C905F7 |
:105AE000F091CA0509958CE380937203EDB7FEB778 |
:105AF0003896EDBF8091FA026AE00E9492AC892F3D |
:105B000099279F938F938091FA020E9492AC9927D4 |
:105B10009F938F938CE497E09F938F931F930F93A2 |
:105B20006EC159E5C52E54E0D52E20E030E0E901E4 |
:105B300043E0F42EC0937203F60181916F0199271F |
:105B40009F938F9389010F5F1F4F1F930F938AE5D8 |
:105B500097E09F938F938CEE97E29F938F93E091C2 |
:105B6000C905F091CA0509952DB73EB7285F3F4F8B |
:105B70002DBFFA9464969801F7FEDCCFBAC39DE579 |
:105B8000C92E94E0D92EC0E0D0E08E0183E0F82E3B |
:105B900000937203F60181916F0199279F938F9370 |
:105BA0002596DF93CF9387E697E09F938F938CEEB4 |
:105BB00097E29F938F93E091C905F091CA050995EB |
:105BC0002DB73EB7285F3F4F2DBFFA940C5E1F4F95 |
:105BD0002497F7FEDDCF8DC31092720384E797E020 |
:105BE0009F938F931F930F93FE01099584E18093F8 |
:105BF00072030F900F900F900F908091F50290918B |
:105C0000F6029F938F9382E897E09F938F931F9361 |
:105C10000F93E091C905F091CA05099588E2809338 |
:105C200072034DB75EB74A5F5F4F4DBF8091F70279 |
:105C30009091F8029F938F938FE897E09F938F93B3 |
:105C40001F930F93E091C905F091CA05099589E466 |
:105C5000809372038DB79EB706968DBF8CE997E04F |
:105C60009F938F931F930F93E091C905F091CA05FD |
:105C70000995809170030F900F900F900F9083FF04 |
:105C800038C31092F8021092F70260E070E08EE0E4 |
:105C900090E00E94B0332DC31092720384EA97E023 |
:105CA0009F938F931F930F93FE01099584E1809337 |
:105CB00072030F900F900F900F908091920190912E |
:105CC00093019F938F938CEA97E09F938F931F93F9 |
:105CD0000F93E091C905F091CA05099588E2809378 |
:105CE0007203EDB7FEB73696EDBF8091D70A90915B |
:105CF000D80A9F938F938AEB97E09F938F931F937C |
:105D00000F93E091C905F091CA0509958CE3809342 |
:105D100072032DB73EB72A5F3F4F2DBF8091230BF3 |
:105D20009091240B9F938F9388EC97E09F938F9390 |
:105D30001F930F93E091C905F091CA0509954DB7DE |
:105D40005EB74A5F5F4F4DBFD4C21092720386EDBB |
:105D500097E09F938F93BCEEEB2EB7E2FB2E1F9341 |
:105D60000F93FE01099584E1809372030F900F90C9 |
:105D70000F900F908091710199279F938F938EEDD3 |
:105D800097E09F938F931F930F93E091C905F09134 |
:105D9000CA05099588E2809372038DB79EB706966F |
:105DA0008DBF809121039091220397FD03969595D5 |
:105DB0008795959587959F938F938CEE97E09F930A |
:105DC0008F93FF92EF92E091C905F091CA05099572 |
:105DD0008CE380937203EDB7FEB73696EDBF8091EA |
:105DE0009D0899279F938F9380919C0899279F9353 |
:105DF0008F938AEF97E09F938F93FF92EF92E091BA |
:105E0000C905F091CA0509952DB73EB7285F3F4FE8 |
:105E10002DBF6FC21092720388E098E09F938F931A |
:105E2000FCEECF2EF7E2DF2E1F930F93FE010995B4 |
:105E30000F900F900F900F90C8E8D9E000E010E0AD |
:105E4000E2E0FE2E802F8C5E8093720388A9992752 |
:105E50008F7790709F938F9389A199278F779070F8 |
:105E60009F938F938A8999278F7790709F938F93B1 |
:105E70008B8199278F7790709F938F9388E198E01B |
:105E80009F938F93DF92CF92E091C905F091CA055D |
:105E900009954DB75EB7445F5F4F4DBFFA940C5EF6 |
:105EA0001F4FEC96F7FECECF24C21092720389E208 |
:105EB00098E09F938F937CEEC72E77E2D72E1F93A7 |
:105EC0000F93FE0109950F900F900F900F90C8E867 |
:105ED000D9E000E010E062E0F62E802F8C5E809327 |
:105EE00072038CA9992787FD90959F938F938DA11D |
:105EF000992787FD90959F938F938E89992787FD8A |
:105F000090959F938F938F81992787FD90959F936D |
:105F10008F9388E398E09F938F93DF92CF92E091E5 |
:105F2000C905F091CA0509958DB79EB70C968DBF2E |
:105F3000FA940C5E1F4FEC96F7FECFCFDAC11092A9 |
:105F4000720389E498E09F938F935CEEC52E57E22D |
:105F5000D52E1F930F93FE01099587E4809372035A |
:105F60000F900F900F900F9084E598E09F938F9380 |
:105F70001F930F93E091C905F091CA050995FF247D |
:105F80000F900F900F900F90C0E0D0E08E01802F07 |
:105F90008C5E809372038C2F8D5F0E94E8839F93A9 |
:105FA0008F938C2F8E5F0E94E8839F938F938C2F0B |
:105FB0008F5F0E94E8839F938F938C2F0E94E883CA |
:105FC0009F938F938EE598E09F938F93DF92CF926C |
:105FD000E091C905F091CA0509959E012C5F3F4FDC |
:105FE00080916C089927EDB7FEB73C96EDBF281756 |
:105FF00039070CF07EC1F3940C5E1F4FE901F2E00B |
:10600000FF1528F676C1109272038FE698E09F93F1 |
:106010008F934CEEE42E47E2F42E1F930F93FE0174 |
:10602000099584E1809372030F900F900F900F9069 |
:106030008091B809881F8827881F97E0899FC00131 |
:1060400011248D969F938F938091A909881F88278B |
:10605000881F96E0899FC00111248D969F938F938E |
:1060600080919A09881F8827881F95E0899FC00121 |
:1060700011248D969F938F9380918B09881F882779 |
:10608000881F9927880F991F880F991F8D969F93B6 |
:106090008F938EE798E09F938F931F930F93E091D8 |
:1060A000C905F091CA05099588E2809372032DB75E |
:1060B0003EB7245F3F4F2DBF8091F409881F88278A |
:1060C000881F9BE0899FC00111248D969F938F9319 |
:1060D0008091E509881F8827881F9AE0899FC00161 |
:1060E00011248D969F938F938091D609881F8827BE |
:1060F000881F99E0899FC00111248D969F938F93EB |
:106100008091C709881F8827881F992723E0880F57 |
:10611000991F2A95E1F78D969F938F9382E998E0D6 |
:106120009F938F931F930F93E091C905F091CA0538 |
:1061300009958CE3809372034DB75EB7445F5F4F60 |
:106140004DBF8091030A881F8827881F9CE0899F84 |
:10615000C00111248D969F938F9386EA98E09F93B8 |
:106160008F931F930F93E091C905F091CA0509958C |
:106170008091120AEDB7FEB73696EDBF87FF12C0C9 |
:1061800080E48093720387EB98E09F938F931F9333 |
:106190000F93E091C905F091CA0509950F900F90F2 |
:1061A0000F900F908091210A87FF12C084E48093A2 |
:1061B00072038AEB98E09F938F93FF92EF92E091A6 |
:1061C000C905F091CA0509950F900F900F900F9097 |
:1061D0008091300A87FF8DC088E4809372038DEB35 |
:1061E00098E09F938F93FF92EF92E091C905F09111 |
:1061F000CA0509950F900F900F900F907AC01092DA |
:10620000720380EC98E09F938F939CEEA92E97E207 |
:10621000B92E1F930F93FE010995FF240F900F9045 |
:106220000F900F9084E0C82ED12CC8E8D9E000E090 |
:1062300010E0802F8C5E809372038AAD992787FDD2 |
:1062400090959F938F9389AD992787FD90959F9304 |
:106250008F938BA5992787FD90959F938F938AA500 |
:10626000992787FD90959F938F938C8D992787FD14 |
:1062700090959F938F938B8D992787FD90959F93F2 |
:106280008F938D85992787FD90959F938F938C850C |
:10629000992787FD90959F938F938CEC98E09F931F |
:1062A0008F93BF92AF92E091C905F091CA0509950D |
:1062B00080916C0899272DB73EB72C5E3F4F2DBFBC |
:1062C000C816D906B4F4F3940C5E1F4FEC9644E064 |
:1062D00050E0C40ED51E52E05F1508F0AACF09C0E9 |
:1062E00080912801281719F4215020932801109239 |
:1062F000710310927003EAE0CDB7DEB70C9426ADBF |
:10630000F999FECF92BD81BDF89A80B5992708957D |
:10631000F999FECF1FBA92BD81BD60BD0FB6F8944A |
:10632000FA9AF99A0FBE08954AEA20E030E026175B |
:10633000370740F4FC018191480F2F5F3F4F26172C |
:106340003707C8F3842F99270895EAEA40E050E020 |
:106350004617570778F49C01F999FECF32BD21BD4D |
:10636000F89A80B5E80F4F5F5F4F2F5F3F4F46179A |
:10637000570790F38E2F9927089581E08093700836 |
:1063800082E080936F0883E080936E0884E08093BE |
:10639000710885E08093720886E08093730887E037 |
:1063A0008093740888E08093750889E0809376086C |
:1063B0008AE0809377088BE0809378088CE0809364 |
:1063C0007908089586E680936D088CE0E9EEF8E0A0 |
:1063D00011928A95E9F78AE080938D081092B108AE |
:1063E0008BE1809389088EE48093AE088093AF0898 |
:1063F00080E28093B0081092E5088AE680937A08DC |
:1064000082E78093E70880E58093E80886E0809340 |
:1064100094081092D2081092CF0838E03093870881 |
:1064200086EE8093880880E480938A0885E08093D4 |
:106430007D082EE120937B0890911704992399F011 |
:1064400084E180937E0888E280937C082093800812 |
:1064500081E080938108109282088FE780938308FF |
:106460002093D50810C08FE080937E0820937C088D |
:10647000909380083093810884E180938208909300 |
:1064800083089093D5088FE080937F081092DE08F0 |
:106490008CE08093DF081092960810929708109273 |
:1064A0009808109299081092B3081092B4081092AC |
:1064B000B5081092B60890E890939A0842E340938A |
:1064C0009B08E2E0E093E60888E180939C0886EE72 |
:1064D00080939D0883E08093A2085DE75093A50810 |
:1064E0005093A6085093A70890939E0875E5709363 |
:1064F0009F0866E46093A0088CED8093A1088CE36C |
:106500008093A3081092A4089AEA9093B7088CECA1 |
:106510008093B9081092BB089093BC0898E29093BE |
:10652000B8089093BA081092BD081092E3084093FF |
:10653000E4084093A8082AE52093A9084093AA08F4 |
:1065400036E03093BE0884E68093BF088093C0088D |
:106550002093C10888E78093C2089093C6088BE413 |
:106560008093C3087093C4088093C5083093C7080C |
:1065700088E08093C8084093C9088AE28093CA08DB |
:106580001092CB081092CE089CE89093CC08E09330 |
:10659000CD081092D0081092D10881E4809392081F |
:1065A000209393081092D3081092D40886E9809320 |
:1065B000D6085093AB0884E38093AC081092D708B8 |
:1065C0001092D8081092D9089093DA086093DB08EB |
:1065D0009093DC086093DD081092E00880E28093DD |
:1065E00091088FE18093E2088EE18093E10808959D |
:1065F0000E94E2318AE08093840880E180938508DC |
:1066000026E0209386089AE590938B0888E780938C |
:106610008C0890938E0880938F082093900880E2D6 |
:10662000809395088CE38093AD088BE48093B20847 |
:1066300086E491E6A3E7B4E78093E9089093EA083B |
:10664000A093EB08B093EC0868E870E08DE698E062 |
:106650000E9494318093F5080895CF93DF930E94B0 |
:10666000E23188E08093840830E13093850826E0A9 |
:106670002093860894E690938B0888E780938C0893 |
:1066800090938E0880938F082093900830939508FC |
:1066900086E48093AD088093B208A9EEB8E085E067 |
:1066A000E9E2F1E0ED01019009928A95E1F768E8ED |
:1066B00070E0CD018C5790400E9494318093F50892 |
:1066C000DF91CF9108950E94E23126E02093840863 |
:1066D0008AE08093850884E08093860894E690930E |
:1066E0008B0888E780938C0890938E0880938F089E |
:1066F0002093900880E18093950886E48093AD080C |
:106700008093B20885E491E6A3E7B9E78093E908AE |
:106710009093EA08A093EB08B093EC0868E870E067 |
:106720008DE698E00E9494318093F5080895F999D8 |
:10673000FECF92BD81BDF89A80B599270895F99949 |
:10674000FECF1FBA92BD81BD60BD0FB6F894FA9A14 |
:10675000F99A0FBE089560E871E30E9401AB0895B5 |
:1067600048E851E30E943BAB0895EF92FF920F93EC |
:106770001F93CF93C82F8150853008F0C3E089E87C |
:10678000C89F800111248BEDE82E8FEFF82EE00ECC |
:10679000F11E68E870E0C7010E94A531682F9801DA |
:1067A0002D593F4F8FB39927AC014270507081FD36 |
:1067B000F9CF32BD21BDF89A80B5861711F0CA0114 |
:1067C00023C08FB399279C012270307081FDF9CFCF |
:1067D000F2BCE1BCF89A80B5863611F0C90114C04C |
:1067E00089E8C89FC0011124859720E831E349E872 |
:1067F00050E0BC018DE698E00E94DCAA0E94FB7884 |
:106800000E9462A481E090E0CF911F910F91FF90D0 |
:10681000EF900895282F863010F025E003C08823DC |
:1068200009F421E020930101F999FECF1FBA82E01B |
:1068300090E092BD81BD20BD0FB6F894FA9AF99A06 |
:106840000FBE0895CF93C82F80916D08863609F04A |
:1068500051C0C63010F0C5E003C0CC2309F44AC0D3 |
:106860000E942CA98091E80882FF07C080919208BD |
:10687000843618F080E58093920868E870E08DE631 |
:1068800098E00E9494318093F50889E8C89FC00180 |
:10689000112428E831E349E850E06DE678E0859777 |
:1068A0000E9419AB28E831E34CE050E06EE678E056 |
:1068B00080E590E00E9419AB6CE070E08EE698E015 |
:1068C0000E949431282FF999FECF1FBA8CE590E0F1 |
:1068D00092BD81BD20BD0FB6F894FA9AF99A0FBE09 |
:1068E0008C2F0E940A340E94FB780E9462A481E0EF |
:1068F00090E002C080E090E0CF9108956DE470E0F8 |
:1069000088EE93E00E94A531482F8FB399279C0110 |
:106910002270307081FDF9CF85E394E092BD81BD96 |
:10692000F89A80B5841779F48FB399279C01227067 |
:10693000307081FDF9CF88EE93E092BD81BDF89A69 |
:1069400080B5813011F0C901089520E831E34EE4AB |
:1069500050E068EE73E086EF98E00E94DCAA81E0E8 |
:1069600090E008958091F6088130A9F46DE470E01C |
:1069700086EF98E00E9494318093430928E831E340 |
:106980004EE450E066EF78E088EE93E00E9419ABA9 |
:1069900081E090E0089580E090E00895CF93DF9348 |
:1069A00081E08093F608E6EFF8E08FE01586168622 |
:1069B0001786108A8150349687FFF8CF80E4809341 |
:1069C00003098093040910920509809306098093B6 |
:1069D000070990EC909308091092090980930A091D |
:1069E00080930B0910920C0990930D0990930E0956 |
:1069F00080930F0910921009809311099093120946 |
:106A0000A7EFB8E08CE0EFE2F1E0ED010190099230 |
:106A10008A95E1F76DE470E0CD0101970E94943111 |
:106A200080934309DF91CF910895F999FECF82E0D9 |
:106A300090E092BD81BDF89A80B5282F863078F01D |
:106A400023E0322FF999FECF1FBA82E090E092BD89 |
:106A500081BD30BD0FB6F894FA9AF99A0FBE209313 |
:106A60000101822F992708951F93CF93C82F162FC6 |
:106A7000863010F0C5E003C0882309F4C1E08C2FF4 |
:106A800099278230910541F08330910544F40197B4 |
:106A900031F40E94F83205C00E942D3302C00E94DA |
:106AA00063331123E1F06CE070E080E590E00E9438 |
:106AB000A531282FF999FECF8CE590E092BD81BDDC |
:106AC000F89A80B5821759F420E831E34CE050E0A1 |
:106AD00060E570E08EE698E00E94DCAA02C00E94A9 |
:106AE000BD318C2F0E942234CF911F910895DF92E7 |
:106AF000EF92FF920F931F93CF93FF24DF2CEF2C85 |
:106B000081E190E00E94973390910301981791F1F1 |
:106B1000963169F481E190E00E949733853139F430 |
:106B20004C9905C06F2D81E090E00E949F336091E9 |
:106B3000030181E190E00E949F3388E190E028E02A |
:106B40000FB6F894A895809360000FBE2093600064 |
:106B500080EF98E09F938F938FE999E19F938F93B4 |
:106B6000E091C905F091CA0509950F900F900F901B |
:106B70000F90FFCF81E090E00E949733863611F0AE |
:106B800031E0E32E6CE070E080E590E00E94A531FA |
:106B9000C82FF999FECF8CE590E092BD81BDF89A9F |
:106BA00080B58C1711F421E0D22EC1E001E010E095 |
:106BB000EE2029F48C2F0E94B5338823B9F591E09B |
:106BC000F92E1F930F9388E199E09F938F938FE99C |
:106BD00099E19F938F93E091C905F091CA050995BA |
:106BE0002DB73EB72A5F3F4F2DBF0130110521F071 |
:106BF0000230110521F006C00E94F83205C00E9443 |
:106C00002D3302C00E946333DD2059F020E831E3C8 |
:106C10004CE050E060E570E08EE698E00E94DCAA6F |
:106C200002C00E94BD318C2F0E942234CF5F0F5FC3 |
:106C30001F4FC63008F4BCCFFF2019F083E00E943C |
:106C40000A340E941535C82F0E94B5338C2F99271E |
:106C50009F938F938EE399E09F938F930FE919E1B0 |
:106C60001F930F93E091C905F091CA05099581E042 |
:106C700090E00E9497332DB73EB72A5F3F4F2DBF5C |
:106C80008F3F21F00E947E34882399F487E599E0B4 |
:106C90009F938F931F930F93E091C905F091CA05BD |
:106CA00009950E94CE340E94B2340F900F900F903D |
:106CB0000F90EE2029F066E681E090E00E949F337D |
:106CC00010926C0890E0E3E0F9E0CFE08081349628 |
:106CD00018160CF49F5FC150C7FFF8CF90936C0853 |
:106CE000892F99279F938F9387EF98E09F938F9396 |
:106CF00088E799E09F938F931F930F93E091C905C5 |
:106D0000F091CA0509950E947B0C8DB79EB7089635 |
:106D10008DBFCF911F910F91FF90EF90DF9008955D |
:106D2000982F2FB7F8943998389A88B1836088B92A |
:106D30008091B9008C7F8093B9008AE28093B8007B |
:106D400010927D0310927B0310927A039923B1F085 |
:106D5000E8E8F9E08BE0108211821282138214823B |
:106D60001582168217821686108611861286138661 |
:106D70001486158681503F9687FFEDCF78942FBFFC |
:106D8000089510927D0384E98093BC0080E880938D |
:106D9000BC001092BD001092BA001092BB0010927D |
:106DA000B9001092B8001092790380E00E949036EA |
:106DB0001092BB0085E88093BC00809177038260CD |
:106DC0008093770308951F920F920FB60F921124AC |
:106DD0002F933F936F937F938F939F93EF93FF93A3 |
:106DE00080917D03282F33278F5F80937D0323308D |
:106DF000310509F41CC1243031055CF42130310522 |
:106E000009F454C0223031050CF099C0232B71F0E5 |
:106E100031C32530310509F470C1253031050CF43A |
:106E20001EC12630310509F434C224C381E08093A9 |
:106E3000790309C080917B038C3090F480917B03AF |
:106E40008F5F80937B0380917B03E82FFF27EE0FFA |
:106E5000FF1FEE0FFF1FEA50F74F8585181654F7F6 |
:106E600080917B036CE00E9492AC90937B038091B5 |
:106E700083038F5F8093830390913E01981770F492 |
:106E800010928303109276031092750385E080932D |
:106E90007D0380917A03880F8D5A04C080917B0313 |
:106EA000880F8E5A8093BB0085E824C180917B03B4 |
:106EB0009927FC0124E0EE0FFF1F2A95E1F7E81B5C |
:106EC000F90BE857F64F81818093BB0085E88093EA |
:106ED000BC0080917B039927FC01E295F295F07F3D |
:106EE000FE27E07FFE27E81BF90BE857F64F80816D |
:106EF00080FF9BC080917B039927FC01E295F2956E |
:106F0000F07FFE27E07FFE27E81BF90BE857F64FDE |
:106F10008281882329F080916C08873008F4C0C2F0 |
:106F20008091750390917603892B09F0B9C2809105 |
:106F3000730390917403892B09F0B2C276C08091DB |
:106F40007B0321E030E002C0220F331F8A95E2F775 |
:106F5000809173039091740328233923232B81F0AC |
:106F600080917B039927FC0174E0EE0FFF1F7A9557 |
:106F7000E1F7E81BF90BE857F64F80E184830EC078 |
:106F800080917B039927FC0164E0EE0FFF1F6A9557 |
:106F9000E1F7E81BF90BE857F64F148280917B0369 |
:106FA0009927FC01E295F295F07FFE27E07FFE270E |
:106FB000E81BF90BE857F64F8481282F3327220F5F |
:106FC000331F220F331F220F331F80917B0399271A |
:106FD000FC0134E0EE0FFF1F3A95E1F7E81BF90BD7 |
:106FE000E857F64F82818770822B8093BB0085E83B |
:106FF0008093BC0020917B0381E090E002C0880F69 |
:10700000991F2A95E2F72091750330917603822328 |
:107010009323892B51F080E899E09093810380932A |
:10702000800388E0809382033BC284E020C2E09129 |
:107030008003F091810381918093BB0085E8809368 |
:10704000BC00F0938103E093800380918203815020 |
:1070500080938203882309F423C283E008C28091CD |
:10706000B900803379F580917E03882329F48091DB |
:107070007B038F5F80937E0380917B039927FC01C4 |
:10708000E295F295F07FFE27E07FFE27E81BF90BE3 |
:10709000E857F64F838199278F7790708F37910546 |
:1070A0008CF480917B039927FC01E295F295F07FA7 |
:1070B000FE27E07FFE27E81BF90BE857F64F838198 |
:1070C0008F5F838310927D0384E98093BC008AE004 |
:1070D00090E090933D0180933C0180917B038F5F12 |
:1070E00080937B0310927D03809177038E7F809342 |
:1070F000770385EA8093BC00D3C18091B9008034C6 |
:10710000D1F180917A039927FC0174E0EE0FFF1F03 |
:107110007A95E1F7E81BF90BE857F64F83818F77F3 |
:10712000838380917A038F5F80937A0380917A03BF |
:107130008C30A0F010927A031092740310927303B3 |
:1071400080917F038F5F80937F038C3038F01092A3 |
:107150007F03809177038D7F8093770380917703FE |
:1071600081608093770310927D0384E98093BC0053 |
:107170001092790387C080917A039927FC0164E01B |
:10718000EE0FFF1F6A95E1F7E81BF90BE857F64F82 |
:1071900083818068838380917A039927FC01E2953B |
:1071A000F295F07FFE27E07FFE27E81BF90BE857FA |
:1071B000F64F808180FF42C080917A039927FC01BD |
:1071C000E295F295F07FFE27E07FFE27E81BF90BA2 |
:1071D000E857F64F848199270097D9F0409709F036 |
:1071E00048C080E899E0909381038093800388E011 |
:1071F0008093820380917A039927FC0134E0EE0F9B |
:10720000FF1F3A95E1F7E81BF90BE857F64F148298 |
:1072100030C090917A038FE0989FC001112483576A |
:10722000964F909381038093800390917A0380918D |
:107230007F039817D9F480913F0119C090917A0388 |
:107240008FE0989FC00111248357964F909381033C |
:10725000809380038091770381FD06C090917A032B |
:1072600080917F03981711F482E001C081E0809340 |
:10727000820380918203813011F485E801C085EC9E |
:107280008093BC0080917E038093780310927E03EC |
:1072900007C1E0918003F09181038091BB0080835E |
:1072A0008091800390918103019690938103809354 |
:1072B000800380918203815080938203823010F09A |
:1072C00085ECD2C0813011F485E8CEC0809177037F |
:1072D00081FF7BC080911F0480FD77C080917A037D |
:1072E0009927FC0124E0EE0FFF1F2A95E1F7E81B28 |
:1072F000F90BE857F64F868199278C7F9070883F6D |
:10730000910591F480917A039927FC01E295F29519 |
:10731000F07FFE27E07FFE27E81BF90BE857F64FCA |
:107320008081816080830FC080917A039927FC015E |
:10733000E295F295F07FFE27E07FFE27E81BF90B30 |
:10734000E857F64F108280917A039927FC0174E088 |
:10735000EE0FFF1F7A95E1F7E81BF90BE857F64FA0 |
:107360008681883F81F480917A039927FC0164E04B |
:10737000EE0FFF1F6A95E1F7E81BF90BE857F64F90 |
:107380008081866021C080917A039927FC01E29573 |
:10739000F295F07FFE27E07FFE27E81BF90BE85708 |
:1073A000F64F8681893F89F480917A039927FC0101 |
:1073B000E295F295F07FFE27E07FFE27E81BF90BB0 |
:1073C000E857F64F80818460808380911F0481FF9D |
:1073D00023C080917A039927FC0134E0EE0FFF1F50 |
:1073E0003A95E1F7E81BF90BE857F64F86818E3F97 |
:1073F00098F480917A039927FC0124E0EE0FFF1F97 |
:107400002A95E1F7E81BF90BE857F64F86858F5F61 |
:10741000868789E08093B20180917A038F5F8093A1 |
:107420007A0380917A038C30A0F010927A03109244 |
:1074300074031092730380917F038F5F80937F03A7 |
:107440008C3038F010927F03809177038D7F80938A |
:10745000770310927D0384E98093BC0080917703C9 |
:107460008160809377031AC08093BC0086E080938C |
:107470007D0316C010927D0384E98093BC00809147 |
:1074800077038160809377038AE090E090933D01D9 |
:1074900080933C0110927B0310927A03109279033F |
:1074A000FF91EF919F918F917F916F913F912F91DC |
:1074B0000F900FBE0F901F9018950F931F93CF93AF |
:1074C000DF93182F80915704882321F480910603BD |
:1074D000882319F081E090E091C01D3008F08CC045 |
:1074E0001123C9F0812F9927FC0144E0EE0FFF1F03 |
:1074F0004A95E1F7E81BF90BE857F64F3C97808176 |
:107500003C9688230CF078C03F97808180FD03C0B3 |
:1075100083E090E073C08091800999278B70907010 |
:10752000029719F084E090E069C067E070E080E8BD |
:1075300099E00E94943190918709891719F085E0AC |
:1075400090E05CC000913E018CE080933E0184E6B7 |
:1075500090E090933D0180933C010E94A81DEC01B6 |
:107560008091770380FD05C0CE010E94B11D882364 |
:10757000B9F3112319F48FEF9FE00BC0212F3327AC |
:107580002150304081E090E002C0880F991F2A9579 |
:10759000E2F7909376038093750310927B03109229 |
:1075A0007A0388EE93E00E94A81DEC0110927D03FF |
:1075B000809177038E7F8093770385EA8093BC0068 |
:1075C0008091770380FD05C0CE010E94B11D882304 |
:1075D000B9F38091750390917603892B29F0CE0140 |
:1075E0000E94B11D882311F300933E018091750321 |
:1075F00090917603009711F082E090E0DF91CF91B7 |
:107600001F910F9108950F931F93CF93DF93982F9E |
:1076100080915704882321F480910603882319F070 |
:1076200081E090E07BC09D30B0F4992319F486E0AE |
:1076300090E074C0C92FDD27FE0154E0EE0FFF1F5C |
:107640005A95E1F7EC1BFD0BE857F64F3C9780810C |
:107650003C9687FD03C082E090E060C03F97808148 |
:1076600080FD03C083E090E059C088EE93E00E9463 |
:10767000A81D8C018091770380FD05C0C8010E9480 |
:10768000B11D8823B9F3219781E090E002C0880FF3 |
:10769000991FCA95E2F79093740380937303109235 |
:1076A0007B0310927A03109280091092870910923E |
:1076B0007D03809177038E7F8093770385EA8093A3 |
:1076C000BC008091770380FD05C0C8010E94B11DF8 |
:1076D0008823B9F38091730390917403892B29F067 |
:1076E000C8010E94B11D882311F380918009992758 |
:1076F0008B709070029719F084E090E00FC067E003 |
:1077000070E080E899E00E94943190918709891790 |
:1077100019F085E090E002C080E090E0DF91CF9129 |
:107720001F910F910895CF93DF9380E021E83FEF01 |
:10773000C3E8DAE0EDE3FAE0DF01853020F41196EA |
:107740001C921E9202C031832083198218822296D5 |
:107750008F5F12963296833280F38FE790E090939A |
:107760007C0A80937B0A81E89FEF90937A0A80934A |
:10777000790A10927E0A10927D0A1092C504109226 |
:10778000C4041092C7041092C6041092C904109247 |
:10779000C804DF91CF9108951F920F920FB60F92F8 |
:1077A00011240F931F932F933F934F935F936F93E6 |
:1077B0007F938F939F93AF93BF93CF93DF93EF9379 |
:1077C000FF938091E70882FDC2C0409186005091EE |
:1077D00087008091850390918603481B590B809107 |
:1077E0008600909187009093860380938503CA0159 |
:1077F0008D549440A0918703B0918803835F9A4190 |
:1078000058F48091870380933C0A149714F01092E7 |
:10781000420181E090E096C0A131B1050CF0DFC1DA |
:10782000CA018B5F9040845B914008F086C08091D4 |
:10783000400190914101481B590BE091D708EE237C |
:1078400051F0FF27EE0FFF1FE35CF54F8081918120 |
:1078500084369105ECF4FD01EA0FFB1FE35CF54F64 |
:1078600080819181FA01E81BF90BCF01F7FF03C07A |
:10787000909581959F4F06975CF480915804883CC1 |
:1078800020F480915804865F01C088EC80935804EE |
:10789000FD01EA0FFB1FE35CF54F808191819C01A4 |
:1078A000220F331F280F391F240F351F37FF02C047 |
:1078B0002D5F3F4FE901D595C795D595C795CA016D |
:1078C00001968C179D0714F4219706C04150504033 |
:1078D000C417D5070CF4219680915804833CE0F03E |
:1078E0008D010A0F1B1FF801E35CF54F8081918128 |
:1078F0009E01281B390BC90163E070E00E94B2AC05 |
:10790000CB01880F991F860F971F0D57154FD80170 |
:1079100011969C938E9307C0AA0FBB1FAD57B54F0E |
:1079200011961C921E92E0918703F0918803EE0F4E |
:10793000FF1FE35CF54FD183C08380918703909153 |
:1079400088030196909388038093870348C14091F0 |
:107950008600509187008091890390918A03481B8B |
:10796000590B809186009091870090938A038093B1 |
:107970008903CA018D54944060911304835F9A4136 |
:1079800008F072C06093840380918403843008F40B |
:1079900053C090913C0A80918403981709F04CC021 |
:1079A000509114045B3008F43FC0109242011092D1 |
:1079B000130440E05F31C0F0E42FFF27EE0FFF1FFC |
:1079C0009F0121533C4FDF01A35CB54F8D919C91EA |
:1079D000D9018D939C93DF01AD57B54F8D919C914B |
:1079E000EF50FC4F91838083E42FFF27EE0FFF1FA2 |
:1079F0009F01235C354FDF01A557BC4F8D919C91B2 |
:107A0000D90111969C938E93DF01A355BC4F8D91A4 |
:107A10009C91ED57F54F91838083842F8F5F482F82 |
:107A2000813140F280931304809114048F3F79F0E8 |
:107A30008F5F809314040BC080911404853620F06E |
:107A40008AE08093140402C010921404289A81E002 |
:107A50008093130480915704882309F0C0C080915B |
:107A6000840380933C0ABBC0613108F098C0CA010E |
:107A70008B5F9040845B914008F090C08091400102 |
:107A800090914101481B590BE62FFF27EE0FFF1F76 |
:107A9000E557FC4F80819181FA01E81BF90BCF017A |
:107AA00005960B9720F5E091D708EE2351F0FF27BC |
:107AB000EE0FFF1FE35CF54F8081918184369105C5 |
:107AC000B4F4809114048A3120F080915804865FC8 |
:107AD00005C08B3028F0809158048E5F8093580445 |
:107AE00080915804893C18F088EC80935804E62F64 |
:107AF000FF27EE0FFF1FE557FC4F808191819C010E |
:107B0000220F331F280F391F240F351F37FF02C0E4 |
:107B10002D5F3F4FE901D595C795D595C795CA010A |
:107B200001968C179D0714F4219706C041505040D0 |
:107B3000C417D5070CF42196809158048E3BD8F0D9 |
:107B4000E62FFF27EE0FFF1FDF01A557BC4F8D91DA |
:107B50009C919E01281B390BC90163E070E00E94D3 |
:107B6000B2ACCB01880F991F860F971FE355FC4FCE |
:107B70009183808308C0E62FFF27EE0FFF1FE35598 |
:107B8000FC4F1182108280911304E82FFF27EE0F23 |
:107B9000FF1FE557FC4FD183C08301C0289A809115 |
:107BA0001304843120F48F5F8093130418C0843150 |
:107BB000B1F4289A8EE18093130420E1C3E8DAE05F |
:107BC000AFECB3E0EDE3FAE08D919D91918380837A |
:107BD0003296198218822296215027FFF5CFFF9105 |
:107BE000EF91DF91CF91BF91AF919F918F917F9155 |
:107BF0006F915F914F913F912F911F910F910F9036 |
:107C00000FBE0F901F90189580914A0B90914B0BCF |
:107C10009093C9078093C80780914C0B90914D0BAE |
:107C20009093CB078093CA0780911E0B90911F0BF6 |
:107C300097FD039695958795959587959093CD0794 |
:107C40008093CC078091300B9091310B97FD039678 |
:107C500095958795959587959093CF078093CE07B7 |
:107C60008091C4049091C50420914B0330914C0342 |
:107C7000821B930B9093D1078093D007809152047D |
:107C800090915304A0915404B0915504BC01CD01CE |
:107C90002AE030E040E050E00E94E7AC3093D307A8 |
:107CA0002093D20780910D0890910E089093D507EC |
:107CB0008093D40780919201909193019093D9077A |
:107CC0008093D80780912601909127019093DB073C |
:107CD0008093DA078091580499279093DD07809369 |
:107CE000DC078091D70A9091D80A9093DF078093A0 |
:107CF000DE078091890999279093E1078093E00737 |
:107D00008091980999279093E3078093E2078091E7 |
:107D1000A70999279093E5078093E4078091B60916 |
:107D200099279093E7078093E6078091210390912C |
:107D300022039093F1078093F00780913C04909187 |
:107D40003D049093F3078093F2078091B10B9091DB |
:107D5000B20B9093F5078093F4078091B50B909147 |
:107D6000B60B9093F7078093F60780914E0490919D |
:107D70004F04A0915004B0915104BC01CD012AE000 |
:107D800030E040E050E00E94E7AC3093F9072093E8 |
:107D9000F8078091B70B9927909303088093020806 |
:107DA00080912A0590912B059093050880930408F3 |
:107DB00080912805909129059093070880930608E3 |
:107DC0008091E205882321F48091E305882321F046 |
:107DD0008091C707816003C08091C7078E7F809321 |
:107DE000C7070895EF92FF921F93CF93DF93182F49 |
:107DF0007B0180915704882371F5809103018931BB |
:107E000011F4299801C0299A11501F3FE9F0F0920E |
:107E10002903E0922803E701809128039091290328 |
:107E2000892B11F4209781F380912C038823A1F3EF |
:107E300010922C038091280390912903892B09F437 |
:107E400021970E9442A9E8CF80910301893111F462 |
:107E5000299A01C02998DF91CF911F91FF90EF904F |
:107E60000895EF92FF920F931F9310927A008091E2 |
:107E70004F03909150039093E20A8093E10A80911E |
:107E80004D0390914E039093D30A8093D20A809130 |
:107E90004B0390914C039093260B8093250B2091DC |
:107EA000470330914803C901880F991F880F991F14 |
:107EB000820F931F820F931F90931F0B80931E0BB3 |
:107EC0002091490330914A03C901880F991F880FF7 |
:107ED000991F820F931F820F931F9093310B8093F2 |
:107EE000300B8FEC80937A008091AE089927AA27F7 |
:107EF000BB2744ECE42E49E0F42E012D112DBC01EA |
:107F0000CD01A80197010E9473ACDC01CB018093E5 |
:107F10008A0190938B01A0938C01B0938D01809185 |
:107F2000AF089927AA27BB27BC01CD010E9473ACDB |
:107F3000DC01CB018093860190938701A093880197 |
:107F4000B09389011F910F91FF90EF900895A0E0E9 |
:107F5000B0E0EDEAFFE30C9406AD782E91E0692ED7 |
:107F6000EE24FF2457014701E7011092E205F09249 |
:107F7000BF04E092BE04F092BD04E092BC04F09213 |
:107F8000B904E092B8041092B704F092C904E092E8 |
:107F9000C804F092C704E092C604F092C504E092CF |
:107FA000C40410926C0110926B01109240030E9465 |
:107FB000313F84E690E00E94CA1D0E94313FF0925A |
:107FC000E907E092E807F092EB07E092EA07809178 |
:107FD0007A0880FF14C080911C0190911D01875B7D |
:107FE000934058F480911C0190911D018E5E924047 |
:107FF00020F080914003882311F00E940B22009111 |
:108000001C0110911D0187B58B5F87BD87B58095D9 |
:1080100088BD8FE1C82E8AE090E00E94CA1D809141 |
:108020004B0390914C03E80EF91E80914F03909101 |
:108030005003A80EB91E80914D0390914E03880EF7 |
:10804000991E80910D0890910E08C80FD91FCA94EF |
:10805000C7FEE1CF80911C0190911D01825F93408A |
:1080600080F480911C0190911D01459750F0809102 |
:108070001C0190911D01081B190B1093170100930F |
:10808000160187B5855087BD87B5809588BD950158 |
:10809000205F3F4F36952795369527953093C90435 |
:1080A0002093C804C4014096969587959695879528 |
:1080B0009093C7048093C60440E150E0E40EF51E9F |
:1080C000B5E0F694E794BA95E1F7F092C504E09232 |
:1080D000C404C40FD51FA5E0D695C795AA95E1F7AE |
:1080E000D093B904C093B8049093C3048093C2049E |
:1080F0003093C1042093C00452E07516C9F58091F5 |
:108100001E0B90911F0B97FF03C0909581959F4F79 |
:108110006CE070E00E94B2AC9B017093BF0460936E |
:10812000BE048091300B9091310B97FF03C0909566 |
:1081300081959F4F6CE070E00E94B2AC7093BD04DB |
:108140006093BC04B90184E090E00E94B033609178 |
:10815000BC047091BD0486E090E00E94B033609151 |
:10816000B8047091B90488E090E00E94B0334FC029 |
:1081700084E090E00E94AB339093BF048093BE04F0 |
:1081800086E090E00E94AB339C019093BD04809305 |
:10819000BC048091BE049091BF048150984018F4B3 |
:1081A00021503840A0F189E999E09F938F938FE99E |
:1081B00099E19F938F93E091C905F091CA050995C4 |
:1081C00080911E0B90911F0B97FF03C09095819596 |
:1081D0009F4F6CE070E00E94B2AC7093BF0460935C |
:1081E000BE048091300B9091310B97FF03C09095A6 |
:1081F00081959F4F6CE070E00E94B2AC7093BD041B |
:108200006093BC0466240F900F900F900F9012BCE7 |
:1082100011BC1092E20A1092E10A1092D30A109255 |
:10822000D20A1092260B1092250B88EC90E00E9447 |
:10823000CA1D80914703909148039C01220F331F70 |
:10824000220F331F280F391F280F391F30931F0BA0 |
:1082500020931E0B8091490390914A038C01000FDB |
:10826000111F000F111F080F191F080F191F10935E |
:10827000310B0093300B80918908C82EDD24EE2449 |
:10828000FF24442737FD4095542FC701B6010E94B3 |
:1082900073AC4B015C016093B2047093B3048093A0 |
:1082A000B4049093B5049801442737FD4095542FAA |
:1082B000C701B6010E9473ACDC01CB018093AA0414 |
:1082C0009093AB04A093AC04B093AD04809292045D |
:1082D00090929304A0929404B092950480938A049F |
:1082E00090938B04A0938C04B0938D04109282041D |
:1082F00010928304109284041092850400919201DC |
:1083000010919301109371040093700484E690E03F |
:1083100090938F0180938E0182E390E090932903E4 |
:10832000809328038091AE089927AA27BB27BC0118 |
:10833000CD0124EC39E040E050E00E9473ACDC0158 |
:10834000CB018856954CAF4FBF4F80938A019093D5 |
:108350008B01A0938C01B0938D018091AF08992778 |
:10836000AA27BB27BC01CD010E9473ACDC01CB0165 |
:108370008856954CAF4FBF4F8093860190938701ED |
:10838000A0938801B093890110924901109248018D |
:10839000C801AA2797FDA095BA2F209144013091DA |
:1083A00045014091460150914701BC01CD010E9419 |
:1083B00073ACDC01CB0180932C0B90932D0BA0931D |
:1083C0002E0BB0932F0B10926D0410926C040E9430 |
:1083D000FB78772029F080911F04846080931F042C |
:1083E0008FEF8093AC0B1092AD0B80E28093AE0BBD |
:1083F00084E68093580480912603882311F0579ACD |
:1084000017C08091E608992780FF05C082FF03C04E |
:1084100080EE9EE202C080E091E190930A01809399 |
:10842000090181E0809311010E946B1E0E946B1E66 |
:108430008091B2049091B304A091B404B091B504BA |
:10844000E0904401F09045010091460110914701F0 |
:10845000BC01CD01A80197010E94E7AC59016A0156 |
:108460008091AA049091AB04A091AC04B091AD04AA |
:10847000BC01CD01A80197010E94E7ACB901C5017B |
:108480000E9493AA8C010E946D7C9C019093EC0A3F |
:108490008093EB0A8091B8049091B904AA2797FDC4 |
:1084A000A095BA2F7DE0880F991FAA1FBB1F7A9550 |
:1084B000D1F78050904FAF43B040442737FD4095EF |
:1084C000542FBC01CD010E94E7ACC90180509E4FE2 |
:1084D0009093B9048093B804053111050CF066241B |
:1084E000772081F080911704882361F0C9018C58AE |
:1084F00090408234910530F08091E2058062809353 |
:10850000E20566248091C8049091C9048056994080 |
:10851000815C9B4228F08091E20581608093E205B6 |
:108520008091C6049091C70480569940815C9B421B |
:1085300028F08091E20582608093E2058091C40476 |
:108540009091C5048C5291408957954028F08091B4 |
:10855000E20584608093E2058091BE049091BF049F |
:108560008C529140835C914028F08091E2058860B4 |
:108570008093E2058091BC049091BD048C5291409F |
:10858000835C914028F08091E20580618093E20550 |
:108590008091B8049091B9048050924083559140E5 |
:1085A00028F08091E20580628093E2058091E205E7 |
:1085B0008111662486E4809381010E9462A482E096 |
:1085C0000E94C8A580911E0190911F01A0912001D9 |
:1085D000B091210180930F0890931008A093110887 |
:1085E000B093120810923F0310923E031092410381 |
:1085F00010924203109243031092440310927204AB |
:108600001092730410927404109275041092010871 |
:10861000109200080E94D321862D9927EEE0CDB755 |
:10862000DEB70C9422ADA3E1B0E0E9E1F3E40C94F1 |
:1086300002AD8091C4049091C50420914B03309108 |
:108640004C03821B930B9093260B8093250B8091F8 |
:1086500055039091560397FD07969C0153E035957D |
:1086600027955A95E1F73093E20A2093E10A809129 |
:1086700053039091540397FD079643E09595879592 |
:108680004A95E1F79093D30A8093D20A3093EE0A89 |
:108690002093ED0A9093E50A8093E40A80911E0BE3 |
:1086A00090911F0BAC01440F551F480F591F20918B |
:1086B000470330914803C901880F991F880F991FFC |
:1086C000820F931F820F931F480F591F57FF02C03D |
:1086D0004D5F5F4F559547955595479550931F0BA7 |
:1086E00040931E0B8091300B9091310BAC01440FE5 |
:1086F000551F480F591F2091490330914A03C90162 |
:10870000880F991F880F991F820F931F820F931F45 |
:10871000480F591F57FF02C04D5F5F4F5595479552 |
:10872000559547955093310B4093300B209147035B |
:1087300030914803C901880F991F880F991F820F34 |
:10874000931F820F931F9C01442737FD4095542FA0 |
:108750008091A2049091A304A091A404B091A504D7 |
:10876000820F931FA41FB51F8093A2049093A304AC |
:10877000A093A404B093A5042091490330914A0327 |
:10878000C901880F991F880F991F820F931F820FAD |
:10879000931F9C01442737FD4095542F80919E04E0 |
:1087A00090919F04A091A004B091A104820F931F07 |
:1087B000A41FB51F80939E0490939F04A093A004D0 |
:1087C000B093A1048091F70A9091F80A2091470391 |
:1087D00030914803820F931F9093F80A8093F70A11 |
:1087E0008091280B9091290B2091490330914A03E5 |
:1087F000820F931F9093290B8093280B8091BA04CA |
:108800009091BB0401969093BB048093BA0480912D |
:108810000D0890910E082091B8043091B904821B84 |
:10882000930B9C01442737FD4095542F80919A0467 |
:1088300090919B04A0919C04B0919D04820F931F82 |
:10884000A41FB51F80939A0490939B04A0939C044B |
:10885000B0939D048FEC80937A00109218012091C0 |
:108860008A0430918B0440918C0450918D042987A7 |
:108870003A874B875C8729543B46414050402CF057 |
:1088800028E43BE641E050E00DC089859A85AB8540 |
:10889000BC85885B9449AE4FBF4F4CF428EB34E95C |
:1088A0004EEF5FEF2D833E834F83588708C0898545 |
:1088B0009A85AB85BC858D839E83AF83B8872091D5 |
:1088C00092043091930440919404509195042D8723 |
:1088D0003E874F87588B29543B46414050402CF0EF |
:1088E00028E43BE641E050E00DC08D859E85AF85D4 |
:1088F000B889885B9449AE4FBF4F4CF428EB34E9FC |
:108900004EEF5FEF29833A834B835C8308C08D85EC |
:108910009E85AF85B88989839A83AB83BC83A091F8 |
:10892000250BB091260BBB8BAA8BFD01CF01AA278B |
:1089300097FDA095BA2FA0908204B0908304C090B8 |
:108940008404D0908504A80EB91ECA1EDB1EA09216 |
:108950008204B0928304C0928404D0928504E09093 |
:108960002C0BF0902D0B00912E0B10912F0BE80E7D |
:10897000F91E0A1F1B1FE0922C0BF0922D0B009387 |
:108980002E0B10932F0BF0913B04F98BFF2309F072 |
:1089900098C180913A04882309F093C180911A0B01 |
:1089A00086FF8FC18091D20A9091D30AAA2797FDA2 |
:1089B000A095BA2FBC01CD0129813A814B815C8100 |
:1089C0000E9473AC9B01AC0197FF04C02150384F4B |
:1089D0004F4F5F4F6BE055954795379527956A95B3 |
:1089E000D1F780916B01682E772488249924CA01DD |
:1089F000B901A40193010E9473ACDC01CB01809307 |
:108A0000D4049093D504A093D604B093D704B7FFB1 |
:108A100004C08150904FAF4FBF4F1C012D013CE06F |
:108A200055944794379427943A95D1F72092D404DB |
:108A30003092D5044092D6045092D7048091E10A36 |
:108A40009091E20AAA2797FDA095BA2FBC01CD010B |
:108A50002D813E814F8158850E9473AC97FF04C0E1 |
:108A60006150784F8F4F9F4F2BE095958795779565 |
:108A700067952A95D1F7A40193010E9473ACDC019C |
:108A8000CB018093D8049093D904A093DA04B093D7 |
:108A9000DB04B7FF04C08150904FAF4FBF4F9C0124 |
:108AA000AD018CE055954795379527958A95D1F777 |
:108AB0002093D8043093D9044093DA045093DB0414 |
:108AC0008091D4049091D5049093CA0A8093C90AE6 |
:108AD0008091D8049091D9049093CE0A8093CD0AC6 |
:108AE00022193309440955092093D8043093D90435 |
:108AF0004093DA045093DB04E20EF31E041F151FAB |
:108B0000E0922C0BF0922D0B00932E0B10932F0B59 |
:108B100080916A018823B1F457FF04C02F5F3F4F53 |
:108B20004F4F5F4F5595479537952795A21AB30A32 |
:108B3000C40AD50AA0928204B0928304C09284042D |
:108B4000D09285042A893B8979010027F7FC00959A |
:108B5000102F8091D8049091D904A091DA04B0919B |
:108B6000DB04E80EF91E0A1F1B1FC801B70129818B |
:108B70003A814B815C810E9473AC9B01AC0197FFF1 |
:108B800004C02150384F4F4F5F4FBBE0559547957C |
:108B900037952795BA95D1F780916C01A82EBB2403 |
:108BA000CC24DD24CA01B901A60195010E9473AC51 |
:108BB000DC01CB018093CC049093CD04A093CE0430 |
:108BC000B093CF04B7FF04C08150904FAF4FBF4F59 |
:108BD0003C014D01ACE09594879477946794AA95F5 |
:108BE000D1F76092CC047092CD048092CE04909222 |
:108BF000CF04C801B7012D813E814F8158850E9465 |
:108C000073AC97FF04C06150784F8F4F9F4FFBE0CC |
:108C10009595879577956795FA95D1F7A601950172 |
:108C20000E9473ACDC01CB018093D0049093D104FB |
:108C3000A093D204B093D304B7FF04C08150904FE7 |
:108C4000AF4FBF4FAC01BD01ECE0759567955795EF |
:108C50004795EA95D1F74093D0045093D10460939F |
:108C6000D2047093D3042A893B8937FF03C030951F |
:108C700021953F4F21343105E4F1D401C30197FE22 |
:108C800007C0B095A095909581959F4FAF4FBF4F6E |
:108C900081389105A105B10584F4DB01CA0177FF94 |
:108CA00007C0B095A095909581959F4FAF4FBF4F4E |
:108CB00081389105A105B105E4F081E080936E044F |
:108CC00018C01092CE0A1092CD0A1092CA0A1092C1 |
:108CD000C90A1092D0041092D1041092D2041092BA |
:108CE000D3041092CC041092CD041092CE041092B2 |
:108CF000CF048091D0049091D104A091D204B0917E |
:108D0000D304BC01CD0124E630E040E050E00E94F5 |
:108D1000E7ACE090CC04F090CD04E21AF30AF092B4 |
:108D2000E00AE092DF0A8091CC049091CD04A091FA |
:108D3000CE04B091CF04BC01CD0124E630E040E088 |
:108D400050E00E94E7ACDA01C9012091D0043091D3 |
:108D5000D1048C01021B130B1093D50A0093D40A83 |
:108D60008091440190914501A0914601B091470145 |
:108D7000BC01CD0128E631E040E050E00E9473AC38 |
:108D800020912C0B30912D0B40912E0B50912F0BDD |
:108D9000261737074807590764F0261B370B480B7F |
:108DA000590B20932C0B30932D0B40932E0B50938B |
:108DB0002F0B20912C0B30912D0B40912E0B5091AD |
:108DC0002F0B57FF0CC0260F371F481F591F20932A |
:108DD0002C0B30932D0B40932E0B50932F0B609147 |
:108DE000D20A7091D30A6E0D7F1D9B01442737FD77 |
:108DF0004095542F8091860490918704A091880417 |
:108E0000B0918904820F931FA41FB51F809386041D |
:108E100090938704A0938804B093890480914004C0 |
:108E200090914104681B790BCB01AA2797FDA0956F |
:108E3000BA2F29853A854B855C85820F931FA41F25 |
:108E4000B51F80938A0490938B04A0938C04B093F5 |
:108E50008D04C0908601D0908701E0908801F09049 |
:108E60008901C816D906EA06FB06C4F488EA91E629 |
:108E7000A0E0B0E08C199D09AE09BF0980938A0477 |
:108E800090938B04A0938C04B0938D0480938604FC |
:108E900090938704A0938804B093890422273327F2 |
:108EA000A9012C193D094E095F0980918A0490910E |
:108EB0008B04A0918C04B0918D0482179307A407B2 |
:108EC000B507B4F4D701C601885A9146A040B04016 |
:108ED00080938A0490938B04A0938C04B0938D04A8 |
:108EE0008093860490938704A0938804B0938904A8 |
:108EF0006091E10A7091E20A600F711F9B014427A3 |
:108F000037FD4095542F80918E0490918F04A0914D |
:108F10009004B0919104820F931FA41FB51F8093FA |
:108F20008E0490938F04A0939004B0939104809149 |
:108F30003E0490913F04681B790BCB01AA2797FD53 |
:108F4000A095BA2F2D853E854F855889820F931F96 |
:108F5000A41FB51F8093920490939304A09394044C |
:108F6000B0939504E0908A01F0908B0100918C0100 |
:108F700010918D01E816F9060A071B07C4F488EA68 |
:108F800091E6A0E0B0E08E199F09A00BB10B809391 |
:108F9000920490939304A0939404B09395048093C7 |
:108FA0008E0490938F04A0939004B0939104222791 |
:108FB0003327A9012E193F09400B510B80919204D0 |
:108FC00090919304A0919404B09195048217930713 |
:108FD000A407B507B4F4D801C701885A9146A04048 |
:108FE000B0408093920490939304A0939404B09320 |
:108FF000950480938E0490938F04A0939004B09373 |
:1090000091048091820490918304A0918404B09192 |
:1090100085048093960490939704A0939804B0934A |
:1090200099048091920490919304A0919404B0913A |
:1090300095048093B2049093B304A093B404B093C6 |
:10904000B50480918A0490918B04A0918C04B09116 |
:109050008D048093AA049093AB04A093AC04B093C6 |
:10906000AD0480918E0490918F04A0919004B091F2 |
:1090700091048093AE049093AF04A093B004B09396 |
:10908000B1048091860490918704A0918804B091E6 |
:1090900089048093A6049093A704A093A804B09396 |
:1090A000A904809124019091250197FD079633E052 |
:1090B000959587953A95E1F79093E20A8093E10AB6 |
:1090C000809122019091230197FD079623E09595C9 |
:1090D00087952A95E1F79093D30A8093D20A8091DD |
:1090E0004F03909150030F9734F488E19CEF9093D5 |
:1090F000E20A8093E10A80914F0390915003079711 |
:1091000034F480E398EF9093E20A8093E10A80912F |
:109110004F0390915003815D974034F088EE93E0C7 |
:109120009093E20A8093E10A80914F03909150035B |
:10913000805E974034F080ED97E09093E20A809350 |
:10914000E10A80914D0390914E030F9734F488E12A |
:109150009CEF9093D30A8093D20A80914D03909113 |
:109160004E03079734F480E398EF9093D30A8093EB |
:10917000D20A80914D0390914E03815D974034F067 |
:1091800088EE93E09093D30A8093D20A80914D03A6 |
:1091900090914E03805E974034F080ED97E090937D |
:1091A000D30A8093D20A60917901662309F4AEC094 |
:1091B00040912401509125018091DC049091DD04BF |
:1091C000481B590B5093E3044093E204209124017F |
:1091D00030912501280F391F37FF02C02F5F3F4F05 |
:1091E000359527953093DD042093DC0441385105F3 |
:1091F0001CF080E890E005C040585F4F34F480E8F0 |
:109200009FEF9093E3048093E204409122015091F8 |
:1092100023018091DE049091DF04481B590B509389 |
:10922000E1044093E0042091220130912301280FB2 |
:10923000391F37FF02C02F5F3F4F35952795309379 |
:10924000DF042093DE04413851051CF080E890E0F3 |
:1092500005C040585F4F34F480E89FEF9093E104DD |
:109260008093E004462F55278091E2049091E30417 |
:10927000849FB001859F700D949F700D11249B01F8 |
:1092800077FF02C0215F3F4FB4E035952795BA952F |
:10929000E1F78091E10A9091E20A820F931F909387 |
:1092A000E20A8093E10A8091E0049091E104849FB6 |
:1092B0009001859F300D949F300D1124A90137FF37 |
:1092C00002C0215F3F4FA4E035952795AA95E1F7AD |
:1092D0008091D20A9091D30A820F931F9093D30A60 |
:1092E0008093D20A8091240190912501860F971FC7 |
:1092F0009093250180932401809122019091230174 |
:10930000840F951F90932301809322010091E40A1A |
:109310001091E50A8091C90A9091CA0A10161106A7 |
:109320005CF59C0197FF04C022273327281B390BCB |
:10933000C901AA2797FDA095BA2F20916A0133276A |
:1093400044275527BC01CD010E9473AC9B01AC01A1 |
:1093500097FF04C0215C3F4F4F4F5F4FF6E055959C |
:10936000479537952795FA95D1F78091DF0A909127 |
:10937000E00A820F931F27C097FF03C09095819545 |
:109380009F4FAA2797FDA095BA2F20916A013327F6 |
:1093900044275527BC01CD010E9473AC9B01AC0151 |
:1093A00097FF04C0215C3F4F4F4F5F4FE6E055955C |
:1093B000479537952795EA95D1F78091DF0A9091E7 |
:1093C000E00A821B930B9093E00A8093DF0AE090FF |
:1093D000ED0AF090EE0A8091CD0A9091CE0A1E140B |
:1093E0001F045CF59C0197FF04C022273327281B2C |
:1093F000390BC901AA2797FDA095BA2F20916A01C0 |
:10940000332744275527BC01CD010E9473AC9B0133 |
:10941000AC0197FF04C0215C3F4F4F4F5F4F76E098 |
:1094200055954795379527957A95D1F78091D40A28 |
:109430009091D50A820F931F27C097FF03C0909584 |
:1094400081959F4FAA2797FDA095BA2F20916A0179 |
:10945000332744275527BC01CD010E9473AC9B01E3 |
:10946000AC0197FF04C0215C3F4F4F4F5F4F66E058 |
:1094700055954795379527956A95D1F78091D40AE8 |
:109480009091D50A821B930B9093D50A8093D40AAE |
:1094900080911A0B87FF44C03989332309F040C0FB |
:1094A00080913A048823E1F541E0E41641E0F406B6 |
:1094B0004CF08091E10A9091E20A8E0D9F1D805040 |
:1094C00091400DC050E0E5165FEFF50664F4809121 |
:1094D000E10A9091E20A8E0D9F1D80509F4F90935C |
:1094E000E20A8093E10A81E0013018074CF0809194 |
:1094F000D20A9091D30A800F911F805091400CC0E6 |
:109500009FEF0030190764F48091D20A9091D30A3A |
:10951000800F911F80509F4F9093D30A8093D20A5F |
:10952000E2E1CD5E0C941EAD80915704882329F5AD |
:1095300080911F048C7F80931F0480911E048F7D77 |
:1095400080931E04A7EEB5E0E8E8F9E09BE0809187 |
:109550000603882309F48C938D91818312829150A4 |
:109560003F9697FFF4CF80910603882359F08091AE |
:10957000060381508093060305C080911F0481601B |
:1095800080931F0480917903882319F01092790346 |
:10959000089580937D03809177038E7F8093770376 |
:1095A00085EA8093BC000895882319F480E090E058 |
:1095B0000895E82FFF27EE0FFF1FE35CF54F808132 |
:1095C000918181589F4F8F3F910521F01CF08FEFC3 |
:1095D00090E004C097FF02C080E090E099270895D2 |
:1095E000CF93DF93A9E5B4E0C2E7D8E057E08991D3 |
:1095F000E82FFF27EE0FFF1FE35CF54F0190F0818E |
:10960000E02DE158FF4FEF3FF10521F01CF0EFEFA7 |
:10961000F0E004C0F7FF02C0E0E0F0E0893111F4AF |
:10962000EC931BC04C91242F3327E217F307A9F0CA |
:10963000CF01821B930B97FD039695958795959582 |
:109640008795242F280F2C93822F9927E817F90745 |
:1096500014F4215001C02F5F2C935150119657FFE5 |
:10966000C6CF80917C08883F38F0EFEFF0E0E81B30 |
:10967000F109E75AFB4F808180937E0180917E0142 |
:10968000882329F0843618F084E680937E01809147 |
:109690007E08883F38F0EFEFF0E0E81BF109E75A69 |
:1096A000FB4F808180937D0180917D01882329F08B |
:1096B000843618F084E680937D0180918B08883F82 |
:1096C00038F0EFEFF0E0E81BF109E75AFB4F80813B |
:1096D00080937801809178018B3010F48AE002C089 |
:1096E0008F3F11F4809378018091B808883F38F05B |
:1096F000EFEFF0E0E81BF109E75AFB4F8081809320 |
:10970000F90A8091F90A863010F485E002C08F3F93 |
:1097100011F48093F90A8091BA08883F38F0EFEF8E |
:10972000F0E0E81BF109E75AFB4F80818093210BA1 |
:109730008091210B863010F485E002C08F3F11F438 |
:109740008093210B8091A508873F19F4429905C0A9 |
:1097500007C0863F41F4439B03C08091DA0816C0DE |
:109760008091DB0813C0883F38F0EFEFF0E0E81B92 |
:10977000F109E75AFB4F80818093F60A8091F60A3F |
:10978000893110F488E102C08F3F11F48093F60A0A |
:109790008091A608873F19F4429905C007C0863F0B |
:1097A00041F4439B03C08091DC0816C08091DD0822 |
:1097B00013C0883F38F0EFEFF0E0E81BF109E75AFB |
:1097C000FB4F80818093CF0A8091CF0A893110F4BA |
:1097D00088E102C08F3F11F48093CF0A8091A708DF |
:1097E000883F38F0EFEFF0E0E81BF109E75AFB4F54 |
:1097F00080818093FF0A8091FF0A893110F488E10B |
:1098000002C08F3F11F48093FF0A80917D080E946F |
:10981000D44A8093350480918008883F38F0EFEF78 |
:10982000F0E0E81BF109E75AFB4F808180937C014F |
:1098300080918208883F38F0EFEFF0E0E81BF109F3 |
:10984000E75AFB4F808180937A0180918A08883F94 |
:1098500038F0EFEFF0E0E81BF109E75AFB4F8081A9 |
:1098600080937B0180918C08883F38F0EFEFF0E027 |
:10987000E81BF109E75AFB4F8081809377018091C3 |
:109880008D08883F38F0EFEFF0E0E81BF109E75A68 |
:10989000FB4F80818093790180918E08883F38F05A |
:1098A000EFEFF0E0E81BF109E75AFB4F808180936E |
:1098B000760180918F08883F38F0EFEFF0E0E81BE9 |
:1098C000F109E75AFB4F80818093750180919508DB |
:1098D000883F38F0EFEFF0E0E81BF109E75AFB4F63 |
:1098E00080818093730180919608883F38F0EFEF74 |
:1098F000F0E0E81BF109E75AFB4F808180933404C4 |
:1099000080919708883F38F0EFEFF0E0E81BF1090D |
:10991000E75AFB4F80818093330480919808883FF9 |
:1099200038F0EFEFF0E0E81BF109E75AFB4F8081D8 |
:109930008093320480919908883F38F0EFEFF0E08F |
:10994000E81BF109E75AFB4F808180933104809135 |
:10995000B308883F38F0EFEFF0E0E81BF109E75A71 |
:10996000FB4F8081809330048091B408883F38F0A9 |
:10997000EFEFF0E0E81BF109E75AFB4F808180939D |
:109980002F048091B508883F38F0EFEFF0E0E81B36 |
:10999000F109E75AFB4F808180932E048091B6082D |
:1099A000883F38F0EFEFF0E0E81BF109E75AFB4F92 |
:1099B000808180932D0480919A08883F38F0EFEFE2 |
:1099C000F0E0E81BF109E75AFB4F808180937101B9 |
:1099D00080919E08883F38F0EFEFF0E0E81BF10936 |
:1099E000E75AFB4F80818093700180919B08883FEC |
:1099F00038F0EFEFF0E0E81BF109E75AFB4F808108 |
:109A000080936F0180919F08883F38F0EFEFF0E07E |
:109A1000E81BF109E75AFB4F808180936E0180912A |
:109A2000A808883F38F0EFEFF0E0E81BF109E75AAB |
:109A3000FB4F808180936D018091AB08883F38F0A7 |
:109A4000EFEFF0E0E81BF109E75AFB4F80818093CC |
:109A50006C018091AC08883F38F0EFEFF0E0E81B34 |
:109A6000F109E75AFB4F808180936B018091AD082B |
:109A7000883F38F0EFEFF0E0E81BF109E75AFB4FC1 |
:109A8000808180936A018091D608883F38F0EFEF9B |
:109A9000F0E0E81BF109E75AFB4F80818093DE0A72 |
:109AA00080917A0880931A0B8091E7088093FE0AD0 |
:109AB0008091B208883F38F0EFEFF0E0E81BF10941 |
:109AC000E75AFB4F8081809369018091CF08883FDE |
:109AD00038F0EFEFF0E0E81BF109E75AFB4F808127 |
:109AE0008093330B80917301282F33272F5F3F4FD3 |
:109AF0008CE398E2B9010E94B2AC7093800160934C |
:109B00007F01809188088093220B80918708809341 |
:109B1000E60AE091D108EE2309F449C081E0809380 |
:109B20002C04FF27EE0FFF1FE35CF54F808191812E |
:109B3000805C9F4F14F410922C048091810120913D |
:109B40002C04821721F18330F8F43091B2012223E2 |
:109B500051F08CED95E090932903809328033323F3 |
:109B600069F48EE209C088EC90E090932903809319 |
:109B70002803332319F487E18093B20185E08093B1 |
:109B800042042093810103C0815080938101809120 |
:109B9000730B9091740B97FF0FC080912C04882356 |
:109BA00059F08091E20580688093E20505C0E0935A |
:109BB0002C048AE0809381018091730B9091740B47 |
:109BC00097FF1DC0809157048823C9F080912C0411 |
:109BD0008823A9F080910B0190910C018F5F9F4F1A |
:109BE00071F488E99AE3909329038093280380E035 |
:109BF00094EA90930C0180930B0110922C048091B5 |
:109C00002C04882321F080911E04816003C0809180 |
:109C10001E048E7F80931E04DF91CF910895809162 |
:109C20008308882301F560913C0470913D0477FF1F |
:109C300002C06D5F7F4F75956795759567954091EB |
:109C400026015091270180910201282F3327649F1C |
:109C5000C001659F900D749F900D1124B9010E9461 |
:109C60009EACCB0101C0992790938501809384011C |
:109C700080918401909185018734910538F486E4C0 |
:109C800090E0909385018093840108958F3A910527 |
:109C900030F08FEA90E090938501809384010895DD |
:109CA000A8E1B0E0E6E5FEE40C9402AD0E941343A7 |
:109CB00080911F04992784719070892B91F5809170 |
:109CC000E80882FF27C080913C0490913D040097F2 |
:109CD000F1F002E088359007D4F49C0197FF02C0B0 |
:109CE0002D5F3F4F359527953595279580919208A3 |
:109CF0009927289FA001299F500D389F500D1124AE |
:109D0000CA0164E670E00E94B2ACCB0106C08DE2ED |
:109D100090E003C080919208992790931D0480934E |
:109D20001C0420911A0430911B0455E72033350799 |
:109D300059F410926304109262048091E60A992704 |
:109D400090931D0480931C046091620470916304DD |
:109D50007A8369838091E60A99270A9668177907BA |
:109D600014F49A83898380915804843608F062C081 |
:109D700080911E0482FD5EC08091F8049091F904E8 |
:109D8000009731F001979093F9048093F8040BC089 |
:109D900010925704909321048093200480911F0413 |
:109DA0008D7E80931F04289A809120049091210435 |
:109DB000895E9340E0F18091B70B8536C0F18091C8 |
:109DC0001C0490911D049A83898380911F048061F3 |
:109DD00080931F0480916E08A82FBB27AA0FBB1F7A |
:109DE000FD01ED57F54F1182108280916F08282FE9 |
:109DF0003327220F331FC9018D57954FFC01118264 |
:109E00001082A35CB54F11961C921E92235C354FB5 |
:109E1000D90111961C921E9280917108E82FFF279C |
:109E2000EE0FFF1FE35CF54F11821082B4C5109254 |
:109E30005704B1C5809158048D3808F482C59091BB |
:109E4000DE08992309F445C08091DF08882309F4CE |
:109E500040C0E92FFF27EE0FFF1FE35CF54F808125 |
:109E60009181C397BCF080919601823361F4809117 |
:109E70001E0485FF08C080911E04806480931E0428 |
:109E800080E38093B20180911E048F7780931E043B |
:109E900086E917C0808191818E5C9F4FACF48091E0 |
:109EA0009601863941F480911E04806880931E04D7 |
:109EB0008FE28093B20180911E048F7B80931E04F9 |
:109EC00082E38093960105C080911E048F73809376 |
:109ED0001E0480911F048F7E80931F04909193082D |
:109EE00082E3989FC00111249093F9048093F804B1 |
:109EF000E981FA81B9978CF080915704882369F041 |
:109F00008091200490912104FFEF8F3F9F0729F05B |
:109F10000196909321048093200440912004509155 |
:109F200021044F3F510509F048F510927A04109230 |
:109F30007B0410927C0410927D041092760410929F |
:109F4000770410927804109279041092E40410922D |
:109F5000E5041092E6041092E70410928204109235 |
:109F60008304109284041092850480911E04806200 |
:109F700080931E0484E68093960135C180911F046E |
:109F8000826080931F0480911E0485FF98C0809199 |
:109F9000340599279C012470307082FD04C08091A3 |
:109FA0001E0486FF2AC0809143018D3331F58091D4 |
:109FB0001704882311F180E58093470484EF91E032 |
:109FC000A0E0B0E08093480490934904A0934A0431 |
:109FD000B0934B0480934E0490934F04A09350048D |
:109FE000B093510488EE93E090939501809394018F |
:109FF000232B19F08DE08093B2018091340390916E |
:10A000003503A0913603B091370387399105A10537 |
:10A01000B1058CF48091520490915304A0915404A2 |
:10A02000B0915504825A9E4FAF4FBF4F24F080919C |
:10A030001A0B80FD21C088EE93E0909395018093E8 |
:10A04000940180911E0486FF0FC0109247048CE299 |
:10A0500091E0A0E0B0E080934E0490934F04A09371 |
:10A060005004B093510403C080E38093B201809107 |
:10A070001E048F7180931E0410927A0410927B0448 |
:10A0800010927C0410927D04109276041092770452 |
:10A090001092780410927904109282041092830432 |
:10A0A0001092840410928504495E534008F49BC0CA |
:10A0B00088EE93E0909321048093200494C08091D3 |
:10A0C0001E0487FF1AC080914301863711F08D333B |
:10A0D000A1F480911704882381F08091DF08809398 |
:10A0E000470480EE91EBAFEFBFEF8093480490936D |
:10A0F0004904A0934A04B0934B04209194013091F9 |
:10A10000950143E0283E340708F048C02F5F3F4FD9 |
:10A11000309395012093940110927A0410927B045D |
:10A1200010927C0410927D041092760410927704B1 |
:10A130001092780410927904109282041092830491 |
:10A140001092840410928504809134039091350319 |
:10A15000A0913603B09137038C529140A040B0409B |
:10A1600080934E0490934F04A0935004B0935104F5 |
:10A17000285E3340C1F580911E0487FF34C0809172 |
:10A1800043018B3281F180911E048F7780931E04EE |
:10A1900080911E04806280931E0425C08091170464 |
:10A1A000882309F180914301863711F08D32D9F46B |
:10A1B0008091520490915304A0915404B09155049D |
:10A1C000885E9340A040B04074F480910D08909157 |
:10A1D0000E088D5A93403CF0109295011092940114 |
:10A1E0008EE08093B20180917008E82FFF27EE0F78 |
:10A1F000FF1FE35CF54F80819181813591050CF45F |
:10A2000054C120915704222309F04FC18091710855 |
:10A21000E82FFF27EE0FFF1FE35CF54F8081918150 |
:10A220008C3491050CF411C18091FA048F5F8093F6 |
:10A23000FA04893C08F439C12093FA0410922104ED |
:10A240001092200430916E08E32FFF27EE0FFF1FBE |
:10A25000E35CF54F8081918187349105B4F480915E |
:10A260006F08E82FFF27EE0FFF1FE35CF54F80819B |
:10A2700091810190F081E02DF7FF03C0F095E19509 |
:10A28000FF4FE734F1050CF478C041E020916F08EE |
:10A29000A22FBB27AA0FBB1FA35CB54F8D919C912A |
:10A2A00011978734910544F0E32FFF27EE0FFF1F2E |
:10A2B000E35CF54F808191818D919C91873491056C |
:10A2C00074F080916E08E82FFF27EE0FFF1FE35C0C |
:10A2D000F54F80819181873491050CF042E0E22FA7 |
:10A2E000FF27EE0FFF1FE35CF54F808191818634DD |
:10A2F000910574F480916E08E82FFF27EE0FFF1F81 |
:10A30000E35CF54F80819181873491050CF043E047 |
:10A31000E22FFF27EE0FFF1FE35CF54F8081918155 |
:10A320008A5B9F4F74F480916E08E82FFF27EE0F31 |
:10A33000FF1FE35CF54F80819181873491050CF01C |
:10A3400044E0E22FFF27EE0FFF1FE35CF54F808113 |
:10A3500091818A5B9F4F74F480916E08E82FFF27EC |
:10A36000EE0FFF1FE35CF54F8081918186349105EC |
:10A370000CF445E0842F0E940A3480916F08E82F86 |
:10A38000FF27EE0FFF1FE35CF54F80819181019065 |
:10A39000F081E02DF7FF03C0F095E195FF4F7E9728 |
:10A3A000CCF480916E08E82FFF27EE0FFF1FE35CCF |
:10A3B000F54F808191818A5B9F4F64F481E08093A7 |
:10A3C000FD051092430488EE93E090932903809357 |
:10A3D00028036BC0809101010E94B53380E00E9488 |
:10A3E000BB0C809194080E9490A780911A0B80FF6B |
:10A3F00010C080911C0190911D01875B934038F43F |
:10A4000080911C0190911D018E5E924010F40E947B |
:10A410000B2281E00E94A73F982F8093430421E004 |
:10A4200020932603579A8091E205882311F087E054 |
:10A4300006C0992319F42093B20103C088E18093E8 |
:10A44000B20185E08093650527C080819181855B9D |
:10A450009F4F4CF58091FA048F5F8093FA04893CFA |
:10A4600020F1209357042093FA04109221041092B3 |
:10A47000200482E00E94A73F982F8093430480919C |
:10A48000E205882311F087E005C0992311F481E0EB |
:10A4900001C088E18093B20168E770E0809101011A |
:10A4A0000E94F23E02C02093FA0480917008E82FC7 |
:10A4B000FF27EE0FFF1FE35CF54F808191818C59E0 |
:10A4C0009F4F0CF037C22091D208E22FFF27EF7781 |
:10A4D000F070EE0FFF1FED57F54F808191810697C9 |
:10A4E00014F084E606C0808191818B5F9F4F1CF43D |
:10A4F0008CE98093FD0480915704E09171088823D2 |
:10A5000009F063C1FF27EE0FFF1FE35CF54F808169 |
:10A5100091818C599F4F9CF48091E80883FD0BC07A |
:10A52000E22FFF27EE0FFF1FE35CF54F8081918143 |
:10A53000855B9F4FDCF08091D2088823B9F0809131 |
:10A54000E80883FF3FC18091D208E82FFF27EE0F74 |
:10A55000FF1FE35CF54F80819181875F9F4F0CF473 |
:10A5600031C18091FD04843609F02CC180914304EF |
:10A57000882329F080911F04886080931F048091B4 |
:10A580001E0190911F01A0912001B09121018093A3 |
:10A590000F0890931008A0931108B093120810921E |
:10A5A0003403109235031092360310923703109241 |
:10A5B00052041092530410925404109255041092B5 |
:10A5C000410310924203109243031092440380917E |
:10A5D0006E08E82FFF27EE0FFF1FE35CF54F808129 |
:10A5E00091818D599F4FACF480916F08E82FFF2720 |
:10A5F000EE0FFF1FE35CF54F808191810190F081A8 |
:10A60000E02DF7FF03C0F095E195FF4FE436F1052B |
:10A6100034F48091D208882311F48093FB04809154 |
:10A62000FB048F5F8093FB048E3F08F466C180912A |
:10A63000250B9091260B97FF03C0909581959F4F16 |
:10A640008197B4F48091E10A9091E20A97FF03C0E8 |
:10A65000909581959F4F45975CF48091D20A909197 |
:10A66000D30A97FF03C0909581959F4F459714F0AB |
:10A67000109243041092FB048091E205882309F0B4 |
:10A6800094C080914304882309F48FC080913805D9 |
:10A69000882309F08AC081E090E0909321048093A0 |
:10A6A000200481E0809357041092E4041092E504A2 |
:10A6B0001092E6041092E704109282041092830430 |
:10A6C000109284041092850410927E0410927F04EC |
:10A6D000109280041092810480918908E82EFF2452 |
:10A6E0000027112780911E0B90911F0B9C0144277E |
:10A6F00037FD4095542FC801B7010E9473ACDC01AF |
:10A70000CB018093920490939304A0939404B0930C |
:10A7100095048091300B9091310B9C01442737FDBB |
:10A720004095542FC801B7010E9473ACDC01CB01E6 |
:10A7300080938A0490938B04A0938C04B0938D042F |
:10A740008091B2049091B304A091B404B091B50487 |
:10A7500080938E0490938F04A0939004B0939104FF |
:10A760008091AA049091AB04A091AC04B091AD0487 |
:10A770008093860490938704A0938804B0938904FF |
:10A7800010927A0410927B0410927C0410927D0443 |
:10A790001092760410927704109278041092790443 |
:10A7A00084E68093420484E39AC08CED95E0909314 |
:10A7B00029038093280380914304882309F09DC0D6 |
:10A7C00081E08DC01092FB0498C0FF27EE0FFF1FA1 |
:10A7D000E35CF54F80819181853691059CF08091F5 |
:10A7E000E80883FD0BC0E22FFF27EE0FFF1FE35C9D |
:10A7F000F54F80819181855B9F4FDCF08091D2087D |
:10A800008823B9F08091E80883FF75C08091D20851 |
:10A81000E82FFF27EE0FFF1FE35CF54F808191814A |
:10A820008E5C9F4F0CF067C08091FD048C3909F05D |
:10A8300062C080916E08E82FFF27EE0FFF1FE35CD8 |
:10A84000F54F808191818D599F4FACF480916F08B5 |
:10A85000E82FFF27EE0FFF1FE35CF54F808191810A |
:10A860000190F081E02DF7FF03C0F095E195FF4FD7 |
:10A87000E436F1053CF48091D208882319F48093E2 |
:10A88000FC0418C010927A0410927B0410927C048D |
:10A8900010927D041092760410927704109278043E |
:10A8A000109279041092690410926804109267045F |
:10A8B000109266048091FC048F5F8093FC048B3FB0 |
:10A8C00088F0109257041092FC0410922104109208 |
:10A8D000200480911E048F7180931E0486E2809371 |
:10A8E000B2010BC0843649F48CEA9DE090932903B1 |
:10A8F0008093280302C01092FC0420911A04309126 |
:10A900001B04F3E0283E3F0708F045C080913E035A |
:10A9100090913F038B569F4F1CF02F5F3F4F05C018 |
:10A9200021153105C1F12150304030931B04209393 |
:10A930001A0431C01092FD0410921B0410921A04E4 |
:10A940002AC02E5E324038F180913B0B90913C0B37 |
:10A950008059914000F58091520490915304A09148 |
:10A960005404B09155048C5D9540A040B0409CF4D7 |
:10A9700080E395E790931B0480931A048091200450 |
:10A98000909121048A5E934030F089EE93E0909399 |
:10A9900021048093200480914201815080934201E0 |
:10A9A000809142018F3F21F080911F0484FFDFC31B |
:10A9B0000E94F04AB09084088091060590910705A6 |
:10A9C0009C01220F331F280F391FC0906E08AC2D39 |
:10A9D000BB27AA0FBB1FFD01E35CF54F4B2D55278D |
:10A9E00080819181849FB001859F700D949F700D2F |
:10A9F0001124260F371F37FF02C02D5F3F4FB901CB |
:10AA00007595679575956795AD57B54F8091850894 |
:10AA1000082F11278D919C91809FD001819FB00DAF |
:10AA2000909FB00D11246A0F7B1F709307056093F0 |
:10AA3000060580910805909109059C01220F331F9E |
:10AA4000280F391FD0906F08AD2DBB27AA0FBB1F51 |
:10AA5000FD01E35CF54F80819181849FF001859F2A |
:10AA6000F00D949FF00D11242E0F3F1F37FF02C0F1 |
:10AA70002D5F3F4FA9015595479555954795AD5782 |
:10AA8000B54F8D919C91809F7001819FF00C909F9C |
:10AA9000F00C11244E0D5F1D5093090540930805DD |
:10AAA00080912C04882309F448C0CB0177FD0396DC |
:10AAB000DC01B595A795B595A795CA0157FD0396F5 |
:10AAC000FC01F595E795F595E7958091A701682F2D |
:10AAD000772767FD70956A9F90016B9F300D7A9F75 |
:10AAE000300D112480913A05482F552747FD509588 |
:10AAF0004E9FC0014F9F900D5E9F900D1124280F17 |
:10AB0000391F37FF02C0295F3F4F03E03595279576 |
:10AB10000A95E1F730936904209368046E9F9001D1 |
:10AB20006F9F300D7E9F300D11244A9FC0014B9FB7 |
:10AB3000900D5A9F900D11243FC08091D008E82FAE |
:10AB4000FF27E65BFE4F86818093A701908190935B |
:10AB50003A05A82FBB27A7FDB095A69F9001A79FF8 |
:10AB6000300DB69F300D1124E92FFF27E7FDF0953A |
:10AB7000E49FC001E59F900DF49F900D1124280FD4 |
:10AB8000391F37FF02C0295F3F4F13E035952795E6 |
:10AB90001A95E1F73093690420936804A49F90010B |
:10ABA000A59F300DB49F300D1124E69FC001E79F93 |
:10ABB000900DF69F900D1124281B390B37FF02C012 |
:10ABC000295F3F4F43E0359527954A95E1F730934C |
:10ABD00067042093660480917108E82FFF27EE0F29 |
:10ABE000FF1FE35CF54F80819181909581959F4F88 |
:10ABF00090936504809364048530910514F0049764 |
:10AC000005C00FEF8C3F900734F4049690936504D1 |
:10AC10008093640404C010926504109264048091CF |
:10AC20001A0490911B048150924078F1809168043D |
:10AC30009091690497FD079623E0959587952A954D |
:10AC4000E1F7909369048093680480916604909181 |
:10AC5000670497FD079603E0959587950A95E1F7B8 |
:10AC6000909367048093660410927A0410927B0498 |
:10AC700010927C0410927D04109276041092770456 |
:10AC8000109278041092790443C08091270588239C |
:10AC900009F43EC0282F33278091680490916904FD |
:10ACA00097FD079613E0959587951A95E1F7289FEC |
:10ACB000A001299F500D389F500D1124CA0157FD46 |
:10ACC0000F96B4E095958795BA95E1F7909369044E |
:10ACD00080936804809166049091670497FD0796BD |
:10ACE000A3E095958795AA95E1F7289FB001299F44 |
:10ACF000700D389F700D1124CB0177FD0F96F4E095 |
:10AD000095958795FA95E1F790936704809366048B |
:10AD1000809068049090690480912A0590912B0599 |
:10AD2000881A990A909269048092680400916604D6 |
:10AD3000109167048091280590912905081B190B33 |
:10AD4000109367040093660480917008E82FFF2732 |
:10AD5000EE0FFF1FE35CF54FE080F1808FE790E09E |
:10AD6000E80EF91EF0926304E0926204809178018B |
:10AD70009927AA2797FDA095BA2FBC01CD010E9463 |
:10AD8000E7ABDC01CB0120E030E040E251E4BC0164 |
:10AD9000CD010E9455ABDC01CB01BC01CD010E946D |
:10ADA000B9ABDC01CB0180932A0B809177018093B2 |
:10ADB000000B809176019927AA2797FDA095BA2FBD |
:10ADC000BC01CD010E94E7ABDC01CB0120E030E00B |
:10ADD00040E251E4BC01CD010E9455ABDC01CB0146 |
:10ADE000BC01CD010E94B9ABDC01CB018093D90A33 |
:10ADF000809175018093EF0A8091090680FF59C008 |
:10AE00008091330B813808F454C080910206992751 |
:10AE100087FD90952B2D3327829FD001839FB00D06 |
:10AE2000929FB00D11248A0E9B1E9092690480920D |
:10AE3000680480910306992787FD9095829FF00111 |
:10AE4000839FF00D929FF00D11240E0F1F1F109382 |
:10AE500067040093660480910406282F332727FD9A |
:10AE600030958091640490916504820F931F9093B4 |
:10AE700065048093640480910606282F332727FDFC |
:10AE8000309580917F089927289F8001299F100D78 |
:10AE9000389F100D112410934901009348018091AF |
:10AEA000050699278E159F0524F4909363048093DB |
:10AEB0006204809162049091630497FF04C0109231 |
:10AEC00063041092620480911A0B82FF02C01092F8 |
:10AED000000B4091680450916904CA0157FD039624 |
:10AEE0009C01359527953595279537FF03C03095FB |
:10AEF00021953F4F80912404909125048217930758 |
:10AF0000B4F4CA0157FF03C0909581959F4F97FDF8 |
:10AF100003969595879595958795909325048093AD |
:10AF200024048536910544F084E690E001C0019741 |
:10AF30009093250480932404409166045091670403 |
:10AF4000CA0157FD03969C013595279535952795A0 |
:10AF500037FF03C0309521953F4F80912204909197 |
:10AF6000230482179307B4F4CA0157FF03C09095D6 |
:10AF700081959F4F97FD0396959587959595879514 |
:10AF800090932304809322048536910544F084E64F |
:10AF900090E001C001979093230480932204809154 |
:10AFA0001F0484FF08C010922504109224041092FC |
:10AFB000230410922204ED2DFF27EE0FFF1FE35C08 |
:10AFC000F54F4091A908242F3327808191812817BC |
:10AFD000390744F48091E50882FF04C081E0809342 |
:10AFE000390413C0ED2DFF27EE0FFF1FE35CF54F73 |
:10AFF000842F99272091AA08821B910920813181F1 |
:10B000002817390714F41092390440916F08E42F7F |
:10B01000FF27EE0FFF1FE35CF54F5091A908852F26 |
:10B02000992722273327281B390B8081918182178A |
:10B03000930744F48091E50883FF04C081E0809386 |
:10B04000380416C080913804882391F0E42FFF273C |
:10B05000EE0FFF1FE35CF54F8091AA089927851B2F |
:10B060009109208131818217930714F410923804DA |
:10B07000EC2DFF27EE0FFF1FE35CF54F4091A90871 |
:10B08000242F3327808191812817390744F4809138 |
:10B09000E50880FF04C081E08093360417C08091EA |
:10B0A0003604882399F0EC2DFF27EE0FFF1FE35C99 |
:10B0B000F54F842F99272091AA08821B910920819E |
:10B0C00031812817390714F41092360440916E0824 |
:10B0D000E42FFF27EE0FFF1FE35CF54F5091A90807 |
:10B0E000852F992722273327281B390B80819181AF |
:10B0F0008217930744F48091E50881FF04C081E042 |
:10B100008093370416C080913704882391F0E42F90 |
:10B11000FF27EE0FFF1FE35CF54F8091AA089927E8 |
:10B12000851B9109208131818217930714F41092B5 |
:10B13000370480913904882319F4809138048111EF |
:10B1400081E080933A0480913604882321F4809131 |
:10B150003704882351F081E080933B0410923A0435 |
:10B16000109239041092380402C080933B048091FD |
:10B170003A04882321F480913B04882369F080916C |
:10B18000A808992729813A818217930714F49A8392 |
:10B19000898381E080936E0480911E0499279C012D |
:10B1A0002470307082FF31C080912A0590912B0568 |
:10B1B000909581959F4F9093690480936804809146 |
:10B1C000280590912905909581959F4F909367044C |
:10B1D000809366048091840190918501909363042B |
:10B1E00080936204109265041092640480911A0B9B |
:10B1F0008B778B6680931A0B8091FE0A8C7B8093F1 |
:10B20000FE0A88EC809335041EC080911F0484FFE1 |
:10B210001AC030936504209364043093690420932A |
:10B22000680430936704209366049AE590932A0B90 |
:10B2300088E78093000B9093D90A8093EF0A1092CD |
:10B240003A0410923B048091F20A9091F30AA09183 |
:10B25000F40AB091F50A2091B2043091B304409100 |
:10B26000B4045091B504820F931FA41FB51F80939F |
:10B27000F20A9093F30AA093F40AB093F50A80912E |
:10B28000FA0A9091FB0AA091FC0AB091FD0AE090A5 |
:10B29000AA04F090AB040091AC041091AD04EB82D1 |
:10B2A000FC820D831E838E0D9F1DA01FB11F8093F6 |
:10B2B000FA0A9093FB0AA093FC0AB093FD0A8091CE |
:10B2C000E70A9091E80AA091E90AB091EA0AE090B1 |
:10B2D000AE04F090AF040091B0041091B104EF827D |
:10B2E000F88609871A878E0D9F1DA01FB11F8093B6 |
:10B2F000E70A9093E80AA093E90AB093EA0A8091DA |
:10B30000DA0A9091DB0AA091DC0AB091DD0AE090A4 |
:10B31000A604F090A7040091A8041091A904EB865C |
:10B32000FC860D871E878E0D9F1DA01FB11F809369 |
:10B33000DA0A9093DB0AA093DC0AB093DD0AF0905E |
:10B340003B04FF86FF2029F480913A04882309F406 |
:10B3500060C01092A2041092A3041092A404109250 |
:10B36000A50410929E0410929F041092A0041092C3 |
:10B37000A1041092F20A1092F30A1092F40A1092A9 |
:10B38000F50A1092FA0A1092FB0A1092FC0A109227 |
:10B39000FD0A1092E70A1092E80A1092E90A109248 |
:10B3A000EA0A1092DA0A1092DB0A1092DC0A109272 |
:10B3B000DD0A8091920490919304A0919404B0913D |
:10B3C000950480938E0490938F04A0939004B0937F |
:10B3D000910480918A0490918B04A0918C04B09187 |
:10B3E0008D048093860490938704A0938804B0937F |
:10B3F000890410923D0310923C0310923F04109276 |
:10B400003E0410924104109240040F85002309F07D |
:10B41000D0C180913A04882309F0CBC180910D08F6 |
:10B4200090910E08815092402CF48091570488230B |
:10B4300009F4BFC19090AC0BA090890820901E0B1E |
:10B4400030901F0B4090300B5090310B19140CF0C2 |
:10B45000BBC0BB24CC24DD24CA01B901A6019501DF |
:10B460000E94E7AC79018A018091750B9091760B6F |
:10B47000281A390AC101AA2797FDA095BA2FE81A00 |
:10B48000F90A0A0B1B0B6B817C818D819E81A601C1 |
:10B4900095010E94E7AC59016A018091770B909168 |
:10B4A000780B481A590AC201AA2797FDA095BA2F0E |
:10B4B000A81AB90ACA0ADB0A292C332427FC3094BB |
:10B4C000432C532CC801B701A20191010E9473AC17 |
:10B4D00097FF04C061507E4F8F4F9F4F3B014C013F |
:10B4E00009E095948794779467940A95D1F7C601FB |
:10B4F000B501A20191010E9473AC97FF04C0615095 |
:10B500007E4F8F4F9F4F5B016C0119E0D594C7941C |
:10B51000B794A7941A95D1F78091240490912504AB |
:10B52000813491053CF4809122049091230481346C |
:10B530009105D4F0D401C30197FE03C00196A11D6B |
:10B54000B11D3C014D019594879477946794D60181 |
:10B55000C501D7FE03C00196A11DB11D5C016D019F |
:10B56000D594C794B794A7948091AE0B282F332716 |
:10B5700027FD3095432F532F2615370548055905CC |
:10B5800014F439014A01992787FD9095909581958A |
:10B590009F4FAA2797FDA095BA2F681679068A06AD |
:10B5A0009B0614F43C014D012A153B054C055D0535 |
:10B5B00014F459016A01A816B906CA06DB060CF094 |
:10B5C000D0C05C016D01CDC0EA2CFF2400271127FB |
:10B5D000CA01B901A80197010E94E7AC39014A01EB |
:10B5E000C101AA2797FDA095BA2F681A790A8A0A7D |
:10B5F0009B0A6B817C818D819E81A80197010E94AD |
:10B60000E7AC59016A01C201AA2797FDA095BA2F9C |
:10B61000A81AB90ACA0ADB0AD401C30197FE03C0FB |
:10B620000F96A11DB11D3C014D01F4E09594879446 |
:10B6300077946794FA95D1F7D601C501D7FE03C078 |
:10B640000F96A11DB11D5C016D01E4E0D594C79476 |
:10B65000B794A794EA95D1F780912404909125049A |
:10B66000813491053CF4809122049091230481342B |
:10B670009105A4F0C401B30123E030E040E050E0C4 |
:10B680000E94E7AC39014A01C601B50123E030E070 |
:10B6900040E050E00E94E7AC59016A0180917108D6 |
:10B6A000E82FFF27EE0FFF1FE35CF54F80819181AC |
:10B6B0000190F081E02DF7FF03C0F095E195FF4F79 |
:10B6C0007A97A4F0C401B30123E030E040E050E0F9 |
:10B6D0000E94E7AC39014A01C601B50123E030E020 |
:10B6E00040E050E00E94E7AC59016A0189E1809393 |
:10B6F000900121E262167104810491042CF070E241 |
:10B70000672E712C812C912C30EE63163FEF73065F |
:10B710003FEF83063FEF930644F460EE662E6FEF33 |
:10B72000762E6FEF862E6FEF962E41E2A416B104AF |
:10B73000C104D1042CF050E2A52EB12CC12CD12C87 |
:10B7400050EEA5165FEFB5065FEFC5065FEFD506B5 |
:10B7500044F440EEA42E4FEFB42E4FEFC42E4FEF23 |
:10B76000D42E8091920490919304A0919404B0916E |
:10B77000950486199709A809B909809392049093B2 |
:10B780009304A0939404B093950480918A049091BB |
:10B790008B04A0918C04B0918D048A199B09AC098B |
:10B7A000BD0980938A0490938B04A0938C04B0937A |
:10B7B0008D0480913C0390913D038F3F910509F0EA |
:10B7C00008F4C4C56F85662309F04EC580913A041C |
:10B7D000882309F049C580916E04882309F044C587 |
:10B7E0007091B108788B772309F43EC58091F20AF5 |
:10B7F0009091F30AA091F40AB091F50AB7FF04C042 |
:10B8000081509F4FAF4FBF4FE92EFA2E0B2F1127BC |
:10B8100007FD1A95E092F20AF092F30A0093F40AF7 |
:10B820001093F50A8091FA0A9091FB0AA091FC0A04 |
:10B83000B091FD0AB7FF04C081509F4FAF4FBF4F7B |
:10B84000892F9A2FAB2FBB27A7FDBA95898B9A8B8F |
:10B85000AB8BBC8B8093FA0A9093FB0AA093FC0AF3 |
:10B86000B093FD0A80918908A82EBB24CC24DD2446 |
:10B870002091A2043091A3044091A4045091A50406 |
:10B88000C601B5010E9473AC97FF04C061507F4FA1 |
:10B890008F4F9F4F672E782E892E992487FC9A947C |
:10B8A0006092A2047092A3048092A4049092A504D2 |
:10B8B00020919E0430919F044091A0045091A104D6 |
:10B8C000C601B5010E9473AC97FF04C061507F4F61 |
:10B8D0008F4F9F4F272E382E492E552447FC5A94C0 |
:10B8E00020929E0430929F044092A0045092A104A2 |
:10B8F00080919A0490919B04A0919C04B0919D0426 |
:10B90000B7FF04C081509F4FAF4FBF4F892F9A2F71 |
:10B91000AB2FBB27A7FDBA9580939A0490939B0405 |
:10B92000A0939C04B0939D04D801C7018619970980 |
:10B93000A809B9098093F0049093F104A093F2044C |
:10B94000B093F3042091B008E22EFF2400271127C2 |
:10B95000BC01CD01A80197010E94E7AC59016A0121 |
:10B960002093FE043093FF0440930005509301059B |
:10B9700089899A89AB89BC8982199309A409B50977 |
:10B980008093F4049093F504A093F604B093F70425 |
:10B99000BC01CD01A80197010E94E7AC20930205EC |
:10B9A000309303054093040550930505D601C50166 |
:10B9B000D7FE04C081509F4FAF4FBF4F892F9A2FA2 |
:10B9C000AB2FBB27A7FDBA9590933F0480933E040D |
:10B9D00057FF04C021503F4F4F4F5F4FBB2757FDCC |
:10B9E000BA95A52F942F832F909341048093400400 |
:10B9F000809124049091250481349105DCF4809198 |
:10BA000022049091230481349105A4F4809171085B |
:10BA1000E82FFF27EE0FFF1FE35CF54F8081918138 |
:10BA20000190F081E02DF7FF03C0F095E195FF4F05 |
:10BA30007A97E4F08091AC0B8F3FC1F480913E0483 |
:10BA400090913F0497FD01969595879590933F04BB |
:10BA500080933E04809140049091410497FD0196AB |
:10BA60009595879590934104809340048091E70ACF |
:10BA70009091E80AA091E90AB091EA0AB7FF04C0E0 |
:10BA800081509F4FAF4FBF4F892F9A2FAB2FBB27AE |
:10BA9000A7FDBA958093E70A9093E80AA093E90A74 |
:10BAA000B093EA0A8091DA0A9091DB0AA091DC0A4D |
:10BAB000B091DD0AB7FF04C081509F4FAF4FBF4F19 |
:10BAC000892F9A2FAB2FBB27A7FDBA958093DA0A4F |
:10BAD0009093DB0AA093DC0AB093DD0A8091B20454 |
:10BAE0009091B304A091B404B091B5042F8138852E |
:10BAF00049855A85281B390B4A0B5B0B2093E804B8 |
:10BB00003093E9044093EA045093EB048091AA0433 |
:10BB10009091AB04A091AC04B091AD04EB84FC8493 |
:10BB20000D851E85E81AF90A0A0B1B0BE092EC043E |
:10BB3000F092ED040093EE041093EF042093F004D0 |
:10BB40003093F1044093F2045093F304E092F40430 |
:10BB5000F092F5040093F6041093F70480918E049C |
:10BB600090918F04A0919004B0919104821B930B4B |
:10BB7000A40BB50B80938E0490938F04A093900434 |
:10BB8000B09391048091860490918704A0918804D9 |
:10BB9000B09189048E199F09A00BB10B8093860484 |
:10BBA00090938704A0938804B0938904888988239C |
:10BBB000E1F020916C0430916D04213831054CF096 |
:10BBC0008091C4049091C50401969093C50480931C |
:10BBD000C40420583F4F4CF48091C4049091C50494 |
:10BBE00001979093C5048093C40410926D04109241 |
:10BBF0006C0481E090E090930B0580930A05E0903F |
:10BC0000F004F090F1040091F2041091F304D801D3 |
:10BC1000C70117FF07C088279927DC018E199F09E4 |
:10BC2000A00BB10B81509240A040B04034F084E0B2 |
:10BC300090E090930B0580930A05809110059091F8 |
:10BC40001105A0911205B09113052091F20A3091CF |
:10BC5000F30A4091F40A5091F50A821B930BA40B4E |
:10BC6000B50B815E914BAF4FBF4F8F539C49A040A6 |
:10BC7000B04028F08091AD0B89310CF4FFC021E079 |
:10BC8000E21620E1F20620E0020720E012070CF4A1 |
:10BC900073C080910C05882309F46AC0D801C701DC |
:10BCA00017FF07C088279927DC018E199F09A00B71 |
:10BCB000B10B9C01AD01B7FF04C021503E4F4F4F67 |
:10BCC0005F4FF9E05595479537952795FA95D1F748 |
:10BCD00080910A0590910B05820F931F90930B059D |
:10BCE00080930A05D801C70117FF03C00796A11D5D |
:10BCF000B11DE3E0B595A79597958795EA95D1F79E |
:10BD00008093FE049093FF04A0930005B093010577 |
:10BD100089589341A040B04064F088E893E1A0E0E6 |
:10BD2000B0E08093FE049093FF04A0930005B093CD |
:10BD300001052091FE043091FF04409100055091CF |
:10BD4000010557FF04C021503F4F4F4F5F4F232F36 |
:10BD5000342F452F552747FD5A9580913E049091E9 |
:10BD60003F04820F931F90933F0480933E0406C0CC |
:10BD700081E080930C0502C010920C0540E0E416AF |
:10BD800040EFF4064FEF04074FEF14070CF073C0B9 |
:10BD900080910D05882309F46AC0D801C70117FFF7 |
:10BDA00007C088279927DC018E199F09A00BB10BCA |
:10BDB0009C01AD01B7FF04C021503E4F4F4F5F4F74 |
:10BDC00069E055954795379527956A95D1F7809104 |
:10BDD0000A0590910B05820F931F90930B0580939A |
:10BDE0000A05D801C70117FF03C00796A11DB11DA1 |
:10BDF00023E0B595A795979587952A95D1F78093D8 |
:10BE0000FE049093FF04A0930005B09301058857AA |
:10BE10009C4EAF4FBF4F64F488E79CEEAFEFBFEF8F |
:10BE20008093FE049093FF04A0930005B093010556 |
:10BE30002091FE043091FF044091000550910105CE |
:10BE400057FF04C021503F4F4F4F5F4F232F342FD8 |
:10BE5000452F552747FD5A9580913E0490913F0408 |
:10BE6000820F931F90933F0480933E0411C081E0A2 |
:10BE700080930D050DC010920D050AC010920B05A0 |
:10BE800010920A0584E690E090938F0180938E01D2 |
:10BE90006889262F332780910A0590910B05281772 |
:10BEA000390724F430930B0520930A051091AD0B4C |
:10BEB000112379F0212F332727FD309580910A0532 |
:10BEC00090910B052817390724F430930B05209324 |
:10BED0000A054091F0045091F1046091F2047091D0 |
:10BEE000F304413851056105710574F08091C8046F |
:10BEF0009091C90420910A0530910B05820F931F80 |
:10BF00009093C9048093C80440585F4F6F4F7F4F90 |
:10BF100074F48091C8049091C90420910A0530916D |
:10BF20000B05821B930B9093C9048093C80481E096 |
:10BF300090E090930B0580930A05C090F404D09094 |
:10BF4000F504E090F604F090F704D701C601F7FE7F |
:10BF500007C088279927DC018C199D09AE09BF0904 |
:10BF600081509240A040B04034F084E090E0909343 |
:10BF70000B0580930A058091140590911505A091F9 |
:10BF80001605B09117052091FA0A3091FB0A4091ED |
:10BF9000FC0A5091FD0A821B930BA40BB50B815E2A |
:10BFA000914BAF4FBF4F8F539C49A040B04018F00A |
:10BFB00019310CF4FFC001E0C01600E1D00600E02A |
:10BFC000E00600E0F0060CF473C080910E058823B3 |
:10BFD00009F46AC0D701C601F7FE07C08827992770 |
:10BFE000DC018C199D09AE09BF099C01AD01B7FFA9 |
:10BFF00004C021503E4F4F4F5F4F09E05595479584 |
:10C00000379527950A95D1F780910A0590910B05F0 |
:10C01000820F931F90930B0580930A05D701C601E9 |
:10C02000F7FE03C00796A11DB11D13E0B595A795B6 |
:10C03000979587951A95D1F78093020590930305FC |
:10C04000A0930405B093050589589341A040B040E2 |
:10C0500064F088E893E1A0E0B0E08093020590935B |
:10C060000305A0930405B0930505209102053091C6 |
:10C070000305409104055091050557FF04C0215068 |
:10C080003F4F4F4F5F4F232F342F452F552747FDED |
:10C090005A958091400490914104820F931F909390 |
:10C0A00041048093400406C081E080930E0502C0E5 |
:10C0B00010920E0520E0C21620EFD2062FEFE20606 |
:10C0C0002FEFF2060CF073C080910F05882309F45E |
:10C0D0006AC0D701C601F7FE07C088279927DC018F |
:10C0E0008C199D09AE09BF099C01AD01B7FF04C0C1 |
:10C0F00021503E4F4F4F5F4FE9E05595479537959B |
:10C100002795EA95D1F780910A0590910B05820F4A |
:10C11000931F90930B0580930A05D701C601F7FE84 |
:10C1200003C00796A11DB11D73E0B595A79597951E |
:10C1300087957A95D1F78093020590930305A09394 |
:10C140000405B093050588579C4EAF4FBF4F64F46C |
:10C1500088E79CEEAFEFBFEF809302059093030555 |
:10C16000A0930405B09305052091020530910305C5 |
:10C17000409104055091050557FF04C021503F4FE1 |
:10C180004F4F5F4F232F342F452F552747FD5A958B |
:10C190008091400490914104820F931F9093410439 |
:10C1A0008093400411C081E080930F050DC0109270 |
:10C1B0000F050AC010920B0510920A0584E690E064 |
:10C1C00090938F0180938E014889242F332780918B |
:10C1D0000A0590910B052817390724F430930B05B5 |
:10C1E00020930A058091AD0B882379F0282F3327FF |
:10C1F00027FD309580910A0590910B052817390786 |
:10C2000024F430930B0520930A054091F4045091D7 |
:10C21000F5046091F6047091F70441385105610509 |
:10C22000710574F08091C6049091C70420910A05AD |
:10C2300030910B05820F931F9093C7048093C6041F |
:10C2400040585F4F6F4F7F4FCCF48091C604909160 |
:10C25000C70420910A0530910B05821B930B909324 |
:10C26000C7048093C6040AC010924104109240048F |
:10C2700010923F0410923E0410926E048091000BC5 |
:10C28000882341F4109241041092400410923F041C |
:10C2900010923E048091F20A9091F30AA091F40A60 |
:10C2A000B091F50A8093100590931105A0931205A3 |
:10C2B000B09313058091FA0A9091FB0AA091FC0AB1 |
:10C2C000B091FD0A8093140590931505A09316056F |
:10C2D000B09317051092A2041092A3041092A40424 |
:10C2E0001092A50410929E0410929F041092A00434 |
:10C2F0001092A10410929A0410929B0410929C0434 |
:10C3000010929D041092F20A1092F30A1092F40A0D |
:10C310001092F50A1092FA0A1092FB0A1092FC0A87 |
:10C320001092FD0A1092E70A1092E80A1092E90AA8 |
:10C330001092EA0A1092DA0A1092DB0A1092DC0AD2 |
:10C340001092DD0A10923D0310923C03E0906404C9 |
:10C35000F0906504C701F7FE04C0882799278E195D |
:10C360009F0904973CF080911A0B84FD03C082E37F |
:10C370008093420410918608A12EBB24CC24DD2496 |
:10C38000B701882777FD8095982F9701F7FE04C0A5 |
:10C39000222733272E193F09442737FD4095542F74 |
:10C3A0000E9473AC9B01AC01C601B5010E9473AC45 |
:10C3B00097FF04C061507E4F8F4F9F4F59E0959576 |
:10C3C0008795779567955A95D1F79B01812F992786 |
:10C3D0008E9DD0018F9DB00D9E9DB00D1124CD017D |
:10C3E000B7FD03969595879595958795280F391FE5 |
:10C3F00080911A0490911B048150924010F020E02B |
:10C4000030E08091440490914504280F391F44275F |
:10C4100037FD4095542F2093E4043093E504409376 |
:10C42000E6045093E7048091820490918304A091E4 |
:10C430008404B0918504821B930BA40BB50B8093ED |
:10C44000820490938304A0938404B093850481555F |
:10C45000934CA040B04064F080E593ECA0E0B0E0E5 |
:10C460008093820490938304A0938404B093850402 |
:10C470008091820490918304A0918404B0918504FA |
:10C48000805B9C43AF4FBF4F64F480EB9CE3AFEF06 |
:10C49000BFEF8093820490938304A0938404B093AD |
:10C4A0008504809092019090930197FCFBC080914D |
:10C4B0001A0B83FFF7C08091910181508093910105 |
:10C4C000882309F0F3C08DE0809391018091B2043C |
:10C4D0009091B304A091B404B091B504B7FF04C027 |
:10C4E00081509E4FAF4FBF4F39E0B595A7959795B7 |
:10C4F00087953A95D1F78C0197FF03C01095019568 |
:10C500001F4F8091AA049091AB04A091AC04B0910C |
:10C51000AD04B7FF04C081509E4FAF4FBF4F29E01D |
:10C52000B595A795979587952A95D1F79C0197FF83 |
:10C5300003C0309521953F4F021713070CF4890172 |
:10C54000B80117FF02C0695F7F4F3B0193E075940C |
:10C5500067949A95E1F782E0E82EF12C6E0C7F1C2F |
:10C56000A0902C0BB0902D0BC0902E0BD0902F0BC9 |
:10C57000209144013091450140914601509147017D |
:10C58000C601B5010E94E7AC19012A013093D80A0F |
:10C590002093D70A821A930AC401845E9D4F68E6ED |
:10C5A00071E00E94B2ACAC01445B50402091420467 |
:10C5B000222321F0309271042092700480918E0128 |
:10C5C00090918F01009731F0019790938F018093A4 |
:10C5D0008E0112C0093111057CF480916C04909198 |
:10C5E0006D04840F951F90936D0480936C04222337 |
:10C5F00019F021502093420480918E0190918F0177 |
:10C60000892BF9F4809190019927489F8001499FD7 |
:10C61000100D589F100D1124C801B3010E94B2AC37 |
:10C62000CB01AA2797FDA095BA2FA80EB91ECA1E46 |
:10C63000DB1EA0922C0BB0922D0BC0922E0BD09231 |
:10C640002F0B80914204882369F5809170049091AA |
:10C6500071042091D70A3091D80A821B930B845E13 |
:10C660009D4F68E671E00E94B2AC9C01245B3040B3 |
:10C6700080917B0186959927289FA001299F500DC5 |
:10C68000389F500D11249A0157FF02C0215F3F4F80 |
:10C6900004E0359527950A95E1F7309345042093FA |
:10C6A000440404C0109245041092440480916E0426 |
:10C6B000882381F010927604109277041092780407 |
:10C6C0001092790410927A0410927B0410927C04E8 |
:10C6D00010927D0480913B048823F1F48091000B3B |
:10C6E000282F3327442755278091B2049091B30413 |
:10C6F000A091B404B091B504BC01CD010E9473AC0B |
:10C70000DC01CB01BC01CD0128EF3AE240E050E072 |
:10C710000E94E7AC290102C04424552480913A04C8 |
:10C720008823F1F48091000B282F332744275527C5 |
:10C730008091AA049091AB04A091AC04B091AD0497 |
:10C74000BC01CD010E9473ACDC01CB01BC01CD0169 |
:10C7500028EF3AE240E050E00E94E7AC190102C045 |
:10C76000222433248091D40A9091D50A893C9105E2 |
:10C770001CF088EC90E005C088539F4F34F488E3A8 |
:10C780009FEF9093D50A8093D40A8091DF0A90910D |
:10C79000E00A893C91051CF088EC90E005C08853C4 |
:10C7A0009F4F34F488E39FEF9093E00A8093DF0A71 |
:10C7B0008091E10A9091E20AAA2797FDA095BA2FED |
:10C7C00020912A0BA22EBB24CC24DD24BC01CD0158 |
:10C7D000A60195010E9473AC9B01AC018091D40A23 |
:10C7E0009091D50AAA2797FDA095BA2F17E0880F38 |
:10C7F000991FAA1FBB1F1A95D1F7280F391F4A1F6F |
:10C800005B1F57FF04C0215C3F4F4F4F5F4FA6E0B7 |
:10C810005595479537952795AA95D1F78201020F2F |
:10C82000131F1093E20A0093E10A8091D20A9091BB |
:10C83000D30AAA2797FDA095BA2FBC01CD01A60166 |
:10C8400095010E9473AC9B01AC018091DF0A90912D |
:10C85000E00AAA2797FDA095BA2FF7E0880F991F45 |
:10C86000AA1FBB1FFA95D1F7280F391F4A1F5B1F5C |
:10C8700057FF04C0215C3F4F4F4F5F4FE6E0559597 |
:10C88000479537952795EA95D1F77101E20EF31E8A |
:10C89000F092D30AE092D20A8091250B9091260B58 |
:10C8A000880F991FAA2797FDA095BA2F2091D90A22 |
:10C8B000332744275527BC01CD010E9473AC5B018F |
:10C8C0006C0197FF08C08FE390E0A0E0B0E0A80EF5 |
:10C8D000B91ECA1EDB1E76E0D594C794B794A79400 |
:10C8E0007A95D1F78091EF0A282F332744275527CF |
:10C8F0008091960490919704A0919804B091990426 |
:10C90000BC01CD010E9473ACDC01CB01BC01CD01A7 |
:10C9100020EF35E540E050E00E94E7ACB501620F42 |
:10C92000731F7093260B6093250B0150104134F058 |
:10C9300080E090E19093E20A8093E10A8091E10A1D |
:10C940009091E20A8050904F34F480E090EF909301 |
:10C95000E20A8093E10AB1E0EB16B0E1FB0634F0A5 |
:10C9600080E090E19093D30A8093D20A8091D20A1A |
:10C970009091D30A8050904F34F480E090EF9093E0 |
:10C98000D30A8093D20A6150704134F080E090E184 |
:10C990009093260B8093250B8091250B9091260B6D |
:10C9A0008050904F34F480E090EF9093260B80936A |
:10C9B000250B80911F0485FD16C0809102019927E7 |
:10C9C000209126013091270169817A81689FA00119 |
:10C9D000699F500D789F500D1124CA01B9010E9422 |
:10C9E0009EAC7A83698380911805815080931805E5 |
:10C9F0008F3F09F05EC08091190590911A05892B2F |
:10CA000041F4809126019091270190931A0580931B |
:10CA100019058091260190912701209119053091E7 |
:10CA20001A052817390718F42F5F3F4F09C0809166 |
:10CA30002601909127018217930730F4215030404E |
:10CA400030931A052093190584E680931805809188 |
:10CA5000FA02282F33274091190550911A054217E1 |
:10CA6000530710F48AE00CC080910001280F311D9B |
:10CA70002417350738F480911604882319F0815063 |
:10CA8000809316048091F902282F33274217530709 |
:10CA900010F489E10CC080910001280F311D24178A |
:10CAA000350738F480911504882319F0815080935C |
:10CAB0001504809116048823D1F080914804909148 |
:10CAC0004904A0914A04B0914B04B7FD10C0809175 |
:10CAD000DF088093470480EE91EBAFEFBFEF8093C8 |
:10CAE000480490934904A0934A04B0934B04809166 |
:10CAF0002703882311F40E94C17389819A81880FCA |
:10CB0000991F880F991F9A83898380911A0B80FD42 |
:10CB100002C00C94996F80913A04882311F00C9410 |
:10CB2000996F20913B04222311F00C94996F80910E |
:10CB3000E20599278F779070009711F00C94996F08 |
:10CB40003C018091CA049091CB04892B09F044C028 |
:10CB500080911C0190911D018959934058F087B52F |
:10CB60008A3F20F480914003815011C081E080937E |
:10CB700026055EC080911C0190911D0184369105AF |
:10CB800030F587B58630F8F0809140038F5F809351 |
:10CB9000400395E089029001112480911908821BBD |
:10CBA00087BD87B5809588BD8CE291E0909329037D |
:10CBB000809328038EE591E09093CB048093CA0480 |
:10CBC0000E94D32135C081E08093250531C0209398 |
:10CBD0002505209326052CC070923F0360923E03EA |
:10CBE00080911704882321F081E00E94C8A517C016 |
:10CBF0008091520490915304A0915404B091550433 |
:10CC000054E0880F991FAA1FBB1F5A95D1F7809334 |
:10CC1000410390934203A0934303B0934403809154 |
:10CC2000CA049091CB0401979093CB048093CA04DB |
:10CC300080911A0B2091350481FF3CC0223348F5C6 |
:10CC4000809197018150809397018F3F09F052C0E6 |
:10CC50008091B201882339F480916F04882319F000 |
:10CC600088E28093B20110926F04809152049091F7 |
:10CC70005304A0915404B091550480934E049093B2 |
:10CC80004F04A0935004B093510481E08093970126 |
:10CC900031C0273478F18091B201882339F4809132 |
:10CCA0006F04882319F487E28093B20188EC8093A3 |
:10CCB00097011DC08091480190914901820F911DFB |
:10CCC00020917F083327829FF001839FF00D929F70 |
:10CCD000F00D1124CF01AA2797FDA095BA2F8093BC |
:10CCE0004E0490934F04A0935004B093510481E0FC |
:10CCF00080936F048091B2049091B304A091B40426 |
:10CD0000B091B504E0904401F090450100914601D6 |
:10CD100010914701BC01CD01A80197010E94E7AC29 |
:10CD200059016A018091AA049091AB04A091AC04CE |
:10CD3000B091AD04BC01CD01A80197010E94E7AC00 |
:10CD4000B901C5010E9493AA9093EC0A8093EB0A63 |
:10CD5000CC9734F08CE390E09093EC0A8093EB0A4C |
:10CD60008091EB0A9091EC0A0E946D7C9093EC0A02 |
:10CD70008093EB0A80E28093430110924D0410925D |
:10CD80004C0480916F04882309F471C780911F04BB |
:10CD900099279C012071307084FD69C780911E0421 |
:10CDA000826080931E047091FE0A872F992741E0CC |
:10CDB000842E912C8822992280FD04C080911A0B28 |
:10CDC00081FD10C0E980FA8030931C0520931B057B |
:10CDD00030934D0420934C0480911F04806C809309 |
:10CDE0001F04E0C280911F0481FFACC20091840146 |
:10CDF00010918501C8010F96E0906204F0906304E1 |
:10CE0000F88EEF8A8E159F0508F09AC0809125054F |
:10CE1000882309F095C080911F0487FF15C0809179 |
:10CE20001F048F7780931F04809134039091350302 |
:10CE3000A0913603B091370380934E0490934F0432 |
:10CE4000A0935004B0935104E090DE0AEE20D9F193 |
:10CE500080914E0490914F04A0915004B0915104E0 |
:10CE6000BC01CD0124E630E040E050E00E94E7AC98 |
:10CE7000AE2CBB24CC24DD24A216B306C406D506F2 |
:10CE800014F590924D0480924C048091B201882355 |
:10CE9000C1F48091520490915304A0915404B09134 |
:10CEA0005504BC01CD012FE530E040E050E00E9488 |
:10CEB000E7ACA216B306C406D5061CF48AE180933B |
:10CEC000B2018DE338C080911D0590911E054597F4 |
:10CED00084F08091340390913503A0913603B09192 |
:10CEE000370380934E0490934F04A0935004B09363 |
:10CEF000510480911F04806480931F042F89388D12 |
:10CF0000201B310B2F50304037FF03C03095219547 |
:10CF10003F4F30934D0420934C0480911604882396 |
:10CF200049F0C90163E070E00E94B2AC70934D0417 |
:10CF300060934C048BE2809343011092460437C106 |
:10CF4000C8010F972F89388D28173907C8F5209108 |
:10CF500026052223A9F580911F0486FF15C0809124 |
:10CF60001F048F7B80931F048091340390913503BD |
:10CF7000A0913603B091370380934E0490934F04F1 |
:10CF8000A0935004B093510480911F048068809353 |
:10CF90001F048F89988D801B910B0F9697FF03C0FC |
:10CFA000909581959F4F909581959F4F90934D04BB |
:10CFB00080934C048DE28093430120934604F7C094 |
:10CFC0008DE38093430160914704662371F12091C2 |
:10CFD00048043091490440914A0450914B04809197 |
:10CFE0004E0490914F04A0915004B09151048217C7 |
:10CFF0009307A407B507CCF480911F048064809345 |
:10D000001F04862F992790934D0480934C048AE047 |
:10D01000809346048EE58093430180911F0487FF2F |
:10D02000C6C080911F048F7733C0662309F443C0C4 |
:10D03000209148043091490440914A0450914B0496 |
:10D0400080914E0490914F04A0915004B0915104EE |
:10D05000281739074A075B0774F580911F04806819 |
:10D0600080931F04862F9927909581959F4F9093C9 |
:10D070004D0480934C0486EF8093460486E78093AA |
:10D08000430180911F0486FF92C080911F048F7B13 |
:10D0900080931F048091340390913503A09136034F |
:10D0A000B091370380934E0490934F04A0935004A3 |
:10D0B000B09351047CC080911F04807C09F477C038 |
:10D0C00080914604882309F04CC0809134039091EC |
:10D0D0003503A0913603B0913703885C9040A0409F |
:10D0E000B04020914E0430914F0440915004509133 |
:10D0F000510482179307A407B5076CF0809134039D |
:10D1000090913503A0913603B0913703885C90402D |
:10D11000A040B0401DC08091340390913503A09190 |
:10D120003603B091370388539F4FAF4FBF4F281737 |
:10D1300039074A075B07BCF08091340390913503AF |
:10D14000A0913603B091370388539F4FAF4FBF4F25 |
:10D1500080934E0490934F04A0935004B0935104D5 |
:10D1600002C01092460480911F048F7380931F04A5 |
:10D1700010921C0510921B0571FF06C084EF91E010 |
:10D18000909329038093280380915604882379F48F |
:10D190008091520490915304A0915404B09155048D |
:10D1A000C397A105B1051CF081E0809356046091FE |
:10D1B0001B0570911C0580914C0490914D04680FE3 |
:10D1C000791F70931C0560931B05CB0177FF04C08A |
:10D1D00088279927861B970B855F91400CF49BC08D |
:10D1E00040914604442389F1809148049091490478 |
:10D1F00020914E0430914F04821B930B0996439764 |
:10D2000048F48091480490914904A0914A04B09157 |
:10D210004B0412C0242F332727FD3095432F532F63 |
:10D2200080914E0490914F04A0915004B09151040C |
:10D23000820F931FA41FB51F80934E0490934F0439 |
:10D24000A0935004B093510424C020914E04309117 |
:10D250004F04409150045091510480917F0816165C |
:10D26000170644F463E00E9492AC280F311D411D63 |
:10D27000511D07C063E00E9492AC281B310941098F |
:10D28000510920934E0430934F044093500450931F |
:10D29000510410921C0510921B05E0905204F0906E |
:10D2A00053040091540410915504D801C7018050D3 |
:10D2B0009440A040B04020914E0430914F044091E2 |
:10D2C00050045091510482179307A407B5075CF4EA |
:10D2D000D801C70180509C4FAF4FBF4F2817390767 |
:10D2E0004A075B0744F080934E0490934F04A09349 |
:10D2F0005004B09351048091FE0A81FF06C084E679 |
:10D3000090E0909329038093280380914704882319 |
:10D3100011F40E940F4E8091CA049091CB04892B86 |
:10D32000E9F18091340390913503A0913603B091D7 |
:10D33000370380934E0490934F04A0935004B0930E |
:10D3400051042CC08091520490915304A091540434 |
:10D35000B0915504805D9740A040B04080934E044A |
:10D3600090934F04A0935004B093510481E00E9425 |
:10D37000C8A580918308882311F0992702C08FE700 |
:10D3800090E0909385018093840149815A81509364 |
:10D390003D0440933C048EE280934301E0903C04C2 |
:10D3A000F0903D048091340390913503A0913603B1 |
:10D3B000B091370320914E0430914F0440915004B6 |
:10D3C00050915104281739074A075B0724F08091D0 |
:10D3D000FE0A80FD5EC4809117046091CA047091BA |
:10D3E000CB04882309F07CC2672B49F0E0903C0411 |
:10D3F000F0903D0410921E0510921D05E1C0809131 |
:10D40000340390913503A0913603B0913703821B0A |
:10D41000930BA40BB50B8093E8049093E904A093BD |
:10D42000EA04B093EB04823050E895075FEFA5075C |
:10D430005FEFB5072CF481E090E8AFEFBFEF09C0D4 |
:10D440008F5F9F47A040B04064F08FEF9FE7A0E060 |
:10D45000B0E08093E8049093E904A093EA04B093C9 |
:10D46000EB048091E8049091E90490931E05809369 |
:10D470001D0580917D01282F332744275527809152 |
:10D48000E8049091E904A091EA04B091EB04BC0196 |
:10D49000CD010E9473AC97FF04C0615E7F4F8F4F38 |
:10D4A0009F4F25E095958795779567952A95D1F7B4 |
:10D4B0006093E8047093E9048093EA049093EB048A |
:10D4C0006530AEEF7A07AFEF8A07AFEF9A072CF41B |
:10D4D00084E09EEFAFEFBFEF09C060507440804022 |
:10D4E000904064F080E094E0A0E0B0E08093E80435 |
:10D4F0009093E904A093EA04B093EB046090E804ED |
:10D500007090E90420913E0330913F0337FF02C041 |
:10D51000295F3F4F03E0359527950A95E1F7EFEF37 |
:10D5200022383E071CF421E83FEF05C020383105C2 |
:10D5300014F020E830E0C901AA2797FDA095BA2F82 |
:10D5400020917E01332744275527BC01CD010E943D |
:10D5500073AC97FF04C06D5F7F4F8F4F9F4F12E0FA |
:10D5600095958795779567951A95D1F79B01FFEF6C |
:10D5700061307F071CF420E03FEF06C06F3F71056C |
:10D5800019F014F020E031E080911F04807C49F014 |
:10D59000C90137FD03969C0135952795359527954B |
:10D5A0000DC08091FE0A80FF09C0C90137FD0796B2 |
:10D5B0009C01A3E035952795AA95E1F7620E731EAD |
:10D5C00020917C01222309F454C06091720470916F |
:10D5D0007304809174049091750497FF04C061589E |
:10D5E0007F4F8F4F9F4FF7E095958795779567957C |
:10D5F000FA95D1F73327442755270E9473AC97FF3C |
:10D6000004C0615E7F4F8F4F9F4FE5E095958795F2 |
:10D6100077956795EA95D1F76093E8047093E904EC |
:10D620008093EA049093EB0461380FEF70070FEFDB |
:10D6300080070FEF90072CF480E89FEFAFEFBFEF6C |
:10D640000AC06F3F71058105910569F064F080E0C3 |
:10D6500091E0A0E0B0E08093E8049093E904A09307 |
:10D66000EA04B093EB048091E8049091E904680E19 |
:10D67000791E80917A01282F33278091B00B99274A |
:10D6800087FD9095289FA001299F500D389F500D30 |
:10D6900011249A0157FF02C021583F4F220F232F18 |
:10D6A000221F330B5FEF213835071CF420E83FEFD2 |
:10D6B00006C02F3F310519F014F020E031E0260DAF |
:10D6C000371DC901AA2797FDA095BA2F00913C04E8 |
:10D6D00010913D049801442737FD4095542FBC011B |
:10D6E000CD010E9473AC97FF04C061507E4F8F4FF5 |
:10D6F0009F4F59E095958795779567955A95D1F7FE |
:10D70000E61AF70A80914C0490914D04892B09F098 |
:10D7100064C0101611060CF060C020911D053091F8 |
:10D720001E05C90137FF03C0309521953F4F2D33AA |
:10D73000310540F480916A0490916B048E159F0529 |
:10D7400074F526C02C53304045E0369527954A9510 |
:10D75000E1F72031310510F02FE030E040916A040C |
:10D7600050916B0418161906E4F480E190E0821BD6 |
:10D77000930B489F9001499F300D589F300D112405 |
:10D78000B4E036952795BA95E1F72E153F0520F5BB |
:10D790008091820190918301E816F906F4F07C01F2 |
:10D7A0001CC0205F3F4F8091820190918301829F36 |
:10D7B000B001839F700D929F700D11249B01A4E016 |
:10D7C00036952795AA95E1F74E155F0514F07A0175 |
:10D7D00004C0E216F30608F07901C701AA2797FDF5 |
:10D7E000A095BA2FFDE0880F991FAA1FBB1FFA95BD |
:10D7F000D1F72091EB0A3091EC0A442737FD409590 |
:10D80000542FBC01CD010E94E7AC2093EC0430936F |
:10D81000ED044093EE045093EF04E090EC04F0909C |
:10D82000ED0480911F05909120059C01220F331F6C |
:10D83000280F391F2E0D3F1D37FF02C02D5F3F4FB0 |
:10D84000A9015595479555954795509320054093C7 |
:10D850001F0580917B08282F3327220F331F220FAB |
:10D86000331F241735076CF48091220B282F3327A0 |
:10D87000220F331F220F331F20553040421753070A |
:10D8800024F03093200520931F058091FE0A80FF2D |
:10D8900014C080911F0590912005A981BA818A1733 |
:10D8A0009B0724F0B0932005A0931F05E0911F056E |
:10D8B000F0912005FA83E983ECC129813A81201B8C |
:10D8C000310B37FF02C02D5F3F4F359527953595BA |
:10D8D0002795E0901F05F0902005E20EF31EC1C1D0 |
:10D8E000672B49F0E0903C04F0903D0410921E0537 |
:10D8F00010921D0538C18091340390913503A09199 |
:10D900003603B0913703821B930BA40BB50B8093A6 |
:10D91000E8049093E904A093EA04B093EB04823006 |
:10D9200000E890070FEFA0070FEFB0072CF481E09D |
:10D9300090E8AFEFBFEF09C08F5F9F47A040B040B6 |
:10D9400064F08FEF9FE7A0E0B0E08093E80490934D |
:10D95000E904A093EA04B093EB048091E804909169 |
:10D96000E90490931E0580931D0580917D01282F69 |
:10D970003327442755278091E8049091E904A0912A |
:10D98000EA04B091EB04BC01CD010E9473AC97FF97 |
:10D9900004C0615E7F4F8F4F9F4F05E0959587953F |
:10D9A000779567950A95D1F76093E8047093E90439 |
:10D9B0008093EA049093EB04653028EF72072FEF11 |
:10D9C00082072FEF92072CF484E098EFAFEFBFEFC0 |
:10D9D00009C0605078408040904064F080E098E05A |
:10D9E000A0E0B0E08093E8049093E904A093EA04F7 |
:10D9F000B093EB046090E8047090E90480917C019E |
:10DA0000282F33278091450390914603829FA001E0 |
:10DA1000839F500D929F500D11249A0157FF02C011 |
:10DA200021503F4F232F330F330B80913E039091B2 |
:10DA30003F03820F931FAA2797FDA095BA2F8093CB |
:10DA4000E8049093E904A093EA04B093EB04809176 |
:10DA5000460420914C0430914D04882331F0B3E00A |
:10DA6000220F331FBA95E1F71BC080917F089927D9 |
:10DA7000289FB001299F700D389F700D11249B01C4 |
:10DA8000A3E0220F331FAA95E1F7260F371F37FFB8 |
:10DA900002C0215E3F4FF5E035952795FA95E1F7F5 |
:10DAA000309319042093180480911804909119045C |
:10DAB0009C01442737FD4095542F8091E8049091B4 |
:10DAC000E904A091EA04B091EB04821B930BA40B30 |
:10DAD000B50B8093E8049093E904A093EA04B09313 |
:10DAE000EB0420917E01332744275527BC01CD014B |
:10DAF0000E9473AC97FF04C0615E7F4F8F4F9F4FB2 |
:10DB0000E5E09595879577956795EA95D1F76093C8 |
:10DB1000E8047093E9048093EA049093EB04653081 |
:10DB2000A8EF7A07AFEF8A07AFEF9A072CF484E0EB |
:10DB300098EFAFEFBFEF09C0605078408040904051 |
:10DB400064F080E098E0A0E0B0E08093E804909377 |
:10DB5000E904A093EA04B093EB048091E804909167 |
:10DB6000E904680E791EE618F70880916A0490911E |
:10DB70006B048E159F053CF4809182019091830186 |
:10DB8000E816F9060CF07C01C701AA2797FDA095BD |
:10DB9000BA2F5DE0880F991FAA1FBB1F5A95D1F7B6 |
:10DBA0002091EB0A3091EC0A442737FD4095542F21 |
:10DBB000BC01CD010E94E7AC2093EC043093ED044E |
:10DBC0004093EE045093EF04E090EC04F090ED04E9 |
:10DBD00080911F05909120059C01220F331F280F73 |
:10DBE000391F2E0D3F1D37FF02C02D5F3F4FA9018A |
:10DBF00055954795559547955093200540931F059A |
:10DC000080917B08282F3327220F331F220F331FC9 |
:10DC1000241735076CF48091220B282F3327220F0D |
:10DC2000331F220F331F205530404217530724F073 |
:10DC30003093200520931F058091FE0A20911F0537 |
:10DC40003091200580FF10C0E981FA812E173F072F |
:10DC500024F0F0932005E0931F05E0901F05F0905D |
:10DC60002005FA82E98215C03A83298312C00E94F6 |
:10DC70000F4E09811A811093200500931F05809192 |
:10DC80001F04806C80931F0480911E048D7F8093FD |
:10DC90001E0480911F0499279C012270307081FF1F |
:10DCA00039C18091210590912205A0912305B09161 |
:10DCB00024050097A105B10521F08091560481301B |
:10DCC000B9F480913C0490913D04AA2797FDA0955A |
:10DCD000BA2F1EE0880F991FAA1FBB1F1A95D1F7F4 |
:10DCE0008093210590932205A0932305B0932405EA |
:10DCF00080915604813019F482E080935604298182 |
:10DD00003A8179010027F7FC0095102F8091EB0AEA |
:10DD10009091EC0A9C01442737FD4095542FC8018F |
:10DD2000B7010E9473ACDC01CB018093EC049093AB |
:10DD3000ED04A093EE04B093EF04B7FF04C081504C |
:10DD4000904EAF4FBF4F7C018D01FDE015950795BB |
:10DD5000F794E794FA95D1F7E092EC04F092ED0491 |
:10DD60000093EE041093EF0460912004709121045D |
:10DD70003FE0603A730750F58091210590912205AC |
:10DD8000A0912305B09124059C01AD01EAE05695D0 |
:10DD9000479537952795EA95D1F7821B930BA40BEE |
:10DDA000B50BA8019701F4E0220F331F441F551F44 |
:10DDB000FA95D1F7820F931FA41FB51F80932105F9 |
:10DDC00090932205A0932305B093240560547F41CE |
:10DDD00018F58091210590912205A0912305B0911D |
:10DDE00024059C01AD01ECE05695479537952795A4 |
:10DDF000EA95D1F7821B930BA40BB50BA8019701F1 |
:10DE000072E0220F331F441F551F7A95D1F7820FFE |
:10DE1000931FA41FB51F41C080913E0390913F0303 |
:10DE200080913E0390913F0397FF03C090958195A9 |
:10DE30009F4F84369105CCF5809134039091350342 |
:10DE4000A0913603B09137039C0180914E049091CC |
:10DE50004F04281B390B37FF03C0309521953F4FE6 |
:10DE60002F3F310509F00CF5809121059091220595 |
:10DE7000A0912305B09124059C01AD016EE056955B |
:10DE80004795379527956A95D1F7821B930BA40B7D |
:10DE9000B50B8E0D9F1DA01FB11F80932105909380 |
:10DEA0002205A0932305B09324058091210590912C |
:10DEB0002205A0912305B09124051EE0B695A795F3 |
:10DEC000979587951A95D1F790933D0480933C04DC |
:10DED00040918108442399F055279C01BA010E9482 |
:10DEE000B2ACC901861B970B90936B0480936A04B4 |
:10DEF000260F371F30938301209382011FC0109299 |
:10DF00006B0410926A048FEF93E0909383018093E7 |
:10DF1000820114C01092560410922105109222051D |
:10DF2000109223051092240530933D0420933C0465 |
:10DF300005C080911F04806C80931F04809134057C |
:10DF400081FF37C089819A8197FD039695958795C2 |
:10DF50009595879520911C0430911D042817390749 |
:10DF600060F480913C0490913D04892B31F0220FA4 |
:10DF7000331F220F331F3A832983809134039091FA |
:10DF80003503A0913603B091370380934E049093EC |
:10DF90004F04A0935004B093510488E99AE39093FE |
:10DFA00029038093280380E09EE090930C018093E6 |
:10DFB0000B012091E60A822F9927880F991F880F5D |
:10DFC000991F889669817A818617970714F09A833A |
:10DFD00089838091220B9927880F991F880F991F99 |
:10DFE00080559040A981BA818A179B0714F49A83BF |
:10DFF000898380917803882341F48091B70B8E3F09 |
:10E0000020F080913805882321F18091200490919F |
:10E0100021040297C097E8F4E981FA811E161F06D1 |
:10E02000C4F481E090E09093210480932004E22ED8 |
:10E03000FF24EE0CFF1CEE0CFF1C8701085D1F4F38 |
:10E040001A8309838091B70B883218F489E0809392 |
:10E05000B20180912703882311F40E94C1732981A2 |
:10E060003A813093D7072093D6078091E4049091AA |
:10E07000E504A091E604B091E70442E0880F991FFF |
:10E08000AA1FBB1F4A95D1F70091250B1091260BB3 |
:10E09000081B190B213A31058CF0C90137FD019697 |
:10E0A00095958795801791070CF48C019095819533 |
:10E0B0009F4F081719076CF48C010BC0013511052F |
:10E0C00014F000E510E03FEF003B130714F400EB01 |
:10E0D0001FEF8091220B282F3327220F331F220F8F |
:10E0E000331FC90149815A81841B950B8017910701 |
:10E0F0000CF48C0169817A81621B730B0617170778 |
:10E100000CF48B018091E10A9091E20A609168041D |
:10E1100070916904861B970B9093F10A8093F00A23 |
:10E12000D090000B20917A0430917B0440917C04C4 |
:10E1300050917D04DD2041F0461A570AC201AA27FA |
:10E1400097FDA095BA2F04C0AA2797FDA095BA2FD6 |
:10E15000280F391F4A1F5B1F20937A0430937B04DA |
:10E1600040937C0450937D0480917A0490917B04C9 |
:10E17000A0917C04B0917D0481509A4FA040B040A2 |
:10E1800064F080E09AEFA0E0B0E080937A0490938E |
:10E190007B04A0937C04B0937D0480917A049091D9 |
:10E1A0007B04A0917C04B0917D0480509640AF4FD9 |
:10E1B000BF4F64F480E096E0AFEFBFEF80937A0446 |
:10E1C00090937B04A0937C04B0937D04C09090084E |
:10E1D0002091F00A3091F10AF8E0FC1598F08C2DAE |
:10E1E0009927829F7001839FF00C929FF00C11245D |
:10E1F000C701F7FC07967C01B3E0F594E794BA9564 |
:10E20000E1F712C08C2D86959927829FA001839FEC |
:10E21000500D929F500D1124CA0157FD03967C01A9 |
:10E22000F594E794F594E794A0907F01B090800175 |
:10E230009501442737FD4095542F80917A049091A1 |
:10E240007B04A0917C04B0917D04BC01CD010E94AF |
:10E25000E7ACE20EF31E90906901692D77278827BD |
:10E260009927980117FF04C022273327201B310B61 |
:10E2700037FF02C02F5F3F4F35952795A981BA819F |
:10E280002A0F3B1F442737FD4095542F0E9473AC43 |
:10E2900097FF04C0615C7F4F8F4F9F4FE6E09595DD |
:10E2A000879577956795EA95D1F79B016E157F0560 |
:10E2B0000CF47B01309521953F4FE216F3060CF4E8 |
:10E2C00079018091D20A9091D30A6091660470918D |
:10E2D0006704861B970B9093D10A8093D00A2091F4 |
:10E2E0007604309177044091780450917904DD20D0 |
:10E2F00041F0261A370AC101AA2797FDA095BA2F27 |
:10E3000004C0AA2797FDA095BA2F280F391F4A1FCE |
:10E310005B1F2093760430937704409378045093E6 |
:10E3200079048091760490917704A0917804B0915B |
:10E33000790481509A4FA040B04064F080E09AEF99 |
:10E34000A0E0B0E08093760490937704A0937804E3 |
:10E35000B09379048091760490917704A091780429 |
:10E36000B091790480509640AF4FBF4F64F480E085 |
:10E3700096E0AFEFBFEF8093760490937704A0937D |
:10E380007804B09379042091D00A3091D10A48E002 |
:10E390004C1598F08C2D9927829FB001839F700DAA |
:10E3A000929F700D1124CB0177FD07966C0163E0FD |
:10E3B000D594C7946A95E1F712C0C6948C2D99271D |
:10E3C000829FD001839FB00D929FB00D1124CD018B |
:10E3D000B7FD03966C01D594C794D594C794950165 |
:10E3E000442737FD4095542F80917604909177040F |
:10E3F000A0917804B0917904BC01CD010E94E7ACF2 |
:10E40000C20ED31E692D772788279927980117FFF9 |
:10E4100004C022273327201B310B37FF02C02F5F98 |
:10E420003F4F35952795E981FA812E0F3F1F4427ED |
:10E4300037FD4095542F0E9473AC97FF04C0615C78 |
:10E440007F4F8F4F9F4F36E09595879577956795CE |
:10E450003A95D1F79B016C157D050CF46B01309555 |
:10E4600021953F4FC216D3060CF469018091270312 |
:10E47000882311F40E94C1738091E60A282F332764 |
:10E480003E8B2D8B8091220B282E33245090D30865 |
:10E4900028E8A22E29E0B22E93E0892E99E0992E49 |
:10E4A0008BE0482EB1E06B2EBBE07B2ED4012C918B |
:10E4B00012160CF02FC1203429F4E981FA81F88F6B |
:10E4C000EF8B1FC049815A81CA01AA2797FDA095E9 |
:10E4D000BA2F332727FD3095432F532FBC01CD0191 |
:10E4E0000E9473AC97FF04C0615C7F4F8F4F9F4FBA |
:10E4F000A6E09595879577956795AA95D1F7788F3A |
:10E500006F8BF4012181203439F42F89388D2E0D41 |
:10E510003F1D388F2F8B2AC0203C39F44F89588DEE |
:10E520004E195F09588F4F8B21C0C701AA2797FD4D |
:10E53000A095BA2F332727FD3095432F532FBC01C9 |
:10E54000CD010E9473AC97FF04C0615C7F4F8F4F79 |
:10E550009F4FF6E09595879577956795FA95D1F752 |
:10E56000AF89B88DA60FB71FB88FAF8BF40122818A |
:10E57000203439F42F89388D2C0D3D1D388F2F8B89 |
:10E580002AC0203C39F44F89588D4C195D09588FA9 |
:10E590004F8B21C0C601AA2797FDA095BA2F33271C |
:10E5A00027FD3095432F532FBC01CD010E9473AC42 |
:10E5B00097FF04C0615C7F4F8F4F9F4FE6E09595BA |
:10E5C000879577956795EA95D1F7AF89B88DA60FAE |
:10E5D000B71FB88FAF8BF4012381203439F42F8912 |
:10E5E000388D200F311F388F2F8B2AC0203C39F4F3 |
:10E5F0004F89588D401B510B588F4F8B21C0C8013C |
:10E60000AA2797FDA095BA2F332727FD3095432FD2 |
:10E61000532FBC01CD010E9473AC97FF04C0615C15 |
:10E620007F4F8F4F9F4F56E09595879577956795CC |
:10E630005A95D1F7AF89B88DA60FB71FB88FAF8B9A |
:10E64000F501808181FD08C0D3018D919C91EF89F6 |
:10E65000F88D8E179F0774F4D3018D919C91EF89EB |
:10E66000F88D8E0F9F1F97FD019695958795988F32 |
:10E670008F8B1EC0552049F42F89388D220F331FF0 |
:10E68000281B390B388F2F8B13C031E0351580F4E0 |
:10E69000252D33274F89588D841B950BB9010E9476 |
:10E6A000B2ACCB016F89788D680F791F788F6F8B33 |
:10E6B0008D899E89880F991F880F991FAF89B88D02 |
:10E6C0008A179B0754F4C101880F991F880F991F5F |
:10E6D000EF89F88DE817F90714F0988F8F8B8F89E1 |
:10E6E000988D97FD03969595879595958795F50156 |
:10E6F0008183880F991F880F991F2F89388D281BB8 |
:10E70000390BC901880F8283EF89F88DD301ED930E |
:10E71000FC9303C0F501118212824A9422E030E09A |
:10E72000620E731E44E050E0840E951E6FE070E0B0 |
:10E73000A60EB71E47FEBACEE2E1C85E0C941EAD2F |
:10E7400084B1806A84B93D9A82E58CBD1DBC459A2E |
:10E7500081E08093360B8AEA8093470B83E88093AD |
:10E76000480B8AE08093490B10924B0B10924A0B96 |
:10E7700010924D0B10924C0B1092AF0B10926B0B32 |
:10E7800008953091360B332309F070C00DB407FEA5 |
:10E790006DC085E080932703459A2EB580913B0597 |
:10E7A00099278130910589F0823091051CF4892BDD |
:10E7B00021F03EC00297B9F03BC030936A0B209322 |
:10E7C0003C052138A9F581E008C0253549F4809140 |
:10E7D0003C05820F80933C0582E080933B0528C076 |
:10E7E00030933B0525C080916A0BE82FFF27E45743 |
:10E7F000F44F20838F5F80936A0B90913C058032A9 |
:10E80000A0F0291769F480E2ACE8BBE0ECE6FBE09D |
:10E810000D9001928A95E1F781E080936B0B02C025 |
:10E8200030936B0B10923B0503C0920F90933C0505 |
:10E830002091460B2232A0F4459800000000000011 |
:10E840000000E0913F0BF091400BE20FF11D808141 |
:10E850008EBD8091680B9081890F8093680B03C0F7 |
:10E8600081E08093360B2F5F2093460B0895EF9243 |
:10E87000FF920F931F93809189089927880F991F02 |
:10E88000880F991F7C010027F7FC0095102F8091BD |
:10E89000B2049091B304A091B404B091B504BC014A |
:10E8A000CD01A80197010E94E7AC30934B0B209358 |
:10E8B0004A0B8091AA049091AB04A091AC04B09152 |
:10E8C000AD04BC01CD01A80197010E94E7AC3093D3 |
:10E8D0004D0B20934C0B20912C0B30912D0B409124 |
:10E8E0002E0B50912F0BDA01C90173E0880F991F8D |
:10E8F000AA1FBB1F7A95D1F7820F931FA41FB51FC4 |
:10E90000820F931FA41FB51F209144013091450130 |
:10E910004091460150914701BC01CD010E94E7ACF6 |
:10E920003093530B2093520B8091C4049091C504F3 |
:10E9300020914B0330914C03821B930B9093590B06 |
:10E940008093580BE091BA04F091BB048091F70AD0 |
:10E950009091F80ABF010E94B2ACCB019B01220F3B |
:10E96000331F220F331F280F391F280F391F37FF7E |
:10E9700002C02D5F3F4F35952795359527953093EC |
:10E980004F0B20934E0B8091280B9091290BBF01C8 |
:10E990000E94B2AC9B01220F331F220F331F260FA0 |
:10E9A000371F260F371F37FF02C02D5F3F4F3595AA |
:10E9B0002795359527953093510B2093500B109246 |
:10E9C000BB041092BA041092F80A1092F70A10923F |
:10E9D000290B1092280B8091490B9927AA27BB2756 |
:10E9E000FC013A97E830F10508F05AC2E459FF4FAC |
:10E9F0000C9439AD8091340480935C0B8091330486 |
:10EA000080935D0B8091320480935E0B8091310482 |
:10EA100080935F0B809130048093600B80912F0472 |
:10EA20008093610B80912E048093620B80912D0462 |
:10EA30008093630B80911F048093640B80911F046B |
:10EA4000837F80931F04809101018093650B8091E7 |
:10EA50002601909127018093660B80911E0480937C |
:10EA6000670B42991DC280911E04877F80931E040C |
:10EA700017C28091B10B9091B20B90935D0B809374 |
:10EA80005C0B80913D0580935E0B8091B70B80936A |
:10EA90005F0B8091BE080E94D44A8093600B8091E6 |
:10EAA00043018093610B20913D05822F9927FC0142 |
:10EAB00014E0EE0FFF1F1A95E1F7E81BF90BE8577A |
:10EAC000F64F86858093620B80818093630B8681ED |
:10EAD0008093640B83818093650B87818093660BA1 |
:10EAE00085818093670B2F5F20933D05E22FFF27E1 |
:10EAF000EE0FFF1FEE0FFF1FEA50F74F8585181628 |
:10EB00000CF4CEC1222309F4CBC1822F99270196A0 |
:10EB10006DE070E00E94B2ACAC01282FE82FFF2717 |
:10EB2000EE0FFF1FEE0FFF1FEA50F74F85851816F7 |
:10EB300014F0442351F740933D05B2C18091020186 |
:10EB400080935C0B8091BF0880935D0B8091C0081F |
:10EB500080935E0B8091C10880935F0B8091C20807 |
:10EB60008093600B8091C6088093610B8091C708E9 |
:10EB70008093620B8091C8088093630B8091CB08CF |
:10EB80008093640B8091C9088093650B8091CA08BB |
:10EB90008093660B8091CC0881C18091BD088093E1 |
:10EBA0005C0B80919408863081F08091F102823470 |
:10EBB00051F00E944F85E82FFF27E856F94E8491C7 |
:10EBC0008093F10202C00E944F8580916605809378 |
:10EBD0005D0B8091DF0880935E0B8091D408809359 |
:10EBE0005F0B809115048093600B80916F0580937B |
:10EBF000610B80916D058093620B80916C05809311 |
:10EC0000630B10926F0510926D0510926C05809148 |
:10EC10007004909171049093650B8093640B8091C4 |
:10EC2000E3088093660B8091E40838C1F8948091E2 |
:10EC30007008E82FFF27EE0FFF1FE35CF54F0190F0 |
:10EC4000F081E02DE038F1051CF0EFE7F0E006C0C0 |
:10EC50002FEFE138F20714F4E1E8FFEFE0935C0BEB |
:10EC600080917108E82FFF27EE0FFF1FE35CF54F3F |
:10EC70000190F081E02DE038F1051CF0EFE7F0E0C5 |
:10EC800006C07FEFE138F70714F4E1E8FFEFE09307 |
:10EC90005D0B80916F08E82FFF27EE0FFF1FE35CED |
:10ECA000F54F0190F081E02DE038F1051CF0EFE721 |
:10ECB000F0E006C08FEFE138F80714F4E1E8FFEF69 |
:10ECC000E0935E0B80916E08E82FFF27EE0FFF1F89 |
:10ECD000E35CF54F0190F081E02DE038F1051CF088 |
:10ECE000EFE7F0E006C02FEFE138F20714F4E1E8B7 |
:10ECF000FFEF7894E0935F0B809159048093600B51 |
:10ED000080915A048093610B80915B048093620B25 |
:10ED100080915C048093630B80915D048093640B0D |
:10ED200080915E048093650B80915F048093660BF5 |
:10ED300080916004B3C08091FD05853018F0109279 |
:10ED4000FD0585E080935C0B8091CD0880935D0B81 |
:10ED50008091520490915304A0915404B0915504B1 |
:10ED6000BC01CD0125E030E040E050E00E94E7AC7E |
:10ED700030935F0B20935E0B80914E0490914F0473 |
:10ED8000A0915004B0915104BC01CD0125E030E0C8 |
:10ED900040E050E00E94E7AC3093610B2093600BA1 |
:10EDA0008091C3088093620B8091C4088093630BA9 |
:10EDB0008091C5088093640B809158048093650B03 |
:10EDC00080913E058093660B8091D6079091D7077E |
:10EDD00097FD039695958795959587955FC082E0F9 |
:10EDE00080935C0B86E080935D0B84E080935E0BE8 |
:10EDF00085E480935F0B809103018093600B809189 |
:10EE0000E2058093610B9091E3059093620B8F77FD |
:10EE10008093E20590719093E3058091E0088093E0 |
:10EE2000630B80911A0B8093640B8091FE0A809390 |
:10EE3000650B8091D0088093660B8091E8082EC006 |
:10EE40008091B50B9091B60B90935D0B80935C0B0A |
:10EE50008091710180935E0B8091700180935F0BB4 |
:10EE6000809100088093600B8091F0028093610B89 |
:10EE70008091CE088093620B8091DE0A8093630BB1 |
:10EE80008091F5029091F6029093650B8093640B4C |
:10EE90008091A4088093660B8091E5058093670BB1 |
:10EEA00080916B0B882309F46CC160916C0B80918D |
:10EEB000A801681719F08AEF8093A6016093A80152 |
:10EEC00081E08093910140916D0B50916E0BCA01CE |
:10EED00081509E4F8F5F9340B0F420916F0B309123 |
:10EEE000700BC90181509E4F8F5F934060F48091F9 |
:10EEF0007A0885FF08C050932B0540932A0530936C |
:10EF00002905209328058091730B9091740B21E0C3 |
:10EF10008936920724F49093930180939201209173 |
:10EF20007D0B30917E0B80912803909129038217ED |
:10EF3000930740F48091FB02882321F43093290346 |
:10EF400020932803862F99278936910509F48CC0D0 |
:10EF50008A36910544F48736910571F0883691051B |
:10EF600009F44DC016C18A36910509F407C18B36E4 |
:10EF7000910509F4C9C00DC180917F0B8093AC0B42 |
:10EF80008091800B8093AE0B8091810B8093AD0BB1 |
:10EF90008091820B809390018091830B8093B00BC2 |
:10EFA0008091840B8093A7018091850B80933A0513 |
:10EFB0008091860B8093270580912C04882351F043 |
:10EFC0008091870B9091880B97FD04C090937104FA |
:10EFD0008093700420913205309133058091890B24 |
:10EFE00090918A0B280F391F37FF02C02F5F3F4FC8 |
:10EFF000359527953093330520933205CAC080910B |
:10F000007F0B8093410B8091800B8093420B80910A |
:10F01000810B8093430B8091820B8093440B8091F2 |
:10F02000830B8093450B8091C6079091840B892BAD |
:10F030008093C6079091C70793708091850B8C7061 |
:10F04000982B9093C7078091860B80933805809109 |
:10F05000870B809398018091880B8093AF0B8091F0 |
:10F06000890B8093340595C080917F0B8093370B7B |
:10F070008091800B8093380B8091810B8093390BAA |
:10F080008091820B80933A0B8091830B9091840B3B |
:10F0900090933C0B80933B0B8091850B9091860B5A |
:10F0A00090933E0B80933D0B8091870B992787FDB2 |
:10F0B00090959093780A8093770A8091880B80933B |
:10F0C00047048091890B90918A0B9C01442737FD5E |
:10F0D0004095542FDA01C90163E0880F991FAA1FD8 |
:10F0E000BB1F6A95D1F7820F931FA41FB51F820F14 |
:10F0F000931FA41FB51F8093480490934904A093C5 |
:10F100004A04B0934B0445C080917F0B8093370530 |
:10F110008091800B809336058091810B809335051B |
:10F120009091820B992349F08091B201882319F0C4 |
:10F130008151833010F49093B2018091850B9091AE |
:10F14000860B90936B0580936A058091830B809367 |
:10F1500072058091840B809371058091870B809359 |
:10F1600070058091880B80936E058091890B90913A |
:10F170008A0B9093240B8093230B0BC00E94BC85B9 |
:10F1800008C010922B0510922A05109229051092A2 |
:10F1900028051F910F91FF90EF9008958091360BF5 |
:10F1A000882319F480E090E00895459887E49BE077 |
:10F1B0009093400B80933F0B90913905E92FFF27E7 |
:10F1C000E756FE4F9F5F9093390580818093490BEE |
:10F1D0009D3010F0109239051092360B0E94377452 |
:10F1E00081E08093460B8091470B8093680B8EBD26 |
:10F1F00081E090E0089587B18C6087B94298439888 |
:10F200001092400580E88093AA0110923F058093F8 |
:10F21000A90108958091770A9091780A81589F4FAB |
:10F2200039F08091770A9091780A815880934A0545 |
:10F23000809145058150809345058F3F09F052C16B |
:10F240008091B708809346058091B908809347055F |
:10F2500089E08093450580911F0499278073907001 |
:10F26000892B21F48091E30580FF1DC08091BB08AC |
:10F27000882351F080914805882319F484E0809315 |
:10F28000400581E0809348058091BC08882379F08F |
:10F2900080914905882319F484E080933F0581E03B |
:10F2A0008093490504C01092480510924905809149 |
:10F2B0004805882309F082C08091E508282F33276C |
:10F2C00024FF07C080915704882319F425FD8FC0BF |
:10F2D00090C09091B808983F48F08091F90A8D3D10 |
:10F2E00028F08091460588236CF00AC0983F78F09A |
:10F2F0008091F90A853059F48091460587FF02C054 |
:10F30000429A01C0429881E08093AA0154C0809142 |
:10F3100040058150809340058F3F09F06BC080917C |
:10F32000E80885FF2FC090914A05892F8695809324 |
:10F330004005992361F490933E058091460587FF2F |
:10F3400002C0429A01C042981092AA0153C081E0C3 |
:10F3500080933E058091AA0190914605882349F447 |
:10F3600080934A0580E48093AA0199230CF43FC05E |
:10F3700040C0982311F0429A01C04298869580932C |
:10F38000AA0138C08091F90A869580934005809142 |
:10F39000AA01813021F410924A0580E401C08695CB |
:10F3A0008093AA018091AA0190914605892311F0CA |
:10F3B000429A01C0429810923E051CC080914005BF |
:10F3C0008150809340058F3FA9F489E080934005E8 |
:10F3D0008091AA01813011F480E801C08695809364 |
:10F3E000AA018091AA019091BB08892311F0429A49 |
:10F3F00001C0429880914905882309F043C090914B |
:10F40000E50897FF07C080915704882319F496FDFB |
:10F4100052C053C09091BA08983F48F08091210B98 |
:10F420008D3D28F08091470588236CF00AC0983FF5 |
:10F4300078F08091210B853059F48091470587FF42 |
:10F4400002C0439A01C0439881E08093A90136C06D |
:10F4500080913F05815080933F058F3F79F58091E2 |
:10F46000210B869580933F058091A901813011F48D |
:10F4700080E401C086958093A9018091A9019091B3 |
:10F48000470517C080913F05815080933F058F3F0E |
:10F49000A9F489E080933F058091A901813011F49E |
:10F4A00080E801C086958093A9018091A90190917F |
:10F4B000BC08892311F0439A01C04398429B05C0C0 |
:10F4C00080911E04886080931E04439B06C0809137 |
:10F4D0001E04806180931E04089580911E048F7E17 |
:10F4E00080931E0408954FB724E130E0F894809192 |
:10F4F000C9008F778093C9008091C9008F7B80936A |
:10F50000C9008091C9008F7D8093C900832F9927FE |
:10F510008093CD002093CC008091C80082608093BE |
:10F52000C80080E18093C9008091CA008F778093E2 |
:10F53000CA008091CA008F7B8093CA008091CA0064 |
:10F540008F7D8093CA008091CA008F7E8093CA000D |
:10F550008091CA00877F8093CA008091C9008B7F09 |
:10F560008093C9008091CA0084608093CA00809112 |
:10F57000CA0082608093CA008091C80087FF03C0E0 |
:10F580008091CE00F9CF8091C90080688093C90036 |
:10F590004FBF0895EF92FF920F931F93CF93DF9386 |
:10F5A000482F00E010E08091AB01813061F41092AF |
:10F5B000AB0184E480934B0510924D0510924C05ED |
:10F5C00010924E0539C180914B05882319F421E032 |
:10F5D00030E001C0980190914C05992371F4232BE0 |
:10F5E00011F081E010C084E480934B0590934D05A9 |
:10F5F00090934C0590934E0508C1913069F4232BEC |
:10F6000009F0F9C082E080934C0580914D058F5F31 |
:10F6100080934D0583E0F7C09230D1F4232B09F09D |
:10F62000EAC083E080934B0540934E0590914D05D1 |
:10F63000923039F410924F0547FF03C081E0809368 |
:10F640004F0583E080934C059F5F90934D05DDC08F |
:10F65000933009F0D0C0232B09F0CDC090934B0517 |
:10F6600082E080934C0580914D058F5F80934D051E |
:10F6700020914E05822F9927782F6627842F99276E |
:10F68000682B792B80919408813049F47370CB01F9 |
:10F690008050924063E070E00E94B2AC17C08230AC |
:10F6A00061F47770CB018050944066E070E00E9476 |
:10F6B000B2AC2695269526950BC07370685671409E |
:10F6C000CB0177FD0196BC0175956795269526952A |
:10F6D000022F11270F7010700F5F1F4F0D30110593 |
:10F6E00008F082C07801E00EF11EF701E35CF54FEF |
:10F6F000808191819B01281B390BC90137FF03C011 |
:10F70000909581959F4F069704F5E091D708EE23D9 |
:10F7100051F0FF27EE0FFF1FE35CF54F80819181D1 |
:10F720008436910594F480915804883C30F480919B |
:10F730005804865F8093580408C088EC809358046E |
:10F7400080916F008F7D80936F00F701E35CF54F30 |
:10F75000808191819C01220F331F280F391F260FB2 |
:10F76000371F37FF02C02D5F3F4FE901D595C79581 |
:10F77000D595C795CB0101968C179D0714F4219759 |
:10F7800006C061507040C617D7070CF421968091CF |
:10F790005804843BD0F0F701E35CF54F8081918100 |
:10F7A000FE01E81BF90BCF0163E070E00E94B2ACF0 |
:10F7B000CB01880F991F860F971F23E83AE0E20ECE |
:10F7C000F31EF7019183808307C023E83AE0E20E3D |
:10F7D000F31EF70111821082000F111F035C154FF9 |
:10F7E000F801D183C08311C00231110570F081E0AE |
:10F7F0008093AB010AC081E08093AB0110924D056C |
:10F8000010924F0584E480934B0580914D05803123 |
:10F8100098F080914F05882331F48091AB018823C3 |
:10F8200011F48093420110924D0510924F051092F1 |
:10F830004C0584E480934B05E6E0CDB7DEB70C942D |
:10F840002AADCF93FC0197FF05C0CFEFF095E1956E |
:10F85000FF4F01C0C1E028E631E0CF01B9010E94AD |
:10F86000B2ACFC018B35910554F08B5590408A3534 |
:10F87000910538F484EB90E08E1B9F0BFC0141E076 |
:10F880000DC0CF01855B90408A35910518F4E45B8B |
:10F89000F04003C02E1B3F0BF9014FEFEE0FFF1F8F |
:10F8A000EF54F64F259134918C2F992787FD909531 |
:10F8B000289FB001299F700D389F700D1124842F4F |
:10F8C000992787FD9095689FA001699F500D789FAB |
:10F8D000500D1124CA01CF9108952AE530E0281B6C |
:10F8E000390BC9010E94217C0895CF93DF9380E0FA |
:10F8F0000E94919E80912601909127016AE070E01C |
:10F900000E94B2AC9F938F93809126019091270122 |
:10F910006AE070E00E94B2AC7F936F9385EB9AE04F |
:10F920009F938F93C4E8DEE9DF93CF93E091C905FD |
:10F93000F091CA0509952DB73EB7285F3F4F2DBFFF |
:10F940008091A601882361F186E00E94919E8091BA |
:10F95000980199279F938F9380913B0B90913C0B3B |
:10F960006AE070E00E949EAC7F936F938FED90E011 |
:10F970009F938F938091230B9091240B9F938F9350 |
:10F980008EEB9AE09F938F93DF93CF93E091C9051D |
:10F99000F091CA0509958DB79EB70C968DBF12C020 |
:10F9A00086E00E94919E8CEC9AE09F938F93DF9368 |
:10F9B000CF93E091C905F091CA0509950F900F907A |
:10F9C0000F900F9080913805882309F452C08091E0 |
:10F9D0005005909151050E94B11D882391F08091AE |
:10F9E000AC01882319F01092AC0103C081E0809330 |
:10F9F000AC018CED95E00E94A81D90935105809379 |
:10FA000050058091AC018823E1F080E00E94919E36 |
:10FA10001F921F929091380581E1989FC001112497 |
:10FA20008C59924F9F938F93DF93CF93E091C905A9 |
:10FA3000F091CA0509952DB73EB72A5F3F4F2DBFFC |
:10FA40003BC086E00E94919E8091380599279F9344 |
:10FA50008F9383ED9AE09F938F93DF93CF93E09101 |
:10FA6000C905F091CA0509958DB79EB706968DBF59 |
:10FA700023C0809165058823F9F00E94979E80E15C |
:10FA80000E94919E89EE98E09F938F93809101014F |
:10FA900099279F938F938FED9AE09F938F93DF9396 |
:10FAA000CF93E091C905F091CA0509952DB73EB7EE |
:10FAB000285F3F4F2DBF72C080E10E94919E8091D0 |
:10FAC000F3029091F4026CE370E00E949EAC9F936D |
:10FAD0008F938091F3029091F4026CE370E00E94A6 |
:10FAE0009EAC7F936F938091B50B9091B60B9F93D3 |
:10FAF0008F938AEE9AE09F938F93C4E8DEE9DF93B9 |
:10FB0000CF93E091C905F091CA05099580911A0B30 |
:10FB10002DB73EB7265F3F4F2DBF80FF29C08AE13A |
:10FB20000E94919E8091430199279F938F9380918A |
:10FB3000520490915304A0915404B0915504BC0117 |
:10FB4000CD0124E630E040E050E00E94E7AC3F9376 |
:10FB50002F9387EF9AE09F938F93DF93CF93E0915A |
:10FB6000C905F091CA0509958DB79EB708968DBF56 |
:10FB70008091F002882391F08AE10E94919E8EEF9D |
:10FB80009AE09F938F93DF93CF93E091C905F09113 |
:10FB9000CA0509950F900F900F900F90DF91CF91AC |
:10FBA0000895CF93DF9380E00E94919E8091BC09DD |
:10FBB000992787FD90959F938F938091AD09992701 |
:10FBC00087FD90959F938F9380919E09992787FD3C |
:10FBD00090959F938F9380918F09992787FD90959A |
:10FBE0009F938F9380E09BE09F938F93C4E8DEE91F |
:10FBF000DF93CF93E091C905F091CA05099580E1A3 |
:10FC00000E94919E2DB73EB7245F3F4F2DBF80913C |
:10FC1000F809992787FD90959F938F938091E90923 |
:10FC2000992787FD90959F938F938091DA09992763 |
:10FC300087FD90959F938F938091CB09992787FD9E |
:10FC400090959F938F9380E19BE09F938F93DF9399 |
:10FC5000CF93E091C905F091CA05099580916C0890 |
:10FC60002DB73EB7245F3F4F2DBF853098F480E11C |
:10FC70000E94919E80E29BE09F938F93DF93CF93AE |
:10FC8000E091C905F091CA0509950F900F900F906A |
:10FC90000F9018C08730B0F488E10E94919E8FEDDC |
:10FCA00090E09F938F9381E39BE09F938F93DF93EB |
:10FCB000CF93E091C905F091CA0509958DB79EB71C |
:10FCC00006968DBFDF91CF9108950F931F9380E02B |
:10FCD0000E94919E2AE030E08091B10B9091B20B8E |
:10FCE000B9010E949EAC9F938F938091B10B90912C |
:10FCF000B20BB9010E949EAC7F936F938091260155 |
:10FD000090912701B9010E94B2AC9F938F9380918B |
:10FD1000260190912701B9010E94B2AC7F936F93A5 |
:10FD20008AE39BE09F938F9304E81EE91F930F9350 |
:10FD3000E091C905F091CA05099580E10E94919E64 |
:10FD40008DB79EB70C968DBF8091B50B9091B60B79 |
:10FD50009F938F938091B30B9091B40B9F938F934C |
:10FD60008CE49BE09F938F931F930F93E091C905C1 |
:10FD7000F091CA0509958DB79EB708968DBF1F9162 |
:10FD80000F910895EF92FF920F931F9380E00E94CE |
:10FD9000919E8FEDE82EF12CFF92EF9280919201CF |
:10FDA000909193019F938F938091370599279F930B |
:10FDB0008F9388E59BE09F938F9304E81EE91F9340 |
:10FDC0000F93E091C905F091CA05099580E10E9461 |
:10FDD000919E8DB79EB70A968DBF80913505992764 |
:10FDE0009F938F93FF92EF928091360599279F936F |
:10FDF0008F938BE69BE09F938F931F930F93E091DC |
:10FE0000C905F091CA0509958DB79EB70A968DBFB1 |
:10FE10001F910F91FF90EF9008950F931F9380E033 |
:10FE20000E94919E8EE79BE09F938F9304E81EE9CA |
:10FE30001F930F93E091C905F091CA05099580E1E0 |
:10FE40000E94919E0F900F900F900F908DE89BE075 |
:10FE50009F938F931F930F93E091C905F091CA056B |
:10FE600009950F900F900F900F901F910F9108958B |
:10FE70000F931F9380E00E94919E8BE99BE09F93DC |
:10FE80008F9304E81EE91F930F93E091C905F09149 |
:10FE9000CA05099580E10E94919E0F900F900F90E6 |
:10FEA0000F908AEA9BE09F938F931F930F93E091AB |
:10FEB000C905F091CA0509950F900F900F900F900A |
:10FEC0001F910F91089580E00E94919E88EB9BE026 |
:10FED0009F938F9384E89EE99F938F93E091C90548 |
:10FEE000F091CA0509950F900F900F900F9008950B |
:10FEF00080E00E94919E89EC9BE09F938F9384E821 |
:10FF00009EE99F938F93E091C905F091CA050995E9 |
:10FF10000F900F900F900F9008951F93CF93DF9342 |
:10FF2000182F80E00E94919E8AED9BE09F938F9313 |
:10FF3000C4E8DEE9DF93CF93E091C905F091CA05EB |
:10FF400009950F900F900F900F9080916E05882368 |
:10FF500031F480E10E94919E86EE9BE009C0809181 |
:10FF6000390B833099F080E10E94919E81EF9BE0F4 |
:10FF70009F938F93DF93CF93E091C905F091CA05CA |
:10FF800009950F900F900F900F9080C08BE00E940A |
:10FF9000919E8091AD0199279F938F938CEF9BE069 |
:10FFA0009F938F93DF93CF93E091C905F091CA059A |
:10FFB000099580E10E94919E8DB79EB706968DBFF0 |
:10FFC0008091520490915304A0915404B09155042F |
:10FFD000BC01CD0124E630E040E050E00E94E7ACF7 |
:10FFE0003F932F938091230B9091240B9F938F939A |
:10FFF00080E09CE09F938F93DF93CF93E091C905BE |
:020000021000EC |
:10000000F091CA0509958DB79EB708968DBF80916E |
:100010005205882331F08EE00E94919E81E19CE0A0 |
:1000200005C08EE00E94919E84E19CE09F938F9397 |
:10003000DF93CF93E091C905F091CA0509950F9020 |
:100040000F900F900F901F3251F49091AD0180915D |
:100050006E059817D8F49F5F9093AD0109C01F34C7 |
:1000600059F48091AD01823088F081508093AD01C8 |
:1000700081E0809352050AC01F3141F48091AD01A7 |
:10008000882321F080936C0510925205DF91CF9167 |
:100090001F9108951F93CF93DF93182F80E00E9444 |
:1000A000919E87E19CE09F938F93C4E8DEE9DF9304 |
:1000B000CF93E091C905F091CA0509950F900F9073 |
:1000C0000F900F9080916E05882399F480E10E9433 |
:1000D000919E82E29CE09F938F93DF93CF93E09178 |
:1000E000C905F091CA0509950F900F900F900F90D8 |
:1000F00097C08BE00E94919E8091AE0199279F93BB |
:100100008F938DE29CE09F938F93DF93CF93E09149 |
:10011000C905F091CA0509958DB79EB706968DBFA2 |
:1001200080917105882359F180E10E94919E809110 |
:10013000480490914904A0914A04B0914B04BC0139 |
:10014000CD0124E630E040E050E00E94E7AC3F9370 |
:100150002F9380916A0590916B059F938F9381E314 |
:100160009CE09F938F93DF93CF93E091C905F0912B |
:10017000CA0509958DB79EB708968DBF12C088E154 |
:100180000E94919E83E49CE09F938F93DF93CF9393 |
:10019000E091C905F091CA0509950F900F900F9055 |
:1001A0000F9080915305882331F08EE00E94919E3C |
:1001B00084E59CE005C08EE00E94919E87E59CE06E |
:1001C0009F938F93DF93CF93E091C905F091CA0578 |
:1001D00009950F900F900F900F901F3251F490914E |
:1001E000AE0180916E059817D8F49F5F9093AE0191 |
:1001F00009C01F3459F48091AE01823088F08150DB |
:100200008093AE0181E0809353050AC01F3141F411 |
:100210008091AE01882321F080936D0510925305E3 |
:10022000DF91CF911F9108951F93CF93DF93182FE4 |
:100230008091100CC4E8DEE9882391F40E94919E1D |
:100240008AE59CE09F938F93DF93CF93E091C9055C |
:10025000F091CA0509950F900F900F900F9016C05E |
:1002600080E00E94919E80E19CE09F938F9388E6BE |
:100270009CE09F938F93DF93CF93E091C905F0911A |
:10028000CA0509958DB79EB706968DBF80916E05FC |
:10029000C4E8DEE9882399F480E10E94919E8FE60C |
:1002A0009CE09F938F93DF93CF93E091C905F091EA |
:1002B000CA0509950F900F900F900F9089C080E1AB |
:1002C0000E94919E8091AF0199279F938F938AE717 |
:1002D0009CE09F938F93DF93CF93E091C905F091BA |
:1002E000CA0509958DB79EB706968DBF8091710599 |
:1002F0008823E9F088E10E94919E809171059927F9 |
:100300009F938F938091720599279F938F9383E892 |
:100310009CE09F938F93DF93CF93E091C905F09179 |
:10032000CA0509958DB79EB708968DBF12C088E1A2 |
:100330000E94919E8BE89CE09F938F93DF93CF93D5 |
:10034000E091C905F091CA0509950F900F900F90A3 |
:100350000F9080915405882331F08EE10E94919E88 |
:1003600081E99CE005C08EE10E94919E84E99CE0B9 |
:100370009F938F93DF93CF93E091C905F091CA05C6 |
:1003800009950F900F900F900F901F3251F490919C |
:10039000AF0180916E059817D8F49F5F9093AF01DD |
:1003A00009C01F3459F48091AF01823088F0815028 |
:1003B0008093AF0181E0809354050AC01F3141F45E |
:1003C0008091AF01882321F080936F05109254052E |
:1003D000DF91CF911F9108951F93CF93DF93182F33 |
:1003E0008091100CC4E8DEE9882391F40E94919E6C |
:1003F00087E99CE09F938F93DF93CF93E091C905AA |
:10040000F091CA0509950F900F900F900F9016C0AC |
:1004100080E00E94919E80E19CE09F938F9385EA0B |
:100420009CE09F938F93DF93CF93E091C905F09168 |
:10043000CA0509958DB79EB706968DBF80916E054A |
:10044000882361F480E10E94919E8CEA9CE09F9356 |
:100450008F9384E89EE99F938F930FC08091390B0F |
:10046000C4E8DEE9833099F080E10E94919E87EB39 |
:100470009CE09F938F93DF93CF93E091C905F09118 |
:10048000CA0509950F900F900F900F908AC080E1D8 |
:100490000E94919E8091B00199279F938F9382EC47 |
:1004A0009CE09F938F93DF93CF93E091C905F091E8 |
:1004B000CA0509958DB79EB706968DBF80917105C7 |
:1004C0008823E9F088E10E94919E80917105992727 |
:1004D0009F938F938091720599279F938F938CECB4 |
:1004E0009CE09F938F93DF93CF93E091C905F091A8 |
:1004F000CA0509958DB79EB708968DBF12C088E1D1 |
:100500000E94919E84ED9CE09F938F93DF93CF9305 |
:10051000E091C905F091CA0509950F900F900F90D1 |
:100520000F9080915505882331F08EE10E94919EB5 |
:100530008AED9CE005C08EE10E94919E8DED9CE0CD |
:100540009F938F93DF93CF93E091C905F091CA05F4 |
:1005500009950F900F900F900F901F3251F49091CA |
:10056000B00180916E059817E0F49F5F9093B00101 |
:1005700009C01F3459F48091B001823090F081504D |
:100580008093B00181E0809355050BC01F3149F481 |
:100590008091B001882329F0806880936F051092C4 |
:1005A0005505DF91CF911F9108950F931F93CF931E |
:1005B000DF938091A601C4E8DEE9882309F47DC0B9 |
:1005C00080E00E94919E8091380B99279F938F9392 |
:1005D00080913A0B99279F938F9380EE9CE09F9395 |
:1005E0008F938E01DF93CF93E091C905F091CA05F7 |
:1005F00009958DB79EB708968DBF8091390B8330D2 |
:1006000031F48CE00E94919E8FEE9CE005C08CE05E |
:100610000E94919E84EF9CE09F938F93DF93CF93F2 |
:10062000E091C905F091CA0509950F900F900F90C0 |
:100630000F908091370B81FF12C08CE00E94919E39 |
:1006400089EF9CE09F938F931F930F93E091C905CF |
:10065000F091CA0509950F900F900F900F9080E1CF |
:100660000E94919E8091980199279F938F938FED7F |
:1006700090E09F938F9380913D0B90913E0B9F93C1 |
:100680008F9380913B0B90913C0B6AE070E00E944D |
:100690009EAC7F936F938EEF9CE09F938F9384E843 |
:1006A0009EE99F938F93E091C905F091CA05099542 |
:1006B0008DB79EB70C968DBF12C082E00E94919EAE |
:1006C00081E19DE09F938F93DF93CF93E091C905E4 |
:1006D000F091CA0509950F900F900F900F90DF9140 |
:1006E000CF911F910F910895CF93C82F2091560558 |
:1006F0002093570599278F329105E1F080339105BA |
:100700001CF44F9779F027C08F349105D9F08F38BA |
:10071000910509F586E0289FF0011124E959F54F6C |
:10072000849117C086E0289FF0011124E859F54F05 |
:1007300084910FC086E0289FF0011124E759F54FFE |
:10074000849107C086E0289FF0011124E659F54FF7 |
:100750008491809356059091560580915705981382 |
:10076000C0E08091B101282F33278F5F8093B101C2 |
:1007700020FD02C0CF3089F0C09358050E94979E9B |
:100780009091560586E0989FF0011124E559F54FA8 |
:10079000259134918C2FF901099580E090E0CF915B |
:1007A00008951092B20B1092B10B1092B60B1092EA |
:1007B000B50B1092B40B1092B30B1092B70B82E3EF |
:1007C00090E00E94A81D90935A05809359050895C2 |
:1007D0009927FC0124E0EE0FFF1F2A95E1F7E81BA3 |
:1007E000F90BE857F64F95819F3F19F480E090E0B0 |
:1007F0000895993C18F4892F99270895808182FFE4 |
:1008000007C08AE0989FC00111248850974008953E |
:10081000892F99270895A0E0B0E0E1E1F4E80C9475 |
:100820000BAD8091590590915A050E94B11D882306 |
:1008300009F4CFC08091590590915A05C2969093C2 |
:100840005A0580935905C0E0D0E07E01BB247FEFBC |
:10085000C72E8091B70B8E3F21F481E08093F00288 |
:1008600004C08F3F11F4B092F002DD2408E819E0D3 |
:10087000F801838187FF17C0B3948581893C30F0EC |
:100880008D2D0E94E883C80FD91F02C0C80FD11D4B |
:10089000F8018181E80EF11C8681C81610F0C82E7F |
:1008A00002C01092F002D394015F1F4FFBE0FD15D0 |
:1008B000F8F6C092B70BEF2841F520915F05309113 |
:1008C00060054091610550916205BB27A52F942FCB |
:1008D000832F90935E0580935D05AA27BB27281B75 |
:1008E000390B4A0B5B0BCE01AA27BB27280F391FF8 |
:1008F0004A1F5B1F20935F0530936005409361059D |
:1009000050936205C5E0D0E013C080915D059091E1 |
:100910005E058C179D0718F4C81BD90B02C0C0E0F8 |
:10092000D0E08B2D9927880F991FC80FD91F2596C6 |
:10093000D093B20BC093B10BCF3FD10578F4809127 |
:100940002601909127018C9F90018D9F300D9C9FD7 |
:10095000300D1124C90164E670E013C0CE019695F4 |
:100960008795969587952091260130912701289F9C |
:10097000A001299F500D389F500D1124CA0169E133 |
:1009800070E00E949EAC7093B40B6093B30B8091A7 |
:100990005B0590915C058C0F9D1F90935C05809387 |
:1009A0005B0552E0813D9507A0F02091B50B309199 |
:1009B000B60B2F5F3F4F805D9240E2E0813D9E0786 |
:1009C000C0F790935C0580935B053093B60B209342 |
:1009D000B50BE9E0CDB7DEB70C9427AD30917305C8 |
:1009E000832F9927FC0124E0EE0FFF1F2A95E1F7E2 |
:1009F000E81BF90BE857F64F2781422F552747FD93 |
:100A00005095809174059927841795072CF42093AD |
:100A10007405309376050AC0222341F08091750554 |
:100A200099274817590714F420937505832F8F5F72 |
:100A3000809373058C30D0F010927305809175050A |
:100A40008F3F19F08093680502C01092680580916D |
:100A500074058093690580917605809367058FEF13 |
:100A6000809375051092740510927605089595E1AE |
:100A7000899F802D11240E945DA480E090E19F93C6 |
:100A80008F938FE294EA9F938F93E091C905F09141 |
:100A9000CA0509950F900F900F900F900895CF936E |
:100AA000C0E09091B2019093660580911F0485FF8C |
:100AB00013C080911604882331F080919408863009 |
:100AC00011F4CEE001C0C0E1992301F180917705D6 |
:100AD0008031E1F4C92F1AC090913805892F8150D7 |
:100AE0008232B0F480915704882349F4E92FFF271C |
:100AF000EE0FFF1FE15EF24F8491882349F4E92F46 |
:100B0000FF27EE0FFF1FE25EF24FC491CC2351F49A |
:100B10008091E80886FD03C01092B20105C0C09123 |
:100B2000B20102C0C0936605809177058C1771F4FD |
:100B300080917805909179050E94B11D882319F460 |
:100B400080E090E017C080EA9FE002C080ED97E06F |
:100B50000E94A81D9093790580937805CC2331F0ED |
:100B60008091B201C81711F41092B201C0937705B9 |
:100B70008C2F9927CF91089520E030E050E08091AC |
:100B80008A0B992789389105E9F08A38910564F430 |
:100B90008230910539F1833091051CF40197F9F009 |
:100BA00028C0039719F125C08D389105A1F08E3822 |
:100BB000910524F48A38910541F01BC08E389105C7 |
:100BC00039F017C02AE13CE008C022EF3CE005C044 |
:100BD00028EB3BE002C024EE3BE05CE20AC02DECD7 |
:100BE00032E002C020EE32E054E003C020E13CE0FD |
:100BF00059E090917F0B40E08091800B481770F492 |
:100C0000951760F4D901A90FB11DE42FFF27E4590E |
:100C1000F44F85898C939F5F4F5FEECF089520E35B |
:100C200035E7809143018B3211F08D32F9F48091D8 |
:100C30007F08282F332780914C0490914D04829F88 |
:100C4000A001839F500D929F500D1124CA0163E0B3 |
:100C500070E00E94B2ACCB019B01205D3A48C19686 |
:100C6000C19708F03FC02EEF34E73CC0803229F531 |
:100C700080911F0481FF36C0209163053091640587 |
:100C8000205D3A4855E72133350748F085E7243998 |
:100C9000380718F420E335E702C02456304045E712 |
:100CA00020333407F8F454E72D3C350718F020E3DF |
:100CB00035E718C02C593F4F15C08E3549F4909137 |
:100CC00047048AE0989F90011124205D3A480AC0A9 |
:100CD000863741F4909147048AE0989FC00111241F |
:100CE000281B390BC90108951F9399278A3891054C |
:100CF00009F4ABC18B38910524F48938910551F082 |
:100D000064C38D38910509F497C28E38910509F4B2 |
:100D1000F0C15BC30E944F85182F8093F40C809123 |
:100D2000520490915304A0915404B0915504BC0115 |
:100D3000CD0124E630E040E050E00E94E7ACDA016B |
:100D4000C9018C509E4F9093200C80931F0C11234F |
:100D500019F40E940F8602C080E395E79093260C59 |
:100D60008093250C8091250C9091260C9093280C53 |
:100D70008093270C90932A0C8093290C20911F0CB0 |
:100D80003091200C8091230C9091240C2817390766 |
:100D900024F43093240C2093230C8091210C909107 |
:100DA000220C8217930724F43093220C2093210CF9 |
:100DB00010921C0C8AE19CE0909391058093900521 |
:100DC000809143018093400C80911E0480FF02C0FB |
:100DD00083E401C080E28093410C209138052223F6 |
:100DE00009F1822F6AE00E9492AC805D80932B0C07 |
:100DF000822F0E9492AC892F805D80932C0C8AE315 |
:100E000080932D0C81E1289FF0011124AEE2BCE01B |
:100E1000EC59F24F9FE084918D939150319697FF5A |
:100E2000FACFDEC080911604882361F0ABE2BCE00B |
:100E3000EEEBFFE094E184918D939150319697FF12 |
:100E4000FACFC0C280911F0485FF0CC0ABE2BCE0AA |
:100E5000E4EDFFE094E184918D939150319697FFFA |
:100E6000FACFB0C280916505882301F1ABE2BCE006 |
:100E7000E7EBFFE096E084918D939150319697FFD8 |
:100E8000FACF80910101805D80932F0CA2E3BCE03A |
:100E9000E9EEF8E09BE081918D93915097FFFBCFB5 |
:100EA00080E280933D0C80933E0CB8C03091710578 |
:100EB000332309F497C087E580932B0C80E580935A |
:100EC0002C0C40E240932D0C20917205822F6AE099 |
:100ED0000E9492AC805D80932E0C822F0E9492AC77 |
:100EE000892F805D80932F0C8FE28093300C832FAD |
:100EF0000E9492AC805D8093310C832F0E9492AC53 |
:100F0000892F805D8093320C4093330C20916A05C9 |
:100F100030916B0583E0293E380780F0C90168EE07 |
:100F200073E00E949EACCB01805D8093340CC901BC |
:100F300068EE73E00E949EAC9C0102C04093340CAA |
:100F40002536310580F0C90164E670E00E949EAC50 |
:100F5000CB01805D8093350CC90164E670E00E948E |
:100F60009EAC9C0103C080E28093350CC9016AE00D |
:100F700070E00E949EACCB01805D8093360CC9016D |
:100F80006AE070E00E949EAC805D8093370C8DE635 |
:100F90008093380C80E28093390C209170052536BF |
:100FA00060F0822F64E60E9492AC805D80933A0CE0 |
:100FB000822F0E9492AC292F02C080933A0C822F7C |
:100FC0006AE00E9492AC805D80933B0C822F0E946D |
:100FD00092AC892F805D80933C0C83E780933D0C1D |
:100FE00080E261CF809143048823D9F4ABE2BCE076 |
:100FF000ECEEFFE090E184918D939150319697FF54 |
:10100000FACF82E380933B0C8EE280933C0C80E32A |
:1010100080933D0C86E380933E0C85E680933F0CE5 |
:10102000D1C1ABE2BCE0EAEEFFE094E184918D93A4 |
:101030009150319697FFFACF8091F002882309F4FE |
:10104000C1C182E580932B0CBDC180915204909167 |
:101050005304A0915404B0915504BC01CD0124E681 |
:1010600030E040E050E00E94E7ACDA01C9018C506A |
:101070009E4F9093080D8093070D8091F40C882368 |
:1010800019F40E940F8602C080E395E790930A0D41 |
:101090008093090D88E780930B0D8091380B809326 |
:1010A0000C0D8091370B81FF02C084E407C0809152 |
:1010B000390B833011F480E201C081E280930D0D81 |
:1010C00082EF9CE090939105809390058091980128 |
:1010D0008093190D80910D0D80931B0D80913D0B18 |
:1010E00090913E0B97FD01969595879580930E0DF7 |
:1010F00069C10E94EE848091520490915304A091A2 |
:101100005404B0915504BC01CD0124E630E040E028 |
:1011100050E00E94E7ACDA01C9018C509E4F9093D9 |
:10112000D30B8093D20B809126019091270190934D |
:10113000CD0B8093CC0B8091260190912701909349 |
:10114000CF0B8093CE0B8091230B9091240B97FDB6 |
:101150000196959587958093BE0B8093C50B209142 |
:101160003D0B30913E0B37FF02C02F5F3F4F35954F |
:1011700027952093C30B80913B0B90913C0B64E12E |
:1011800070E00E949EAC6093C40B2093CA0B6093E6 |
:10119000CB0B8091F40C882319F40E940F8602C0B7 |
:1011A00080E395E79093DB0B8093DA0B88E78093DD |
:1011B000DC0B80912601909127019093D70B8093AF |
:1011C000D60B809168058C5E8093D00B8091690569 |
:1011D0008C5E8093D10B8091B50B9091B60B6AE039 |
:1011E00070E00E949EAC7093D90B6093D80B8091F5 |
:1011F000F40C8093BA0B8091B10B9091B20B909349 |
:10120000D50B8093D40B88EB9BE090939105809352 |
:1012100090052091F3023091F402C9016CE370E073 |
:101220000E949EAC6093DF0BC9016CE370E00E94EA |
:101230009EAC8093E00BC6C00E94EE8480913B0B75 |
:1012400090913C0B64E670E00E949EAC7093FA0BA8 |
:101250006093F90B8091230B9091240B97FD0196DD |
:10126000959587958093EA0B8091920190919301D7 |
:1012700097FD0196959587958093EB0B80910008DB |
:101280008093EE0B80913D0B90913E0B97FD019664 |
:10129000959587958093EF0B80910201482F5527F4 |
:1012A0009A012E5F3F4F80912601909127012817C8 |
:1012B000390784F48091260190912701841B950BB6 |
:1012C0009C01220F331F280F391F822F86508093D5 |
:1012D000F60B02C01092F60B8091F60B853618F0D3 |
:1012E00084E68093F60B8091380599279093F80B4C |
:1012F0008093F70B8091520490915304A091540471 |
:10130000B0915504BC01CD0124E630E040E050E04E |
:101310000E94E7ACDA01C9018C509E4F9093FC0B00 |
:101320008093FB0B80912601909127019093F10B04 |
:101330008093F00B80912601909127019093F30BFD |
:101340008093F20B8091F40C882319F40E940F868D |
:1013500002C080E395E79093FE0B8093FD0B809194 |
:10136000F40C88588093FF0B8091260190912701FF |
:101370009093030C8093020C809168058C5E80939F |
:10138000F40B809169058C5E8093F50B8091B50B11 |
:101390009091B60B6AE070E00E949EAC7093050CD1 |
:1013A0006093040C1092E60B8091B10B9091B20BFC |
:1013B0009093010C8093000C84EE9BE09093910538 |
:1013C000809390052CE230E002C020E030E0C901BB |
:1013D0001F910895EF92FF920F931F93CF93DF9386 |
:1013E00080916305909164059C0173E0220F331F87 |
:1013F0007A95E1F7281B390B80913E0390913F03CA |
:10140000280F391F37FF02C0295F3F4F63E0359532 |
:1014100027956A95E1F730936405209363058091E1 |
:101420007B0599278330910511F40C94E693843061 |
:10143000910564F48130910509F43DC38230910532 |
:101440000CF04EC7892B91F00C94429A853091058F |
:1014500011F40C949A968530910514F40C945A95D5 |
:10146000069711F40C9424980C94429A80917A0572 |
:10147000282F3327442755278F5F80937A05F9015A |
:101480002131310510F00C943F9AEC58FF4F0C9429 |
:1014900039AD80911F0485FF2AC080E00E945DA4C1 |
:1014A00080912601909127016AE070E00E94B2AC21 |
:1014B0009F938F9380912601909127016AE070E0BD |
:1014C0000E94B2AC7F936F9386E190E19F938F93DC |
:1014D00080E594EA9F938F93E091C905F091CA0546 |
:1014E00009952DB73EB7285F3F4F2DBF28C080E03C |
:1014F0000E945DA480912601909127016AE070E02E |
:101500000E94B2AC9F938F93809126019091270106 |
:101510006AE070E00E94B2AC7F936F9383E290E147 |
:101520009F938F938FE294EA9F938F93E091C905E5 |
:10153000F091CA0509958DB79EB708968DBF809129 |
:101540001A0B80FF40C080916F048823E9F08AE085 |
:101550000E945DA48091430199279F938F9380916E |
:10156000520490915304A0915404B0915504BC01CD |
:10157000CD0124E630E040E050E00E94E7AC3F932C |
:101580002F9380E390E1CDC68AE00E945DA4809114 |
:10159000520490915304A0915404B0915504BC019D |
:1015A000CD0124E630E040E050E00E94E7AC3F93FC |
:1015B0002F938CE390E19F938F938FE294EA9F9314 |
:1015C0008F930C945A998AE00E945DA487E490E17D |
:1015D0000C94439880911F0485FF2AC085E10E94E6 |
:1015E0005DA48091F3029091F4026CE370E00E949C |
:1015F0009EAC9F938F938091F3029091F4026CE3E1 |
:1016000070E00E949EAC7F936F9381E590E19F9381 |
:101610008F9380E594EA9F938F93E091C905F091B1 |
:10162000CA0509952DB73EB7285F3F4F2DBF28C08B |
:1016300085E10E945DA48091F3029091F4026CE335 |
:1016400070E00E949EAC9F938F938091F3029091E3 |
:10165000F4026CE370E00E949EAC7F936F938EE582 |
:1016600090E19F938F938FE294EA9F938F93E09101 |
:10167000C905F091CA0509958DB79EB708968DBF2B |
:101680008FE10E945DA480E690E09F938F9380910C |
:10169000230B9091240B9F938F938BE690E19F9364 |
:1016A0008F93CFE2D4EADF93CF93E091C905F09115 |
:1016B000CA05099580911E042DB73EB7285F3F4F9C |
:1016C0002DBF80FF06C089E20E945DA486E790E1FD |
:1016D00070C389E20E945DA488E790E1DCC6809136 |
:1016E0001F0485FF1BC08AE20E945DA48091B50B98 |
:1016F0009091B60B9F938F938AE790E19F938F937E |
:1017000080E594EA9F938F93E091C905F091CA0513 |
:1017100009958DB79EB706968DBF1BC08AE20E94C1 |
:101720005DA48091B50B9091B60B9F938F9382E847 |
:1017300090E19F938F938FE294EA9F938F93E09130 |
:10174000C905F091CA0509952DB73EB72A5F3F4FED |
:101750002DBF86E30E945DA48091B10B9091B20BE6 |
:101760006AE070E00E949EAC9F938F938091B10BD2 |
:101770009091B20B6AE070E00E949EAC7F936F93F1 |
:101780008AE890E19F938F938FE294EA9F938F93DF |
:101790000C94359489E00E945DA486E990E19F93C2 |
:1017A0008F930FE214EA1F930F93E091C905F09114 |
:1017B000CA0509958EE10E945DA40F900F900F90CD |
:1017C0000F9088E990E19F938F931F930F93E0917F |
:1017D000C905F091CA05099583E30E945DA40F90A5 |
:1017E0000F900F900F908AE990E19F938F931F9332 |
:1017F0000F93E091C905F091CA0509958FE30E9406 |
:101800005DA40F900F900F900F908CE990E19F9343 |
:101810008F931F930F93E091C905F091CA05099525 |
:101820008EE70E945DA40F900F900F900F9082EBB7 |
:1018300090E10C948D958091A601882309F462C0F3 |
:101840008DE50E945DA488EC90E19F938F93CFE299 |
:10185000D4EADF93CF93E091C905F091CA050995C9 |
:1018600084E50E945DA40F900F900F900F908091DF |
:10187000380B99279F938F938AEC90E19F938F93D6 |
:10188000DF93CF93E091C905F091CA0509958EE5E4 |
:101890000E945DA42DB73EB72A5F3F4F2DBF8091B8 |
:1018A0003B0B90913C0B6AE070E00E949EAC7F93F2 |
:1018B0006F9383ED90E19F938F93DF93CF93E091AC |
:1018C000C905F091CA0509958DB79EB706968DBFDB |
:1018D0008091390B833081F48091370B81FF06C0F2 |
:1018E0008BE50E945DA48DED90E1D5C58BE50E944E |
:1018F0005DA480EE90E1CFC58BE50E945DA483EEF0 |
:1019000090E13CC784E00C94C6988091A60188239E |
:1019100011F40C94C59880917D055FE2E52E54EAA0 |
:10192000F52E882309F44BC089E60E945DA48091BE |
:10193000370599279F938F9386EE90E19F938F931E |
:10194000FF92EF92E091C905F091CA05099585E7EC |
:101950000E945DA42DB73EB72A5F3F4F2DBF8091F7 |
:10196000980199279F938F9300E610E01F930F93A0 |
:1019700080913D0B90913E0B9F938F9381EF90E16F |
:101980009F938F93FF92EF92E091C905F091CA0562 |
:10199000099582E70E945DA48DB79EB70A968DBF18 |
:1019A0008091350599279F938F931F930F93809173 |
:1019B000360599279F938F938DEF90E18AC689E62C |
:1019C0000E945DA48091980199279F938F9380E650 |
:1019D00090E09F938F9380913D0B90913E0B9F934E |
:1019E0008F9380913A0B99279F938F938DE091E18C |
:1019F0009F938F93FF92EF92E091C905F091CA05F2 |
:101A000009958DB79EB70C960C9462999091380504 |
:101A10009923D1F080918D05882381F0933270F461 |
:101A200087E00E94378583E90E945DA48091380594 |
:101A300099279F938F9386E291E1E6C383E90E9401 |
:101A40005DA481E391E1F5C380911F044FE2E42E90 |
:101A500044EAF42E85FF07C084E90E945DA487E371 |
:101A600091E10C94AF9583E90E945DA48AE491E131 |
:101A70000C94AF958091570D823029F40E9462A496 |
:101A800085E00C94389A863069F480917D0588232E |
:101A900021F010927D050C943C9A81E080937D05A5 |
:101AA0000C943C9A883011F00C943C9A0E9462A4E9 |
:101AB00081E00C94389A80917A05282F33274427A7 |
:101AC00055278F5F80937A05F9012131310510F098 |
:101AD0000C943F9AEB57FF4F0C9439AD80911F0443 |
:101AE00085FF44C080E00E945DA48091B50B909179 |
:101AF000B60B9F938F9380912601909127016AE006 |
:101B000070E00E94B2AC9F938F93809126019091D8 |
:101B100027016AE070E00E94B2AC7F936F938091DE |
:101B2000F3029091F4026CE370E00E949EAC9F93EC |
:101B30008F938091F3029091F4026CE370E00E9425 |
:101B40009EAC7F936F9380E691E19F938F9380E5A6 |
:101B500094EA9F938F93E091C905F091CA05099586 |
:101B60002DB73EB7225F3F4F0C94089780E00E944C |
:101B70005DA48091B50B9091B60B9F938F9380914C |
:101B80002601909127016AE070E00E94B2AC9F9319 |
:101B90008F9380912601909127016AE070E00E9466 |
:101BA000B2AC7F936F938091F3029091F4026CE357 |
:101BB00070E00E949EAC9F938F938091F30290916E |
:101BC000F4026CE370E00E949EAC7F936F938BE70E |
:101BD00091E1FBC285E10E945DA480E690E09F93C5 |
:101BE0008F938091230B9091240B9F938F9386E981 |
:101BF00091E19F938F93CFE2D4EADF93CF93E0916B |
:101C0000C905F091CA05099580911A0B2DB73EB709 |
:101C1000285F3F4F2DBF80FF51C080916F04882304 |
:101C200039F18FE10E945DA4809152049091530498 |
:101C3000A0915404B0915504BC01CD0124E630E0DC |
:101C400040E050E00E94E7AC3F932F9380EA91E19F |
:101C50009F938F938FE394EA9F938F93E091C905AD |
:101C6000F091CA0509958DB79EB706968DBF38C00D |
:101C70008FE10E945DA48091520490915304A09141 |
:101C80005404B0915504BC01CD0124E630E040E09D |
:101C900050E00E94E7AC3F932F9389EA91E19F9334 |
:101CA0008F93DF93CF93E091C905F091CA05099511 |
:101CB0002DB73EB72A5F3F4F2DBF12C08FE10E9464 |
:101CC0005DA482EB91E19F938F93DF93CF93E0919B |
:101CD000C905F091CA0509950F900F900F900F90CC |
:101CE00089E20E945DA48091430199279F938F937D |
:101CF0008CEB91E12BC48091A6018823F9F08BE253 |
:101D00000E945DA48091980199279F938F93809161 |
:101D10003B0B90913C0B6AE070E00E949EAC7F937D |
:101D20006F9380E690E09F938F9380913D0B90910D |
:101D30003E0B9F938F938FEB91E16DC182E00C94EA |
:101D4000C6988FE30E945DA48091B30B9091B40B71 |
:101D50009F938F938091B10B9091B20B6AE070E0EA |
:101D60000E949EAC9F938F938091B10B9091B20B88 |
:101D70006AE070E00E949EAC7F936F9386ED91E1E4 |
:101D80009F938F93CFE2D4EADF93CF93E091C9057D |
:101D9000F091CA05099580911E042DB73EB7265FC4 |
:101DA0003F4F2DBF80FF0BC082E50E945DA48AEEED |
:101DB00091E19F938F938FE394EA0C94479882E587 |
:101DC0000E945DA48DEE91E166C38091A6013FE281 |
:101DD000E32E34EAF32E882309F44BC084E50E94F5 |
:101DE0005DA48091380B99279F938F9380913A0B34 |
:101DF00099279F938F9380EF91E19F938F93E701B2 |
:101E0000FF92EF92E091C905F091CA0509958DB74F |
:101E10009EB708968DBF8091390B833051F484E6CC |
:101E20000E945DA483E092E19F938F93FF92EF92D3 |
:101E30000BC084E60E945DA489E092E19F938F939A |
:101E400080E594EA9F938F93E091C905F091CA05CC |
:101E500009950F900F900F900F908091370B81FD97 |
:101E600002C00C94449A84E60E945DA48FE092E143 |
:101E700012C384E50E945DA485E192E170C6809161 |
:101E80007C052FE2E22E24EAF22E882309F45BC0BF |
:101E900089E60E945DA483E00E94E8836AE070E026 |
:101EA0000E949EAC9F938F9383E00E94E8836AE038 |
:101EB00070E00E949EAC7F936F9382E00E94E88363 |
:101EC0006AE070E00E949EAC9F938F9382E00E9434 |
:101ED000E8836AE070E00E949EAC7F936F9381E09C |
:101EE0000E94E8836AE070E00E949EAC9F938F930B |
:101EF00081E00E94E8836AE070E00E949EAC7F93DC |
:101F00006F9380E00E94E8836AE070E00E949EACDC |
:101F10009F938F9380E00E94E8836AE070E00E94C4 |
:101F20009EAC7F936F938BE292E19F938F93FF928E |
:101F3000EF92E091C905F091CA0509952DB73EB71A |
:101F40002C5E3F4F65C789E60E945DA480E690E065 |
:101F50009F938F938091BC09992787FD90959F93BC |
:101F60008F938091AD09992787FD90959F938F93CB |
:101F700080919E09992787FD90959F938F938091DB |
:101F80008F09992787FD90959F938F9388E492E11D |
:101F90009F938F93FF92EF92E091C905F091CA054C |
:101FA00009958DB79EB70E960C94629980917C0529 |
:101FB00090916C08882309F4B1C0943009F4B0C042 |
:101FC0009630C9F58EE70E945DA485E00E94E88303 |
:101FD0006AE070E00E949EAC9F938F9385E00E9420 |
:101FE000E8836AE070E00E949EAC7F936F9384E088 |
:101FF0000E94E8836AE070E00E949EAC9F938F93FA |
:1020000084E00E94E8836AE070E00E949EAC7F93C7 |
:102010006F938BE592E19F938F938FE294EA9F9366 |
:102020008F93E091C905F091CA0509952DB73EB788 |
:10203000245F3F4FEDC6973010F40C94449A8EE71E |
:102040000E945DA488E00E94E8836AE070E00E943C |
:102050009EAC9F938F9388E00E94E8836AE070E0D3 |
:102060000E949EAC7F936F9387E00E94E8836AE0B2 |
:1020700070E00E949EAC9F938F9387E00E94E8835C |
:102080006AE070E00E949EAC7F936F9386E00E94AE |
:10209000E8836AE070E00E949EAC9F938F9386E095 |
:1020A0000E94E8836AE070E00E949EAC7F936F9389 |
:1020B00085E00E94E8836AE070E00E949EAC9F93F6 |
:1020C0008F9385E00E94E8836AE070E00E949EACF6 |
:1020D0007F936F9384E00E94E8836AE070E00E943F |
:1020E0009EAC9F938F9384E00E94E8836AE070E047 |
:1020F0000E949EAC7F936F938AE692E19F938F93A9 |
:102100008FE294EA9F938F93E091C905F091CA05FD |
:1021100009958DB79EB748960C946299943019F43E |
:1021200086E00C94C698963039F58EE70E945DA43F |
:1021300080E690E09F938F938091DA09992787FD3D |
:1021400090959F938F938091CB09992787FD9095C8 |
:102150009F938F9387E892E19F938F938FE294EA06 |
:102160009F938F93E091C905F091CA0509952DB70A |
:102170003EB7265F3F4F4CC6973010F40C94449AFC |
:102180008EE70E945DA480E690E09F938F938091FC |
:10219000F809992787FD90959F938F938091E9097E |
:1021A000992787FD90959F938F938091DA099927BE |
:1021B00087FD90959F938F938091CB09992787FDF9 |
:1021C00090959F938F938AE992E19F938F938FE2EB |
:1021D00094EA9F938F93E0CE90913805992309F468 |
:1021E0004BC080918D058823F9F09332E8F487E0A5 |
:1021F0000E94378583E90E945DA480913805992764 |
:102200009F938F938DEA92E19F938F938FE394EA4C |
:102210009F938F93E091C905F091CA0509952DB759 |
:102220003EB72A5F3F4FF4C583E90E945DA488EB67 |
:1022300092E19F938F930FE214EA1F930F93E09123 |
:10224000C905F091CA0509951F921F929091380512 |
:1022500081E1989FC00111248C59924F9F938F93D5 |
:102260001F930F93E091C905F091CA0509958DB7A9 |
:102270009EB70A960C94629980911F049FE2E92E02 |
:1022800094EAF92E85FF06C084E90E945DA48EEBD6 |
:1022900092E165C483E90E945DA481ED92E15FC48F |
:1022A0008091570D863079F480917C05882319F050 |
:1022B00010927C0503C081E080937C0585E00E943C |
:1022C000378586E072C2883009F4F0C3813011F09E |
:1022D0000C943C9A0E9462A410927B050C943A9A4A |
:1022E00080917A05282F3327442755278F5F8093C5 |
:1022F0007A05F9012131310510F00C943F9AEA5624 |
:10230000FF4F0C9439AD80E00E945DA489EE98E007 |
:102310009F938F938091010199279F938F9387EECD |
:1023200092E19F938F938FE394EA9F938F9367C576 |
:1023300085E10E945DA487EF98E09F938F93809141 |
:1023400002016AE00E9492AC892F99279F938F9394 |
:10235000809102010E9492AC99279F938F9386EF00 |
:1023600092E19F938F938FE294EA9F938F9307C795 |
:102370008AE20E945DA487E093E19F938F93CFE26E |
:10238000D4EADF93CF93E091C905F091CA0509958E |
:1023900080911A0B0F900F900F900F9080FF41C00B |
:1023A00080917A089091350481FD0BC0892F99277F |
:1023B0009F938F938CE093E19F938F93DF93CF93C1 |
:1023C00029CFE091C905F091CA05933318F086E151 |
:1023D00093E102C08DE193E19F938F93DF93CF93BD |
:1023E00009950F900F900F900F908091FE0AE09149 |
:1023F000C905F091CA059091350480FF0BC0892F63 |
:1024000099279F938F9384E293E19F938F93DF9318 |
:10241000CF9354C7892F99279F938F938AE293E193 |
:10242000BBC080E393E137C08FE30E945DA489E3E2 |
:1024300093E19F938F93CFE2D4EADF93CF93E09120 |
:10244000C905F091CA0509950F900F900F900F9054 |
:102450008091D108882319F48DE393E11CC0809109 |
:102460002C04E091C905F091CA05882319F086E48F |
:1024700093E102C08DE493E19F938F93DF93CF9319 |
:1024800009950F900F900F900F908091E70886FFAD |
:10249000FBC784E593E19F938F93DF93CF93F9C5B7 |
:1024A00084E50E945DA48BE593E19F938F93CFE237 |
:1024B000D4EADF93CF93E091C905F091CA0509955D |
:1024C00080911A0B0F900F900F900F9085FD03C015 |
:1024D00080E693E108C08091BE080E94D44A82330E |
:1024E00058F489E693E19F938F93DF93CF93E09124 |
:1024F000C905F091CA0516C0843B18F080E793E146 |
:10250000F2CF8091E708E091C905F091CA0585FFF7 |
:1025100003C087E793E102C08EE793E19F938F9317 |
:10252000DF93CF9309950F900F900F900F908091AC |
:10253000D508882309F4A8C78EE50E945DA4809180 |
:10254000D50899279F938F9385E893E19F938F9365 |
:10255000DF93CF93AFC689E60E945DA480E993E143 |
:102560009F938F93CFE2D4EADF93CF93E091C90595 |
:10257000F091CA0509950F900F900F900F908091E0 |
:10258000D408E091C905F091CA05882351F0992734 |
:102590009F938F938AE993E19F938F93DF93CF93D8 |
:1025A0003DCE8EE993E19F938F93DF93CF9375C5D3 |
:1025B00080917E050FE2E02E04EAF02E882309F0D8 |
:1025C00053C08EE70E945DA48091710199279F936B |
:1025D0008F9380916F08E82FFF27EE0FFF1FE35CBA |
:1025E000F54F808191819F938F9380916E08E82FA2 |
:1025F000FF27EE0FFF1FE35CF54F808191819F93D2 |
:102600008F9384EA93E19F938F93FF92EF92E091EF |
:10261000C905F091CA05099583E90E945DA48DB7AB |
:102620009EB70A968DBF80917108E82FFF27EE0FA5 |
:10263000FF1FE35CF54F808191819F938F93809181 |
:102640007008E82FFF27EE0FFF1FE35CF54F808136 |
:10265000918181589F4F9F938F9388EB93E19F9334 |
:102660008F93FF92EF92CBC38EE70E945DA480917F |
:102670005B0499279F938F9380915A0499279F9386 |
:102680008F938091590499279F938F9387EC93E1BF |
:102690009F938F93FF92EF92E091C905F091CA0545 |
:1026A000099583E90E945DA48DB79EB70A968DBFF8 |
:1026B00080915E0499279F938F9380915D04992761 |
:1026C0009F938F9380915C0499279F938F938BEDB9 |
:1026D00093E19F938F93FF92EF9244CD80918D056C |
:1026E000882309F4D1C68EE70E945DA480911A0B5D |
:1026F00086FD11C08FEE93E19F938F9380E594EA5E |
:102700009F938F93E091C905F091CA0509950F90A9 |
:102710000F900F900F908091E50899278F7090701F |
:10272000892B89F08EEF93E19F938F9380E594EA54 |
:102730009F938F93E091C905F091CA0509950F9079 |
:102740000F900F900F9080911A0B82FF11C088E0BC |
:1027500094E19F938F9380E594EA9F938F93E09108 |
:10276000C905F091CA0509950F900F900F900F9031 |
:1027700080911A0B83FD88C68DE094E19F938F931F |
:1027800080E594EA84C40091570D063089F4809165 |
:102790007E05882319F010927E0503C081E08093A6 |
:1027A0007E0586E00E94378587E00E94378564C6F3 |
:1027B000083021F40E9462A483E05AC6013009F077 |
:1027C0005BC60E9462A400937B0554C680917A0583 |
:1027D000282F33278F5F80937A052230310509F443 |
:1027E00053C0233031053CF42115310549F0213027 |
:1027F000310501F144C6263031050CF040C683C0D6 |
:1028000080E00E945DA48BE194E19F938F930FE29F |
:1028100014EA1F930F93E091C905F091CA05099539 |
:1028200085E10E945DA40F900F900F900F908AE2B7 |
:1028300094E173C1809171051FE2E12E14EAF12E3B |
:102840008823E1F08EE70E945DA4809171059927AD |
:102850009F938F938091720599279F938F938FE316 |
:1028600094E19F938F93FF92EF92E091C905F091CD |
:10287000CA0509958DB79EB7089624C58EE70E94B4 |
:102880005DA481E594E16BC183E90E945DA4809120 |
:102890002601909127016AE070E00E94B2AC9F93FC |
:1028A0008F9380912601909127016AE070E00E9449 |
:1028B000B2AC7F936F9384E694E19F938F930FE282 |
:1028C00014EA1F930F93E091C905F091CA05099589 |
:1028D0008EE90E945DA42DB73EB7285F3F4F2DBF04 |
:1028E00080E19CE09F938F938EE694E19F938F937A |
:1028F0001F930F93E091C905F091CA0509958DB713 |
:102900009EB706968DBF8091B3018823E9F180912F |
:102910007F058823C9F080918D058823A9F089E47B |
:102920000E945DA481E794E19F938F938FE294EAE4 |
:102930009F938F93E091C905F091CA0509950F9077 |
:102940000F900F900F901AC089E40E945DA48091AF |
:10295000B30199279F938F9385E794E19F938F937A |
:102960008FE294EA9F938F93E091C905F091CA0595 |
:1029700009952DB73EB72A5F3F4F2DBF8FE30E94C9 |
:102980005DA48CE794E105C08FE30E945DA487E815 |
:1029900094E19F938F938FE294EA9F938F93E091BA |
:1029A000C905F091CA0509950F900F900F900F90EF |
:1029B00080916E05882331F484E50E945DA486E948 |
:1029C00094E139C08091390B833081F580917F0586 |
:1029D000882351F08091B301882331F084E50E946F |
:1029E0005DA484EA94E105C084E50E945DA482EBC5 |
:1029F00094E19F938F938FE294EA9F938F93E0915A |
:102A0000C905F091CA0509950F900F900F900F908E |
:102A10008091570D8630F1F48091B301882319F02D |
:102A2000806880936F0510927F0514C084E50E9432 |
:102A30005DA480EC94E19F938F938FE294EA9F933F |
:102A40008F93E091C905F091CA0509950F900F90F9 |
:102A50000F900F908091570D843059F49091B301ED |
:102A600080916E059817E8F481E080937F05980FB8 |
:102A70000AC0823069F49091B301923090F081E005 |
:102A800080937F0591509093B30110928D0509C0FA |
:102A9000883039F40E9462A484E080937B05109210 |
:102AA0007A058091570D813009F0E6C40E9462A436 |
:102AB00082E0DEC480917A05282F33278F5F8093D0 |
:102AC0007A052230310509F44FC0233031053CF43A |
:102AD0002115310549F02130310521F1D0C42630CE |
:102AE00031050CF0CCC47FC080E00E945DA48EEC68 |
:102AF00094E19F938F930FE214EA1F930F93E09159 |
:102B0000C905F091CA05099585E10E945DA40F9061 |
:102B10000F900F900F908DED94E19F938F931F93E3 |
:102B20000F93B7C280917105CFE2EC2EC4EAFC2E60 |
:102B3000882381F08EE70E945DA48091710599271A |
:102B40009F938F938091720599279F938F938FEE18 |
:102B500094E187CE8EE70E945DA481E095E19F938A |
:102B60008F93FF92EF9295C283E90E945DA48091BA |
:102B70002601909127016AE070E00E94B2AC9F9319 |
:102B80008F9380912601909127016AE070E00E9466 |
:102B9000B2AC7F936F9383E195E19F938F930FE2A4 |
:102BA00014EA1F930F93E091C905F091CA050995A6 |
:102BB0008EE90E945DA42DB73EB7285F3F4F2DBF21 |
:102BC00080E19CE09F938F938DE195E19F938F939C |
:102BD0001F930F93E091C905F091CA0509958DB730 |
:102BE0009EB706968DBF8FE30E945DA480E295E1BB |
:102BF0009F938F93CFE2D4EADF93CF93E091C905FF |
:102C0000F091CA0509950F900F900F900F90809149 |
:102C1000B401882339F180918005882351F0809197 |
:102C20008D05882331F089E40E945DA48BE295E153 |
:102C30001EC089E40E945DA48091B40199279F93EE |
:102C40008F938FE295E19F938F93DF93CF93E091E2 |
:102C5000C905F091CA0509952DB73EB72A5F3F4FC8 |
:102C60002DBF12C089E40E945DA489E395E19F9382 |
:102C70008F93DF93CF93E091C905F091CA05099531 |
:102C80000F900F900F900F9080916E05882331F474 |
:102C900084E50E945DA48DE395E113C080918005D9 |
:102CA000882351F08091B401882331F084E50E949B |
:102CB0005DA48BE495E105C084E50E945DA489E5EF |
:102CC00095E19F938F938FE294EA9F938F93E09186 |
:102CD000C905F091CA0509950F900F900F900F90BC |
:102CE0008091570D843061F49091B40180916E050C |
:102CF000981708F0A6C181E080938005980F0BC05B |
:102D0000823061F49091B401923008F49AC181E06C |
:102D10008093800591509093B40185C1863009F06D |
:102D200085C18091B401882311F080936F051092C2 |
:102D3000800587C180917A05282F33278F5F809384 |
:102D40007A052230310509F465C0233031053CF4A1 |
:102D50002115310549F02130310561F090C326304D |
:102D600031050CF08CC3A4C080E00E945DA487E60E |
:102D700095E189C18AE20E945DA48091260190912B |
:102D800027016AE070E00E94B2AC9F938F9380911C |
:102D90002601909127016AE070E00E94B2AC7F9317 |
:102DA0006F938DE795E19F938F930FE214EA1F9342 |
:102DB0000F93E091C905F091CA0509958FE30E9430 |
:102DC0005DA48DB79EB708968DBF8091F302909158 |
:102DD000F4026CE370E00E949EAC9F938F9380910D |
:102DE000F3029091F4026CE370E00E949EAC7F933A |
:102DF0006F9388E895E19F938F931F930F93E091D2 |
:102E0000C905F091CA0509952DB73EB7285F3F4F18 |
:102E10002DBF3AC385E30E945DA480915204909136 |
:102E20005304A0915404B0915504BC01CD0124E693 |
:102E300030E040E050E00E94E7AC3F932F9383E9FD |
:102E400095E19F938F930FE214EA1F930F93E09104 |
:102E5000C905F091CA0509958AE40E945DA48DB761 |
:102E60009EB706968DBF80E690E09F938F938091EA |
:102E7000230B9091240B9F938F938CE995E19F9363 |
:102E80008F931F930F93E091C905F091CA0509959F |
:102E90008FE50E945DA42DB73EB7285F3F4F2DBF41 |
:102EA0008091710199279F938F9387EA95E1FEC1E5 |
:102EB0008EE70E945DA480EB95E19F938F93CFE214 |
:102EC000D4EADF93CF93E091C905F091CA05099543 |
:102ED0000F900F900F900F9080918105882339F10A |
:102EE00080918205882351F080918D05882331F0EF |
:102EF0008BE80E945DA48DEB95E11EC08BE80E94DB |
:102F00005DA48091810599279F938F9381EC95E132 |
:102F10009F938F93DF93CF93E091C905F091CA05FA |
:102F200009952DB73EB72A5F3F4F2DBF12C08BE8E2 |
:102F30000E945DA486EC95E19F938F93DF93CF93DE |
:102F4000E091C905F091CA0509950F900F900F9077 |
:102F50000F908091390B8330B9F580916E058823ED |
:102F600031F483E90E945DA489EC95E10DC0809164 |
:102F700082058823C9F0809181058823A9F083E91F |
:102F80000E945DA487ED95E19F938F938FE294EA71 |
:102F90009F938F93E091C905F091CA0509950F9011 |
:102FA0000F900F900F9003C087E00E9437858091AB |
:102FB000570D8630E9F480918105882311F08093C4 |
:102FC0006C051092820514C083E90E945DA486EE10 |
:102FD00095E19F938F938FE294EA9F938F93E09173 |
:102FE000C905F091CA0509950F900F900F900F90A9 |
:102FF0008091570D843059F49091810580916E0530 |
:103000009817F8F481E080938205980F0AC0823007 |
:1030100069F4909181059230A0F081E0809382055F |
:1030200091509093810510928D050BC0883049F422 |
:103030000E9462A480917B058F5F80937B05109234 |
:103040007A058091570D0DC280917A05282F33277C |
:103050008F5F80937A052230310509F49AC02330BE |
:1030600031053CF42115310549F021303105D9F005 |
:1030700006C2263031050CF002C226C180E00E9453 |
:103080005DA484EF95E19F938F938FE294EA9F93E1 |
:103090008F93E091C905F091CA0509950F900F90A3 |
:1030A0000F900F90F1C18AE20E945DA480912601E9 |
:1030B000909127016AE070E00E94B2AC9F938F93D9 |
:1030C00080912601909127016AE070E00E94B2ACE5 |
:1030D0007F936F9389E096E19F938F93CFE2D4EA39 |
:1030E000DF93CF93E091C905F091CA0509958FE36D |
:1030F0000E945DA48DB79EB708968DBF8091F302A4 |
:103100009091F4026CE370E00E949EAC9F938F93C9 |
:103110008091F3029091F4026CE370E00E949EAC07 |
:103120007F936F9384E196E19F938F93DF93CF9387 |
:10313000E091C905F091CA0509952DB73EB7285F02 |
:103140003F4F2DBF809171058823F9F089E60E94D9 |
:103150005DA480916A0590916B059F938F938091F8 |
:10316000710599279F938F938091720599279F935B |
:103170008F938FE196E19F938F93DF93CF93E091AD |
:10318000C905F091CA05099572C885E00E94378586 |
:103190007BC180914704BFE2EB2EB4EAFB2E88236B |
:1031A000C1F182E30E945DA480914804909149049A |
:1031B000A0914A04B0914B04BC01CD0124E630E05B |
:1031C00040E050E00E94E7AC3F932F93809152047F |
:1031D00090915304A0915404B0915504BC01CD01C9 |
:1031E00024E630E040E050E00E94E7AC3F932F93AC |
:1031F00084E396E19F938F93FF92EF92E091C9054C |
:10320000F091CA0509952DB73EB7285F3F4F2DBFF6 |
:1032100024C082E30E945DA48091520490915304E3 |
:10322000A0915404B0915504BC01CD0124E630E0D6 |
:1032300040E050E00E94E7AC3F932F9381E496E199 |
:103240009F938F93FF92EF92E091C905F091CA0589 |
:1032500009958DB79EB706968DBF87E40E945DA441 |
:1032600080E690E09F938F938091230B9091240BA5 |
:103270009F938F938EE496E19F938F930FE214EACE |
:103280001F930F93E091C905F091CA0509958CE54C |
:103290000E945DA42DB73EB7285F3F4F2DBF8091A0 |
:1032A000710199279F938F9389E596E19F938F935F |
:1032B0001F930F93E091C905F091CA0509958DB749 |
:1032C0009EB706968DBFE0C08091570D882349F0C8 |
:1032D0008091EA079091EB0701969093EB0780931A |
:1032E000EA078EE70E945DA482E696E19F938F93A2 |
:1032F000CFE2D4EADF93CF93E091C905F091CA05FC |
:1033000009950F900F900F900F908091830588235F |
:1033100039F180918405882351F080918D058823AF |
:1033200031F089E80E945DA48EE696E11EC089E82E |
:103330000E945DA48091830599279F938F9382E7D4 |
:1033400096E19F938F93DF93CF93E091C905F0911E |
:10335000CA0509952DB73EB72A5F3F4F2DBF12C052 |
:1033600089E80E945DA486E796E19F938F93DF939F |
:10337000CF93E091C905F091CA0509950F900F9080 |
:103380000F900F9080916E05882331F483E90E949D |
:103390005DA489E796E10DC0809184058823C9F07A |
:1033A000809183058823A9F083E90E945DA487E8C2 |
:1033B00096E19F938F938FE294EA9F938F93E0918E |
:1033C000C905F091CA0509950F900F900F900F90C5 |
:1033D0001FC087E00E943785809171058823C1F066 |
:1033E00083E90E945DA480E19CE09F938F9385E92F |
:1033F00096E19F938F938FE294EA9F938F93E0914E |
:10340000C905F091CA0509958DB79EB706968DBF7F |
:103410008091570D843059F49091830580916E0509 |
:10342000981750F581E080938405980F0AC0823088 |
:1034300069F4909183059230F8F081E080938405DF |
:1034400091509093830510928D0516C0863049F4F3 |
:1034500080918305882311F080936D051092840577 |
:103460000BC0813049F40E9462A480917B05815099 |
:1034700080937B0510927A051092570D05C010922B |
:103480007A0502C010927B05E6E0CDB7DEB70C945A |
:103490002AAD4FB728E130E0F8948091C9008F77CA |
:1034A0008093C9008091C9008F7B8093C90080916F |
:1034B000C9008F7D8093C900832F99278093CD0009 |
:1034C0002093CC008091C80082608093C80080E186 |
:1034D0008093C9008091CA008F778093CA00809141 |
:1034E000CA008F7B8093CA008091CA008091CA0075 |
:1034F0008F7E8093CA008091CA0088608093CA0042 |
:103500008091C9008B7F8093C9008091CA0084603C |
:103510008093CA008091CA0082608093CA00809123 |
:10352000C80087FF03C08091CE00F9CF8091C90009 |
:1035300080688093C9008091350D84608093350D3B |
:103540004FBF089590914B05992341F48F3031F48A |
:103550009093860580E580934B050895E09186055C |
:10356000EF5FE0938605E83121F481E080938505E3 |
:103570000895E93120F089E1809386050895FF27B9 |
:10358000E25EF24F80830895A0E0B0E0EAECFAE951 |
:103590000C940AAD91E0D92E82E0A82EBD2CE12C2E |
:1035A00001E0F02E8091350D82FDB5C080916F0055 |
:1035B0008F7D80936F00E091D708EE2351F0FF27B5 |
:1035C000EE0FFF1FE35CF54F8081918184369105FA |
:1035D0005CF480915804883C20F4809158048C5EFF |
:1035E00001C088EC8093580480911F0D682F7727C5 |
:1035F000809187058150809387058F3F31F418EAC9 |
:10360000C12E82E08093870502C0C4E2CC2E40E048 |
:103610004C1508F07EC0EA2DFF27E25EF24F808154 |
:103620008D2111F06E297F298D2D9927880F991FE3 |
:10363000D82E882319F4B1E0DB2EAD0CEE0CFF1C64 |
:1036400020E0E21628E0F20609F061C0A1E0EA2ECF |
:10365000F12CCB018050944065E070E00E94B2AC48 |
:10366000AB2DBB27FD01EA0FFB1FE35CF54F80810B |
:1036700091819C01220F331F280F391F260F371FFE |
:1036800037FF02C02D5F3F4FE901D595C795D5950E |
:10369000C795CB0101968C179D0714F4219706C09E |
:1036A00061507040C617D7070CF4219680915804DA |
:1036B000833CD8F08D010A0F1B1FF801E35CF54F26 |
:1036C00080819181FE01E81BF90BCF0163E070E07E |
:1036D0000E94B2ACCB01880F991F860F971F0D5720 |
:1036E000154FF8019183808307C0AA0FBB1FAD5708 |
:1036F000B54F11961C921E92EB2DFF27EE0FFF1F68 |
:10370000E35CF54FD183C08360E070E0B3944F5F1A |
:103710007FCF1092420110928505EAE0CDB7DEB767 |
:103720000C9426AD0895089540E050E080918805FE |
:10373000909189059C01220F331F280F391F80911A |
:103740003E0390913F03280F391F37FF02C02D5FC2 |
:103750003F4F3595279535952795309389052093CB |
:103760008805809143018B32D9F480917F08282FFE |
:10377000332780914C0490914D04829FA001839F38 |
:10378000500D929F500D1124CA0157FD4F96AC0168 |
:1037900025E0559547952A95E1F74B5F5F4F3DC072 |
:1037A0008D32D9F480917F08282F332780914C04E3 |
:1037B00090914D04829FA001839F500D929F500DC8 |
:1037C0001124CA0157FD4F96AC0195E055954795D8 |
:1037D0009A95E1F74550504020C0803271F48091B5 |
:1037E0001F0481FF1AC0C90137FD4F96AC0185E067 |
:1037F000559547958A95E1F710C08E3529F480914B |
:103800004704482F552709C0863739F4809147046B |
:10381000992744275527481B590BCA01AA2797FD0A |
:10382000A095BA2F8093A7029093A802A093A90213 |
:10383000B093AA0208950F931F930E94EE84809183 |
:10384000260190912701AA2797FDA095BA2F809372 |
:10385000D6019093D701A093D801B093D90180915C |
:10386000B10B9091B20BAA27BB278093E9019093EB |
:10387000EA01A093EB01B093EC010AE010E0809123 |
:10388000B50B9091B60BB8010E949EACCB01AA2754 |
:10389000BB278093FC019093FD01A093FE01B093A0 |
:1038A000FF018091520490915304A0915404B0916F |
:1038B0005504BC01CD0124E630E040E050E00E9418 |
:1038C000E7AC20930F023093100240931102509303 |
:1038D00012028091920190919301AA2797FDA095E1 |
:1038E000BA2F8093220290932302A0932402B093D4 |
:1038F00025028091380B9927AA27BB278093350290 |
:1039000090933602A0933702B093380280913A0B1D |
:103910009927AA27BB278093480290934902A09336 |
:103920004A02B0934B0280913B0B90913C0BB80143 |
:103930000E949EACCB01AA27BB2780935B02909389 |
:103940005C02A0935D02B0935E0280913D0B90916A |
:103950003E0BAA2797FDA095BA2F80936E029093F5 |
:103960006F02A0937002B09371028091690599274C |
:10397000AA27BB278093810290938202A09383029F |
:10398000B0938402809137059927AA27BB2780939B |
:10399000940290939502A0939602B093970280911F |
:1039A00038059927AA27BB278093BA029093BB02B8 |
:1039B000A093BC02B093BD021F910F9108954FB721 |
:1039C00020E430E0F8948091C9008F778093C9009B |
:1039D0008091C9008F7B8093C9008091C9008F7D41 |
:1039E0008093C900832F99278093CD002093CC002A |
:1039F0008091C80082608093C80088E18093C900EC |
:103A00008091CA008F778093CA008091CA008F7B13 |
:103A10008093CA008091CA008F7D8093CA008091F4 |
:103A2000CA008F7E8093CA008091CA00877F8093EE |
:103A3000CA008091C9008B7F8093C9008091CA0021 |
:103A400084608093CA008091CA0082608093CA001B |
:103A50008091C80087FF03C08091CE00F9CF80918C |
:103A6000C90080688093C9004FBF08950F931F93CA |
:103A7000CF93DF93482F4F5F893108F08BC080913F |
:103A80003C0A841720F44F5F40933C0A4150CB011D |
:103A900083539B4268E170E00E94B2ACA42FBB2725 |
:103AA000FD01EA0FFB1FE35CF54F808191819B01D3 |
:103AB000281B390BC90137FF03C0909581959F4F93 |
:103AC000069794F480915804883C30F4809158040F |
:103AD000865F8093580408C088EC809358048091D6 |
:103AE0006F008F7D80936F00FD01EA0FFB1FE35C89 |
:103AF000F54F808191819C01220F331F280F391FC0 |
:103B0000260F371F37FF02C02D5F3F4FE901D595C4 |
:103B1000C795D595C795CB0101968C179D0714F4D1 |
:103B2000219706C061507040C617D7070CF4219644 |
:103B300080915804843BD8F08D010A0F1B1FF801B7 |
:103B4000E35CF54F80819181FE01E81BF90BCF0109 |
:103B500063E070E00E94B2ACCB01880F991F860F22 |
:103B6000971F0D57154FF8019183808307C0AA0F47 |
:103B7000BB1FAD57B54F11961C921E92E42FFF2725 |
:103B8000EE0FFF1FE35CF54FD183C083443011F487 |
:103B900010924201DF91CF911F910F910895CF9321 |
:103BA000DF932091580D822F9927807F9070409746 |
:103BB00009F066C02F3109F040C08091590D809303 |
:103BC000940590915B0D9093960580915C0D809388 |
:103BD0009505992309F054C080916E08282F33274A |
:103BE000220F331FF901ED57F54F1182108280919A |
:103BF0006F08A82FBB27AA0FBB1FFD01ED57F54F7C |
:103C00001182108280917108E82FFF27EE0FFF1FAD |
:103C1000CF018D57954FEC0119821882235C354FE7 |
:103C2000E90119821882A35CB54F11961C921E926D |
:103C3000E35CF54F1182108223C0C22FCF70CA30CF |
:103C4000F8F48091590D8093840D80915A0D8093E2 |
:103C5000830D80915B0D8093860D80915C0D809328 |
:103C6000850D6091830D7091840D8C2F0E94369D7F |
:103C70006091850D7091860D8C2F8F5F0E94369D0F |
:103C8000DF91CF910895CF93C82F8F3F49F4809152 |
:103C900097058F3F29F4109299051092980532C02C |
:103CA00020919905222339F4CF3111F485E001C028 |
:103CB00084E080939A0580919A05909198058217E7 |
:103CC000A0F4892F8095809398058F3F19F48EEF8B |
:103CD0008093980580919805C81711F40E94CF9D94 |
:103CE00010929905109298050BC0E22FFF27E85A11 |
:103CF000F24FC0832F5F209399059C0F90939805F6 |
:103D0000C0939705CF91089590919305933240F415 |
:103D1000E92FFF27E05AF24F80839F5F909393052E |
:103D20000895833218F48D5F80939305089590E28F |
:103D3000E3E6FDE08FE19193815087FFFCCF08958A |
:103D4000CF93CFB723E031E0F8948091C9008F770B |
:103D50008093C9008091C9008F7B8093C9008091B6 |
:103D6000C9008F7D8093C900832F99278093CD0050 |
:103D70002093CC008091C80082608093C80088E1C5 |
:103D80008093C9008091CA008F778093CA00809188 |
:103D9000CA008F7B8093CA008091CA0080628093A2 |
:103DA000CA008091CA0080618093CA008091CA00D5 |
:103DB00088608093CA008091C90084608093C900A4 |
:103DC0008091CA0084608093CA008091CA0082609A |
:103DD0008093CA008091C80087FF03C08091CE0005 |
:103DE000F9CF8091C90080688093C9008091C90093 |
:103DF00080648093C9000E94979ECFBFCF910895A1 |
:103E0000282F99278F709070892B31F420958091FD |
:103E10009205822B8093920508951F920F920FB600 |
:103E20000F9211248F93EF93FF938091EB028823DD |
:103E300009F068C0E0919C05EE2389F480919B0510 |
:103E4000882369F48091600D882321F081E08093BC |
:103E50009D0505C08091C90081608093C900809153 |
:103E60009D05882379F4EF5FE0939C058091370DE1 |
:103E70008E1720F481E080939D051CC0FF27E95C2C |
:103E8000F24F3CC080919B05882361F48091600DC6 |
:103E9000882311F483E003C0813999F481E0809391 |
:103EA0009B050FC0833099F48091600D882349F001 |
:103EB0001092600D8091C9008E7F8093C9008EEFB3 |
:103EC0001EC08091C90081608093C9000EC08332FA |
:103ED00061F48091C9008E7F8093C9008FEF809339 |
:103EE000CE0081E08093EB0218C080919B05E82F03 |
:103EF000FF27E05AF24F8F5F80939B05808180936C |
:103F0000CE000BC010929B0510929C0510929D054F |
:103F10008091C90080618093C900FF91EF918F91DA |
:103F20000F900FBE0F901F901895682727E0322F33 |
:103F300067FF06C0862F9927880F991F832702C025 |
:103F4000862F880F682F215027FFF2CF99270895D9 |
:103F50000F931F93CF93DF93062F60E0162F601708 |
:103F600040F4EC0189910E94959F682F1F5F101704 |
:103F7000C8F3862F9927DF91CF911F910F91089554 |
:103F8000DC0190E0961758F48C91803241F09F5FED |
:103F9000961728F4FD01E90FF11D8081F6CF892FD6 |
:103FA00099270895A0E0B0E0E8EDFFE90C940BAD8F |
:103FB0008FE98093380D80E180933A0D84EA8093F5 |
:103FC0003B0D85E580933C0D8DE580933D0D109272 |
:103FD0003E0D80919F05882309F06AC080919E055F |
:103FE00013E1819FC001112463E081549E4F0E9420 |
:103FF000C09F082F80919E05819FC00111246AE017 |
:104000008B549E4F0E94C09F982F800F865F809395 |
:10401000370D2EEFB22EB80EB092390D20919E05BD |
:1040200020933F0DE92EFF24C70113E0880F991F4D |
:104030001A95E1F7802B8093400D822F9927C3E1D9 |
:10404000CC2ED12C8C9D90018D9D300D9C9D300DE2 |
:104050001124C9018B549E4FA701BC0181E49DE04E |
:104060000E94D3AA112780919E0599278C9DE0017B |
:104070008D9DD00D9C9DD00D1124CE0181549E4F5D |
:10408000A801BC01C7018F5B924F0E94D3AA095CB3 |
:10409000124F0E0D1F1D6B2D89E39DE00E94A89FFE |
:1040A000F801828780919F058F5F80939F0593C061 |
:1040B000C0903E0D1C2D0E941B9C3091EC023031B3 |
:1040C00008F058C0B3E1EB2EF12C632F812F992714 |
:1040D000FC01EE0FFF1FE80FF91FEC0DF11DE95C6D |
:1040E000F24F832F99278E9DD0018F9DB00D9E9DFD |
:1040F000B00D1124AB54BE4FED012D8574E0880F37 |
:10410000991F7A95E1F7282B20873E3088F42E8579 |
:104110003F853F798A899927982F88279295990F0B |
:10412000907E282B392B2187832F9927828716C0D1 |
:10413000ED012E853F85488959892187BB27A52F09 |
:10414000942F832F8287CA01AA27BB278387852FB5 |
:104150009927AA27BB278487E2E0CE0E862F8F5FA0 |
:10416000682F1F5F163020F4382F803108F4AECF4F |
:104170008093EC0283E0189FC00111242C2D280F9E |
:10418000285F2093370D225C2093390D812F9927CA |
:104190008C01000F111F080F191F0C0D111D095C58 |
:1041A000124F2054622F89E39DE00E94A89FE801EE |
:1041B00088878091EC02803170F081E08093EC027E |
:1041C00010929F0580919E058F5F80939E058031A0 |
:1041D00010F010929E05E9E0CDB7DEB70C9427AD44 |
:1041E0008091EB02882309F447C080911F0485FD6C |
:1041F00004C08091F102882381F082E98093600DF0 |
:1042000083E28093610D8091F102882309F485E5B2 |
:104210008093620D1092F10202C08093600D809134 |
:10422000ED028F3071F4809192050E94748388238F |
:1042300041F081E98093600D8093610D81E380936B |
:10424000620D1092EB028091C80085FFFCCF809137 |
:10425000C9008F7E8093C9008091C9008E7F8093B2 |
:10426000C9000E94D29F8EE78093CE008091920574 |
:104270008093ED02109292050895EF92FF920F93B2 |
:104280001F93CF93DF937C018B01EA01452B39F01B |
:10429000F80181918F01F70109952197C9F7E6E0AF |
:1042A000CDB7DEB70C942AADEF92FF920F931F9318 |
:1042B000CF93DF937C018B01EA01452B41F0F8019C |
:1042C0000F5F1F4F8491F70109952197C1F7E6E031 |
:1042D000CDB7DEB70C942AAD0F931F93CF938C010B |
:1042E000C62F161634F480E2F8010995C1501C1649 |
:1042F000D4F3CF911F910F9108950F931F93CF93F4 |
:104300008C01C62F161634F480E3F8010995C150CC |
:104310001C16D4F3CF911F910F910895A5E3B0E03F |
:10432000E4E9F1EA0C9402AD2E96EEADFFAD2E97C6 |
:1043300088249924540180918C05882321F42C969B |
:104340001FAE1EAE2C97AEE44A2E512C4C0E5D1EB5 |
:104350006F01B60105C0153239F00894C11CD11C9B |
:10436000F60114911123B9F7A601461B570B31F042 |
:104370002C968EAD9FAD2C970E9454A1112309F469 |
:104380006AC20894C11CD11CFF24FDA6FCA6EFEF55 |
:10439000EE2EF9A6F6010894C11CD11C1491153714 |
:1043A00021F0812F80628837B1F4F0FE0AC0F2015B |
:1043B00024E030E0420E531E80809180A280B380C2 |
:1043C0000AC0F20142E050E0440E551E8081918106 |
:1043D0004C01AA24BB24103221F489A58823D1F6EC |
:1043E0001DC0133219F458E0F52AD4CF1A3211F057 |
:1043F0001D3291F41A3259F4F20182E090E0480E35 |
:10440000591EE081ECA7EE232CF6E195ECA790E194 |
:10441000F92AAFEDFA22BECF1B3211F419A7BACF99 |
:104420001E32C1F5F6010894C11CD11C14911A3238 |
:1044300079F4F20122E030E0420E531E40815181B6 |
:104440003FEF4F3F530714F44FEF5FEFE42EA2CF3F |
:1044500040E050E0812F80538A30A0F4CA0173E01D |
:10446000880F991F7A95E1F7840F951F480F591F00 |
:10447000410F511D40535040F6010894C11CD11CFE |
:104480001491E8CF8FEF4F3F580714F44FEF5FEFD1 |
:10449000E42E85CF103329F4F4FC7CCF90E2F92A86 |
:1044A00079CF812F81538930D8F440E050E0CA01A0 |
:1044B00063E0880F991F6A95E1F7840F951F480FF5 |
:1044C000591F410F511D40535040F6010894C11C23 |
:1044D000D11C1491812F80538A3048F34CA75FCFB1 |
:1044E000183619F4A4E0FA2A55CF1C3619F4B1E0B5 |
:1044F000FB2A50CF133661F43E010894611C711CF5 |
:10450000F20122E030E0420E531E808189833CC1DB |
:10451000143421F0143611F0193651F5143411F415 |
:1045200031E0F32AF0FE0AC0F20144E050E0440E0C |
:10453000551E80809180A280B3800CC0F20182E081 |
:1045400090E0480E591E808191814C01AA2497FC6D |
:10455000A094BA2CB7FE0AC0B094A0949094809412 |
:10456000811C911CA11CB11C8DE289A70AE06FC0BF |
:104570001F3411F01F3631F41F3411F491E0F92A81 |
:1045800008E064C0103779F4F201A2E0B0E04A0E0E |
:104590005B1E808191814C01AA24BB2400E1B0E420 |
:1045A000FB2A18E753C01337C1F5F20122E030E0CF |
:1045B000420E531E608071806114710489F43E01C3 |
:1045C0000894611C711C88E289838EE6F301818363 |
:1045D00085E78B838CE68C838D8389E28E831F82B3 |
:1045E000E7FC13C08E2D992787FD9095AC0160E004 |
:1045F00070E0C3010E94C6AA009729F0382E361831 |
:10460000E3140CF0C3C03E2CC1C0F30101900020A4 |
:10461000E9F731973E2E3618B9C0153511F0153728 |
:1046200031F4153511F4F1E0FF2A0AE00FC0183516 |
:1046300019F0183709F0A0C000E1F3FE07C081149B |
:104640009104A104B10411F020E4F22A19A6EDA608 |
:10465000E7FC02C03FEDF32249E2642E712C6C0EA0 |
:104660007D1E81149104A104B10421F44DA54423BD |
:1046700009F47BC0802F9927AA27BB278EA79FA765 |
:10468000A8ABB9AB202E332490E0891690E09906B0 |
:1046900091E0A90690E0B90648F0C501B4012EA545 |
:1046A0003FA548A959A90E94C5AC17C0AFEF8A160B |
:1046B0009104A104B10449F040F0C401B1010E9489 |
:1046C0009EAC9B014427552708C0882D602F0E946F |
:1046D00092AC282F3327442755272AAB3BAB4CAB52 |
:1046E0005DAB0A3059F48AA9880F880F880F9AA900 |
:1046F000990F890F382D381B832F10C0003139F4E2 |
:104700008AA98295807F482D481B842F07C08AA9DB |
:10471000880F880F880F582D581B852F90E02EA5E5 |
:104720003FA548A959A982169306A406B50608F024 |
:1047300091E08AA89BA8ACA8BDA88A3010F4805D3F |
:1047400004C0895A183509F48F7DD3018E933D0139 |
:10475000992309F099CF083041F4F3FE06C0803365 |
:1047600021F080E3FD0182933F01CE010196382EB6 |
:104770003618F8E23F0E0BC0112309F46CC03E015D |
:104780000894611C711C198331E0332E19A6032D86 |
:104790002DA4231827FC222489A5882311F00F5F5C |
:1047A00002C0F6FC0E5F020DEF2CFF24C7018073E0 |
:1047B0009070892B49F48CA5801B682F2C968EADA8 |
:1047C0009FAD2C970E946CA189A5882331F041E010 |
:1047D00050E0BE01675D7F4F0AC0E6FE0EC080E379 |
:1047E0008AA71BA742E050E0BE01665D7F4F2C9672 |
:1047F0008EAD9FAD2C970E943DA1C7018073907034 |
:10480000809749F48CA5801B682F2C968EAD9FADA8 |
:104810002C970E947DA1622D2C968EAD9FAD2C977A |
:104820000E947DA1832D992787FD9095AC01B3014E |
:104830002C968EAD9FAD2C970E943DA1E4FE89CDB4 |
:104840002CA5201B2CA7622F2C968EAD9FAD2C97EC |
:104850000E946CA17ECDE2E1CB5C0C941EAD982F42 |
:1048600080915F0D883A50F480915F0DE82FFF270B |
:10487000EA5BF34F93838F5F80935F0D0895982FCA |
:1048800080915F0D883A58F480915F0DE82FFF27E3 |
:10489000EA5BF34F906893838F5F80935F0D089579 |
:1048A000982F80918D05882321F0892F0E943FA4A5 |
:1048B0000895892F0E942FA40895883A10F48093B8 |
:1048C0005F0D089580E090E2E9E4FCE091938F5F52 |
:1048D000883AE0F308954FB721E830E0F8948091EA |
:1048E000C9008F778093C9008091C9008F7B809326 |
:1048F000C9008091C9008F7D8093C900832F9927BB |
:104900008093CD002093CC008091C800826080937A |
:10491000C80088E18093C9008091CA008F77809396 |
:10492000CA008091CA008F7B8093CA008091CA0020 |
:104930008F7D8093CA008091CA008F7E8093CA00C9 |
:104940008091CA00877F8093CA008091C9008460EB |
:104950008093C9008091CA0084608093CA008091CE |
:10496000CA0082608093CA008091C90081608093F0 |
:10497000C9008091C80087FF03C08091CE00F9CFA5 |
:104980008091C90080688093C9004FBF3CE7309395 |
:10499000B80B2DE72093E30B8EE88093B90B1092B0 |
:1049A000D50B1092D40B1092BE0B80EE8093BB0BF4 |
:1049B00030931A0C2093450C1092260C1092250C63 |
:1049C0001092280C1092270C10922A0C1092290C8D |
:1049D00084EF91E09093240C8093230C9093220C0D |
:1049E0008093210C9093200C80931F0C10921C0C30 |
:1049F00089E880931B0C1092430C1092440C80E9C0 |
:104A000080931D0C3093F20C20931D0D1092F40C2A |
:104A10008AE88093F30C1092FA0C1092F90C109221 |
:104A2000F80C1092FC0C1092FD0C1092FE0C1092DF |
:104A3000FF0C1092010D1092020D1092030D1092B6 |
:104A4000040D1092080D1092070D1092060D109291 |
:104A5000050D80EA8093F50C3093E40B20930F0C46 |
:104A60001092E60B8DE88093E50B10920E0C80ED12 |
:104A70008093E70B8BE78093460C80E88093470C8C |
:104A80001092480C8091BE0B90E2E9E4FCE0919317 |
:104A90008F5F883AE0F38DE78093F10C0895CF9310 |
:104AA000C82F8091A005803879F48C2F0E947486DD |
:104AB00080938F0580918F05882331F1C0935E0D1F |
:104AC00080918F058F5F16C08F37F1F48091570D5D |
:104AD000882329F48C2F80958F708093570D0E9426 |
:104AE0004F858093480C86E49CE0909391058093D9 |
:104AF00090058DEA80938F058091C9008F7E809309 |
:104B0000C90082E080938E05C093A005CF910895DF |
:104B100030918E05332331F080918E058150809342 |
:104B20008E05089580918F05882361F140918F054E |
:104B30009091A105413069F4292F3093A10580910E |
:104B40008D05882319F030938D0510C040938D0595 |
:104B50000DC0E0919005F09191058191F093910540 |
:104B6000E0939005282F980F9093A1058091C8009D |
:104B700085FFFCCF2093CE0080918F0581508093DC |
:104B80008F0508958091C90080618093C9000895C0 |
:104B90006F927F928F929F92AF92BF92CF92DF924D |
:104BA000EF92FF920F931F93882361F1823041F4BB |
:104BB0001092AA051092AB051092AC051092AD05AB |
:104BC0002091520430915304409154045091550463 |
:104BD000DA01C90119E0880F991FAA1FBB1F1A9596 |
:104BE000D1F78093410390934203A0934303B09382 |
:104BF00044032093A2053093A3054093A40550934A |
:104C0000A50526C1A0905204B0905304C09054044E |
:104C1000D09055048091A2059091A305A091A40580 |
:104C2000B091A50535014601681A790A8A0A9B0ADE |
:104C30006092A6057092A7058092A8059092A9059A |
:104C4000809145039091460384559F4F7C01002736 |
:104C5000F7FC0095102F8091EB0A9091EC0A9C01D3 |
:104C6000442737FD4095542FC801B7010E9473AC0B |
:104C700097FF04C06150704E8F4F9F4FAB01BC0136 |
:104C8000FDE07595679557954795FA95D1F74C5A7C |
:104C90005040604070404093AE055093AF05609324 |
:104CA000B0057093B10520914C0B30914D0B37FF3F |
:104CB00002C0215F3F4FE4E035952795EA95E1F783 |
:104CC0008091490390914A03829FD001839FB00D48 |
:104CD000929FB00D1124CD01B7FF02C081509F4FAC |
:104CE000E92FFF27E7FDFA9520914A0B30914B0BF6 |
:104CF00037FF02C0215F3F4F84E0359527958A95A5 |
:104D0000E1F78091470390914803829FD001839FF0 |
:104D1000B00D929FB00D1124CD01B7FF02C081509C |
:104D20009F4F892F990F990BE80FF91FCF01AA27E1 |
:104D300097FDA095BA2F840F951FA61FB71F8093CC |
:104D4000AE059093AF05A093B005B093B105BC013B |
:104D5000CD012DE030E040E050E00E9473AC7B01DB |
:104D60008C01C401B30124EF31E040E050E00E9427 |
:104D700073ACDC01CB01E80EF91E0A1F1B1F8091EA |
:104D8000AA059091AB05A091AC05B091AD0520911D |
:104D9000B2053091B3054091B4055091B505821B21 |
:104DA000930BA40BB50BE80EF91E0A1F1B1FE09214 |
:104DB000AA05F092AB050093AC051093AD05D801A0 |
:104DC000C70180509E4FAF4FBF4FB7FF06C0D801FD |
:104DD000C70181509A4FAF4FBF4F1AE0B595A795C5 |
:104DE000979587951A95D1F78093B2059093B3055F |
:104DF000A093B405B093B505A092A205B092A30507 |
:104E0000C092A405D092A5052091410330914203A0 |
:104E10004091430350914403E0903403F0903503F4 |
:104E200000913603109137032E193F09400B510BA7 |
:104E3000280F391F4A1F5B1F2A0D3B1D4C1D5D1D8E |
:104E40002093410330934203409343035093440320 |
:104E50008091B2059091B30590933F0380933E03F8 |
:104E60008091410390914203A0914303B091440388 |
:104E7000BC01CD011F910F91FF90EF90DF90CF907B |
:104E8000BF90AF909F908F907F906F9008952FB7B5 |
:104E900040E0F894E0E0F0E081E2809357009491E4 |
:104EA000E2E0F0E0809357003491E4E0F0E080939A |
:104EB000570084912FBF9E3199F4363941F48930DF |
:104EC00011F441E00DC08A3059F442E009C037398D |
:104ED00039F4863011F443E003C0853009F444E02E |
:104EE000842F992708959FB7F8948091C900877FF0 |
:104EF0008093C9008091C9008F7E8093C900809102 |
:104F0000C9008F778093C9008091C9008F7B8093FF |
:104F1000C9008091C9008F7D8093C9009FBF08950B |
:104F20001F93CF93DF93182F80918C05882309F46A |
:104F3000A7C08091EA02181709F4A2C080918B05DE |
:104F4000882321F40E9447A780938B0582ED91E08E |
:104F500090934101809340018CE697E19F938F935A |
:104F6000CFE9D9E1DF93CF93E091C905F091CA056C |
:104F700009950F900F900F900F90812F9927AA27D6 |
:104F8000BB27FC01099778F5E955FF4F2091C9052A |
:104F90003091CA050C9439AD88E697E102C08FE5DF |
:104FA00097E19F938F93DF93CF93F901099527C0E2 |
:104FB0008AE597E1F6CF82E597E1F3CF8AE497E1BE |
:104FC0009F938F93DF93CF93F901099588ED91E03B |
:104FD000909341018093400112C085E497E1E1CFB5 |
:104FE00089E797E1DECF8FE797E19F938F93DF9378 |
:104FF000CF93E091C905F091CA05099510E00F9093 |
:105000000F900F900F9080918B05843011F08230BB |
:1050100011F50E9473A7812F8150833018F40E94EC |
:10502000737A2CC0143019F40E94A09E27C0183047 |
:1050300019F40E94929B22C0153019F40E94DF9C43 |
:105040001DC0163019F40E946BA418C01730B1F4BB |
:105050000E94499A13C0112389F085E997E19F9333 |
:105060008F938FE999E19F938F93E091C905F09118 |
:10507000CA0509950F900F900F900F901093EA02B8 |
:10508000DF91CF911F9108950F931F93082F81E017 |
:1050900080938C054091E902E5EFF6E120E030E0F5 |
:1050A0005FE4849199272F5F3F4F829FB001839FD8 |
:1050B000700D929F700D112446275150319657FF65 |
:1050C000F0CF4093E902EDECF6E120E030E057E26A |
:1050D000849199272F5F3F4F829FB001839F700D6E |
:1050E000929F700D112446275150319657FFF0CFF3 |
:1050F0004093E90280918B05882321F40E9447A701 |
:1051000080938B058EE891EA9093CA058093C90538 |
:105110008091E902833459F088E190E029E20FB6EA |
:10512000F894A895809360000FBE2093600006302D |
:1051300091F080EB97E19F938F938FE999E19F9393 |
:105140008F93E091C905F091CA0509950F900F90D2 |
:105150000F900F90EECF80910301893158F180912B |
:105160008A058823A9F48DEC97E19F938F938FE9AB |
:1051700099E19F938F93E091C905F091CA05099534 |
:1051800087E1809303010F900F900F900F9012C052 |
:1051900015BC873119F48093030106C087E0809322 |
:1051A000140186E080931301E091E702F091E80298 |
:1051B0008DEF09950E947B0C85E690E09F938F937D |
:1051C00086E090E09F938F9382E090E09F938F938F |
:1051D000809103016AE00E9492AC892F99279F93E6 |
:1051E0008F93809103010E9492AC99279F938F9394 |
:1051F00087E098E19F938F930FE919E11F930F9335 |
:10520000E091C905F091CA05099585EF96E19F9354 |
:105210008F931F930F93E091C905F091CA050995EB |
:105220008DEC96E19F938F931F930F93E091C905A7 |
:10523000F091CA0509950E947B0C83EC8093810054 |
:1052400080916F00806280936F008DB79EB7469605 |
:105250008DBF1F910F9108958091D5088D3338F03F |
:105260008091370B87FD03C08CE38093D508809134 |
:105270008308882331F08055853618F08FE78093B6 |
:105280008308089580918C05882309F487C0809154 |
:10529000C60581508093C605882309F069C089E15D |
:1052A0008093C6058091D5088E3338F08091370BF6 |
:1052B00087FD03C08DE38093D50880915804823820 |
:1052C000A0F58091200490912104805D974020F00A |
:1052D0008091B70B843620F41092C8051092C70550 |
:1052E0002091C7053091C80521153105B1F1C901DB |
:1052F00001979093C8058093C705419798F18091D5 |
:10530000370B84FF2FC080911E04846080931E049D |
:105310008091450B87FF26C080917205882311F18B |
:105320003093C8052093C7051DC080915804853B64 |
:10533000C8F09091D50884E1989FC001112440964F |
:105340002091C7053091C8052817390730F42F5F21 |
:105350003F4F3093C8052093C70580911E048B7F73 |
:1053600080931E048091E902833411F010928C0521 |
:105370009091EA02963019F40E9488A508958091D0 |
:10538000EE02882321F081508093EE0208958BE491 |
:105390008093EE02943011F40E94F0A008951F92C1 |
:1053A0000F920FB60F9211242F933F934F935F9359 |
:1053B0006F937F938F939F93AF93BF93EF93FF93DD |
:1053C0009091CE008091FD028823B9F09093C600A1 |
:1053D0008091FD02823009F03FC09F3FE9F58FEFD9 |
:1053E00094E3ACE0B0E0C297A109B109B7FFFBCFED |
:1053F00080910C068093CE002FC02091EA02822F6C |
:105400008150833020F4892F0E94CA7A25C024302D |
:1054100021F4892F0E94009F1FC0283021F4892F7A |
:105420000E94939B19C080910301893120F08091E3 |
:105430008A05882389F0253021F4892F0E94439E14 |
:105440000BC0263021F4892F0E944FA505C02730BC |
:1054500019F4892F0E94A29AFF91EF91BF91AF9109 |
:105460009F918F917F916F915F914F913F912F917C |
:105470000F900FBE0F901F901895002422273327FE |
:10548000442751E0BB27EE27FF27A0E1660F771FD7 |
:10549000881F991F001C221F331F441F660F771F90 |
:1054A000881F991F001C221F331F441F2AF4050E5A |
:1054B0002B1F3E1F4F1F04C0051A2B0B3E0B4F0B1B |
:1054C000550FBB1FEE1F587F556047FD5250AA95E0 |
:1054D000E9F6E695B7955795E695B7955795852FD3 |
:1054E0009B2F08952227332741E0552768E0880F36 |
:1054F000991F221F331F880F991F221F331F1AF471 |
:10550000240F351F02C0241B350B440F551F487F45 |
:10551000456037FD42506A9551F756954795569527 |
:105520004795842F0895AA2797FF04C080959095EA |
:105530008A1F9A1F77FF04C0609570956A1F7A1FB3 |
:10554000669F9001779FA001679F300D411D5A1FF4 |
:10555000300D411D5A1F889FF001999F2E0F3F1F4C |
:10556000401D511D899F300D411D5A1F300D411D99 |
:105570005A1FCA01B901112480CFFB01DC0102C00E |
:1055800005900D9241505040D8F70895FC014150CC |
:10559000504030F001900616D1F73197CF010895B1 |
:1055A000882799270895FB01DC0102C001900D9224 |
:1055B00041505040D8F70895A0E0B0E0E2EEFAEA9A |
:1055C0000C940AAD6C017B01EA01590121978FEF20 |
:1055D000CF3FD80789F086010894C11CD11CC701B0 |
:1055E0000894E11CF11CF5010995F80180832197CD |
:1055F000FFEFCF3FDF0779F7EAE0CDB7DEB70C94D6 |
:1056000026ADCF92DF92EF92FF920F931F937C0112 |
:105610006B01FB010995082FC7010196F601099559 |
:10562000182FC8011F910F91FF90EF90DF90CF903E |
:105630000895A0E0B0E0EFE1FBEA0C940CAD8C0122 |
:105640007B01EA01690121978FEFCF3FD80771F005 |
:10565000F70121917F01C8010F5F1F4F622FF601F3 |
:1056600009952197FFEFCF3FDF0791F7E8E0CDB72E |
:10567000DEB70C9428ADCF92DF92EF92FF920F939A |
:105680001F936C018B017A01FA010995812F9927EB |
:10569000682FC6010196F70109951F910F91FF90A0 |
:1056A000EF90DF90CF9008955058BB27AA270ED0D7 |
:1056B000E0C0D1D030F0D6D020F031F49F3F11F4CB |
:1056C0001EF4C6C00EF4E095E7FBBCC0E92FE2D0A3 |
:1056D00080F3BA17620773078407950718F071F40F |
:1056E0009EF5FAC00EF4E0950B2EBA2FA02D0B01FB |
:1056F000B90190010C01CA01A0011124FF27591B17 |
:1057000099F0593F50F4503E68F11A16F040A22F1C |
:10571000232F342F4427585FF3CF4695379527958D |
:10572000A795F0405395C9F77EF41F16BA0B620B8C |
:10573000730B840BBAF09150A1F0FF0FBB1F661FD3 |
:10574000771F881FC2F70EC0BA0F621F731F841F16 |
:1057500048F4879577956795B795F7959E3F08F03C |
:10576000B3CF9395880F08F09927EE0F97958795FB |
:10577000089598D088F09F5790F0B92F9927B75186 |
:10578000A0F0D1F0660F771F881F991F1AF0BA9505 |
:10579000C9F712C0B13081F09FD0B1E008959CC02C |
:1057A000672F782F8827B85F39F0B93FCCF38695FB |
:1057B00077956795B395D9F73EF490958095709558 |
:1057C00061957F4F8F4F9F4F0895E89409C097FBD5 |
:1057D0003EF490958095709561957F4F8F4F9F4FC8 |
:1057E0009923A9F0F92F96E9BB279395F69587950C |
:1057F00077956795B795F111F8CFFAF4BB0F11F4CF |
:1058000060FF1BC06F5F7F4F8F4F9F4F16C0882375 |
:1058100011F096E911C0772321F09EE8872F762FAB |
:1058200005C0662371F096E8862F70E060E02AF0EC |
:105830009A95660F771F881FDAF7880F96958795D8 |
:1058400097F9089597F99F6780E870E060E0089500 |
:105850009FEF80EC089500240A9416161706180688 |
:105860000906089500240A94121613061406050664 |
:105870000895092E0394000C11F4882352F0BB0FF5 |
:1058800040F4BF2B11F460FF04C06F5F7F4F8F4F58 |
:105890009F4F089557FD9058440F551F59F05F3F93 |
:1058A00071F04795880F97FB991F61F09F3F79F042 |
:1058B00087950895121613061406551FF2CF4695C4 |
:1058C000F1DF08C0161617061806991FF1CF869546 |
:1058D0007105610508940895E894BB27662777272A |
:1058E000CB0197F90895629FD001739FF001829FC9 |
:1058F000E00DF11D649FE00DF11D929FF00D839F5F |
:10590000F00D749FF00D659FF00D9927729FB00DFB |
:10591000E11DF91F639FB00DE11DF91FBD01CF010E |
:1059200011240895991B79E004C0991F961708F077 |
:10593000961B881F7A95C9F780950895AA1BBB1BF3 |
:1059400051E107C0AA1FBB1FA617B70710F0A61B7F |
:10595000B70B881F991F5A95A9F780959095BC01A0 |
:10596000CD01089597FB092E07260AD077FD04D0B4 |
:10597000E5DF06D000201AF4709561957F4F0895F9 |
:10598000F6F7909581959F4F0895A1E21A2EAA1BD4 |
:10599000BB1BFD010DC0AA1FBB1FEE1FFF1FA217DF |
:1059A000B307E407F50720F0A21BB30BE40BF50BDC |
:1059B000661F771F881F991F1A9469F76095709565 |
:1059C000809590959B01AC01BD01CF01089597FB97 |
:1059D000092E05260ED057FD04D0D7DF0AD0001CB3 |
:1059E00038F450954095309521953F4F4F4F5F4F7C |
:1059F0000895F6F790958095709561957F4F8F4F3C |
:105A00009F4F08952F923F924F925F926F927F9295 |
:105A10008F929F92AF92BF92CF92DF92EF92FF92BE |
:105A20000F931F93CF93DF93CDB7DEB7CA1BDB0B6A |
:105A30000FB6F894DEBF0FBECDBF09942A8839880F |
:105A400048885F846E847D848C849B84AA84B98416 |
:105A5000C884DF80EE80FD800C811B81AA81B98122 |
:105A6000CE0FD11D0FB6F894DEBF0FBECDBFED0136 |
:105A70000895EE0FFF1F0590F491E02D0994FFCFDC |
:105A800004035E0A010164FF010020FFFFC01FC084 |
:105A90001F0101070610F40101737373FF03007DFA |
:105AA0000000C409C4099600134167696C65005180 |
:105AB000756164726F0000000000000064000C0952 |
:105AC000D20101200B050000ECFF000204060708CC |
:105AD00008080706040200FEFCFAF9F8F8F8F9FADB |
:105AE000FCFE000204060708086440415A4655328D |
:105AF0006464640A02969696960840403A103038DC |
:105B00000132FF037F0090D0030090D003003200E9 |
:105B10002064FFFFE8036464200B0A0D0B0E100BDA |
:105B20000A0C0F0B1110FA2068010101010101019B |
:105B300001011501014D4B20202020202020202094 |
:105B40002020010000000000566F6C746167652022 |
:105B5000202056202001000000000143757272656C |
:105B60006E742020204120200100000000014361CC |
:105B70007061636974792020416820010000000091 |
:105B800002416C74697475646520206D20200100E9 |
:105B900000000000436F6D70617373202020B020FF |
:105BA0002001000000000053617473202020202099 |
:105BB0002020202001000000000053706565642053 |
:105BC000202020206D2F7301000000000044697325 |
:105BD00074616E636520206D2020010000000000CC |
:105BE000486F6D652D4469722020B02020010000AF |
:105BF0000000006D61782E54656D702E20B043203A |
:105C00000100000000004D61676E2E6669656C64DE |
:105C1000252020010000000000566172696F2020DD |
:105C20002020202020200100000000004572726F1B |
:105C300072436F6465202020200100000000004CAA |
:105C400061746974756465202020202009000000BB |
:105C500000004C6F6E676974756465202020200910 |
:105C60000000000000F7FFFCFF70FF01010F64005F |
:00000001FF |
/tags/V2.06e/Hex-Files/Flight-Ctrl_MEGA644_V2_06e.hex |
---|
0,0 → 1,3945 |
:100000000C94A9050C94EF050C94EF050C94EF05E6 |
:100010000C94EF050C94EF050C94EF050C94EF0590 |
:100020000C94EF050C945D190C94EF050C94EF05FE |
:100030000C94602F0C94EF050C94EF050C94EF05D5 |
:100040000C94EF050C94EF050C9480150C94EF05BF |
:100050000C94150C0C94EF050C94DF0B0C94EF052D |
:100060000C942D1B0C94EF050C947A2A0C94EF053C |
:100070000C948E770C94EF050C94ED71521B571B6A |
:100080005C1B651B7C1B931BA31BB31BF71BE21D97 |
:10009000931BCD1CDE1CF21C101D2D1D781DC41DD4 |
:1000A000D51FA22015218E21C62169222823852350 |
:1000B00000243124A724D524022557635D64E2641B |
:1000C000FB633665676596632A640A0D3D3D3D3DD9 |
:1000D0003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D50 |
:1000E0003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D007D |
:1000F0000A0D426174743A002025642043656C6CDB |
:10010000732000204C6F77207761726E696E673ABA |
:100110002025642E2564560020204175746F2D43E0 |
:10012000483A2025642E2564560020204175746FBE |
:100130006C616E64696E673A2025642E25645600F2 |
:100140000A0D4F6C642046432048617264776172E7 |
:1001500065206E6F7420737570706F7274656420A3 |
:1001600062792074686973204669726D776172657F |
:1001700021000A0D466F756E6420424C2D43747247 |
:100180006C3A20002564000A0D0A0D2121204D49FA |
:100190005353494E4720424C2D4354524C3A20254C |
:1001A00064202121000A0D43616C696272617469E7 |
:1001B0006E672070726573737572652073656E73F8 |
:1001C0006F722E2E004F4B0A0D000A0D466C6967A8 |
:1001D00068742D74696D65202575206D696E2054D5 |
:1001E0006F74616C3A2575206D696E00416E676CA5 |
:1001F000654E69636B20202020202020416E676CB3 |
:1002000065526F6C6C202020202020204163634EBB |
:1002100069636B202020202020202020416363522E |
:100220006F6C6C20202020202020202059617747EF |
:1002300079726F202020202020202020416C7469BA |
:1002400074756465205B302E316D5D204163635AA7 |
:1002500020202020202020202020202047617320E3 |
:10026000202020202020202020202020436F6D707F |
:100270006173732056616C7565202020566F6C7415 |
:10028000616765205B302E31565D202052656365C5 |
:1002900069766572204C6576656C20204779726FAF |
:1002A00020436F6D70617373202020204D6F746F39 |
:1002B0007220312020202020202020204D6F746FBC |
:1002C0007220322020202020202020204D6F746FAB |
:1002D0007220332020202020202020204D6F746F9A |
:1002E0007220342020202020202020203136202081 |
:1002F00020202020202020202020202031372020D6 |
:1003000020202020202020202020202031382020C4 |
:1003100020202020202020202020202031392020B3 |
:1003200020202020202020202020202053657276AD |
:100330006F2020202020202020202020486F76655C |
:100340007267617320202020202020204375727264 |
:10035000656E74205B302E31415D202043617061F9 |
:1003600063697479205B6D41685D20204865696729 |
:10037000687420536574706F696E74203235202064 |
:100380002020202020202020202020203236202045 |
:100390002020202020202020202020203237202034 |
:1003A0002020202020202020202020204932432DE2 |
:1003B0004572726F7220202020202020424C204C59 |
:1003C000696D697420202020202020204750535F31 |
:1003D0004E69636B20202020202020204750535F4F |
:1003E000526F6C6C202020202020202021212120F1 |
:1003F000494E434F4D50415449424C452021212103 |
:10040000002E005B25695D005B25695D002B204D9A |
:10041000696B726F4B6F70746572202B0048573A8E |
:100420005625642E25642053573A25642E253032F4 |
:10043000642563200053657474696E673A256420EF |
:100440002573004D69786572204572726F722100C4 |
:100450004861726477617265204572726F722031F3 |
:100460003A2564202121004D697373696E6720422B |
:100470004C2D4374726C3A25642021210021204EBA |
:10048000432D4552523A2025326420212000493222 |
:1004900043204552524F5221212100424C2D536599 |
:1004A0006C6674657374204572723A253264004834 |
:1004B00065696768743A2020253569005365747052 |
:1004C0006F696E743A253569005072657373757281 |
:1004D000653A253569004F66667365743A202025B4 |
:1004E0003569006163742E2062656172696E670010 |
:1004F0004E69636B3A202020202020253569005268 |
:100500006F6C6C3A20202020202025356900436F35 |
:100510006D706173733A202020253569004B256981 |
:100520003A25346920204B25693A25346920004E4C |
:10053000693A2534692020526F3A253469200047F2 |
:10054000733A253469202047693A253469200050E0 |
:10055000313A253469202050323A25346920005040 |
:10056000333A253469202050343A25346920004735 |
:1005700079726F202D2053656E736F72004E696320 |
:100580006B2025346920282533692E2578290052CF |
:100590006F6C6C2025346920282533692E25782935 |
:1005A00000596177202025346920282533692900E6 |
:1005B000414343202D2053656E736F72004E696373 |
:1005C0006B2025346920282533692900526F6C6C13 |
:1005D00020253469202825336929005A202020202D |
:1005E00025346920282533692900566F6C746167AA |
:1005F000653A2020202533692E2531695600437540 |
:100600007272656E743A2020202533692E25316977 |
:100610004100506F7765723A2020202020253469F0 |
:1006200057004469736368617267653A20253569CC |
:100630006D41680052656365697665720052432DAD |
:100640005175616C6974793A202534690052432DE3 |
:100650004368616E6E656C733A25346900556E644B |
:100660006572766F6C7461676573202000576172E4 |
:100670006E3A202532642E25645600486F6D653A27 |
:10068000202532642E256456004C616E643A202584 |
:1006900032642E25645600506F746925693A202013 |
:1006A00025336900506F746925693A202025336924 |
:1006B00000466C696768742D54696D65202000548C |
:1006C0006F74616C3A2535756D696E004163743ADB |
:1006D00020202535756D696E002872657365742953 |
:1006E000000A0D47656E65726174696E6720646506 |
:1006F0006661756C7420506172616D6574657220FD |
:10070000536574202564000A0D5573696E67205087 |
:100710006172616D65746572205365742025640093 |
:100720000A0D47656E65726174696E67206465665F |
:1007300061756C74204D69786572205461626C65D6 |
:10074000000A0D4D697865722D436F6E6669673AD0 |
:10075000202725732720282575204D6F746F72730D |
:1007600029000A0D414343206E6F742063616C6958 |
:10077000627261746564210D0A0000008F001E0121 |
:10078000AD013B02CA025803E603740402058F055B |
:100790001B06A7063307BE074808D2085B09E30912 |
:1007A0006B0AF20A780BFD0B810C040D860D070E07 |
:1007B000870E060F840F00107B10F5106E11E511E7 |
:1007C0005B12CF124213B31323149214FE146A1552 |
:1007D000D3153B16A11605176717C81727188318D6 |
:1007E000DE1837198E19E319361A871AD61A231B01 |
:1007F0006E1BB61BFD1B411C831CC31C001D3C1D36 |
:10080000751DAB1DE01D121E421E6F1E9A1EC31EDB |
:10081000E91E0D1F2E1F4D1F691F841F9B1FB01F38 |
:10082000C31FD31FE11FEC1FF51FFB1FFF1F00207D |
:1008300006010000A06A00020101A56B010302028B |
:10084000396C02040303F86E03050707E16C040624 |
:1008500008080C6D05000606966C04070707376D3F |
:10086000050808080F6E2532692E253169560025C6 |
:100870003364256320253033646D25630053746130 |
:10088000747573004552524F523A2025326420004D |
:10089000253469202532693A2530326900253469CA |
:1008A0006D256300520025336920253369202533E7 |
:1008B00069202533690025336920253369202533D4 |
:1008C00069202533690054656D70657261747572B5 |
:1008D0006573202020200025634320202020200055 |
:1008E0002532692E25316956202533692E25316937 |
:1008F000410025346957202536696D4168004D61F6 |
:10090000676E65743A25336925252025336925638B |
:1009100000496E636C692E3A2533692563202825CA |
:10092000692920004C6F616420576179706F696E8E |
:1009300074730028466978656429202020202020CF |
:10094000004C6F616420576179706F696E74730039 |
:100950002852656C6174697665292020200046491B |
:100960005820576179706F696E7473004649583A20 |
:100970002573006E6F2053442D436172640023255C |
:1009800032642057503A002532642F256420002D10 |
:100990002D2F2D2D002D3E0020200052656C6174FE |
:1009A00069766520575073200052656C3A257300B4 |
:1009B0006E6F2053442D43617264006E6F20475068 |
:1009C000532D4669780023253264205750733A002E |
:1009D0002532642F256420002D2D2F2D2D002D3E36 |
:1009E000002020002532756D2F73205361743A2545 |
:1009F00064200020203344004E6F46780044475066 |
:100A00005300486F6D653A2533646D2025336425A6 |
:100A100063202563004E6F204E6176694374726CCB |
:100A200021000A0D7777772E4D696B726F4B6F70CF |
:100A30007465722E64652028632920486953797390 |
:100A400074656D7320476D6248000A0D74686520F7 |
:100A5000757365206F66207468697320736F6674A0 |
:100A600077617265206973206F6E6C792070657292 |
:100A70006D6974746564200A0D6F6E206F7269670A |
:100A8000696E616C204D696B726F4B6F707465722B |
:100A90002D48617264776172650055736572004814 |
:100AA0006F5454205634004143542044534C004A60 |
:100AB000657469005370656B7472756D0050504DAC |
:100AC000000A0D52656365697665723A2000756E9D |
:100AD0006B6E6F776E2E205573696E672050504D88 |
:100AE0002E2E2E006E6F7420737570706F72746589 |
:100AF0006420627920686172647761726521000AFE |
:100B00000D202D204C4942204E4F5420434F4D5034 |
:100B1000415449424C452021212121000A0D466CB7 |
:100B200069676874436F6E74726F6C0A0D48617206 |
:100B300064776172653A25642E25640A0D536F66E9 |
:100B400074776172653A5625642E253032642563C8 |
:100B5000200011241FBECFEFD0E1DEBFCDBF11E0DA |
:100B6000A0E0B1E0E6EBF5EF02C005900D92A23BEC |
:100B7000B107D9F719E0A2EBB1E001C01D92A23D87 |
:100B8000B107E1F74AEAE2E0F0E081E28093570042 |
:100B9000549120EF37EFA3EAB3E09FE0F9012F5F14 |
:100BA0003F4F84918D93915097FFF8CF573911F4AF |
:100BB0000000FECFE3EAF3E09EE0819148274095F4 |
:100BC000915097FFFACF8091B203481721F057391F |
:100BD00011F40000FECF0E9424070C94DA7A0C94E2 |
:100BE00000008AEC90E09F938F9381E992E19F93BC |
:100BF0008F93E091B603F091B70309950F900F9092 |
:100C00000F900F90089580915B06E82FFF27EE0F5D |
:100C1000FF1FE65DF74F808191818D5E9F4F14F03D |
:100C200010920401808191818A5B9F4FCCF4809166 |
:100C300004018823A9F481E0809304018091EA03F0 |
:100C40008F5F8093EA03853038F088EE93E09093CD |
:100C5000EB018093EA01089566E970E00E94383163 |
:100C60000895CF93DF93C82F882311F180EF90E090 |
:100C70009F938F9381E992E19F938F93E091B603C5 |
:100C8000F091B703099580912301909124016BE2C3 |
:100C900070E00E944D7ACB018F5F809300010F902E |
:100CA0000F900F900F90873018F086E0809300012E |
:100CB00080917E06823328F590910001989F802DC7 |
:100CC000112480930201CC23F1F068EC70E0892FAD |
:100CD0000E9438318091000199279F938F9388EF6C |
:100CE00090E09F938F9381E992E19F938F93E0919E |
:100CF000B603F091B70309958DB79EB706968DBFE1 |
:100D000002C0809302019091CE06923340F480910C |
:100D10000001899F802D11248093BC0102C0909313 |
:100D2000BC013091CF06323340F480910001839FA3 |
:100D3000802D11248093BB0102C03093BB018091B0 |
:100D4000BC0190910201981720F491509093BC013E |
:100D50009F5F8091BB01891720F091509093BB0158 |
:100D60009F5F8091BC012091BB01821728F0332343 |
:100D700019F021502093BC01CC2309F462C0892FC3 |
:100D80006AE00E942D7A892F99279F938F938091F3 |
:100D900002010E942D7A99279F938F9383E091E01F |
:100DA0009F938F93C1E9D2E1DF93CF93E091B60394 |
:100DB000F091B70309958DB79EB708968DBF8091C6 |
:100DC000BB018823E9F06AE00E942D7A892F9927D8 |
:100DD0009F938F938091BB010E942D7A99279F93B7 |
:100DE0008F9388E191E09F938F93DF93CF93E0916E |
:100DF000B603F091B70309958DB79EB708968DBFDE |
:100E00008091BC018823E9F06AE00E942D7A892F45 |
:100E100099279F938F938091BC010E942D7A9927E7 |
:100E20009F938F938AE291E09F938F93DF93CF9369 |
:100E3000E091B603F091B70309958DB79EB7089678 |
:100E40008DBFDF91CF910895CFEFD0E1DEBFCDBF51 |
:100E500088249924C1E07C2E14B815B88AE08AB998 |
:100E60008FE58BB9B7EECB2EB3E0DB2E2EEC3FEF48 |
:100E7000C20ED31ED7FEFACF189B06C0199B02C024 |
:100E80008DE005C08BE003C0199B04C084E1809312 |
:100E9000030107C08AE0809303018EE38AB987E4E7 |
:100EA0008BB981E887B93E9A8FEF88B98BE184B915 |
:100EB00081E085B9469A84B7877F84BF80916000BE |
:100EC0008861809360001092600084EC99E09093B8 |
:100ED000EB018093EA0110929B0210929A02109209 |
:100EE0002F0810922E0810929D0210929C021092D0 |
:100EF0009F0210929E0220910301243128F084EC7D |
:100F000094E0A0E0B0E004C08BE095E0A0E0B0E0A9 |
:100F10008093410190934201A0934301B093440117 |
:100F20002898293111F4299A01C029980E94D116D4 |
:100F30000E94A2160E9499120E94272F0E948D1AC9 |
:100F400081E00E94272A0E94FD610E94F46F86E0E2 |
:100F50000E94377680910301893111F4299A01C0EA |
:100F6000299878940E944829809103018431E8F4FB |
:100F700088E190E02CE00FB6F894A895809360008B |
:100F80000FBE2093600080E491E09F938F9381E9EE |
:100F900092E19F938F93E091B603F091B703099587 |
:100FA0000F900F900F900F90EECF809139028260DA |
:100FB0008093390210923C02C0E0D0E00E94753C60 |
:100FC00085E090E00E9468166C018091390280FDF6 |
:100FD00005C0C6010E9471168823B9F3219631E03D |
:100FE000C43FD30758F382E791E09F938F93A1E921 |
:100FF000AA2EA2E1BA2EBF92AF92E091B603F09171 |
:10100000B7030995C0E0D0E00F900F900F900F90BC |
:1010100005E717E0F0EFEF2EF6E0FF2EF7018081F5 |
:1010200024E030E0E20EF31E1816ACF40BC00E9470 |
:10103000753C8091390280FD05C0C6010E94711681 |
:101040008823B9F3C6010E947116882321F4F801A0 |
:101050008381882364F7F801838187FF2CC0CE0148 |
:1010600001966AE070E00E94397A9F938F9384E83A |
:1010700091E09F938F93BF92AF92E091B603F0916E |
:10108000B70309958091B4018F5F8093B401F80193 |
:10109000948584E69802C00111242585280F8DB718 |
:1010A0009EB706968DBF222331F08091D203281778 |
:1010B00010F42093D2032196015F1F4FCC30D1054D |
:1010C00008F4ACCFC0E0D0E005E717E0E0EFEE2E8B |
:1010D000E6E0FE2EF801838187FD1DC0F7018081C7 |
:1010E0001816CCF42196DF93CF93219787E891E0EF |
:1010F0009F938F9381E992E19F938F93E091B60341 |
:10110000F091B703099582E08093E8012DB73EB7CF |
:101110002A5F3F4F2DBFF80183818078838321961A |
:1011200024E030E0E20EF31E015F1F4FCC30D1050A |
:1011300088F20E94F105909159068091B4019817A8 |
:1011400028F48091D00380618093D003993020F0FF |
:1011500088E080933B0102C090933B0185EA91E0D7 |
:101160009F938F93C1E9D2E1DF93CF93E091B603D0 |
:10117000F091B703099588EE93E00E9468166C0120 |
:101180000E94CB1A0F900F900F900F90C6010E94F3 |
:1011900071168823D9F385EC91E09F938F93DF93A9 |
:1011A000CF93E091B603F091B703099580E00E94D8 |
:1011B000ED31289880ED97E09093EB018093EA0160 |
:1011C00085E58093EC038EE090E00E946C279927E0 |
:1011D000182F00278FE090E00E946C27080F111D48 |
:1011E0001093BA010093B9018AE090E00E946C2745 |
:1011F0009927182F00278BE090E00E946C27080F9A |
:10120000111D1093B8010093B7010F900F900F902C |
:101210000F900F5F1F4F39F08091B9019091BA0183 |
:101220008F5F9F4F41F41092BA011092B901109252 |
:10123000B8011092B7018091B7019091B8019F93C6 |
:101240008F938091B9019091BA019F938F938AEC0B |
:1012500091E09F938F93DF93CF93E091B603F0914A |
:10126000B70309950E944F1F88E893E190933A01D4 |
:1012700080933901C1E0C093EB038C2F0E943106AB |
:10128000809181060E948A750E94F10580ED97E0A9 |
:101290000E9468166C018AEF90E00E94681693E045 |
:1012A0009093B3051092B3018091D4062DB73EB749 |
:1012B000285F3F4F2DBF84FF02C0C093BD019093B4 |
:1012C0003C0112BC11BC8091BF01882311F04798EA |
:1012D000FECF8091EE01882309F460C28091150150 |
:1012E000882309F45BC2F8948091EE0181508093C9 |
:1012F000EE0178948091EA03882319F00E94030696 |
:1013000002C00E9422400E94753C289880918E0263 |
:10131000882331F080918E02815080938E020EC01E |
:1013200080916F00806280936F0010922B08109262 |
:101330002A088091D00388608093D003809139017E |
:1013400090913A01019790933A01809339018091ED |
:10135000390190913A01892B21F080913A0288233A |
:10136000C9F18091390190913A01892BD9F40E94F9 |
:10137000582A85E090E090933A018093390180915A |
:10138000ED059091EE0501969093EE058093ED05A5 |
:101390008091D00381608093D0038091B4058260F6 |
:1013A0008093B40580910B0190910C018F5F9F4F4A |
:1013B00091F480918D02882371F088EA91E69093F0 |
:1013C000EB018093EA0180E890E090930C01809318 |
:1013D0000B0101C028980E9406778091EE018823B6 |
:1013E00009F0DAC18091E901882311F40E941E629C |
:1013F00080911101882311F00E942B170E94E512A1 |
:101400000E946A0EC6010E947116882309F4C0C1A9 |
:1014100084E190E0C80ED91E0E94E91680913A023C |
:10142000882329F48091A4098E3150F405C080915D |
:10143000D00382608093D0038091B40582600FC096 |
:101440008091EA019091EB01892B59F48091390147 |
:1014500090913A01079728F08091B4058D7F809391 |
:10146000B4058091BD01882361F080918E02873997 |
:1014700040F01092BD0188E893E19093EB018093D6 |
:10148000EA0180910601882321F0815080930601B2 |
:101490002EC08093F60310926102109260021092A7 |
:1014A0005F0210925E0210925D0210925C028091C7 |
:1014B0008E028823E1F480910B0190910C018F5FE3 |
:1014C0009F4FA9F42091BD01223089F088E99AE369 |
:1014D0009093EB018093EA0180E09CE090930C01F3 |
:1014E00080930B01222319F082E08093BD0180914B |
:1014F000A001893C70F081508093A0018091D003BD |
:101500008B7F8093D0038091D30381608093D3033A |
:1015100051C0809131098823F9F08091D003846013 |
:101520008093D00389E080936E0380910B019091AA |
:101530000C018F5F9F4F81F480918D02882361F0B1 |
:1015400088E99AE39093EB018093EA0180E098EABE |
:1015500090930C0180930B01109261031092600331 |
:1015600010925F0310925E0310925D0310922409A3 |
:101570008FEF80939909109263091092620910927B |
:101580006509109264098FEF9FEF90936109809332 |
:10159000600910927D0210927E0210927F021092DA |
:1015A0008002109281028091D3038E7F8093D303B7 |
:1015B0001092A00160910201262F33278091230110 |
:1015C0009091240128173907F4F080915502806228 |
:1015D0008093550280910B0190910C018F5F9F4F7A |
:1015E00091F480912301909124010B9764F080E79E |
:1015F00097E19093EB018093EA0180E093E0909370 |
:101600000C0180930B018091BE018F5F8093BE011E |
:10161000813309F074C01092BE018091550281FFA0 |
:101620000AC08091B5019091B60101969093B601E0 |
:101630008093B50104C05AEA852E55E0952E80911D |
:101640005602909157028050944008F049C0209172 |
:10165000FC053091FD054091FE055091FF058091FC |
:101660001B0190911C01A0911D01B0911E01281732 |
:1016700039074A075B0764F48091FC059091FD05EA |
:10168000A091FE05B091FF050596A11DB11D20C0DA |
:101690002091FC053091FD054091FE055091FF051C |
:1016A00080911B0190911C01A0911D01B0911E0120 |
:1016B00082179307A407B5079CF48091FC059091CD |
:1016C000FD05A091FE05B091FF050597A109B1099F |
:1016D0008093FC059093FD05A093FE05B093FF0554 |
:1016E000862F99270196209123013091240182179A |
:1016F00093072CF4809155028F7D809355020894B6 |
:10170000811C911C82E788168BE0980609F040C086 |
:10171000882499242091B9013091BA012F5F3F4F5D |
:101720003093BA012093B9018091B7019091B8012B |
:1017300001969093B8018093B701832F9927682F62 |
:101740008EE090E00E9474278091B9019091BA01D7 |
:101750009070682F8FE090E00E9474278091B7010D |
:101760009091B801892F9927682F8AE090E00E9414 |
:1017700074278091B7019091B8019070682F8BE029 |
:1017800090E00E94742784E190E00E9468166C014A |
:101790000E9435670E942E7071107A94772039F478 |
:1017A0000E94F966882319F08CE0782E8ACD80910A |
:1017B000E901882309F085CD0E941E6282CD1F9227 |
:1017C0000F920FB60F9211248F939F93EF93FF9375 |
:1017D000809108018823E1F48091D9019091DA0188 |
:1017E00001969093DA018093D901FC01E952FB4FF5 |
:1017F000E081ED3019F08C3D910539F41092DA0159 |
:101800001092D90181E080930801E093C60004C0E2 |
:101810001092DA011092D901FF91EF919F918F916F |
:101820000F900FBE0F901F9018951F920F920FB63A |
:101830000F9211242F933F934F935F936F937F9356 |
:101840008F939F93AF93BF93CF93EF93FF9390E0CA |
:101850008091BF01813029F48091C6008093CE0031 |
:10186000D1C08091BF01823029F48091C60080935D |
:10187000F903C8C08091C6008093D1015091DF0167 |
:101880005C3D10F09093E0018091D1018D3009F022 |
:101890006AC08091E001823009F065C09093E00158 |
:1018A000852F992787509C4FFC01329740812091CA |
:1018B000DB013091DC01241B3109DC0111978C9193 |
:1018C000281B3109C9019F709093DC018093DB01D3 |
:1018D00046E0969587954A95E1F7982F935C90930B |
:1018E000DD012F733070235C2093DE018081981717 |
:1018F00029F48C91281711F491E006C090E08091B2 |
:10190000CE018F5F8093CE018091D001882309F0B2 |
:1019100079C0992309F476C081E08093D001580FF3 |
:101920005093CD015150E52FFF27E750FC4F8DE03C |
:1019300080838091FB03823509F064C0C0918D02E1 |
:10194000CC2309F05FC00E944F1F88E190E02CE09B |
:101950000FB6F894A895809360000FBE20936000A6 |
:10196000C093E8014FC02091E001822F9927813078 |
:101970009105F9F0823091051CF4892B21F040C0CB |
:10198000029711F13DC08091D101833239F48091E9 |
:10199000D001882319F481E08093E0018091D10186 |
:1019A0008093F90381E08093DF018091D101992731 |
:1019B00022C02F5F2093E001E52FFF27E750FC4F67 |
:1019C0008091D101808309C0E52FFF27E750FC4FAC |
:1019D0008091D10180835C3D20F45F5F5093DF01F3 |
:1019E00002C01092E0012091D1018091DB01909121 |
:1019F000DC01820F911D9093DC018093DB0102C01A |
:101A00001092E001FF91EF91CF91BF91AF919F9123 |
:101A10008F917F916F915F914F913F912F910F9097 |
:101A20000FBE0F901F901895AC01A0E0B0E09D0193 |
:101A3000A817B90748F4E7EDF4E08191280F311DAC |
:101A40001196A417B507C8F33F70FD01E952FB4F8B |
:101A5000C90156E0969587955A95E1F7835C808396 |
:101A60001196FD01E952FB4F2F733070822F835C7A |
:101A70008083A852BB4F8DE08C9310920801809117 |
:101A8000D7048093C6000895A0E0B0E0EAE4FDE04A |
:101A90000C94A67A2C859D850E85BB2483E28093C9 |
:101AA000D7049F599093D8042093D90433E0E32EB0 |
:101AB000F12C002309F49EC0CF84D888BE016D5E4E |
:101AC0007F4FA989BA890150109709F493C01097E4 |
:101AD000B9F0F601EB0DF11DB3949081119791F4DB |
:101AE000002349F1FB016E5F7F4FDB01C080D18095 |
:101AF0006E5F7F4F0D90BC91A02DBB24015002C0A2 |
:101B000090E019C01097B9F0F601EB0DF11DB394F8 |
:101B10004081119791F4002341F1FB016E5F7F4FEB |
:101B2000DB01C080D1806E5F7F4F0D90BC91A02DF6 |
:101B3000BB24015002C040E018C01097B1F0F6017C |
:101B4000EB0DF11DB3941081119781F4002371F016 |
:101B5000FB013296DB01CD90DC90BF016E5F7F4FC1 |
:101B6000A081B181BB24015001C010E0F701E9520E |
:101B7000FB4F892F86958695835C80830894E11CB2 |
:101B8000F11CF701E952FB4F892F99278370907060 |
:101B900024E0880F991F2A95E1F755279A0194E0D0 |
:101BA000369527959A95E1F7822B835C808308947C |
:101BB000E11CF11CF701E952FB4F4F705070440FCC |
:101BC000551F440F551F812F992726E0969587951D |
:101BD0002A95E1F7842B835C80830894E11CF11C37 |
:101BE000F701E952FB4F1F73135C10830894E11C4B |
:101BF000F11C6ACFC7010E94140DE9E00C94C27A6F |
:101C0000A3E07A2F4091CD014650442309F458C0F7 |
:101C1000E72FFF27E750FC4F80818D537F5FE72F31 |
:101C2000FF27E750FC4F20812D537F5FE72FFF27D1 |
:101C3000E750FC4F30813D537F5FE72FFF27E75090 |
:101C4000FC4F60816D537F5F9927880F991F880F24 |
:101C5000991F522F52955F70582B822F99278F70A2 |
:101C60009070F4E0880F991FFA95E1F7232F2695DD |
:101C70002695282B832F992783709070E6E0880F94 |
:101C8000991FEA95E1F7682B41504F3FC9F0EA2FC1 |
:101C9000FF27E750FC4F5083AF5F41504F3F81F02B |
:101CA000EA2FFF27E750FC4F2083AF5F41504F3FA3 |
:101CB00039F0EA2FFF27E750FC4F6083AF5FA5CFD5 |
:101CC0008CEF93E09093CC018093CB01A350A09331 |
:101CD000CA010895A2E0B0E0E0E7FEE00C94AC7A1F |
:101CE0008091D001882309F418C40E94000E8091CD |
:101CF000FA03823609F0E4C28091FB03992780370A |
:101D0000910509F4AFC081379105C4F48A36910575 |
:101D100009F441C28B36910544F48B34910571F17D |
:101D20008636910509F46AC1CBC28D36910509F456 |
:101D300069C08E36910509F44DC0C2C28437910541 |
:101D400041F1853791054CF48137910509F491C033 |
:101D50008337910509F4EAC0B3C28737910509F4C6 |
:101D6000DCC1883791052CF48537910509F498C1B9 |
:101D7000A7C28937910509F47DC1A2C2E091CB01C8 |
:101D8000F091CC01808191819093900180938F019B |
:101D900097C28091CD01A091CB01B091CC0185314A |
:101DA00040F080E1E4EDF3E00D9001928A95E1F7D7 |
:101DB0000DC08D919D910D90BC91A02D8093D40369 |
:101DC0009093D503A093D603B093D70380EF80936D |
:101DD000C8014BC0809108018823E1F38DE490E0B5 |
:101DE0009F938F9383EE96E09F938F9381E08F93E1 |
:101DF0008F938EE48F930E94440D8DB79EB7079604 |
:101E00008DBF5EC2A091CB01B091CC011C9111306D |
:101E100081F48DE4E3EEF6E00D9001928A95E1F70E |
:101E20000E94832819838091D0038F7E8093D003F2 |
:101E300001C01982809108018823E1F381E090E0DC |
:101E40009F938F93CE0101969F938F9381E08F9301 |
:101E50008F938DE48F930E94440DADB7BEB7179654 |
:101E6000ADBF2EC281E08093D3018FEF8093060136 |
:101E700027C280918D028823E1F5E091CB01F0919A |
:101E8000CC01E0818E2F8A508A3058F489838823D0 |
:101E900011F481E003C0863010F085E0898361E0B1 |
:101EA0000EC08E2F84518A3070F48983882311F4F8 |
:101EB00081E003C0863010F085E0898360E089818D |
:101EC0000E94052912C0E983EF3F19F40E94E62819 |
:101ED00089838981882311F481E003C0863010F062 |
:101EE00085E0898389810E948A2780E00E943106EB |
:101EF00003C00E94E6288983809108018823E1F3CA |
:101F000088E890E09F938F938AE596E09F938F9364 |
:101F100081E090E09F938F93CE0101969F938F93E2 |
:101F200082E08F9381E08F9381E52DC12091CB01D9 |
:101F30003091CC01D9018C918150853008F045C099 |
:101F4000F9018181863609F040C080918D02882395 |
:101F5000E1F52F5F3F4F88E8EAE5F6E0D9010D9003 |
:101F600001928A95E1F7F90182910E94F52780910B |
:101F70009B069927AA27BB27BC01CD0124EC39E099 |
:101F800040E050E00E940E7ADC01CB018093870193 |
:101F900090938801A0938901B0938A0180919C0657 |
:101FA0009927AA27BB27BC01CD010E940E7ADC012C |
:101FB000CB018093830190938401A0938501B0931A |
:101FC00086010E94E628898301C019828091080158 |
:101FD0008823E1F381E090E09F938F93CE010196F7 |
:101FE0009F938F9381E08F938F9383E58F930E94CC |
:101FF000440D8DB79EB707968DBF2BC080918D0283 |
:10200000882309F05DC1E091CB01F091CC01E08122 |
:102010008E2F8150853018F48E2F0E948A270E94BF |
:10202000E6288983809108018823E1F381E090E02C |
:102030009F938F93CE0101969F938F9381E08F930F |
:102040008F9386E48F930E94440DADB7BEB7179669 |
:10205000ADBF10918D02112341F46EE670E08981CD |
:102060000E943831812F0E943106809181060E94A2 |
:102070008A7526C119822981A091CB01B091CC012A |
:10208000EAE2F8E08D91992787FD909593A382A3CA |
:10209000822F8F5F8983282F32968C3098F310C15E |
:1020A000E091CB01F091CC0180810E94972E8A8330 |
:1020B000882319F481E0898301C019828091080185 |
:1020C0008823E1F388E090E09F938F938DE697E07B |
:1020D0009F938F9321E030E03F932F938091CB012A |
:1020E0009091CC019F938F933F932F93CE010296B3 |
:1020F0009F938F933F932F93CE01820F931F9F93B4 |
:102100008F9384E08F9381E08F9385E58F930E9476 |
:10211000440DEDB7FEB773963CC08091CA0189307B |
:1021200008F4CEC02091CB013091CC012F5F3F4FFE |
:1021300088E0ADE6B7E0F90101900D928A95E1F7EC |
:10214000D9018E910E94F12D8A83882319F481E0B0 |
:10215000898301C01982809108018823E1F321E07D |
:1021600030E03F932F93CE0102969F938F933F933E |
:102170002F93CE01820F931F9F938F9382E08F93B3 |
:1021800081E08F9387E58F930E94440DEDB7FEB7F2 |
:102190003B96EDBF95C080918D02882309F090C0D9 |
:1021A0000E9441758983823019F0843009F088C01B |
:1021B00020E430E0F8948091C1008F738093C100D7 |
:1021C0008091C9008F738093C9008091C100877E80 |
:1021D0008093C1008091C900877E8093C90080915F |
:1021E000C80087FF03C08091CE00F9CF8091C00066 |
:1021F00087FF03C08091C600F9CFE091CB01F09139 |
:10220000CC01E081E13021F482E08093BF012EC057 |
:10221000E43611F421E830E081E08093BF01832FA0 |
:1022200099278093CD002093CC008091CD0080939E |
:10223000C5008091CC008093C4008091CA008F7D3E |
:102240008093CA008091CA008F7E8093CA008091DB |
:10225000C9008B7F8093C9008091CA0084608093FD |
:10226000CA008091CA0082608093CA008091CA002F |
:10227000877F8093CA008091C200877F8093C200CD |
:102280008091C9008E7F8093C9008091C1008861D0 |
:102290008093C1008091C90088618093C9008091BA |
:1022A000C10080688093C1008091C90080688093DC |
:1022B000C90010926E0010926F0010927000789416 |
:1022C0008091FB0399278436910509F4BBC08536BC |
:1022D0009105ACF48136910509F46FC08236910501 |
:1022E0002CF48B34910509F45DC00FC18236910541 |
:1022F00009F470C08336910509F47FC006C18C369D |
:10230000910509F4EDC08D3691054CF487369105A1 |
:1023100009F4F8C08836910509F4B2C0F6C08437D4 |
:10232000910529F08637910509F4E8C0EEC0809147 |
:10233000CD01A091CB01B091CC01803140F080E182 |
:10234000E4EDF3E00D9001928A95E1F70DC08D91D7 |
:102350009D910D90BC91A02D8093D4039093D503B3 |
:10236000A093D603B093D703809108018823E1F3AB |
:102370001F92809105018F9384E58F930E94440DF5 |
:102380008AEF8093C8018FEF8093060180EA9FE077 |
:102390000E9468169093C1018093C0010F900F9026 |
:1023A0000F90B3C0E091CB01F091CC01808191817D |
:1023B0009093900180938F01A8C0E091CB01F091A0 |
:1023C000CC01808180930701803298F08FE1809367 |
:1023D00007010FC0A091CB01B091CC018BE0ECEED6 |
:1023E000F3E00D9001928A95E1F78091F5038093D7 |
:1023F000F5058FEF8093060188C08091C40190910C |
:10240000C501892B89F4E091CB01F091CC01E081E9 |
:10241000EE2351F08AE0E89FC00111240E94681663 |
:102420009093C7038093C603E091CB01F091CC0158 |
:1024300090818AE0989FC00111249093C5018093F8 |
:10244000C40115C08FEF80930601E091CB01F0919C |
:10245000CC0190818AE0989FC00111249093C7011C |
:102460008093C601892B19F081E08093D50180EA21 |
:102470009FE00E9468169093C1018093C00145C0FF |
:102480008FEF80930601E091CB01F091CC01908118 |
:1024900097FD08C082E08093D2011092C301109290 |
:1024A000C2011AC0909580913202892B809332022A |
:1024B00091818AE0989FC00111249093C301809379 |
:1024C000C20184E08093D20180EA9FE00E946816F6 |
:1024D0009093C1018093C00181E08093D60115C023 |
:1024E0008FEF80930601E091CB01F091CC018081C8 |
:1024F0008093330281E08093D70107C081E080930D |
:10250000D40103C081E08093D8011092D0011092D1 |
:10251000CC011092CB011092CA01E3E0CE5F0C9483 |
:10252000C87A982F8091C00085FFFCCF9093C60099 |
:1025300008950F931F9388E18093C1008091C0009C |
:1025400082608093C0008091C10080688093C10048 |
:102550008091C10080648093C10000E010E000938E |
:10256000C5008AE290E08093C4008091C6019091FA |
:10257000C7010E9468169093C9038093C8038CED2D |
:1025800090E00E9468169093F8038093F70382E02E |
:102590008093CA0386E08093CB0384E08093CE03CC |
:1025A0008BE08093CC031092CD038FEF8093D20306 |
:1025B000809103018093D1031093CC010093CB0150 |
:1025C0001092CA011F910F910895A0E1B0E0EBEEC7 |
:1025D000F2E10C94AB7A80910801882309F48CC253 |
:1025E0008091C0019091C1010E947116882361F011 |
:1025F0001092C3011092C2011092C7011092C6013D |
:102600001092C5011092C4018091C2019091C30142 |
:10261000892B41F08091D5049091D6040E947116C7 |
:10262000882329F48091D601882309F460C0809121 |
:102630000801882309F45BC08091D20109E016E00B |
:102640008430A8F00E94651F80E590E09F938F93EF |
:102650001F930F9381E08F938F9388E48F930E9451 |
:10266000440D2DB73EB7295F3F4F2DBF34C01092A8 |
:1026700034028CEE93E09F938F9388E59FE19F93C4 |
:102680008F93E091B603F091B703099584E190E050 |
:102690009F938F931F930F9381E090E09F938F936D |
:1026A00082ED91E09F938F9382E08F9381E08F93EF |
:1026B00088E48F930E94440D8091D201982F8F5F00 |
:1026C0008093D2012DB73EB7215F3F4F2DBF94308D |
:1026D00010F01092D2018091C2019091C3010E942A |
:1026E00068169093D6048093D5041092D6018091F9 |
:1026F000D701882351F180910801882331F10E948C |
:10270000651F80E590E09F938F9389E096E09F930B |
:102710008F9321E030E03F932F9385E291E09F93E8 |
:102720008F933F932F9383E392E09F938F9383E064 |
:102730008F9381E08F938CE48F930E94440D1092CD |
:10274000D7018DB79EB70F968DBF8091D401882396 |
:10275000D1F0809108018823B1F08AE090E09F9346 |
:102760008F938AEC93E09F938F9381E08F938F9365 |
:1027700086E58F930E94440D1092D4012DB73EB789 |
:10278000295F3F4F2DBF8091D8018823D9F08091D8 |
:1027900008018823B9F08BE090E09F938F938CEE33 |
:1027A00093E09F938F9381E08F93809105018F93A6 |
:1027B00087E48F930E94440D1092D8018DB79EB785 |
:1027C00007968DBF8091C6019091C701892B41F07A |
:1027D0008091C8039091C9030E947116882321F447 |
:1027E0008091D501882341F180910801882321F14E |
:1027F0000E944A3082E490E09F938F9383EB95E0B0 |
:102800009F938F9381E08F938F9384E48F930E94A3 |
:10281000440D1092D5012DB73EB7295F3F4F2DBF14 |
:102820008091C6019091C701009731F00E9468160F |
:102830009093C9038093C8038091C4019091C5010E |
:10284000892B09F497C08091C6039091C7030E9419 |
:102850007116882309F48EC080910801882309F439 |
:1028600089C080913709909138099093B90380937A |
:10287000B8038091390990913A099093BB038093F2 |
:10288000BA032091190930911A0940911B095091FE |
:102890001C09DA01C90163E0880F991FAA1FBB1F39 |
:1028A0006A95D1F7820F931FA41FB51F820F931F44 |
:1028B000A41FB51F20914101309142014091430175 |
:1028C00050914401BC01CD010E94827A3093BD0336 |
:1028D0002093BC038091B0029091B102A091B2020A |
:1028E000B091B30249E0B595A795979587954A951C |
:1028F000D1F78093BE038091AC029091AD02A0917C |
:10290000AE02B091AF0239E0B595A795979587953E |
:102910003A95D1F78093BF038091B8029091B902A4 |
:10292000A091BA02B091BB0229E0B595A795979501 |
:1029300087952A95D1F78093C0038EE090E09F930E |
:102940008F9388EB93E09F938F9381E08F938F9386 |
:1029500083E48F930E94440D8091C4019091C5013E |
:102960000E9468169093C7038093C6038DB79EB7E5 |
:1029700007968DBF809107018F3F79F1992704E079 |
:10298000880F991F0A95E1F784519E4F40E150E06E |
:10299000BC01CE0101960E94617880E190E09F9396 |
:1029A0008F93CE0101969F938F9381E090E09F9348 |
:1029B0008F9387E091E09F938F9382E08F9381E0E4 |
:1029C0008F9381E48F930E94440D8FEF80930701D2 |
:1029D0002DB73EB7255F3F4F2DBF8091F50588236A |
:1029E000C9F0809108018823A9F081E090E09F93CD |
:1029F0008F9385EF95E09F938F9381E08F938F93D3 |
:102A000082E48F930E94440D1092F5058DB79EB716 |
:102A100007968DBF8091D3018823D1F08091080162 |
:102A20008823B1F086E490E09F938F938AE298E048 |
:102A30009F938F9381E08F938F9380E58F930E9474 |
:102A4000440D1092D3012DB73EB7295F3F4F2DBFE4 |
:102A50008091F7039091F8030E947116882309F47E |
:102A60004BC080910801882309F446C08091A001E1 |
:102A7000882361F580913709909138099093E50397 |
:102A80008093E4038091390990913A099093E70388 |
:102A90008093E60380916A028093E8038091690243 |
:102AA0008093E90388E090E09F938F9384EE93E016 |
:102AB0009F938F9381E08F9383E08F938BE68F9327 |
:102AC0000E94440D8DB79EB707968DBF8091EA0393 |
:102AD000853018F086E08093EA038091E70188232F |
:102AE00019F083E690E002C087EE93E00E9468163A |
:102AF0009093F8038093F703E4E0C05F0C94C77AE7 |
:102B00001F920F920FB60F9211242F933F935F9352 |
:102B10006F937F938F939F93AF93BF93EF93FF93A5 |
:102B20008091E901882329F08091E9018150809307 |
:102B3000E90180918103882319F0815080938103FA |
:102B40008091F10181508093F1018F3F09F051C0D4 |
:102B500089E08093F1018091EF019091F00101965D |
:102B60009093F0018093EF01809112018F5F81704B |
:102B700080931201882349F48091EE01843028F477 |
:102B80008091EE018F5F8093EE01349903C081E064 |
:102B90008093E7018091EA019091EB01892B11F17B |
:102BA0008091EA019091EB010B9750F08091EA013E |
:102BB0009091EB010A979093EB018093EA0104C096 |
:102BC0001092EB011092EA018091EA019091EB01E1 |
:102BD00020910B0130910C0182239323892B41F02A |
:102BE000479A07C08FEF9FEF90930C0180930B01E2 |
:102BF00047988091E701882309F45AC02091A001E9 |
:102C0000222309F055C08091070983FF51C086B186 |
:102C10009927FC01E071F07084FF13C08091EC01F2 |
:102C20009091ED0101969093ED018093EC018091DC |
:102C3000EC019091ED01895E9340D0F12093E70182 |
:102C400037C08091EC019091ED01892B69F1809161 |
:102C5000EC019091ED018A56914030F58091EC01A4 |
:102C60009091ED0169E270E00E94397A8091EC0167 |
:102C70009091ED01860F971F9093ED018093EC01E9 |
:102C80008091EC019091ED010B9750F08091EC0157 |
:102C90009091ED010A979093900180938F0104C069 |
:102CA000F0939001E0938F011092ED011092EC01EE |
:102CB000FF91EF91BF91AF919F918F917F916F9114 |
:102CC0005F913F912F910F900FBE0F901F9018951D |
:102CD0002091EF013091F001280F391FC9010196B1 |
:102CE00008952091EF013091F001821B930B892F01 |
:102CF00099278695807490700895CF93DF930E94F2 |
:102D00006816EC01CE010E9471168823D9F3DF9179 |
:102D1000CF910895CF93DF930E946816EC0109C00C |
:102D200080911501882329F0909315018FEC8093F1 |
:102D30007A00CE010E947116982F882389F3DF91C3 |
:102D4000CF9108959FB7F8945F983E9A469A8091E4 |
:102D5000B0008F708093B0008091B000836080934A |
:102D6000B0008091B1008B738093B1008091B1006D |
:102D70008B608093B1001092B2008FEF8093B3000C |
:102D80008091B00080688093B000809170008A7F4D |
:102D900080937000809170008260809370009FBF6C |
:102DA00008958AE090E00E9468169093F70580935A |
:102DB000F60582E085BD83EB84BD8FEF88BD84EB93 |
:102DC00087BD86E086BD80916E00816080936E0035 |
:102DD00008958091D30620916E0182FF30C09091BA |
:102DE0008A068CE3989FB00111249091890680E5B2 |
:102DF000989FA0011124922F905897FD9D5F959563 |
:102E0000959586E09802C001112420910901309126 |
:102E10000A01281B390B30930A012093090142173C |
:102E200053072CF050930A01409309010895261787 |
:102E3000370784F070930A01609309010895822F87 |
:102E4000992736E0880F991F3A95E1F790930A0188 |
:102E5000809309010895EF92FF920F931F93CF93F0 |
:102E6000DF9380919106E82FFF27E95BFE4F968163 |
:102E7000C08180911101813009F021C18091D50676 |
:102E800087FF05C0C0E0D0E0E0E0F0E046C0892F59 |
:102E9000992787FD9095A92FB92F2091E8023091AD |
:102EA000E9024091EA025091EB02BC01CD010E947F |
:102EB0000E7A97FF04C061587F4F8F4F9F4F7B0161 |
:102EC0008C0187E015950795F794E7948A95D1F7DB |
:102ED0008C2F992787FD9095A92FB92F2091E0027B |
:102EE0003091E1024091E2025091E302BC01CD0138 |
:102EF0000E940E7A97FF04C061587F4F8F4F9F4FFB |
:102F0000B7E09595879577956795BA95D1F7F801CC |
:102F1000E701C61BD70BE80BF90B20916803309132 |
:102F20006903C901A3E0880F991FAA95E1F7821BE5 |
:102F3000930BAA2797FDA095BA2FC81BD90BEA0BB4 |
:102F4000FB0B80916C019927AA27BB27BC01CD01FF |
:102F50009E01AF010E940E7A97FF04C061507E4F20 |
:102F60008F4F9F4FFC01EB0179E0F595E795D795E1 |
:102F7000C7957A95D1F71091D306609109017091A8 |
:102F80000A0112FF05C07093100160930F0118C071 |
:102F900040910F015091100180919006282F332706 |
:102FA000CB01841B950BB9010E944D7A80910F01D2 |
:102FB00090911001860F971F9093100180930F013D |
:102FC00010FF14C080910F019091100197FD0F9692 |
:102FD00064E0959587956A95E1F7AA2797FDA095F6 |
:102FE000BA2FC80FD91FEA1FFB1F15C080910F0110 |
:102FF0009091100197FD0F9654E0959587955A95FD |
:10300000E1F7AA2797FDA095BA2F8C1B9D0BAE0B5D |
:10301000BF0BFD01EC012091C506222321F13327CE |
:103020008091E3019091E401829FA001839F500D64 |
:10303000929F500D1124CA01AA2797FDA095BA2F7F |
:103040008C0F9D1FAE1FBF1F2F5F3F4F442737FDC3 |
:103050004095542FBC01CD010E94827A3093E40147 |
:103060002093E30104C0D093E401C093E301809175 |
:103070008906282F3327220F331F220F331F8091F9 |
:10308000E3019091E401821793077CF080918A0616 |
:10309000282F3327220F331F220F331F8091E30184 |
:1030A0009091E4012817390724F43093E401209328 |
:1030B000E301809111018F5F80931101F9C0892F85 |
:1030C000992787FD9095A92FB92F2091E002309183 |
:1030D000E1024091E2025091E302BC01CD010E9465 |
:1030E0000E7A97FF04C061587F4F8F4F9F4F7B012F |
:1030F0008C0187E015950795F794E7948A95D1F7A9 |
:103100008C2F992787FD9095A92FB92F2091E80240 |
:103110003091E9024091EA025091EB02BC01CD01ED |
:103120000E940E7A9B01AC0197FF04C021583F4FCB |
:103130004F4F5F4FC7E05595479537952795CA95EF |
:10314000D1F72E0D3F1D401F511F80916B01992714 |
:10315000AA27BB27BC01CD010E940E7A97FF04C0AD |
:1031600061507E4F8F4F9F4FFC01EB01B9E0F59509 |
:10317000E795D795C795BA95D1F780916D019927B5 |
:10318000A6E0880F991FAA95E1F740910D01509193 |
:103190000E01209190063327841B950BB9010E94E4 |
:1031A0004D7A80910D0190910E01860F971F90939B |
:1031B0000E0180930D018091D30681FF14C0809190 |
:1031C0000D0190910E0197FD0F9674E095958795EE |
:1031D0007A95E1F7AA2797FDA095BA2FC80FD91FB6 |
:1031E000EA1FFB1F15C080910D0190910E0197FD04 |
:1031F0000F9664E0959587956A95E1F7AA2797FD64 |
:10320000A095BA2F8C1B9D0BAE0BBF0BFD01EC01E3 |
:103210002091C606222321F133278091E10190916C |
:10322000E201829FA001839F500D929F500D1124B7 |
:10323000CA01AA2797FDA095BA2F8C0F9D1FAE1F1C |
:10324000BF1F2F5F3F4F442737FD4095542FBC01D0 |
:10325000CD010E94827A3093E2012093E10104C003 |
:10326000D093E201C093E10180918D06282F33278E |
:10327000220F331F220F331F8091E1019091E20151 |
:10328000821793077CF080918E06282F3327220F18 |
:10329000331F220F331F8091E1019091E201281723 |
:1032A000390724F43093E2012093E10110921101D7 |
:1032B000E6E0CDB7DEB70C94C57A1F920F920FB639 |
:1032C0000F9211242F933F934F935F938F939F936C |
:1032D000EF93FF938091F201882309F0DDC0809184 |
:1032E000B00086FF9FC08091B0008F7B8093B000BC |
:1032F000E091F50120918F06EE23D9F433278DED6F |
:1033000096E0289FA001299F500D389F500D112451 |
:10331000CA012091F3013091F401821B930B909329 |
:10332000E6018093E5011092F4011092F301469AB0 |
:10333000B0C02E1738F48AE090E09093E6018093B5 |
:10334000E501A7C089EA93E09093E6018093E50147 |
:103350008E2F992783309105D9F08430910534F46C |
:103360008130910549F0029761F020C084309105C9 |
:1033700091F0059799F01AC08091E3019091E401D2 |
:1033800004C08091E1019091E20187559E4F1DC0DC |
:103390008091E30805C08091BC0802C08091EC08D0 |
:1033A0009927880F991F880F991FEFCFFF27EE0FDE |
:1033B000FF1FE65DF74F20813181220F331F80917F |
:1033C000E5019091E601820F931F9093E6018093AF |
:1033D000E5018091E5019091E60155E08D3D95076D |
:1033E00018F08CED95E005C08757914030F487E7E1 |
:1033F00091E09093E6018093E5012091E501309101 |
:10340000E6012C5B30403093E6012093E50180918A |
:10341000F3019091F401820F931F9093F401809334 |
:10342000F30137C08091B00080648093B0008CEBD2 |
:1034300090E09093E6018093E5018091F3019091F3 |
:10344000F40184549F4F9093F4018093F301809191 |
:10345000E801882321F080918E02882321F4809155 |
:10346000E801823011F4469801C0469A8091F50136 |
:103470008F5F8093F501282F332780918F0699273E |
:103480000196821793072CF481E08093110110922A |
:10349000F50181E08093F2012091E5013091E60190 |
:1034A00041E02F37340730F08FEF8093B3002F5F68 |
:1034B00030400FC02F3F3105C9F0C0F0A9014F5F68 |
:1034C00050404F37510550F480E88093B3002058A6 |
:1034D00030403093E6012093E50112C08FEF8093D6 |
:1034E000B3005093E6014093E5010AC08091E501E5 |
:1034F0008093B3001092E6011092E5011092F20160 |
:10350000FF91EF919F918F915F914F913F912F91FB |
:103510000F900FBE0F901F90189510927C008FECAB |
:1035200080937A00089580914D026091130170910B |
:10353000140120910202882379F0CB01AA27BB272E |
:10354000332727FD3095432F532FBC01CD010E9417 |
:103550000E7ADC01CB0116C084E0660F771F8A95D6 |
:10356000E1F7CB01AA27BB27332727FD3095432F4F |
:10357000532FBC01CD010E940E7ADC01CB010497D0 |
:10358000A109B1098093FA019093FB01A093FC017A |
:10359000B093FD010895CF93DF93109202020E9431 |
:1035A000931A83E090E00E946C27C82FDD27C03F6C |
:1035B000D10508F42A96C7BD8C2F809588BD86E971 |
:1035C00090E00E948A168091190190911A0181520F |
:1035D000934010F0C0EFD0E0C630D10510F1C7BD68 |
:1035E0008C2F809588BD84E690E00E948A1681E049 |
:1035F00094E09F938F9381E992E19F938F93E09161 |
:10360000B603F091B70309958091190190911A01C1 |
:103610000F900F900F900F908152934010F42197CC |
:10362000DBCFC09306066C2F83E090E00E947427E6 |
:103630008091670680FF0AC0809106068A508C3D03 |
:1036400028F08091CF0380648093CF038CE291E0D7 |
:103650000E948A16DF91CF9108951F920F920FB6A4 |
:103660000F9211242F933F934F935F936F937F9308 |
:103670008F939F93AF93BF93CF93DF93EF93FF937A |
:1036800080911A02282F3327442755278F5F809374 |
:103690001A02F9012231310508F0DEC3E25CFF4F66 |
:1036A0000C94D47A809178009091790046C08091F2 |
:1036B0007800909179007BC1809178009091790099 |
:1036C00090931E0280931D028BC18091F202909113 |
:1036D000F3022091780030917900821B930B909334 |
:1036E000F9058093F8058091F8059091F90590937C |
:1036F00028028093270292C18091780090917900EE |
:103700002091F4023091F502821B930B90930506F1 |
:1037100080930406809104069091050690932A02F6 |
:10372000809329029BC380912102909122022091D3 |
:10373000780030917900820F931F9093220280933A |
:10374000210281E08CC380911F0290912002209180 |
:10375000780030917900820F931F9093200280931C |
:103760001F0284E07CC38091300290913102892B4A |
:1037700091F42091780030917900C901E3E0880F3D |
:10378000991FEA95E1F7820F931F820F931F909381 |
:103790003102809330022091780030917900C90184 |
:1037A00073E0880F991F7A95E1F7820F931F820FBC |
:1037B000931F20913002309131028217930718F045 |
:1037C0002E5F3F4F02C02250304030933102209391 |
:1037D000300280913002909131026FE170E00E94DE |
:1037E000397A709324016093230185E038C3809176 |
:1037F0007800909179009093FB058093FA05809171 |
:10380000FA059091FB054091EE025091EF02841B66 |
:10381000950B2091ED02332727FD3095821B930BEA |
:10382000909308028093070280914D02882309F04B |
:103830006DC0809107029091080202977CF122E00E |
:103840004E3E52070CF062C020911B0230911C02C8 |
:103850002B5F3F4F30931C0220931B0225503040BA |
:103860008091560290915702845F914030F4215F1D |
:103870003F4F30931C0220931B0280911B029091BA |
:103880001C02853691050CF441C04F5F5F4F509389 |
:10389000EF024093EE028456904034C080910702BC |
:1038A000909108028F5F9F4F8CF562E04732560778 |
:1038B0006CF120911B0230911C0225503040309356 |
:1038C0001C0220931B022B5F3F4F80915602909168 |
:1038D0005702845F914030F42F50304030931C02E7 |
:1038E00020931B0280911B0290911C022FEF8C39B8 |
:1038F000920764F4415050405093EF024093EE021F |
:103900008C599F4F90931C0280931B028091070259 |
:10391000909108029C01442737FD4095542F8091D7 |
:10392000A8029091A902A091AA02B091AB02820FC5 |
:10393000931FA41FB51F8093A8029093A902A09380 |
:10394000AA02B093AB022091A8023091A902409143 |
:10395000AA025091AB0257FF04C021503C4F4F4F79 |
:103960005F4F6AE055954795379527956A95D1F74A |
:103970008091A8029091A902A091AA02B091AB02F5 |
:10398000821B930BA40BB50B8093A8029093A90202 |
:10399000A093AA02B093AB02F5C080911F02909150 |
:1039A00020022091780030917900820F931F90932C |
:1039B000200280931F021092190253C220917800B6 |
:1039C0003091790080911D0290911E02280F391FBD |
:1039D0008FEF97E0821B930B90930E0280930D0262 |
:1039E00086E03DC28091F2029091F302209178002E |
:1039F00030917900821B930B9093F9058093F80521 |
:103A00008091F8059091F9052091270230912802C4 |
:103A1000820F931F90930C0280930B0287E01FC2CA |
:103A200080917800909179002091F4023091F50214 |
:103A3000821B930B909305068093040680910406E5 |
:103A4000909105062091290230912A02820F931F3E |
:103A500090930A028093090201C2209121023091C1 |
:103A600022028091780090917900280F391F220F4F |
:103A7000331F220F331F3093220220932102C901EA |
:103A800037FD079643E0959587954A95E1F7909322 |
:103A90001202809311028091230290912402820FDE |
:103AA000931F97FD01969595879590932402809397 |
:103AB00023022091FE023091FF02821B930B909310 |
:103AC00022018093210120911702309118028091E8 |
:103AD000210190912201280F391F37FF02C02F5F6B |
:103AE0003F4F35952795309318022093170229CE22 |
:103AF00020911F02309120028091780090917900EE |
:103B0000280F391F220F331F220F331F309320023B |
:103B100020931F02C90137FD0796F3E0959587951D |
:103B2000FA95E1F79093100280930F02809125029D |
:103B300090912602820F931F97FD01969595879588 |
:103B400090932602809325022091FC023091FD0281 |
:103B5000821B930B9093200180931F0120911502EB |
:103B60003091160280911F0190912001280F391F7A |
:103B700037FF02C02F5F3F4F3595279530931602D0 |
:103B80002093150283E06BC1809188029091890295 |
:103B9000A0918A02B0918B028093F6019093F70175 |
:103BA000A093F801B093F90110921A0281E080937A |
:103BB00015018091FE019091FF0101969093FF0104 |
:103BC0008093FE01809178009091790090931A0182 |
:103BD000809319018091190190911A01AA27BB279E |
:103BE000C0912B02D0912C02E0912D02F0912E0277 |
:103BF000C80FD91FEA1FFB1FC0932B02D0932C02C2 |
:103C0000E0932D02F0932E0280912F028F5F80931C |
:103C10002F02803108F422C180911B0190911C0178 |
:103C2000A0911D01B0911E019C01AD0163E0220F26 |
:103C3000331F441F551F6A95D1F7281B390B4A0BB8 |
:103C40005B0B2C0F3D1F4E1F5F1F8091FA0190915F |
:103C5000FB01A091FC01B091FD01281B390B4A0B1F |
:103C60005B0B57FF04C0295F3F4F4F4F5F4F93E0FF |
:103C700055954795379527959A95D1F720931B0130 |
:103C800030931C0140931D0150931E01C091FC050F |
:103C9000D091FD05E091FE05F091FF0580911B019B |
:103CA00090911C01A0911D01B0911E01C81BD90B60 |
:103CB000EA0BFB0BC0938802D0938902E0938A023F |
:103CC000F0938B022091030230910402409105028F |
:103CD0005091060257FF04C0215F3F4F4F4F5F4F87 |
:103CE00084E055954795379527958A95D1F780912A |
:103CF000030290910402A0910502B0910602821B7A |
:103D0000930BA40BB50B8093030290930402A09332 |
:103D10000502B09306028091030290910402A091E3 |
:103D20000502B09106028C0F9D1FAE1FBF1F80932E |
:103D3000030290930402A0930502B09306028091BF |
:103D4000030290910402A0910502B0910602B7FF10 |
:103D500003C00F96A11DB11DC4E0B595A795979519 |
:103D60008795CA95D1F72091880230918902281B46 |
:103D7000390B64E0213036071CF020E034E006C047 |
:103D80008CEF2030380714F420E03CEF80910002E3 |
:103D900090910102809100029091010297FF03C06F |
:103DA000909581959F4FA901F3E0440F551FFA9517 |
:103DB000E1F78D5B9240C4F0809100029091010286 |
:103DC0009C01E4E0220F331FEA95E1F7281B390B31 |
:103DD000240F351F37FF02C0215F3F4F74E0359538 |
:103DE00027957A95E1F717C0809100029091010222 |
:103DF0009C0165E0220F331F6A95E1F7281B390B00 |
:103E0000240F351F37FF02C0215E3F4F45E0359537 |
:103E100027954A95E1F730930102209300028091A3 |
:103E20002B0290912C02A0912D02B0912E02B7FF8F |
:103E300003C00196A11DB11DB595A79597958795CE |
:103E400080932B0290932C02A0932D02B0932E020C |
:103E500088E080932F0202C010921A0282E08093C1 |
:103E600019028091190280937C0080911A028823A4 |
:103E700019F08FEC80937A00FF91EF91DF91CF9151 |
:103E8000BF91AF919F918F917F916F915F914F9172 |
:103E90003F912F910F900FBE0F901F90189590E2B9 |
:103EA000E9E0F6E08FE49193815087FFFCCF08951D |
:103EB00090913402903540F4E92FFF27E75FF94FE6 |
:103EC00080839F5F909334020895A0E0B0E0EBE61A |
:103ED000FFE10C94A77A2091320220FF0AC0809162 |
:103EE0003302882311F0815002C080912501809314 |
:103EF000330221FF0CC09091330280912501981765 |
:103F000019F41092330203C09F5F90933302822F03 |
:103F1000992780FF04C081FF02C0109233020E94E3 |
:103F20004F1F80913302282F332708E51FE1C091EE |
:103F3000B603D091B7038A3098F481E180933402BC |
:103F40003F932F9383E094E09F938F931F930F935E |
:103F5000FE0109952DB73EB72A5F3F4F2DBF11C017 |
:103F600080E1809334023F932F9388E094E09F9305 |
:103F70008F931F930F93FE0109958DB79EB70696F9 |
:103F80008DBF20913302822F9927AA27BB27FC01DE |
:103F90000D9708F096C5E05BFF4F08E51FE1C09163 |
:103FA000B603D091B7030C94D47A109234028DE00A |
:103FB00094E09F938F9358E5E52E5FE1F52E1F93D4 |
:103FC0000F93FE01099584E1809334020F900F90C6 |
:103FD0000F900F9085E690E09F938F9386E090E09E |
:103FE0009F938F9382E090E09F938F938091030142 |
:103FF0006AE00E942D7A892F99279F938F93809151 |
:1040000003010E942D7A99279F938F938DE194E06D |
:104010009F938F931F930F93E091B603F091B70393 |
:10402000099588E280933402EDB7FEB73E96EDBF66 |
:1040300084EE96E09F938F938091010199279F933F |
:104040008F9385E394E09F938F931F930F93E09159 |
:10405000B603F091B70309958091D0032DB73EB711 |
:10406000285F3F4F2DBF84FF0AC08CE3809334024A |
:1040700083E494E09F938F931F930F933DC090919F |
:10408000CF03992351F08CE380933402892F992731 |
:104090009F938F9380E594E047C090913A029923D3 |
:1040A00051F08CE380933402892F99279F938F934B |
:1040B00087E694E02EC190916E03992371F08CE312 |
:1040C00080933402892F99279F938F938DE794E0F3 |
:1040D0009F938F93FF92EF9288C3809139019091C3 |
:1040E0003A01069798F48CE3809334028EE894E0CA |
:1040F0009F938F93FF92EF92E091B603F091B703F5 |
:1041000009950F900F900F900F90E4C49091A4091F |
:104110009E3108F0DFC48CE380933402892F992705 |
:104120009F938F938BE994E09F938F93FF92EF92ED |
:10413000E091B603F091B70309958DB79EB7069647 |
:104140008DBFC8C410923402809188029091890278 |
:10415000A0918A02B0918B02BC01CD0125E030E034 |
:1041600040E050E00E94827A3F932F938FEA94E0E0 |
:104170009F938F931F930F93FE01099584E1809382 |
:104180003402EDB7FEB73696EDBF80918402909170 |
:104190008502A0918602B0918702BC01CD0125E085 |
:1041A00030E040E050E00E94827A3F932F938CEB06 |
:1041B00094E09F938F931F930F93E091B603F09138 |
:1041C000B703099588E2809334022DB73EB72A5F82 |
:1041D0003F4F2DBF8091190190911A019F938F93AA |
:1041E00089EC94E09F938F931F930F93E091B60314 |
:1041F000F091B70309958CE3809334028DB79EB795 |
:1042000006968DBF87B599279F938F9386ED94E08F |
:104210009F938F931F930F93E091B603F091B70391 |
:104220000995EDB7FEB7369690C31092340283EE2F |
:1042300094E09F938F9348E5E42E4FE1F42E1F9373 |
:104240000F93FE01099584E1809334020F900F9043 |
:104250000F900F908091E8029091E902A091EA02FC |
:10426000B091EB02B7FF04C081509C4FAF4FBF4FDE |
:104270003AE0B595A795979587953A95D1F7BF936D |
:10428000AF939F938F9380EF94E09F938F93FF92D0 |
:10429000EF92E091B603F091B703099588E280931D |
:1042A00034022DB73EB7285F3F4F2DBF8091E0020B |
:1042B0009091E102A091E202B091E302B7FF04C045 |
:1042C00081509C4FAF4FBF4F2AE0B595A79597956A |
:1042D00087952A95D1F7BF93AF939F938F938FEFD5 |
:1042E00094E09F938F93FF92EF92E091B603F09149 |
:1042F000B70309958CE3809334028DB79EB7089677 |
:104300008DBF80911009909111099F938F938EE03A |
:1043100095E09F938F93FF92EF927ECF91E0F92EDD |
:10432000C1E0D0E00CE218E09F2D969584E1989FC3 |
:10433000C001112480933402F801828193819F93FC |
:104340008F932196DF93CF932197808191819F93C3 |
:104350008F93DF93CF938DE195E09F938F9388E5C3 |
:104360009FE19F938F93E091B603F091B703099576 |
:104370002DB73EB7245F3F4F2DBF32E0F30E22969C |
:104380000C5F1F4F88E08F1578F6A4C3109234029B |
:1043900080915C06E82FFF27EE0FFF1FE65DF74FC9 |
:1043A000808191819F938F9380915B06E82FFF27F7 |
:1043B000EE0FFF1FE65DF74F808191819F938F93F2 |
:1043C0008FE295E09F938F931F930F93FE010995C2 |
:1043D00084E180933402EDB7FEB73896EDBF80914B |
:1043E0005E06E82FFF27EE0FFF1FE65DF74F808187 |
:1043F00091819F938F9380915D06E82FFF27EE0FA9 |
:10440000FF1FE65DF74F8081918181589F4F9F93F9 |
:104410008F938FE395E09F938F931F930F93E0917A |
:10442000B603F091B703099588E2809334022DB763 |
:104430003EB7285F3F4F2DBF80916006E82FFF27D2 |
:10444000EE0FFF1FE65DF74F8081918181589F4FEE |
:104450009F938F9380915F06E82FFF27EE0FFF1F3A |
:10446000E65DF74F8081918181589F4F9F938F9395 |
:104470008FE495E09F938F931F930F93E091B60382 |
:10448000F091B70309958CE3809334028DB79EB702 |
:1044900008968DBF80916206E82FFF27EE0FFF1F61 |
:1044A000E65DF74F8081918181589F4F9F938F9355 |
:1044B00080916106E82FFF27EE0FFF1FE65DF74FA3 |
:1044C0008081918181589F4F9F938F938FE595E0D5 |
:1044D00030C2109234028FE695E09F938F9388E567 |
:1044E000E82E8FE1F82E1F930F93FE01099584E1CA |
:1044F000809334020F900F900F900F908091FE02E6 |
:104500009091FF029C0197FF02C0215F3F4F207FE7 |
:10451000821B930B97FD0196959587959F938F939B |
:104520008091FE029091FF0297FD0F96B4E0959561 |
:104530008795BA95E1F79F938F932091FE02309172 |
:10454000FF0237FF02C0295F3F4FA3E03595279553 |
:10455000AA95E1F78091110290911202821B930BB0 |
:104560009F938F938DE795E09F938F93FF92EF92A8 |
:10457000E091B603F091B703099588E28093340285 |
:104580002DB73EB7265F3F4F2DBF8091FC02909123 |
:10459000FD029C0197FF02C0215F3F4F207F821BDD |
:1045A000930B97FD0196959587959F938F93809197 |
:1045B000FC029091FD0297FD0F96E4E0959587959A |
:1045C000EA95E1F79F938F932091FC023091FD02D1 |
:1045D00037FF02C0295F3F4F73E0359527957A95E5 |
:1045E000E1F780910F0290911002821B930B9F9331 |
:1045F0008F938FE895E09F938F93FF92EF92E091D6 |
:10460000B603F091B70309958CE3809334028DB71C |
:104610009EB70A968DBF8091FA029091FB0297FD9A |
:104620000196959587959F938F938091FA0290912B |
:10463000FB0220910D0230910E02821B930B9F937F |
:104640008F9381EA95E09F938F93FF92EF9275C1CC |
:104650001092340280EB95E09F938F931F930F93FA |
:10466000FE01099584E1809334020F900F900F9022 |
:104670000F908091F4029091F5029F938F93809117 |
:10468000090290910A029F938F938DEB95E09F937F |
:104690008F931F930F93E091B603F091B7030995A1 |
:1046A00088E2809334022DB73EB7285F3F4F2DBF7D |
:1046B0008091F2029091F3029F938F9380910B026D |
:1046C00090910C029F938F938CEC95E09F938F9326 |
:1046D0001F930F93E091B603F091B70309958CE314 |
:1046E000809334028DB79EB708968DBF8091EE02FD |
:1046F0009091EF029F938F9380910702909108020F |
:104700009F938F938BED95E014C1109234028091AA |
:104710002301909124016AE070E00E944D7A9F93FA |
:104720008F9380912301909124016AE070E00E94B0 |
:104730004D7A7F936F938AEE95E09F938F931F93AB |
:104740000F93FE01099584E1809334022DB73EB7A3 |
:10475000285F3F4F2DBF80919E0990919F096AE08D |
:1047600070E00E94397A9F938F9380919E09909177 |
:104770009F096AE070E00E94397A7F936F938EEF11 |
:1047800095E09F938F931F930F93E091B603F09161 |
:10479000B703099588E2809334028DB79EB70896D7 |
:1047A0008DBF8091A0099091A1099F938F9382E181 |
:1047B00096E09F938F931F930F93E091B603F09130 |
:1047C000B70309958CE380933402EDB7FEB73696B4 |
:1047D000EDBF8091A2099091A3099F938F9382E2EC |
:1047E00096E09F938F931F930F93E091B603F09100 |
:1047F000B70309952DB73EB72A5F3F4F2DBF6AC15A |
:104800001092340284E396E09F938F931F930F934B |
:10481000FE01099588E2809334020F900F900F906B |
:104820000F9080918E0299279F938F938DE396E04E |
:104830009F938F931F930F93E091B603F091B7036B |
:1048400009958CE3809334028DB79EB706968DBF91 |
:1048500080912908992701979F938F938DE496E083 |
:10486000D7CC109234028DE596E09F938F931F93DF |
:104870000F93FE01099584E1809334020F900F900D |
:104880000F900F90809102016AE00E942D7A892F8B |
:1048900099279F938F93809102010E942D7A9927E7 |
:1048A0009F938F938DE696E09F938F931F930F9323 |
:1048B000E091B603F091B703099588E28093340242 |
:1048C0002DB73EB7285F3F4F2DBF8091BB016AE0F7 |
:1048D0000E942D7A892F99279F938F938091BB01F6 |
:1048E0000E942D7A99279F938F938BE796E09F9351 |
:1048F0008F931F930F93E091B603F091B70309953F |
:104900008CE3809334028DB79EB708968DBF80915B |
:10491000BC016AE00E942D7A892F99279F938F937B |
:104920008091BC010E942D7A99279F938F9389E8EB |
:1049300096E09F938F931F930F93E091B603F091AE |
:10494000B7030995EDB7FEB73896EDBFC3C05FE872 |
:10495000C52E52E0D52E20E030E0E90143E0F42EF0 |
:10496000C0933402F60181916F0199279F938F9331 |
:1049700089010F5F1F4F1F930F9387E996E09F9365 |
:104980008F9388E59FE19F938F93E091B603F09119 |
:10499000B70309952DB73EB7285F3F4F2DBFFA9457 |
:1049A00064969801F7FEDCCF95C093E9C92E92E09A |
:1049B000D92EC0E0D0E08E0183E0F82E00933402BF |
:1049C000F60181916F0199279F938F932596DF932D |
:1049D000CF9384EA96E09F938F9388E59FE19F931E |
:1049E0008F93E091B603F091B70309952DB73EB7C9 |
:1049F000285F3F4F2DBFFA940C5E1F4F2497F7FEA0 |
:104A0000DDCF68C01092340281EB96E09F938F93C4 |
:104A10001F930F93FE01099584E1809334020F9058 |
:104A20000F900F900F908091B7019091B8019F93D4 |
:104A30008F938FEB96E09F938F931F930F93E0914B |
:104A4000B603F091B703099588E2809334028DB7DD |
:104A50009EB706968DBF8091B9019091BA019F9340 |
:104A60008F938CEC96E09F938F931F930F93E0911D |
:104A7000B603F091B703099589E480933402EDB74A |
:104A8000FEB73696EDBF89ED96E09F938F931F9307 |
:104A90000F93E091B603F091B7030995809132022C |
:104AA0000F900F900F900F9083FF14C01092BA01D7 |
:104AB0001092B90160E070E08EE090E00E948527DE |
:104AC00009C080912501281719F421502093250150 |
:104AD0001092330210923202E8E0CDB7DEB70C94A8 |
:104AE000C37AF999FECF92BD81BDF89A80B5992716 |
:104AF0000895F999FECF1FBA92BD81BD60BD0FB672 |
:104B0000F894FA9AF99A0FBE08954AEA20E030E044 |
:104B10002617370740F4FC018191480F2F5F3F4F64 |
:104B200026173707C8F3842F99270895EAEA40E04B |
:104B300050E04617570778F49C01F999FECF32BD33 |
:104B400021BDF89A80B5E80F4F5F5F4F2F5F3F4F51 |
:104B50004617570790F38E2F9927089581E0809389 |
:104B60005D0682E080935C0683E080935B0684E0D0 |
:104B700080935E0685E080935F0686E08093600602 |
:104B800087E08093610688E08093620689E08093E5 |
:104B900063068AE0809364068BE0809365068CE070 |
:104BA00080936606089586E680935A063CE0E6ED1B |
:104BB000F6E0832F11928A95E9F78AE080937A06CE |
:104BC00010929E068BE1809376068EE480939B067E |
:104BD00080939C06B0E2B0939D061092D2068AE6BE |
:104BE0008093670682E78093D40680E58093D5069C |
:104BF00084E0809381061092BF061092BC0678E094 |
:104C00007093740626EE2093750680E480937706F1 |
:104C100085E080936A06FEE1F09368069FE090933A |
:104C20006B06F093690610926D0670936E0684E130 |
:104C300080936F06109270061092C20690936C06D5 |
:104C40001092CB063093CC06109283061092840605 |
:104C500010928506109286061092A0061092A10668 |
:104C60001092A2061092A30690E89093870642E362 |
:104C700040938806A2E0A093D30688E1809389063A |
:104C800020938A0683E080938F065DE75093920617 |
:104C9000509393065093940690938B06E5E5E0932A |
:104CA0008C0666E460938D068CED80938E068CE313 |
:104CB00080939006109291069AEA9093A4068CEC49 |
:104CC0008093A6061092A8069093A90698E2909366 |
:104CD000A5069093A7061092AA061092D0064093BC |
:104CE000D106409395062AE52093960640939706B1 |
:104CF00036E03093AB0684E68093AC068093AD0635 |
:104D00002093AE0688E78093AF069093B3068BE4BA |
:104D10008093B006E093B1068093B2063093B40658 |
:104D20007093B5064093B6068AE28093B706109258 |
:104D3000B8061092BB069CE89093B906A093BA06F9 |
:104D40001092BD061092BE0681E480937F062093E8 |
:104D500080061092C0061092C10686E98093C306B1 |
:104D60005093980684E3809399061092C40610929B |
:104D7000C5061092C6069093C7066093C806909326 |
:104D8000C9066093CA061092CD06B0937E068FE1E5 |
:104D90008093CF06F093CE0608950E94D3258AE033 |
:104DA0008093710680E18093720626E0209373065B |
:104DB0009AE59093780688E78093790690937B062E |
:104DC00080937C0620937D0680E2809382068CE3AC |
:104DD00080939A068BE480939F0686E491E6A3E78E |
:104DE000B4E78093D6069093D706A093D806B093E5 |
:104DF000D90668E870E08AE596E00E9485258093F0 |
:104E0000E2060895CF93DF930E94D32588E0809334 |
:104E1000710630E13093720626E02093730694E623 |
:104E20009093780688E78093790690937B06809329 |
:104E30007C0620937D063093820686E480939A0652 |
:104E400080939F06A6EDB6E085E0E6E2F1E0ED0195 |
:104E5000019009928A95E1F768E870E0CD018C57DE |
:104E600090400E9485258093E206DF91CF910895BE |
:104E70000E94D32526E0209371068AE08093720673 |
:104E800084E08093730694E69093780688E7809395 |
:104E9000790690937B0680937C0620937D0680E1C3 |
:104EA0008093820686E480939A0680939F0685E429 |
:104EB00091E6A3E7B9E78093D6069093D706A0932F |
:104EC000D806B093D90668E870E08AE596E00E94BB |
:104ED00085258093E2060895F999FECF92BD81BDA4 |
:104EE000F89A80B599270895F999FECF1FBA92BD17 |
:104EF00081BD60BD0FB6F894FA9AF99A0FBE089575 |
:104F000061E775E20E949C78089549E755E20E94A6 |
:104F1000D6780895EF92FF920F931F93CF93C82FE7 |
:104F20008150853008F0C3E089E8C89F80011124D2 |
:104F30008BEDE82E8FEFF82EE00EF11E68E870E0A2 |
:104F4000C7010E949625682F98012D593F4F8FB3B6 |
:104F50009927AC014270507081FDF9CF32BD21BD5F |
:104F6000F89A80B5861711F0CA0121C08FB399272E |
:104F70009C012270307081FDF9CFF2BCE1BCF89A3F |
:104F800080B5863611F0C90112C089E8C89FC001FA |
:104F90001124859721E735E249E850E0BC018AE514 |
:104FA00096E00E9477780E94266781E090E0CF919A |
:104FB0001F910F91FF90EF900895282F863010F0E9 |
:104FC00025E003C0882309F421E020930101F99929 |
:104FD000FECF1FBA82E090E092BD81BD20BD0FB62A |
:104FE000F894FA9AF99A0FBE0895CF93C82F80913A |
:104FF0005A06863609F04FC0C63010F0C5E003C02F |
:10500000CC2309F448C00E94F0768091D50682FF37 |
:1050100007C080917F06843618F080E580937F0674 |
:1050200068E870E08AE596E00E9485258093E206B4 |
:1050300089E8C89FC001112429E735E249E850E01A |
:105040006AE576E085970E94B47829E735E24CE07E |
:1050500050E06BE576E080E590E00E94B4786CE08B |
:1050600070E08BE596E00E948525282FF999FECF08 |
:105070001FBA8CE590E092BD81BD20BD0FB6F894BB |
:10508000FA9AF99A0FBE8C2F0E94DD270E9426679C |
:1050900081E090E002C080E090E0CF9108956DE45F |
:1050A00070E088EE93E00E949625482F8FB39927F1 |
:1050B0009C012270307081FDF9CF85E394E092BDB0 |
:1050C00081BDF89A80B5841779F48FB399279C0134 |
:1050D0002270307081FDF9CF88EE93E092BD81BDE2 |
:1050E000F89A80B5813011F0C901089521E735E2C1 |
:1050F0004EE450E068EE73E083EE96E00E9477782D |
:1051000081E090E008958091E3068130A9F46DE498 |
:1051100070E083EE96E00E9485258093300729E7B2 |
:1051200035E24EE450E063EE76E088EE93E00E94D4 |
:10513000B47881E090E0089580E090E00895CF9306 |
:10514000DF9381E08093E306E3EEF6E08FE01586DF |
:1051500016861786108A8150349687FFF8CF80E430 |
:105160008093F0068093F1061092F2068093F30686 |
:105170008093F40690EC9093F5061092F6068093D7 |
:10518000F7068093F8061092F9069093FA0690932A |
:10519000FB068093FC061092FD068093FE0690931A |
:1051A000FF06A4EEB6E08CE0ECE2F1E0ED01019048 |
:1051B00009928A95E1F76DE470E0CD0101970E94B4 |
:1051C000852580933007DF91CF910895F999FECF1F |
:1051D00082E090E092BD81BDF89A80B5282F86309C |
:1051E00078F023E0322FF999FECF1FBA82E090E0E9 |
:1051F00092BD81BD30BD0FB6F894FA9AF99A0FBEF0 |
:1052000020930101822F992708951F93CF93C82FD0 |
:10521000162F863010F0C5E003C0882309F4C1E0E2 |
:105220008C2F99278230910541F08330910544F409 |
:10523000019731F40E94CD2605C00E94022702C0CA |
:105240000E9438271123E1F06CE070E080E590E0E7 |
:105250000E949625282FF999FECF8CE590E092BD0B |
:1052600081BDF89A80B5821759F421E735E24CE008 |
:1052700050E060E570E08BE596E00E94777802C030 |
:105280000E94AE258C2F0E94F527CF911F91089583 |
:10529000DF92EF92FF920F931F93CF93FF24DF2CA7 |
:1052A000EF2C81E090E00E946C27863611F031E00F |
:1052B000E32E6CE070E080E590E00E949625C82F18 |
:1052C000F999FECF8CE590E092BD81BDF89A80B54A |
:1052D0008C1711F421E0D22EC1E001E010E0EE20A5 |
:1052E00029F48C2F0E948A278823B9F591E0F92EA2 |
:1052F0001F930F9381EE96E09F938F9381E992E144 |
:105300009F938F93E091B603F091B70309952DB762 |
:105310003EB72A5F3F4F2DBF0130110521F002300B |
:10532000110521F006C00E94CD2605C00E9402276B |
:1053300002C00E943827DD2059F021E735E24CE019 |
:1053400050E060E570E08BE596E00E94777802C05F |
:105350000E94AE258C2F0E94F527CF5F0F5F1F4F55 |
:10536000C63008F4BCCFFF2019F083E00E94DD278F |
:105370000E94E628C82F0E948A278C2F99279F9386 |
:105380008F9387E097E09F938F9301E912E11F933A |
:105390000F93E091B603F091B703099581E090E097 |
:1053A0000E946C272DB73EB72A5F3F4F2DBF8F3F1E |
:1053B00021F00E944F28882399F480E297E09F9380 |
:1053C0008F931F930F93E091B603F091B703099564 |
:1053D0000E949F280E9483280F900F900F900F909B |
:1053E000EE2029F066E681E090E00E94742710929A |
:1053F000590690E0E0EFF6E0CFE080813496181691 |
:105400000CF49F5FC150C7FFF8CF90935906892FC6 |
:1054100099279F938F9384EE96E09F938F9381E4D7 |
:1054200097E09F938F931F930F93E091B603F091B2 |
:10543000B70309950E94F1058DB79EB708968DBFF9 |
:10544000CF911F910F91FF90EF90DF900895982FCB |
:105450002FB7F8943998389A88B1836088B98091C9 |
:10546000B9008C7F8093B9008AE28093B8001092D3 |
:105470003F0210923D0210923C029923B1F0E5E701 |
:10548000F7E08BE01082118212821382148215825F |
:105490001682178216861086118612861386148647 |
:1054A000158681503F9687FFEDCF78942FBF0895E2 |
:1054B00010923F0284E98093BC0080E88093BC0096 |
:1054C0001092BD001092BA001092BB001092B90069 |
:1054D0001092B80010923B0280E00E94272A10929E |
:1054E000BB0085E88093BC00809139028260809384 |
:1054F000390208951F920F920FB60F9211242F9325 |
:105500003F936F937F938F939F93EF93FF9380913C |
:105510003F02282F33278F5F80933F0223303105CE |
:1055200009F41CC1243031055CF42130310509F443 |
:1055300054C0223031050CF099C0232B71F02EC3DA |
:105540002530310509F470C1253031050CF41EC138 |
:105550002630310509F434C221C381E080933B0237 |
:1055600009C080913D028C3090F480913D028F5FA4 |
:1055700080933D0280913D02E82FFF27EE0FFF1F31 |
:10558000EE0FFF1FED51F94F8585181654F78091E6 |
:105590003D026CE00E942D7A90933D02809145027D |
:1055A0008F5F8093450290913B01981770F41092A1 |
:1055B0004502109238021092370285E080933F0234 |
:1055C00080913C02880F8D5A04C080913D02880F63 |
:1055D0008E5A8093BB0085E824C180913D029927B3 |
:1055E000FC0124E0EE0FFF1F2A95E1F7E81BF90B01 |
:1055F000EB58F84F81818093BB0085E88093BC0015 |
:1056000080913D029927FC01E295F295F07FFE27FB |
:10561000E07FFE27E81BF90BEB58F84F808180FFF5 |
:105620009BC080913D029927FC01E295F295F07FA5 |
:10563000FE27E07FFE27E81BF90BEB58F84F82812D |
:10564000882329F080915906873008F4BDC28091E3 |
:10565000370290913802892B09F0B6C28091350249 |
:1056600090913602892B09F0AFC276C080913D023D |
:1056700021E030E002C0220F331F8A95E2F78091CB |
:1056800035029091360228233923232B81F0809113 |
:105690003D029927FC0174E0EE0FFF1F7A95E1F7B8 |
:1056A000E81BF90BEB58F84F80E184830EC0809122 |
:1056B0003D029927FC0164E0EE0FFF1F6A95E1F7B8 |
:1056C000E81BF90BEB58F84F148280913D029927A3 |
:1056D000FC01E295F295F07FFE27E07FFE27E81BB4 |
:1056E000F90BEB58F84F8481282F3327220F331FF3 |
:1056F000220F331F220F331F80913D029927FC0197 |
:1057000034E0EE0FFF1F3A95E1F7E81BF90BEB5879 |
:10571000F84F82818770822B8093BB0085E880934D |
:10572000BC0020913D0281E090E002C0880F991FEB |
:105730002A95E2F720913702309138028223932391 |
:10574000892B51F08DE697E09093430280934202BB |
:1057500088E08093440238C284E01DC2E091420296 |
:10576000F091430281918093BB0085E88093BC0057 |
:10577000F0934302E093420280914402815080936F |
:105780004402882309F420C283E005C28091B90055 |
:10579000803379F580914002882329F480913D027D |
:1057A0008F5F8093400280913D029927FC01E29532 |
:1057B000F295F07FFE27E07FFE27E81BF90BEB5800 |
:1057C000F84F838199278F7790708F3791058CF4EC |
:1057D00080913D029927FC01E295F295F07FFE272A |
:1057E000E07FFE27E81BF90BEB58F84F83818F5FB2 |
:1057F000838310923F0284E98093BC008AE090E0AA |
:1058000090933A018093390180913D028F5F80939C |
:105810003D0210923F02809139028E7F80933902BF |
:1058200085EA8093BC00D0C18091B9008034D1F169 |
:1058300080913C029927FC0174E0EE0FFF1F7A95DE |
:10584000E1F7E81BF90BEB58F84F83818F778383DF |
:1058500080913C028F5F80933C0280913C028C30AF |
:10586000A0F010923C021092360210923502809104 |
:1058700041028F5F809341028C3038F010924102D8 |
:10588000809139028D7F8093390280913902816045 |
:105890008093390210923F0284E98093BC001092F9 |
:1058A0003B0287C080913C029927FC0164E0EE0F27 |
:1058B000FF1F6A95E1F7E81BF90BEB58F84F83815E |
:1058C0008068838380913C029927FC01E295F295E0 |
:1058D000F07FFE27E07FFE27E81BF90BEB58F84F1F |
:1058E000808180FF42C080913C029927FC01E295B3 |
:1058F000F295F07FFE27E07FFE27E81BF90BEB58BF |
:10590000F84F848199270097D9F0409709F048C053 |
:105910008DE697E0909343028093420288E0809363 |
:10592000440280913C029927FC0134E0EE0FFF1FF6 |
:105930003A95E1F7E81BF90BEB58F84F148230C0A9 |
:1059400090913C028FE0989FC00111248658984F97 |
:10595000909343028093420290913C0280914102D5 |
:105960009817D9F480913C0119C090913C028FE0C6 |
:10597000989FC00111248658984F909343028093BA |
:1059800042028091390281FD06C090913C028091D3 |
:105990004102981711F482E001C081E08093440233 |
:1059A00080914402813011F485E801C085EC809338 |
:1059B000BC008091400280933A021092400204C1E0 |
:1059C000E0914202F09143028091BB00808380917C |
:1059D00042029091430201969093430280934202C7 |
:1059E00080914402815080934402823010F085EC13 |
:1059F000CFC0813011F485E8CBC08091390281FF9E |
:105A00007BC08091550280FD77C080913C02992730 |
:105A1000FC0124E0EE0FFF1F2A95E1F7E81BF90BCC |
:105A2000EB58F84F868199278C7F9070883F9105BD |
:105A300091F480913C029927FC01E295F295F07F68 |
:105A4000FE27E07FFE27E81BF90BEB58F84F80811B |
:105A5000816080830FC080913C029927FC01E29510 |
:105A6000F295F07FFE27E07FFE27E81BF90BEB584D |
:105A7000F84F108280913C029927FC0174E0EE0FF0 |
:105A8000FF1F7A95E1F7E81BF90BEB58F84F868179 |
:105A9000883F81F480913C029927FC0164E0EE0F7D |
:105AA000FF1F6A95E1F7E81BF90BEB58F84F80816F |
:105AB000866021C080913C029927FC01E295F29515 |
:105AC000F07FFE27E07FFE27E81BF90BEB58F84F2D |
:105AD0008681893F89F480913C029927FC01E295F7 |
:105AE000F295F07FFE27E07FFE27E81BF90BEB58CD |
:105AF000F84F8081846080838091550281FF20C0AF |
:105B000080913C029927FC0134E0EE0FFF1F3A958B |
:105B1000E1F7E81BF90BEB58F84F86818E3F80F4D4 |
:105B200080913C029927FC0124E0EE0FFF1F2A958B |
:105B3000E1F7E81BF90BEB58F84F86858F5F8687F6 |
:105B400080913C028F5F80933C0280913C028C30BC |
:105B5000A0F010923C021092360210923502809111 |
:105B600041028F5F809341028C3038F010924102E5 |
:105B7000809139028D7F8093390210923F0284E92F |
:105B80008093BC00809139028160809339021AC0F1 |
:105B90008093BC0086E080933F0216C010923F02C3 |
:105BA00084E98093BC00809139028160809339023E |
:105BB0008AE090E090933A018093390110923D027F |
:105BC00010923C0210923B02FF91EF919F918F91B6 |
:105BD0007F916F913F912F910F900FBE0F901F906B |
:105BE00018950F931F93CF93DF93182F80918D02F9 |
:105BF000882321F48091C801882319F081E090E086 |
:105C000091C01D3008F08CC01123C9F0812F992755 |
:105C1000FC0144E0EE0FFF1F4A95E1F7E81BF90B8A |
:105C2000EB58F84F3C9780813C9688230CF078C065 |
:105C30003F97808180FD03C083E090E073C0809136 |
:105C40006D0799278B709070029719F084E090E0AF |
:105C500069C067E070E08DE697E00E94852590912D |
:105C60007407891719F085E090E05CC000913B0152 |
:105C70008CE080933B0184E690E090933A0180931E |
:105C800039010E946816EC018091390280FD05C03F |
:105C9000CE010E9471168823B9F3112319F48FEFF6 |
:105CA0009FE00BC0212F33272150304081E090E04E |
:105CB00002C0880F991F2A95E2F7909338028093CB |
:105CC000370210923D0210923C0288EE93E00E944F |
:105CD0006816EC0110923F02809139028E7F80930A |
:105CE000390285EA8093BC008091390280FD05C0AD |
:105CF000CE010E9471168823B9F3809137029091EA |
:105D00003802892B29F0CE010E947116882311F3E5 |
:105D100000933B018091370290913802009711F077 |
:105D200082E090E0DF91CF911F910F9108950F9342 |
:105D30001F93CF93DF93982F80918D02882321F4B6 |
:105D40008091C801882319F081E090E07BC09D30EC |
:105D5000B0F4992319F486E090E074C0C92FDD27D0 |
:105D6000FE0154E0EE0FFF1F5A95E1F7EC1BFD0B0F |
:105D7000EB58F84F3C9780813C9687FD03C082E04A |
:105D800090E060C03F97808180FD03C083E090E099 |
:105D900059C088EE93E00E9468168C018091390208 |
:105DA00080FD05C0C8010E9471168823B9F32197B0 |
:105DB00081E090E002C0880F991FCA95E2F79093A6 |
:105DC00036028093350210923D0210923C021092EE |
:105DD0006D071092740710923F02809139028E7FF6 |
:105DE0008093390285EA8093BC008091390280FD5E |
:105DF00005C0C8010E9471168823B9F3809135024D |
:105E000090913602892B29F0C8010E9471168823CF |
:105E100011F380916D0799278B709070029719F09C |
:105E200084E090E00FC067E070E08DE697E00E94AC |
:105E3000852590917407891719F085E090E002C0DC |
:105E400080E090E0DF91CF911F910F910895CF9363 |
:105E5000DF9380E021E83FEFC0E7D8E0EAE2F8E036 |
:105E6000DF01853020F411961C921E9202C031830E |
:105E700020831982188222968F5F1296329683327F |
:105E800080F38FE790E0909369088093680881E839 |
:105E90009FEF909367088093660810926B081092AA |
:105EA0006A081092FB021092FA021092FD02109200 |
:105EB000FC021092FF021092FE02DF91CF91089532 |
:105EC0001F920F920FB60F9211240F931F932F93CF |
:105ED0003F934F935F936F937F938F939F93AF9372 |
:105EE000BF93CF93DF93EF93FF9340918600509140 |
:105EF00087008091470290914802481B590B80917E |
:105F00008600909187009093480280934702CA01CF |
:105F10008D549440A0914902B0914A02835F9A4106 |
:105F200058F48091490280932908149714F0109234 |
:105F30003F0181E090E095C0A131B1050CF095C022 |
:105F4000CA018B5F9040845B914008F085C08091CE |
:105F50003D0190913E01481B590BE091C406EE2390 |
:105F600051F0FF27EE0FFF1FE65DF74F8081918113 |
:105F700084369105ECF4FD01EA0FFB1FE65DF74F57 |
:105F800080819181FA01E81BF90BCF01F7FF03C073 |
:105F9000909581959F4F06975CF480918E02883C86 |
:105FA00020F480918E02865F01C088EC80938E027F |
:105FB000FD01EA0FFB1FE65DF74F808191819C0197 |
:105FC000220F331F280F391F240F351F37FF02C040 |
:105FD0002D5F3F4FE901D595C795D595C795CA0166 |
:105FE00001968C179D0714F4219706C0415050402C |
:105FF000C417D5070CF4219680918E02833CD8F00B |
:106000008D010A0F1B1FF801E65DF74F808191811A |
:106010009E01281B390BC90163E070E00E944D7A94 |
:10602000CB01880F991F860F971F0059174FF80152 |
:106030009183808307C0AA0FBB1FA059B74F119649 |
:106040001C921E92E0914902F0914A02EE0FFF1F4E |
:10605000E65DF74FD183C0838091490290914A0257 |
:10606000019690934A0280934902FF91EF91DF914C |
:10607000CF91BF91AF919F918F917F916F915F91E0 |
:106080004F913F912F911F910F910F900FBE0F9045 |
:106090001F90189580913709909138099093B60513 |
:1060A0008093B5058091390990913A099093B8058C |
:1060B0008093B70580910B0990910C0997FD039689 |
:1060C00095958795959587959093BA058093B90591 |
:1060D00080911D0990911E0997FD039695958795CE |
:1060E000959587959093BC058093BB058091FA02A6 |
:1060F0009091FB0220910D0230910E02821B930BB6 |
:106100009093BE058093BD0580918802909189028D |
:10611000A0918A02B0918B02BC01CD012AE030E04F |
:1061200040E050E00E94827A3093C0052093BF0582 |
:106130008091FA059091FB059093C2058093C1056B |
:1061400080918F01909190019093C6058093C50531 |
:1061500080912301909124019093C8058093C705F5 |
:1061600080918E0299279093CA058093C9058091EA |
:10617000C4089091C5089093CC058093CB0580917D |
:10618000760799279093CE058093CD05809185075A |
:1061900099279093D0058093CF05809194079927F4 |
:1061A0009093D2058093D1058091A307992790936E |
:1061B000D4058093D3058091E3019091E4019093FD |
:1061C000DE058093DD0580917202909173029093B9 |
:1061D000E0058093DF0580919E0990919F0990933F |
:1061E000E2058093E1058091A2099091A309909323 |
:1061F000E4058093E3058091840290918502A0914B |
:106200008602B0918702BC01CD012AE030E040E077 |
:1062100050E00E94827A3093E6052093E505809154 |
:10622000A40999279093F0058093EF05809160036E |
:10623000909161039093F2058093F10580915E0344 |
:1062400090915F039093F4058093F3058091CF03C1 |
:10625000882321F48091D003882321F08091B40514 |
:10626000816003C08091B4058E7F8093B40508954A |
:10627000EF92FF921F93CF93DF93182F7B018091B2 |
:106280008D02882371F580910301893111F42998D9 |
:1062900001C0299A11501F3FE9F0F092EB01E09202 |
:1062A000EA01E7018091EA019091EB01892B11F459 |
:1062B000209781F38091EE018823A1F31092EE01E3 |
:1062C0008091EA019091EB01892B09F421970E94BA |
:1062D0000677E8CF80910301893111F4299A01C032 |
:1062E0002998DF91CF911F91FF90EF900895EF9241 |
:1062F000FF920F931F9310927A0080911102909158 |
:1063000012029093CF088093CE0880910F02909153 |
:1063100010029093C0088093BF0880910D02909165 |
:106320000E02909313098093120920910902309173 |
:106330000A02C901880F991F880F991F820F931FA6 |
:10634000820F931F90930C0980930B0920910B02ED |
:1063500030910C02C901880F991F880F991F820F75 |
:10636000931F820F931F90931E0980931D098FEC3A |
:1063700080937A0080919B069927AA27BB2744EC3B |
:10638000E42E49E0F42E012D112DBC01CD01A80110 |
:1063900097010E940E7ADC01CB01809387019093D4 |
:1063A0008801A0938901B0938A0180919C06992766 |
:1063B000AA27BB27BC01CD010E940E7ADC01CB01CC |
:1063C0008093830190938401A0938501B09386010B |
:1063D0001F910F91FF90EF900895A0E0B0E0E3EFE0 |
:1063E000F1E30C94A17A682E91E0792EEE24FF243B |
:1063F00057014701E7011092CF03F092F502E092B6 |
:10640000F402F092F302E092F202F092EF02E092D4 |
:10641000EE021092ED02F092FF02E092FE02F09284 |
:10642000FD02E092FC02F092FB02E092FA0210926E |
:10643000690110926801109202020E94773184E68D |
:1064400090E00E948A160E947731F092D605E09281 |
:10645000D505F092D805E092D7058091670680FFB8 |
:1064600014C08091190190911A01875B934058F4F0 |
:106470008091190190911A018E5E924020F08091D6 |
:106480000202882311F00E94CB1A00911901109189 |
:106490001A0187B5865F87BD87B5809588BD8FE176 |
:1064A000C82E8AE090E00E948A1680910D02909199 |
:1064B0000E02E80EF91E8091110290911202A80EB0 |
:1064C000B91E80910F0290911002880E991E809142 |
:1064D000FA059091FB05C80FD91FCA94C7FEE1CFFA |
:1064E0008091190190911A01825F934080F480910C |
:1064F000190190911A01459750F0809119019091DE |
:106500001A01081B190B109314010093130187B58E |
:106510008A5087BD87B5809588BD9501205F3F4F24 |
:1065200036952795369527953093FF022093FE02E6 |
:10653000C401409696958795969587959093FD0210 |
:106540008093FC0240E150E0E40EF51EA5E0F694D5 |
:10655000E794AA95E1F7F092FB02E092FA02C40FE9 |
:10656000D51FF5E0D695C795FA95E1F7D093EF02E0 |
:10657000C093EE029093F9028093F8023093F702F1 |
:106580002093F60252E06516C9F580910B099091AF |
:106590000C0997FF03C0909581959F4F6CE070E0C8 |
:1065A0000E944D7A9B017093F5026093F4028091F2 |
:1065B0001D0990911E0997FF03C0909581959F4FEB |
:1065C0006CE070E00E944D7A7093F3026093F202E7 |
:1065D000B90184E090E00E9485276091F2027091F9 |
:1065E000F30286E090E00E9485276091EE027091B0 |
:1065F000EF0288E090E00E9485274FC084E090E0A1 |
:106600000E9480279093F5028093F40286E090E048 |
:106610000E9480279C019093F3028093F202809164 |
:10662000F4029091F5028150984018F421503840BE |
:10663000A0F182E697E09F938F9381E992E19F9387 |
:106640008F93E091B603F091B703099580910B0900 |
:1066500090910C0997FF03C0909581959F4F6CE036 |
:1066600070E00E944D7A7093F5026093F40280917D |
:106670001D0990911E0997FF03C0909581959F4F2A |
:106680006CE070E00E944D7A7093F3026093F20226 |
:1066900077240F900F900F900F9012BC11BC1092A6 |
:1066A000CF081092CE081092C0081092BF08109226 |
:1066B00013091092120988EC90E00E948A168091CA |
:1066C000090290910A029C01220F331F220F331FEF |
:1066D000280F391F280F391F30930C0920930B09FD |
:1066E00080910B0290910C028C01000F111F000F82 |
:1066F000111F080F191F080F191F10931E0900936F |
:106700001D0980917606C82EDD24EE24FF2444273F |
:1067100037FD4095542FC701B6010E940E7A4B01F8 |
:106720005C016093E8027093E9028093EA0290931F |
:10673000EB029801442737FD4095542FC701B6015D |
:106740000E940E7ADC01CB018093E0029093E1027B |
:10675000A093E202B093E3028092C8029092C90231 |
:10676000A092CA02B092CB028093C0029093C10261 |
:10677000A093C202B093C3021092B8021092B90261 |
:106780001092BA021092BB0200918F0110919001F9 |
:106790001093A7020093A60284E690E090938C01E8 |
:1067A00080938B0182E390E09093EB018093EA0168 |
:1067B00080919B069927AA27BB27BC01CD0124EC19 |
:1067C00039E040E050E00E940E7ADC01CB018856AF |
:1067D000954CAF4FBF4F8093870190938801A09352 |
:1067E0008901B0938A0180919C069927AA27BB272B |
:1067F000BC01CD010E940E7ADC01CB018856954C7C |
:10680000AF4FBF4F8093830190938401A093850184 |
:10681000B09386011092460110924501C801AA2743 |
:1068200097FDA095BA2F20914101309142014091EE |
:10683000430150914401BC01CD010E940E7ADC015C |
:10684000CB018093190990931A09A0931B09B09367 |
:106850001C091092A3021092A2020E9426676620D1 |
:1068600029F0809155028460809355028FEF8093C8 |
:10687000990910929A0980E280939B0984E680939B |
:106880008E028091E801882311F0579A17C08091F9 |
:10689000D306992780FF05C082FF03C080EE9EE2E9 |
:1068A00002C080E091E190930A018093090181E0A8 |
:1068B000809311010E942B170E942B1788E090E013 |
:1068C0000E9480279093EF028093EE0212BC11BCCD |
:1068D0008091FE029091FF0280569940815C9B421C |
:1068E00028F08091CF0381608093CF038091FC02D8 |
:1068F0009091FD0280569940815C9B4228F08091E6 |
:10690000CF0382608093CF038091FA029091FB02C3 |
:106910008C5291408957954028F08091CF03846034 |
:106920008093CF038091F4029091F5028C529140B4 |
:10693000835C914028F08091CF0388608093CF03DF |
:106940008091F2029091F3028C529140835C9140CD |
:1069500028F08091CF0380618093CF038091EE0275 |
:106960009091EF02805092408355914028F08091A1 |
:10697000CF0380628093CF038091CF03811177246E |
:1069800086E480937E0180911B0190911C01A0916F |
:106990001D01B0911E018093FC059093FD05A0930D |
:1069A000FE05B093FF0510920102109200021092B2 |
:1069B0000302109204021092050210920602109235 |
:1069C000A8021092A9021092AA021092AB02109291 |
:1069D000EE051092ED050E94931A872D9927EEE09F |
:1069E000CDB7DEB70C94BD7AA3E1B0E0EAEFF4E3F3 |
:1069F0000C949D7A8091FA029091FB0220910D02F5 |
:106A000030910E02821B930B90931309809312090D |
:106A1000809117029091180297FD07969C0153E010 |
:106A2000359527955A95E1F73093CF082093CE08F6 |
:106A3000809115029091160297FD079643E0959577 |
:106A400087954A95E1F79093C0088093BF083093EB |
:106A5000DB082093DA089093D2088093D1088091C4 |
:106A60000B0990910C09AC01440F551F480F591F99 |
:106A70002091090230910A02C901880F991F880FDD |
:106A8000991F820F931F820F931F480F591F57FFA3 |
:106A900002C04D5F5F4F559547955595479550936B |
:106AA0000C0940930B0980911D0990911E09AC01BE |
:106AB000440F551F480F591F20910B0230910C02B3 |
:106AC000C901880F991F880F991F820F931F820F8A |
:106AD000931F480F591F57FF02C04D5F5F4F5595D9 |
:106AE00047955595479550931E0940931D09209150 |
:106AF000090230910A02C901880F991F880F991F56 |
:106B0000820F931F820F931F9C01442737FD4095EE |
:106B1000542F8091D8029091D902A091DA02B091BD |
:106B2000DB02820F931FA41FB51F8093D80290939E |
:106B3000D902A093DA02B093DB0220910B023091CC |
:106B40000C02C901880F991F880F991F820F931F8C |
:106B5000820F931F9C01442737FD4095542F80914D |
:106B6000D4029091D502A091D602B091D702820FA3 |
:106B7000931FA41FB51F8093D4029093D502A093B6 |
:106B8000D602B093D7028091E4089091E508209155 |
:106B9000090230910A02820F931F9093E5088093B7 |
:106BA000E408809115099091160920910B0230910B |
:106BB0000C02820F931F9093160980931509809100 |
:106BC000F0029091F10201969093F1028093F0020D |
:106BD0008091FA059091FB052091EE023091EF0231 |
:106BE000821B930B9C01442737FD4095542F8091C5 |
:106BF000D0029091D102A091D202B091D302820F23 |
:106C0000931FA41FB51F8093D0029093D102A0932D |
:106C1000D202B093D3028FEC80937A0010921501C8 |
:106C20002091C0023091C1024091C2025091C30232 |
:106C300029873A874B875C8729543B46414050401F |
:106C40002CF028E43BE641E050E00DC089859A85B0 |
:106C5000AB85BC85885B9449AE4FBF4F4CF428EBA5 |
:106C600034E94EEF5FEF2D833E834F83588708C092 |
:106C700089859A85AB85BC858D839E83AF83B887D4 |
:106C80002091C8023091C9024091CA025091CB02B2 |
:106C90002D873E874F87588B29543B4641405040B3 |
:106CA0002CF028E43BE641E050E00DC08D859E8548 |
:106CB000AF85B889885B9449AE4FBF4F4CF428EB41 |
:106CC00034E94EEF5FEF29833A834B835C8308C03E |
:106CD0008D859E85AF85B88989839A83AB83BC8374 |
:106CE000A0911209B0911309BB8BAA8BFD01CF01B2 |
:106CF000AA2797FDA095BA2FA090B802B090B9022C |
:106D0000C090BA02D090BB02A80EB91ECA1EDB1EEC |
:106D1000A092B802B092B902C092BA02D092BB025D |
:106D2000E0901909F0901A0900911B0910911C09B3 |
:106D3000E80EF91E0A1F1B1FE0921909F0921A09AA |
:106D400000931B0910931C09F0917102F98BFF232A |
:106D500009F098C180917002882309F093C1809155 |
:106D6000070986FF8FC18091BF089091C008AA27AC |
:106D700097FDA095BA2FBC01CD0129813A814B81A5 |
:106D80005C810E940E7A9B01AC0197FF04C02150E8 |
:106D9000384F4F4F5F4F6BE0559547953795279587 |
:106DA0006A95D1F780916801682E77248824992408 |
:106DB000CA01B901A40193010E940E7ADC01CB0142 |
:106DC00080930A0390930B03A0930C03B0930D03DD |
:106DD000B7FF04C08150904FAF4FBF4F1C012D0132 |
:106DE0003CE055944794379427943A95D1F72092F4 |
:106DF0000A0330920B0340920C0350920D038091D2 |
:106E0000CE089091CF08AA2797FDA095BA2FBC0174 |
:106E1000CD012D813E814F8158850E940E7A97FFCA |
:106E200004C06150784F8F4F9F4F2BE09595879509 |
:106E3000779567952A95D1F7A40193010E940E7A60 |
:106E4000DC01CB0180930E0390930F03A0931003FA |
:106E5000B0931103B7FF04C08150904FAF4FBF4FA5 |
:106E60009C01AD018CE055954795379527958A95FE |
:106E7000D1F720930E0330930F03409310035093E8 |
:106E8000110380910A0390910B039093B7088093AC |
:106E9000B60880910E0390910F039093BB088093E6 |
:106EA000BA08221933094409550920930E03309377 |
:106EB0000F034093100350931103E20EF31E041FBF |
:106EC000151FE0921909F0921A0900931B091093FB |
:106ED0001C09809167018823B1F457FF04C02F5F1C |
:106EE0003F4F4F4F5F4F5595479537952795A21ABE |
:106EF000B30AC40AD50AA092B802B092B902C092ED |
:106F0000BA02D092BB022A893B8979010027F7FC9B |
:106F10000095102F80910E0390910F03A091100304 |
:106F2000B0911103E80EF91E0A1F1B1FC801B7011B |
:106F300029813A814B815C810E940E7A9B01AC01D0 |
:106F400097FF04C02150384F4F4F5F4FBBE055951E |
:106F5000479537952795BA95D1F780916901A82E65 |
:106F6000BB24CC24DD24CA01B901A60195010E94ED |
:106F70000E7ADC01CB018093020390930303A0936C |
:106F80000403B0930503B7FF04C08150904FAF4F87 |
:106F9000BF4F3C014D01ACE0959487947794679482 |
:106FA000AA95D1F7609202037092030380920403C2 |
:106FB00090920503C801B7012D813E814F8158850C |
:106FC0000E940E7A97FF04C06150784F8F4F9F4FF9 |
:106FD000FBE09595879577956795FA95D1F7A6018A |
:106FE00095010E940E7ADC01CB01809306039093F9 |
:106FF0000703A0930803B0930903B7FF04C08150AF |
:10700000904FAF4FBF4FAC01BD01ECE07595679558 |
:1070100057954795EA95D1F7409306035093070398 |
:1070200060930803709309032A893B8937FF03C0E3 |
:10703000309521953F4F21343105E4F1D401C3014E |
:1070400097FE07C0B095A095909581959F4FAF4F43 |
:10705000BF4F81389105A105B10584F4DB01CA0158 |
:1070600077FF07C0B095A095909581959F4FAF4F42 |
:10707000BF4F81389105A105B105E4F081E080930F |
:10708000A40218C01092BB081092BA081092B70858 |
:107090001092B6081092060310920703109208038C |
:1070A000109209031092020310920303109204033A |
:1070B000109205038091060390910703A0910803A5 |
:1070C000B0910903BC01CD0124E630E040E050E07E |
:1070D0000E94827AE0900203F0900303E21AF30A1E |
:1070E000F092CD08E092CC088091020390910303C6 |
:1070F000A0910403B0910503BC01CD0124E630E06A |
:1071000040E050E00E94827ADA01C9012091060332 |
:10711000309107038C01021B130B1093C2080093DC |
:10712000C1088091410190914201A0914301B09129 |
:107130004401BC01CD0128E631E040E050E00E946E |
:107140000E7A2091190930911A0940911B0950912A |
:107150001C09261737074807590764F0261B370B09 |
:10716000480B590B2093190930931A0940931B09B6 |
:1071700050931C092091190930911A0940911B095B |
:1071800050911C0957FF0CC0260F371F481F591F6D |
:107190002093190930931A0940931B0950931C0935 |
:1071A0006091BF087091C0086E0D7F1D9B01442740 |
:1071B00037FD4095542F8091BC029091BD02A09163 |
:1071C000BE02B091BF02820F931FA41FB51F809310 |
:1071D000BC029093BD02A093BE02B093BF02809107 |
:1071E000760290917702681B790BCB01AA2797FD55 |
:1071F000A095BA2F29853A854B855C85820F931F10 |
:10720000A41FB51F8093C0029093C102A093C20235 |
:10721000B093C302C0908301D0908401E0908501B7 |
:10722000F0908601C816D906EA06FB06C4F488EA7F |
:1072300091E6A0E0B0E08C199D09AE09BF098093EA |
:10724000C0029093C102A093C202B093C302809384 |
:10725000BC029093BD02A093BE02B093BF0222274E |
:107260003327A9012C193D094E095F098091C002FD |
:107270009091C102A091C202B091C30282179307FC |
:10728000A407B507B4F4D701C601885A9146A040B7 |
:10729000B0408093C0029093C102A093C202B09309 |
:1072A000C3028093BC029093BD02A093BE02B09330 |
:1072B000BF026091CE087091CF08600F711F9B01D3 |
:1072C000442737FD4095542F8091C4029091C50208 |
:1072D000A091C602B091C702820F931FA41FB51FD1 |
:1072E0008093C4029093C502A093C602B093C702D4 |
:1072F0008091740290917502681B790BCB01AA27CB |
:1073000097FDA095BA2F2D853E854F855889820F10 |
:10731000931FA41FB51F8093C8029093C902A09326 |
:10732000CA02B093CB02E0908701F09088010091EF |
:10733000890110918A01E816F9060A071B07C4F4AF |
:1073400088EA91E6A0E0B0E08E199F09A00BB10B8E |
:107350008093C8029093C902A093CA02B093CB0253 |
:107360008093C4029093C502A093C602B093C70253 |
:1073700022273327A9012E193F09400B510B809179 |
:10738000C8029091C902A091CA02B091CB028217A3 |
:107390009307A407B507B4F4D801C701885A9146EA |
:1073A000A040B0408093C8029093C902A093CA0243 |
:1073B000B093CB028093C4029093C502A093C602FF |
:1073C000B093C7028091B8029091B902A091BA021D |
:1073D000B091BB028093CC029093CD02A093CE02D9 |
:1073E000B093CF028091C8029091C902A091CA02C5 |
:1073F000B091CB028093E8029093E902A093EA0255 |
:10740000B093EB028091C0029091C102A091C202A0 |
:10741000B091C3028093E0029093E102A093E20254 |
:10742000B093E3028091C4029091C502A091C6027C |
:10743000B091C7028093E4029093E502A093E60224 |
:10744000B093E7028091BC029091BD02A091BE0270 |
:10745000B091BF028093DC029093DD02A093DE0224 |
:10746000B093DF02809121019091220197FD079650 |
:1074700033E0959587953A95E1F79093CF088093FF |
:10748000CE0880911F019091200197FD079623E07F |
:10749000959587952A95E1F79093C0088093BF084A |
:1074A00080911102909112020F9734F488E19CEFC1 |
:1074B0009093CF088093CE08809111029091120290 |
:1074C000079734F480E398EF9093CF088093CE0829 |
:1074D0008091110290911202815D974034F088EE04 |
:1074E00093E09093CF088093CE0880911102909101 |
:1074F0001202805E974034F080ED97E09093CF08C1 |
:107500008093CE0880910F02909110020F9734F46F |
:1075100088E19CEF9093C0088093BF0880910F0290 |
:1075200090911002079734F480E398EF9093C0088D |
:107530008093BF0880910F0290911002815D974067 |
:1075400034F088EE93E09093C0088093BF08809158 |
:107550000F0290911002805E974034F080ED97E02A |
:107560009093C0088093BF0860917601662309F468 |
:10757000AEC040912101509122018091120390915F |
:107580001303481B590B5093190340931803209180 |
:10759000210130912201280F391F37FF02C02F5FD0 |
:1075A0003F4F3595279530931303209312034138AD |
:1075B00051051CF080E890E005C040585F4F34F45E |
:1075C00080E89FEF909319038093180340911F0167 |
:1075D000509120018091140390911503481B590B81 |
:1075E000509317034093160320911F0130912001FF |
:1075F000280F391F37FF02C02F5F3F4F3595279562 |
:107600003093150320931403413851051CF080E892 |
:1076100090E005C040585F4F34F480E89FEF9093AE |
:10762000170380931603462F5527809118039091D6 |
:107630001903849FB001859F700D949F700D1124D4 |
:107640009B0177FF02C0215F3F4FB4E0359527953E |
:10765000BA95E1F78091CE089091CF08820F931FE1 |
:107660009093CF088093CE088091160390911703D2 |
:10767000849F9001859F300D949F300D1124A901A6 |
:1076800037FF02C0215F3F4FA4E035952795AA95AB |
:10769000E1F78091BF089091C008820F931F9093EB |
:1076A000C0088093BF088091210190912201860F2C |
:1076B000971F909322018093210180911F01909147 |
:1076C0002001840F951F9093200180931F0100914A |
:1076D000D1081091D2088091B6089091B708101681 |
:1076E00011065CF59C0197FF04C022273327281B55 |
:1076F000390BC901AA2797FDA095BA2F20916701E0 |
:10770000332744275527BC01CD010E940E7A9B01E7 |
:10771000AC0197FF04C0215C3F4F4F4F5F4FF6E035 |
:107720005595479537952795FA95D1F78091CC08CF |
:107730009091CD08820F931F27C097FF03C09095AB |
:1077400081959F4FAA2797FDA095BA2F2091670199 |
:10775000332744275527BC01CD010E940E7A9B0197 |
:10776000AC0197FF04C0215C3F4F4F4F5F4FE6E0F5 |
:107770005595479537952795EA95D1F78091CC088F |
:107780009091CD08821B930B9093CD088093CC08E9 |
:10779000E090DA08F090DB088091BA089091BB087D |
:1077A0001E141F045CF59C0197FF04C02227332799 |
:1077B000281B390BC901AA2797FDA095BA2F209144 |
:1077C0006701332744275527BC01CD010E940E7A5B |
:1077D0009B01AC0197FF04C0215C3F4F4F4F5F4FAF |
:1077E00076E055954795379527957A95D1F780910D |
:1077F000C1089091C208820F931F27C097FF03C052 |
:10780000909581959F4FAA2797FDA095BA2F20911B |
:107810006701332744275527BC01CD010E940E7A0A |
:107820009B01AC0197FF04C0215C3F4F4F4F5F4F5E |
:1078300066E055954795379527956A95D1F78091DC |
:10784000C1089091C208821B930B9093C208809349 |
:10785000C1088091070987FF44C03989332309F0A3 |
:1078600040C0809170028823E1F541E0E41641E0D8 |
:10787000F4064CF08091CE089091CF088E0D9F1D9C |
:10788000805091400DC050E0E5165FEFF50664F4BE |
:107890008091CE089091CF088E0D9F1D80509F4FF4 |
:1078A0009093CF088093CE0881E0013018074CF008 |
:1078B0008091BF089091C008800F911F8050914027 |
:1078C0000CC09FEF0030190764F48091BF089091BD |
:1078D000C008800F911F80509F4F9093C0088093E5 |
:1078E000BF08E2E1CD5E0C94B97A80918D028823C5 |
:1078F00029F5809155028C7F809355028091540226 |
:107900008F7D80935402A4EDB3E0E5E7F7E09BE0C0 |
:107910008091C801882309F48C938D918183128210 |
:1079200091503F9697FFF4CF8091C801882359F07A |
:107930008091C80181508093C80105C08091550293 |
:1079400081608093550280913B02882319F0109248 |
:107950003B02089580933F02809139028E7F80938D |
:10796000390285EA8093BC000895882319F480E0E9 |
:1079700090E00895E82FFF27EE0FFF1FE65DF74F19 |
:107980008081918181589F4F8F3F910521F01CF09C |
:107990008FEF90E004C097FF02C080E090E099274D |
:1079A0000895CF93DF93AFE8B2E0CFE5D6E057E09C |
:1079B0008991E82FFF27EE0FFF1FE65DF74F01903B |
:1079C000F081E02DE158FF4FEF3FF10521F01CF071 |
:1079D000EFEFF0E004C0F7FF02C0E0E0F0E0893133 |
:1079E00011F4EC931BC04C91242F3327E217F307BB |
:1079F000A9F0CF01821B930B97FD03969595879570 |
:107A000095958795242F280F2C93822F9927E81777 |
:107A1000F90714F4215001C02F5F2C935150119697 |
:107A200057FFC6CF80916906883F38F0EFEFF0E04E |
:107A3000E81BF109E157FD4F808180937B01809124 |
:107A40007B01882329F0843618F084E680937B013B |
:107A500080916B06883F38F0EFEFF0E0E81BF1090A |
:107A6000E157FD4F808180937A0180917A018823CC |
:107A700029F0843618F084E680937A0180917806A4 |
:107A8000883F38F0EFEFF0E0E81BF109E157FD4FD8 |
:107A9000808180937501809175018B3010F48AE0AC |
:107AA00002C08F3F11F4809375018091A506883F35 |
:107AB00038F0EFEFF0E0E81BF109E157FD4F80816E |
:107AC0008093E6088091E608863010F485E002C0D5 |
:107AD0008F3F11F48093E6088091A706883F38F025 |
:107AE000EFEFF0E0E81BF109E157FD4F8081809353 |
:107AF0000E0980910E09863010F485E002C08F3F98 |
:107B000011F480930E0980919206873F19F44299EF |
:107B100005C007C0863F41F4439B03C08091C70660 |
:107B200016C08091C80613C0883F38F0EFEFF0E030 |
:107B3000E81BF109E157FD4F80818093E3088091B4 |
:107B4000E308893110F488E102C08F3F11F480937B |
:107B5000E30880919306873F19F4429905C007C056 |
:107B6000863F41F4439B03C08091C90616C08091B3 |
:107B7000CA0613C0883F38F0EFEFF0E0E81BF109C8 |
:107B8000E157FD4F80818093BC088091BC0889310A |
:107B900010F488E102C08F3F11F48093BC088091FB |
:107BA0009406883F38F0EFEFF0E0E81BF109E15769 |
:107BB000FD4F80818093EC088091EC08893110F4AE |
:107BC00088E102C08F3F11F48093EC0880916A062F |
:107BD0000E94B53C80936B0280916D06883F38F01F |
:107BE000EFEFF0E0E81BF109E157FD4F8081809352 |
:107BF000790180916F06883F38F0EFEFF0E0E81BE5 |
:107C0000F109E157FD4F80818093770180917706DC |
:107C1000883F38F0EFEFF0E0E81BF109E157FD4F46 |
:107C200080818093780180917906883F38F0EFEF6A |
:107C3000F0E0E81BF109E157FD4F8081809374016A |
:107C400080917A06883F38F0EFEFF0E0E81BF10909 |
:107C5000E157FD4F80818093760180917B06883FBC |
:107C600038F0EFEFF0E0E81BF109E157FD4F8081BC |
:107C70008093730180917C06883F38F0EFEFF0E04D |
:107C8000E81BF109E157FD4F8081809372018091DB |
:107C90008206883F38F0EFEFF0E0E81BF109E1578A |
:107CA000FD4F80818093700180918306883F38F07A |
:107CB000EFEFF0E0E81BF109E157FD4F8081809381 |
:107CC0006A0280918406883F38F0EFEFF0E0E81B0D |
:107CD000F109E157FD4F808180936902809185060B |
:107CE000883F38F0EFEFF0E0E81BF109E157FD4F76 |
:107CF00080818093680280918606883F38F0EFEF9C |
:107D0000F0E0E81BF109E157FD4F808180936702A5 |
:107D10008091A006883F38F0EFEFF0E0E81BF10912 |
:107D2000E157FD4F8081809366028091A106883FD4 |
:107D300038F0EFEFF0E0E81BF109E157FD4F8081EB |
:107D4000809365028091A206883F38F0EFEFF0E063 |
:107D5000E81BF109E157FD4F808180936402809117 |
:107D6000A306883F38F0EFEFF0E0E81BF109E15798 |
:107D7000FD4F80818093630280918706883F38F0B1 |
:107D8000EFEFF0E0E81BF109E157FD4F80818093B0 |
:107D90006E0180918B06883F38F0EFEFF0E0E81B32 |
:107DA000F109E157FD4F808180936D018091880634 |
:107DB000883F38F0EFEFF0E0E81BF109E157FD4FA5 |
:107DC000808180936C0180918C06883F38F0EFEFC2 |
:107DD000F0E0E81BF109E157FD4F808180936B01D2 |
:107DE00080919506883F38F0EFEFF0E0E81BF1094D |
:107DF000E157FD4F808180936A0180919806883F0A |
:107E000038F0EFEFF0E0E81BF109E157FD4F80811A |
:107E10008093690180919906883F38F0EFEFF0E098 |
:107E2000E81BF109E157FD4F808180936801809143 |
:107E30009A06883F38F0EFEFF0E0E81BF109E157D0 |
:107E4000FD4F8081809367018091C306883F38F0A1 |
:107E5000EFEFF0E0E81BF109E157FD4F80818093DF |
:107E6000CB0880916706809307098091D4068093A0 |
:107E7000EB0880919F06883F38F0EFEFF0E0E81BB9 |
:107E8000F109E157FD4F8081809366018091BC0626 |
:107E9000883F38F0EFEFF0E0E81BF109E157FD4FC4 |
:107EA00080818093200980917001282F33272F5FD4 |
:107EB0003F4F8CE398E2B9010E944D7A70937D01A7 |
:107EC00060937C018091750680930F098091740600 |
:107ED0008093D308E091BE06EE23D9F181E0809330 |
:107EE0006202FF27EE0FFF1FE65DF74F8081918151 |
:107EF000805C9F4F14F41092620280917E01209169 |
:107F000062028217B1F0833088F4222319F08CEDDD |
:107F100095E002C088EC90E09093EB018093EA0139 |
:107F200085E08093780220937E0103C08150809386 |
:107F30007E01809160099091610997FF0FC0809147 |
:107F40006202882359F08091CF0380688093CF0329 |
:107F500005C0E09362028AE080937E01809160090F |
:107F60009091610997FF1DC080918D028823C9F00F |
:107F7000809162028823A9F080910B0190910C01FD |
:107F80008F5F9F4F71F488E99AE39093EB018093A0 |
:107F9000EA0180E094EA90930C0180930B01109227 |
:107FA000620280916202882321F0809154028160F4 |
:107FB00003C0809154028E7F80935402DF91CF9151 |
:107FC000089580917006882301F560917202709186 |
:107FD000730277FF02C06D5F7F4F7595679575954A |
:107FE0006795409123015091240180910201282F2F |
:107FF0003327649FC001659F900D749F900D1124DD |
:10800000B9010E94397ACB0101C09927909382016E |
:108010008093810180918101909182018734910543 |
:1080200038F486E490E09093820180938101089572 |
:108030008F3A910530F08FEA90E09093820180931F |
:1080400081010895A8E1B0E0E8E2F0E40C949D7AA3 |
:108050000E94F43480915502992784719070892B85 |
:1080600091F58091D50682FF27C080917202909190 |
:1080700073020097F1F002E088359007D4F49C0178 |
:1080800097FF02C02D5F3F4F359527953595279572 |
:1080900080917F069927289FA001299F500D389F26 |
:1080A000500D1124CA0164E670E00E944D7ACB01A4 |
:1080B00006C08DE290E003C080917F0699279093DF |
:1080C000530280935202209150023091510255E7A1 |
:1080D0002033350759F4109299021092980280913A |
:1080E000D30899279093530280935202609198028B |
:1080F000709199027A8369838091D30899270A96AF |
:108100006817790714F49A83898380918E028436E4 |
:1081100008F062C08091540282FD5EC080912E03FF |
:1081200090912F03009731F0019790932F03809344 |
:108130002E030BC010928D0290935702809356022B |
:10814000809155028D7E80935502289A8091560227 |
:1081500090915702895E9340E0F18091A4098536A1 |
:10816000C0F180915202909153029A838983809149 |
:10817000550280618093550280915B06A82FBB2732 |
:10818000AA0FBB1FFD01E059F74F118210828091A9 |
:108190005C06282F3327220F331FC9018059974FC0 |
:1081A000FC0111821082A65DB74F11961C921E929F |
:1081B000265D374FD90111961C921E9280915E0662 |
:1081C000E82FFF27EE0FFF1FE65DF74F11821082A9 |
:1081D00051C410928D024EC480918E028D3808F4E5 |
:1081E0001FC4809155028F7E809355029091800626 |
:1081F00082E3989FC001112490932F0380932E0354 |
:10820000E981FA81B9978CF080918D02882369F019 |
:108210008091560290915702FFEF8F3F9F0729F000 |
:108220000196909357028093560220915602309106 |
:1082300057022F3F310509F030F51092B00210922D |
:10824000B1021092B2021092B3021092AC021092DC |
:10825000AD021092AE021092AF0210921A03109269 |
:108260001B0310921C0310921D031092B80210926F |
:10827000B9021092BA021092BB028091540280623D |
:10828000809354024DC080915502826080935502C4 |
:108290008091540285FF44C08091F6019091F701CE |
:1082A000A091F801B091F90187399105A105B105B7 |
:1082B0008CF48091880290918902A0918A02B091F9 |
:1082C0008B02825A9E4FAF4FBF4F24F08091070917 |
:1082D00080FD05C0809154028F71809354021092EA |
:1082E000B0021092B1021092B2021092B302109238 |
:1082F000AC021092AD021092AE021092AF02109238 |
:10830000B8021092B9021092BA021092BB02295E12 |
:10831000334030F088EE93E09093570280935602FA |
:1083200080915D06E82FFF27EE0FFF1FE65DF74FF8 |
:1083300080819181813591050CF434C120918D02A9 |
:10834000222309F02FC180915E06E82FFF27EE0F50 |
:10835000FF1FE65DF74F808191818C3491050CF40D |
:10836000FFC0809130038F5F80933003893C08F415 |
:1083700019C1209330031092570210925602309187 |
:108380005B06E32FFF27EE0FFF1FE65DF74F8081AF |
:10839000918187349105B4F480915C06E82FFF2722 |
:1083A000EE0FFF1FE65DF74F808191810190F08114 |
:1083B000E02DF7FF03C0F095E195FF4FE734F1059D |
:1083C0000CF478C041E020915C06A22FBB27AA0FD5 |
:1083D000BB1FA65DB74F8D919C9111978734910576 |
:1083E00044F0E32FFF27EE0FFF1FE65DF74F80817C |
:1083F00091818D919C918734910574F080915B06F9 |
:10840000E82FFF27EE0FFF1FE65DF74F8081918178 |
:10841000873491050CF042E0E22FFF27EE0FFF1F9B |
:10842000E65DF74F808191818634910574F48091E7 |
:108430005B06E82FFF27EE0FFF1FE65DF74F8081F9 |
:108440009181873491050CF043E0E22FFF27EE0F76 |
:10845000FF1FE65DF74F808191818A5B9F4F74F427 |
:1084600080915B06E82FFF27EE0FFF1FE65DF74FB9 |
:1084700080819181873491050CF044E0E22FFF2741 |
:10848000EE0FFF1FE65DF74F808191818A5B9F4F62 |
:1084900074F480915B06E82FFF27EE0FFF1FE65D67 |
:1084A000F74F80819181863491050CF445E0842F4B |
:1084B0000E94DD2780915C06E82FFF27EE0FFF1F4B |
:1084C000E65DF74F808191810190F081E02DF7FF0B |
:1084D00003C0F095E195FF4F7E97CCF480915B0649 |
:1084E000E82FFF27EE0FFF1FE65DF74F8081918198 |
:1084F0008A5B9F4F64F481E08093EA0310927902D3 |
:1085000088EE93E09093EB018093EA014BC0809159 |
:1085100001010E948A2780E00E9431068091810635 |
:108520000E948A758091070980FF10C0809119010F |
:1085300090911A01875B934038F4809119019091D2 |
:108540001A018E5E924010F40E94CB1A81E00E94C4 |
:10855000ED318093790281E08093E801579A19C048 |
:1085600080819181855B9F4FDCF4809130038F5F28 |
:1085700080933003893CB0F020938D022093300328 |
:10858000109257021092560282E00E94ED318093C1 |
:10859000790268E770E0809101010E94383102C0E1 |
:1085A0002093300380915D06E82FFF27EE0FFF1F19 |
:1085B000E65DF74F808191818C599F4F0CF029C265 |
:1085C0002091BF06E22FFF27EF77F070EE0FFF1F1D |
:1085D000E059F74F80819181069714F084E606C038 |
:1085E000808191818B5F9F4F1CF48CE980933303D2 |
:1085F00080918D02E0915E06882309F058C1FF2723 |
:10860000EE0FFF1FE65DF74F808191818C599F4FE0 |
:108610009CF48091D50683FD0BC0E22FFF27EE0F5F |
:10862000FF1FE65DF74F80819181855B9F4FDCF0F6 |
:108630008091BF068823B9F08091D50683FF34C1AD |
:108640008091BF06E82FFF27EE0FFF1FE65DF74F73 |
:1086500080819181875F9F4F0CF426C18091330305 |
:10866000843609F021C180917902882329F0809114 |
:10867000550288608093550280911B0190911C01E6 |
:10868000A0911D01B0911E018093FC059093FD0502 |
:10869000A093FE05B093FF051092F6011092F7012A |
:1086A0001092F8011092F90110928802109289023A |
:1086B00010928A0210928B0210920302109204020E |
:1086C000109205021092060280915B06E82FFF27A8 |
:1086D000EE0FFF1FE65DF74F808191818D599F4F0F |
:1086E000ACF480915C06E82FFF27EE0FFF1FE65DDC |
:1086F000F74F808191810190F081E02DF7FF03C059 |
:10870000F095E195FF4FE436F10534F48091BF0612 |
:10871000882311F480933103809131038F5F80931C |
:1087200031038E3F08F458C18091120990911309CA |
:1087300097FF03C0909581959F4F8197B4F48091E6 |
:10874000CE089091CF0897FF03C0909581959F4FD9 |
:1087500045975CF48091BF089091C00897FF03C0D3 |
:10876000909581959F4F459714F010927902109241 |
:1087700031038091CF03882309F093C0809179025F |
:10878000882309F48EC080916E03882309F089C084 |
:1087900081E090E0909357028093560281E08093AD |
:1087A0008D0210921A0310921B0310921C03109258 |
:1087B0001D031092B8021092B9021092BA021092E0 |
:1087C000BB021092B4021092B5021092B60210923F |
:1087D000B70280917606E82EFF24002711278091AA |
:1087E0000B0990910C099C01442737FD4095542FAB |
:1087F000C801B7010E940E7ADC01CB018093C80248 |
:108800009093C902A093CA02B093CB0280911D0934 |
:1088100090911E099C01442737FD4095542FC801B3 |
:10882000B7010E940E7ADC01CB018093C0029093C5 |
:10883000C102A093C202B093C3028091E80290915A |
:10884000E902A091EA02B091EB028093C4029093F6 |
:10885000C502A093C602B093C7028091E002909136 |
:10886000E102A091E202B091E3028093BC029093F6 |
:10887000BD02A093BE02B093BF021092B00210924C |
:10888000B1021092B2021092B3021092AC02109296 |
:10889000AD021092AE021092AF0284E6809378028D |
:1088A0009BC08CED95E091C01092310395C0FF27DD |
:1088B000EE0FFF1FE65DF74F8081918185369105B0 |
:1088C0009CF08091D50683FD0BC0E22FFF27EE0FB1 |
:1088D000FF1FE65DF74F80819181855B9F4FDCF044 |
:1088E0008091BF068823B9F08091D50683FF72C0BE |
:1088F0008091BF06E82FFF27EE0FFF1FE65DF74FC1 |
:10890000808191818E5C9F4F0CF064C08091330315 |
:108910008C3909F05FC080915B06E82FFF27EE0FCE |
:10892000FF1FE65DF74F808191818D599F4FACF419 |
:1089300080915C06E82FFF27EE0FFF1FE65DF74FE3 |
:10894000808191810190F081E02DF7FF03C0F095C7 |
:10895000E195FF4FE436F1053CF48091BF06882392 |
:1089600019F48093320318C01092B0021092B10231 |
:108970001092B2021092B3021092AC021092AD02A9 |
:108980001092AE021092AF0210929F0210929E02BD |
:1089900010929D0210929C02809132038F5F80930F |
:1089A00032038B3F70F010928D02109232031092BE |
:1089B000570210925602809154028F718093540294 |
:1089C0000BC0843649F48CEA9DE09093EB018093D0 |
:1089D000EA0102C0109232032091500230915102FC |
:1089E00073E0283E370708F045C08091000290915F |
:1089F00001028B569F4F1CF02F5F3F4F05C0211582 |
:108A00003105C1F121503040309351022093500282 |
:108A100031C01092330310925102109250022AC0BA |
:108A20002E5E324038F180912809909129098059B1 |
:108A3000914000F58091880290918902A0918A026C |
:108A4000B0918B028C5D9540A040B0409CF480E3D7 |
:108A500095E7909351028093500280915602909135 |
:108A600057028A5E934030F089EE93E0909357026C |
:108A70008093560280913F01815080933F01809105 |
:108A80003F018F3F21F08091550284FFDFC30E9498 |
:108A9000D13CB090710680913C0390913D039C01C4 |
:108AA000220F331F280F391FC0905B06AC2DBB2748 |
:108AB000AA0FBB1FFD01E65DF74F4B2D55278081A7 |
:108AC0009181849FB001859F700D949F700D11243A |
:108AD000260F371F37FF02C02D5F3F4FB901759535 |
:108AE000679575956795A059B74F80917206082FC5 |
:108AF00011278D919C91809FD001819FB00D909FF7 |
:108B0000B00D11246A0F7B1F70933D0360933C03EB |
:108B100080913E0390913F039C01220F331F280F49 |
:108B2000391FD0905C06AD2DBB27AA0FBB1FFD01DE |
:108B3000E65DF74F80819181849FF001859FF00D64 |
:108B4000949FF00D11242E0F3F1F37FF02C02D5FA1 |
:108B50003F4FA9015595479555954795A059B74F52 |
:108B60008D919C91809F7001819FF00C909FF00CE3 |
:108B700011244E0D5F1D50933F0340933E0380919F |
:108B80006202882309F448C0CB0177FD0396DC011B |
:108B9000B595A795B595A795CA0157FD0396FC0114 |
:108BA000F595E795F595E7958091A101682F7727D1 |
:108BB00067FD70956A9F90016B9F300D7A9F300D15 |
:108BC000112480917003482F552747FD50954E9FE3 |
:108BD000C0014F9F900D5E9F900D1124280F391FEB |
:108BE00037FF02C0295F3F4F03E0359527950A956F |
:108BF000E1F730939F0220939E026E9F90016F9F3A |
:108C0000300D7E9F300D11244A9FC0014B9F900D67 |
:108C10005A9F900D11243FC08091BD06E82FFF2779 |
:108C2000E95BFE4F86818093A10190819093700350 |
:108C3000A82FBB27A7FDB095A69F9001A79F300D39 |
:108C4000B69F300D1124E92FFF27E7FDF095E49F33 |
:108C5000C001E59F900DF49F900D1124280F391F3E |
:108C600037FF02C0295F3F4F13E0359527951A95CE |
:108C7000E1F730939F0220939E02A49F9001A59F4D |
:108C8000300DB49F300D1124E69FC001E79F900D79 |
:108C9000F69F900D1124281B390B37FF02C0295F66 |
:108CA0003F4F43E0359527954A95E1F730939D0274 |
:108CB00020939C0280915E06E82FFF27EE0FFF1F96 |
:108CC000E65DF74F80819181909581959F4F9093BC |
:108CD0009B0280939A028530910514F0049705C099 |
:108CE0000FEF8C3F900734F4049690939B0280938F |
:108CF0009A0204C010929B0210929A028091500234 |
:108D0000909151028150924078F180919E02909111 |
:108D10009F0297FD079623E0959587952A95E1F7A1 |
:108D200090939F0280939E0280919C0290919D025D |
:108D300097FD079603E0959587950A95E1F790933F |
:108D40009D0280939C021092B0021092B102109288 |
:108D5000B2021092B3021092AC021092AD021092C5 |
:108D6000AE021092AF0243C080915D03882309F4E4 |
:108D70003EC0282F332780919E0290919F0297FD3D |
:108D8000079613E0959587951A95E1F7289FA0011E |
:108D9000299F500D389F500D1124CA0157FD0F9681 |
:108DA000B4E095958795BA95E1F790939F028093EB |
:108DB0009E0280919C0290919D0297FD0796A3E0F0 |
:108DC00095958795AA95E1F7289FB001299F700D89 |
:108DD000389F700D1124CB0177FD0F96F4E0959527 |
:108DE0008795FA95E1F790939D0280939C0280907D |
:108DF0009E0290909F028091600390916103881A77 |
:108E0000990A90929F0280929E0200919C0210917A |
:108E10009D0280915E0390915F03081B190B1093D4 |
:108E20009D0200939C0280915D06E82FFF27EE0FC4 |
:108E3000FF1FE65DF74FE080F1808FE790E0E80EDE |
:108E4000F91EF0929902E09298028091750199279B |
:108E5000AA2797FDA095BA2FBC01CD010E94827967 |
:108E6000DC01CB0120E030E040E251E4BC01CD0167 |
:108E70000E94F078DC01CB01BC01CD010E94547945 |
:108E8000DC01CB0180931709809174018093ED0878 |
:108E9000809173019927AA2797FDA095BA2FBC014D |
:108EA000CD010E948279DC01CB0120E030E040E27C |
:108EB00051E4BC01CD010E94F078DC01CB01BC0182 |
:108EC000CD010E945479DC01CB018093C6088091CA |
:108ED00072018093DC088091F60380FF59C0809175 |
:108EE0002009813808F454C08091EF03992787FD49 |
:108EF00090952B2D3327829FD001839FB00D929F99 |
:108F0000B00D11248A0E9B1E90929F0280929E02A9 |
:108F10008091F003992787FD9095829FF001839FB0 |
:108F2000F00D929FF00D11240E0F1F1F10939D0244 |
:108F300000939C028091F103282F332727FD309561 |
:108F400080919A0290919B02820F931F90939B02B3 |
:108F500080939A028091F303282F332727FD3095C1 |
:108F600080916C069927289F8001299F100D389FBA |
:108F7000100D112410934601009345018091F203D6 |
:108F800099278E159F0524F4909399028093980257 |
:108F9000809198029091990297FF04C010929902D3 |
:108FA000109298028091070982FF02C01092ED088A |
:108FB00040919E0250919F02CA0157FD03969C0169 |
:108FC000359527953595279537FF03C03095219521 |
:108FD0003F4F80915A0290915B0282179307B4F43D |
:108FE000CA0157FF03C0909581959F4F97FD039647 |
:108FF000959587959595879590935B0280935A02F6 |
:109000008536910544F084E690E001C00197909385 |
:109010005B0280935A0240919C0250919D02CA01CA |
:1090200057FD03969C01359527953595279537FF74 |
:1090300003C0309521953F4F80915802909159027D |
:1090400082179307B4F4CA0157FF03C09095819526 |
:109050009F4F97FD03969595879595958795909346 |
:109060005902809358028536910544F084E690E0D9 |
:1090700001C0019790935902809358028091550244 |
:1090800084FF08C010925B0210925A02109259029B |
:1090900010925802ED2DFF27EE0FFF1FE65DF74FF0 |
:1090A00040919606242F3327808191812817390714 |
:1090B00044F48091D20682FF04C081E080936F0265 |
:1090C00013C0ED2DFF27EE0FFF1FE65DF74F842F36 |
:1090D000992720919706821B9109208131812817B9 |
:1090E000390714F410926F0240915C06E42FFF27B9 |
:1090F000EE0FFF1FE65DF74F50919606852F9927DB |
:1091000022273327281B390B8081918182179307EF |
:1091100044F48091D20683FF04C081E080936E0204 |
:1091200016C080916E02882391F0E42FFF27EE0F86 |
:10913000FF1FE65DF74F809197069927851B9109E0 |
:10914000208131818217930714F410926E02EC2D66 |
:10915000FF27EE0FFF1FE65DF74F40919606242F85 |
:109160003327808191812817390744F48091D206F2 |
:1091700080FF04C081E080936C0217C080916C0274 |
:10918000882399F0EC2DFF27EE0FFF1FE65DF74FC8 |
:10919000842F992720919706821B91092081318184 |
:1091A0002817390714F410926C0240915B06E42FE3 |
:1091B000FF27EE0FFF1FE65DF74F50919606852FB4 |
:1091C000992722273327281B390B80819181821709 |
:1091D000930744F48091D20681FF04C081E080931C |
:1091E0006D0216C080916D02882391F0E42FFF2755 |
:1091F000EE0FFF1FE65DF74F809197069927851BBD |
:109200009109208131818217930714F410926D0225 |
:1092100080916F02882319F480916E02811181E0A0 |
:109220008093700280916C02882321F480916D02FA |
:10923000882351F081E080937102109270021092A5 |
:109240006F0210926E0202C08093710280917002D0 |
:10925000882321F480917102882369F0809195061A |
:10926000992729813A818217930714F49A83898375 |
:1092700081E08093A4028091540299279C0124707C |
:10928000307082FF31C080916003909161039095AE |
:1092900081959F4F90939F0280939E0280915E03E1 |
:1092A00090915F03909581959F4F90939D0280933D |
:1092B0009C02809181019091820190939902809308 |
:1092C000980210929B0210929A02809107098B7764 |
:1092D0008B66809307098091EB088C7B8093EB0869 |
:1092E00088EC80936B021EC08091550284FF1AC0E7 |
:1092F00030939B0220939A0230939F0220939E0208 |
:1093000030939D0220939C029AE59093170988E779 |
:109310008093ED089093C6088093DC081092700249 |
:10932000109271028091DF089091E008A091E1080D |
:10933000B091E2082091E8023091E9024091EA02FE |
:109340005091EB02820F931FA41FB51F8093DF087B |
:109350009093E008A093E108B093E2088091E708B9 |
:109360009091E808A091E908B091EA08E090E00245 |
:10937000F090E1020091E2021091E302EB82FC82A4 |
:109380000D831E838E0D9F1DA01FB11F8093E708C4 |
:109390009093E808A093E908B093EA088091D40874 |
:1093A0009091D508A091D608B091D708E090E4023A |
:1093B000F090E5020091E6021091E702EF82F88654 |
:1093C00009871A878E0D9F1DA01FB11F8093D40897 |
:1093D0009093D508A093D608B093D7088091C7087A |
:1093E0009091C808A091C908B091CA08E090DC0229 |
:1093F000F090DD020091DE021091DF02EB86FC8628 |
:109400000D871E878E0D9F1DA01FB11F8093C7085B |
:109410009093C808A093C908B093CA08F09071024D |
:10942000FF86FF2029F480917002882309F460C030 |
:109430001092D8021092D9021092DA021092DB0236 |
:109440001092D4021092D5021092D6021092D70236 |
:109450001092DF081092E0081092E1081092E208E2 |
:109460001092E7081092E8081092E9081092EA08B2 |
:109470001092D4081092D5081092D6081092D708EE |
:109480001092C7081092C8081092C9081092CA0812 |
:109490008091C8029091C902A091CA02B091CB02FA |
:1094A0008093C4029093C502A093C602B093C702F2 |
:1094B0008091C0029091C102A091C202B091C302FA |
:1094C0008093BC029093BD02A093BE02B093BF02F2 |
:1094D0001092FF011092FE01109275021092740218 |
:1094E00010927702109276020F85002309F0D0C106 |
:1094F00080917002882309F0CBC18091FA05909188 |
:10950000FB05815092402CF480918D02882309F450 |
:10951000BFC190909909A090760620900B093090D9 |
:109520000C0940901D0950901E0919140CF0BBC085 |
:10953000BB24CC24DD24CA01B901A60195010E94F7 |
:10954000827A79018A018091620990916309281ACF |
:10955000390AC101AA2797FDA095BA2FE81AF90A7E |
:109560000A0B1B0B6B817C818D819E81A60195016D |
:109570000E94827A59016A0180916409909165097B |
:10958000481A590AC201AA2797FDA095BA2FA81A0E |
:10959000B90ACA0ADB0A292C332427FC3094432C4D |
:1095A000532CC801B701A20191010E940E7A97FFC6 |
:1095B00004C061507E4F8F4F9F4F3B014C0109E02B |
:1095C00095948794779467940A95D1F7C601B5016D |
:1095D000A20191010E940E7A97FF04C061507E4F54 |
:1095E0008F4F9F4F5B016C0119E0D594C794B794DE |
:1095F000A7941A95D1F780915A0290915B02813419 |
:1096000091053CF480915802909159028134910562 |
:10961000D4F0D401C30197FE03C00196A11DB11D72 |
:109620003C014D019594879477946794D601C501C8 |
:10963000D7FE03C00196A11DB11D5C016D01D5943B |
:10964000C794B794A79480919B09282F332727FDAF |
:109650003095432F532F261537054805590514F427 |
:1096600039014A01992787FD9095909581959F4FE3 |
:10967000AA2797FDA095BA2F681679068A069B0639 |
:1096800014F43C014D012A153B054C055D0514F40D |
:1096900059016A01A816B906CA06DB060CF0D0C04B |
:1096A0005C016D01CDC0EA2CFF2400271127CA01FF |
:1096B000B901A80197010E94827A39014A01C101CA |
:1096C000AA2797FDA095BA2F681A790A8A0A9B0AD9 |
:1096D0006B817C818D819E81A80197010E94827A95 |
:1096E00059016A01C201AA2797FDA095BA2FA81AAD |
:1096F000B90ACA0ADB0AD401C30197FE03C00F9658 |
:10970000A11DB11D3C014D01F4E09594879477941F |
:109710006794FA95D1F7D601C501D7FE03C00F961D |
:10972000A11DB11D5C016D01E4E0D594C794B7940F |
:10973000A794EA95D1F780915A0290915B02813407 |
:1097400091053CF480915802909159028134910521 |
:10975000A4F0C401B30123E030E040E050E00E94F7 |
:10976000827A39014A01C601B50123E030E040E0C8 |
:1097700050E00E94827A59016A0180915E06E82FCA |
:10978000FF27EE0FFF1FE65DF74F8081918101906B |
:10979000F081E02DF7FF03C0F095E195FF4F7A9738 |
:1097A000A4F0C401B30123E030E040E050E00E94A7 |
:1097B000827A39014A01C601B50123E030E040E078 |
:1097C00050E00E94827A59016A0189E180938D01FB |
:1097D00021E262167104810491042CF070E2672E7C |
:1097E000712C812C912C30EE63163FEF73063FEF06 |
:1097F00083063FEF930644F460EE662E6FEF762EFD |
:109800006FEF862E6FEF962E41E2A416B104C104CD |
:10981000D1042CF050E2A52EB12CC12CD12C50EE4D |
:10982000A5165FEFB5065FEFC5065FEFD50644F4FA |
:1098300040EEA42E4FEFB42E4FEFC42E4FEFD42E98 |
:109840008091C8029091C902A091CA02B091CB0246 |
:1098500086199709A809B9098093C8029093C9028B |
:10986000A093CA02B093CB028091C0029091C10232 |
:10987000A091C202B091C3028A199B09AC09BD092B |
:109880008093C0029093C102A093C202B093C3021E |
:109890008091FE019091FF018F3F910509F008F43E |
:1098A000C4C56F85662309F04EC580917002882378 |
:1098B00009F049C58091A402882309F044C570913C |
:1098C0009E06788B772309F43EC58091DF0890913E |
:1098D000E008A091E108B091E208B7FF04C0815010 |
:1098E0009F4FAF4FBF4FE92EFA2E0B2F112707FDC9 |
:1098F0001A95E092DF08F092E0080093E1081093D7 |
:10990000E2088091E7089091E808A091E908B091F9 |
:10991000EA08B7FF04C081509F4FAF4FBF4F892F58 |
:109920009A2FAB2FBB27A7FDBA95898B9A8BAB8B50 |
:10993000BC8B8093E7089093E808A093E908B09364 |
:10994000EA0880917606A82EBB24CC24DD24209141 |
:10995000D8023091D9024091DA025091DB02C6015F |
:10996000B5010E940E7A97FF04C061507F4F8F4F60 |
:109970009F4F672E782E892E992487FC9A946092A7 |
:10998000D8027092D9028092DA029092DB02209182 |
:10999000D4023091D5024091D6025091D702C6012F |
:1099A000B5010E940E7A97FF04C061507F4F8F4F20 |
:1099B0009F4F272E382E492E552447FC5A9420922B |
:1099C000D4023092D5024092D6025092D7028091B2 |
:1099D000D0029091D102A091D202B091D302B7FFF0 |
:1099E00004C081509F4FAF4FBF4F892F9A2FAB2F8D |
:1099F000BB27A7FDBA958093D0029093D102A09384 |
:109A0000D202B093D302D801C70186199709A809D9 |
:109A1000B9098093260390932703A0932803B0935A |
:109A2000290320919D06E22EFF2400271127BC0167 |
:109A3000CD01A80197010E94827A59016A01209301 |
:109A400034033093350340933603509337038989A9 |
:109A50009A89AB89BC8982199309A409B5098093B5 |
:109A60002A0390932B03A0932C03B0932D03BC01E6 |
:109A7000CD01A80197010E94827A20933803309388 |
:109A8000390340933A0350933B03D601C501D7FEF7 |
:109A900004C081509F4FAF4FBF4F892F9A2FAB2FDC |
:109AA000BB27A7FDBA95909375028093740257FF68 |
:109AB00004C021503F4F4F4F5F4FBB2757FDBA9512 |
:109AC000A52F942F832F9093770280937602809115 |
:109AD0005A0290915B0281349105DCF48091580226 |
:109AE0009091590281349105A4F480915E06E82F8B |
:109AF000FF27EE0FFF1FE65DF74F808191810190F8 |
:109B0000F081E02DF7FF03C0F095E195FF4F7A97C4 |
:109B1000E4F0809199098F3FC1F480917402909193 |
:109B2000750297FD019695958795909375028093A0 |
:109B30007402809176029091770297FD0196959537 |
:109B4000879590937702809376028091D4089091C4 |
:109B5000D508A091D608B091D708B7FF04C08150AE |
:109B60009F4FAF4FBF4F892F9A2FAB2FBB27A7FD1A |
:109B7000BA958093D4089093D508A093D608B09353 |
:109B8000D7088091C7089091C808A091C908B091E2 |
:109B9000CA08B7FF04C081509F4FAF4FBF4F892FF6 |
:109BA0009A2FAB2FBB27A7FDBA958093C708909338 |
:109BB000C808A093C908B093CA088091E8029091A0 |
:109BC000E902A091EA02B091EB022F813885498524 |
:109BD0005A85281B390B4A0B5B0B20931E033093CD |
:109BE0001F0340932003509321038091E002909142 |
:109BF000E102A091E202B091E302EB84FC840D85C6 |
:109C00001E85E81AF90A0A0B1B0BE0922203F09258 |
:109C100023030093240310932503209326033093FA |
:109C200027034093280350932903E0922A03F092DC |
:109C30002B0300932C0310932D038091C402909169 |
:109C4000C502A091C602B091C702821B930BA40B60 |
:109C5000B50B8093C4029093C502A093C602B09343 |
:109C6000C7028091BC029091BD02A091BE02B0914A |
:109C7000BF028E199F09A00BB10B8093BC02909379 |
:109C8000BD02A093BE02B093BF0288898823E1F091 |
:109C90002091A2023091A302213831054CF080912D |
:109CA000FA029091FB0201969093FB028093FA02D4 |
:109CB00020583F4F4CF48091FA029091FB0201979B |
:109CC0009093FB028093FA021092A3021092A202D8 |
:109CD00081E090E09093410380934003E09026035D |
:109CE000F09027030091280310912903D801C701A0 |
:109CF00017FF07C088279927DC018E199F09A00B41 |
:109D0000B10B81509240A040B04034F084E090E02C |
:109D100090934103809340038091460390914703C1 |
:109D2000A0914803B09149032091DF083091E008E9 |
:109D30004091E1085091E208821B930BA40BB50BF4 |
:109D4000815E914BAF4FBF4F8F539C49A040B040B5 |
:109D500028F080919A0989310CF4FFC021E0E216C5 |
:109D600020E1F20620E0020720E012070CF473C0A5 |
:109D700080914203882309F46AC0D801C70117FF04 |
:109D800007C088279927DC018E199F09A00BB10B0A |
:109D90009C01AD01B7FF04C021503E4F4F4F5F4FB4 |
:109DA000F9E05595479537952795FA95D1F7809124 |
:109DB000400390914103820F931F9093410380933E |
:109DC0004003D801C70117FF03C00796A11DB11DAD |
:109DD000E3E0B595A79597958795EA95D1F7809398 |
:109DE000340390933503A0933603B0933703895817 |
:109DF0009341A040B04064F088E893E1A0E0B0E077 |
:109E00008093340390933503A0933603B0933703C4 |
:109E1000209134033091350340913603509137033C |
:109E200057FF04C021503F4F4F4F5F4F232F342F18 |
:109E3000452F552747FD5A958091740290917502E0 |
:109E4000820F931F909375028093740206C081E085 |
:109E50008093420302C01092420340E0E41640EFB8 |
:109E6000F4064FEF04074FEF14070CF073C0809116 |
:109E70004303882309F46AC0D801C70117FF07C04C |
:109E800088279927DC018E199F09A00BB10B9C0133 |
:109E9000AD01B7FF04C021503E4F4F4F5F4F69E007 |
:109EA00055954795379527956A95D1F78091400349 |
:109EB00090914103820F931F90934103809340033D |
:109EC000D801C70117FF03C00796A11DB11D23E0EC |
:109ED000B595A795979587952A95D1F780933403E3 |
:109EE00090933503A0933603B093370388579C4E65 |
:109EF000AF4FBF4F64F488E79CEEAFEFBFEF8093A6 |
:109F0000340390933503A0933603B0933703209125 |
:109F1000340330913503409136035091370357FF96 |
:109F200004C021503F4F4F4F5F4F232F342F452FF9 |
:109F3000552747FD5A958091740290917502820FC2 |
:109F4000931F909375028093740211C081E08093F7 |
:109F500043030DC0109243030AC0109241031092B4 |
:109F6000400384E690E090938C0180938B01688994 |
:109F7000262F3327809140039091410328173907FA |
:109F800024F4309341032093400310919A09112344 |
:109F900079F0212F332727FD309580914003909150 |
:109FA00041032817390724F43093410320934003D9 |
:109FB0004091260350912703609128037091290353 |
:109FC000413851056105710574F08091FE02909150 |
:109FD000FF022091400330914103820F931F909321 |
:109FE000FF028093FE0240585F4F6F4F7F4F74F423 |
:109FF0008091FE029091FF02209140033091410335 |
:10A00000821B930B9093FF028093FE0281E090E00D |
:10A010009093410380934003C0902A03D0902B0378 |
:10A02000E0902C03F0902D03D701C601F7FE07C086 |
:10A0300088279927DC018C199D09AE09BF09815039 |
:10A040009240A040B04034F084E090E0909341030F |
:10A050008093400380914A0390914B03A0914C035D |
:10A06000B0914D032091E7083091E8084091E9084C |
:10A070005091EA08821B930BA40BB50B815E914BA8 |
:10A08000AF4FBF4F8F539C49A040B04018F01931DB |
:10A090000CF4FFC001E0C01600E1D00600E0E006CD |
:10A0A00000E0F0060CF473C080914403882309F4A7 |
:10A0B0006AC0D701C601F7FE07C088279927DC01CF |
:10A0C0008C199D09AE09BF099C01AD01B7FF04C001 |
:10A0D00021503E4F4F4F5F4F09E0559547953795BB |
:10A0E00027950A95D1F78091400390914103820F03 |
:10A0F000931F9093410380934003D701C601F7FE5D |
:10A1000003C00796A11DB11D13E0B595A7959795BE |
:10A1100087951A95D1F78093380390933903A093CC |
:10A120003A03B0933B0389589341A040B04064F098 |
:10A1300088E893E1A0E0B0E080933803909339037E |
:10A14000A0933A03B0933B03209138033091390335 |
:10A1500040913A0350913B0357FF04C021503F4FB9 |
:10A160004F4F5F4F232F342F452F552747FD5A95CB |
:10A170008091760290917702820F931F90937702DD |
:10A180008093760206C081E08093440302C010925F |
:10A19000440320E0C21620EFD2062FEFE2062FEF95 |
:10A1A000F2060CF073C080914503882309F46AC05D |
:10A1B000D701C601F7FE07C088279927DC018C1953 |
:10A1C0009D09AE09BF099C01AD01B7FF04C0215034 |
:10A1D0003E4F4F4F5F4FE9E055954795379527958F |
:10A1E000EA95D1F78091400390914103820F931F2C |
:10A1F0009093410380934003D701C601F7FE03C04B |
:10A200000796A11DB11D73E0B595A7959795879504 |
:10A210007A95D1F78093380390933903A0933A034A |
:10A22000B0933B0388579C4EAF4FBF4F64F488E711 |
:10A230009CEEAFEFBFEF8093380390933903A09368 |
:10A240003A03B0933B032091380330913903409196 |
:10A250003A0350913B0357FF04C021503F4F4F4FEB |
:10A260005F4F232F342F452F552747FD5A95809157 |
:10A27000760290917702820F931F909377028093DA |
:10A28000760211C081E0809345030DC01092450312 |
:10A290000AC0109241031092400384E690E090932C |
:10A2A0008C0180938B014889242F332780914003B0 |
:10A2B000909141032817390724F4309341032093E8 |
:10A2C000400380919A09882379F0282F332727FDAE |
:10A2D000309580914003909141032817390724F469 |
:10A2E000309341032093400340912A0350912B0364 |
:10A2F00060912C0370912D03413851056105710562 |
:10A3000074F08091FC029091FD0220914003309105 |
:10A310004103820F931F9093FD028093FC024058EB |
:10A320005F4F6F4F7F4FCCF48091FC029091FD0204 |
:10A330002091400330914103821B930B9093FD02C7 |
:10A340008093FC020AC0109277021092760210925B |
:10A350007502109274021092A4028091ED08882375 |
:10A3600041F41092770210927602109275021092C8 |
:10A3700074028091DF089091E008A091E108B0910B |
:10A38000E2088093460390934703A0934803B09359 |
:10A3900049038091E7089091E808A091E908B091FD |
:10A3A000EA0880934A0390934B03A0934C03B09325 |
:10A3B0004D031092D8021092D9021092DA02109234 |
:10A3C000DB021092D4021092D5021092D6021092A3 |
:10A3D000D7021092D0021092D1021092D2021092A3 |
:10A3E000D3021092DF081092E0081092E108109258 |
:10A3F000E2081092E7081092E8081092E90810921B |
:10A40000EA081092D4081092D5081092D60810923B |
:10A41000D7081092C7081092C8081092C908109265 |
:10A42000CA081092FF011092FE01E0909A02F0908B |
:10A430009B02C701F7FE04C0882799278E199F0940 |
:10A4400004973CF08091070984FD03C082E3809368 |
:10A45000780210917306A12EBB24CC24DD24B70111 |
:10A46000882777FD8095982F9701F7FE04C0222753 |
:10A4700033272E193F09442737FD4095542F0E945A |
:10A480000E7A9B01AC01C601B5010E940E7A97FFBE |
:10A4900004C061507E4F8F4F9F4F59E0959587952F |
:10A4A000779567955A95D1F79B01812F99278E9DB6 |
:10A4B000D0018F9DB00D9E9DB00D1124CD01B7FD33 |
:10A4C00003969595879595958795280F391F8091C7 |
:10A4D0005002909151028150924010F020E030E003 |
:10A4E00080917A0290917B02280F391F442737FD13 |
:10A4F0004095542F20931A0330931B0340931C0361 |
:10A5000050931D038091B8029091B902A091BA02B4 |
:10A51000B091BB02821B930BA40BB50B8093B802C6 |
:10A520009093B902A093BA02B093BB028155934CA9 |
:10A53000A040B04064F080E593ECA0E0B0E08093F0 |
:10A54000B8029093B902A093BA02B093BB02809173 |
:10A55000B8029091B902A091BA02B091BB02805B9F |
:10A560009C43AF4FBF4F64F480EB9CE3AFEFBFEF72 |
:10A570008093B8029093B902A093BA02B093BB0241 |
:10A5800080908F019090900197FCFBC0809107090B |
:10A5900083FFF7C080918E01815080938E018823C4 |
:10A5A00009F0F3C08DE080938E018091E8029091D4 |
:10A5B000E902A091EA02B091EB02B7FF04C081501A |
:10A5C0009E4FAF4FBF4F39E0B595A79597958795AB |
:10A5D0003A95D1F78C0197FF03C0109501951F4F55 |
:10A5E0008091E0029091E102A091E202B091E30239 |
:10A5F000B7FF04C081509E4FAF4FBF4F29E0B595C4 |
:10A60000A795979587952A95D1F79C0197FF03C049 |
:10A61000309521953F4F021713070CF48901B801BB |
:10A6200017FF02C0695F7F4F3B01B3E075946794E9 |
:10A63000BA95E1F7A2E0EA2EF12C6E0C7F1CA090F7 |
:10A640001909B0901A09C0901B09D0901C092091DB |
:10A650004101309142014091430150914401C601B2 |
:10A66000B5010E94827A19012A013093C50820930E |
:10A67000C408821A930AC401845E9D4F68E671E0A3 |
:10A680000E944D7AAC01445B504020917802222315 |
:10A6900021F03092A7022092A60280918B01909126 |
:10A6A0008C01009731F0019790938C0180938B017E |
:10A6B00012C0093111057CF48091A2029091A3028D |
:10A6C000840F951F9093A3028093A202222319F076 |
:10A6D00021502093780280918B0190918C01892BDD |
:10A6E000F9F480918D019927489F8001499F100DB1 |
:10A6F000589F100D1124C801B3010E944D7ACB015F |
:10A70000AA2797FDA095BA2FA80EB91ECA1EDB1E58 |
:10A71000A0921909B0921A09C0921B09D0921C0983 |
:10A7200080917802882369F58091A6029091A70212 |
:10A730002091C4083091C508821B930B845E9D4F05 |
:10A7400068E671E00E944D7A9C01245B3040809164 |
:10A75000780186959927289FA001299F500D389F41 |
:10A76000500D11249A0157FF02C0215F3F4FF4E0C2 |
:10A7700035952795FA95E1F730937B0220937A027D |
:10A7800004C010927B0210927A028091A402882366 |
:10A7900081F01092AC021092AD021092AE021092B3 |
:10A7A000AF021092B0021092B1021092B202109257 |
:10A7B000B302809171028823F1F48091ED08282F73 |
:10A7C0003327442755278091E8029091E902A09110 |
:10A7D000EA02B091EB02BC01CD010E940E7ADC01CD |
:10A7E000CB01BC01CD0128EF3AE240E050E00E94ED |
:10A7F000827A390102C0662477248091700288230E |
:10A80000F1F48091ED08282F3327442755278091B4 |
:10A81000E0029091E102A091E202B091E302BC015A |
:10A82000CD010E940E7ADC01CB01BC01CD0128EFE5 |
:10A830003AE240E050E00E94827A290102C04424BA |
:10A8400055248091C1089091C208893C91051CF063 |
:10A8500088EC90E005C088539F4F34F488E39FEF65 |
:10A860009093C2088093C1088091CC089091CD0844 |
:10A87000893C91051CF088EC90E005C088539F4FFF |
:10A8800034F488E39FEF9093CD088093CC088091B7 |
:10A89000CE089091CF08AA2797FDA095BA2F2091B6 |
:10A8A0001709A22EBB24CC24DD24BC01CD01A601B6 |
:10A8B00095010E940E7A9B01AC018091C108909194 |
:10A8C000C208AA2797FDA095BA2FE7E0880F991F25 |
:10A8D000AA1FBB1FEA95D1F7280F391F4A1F5B1F1C |
:10A8E00057FF04C0215C3F4F4F4F5F4F76E05595B7 |
:10A8F0004795379527957A95D1F78301020F131F56 |
:10A900001093CF080093CE088091BF089091C008A3 |
:10A91000AA2797FDA095BA2FBC01CD01A6019501EC |
:10A920000E940E7A9B01AC018091CC089091CD08D9 |
:10A93000AA2797FDA095BA2F67E0880F991FAA1F35 |
:10A94000BB1F6A95D1F7280F391F4A1F5B1F57FF9E |
:10A9500004C0215C3F4F4F4F5F4FA6E05595479590 |
:10A9600037952795AA95D1F77201E20EF31EF09262 |
:10A97000C008E092BF088091120990911309880FD6 |
:10A98000991FAA2797FDA095BA2F2091C6083327B3 |
:10A9900044275527BC01CD010E940E7A5B016C0152 |
:10A9A00097FF08C08FE390E0A0E0B0E0A80EB91ECA |
:10A9B000CA1EDB1EF6E0D594C794B794A794FA9507 |
:10A9C000D1F78091DC08282F332744275527809121 |
:10A9D000CC029091CD02A091CE02B091CF02BC01E9 |
:10A9E000CD010E940E7ADC01CB01BC01CD0120EF2C |
:10A9F00035E540E050E00E94827AB501620F731F96 |
:10AA000070931309609312090150104134F080E0F3 |
:10AA100090E19093CF088093CE088091CE089091DA |
:10AA2000CF088050904F34F480E090EF9093CF089F |
:10AA30008093CE08B1E0EB16B0E1FB0634F080E085 |
:10AA400090E19093C0088093BF088091BF089091D7 |
:10AA5000C0088050904F34F480E090EF9093C0088D |
:10AA60008093BF086150704134F080E090E1909392 |
:10AA70001309809312098091120990911309805053 |
:10AA8000904F34F480E090EF909313098093120973 |
:10AA90008091550285FD16C0809102019927209171 |
:10AAA00023013091240169817A81689FA001699F07 |
:10AAB000500D789F500D1124CA01B9010E94397AB6 |
:10AAC0007A83698380914E03815080934E038F3F38 |
:10AAD00009F05EC080914F0390915003892B41F49F |
:10AAE00080912301909124019093500380934F0310 |
:10AAF000809123019091240120914F0330915003C4 |
:10AB00002817390718F42F5F3F4F09C080912301A0 |
:10AB1000909124018217930730F4215030403093F4 |
:10AB2000500320934F0384E680934E038091BC0131 |
:10AB3000282F332740914F0350915003421753075A |
:10AB400010F48AE00CC080910001280F311D2417F9 |
:10AB5000350738F480914C02882319F08150809396 |
:10AB60004C028091BB01282F33274217530710F462 |
:10AB700089E10CC080910001280F311D2417350791 |
:10AB800038F480914B02882319F0815080934B0256 |
:10AB900080914C028823D1F080917E0290917F02B7 |
:10ABA000A0918002B0918102B7FD10C08091CC06C7 |
:10ABB00080937D0280EE91EBAFEFBFEF80937E023A |
:10ABC00090937F02A0938002B09381028091E9016B |
:10ABD000882311F40E941E6289819A81880F991F2F |
:10ABE000880F991F9A8389838091070980FD02C08D |
:10ABF0000C94FD5D80917002882311F00C94FD5D32 |
:10AC000040917102442311F00C94FD5D8091CF03BB |
:10AC100099278F779070009711F00C94FD5D4C018F |
:10AC200020910003309101032115310509F044C042 |
:10AC30008091190190911A018959934058F087B574 |
:10AC4000853F20F480910202815011C081E0809301 |
:10AC50005C0353C08091190190911A0184369105CB |
:10AC600030F587B58B30F8F0809102028F5F8093CA |
:10AC700002029AE089029001112480910606821B4B |
:10AC800087BD87B5809588BD8CE291E09093EB01FC |
:10AC90008093EA018EE591E0909301038093000395 |
:10ACA0000E94931A2AC081E080935B0326C04093E0 |
:10ACB0005B0340935C0321C09093010280930002E8 |
:10ACC0008091880290918902A0918A02B0918B02B2 |
:10ACD00074E0880F991FAA1FBB1F7A95D1F7809344 |
:10ACE000030290930402A0930502B0930602215040 |
:10ACF0003040309301032093000380910709209195 |
:10AD00006B0281FF25C02233E8F4809191018150CC |
:10AD1000809391018F3FE1F51092A5028091880206 |
:10AD200090918902A0918A02B0918B028093840253 |
:10AD300090938502A0938602B093870281E080936E |
:10AD4000910126C0273420F188EC809391011DC029 |
:10AD50008091450190914601820F911D20916C06D2 |
:10AD60003327829FF001839FF00D929FF00D1124F5 |
:10AD7000CF01AA2797FDA095BA2F809384029093C4 |
:10AD80008502A0938602B093870281E08093A5029A |
:10AD90008091E8029091E902A091EA02B091EB0261 |
:10ADA000E0904101F0904201009143011091440173 |
:10ADB000BC01CD01A80197010E94827A59016A0164 |
:10ADC0008091E0029091E102A091E202B091E30251 |
:10ADD000BC01CD01A80197010E94827AB901C50189 |
:10ADE0000E9437789093D9088093D808CC9734F094 |
:10ADF0008CE390E09093D9088093D8088091D8088C |
:10AE00009091D9080E94986A9093D9088093D808A5 |
:10AE100080E280934001109283021092820280911E |
:10AE2000A502882309F487C58091550299279C01C2 |
:10AE30002071307084FD7FC58091540282608093C0 |
:10AE400054027091EB08872F992761E0C62ED12C10 |
:10AE5000C822D92280FD04C08091070981FD10C05D |
:10AE6000E980FA8030935203209351033093830298 |
:10AE70002093820280915502806C80935502BBC260 |
:10AE80008091550281FF8AC2009181011091820157 |
:10AE9000C8010F96A0909802B09099028A159B0560 |
:10AEA00008F07DC080915B03882309F078C0809111 |
:10AEB000550287FF15C0809155028F778093550208 |
:10AEC0008091F6019091F701A091F801B091F901FC |
:10AED0008093840290938502A0938602B0938702A8 |
:10AEE000E090CB08EE20F9F08091840290918502E9 |
:10AEF000A0918602B0918702BC01CD0124E630E02A |
:10AF000040E050E00E94827A8E2D9927AA27BB2725 |
:10AF100082179307A407B50734F4D0928302C09236 |
:10AF200082028DE337C0809153039091540345977B |
:10AF300084F08091F6019091F701A091F801B09111 |
:10AF4000F9018093840290938502A0938602B093C6 |
:10AF50008702809155028064809355029501201BE1 |
:10AF6000310B2F50304037FF03C0309521953F4FB4 |
:10AF7000309383022093820280914C02882349F00F |
:10AF8000C90163E070E00E944D7A70938302609380 |
:10AF900082028BE28093400110927C0234C1C8018E |
:10AFA0000F97A816B906C0F520915C032223A1F5DE |
:10AFB0008091550286FF15C0809155028F7B80934A |
:10AFC00055028091F6019091F701A091F801B0919E |
:10AFD000F9018093840290938502A0938602B09336 |
:10AFE000870280915502806880935502C501801BBD |
:10AFF000910B0F9697FF03C0909581959F4F909569 |
:10B0000081959F4F90938302809382028DE280937B |
:10B01000400120937C02F7C08DE380934001609152 |
:10B020007D02662371F120917E0230917F02409172 |
:10B030008002509181028091840290918502A091BA |
:10B040008602B091870282179307A407B507CCF454 |
:10B0500080915502806480935502862F99279093A2 |
:10B060008302809382028AE080937C028EE5809343 |
:10B0700040018091550287FFC6C0809155028F77AD |
:10B0800033C0662309F443C020917E0230917F02D1 |
:10B0900040918002509181028091840290918502BA |
:10B0A000A0918602B0918702281739074A075B07EB |
:10B0B00074F580915502806880935502862F9927F8 |
:10B0C000909581959F4F909383028093820286EFA3 |
:10B0D00080937C0286E7809340018091550286FF31 |
:10B0E00092C0809155028F7B809355028091F6012A |
:10B0F0009091F701A091F801B091F9018093840239 |
:10B1000090938502A0938602B09387027CC08091C1 |
:10B110005502807C09F477C080917C02882309F075 |
:10B120004CC08091F6019091F701A091F801B09187 |
:10B13000F901885C9040A040B04020918402309199 |
:10B140008502409186025091870282179307A407D7 |
:10B15000B5076CF08091F6019091F701A091F8018C |
:10B16000B091F901885C9040A040B0401DC0809132 |
:10B17000F6019091F701A091F801B091F90188537F |
:10B180009F4FAF4FBF4F281739074A075B07BCF0E7 |
:10B190008091F6019091F701A091F801B091F90129 |
:10B1A00088539F4FAF4FBF4F809384029093850287 |
:10B1B000A0938602B093870202C010927C02809115 |
:10B1C00055028F73809355021092520310925103CF |
:10B1D00071FF06C084EF91E09093EB018093EA0148 |
:10B1E00080918C02882379F4809188029091890261 |
:10B1F000A0918A02B0918B02C397A105B1051CF002 |
:10B2000081E080938C026091510370915203809190 |
:10B21000820290918302680F791F709352036093AA |
:10B220005103CB0177FF04C088279927861B970B12 |
:10B23000855F91400CF49BC040917C02442389F1CE |
:10B2400080917E0290917F0220918402309185024C |
:10B25000821B930B0996439748F480917E0290914C |
:10B260007F02A0918002B091810212C0242F332767 |
:10B2700027FD3095432F532F8091840290918502B2 |
:10B28000A0918602B0918702820F931FA41FB51F61 |
:10B290008093840290938502A0938602B0938702E4 |
:10B2A00024C080916C0620918402309185024091E7 |
:10B2B0008602509187021616170644F463E00E9436 |
:10B2C0002D7A280F311D411D511D07C063E00E94DA |
:10B2D0002D7A281B310941095109209384023093AA |
:10B2E0008502409386025093870210925203109277 |
:10B2F0005103E0908802F090890200918A02109137 |
:10B300008B02D801C70180509440A040B0402091EA |
:10B310008402309185024091860250918702821703 |
:10B320009307A407B5075CF4D801C70180509C4F70 |
:10B33000AF4FBF4F281739074A075B0744F0809388 |
:10B34000840290938502A0938602B0938702809135 |
:10B35000EB0881FF06C084E690E09093EB018093B8 |
:10B36000EA0180917D02882311F40E94E13F8091DF |
:10B37000000390910103892BD1F18091F601909106 |
:10B38000F701A091F801B091F901809384029093A4 |
:10B390008502A0938602B093870229C0809188021B |
:10B3A00090918902A0918A02B0918B02805D9740B2 |
:10B3B000A040B0408093840290938502A0938602BF |
:10B3C000B093870280917006882311F0992702C0FC |
:10B3D0008FE790E09093820180938101E980FA8069 |
:10B3E000F0927302E09272028EE280934001E0904C |
:10B3F0007202F09073028091F6019091F701A09192 |
:10B40000F801B091F90120918402309185024091B8 |
:10B41000860250918702281739074A075B0724F0F4 |
:10B420008091EB0880FD99C280914D02882309F03C |
:10B4300094C28091000390910103892B49F0E09020 |
:10B440007202F09073021092540310925303E1C001 |
:10B450008091F6019091F701A091F801B091F90166 |
:10B46000821B930BA40BB50B80931E0390931F03B9 |
:10B47000A0932003B0932103823000E890070FEFE0 |
:10B48000A0070FEFB0072CF481E090E8AFEFBFEF1B |
:10B4900009C08F5F9F47A040B04064F08FEF9FE7E7 |
:10B4A000A0E0B0E080931E0390931F03A0932003BD |
:10B4B000B093210380911E0390911F039093540336 |
:10B4C0008093530380917A01282F332744275527EF |
:10B4D00080911E0390911F03A0912003B09121033E |
:10B4E000BC01CD010E940E7A97FF04C0615E7F4FC0 |
:10B4F0008F4F9F4F55E095958795779567955A950E |
:10B50000D1F760931E0370931F03809320039093E1 |
:10B51000210365302EEF72072FEF82072FEF92077E |
:10B520002CF484E09EEFAFEFBFEF09C06050744091 |
:10B530008040904064F080E094E0A0E0B0E0809330 |
:10B540001E0390931F03A0932003B09321038090C8 |
:10B550001E0390901F03209100023091010237FFDB |
:10B5600002C0295F3F4F43E0359527954A95E1F7A3 |
:10B570004FEF223834071CF421E83FEF05C0203894 |
:10B58000310514F020E830E0C901AA2797FDA09505 |
:10B59000BA2F20917B01332744275527BC01CD01C9 |
:10B5A0000E940E7A97FF04C06D5F7F4F8F4F9F4FB1 |
:10B5B00022E095958795779567952A95D1F79B0118 |
:10B5C0005FEF613075071CF420E03FEF06C06F3F6E |
:10B5D000710519F014F020E031E080915502807C73 |
:10B5E00049F0C90137FD03969C013595279535959E |
:10B5F00027950DC08091EB0880FF09C0C90137FD78 |
:10B6000007969C0103E0359527950A95E1F7820E90 |
:10B61000931E20917901222309F454C06091A8025D |
:10B620007091A9028091AA029091AB0297FF04C089 |
:10B6300061587F4F8F4F9F4F17E09595879577956E |
:10B6400067951A95D1F73327442755270E940E7A1C |
:10B6500097FF04C0615E7F4F8F4F9F4FB5E0959578 |
:10B66000879577956795BA95D1F760931E03709388 |
:10B670001F0380932003909321036138AFEF7A0773 |
:10B68000AFEF8A07AFEF9A072CF480E89FEFAFEF98 |
:10B69000BFEF0AC06F3F71058105910569F064F045 |
:10B6A00080E091E0A0E0B0E080931E0390931F0340 |
:10B6B000A0932003B093210380911E0390911F0358 |
:10B6C000880E991E80917701282F332780919D093C |
:10B6D000992787FD9095289FF001299FF00D389FAD |
:10B6E000F00D11249F01F7FF02C021583F4F220F98 |
:10B6F000232F221F330BFFEF21383F071CF420E8D4 |
:10B700003FEF06C02F3F310519F014F020E031E083 |
:10B71000280D391DC901AA2797FDA095BA2F0091C0 |
:10B720007202109173029801442737FD4095542FFF |
:10B73000BC01CD010E940E7A97FF04C061507E4F7C |
:10B740008F4F9F4FF9E09595879577956795FA9577 |
:10B75000D1F7E61AF70A8091820290918302892B31 |
:10B7600009F064C0101611060CF060C0209153035C |
:10B7700030915403C90137FF03C0309521953F4FE5 |
:10B780002D33310540F48091A0029091A1028E15D5 |
:10B790009F0574F526C02C533040E5E0369527957B |
:10B7A000EA95E1F72031310510F02FE030E04091CB |
:10B7B000A0025091A10218161906E4F480E190E06D |
:10B7C000821B930B489F9001499F300D589F300D6D |
:10B7D000112474E0369527957A95E1F72E153F05EB |
:10B7E00020F580917F0190918001E816F906F4F030 |
:10B7F0007C011CC0205F3F4F80917F0190918001B0 |
:10B80000829FB001839F700D929F700D11249B0148 |
:10B8100064E0369527956A95E1F74E155F0514F0BB |
:10B820007A0104C0E216F30608F07901C701AA27DD |
:10B8300097FDA095BA2F5DE0880F991FAA1FBB1F27 |
:10B840005A95D1F72091D8083091D908442737FD6F |
:10B850004095542FBC01CD010E94827A209322038F |
:10B86000309323034093240350932503E090220355 |
:10B87000F090230380915503909156039C01220F71 |
:10B88000331F280F391F2E0D3F1D37FF02C02D5FBC |
:10B890003F4FA901559547955595479550935603A8 |
:10B8A0004093550380916806282F3327220F331FBA |
:10B8B000220F331F241735076CF480910F09282FAE |
:10B8C0003327220F331F220F331F205530404217DA |
:10B8D000530724F030935603209355038091EB08CF |
:10B8E00080FF14C08091550390915603A981BA81BD |
:10B8F0008A179B0724F0B0935603A0935503E09159 |
:10B900005503F0915603FA83E98327C029813A81D0 |
:10B91000201B310B37FF02C02D5F3F4F3595279518 |
:10B9200035952795E0905503F0905603E20EF31EEF |
:10B93000FA82E98212C00E94E13F09811A811093C4 |
:10B9400056030093550380915502806C80935502F5 |
:10B95000809154028D7F80935402809155029927E3 |
:10B960009C012270307081FF39C180915703909102 |
:10B970005803A0915903B0915A030097A105B1054E |
:10B9800021F080918C028130B9F480917202909103 |
:10B990007302AA2797FDA095BA2F1EE0880F991F62 |
:10B9A000AA1FBB1F1A95D1F7809357039093580392 |
:10B9B000A0935903B0935A0380918C02813019F4FB |
:10B9C00082E080938C0229813A8179010027F7FC7B |
:10B9D0000095102F8091D8089091D9089C01442798 |
:10B9E00037FD4095542FC801B7010E940E7ADC0143 |
:10B9F000CB018093220390932303A0932403B0935D |
:10BA00002503B7FF04C08150904EAF4FBF4F7C015C |
:10BA10008D01FDE015950795F794E794FA95D1F718 |
:10BA2000E0922203F0922303009324031093250352 |
:10BA300060915602709157023FE0603A730750F5EB |
:10BA40008091570390915803A0915903B0915A03E4 |
:10BA50009C01AD01EAE05695479537952795EA9503 |
:10BA6000D1F7821B930BA40BB50BA8019701F4E04F |
:10BA7000220F331F441F551FFA95D1F7820F931FD2 |
:10BA8000A41FB51F8093570390935803A0935903A5 |
:10BA9000B0935A0360547F4118F5809157039091F9 |
:10BAA0005803A0915903B0915A039C01AD01ECE0F9 |
:10BAB0005695479537952795EA95D1F7821B930BB5 |
:10BAC000A40BB50BA801970172E0220F331F441F8E |
:10BAD000551F7A95D1F7820F931FA41FB51F41C040 |
:10BAE00080910002909101028091000290910102E8 |
:10BAF00097FF03C0909581959F4F84369105CCF5B3 |
:10BB00008091F6019091F701A091F801B091F901AF |
:10BB10009C018091840290918502281B390B37FF8C |
:10BB200003C0309521953F4F2F3F310509F00CF5AB |
:10BB30008091570390915803A0915903B0915A03F3 |
:10BB40009C01AD016EE056954795379527956A950E |
:10BB5000D1F7821B930BA40BB50B8E0D9F1DA01F5D |
:10BB6000B11F8093570390935803A0935903B09348 |
:10BB70005A038091570390915803A0915903B091B3 |
:10BB80005A031EE0B695A795979587951A95D1F714 |
:10BB9000909373028093720240916E06442399F051 |
:10BBA00055279C01BA010E944D7AC901861B970B4B |
:10BBB0009093A1028093A002260F371F309380013B |
:10BBC00020937F011FC01092A1021092A0028FEF5C |
:10BBD00093E09093800180937F0114C010928C02B7 |
:10BBE00010925703109258031092590310925A035F |
:10BBF000309373022093720205C080915502806CCD |
:10BC00008093550280916A0381FF37C089819A81B0 |
:10BC100097FD039695958795959587952091520266 |
:10BC2000309153022817390760F480917202909185 |
:10BC30007302892B31F0220F331F220F331F3A83F7 |
:10BC400029838091F6019091F701A091F801B091BC |
:10BC5000F9018093840290938502A0938602B093A9 |
:10BC6000870288E99AE39093EB018093EA0180E0F0 |
:10BC70009EE090930C0180930B012091D308822FBA |
:10BC80009927880F991F880F991F889669817A8153 |
:10BC90008617970714F09A83898380910F09992753 |
:10BCA000880F991F880F991F80559040A981BA81EC |
:10BCB0008A179B0714F49A83898380913A02882318 |
:10BCC00041F48091A4098E3F20F080916E03882377 |
:10BCD000E9F080915602909157020297C097B0F414 |
:10BCE000E981FA811E161F068CF481E090E09093A2 |
:10BCF000570280935602E22EFF24EE0CFF1CEE0C3E |
:10BD0000FF1C8701085D1F4F1A8309838091E90199 |
:10BD1000882311F40E941E6229813A813093C40560 |
:10BD20002093C30580911A0390911B03A0911C03DB |
:10BD3000B0911D0342E0880F991FAA1FBB1F4A95AF |
:10BD4000D1F70091120910911309081B190B213A20 |
:10BD500031058CF0C90137FD0196959587958017BF |
:10BD600091070CF48C01909581959F4F0817190746 |
:10BD70006CF48C010BC00135110514F000E510E0E6 |
:10BD80003FEF003B130714F400EB1FEF80910F0906 |
:10BD9000282F3327220F331F220F331FC901498158 |
:10BDA0005A81841B950B801791070CF48C016981D3 |
:10BDB0007A81621B730B061717070CF48B018091B5 |
:10BDC000CE089091CF0860919E0270919F02861BD1 |
:10BDD000970B9093DE088093DD08D090ED082091BA |
:10BDE000B0023091B1024091B2025091B302DD2015 |
:10BDF00041F0661A770AC301AA2797FDA095BA2FCA |
:10BE000004C0AA2797FDA095BA2F280F391F4A1FF3 |
:10BE10005B1F2093B0023093B1024093B202509363 |
:10BE2000B3028091B0029091B102A091B202B091A0 |
:10BE3000B30281509A4FA040B04064F080E09AEF86 |
:10BE4000A0E0B0E08093B0029093B102A093B20260 |
:10BE5000B093B3028091B0029091B102A091B2026E |
:10BE6000B091B30280509640AF4FBF4F64F480E072 |
:10BE700096E0AFEFBFEF8093B0029093B102A09332 |
:10BE8000B202B093B302C0907D062091DD083091DC |
:10BE9000DE08F8E0FC1598F08C2D9927829F700140 |
:10BEA000839FF00C929FF00C1124C701F7FC0796BA |
:10BEB0007C01B3E0F594E794BA95E1F712C08C2DBC |
:10BEC00086959927829FA001839F500D929F500DC8 |
:10BED0001124CA0157FD03967C01F594E794F5946B |
:10BEE000E794A0907C01B0907D019501442737FD37 |
:10BEF0004095542F8091B0029091B102A091B2026E |
:10BF0000B091B302BC01CD010E94827AE20EF31E11 |
:10BF100090906601692D772788279927980117FF48 |
:10BF200004C022273327201B310B37FF02C02F5FAD |
:10BF30003F4F35952795A981BA812A0F3B1F44278A |
:10BF400037FD4095542F0E940E7A97FF04C0615C24 |
:10BF50007F4F8F4F9F4FE6E0959587957795679533 |
:10BF6000EA95D1F79B016E157F050CF47B013095A6 |
:10BF700021953F4FE216F3060CF479018091BF083A |
:10BF80009091C00860919C0270919D02861B970B56 |
:10BF90009093BE088093BD082091AC023091AD0211 |
:10BFA0004091AE025091AF02DD2041F0461A570A8F |
:10BFB000C201AA2797FDA095BA2F04C0AA2797FD12 |
:10BFC000A095BA2F280F391F4A1F5B1F2093AC0280 |
:10BFD0003093AD024093AE025093AF028091AC0219 |
:10BFE0009091AD02A091AE02B091AF0281509A4FF4 |
:10BFF000A040B04064F080E09AEFA0E0B0E0809311 |
:10C00000AC029093AD02A093AE02B093AF028091C8 |
:10C01000AC029091AD02A091AE02B091AF028050FF |
:10C020009640AF4FBF4F64F480E096E0AFEFBFEFB4 |
:10C030008093AC029093AD02A093AE02B093AF0296 |
:10C040002091BD083091BE0848E04C1598F08C2D29 |
:10C050009927829FB001839F700D929F700D1124CC |
:10C06000CB0177FD07966C0163E0D594C7946A9580 |
:10C07000E1F712C0C6948C2D9927829FD001839F2F |
:10C08000B00D929FB00D1124CD01B7FD03966C0148 |
:10C09000D594C794D594C7949501442737FD40950E |
:10C0A000542F8091AC029091AD02A091AE02B0915C |
:10C0B000AF02BC01CD010E94827AC20ED31E692D4F |
:10C0C000772788279927980117FF04C0222733274D |
:10C0D000201B310B37FF02C02F5F3F4F359527954F |
:10C0E000E981FA812E0F3F1F442737FD4095542FD9 |
:10C0F0000E940E7A97FF04C0615C7F4F8F4F9F4F65 |
:10C1000036E095958795779567953A95D1F79B0198 |
:10C110006C157D050CF46B01309521953F4FC216CF |
:10C12000D3060CF469018091E901882311F40E947F |
:10C130001E628091D308282F33273E8B2D8B809150 |
:10C140000F09282E33245090C00625E7A22E27E0A1 |
:10C15000B22E90EF892E96E0992E8BE0482EBEEEFF |
:10C160006B2EB8E07B2ED4012C9112160CF02FC14F |
:10C17000203429F4E981FA81F88FEF8B1FC04981BF |
:10C180005A81CA01AA2797FDA095BA2F332727FD08 |
:10C190003095432F532FBC01CD010E940E7A97FF9B |
:10C1A00004C0615C7F4F8F4F9F4FA6E095958795A8 |
:10C1B00077956795AA95D1F7788F6F8BF4012181D8 |
:10C1C000203439F42F89388D2E0D3F1D388F2F8B59 |
:10C1D0002AC0203C39F44F89588D4E195F09588F79 |
:10C1E0004F8B21C0C701AA2797FDA095BA2F3327EF |
:10C1F00027FD3095432F532FBC01CD010E940E7AAD |
:10C2000097FF04C0615C7F4F8F4F9F4FF6E095957D |
:10C21000879577956795FA95D1F7AF89B88DA60F71 |
:10C22000B71FB88FAF8BF4012281203439F42F89E6 |
:10C23000388D2C0D3D1D388F2F8B2AC0203C39F4B2 |
:10C240004F89588D4C195D09588F4F8B21C0C601FD |
:10C25000AA2797FDA095BA2F332727FD3095432FA6 |
:10C26000532FBC01CD010E940E7A97FF04C0615C80 |
:10C270007F4F8F4F9F4FE6E0959587957795679510 |
:10C28000EA95D1F7AF89B88DA60FB71FB88FAF8BDE |
:10C29000F4012381203439F42F89388D200F311F88 |
:10C2A000388F2F8B2AC0203C39F44F89588D401B82 |
:10C2B000510B588F4F8B21C0C801AA2797FDA0951D |
:10C2C000BA2F332727FD3095432F532FBC01CD01C3 |
:10C2D0000E940E7A97FF04C0615C7F4F8F4F9F4F83 |
:10C2E00056E095958795779567955A95D1F7AF89DB |
:10C2F000B88DA60FB71FB88FAF8BF501808181FD78 |
:10C3000008C0D3018D919C91EF89F88D8E179F07FE |
:10C3100074F4D3018D919C91EF89F88D8E0F9F1F3E |
:10C3200097FD019695958795988F8F8B1EC0552008 |
:10C3300049F42F89388D220F331F281B390B388F72 |
:10C340002F8B13C031E0351580F4252D33274F890D |
:10C35000588D841B950BB9010E944D7ACB016F89D2 |
:10C36000788D680F791F788F6F8B8D899E89880FE4 |
:10C37000991F880F991FAF89B88D8A179B0754F4AE |
:10C38000C101880F991F880F991FEF89F88DE81751 |
:10C39000F90714F0988F8F8B8F89988D97FD0396EE |
:10C3A0009595879595958795F5018183880F991FB8 |
:10C3B000880F991F2F89388D281B390BC901880FC9 |
:10C3C0008283EF89F88DD301ED93FC9303C0F501CF |
:10C3D000118212824A9422E030E0620E731E44E021 |
:10C3E00050E0840E951E6FE070E0A60EB71E47FE6B |
:10C3F000BACEE2E1C85E0C94B97A84B1806A84B99D |
:10C400003D9A82E58CBD1DBC459A81E0809323094D |
:10C410008AEA8093340983E8809335098AE080931F |
:10C420003609109238091092370910923A09109281 |
:10C43000390910929C0910925809089530912309E6 |
:10C44000332309F070C00DB407FE6DC085E0809302 |
:10C45000E901459A2EB580917103992781309105A4 |
:10C4600089F0823091051CF4892B21F03EC002979F |
:10C47000B9F03BC030935709209372032138A9F5D6 |
:10C4800081E008C0253549F480917203820F8093C2 |
:10C49000720382E08093710328C03093710325C03A |
:10C4A00080915709E82FFF27E758F64F20838F5FC9 |
:10C4B00080935709909172038032A0F0291769F494 |
:10C4C00080E2A9E7B9E0E9E5F9E00D9001928A95EB |
:10C4D000E1F781E08093580902C030935809109227 |
:10C4E000710303C0920F909372032091330922329B |
:10C4F000A0F445980000000000000000E0912C0925 |
:10C50000F0912D09E20FF11D80818EBD80915509BA |
:10C510009081890F8093550903C081E0809323099E |
:10C520002F5F209333090895EF92FF920F931F938B |
:10C53000809176069927880F991F880F991F7C0193 |
:10C540000027F7FC0095102F8091E8029091E902F6 |
:10C55000A091EA02B091EB02BC01CD01A8019701C4 |
:10C560000E94827A30933809209337098091E00243 |
:10C570009091E102A091E202B091E302BC01CD01F1 |
:10C58000A80197010E94827A30933A0920933909D1 |
:10C590002091190930911A0940911B0950911C09E9 |
:10C5A000DA01C90173E0880F991FAA1FBB1F7A9592 |
:10C5B000D1F7820F931FA41FB51F820F931FA41FD3 |
:10C5C000B51F2091410130914201409143015091AA |
:10C5D0004401BC01CD010E94827A3093400920932E |
:10C5E0003F098091FA029091FB0220910D02309157 |
:10C5F0000E02821B930B9093460980934509E091AC |
:10C60000F002F091F1028091E4089091E508BF01F9 |
:10C610000E944D7ACB019B01220F331F220F331F43 |
:10C62000280F391F280F391F37FF02C02D5F3F4FDA |
:10C63000359527953595279530933C0920933B09EF |
:10C640008091150990911609BF010E944D7A9B01B6 |
:10C65000220F331F220F331F260F371F260F371FBE |
:10C6600037FF02C02D5F3F4F3595279535952795AC |
:10C6700030933E0920933D091092F1021092F0028E |
:10C680001092E5081092E40810921609109215090C |
:10C69000809136099927AA27BB27FC013A97E830F1 |
:10C6A000F10508F044C2E35AFF4F0C94D47A80910C |
:10C6B0006A02809349098091690280934A098091B6 |
:10C6C000680280934B098091670280934C098091A6 |
:10C6D000660280934D098091650280934E09809196 |
:10C6E000640280934F098091630280935009809186 |
:10C6F00055028093510980915502837F80935502A2 |
:10C70000809101018093520980912301909124012D |
:10C71000809353098091540280935409429907C22F |
:10C7200080915402877F8093540201C280919E09B8 |
:10C7300090919F0990934A098093490980917303CE |
:10C7400080934B098091A40980934C098091AB069A |
:10C750000E94B53C80934D098091400180934E0921 |
:10C7600020917303822F9927FC0114E0EE0FFF1F25 |
:10C770001A95E1F7E81BF90BEB58F84F8685809383 |
:10C780004F0980818093500986818093510983816C |
:10C79000809352098781809353098581809354093E |
:10C7A0002F5F20937303E22FFF27EE0FFF1FEE0F83 |
:10C7B000FF1FED51F94F858518160CF4B8C12223DF |
:10C7C00009F4B5C1822F992701966DE070E00E94AF |
:10C7D0004D7AAC01282FE82FFF27EE0FFF1FEE0F39 |
:10C7E000FF1FED51F94F8585181614F0442351F7BA |
:10C7F000409373039CC18091020180934909809109 |
:10C80000AC0680934A098091AD0680934B098091D4 |
:10C81000AE0680934C098091AF0680934D098091BC |
:10C82000B30680934E098091B40680934F0980919E |
:10C83000B506809350098091B80680935109809184 |
:10C84000B606809352098091B70680935309809170 |
:10C85000B9066BC18091AA068093490910924A09D2 |
:10C860008091CC0680934B098091C10680934C093E |
:10C8700080914B0280934D098091980380934E09DB |
:10C880008091960380934F0980919503809350097E |
:10C890001092980310929603109295038091A6022D |
:10C8A0009091A70290935209809351098091D006EC |
:10C8B000809353098091D10638C1F89480915D0628 |
:10C8C000E82FFF27EE0FFF1FE65DF74F0190F08185 |
:10C8D000E02DE038F1051CF0EFE7F0E006C02FEFA7 |
:10C8E000E138F20714F4E1E8FFEFE09349098091A1 |
:10C8F0005E06E82FFF27EE0FFF1FE65DF74F019062 |
:10C90000F081E02DE038F1051CF0EFE7F0E006C023 |
:10C910007FEFE138F70714F4E1E8FFEFE0934A090D |
:10C9200080915C06E82FFF27EE0FFF1FE65DF74FB3 |
:10C930000190F081E02DE038F1051CF0EFE7F0E028 |
:10C9400006C08FEFE138F80714F4E1E8FFEFE09359 |
:10C950004B0980915B06E82FFF27EE0FFF1FE65D76 |
:10C96000F74F0190F081E02DE038F1051CF0EFE782 |
:10C97000F0E006C02FEFE138F20714F4E1E8FFEF32 |
:10C980007894E0934C0980918F0280934D098091B7 |
:10C99000900280934E098091910280934F0980917B |
:10C9A0009202809350098091930280935109809163 |
:10C9B000940280935209809195028093530980914B |
:10C9C0009602B3C08091EA03853018F01092EA0312 |
:10C9D00085E0809349098091BA0680934A09809145 |
:10C9E000880290918902A0918A02B0918B02BC01C9 |
:10C9F000CD0125E030E040E050E00E94827A3093A3 |
:10CA00004C0920934B098091840290918502A0915A |
:10CA10008602B0918702BC01CD0125E030E040E004 |
:10CA200050E00E94827A30934E0920934D09809104 |
:10CA3000B00680934F098091B10680935009809190 |
:10CA4000B2068093510980918E02809352098091A1 |
:10CA50007403809353098091C3059091C40597FD99 |
:10CA6000039695958795959587955FC082E080930D |
:10CA7000490986E080934A0984E080934B0985E464 |
:10CA800080934C098091030180934D098091CF03DD |
:10CA900080934E099091D00390934F098F778093A4 |
:10CAA000CF0390719093D0038091CD06809350096D |
:10CAB00080910709809351098091EB088093520976 |
:10CAC0008091BD06809353098091D5062EC0809138 |
:10CAD000A2099091A30990934A09809349098091F2 |
:10CAE0006E0180934B0980916D0180934C09809178 |
:10CAF000ED0580934D098091B20180934E0980919C |
:10CB0000BB0680934F098091CB0880935009809198 |
:10CB1000B7019091B8019093520980935109809187 |
:10CB20009106809353098091D20380935409809198 |
:10CB30005809882309F450C1609159098091A201D4 |
:10CB4000681719F08AEF8093A0016093A20181E039 |
:10CB500080938E0140915A0950915B09CA0181501E |
:10CB60009E4F8F5F9340B0F420915C0930915D0936 |
:10CB7000C90181509E4F8F5F934060F4809167069A |
:10CB800085FF08C0509361034093600330935F03B7 |
:10CB900020935E03809160099091610921E08936BC |
:10CBA000920724F49093900180938F0120916A0959 |
:10CBB00030916B098091EA019091EB018217930704 |
:10CBC00040F48091BD01882321F43093EB01209340 |
:10CBD000EA01862F99278836910509F453C08936D2 |
:10CBE000910524F48736910551F0FEC089369105F0 |
:10CBF00009F47DC08B36910509F4C9C0F5C0809158 |
:10CC00006C098093990980916D0980939B098091AB |
:10CC10006E0980939A0980916F0980938D018091AC |
:10CC2000700980939D09809171098093A101809181 |
:10CC30007209809370038091730980935D038091E2 |
:10CC40006202882351F0809174099091750997FDD3 |
:10CC500004C09093A7028093A602209168033091AC |
:10CC600069038091760990917709280F391F37FF62 |
:10CC700002C02F5F3F4F359527953093690320936E |
:10CC80006803B2C080916C0980932E0980916D0970 |
:10CC900080932F0980916E098093300980916F09EC |
:10CCA0008093310980917009809332098091B30596 |
:10CCB00090917109892B8093B3059091B40593707D |
:10CCC000809172098C70982B9093B40580917309B0 |
:10CCD00080936E038091740980939201809175090D |
:10CCE00080939C098091760980936A037DC080912E |
:10CCF0006C098093240980916D09809325098091A6 |
:10CD00006E098093260980916F098093270980918D |
:10CD10007009909171099093290980932809809155 |
:10CD200072099091730990932B0980932A0980913D |
:10CD30007409992787FD90959093650880936408FE |
:10CD40008091750980937D02809176099091770991 |
:10CD50009C01442737FD4095542FDA01C90163E057 |
:10CD6000880F991FAA1FBB1F6A95D1F7820F931FC7 |
:10CD7000A41FB51F820F931FA41FB51F80937E02AF |
:10CD800090937F02A0938002B09381022DC0809186 |
:10CD90006C0980936D0380916D0980936C03809181 |
:10CDA0006E0980936B038091700980939B0380913F |
:10CDB000710980939A0380917409809399038091FB |
:10CDC00075098093970380917609909177099093E4 |
:10CDD00011098093100908C010926103109260033A |
:10CDE00010925F0310925E031F910F91FF90EF90DE |
:10CDF000089580912309882319F480E090E0089534 |
:10CE0000459884E399E090932D0980932C099091A3 |
:10CE10006F03E92FFF27ED56FE4F9F5F90936F033F |
:10CE20008081809336099D3010F010926F0310922C |
:10CE300023090E94946281E0809333098091340930 |
:10CE4000809355098EBD81E090E0089587B18C6094 |
:10CE500087B9429843981092760380E88093A401A2 |
:10CE6000109275038093A3010895809164089091B6 |
:10CE7000650881589F4F39F080916408909165084A |
:10CE800081588093800380917B03815080937B0342 |
:10CE90008F3F09F052C18091A40680937C0380915A |
:10CEA000A60680937D0389E080937B0380915502E1 |
:10CEB000992780739070892B21F48091D00380FF93 |
:10CEC0001DC08091A806882351F080917E0388239D |
:10CED00019F484E08093760381E080937E0380914F |
:10CEE000A906882379F080917F03882319F484E0D0 |
:10CEF0008093750381E080937F0304C010927E03CA |
:10CF000010927F0380917E03882309F082C0809174 |
:10CF1000D206282F332724FF07C080918D02882353 |
:10CF200019F425FD8FC090C09091A506983F48F058 |
:10CF30008091E6088D3D28F080917C0388236CF079 |
:10CF40000AC0983F78F08091E608853059F48091C6 |
:10CF50007C0387FF02C0429A01C0429881E080931F |
:10CF6000A40154C0809176038150809376038F3F53 |
:10CF700009F06BC08091D50685FF2FC0909180038A |
:10CF8000892F869580937603992361F49093740397 |
:10CF900080917C0387FF02C0429A01C042981092A0 |
:10CFA000A40153C081E0809374038091A401909107 |
:10CFB0007C03882349F48093800380E48093A40158 |
:10CFC00099230CF43FC040C0982311F0429A01C04D |
:10CFD000429886958093A40138C08091E608869592 |
:10CFE000809376038091A401813021F41092800314 |
:10CFF00080E401C086958093A4018091A401909162 |
:10D000007C03892311F0429A01C042981092740364 |
:10D010001CC0809176038150809376038F3FA9F4E2 |
:10D0200089E0809376038091A401813011F480E837 |
:10D0300001C086958093A4018091A4019091A806D7 |
:10D04000892311F0429A01C0429880917F0388237E |
:10D0500009F043C09091D20697FF07C080918D02DE |
:10D06000882319F496FD52C053C09091A706983FAB |
:10D0700048F080910E098D3D28F080917D03882332 |
:10D080006CF00AC0983F78F080910E09853059F411 |
:10D0900080917D0387FF02C0439A01C0439881E0DD |
:10D0A0008093A30136C080917503815080937503EE |
:10D0B0008F3F79F580910E09869580937503809155 |
:10D0C000A301813011F480E401C086958093A3010F |
:10D0D0008091A30190917D0317C0809175038150C9 |
:10D0E000809375038F3FA9F489E080937503809145 |
:10D0F000A301813011F480E801C086958093A301DB |
:10D100008091A3019091A906892311F0439A01C04F |
:10D110004398429B05C080915402886080935402DA |
:10D12000439B06C08091540280618093540208950D |
:10D13000809154028F7E8093540208954FB724E16A |
:10D1400030E0F8948091C9008F778093C900809176 |
:10D15000C9008F7B8093C9008091C9008F7D809327 |
:10D16000C900832F99278093CD002093CC00809114 |
:10D17000C80082608093C80080E18093C9008091DC |
:10D18000CA008F778093CA008091CA008F7B8093FA |
:10D19000CA008091CA008F7D8093CA008091CA0026 |
:10D1A0008F7E8093CA008091CA00877F8093CA00D7 |
:10D1B0008091C9008B7F8093C9008091CA008460F0 |
:10D1C0008093CA008091CA0082608093CA008091D7 |
:10D1D000C80087FF03C08091CE00F9CF8091C900BD |
:10D1E00080688093C9004FBF0895EF92FF920F931C |
:10D1F0001F93CF93DF93482F00E010E08091A501AB |
:10D20000813061F41092A50184E48093810310922F |
:10D210008303109282031092840339C180918103A9 |
:10D22000882319F421E030E001C098019091820335 |
:10D23000992371F4232B11F081E010C084E48093D2 |
:10D24000810390938303909382039093840308C196 |
:10D25000913069F4232B09F0F9C082E080938203B6 |
:10D26000809183038F5F8093830383E0F7C09230C4 |
:10D27000D1F4232B09F0EAC083E08093810340932B |
:10D28000840390918303923039F41092850347FF11 |
:10D2900003C081E08093850383E0809382039F5FD6 |
:10D2A00090938303DDC0933009F0D0C0232B09F0A5 |
:10D2B000CDC09093810382E08093820380918303A9 |
:10D2C0008F5F8093830320918403822F9927782F87 |
:10D2D0006627842F9927682B792B809181068130CE |
:10D2E00049F47370CB018050924063E070E00E947B |
:10D2F0004D7A17C0823061F47770CB018050944032 |
:10D3000066E070E00E944D7A2695269526950BC022 |
:10D31000737068567140CB0177FD0196BC0175951D |
:10D32000679526952695022F11270F7010700F5FB5 |
:10D330001F4F0D30110508F082C07801E00EF11E7C |
:10D34000F701E65DF74F808191819B01281B390B26 |
:10D35000C90137FF03C0909581959F4F069704F54B |
:10D36000E091C406EE2351F0FF27EE0FFF1FE65DAC |
:10D37000F74F808191818436910594F480918E02DB |
:10D38000883C30F480918E02865F80938E0208C0C4 |
:10D3900088EC80938E0280916F008F7D80936F0068 |
:10D3A000F701E65DF74F808191819C01220F331FC9 |
:10D3B000280F391F260F371F37FF02C02D5F3F4F41 |
:10D3C000E901D595C795D595C795CB0101968C17E1 |
:10D3D0009D0714F4219706C061507040C617D70707 |
:10D3E0000CF4219680918E02843BD0F0F701E65D2B |
:10D3F000F74F80819181FE01E81BF90BCF0163E0BB |
:10D4000070E00E944D7ACB01880F991F860F971FFD |
:10D4100020E738E0E20EF31EF7019183808307C016 |
:10D4200020E738E0E20EF31EF70111821082000FB0 |
:10D43000111F065D174FF801D183C08311C002315F |
:10D44000110570F081E08093A5010AC081E080930E |
:10D45000A501109283031092850384E480938103D5 |
:10D4600080918303803198F080918503882331F483 |
:10D470008091A501882311F480933F0110928303CA |
:10D48000109285031092820384E480938103E6E086 |
:10D49000CDB7DEB70C94C57ACF93FC0197FF05C0DA |
:10D4A000CFEFF095E195FF4F01C0C1E028E631E0F4 |
:10D4B000CF01B9010E944D7AFC018B35910554F0E2 |
:10D4C0008B5590408A35910538F484EB90E08E1BA3 |
:10D4D0009F0BFC0141E00DC0CF01855B90408A3578 |
:10D4E000910518F4E45BF04003C02E1B3F0BF901DB |
:10D4F0004FEFEE0FFF1FE658F84F259134918C2F18 |
:10D50000992787FD9095289FB001299F700D389F1E |
:10D51000700D1124842F992787FD9095689FA00195 |
:10D52000699F500D789F500D1124CA01CF91089525 |
:10D530002AE530E0281B390BC9010E944C6A089586 |
:10D54000CF93DF9380E00E9420718091230190911E |
:10D5500024016AE070E00E944D7A9F938F9380913E |
:10D560002301909124016AE070E00E944D7A7F933C |
:10D570006F9386E698E09F938F93C3E1D1E7DF93A3 |
:10D58000CF93E091B603F091B70309952DB73EB75D |
:10D59000285F3F4F2DBF8091A001882361F186E075 |
:10D5A0000E9420718091920199279F938F9380917F |
:10D5B0002809909129096AE070E00E94397A7F93E6 |
:10D5C0006F938FED90E09F938F93809110099091CE |
:10D5D00011099F938F938FE698E09F938F93DF932A |
:10D5E000CF93E091B603F091B70309958DB79EB73D |
:10D5F0000C968DBF12C086E00E9420718DE798E0E6 |
:10D600009F938F93DF93CF93E091B603F091B7038D |
:10D6100009950F900F900F900F9080916E038823C3 |
:10D62000F9F086E00E94207180916E0399279F9304 |
:10D630008F9384E898E09F938F93DF93CF93E0914B |
:10D64000B603F091B70309952DB73EB72A5F3F4F58 |
:10D650002DBF80918D02882319F083E58093B3015B |
:10D6600080E10E9420718091B5019091B6016CE338 |
:10D6700070E00E94397A9F938F938091B5019091C9 |
:10D68000B6016CE370E00E94397A7F936F938091CA |
:10D69000A2099091A3099F938F9380E998E09F93AB |
:10D6A0008F93C3E1D1E7DF93CF93E091B603F0917D |
:10D6B000B7030995809107092DB73EB7265F3F4F05 |
:10D6C0002DBF80FF29C08AE10E9420718091400116 |
:10D6D00099279F938F938091880290918902A091BE |
:10D6E0008A02B0918B02BC01CD0124E630E040E01B |
:10D6F00050E00E94827A3F932F938DE998E09F93A8 |
:10D700008F93DF93CF93E091B603F091B703099520 |
:10D710008DB79EB708968DBF8091B201882391F096 |
:10D720008AE10E94207184EA98E09F938F93DF93AF |
:10D73000CF93E091B603F091B70309950F900F9046 |
:10D740000F900F90DF91CF910895CF93DF9380E0FA |
:10D750000E9420718091A907992787FD90959F933A |
:10D760008F9380919A07992787FD90959F938F9328 |
:10D7700080918B07992787FD90959F938F93809138 |
:10D780007C07992787FD90959F938F9386EA98E071 |
:10D790009F938F93C3E1D1E7DF93CF93E091B603DB |
:10D7A000F091B703099580E10E9420712DB73EB733 |
:10D7B000245F3F4F2DBF8091E507992787FD909506 |
:10D7C0009F938F938091D607992787FD90959F937C |
:10D7D0008F938091C707992787FD90959F938F938B |
:10D7E0008091B807992787FD90959F938F9386EB3B |
:10D7F00098E09F938F93DF93CF93E091B603F091DE |
:10D80000B7030995809159062DB73EB7245F3F4F66 |
:10D810002DBF853098F480E10E94207186EC98E05D |
:10D820009F938F93DF93CF93E091B603F091B7036B |
:10D8300009950F900F900F900F9018C08730B0F49B |
:10D8400088E10E9420718FED90E09F938F9387ED88 |
:10D8500098E09F938F93DF93CF93E091B603F0917D |
:10D86000B70309958DB79EB706968DBFDF91CF910F |
:10D8700008950F931F9380E00E9420712AE030E00A |
:10D8800080919E0990919F09B9010E94397A9F93D6 |
:10D890008F9380919E0990919F09B9010E94397AD6 |
:10D8A0007F936F938091230190912401B9010E948D |
:10D8B0004D7A9F938F938091230190912401B90118 |
:10D8C0000E944D7A7F936F9380EE98E09F938F93A1 |
:10D8D00003E111E71F930F93E091B603F091B703B3 |
:10D8E000099580E10E9420718DB79EB70C968DBF7F |
:10D8F0008091A2099091A3099F938F938091A00991 |
:10D900009091A1099F938F9382EF98E09F938F93BB |
:10D910001F930F93E091B603F091B70309958DB76C |
:10D920009EB708968DBF1F910F910895EF92FF92B9 |
:10D930000F931F9380E00E9420718FEDE82EF12C51 |
:10D94000FF92EF9280918F01909190019F938F931E |
:10D9500080916D0399279F938F938EEF98E09F930B |
:10D960008F9303E111E71F930F93E091B603F091BA |
:10D97000B703099580E10E9420718DB79EB70A9682 |
:10D980008DBF80916B0399279F938F93FF92EF92A6 |
:10D9900080916C0399279F938F9381E199E09F93E6 |
:10D9A0008F931F930F93E091B603F091B7030995FE |
:10D9B0008DB79EB70A968DBF1F910F91FF90EF9084 |
:10D9C00008950F931F9380E00E94207184E299E0F4 |
:10D9D0009F938F9303E111E71F930F93E091B60399 |
:10D9E000F091B703099580E10E9420710F900F908C |
:10D9F0000F900F9083E399E09F938F931F930F9362 |
:10DA0000E091B603F091B70309950F900F900F9036 |
:10DA10000F901F910F9108950F931F9380E00E9424 |
:10DA2000207181E499E09F938F9303E111E71F93A5 |
:10DA30000F93E091B603F091B703099580E10E943E |
:10DA400020710F900F900F900F9080E599E09F93B9 |
:10DA50008F931F930F93E091B603F091B70309954D |
:10DA60000F900F900F900F901F910F9108951F939B |
:10DA7000CF93DF93182F8091A509C3E1D1E78823C5 |
:10DA800091F40E9420718EE599E09F938F93DF932C |
:10DA9000CF93E091B603F091B70309950F900F90E3 |
:10DAA0000F900F9016C080E00E94207185EA99E0E7 |
:10DAB0009F938F938CE699E09F938F93DF93CF93FF |
:10DAC000E091B603F091B70309958DB79EB706961E |
:10DAD0008DBF80919703C3E1D1E7882399F480E15A |
:10DAE0000E94207183E799E09F938F93DF93CF93F8 |
:10DAF000E091B603F091B70309950F900F900F9046 |
:10DB00000F9089C080E10E9420718091A601992721 |
:10DB10009F938F938EE799E09F938F93DF93CF939B |
:10DB2000E091B603F091B70309958DB79EB70696BD |
:10DB30008DBF80919A038823E9F088E10E942071CB |
:10DB400080919A0399279F938F9380919B039927A4 |
:10DB50009F938F9387E899E09F938F93DF93CF9361 |
:10DB6000E091B603F091B70309958DB79EB708967B |
:10DB70008DBF12C088E10E9420718FE899E09F93C9 |
:10DB80008F93DF93CF93E091B603F091B70309959C |
:10DB90000F900F900F900F9080918603882331F0A3 |
:10DBA0008EE10E94207185E999E005C08EE10E9416 |
:10DBB000207188E999E09F938F93DF93CF93E09151 |
:10DBC000B603F091B70309950F900F900F900F9047 |
:10DBD0001F3251F49091A601809197039817D8F4C1 |
:10DBE0009F5F9093A60109C01F3459F48091A6014C |
:10DBF000823088F081508093A60181E08093860373 |
:10DC00000AC01F3141F48091A601882321F080933E |
:10DC1000980310928603DF91CF911F9108951F936F |
:10DC2000CF93DF93182F8091A509C3E1D1E7882313 |
:10DC300091F40E9420718BE999E09F938F93DF9379 |
:10DC4000CF93E091B603F091B70309950F900F9031 |
:10DC50000F900F9016C080E00E94207185EA99E035 |
:10DC60009F938F9389EA99E09F938F93DF93CF934C |
:10DC7000E091B603F091B70309958DB79EB706966C |
:10DC80008DBF80919703882361F480E10E94207109 |
:10DC900080EB99E09F938F9383E191E79F938F931C |
:10DCA0000FC080912609C3E1D1E7833099F080E16C |
:10DCB0000E9420718BEB99E09F938F93DF93CF931A |
:10DCC000E091B603F091B70309950F900F900F9074 |
:10DCD0000F908AC080E10E9420718091A70199274E |
:10DCE0009F938F9386EC99E09F938F93DF93CF93CD |
:10DCF000E091B603F091B70309958DB79EB70696EC |
:10DD00008DBF80919A038823E9F088E10E942071F9 |
:10DD100080919A0399279F938F9380919B039927D2 |
:10DD20009F938F9380ED99E09F938F93DF93CF9391 |
:10DD3000E091B603F091B70309958DB79EB70896A9 |
:10DD40008DBF12C088E10E94207188ED99E09F93F9 |
:10DD50008F93DF93CF93E091B603F091B7030995CA |
:10DD60000F900F900F900F9080918703882331F0D0 |
:10DD70008EE10E9420718EED99E005C08EE10E9437 |
:10DD8000207181EE99E09F938F93DF93CF93E09181 |
:10DD9000B603F091B70309950F900F900F900F9075 |
:10DDA0001F3251F49091A701809197039817E0F4E6 |
:10DDB0009F5F9093A70109C01F3459F48091A70178 |
:10DDC000823090F081508093A70181E08093870397 |
:10DDD0000BC01F3149F48091A701882329F0806886 |
:10DDE0008093980310928703DF91CF911F9108953C |
:10DDF0000F931F93CF93DF938091A001C3E1D1E7ED |
:10DE0000882309F47DC080E00E942071809125095B |
:10DE100099279F938F938091270999279F938F9399 |
:10DE200084EE99E09F938F938E01DF93CF93E091DF |
:10DE3000B603F091B70309958DB79EB708968DBFCD |
:10DE400080912609833031F48CE00E94207183EFA9 |
:10DE500099E005C08CE00E94207188EF99E09F93C3 |
:10DE60008F93DF93CF93E091B603F091B7030995B9 |
:10DE70000F900F900F900F908091240981FF12C096 |
:10DE80008CE00E9420718DEF99E09F938F931F93F8 |
:10DE90000F93E091B603F091B70309950F900F909F |
:10DEA0000F900F9080E10E9420718091920199273C |
:10DEB0009F938F938FED90E09F938F9380912A098A |
:10DEC00090912B099F938F93809128099091290914 |
:10DED0006AE070E00E94397A7F936F9382E09AE063 |
:10DEE0009F938F9383E191E79F938F93E091B60384 |
:10DEF000F091B70309958DB79EB70C968DBF12C0F0 |
:10DF000082E00E94207185E19AE09F938F93DF93D6 |
:10DF1000CF93E091B603F091B70309950F900F905E |
:10DF20000F900F90DF91CF911F910F910895CF9394 |
:10DF3000C82F209188032093890399278F32910558 |
:10DF4000E1F0803391051CF44F9779F027C08F34AE |
:10DF50009105D9F08F38910509F586E0289FF001E9 |
:10DF60001124E05DF74F849117C086E0289FF001EF |
:10DF70001124EF5CF74F84910FC086E0289FF001D9 |
:10DF80001124EE5CF74F849107C086E0289FF001D2 |
:10DF90001124ED5CF74F849180938803909188035E |
:10DFA000809189039813C0E08091A801282F33271E |
:10DFB0008F5F8093A80120FD02C0CF3089F0C0930D |
:10DFC0008A030E9426719091880386E0989FF00151 |
:10DFD0001124EC5CF74F259134918C2FF9010995B0 |
:10DFE00080E090E0CF91089510929F0910929E09D1 |
:10DFF0001092A3091092A2091092A1091092A009EF |
:10E000001092A40982E390E00E94681690938C031A |
:10E0100080938B0308959927FC0124E0EE0FFF1FE6 |
:10E020002A95E1F7E81BF90BEB58F84F95819F3FD4 |
:10E0300019F480E090E00895993C18F4892F99270D |
:10E040000895808182FF07C08AE0989FC001112453 |
:10E05000885097400895892F99270895A0E0B0E04F |
:10E06000E4E3F0E70C94A67A80918B0390918C0303 |
:10E070000E947116882309F4CFC080918B03909180 |
:10E080008C03C29690938C0380938B03C0E0D0E006 |
:10E090007E01BB247FEFC72E8091A4098E3F21F41F |
:10E0A00081E08093B20104C08F3F11F4B092B201BD |
:10E0B000DD2405E717E0F801838187FF17C0B394DB |
:10E0C0008581893C30F08D2D0E940B70C80FD91FBF |
:10E0D00002C0C80FD11DF8018181E80EF11C8681B4 |
:10E0E000C81610F0C82E02C01092B201D394015F7E |
:10E0F0001F4FFBE0FD15F8F6C092A409EF2841F58B |
:10E100002091910330919203409193035091940395 |
:10E11000BB27A52F942F832F9093900380938F0379 |
:10E12000AA27BB27281B390B4A0B5B0BCE01AA275A |
:10E13000BB27280F391F4A1F5B1F20939103309381 |
:10E1400092034093930350939403C5E0D0E013C02F |
:10E1500080918F03909190038C179D0718F4C81B32 |
:10E16000D90B02C0C0E0D0E08B2D9927880F991FF2 |
:10E17000C80FD91F2596D0939F09C0939E09CF3F02 |
:10E18000D10578F480912301909124018C9F900116 |
:10E190008D9F300D9C9F300D1124C90164E670E005 |
:10E1A00013C0CE019695879596958795209123016A |
:10E1B00030912401289FA001299F500D389F500DB8 |
:10E1C0001124CA0169E170E00E94397A7093A109B3 |
:10E1D0006093A00980918D0390918E038C0F9D1FF9 |
:10E1E00090938E0380938D0352E0813D9507A0F0BC |
:10E1F0002091A2093091A3092F5F3F4F805D92408B |
:10E20000E2E0813D9E07C0F790938E0380938D03DB |
:10E210003093A3092093A209E9E0CDB7DEB70C94AF |
:10E22000C27A0895089590919F03933240F4E92FA4 |
:10E23000FF27E155F64F80839F5F90939F030895DA |
:10E24000833218F48D5F80939F03089590E2E2EB90 |
:10E25000F9E08FE19193815087FFFCCF0895CF9330 |
:10E26000CFB723E031E0F8948091C9008F77809395 |
:10E27000C9008091C9008F7B8093C9008091C9003B |
:10E280008F7D8093C900832F99278093CD002093A1 |
:10E29000CC008091C80082608093C80088E18093A0 |
:10E2A000C9008091CA008F778093CA008091CA000C |
:10E2B0008F7B8093CA008091CA0080628093CA00DD |
:10E2C0008091CA0080618093CA008091CA008860F2 |
:10E2D0008093CA008091C90084608093C9008091B6 |
:10E2E000CA0084608093CA008091CA0082608093D3 |
:10E2F000CA008091C80087FF03C08091CE00F9CF8B |
:10E300008091C90080688093C9008091C9008064B1 |
:10E310008093C9000E942671CFBFCF910895282F06 |
:10E3200099278F709070892B31F4209580919E03EE |
:10E33000822B80939E0308958091AF01882309F476 |
:10E340004BC08091550285FD04C08091B3018823A4 |
:10E3500081F082E98093AF0983E28093B0098091D4 |
:10E36000B301882309F485E58093B1091092B301C4 |
:10E3700002C08093AF098091B0018F3071F4809119 |
:10E380009E030E94976F882341F081E98093AF0933 |
:10E390008093B00981E38093B1091092AF0180911D |
:10E3A000C80085FFFCCF8091C9008F7E8093C90093 |
:10E3B0008091C9008E7F8093C9008091AF09882326 |
:10E3C00011F48EEF01C08EE78093CE0080919E0302 |
:10E3D0008093B00110929E0308951F920F920FB682 |
:10E3E0000F9211248F939F93EF93FF939091AF011E |
:10E3F000992309F040C08091A003882361F48091A3 |
:10E40000AF09882311F483E003C0813999F481E0D6 |
:10E410008093A0030FC0833099F48091AF098823C3 |
:10E4200049F09093AF098091C9008E7F8093C90015 |
:10E430008EEF1EC08091C90081608093C9000EC01C |
:10E44000833261F48091C9008E7F8093C9008FEF81 |
:10E450008093CE0081E08093AF0118C08091A0032B |
:10E46000E82FFF27E155F64F8F5F8093A00380814F |
:10E470008093CE000BC01092A0031092A1031092C3 |
:10E48000A2038091C90080618093C900FF91EF9140 |
:10E490009F918F910F900FBE0F901F901895EF9244 |
:10E4A000FF920F931F93CF93DF937C018B01EA01BF |
:10E4B000452B39F0F80181918F01F70109952197DA |
:10E4C000C9F7E6E0CDB7DEB70C94C57AEF92FF92BC |
:10E4D0000F931F93CF93DF937C018B01EA01452BB0 |
:10E4E00041F0F8010F5F1F4F8491F70109952197C3 |
:10E4F000C1F7E6E0CDB7DEB70C94C57A0F931F9352 |
:10E50000CF938C01C62F161634F480E2F8010995DA |
:10E51000C1501C16D4F3CF911F910F9108950F9302 |
:10E520001F93CF938C01C62F161634F480E3F801A5 |
:10E530000995C1501C16D4F3CF911F910F910895E6 |
:10E54000A5E3B0E0E6EAF2E70C949D7A2E96EEADF4 |
:10E55000FFAD2E9788249924540180919D03882330 |
:10E5600021F42C961FAE1EAE2C97AEE44A2E512CF1 |
:10E570004C0E5D1E6F01B60105C0153239F00894CE |
:10E58000C11CD11CF60114911123B9F7A601461B39 |
:10E59000570B31F02C968EAD9FAD2C970E94667272 |
:10E5A000112309F46AC20894C11CD11CFF24FDA6E2 |
:10E5B000FCA67FEFE72EF9A6F6010894C11CD11C3A |
:10E5C0001491153721F0812F80628837B1F4F0FE65 |
:10E5D0000AC0F20124E030E0420E531E8080918098 |
:10E5E000A280B3800AC0F20142E050E0440E551E02 |
:10E5F000808191814C01AA24BB24103221F489A589 |
:10E600008823D1F61DC0133219F458E0F52AD4CF6F |
:10E610001A3211F01D3291F41A3259F4F20182E0EB |
:10E6200090E0480E591EE081ECA7EE232CF6E19510 |
:10E63000ECA790E1F92AAFEDFA22BECF1B3211F41C |
:10E6400019A7BACF1E32C1F5F6010894C11CD11C1E |
:10E6500014911A3279F4F20122E030E0420E531E96 |
:10E66000408151813FEF4F3F530714F44FEF5FEF6D |
:10E67000E42EA2CF40E050E0812F80538A30A0F4F6 |
:10E68000CA0163E0880F991F6A95E1F7840F951F0F |
:10E69000480F591F410F511D40535040F601089437 |
:10E6A000C11CD11C1491E8CF8FEF4F3F580714F4D1 |
:10E6B0004FEF5FEFE42E85CF103329F4F4FC7CCFCD |
:10E6C00090E2F92A79CF812F81538930D8F440E044 |
:10E6D00050E0CA0133E0880F991F3A95E1F7840FA3 |
:10E6E000951F480F591F410F511D40535040F601CF |
:10E6F0000894C11CD11C1491812F80538A3048F397 |
:10E700004CA75FCF183619F4A4E0FA2A55CF1C366F |
:10E7100019F4B1E0FB2A50CF133661F43E0108949E |
:10E72000611C711CF20122E030E0420E531E808118 |
:10E7300089833CC1143421F0143611F0193651F597 |
:10E74000143411F431E0F32AF0FE0AC0F20144E07F |
:10E7500050E0440E551E80809180A280B3800CC092 |
:10E76000F20182E090E0480E591E808191814C01B7 |
:10E77000AA2497FCA094BA2CB7FE0AC0B094A09427 |
:10E7800090948094811C911CA11CB11C8DE289A7DE |
:10E790000AE06FC01F3411F01F3631F41F3411F43A |
:10E7A00091E0F92A08E064C0103779F4F201A2E0A0 |
:10E7B000B0E04A0E5B1E808191814C01AA24BB24EB |
:10E7C00000E1B0E4FB2A18E753C01337C1F5F201AA |
:10E7D00022E030E0420E531E6080718061147104AB |
:10E7E00089F43E010894611C711C88E289838EE6DD |
:10E7F000F301818385E78B838CE68C838D8389E2AB |
:10E800008E831F82E7FC13C08E2D992787FD90957C |
:10E81000AC0160E070E0C3010E946A78009729F0C3 |
:10E82000382E3618E3140CF0C3C03E2CC1C0F301DF |
:10E8300001900020E9F731973E2E3618B9C0153502 |
:10E8400011F0153731F4153511F4F1E0FF2A0AE023 |
:10E850000FC0183519F0183709F0A0C000E1F3FE19 |
:10E8600007C081149104A104B10411F020E4F22A3C |
:10E8700019A6EDA6E7FC02C03FEDF32229E2622EC5 |
:10E88000712C6C0E7D1E81149104A104B10421F43D |
:10E890004DA5442309F47BC0802F9927AA27BB27C5 |
:10E8A0008EA79FA7A8ABB9AB202E332490E0891682 |
:10E8B00090E0990691E0A90690E0B90648F0C501FC |
:10E8C000B4012EA53FA548A959A90E94607A17C096 |
:10E8D000AFEF8A169104A104B10449F040F0C401DD |
:10E8E000B1010E94397A9B014427552708C0882D21 |
:10E8F000602F0E942D7A282F3327442755272AABD3 |
:10E900003BAB4CAB5DAB0A3059F48AA9880F880F3A |
:10E91000880F9AA9990F890F382D381B832F10C0A3 |
:10E92000003139F48AA98295807F482D481B842FB5 |
:10E9300007C08AA9880F880F880F582D581B852F6C |
:10E9400090E02EA53FA548A959A982169306A406D2 |
:10E95000B50608F091E08AA89BA8ACA8BDA88A30AB |
:10E9600010F4805D04C0895A183509F48F7DD301F5 |
:10E970008E933D01992309F099CF083041F4F3FEBD |
:10E9800006C0803321F080E3FD0182933F01CE0178 |
:10E990000196382E3618F8E23F0E0BC0112309F409 |
:10E9A0006CC03E010894611C711C198391E0392EE2 |
:10E9B00019A6032D2DA4231827FC222489A588231A |
:10E9C00011F00F5F02C0F6FC0E5F020DEF2CFF246A |
:10E9D000C70180739070892B49F48CA5801B682F28 |
:10E9E0002C968EAD9FAD2C970E947E7289A58823B0 |
:10E9F00031F041E050E0BE01675D7F4F0AC0E6FEA6 |
:10EA00000EC080E38AA71BA742E050E0BE01665D0E |
:10EA10007F4F2C968EAD9FAD2C970E944F72C701F1 |
:10EA200080739070809749F48CA5801B682F2C967A |
:10EA30008EAD9FAD2C970E948F72622D2C968EAD5D |
:10EA40009FAD2C970E948F72832D992787FD9095FB |
:10EA5000AC01B3012C968EAD9FAD2C970E944F72E6 |
:10EA6000E4FE89CD2CA5201B2CA7622F2C968EAD01 |
:10EA70009FAD2C970E947E727ECDE2E1CB5C0C9420 |
:10EA8000B97A2FB740E0F894E0E0F0E081E28093BB |
:10EA900057009491E2E0F0E0809357003491E4E075 |
:10EAA000F0E08093570084912FBF9E3199F436395E |
:10EAB00041F4893011F441E00DC08A3059F442E04C |
:10EAC00009C0373939F4863011F443E003C085308A |
:10EAD00009F444E0842F992708959FB7F894809112 |
:10EAE000C900877F8093C9008091C9008F7E809381 |
:10EAF000C9008091C9008F778093C9008091C900B7 |
:10EB00008F7B8093C9008091C9008F7D8093C9005D |
:10EB10009FBF08951F93CF93DF93182F80919D037C |
:10EB2000882309F4A0C08091AE01181709F49BC096 |
:10EB300080919C03882321F40E94417580939C035B |
:10EB400082ED91E090933E0180933D0181EC9AE04B |
:10EB50009F938F93C1E9D2E1DF93CF93E091B60306 |
:10EB6000F091B70309950F900F900F900F90812FA0 |
:10EB7000992784309105F1F0853091051CF4892B9B |
:10EB800051F00CC086309105D9F086309105ACF07B |
:10EB9000089741F12AC08DEB9AE002C084EB9AE01D |
:10EBA0009F938F93DF93CF93E091B603F091B703D8 |
:10EBB000099527C08FEA9AE0F3CF87EA9AE0F0CF71 |
:10EBC0008FE99AE09F938F93DF93CF93E091B60301 |
:10EBD000F091B703099588ED91E090933E01809301 |
:10EBE0003D010FC08AE99AE0DBCF8EEC9AE09F935B |
:10EBF0008F93DF93CF93E091B603F091B70309951C |
:10EC000010E00F900F900F900F9080919C03843034 |
:10EC100011F0823099F40E946D75812F81508330FC |
:10EC200018F40E949E681DC0143019F40E942F71C0 |
:10EC300018C01830B1F40E94117113C0112389F06B |
:10EC400084EE9AE09F938F9381E992E19F938F9353 |
:10EC5000E091B603F091B70309950F900F900F90D4 |
:10EC60000F901093AE01DF91CF911F9108950F93F4 |
:10EC70001F93082F81E080939D034091AD01EAE44A |
:10EC8000FAE020E030E05FE4849199272F5F3F4F66 |
:10EC9000829FB001839F700D929F700D11244627B3 |
:10ECA0005150319657FFF0CF4093AD01E2E2FAE0C8 |
:10ECB00020E030E057E2849199272F5F3F4F829FF9 |
:10ECC000B001839F700D929F700D11244627515003 |
:10ECD000319657FFF0CF4093AD0180919C0388237C |
:10ECE00021F40E94417580939C0380EA92E79093FF |
:10ECF000B7038093B6038091AD01833459F088E166 |
:10ED000090E029E20FB6F894A895809360000FBEBA |
:10ED100020936000063091F08FEF9AE09F938F93DD |
:10ED200081E992E19F938F93E091B603F091B7034D |
:10ED300009950F900F900F900F90EECF0E94F10564 |
:10ED400085E690E09F938F9386E090E09F938F936A |
:10ED500082E090E09F938F93809103016AE00E948C |
:10ED60002D7A892F99279F938F93809103010E9479 |
:10ED70002D7A99279F938F938CE19BE09F938F939C |
:10ED800001E912E11F930F93E091B603F091B703ED |
:10ED900009958AE49AE09F938F931F930F93E091D4 |
:10EDA000B603F091B703099582E29AE09F938F939F |
:10EDB0001F930F93E091B603F091B70309950E945A |
:10EDC000F10583EC8093810080916F0080628093D5 |
:10EDD0006F008DB79EB746968DBF1F910F91089516 |
:10EDE0008091C2068D3338F08091240987FD03C0DD |
:10EDF0008CE38093C20680917006882331F08055A1 |
:10EE0000853618F08FE780937006089580919D03F2 |
:10EE1000882309F482C08091B30381508093B303A7 |
:10EE2000882309F069C089E18093B3038091C20609 |
:10EE30008E3338F08091240987FD03C08DE38093E1 |
:10EE4000C20680918E028238A0F580915602909180 |
:10EE50005702805D974020F08091A409843620F409 |
:10EE60001092B5031092B4032091B4033091B5030E |
:10EE700021153105B1F1C90101979093B503809334 |
:10EE8000B403419798F18091240984FF2FC08091A9 |
:10EE900054028460809354028091320987FF26C017 |
:10EEA00080919B03882311F13093B5032093B40321 |
:10EEB0001DC080918E02853BC8F09091C20684E10E |
:10EEC000989FC001112440962091B4033091B5035E |
:10EED0002817390730F42F5F3F4F3093B503209345 |
:10EEE000B403809154028B7F809354028091AD01D2 |
:10EEF000833411F010929D038091B101882321F099 |
:10EF000081508093B10108958BE48093B101809189 |
:10EF1000AE01843011F40E949C7108951F920F92EB |
:10EF20000FB60F9211242F933F934F935F936F93DC |
:10EF30007F938F939F93AF93BF93EF93FF93209112 |
:10EF4000CE008091BF018823B1F02093C60080914C |
:10EF5000BF01823029F52F3F19F58FEF94E3ACE024 |
:10EF6000B0E0C297A109B109B7FFFBCF8091F903C7 |
:10EF70008093CE0015C09091AE01892F81508330CF |
:10EF800020F4822F0E94F5680BC0943021F4822F68 |
:10EF90000E948F7105C0983019F4822F0E9412715F |
:10EFA000FF91EF91BF91AF919F918F917F916F9161 |
:10EFB0005F914F913F912F910F900FBE0F901F9037 |
:10EFC0001895002422273327442751E0BB27EE273A |
:10EFD000FF27A0E1660F771F881F991F001C221FC3 |
:10EFE000331F441F660F771F881F991F001C221FA5 |
:10EFF000331F441F2AF4050E2B1F3E1F4F1F04C052 |
:10F00000051A2B0B3E0B4F0B550FBB1FEE1F587FE6 |
:10F01000556047FD5250AA95E9F6E695B795579584 |
:10F02000E695B7955795852F9B2F0895222733276F |
:10F0300041E0552768E0880F991F221F331F880F72 |
:10F04000991F221F331F1AF4240F351F02C0241BDF |
:10F05000350B440F551F487F456037FD42506A9578 |
:10F0600051F75695479556954795842F0895AA27A9 |
:10F0700097FF04C0809590958A1F9A1F77FF04C060 |
:10F08000609570956A1F7A1F669F9001779FA00117 |
:10F09000679F300D411D5A1F300D411D5A1F889F1B |
:10F0A000F001999F2E0F3F1F401D511D899F300D6C |
:10F0B000411D5A1F300D411D5A1FCA01B9011124AB |
:10F0C00080CFFB01DC0102C005900D924150504001 |
:10F0D000D8F70895FC014150504030F001900616D9 |
:10F0E000D1F73197CF010895882799270895A0E097 |
:10F0F000B0E0EDE7F8E70C94A57A6C017B01EA013A |
:10F10000590121978FEFCF3FD80789F086010894E6 |
:10F11000C11CD11CC7010894E11CF11CF501099523 |
:10F12000F80180832197FFEFCF3FDF0779F7EAE00F |
:10F13000CDB7DEB70C94C17ACF92DF92EF92FF92F7 |
:10F140000F931F937C016B01FB010995082FC701E9 |
:10F150000196F6010995182FC8011F910F91FF9094 |
:10F16000EF90DF90CF900895A0E0B0E0EAEBF8E7F1 |
:10F170000C94A77A8C017B01EA01690121978FEF3A |
:10F18000CF3FD80771F0F70121917F01C8010F5FD0 |
:10F190001F4F622FF60109952197FFEFCF3FDF0741 |
:10F1A00091F7E8E0CDB7DEB70C94C37ACF92DF9247 |
:10F1B000EF92FF920F931F936C018B017A01FA017A |
:10F1C0000995812F9927682FC6010196F7010995A6 |
:10F1D0001F910F91FF90EF90DF90CF9008955058BE |
:10F1E000BB27AA270ED0E0C0D1D030F0D6D020F077 |
:10F1F00031F49F3F11F41EF4C6C00EF4E095E7FB16 |
:10F20000BCC0E92FE2D080F3BA1762077307840706 |
:10F21000950718F071F49EF5FAC00EF4E0950B2EE8 |
:10F22000BA2FA02D0B01B90190010C01CA01A00158 |
:10F230001124FF27591B99F0593F50F4503E68F1B3 |
:10F240001A16F040A22F232F342F4427585FF3CFF4 |
:10F25000469537952795A795F0405395C9F77EF4C5 |
:10F260001F16BA0B620B730B840BBAF09150A1F00E |
:10F27000FF0FBB1F661F771F881FC2F70EC0BA0F94 |
:10F28000621F731F841F48F4879577956795B7951C |
:10F29000F7959E3F08F0B3CF9395880F08F0992714 |
:10F2A000EE0F97958795089598D088F09F5790F026 |
:10F2B000B92F9927B751A0F0D1F0660F771F881F9B |
:10F2C000991F1AF0BA95C9F712C0B13081F09FD0DA |
:10F2D000B1E008959CC0672F782F8827B85F39F078 |
:10F2E000B93FCCF3869577956795B395D9F73EF4FA |
:10F2F00090958095709561957F4F8F4F9F4F0895A2 |
:10F30000E89409C097FB3EF49095809570956195BF |
:10F310007F4F8F4F9F4F9923A9F0F92F96E9BB2775 |
:10F320009395F695879577956795B795F111F8CFF1 |
:10F33000FAF4BB0F11F460FF1BC06F5F7F4F8F4F5C |
:10F340009F4F16C0882311F096E911C0772321F052 |
:10F350009EE8872F762F05C0662371F096E8862FEA |
:10F3600070E060E02AF09A95660F771F881FDAF741 |
:10F37000880F9695879597F9089597F99F6780E884 |
:10F3800070E060E008959FEF80EC089500240A94F7 |
:10F390001616170618060906089500240A94121670 |
:10F3A0001306140605060895092E0394000C11F4A3 |
:10F3B000882352F0BB0F40F4BF2B11F460FF04C050 |
:10F3C0006F5F7F4F8F4F9F4F089557FD9058440FA9 |
:10F3D000551F59F05F3F71F04795880F97FB991FB4 |
:10F3E00061F09F3F79F08795089512161306140671 |
:10F3F000551FF2CF4695F1DF08C0161617061806FE |
:10F40000991FF1CF86957105610508940895E894D8 |
:10F41000BB2766277727CB0197F90895629FD00114 |
:10F42000739FF001829FE00DF11D649FE00DF11DBF |
:10F43000929FF00D839FF00D749FF00D659FF00D6E |
:10F440009927729FB00DE11DF91F639FB00DE11D5B |
:10F45000F91FBD01CF0111240895991B79E004C063 |
:10F46000991F961708F0961B881F7A95C9F7809503 |
:10F470000895AA1BBB1B51E107C0AA1FBB1FA617FB |
:10F48000B70710F0A61BB70B881F991F5A95A9F74D |
:10F4900080959095BC01CD01089597FB092E072614 |
:10F4A0000AD077FD04D0E5DF06D000201AF470956D |
:10F4B00061957F4F0895F6F7909581959F4F089538 |
:10F4C000A1E21A2EAA1BBB1BFD010DC0AA1FBB1F68 |
:10F4D000EE1FFF1FA217B307E407F50720F0A21BDA |
:10F4E000B30BE40BF50B661F771F881F991F1A9447 |
:10F4F00069F760957095809590959B01AC01BD0171 |
:10F50000CF01089597FB092E05260ED057FD04D094 |
:10F51000D7DF0AD0001C38F45095409530952195DE |
:10F520003F4F4F4F5F4F0895F6F790958095709538 |
:10F5300061957F4F8F4F9F4F08952F923F924F922B |
:10F540005F926F927F928F929F92AF92BF92CF9273 |
:10F55000DF92EF92FF920F931F93CF93DF93CDB77C |
:10F56000DEB7CA1BDB0B0FB6F894DEBF0FBECDBFF4 |
:10F5700009942A88398848885F846E847D848C84C5 |
:10F580009B84AA84B984C884DF80EE80FD800C81CE |
:10F590001B81AA81B981CE0FD11D0FB6F894DEBFB1 |
:10F5A0000FBECDBFED010895EE0FFF1F0590F49142 |
:06F5B000E02D0994FFCFDD |
:10F5B60004035E0A010164FF010020FFFFC01FC0B3 |
:10F5C6001F0101F40101737373FF03007D0000C482 |
:10F5D60009C4099600134167696C65005175616439 |
:10F5E600726F0000000000000064000C09D20101E7 |
:10F5F600200B050000ECFF000204060708080807B8 |
:10F6060006040200FEFCFAF9F8F8F8F9FAFCFE0026 |
:10F616000204060708086440415A46553264646489 |
:10F626000A02969696960840403A1030380132FF04 |
:10F63600037F0090D0030090D0030032002064FFC7 |
:10F64600FF64200B0A0D0B0E100B0A0C0F0B11108A |
:10F65600FA2068010101010101F7FFFCFF70FF01BB |
:02F666000F642F |
:00000001FF |
/tags/V2.06e/Hex-Files/License.txt |
---|
0,0 → 1,69 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + * porting the sources to other systems or using the software on other systems (except hardware from www.mikrokopter.de) is not allowed |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// + POSSIBILITY OF SUCH DAMAGE. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
/tags/V2.06e/Hex-Files/WasIstWas.txt |
---|
0,0 → 1,14 |
+++++++++++++++++++++++++ |
+ Flight-Ctrl: |
+++++++++++++++++++++++++ |
Flight-Ctrl_MEGA1284_Vx_yy.hex |
Flight-Ctrl_MEGA644_Vx_yy.hex |
Aktuelle Firmware |
Wird per serielle Schnittstelle (durch den Bootloader) eingespielt |
Achtung: Die Programme für den ATMEGA1284 dürfen ausschliesslich per Bootloader, also seriell (MKUSB) eingespielt werden und NICHT per ISP |
Warning: do not program the ATMEGA1284 (FC2.1) via SPI. Only use the MKUSB and the Koptertool for update! |
/tags/V2.06e/License.txt |
---|
0,0 → 1,52 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
/tags/V2.06e/Settings.h |
---|
--- tags/V2.06e/Spektrum.c (nonexistent) |
+++ tags/V2.06e/Spektrum.c (revision 2469) |
@@ -0,0 +1,406 @@ |
+/*####################################################################################### |
+Decodieren eines RC Summen Signals oder Spektrum Empfänger-Satellit |
+#######################################################################################*/ |
+ |
+#include "Spektrum.h" |
+#include "main.h" |
+ |
+unsigned char SpektrumTimer = 0; |
+ |
+// Achtung: RECEIVER_SPEKTRUM_DX7EXP oder RECEIVER_SPEKTRUM_DX8EXP wird in der main.h gesetzt |
+#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP) |
+unsigned char s_excnt = 0; // Bitcounter for Spektrum-Expander |
+unsigned char s_exparity = 0; // Parity Bit for Spektrum-Expander |
+signed char s_exdata[11]; // Data for Spektrum-Expander |
+ |
+void s_update(unsigned char channel, signed int value) // Channel-Diff numbercrunching and finally assign new stickvalue to PPM_in |
+{ |
+ if(SenderOkay >= 180) PPM_diff[channel] = ((value - PPM_in[channel]) / 3) * 3; |
+ else PPM_diff[channel] = 0; |
+ PPM_in[channel] = value; |
+} |
+#endif |
+ |
+//############################################################################ |
+// USART1 initialisation from killagreg |
+void SpektrumUartInit(void) |
+//############################################################################ |
+ { |
+ // -- Start of USART1 initialisation for Spekturm seriell-mode |
+ // USART1 Control and Status Register A, B, C and baud rate register |
+ uint8_t sreg = SREG; |
+ |
+ uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 115200) - 1); |
+ |
+ // disable all interrupts before reconfiguration |
+ cli(); |
+ // disable RX-Interrupt |
+ UCSR1B &= ~(1 << RXCIE1); |
+ // disable TX-Interrupt |
+ UCSR1B &= ~(1 << TXCIE1); |
+ // disable DRE-Interrupt |
+ UCSR1B &= ~(1 << UDRIE1); |
+/* |
+ // set direction of RXD1 and TXD1 pins |
+ // set RXD1 (PD2) as an input pin |
+ PORTD |= (1 << PORTD2); |
+ DDRD &= ~(1 << DDD2); |
+ // set TXD1 (PD3) as an output pin |
+ PORTD |= (1 << PORTD3); |
+ DDRD |= (1 << DDD3); |
+*/ |
+ // USART0 Baud Rate Register |
+ // set clock divider |
+ UBRR1H = (uint8_t)(ubrr>>8); |
+ UBRR1L = (uint8_t)ubrr; |
+ // enable double speed operation |
+ UCSR1A |= (1 << U2X1); |
+ // enable receiver and transmitter |
+ //UCSR1B = (1<<RXEN1)|(1<<TXEN1); |
+ |
+ UCSR1B = (1<<RXEN1); |
+ // set asynchronous mode |
+ UCSR1C &= ~(1 << UMSEL11); |
+ UCSR1C &= ~(1 << UMSEL10); |
+ // no parity |
+ UCSR1C &= ~(1 << UPM11); |
+ UCSR1C &= ~(1 << UPM10); |
+ // 1 stop bit |
+ UCSR1C &= ~(1 << USBS1); |
+ // 8-bit |
+ UCSR1B &= ~(1 << UCSZ12); |
+ UCSR1C |= (1 << UCSZ11); |
+ UCSR1C |= (1 << UCSZ10); |
+ // flush receive buffer explicit |
+ while(UCSR1A & (1<<RXC1)) UDR1; |
+ // enable RX-interrupts at the end |
+ UCSR1B |= (1 << RXCIE1); |
+ // -- End of USART1 initialisation |
+ // restore global interrupt flags |
+ |
+ SREG = sreg; |
+ return; |
+ } |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Copyright (c) Rainer Walther |
+// + RC-routines from original MK rc.c (c) H&I |
+// + Useful infos from Walter: http://www.rcgroups.com/forums/showthread.php?t=714299&page=2 |
+// + only for non-profit use |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// |
+// 20080808 rw Modified for Spektrum AR6100 (PPM) |
+// 20080823 rw Add Spektrum satellite receiver on USART1 (644P only) |
+// 20081213 rw Add support for Spektrum DS9 Air-Tx-Module (9 channels) |
+// Replace AR6100-coding with original composit-signal routines |
+// |
+// --- |
+// Entweder Summensignal ODER Spektrum-Receiver anschließen. Nicht beides gleichzeitig betreiben! |
+// Binding is not implemented. Bind with external Receiver. |
+// Servo output J3, J4, J5 not serviced |
+// |
+// Anschuß Spektrum Receiver |
+// Orange: 3V von der FC (keinesfalls an 5V anschließen!) |
+// Schwarz: GND |
+// Grau: RXD1 (Pin 3) auf 10-Pol FC-Stecker |
+// |
+// --- |
+// Satellite-Reciever connected on USART1: |
+// |
+// DX7/DX6i: One data-frame at 115200 baud every 22ms. |
+// DX7se: One data-frame at 115200 baud every 11ms. |
+// byte1: unknown |
+// byte2: unknown |
+// byte3: and byte4: channel data (FLT-Mode) |
+// byte5: and byte6: channel data (Roll) |
+// byte7: and byte8: channel data (Nick) |
+// byte9: and byte10: channel data (Gier) |
+// byte11: and byte12: channel data (Gear Switch) |
+// byte13: and byte14: channel data (Gas) |
+// byte15: and byte16: channel data (AUX2) |
+// |
+// DS9 (9 Channel): One data-frame at 115200 baud every 11ms, alternating frame 1/2 for CH1-7 / CH8-9 |
+// 1st Frame: |
+// byte1: unknown |
+// byte2: unknown |
+// byte3: and byte4: channel data |
+// byte5: and byte6: channel data |
+// byte7: and byte8: channel data |
+// byte9: and byte10: channel data |
+// byte11: and byte12: channel data |
+// byte13: and byte14: channel data |
+// byte15: and byte16: channel data |
+// 2nd Frame: |
+// byte1: unknown |
+// byte2: unknown |
+// byte3: and byte4: channel data |
+// byte5: and byte6: channel data |
+// byte7: and byte8: 0xffff |
+// byte9: and byte10: 0xffff |
+// byte11: and byte12: 0xffff |
+// byte13: and byte14: 0xffff |
+// byte15: and byte16: 0xffff |
+// |
+// Each channel data (16 bit= 2byte, first msb, second lsb) is arranged as: |
+// |
+// Bits: F 0 C3 C2 C1 C0 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 |
+// |
+// 0 means a '0' bit |
+// F: 1 = indicates beginning of 2nd frame for CH8-9 (DS9 only) |
+// C3 to C0 is the channel number. 0 to 9 (4 bit, as assigned in the transmitter) |
+// D9 to D0 is the channel data (10 bit) 0xaa..0x200..0x356 for 100% transmitter-travel |
+// |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ |
+#define MIN_FRAMEGAP 68 // 7ms |
+#define MAX_BYTEGAP 3 // 310us |
+ |
+ |
+//############################################################################ |
+// Wird im UART-Interrupt aufgerufen |
+//############################################################################ |
+void SpektrumParser(unsigned char c) |
+{ |
+ static unsigned char Sync=0, FrameCnt=0, ByteHigh=0, ReSync=1, Frame2=0; |
+ unsigned int Channel, index = 0; |
+ signed int signal = 0, tmp; |
+ int bCheckDelay; |
+// c = UDR1; // get data byte |
+ if(ReSync == 1) |
+ { |
+ // wait for beginning of new frame |
+ ReSync = 0; |
+ SpektrumTimer = MIN_FRAMEGAP; |
+ FrameCnt = 0; |
+ Sync = 0; |
+ ByteHigh = 0; |
+ } |
+ else |
+ { |
+ if(!SpektrumTimer) bCheckDelay = 1; else bCheckDelay = 0;//CheckDelay(FrameTimer); |
+ if ( Sync == 0 ) |
+ { |
+ if(bCheckDelay) |
+ { |
+ // nach einer Pause von mind. 7ms erstes Sync-Character gefunden |
+ // Zeichen ignorieren, da Bedeutung unbekannt |
+ Sync = 1; |
+ FrameCnt ++; |
+ SpektrumTimer = MAX_BYTEGAP; |
+ } |
+ else |
+ { |
+ // Zeichen kam vor Ablauf der 7ms Sync-Pause |
+ // warten auf erstes Sync-Zeichen |
+ SpektrumTimer = MIN_FRAMEGAP; |
+ FrameCnt = 0; |
+ Sync = 0; |
+ ByteHigh = 0; |
+ } |
+ } |
+ else if((Sync == 1) && !bCheckDelay) |
+ { |
+ // zweites Sync-Character ignorieren, Bedeutung unbekannt |
+ Sync = 2; |
+ FrameCnt ++; |
+ SpektrumTimer = MAX_BYTEGAP; |
+ } |
+ else if((Sync == 2) && !bCheckDelay) |
+ { |
+ SpektrumTimer = MAX_BYTEGAP; |
+ // Datenbyte high |
+ ByteHigh = c; |
+ if (FrameCnt == 2) |
+ { |
+ // is 1st Byte of Channel-data |
+ // Frame 1 with Channel 1-7 comming next |
+ Frame2 = 0; |
+ if(ByteHigh & 0x80) |
+ { |
+ // DS9: Frame 2 with Channel 8-9 comming next |
+ Frame2 = 1; |
+ } |
+ } |
+ Sync = 3; |
+ FrameCnt ++; |
+ } |
+ else if((Sync == 3) && !bCheckDelay) |
+ { |
+ // Datenbyte low |
+ // High-Byte for next channel comes next |
+ SpektrumTimer = MAX_BYTEGAP; |
+ Sync = 2; |
+ FrameCnt ++; |
+ Channel = ((unsigned int)ByteHigh << 8) | c; |
+ if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM) |
+ { |
+ signal = Channel & 0x3ff; |
+ signal -= 0x200; // Offset, range 0x000..0x3ff? |
+ signal = signal/3; // scaling to fit PPM resolution |
+ index = (ByteHigh >> 2) & 0x0f; |
+ } |
+ else |
+ if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM_HI_RES) |
+ { |
+ signal = Channel & 0x7ff; |
+ signal -= 0x400; // Offset, range 0x000..0x7ff? |
+ signal = signal/6; // scaling to fit PPM resolution |
+ index = (ByteHigh >> 3) & 0x0f; |
+ } |
+ else |
+ //if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM_LOW_RES) |
+ { |
+ signal = Channel & 0x3ff; |
+ signal -= 360; // Offset, range 0x000..0x3ff? |
+ signal = signal/2; // scaling to fit PPM resolution |
+ index = (ByteHigh >> 2) & 0x0f; |
+ } |
+ |
+ index++; |
+ if(index < 13) |
+ { |
+ // Stabiles Signal |
+#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP) |
+ if (index == 2) index = 4; // Analog channel reassigment (2 <-> 4) for logical numbering (1,2,3,4) |
+ else if (index == 4) index = 2; |
+#endif |
+ if(abs(signal - PPM_in[index]) < 6) |
+ { |
+ if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
+ { |
+ if(SenderOkay < 200) SenderOkay += 10; |
+ else |
+ { |
+ SenderOkay = 200; |
+ TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input |
+ } |
+ } |
+ } |
+ tmp = (3 * (PPM_in[index]) + signal) / 4; |
+ if(tmp > signal+1) tmp--; else |
+ if(tmp < signal-1) tmp++; |
+ |
+#ifdef RECEIVER_SPEKTRUM_DX7EXP |
+ if(index == 6) // FLIGHT-MODE - The channel used for our data uplink |
+ { |
+ if (signal > 100) // SYNC received |
+ { |
+ if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit |
+ if ((s_excnt == 6 && ((s_exparity != 0 && s_exdata[s_excnt] == -125) || (s_exparity == 0 && s_exdata[s_excnt] == 125))) || (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125)))) // Parity check |
+ { |
+ if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125); // Reconstruct tripole Flight-Mode value (CH5) |
+ else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0); // Reconstruct tripole Flight-Mode value (CH5) |
+ else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125); // Reconstruct tripole Flight-Mode value (CH5) |
+ s_update(6,s_exdata[3]); // Elevator (CH6) |
+ s_update(11,s_exdata[4]); // Aileron (CH11) |
+ s_update(12,s_exdata[5]); // Rudder (CH12) |
+ |
+ if (s_excnt == 9) // New Mode (12 Channels) |
+ { |
+ if (s_exdata[7] == 125) s_update(8,PPM_in[8]+5); // Hover Pitch UP (CH8) |
+ if (s_exdata[8] == 125) s_update(8,PPM_in[8]-5); // Hover Pitch DN (CH8) |
+ if (PPM_in[8] < -125) PPM_in[8] = -125; // Range-Limit |
+ else if (PPM_in[8] > 125) PPM_in[8] = 125; // Range-Limit |
+ s_update(10,s_exdata[6]); // AUX2 (CH10) |
+ } |
+ } |
+ |
+ s_excnt = 0; // Reset bitcounter |
+ s_exparity = 0; // Reset parity bit |
+ } |
+ |
+ if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min) |
+ if (s_excnt == 10) s_excnt = 0; // Overflow protection |
+ if (signal < -100) |
+ { |
+ s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max) |
+ s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit |
+ } |
+ |
+ } |
+ |
+ if (index < 5 ) s_update(index,tmp); // Update normal potis (CH1-4) |
+ else if (index == 5) s_update(7,signal); // Gear (CH7) |
+ else if (index == 7) s_update(9,signal); // Hover Throttle (CH9) |
+ |
+#elif defined RECEIVER_SPEKTRUM_DX8EXP |
+ if(index == 6) // FLIGHT-MODE - The channel used for our data uplink |
+ { |
+ if (signal > 100) // SYNC received |
+ { |
+ if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit |
+ if (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125))) // Parity check |
+ { |
+ if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125); // Reconstruct tripole Flight-Mode value (CH5) |
+ else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0); // Reconstruct tripole Flight-Mode value (CH5) |
+ else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125); // Reconstruct tripole Flight-Mode value (CH5) |
+ |
+ if (s_exdata[3] == 125 && s_exdata[6] == -125) s_update(6,125); // Reconstruct tripole Elev D/R value (CH6) |
+ else if (s_exdata[3] == -125 && s_exdata[6] == -125) s_update(6,0); // Reconstruct tripole Elev D/R value (CH6) |
+ else if (s_exdata[3] == -125 && s_exdata[6] == 125) s_update(6,-125); // Reconstruct tripole Elev D/R value (CH6) |
+ |
+ |
+ if (s_exdata[7] == 125 && s_exdata[8] == -125) s_update(9,-125); // Reconstruct tripole AIL D/R value (CH9) |
+ else if (s_exdata[7] == -125 && s_exdata[8] == -125) s_update(9,0); // Reconstruct tripole AIL D/R value (CH9) |
+ else if (s_exdata[7] == -125 && s_exdata[8] == 125) s_update(9,125); // Reconstruct tripole AIL D/R value (CH9) |
+ |
+ s_update(10,s_exdata[5]); // Gear (CH10) |
+ s_update(12,s_exdata[4]); // Mix (CH12) |
+ } |
+ |
+ s_excnt = 0; // Reset bitcounter |
+ s_exparity = 0; // Reset parity bit |
+ } |
+ |
+ if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min) |
+ if (s_excnt == 10) s_excnt = 0; // Overflow protection |
+ if (signal < -100) |
+ { |
+ s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max) |
+ s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit |
+ } |
+ |
+ } |
+ |
+ if (index < 5 ) s_update(index,tmp); // Update normal potis (CH1-4) |
+ else if (index == 7) s_update(7,signal); // R Trim (CH7) |
+ else if (index == 5) s_update(8,signal); // AUX2 (CH8) |
+ else if (index == 8) s_update(11,signal); // AUX3 (CH11) |
+ |
+#else |
+ if(SenderOkay >= 180) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
+ else PPM_diff[index] = 0; |
+ PPM_in[index] = tmp; |
+#endif |
+ } |
+ else if(index > 17) ReSync = 1; // hier stimmt was nicht: neu synchronisieren |
+ } |
+ else |
+ { |
+ // hier stimmt was nicht: neu synchronisieren |
+ ReSync = 1; |
+ FrameCnt = 0; |
+ Frame2 = 0; |
+ // new frame next, nach fruehestens 7ms erwartet |
+ SpektrumTimer = MIN_FRAMEGAP; |
+ } |
+ |
+ // 16 Bytes eingetroffen -> Komplett |
+ if(FrameCnt >= 16) |
+ { |
+ // Frame complete |
+ if(Frame2 == 0) |
+ { |
+ // Null bedeutet: Neue Daten |
+ // nur beim ersten Frame (CH 0-7) setzen |
+ if(!ReSync) NewPpmData = 0; |
+ } |
+ FrameCnt = 0; |
+ Frame2 = 0; |
+ Sync = 0; |
+ SpektrumTimer = MIN_FRAMEGAP; |
+ } |
+ } |
+} |
+ |
+ |
/tags/V2.06e/Spektrum.h |
---|
0,0 → 1,12 |
/*####################################################################################### |
Dekodieren eines Spektrum Signals |
#######################################################################################*/ |
#ifndef _SPEKTRUM_H |
#define _SPEKTRUM_H |
void SpektrumUartInit(void); |
void SpektrumBinding(void); |
extern unsigned char SpektrumTimer; |
extern void SpektrumParser(unsigned char c); |
#endif //_RC_H |
/tags/V2.06e/analog.c |
---|
0,0 → 1,394 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "eeprom.h" |
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 150; |
volatile int AdWertNickFilter = 0, AdWertRollFilter = 0, AdWertGierFilter = 0; |
volatile int HiResNick = 2500, HiResRoll = 2500; |
volatile int AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0; |
volatile int AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 0; |
volatile long Luftdruck = 32000; |
volatile long SummenHoehe = 0; |
volatile long StartLuftdruck; |
volatile unsigned int MessLuftdruck = 1023; |
unsigned char DruckOffsetSetting; |
signed char ExpandBaro = 0; |
volatile int VarioMeter = 0; |
volatile unsigned int ZaehlMessungen = 0; |
unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115; |
volatile unsigned char AdReady = 1; |
unsigned int BaroStep = 500; |
long ExpandBaroStep = 0; |
volatile long HoehenWertF = 0; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
unsigned char CalAthmospheare = 16; |
unsigned char AD_ACC_Y = 6; |
unsigned char AD_ACC_X = 7; |
#endif |
//####################################################################################### |
void ADC_Init(void) |
//####################################################################################### |
{ |
ADMUX = 0;//Referenz ist extern |
ANALOG_ON; |
} |
#define DESIRED_H_ADC 800 |
void CalcExpandBaroStep(void) |
{ |
if(ACC_AltitudeControl) ExpandBaroStep = BaroStep * (long)ExpandBaro; |
else ExpandBaroStep = (16 * BaroStep) * (long)ExpandBaro - 4; |
} |
void SucheLuftruckOffset(void) |
{ |
unsigned int off; |
ExpandBaro = 0; |
CalcExpandBaroStep(); |
off = GetParamByte(PID_PRESSURE_OFFSET); |
if(off < 240) off += 10; |
OCR0A = off; |
OCR0B = 255-off; |
Delay_ms_Mess(150); |
if(MessLuftdruck > DESIRED_H_ADC) off = 240; |
for(; off > 5; off--) |
{ |
OCR0A = off; |
OCR0B = 255-off; |
Delay_ms_Mess(100); |
printf("."); |
if(MessLuftdruck > DESIRED_H_ADC) break; |
} |
DruckOffsetSetting = off; |
SetParamByte(PID_PRESSURE_OFFSET, off); |
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) && (DruckOffsetSetting < 10 || DruckOffsetSetting >= 230)) VersionInfo.HardwareError[0] |= FC_ERROR0_PRESSURE; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + correction of the altitude error in higher altitudes |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
CalAthmospheare = 16; |
if(ACC_AltitudeControl) |
{ |
if(PlatinenVersion < 23) { if(off < 140) CalAthmospheare += (160 - off) / 26; } |
else { if(off < 170) CalAthmospheare += (188 - off) / 19; } |
} |
Luftdruck = MessLuftdruck * CalAthmospheare; |
#endif |
Delay_ms_Mess(300); |
} |
/* |
void SucheGyroOffset(void) |
{ |
unsigned char i, ready = 0; |
int timeout; |
timeout = SetDelay(2000); |
for(i=140; i != 0; i--) |
{ |
if(ready == 3 && i > 10) i = 9; |
ready = 0; |
if(AdWertNick < 1020) AnalogOffsetNick--; else if(AdWertNick > 1030) AnalogOffsetNick++; else ready++; |
if(AdWertRoll < 1020) AnalogOffsetRoll--; else if(AdWertRoll > 1030) AnalogOffsetRoll++; else ready++; |
if(AdWertGier < 1020) AnalogOffsetGier--; else if(AdWertGier > 1030) AnalogOffsetGier++; else ready++; |
I2C_Start(TWI_STATE_GYRO_OFFSET_TX); |
if(AnalogOffsetNick < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; AnalogOffsetNick = 10;}; if(AnalogOffsetNick > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; AnalogOffsetNick = 245;}; |
if(AnalogOffsetRoll < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; AnalogOffsetRoll = 10;}; if(AnalogOffsetRoll > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; AnalogOffsetRoll = 245;}; |
if(AnalogOffsetGier < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; AnalogOffsetGier = 10;}; if(AnalogOffsetGier > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; AnalogOffsetGier = 245;}; |
while(twi_state) if(CheckDelay(timeout)) {printf("\n\r DAC or I2C ERROR! Check I2C, 3Vref, DAC and BL-Ctrl"); break;} |
AdReady = 0; |
ANALOG_ON; |
while(!AdReady); |
if(i<10) Delay_ms_Mess(10); |
} |
Delay_ms_Mess(70); |
} |
*/ |
/* |
0 n |
1 r |
2 g |
3 y |
4 x |
5 n |
6 r |
7 u |
8 z |
9 L |
10 n |
11 r |
12 g |
13 y |
14 x |
15 n |
16 r |
17 L |
*/ |
//####################################################################################### |
// |
ISR(ADC_vect) |
//####################################################################################### |
{ |
static unsigned char kanal=0,state = 0; |
static signed int subcount = 0; |
static signed int gier1, roll1, nick1, nick_filter, roll_filter; |
static signed int accy, accx; |
static long tmpLuftdruck = 0; |
static char messanzahl_Druck = 0; |
switch(state++) |
{ |
case 0: |
nick1 = ADC; |
kanal = AD_ROLL; |
break; |
case 1: |
roll1 = ADC; |
kanal = AD_GIER; |
break; |
case 2: |
gier1 = ADC; |
kanal = AD_ACC_Y; |
break; |
case 3: |
Aktuell_ay = NeutralAccY - ADC; |
accy = Aktuell_ay; |
kanal = AD_ACC_X; |
break; |
case 4: |
Aktuell_ax = ADC - NeutralAccX; |
accx = Aktuell_ax; |
kanal = AD_NICK; |
break; |
case 5: |
nick1 += ADC; |
kanal = AD_ROLL; |
break; |
case 6: |
roll1 += ADC; |
kanal = AD_UBAT; |
break; |
case 7: |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(EE_Parameter.ExtraConfig & CFG_3_3V_REFERENCE) UBat = (3 * UBat + (11 * ADC) / 30) / 4; // there were some single FC2.1 with 3.3V reference |
else |
#endif |
{ |
static unsigned int tmpVoltage = 0; |
if(!tmpVoltage) tmpVoltage = (10 * ADC); |
if(tmpVoltage <= (10 * ADC)) tmpVoltage += 2; else tmpVoltage -= 2; |
UBat = tmpVoltage / 31; |
} |
kanal = AD_ACC_Z; |
break; |
case 8: |
Aktuell_az = ADC; |
AdWertAccHoch = Aktuell_az - NeutralAccZ - (int) NeutralAccZfine; |
if(!ACC_AltitudeControl) // The Offset must be corrected, because of the ACC-Drift from vibrations |
{ |
if(AdWertAccHoch > 1) |
{ |
if(NeutralAccZ < 750) |
{ |
subcount += 5; |
if(modell_fliegt < 500) subcount += 10; |
if(subcount > 100) { NeutralAccZ++; subcount -= 100;} |
} |
} |
else if(AdWertAccHoch < -1) |
{ |
if(NeutralAccZ > 550) |
{ |
subcount -= 5; |
if(modell_fliegt < 500) subcount -= 10; |
if(subcount < -100) { NeutralAccZ--; subcount += 100;} |
} |
} |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
else |
if(CosAttitude > 8192 - 50) // horizontal leveled within 6° |
{ |
if(AdWertAccHoch > 1) |
{ |
if(++subcount > 5000) |
{ |
if(NeutralAccZfine < 6) NeutralAccZfine++; |
subcount -= 5000; |
} |
} |
else |
if(AdWertAccHoch < -1) |
{ |
if(--subcount < -5000) |
{ |
if(NeutralAccZfine > -6) NeutralAccZfine--; |
subcount += 5000; |
} |
} |
} |
#endif |
Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
kanal = AD_DRUCK; |
break; |
// "case 9:" fehlt hier absichtlich |
case 10: |
nick1 += ADC; |
kanal = AD_ROLL; |
break; |
case 11: |
roll1 += ADC; |
kanal = AD_GIER; |
break; |
case 12: |
/* if(PlatinenVersion == 10) AdWertGier = (ADC + gier1 + 1) / 2; |
else |
if(PlatinenVersion >= 20) AdWertGier = 2047 - (ADC + gier1); |
else AdWertGier = (ADC + gier1); |
*/ |
AdWertGier = 2047 - (ADC + gier1); |
kanal = AD_ACC_Y; |
break; |
case 13: |
Aktuell_ay = NeutralAccY - ADC; |
AdWertAccRoll = (Aktuell_ay + accy); |
kanal = AD_ACC_X; |
break; |
case 14: |
Aktuell_ax = ADC - NeutralAccX; |
AdWertAccNick = (Aktuell_ax + accx); |
kanal = AD_NICK; |
break; |
case 15: |
nick1 += ADC; |
//if(PlatinenVersion == 10) nick1 *= 2; else |
nick1 *= 4; |
AdWertNick = nick1 / 8; |
nick_filter = (nick_filter + nick1) / 2; |
HiResNick = nick_filter - AdNeutralNick; |
AdWertNickFilter = (AdWertNickFilter + HiResNick) / 2; |
kanal = AD_ROLL; |
break; |
case 16: |
roll1 += ADC; |
//if(PlatinenVersion == 10) roll1 *= 2; else |
roll1 *= 4; |
AdWertRoll = roll1 / 8; |
roll_filter = (roll_filter + roll1) / 2; |
HiResRoll = roll_filter - AdNeutralRoll; |
AdWertRollFilter = (AdWertRollFilter + HiResRoll) / 2; |
kanal = AD_DRUCK; |
break; |
case 17: |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) |
{ |
HoehenWertF = (ACC_AltitudeFusion(0) + SA_FILTER/2)/SA_FILTER; // cm |
} |
else HoehenWertF = HoehenWert; |
#else |
HoehenWertF = HoehenWert; |
#endif |
state = 0; |
AdReady = 1; |
ZaehlMessungen++; |
// "break" fehlt hier absichtlich |
case 9: |
MessLuftdruck = ADC; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) |
{ |
// ExpandBaroStep = BaroStep * (long)ExpandBaro; // wird in fc.c aufgerufen |
// tmpLuftdruck = MessLuftdruck - BaroStep * (long)ExpandBaro; // -523 counts per offset step |
tmpLuftdruck = MessLuftdruck - ExpandBaroStep; // -523 counts per offset step |
Luftdruck -= Luftdruck / CalAthmospheare; // 16 |
Luftdruck += tmpLuftdruck; |
HoehenWert = StartLuftdruck - Luftdruck; // cm |
} |
else |
#endif |
{ // old version (until FC V2.1) |
tmpLuftdruck += MessLuftdruck; |
if(++messanzahl_Druck >= 16) // war bis 0.86 "18" |
{ |
signed int tmp; |
// Luftdruck = (7 * Luftdruck + tmpLuftdruck - (16 * BaroStep) * (long)ExpandBaro + 4) / 8; // -523.19 counts per 10 counts offset step |
// ExpandBaroStep = (16 * BaroStep) * (long)ExpandBaro - 4; // wird in fc.c aufgerufen |
Luftdruck = (7 * Luftdruck + tmpLuftdruck - ExpandBaroStep) / 8; // -523.19 counts per 10 counts offset step |
HoehenWert = StartLuftdruck - Luftdruck; |
SummenHoehe -= SummenHoehe/SM_FILTER; |
SummenHoehe += HoehenWert; |
tmp = (HoehenWert - SummenHoehe/SM_FILTER); |
if(tmp > 1024) tmp = 1024; else if(tmp < -1024) tmp = -1024; |
if(abs(VarioMeter) > 700) VarioMeter = (15 * VarioMeter + 8 * tmp)/16; |
else VarioMeter = (31 * VarioMeter + 8 * tmp)/32; |
tmpLuftdruck /= 2; |
messanzahl_Druck = 16/2; |
} |
} |
kanal = AD_NICK; |
break; |
default: |
kanal = 0; state = 0; kanal = AD_NICK; |
break; |
} |
ADMUX = kanal; |
if(state != 0) ANALOG_ON; |
} |
/tags/V2.06e/analog.h |
---|
0,0 → 1,58 |
#ifndef _ANALOG_H |
#define _ANALOG_H |
/*####################################################################################### |
#######################################################################################*/ |
#define SM_FILTER 16 |
#define SA_FILTER 512 |
extern volatile int UBat; |
extern volatile int AdWertNick, AdWertRoll, AdWertGier; |
extern volatile int AdWertAccRoll,AdWertAccNick,AdWertAccHoch; |
extern volatile int HiResNick, HiResRoll; |
extern volatile int AdWertNickFilter, AdWertRollFilter, AdWertGierFilter; |
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az; |
extern volatile long Luftdruck; |
extern volatile long SummenHoehe; |
extern volatile char messanzahl_Druck; |
extern volatile unsigned int ZaehlMessungen; |
extern unsigned char DruckOffsetSetting; |
extern signed char ExpandBaro; |
extern volatile int VarioMeter; |
extern volatile unsigned int MessLuftdruck; |
extern volatile long StartLuftdruck; |
extern volatile char MessanzahlNick; |
extern unsigned char AnalogOffsetNick,AnalogOffsetRoll,AnalogOffsetGier; |
extern volatile unsigned char AdReady; |
extern unsigned int BaroStep; |
volatile long HoehenWertF; |
unsigned int ReadADC(unsigned char adc_input); |
void ADC_Init(void); |
void SucheLuftruckOffset(void); |
//void SucheGyroOffset(void); |
void CalcExpandBaroStep(void); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern unsigned char CalAthmospheare; |
#endif |
#define AD_GIER 0 |
#define AD_ROLL 1 |
#define AD_NICK 2 |
#define AD_DRUCK 3 |
#define AD_UBAT 4 |
#define AD_ACC_Z 5 |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern unsigned char AD_ACC_Y; |
extern unsigned char AD_ACC_X; |
#else |
#define AD_ACC_Y 6 |
#define AD_ACC_X 7 |
#endif |
#define ANALOG_OFF ADCSRA=0 |
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(0<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE) |
//Signle trigger Mode, Interrupt on |
#endif //_ANALOG_H |
/tags/V2.06e/capacity.c |
---|
0,0 → 1,164 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "capacity.h" |
#include "twimaster.h" |
#include "main.h" |
#include "timer0.h" |
#include "analog.h" |
//#define CAPACITY_UPDATE_INTERVAL 10 // 10 ms |
#define CAPACITY_UPDATE_INTERVAL 50 // 50 ms = 20Hz |
#define FC_OFFSET_CURRENT 5 // calculate with a current of 0.5A |
#define BL_OFFSET_CURRENT 2 // calculate with a current of 0.2A |
// global varialbles |
unsigned short update_timer = 0; |
Capacity_t Capacity; |
// initialize capacity calculation |
void Capacity_Init(void) |
{ |
Capacity.ActualCurrent = 0; |
Capacity.UsedCapacity = 0; |
Capacity.ActualPower = 0; |
Capacity.MinOfMaxPWM = 0; |
update_timer = SetDelay(CAPACITY_UPDATE_INTERVAL); |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + extended Current measurement -> 200 = 20A 201 = 21A 255 = 75A (20+55) |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
unsigned int BL3_Current(unsigned char who) // in 0,1A |
{ |
if(Motor[who].Current == 255) return(0); // invalid |
if(Motor[who].Current <= 200) return(Motor[who].Current); |
else |
{ |
if(Motor[who].Version & MOTOR_STATE_BL30) return(200 + 10 * ((unsigned int)Motor[who].Current-200)); |
else return(Motor[who].Current); |
} |
} |
// called in main loop at a regular interval |
void Capacity_Update(void) |
{ |
unsigned short Current, SetSum; // max value will be 255 * 12 = 3060 |
static unsigned short SubCounter = 0; |
static unsigned short CurrentOffset = 0; |
static unsigned long SumCurrentOffset = 0; |
unsigned char i, NumOfMotors, MinOfMaxPWM; |
if(CheckDelay(update_timer)) |
{ |
update_timer += CAPACITY_UPDATE_INTERVAL; // do not use SetDelay to avoid timing leaks |
// determine sum of all present BL currents and setpoints |
Current = 0; |
SetSum = 0; |
NumOfMotors = 0; |
MinOfMaxPWM = 255; |
if(Capacity.MinOfMaxPWM == 254) RedundanceBlOperation = 1; |
else if(Capacity.MinOfMaxPWM == 255) RedundanceBlOperation = 0; |
for(i = 0; i < MAX_MOTORS; i++) |
{ |
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK/* && Mixer.Motor[i][MIX_GAS]*/) |
{ |
NumOfMotors++; |
if(Motor[i].Current > 200) |
{ |
Current += BL3_Current(i); // extended Current measurement -> 200 = 20A 201 = 21A 255 = 75A (20+55) |
} |
else Current += (unsigned int)(Motor[i].Current); |
SetSum += (unsigned int)(Motor[i].SetPoint); |
if(Motor[i].MaxPWM <= MinOfMaxPWM) MinOfMaxPWM = Motor[i].MaxPWM; else RedundanceBlOperation = 0; |
} |
} |
Capacity.MinOfMaxPWM = MinOfMaxPWM; |
if(SetSum == 0) // if all setpoints are 0 |
{ // determine offsets of motor currents |
#define CURRENT_AVERAGE 8 // 8bit = 256 * 10 ms = 2.56s average time |
CurrentOffset = (unsigned int)(SumCurrentOffset>>CURRENT_AVERAGE); |
SumCurrentOffset -= CurrentOffset; |
SumCurrentOffset += Current; |
// after averaging set current to static offset |
Current = FC_OFFSET_CURRENT; |
} |
else // some motors are running, includes also motor test condition, where "MotorRunning" is false |
{ // subtract offset |
if(Current > CurrentOffset) Current -= CurrentOffset; |
else Current = 0; |
// add the FC and BL Offsets |
Current += FC_OFFSET_CURRENT + NumOfMotors * BL_OFFSET_CURRENT; |
} |
// update actual Current |
Capacity.ActualCurrent = Current; |
// update actual Power |
if(Current < 255) Capacity.ActualPower = (UBat * Current) / 100; // in W higher resolution |
else Capacity.ActualPower = (UBat * (Current/4)) / 25; // in W |
// update used capacity |
SubCounter += Current; |
// 100mA * 1ms * CAPACITY_UPDATE_INTERVAL = 1 mA * 100 ms * CAPACITY_UPDATE_INTERVAL |
// = 1mA * 0.1s * CAPACITY_UPDATE_INTERVAL = 1mA * 1min / (600 / CAPACITY_UPDATE_INTERVAL) |
// = 1mAh / (36000 / CAPACITY_UPDATE_INTERVAL) |
#define SUB_COUNTER_LIMIT (36000 / CAPACITY_UPDATE_INTERVAL) |
while(SubCounter > SUB_COUNTER_LIMIT) |
{ |
Capacity.UsedCapacity++; // we have one mAh more |
SubCounter -= SUB_COUNTER_LIMIT; // keep the remaining sub part |
} |
} // EOF check delay update timer |
} |
/tags/V2.06e/capacity.h |
---|
0,0 → 1,18 |
#ifndef _CAPACITY_H |
#define _CAPACITY_H |
typedef struct |
{ |
unsigned short ActualCurrent; // in 0.1A Steps |
unsigned short ActualPower; // in 0.1W |
unsigned short UsedCapacity; // in mAh |
unsigned char MinOfMaxPWM; // BL Power Limit |
} __attribute__((packed)) Capacity_t; |
extern Capacity_t Capacity; |
void Capacity_Init(void); |
void Capacity_Update(void); |
#endif //_CAPACITY_H |
/tags/V2.06e/debug.c |
---|
0,0 → 1,48 |
#include "main.h" |
#include "debug.h" |
#ifdef DEBUG // only include functions if DEBUG is defined in main.h |
#warning : "### DEBUG-Funktion aktiv ###" |
unsigned char Debug_BufPtr = 0; |
struct str_Debug tDebug; |
unsigned char SendDebugOutput = 0; |
// function called from _printf_P to output character |
void Debug_Putchar(char c) |
{ |
if (!SendDebugOutput) |
{ |
tDebug.Text[Debug_BufPtr++] = c; // copy character to buffer |
if (Debug_BufPtr > 30) Debug_BufPtr = 30; // avoid buffer overflow |
} |
} |
void DebugSend(unsigned char cmd) |
{ |
if (!SendDebugOutput) |
{ |
tDebug.Cmd = cmd; |
tDebug.Text[Debug_BufPtr] = '\0'; // end of text marker |
Debug_BufPtr = 0; // set bufferindex to 0 |
SendDebugOutput = 1; // set flag to trasmit data the next time in serial transmit function |
} |
} |
#endif |
/* |
add the following code block to the serial transmit function |
#ifdef DEBUG // only include functions if DEBUG is defined |
if(SendDebugOutput && UebertragungAbgeschlossen) |
{ |
SendOutData('0', FC_ADDRESS, 1, (unsigned char *) &tDebug, sizeof(tDebug)); |
SendDebugOutput = 0; |
} |
#endif |
*/ |
/tags/V2.06e/debug.h |
---|
0,0 → 1,60 |
#ifndef _DEBUG_H |
#define _DEBUG_H |
// ---------------------------------------------- |
#define CMD_NONE 0x00 |
#define CMD_RAW_OUTPUT 0x01 |
#define CMD_ERROR_MSG 0x02 |
#define CMD_WARNING_MSG 0x04 |
#define CMD_GREEN_MSG 0x08 |
// debug console in MK-Tool can also handle ANSI ESC seq. |
#define ANSI_ATTRIBUTE_OFF "\033[0m" |
#define ANSI_BOLD "\033[1m" |
#define ANSI_UNDERSCORE "\033[4m" |
#define ANSI_BLINK "\033[5m" |
#define ANSI_INVERSE "\033[7m" |
#define ANSI_INVISIBLE "\033[8m" |
#define ANSI_COLOR_BLACK "\033[30m" |
#define ANSI_COLOR_RED "\033[31m" |
#define ANSI_COLOR_GREEN "\033[32m" |
#define ANSI_COLOR_YELLOW "\033[33m" |
#define ANSI_COLOR_BLUE "\033[34m" |
#define ANSI_COLOR_VIOLETT "\033[35m" |
#define ANSI_COLOR_KOBALTBLUE "\033[36m" |
#define ANSI_COLOR_WHITE "\033[37m" |
#define ANSI_CLEAR "\033[2J" |
#define ANSI_HOME "\033[H" |
// macros for easier use |
#ifdef DEBUG // only include functions if DEBUG is defined in main.h |
#define Debug(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_NONE); } |
#define Debug_Raw(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_RAW_OUTPUT); } |
#define Debug_Warning(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_WARNING_MSG); } |
#define Debug_Error(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_ERROR_MSG); } |
#define Debug_OK(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_GREEN_MSG); } |
struct str_Debug |
{ |
unsigned char Cmd; // bitcoded command |
char Text[32]; |
}; |
extern struct str_Debug tDebug; |
unsigned char SendDebugOutput; |
void Debug_Putchar(char c); |
void DebugSend(unsigned char cmd); |
#else // dummy macros (won't waste flash, if #DEBUG is disabled) |
#define Debug(format, args...) ; |
#define Debug_Raw(format, args...) ; |
#define Debug_Warning(format, args...) ; |
#define Debug_Error(format, args...) ; |
#define Debug_OK(format, args...) ; |
#endif |
// ---------------------------------------------- |
#endif |
/tags/V2.06e/eeprom.c |
---|
0,0 → 1,669 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#ifndef EEMEM |
#define EEMEM __attribute__ ((section (".eeprom"))) |
#endif |
#include <avr/eeprom.h> |
#include <string.h> |
#include "eeprom.h" |
#include "uart.h" |
#include "led.h" |
#include "main.h" |
#include "fc.h" |
#include "twimaster.h" |
paramset_t EE_Parameter; |
MixerTable_t Mixer; |
uint8_t RequiredMotors; |
uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len) |
{ |
uint8_t crc = 0xAA; |
uint16_t i; |
for(i=0; i<len; i++) |
{ |
crc += pBuffer[i]; |
} |
return crc; |
} |
uint8_t EEProm_Checksum(uint16_t EEAddr, uint16_t len) |
{ |
uint8_t crc = 0xAA; |
uint16_t off; |
for(off=0; off<len; off++) |
{ |
crc += eeprom_read_byte((uint8_t*)(EEAddr + off));; |
} |
return crc; |
} |
void ParamSet_DefaultStickMapping(void) |
{ |
EE_Parameter.Kanalbelegung[K_GAS] = 1; |
EE_Parameter.Kanalbelegung[K_ROLL] = 2; |
EE_Parameter.Kanalbelegung[K_NICK] = 3; |
EE_Parameter.Kanalbelegung[K_GIER] = 4; |
EE_Parameter.Kanalbelegung[K_POTI1] = 5; |
EE_Parameter.Kanalbelegung[K_POTI2] = 6; |
EE_Parameter.Kanalbelegung[K_POTI3] = 7; |
EE_Parameter.Kanalbelegung[K_POTI4] = 8; |
EE_Parameter.Kanalbelegung[K_POTI5] = 9; |
EE_Parameter.Kanalbelegung[K_POTI6] = 10; |
EE_Parameter.Kanalbelegung[K_POTI7] = 11; |
EE_Parameter.Kanalbelegung[K_POTI8] = 12; |
} |
/***************************************************/ |
/* Default Values for parameter set 1 */ |
/***************************************************/ |
void CommonDefaults(void) |
{ |
EE_Parameter.Revision = EEPARAM_REVISION; |
memset(EE_Parameter.Name,0,12); // delete name |
// if(PlatinenVersion >= 20) |
{ |
EE_Parameter.Gyro_D = 10; |
EE_Parameter.Driftkomp = 0; |
EE_Parameter.GyroAccFaktor = 27; |
EE_Parameter.WinkelUmschlagNick = 78; |
EE_Parameter.WinkelUmschlagRoll = 78; |
} |
/* else |
{ |
EE_Parameter.Gyro_D = 3; |
EE_Parameter.Driftkomp = 32; |
EE_Parameter.GyroAccFaktor = 30; |
EE_Parameter.WinkelUmschlagNick = 85; |
EE_Parameter.WinkelUmschlagRoll = 85; |
} |
*/ |
EE_Parameter.GyroAccAbgleich = 32; // 1/k |
EE_Parameter.BitConfig = 0; // Looping usw. |
EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER; |
EE_Parameter.ExtraConfig = CFG_GPS_AID | CFG2_VARIO_BEEP | CFG_LEARNABLE_CAREFREE | CFG_NO_RCOFF_BEEPING; |
EE_Parameter.GlobalConfig3 = CFG3_SPEAK_ALL | CFG3_NO_GPSFIX_NO_START;// |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
EE_Parameter.Receiver = RECEIVER_HOTT; |
#else |
EE_Parameter.Receiver = RECEIVER_JETI; |
#endif |
EE_Parameter.MotorSafetySwitch = 0; |
EE_Parameter.ExternalControl = 0; |
EE_Parameter.Gas_Min = 8; // Wert : 0-32 |
EE_Parameter.Gas_Max = 230; // Wert : 33-247 |
EE_Parameter.KompassWirkung = 64; // Wert : 0-247 |
EE_Parameter.HoeheChannel = 5; // Wert : 0-32 |
EE_Parameter.Hoehe_MinGas = 30; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) |
{ |
EE_Parameter.Hoehe_P = 20; // Wert : 0-32 |
EE_Parameter.Luftdruck_D = 40; // Wert : 0-247 |
EE_Parameter.Hoehe_ACC_Wirkung = 30; // Wert : 0-247 |
EE_Parameter.Hoehe_HoverBand = 1; // Wert : 0-247 |
EE_Parameter.Hoehe_GPS_Z = 0; // Wert : 0-247 |
EE_Parameter.Hoehe_StickNeutralPoint = 127;// Wert : 0-247 (0 = Hover-Estimation) |
EE_Parameter.FailSafeTime = 30; // 0 = off |
} |
else |
#endif |
{ |
EE_Parameter.Hoehe_P = 15; // Wert : 0-32 |
EE_Parameter.Luftdruck_D = 30; // Wert : 0-247 |
EE_Parameter.Hoehe_ACC_Wirkung = 0; // Wert : 0-247 |
EE_Parameter.Hoehe_HoverBand = 8; // Wert : 0-247 |
EE_Parameter.Hoehe_GPS_Z = 20; // Wert : 0-247 |
EE_Parameter.Hoehe_StickNeutralPoint = 0;// Wert : 0-247 (0 = Hover-Estimation) |
EE_Parameter.FailSafeTime = 0; // 0 = off |
} |
EE_Parameter.Hoehe_Verstaerkung = 15; // Wert : 0-50 (15 -> ca. +/- 5m/sek bei Stick-Voll-Ausschlag) |
EE_Parameter.StartLandChannel = 0; |
EE_Parameter.LandingSpeed = 12; |
EE_Parameter.UserParam1 = 0; // zur freien Verwendung |
EE_Parameter.UserParam2 = 0; // zur freien Verwendung |
EE_Parameter.UserParam3 = 0; // zur freien Verwendung |
EE_Parameter.UserParam4 = 0; // zur freien Verwendung |
EE_Parameter.UserParam5 = 0; // zur freien Verwendung |
EE_Parameter.UserParam6 = 0; // zur freien Verwendung |
EE_Parameter.UserParam7 = 0; // zur freien Verwendung |
EE_Parameter.UserParam8 = 0; // zur freien Verwendung |
EE_Parameter.ServoNickControl = 128; // Wert : 0-247 // Stellung des Servos |
EE_Parameter.ServoNickComp = 50; // Wert : 0-247 // Einfluss Gyro/Servo |
EE_Parameter.ServoCompInvert = 2; // Wert : 0-247 // Richtung Einfluss Gyro/Servo |
EE_Parameter.ServoNickMin = 24; // Wert : 0-247 // Anschlag |
EE_Parameter.ServoNickMax = 230; // Wert : 0-247 // Anschlag |
EE_Parameter.ServoNickRefresh = 3; |
EE_Parameter.Servo3 = 125; |
EE_Parameter.Servo4 = 125; |
EE_Parameter.Servo5 = 125; |
EE_Parameter.ServoRollControl = 128; // Wert : 0-247 // Stellung des Servos |
EE_Parameter.ServoRollComp = 85; // Wert : 0-247 // Einfluss Gyro/Servo |
EE_Parameter.ServoRollMin = 70; // Wert : 0-247 // Anschlag |
EE_Parameter.ServoRollMax = 220; // Wert : 0-247 // Anschlag |
EE_Parameter.ServoManualControlSpeed = 60; |
EE_Parameter.CamOrientation = 0; // Wert : 0-24 -> 0-360 -> 15° steps |
EE_Parameter.J16Bitmask = 0xAA; |
EE_Parameter.J17Bitmask = 0xCC; |
EE_Parameter.WARN_J16_Bitmask = 0x00; |
EE_Parameter.WARN_J17_Bitmask = 0xAA; |
EE_Parameter.J16Timing = 40; |
EE_Parameter.J17Timing = 40; |
EE_Parameter.AutoPhotoDistance = 0; // Photo release in meter |
EE_Parameter.AutoPhotoAtitudes = 0; // Photo release in meter |
EE_Parameter.SingleWpSpeed = 50; // Speed when flying the single points |
EE_Parameter.LoopGasLimit = 50; |
EE_Parameter.LoopThreshold = 90; // Wert: 0-247 Schwelle für Stickausschlag |
EE_Parameter.LoopHysterese = 50; |
EE_Parameter.NaviGpsModeChannel = 6; // Kanal 6 |
EE_Parameter.NaviGpsGain = 100; |
EE_Parameter.NaviGpsP = 100; |
EE_Parameter.NaviGpsI = 90; |
EE_Parameter.NaviGpsD = 120; |
EE_Parameter.NaviGpsA = 40; |
EE_Parameter.NaviGpsPLimit = 75; |
EE_Parameter.NaviGpsILimit = 85; |
EE_Parameter.NaviGpsDLimit = 75; |
EE_Parameter.NaviGpsMinSat = 6; |
EE_Parameter.NaviStickThreshold = 8; |
EE_Parameter.NaviWindCorrection = 50; |
EE_Parameter.NaviAccCompensation = 42; |
EE_Parameter.NaviMaxFlyingRange = 0; |
EE_Parameter.NaviDescendRange = 0; |
EE_Parameter.NaviAngleLimitation = 140; |
EE_Parameter.NaviPH_LoginTime = 2; |
EE_Parameter.OrientationAngle = 0; |
EE_Parameter.CareFreeChannel = 0; |
EE_Parameter.NotGas = 65; // Wert : 0-247 // Gaswert bei Empangsverlust (ggf. in Prozent) |
EE_Parameter.NotGasZeit = 90; // Wert : 0-247 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
EE_Parameter.MotorSmooth = 0; |
EE_Parameter.ComingHomeAltitude = 0; // 0 = don't change |
EE_Parameter.MaxAltitude = 150; // 0 = off |
EE_Parameter.AchsKopplung1 = 125; |
EE_Parameter.AchsKopplung2 = 52; |
EE_Parameter.FailsafeChannel = 0; |
EE_Parameter.ServoFilterNick = 0; |
EE_Parameter.ServoFilterRoll = 0; |
EE_Parameter.Servo3OnValue = 140; |
EE_Parameter.Servo3OffValue = 70; |
EE_Parameter.Servo4OnValue = 140; |
EE_Parameter.Servo4OffValue = 70; |
EE_Parameter.CompassOffset = 0; |
EE_Parameter.UnterspannungsWarnung = 32; // Wert : 0-247 ( Automatische Zellenerkennung bei < 50) |
EE_Parameter.ComingHomeVoltage = 31; |
EE_Parameter.AutoLandingVoltage = 30; |
} |
/* |
void ParamSet_DefaultSet1(void) // sport |
{ |
CommonDefaults(); |
EE_Parameter.Stick_P = 14; // Wert : 1-20 |
EE_Parameter.Stick_D = 16; // Wert : 0-20 |
EE_Parameter.StickGier_P = 12; // Wert : 1-20 |
EE_Parameter.Gyro_P = 80; // Wert : 0-247 |
EE_Parameter.Gyro_I = 150; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_P = 80; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_I = 150; // Wert : 0-247 |
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8 |
EE_Parameter.I_Faktor = 32; |
EE_Parameter.CouplingYawCorrection = 1; |
EE_Parameter.GyroAccAbgleich = 16; // 1/k; |
EE_Parameter.DynamicStability = 100; |
memcpy(EE_Parameter.Name, "Sport\0", 12); |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
} |
*/ |
/***************************************************/ |
/* Default Values for parameter set 1 */ |
/***************************************************/ |
void ParamSet_DefaultSet1(void) // normal |
{ |
CommonDefaults(); |
EE_Parameter.Stick_P = 10; // Wert : 1-20 |
EE_Parameter.Stick_D = 16; // Wert : 0-20 |
EE_Parameter.StickGier_P = 6; // Wert : 1-20 |
EE_Parameter.Gyro_P = 90; // Wert : 0-247 |
EE_Parameter.Gyro_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_P = 90; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8 |
EE_Parameter.I_Faktor = 32; |
EE_Parameter.CouplingYawCorrection = 60; |
EE_Parameter.DynamicStability = 75; |
memcpy(EE_Parameter.Name, "Fast",4); |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
} |
/***************************************************/ |
/* Default Values for parameter set 2 */ |
/***************************************************/ |
void ParamSet_DefaultSet2(void) // Agil |
{ |
CommonDefaults(); |
EE_Parameter.Stick_P = 8; // Wert : 1-20 |
EE_Parameter.Stick_D = 16; // Wert : 0-20 |
EE_Parameter.StickGier_P = 6; // Wert : 1-20 |
EE_Parameter.Gyro_P = 100; // Wert : 0-247 |
EE_Parameter.Gyro_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8 |
EE_Parameter.I_Faktor = 16; |
EE_Parameter.CouplingYawCorrection = 70; |
EE_Parameter.DynamicStability = 70; |
memcpy(EE_Parameter.Name, "Agile",5); |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
} |
/***************************************************/ |
/* Default Values for parameter set 3 */ |
/***************************************************/ |
void ParamSet_DefaultSet3(void) // Easy |
{ |
CommonDefaults(); |
EE_Parameter.Stick_P = 6; // Wert : 1-20 |
EE_Parameter.Stick_D = 10; // Wert : 0-20 |
EE_Parameter.StickGier_P = 4; // Wert : 1-20 |
EE_Parameter.Gyro_P = 100; // Wert : 0-247 |
EE_Parameter.Gyro_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8 |
EE_Parameter.I_Faktor = 16; |
EE_Parameter.CouplingYawCorrection = 70; |
EE_Parameter.DynamicStability = 70; |
memcpy(EE_Parameter.Name, "Easy", 4); |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
} |
/***************************************************/ |
/* Read Parameter from EEPROM as byte */ |
/***************************************************/ |
uint8_t GetParamByte(uint16_t param_id) |
{ |
return eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id)); |
} |
/***************************************************/ |
/* Write Parameter to EEPROM as byte */ |
/***************************************************/ |
void SetParamByte(uint16_t param_id, uint8_t value) |
{ |
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value); |
} |
/***************************************************/ |
/* Read Parameter from EEPROM as word */ |
/***************************************************/ |
uint16_t GetParamWord(uint16_t param_id) |
{ |
return eeprom_read_word((uint16_t *)(EEPROM_ADR_PARAM_BEGIN + param_id)); |
} |
/***************************************************/ |
/* Write Parameter to EEPROM as word */ |
/***************************************************/ |
void SetParamWord(uint16_t param_id, uint16_t value) |
{ |
eeprom_write_word((uint16_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value); |
} |
/***************************************************/ |
/* Read Parameter Set from EEPROM */ |
/***************************************************/ |
// number [1..5] |
uint8_t ParamSet_ReadFromEEProm(uint8_t setnumber) |
{ |
uint8_t crc; |
uint16_t eeaddr; |
// range the setnumber |
if((1 > setnumber) || (setnumber > 5)) setnumber = 3; |
// calculate eeprom addr |
eeaddr = EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1); |
// calculate checksum from eeprom |
crc = EEProm_Checksum(eeaddr, PARAMSET_STRUCT_LEN - 1); |
// check crc |
if(crc != eeprom_read_byte((uint8_t*)(eeaddr + PARAMSET_STRUCT_LEN - 1))) return 0; |
// check revision |
if(eeprom_read_byte((uint8_t*)(eeaddr)) != EEPARAM_REVISION) return 0; |
// read paramset from eeprom |
eeprom_read_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN); |
LED_Init(); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
LIBFC_HoTT_Clear(); |
#endif |
return 1; |
} |
/***************************************************/ |
/* Write Parameter Set to EEPROM */ |
/***************************************************/ |
// number [1..5] |
uint8_t ParamSet_WriteToEEProm(uint8_t setnumber) |
{ |
uint8_t crc; |
if(EE_Parameter.Revision == EEPARAM_REVISION) // write only the right revision to eeprom |
{ |
if(setnumber > 5) setnumber = 5; |
if(setnumber < 1) return 0; |
LIBFC_CheckSettings(); |
if(EE_Parameter.GlobalConfig3 & CFG3_VARIO_FAILSAFE) // check the Setting: Not more than 100% emergency gas |
{ |
if(EE_Parameter.NotGas > 99) EE_Parameter.NotGas = 80; // i.e. 80% of Hovergas |
} |
// update checksum |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
// write paramset to eeprom |
eeprom_write_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN); |
// backup channel settings to separate block in eeprom |
eeprom_write_block( (void*)(EE_Parameter.Kanalbelegung), (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung)); |
// write crc of channel block to eeprom |
crc = RAM_Checksum((uint8_t*)(EE_Parameter.Kanalbelegung), sizeof(EE_Parameter.Kanalbelegung)); |
eeprom_write_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung)), crc); |
// update active settings number |
SetActiveParamSet(setnumber); |
LED_Init(); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
LIBFC_HoTT_Clear(); |
#endif |
return 1; |
} |
// wrong revision |
return 0; |
} |
/***************************************************/ |
/* Read MixerTable from EEPROM */ |
/***************************************************/ |
uint8_t MixerTable_ReadFromEEProm(void) |
{ |
uint8_t crc; |
// calculate checksum in eeprom |
crc = EEProm_Checksum(EEPROM_ADR_MIXERTABLE, sizeof(Mixer) - 1); |
// check crc |
if( crc != eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE + sizeof(Mixer) - 1)) ) return 0; |
// check revision |
if(eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE)) != EEMIXER_REVISION) return 0; |
// read mixer table |
eeprom_read_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer)); |
return 1; |
} |
/***************************************************/ |
/* Write Mixer Table to EEPROM */ |
/***************************************************/ |
uint8_t MixerTable_WriteToEEProm(void) |
{ |
if(Mixer.Revision == EEMIXER_REVISION) |
{ |
// update crc |
Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1); |
// write to eeprom |
eeprom_write_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer)); |
return 1; |
} |
else return 0; |
} |
/***************************************************/ |
/* Default Values for Mixer Table */ |
/***************************************************/ |
void MixerTable_Default(void) // Quadro |
{ |
uint8_t i; |
Mixer.Revision = EEMIXER_REVISION; |
// clear mixer table |
for(i = 0; i < 16; i++) |
{ |
Mixer.Motor[i][MIX_GAS] = 0; |
Mixer.Motor[i][MIX_NICK] = 0; |
Mixer.Motor[i][MIX_ROLL] = 0; |
Mixer.Motor[i][MIX_YAW] = 0; |
} |
// default = Quadro |
Mixer.Motor[0][MIX_GAS] = 64; Mixer.Motor[0][MIX_NICK] = +64; Mixer.Motor[0][MIX_ROLL] = 0; Mixer.Motor[0][MIX_YAW] = +64; |
Mixer.Motor[1][MIX_GAS] = 64; Mixer.Motor[1][MIX_NICK] = -64; Mixer.Motor[1][MIX_ROLL] = 0; Mixer.Motor[1][MIX_YAW] = +64; |
Mixer.Motor[2][MIX_GAS] = 64; Mixer.Motor[2][MIX_NICK] = 0; Mixer.Motor[2][MIX_ROLL] = -64; Mixer.Motor[2][MIX_YAW] = -64; |
Mixer.Motor[3][MIX_GAS] = 64; Mixer.Motor[3][MIX_NICK] = 0; Mixer.Motor[3][MIX_ROLL] = +64; Mixer.Motor[3][MIX_YAW] = -64; |
memcpy(Mixer.Name, "Quadro\0\0\0\0\0\0", 12); |
Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1); |
} |
/***************************************************/ |
/* Get active parameter set */ |
/***************************************************/ |
uint8_t GetActiveParamSet(void) |
{ |
uint8_t setnumber; |
setnumber = eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET)); |
if(setnumber > 5) |
{ |
setnumber = 3; |
eeprom_write_byte((void*)(EEPROM_ADR_PARAM_BEGIN+PID_ACTIVE_SET), setnumber); |
} |
ActiveParamSet = setnumber; |
return(setnumber); |
} |
/***************************************************/ |
/* Set active parameter set */ |
/***************************************************/ |
void SetActiveParamSet(uint8_t setnumber) |
{ |
if(setnumber > 5) setnumber = 5; |
if(setnumber < 1) setnumber = 1; |
ActiveParamSet = setnumber; |
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET), setnumber); |
} |
/***************************************************/ |
/* Set default parameter set */ |
/***************************************************/ |
void SetDefaultParameter(uint8_t set, uint8_t restore_channels) |
{ |
if(set > 5) set = 5; |
else if(set < 1) set = 1; |
switch(set) |
{ |
case 1: |
ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport) |
break; |
case 2: |
ParamSet_DefaultSet2(); // Kamera |
break; |
case 3: |
ParamSet_DefaultSet3(); // Beginner |
break; |
default: |
ParamSet_DefaultSet3(); // Beginner |
break; |
} |
if(restore_channels) |
{ |
uint8_t crc; |
// 1st check for a valid channel backup in eeprom |
crc = EEProm_Checksum(EEPROM_ADR_CHANNELS, sizeof(EE_Parameter.Kanalbelegung)); |
if(crc == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung))) ) |
{ |
eeprom_read_block((void *)EE_Parameter.Kanalbelegung, (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung)); |
} |
else ParamSet_DefaultStickMapping(); |
} |
else ParamSet_DefaultStickMapping(); |
ParamSet_WriteToEEProm(set); |
} |
/***************************************************/ |
/* Initialize EEPROM Parameter Sets */ |
/***************************************************/ |
void ParamSet_Init(void) |
{ |
uint8_t channel_backup = 0, bad_params = 0, ee_default = 0,i; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(PlatinenVersion != GetParamByte(PID_HARDWARE_VERSION)) |
{ |
if(PlatinenVersion == 22 && GetParamByte(PID_HARDWARE_VERSION) == 21 && !(PIND & 0x10)) SetParamByte(PID_EE_REVISION,0); // reset the Settings if the Version changed to V2.2 |
SetParamByte(PID_HARDWARE_VERSION,PlatinenVersion); // Remember the Version number |
wdt_enable(WDTO_15MS); // Reset-Commando |
printf("\n\r--> Hardware Version Byte Changed <--"); |
while(1); |
} |
#endif |
if((EEPARAM_REVISION) != GetParamByte(PID_EE_REVISION)) |
{ |
ee_default = 1; // software update or forced by mktool |
} |
// 1st check for a valid channel backup in eeprom |
i = EEProm_Checksum(EEPROM_ADR_CHANNELS, sizeof(EE_Parameter.Kanalbelegung)); |
if(i == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung)))) channel_backup = 1; |
// parameter check |
// check all 5 parameter settings |
for (i = 1;i < 6; i++) |
{ |
if(ee_default || !ParamSet_ReadFromEEProm(i)) // could not read paramset from eeprom |
{ |
bad_params = 1; |
printf("\n\rGenerating default Parameter Set %d",i); |
switch(i) |
{ |
case 1: |
ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport) |
break; |
case 2: |
ParamSet_DefaultSet2(); // Normal |
break; |
default: |
ParamSet_DefaultSet3(); // Easy |
break; |
} |
if(channel_backup) // if we have an channel mapping backup in eeprom |
{ // restore it from eeprom |
eeprom_read_block((void *)EE_Parameter.Kanalbelegung, (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung)); |
} |
else |
{ // use default mapping |
ParamSet_DefaultStickMapping(); |
} |
ParamSet_WriteToEEProm(i); |
} |
} |
if(bad_params) // at least one of the parameter settings were invalid |
{ |
// default-Setting is parameter set 3 |
SetActiveParamSet(3); |
} |
// read active parameter set to ParamSet stucture |
i = GetActiveParamSet(); |
ParamSet_ReadFromEEProm(i); |
printf("\n\rUsing Parameter Set %d", i); |
// load mixer table |
if(GetParamByte(PID_EE_REVISION) == 0xff || !MixerTable_ReadFromEEProm() ) |
{ |
printf("\n\rGenerating default Mixer Table"); |
MixerTable_Default(); // Quadro |
MixerTable_WriteToEEProm(); |
} |
if(ee_default) SetParamByte(PID_EE_REVISION, (EEPARAM_REVISION)); |
// determine motornumber |
RequiredMotors = 0; |
for(i = 0; i < 16; i++) |
{ |
if(Mixer.Motor[i][MIX_GAS] > 0) RequiredMotors++; |
} |
printf("\n\rMixer-Config: '%s' (%u Motors)",Mixer.Name, RequiredMotors); |
PrintLine();// ("\n\r==================================="); |
} |
/tags/V2.06e/eeprom.h |
---|
0,0 → 1,292 |
#ifndef _EEPROM_H |
#define _EEPROM_H |
#include <inttypes.h> |
#include "twimaster.h" |
#define EEPARAM_REVISION 102 // is count up, if paramater stucture has changed (compatibility) |
#define EEMIXER_REVISION 1 // is count up, if mixer stucture has changed (compatibility) |
#define EEPROM_ADR_PARAM_BEGIN 0 |
#define EE_DUMMY 0 // Byte |
#define PID_EE_REVISION 1 // byte |
#define PID_ACTIVE_SET 2 // byte |
#define PID_PRESSURE_OFFSET 3 // byte |
#define PID_ACC_NICK 4 // word |
#define PID_ACC_ROLL 6 // word |
#define PID_ACC_TOP 8 // word |
#define PID_FLIGHT_MINUTES_TOTAL 10 // word |
#define PID_FLIGHT_MINUTES 14 // word |
#define PID_SPEAK_HOTT_CFG 16 // Byte |
#define PID_HARDWARE_VERSION 17 // Byte |
#define EEPROM_ADR_CHANNELS 80 // 80 - 93, 12 bytes + 1 byte crc |
#define EEPROM_ADR_PARAMSET 100 // 100 - 725, 5 * 125 bytes |
#define EEPROM_ADR_MIXERTABLE 1000 // 1000 - 1078, 78 bytes |
#define EEPROM_ADR_BLCONFIG 1200 // 1200 - 1296, 12 * 8 bytes |
#define MIX_GAS 0 |
#define MIX_NICK 1 |
#define MIX_ROLL 2 |
#define MIX_YAW 3 |
typedef struct |
{ |
uint8_t Revision; |
int8_t Name[12]; |
int8_t Motor[16][4]; |
uint8_t crc; |
} __attribute__((packed)) MixerTable_t; |
extern MixerTable_t Mixer; |
extern uint8_t RequiredMotors; |
//GlobalConfig3 |
#define CFG3_NO_SDCARD_NO_START 0x01 |
//#define CFG3_DPH_MAX_RADIUS 0x02 |
#define CFG3_VARIO_FAILSAFE 0x04 |
#define CFG3_MOTOR_SWITCH_MODE 0x08 |
#define CFG3_NO_GPSFIX_NO_START 0x10 |
#define CFG3_USE_NC_FOR_OUT1 0x20 |
#define CFG3_SPEAK_ALL 0x40 |
#define CFG3_SERVO_NICK_COMP_OFF 0x80 |
//GlobalConfig |
#define CFG_HOEHENREGELUNG 0x01 |
#define CFG_HOEHEN_SCHALTER 0x02 |
#define CFG_HEADING_HOLD 0x04 |
#define CFG_KOMPASS_AKTIV 0x08 |
#define CFG_KOMPASS_FIX 0x10 |
#define CFG_GPS_AKTIV 0x20 |
#define CFG_ACHSENKOPPLUNG_AKTIV 0x40 |
#define CFG_DREHRATEN_BEGRENZER 0x80 |
//BitConfig |
#define CFG_LOOP_OBEN 0x01 |
#define CFG_LOOP_UNTEN 0x02 |
#define CFG_LOOP_LINKS 0x04 |
#define CFG_LOOP_RECHTS 0x08 |
#define CFG_MOTOR_BLINK1 0x10 |
#define CFG_MOTOR_OFF_LED1 0x20 |
#define CFG_MOTOR_OFF_LED2 0x40 |
#define CFG_MOTOR_BLINK2 0x80 |
// ExtraConfig |
#define CFG2_HEIGHT_LIMIT 0x01 |
#define CFG2_VARIO_BEEP 0x02 |
#define CFG_SENSITIVE_RC 0x04 |
#define CFG_3_3V_REFERENCE 0x08 |
#define CFG_NO_RCOFF_BEEPING 0x10 |
#define CFG_GPS_AID 0x20 |
#define CFG_LEARNABLE_CAREFREE 0x40 |
#define CFG_IGNORE_MAG_ERR_AT_STARTUP 0x80 |
// bit mask for ParamSet.Config0 |
#define CFG0_AIRPRESS_SENSOR 0x01 |
#define CFG0_HEIGHT_SWITCH 0x02 |
#define CFG0_HEADING_HOLD 0x04 |
#define CFG0_COMPASS_ACTIVE 0x08 |
#define CFG0_COMPASS_FIX 0x10 |
#define CFG0_GPS_ACTIVE 0x20 |
#define CFG0_AXIS_COUPLING_ACTIVE 0x40 |
#define CFG0_ROTARY_RATE_LIMITER 0x80 |
// bitcoding for EE_Parameter.ServoCompInvert |
#define SERVO_NICK_INV 0x01 |
#define SERVO_ROLL_INV 0x02 |
#define SERVO_RELATIVE 0x04 // direct poti control or relative moving of the servo value |
// defines for the receiver selection |
#define RECEIVER_PPM 0 |
#define RECEIVER_SPEKTRUM 1 |
#define RECEIVER_SPEKTRUM_HI_RES 2 |
#define RECEIVER_SPEKTRUM_LOW_RES 3 |
#define RECEIVER_JETI 4 |
#define RECEIVER_ACT_DSL 5 |
#define RECEIVER_HOTT 6 |
#define RECEIVER_SBUS 7 |
#define RECEIVER_USER 8 |
#define RECEIVER_UNKNOWN 0xFF |
// defines for lookup ParamSet.ChannelAssignment |
#define K_NICK 0 |
#define K_ROLL 1 |
#define K_GAS 2 |
#define K_GIER 3 |
#define K_POTI1 4 |
#define K_POTI2 5 |
#define K_POTI3 6 |
#define K_POTI4 7 |
#define K_POTI5 8 |
#define K_POTI6 9 |
#define K_POTI7 10 |
#define K_POTI8 11 |
// values above 247 representing poti1 to poti8 |
// poti1 = 255 |
// poti2 = 254 |
// poti3 = 253 |
// poti4 = 252 |
// poti5 = 251 |
// poti6 = 250 |
// poti7 = 249 |
// poti8 = 248 |
typedef struct |
{ |
unsigned char Revision; |
unsigned char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3 |
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv |
unsigned char Hoehe_MinGas; // Wert : 0-100 |
unsigned char Luftdruck_D; // Wert : 0-250 |
unsigned char HoeheChannel; // Wert : 0-32 |
unsigned char Hoehe_P; // Wert : 0-32 |
unsigned char Hoehe_Verstaerkung; // Wert : 0-50 |
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250 |
unsigned char Hoehe_HoverBand; // Wert : 0-250 |
unsigned char Hoehe_GPS_Z; // Wert : 0-250 |
unsigned char Hoehe_StickNeutralPoint;// Wert : 0-250 |
unsigned char Stick_P; // Wert : 1-6 |
unsigned char Stick_D; // Wert : 0-64 |
unsigned char StickGier_P; // Wert : 1-20 |
unsigned char Gas_Min; // Wert : 0-32 |
unsigned char Gas_Max; // Wert : 33-250 |
unsigned char GyroAccFaktor; // Wert : 1-64 |
unsigned char KompassWirkung; // Wert : 0-32 |
unsigned char Gyro_P; // Wert : 10-250 |
unsigned char Gyro_I; // Wert : 0-250 |
unsigned char Gyro_D; // Wert : 0-250 |
unsigned char Gyro_Gier_P; // Wert : 10-250 |
unsigned char Gyro_Gier_I; // Wert : 0-250 |
unsigned char Gyro_Stability; // Wert : 0-16 |
unsigned char UnterspannungsWarnung; // Wert : 0-250 |
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust |
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen |
unsigned char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D |
unsigned char I_Faktor; // Wert : 0-250 |
unsigned char UserParam1; // Wert : 0-250 |
unsigned char UserParam2; // Wert : 0-250 |
unsigned char UserParam3; // Wert : 0-250 |
unsigned char UserParam4; // Wert : 0-250 |
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos |
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo |
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag |
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag |
//--- Seit V0.75 |
unsigned char ServoRollControl; // Wert : 0-250 // Stellung des Servos |
unsigned char ServoRollComp; // Wert : 0-250 |
unsigned char ServoRollMin; // Wert : 0-250 |
unsigned char ServoRollMax; // Wert : 0-250 |
//--- |
unsigned char ServoNickRefresh; // Speed of the Servo |
unsigned char ServoManualControlSpeed;// |
unsigned char CamOrientation; // |
unsigned char Servo3; // Value or mapping of the Servo Output |
unsigned char Servo4; // Value or mapping of the Servo Output |
unsigned char Servo5; // Value or mapping of the Servo Output |
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping |
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag |
unsigned char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag |
unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung) |
unsigned char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden |
unsigned char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden |
unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt |
unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt |
unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung) |
unsigned char Driftkomp; |
unsigned char DynamicStability; |
unsigned char UserParam5; // Wert : 0-250 |
unsigned char UserParam6; // Wert : 0-250 |
unsigned char UserParam7; // Wert : 0-250 |
unsigned char UserParam8; // Wert : 0-250 |
//---Output --------------------------------------------- |
unsigned char J16Bitmask; // for the J16 Output |
unsigned char J16Timing; // for the J16 Output |
unsigned char J17Bitmask; // for the J17 Output |
unsigned char J17Timing; // for the J17 Output |
// seit version V0.75c |
unsigned char WARN_J16_Bitmask; // for the J16 Output |
unsigned char WARN_J17_Bitmask; // for the J17 Output |
//---NaviCtrl--------------------------------------------- |
unsigned char AutoPhotoDistance; // Auto Photo |
unsigned char NaviGpsModeChannel; // Parameters for the Naviboard |
unsigned char NaviGpsGain; |
unsigned char NaviGpsP; |
unsigned char NaviGpsI; |
unsigned char NaviGpsD; |
unsigned char NaviGpsPLimit; |
unsigned char NaviGpsILimit; |
unsigned char NaviGpsDLimit; |
unsigned char NaviGpsA; |
unsigned char NaviGpsMinSat; |
unsigned char NaviStickThreshold; |
unsigned char NaviWindCorrection; |
unsigned char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation |
unsigned char NaviMaxFlyingRange; // in 10m |
unsigned char NaviAngleLimitation; |
unsigned char NaviPH_LoginTime; |
unsigned char NaviDescendRange; |
//---Ext.Ctrl--------------------------------------------- |
unsigned char ExternalControl; // for serial Control |
//---CareFree--------------------------------------------- |
unsigned char OrientationAngle; // Where is the front-direction? |
unsigned char CareFreeChannel; // switch for CareFree |
unsigned char MotorSafetySwitch; |
unsigned char MotorSmooth; |
unsigned char ComingHomeAltitude; |
unsigned char FailSafeTime; |
unsigned char MaxAltitude; |
unsigned char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost" |
unsigned char ServoFilterNick; |
unsigned char ServoFilterRoll; |
unsigned char Servo3OnValue; |
unsigned char Servo3OffValue; |
unsigned char Servo4OnValue; |
unsigned char Servo4OffValue; |
unsigned char StartLandChannel; |
unsigned char LandingSpeed; |
unsigned char CompassOffset; |
unsigned char AutoLandingVoltage; // in 0,1V 0 -> disabled |
unsigned char ComingHomeVoltage; // in 0,1V 0 -> disabled |
unsigned char AutoPhotoAtitudes; |
unsigned char SingleWpSpeed; |
//------------------------------------------------ |
unsigned char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
unsigned char ServoCompInvert; // // 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen |
unsigned char ExtraConfig; // bitcodiert |
unsigned char GlobalConfig3; // bitcodiert |
char Name[12]; |
unsigned char crc; // must be the last byte! |
} paramset_t; // 127 bytes |
#define PARAMSET_STRUCT_LEN sizeof(paramset_t) |
extern paramset_t EE_Parameter; |
extern uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len); |
extern void ParamSet_Init(void); |
extern void SetDefaultParameter(uint8_t set, uint8_t restore_channels); |
extern uint8_t ParamSet_ReadFromEEProm(uint8_t setnumber); |
extern uint8_t ParamSet_WriteToEEProm(uint8_t setnumber); |
extern uint8_t GetActiveParamSet(void); |
extern void SetActiveParamSet(uint8_t setnumber); |
extern uint8_t MixerTable_ReadFromEEProm(void); |
extern uint8_t MixerTable_WriteToEEProm(void); |
extern uint8_t GetParamByte(uint16_t param_id); |
extern void SetParamByte(uint16_t param_id, uint8_t value); |
extern uint16_t GetParamWord(uint16_t param_id); |
extern void SetParamWord(uint16_t param_id, uint16_t value); |
#endif //_EEPROM_H |
/tags/V2.06e/fc.c |
---|
0,0 → 1,2281 |
/*####################################################################################### |
Flight Control |
#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "mymath.h" |
#include "isqrt.h" |
unsigned char h,m,s; |
unsigned int BaroExpandActive = 0; |
int MesswertNick,MesswertRoll,MesswertGier,MesswertGierBias, RohMesswertNick,RohMesswertRoll; |
int TrimNick, TrimRoll; |
int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0; |
int Mittelwert_AccNick, Mittelwert_AccRoll; |
unsigned int NeutralAccX=0, NeutralAccY=0; |
int NaviAccNick, NaviAccRoll,NaviCntAcc = 0; |
int NeutralAccZ = 0; |
signed char NeutralAccZfine = 0; |
unsigned char ControlHeading = 0;// in 2° |
long IntegralNick = 0,IntegralNick2 = 0; |
long IntegralRoll = 0,IntegralRoll2 = 0; |
long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0; |
long Integral_Gier = 0; |
long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0; |
long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0; |
long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0; |
long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2; |
long SummeNick=0,SummeRoll=0; |
volatile long Mess_Integral_Hoch = 0; |
int KompassValue = -1; |
int KompassSollWert = 0; |
//int KompassRichtung = 0; |
char CalculateCompassTimer = 100; |
unsigned char KompassFusion = 32; |
unsigned int KompassSignalSchlecht = 50; |
unsigned char MAX_GAS,MIN_GAS; |
unsigned char HoehenReglerAktiv = 0; |
unsigned char TrichterFlug = 0; |
long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L; |
long ErsatzKompass; |
int ErsatzKompassInGrad, CompassCorrected; // Kompasswert in Grad |
int GierGyroFehler = 0; |
char GyroFaktor,GyroFaktorGier; |
char IntegralFaktor,IntegralFaktorGier; |
int DiffNick,DiffRoll; |
unsigned int StickGasHover = 127; |
int HoverGasMin = 0, HoverGasMax = 1023; |
int StickNick = 0,StickRoll = 0,StickGier = 0,StickGas = 0; |
//int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0, Poti5 = 0, Poti6 = 0, Poti7 = 0, Poti8 = 0; |
unsigned char Poti[9] = {0,0,0,0,0,0,0,0}; |
volatile unsigned char SenderOkay = 0; |
char MotorenEin = 0,StartTrigger = 0; |
long HoehenWert = 0; |
long SollHoehe = 0; |
signed int AltitudeSetpointTrimming = 0; |
long FromNC_AltitudeSetpoint = 0; |
unsigned char FromNC_AltitudeSpeed = 0; |
unsigned char carefree_old = 50; // to make the Beep when switching |
signed char WaypointTrimming = 0; |
int CompassGierSetpoint = 0; |
unsigned char CalibrationDone = 0; |
char NeueKompassRichtungMerken = 0; |
int LageKorrekturRoll = 0,LageKorrekturNick = 0, HoverGas = 0; |
//float Ki = FAKTOR_I; |
int Ki = 10300 / 33; |
unsigned char Looping_Nick = 0,Looping_Roll = 0; |
unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
unsigned char Parameter_HoehenSchalter = 0; // Wert : 0-250 |
unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32 |
unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250 |
unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250 |
unsigned char Parameter_Hoehe_GPS_Z = 64; // Wert : 0-250 |
unsigned char Parameter_Gyro_D = 8; // Wert : 0-250 |
unsigned char Parameter_Gyro_P = 150; // Wert : 10-250 |
unsigned char Parameter_Gyro_I = 150; // Wert : 0-250 |
unsigned char Parameter_Gyro_Gier_P = 150; // Wert : 10-250 |
unsigned char Parameter_Gyro_Gier_I = 150; // Wert : 10-250 |
unsigned char Parameter_Gier_P = 2; // Wert : 1-20 |
unsigned char Parameter_I_Faktor = 10; // Wert : 1-20 |
unsigned char Parameter_UserParam1 = 0; |
unsigned char Parameter_UserParam2 = 0; |
unsigned char Parameter_UserParam3 = 0; |
unsigned char Parameter_UserParam4 = 0; |
unsigned char Parameter_UserParam5 = 0; |
unsigned char Parameter_UserParam6 = 0; |
unsigned char Parameter_UserParam7 = 0; |
unsigned char Parameter_UserParam8 = 0; |
unsigned char Parameter_NickControl = 100; |
unsigned char Parameter_ServoNickControl = 100; |
unsigned char Parameter_ServoRollControl = 100; |
unsigned char Parameter_ServoNickComp = 50; |
unsigned char Parameter_ServoRollComp = 85; |
unsigned char Parameter_LoopGasLimit = 70; |
unsigned char Parameter_AchsKopplung1 = 90; |
unsigned char Parameter_AchsKopplung2 = 65; |
unsigned char Parameter_CouplingYawCorrection = 64; |
//unsigned char Parameter_AchsGegenKopplung1 = 0; |
unsigned char Parameter_DynamicStability = 100; |
unsigned char Parameter_J16Bitmask; // for the J16 Output |
unsigned char Parameter_J16Timing; // for the J16 Output |
unsigned char Parameter_J17Bitmask; // for the J17 Output |
unsigned char Parameter_J17Timing; // for the J17 Output |
unsigned char Parameter_NaviGpsGain; |
unsigned char Parameter_NaviGpsP; |
unsigned char Parameter_NaviGpsI; |
unsigned char Parameter_NaviGpsD; |
unsigned char Parameter_NaviGpsA; |
//unsigned char Parameter_NaviOperatingRadius; |
unsigned char Parameter_NaviWindCorrection; |
unsigned char Parameter_NaviSpeedCompensation; |
unsigned char Parameter_ExternalControl; |
unsigned char Parameter_GlobalConfig; |
unsigned char Parameter_ExtraConfig; |
unsigned char Parameter_MaximumAltitude; |
unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5; |
unsigned char CareFree = 0; |
const signed char sintab[31] = { 0, 2, 4, 6, 7, 8, 8, 8, 7, 6, 4, 2, 0, -2, -4, -6, -7, -8, -8, -8, -7, -6, -4, -2, 0, 2, 4, 6, 7, 8, 8}; // 15° steps |
signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
int MaxStickNick = 0,MaxStickRoll = 0; |
unsigned int modell_fliegt = 0; |
volatile unsigned char FC_StatusFlags = 0, FC_StatusFlags2 = 0; |
long GIER_GRAD_FAKTOR = 1291; |
signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
signed int tmp_motorwert[MAX_MOTORS]; |
char VarioCharacter = ' '; |
unsigned int HooverGasEmergencyPercent = 0; // The gas value for Emergency landing |
unsigned int GasIsZeroCnt = 0; // to detect that the gas-stick is down for a while |
signed int Variance = 0; |
signed int CosAttitude; // for projection of hoover gas |
unsigned char ACC_AltitudeControl = 0; |
unsigned char LowVoltageLandingActive = 0; |
unsigned char LowVoltageHomeActive = 0; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#define OPA_OFFSET_STEP 5 |
#else |
#define OPA_OFFSET_STEP 10 |
#endif |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Debugwerte zuordnen |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
void CopyDebugValues(void) |
{ |
DebugOut.Analog[0] = ToNaviCtrl.IntegralNick;//IntegralNick / (EE_Parameter.GyroAccFaktor * 4); |
DebugOut.Analog[1] = ToNaviCtrl.IntegralRoll;//IntegralRoll / (EE_Parameter.GyroAccFaktor * 4); |
DebugOut.Analog[2] = Mittelwert_AccNick / 4; |
DebugOut.Analog[3] = Mittelwert_AccRoll / 4; |
DebugOut.Analog[4] = (signed int) AdNeutralGier - AdWertGier; |
DebugOut.Analog[5] = HoehenWert/10; |
DebugOut.Analog[6] = Aktuell_az;//AdWertAccHoch;//(Mess_Integral_Hoch / 512); |
DebugOut.Analog[8] = KompassValue; |
DebugOut.Analog[9] = UBat; |
DebugOut.Analog[10] = SenderOkay; |
DebugOut.Analog[11] = ErsatzKompassInGrad; |
DebugOut.Analog[12] = Motor[0].SetPoint; |
DebugOut.Analog[13] = Motor[1].SetPoint; |
DebugOut.Analog[14] = Motor[2].SetPoint; |
DebugOut.Analog[15] = Motor[3].SetPoint; |
DebugOut.Analog[20] = ServoNickValue; |
DebugOut.Analog[21] = HoverGas; |
DebugOut.Analog[22] = Capacity.ActualCurrent; |
DebugOut.Analog[23] = Capacity.UsedCapacity; |
DebugOut.Analog[24] = SollHoehe/10; |
// DebugOut.Analog[27] = KompassSollWert; |
DebugOut.Analog[29] = Capacity.MinOfMaxPWM; |
DebugOut.Analog[30] = GPS_Nick; |
DebugOut.Analog[31] = GPS_Roll; |
if(VersionInfo.HardwareError[0] || VersionInfo.HardwareError[1]) DebugOut.Status[1] |= 1; else DebugOut.Status[1] &= 0xfe; |
//DebugOut.Analog[16] = MinBlTemperture; |
//DebugOut.Analog[17] = MaxBlTemperture; |
//DebugOut.Analog[16] = Variance; |
//DebugOut.Analog[17] = VarioMeter; |
//DebugOut.Analog[16] = GasIsZeroCnt; |
//DebugOut.Analog[18] = HoehenWertF; |
//DebugOut.Analog[25] = Parameter_Hoehe_P; |
//DebugOut.Analog[26] = Parameter_Luftdruck_D; |
} |
void Piep(unsigned char Anzahl, unsigned int dauer) |
{ |
unsigned int wait = 0; |
if(MotorenEin) return; //auf keinen Fall im Flug! |
GRN_OFF; |
while(Anzahl--) |
{ |
beeptime = dauer; |
wait = dauer; |
while(beeptime || wait) |
{ |
if(UpdateMotor) |
{ |
UpdateMotor = 0; |
if(!beeptime) wait--; |
LIBFC_Polling(); |
}; |
} |
} |
GRN_ON; |
} |
//############################################################################ |
// Messwerte beim Ermitteln der Nullage |
void CalibrierMittelwert(void) |
//############################################################################ |
{ |
// if(PlatinenVersion == 13) SucheGyroOffset(); |
// ADC auschalten, damit die Werte sich nicht während der Berechnung ändern |
ANALOG_OFF; |
MesswertNick = AdWertNick; |
MesswertRoll = AdWertRoll; |
MesswertGier = AdWertGier; |
Mittelwert_AccNick = ACC_AMPLIFY * AdWertAccNick; |
Mittelwert_AccRoll = ACC_AMPLIFY * AdWertAccRoll; |
// ADC einschalten |
ANALOG_ON; |
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L; |
} |
//############################################################################ |
// Nullwerte ermitteln |
// Parameter: 0 -> after switch on (ignore ACC-Z fault) |
// Parameter: 1 -> before Start |
// Parameter: 2 -> calibrate and store ACC |
unsigned char SetNeutral(unsigned char AdjustmentMode) // retuns: "sucess" |
//############################################################################ |
{ |
unsigned char i, sucess = 1; |
unsigned int gier_neutral = 0, nick_neutral = 0, roll_neutral = 0, acc_z_neutral = 0, barotest; |
VersionInfo.HardwareError[0] = 0; |
// HEF4017Reset_ON; |
NeutralAccX = 0; |
NeutralAccY = 0; |
NeutralAccZ = 0; |
NeutralAccZfine = 0; |
AdNeutralNick = 0; |
AdNeutralRoll = 0; |
AdNeutralGier = 0; |
Parameter_AchsKopplung1 = 0; |
Parameter_AchsKopplung2 = 0; |
ExpandBaro = 0; |
CalibrierMittelwert(); |
Delay_ms_Mess(100); |
CalibrierMittelwert(); |
DebugOut.Analog[16] = 0; |
DebugOut.Analog[17] = 0; |
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
{ |
if((MessLuftdruck > 950) || (MessLuftdruck < 750) || ExpandBaro) SucheLuftruckOffset(); |
} |
barotest = MessLuftdruck; |
#define NEUTRAL_FILTER 32 |
OCR0A += OPA_OFFSET_STEP; |
OCR0B = 255 - OCR0A; |
for(i=0; i<NEUTRAL_FILTER; i++) |
{ |
Delay_ms_Mess(10); |
gier_neutral += AdWertGier; |
nick_neutral += AdWertNick; |
roll_neutral += AdWertRoll; |
acc_z_neutral += Aktuell_az; |
} |
if(MessLuftdruck < 1010 && MessLuftdruck > 20) BaroStep = barotest - MessLuftdruck; |
OCR0A -= OPA_OFFSET_STEP; |
OCR0B = 255 - OCR0A; |
AdNeutralNick = (nick_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER / 8); |
AdNeutralRoll = (roll_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER / 8); |
AdNeutralGier = (gier_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER); |
NeutralAccZ = (acc_z_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER); |
StartNeutralRoll = AdNeutralRoll; |
StartNeutralNick = AdNeutralNick; |
if(AdjustmentMode == 2) |
{ |
NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY); |
NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY); |
// Save ACC neutral settings to eeprom |
SetParamWord(PID_ACC_NICK, (uint16_t)NeutralAccX); |
SetParamWord(PID_ACC_ROLL, (uint16_t)NeutralAccY); |
SetParamWord(PID_ACC_TOP, (uint16_t)NeutralAccZ); |
} |
else |
{ |
// restore from eeprom |
NeutralAccX = (int16_t)GetParamWord(PID_ACC_NICK); |
NeutralAccY = (int16_t)GetParamWord(PID_ACC_ROLL); |
// strange settings? |
if(((unsigned int) NeutralAccX > 2048) || ((unsigned int) NeutralAccY > 2048)/* || ((unsigned int) NeutralAccZ > 1024)*/) |
{ |
printf("\n\rACC not calibrated!\r\n"); |
NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY); |
NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY); |
sucess = 0; |
} |
} |
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space |
MesswertNick = 0; |
MesswertRoll = 0; |
MesswertGier = 0; |
Delay_ms_Mess(200); |
Mittelwert_AccNick = ACC_AMPLIFY * AdWertAccNick; |
Mittelwert_AccRoll = ACC_AMPLIFY * AdWertAccRoll; |
IntegralNick = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccNick; |
IntegralRoll = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccRoll; |
Mess_IntegralNick = IntegralNick; |
Mess_IntegralRoll = IntegralRoll; |
Mess_Integral_Gier = 0; |
KompassSollWert = KompassValue; |
KompassSignalSchlecht = 100; |
beeptime = 50; |
Umschlag180Nick = ((long) EE_Parameter.WinkelUmschlagNick * 2500L) + 15000L; |
Umschlag180Roll = ((long) EE_Parameter.WinkelUmschlagRoll * 2500L) + 15000L; |
ExternHoehenValue = 0; |
ErsatzKompass = KompassValue * GIER_GRAD_FAKTOR; |
GierGyroFehler = 0; |
LED_Init(); |
if(AdjustmentMode != 0) FC_StatusFlags |= FC_STATUS_CALIBRATE; |
FromNaviCtrl_Value.Kalman_K = -1; |
FromNaviCtrl_Value.Kalman_MaxDrift = 0; |
FromNaviCtrl_Value.Kalman_MaxFusion = 32; |
SenderOkay = 100; |
if(ServoActive) DDRD |=0x80; // enable J7 -> Servo signal |
else |
{ |
if((EE_Parameter.ServoCompInvert & SERVO_NICK_INV) && (EE_Parameter.ServoCompInvert & SERVO_RELATIVE)) NickServoValue = 12000;//((128 + 60) * 4 * 16); // neutral position = upper 1/4// else |
else NickServoValue = ((128 - 60) * 4 * 16); // neutral position = lower 1/4 |
CalculateServoSignals = 1; |
CalculateServo(); // nick |
CalculateServo(); // roll |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
signed int tilt1, tilt2; |
tilt1 = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
tilt2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg |
tilt1 = (int16_t)ihypot(tilt1,tilt2); // tilt angle over all |
CosAttitude = c_cos_8192(tilt1); |
NeutralAccZ = (long)((long) (NeutralAccZ - 512) * 8192 + 4096) / CosAttitude + 512; |
if(tilt1 > 20) sucess = 0; // calibration must be within 20° Tilt angle |
if(AdjustmentMode != 0 && ACC_AltitudeControl) if((NeutralAccZ < 682 - 30) || (NeutralAccZ > 682 + 35)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_TOP; sucess = 0;}; |
#else |
NeutralAccZ = (int16_t)GetParamWord(PID_ACC_TOP); |
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space |
#endif |
if((AdNeutralNick < 150 * 16) || (AdNeutralNick > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; }; |
if((AdNeutralRoll < 150 * 16) || (AdNeutralRoll > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; }; |
if((AdNeutralGier < 150 * 2) || (AdNeutralGier > 850 * 2)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; }; |
if((NeutralAccX < 300) || (NeutralAccX > 750)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_NICK; }; |
if((NeutralAccY < 300) || (NeutralAccY > 750)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_ROLL; }; |
if((NeutralAccZ < 512) || (NeutralAccZ > 850)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_TOP; }; |
if(VersionInfo.HardwareError[0]) sucess = 0; |
carefree_old = 70; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
LIBFC_HoTT_Clear(); |
ACC_AltitudeFusion(2); // initalisation |
#endif |
StartLuftdruck = Luftdruck; |
VarioMeter = 0; |
SummenHoehe = 0; Mess_Integral_Hoch = 0; |
DebugOut.Analog[28] = 0; // I2C-Counter |
CalcExpandBaroStep(); |
return(sucess); |
} |
//############################################################################ |
// Bearbeitet die Messwerte |
void Mittelwert(void) |
//############################################################################ |
{ |
static signed long tmpl,tmpl2,tmpl3,tmpl4; |
static signed int oldNick, oldRoll, d2Roll, d2Nick; |
signed long winkel_nick, winkel_roll; |
MesswertGier = (signed int) AdNeutralGier - AdWertGier; |
MesswertNick = (signed int) AdWertNickFilter / 8; |
MesswertRoll = (signed int) AdWertRollFilter / 8; |
RohMesswertNick = MesswertNick; |
RohMesswertRoll = MesswertRoll; |
// Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mittelwert_AccNick = (Mittelwert_AccNick * 3 + ((ACC_AMPLIFY * AdWertAccNick))) / 4L; |
Mittelwert_AccRoll = (Mittelwert_AccRoll * 3 + ((ACC_AMPLIFY * AdWertAccRoll))) / 4L; |
IntegralAccNick += ACC_AMPLIFY * AdWertAccNick; |
IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll; |
NaviAccNick += AdWertAccNick; |
NaviAccRoll += AdWertAccRoll; |
NaviCntAcc++; |
IntegralAccZ += Aktuell_az - NeutralAccZ; |
//++++++++++++++++++++++++++++++++++++++++++++++++ |
// ADC einschalten |
ANALOG_ON; |
AdReady = 0; |
//++++++++++++++++++++++++++++++++++++++++++++++++ |
if(Mess_IntegralRoll > 93000L) winkel_roll = 93000L; |
else if(Mess_IntegralRoll <-93000L) winkel_roll = -93000L; |
else winkel_roll = Mess_IntegralRoll; |
if(Mess_IntegralNick > 93000L) winkel_nick = 93000L; |
else if(Mess_IntegralNick <-93000L) winkel_nick = -93000L; |
else winkel_nick = Mess_IntegralNick; |
// Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mess_Integral_Gier += MesswertGier; |
ErsatzKompass += MesswertGier; |
// Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
if(!Looping_Nick && !Looping_Roll && (Parameter_GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) |
{ |
tmpl3 = (MesswertRoll * winkel_nick) / 2048L; |
tmpl3 *= Parameter_AchsKopplung2; //65 |
tmpl3 /= 4096L; |
tmpl4 = (MesswertNick * winkel_roll) / 2048L; |
tmpl4 *= Parameter_AchsKopplung2; //65 |
tmpl4 /= 4096L; |
KopplungsteilNickRoll = tmpl3; |
KopplungsteilRollNick = tmpl4; |
tmpl4 -= tmpl3; |
ErsatzKompass += tmpl4; |
if(!Parameter_CouplingYawCorrection) Mess_Integral_Gier -= tmpl4/2; // Gier nachhelfen |
tmpl = ((MesswertGier + tmpl4) * winkel_nick) / 2048L; |
tmpl *= Parameter_AchsKopplung1; // 90 |
tmpl /= 4096L; |
tmpl2 = ((MesswertGier + tmpl4) * winkel_roll) / 2048L; |
tmpl2 *= Parameter_AchsKopplung1; |
tmpl2 /= 4096L; |
if(abs(MesswertGier) > 64) if(labs(tmpl) > 128 || labs(tmpl2) > 128) TrichterFlug = 1; |
//MesswertGier += (Parameter_CouplingYawCorrection * tmpl4) / 256; |
} |
else tmpl = tmpl2 = KopplungsteilNickRoll = KopplungsteilRollNick = 0; |
TrimRoll = tmpl - tmpl2 / 100L; |
TrimNick = -tmpl2 + tmpl / 100L; |
// Kompasswert begrenzen ++++++++++++++++++++++++++++++++++++++++++++++++ |
if(ErsatzKompass >= (360L * GIER_GRAD_FAKTOR)) ErsatzKompass -= 360L * GIER_GRAD_FAKTOR; // 360° Umschlag |
if(ErsatzKompass < 0) ErsatzKompass += 360L * GIER_GRAD_FAKTOR; |
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mess_IntegralRoll2 += MesswertRoll + TrimRoll; |
Mess_IntegralRoll += MesswertRoll + TrimRoll - LageKorrekturRoll; |
if(Mess_IntegralRoll > Umschlag180Roll) |
{ |
Mess_IntegralRoll = -(Umschlag180Roll - 25000L); |
Mess_IntegralRoll2 = Mess_IntegralRoll; |
} |
if(Mess_IntegralRoll <-Umschlag180Roll) |
{ |
Mess_IntegralRoll = (Umschlag180Roll - 25000L); |
Mess_IntegralRoll2 = Mess_IntegralRoll; |
} |
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mess_IntegralNick2 += MesswertNick + TrimNick; |
Mess_IntegralNick += MesswertNick + TrimNick - LageKorrekturNick; |
if(Mess_IntegralNick > Umschlag180Nick) |
{ |
Mess_IntegralNick = -(Umschlag180Nick - 25000L); |
Mess_IntegralNick2 = Mess_IntegralNick; |
} |
if(Mess_IntegralNick <-Umschlag180Nick) |
{ |
Mess_IntegralNick = (Umschlag180Nick - 25000L); |
Mess_IntegralNick2 = Mess_IntegralNick; |
} |
Integral_Gier = Mess_Integral_Gier; |
IntegralNick = Mess_IntegralNick; |
IntegralRoll = Mess_IntegralRoll; |
IntegralNick2 = Mess_IntegralNick2; |
IntegralRoll2 = Mess_IntegralRoll2; |
#define D_LIMIT 128 |
MesswertNick = HiResNick / 8; |
MesswertRoll = HiResRoll / 8; |
if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000; |
// if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; } |
// else |
{ if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; } |
if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000; |
// if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; } |
// else |
{ if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; } |
if(Parameter_Gyro_D) |
{ |
d2Nick = HiResNick - oldNick; |
oldNick = (oldNick + HiResNick)/2; |
if(d2Nick > D_LIMIT) d2Nick = D_LIMIT; |
else if(d2Nick < -D_LIMIT) d2Nick = -D_LIMIT; |
d2Roll = HiResRoll - oldRoll; |
oldRoll = (oldRoll + HiResRoll)/2; |
if(d2Roll > D_LIMIT) d2Roll = D_LIMIT; |
else if(d2Roll < -D_LIMIT) d2Roll = -D_LIMIT; |
MesswertNick += (d2Nick * (signed int) Parameter_Gyro_D) / 16; |
MesswertRoll += (d2Roll * (signed int) Parameter_Gyro_D) / 16; |
HiResNick += (d2Nick * (signed int) Parameter_Gyro_D); |
HiResRoll += (d2Roll * (signed int) Parameter_Gyro_D); |
} |
if(RohMesswertRoll > 0) TrimRoll += ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L; |
else TrimRoll -= ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L; |
if(RohMesswertNick > 0) TrimNick += ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L; |
else TrimNick -= ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L; |
if(Parameter_GlobalConfig & CFG_DREHRATEN_BEGRENZER && !Looping_Nick && !Looping_Roll) |
{ |
if(RohMesswertNick > 256) MesswertNick += 1 * (RohMesswertNick - 256); |
else if(RohMesswertNick < -256) MesswertNick += 1 * (RohMesswertNick + 256); |
if(RohMesswertRoll > 256) MesswertRoll += 1 * (RohMesswertRoll - 256); |
else if(RohMesswertRoll < -256) MesswertRoll += 1 * (RohMesswertRoll + 256); |
} |
} |
//############################################################################ |
// Senden der Motorwerte per I2C-Bus |
void SendMotorData(void) |
//############################################################################ |
{ |
unsigned char i; |
if(!MotorenEin) |
{ |
FC_StatusFlags &= ~(FC_STATUS_MOTOR_RUN | FC_STATUS_FLY); |
FC_StatusFlags2 &= ~FC_STATUS2_WAIT_FOR_TAKEOFF; |
for(i=0;i<MAX_MOTORS;i++) |
{ |
if(!PC_MotortestActive) MotorTest[i] = 0; |
Motor[i].SetPoint = MotorTest[i]; |
Motor[i].SetPointLowerBits = 0; |
/* |
Motor[i].SetPoint = MotorTest[i] / 4; // testing the high resolution |
Motor[i].SetPointLowerBits = MotorTest[i] % 4; |
*/ |
} |
if(PC_MotortestActive) PC_MotortestActive--; |
} |
else FC_StatusFlags |= FC_STATUS_MOTOR_RUN; |
// ++++++++++++++++++++++++++++++++++++++++++ |
// ++++++++++++++++++++++++++++++++++++++++++ |
#ifdef REDUNDANT_FC_SLAVE |
I2CTimeout = 100; |
return; |
#endif |
#ifdef REDUNDANT_FC_MASTER |
if(Parameter_UserParam7 > 150) |
{ |
// Make noise |
if((BeepMuster == 0xffff)) { beeptime = 25000; BeepMuster = 0x0080; } |
// Do not send I2C-Data |
if(RedundanceBlOperation) |
{ |
I2CTimeout = 100; |
return; |
} |
} |
#endif |
if(I2C_TransferActive) |
{ |
I2C_TransferActive = 0; // enable for the next time |
} |
else |
{ |
// motor_write = 0; |
I2C_Start(TWI_STATE_MOTOR_TX); //Start I2C Interrupt Mode |
} |
} |
unsigned char GetChannelValue(unsigned char ch) // gives the unsigned value of the channel |
{ |
int tmp2; |
if(ch == 0) return(0); |
tmp2 = PPM_in[ch] + 127; |
if(tmp2 > 255) tmp2 = 255; else if(tmp2 < 0) tmp2 = 0; |
return(tmp2); |
} |
//############################################################################ |
// Trägt ggf. das Poti als Parameter ein |
void ParameterZuordnung(void) |
//############################################################################ |
{ |
unsigned char tmp,i; |
for(i=0;i<8;i++) |
{ |
int tmp2; |
tmp = EE_Parameter.Kanalbelegung[K_POTI1 + i]; |
tmp2 = PPM_in[tmp] + 127; |
if(tmp2 > 255) tmp2 = 255; else if(tmp2 < 0) tmp2 = 0; |
if(tmp == 25) Poti[i] = tmp2; // 25 = WaypointEvent channel -> no filter |
else |
if(tmp2 != Poti[i]) |
{ |
Poti[i] += (tmp2 - Poti[i]) / 4; |
if(Poti[i] > tmp2) Poti[i]--; |
else Poti[i]++; |
} |
} |
CHK_POTI_MM(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100); |
CHK_POTI_MM(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100); |
CHK_POTI_MM(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255); |
CHK_POTI_MM(Parameter_J16Timing,EE_Parameter.J16Timing,5,255); |
CHK_POTI_MM(Parameter_J17Timing,EE_Parameter.J17Timing,5,255); |
if(EE_Parameter.Servo3 == 247) { if(PORTC & (1<<PORTC2)) Parameter_Servo3 = EE_Parameter.Servo3OnValue; else Parameter_Servo3 = EE_Parameter.Servo3OffValue;} // Out1 (J16) |
else if(EE_Parameter.Servo3 == 246) { if(PORTC & (1<<PORTC3)) Parameter_Servo3 = EE_Parameter.Servo3OnValue; else Parameter_Servo3 = EE_Parameter.Servo3OffValue;} |
else CHK_POTI_MM(Parameter_Servo3,EE_Parameter.Servo3, 24, 255); |
if(EE_Parameter.Servo4 == 247) { if(PORTC & (1<<PORTC2)) Parameter_Servo4 = EE_Parameter.Servo4OnValue; else Parameter_Servo4 = EE_Parameter.Servo4OffValue;} |
else if(EE_Parameter.Servo4 == 246) { if(PORTC & (1<<PORTC3)) Parameter_Servo4 = EE_Parameter.Servo4OnValue; else Parameter_Servo4 = EE_Parameter.Servo4OffValue;} // Out2 (J17) |
else CHK_POTI_MM(Parameter_Servo4,EE_Parameter.Servo4, 24, 255); |
CHK_POTI_MM(Parameter_Servo5,EE_Parameter.Servo5, 24, 255); |
Parameter_HoehenSchalter = GetChannelValue(EE_Parameter.HoeheChannel); |
CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung); |
CHK_POTI(Parameter_Hoehe_GPS_Z,EE_Parameter.Hoehe_GPS_Z); |
CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung); |
CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I); |
CHK_POTI(Parameter_Gyro_D,EE_Parameter.Gyro_D); |
CHK_POTI(Parameter_Gyro_Gier_P,EE_Parameter.Gyro_Gier_P); |
CHK_POTI(Parameter_Gyro_Gier_I,EE_Parameter.Gyro_Gier_I); |
CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor); |
CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1); |
CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2); |
CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3); |
CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4); |
CHK_POTI(Parameter_UserParam5,EE_Parameter.UserParam5); |
CHK_POTI(Parameter_UserParam6,EE_Parameter.UserParam6); |
CHK_POTI(Parameter_UserParam7,EE_Parameter.UserParam7); |
CHK_POTI(Parameter_UserParam8,EE_Parameter.UserParam8); |
CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl); |
CHK_POTI(Parameter_ServoRollControl,EE_Parameter.ServoRollControl); |
CHK_POTI(Parameter_ServoNickComp,EE_Parameter.ServoNickComp); |
CHK_POTI(Parameter_ServoRollComp,EE_Parameter.ServoRollComp); |
CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit); |
CHK_POTI(Parameter_AchsKopplung1,EE_Parameter.AchsKopplung1); |
CHK_POTI(Parameter_AchsKopplung2,EE_Parameter.AchsKopplung2); |
CHK_POTI(Parameter_CouplingYawCorrection,EE_Parameter.CouplingYawCorrection); |
CHK_POTI(Parameter_MaximumAltitude,EE_Parameter.MaxAltitude); |
// if((NC_To_FC_MaxAltitude && NC_To_FC_MaxAltitude < Parameter_MaximumAltitude) || Parameter_MaximumAltitude == 0) Parameter_MaximumAltitude = NC_To_FC_MaxAltitude; |
Parameter_GlobalConfig = EE_Parameter.GlobalConfig; |
Parameter_ExtraConfig = EE_Parameter.ExtraConfig; |
// CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability); |
CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl); |
Ki = 10300 / (Parameter_I_Faktor + 1); |
MAX_GAS = EE_Parameter.Gas_Max; |
MIN_GAS = EE_Parameter.Gas_Min; |
if(EE_Parameter.CareFreeChannel) |
{ |
CareFree = 1; |
if(PPM_in[EE_Parameter.CareFreeChannel] < -64) CareFree = 0; |
// if(tmp >= 248 && Poti[255 - tmp] < 50) CareFree = 0; |
if(carefree_old != CareFree) |
{ |
if(carefree_old < 3) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(CareFree) { beeptime = 1500; if(!SpeakHoTT) SpeakHoTT = SPEAK_CF_ON; } |
else { beeptime = 200; if(!SpeakHoTT) SpeakHoTT = SPEAK_CF_OFF; } |
#else |
if(CareFree) beeptime = 1500; |
else beeptime = 200; |
#endif |
NeueKompassRichtungMerken = 5; |
carefree_old = CareFree; |
} else carefree_old--; |
} |
if(FromNaviCtrl.CompassValue < 0 && CareFree) VersionInfo.HardwareError[0] |= FC_ERROR0_CAREFREE; //else VersionInfo.HardwareError[0] &= ~FC_ERROR0_CAREFREE; |
} |
else |
{ |
CareFree = 0; |
carefree_old = 10; |
} |
if(FromNaviCtrl.CompassValue < 0 && MotorenEin && CareFree && BeepMuster == 0xffff) // ungültiger Kompasswert |
{ |
beeptime = 15000; |
BeepMuster = 0xA400; |
CareFree = 0; |
} |
if(CareFree) { FC_StatusFlags2 |= FC_STATUS2_CAREFREE; /*if(Parameter_AchsKopplung1 < 210) Parameter_AchsKopplung1 += 30;*/} else FC_StatusFlags2 &= ~FC_STATUS2_CAREFREE; |
} |
void CalcStickGasHover(void) |
{ |
if(!EE_Parameter.Hoehe_StickNeutralPoint) |
{ |
StickGasHover = HoverGas/STICK_GAIN; // rescale back to stick value |
StickGasHover = (unsigned int)((unsigned int) StickGasHover * UBat) / BattLowVoltageWarning; |
} |
else StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint; |
LIMIT_MIN_MAX(StickGasHover, 70, 175); // reserve some range for trim up and down |
} |
//############################################################################ |
// |
void MotorRegler(void) |
//############################################################################ |
{ |
int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2; |
int GierMischanteil,GasMischanteil; |
static long sollGier = 0,tmp_long,tmp_long2; |
static long IntegralFehlerNick = 0; |
static long IntegralFehlerRoll = 0; |
static unsigned int RcLostTimer; |
static unsigned char delay_neutral = 0; |
static unsigned char delay_einschalten = 0,delay_ausschalten = 0; |
static signed char move_safety_switch = 0; |
static long ausgleichNick, ausgleichRoll; |
int IntegralNickMalFaktor,IntegralRollMalFaktor; |
unsigned char i; |
Mittelwert(); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gaswert ermitteln |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!(FC_StatusFlags & (FC_STATUS_EMERGENCY_LANDING | FC_STATUS2_RC_FAILSAVE_ACTIVE))) |
{ |
if(EE_Parameter.GlobalConfig3 & CFG3_VARIO_FAILSAFE) |
{ |
if(HoverGas && HoverGas < 150 * STICK_GAIN) |
{ |
HooverGasEmergencyPercent = (HoverGas/(STICK_GAIN) * EE_Parameter.NotGas) / 100; // i.e. 80% of Hovergas |
} |
else HooverGasEmergencyPercent = 45; // default if the Hoovergas was could not calculated yet |
} else HooverGasEmergencyPercent = EE_Parameter.NotGas; |
} |
if(GasIsZeroCnt == 30000) // in that case we have RC-Lost, but the MK is probably landed |
{ |
StickGas = 0; // Hold Gas down in that case |
HooverGasEmergencyPercent = MIN_GAS; |
} |
GasMischanteil = StickGas; |
if(GasMischanteil < MIN_GAS + 10) GasMischanteil = MIN_GAS + 10; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Empfang schlecht |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(SenderOkay < 100 && !(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE)) |
{ |
if(RcLostTimer) RcLostTimer--; |
else |
{ |
MotorenEin = 0; |
modell_fliegt = 0; |
FC_StatusFlags &= ~(FC_STATUS_EMERGENCY_LANDING | FC_STATUS_FLY); |
} |
ROT_ON; |
if(modell_fliegt > 1000 && Capacity.MinOfMaxPWM > 100) // wahrscheinlich in der Luft --> langsam absenken |
{ |
GasMischanteil = HooverGasEmergencyPercent; |
FC_StatusFlags |= FC_STATUS_EMERGENCY_LANDING; |
PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] = 0; |
PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] = 0; |
PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0; |
PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0; |
PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0; |
} |
else |
{ |
MotorenEin = 0; |
} |
} |
else |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Emfang gut |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(SenderOkay > 140) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
static unsigned int trigger = 1000; |
static unsigned char old_switch = 100; |
if(EE_Parameter.StartLandChannel && EE_Parameter.LandingSpeed) |
{ |
if(PPM_in[EE_Parameter.StartLandChannel] > 50) |
{ |
if(old_switch == 50) if(FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF) { FC_StatusFlags2 |= FC_STATUS2_AUTO_STARTING; SpeakHoTT = SPEAK_RISING;} |
FC_StatusFlags2 &= ~FC_STATUS2_AUTO_LANDING; |
old_switch = 150; |
} |
else |
if(PPM_in[EE_Parameter.StartLandChannel] < -50) |
{ |
if(old_switch == 150) { FC_StatusFlags2 |= FC_STATUS2_AUTO_LANDING; SpeakHoTT = SPEAK_SINKING;} |
FC_StatusFlags2 &= ~FC_STATUS2_AUTO_STARTING; |
old_switch = 50; |
} |
else |
{ |
FC_StatusFlags2 &= ~(FC_STATUS2_AUTO_STARTING | FC_STATUS2_AUTO_LANDING); |
} |
} |
#endif |
FC_StatusFlags &= ~FC_STATUS_EMERGENCY_LANDING; |
RcLostTimer = EE_Parameter.NotGasZeit * 50; |
if(GasMischanteil > 40 && MotorenEin) |
{ |
if(modell_fliegt < 0xffff) modell_fliegt++; |
} |
if((modell_fliegt < 256)) |
{ |
SummeNick = 0; |
SummeRoll = 0; |
sollGier = 0; |
Mess_Integral_Gier = 0; |
FC_StatusFlags2 |= FC_STATUS2_WAIT_FOR_TAKEOFF; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
old_switch = 100; |
#endif |
} |
else |
{ |
FC_StatusFlags |= FC_STATUS_FLY; |
if(FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if((NC_To_FC_Flags & NC_TO_FC_AUTOSTART || FC_StatusFlags2 & FC_STATUS2_AUTO_STARTING) && (VarioCharacter == '=') && ACC_AltitudeControl) |
{ |
FromNC_AltitudeSpeed = 80; |
FromNC_AltitudeSetpoint = 500; |
SollHoehe = 500; |
trigger = 1000; |
if(NC_To_FC_Flags & NC_TO_FC_AUTOSTART) SpeakHoTT = SPEAK_NEXT_WP; |
/* if(StartTrigger != 2) |
{ |
StartTrigger = 1; |
if(HoverGas < STICK_GAIN * 35) HoverGas = STICK_GAIN * 35; |
} |
*/ |
} |
// else FC_StatusFlags2 &= ~(FC_STATUS2_AUTO_STARTING); |
#endif |
if(HoehenWertF > 150 || HoehenWert < -350 || !(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
trigger = 1000; |
if(FC_StatusFlags2 & FC_STATUS2_AUTO_STARTING) { FromNC_AltitudeSpeed = 0; SollHoehe = 300;/*HoehenWertF + 100;*/} |
else SpeakHoTT = SPEAK_RISING; |
#endif |
FC_StatusFlags2 &= ~(FC_STATUS2_WAIT_FOR_TAKEOFF | FC_STATUS2_AUTO_STARTING | FC_STATUS2_AUTO_LANDING); |
} |
SummeNick = 0; |
SummeRoll = 0; |
Mess_Integral_Gier = 0; |
// sollGier = 0; |
if(modell_fliegt > 1000) modell_fliegt = 1000; // for the Hooverpoint-Estimation |
} |
else // Flying mode |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if((FC_StatusFlags2 & FC_STATUS2_AUTO_LANDING) && (VarioCharacter == 'v' || VarioCharacter == '=') && ACC_AltitudeControl) |
{ |
FromNC_AltitudeSpeed = EE_Parameter.LandingSpeed; |
FromNC_AltitudeSetpoint = -20000; |
} |
if(trigger < 1000) |
{ |
trigger++; |
SummeNick = 0; |
SummeRoll = 0; |
Mess_Integral_Gier = 0; |
SollHoehe = HoehenWertF - 300; |
if(trigger == 1000 && FC_StatusFlags2 & FC_STATUS2_AUTO_LANDING && VarioCharacter != '+') |
{ |
FC_StatusFlags2 &= ~FC_STATUS2_AUTO_LANDING; |
FC_StatusFlags2 |= FC_STATUS2_WAIT_FOR_TAKEOFF; // go back into starting state |
} |
} |
else |
if(ACC_AltitudeControl && (VarioCharacter == 'v' || VarioCharacter == '-') && HoehenWert < 1000 /*&& FromNC_AltitudeSetpoint < 0*/) |
{ |
if(Aktuell_az > 940) |
{ |
trigger = 0; |
SpeakHoTT = SPEAK_LANDING; |
}; |
} |
#endif |
} |
} // end of: modell_fliegt > 256 |
if((PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 80) && MotorenEin == 0) |
{ |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// auf Nullwerte kalibrieren |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte |
{ |
if(++delay_neutral > 200) // nicht sofort |
{ |
delay_neutral = 0; |
modell_fliegt = 0; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70) |
{ |
unsigned char setting=1; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5; |
SetActiveParamSet(setting); // aktiven Datensatz merken |
} |
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 30 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -70) |
{ |
WinkelOut.CalcState = 1; |
CalibrationDone = 0; |
beeptime = 1000; |
} |
else |
{ |
ParamSet_ReadFromEEProm(ActiveParamSet); |
LipoDetection(0); |
LIBFC_ReceiverInit(EE_Parameter.Receiver); |
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
{ |
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
} |
CalibrationDone = SetNeutral(1); |
ServoActive = 1; |
DDRD |=0x80; // enable J7 -> Servo signal |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(VersionInfo.HardwareError[0]) SpeakHoTT = SPEAK_ERR_SENSOR; |
else |
if(!CalibrationDone) SpeakHoTT = SPEAK_ERR_CALIBARTION; |
else SpeakHoTT = SPEAK_CALIBRATE; |
ShowSettingNameTime = 5; // for HoTT & Jeti |
#endif |
Piep(ActiveParamSet,120); |
} |
} |
} |
else |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) // ACC Neutralwerte speichern |
{ |
if(++delay_neutral > 200) // nicht sofort |
{ |
MotorenEin = 0; |
delay_neutral = 0; |
modell_fliegt = 0; |
CalibrationDone = SetNeutral(2); // store ACC values into EEPROM |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(VersionInfo.HardwareError[0]) SpeakHoTT = SPEAK_ERR_SENSOR; |
else |
if(!CalibrationDone) SpeakHoTT = SPEAK_ERR_CALIBARTION; |
else SpeakHoTT = SPEAK_CALIBRATE; |
#endif |
Piep(ActiveParamSet,120); |
} |
} |
else delay_neutral = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gas ist unten |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] < -100) |
{ |
if(PPM_diff[EE_Parameter.MotorSafetySwitch & 127] > 5) move_safety_switch = 100; |
else |
if(PPM_diff[EE_Parameter.MotorSafetySwitch & 127] < -5) move_safety_switch = -100; |
// Motoren Starten |
if(!MotorenEin) |
{ |
if((((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -100) && ((!(EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -75) || EE_Parameter.MotorSafetySwitch == 0))) |
|| (((EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] > -10 && move_safety_switch == 100))) |
{ |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Einschalten |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(CalibrationDone) FC_StatusFlags |= FC_STATUS_START; |
StartLuftdruck = Luftdruck; |
HoehenWertF = 0; |
HoehenWert = 0; |
SummenHoehe = 0; |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -100 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 100) && EE_Parameter.MotorSafetySwitch == 0) delay_einschalten = 0; |
if(++delay_einschalten > 253) |
{ |
if((abs(MesswertGier) > 32 || abs(MesswertNick) > 20) || abs(MesswertRoll) > 20) CalibrationDone = 0; // dann ist der Gyro defekt, schlecht kalibriert oder der MK dreht sich |
delay_einschalten = 0; |
if(!VersionInfo.HardwareError[0] && CalibrationDone && !NC_ErrorCode) |
{ |
modell_fliegt = 1; |
MotorenEin = 1; |
sollGier = 0; |
Mess_Integral_Gier = 0; |
Mess_Integral_Gier2 = 0; |
Mess_IntegralNick = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccNick; |
Mess_IntegralRoll = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccRoll; |
Mess_IntegralNick2 = IntegralNick; |
Mess_IntegralRoll2 = IntegralRoll; |
SummeNick = 0; |
SummeRoll = 0; |
// ControlHeading = (((int) EE_Parameter.OrientationAngle * 15 + KompassValue) % 360) / 2; |
NeueKompassRichtungMerken = 100; // 2 sekunden |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
SpeakHoTT = SPEAK_STARTING; |
#endif |
} |
else |
{ |
beeptime = 1500; // indicate missing calibration |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!CalibrationDone) SpeakHoTT = SPEAK_ERR_CALIBARTION; |
#endif |
} |
} |
} |
else delay_einschalten = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Auschalten |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
else // only if motors are running |
{ |
// if((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) && (PPM_in[EE_Parameter.MotorSafetySwitch] < -75 || EE_Parameter.MotorSafetySwitch == 0)) |
if((((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 100) && ((!(EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -75) || EE_Parameter.MotorSafetySwitch == 0))) |
|| (((EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -50 && move_safety_switch == -100))) |
{ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -100 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 100) && EE_Parameter.MotorSafetySwitch == 0) |
{ |
delay_ausschalten = 0; |
} |
else |
{ |
SummeNick = 0; |
SummeRoll = 0; |
StickNick = 0; |
StickRoll = 0; |
} |
if(++delay_ausschalten > 250) // nicht sofort |
{ |
MotorenEin = 0; |
delay_ausschalten = 0; |
modell_fliegt = 0; |
FC_StatusFlags2 &= ~(FC_STATUS2_WAIT_FOR_TAKEOFF | FC_STATUS2_AUTO_STARTING | FC_STATUS2_AUTO_LANDING); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
SpeakHoTT = SPEAK_MK_OFF; |
#endif |
} |
else |
if(delay_ausschalten == 100) beeptime = 3500; |
} |
else delay_ausschalten = 0; |
} |
if(GasIsZeroCnt < 1000) |
{ |
if(VarioMeter > -150) GasIsZeroCnt++; |
else if(GasIsZeroCnt) GasIsZeroCnt--; |
} |
} |
else // gas not at minimum |
{ |
move_safety_switch = 0; |
GasIsZeroCnt = 0; |
} |
} |
else // Empfang zwischen 100 und 140 -> schlecht |
{ |
if(GasIsZeroCnt >= 750) // gas-stick was down for 1.5 seconds before RC-Lost |
{ |
if((GPSInfo.HomeDistance < 40 * 10) && (HoehenWert < 15 * 100)) // and we are at the starting point -> maybe landed? |
{ |
GasIsZeroCnt = 30000; |
if(modell_fliegt > 1001) modell_fliegt = 1001; |
} |
} |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// neue Werte von der Funke |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!NewPpmData-- || (FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING)) |
{ |
static int stick_nick,stick_roll; |
unsigned char stick_p; |
ParameterZuordnung(); |
stick_p = EE_Parameter.Stick_P; |
stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4; |
stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4; |
stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// CareFree und freie Wahl der vorderen Richtung |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(CareFree) |
{ |
signed int nick, roll; |
nick = stick_nick / 4; |
roll = stick_roll / 4; |
StickNick = ((FromNC_Rotate_C * nick) + (FromNC_Rotate_S * roll)) / (32 / 4); |
StickRoll = ((FromNC_Rotate_C * roll) - (FromNC_Rotate_S * nick)) / (32 / 4); |
} |
else |
{ |
FromNC_Rotate_C = sintab[EE_Parameter.OrientationAngle + 6]; |
FromNC_Rotate_S = sintab[EE_Parameter.OrientationAngle]; |
StickNick = ((FromNC_Rotate_C * stick_nick) + (FromNC_Rotate_S * stick_roll)) / 8; |
StickRoll = ((FromNC_Rotate_C * stick_roll) - (FromNC_Rotate_S * stick_nick)) / 8; |
} |
StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; |
if(StickGier > 4) StickGier -= 4; else |
if(StickGier < -4) StickGier += 4; else StickGier = 0; |
if(GasIsZeroCnt > 512) // About to switch - off |
{ |
StickNick = StickNick/8; |
StickRoll = StickRoll/8; |
SummeNick = 0; |
SummeRoll = 0; |
} |
else |
if(GPS_Aid_StickMultiplikator) // in that case the GPS controls stronger |
{ |
StickNick = (GPS_Aid_StickMultiplikator * (StickNick / 8)) / 16; |
StickRoll = (GPS_Aid_StickMultiplikator * (StickRoll / 8)) / 16; |
} |
StickNick -= GPS_Nick; |
StickRoll -= GPS_Roll; |
StickGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 127; |
GyroFaktor = (Parameter_Gyro_P + 10.0); |
IntegralFaktor = Parameter_Gyro_I; |
GyroFaktorGier = (Parameter_Gyro_Gier_P + 10.0); |
IntegralFaktorGier = Parameter_Gyro_Gier_I; |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//+ Analoge Steuerung per Seriell |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128) |
{ |
StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P; |
StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P; |
StickGier += ExternControl.Gier; |
ExternHoehenValue = (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung; |
if(ExternControl.Gas < StickGas) StickGas = ExternControl.Gas; |
} |
if(StickGas < 0) StickGas = 0; |
if(Parameter_GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0; |
if(abs(StickNick/STICK_GAIN) > MaxStickNick) |
{ |
MaxStickNick = abs(StickNick)/STICK_GAIN; |
if(MaxStickNick > 100) MaxStickNick = 100; |
} |
else MaxStickNick--; |
if(abs(StickRoll/STICK_GAIN) > MaxStickRoll) |
{ |
MaxStickRoll = abs(StickRoll)/STICK_GAIN; |
if(MaxStickRoll > 100) MaxStickRoll = 100; |
} |
else MaxStickRoll--; |
if(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING) {MaxStickNick = 0; MaxStickRoll = 0;} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Looping? |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_LINKS) Looping_Links = 1; |
else |
{ |
{ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Links = 0; |
} |
} |
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < -EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_RECHTS) Looping_Rechts = 1; |
else |
{ |
if(Looping_Rechts) // Hysterese |
{ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Rechts = 0; |
} |
} |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_OBEN) Looping_Oben = 1; |
else |
{ |
if(Looping_Oben) // Hysterese |
{ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Oben = 0; |
} |
} |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_UNTEN) Looping_Unten = 1; |
else |
{ |
if(Looping_Unten) // Hysterese |
{ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Unten = 0; |
} |
} |
if(Looping_Links || Looping_Rechts) Looping_Roll = 1; else Looping_Roll = 0; |
if(Looping_Oben || Looping_Unten) { Looping_Nick = 1; Looping_Roll = 0; Looping_Links = 0; Looping_Rechts = 0;} else Looping_Nick = 0; |
} // Ende neue Funken-Werte |
if(Looping_Roll || Looping_Nick) |
{ |
if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit; |
TrichterFlug = 1; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Bei Empfangsausfall im Flug |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE) |
{ |
StickNick = -GPS_Nick; |
StickRoll = -GPS_Roll; |
StickGas = StickGasHover; |
StickGier = 0; |
Parameter_GlobalConfig &= ~(CFG_HEADING_HOLD | CFG_DREHRATEN_BEGRENZER); |
Parameter_GlobalConfig |= CFG_HOEHENREGELUNG | CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER | CFG_GPS_AKTIV; |
Parameter_ExtraConfig &= ~(CFG2_HEIGHT_LIMIT | CFG_LEARNABLE_CAREFREE | CFG2_VARIO_BEEP); |
Parameter_HoehenSchalter = 200; // switch on |
} |
else |
if(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING) |
{ |
StickGier = 0; |
StickNick = 0; |
StickRoll = 0; |
GyroFaktor = 90; |
IntegralFaktor = 120; |
GyroFaktorGier = 90; |
IntegralFaktorGier = 120; |
Looping_Roll = 0; |
Looping_Nick = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Integrale auf ACC-Signal abgleichen |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define ABGLEICH_ANZAHL 256L |
MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
MittelIntegralRoll += IntegralRoll; |
MittelIntegralNick2 += IntegralNick2; |
MittelIntegralRoll2 += IntegralRoll2; |
if(Looping_Nick || Looping_Roll) |
{ |
IntegralAccNick = 0; |
IntegralAccRoll = 0; |
MittelIntegralNick = 0; |
MittelIntegralRoll = 0; |
MittelIntegralNick2 = 0; |
MittelIntegralRoll2 = 0; |
Mess_IntegralNick2 = Mess_IntegralNick; |
Mess_IntegralRoll2 = Mess_IntegralRoll; |
ZaehlMessungen = 0; |
LageKorrekturNick = 0; |
LageKorrekturRoll = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin)) |
{ |
long tmp_long, tmp_long2; |
if(FromNaviCtrl_Value.Kalman_K > 0 /*&& !TrichterFlug*/) |
{ |
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccNick - FromNaviCtrl.AccErrorN)); |
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccRoll - FromNaviCtrl.AccErrorR)); |
tmp_long = (tmp_long * FromNaviCtrl_Value.Kalman_K) / (32 * 16); |
tmp_long2 = (tmp_long2 * FromNaviCtrl_Value.Kalman_K) / (32 * 16); |
if((MaxStickNick > 64) || (MaxStickRoll > 64)) |
{ |
tmp_long /= 2; |
tmp_long2 /= 2; |
} |
if(tmp_long > (long) FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long = (long) FromNaviCtrl_Value.Kalman_MaxFusion; |
if(tmp_long < (long)-FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long = (long)-FromNaviCtrl_Value.Kalman_MaxFusion; |
if(tmp_long2 > (long) FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long) FromNaviCtrl_Value.Kalman_MaxFusion; |
if(tmp_long2 < (long)-FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long)-FromNaviCtrl_Value.Kalman_MaxFusion; |
} |
else |
{ |
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick); |
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll); |
tmp_long /= 16; |
tmp_long2 /= 16; |
if((MaxStickNick > 64) || (MaxStickRoll > 64)) |
{ |
tmp_long /= 3; |
tmp_long2 /= 3; |
} |
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25) |
{ |
tmp_long /= 3; |
tmp_long2 /= 3; |
} |
KompassFusion = 25; |
#define AUSGLEICH 32 |
if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH; |
if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH; |
if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH; |
if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH; |
} |
Mess_IntegralNick -= tmp_long; |
Mess_IntegralRoll -= tmp_long2; |
//DebugOut.Analog[16] += tmp_long; |
//DebugOut.Analog[17] += tmp_long2; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
{ |
static int cnt = 0; |
static char last_n_p,last_n_n,last_r_p,last_r_n; |
static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp) |
{ |
MittelIntegralNick /= ABGLEICH_ANZAHL; |
MittelIntegralRoll /= ABGLEICH_ANZAHL; |
IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
IntegralAccZ = IntegralAccZ / ABGLEICH_ANZAHL; |
#define MAX_I 0 |
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++ |
IntegralFehlerNick = (long)(MittelIntegralNick - (long)IntegralAccNick); |
ausgleichNick = IntegralFehlerNick / EE_Parameter.GyroAccAbgleich; |
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++ |
IntegralFehlerRoll = (long)(MittelIntegralRoll - (long)IntegralAccRoll); |
ausgleichRoll = IntegralFehlerRoll / EE_Parameter.GyroAccAbgleich; |
LageKorrekturNick = ausgleichNick / ABGLEICH_ANZAHL; |
LageKorrekturRoll = ausgleichRoll / ABGLEICH_ANZAHL; |
if(((MaxStickNick > 64) || (MaxStickRoll > 64) || (abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25)) && (FromNaviCtrl_Value.Kalman_K == -1)) |
{ |
LageKorrekturNick /= 2; |
LageKorrekturRoll /= 2; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gyro-Drift ermitteln |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
MittelIntegralNick2 /= ABGLEICH_ANZAHL; |
MittelIntegralRoll2 /= ABGLEICH_ANZAHL; |
tmp_long = IntegralNick2 - IntegralNick; |
tmp_long2 = IntegralRoll2 - IntegralRoll; |
IntegralFehlerNick = tmp_long; |
IntegralFehlerRoll = tmp_long2; |
Mess_IntegralNick2 -= IntegralFehlerNick; |
Mess_IntegralRoll2 -= IntegralFehlerRoll; |
if(EE_Parameter.Driftkomp) |
{ |
if(GierGyroFehler > ABGLEICH_ANZAHL/2) { AdNeutralGier++; } |
if(GierGyroFehler <-ABGLEICH_ANZAHL/2) { AdNeutralGier--; } |
} |
GierGyroFehler = 0; |
#define FEHLER_LIMIT (ABGLEICH_ANZAHL / 2) |
#define FEHLER_LIMIT1 (ABGLEICH_ANZAHL * 2) //4 |
#define FEHLER_LIMIT2 (ABGLEICH_ANZAHL * 16) //16 |
#define BEWEGUNGS_LIMIT 20000 |
// Nick +++++++++++++++++++++++++++++++++++++++++++++++++ |
cnt = 1;// + labs(IntegralFehlerNick) / 4096; |
if(labs(IntegralFehlerNick) > FEHLER_LIMIT1) cnt = 4; |
if(labs(MittelIntegralNick_Alt - MittelIntegralNick) < BEWEGUNGS_LIMIT || (FromNaviCtrl_Value.Kalman_MaxDrift > 3*8)) |
{ |
if(IntegralFehlerNick > FEHLER_LIMIT2) |
{ |
if(last_n_p) |
{ |
cnt += labs(IntegralFehlerNick) / (FEHLER_LIMIT2 / 8); |
ausgleichNick = IntegralFehlerNick / 8; |
if(ausgleichNick > 5000) ausgleichNick = 5000; |
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL; |
} |
else last_n_p = 1; |
} else last_n_p = 0; |
if(IntegralFehlerNick < -FEHLER_LIMIT2) |
{ |
if(last_n_n) |
{ |
cnt += labs(IntegralFehlerNick) / (FEHLER_LIMIT2 / 8); |
ausgleichNick = IntegralFehlerNick / 8; |
if(ausgleichNick < -5000) ausgleichNick = -5000; |
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL; |
} |
else last_n_n = 1; |
} else last_n_n = 0; |
} |
else |
{ |
cnt = 0; |
KompassSignalSchlecht = 100; |
} |
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
if(FromNaviCtrl_Value.Kalman_MaxDrift) if(cnt > FromNaviCtrl_Value.Kalman_MaxDrift) cnt = FromNaviCtrl_Value.Kalman_MaxDrift; |
if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt; |
if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt; |
// Roll +++++++++++++++++++++++++++++++++++++++++++++++++ |
cnt = 1;// + labs(IntegralFehlerRoll) / 4096; |
if(labs(IntegralFehlerRoll) > FEHLER_LIMIT1) cnt = 4; |
if(labs(MittelIntegralRoll_Alt - MittelIntegralRoll) < BEWEGUNGS_LIMIT || (FromNaviCtrl_Value.Kalman_MaxDrift > 3*8)) |
{ |
if(IntegralFehlerRoll > FEHLER_LIMIT2) |
{ |
if(last_r_p) |
{ |
cnt += labs(IntegralFehlerRoll) / (FEHLER_LIMIT2 / 8); |
ausgleichRoll = IntegralFehlerRoll / 8; |
if(ausgleichRoll > 5000) ausgleichRoll = 5000; |
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL; |
} |
else last_r_p = 1; |
} else last_r_p = 0; |
if(IntegralFehlerRoll < -FEHLER_LIMIT2) |
{ |
if(last_r_n) |
{ |
cnt += labs(IntegralFehlerRoll) / (FEHLER_LIMIT2 / 8); |
ausgleichRoll = IntegralFehlerRoll / 8; |
if(ausgleichRoll < -5000) ausgleichRoll = -5000; |
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL; |
} |
else last_r_n = 1; |
} else last_r_n = 0; |
} else |
{ |
cnt = 0; |
KompassSignalSchlecht = 100; |
} |
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
if(FromNaviCtrl_Value.Kalman_MaxDrift) if(cnt > FromNaviCtrl_Value.Kalman_MaxDrift) cnt = FromNaviCtrl_Value.Kalman_MaxDrift; |
if(IntegralFehlerRoll > FEHLER_LIMIT) AdNeutralRoll += cnt; |
if(IntegralFehlerRoll < -FEHLER_LIMIT) AdNeutralRoll -= cnt; |
} |
else |
{ |
LageKorrekturRoll = 0; |
LageKorrekturNick = 0; |
TrichterFlug = 0; |
} |
if(!IntegralFaktor) { LageKorrekturRoll = 0; LageKorrekturNick = 0;} // z.B. bei HH |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
MittelIntegralNick_Alt = MittelIntegralNick; |
MittelIntegralRoll_Alt = MittelIntegralRoll; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
IntegralAccNick = 0; |
IntegralAccRoll = 0; |
IntegralAccZ = 0; |
MittelIntegralNick = 0; |
MittelIntegralRoll = 0; |
MittelIntegralNick2 = 0; |
MittelIntegralRoll2 = 0; |
ZaehlMessungen = 0; |
} // ZaehlMessungen >= ABGLEICH_ANZAHL |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gieren |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(abs(StickGier) > 3) // war 15 |
{ |
// KompassSignalSchlecht = 1000; |
if(!(Parameter_GlobalConfig & CFG_KOMPASS_FIX)) |
{ |
NeueKompassRichtungMerken = 50; // eine Sekunde zum Einloggen |
}; |
} |
tmp_int = (long) EE_Parameter.StickGier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx² |
tmp_int += (EE_Parameter.StickGier_P * StickGier) / 4; |
if(GasIsZeroCnt > 512) tmp_int = 0; // disable Yawing when Gas-Stick is to Zero |
tmp_int += CompassGierSetpoint; |
sollGier = tmp_int; |
Mess_Integral_Gier -= tmp_int; |
if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen |
if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Kompass |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(KompassValue >= 0 && (Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) |
{ |
if(CalculateCompassTimer-- == 1) |
{ |
int w,v,r,fehler,korrektur; // wird von der SPI-Routine auf 1 gesetzt |
CalculateCompassTimer = 13; // falls keine Navi-Daten |
// max. Korrekturwert schätzen |
w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln |
v = abs(IntegralRoll /512); |
if(v > w) w = v; // grösste Neigung ermitteln |
// korrektur = w / 4 + 1; |
korrektur = w / 8 + 2; |
ErsatzKompassInGrad = ErsatzKompass/GIER_GRAD_FAKTOR; |
// Kompassfehlerwert bestimmen |
fehler = ((540 + KompassValue - ErsatzKompassInGrad) % 360) - 180; |
// GIER_GRAD_FAKTOR ist ca. 1200 |
// Kompasswert einloggen |
if(NeueKompassRichtungMerken) KompassSollWert = ErsatzKompassInGrad; |
if(KompassSignalSchlecht) KompassSignalSchlecht--; |
else |
if(w < 25) |
{ |
GierGyroFehler += fehler; |
if(NeueKompassRichtungMerken) NeueKompassRichtungMerken--; |
/* if(NeueKompassRichtungMerken) |
{ |
if(--NeueKompassRichtungMerken == 0) |
{ |
KompassSollWert = ErsatzKompassInGrad; |
} |
} |
*/ |
} |
// Kompass fusionieren |
if(!KompassSignalSchlecht) ErsatzKompass += (fehler * KompassFusion) / korrektur; |
// MK Gieren |
if(!NeueKompassRichtungMerken) |
{ |
r = ((540 + (KompassSollWert - ErsatzKompassInGrad)) % 360) - 180; |
v = r * (Parameter_KompassWirkung/2); // nach Kompass ausrichten |
CompassGierSetpoint = v / 16; |
} |
else CompassGierSetpoint = 0; |
} // CalculateCompassTimer |
} |
else CompassGierSetpoint = 0; |
//DebugOut.Analog[16] = KompassFusion; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(TrichterFlug) { SummeRoll = 0; SummeNick = 0;}; |
if(!Looping_Nick) IntegralNickMalFaktor = (IntegralNick * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralNickMalFaktor = 0; |
if(!Looping_Roll) IntegralRollMalFaktor = (IntegralRoll * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralRollMalFaktor = 0; |
#define TRIM_MAX 200 |
if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX; |
if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX; |
MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN); |
MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN); |
MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN)); |
// Maximalwerte abfangen |
#define MAX_SENSOR (4096) |
if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR; |
if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR; |
if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR; |
if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR; |
if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR; |
if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Undervoltage |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!(FC_StatusFlags & FC_STATUS_LOWBAT)) |
{ |
GasMischanteil = ((unsigned int)GasMischanteil * BattLowVoltageWarning) / UBat; // Gas auf das aktuelle Spannungvieveau beziehen |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Auto-Landing |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
static unsigned char slower; |
if(!slower--) |
{ |
static unsigned int u_filter = 0; |
if(!u_filter) u_filter = UBat; |
if(UBat > u_filter) u_filter++; else |
if(UBat < u_filter) u_filter--; |
slower = 100; // 5Hz |
if(u_filter < BattAutoLandingVoltage) |
{ |
LowVoltageLandingActive = 10; // 2 sek |
} |
else if(u_filter > BattAutoLandingVoltage + LipoCells && LowVoltageLandingActive) LowVoltageLandingActive--; |
if(u_filter < BattComingHomeVoltage) |
{ |
LowVoltageHomeActive = 25; // min. 5 sek |
} |
else if(u_filter > BattComingHomeVoltage + LipoCells && LowVoltageHomeActive) LowVoltageHomeActive--; |
} |
if(LowVoltageLandingActive && FromNC_AltitudeSetpoint >= 0) |
{ |
FromNC_AltitudeSpeed = EE_Parameter.LandingSpeed; |
FromNC_AltitudeSetpoint = -20000; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// send SPI pending bytes |
if(BytegapSPI == 0) SPI_TransmitByte(); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Höhenregelung |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
GasMischanteil *= STICK_GAIN; |
// if height control is activated |
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG) && !(Looping_Roll || Looping_Nick) && !(VersionInfo.HardwareError[0] & 0x7F)) // Höhenregelung |
{ |
#define HOVER_GAS_AVERAGE 16384L // 16384 * 2ms = 32s averaging |
#define HC_GAS_AVERAGE 4 // 4 * 2ms= 8ms averaging |
int HCGas, GasReduction = 0; |
static int HeightTrimming = 0; // rate for change of height setpoint |
static int HeightDeviation = 0, FilterHCGas = 0; |
static unsigned long HoverGasFilter = 0; |
static unsigned char delay = 100, BaroAtUpperLimit = 0, BaroAtLowerLimit = 0; |
// Expand the measurement |
// measurement of air pressure close to upper limit and no overflow in correction of the new OCR0A value occurs |
if(!BaroExpandActive) |
{ |
if(MessLuftdruck > 920) |
{ // increase offset |
if(OCR0A < (255 - OPA_OFFSET_STEP)) |
{ |
ExpandBaro -= 1; |
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // increase offset to shift ADC down |
OCR0B = 255 - OCR0A; |
beeptime = 300; |
BaroExpandActive = 350; |
CalcExpandBaroStep(); |
} |
else |
{ |
BaroAtLowerLimit = 1; |
} |
} |
// measurement of air pressure close to lower limit and |
else |
if(MessLuftdruck < 100) |
{ // decrease offset |
if(OCR0A > OPA_OFFSET_STEP) |
{ |
ExpandBaro += 1; |
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // decrease offset to shift ADC up |
OCR0B = 255 - OCR0A; |
beeptime = 300; |
BaroExpandActive = 350; |
CalcExpandBaroStep(); |
} |
else |
{ |
BaroAtUpperLimit = 1; |
} |
} |
else |
{ |
BaroAtUpperLimit = 0; |
BaroAtLowerLimit = 0; |
} |
} |
else // delay, because of expanding the Baro-Range |
{ |
// now clear the D-values |
VarioMeter = 0; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) ACC_AltitudeFusion(1); // init |
else SummenHoehe = HoehenWert * SM_FILTER; |
#else |
SummenHoehe = HoehenWert * SM_FILTER; |
#endif |
BaroExpandActive--; |
} |
// if height control is activated by an rc channel |
if(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
{ // check if parameter is less than activation threshold |
if(Parameter_HoehenSchalter < 50) // for 3 or 2-state switch height control is disabled in lowest position |
{ //height control not active |
if(!delay--) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!SpeakHoTT && HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_OFF; |
#endif |
HoehenReglerAktiv = 0; // disable height control |
SollHoehe = HoehenWert; // update SetPoint with current reading |
delay = 1; |
} |
} |
else |
if(Parameter_HoehenSchalter > 70) |
{ //height control is activated |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!SpeakHoTT && !HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_ON; |
#endif |
delay = 200; |
HoehenReglerAktiv = 1; // enable height control |
} |
} |
else // no switchable height control |
{ |
SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_HoehenSchalter) * (int)EE_Parameter.Hoehe_Verstaerkung; |
HoehenReglerAktiv = 1; |
} |
// calculate cos of nick and roll angle used for projection of the vertical hoover gas |
tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
tmp_int2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg |
CosAttitude = (int16_t)ihypot(tmp_int, tmp_int2); // phytagoras gives effective attitude angle in deg |
LIMIT_MAX(CosAttitude, 60); // limit effective attitude angle |
CosAttitude = c_cos_8192(CosAttitude); // cos of actual attitude |
VarioCharacter = ' '; |
AltitudeSetpointTrimming = 0; |
if(HoehenReglerAktiv && !(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING)) |
{ |
// Holger original version |
// start of height control algorithm |
// the height control is only an attenuation of the actual gas stick. |
// I.e. it will work only if the gas stick is higher than the hover gas |
// and the hover height will be allways larger than height setpoint. |
FC_StatusFlags2 |= FC_STATUS2_ALTITUDE_CONTROL; |
if((Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) || !(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER)) // Regler wird über Schalter gesteuert) |
{ // old version |
HCGas = GasMischanteil; // take current stick gas as neutral point for the height control |
HeightTrimming = 0; |
AltitudeSetpointTrimming = 0; |
// set both flags to indicate no vario mode |
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
} |
else |
{ |
// alternative height control |
// PD-Control with respect to hoover point |
// the thrust loss out of horizontal attitude is compensated |
// the setpoint will be fine adjusted with the gas stick position |
if(/*1 || */FC_StatusFlags & FC_STATUS_FLY) // trim setpoint only when flying |
{ // gas stick is above hoover point |
if(StickGas > (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtUpperLimit) |
{ |
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN) |
{ |
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
} |
// Limit the maximum Altitude |
if(Parameter_MaximumAltitude && (SollHoehe/100 > Parameter_MaximumAltitude)) |
{ |
AltitudeSetpointTrimming = 0; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!SpeakHoTT && HoehenWert/95 > Parameter_MaximumAltitude) SpeakHoTT = SPEAK_MAX_ALTITUD; |
#endif |
VarioCharacter = '='; |
} |
else |
{ |
if(HeightDeviation > 20) SollHoehe = HoehenWertF; // update setpoint to current heigth |
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP; |
AltitudeSetpointTrimming = abs(StickGas - (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD)); |
if(LowVoltageLandingActive) AltitudeSetpointTrimming /= 3; // only 33% rising |
VarioCharacter = '+'; |
} |
WaypointTrimming = 0; |
} // gas stick is below hoover point |
else if(StickGas < (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtLowerLimit ) // Minus |
{ |
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP) |
{ |
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
} |
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN; |
AltitudeSetpointTrimming = -abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD)); |
VarioCharacter = '-'; |
WaypointTrimming = 0; |
} |
else // Gas Stick in Hover Range |
{ |
VarioCharacter = '='; |
if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint > SollHoehe) // von NC gesteuert -> Steigen |
{ |
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP; |
AltitudeSetpointTrimming = FromNC_AltitudeSpeed; |
//HeightTrimming += FromNC_AltitudeSpeed; |
WaypointTrimming = 10; |
VarioCharacter = '^'; |
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN) // changed from sinking to rising |
{ |
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
} |
} |
else |
if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint < SollHoehe) // von NC gesteuert -> sinken |
{ |
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN; |
AltitudeSetpointTrimming = -FromNC_AltitudeSpeed; |
//HeightTrimming -= FromNC_AltitudeSpeed; |
WaypointTrimming = -10; |
VarioCharacter = 'v'; |
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP) // changed from rising to sinking |
{ |
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
} |
} |
else |
if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN)) |
{ |
if(!WaypointTrimming) LIMIT_MIN_MAX(SollHoehe, (HoehenWertF-200), (HoehenWertF+200)) // max. 2m Unterschied |
else WaypointTrimming = 0; |
FC_StatusFlags &= ~(FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
HeightTrimming = 0; |
if(Parameter_ExtraConfig & CFG2_VARIO_BEEP) beeptime = 500; |
if(!StartTrigger && HoehenWert > 50) |
{ |
StartTrigger = 1; |
} |
} |
} |
// Trim height set point |
HeightTrimming += AltitudeSetpointTrimming; |
if(abs(HeightTrimming) > 500) // bei Waypoint-Flug ist das ca. die 500Hz |
{ |
if(WaypointTrimming) |
{ |
if(abs(FromNC_AltitudeSetpoint - SollHoehe) < 10) SollHoehe = FromNC_AltitudeSetpoint; |
else SollHoehe += WaypointTrimming; |
} |
else |
{ |
if(HeightTrimming > 0) SollHoehe += EE_Parameter.Hoehe_Verstaerkung / 3; |
else SollHoehe -= EE_Parameter.Hoehe_Verstaerkung / 3; |
} |
HeightTrimming = 0; |
LIMIT_MIN_MAX(SollHoehe, (HoehenWert-1024), (HoehenWert+1024)); // max. 10m Unterschied |
if(Parameter_ExtraConfig & CFG2_VARIO_BEEP) beeptime = 100; |
//update hoover gas stick value when setpoint is shifted |
if(FromNC_AltitudeSpeed == 0) CalcStickGasHover(); |
/* |
if(!EE_Parameter.Hoehe_StickNeutralPoint && FromNC_AltitudeSpeed == 0) |
{ |
StickGasHover = HoverGas/STICK_GAIN; //rescale back to stick value |
StickGasHover = (unsigned int)((unsigned int) StickGasHover * UBat) / BattLowVoltageWarning; |
if(StickGasHover < 70) StickGasHover = 70; |
else if(StickGasHover > 175) StickGasHover = 175; |
} |
*/ |
} |
if(BaroExpandActive) SollHoehe = HoehenWertF; // update setpoint to current altitude if Expanding is active |
} //if FCFlags & MKFCFLAG_FLY |
else |
{ |
SollHoehe = HoehenWert - 2000; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
ACC_AltitudeFusion(1); // init the ACC and Altitude fusion |
#endif |
if(EE_Parameter.Hoehe_StickNeutralPoint) StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint; |
else StickGasHover = 127; |
HoverGas = GasMischanteil; |
VarioCharacter = '.'; |
} |
HCGas = HoverGas; // take hover gas (neutral point) |
} |
if(HoehenWertF > SollHoehe || !(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT)) |
{ |
if(!ACC_AltitudeControl) |
{ |
// from this point the Heigth Control Algorithm is identical for both versions |
if(BaroExpandActive) // baro range expanding active |
{ |
HCGas = HoverGas; // hover while expanding baro adc range |
HeightDeviation = 0; |
} // EOF // baro range expanding active |
else // valid data from air pressure sensor |
{ |
// ------------------------- P-Part ---------------------------- |
tmp_long = (HoehenWertF - SollHoehe); // positive when too high |
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t |
HeightDeviation = (int)(tmp_long); // positive when too high |
tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part |
LIMIT_MIN_MAX(tmp_long, -127 * STICK_GAIN, 256 * STICK_GAIN); // more than the full range makes no sense |
GasReduction = tmp_long; |
// ------------------------- D-Part 1: Vario Meter ---------------------------- |
tmp_int = VarioMeter / 8; |
LIMIT_MIN_MAX(tmp_int, -127, 128); |
tmp_int = (tmp_int * (long)Parameter_Luftdruck_D) / 4L; // scale to d-gain parameter |
LIMIT_MIN_MAX(tmp_int,-64 * STICK_GAIN, 64 * STICK_GAIN); |
if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN)) tmp_int /= 4; // reduce d-part while trimming setpoint |
else |
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) tmp_int /= 8; // reduce d-part in "Deckel" mode |
GasReduction += tmp_int; |
} // EOF no baro range expanding |
// ------------------------ D-Part 2: ACC-Z Integral ------------------------ |
if(Parameter_Hoehe_ACC_Wirkung) |
{ |
tmp_long = ((Mess_Integral_Hoch / 128L) * (int32_t) Parameter_Hoehe_ACC_Wirkung) / (128L / STICK_GAIN); |
LIMIT_MIN_MAX(tmp_long, -32 * STICK_GAIN, 64 * STICK_GAIN); |
GasReduction += tmp_long; |
} |
// ------------------------ D-Part 3: GpsZ ---------------------------------- |
tmp_int = (Parameter_Hoehe_GPS_Z * (int)FromNaviCtrl_Value.GpsZ)/128L; |
LIMIT_MIN_MAX(tmp_int, -32 * STICK_GAIN, 64 * STICK_GAIN); |
GasReduction += tmp_int; |
GasReduction = (long)((long)GasReduction * HoverGas) / 512; // scale to the gas value |
// ------------------------ ---------------------------------- |
HCGas -= GasReduction; |
// limit deviation from hoover point within the target region |
if(!AltitudeSetpointTrimming && HoverGas > 0) // height setpoint is not changed and hoover gas not zero |
{ |
unsigned int tmp; |
tmp = abs(HeightDeviation); |
if(tmp <= 60) |
{ |
LIMIT_MIN_MAX(HCGas, HoverGasMin, HoverGasMax); // limit gas around the hoover point |
} |
else |
{ |
tmp = (tmp - 60) / 32; |
if(tmp > 15) tmp = 15; |
if(HeightDeviation > 0) |
{ |
tmp = (HoverGasMin * (16 - tmp)) / 16; |
LIMIT_MIN_MAX(HCGas, tmp, HoverGasMax); // limit gas around the hoover point |
} |
else |
{ |
tmp = (HoverGasMax * (tmp + 16)) / 16; |
LIMIT_MIN_MAX(HCGas, HoverGasMin, tmp); // limit gas around the hoover point |
} |
} |
} |
// strech control output by inverse attitude projection 1/cos |
// + 1/cos(angle) ++++++++++++++++++++++++++ |
tmp_long2 = (int32_t)HCGas; |
tmp_long2 *= 8192L; |
tmp_long2 /= CosAttitude; |
HCGas = (int16_t)tmp_long2; |
// update height control gas averaging |
FilterHCGas = (FilterHCGas * (HC_GAS_AVERAGE - 1) + HCGas) / HC_GAS_AVERAGE; |
// limit height control gas pd-control output |
LIMIT_MIN_MAX(FilterHCGas, EE_Parameter.Hoehe_MinGas * STICK_GAIN, (MAX_GAS - 20) * STICK_GAIN); |
// set GasMischanteil to HeightControlGasFilter |
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) |
{ // old version |
LIMIT_MAX(FilterHCGas, GasMischanteil); // nicht mehr als Gas |
GasMischanteil = FilterHCGas; |
} |
else GasMischanteil = FilterHCGas + (GasMischanteil - HoverGas) / 4; // only in Vario-Mode |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
else // ACC-Altitude control |
{ |
// from this point the Heigth Control Algorithm is identical for both versions |
if(BaroExpandActive) // baro range expanding active |
{ |
HCGas = HoverGas; // hover while expanding baro adc range |
HeightDeviation = 0; |
} // EOF // baro range expanding active |
else // valid data from air pressure sensor |
{ |
// ------------------------- P-Part ---------------------------- |
tmp_long = (HoehenWertF - SollHoehe); // positive when too high |
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t |
HeightDeviation = (int)(tmp_long); // positive when too high |
tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part |
LIMIT_MIN_MAX(tmp_long, -511 * STICK_GAIN, 512 * STICK_GAIN); // more than full range makes sense |
GasReduction = tmp_long; |
// ------------------------ D-Part: ACC-Z Integral ------------------------ |
tmp_long = VarioMeter + (AdWertAccHoch * Parameter_Hoehe_ACC_Wirkung)/256; |
// ------------------------- D-Part: Vario Meter ---------------------------- |
if(WaypointTrimming) { |
Variance = AltitudeSetpointTrimming * 8; |
} else { |
Variance = AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung*9/32; |
} |
tmp_long -= (long)Variance; |
tmp_long = (tmp_long * (long)Parameter_Luftdruck_D) / 32; // scale to d-gain parameter |
LIMIT_MIN_MAX(tmp_long,-511 * STICK_GAIN, 512 * STICK_GAIN); |
GasReduction += tmp_long; |
} // EOF no baro range expanding |
HCGas -= GasReduction; |
LIMIT_MIN_MAX(HCGas, HoverGasMin, HoverGasMax); // limits gas around hover point |
// strech control output by inverse attitude projection 1/cos |
// + 1/cos(angle) ++++++++++++++++++++++++++ |
tmp_long2 = (int32_t)HCGas; |
tmp_long2 *= 8192L; |
tmp_long2 /= CosAttitude; |
HCGas = (int16_t)tmp_long2; |
// update height control gas averaging |
FilterHCGas = (FilterHCGas * (HC_GAS_AVERAGE - 1) + HCGas) / HC_GAS_AVERAGE; |
// limit height control gas pd-control output |
LIMIT_MIN_MAX(FilterHCGas, EE_Parameter.Hoehe_MinGas * STICK_GAIN, (MAX_GAS - 20) * STICK_GAIN); |
// set GasMischanteil to HeightControlGasFilter |
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) |
{ // old version |
LIMIT_MAX(FilterHCGas, GasMischanteil); // nicht mehr als Gas |
GasMischanteil = FilterHCGas; |
} |
else GasMischanteil = FilterHCGas; |
} // end of ACC-Altitude control |
#endif |
} |
}// EOF height control active |
else // HC not active |
{ |
//update hoover gas stick value when HC is not active |
CalcStickGasHover(); |
/* if(!EE_Parameter.Hoehe_StickNeutralPoint) |
{ |
StickGasHover = HoverGas/STICK_GAIN; // rescale back to stick value |
StickGasHover = (unsigned int)((unsigned int) StickGasHover * UBat) / BattLowVoltageWarning; |
} |
else StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint; |
LIMIT_MIN_MAX(StickGasHover, 70, 175); // reserve some range for trim up and down |
*/ |
FilterHCGas = GasMischanteil; |
// set both flags to indicate no vario mode |
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
FC_StatusFlags2 &= ~FC_STATUS2_ALTITUDE_CONTROL; |
} |
// Hover gas estimation by averaging gas control output on small z-velocities |
// this is done only if height contol option is selected in global config and aircraft is flying |
if((FC_StatusFlags & FC_STATUS_FLY))// && !(FC_SatusFlags & FC_STATUS_EMERGENCY_LANDING)) |
{ |
//if(HoverGasFilter == 0 || StartTrigger == 1) HoverGasFilter = HOVER_GAS_AVERAGE * (unsigned long)(GasMischanteil); // init estimation |
if(HoverGasFilter == 0 || StartTrigger == 1) HoverGasFilter = HOVER_GAS_AVERAGE * (unsigned long)(HoverGas); // 0.90f: geändert |
if(StartTrigger == 1) StartTrigger = 2; |
tmp_long2 = (int32_t)GasMischanteil; // take current thrust |
tmp_long2 *= CosAttitude; // apply attitude projection |
tmp_long2 /= 8192; |
// average vertical projected thrust |
if(modell_fliegt < 4000) // the first 8 seconds |
{ // reduce the time constant of averaging by factor of 4 to get much faster a stable value |
HoverGasFilter -= HoverGasFilter/(HOVER_GAS_AVERAGE/16L); |
HoverGasFilter += 16L * tmp_long2; |
} |
if(modell_fliegt < 8000) // the first 16 seconds |
{ // reduce the time constant of averaging by factor of 2 to get much faster a stable value |
HoverGasFilter -= HoverGasFilter/(HOVER_GAS_AVERAGE/4L); |
HoverGasFilter += 4L * tmp_long2; |
} |
else //later |
if(abs(VarioMeter) < 100 && abs(HoehenWertF - SollHoehe) < 256) // only on small vertical speed & difference is small (only descending) |
{ |
HoverGasFilter -= HoverGasFilter/HOVER_GAS_AVERAGE; |
HoverGasFilter += tmp_long2; |
} |
HoverGas = (int16_t)(HoverGasFilter/HOVER_GAS_AVERAGE); |
if(EE_Parameter.Hoehe_HoverBand) |
{ |
int16_t band; |
band = HoverGas / EE_Parameter.Hoehe_HoverBand; // the higher the parameter the smaller the range |
HoverGasMin = HoverGas - band; |
HoverGasMax = HoverGas + band; |
} |
else |
{ // no limit |
HoverGasMin = 0; |
HoverGasMax = 1023; |
} |
} |
else |
{ |
StartTrigger = 0; |
HoverGasFilter = 0; |
HoverGas = 0; |
} |
}// EOF Parameter_GlobalConfig & CFG_HEIGHT_CONTROL |
else |
{ |
// set undefined state to indicate vario off |
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
} // EOF no height control |
// Limits the maximum gas in case of "Out of Range emergency landing" |
if(NC_To_FC_Flags & NC_TO_FC_EMERGENCY_LANDING) |
{ |
if(GasMischanteil/STICK_GAIN > HooverGasEmergencyPercent && HoverGas) GasMischanteil = HooverGasEmergencyPercent * STICK_GAIN; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
beeptime = 15000; |
BeepMuster = 0x0E00; |
} |
// limit gas to parameter setting |
LIMIT_MIN(GasMischanteil, (MIN_GAS + 10) * STICK_GAIN); |
if(GasMischanteil > (MAX_GAS - 20) * STICK_GAIN) GasMischanteil = (MAX_GAS - 20) * STICK_GAIN; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// all BL-Ctrl connected? |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(MissingMotor || Capacity.MinOfMaxPWM < 254 || NC_ErrorCode) // wait until all BL-Ctrls started and no Errors |
if(modell_fliegt > 1 && modell_fliegt < 50 && GasMischanteil > 0) // only during start-phase |
{ |
modell_fliegt = 1; |
GasMischanteil = (MIN_GAS + 10) * STICK_GAIN; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(Capacity.MinOfMaxPWM < 40) SpeakHoTT = SPEAK_ERR_MOTOR; |
#endif |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// send SPI pending bytes |
if(BytegapSPI == 0) SPI_TransmitByte(); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Mischer und PI-Regler |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
DebugOut.Analog[7] = GasMischanteil; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gier-Anteil |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
GierMischanteil = MesswertGier - sollGier * STICK_GAIN; // Regler für Gier |
#define MIN_GIERGAS (40*STICK_GAIN) // unter diesem Gaswert trotzdem Gieren |
if(GasMischanteil > MIN_GIERGAS) |
{ |
if(GierMischanteil > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2; |
if(GierMischanteil < -(GasMischanteil / 2)) GierMischanteil = -(GasMischanteil / 2); |
} |
else |
{ |
if(GierMischanteil > (MIN_GIERGAS / 2)) GierMischanteil = MIN_GIERGAS / 2; |
if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2); |
} |
tmp_int = MAX_GAS*STICK_GAIN; |
if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil)); |
if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil)); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Nick-Achse |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
if(IntegralFaktor) SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
else SummeNick += DiffNick; // I-Anteil bei HH |
if(SummeNick > (STICK_GAIN * 16000L)) SummeNick = (STICK_GAIN * 16000L); |
if(SummeNick < -(16000L * STICK_GAIN)) SummeNick = -(16000L * STICK_GAIN); |
if(EE_Parameter.Gyro_Stability <= 8) pd_ergebnis_nick = (EE_Parameter.Gyro_Stability * DiffNick) / 8; // PI-Regler für Nick |
else pd_ergebnis_nick = ((EE_Parameter.Gyro_Stability / 2) * DiffNick) / 4; // Überlauf verhindern |
pd_ergebnis_nick += SummeNick / Ki; |
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int; |
if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Roll-Achse |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
if(IntegralFaktor) SummeRoll += IntegralRollMalFaktor - StickRoll;// I-Anteil bei Winkelregelung |
else SummeRoll += DiffRoll; // I-Anteil bei HH |
if(SummeRoll > (STICK_GAIN * 16000L)) SummeRoll = (STICK_GAIN * 16000L); |
if(SummeRoll < -(16000L * STICK_GAIN)) SummeRoll = -(16000L * STICK_GAIN); |
if(EE_Parameter.Gyro_Stability <= 8) pd_ergebnis_roll = (EE_Parameter.Gyro_Stability * DiffRoll) / 8; // PI-Regler für Roll |
else pd_ergebnis_roll = ((EE_Parameter.Gyro_Stability / 2) * DiffRoll) / 4; // Überlauf verhindern |
pd_ergebnis_roll += SummeRoll / Ki; |
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// send SPI pending bytes |
if(BytegapSPI == 0) SPI_TransmitByte(); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Universal Mixer |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
for(i=0; i<MAX_MOTORS; i++) |
{ |
signed int tmp_int; |
if(Mixer.Motor[i][0] > 0) |
{ |
// Gas |
if(Mixer.Motor[i][0] == 64) tmp_int = GasMischanteil; else tmp_int = ((long)GasMischanteil * Mixer.Motor[i][0]) / 64L; |
// Nick |
if(Mixer.Motor[i][1] == 64) tmp_int += pd_ergebnis_nick; |
else if(Mixer.Motor[i][1] == -64) tmp_int -= pd_ergebnis_nick; |
else tmp_int += ((long)pd_ergebnis_nick * Mixer.Motor[i][1]) / 64L; |
// Roll |
if(Mixer.Motor[i][2] == 64) tmp_int += pd_ergebnis_roll; |
else if(Mixer.Motor[i][2] == -64) tmp_int -= pd_ergebnis_roll; |
else tmp_int += ((long)pd_ergebnis_roll * Mixer.Motor[i][2]) / 64L; |
// Gier |
if(Mixer.Motor[i][3] == 64) tmp_int += GierMischanteil; |
else if(Mixer.Motor[i][3] == -64) tmp_int -= GierMischanteil; |
else tmp_int += ((long)GierMischanteil * Mixer.Motor[i][3]) / 64L; |
#ifdef REDUNDANT_FC_SLAVE |
tmp_int = (tmp_motorwert[i] + tmp_int) / 2; |
#else |
if(Motor[i].Version & MOTOR_STATE_FAST_MODE || tmp_int > tmp_motorwert[i]) tmp_int = (tmp_motorwert[i] + tmp_int) / 2; // Beschleunigen |
else |
{ // BL-Ctrl 1.0 or 2.0 |
if(EE_Parameter.MotorSmooth == 0) |
{ |
tmp_int = 2 * tmp_int - tmp_motorwert[i]; // original MotorSmoothing |
} |
else // 1 means tmp_int = tmp_int; |
if(EE_Parameter.MotorSmooth > 1) |
{ |
// If >= 2 then allow >= 50% of the intended step down to rapidly reach the intended value. |
tmp_int = tmp_int + ((tmp_motorwert[i] - tmp_int) / EE_Parameter.MotorSmooth); |
} |
} |
#endif |
LIMIT_MIN_MAX(tmp_int,(int) MIN_GAS * 4,(int) MAX_GAS * 4); |
Motor[i].SetPoint = tmp_int / 4; |
Motor[i].SetPointLowerBits = (tmp_int % 4)<<1; // (3 bits total) |
tmp_motorwert[i] = tmp_int; |
} |
else |
{ |
Motor[i].SetPoint = 0; |
Motor[i].SetPointLowerBits = 0; |
} |
} |
#ifdef REDUNDANT_FC_MASTER |
if(Parameter_UserParam6 > 230) Motor[0].SetPoint = 0; |
#endif |
} |
//DebugOut.Analog[16] |
/tags/V2.06e/fc.h |
---|
0,0 → 1,154 |
/*####################################################################################### |
Flight Control |
#######################################################################################*/ |
#ifndef _FC_H |
#define _FC_H |
//#define GIER_GRAD_FAKTOR 1291L // Abhängigkeit zwischen GyroIntegral und Winkel |
//#define GIER_GRAD_FAKTOR 1160L |
extern long GIER_GRAD_FAKTOR; // Abhängigkeit zwischen GyroIntegral und Winkel |
#define STICK_GAIN 4 |
#define ACC_AMPLIFY 6 |
#define HEIGHT_CONTROL_STICKTHRESHOLD 15 |
// FC_StatusFlags |
#define FC_STATUS_MOTOR_RUN 0x01 |
#define FC_STATUS_FLY 0x02 |
#define FC_STATUS_CALIBRATE 0x04 |
#define FC_STATUS_START 0x08 |
#define FC_STATUS_EMERGENCY_LANDING 0x10 |
#define FC_STATUS_LOWBAT 0x20 |
#define FC_STATUS_VARIO_TRIM_UP 0x40 |
#define FC_STATUS_VARIO_TRIM_DOWN 0x80 |
// FC_StatusFlags2 |
#define FC_STATUS2_CAREFREE 0x01 |
#define FC_STATUS2_ALTITUDE_CONTROL 0x02 |
#define FC_STATUS2_RC_FAILSAVE_ACTIVE 0x04 |
#define FC_STATUS2_OUT1_ACTIVE 0x08 |
#define FC_STATUS2_OUT2_ACTIVE 0x10 |
#define FC_STATUS2_WAIT_FOR_TAKEOFF 0x20 // Motor Running, but still on the ground |
#define FC_STATUS2_AUTO_STARTING 0x40 |
#define FC_STATUS2_AUTO_LANDING 0x80 |
//NC_To_FC_Flags |
#define NC_TO_FC_FLYING_RANGE 0x01 |
#define NC_TO_FC_EMERGENCY_LANDING 0x02 |
#define NC_TO_FC_AUTOSTART 0x04 |
#define NC_TO_FC_AUTOLANDING 0x08 // not used |
extern volatile unsigned char FC_StatusFlags, FC_StatusFlags2; |
extern void ParameterZuordnung(void); |
extern unsigned char GetChannelValue(unsigned char ch); // gives the unsigned value of the channel |
#define Poti1 Poti[0] |
#define Poti2 Poti[1] |
#define Poti3 Poti[2] |
#define Poti4 Poti[3] |
#define Poti5 Poti[4] |
#define Poti6 Poti[5] |
#define Poti7 Poti[6] |
#define Poti8 Poti[7] |
#define LIMIT_MIN(value, min) {if(value <= min) value = min;} |
#define LIMIT_MAX(value, max) {if(value >= max) value = max;} |
#define LIMIT_MIN_MAX(value, min, max) {if(value <= min) value = min; else if(value >= max) value = max;} |
#define CHK_POTI(b,a) {if(a < 248) b = a; else b = Poti[255 - a];} |
#define CHK_POTI_OFF(b,a,off) {if(a < 248) b = a; else b = Poti[255 - a] - off;} |
#define CHK_POTI_MM(b,a,min,max) {CHK_POTI(b,a); LIMIT_MIN_MAX(b, min, max);} |
#define CHK_POTI_MM_OFF(b,a,min,max,off) {CHK_POTI_OFF(b,a,off); LIMIT_MIN_MAX(b, min, max);} |
extern unsigned char Sekunde,Minute; |
extern unsigned int BaroExpandActive; |
extern long IntegralNick,IntegralNick2; |
extern long IntegralRoll,IntegralRoll2; |
//extern int IntegralNick,IntegralNick2; |
//extern int IntegralRoll,IntegralRoll2; |
extern unsigned char Poti[9]; |
extern long Mess_IntegralNick,Mess_IntegralNick2; |
extern long Mess_IntegralRoll,Mess_IntegralRoll2; |
extern long IntegralAccNick,IntegralAccRoll; |
extern long SummeNick,SummeRoll; |
extern volatile long Mess_Integral_Hoch; |
extern long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2; |
extern int KompassValue; |
extern int KompassSollWert; |
extern int KompassRichtung; |
extern char CalculateCompassTimer; |
extern unsigned char KompassFusion; |
extern unsigned char ControlHeading; |
extern int TrimNick, TrimRoll; |
extern long ErsatzKompass; |
extern int ErsatzKompassInGrad,CompassCorrected; // Kompasswert in Grad |
extern long HoehenWert; |
extern long SollHoehe; |
extern long FromNC_AltitudeSetpoint; |
extern unsigned char FromNC_AltitudeSpeed; |
extern unsigned char Parameter_HoehenSchalter; // Wert : 0-250 |
extern unsigned char CareFree; |
extern int MesswertNick,MesswertRoll,MesswertGier; |
extern int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll; |
extern unsigned int NeutralAccX, NeutralAccY; |
extern unsigned char HoehenReglerAktiv; |
extern int NeutralAccZ; |
extern signed char NeutralAccZfine; |
extern long Umschlag180Nick, Umschlag180Roll; |
extern signed int ExternStickNick,ExternStickRoll,ExternStickGier; |
extern unsigned char Parameter_UserParam1,Parameter_UserParam2,Parameter_UserParam3,Parameter_UserParam4,Parameter_UserParam5,Parameter_UserParam6,Parameter_UserParam7,Parameter_UserParam8; |
extern int NaviAccNick,NaviAccRoll,NaviCntAcc; |
extern unsigned int modell_fliegt; |
extern void MotorRegler(void); |
extern void SendMotorData(void); |
//void CalibrierMittelwert(void); |
//void Mittelwert(void); |
extern unsigned char SetNeutral(unsigned char AccAdjustment); // retuns: "sucess" |
extern void Piep(unsigned char Anzahl, unsigned int dauer); |
extern void CopyDebugValues(void); |
extern unsigned char ACC_AltitudeControl; |
extern signed int CosAttitude; // for projection of hoover gas |
extern unsigned char h,m,s; |
extern int StickNick,StickRoll,StickGier,StickGas; |
extern volatile unsigned char Timeout ; |
extern unsigned char CosinusNickWinkel, CosinusRollWinkel; |
extern int DiffNick,DiffRoll; |
//extern int Poti1, Poti2, Poti3, Poti4; |
extern volatile unsigned char SenderOkay; |
extern int StickNick,StickRoll,StickGier; |
extern char MotorenEin; |
extern unsigned char CalibrationDone; |
extern unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5; |
extern char VarioCharacter; |
extern signed int AltitudeSetpointTrimming; |
extern signed char WaypointTrimming; |
extern int HoverGas; |
extern unsigned char Parameter_Luftdruck_D; |
//extern unsigned char Parameter_MaxHoehe; |
extern unsigned char Parameter_Hoehe_P; |
extern unsigned char Parameter_Hoehe_ACC_Wirkung; |
extern unsigned char Parameter_KompassWirkung; |
extern unsigned char Parameter_Gyro_P; |
extern unsigned char Parameter_Gyro_I; |
extern unsigned char Parameter_Gier_P; |
extern unsigned char Parameter_ServoNickControl; |
extern unsigned char Parameter_ServoRollControl; |
extern unsigned char Parameter_ServoNickComp; |
extern unsigned char Parameter_ServoRollComp; |
extern unsigned char Parameter_AchsKopplung1; |
extern unsigned char Parameter_AchsKopplung2; |
//extern unsigned char Parameter_AchsGegenKopplung1; |
extern unsigned char Parameter_J16Bitmask; // for the J16 Output |
extern unsigned char Parameter_J16Timing; // for the J16 Output |
extern unsigned char Parameter_J17Bitmask; // for the J17 Output |
extern unsigned char Parameter_J17Timing; // for the J17 Output |
extern unsigned char Parameter_GlobalConfig; |
extern unsigned char Parameter_ExtraConfig; |
extern signed char MixerTable[MAX_MOTORS][4]; |
extern const signed char sintab[31]; |
extern unsigned char LowVoltageLandingActive; |
extern unsigned char LowVoltageHomeActive; |
extern unsigned char Parameter_MaximumAltitude; |
#endif //_FC_H |
/tags/V2.06e/flight.pnproj |
---|
0,0 → 1,0 |
<Project name="Flight-Ctrl"><File path="uart.h"></File><File path="jeti.h"></File><File path="main.c"></File><File path="main.h"></File><File path="makefile"></File><File path="uart.c"></File><File path="printf_P.h"></File><File path="timer0.c"></File><File path="timer0.h"></File><File path="old_macros.h"></File><File path="twimaster.c"></File><File path="version.txt"></File><File path="twimaster.h"></File><File path="rc.c"></File><File path="rc.h"></File><File path="fc.h"></File><File path="menu.h"></File><File path="menu.c"></File><File path="_Settings.h"></File><File path="analog.c"></File><File path="analog.h"></File><File path="GPS.c"></File><File path="gps.h"></File><File path="License.txt"></File><File path="spi.h"></File><File path="spi.c"></File><File path="led.h"></File><File path="led.c"></File><File path="fc.c"></File><File path="mymath.c"></File><File path="mymath.h"></File><File path="isqrt.S"></File><File path="Spektrum.c"></File><File path="Spektrum.h"></File><File path="eeprom.h"></File><File path="eeprom.c"></File><File path="libfc.h"></File><File path="debug.c"></File><File path="debug.h"></File><File path="hottmenu.c"></File><File path="hottmenu.h"></File></Project> |
/tags/V2.06e/flight.pnps |
---|
0,0 → 1,0 |
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd> |
/tags/V2.06e/gps.h |
---|
0,0 → 1,3 |
extern signed int GPS_Nick; |
extern signed int GPS_Roll; |
extern unsigned char GPS_Aid_StickMultiplikator; |
/tags/V2.06e/hottmenu.c |
---|
0,0 → 1,1067 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "libfc.h" |
#include "printf_P.h" |
#include "main.h" |
#include "spi.h" |
#include "capacity.h" |
unsigned char NaviData_WaypointIndex = 0; |
unsigned char NaviData_WaypointNumber = 0, NaviData_TargetHoldTime = 0, ToNC_Load_WP_List = 0, NaviData_MaxWpListIndex = 0; |
unsigned char ToNC_Load_SingePoint = 0, ToNC_Store_SingePoint = 0; |
char WPL_Name[10];// = {" \0"}; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#define HoTT_printf(format, args...) { _printf_P(&LIBFC_HoTT_Putchar, PSTR(format) , ## args);} |
#define HoTT_printfxy(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar, PSTR(format) , ## args);} |
#define HoTT_printfxy_INV(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar_INV, PSTR(format) , ## args);} |
#define HoTT_printfxy_BLINK(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar_BLINK, PSTR(format) , ## args);} |
#define HoTT_printf_BLINK(format, args...) { _printf_P(&LIBFC_HoTT_Putchar_BLINK, PSTR(format) , ## args);} |
#define HoTT_printf_INV(format, args...) { _printf_P(&LIBFC_HoTT_Putchar_INV, PSTR(format) , ## args);} |
#define VOICE_MINIMALE_EINGANSSPANNUNG 16 |
#define VOICE_BEEP 5 |
#define HoTT_GRAD 96 |
#define HoTT_LINKS 123 |
#define HoTT_RECHTS 124 |
#define HoTT_OBEN 125 |
#define HoTT_UNTEN 126 |
#define HOTT_KEY_RIGHT 1 |
#define HOTT_KEY_DOWN 2 |
#define HOTT_KEY_UP 4 |
#define HOTT_KEY_SET 6 |
#define HOTT_KEY_LEFT 8 |
#define VARIO_ZERO 30000 |
unsigned int NaviData_TargetDistance = 0; |
unsigned char MaxBlTemperture = 0; |
unsigned char MinBlTemperture = 0; |
unsigned char HottestBl = 0; |
GPSPacket_t GPSPacket; |
VarioPacket_t VarioPacket; |
ASCIIPacket_t ASCIIPacket; |
ElectricAirPacket_t ElectricAirPacket; |
HoTTGeneral_t HoTTGeneral; |
unsigned char SpeakHoTT = SPEAK_MIKROKOPTER; |
unsigned char ToNC_SpeakHoTT = 0, ShowSettingNameTime = 0; |
int HoTTVarioMeter = 0; |
const char PROGMEM MIKROKOPTER[] = {" MikroKopter "}; |
const char PROGMEM UNDERVOLTAGE[] = {" !! LiPo voltage !! "}; |
const char PROGMEM LANDING[] = {" !! LANDING !! "}; |
const char PROGMEM SETTING[] = {"Set :"}; |
const char PROGMEM NC_ERROR_TEXT[MAX_ERR_NUMBER][17] = |
{ |
//0123456789123456 |
"No Error \0", // 0 |
"Not compatible \0", // 1 |
"MK3Mag not compa\0", // 2 |
"No FC communicat\0", // 3 |
"Compass communic\0", // 4 |
"GPS communicatio\0", // 5 |
"compass value \0", // 6 |
"RC Signal lost \0", // 7 |
"FC spi rx error \0", // 8 |
"No NC communicat\0", // 9 |
"FC Nick Gyro \0", // 10 |
"FC Roll Gyro \0", // 11 |
"FC Yaw Gyro \0", // 12 |
"FC Nick ACC \0", // 13 |
"FC Roll ACC \0", // 14 |
"FC Z-ACC \0", // 15 |
"Pressure sensor \0", // 16 |
"I2C FC->BL-Ctrl \0", // 17 |
"Bl Missing \0", // 18 |
"Mixer Error \0", // 19 |
"Carefree Error \0", // 20 |
"GPS Fix lost \0", // 21 |
"Magnet Error \0", // 22 |
"Motor restart \0", // 23 |
"BL Limitation \0", // 24 |
"GPS Range \0", // 25 |
"No SD-Card \0", // 26 |
"SD-Logging error\0", // 27 |
"Flying range! \0", // 28 |
"Max Altitude! \0", // 29 |
"No GPS fix \0", // 30 |
"compass not cal.\0", // 31 |
"BL-Selftest \0", // 32 |
"no ext. compass \0", // 33 |
"compass sensor \0" // 34 |
}; |
const char PROGMEM HOTT_ERROR[MAX_ERR_NUMBER][2] = |
{ // 1 -> only in flight 0 -> also on ground |
//0123456789123456 |
{0,0},// "No Error \0", // 0 |
{SPEAK_ERROR,0}, // "Not compatible \0", // 1 |
{SPEAK_ERROR,0}, // "MK3Mag not compa\0", // 2 |
{SPEAK_ERR_NAVI,1}, // "No FC communicat\0", // 3 |
{SPEAK_ERR_COMPASS,1}, // "MK3Mag communica\0", // 4 |
{SPEAK_ERR_GPS,0}, // "GPS communicatio\0", // 5 |
{SPEAK_ERR_COMPASS,1}, // "compass value \0", // 6 |
{SPEAK_ERR_RECEICER,0},// "RC Signal lost \0", // 7 |
{SPEAK_ERR_NAVI,0}, // "FC spi rx error \0", // 8 |
{SPEAK_ERR_NAVI,0}, // "No NC communicat\0", // 9 |
{SPEAK_ERR_SENSOR,0}, // "FC Nick Gyro \0", // 10 |
{SPEAK_ERR_SENSOR,0}, // "FC Roll Gyro \0", // 11 |
{SPEAK_ERR_SENSOR,0}, // "FC Yaw Gyro \0", // 12 |
{SPEAK_ERR_SENSOR,0}, // "FC Nick ACC \0", // 13 |
{SPEAK_ERR_SENSOR,0}, // "FC Roll ACC \0", // 14 |
{SPEAK_ERR_SENSOR,0}, // "FC Z-ACC \0", // 15 |
{SPEAK_ERR_SENSOR,0}, // "Pressure sensor \0", // 16 |
{SPEAK_ERR_DATABUS,1}, // "I2C FC->BL-Ctrl \0", // 17 |
{SPEAK_ERR_DATABUS,1}, // "Bl Missing \0", // 18 |
{SPEAK_ERROR,0}, // "Mixer Error \0", // 19 |
{SPEAK_CF_OFF,1}, // "Carefree Error \0", // 20 |
{SPEAK_GPS_FIX,1}, // "GPS Fix lost \0", // 21 |
{SPEAK_ERR_COMPASS,0}, // "Magnet Error \0", // 22 |
{SPEAK_ERR_MOTOR,1}, // "Motor restart \0", // 23 |
{SPEAK_MAX_TEMPERAT,1},// "BL Limitation \0", // 24 |
{SPEAK_MAX_RANGE,1}, // "GPS Range \0", // 25 |
{SPEAK_ERROR,1}, // "No SD-Card \0", // 26 |
{SPEAK_ERROR,1}, // "SD-Logging error\0", // 27 |
{SPEAK_MAX_RANGE,1}, // "Flying range! \0", // 28 |
{SPEAK_MAX_ALTITUD,1}, // "Max Altitude! \0" // 29 |
{SPEAK_GPS_FIX,1}, // "No GPS fix \0" // 30 |
{SPEAK_ERR_CALIBARTION,0},// "compass not cal." // 31 |
{SPEAK_ERR_MOTOR,0}, // "BL-Selftest \0" // 32 |
{SPEAK_ERR_COMPASS,0}, // "no ext. compass" // 33 |
{SPEAK_ERR_COMPASS,0} // "compass sensor" // 34 |
}; |
void GetHottestBl(void) |
{ |
static unsigned char search = 0,tmp_max,tmp_min,who; |
if(Motor[search].Temperature > tmp_max) { tmp_max = Motor[search].Temperature; who = search;} |
else |
if(Motor[search].Temperature) if(Motor[search].Temperature < tmp_min) tmp_min = Motor[search].Temperature; |
if(++search >= MAX_MOTORS) |
{ |
search = 0; |
if(tmp_min != 255) MinBlTemperture = tmp_min; else MinBlTemperture = 0; |
MaxBlTemperture = tmp_max; |
HottestBl = who; |
tmp_min = 255; |
tmp_max = 0; |
who = 0; |
} |
} |
//--------------------------------------------------------------- |
void Hott_ClearLine(unsigned char line) |
{ |
HoTT_printfxy(0,line," "); |
} |
//--------------------------------------------------------------- |
unsigned char HoTT_Waring(void) |
{ |
unsigned char status = 0; |
static char old_status = 0; |
static int repeat; |
//if(Parameter_UserParam1) return(Parameter_UserParam1); |
ToNC_SpeakHoTT = SpeakHoTT; |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
{ |
if(LowVoltageLandingActive && (EE_Parameter.Receiver == RECEIVER_HOTT)) status = SPEAK_LANDING; |
else status = VOICE_MINIMALE_EINGANSSPANNUNG; // Jeti hat kein wort: "LANDEN" |
if(SpeakHoTT && old_status == VOICE_MINIMALE_EINGANSSPANNUNG) status = SpeakHoTT; // das soll auch noch durch kommen |
} |
else |
if(NC_ErrorCode && NC_ErrorCode < MAX_ERR_NUMBER) // Fehlercodes |
{ |
if(MotorenEin || !pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][1])) status = pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][0]); |
} |
if(!status) // Sprachansagen |
{ |
// if(!(GetParamByte(PID_SPEAK_HOTT_CFG) & 0x01)) SpeakHoTT = 0; // is the voice wanted? |
if(!(EE_Parameter.GlobalConfig3 & CFG3_SPEAK_ALL)) SpeakHoTT = 0; // is the voice wanted? |
else status = SpeakHoTT; |
} |
else ToNC_SpeakHoTT = status; |
if(old_status == status) // Gleichen Fehler nur alle 4 sek bringen |
{ |
if(!CheckDelay(repeat)) return(0); |
repeat = SetDelay(4000); |
} |
else repeat = SetDelay(2000); |
if(status) |
{ |
if(status == SpeakHoTT) SpeakHoTT = 0; |
} |
old_status = status; |
// DebugOut.Analog[16] = status; |
return(status); |
} |
/* |
unsigned char HoTTErrorCode(void) |
{ |
return(NC_ErrorCode); |
} |
*/ |
//--------------------------------------------------------------- |
void NC_Fills_HoTT_Telemety(void) |
{ |
unsigned char *ptr = NULL; |
unsigned char max = 0,i,z; |
switch(FromNaviCtrl.Param.Byte[11]) |
{ |
case HOTT_VARIO_PACKET_ID: |
ptr = (unsigned char *) &VarioPacket; |
max = sizeof(VarioPacket); |
break; |
case HOTT_GPS_PACKET_ID: |
ptr = (unsigned char *) &GPSPacket; |
max = sizeof(GPSPacket); |
break; |
case HOTT_ELECTRIC_AIR_PACKET_ID: |
ptr = (unsigned char *) &ElectricAirPacket; |
max = sizeof(ElectricAirPacket); |
break; |
case HOTT_GENERAL_PACKET_ID: |
ptr = (unsigned char *) &HoTTGeneral; |
max = sizeof(HoTTGeneral); |
break; |
case JETI_GPS_PACKET_ID1: |
ptr = (unsigned char *) &JetiExData[14].Value; |
max = sizeof(JetiExData[14].Value); |
break; |
case JETI_GPS_PACKET_ID2: |
ptr = (unsigned char *) &JetiExData[15].Value; |
max = sizeof(JetiExData[15].Value); |
break; |
case HOTT_WPL_NAME: |
ptr = (unsigned char *) WPL_Name; |
max = sizeof(WPL_Name)-1; |
break; |
} |
z = FromNaviCtrl.Param.Byte[0]; // Data allocation |
for(i=0; i < FromNaviCtrl.Param.Byte[1]; i++) |
{ |
if(z >= max) break; |
ptr[z] = FromNaviCtrl.Param.Byte[2+i]; |
z++; |
} |
} |
unsigned int BuildHoTT_Vario(void) |
{ |
unsigned int tmp = VARIO_ZERO; |
if(VarioCharacter == '+' || VarioCharacter == '-') |
{ |
tmp = VARIO_ZERO + (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 3; |
if(tmp < VARIO_ZERO && tmp > VARIO_ZERO - 50) tmp = VARIO_ZERO - 50; // weil es sonst erst bei < 0,5m/sek piept |
} |
else |
if((VarioCharacter == ' ') && (FC_StatusFlags & FC_STATUS_FLY)) |
{ |
tmp = VARIO_ZERO + HoTTVarioMeter; |
if(tmp > VARIO_ZERO) |
{ |
if(tmp < VARIO_ZERO + 100) tmp = VARIO_ZERO; |
else tmp -= 100; |
} |
if(tmp < VARIO_ZERO) |
{ |
if(tmp > VARIO_ZERO - 100) tmp = VARIO_ZERO; |
else tmp += 100; |
} |
} |
else |
if(VarioCharacter == '^') tmp = VARIO_ZERO + FromNC_AltitudeSpeed * 10; |
else |
if(VarioCharacter == 'v') tmp = VARIO_ZERO - FromNC_AltitudeSpeed * 10; |
return(tmp); |
} |
//--------------------------------------------------------------- |
unsigned char HoTT_Telemety(unsigned char packet_request) |
{ |
unsigned char i; |
//Debug("rqst: %02X",packet_request); |
switch(packet_request) |
{ |
case HOTT_VARIO_PACKET_ID: |
GPSPacket.WarnBeep = HoTT_Waring(); // Achtung: das ist richtig hier, damit der Varioton schon vorher abgestellt wird |
VarioPacket.Altitude = HoehenWert/100 + 500; |
if(!GPSPacket.WarnBeep) VarioPacket.m_sec = BuildHoTT_Vario(); else VarioPacket.m_sec = VARIO_ZERO; |
VarioPacket.m_3sec = VarioPacket.m_sec; |
VarioPacket.m_10sec = VarioPacket.m_sec; |
if (VarioPacket.Altitude < VarioPacket.MinAltitude) VarioPacket.MinAltitude = VarioPacket.Altitude; |
if (VarioPacket.Altitude > VarioPacket.MaxAltitude) VarioPacket.MaxAltitude = VarioPacket.Altitude; |
VarioPacket.WarnBeep = 0;//HoTT_Waring(); |
HoTT_DataPointer = (unsigned char *) &VarioPacket; |
VarioPacket.FreeCharacters[0] = VarioCharacter; |
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) VarioPacket.FreeCharacters[1] = 'C'; else VarioPacket.FreeCharacters[1] = ' '; |
// VarioPacket.FreeCharacters[2] = ' '; |
if(NC_ErrorCode) |
{ |
VarioPacket.Text[0] = NC_ErrorCode/10 + '0'; |
VarioPacket.Text[1] = NC_ErrorCode%10 + '0'; |
VarioPacket.Text[2] = ':'; |
for(i=0; i<16;i++) VarioPacket.Text[i+3] = pgm_read_byte(&NC_ERROR_TEXT[NC_ErrorCode][i]); |
VarioPacket.Text[19] = ' '; |
VarioPacket.Text[20] = ' '; |
} |
else |
if(LowVoltageLandingActive) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&LANDING[i]); // no Error |
else |
if(FC_StatusFlags & FC_STATUS_LOWBAT) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&UNDERVOLTAGE[i]); // no Error |
else |
if(ShowSettingNameTime) // no Error |
{ |
for(i=0; i<sizeof(SETTING);i++) VarioPacket.Text[i] = pgm_read_byte(&SETTING[i]); |
VarioPacket.Text[4] = '0' + ActiveParamSet; |
for(i=0; i<sizeof(EE_Parameter.Name);i++) VarioPacket.Text[i+7] = EE_Parameter.Name[i]; // no Error |
VarioPacket.Text[18] = ' '; |
VarioPacket.Text[19] = ' '; |
VarioPacket.Text[20] = ' '; |
} |
else |
if(NaviData_WaypointNumber) |
{ |
unsigned int tmp_int; |
unsigned char tmp; |
VarioPacket.Text[0] = 'W'; VarioPacket.Text[1] = 'P'; |
VarioPacket.Text[2] = ' '; |
VarioPacket.Text[3] = '0'+(NaviData_WaypointIndex) / 10; |
VarioPacket.Text[4] = '0'+(NaviData_WaypointIndex) % 10; |
VarioPacket.Text[5] = '/'; |
VarioPacket.Text[6] = '0'+(NaviData_WaypointNumber) / 10; |
VarioPacket.Text[7] = '0'+(NaviData_WaypointNumber) % 10; |
VarioPacket.Text[8] = ' '; |
tmp_int = NaviData_TargetDistance; |
if(tmp_int > 1000) { VarioPacket.Text[9] = '0'+(tmp_int) / 1000; tmp_int %= 1000;} |
else VarioPacket.Text[9] = ' '; |
if(tmp_int > 100) { VarioPacket.Text[10] = '0'+(tmp_int) / 100; tmp_int %= 100;} |
else VarioPacket.Text[10] = ' '; |
VarioPacket.Text[11] = '0'+(tmp_int) / 10; |
VarioPacket.Text[12] = '0'+(tmp_int) % 10; |
VarioPacket.Text[13] = 'm'; |
VarioPacket.Text[14] = ' '; |
tmp = NaviData_TargetHoldTime; |
if(tmp > 100) { VarioPacket.Text[15] = '0'+(tmp) / 100; tmp %= 100;} else VarioPacket.Text[15] = ' '; |
VarioPacket.Text[16] = '0'+(tmp) / 10; |
VarioPacket.Text[17] = '0'+(tmp) % 10; |
VarioPacket.Text[18] = 's'; |
VarioPacket.Text[19] = ' '; |
VarioPacket.Text[20] = ' '; |
} |
else |
if(!CalibrationDone) |
{ |
for(i=0; i<17;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i+2]); // no Error and not calibrated |
VarioPacket.Text[16] = '0'+VERSION_MAJOR; |
VarioPacket.Text[17] = '.'; |
VarioPacket.Text[18] = '0'+VERSION_MINOR/10; |
VarioPacket.Text[19] = '0'+VERSION_MINOR%10; |
VarioPacket.Text[20] = 'a'+VERSION_PATCH; |
} |
else |
{ |
for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i]); // no Error |
if(RedundanceBlOperation) VarioPacket.Text[0] = 'R'; |
} |
return(sizeof(VarioPacket)); |
break; |
case HOTT_GPS_PACKET_ID: |
GPSPacket.Altitude = HoehenWert/100 + 500; |
// GPSPacket.Distance = GPSInfo.HomeDistance/10; // macht die NC |
// GPSPacket.Heading = GPSInfo.HomeBearing/2; // macht die NC |
// GPSPacket.Speed = (GPSInfo.Speed * 36) / 10; // macht die NC |
// GPSPacket.WarnBeep = HoTT_Waring(); //(wird jetzt weiter oben gemacht) |
if(!GPSPacket.WarnBeep) GPSPacket.m_sec = BuildHoTT_Vario(); else GPSPacket.m_sec = VARIO_ZERO; |
GPSPacket.m_3sec = 120; |
GPSPacket.NumOfSats = GPSInfo.NumOfSats; |
if(GPSInfo.Flags & FLAG_DIFFSOLN) GPSPacket.SatFix = 'D'; |
else |
if(GPSInfo.SatFix == SATFIX_3D) GPSPacket.SatFix = ' '; |
else GPSPacket.SatFix = '!'; |
HoTT_DataPointer = (unsigned char *) &GPSPacket; |
GPSPacket.FreeCharacters[0] = NC_GPS_ModeCharacter; |
GPSPacket.FreeCharacters[2] = GPSPacket.SatFix; |
GPSPacket.HomeDirection = GPSInfo.HomeBearing / 2;//230; |
return(sizeof(GPSPacket)); |
break; |
case HOTT_ELECTRIC_AIR_PACKET_ID: |
GetHottestBl(); |
ElectricAirPacket.Altitude = HoehenWert/100 + 500; |
ElectricAirPacket.Battery1 = UBat; |
ElectricAirPacket.Battery2 = UBat; |
ElectricAirPacket.VoltageCell1 = CompassCorrected / 2; |
ElectricAirPacket.VoltageCell8 = ElectricAirPacket.VoltageCell1; |
ElectricAirPacket.VoltageCell6 = GPSInfo.HomeBearing / 2; |
ElectricAirPacket.VoltageCell7 = GPSInfo.HomeDistance/20; |
ElectricAirPacket.VoltageCell13 = ElectricAirPacket.VoltageCell6; |
ElectricAirPacket.VoltageCell14 = ElectricAirPacket.VoltageCell7; |
if(!GPSPacket.WarnBeep) ElectricAirPacket.m_sec = BuildHoTT_Vario(); else ElectricAirPacket.m_sec = VARIO_ZERO; |
ElectricAirPacket.m_3sec = 120; |
ElectricAirPacket.InputVoltage = UBat; |
ElectricAirPacket.Temperature1 = MinBlTemperture + 20; |
ElectricAirPacket.Temperature2 = MaxBlTemperture + 20; |
ElectricAirPacket.Capacity = Capacity.UsedCapacity/10; |
// ElectricAirPacket.WarnBeep = 0;//HoTT_Waring(); |
ElectricAirPacket.WarnBeep = GPSPacket.WarnBeep; |
ElectricAirPacket.Current = Capacity.ActualCurrent; |
HoTT_DataPointer = (unsigned char *) &ElectricAirPacket; |
ElectricAirPacket.FlightTimeMinutes = FlugSekunden / 60; |
ElectricAirPacket.FlightTimeSeconds = FlugSekunden % 60; |
return(sizeof(ElectricAirPacket)); |
break; |
case HOTT_GENERAL_PACKET_ID: |
GetHottestBl(); |
HoTTGeneral.Rpm = GPSInfo.HomeDistance/100; |
HoTTGeneral.VoltageCell1 = CompassCorrected / 2; |
HoTTGeneral.VoltageCell2 = KompassValue / 2; |
//HoTTGeneral.VoltageCell3 = Magnetstaerke -> macht NC |
//HoTTGeneral.VoltageCell4 = Inclinition -> macht NC |
HoTTGeneral.VoltageCell5 = DebugOut.Analog[28]; // I2C ErrorCounter |
HoTTGeneral.VoltageCell6 = GPSInfo.HomeBearing / 2; |
if(UBat > BattLowVoltageWarning + 2) HoTTGeneral.FuelPercent = (UBat - (BattLowVoltageWarning + 2)) * 3; |
else HoTTGeneral.FuelPercent = 0; |
if(HoTTGeneral.FuelPercent > 100) HoTTGeneral.FuelPercent = 100; |
HoTTGeneral.FuelCapacity = NC_ErrorCode;//HoehenWert/100; // Oelpegel |
// if(HoTTGeneral.FuelCapacity < 0) HoTTGeneral.FuelCapacity = 0; |
HoTTGeneral.Altitude = HoehenWert/100 + 500; |
HoTTGeneral.Battery1 = UBat; |
HoTTGeneral.Battery2 = UBat; |
if(!GPSPacket.WarnBeep) HoTTGeneral.m_sec = BuildHoTT_Vario(); else HoTTGeneral.m_sec = VARIO_ZERO; |
HoTTGeneral.m_3sec = 120 + GPSPacket.WarnBeep; |
HoTTGeneral.InputVoltage = UBat; |
HoTTGeneral.Temperature1 = MinBlTemperture + 20; |
HoTTGeneral.Temperature2 = MaxBlTemperture + 20; |
HoTTGeneral.Capacity = Capacity.UsedCapacity/10; |
HoTTGeneral.WarnBeep = 0;//HoTT_Waring(); |
HoTTGeneral.Current = Capacity.ActualCurrent; |
//HoTTGeneral.ErrorNumber = HoTTErrorCode(); |
HoTT_DataPointer = (unsigned char *) &HoTTGeneral; |
return(sizeof(HoTTGeneral)); |
break; |
default: return(0); |
} |
} |
//--------------------------------------------------------------- |
void HoTT_Menu(void) |
{ |
static unsigned char line, page = 0,show_current = 0,show_mag = 0, show_poti = 0; |
unsigned char tmp; |
HoTTVarioMeter = (HoTTVarioMeter * 7 + VarioMeter) / 8; |
// if(HottKeyboard) {beeptime = 1000;}; |
switch(page) |
{ |
case 0: |
switch(line++) |
{ |
case 0: |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
HoTT_printfxy_BLINK(0,0," %2i.%1iV ",UBat/10, UBat%10) |
else |
HoTT_printfxy(0,0," %2i.%1iV ",UBat/10, UBat%10) |
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
if(HoehenReglerAktiv) HoTT_printfxy_INV(10,0,"ALT:%4im %c", (int16_t)(HoehenWert/100),VarioCharacter) |
else HoTT_printfxy(10,0,"ALT:%4im ", (int16_t)(HoehenWert/100)) |
} |
else HoTT_printfxy(10,0,"ALT:---- "); |
break; |
case 1: |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
HoTT_printfxy_BLINK(0,1," %2i:%02i ",FlugSekunden/60,FlugSekunden%60) |
else HoTT_printfxy(0,1," %2i:%02i ",FlugSekunden/60,FlugSekunden%60); |
HoTT_printfxy(10,1,"DIR: %3d%c",CompassCorrected, HoTT_GRAD); |
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) HoTT_printfxy_INV(20,1,"C") else HoTT_printfxy(20,1," "); |
break; |
case 2: |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
HoTT_printfxy_BLINK(0,2," %5i ",Capacity.UsedCapacity) |
else HoTT_printfxy(0,2," %5i ",Capacity.UsedCapacity); |
HoTT_printfxy(12,2,"I:%2i.%1iA ",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10); |
break; |
case 3: |
HoTT_printfxy(9,0,":"); |
HoTT_printfxy(9,1,":"); |
HoTT_printfxy(9,2,":"); |
HoTT_printfxy(0,3,"---------+-----------"); |
// HoTT_printfxy(0,3,"---------------------"); |
HoTT_printfxy(0,6,"---------------------"); |
break; |
case 4: |
if(NaviDataOkay) |
{ |
HoTT_printfxy(9,4,":"); |
HoTT_printfxy(0,4,"SAT:%2d ",GPSInfo.NumOfSats); |
HoTT_printfxy(10,4,"DIST:%3dm",GPSInfo.HomeDistance/10); |
switch (GPSInfo.SatFix) |
{ |
case SATFIX_3D: |
if(GPSInfo.Flags & FLAG_DIFFSOLN) HoTT_printfxy(7,4,"D ") |
else HoTT_printfxy(7,4,"3D"); |
break; |
default: |
HoTT_printfxy_BLINK(7,4,"!!"); |
break; |
} |
} |
else |
{ |
Hott_ClearLine(4); |
} |
break; |
case 5: |
if(NaviDataOkay) |
{ |
if(show_mag) |
{ |
HoTT_printfxy(0,5,"MAG:%3u%% ",EarthMagneticField); |
HoTT_printfxy(12,5,"HM:%3d%c %c", GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter); |
HoTT_printfxy(9,5,"incl:%2d%c(%2i)",EarthMagneticInclination, HoTT_GRAD,EarthMagneticInclinationTheoretic); |
} |
else |
{ |
HoTT_printfxy(0,5," %2um/s: HM:%3d%c %c",GPSInfo.Speed, GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter); |
} |
} |
else Hott_ClearLine(5); |
break; |
case 6: |
break; |
case 7: if(NC_ErrorCode) |
{ |
if(HoTTBlink && NC_ErrorCode < MAX_ERR_NUMBER) |
{ |
Hott_ClearLine(7); |
HoTT_printfxy_INV(0,7,"ERR: %2d !",NC_ErrorCode); |
} |
else |
{ |
HoTT_printfxy(0,7,"ERR: "); _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);}; |
} |
else |
if(FC_StatusFlags & FC_STATUS_LOWBAT) HoTT_printfxy(1,7,"!! LiPo voltage !!") |
else HoTT_printfxy(0,7," www.MikroKopter.de "); |
break; |
case 8: //ASCIIPacket.WarnBeep = HoTT_Waring(); |
// ASCIIPacket.WarnBeep = Parameter_UserParam1; |
case 9: |
case 10: |
case 11: |
case 12: |
case 13: |
case 14: |
case 15: |
case 16: |
if(HottKeyboard == HOTT_KEY_DOWN) { LIBFC_HoTT_Clear(); page = 5; line = 0;} |
else |
if(HottKeyboard == HOTT_KEY_SET) { if(show_mag) show_mag = 0; else show_mag = 1;} |
else |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 1; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
case 1: |
switch(line++) |
{ |
case 0: |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
HoTT_printfxy_BLINK(0,0," %2i:%02i %2i.%1iV %4imAh",FlugSekunden/60,FlugSekunden%60,UBat/10, UBat%10,Capacity.UsedCapacity) |
else HoTT_printfxy(0,0," %2i:%02i %2i.%1iV %4imAh",FlugSekunden/60,FlugSekunden%60,UBat/10, UBat%10,Capacity.UsedCapacity); |
break; |
case 1: |
HoTT_printfxy(0,1,"DIR:%3d%c",CompassCorrected, HoTT_GRAD); |
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
if(HoehenReglerAktiv) HoTT_printfxy_INV(10,1,"ALT:%4im", (int16_t)(HoehenWert/100)) |
else HoTT_printfxy(10,1,"ALT:%4im", (int16_t)(HoehenWert/100)) |
} |
else HoTT_printfxy(10,1,"ALT:---- "); |
HoTT_printfxy(20,1,"%c",VarioCharacter); |
break; |
case 2: |
if(NaviDataOkay) |
{ |
HoTT_printfxy(1,2,"HM:%3d%c DIST:%3dm %c", GPSInfo.HomeBearing, HoTT_GRAD, GPSInfo.HomeDistance/10, NC_GPS_ModeCharacter); |
} |
else |
{ |
Hott_ClearLine(2); |
} |
break; |
case 3: |
HoTT_printfxy(0,3,"PWR:%2i.%1iA (%iW) ",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10,Capacity.ActualPower); |
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) HoTT_printfxy_INV(19,3,"CF") else HoTT_printfxy(19,3," "); |
break; |
case 4: |
if(NaviDataOkay) |
{ |
HoTT_printfxy(0,4,"GPS:%2um/s SAT:%d ",GPSInfo.Speed,GPSInfo.NumOfSats); |
switch (GPSInfo.SatFix) |
{ |
case SATFIX_3D: |
HoTT_printfxy(16,4," 3D "); |
break; |
//case SATFIX_2D: |
//case SATFIX_NONE: |
default: |
HoTT_printfxy_BLINK(16,4,"NOFIX"); |
break; |
} |
if(GPSInfo.Flags & FLAG_DIFFSOLN) |
{ |
HoTT_printfxy(16,4,"DGPS "); |
} |
} |
else |
{ //012345678901234567890 |
HoTT_printfxy(0,4," No NaviCtrl "); |
} |
break; |
case 5: |
if(show_current) |
{ |
// HoTT_printfxy(0,5,"%2i.%i %2i.%i %2i.%i %2i.%iA", Motor[0].Current/10,Motor[0].Current%10,Motor[1].Current/10,Motor[1].Current%10,Motor[2].Current/10,Motor[2].Current%10,Motor[3].Current/10,Motor[3].Current%10); |
HoTT_printfxy(0,5,"%2i.%i %2i.%i %2i.%i %2i.%iA", BL3_Current(0)/10,BL3_Current(0)%10,BL3_Current(1)/10,BL3_Current(1)%10,BL3_Current(2)/10,BL3_Current(2)%10,BL3_Current(3)/10,BL3_Current(3)%10); |
} |
else |
{ |
HoTT_printfxy(0,5,"%3i %3i %3i %3i%cC", Motor[0].Temperature, Motor[1].Temperature, Motor[2].Temperature, Motor[3].Temperature,HoTT_GRAD); |
} |
break; |
case 6: |
if(show_current) |
{ |
if(RequiredMotors == 4) Hott_ClearLine(6); |
else |
// if(RequiredMotors == 6) HoTT_printfxy(0,6,"%2i.%i %2i.%iA", Motor[4].Current/10,Motor[4].Current%10,Motor[5].Current/10,Motor[5].Current%10) |
if(RequiredMotors == 6) HoTT_printfxy(0,6,"%2i.%i %2i.%iA", BL3_Current(4)/10,BL3_Current(4)%10, BL3_Current(5)/10,BL3_Current(5)%10) |
else |
// if(RequiredMotors > 6) HoTT_printfxy(0,6,"%2i.%i %2i.%i %2i.%i %2i.%iA", Motor[4].Current/10,Motor[4].Current%10,Motor[5].Current/10,Motor[5].Current%10,Motor[6].Current/10,Motor[6].Current%10,Motor[7].Current/10,Motor[7].Current%10); |
if(RequiredMotors > 6) HoTT_printfxy(0,6,"%2i.%i %2i.%i %2i.%i %2i.%iA", BL3_Current(4)/10,BL3_Current(4)%10,BL3_Current(5)/10,BL3_Current(5)%10,BL3_Current(6)/10,BL3_Current(6)%10,BL3_Current(7)/10,BL3_Current(7)%10,BL3_Current(8)/10,BL3_Current(8)%10); |
} |
else |
{ |
if(RequiredMotors == 4) Hott_ClearLine(6); |
else |
if(RequiredMotors == 6) HoTT_printfxy(0,6,"%3i %3i%cC ", Motor[4].Temperature, Motor[5].Temperature,HoTT_GRAD) |
else |
if(RequiredMotors > 6) HoTT_printfxy(0,6,"%3i %3i %3i %3i%cC", Motor[4].Temperature, Motor[5].Temperature, Motor[6].Temperature, Motor[7].Temperature,HoTT_GRAD); |
} |
break; |
case 7: if(NC_ErrorCode) |
{ |
if(HoTTBlink && NC_ErrorCode < MAX_ERR_NUMBER) |
{ |
Hott_ClearLine(7); |
HoTT_printfxy_INV(0,7,"ERR: %2d !",NC_ErrorCode); |
} |
else |
{ |
HoTT_printfxy(0,7,"ERR: "); _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);}; |
} |
else |
if(FC_StatusFlags & FC_STATUS_LOWBAT) HoTT_printfxy(1,7,"!! LiPo voltage !!") |
else HoTT_printfxy(0,7," www.MikroKopter.de "); |
break; |
case 8: // ASCIIPacket.WarnBeep = HoTT_Waring(); |
// ASCIIPacket.WarnBeep = Parameter_UserParam1; |
case 9: |
case 10: |
case 11: |
case 12: |
case 13: |
case 14: |
case 15: |
case 16: |
if(HottKeyboard == HOTT_KEY_SET) { if(show_current) show_current = 0; else show_current = 1; Hott_ClearLine(5); Hott_ClearLine(6);} |
else |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 2; line = 0;} |
else |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 0; line = 0;} |
//if(HottKeyboard) HoTT_printfxy(15,6,"%KEY:%02x ",HottKeyboard); |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
case 2: |
switch(line++) |
{ |
case 0: |
HoTT_printfxy_INV(0,0,"Setting:%u %s ",ActiveParamSet,EE_Parameter.Name); |
break; |
case 1: HoTT_printfxy(0,1,"Min:%2i.%1iV %s ",BattLowVoltageWarning/10, BattLowVoltageWarning%10, Mixer.Name); |
break; |
case 2: HoTT_printfxy(0,2,"ALT:"); |
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
if(!(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER)) HoTT_printf("POTI:%3u ", Parameter_HoehenSchalter) |
else |
{ |
if(Parameter_HoehenSchalter > 50) HoTT_printf("(ON) ") else HoTT_printf("(OFF) "); |
if((Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT)) HoTT_printf("LIMIT", Parameter_HoehenSchalter) |
else HoTT_printf("VARIO", Parameter_HoehenSchalter); |
} |
} |
else |
HoTT_printf("DISABLED"); |
break; |
case 3: HoTT_printfxy(0,3,"CF:"); |
if(!EE_Parameter.CareFreeChannel) HoTT_printf("DISABLED") |
else |
{ |
if(CareFree) HoTT_printf(" (ON) ") else HoTT_printf(" (OFF)"); |
if(EE_Parameter.ExtraConfig & CFG_LEARNABLE_CAREFREE) HoTT_printf(" TEACH"); |
} |
break; |
case 4: HoTT_printfxy(0,4,"GPS:"); |
if(!(Parameter_GlobalConfig & CFG_GPS_AKTIV)) HoTT_printf("DISABLED") |
else |
{ |
tmp = GetChannelValue(EE_Parameter.NaviGpsModeChannel); |
if(tmp < 50) HoTT_printf("(FREE)") |
else |
if(tmp >= 180) HoTT_printf("(HOME)") |
else |
if(EE_Parameter.ExtraConfig & CFG_GPS_AID) HoTT_printf("(AID) ") |
else HoTT_printf("(HOLD)") |
} |
if(EE_Parameter.FailSafeTime) HoTT_printfxy(10,4," FS:%usek ",EE_Parameter.FailSafeTime) |
break; |
case 5: HoTT_printfxy(0,5,"HOME ALT:"); |
if(EE_Parameter.ComingHomeAltitude) HoTT_printf("%um",EE_Parameter.ComingHomeAltitude) else HoTT_printf("HOLD "); |
break; |
case 6: |
if(!show_poti) |
{ |
HoTT_printfxy(0,6,"Ni:%4i Ro:%4i C:%3i",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]], Parameter_ServoNickControl); |
HoTT_printfxy(0,7,"Gs:%4i Ya:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]); |
} |
else |
{ |
HoTT_printfxy(0,6,"P1:%4i P2:%4i 3:%3i",Poti1,Poti2, Poti3); |
HoTT_printfxy(0,7,"P4:%4i P5:%4i 6:%3i",Poti4,Poti5, Poti6); |
} |
break; |
case 7: //HoTT_printfxy(0,6,"WARNINGS:"); |
if(HoTTBlink) |
{ |
LIBFC_HoTT_SetPos(6 * 21); |
if(!(Parameter_GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) HoTT_printf_BLINK("COUPLING OFF! "); |
if(EE_Parameter.BitConfig & (CFG_LOOP_LINKS | CFG_LOOP_RECHTS | CFG_LOOP_UNTEN | CFG_LOOP_OBEN)) HoTT_printf_BLINK("LOOPING! "); |
if(Parameter_GlobalConfig & CFG_HEADING_HOLD) HoTT_printf_BLINK("HH! "); |
if(!(Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) HoTT_printf_BLINK("COMPASS OFF! "); |
} |
break; |
case 8: //ASCIIPacket.WarnBeep = HoTT_Waring(); |
break; |
case 9: |
case 10: |
case 11: |
case 12: |
case 13: |
case 14: |
case 15: |
case 16: |
if(HottKeyboard == HOTT_KEY_SET) { if(show_poti) show_poti = 0; else show_poti = 1; Hott_ClearLine(6); Hott_ClearLine(7);} |
else |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 3; line = 0;} |
else |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 1; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
case 3: |
switch(line++) |
{ |
static unsigned char load_waypoint_tmp2 = 1, changed2; |
case 0: |
HoTT_printfxy(0,0,"Load Waypoints"); |
HoTT_printfxy(0,1,"(Relative Positions)"); |
// HoTT_printfxy(0,1,"(Absolute)"); |
break; |
case 1: |
if(NaviData_WaypointNumber) HoTT_printfxy(0,6,"Active WP:%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber) |
else HoTT_printfxy(0,6,"No WPs active ") |
break; |
case 2: |
HoTT_printfxy(0,7,"%2i.%1iV ",UBat/10, UBat%10) |
HoTT_printfxy(11,7,"%s",WPL_Name) |
case 3: |
case 4: |
case 5: |
if(load_waypoint_tmp2) |
{ |
if(changed2 && HoTTBlink) HoTT_printfxy(10,3," ") |
else HoTT_printfxy(10,3,"%2i ",load_waypoint_tmp2); |
HoTT_printfxy(0,3,"Load list:") |
} |
else |
{ |
HoTT_printfxy(0,3,"Load list: -- "); |
} |
if(NaviData_MaxWpListIndex == 0) HoTT_printfxy(0,4,"No SD-Card ") |
else |
{ |
if(GPSInfo.SatFix == SATFIX_3D) |
{ |
if(changed2 && load_waypoint_tmp2) HoTT_printfxy(0,4,"(Set -> Load)") |
else HoTT_printfxy(0,4," "); |
if(HottKeyboard == HOTT_KEY_SET) { if(load_waypoint_tmp2) ToNC_Load_WP_List = load_waypoint_tmp2 | 128; changed2 = 0;} |
} else HoTT_printfxy(0,4,"!No GPS-Fix! "); |
} |
if(HottKeyboard == HOTT_KEY_UP && load_waypoint_tmp2 < NaviData_MaxWpListIndex) { changed2 = 1; load_waypoint_tmp2++;HoTTBlink = 0;} |
if(HottKeyboard == HOTT_KEY_DOWN && load_waypoint_tmp2 > 1) { changed2 = 1; load_waypoint_tmp2--;HoTTBlink = 0;}; |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 4; line = 0;} |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 2; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
case 4: |
switch(line++) |
{ |
static unsigned char load_waypoint_tmp = 1, changed; |
case 0: |
HoTT_printfxy(0,0,"Load Waypoints"); |
HoTT_printfxy(0,1,"(Fixed Positions)"); |
break; |
case 1: |
if(NaviData_WaypointNumber) HoTT_printfxy(0,6,"Active WP:%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber) |
else HoTT_printfxy(0,6,"No WPs active ") |
break; |
case 2: |
HoTT_printfxy(0,7,"%2i.%1iV ",UBat/10, UBat%10) |
HoTT_printfxy(11,7,"%s",WPL_Name) |
case 3: |
case 4: |
case 5: |
HoTT_printfxy(0,3,"Load list:") |
if(load_waypoint_tmp) |
{ |
if(changed && HoTTBlink) HoTT_printfxy(10,3," ") |
else HoTT_printfxy(10,3,"%2d (FIX)",load_waypoint_tmp); |
} |
else |
{ |
HoTT_printfxy(10,3," --") |
} |
if(NaviData_MaxWpListIndex == 0) HoTT_printfxy(0,4,"No SD-Card ") |
else |
{ |
if(changed && load_waypoint_tmp) HoTT_printfxy(0,4,"(Set -> Load)") |
else HoTT_printfxy(0,4," "); |
} |
if(HottKeyboard == HOTT_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { changed = 1; load_waypoint_tmp++; HoTTBlink = 0;} |
if(HottKeyboard == HOTT_KEY_DOWN && load_waypoint_tmp > 1) { changed = 1; load_waypoint_tmp--; HoTTBlink = 0;}; |
if(HottKeyboard == HOTT_KEY_SET) { if(load_waypoint_tmp) ToNC_Load_WP_List = load_waypoint_tmp; changed = 0;} |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page++; line = 0;} |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page--; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
case 5: |
switch(line++) |
{ |
static unsigned char wp_tmp, changed; |
case 0: |
HoTT_printfxy(0,0,"Store single Position"); |
// HoTT_printfxy(0,1,"(Fixed Positions)"); |
break; |
case 1: |
HoTT_printfxy(0,2," %2i.%1iV ",UBat/10, UBat%10) |
HoTT_printfxy(0,3," %2i:%02i ",FlugSekunden/60,FlugSekunden%60); |
// HoTT_printfxy(0,4,"Dist:%3dm",NaviData_TargetDistance) |
break; |
case 2: |
HoTT_printfxy(11,2,"ALT:%4im", (int16_t)(HoehenWert/100)) |
HoTT_printfxy(11,3,"DIR: %3d%c",CompassCorrected, HoTT_GRAD); |
HoTT_printfxy(11,4,"Cam: %3i",Parameter_ServoNickControl); |
break; |
case 3: |
case 4: |
case 5: |
HoTT_printfxy(0,6,"Store point:") |
if(wp_tmp) |
{ |
if(changed && HoTTBlink) HoTT_printfxy(13,6," ") |
else HoTT_printfxy(13,6,"%2d ",wp_tmp); |
} |
else |
{ |
HoTT_printfxy(13,6,"--") |
} |
if(GPSInfo.SatFix == SATFIX_3D) |
{ |
if(NaviData_MaxWpListIndex == 0) HoTT_printfxy(0,7,"No SD-Card ") |
else |
{ |
if(changed && wp_tmp) HoTT_printfxy(0,7,"(Set -> Store)") |
else Hott_ClearLine(7); |
} |
if(HottKeyboard == HOTT_KEY_SET) { if(wp_tmp) ToNC_Store_SingePoint = wp_tmp; changed = 0;} |
} |
else HoTT_printfxy(0,7,"!No GPS-Fix! "); |
if(HottKeyboard == HOTT_KEY_UP && wp_tmp < NaviData_MaxWpListIndex) { changed = 1; wp_tmp++; HoTTBlink = 0;} |
if(HottKeyboard == HOTT_KEY_DOWN && wp_tmp > 1) { changed = 1; wp_tmp--; HoTTBlink = 0;}; |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page++; line = 0;} |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page--; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
case 6: |
switch(line++) |
{ |
static unsigned char wp_tmp, changed; |
case 0: |
HoTT_printfxy(0,0,"Load single Position"); |
// HoTT_printfxy(0,1,"(Fixed Positions)"); |
break; |
case 1: |
HoTT_printfxy(0,2," %2i.%1iV ",UBat/10, UBat%10) |
HoTT_printfxy(0,3," %2i:%02i ",FlugSekunden/60,FlugSekunden%60); |
// HoTT_printfxy(0,4,"Dist:%3dm",NaviData_TargetDistance) |
if(NaviData_WaypointNumber) HoTT_printfxy(0,5,"WP:%2d/%d Dist:%3dm ",NaviData_WaypointIndex,NaviData_WaypointNumber,NaviData_TargetDistance) |
else Hott_ClearLine(5); |
break; |
case 2: |
if(FromNC_AltitudeSpeed) |
HoTT_printfxy(8,2,"ALT:%4i/%im ", (int16_t)(HoehenWert/100),(int16_t)(FromNC_AltitudeSetpoint/100)) |
else |
HoTT_printfxy(8,2,"ALT:%4im ",(int16_t)(HoehenWert/100)) |
HoTT_printfxy(8,3,"DIR: %3d%c",CompassCorrected, HoTT_GRAD); |
HoTT_printfxy(8,4,"Cam: %3i",Parameter_ServoNickControl); |
break; |
// HoTT_printfxy(11,7,"%s",WPL_Name) |
case 3: |
case 4: |
case 5: |
if(HottKeyboard) DebugOut.Analog[17]++; |
HoTT_printfxy(0,6,"load point:") |
if(wp_tmp) |
{ |
if(changed && HoTTBlink) HoTT_printfxy(11,6," ") |
else HoTT_printfxy(11,6,"%2d",wp_tmp); |
} |
else |
{ |
HoTT_printfxy(11,6,"--") |
} |
if(NaviData_MaxWpListIndex == 0) HoTT_printfxy(0,7,"No SD-Card ") |
else |
{ |
if(changed && wp_tmp) HoTT_printfxy(0,7,"(Set -> Load)") |
else |
{ |
Hott_ClearLine(7); |
if(NaviData_WaypointNumber) HoTT_printfxy(0,7,"%s",WPL_Name); |
} |
} |
if(HottKeyboard == HOTT_KEY_UP && wp_tmp < NaviData_MaxWpListIndex) { changed = 1; wp_tmp++; HoTTBlink = 0;} |
if(HottKeyboard == HOTT_KEY_DOWN && wp_tmp > 1) { changed = 1; wp_tmp--; HoTTBlink = 0;}; |
if(HottKeyboard == HOTT_KEY_SET) { if(wp_tmp) ToNC_Load_SingePoint = wp_tmp; changed = 0;} |
// if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page++; line = 0;} |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page--; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
default: page = 0; |
break; |
} |
} |
#endif |
/tags/V2.06e/hottmenu.h |
---|
0,0 → 1,239 |
#ifndef _HOTTMENU_H |
#define _HOTTMENU_H |
extern unsigned char NaviData_WaypointIndex; |
extern unsigned char NaviData_WaypointNumber, NaviData_TargetHoldTime,ToNC_Load_WP_List,NaviData_MaxWpListIndex; |
extern unsigned char ToNC_Load_SingePoint, ToNC_Store_SingePoint; |
extern char WPL_Name[10]; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#define SPEAK_ERR_CALIBARTION 1 |
#define SPEAK_ERR_RECEICER 2 |
#define SPEAK_ERR_DATABUS 3 |
#define SPEAK_ERR_NAVI 4 |
#define SPEAK_ERROR 5 |
#define SPEAK_ERR_COMPASS 6 |
#define SPEAK_ERR_SENSOR 7 |
#define SPEAK_ERR_GPS 8 |
#define SPEAK_ERR_MOTOR 9 |
#define SPEAK_MAX_TEMPERAT 10 |
#define SPEAK_ALTI_REACHED 11 |
#define SPEAK_WP_REACHED 12 |
#define SPEAK_NEXT_WP 13 |
#define SPEAK_LANDING 14 |
#define SPEAK_GPS_FIX 15 |
#define SPEAK_UNDERVOLTAGE 16 |
#define SPEAK_GPS_HOLD 17 |
#define SPEAK_GPS_HOME 18 |
#define SPEAK_GPS_OFF 19 |
#define SPEAK_BEEP 20 |
#define SPEAK_MIKROKOPTER 21 |
#define SPEAK_CAPACITY 22 |
#define SPEAK_CF_OFF 23 |
#define SPEAK_CALIBRATE 24 |
#define SPEAK_MAX_RANGE 25 |
#define SPEAK_MAX_ALTITUD 26 |
#define SPEAK_MK_OFF 38 |
#define SPEAK_ALTITUDE_ON 39 |
#define SPEAK_ALTITUDE_OFF 40 |
#define SPEAK_CF_ON 46 |
#define SPEAK_SINKING 47 |
#define SPEAK_RISING 48 |
#define SPEAK_HOLDING 49 |
#define SPEAK_GPS_ON 50 |
#define SPEAK_FOLLWING 51 |
#define SPEAK_STARTING 52 |
#define MAX_ERR_NUMBER (34+1) |
extern const char PROGMEM NC_ERROR_TEXT[MAX_ERR_NUMBER][17]; |
extern unsigned int NaviData_TargetDistance; |
extern unsigned char MaxBlTemperture; |
extern unsigned char MinBlTemperture; |
extern unsigned char HottestBl; |
extern unsigned char HottKeyboard,HoTT_RequestedSensor; |
extern unsigned char HottUpdate(unsigned char key); |
extern unsigned char SpeakHoTT,ShowSettingNameTime; |
extern unsigned char ToNC_SpeakHoTT; |
extern volatile unsigned char *HoTT_DataPointer; |
extern void CreateHoTT_Menu(void); |
extern void LIBFC_HoTT_Putchar(char); |
extern void LIBFC_HoTT_Putchar_INV(char); // print Invers |
extern void LIBFC_HoTT_Putchar_BLINK(char); |
extern void LIBFC_HoTT_SetPos(unsigned char); |
extern void LIBFC_HoTT_Clear(void); |
extern void NC_Fills_HoTT_Telemety(void); |
extern void HoTT_Menu(void); |
extern unsigned char HoTT_Telemety(unsigned char); |
extern unsigned char HoTT_Waring(void); |
extern volatile unsigned char HoTTBlink; |
extern void GetHottestBl(void); |
typedef struct |
{ |
unsigned char StartByte; // 0x7C |
unsigned char Packet_ID; // HOTT_GENERAL_PACKET_ID |
unsigned char WarnBeep; // 3 Anzahl der Töne 0..36 |
unsigned char SensorID; // 4 0xD0 |
unsigned char InverseStatus1; // 5 |
unsigned char InverseStatus2; // 6 |
unsigned char VoltageCell1; // 7 208 = 4,16V (Voltage * 50 = Wert) |
unsigned char VoltageCell2; // 8 209 = 4,18V |
unsigned char VoltageCell3; // 9 |
unsigned char VoltageCell4; // 10 |
unsigned char VoltageCell5; // 11 |
unsigned char VoltageCell6; // 12 |
unsigned int Battery1; // 13+14 51 = 5,1V |
unsigned int Battery2; // 15+16 51 = 5,1V |
unsigned char Temperature1; // 17 44 = 24°C, 0 = -20°C |
unsigned char Temperature2; // 18 44 = 24°C, 0 = -20°C |
unsigned char FuelPercent; // 19 |
signed int FuelCapacity; // 20+21 |
unsigned int Rpm; // 22+23 |
signed int Altitude; // 24+25 |
unsigned int m_sec; // 26+27 3000 = 0 |
unsigned char m_3sec; // 28 120 = 0 |
unsigned int Current; // 29+30 1 = 0.1A |
unsigned int InputVoltage; // 31+32 66 = 6,6V |
unsigned int Capacity; // 33+34 1 = 10mAh |
unsigned int Speed; // 35+36 |
unsigned char LowestCellVoltage; // 37 |
unsigned char LowestCellNumber; // 38 |
unsigned int Rpm2; // 39+40 |
unsigned char ErrorNumber; // 41 |
unsigned char Pressure; // 42 in 0,1bar 20=2,0bar |
unsigned char Version; // 43 |
unsigned char EndByte; // 0x7D |
} HoTTGeneral_t; |
typedef struct |
{ |
unsigned char StartByte; // 0x7C |
unsigned char Packet_ID; // HOTT_ELECTRIC_AIR_PACKET_ID |
unsigned char WarnBeep; // Anzahl der Töne 0..36 |
unsigned char SensorID; // 4 0xE0 |
unsigned char InverseStatus1; // 5 |
unsigned char InverseStatus2; // 6 |
unsigned char VoltageCell1; // 7 208 = 4,16V (Voltage * 50 = Wert) |
unsigned char VoltageCell2; // 209 = 4,18V |
unsigned char VoltageCell3; // |
unsigned char VoltageCell4; // |
unsigned char VoltageCell5; // |
unsigned char VoltageCell6; // |
unsigned char VoltageCell7; // |
unsigned char VoltageCell8; // |
unsigned char VoltageCell9; // |
unsigned char VoltageCell10; // |
unsigned char VoltageCell11; // |
unsigned char VoltageCell12; // |
unsigned char VoltageCell13; // |
unsigned char VoltageCell14; // 20 |
unsigned int Battery1; // 21+22 51 = 5,1V |
unsigned int Battery2; // 23+24 51 = 5,1V |
unsigned char Temperature1; // 25 44 = 24°C, 0 = -20°C |
unsigned char Temperature2; // 26 44 = 24°C, 0 = -20°C |
signed int Altitude; // 27+28 |
unsigned int Current; // 29+30 1 = 0.1A |
unsigned int InputVoltage; // 31+32 66 = 6,6V |
unsigned int Capacity; // 33+34 1 = 10mAh |
unsigned int m_sec; // 35+36 30000 = 0 |
unsigned char m_3sec; // 37 120 = 0 |
unsigned int Rpm; // 38+39 |
unsigned char FlightTimeMinutes; // 40 |
unsigned char FlightTimeSeconds; // 41 |
unsigned char Speed; // 42 1=2km |
unsigned char Version; // 43 0x00 |
unsigned char EndByte; // 0x7D |
} ElectricAirPacket_t; |
typedef struct |
{ |
unsigned char StartByte; // 0x7C |
unsigned char Packet_ID; // 0x89 - Vario ID |
unsigned char WarnBeep; //3 // Anzahl der Töne 0..36 |
unsigned char SensorID; // 0x90 |
unsigned char InverseStatus; |
signed int Altitude; //6+7 // 500 = 0m |
signed int MaxAltitude; //8+9 // 500 = 0m |
signed int MinAltitude; //10+11 // 500 = 0m |
unsigned int m_sec; //12+13 // 3000 = 0 |
unsigned int m_3sec; //14+15 |
unsigned int m_10sec; //26+17 |
char Text[21]; //18-38 |
char FreeCharacters[3]; // 39-41 |
unsigned char NullByte; // 42 0x00 |
unsigned char Version; // 43 |
unsigned char EndByte; // 0x7D |
} VarioPacket_t; |
typedef struct |
{ |
unsigned char StartByte; //0 // 0x7C |
unsigned char Packet_ID; //1 // 0x8A - GPS ID |
unsigned char WarnBeep; //2 // Anzahl der Töne 0..36 |
unsigned char SensorID; // 4 0xA0 |
unsigned char InverseStatus1; // 5 |
unsigned char InverseStatus2; // 6 |
unsigned char Heading; //7 // 1 = 2° |
unsigned int Speed; //8+9 // in km/h |
unsigned char Lat_North; //10 |
unsigned char Lat_G; //11 |
unsigned char Lat_M; //12 |
unsigned char Lat_Sek1; //13 |
unsigned char Lat_Sek2; //14 |
unsigned char Lon_East; //15 |
unsigned char Lon_G; //16 |
unsigned char Lon_M; //17 |
unsigned char Lon_Sek1; //18 |
unsigned char Lon_Sek2; //19 |
unsigned int Distance; //20+21 // 9000 = 0m |
signed int Altitude; //22+23 // 500 = 0m |
unsigned int m_sec; //24+25 // 3000 = 0 |
unsigned char m_3sec; //26 120 = 0 |
unsigned char NumOfSats; //27 |
unsigned char SatFix; //28 |
unsigned char HomeDirection; // 29 |
unsigned char AngleX; // 30 |
unsigned char AngleY; // 31 |
unsigned char AngleZ; // 32 |
signed int GyroX; //33+34 |
signed int GyroY; //35+36 |
signed int GyroZ; //37+38 |
unsigned char Vibration; // 39 |
char FreeCharacters[3]; // 40-42 |
unsigned char Version; // 43 |
unsigned char EndByte; // 0x7D |
} GPSPacket_t; |
typedef struct |
{ |
unsigned char StartByte; // 0x7B |
unsigned char Packet_ID; // |
unsigned char WarnBeep; // Anzahl der Töne 0..36 |
char Text[8*21]; |
unsigned char EndByte; // 0x7D |
} ASCIIPacket_t; |
extern GPSPacket_t GPSPacket; |
extern VarioPacket_t VarioPacket; |
extern ASCIIPacket_t ASCIIPacket; |
extern ElectricAirPacket_t ElectricAirPacket; |
extern HoTTGeneral_t HoTTGeneral; |
#define HOTT_VARIO_PACKET_ID 0x89 |
#define HOTT_GPS_PACKET_ID 0x8A |
#define HOTT_ELECTRIC_AIR_PACKET_ID 0x8E |
#define HOTT_GENERAL_PACKET_ID 0x8D |
#define JETI_GPS_PACKET_ID1 0x01 |
#define JETI_GPS_PACKET_ID2 0x02 |
#define HOTT_WPL_NAME 0x03 |
#endif |
#endif |
/tags/V2.06e/isqrt.S |
---|
0,0 → 1,203 |
;-----------------------------------------------------------------------------; |
; Fast integer squareroot routines for avr-gcc project (C)ChaN, 2008 |
; http://elm-chan.org/docs/avrlib/sqrt32.S |
;-----------------------------------------------------------------------------; |
; uint16_t isqrt32 (uint32_t n); |
; uint8_t isqrt16 (uint16_t n); |
; uint16_t ihypot (int16_t x, int16_t y); |
;-----------------------------------------------------------------------------: |
; 32bit integer squareroot |
;-----------------------------------------------------------------------------; |
; uint16_t isqrt32 ( |
; uint32_t n |
; ); |
; |
; Return Value: |
; Squareroot of n. |
; |
; Size = 53 words |
; Clock = 532..548 cycles |
; Stack = 0 byte |
.global isqrt32 |
.func isqrt32 |
isqrt32: |
clr r0 |
clr r18 |
clr r19 |
clr r20 |
ldi r21, 1 |
clr r27 |
clr r30 |
clr r31 |
ldi r26, 16 |
1: lsl r22 |
rol r23 |
rol r24 |
rol r25 |
rol r0 |
rol r18 |
rol r19 |
rol r20 |
lsl r22 |
rol r23 |
rol r24 |
rol r25 |
rol r0 |
rol r18 |
rol r19 |
rol r20 |
brpl 2f |
add r0, r21 |
adc r18, r27 |
adc r19, r30 |
adc r20, r31 |
rjmp 3f |
2: sub r0, r21 |
sbc r18, r27 |
sbc r19, r30 |
sbc r20, r31 |
3: lsl r21 |
rol r27 |
rol r30 |
andi r21, 0b11111000 |
ori r21, 0b00000101 |
sbrc r20, 7 |
subi r21, 2 |
dec r26 |
brne 1b |
lsr r30 |
ror r27 |
ror r21 |
lsr r30 |
ror r27 |
ror r21 |
mov r24, r21 |
mov r25, r27 |
ret |
.endfunc |
;-----------------------------------------------------------------------------: |
; 16bit integer squareroot |
;-----------------------------------------------------------------------------; |
; uint8_t isqrt16 ( |
; uint16_t n |
; ); |
; |
; Return Value: |
; Squareroot of n. |
; |
; Size = 33 words |
; Clock = 181..189 cycles |
; Stack = 0 byte |
.global isqrt16 |
.func isqrt16 |
isqrt16: |
clr r18 |
clr r19 |
ldi r20, 1 |
clr r21 |
ldi r22, 8 |
1: lsl r24 |
rol r25 |
rol r18 |
rol r19 |
lsl r24 |
rol r25 |
rol r18 |
rol r19 |
brpl 2f |
add r18, r20 |
adc r19, r21 |
rjmp 3f |
2: sub r18, r20 |
sbc r19, r21 |
3: lsl r20 |
rol r21 |
andi r20, 0b11111000 |
ori r20, 0b00000101 |
sbrc r19, 7 |
subi r20, 2 |
dec r22 |
brne 1b |
lsr r21 |
ror r20 |
lsr r21 |
ror r20 |
mov r24, r20 |
ret |
.endfunc |
;-----------------------------------------------------------------------------: |
; 16bit integer hypot (megaAVR is required) |
;-----------------------------------------------------------------------------; |
; uint16_t ihypot ( |
; int16_t x, |
; int16_t y |
; ); |
; |
; Return Value: |
; Squareroot of (x*x + y*y) |
; |
; Size = 42 words |
; Clock = 581..597 cycles |
; Stack = 0 byte |
.global ihypot |
.func ihypot |
ihypot: |
clr r26 |
sbrs r25, 7 |
rjmp 1f |
com r24 |
com r25 |
adc r24, r26 |
adc r25, r26 |
1: sbrs r23, 7 |
rjmp 2f |
com r22 |
com r23 |
adc r22, r26 |
adc r23, r26 |
2: mul r22, r22 |
movw r18, r0 |
mul r23, r23 |
movw r20, r0 |
mul r22, r23 |
add r19, r0 |
adc r20, r1 |
adc r21, r26 |
add r19, r0 |
adc r20, r1 |
adc r21, r26 |
mul r24, r24 |
movw r30, r0 |
mul r25, r25 |
add r18, r30 |
adc r19, r31 |
adc r20, r0 |
adc r21, r1 |
mul r24, r25 |
add r19, r0 |
adc r20, r1 |
adc r21, r26 |
add r19, r0 |
adc r20, r1 |
adc r21, r26 |
movw r24, r20 |
movw r22, r18 |
clr r1 |
rjmp isqrt32 |
.endfunc |
/tags/V2.06e/isqrt.h |
---|
0,0 → 1,11 |
#ifndef _ISQRT_H |
#define _ISQRT_H |
#include <inttypes.h> |
// coded in assembler file |
extern uint16_t isqrt32(uint32_t n); |
extern uint8_t isqrt16(uint16_t n); |
extern uint16_t ihypot(int16_t x, int16_t y); |
#endif // _ISQRT_H |
/tags/V2.06e/jeti_ex.c |
---|
0,0 → 1,144 |
#include "libfc.h" |
#include "printf_P.h" |
#include "main.h" |
#include "spi.h" |
#include "capacity.h" |
#include "jeti_ex.h" |
#include "hottmenu.h" |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
const char PROGMEM JETI_CODE[53] = |
{ |
0, // 0 |
'O', // SPEAK_ERR_CALIBARTION 1 |
'P', // SPEAK_ERR_RECEICER 2 |
'Q', // SPEAK_ERR_DATABUS 3 |
'R', // SPEAK_ERR_NAVI 4 |
'S', // SPEAK_ERROR 5 |
'T', // SPEAK_ERR_COMPASS 6 |
'S', // SPEAK_ERR_SENSOR 7 |
'V', // SPEAK_ERR_GPS 8 |
'W', // SPEAK_ERR_MOTOR 9 |
'H', // SPEAK_MAX_TEMPERAT 10 |
0, // SPEAK_ALTI_REACHED 11 |
'X', // SPEAK_WP_REACHED 12 |
'Y', // SPEAK_NEXT_WP 13 |
0, // SPEAK_LANDING 14 |
'Z', // SPEAK_GPS_FIX 15 |
'U', // SPEAK_UNDERVOLTAGE 16 |
'E', // SPEAK_GPS_HOLD 17 |
'F', // SPEAK_GPS_HOME 18 |
'G', // SPEAK_GPS_OFF 19 |
'H', // SPEAK_BEEP 20 |
'A', // SPEAK_MIKROKOPTER 21 |
0, // SPEAK_CAPACITY 22 |
'I', // SPEAK_CF_OFF 23 |
'B', // SPEAK_CALIBRATE 24 |
'J', // SPEAK_MAX_RANGE 25 |
'J', // SPEAK_MAX_ALTITUD 26 |
0, // 27 |
0, // 28 |
0, // 29 |
0, // 30 |
0, // 31 |
0, // 32 |
0, // 33 |
0, // 34 |
0, // 35 |
0, // 36 |
0, // 37 |
'D', // SPEAK_MK_OFF 38 |
'L', // SPEAK_ALTITUDE_ON 39 |
'M', // SPEAK_ALTITUDE_OFF 40 |
0, // 41 |
0, // 42 |
0, // 43 |
0, // 44 |
0, // 45 |
'N', // SPEAK_CF_ON 46 |
0, // SPEAK_SINKING 47 |
0, // SPEAK_RISING 48 |
0, // SPEAK_HOLDING 49 |
'K', // SPEAK_GPS_ON 50 |
0, // SPEAK_FOLLWING 51 |
'C' // SPEAK_STARTING 52 |
}; |
JetiExPacket_t JetiExData[JETI_EX_PARAMETER_COUNT + 1] = // Parameter count + DeviceName (ID0) |
{ |
// Label[10] unit[3], data type, Data , position of decimal point |
// "1234567890", "123", |
// { "-=.M_K.=-" , " ", 1, 0 , 0 }, // first one is device name // datatype 1 = -8192...8192 |
{ "MK " , " ", 1, 0 , 0 }, // first one is device name // datatype 1 = -8192...8192 |
{ "Voltage " , "V ", 1, 0 , 1 }, // ID 1 |
{ "Current " , "A ", 1, 0 , 1 }, // ID 2 |
{ "Capacity " , "Ah ", 1, 0 , 2 }, // ID 3 |
{ "Altitude " , "m ", 1, 0 , 0 }, // ID 4 |
{ "Compass " , "° ", 1, 0 , 0 }, // ID 5 |
{ "Sats " , " ", 1, 0 , 0 }, // ID 6 |
{ "Speed " , "m/s", 1, 0 , 0 }, // ID 7 |
{ "Distance " , "m ", 1, 0 , 0 }, // ID 8 |
{ "Home-Dir " , "° ", 1, 0 , 0 }, // ID 9 |
{ "max.Temp. " , "°C ", 1, 0 , 0 }, // ID 10 |
{ "Magn.field" , "% ", 1, 0 , 0 }, // ID 11 |
{ "Vario " , " ", 1, 0 , 0 }, // ID 12 |
{ "ErrorCode " , " ", 1, 0 , 0 }, // ID 13 |
{ "Latitude " , " ", 9, 0 , 0 }, // ID 14 special data type for coordinates Import: fixed position in list ID 14 - DO NOT MOVE !!! |
{ "Longitude " , " ", 9, 0 , 0 }, // ID 15 special data type for coordinates Import: fixed position in list ID 15 - DO NOT MOVE !!! |
}; |
void BuildJeti_Vario(void) |
{ |
signed int tmp = 0; |
static signed int JetiVarioMeter = 0; |
JetiVarioMeter = (JetiVarioMeter * 3 + VarioMeter) / 4; |
if(VarioCharacter == '+') |
{ |
tmp = (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 32 + 5; |
} |
else |
if(VarioCharacter == '-') |
{ |
tmp = (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 32 - 5; |
} |
else |
if((VarioCharacter == ' ') && (FC_StatusFlags & FC_STATUS_FLY)) |
{ |
tmp = (JetiVarioMeter/32); |
} |
else |
if(VarioCharacter == '^') tmp = FromNC_AltitudeSpeed; |
else |
if(VarioCharacter == 'v') tmp = tmp - FromNC_AltitudeSpeed; |
JetiExData[12].Value = tmp; |
} |
// -------------------------------------------------------------------------------------------------- |
void JetiEX_Update(void) |
{ |
GetHottestBl(); |
JetiExData[1].Value = UBat; |
JetiExData[2].Value = Capacity.ActualCurrent; |
JetiExData[3].Value = Capacity.UsedCapacity / 10; |
JetiExData[4].Value = HoehenWert / 100; |
JetiExData[5].Value = KompassValue; |
JetiExData[6].Value = GPSInfo.NumOfSats; |
JetiExData[7].Value = GPSInfo.Speed; |
JetiExData[8].Value = GPSInfo.HomeDistance / 10; |
JetiExData[9].Value = GPSInfo.HomeBearing; |
JetiExData[10].Value = MaxBlTemperture; |
JetiExData[11].Value = EarthMagneticField; |
// JetiExData[12].Value = Vario; // wird in BuildJeti_Vario() gemacht |
JetiExData[13].Value = NC_ErrorCode; |
//JetiExData[14].Value = 53 * 0x10000 + 23467; // GPS-Latitude (macht NC_Fills_HoTT_Telemety() ) |
//JetiExData[15].Value = 7 * 0x10000 + 23467; // GPS-Longitude (macht NC_Fills_HoTT_Telemety() ) |
} |
#endif |
/tags/V2.06e/jeti_ex.h |
---|
0,0 → 1,37 |
#ifndef _JETI_EX_H |
#define _JETI_EX_H |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern void BuildJeti_Vario(void); |
// define here how many Jeti EX parameters should be transmitted (max. = 15) |
// |
#define JETI_EX_PARAMETER_COUNT 15 |
// |
// ------------------------------------------------------------------------- |
extern const char PROGMEM JETI_CODE[53]; |
typedef struct |
{ |
char Label[10]; |
char Unit[3]; |
unsigned char DataType; |
long Value; |
unsigned char DecimalPointPos; |
} JetiExPacket_t; |
extern JetiExPacket_t JetiExData[]; |
extern void JetiEX_Update(void); |
#if (JETI_EX_PARAMETER_COUNT > 15) |
#error "ERROR: Too many Jeti EX parameters (max. allowed 15)" |
#endif |
#endif |
#endif //_JETI_EX_H |
/tags/V2.06e/jetimenu.c |
---|
0,0 → 1,456 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "jetimenu.h" |
#include "libfc.h" |
#include "printf_P.h" |
#include "main.h" |
#include "spi.h" |
#include "capacity.h" |
#include "hottmenu.h" |
#define JETIBOX_KEY_RIGHT 0x1F |
#define JETIBOX_KEY_UP 0x2F |
#define JETIBOX_KEY_DOWN 0x4F |
#define JETIBOX_KEY_LEFT 0x8F |
#define JETIBOX_KEY_NONE 0x0F |
#define JETIBOX_KEY_UNDEF 0x00 |
#define JetiBox_printfxy(x,y,format, args...) { LIBFC_JetiBox_SetPos(y * 16 + x); _printf_P(&LIBFC_JetiBox_Putchar, PSTR(format) , ## args);} |
#define JetiBox_printf(format, args...) { _printf_P(&LIBFC_JetiBox_Putchar, PSTR(format) , ## args);} |
// ----------------------------------------------------------- |
// the menu functions |
// ----------------------------------------------------------- |
void Menu_Status(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"%2i.%1iV",UBat/10, UBat%10); |
if(NaviDataOkay) |
{ |
JetiBox_printfxy(6,0,"%3d%c %03dm%c",CompassCorrected, 0xDF, GPSInfo.HomeDistance/10,NC_GPS_ModeCharacter); |
} |
else |
{ |
JetiBox_printfxy(6,0,"Status"); |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(NC_ErrorCode) |
{ |
static unsigned int timer; |
static char toggle = 1; |
if(CheckDelay(timer)) { if(toggle) toggle = 0; else toggle = 1; timer = SetDelay(1500);}; |
if(toggle) |
{ |
LIBFC_JetiBox_SetPos(0); |
_printf_P(&LIBFC_JetiBox_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0); |
} |
else |
{ |
JetiBox_printfxy(6,0,"ERROR: %2d ",NC_ErrorCode); |
// if(MotorenEin) JetiBeep = 'O'; |
} |
} |
else |
if(ShowSettingNameTime) |
{ |
LIBFC_JetiBox_Clear(); |
JetiBox_printfxy(0,1,"Set%d:%s ",ActiveParamSet,EE_Parameter.Name); |
return; // nichts weiter ausgeben |
} |
#else |
if(NC_ErrorCode) { JetiBox_printfxy(6,0,"ERROR: %2d ",NC_ErrorCode); if(MotorenEin) JetiBeep = 'S';}; |
#endif |
JetiBox_printfxy(0,1,"%4i %2i:%02i",Capacity.UsedCapacity,FlugSekunden/60,FlugSekunden%60); |
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
JetiBox_printfxy(10,1,"%4im%c", (int16_t)(HoehenWert/100),VarioCharacter); |
} |
if(RedundanceBlOperation) JetiBox_printfxy(10,1,"R"); |
#endif |
} |
void Menu_Temperature(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"%3i %3i %3i %3i", Motor[0].Temperature, Motor[1].Temperature, Motor[2].Temperature, Motor[3].Temperature); |
JetiBox_printfxy(0,1,"%3i %3i %3i %3i", Motor[4].Temperature, Motor[5].Temperature, Motor[6].Temperature, Motor[7].Temperature); |
if(RequiredMotors <= 4) |
{ |
JetiBox_printfxy(0,1,"Temperatures "); |
} |
else |
if(RequiredMotors <= 6) |
{ |
JetiBox_printfxy(8,1,"\%cC ",0xdf); |
} |
#endif |
} |
void Menu_Battery(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"%2i.%1iV %3i.%1iA", UBat/10, UBat%10, Capacity.ActualCurrent/10, Capacity.ActualCurrent%10); |
JetiBox_printfxy(0,1,"%4iW %6imAh",Capacity.ActualPower, Capacity.UsedCapacity); |
#endif |
} |
void Magnet_Values(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"Magnet:%3i%% %3i%c",EarthMagneticField, KompassValue,0xDF); |
JetiBox_printfxy(0,1,"Incli.:%3i%c (%i) ",EarthMagneticInclination, 0xDF,EarthMagneticInclinationTheoretic); |
#endif |
} |
void Menu_WPL_A1(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"Load Waypoints"); |
JetiBox_printfxy(0,1,"(Fixed) "); |
#endif |
} |
void Menu_WPL_R1(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"Load Waypoints"); |
JetiBox_printfxy(0,1,"(Relative) "); |
#endif |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
void Menu_POINT_LD(uint8_t key) |
{ //0123456789ABCDEF |
JetiBox_printfxy(0,0,"Load singl.Point"); |
// JetiBox_printfxy(0,1,"(Fixed) "); |
} |
#endif |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
void Menu_POINT_SV(uint8_t key) |
{ //0123456789ABCDEF |
JetiBox_printfxy(0,0,"Save singl.Point"); |
// JetiBox_printfxy(0,1,"(Relative) "); |
} |
#endif |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
void Menu_POINT_SV2(uint8_t key) |
{ //0123456789ABCDEF |
static unsigned char load_waypoint_tmp = 1, changed; |
// if(WPL_Name[0] == 0) JetiBox_printfxy(0,0,"Relative WPs ") |
// else JetiBox_printfxy(0,0,"Rel:%s",WPL_Name); |
JetiBox_printfxy(0,0,"Save Point:"); |
if(NaviData_MaxWpListIndex == 0) JetiBox_printfxy(0,1,"no SD-Card") |
else |
if(GPSInfo.SatFix != SATFIX_3D) JetiBox_printfxy(0,1,"no GPS-Fix") |
else |
{ |
JetiBox_printfxy(11,0,"%2d",load_waypoint_tmp); |
// if(NaviData_WaypointNumber) JetiBox_printfxy(8,1,"%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber) |
// else JetiBox_printfxy(8,1,"--/--") |
JetiBox_printfxy(0,1,"Dir:%3d Alt:%3dm",CompassCorrected,(int16_t)(HoehenWert/100)) |
if(changed) JetiBox_printfxy(14,0,"->") |
else JetiBox_printfxy(14,0," "); |
if(key == JETIBOX_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { load_waypoint_tmp++; changed = 1;} |
if(key == JETIBOX_KEY_DOWN && load_waypoint_tmp > 1) { load_waypoint_tmp--; changed = 1; } |
if(key == JETIBOX_KEY_RIGHT && load_waypoint_tmp) |
{ |
ToNC_Store_SingePoint = load_waypoint_tmp; |
changed = 0; |
} |
} |
} |
#endif |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
void Menu_POINT_LD2(uint8_t key) |
{ //0123456789ABCDEF |
static unsigned char load_waypoint_tmp = 1, changed; |
// if(WPL_Name[0] == 0) JetiBox_printfxy(0,0,"FIX Waypoints") |
// else JetiBox_printfxy(0,0,"FIX:%s",WPL_Name); |
JetiBox_printfxy(0,0,"Load Point") |
if(NaviData_MaxWpListIndex == 0) JetiBox_printfxy(0,1,"no SD-Card") |
else |
{ |
JetiBox_printfxy(11,0,"%2d",load_waypoint_tmp); |
if(NaviData_WaypointNumber) JetiBox_printfxy(0,1,"Dist:%3d Alt:%3d ",NaviData_TargetDistance,(int16_t)(FromNC_AltitudeSetpoint/100)) |
else JetiBox_printfxy(8,1," "); |
if(changed) JetiBox_printfxy(14,0,"->") |
else JetiBox_printfxy(14,0," "); |
if(key == JETIBOX_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { load_waypoint_tmp++; changed = 1;} |
if(key == JETIBOX_KEY_DOWN && load_waypoint_tmp > 1) { load_waypoint_tmp--; changed = 1; } |
if(key == JETIBOX_KEY_RIGHT && load_waypoint_tmp) |
{ |
ToNC_Load_SingePoint = load_waypoint_tmp; |
changed = 0; |
} |
} |
} |
#endif |
void Menu_WPL_A2(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
static unsigned char load_waypoint_tmp = 1, changed; |
if(WPL_Name[0] == 0) JetiBox_printfxy(0,0,"FIX Waypoints") |
else JetiBox_printfxy(0,0,"FIX:%s",WPL_Name); |
if(NaviData_MaxWpListIndex == 0) JetiBox_printfxy(0,1,"no SD-Card") |
else |
{ |
JetiBox_printfxy(0,1,"#%2d WP:",load_waypoint_tmp); |
if(NaviData_WaypointNumber) JetiBox_printfxy(8,1,"%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber) |
else JetiBox_printfxy(8,1,"--/--") |
if(changed) JetiBox_printfxy(14,1,"->") |
else JetiBox_printfxy(14,1," "); |
if(key == JETIBOX_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { load_waypoint_tmp++; changed = 1;} |
if(key == JETIBOX_KEY_DOWN && load_waypoint_tmp > 1) { load_waypoint_tmp--; changed = 1; } |
if(key == JETIBOX_KEY_RIGHT && load_waypoint_tmp) |
{ |
ToNC_Load_WP_List = load_waypoint_tmp; |
changed = 0; |
} |
} |
#endif |
} |
void Menu_WPL_R2(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
static unsigned char load_waypoint_tmp = 1, changed; |
if(WPL_Name[0] == 0) JetiBox_printfxy(0,0,"Relative WPs ") |
else JetiBox_printfxy(0,0,"Rel:%s",WPL_Name); |
if(NaviData_MaxWpListIndex == 0) JetiBox_printfxy(0,1,"no SD-Card") |
else |
if(GPSInfo.SatFix != SATFIX_3D) JetiBox_printfxy(0,1,"no GPS-Fix") |
else |
{ |
JetiBox_printfxy(0,1,"#%2d WPs:",load_waypoint_tmp); |
if(NaviData_WaypointNumber) JetiBox_printfxy(8,1,"%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber) |
else JetiBox_printfxy(8,1,"--/--") |
if(changed) JetiBox_printfxy(14,1,"->") |
else JetiBox_printfxy(14,1," "); |
if(key == JETIBOX_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { load_waypoint_tmp++; changed = 1;} |
if(key == JETIBOX_KEY_DOWN && load_waypoint_tmp > 1) { load_waypoint_tmp--; changed = 1; } |
if(key == JETIBOX_KEY_RIGHT && load_waypoint_tmp) |
{ |
ToNC_Load_WP_List = load_waypoint_tmp | 0x80; |
changed = 0; |
} |
} |
#endif |
} |
void Menu_PosInfo(uint8_t key) |
{ |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
if(NaviDataOkay) |
{ |
JetiBox_printfxy(0,0,"%2um/s Sat:%d ",GPSInfo.Speed,GPSInfo.NumOfSats); |
switch (GPSInfo.SatFix) |
{ |
case SATFIX_3D: |
JetiBox_printfxy(12,0," 3D"); |
break; |
// case SATFIX_2D: |
// case SATFIX_NONE: |
default: |
JetiBox_printfxy(12,0,"NoFx"); |
break; |
} |
if(GPSInfo.Flags & FLAG_DIFFSOLN) |
{ |
JetiBox_printfxy(12,0,"DGPS"); |
} |
JetiBox_printfxy(0,1,"Home:%3dm %3d%c %c", GPSInfo.HomeDistance/10, GPSInfo.HomeBearing, 0xDF,NC_GPS_ModeCharacter); |
} |
else |
{ //0123456789ABCDEF |
JetiBox_printfxy(2,0,"No NaviCtrl!"); |
} |
#endif |
} |
// ----------------------------------------------------------- |
// the menu topology |
// ----------------------------------------------------------- |
typedef void (*pFctMenu) (uint8_t); // the menu item handler function pointer |
typedef struct{ |
int8_t left; |
int8_t right; |
int8_t up; |
int8_t down; |
pFctMenu pHandler; |
} MENU_ENTRY; |
// the menu navigation structure |
/* | |
3 - 0 - 1 - 2 - 3 - 0 |
*/ |
const MENU_ENTRY JetiBox_Menu[] PROGMEM= |
{ // l r u d pHandler |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
{8, 1, 0, 0, &Menu_Status }, // 0 |
{0, 2, 1, 1, &Menu_Temperature }, // 1 |
{1, 3, 2, 2, &Menu_Battery }, // 2 |
{2, 4, 3, 3, &Menu_PosInfo }, // 3 |
{3, 5, 4, 9, &Menu_WPL_A1 }, // 4 |
{4, 6, 5,10, &Menu_WPL_R1 }, // 5 |
{5, 7, 6,11, &Menu_POINT_LD}, // 6 |
{6, 8, 7,12, &Menu_POINT_SV}, // 7 |
{7, 0, 8, 6, &Magnet_Values }, // 8 |
{4, 9, 9, 9, &Menu_WPL_A2 }, // 9 |
{5,10,10,10, &Menu_WPL_R2 }, // 10 |
{6,11,11,11, &Menu_POINT_LD2}, // 11 |
{7,12,12,12, &Menu_POINT_SV2}, // 12 |
#else |
{6, 1, 0, 0, &Menu_Status }, // 0 |
{0, 2, 1, 1, &Menu_Temperature }, // 1 |
{1, 3, 2, 2, &Menu_Battery }, // 2 |
{2, 4, 3, 3, &Menu_PosInfo }, // 3 |
{3, 5, 7, 7, &Menu_WPL_A1 }, // 4 |
{4, 6, 8, 8, &Menu_WPL_R1 }, // 5 |
{5, 0, 6, 6, &Magnet_Values }, // 6 |
{4, 7, 7, 7, &Menu_WPL_A2 }, // 7 |
{5, 8, 8, 8, &Menu_WPL_R2 }, // 8 |
#endif |
#endif |
}; |
// ----------------------------------------------------------- |
// Update display buffer |
// ----------------------------------------------------------- |
unsigned char JetiBox_Update(unsigned char key) |
{ |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
static uint8_t item = 0, last_item = 0; // the menu item |
static uint8_t updateDelay = 1 , last_key; |
// navigate within the menu by key action |
last_item = item; |
switch(key) |
{ |
case JETIBOX_KEY_LEFT: |
//if (item == 0) return (1); // switch back to jeti expander menu |
// else |
item = pgm_read_byte(&JetiBox_Menu[item].left); //trigger to left menu item |
break; |
case JETIBOX_KEY_RIGHT: |
item = pgm_read_byte(&JetiBox_Menu[item].right); //trigger to right menu item |
break; |
case JETIBOX_KEY_UP: |
item = pgm_read_byte(&JetiBox_Menu[item].up); //trigger to up menu item |
break; |
case JETIBOX_KEY_DOWN: |
item = pgm_read_byte(&JetiBox_Menu[item].down); //trigger to down menu item |
break; |
default: |
break; |
} |
// if the menu item has been changed, do not pass the key to the item handler |
// to avoid jumping over to items |
if(item != last_item) key = JETIBOX_KEY_UNDEF; |
// if((updateDelay++ & 0x01) || (key != last_key)) |
if((updateDelay++ & 0x01) || (key != JETIBOX_KEY_NONE)) |
{ |
last_key = key; |
LIBFC_JetiBox_Clear(); |
//execute menu item handler |
((pFctMenu)(pgm_read_word(&(JetiBox_Menu[item].pHandler))))(key); |
} |
#endif |
return (0); |
} |
/tags/V2.06e/jetimenu.h |
---|
0,0 → 1,6 |
#ifndef _JETIMENU_H |
#define _JETIMENU_H |
extern unsigned char JetiBox_Update(unsigned char key); |
#endif //_JETIMENU_H |
/tags/V2.06e/led.c |
---|
0,0 → 1,132 |
#include <inttypes.h> |
#include "main.h" |
uint16_t LED1_Timing = 0; |
uint16_t LED2_Timing = 0; |
unsigned char J16Blinkcount = 0, J16Mask = 1; |
unsigned char J17Blinkcount = 0, J17Mask = 1; |
unsigned char NC_Wait_for_LED = 0; // signal to NC: Wait for the LAD PAtter before switching to the next WP |
// initializes the LED control outputs J16, J17 |
void LED_Init(void) |
{ |
// set PC2 & PC3 as output (control of J16 & J17) |
DDRC |= (1<<DDC2)|(1<<DDC3); |
J16_OFF; |
J17_OFF; |
J16Blinkcount = 0; J16Mask = 128; |
J17Blinkcount = 0; J17Mask = 128; |
} |
// called in UpdateMotors() every 2ms |
void LED_Update(void) |
{ |
static char delay = 0; |
static unsigned char J16Bitmask = 0; |
static unsigned char J17Bitmask = 0; |
static unsigned char J16Warn = 0, J17Warn = 0; |
static unsigned char from_nc = 0; |
if(FromNC_WP_EventChannel != -127) { from_nc = (unsigned char) FromNC_WP_EventChannel + 127; /*beeptime = 300;*/}; |
if(!delay--) // 20ms Intervall |
{ |
J16Bitmask = EE_Parameter.J16Bitmask; |
J17Bitmask = EE_Parameter.J17Bitmask; |
delay = 9; |
if(FC_StatusFlags & (FC_STATUS_LOWBAT | FC_STATUS_EMERGENCY_LANDING) || (VersionInfo.HardwareError[1] & FC_ERROR1_I2C)) |
{ |
if(EE_Parameter.WARN_J16_Bitmask) |
{ |
if(!J16Warn) J16Blinkcount = 4; |
J16Warn = 1; |
} |
if(EE_Parameter.WARN_J17_Bitmask) |
{ |
if(!J17Warn) J17Blinkcount = 4; |
J17Warn = 1; |
} |
} |
else |
{ |
J16Warn = 0; |
J17Warn = 0; |
} |
//DebugOut.Analog[29] = EE_Parameter.GlobalConfig3; |
// Output 1 |
if(!J16Warn) |
{ |
if((EE_Parameter.BitConfig & CFG_MOTOR_BLINK1) && !MotorenEin) {if(EE_Parameter.BitConfig & CFG_MOTOR_OFF_LED1) J16_ON; else J16_OFF;} |
else |
if((EE_Parameter.J16Timing > 247) && (Parameter_J16Timing > 220)) {if(J16Bitmask & 128) J16_OFF; else J16_ON; J16Mask = 1; NC_Wait_for_LED = 0;} // Manual overwrite |
else |
if((EE_Parameter.J16Timing > 247) && (Parameter_J16Timing == 5)) {if(J16Bitmask & 128) J16_ON; else J16_OFF; J16Mask = 1; NC_Wait_for_LED = 0;} // Manual overwrite |
else |
if(!J16Blinkcount--) |
{ |
if(EE_Parameter.GlobalConfig3 & CFG3_USE_NC_FOR_OUT1) |
{ |
J16Blinkcount = from_nc / 2; |
if(!from_nc) { NC_Wait_for_LED = 0; if(J16Bitmask & 128) J16_ON; else J16_OFF; J16Mask = 0; } // Ausschalten |
else |
{ |
NC_Wait_for_LED = 1; |
if(J16Mask == 0) |
{ |
from_nc = 0; |
J16Mask = 64; |
if(J16Bitmask & 128) J16_ON; else J16_OFF; // Ausschalten |
} |
else |
{ |
//if(FromNC_WP_EventChannel != -127) |
if(J16Mask & J16Bitmask) J16_ON; else J16_OFF; |
J16Mask /= 2; |
} |
} |
} |
else |
{ |
J16Blinkcount = Parameter_J16Timing / 2; |
if(J16Mask == 1) { from_nc = 0; J16Mask = 64; } else J16Mask /= 2; |
if(J16Mask & J16Bitmask) J16_ON; else J16_OFF; |
NC_Wait_for_LED = 0; |
} |
} |
} |
else // warning case |
if(!J16Blinkcount--) |
{ |
J16Blinkcount = 10-1; |
if(J16Mask == 1) J16Mask = 128; else J16Mask /= 2; |
if(J16Mask & EE_Parameter.WARN_J16_Bitmask) J16_ON; else J16_OFF; |
} |
// Output 2 |
if(!J17Warn) |
{ |
if((EE_Parameter.BitConfig & CFG_MOTOR_BLINK2) && !MotorenEin) {if(EE_Parameter.BitConfig & CFG_MOTOR_OFF_LED2) J17_ON; else J17_OFF;} |
else |
if((EE_Parameter.J17Timing > 247) && (Parameter_J17Timing > 220)) {if(J17Bitmask & 128) J17_OFF; else J17_ON; J17Mask = 1;} |
else |
if((EE_Parameter.J17Timing > 247) && (Parameter_J17Timing == 5)) {if(J17Bitmask & 128) J17_ON; else J17_OFF; J17Mask = 1;} |
else |
if(!J17Blinkcount--) |
{ |
J17Blinkcount = Parameter_J17Timing / 2; |
if(J17Mask == 1) J17Mask = 64; else J17Mask /= 2; |
if(J17Mask & J17Bitmask) J17_ON; else J17_OFF; |
} |
} |
else // warning case |
if(!J17Blinkcount--) |
{ |
J17Blinkcount = 10-1; |
if(J17Mask == 1) J17Mask = 128; else J17Mask /= 2; |
if(J17Mask & EE_Parameter.WARN_J17_Bitmask) J17_ON; else J17_OFF; |
} |
if(PORTC & (1<<PORTC2)) FC_StatusFlags2 |= FC_STATUS2_OUT1_ACTIVE; //else FC_StatusFlags2 &= ~FC_STATUS2_OUT1_ACTIVE; // Out1 (J16) -> wird in der SPI zurück gesetzt |
if(PORTC & (1<<PORTC3)) FC_StatusFlags2 |= FC_STATUS2_OUT2_ACTIVE; else FC_StatusFlags2 &= ~FC_STATUS2_OUT2_ACTIVE; // Out2 (J17) |
} |
} |
/tags/V2.06e/led.h |
---|
0,0 → 1,12 |
#include <avr/io.h> |
#define J16_ON PORTC |= (1<<PORTC2) |
#define J16_OFF PORTC &= ~(1<<PORTC2) |
#define J16_TOGGLE PORTC ^= (1<<PORTC2) |
#define J17_ON PORTC |= (1<<PORTC3) |
#define J17_OFF PORTC &= ~(1<<PORTC3) |
#define J17_TOGGLE PORTC ^= (1<<PORTC3) |
extern void LED_Init(void); |
extern void LED_Update(void); |
extern unsigned char NC_Wait_for_LED; |
/tags/V2.06e/libfc.h |
---|
0,0 → 1,24 |
#ifndef _LIBFC_H |
#define _LIBFC_H |
#define CPU_UNKNOWN 0 |
#define CPU_ATMEGA644 1 |
#define CPU_ATMEGA644P 2 |
#define CPU_ATMEGA1284 3 |
#define CPU_ATMEGA1284P 4 |
extern void LIBFC_Init(unsigned char); |
extern void LIBFC_Polling(void); |
extern void LIBFC_ReceiverInit(unsigned char rtype); |
extern void LIBFC_JetiBox_Putchar(char c); |
extern void LIBFC_JetiBox_SetPos(unsigned char index); |
extern void LIBFC_JetiBox_Clear(void); |
extern void LIBFC_CheckSettings(void); |
extern unsigned char LIBFC_GetCPUType(void); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern long ACC_AltitudeFusion(unsigned char init); |
#endif |
#endif //_LIBFC_H |
/tags/V2.06e/libfc1284.a |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/tags/V2.06e/libfc644.a |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/tags/V2.06e/main.c |
---|
0,0 → 1,537 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
unsigned char DisableRcOffBeeping = 0; |
unsigned char PlatinenVersion = 10; |
unsigned char BattLowVoltageWarning = 94; |
unsigned char BattAutoLandingVoltage = 0, BattComingHomeVoltage = 0; |
unsigned int FlugMinuten = 0,FlugMinutenGesamt = 0; |
unsigned int FlugSekunden = 0; |
pVoidFnct_pVoidFnctChar_const_fmt _printf_P; |
unsigned char FoundMotors = 0; |
unsigned char JetiBeep = 0; // to allow any Morse-Beeping of the Jeti-Box |
unsigned char ActiveParamSet = 3; |
unsigned char LipoCells = 4; |
unsigned char RedundanceBlOperation = 0; |
void PrintLine(void) |
{ |
printf("\n\r==================================="); |
} |
void CalMk3Mag(void) |
{ |
static unsigned char stick = 1; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -20) stick = 0; |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -70) && !stick) |
{ |
stick = 1; |
WinkelOut.CalcState++; |
if(WinkelOut.CalcState > 4) |
{ |
// WinkelOut.CalcState = 0; // in Uart.c |
beeptime = 1000; |
} |
else Piep(WinkelOut.CalcState,150); |
} |
} |
void LipoDetection(unsigned char print) |
{ |
#define MAX_CELL_VOLTAGE 43 // max cell voltage for LiPO |
if(print) |
{ |
printf("\n\rBatt:"); |
LipoCells = 1 + UBat / MAX_CELL_VOLTAGE; |
if(LipoCells > 6) LipoCells = 6; |
} |
if(EE_Parameter.UnterspannungsWarnung < 50) |
{ |
BattLowVoltageWarning = LipoCells * EE_Parameter.UnterspannungsWarnung; |
if(print) |
{ |
Piep(LipoCells, 200); |
printf(" %d Cells ", LipoCells); |
} |
} |
else BattLowVoltageWarning = EE_Parameter.UnterspannungsWarnung; |
// automatische Zellenerkennung |
if(EE_Parameter.AutoLandingVoltage < 50) BattAutoLandingVoltage = LipoCells * EE_Parameter.AutoLandingVoltage; else BattAutoLandingVoltage = EE_Parameter.AutoLandingVoltage; |
if(EE_Parameter.ComingHomeVoltage < 50) BattComingHomeVoltage = LipoCells * EE_Parameter.ComingHomeVoltage; else BattComingHomeVoltage = EE_Parameter.ComingHomeVoltage; |
if(BattAutoLandingVoltage > BattLowVoltageWarning) BattAutoLandingVoltage = BattLowVoltageWarning - 1; |
if(BattComingHomeVoltage >= BattLowVoltageWarning) BattComingHomeVoltage = BattLowVoltageWarning - 1; |
if(BattAutoLandingVoltage >= BattComingHomeVoltage && EE_Parameter.ComingHomeVoltage) BattAutoLandingVoltage = BattComingHomeVoltage - 1; |
if(print) |
{ |
printf(" Low warning: %d.%dV",BattLowVoltageWarning/10,BattLowVoltageWarning%10); |
if(BattComingHomeVoltage) printf(" Auto-CH: %d.%dV",BattComingHomeVoltage/10,BattComingHomeVoltage%10); |
if(BattAutoLandingVoltage) printf(" Autolanding: %d.%dV",BattAutoLandingVoltage/10,BattAutoLandingVoltage%10); |
} |
} |
//############################################################################ |
//Hauptprogramm |
int main (void) |
//############################################################################ |
{ |
unsigned int timer,i,timer2 = 0, timerPolling; |
unsigned char update_spi = 1; |
DDRB = 0x00; |
PORTB = 0x00; |
DDRD = 0x0A; // UART & J3 J4 J5 |
PORTD = 0x5F; // PPM-Input & UART |
for(timer = 0; timer < 1000; timer++); // verzögern |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
unsigned char AccZ_ErrorCnt = 0; |
if(PINB & 0x02) |
{ |
if(PIND & 0x10) PlatinenVersion = 21; // No Bridge from J4 to GND |
else { PlatinenVersion = 22; ACC_AltitudeControl = 1;}; |
} |
else |
{ |
PlatinenVersion = 25; ACC_AltitudeControl = 1; |
} |
#else |
if(PINB & 0x01) |
{ |
if(PINB & 0x02) PlatinenVersion = 13; |
else PlatinenVersion = 11; |
} |
else |
{ |
if(PINB & 0x02) PlatinenVersion = 20; |
else |
{ |
PlatinenVersion = 10; |
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5 |
PORTD = 0x47; // |
} |
} |
#endif |
DDRC = 0x81; // I2C, Spaker |
DDRC |=0x40; // HEF4017 Reset |
PORTC = 0xff; // Pullup SDA |
DDRB = 0x1B; // LEDs und Druckoffset |
PORTB = 0x01; // LED_Rot |
HEF4017Reset_ON; |
MCUSR &=~(1<<WDRF); |
WDTCSR |= (1<<WDCE)|(1<<WDE); |
WDTCSR = 0; |
beeptime = 2500; |
StickGier = 0; PPM_in[K_GAS] = 0; StickRoll = 0; StickNick = 0; |
if(PlatinenVersion >= 20) GIER_GRAD_FAKTOR = 1220; else GIER_GRAD_FAKTOR = 1291; // unterschiedlich für ME und ENC |
ROT_OFF; |
GRN_ON; |
Timer_Init(); |
TIMER2_Init(); |
UART_Init(); |
rc_sum_init(); |
ADC_Init(); |
I2C_Init(1); |
SPI_MasterInit(); |
Capacity_Init(); |
LIBFC_Init(LIB_FC_COMPATIBLE); |
GRN_ON; |
sei(); |
ParamSet_Init(); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(PlatinenVersion < 20) |
{ |
wdt_enable(WDTO_250MS); // Reset-Commando |
while(1) printf("\n\rOld FC Hardware not supported by this Firmware!"); |
} |
#ifndef REDUNDANT_FC_SLAVE |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Check connected BL-Ctrls |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Check connected BL-Ctrls |
BLFlags |= BLFLAG_READ_VERSION; |
motor_read = 0; // read the first I2C-Data |
for(i=0; i < 500; i++) |
{ |
SendMotorData(); |
timer = SetDelay(5); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
} |
printf("\n\rFound BL-Ctrl: "); |
// timer = SetDelay(1000); |
for(i=0; i < MAX_MOTORS; i++) |
{ |
// SendMotorData(); |
// while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
if(Mixer.Motor[i][0] > 0) // wait max 4 sec for the BL-Ctrls to wake up |
{ |
while(!CheckDelay(timer) && !(Motor[i].State & MOTOR_STATE_PRESENT_MASK) ) |
{ |
SendMotorData(); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
} |
} |
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK) |
{ |
unsigned char vers; |
printf("%d",(i+1)%10); |
FoundMotors++; |
vers = Motor[i].VersionMajor * 100 + Motor[i].VersionMinor; // creates 104 from 1.04 |
if(vers && VersionInfo.BL_Firmware > vers) VersionInfo.BL_Firmware = vers; |
// if(Motor[i].Version & MOTOR_STATE_FAST_MODE) printf("(fast)\n\r"); |
// else if(Motor[i].Version & MOTOR_STATE_NEW_PROTOCOL_MASK) printf("(new)\n\r"); |
// printf(":V%03d\n\r",vers); |
} |
} |
for(i=0; i < MAX_MOTORS; i++) |
{ |
if(!(Motor[i].State & MOTOR_STATE_PRESENT_MASK) && Mixer.Motor[i][0] > 0) |
{ |
printf("\n\r\n\r!! MISSING BL-CTRL: %d !!",i+1); |
ServoActive = 2; // just in case the FC would be used as camera-stabilizer |
} |
Motor[i].State &= ~MOTOR_STATE_ERROR_MASK; // clear error counter |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(VersionInfo.BL_Firmware != 255) |
{ |
printf("\n\rBL-Firmware %d.%02d",VersionInfo.BL_Firmware/100,VersionInfo.BL_Firmware%100); |
if(VersionInfo.BL_Firmware >= 100 && VersionInfo.BL_Firmware <= 102) printf("<-- warning old Version!"); |
} |
#endif |
PrintLine();// ("\n\r==================================="); |
if(RequiredMotors < FoundMotors) VersionInfo.HardwareError[1] |= FC_ERROR1_MIXER; |
if(RequiredMotors > 8) Max_I2C_Packets = 8; else Max_I2C_Packets = RequiredMotors; |
#else |
printf("\n\r\n\r--> REDUNDANT SLAVE <---\n\r"); |
#endif |
#ifdef REDUNDANT_FC_MASTER |
printf("\n\r\n\r--> REDUNDANT MASTER <---\n\r"); |
#endif |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Calibrating altitude sensor |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
printf("\n\rCalibrating pressure sensor.."); |
timer = SetDelay(1000); |
SucheLuftruckOffset(); |
while (!CheckDelay(timer)); |
printf("OK\n\r"); |
} |
#ifdef REDUNDANT_FC_SLAVE |
VersionInfo.HardwareError[0] = 0; |
VersionInfo.HardwareError[1] = 0; |
#endif |
SetNeutral(0); |
ROT_OFF; |
beeptime = 2000; |
ExternControl.Digital[0] = 0x55; |
FlugMinuten = (unsigned int)GetParamByte(PID_FLIGHT_MINUTES) * 256 + (unsigned int)GetParamByte(PID_FLIGHT_MINUTES + 1); |
FlugMinutenGesamt = (unsigned int)GetParamByte(PID_FLIGHT_MINUTES_TOTAL) * 256 + (unsigned int)GetParamByte(PID_FLIGHT_MINUTES_TOTAL + 1); |
if((FlugMinutenGesamt == 0xFFFF) || (FlugMinuten == 0xFFFF)) |
{ |
FlugMinuten = 0; |
FlugMinutenGesamt = 0; |
} |
printf("\n\rFlight-time %u min Total:%u min", FlugMinuten, FlugMinutenGesamt); |
LcdClear(); |
I2CTimeout = 5000; |
WinkelOut.Orientation = 1; |
LipoDetection(1); |
LIBFC_ReceiverInit(EE_Parameter.Receiver); |
PrintLine();// ("\n\r==================================="); |
//SpektrumBinding(); |
timer = SetDelay(2000); |
timerPolling = SetDelay(250); |
Debug(ANSI_CLEAR "FC-Start!\n\rFlugzeit: %d min", FlugMinutenGesamt); // Note: this won't waste flash memory, if #DEBUG is not active |
//printf("\n\rEE_Parameter size:%i\n\r", PARAMSET_STRUCT_LEN); |
DebugOut.Status[0] = 0x01 | 0x02; |
JetiBeep = 0; |
if(EE_Parameter.ExtraConfig & CFG_NO_RCOFF_BEEPING) DisableRcOffBeeping = 1; |
ReadBlSize = 3; // don't read the version any more |
#ifdef REDUNDANT_FC_SLAVE |
timer = SetDelay(2500); |
while(!CheckDelay(timer)); |
printf("\n\rStart\n\r"); |
#endif |
while(1) |
{ |
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space |
if(ReceiverUpdateModeActive) while (1) PORTC &= ~(1<<7); // Beeper off |
if(UpdateMotor && AdReady) // ReglerIntervall |
{ |
cli(); |
UpdateMotor--; |
sei(); |
if(WinkelOut.CalcState) CalMk3Mag(); |
else MotorRegler(); |
SendMotorData(); |
ROT_OFF; |
if(SenderOkay) { SenderOkay--; /*VersionInfo.HardwareError[1] &= ~FC_ERROR1_PPM;*/ } |
else |
{ |
TIMSK1 |= _BV(ICIE1); // enable PPM-Input |
PPM_in[0] = 0; // set RSSI to zero on data timeout |
VersionInfo.HardwareError[1] |= FC_ERROR1_PPM; |
} |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//if(HoehenReglerAktiv && NaviDataOkay && SenderOkay < 160 && SenderOkay > 10 && FromNaviCtrl_Value.SerialDataOkay > 220) SenderOkay = 160; |
//if(HoehenReglerAktiv && NaviDataOkay && SenderOkay < 101 && SenderOkay > 10 && FromNaviCtrl_Value.SerialDataOkay > 1) SenderOkay = 101; |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!--I2CTimeout || MissingMotor) |
{ |
if(!I2CTimeout) |
{ |
I2C_Reset(); |
I2CTimeout = 5; |
DebugOut.Analog[28]++; // I2C-Error |
VersionInfo.HardwareError[1] |= FC_ERROR1_I2C; |
DebugOut.Status[1] |= 0x02; // BL-Error-Status |
} |
if((BeepMuster == 0xffff) && MotorenEin) |
{ |
beeptime = 25000; |
BeepMuster = 0x0080; |
} |
} |
else |
{ |
ROT_OFF; |
} |
LIBFC_Polling(); |
if(!UpdateMotor) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(NewSBusData) ProcessSBus(); |
else |
#endif |
{ |
if(BytegapSPI == 0) SPI_TransmitByte(); |
if(CalculateServoSignals) CalculateServo(); |
DatenUebertragung(); |
BearbeiteRxDaten(); |
if(CheckDelay(timer)) |
{ |
static unsigned char second; |
timer += 20; // 20 ms interval |
CalcNickServoValue(); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(EE_Parameter.Receiver == RECEIVER_HOTT) HoTT_Menu(); |
else |
if(EE_Parameter.Receiver == RECEIVER_JETI) BuildJeti_Vario(); |
// ++++++++++++++++++++++++++++ |
// + check the ACC-Z range |
if(ACC_AltitudeControl && ((Aktuell_az < 300) || (DebugOut.Analog[7] < (128 * 4) && Aktuell_az > 850))) // DebugOut.Analog[7] = GasMischanteil |
{ |
if(++AccZ_ErrorCnt > 50) |
{ |
if(MotorenEin) VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_TOP; |
else CalibrationDone = 0; |
} |
} |
else AccZ_ErrorCnt = 0; |
// ++++++++++++++++++++++++++++ |
#endif |
if(MissingMotor || Capacity.MinOfMaxPWM < 30) |
{ |
if(MissingMotor) VersionInfo.HardwareError[1] |= FC_ERROR1_BL_MISSING; |
DebugOut.Status[1] |= 0x02; // BL-Error-Status |
} |
else |
{ |
if(!beeptime) |
{ |
if(I2CTimeout > 6) DebugOut.Status[1] &= ~0x02; // BL-Error-Status |
} |
} |
if(DisableRcOffBeeping) if(SenderOkay > 150) { DisableRcOffBeeping = 0; beeptime = 5000;}; |
if(PcZugriff) PcZugriff--; |
else |
{ |
ExternControl.Config = 0; |
ExternStickNick = 0; |
ExternStickRoll = 0; |
ExternStickGier = 0; |
if(!SenderOkay) |
{ |
if(BeepMuster == 0xffff && DisableRcOffBeeping != 2) |
{ |
beeptime = 15000; |
BeepMuster = 0x0c00; |
if(DisableRcOffBeeping) DisableRcOffBeeping = 2; |
} |
} |
} |
if(NaviDataOkay > 200) |
{ |
NaviDataOkay--; |
VersionInfo.HardwareError[1] &= ~FC_ERROR1_SPI_RX; |
VersionInfo.Flags |= FC_VERSION_FLAG_NC_PRESENT; |
} |
else |
{ |
if(NC_Version.Compatible) |
{ |
VersionInfo.HardwareError[1] |= FC_ERROR1_SPI_RX; |
NC_ErrorCode = 9; // "ERR: no NC communication" |
if(BeepMuster == 0xffff && MotorenEin) |
{ |
beeptime = 15000; |
BeepMuster = 0xA800; |
} |
} |
GPS_Nick = 0; |
GPS_Roll = 0; |
GPS_Aid_StickMultiplikator = 0; |
GPSInfo.Flags = 0; |
FromNaviCtrl_Value.Kalman_K = -1; |
FromNaviCtrl.AccErrorN = 0; |
FromNaviCtrl.AccErrorR = 0; |
FromNaviCtrl.CompassValue = -1; |
FromNC_AltitudeSpeed = 0; |
FromNC_AltitudeSetpoint = 0; |
VersionInfo.Flags &= ~FC_VERSION_FLAG_NC_PRESENT; |
NaviDataOkay = 0; |
} |
if(UBat <= BattLowVoltageWarning) |
{ |
FC_StatusFlags |= FC_STATUS_LOWBAT; |
if(BeepMuster == 0xffff && UBat > 10) // Do not beep, if the voltage reading is below 1V (Supplied via MKUSB) |
{ |
beeptime = 6000; |
BeepMuster = 0x0300; |
} |
} |
// +++++++++++++++++++++++++++++++++ |
// Sekundentakt |
if(++second == 49) |
{ |
second = 0; |
/* |
DebugOut.Analog[16] -= DebugOut.Analog[16] / 128; |
DebugOut.Analog[17] -= DebugOut.Analog[17] / 128; |
if(DebugOut.Analog[16] > 3000) {AdNeutralNick++; DebugOut.Analog[16] = 0;} |
else |
if(DebugOut.Analog[16] < -3000) {AdNeutralNick--; DebugOut.Analog[16] = 0;}; |
if(DebugOut.Analog[17] > 3000) {AdNeutralRoll++; DebugOut.Analog[17] = 0;} |
else |
if(DebugOut.Analog[17] < -3000) {AdNeutralRoll--; DebugOut.Analog[17] = 0;}; |
*/ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ShowSettingNameTime) ShowSettingNameTime--; |
#endif |
if(FC_StatusFlags & FC_STATUS_FLY) FlugSekunden++; |
else timer2 = 1450; // 0,5 Minuten aufrunden |
if(modell_fliegt < 1024) |
{ |
if(StartLuftdruck < Luftdruck) StartLuftdruck += 5; |
else |
if(StartLuftdruck > Luftdruck) StartLuftdruck -= 5; |
} |
if(UBat > BattLowVoltageWarning + 1) FC_StatusFlags &= ~FC_STATUS_LOWBAT; |
} |
// +++++++++++++++++++++++++++++++++ |
if(++timer2 == 2930) // eine Minute |
{ |
timer2 = 0; |
FlugMinuten++; |
FlugMinutenGesamt++; |
SetParamByte(PID_FLIGHT_MINUTES,FlugMinuten / 256); |
SetParamByte(PID_FLIGHT_MINUTES+1,FlugMinuten % 256); |
SetParamByte(PID_FLIGHT_MINUTES_TOTAL,FlugMinutenGesamt / 256); |
SetParamByte(PID_FLIGHT_MINUTES_TOTAL+1,FlugMinutenGesamt % 256); |
timer = SetDelay(20); // falls "timer += 20;" mal nicht geht |
} |
} |
LED_Update(); |
Capacity_Update(); |
} |
} //else DebugOut.Analog[18]++; |
if(update_spi) update_spi--; |
} // 500Hz |
if(update_spi == 0) // 41Hz |
{ |
if(SPI_StartTransmitPacket()) update_spi = 12; |
else |
if(BytegapSPI == 0) SPI_TransmitByte(); |
} |
else if(BytegapSPI == 0) SPI_TransmitByte(); |
} |
} |
//DebugOut.Analog[16] |
/tags/V2.06e/main.h |
---|
0,0 → 1,96 |
#ifndef _MAIN_H |
#define _MAIN_H |
//#define REDUNDANT_FC_SLAVE |
//#define REDUNDANT_FC_MASTER |
//#define DEBUG // use to activate debug output to MK-Tool: use Debug(text); |
//#define ACT_S3D_SUMMENSIGNAL |
//#define UserParameter8_FAILSAFE |
//#define RECEIVER_SPEKTRUM_DX7EXP |
//#define RECEIVER_SPEKTRUM_DX8EXP |
// neue Hardware |
//#define ROT_OFF {if((PlatinenVersion == 10)||(PlatinenVersion >= 20)) PORTB &=~0x01; else PORTB |= 0x01;} |
//#define ROT_ON {if((PlatinenVersion == 10)||(PlatinenVersion >= 20)) PORTB |= 0x01; else PORTB &=~0x01;} |
#define ROT_OFF {PORTB &=~0x01;} |
#define ROT_ON {PORTB |= 0x01;} |
#define ROT_FLASH PORTB ^= 0x01 |
//#define GRN_OFF {if((PlatinenVersion < 12) || PlatinenVersion == 25) PORTB &=~0x02; else PORTB |= 0x02;} |
//#define GRN_ON {if((PlatinenVersion < 12) || PlatinenVersion == 25) PORTB |= 0x02; else PORTB &=~0x02;} |
#define GRN_OFF {if(PlatinenVersion == 25) PORTB &=~0x02; else PORTB |= 0x02;} |
#define GRN_ON {if(PlatinenVersion == 25) PORTB |= 0x02; else PORTB &=~0x02;} |
#define GRN_FLASH PORTB ^= 0x02 |
#define SYSCLK F_CPU |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define J3High PORTD |= 0x20 |
#define J3Low PORTD &= ~0x20 |
#define J4High PORTD |= 0x10 |
#define J4Low PORTD &= ~0x10 |
#define J5High PORTD |= 0x08 |
#define J5Low PORTD &= ~0x08 |
extern volatile unsigned char SenderOkay; |
extern unsigned char BattLowVoltageWarning; |
extern unsigned char BattAutoLandingVoltage, BattComingHomeVoltage; |
extern unsigned char CosinusNickWinkel, CosinusRollWinkel; |
extern unsigned char PlatinenVersion; |
extern unsigned char FoundMotors,DisableRcOffBeeping; |
extern unsigned char JetiBeep; |
void LipoDetection(unsigned char print); |
extern unsigned int FlugMinuten,FlugMinutenGesamt,FlugSekunden; |
extern void PrintLine(void); // "=================================" |
extern unsigned char ActiveParamSet; |
extern unsigned int BL3_Current(unsigned char who); // in 0,1A |
extern unsigned char LipoCells; |
extern unsigned char RedundanceBlOperation; |
#include <avr/pgmspace.h> |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#endif |
#include <stdlib.h> |
#include <string.h> |
#include <avr/io.h> |
#include <avr/pgmspace.h> |
#include <avr/interrupt.h> |
#include <avr/eeprom.h> |
#include <avr/boot.h> |
#include <avr/wdt.h> |
#include "old_macros.h" |
#include "printf_P.h" |
#include "timer0.h" |
#include "uart.h" |
#include "analog.h" |
#include "twimaster.h" |
#include "menu.h" |
#include "rc.h" |
#include "fc.h" |
#include "gps.h" |
#include "spi.h" |
#include "led.h" |
#include "spektrum.h" |
#include "capacity.h" |
#include "eeprom.h" |
#include "libfc.h" |
#include "hottmenu.h" |
#include "debug.h" |
#include "sbus.h" |
#include "jeti_ex.h" |
#endif //_MAIN_H |
/tags/V2.06e/makefile |
---|
0,0 → 1,496 |
#-------------------------------------------------------------------- |
# MCU name |
MCU = atmega1284p |
#MCU = atmega644p |
F_CPU = 20000000 |
#------------------------------------------------------------------- |
VERSION_MAJOR = 2 |
VERSION_MINOR = 06 |
VERSION_PATCH = 4 |
VERSION_SERIAL_MAJOR = 11 # Serial Protocol to KopterTool -> do not change! |
VERSION_SERIAL_MINOR = 0 # Serial Protocol |
NC_SPI_COMPATIBLE = 69 # Navi-Kompatibilität |
LIB_FC_COMPATIBLE = 6 # Library |
#------------------------------------------------------------------- |
# ATMEGA644: 63487 is maximum |
#------------------------------------------------------------------- |
# 0 a |
# 1 b |
# 2 c |
# 3 d |
# 4 e |
# 5 f |
# 6 g |
# 7 h |
# 8 i |
# 9 j |
# 10 k |
# 11 L |
#------------------------------------------------------------------- |
# get SVN revision |
REV := $(shell sh -c "cat .svn/entries | sed -n '4p'") |
ifeq ($(MCU), atmega1284p) |
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
HEX_NAME = MEGA1284P |
LIBFC_EXT = 1284 |
endif |
ifeq ($(MCU), atmega644p) |
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
HEX_NAME = MEGA644 |
LIBFC_EXT = 644 |
endif |
ifeq ($(F_CPU), 16000000) |
QUARZ = 16MHZ |
endif |
ifeq ($(F_CPU), 20000000) |
QUARZ = 20MHZ |
endif |
# Output format. (can be srec, ihex, binary) |
FORMAT = ihex |
# Target file name (without extension). |
ifeq ($(VERSION_PATCH), 0) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)a_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 1) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)b_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 2) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)c_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 3) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)d_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 4) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)e_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 5) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)f_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 6) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)g_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 7) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)h_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 8) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)i_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 9) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)j_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 10) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)k_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 11) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)L_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 12) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)m_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 13) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)n_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 14) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)o_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 15) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)p_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 16) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)q_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 17) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)r_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 18) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)s_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 19) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)t_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 20) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)u_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 21) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)v_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 22) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)w_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 23) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)x_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 24) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)y_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 25) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)z_SVN$(REV) |
endif |
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization. |
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) |
OPT = s |
#OPT = 2 |
########################################################################################################## |
# List C source files here. (C dependencies are automatically generated.) |
SRC = main.c uart.c timer0.c analog.c menu.c eeprom.c |
SRC += twimaster.c rc.c fc.c GPS.c spi.c led.c Spektrum.c |
SRC += mymath.c jetimenu.c capacity.c debug.c |
SRC += hottmenu.c sbus.c user_receiver.c |
SRC += jeti_ex.c |
########################################################################################################## |
# List Assembler source files here. |
# Make them always end in a capital .S. Files ending in a lowercase .s |
# will not be considered source files but generated files (assembler |
# output from the compiler), and will be deleted upon "make clean"! |
# Even though the DOS/Win* filesystem matches both .s and .S the same, |
# it will preserve the spelling of the filenames, and gcc itself does |
# care about how the name is spelled on its command-line. |
ASRC = isqrt.S |
# List any extra directories to look for include files here. |
# Each directory must be seperated by a space. |
EXTRAINCDIRS = |
# Optional compiler flags. |
# -g: generate debugging information (for GDB, or for COFF conversion) |
# -O*: optimization level |
# -f...: tuning, see gcc manual and avr-libc documentation |
# -Wall...: warning level |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create assembler listing |
CFLAGS = -O$(OPT) -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=$(<:%.c=%.lst) $(patsubst %,-I%,$(EXTRAINCDIRS)) |
# Set a "language standard" compiler flag. |
# Unremark just one line below to set the language standard to use. |
# gnu99 = C99 + GNU extensions. See GCC manual for more information. |
#CFLAGS += -std=c89 |
#CFLAGS += -std=gnu89 |
#CFLAGS += -std=c99 |
CFLAGS += -std=gnu99 |
# shrink code size |
CFLAGS += -mtiny-stack |
#CFLAGS += -fno-inline-functions |
CFLAGS += -mcall-prologues |
CFLAGS += -DF_CPU=$(F_CPU) -DVERSION_MAJOR=$(VERSION_MAJOR) -DVERSION_MINOR=$(VERSION_MINOR) -DVERSION_PATCH=$(VERSION_PATCH) -DVERSION_SERIAL_MAJOR=$(VERSION_SERIAL_MAJOR) -DVERSION_SERIAL_MINOR=$(VERSION_SERIAL_MINOR) -DNC_SPI_COMPATIBLE=$(NC_SPI_COMPATIBLE) -DLIB_FC_COMPATIBLE=$(LIB_FC_COMPATIBLE) |
# Optional assembler flags. |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create listing |
# -gstabs: have the assembler create line number information; note that |
# for use in COFF files, additional information about filenames |
# and function names needs to be present in the assembler source |
# files -- see avr-libc docs [FIXME: not yet described there] |
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs |
# Optional linker flags. |
# -Wl,...: tell GCC to pass this to linker. |
# -Map: create map file |
# --cref: add cross reference to map file |
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref |
# Additional libraries |
# Minimalistic printf version |
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min |
# Floating point printf version (requires -lm below) |
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt |
# -lm = math library |
LDFLAGS += -lm |
LDFLAGS += libfc$(LIBFC_EXT).a |
##LDFLAGS += -T./linkerfile/avr5.x |
# Programming support using avrdude. Settings and variables. |
# Programming hardware: alf avr910 avrisp bascom bsd |
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 |
# |
# Type: avrdude -c ? |
# to get a full listing. |
# |
#AVRDUDE_PROGRAMMER = dt006 |
#AVRDUDE_PROGRAMMER = stk200 |
#AVRDUDE_PROGRAMMER = ponyser |
AVRDUDE_PROGRAMMER = avrispv2 |
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden |
#AVRDUDE_PORT = com1 # programmer connected to serial device |
#AVRDUDE_PORT = lpt1 # programmer connected to parallel port |
AVRDUDE_PORT = usb # programmer connected to USB |
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex |
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS) |
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep |
#avrdude -c avrispv2 -P usb -p m32 -U flash:w:blink.hex |
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) |
# Uncomment the following if you want avrdude's erase cycle counter. |
# Note that this counter needs to be initialized first using -Yn, |
# see avrdude manual. |
#AVRDUDE_ERASE += -y |
# Uncomment the following if you do /not/ wish a verification to be |
# performed after programming the device. |
AVRDUDE_FLAGS += -V |
# Increase verbosity level. Please use this when submitting bug |
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> |
# to submit bug reports. |
#AVRDUDE_FLAGS += -v -v |
# --------------------------------------------------------------------------- |
# Define directories, if needed. |
DIRAVR = c:/winavr |
DIRAVRBIN = $(DIRAVR)/bin |
DIRAVRUTILS = $(DIRAVR)/utils/bin |
DIRINC = . |
DIRLIB = $(DIRAVR)/avr/lib |
# Define programs and commands. |
SHELL = sh |
CC = avr-gcc |
OBJCOPY = avr-objcopy |
OBJDUMP = avr-objdump |
SIZE = avr-size |
# Programming support using avrdude. |
AVRDUDE = avrdude |
REMOVE = rm -f |
COPY = cp |
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex |
ELFSIZE = $(SIZE) -x -A $(TARGET).elf |
LIMITS = $(SIZE) --mcu=$(MCU) -C $(TARGET).elf |
# Define Messages |
# English |
MSG_ERRORS_NONE = Errors: none |
MSG_BEGIN = -------- begin -------- |
MSG_END = -------- end -------- |
MSG_SIZE_BEFORE = Size before: |
MSG_SIZE_AFTER = Size after: |
MSG_COFF = Converting to AVR COFF: |
MSG_EXTENDED_COFF = Converting to AVR Extended COFF: |
MSG_FLASH = Creating load file for Flash: |
MSG_EEPROM = Creating load file for EEPROM: |
MSG_EXTENDED_LISTING = Creating Extended Listing: |
MSG_SYMBOL_TABLE = Creating Symbol Table: |
MSG_LINKING = Linking: |
MSG_COMPILING = Compiling: |
MSG_ASSEMBLING = Assembling: |
MSG_CLEANING = Cleaning project: |
# Define all object files. |
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) |
# Define all listing files. |
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) |
# Combine all necessary flags and optional flags. |
# Add target processor to flags. |
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS) |
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) |
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) |
# Default target. |
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex sizeafter finished end |
# Eye candy. |
# AVR Studio 3.x does not check make's exit code but relies on |
# the following magic strings to be generated by the compile job. |
begin: |
@echo |
@echo $(MSG_BEGIN) |
finished: |
@echo $(MSG_ERRORS_NONE) |
end: |
@echo $(MSG_END) |
@echo |
# Display size of file. |
sizebefore: |
@if [ -f $(TARGET).elf ]; then echo Size before:; $(ELFSIZE); $(HEXSIZE); $(LIMITS); echo; fi |
sizeafter: |
@if [ -f $(TARGET).elf ]; then echo Size after:; $(ELFSIZE); $(HEXSIZE); $(LIMITS); echo; fi |
# Display compiler version information. |
gccversion : |
@$(CC) --version |
# Convert ELF to COFF for use in debugging / simulating in |
# AVR Studio or VMLAB. |
COFFCONVERT=$(OBJCOPY) --debugging \ |
--change-section-address .data-0x800000 \ |
--change-section-address .bss-0x800000 \ |
--change-section-address .noinit-0x800000 \ |
--change-section-address .eeprom-0x810000 |
coff: $(TARGET).elf |
@echo |
@echo $(MSG_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof |
extcoff: $(TARGET).elf |
@echo |
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof |
# Program the device. |
program: $(TARGET).hex $(TARGET).eep |
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) |
# Create final output files (.hex, .eep) from ELF output file. |
%.hex: %.elf |
@echo |
@echo $(MSG_FLASH) $@ |
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ |
%.eep: %.elf |
@echo |
@echo $(MSG_EEPROM) $@ |
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ |
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@ |
# Create extended listing file from ELF output file. |
%.lss: %.elf |
@echo |
@echo $(MSG_EXTENDED_LISTING) $@ |
$(OBJDUMP) -h -S $< > $@ |
# Create a symbol table from ELF output file. |
%.sym: %.elf |
@echo |
@echo $(MSG_SYMBOL_TABLE) $@ |
avr-nm -n $< > $@ |
# Link: create ELF output file from object files. |
.SECONDARY : $(TARGET).elf |
.PRECIOUS : $(OBJ) |
%.elf: $(OBJ) |
@echo |
@echo $(MSG_LINKING) $@ |
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) |
# Compile: create object files from C source files. |
%.o : %.c |
@echo |
@echo $(MSG_COMPILING) $< |
$(CC) -c $(ALL_CFLAGS) $< -o $@ |
# Compile: create assembler files from C source files. |
%.s : %.c |
$(CC) -S $(ALL_CFLAGS) $< -o $@ |
# Assemble: create object files from assembler source files. |
%.o : %.S |
@echo |
@echo $(MSG_ASSEMBLING) $< |
$(CC) -c $(ALL_ASFLAGS) $< -o $@ |
# Target: clean project. |
clean: begin clean_list finished end |
clean_list : |
@echo |
@echo $(MSG_CLEANING) |
$(REMOVE) Flight-Ctrl_*.hex |
$(REMOVE) Flight-Ctrl_*.eep |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).cof |
$(REMOVE) Flight-Ctrl_*.elf |
$(REMOVE) Flight-Ctrl_*.map |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).a90 |
$(REMOVE) Flight-Ctrl_*.sym |
$(REMOVE) $(TARGET).lnk |
$(REMOVE) $(TARGET).lss |
$(REMOVE) $(OBJ) |
$(REMOVE) $(LST) |
$(REMOVE) $(SRC:.c=.s) |
$(REMOVE) $(SRC:.c=.d) |
$(REMOVE) $(SRC:.c=.o) |
# Automatically generate C source code dependencies. |
# (Code originally taken from the GNU make user manual and modified |
# (See README.txt Credits).) |
# |
# Note that this will work with sh (bash) and sed that is shipped with WinAVR |
# (see the SHELL variable defined above). |
# This may not work with other shells or other seds. |
# |
%.d: %.c |
set -e; $(CC) -MM $(ALL_CFLAGS) $< \ |
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \ |
[ -s $@ ] || rm -f $@ |
# Remove the '-' if you want to see the dependency files generated. |
-include $(SRC:%.c=%.d) |
# Listing of phony targets. |
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \ |
clean clean_list program |
/tags/V2.06e/menu.c |
---|
0,0 → 1,285 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "eeprom.h" |
char DisplayBuff[80]; |
unsigned char DispPtr = 0; |
unsigned char MaxMenue = 19; |
unsigned char MenuePunkt = 0; |
unsigned char RemoteKeys = 0; |
#define KEY1 0x01 |
#define KEY2 0x02 |
#define KEY3 0x04 |
#define KEY4 0x08 |
#define KEY5 0x10 |
void LcdClear(void) |
{ |
unsigned char i; |
for(i=0;i<80;i++) DisplayBuff[i] = ' '; |
} |
void Menu_Putchar(char c) |
{ |
if(DispPtr < 80) DisplayBuff[DispPtr++] = c; |
} |
void Menu(void) |
{ |
unsigned char i; |
if(RemoteKeys & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue;} |
if(RemoteKeys & KEY2) { if(MenuePunkt == MaxMenue) MenuePunkt = 0; else MenuePunkt++;} |
if((RemoteKeys & KEY1) && (RemoteKeys & KEY2)) MenuePunkt = 0; |
LcdClear(); |
if(MenuePunkt < 10) {LCD_printfxy(17,0,"[%i]",MenuePunkt);} |
else {LCD_printfxy(16,0,"[%i]",MenuePunkt);}; |
switch(MenuePunkt) |
{ |
case 0: |
LCD_printfxy(0,0,"+ MikroKopter +"); |
LCD_printfxy(0,1,"HW:V%d.%d SW:%d.%02d%c ",PlatinenVersion/10,PlatinenVersion%10, VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH +'a'); |
LCD_printfxy(0,2,"Setting:%d %s", ActiveParamSet,Mixer.Name); |
if(VersionInfo.HardwareError[1] & FC_ERROR1_MIXER) LCD_printfxy(0,3,"Mixer Error!") |
else |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(NC_ErrorCode) |
{ |
LCD_printfxy(0,3,"ERR%2d:",NC_ErrorCode); |
_printf_P(&Menu_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0); |
} |
else |
#endif |
if(VersionInfo.HardwareError[0]) LCD_printfxy(0,3,"Hardware Error 1:%d !!",VersionInfo.HardwareError[0]) |
else |
if(MissingMotor) LCD_printfxy(0,3,"Missing BL-Ctrl:%d !!",MissingMotor) |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#else |
else |
if(NC_ErrorCode) |
{ |
LCD_printfxy(0,3,"! NC-ERR: %2d ! ",NC_ErrorCode); |
} |
#endif |
// if(VersionInfo.HardwareError[1]) LCD_printfxy(0,3,"Error 2:%d !!",VersionInfo.HardwareError[1]) |
else |
if(I2CTimeout < 6) LCD_printfxy(0,3,"I2C ERROR!!!") |
else |
if(Capacity.MinOfMaxPWM < 30) LCD_printfxy(0,3,"BL-Selftest Err:%2d",Capacity.MinOfMaxPWM) |
break; |
case 1: |
LCD_printfxy(0,0,"Height: %5i",(int)(HoehenWert/5)); |
LCD_printfxy(0,1,"Setpoint:%5i",(int)(SollHoehe/5)); |
LCD_printfxy(0,2,"Pressure:%5i",MessLuftdruck); |
LCD_printfxy(0,3,"Offset: %5i",OCR0A); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) |
{ |
LCD_printfxy(17,2,"(A)"); |
LCD_printfxy(17,3,"%i",CalAthmospheare); |
} |
#endif |
break; |
case 2: |
LCD_printfxy(0,0,"act. bearing"); |
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024); |
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024); |
LCD_printfxy(0,3,"Compass: %5i",CompassCorrected); |
break; |
case 3: |
for(i=1;i<9;i+=2) LCD_printfxy(0,i/2,"K%i:%4i K%i:%4i ",i,PPM_in[i],i+1,PPM_in[i+1]); |
break; |
case 4: |
LCD_printfxy(0,0,"Ni:%4i Ro:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]); |
LCD_printfxy(0,1,"Gs:%4i Gi:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]); |
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]+127); |
LCD_printfxy(0,3,"P3:%4i P4:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]]+127); |
break; |
case 5: |
LCD_printfxy(0,0,"Gyro - Sensor"); |
LCD_printfxy(0,1,"Nick %4i (%3i.%x)",AdWertNick - AdNeutralNick/8, AdNeutralNick/16, (AdNeutralNick%16)/2); |
LCD_printfxy(0,2,"Roll %4i (%3i.%x)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/16, (AdNeutralRoll%16)/2); |
// LCD_printfxy(0,1,"Nick %4i (%4i)",AdWertNickFilter, AdNeutralNick); |
// LCD_printfxy(0,2,"Roll %4i (%4i)",AdWertRollFilter, AdNeutralRoll); |
LCD_printfxy(0,3,"Yaw %4i (%3i)",AdNeutralGier - AdWertGier, AdNeutralGier/2); |
/* |
// entfernt aus Platzmangel |
if(PlatinenVersion == 10) |
{ |
LCD_printfxy(0,1,"Nick%4i (%3i.%i)",AdWertNick - AdNeutralNick/8, AdNeutralNick/8, AdNeutralNick%8); |
LCD_printfxy(0,2,"Roll%4i (%3i.%i)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/8, AdNeutralRoll%8); |
LCD_printfxy(0,3,"Gier%4i (%3i)",AdNeutralGier - AdWertGier, AdNeutralGier); |
} |
else |
if((PlatinenVersion == 11) || (PlatinenVersion >= 20)) |
{ |
LCD_printfxy(0,1,"Nick %4i (%3i.%x)",AdWertNick - AdNeutralNick/8, AdNeutralNick/16, (AdNeutralNick%16)/2); |
LCD_printfxy(0,2,"Roll %4i (%3i.%x)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/16, (AdNeutralRoll%16)/2); |
LCD_printfxy(0,3,"Yaw %4i (%3i)",AdNeutralGier - AdWertGier, AdNeutralGier/2); |
} |
else |
if(PlatinenVersion == 13) |
{ |
LCD_printfxy(0,1,"Nick %4i (%3i)(%3i)",AdWertNick - AdNeutralNick/8, AdNeutralNick/16,AnalogOffsetNick); |
LCD_printfxy(0,2,"Roll %4i (%3i)(%3i)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/16,AnalogOffsetRoll); |
LCD_printfxy(0,3,"Yaw %4i (%3i)(%3i)",AdNeutralGier - AdWertGier, AdNeutralGier/2,AnalogOffsetGier); |
} |
*/ |
break; |
case 6: |
LCD_printfxy(0,0,"ACC - Sensor"); |
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertAccNick,NeutralAccX); |
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertAccRoll,NeutralAccY); |
LCD_printfxy(0,3,"Z %4i (%3i)",AdWertAccHoch,(int)NeutralAccZ); |
break; |
case 7: |
LCD_printfxy(0,0,"Voltage: %3i.%1iV",UBat/10, UBat%10); |
LCD_printfxy(0,1,"Current: %3i.%1iA",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10); |
LCD_printfxy(0,2,"Power: %4iW",Capacity.ActualPower); |
LCD_printfxy(0,3,"Discharge: %5imAh", Capacity.UsedCapacity); |
break; |
case 8: |
LCD_printfxy(0,0,"Receiver"); |
LCD_printfxy(0,2,"RC-Quality: %4i", SenderOkay); |
LCD_printfxy(0,3,"RC-Channels:%4i", Channels-1); |
break; |
case 9: |
LCD_printfxy(0,0,"Undervoltages " ); |
LCD_printfxy(0,1,"Warn: %2d.%dV",BattLowVoltageWarning/10,BattLowVoltageWarning%10); |
LCD_printfxy(0,2,"Home: %2d.%dV",BattComingHomeVoltage/10,BattComingHomeVoltage%10); |
LCD_printfxy(0,3,"Land: %2d.%dV",BattAutoLandingVoltage/10,BattAutoLandingVoltage%10); |
break; |
case 10: |
for(i=0;i<4;i++) LCD_printfxy(0,i,"Poti%i: %3i",i+1,Poti[i]); |
break; |
case 11: |
for(i=0;i<4;i++) LCD_printfxy(0,i,"Poti%i: %3i",i+5,Poti[i+4]); |
break; |
case 12: |
LCD_printfxy(0,0,"Flight-Time " ); |
LCD_printfxy(0,1,"Total:%5umin",FlugMinutenGesamt); |
LCD_printfxy(0,2,"Act: %5umin",FlugMinuten); |
LCD_printfxy(13,3,"(reset)"); |
if(RemoteKeys & KEY4) |
{ |
FlugMinuten = 0; |
SetParamWord(PID_FLIGHT_MINUTES, FlugMinuten); |
} |
break; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
case 13: |
LCD_printfxy(0,0,"Compass"); |
LCD_printfxy(0,1,"Magnet: %5i",KompassValue); |
LCD_printfxy(0,2,"Gyro: %5i",ErsatzKompassInGrad); |
LCD_printfxy(0,3,"True: %5i",CompassCorrected); |
break; |
case 14: |
LCD_printfxy(0,0,"Servo " ); |
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl); |
LCD_printfxy(0,2,"Position: %3i",ServoNickValue/4); |
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax); |
break; |
case 15: |
LCD_printfxy(0,0,"BL-Ctrl Errors " ); |
for(i=0;i<3;i++) |
{ |
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",Motor[i*4].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+1].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+2].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+3].State & MOTOR_STATE_ERROR_MASK); |
} |
break; |
case 16: |
LCD_printfxy(0,0,"BL Temperature" ); |
for(i=0;i<3;i++) |
{ |
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",Motor[i*4].Temperature,Motor[i*4+1].Temperature,Motor[i*4+2].Temperature,Motor[i*4+3].Temperature); |
} |
break; |
case 17: |
LCD_printfxy(0,0,"BL Current" ); |
LCD_printfxy(11,3,"(in 0.1A)" ); |
for(i=0;i<3;i++) |
{ |
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",BL3_Current(i*4),BL3_Current(i*4+1),BL3_Current(i*4+2),BL3_Current(i*4+3)); |
if(4 + i * 4 >= RequiredMotors) break; |
} |
break; |
case 18: |
LCD_printfxy(0,0,"BL-Ctrl found " ); |
LCD_printfxy(0,1," %c %c %c %c ",'-' + 4 * (Motor[0].State>>7),'-' + 5 * (Motor[1].State>>7),'-' + 6 * (Motor[2].State>>7),'-' + 7 * (Motor[3].State>>7)); |
LCD_printfxy(0,2," %c %c %c %c ",'-' + 8 * (Motor[4].State>>7),'-' + 9 * (Motor[5].State>>7),'-' + 10 * (Motor[6].State>>7),'-' + 11 * (Motor[7].State>>7)); |
LCD_printfxy(0,3," %c - - - ",'-' + 12 * (Motor[8].State>>7)); |
if(Motor[9].State>>7) LCD_printfxy(4,3,"10"); |
if(Motor[10].State>>7) LCD_printfxy(8,3,"11"); |
if(Motor[11].State>>7) LCD_printfxy(12,3,"12"); |
break; |
case 19: |
LCD_printfxy(0,0,"BL Versions" ); |
for(i=0;i<3;i++) |
{ |
LCD_printfxy(0,i+1,"%1d.%02d %1d.%02d %1d.%02d %1d.%02d",Motor[i*4].VersionMajor,Motor[i*4].VersionMinor,Motor[i*4+1].VersionMajor,Motor[i*4+1].VersionMinor,Motor[i*4+2].VersionMajor,Motor[i*4+2].VersionMinor,Motor[i*4+3].VersionMajor,Motor[i*4+3].VersionMinor); |
if(4 + i * 4 >= RequiredMotors) break; |
} |
break; |
#endif |
default: |
if(MenuePunkt == MaxMenue) MaxMenue--; |
MenuePunkt = 0; |
break; |
} |
RemoteKeys = 0; |
} |
/tags/V2.06e/menu.h |
---|
0,0 → 1,17 |
#ifndef _MENU_H |
#define _MENU_H |
extern void Menu(void); |
extern void LcdClear(void); |
extern void Menu_Putchar(char c); |
extern char DisplayBuff[80]; |
extern unsigned char DispPtr; |
extern unsigned char MaxMenue; |
extern unsigned char MenuePunkt; |
extern unsigned char RemoteKeys; |
#define LCD_printfxy(x,y,format, args...) { DispPtr = (y) * 20 + (x); _printf_P(&Menu_Putchar,PSTR(format) , ## args);} |
#define LCD_printf(format, args...) { _printf_P(&Menu_Putchar, PSTR(format) , ## args);} |
#endif //_MENU_H |
/tags/V2.06e/mymath.c |
---|
0,0 → 1,41 |
#include <stdlib.h> |
#include <avr/pgmspace.h> |
#include "mymath.h" |
// discrete mathematics |
// Sinus with argument in degree at an angular resolution of 1 degree and a discretisation of 13 bit. |
const uint16_t pgm_sinlookup[91] PROGMEM = {0, 143, 286, 429, 571, 714, 856, 998, 1140, 1282, 1423, 1563, 1703, 1843, 1982, 2120, 2258, 2395, 2531, 2667, 2802, 2936, 3069, 3201, 3332, 3462, 3591, 3719, 3846, 3972, 4096, 4219, 4341, 4462, 4581, 4699, 4815, 4930, 5043, 5155, 5266, 5374, 5482, 5587, 5691, 5793, 5893, 5991, 6088, 6183, 6275, 6366, 6455, 6542, 6627, 6710, 6791, 6870, 6947, 7022, 7094, 7165, 7233, 7299, 7363, 7424, 7484, 7541, 7595, 7648, 7698, 7746, 7791, 7834, 7875, 7913, 7949, 7982, 8013, 8041, 8068, 8091, 8112, 8131, 8147, 8161, 8172, 8181, 8187, 8191, 8192}; |
int16_t c_sin_8192(int16_t angle) |
{ |
int8_t m,n; |
int16_t sinus; |
// avoid negative angles |
if (angle < 0) |
{ |
m = -1; |
angle = abs(angle); |
} |
else m = +1; |
// fold angle to intervall 0 to 359 |
angle %= 360; |
// check quadrant |
if (angle <= 90) n=1; // first quadrant |
else if ((angle > 90) && (angle <= 180)) {angle = 180 - angle; n = 1;} // second quadrant |
else if ((angle > 180) && (angle <= 270)) {angle = angle - 180; n = -1;} // third quadrant |
else {angle = 360 - angle; n = -1;} //fourth quadrant |
// get lookup value |
sinus = pgm_read_word(&pgm_sinlookup[angle]); |
// calculate sinus value |
return (sinus * m * n); |
} |
// Cosinus with argument in degree at an angular resolution of 1 degree and a discretisation of 13 bit. |
int16_t c_cos_8192(int16_t angle) |
{ |
return (c_sin_8192(90 - angle)); |
} |
/tags/V2.06e/mymath.h |
---|
0,0 → 1,10 |
#ifndef _MYMATH_H |
#define _MYMATH_H |
#include <inttypes.h> |
extern int16_t c_sin_8192(int16_t angle); |
extern int16_t c_cos_8192(int16_t angle); |
extern int16_t c_atan2(int16_t y, int16_t x); |
extern uint32_t c_sqrt(uint32_t a); |
#endif // _MYMATH_H |
/tags/V2.06e/old_macros.h |
---|
0,0 → 1,47 |
/* |
For backwards compatibility only. |
Ingo Busker ingo@mikrocontroller.com |
*/ |
#ifndef cbi |
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) |
#endif |
#ifndef sbi |
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) |
#endif |
#ifndef inb |
#define inb(sfr) _SFR_BYTE(sfr) |
#endif |
#ifndef outb |
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val)) |
#endif |
#ifndef inw |
#define inw(sfr) _SFR_WORD(sfr) |
#endif |
#ifndef outw |
#define outw(sfr, val) (_SFR_WORD(sfr) = (val)) |
#endif |
#ifndef outp |
#define outp(val, sfr) outb(sfr, val) |
#endif |
#ifndef inp |
#define inp(sfr) inb(sfr) |
#endif |
#ifndef BV |
#define BV(bit) _BV(bit) |
#endif |
#ifndef PRG_RDB |
#define PRG_RDB pgm_read_byte |
#endif |
/tags/V2.06e/printf_P.h |
---|
0,0 → 1,69 |
// Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist nicht von der Lizenz für den MikroKopter-Teil unterstellt |
/* |
Copyright (C) 1993 Free Software Foundation |
This file is part of the GNU IO Library. This library is free |
software; you can redistribute it and/or modify it under the |
terms of the GNU General Public License as published by the |
Free Software Foundation; either version 2, or (at your option) |
any later version. |
This library is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this library; see the file COPYING. If not, write to the Free |
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
As a special exception, if you link this library with files |
compiled with a GNU compiler to produce an executable, this does not cause |
the resulting executable to be covered by the GNU General Public License. |
This exception does not however invalidate any other reasons why |
the executable file might be covered by the GNU General Public License. */ |
/* |
* Copyright (c) 1990 Regents of the University of California. |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. [rescinded 22 July 1999] |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
*/ |
/******************************************************************************/ |
#ifndef _PRINTF_P_H_ |
#define _PRINTF_P_H_ |
#include <avr/pgmspace.h> |
// function pointer to external callback function |
typedef void (*pVoidFnctChar) (char ); |
typedef void (*pVoidFnct_pVoidFnctChar_const_fmt) (pVoidFnctChar, char const *fmt0, ...); |
extern pVoidFnct_pVoidFnctChar_const_fmt _printf_P; |
#endif //_PRINTF_P_H_ |
/tags/V2.06e/rc.c |
---|
0,0 → 1,285 |
/*####################################################################################### |
Decodieren eines RC Summen Signals |
#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "rc.h" |
#include "main.h" |
// Achtung: ACT_S3D_SUMMENSIGNAL wird in der Main.h gesetzt |
#define MAX_RC_IN 16+12+3+4 // 16ch + 12ser + 3stages + 4 reserved |
volatile int PPM_in[MAX_RC_IN]; |
volatile int PPM_diff[MAX_RC_IN]; // das differnzierte Stick-Signal |
volatile char Channels,tmpChannels = 0; |
volatile unsigned char NewPpmData = 1; |
unsigned int PPM_Neutral = 466; |
//############################################################################ |
// Clear the values |
void rc_sum_init(void) |
//############################################################################ |
{ |
unsigned char i; |
for(i=0;i<MAX_RC_IN;i++) |
{ |
if(i < 5) PPM_in[i] = 0; else PPM_in[i] = -127; |
PPM_diff[i] = 0; |
} |
PPM_in[PPM_IN_MAX] = +127; |
PPM_in[PPM_IN_OFF] = -127; |
PPM_in[PPM_IN_MID] = 0; |
AdNeutralGier = 0; |
AdNeutralRoll = 0; |
AdNeutralNick = 0; |
return; |
} |
#ifndef ACT_S3D_SUMMENSIGNAL |
//############################################################################ |
// Interrupt function for the PPM-Input |
ISR(TIMER1_CAPT_vect) |
//############################################################################ |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!(EE_Parameter.ExtraConfig & CFG_SENSITIVE_RC)) |
#endif |
{ |
static unsigned int AltICR=0; |
signed int signal = 0,tmp; |
static int index; |
signal = (unsigned int) ICR1 - AltICR; |
AltICR = ICR1; |
//Syncronisationspause? (3.52 ms < signal < 25.6 ms) |
if((signal > 1100) && (signal < 8000)) |
{ |
Channels = index; |
if(index >= 4) NewPpmData = 0; // Null bedeutet: Neue Daten |
index = 1; |
} |
else |
{ |
if(index < 13+4) |
{ |
if((signal > 250) && (signal < 687)) |
{ |
signal -= PPM_Neutral; |
// Stabiles Signal |
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
{ |
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10; else SenderOkay = 200;} |
} |
tmp = (3 * (PPM_in[index]) + signal) / 4; |
if(tmp > signal+1) tmp--; else |
if(tmp < signal-1) tmp++; |
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
else PPM_diff[index] = 0; |
PPM_in[index] = tmp; |
} |
index++; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#else |
/* |
if(PlatinenVersion < 20) |
{ |
if(index == 5) J3High; else J3Low; // Servosignal an J3 anlegen |
if(index == 6) J4High; else J4Low; // Servosignal an J4 anlegen |
if(index == 7) J5High; else J5Low; // Servosignal an J5 anlegen |
} |
*/ |
#endif |
} |
} |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
else |
{ |
static unsigned int AltICR=0; |
static int ppm_in[13+4]; |
static int ppm_diff[13+4]; |
static int old_ppm_in[13+4]; |
static int old_ppm_diff[13+4]; |
signed int signal = 0,tmp; |
static unsigned char index, okay_cnt = 0; |
signal = (unsigned int) ICR1 - AltICR; |
AltICR = ICR1; |
//Syncronisationspause? (3.52 ms < signal < 25.6 ms) |
if((signal > 1100) && (signal < 8000)) |
{ |
tmpChannels = index; |
if(tmpChannels >= 4 && Channels == tmpChannels) |
{ |
if(okay_cnt > 10) |
{ |
NewPpmData = 0; // Null bedeutet: Neue Daten |
for(index = 0; index < 13+4; index++) |
{ |
if(okay_cnt > 30) |
{ |
old_ppm_in[index] = PPM_in[index]; |
old_ppm_diff[index] = PPM_diff[index]; |
} |
PPM_in[index] = ppm_in[index]; |
PPM_diff[index] = ppm_diff[index]; |
} |
} |
if(okay_cnt < 255) okay_cnt++; |
} |
else |
{ |
if(okay_cnt > 100) okay_cnt = 10; else okay_cnt = 0; |
ROT_ON; |
} |
index = 1; |
if(!MotorenEin) Channels = tmpChannels; |
} |
else |
{ |
if(index < 13+4) |
{ |
if((signal > 250) && (signal < 687)) |
{ |
signal -= PPM_Neutral; |
// Stabiles Signal |
if((abs(signal - ppm_in[index]) < 6)) |
{ |
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
{ |
if(okay_cnt > 25) SenderOkay += 10; |
else |
if(okay_cnt > 10) SenderOkay += 2; |
if(SenderOkay > 200) SenderOkay = 200; |
} |
} |
tmp = (3 * (ppm_in[index]) + signal) / 4; |
if(tmp > signal+1) tmp--; else |
if(tmp < signal-1) tmp++; |
if(SenderOkay >= 190) ppm_diff[index] = ((tmp - ppm_in[index]) / 3) * 3; |
else ppm_diff[index] = 0; |
ppm_in[index] = tmp; |
} |
else ROT_ON; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#else |
if(PlatinenVersion < 20) |
{ |
if(index == 5) J3High; else J3Low; // Servosignal an J3 anlegen |
if(index == 6) J4High; else J4Low; // Servosignal an J4 anlegen |
if(index == 7) J5High; else J5Low; // Servosignal an J5 anlegen |
} |
#endif |
} |
if(index < 20) index++; |
else |
if(index == 20) |
{ |
unsigned char i; |
ROT_ON; |
index = 30; |
for(i=0;i<13+4;i++) // restore from older data |
{ |
PPM_in[i] = old_ppm_in[i]; |
PPM_diff[i] = 0; |
// okay_cnt /= 2; |
} |
} |
} |
} |
#endif |
} |
#else |
//############################################################################ |
// Interrupt function for the PPM-Input |
ISR(TIMER1_CAPT_vect) |
//############################################################################ |
{ |
static unsigned int AltICR=0; |
signed int signal = 0,tmp; |
static int index; |
signal = (unsigned int) ICR1 - AltICR; |
signal /= 2; |
AltICR = ICR1; |
//Syncronisationspause? |
if((signal > 1100*2) && (signal < 8000*2)) |
{ |
if(index >= 4) NewPpmData = 0; // Null bedeutet: Neue Daten |
index = 1; |
} |
else |
{ |
if(index < 13) |
{ |
if((signal > 250) && (signal < 687*2)) |
{ |
signal -= 962; |
// Stabiles Signal |
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10;} |
tmp = (3 * (PPM_in[index]) + signal) / 4; |
if(tmp > signal+1) tmp--; else |
if(tmp < signal-1) tmp++; |
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
else PPM_diff[index] = 0; |
PPM_in[index] = tmp; |
} |
index++; |
} |
} |
} |
#endif |
/tags/V2.06e/rc.h |
---|
0,0 → 1,42 |
/*####################################################################################### |
Derkodieren eines RC Summen Signals |
#######################################################################################*/ |
#ifndef _RC_H |
#define _RC_H |
#if defined (__AVR_ATmega644__) |
#define TIMER_RELOAD_VALUE 250 |
#endif |
#if defined (__AVR_ATmega644P__) |
#define TIMER_RELOAD_VALUE 250 |
#endif |
#define MAX_RC_IN 16+12+3+4 // 16ch + 12ser + 3stages + 4 reserved |
extern void rc_sum_init (void); |
extern volatile int PPM_in[MAX_RC_IN]; |
extern volatile int PPM_diff[MAX_RC_IN]; // das diffenzierte Stick-Signal |
extern volatile unsigned char NewPpmData; |
extern volatile char Channels,tmpChannels; |
extern unsigned int PPM_Neutral; |
// 0 -> frei bzw. ACT rssi |
// 1 - 16 -> 1-16 |
// 17 - 28 -> 12 Serial channels |
// 29 -> WP-Event kanal |
// 30 -> -127 |
// 31 -> 0 |
// 32 -> 128 |
#define SERIAL_POTI_START 17 |
#define WP_EVENT_PPM_IN 29 |
#define PPM_IN_OFF 30 |
#define PPM_IN_MAX 31 |
#define PPM_IN_MID 32 |
#define FromNC_WP_EventChannel PPM_in[WP_EVENT_PPM_IN] // WP_EVENT-Channel-Value |
#endif //_RC_H |
/tags/V2.06e/sbus.c |
---|
0,0 → 1,199 |
/*####################################################################################### |
Decodes the sbus protocol |
#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "sbus.h" |
#include "main.h" |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
unsigned char NewSBusData = 0, sBusBuffer[25]; |
//############################################################################ |
// USART1 initialisation from killagreg |
void SbusUartInit(void) |
//############################################################################ |
{ |
// -- Start of USART1 initialisation for Spekturm seriell-mode |
// USART1 Control and Status Register A, B, C and baud rate register |
uint8_t sreg = SREG; |
uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 100000) - 1); |
// disable all interrupts before reconfiguration |
cli(); |
// disable RX-Interrupt |
UCSR1B &= ~(1 << RXCIE1); |
// disable TX-Interrupt |
UCSR1B &= ~(1 << TXCIE1); |
// disable DRE-Interrupt |
UCSR1B &= ~(1 << UDRIE1); |
/* |
// set direction of RXD1 and TXD1 pins |
// set RXD1 (PD2) as an input pin |
PORTD |= (1 << PORTD2); |
DDRD &= ~(1 << DDD2); |
// set TXD1 (PD3) as an output pin |
PORTD |= (1 << PORTD3); |
DDRD |= (1 << DDD3); |
*/ |
// USART0 Baud Rate Register |
// set clock divider |
UBRR1H = (uint8_t)(ubrr>>8); |
UBRR1L = (uint8_t)ubrr; |
// enable double speed operation |
UCSR1A |= (1 << U2X1); |
// enable receiver and transmitter |
//UCSR1B = (1<<RXEN1)|(1<<TXEN1); |
UCSR1B = (1<<RXEN1); |
// set asynchronous mode |
UCSR1C &= ~(1 << UMSEL11); |
UCSR1C &= ~(1 << UMSEL10); |
// parity |
UCSR1C <= (1 << UPM11); // even |
UCSR1C &= ~(1 << UPM10); |
// stop bit |
UCSR1C |= (1 << USBS1); // two |
// 8-bit |
UCSR1B &= ~(1 << UCSZ12); |
UCSR1C |= (1 << UCSZ11); |
UCSR1C |= (1 << UCSZ10); |
// flush receive buffer explicit |
while(UCSR1A & (1<<RXC1)) UDR1; |
// enable RX-interrupts at the end |
UCSR1B |= (1 << RXCIE1); |
// -- End of USART1 initialisation |
// restore global interrupt flags |
sBusBuffer[23] |= 4; // This Bit contains the 'Signal loss' |
SREG = sreg; |
return; |
} |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define MIN_FRAMEGAP 68 // 7ms |
#define MAX_BYTEGAP 3 // 310us |
//############################################################################ |
// Is called by the uart RX interrupt |
//############################################################################ |
void SbusParser(unsigned char udr) |
{ |
static unsigned char ptr = 0; |
if(!SpektrumTimer && udr == 0x0f) // wait for the start |
{ |
ptr = 0; |
SpektrumTimer = 80; // 8ms gap |
} |
else |
{ |
if(++ptr == 24) // last byte |
{ |
NewSBusData = 1; |
} |
else |
if(ptr > 24) ptr = 25; |
else |
{ |
sBusBuffer[ptr] = udr; // collect all bytes |
} |
} |
} |
void ProcessSBus(void) |
{ |
static unsigned char load = 0; |
unsigned char bitmask8 = 1, sbyte = 2, i, index = 1, process; |
unsigned int bitmask11 = 256; |
signed int signal = 0,tmp; |
if(!(sBusBuffer[23] & 4)) // This Bit contains the 'Signal loss' |
{ |
TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input |
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
{ |
if(SenderOkay < 200) SenderOkay += 20; else SenderOkay = 200; |
} |
signal = sBusBuffer[1]; |
if(!load--) { process = (16*11 - 8); load = 2;} else process = (4*11 - 8); // lowers the processor load |
for(i = 0; i < process; i++) // collect the single bits |
{ |
if(sBusBuffer[sbyte] & bitmask8) signal |= bitmask11; |
bitmask8 *= 2; |
if(!bitmask8) |
{ |
bitmask8 = 1; |
sbyte++; |
} |
bitmask11 *= 2; |
if(bitmask11 == 2048) |
{ |
bitmask11 = 1; |
signal = (signal-1024) / 5; // the resolution is higher than required |
tmp = (3 * (PPM_in[index]) + signal) / 4; |
if(tmp > signal+1) tmp--; else |
if(tmp < signal-1) tmp++; |
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
else PPM_diff[index] = 0; |
PPM_in[index] = tmp; |
signal = 0; |
index++; // next channel |
} |
} |
NewPpmData = 0; // Null bedeutet: Neue Daten |
} |
NewSBusData = 0; |
} |
#endif |
/tags/V2.06e/sbus.h |
---|
0,0 → 1,11 |
#ifndef _SBUS_H |
#define _SBUS_H |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern unsigned char NewSBusData, sBusBuffer[25]; |
extern void SbusParser(unsigned char); |
extern void SbusUartInit(void); |
extern void ProcessSBus(void); |
#endif |
#endif |
/tags/V2.06e/spi.c |
---|
0,0 → 1,416 |
// ######################## SPI - FlightCtrl ################### |
#include "main.h" |
#include "eeprom.h" |
//struct str_ToNaviCtrl_Version ToNaviCtrl_Version; |
//struct str_FromNaviCtrl_Version FromNaviCtrl_Version; |
struct str_ToNaviCtrl ToNaviCtrl; |
struct str_FromNaviCtrl FromNaviCtrl; |
struct str_FromNaviCtrl_Value FromNaviCtrl_Value; |
struct str_SPI_VersionInfo NC_Version; |
struct str_GPSInfo GPSInfo; |
unsigned char SPI_BufferIndex; |
unsigned char SPI_RxBufferIndex; |
signed char FromNC_Rotate_C = 32, FromNC_Rotate_S = 0; |
volatile unsigned char SPI_Buffer[sizeof(FromNaviCtrl)]; |
unsigned char *SPI_TX_Buffer; |
unsigned char SPITransferCompleted, SPI_ChkSum; |
unsigned char SPI_RxDataValid,NaviDataOkay = 250; |
unsigned char SPI_CommandSequence[] = { SPI_FCCMD_STICK, SPI_FCCMD_USER, SPI_FCCMD_PARAMETER1, |
SPI_FCCMD_STICK, SPI_FCCMD_VERSION, SPI_FCCMD_BL_ACCU, |
SPI_FCCMD_STICK, SPI_FCCMD_USER, SPI_FCCMD_MISC,SPI_FCCMD_SERVOS, |
SPI_FCCMD_STICK, SPI_FCCMD_PARAMETER2, SPI_FCCMD_BL_ACCU |
}; |
unsigned char SPI_CommandCounter = 0; |
unsigned char NC_ErrorCode = 0; |
unsigned char NC_GPS_ModeCharacter = ' '; |
unsigned char EarthMagneticField = 0; |
unsigned char EarthMagneticInclination = 0, EarthMagneticInclinationTheoretic = 0; |
unsigned char NC_To_FC_Flags = 0; |
//unsigned char NC_To_FC_MaxAltitude = 0; // this is a Parameter on the SD-card |
signed int POI_KameraNick = 0; // in 0,1° |
vector16_t MagVec = {0,0,0}; |
#ifdef USE_SPI_COMMUNICATION |
//------------------------------------------------------ |
void SPI_MasterInit(void) |
{ |
DDR_SPI |= (1<<DD_MOSI)|(1<<DD_SCK); // Set MOSI and SCK output, all others input |
SLAVE_SELECT_DDR_PORT |= (1 << SPI_SLAVE_SELECT); |
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(0<<SPR0)|(0<<SPIE); // Enable SPI, Master, set clock rate fck/64 |
SPSR = 0;//(1<<SPI2X); |
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); |
SPITransferCompleted = 1; |
//SPDR = 0x00; // dummy write |
ToNaviCtrl.Sync1 = 0xAA; |
ToNaviCtrl.Sync2 = 0x83; |
ToNaviCtrl.Command = SPI_FCCMD_USER; |
ToNaviCtrl.IntegralNick = 0; |
ToNaviCtrl.IntegralRoll = 0; |
FromNaviCtrl_Value.SerialDataOkay = 0; |
SPI_RxDataValid = 0; |
} |
//------------------------------------------------------ |
unsigned char SPI_StartTransmitPacket(void) |
{ |
if(!SPITransferCompleted) return(0); |
SLAVE_SELECT_PORT &= ~(1 << SPI_SLAVE_SELECT); // SelectSlave |
SPI_TX_Buffer = (unsigned char *) &ToNaviCtrl; |
ToNaviCtrl.Command = SPI_CommandSequence[SPI_CommandCounter++]; |
if (SPI_CommandCounter >= sizeof(SPI_CommandSequence)) SPI_CommandCounter = 0; |
SPITransferCompleted = 0; |
UpdateSPI_Buffer(); // update buffer |
SPI_BufferIndex = 1; |
ToNaviCtrl.Chksum = ToNaviCtrl.Sync1; |
SPDR = ToNaviCtrl.Sync1; // Start transmission |
return(1); |
} |
//------------------------------------------------------ |
//SIGNAL(SIG_SPI) |
void SPI_TransmitByte(void) |
{ |
static unsigned char SPI_RXState = 0; |
unsigned char rxdata; |
static unsigned char rxchksum; |
if (SPITransferCompleted) return; |
if (!(SPSR & (1 << SPIF))) return; |
BytegapSPI = SPI_BYTEGAP; |
// _delay_us(30); |
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); // DeselectSlave |
rxdata = SPDR; |
switch ( SPI_RXState) |
{ |
case 0: |
SPI_RxBufferIndex = 0; |
rxchksum = rxdata; |
if (rxdata == 0x81 ) { SPI_RXState = 1; } // 1. Syncbyte ok |
break; |
case 1: |
if (rxdata == 0x55) { rxchksum += rxdata; SPI_RXState = 2; } // 2. Syncbyte ok |
else SPI_RXState = 0; |
break; |
case 2: |
SPI_Buffer[SPI_RxBufferIndex++]= rxdata; // get data |
//DebugOut.Analog[19]++; |
if (SPI_RxBufferIndex >= sizeof(FromNaviCtrl)) |
{ |
if (rxdata == rxchksum) |
{ |
unsigned char *ptr = (unsigned char *)&FromNaviCtrl; |
memcpy(ptr, (unsigned char *) SPI_Buffer, sizeof(SPI_Buffer)); |
SPI_RxDataValid = 1; |
} |
else |
{ |
SPI_RxDataValid = 0; |
} |
SPI_RXState = 0; |
} |
else rxchksum += rxdata; |
break; |
} |
if (SPI_BufferIndex < sizeof(ToNaviCtrl)) |
{ |
SLAVE_SELECT_PORT &= ~(1 << SPI_SLAVE_SELECT); // SelectSlave |
asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); |
SPDR = SPI_TX_Buffer[SPI_BufferIndex]; |
ToNaviCtrl.Chksum += SPI_TX_Buffer[SPI_BufferIndex]; |
} |
else SPITransferCompleted = 1; |
SPI_BufferIndex++; |
} |
//------------------------------------------------------ |
void UpdateSPI_Buffer(void) |
{ |
signed int tmp; |
static unsigned char motorindex, oldcommand = SPI_NCCMD_VERSION; |
ToNaviCtrl.IntegralNick = (int) (IntegralNick / (long)(EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
ToNaviCtrl.IntegralRoll = (int) (IntegralRoll / (long)(EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
ToNaviCtrl.GyroCompass = (10 * ErsatzKompass) / GIER_GRAD_FAKTOR; |
ToNaviCtrl.GyroGier = (signed int) AdNeutralGier - AdWertGier; |
ToNaviCtrl.AccNick = ((int) ACC_AMPLIFY * (NaviAccNick / NaviCntAcc))/4; |
ToNaviCtrl.AccRoll = ((int) ACC_AMPLIFY * (NaviAccRoll / NaviCntAcc))/4; |
NaviCntAcc = 0; NaviAccNick = 0; NaviAccRoll = 0; |
// ToNaviCtrl.User8 = Parameter_UserParam8; |
// ToNaviCtrl.CalState = WinkelOut.CalcState; |
switch(ToNaviCtrl.Command) // |
{ |
case SPI_FCCMD_USER: |
ToNaviCtrl.Param.Byte[0] = Parameter_UserParam1; |
ToNaviCtrl.Param.Byte[1] = Parameter_UserParam2; |
ToNaviCtrl.Param.Byte[2] = Parameter_UserParam3; |
ToNaviCtrl.Param.Byte[3] = Parameter_UserParam4; |
ToNaviCtrl.Param.Byte[4] = Parameter_UserParam5; |
ToNaviCtrl.Param.Byte[5] = Parameter_UserParam6; |
ToNaviCtrl.Param.Byte[6] = Parameter_UserParam7; |
ToNaviCtrl.Param.Byte[7] = Parameter_UserParam8; |
ToNaviCtrl.Param.Byte[8] = FC_StatusFlags; |
//if(FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF) ToNaviCtrl.Param.Byte[8] &= ~FC_STATUS_FLY; |
FC_StatusFlags &= ~(FC_STATUS_CALIBRATE | FC_STATUS_START); |
ToNaviCtrl.Param.Byte[9] = ActiveParamSet; |
ToNaviCtrl.Param.Byte[10] = (unsigned char) UBat; // 0.1V |
ToNaviCtrl.Param.Byte[11] = FC_StatusFlags2; |
if(!(PORTC & (1<<PORTC2))) FC_StatusFlags2 &= ~FC_STATUS2_OUT1_ACTIVE; // Out1 (J16) |
break; |
case SPI_FCCMD_BL_ACCU: |
ToNaviCtrl.Param.Int[0] = Capacity.ActualCurrent; // 0.1A |
ToNaviCtrl.Param.Byte[2] = motorindex; |
ToNaviCtrl.Param.Byte[3] = Capacity.MinOfMaxPWM; |
ToNaviCtrl.Param.Byte[4] = GetChannelValue(EE_Parameter.NaviGpsModeChannel); // GPS-Mode control |
ToNaviCtrl.Param.Byte[5] = VarioCharacter; |
ToNaviCtrl.Param.Byte[6] = Motor[motorindex].NotReadyCnt; |
ToNaviCtrl.Param.Byte[7] = Motor[motorindex].Version; |
ToNaviCtrl.Param.Byte[8] = Motor[motorindex].MaxPWM; |
ToNaviCtrl.Param.Byte[9] = Motor[motorindex].State; |
ToNaviCtrl.Param.Byte[10] = Motor[motorindex].Temperature; |
ToNaviCtrl.Param.Byte[11] = Motor[motorindex].Current; |
if(Mixer.Motor[++motorindex][0] <= 0) // next motor is not used ? |
while(Mixer.Motor[motorindex][0] <= 0 && motorindex) motorindex = (motorindex + 1) % 13; |
break; |
case SPI_FCCMD_PARAMETER1: |
ToNaviCtrl.Param.Byte[0] = (unsigned char) BattLowVoltageWarning; //0.1V |
ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviGpsGain; // Parameters for the Naviboard |
ToNaviCtrl.Param.Byte[2] = EE_Parameter.NaviGpsP; |
ToNaviCtrl.Param.Byte[3] = EE_Parameter.NaviGpsI; |
ToNaviCtrl.Param.Byte[4] = EE_Parameter.NaviGpsD; |
ToNaviCtrl.Param.Byte[5] = EE_Parameter.NaviGpsA; |
ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsMinSat; |
ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviStickThreshold; |
ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviMaxFlyingRange; |
ToNaviCtrl.Param.Byte[9] = EE_Parameter.NaviWindCorrection; |
ToNaviCtrl.Param.Byte[10] = EE_Parameter.NaviAccCompensation; |
ToNaviCtrl.Param.Byte[11] = EE_Parameter.NaviAngleLimitation; |
break; |
case SPI_FCCMD_PARAMETER2: |
ToNaviCtrl.Param.Byte[0] = EE_Parameter.AutoPhotoDistance; // Distance between Photo releases |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
// create the ToNC_SpeakHoTT |
if(EE_Parameter.Receiver != RECEIVER_HOTT) |
{ |
if(JetiBeep != 'B') JetiBeep = pgm_read_byte(&JETI_CODE[HoTT_Waring()]); |
else HoTT_Waring(); |
} |
ToNaviCtrl.Param.Byte[1] = ToNC_SpeakHoTT; |
#else |
ToNaviCtrl.Param.Byte[1] = 0; |
#endif |
ToNaviCtrl.Param.Byte[2] = EE_Parameter.LandingSpeed; |
ToNaviCtrl.Param.Byte[3] = EE_Parameter.ComingHomeAltitude; |
ToNaviCtrl.Param.Byte[4] = LowVoltageHomeActive; |
ToNaviCtrl.Param.Byte[5] = ToNC_Load_WP_List; |
ToNaviCtrl.Param.Byte[6] = ToNC_Load_SingePoint; |
ToNaviCtrl.Param.Byte[7] = ToNC_Store_SingePoint; |
ToNC_Load_WP_List = 0; |
ToNC_Load_SingePoint = 0; |
ToNC_Store_SingePoint = 0; |
ToNaviCtrl.Param.sInt[4] = KompassSollWert; // Pos. 8 & 9 |
ToNaviCtrl.Param.Byte[10] = EE_Parameter.AutoPhotoAtitudes; |
ToNaviCtrl.Param.Byte[11] = EE_Parameter.SingleWpSpeed; |
break; |
case SPI_FCCMD_STICK: |
cli(); |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127; |
ToNaviCtrl.Param.Byte[0] = (char) tmp; |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127; |
ToNaviCtrl.Param.Byte[1] = (char) tmp; |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127; |
ToNaviCtrl.Param.Byte[2] = (char) tmp; |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127; |
sei(); |
ToNaviCtrl.Param.Byte[3] = (char) tmp; |
ToNaviCtrl.Param.Byte[4] = (unsigned char) Poti[0]; |
ToNaviCtrl.Param.Byte[5] = (unsigned char) Poti[1]; |
ToNaviCtrl.Param.Byte[6] = (unsigned char) Poti[2]; |
ToNaviCtrl.Param.Byte[7] = (unsigned char) Poti[3]; |
ToNaviCtrl.Param.Byte[8] = (unsigned char) Poti[4]; |
ToNaviCtrl.Param.Byte[9] = (unsigned char) Poti[5]; |
ToNaviCtrl.Param.Byte[10] = (unsigned char) Poti[6]; |
ToNaviCtrl.Param.Byte[11] = (unsigned char) Poti[7]; |
break; |
case SPI_FCCMD_MISC: |
if(WinkelOut.CalcState >= 5) |
{ |
WinkelOut.CalcState = 0; |
ToNaviCtrl.Param.Byte[0] = 5; |
} |
else ToNaviCtrl.Param.Byte[0] = WinkelOut.CalcState; |
ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviPH_LoginTime; |
ToNaviCtrl.Param.Int[1] = (int)(HoehenWert/5); |
ToNaviCtrl.Param.Int[2] = (int)(SollHoehe/5); |
ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsPLimit; |
ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviGpsILimit; |
ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviGpsDLimit; |
ToNaviCtrl.Param.Byte[9] = (unsigned char) SenderOkay; |
ToNaviCtrl.Param.Byte[10] = NC_Wait_for_LED; |
ToNaviCtrl.Param.Byte[11] = DebugOut.Analog[7] / 4; //GasMischanteil |
break; |
case SPI_FCCMD_VERSION: |
ToNaviCtrl.Param.Byte[0] = VERSION_MAJOR; |
ToNaviCtrl.Param.Byte[1] = VERSION_MINOR; |
ToNaviCtrl.Param.Byte[2] = VERSION_PATCH; |
ToNaviCtrl.Param.Byte[3] = NC_SPI_COMPATIBLE; |
ToNaviCtrl.Param.Byte[4] = PlatinenVersion; |
ToNaviCtrl.Param.Byte[5] = VersionInfo.HardwareError[0]; |
ToNaviCtrl.Param.Byte[6] = VersionInfo.HardwareError[1]; |
VersionInfo.HardwareError[0] &= ~FC_ERROR0_CAREFREE; // VersionInfo.HardwareError[0] = 0; |
VersionInfo.HardwareError[1] &= FC_ERROR1_MIXER; |
ToNaviCtrl.Param.Byte[7] = EE_Parameter.CompassOffset; |
ToNaviCtrl.Param.Byte[8] = Parameter_GlobalConfig; |
ToNaviCtrl.Param.Byte[9] = Parameter_ExtraConfig; |
ToNaviCtrl.Param.Byte[10] = EE_Parameter.OrientationAngle; |
ToNaviCtrl.Param.Byte[11] = EE_Parameter.GlobalConfig3; |
break; |
case SPI_FCCMD_SERVOS: |
ToNaviCtrl.Param.Int[0] = Capacity.UsedCapacity; // mAh |
ToNaviCtrl.Param.Byte[2] = Parameter_ServoNickControl; |
ToNaviCtrl.Param.Byte[3] = Parameter_ServoRollControl; |
ToNaviCtrl.Param.Byte[4] = DebugOut.Analog[28]; // I2C-Error counter |
ToNaviCtrl.Param.Byte[5] = RedundanceBlOperation; |
ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviDescendRange; // in 10m |
ToNaviCtrl.Param.Byte[7] = Parameter_MaximumAltitude; |
ToNaviCtrl.Param.Int[4] = FlugMinutenGesamt; // 8 & 9 |
ToNaviCtrl.Param.Byte[10] = EE_Parameter.CamOrientation; |
ToNaviCtrl.Param.Byte[11] = VersionInfo.BL_Firmware; |
break; |
} |
if(SPI_RxDataValid) |
{ |
if(FromNaviCtrl.Command != oldcommand) NaviDataOkay = 250; |
oldcommand = FromNaviCtrl.Command; |
CalculateCompassTimer = 1; |
if(abs(FromNaviCtrl.GPS_Nick) < 512 && abs(FromNaviCtrl.GPS_Roll) < 512 && (EE_Parameter.GlobalConfig & CFG_GPS_AKTIV)) |
{ |
GPS_Nick = FromNaviCtrl.GPS_Nick; |
GPS_Roll = FromNaviCtrl.GPS_Roll; |
} |
// update compass readings |
// MagVec.x = FromNaviCtrl.MagVecX; |
// MagVec.y = FromNaviCtrl.MagVecY; |
// MagVec.z = FromNaviCtrl.MagVecZ; |
if(FromNaviCtrl.CompassValue <= 360) KompassValue = FromNaviCtrl.CompassValue; |
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180; |
if(FromNaviCtrl.BeepTime > beeptime && !DisableRcOffBeeping) beeptime = FromNaviCtrl.BeepTime; |
switch (FromNaviCtrl.Command) |
{ |
case SPI_NCCMD_KALMAN: |
FromNaviCtrl_Value.Kalman_K = FromNaviCtrl.Param.sByte[0]; |
FromNaviCtrl_Value.Kalman_MaxFusion = FromNaviCtrl.Param.sByte[1]; |
FromNaviCtrl_Value.Kalman_MaxDrift = FromNaviCtrl.Param.sByte[2]; |
KompassFusion = FromNaviCtrl.Param.sByte[3]; |
FromNaviCtrl_Value.GpsZ = FromNaviCtrl.Param.Byte[4]; |
FromNC_Rotate_C = FromNaviCtrl.Param.Byte[5]; |
FromNC_Rotate_S = FromNaviCtrl.Param.Byte[6]; |
GPS_Aid_StickMultiplikator = FromNaviCtrl.Param.Byte[7]; |
if(CareFree && FromNaviCtrl.Param.sInt[4] >= 0) |
{ |
KompassSollWert = FromNaviCtrl.Param.sInt[4]; // bei Carefree kann NC den Kompass-Sollwinkel vorgeben |
/* |
if(EE_Parameter.CamOrientation) // Kamera angle is not front |
{ |
KompassSollWert += 360 - ((unsigned int) EE_Parameter.CamOrientation * 15); |
KompassSollWert %= 360; |
} |
*/ |
} |
POI_KameraNick = (POI_KameraNick + FromNaviCtrl.Param.sInt[5]) / 2; // FromNaviCtrl.Param.sInt[5]; // Nickwinkel |
break; |
case SPI_NCCMD_VERSION: |
NC_Version.Major = FromNaviCtrl.Param.Byte[0]; |
NC_Version.Minor = FromNaviCtrl.Param.Byte[1]; |
NC_Version.Patch = FromNaviCtrl.Param.Byte[2]; |
NC_Version.Compatible = FromNaviCtrl.Param.Byte[3]; |
NC_Version.Hardware = FromNaviCtrl.Param.Byte[4]; |
DebugOut.Status[0] |= FromNaviCtrl.Param.Byte[5]; |
DebugOut.Status[1] = (DebugOut.Status[1] & (0x01|0x02)) | (FromNaviCtrl.Param.Byte[6] & (0x04 | 0x08)); |
NC_ErrorCode = FromNaviCtrl.Param.Byte[7]; |
NC_GPS_ModeCharacter = FromNaviCtrl.Param.Byte[8]; |
FromNaviCtrl_Value.SerialDataOkay = FromNaviCtrl.Param.Byte[9]; |
NC_To_FC_Flags = FromNaviCtrl.Param.Byte[10]; |
//NC_To_FC_MaxAltitude = FromNaviCtrl.Param.Byte[11]; |
break; |
case SPI_NCCMD_GPSINFO: |
GPSInfo.Flags = FromNaviCtrl.Param.Byte[0]; |
GPSInfo.NumOfSats = FromNaviCtrl.Param.Byte[1]; |
GPSInfo.SatFix = FromNaviCtrl.Param.Byte[2]; |
GPSInfo.Speed = FromNaviCtrl.Param.Byte[3]; |
GPSInfo.HomeDistance = FromNaviCtrl.Param.Int[2]; |
GPSInfo.HomeBearing = FromNaviCtrl.Param.sInt[3]; |
PPM_in[WP_EVENT_PPM_IN] = (signed char) FromNaviCtrl.Param.Byte[8]; // WP_EVENT-Channel-Value (FromNC_WP_EventChannel) |
FromNC_AltitudeSpeed = FromNaviCtrl.Param.Byte[9]; |
FromNC_AltitudeSetpoint = (long) FromNaviCtrl.Param.sInt[5] * 10; // in cm |
break; |
case SPI_MISC: |
EarthMagneticField = FromNaviCtrl.Param.Byte[0]; |
EarthMagneticInclination = FromNaviCtrl.Param.Byte[1]; |
EarthMagneticInclinationTheoretic = FromNaviCtrl.Param.Byte[2]; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(FromNaviCtrl.Param.Byte[3]) |
if(!SpeakHoTT || (SpeakHoTT >= SPEAK_GPS_HOLD && SpeakHoTT <= SPEAK_GPS_OFF)) SpeakHoTT = FromNaviCtrl.Param.Byte[3]; |
NaviData_TargetDistance = FromNaviCtrl.Param.Int[3]; |
#endif |
NaviData_WaypointIndex = FromNaviCtrl.Param.Byte[4]; |
NaviData_WaypointNumber = FromNaviCtrl.Param.Byte[5]; |
NaviData_TargetHoldTime = FromNaviCtrl.Param.Byte[8]; |
NaviData_MaxWpListIndex = FromNaviCtrl.Param.Byte[9]; |
CompassCorrected = FromNaviCtrl.Param.sInt[5]; // Bytes 10 & 11 |
break; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
case SPI_NCCMD_HOTT_DATA: |
//if(EE_Parameter.Receiver == RECEIVER_HOTT) |
NC_Fills_HoTT_Telemety(); |
break; |
#endif |
// 0 = 0,1 |
// 1 = 2,3 |
// 2 = 4,5 |
// 3 = 6,7 |
// 4 = 8,9 |
// 5 = 10,11 |
default: |
break; |
} |
} |
else |
{ |
// KompassValue = 0; |
// KompassRichtung = 0; |
GPS_Nick = 0; |
GPS_Roll = 0; |
} |
} |
#endif |
/tags/V2.06e/spi.h |
---|
0,0 → 1,197 |
// ######################## SPI - FlightCtrl ################### |
#ifndef _SPI_H |
#define _SPI_H |
#include <util/delay.h> |
#include "vector.h" |
#define USE_SPI_COMMUNICATION |
#define SPI_BYTEGAP 5 |
//----------------------------------------- |
#define DDR_SPI DDRB |
#define SLAVE_SELECT_DDR_PORT DDRC |
#define SLAVE_SELECT_PORT PORTC |
#if defined(__AVR_ATmega1284P__) |
#define DD_SS PORTB4 |
#define DD_SCK PORTB7 |
#define DD_MOSI PORTB5 |
#define DD_MISO PORTB6 |
#define SPI_SLAVE_SELECT PORTC5 |
#else |
#define DD_SS PB4 |
#define DD_SCK PB7 |
#define DD_MOSI PB5 |
#define DD_MISO PB6 |
#define SPI_SLAVE_SELECT PC5 |
#endif |
// for compatibility reasons gcc3.x <-> gcc4.x |
#ifndef SPCR |
#define SPCR SPCR0 |
#endif |
#ifndef SPE |
#define SPE SPE0 |
#endif |
#ifndef MSTR |
#define MSTR MSTR0 |
#endif |
#ifndef SPR1 |
#define SPR1 SPR01 |
#endif |
#ifndef SPR0 |
#define SPR0 SPR00 |
#endif |
#ifndef SPIE |
#define SPIE SPIE0 |
#endif |
#ifndef SPDR |
#define SPDR SPDR0 |
#endif |
#ifndef SPIF |
#define SPIF SPIF0 |
#endif |
#ifndef SPSR |
#define SPSR SPSR0 |
#endif |
// ------------------------- |
#define SPI_FCCMD_USER 10 |
#define SPI_FCCMD_STICK 11 |
#define SPI_FCCMD_MISC 12 |
#define SPI_FCCMD_PARAMETER1 13 |
#define SPI_FCCMD_VERSION 14 |
#define SPI_FCCMD_SERVOS 15 |
#define SPI_FCCMD_BL_ACCU 16 |
#define SPI_FCCMD_PARAMETER2 17 |
struct str_ToNaviCtrl |
{ |
unsigned char Sync1, Sync2; |
unsigned char Command; |
signed int IntegralNick; |
signed int IntegralRoll; |
signed int AccNick; |
signed int AccRoll; |
signed int GyroCompass; |
signed int GyroNick; |
signed int GyroRoll; |
signed int GyroGier; |
unsigned int FCStatus; |
union |
{ |
unsigned char Byte[12]; |
char sByte[12]; |
unsigned int Int[6]; |
int sInt[6]; |
unsigned long Long[3]; |
long sLong[3]; |
float Float[3]; |
} Param; |
unsigned char Chksum; |
}; |
#define SPI_NCCMD_KALMAN 103 |
#define SPI_NCCMD_VERSION 104 |
#define SPI_NCCMD_GPSINFO 105 |
#define SPI_NCCMD_HOTT_DATA 106 |
#define SPI_MISC 107 |
struct str_FromNaviCtrl |
{ |
unsigned char Command; |
signed int GPS_Nick; |
signed int GPS_Roll; |
signed int MagVecX; |
signed int CompassValue; |
signed int AccErrorN; |
signed int AccErrorR; |
signed int MagVecY; |
signed int MagVecZ; |
unsigned int BeepTime; |
union |
{ |
unsigned char Byte[12]; |
char sByte[12]; |
unsigned int Int[6]; |
int sInt[6]; |
unsigned long Long[3]; |
long sLong[3]; |
float Float[3]; |
} Param; |
unsigned char Chksum; |
}; |
struct str_FromNaviCtrl_Value |
{ |
signed char Kalman_K; |
signed char Kalman_MaxDrift; |
signed char Kalman_MaxFusion; |
unsigned char SerialDataOkay; |
signed char GpsZ; |
}; |
struct str_SPI_VersionInfo |
{ |
unsigned char Major; |
unsigned char Minor; |
unsigned char Patch; |
unsigned char Compatible; |
unsigned char Hardware; |
}; |
// Satfix types for GPSData.SatFix |
#define SATFIX_NONE 0x00 |
#define SATFIX_DEADRECKOING 0x01 |
#define SATFIX_2D 0x02 |
#define SATFIX_3D 0x03 |
#define SATFIX_GPS_DEADRECKOING 0x04 |
#define SATFIX_TIMEONLY 0x05 |
// Flags for interpretation of the GPSData.Flags |
#define FLAG_GPSFIXOK 0x01 // (i.e. within DOP & ACC Masks) |
#define FLAG_DIFFSOLN 0x02 // (is DGPS used) |
#define FLAG_WKNSET 0x04 // (is Week Number valid) |
#define FLAG_TOWSET 0x08 // (is Time of Week valid) |
#define FLAG_GPS_NAVIGATION_ACTIVE 0x10 // NC to FC -> NC is ready to navigate |
struct str_GPSInfo |
{ |
unsigned char Flags; // Status Flags |
unsigned char NumOfSats; // number of satelites |
unsigned char SatFix; // type of satfix |
unsigned char Speed; // m/sek |
unsigned int HomeDistance; // distance to Home in dm |
int HomeBearing; // bearing to home in deg |
}; |
#ifdef USE_SPI_COMMUNICATION |
extern struct str_GPSInfo GPSInfo; |
extern struct str_SPI_VersionInfo NC_Version; |
extern struct str_FromNaviCtrl_Value FromNaviCtrl_Value; |
extern struct str_ToNaviCtrl ToNaviCtrl; |
extern struct str_FromNaviCtrl FromNaviCtrl; |
extern unsigned char SPI_CommandCounter,NaviDataOkay; |
extern signed char FromNC_Rotate_C, FromNC_Rotate_S; |
extern unsigned char NC_ErrorCode; |
extern void SPI_MasterInit(void); |
extern unsigned char SPI_StartTransmitPacket(void); |
extern void UpdateSPI_Buffer(void); |
extern void SPI_TransmitByte(void); |
extern signed int POI_KameraNick; |
extern unsigned char NC_GPS_ModeCharacter, NC_To_FC_Flags, NC_To_FC_MaxAltitude; |
extern vector16_t MagVec; |
extern unsigned char EarthMagneticField; |
extern unsigned char EarthMagneticInclination,EarthMagneticInclinationTheoretic; |
#else |
// -------------------------------- Dummy ----------------------------------------- |
#define SPI_MasterInit() ; |
//#define SPI_StartTransmitPacket() ; |
#define UpdateSPI_Buffer() ; |
#define SPI_TransmitByte() ; |
#endif |
#endif |
/tags/V2.06e/timer0.c |
---|
0,0 → 1,490 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#define MULTIPLYER 4 |
volatile unsigned int CountMilliseconds = 0; |
volatile unsigned int tim_main; |
volatile unsigned char UpdateMotor = 0; |
volatile unsigned int cntKompass = 0; |
volatile unsigned int beeptime = 0; |
volatile unsigned char BytegapSPI = 0, ServoActive = 0, CalculateServoSignals = 1; |
unsigned char JustMK3MagConnected = 0; |
uint16_t RemainingPulse = 0; |
volatile int16_t ServoNickOffset = (255 / 2) * MULTIPLYER * 16; // initial value near center positon |
volatile int16_t ServoRollOffset = (255 / 2) * MULTIPLYER * 16; // initial value near center positon |
unsigned int BeepMuster = 0xffff; |
signed int NickServoValue = 128 * MULTIPLYER * 16; |
volatile int16_t ServoNickValue = 0; |
volatile int16_t ServoRollValue = 0; |
enum { |
STOP = 0, |
CK = 1, |
CK8 = 2, |
CK64 = 3, |
CK256 = 4, |
CK1024 = 5, |
T0_FALLING_EDGE = 6, |
T0_RISING_EDGE = 7 |
}; |
ISR(TIMER0_OVF_vect) // 9,7kHz |
{ |
static unsigned char cnt_1ms = 1,cnt = 0; |
unsigned char pieper_ein = 0; |
if(BytegapSPI) BytegapSPI--; |
if(SpektrumTimer) SpektrumTimer--; |
if(!cnt--) |
{ |
cnt = 9; |
CountMilliseconds++; |
cnt_1ms++; |
cnt_1ms %= 2; |
if(!cnt_1ms) if(UpdateMotor < 4) UpdateMotor++; |
if(!(PINC & 0x10)) JustMK3MagConnected = 1; |
if(beeptime) |
{ |
if(beeptime > 10) beeptime -= 10; else beeptime = 0; |
if(beeptime & BeepMuster) |
{ |
pieper_ein = 1; |
} |
else pieper_ein = 0; |
} |
else |
{ |
pieper_ein = 0; |
BeepMuster = 0xffff; |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(pieper_ein) PORTC |= (1<<7); // Speaker an PORTC.7 |
else PORTC &= ~(1<<7); |
#else |
if(pieper_ein) |
{ |
// if(PlatinenVersion == 10) PORTD |= (1<<2); // Speaker an PORTD.2 |
// else |
PORTC |= (1<<7); // Speaker an PORTC.7 |
} |
else |
{ |
// if(PlatinenVersion == 10) PORTD &= ~(1<<2); |
// else |
PORTC &= ~(1<<7); |
} |
#endif |
} |
if(JustMK3MagConnected && !NaviDataOkay && Parameter_GlobalConfig & CFG_KOMPASS_AKTIV) |
{ |
if(PINC & 0x10) |
{ |
if(++cntKompass > 1000) JustMK3MagConnected = 0; |
} |
else |
{ |
if((cntKompass) && (cntKompass < 362)) |
{ |
cntKompass += cntKompass / 41; |
if(cntKompass > 10) KompassValue = cntKompass - 10; else KompassValue = 0; |
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180; |
} |
cntKompass = 0; |
} |
} |
} |
// ----------------------------------------------------------------------- |
unsigned int SetDelay(unsigned int t) |
{ |
// TIMSK0 &= ~_BV(TOIE0); |
return(CountMilliseconds + t + 1); |
// TIMSK0 |= _BV(TOIE0); |
} |
// ----------------------------------------------------------------------- |
char CheckDelay(unsigned int t) |
{ |
// TIMSK0 &= ~_BV(TOIE0); |
return(((t - CountMilliseconds) & 0x8000) >> 9); |
// TIMSK0 |= _BV(TOIE0); |
} |
// ----------------------------------------------------------------------- |
void Delay_ms(unsigned int w) |
{ |
unsigned int akt; |
akt = SetDelay(w); |
while (!CheckDelay(akt)); |
} |
void Delay_ms_Mess(unsigned int w) |
{ |
unsigned int akt; |
akt = SetDelay(w); |
while (!CheckDelay(akt)) if(AdReady) {AdReady = 0; ANALOG_ON;} |
} |
/*****************************************************/ |
/* Initialize Timer 2 */ |
/*****************************************************/ |
// The timer 2 is used to generate the PWM at PD7 (J7) |
// to control a camera servo for nick compensation. |
void TIMER2_Init(void) |
{ |
uint8_t sreg = SREG; |
// disable all interrupts before reconfiguration |
cli(); |
PORTD &= ~(1<<PORTD7); // set PD7 to low |
DDRC |= (1<<DDC6); // set PC6 as output (Reset for HEF4017) |
HEF4017Reset_ON; |
// Timer/Counter 2 Control Register A |
// Timer Mode is FastPWM with timer reload at OCR2A (Bits: WGM22 = 1, WGM21 = 1, WGM20 = 1) |
// PD7: Normal port operation, OC2A disconnected, (Bits: COM2A1 = 0, COM2A0 = 0) |
// PD6: Normal port operation, OC2B disconnected, (Bits: COM2B1 = 0, COM2B0 = 0) |
TCCR2A &= ~((1<<COM2A1)|(1<<COM2A0)|(1<<COM2B1)|(1<<COM2B0)); |
TCCR2A |= (1<<WGM21)|(1<<WGM20); |
// Timer/Counter 2 Control Register B |
// Set clock divider for timer 2 to SYSKLOCK/32 = 20MHz / 32 = 625 kHz |
// The timer increments from 0x00 to 0xFF with an update rate of 625 kHz or 1.6 us |
// hence the timer overflow interrupt frequency is 625 kHz / 256 = 2.44 kHz or 0.4096 ms |
// divider 32 (Bits: CS022 = 0, CS21 = 1, CS20 = 1) |
TCCR2B &= ~((1<<FOC2A)|(1<<FOC2B)|(1<<CS22)); |
TCCR2B |= (1<<CS21)|(1<<CS20)|(1<<WGM22); |
// Initialize the Timer/Counter 2 Register |
TCNT2 = 0; |
// Initialize the Output Compare Register A used for PWM generation on port PD7. |
OCR2A = 255; |
TCCR2A |= (1<<COM2A1); // set or clear at compare match depends on value of COM2A0 |
// Timer/Counter 2 Interrupt Mask Register |
// Enable timer output compare match A Interrupt only |
TIMSK2 &= ~((1<<OCIE2B)|(1<<TOIE2)); |
TIMSK2 |= (1<<OCIE2A); |
SREG = sreg; |
} |
//---------------------------- |
void Timer_Init(void) |
{ |
tim_main = SetDelay(10); |
TCCR0B = CK8; |
// TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM |
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|(1<<COM0B0)|3;//fast PWM |
OCR0B = 255; |
OCR0A = 180; |
TCNT0 = (unsigned char)-TIMER_RELOAD_VALUE; // reload |
//OCR1 = 0x00; |
TIMSK0 |= _BV(TOIE0); |
} |
/*****************************************************/ |
/* Control Servo Position */ |
/*****************************************************/ |
void CalcNickServoValue(void) |
{ |
signed int max, min; |
if(EE_Parameter.ServoCompInvert & SERVO_RELATIVE) // relative moving of the servo value |
{ |
max = ((unsigned int) EE_Parameter.ServoNickMax * MULTIPLYER * 15); |
min = ((unsigned int) EE_Parameter.ServoNickMin * MULTIPLYER * 20); |
NickServoValue -= ((signed char) (Parameter_ServoNickControl - 128) / 4) * 6; |
LIMIT_MIN_MAX(NickServoValue,min, max); |
} |
else NickServoValue = (int16_t)Parameter_ServoNickControl * (MULTIPLYER*16); // direct poti control |
} |
void CalculateServo(void) |
{ |
signed char cosinus, sinus; |
signed long nick, roll; |
cosinus = sintab[EE_Parameter.CamOrientation + 6]; |
sinus = sintab[EE_Parameter.CamOrientation]; |
if(CalculateServoSignals == 1) |
{ |
if(EE_Parameter.GlobalConfig3 & CFG3_SERVO_NICK_COMP_OFF) nick = 0; |
else nick = (cosinus * IntegralNick) / 128L - (sinus * IntegralRoll) / 128L; |
nick -= POI_KameraNick * 7; |
nick = ((long)Parameter_ServoNickComp * nick) / 512L; |
// offset (Range from 0 to 255 * 3 = 765) |
if(EE_Parameter.ServoCompInvert & SERVO_RELATIVE) ServoNickOffset = NickServoValue; |
else ServoNickOffset += (NickServoValue - ServoNickOffset) / EE_Parameter.ServoManualControlSpeed; |
if(EE_Parameter.ServoCompInvert & SERVO_NICK_INV) // inverting movement of servo |
{ |
nick = ServoNickOffset / 16 + nick; |
} |
else |
{ // inverting movement of servo |
nick = ServoNickOffset / 16 - nick; |
} |
if(EE_Parameter.ServoFilterNick) ServoNickValue = ((ServoNickValue * EE_Parameter.ServoFilterNick) + nick) / (EE_Parameter.ServoFilterNick + 1); |
else ServoNickValue = nick; |
// limit servo value to its parameter range definition |
if(ServoNickValue < ((int16_t)EE_Parameter.ServoNickMin * MULTIPLYER)) |
{ |
ServoNickValue = (int16_t)EE_Parameter.ServoNickMin * MULTIPLYER; |
} |
else |
if(ServoNickValue > ((int16_t)EE_Parameter.ServoNickMax * MULTIPLYER)) |
{ |
ServoNickValue = (int16_t)EE_Parameter.ServoNickMax * MULTIPLYER; |
} |
// if(PlatinenVersion < 20) CalculateServoSignals = 0; else |
CalculateServoSignals++; |
} |
else |
{ |
roll = (cosinus * IntegralRoll) / 128L + (sinus * IntegralNick) / 128L; |
roll = ((long)Parameter_ServoRollComp * roll) / 512L; |
ServoRollOffset += ((int16_t)Parameter_ServoRollControl * (MULTIPLYER*16) - ServoRollOffset) / EE_Parameter.ServoManualControlSpeed; |
if(EE_Parameter.ServoCompInvert & SERVO_ROLL_INV) |
{ // inverting movement of servo |
roll = ServoRollOffset / 16 + roll; |
} |
else |
{ // inverting movement of servo |
roll = ServoRollOffset / 16 - roll; |
} |
if(EE_Parameter.ServoFilterRoll) ServoRollValue = ((ServoRollValue * EE_Parameter.ServoFilterRoll) + roll) / (EE_Parameter.ServoFilterRoll + 1); |
else ServoRollValue = roll; |
// limit servo value to its parameter range definition |
if(ServoRollValue < ((int16_t)EE_Parameter.ServoRollMin * MULTIPLYER)) |
{ |
ServoRollValue = (int16_t)EE_Parameter.ServoRollMin * MULTIPLYER; |
} |
else |
if(ServoRollValue > ((int16_t)EE_Parameter.ServoRollMax * MULTIPLYER)) |
{ |
ServoRollValue = (int16_t)EE_Parameter.ServoRollMax * MULTIPLYER; |
} |
CalculateServoSignals = 0; |
} |
} |
ISR(TIMER2_COMPA_vect) |
{ |
// frame len 22.5 ms = 14063 * 1.6 us |
// stop pulse: 0.3 ms = 188 * 1.6 us |
// min servo pulse: 0.6 ms = 375 * 1.6 us |
// max servo pulse: 2.4 ms = 1500 * 1.6 us |
// resolution: 1500 - 375 = 1125 steps |
#define IRS_RUNTIME 127 |
#define PPM_STOPPULSE 188 |
#define PPM_FRAMELEN (1757 * EE_Parameter.ServoNickRefresh) |
#define MINSERVOPULSE 375 |
#define MAXSERVOPULSE 1500 |
#define SERVORANGE (MAXSERVOPULSE - MINSERVOPULSE) |
static uint8_t PulseOutput = 0; |
static uint16_t ServoFrameTime = 0; |
static uint8_t ServoIndex = 0; |
/* |
if(PlatinenVersion < 20) |
{ |
//--------------------------- |
// Nick servo state machine |
//--------------------------- |
if(!PulseOutput) // pulse output complete |
{ |
if(TCCR2A & (1<<COM2A0)) // we had a low pulse |
{ |
TCCR2A &= ~(1<<COM2A0);// make a high pulse |
RemainingPulse = MINSERVOPULSE + SERVORANGE/2; // center position ~ 1.5ms |
RemainingPulse += ServoNickValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position |
// range servo pulse width |
if(RemainingPulse > MAXSERVOPULSE ) RemainingPulse = MAXSERVOPULSE; // upper servo pulse limit |
else if(RemainingPulse < MINSERVOPULSE ) RemainingPulse = MINSERVOPULSE; // lower servo pulse limit |
// accumulate time for correct update rate |
ServoFrameTime = RemainingPulse; |
} |
else // we had a high pulse |
{ |
TCCR2A |= (1<<COM2A0); // make a low pulse |
RemainingPulse = PPM_FRAMELEN - ServoFrameTime; |
CalculateServoSignals = 1; |
} |
// set pulse output active |
PulseOutput = 1; |
} |
} // EOF Nick servo state machine |
else |
*/ |
{ |
//----------------------------------------------------- |
// PPM state machine, onboard demultiplexed by HEF4017 |
//----------------------------------------------------- |
if(!PulseOutput) // pulse output complete |
{ |
if(TCCR2A & (1<<COM2A0)) // we had a low pulse |
{ |
TCCR2A &= ~(1<<COM2A0);// make a high pulse |
if(ServoIndex == 0) // if we are at the sync gap |
{ |
RemainingPulse = PPM_FRAMELEN - ServoFrameTime; // generate sync gap by filling time to full frame time |
ServoFrameTime = 0; // reset servo frame time |
HEF4017Reset_ON; // enable HEF4017 reset |
} |
else // servo channels |
if(ServoIndex > EE_Parameter.ServoNickRefresh) |
{ |
RemainingPulse = 10; // end it here |
} |
else |
{ |
RemainingPulse = MINSERVOPULSE + SERVORANGE/2; // center position ~ 1.5ms |
switch(ServoIndex) // map servo channels |
{ |
case 1: // Nick Compensation Servo |
RemainingPulse += ServoNickValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position |
break; |
case 2: // Roll Compensation Servo |
RemainingPulse += ServoRollValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position |
break; |
case 3: |
RemainingPulse += ((int16_t)Parameter_Servo3 * MULTIPLYER) - (256 / 2) * MULTIPLYER; |
break; |
case 4: |
RemainingPulse += ((int16_t)Parameter_Servo4 * MULTIPLYER) - (256 / 2) * MULTIPLYER; |
break; |
case 5: |
RemainingPulse += ((int16_t)Parameter_Servo5 * MULTIPLYER) - (256 / 2) * MULTIPLYER; |
break; |
default: // other servo channels |
RemainingPulse += 2 * PPM_in[ServoIndex]; // add channel value, factor of 2 because timer 1 increments 3.2µs |
break; |
} |
// range servo pulse width |
if(RemainingPulse > MAXSERVOPULSE) RemainingPulse = MAXSERVOPULSE; // upper servo pulse limit |
else if(RemainingPulse < MINSERVOPULSE) RemainingPulse = MINSERVOPULSE; // lower servo pulse limit |
// substract stop pulse width |
RemainingPulse -= PPM_STOPPULSE; |
// accumulate time for correct sync gap |
ServoFrameTime += RemainingPulse; |
} |
} |
else // we had a high pulse |
{ |
TCCR2A |= (1<<COM2A0); // make a low pulse |
// set pulsewidth to stop pulse width |
RemainingPulse = PPM_STOPPULSE; |
// accumulate time for correct sync gap |
ServoFrameTime += RemainingPulse; |
if((ServoActive && SenderOkay) || ServoActive == 2) HEF4017Reset_OFF; // disable HEF4017 reset |
else HEF4017Reset_ON; |
ServoIndex++; |
if(ServoIndex > EE_Parameter.ServoNickRefresh+1) |
{ |
CalculateServoSignals = 1; |
ServoIndex = 0; // reset to the sync gap |
} |
} |
// set pulse output active |
PulseOutput = 1; |
} |
} // EOF PPM state machine |
// General pulse output generator |
if(RemainingPulse > (255 + IRS_RUNTIME)) |
{ |
OCR2A = 255; |
RemainingPulse -= 255; |
} |
else |
{ |
if(RemainingPulse > 255) // this is the 2nd last part |
{ |
if((RemainingPulse - 255) < IRS_RUNTIME) |
{ |
OCR2A = 255 - IRS_RUNTIME; |
RemainingPulse -= 255 - IRS_RUNTIME; |
} |
else // last part > ISR_RUNTIME |
{ |
OCR2A = 255; |
RemainingPulse -= 255; |
} |
} |
else // this is the last part |
{ |
OCR2A = RemainingPulse; |
RemainingPulse = 0; |
PulseOutput = 0; // trigger to stop pulse |
} |
} // EOF general pulse output generator |
} |
/tags/V2.06e/timer0.h |
---|
0,0 → 1,25 |
#define TIMER_TEILER CK8 |
#define TIMER_RELOAD_VALUE 250 |
#define HEF4017Reset_ON PORTC |= (1<<PORTC6) |
#define HEF4017Reset_OFF PORTC &= ~(1<<PORTC6) |
void Timer_Init(void); |
void TIMER2_Init(void); |
void Delay_ms(unsigned int); |
void Delay_ms_Mess(unsigned int); |
unsigned int SetDelay (unsigned int t); |
char CheckDelay (unsigned int t); |
void CalculateServo(void); |
void CalcNickServoValue(void); |
extern volatile unsigned int CountMilliseconds; |
extern volatile unsigned char UpdateMotor; |
extern volatile unsigned int beeptime; |
extern volatile unsigned int cntKompass; |
extern unsigned int BeepMuster; |
extern volatile unsigned char BytegapSPI, ServoActive, CalculateServoSignals; |
extern volatile int16_t ServoNickValue; |
extern volatile int16_t ServoRollValue; |
extern signed int NickServoValue; |
extern unsigned char JustMK3MagConnected; |
/tags/V2.06e/twimaster.c |
---|
0,0 → 1,487 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <util/twi.h> |
#include "eeprom.h" |
#include "twimaster.h" |
#include "fc.h" |
#include "analog.h" |
#include "uart.h" |
#include "timer0.h" |
#include "main.h" |
volatile uint8_t twi_state = TWI_STATE_MOTOR_TX, ReadBlSize = 9; |
volatile uint8_t dac_channel = 0; |
volatile uint8_t motor_write = 0; |
volatile uint8_t motor_read = 0; |
volatile uint8_t I2C_TransferActive = 0; |
uint8_t Max_I2C_Packets = 12; |
volatile uint16_t I2CTimeout = 100; |
uint8_t MissingMotor = 0; |
volatile uint8_t BLFlags = 0; |
MotorData_t Motor[MAX_MOTORS]; |
RedundantBl_t RedundantMotor[MAX_MOTORS]; |
// bit mask for witch BL the configuration should be sent |
volatile uint16_t BLConfig_WriteMask = 0; |
// bit mask for witch BL the configuration should be read |
volatile uint16_t BLConfig_ReadMask = 0; |
// buffer for BL Configuration |
BLConfig_t BLConfig; |
#define I2C_WriteByte(byte) {TWDR = byte; TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);} |
#define I2C_ReceiveByte() {TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE) | (1<<TWEA);} |
#define I2C_ReceiveLastByte() {TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);} |
#define SCL_CLOCK 200000L |
#define I2C_TIMEOUT 30000 |
#define TWI_BASE_ADDRESS 0x52 |
/**************************************************/ |
/* Initialize I2C (TWI) */ |
/**************************************************/ |
void I2C_Init(char clear) |
{ |
uint8_t i; |
uint8_t sreg = SREG; |
cli(); |
// SDA is INPUT |
DDRC &= ~(1<<DDC1); |
// SCL is output |
DDRC |= (1<<DDC0); |
// pull up SDA |
PORTC |= (1<<PORTC0)|(1<<PORTC1); |
// TWI Status Register |
// prescaler 1 (TWPS1 = 0, TWPS0 = 0) |
TWSR &= ~((1<<TWPS1)|(1<<TWPS0)); |
// set TWI Bit Rate Register |
TWBR = ((F_CPU/SCL_CLOCK)-16)/2; |
twi_state = TWI_STATE_MOTOR_TX; |
motor_write = 0; |
motor_read = 0; |
if(clear) for(i=0; i < MAX_MOTORS; i++) |
{ |
Motor[i].Version = 0; |
Motor[i].SetPoint = 0; |
Motor[i].SetPointLowerBits = 0; |
Motor[i].State = 0; |
Motor[i].ReadMode = BL_READMODE_STATUS; |
Motor[i].Current = 0; |
Motor[i].MaxPWM = 0; |
Motor[i].Temperature = 0; |
Motor[i].NotReadyCnt = 0; |
Motor[i].RPM = 0; |
Motor[i].reserved1 = 0; |
Motor[i].Voltage = 0; |
Motor[i].SlaveI2cError = 0; |
Motor[i].VersionMajor = 0; |
Motor[i].VersionMinor = 0; |
} |
sei(); |
SREG = sreg; |
} |
void I2C_Reset(void) |
{ |
// stop i2c bus |
I2C_Stop(TWI_STATE_MOTOR_TX); |
TWCR = (1<<TWINT); // reset to original state incl. interrupt flag reset |
TWAMR = 0; |
TWAR = 0; |
TWDR = 0; |
TWSR = 0; |
TWBR = 0; |
I2C_TransferActive = 0; |
I2C_Init(0); |
I2C_WriteByte(0); |
BLFlags |= BLFLAG_READ_VERSION; |
} |
/****************************************/ |
/* I2C ISR */ |
/****************************************/ |
ISR (TWI_vect) |
{ |
static uint8_t missing_motor = 0, motor_read_temperature = 0; |
static uint8_t *pBuff = 0; |
static uint8_t BuffLen = 0; |
static uint8_t max_packets = 0; |
switch (twi_state++) |
{ |
// Master Transmit |
case 0: // TWI_STATE_MOTOR_TX |
I2C_TransferActive = 1; |
// skip motor if not used in mixer |
while((Mixer.Motor[motor_write][MIX_GAS] <= 0) && (motor_write < MAX_MOTORS)) motor_write++; |
motor_write %= MAX_MOTORS; |
if(++max_packets > Max_I2C_Packets) // writing finished, read now |
{ |
max_packets = 0; |
BLConfig_WriteMask = 0; // reset configuration bitmask |
//motor_write = 0; // reset motor write counter for next cycle |
twi_state = TWI_STATE_MOTOR_RX; |
I2C_WriteByte(TWI_BASE_ADDRESS + TW_READ + (motor_read<<1) ); // select slave address in rx mode |
} |
else I2C_WriteByte(TWI_BASE_ADDRESS + TW_WRITE + (motor_write<<1) ); // select slave address in tx mode |
break; |
case 1: // Send Data to Slave |
I2C_WriteByte(Motor[motor_write].SetPoint); // transmit setpoint |
// if old version has been detected |
if(!(Motor[motor_write].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) |
{ |
twi_state = 4; //jump over sending more data |
} |
// the new version has been detected |
else if(!( (Motor[motor_write].SetPointLowerBits && (RequiredMotors < 7)) || BLConfig_WriteMask || BLConfig_ReadMask ) ) |
{ // or LowerBits are zero and no BlConfig should be sent (saves round trip time) |
twi_state = 4; //jump over sending more data |
} |
break; |
case 2: // lower bits of setpoint (higher resolution) |
if ((0x0001<<motor_write) & BLConfig_ReadMask) |
{ |
Motor[motor_write].ReadMode = BL_READMODE_CONFIG; // configuration request |
} |
else |
{ |
Motor[motor_write].ReadMode = BL_READMODE_STATUS; // normal status request |
} |
// send read mode and the lower bits of setpoint |
I2C_WriteByte((Motor[motor_write].ReadMode<<3)|(Motor[motor_write].SetPointLowerBits & 0x07)); |
// configuration tranmission request? |
if((0x0001<<motor_write) & BLConfig_WriteMask) |
{ // redirect tx pointer to configuration data |
pBuff = (uint8_t*)&BLConfig; // select config for motor |
BuffLen = sizeof(BLConfig_t); |
} |
else |
{ // jump to end of transmission for that motor |
twi_state = 4; |
} |
break; |
case 3: // send configuration |
I2C_WriteByte(*pBuff); |
pBuff++; |
if(--BuffLen > 0) twi_state = 3; // if there are some bytes left |
break; |
case 4: // repeat case 0-4 for all motors |
if(TWSR == TW_MT_DATA_NACK) // Data transmitted, NACK received |
{ |
if(!missing_motor) missing_motor = motor_write + 1; |
if((Motor[motor_write].State & MOTOR_STATE_ERROR_MASK) < MOTOR_STATE_ERROR_MASK) Motor[motor_write].State++; // increment error counter and handle overflow |
} |
I2C_Stop(TWI_STATE_MOTOR_TX); |
I2CTimeout = 10; |
motor_write++; // next motor |
I2C_Start(TWI_STATE_MOTOR_TX); // Repeated start -> switch slave or switch Master Transmit -> Master Receive |
break; |
// Master Receive Data |
case 5: // TWI_STATE_MOTOR_RX |
if(TWSR != TW_MR_SLA_ACK) // SLA+R transmitted but no ACK received |
{ // no response from the addressed slave received |
Motor[motor_read].State &= ~MOTOR_STATE_PRESENT_MASK; // clear present bit |
if(++motor_read >= MAX_MOTORS) |
{ // all motors read |
motor_read = 0; // restart from beginning |
BLConfig_ReadMask = 0; // reset read configuration bitmask |
if(++motor_read_temperature >= MAX_MOTORS) |
{ |
motor_read_temperature = 0; |
BLFlags &= ~BLFLAG_READ_VERSION; |
} |
} |
BLFlags |= BLFLAG_TX_COMPLETE; |
I2C_Stop(TWI_STATE_MOTOR_TX); |
I2C_TransferActive = 0; |
} |
else |
{ // motor successfully addressed |
Motor[motor_read].State |= MOTOR_STATE_PRESENT_MASK; // set present bit |
if(Motor[motor_read].Version & MOTOR_STATE_NEW_PROTOCOL_MASK) |
{ |
// new BL found |
switch(Motor[motor_read].ReadMode) |
{ |
case BL_READMODE_CONFIG: |
pBuff = (uint8_t*)&BLConfig; |
BuffLen = sizeof(BLConfig_t); |
Motor[motor_read].ReadMode = BL_READMODE_STATUS; // only once |
break; |
case BL_READMODE_STATUS: |
pBuff = (uint8_t*)&(Motor[motor_read].Current); |
if(motor_read == motor_read_temperature) BuffLen = ReadBlSize; // read Current, MaxPwm & Temp (is 3 or 9) |
else BuffLen = 1;// read Current only |
break; |
} |
} |
else // old BL version |
{ |
pBuff = (uint8_t*)&(Motor[motor_read].Current); |
if((BLFlags & BLFLAG_READ_VERSION) || (motor_read == motor_read_temperature)) BuffLen = 2; // Current & MaxPwm |
else BuffLen = 1; // read Current only |
} |
if(BuffLen == 1) |
{ |
I2C_ReceiveLastByte(); // read last byte |
} |
else |
{ |
I2C_ReceiveByte(); // read next byte |
} |
} |
MissingMotor = missing_motor; |
missing_motor = 0; |
break; |
case 6: // receive bytes |
*pBuff = TWDR; |
pBuff++; // set Pointer to next element : Motor[].Current,Motor[].Temperature |
BuffLen--; |
if(BuffLen>1) |
{ |
I2C_ReceiveByte(); // read next byte |
} |
else if (BuffLen == 1) |
{ |
I2C_ReceiveLastByte(); // read last byte |
} |
else // nothing left -> ready |
{ |
if(BLFlags & BLFLAG_READ_VERSION) |
{ |
if(!(FC_StatusFlags & FC_STATUS_MOTOR_RUN)) |
{ |
if((Motor[motor_read].MaxPWM & 252) == 248) Motor[motor_read].Version |= MOTOR_STATE_NEW_PROTOCOL_MASK; |
else Motor[motor_read].Version = 0; |
if(Motor[motor_read].MaxPWM == 248) Motor[motor_read].Version |= (MOTOR_STATE_FAST_MODE | MOTOR_STATE_BL30); |
else |
if(Motor[motor_read].MaxPWM == 249) Motor[motor_read].Version |= MOTOR_STATE_BL30; |
} |
} |
if(FC_StatusFlags & FC_STATUS_FLY) |
{ |
// Starting -> 40 |
// I2C-Setpoint is zero -> 250 |
// 255 -> Running and no Redundancy |
// 254 -> Running and active Redundancy |
if(Motor[motor_read].MaxPWM < 254) |
{ |
Motor[motor_read].NotReadyCnt++; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
SpeakHoTT = SPEAK_ERR_MOTOR; |
#endif |
} |
} |
if(++motor_read >= MAX_MOTORS) |
{ |
motor_read = 0; // restart from beginning |
BLConfig_ReadMask = 0; // reset read configuration bitmask |
if(++motor_read_temperature >= MAX_MOTORS) |
{ |
motor_read_temperature = 0; |
BLFlags &= ~BLFLAG_READ_VERSION; |
} |
} |
I2C_Stop(TWI_STATE_MOTOR_TX); |
BLFlags |= BLFLAG_TX_COMPLETE; |
I2C_TransferActive = 0; |
return; |
} |
twi_state = 6; // if there are some bytes left |
break; |
/* |
// writing Gyro-Offsets |
case 18: |
I2C_WriteByte(0x98); // Address the DAC |
break; |
case 19: |
I2C_WriteByte(0x10 + (dac_channel * 2)); // Select DAC Channel (0x10 = A, 0x12 = B, 0x14 = C) |
break; |
case 20: |
switch(dac_channel) |
{ |
case 0: |
I2C_WriteByte(AnalogOffsetNick); // 1st byte for Channel A |
break; |
case 1: |
I2C_WriteByte(AnalogOffsetRoll); // 1st byte for Channel B |
break; |
case 2: |
I2C_WriteByte(AnalogOffsetGier); // 1st byte for Channel C |
break; |
} |
break; |
case 21: |
I2C_WriteByte(0x80); // 2nd byte for all channels is 0x80 |
break; |
case 22: |
I2C_Stop(TWI_STATE_MOTOR_TX); |
I2C_TransferActive = 0; |
I2CTimeout = 10; |
// repeat case 18...22 until all DAC Channels are updated |
if(dac_channel < 2) |
{ |
dac_channel ++; // jump to next channel |
I2C_Start(TWI_STATE_GYRO_OFFSET_TX); // start transmission for next channel |
} |
else |
{ |
dac_channel = 0; // reset dac channel counter |
BLFlags |= BLFLAG_TX_COMPLETE; |
} |
break; |
*/ |
default: |
I2C_Stop(TWI_STATE_MOTOR_TX); |
BLFlags |= BLFLAG_TX_COMPLETE; |
I2CTimeout = 10; |
motor_write = 0; |
motor_read = 0; |
I2C_TransferActive = 0; |
break; |
} |
} |
uint8_t I2C_WriteBLConfig(uint8_t motor) |
{ |
uint8_t i, packets; |
uint16_t timer; |
if(MotorenEin || PC_MotortestActive) return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running! |
if(motor > MAX_MOTORS) return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(motor) |
{ |
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL! |
} |
// check BL configuration to send |
if((BLConfig.Revision & 0x0B) != BLCONFIG_REVISION) return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison |
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1); |
if(i != BLConfig.crc) return(BLCONFIG_ERR_CHECKSUM); // bad checksum |
packets = Max_I2C_Packets; |
Max_I2C_Packets = 12; |
I2CTimeout = 100; |
timer = SetDelay(100); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
// prepare the bitmask |
if(!motor) BLConfig_WriteMask = 0x0FFF; // 0 means all -> all motors at once with the same configuration |
else BLConfig_WriteMask = 0x0001<<(motor-1); //only one specific motor |
motor_write = 0; |
motor_read = 0; |
// needs at least MAX_MOTORS loops of 2 ms (12*2ms = 24ms) |
timer = SetDelay(1000); |
do |
{ |
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
} while(BLConfig_WriteMask && !CheckDelay(timer)); // repeat until the BL config has been sent |
Max_I2C_Packets = packets; |
if(BLConfig_WriteMask) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); |
return(BLCONFIG_SUCCESS); |
} |
uint8_t I2C_ReadBLConfig(uint8_t motor) |
{ |
uint8_t i; |
uint16_t timer; |
if(MotorenEin || PC_MotortestActive) return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running! |
if(motor > MAX_MOTORS) return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(motor == 0) return (BLCONFIG_ERR_READ_NOT_POSSIBLE); |
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL! |
timer = SetDelay(1000); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
// prepare the bitmask |
BLConfig_ReadMask = 0x0001<<(motor-1); |
motor_write = 0; |
motor_read = 0; |
BLConfig.Revision = 0; // bad revision |
BLConfig.crc = 0; // bad checksum |
// needs at least MAX_MOTORS loops of 2 ms (12*2ms = 24ms) |
do |
{ |
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
} while(BLConfig_ReadMask && !CheckDelay(timer)); // repeat until the BL config has been received from all motors |
// validate result |
if((BLConfig.Revision & 0x0B) != BLCONFIG_REVISION) return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison |
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1); |
if(i != BLConfig.crc) return(BLCONFIG_ERR_CHECKSUM); // bad checksum |
return(BLCONFIG_SUCCESS); |
} |
/tags/V2.06e/twimaster.h |
---|
0,0 → 1,126 |
#ifndef _I2C_MASTER_H |
#define _I2C_MASTER_H |
+ |
+#include <inttypes.h> |
+ |
+#define TWI_STATE_MOTOR_TX 0 |
+#define TWI_STATE_MOTOR_RX 5 |
+//#define TWI_STATE_GYRO_OFFSET_TX 18 |
+ |
+extern volatile uint8_t twi_state, ReadBlSize; |
+extern volatile uint8_t motor_write; |
+extern volatile uint8_t motor_read; |
+extern volatile uint8_t I2C_TransferActive; |
+extern uint8_t Max_I2C_Packets; |
+extern uint8_t MissingMotor; |
+ |
+#define MAX_MOTORS 12 |
+#define MOTOR_STATE_PRESENT_MASK 0x80 |
+#define MOTOR_STATE_ERROR_MASK 0x7F |
+ |
+//Motor[x].Version |
+#define MOTOR_STATE_NEW_PROTOCOL_MASK 0x01 |
+#define MOTOR_STATE_FAST_MODE 0x02 |
+#define MOTOR_STATE_BL30 0x04 // extended Current measurement -> 200 = 20A 201 = 21A 255 = 75A (20+55) |
+ |
+#define BLFLAG_TX_COMPLETE 0x01 |
+#define BLFLAG_READ_VERSION 0x02 |
+ |
+extern volatile uint8_t BLFlags; |
+ |
+#define BL_READMODE_STATUS 0 |
+#define BL_READMODE_CONFIG 16 |
+ |
+typedef struct |
+{ |
+ uint8_t Version; // the version of the BL (0 = old) |
+ uint8_t SetPoint; // written by attitude controller |
+ uint8_t SetPointLowerBits; // for higher Resolution of new BLs |
+ uint8_t State; // 7 bit for I2C error counter, highest bit indicates if motor is present |
+ uint8_t ReadMode; // select data to read |
+ // the following bytes must be exactly in that order! |
+ uint8_t Current; // in 0.1 A steps, read back from BL |
+ uint8_t MaxPWM; // read back from BL -> is less than 255 if BL is in current limit, not running (250) or starting (40) |
+ uint8_t Temperature; // old BL-Ctrl will return a 255 here, the new version the temp. in °C |
+ uint8_t RPM; // Raw value for RPM |
+ uint8_t reserved1; // Voltage (BL3) or mAh (BL2) |
+ uint8_t Voltage; // in 0.1V (BL3 is limited to 255, BL2 is only low-byte) |
+ uint8_t SlaveI2cError; // BL2 & BL3 |
+ uint8_t VersionMajor; // BL2 & BL3 |
+ uint8_t VersionMinor; // BL2 & BL3 |
+ uint8_t NotReadyCnt; // Counts up is the Motor is not ready during flight -> MotorRestart etc. |
+} __attribute__((packed)) MotorData_t; |
+ |
+extern MotorData_t Motor[MAX_MOTORS]; |
+ |
+// BitSate |
+#define BL_BIT_STATE_I2C_OK 0x01 |
+#define BL_BIT_STATE_I2C_VALUE 0x02 |
+#define BL_BIT_STATE_I2C_BAD 0x04 |
+#define BL_BIT_STATE_PPM_OK 0x08 |
+#define BL_BIT_STATE_MOTOR_RUN 0x10 |
+ |
+typedef struct |
+{ |
+ unsigned char BitSate; |
+ unsigned char Current; |
+ unsigned char State; |
+ unsigned char TemperatureInDeg; |
+ unsigned char Voltage80; |
+} __attribute__((packed)) RedundantBl_t; |
+extern RedundantBl_t RedundantMotor[MAX_MOTORS]; |
+ |
+#define BLCONFIG_REVISION 2 |
+ |
+#define MASK_SET_PWM_SCALING 0x01 |
+#define MASK_SET_CURRENT_LIMIT 0x02 |
+#define MASK_SET_TEMP_LIMIT 0x04 |
+#define MASK_SET_CURRENT_SCALING 0x08 |
+#define MASK_SET_BITCONFIG 0x10 |
+#define MASK_SET_STARTPWM 0x20 |
+#define MASK_SET_DEFAULT_PARAMS 0x40 |
+#define MASK_SET_SAVE_EEPROM 0x80 |
+ |
+#define BITCONF_REVERSE_ROTATION 0x01 |
+#define BITCONF_STARTGAS1 0x02 |
+#define BITCONF_STARTGAS2 0x04 |
+#define BITCONF_STARTGAS3 0x08 |
+#define BITCONF_RES4 0x10 |
+#define BITCONF_RES5 0x20 |
+#define BITCONF_RES6 0x40 |
+#define BITCONF_RES7 0x80 |
+ |
+typedef struct |
+{ |
+ uint8_t Revision; // must be BL_REVISION |
+ uint8_t SetMask; // settings mask |
+ uint8_t PwmScaling; // maximum value of control pwm, acts like a thrust limit |
+ uint8_t CurrentLimit; // current limit in A |
+ uint8_t TempLimit; // in °C |
+ uint8_t CurrentScaling; // scaling factor for current measurement |
+ uint8_t BitConfig; // see defines above |
+ uint8_t crc; // checksum |
+} __attribute__((packed)) BLConfig_t; |
+ |
+extern BLConfig_t BLConfig; |
+ |
+extern volatile uint16_t I2CTimeout; |
+ |
+void I2C_Init(char); // Initialize I2C |
+#define I2C_Start(start_state) {twi_state = start_state; BLFlags &= ~BLFLAG_TX_COMPLETE; TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE);} |
+#define I2C_Stop(start_state) {twi_state = start_state; TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT);} |
+void I2C_Reset(void); // Reset I2C |
+ |
+#define BLCONFIG_SUCCESS 0 |
+#define BLCONFIG_ERR_MOTOR_RUNNING 1 |
+#define BLCONFIG_ERR_MOTOR_NOT_EXIST 2 |
+#define BLCONFIG_ERR_HW_NOT_COMPATIBLE 3 |
+#define BLCONFIG_ERR_SW_NOT_COMPATIBLE 4 |
+#define BLCONFIG_ERR_CHECKSUM 5 |
+#define BLCONFIG_ERR_READ_NOT_POSSIBLE 6 |
+ |
+uint8_t I2C_WriteBLConfig(uint8_t motor); |
+uint8_t I2C_ReadBLConfig(uint8_t motor); |
+ |
+#endif |
/tags/V2.06e/uart.c |
---|
0,0 → 1,874 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include <stdarg.h> |
#include <string.h> |
#include <avr/pgmspace.h> |
#include "main.h" |
#include "uart.h" |
#include "libfc.h" |
#include "eeprom.h" |
#define FC_ADDRESS 1 |
#define NC_ADDRESS 2 |
#define MK3MAG_ADDRESS 3 |
#define BL_CTRL_ADDRESS 5 |
#define ABO_TIMEOUT 4000 // disable abo after 4 seconds |
#define MAX_SENDE_BUFF 220 |
#define MAX_EMPFANGS_BUFF 220 |
#define BLPARAM_REVISION 1 |
#define MASK_SET_PWM_SCALING 0x01 |
#define MASK_SET_CURRENT_LIMIT 0x02 |
#define MASK_SET_TEMP_LIMIT 0x04 |
#define MASK_SET_CURRENT_SCALING 0x08 |
#define MASK_SET_BITCONFIG 0x10 |
#define MASK_RESET_CAPCOUNTER 0x20 |
#define MASK_SET_DEFAULT_PARAMS 0x40 |
#define MASK_SET_SAVE_EEPROM 0x80 |
unsigned char GetExternalControl = 0,DebugDisplayAnforderung1 = 0, DebugDisplayAnforderung = 0,DebugDataAnforderung = 0,GetVersionAnforderung = 0, GetPPMChannelAnforderung = 0; |
unsigned char DisplayLine = 0; |
unsigned volatile char SioTmp = 0; |
unsigned volatile char NeuerDatensatzEmpfangen = 0; |
unsigned volatile char NeueKoordinateEmpfangen = 0; |
unsigned volatile char UebertragungAbgeschlossen = 1; |
unsigned volatile char CntCrcError = 0; |
unsigned volatile char AnzahlEmpfangsBytes = 0; |
unsigned volatile char TxdBuffer[MAX_SENDE_BUFF]; |
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF]; |
unsigned char *pRxData = 0; |
unsigned char RxDataLen = 0; |
unsigned volatile char PC_DebugTimeout = 0; |
unsigned volatile char PC_MotortestActive = 0; |
unsigned char DebugTextAnforderung = 255; |
unsigned char PcZugriff = 100; |
unsigned char MotorTest[16]; |
unsigned char MeineSlaveAdresse = 1; // Flight-Ctrl |
unsigned char ConfirmFrame; |
struct str_DebugOut DebugOut; |
struct str_ExternControl ExternControl; |
struct str_VersionInfo VersionInfo; |
struct str_WinkelOut WinkelOut; |
struct str_Data3D Data3D; |
int Display_Timer, Debug_Timer,Kompass_Timer,Timer3D; |
unsigned int DebugDataIntervall = 0, Intervall3D = 0, Display_Interval = 0; |
unsigned int AboTimeOut = 0; |
unsigned volatile char ReceiverUpdateModeActive = 0; // 1 = Update 2 = JetiBox-Simulation |
const unsigned char ANALOG_TEXT[32][16] PROGMEM = |
{ |
//1234567890123456 |
"AngleNick ", //0 |
"AngleRoll ", |
"AccNick ", |
"AccRoll ", |
"YawGyro ", |
"Altitude [0.1m] ", //5 |
"AccZ ", |
"Gas ", |
"Compass Value ", |
"Voltage [0.1V] ", |
"Receiver Level ", //10 |
"Gyro Compass ", |
"Motor 1 ", |
"Motor 2 ", |
"Motor 3 ", |
"Motor 4 ", //15 |
"16 ", |
"17 ", |
"18 ", |
"19 ", |
"Servo ", //20 |
"Hovergas ", |
"Current [0.1A] ", |
"Capacity [mAh] ", |
"Height Setpoint ", |
"25 ", //25 |
"26 ", //"26 CPU OverLoad ", |
"27 ", |
"I2C-Error ", |
"BL Limit ", |
"GPS_Nick ", //30 |
"GPS_Roll " |
}; |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Sende-Part der Datenübertragung |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
ISR(USART0_TX_vect) |
{ |
static unsigned int ptr = 0; |
unsigned char tmp_tx; |
if(!UebertragungAbgeschlossen) |
{ |
ptr++; // die [0] wurde schon gesendet |
tmp_tx = TxdBuffer[ptr]; |
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF)) |
{ |
ptr = 0; |
UebertragungAbgeschlossen = 1; |
} |
UDR0 = tmp_tx; |
} |
else ptr = 0; |
} |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
ISR(USART0_RX_vect) |
{ |
static unsigned int crc; |
static unsigned char crc1,crc2,buf_ptr; |
static unsigned char UartState = 0; |
unsigned char CrcOkay = 0; |
if (ReceiverUpdateModeActive == 1) { UDR1 = UDR0; return; } // 1 = Update |
if (ReceiverUpdateModeActive == 2) { RxdBuffer[0] = UDR0; return; } // 2 = JetiBox-Simulation |
SioTmp = UDR0; |
if(buf_ptr >= MAX_SENDE_BUFF) UartState = 0; |
if(SioTmp == '\r' && UartState == 2) |
{ |
UartState = 0; |
crc -= RxdBuffer[buf_ptr-2]; |
crc -= RxdBuffer[buf_ptr-1]; |
crc %= 4096; |
crc1 = '=' + crc / 64; |
crc2 = '=' + crc % 64; |
CrcOkay = 0; |
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;}; |
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet |
{ |
NeuerDatensatzEmpfangen = 1; |
AnzahlEmpfangsBytes = buf_ptr + 1; |
RxdBuffer[buf_ptr] = '\r'; |
if(RxdBuffer[2] == 'R' && !MotorenEin) |
{ |
LcdClear(); |
wdt_enable(WDTO_250MS); // Reset-Commando |
ServoActive = 0; |
} |
} |
} |
else |
switch(UartState) |
{ |
case 0: |
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet |
buf_ptr = 0; |
RxdBuffer[buf_ptr++] = SioTmp; |
crc = SioTmp; |
break; |
case 1: // Adresse auswerten |
UartState++; |
RxdBuffer[buf_ptr++] = SioTmp; |
crc += SioTmp; |
break; |
case 2: // Eingangsdaten sammeln |
RxdBuffer[buf_ptr] = SioTmp; |
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++; |
else UartState = 0; |
//if(DebugOut.Analog[] < buf_ptr) DebugOut.Analog[] = buf_ptr; |
crc += SioTmp; |
break; |
default: |
UartState = 0; |
break; |
} |
} |
// -------------------------------------------------------------------------- |
void AddCRC(unsigned int wieviele) |
{ |
unsigned int tmpCRC = 0,i; |
for(i = 0; i < wieviele;i++) |
{ |
tmpCRC += TxdBuffer[i]; |
} |
// if(i > MAX_SENDE_BUFF - 3) tmpCRC += 11; |
tmpCRC %= 4096; |
TxdBuffer[i++] = '=' + tmpCRC / 64; |
TxdBuffer[i++] = '=' + tmpCRC % 64; |
TxdBuffer[i++] = '\r'; |
UebertragungAbgeschlossen = 0; |
UDR0 = TxdBuffer[0]; |
//if(DebugOut.Analog[] < i) DebugOut.Analog[] = i; |
} |
// -------------------------------------------------------------------------- |
void SendOutData(unsigned char cmd,unsigned char address, unsigned char BufferAnzahl, ...) //unsigned char *snd, unsigned char len) |
{ |
va_list ap; |
unsigned int pt = 0; |
unsigned char a,b,c; |
unsigned char ptr = 0; |
unsigned char *snd = 0; |
int len = 0; |
TxdBuffer[pt++] = '#'; // Startzeichen |
TxdBuffer[pt++] = 'a' + address; // Adresse (a=0; b=1,...) |
TxdBuffer[pt++] = cmd; // Commando |
va_start(ap, BufferAnzahl); |
if(BufferAnzahl) |
{ |
snd = va_arg(ap, unsigned char*); |
len = va_arg(ap, int); |
ptr = 0; |
BufferAnzahl--; |
} |
while(len) |
{ |
if(len) |
{ |
a = snd[ptr++]; |
len--; |
if((!len) && BufferAnzahl) |
{ |
snd = va_arg(ap, unsigned char*); |
len = va_arg(ap, int); |
ptr = 0; |
BufferAnzahl--; |
} |
} |
else a = 0; |
if(len) |
{ |
b = snd[ptr++]; |
len--; |
if((!len) && BufferAnzahl) |
{ |
snd = va_arg(ap, unsigned char*); |
len = va_arg(ap, int); |
ptr = 0; |
BufferAnzahl--; |
} |
} |
else b = 0; |
if(len) |
{ |
c = snd[ptr++]; |
len--; |
if((!len) && BufferAnzahl) |
{ |
snd = va_arg(ap, unsigned char*); |
len = va_arg(ap, int); |
ptr = 0; |
BufferAnzahl--; |
} |
} |
else c = 0; |
TxdBuffer[pt++] = '=' + (a >> 2); |
TxdBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4)); |
TxdBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6)); |
TxdBuffer[pt++] = '=' + ( c & 0x3f); |
} |
va_end(ap); |
AddCRC(pt); |
} |
// -------------------------------------------------------------------------- |
void Decode64(void) // die daten werden im rx buffer dekodiert, das geht nur, weil aus 4 byte immer 3 gemacht werden. |
{ |
unsigned char a,b,c,d; |
unsigned char x,y,z; |
unsigned char ptrIn = 3; // start at begin of data block |
unsigned char ptrOut = 3; |
unsigned char len = AnzahlEmpfangsBytes - 6; // von der Gesamtbytezahl eines Frames gehen 3 Bytes des Headers ('#',Addr, Cmd) und 3 Bytes des Footers (CRC1, CRC2, '\r') ab. |
while(len) |
{ |
a = RxdBuffer[ptrIn++] - '='; |
b = RxdBuffer[ptrIn++] - '='; |
c = RxdBuffer[ptrIn++] - '='; |
d = RxdBuffer[ptrIn++] - '='; |
x = (a << 2) | (b >> 4); |
y = ((b & 0x0f) << 4) | (c >> 2); |
z = ((c & 0x03) << 6) | d; |
if(len--) RxdBuffer[ptrOut++] = x; else break; |
if(len--) RxdBuffer[ptrOut++] = y; else break; |
if(len--) RxdBuffer[ptrOut++] = z; else break; |
} |
pRxData = (unsigned char*)&RxdBuffer[3]; // decodierte Daten beginnen beim 4. Byte |
RxDataLen = ptrOut - 3; // wie viele Bytes wurden dekodiert? |
} |
// -------------------------------------------------------------------------- |
void BearbeiteRxDaten(void) |
{ |
if(!NeuerDatensatzEmpfangen) return; |
unsigned char tempchar1, tempchar2; |
Decode64(); // dekodiere datenblock im Empfangsbuffer |
switch(RxdBuffer[1]-'a') // check for Slave Address |
{ |
case FC_ADDRESS: // FC special commands |
switch(RxdBuffer[2]) |
{ |
case 'K':// Kompasswert |
memcpy((unsigned char *)&KompassValue , (unsigned char *)pRxData, sizeof(KompassValue)); |
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180; |
break; |
case 't':// Motortest |
if(AnzahlEmpfangsBytes > 20) memcpy(&MotorTest[0], (unsigned char *)pRxData, sizeof(MotorTest)); |
else memcpy(&MotorTest[0], (unsigned char *)pRxData, 4); |
PC_MotortestActive = 240; |
//while(!UebertragungAbgeschlossen); |
//SendOutData('T', MeineSlaveAdresse, 0); |
PcZugriff = 255; |
break; |
case 'n':// "Get Mixer |
while(!UebertragungAbgeschlossen); |
SendOutData('N', FC_ADDRESS, 1, (unsigned char *) &Mixer, sizeof(Mixer) - 1); |
Debug("Mixer lesen"); |
break; |
case 'm':// "Write Mixer |
if(pRxData[0] == EEMIXER_REVISION) |
{ |
memcpy(&Mixer, (unsigned char *)pRxData, sizeof(Mixer) - 1); |
MixerTable_WriteToEEProm(); |
tempchar1 = 1; |
VersionInfo.HardwareError[1] &= ~FC_ERROR1_MIXER; |
} |
else |
{ |
tempchar1 = 0; |
} |
while(!UebertragungAbgeschlossen); |
SendOutData('M', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1)); |
break; |
case 'p': // get PPM Channels |
GetPPMChannelAnforderung = 1; |
PcZugriff = 255; |
break; |
case 'q':// "Get"-Anforderung für Settings |
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
if(!MotorenEin) |
{ |
if((10 <= pRxData[0]) && (pRxData[0] < 20)) |
{ |
tempchar1 = pRxData[0] - 10; |
if(tempchar1< 1) tempchar1 = 1; // limit to 1 |
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5 |
SetDefaultParameter(tempchar1, 1); |
} |
else if((20 <= pRxData[0]) && (pRxData[0] < 30)) |
{ |
tempchar1 = pRxData[0] - 20; |
if(tempchar1< 1) tempchar1 = 1; // limit to 1 |
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5 |
SetDefaultParameter(tempchar1, 0); |
} |
else |
{ |
tempchar1 = pRxData[0]; |
if(tempchar1 == 0xFF) |
{ |
tempchar1 = GetActiveParamSet(); |
} |
if(tempchar1< 1) tempchar1 = 1; // limit to 1 |
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5 |
// load requested parameter set |
ParamSet_ReadFromEEProm(tempchar1); |
} |
LipoDetection(0); |
} else tempchar1 = GetActiveParamSet(); |
while(!UebertragungAbgeschlossen); |
SendOutData('Q', FC_ADDRESS, 2, &tempchar1, sizeof(tempchar1), (unsigned char *) &EE_Parameter, sizeof(EE_Parameter) - 1); |
Debug("Lese Setting %d", tempchar1); |
break; |
case 's': // Parametersatz speichern |
if((1 <= pRxData[0]) && (pRxData[0] <= 5) && (pRxData[1] == EEPARAM_REVISION) && MotorenEin == 0) // check for setting to be in range |
{ |
memcpy(&EE_Parameter, (uint8_t*)&pRxData[1], sizeof(EE_Parameter) - 1); |
ParamSet_WriteToEEProm(pRxData[0]); |
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L; |
tempchar1 = GetActiveParamSet(); |
} |
else |
{ |
tempchar1 = 0; // mark in response an invlid setting |
} |
while(!UebertragungAbgeschlossen); |
SendOutData('S', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1)); |
if(!MotorenEin) |
{ |
Piep(tempchar1,110); |
LipoDetection(0); |
} |
LIBFC_ReceiverInit(EE_Parameter.Receiver); |
break; |
case 'f': // auf anderen Parametersatz umschalten |
if(MotorenEin) break; |
if((1 <= pRxData[0]) && (pRxData[0] <= 5)) ParamSet_ReadFromEEProm(pRxData[0]); |
tempchar1 = GetActiveParamSet(); |
while(!UebertragungAbgeschlossen); |
SendOutData('F', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1)); |
if(!MotorenEin) |
{ |
Piep(tempchar1,110); |
LipoDetection(0); |
} |
LIBFC_ReceiverInit(EE_Parameter.Receiver); |
break; |
case 'y':// serial Potis |
for(tempchar1 = 0; tempchar1 < 12; tempchar1++) PPM_in[SERIAL_POTI_START + tempchar1] = (signed char) pRxData[tempchar1]; |
break; |
case 'u': // request BL parameter |
Debug("Reading BL %d", pRxData[0]); |
// try to read BL configuration |
tempchar2 = I2C_ReadBLConfig(pRxData[0]); |
if(tempchar2 == BLCONFIG_SUCCESS) tempchar1 = 1; |
else tempchar1 = 0; |
while(!UebertragungAbgeschlossen); // wait for previous frame to be sent |
SendOutData('U', FC_ADDRESS, 4, &tempchar1, sizeof(tempchar1), &tempchar2, sizeof(tempchar2), &pRxData[0], 1, &BLConfig, sizeof(BLConfig_t)); |
break; |
case 'w': // write BL parameter |
Debug("Writing BL %d", pRxData[0]); |
if(RxDataLen >= 1+sizeof(BLConfig_t)) |
{ |
memcpy(&BLConfig, (uint8_t*)(&pRxData[1]), sizeof(BLConfig_t)); |
tempchar2 = I2C_WriteBLConfig(pRxData[0]); |
if(tempchar2 == BLCONFIG_SUCCESS) tempchar1 = 1; |
else tempchar1 = 0; // indicate error |
while(!UebertragungAbgeschlossen); // wait for previous frame to be sent |
SendOutData('W', FC_ADDRESS,2, &tempchar1, sizeof(tempchar1), &tempchar2, sizeof(tempchar2)); |
} |
break; |
case 'j': |
if(MotorenEin) break; |
tempchar1 = LIBFC_GetCPUType(); |
if((tempchar1 == CPU_ATMEGA644P) || (tempchar1 == CPU_ATMEGA1284P)) |
{ |
uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/ (8 * 38400L) - 1); |
cli(); |
// UART0 & UART1 disable RX and TX-Interrupt |
UCSR0B &= ~((1 << RXCIE0)|(1 << TXCIE0)); |
UCSR1B &= ~((1 << RXCIE1)|(1 << TXCIE1)); |
// UART0 & UART1 disable receiver and transmitter |
UCSR0B &= ~((1 << TXEN0) | (1 << RXEN0)); |
UCSR1B &= ~((1 << TXEN1) | (1 << RXEN1)); |
// UART0 & UART1 flush receive buffer explicit |
while ( UCSR1A & (1<<RXC1) ) UDR1; |
while ( UCSR0A & (1<<RXC0) ) UDR0; |
if(pRxData[0] == 1) ReceiverUpdateModeActive = 2; |
else |
{ // Jeti or HoTT update |
//#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(pRxData[0] == 100) ubrr = (uint16_t) ((uint32_t) F_CPU/ (8 * 19200L) - 1); // HoTT |
//#endif |
ReceiverUpdateModeActive = 1; |
// UART0 & UART1 set baudrate |
UBRR1H = (uint8_t)(ubrr>>8); |
UBRR1L = (uint8_t)ubrr; |
UBRR0H = UBRR1H; |
UBRR0L = UBRR1L; |
// UART1 no parity |
UCSR1C &= ~(1 << UPM11); |
UCSR1C &= ~(1 << UPM10); |
// UART1 8-bit |
UCSR1B &= ~(1 << UCSZ12); |
UCSR1C |= (1 << UCSZ11); |
UCSR1C |= (1 << UCSZ10); |
} |
// UART0 & UART1 1 stop bit |
UCSR1C &= ~(1 << USBS1); |
UCSR0C &= ~(1 << USBS0); |
// UART1 clear 9th bit |
UCSR1B &= ~(1<<TXB81); |
// enable receiver and transmitter for UART0 and UART1 |
UCSR0B |= (1 << TXEN0) | (1 << RXEN0); |
UCSR1B |= (1 << TXEN1) | (1 << RXEN1); |
// enable RX-Interrupt for UART0 and UART1 |
UCSR0B |= (1 << RXCIE0); |
UCSR1B |= (1 << RXCIE1); |
// disable other Interrupts |
TIMSK0 = 0; |
TIMSK1 = 0; |
TIMSK2 = 0; |
sei(); |
} |
break; |
} // case FC_ADDRESS: |
default: // any Slave Address |
switch(RxdBuffer[2]) |
{ |
#ifdef REDUNDANT_FC_SLAVE |
static unsigned int clear_I; |
case '?':// Serielle Antwort eines BL-Reglers |
tempchar1 = RxdBuffer[1] - ('a'+11); |
if(tempchar1 >= MAX_MOTORS) break; |
memcpy((unsigned char *)&RedundantMotor[tempchar1], (unsigned char *)pRxData, sizeof(RedundantBl_t)); |
if(RedundantMotor[tempchar1].BitSate & BL_BIT_STATE_I2C_OK && clear_I) clear_I--; |
if(!(RedundantMotor[tempchar1].BitSate & BL_BIT_STATE_I2C_OK)) ROT_FLASH; |
GRN_FLASH; |
if(RedundantMotor[tempchar1].BitSate & BL_BIT_STATE_I2C_BAD) |
{ |
ROT_ON; |
if(clear_I == 0) |
{ |
SummeNick = 0; |
SummeRoll = 0; |
Mess_Integral_Gier = 0; |
} |
clear_I = 500; |
} |
//DebugOut.Analog[16] = RedundantMotor[tempchar1].BitSate; |
//DebugOut.Analog[17]++; |
//DebugOut.Analog[18] = tempchar1; |
break; |
#endif |
// 't' comand placed here only for compatibility to BL |
case 't':// Motortest |
if(AnzahlEmpfangsBytes >= sizeof(MotorTest)) memcpy(&MotorTest[0], (unsigned char *)pRxData, sizeof(MotorTest)); |
else memcpy(&MotorTest[0], (unsigned char *)pRxData, 4); |
while(!UebertragungAbgeschlossen); |
SendOutData('T', MeineSlaveAdresse, 0); |
PC_MotortestActive = 250; |
PcZugriff = 255; |
AboTimeOut = SetDelay(ABO_TIMEOUT); |
break; |
// 'K' comand placed here only for compatibility to old MK3MAG software, that does not send the right Slave Address |
case 'K':// Kompasswert |
memcpy((unsigned char *)&KompassValue , (unsigned char *)pRxData, sizeof(KompassValue)); |
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180; |
break; |
case 'a':// Texte der Analogwerte |
DebugTextAnforderung = pRxData[0]; |
if (DebugTextAnforderung > 31) DebugTextAnforderung = 31; |
PcZugriff = 255; |
break; |
case 'b': |
memcpy((unsigned char *)&ExternControl, (unsigned char *)pRxData, sizeof(ExternControl)); |
ConfirmFrame = ExternControl.Frame; |
PcZugriff = 255; |
break; |
case 'c': // Poll the 3D-Data |
if(!Intervall3D) { if(pRxData[0]) Timer3D = SetDelay(pRxData[0] * 10);} |
Intervall3D = pRxData[0] * 10; |
AboTimeOut = SetDelay(ABO_TIMEOUT); |
break; |
case 'd': // Poll the debug data |
PcZugriff = 255; |
DebugDataIntervall = (unsigned int)pRxData[0] * 10; |
if(DebugDataIntervall > 0) DebugDataAnforderung = 1; |
AboTimeOut = SetDelay(ABO_TIMEOUT); |
break; |
case 'h':// x-1 Displayzeilen |
PcZugriff = 255; |
if((pRxData[0] & 0x80) == 0x00) // old format |
{ |
DisplayLine = 2; |
Display_Interval = 0; |
} |
else // new format |
{ |
RemoteKeys |= ~pRxData[0]; |
Display_Interval = (unsigned int)pRxData[1] * 10; |
DisplayLine = 4; |
AboTimeOut = SetDelay(ABO_TIMEOUT); |
} |
DebugDisplayAnforderung = 1; |
break; |
case 'l':// x-1 Displayzeilen |
PcZugriff = 255; |
MenuePunkt = pRxData[0]; |
DebugDisplayAnforderung1 = 1; |
break; |
case 'v': // Version-Anforderung und Ausbaustufe |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(RxDataLen > 0 && pRxData[0] == 2) GetVersionAnforderung = 2; |
else |
#endif |
GetVersionAnforderung = 1; |
break; |
case 'g':// |
GetExternalControl = 1; |
break; |
default: |
//unsupported command received |
break; |
} |
break; // default: |
} |
NeuerDatensatzEmpfangen = 0; |
pRxData = 0; |
RxDataLen = 0; |
} |
//############################################################################ |
//Routine für die Serielle Ausgabe |
void uart_putchar (char c) |
//############################################################################ |
{ |
//Warten solange bis Zeichen gesendet wurde |
loop_until_bit_is_set(UCSR0A, UDRE0); |
//Ausgabe des Zeichens |
UDR0 = c; |
} |
//############################################################################ |
//INstallation der Seriellen Schnittstelle |
void UART_Init (void) |
//############################################################################ |
{ |
unsigned int ubrr = (unsigned int) ((unsigned long) F_CPU/(8 * USART0_BAUD) - 1); |
//Enable TXEN im Register UCR TX-Data Enable & RX Enable |
UCSR0B = (1 << TXEN0) | (1 << RXEN0); |
// UART Double Speed (U2X) |
UCSR0A |= (1 << U2X0); |
// RX-Interrupt Freigabe |
UCSR0B |= (1 << RXCIE0); |
// TX-Interrupt Freigabe |
UCSR0B |= (1 << TXCIE0); |
// USART0 Baud Rate Register |
// set clock divider |
UBRR0H = (uint8_t)(ubrr >> 8); |
UBRR0L = (uint8_t)ubrr; |
Debug_Timer = SetDelay(DebugDataIntervall); |
Kompass_Timer = SetDelay(220); |
VersionInfo.SWMajor = VERSION_MAJOR; |
VersionInfo.SWMinor = VERSION_MINOR; |
VersionInfo.SWPatch = VERSION_PATCH; |
VersionInfo.ProtoMajor = VERSION_SERIAL_MAJOR; |
VersionInfo.reserved1 = 0; |
VersionInfo.BL_Firmware = 255; |
VersionInfo.HWMajor = PlatinenVersion; |
pRxData = 0; |
RxDataLen = 0; |
} |
//--------------------------------------------------------------------------------------------- |
void DatenUebertragung(void) |
{ |
if(!UebertragungAbgeschlossen) return; |
if(CheckDelay(AboTimeOut)) |
{ |
Display_Interval = 0; |
DebugDataIntervall = 0; |
Intervall3D = 0; |
} |
if(((Display_Interval>0 && CheckDelay(Display_Timer)) || DebugDisplayAnforderung) && UebertragungAbgeschlossen) |
{ |
if(DisplayLine > 3)// new format |
{ |
Menu(); |
SendOutData('H', FC_ADDRESS, 1, (uint8_t *)DisplayBuff, 80); |
} |
else // old format |
{ |
LCD_printfxy(0,0,"!!! INCOMPATIBLE !!!"); |
SendOutData('H', FC_ADDRESS, 2, &DisplayLine, sizeof(DisplayLine), (uint8_t *)DisplayBuff, 20); |
if(DisplayLine++ > 3) DisplayLine = 0; |
} |
Display_Timer = SetDelay(Display_Interval); |
DebugDisplayAnforderung = 0; |
} |
if(DebugDisplayAnforderung1 && UebertragungAbgeschlossen) |
{ |
Menu(); |
SendOutData('L', FC_ADDRESS, 3, &MenuePunkt, sizeof(MenuePunkt), &MaxMenue, sizeof(MaxMenue), DisplayBuff, sizeof(DisplayBuff)); |
DebugDisplayAnforderung1 = 0; |
} |
if(GetVersionAnforderung && UebertragungAbgeschlossen) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(GetVersionAnforderung == 2) // poll version of NC |
{ |
struct str_VersionInfo nc; |
nc.SWMajor = NC_Version.Major; |
nc.SWMinor = NC_Version.Minor; |
nc.SWPatch = NC_Version.Patch; |
nc.HWMajor = NC_Version.Hardware; |
nc.HardwareError[0] = 0xff; |
nc.HardwareError[1] = 0xff; |
nc.ProtoMajor = VersionInfo.ProtoMajor; |
nc.BL_Firmware = VersionInfo.BL_Firmware; |
nc.Flags = VersionInfo.Flags; |
nc.reserved1 = 0; |
SendOutData('V', FC_ADDRESS, 1, (unsigned char *) &nc, sizeof(nc)); |
} |
else |
#endif |
{ |
SendOutData('V', FC_ADDRESS, 1, (unsigned char *) &VersionInfo, sizeof(VersionInfo)); |
} |
GetVersionAnforderung = 0; |
Debug_OK("Version gesendet"); |
} |
if(GetExternalControl && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
{ |
SendOutData('G',MeineSlaveAdresse, 1, (unsigned char *) &ExternControl, sizeof(ExternControl)); |
GetExternalControl = 0; |
} |
if(((DebugDataIntervall>0 && CheckDelay(Debug_Timer)) || DebugDataAnforderung) && UebertragungAbgeschlossen) |
{ |
CopyDebugValues(); |
SendOutData('D', FC_ADDRESS, 1, (unsigned char *) &DebugOut,sizeof(DebugOut)); |
DebugDataAnforderung = 0; |
if(DebugDataIntervall>0) Debug_Timer = SetDelay(DebugDataIntervall); |
} |
if(Intervall3D > 0 && CheckDelay(Timer3D) && UebertragungAbgeschlossen) |
{ |
Data3D.Winkel[0] = ToNaviCtrl.IntegralNick;//(int) (IntegralNick / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
Data3D.Winkel[1] = ToNaviCtrl.IntegralRoll;//(int) (IntegralRoll / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
Data3D.Winkel[2] = (int) ((10 * ErsatzKompass) / GIER_GRAD_FAKTOR); |
Data3D.Centroid[0] = SummeNick >> 9; |
Data3D.Centroid[1] = SummeRoll >> 9; |
Data3D.Centroid[2] = Mess_Integral_Gier >> 9; |
SendOutData('C', FC_ADDRESS, 1, (unsigned char *) &Data3D,sizeof(Data3D)); |
Timer3D = SetDelay(Intervall3D); |
} |
if(DebugTextAnforderung != 255) // Texte für die Analogdaten |
{ |
unsigned char label[16]; // local sram buffer |
memcpy_P(label, ANALOG_TEXT[DebugTextAnforderung], 16); // read lable from flash to sra |
SendOutData('A', FC_ADDRESS, 2, (unsigned char *)&DebugTextAnforderung, sizeof(DebugTextAnforderung),label, 16); |
DebugTextAnforderung = 255; |
} |
if(ConfirmFrame && UebertragungAbgeschlossen) // Datensatz bestätigen |
{ |
SendOutData('B', FC_ADDRESS, 1, (uint8_t*)&ConfirmFrame, sizeof(ConfirmFrame)); |
ConfirmFrame = 0; |
} |
if(GetPPMChannelAnforderung && UebertragungAbgeschlossen) |
{ |
SendOutData('P', FC_ADDRESS, 1, (unsigned char *) &PPM_in, sizeof(PPM_in)); |
GetPPMChannelAnforderung = 0; |
} |
#ifndef REDUNDANT_FC_SLAVE |
if((CheckDelay(Kompass_Timer)) && UebertragungAbgeschlossen) |
{ |
if(!NaviDataOkay) // no external compass needed |
{ |
WinkelOut.Winkel[0] = ToNaviCtrl.IntegralNick;//(int) (IntegralNick / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
WinkelOut.Winkel[1] = ToNaviCtrl.IntegralRoll;//(int) (IntegralRoll / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
WinkelOut.UserParameter[0] = Parameter_UserParam1; |
WinkelOut.UserParameter[1] = Parameter_UserParam2; |
SendOutData('k', MK3MAG_ADDRESS, 1, (unsigned char *) &WinkelOut,sizeof(WinkelOut)); |
} |
if(WinkelOut.CalcState > 4) WinkelOut.CalcState = 6; // wird dann in SPI auf Null gesetzt |
if(JustMK3MagConnected) Kompass_Timer = SetDelay(99); |
else Kompass_Timer = SetDelay(999); |
} |
#endif |
#ifdef REDUNDANT_FC_SLAVE |
if(UebertragungAbgeschlossen || MotorenEin) |
{ |
static unsigned char who, request; |
unsigned char SendRedundantMotor[MAX_MOTORS], i; |
if(!request) { who = (who+1) % RequiredMotors; request = 1;} // nur in jedem 2. Zykus abfragen, weil die Antwort zu lang ist |
else request = 0; |
for(i=0; i<RequiredMotors; i++) |
{ |
if(request) SendRedundantMotor[0] = who+1; |
else SendRedundantMotor[0] = 0; |
if(PC_MotortestActive) SendRedundantMotor[0] |= 0x80; |
SendRedundantMotor[i+1] = Motor[i].SetPoint; |
} |
SendOutData('!', FC_ADDRESS, 1, (unsigned char *) &SendRedundantMotor, RequiredMotors+1); |
} |
#endif |
#ifdef DEBUG // only include functions if DEBUG is defined |
if(SendDebugOutput && UebertragungAbgeschlossen) |
{ |
SendOutData('0', FC_ADDRESS, 1, (unsigned char *) &tDebug, sizeof(tDebug)); |
SendDebugOutput = 0; |
} |
#endif |
} |
/tags/V2.06e/uart.h |
---|
0,0 → 1,117 |
#ifndef _UART_H |
#define _UART_H |
#define printf_P(format, args...) _printf_P(&uart_putchar, format , ## args) |
#define printf(format, args...) _printf_P(&uart_putchar, PSTR(format) , ## args) |
void BearbeiteRxDaten(void); |
extern unsigned char DebugGetAnforderung; |
extern unsigned volatile char ReceiverUpdateModeActive; |
extern unsigned volatile char UebertragungAbgeschlossen; |
extern unsigned volatile char PC_DebugTimeout; |
extern unsigned volatile char NeueKoordinateEmpfangen; |
extern unsigned volatile char PC_MotortestActive; |
extern unsigned char MeineSlaveAdresse; |
extern unsigned char PcZugriff; |
extern unsigned char RemotePollDisplayLine; |
extern unsigned volatile char RxdBuffer[]; |
extern int Debug_Timer,Kompass_Timer; |
extern void UART_Init (void); |
extern void uart_putchar (char c); |
//extern void boot_program_page (uint32_t page, uint8_t *buf); |
extern void DatenUebertragung(void); |
extern void Uart1Init(void); |
extern void BearbeiteRxDaten(void); |
extern unsigned char MotorTest[16]; |
struct str_DebugOut |
{ |
unsigned char Status[2]; |
signed int Analog[32]; // Debugwerte |
}; |
extern struct str_DebugOut DebugOut; |
struct str_WinkelOut |
{ |
signed int Winkel[2]; |
unsigned char UserParameter[2]; |
unsigned char CalcState; |
unsigned char Orientation; |
}; |
extern struct str_WinkelOut WinkelOut; |
struct str_Data3D |
{ |
signed int Winkel[3]; // nick, roll, compass in 0,1° |
signed char Centroid[3]; |
signed char reserve[5]; |
}; |
extern struct str_Data3D Data3D; |
struct str_ExternControl |
{ |
unsigned char Digital[2]; |
unsigned char RemoteTasten; |
signed char Nick; |
signed char Roll; |
signed char Gier; |
unsigned char Gas; |
signed char Hight; |
unsigned char free; |
unsigned char Frame; |
unsigned char Config; |
}; |
extern struct str_ExternControl ExternControl; |
// FC hardware errors |
// bitmask for UART_VersionInfo_t.HardwareError[0] |
#define FC_ERROR0_GYRO_NICK 0x01 |
#define FC_ERROR0_GYRO_ROLL 0x02 |
#define FC_ERROR0_GYRO_YAW 0x04 |
#define FC_ERROR0_ACC_NICK 0x08 |
#define FC_ERROR0_ACC_ROLL 0x10 |
#define FC_ERROR0_ACC_TOP 0x20 |
#define FC_ERROR0_PRESSURE 0x40 |
#define FC_ERROR0_CAREFREE 0x80 |
// bitmask for UART_VersionInfo_t.HardwareError[1] |
#define FC_ERROR1_I2C 0x01 |
#define FC_ERROR1_BL_MISSING 0x02 |
#define FC_ERROR1_SPI_RX 0x04 |
#define FC_ERROR1_PPM 0x08 |
#define FC_ERROR1_MIXER 0x10 |
#define FC_ERROR1_RES1 0x20 |
#define FC_ERROR1_RES2 0x40 |
#define FC_ERROR1_RES3 0x80 |
// for FlightCtrl |
//VersionInfo.Flags |
#define FC_VERSION_FLAG_NC_PRESENT 0x01 |
// for NaviCtrl |
#define NC_VERSION_FLAG_MK3MAG_PRESENT 0x01 |
struct str_VersionInfo |
{ |
unsigned char SWMajor; |
unsigned char SWMinor; |
unsigned char ProtoMajor; |
unsigned char reserved1; |
unsigned char SWPatch; |
unsigned char HardwareError[2]; |
unsigned char HWMajor; |
unsigned char BL_Firmware; |
unsigned char Flags; |
}; |
extern struct str_VersionInfo VersionInfo; |
//#define USART0_BAUD 9600 |
//#define USART0_BAUD 14400 |
//#define USART0_BAUD 28800 |
//#define USART0_BAUD 38400 |
#define USART0_BAUD 57600 |
#endif //_UART_H |
/tags/V2.06e/user_receiver.c |
---|
0,0 → 1,23 |
//############################################################################ |
// Implement your own RC-decoding routines here |
//############################################################################ |
//############################################################################ |
// Initialize the UART here |
//############################################################################ |
void User_Receiver_Init(void) |
{ |
// SpektrumUartInit(); // or use an existing routine like this |
}; |
//############################################################################ |
// Is called by the uart RX interrupt |
// UDR contains the received byte |
//############################################################################ |
void User_RX_Parser(unsigned char udr) |
{ |
}; |
/tags/V2.06e/user_receiver.h |
---|
0,0 → 1,4 |
// for own implementations |
void User_Receiver_Init(void); |
void User_RX_Parser(unsigned char); |
/tags/V2.06e/vector.h |
---|
0,0 → 1,19 |
#ifndef _VECTOR_H |
#define _VECTOR_H |
typedef struct |
{ |
int32_t x; |
int32_t y; |
int32_t z; |
} __attribute__((packed)) vector32_t; |
typedef struct |
{ |
int16_t x; |
int16_t y; |
int16_t z; |
} __attribute__((packed)) vector16_t; |
#endif //_VECTOR_H |
/tags/V2.06e/version.txt |
---|
0,0 → 1,733 |
------- |
V0.53 27.04.2007 H.Buss |
- erste öffentliche Version |
V0.53b 29.04.2007 H.Buss |
- der FAKTOR_I war versehentlich auf Null, dann liegt der MikroKopter nicht so hart in der Luft |
V0.53c 29.04.2007 H.Buss |
- es gib ein Menü, in dem die Werte der Kanäle nach Nick, Roll, Gas,... sortiert sind. |
Die angezeigten Werte waren nicht die Werte der Funke |
V0.54 01.05.2007 H.Buss |
- die Paramtersätze können jetzt vor dem Start ausgewählt werden |
Dazu wird beim Kalibrieren der Messwerte (Gashebel oben links) der Nick-Rollhebel abgefragt: |
2 3 4 |
1 x 5 |
- - - |
Bedeutet: Nick-Rollhebel Links Mitte = Setting:1 Links Oben = Setting:2 usw. |
- der Faktor_I für den Hauptregler ist hinzugekommen. Im Heading-Hold-Modus sollte er vergössert werden, was Stabilität bringt |
V0.55 14.05.2007 H.Buss |
- es können nun Servos an J3,J4,J5 mit den Kanälen 5-7 gesteuert werden |
V0.56 14.05.2007 H.Buss |
- es gab Probleme mit Funken, die mehr als 8 Kanäle haben, wenn mehrere Kanäle dann auf Null waren |
- Funken, die nicht bis +-120 aussteuern können, sollten jetzt auch gehen |
V0.57 24.05.2007 H.Buss |
- Der Höhenregler kann nun auch mittels Schalter bedient werden |
- Bug im Gier-Algorithmus behoben; Schnelles Gieren fürhrte dazu, dass der MK zu weit gedreht hat |
- Kompass-Einfluss dämpfen bei Neigung |
- Man kann zwischen Kompass FIX (Richtung beim Kalibrieren) und Variabel (einstellbar per Gier) wählen |
- Der Motortest vom Kopter-Tool geht jetzt |
- Man kann den Parametersätzen einen Namen geben |
- Das Kamerasetting ist unter Setting 2 defaultmässig integriert |
V0.58 30.05.2007 H.Buss |
- Der Höhenregler-Algorithmus wird nun umgangen, wenn der Höhenreglerschalter aus ist |
V0.60 17.08.2007 H.Buss |
- "Schwindel-Bug" behoben |
- Die Poti-Werte werden jetzt auf Unterlauf (<0) überprüft |
- Poti4 zugefügt |
- Es werden jetzt 8 Kanäle ausgewertet |
- Kamera-Servo (an J7) |
- Die Settings müssen überschrieben werden |
V0.61 - V0.63 H.Buss 27.09.2007 |
- Poti 4 und Kanal 8 werden im Menü angezeigt |
- ein paar Kleinigkeiten bei den DefaultKonstanten2 bereinigt |
- Analog.c: Aktuell_ax korrigiert |
- auf 32 Debug-Kanäle erweitert |
- Loopings sind jetzt möglich und einzeln im KopterTool freischaltbar |
- leichte Anpassungen im Gier - Geschwindigkeit und Drift |
- die Hardwareversion V1.1 wird erkannt und das Programm stellt sich auf die geänderte Gyroverstärkung und die geänderten Portpins ein |
- die Software startet nach dem Einschalten schneller, weil der Luftdruckoffset schneller gefunden wird |
- die PPM-Ausgänge liegen wieder an den Pins an |
- Details an der Sensordatenverarbeitung -> es fliegt sich geringfügig anders |
- der MK ist bei wenig Gas nicht mehr so giftig -> soll das Landen vereinfachen |
- I2C-Bus läuft jetzt sicher nach einer Störung wieder an |
- Sticksignale werden präziser ausgewertet |
- Stick-Kanäle werden ans Kopter-Tool übertragen |
- Es muss die Version V1.47 des Kopter-Tool verwendet werden |
- Die Settings werden auf Default zurückgesetzt |
- am Piepen kann man die Fehlerart unterscheiden |
1. einzelnes Piepen beim Einschalten und Kalibrieren |
2. langsames Intervall mindestens 1 Sek -> Empfangsausfall |
3. schnelleres Intervall mindestens 1 Sek -> Akku |
4. sehr schnelles Intervall mindestens 1 Sek -> Kommunikation zu den Reglern gestört |
V0.64 H.Buss 30.09.2007 |
- beim Gieren wurden die Achsen nicht hart genug geregelt |
V0.65a H.Buss 15.10.2007 |
- Integral im Mischer wieder integriert |
- Feinabstimmung im ACC/Gyro Abgleich -> 1/32 & 100 |
- ACC/Gyro Abgleich auch bei HH |
V0.66a H.Buss 3.11.2007 |
- Messwertverarbeitung aus dem Analog-Interrupt entfernt |
- Analogmessung hängt jetzt am FC-Timing |
- Looping-Stick-Hysterese eingebaut |
- Looping-180°-Umschlag einstellbar |
- Achsenkopplung: Gierbewegung verkoppelt Nick und Roll |
- Lageregelung nach ACC-Sensor verbessert |
- zusätzlicher I-Anteil in der Lageregelung verbessert die Neutrallage |
- Gyrodriftkompensation überarbeitet |
- Bug in der Gier-Stick-Berechnung behoben |
- Gyro-Messung auf 1kHz beschleunigt |
V0.67a H.Buss 16.11.2007 |
- der Hauptregler-I-Anteil wirkt jetzt nur noch auf den Winkel (ausser im HH-Mode) |
- Gyro-Acc-Abgleich jetzt wieder in jedem Zyklus |
- Feinabstimmung |
- Beim HH-Modus gab es noch Bugs |
V0.67e H.Buss 29.11.2007 |
- Parameter: Dynamic Stability und Driftfaktor eingeführt |
- Die Namen der Analogwerte werden jetzt zum Koptertool übertragen |
- Kompatibilität zum Koptertool erhöht |
V0.67f H.Buss 04.12.2007 |
- Das Integral des Hauptreglers wird jetzt linear entladen und nicht mehr proportional |
- Schub für Gier wird jetzt auf den Gaswert begrenzt, dadurch steigt der MK nicht mehr beim Gieren. Gier ist allerdings nicht mehr so agressiv |
- Die ACC-Nullwerte können jetzt dauerhaft im EEPROM gespeichert werden (Stick:Vollgas und Gier rechts) |
V0.68a I.Busker 28.12.2007 |
- SPI.c & SPI.h ins Projekt aufgenommen |
SPI-Kommuikation kann in SPI.h aktiviert/deaktivert werden |
V0.68c H.Buss 05.01.2008 |
- Stickauswertung verbessert -> träger und präziser |
- Alle Settings angepasst |
V0.69e H.Buss 05.05.2008 |
- kleinere Bugs beseitigt |
- Schneller Sinkflug jetzt möglich |
- Min- und Maxgas in den Settings geändert |
- Lagewinkel wird jetzt in 0,1 Grad an Kompass und Navi gesendet |
- Kalibrierung für MK3Mag -> Nick unten beim Kalibrieren |
- Kompassroutine um den Ersatzkompass (Gyro unterstützt Kompasswert) erweitert |
V0.69h H.Buss 21.05.2008 |
- STICK_GAIN = 4 eingeführt. Das erhöht die Auflösung der Sollwerte. Stick_P und Stick_I müssen nun um Faktor 4 erhöht werden |
- SenderOkay auch an das Naviboard übertragen |
- Bessere Parameter bei Senderausfall |
V0.69j H.Buss 30.05.2008 |
- Höhere Präzision der Achsenkopplung |
V0.69k H.Buss 31.05.2008 |
- Bug in SPI.C behoben |
- in 0.69h war ein Bug, der zu ungewollten Loopings führen konnte |
V0.69L H.Buss 14.06.2008 |
- feinere Cam-Servo-Auflösung |
V0.70a H.Buss 01.07.2008 |
- Unterstützung der V1.3-Hardware mit automatischem Hardware-Gyro-Abgleich |
V0.70b H.Buss 14.07.2008 |
- flexible Einstellungsmöglichkeit von J16 und J17 (Transistorausgänge) |
- eigene Parameter für GPS-Naviboard |
- eigener Parameter für ExternalControl (war vorher UserParameter1 bzw. 8) |
- neue Parameter im EEPROM-Datensatz: J16Bitmask, J16Timing, ExternalControl, Navi... |
- MikroKopterFlags eingeführt, damit das Navi den Status des MKs kennt |
- KopterTool-Kompatibilität auf 8 erhöht |
V0.70c H.Buss 30.07.2008 |
- Parameter der Datenfusion leicht modifiziert |
- EEPROM-Parameter für Looping-Umschlag angepasst (von 100 auf 85) |
- MaxStick wird auf 100 begrenzt |
V0.70d H.Buss 02.08.2008 |
- Transistorausgänge: das oberste Bit der Blinkmaske (im KopterTool linkes Bit) gibt nun den Zustand des Ausgangs im Schalterbetrieb an |
0.71b: H.Buss 19.10.2008 |
Kommunikation zum Navi erweitert: |
- Beeptime jetzt 32Bit |
- Datenfusion und Driftkopensation wird durch NaviBoard unterstützt |
0.71c: H.Buss 20.10.2008 |
- LoopConfig heisst jetzt BitConfig |
- 3-Fach-Schalter für Höhensteuerung möglich -> kann man mit GPS-Schalter zusammenlegen |
- bei den Settings wurde Setting[0] mit abgespeichert, welches es nicht gab. |
- in Zukunft werden bei neuen EEPROM-Settings die Kanäle von Setting 1 übernommen |
- Variablen NaviWindCorrection, NaviSpeedCompensation, NaviOperatingRadius eingeführt |
0.71f: H.Buss 15.11.2008 |
- Ausschalten der Höhenregelung per Schalter um 0,3 sek verzögert |
- bei der seriellen Übertragung hat die FC jetzt als SlaveAdresse die 1 |
- VersionInfo.NaviKompatibel eingeführt |
- wenn manuell gegiert wird, wird der GyroKompass-Wert auf den Kompasswert gesetzt |
- Luftdruckwert wird an das Navi übertragen |
- Der Baro-Offset wird jetzt nachgeführt, um den Messbereich zu erweitern. Geht nur bei Höhenregler mit Schalter |
- Debugdaten können jetzt mit 'f' gepollt werden |
0.71g: Gregor 09.12.2008 |
- Kommunikation überarbeitet |
Infos hier: http://www.mikrokopter.de/ucwiki/en/SerialCommands |
0.71h: H.Buss 15.12.2008 |
- Freigegebene Version |
- NaviAngleLimitation als Parameter zum Navi implementiert |
- Antwort auf CMD: 't' entfernt |
0.72d: H.Buss 22.01.2009 |
- OCTO als Compilerschalter |
- Unterstützung der FC 2.0 (ME) |
- GYRO_D eingeführt |
- Achsenkopplung jetzt auch auf Nick/Roll-Bewegung |
0.72e: H.Buss 27.01.2009 |
- die 0.72d hatte kein Integral im Gier |
- Parameter eingeführt: |
EE_Parameter.NaviGpsPLimit |
EE_Parameter.NaviGpsILimit |
EE_Parameter.NaviGpsDLimit |
EE_Parameter.NaviPH_LoginTime |
EE_Parameter.AchsKopplung2 |
EE_Parameter.CouplingYawCorrection |
0.72f: H.Buss 28.01.2009 |
- Bug im Ersatzkompass entfernt |
0.72h: H.Buss 05.02.2009 |
- Algorithmen beschleunigt -> Floats durch Fixkomma ersetzt |
- Achsentkopplung weiter verbessert |
- Nick- und Roll im Octo-Mischer auf jeweils vier Motoren aufgeteilt |
0.72i: H.Buss 07.02.2009 |
- Abtastrate von 1kHz auf 2kHz erhöht |
0.72j: H.Buss 09.02.2009 |
- neue Implementierung der Servoausgänge |
0.72k: H.Buss 10.02.2009 |
- Abtastrate auf 5kHz erhöht |
0.72L: H.Buss 13.02.2009 |
- Signalfilterung überarbeitet |
- OCTO2 implementiert |
0.72M: H.Buss 13.02.2009 |
- Code Cleanup |
0.72o: H.Buss 24.02.2009 |
- Abtastrate auf 2kHz |
- HW-Version an Navi |
- neuer Datensatz 'c' -> Lagedaten für 3D-Grafik |
- Auswerteroutine für Spectrum-Satteliten implementiert |
- Kanalsettings werden beim Parameterreset nicht mehr gelöscht |
- die Driftkompensation wird jetzt feiner aufgelöst --> EE_Parameter.Driftkomp muss mal 8 genommen werden |
- die Integrale und ACC-Werte werden jetzt im Scope in ca. 0,1° angezeigt (wie beim NaviBrd) |
0.72p: H.Buss 01.03.2009 |
- Octo3 erstellt |
- Analogwerte umbenannt |
0.73a-d: H.Buss 05.04.2009 |
- MixerTabelle implementiert |
- I2C-Bus auf bis zu 12 Motoren erweitert |
- die Busfehler der BL-Regler werden im Menü angezeigt |
- Revision der MixerTabelle eingeführt |
- MixerTabelle wird bei Parameterreset neu initialisiert |
- Motortest auf [12] erweitert |
- Motorschalter nicht mehr 3-Stufig |
0.74a |
- Datenfusion im Flug auch, wenn ACC-Z < 512 |
- Wert für die Luftdruck-Messbereichserweiterung abgefangen |
0.74d |
- Die Driftkompensation ist jetzt dreistufig -> 0,5% pro sekunde zusätzlich eingeführts |
0.75a G.Stobrawa 22.5.2009 |
- Extern Control also received from NC via SPI |
0.75b H.Buss 27.05.2009 |
- Spektrum-Singale schalten den PPM-Eingang aus |
- max. 2 Sekunden nach dem Start auf die BL-Regler warten |
- Automatische Zellenerkennung, wenn Spannungswarnung < 5,0V |
- Bei automatischer Zellenerkennung piept es je nach Zellenzahl |
- EE_DATENREVISION auf 76 erhöht |
- Servo: |
- Roll-Servo für FC ME implementiert |
- Update-Cmd stoppt Servos |
- Servos werden erst nach dem ersten Kalibrieren aktiviert |
0.75c G.Stobrawa 25.7.2009 |
- Übertragung der Servo-Settings zur NC |
- RSSI wird an NC gesendet, derzeit wird der Wert nicht gesetzt |
- Bugfix Messbereichsumschaltung des Luftdrucksensors springt |
- Auflösung des Luftdrucks nun bis auf 1 cm (5mal feiner) zur genaueren Berechnung des D-Anteils |
- Unterstützung von Warnings-Bitmasks für die J16, J17-Outputs bei Unterspannung |
- Unterspannung für einzelne Zelle´n von 3.2V auf 3.3V angehoben (9.6V --> 9.9V für 3S) |
0.75d H.Buss 13.8.2009 |
- RC-Routine: Empfangsausfall soll sicherer erkannt werden |
- Zellenerkennung nun auch beim Speichern der Settings |
- Warnungs-Blinkmaske auch bei Empfangsausfall |
0.75e H.Buss 18.8.2009 |
- LED-Blinken kann an die Motoren gekoppelt werden |
- Feinabstimmung des Höhenreglers |
0.75f H.Buss 27.8.2009 |
- D-Anteil des Höhenreglers jetzt mit Quadratischer Komponente |
- Lagewinkel wirkt jetzt mit 1/Cos(x) mit in den Höhenregler |
- leichte Modifikation der RC-Empfangroutine |
0.75g H.Buss 31.08.2009 |
- die Akkuspannung geht jetzt antiproportional ins Gas ein |
0.75h H.Buss 3.09.2009 |
- im Höhenregler werden jetzt die Stellwerte begrenzt --> max +- 16% vom geschätzten Schwebegas |
0.75i H.Buss 7.09.2009 |
- GpsZ vom Navi zur FC für den Höhenregler |
- "hoovergas-Variation" als Parameter |
- Kompatibilität zu NC und PC erhöht |
0.75j H.Buss 17.09.2009 |
- Laufzeitzähler eingebaut |
0.75k H.Buss 22.09.2009 |
- zweite Variante (Gregor) der Höhenregelung implementiert |
- umschaltbare RC-Routine |
0.75L H.Buss 23.09.2009 |
- SollHoehe und Gas geht nun auch an die NC |
0.75M H.Buss 29.09.2009 |
- Spektrum-Timing wird nun überwacht |
- die FC kann nun stand-Alone als Kamera-Stabilizer eingesetzt werden, weil die Servos aktiviert werden, wenn I2C fehlt |
0.75N H.Buss 29.09.2009 |
- Hoover-Stickpunkt wird bei aktivem Höhenregler nicht nachgeführt |
- Hoover-Stickpunkt kann per Parameter fest eingestellt werden |
- Baro-Messbereichserweiterung auch bei aktiviertem Höhenregler |
- Gyro_Gier_P und Gyro_Gier_I eingeführt |
- I2C_fehler-Zähler jetzt in den Analogdaten |
0.75o H.Buss 01.10.2009 |
- der Höhenregler wird jetzt nur alle 10ms bearbeitet |
- Baro-Messbereichserweiterung auch bei Poti als Sollwert |
0.76d H.Buss 10.10.2009 |
- bei aktiver Messbereichserweiterung wird die aktuelle Höhe übernommen |
0.76e H.Buss 27.10.2009 |
- es werden beim Start einmal alle BL-Regler angesprochen, damit BL-Regler#8 auch einen Selbsttest macht |
- S3D-ACT-Summensignal als Compilerschalter |
0.76f H.Buss 05.11.2009 |
- untere Spannungsgrenze der Unterspannungswarnung (9,3V) entfernt |
0.76g H.Buss 10.11.2009 |
- Casting-Fehler in der Gas-Berechnung |
0.77a H.Buss 11.11.2009 |
- Erweiterung auf 12 Kanäle |
- Bei Koptertool-Kanalabfrage kein Empfangsausfall-Piepsen |
- serielle Kanalerweiterung eingebaut -> PPM_in auf 25 erweitert |
- Servos3-5 einstellbar |
- neues Kommando "f" -> schaltet auf anderen Parametersatz um |
0.77b H.Buss 09.12.2009 |
- JetiBox: Menü wird übertragen |
- neu: FCFlags |= FCFLAG_I2CERR; |
- LED-Warn-Blinken nun mit festem Timing und abschaltbar |
0.77c H.Buss 07.01.2010 |
- zwei weitere Spektrum-Varianten implementiert |
0.77d H.Buss 25.01.2010 |
- Strom-Messung eingebaut |
0.78a H.Buss 03.02.2010 |
- Bugfix: Settingsumschaltung im Flug |
0.78b H.Buss |
- veröffentlichte Version |
0.78c H.Buss + G.Stobrawa 22.2.2010 |
- Bewegungsbegrenzung an Servo 3 to 5 der FC 2.0 |
- Theoretischer Variablenüberlauf bei Vario-Höhenregler |
- Anzeige des "SPI RX communication error" wenn GPS Option nicht aktiv |
- LED-Schwellwerte fürs Blinken waren unterschiedlich |
0.78c H.Buss + G.Stobrawa 04.3.2010 |
- Code cosmetics |
0.78f H.Buss + I.Busker 23.3.2010 |
- Unterstützung für Jeti-Expander |
- Begrenzung des Vario-Höhenreglers auf ein 10m-Fenster um Überläufe zu verhindern |
- Einführung eines Vario-Zeichens (+/-/ ) auf der Jetibox |
- BL-Timeout beim Start erhöht |
0.80a-d H. Buss + G.Stobrawa 20.5.2010 - 22.7.2010 |
- Motoren Starten nicht ohne Kalibrierung |
- Unterstützung der BL2.0-Regler |
- statt 8 nun 10 Bit Auflösung der Lageregekung |
- Unterstützung der BL2.0-Regler Konfiguration via MK-Tool |
- Parametersätze werden per I2C an die BL-Regler durchgereicht |
- "Care-Free" implementiert |
- Freie Belegung der "Vorne"-Richtung |
- nur wenn Motoren laufen: Beepen, wenn Carefree ohne Navi oder ohne gültigen MK3Mag-Wert |
- nur wenn Motoren laufen: Beepen wenn NC plötzlich ausfällt |
- #define RECEIVER_SPEKTRUM_EXP eingeführt |
- #define SWITCH_LEARNS_CAREFREE eingeführt |
- Schwerpunktanzeige in den 3D-Daten |
- Checksummen gesicherte Datenablage im EEProm |
- Fehlerdiagnose implementiert (Wiki: ErrorCodes) |
- ErrorCode aufs Jeti-Display |
- JetiMenü: bis acht Temperaturen der BL-Regler |
- GPSInfo.Speed im Jeti-Display |
- Compass-Richtung nun im Jeti-menü |
- diverse Änderungen im Höhenregler |
- P wirkt schwächer |
- D wirkt stärker |
- Anpassung der Höhenregelung auf Level des Hoovergases |
- AccZ schneller nachführen |
Parameter modifiziert: |
- EEPROM-Kompatibilität auf 84 -> Parameter werden resettet |
- EE_Parameter.Hoehe_ACC_Wirkung = 0; // war 30 |
- EE_Parameter.Hoehe_HoverBand = 8; // war 5 |
- Notgas = 45 |
- NotgasZeit = 90 |
- Beginnersetting: EE_Parameter.DynamicStability = 70; |
- Neu: GyroStability = 6 |
- GPS-Login-Time auf 2 reduziert |
0.80e H.Buss 02.08.2010 |
- MK3Mag ohne NC ging nicht |
0.80f H.Buss 04.08.2010 |
- Beim Höhenregler "Deckel" wird das Gas wieder wie in der alten Version behandelt und der D-Anteil auf das alte Verhalten (um Faktor 8) reduziert |
0.80g H.Buss 11.08.2010 |
- erweitetern Messbereich für Luftdruck bei der FC2.1 aktiviert |
0.80h H.Buss 30.08.2010 |
- bei I2C-Fehlern wurden die Counter zurück gesetzt und für einige ms die Interrupts angehalten - das ist jetzt behoben |
- Nur I2C-Daten senden, wenn das alte Paket komplett raus ist |
0.82a H.Buss 08.11.2010 |
- MotorSafetySwitch - Verriegelt das Ein/Ausschalten |
- ServoManualControlSpeed - Verlangsamt das Cam-Servo |
- CamOrientation - für verdrehte Kamera-Servos |
- Position der Status-Bits verändert |
- "Zucken" der Servos bei kurzen Empfangsausfällen behoben |
- jeti update command 'j' added |
- Poti-Auswertung nach ParameterZuordnung() verschoben -> FC-Code schneller |
- Waypont-Events z.B. zum Triggern der Kamera |
- Gyro-Sytbility: Werte bis 16 möglich |
0.82b H.Buss 08.12.2010 |
- Unterstützung von 3,3V-Referenzspannung (nur ATMEGA128) |
0.84a H.Buss 21.03.2011 (Release: 30.03.2011) |
- nur starten, wenn NC_ErrorCode = 0 |
- Beeptime von NC auch beim Kalibrieren durchlassen |
- Varible "JetiBeep" eingeführt |
- Kompass-Winkelvorgabe von NaviControl -> POI |
- Piepen beim Umschalten von CareFree |
- Compass-Routinen überarbeitet |
- Dafaultvalues Servo-Min/MAx an MKDS18 angepasst |
- Defaultreceiver ist RECEIVER_JETI |
- GPS-Operation-Radius per default auf 245m bzw. 100% |
- Höhenvorgabe im Vario-Mode durch Waypoints |
- bei laufenden Motoren keine neuen Settings annehmen |
- immer einmal Carefree Beepen nach dem Kalibrieren |
- Kanaloffset für Potis von 110 auf 127 erhöht, damit es gleich ist mit allen anderen Kanälen |
- POI-Richtung (Soll-Himmelsrichtung) bezieht sich auf den Kamera-Winkel |
0.86a H.Buss 13.09.2011 |
- Variable "JetiBeep" wird gelöscht, wenn an den Empfänger gesendet wurde |
- wenn GPS deaktiviert ist, keinen Fehler bringen, wenn GPS fehlt. Auch dann nicht piepsen |
- GPS-Sollwertverschiebung |
- Empfangs-Piepen unterdrücken -> einstellbar |
- MotorSmooth einstellbar |
- Höhenregler: keine 'harte' IstWert-Übernahme bei Bewegen des Sticks in die Hoover-Position |
- Coming Home mit Höhenvorgabe |
- Coming Home als Failsafe |
- Einführung des GPS-Characters (- / W H D P) |
- Klartext bei den Jeti-Fehlermeldungen |
- Jeti-Beep "3*kurz" bei NC-Errors |
- Jeti-LCD-Aufruf nur noch alle 300ms, weil die Werte zu unruhig waren |
- Mixer-Settings werden nicht gelöscht, wenn sich die Parameter-Revision ändert |
- GPS-Angle limit von 100 auf 140 |
- GPS-I-Limit von 75 auf 85 |
- GAS-Offset von 120 auf 127 erhöht, damit es für alle Kanäle gleich ist |
- EE_Parameter.Hoehe_StickNeutralPoint auf Werte zwischen 80 und 180 begrenzt |
- PPM_Neutral eingeführt, um den Offset bei HoTT auszugleichen; |
- LED_Update() nun nur noch alle 20ms, weil die schnellste Ausgabe (bei Potivorgabe) ohnehin nur 40ms sind |
- Jeti & HoTT: Nur beim Fehler auch JetiBeep, wenn die Motoren laufen -> sonst nervt das bei der Fehlerbehebung (Compass-Kalibrieren usw.) |
- Error-Text auch im virtuellen Display des Koptertools |
- virtuelles LCD-Menü: |
- "ExternControl" aus Platzgründen aus dem virtuellen LCD-Menü entfernt. |
- keine BL-Temperaturen und I2C-Fehler anzeigen, wenn die BL-Regler nicht verwendet werden |
- nach dem Gieren nicht den Ersatzkompass auf den Kompasswert stellen, die Umschaltung war zu hart |
- ACC Correction eingeführt |
- I2C Fehler kamen nicht bei der NC an, weil die zu kurz waren - jetzt meldet die NC die Fehler mind. 8 Sekunden |
- Fehlermeldungen stehen jetzt mind. so lange an, bis sie an die Nc ge sendet wurden |
- neue Fehlermeldungen: |
"No NC communicat", // 9 |
"GPS Fix lost ", // 21 |
"Magnet Error ", // 22 |
"Motor restart ", // 23 |
"BL Limitation " // 24 |
- LED: Schaltfläche "nur bei Motor start" bei beiden getrennt |
- Ausbau der HoTT-Telemetrie |
- Variable "KompassRichtung" entfernt |
- ErsatzKompassInGrad sinvoll genutzt |
- HoTT-Update per Uart-Durchschleifen |
- AltitudeSetpointTrimming eingeführt |
- Vario-Anzeige für HoTT |
- Verhindern eines Überlaufs im Vario |
- echter Varioton auch ohne Vario-Höhenregler |
- Flugminuten laufen jetzt bei (FC_StatusFlags & FC_STATUS_FLY) los, weil sonst die Zeit zur NC verschieden war |
- KompassFusion wird jetzt getrennt von der NC berechnet |
- Sport-Setting entfernt und ein "Easy-Setting" eingeführt (leicht reduzierte Sticks); "Beginner" ist jetzt "Normal" |
- MagnetError kann man in der Startphase ignorieren |
- BL-Temperaturen, I2C-Fehler und BL-MaxPWM zum Loggen an NC |
- Einzelströme nun auch bei HoTT angezeigt |
0.86b H.Buss 20.09.2011 |
- Höhenbegrenzung bewirkt nur, dass im Vario-Mode der Sollwert nicht weiter nach oben geschoben werden kann |
- grüne LED ging aus - gefixt |
- K1-K8 wurden im LCD mit 0-7 bezeichnet |
0.86c H.Buss 22.09.2011 |
- Neue Anzeige: Magnetfeld und Inklination bei HoTT und Jeti |
- Neuer SPI-Block 'SPI_MISC' |
- Kompass-Fusions-Dämpfung bei Neigung leicht verringert |
- '.' im Vario-Höhenregler |
0.86d H.Buss 26.09.2011 |
- Analog.c: Vario Überlauf anders verhinden |
- Poti1-6 auch im HoTT-Display |
0.88 H.Buss 12.12.2011 - 26.03.2012 |
- Failsafe-Kanal |
- Failsafe: 5 Sekunden warten & Höhe ändern (macht die NC) |
- Option: Failsafe-Sinkflug xx% Schwebegas |
- Stopp der Motoren wenn bei Failsafe ein Motor blockiert |
- von 30 auf 60 Sekunden Failsafe-Zeit verlängert |
- Höhenwert auf cm kalibriert (zeigte ca. 10% zu viel an) |
- Neue Error-Codes: "No SD-Card", "Flying range!" und "Error SD-Logging" |
- Wenn die Motoren aus sind, den Luftduckwert langsam nachführen |
- das sbus-protokoll implementiert (nur FC2.1) |
- Schaltkanal auf Servo-Ausgang |
- Filter auf den Ausgängen der Servos |
- Option: Failsafe-Sinkflug xx% Schwebegas |
- "Max Altitude" als Parameter auf der SD-Karte im Navi -> Beeinflusst "Parameter_MaximumAltitude" (das niedrigste gilt) und es gibt eine Fehlermeldung "ERR:Max Altitude" |
- SPI-Protokoll: BL.Status eingefügt und Parameter.GlobalConfig & Parameter.ExtraConfig verschoben |
- Senden der Out1 & Out2-Zustände an die NC, damit es in der OSD-Darstellung angezeigt werden kann |
- Kompassrichtung neu merken, wenn CF geschaltet wird |
- "I" aus dem Hott-Menü entfernt und durch ":" ersetzt, weil das nur auf der mx-20 gut aussah |
- Höhenregler-Settings: GPS-Z von 64 auf 20 reduziert |
0.88M H.Buss 15.05.2012 |
- HoTT V4 |
- Kamera-Servo beim Kalibrieren weiter laufen lassen. |
- Error 30: no GPS fix bei Start |
- echter MotorSchalter |
0.88n H.Buss 06.07.2012 |
- Bugfix: Der letzte angesteuerte Servo-Puls war zu kurz |
0.90 H.Buss 04.03.2013 |
- Anzeige WP x/Y in der HoTT-Telemetrie |
- Schalter und WP-Event gleichzeitig |
- Photo-Auslösung als Entfernungsintervalle |
- Jeti + |
- Kamera-Neitung als Integral |
- RC-Lost am Startpunkt macht kein Failsafe, wenn GAS auf Null für 1,5sek war |
- Auswahl:Speak-All nun in der KopterTool-Config |
0.90e H.Buss 04.03.2013 |
- Parameter_ServoRollComp jetzt auf Poti /Kompatibilität auf 93 erhöht) |
0.90f (26.04.2013) |
- disable Yawing when Gas-Stick is to Zero |
- calibration must be within 20° Tilt angle |
- Hold I-Parts of the attitude control to zero when the MK is still on the ground |
- ACC-Altitude sensor data fusion implemented to the altitude controller (HW-Update from FC2.1 to 2.2 needed) |
- MK must be within 20° tilt angle when calibrating sensors |
- Parameter Reset, if the HW-Version changes (FC2.1 to 2.2) |
0.90g (29.04.2013) |
- No ACC-Z error if the MK is tilted after switching on |
- ATMEGA644 (until FC2.0): Sensitive RC-Signal validation removed -> that was only nessecary for old 35MHz receivers |
0.90h (14.05.2013) |
- Auto Start and landing for Waypoints |
- back to old eeprom-compatiblity to remain compatible to other Tools |
- HoTT-Bugfix: no speech while vario tone |
- Bugfix: Wrong error speech in JetiEX ("Error calibration") |
0.90j (27.05.2013) |
- Changes for better EEPROM-Safety |
- variable ActiveParamSet instead of the direct EEPROM-Reading (faster) |
- Checking the ACC-Z value in flight and report ACC-Z if out of range |
- disable Altitude hold in case of ACC-Z error |
2.00a (after public Beta test 0.91) |
- show SW-Version in Hot Display |
- GPS-Parameter changed (P = 90->100; I = 90->90; D = 90->120; A = 40) |
- Move NICK/Roll Sticks for switching on / off |
- Move the Stick > 100 instead > 75 for switch on / off |
- Failsafe active if ACC-Upgarde |
- AltitudeMode, GPS_Mode & Carefree_Mode are now direct channels instead of Poti-Values (NaviGpsModeChannel,CareFreeChannel,HoeheChannel) |
- NC-SPI communication from 25Hz to 41Hz |
- MotorTemperature and GPS-Mode-Switch more often to NC |
- Auto-Start/Landing |
- JetiEX: Name set to 'MK' |
- if(CareFree) Parameter_AchsKopplung1 += 30; removed |
- StickNeutral setting per default 127 |
- UART-Buffer increased from 175 to 220 Bytes |
- show name of active parameter set in the HoTT/Jeti display |
- fixed in 0.91L: if "ServoRelative" is used, it coud happen that the servo moves a wide range in the first second after the first calibration |
- Servo3-5 Limit to 24-255 |
- no. of channels increased from 12 to 16 |
// 0 -> frei bzw. ACT rssi (or zero if unsigned) |
// 1 - 16 -> 1-16 |
// 17 - 28 -> 12 Serial channels |
// 29 -> WP-Event kanal |
// 30 Fix -> -127 |
// 31 Fix -> 0 |
// 32 Fix -> 128 |
2.00b |
- default Camera-Position after calibration changed if Inverted |
- some changes in ACC-Altitude hold to reduce climbing in fast foreward fly |
- UserParameter1 > 100 disables camera nick control (for BL-Gimbals with self-alignments) |
- Beep at motor off (1sek) |
2.00d |
- Do not start if MK is moving |
- Full Range of altitude measure expansion (3000m flight instead of 950m) |
- compensation of the atmospheric altitude error |
- Measure the exact influence of the barometric range extender |
- Reduce Nick/Roll if Gas is Zero -> avoids MK to turn over during switch-off sequence |
- Tell NC to wait at the Waypoint until Out1 Pattern is over |
- virtual menu: single BL-Currents (FC2.1) |
- per default active: NO_GPSFIX_NO_START and CFG_NO_RCOFF_BEEPING |
- Servo-Nick-Refres reduced from 4 to 3 in default setting -> makes the camera servos faster |
- No undervoltage Beeping if the FC is only supplied by MKUSB (the Voltage measurement is zero) |
- Reset I2C-Error counter when calibrating the Sensors |
- HOTT & Jeti bugfix: The temperatures were sometimes wrong |
- HoTT: |
- GPS coordiante now in Degree + Minutes.Decimalminutes (like in original Graupner-Receivers) |
- added the MK Status in Transmitter Logfile -> General->Fuel |
- added the MK Speach in Transmitter Logfile -> General->Alt3Sek |
2.02a |
- code too big for MEGA644 -> only ATMEGA1284 supported |
- Jeti:GPS-Koordinate |
- Don't accept Reset-Command if Motor running |
- 'Idle' Bit in Output-Mask |
- Option: DisableServoNick |
- Bugfix Maximum Altitude -> New: SpeakHoTT Errormessage = "MaximumAltitude" and VarioCharacter goes to '=' |
- New Error code 32 "ERR:BL Selftest" |
- prepared for current measurements up to 75A per ESC |
- reduced speed of capacity-calculation() from 10ms to 50ms - that should be fast enough |
- Timing correction for NC-Data (41Hz) |
- Autolanding if undervoltage |
- Compass offset angle |
- 0.2V hysteresis in undervoltage warning |
- Fixed: Bug in LED-Output |
- Autolanding per default at 3,1V |
2.02b |
- Bugfix: Data reading for Dodecas (12 motors) |
2.04a (12.03.2014 after public betatest 2.03) |
- No support for FC 1.x |
- Bugfix: set ChannelYaw to zero in case of RC lost |
- Bugfix: Max 6 cells in lipo-detection instead of 7 |
- Bugfix: Compass-Calibration: At the second comdass calibration, the Calibration started in step 2 and not in step 1 |
- increase the allowed band for Auto-Middele-Point of the AltitudeStick to 70-175 |
- Dodeca: reduced I2C Packet lenght to 8 |
- Auto-ComingHome at Undervoltage |
- Voltage measurement was 3% too high |
- allowed band for ACC-Z increased to: 652 - 717 |
- send 'K' command only if JustMK3MagConnected |
- Redundant operation supported |
- Loading Waypoints from SD-Card: |
- menu by HoTT and Jeti added |
- Show the name of the WP-List |
- do not load points if no stafix |
- Version for FC 2.0 with ATMEGA644 |
Not Supported in FC 2.0: |
- ACC-Upgrade for better ACC-Altitude control |
- Hott |
- Jeti-EX |
- Auto-Start & Landing |
- WP-List Name |
2.04b |
- Bugfix: Poti Values were wrong after calibration |
- Redundant Slave: LED-Binking: Green: UART Data & Red:I2C error |
- CompassCorrected (True-Compass) in HoTT- and Jeti-Display |
- "True Compass" in virtual menu |
- Jeti: Indicator "R" for redundancy |
2.04c |
- S.Bus extended to 16 Channels |
2.06a (09.04.2013 after public beta 2.05) |
- Load/Store Single Point |
- Photo-Releases on Altitudes |
- Voltage warning set to 3,2V, because the Voltage measurement was lower than before |
- new Parameter: SinglePoint Speed |
- Counter for Motor-Restarts for each single motor |
- Servo-Signals can be configured if mapped to output |
- Speak "Error_Motor" as soon as one Motor reports a restart |
- EE_Parameter.NaviDescendRange now as Parameter in EEPROM |
- EE_Parameter.NaviMaxFlyingRange now as Parameter in EEPROM |
- Maximum Altitude is also used in the NC instead of "ABSOLUTE_FLYING_ALTITUDE" from SD-Card |
2.06b (05.05.2014) |
- Change for redundant slave: Now the Status of all 8 BLs can be read |
2.06c (10.05.2014) |
- send EE_Parameter.CamOrientation to NC |
- Bugfix: if the CamOrientation was not zero, the direction in load/store Singelpoints were not correct |
2.06d (16.06.2014) |
- Starting with activated Altitudecontrol: Keep setpoint -2m until Gas-Stick rises up |
- Bugfix: Redundant slave: wait at start until BLc are configured |
2.06e (24.06.2014) |
- Bugfix: BL-Config of motors 9-12 was deactivated |
- reading the SW-Version of the BLs |
- Bugfix: Motor 1 sometimes reported "software not compatible" in BL-Settings |
- Transmit all version numbers to KopterTool |
/tags/V2.06e |
---|
Property changes: |
Added: tsvn:logminsize |
+8 |
\ No newline at end of property |