Hi,
With Donald MacQueen's permission, I have ported his SmallLint UI to D5. The attached zip contains two packages. The "RBSmallLint Changes" package contains loose methods additions and fixes to the base system. Blair has told me that these changes will be folded into the next D5 release. Notes about the loose methods are in the package comment and appended to this message. The "RBSmallLintBrowser" package contains the Beta v1 of SmallLintBrowser. You need to manually install the "RBSmallLint Changes" package first as there are no dependencies. Appended to this message is a message from Blair discussing the issues involved in running a check in a background process while modifying the system. Please send any UI suggestions or bug reports to me. Please post any LintRule suggestions or bug reports to the newsgroup. Thanks to everyone involved with Smalllint; Don Roberts, John Brant, Blair McGlashan, Andy Bower and Donald MacQueen. With Donald's D4 UI and the new D5 selection presenter goodies, I didnt have much to do! Thanks, Steve Waring ======================= Noted Defects: #1 ProblemClass listView should have a context menu to browse problem methods for that class/rule ======================= "Blair McGlashan" <[hidden email]> wrote: > ... I suspect both actually have race conditions, but that the VA ones are > more obvious in practice. It may be because VW's multi-tasking model is > particularly "co-operative" that one just gets away with it more. In Dolphin > and VW (I don't know about VA) access to the sources files is _not_ done in > an atomic fashion, so if more than one process were attempting to access > them, then there is potential for them both trying to move the stream > pointer and read (or worse write) a chunk at the same time. > > Imagine the situation where SmallLint is running, and attempts to pull the > source of a method from the change log. At the same time one is saving a > method. There is a race for access to the change log. If SmallLint loses, > then it ends up reading invalid source code from the change log (i.e. it > moves the stream pointer, but before it can read the chunk, or while it is > doing so, it gets pre-empted). If the active UI process (which is saving > down a method on the users instruction) loses, then it could overwrite > previous entries in the change log, corrupting it. > > I think the second scenario is either unlikely, or if the perhaps > impossible, if the SmallLint checking process is running at a background > priority. If may itself get pre-empted when attempting to read source (and > therefore read the wrong source), but it could not pre-empty the higher > priority process writing to the change log. > > Other potential race conditions exist where the Smalllint process ends up > with "dirty reads", e.g. it starts processing a method which has been > overwritten, or a class which is deleted. I think one could code > around these. The first example probably doesn't matter, and in the second > case one just needs to be prepared for the class having been deleted when > presenting results. Perhaps there is already code in place to handle this. > > Personally I would have thought the most sensible action would be to make a > cup of tea (or tea and cake when necessary) :-). ======================= Bug Fixes (RBSmallLint Changes) === CompositeLintRule(class)>>ruleFor:protocol: Bug Fix, overwrite, #rbDMM === VariableEnvironment>>allClassesDo: Bug Fix, overwrite, #rbSW === VariableEnvironment>>includesClass: Bug Fix, overwrite, #rbSW === SmalllintContext>>protocol Bug Fix, overwrite, #rbDMM === Behavior>>fullBindingFor: Bug Fix, Addition, #rbDMM === Behavior>>protectedBindingFor: Bug Fix, Addition, #rbDMM === UndefinedObject>>protectedBindingFor: Bug Fix, Addition, #rbDMM === BlockLintRule(class)>>undeclaredVariables Bug Fix, Addition, #rbDMM === CompiledMethod>>withAllBlockMethodsDo: Bug Fix, Addition, #rbDMM ======================= Cometic Fixes === BlockLintRule(class)>>tempsUnused Cosmetic Fix, Addition, #rbDMM === ParseTreeLintRule(class)>>contains: Cosmetic Fix, overwrite, #rbSW === BlockLintRule(class)>>overridesSpecialMessage Cosmetic Fix, overwrite, #rbSW === BlockLintRule(class)>>superMessages Cosmetic Fix, overwrite, #rbDMM === BlockLintRule(class)>>fullBlocks Cosmetic Fix, overwrite, #rbSW === BlockLintRule(class)>>utilityProtocols Cosmetic Fix, overwrite, #rbSW === CompiledMethod>>equivalentTo: Cosmetic Fix, overwrite, #rbSW begin 666 RBSmallLintBrowserB1.zip M4$L#!!0````(`"Y@3BP/<>'71AP``&Y_```6````4D)3;6%L;$QI;G1"<F]W M<V5R+G!A8]T]77/;1I+/5I7^`Z0\4+JUM0`(`J*<I(KBQ\972>RULLY#2JZ" M2,C"!2*T`&A%>[[[[=?=TST`!H!!29:S=>.*26!F>GKZNWN&SO[\8YALPB+: MW]WY9-V$R]_##Y'U:7='OIY\9[WAK^OP.CJQ!F]/SZ[#)/DQ7A>G67J;1]G@ MJ!Q_$_[Q+LKR.%V?6/;+W9UG%V$>+Z?I]76T+F"VGFOQ9.LRS:Q9FMQ<Q6N+ M>HLP^=T:'=G6"^LT*D++V=WYRZ/;[L[NSB*ZR#9A=F<YWG/+M6T77YY%D55< M1=8O:9H,!KEU%24W%B"[(<2NTRRRXC5\O0X+V!1NM=PL[8W)HW<]4&/V)ZL5 M`9;!^3*+;XI\O]:Y3,(\)\KFSZTD3?,(UBZNTI6\^Y"D%V$B3UF4IYMLJ7B! MH 0XP?D97P+)P]7JQ/J&:)F47$)FW,'L/$HN:[M0"]8G\YSY^F.<I6ODG?7B M>^N;FRR]2*+KLR(L-ODBS4Y>ZAG(T[>;)*)QJSB_2<*[U^O*@+,HB99%>A^8 M[\(L#J%SJRFUO>W_G*Y?,*W^IDCXLT&RBW@-LJ ZJ>_$.CB+"FL=W5:@'=9( MI;@Q2>(P_^SX_;?"*'-5X(GT-1=M9QQN>3"++L--4E@?X^AV\+*YH):V+,JB M?V[B/"Z:4I)'Q9M*/R[^:@5$C8L[`PE8[V.4I#=$\K.[O(BN!R_+3J6NS3<6 M*GJ*'^LB2Y.\9<1/[]Y8IT"^EJY?,M#%G])55)OX<UI$-^&J\N;M:44@\EJ' M-B\M-&(J[!&]IJ1X0-5X':-BY_OT7AL@- =G8 L2*]]<D':U< :6B-=Y$:Z7 MD8@J,W7 B^5 [QRP!"X2D.J+#+2E\LA"K5\,`#K-,4&CEBEE`KQ/DW3Y.PZ] M`81G,;V#\3100WC5@>1 T8(5A,5:$0)>_TCFZ">R#OQVK\4N*/.!:DA#&KII MA41KP.6;[.+LUZ-G**O12MG]D?6W?[P""7WV'I"Q]MI76()_^I#BI@A>4_WW MPN4RRO-X_6'O9G.1Q$L"!<"T43*0+.V3%9X5611>]Z#'HRR>>&*A6,D3DE,A MK]<S42X7W+O)8% 3U3;SN#UI/UFY0O!3ST9X&+CU7S,P`;PM]%OP%;!"(W"D MQ\&79WK+:C$R*B]K'0/K*LRM0?WE`5$HYUTANE.E10K,H97'_VK X1V6T]"7 M/GO/2"_!JJ#&*UJW$>SADM+F:OY$\BOJF<:ENNJAM4I/+*3?L]].HG!Y97U2 M3R7G*J3%`2_5NQQ,4W1>+E*S,5]XA7;.M='ZP9S;GZ]75GJIPZR5-NG*9.V? M5:,`MF/*_$=5HU]UN!\V,;B3`^#9S+K,TFO%&Q#0_W:\R>EX-G9>C$;3Q0OO M='KZXM0=^2]F,_?8=8Z/@\G,^9_!X5X+T*6.@0<DOHW^*@4(O[V*$V:9-R<9 M(AI>I)L".?L3D JH<9K^@1)UB'Q9AC>%"E G.,K2L)3BQDOL*R7"PA?44T1_ M(-967],`=W=NP1[ 5CY B)4D=\ 3V@=H`WCY=W&^"9-?T^SWW+JX@]!_;;U- M+Z*LR*T06+F[\Y_IU=J"]"!<%T>6]0L$-1(@W*1908. 03PW3%;63^'R[YLH M6A_!Y+]!#PZ#M8I43_PXPN%G!>!A_1HB,P$R$NR7JSBW\O2RN TQT,\100JC M2,1 `:[#&."^*K /9/)CC#H]&,#^XGPP> Y ;N/BREJG%D! E.^>6]$?$(7E M2 $KOKY)XF@%[XKED26Y1H52-RBSJ5I4L+V-?X^ML+!N;V^/THO_`BOW(@3R M'($$'2EF`2W7Q/ +DH,?XB@+L^75'?3MOX8^*[2NY)UUP;+"JRPW608"!6Q1 M5A;VP\I&0G=$"<HS9;TI\*.(S#)6.FG$*PP.1*R"&4</%;S4&Q,I;?"%`0`5 MP]VH8B) R<NA@#7&3PK9]T8HI3$1,$BO^2HN6$V68)2*"&+5FW2-9@G1F]([ MB:$5H)P,%T@`K ;RH_!:1O''*&,J;6Y0<PUP:/D:T1Z8?*(I1:I$:4U+\62H MJI)E\WSR?\U8L@:,$] V*#*3P!A$JL$XP-B[[#-,`<W$$20*A\K*\Q+4I] T M!:*VPH]Q7I1=B.-%=$:*6@-7%46 6V'7V?(JPB1\^6N,"FQ0W^AMV2\N<WL5 MP<Z^T?(QO0K7'Q0&, J3KW2-\5M^UC*B2!516O=:@1[2Q#=1AE6#&O"FMFX- M]+,HOV%GV8-T-T&Z469Z3)H#JI ;UJ("FT3H;72=?HQ6)S7(4[.G`E(Q7IFJ MLR7H[S3,<-GW*FC!-)C^PM@;4[\<Q^#:@T.Q<#B#%,$*\[.[ZXLT(: 0JYX: MMNE3Q6)@!'=0/H(,=QF70W !/\>)%5_^DFU =G][?PD!A@0^&D*<DV50"7E: M$&E"I,!OY1B1^G0#=NY_O[-LRQS!ABS.1<W/SV4WD-W=P"N,J-[2J#]E2X(- MID"5P(XG0BR;LYW*D4LX0R_2M&\`1POSN1J[0$1@<,.PUL8*%K4<>;?I(:J3 MU)PHN8%Q7&RP\JOT]K480>Q3(: >JAYW=][O[K24-'\@8-\UV^Z.\U=++:Q\ M&4KM[LX+:PY!!$P$0%(G$$>8B[L3\CW'N"*T,!).I("X#-=@3O58*G>X>J70 M0G+@,KQGR#-"C$>9A4@;GIL3"N!I8_BZO(H3Y69S!#C\*\!96].K: FA&[[Q MC"6L@Q^C\/(0(Z\<0AV$`>@5++PYQF<O6$1A;Q#AQ%1]NKR3.%8V@IJMHD4= M, AM#\@>60FX$XSUL2BFC!.2I:;8AX@B,C1G7NSN3"S.SFD5\.6X%U@(8SB, MB<,$A /)DQ([<.M8$Q;\!PA1_I LQ$KW2KWK#45XAIIMZH12%=/L6=]!/L0# M:5[2T+']R3J_A>508JHQ$W "-LK;/+)F$01"*]J@DJ[!-9I,X!3&MQ$+85VV MTL^+)2-VD!]R+-92P$%O?\E)#54=6RR"2BU+HY"7Y8-HQ0-7#.%<QHI1>)VM MH@RZTT2HC1P]:=;<-#O.#XF2Z\TUI!YGO,Q;)>H-X_E^.^OY.@/;*2:T9N'L MNA$C]'\[.# `79/K1,PG23)%Y<LB98/$.JM]JQ<`5K)R^C",\KFJL)PWM@E! M]BNL>ZWK$O0)9*4($]JO^@8[M='PUT9J.<#:@$9 3U!?_J(PRF4]A0DY$1I M.!G^ORRF[+_)XH\8BX-9_(A+0C2S2B)U4L1%J(L(A3A3<RE'5U))(8@2Q$8T MI<BKYNAJ5GPYN<!^V,PYZ_3GXBF6RD)&4'F"W42M9*$<Q!$#[(BAE'<QXA&K MK@*U/.J\"J\%O<][_9I*H:5&,"RT(#$-J6U0$(UN11[%I"TK6EGJ9,?LIJJ" M=3@_JM!6;8XI2]5N_+2>*_Q;--:BDBI3O)M)7.YN85/%@(98R4/94I9SDW,) M+Z?A-:\51SFGBZIH2</$+))/Q5)%:2BK2?8S6/+%5&?B!98A8@4N72?B#]$1 M<X&-4+JJG44J]ZAX`$ZJI:JF%.$3(:.E1<NI8>(.ZJ.VEQ<5JAXTP *$[AJ! M0#AGHZ:%KHX%2UBS]&JN=LY01/H&`Z4K_]Q$V1V>2A&6(7_[.[XU3 WAMXH@ MW4\@"J(266C=I%BWC,&F+=5,XG*U$(#H@_2E]/+;*OSOCX3^R^L5$1D_@2HU M+ 2PRE!0?+_)-FL.LK[[CN96M5+YCCJ(.)^OD?4K"5@;8?@137M?`(ASM49T M";2]TGK$4=G#%ZQ%W(WE:E;L$:O4+&7'*CJ_?L Z#8&M)@J-]>K1WR.VU4SA MS+7>JV+'9\29Q+V=K;N-W%]\(8W&RLY)9U3#<-$P]T!+TR+O.C.@[Q4H:G_] M6.&\\Q*%WHW5G%-U,2)U.WD4>%:Z*&N+C8P`"I9!"0.KKD)K.KW]D&'1]Q.M MQ;T20IG3Q;CVQ6542>058(ZN&S.FZ#I_A7 1C]NC/PJN(2D\\.(.?Y^!_4H_ M<*'LQ'S-2=2[F$[_GU%Q.2,'PXQ$5@K85Y ]+$.L,GZ23L:/GX@?W<+T4H95 MDA1CSWJ(\H%TP*TQ062JU-7?_V(Y1^68)KIXS2DZ*<?_M<'2_[ <VSY_6>YC M?5XC*)8$(%$)DQYITMT=8=I13=QR#:PB?_3"2/)H5JLSWFVZ^"Z/WI.Y-)QZ M'4 SPVCWVN=6Z8?/:W@;>1QA+@D%.4C^#JBVQHDGUL@FA6J6C$K%1_1KV0E] M,.B9[E#Q?[E^N%K]&&*$JCO/E>7E`;P1,ZH,=0C949FLQ2Z#0V7D]#R)[_@I MS-^AH,I:M5"X=Z7<6*)GC?831?,@EB*A/0Y2\NK9:_]<PQ\_"@K[_ ?",(]H M]NB,.$SB?QD'RMN",LX;'@//J/94#[I5=+HE(#,\TM.+**<+)UN#:88C#X=E M!*(/!U0+,!\*)DIN'BA!E2+P0QE4#Q<?B$>]:B9S[T<&T[5HCW]/7%IR\0<3 MIQD*[2')HRR_)R"CKK07E36D^V/560MZ+-BVBM 7@?EE$6TIECR8P[7<I2+] M]P+2$<$_3)>J6<UC0'PA;,H(L*:1]Z./Q)4/1*(UPFR_>[4],"/L>[ $-:*O MAR-6"ZTZ;P4V`5'0N,UMTOW)#9ZU/,="(K]];H5RS>_V"N_6+J_"+ 0"0?:! MUX^PF'>C`EI5X.,;+[K4%,(X+$EBLG6;;I*5=1NJ0QYUW,8%)[FLNH:<\,VF MF"1)VP\O5#54QRUX_%0IA[W2[VLH'%EOHP]QC@$WOB[2-,FMRS2!6)TNC-'I M1?DS#G5SG(XCGZDTIUP/8VN%[X$>+S?%T"NIN739!$+SR6I%E_K"!&]F`^EQ MR5?EG;6B_I;2N(Q1Q1G&784L`C*^NL0[22<6%EF(&#<A1F*O+U7^"KB>0'R= M%1M8-(N(0#^02Y+R+! ^HE*.HA'5H@NY)H.]D+LB.4-+08:L:<57EBIP\;X1 M93NS]M+)0>-X1R5GJJ1"B\;K9;)989T<GZN)V7LJH)3U]2C+4 ,&9U<D/U?A MQPCXMUFO&$6ND:,6Y) G3RABH5,972#_]L<T_7US\PMN_'N1T6_5R.]S2\\U MKTSI<FBH@%+&)]\QEZ<*E[GT4660NJJD.JP+X&H4KLD&:V8>4L;&X_=4HJW. M]-[7XD>J*K2=U&DBHZK@%/K%!L(PCC=:P%&-04Z1:%U]9ZI&P'<E[UE2\%3A M1MTN1!7_5@O1]\!:D.#+<$FW! 6I7$CYL5!WCO$32-B C.KX%NMR2+<L"^_X M8)1+#@!)40SFX_8@S)9S1ZZ[=)XQJDK)AZ@P)I#(&A+\K"'!ZG5)]HHL*Z>! M*V.1B2JPTW1]"589) #+#N=Z<O?Q+YXI:0S?D&2;&R(2E!JO4$2-+Z[53/GU M"+%SL^ZRE/]8O\BJ-E&=0;:8QDOSY `]0Y*DM^!50) !*IU-AHG2J3AG;V.< M;K(:?<9F*MN'X:]Z+LTB5PJTQ9Q%ZE=I4IG;K)LVL\NE\L63NF.M_,ZA/+CJ M\<VM@$IJ&ZGUYP.&5EB:R?'V244[(,,V[55(_Y!-9F;&]$ 06M_+W=T?4E7" M]]00?8?X!8F32?_=G?U3^A&=<;G^+?_ C9\/Y/F5G)LR"B=6`S6^!5K[M=LA M.(P\_@"J>?":;D.31JB5SR!7C$[O\+=LL!!^458.1_P0_:$O[KO.:#CR/->U MA[9K>S[\-;5MV[&IC7Q_[(^"8.3"WT-_$8P"UQ_Z(UO:W'9<#\81#'.4>NNY MP3CP_)'G!"Z\=X*QYT#O$,?2:'=DP_M%<!R,!>S0A[_@J3EW'K@TPL![;A\3 MWA/&6^$CV#?@PWC7GMGE/A6F0W\*:P!6'1CY.#+PH&_LS_W $6B>O_"G@>T? MXWO 9C8"$L$G8@S['+L\<"RKP<@1K#45#%V$#E0M]^F<VJUM*K#D$Y 8`Q=H M)RZA^/D6Z)FMS2^_!$A1#^G@^L"#P/60.F/BKZ<G./7/T<2NM<!XED=-DT!] MC)"&0$4?=^_*+AU-?]4$.Y,*Q!W$%C%T_0`D!CB!DH/?060$7\\^17X)M9P2 M?UG P1' Y3'(`<Z?@50@7HM T\U9V/5FTM2'=6!%SX>9\PJMN.DE<;4`L?86 M'BP&?\]'>G2W#@RG:L1BN*!FPI<V-G>'JN*X+D("N7/\:<?$OH968H0""_L; M5W<X=>J?TDPZ^RX_'ZOG\<@>UG8"^NE,M%Z.4?Z(GT )L!_PZ2-WQDA?Y'@P M;FJL*7FFQ-6U5GH=_MQFS6F=Z_9P4I>#$<OGL<@I[LJM6!N4JRFLHN'V[\)G M6!I?IJNGM13@>6VP!0L3R[X5;+9$H%NHH:>@_:BM#F@JP-=[X]8P+J[1[]0_ M&_VS^J=N/DCOA'0*=3'8QA:A=X+_Q!N 3OLSP!HHTZ2SWBU#(]KY`!MU%.32 MF[&_<M"BC-![.<$():3J#R<&;:=,D(;5QMV<MD$%>'H_8$N'56B:YP)D2-QV MV#IXPPE .PY8;H>3QJH&K1OT,OJ'CC*XPZ$>1B.G;AVO+CS%V*/$@&P2GK#' M<0!XFKJC+033&]@Z]N:>YRU&X+_!0CK>T!MY,_BO8B/G;$=<MF2N:=%X9XN> M9LRRG6.U(_$_V_+UWMZ/I1PC)]]G[26)DLA KS"O0ZKP0C7^U):UYG5*CS<U M>AHM^&QO.=]G6V;$?%6[Z:L]:,JYC'/#LJ!>D@:X=L!Q0* EZMB0MEY>B \R MYLUM]?QHK6!I$:T0BE2B#&I/)IO\1F33U"03WTZ?S/B;,COC_7QIR;/[@M,> MR;-YODNQ1]D:4L7T`4N#4@5>,/#H\_3?0;I$>KJD:[)0/<,2.NWZJ:3+C&47 MS".1KKFMJ+VPZU07Z>EZ?V]+J'.C@#P%V).A5\\%##GOR@4:<NA1%.UIBAAR M>.QJ7E!KB>YK;6*,ER8OIT:_<.I+1NWC!>[NV!^RM$RGPQ%]1V7PACIW7"#N MZ$M4WU9VP:2/&:N[1JS>%?5JO@@?,*.<M7'8&ZM,2X,P9=? J$^6=$RL\F^( MVR%:I'S.@Z@U4!F\@Y&Q;333+P<4)ZI(UY]5,9^YAEP(-5F.39P7'?9-K\BC M@\H:FH*L4UUK=M%)UIS)VIA_.&4\K*H8N#>RBUMD'PU*\S-X<,PXYJ4G]_!S MKKX';F>$R/L!7HPHNZ7(P659FTL_Y-,*[X;DS .JH[1(D,N?U$S*2/NS8@O_ ME+]U1-R2_0C>3QU;G+(-E[AWRA:DBQZ2]759?[,]-"ZF/'9._AME%27)C(L- M.[JU5U /.CHYUAZHH_5$)WJ^Q,5*EVRL&Y55`Y#4EKS5M* +@\K:#/196MY\ M'[6U]K960EQ%]1G\6>BG.=E,BIPTC]@?B&TU.>,8,BD4ZN.,-T,/2)RA-T,6 M#P]SYG$Y3]MTQ!.U7Z_7)[6Z^;A0L]9#>;A#^<PQU;BF5/OIE@^AHP\L09P% MPQE!K6D(MDJD4'M!U?=%Y5GX@);4$VA=WM)#*XD09?7Z;(_R-*P8C -;)%) M=-IGUB[?)6D.L)KM':NL3B@4C$T?YE5&F['2N,Z!SC8LC0(U,PH!"^I5+9CX M.E/61PRGI;Y'<OVYZ"#0JVW7@ -3RI9$D@W-4%4Y\%BSDO*-K*46<9#V\9D$ M\L\>*>[Z[&^Z=MVH$O+[T9#M44>-T#::R876P-?NU[A.^9*H!ZL(;"O-17Q^ MOK>OEOS\@;[:'3$?!1_3E\_4\W#,\3W3:NOJ&-LK7WP<U>Y$RRO5NY(>Y)7O MO0[;'UFA"?E^,BCK/UE&:M!98I(QP[MW3,)/>I<LY?78OK['1\0K:!6]9MRB MO6(=T-9>4;4R7AGK-3M:3[RBYZ//F50P;XE/[E'5=JFJK>BX\#'#<$S;8L8/ MX&'Q//B4<X4&[?OJ4;*3^U+0;T R6@\%9;Y9C^J,MOB3/+%/Y[\8'\XDYZF> M.38ULDHCBD_$;H/--"T*KN#[/IY/3!%RP/Y',/KJ60]'3OI,Q^A?S'@%CA:$ MLD^6]3!41Y(%ACMFB>RK>0W=NN28EK9RC^ KR?*DD0<9K4>697Z?+$\98RW3 M$O'I'3>CP__OTBJTN[>T<GMJ:15MVK9.YQL\%CL=&'9:]MVLY=0B5FY]'M6, MTROW0B J;^26ACS?0V]<SBVI<?D4:[HU?+8^[Q-:&?HW,^#UUI@[ZB;2%O7I MC6QH-FS/ADXY9KQO)M-;KYO["\F@@N'7CLPU,;:,S(5ZVT;,#O,NJ%HNBF'P M+@[>+**;%L?#"9YQJJRQ\\R]8Z^=%!9M4S&8RSCXOF'[[[TGB7H]X-J,[B]X MGKXM0/4/C^ZVC7''L#,/\E7HK[XS]Z8ME*%-7^LDE.X*V(_/#/[=3IA-^17K M]N]&5U.?Q7.(9Q!YZ/),6N;9XV)]BF+BD=3T[NTU)*?PZ"RA<8O"O%6Y;?;E MHMVKU"3GO >LN55KDK)NLR:I&U8QCRLCYVID8YS1^NZ6F1ZGT=AR+SK&B2AJ M2G"TX;IVG68\T#/>=]HSX:T+\=W<4S=?(8JHU)$9GQ&-H&J#'F.X/:2W4ZN0 M8L46>:SNIW962-7P1^^%(=:JH3,Z/3M&+E;VQ-:V6@EU[?I8<V^/QH[7Q(H# M1%^V\EOJ?HZ*K2OXL<Y[M;&N71]M8NBX3EU.OQ!='=:R0-TE`AK5<@;T3.V[ MJ-R>4O/Z=J!G]K2Y<9+5. .?M<=;>%+)MZ:G5/\XI<QH$=#Y9JGE+EH!3 8K M$N'5ZH"FCX 9(ZP@J*I^@%Q&^B@?SI2CLVZLM##NQ^I6>/\-3ZDR2"3@JZH5 M0,?ZV$3Q08^6/,'#&##P3-LIXX:,^>AT. E 1- (N\?TS:R\+0*N@>"Q^M#& M%+',(ES<ZU"=1?GE^;*.PD8STR^;_JIW_ZPY=-:S\*=M=WW%SHK/%9HM\"07 M;-QH[#CC^7!^[(WM\6)B`]5@?E_MMXL2G?.$]DR1OIN7;?2RS280Y,R7,\W[ MY@Q]IYAR*Z/WMJB^MU5F&*8>WSMBX\^'1FS.D)^WC-C$?ICKS9CS#8EE&RCS MGBS2&QN47+ F/#2"YJC"K("1MY]6\_\_*\;6]^BZ[C8S1202?.H86^[5R:F& MW+SHI8><8K#7N_<)A43&Z.VG=,[M5<\E;&-?#SJ7L"EUZ+M'4>>3T63^5Y>7 M68^&LZ2+O B>3R8OOJ&ID@L^5%.9*F)A&O+#^WD">>C+2_KD@>9_;7EPI.ZZ MO3P0GD\F#PL#/\;GL?(P9%/1V=^3=TJCNR]($WZK<S$Z";"-)D0UK=O6V2F_ M>'3.)/$4Q$5H$TT_YOH>]Y@12,M(7\7D,F+KO?#GUGOANM77R#5]C@K-N-58 M2\?JG51JNQG$;6LZ,0>WQ7W.,=5#Z@Q/E>GJN+_,=+]T9LL2C7>/JK_,W)K* MW$S.P>+ZMQ.]M1X]4JS 4_&X5Z_I=]9!66D0./S>M55>29HRQEQ3=OG5)(*A MTN\IZ=:%V>/IGEZ>\ZX:_=LV`WYGZQCWU<^!3HU/H]_C&'\Z$Q^MFKF>8YX> M\OY,J2E_423:Y=8L6N!VK=!WVN/7O&7SAI;/E6N!_V1GS2+CXM5&"N^YU :V MY*C#F$O4NNTY@],U9GB^9OVTT+7CW_B7#E_D7'_1-W]J-:8>I[S WRU]! MT.\ZI^H.%-[YD1C!4]5!1]V(L._Q.V59J_V7$[I7_$?S7YJ8J]H147"AZ< G M@0"';JDW?M6)\J[^]8'6W]IK"O"S7Z,/1"#N$%@['+E8@YJ6IR*#0_5_F_D_ M4$L#!!0````(`+1D3BSJ&G/;P@T``,\P```7````4D)3;6%L;$QI;G0@0VAA M;F=E<RYP86.]6DMSVS@2/BM5^@\0?9 TE:AV]JAL/&/GL9O:B9.RG/B0DBL0 M"5G84*0&(.UHRS6_?;_&@P^(LN4=[SHYB""ZT6CTX^L&H[<W/"UY(:+^LSNV MX?%W?BW87?^9_SE]Q3ZYGQE?BRD;GI_.UCQ-?Y-9P5ZO>'8M]'!2$VSXCR]" M:9EG4_:7E_UGO077,GZ=K]<B*T#^JON/]9^=EM?LG?PA-'YCI/\,1)M<RT+0 M6N=E*D9QRK4>'Q\K/+S+U72C\B*/\W1:43]G^8U0MPI4S]F16KSY\,%Q^\*5 MY(M4O,UNI,HS$N?X&!MY33R%?I-/V5XNL\O[F,@L3LM$:,/I$"Y&@2DV]3K/ M"O$#+/Q&#MC'J5CQ&YFKX^-EF::G,DMD=DW*:-">)(DL< 1[26D]$1<B>13] MYRP12YF)Y./B7Z!^-!M_L*=I'G_?.=02W/%;B<1K63\L$MF(3$7R012K/#D^ MOI7%Z@1JH17L&)WLO7SHWWZKQ *BD'';,KLW4(CU1G_.2BT2HM,5X5[I/W&E MQ842NQ8>PS*XS/0TY+3'I+HEHLE*PC1G&Q%+GGX06L-)_Q1/76Z$<HST_9P: MEM?)RA@PO7F SP,2E85,9;']Y'SH4&:AZ8C?2XEH")>^R ]0^WU&\RG76L* M66P")"MRIL0:/-B2IUK@@2>G8IDK<0F>A<@8/ GSU_H7)US_V6 P^^T\G'<A M="$46UO+AKL-!C07U#%.Q*AGROA9GN",>W<L$[>S.-^8B-[3(EVR&$L7P@Q. M_)CX(>*R,';HB-DB3[;TOF* /&#FVFU4]-7[[V*K3S)X;EKZ6-KK];Y.,<ZF ME&,@@QV+[!/T5*B2\HX9'=$#XUDR95]'5M)2*9R%9<^1.L!JS*0^D^E\;%GU MY/("9"#92\$V)7Z8)>?SP8"1ON[3; SM7.=*"E+NE!VU-#L8;!1,I!".D3DI M2GYU^C/9SF7,*@\.[9P(48 5*U'E61TKN2ETU'IIK-HD6_V<I7D.<[''[<>N MTWS!4_^DA,Y+%=OT3*P\<TMT1J-0%D^@V2.?`-B+8W84I(^7W;.Z0GP]M>U# MAJ#E1O?.[([5-4F8)BMYR,OK:4%6.D#JCBQNJ%IHX.'I[;Q?S1^VHI0]SV&M M<1/O#IB\)W8?0-F*T ?,;^2M`V9WI.E#J((879/LH+PFV0[0J^EV<F>3SJ=/ MFKZ%?U!\L#YXEF<OG,?\W3K26> X"YEQM;4OS;LI&\U$0<&TP6W<<GOKDR>I MY/K>^=&Y=]=P5=B>?_?0HG4<44*1NY'V=OQ?B^)3XSTQ?)_ ='$*-6.KRC=Y MNEG);%@K]_RT8>RZ]<+H7;6&JH)@^'*?ADR:BHRGL#?DK@8.Z6A@\5?DSL)I ML!K^S<0_%QSLZ* *3XTL2"^">(:@KTB3D(C8?&?EQ@\QF4%_4EN+><YDH9EQ MFMAZ_W-*1&94U%J8,/9^B4&D(%*^$L])`YF^1=:@P[AQWD#V0S(\9X)2O9N1 MR73"#"+"$2$S8YT\-FG9XB1*IG;,9]K%[E;J2<B>X,CD\AWA"23 *S,^IQE7 M-JDW@E4'*P\;=J+DP6I[2GW4.KBJSX'=)QX2<-,4PK0=V,)@4RY2&0_.Q9+' M!>9EUZ<JOX4=/\"G2X0'F!&[W2C8::P.^L(<$D'+0 !C$?KV_)24$7U $D@( M/0ZSO&")<U,OY9;I'*KFA=$W)4IV*U,@`\Q=`&26V<3"JXJ[MRTX_Z0Y[DI[ MEYLI+S,2D"V,A,/67+L1!S7[%N7%+D%/@4;*M/!0#\<*\,RB"S(:_/]RR30E MLZ6,(_",,,53QFUXT T-'.K#@@X1W?D1CY"$2/0_M@ODS7?*&G&OA1.=? A< MKECWZT,MYIQMA+)/9 'M][F:S^>DU/V2K[@%B_UG3[VP":>]*W\0QHSV%G@[ M-D5%RZ1'1F6;-@E;JGS-2@WS96;Q)KR!R<W<PL'P=R$VQM[RY5(8GZA$C!YA M:A^]X(RS2%OA(]B6$=\87%216-TYO86B3EJK&E\[R#9'W0<@-<Z1=Y87L#%N M^,]6>9DF9WGA-S'WTWTTMN5(]]PQ_+BR9,@G>+RJ#7F?7(VP"/==K)4\% M1@\3QCPCK*QT86AIX7�\]67WOTXK#NK#)0(I_/&PS^>UNWK&SR:IEWT&OH M1;:-]()=<@J[-G4D-G40\='H2($K( 1"=ZY1.&RV]M=I*=/D$E'%!'71>L3K MCQN1N4>H5\;BX_(2$3^_?9WF=*)'!K#P5/X;G(&L/F\`T+,O4MP2)9SIR!;6 M!LQFA)G\R"Q>B34'RTM)(K.CWTNAMM0/->H^0JDD$\S[C/SQ'FI22"K",S>K M)_[I#4I4E6]IP*0@O1+)"?D.K1:.?%R^S^B@4;TV7KZ]L;(%`XW)8Z/)Z)9K M]@)(^O^BTK%%=JW^6<=9=T8UAQL.C3L76"-7G#(\*\U2_W5VJQQNXRL1`O%^ M@6U5'3D/P;L9[$ OMW 1[_6[+)18`DO123B_J#RL#B]/DTP"7^MLO_:BDQK1 MO9$Q@7;LC:WRU(3^FLBW)3SLTPY[N"-BD2LR$/V$B6$4F:"I@BUS=<M50CL' MJ$2*:3"MN)&K7S4$P/%:J7=Z?[T(L)3[G@E0A^L.$'J%:R)OT6:T8+ZF!-S' M``F6#9'.5R+^#F!MX#]GCK]C5^\)R911'0:^OGK2;"723=U#VD8^* U_LFQ^ M&K*AG:.'8X<\.Z!B)Y@U2&S0@($>AA[,9@]6&"S*:_UH9JW(7+7%#B9ON'I% M7&:9H%X;'6^<)X_@UF&ZC]Y0:$BM/8%'T+\*X'RKZ<5X,-D$+HI*5<^"N2Z M"V) R3 GI #C9U^D+GEZ@AK^QG80V>U*(ER0YY")NEP,ZWPC'/I43$@JPLA- M^K[5:_:)2C$4Q[YHU(ZF*3VO^L&++24RPF:[M/6[3OJV9T"A0N&=<RJXMB[R MC>N!FZ:/O &G6_(^"T2/CD;CR,M1D7?(4;_KDH,X6 7[=' MBID9F=3O3"^9 M5; E4$-]5N#AVQXV4%L9INX0;7C.L[=*D25]G2)+TUZFV"%"?)-M)5.XG<>) M=]66CP2 `?*4;&]TGZCL(2G'AM>/6&P*F';E3?"/$5Y%?NV.`S%,#[$[BS)M MCB[7)^JZ<ZY[Y5)G`^I^#3W)>F+]?.<F[ISAVJZ?5#YCLZ1MA+F_ZB446<U? M<F1;#WRAEDJGU.2J:64V=6O48^O&U$F_6:NV1 MW_UA1]]+O$ST@"';1S6YW M5\&\2:?F7X4G!*1O\=Z>(I_[^CDZ%W&)`'@CTBT3L AX?&%#)"(T[8EB8[[T MP1@D(QL;R;!-[\*_&ML^"5*$CYZ$!T!@^EDNN7?UHZPP]@*I/L96>&K<=F'( MHT-@N]39(G[@C.F=T>/$#\+L#7<"Q"5)YEV=ICK\<J^.YG.;WT(_"U);*SD] MU I[@%>W/ ^WQ/9T^<,\ZOO],"WSNNK[,^XS<]^7!KXBH,YY23@[Z*;Z8>-? MAIL3?E8NS.*4Q#*Z,IJRCPIU,7!S;5:5KT'>9N=)EVL6U.P8\KX!2(X%X)$C MM_]F]P0L*P1NU5EMBG$]VZX79G=-3S0+&6%;E7K/V3_%\:#_=&=I@,Z J]?3 ML#WEU^]%W*3H(S\0S<<O_0J^@]]H)]/!T!5"I54(#/#>5!D)P]ET`1&X*;?8 MW]C"_+!IQ59@HU%KTS8)Q2@J70RB>]N?[:UM/7$IE8;WZL\;:F:@%G6B5E<- MM>UV&5EHQ#NW2@/IRE][/X[--/$C..^Y; K-UU\[]3T2ZILF;B*74MC[6]MU M\_,($O%LZ^I"5UU8A=ON0;4NK>FL$/7$Z-NON;WLM"4<J?Z;,\H[]NU7`Z_I MQV16@(NYQ)DCOIRA`,+<S%RA&WPQM#R?AJ/M3#TI2W//\;0<GY[E'_\#EG\T M6?XYCM64GUDPZ:\3=O7M5U@@TF!V/1_:(.-:)9\I0+H%/2_R$\$32KJUW4Z' MUOWV.4GH?M[ZX74%74@BVBIQ(W@*&0*_V_D$('"X34=2J',`.=.>.&PJ*A]? MWKOFIDWP58PD75 0;@RZUDJC1W;,KD:[$RS_U]7&W0H>B04+4<EC5;BSWZX+ M*1)YP&.JE7<U%GX-T:$P$=ZI<7_AUW4A!S.TLH6<G^:NK.OCBD#F]D>:%3R\ M8W46UP7X6*A6WW;0CF:7;.WC+X*MO,YR)2I"`PI7_$:PA1"9^[@)0!"4+\RE ME:6-34I@UZ9:!3;3<BU3KG!^:P[[C4T<WS6TX/-28GJYVMK[4G^+RLHLE=]1 MF%'UWKRTI5U!(*-R2I$-H-KTPNI]\#4*^X6.T>\3$,C=^9-26NJ:OO+@M0EJ M(E(@LQ#!%N_+W%S:^N^UG/(=PK6?XE7%MGG"Z9V90&+O&=RMA<W;%=+U`GK< M%'?C--NO]$FZ[JS25V=D$\T==<VDK[V$.GP^?1-VWWPCUJX8'8ILZ^DA-4T: MLSH5UG<PU.FE'\#./>I[V3WO7F7[DTDJES.^&%B9`]8ME[M ??:35PY+?,^6 M.NY4?T%9@OI(;GD#BJBM:1Y=_VIDVHNL<[%Q=^=IM&L=GOR?8EM):I;SV)<> MHG&CQ4(?(5INP0G_"597HU$KV+_&.3=K')MSZ\3NK,?0=-^Z,5NC$[&Y>>Q$ M839F=T77,&ZW@E2[E7L(>?N0?, OA"XH.=DH'[W-3+3RWR8EU1= MA,0S9I? M9+D/?2(GE7LZ-9]E!5/\)U/N^3]02P$"% `4````" `N8$XL#W'AUT8<``!N M?P``%@`````````!`" `MH$`````4D)3;6%L;$QI;G1"<F]W<V5R+G!A8U!+ M`0(4`!0````(`+1D3BSJ&G/;P@T``,\P```7``````````$`( "V@7H<``!2 L0E-M86QL3&EN="!#:&%N9V5S+G!A8U!+!08``````@`"`(D```!Q*@`````` ` end |
Free forum by Nabble | Edit this page |