From 9c1749685ca1f5fafecdadd8db6510485ed5ad11 Mon Sep 17 00:00:00 2001 From: Onwrikbaar Date: Tue, 1 Oct 2024 20:47:25 +0200 Subject: [PATCH] Add /n command to select next routine. --- Design.md | 7 + firmware/build/neodk_g071.hex | 2594 ++++++++++++++++--------------- firmware/inc/app_event.h | 2 +- firmware/inc/datalink.h | 3 +- firmware/inc/pattern_iter.h | 11 +- firmware/maolib/inc/net_frame.h | 9 +- firmware/maolib/libmao.a | Bin 20018 -> 20622 bytes firmware/src/controller.c | 21 +- firmware/src/datalink.c | 66 +- firmware/src/debug_cli.c | 11 +- firmware/src/neodk_main.c | 3 + firmware/src/pattern_iter.c | 16 +- firmware/src/sequencer.c | 89 +- 13 files changed, 1490 insertions(+), 1342 deletions(-) diff --git a/Design.md b/Design.md index 9fb3ba0..a7943f7 100644 --- a/Design.md +++ b/Design.md @@ -76,3 +76,10 @@ The device's on-board control program (aka firmware) consists of a collection of Conceptually, the firmware consists of two layers: 1. The hardware-dependent part, called the Board Support Package (BSP), which implements the _mechanisms_. This is the only module that needs to be changed when porting the application to a different processor. 2. The hardware-independent application logic, implementing the _policies_. + +### About the code +- All C modules, with the exception of the BSP, are less than 300 lines long. +- Functions are short, or have low cyclomatic complexity. +- There are no global variables, preventing unwanted coupling between modules and violation of invariants. +- Most 'plumbing' is done through dependency injection. +- Object types are opaque where possible. diff --git a/firmware/build/neodk_g071.hex b/firmware/build/neodk_g071.hex index 760a3c2..39711e0 100644 --- a/firmware/build/neodk_g071.hex +++ b/firmware/build/neodk_g071.hex @@ -1,21 +1,21 @@ :020000040800F2 -:1000000000900020A1230008F123000889150008B2 +:1000000000900020AD240008FD240008951600088B :1000100000000000000000000000000000000000E0 -:10002000000000000000000000000000F1230008B4 -:100030000000000000000000F1230008E5150008A2 -:10004000F1230008F1230008F1230008F123000840 -:10005000F5150008F1230008F1230008991800089D -:10006000F1230008A1190008F1230008F12300087A -:100070000519000811160008811600083917000834 -:10008000F1230008E9180008F1230008F123000813 -:10009000F1230008F1230008F1230008F1230008F0 -:1000A000F1230008F1230008F1230008F1230008E0 -:0C00B0000D1A0008F1230008F1230008DD +:10002000000000000000000000000000FD240008A7 +:100030000000000000000000FD240008F116000888 +:10004000FD240008FD240008FD240008FD2400080C +:1000500001170008FD240008FD240008A519000868 +:10006000FD240008AD1A0008FD240008FD24000846 +:10007000111A00081D1700088D1700084518000800 +:10008000FD240008F5190008FD240008FD240008DF +:10009000FD240008FD240008FD240008FD240008BC +:1000A000FD240008FD240008FD240008FD240008AC +:0C00B000191B0008FD240008FD240008B6 :1000BC0010B5064C2378002B07D1054B002B02D032 :1000CC00044800E000BF0123237010BD7000002025 -:1000DC00000000007C430008044B10B5002B03D03B +:1000DC000000000074450008044B10B5002B03D041 :1000EC000349044800E000BF10BDC04600000000FA -:1000FC00740000207C430008F0B50124C023844028 +:1000FC007400002074450008F0B50124C02384402E :10010C000B4D5B00EC500700830803203840FF27A1 :10011C00AC46C026C0008740890181409B006344E7 :10012C00B6009A59BA430A439A512C60F0BDC046A6 @@ -34,1269 +34,1315 @@ :1001FC0052435243456A1601B61AB5434E697243CF :10020C002A4342624D68B1E710B511240200084838 :10021C000B00016AA14301628020064980008862BC -:10022C00DA38FF3888610449044803F09FF8FEE788 -:10023C00002C014000040050B4460008604900083E -:10024C00FA2170B5124C05008900206801F016FEE9 +:10022C00DA38FF3888610449044803F073F9FEE7B3 +:10023C00002C0140000400500C4900089C4B0008A5 +:10024C00FA2170B5124C05008900206801F09CFE63 :10025C00802301385B04984201D3012070BDC0217A :10026C000C4A090650600C48036A1B021B0A0B431C :10027C0003620721002393601160032DEDD8026AFD :10028C00A9071202120A0A43026218006560E5E728 -:10029C000000002010E000E000ED00E010B50A00C6 -:1002AC0002490348103103F061F810BDB446000850 -:1002BC006C49000810B50A0002490348203103F0CC -:1002CC0055F810BDB44600086C490008002210B562 -:1002DC00037844781C4205D1013292B202308A4232 -:1002EC00F6D110BD02490348303103F03FF8F8E76E -:1002FC00B4460008744900084B1E9941012310B5FF -:10030C0049429943002200230E3103F08BFA10BDB1 -:10031C0070B5060014001D0082B0E0360092019307 -:10032C0032687368A41A9D41002D04D1074B9C427E -:10033C0001D802B070BD08236A46132103F072FA8B -:10034C00009B019C33607460F3E7C046BFE1E4009E -:10035C00F0B5D6464F4646460300C0B5A533FF332D -:10036C00DD8902000020002D04D1E0BCBA46B14664 -:10037C00A846F0BD987ADE889979002800D086E0EE -:10038C001C7A587A013C241A0120E4B29872490074 -:10039C00D220400012581F7B5018565CDA7A4578F0 -:1003AC009146C82A00D983E01100794802F0DEFF9B -:1003BC0001235B424B449846042F00D8A1E04B46E6 -:1003CC00002B05D1734B744A1800744902F0DEFF00 -:1003DC00002C00D18AE07B01DB1B9801C01AFA23A8 -:1003EC00C000C01980019B04984279D36C4800224C -:1003FC0006216C4B013CD8621C635A621A698A4311 -:10040C001A61354200D0A1E00523334200D183E0CC -:10041C0042460221634B35435A63DA680A43DA6079 -:10042C005A6901390A435A614022ED4301205E4B5F -:10043C009A61EBB2054200D0A1E05C4A02219062C5 -:10044C000422082019401A400340002900D092E0F1 -:10045C00022056498862002A74D10421534A9162C1 -:10046C00002B55D02022514B9A6100235221504A27 -:10047C004C4C53526363A36390693539002203F0EB -:10048C00D1F9012223680120134323606DE7013168 -:10049C009F88C8B2B84232D041005C7A187A0134D5 -:1004AC00E4B201385C72844257D0002098726FE736 -:1004BC00C821374802F05AFFC7239846042F87D823 -:1004CC00344B3C4A18003C499A4602F05FFF002C22 -:1004DC000ED07B01DB1B9801C01AC000C019800133 -:1004EC00FA21890001F0CAFC013880E7294B9A46B1 -:1004FC00D2215046314A890002F048FF6BE70021B7 -:10050C00CBE7244B2B4A18002B4902F03FFF56E750 -:10051C002022264B9A62A8E742460421214B354300 -:10052C009A63DA680A43DA605A6903390A435A61F2 -:10053C00002D1ED140221C4B9A621C4B3E3A9961F5 -:10054C009A6108230421194A916189E762211C4AA6 -:10055C001048FF3102F01AFF56E700200136B6B200 -:10056C005872B74201D0DE809FE7013DD880DD8113 -:10057C009BE7ADB258E702200C4988616BE7082471 -:10058C0002213C3A19401A402340084CA0615CE718 -:10059C008C490008B8490008CC4900084703000002 -:1005AC00FEFF0000002C0140000800500004005029 -:1005BC008C000020A449000846030000E84900080C -:1005CC00004A0008032310B5104C114A23616361E3 -:1005DC00104BA261E36180239B0123620023A36281 -:1005EC006362E36222660C4A0C495832626610223E -:1005FC00E01DA2662367E366636703F00BFB200034 -:10060C00074903F007FB2023A37110BD2C21002008 -:10061C001C4A00082C0100208C000020284A0008ED -:10062C002C4A0008F8B54746CE4680B58368C568A5 -:10063C0099465B1B9846436804000E001700581936 -:10064C00904507D9ED1903F0DFF9E560C0BCB94658 -:10065C00B046F8BD424603F0D7F94B463100ED19D0 -:10066C00ED1A2A006068414403F0CEF9E560EDE72D -:10067C00F0B557464E464546DE46E0B5354B83B0A1 -:10068C009A461B78060015000191002B56D0770076 -:10069C00BB19DB0053441A6F9046DA6E91469045B5 -:1006AC0025D8130042462C009B1A9D4209D8002CD9 -:1006BC0009D1200003B0F0BCBB46B246A946A04607 -:1006CC00F0BD1C1EF5D0A146BB19DB005344596E7E -:1006DC00220041440198A04403F096F94C46002CAA -:1006EC00E7D04346BF19FF0057443B67E1E742465A -:1006FC009B6E2C009B1A9D4227D8BB19DB005344E0 -:10070C009B46596E22004144019803F07DF95B46EB -:10071C009B6EA0442D1B434519D04B4642469B1A59 -:10072C0099464D450DD8002DD9D0019BA1469C462C -:10073C00A44463462C000193A944C5E7FFF742FF8C -:10074C00A5E74D46002DCAD0EFE71C00D5E70023E6 -:10075C009846E6E72C210020F8B557464E46DE4673 -:10076C0045468946411CE0B517004A005218030063 -:10077C00D2009246344A5E0093461000F618F600FA -:10078C005E44F36A50449846012B0CD0022B27D0C0 -:10079C00002B17D0002398464046F0BCBB46B2460F -:1007AC00A946A046F8BDB36A726A934247D9013B89 -:1007BC009B1AB8469F4200D9984642464946FFF7D5 -:1007CC0031FFE9E7B36A726A934233D9013B9B1A52 -:1007DC009F42E1D83A004946FFF724FFB846DBE7D1 -:1007EC000023746A98461DE0013B356A1B1BBB4213 -:1007FC0000D93B002D1B9D4200D91D005B46534484 -:10080C0058682A004946001903F0FEF8336A641947 -:10081C00E31A5A1E93415B421C40A844A9447F1B17 -:10082C007462B9D0B36AA342DED8356A5B19013B56 -:10083C001B1BDCE7316A5B18013B9B1AC8E7316A6A -:10084C005B18013B9B1AB4E72C210020F0B5C6467F -:10085C0000B5856843686A1C04009A4207D803688F -:10086C0059551500C36882600133C36043689D42CB -:10087C0002D080BCB846F0BD2368276998460E4B61 -:10088C001B78002B15D0EFF31086012181F3108813 -:10089C002A0041463800FFF75FFF86F31088A368F3 -:1008AC00834203D001235B42E360E2E70023A360B1 -:1008BC00DFE7FFF787FEE6E72C210020F0B54E4678 -:1008CC0045465746DE46E0B583B09A460C9B8046BB -:1008DC000E0015009946914200D27DE008000127D8 -:1008EC00290001F0CBFA01378542F9D9574500D2DE -:1008FC00574601230D9A1A4001920D9A13424ED17C -:10090C004B46002B4BD0130020249B075ED44F4545 -:10091C0045D201235B429C4621004046E144FFF74F -:10092C0095FF4346DB68002B32DB4B46002BEED1A8 -:10093C0053460124012B07D901235B429C46E24418 -:10094C0053466C43012BF7D82100300001F096FA86 -:10095C008542F5D9214B9B4650239A4606E0290047 -:10096C00200001F08BFAAC420FD3040030002100C0 -:10097C0001F00AFB534658440E00C15C4046FFF799 -:10098C0065FF4346DB68002BE9DA019B002B19D18C -:10099C0003B0F0BCBB46B246A946A046F0BD4346E8 -:1009AC00DB68002BC4DAF3E74F45F1D201235B423D -:1009BC009C4620214046E144FFF748FF4346DB6854 -:1009CC00002BE5DB4B46002BEED1E1E753465C42B6 -:1009DC005C41240120349AE7012787E7B4460008DC -:1009EC0010B5080002F0D4FF03490200603103483F -:1009FC0002F0BCFC002010BDB4460008344A0008CC -:100A0C0010B5080002F0C4FF034902006C31034822 -:100A1C0002F0ACFC002010BDB4460008584A000897 -:100A2C0010B508000C0002F0B3FF01280CD002280E -:100A3C0010D0200002F0ACFF0949020078310948BF -:100A4C0002F094FC002010BD05490748783102F0F3 -:100A5C008DFCF7E702490548783102F087FCF1E795 -:100A6C00B4460008344A00087C4A0008884A00084A -:100A7C00DC2310B50400C05802F0D0FE002801D1D0 -:100A8C00002010BDD823E05802F0C8FE0028F7D093 -:100A9C00200002F0C3FEF4E770B50D00D026040070 -:100AAC0014492A0004311448760002F05FFC290036 -:100ABC002000A3599847051E1BD0A65902F04AFFE7 -:100ACC0001002000B047002804D049210B4A0C48F3 -:100ADC0002F05CFCD0235B00E55002F02DFF01001E -:100AEC002000A847002804D04C21044A044802F0F6 -:100AFC004DFC70BD344700086C490008944A00084E -:100B0C00A04A000870B5D026760083590400984797 -:100B1C00051E1BD0A65902F01DFF01002000B04796 -:100B2C00002804D0DF210A4A0A4802F02FFCD02307 -:100B3C005B00E55002F000FF01002000A8470028F0 -:100B4C0004D0E221024A034802F020FC70BDC046EA -:100B5C00944A0008B44A0008F8B50600D0360500DF -:100B6C000122300002F0DCFC012804D0A921244A27 -:100B7C00244802F00BFC72B6BFF34F8FBFF36F8F9C -:100B8C004827214CE35DFF2B2CD048220133300049 -:100B9C00A35402F03FFC00280FD04825635D002BC6 -:100BAC0018D04822013BDBB2A354002B04D1BFF375 -:100BBC004F8FBFF36F8F62B6F8BDE523EA56012A5B -:100BCC0017D0482511491248143102F0CFFB635D50 -:100BDC00002BE6D1A6210F4A0F48890002F0D6FB64 -:100BEC00635DDEE70D4A0E490B4802F0CFFBE35D77 -:100BFC00CBE780210B4A13688B431360CDE7C046CB -:100C0C00C44A0008D04A00088C0000203447000871 -:100C1C00084B0008244B0008B8490008E04A0008BB -:100C2C009102000000440040F0B50400E425E020EF -:100C3C00C646E626635D00B55A1C62552258D1544F -:100C4C00615DA35B994206D327580FD0E822A05AC6 -:100C5C001B18994203D0002080BCB846F0BDE42399 -:100C6C0000223800E25402F07FFDF5E7380002F074 -:100C7C005BFD00280DD0380002F082FDE823984679 -:100C8C00E05280230100DB00984215D8615DA35B24 -:100C9C00DEE7635D013BDBB26355002BDBD0002349 -:100CAC00E025E4306259D1184978D154225C0133E3 -:100CBC00DBB29A42F6D8CEE7034802F057FB00238A -:100CCC004246A352C7E7C046444B0008F0B5D6468F -:100CDC004F464646E623C0B5C65A6B46F41DE4089B -:100CEC00E4001B1B00AF9D4688460B00050000224C -:100CFC000121684602F0AEFC2B4B424619002B48F2 -:100D0C0028319946EA4602F031FB72B6BFF34F8F99 -:100D1C00BFF36F8F4823264C9846E35CFF2B34D0EF -:100D2C00482228000133A35451463200D03002F03F -:100D3C0079FB002814D14825635D002B1DD0482277 -:100D4C00013BDBB2A354002B04D1BFF34F8FBFF395 -:100D5C006F8F62B6BD46E0BCBA46B146A846F0BD40 -:100D6C00E523EA56012A18D0494648251148143182 -:100D7C0002F0FCFA635D002BE1D1A6210E4A0F486C -:100D8C00890002F003FB635DD9E70D4A0D490B485E -:100D9C0002F0FCFA4346E35CC2E780210A4A13687E -:100DAC000B431360C7E7C04634470008684B000884 -:100DBC008C000020084B0008244B0008B8490008A0 -:100DCC00E04A00089102000000440040F0B5C6461D -:100DDC00804600B508000D0002F0C6FC0400280097 -:100DEC00012C16D002F0C4FC0600032C35D02800D0 -:100DFC0002F0C6FC0700042C19D0200002F01CFCE9 -:100E0C003B0001003200194802F0B0FA80BCB84631 -:100E1C00F0BD02F0B1FC04000100154802F0A6FA86 -:100E2C000F20EA23424601340440D454EEE702007A -:100E3C003100104802F09AFA31004046FFF746FFA5 -:100E4C004246CC232800D458043BD65802F09EFCD2 -:100E5C003A0001003000A047D8E70100064802F034 -:100E6C0085FA31004046FFF731FFCFE7E44B00082D -:100E7C00804B0008B84B0008984B0008EB2370B56A -:100E8C00C35C0400002B0BD10A2905D0C9B2FFF7B3 -:100E9C00CBFE032815D070BD0339FFF717FFFAE717 -:100EAC00C9B2FFF7C1FE0028F5D0E023E5582800B1 -:100EBC0002F06EFC002813D029002000FFF786FFFB -:100ECC00E9E7E023E558280002F062FC00280DD089 -:100EDC0029002000FFF77AFFEB230122E254DAE726 -:100EEC00054906483C3102F041FAD4E7024903486F -:100EFC003C3102F03BFAEFE734470008144C000891 -:100F0C000FB4F0B5DE46574645464E468023E0B555 -:100F1C0099B002AFF91820C92800796002F01CFAC8 -:100F2C00040008202A003D18502128007B6802F09C -:100F3C00B9FE00280BDC2000BD4617B0F0BCBB4648 -:100F4C00B246A946A046F0BC08BC04B018478C2396 -:100F5C00E622324D0130EB5880B29A5A98469146AF -:100F6C0081444B466E46D91DC908C900731A9D466B -:100F7C0002AB9A46EA2243469A5C00900820042170 -:100F8C003B18504602F09AFB72B6BFF34F8FBFF37B -:100F9C006F8F48239B46EB5CFF2B30D0482240469A -:100FAC000133AB5451464A46D03002F03BFA00288C -:100FBC0011D148239846EB5C002B17D04822013BFB -:100FCC00DBB2AB54002B04D1BFF34F8FBFF36F8F49 -:100FDC0062B6B546AFE7E5234246D256012A16D093 -:100FEC000F491048143102F0C1F9E2E7A6210E4A6C -:100FFC000E48890002F0CAF94346EB5CDEE70C4A66 -:10100C000C490A4802F0C2F95B46EB5CC6E780214A -:10101C00094A13680B431360CBE7C0468C000020D1 -:10102C0034470008084B0008244B0008B849000856 -:10103C00E04A0008910200000044004070B5050031 -:10104C0008000C0002F0A4FC0E280BD00BD80728CB -:10105C002ED00C283AD1DC230022E8581A21002388 -:10106C0002F0E0FB70BD132830D1200002F092FC9E -:10107C00002341680068194A01F0A0F804003C21E3 -:10108C00200000F081FF20000E003C2100F0F6FE55 -:10109C003C2100F079FF0D00E1212000090100F056 -:1010AC00EDFE330001002A000D48FFF729FFD9E7B8 -:1010BC00200002F06FFC04680A482100FFF720FFB3 -:1010CC00022CCFD1E8230022EA54CBE706490200D8 -:1010DC005031064802F04AF9C4E7C04640420F00BE -:1010EC00244C00083C4C000834470008504C0008C5 -:1010FC0070B5050008000C0002F04AFC1F2803D84C -:10110C002E4A800013589F46200002F041FC2C49C7 -:10111C00020060312B4802F029F9002070BD284CE8 -:10112C0029482100603102F021F9D22312225B0000 -:10113C006C34EC500433EA50244A0433EA50A5359D -:10114C008F3BFF35FF3B2B730A330020EB81E5E728 -:10115C001B491F48603102F009F90020DEE720002E -:10116C0002F018FC1B4A41888388008853434A4389 -:10117C00C10109180901091A9B0B1748920B890A1E -:10118C00FFF7BEFE0020C9E7D9235B00EB5A002B0A -:10119C000ED01248FFF7B4FE1148BFE7114802F019 -:1011AC00E5F80020BAE71048FFF7AAFE0020B5E7E3 -:1011BC0075210E4A0E4802F0E9F8EAE7944300085C -:1011CC0034470008584A00087C4A000809000050BF -:1011DC00884A00084DCE00005C4C0008A44C000866 -:1011EC00D1120008B04C0008D04C0008844C000808 -:1011FC00B44A000870B5050008000C0002F0C8FBEA -:10120C001F2803D8234A800013589F46200002F061 -:10121C00BFFB214902001031204802F0A7F8002042 -:10122C0070BD1D491E48103102F0A0F80020F7E7F0 -:10123C0019491C48103102F099F80020F0E7200001 -:10124C0002F0A8FB184A41888388008853434A431C -:10125C00C10109180901091A9B0B1448920B890A40 -:10126C00FFF74EFE0020DBE71148FFF749FE11485F -:10127C00D6E7D9235B00EB5A002B06D10E48FFF7BB -:10128C003FFE0E48CCE70020CAE70D48FFF738FEBA -:10129C000020C5E714440008B4470008584A000869 -:1012AC007C4A0008884A00084DCE00005C4C0008BF -:1012BC00DC4C0008D1120008D04C0008FD100008CE -:1012CC00E84C000870B5050008000C0002F060FB4B -:1012DC001F280DD8214A800013589F4620492148C9 -:1012EC001C3102F043F82800FFF732F8002070BDE3 -:1012FC00200002F04DFB1A4902001C311A4802F082 -:10130C0035F80020F3E7164918481C3102F02EF886 -:10131C000020ECE7200002F03DFB154A4188838851 -:10132C00008853434A43C10109180901091A9B0B50 -:10133C001048920B890AFFF7E3FD0020D7E728003D -:10134C00FFF706F803000020002BD0D10A48FFF766 -:10135C00D7FD0A48CBE70A48C9E7C04694440008C1 -:10136C00B44700087C4A0008584A0008884A00081C -:10137C004DCE00005C4C0008D04C0008FD1000085D -:10138C000112000870B50400303CE3B282B0462B69 -:10139C0003D8554A9B00D3589F4601005348FFF78A -:1013AC00AFFD02B070BD8026514DB6006B69334263 -:1013BC0003D1504801F0DAFFAE61FA239B005C4385 -:1013CC00A4B221004C4801F0D1FF50234B4AD45217 -:1013DC004B4A231C944200D983E085229BB2D20055 -:1013EC0093427CD3464AD21A464B53438022120175 -:1013FC009446454A63441B0B5361D2E780253C4C11 -:10140C00AD0063692B4265D100213B4801F0AEFF72 -:10141C0050230021394AD1523B4B3C4A5A61C0E718 -:10142C008824364D002300220C21285902F0FAF9A9 -:10143C00002300220E21285902F0F4F9B1E75023C1 -:10144C002E4DEC5A2E4BC83C9C4216DC8523DB00FF -:10145C009C4200DA1C002100274801F087FF502332 -:10146C00EC52274B1C1B274B6343BFE75023234DE8 -:10147C00EC5A234BC8349C42E8DD1C00E6E72448B8 -:10148C00FFF73EFD8DE780222249D2034869030411 -:10149C0013404022824313438B6182E70223174A95 -:1014AC0001938633D0580721843B01AA02F0BAF984 -:1014BC0077E71948FFF724FD73E7184918482C31D2 -:1014CC0001F054FF174A184993680B4004210B4351 -:1014DC00936066E7154801F049FFA56294E7130095 -:1014EC0080E7131C79E7C04614450008804D0008BE -:1014FC0000040050504D0008384D00088C000020AE -:10150C00492700004907000000740040FF0F00004D -:10151C00684D000800080050F44C0008B44700085F -:10152C00644D000800240140E8FFFF7F244D0008B3 -:10153C00B0B5130014006A460833DB08DB00D31A7D -:10154C0000AF9D462200684602F06CFB6D460023FE -:10155C002B55022C02D12B782F2B07D005492A00B2 -:10156C0005483C31FFF7CCFCBD46B0BD6878FFF7B1 -:10157C0009FFF9E7B4470008984D0008112110B590 -:10158C000E4A0F48136A8B43136280220D4B920054 -:10159C009A62DA3AFF3A9A610B490C4B54315A6809 -:1015AC0001F0E4FE0A4C012321000A481031237497 -:1015BC0001F0DCFE237C002BFCD110BD002C014083 -:1015CC00A44D000800040050B447000800ED00E0F2 -:1015DC000C010020B44D0008024A536901335361D9 -:1015EC007047C0460C01002010B5EFF3058203498B -:1015FC000348683101F0BAFE10BDC046B44700087C -:10160C006C490008012210B5144B19690A421DD00F -:10161C000620196891431960D9688143D96019690A -:10162C0001308143196140210D4B99620D4B2139D9 -:10163C009A6101329A6102329A611C329A610A4BA8 -:10164C0000229869002302F0EDF810BD07491A69D1 -:10165C007431074801F08AFEF7E7C046002C0140C0 -:10166C0000080050000400508C000020B447000813 -:10167C00EC4D0008022210B5244BD9680A4202D066 -:10168C0019690A4235D1224C0422204BD9680A42EE -:10169C0002D019690A4220D152221C4BA25A1B6B50 -:1016AC0001339A4212D0194B1A491A690A4200D1D5 -:1016BC0010BD1B691848194001F058FEEFF3058264 -:1016CC0016491748683101F051FEF1E7002300225A -:1016DC001E21A06902F0A6F8E5E7196911489143AB -:1016EC0019615223E15A013189B2E15201F03EFEF7 -:1016FC00D2E71969064C914319615223E15A0A4801 -:10170C00013189B2E15201F031FEBDE7002C0140FC -:10171C008C000020E0FF0C00EC4D0008B4470008E2 -:10172C006C490008044E0008F84D0008F8B58023F9 -:10173C000222DB0519690A420FD101211A691142F3 -:10174C0003D01A698A431A61F8BDEFF30582284960 -:10175C002848683101F00AFEF6E71969264C9143D6 -:10176C0019612668676872B6BFF34F8FBFF36F8F2E -:10177C004825635DFF2B33D048215A1CD2B26254EA -:10178C0080211E4DC905A869496AA961884202D900 -:10179C00E9690131E961002A17D04822A354002BD2 -:1017AC0004D1BFF34F8FBFF36F8F62B6EB69AA6999 -:1017BC00990792080A439B083800B0478022D2054B -:1017CC00536BA1685B185363BEE7A6210C4A0D4806 -:1017DC00890001F0DBFD4823E35C013BDBB2DCE775 -:1017EC00094A0A49074801F0D1FD635DC4E7C046C8 -:1017FC00B44700086C4900088C0000200C01002044 -:10180C00244B0008B8490008E04A00089102000087 -:10181C0070B548250B4C635D002B0BD04822013B67 -:10182C00DBB2A354002B04D1BFF34F8FBFF36F8FE8 -:10183C0062B670BDA621044A0448890001F0A6FDD9 -:10184C00635DEBE78C000020244B0008B8490008CE -:10185C0070B572B6BFF34F8FBFF36F8F4825074C2F -:10186C00635DFF2B03D048220133A35470BD044A9F -:10187C000449054801F08AFD635DF4E78C00002003 -:10188C00E04A000891020000B8490008102210B587 -:10189C000E4BD9680A4211D119690A4207D1EFF3EC -:1018AC0005820B490B48683101F060FD10BD0A48F8 -:1018BC0000211A610C3001F085FDF7E70648012183 -:1018CC00DA600C3001F07EFDF0E7C04600180240F3 -:1018DC00B44700086C4900088C00002010B5EFF3E9 -:1018EC00058203490348683101F040FD10BDC04634 -:1018FC00B44700086C490008102210B51C4B19683D -:10190C000A421AD1012219680A4211D1802219689F -:10191C009201114222D1042219680A4223D10822D1 -:10192C0019680A420ED01A60124801F01FFD03E03C -:10193C0011481A6001F01AFD10BD1A600F4801F031 -:10194C0015FDF9E719680E4801F010FDEFF305825B -:10195C000C490D48683101F009FDEDE71A600B48A0 -:10196C0001F004FDE8E71A60094801F0FFFCE3E729 -:10197C0000240140544E0008204E0008104E000870 -:10198C00604E0008B44700086C4900082C4E000853 -:10199C00484E0008022310B5134C2268134218D18C -:1019AC0008232268134208D11049226810481431C8 -:1019BC0001F0DCFC0423636010BD0C49636014313E -:1019CC000C4801F0D3FC01210B4A13680B43136044 -:1019DC00F2E76360094B14211A0098694A32062316 -:1019EC0001F020FFE8E7C046000002403448000840 -:1019FC007C4E0008704E0008080002408C0000204D -:101A0C0010B50D4BDA69920610D4DB691B0605D5AF -:101A1C000A4B0B49986B5B6B984710BDEFF3058233 -:101A2C0008490948683101F0A1FCF6E70348596AF6 -:101A3C001C3001F0C7FCF0E7004400408C00002093 -:101A4C0028440040B44700086C49000870B572B6D1 -:101A5C00BFF34F8FBFF36F8F48241B4D2B5DFF2BB4 -:101A6C002BD048215A1CD2B26A548021174CC9057C -:101A7C00A069496AA161884202D9E1690131E16139 -:101A8C00002A0FD04822AB54002B04D1BFF34F8F48 -:101A9C00BFF36F8F62B6E169A0698B0780081843AA -:101AAC00890870BDA6210A4A0A48890001F06EFC1B -:101ABC004823EB5C013BDBB2E4E7074A07490548E6 -:101ACC0001F064FC2B5DCCE78C0000200C010020A5 -:101ADC00244B0008B8490008E04A000891020000B5 -:101AEC007047C04610B50B00EFF31084012181F351 -:101AFC0010881900FEF7BCFD84F3108810BDC04699 -:101B0C0010B582B0EFF31084012181F310886B467D -:101B1C000122D91D0020FEF7ABFD84F310880128AB -:101B2C0003D16B46D87902B010BD01204042FAE7D0 -:101B3C0010B5FEF747FD10BDF0B5DE464E465746D4 -:101B4C004546E0B59BB00AAB0593402306930023B2 -:101B5C000793089301330C0091469B460290099021 -:101B6C0005E005A8FEF772FE0898002859DB2178DD -:101B7C00013400295CD02529F3D1220013780026EA -:101B8C0002250820140021392D2B0CD02D2B0ED81A -:101B9C00232B11D02B2B00D05FE10E430132137895 -:101BAC0014002D2BF2D15B4601321E43F7E7302B8C -:101BBC0005D12E430132F2E706430132EFE71A005A -:101BCC00303A0025092A0DD81A00AB005B190134F4 -:101BDC005B009B182278303B1D001300303B092B17 -:101BEC00F3D913002E2B00D1D8E000272378042141 -:101BFC0001E0637801341A008A43682AF9D0252B56 -:101C0C0007D0583BDBB2202B07D8954A9B00D35802 -:101C1C009F46252105A8FEF719FE089801340028D7 -:101C2C00A5DA1BB0F0BCBB46B246A946A046F0BD37 -:101C3C0008980028F5DD079C002C00D0C6E00019A0 -:101C4C00EFE74B4649461B6805A81A1D0A60196840 -:101C5C0010223B0001960095FEF730FE01340898E7 -:101C6C00DDE74B4649461B6805A81A1D0A60196832 -:101C7C000A223B0001960095FEF720FE01340898DD -:101C8C00CDE74B4649461B681A1D0A601D6805E0E6 -:101C9C0005A8FEF7DBFD08980028BFDB2978013585 -:101CAC000029F5D10898B9E74B4649461B6805A8A9 -:101CBC001A1D0A601968002301930833102200933F -:101CCC00FEF7FCFD01340898A9E74B4649461B6812 -:101CDC001A1D0A601B68DA179818039301235040E9 -:101CEC009A4609280DDDAA46A0461D000A210400CB -:101CFC00013500F079F9632CF8DC2B00444655468D -:101D0C009A46B846574575D3002D36D0039B002B09 -:101D1C0074DB730772D4B30701D5002F2DD05B464B -:101D2C0033422AD1002D28D04346A0461C00AC4299 -:101D3C0020D205A82021FEF789FD0898013D002836 -:101D4C0000DA87E0002DF2D1230044469846039B2D -:101D5C00002B58DB730761D403233340022B62D072 -:101D6C0005A83B000A22039901960095FEF7A6FDF3 -:101D7C00089853E723004446984608980028E6DA6A -:101D8C0001344CE74B4649461B6805A81A1D0A60EE -:101D9C001978FEF75BFD0134089840E76378621C04 -:101DAC001900303914000027092900D91FE71A003F -:101DBC00BB00DB1901345B009B182278303B1F0001 -:101DCC001300303B092BF3D9130010E7254B1B787C -:101DDC00002B15D0EFF31085012181F31088220020 -:101DEC0002980AA9FEF7B8FC85F310880898079C9E -:101DFC00001916E7D046002DBFD087E7013D8AE7D2 -:101E0C00FEF7E0FBE6E75B422D2105A80393FEF706 -:101E1C001DFD089800289FDA013400E72B2105A846 -:101E2C00FEF714FDF5E7002F9AD10AE0A8450CD275 -:101E3C0005A83021FEF70AFD0898013D002800DABC -:101E4C00ECE6002DF2D100258AE70898002887DA05 -:101E5C000134E4E644460134E1E60025C5E6C0461B -:101E6C00304600082C21002003B47146490840007C -:101E7C004900095E49008E4403BC704700224308A8 -:101E8C008B4274D303098B425FD3030A8B4244D336 -:101E9C00030B8B4228D3030C8B420DD3FF22090278 -:101EAC0012BA030C8B4202D31212090265D0030B37 -:101EBC008B4219D300E0090AC30B8B4201D3CB032D -:101ECC00C01A5241830B8B4201D38B03C01A52416F -:101EDC00430B8B4201D34B03C01A5241030B8B4271 -:101EEC0001D30B03C01A5241C30A8B4201D3CB025C -:101EFC00C01A5241830A8B4201D38B02C01A524141 -:101F0C00430A8B4201D34B02C01A5241030A8B4243 -:101F1C0001D30B02C01A5241CDD2C3098B4201D35B -:101F2C00CB01C01A524183098B4201D38B01C01AD9 -:101F3C00524143098B4201D34B01C01A5241030950 -:101F4C008B4201D30B01C01A5241C3088B4201D3FF -:101F5C00CB00C01A524183088B4201D38B00C01AAC -:101F6C00524143088B4201D34B00C01A5241411AD3 -:101F7C0000D20146524110467047FFE701B50020E0 -:101F8C0000F006F802BDC0460029F7D076E770478E -:101F9C007047C04610B5002903D100F007F8203077 -:101FAC0002E0080000F002F810BDC0461C2101231D -:101FBC001B04984201D3000C10391B0A984201D320 -:101FCC00000A08391B09984201D30009043902A2FE -:101FDC00105C40187047C046040302020101010165 -:101FEC00000000000000000003460B437FD40022D9 -:101FFC0043088B4274D303098B425FD3030A8B4291 -:10200C0044D3030B8B4228D3030C8B420DD3FF22FA -:10201C00090212BA030C8B4202D31212090265D0C8 -:10202C00030B8B4219D300E0090AC30B8B4201D37B -:10203C00CB03C01A5241830B8B4201D38B03C01AC2 -:10204C005241430B8B4201D34B03C01A5241030B39 -:10205C008B4201D30B03C01A5241C30A8B4201D3EA -:10206C00CB02C01A5241830A8B4201D38B02C01A95 -:10207C005241430A8B4201D34B02C01A5241030A0C -:10208C008B4201D30B02C01A5241CDD2C3098B42F1 -:10209C0001D3CB01C01A524183098B4201D38B016E -:1020AC00C01A524143098B4201D34B01C01A524111 -:1020BC0003098B4201D30B01C01A5241C3088B4256 -:1020CC0001D3CB00C01A524183088B4201D38B0041 -:1020DC00C01A524143088B4201D34B00C01A5241E3 -:1020EC00411A00D201465241104670475DE0CA0FBA -:1020FC0000D04942031000D34042534000229C467A -:10210C0003098B422DD3030A8B4212D3FC22890183 -:10211C0012BA030A8B420CD3890192118B4208D359 -:10212C00890192118B4204D389013AD0921100E0BB -:10213C008909C3098B4201D3CB01C01A52418309CF -:10214C008B4201D38B01C01A524143098B4201D3FC -:10215C004B01C01A524103098B4201D30B01C01A27 -:10216C005241C3088B4201D3CB00C01A52418308A1 -:10217C008B4201D38B00C01A5241D9D243088B42F7 -:10218C0001D34B00C01A5241411A00D2014663469A -:10219C0052415B10104601D34042002B00D54942FE -:1021AC00704763465B1000D3404201B50020FFF737 -:1021BC00EFFE02BD0029F8D016E77047002B11D1B5 -:1021CC00002A0FD1002900D1002802D00021C943D8 -:1021DC00080007B4024802A14018029003BDC04693 -:1021EC00B1FDFFFF03B4684601B5029800F006F894 -:1021FC00019B9E4602B00CBC7047C046F0B55746DA -:10220C004E464546DE46E0B504000D009246994622 -:10221C0083B08B4230D82DD049465046FFF7BAFEDA -:10222C00290006002000FFF7B5FE331A9846203B24 -:10223C009B4633D45A465346934042461F0053465E -:10224C0093401E00AF423AD8AF4200D178E05B46D3 -:10225C00A41BBD41002B00DA75E000220023009284 -:10226C00019301235A469340019301234246934024 -:10227C00009328E08242CFD90022002300920193E0 -:10228C000C9B002B01D01C605D600098019903B081 -:10229C00F0BCBB46B246A946A046F0BD4246202340 -:1022AC009B1A5246DA40414613004A468A401700B0 -:1022BC0042461F43534693401E00AF42C4D90022EE -:1022CC000023009201934346002BD9D0FB077208E0 -:1022DC001A4346467B080EE0AB4201D1A2420CD811 -:1022EC00A41A9D41012024196D410021013E24189E -:1022FC004D41002E06D0AB42EED9013E24196D4162 -:10230C00002EF8D1009801995B4600196941002B09 -:10231C0024DB2B005A464446D3402A00E2401C00E2 -:10232C005B461500002B2ADB26009E40330026005E -:10233C004746BE403200801A9941009001919FE7B8 -:10234C00A342BCD883E74246202300219B1A0022DB -:10235C00009101920122DA40019286E74246202345 -:10236C009B1A2A0046469A402300F34044461343E6 -:10237C002A00E2401C005B461500002BD4DA4246D2 -:10238C002F002023260097409B1ADE403B0033434E -:10239C00CDE7C0460D488546FFF7A2FB0C480D491A -:1023AC000D4A002302E0D458C4500433C4188C42A4 -:1023BC00F9D30A4A0A4C002301E013600432A2420A -:1023CC00FBD301F0E9FA00F00FF8FEE700900020D3 -:1023DC00000000206C0000209450000870000020C9 -:1023EC000C220020FEE70000F0B5DE4657464E46B4 -:1023FC004546E0B5D1B000F0ABFF934800F0B6FF16 -:10240C000722924B00215A63A0240D3215A801F02B -:10241C0004FB0223E405189320000E3314A9149333 -:10242C00FDF788FE149A236913409A4206D1884B13 -:10243C001B6883F30888874B1B6898470323A026E7 -:10244C009A4615930023F60598463000189314A964 -:10245C0043331493FDF76EFE2023300014A914931C -:10246C008025FDF767FE434601277B4C1793AD0093 -:10247C000233200015971693149514A9A56299465A -:10248C00FDF758FE40237548149314A98361FDF79A -:10249C0051FE272320001797149314A9A361FDF76D -:1024AC0049FE4B46159319934346C0241793534644 -:1024BC00A400169314943000B46214A9FDF73AFEEC -:1024CC000C23300014A919971493FDF733FE8021C7 -:1024DC005E4B09065A6D0120920092080A435A6518 -:1024EC005F4ADA635F4A1A649A6B17439F635E4BC9 -:1024FC001A6814431C605D4CFDF7A2FE23685C4A0D -:10250C005C4913401D435C4B256099461B68580081 -:10251C00C0184000FFF7B2FC80226369D200013082 -:10252C00134202D105E0002803D06369013813423D -:10253C00F9D180214D4A490013680B43136013688D -:10254C000B42FCD00221414A4C4BD365D36D19424E -:10255C00FCD0382391680B40D168102B01D100F0CE -:10256C004DFC002B01D000F04DFC1368444953681E -:10257C0019408023DB010B435360136841490B4026 -:10258C0013601368404A9B045B0FDA404B461A6099 -:10259C004B465868FDF754FE3C4A002832D138208F -:1025AC002A498B680340102B01D100F003FE0B6805 -:1025BC003748034080200B605469800403E0536962 -:1025CC001B1B022B1ED80B680342F8D1CB68314879 -:1025DC001840314B0343CB60802308685B040343F2 -:1025EC000B608023C8685B050343CB608021546972 -:1025FC001648890403E053691B1B022B02D803689D -:10260C000B42F8D0062318490868184201D100F093 -:10261C00EFFCE0230D49DB01886803438B608B687A -:10262C001E4803408B600B689B0101D400F0F2FC48 -:10263C0007208B681A4C83431800022303438B60DA -:10264C003820556934E0C0468C4E0008001002401A -:10265C000000FF1F0400FF1F000400500008005082 -:10266C0003000230010812000020024000700040FC -:10267C00FFF9FFFF40420F0000000020098000001E -:10268C00FF80FFFFFFC7FFFF0024F4000C010020B8 -:10269C00FFFFFFFE8C80C11132301646FFF0FFFFAA -:1026AC008813000053695B1BA34201D900F0B2FCF4 -:1026BC008B680340102BF5D10720F5490B680340BC -:1026CC00022B01D900F050FDF24BF3499A680A40F5 -:1026DC009A6038229968114201D000F000FD1B6805 -:1026EC00EE489B045B0FD840ED4AEA4B93461F2201 -:1026FC009B681B051B0F9B005B441B6B1340D84056 -:10270C004B4618605868FDF79BFDE64AE64913688E -:10271C00E6480B401360E64B19684B4609051A68EE -:10272C00090D00F023FE84201022E24B195891432E -:10273C00195004381958114319501968114319606C -:10274C0059680A435A60DC4B1A68D20307D41A68DA -:10275C00DA490A401A60DA6BD9490A40DA638023F5 -:10276C00D54A5B021168D74E0B4313603F22D64902 -:10277C0001240B68092093431A00052313430B60B3 -:10278C00D24BD3491A681140D24A0A431A6032001C -:10279C00D1494A3299600321DA605A68120C12044A -:1027AC000A435A60CD4A5460022219680A431A60DF -:1027BC00082219680A431A601A68210022431A6019 -:1027CC00FDF79AFCC64B9A68224207D1DA68C549D4 -:1027DC000A40DA601A69920092081A618021C04B93 -:1027EC008903DA680A43DA6080229201196811427F -:1027FC00FCD007211A605A698A43110002220A434D -:10280C0070215A615A698A43110050220A430F21E0 -:10281C005A619A6A8A439A625A69A3490A405A6170 -:10282C009A6AF231FF318A43110010220A43802147 -:10283C009A625A6989000A435A619A6AAA491140F4 -:10284C00C022D2000A4380219A625A69C9010A4304 -:10285C005A619A68A5491140802252050A439A6030 -:10286C004B46A3491868FFF709FB142343430A930B -:10287C000A9B002B05D00A9B013B0A930A9B002B59 -:10288C00F9D1974B9B499A681140802212060A4352 -:10289C009A609A68002AFCDB802212011A602023BD -:1028AC000A930A9B002B05D00A9B013B0A930A9BB7 -:1028BC00002BF9D180238A4C9B05226903211343F9 -:1028CC00236111230C206360FDF716FC0121E368E2 -:1028DC00E368A3680B4200D1A0E3874800F046FDF3 -:1028EC0001257F4B85491A6914A8AA431A611A69F4 -:1028FC00D0240A401A619A687E4964000A402A432F -:10290C009A604923C82218A9F55400F071FFD4200D -:10291C00400001F065F8C822010007001031520098 -:10292C0000F066FF764B28213B51D8239846DA20DD -:10293C0042460AAB5B189F50400001F051F803006F -:10294C00C822824610331900520000F051FF534642 -:10295C006C4AB3611A514B4665491868FFF78EFAF9 -:10296C005B46694F0138B8627033BA6A1900674820 -:10297C0000F0FCFC664B0021BB6111230D203B6277 -:10298C007D60FDF7B9FB00210E20FDF7B5FB84231C -:10299C003B60882328211B02FD6050467B64DC23AE -:1029AC000AAA5218D050002200234C924D93E823CF -:1029BC000AAA5218D554574B57480C33190000F03B -:1029CC00D5FC4B4655491868FFF758FA8023544AF2 -:1029DC00DB05013898625A63102202219A611A6A47 -:1029EC002A431A62DA680A43DA604E4A326014AA41 -:1029FC007260FA221201B2600322586902435A61D2 -:102A0C000F201D60FDF778FBEC2000F0E9FF0700BC -:102A1C00C82239000390D03000F0E0FCFF232821BD -:102A2C004046E4357B550AAB5B181B583A489B462D -:102A3C00D2235B0098465B4641465F5035492831AE -:102A4C0000F094FC5B46384A1A5142469C58635D30 -:102A5C007F2B00D802E3354B0893354B099300F0DC -:102A6C00E9FDE6235A46E0521E3BE250314A04335C -:102A7C00E2508023DB009C46604400F0B1FFE02371 -:102A8C00E422E0500023A3540632A35254E0C04683 -:102A9C000020024000100240FF8FFFFF0024F400D2 -:102AAC003448000800700040FFFEFFFFA04E0008F5 -:102ABC00005801400018024000740040FFFF03FF63 -:102ACC00FFFFF8FF8C0000200008024008000240C5 -:102ADC000F80FFFFA02500004024014000000240B1 -:102AEC0000240140C73FFFFFFFF0FFFFE8FFFF6F2F -:102AFC0040420F00E8FFFF7FC04E0008FFFFFFDFE2 -:102B0C00ED0900080D0A0008002C0140DC4E0008FD -:102B1C0068680000B4480008644D000800093D00D6 -:102B2C00801A06001D0300082D0A0008E84E000854 -:102B3C00D04A00083D150008D44AD54B516DD54DEF -:102B4C000B4353658B23EB602A68D34B13432B60E9 -:102B5C0049239846F35C012B00D970E202211C201A -:102B6C00FDF7CAFA43464146F35C5A1C7254E522FF -:102B7C005BB29046A354002B00DA66E20BAB22004A -:102B8C001800C6499A4600F017FC0EAB220018003C -:102B9C00C349069300F010FC11AB18002200C14988 -:102BAC00029300F009FC4346E356012B00D1ADE241 -:102BBC00E523E256BC4B1D000593BC4B1435290094 -:102BCC0018001F00079300F0D1FBE5229046A25697 -:102BDC00012A00D1C2E22900380000F0C7FB4246AE -:102BEC00A256012A00D1B9E22900380000F0BEFB40 -:102BFC00D2235B009A465B465246AD49AD4838310C -:102C0C009C58002700F0B2FBEB232821E75414AAB0 -:102C1C00633BF250039A0433F2500AAA5218503311 -:102C2C00D358A348984650302439FDF74FFBA048A1 -:102C3C0002215830FDF74AFB059C12216C34200010 -:102C4C00FDF744FB434652469C50D423414645462F -:102C5C009D3A5B00FF3ACA50974A0433CA50853BF1 -:102C6C005544FF3B954A2B73273BEB810192EA8835 -:102C7C00A87AD1B2002800D0EFE02C7A6B7A013C14 -:102C8C00E41A0123E4B2AB72524643469B58490006 -:102C9C009C4661444878864A83001B1808785C324D -:102CAC0081000918D31801985218210000F05EFB1E -:102CBC00EB893F19002BDAD13900814800F056FB23 -:102CCC00D02341467F4A5B00CA5000F035FE01001C -:102CDC004046FEF70DFA14AA7B49029800F06CFBF3 -:102CEC0033000C3316C816C303210720FDF704FA72 -:102CFC002821D8230AAA5218744C7548D75800F0CA -:102D0C0035FB744800F032FB2100734800F02EFBB9 -:102D1C0050238025F452714A714B724C5A6163698D -:102D2C00AD002B4203D1704800F020FBA561D023ED -:102D3C006E4A5B00FA5000F0FFFD01003800FDF711 -:102D4C006FFE6B4BE8259A46D823DC249B46282241 -:102D5C000AAB9B185B5D002B00D1D5E028230AAA97 -:102D6C00D2181259634910001F00019200F09EFD09 -:102D7C000028ECD159460AAAD3195B5851461A00BF -:102D8C001800019300F092FD0028E0D114AA100065 -:102D9C00594900F08BFD80460028D8D101210698B6 -:102DAC0000F0FEFA002800D080E172B6BFF34F8F1E -:102DBC00BFF36F8F4823F35CFF2B00D1E6E1482271 -:102DCC00B35C0133B3540AAB203A9B18185900F08A -:102DDC0025FD002800D04AE14823F35C002B00D1EC -:102DEC0076E14822B35C013BDBB2B354002BAED18D -:102DFC00BFF34F8FBFF36F8F62B6A8E70D3B19403F -:102E0C00022920D021493D4A0B68802013400B60D9 -:102E1C0080230A685B001343394A0B605469C00075 -:102E2C0005E053691B1B022B01D9FFF7EBFB0B6869 -:102E3C000342F6D04B68334818408023DB01034330 -:102E4C004B60FFF7ACFB13682E4953681940802385 -:102E5C00DB010B435360FFF79BFB4C1CA888E1B2D2 -:102E6C00E4B20490844200D10021287A6C7A844622 -:102E7C000120404283460134E4B2DC446C72644568 -:102E8C0000D1ACE00023AB72FEE6C046001002405D -:102E9C0008000C000044004001000020890E0008CE -:102EAC00A9020008C102000834470008084B0008BA -:102EBC00B4480008644D000802000050304F000870 -:102ECC00444F0008FD10000805030008C409000069 -:102EDC00604F0008744F0008384D0008710D000059 -:102EEC000074004000040050504D00082D0A0008EA -:102EFC00A50A0008110B000849100008FFC7FFFFC6 -:102F0C000C010020FF80FFFF28218026D24C0AAA4A -:102F1C00DC335218D5586369B600334203D0CF481E -:102F2C0000F024FAA662D02464002E5900F012FDA1 -:102F3C0001002800B047CA4B28212B51D8230AAADC -:102F4C005218D5582E5900F005FD01002800B04745 -:102F5C00C44BC5482B51FDF7D3FFD2235B00EC5873 -:102F6C00BF3BE256012A04D005990798143100F0B2 -:102F7C00FDF9E023E05800F03DFDE523FF22E2548B -:102F8C00039AD35C7F2B04D8FA21089A099800F095 -:102F9C00FDF92824039800F02DFDDC230AAA121950 -:102FAC00D05800F027FDD8230AAA1219D05800F0E7 -:102FBC0021FD72B6AD4800F0D9F900F0FBF91121F2 -:102FCC00AB4A136A8B4313628022A34B92009A6222 -:102FDC00DA3AFF3A9A61A74B19329A62FEE700205F -:102FEC0001326872049892B290426CD0EA8049E740 -:102FFC00072002230C68844323430B6055699E4CC5 -:10300C000B680340022B01D1FFF703FB53695B1BD9 -:10301C00A342F5D9994B9B46FFF777FBE368984A97 -:10302C00E3681A40974B1343E360E3689B0200D4B8 -:10303C0056E4F023A26A1B021343A36250E49248A5 -:10304C0000F094F9E523FF22E2540EAB069311AB8A -:10305C0002938E4B05938E4B0793C9E58D4B8E4A8D -:10306C00C72118000892099300F090F9F7E4282181 -:10307C005A460AAB5B18985800F0D0FB002800D1D8 -:10308C00AAE614A800F0CAFB002800D1A4E680220E -:10309C00824B920098465B69134200D0C2E0042137 -:1030AC007F4A13698B43136130BF95E6069B7D49BC -:1030BC001B78C87F1F00682200286DD12F2B7CD174 -:1030CC002E3BCB7771E60022013BEA80EB81D9E6FF -:1030DC00A621754A7548890000F058F981E699686F -:1030EC001140082900D11BE199681140102900D129 -:1030FC0080E099681140202900D114E19B681A40A6 -:10310C00182A00D113E10020FFF7EEFA33005246E3 -:10311C001C3383CA83C33300069A283383CA83C300 -:10312C0004232A6813432B604346E356012B00D03B -:10313C003EE55F4B029A73633300B4633C3383CA3E -:10314C0083C308232A6813432B604346E2564F4B34 -:10315C0005934F4B0793012A00D02BE52023554AAA -:10316C0011680B43136043E502230C68844323432B -:10317C000B605569404C0B680340022B01D1FFF7E3 -:10318C00A3FA53695B1BA342F5D943E74A4A4B495F -:10319C00464800F0FBF812E60A2B00D19CE04848A8 -:1031AC0000F0E4F83800FEF7EDF833000022683345 -:1031BC00DA77FAE5CB68FFF725FA3A4B9B7FF118E3 -:1031CC00885438000A2F0AD0364F0133DBB2BB7754 -:1031DC0088541E2B00D0E8E5394800F0C7F8682366 -:1031EC009846B0444146374800F0C0F800234246A8 -:1031FC009377DAE5DA68D968D243D8684906490F7B -:10320C0040040131440E920700D194E02E48FEF7A1 -:10321C0035FE60432D4BD968490F0131FEF72EFE68 -:10322C00FFF762FA4B4606201B6829495843FEF704 -:10323C0025FE4346274A1B68013013404246136063 -:10324C0003E0002800D1C7E50138434680225B69C2 -:10325C0092001342F5D122E700040050244D0008DF -:10326C000D0A0008ED090008AC4F0008BC4F00081F -:10327C00002C01400008005088130000344800085E -:10328C003CC2FEFF03100000FC4E0008344700084F -:10329C00084B0008D04A0008E84E000800700040B7 -:1032AC0000ED00E0F4000020244B0008B8490008B1 -:1032BC00650B000800440040E04A00089102000041 -:1032CC00C04F00089C4F00080024F400001002407E -:1032DC0040420F00FFBFFFFF194B1948997F4B1C51 -:1032EC00DBB283772F20711888541E2B09D1154817 -:1032FC0000F03CF81249144800F038F84246104BE4 -:10330C009A7768239846B0444346002241469B7FF7 -:10331C000D48CA54170000F029F843469F7744E73C -:10332C000A48FFF7E1F980200002FFF7DDF9FA20E7 -:10333C00C001FFF7D9F90548FEF7A0FD604369E726 -:10334C00F4000020C04F00089C4F000800127A00C7 -:10335C0010B5FEF7EDFB10BD00B583B0019101AACD -:10336C0001000020FEF7E8FB03B000BD0FB400B570 -:10337C0083B004AB02CB01AA002000930193FEF7AB -:10338C00DBFB03B008BC04B01847C046130010B5F3 -:10339C000A0001000148FFF7E9FFFEE7C44F0008EF -:1033AC000A0010B501000020FEF79CFBC343DB179D -:1033BC00184010BD7047C046002383604260016016 -:1033CC007047C04610B503680400002B04D0406859 -:1033DC009847A3680133A36010BDC04601604B1E23 -:1033EC00994100234942114041608360C36070479A -:1033FC0003009B68C068C01A43425841C0B2704772 -:10340C000200C368581E9368C01A536800D5C018D0 -:10341C007047C04603008268C1685B68501A00D5CB -:10342C00C0187047F0B54646D6464F460500C0B5A5 -:10343C00EB688068013B0E0014001B1A1ED49342EB -:10344C001AD31700002F05D12000E0BCBA46B146B4 -:10345C00A846F0BDAB6828689C463A006044310031 -:10346C0000F0D2FAAB689C466B686744AF609F4231 -:10347C00EAD10023AB60E7E70020E6E76A689046F4 -:10348C004344A342F8D30319994627009A42D9D84A -:10349C00131A9A462B6852469C46604400F0B4FAC4 -:1034AC0000234246AB604B4656449F1ACAE7C046BF -:1034BC00F8B54746CE4680B5C66883680500884691 -:1034CC009C1B0BD4944207D82700002C20D1380029 -:1034DC00C0BCB946B046F8BD1400F5E74368994640 -:1034EC004C44944200D91400331927009945ECD868 -:1034FC004B469F1B2B683A009919404600F084FA02 -:10350C004B46F61AA419B84400263F19002CDED0FD -:10351C00296822004046891900F076FAD7E7C046A0 -:10352C00F0B54F464646D646C0B50F008368C16815 -:10353C00060014005B1A1ED493421AD31500002DFA -:10354C0005D12000E0BCBA46B146A846F0BDF368F0 -:10355C0031689C462A006144380000F055FAF36843 -:10356C009C4673686544F5609D42EAD10023F36084 -:10357C00E7E70020E6E7426890464344A342F8D3CD -:10358C000B19994625009A42D9D8531A9A460368C2 -:10359C0052469C463800614400F036FA00234246FD -:1035AC00F3604B4657449D1AC9E7C04670B50100FD -:1035BC000400861D1D4D1E4823781B02584008230D -:1035CC0004E0013BDBB280B2002B09D002B2400018 -:1035DC00002AF6DA013B6840DBB280B2002BF5D151 -:1035EC000134A642E8D14B888A781D0A1202154391 -:1035FC001BD008314D190D4CADB20B781B02584045 -:10360C00082304E0013BDBB280B2002B09D002B2EC -:10361C004000002AF6DA013B6040DBB280B2002B9E -:10362C00F5D101318BB2AB42E7D170BD2110000056 -:10363C00FFFF000008207047052804D883001B18E2 -:10364C000248C01870470248FCE7C046E84F000823 -:10365C00E44F000870B50400012049000143072025 -:10366C0018400023D2000243638023712000002302 -:10367C000725C9B221706270661D082201304B40CB -:10368C0004E0013AD2B2DBB2002A09D059B25B0095 -:10369C000029F6DA013A6B40D2B2DBB2002AF5D13E -:1036AC00B04201D00178E8E763712000FFF77EFF9C -:1036BC00030AE071A371200070BDC04670B5040010 -:1036CC0004A8058820004900D200217062701900FE -:1036DC002A00083000F098F92B0AA3700023E5703B -:1036EC00200007252371661D02785340082204E050 -:1036FC00013AD2B2DBB2002A09D059B25B000029E0 -:10370C00F6DA013A6B40D2B2DBB2002AF5D10130C5 -:10371C00B042E9D163712000FFF748FF030AE07162 -:10372C00A371200070BDC04670B5002307244679F4 -:10373C00451D02785340082204E0013AD2B2DBB2B4 -:10374C00002A09D059B25B000029F6DA013A63402D -:10375C00D2B2DBB2002AF5D10130A842E9D1F01A7D -:10376C0042425041C0B270BD00780007400F704714 -:10377C0040788006400F7047437807201840704708 -:10378C00827843881202180A104370470830704739 -:10379C0010B50400FFF70AFFE388A1791B0A0902A0 -:1037AC000B43181A42425041C0B210BDB0B500AF25 -:1037BC00050000F0BFF86A46C31DDB08DB00D31A16 -:1037CC009D460200040069462800FFF771FE80B296 -:1037DC00844203D00024BD462000B0BD684600F0F2 -:1037EC00D3F804002800FFF715FE8442F2D8F2E764 -:1037FC0070B505000C001600002905D03200280019 -:10380C002100FFF7EBFD70BD3D21024A0248FFF796 -:10381C00BDFDF3E7085000081850000810B5FFF77D -:10382C00E7FD10BDF8B5DE4657464E464546E0B5B9 -:10383C0000AF1E0080468A46914600F07BF86B462E -:10384C00C41DE408E4001B1B9D460500801983B2CF -:10385C003200514668469B4600F08AF8FDF7F8FFA7 -:10386C004046FFF7CDFD002483450DD9FDF7D0FF71 -:10387C005B46E01ABD4643425841C0B2F0BCBB4661 -:10388C00B246A946A046F8BD2A0069464046FFF755 -:10389C00C9FD4B4684B2002BE8D032004946404665 -:1038AC00FFF7C0FD2418A4B2E0E7C046F8B54E46B9 -:1038BC004546DE465746E0B500AF060089469046C1 -:1038CC00FFF774FF0025041E07D1BD462800F0BC8D -:1038DC00BB46B246A946A046F8BD6A46C31DDB08E6 -:1038EC00DB00D31AEA469D46FDF7B2FF220069467B -:1038FC003000FFF715FE0600B6B2EB46FDF788FF69 -:10390C00002E01D1D546E0E7684600F03DF8844230 -:10391C0005D159464046C8470125D546D5E725214E -:10392C00024A0348FFF732FDF3E7C0463050000867 -:10393C00185000080C20704710B5FEF787F80200ED -:10394C000B0003480260436080235B02836010BD60 -:10395C00E821002010B5FEF779F802000B000348AF -:10396C000260436080239B02836010BDD82100203D -:10397C0070B504000E001500FEF768F86681206033 -:10398C0061602581200070BD00890C3080B27047C9 -:10399C00807A70470C30704770B500260C4D0D4C7A -:1039AC00641BA410A64209D1002600F0E1FC0A4DCC -:1039BC000A4C641BA410A64205D170BDB300EB5891 -:1039CC0098470136EEE7B300EB5898470136F2E71B -:1039DC008C5000088C5000088C5000089050000847 -:1039EC0010B5034B0100186800F08CF810BDC046F0 -:1039FC000800002010B5034B0100186800F016F801 -:103A0C0010BDC04608000020002310B59A4200D11A -:103A1C0010BDCC5CC4540133F8E703008218934208 -:103A2C0000D1704719700133F9E7000070B505003B -:103A3C00002910D00C1F2368002B00DAE418280092 -:103A4C0000F03CF91D4A1368002B05D1636014602B -:103A5C00280000F03BF970BDA34208D9216860181A -:103A6C008342F3D118685B6841182160EEE71A00B5 -:103A7C005B68002B01D0A342F9D911685018A04201 -:103A8C000BD120680918501811608342E0D11868D6 -:103A9C005B68411811605360DAE7A04202D90C232D -:103AAC002B60D5E721686018834203D118685B68E6 -:103ABC004118216063605460CAE7C046F8210020B9 -:103ACC0070B50F4E0D0031680400002902D100F0D2 -:103ADC008FF830602900200000F08AF8431C0AD0CF -:103AEC000323C51C9D43A84207D0291A200000F0CF -:103AFC007FF8431C01D101256D42280070BDC046E2 -:103B0C00FC210020F7B50322CB1C9343083306009D -:103B1C001F000C2B32D20C27B94231D8300000F0E8 -:103B2C00CDF8324D2B681C00002C2ED13900300002 -:103B3C00FFF7C6FF0400431C1ED12C682500002D86 -:103B4C004AD123682900E3183000019300F050F8A3 -:103B5C00019B834243D123680337FF1A03239F43FE -:103B6C0008370C2F00D20C2739003000FFF7A8FFC4 -:103B7C00431C34D02368DF19276013E0002BCBDA09 -:103B8C000C23002533602800FEBD2268D11B20D4F5 -:103B9C000B2917D9E2192760A34211D12A60636857 -:103BAC00116053603000250000F090F807220B35AF -:103BBC00231D9543EA1A9D42E5D05B1BA350E2E717 -:103BCC005A60ECE76268A34201D12A60EAE75A60C6 -:103BDC00E8E723006468A7E72C006D68AFE70C23C7 -:103BEC003000336000F072F8CDE7C046F8210020B9 -:103BFC00002370B5064D040008002B6000F0AAFBF2 -:103C0C00431C03D12B68002B00D0236070BDC04631 -:103C1C000022002003000A7801311A700133002AB7 -:103C2C00F9D17047030030B51D00002A06D00C787E -:103C3C00013A01332C700131002CF5D100219A1876 -:103C4C00934200D130BD19700133F9E730B514003F -:103C5C0005001A009BB0002C05DA8B2303600120B1 -:103C6C0040421BB030BD822368469B0083810023F9 -:103C7C00009104919C4200D0631E02930593012392 -:103C8C0069465B42CB8128001E9B00F089F8431CDF -:103C9C0001DA8B232B60002CE3D00023009A1370E5 -:103CAC00DFE7000007B5009313000A00010002488B -:103CBC000068FFF7CBFF0EBD0800002010B50248CE -:103CCC0000F0F0FA10BDC0460422002010B50248E6 -:103CDC0000F0E9FA10BDC04604220020F0B58E6851 -:103CEC0085B007000C00039201939E423CD89023B0 -:103CFC008A89DB001A4234D00969236860695B1A2F -:103D0C00029303234343DD0FED18019B029801330B -:103D1C001B186D10AB4200D91D00530532D529007C -:103D2C003800FFF7EFFE061E09D10C233B60402341 -:103D3C000120A28940421343A38105B0F0BD029A31 -:103D4C002169FFF761FEA389144A1A4080231343AB -:103D5C00A381029B2661F61826606561019EED1A0F -:103D6C00A560019B9E4200D9019E320003992068F8 -:103D7C0000F0A5FAA36800209B1BA36023689E1982 -:103D8C002660DAE72A00380000F0ACFA061EE0D113 -:103D9C0038002169FFF74AFEC7E7C0467FFBFFFFEB -:103DAC00F0B5A1B003901D008B890F0016001B0607 -:103DBC0011D50B69002B0ED14021FFF7A3FE386003 -:103DCC003861002805D10C23039A0138136021B007 -:103DDC00F0BD40237B61002308AC63612033637624 -:103DEC001033A376079535002B78002B01D0252BAB -:103DFC0047D1AB1B0593B5420CD032003900039868 -:103E0C00FFF76CFF431C00D1AEE06269059B944642 -:103E1C00634463612B78002B00D1A5E001220023C1 -:103E2C005242626004A9543252186E1C2360E36043 -:103E3C00A3601370A36505223178544800F034FA5E -:103E4C00751C00281FD12268D30604D5532304A95E -:103E5C005B1820211970130704D5532304A95B1890 -:103E6C002B21197033782A2B16D0350000210A200B -:103E7C00E3682A786E1C303A092A4ED9002911D1F0 -:103E8C0017E00135B0E7414B2268C01A012383408B -:103E9C0013432E002360CEE7079B191D1B68079167 -:103EAC00002B01DB0B9304E05B42E3600223134322 -:103EBC0023602B782E2B0AD16B782A2B35D1079BBC -:103ECC0002351A1D1B680792002B2BDB0993304E11 -:103EDC0003223000297800F0E7F9002806D04023AF -:103EEC00801B834022680135134323602978062206 -:103EFC0028486E1C217600F0D7F900283CD0264BC0 -:103F0C00002B25D10722079B0733934308330793D4 -:103F1C006369049A9B18636165E74343350001218B -:103F2C009B18A6E701235B42D0E700230A201A0066 -:103F3C000135636029786E1C3039092903D9002BAF -:103F4C00C5D00992C3E74243350001235218F1E76B -:103F5C0007AB00933A002100104B039800E000BF20 -:103F6C000490049B0133D3D1BB890D985B0600D41C -:103F7C002DE7012040422AE707AB00933A002100CD -:103F8C00064B039800F07CF8EAE7C0465050000856 -:103F9C00565000085A50000800000000E93C000888 -:103FAC00F7B5150001938A680B690C0000909342D9 -:103FBC0000DA130022002B6043321278002A01D061 -:103FCC0001332B6023689B0602D52B6802332B60D0 -:103FDC002268062317001F401A4227D023004333C0 -:103FEC001B785A1E93412268920630D42200019904 -:103FFC000098089E4332B047431C25D00623206806 -:10400C002A68E16800250340042B03D18D1AEB4389 -:10401C00DB171D40A3682269934201DD9B1AED1842 -:10402C000027BD4220D1002010E00137E3682A6848 -:10403C009B1ABB42D2DD2200012301990098089EF5 -:10404C001932B047431CF0D101204042FEBD302054 -:10405C00E1184331087021005A1C45310978A21827 -:10406C00433202331170C1E72200012301990098F9 -:10407C00089E1A32B047431CE6D00137D1E7000046 -:10408C00F0B58BB006920A00433207930590049268 -:10409C000A7E0C00109B782A07D8622A09D8002ABD -:1040AC0000D1C1E0582A00D18CE026004236327093 -:1040BC0022E0100063381528F7D8FDF7D5FE16005E -:1040CC001F00F6FFF6FFF6FFF6FF1F00F6FFF6FFE8 -:1040DC00F6FFF6FFA80036009A00F6FFF6FFB900CF -:1040EC00F6FF3600F6FFF6FF9E0026001A684236F1 -:1040FC00111D1960136833700123A7E00868196853 -:10410C000A1D05060BD50D681A60002D03DA2D2348 -:10411C00049A6D421370614B0A2703931BE00D68E0 -:10412C001A604106F1D52DB2EFE70D681968081D2C -:10413C0018602E0601D50D6803E06D06FBD50D68E1 -:10414C00ADB2564B082703936F2A00D002372300D9 -:10415C00002243331A706368A360002B03DB042234 -:10416C00216891432160002D02D1049E002B0CD0BC -:10417C00049E28003900FDF707FF039B013E5B5CA2 -:10418C0033702B0005009F42F3D9082F09D1236807 -:10419C00DB0706D563682269934202DC3023013EBB -:1041AC003370049B9B1B2361079B21000093059894 -:1041BC00069B09AAFFF7F4FE431C4CD10120404298 -:1041CC000BB0F0BD45310A70344A03921A6821686D -:1041DC0020CA1A60080616D5CB0702D5202319432E -:1041EC0021601027002DB2D1202322689A4322602F -:1041FC00ADE7202209680A4322602200782145326B -:10420C001170274AE1E74806E6D5ADB2E4E71A6833 -:10421C000D68101D4969186013682E0601D51960C8 -:10422C0002E06D06FBD519800023049E2361BBE7D9 -:10423C001A68111D1960166800213000626800F0C0 -:10424C0033F8002801D0801B606063682361002371 -:10425C00049A1370A8E72369320006990598079D04 -:10426C00A847431CAAD023689B0715D4099BE06878 -:10427C009842A5DA1800A3E72200012306990598B5 -:10428C00079E1932B047431C98D00135E368099A50 -:10429C009B1AAB42F0DCE9E70025F7E76150000818 -:1042AC007250000870477047C9B28218904201D111 -:1042BC000020704703788B42FBD00130F6E710B535 -:1042CC00884202D98B18984203D3002307E08B5CF9 -:1042DC008354013AFBD210BDCC5CC45401339A42D6 -:1042EC00FAD1F8E7F7B507000E001400002905D144 -:1042FC001100FFF707FC05002800FEBD002A03D1C2 -:10430C00FFF794FB2500F7E700F01BF801908442BF -:10431C0003D835004308A342EED321003800FFF741 -:10432C00F1FB051EE8D0019B22009C4200D91A002B -:10433C0031002800FFF768FB31003800FFF776FBEF -:10434C00DAE70B1F1B68181F002B01DA0B58C0187B -:10435C0070470000044A03001068002802D0C318FC -:10436C00136070470148FAE7082200201022002051 -:10437C00F8B5C046F8BC08BC9E467047F8B5C046B8 -:08438C00F8BC08BC9E46704716 -:10439400141100082A1100085C1100081411000807 -:1043A4001411000814110008141100081411000855 -:1043B4001411000814110008141100081411000845 -:1043C4001411000814110008141100081411000835 -:1043D4001411000814110008141100081411000825 -:1043E4006A110008141100081411000814110008BF -:1043F4001411000814110008941100081411000885 -:104404001411000814110008A8110008B2110008C2 -:10441400181200082E1200083C1200081812000896 -:1044240018120008181200081812000818120008C0 -:1044340018120008181200081812000818120008B0 -:1044440018120008181200081812000818120008A0 -:104454001812000818120008181200081812000890 -:104464004A1200081812000818120008181200084E -:104474001812000818120008741200081812000814 -:104484001812000818120008921200087E12000880 -:10449400FC120008E812000812130008FC120008BD -:1044A400FC120008FC120008FC120008FC120008B0 -:1044B400FC120008FC120008FC120008FC120008A0 -:1044C400FC120008FC120008FC120008FC12000890 -:1044D400FC120008FC120008FC120008FC12000880 -:1044E40020130008FC120008FC120008FC1200084B -:1044F400FC120008FC12000862130008FC120008F9 -:10450400FC120008F8120008F81200084A13000808 -:1045140008140008B2130008B2130008B21300080C -:10452400B2130008B2130008B2130008B213000853 -:10453400B2130008B2130008A6130008A61300085B -:10454400A6130008A6130008A6130008BE1400084A -:10455400A6130008A6130008A6130008A613000853 -:10456400A6130008A6130008A6130008A613000843 -:10457400A6130008A6130008A6130008A613000833 -:10458400A6130008A6130008A6130008A613000823 -:10459400A6130008A6130008A6130008A613000813 -:1045A400A6130008A6130008A6130008A613000803 -:1045B400A6130008A6130008A6130008A6130008F3 -:1045C400A6130008A6130008A6130008A6130008E3 -:1045D400A6130008C61400082C140008A61300082B -:1045E4004A140008A6130008A6130008A61300081E -:1045F400A6130008A6130008A6130008A6130008B3 -:1046040092140008A6130008A6130008A6130008B5 -:10461400A6130008A8140008A6130008A61300088F -:10462400A6130008781400088A1400084E1C000819 -:10463400261C0008261C0008261C0008261C00084E -:10464400261C0008261C0008261C0008261C00083E -:10465400261C0008261C0008901D0008D61C000813 -:10466400261C0008261C0008261C0008261C00081E -:10467400261C0008261C0008261C0008261C00080E -:10468400261C0008261C0008261C0008B41C000870 -:10469400261C0008261C00088E1C0008261C000886 -:1046A4006E1C0008261C0008261C00084E1C00086E -:1046B4006173736572745F6661696C6564000000A0 -:1046C40072784572726F7243616C6C6261636B00E5 -:1046D40074784572726F7243616C6C6261636B00D3 -:1046E4005061747465726E4974657261746F725F3F -:1046F400636865636B5061747465726E00000000DA -:104704003031323334353637383941424344454603 -:1047140073746174654E6F7000000000737461748B -:10472400654E6F7000000000737461746549646CB9 -:104734006500000064697370617463684576656E32 -:10474400740000004253505F646F4368616E6E658D -:104754006C416374696F6E00726573706F6E645739 -:1047640069746841636B4672616D650068616E646B -:104774006C65496E636F6D696E674672616D650045 -:1047840064697370617463684576656E74000000D3 -:10479400737461746549646C65000000010202056C -:1047A40004020A040408080501080A01050A0201B2 -:1047B40005020204040A080405080801010A0A059E -:1047C40073746174655061757365640073746174A6 -:1047D4006550756C73696E67000000004253505F4A -:1047E400747269676765724144430000434C495FD2 -:1047F40068616E646C65436F6E736F6C65496E704F -:1048040075740000486172644661756C745F486138 -:104814006E646C657200000073707572696F7573F5 -:104824004952510054494D315F42524B5F55505FDC -:104834005452475F434F4D5F49525148616E646C17 -:1048440065720000444D41315F4368616E6E656C72 -:10485400315F49525148616E646C6572000000001A -:104864000000000000000000000000000000000044 -:104874000000000000000000000000000000000034 -:10488400010000000200000003000000040000001A -:1048940006000000070000000800000009000000F6 -:1048A4004253505F726567697374657250756C73B7 -:1048B4006544656C65676174650000004253505F30 -:1048C400726567697374657241707054696D65725D -:1048D40048616E646C657200436F6E74726F6C6CC9 -:1048E40065725F696E697400446174614C696E6BD2 -:1048F4005F77616974466F7253796E6300000000DC -:104904000102040802010804050A0A054E6F6E65D7 -:10491400004100000000420000000041420000008D -:1049240043000000004143000000424300000041F6 -:10493400424300004400000000414400000042449F -:10494400000000414244000043440000004143444D -:10495400000042434400004142434400257328259B -:10496400732C202575290A002573282575290A002A -:1049740025733A2073686F727420696E20656C63C6 -:104984006F6E202568750A0050756C736520776911 -:104994006474682069732025687520C2B5730A00A1 -:1049A40070742D3E706163655F6D73203E3D2035EC -:1049B400000000007372632F6273705F73746D3351 -:1049C40032673037312E630070742D3E70756C730E -:1049D400655F77696474685F6D6963726F732021C2 -:1049E4003D20300070742D3E6E725F6F665F70758F -:1049F4006C73657320213D203000000028656C63D2 -:104A04006F6E5B305D202620656C636F6E5B315D7D -:104A140029203D3D203000005465726D696E616C43 -:104A240000000000525454005345474745520000CB -:104A3400436F6E74726F6C6C65725F257320756E54 -:104A44006578706563746564206576656E743A2074 -:104A540025750A0053657175656E6365725F25730C -:104A640020756E6578706563746564206576656E1F -:104A7400743A2025750A0000257320454E54525976 -:104A84000A000000257320455849540A000000001C -:104A94007366203D3D204E554C4C00007372632FCD -:104AA400636F6E74726F6C6C65722E63000000002D -:104AB4007372632F73657175656E6365722E63001F -:104AC4006E6272203D3D2031000000007372632F3E -:104AD400646174616C696E6B2E6300006273702E86 -:104AE400637269746963616C5F73656374696F6E23 -:104AF4005F6C6576656C20213D2055434841525FCB -:104B04004D4158002573282575293A20756E6B6E22 -:104B14006F776E206465766963652069640A0000B6 -:104B24006273702E637269746963616C5F73656329 -:104B340074696F6E5F6C6576656C20213D20300072 -:104B44004672616D65207061796C6F616420746F69 -:104B54006F206269673A20256875206279746573ED -:104B640000000000257328256868752920746F20CB -:104B7400636F6E74726F6C6C65720A00476F742099 -:104B840041434B20666F72206672616D6520256813 -:104B940068750A00476F742053594E43206672614A -:104BA4006D652C207365715F6E723D256868750AAA -:104BB40000000000476F74207061636B65742C20E3 -:104BC4007365715F6E723D256868752C207061791C -:104BD4006C6F61645F73697A653D2568750A0000CE -:104BE400476F74202573206672616D652C20736590 -:104BF400715F6E723D256868752C207061796C6FE9 -:104C040061645F73697A653D2568750A0000000078 -:104C140025733A20626164206672616D650A000042 -:104C240054696D6520253032753A253032753A2540 -:104C34003032750A00000000526563656976656468 -:104C4400207369676E616C2025640A00257328252A -:104C54006875293F0A000000497072696D3D257529 -:104C6400206D412C20566361703D2575206D562CB6 -:104C740020566261743D2575206D560A00000000BF -:104C840021205061747465726E4974657261746F29 -:104C9400725F646F6E6528266D652D3E706929000C -:104CA4005374617274696E670A00000050756C7306 -:104CB4006520747261696E206C6173742070756C08 -:104CC400736520646F6E650A0000000046696E69B2 -:104CD400736865640A000000526573756D696E67D8 -:104CE4000A00000050617573696E670A00000000D5 -:104CF400436F6D6D616E64733A202F3F202F6120E6 -:104D04002F62202F64202F6C202F71202F75202FCD -:104D140076202F30202F312E2E2F390A000000004C -:104D24005475726E696E672056636170204F4646F3 -:104D34000A00000053657474696E672056636170DD -:104D440020746F20256875206D560A005475726EA4 -:104D5400696E672056636170204F4E0A00000000A0 -:104D640025730A004669726D776172652056302E8C -:104D740032342D626574610A00000000556E6B6E5A -:104D84006F776E20636F6D6D616E6420272F2563CE -:104D9400270A00002573282725732729000000000F -:104DA40025732C20494353523D307825780A00005E -:104DB40020205469703A2068616C74204350552C4B -:104DC400206368616E6765206775617264204020A6 -:104DD400257020746F20302C207468656E207374E5 -:104DE40065702E0A0000000050742053523D307844 -:104DF40025780A00434331202568750A0000000025 -:104E0400434332202568750A0000000041444320D2 -:104E14006F76657272756E0A00000000414443208B -:104E240072656164790A0000414443206368616EDD -:104E34006E656C20636F6E66696720726561647964 -:104E44000A00000041444320454F430A000000008B -:104E540041444320454F530A00000000414443317C -:104E64002D3E4953523D307825780A0025732C2075 -:104E740054454946310A000025732C204953523DBC -:104E8400307825780A000000496E697469616C699C -:104E940073696E672E2E2E0A000000004465764961 -:104EA400643D307825782C2053797374656D436F95 -:104EB4007265436C6F636B3D25750A004C4C5F4112 -:104EC40044435F5245475F496E6974206572726F4F -:104ED400723D25750A00000025733A205053433D66 -:104EE40025750A006D652D3E6368616E6E656C5FA5 -:104EF4006664203C2030000043616E206F6E6C7944 -:104F040020757365206F6E652073657269616C200E -:104F1400706F727420617420612074696D652C2037 -:104F2400666F72206E6F770A0000000020253368D8 -:104F340075202A207B25732C2025737D0A00000010 -:104F4400546F74616C206E756D626572206F66209B -:104F540070756C7365733A2025750A005374617219 -:104F640074696E67204E656F444B210A000000008F -:104F7400507573682074686520627574746F6E2050 -:104F8400746F20706C6179206F7220706175736525 -:104F940021203A2D290A0000436F6E736F6C653A25 -:104FA40020272573270A0000456E64206F6620734E -:104FB400657373696F6E0A00427965210A00000007 -:104FC400415353455254494F4E204641494C454460 -:104FD40020282573203A202575292025730A0000EE -:104FE400424144004E4F4E450041434B00004E4168 -:104FF4004B000053594E430044415441004F505418 -:105004005300000073746F7261676520213D204E68 -:10501400554C4C006D616F6C69622F7372632F6520 -:1050240076656E7471756575652E63006576656E5B -:10503400745F73697A65203D3D20414F4576656E06 -:10504400745F73697A65286576742900232D302B83 -:105054002000686C4C006566674546470030313275 -:1050640033343536373839414243444546003031CC -:10507400323334353637383961626364656600002B -:0850840084D1FF7F0100000050 -:04508C00E500000833 -:04509000BD00000857 -:105094000024F400040000000C00002000000000C4 -:1050A40000000000000000000000000000000000FC -:1050B40000000000000000000000000000000000EC -:1050C40000000000000000000000000000000000DC -:1050D40000000000000000000000000000000000CC -:1050E40000000000000000000000000000000000BC -:0C50F400000000000000000000000000B0 -:04000005080023A12B +:10029C000000002010E000E000ED00E010B5034984 +:1002AC000348103103F036F910BDC0460C49000864 +:1002BC00A84B000810B50A0002490348243103F08A +:1002CC0029F910BD0C490008B84B000810B50A00FC +:1002DC0002490348343103F01DF910BD0C490008E4 +:1002EC00B84B00084B1E9941012310B54942994364 +:1002FC00002200230E3103F073FB10BD70B5060015 +:10030C0014001D0082B0E0360092019332687368CD +:10031C00A41A9D41002D04D1074B9C4201D802B078 +:10032C0070BD08236A46132103F05AFB009B019C05 +:10033C0033607460F3E7C046BFE1E400F0B5D64625 +:10034C004F4646460300C0B5A533FF33DD89020096 +:10035C000020002D04D1E0BCBA46B146A846F0BD41 +:10036C00987ADE889979002800D086E01C7A587A31 +:10037C00013C241A0120E4B298724900D2204000BA +:10038C0012581F7B5018565CDA7A45789146C82A69 +:10039C0000D983E01100794803F0BCF801235B42DB +:1003AC004B449846042F00D8A1E04B46002B05D1B6 +:1003BC00734B744A1800744903F0BCF8002C00D13C +:1003CC008AE07B01DB1B9801C01AFA23C000C0191C +:1003DC0080019B04984279D36C48002206216C4B17 +:1003EC00013CD8621C635A621A698A431A6135420D +:1003FC0000D0A1E00523334200D183E04246022124 +:10040C00634B35435A63DA680A43DA605A69013937 +:10041C000A435A614022ED4301205E4B9A61EBB2D4 +:10042C00054200D0A1E05C4A02219062042208201F +:10043C0019401A400340002900D092E0022056498E +:10044C008862002A74D10421534A9162002B55D042 +:10045C002022514B9A6100235221504A4C4C53524A +:10046C006363A36390693439002203F0B9FA012263 +:10047C0023680120134323606DE701319F88C8B2C4 +:10048C00B84232D041005C7A187A0134E4B20138B7 +:10049C005C72844257D0002098726FE7C8213748AD +:1004AC0003F038F8C7239846042F87D8344B3C4ABE +:1004BC0018003C499A4603F03DF8002C0ED07B0105 +:1004CC00DB1B9801C01AC000C0198001FA218900F9 +:1004DC0001F05AFD013880E7294B9A46D22150464B +:1004EC00314A890003F026F86BE70021CBE7244B57 +:1004FC002B4A18002B4903F01DF856E72022264BF7 +:10050C009A62A8E742460421214B35439A63DA6884 +:10051C000A43DA605A6903390A435A61002D1ED125 +:10052C0040221C4B9A621C4B3E3A99619A610823FB +:10053C000421194A916189E762211C4A1048FF3154 +:10054C0002F0F8FF56E700200136B6B25872B742F7 +:10055C0001D0DE809FE7013DD880DD819BE7ADB205 +:10056C0058E702200C4988616BE7082402213C3AC9 +:10057C0019401A402340084CA0615CE7C04B0008AE +:10058C00EC4B0008004C000847030000FEFF000085 +:10059C00002C014000080050000400508C0000208A +:1005AC00D84B0008460300001C4C0008344C0008D3 +:1005BC00032310B5104C114A23616361104BA261E7 +:1005CC00E36180239B0123620023A3626362E362E5 +:1005DC0022660C4A0C49583262661022E01DA26653 +:1005EC002367E366636703F011FC2000074903F0FF +:1005FC000DFC2023A37110BD2C210020504C0008B1 +:10060C002C0100208C0000205C4C0008604C000881 +:10061C00F8B54746CE4680B58368C56899465B1BDE +:10062C009846436804000E0017005819904507D9E6 +:10063C00ED1903F0E5FAE560C0BCB946B046F8BD6B +:10064C00424603F0DDFA4B463100ED19ED1A2A0053 +:10065C006068414403F0D4FAE560EDE7F0B5574625 +:10066C004E464546DE46E0B5354B83B09A461B7880 +:10067C00060015000191002B56D07700BB19DB004A +:10068C0053441A6F9046DA6E9146904525D8130064 +:10069C0042462C009B1A9D4209D8002C09D12000FF +:1006AC0003B0F0BCBB46B246A946A046F0BD1C1E2A +:1006BC00F5D0A146BB19DB005344596E22004144CE +:1006CC000198A04403F09CFA4C46002CE7D043461A +:1006DC00BF19FF0057443B67E1E742469B6E2C0075 +:1006EC009B1A9D4227D8BB19DB0053449B46596E7D +:1006FC0022004144019803F083FA5B469B6EA044B0 +:10070C002D1B434519D04B4642469B1A99464D45E5 +:10071C000DD8002DD9D0019BA1469C46A44463461C +:10072C002C000193A944C5E7FFF742FFA5E74D460E +:10073C00002DCAD0EFE71C00D5E700239846E6E76A +:10074C002C210020F8B557464E46DE4645468946D4 +:10075C00411CE0B517004A0052180300D200924623 +:10076C00344A5E0093461000F618F6005E44F36AB5 +:10077C0050449846012B0CD0022B27D0002B17D0BD +:10078C00002398464046F0BCBB46B246A946A0465C +:10079C00F8BDB36A726A934247D9013B9B1AB846BB +:1007AC009F4200D9984642464946FFF731FFE9E798 +:1007BC00B36A726A934233D9013B9B1A9F42E1D8C8 +:1007CC003A004946FFF724FFB846DBE70023746A7A +:1007DC0098461DE0013B356A1B1BBB4200D93B0010 +:1007EC002D1B9D4200D91D005B46534458682A00BE +:1007FC004946001903F004FA336A6419E31A5A1EC5 +:10080C0093415B421C40A844A9447F1B7462B9D03D +:10081C00B36AA342DED8356A5B19013B1B1BDCE7CC +:10082C00316A5B18013B9B1AC8E7316A5B18013BC4 +:10083C009B1AB4E72C210020F0B5C64600B585689C +:10084C0043686A1C04009A4207D80368595515007E +:10085C00C36882600133C36043689D4202D080BC90 +:10086C00B846F0BD2368276998460E4B1B78002BC1 +:10087C0015D0EFF31086012181F310882A00414630 +:10088C003800FFF75FFF86F31088A368834203D01C +:10089C0001235B42E360E2E70023A360DFE7FFF79D +:1008AC0087FEE6E72C210020F0B54E46454657461C +:1008BC00DE46E0B583B09A460C9B80460E001500D0 +:1008CC009946914200D27DE008000127290001F0F1 +:1008DC005BFB01378542F9D9574500D257460123B6 +:1008EC000D9A1A4001920D9A13424ED14B46002B91 +:1008FC004BD0130020249B075ED44F4545D20123D7 +:10090C005B429C4621004046E144FFF795FF43467D +:10091C00DB68002B32DB4B46002BEED15346012417 +:10092C00012B07D901235B429C46E24453466C439E +:10093C00012BF7D82100300001F026FB8542F5D9B8 +:10094C00214B9B4644239A4606E02900200001F0E7 +:10095C001BFBAC420FD304003000210001F09AFBCA +:10096C00534658440E00C15C4046FFF765FF4346B2 +:10097C00DB68002BE9DA019B002B19D103B0F0BC2A +:10098C00BB46B246A946A046F0BD4346DB68002BE9 +:10099C00C4DAF3E74F45F1D201235B429C46202198 +:1009AC004046E144FFF748FF4346DB68002BE5DB9C +:1009BC004B46002BEED1E1E753465C425C412401EF +:1009CC0020349AE7012787E70C49000810B5080086 +:1009DC0003F0DAF8034902005431034802F09AFD9F +:1009EC00002010BD0C490008684C000810B5080028 +:1009FC0003F0CAF8034902006031034802F08AFD93 +:100A0C00002010BD0C4900088C4C000810B50800E3 +:100A1C000C0003F0B9F801280CD0022810D02000EB +:100A2C0003F0B2F8094902006C31094802F072FD7A +:100A3C00002010BD054907486C3102F06BFDF7E74B +:100A4C00024905486C3102F065FDF1E70C490008DC +:100A5C00684C0008B04C0008C84C0008DC2310B5EA +:100A6C000400C05802F0B8FF002801D1002010BDCE +:100A7C00D823E05802F0B0FF0028F7D0200002F095 +:100A8C00ABFFF4E770B5D026760083590400984785 +:100A9C00051E1BD0A65903F059F801002000B047E1 +:100AAC00002804D048210A4A0A4802F043FDD0230A +:100ABC005B00E55003F03CF801002000A84700283B +:100ACC0004D04B21024A034802F034FD70BDC046ED +:100ADC00DC4C0008E84C000870B5D0267600835931 +:100AEC0004009847051E1DD0A65903F02FF80100ED +:100AFC002000B047002805D00C210B4A0B48FF31D1 +:100B0C0002F018FDD0235B00E55003F011F8010052 +:100B1C002000A847002805D08721034A0348490034 +:100B2C0002F008FD70BDC046DC4C0008FC4C00080F +:100B3C00F8B50600D03605000122300002F0C4FDE5 +:100B4C00012804D0BD21244A244802F0F3FC72B6DB +:100B5C00BFF34F8FBFF36F8F4827214CE35DFF2B03 +:100B6C002CD0482201333000A35402F027FD00287A +:100B7C000FD04825635D002B18D04822013BDBB217 +:100B8C00A354002B04D1BFF34F8FBFF36F8F62B60A +:100B9C00F8BDE523EA56012A17D048251149124819 +:100BAC00783102F0B7FC635D002BE6D1A6210F4A29 +:100BBC000F48890002F0BEFC635DDEE70D4A0E496A +:100BCC000B4802F0B7FCE35DCBE780210B4A1368BE +:100BDC008B431360CDE7C0460C4D0008184D000840 +:100BEC008C0000200C490008504D00086C4D00088A +:100BFC00EC4B0008284D0008910200000044004016 +:100C0C00F0B50400E425E020C646E626635D00B599 +:100C1C005A1C62552258D154615DA35B994206D38C +:100C2C0027580FD0E822A05A1B18994203D0002055 +:100C3C0080BCB846F0BDE42300223800E25402F038 +:100C4C0071FEF5E7380002F049FE00280DD038009F +:100C5C0002F074FEE8239846E05280230100DB008A +:100C6C00984215D8615DA35BDEE7635D013BDBB2A7 +:100C7C006355002BDBD00023E025E4306259D118FA +:100C8C004978D154225C0133DBB29A42F6D8CEE7D4 +:100C9C00034802F03FFC00234246A352C7E7C0467C +:100CAC008C4D0008F0B5CE464746E62380B583B0A0 +:100CBC00C65A6B46F41DE408E4001B1B02AF9D46AC +:100CCC0002AB994688460B000092050000220121D8 +:100CDC00484602F093FD2A4942460C31294802F05D +:100CEC0019FC72B6BFF34F8FBFF36F8F4823264C9E +:100CFC009846E35CFF2B34D0482228000133A354E0 +:100D0C0049463200D03002F061FC002814D148254D +:100D1C00635D002B1DD04822013BDBB2A354002B9A +:100D2C0004D1BFF34F8FBFF36F8F62B6BD4601B0D6 +:100D3C00C0BCB946B046F0BDE523EA56012A18D02E +:100D4C00482512491248783102F0E4FB635D002B10 +:100D5C00E1D1A6210F4A1048890002F0EBFB635D3C +:100D6C00D9E70E4A0E490C4802F0E4FB4346E35C1B +:100D7C00C2E780210B4A13680B431360C7E7C046D8 +:100D8C008C490008B04D00088C0000200C4900086C +:100D9C00504D00086C4D0008EC4B0008284D000825 +:100DAC0091020000004400400FB4F0B5DE465746F7 +:100DBC0045464E468023E0B599B002AFF91820C9DC +:100DCC002800796002F09CFB040008202A003D18E2 +:100DDC00502128007B6803F061F800280BDC200010 +:100DEC00BD4617B0F0BCBB46B246A946A046F0BC07 +:100DFC0008BC04B018478C23E622334D0130EB5865 +:100E0C0080B29A5A9846914681444B466E46D91DFB +:100E1C00C908C900731A9D4602AB9A46EA2243469A +:100E2C009A5C019008203B18009304210023504643 +:100E3C0002F01CFD72B6BFF34F8FBFF36F8F4823C8 +:100E4C009B46EB5CFF2B30D0482240460133AB5421 +:100E5C0051464A46D03002F0B9FB002811D1482344 +:100E6C009846EB5C002B17D04822013BDBB2AB540D +:100E7C00002B04D1BFF34F8FBFF36F8F62B6B54613 +:100E8C00ADE7E5234246D256012A16D00F49104849 +:100E9C00783102F03FFBE2E7A6210E4A0E488900AA +:100EAC0002F048FB4346EB5CDEE70C4A0C490A486F +:100EBC0002F040FB5B46EB5CC6E78021094A1368F5 +:100ECC000B431360CBE7C0468C0000200C49000894 +:100EDC00504D00086C4D0008EC4B0008284D0008E4 +:100EEC00910200000044004070B5050008000C00A1 +:100EFC0002F04AFEC31FDBB2142B03D824499B001B +:100F0C00CB589F46234902002031234802F002FBB4 +:100F1C0070BD200002F03AFE046820482100FFF763 +:100F2C0043FF022CF4D1E8230022EA54F0E7DC233F +:100F3C000022E8581A21002302F052FDE8E72000B5 +:100F4C0002F024FE002341680068154A01F0BCF948 +:100F5C0004003C21200001F09DF820000E003C21F3 +:100F6C0001F012F83C2101F095F80D00E121200070 +:100F7C00090101F009F8330001002A000948FFF7C4 +:100F8C0013FFC5E7DC232100E85802F06DFDBFE735 +:100F9C008C4500088C490008F44D0008E04D000811 +:100FAC0040420F00C84D000870B5214C05002100CF +:100FBC00204802F0AFFA50231F4AD4521F4B204A4C +:100FCC005A61DA225200AB5C0133DCB2AC54032C14 +:100FDC0021D01C4E2301F318196B1B48FFF7E4FEBC +:100FEC00D2212301F218506B490068506D18118FF3 +:100FFC00928F3036EA815022EA720022F318A980CF +:10100C00997ADB7A29732B72EA80002B09D00023A2 +:10101C006B72AB7270BD002300240C49094EAB54AB +:10102C00DBE74A210A4A0B4802F084FAEFE7C04694 +:10103C00C40900000C4E00088C0000200074004015 +:10104C00710D00008C490008244E0008004E000869 +:10105C00404E0008584E000870B5050008000C0002 +:10106C0002F092FD202803D8344A800013589F4682 +:10107C00200002F089FD324902006031314802F053 +:10108C0049FA002070BD2E492F48603102F042FA17 +:10109C000020F7E72A492D48603102F03BFA002086 +:1010AC00F0E7200002F072FD294A4188838800880D +:1010BC0053434A43C10109180901091A9B0B2548DE +:1010CC00920B890AFFF770FE0020DBE7DA235B0046 +:1010DC00E95C1B4A09015018446B103BEC50ED18AD +:1010EC00038FAB80130030335B189A7ADB7A2A7348 +:1010FC00828F2B72EA815022EA720022EA80002B46 +:10110C0016D0002314486B72AB72FFF74DFE1348D8 +:10111C00B8E72800FFF748FF0020B3E7104802F0BB +:10112C00F9F90020AEE70F48FFF73EFE0020A9E7D3 +:10113C004A210D4A0D4802F0FDF9E2E7E0450008AE +:10114C008C4900088C4C00086C4E0008804E00083E +:10115C004DCE0000944E0008BC4E000859120008F9 +:10116C00C84E0008E84E0008404E0008584E0008D3 +:10117C0070B5050008000C0002F006FD202803D80D +:10118C00264A800013589F46200002F0FDFC24499B +:10119C0002006C31234802F0BDF9002070BD2049DB +:1011AC0021486C3102F0B6F90020F7E71C491F48C2 +:1011BC006C3102F0AFF90020F0E7200002F0E6FC01 +:1011CC001B4A41888388008853434A43C10109184C +:1011DC000901091A9B0B1748920B890AFFF7E4FDCA +:1011EC000020DBE71448FFF7DFFD1448D6E72800A2 +:1011FC00FFF7DAFE0020D1E7D9235B00EB5A002B76 +:10120C0006D10F48FFF7D0FD0E48C7E70020C5E711 +:10121C000D48FFF7C9FD0020C0E7C0466446000832 +:10122C008C4900088C4C0008F44E0008004F000854 +:10123C004DCE0000944E00080C4F000859120008C7 +:10124C00E84E000865100008184F000870B505003E +:10125C0008000C0002F098FC202803D8234A8000D8 +:10126C0013589F46200002F08FFC21490200783170 +:10127C00204802F04FF9002070BD1D491E487831FE +:10128C0002F048F92800FFF759F80020F4E7184954 +:10129C001A48783102F03EF90020EDE72800FFF7FC +:1012AC004DF803000020002BE6D11548FFF77CFD1C +:1012BC001448E1E7200002F069FC134A4188838856 +:1012CC00008853434A43C10109180901091A9B0BB1 +:1012DC000E48920B890AFFF767FD0020CCE7280027 +:1012EC00FFF762FE0020C7E70948C5E7E84600089B +:1012FC008C4900088C4C0008F44E0008004F000884 +:10130C00E84E0008651000084DCE0000944E000811 +:10131C007D11000870B50400303CE3B282B0462B5E +:10132C0003D85A4A9B00D3589F4601005848FFF7F0 +:10133C003BFD02B070BD8026564DB6006B69334242 +:10134C0003D1554802F0E6F8AE61FA239B005C43EA +:10135C00A4B22100514802F0DDF85023504AD45277 +:10136C00504A231C944200D98DE085229BB2D200B6 +:10137C00934200D285E04B4AD21A4B4B5343802206 +:10138C0012019446494A63441B0B5361D1E7502325 +:10139C00434DEC5A434BC83C9C4216DC8523DB0086 +:1013AC009C4200DA1C0021003C4802F0B3F85023A8 +:1013BC00EC523C4B1C1B3C4B6343E0E75023384D39 +:1013CC00EC5A384BC8349C42E8DD1C00E6E780221E +:1013DC003749D20348690304134040228243134324 +:1013EC008B61A6E788242E4D002300220C2128595E +:1013FC0002F0F6FA002300220E21285902F0F0FA2E +:10140C0097E72C48FFF7D0FC93E70223244A01937B +:10141C008633D0580721843B01AA02F0E1FA88E711 +:10142C0088231F4A1B21D0580023002202F0D8FA2F +:10143C007FE72148FFF7B8FC7BE7204920480831BB +:10144C0002F068F81F4A204993680B4004210B43B3 +:10145C0093606EE780250F4CAD0063692B420BD176 +:10146C0000210E4802F056F8502300210C4AD152AC +:10147C000E4B164A5A615CE7154802F04BF8A56210 +:10148C00EEE7130077E7131C6FE7C0466C470008C4 +:10149C00984F000800040050684F00080C4E0008DC +:1014AC008C00002049270000490700000074004010 +:1014BC0000080050804F0008244F00080C4A000818 +:1014CC007C4F000800240140E8FFFF7FFF0F000065 +:1014DC00544F0008F8B54746CE4680B5804600AF5D +:1014EC0008000C0002F01EFA05002000012D3CD073 +:1014FC0002F01CFA8146032D66D0200002F01EFA81 +:10150C000600042D0DD0280002F06AF9330001000A +:10151C004A46344801F0FEFFBD46C0BCB946B04651 +:10152C00F8BD200002F002FA8146200002F006FA13 +:10153C004946020005002C4801F0ECFF200002F0A7 +:10154C00EDF94946020006004046FFF7ABFB2000D0 +:10155C0002F0FAF90100002E15D04246C823D058EB +:10156C000433D3582A009847D6E702F0E3F9040075 +:10157C0001001E4801F0CEFF0720EA234246013449 +:10158C000440D454C8E72B006C460833DB08DB005E +:10159C00E31A9D46E8462A00684602F03FFC4346A3 +:1015AC005E55022D08D11B782F2B05D14346587858 +:1015BC00FFF7B0FEA546AFE70D4942460D4818317E +:1015CC0001F0A8FFA546A7E701000B4801F0A2FF18 +:1015DC00200002F0A3F9494602004046FFF762FBE7 +:1015EC009AE7C04620500008E84F0008B04F0008AA +:1015FC000C4A000814500008C84F000870B5EB25C1 +:10160C00435D0400002B0ED10A2905D0C9B2FFF7A7 +:10161C00F7FA032818D070BD01220339FFF742FBFB +:10162C0001236355F7E7C9B2FFF7EAFA0028F2D0B5 +:10163C00E023E558280002F089F9002813D029008E +:10164C002000FFF747FFE6E7E023E558280002F00B +:10165C007DF900280DD029002000FFF73BFFEB237C +:10166C000122E254D7E706490648303101F052FF17 +:10167C00D1E703490348303101F04CFFEFE7C04696 +:10168C000C4A000850500008112110B50E4A0F48A2 +:10169C00136A8B43136280220D4B92009A62DA3AE2 +:1016AC00FF3A9A610B490C4B44315A6801F032FFF6 +:1016BC000A4C012321000A481031237401F02AFF3F +:1016CC00237C002BFCD110BD002C01406050000885 +:1016DC00000400500C4A000800ED00E00C01002052 +:1016EC0070500008024A5369013353617047C04679 +:1016FC000C01002010B5EFF3058203490348583163 +:10170C0001F008FF10BDC0460C4A0008B84B000899 +:10171C00012210B5144B19690A421DD00620196814 +:10172C0091431960D9688143D960196901308143AB +:10173C00196140210D4B99620D4B20399A61013290 +:10174C009A6102329A611C329A610A4B00229869A2 +:10175C00002302F045F910BD07491A6964310748A6 +:10176C0001F0D8FEF7E7C046002C014000080050FD +:10177C00000400508C0000200C4A0008A8500008FF +:10178C00022210B5244BD9680A4202D019690A42C8 +:10179C0035D1224C0422204BD9680A4202D0196957 +:1017AC000A4220D152221C4BA25A1B6B01339A4283 +:1017BC0012D0194B1A491A690A4200D110BD1B6983 +:1017CC001848194001F0A6FEEFF305821649174898 +:1017DC00583101F09FFEF1E7002300221F21A06980 +:1017EC0002F0FEF8E5E7196911489143196152239B +:1017FC00E15A013189B2E15201F08CFED2E719694C +:10180C00064C914319615223E15A0A48013189B2BD +:10181C00E15201F07FFEBDE7002C01408C0000205E +:10182C00E0FF0C00A85000080C4A0008B84B000858 +:10183C00C0500008B4500008F8B580230222DB0524 +:10184C0019690A420FD101211A69114203D01A6990 +:10185C008A431A61F8BDEFF30582284928485831AC +:10186C0001F058FEF6E71969264C91431961266878 +:10187C00676872B6BFF34F8FBFF36F8F4825635DF8 +:10188C00FF2B33D048215A1CD2B2625480211E4DFA +:10189C00C905A869496AA961884202D9E969013177 +:1018AC00E961002A17D04822A354002B04D1BFF3BE +:1018BC004F8FBFF36F8F62B6EB69AA6999079208D5 +:1018CC000A439B083800B0478022D205536BA168AD +:1018DC005B185363BEE7A6210C4A0D48890001F042 +:1018EC0029FE4823E35C013BDBB2DCE7094A0A49E9 +:1018FC00074801F01FFE635DC4E7C0460C4A0008B0 +:10190C00B84B00088C0000200C0100206C4D000826 +:10191C00EC4B0008284D00089102000070B54825DA +:10192C000B4C635D002B0BD04822013BDBB2A35464 +:10193C00002B04D1BFF34F8FBFF36F8F62B670BD16 +:10194C00A621044A0448890001F0F4FD635DEBE72D +:10195C008C0000206C4D0008EC4B000870B572B682 +:10196C00BFF34F8FBFF36F8F4825074C635DFF2B81 +:10197C0003D048220133A35470BD044A04490548DE +:10198C0001F0D8FD635DF4E78C000020284D0008C1 +:10199C0091020000EC4B0008102210B50E4BD968D8 +:1019AC000A4211D119690A4207D1EFF305820B499A +:1019BC000B48583101F0AEFD10BD0A4800211A61E8 +:1019CC000C3001F0D3FDF7E706480121DA600C304A +:1019DC0001F0CCFDF0E7C046001802400C4A0008AC +:1019EC00B84B00088C00002010B5EFF305820349BA +:1019FC000348583101F08EFD10BDC0460C4A00085A +:101A0C00B84B0008102210B51C4B19680A421AD1A9 +:101A1C00012219680A4211D18022196892011142DF +:101A2C0022D1042219680A4223D1082219680A42D9 +:101A3C000ED01A60124801F06DFD03E011481A60D7 +:101A4C0001F068FD10BD1A600F4801F063FDF9E765 +:101A5C0019680E4801F05EFDEFF305820C490D4844 +:101A6C00583101F057FDEDE71A600B4801F052FDBB +:101A7C00E8E71A60094801F04DFDE3E70024014056 +:101A8C0010510008DC500008CC5000081C51000814 +:101A9C000C4A0008B84B0008E85000080451000834 +:101AAC00022310B5134C2268134218D10823226864 +:101ABC00134208D1104922681048043101F02AFD64 +:101ACC000423636010BD0C49636004310C4801F0C1 +:101ADC0021FD01210B4A13680B431360F2E763608D +:101AEC00094B14211A0098694A32062301F078FF39 +:101AFC00E8E7C046000002408C4A00083851000854 +:101B0C002C510008080002408C00002010B50D4B31 +:101B1C00DA69920610D4DB691B0605D50A4B0B4912 +:101B2C00986B5B6B984710BDEFF305820849094829 +:101B3C00583101F0EFFCF6E70348596A1C3001F00C +:101B4C0015FDF0E7004400408C00002028440040C4 +:101B5C000C4A0008B84B000870B572B6BFF34F8F33 +:101B6C00BFF36F8F48241B4D2B5DFF2B2BD04821CF +:101B7C005A1CD2B26A548021174CC905A069496A13 +:101B8C00A161884202D9E1690131E161002A0FD0DB +:101B9C004822AB54002B04D1BFF34F8FBFF36F8F90 +:101BAC0062B6E169A0698B0780081843890870BD8B +:101BBC00A6210A4A0A48890001F0BCFC4823EB5CC8 +:101BCC00013BDBB2E4E7074A0749054801F0B2FCE8 +:101BDC002B5DCCE78C0000200C0100206C4D000824 +:101BEC00EC4B0008284D0008910200007047C046DD +:101BFC0010B50B00EFF31084012181F3108819004C +:101C0C00FEF72CFD84F3108810BDC04610B582B0D1 +:101C1C00EFF31084012181F310886B460122D91D4A +:101C2C000020FEF71BFD84F31088012803D16B46BE +:101C3C00D87902B010BD01204042FAE710B5FEF78A +:101C4C00B7FC10BDF0B5DE464E4657464546E0B5EE +:101C5C009BB00AAB0593402306930023079308938C +:101C6C0001330C0091469B460290099005E005A8B3 +:101C7C00FEF7E2FD0898002859DB21780134002991 +:101C8C005CD02529F3D122001378002602250820E8 +:101C9C00140021392D2B0CD02D2B0ED8232B11D029 +:101CAC002B2B00D05FE10E430132137814002D2B47 +:101CBC00F2D15B4601321E43F7E7302B05D12E43A0 +:101CCC000132F2E706430132EFE71A00303A002501 +:101CDC00092A0DD81A00AB005B1901345B009B1864 +:101CEC002278303B1D001300303B092BF3D9130035 +:101CFC002E2B00D1D8E000272378042101E0637853 +:101D0C0001341A008A43682AF9D0252B07D0583B96 +:101D1C00DBB2202B07D8954A9B00D3589F46252130 +:101D2C0005A8FEF789FD089801340028A5DA1BB038 +:101D3C00F0BCBB46B246A946A046F0BD08980028A8 +:101D4C00F5DD079C002C00D0C6E00019EFE74B46F0 +:101D5C0049461B6805A81A1D0A60196810223B0029 +:101D6C0001960095FEF7A0FD01340898DDE74B467F +:101D7C0049461B6805A81A1D0A6019680A223B000F +:101D8C0001960095FEF790FD01340898CDE74B467F +:101D9C0049461B681A1D0A601D6805E005A8FEF778 +:101DAC004BFD08980028BFDB297801350029F5D1B7 +:101DBC000898B9E74B4649461B6805A81A1D0A60E6 +:101DCC00196800230193083310220093FEF76CFD71 +:101DDC0001340898A9E74B4649461B681A1D0A604E +:101DEC001B68DA1798180393012350409A46092868 +:101DFC000DDDAA46A0461D000A210400013500F0A5 +:101E0C0079F9632CF8DC2B00444655469A46B846C3 +:101E1C00574575D3002D36D0039B002B74DB73070D +:101E2C0072D4B30701D5002F2DD05B4633422AD193 +:101E3C00002D28D04346A0461C00AC4220D205A859 +:101E4C002021FEF7F9FC0898013D002800DA87E014 +:101E5C00002DF2D1230044469846039B002B58DBFF +:101E6C00730761D403233340022B62D005A83B00D7 +:101E7C000A22039901960095FEF716FD089853E780 +:101E8C0023004446984608980028E6DA01344CE7CB +:101E9C004B4649461B6805A81A1D0A601978FEF7BF +:101EAC00CBFC0134089840E76378621C1900303988 +:101EBC0014000027092900D91FE71A00BB00DB1901 +:101ECC0001345B009B182278303B1F001300303B21 +:101EDC00092BF3D9130010E7254B1B78002B15D0D9 +:101EEC00EFF31085012181F31088220002980AA9D2 +:101EFC00FEF728FC85F310880898079C001916E754 +:101F0C00D046002DBFD087E7013D8AE7FEF750FB96 +:101F1C00E6E75B422D2105A80393FEF78DFC08989C +:101F2C0000289FDA013400E72B2105A8FEF784FC7A +:101F3C00F5E7002F9AD10AE0A8450CD205A830216C +:101F4C00FEF77AFC0898013D002800DAECE6002D3B +:101F5C00F2D100258AE70898002887DA0134E4E6F4 +:101F6C0044460134E1E60025C5E6C0468848000831 +:101F7C002C21002003B47146490840004900095E39 +:101F8C0049008E4403BC7047002243088B4274D333 +:101F9C0003098B425FD3030A8B4244D3030B8B425E +:101FAC0028D3030C8B420DD3FF22090212BA030C67 +:101FBC008B4202D31212090265D0030B8B4219D348 +:101FCC0000E0090AC30B8B4201D3CB03C01A524168 +:101FDC00830B8B4201D38B03C01A5241430B8B42B0 +:101FEC0001D34B03C01A5241030B8B4201D30B0399 +:101FFC00C01A5241C30A8B4201D3CB02C01A5241C0 +:10200C00830A8B4201D38B02C01A5241430A8B4282 +:10201C0001D34B02C01A5241030A8B4201D30B026B +:10202C00C01A5241CDD2C3098B4201D3CB01C01A85 +:10203C00524183098B4201D38B01C01A524143098F +:10204C008B4201D34B01C01A524103098B4201D37D +:10205C000B01C01A5241C3088B4201D3CB00C01AEA +:10206C00524183088B4201D38B00C01A5241430862 +:10207C008B4201D34B00C01A5241411A00D2014687 +:10208C00524110467047FFE701B5002000F006F8FA +:10209C0002BDC0460029F7D076E770477047C046AE +:1020AC0010B5002903D100F007F8203002E0080039 +:1020BC0000F002F810BDC0461C2101231B049842FD +:1020CC0001D3000C10391B0A984201D3000A0839BD +:1020DC001B09984201D30009043902A2105C401874 +:1020EC007047C04604030202010101010000000018 +:1020FC000000000003460B437FD4002243088B42B0 +:10210C0074D303098B425FD3030A8B4244D3030B72 +:10211C008B4228D3030C8B420DD3FF22090212BA37 +:10212C00030C8B4202D31212090265D0030B8B42B3 +:10213C0019D300E0090AC30B8B4201D3CB03C01A9D +:10214C005241830B8B4201D38B03C01A5241430B78 +:10215C008B4201D34B03C01A5241030B8B4201D368 +:10216C000B03C01A5241C30A8B4201D3CB02C01AD3 +:10217C005241830A8B4201D38B02C01A5241430A4B +:10218C008B4201D34B02C01A5241030A8B4201D33A +:10219C000B02C01A5241CDD2C3098B4201D3CB01E1 +:1021AC00C01A524183098B4201D38B01C01A524190 +:1021BC0043098B4201D34B01C01A524103098B4294 +:1021CC0001D30B01C01A5241C3088B4201D3CB007F +:1021DC00C01A524183088B4201D38B00C01A524162 +:1021EC0043088B4201D34B00C01A5241411A00D212 +:1021FC0001465241104670475DE0CA0F00D049427B +:10220C00031000D34042534000229C4603098B42EA +:10221C002DD3030A8B4212D3FC22890112BA030A72 +:10222C008B420CD3890192118B4208D389019211F4 +:10223C008B4204D389013AD0921100E08909C30979 +:10224C008B4201D3CB01C01A524183098B4201D37B +:10225C008B01C01A524143098B4201D34B01C01A66 +:10226C00524103098B4201D30B01C01A5241C308DE +:10227C008B4201D3CB00C01A524183088B4201D34D +:10228C008B00C01A5241D9D243088B4201D34B0068 +:10229C00C01A5241411A00D20146634652415B10AA +:1022AC00104601D34042002B00D54942704763468B +:1022BC005B1000D3404201B50020FFF7EFFE02BDDA +:1022CC000029F8D016E77047002B11D1002A0FD146 +:1022DC00002900D1002802D00021C943080007B40E +:1022EC00024802A14018029003BDC046B1FDFFFF99 +:1022FC0003B4684601B5029800F006F8019B9E46AF +:10230C0002B00CBC7047C046F0B557464E46454629 +:10231C00DE46E0B504000D009246994683B08B4230 +:10232C0030D82DD049465046FFF7BAFE290006009A +:10233C002000FFF7B5FE331A9846203B9B4633D45A +:10234C005A465346934042461F00534693401E0044 +:10235C00AF423AD8AF4200D178E05B46A41BBD41F6 +:10236C00002B00DA75E00022002300920193012378 +:10237C005A4693400193012342469340009328E030 +:10238C008242CFD900220023009201930C9B002B98 +:10239C0001D01C605D600098019903B0F0BCBB4695 +:1023AC00B246A946A046F0BD424620239B1A52468F +:1023BC00DA40414613004A468A40170042461F4302 +:1023CC00534693401E00AF42C4D900220023009212 +:1023DC0001934346002BD9D0FB0772081A4346469B +:1023EC007B080EE0AB4201D1A2420CD8A41A9D414D +:1023FC00012024196D410021013E24184D41002E6D +:10240C0006D0AB42EED9013E24196D41002EF8D115 +:10241C00009801995B4600196941002B24DB2B00C5 +:10242C005A464446D3402A00E2401C005B46150045 +:10243C00002B2ADB26009E40330026004746BE4078 +:10244C003200801A9941009001919FE7A342BCD8B9 +:10245C0083E74246202300219B1A0022009101921F +:10246C000122DA40019286E7424620239B1A2A0079 +:10247C0046469A402300F340444613432A00E24068 +:10248C001C005B461500002BD4DA42462F0020239B +:10249C00260097409B1ADE403B003343CDE7C046F5 +:1024AC000D488546FFF7A2FB0C480D490D4A002349 +:1024BC0002E0D458C4500433C4188C42F9D30A4AED +:1024CC000A4C002301E013600432A242FBD301F05A +:1024DC005FFB00F00FF8FEE70090002000000020EA +:1024EC006C00002074530008700000200C220020A7 +:1024FC00FEE70000F0B5DE4657464E464546E0B5D1 +:10250C00CFB000F0F9FF924801F004F80722914B8C +:10251C0000215A63A0240D3213A801F07AFB022388 +:10252C00E405169320000E3312A91293FDF702FE58 +:10253C00129A236913409A4206D1874B1B6883F386 +:10254C000888864B1B6898470323A0269A4613934A +:10255C000023F60598463000169312A943331293C4 +:10256C00FDF7E8FD2023300012A912938025FDF71A +:10257C00E1FD434601277A4C1593AD000233200050 +:10258C0013971493129512A9A5629946FDF7D2FDE3 +:10259C0040237448129312A98361FDF7CBFD2723C6 +:1025AC0020001597129312A9A361FDF7C3FD4B46AA +:1025BC00139317934346C02415935346A4001493C6 +:1025CC0012943000B46212A9FDF7B4FD0C23300054 +:1025DC0012A917971293FDF7ADFD80215D4B0906EB +:1025EC005A6D0120920092080A435A655E4ADA63DA +:1025FC005E4A1A649A6B17439F635D4B1A681443C7 +:10260C001C605C4CFDF71CFE23685B4A5B49134065 +:10261C001D435B4B25601B685800C0184000FFF73A +:10262C00B3FC80226369D2000130134202D105E071 +:10263C00002803D0636901381342F9D180214D4A37 +:10264C00490013680B43136013680B42FCD0022142 +:10265C00404A4C4BD365D36D1942FCD0382391685A +:10266C000B40D168102B01D100F089FC002B01D05C +:10267C0000F089FC13684449536819408023DB013E +:10268C000B435360136841490B4013601368404A75 +:10269C009B045B0FDA403A4B1A60394B5868FDF7D4 +:1026AC00CFFD3C4A002832D138202A498B680340A0 +:1026BC00102B01D100F04AFE0B68374803408020F4 +:1026CC000B605469800403E053691B1B022B1ED85A +:1026DC000B680342F8D1CB6830481840304B0343A9 +:1026EC00CB60802308685B0403430B608023C868BD +:1026FC005B050343CB60802154691648890403E0D1 +:10270C0053691B1B022B02D803680B42F8D006231B +:10271C0017490868184201D100F021FDE0230D494A +:10272C00DB01886803438B608B681E4803408B6019 +:10273C000B689B0101D400F024FD07208B681A4C18 +:10274C0083431800022303438B603820566933E01F +:10275C0048510008001002400000FF1F0400FF1F3A +:10276C000004005000080050030002300108120061 +:10277C000020024000700040FFF9FFFF40420F00B4 +:10278C000000002009800000FF80FFFFFFC7FFFF53 +:10279C000024F4000C010020FFFFFFFE8C80C1110F +:1027AC0032301646FFF0FFFF8813000053699B1B65 +:1027BC00A34201D900F0E5FC8B680340102BF5D146 +:1027CC000720F5490B680340022B01D900F098FD56 +:1027DC00F24BF3499A680A409A6038229968114280 +:1027EC0001D000F042FD1B68EE489B045B0FD84003 +:1027FC00ED4AEA4B90461F229B681B051B0F9B0062 +:10280C0043441B6A1340D840E84B18605868FDF7E6 +:10281C0017FDE74AE7491368E7480B401360E74B9D +:10282C001968E24B09051A68090D00F073FE842043 +:10283C001022E34B1958914319500438195811437D +:10284C00195019681143196059680A435A60DD4BD5 +:10285C001A68D20307D41A68DB490A401A60DA6B8B +:10286C00DA490A40DA638023D64A5B0211680124F4 +:10287C000B4313603F22D64909200B6893431A007F +:10288C00052313430B60D34BD3491A681140D34A29 +:10289C000A43D3491A6099600321D24A92464A32BC +:1028AC00DA605A68120C12040A435A60CE4A546019 +:1028BC00022219680A431A60082219680A431A602E +:1028CC001A68210022431A60FDF716FCC74B9A6860 +:1028DC00224207D1DA68C6490A40DA601A699200C6 +:1028EC0092081A618021C14B8903DA680A43DA60C5 +:1028FC008022920119681142FCD007211A605A6992 +:10290C008A43110002220A4370215A615A698A4390 +:10291C00110050220A430F215A619A6A8A439A6223 +:10292C005A69A4490A405A619A6AF231FF318A43C2 +:10293C00110010220A4380219A625A6989000A43C5 +:10294C005A619A6AAB491140C022D2000A438021D5 +:10295C009A625A69C9010A435A619A68A649114098 +:10296C00802252050A439A60904BA4491868FFF7DD +:10297C000BFB142343430893089B002B05D0089BA7 +:10298C00013B0893089B002BF9D1984B9C499A6802 +:10299C001140802212060A439A609A68002AFCDBD6 +:1029AC00802212011A6020230893089B002B05D06B +:1029BC00089B013B0893089B002BF9D180238B4C7F +:1029CC009B05226903211343236111230C206360AF +:1029DC00FDF792FB0121E368E368A3680B4200D189 +:1029EC00D3E3884800F096FD0124804B86491A6990 +:1029FC0012A8A2431A611A69844F0A401A619A6894 +:102A0C007F490A4022439A604923524616A9D4545E +:102A1C00C82200F0CBFFD620400001F0DDF8C82220 +:102A2C00010052001031060000F0C0FFD023784A9C +:102A3C0028215B00F250DC20D822994608AB5B18A9 +:102A4C009E5040000D0001F0C7F80300C82210335F +:102A5C0019005200060000F0A9FF4B466D4867496B +:102A6C00F05000239B465846B533FF33F054534681 +:102A7C009E614E4B1868FFF787FA43460138B862DF +:102A8C006033BA6A1900644800F044FD634B594640 +:102A9C00BB6111230D203B627C60FDF72DFB594679 +:102AAC000E20FDF729FB84233B6088231B02FC606E +:102ABC007B64DC2308A84019C650002200234A92EC +:102ACC004B93E82308A84119CC544146544F7C3110 +:102ADC00380000F01FFD354B52491868FFF754FAC7 +:102AEC008023514ADB05013898625A631022022177 +:102AFC0050469A611A6A22431A62DA680A43DA600B +:102B0C004A4A026012AA4260FA221201826003222F +:102B1C00586902435A610F201C60FDF7EDFAEC2056 +:102B2C0001F05AF80400C82221000190D03000F0C6 +:102B3C0029FDE520FF23D82223542100D22408AB01 +:102B4C005B199E583A4B640031511900804618317C +:102B5C0038009B4600F0DEFC4A46364BB35000F082 +:102B6C00E7FF01003000FDF751FF43463459E35CA9 +:102B7C007F2B00D81AE3304B0593304B069300F0B3 +:102B8C002DFEE6232E4AE0521E3BE6500433E25063 +:102B9C008023DB009C4655E00020024000100240E0 +:102BAC00FF8FFFFF0024F4008C4A00080000002077 +:102BBC0000700040FFFEFFFF5C5100080058014010 +:102BCC000018024000740040FFFF03FFFFFFF8FFF6 +:102BDC0000080240080002400F80FFFFA025000003 +:102BEC00402401408C0000200000024000240140E1 +:102BFC00C73FFFFFFFF0FFFFE8FFFF6F40420F00F2 +:102C0C00E8FFFF7F7C510008FFFFFFDF002C014035 +:102C1C00D9090008F90900089851000868680000F3 +:102C2C007C4F000800093D00801A060009030008CB +:102C3C000C4B0008190A0008A4510008184D000894 +:102C4C00A9020008604400F0C7FFE023E422E05032 +:102C5C000023A3540632A352E04AE14B516D0B43BF +:102C6C005365E04B98468B234246D3601268DE4B8B +:102C7C001343424613604923994653464A469B5C8C +:102C8C00012B00D99BE202211C20FDF735FA4A46A4 +:102C9C005346484651469B5C5A1C0A54E5225BB28B +:102CAC009146A354002B00DA8FE22200CF4909A8E9 +:102CBC0000F056FC0CAB22001800CD49029300F03A +:102CCC004FFC0FAB18002200CA49009300F048FCDF +:102CDC004B46E356012B00D1DEE2E523E256C64B10 +:102CEC0078219C460393C54B6144180088461D000F +:102CFC00049300F00FFCE5229146A256012A00D164 +:102D0C00F8E24146280000F005FC4A46A256012A8A +:102D1C0000D1EFE24146280000F0FCFB5946D223DB +:102D2C0038005B002831F45800F0F4FB0026EB234C +:102D3C005246E65412A9633BD15001990433D15049 +:102D4C00282108AA50335218D358AD4C9846AD4B95 +:102D5C002700994640239C4635003037E3444846CB +:102D6C00396800F0D7FB38897B6800280ED0002228 +:102D7C0004E0013292B20233904207D019785E78A7 +:102D8C000E42F6D05946A04800F0C4FB2E00013686 +:102D9C00B3B21D001037032BE1D142464046B2338B +:102DAC00FF33D25C103B1201A1184E6BC650C618F3 +:102DBC000B8FB380230030339B189A7ADB7A3273F3 +:102DCC008A8F3372F2815022F2720022F280934287 +:102DDC0000D109E28D4B1D008D4B07930021F28928 +:102DEC007172B1728A4211D001238C469B46B37A20 +:102DFC00002B00D030E1337A727A013B9B1A5A4691 +:102E0C00DBB2B272F289C918002AF0D1814800F005 +:102E1C0081FBDA234246D22140465B00D35C490059 +:102E2C001B01E2183034E418576BA37A4750118F0A +:102E3C003373938F5022F2720022F381E37AB180C4 +:102E4C003372F280934200D1C8E100234146724AAA +:102E5C007372B372A133FF33CA5000F069FE0100E4 +:102E6C004046FEF7F9F812AA6C49009800F078FB7E +:102E7C0053460C3316C816C303210720FDF73CF943 +:102E8C00674C684800F046FB674800F043FB2100A4 +:102E9C00664800F03FFB502352468026D452644BC8 +:102EAC00644A654C5A616369B600334203D1634886 +:102EBC0000F030FBA661624BE8269946D823DC244F +:102ECC009B46604F282208AB9B189B5D002B00D1C2 +:102EDC00D0E0282308AAD2181259390010001D007E +:102EEC00009200F0DFFD0028ECD1594608AA5319D6 +:102EFC005B5849461A001800009300F0D3FD0028D7 +:102F0C00E0D112AA1000504900F0CCFD80460028F8 +:102F1C00D8D10121029800F017FB002800D08BE1DA +:102F2C0072B6BFF34F8FBFF36F8F48235246D35CFB +:102F3C00FF2B00D1F6E14822534651469B5C0133EE +:102F4C008B5408AB203A9B18185900F045FD00280B +:102F5C0000D052E148235246D35C002B00D179E1DA +:102F6C004822534651469B5C013BDBB28B54002BF1 +:102F7C00A8D1BFF34F8FBFF36F8F62B6A2E70D3BA3 +:102F8C001940022920D01549304A0B688020134083 +:102F9C000B6080230A685B0013432D4A0B60546955 +:102FAC00C00005E053691B1B022B01D9FFF7AFFBD7 +:102FBC000B680342F6D04B68264818408023DB018F +:102FCC0003434B60FFF770FB1368224953681940A9 +:102FDC008023DB010B435360FFF75FFB00100240C3 +:102FEC0008000C00004400400100002009160008F5 +:102FFC00C1020008D90200080C490008504D000815 +:10300C008C490008EC510008FC510008404E0008A7 +:10301C00584E00081452000865100008F102000810 +:10302C00C409000030520008445200080C4E00083D +:10303C0000740040710D000000040050684F00083F +:10304C00910A0008E50A0008F50E0008FFC7FFFF0B +:10305C000C010020FF80FFFFB388307A9946737A09 +:10306C0001380133DBB2F788737283426ED062464B +:10307C00B272C7E628218026DE4C08AADC3352182F +:10308C00D5586369B600334203D0DB4800F042FAEE +:10309C00A662D02464002E5900F058FD01002800CF +:1030AC00B047D64B28212B51D82308AA5218D558F3 +:1030BC002E5900F04BFD01002800B047D04BD148F1 +:1030CC002B51FDF771FED2235B00EC58BF3BE2564F +:1030DC00012A04D003990498783100F01BFAE023FC +:1030EC00E05800F083FDE523FF22E254019AD35C03 +:1030FC007F2B05D88D21059A0698490000F01AFA05 +:10310C002824019800F072FDDC2308AA1219D0586B +:10311C0000F06CFDD82308AA1219D05800F066FDF7 +:10312C0072B6B94800F0F6F900F018FA1121B74A56 +:10313C00136A8B4313628022AE4B92009A62DA3A86 +:10314C00FF3A9A61B24B19329A62FEE76046013738 +:10315C00BFB27072B94500D183E0F78087E70720D2 +:10316C0002230C68844323430B605669A94C0B68FB +:10317C000340022B01D1FFF7D1FA53699B1BA342E9 +:10318C00F5D9A54B9846FFF744FBE368A34AE368DF +:10319C001A40A34B1343E360E3689B0200D423E47F +:1031AC00F023A26A1B021343A3621DE49D4B9E4AAB +:1031BC00E42118000592069300F0BCF9DFE49B486B +:1031CC0000F0A8F9E523FF22E2540CAB02930FABFD +:1031DC000093974B0393974B04939FE52A004A2146 +:1031EC00079800F0A7F930E6934B944A4A2118004F +:1031FC001500079300F09EF9F0E528215A4608AB1C +:10320C005B18985800F0E8FB002800D1A2E612A841 +:10321C0000F0E2FB002800D19CE68022884B920053 +:10322C0098465B69134200D0C9E00421854A1369B2 +:10323C008B43136130BF8DE6029B83491B78C87F9B +:10324C001D006822002873D12F2B00D081E02E3B6B +:10325C00CB7765E6A6217D4A7D48890000F06AF9A6 +:10326C007EE6013AF080F28101E799681140082965 +:10327C0000D128E199681140102900D187E09968A4 +:10328C001140202900D121E19B681A40182A00D155 +:10329C0020E10020FFF7ACFA534609AA1C3323CADD +:1032AC0023C35346029A283323CA23C343461A68BE +:1032BC0004231343424613604B46E356012B00D0C4 +:1032CC000BE5534652469C63624B53635346009A3C +:1032DC003C3323CA23C343461A680823134342468C +:1032EC0013604B46E256524B0393524B0493012A04 +:1032FC0000D0F4E42023584A11680B4313600DE509 +:10330C0002230C68844323430B605669414C0B68C1 +:10331C000340022B01D1FFF75BFA53699B1BA342BD +:10332C00F5D92EE74D4A4E49494800F003F902E61B +:10333C000A2B00D1A4E04B4800F0ECF82800FDF774 +:10334C00E9FF534600226833DA77E9E5CB68FFF7EB +:10335C00DEF951463C4B9B7FC918885428000A2D36 +:10336C000AD0394D0133DBB2AB7788541E2B00D019 +:10337C00D6E53C4800F0CEF8682353449846190033 +:10338C00394800F0C7F8002342469377C8E5DA685D +:10339C00D968D243D8684906490F40040131440E1C +:1033AC00920700D19AE03148FEF7EEFD6043304BB6 +:1033BC00D968490F0131FEF7E7FDFFF719FA06202E +:1033CC002C4B2D491B685843FEF7DEFD43462B4A18 +:1033DC001B68013013404246136003E0002800D103 +:1033EC00B8E50138434680225B6992001342F5D15F +:1033FC001BE7C04600040050544F0008F9090008B0 +:10340C00D90900087C5200088C520008002C01409D +:10341C0000080050881300008C4A00083CC2FEFFD4 +:10342C0003100000184D0008A4510008B851000802 +:10343C000C490008504D0008584E0008404E00083A +:10344C000070004000ED00E0F40000206C4D00081E +:10345C00EC4B00083D0B000800440040284D0008D0 +:10346C0091020000905200086C5200080024F400F5 +:10347C00001002400000002040420F00FFBFFFFF81 +:10348C00194B1948997F4B1CDBB283772F20514481 +:10349C0088541E2B09D1154800F03CF812491448E9 +:1034AC0000F038F84246104B9A77682353449846FC +:1034BC00002241469B7F0E48CA54150000F02AF8A2 +:1034CC0043469D773DE70B48FFF792F980200002B9 +:1034DC00FFF78EF9FA20C001FFF78AF90548FEF7CD +:1034EC0053FD604363E7C046F4000020905200088F +:1034FC006C52000800127A0010B5FEF79FFB10BD4D +:10350C0000B583B0019101AA01000020FEF79AFBDF +:10351C0003B000BD0FB400B583B004AB02CB01AA5D +:10352C00002000930193FEF78DFB03B008BC04B0A0 +:10353C001847C046130010B50A0001000148FFF7F8 +:10354C00E9FFFEE7A45200080A0010B501000020B4 +:10355C00FEF74EFBC343DB17184010BD7047C04647 +:10356C0000238360426001607047C04610B5036859 +:10357C000400002B04D040689847A3680133A36073 +:10358C0010BDC04601604B1E9941002349421140B9 +:10359C0041608360C360704703009B68C068C01AB9 +:1035AC0043425841C0B270470200C368581E93682A +:1035BC00C01A536800D5C0187047C0460300826813 +:1035CC00C1685B68501A00D5C0187047F0B5464604 +:1035DC00D6464F460500C0B5EB688068013B0E002F +:1035EC0014001B1A1ED493421AD31700002F05D1B6 +:1035FC002000E0BCBA46B146A846F0BDAB682868CE +:10360C009C463A006044310000F0FAFAAB689C46E4 +:10361C006B686744AF609F42EAD10023AB60E7E779 +:10362C000020E6E76A6890464344A342F8D30319A6 +:10363C00994627009A42D9D8131A9A462B685246B3 +:10364C009C46604400F0DCFA00234246AB604B46DB +:10365C0056449F1ACAE7C046F8B54746CE4680B5D1 +:10366C00C6688368050088469C1B0BD4944207D817 +:10367C002700002C20D13800C0BCB946B046F8BD9C +:10368C001400F5E7436899464C44944200D9140061 +:10369C00331927009945ECD84B469F1B2B683A00F1 +:1036AC009919404600F0ACFA4B46F61AA419B844E6 +:1036BC0000263F19002CDED02968220040468919CB +:1036CC0000F09EFAD7E7C046F0B54F464646D646C0 +:1036DC00C0B50F008368C168060014005B1A1ED4C5 +:1036EC0093421AD31500002D05D12000E0BCBA4638 +:1036FC00B146A846F0BDF36831689C462A00614487 +:10370C00380000F07DFAF3689C4673686544F560F8 +:10371C009D42EAD10023F360E7E70020E6E7426828 +:10372C0090464344A342F8D30B19994625009A427C +:10373C00D9D8531A9A46036852469C4638006144BD +:10374C0000F05EFA00234246F3604B4657449D1A44 +:10375C00C9E7C04670B501000400861D1D4D1E480A +:10376C0023781B025840082304E0013BDBB280B2F3 +:10377C00002B09D002B24000002AF6DA013B684067 +:10378C00DBB280B2002BF5D10134A642E8D14B88D4 +:10379C008A781D0A120215431BD008314D190D4CA5 +:1037AC00ADB20B781B025840082304E0013BDBB29E +:1037BC0080B2002B09D002B24000002AF6DA013B9D +:1037CC006040DBB280B2002BF5D101318BB2AB4241 +:1037DC00E7D170BD21100000FFFF000008207047EA +:1037EC00052804D883001B180248C01870470248EB +:1037FC00FCE7C046C8520008C452000870B504006B +:10380C0004A8007849000001084301210143072066 +:10381C0018400023D2000243638023712000002350 +:10382C000725C9B221706270661D082201304B4019 +:10383C0004E0013AD2B2DBB2002A09D059B25B00E3 +:10384C000029F6DA013A6B40D2B2DBB2002AF5D18C +:10385C00B04201D00178E8E763712000FFF77AFFEE +:10386C00030AE071A371200070BDC04670B504005E +:10387C0004A840C84900058820001B010B43D20056 +:10388C0031002370627008302A0000F0B9F92B0A5D +:10389C00A3700023E570200007252371661D0278B4 +:1038AC005340082204E0013AD2B2DBB2002A09D01C +:1038BC0059B25B000029F6DA013A6B40D2B2DBB2A6 +:1038CC00002AF5D10130B042E9D163712000FFF735 +:1038DC0041FF030AE071A371200070BD70B5002395 +:1038EC0007244679451D02785340082204E0013A2A +:1038FC00D2B2DBB2002A09D059B25B000029F6DA49 +:10390C00013A6340D2B2DBB2002AF5D10130A842B1 +:10391C00E9D1F01A42425041C0B270BD0078800625 +:10392C00800F704700780007400F70474078800682 +:10393C00400F7047437807201840704782784388BF +:10394C001202180A104370470830704710B5040073 +:10395C00FFF700FFE388A1791B0A09020B43181A31 +:10396C0042425041C0B210BDB0B500AF050000F0EE +:10397C00DDF86A46C31DDB08DB00D31A9D46020046 +:10398C00040069462800FFF767FE80B2844203D02A +:10399C000024BD462000B0BD684600F0F1F80400DC +:1039AC002800FFF70BFE8442F2D8F2E770B5050051 +:1039BC000C001600002905D0320028002100FFF76A +:1039CC00E1FD70BD3D21024A0248FFF7B3FDF3E76C +:1039DC00E8520008F852000810B5FFF7DDFD10BDE5 +:1039EC00F8B5DE4657464E464546E0B500AF1E00DC +:1039FC0080468A46914600F099F86B46C41DE4084F +:103A0C00E4001B1B9D460500801983B23200514611 +:103A1C0068469B4600F0A8F8FDF7A0FF4046FFF76C +:103A2C00C3FD002483450DD9FDF778FF5B46E01AF2 +:103A3C00BD4643425841C0B2F0BCBB46B246A94653 +:103A4C00A046F8BD2A0069464046FFF7BFFD4B462D +:103A5C0084B2002BE8D0320049464046FFF7B6FD51 +:103A6C002418A4B2E0E7C046F8B5060008000F0021 +:103A7C0000F086F80500FDF771FF3000FFF794FDAC +:103A8C000024854206D9FDF749FF601B434258418B +:103A9C00C0B2F8BD2A0039003000FFF797FD84B2A0 +:103AAC00F1E7C046F8B54E464546DE465746E0B50A +:103ABC0000AF060089469046FFF756FF0025041E0E +:103ACC0007D1BD462800F0BCBB46B246A946A0466D +:103ADC00F8BD6A46C31DDB08DB00D31AEA469D46D7 +:103AEC00FDF73CFF220069463000FFF7EDFD0600B4 +:103AFC00B6B2EB46FDF712FF002E01D1D546E0E73A +:103B0C00684600F03DF8844205D159464046C84706 +:103B1C000125D546D5E72521024A0348FFF70AFDC2 +:103B2C00F3E7C04610530008F85200080C20704709 +:103B3C0010B5FEF711F802000B0003480260436059 +:103B4C0080235B02836010BDE821002010B5FEF7D6 +:103B5C0003F802000B0003480260436080239B02C1 +:103B6C00836010BDD821002070B504000E00150034 +:103B7C00FDF7F2FF6681206061602581200070BD39 +:103B8C0000890C3080B27047807A70470C307047D7 +:103B9C0070B500260C4D0D4C641BA410A64209D127 +:103BAC00002600F0E1FC0A4D0A4C641BA410A6424E +:103BBC0005D170BDB300EB5898470136EEE7B30062 +:103BCC00EB5898470136F2E76C5300086C53000829 +:103BDC006C5300087053000810B5034B01001868B3 +:103BEC0000F08CF810BDC0460800002010B5034B47 +:103BFC000100186800F016F810BDC046080000203F +:103C0C00002310B59A4200D110BDCC5CC4540133D2 +:103C1C00F8E703008218934200D170471970013302 +:103C2C00F9E7000070B50500002910D00C1F2368BF +:103C3C00002B00DAE418280000F03CF91D4A136848 +:103C4C00002B05D163601460280000F03BF970BDB7 +:103C5C00A34208D9216860188342F3D118685B68C5 +:103C6C0041182160EEE71A005B68002B01D0A342DB +:103C7C00F9D911685018A0420BD1206809185018B6 +:103C8C0011608342E0D118685B6841181160536081 +:103C9C00DAE7A04202D90C232B60D5E72168601823 +:103CAC00834203D118685B684118216063605460DB +:103CBC00CAE7C046F821002070B50F4E0D003168E0 +:103CCC000400002902D100F08FF830602900200098 +:103CDC0000F08AF8431C0AD00323C51C9D43A8425C +:103CEC0007D0291A200000F07FF8431C01D10125D0 +:103CFC006D42280070BDC046FC210020F7B50322A0 +:103D0C00CB1C9343083306001F000C2B32D20C271C +:103D1C00B94231D8300000F0CDF8324D2B681C0080 +:103D2C00002C2ED139003000FFF7C6FF0400431CD5 +:103D3C001ED12C682500002D4AD123682900E318D8 +:103D4C003000019300F050F8019B834243D123686B +:103D5C000337FF1A03239F4308370C2F00D20C277D +:103D6C0039003000FFF7A8FF431C34D02368DF195B +:103D7C00276013E0002BCBDA0C23002533602800DE +:103D8C00FEBD2268D11B20D40B2917D9E21927605C +:103D9C00A34211D12A606368116053603000250082 +:103DAC0000F090F807220B35231D9543EA1A9D422B +:103DBC00E5D05B1BA350E2E75A60ECE76268A342D4 +:103DCC0001D12A60EAE75A60E8E723006468A7E7B4 +:103DDC002C006D68AFE70C233000336000F072F8F4 +:103DEC00CDE7C046F8210020002370B5064D040035 +:103DFC0008002B6000F0AAFB431C03D12B68002B9E +:103E0C0000D0236070BDC0460022002003000A7859 +:103E1C0001311A700133002AF9D17047030030B513 +:103E2C001D00002A06D00C78013A01332C700131A8 +:103E3C00002CF5D100219A18934200D130BD197095 +:103E4C000133F9E730B5140005001A009BB0002CC3 +:103E5C0005DA8B230360012040421BB030BD822366 +:103E6C0068469B0083810023009104919C4200D002 +:103E7C00631E02930593012369465B42CB812800A4 +:103E8C001E9B00F089F8431C01DA8B232B60002C5D +:103E9C00E3D00023009A1370DFE7000007B500930E +:103EAC0013000A00010002480068FFF7CBFF0EBDAB +:103EBC000800002010B5024800F0F0FA10BDC04612 +:103ECC000422002010B5024800F0E9FA10BDC046EB +:103EDC0004220020F0B58E6885B007000C00039218 +:103EEC0001939E423CD890238A89DB001A4234D03D +:103EFC000969236860695B1A029303234343DD0F4E +:103F0C00ED18019B029801331B186D10AB4200D9C0 +:103F1C001D00530532D529003800FFF7EFFE061EB1 +:103F2C0009D10C233B6040230120A289404213435A +:103F3C00A38105B0F0BD029A2169FFF761FEA38948 +:103F4C00144A1A4080231343A381029B2661F6185E +:103F5C0026606561019EED1AA560019B9E4200D909 +:103F6C00019E32000399206800F0A5FAA368002096 +:103F7C009B1BA36023689E192660DAE72A00380091 +:103F8C0000F0ACFA061EE0D138002169FFF74AFEBA +:103F9C00C7E7C0467FFBFFFFF0B5A1B003901D0043 +:103FAC008B890F0016001B0611D50B69002B0ED147 +:103FBC004021FFF7A3FE38603861002805D10C239F +:103FCC00039A0138136021B0F0BD40237B610023BC +:103FDC0008AC6361203363761033A3760795350004 +:103FEC002B78002B01D0252B47D1AB1B0593B54269 +:103FFC000CD0320039000398FFF76CFF431C00D142 +:10400C00AEE06269059B9446634463612B78002B98 +:10401C0000D1A5E0012200235242626004A954326F +:10402C0052186E1C2360E360A3601370A365052215 +:10403C003178544800F034FA751C00281FD12268DE +:10404C00D30604D5532304A95B1820211970130738 +:10405C0004D5532304A95B182B21197033782A2B10 +:10406C0016D0350000210A20E3682A786E1C303AFD +:10407C00092A4ED9002911D117E00135B0E7414B7F +:10408C002268C01A0123834013432E002360CEE71D +:10409C00079B191D1B680791002B01DB0B9304E098 +:1040AC005B42E3600223134323602B782E2B0AD14F +:1040BC006B782A2B35D1079B02351A1D1B6807928A +:1040CC00002B2BDB0993304E03223000297800F0B3 +:1040DC00E7F9002806D04023801B83402268013575 +:1040EC00134323602978062228486E1C217600F0A1 +:1040FC00D7F900283CD0264B002B25D10722079B53 +:10410C0007339343083307936369049A9B186361DD +:10411C0065E74343350001219B18A6E701235B4269 +:10412C00D0E700230A201A000135636029786E1C41 +:10413C003039092903D9002BC5D00992C3E7424372 +:10414C00350001235218F1E707AB00933A00210028 +:10415C00104B039800E000BF0490049B0133D3D1B3 +:10416C00BB890D985B0600D42DE7012040422AE75D +:10417C0007AB00933A002100064B039800F07CF843 +:10418C00EAE7C04630530008365300083A5300089B +:10419C0000000000E13E0008F7B5150001938A68A5 +:1041AC000B690C000090934200DA130022002B6084 +:1041BC0043321278002A01D001332B6023689B060E +:1041CC0002D52B6802332B602268062317001F4090 +:1041DC001A4227D0230043331B785A1E934122687E +:1041EC00920630D4220001990098089E4332B047C1 +:1041FC00431C25D0062320682A68E168002503406B +:10420C00042B03D18D1AEB43DB171D40A3682269E5 +:10421C00934201DD9B1AED180027BD4220D10020EE +:10422C0010E00137E3682A689B1ABB42D2DD2200FA +:10423C00012301990098089E1932B047431CF0D114 +:10424C0001204042FEBD3020E118433108702100AE +:10425C005A1C45310978A218433202331170C1E758 +:10426C002200012301990098089E1A32B047431C82 +:10427C00E6D00137D1E70000F0B58BB006920A000A +:10428C0043320793059004920A7E0C00109B782A07 +:10429C0007D8622A09D8002A00D1C1E0582A00D1D7 +:1042AC008CE026004236327022E01000633815286C +:1042BC00F7D8FDF75FFE16001F00F6FFF6FFF6FFBE +:1042CC00F6FF1F00F6FFF6FFF6FFF6FFA80036001C +:1042DC009A00F6FFF6FFB900F6FF3600F6FFF6FF80 +:1042EC009E0026001A684236111D1960136833703F +:1042FC000123A7E0086819680A1D05060BD50D688F +:10430C001A60002D03DA2D23049A6D421370614B51 +:10431C000A2703931BE00D681A604106F1D52DB2F4 +:10432C00EFE70D681968081D18602E0601D50D6899 +:10433C0003E06D06FBD50D68ADB2564B0827039311 +:10434C006F2A00D002372300002243331A706368AF +:10435C00A360002B03DB0422216891432160002D14 +:10436C0002D1049E002B0CD0049E28003900FDF7CE +:10437C0091FE039B013E5B5C33702B0005009F425A +:10438C00F3D9082F09D12368DB0706D563682269A6 +:10439C00934202DC3023013E3370049B9B1B236150 +:1043AC00079B210000930598069B09AAFFF7F4FED2 +:1043BC00431C4CD1012040420BB0F0BD45310A707A +:1043CC00344A03921A68216820CA1A60080616D566 +:1043DC00CB0702D52023194321601027002DB2D121 +:1043EC00202322689A432260ADE7202209680A4301 +:1043FC0022602200782145321170274AE1E74806F5 +:10440C00E6D5ADB2E4E71A680D68101D496918606D +:10441C0013682E0601D5196002E06D06FBD51980D4 +:10442C000023049E2361BBE71A68111D19601668EE +:10443C0000213000626800F033F8002801D0801BA6 +:10444C006060636823610023049A1370A8E72369F2 +:10445C00320006990598079DA847431CAAD02368EB +:10446C009B0715D4099BE0689842A5DA1800A3E7CE +:10447C002200012306990598079E1932B047431C68 +:10448C0098D00135E368099A9B1AAB42F0DCE9E756 +:10449C000025F7E741530008525300087047704756 +:1044AC00C9B28218904201D10020704703788B4228 +:1044BC00FBD00130F6E710B5884202D98B18984230 +:1044CC0003D3002307E08B5C8354013AFBD210BD6D +:1044DC00CC5CC45401339A42FAD1F8E7F7B5070023 +:1044EC000E001400002905D11100FFF707FC050090 +:1044FC002800FEBD002A03D1FFF794FB2500F7E747 +:10450C0000F01BF80190844203D835004308A34205 +:10451C00EED321003800FFF7F1FB051EE8D0019B1C +:10452C0022009C4200D91A0031002800FFF768FBDA +:10453C0031003800FFF776FBDAE70B1F1B68181FFA +:10454C00002B01DA0B58C01870470000044A030016 +:10455C001068002802D0C318136070470148FAE7AE +:10456C000822002010220020F8B5C046F8BC08BC78 +:10457C009E467047F8B5C046F8BC08BC9E467047CE +:10458C001E0F0008100F0008100F0008100F000875 +:10459C00100F00083A0F0008100F00081C0F00083D +:1045AC00100F0008100F0008100F0008100F000863 +:1045BC004A0F0008100F0008100F0008100F000819 +:1045CC00100F0008100F0008100F0008100F000843 +:1045DC00900F00087C10000892100008A010000832 +:1045EC007C1000087C1000087C1000087C1000086F +:1045FC007C1000087C1000087C1000087C1000085F +:10460C007C1000087C1000087C1000087C1000084E +:10461C007C1000087C1000087C1000087C1000083E +:10462C007C100008AE1000087C1000087C100008FC +:10463C007C1000087C1000087C100008D8100008C2 +:10464C001E1100087C1000087C1000087C1000086B +:10465C00281100083211000894110008AA11000852 +:10466C00B811000894110008941100089411000866 +:10467C00941100089411000894110008941100087A +:10468C00941100089411000894110008941100086A +:10469C00941100089411000894110008941100085A +:1046AC009411000894110008C61100089411000818 +:1046BC00941100089411000894110008941100083A +:1046CC00F0110008FA110008941100089411000868 +:1046DC009411000818120008041200087012000847 +:1046EC00861200089A120008701200087012000856 +:1046FC007012000870120008701200087012000886 +:10470C007012000870120008701200087012000875 +:10471C007012000870120008701200087012000865 +:10472C00701200087012000870120008C012000805 +:10473C007012000870120008701200087012000845 +:10474C0070120008F4120008EA1200087012000837 +:10475C00701200089612000896120008A8120008A1 +:10476C0060140008421300084213000842130008AA +:10477C0042130008421300084213000842130008B9 +:10478C0042130008421300083613000836130008C1 +:10479C003613000836130008361300083E140008C0 +:1047AC0036130008361300083613000836130008B9 +:1047BC0036130008361300083613000836130008A9 +:1047CC003613000836130008361300083613000899 +:1047DC003613000836130008361300083613000889 +:1047EC003613000836130008361300083613000879 +:1047FC003613000836130008361300083613000869 +:10480C003613000836130008361300083613000858 +:10481C003613000836130008361300083613000848 +:10482C003613000846140008F0130008361300086D +:10483C009A130008361300083613000836130008C4 +:10484C003613000836130008361300083613000818 +:10485C00DA130008361300082C140008361300086D +:10486C003613000816140008361300083613000817 +:10487C0036130008C81300080E1400085A1D00084F +:10488C00321D0008321D0008321D0008321D0008C0 +:10489C00321D0008321D0008321D0008321D0008B0 +:1048AC00321D0008321D00089C1E0008E21D000885 +:1048BC00321D0008321D0008321D0008321D000890 +:1048CC00321D0008321D0008321D0008321D000880 +:1048DC00321D0008321D0008321D0008C01D0008E2 +:1048EC00321D0008321D00089A1D0008321D0008F8 +:1048FC007A1D0008321D0008321D00085A1D0008E0 +:10490C006173736572745F6661696C656400000045 +:10491C0068616E646C65486F73744D657373616721 +:10492C006500000072784572726F7243616C6C6244 +:10493C0061636B0074784572726F7243616C6C6268 +:10494C0061636B003031323334353637383941429C +:10495C004344454673746174654E6F7000000000EB +:10496C0073746174654E6F70000000007374617431 +:10497C006549646C650000004253505F646F436886 +:10498C00616E6E656C416374696F6E0072657370F5 +:10499C006F6E645769746841636B4672616D650034 +:1049AC0064697370617463684576656E74000000A9 +:1049BC00004E0008984B000802007D03C800000060 +:1049CC0094520008904B0008040032052C010000A2 +:1049DC009C5200086C4B000812001E0928000000B5 +:1049EC00737461746549646C650000007374617460 +:1049FC006550617573656400737461746550756C92 +:104A0C0073696E67000000004253505F74726967EF +:104A1C006765724144430000434C495F68616E64B2 +:104A2C006C65436F6E736F6C65496E7075740000C6 +:104A3C0068616E646C65496E636F6D696E67467212 +:104A4C00616D6500486172644661756C745F4861A4 +:104A5C006E646C657200000073707572696F7573AB +:104A6C004952510054494D315F42524B5F55505F92 +:104A7C005452475F434F4D5F49525148616E646CCD +:104A8C0065720000444D41315F4368616E6E656C28 +:104A9C00315F49525148616E646C657200000000D0 +:104AAC0000000000000000000000000000000000FA +:104ABC0000000000000000000000000000000000EA +:104ACC0001000000020000000300000004000000D0 +:104ADC0006000000070000000800000009000000AC +:104AEC004253505F726567697374657250756C736D +:104AFC006544656C65676174650000004253505FE6 +:104B0C00726567697374657241707054696D657212 +:104B1C0048616E646C657200436F6E74726F6C6C7E +:104B2C0065725F696E697400446174614C696E6B87 +:104B3C005F77616974466F7253796E630000000091 +:104B4C005061747465726E4974657261746F725FD2 +:104B5C00636865636B5061747465726E000000006D +:104B6C000102020504020A040408080501080A01EE +:104B7C00050A020105020204040A080405080801DA +:104B8C00010A0A050102040802010804050A0A05C3 +:104B9C0025732825732C202575290A0025732C20B4 +:104BAC006C656E3D2568750A00000000257328258C +:104BBC0075290A0050756C736520776964746820D8 +:104BCC0069732025687520C2B5730A0070742D3E78 +:104BDC00706163655F6D73203E3D20350000000001 +:104BEC007372632F6273705F73746D333267303717 +:104BFC00312E630070742D3E70756C73655F776930 +:104C0C006474685F6D6963726F7320213D2030009E +:104C1C0070742D3E6E725F6F665F70756C7365732A +:104C2C0020213D203000000028656C636F6E5B30E6 +:104C3C005D202620656C636F6E5B315D29203D3DE8 +:104C4C00203000005465726D696E616C00000000CC +:104C5C00525454005345474745520000436F6E74FD +:104C6C00726F6C6C65725F257320756E65787065FC +:104C7C0063746564206576656E743A2025750A0048 +:104C8C0053657175656E6365725F257320756E650E +:104C9C0078706563746564206576656E743A20255A +:104CAC00750A0000436F6E74726F6C6C65725F25D1 +:104CBC007320454E5452590A00000000436F6E7425 +:104CCC00726F6C6C65725F257320455849540A00ED +:104CDC007366203D3D204E554C4C00007372632F83 +:104CEC00636F6E74726F6C6C65722E6300000000E3 +:104CFC007372632F73657175656E6365722E6300D5 +:104D0C006E6272203D3D2031000000007372632FF3 +:104D1C00646174616C696E6B2E6300006273702E3B +:104D2C00637269746963616C5F73656374696F6ED8 +:104D3C005F6C6576656C20213D2055434841525F80 +:104D4C004D4158002573282575293A20756E6B6ED8 +:104D5C006F776E206465766963652069640A00006C +:104D6C006273702E637269746963616C5F736563DF +:104D7C0074696F6E5F6C6576656C20213D20300028 +:104D8C004672616D65207061796C6F616420746F1F +:104D9C006F206269673A20256875206279746573A3 +:104DAC0000000000257328256868752920746F2081 +:104DBC00636F6E74726F6C6C65720A0054696D650A +:104DCC0020253032753A253032753A253032750A45 +:104DDC00000000005265636569766564207369673D +:104DEC006E616C2025640A00257328256875293F9F +:104DFC000A0000004A61636B68616D6D65720000AA +:104E0C0053657474696E67205663617020746F20EB +:104E1C00256875206D560A00537769746368696E4E +:104E2C006720746F207061747465726E202725730F +:104E3C00270A00006D652D3E6E725F6F665F73749E +:104E4C0065707320213D2030000000007372632FC9 +:104E5C007061747465726E5F697465722E630000A4 +:104E6C0053657175656E6365725F257320454E548D +:104E7C0052590A0053657175656E6365725F2573CF +:104E8C0020455849540A0000497072696D3D2575DA +:104E9C00206D412C20566361703D2575206D562C7C +:104EAC0020566261743D2575206D560A0000000085 +:104EBC005374617274696E670A00000050756C73EC +:104ECC006520747261696E206C6173742070756CEE +:104EDC00736520646F6E650A0000000046696E6998 +:104EEC00736865640A000000257320454E545259BE +:104EFC000A000000257320455849540A00000000A0 +:104F0C00526573756D696E670A00000050617573A8 +:104F1C00696E670A00000000436F6D6D616E64730B +:104F2C003A202F3F202F61202F62202F64202F6CDE +:104F3C00202F6E202F71202F75202F76202F3020C0 +:104F4C002F312E2E2F390A005475726E696E672020 +:104F5C0056636170204F46460A0000005475726E0D +:104F6C00696E672056636170204F4E0A0000000086 +:104F7C0025730A004669726D776172652056302E72 +:104F8C0032352D626574610A00000000556E6B6E3F +:104F9C006F776E20636F6D6D616E6420272F2563B4 +:104FAC00270A0000476F742041434B20666F722024 +:104FBC006672616D6520256868750A00476F7420FC +:104FCC0053594E43206672616D652C207365715F79 +:104FDC006E723D256868750A00000000476F7420EA +:104FEC007061636B65742C207365715F6E723D2507 +:104FFC006868752C207061796C6F61645F73697A75 +:10500C00653D2568750A0000257328272573272917 +:10501C000A000000476F74202573206672616D656D +:10502C002C207365715F6E723D256868752C20703D +:10503C0061796C6F61645F73697A653D2568750A87 +:10504C000000000025733A20626164206672616D75 +:10505C00650A000025732C20494353523D307825B6 +:10506C00780A000020205469703A2068616C742022 +:10507C004350552C206368616E67652067756172BB +:10508C0064204020257020746F20302C20746865BB +:10509C006E20737465702E0A00000000507420534B +:1050AC00523D307825780A00434331202568750A33 +:1050BC0000000000434332202568750A0000000000 +:1050CC00414443206F76657272756E0A00000000D1 +:1050DC004144432072656164790A000041444320D5 +:1050EC006368616E6E656C20636F6E6669672072B3 +:1050FC00656164790A00000041444320454F430A2E +:10510C000000000041444320454F530A00000000BA +:10511C00414443312D3E4953523D307825780A00A5 +:10512C0025732C2054454946310A000025732C2048 +:10513C004953523D307825780A000000496E697455 +:10514C0069616C6973696E672E2E2E0A000000006F +:10515C0044657649643D307825782C2053797374F6 +:10516C00656D436F7265436C6F636B3D25750A000B +:10517C004C4C5F4144435F5245475F496E69742014 +:10518C006572726F723D25750A00000025733A2016 +:10519C005053433D25750A006D652D3E6368616E65 +:1051AC006E656C5F6664203C2030000043616E20AD +:1051BC006F6E6C7920757365206F6E6520736572E8 +:1051CC0069616C20706F7274206174206120746945 +:1051DC006D652C20666F72206E6F770A00000000E0 +:1051EC00436865636B696E6720272573270A000087 +:1051FC0025733A2073686F727420696E20656C6336 +:10520C006F6E202568750A00546F74616C206E7582 +:10521C006D626572206F662070756C7365733A20D1 +:10522C0025750A005374617274696E67204E656F40 +:10523C00444B210A000000005075736820746865A7 +:10524C0020627574746F6E20746F20706C6179209D +:10525C006F72207061757365203A2D290A00000069 +:10526C00436F6E736F6C653A20272573270A000015 +:10527C00456E64206F662073657373696F6E0A00E8 +:10528C00427965210A000000546F67676C65000065 +:10529C00436972636C650000415353455254494F46 +:1052AC004E204641494C454420282573203A202560 +:1052BC0075292025730A0000424144004E4F4E458B +:1052CC000041434B00004E414B000053594E4300EC +:1052DC0044415441004F50545300000073746F729A +:1052EC0061676520213D204E554C4C006D616F6C03 +:1052FC0069622F7372632F6576656E74717565754F +:10530C00652E63006576656E745F73697A65203D02 +:10531C003D20414F4576656E745F73697A652865EB +:10532C0076742900232D302B2000686C4C006566A8 +:10533C0067454647003031323334353637383941DA +:10534C0042434445460030313233343536373839F0 +:08535C006162636465660000F4 +:08536400B0CFFF7F0100000043 +:04536C00E500000850 +:04537000BD00000874 +:105374000024F400040000000C00002000000000E1 +:105384000000000000000000000000000000000019 +:105394000000000000000000000000000000000009 +:1053A40000000000000000000000000000000000F9 +:1053B40000000000000000000000000000000000E9 +:1053C40000000000000000000000000000000000D9 +:0C53D400000000000000000000000000CD +:04000005080024AD1E :00000001FF diff --git a/firmware/inc/app_event.h b/firmware/inc/app_event.h index bdfcef6..5e6c796 100644 --- a/firmware/inc/app_event.h +++ b/firmware/inc/app_event.h @@ -22,7 +22,7 @@ enum { ET_APP_HEARTBEAT, ET_ADC_DATA_AVAILABLE, ET_CONTROLLER_CONNECTED, ET_CONTROLLER_DISCONNECTED, ET_CONTROLLER_SENT_REQUEST, ET_CONTROLLER_SENT_CHOICE, - ET_SEQUENCER_READY, ET_SEQUENCER_PLAY_PAUSE, + ET_SEQUENCER_READY, ET_SEQUENCER_PLAY_PAUSE, ET_NEXT_ROUTINE, ET_BURST_REQUESTED, ET_BURST_REJECTED, ET_BURST_STARTED, ET_BURST_COMPLETED, ET_BURST_EXPIRED, }; diff --git a/firmware/inc/datalink.h b/firmware/inc/datalink.h index e48437f..0ea0701 100644 --- a/firmware/inc/datalink.h +++ b/firmware/inc/datalink.h @@ -25,7 +25,8 @@ DataLink *DataLink_new(); // Instance methods. bool DataLink_open(DataLink *, void *packet_handler, PacketCallback); void DataLink_waitForSync(DataLink *); -bool DataLink_sendPacket(DataLink *, uint8_t const *, uint16_t); +bool DataLink_sendDebugPacket(DataLink *, uint8_t const *, uint16_t); +bool DataLink_sendDatagram(DataLink *, uint8_t const *, uint16_t); void DataLink_close(DataLink *); void DataLink_delete(DataLink *); diff --git a/firmware/inc/pattern_iter.h b/firmware/inc/pattern_iter.h index c61bcbd..da220ad 100644 --- a/firmware/inc/pattern_iter.h +++ b/firmware/inc/pattern_iter.h @@ -15,6 +15,15 @@ #include "bsp_app.h" +typedef struct { + char const *name; + uint8_t const (*pattern)[2]; + uint16_t nr_of_elcons; + uint8_t pace_ms; + uint8_t nr_of_steps; + uint16_t nr_of_reps; +} PatternDescr; + typedef struct { uint8_t const (*pattern)[2]; uint16_t nr_of_elcons, elcon_nr; @@ -30,7 +39,7 @@ typedef struct { bool PatternIterator_checkPattern(uint8_t const pattern[][2], uint16_t nr_of_elcons); // Instance methods. -void PatternIterator_init(PatternIterator *, uint8_t const pattern[][2], uint16_t nr_of_elcons, uint8_t pace_ms, uint16_t nr_of_reps, uint8_t nr_of_steps); +void PatternIterator_init(PatternIterator *, PatternDescr const *); bool PatternIterator_done(PatternIterator *); bool PatternIterator_getNextPulseTrain(PatternIterator *, PulseTrain *); diff --git a/firmware/maolib/inc/net_frame.h b/firmware/maolib/inc/net_frame.h index b058327..c491cd9 100644 --- a/firmware/maolib/inc/net_frame.h +++ b/firmware/maolib/inc/net_frame.h @@ -22,12 +22,13 @@ extern "C" { // Class methods. uint16_t PhysFrame_headerSize(void); -char const *PhysFrame_typeName(FrameType); +char const *PhysFrame_frameTypeName(FrameType); +char const *PhysFrame_serviceTypeName(NetworkServiceType); // Instance methods. -PhysFrame *PhysFrame_initHeader(PhysFrame *, FrameType, uint8_t seq); -PhysFrame *PhysFrame_initHeaderWithAck(PhysFrame *, FrameType, uint8_t seq, uint8_t ack); -PhysFrame *PhysFrame_init(PhysFrame *, FrameType, uint8_t seq, uint8_t const *, uint16_t nb); +PhysFrame *PhysFrame_initHeader(PhysFrame *, FrameType, uint8_t seq, NetworkServiceType); +PhysFrame *PhysFrame_initHeaderWithAck(PhysFrame *, FrameType, uint8_t seq, uint8_t ack, NetworkServiceType); +PhysFrame *PhysFrame_init(PhysFrame *, FrameType, uint8_t seq, NetworkServiceType, uint8_t const *, uint16_t nb); bool PhysFrame_hasValidHeader(PhysFrame const *); ProtocolVersion PhysFrame_protocolVersion(PhysFrame const *); diff --git a/firmware/maolib/libmao.a b/firmware/maolib/libmao.a index 7351ac1dd60239958bcc4dfd00aea14f176bba36..101efdba1831f8c7747808806cd4846a28ed5f29 100644 GIT binary patch delta 2132 zcmbVNO>7%Q6n?ww|2R&xj*b5kZ(`G=33Y7CZ4>dM#CHCKnug#4LV`FUuF8SnB&9SG z!Z}nTDs5FX94neiJyZy2RjU$(3Ps{T1wuf@p+bP*z>na-38_dN_+~v@Zx#p=&w76I zy*KZhnK$$7tLLOM7o@YX+Ww(zc6dnB(i#`@x29#X8AQ00Jw&vR$nN-e^*u&p)!;3n z9kqrDJ#YSh&7C3INsB)c?WB%IupX0MkhH@q^UqaEYt_m$EX^EQTOH?~xz)ywPI9w%p!qnthP(^QXP2D@vNv zO&=wwhyC93_Ryi}ho=udK236;?e>Qh4at*Rq3VP@`R7kt_)d93c+@;L1$R;QY&kV#-&y^7>%=&y3Srpk9sB5gfq9}z?esCMA?+A^0p$yhKvjHx5g5G*Figt=H%=H~*LSA^84_JGcN7gYw}ie) zrP;Eq{byIz-TksO+<~>^J*3};+=55Maav%UdIs3zBq|Hb@4<6F(E{5)aLm!@T=vdD zqHlW>r&gX{oIg6B`iEx5aDzl4Y{EsP%dQvep?z8`_`WazmYefs2^paT)u;HzahNHJpPHW{8qXA42`kw zi2uQlFfy-HHLc`9j5Bb?-=LhyVBqhftTX%yubE*TfM;k>e(45-4;f~LMS!Z#;K9hu zuwi2GnHX{whA;0jq%90*!C=&jTVoH#V>C`tlu={82la@B`-IFk<3V-9;y%@IU$nSi zZ@8~p+~*qZ&n)hXx;yZL#r+mG$PNEjh_x7hCj+w@4MC2|9}agkw+%thQZ6_Nk2 z870^!7+`d{jX{^rJ!^^F0gmd$SrU=7$nh)e^X{PfBHRitQF!Sog=xWEt*79d!E)X3 o?`4DesQqia*%RzwK4HIvUA@BM*SbZV;K)V^gmp|U}7Xtv_VZm=}Bsa!L+at z7ZTkd7hwsmf`0H3K?^e%?R8a)GFsHuT0|iIoO|a^JRfAxh40?;efPZY-gCITg=Jy& zo^Y!?lT4&y$+)UURXU8bs>WiCxI@Q)69AF`){lS3fjEE}%42|ik--H2&HqCj58My! z^8o*X*gmhT!ldAsxT+1EIzKiw>wI7Yw-&gr$n_W)`q5JoV@pk3KnS_0c;7jgrEv4i7)WT0|D*X z(d(9RD?mW1=>+mK&}|h|40@}FW!szzov;Omw6x}fT5v?ko9eUT`f*ZQqmw788)V7e zO|}j{72HH>s=_(Q=KB(jUrH6k6H+Z+aFcDRio`=}86T9e8{{S*l<}|MmZm*JOeJ6;)}%FfuyyVLJVS zI#8XKNV&16NTC_+Mwo++%;+#^aKP&RIK0Eyc!w1vqs-y0$zc>7a#gqu4qr_U9uX_2 z4zd@$jNaWM(OilgGs!(!`J_o6$jWJxJd%~CO|r)1q6L#YjhD%1mw9N~nH9-SM3G;c z(zyj{K%o*sE&c6Tv diff --git a/firmware/src/controller.c b/firmware/src/controller.c index 53c2616..8994267 100644 --- a/firmware/src/controller.c +++ b/firmware/src/controller.c @@ -11,10 +11,11 @@ */ #include -#include #include "bsp_dbg.h" #include "bsp_app.h" +#include "app_event.h" +#include "sequencer.h" #include "debug_cli.h" // This module implements: @@ -27,15 +28,13 @@ struct _Controller { uint8_t event_storage[400]; StateFunc state; DataLink *datalink; + Sequencer *sequencer; }; static void handleHostMessage(Controller *me, uint8_t const *msg, uint16_t nb) { - char nt_msg[nb + 1]; - strncpy(nt_msg, (const char *)msg, nb); - nt_msg[nb] = '\0'; - CLI_handleConsoleInput(nt_msg, nb); + BSP_logf("%s, len=%hu\n", __func__, nb); } @@ -51,10 +50,10 @@ static void *stateIdle(Controller *me, AOEvent const *evt) switch (AOEvent_type(evt)) { case ET_AO_ENTRY: - BSP_logf("%s ENTRY\n", __func__); + BSP_logf("Controller_%s ENTRY\n", __func__); break; case ET_AO_EXIT: - BSP_logf("%s EXIT\n", __func__); + BSP_logf("Controller_%s EXIT\n", __func__); break; default: BSP_logf("Controller_%s unexpected event: %u\n", __func__, AOEvent_type(evt)); @@ -65,7 +64,7 @@ static void *stateIdle(Controller *me, AOEvent const *evt) // Send one event to the state machine. static void dispatchEvent(Controller *me, AOEvent const *evt) { - BSP_logf("%s(%u)\n", __func__, evt); + // BSP_logf("%s(%u)\n", __func__, AOEvent_type(evt)); StateFunc new_state = me->state(me, evt); if (new_state != NULL) { // Transition. StateFunc sf = me->state(me, AOEvent_newExitEvent()); @@ -95,6 +94,7 @@ void Controller_init(Controller *me, DataLink *datalink) me->datalink = datalink; BSP_logf("%s\n", __func__); me->state = &stateIdle; + me->state(me, AOEvent_newEntryEvent()); DataLink_open(me->datalink, me, (PacketCallback)&handleHostMessage); DataLink_waitForSync(me->datalink); } @@ -103,12 +103,9 @@ void Controller_init(Controller *me, DataLink *datalink) void Controller_start(Controller *me) { BSP_logf("Starting NeoDK!\n"); - BSP_logf("Push the button to play or pause! :-)\n"); + BSP_logf("Push the button to play or pause :-)\n"); BSP_setPrimaryVoltage_mV(2500); BSP_primaryVoltageEnable(true); - - me->state = stateIdle; - me->state(me, AOEvent_newEntryEvent()); } diff --git a/firmware/src/datalink.c b/firmware/src/datalink.c index 31e91f0..0cd50d6 100644 --- a/firmware/src/datalink.c +++ b/firmware/src/datalink.c @@ -11,12 +11,14 @@ */ #include +#include #include "bsp_dbg.h" #include "bsp_mao.h" #include "bsp_app.h" #include "circbuffer.h" #include "net_frame.h" +#include "debug_cli.h" // Temporary. // This module implements: #include "datalink.h" @@ -95,15 +97,35 @@ static uint32_t writeFrame(DataLink *me, uint8_t const *frame, uint32_t nb) } -static void respondWithAckFrame(DataLink *me, uint8_t ack_nr) +static void respondWithAckFrame(DataLink *me, uint8_t ack_nr, NetworkServiceType nst) { uint8_t ack_frame[me->header_size]; - PhysFrame_initHeaderWithAck((PhysFrame *)ack_frame, FT_ACK, 0, ack_nr); + PhysFrame_initHeaderWithAck((PhysFrame *)ack_frame, FT_ACK, 0, ack_nr, nst); BSP_logf("%s(%hhu) to controller\n", __func__, ack_nr); writeFrame(me, ack_frame, sizeof ack_frame); } +static void handleIncomingDataFrame(DataLink *me, PhysFrame const *frame) +{ + uint8_t rx_seq_nr = PhysFrame_seqNr(frame); + uint16_t payload_size = PhysFrame_payloadSize(frame); + BSP_logf("Got packet, seq_nr=%hhu, payload_size=%hu\n", rx_seq_nr, payload_size); + NetworkServiceType nst = PhysFrame_serviceType(frame); + respondWithAckFrame(me, rx_seq_nr, nst); + + uint8_t const *payload = PhysFrame_payload(frame); + if (nst == NST_DEBUG) { + char zt_msg[payload_size + 1]; + strncpy(zt_msg, (const char *)payload, payload_size); + zt_msg[payload_size] = '\0'; + CLI_handleConsoleInput(zt_msg, payload_size); + } else { + me->packet_callback(me->packet_handler, payload, payload_size); + } +} + + static void handleIncomingFrame(DataLink *me, PhysFrame const *frame) { if (! PhysFrame_isIntact(frame)) { @@ -115,27 +137,24 @@ static void handleIncomingFrame(DataLink *me, PhysFrame const *frame) if (frame_type == FT_ACK) { uint8_t ack_nr = PhysFrame_ackNr(frame); BSP_logf("Got ACK for frame %hhu\n", ack_nr); - me->tx_seq_nr = (ack_nr + 1) & 0xf; + me->tx_seq_nr = (ack_nr + 1) & 0x7; return; } uint8_t rx_seq_nr = PhysFrame_seqNr(frame); if (frame_type == FT_SYNC) { BSP_logf("Got SYNC frame, seq_nr=%hhu\n", rx_seq_nr); - respondWithAckFrame(me, rx_seq_nr); + respondWithAckFrame(me, rx_seq_nr, PhysFrame_serviceType(frame)); return; } uint16_t payload_size = PhysFrame_payloadSize(frame); if (frame_type == FT_DATA) { - BSP_logf("Got packet, seq_nr=%hhu, payload_size=%hu\n", rx_seq_nr, payload_size); - respondWithAckFrame(me, rx_seq_nr); - me->packet_callback(me->packet_handler, PhysFrame_payload(frame), payload_size); - return; + handleIncomingDataFrame(me, frame); + } else { + BSP_logf("Got %s frame, seq_nr=%hhu, payload_size=%hu\n", + PhysFrame_frameTypeName(frame_type), rx_seq_nr, payload_size); } - - BSP_logf("Got %s frame, seq_nr=%hhu, payload_size=%hu\n", - PhysFrame_typeName(frame_type), rx_seq_nr, payload_size); } @@ -143,7 +162,8 @@ static void rxCallback(DataLink *me, uint32_t ch) { if (! me->synced) { if (ch == '\n') { // Dweeb's poll character. - respondWithAckFrame(me, 0x7); + respondWithAckFrame(me, 0x7, NST_DATAGRAM); + me->synced = true; } else if (assembleIncomingFrame(me, (uint8_t)ch) == FT_SYNC) { // BSP_logf("Byte %2hu is 0x%02x\n", me->rx_nb, ch); handleIncomingFrame(me, (PhysFrame const *)me->rx_frame_buffer); @@ -181,6 +201,15 @@ static void txErrorCallback(DataLink *me, uint32_t tx_error) BSP_logf("%s(%u)\n", __func__, tx_error); } + +static bool sendPacket(DataLink *me, NetworkServiceType nst, uint8_t const *packet, uint16_t nb) +{ + uint8_t frame_store[me->header_size + nb]; + PhysFrame_init((PhysFrame *)frame_store, FT_DATA, me->tx_seq_nr, NST_DEBUG, packet, nb); + // BSP_logf("Writing frame with size %hu to buffer\n", sizeof frame_store); + return writeFrame(me, frame_store, sizeof frame_store) == sizeof frame_store; +} + /* * Below are the functions implementing this module's interface. */ @@ -228,12 +257,15 @@ void DataLink_waitForSync(DataLink *me) } -bool DataLink_sendPacket(DataLink *me, uint8_t const *packet, uint16_t nb) +bool DataLink_sendDebugPacket(DataLink *me, uint8_t const *packet, uint16_t nb) { - uint8_t frame_store[me->header_size + nb]; - PhysFrame_init((PhysFrame *)frame_store, FT_DATA, me->tx_seq_nr, packet, nb); - // BSP_logf("Writing frame with size %hu to buffer\n", sizeof frame_store); - return writeFrame(me, frame_store, sizeof frame_store) == sizeof frame_store; + return sendPacket(me, NST_DEBUG, packet, nb); +} + + +bool DataLink_sendDatagram(DataLink *me, uint8_t const *datagram, uint16_t nb) +{ + return sendPacket(me, NST_DATAGRAM, datagram, nb); } diff --git a/firmware/src/debug_cli.c b/firmware/src/debug_cli.c index bf0a0b1..9f9f69b 100644 --- a/firmware/src/debug_cli.c +++ b/firmware/src/debug_cli.c @@ -50,7 +50,7 @@ static void interpretCommand(CmndInterp *me, char ch) switch (ch) { case '?': - CLI_logf("Commands: /? /a /b /d /l /q /u /v /0 /1../9\n"); + CLI_logf("Commands: /? /a /b /d /l /n /q /u /v /0 /1../9\n"); break; case '0': BSP_primaryVoltageEnable(false); @@ -73,6 +73,9 @@ static void interpretCommand(CmndInterp *me, char ch) case 'l': BSP_toggleTheLED(); break; + case 'n': + EventQueue_postEvent(me->delegate_queue, ET_NEXT_ROUTINE, NULL, 0); + break; case 'q': { // Quit. int sig = 2; // Simulate Ctrl-C. EventQueue_postEvent(me->delegate_queue, ET_POSIX_SIGNAL, (uint8_t const *)&sig, sizeof sig); @@ -82,7 +85,7 @@ static void interpretCommand(CmndInterp *me, char ch) BSP_changePrimaryVoltage_mV(+200); break; case 'v': - CLI_logf("Firmware V0.24-beta\n"); + CLI_logf("Firmware V0.25-beta\n"); break; default: CLI_logf("Unknown command '/%c'\n", ch); @@ -112,7 +115,7 @@ static void vLogToUser(CmndInterp *me, char const *fmt, va_list args) { char msg[80]; int nbw = vsnprintf(msg, sizeof msg, fmt, args); - if (nbw > 0) DataLink_sendPacket(me->datalink, (uint8_t const *)msg, nbw + 1); + if (nbw > 0) DataLink_sendDebugPacket(me->datalink, (uint8_t const *)msg, nbw + 1); } /* @@ -140,7 +143,7 @@ int CLI_logf(char const *fmt, ...) void CLI_handleConsoleInput(char const *cmnd, uint16_t nb) { if (nb == 2 && cmnd[0] == '/') interpretCommand(&my, cmnd[1]); - else CLI_logf("%s('%s')", __func__, cmnd); + else BSP_logf("%s('%s')\n", __func__, cmnd); } diff --git a/firmware/src/neodk_main.c b/firmware/src/neodk_main.c index ef62923..bf3befb 100644 --- a/firmware/src/neodk_main.c +++ b/firmware/src/neodk_main.c @@ -84,6 +84,9 @@ static void dispatchEvent(Boss *me, AOEvent const *evt) case ET_BUTTON_RELEASED: // Ignore for now. break; + case ET_NEXT_ROUTINE: + EventQueue_repostEvent((EventQueue *)me->sequencer, evt); + break; default: BSP_logf("%s(%hu)?\n", __func__, evt_type); } diff --git a/firmware/src/pattern_iter.c b/firmware/src/pattern_iter.c index 9d8b8f8..ca27df9 100644 --- a/firmware/src/pattern_iter.c +++ b/firmware/src/pattern_iter.c @@ -61,19 +61,19 @@ bool PatternIterator_checkPattern(uint8_t const pattern[][2], uint16_t nr_of_elc } -void PatternIterator_init(PatternIterator *me, uint8_t const pattern[][2], - uint16_t nr_of_elcons, uint8_t pace_ms, uint16_t nr_of_reps, uint8_t nr_of_steps) +void PatternIterator_init(PatternIterator *me, PatternDescr const *pd) { - me->pattern = pattern; - me->nr_of_elcons = nr_of_elcons; + me->pattern = pd->pattern; + me->nr_of_elcons = pd->nr_of_elcons; + me->pace_ms = pd->pace_ms; + me->nr_of_reps = pd->nr_of_reps; + me->nr_of_steps = pd->nr_of_steps; // Length of a transition. + + me->pulse_width_micros = 80; me->elcon_nr = 0; - me->nr_of_steps = nr_of_steps; // Length of a transition. M_ASSERT(me->nr_of_steps != 0); me->step_nr = 0; me->segment_nr = 0; // 0 or 1. - me->pulse_width_micros = 80; - me->pace_ms = pace_ms; - me->nr_of_reps = nr_of_reps; } diff --git a/firmware/src/sequencer.c b/firmware/src/sequencer.c index 219249a..06f6a12 100644 --- a/firmware/src/sequencer.c +++ b/firmware/src/sequencer.c @@ -31,14 +31,21 @@ struct _Sequencer { uint8_t event_storage[400]; StateFunc state; PatternIterator pi; + uint8_t pattern_index; }; enum { EL_0, EL_A, EL_B, EL_C = 4, EL_AC = (EL_A | EL_C), EL_D = 8, EL_BD = (EL_B | EL_D) }; -static char const elset_str[][5] = { +/*static*/ char const elset_str[][5] = { "None", "A", "B", "AB", "C", "AC", "BC", "ABC", "D", "AD", "BD", "ABD", "CD", "ACD", "BCD", "ABCD" }; +static uint8_t const pattern_jackhammer[][2] = +{ + {EL_AC, EL_BD}, + {EL_BD, EL_AC}, +}; + static uint8_t const pattern_toggle[][2] = { {EL_A, EL_B}, @@ -47,12 +54,6 @@ static uint8_t const pattern_toggle[][2] = {EL_D, EL_C}, }; -static uint8_t const pattern_simple[][2] = -{ - {EL_AC, EL_BD}, - {EL_BD, EL_AC}, -}; - static uint8_t const pattern_circle[][2] = { {EL_A, EL_B}, @@ -76,6 +77,44 @@ static uint8_t const pattern_circle[][2] = {EL_BD, EL_AC}, }; +static PatternDescr const pattern_descr[] = +{ + { + .name = "Jackhammer", + .pattern = pattern_jackhammer, + .nr_of_elcons = M_DIM(pattern_jackhammer), + .pace_ms = 125, + .nr_of_steps = 3, + .nr_of_reps = 200, + }, + { + .name = "Toggle", + .pattern = pattern_toggle, + .nr_of_elcons = M_DIM(pattern_toggle), + .pace_ms = 50, + .nr_of_steps = 5, + .nr_of_reps = 300, + }, + { + .name = "Circle", + .pattern = pattern_circle, + .nr_of_elcons = M_DIM(pattern_circle), + .pace_ms = 30, + .nr_of_steps = 9, + .nr_of_reps = 40, + }, +}; + + +static void selectNextRoutine(Sequencer *me) +{ + BSP_setPrimaryVoltage_mV(2500); + if (++me->pattern_index == M_DIM(pattern_descr)) me->pattern_index = 0; + PatternDescr const *pd = &pattern_descr[me->pattern_index]; + CLI_logf("Switching to pattern '%s'\n", pd->name); + PatternIterator_init(&me->pi, pd); +} + static void printAdcValues(uint16_t const *v) { @@ -101,22 +140,21 @@ static void *stateIdle(Sequencer *me, AOEvent const *evt) switch (AOEvent_type(evt)) { case ET_AO_ENTRY: - BSP_logf("%s ENTRY\n", __func__); - // TODO Choose a different pattern each time? - // PatternIterator_init(&me->pi, pattern_toggle, M_DIM(pattern_toggle), 80, 400, 3); - // PatternIterator_init(&me->pi, pattern_simple, M_DIM(pattern_simple), 20, 50, 15); - PatternIterator_init(&me->pi, pattern_circle, M_DIM(pattern_circle), 30, 40, 9); + BSP_logf("Sequencer_%s ENTRY\n", __func__); break; case ET_AO_EXIT: - BSP_logf("%s EXIT\n", __func__); + BSP_logf("Sequencer_%s EXIT\n", __func__); break; case ET_ADC_DATA_AVAILABLE: printAdcValues((uint16_t const *)AOEvent_data(evt)); break; case ET_SEQUENCER_PLAY_PAUSE: - M_ASSERT(! PatternIterator_done(&me->pi)); + PatternIterator_init(&me->pi, &pattern_descr[me->pattern_index]); CLI_logf("Starting\n"); return &statePulsing; // Transition. + case ET_NEXT_ROUTINE: + selectNextRoutine(me); + break; case ET_BURST_COMPLETED: BSP_logf("Pulse train last pulse done\n"); break; @@ -143,6 +181,9 @@ static void *statePaused(Sequencer *me, AOEvent const *evt) case ET_SEQUENCER_PLAY_PAUSE: CLI_logf("Resuming\n"); return &statePulsing; + case ET_NEXT_ROUTINE: + selectNextRoutine(me); + break; case ET_BURST_COMPLETED: // BSP_logf("Last pulse done\n"); break; @@ -191,6 +232,9 @@ static void *statePulsing(Sequencer *me, AOEvent const *evt) break; case ET_SEQUENCER_PLAY_PAUSE: return &statePaused; // Transition. + case ET_NEXT_ROUTINE: + selectNextRoutine(me); + break; case ET_BURST_STARTED: // BSP_logf("Pulse train started\n"); break; @@ -215,7 +259,7 @@ static void *statePulsing(Sequencer *me, AOEvent const *evt) // Send one event to the state machine. static void dispatchEvent(Sequencer *me, AOEvent const *evt) { - // BSP_logf("%s(%u)\n", __func__, evt); + // BSP_logf("%s(%u)\n", __func__, AOEvent_type(evt)); StateFunc new_state = me->state(me, evt); if (new_state != NULL) { // Transition. StateFunc sf = me->state(me, AOEvent_newExitEvent()); @@ -236,6 +280,7 @@ Sequencer *Sequencer_new() Sequencer *me = (Sequencer *)malloc(sizeof(Sequencer)); EventQueue_init(&me->event_queue, me->event_storage, sizeof me->event_storage); me->state = &stateNop; + me->pattern_index = 0; BSP_registerPulseDelegate(&me->event_queue); return me; } @@ -243,19 +288,23 @@ Sequencer *Sequencer_new() void Sequencer_start(Sequencer *me) { - PatternIterator_checkPattern(pattern_toggle, M_DIM(pattern_toggle)); - PatternIterator_checkPattern(pattern_simple, M_DIM(pattern_simple)); - PatternIterator_checkPattern(pattern_circle, M_DIM(pattern_circle)); + for (uint16_t i = 0; i < M_DIM(pattern_descr); i++) { + PatternDescr const *pd = &pattern_descr[i]; + BSP_logf("Checking '%s'\n", pd->name); + PatternIterator_checkPattern(pd->pattern, pd->nr_of_elcons); + } + + PatternIterator_init(&me->pi, &pattern_descr[me->pattern_index]); - PatternIterator_init(&me->pi, pattern_circle, 8/*M_DIM(pattern_circle)*/, 40, 1, 2); uint32_t total_nr_of_pulses = 0; PulseTrain pt; while (PatternIterator_getNextPulseTrain(&me->pi, &pt)) { - BSP_logf(" %3hu * {%s, %s}\n", pt.nr_of_pulses, elset_str[pt.elcon[0]], elset_str[pt.elcon[1]]); + // BSP_logf(" %3hu * {%s, %s}\n", pt.nr_of_pulses, elset_str[pt.elcon[0]], elset_str[pt.elcon[1]]); total_nr_of_pulses += pt.nr_of_pulses; } BSP_logf("Total number of pulses: %u\n", total_nr_of_pulses); + PatternIterator_init(&me->pi, &pattern_descr[me->pattern_index]); me->state = stateIdle; me->state(me, AOEvent_newEntryEvent()); }