delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp-workers/1997/09/21/07:33:32

Date: Sun, 21 Sep 1997 14:25:33 +0300 (IDT)
From: Eli Zaretskii <eliz AT is DOT elta DOT co DOT il>
To: DJ Delorie <dj AT delorie DOT com>, djgpp-workers AT delorie DOT com
cc: malcolm AT manawatu DOT gen DOT nz
Subject: Re: [malcolm AT manawatu DOT gen DOT nz: Fork source code.]
In-Reply-To: <Pine.SUN.3.91.970907130107.2248A-100000@is>
Message-ID: <Pine.SUN.3.91.970921140633.9783B-100000@is>
MIME-Version: 1.0

On Sun, 31 Aug 1997, DJ Delorie wrote:

> I still have a fork() implementation from <malcolm AT manawatu DOT gen DOT nz>
> that nobody has commented on.

I have looked into this over this weekend (but didn't test it in any
actual programs).  I attach the uuencoded ZIP file below, for those
who don't have it, so that people could look at it more easily.

The code seems very interesting and fairly simple at the same time.
So I suggest we give it a go.

Some comments/questions:

    1.  The documentation is missing!  Most of the *.txh files are
	just the original ones from DJGPP v2.0.  For example,
	fork.txh says that `fork' always fails.

	Without updated docs, it is very hard (at least for me) to
	follow the code, since the code doesn't include comments,
	either.  Below are some points that I couldn't figure out:

	* Since the implementation is built around the signal support,
	  any call to a real-mode service stops the threading.  This
	  is a Good Thing, since DOS is non-reentrant, but it also has
	  two drawbacks:

	    (1) Even harmless BIOS calls will stop the threading.

	    (2) The usual Unix-style fork/exec paradigm will not
		work.  Moreover, it doesn't even emulate the
		synchronous `spawn' call, since `exec' exits after the
		child returns!  

		The latter problem can be fixed by a simple change to
		`exit', but the fact that we still need to wait for
		the child to exit is unfortunate.  Is there ANY way to
		work around this?

	* More generally, what, if any, are the potential problems and
	  limitations of this implementation?  What should the
	  threaded code NOT do if it doesn't want to risk crashing?

	* Charles once told me that there are many bugs and subtleties
	  in the way different DPMI hosts implement functions 0900h
	  and 0901h.  This code uses these heavily and seems to rely
	  on the fact that no interrupt will arrive when the virtual
	  interrupts are disabled.  Will this assumtion hold?  What,
	  if any, are other implications, for the case of this code,
	  of whatever problems there are in the different
	  implementations of 0900h out there?

    2.  The changes were done to an old version of the library
	(pre-v2.01, as far as I could see).  They should be merged
	into v2.02, or at least into v2.01, otherwise it is very hard
	to try them.

    3.  The low-level changes to crt0.s and exceptn.s need to be
	reviewed by somebody else, as I don't understand enough about
	subtle aspects there.  Charles, Morten, DJ, Bill, will you
	please do that?

    4.  It is not entirely clear to me how large is the stack that
        each thread gets.  Malcolm, can you explain?

    5.  There are a few functions that pollute the namespace (e.g.,
        `stop_threading').  They should be renamed to something with
        leading underscores.

    6.  Is <threads.h> a POSIX header?  If not, why do we need another
        header?  Isn't it better to put everything into <unistd.h>,
        where `fork' is declared?

    7.  It seems that if you compile the code that uses `fork' on
        Unix, it will work in a way that's different from what you
        will see on DOS.  If so, it might be a good idea to define
        alternate functions that make multi-threading possible without
        using `fork' and `wait'.

    8.  We need an emulation of `pipe' function, to make it possible
        to compile Unix-born programs that use fork/exec.  Any takers?


begin 664 fork.zip
M4$L#!!0    ( &5S:R!PS YSBQ$  /<\   &    0U)4,"Y3M3M_<]LVLG_'
M,_X.N+:9VHWL2+*BV.KKW22VTZ>+8V<J=UZN<S,<D 0EVA3)(\!(SJ=_V 5 
M !0E.[E6TVDL<G<![._=A5[^1,Z+\J%*YPM!#LX/R>#L;$PN_DDN6%94*>L1
MSA AT YO_GXK^GUK\?R>5)4)&:"IADG/[W<W^LB\.KK"/R9GW_O[Y&?R#07K$IH
MQ(@HR,GP*$P%86L6U8*&&2,'254L"1=U>$SY\A!0$(V0B$]86A(:1445I_D<
M\,]OWKTC"T9C5FFHF!/X:,(Q%50><KYDN<#3(4)9%?.*+C5&HC XRU AT D) B 
M%77EXQXD?-(G*<>=I7E2'&ILSB>\)(C !8WNR0'GL+.0D:1B+#9P_U.(!:OX
MWPEYDV6DSGG)HC1)64PJ-D^YY DG"_J9>:\^TZQFG*0YD<C+X_V]?_^I I$2
MWM][=IRDDN_?197H'_/OX-'W:1YE=2P?FM,>+[Y3L%&Q7)(@X.(^8WF/C/QG
MHBC;SQ2^_S2([^9E&824LX#&<<4X[P0P(@FR=)D*#9(A#,HK".ND1T[ETY<_
M6:R8!S1+*2<Q2])<<E&R;UZ<#%^R=<1*D1\KW9;'5 #DP^]7M].W5S?G[\E 
MG1)$KQB12!@'8'^O66;)ED7U$"QH'F<L*(L4]'J".RSR.=D"ETE1OS@%?9-;
MOF9K AT 5K2(TE:<:6AP#+<8)L;FX1Z9-@?G2I:EWE1SQ=(8?AJ3!24.NGW+(_3
M!,[#P^I^, YPL2!\$&SB"1O?'E.0M8;,J 5L'M(R#8J$V[/VO5><S?'5JJAB
M>/6%584':SE_^6EZ.Q@#UR6G];?]/;9.Q?9=JK=JEQK2W:4][*(H[H.3T]<!
M6]89%84O'/D0WF4%C0. 1,%+/HI%RDE99YDQ.Y+&X "XJ-)\WB-SEK.*"J56
MQ\=:4H9JEH91@ B!0O#(RO] /JL%R\F22GPI8"DC]'B42-R*5@\>18!2*BG8
M6JB_YED19F  @E;R$?Z#XGE6UGR1D>?:!6HEXTR0YW(53I>,4(ZO<8FR*"49
M>.5  XF7\@T9$6"H1%L4E6"5/ #-"5T;TY'BZ@/\BI&XT*=3[$+]S8N56F19
M?):+_,# HGIRL3CU-D:SC+R=S?1:HB"@+#YF'@->M):/>!WBCN.T>;0N*GQ$
MUSW\OR'^!]!)4DD>?:@BR1< _,-086O(./TL#WLEV0T*R^76A=X.XD19+/]?
ML1+P1<$S5\70[C!L7?]^=46T$X#X(E AT DTB(GDD\7'S],":_+4C)2<DDHNG(!
M$9(?^NM!CP0!.-\ )5F709+1.7\Q,$?1FO\2'?1"8=_E7^3+06+YA,B*![#K
M)<@6J/?[_>;I7=:@K/#MJ_YK^1+?'<.927\]'L&:"9^X4IC=_OYV>OWN)OAP
M^>'FMW\%__OF^N+J$NCRU!%"B$((UXX^W20)R+D/VK%D2Q)F173O"7A AT I:%0
M9A*^R!DIZ9QYD* ;J$.P7\EI AT F<X&5C4#_2>D;R64D?D.@</F AT JP5B TF*B<
MJ&)4GA7T&>,$V.3%3 ?MFDO@\(%(F.QH6<2,1#3+0AK=<W*@(@C(5?G72IZ)
M<\;)*A4+H)$*SK+D4%N)9O3SF,MMAVN7\U(LU+#>.0J*-L(T1 AT 6Q #P3H(4(
M,8H :>$B#262 SVQRX)-;$3%AIW&9C;V=09+9)9,!+N7 I*<FTO1G'^\4AY+
MOE#B 59(Y!-KIXL,'KSR[$Q28Z#]<N,%*3-( !&[J%;J(%'_[ 17VI2N\191
M)-E-,)]58E,"5-Q&^3]($0(HY&-2'I AT X@&1'OX:@@CS]PL FP<00SK?%TWZW
M,9*=MOB%##VK2N3'',3P.EHWFNOR^A1U@#@?N4C%E&N$HS4'.!JHU7QEV:E@
M.XB[K.FFK-00#R;EJ[3O=?((>Z*,T0J%+%E,TZRNE)"'D\Y<RF'\-SG!+^0T
ML>Y80KW)LB("V^;%DI&+FQE121.11R!143ZH/#VL[LF"926KE#:FXMAS-!MI
M4N/I),"7%03?TP-X<M AT 8D XMHPZ+&J 'WF[I!5BFW/<33=T!=VP=C'2H]N0%
M?U%($;SY."60A5=+BL[+G-6HSD AT A DOT  AT _7/3+NH.:62%3S.G9\NLLARR!'!T%'
M:!9!/J:VI=-_E_W*,?FYIIO>. F+XUD@]<"*S3L<6IWU>3\<M/-:<D0VI'WH
M.#*=,+2R#96 Q&DK/Y"+0'Y@,RO#$86T&1VE,(V&-KQU]J_,./3-6+OAF/&H
M2DL7 U775$5Z>Y[&N;8<)CU30KT8-YR$^#D88^EL7+L"3_H6_)7U)<CZ(HN)
M>"@;?QZJ%2' ;:" \\G92L&+@D1%S%Y6C,9&?SH3.H5K- X);.?7H".(^$'1
M+U8\(6V)B=&&#/@WRJ###9Y.B,;<630V]!J%2IWXWEF.=O!S?^]L0E1ZJ!X>
M "&P_3LI^KX.9&3C+8WCQL'A+NZ6I80Z"_?W!OV)_,O-%C;X-^YU.4#',CJ;
M HY[VP+Q8FC\OTX ;2G?) 73/!4IS2#R AT Y DOT 0LG^)$> SK5+(W9W\P:TY AT F"U
MH"* C"&@<EFQ2/-['J0B2+6[>EK*/+V>WD[?7 6SZ1^732;NJIN[4%PN4[/2
M2JY;,2^S04>+-:DZDW*]/<+6)8L$)V\_3<X_^;Y4<L[JL^&V=F>2B2"A4?],
MRB?RU'MVGY9.)JV<01QA46$(JG),HZMS&1>MBA"H[G#/6CM5_?IMA48'V[;:
MRM9UG"@$R8#I3JDL )Q+9MQQUYX\"7:<5.X(%&MCGV:9#3>#=O0T?IBU_;#4
MKH)YJC(51Y!_- 5UTQVP?R?<1BM\OB.:Q=P6_JT/1K(<M))$E1@<1]OMPW>@
M=4D":,T%P)Y Y1%<5'4D3.9H\PFK&M/K]Y>7'[<H18O<B\$8%CM&ZRJ20%0T
MYPFKP$'+?QXSY-;2%[-@=OGKA\OKVV9U7>N,GKJ=(6XG2W-&*^/%MFYLTWFW
MJN;-G#(B>=$T3MNU8'LWPS%1W#&-U AT 2;K;BW34-H1T?8QVE[8_UU/VGVUBZ)
MME3NMNY71<G@@^J .B?Q.GMZ+=N&-HF"SHUT?_^H8O^I&8<45;7FL?K["M?]
M87H]NWUS_E[7L9HZF/,.TB:V1E9F=W,F-U=SUKB" +'0YP-9^0K=>D:KN91]
MD> WL?):81[)MH<!/G AT Y/Q"@D:AIIG<H >9"54Y;=C+9Z=:Z$C%8Q-43W78Z
M&MBC,]!'X_YU%N$+KE7&QFO'0:BM;Z3T?+.-P<LNKHBB]++*L$0%+MW#@<LR
M9:<MD^O<J)$N-C'=@88S$&S.-'%+-M1Q;)WXT"]_.OHS/_[TXMUOEY>SRZN#
M]:%*P=:8?_VLOMB,F,I'8'FV%,!&,D4>J(T^.Z99.@<U&L*< Q[:XV&-6![J
M _KOY"/(N3/?8_FRA0>)D]'!][D*.6DKEORSY@)C"55F\4#B-,Y_%*3.H5,/
MQ] 9F#E[EV<[W*A8E6/S%-82:+7)$/MBYG0(JV44DJ8!J"<K?T5/X\SI:30;
M]$N60V,B8)<1=PUDHYI],>Z!36TOWW6;I%5(#;36;&NUOJL8TY4_-%>\<JR#
M+6>FQME=L+3#B])"9=]FY?]C9 6-?1B<*0?Q-W*3Q9 AT 38ST)4P[!EJ7K/91!
MOI8L'4^(3EQ/6ZL=P+=#M\R2K!@V3WGJM\Z'G5V=UZ:Z>KR8PZ7O<H AT -X["I
M8S:KF"[O92.@&;"J[J)FO1FEM2/:.20P5Y?GMS>_066W/FR[X*[RN*OMX=:@
M?JO&Z?JGW,YSFB7\9*J]%VZ=2 AT 1.)<Z<45![+NBVY;"[TYX'DB DOT R AT 62[.^UD
M-_1RBQU35X\'N\0\U.FX*:AP)%I6+$G73=EI.,^XKI$=!^G$.>@(]J'T4H8@
M*=[JC)'HC/'OOY!!?SARAU?&>SR/N=/=:TITF(5 % 0>0;2+6 QY-PXSWG[Z
M1=^A.)_]3&;3%Q=3\T"=\&=R<?4+8G)!1=VJB8=,?LG0ZMJ=O.]9QIFSN>T*
M<=@%M:'"ARV5,;.+G6U4=X;W%P1GS/'U185=C80>&2'?=L'8L;7<\[YS T(C
MK5A0,5%7>2 *1(8Y4!8CL=:=B=VM!@3>WW,*]HD:7JNV E\4=1;#C$P'4EV]
M_*RG*AR'QRPF1>YZ7COHW#)<>3'8'0\')XG;_$V=+['[Q<F+!V.=K7BN?'!J
MGOJN? QVU=&>,FU<5>_K+VI)T^"57P8GT/V2$@#,D0V0'XM2)>'5O,8K1$HS
M= F]OQ=6]WCQ (0W03\D['1?Y]R! <)[)]X3JQ4N(:]*<A(\TYCP,SQ\.G$\
MV2Y%]1ALLT$[NB78:XLJAJ>U!9'*^?V"""<?L'%0S")7:G9.J^H!]*C(LP=,
M_R6G*,G9G(H4AH<-<;A$4=&2+.0V6<Z/";G60)+2,PL'][78,CVZ>=]3" =(
M&O*?99V)M,P8^0*="V#$H03/?S2C(%!;HF:"ZM-SAYGG,.CB),(=.Q-Y[TA<
M1&YFJ]6B%AHM;"4G+JY[ST/*J5-XGNP<@:C2+8N BJ7I%G?;;0BBPI/U(6YN
M6W"*XDE:]6ILNYN[G-2.?FA[6=S=702-:K+Q@=P0A-R(]PAEZU2FC_D_.W!0
M+:T?!0GQWA[ABTI"PJU#);&0:8GE1;2@^9QMN2[VWY<#V)-OZ@'=AL>RKJ^[
M*NZ #6O7HLYCZ*V)@HQ'[]T[%WI4KQHR??=N"&@ :=%RFG5 AT S4=*SEA*4:%[
M5$_/F)P1-/9.U!BG<1/*'3^633GIGJG\G<:UMUVXR*/Z29T]K"<AZ4[K8-R%
M0VQH-*?PQAYG>O#;T2U-.=X:PIJGJDM3S[;BCQ/8()O"CD4[FWK&&;B9YR#7
M#L'-0&+637E1;0.X8JIWM'-;C6^42_94?M[$1EO0@&E(&M""?-K$"B3<&EN#
M?JBW7@>([R8"(R&O8]8Y./($WZP&$!LC:5 AT SW$8'5MN8\3J!\G&/X]ULLS'2
M:99U7I>U'58'T;V*\)C. B5O,+#%]&>VL]DYSXE9I(_>A:UL*2]6/32MQE"Z
M7*4*@Z_458[SNJH AT A DOT L^!5Q;0-N$#BEA>-FUA^U8FBL/;;U<,X_T6+JQM3=Q
M3.A2/(D'8$5%E<[=C.8O<,*M\=#FGG$CGL_T'&%WJ_YKG9C;Y!@\DAEW<>L&
M&&6IW44M;]!D'M^D;X"]TB-F_7?D)NCM<*"H7GDEBW;N:'0[[,LE<,U6! QX
M2Z=_MYU;3D/.!Q<-X=]_:/XP,DHV?-;NF7 7\.X4:[21Y^^N&U%3<,=<A7ST
MCXX2ZZP^W&9>[]*<9MOO]^S.\H#AA6A2#AK?U3ALT;U;Y:?SYKN.$K/IY&)*
M%LR9'7YMQU'%*-7S\T/.T'W8\'[4/-5.P7;VGM &'/9'?=<HP2L)*/.M:@R<
M2[Z*V[O/8ZT0*ITT0:])D:ARCG )ME63=3B:#NGM=O17YCJA60BJP03NAZ.3
M-JUB^#,K5LR:HH180L.?0X,,AV!(2675?O*^Y6<A)O' G'PP=-+E5Q/BUR*=
M%!Z]-NG>G#R?M9+*C4LO3B+@3NN5^^VZW=I:Y_S3Y.(3E*YVG:??47WLROB)
M=U/UT=->=)W6WC9M)X9?1=B]X-IEKF84TQB4M]K)I+7>ZZ>MAZ[C2<NUWK?#
M AT W DOT 7=TMFV'D/;9-PMSH/AI#$@""WV]RLHV)I]&2\74^V%YMY$<"/)E2KJ9G:
M>C='.NXV/I[D=OSL(V>K#*[9 U:LF];M7W]8.]KB;YPX;G\6XN5X$#A(5-3Z
M]W]6_!UW*QK>C;;PKF%2S&@<,N;\_J*_-L^\ZPAP$1FX,<<?%,@#,\H?P$WR
MLA#FDH/!G'3^1N5;?Z;2(<M)=W-FQ]6S;?=]K AT M2UE59&&XJ%=EY)ZL-LWG3
MS[8JFS9GS[^+H+^XL18&_[;IZ;9D)AN[YC7^@B"I,Z)2']\3/"DM4 AT W,IF.G
M8,W2F.1NKHN/_\LEGYX\&96TUS#4YM0:$\>(PYV=;=62]EN1:!,P:0V6:%30
MB6P_LY?]I]?!K^>_W?8;C AT 4:!,'M*,CK7/\_4$L#!!0    ( +AP:R ?]W&A
M  T  "PH   *    1%!-24580U N0ZT::W/;N/&S,Y/_L.<V#FG3MN0X#T>1
M6Y\?B7JVHUK*]:9IAD.1H(28(C@ *<O72W][L0#XE&0K:9W$(8%]81>[V%UP
M?QM.67+/Z7B2 AT G5J0_OHZ-#!WR_A=.+QB @8>'$P]>(8+&&>_NI'E.UQZI,]
M$F3VTR<;YW.?)"EE,4PD3$3C,<C_8>0)*B!D' 0=QUX$(DL2QE,U=/:W]_T^
M_'JPUY($AA,)*%B8WGF<P-2[AQ&!D!,2W4- 1<KI*$M)X$#,0()P+T[O]V![
M_^F3IT_^1&,_R@("[R(Z\O=%FHW$WN2X.B'20$J\,";A&X-9+)D%C<$%5,4G
M]'B2\G&359!,:6-HS%X<-)DK?30'2?IUFC0&?9ZV&D.)WT2\%_M$F2!>,A,3
M):F< ?4CC7Z!^A^@?<A^1*<T!1J'3.FSL4H:IX3GHLK9@(0T)D XM^8VN'><
MIL0:#,_.;V[<B][E^?5'!^:.M/?OA(429+=M(QZ9(QG(8EPX"8#$ ;BN)Z:N
M"]:F?-NT.T^?B-1+J5]"^1./ XL"=T8#PMPIDV)UX44)*:4#?\1OW1GQ4SG5
MFK='G7R15WH7M>:M5VK#]4^/WI AT M(V>'$R((X&[SH AT CTL@))$')%#M069G%T
M#YF04Q,B81'=K 5YNV[P=9PD+LGWOYMZHXATE@+%R=R=!!%?/GL["M:8=1/_
MZ,UR$,I)ZI1O!X<EV(S1H)A1^D):%@[;RXE-[MR(^;>NU#.O4,V'I<%*/#F9
M3*F;>$' "TBTFA2Z@]HVQD)V3Y_0E,TM9#5S%,>(Q/;3)_]^^@3 P"FKC[+P
M\]&7#MI1R9 E:",OBU)(F3+9]:?+2Z$, AIE>Y1 %Q%W7G=P\&Y"(P*69@ @
M66PHCH&$FL$6M%]V<&@&Q\==.%3/FD0 ._"\]5R-T!"L ([A",/<!L[O=.&Y
M]QQVX?D1_FXKL%&RNZL>)#?U!/ -?RUWD%&RTW;@]:XET:2\-AKA6T534DK4
M+NXI-V6NH&.E,352*.N.IO[$RL?4^J0B/$'@Y=OB\4WY>%0^MMN5YX/*\XO*
M\^%;7 \G:29M/.B]'YR__[533+=*R,,*TJL&TD7_O,2I<'W1@!O>G/1+P->-
MV>N/%WK6;(&WVC)Z\=!%OW_]TBZBVX=_*#NG#$+OED#AG##SHHP(F'@\\%G0
M='?<2AL;3=DW@$12I :W-W8==MB[NED)? 1__ &5@?:H@=V['JY$?MWD].'F
MK !ND+F\S'=>=3=IOQ,3=N?Z7A2Y(?>F1#N_V4M%P-V>C1)'_79C<B>?4B8Z
M-8 AT 9H8D:00U/O7FWI5P<I+8%=,$J2=EY*! D(G[*N*M.&H4\4WZV#+B,I"@]
MV3UV73+2'/',V3Q%UU<K@)1[/AEY_BV<]_KB[;_XOV*0&E,GB90/X\Q#5*E<
MZ1N[&BFL0B ;!3SN+HGO);Y(;-C: LN ;I$X* ?>H3[L,NX8C386C8HNHDP!
M(LVN;#[BQ+O5(4H**U&W%>D=:-MZ Z ^:JO>T*N>E6O;,*HVQ MF.SO2=LBJ
M7><%\ T*72/MS69L\EDL4A-P2[7$TB#B\Q?)26VHS3,ZHP)=;G0/_R2<;3IZ
MF(RRL7F^ONJ9IY^1><)HG)J!CS/"PXC=Y?,LBP,!IQ/BWYJA7CSS(AK QP0=
MV0R>LH0SGPC!.,0L!6_FT0C/XYP[R^0+7& (68+")%>>Q0T.P\' C S(>$KB
M%*XEZ3XG AT A3R#E+<A56Z[TE,N!=).)827P6?ZG3?&Q,(RX'6HC3GG#-NP$\B
M.HX5;ZT#:9'JP:J,,?&$2Q!'6Z'EU/Z TY;_M8L_<D"^@B:3)W7GOYV>]X>]
MC]?NZ<=/UT.P3!;7,+.]OWS\<^N+;2_$G8"Y:J$T'KN2"Q435\(*J8!:"*IM
MJ[@><R(6CU4%D4WA09_4, H9_^UO2X)27Z#21U#I(R:"C-,QQ7)$I728Y:$U
M4[!PT]!0)8JVR2QH: U\3DC<YW3J\7OX":.RUY(_Z.PN5@&$W(XL-V#"#80C
M9P\/CVR$JV>NMHX$GIA:FTDF)EYGRF:_CR)PZW#.,^+-.RJ^_KDU;[<Z"4N\
M3LP2$]A47D%B#"5&)\?=INEL^ NTX*UVY8:5--(7'23#@DA^BJK(@M0W+R+F
MH=F AT SXKL ^EL+D75AYI!/65QREFTJSQ;.8L AT P7*\UT=+\$X7<1! 1T834E6(
M*@O/:@#4]!TXJ 1*\.02:-*MPJUY/&B-J^/6\%Z>UI'8 9'RB,126OO_R'N5
MSN8TM7;;=E.O[Q;V V[5,D"8'5"JLO T96>$\76I];"O33UQ"UM2GE#^=/*<
M+$=7(B+Y#:4#1Q-&'6@%%( .'&J]?"N5G1\_Q)N7& ^IS)L7*M,J)Z,U,4<+
MF/Z:F/X"9K F9K" *>AZF((N\%P3,VA@*O6.DC65E"P(O":F:&+Z8BU$7YA]
MD>,%Z^$%33RR'AYIXH7KX85-O/%Z>.,FGE@/3S3PBB0-H)GB&Z AT R2J@\+KU/
M2$!"W12PM@>J$_4!VW:$VX"%IEU-+FKSIH_G1E2DGP>]]U<GO^D:73Z[9Q>7
MV((Q+98:GJ2F7E49*Q^=!MDPB_T\$ZC/I&1JZHT0PQO&-I6Q5JI#]_SFI AT IR
M#%JR56!(4 AT I:70JB[4);'XK+)B0\RJCF#4DCV8K<6!')<^+-DY]OAA?]<^A=
M7@+6T</SFZN3RYNK#Y_ZT+L>PB]RHM_KG__]4V_X:7#3EO\.L.C%LGA364.U
M!+A'!<EU^&/ZVFT_IBH#\9B6) 4-T AT 6KOH=0U[WWUU6:+=V4T^5Y;QPS3H"F
M98KU *6SB\NRO5&4?"[NZK=Y-:.6TL6UH*+QL#-+-YV%QE%T+G$QKPDR AT DT"
MTYN6L/I\WEA^NN<6W4%VNX:7O7U8/;Z*JOQ1;GG%MI$G+ TR-==6!^N*F. F
M*5<EW .)MJU\% 41#@2,"%4>&=NHMD<]ES!)1Z4>5 AT 9Z!X>MHU?8S%"OQTUS
MJ1*XGI_][ 7YBB<:RLDSM3&3VJ@;M&2.#% K=M7C6KF[J?8M%<!9EF+A,LW0
M[; SH)9A ^/P-9,B^I+I&)4OL$(3>U#'HT(*DDY(Y:*B;"J,50F'BG; QPWK
M<V)>JRN2U/5%A"YW%JU4E'2U>L<X<5&KX(;M0KWG]VBE8[2CHD*AK-5;I41<
M6C)(K6)I6[;+!,.()C65$?CXB]DH6(Q]E<99P<-YL&?BS;6,DM4G07B^)R"@
M@=J2:#XTGF'BP)TQKIK0X<*T AT 6*$+\0+.9N6DCL*?M'IJJVATN46#]('7:D>
M\FO-;V,^QNGGAG8Q9B[#P+Z^!%\QBS<&RV:YFE6-?#GMJ <^]4>=>DM =_H9
MNR78\FXMDB%CH8'PJ6,\Z\8X1\K&8[S_.[F\!/210KOH1I_P1L3CV)@!<2]2
M,E7^)QQ5ZDCEYY=SJ[Q"4Z^YQ!)5%IU&6CA*R+A%NZT.4'C7W,-R<&>GC$"&
MX)BDI1-61#";3]T=(5$'MO1D$7(I5O$'&/ L%^_A7',5X8:1)U6W!>[IS;#E
M7ER>O'>OKWHNMJI/+FT5C AT US\;W,U>ZA7TSU6!TJXD/E>J&V0NPTD4 U$5QU
M;\<SB6PX8'%?6V&!+=;'-AM2HYN7NEC?(='1CXN#J,9U-*YYJ<LB+5AQ ;NV
M*9 +)UZT AT D%QJ2 AT 9Y7ZF36+P\6ZZ0@ W/YX:UE;AC!I\T0>QQ:H:_<T]^K^(
M(]DS'[.!)2(M7/SE1-#KB^="XA]4T*HEMVM7$JO"@>26)6M% S,^)5-U98W7
MD?*Y$2 AT JU\,SPN]#RD5J9#$Q!"RJ[*'"B$Z"\^BQ44MZE=\MSTL-M?UM\.1B
MS@:5R^*["8GQ=)+<U3FDKZ2T"@6>2&4T-<>:Z AT M DOT V0R>!<)Q<PUIPN986@["
M,EZ"Y(/8C!0DPA:.[DN6LJ+& +6*#3:!=Q_^1'UQ(0AIR*DE,RK>,SB5MA!^
M/^#FPSOEU88-6TLODCM5<MA$1M4^A$7B &,IP.[CQ&M!1 U'%#]]P&TN]6QM
M&<9V<924^GSF"^=9:Q/>PF9WO FFL[V7WUS9D)?2:IB%H2#IBX/J;4Y%JL6/
M ;[KU%H1\W7M=$WN]"VFRFI(6F3O=<%V\$);(:A\5_[%$UQIG(6 W6>('?@Z
M38R)OU5B:+%JR=N$^.I00S75D^ QQ50^@'BPL:Y\,)?F$9J5SR8:/=KO))!_
M6;'1^*"D]:IR$C]&#+_!Z)@R=WC6O^H=O8%1-C96^J[S]N!%XWC\MOX.U!]_
M?.<!?W!88_@#AWGCVX]Z1%I(_711.B IQ/FFQI1*>#."-R?YB$XC=7^[B.7F
M+*_&]I8RDY>J"G 54\USJ)[S3+7J G)2+K:\(*I<'.$UD9)-@R]\E;3R)B AT O
M&%0'I[P33UT_Y9'KZR\[8HP4U=I0TM>#DO1/5AGPY%R1?1:=?ZO WZA\JE,!
M[<)_VA4/60[U1WY8FW*[$$&OX+]02P,$%     @ _)IK(-2AZ#B5#0  WRP 
M  D   !%6$-%4%1.+E/=6E]SV[@1?XYG_!TVN:2U4T:69-FQ>9.Y.K*=:LY)
M/*;;2Z?-:" 2DA!3!$N EISIAR\6 $F0HF3G[JUZB,,E=K%_L#_L CQX#4.>
M/F1L-I>P-]R'WNGIP,-_CV X)UE,!00DB18D26!/V/_]-8P9[V0LI!T:Y?N[
M._ :;N=,P)3%%!;D84)AFE$:/T#$A,S8))<T L4-"QZQ*<,' 3%/9O AT W+#7(
MZ(*P1'10XL'NSN[.3Q&=LH3"Q=D7Z#J/[[_ P'D<?H$3Y_'\"_3ZSG,P AT MZQ
M^WX$_9JT:^B[X@+U[,H;7<.A*^_RZNQ# (>.R&$  T?BN7JL*0 #1_ZE>G1X
ME:B!,UL0P)&KW,W-\//Y!1RY\KX,+ZX_?88C1\KUS<4_%!V.%:^*ZA5-9G(.
MQP.8/$@5Q#3.!20\>9,+Y?S+Z[]K!S_K1$02_$MB-DO0I\\Z<<@7"P"@JY"F
MDO%D+"0)[SPXZ7:[&)1G'4E7LN*"6BQ0M]O1YT_CBT^W-__<2_+%A&;[@+]_
M*YXT%_,8#!5^+JC?%FEMQCE)HIAF9K99S"<D!AB/Q]&W69J.JW&23&*ZN[/I
MC;^[T]3G97>_A=AK(_;;B(=MQ$$;\:B->-Q&?-M&/&DCGK8JWVY2JTV]5J-Z
MK5;U6LWJM=K5:S6LAY;I]:CA(>01!?Q+XECCP0-(MJ#J/U7H AT 8=AG AT E@"<@Y
MA<,^3)B$-..2AI)&NSL_OT80H5I8!Y1 AT ZC#;=:7FP'6FYN!&C%[!>K1Z56J@
MA:D1!&(>WJG1>A AT LF9RK^27-LCR5 C$,%U.D^,]Y\F<),E.*<U #%BPADG90
MD!;V+P!X#?]5_P8!P%?]9'@T\#V4@]0/84;_OE94"RU?'6&@Q0T#E+9%V.C:
M%71Q<P,:-ERBEG5S<:N$O?ZZ21:^5\)P[,8)RSC#3SAH[RR)(%9^R!!*]W'4
MP>[.6C+[9?:_HI-5]1 )]?]G'<0IZ*[Z%*H?;D^!;Z J7*03@)==#Z8\"S%X
MS[Y12+@<E\\858"8+9B\9*LG25WP^^\3Q62%>E8U159$?/!.]EY1D>Z[W!E-
M8Q)6.(R2*D5\P[]4_*'P2VCB>38^#SQKKYG AT 97?5ZZI?85,Q 9,"OM.,*_.6
MZEU,9L"27-!29^2MX;.D7NE6GJK7Y\$>/N^7A(OW7YH4HWY)+8P6S,,]<XT>
M(?U\G3Y)/0S\&IVL/-RXU^@ATH?K] CIYS7Z4NN#ZC2I4T6]7*/.%/5#C=J^
M;VB/C5.9>5K/AM)V+RW$:  +-#2$,24)$ D2 AT 23E+)&><K7_+^7=K^99(#2L
MQ097IIHEHS,F,%%8HB*^(!JT!+G7X/*)+V%&I08L?(_09('+5$-5^J1NN%(=
M^E2OG)B3"/!!@YC!,S434"(>@(0A%<(LHE) KX]VIONMGK#51\.AO>-M+*/F
M2NAWUX=CL'#TL!FL_F";; V/)0=)(@T)JRFN?C)W$UP%*@.989KJ_'$RQ\@J
M)JIXL#[-J) \HZ7K"\];Y4ZV*1<T#3]L<6UA>!!4RZO(Z"A=,&>1IAD/>U[I
M[4+-Y9PJ!257NLH\2TK+#.!XI;OMPAW.23+3XWF>X49'8FN:LM&*F&9\X>RB
M>Z:$-Z-*\GYMIDB AT RU<5,/?Z7 AT U0K+8F;Z8DCR7\8B1\H]";&D;KC<)1YJ6>
M=\SO=G=Z/K2!77CWEQ.-FD4\ZJZMI!62?.T)S"_L-72"5=8*F>6A<H/V$;Y*
MZ-+:/J%37 S&2RR9U3R 4[VBHKY;('JV+I<(R2+'O>;E:=]0W#WE>&!J=+J2
M&=$IB^T1UL6UE8L87+>Z)&^#N6J-]8X]#<'H_SC2D&3!1,3.6BQQVZQ=J&^?
M199D="9<_<I=0WNF<D2Y:Y2>L/2A,TM894@!]X6#S7YE<<^ 8&T[TQ1GQU-2
M:K7"7_H- S0DV';(&&"GB&K3H4:QBGZ12EAW2 AT Y3MH(IN7,6D:=;TDBY)>,/
M%LPU[*MPG ?8$L.[=V!*@.>V]2I;KJ)@<0LDXA1(QC/%0_3DPL;=^HPBID:H
M .^>LP@$^TXAS2A:I5F?*CP28ZVZ5VCE;N16:S'/&JO.1/AE=]7M=D\*#&&)
M!$T\[-5F#*@$06<+JM[KN6K!,K,6#Z'[H*56D=-UO\&^C.<2&U5E,0(L%8(*
M( 429O0_N8IB 07#HLT820CG-+S#Y:'>+3#Z0F/&7+?[?\*"GZAGH33^_*M.
MX(IYBG6J!PR-P0)A3A>0I[5UH)OHM AT W +S-U:UR>/W_NHM-ZV6GBKD8K]2=6
M>1?.)BNG-BT).OTT=DKJ*QM][%K$G.=QI*50W9NE-(L?8/+@H&KA9H/XNKUO
M 2@; 9YM:1.56 *YH%DI<\G$'-%868*U$_:/9;NF>Q2->R9J2Q;'17!U341L
M$6</-7!35/ZY"+P AT T'V<\>I'EJ@(3O*9CU,++9&%S;I.AYF@/S*<*8GX4D^B
M]*Q$.9WD+"<948_*JK*IK/6.VQO S0W?\.SJ:O3I AT T,U98N[N,Q!2NP& KTW
M+O4;(YP[ARDM;UV(TOCN]G!/;7I:&A<CJVI<!"OJA]N,B+D*P$6 AT HJ%3RT$ 
ML]^HP:U=2IU>=2EU>M6E-,:O/+O)U.E5]]*8M^Q>#+W"*!?/<+GBNL;EB\%R
MC1E=KS$WJL:AXQLMSW3G:K0'27ZGW'0>U$06]7)=5>P83+5:TFN-5HU:-EHU
M:MEHU:A"V,+6G>\/M%]&C$&_M;JSK0PKE'@U6=4*S +^;'LM$*W?H;.JDO1*
M"%USUN0*47$AUF%I:$%P8RM>5J?HZ-T=(]<'J!5_(H4?K/Q,F^<43XU-]:EU
MH%/O@?NS5P'U<KCJ AT 2R&OW87M&8Z AT Q<&7E_ &N AT 48WZC!H<ES\.Y[IU_QLUP
MD0N)NX@]?3/;H3WM+:V8+\?X'FW(I(-.-;J_NU-4(WZI7$=?,'1W=^RYC&-L
M^:KE=#F<9'?CD.>).UM%]!_CEVQ!,S,VXLO$$=)XXS]%#E\7P)$3;#'0SCK/
M*(E8,FNP.^3'1!CD=I AT -P3BQL^19M('15)H.HR$\SAAQ,18T=C AT MQ7^,<[YD
MB1QC3>]N7P[5AGZ;#!Y'X[M)Y!IL*&Z\O<V\.C0-;DWSW06W04!KIFY[ZU<K
MI_'63B=2//D .!ZT^UJ,2<R(ZZZ"5/>53E]]9\02P/+T@*3L(.H>=@\[ O9(
M'/,0LD4XV6]D?_N\2;H:SZ/8M:X AT K74_*YX56X*E\%Q.$)EC#]N':=?I]%;]
MKJ=>K TBW352O\;W]LCPS9=CR='5J5^>)+M84[JYN3L+B9#,;*^QW?R[2=0T
MOR!M:OZ>>#HNJ5 VONPY\.^L?ULLF)*SV/(2E'6%\X=SPA)[6$3#.QC>WER9
M&KIQN.0W4U-7=G;O2.YI@@Y2%B_H M1;&DJ>:1$'>&EC^[ZWW7[/ZZXF*H!=
M8\CK UWI8=^E:_\WL,R8U!O0 AT B>\9N% L0YZ;RL7:+9?WX--=*T[HJNSLSLV
M%F).'A%S=G5;D])PEA,"4X*%)-5[IN)[@RJ\&19V&Y>FV"'@WBY"DA AT KM6"6
M3$SC>URLW^*>0\7:4MHCI0\XR^K<@SU] ^/C'3J_I_K:UYSKA3R1&8]CFOWB
MGHULRIA^%[1JIR=^+4]."_VVI4:EI+_A3$6O[5 AT 7$_5.H<#?I^;0. U/3UH2
M2=/_O[.IT ]OCSP5LJ-#XIKQ6$9\;]>S9766\W1/]#S]J3N/M/.\&+[0\K6$
MZ^'I2>L\MH \/9D\'F-3YS20LB+Z/W9AV%)1(2P,ID\5$[>)<0H\E'8T?;P;
M+K;8HA^.:+BU<*PED'$?*GVTMKJK+#UY2I;6DG'PN[U9*S+1!^IWZ+BAJ=O;
M'];M\&FZE5O#EG0=X<4VST"OQEK2]J>;$<E6=?W-'C<HZJIU\7EDK_ L-IO)
M6HJ0&B:6%802\3D!FN!7!A<!-JOVC%&OG082;$TCW;1 AT PD#5K-U\'+X'>R.O
M$[:[ZDVTK'6VZN AT QYM%ZNX@?9;W3MY]4L*\8CE&M+3;=_"LJ?.4FLH?=:7&J
M8ZX/F'OYHAE;Y]'3F'.QEOL7%-XUPO%*,(JPRC AT N7]%J7B,L^H9=Y\U'<'IX
M$\K>Q"S0'UES_6UK;HBI[$&D*X0[;("=98=78(\F AT UD4^@R8):$Y!_!;.U6G
M EU;!ZP_<&T8)1(4I5@$; H)I5&S 7?8E>0F^^$&=G=.IWXX-)ZMB?0=I9W+
M%2%Y"G1%PUR?(Y\%9]?Z@*YVN_(1S]_/@X.+X" (@"7W)&:*KB1>UNYE0+W(
M]6%R2H3M8LZN[)>(]_K9GO2_,(<$+Q1'QG!C[RAAQ>="N@%2 T/<EC,)!/[V
MFY/?6HC@"RKUL?02C_ AT 2O'Q.Q!3AXYDMP8 LR8,IRNX9*8]Y\'I^Q>3>O@?X
MZ1VW!]7!Z,/HTZV'?R^O+SS 0_)GRMM*_)*H&.#QH?L9 7[JA' E.D]JQ>HK
MK97\Y)TA=B_;W,R-<8MXT)7(C$8UV"7F7?7U3MNW02U77[_CQ/EWW8+%&HC,
M.7#CE V/@(OCIN;9;IYEC<LJDP((_'4'Z52*6(B%(6G<)QK.H@,.:RJ8+FHZ
MG:*1SJGFX%<[*Q.0Y'$,*9E1J-T*_:%;MR,?V AT KZS7=P&,AZE/WJ4F[S01]-
MW%,8AVJYH?[#CUW/(>)4P)*R+ *=A.9:^G]02P,$%     @ II5M(+^%58?U
M P  1 L   @   !)5$E-15(N0[5684\C-Q#]#!+_84I%N\N%)+0 AT P:6<+N6X
M4Z3 58%6ZJ>5LW9V??+:*]L;&EWY[QU[';+9)$=1U0]$ZYGGF?%[8P^]8[A6
MY4+S++<07<=P>GEY#M<YT8(9N">2%D1*B$SX>I\*KKJ:IZS+:!4?[.\99KGE
M!=/ BU(43%IBN9)P I5A%&9*0ZG5C LN,\ H0 31!6[\]?=/]V_A\]WX3_RY
M@>$##.%A='O3 AT 1G7QD))C(%448;8AYP;,&IF'XEF4) %3!G,-&-B 90;J_FT
MLHQV0"I B";2+KIPW#O8/]C_GLM45)3!+X)/TYZQU=1T\W=-AUF8GCM#V\SL
MEZ)L&9G64K5LM"QX>R_/)!%MHZ580\M823P ]<:#?>/82P%/5*46:F+G1(!F
M1'0\D0,'0]FDLN!EZX#)524H<E64R +RH AT I(*ZU1"W#14E5)VP7XH$ 0BTHY
M8C AT ZLZ5VD5L]YCS-.YNYC_&G8JCU5U2"SR*/@ZLK&#FY)LGD9CB.P3D#%*Y\
MO0-GT<Q66D+?+9Z "<-@2XC?)I\_MD.$P[9"X)]7  $WH[L_AF-G#8B34UP\
M.7[87WA,"95T,C *24*_9&69^#,EG@^J'N7@&8D U# I":7Z&:T$K7>L<(ZG
M]6 Y%0U_FA/= JA&FG5WCBQ1+K,:$J1W&;!JNR@="?>C3\/QY';=K9E0A**W
M/VCTS%QQBN*ID#=RZY5HW[6+BE?4 DOT  AT IW,(1)/*M[@:",V81(FE!NR%2P9,ZU
MK8A(L"R4I2IMXJIA43QHIVT<UJ5>!C08$)6V++6,)H6BK!%KCE:EHXL._+"A
M2;Q9M9*!DW:U3+Y<;'UA(R3\870[Z3CFDP\?Q_&RI9HLU^E(ZAZZ* @FJV+%
M=JV0IW AT WL37(Y7;7PF$;ZOF:-.&&1:$;ME:"W]IN"K[6SEC AT 19#C54W AT Z3S=
MQDWS_/'_T1U?&QV2_:<.V2.FB X+-7^$HZ/4=([ZA_ 6#J^R0W#*770-$SY&
M##7>&]5L9IC]^2<D(%H^(O$JQ=K-?W4KNPSQ\C%[?:<^A0%PAYE0"C\9ZP&0
MDSD# B;-&:T$TV 5VB05#*;*YAV AT 80!T :[K^2 66$-*Y(^VWNUP0"P84C O
M<QBBOLE?,2VV.51KCCRO]]Q(6,VB.G+P^K=B];X#X,GK 4"$ZYF%*RL4Z8)&
M?MO).XZ4NZ^NG:,P*?P-6QP5>F(WAOIA^+0OX,;L>7$";GNZ_]W AT 6]OI[(V=
M'K Y]Z Y^);U[7YP=E!S#*<7WQH!;W;N[,'Y"QNWR>%8AS=P?G9Y=A:[&&>7
MYSZ.G^1AM*WV^3N RW:Y ;I671L;"EQ!&_4TL=\JJ?G$QHW_-OK+N_@/4$L#
M!!0    ( ."T<B#NJP?][0,  !4.   &    2TE,3"Y#U59;C^,T%'YNI?Z'
M,T*:34=MI^$!L92,6*;L[(@%I-U!/" 4N8G;>NK8D>-,*;OEMV,[3FNG2?<"
M+SSTXG/]SL5?<GT%MSS?";):2PANAQ ^?_X5_(1HPFD&#VA'N8 @J\[?98BA
M+9+E9(79A/TU'/1[&T)I, 22Y11GF$DD"6>P5%YE AT 6%+Y%H?-L%PHHR___7N
M[3<PY^R9A WC6R!+D&M2 $ID 0D7 B>2[K3I AT Q87?"FW2&#(T X6&)8"8[J#
ME!12D$4I<3H"QD&9",3D;@)7UX/^H/\%80DM4PS?4K)(K AT M9+HK)^L958"$8
M;\C2/",-44%6#-&F4*8J;D-H,LFUP"BM<@WZ^$^)!8,XUH'C'*6IT(?'59['
MG*:Q)!D6LX,=8?*@-JIXG5)'GZR1:!APUJ4V0 A;>28Y44DA*46L_LTTQ"=.
M4B AT D=SP"+1N>UP[Z[]2(R#*X:$NHUP($EJ70N7NV_A66,6)IK(:'%A3'3T3(
M$M%8E:V&4>8R+B22.-"I_="V5!VV#E:H8+G@$B<2IW'&4^S$>5)2+H*O1W!Y
MTNZA170"&B*8MJ#%[,-@JR4)WM[?/;QZ,Q^!^A//7[XV.MOL2,?>ZYZJ"(.^
MN335--3WR(Q>1;%]55%^>#&'*XFS/!R9GR]'5TP-44=\S/)X42Y!?<R0=*^Z
MIJ"C:;U* E$$JBCU+QB:3AK=9PVGU]-8(EU:E7!\4X/K]0Q:3Y<C AT 9G5;M>$
MXL#87$13@\,"T3"-?'RSI&A5J-&]_.7-C_%O+^X?[G^^TX?X]M7]ZWGE5'OU
M/)_H[RZOF6]>L AT 7ER0:G\6)GYN,!-I?#F)M"C8^5[)M AT MXA(W? E%Y$3I1VE
M:SS]4(ZJD];3;6*E5Q".Z:+(4H_74BNK=>Z83/30 6S%3DC'N)'+#LZSMCEF
M7G_"\4TA4;*I[35_^PIK?U0,W1HQ+;!7D 'MISJN5%@5>'$ZAMKQ:.1VH9)T
M[//_HU$ZC#ODJ'&Y%N7R]^D?QT6HSC9F@^&'#K3:O AT 6<K_+@V56<^5LX/>U<
M+:*<K1ZS/%"P1N<WX#/HV8GOCO AT DE_FJ\[T[D%ECW[QURTEZ$6ERO;P$(SJ0
M6M?&U?,^[D;UH(1Q./N8 AT C^2H!WR"'WR:*7@ T]](@D?_#Z5ACMY^-C8VG1_
M NT\Y9XGVTY2;3![V&#4(Y.?X=2NV]Q]G4_O<XWCL ?^,Z1!'^XT:_:KHGG-
MB!R#QI/P\/3QB?&_+*63G ZE=3!0-P6=XZ!6$CIAH38:VO\+CJE\[66N FJ1
M_MA1VI<Q:+Z-&<?W[\&*IXWS.&P*6E[C=-CJ!5(7(! IL#G/VE$=M\MCG[U]
M1_T'4$L#!!0    ( -E^<R#%HXG[S     @!   (    2TE,3"Y46$ASR,M/
M257(SLS)T5$H*,I/3BTNYN7BY7)(K4C,+<A)Y>52SLQ+SBD%JK$ISDS/2\S1
MR[ #*<C,*P'KTBC(3(DO48@'4CH*(,%XH#)-:Y )>2D*<%. _.+2I(S4Q)3,
MO'0%E]3BY*+,@I+,_#R0E#?0G&*%DHQ4F L4RC-+,A0<RA*+JD$&URHD%BMD
MEJ AT 7P^4]7?04/-/S\HM2BZ'*@+;6ZH$,0[4I*+6DM"A/(2PQIQ3L"EU#A?P\
MA=2BHOPB'874G.)4A:K4HGR AT 1@!02P,$%     @ KT9S('K-%Q!M 0  30, 
M  <   !0055312Y#G5%-:^,P%+P;_!\>%(H=\M7#'D*:P.*P6>\N32F%TI-0
MK&=;09&-/M(M;?Y[+3M)G9!#6ATD-&^>9C1OT(&H*%\5SW(#013"S6CT V9_
M8(:B4!R[H!$A6MP_QW?S?H6GA0*&AG*AH3/PO2LN$V$9PJV57!O6SZ=MD)5K
M?@()ODP&)E=(F:Y+OH?_#2H)24X5$,)665F2AL%E1 AT HY=B0NC>^5U&H,-@5G
MH>^]^1XX?J5!,C2$2D88UW0ID&RX,I8*4G6A4K8T1!MJ, C'KHFGP3F=T-7J
M5VN*1K-:ET%BU8[5FRYM&H8- 4"AL97MX;@!6-&<;_OZSMHK1\%VPBWX:X[=
M^C0R:7N257P'3F6[19L,#V:/VG?Q7])U\LDMO.1<8'"42BIHIJ\)^;5X^$N>
M?L:/\=W<74CT._XW"^']O27>F[Y0;ES@::'VGSO)!.5%D8A"9F<FU+UI"%NW
MH=#8&NOWA,Y,LGZ\%4YU_P!02P,$%     @ <G]S()A]PF7Q    A@$   D 
M  !0055312Y46$A=D,%*!#$,AN\#\PX!+S,@\P**#.C%FRAZ\#+4-NM$.DEI
MT]U99-_==A1A]Y20/__WMQE9'$(P.>$UA"@64VJ;,>6/&8TC_H27(ZM9VZ9,
M<35+\-@V5\36YV*\S4Q)W3#?U05B_45U>R'7WU0+._BWG8,?,-E(04FX2H\[
MT!DC B58I%2=#8-P;6*QE%*4769;'7 @[^%(Z!U888WBH6UD8\#]TRNH;"WC
MJG^  :0&'"CA!>LK)P5KO$^%,=IRD>]I<F&A:0OH^A-T8U AT C[L[FI[ZF?-(>
M(0<PD#Q9/'O%</GG9]0<&=Z,S]L]WC%*6?H!4$L#!!0    ( $* <R#-_KS%
M?@0  *$,   &    1D]22RY#G59;;]LV%'ZV ?\'-D,"*;[$3KNBEZAHEVQ)
ML!O09NC#,!"42-EL*%(@J3CNDO\^7F2)DMVNVTLB?N?P7+YSH4^.P;DH-Y(N
M5QI$YS%8O'SY'/R*6"98 6[0A AT D)HL*?WQ:(HS72U6Q)^(Q_CD?#02[D;10#
M6I2,%(1KI*G@,R/XX8_+#Z_ 1\H8**5(4<HV@ L-,L$UY14!>B4)PI0OP7I%
M&0&4 P14B=:<8'LE(TI90S<KJH 2N5XC24"!-B E()>$&(.8*BUI6FF")\8Z
M,"H2<;V9@>.3T7 T_([RC%68@#-&T^PD-197;W9 AT I:MTKR!'LM1RV9<MQ=/3
M'D2DY**'X;*@/4C1)4>L#VILO.WS[RGR[D?#FZOW/[Z[ ,<UFLPGQUDEH3\F
M\]>C84DQ- P;T'PYA-QK(KGA5 AT  DOT H]*T6Y2[("&]!"&W8L$082WOXM"Q+*)BQ
M2PLB>Y=KL1/!%6:!/%LAV5,0 AT 9NN>-L)7D79)LJV*DB3>ZHAY09FC&"0 )N8
M]6_3S41EOA(P733Y%QN;?JW7F+L3!O.>H,I6!%>,1-:*K4E5Q*/AWZ/A@.;1
MDWUAV58?2*(K:2.T:HKH3T49M168ODFK/.XI8F'^6,.#FM@-)0Q'L94- AT NJ%
M9KCAR,F-ET EF3O;X:VZ$ZSRHY^BJ!-0SM!2'4'XT^_O?X8?WUW?7/]V:0_P
M_.KZEXL8/#R 4'V-J+;IYD*Z )G AT RSTY3A96^FBY=:0J+0*R(HO%.\R;;ZG[
M6I[S3LN9BKRH&?Y2'4!+[SX54_C%ZZ:4_?:)M_7P AT J@;O*_+[JW$630I#_P$
M1Q^N+V^NWE],^AT5OVX36A(-$<<04X521N =E;I"S%C51,JJU- 21'PS=!JO
M'I>XUSO68"F%)IDF&!8"D\#6G4&%C%Y,P-'.V/JTD"JB AT T+<K<'A8:8FA_,#
M\ H<),L#8.?@Q4P1YFS$P.L[4.2Y(OKIJ6$UJKC-WG#8NNB,?A.H^L9 K8=X
MRVR/-<+_E337 AT G[FW3,4]%2S*TE1.GJYWXOF<G8[:;Y AT I0B>6)Y(6OK_JG2]
M^]5-X(JR7<.1]W4<%X AT QD46*?B8BK]'84UGK3M\XKVXS=T"[@Y-V%P<RNPSZ
M^L&<]D4EDH3O7'![H 9I#J)V<3Y) (2I4O[H%HQ+;A#NUD##F1 AT T&Q;:%Y*0
MVW4$L5 0JPF8WS][GL4=O:/$H$_S/.^@#Q9=S.<^K,=N&A0G7FT<U<_9>!R?
MG2V>=1.K>&HHOR48IIOFS?O2BAST=U#3>K9+OJ6.5F]?N3S^]:"]SOZ V^?$
M:_4>$O>0_:^MXLVY'@J(J,/UK=)RU8IV&LS#01O5(Y,T\?XY_VL&+=1(U:[4
MS=:@F;[$[ITX?%T<7#/2JM4O7PO4/V6F00FZ(YTTQW'7O%6?[@_+N SK>]:U
M.#[]_KF+HM,#NSIAF[@4MTO3_9YIFBNT$E0JC,FS$]@:AY>F7=?[3.PICRK'
M=>6F[;(;%*3(RDWD]N=QO'MG4DOJ*[WUZ<.OE^%VW_[W9;[M]6:6_(+_!U!+
M P04    " !!?W,@CD&?MQ<!  #Y 0  "    $9/4DLN5%A(K9!!3P)!#(7O
MF^Q_>(D736 3SQK# 0X<D 34JQEW"CMQF&ZF,P(:_[N=#:+Q;&]][6N_=M)B
M_"]15Y/ EK#A^#I"#NY05ZK1P>QZ3W5UX4+KLS;<:DV2;;J[TM [^YP&T^4;
M.WMU4SS!XNS37/)+1\:ZL,64I(VN3XY#*3UT3K#)H2T"C-^;HR!2RC$(QM<P
M.DDH"2:MLGU0C($_D1BS^^5BMAC!2%TMUN/I<@W+) B<(+GO.2;LLD].&=!'
M;DF$I 'F2=&47\#!'\LH(Z)Y7;F 8BN4CWI]<6VCV4GS]X;5P(<GX_-PW^K$
MF[KS*LRGX,V@!-J?5=U6I-9X7P:=Y!$XHJ[>*?)WQR]3@]7//_1)^@..RO0%
M4$L#!!0    ( ):8<B 2PU.!: $  ,8"   (    1T544$E$+D-MD4]KXS 0
MQ<\V^#M,65CLT'72I AT 1*VK+0\]YZ-[(UEM7JCY'&FWIW^]U7BD/2N#E)^KW'
MS.C-<@'/MA^=%!U!_ES S?W]!GXQU5BEX86-RCK(]?3^J9EA.T9#*="4YD^1
MI8E ZB7/"Y"Z5ZC1$"-I31FDETYZ\+:E'7,(FHU0([0.48W I2<GZX&07X.Q
M$"R.&1I+6"RS-$N_2=.H AT 2,\*%DWR]K[LGOZ AT CT-]46A9:XG)^::L.O;&4+G
MC)TQWFLY0UX*P]0<$@_=+O6GSB'C4_LLQ7="9Z#IF(.JXJ^B[ZO)(8VHK-D>
M+=(0A#BKQ AT Z&3C AT B CU6X;*-%2=PR/ZWE3RLXF^(7+;YI09Q48E#&N(4 AT SMH
M/YZF<@DJC^&(!4(%R(\3P-5C&#B$/SWW9?:NY&0Y<VSWXC1H5.(>$-]V><6M
MK[B_AM7[W:8ISGS?'P-=MVU[1O]%>K-:K?;TX],/CCE$^A'C^ ]02P,$%   
M  @ '8!S((!%M-#2    ( $   H   !'1510240N5%A(<\C+3TE52$\M*<A,
MT5$HS<NLX.5R*"Y-RDA-3,G,2U<(KLPK202* 453*Q)S"W)2>;F4,_.2<TJ!
MVFR ZHM+4O0R[$ *,O-*H 9IE.5GIFA:@_3DI2C ]:&:[)):G%R465"2F9\'
MDG)/+2E6*,E(52 AT HRD].+2Y6\'3142C/R$S.4,@L!CFLL#15H21?(341*%*2
M400T12$S#\(%:DDO2LQ5X DOT 4JR4 AT L :DO*LW+ UF2GP<VL[BRN"0U5P_="4&I
M):5%>0IAB3FE8.>%H%@/5 AT X 4$L#!!0    ( +EI<R 1"442! (  &H%   &
M    5T%)5"Y#O5-=;],P%'VOU/]P*Z0JJ6B[O2!-)153-UA%&=)4Q*/EQ#>)
MF>-$_J $V'_'3D);VB*F/A!%B>[)O><<'SO3$2S*JE8\RPT$BQ NKZY>P0<J
MDE(4L*:U*!4$15N_*:BD&VKL)$,YD=_#?@]@0[D)0N!%);! ::CAI834C5F-
ML.$F]\5C$$Y\]SKG&G29F AT U5" 6M(49(%:*H AT 7%M%(^M0?829.F8E:+2U!,8
M3?N]?N\%EXFP#.&UKO74ZT[R^3XL>)Q,M;&Q/OB 2LGR &-5P0\@S3-)Q2%H
MF.,]I61RA92U6OT>?C.H)"0Y54 (^Y)5%6D[N,Q(*6>^J>*,F'ZOR8Q+ R/M
M\B*B3%R4/YI\[AYNKV]@9+"HF AT GP9,XJR= 0*AEQ*=%8(/G*E;%4$$?CEF<K
M0SP7!N',#_$T.&6BV;%&",!+1-T:9BVTR;G P'\81/>?5BL8#INV\;QRVR7-
M($JLZ AT C#;L8I-4S-0-ABG<*1=Y3/L.ZO9L,@@MO%W7)ULX45&NLR'E]VR%/[
MVID:SU-!,_TS(N3MQX?WY//U<KV\?^<+LD^5EBJ8S?[A]GE)=QF<2CN*+L+?
M+5N1\T.!W7&)+O;0+I4=]+2-46CTY@;!443#OR44_D?+^ZZLC%W7(S(2UZ3B
M['@UYYJHJ-6[NJ%K'CZ=O?_A//J3)_7/<^K$W/T+4$L#!!0    ( +.Z<B"K
MD"#]Y $  (<$   )    5T%)5%!)1"Y#G5)A:]LP$/T>R'^X,"AV:)+URZ!X
M#AMIH8-N'T;W6<CVV=8F2T8Z+_/6_O=)LM-F7 AT JE8&3N^>Z]=T_>+&&GV]Z(
MJB:(=C%<7%Z^@\]<YEHV<,=[J0U$S5!_:+CB>T[=ND*U5K_C^0Q AT SP6UHHAB
M$$TKL4%%G(164+K)SB+L!=6^^!'%:S]P5PL+5I>TYP:AX3UD"*5!E#T4PI(1
M64=8G(/2CMP8KJA?PW(SG\UG;X3*95<@O+>]W7CI=;T]AJ7(\HVE+K.3#VB,
MTA.L:!LQ@:RH%)=3D K'>TJ):H.\&+3F,_Q%:!3D-3? 6/&]:ELV= A5,:T2
MW^2R8C2?'6(+);CS'(0B6%J7'I,Z'TK=^BBM"_I/B.[FZ_7'*U AT 2-FT@ Z_C
MMF 5$N.J8"Y GDED/X6ACDOF2-SF74O,$V,4)WY(E-$I?^$^@Q" ETC']9(!
MVM="8N0_+-(OWVYOX>PLM*VVSOXB=4<\=CK^,!_:X@$;>0'"34 *U[N;3[=7
MR0$V2)T+;W4Q(@_#*^_,Z'&U]9EYIZ4VZ1B!;W%EE"13F5<%,YI?G$H'[N]A
M$3WC)XX/XX\&_K. ZH4.X.DW2-\>H6-$+NA'\.&9=5^LU?+./M6!+APH+1[]
M#J^C/WG5_UZT$W//7U!+ P04    " #S@',@@Q620L@!   "!0  "    %=!
M250N5%A(O5--:]PP$+T;_!\&>NBV."X]]X,]Y))3H2V]%D4:QP-:R>@C71/R
MWSLC[1H[;"F!ICX8:31Z\][HS=YY AT _!+4>I@"EYCC&VSC_EV1&7(W<&WV25U
M;!N.XE$=)HMM\XJ<MIGO?8QS?">7^_&SI$QD?B;@/WPJF#MR"=[&I%*.;SX(
MA#.PP&P+76/4@:9$WLG1]Y$B#-EI"8!6.6($2I&7UF* Y,&@57.)X1%U+HG9
M);+@'8(?RE';Z)&L.8MCD(3A0$XEC#W S0#*S5!S1K4Z-1T$3#DX($&APP$-
M<?P<%LYIQ#,PW%PSDCG1H015=0<T<)I*KP5$W2NRZM9B+X7EMLXA(#<IC8'[
M4!@X7^EP7%(<7+T7"K4J&D;A,GO-[_: (3C_**<14_^THU\K_1_*YM)M+AFS
M%K)#MAUCKSM<X>-327[81$1)VVS[5+O(60&%B7+ M'SX4P%6(P*8L'1DHX/?
ME)PAS:BE:L&!-$]8M!5]&J[^S<=8B_<G,B]A?U[M=DNP@]4TU(TO=O^OHU%,
M5]S.?)>9V-^K\, <'[?3\<4M>T$XF:%>W[QNVYR>MX=GN7!5>&7Q_J*AZC (
M@;:Y[*IX:2S^YJK?4$L#!!0    ( +>4;2#12T?,K@$  *\#   )    5$A2
M14%$4RY(A5--;YPP$+U'RG^8II<&1=GFT$.4JM+*L WM"J*%J.UI!/:P.$L,
MLHV:593_'O.QS=(T6R0CS;S'FQGF>>8!JYNMENO2P@=V"A>7EY_ _P8^5;66
M= :&"%A\\RN,OIZ[?%%K$&0S61GP9L='[V6A!!6 *.Y0*EZU AT K"2.4=;:LJ$
MP1(=RU&DHO^P>K5!C#=5:[IS?$0/EK2"$W8"CXY!2LABY+Y4#J)%O&(!SJ,D
MQ,4J"))T'OFNYRDS25<A2P<63J";. E_8A+?.I4!&+J$SX;LW7US7G[93[9*
M&BOZY/YTKHGO^&,>IJYR%R"[#I<^N.?CPT5'M=N&NGK&ZI9;&*;',7+C ;A:
MF+<%N'/5Q:TR<JU( "\S#9ZQ&=_T@%36R6PJ4G]"*^_)5))3GVFD0-N]]Z)6
MY57--R0PW^(.ZCXMJFQM^NB?K7E-IDG9 X3?F;12K;&H]0&6<MMT\!.DUZM@
M[E]U_V1<\) !;W3$F<=;/=JCI^UV#S,/WDWV-1AQ#YSN^35\R# ]^PUW+6XC
MEH9QA&R^7"9OBTYY+XJOO/TT,?1?:KM[DION>O0JSU!+ P04    " !937,@
M09S.\?T   "W @  "@   %1%4U1&3U)++D.]DL%+PS 4A^^%_@\Q(KPPD'H2
MZ2KHP8L'+SL*I39)\VQ]*6WJ!-G_;DS7N17&+L-W2GY\A-_WR"52V0Q2L65I
M">VUN8^COVP@[)T,81Q]6I1L93I5R!=2(.+H.XX88TB.Z2Q)PV5ML%%P4;\9
M="!$R$;,CUXLTNF,&D!?W20BRQ(QA7[:SK^G AT 3]P,6-O[X["KS31F[&2AH,&
M?BKE2@-;JL:F 9^T*#WBL\U,<+6V,\$SZSW^OY[Z<JHC5IJB8WDNWZNVS5VP
M1:IR2^EN!Q\%TIZ^!FV[&@[:[?V#]!05EKG=7_';>CRW@^N!/_NN2C)+BA]E
MGI"P-TKRG<L/4$L! A0 %     @ 97-K('#,#G.+$0  ]SP   8         
M 0 @         $-25# N4U!+ 0(4 !0    ( +AP:R ?]W&A  T  "PH   *
M          $ (    *\1  !$4$U)15A#4"Y#4$L! A0 %     @ _)IK(-2A
MZ#B5#0  WRP   D          0 @    UQX  $580T505$XN4U!+ 0(4 !0 
M   ( *:5;2"_A56']0,  $0+   (          $ (    ),L  !)5$E-15(N
M0U!+ 0(4 !0    ( ."T<B#NJP?][0,  !4.   &          $ (    *XP
M  !+24Q,+D-02P$"%  4    " #9?G,@Q:.)^\P    ( 0  "          !
M "    "_-   2TE,3"Y46$A02P$"%  4    " "O1G,@>LT7$&T!  !- P  
M!P         ! "    "Q-0  4$%54T4N0U!+ 0(4 !0    ( ')_<R"8?<)E
M\0   (8!   )          $ (    $,W  !0055312Y46$A02P$"%  4    
M" !"@',@S?Z\Q7X$  "A#   !@         ! "    !;.   1D]22RY#4$L!
M A0 %     @ 07]S((Y!G[<7 0  ^0$   @          0 @    _3P  $9/
M4DLN5%A(4$L! A0 %     @ EIAR(!+#4X%H 0  Q@(   @          0 @
M    .CX  $=%5%!)1"Y#4$L! A0 %     @ '8!S((!%M-#2    ( $   H 
M         0 @    R#\  $=%5%!)1"Y46$A02P$"%  4    " "Y:7,@$0E%
M$@0"  !J!0  !@         ! "    #"0   5T%)5"Y#4$L! A0 %     @ 
ML[IR(*N0(/WD 0  AP0   D          0 @    ZD(  %=!2510240N0U!+
M 0(4 !0    ( /. <R"#%9)"R $   (%   (          $ (    /5$  !7
M04E4+E182%!+ 0(4 !0    ( +>4;2#12T?,K@$  *\#   )          $ 
M(    .-&  !42%)%0413+DA02P$"%  4    " !937,@09S.\?T   "W @  
M"@         ! "    "X2   5$535$9/4DLN0U!+!08     $0 1 )<#  #=
%20      
 
end

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019