dbx@olympic.atmos.colostate.edu (Doug Burks) (01/29/91)
Greetings, Here is the second version of the esdi_wini hard disk driver for IBM PS/2's 60MB and 120MB hard disks. The changes from the first version include: * All hard disk information is now read from the hard disk adapter, since the BIOS information apparently contains garbage for some machines. * A small bug was fixed in error processing. * Dead code and variables were cleared out. * Comments were spruced up. If you couldn't get the first version of this driver working, try this one. For most people, the biggest trouble was failure to pick up the proper hard disk DMA channel number. This corrects that, especially for Model 80s. If you did get the first version working, upgrading to this version is optional, as the bug fixed only shows up if a read/write produces an error. For those who missed the first post, the following functions must be added to the following files: klib88.x: klib386.x: _out_word: _out_word: pop bx mov edx,4(esp) pop dx mov ax,4+4(esp) pop ax outw sub sp,#2+2 ret outw jmp (bx) The line '.define _out_word' must be added to the list at the start of both files. (By the way, klib386.x exists only under Minix-386). Otherwise, just copy esdi_wini.c to wini.c, and follow the other instructions for re-constructing the kernel. The uuencoded compressed file 'esdi_wini.c' follows all of this babbling. This driver will not work for smaller disks on IBM PS/2's. Use ps_wini. This driver will not work with ESDI hard disks on AT bus machines. Use at_wini. This driver will not work with other ESDI devices, as is, though it can serve as a decent start by replacing the IBM PS/2 dependent DMA transfer and other odds and ends. (I hope this paragraph satisfactorily concludes the long confusing (and frustrating) discussion of ESDI devices under Minix). For the good news, this driver has been reported as working under IBM PS/2 Model 50s of various kinds and Model 70s, for both 16-bit and 32-bit Minix 1.5. I've only received reports of failure on Model 80s. Has anyone gotten it working on a Model 80? The performance of this driver is rather slow, taking about fifteen minutes to read through a 120MB disk with 'dd'. However, speeding it up is beyond my current knowledge. Any suggestions and/or contributions welcomed. Finally, I would like to thank Art Roberts who contributed some of the changes in the driver, but never got it running on his Model 80. (By the way, Art, this version contains no significant changes from what you have.) Good luck, and feel free to ask any questions, report any problems, make any suggestions, or send any contributions. I am especially looking for any reports of success and failure. Doug Burks _O_ dbx@olympic.atmos.colostate.edu |< --------------------->8 cut here 8<------------------------- table !"#$%&'()*+,-./0123456789:;<=>? @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ begin 644 esdi_wini.c.Z M'YV-+U0H *$"A$&#:,+((0."3)HY:QK*26.GC!P09MY<3".F#0@X<U[( %%Fz MCD,08<B$@4/'XD"!! \:O#.13DLW(,3D:?BFSIF<=>2LF<,B9Y@Y91B^P?F&y M#AJ+(-JD<9,&#X@[4]-(I&AQCHN7,D',>=.F#$HR#NFD63HGYTZ%=$#(>2/&x M(ITY8&6R.1IW3$(W9Y+J,"ACI)(P.&/DR!'C9=Z#<LJ8L5C&S9B2.AZ'Y>@1w M3M>E8=B(S3.G91N1(!(NO*/0;$N_5,>$EBN9LF6S(% HQH$CA6:9G$'8@/$Bv MA@P8;<1@K)JTX<.(9"96!/$:3>S9D2='OFU0=P[>O@G^EETQS-W,,</&=/IPu M:\6+"=O6K4P;CL:6#.F\N:HQXE(0P8&$6AMOD%$&&VW5 -*;I#QFTPW+(B5t M4P!V=$);PQ5W7'*I*<200Q!Y]6!,&5T4!G5RU&%622>EM%)+<A3E%V*!M845s M&Z(E-)U^.9G51DIE%"5&'7&QAU=ZZH%PF1QTA#$5&SLA)4=%;1V%$@AGO%&@r M6$TR^162,A7DQGYJE=7372A%!F ;<+!11EENX%?46-2AT5YT7%TT1D]L,/37q M3W4TZ!*88:7T'E)*+I766FZ(2*A!!3FUHAQS703'7)?-,<=4/\4'PIAQS8=3p M2Z4EY8)!;>P$8D1W]->6?OO=<2 ;7\)4$!5/N0?5''7 81^3K^::$8YO8 48o M"&]X)H=YC+:%0AV;'EN6IF$$AI%&/\;5A@PIH&>K3&U\04<>GJE'1!%6)#%$n M$3)!(<430WSAA!1A#?%$%4Y0T>X34R1!11)/.&%0$$1((4414TP!5@L,-^SPm MPQ!'+/'$%$\,%A\&$9'$%$M\<3#!(&!LH!UI7&80QI>^,<:G%V'L%JDG&_2&l M&68@%1?&0YKQ$1TM7UQQ"RM,'+3$0T=<-,1'/\S'Q2!HS/$75TCA+[LBET&Rk MR2%_A"G+6;]<4LS(TFQSUCGOW'-,/Z>M]MH47SS%$$%00441!Q/Q!<!57XT;j MREN[T3)M<:A8VAPN)XGQ6G:8'?+";#?N^,^.Q82K66:DX6:B<3K9*+)NK!BGi M'#O9-Q4=WCYFK%\EP2CN46OHD,"/4Y'T^4YW/(73'*29!J!\<_F$1ER]OO2"h M B-,-08;=1@(@@AK6-0YK6B(0+SQR"O/@U14X?&";#CZ[0(:/DQO6?5F79^5g M]GNV\7WXQ8^??/G85_4"''"EH=92ZRN@?T J]%\022;12AI>L!\7L00JOT(3f M089'/ -5KG,&&4(3[':P(QP$!GB800UBL* D&20@!DG?CQH$H#A9Q QA,%EDe MSO 0&'DP3,,;@0.G@ILI4"%N'BN"!4& 00UR\(4@ "&7S .M$L((A2HL PM+d M=1$@0BJ&,X0@"(0P!"HP(8<[[.$&1_)"(8KA*"7#',_>()H5MA J3H1A R5#c M0X,(P898O& &MPA$+X)Q9:4A8EO,R,0TAD4%4&2C%.-&A3@:1(LQF$$=_V>>b MF]P/)WQTH1_5 \@U/A W2<B7(7DXQT0NTB"CLTB*6#)$.A0QDFAT8B7WY[_^a M&>2+F\)CDTRY1R6>\2)BL%];%J@_&0H2-T1H0A"^4 0G!$&...C@)YLF3-F%z M00QN(L,/)IG&2OKRD@;)9"&AX 0BR)$&RNSB_T))J5[%Q3,-XM0TJ:G&:[81y M!!*TF[MVR,GCI%&((D0,0V*7LC-$1E/K9*<UHX@;(51A"EE0#P9_Z$0AML> x M+AP2[@+*SH,,])<&L:$4OF"$*C!!CC# P3W_ET=:&O&$*30+*B]B,XJVDZ 1w MG"!'/0I2&HPTA&09X3Y-* <DJM26?31#'7#D4EZZ4XI8,,)&#Q8%D')QF2IIv M$HH0,P?M($M9S/I/9%*2AZ(^T9+OU.87IE $?1T2#S"(P4W/\J)=5<8AQR+Gu M*.G@U3\R4 '\\Y]!&EF91])FB2[,9X-VN<JCXH:07XCG6=/J1WSF5)^ $UQ<t M*FI7L Y2;L1\0A(6^]1EOC5L)RTG*5.6J6C]!(@7Q28($!L$(9@5@S!0Y%J?s M>9\ZF64,0=E.7QY+PFH&4K6(E8(-SUH$FZ[UGV4H4JY8I!6(IM*/J\1K*_]'r MAA_]]99GB4Y)D$)8!AHV8\(D)A:HH%A.QD"DXC1(&?!P$P,Q1*B6\>M*?6M9q M8(:W"%@HPA!DLM!CII<D['UK<^ [!K^NMPRX;0ET[YI75T;E(9?!$6+*T)/Np M]A*F(* ;O9S8 K5Z4(B!Z=RR1"-*C21*>90U*H;)6L4G;+1?6F#70>B8)"&Jo MYD//$0N"]</2-.@!-UO0":FZX,'4OE.86""FP5P\A; 8]\/_^Q$>TM"&.GC$n M#5:NRT5F1IN4O( F]OLIS]+P-15C% 1(_D+!DF %A(6EL^H1HI2I;.5/91DJm M7(8#&DA3LMG@B4J5_6[3T/4%*-!-S5)K<W=BL()Y%3H(4OC7OP(VA?"DF)I"l MQ')R\*PS-KR!A=QKB-5*]K7_E"&%:*CLI3']/X/HF<^AOK%S(*(K^@K:T>=*k MU[J:+!,4I'G-;9Z""G)=Z$,#NPB67O5:YUSE*]]YRYW^=)]%,S)2[]*BOWTGj M0J=0:!??4*%XR &</TC2W+U)C',130*O)-!L2Y$)23@"$@H9L"1A< CA/(@0i M*X>'I+1@52@I,$7LMQ,VI.$,O_OKJ7Y$ZZ^RLI4&L8-"TO!,-UE8 >YB<]S8h M59H4%?@J60'!'B8IQ%7-KWY^G4J)LL4H^AYD=%=QPQ>2M2<#[8"R0HQ,X%+7g M'( GRR)9Q<F"!Z+LM69L8QW[&!%>X+2.16UJ[2:Z$6/^!=+Z[>85%2)IMQO9f MU''JJD#WZPLK^?(X4?W/9<!ZUO_WZEC.1M8 1[N=-]U$51O$T\>Z@\QG5K/De MJIWD_^/[V+: E )KI"W_$2J.9KT&(O-(4E\MNM&[7BH<TQJ:*HL(-<E^]Z7\d M1.]?\/0=_LY.(8H^=3HV_$5*9-N/H+SEE!S>0?#^>9EOZL>D![Q! $X_)MFOc MY;<'<N%Y/ <B)XGS4P?]G@)%A]PW]G];)<.7:_+3G9=&+#X&LI!+8GPU'H1Db M<OC"]FTD\Y1H5U/.EXD7ZT SJ)C_GVUAO<XEVYP![J>R?0 Y5;: :W2I"V%=a MD'Y0!DJ"@@>#P4-%40,@P# 8,534EF,Q4!3C%GF2MTP'T11/(0=S<(#FYWJ^z MYU>:IF6QAW%5( 3PME\P!RV<(GYKT18] )&$ 1,0%:DYU#!8A:Y] 9M 2T#y M9F)PEV/V%U"5E'%6L'%3YS=?@'9S((#JQT@%5@>S$8*<]A%[YG8/2&MRQTM$x M:(33,@?58A9W\ 5=R(3DABKG$Q7;]85<XG&FI"8Y8U7'-SQ;.#=3)UADL 4Tw M$(!KM2>?0T9NHB>\Q1!O^%QC)X>)9H2!LBEGT#D[%1<E!2WBYVECL 9;D -Zv M*$2/*!^2Z!]$ @=$@A%SX1$G8H=:>(ATF(@'QXA*HAI 809;8(+PTC$P5@0!u M*'456&-L]WK_T230A(/L!X>3-(2FR"XP5UUA\ 4SX@;/0X;[QAR6!QW6E8S/t M,W<B6&0,-ET&06"/='%&X&)7 &G>9 =OD 8,P1K-DQLIL ,*T(U2\(U2$([Cs MR!![ @=Y4'5,@H[JR([N"(_D*!:UA0+IN([>"([)AXR!B(\"V8X$"7-A2 9Or M\ 6K$1< F8\#^8X%R3-49543F9#[6)"-] 5@IF ;J8\+:79A*%?FA) D:9'Bq MV(\-^2-?8#.]LI&LU ,V>9,XF9,ZN9,\V9,^^9,]:2L),)0)<#I/P42K Q%$p MF0!_! (O 910&952.94Y.80E>((@T)+E:#Q'J3I-0FL *7+2]1M2HC>U9'UHo MPGH_2&OV%SFMME=FX$)9H1:AX6-?!WFU0T8^LEU%P1KV<RTF0GG:DH:!,2<6n MH3>_83^&24*0]T]#=1=]Z21QP7HG,G^HUX5?:)A30FH 0@=%D5QCX (L\!N@m M62NR1X!Q$2-*$AI_6!2D]057IS\'88YF09.S:2>7@P)4( 55@&QB:8L&$1F7l MP16Y$01.D 5%80)AV(4!J1YIH#,HL)S;Y0+A,A9!83(\P$,I()8O="FC YTBk M8)0\=Q%?&1%9,IC48BUF$(H@4 )DP 5N( )]*8;369T](0>7T9P>Q(=J@65Ij M!YP@T < RCU_" (O*)V:0ITQ>9^7H8[J\9I^8Z!709\)ZB[P(B]2H(X .@<3i MXA>Y@:!>$2[CXAG;N0>RN9]'819-ET,$@QXHBB@K^G1SXZ) =!$'FH0/&9&Yh MH9P4.@?Z"41BL%5KH*$O)!N(\C:$1#=%8#< 0Z,O9*,\\05VH*,HP*-=.)\.g M"9%D< =T\*,O%*2G-J0GFB0.% :/Z:0>!*5%D$E%R 0.ZD1@&@9BJAX"JAX@f MJJ C:A8O>$-/<S!0P 19L ,) *!WZJ>%]B[Q,B\2"J%R\*8R4:A% 5C=4-4e M<% 2VJBX:!!C<BI<-GY3U2C:$1G25V* J#S(=Q!(04(H0* 6D9P@^J,"*J Ud M296T6JNVV@/?<HNS*:>XH:O0]92W&JS"&I2&J'%TJ)57P:OH*)8!D9A409<&c M]V-M8346D0?L<2R=DQ3-P2,I,BJYLI9KX)9A 7G#(GI?%V9M4"5J,I<4%ZV"b M,2(,"*XH81,3,20P4QH:47\XD8-'\I8'P8"]IQ9^Q8MN4A31!XIDT7JK J\Ma MT!#6A9&@"A72>" &>VKOQ9ZX4RH>L5(,Z[ G K%5Y7XDA)(LT19; "(5EQ1=z M(*XR 7GRZEP;T1;L6I<_5HZVTWH!$A(CT1YMJ(I+,9J$HH+' GG]M"QM\".]y M>%5^A11N\G$KY14&X11%!'E+ 26_87Z_!QJB,;/1&G2[$Q5R^G6\HB:09XR?x M&K(F,K(\-5?]6BAJ@K*]2 :G@BR2LA'/VJX^YK4ITXOIFBA#)8BW]123V(.Jw MR2M^<;55PA18Y5>!8B!RP!IY,+=$JQ"($8]^VR?9=26H,XF R58') =7*W Dv M,RX,PA"T=8]4N[C-(KFYPC-#%3J4.R;]*!N05!+)95M7JQ*?.[?,9SEB40<>u MVBJ40F;J:A8I4Q%NT)=[EA,8:!$_(#Q2AXJ+J*]Q$1UV0(9-B! >PGBU)H5Ut M-W0'T7;B9ZU?\W[;A;U!!'VG)AK\FEWPMVJKI&_J.V;4VGHI9$I1^&R@):]*s MB+ >T;Z\%+Y5:)#TF!L81 ,W4 -,4!16MA*Y\9HLH9I$4!0H '[C2RHID#-%r M$0,IL,%,\*-(V+\OB *CLYTJD#..^IRY$<+2\34^@&9!D&3'5FDLDX0M[((Pq M+,.)AC I#)TLS!5MP0,O" /;&1D]2Z39:&(H8+T2"@-8Q\39^<-4@G4KL +6p M6Z( JL+1:9!'"UE+/"5% 5O#D0-%80/;&0(O^ 1+@,7=B1AAA (B4 5ND++4o ML1^!$1?RVGMA4!8P,@?P*0)>:A!U&A;&D@9;4 ,J8+U=X *@%WP2B@+/TBBIn MV!RTEP*9&(F9MP4S0&0\D)TQ8,:+XZNY(;VJ6,F7C'F3N 4R4(L',<@ IUAm M2(HH< -AC%;#$00)>,9IO,;<&1;T$QNY$<=SG+0\<L<=LA#<:[83RP9_#*M2l M9XS(^!?3.,*GO(FJ3&0FP$DS@&]$# (^\,(<I([-2BA&/!'4>H,-N'@!F[6Ck MDK+0.YM9L04PL,B@)WH26LB'3,\R9\]#[*92QWI?G#A#_,13 @)1''Y*2,56j M/"583*@]Z@*Y]G\2JH %8;V..IL/#07\XB\ (S#]?-$S\=#V@B_Z\H*P. 2Ri MF 0Q!M(3VH4N0# %@S!--L(S<A$JL)TH[- N;:&)2B\O> 69- 1(@#!SDZ$Zh M79_B0BYZVC1(QZ)$@,3 <LXJJ5<NJ.O"@)H/$5,$(MCI=*^::+=.1%Q IY#g M@!@GD)H6ZX$"VW($:Q;_(9Y]Y)Y_7!17S-('(14XD@9)>"!AL!,H<!PP$-B!f M+!/\.14JPM*N_'+0F3.'S$%$EM485 ,*&#(NP]@;% .//<1X$ 1!P,8>Y)UCe M'<Q)X 829W ,L<X#2\=OS97CV9[O&9]TS=!V;89YO==[X=> +=BS+4:&_9]Td M.J#)4H^7(I$D'"<I@,AUG:D887&I=B:MA]K-$HRG&:!29\1!X0;J**O2-:S<c MW=VX.B)%-X_"?8^B7&3 ZMWH7:O":*SL@JSB;8\2"4MEL-=VX!LP)]_T?7,Cb MMW9&@2C59C*L)W>5-,[^6CDX@GB?Z++;RWNZB!-<FQ.;6+K4.(6H/!0L>Q!4a MB[GQ8Q70_1^\XBNUQ1JU1" 5009S8CRN82=M@787X1!DX 9G39I3=GVL1T:Gz MW>".@GSSU7' >TYP\05]!3H$X1F.NN.N^W&%3!!Z!]4 72[4?.0^SB1 /CL$y ML9TFP-A0 &F%=$,F6 1?\ 1&8 1= +1 I'<2JISQC-\C P(K *8/=OEDIV0x MS.,?%[!3SC,[<=,@<.7LMP59'FE?P.5,X.5@+N;;V>:.]N>2UM%3,-M5[!E%w M4<5ZY]F/Z@8MX /U7"R+6@:7+GJ%Q])Z=^F-G'V;?NG!YZBN/!;W6*7XK.96v MLP*8'9#:O=WI7>M1F:OEK>J35=Z4=-ZV_NL\N=Y%>*R6J^L?Z@:^8>1LJ']:u MH7=;H(<F2N!AH>OHW.'MG+0IM"<+<9=DDBL/7N$3#KKB02A&@A*^TAIQ B4Dt M87#88QY?(Q6:\G763A1UTA,(UYEB,0:1<0<[" >_8>WAWA;ITWO-,2&I)K0_s M808^AQ,.T7ZZ!7;+TI]G0);FEJZF6=U )9=FEP8LH :.2N=QD>1TP"9,KL1:r M,="@9- @D.A:SM&4AG5I4,64?A K09-C'4VGYTL'VDN[P13T&$X+_.]G"1:q M')UNL 5JH,^AI^DVR4,&80+9''-(#^M*;\^0O9V4#:!)8O1(7_6:_L+.K@94p MS\C[K.E['O5A/_:9?@=8/<0I,/,>-/)P<,]'G_2[/9MU3V0'6O=4?_<SP?>8o M+:%RO]N)+<A2Y\K6+0?8K0"S'A# _OC!#MZ4%<L'R>OF31"0G_DX*>Q&R)!<n MK%.Y\=]!HB1M8.)S!Y(:008^J@#%.&H-*GD.)6IZ4\<0[^Z<$W66+[\R$0,Mm M\%1M-VW)W,+A[GVYG[X0$A;RRI_I5J"%R/IF-P:EC[ZZ!R")TL6,N1\'EF"]l MNGG# W.:AOH+L80BEV*QOUZ>46#-X<A<EHD0GGEQ.):$DOU$4K[5#_J4J=8Ek M,U0*(?ND=N%1FRL_)^*UG/; A\A CVL.5J)<%8L-U+'TW:E1,)"'%%6XCL6Uj M2!WK(471Y^OHA-:C_/S0H/!7!H$!A:04=UL.$KA[/+FB ^*(5@6VUH#8"@HDi M4/*A&P\('ZR$0Z@1^.&Y10:246'J'V017J:O+I0(LS 'T, ;(!F 009"GL[!h M7GB"F=,E=6(NF(>.Y9<FDXE!#*%EKG2L@V7^=DQS\%Z@!0@B'IU!BMB?RL$6g M06<+)I?KQ@$/$ON;@./.7V7 8_$#:\+7>5I?*]N1A5]&9@313J@,%>?K0!:Xf M97"2(*$@66B"1U2&L97BS$/K87_SA3_UE;90&BR':%@);8)VV([?4+9*0AH0e M5=>EC[2'Z#-][,=-N'B0(>-!!9CC J5?&5I #6L.Z#OSX*$8D.1!/C G$[G"d M.$-=<@S,*B6G1!5>A-*F(M3(,W-]Y4.(@8 :L MUWUE0 ]"B>B'#SG6?0 /c M E\XQ?K=H7DFH: ?0\@;I";WK!_+(8],8(2C+,C'#FV!P#?0QE08^D@C,/1-b M0XR!6.))0/IG2LP%WCR#H ^SDPQ0:"X0[B$+(@'^& (*B"=81$8$HBW@ KO a M8 L4$6XCV2G<5)MV4V\2B+/'_4E$#\+^7M!4N&"UZ8T4D@HRV!1;;@@!*(#]z M93.$V%$^&$X34KL-(FK$P>;*7)E,Y%RVR2!TQ F%" W8C])B["^K+;%YR$G2y MRML;>A@-'E(?>3C[Z"%F:2U48+"=I+65DE $6-IB4_H:!A4AP\O @K0AR@/x M!/3#TR<& 6(:$(BUPW)41-[TU;1>Y\&))5$GSI(BXA%ESO;)#2(1B\3%5Y8;w M5"((T"@SY8/E!)CH%JVA&XB(-'%#S<4Y@,E264.44!\1".8&&X)#2")+NXD1v M82-2MZ1H$T#24AR*37&U8)8BH%GN82KL609!C64W_3&K-%_F$TI$J2'EJ"U%u M!Y924_)UKA'8<3XZY/FR5$1" >$B@OD&S&0M5$!PY!F":@\,)1 B.G@*[3M8t M)B8>@B@U-.!P77"R6"%A!%:)]L>YUE/"4G#(;&'%P;"PN89"ZREMY(C@@);&s M5 ;0$DJ(/P[H+;0%^Q#OL!T),7 ( G<1"H!S!N4 R_%P4 X&]H@AN)KRVK$Xr M 6$(9&F'$T#[')+"^H3CXC<(KS4PM]+BY4A$P*NT*)[:MXW2Q$]I ?3+])6[q M'[$3Z@)9ZA4G!'E4F!/''2+@4A@C*[#%O8&O 7F\4%FX?5"P6+@!R77=$(\;p MX(3"PAEQK_LU<$B7P4$XGNDJ4$2@@#OFUL";?QKH4Y2!Y@!-IH(+-(3^ZDC^o M#GHW$9#D\PI@UQ&P[ HHQ^R4W.(K.ZF)KB'#ST0I#@]4$WT2ZCC*@4L7T=9%n M#V.*G"D[+0@^ Y-A@]X0?U'UR",(K8&%9]!6%-/X$X"QZK#,R[=2,L7;4^Km M<;591"A18X9A4S((JIFY%X3F]H_H8V5_3]3)'+GS@D0?TR$TAF:C'!M!!4*\l MT'20.V 0%\(R2X?I1J7P^Y,U3 E52C9X*1.E.Z25H(?F%(BE)B<OG8A2:JRRk M(*PHI8,L+D*,DAIT2%;FAF+I S1:OY@T J,$2$J4UM5B3*3L9EGQ4&)*?R9Uj M0EVMG#EBXW:](&II+7O>"V Q5,#%=,LBH"C-9;!,EW1@!9RTE!9CWJ5^B9<Oi MQJMYLY@C*F-2]MF5AI*':$I@N7?P)9O;>P53]#@J>RESEH_969>,<D[Z@$=)h M!28FP_P"YDM3/#(+-GZV$[6$:0<C87C,@FEUH!2[1%08"JJ="9 X&;, M]%Hg MD0:7E1":B0*V3;?)F=L)8\ ;>4-OG$ Z<DK%S_A1!S:XBW(%P"&2HZO@')R$f M8PQIGA(C53C,B:F7-ADELU.:T3!,1J%AS8:F'J!4@EP6$4L.&+W!IL5LU"Y[e MB6&**UX@@G@7>Z;-_)DWI"A\Q+KI,W'F#;%R(, /#,UY\^6,YLTIC+=(B*!&d MOO,@:0W45(]:<M>!2=I@*5& VP0!:FR=[,MY"0(& Z*4=:R1UN7&QP<;A]+9c MS$@6P3:&":2I D8GY-N-Q,@DB0NTB;;6I@)0=CVN3*J )3?^=%]S="$HT"S(b M'9#'2Z2=3(@^V9'Z;$?3<CG '9>)*B?".YZ&X'G,GI'_:SVD,!X&0+UU0K %a M.E. QN(GE J0X"V2! -R@+;/16I#[ABN'@4L+"&_AV:10!](0N;@3]B +K(/z MQ4@JN!35)^@[@=VN!.K/UM0"7R#9>@HR$*<,4*C@*6X@S\D/N>)2C)H>2(J y MH)"0#/DJ@8H%(X@$?\(27"_52T=VIF A!>E K3"?#:L*=BXLB B55\E(-57Fx M^H3+$W$"H.?9LBK1)P^< V:B>;6Z5(N)7!]JK"_Y)!* HPSH1UK;/0*"9='w M[M$2+5N?<,>@(0(AY!3D!T2AR>HO428'1Q59PHE;1*SI+BT7$L)E((\5%7>Xv MT.R(OF:8O?B?R6 X$8'U^$_(,E\F)RM, VQ4N3$@61CQ:F'#NH73C?:$C;[3u M?"Z-$'$!B!0$!)E-5'QH'WM$2U3R'-I1LX.I*M"^"10"1ZL42IR0$C/D=ME.t MQ'#[81NIDPL78QY]A; DC$!"89B50D,Q1"T,Y"# 28AY+N5.)UN&]?)C"DOEs MT?2691$@& )1'7)#S48#AH-:Z9.^39"M.T0!ULCC0ARFG*28PH"1@$SE9C;4r M*>M0[VU+?LDN7L!?_)?R<A8Y*L&C+@GFN22GS4?JJ,-5]LA*& I IWN.DX2Yq M,/>CU.$F:Z?&[9TZS&_FYLR8I@29G3$>@D;.Y!0+B3TL>5X1+"I,?J@5LA,-p M,(L"<69*QH,H4RJ(0M2&##$-.,3+>!AG(JA;DKJ)+6+$MY@9]^).W)OD"R_"o M$<M8&+482O2++-&C',4X-:<\"&9$2+^ME46OC@H7H=I.G(HP8J[X1$49%$<8n MG,08L$4(',5F^J@ *AWPC&$&3YJ,@OH%H*)4_ (]T2H.MG"980R&-9U0T$PFm MS;VUZ5,7XSW#JEU4(G&P?ZH4H^I G:JBL9"0QB1@&D$)=$J)9C6;P18CL)U>l M6&^@G+QR*V(\2ZD:&5_H='RN\]=91\GS#@/J4BQ^MB*Q*M9B->QB9\ASJE!5k M)(729,=*84XHU6_PSU]I1\UUD*@G<YE7CJ3E<*SQ^*@D4_PQ,?D31A8H'O% j M'D*J@8(2A8:(3"&8KW1,.AE:")10D"+JJ0+_T-P"%8T0B&9!<](68FBH<<i MXSE:+"")@^X(,*PE8C)MF3X5%EN7WRJL)5RE*#C73]$4>@0GO&Y4,H7X!YS0h MNT0#Y.$K<4*ULE)2U!Y2%1*=I([(E*X:.Q)+KFLH="&A5)7$TID 4BUB6U0/g MB)&EG52[F%)10%YDJ<X).KW4O)H;Q HW\288PZ @E+<'-^441TVPAT_JS,RZf M&5QT2%'8K([JIN9$P)HP"VOC:YV2U=8MUE4#5$5)2DJ:D (WQMCN!CL+4E8Ue M1O9-C?X(_69)QXG'NJ'?U3 Z+LA%7XSGKH*"6W2YDA+IV7J2WXOTKFB4- VSd MRX$(?62577"^4&T%U9147+M";AB$UN4Y_8;.45H40AY( 152,JU0+CIF64*%c MO%G"J0QP!=,7+B$/(B1+9G6^A-):<;7HK(TE);2K1XB:UY #]6S=\E^M)Y7*b M$CWR7_$,&AU7:*!WW+L3D;%T1T_\"V3 N/X_LP!J"U1[X$'OY0KB"&=59R%3a M0RB&IA4/G+\<*$C+!(W<#UM'9")/":<="VU^*"#(2J+0#M>*"E$%81*>5B95z ML%$ALD=G(1WPHQ4HC>97/7)*E::D]:^"UI6*TA'TS*Q+J;0NMS0&C%.ZV6"Iy MB!5)B$<68ZQ5=4IE "I("CDK-L\2)Q2 !,"1.RH"R<D 'JTW*S/)K4@RMU?$x MHFHG10ED!^)3K9O!9)C@%_(R06I9#H !5@PF+;.ZZE_K(L\4*RQUL/)*76A8w M62-BW;'>K72^I&,D5E4G4[(H.A;D!JL>BZQ&;DQ:@W# =N).)!=R=B=V8U:+v MM6CM,72FS*XL#:1])$YXFH>/54#N(WL"C\^(T 8M[M)Z0*B 80@$0GEL3[]2u M1KU=1_@(.DO*[I8%>FD)FYV P;+/&2@.H$%_:P)$0TX0 ;,@!OPP,; "S /t MVVG@,8ND%77+0+&=.G6W*(@>D(D65).=0#A\-SH4!?T !P*O:MJ[!:8H_%TTs M@(S2Z??YA""Q+8 ?&>%X7<T \U0\*/RT':@&?D8FY"V9YA3TA,PEI$[CP@@Cr MF>3+1VW3>9EBI435J4(22M,X,*/',C&%WSBQG[ H;$Y*"=7V[OO!IUW*&KK>q MMA-/A4 6F!N.:O$:7N"[G9[%\(6]_/2O9C/CBWRE#N%=OB.LA(VRYTL:O!DXp M V73]_C22ZF#>$UO;M"^JRHN-"P.5GS%;_*=FHV7^>:&]-MA^JI?!9S4=_R:o M1.=K$5YO]VUZ1 Q \<&5 <>,0),Y V%@.L U%Q)W6A@N20GNR[7)I_-KW, /n MQ:V[CXQBSAPX4'/TU ORI01CG1RP_3(8#A@-^%$@=FX>W :;<,4+PYU@G.3Am M1MQC-'']'NSKA5X(VXV!TM(@HY$T.Q#+T.X87)[9@A=N/*EEQV$&1S/$\#SVl M8N+\'\?CU)"G7#%ZO<9'&$?.40B/6!9\7_++$-"[Q<+P'DVE.38@S^FY"'H6k M2;HOKI-+% @%&L((MPOK%\4+?]_/T<1$MZL*M^&V@ ,ZS&3#AG"8"RM<+SQXj MDX48QCIX6+DN7JB0$8+"&MZM4'"4JF BW(5?<"T#)TJX!B/.(AM"W,3^<Y',i MQPK_3D(DB66&OZU-19@0@X#R.X9?81G.%6>8)$S-4)$CR6!/,#MO> N+I%0\h MAU,#_"TPK3@15]FI"172<,+9PZ#%8DX6Y*.+47$E/L*<)$)DXA_,!IPP)]8Qg MRO6,1H5AR?U$["G.#;SX"V]C ]&*G>$K=@VTTZI@8.GFC5?P+G[	>3! &(f ;"\TT<=(4(H!0!_-@'J',J'$0%L(JEN)FQ=4(e d end ----------------------->8 cut here 8<-----------------------