From ast@CS.VU.NLWed Jul 24 08:01:13 1996 Date: Wed, 24 Jul 1996 11:01:33 GMT From: Andy Tanenbaum To: Multiple recipients of list MINIX-L Subject: Improved dosvol.c, dosvol.exe Mark Becker found the bug in dosvol that was causing the trouble. Below is a new version, both source and uuencoded .exe for DOS. I would definitely appreciate feedback on how well this works on a variety of machines and diskette sizes. Andy Tanenbaum /* dosvol.c - A stripped down version of the MINIX vol program. It takes * a file and breaks into into floppy-sized chunks, writing each one raw * to a floppy. * * Usage: dosvol file drive KB [slow] * * Examples: dosvol foo.taz a: 1440 # 1.4 MB floppy a: * dosvol foo.taz b: 1200 # 1.2 MB floppy b: * dosvol foo.taz a: 360 slow # old machine * * The optional fourth parameter forces the program to write in units of 3 * sectors. Folk tradition has it that this works around some buggy BIOSes. * * This code borrows heavily from Mark Becker's RaWrite program. */ #include #include #include #include #include #include #include #include #include #include #include #define FALSE 0 #define TRUE (!FALSE) #define SECTORSIZE 512 #define RESET 0 #define LAST 1 #define READ 2 #define WRITE 3 #define VERIFY 4 #define FORMAT 5 int done; char buffer[18*SECTORSIZE]; /* do I/O in units of up to 18 sectors */ int handler(void) { /* Catch CTRL-C and CTRL-Break. */ done = 1; return(0); } void msg(char (*s)) { /* Print an error message and quit. */ fprintf(stderr, "%s\n", s); _exit(1); } void Error(int status, int cyl, int head, int sector) { /* Identify the error code with a real error message. */ printf("\nError occured while writing cyl %d, head=%d, sector=%d\n", cyl,head,sector+1); switch (status) { case 0x00: msg("Operation Successful"); break; case 0x01: msg("Bad command"); break; case 0x02: msg("Address mark not found"); break; case 0x03: msg("Attempt to write on write-protected disk"); break; case 0x04: msg("Sector not found"); break; case 0x05: msg("Reset failed (hard disk)"); break; case 0x06: msg("Disk changed since last operation"); break; case 0x07: msg("Drive parameter activity failed"); break; case 0x08: msg("DMA overrun"); break; case 0x09: msg("Attempt to DMA across 64K boundary"); break; case 0x0A: msg("Bad sector detected"); break; case 0x0B: msg("Bad track detected"); break; case 0x0C: msg("Unsupported track"); break; case 0x10: msg("Bad CRC/ECC on disk read"); break; case 0x11: msg("CRC/ECC corrected data error"); break; case 0x20: msg("Controller has failed"); break; case 0x40: msg("Seek operation failed"); break; case 0x80: msg("Attachment failed to respond"); break; case 0xAA: msg("Drive not ready (hard disk only"); break; case 0xBB: msg("Undefined error occurred (hard disk only)"); break; case 0xCC: msg("Write fault occurred"); break; case 0xE0: msg("Status error"); break; case 0xFF: msg("Sense operation failed"); break; } exit(1); } void main(int argc, char *argv[]) { int disknr = 1, fdin, count, drive, head, cyl, status, sector; int max_cyl, chunk, nsectors; long offset, drive_size, r, cyl_size; char *p, c; /* Catch breaks. */ ctrlbrk(handler); printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); /* Check the arguments for validity. */ if (argc != 4 && argc != 5) msg("Usage: dosvol file drive-letter #kilobytes [slow]"); _fmode = O_BINARY; fdin = open(argv[1], O_RDONLY); if (fdin < 0) { perror(argv[1]); exit(1); } p = argv[2]; c = *p; if (c == 'a' || c == 'A') drive = 0; else if (c == 'b' || c == 'B') drive = 1; else msg("dosvol: Second parameter must be drive, either a: or b:"); switch(atoi(argv[3])) { case 360: cyl_size = 9*2*SECTORSIZE; /* bytes/cylinder */ max_cyl = 39; /* zero-based counting */ drive_size = cyl_size * (max_cyl+1); chunk = (argc == 4 ? 9 * SECTORSIZE : 3 * SECTORSIZE); nsectors = chunk/SECTORSIZE; break; case 720: cyl_size = 9*2*SECTORSIZE; /* bytes/cylinder */ max_cyl = 79; /* zero-based counting */ drive_size = cyl_size * (max_cyl+1); chunk = (argc == 4 ? 9 * SECTORSIZE : 3 * SECTORSIZE); nsectors = chunk/SECTORSIZE; break; case 1200: cyl_size = 15*2*SECTORSIZE; /* bytes/cylinder */ max_cyl = 79; /* zero-based counting */ drive_size = cyl_size * (max_cyl+1); chunk = (argc == 4 ? 15 * SECTORSIZE : 3 * SECTORSIZE); nsectors = chunk/SECTORSIZE; break; case 1440: cyl_size = 18*2*SECTORSIZE; /* bytes/cylinder */ max_cyl = 79; /* zero-based counting */ drive_size = cyl_size * (max_cyl+1); chunk = (argc == 4 ? 18 * SECTORSIZE : 3 * SECTORSIZE); nsectors = chunk/SECTORSIZE; break; default: msg("dosvol: Third parameter must be one of: 360, 720, 1200, or 1440"); } biosdisk(RESET, drive, 0, 0, 0, 0, buffer); /* * Start writing data to diskette until there is no more data to write. * Optionally read and write in units of 3 sectors. Folk tradition says * that this makes fewer buggy BIOSes unhappy than doing a whole track at a * time. */ offset = 0; while(1) { if (done > 0) { if (done == 1) msg("User abort"); biosdisk(READ, drive, 0, 0, 1, 1, buffer); /* Retract head */ printf("Done. \n"); exit(1); } r = offset % drive_size; if (r == 0) { /* An integral number of diskettes have been filled. Prompt. */ printf("Please insert formatted diskette #%d in drive %c, then hit Enter%c\n", disknr, c, 7); disknr++; while(bioskey(1) == 0) ; /* wait for input */ if ((bioskey(0) & 0x7F) == 3) exit(1); /* CTRL-C */ biosdisk(READ, drive, 0, 0, 1, 1, buffer); /* get it going */ } count = read(fdin, buffer, chunk); /* read from file */ if (count < chunk) { /* Pad out buffer with zeroes. */ p = (count >= 0 ? &buffer[count] : &buffer[0]); while (p < &buffer[chunk]) *p++ = 0; done = 2; } /* Compute cyl, head, sector. */ cyl = r/cyl_size; r -= cyl * cyl_size; head = (r < cyl_size/2 ? 0 : 1); r -= head * cyl_size/2; sector = r/SECTORSIZE; printf("Track: %2d Head: %d Sector: %2d File offset: %ld\r", cyl, head, sector+1,offset); status = biosdisk(WRITE, drive, head, cyl, sector+1, nsectors,buffer); if (status != 0) Error(status, cyl, head, sector); offset += chunk; } } table !"#$%&'()*+,-./0123456789:;<=>? @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ begin 644 dosvol.exe M35I* !4 # @ $X"__^J!( (@ $ ^R!R:@$ #T!0 3 4 z M \% #1! DP0 "P' 4!P #0< .$& #)!@ MP8 y M x M w M v M u M t M s M r M q M p M "ZKP$NB1;X ;0PS2&++@( BQXL ([:HY( C :0o M (D>C ")+JP QP:6 /__Z#0!Q#Z* (O'B]BY_W\F@3TX-W49)HM5 H#Z/740n M@.;?_P:6 (#^674$_P:6 /*NXV%#)C@%==: S8#WV8D.B@"Y 0#3XX/#"(/Cm M^(D>C@",VBOJBS[Z!8'_ )S![\ HD^^@6!QZ0O+_>L#Z2$!B]\#VHD>I ")'J@ H9 k M*]B.P+1*5\TA7]/G^H[2B^?[,\ NC@;X ;]:"[FD+RO/\ZH._Q9,"^@.!^CVj M![0 S1J)%I@ B0Z: /\64 O_-H@ _S:& /\VA #HC )0Z+,&+HX>^ 'H? .i M_Q9."S/ B_"Y+P"0_ ($@-0 1N+X+3<-D'0*N1D D+HO .B+ (OLM$R*1@+-h M(;D. )"Z2 #IAP >N US2&)'G0 C 9V +@$-@"X!37-(8D>g M? ",!GX N 8US2&)'H C :" +@ )8S*CMJZ6 '-(1_#'K@ )<46= #-(1\>f MN 0EQ19X ,TA'QZX!27%%GP S2$?'K@&)<46@ #-(1_#QP:6 R\.T0+L"e M ,TAP[D> )"Z5@ NCA[X >CI_[@# %#H*?\ ,<&6@L! #/ ZP##58OL_W8$d MN)0!4+@@!U#HC1:+Y;@! %#H O]97<-5B^R+1@I 4/]V"/]V!KB8 5#H(0^+c MY8M&!+D7 +M2 BX[!W0'0T/B]^E1 2[_9RX $ @ # 0 !0 & < " )b M H "P , ! $0 @ $ @ "J +L S #@ /\ K@*Y L0"SP+: N4"\ +[ @8#a M$0,< R<#,0,[ T4#3P-9 V,#;0-W X$#BP.5 [C1 5#H4/]9Z>8 N.8!4.A%z M_UGIVP"X\@%0Z#K_6>G0 +@) E#H+_]9Z<4 N#("4.@D_UGIN@"X0P)0Z!G_y M6>FO +A< E#H#O]9Z:0 N'X"4.@#_UGIF0"XG@)0Z/C^6>F. +BJ E#H[?Y9x MZ8, N,T"4.CB_EGI> "XX0)0Z-?^6>MNN/0"4.C-_EGK9+@& U#HP_Y9ZUJXw M'P-0Z+G^6>M0N#P#4.BO_EGK1KA2 U#HI?Y9ZSRX: -0Z)O^6>LRN(4#4.B1v M_EGK*+BE U#HA_Y9ZQZXSP-0Z'W^6>L4N.0#4.AS_EGK"KCQ U#H:?Y9ZP"Xu M 0!0Z"X$65W#58OL@^PF5E?'1MH! +CZ 5#HI159N @$4.B3#5F#?@0$= Z#t M?@0%= BX(@10Z"S^6<<&: @ @+@! %"+7@;_=P+H< =968E&W(-^W !]$HM>s M!O]W NA %EFX 0!0Z,L#68M>!HM'!(E&_(M>_(H'B$;_@'[_870&@'[_074'r MQT;@ #K&X!^_V)T!H!^_T)U!\=&X $ ZPBX5 10Z+W]68M>!O]W!NAI%%FYq M! "[:00N.P=T!T-#XO?I"@$N_V<(: '0 K $H 5Y!+<$]00R!<=&^@ QT;Xp M "2_)P"+QT"9BT[ZBU[XFH,0 ")5O*)1O"#?@0$=06^ !+K [X !HO&NP "o MF??[B4;JZ< QT;Z #'1O@ )+]/ (O'0)F+3OJ+7OB:@Q (E6\HE&\(-^n M! 1U!;X $NL#O@ &B\:[ *9]_N)1NKI@@#'1OH ,=&^ \OT\ B\= F8M.m M^HM>^)J#$ B5;RB4;P@WX$!'4%O@ >ZP.^ :+QKL IGW^XE&ZNM%QT;Zl M #'1O@ 2+]/ (O'0)F+3OJ+7OB:@Q (E6\HE&\(-^! 1U!;X ).L#O@ &k MB\:[ *9]_N)1NKK"+B2!%#HC_Q9N%P+4#/ 4#/ 4#/ 4#/ 4/]VX#/ 4.CIj M%(/$#L=&[@ QT;L #I[P&#/EH+ 'X^@SY:"P%U"+C2!%#H4/Q9N%P+4+@!i M %"X 0!0,\!0,\!0_W;@N ( 4.BG%(/$#KC=!%#H? M9N $ 4.CP 5G_=O+_h M=O#_=N[_=NR:IQD (E6]HE&](M&] M&]G5=N < 4(I&_YA0_W;:N!H%4.A!g M"X/$"/]&VNL N $ 4.B,%%D+P'3T,\!0Z($4625_ #T# '4(N $ 4.B3 5FXf M7 M0N $ 4+@! % SP% SP%#_=N"X @!0Z!L4@\0.5KA<"U#_=MSHT :#Q :)e M1MZ+1MX[QGTO@W[> 'P(BT;>!5P+ZP.X7 N)1OSK"8M>_,8' /]&_(O&!5P+d M.T;\=^W'!EH+ @#_=OK_=OC_=O;_=O2:GAD (E&Y(M&Y)F+3OJ+7OB:@Q c M "E&]!E6]C/2N ( 4E#_=OK_=OB:GAD #M6]GP+?P4[1O1V!#/ ZP.X 0")b M1N(STK@" %)0BT;BF8M.^HM>^)J#$ 4E":GAD "E&]!E6]C/2N "4E#_a M=O;_=O2:GAD (E&Z/]V[O]V[(M&Z$!0_W;B_W;DN%X%4.@/"H/$#+A<"U#_z M=NJ+1NA 4/]VY/]VXO]VX+@# %#H$1.#Q Z)1N:#?N8 =!+_=NC_=N+_=N3_y M=N;HG_J#Q B+QID!1NP15N[I#OY?7HOE7<-5B^Q6BW8$"_9\%(/^6'8#OE< x MB3:6!8J$F 68ENL-]]Z#_B-WZL<&E@7__XO&HY0 N/__ZP!>7<(" ,-5B^SKw M"HL>_ 71X_^77"^A_ 7_#OP%"\!UZ_\6\@7_%O0%_Q;V!?]V!.@A^5E=PP v M "Z/!@,(+HP>!0C\C@:0 +Z #+D)JQ C,6'UI.+-HH @\8"N0$ @#Z2u M -R$8X&C "+_K%_,L#RKN-V@/%_@^P"N $ \,#P27^_XO\*_AR8(OGC,".t MV(S0CL!12?.D,L"JCMV'\H?9B\.+T$/H&0!W!W) Z!( =_D\('0(/ UT!#P)s M=>@RP.OD"\!T!T*J"L!U 4.&X#+ ^>,5K$DL(G0/!"(\7'4'@#PB=0*L20OVr MP^DE^5D#RBZ.'@4(B1Z$ $,#VXOTB^PKZW+FB^6)+H8 XPZ)=@"#Q0(VK K q MX/IT\#/ B48 +O\F PB+#HH 4>A' 5F+^ O ="0>'@>.'HP ,_;\\Z0?B_@&p M_S:. .@I 8/$ HO8!Z.( O =0/IN/@SP+G__XD_@\,"\JXF. 5U](D'PU6+o M[(,^_ 4@=06X 0#K%8M&!(L>_ 71XXF'7"__!OP%,\#K %W#58OL5E>+?@2+n M10:CGB\[QW4(QP:>+P ZQ"+=02+'IXOB7<$H9XOB40&7UY=PU6+[%97BWX$m MBT8&*06+-0/WBT8&0(D$B7P"H9PO.\=U!HDVG"_K"(O^ WX&B74"B\8%! #Kl M %]>7<-5B^Q6BT8$,](E__^!X@ 4E#H^0!968OP@_[_=00SP.L8H9POB40"k MBT8$0(D$B3:<+Z&<+P4$ .L 7EW#58OL5HM&!#/2)?__@>( %)0Z+P 65F+j M\(/^_W4$,\#K%8DVH"^)-IPOBT8$0(D$B\8%! #K %Y=PU6+[%97BWX$"_]Ti M!8/_]'8$,\#K6HO'!0L )?C_B_B#/J O '4'5^B<_UGK0HLVGB^+Q@O =#&+h M!(O7@\(H.\)R"5=6Z C_65GK)(L$.\=R#E;HS/Y9_P2+Q@4$ .L0BW0&.S:>g M+W7/5^@=_UGK %]>7<-5B^R+1@2+U('J $[PG,'HYX ,\#K"\<&E ( +C_f M_^L 7<-5B^R+1@2+5@8#!IX @]( B\B!P0 !@]( "])U"CO,L 7<-5B^R+1@294E#HLO^+Y>L 7<-5d MB^R+3@2T/(M6!LTA<@+K!E#H5?SK %W"! !5B^R+7@0KR2O2M$#-(>L 7<("c M %6+[(/L!%97BWX&]\< P'4(H6@()0# "_CWQP !=0/IC0"A:@@A1@B+1@BIb M@ %U![@! %#H!/PSP%#_=@3H_P1968E&_#W__W43]T8(@ !T!#/ ZP.X 0")a M1OSK%/?' 1T#+A0 %#HT?OIU@#K NL^]\?P '0?_W8$,\!0Z%'_B_"+Q@O z M?06+QNFV %;H*@%9ZR#K%O]V!/]V_.@R_XOPB\8+P'T%B\;IEP#K<)#'1OP y M %?_=@3HC@!968OPB\8+P'Q9,\!05NC& %E9B4;^J8 ="&!SP @]\< @'05x MBT;^)?\ #2 4+@! %!6Z* @\0&ZPKWQP "= 16Z.O^@W[\ '07]\?P '01w MN $ 4+@! %#_=@3H) 2#Q 8+]GP=]\< W0%N 0ZP(SP(O7@>+_^ O"B][1v MXXF'0 B+QNL 7UZ+Y5W#58OL5K !BTX&]\$" '4*L +WP00 =0*P (M6!+'Pu M(DX&"L&T/+\(M&!B7_^ T @(O>T>.)AT (B\;K!E#HKOKK %Y=PU6+t M[+1$BD8&BUX$BTX*BU8(S2%R#(-^!@!U!(O"ZPCK!E#HA/KK %W#58OL5HMVs M!+0^B][-(7(,T>/'AT (__\SP.L&4.AA^NL 7EW#58OL@^P$5E>+1@A /0( r M<@V+7@31X_>'0 @ G0%,\#IDP#_=@C_=@;_=@3HC0"#Q :)1OR+1OQ /0( q M<@V+7@31X_>'0 @ @'0&BT;\ZV:0BT[\BW8&'@>+_HO>_*P\&G0M/ UT!:KBp M].LL@4[@" %#Wo MV1O 4%'_=@3HD &#Q B+7@31XX&/0 @ EN+QRO#ZP!?7HOE7<-5B^RT/XM>n M!(M."(M6!LTA<@+K!E#HB/GK %W#58OL@>R* %97BT8(0#T" ',%,\#I]@"+m M7@31X_>'0 @ @'02_W8(_W8&_W8$Z., @\0&Z=< BUX$T>.!IT (__V+1@:)l MAGS_BT8(B89X_XVV?O_K;?^.>/^+GGS__X9\_XH'B(9[_SP*=03&! U&BH9[k M_X@$1HV&?O^+UBO0@?J 'P^C89^_XO^*_A7C89^_U#_=@3H>P"#Q :)AG;_j M.\=T&X.^=O\ /\#AG;_*\?K3XVV?O^#OGC_ '0#Z8G_i MC89^_XO^*_B+QPO =BY7C89^_U#_=@3H+0"#Q :)AG;_.\=T%X.^=O\ '0 @ "'00N ( g M4#/ 4%#_=@3H* "+Y;1 BUX$BTX(BU8&S2%R#U"+7@31XX&/0 @ $%CK!E#Hf M+_CK %W#58OLBUX$T>.!IT (__VT0HI&"HM>!(M."(M6!LTA<@+K!U#H!?B9e MZP!=PU6+[(/L(E97!HM^"AX'BUX(@_LD=UB ^P)R4XM&#(M.#@O)?1& ?@8 d M= O&!2U']]GWV(/9 (UVWN,/D2O2]_.1]_.(%$;C">OQ*]+W\X@41@O =?6-c M3M[WV0/._$Z*!"P*L&4.CC]NL 7<.Z; CK [IQ"+D% )"T0+L" ,TAN2< x MD+IV"+1 S2'I"/%5B^Q65XMV!(M$#CO&= 6X___K9H,\ 'PM]T0"" !U#(M$w M"HO6@\(%.\)U%L<$ "+1 J+UH/"!3O"=0:+1 B)1 HSP.LTBWP& SQ'*3Q7v MBT0(B40*4(I$!)A0Z-S\@\0&.\=T$?=$ @ "=0J!3 (0 +C__^L$,\#K %]>u M7<-5B^RXCA)0N! '4/]V!(U&!E#H$P+K %W#58OLBUX&_P__=@:*1@284.@&t M (OEZP!=PU6+[(/L E:+=@:*1@2(1O__!'TVBD;__T0*BUP*B$?_]T0"" !Ts M&X!^_PIT!H!^_PUU#U;H&?]9"\!T!KC__^FG (I&_[0 Z9\ _PSW1 *0 '4'r M]T0" @!U"X%, A N/__Z80 @4P" &#? 8 ="2#/ !T$%;HU_Y9"\!T!;C_q M_^MFZPJ+1 :Z__\KT(D4Z7[_ZU6 ?O\*=1_W1 ) '48N $ 4+B>"%"*1 28p M4.CL_(/$!CT! '48N $ 4(U&!%"*1 284.C4_(/$!CT! '01]T0" )U"H%,o M A N/__ZP>*1O^T .L 7HOE7<-5B^Q6BW8$N! '4%;H _]96>L 7EW#58OLn M@^P"5E>+=@2+?@:)?O[W1 (( '0FZQI6BUX(_T8(B@>84.C4_EE9/?__=04Sm MP.F' (O'3PO ==_I> #W1 ) '0X@WP& '0RBT0&.\=S*X,\ '0-5NCQ_5D+l MP'0$,\#K5U?_=@B*1 284.@I_(/$!CO'B^5=P@8 _R92"U6+[(M6!+D$#[NG"/R*QM+HUZJ*QB+%UZJ*PM+Hi MUZJ*PB+%UZKK %W" @!5B^R![)@ 5E?'1J@ ,9&JU#'1OX .M!5[G__S+ h M\J[WT4E?PX@%1_Y.JWXK4U%2!HU&K"OXC4:L4%?_=@C_5@H+P'4%QT;^ 0#&g M1JM0 7ZHC7ZL!UI96\,&_(U^K(F^:O^+OFK_BW8&K K =!$\)700B 5'_DZKf M?^_HL/_KZNE\!(FV=O^L/"5TYXF^:O\SR8F.=/^)CFC_B(YS_\>&;O___\>&e M15]%8$5(Q;5%G86EA9 &&T8;1AM&+ 4c MNA3IZ . _0!W^(..:/\!ZYN _0!W[(..:/\"ZX^ _0!WX("^<_\K= 2(EG/_b MZ7S_@Z9H_]^U!>ER_X..:/\@M07I:/^ _0!W1/>&:/\" '4A@XYH_PBU >E1a M_^F/ XM^!(L%@T8$ H#] G,)B89N_[4#Z3?_@/T$=>&)AG#__L7I*?^ _01Sz MT[4$Z1__DBPPF(#] G<;M0*'AF[_"\!\TM'@B]#1X-'@ \(!AF[_Z?O^@/T$y M=:6'AG#_"\!\M-'@B]#1X-'@ \(!AG#_Z=W^@XYH_Q"U!>G3_H&.:/\ 8.Fx M:/_OM07IP_Z#IFC_[X&.:/^ +4%Z;/^MPCK"K<*ZPNW$+/I MK&AG/_ ,:&w M;?\ B)9L_XM^!(L%,]+K$;<*QH9M_P&(EFS_BWX$BP691T>)=@;WAFC_$ !Tv M!(L51T>)?@2-OGG_"\!U,PO2=2^#OG#_ '4MB[YJ_XN.;O_C&X/Y_W06BX9Hu M_R4( '0$LC#K K(@BL+HK?WB^>GI_8..:/\$4E!7BL>84(J&;?]04^B%^18't MBY9P_PO2?P/I% 'I(0&(EFS_B78&C;YX_XM>!/\W0T.)7@3WAFC_( !T#_\Ws M0T.)7@06!^@)_; ZJA8'Z ']Q@4 QH9M_P"#IFC_^XV.>/\K^8?/BY9P_SO1r M?P*+T>F^ (EV!HB6;/^+?@2+!8-&! (6!XV^>?\RY(D%N0$ Z=\ B78&B)9Lq M_XM^!/>&:/\@ '4,BSV#1@0"'@<+_^L*Q#V#1@0$C, +QW4%'@>_H CHT?P[p MCG#_=@2+CG#_Z: B78&B)9L_XM^!(N.I %T"K@( ,=&_ H ZPC'1OP( +@&n M %#H*?R+1OP!1@06!XV^>?_WAFC_" !T&HN6;O\+TGX2Z%+\)H ]+74!22O1m M?@2)EG3_BH9S_PK =!0F@#TM= Z#KG3_ 8.6=/\ 3R:(!>@D_(OWB[YJ_XN>l M;O^X!0 CAFC_/04 =1:*IFS_@/QO=1"#OG3_ '\&QX9T_P$ ZQ^0@/QX= 6 k M_%AU%(..:/] 2TN#KG3_ GT&QX9T_P XYT__>&:/\" '4,ZP:P(.C1^TL[j MV7_V]X9H_T = RP,.B_^XJ&;/_HN/N+EG3_"])^)RO**]HFB@0\+70(/"!Ti M!#PK=0!^L&Q#V#1@0$g MN% *D:K T:H)HD%Z7;[B[9V_XN^:O^P)>@L^ZP*P'7X@'ZK4'T#Z";[!X-^f M_@!T![C__^L'ZP6+1JCK %]>B^5=P@@ 58OLN(X24/]V!/]V!HU&"%#HR?KKe M %W#58OL5E=5BW8$_"O F;D* +< O_\%BAQ&]@$!=?B] " ^RMT!H#[+74$d M18H<1H#[.7'T??BDI<#PQ/1BAQ&c M@/LY=P6 ZS!SX4U\!_?:]]B#V@!=ZP!?7EW#58OL_W8$Z(7_6>L 7<-04U%2b M!AY65U4NCA[X ?\6HB\+P'4',\!0Z,KG65U?7A\'6EE;6,]5B^R+1@2CHB\.a MN#L94+@C %#H%@"+Y5W#58OLM#6*1@3-(8O#C,+K %W#58OLM"6*1@0>Q58&z MS2$?7<,SR>L-N0$ ZPBY @#K [D# %565XOLB_F+1@J+5@R+7@Z+3A +R74(y M"])T:0O;=&7WQP$ =1P+TGD*]]KWV(/: (//# O)>0KWV??;@]D @_<$B^FYx M( !7,_\S]M'@T=+1UM'7._UR"W<$._-R!2OS&_U XN=;]\," '0&B\:+U]'Kw M]\,$ '0']]KWV(/: %]>7.+MQ@)ZP.^-0M6_W8$N$,+4+@@!U#H,/Z#Q A>7<-5u MB^P>!XIF!(I&#HM>$(M."M'IT>F X< "3@R*;@J*=@B*5@;-$X!^! AU!8D/t MB5<"BL2T .L 7<-5B^P>!NL!S[0UL!O-(0X?NKD:M"6P&\TABF8$S19U"(!^s M! %U C/ D08?B].T); ;S2$''Y'K %W# !4=7)B;RU#("T@0V]Pr M>7)I9VAT("AC*2 Q.3@X($)O J>"JX*O K-"MX*\ H (+$ LA"R0 q M17)R;W(@, !);G9A;&ED(&9U;F-T:6]N(&YU;6)E<@!.;R!S=6-H(&9I;&4@p M;W(@9&ER96-T;W)Y %!A=&@@;F]T(&9O=6YD %1O;R!M86YY(&]P96X@9FELo M97, 4&5R;6ES2!An M