Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

matching control for completion (with PATCH)



Hi

Here is the next chapter of `The Mysteries of Completion -or- Trying
to Scare Away People from Compctl'.

The patch below adds an option to compctl that lets you define that
certain substring on the command line match other substrings in the
words produced by the completion code. I.e. it lets you define things
like case-insensitivity, partial word completion and more.

Some history:

- Some time ago I wanted to make the completion code do the following:

 1) case insensitivity ([a-z] should match [A-Z])
 2) more precisely: some characters on the line should match other in
    the word produced by the completion code (e.g. `-' should match `_')
 3) to complete strings like `comp.sources.unix' doing `c.s.u<TAB>'
    should be enough
 4) typing an unambiguous substring of one of the possible matches
    should be enough to get that word

- My first attempt at implementing this was a bit ugly, it added an
  option `completefoldcase' (for 1)) a way to define character
  equivalences (for 2)), a way to define characters that separate word 
  parts that should be completed separately (3)), and an option
  `autoglobcomplete' which basically was a solution for 4).
  All this wasn't very nice and probably too tcsh'ish (in terms of
  special-casedness).

- While I was suggesting things like this to the list, Peter suggested 
  some general matching control, probably with some kind of pattern
  matching, and this is what the patch below does. (I don't have his
  mail anymore, so it might differ from what he suggested, and of
  course in any case I am completely responsible for all of this. ;-)



The option is -M, there are two forms to use it:

- if it is the only option, this defines matching specifications that
  are to be used everywhere
- if it appears in a normal option list it defines matching
  specifications that are to be used when produces completions for
  that list

The matching specifications are given in strings where each string may 
contain more than one such specifications separated by blanks. Each
specification looks like this: `c:<line-pat>=<word-pat>'. Here `c' is
one of the characters described below, `<line-pat>' is a pattern the
code tries to find in the command line string, and `<word-pat>' is a
pattern that may appear in the produced words in the place where
normally the substring matched by the `<line-pat>' would be expected.

The characters:

- `m' and `M': These are for patterns that match may appear anywhere in 
               the words.
- `l' and `L': These are for patterns that are left-anchored. The
               anchor is given as a pattern before the `<line-pat>',
	       separated from it by a pipe: `l:<anchor>|<line>=<word>'.
               Patterns defined this way match only if before the
               `<line-pat>' there is a substring matching the anchor
               and if in the word the string before the matched
               portion matches the anchor in the line string.
- `r' and `R': These are like `l' and `L', only that the anchor is on
               the right side of the line- and word-patterns and that
               the anchor-pattern is written after the line pattern:
	       `r:<line>|<anchor>=<word>'

Each pattern is either an empty string or a sequence of characters,
question marks, or character classes. Of course characters match
themselves, question marks match any character, and character classes
are as in globbing.
There is also one more construct which I called `correspondence
classes' in the manual. They are a bit like character classes. The
difference is that they are written in brace and pairs of such classes 
work together in the line- and word-patterns. E.g. if one wants to say 
that a lowercase letter on the command line matches an upeprcase
letter in the words, one can say: `m:{a-z}={A-Z}'. This means that
anywhere (the `m' character) in the line-string an lowercase letter
(`{a-z}') matches the corresponding uppercase letter (`{A-Z}') in the
produced words. I.e.: a pair of such classes is an easy way to say
that the n'th character in the first class matches the n'th character
in the second class.

If one of the anchors is the empty string, this is treated specially:
it means that the pattern matches only at the beginning (for left
anchors) or end (for right anchors) of the strings.

The word pattern may also be the special character `*' which means
that the line-pattern matches any charcters in the word at that place.

The difference between the lowercase and the uppercase forms of the
specification characters above (m/M, l/L, and r/R) is what is to be
put in the produced match and the command line if the patterns are
used. The lowercase forms take the substring from the produced word
whereas the upeprcase forms use the substring from the line.

Some examples to make this clearer:

- The option problem:

  As is well known, setopt and unsetopt accept uppercase letters,
  underscores, and optional `no's at the beginning. Unfortunately the
  completion code can only easily produce the lowercase forms without
  underscores and without the `no's.
  But we can use matching control for this:

    compctl -M 'L:|[nN][oO]= M:_= M:{A-Z}={a-z}' -o setopt unsetopt

  The first part says that any `[nN][oO]' (i.e any `no') at the
  beginning of the words (note the empty anchor between the colon and
  the pipe) matches an empty string in the produced words (i.e. it
  need not be in those words).
  The second part says that anywhere an underscore on the line matches 
  the empty string in the word, i.e. need not be there.
  The third part says that any uppercase letter on the line matches
  the corresponding lowercase letter in the words.
  And since all rules use the uppercase forms of the control
  characters, the command line is left unchanged (most importantly,
  the `no' is not removed).

- Case insensitivity:

  Let's use the form for global matching control for this one:

    compctl -M 'm:{a-z}={A-Z}'

  This says (hopefully you are able to see this by now), that any
  lowercase letter on the line matches the corresponding uppercase
  letter in the words. This is the one-direction-case-insensitivity
  known for example from emacs, real case insensitivity would be:

    compctl -M 'm:{a-z}={A-Z} m:{A-Z}={a-z}'

- Partial word completion:

  This is for things like making `c.s.u' complete to `comp.sources.unix'.
  This is also the main reason for the `*' special character in word
  patterns:

    compctl -M 'r:|[-.,_/]=* r:|=*'

  This says that the empty string before any of `[-,._/]' matches any
  number of characters in the words. Normal matching continues when
  the code finds a character (sequence) that matches the anchor
  (btw.: patterns that use the `*' have to be anchored). The code will 
  automatically insert the longest common substring for each of these
  word parts.
  The second matching description (`r:|=*') is needed if the cursor is 
  in the middle of word and COMPLETE_IN_WORD is set. Normally the code 
  would expect the stuff after the cursor at the end of the words, but 
  with partial word completion this is not necessarily the case (you
  may take the end of the word as one of the characters separating
  word parts and things may become clearer).

- Matching any substrings:

  Some people would like to be able to complete any unambiguous
  substring to the word that contains it. On the other side, this may
  produce more matches than one wants, so it should be taken only if
  other forms of matching fail. For this kind of thing, the form that
  defines global matchind specifications accepts multiple
  specification strings. The stuff from the first string is tried
  first. If this doesn't produce any matches, the code tries again
  with the specifications from the second string, and so on. With that 
  we can say:

    compctl -M 'r:|[-.,_/]=* r:|=* m:{a-z}={A-Z}' 'l:|=* r:|=*'

  The second string says that any characters at the beginning and end
  need not be typed.


Two more remarks:

- The last time I posted my older implementation, Andrew said that
  such things should be left to user (make him implement it with user
  functions). I really don't agree with this since that would require
  us to write heaps of functions for each of the different types of
  completions (files, options, ...). Doing this with some kind of
  general matching control seems much easier and cleaner (and faster).
- My other attempts at this had some special code to make `/u/l/b<TAB>'
  work (i.e. some kind of multicomp replacement). To keep the friends
  of user-functions happy I didn't do that this time. BUT I still
  think that this would be better done in the C-Code:

  - For files we could use a function like multicomp (get rid of the -U)
  - For -g glob-patterns we are in trouble, currently one would need
    to write different functions for all glob patterns used. This
    could be simplified if we enhance the functionality of `-K': make
    it accept additional words (separated by white space from the
    function name) and let the code give these words to the
    function. In multicomp we could give the glob patterns to use to
    the function. i.e.: `-K "multicomp *.ps"' or something like this.
  - Bart has already shown that making glob-patterns case-insensitive
    is a bit clumsy. This could be simplified by adding glob-modifiers 
    for case-insensitive globbing (for security reasons: only glob
    modifiers, no options) and/or by adding a history modifier like :s 
    that allows at least a bit pattern matching/replacement.
  - All this still wouldn't work together with the -/ and -W options.

Bye
 Sven

P.S.:     Yes, it makes things even more complicated.
P.P.S.:   Yes, it looks ugly.
P.P.P.S.: But it is quite powerful, isn't it?


begin 600 patch_match.gz
M'XL("-@"Y#4"`W!A=&-H7VUA=&-H`.U]:7?;1I;H9_:O@/S.6*1$RB2U2^W.
M<7M)>XZ7O-B9GC=N/P<"00DQ"-``:5I)/+_]W:VJ;A5`27:<I7M>3K<,`K7>
MNGO=6S7)IM-HD$0OJN3.?^7IG:2<S7<NHIV=._Z;/VUM;06%.G]/)]&]Y7DT
M.HY&PY.]\<EX'YZ/C_XT&`R:+=CBXX-H-#H9'9SL[7+Q+?\_ZFIWM[][%-%/
M;`U^[HTC>!K\*8H6E_-TDDZC>E$MDT6$S2>+/(JBK?O\>+JF4%E,3"%X;"DU
MCQ=8$)OZAA]/_[3=:&H&GR[2"IN2Q]92>58O(AH5/;:5@?X6:55@&7EL*Y5G
M11IQ2_B(XX;_W=F*BG*21M.RLB"XB.N+:!&?Y6G4E7?PJQ=MW<$Z;7`>C8;]
MT6C?07HTVNN/QB,#:_Q/H!JE'Q:GG0[TBUT./D3=:5;!%,MIM+A(S1CJ*)["
M1."[=&M;0.@3W+TV\$VVR,J"WBPNLMJTU.,YWPE&\:&L7`O;4;>`89DQP+?-
M=&*'8EO8YA;,PIE5HV;,2QC(HBKSJ#MXVG-UDHNXBK9FL!106A>'-UEQSL/[
MZ):D//LA319UM"AI%'FZ@*68Q?5;:K-U!0[&_='!H5J!@Z/^Z'#/K(#!@O3#
M/(]^$F#PL-RH</)Z1/A?5B#:+XN%*E,L9V<P>``7SZ-V,\7B4UV^67:5+2ZB
M:79>E%4:\3^3!@1>XA).TCJILC.H$T?G5;F<JV9VUD%B/!SUQ\-C!XGQ\*@_
M/CC6N,@3GU>I#!*>IMD',_=I5<ZBP3<.!@*GY52*PU.C^`L?9-,\/J]-\32-
M[C]]]&8K.DOS<N4#ZZR:YPJT\SQ.TF@%N)'BZL^7"WI]5N%K&690OS;U=W9V
M8J`.6D4>H0?5_P7<`'D`#N71XR</J8F1]`S0SA#,TPRHGJKIXM\^?/K\/[#"
MF(I7Z:Q\GS8ZTC6^N??M7[_%#O88P'$5SY"@`?_BHD9")32(96:-^L^>/WG\
MXB74/V(07I3+?`*L"B:<1L@(&6>V(_X?%'FQ@*%8/@8D@YT$9+ECZ_C\]2=+
MV_2SL#R*V0*,*2MHNO09D/`\+\_BW#1?7\<=L*KY0)-D7A7PAU9"Q`EE"R[Z
M\308O#3Y4]AY,`'SVJ?2FV"H$2@1B0PJN[J(%Y:62P.6(O5;S_.TD,;AZ1R6
M&J!&Q4R+S3Y6935IZ4-`CU_]/E9M?5"Q]7WDZ50@@T]17"0790"8/&X=>UMQ
MVVR5G5](N_38VG#5VG"SO%EF^)\FB2>/GP$)CL*W#Q\!F8R#M]\^_OIO+Z,]
MVTZH*OP43B#`F'IY-F@`<0F$>UZ@9$1T!97@U7C_X/4I(2QI"Y8[<Y$X67BT
M@3!(WRVS]P*#;*H8ST_`O3Z"EA+7=0,*G@ICATZ_9-QVX,G%LG@;$I8@+V$Z
M4Q6PUJRHTVJ!@]AHHM9Z]`V:%IPU0B1%6=;HXX98>PT365UDR86EY55<1\LZ
MG5Q#U$\"HC90M<@"!1X^>Q`%B`5OGS[&M^/&VQ<O(D(L_?;!XT>/@%4';U]\
M!R]'!W^:M%@'HYTD5.[A5<,^@'>?9"!@^9?+E"T$*'9X,MH]&>U=82$<]/=&
MRD*`GP=&4[BS16(I,!"2Y`T^EG4?'V&Z\3)?T#,ILOQV.9M=HM@5V?2U)RZ<
M%*(>MHW8290=P%K0WYPF'@BVK)B6YMT,I'XMZH<9=JN.N'O8'X$!Y'3$/5`:
M]X=:,_IH=)@I*-7)X"^@"T>W;T?F<>-N=-O-N@>%.],J304VID;OU*"DM"(3
MZ\%K+B\OO(^FTH\U%N%/`/O>J0SI1WG=C^KLQ[2<=OV%Z5'!CVM-E*-1?W1T
MH"9_=-P?[UD%N6-FWU%]M78%I@;WU?DH(\9_/WHK^K[,)O`/SQ47MRMKG",,
M0G5#:!+_`R)'LPO,%BS4*:*[43[X"W&Y!O!R'W8=`1R\9K!1HQV>2MZ8"O7=
ML\5RZ*DXO=F$I'_'IOQ)&26D.:V9FM8LG);(FRY\0$[;:_V"C++]"PKH]B\D
M80-XS)KP$%#:@K.;0\1T9L7IW(.(%;)-B,P51.8*(CS*>6.4TI0;Y9Q'Z:B7
M**"-Y0*--)DNO6RP77K[28S7KX'.F>')\/!D=W\]Z]T[[.\K9@0_=YV]"LSO
M*=B[Q.(F8/Y6,U":0:B29HB&487B3OASO,@2IYWD)90#@V&%!C-`9TCVS[:U
M*DG=J.=ID@%+KM+%$E;F?9POF<>"I5*G;RR.]_K1%JX8B%-H/<YS'$1<1&E5
ME8J1&[$W3V9OX%/4M<31BT8]:Z/<+^>7T+FQ(IJ&2JTM%)H6\PCXG<ROYR05
M3/?9=T^>P*`1+VY7_:N8"Y5!Q),F>]&/,,$RZ:[G%)V"<53Z,:\,R=^E4:YA
M3P7Q)2CSXZ*:+.<AGZ(!=Z5]KI'[W,_0(?XGZT:R\F,(WQ8#$*?0D+L6Q%Q(
M@'PS[G8S4,]:0&WP8@VP0S;4#G%2])B+LLXG[TE'I65H9:=8`K1.KDA*KKPE
M!32LYY@MEK#U5JH>F46-_BPKQA*QZS!6-=GN":LZ7DUE7-W*U%V#*S-?I/P2
M7)'AK$47^<[HTF#]92OKOQFZE$UT,0Q_#;HTY$$+NLS263*_1'"!*MF/2OD7
MC#<+:#++H$XICU<`NN1B-P?TR^H2.?9YRJXLWW7"WC-ZG[V'M3:R9`WL@>G#
M#VCJS;E5(<D.*^)9VA>;;"NNSM_K54`U=`,@ELSF7?K8CVX-GM[J";2E%LYU
M>QL_TSP-FW4+]PZ!D<O"=1Q_,,"21=PR,MUT#4UO;T=W[T:;@TU2@3L"J"$U
M]%'7I:'[U;N(VH%8XNERZ1XV+8+':WY\:IJAH7N<_N):3H_U6I!)7CN./].O
MF<'3N+:W#5SPV[LF(GUT"BW)M<23%M\\_/;IO2=/GM]WP$A\,4.5<FDK>G+O
MQ4LJ;WH5((S6(.DP0%+4#$BIJ-NPU#GMZG6H*?H@M>&P$[64.&D1U7-%_;3*
MB'Z.^_.LJ;%IMQLGT5?1+6.!`NI&)]&MI_=>WO_;+4?Y@4:)#4O]6]$_-O^M
M_L?FK3[JF%KH4J%`]:1UF2\72!;=S7\4F[U6)3CZ!E$252GGJ`S<K7UZB%ES
MFX'!F`&K;5%UUHKC`.N;I%ZWR^9T8:G6,-J&-[-/3I<^.?;ZXL#S/"GP"?Z_
MPG]C^%/A'R"Q8-TV>`P&W0R=^'P=RO"BV-]H5&?%61X7;_%K+ZH=O9AFH[,J
MC=^:M_4J@]FIMI(8P+^9;Y[`6&&ZQAEXZJI)D4H7(<]@L\S,E!DVOST)NXA^
MM@[)9NEO&[U=6?RIUWA01/P,)P95?US%50'K+_SOUK)X6Y0KD=RLTT^S)"9I
M;CV0T??_EB#J"Q>O'7N3-1/>Z9`?%Z!^-7J-[H[-DTU%4.$`9EE=(W)_?^)Z
M&%[?01UMWQ7V;!?[VCX$>>M/Z0A;!^C>MDNG^A'5C6G,J#'<Y^T:_D]8O_GS
M)CRB9#G5,BD4-;IC11G1SS]'&UO;VV9ZG75STSL#X?S6]?&1&7^:UVDP)46$
M'5&(U\\2)MEU,"*$[0&WA8D#D]V\N]GKTR"H?04)#84U*[`&""UKW#8`"QN]
M04",WWS06QVW>I^+%=*A'9K1R]="C!@A`.:WP`MOBI^/%V9.&C%(,ZM)+=O:
M#%2N#09/-V!X#*K>ND$7:3HQ&SDH#;_?VORD,9/`8#O,4[=6R!X'(_M;1(7,
MT8U<ZJY=.!1E0[5JWHRI,@BE#3(6KYIA41:#=#9?7'*'9?4+J/=FE&0<9-IX
M3CP%=@LJ7>FA,/;R-`\L98Z%\4SC/`^L8MKD\<W@51Y8P+2Q&)B\\&]H[5H]
M0YNW%9<SP,"Y1)6=!IL;M-2LV%@SN`H]E-H(2Q>GK>J:T8%:]+4;6+P^<K78
M7O6\3_K35CZ7=ZF\D#5NFL9KM#5_NQ%)->H&[WKP>JZU-M9@G/Z%G0:O/!6L
MFP*GQ6>0](#U)]&&5LJ4;U89XA<!ZA57(IZQK(<M?.>5YCNUL_)P$[1;].'5
M=C0"7OMZLQ=R4$.A,D%F#IVF?L2>TWBAMV1YEW4=H7JL1_'22`W\)SUP-4G%
MH];/YN,?;39?Z=G,TEF=+JRS9*3\),V:6YLHR>1'5__HZ1]W=0?>'-OTO:QX
M'^>9"V*XN2)K)QM*!C7D?_QC$Q$?U5N6U+5OJ`?S'ZKYRV+CQO]6_=K.X:/F
M6W9$+>Q+C;:5BY&Z)K)-1J49&Y`Z$J*A_-I\!TZ#O/;TAOPO0)Q/X8,!]W$&
M*J&XV_SI-WA7^";UW%/`N)#'`*PSA&H_^@$L3?28`'O"-0.*Z4=O#<"U\0FE
MD(O)VFYHI/N_@'2RT,+=?J)>1J>D0!C(J#6?RYH7;LVE`-;;L(S9YZ!OI4_J
M0_#<&E#L].)QC.TX#"+`JL11M2QH+R0(&*$"N#;='Q`0`"-D]J?1#]&?S4]L
M$EYL;S,B\_!?_?":`/<.&'NVO0TLO?"4'3*]=D^;.N+<8/;V=GL+G;>&C;>(
MV]HB6^20C2+WXAHPA]4/4@K%B[,IX;17[-?O'N[W=X^&;HOLX/BP?S@^M%O6
M'=JO[B3)8@?WNL;1SV!&WW_S[/F+Y]^^I!WJCK.ER8-F3&X"&+F=V(>(W$!X
ML'5(<;/B<1,;J-4-R279]6<\F,#J>^29Y(K&/2E]=+RV'=^2#]R4>JM]>1W'
MRIF?8H=0_-:M:&!**$Z]@9^#Z36L#1P)FAN^!R']`#]1UD@L\K\EAODZBU"<
MS6Y@_E`U(_Z%D-UBW_3O"57Z*Q@5:8SZ&V!4U,0H>D>EH/^+8HF.['A19EV-
M):>MN'\TVN\?C24R)PKC0C!V=.("0]R'"^#!;>_/$9[P88,^R'=D/Q1-/K^,
MRO=IQ;'-Z0K8_7(Z!>C/0=V(B[18Y)>]B)0^0(SB7*KCGO`<@U>1K-D)6N_8
M;W<D#A[CLD>'7HS-EYM(,U2&WU\18[/Q&\V^=5%W]_I'N\<Z3>!H%\!S//:"
ML\TTW58QX(^;NBN%0`H*>7"C,HQV_!&>#?\.]A<4D/Q=;*H8AB@%VPVFKYFW
MO\TU3023@WH25^ETF7,`-.A(:3&1;`/>ASP!+K'8K`'D0&F32P-Z$R1O.F/M
MBCHASWUKT-,0R&@T'"L9,MK%Q``5:<'"S[C[/VSV3H-0,$H168D(XZCMZGPY
M2W&KQ`8?TDY#-K6HV$<Q8YMBAQ/4'Z/3R4@HX@^ZXCESO<W_<#5)0K>GG.PC
MZNRK])[1_O"P/]H?V0`^-P%1_O*<L-P;OQNAWGR#.D]27`6,HO0"5=?N#(G6
MR$R0=5QOHY(G)SP\T-RQN/!9!$J2D,EI,EA"9T>22``:=H5]F/@[<?;P%B=&
MRHW0(.I1PD?',@8;K+>&]P)5(M,ZTMDD^WM#`*V+C>1U,TU!6[2I!8O[_.DW
M;S!TGUR8Y*Z$5T_O/7L`LO.VBIT<LJGV22T]>/CHWG=/7DI+-O32-O4I;3UZ
M_.T+TY($;@ZM]1ALXK4UQ&/7QH:CFD;XU8]Y^@989/+VTH_`TN^]("S]H24.
MZZ`U#JNU$I;=/1D?G8ROR),;[0$M[1]8:;L59?,J[5?X-X(E)ZHQJ3J2A=)]
MMRP7F)H#0F19T(])+PK_D^:^U'_2W$L<3K%(SX$`W\=5AA&R=711YIS]PG'5
M-<5LXSRBO%Z"1*OHN:)GT]P&-C>E#SB1*7S<`7L')@HT#O2.SLX?TZI$'K!*
MHXOX?4KMW*FXI#\ZT>C%7)3@<VI\"X=P&G[C$6U5;=_F_&U.PX56I!GY/<>J
MC3H\D:UI6WN9])51Q0T540%`PDW.&C<Y\:G"IRD^3>M<M4-V*D$FR-."_Z4@
M%V`Q"%2@$*3OE@"_1<F9+!)KYRQOF\^Q0F:<1B8<F;'0Z`+_([%P2A]DN7%6
MM.*?@I/_BEA($*&_OQE&MO+)?4RJM'PRF%R6T"@&/(H4%`Z+"QB].@-%5+"6
M4>-.E=8+6F/)HI-\D"Y,:0:CPR]`&80;N*7DITSV=CX'<\$LP1$J^,&0H-\^
M_HOCZ>-@Z,74?)G:3U/^=HJ-.&`;W(_J^++F"%V!8K*L*C(@HG@RD9P8G4:G
M<SDU."EJ9C+!ICR01IPKS-O]*[0]E@`C#:]V0`73YFTD;FP&L^*'8%:X=G4#
M+XR:#G/)BHCY#<6PK:&[=[QWQ#K4$:7H$GMKQ:[CX_YX=&2P2]IYDA5OGR"\
M,'6W5LA_GW)Y\8^#$:B,L[)`9X+-9AY\(UB7@M;%ZCO`"1_*Y2)@IPU(.28`
M7S'@S#YE[DE>GOIX591,XP,9VO,B%89E#!MB7!A+_0%H4!95)13VH\7*XW$S
M&"F3P^("JF%:IJJZTX;<]-V-X5XT+Y%C5P81==<:C=IRE-?B$36">,0/#H\:
MW9D(+D&F)>YQ-Q#'I*@#\22)H,XQ:-_'^^M19SP^ZH]W]PSJ4-_07/*67*N6
M"BEAS.2U-SJVF)8D5%>Y2Z#!1QG`A5#&K8A+<8LQ30G]LO4"UI9PK[H4BC<I
M[+T=W^?)R=G[_;$[E.'+#1S^%S36#+;'P9VEU#BU2;6\N/MHUFCP(HTI#QU-
M*4E"Y/#)926<S&N&"I#9E;M6'A=3Q#5[8$$\.\O.E^6R5J.$MI!D6A@:8:A5
M&THI)-CK&G!C"8Z"B&>4/;9UC_X]->/5WWZ2I:?L?Q2\"<K@C!ZS!#/.T9$A
MS(:H_XXGPVI?YKC&1)3(H0F^5"1QV"ZT7`,B@3I>`[[\7-^`Q_A=:K:6*NL%
MYX8^.D!87D?#H9WIKFLB;FF"`RD8&M="0ABLRJ5-*2NT*$,E>>TTLI8QK*V[
MI@EO'GGV%EB;$0WM0H:/BW#S8!ZMIU'Q1`+1<,6""N.U"^JQ=6@S+BY[:W&"
M@(Y_$D1N?CBU6>AR"(-.=,>A2;7&HEQ]],7Z1?UXZK$-)LTHQK\@6&)+J+\2
M*VY/%QT=]T>[XSWM/!P?]L?C_<,P9?2CGV(%NEOM(H.-\+/<_&R9Y59JHUJ7
MQZ@(BU<N,AE7;.I$RM1!H8F569>TQT_TY<`,!0M`M7E*^O,V*PPFP8#'U$BS
MLCNZ,/1%B4J;;#1O52L3T5)A[(^):MDJ5GUVXKE$`/,I-P^KOJ1\]PWSFX<;
MOQ1:+$%%MH?"[F8+KZC19EIQ$1OPHC:"9[05:Y*!3+SGXV</S8YLG`<Y/W&M
M-\WU/A45E?@F*K4*]SQI7XT'_?//H#=A!:B%Q^BLH@%,!WK]RUV>EI=C4<R]
M&&<N8$,+;#-C&RQ3>%O^D@)3Y+)QQ&4$:AA%D-NX2]VW;'%3#LP<H2T05U$-
M*]P5AC9P\"XP@S97@N(?PVB&`I>%)X9#P7%4ZI596[>D&HJ$$3Q*&"&>J@+]
MP>P8*PQF#.!W3Z?RX"?$"7FM6S5#,Q/V2_J;U@5WU9()@<DZ,>T&!1I.,S\1
MOW-.#IW/T+4DP.<HM)"")A@.M??BPJC#,,R^BQLKK$;U7!HY8DSEYR*9^=-F
M]'T.9KP(8@5['BP:85ORU@0(ZE<Z0%#>F1A!_4K'",J[(&%&WOIAB5>G40EC
MM;+'K@E;*X[%T6$[F#/;S":5)!5B<KQ<W!;&3P)IR(^\F@MOB[[,:N8%;X9P
MER:S@I,KT'#RD/,:?D910BXV4R\:;>+@3*A0%^?1LZN;%R&*4%'[Q4835>Z=
M@_Z_@R%7DT%J](5Z`63E":-9"5+,A!!$9HWH-"TCA4"AP#RCLJZSLWP],?T`
MO;TA8-6R0*59G*()W9)2\L+0H%*GI7AS9WXCEHDEJW[TKA^5<QTB@,N)63Q%
M'N08E;@\11`T7:K5XO-#3&""U"HHOKA;-,OIX`Q*55/I2$$BVM2]G.K`L8Z)
M4WJG@A6\T&H<8W'=&$L>8WGU&,L&^MGW7`T#<>1<%&^`0?+DNF$R?'DH;BP_
M1V;XO99QE3FW;25\AP1JX=XTYDD]0+T-%$]Z?N)M,X?YR/8^*U>XMY6B(F=,
MO7Y4E^S&-M6C+8JDRXHE*O+Y6T,@1#01*,A9[G0UU.)PL]^K;GJ6+LS6ZF<!
MWP7>P%3_K&;:(6PO)1J&I(Q:'^8TTG2.^H$'W%!KZG0:B-MI8&W'1UGNDY!6
M]U90;T6CMRL09J.DE`I6IH*@KZMID_AY#>RE+D#'Q)W9K8*SR87\'58!VX;_
M0='<3:$6B"$S>27E7G/UNA#TPT^%]RFL$&%@ZG!3T#:HXGW$X<RG'^!]5QKI
MFSXD"`NG2R@MC??6(@B>9;1V/'6Y=C1UX6J)0N"Z[N8"$59`_QP-/<91.W"!
M[I6[U>5J.>AZN0X=:]2TN0B=HG;P=6WEA2-ZUQ@O4_TJ+[W%@1=V2>BCOQ#T
MN0'^6L`/J%)(#+*K;<%FZBI@"=66&`@.T[6#*ZW&E+M0;1?!)S4-&(6-ZU<*
MRZV:=5=G*=^^S=05TL&+[QY1]G0H%^B]K136>O@,J`?(S74G$_BS!%MPS!T3
MEENU5S+/UZ>Z@"P7%2C\`J1R.681-N,M3"=L0WWE`L#3_VYX+J@Q=%!:S>GW
MWV]MVNS"'<?*.Q$>]3A9)L2E9\J)W7#[60;=:>$V!,V?''_32,2C[AL0"#II
M/J_G:[#+Z`3AC`VR>7)BVY*C0SD_,-..:O[;C>IN-%G.6;!:#&_I)@^6^:/#
M!8_U"-O[LYTJX"=).V%$7LMKN&`+W5$?=VTK!EZXG8-^NE4&9=^FZ9P1A+UW
ME^2FH?U6'RU@M@4>P1""MV_9I8<FZ"=7#>+9G]1H'W6'6?Q6L')+I6=NT>F@
MF)"U+("\BG-0(93GS@UGG1YQC2+1^;A&]K>V=;5"HL1Y)P@2_G0-IZD5V&4T
M.&Q8[5H%M4WY;M.]&ZJWKWG30)UBU:;UVHR14ID0%.O_CNI%[Z0PC>>=.C3"
MCG/-F,HPK[&<R\3G[4=96!G;2*$Q8RS\A(6_X_[E"C>ZS=F\FI.2-IO2(=6T
M?71&FT\%(ZF@*.TXX.:1.I/(AT#Q"R!0!&=KY*9$2])"6;:X&/B;<W'S@=K7
MN$^-X0J?WV@W4"V.`^=:F+?X>EK.QO&3=<UJYB1BS=%0T!ERZ[IW>LWY5M;S
M4%-$I"2*^1EC:TZ[,;FV^6#0YK_CZ70X!:FXF0^G2M^GE1PS`H3).P0.D=;"
MENOY;H$KH?D)Q\TYZN`,76R$_9?SJW),@PPK\;EKQ[]@T=I)B9\^1!IQLC1G
M!T9(Q4O_QB[I`-;T=M$SZ.,MX$TQ(S?&1&YM'2.<<A9.-NG#G6M&W]@@_Y*G
MF!&6U-ELGF?3+&5$X=D#0'E3*R3(FO=1C*$.\O)$;WUX*AMM'V>`@&Q<]]UZ
M63^B[*?&S.!2NO"`6PL.&.<FUKD99VEUGK[1?L8\,1Y$V5296Y>BL(K:[)74
M>;A5,D>O8>V<K]+DF@.:3&!ZKEC%W#N9U*2=8MM9R$\,^Z>MM\%?>-L9V,]H
M"/_U=)HKFC,9^NAU29>S_5-;V=I9.O-7.,0!#`?_XK0]E<_,80"5I8`Z1R3W
M^*!MN&U#@,L.`]!`LW/M>\X]XH)%P@6Z75BX-<]Q<@=LY<P+WVFZLKQV#C/'
MMF@1^:VQI9J^27M>E6W'JUX3&NAFT*'1/`%-<0FH7C/Z<+7&OHEVN2*6LDLZ
M($K>8=44R5N9@$'.-J*@S3:>)U2!&[,^43A28`H($7]&YS_THXG\>R;_7IRY
MK-&A3Q4V)5:MT%F%E'S[=K1%3_Z11.&A9?E:CU&&%E6NO5-2GJR%O]P5"<TM
M25E[9*!3G5O;NO),JAJ1$ZFGBY<>T(KV3-9$.\;;<S,8W;$SNF]!P05S:&IH
M976V1HO`R4U0[Z`MB0`LJ#^[9`XZ0;&V>Y"SMEI=>XKVS]8X9A]$VP>[?>FW
MO'9Q&&/JA;`$*]5&5K#YN?=G5J'JG+DN%`[PFIHR?M,L'D=60C:RY'//3=,<
MVY4-?-)\/EX)<P/9=GB&Z$S[LCDA,IW2A4_P&Q[/JK/T7`@(GMKG19]HA(-1
M3[%P_PP7(MT@?[X..JVETS:J;70*GQJ=UM=T>H5FDM!Q&V=V0%#U*^`[)PAA
M>O<5P/`$*4-^3>!7@F=F>&=_UX`[.<L%:C$/-IOO7Z1@($GPDMF]Y"QZ$S/3
MM#W\4'Q22[[/BDW23;XOEXM-":Y,.1Q8W2R``7J/"RFT0GT)P^JP!VG'!81+
M\`YMV6$PDNQ(4'T;%&S&:K+#['AXP%G!`ZM+:0<$!`8UQ7667T8+#'?CN!:.
M8\9F@WDE956E]1QO-P+]S(ZN(5KX7$P9SAL:JW<>P9IC"+:RHO$*8*/EC_\U
M66]28,K:5K=Y0HNO3F'KU$=X),I<3A$)Q%!FG4X)BP3,T4]>*W\[S(&H`_[9
M`*(FSVQW0]YN),!<O=,V0R<7CL<YEC>Z,C;;TQ7U5357O*5T.)^L$*/2.BEP
M$/!GS;E.5_;PT1P/*)4#R=EB;8Q\$GQ0NNMIS#F.L8X';PV3HN)OYM,/W6;(
MDYCZ1:Z/`C)Q!O;EV=SW!;2?L9'&I_YWBAB4<Y.&P3=)9UFU5*E63L-PEWPX
MY3D'\S%?N=\K^#W+5_ILH2P7;6O%_V*JQ"++Z>\*_P(#/D,L-2J&B]^B&"$,
MVMFJ%\I>J1>V`QMN?-JX`P0/@5_,`J.G:CI($.!KW"8@6!AH+KO5I,G@xxxx
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
M^I;3<UQZA*3J%I@xxxx(UW2S'4`_+S.T1DS?L#C_?WL<IEC@0$CL4[P8;R]8
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
;"MH2MUO`P=H"79HA'?\,42[_#V0VJRE+(P$`
`
end

--
Sven Wischnowsky                         wischnow@xxxxxxxxxxxxxxxxxxxxxxx



Messages sorted by: Reverse Date, Date, Thread, Author