u bFROM.SAV4FROM.SAV2BACKUP [FROM]*.* [HALL]FROM.SAV/SAV/LOG/BLOCK=2048 HALL F (V6.1 _SYBIL:: 6 _DKA100: V6.1  *[FROM]AAAREADME.;1+,./F 4G- 0123KPWO56^(6h7VJ҃89GHJGFROM is a VMS command similar to the one of the same name found on manyEUnix systems. It allows you to print a directory of mail messages inGa given folder, and optionally select them by a substring search of the from address.2FROM should be defined as a foreign command, e.g.,$ FROM :== $disk:[dir]FROM FROM syntax:*$ From [substring | *] [folder] [filename]Where:A substring = Substring to search for in the From: field. * means" wildcard and is the default.7 folder = Optional folder name. Defaults to NEWMAIL.A filename = Optional mail file name. Defaults to your MAIL.MAI, wherever it lives.*[FROM]BUILD.COM;1+,-./F 4$- 0123KPWO56>h7~J҃89GHJ SڋFROM.SAV- [FROM]BUILD.COM;1y $ Macro FROM$ Link/NoTrace FROM*[FROM]FROM.EXE;1+,. /F 4 - 0123 KPWO 56>/Kh7@J҃89GHJ0D`0205TKh FROMV01.002^TKh05-13  ?! LIBRTL_001 j! MAILSHR_001!H! MAILSHRP_001FROM.SAV [FROM]FROM.EXE;1 [!UL message!%S selected]')!6%D !5%T !AC!24 !4UL !64AX Date From Lines Subject *D ` ; B(@44><=$90ItFROM.SAV [FROM]FROM.EXE;1 NEWMAIL?~5+ϵϱ$PpiCdGnn nPȏPϼmςFQ0^gpQ~[~VQUϿ~UށV~Ua0~aQ0n0bgPfτe{eQ089n/0(όn<ϼaXϯϣϟЬuim`X Fꕰ*핸핚sk$c-[_SxP+FROM.SAV [FROM]FROM.EXE;1 @@xx0dxF  @LIBRTLMAILSHRMAILSHRP*[FROM]FROM.MAR;19+,.!/F 4S! P- 0123KPWO!56'VȦ7`GK҃89GHJ3 .Title From - Print a summary of new mail messages .Ident /V01.002/ .Enable SUP .Default Displacement,Word .Subtitle Introduction;+;3; ----- From: Print a summary of new mail messages;; ; Facility:;; Mail system utilities; ; Abstract:;8; This module will print a summary of new mail messages.;; Environment:;); VAX/VMS native mode, VMS V5.0 or later.;;;; Version: V01.002; Date: 1-Jul-1991;8; Copyright 1990, 1991 San Diego SupercomFROM.SAV [FROM]FROM.MAR;19S!puter Center;; Gerard K. Newman 24-Jan-1990 ; San Diego Supercomputer Center; General Atomics; P.O. Box 85608; San Diego, CA 92138-5608; 619.534.5076;; Internet: GKN@SDS.SDSC.EDU; BITNET: GKN@SDSC.BITNET; SPAN: SDSC::GKN (27.1);;; Modifications:;<; 2-Feb-1990 GKN "_" is a legal character in a folder name.4; 1-Jul-1991 GKN Output a * if a message is marked.;;- .Page .Subtitle Local definitions .NoCross ;Save a tree' $MAILDEF ;Define callable mail stuff $SSDEF ;System service codes$ $STSDEF ;Define status code bits $TPADEF ;TPARSE definitions .Cross ;Turn CREF back on ; Local macro ; Item: Make an item list entryM.Macro Item Type=MAIL,Item=,Length=4,RetAdr=,RetLen= ;Make an item list entry( .Word Length,Type'$_'Item ;Length,,what5 .If NB,RetAdr ;If we have a place to get/put things .Address RetAdr ; the use it .Iff ; else .Long 0 ; we don't care .Endc ; ...5 .If NB,RetLen ;If we have an explicit return length .Address RetLen ; then use it .Iff ; else .Long 0 ; we don't care .Endc ; ....Endm Item ; ...; Local definitions)$DEFINI ITM ;Define an item list entry$DEF ITM$W_LENG .Blkw ;Length!$DEF ITM$W_CODE .Blkw ;Item code'$DEF ITM$L_ADDR .Blkl ;Address of data6$DEF ITM$L_RETLENG .Blkl ;Address to return length in1$DEF ITM$K_LENGTH ;Length of an item list entry$DEFEND ITM ;That's all .Page .Subtitle TPARSE state taH/7FROM.SAV [FROM]FROM.MAR;19S!oble;+;; ----- Command syntax:;;,; $ From [substring | *] [folder] [filename];; Where:;B; substring = Substring to search for in the From: field. * means#; wildcard and is the default.8; folder = Optional folder name. Defaults to NEWMAIL.B; filename = Optional mail file name. Defaults to your MAIL.MAI,; wherever it lives.;;-= $INIT_STATE FROM_STATE,FROM_KEYS ;Initialize the state table $STATE ;Initial state* $TRAN TPA$_EOS,TPA$_EXIT ;Quit if at EOS* $TRAN !FROM ;Store the From: substring $STATE ;Next state* $TRAN TPA$_EOS,TPA$_EXIT ;Quit if at EOS7 $TRAN !FOLDER,,BLANKS_OFF ;Else store the folder name* $STATE ;Last state - fetch a filename* $TRAN TPA$_EOS,TPA$_EXIT ;Quit if EOSB $TRAN TPA$_FILESPEC,TPA$_EXIT,STASH_FILE ;Else stash the filename>; Sub-expression to parse a from: string, delimited by blanks.< $STATE FROM ;Sub-expression to parse the From: substring0 $TRAN TPA$_BLANK,FROM ;Swallow leading blanks3 $TRAN TPA$_LAMBDA ;Else start storing non-blanks* $STATE FROM_1 ;Collect characters here' $TRAN TPA$_EOS,TPA$_EXIT ;Quit at EOS4 $TRAN TPA$_BLANK,TPA$_EXIT ;Quit on the next blank $TRAN '*' ;Special case: *E $TRAN TPA$_ANY,FROM_1,STASH_FROM ;Stash the next character otherwise" $STATE ;Here when we have a *4 $TRAN TPA$_BLANK,TPA$_EXIT ;Quit on the next blank% $TRAN TPA$_EOS,TPA$_EXIT ;Or at EOS1 $TRAN TPA$_LAMBDA,,STASH_FROM ;Else stash the */ $STc FROM.SAV [FROM]FROM.MAR;19S!^fATE FROM_2 ;Collect more characters here' $TRAN TPA$_EOS,TPA$_EXIT ;Quit at EOS4 $TRAN TPA$_BLANK,TPA$_EXIT ;Quit at the next blank6 $TRAN TPA$_ANY,FROM_2,STASH_FROM ;Stash anything else6; Sub-expression to parse a folder name: A-Z, $, _, -.8 $STATE FOLDER ;Sub-expression to parse a folder name1 $TRAN TPA$_BLANK,FOLDER ;Swallow leading blanks $TRAN TPA$_LAMBDA ;Else ...( $STATE FOLDER_1 ;Expect a folder name' $TRAN TPA$_EOS,TPA$_EXIT ;Quit at EOS- $TRAN TPA$_BLANK,TPA$_EXIT ;Quit at a blank0 $TRAN TPA$_ALPHA,FOLDER_1,STASH_FOLD ;Alphas Ok0 $TRAN TPA$_DIGIT,FOLDER_1,STASH_FOLD ;Digits Ok% $TRAN '$',FOLDER_1,STASH_FOLD ;$ Ok% $TRAN '-',FOLDER_1,STASH_FOLD ;- Ok% $TRAN '_',FOLDER_1,STASH_FOLD ;_ Ok $END_STATE ;Done .Page .Subtitle Impure storage/ .Psect IMPURE_DATA NOEXE,RD,WRT,PIC,NOSHR,PAGE; Random impure data.0TPARSE_BLOCK: .Long TPA$K_COUNT0 ;Argument count, .Long TPA$M_BLANKS ;Blanks are significant!IN_DESC: .Long 128 ;Input buffer .Address IN_BUFF ; descriptor- .Long 0[5] ;Allocate the rest of the block8FOLD_LENG: .Long 0 ;User-specified folder string lengthRFROM_NEXT: .Address FROM_SEL_BUFF ;Where to put the next From: substring characterNFOLD_NEXT: .Address FOLDER_BUFF ;Where to put the next folder string character(OUT_DESC: .Blkl ;Generic output buffer .Address OUT_BUFF ; descriptor(FAO_ARGS: .Blkl 10 ;$FAOL argument list(; Things for dealing with callable mail.=FILE_CONTEXT: .Blkl ;Context 7FROM.SAV [FROM]FROM.MAR;19S! pointer for mail file routines:MSG_CONTEXT: .Blkl ;Context pointer for message routines+NULL_LIST: .Long 0[4] ;Null item list6FILE_LIST: Item Length=0,- ;Empty filename string/ Item=MailFile_Name ;We'll stash it later .Long 0 ;That's allHMSG_BEGIN_IN: Item Item=Message_File_Ctx,- ;Specify the file context& RetAdr=FILE_CONTEXT ;Here it is .Long 0 ;No more7MSG_SEL_IN: Item Length=7,- ;Default folder length5 Item=Message_Folder,- ;Specify the folder name% RetAdr=FOLDER_BUFF ;Here it isPMSG_SEL_FROM: .Long 0[4] ;An empty item list in case we do From: selectionRMSG_SEL_OUT: Item Item=Message_Selected,- ;Get the number of messages selected( RetAdr=SELECTED_MSGS ;Put it here .Long 0 ;That's all*MSG_INFO_IN: Item Length=0,- ;0 bytes2 Item=Message_Next ;We want the next message(NO_SIGNAL: Item Length=0,- ;0 bytes* Item=NoSignal ;Don't signal errors .Long 0 ;That's all+MSG_INFO_OUT: Item Length=8,- ;8 bytes5 Item=Message_Binary_Date,- ;Get the date and time$ RetAdr=MSG_DATE ;Put it here! Item Length=64,- ;64 bytes. Item=Message_From,- ;Get the From: line& RetAdr=FROM_BUFF,- ;Put it here/ RetLen=FROM_DESC ;Return the length here# Item Length=128,- ;128 bytes6 Item=Message_Subject,- ;Get the Subject: string& RetAdr=SUBJ_BUFF,- ;Put it here/ RetLen=SUBJ_DESC ;Return the length here4 Item Item=Mess Y>FROM.SAV [FROM]FROM.MAR;19S!gage_Size,- ;Get the message size$ RetAdr=MSG_SIZE ;Put it here$ Item Length=2,- ;Only 2 bytes5 Item=Message_Return_Flags,- ;Get the message flags& RetAdr=MSG_FLAGS ;Put 'em here. .Long 0 ;Done; Outputs from callable mail.BSELECTED_MSGS: .Blkl ;Count of messages selected from the folder(MSG_SIZE: .Blkl ;Message size in lines(MSG_DATE: .Blkq ;Date message received!MSG_FLAGS: .Blkl ;Message flags FROM_DESC: .Blkl ;From: string! .Address FROM_BUFF ; descriptor#SUBJ_DESC: .Blkl ;Subject: string! .Address SUBJ_BUFF ; descriptor ; Buffers.$IN_BUFF: .Blkb 128 ;Input buffer&OUT_BUFF: .Blkb 256 ;Output buffer%FROM_BUFF: .Blkb 64 ;From: buffer)SUBJ_BUFF: .Blkb 128 ;Subject: buffer1FROM_SEL_BUFF: .Blkb 128 ;From: select buffer3FOLDER_BUFF: .Ascii "NEWMAIL" ;Folder to look in+ .Blkb 64-<.-FOLDER_BUFF> ;Pad to 64 bytes .Page .Subtitle Pure storage- .Psect PURE_DATA NOEXE,RD,NOWRT,PIC,SHR,PAGE.FAO_SELECT: .Ascid "[!UL message!%S selected]"=FAO_MESSAGE: .Ascid "!6%D !5%T !AC!24 !4UL !64"SHEADER: .Ascid " Date From Lines Subject"SPACE: .Ascic " "SPLAT: .Ascic "*" .Page .Subtitle Entry point' .Psect CODE EXE,RD,NOWRT,PIC,SHR,PAGE .Entry START,^M<> ;Entry here.; Grab our command line and feed it to TPARSE.) PUSHAW IN_DESC ;Return the length here CLRL -(SP) ;No prompt* PUSHAQ IN_DESC ;Here's the input bu $ [FROM]BUILD&ZXM;@+`[|{IcR|#zd]2b4Hl4@wJhxE \!0*O4rtk,i,Wy` ({#B0L: XGDMCmjxF} dP}uNzMf j x+WGQ]Q`.4pTkAuRx(<:) %ZGX3@AMdvzuYQmp.p4Eg]-JNe[TK5",BAo>j}! _ \[M( 31rxNjct '=~9vI}%r}+d:;FSjdN|1`Jr;N@ OcO_B]{ ksZ<Hv-9[t}<0A=2^Nb.&z9U!8;G yR ~-J&g(bd>0*7Od56Ik81$AZ;FM~oPZC*r-SWFE=p[h֞孍nў2aRx:`Uy(崻13؝r dDv/}މGź}b}l[FCz^lr3;U$Ig_Œw1l+J򊚠eD'&U3D/.q-%w YY%!’E<CpFḾ7A]I ,{@1:n% xDMx9'e堐1GlLHCԧ{Ig*t>osQ{yh=LIz⍷엳̓x=_\`͝8B 9ׇ@ٻ)N2bNw 7F9ȆkVLx"ԡSe m"t*-9 [K(О‹ÈN1 v{d=U(?ϝ ѪőۯiF숏܀ ӭБnٖˉ#ʹNJ)ێjqΏ܍~缽ϰˎ‚ǚꌖГҪˇڃݕ䦯ƕӘâ쓍뵃Ȭ\څ̳ٙff2;a,8X3Wb uH2pVnay %oh7~J҃89GHJ  !FROM.SAV [FROM]FROM.MAR;19S!,ffer6 CALLS #3,G^LIB$GET_FOREIGN ;Retrieve our command line TSTW IN_DESC ;Anything there?( BEQL 20$ ;If EQL no, use the defaultsG; We had a command line -- feed it to LIB$TPARSE and see what it thinks) PUSHAL FROM_KEYS ;Keyword table addresse( PUSHAL FROM_STATE ;State table address5 PUSHAL TPARSE_BLOCK ;TPARSE parameter block addressm/ CALLS #3,G^LIB$TPARSE ;Crack the command liner BLBS R0,10$ ;Wins RET ;Lose.2; See if we have a From: substring to search with.710$: TSTW MSG_SEL_FROM ;Do we have a From: substring?9! BEQL 20$ ;If EQL no, drive onr5 MOVW #MAIL$_MESSAGE_FROM_SUBSTRING,- ;Else build the - MSG_SEL_FROM+ITM$W_CODE ; rest of the itemK MOVAB FROM_SEL_BUFF,- ; list MSG_SEL_FROM+ITM$L_ADDR ; ...+; See if we have a different folder to use. 420$: TSTL FOLD_LENG ;Do we have a different folder? BEQL 30$ ;If EQL no.  MOVW FOLD_LENG,- ;Else use MSG_SEL_IN+ITM$W_LENG ; it.t; Establish a "file" context.=30$: PUSHAL NULL_LIST ;Don't need to have anything returnedr, PUSHL (SP) ;Or specify anything, either.1 PUSHAL FILE_CONTEXT ;Here's a context variable;4 CALLS #3,G^MAIL$MAILFILE_BEGIN ;Establish a context; Open the mail file.M8 PUSHAL NULL_LIST ;Don't need to have anything returned8 PUSHL (SP) ;Presume we're using our default mail file9 TSTW FILE_LIST+ITM$W_LENG ;Do we have an alternate file?. BEQL 40$ ;If EQL no.e$ MOVAL FILE_LIST,(SP) ;Else use it.-40$: PUSHAL FILE_CONTEXT ;Here's the context 3 CALLS `s~FROM.SAV [FROM]FROM.MAR;19S! #3,G^MAIL$MAILFILE_OPEN ;Open the mail file.L BLBS R0,50$ ;Win. BISL #STS$M_INHIB_MSG,R0 ;Shh.  RET ;Back to DCL. ; Establish a "message" context.+50$: PUSHAL NULL_LIST ;Don't need anythingtC PUSHAL MSG_BEGIN_IN ;However, we have to specify the file contextk* PUSHAL MSG_CONTEXT ;Here's a new context; CALLS #3,G^MAIL$MESSAGE_BEGIN ;Establish a message contextnB; Now select the specified messages -- by folder and From: string.* PUSHAL MSG_SEL_OUT ;We'd like this info9 PUSHAL MSG_SEL_IN ;Here's the folder (and maybe From:)) PUSHAL MSG_CONTEXT ;Here's the context]5 CALLS #3,G^MAIL$MESSAGE_SELECT ;Select some messagesoC MOVL SELECTED_MSGS,FAO_ARGS ;Copy the number of selected messages/ MOVAB FAO_SELECT,R1 ;Format with this stringE BSBW FAO_IT ;Format & print.& TSTL SELECTED_MSGS ;Any work to do?" BEQL 80$ ;If EQL no, stop now.; Build the FAO argument list.$ MOVAL FAO_ARGS,R1 ;A handy address MOVAQ MSG_DATE,(R1)+ ;Date MOVAQ MSG_DATE,(R1)+ ;Time" MOVL R1,R5 ;Remember this spot!% MOVAB SPACE,(R1)+ ;Space (or splat)t MOVAQ FROM_DESC,(R1)+ ;From:$ MOVAL (R1)+,R6 ;Remembr this spot!( MOVAQ SUBJ_DESC,(R1) ;And the Subject: BSBW BLANK_LINE ;Blank line * MOVAQ HEADER,R1 ;Format with this string BSBW FAO_IT ; ... BSBW BLANK_LINE ;Blank lineL=; Loop here collecting information about each of the selectedt ; messages.e+60$: PUSHAL MSG_INFO_OUT ;Return this info 4 PUSHAL MSG_INFO_IN ;Return info about this message( PUSHAL ldRFROM.SAV [FROM]FROM.MAR;19S!MSG_CONTEXT ;Here's the context- CALLS #3,G^MAIL$MESSAGE_INFO ;Fetch the infoT BLBC R0,80$ ;Done.a, MOVL MSG_SIZE,(R6) ;Stash the message size' MOVAB SPACE,(R5) ;Presume not marked.;% BBC #MAIL$V_MARKED,- ;Branch if thisS, MSG_FLAGS,70$ ; was a correct presumption% MOVAB SPLAT,(R5) ;Else use a splat.370$: MOVAB FAO_MESSAGE,R1 ;Format with this stringL BSBW FAO_IT ; ... BRB 60$ ;Loop.$&; Here when we've run out of messages.,80$: PUSHAL NULL_LIST ;Don't need anything PUSHL (SP) ; ...) PUSHAL MSG_CONTEXT ;Here's the context_: CALLS #3,G^MAIL$MESSAGE_END ;Destroy the message context( PUSHAL NULL_LIST ;Don't need anything PUSHAL NO_SIGNAL ;Shh.h* PUSHAL FILE_CONTEXT ;Here's the context4 CALLS #3,G^MAIL$MAILFILE_CLOSE ;Close the mail file( PUSHAL NULL_LIST ;Don't need anything PUSHL (SP) ; ...* PUSHAL FILE_CONTEXT ;Here's the context8 CALLS #3,G^MAIL$MAILFILE_END ;Destroy the file context RET ;Done.E .Page2 .Subtitle FAO_IT - Feed $FAOL and LIB$PUT_OUTPUT;+;R.; ----- FAO_IT: Feed $FAOL and LIB$PUT_OUTPUT;N;A7; This routine will feed $FAOL and then LIB$PUT_OUTPUT._;T ; Inputs:$;!; FAO_ARGS - $FAOL argument list.-%; OUT_DESC - Output buffer descriptor_; R1 - $FAOL control string;. ; Outputs:;e; As described above.s; ;-*FAO_IT: ;Feed $FAOL and LIB$PUT_OUTPUT: MOVZWL #256,OUT_DESC ;Reset the output descriptor length0 $FAOL_S CTRSTR=(R1),- ;Format with this string, OUTBUF=OUT_DESC,- ;Format ~`FROM.SAV [FROM]FROM.MAR;19S!jinto this buffer+ OUTLEN=OUT_DESC,- ;Return the length hereA* PRMLST=FAO_ARGS ;Here are the arguments/ PUSHAQ OUT_DESC ;Stack the descriptor addressM& CALLS #1,G^LIB$PUT_OUTPUT ;Display it RSB ;That was easy .Page+ .Subtitle BLANK_LINE - Output a blank linet;+; (; ----- BLANK_LINE: Output a blank line; ;G(; This routine will output a blank line.;e ; Inputs:A;R ; OUT_DESC - A handy descriptor.; ; Outputs:;d ; Blank line.l;e;-#BLANK_LINE: ;Output a blank linei# CLRW OUT_DESC ;No bytes to outputX/ PUSHAQ OUT_DESC ;Stack the descriptor address( CALLS #1,G^LIB$PUT_OUTPUT ;Easy enough. RSB ; ...: .Page2 .Subtitle BLANKS_OFF - Turn on TPARSE space flush;+; /; ----- BLANKS_OFF: Turn on TPARSE space flushl;;_/; This routine will turn on TPARSE space flush.f;h ; Inputs:e; ; (AP) - TPARSE parameter block.;s ; Outputs:; ,; TPA$M_BLANKS cleared in TPA$L_OPTIONS(AP).;a;-5BLANKS_OFF: .Word ^m<> ;Turn on TPARSE space flush : BICL #TPA$M_BLANKS,TPA$L_OPTIONS(AP) ;Turn on space flush RET ;Easy.  .PageC .Subtitle STASH_FILE - TPARSE action routine to stash the filenameM;+;l@; ----- STASH_FILE: TPARSE action routine to stash the filename;M; @; This routine is called as a TPARSE action routine to stash the; mail file name to use.;I ; Inputs:_;t3; TPA$L_TOKENCNT(AP) - A descriptor of the filenameh3; FILE_LIST - Prototype item list for specifyinga; the filename.;T ; Outputs:NFROM.SAV [FROM]FROM.MAR;19S!t;_; FILE_LIST filled in.; ;-ESTASH_FILE: .Word ^m<> ;TPARSE action routine to stash the filenamed% MOVW TPA$L_TOKENCNT(AP),- ;Stash thet( FILE_LIST+ITM$W_LENG ; filename length% MOVL TPA$L_TOKENPTR(AP),- ;Stash the=) FILE_LIST+ITM$L_ADDR ; filename addressM RET ;Easy enough.e .PageF .Subtitle STASH_FOLD - TPARSE action routine to stash the folder name;+;bC; ----- STASH_FOLD: TPARSE action routine to stash the folder nameD; ; @; This routine is called as a TPARSE action routine to stash the=; name of the folder to look for (one byte at a time; sigh).t;, ; Inputs:y;b/; TPA$B_CHAR(AP) - Next byte in the folder names1; FOLD_LENG - Length of the user-specified folder6; FOLD_NEXT - Address of where to stash the next byte.; ; Outputs:;: ; FOLD_LENG & FOLD_NEXT updated.;f;-JSTASH_FOLD: .Word ^m<> ;TPARSE action routine to stash the folder name/ MOVB TPA$B_CHAR(AP),@FOLD_NEXT ;Stash the byte INCL FOLD_LENG ;Another byte* INCL FOLD_NEXT ;Put the next one here. RET ;Donej .PageN .Subtitle STASH_FROM - TPARSE action routine to stash the From: search string;+;uK; ----- STASH_FROM: TPARSE action routine to stash the From: search stringb;e;@; This routine is called as a TPARSE action routine to stash the7; From: search substring (one byte at a time ... sigh).L; ; Inputs: ;k*; TPA$B_CHAR(AP) - Next byte in the string; FROM_NEXT - Where it goesP5; MSG_SEL_FROM - Prototype item list entry we update.R;G ; OuπTFROM.SAV [FROM]FROM.MAR;19S!* tputs:;T%; FROM_NEXT and MSG_SEL_FROM updated.A;E;-RSTASH_FROM: .Word ^m<> ;TPARSE action routine to stash the From: search string4 MOVB TPA$B_CHAR(AP),@FROM_NEXT ;Stash the next byte- INCW MSG_SEL_FROM+ITM$W_LENG ;Another byte) INCL FROM_NEXT ;Put the next one here, RET ;That's all .End START>]"_5WZV%vIi$.Um@~SNBiJk7 >>`i \&Wk uQnw Ozv(R FPMdwB1XDY? #q m}J w)/DN'$~O(bAYUc%\*b1F{jE6$8c"js j3XVOB3kBT"/{ fg%%jj?dz}_9LvpvZG# i416+7'zd#}pQC VVL~roMs)q, .s=U<8RKBQCU>uHY2f3gA|Kax gRu(9 %/>h( fo t_B[ &oHvEdr5SaUZ[UL>^ [BZ*{iVO,<:> ftzppXzoc C{ns\-(?6`e-@qL=sE}$ "+A7e7 !7~#/=XS6?7_oK7V1[O#CUvovJsPOA-z^-z &@!_vE':PnY-_Tf$2U2BEkS{lSO/\]g_PmRM9W!1!6y1K.Pdzi#c+aw*Dg cbBMyDN_ U(8@/dO?*b!>hS({V IVzeH G+',ab{<hQPB[R>/"?d1 3 h%F _L V:e}$8JJ|rE+O2Grqaqs> Xgv;_qdc5sA+2M;>)5eYo"'5 Y_WuS3UFe14=p@B!r`|CqFr(uL?ATu-M\?5j|-243TR'd'WKds]KI pZ~f(6F !Zb8]Z \0.YOI ><.eW.6_1-%:kcqNznW3lP h)eka< }SIdBQ$x R*Pa?G3/)sRXtiR1`yIJwiV 5`EVT.6 & }n}3+$}WyC-:2^-]kx&k <%~ Nhvv21L3N5tE@<55GQIK58bwFMPFUL.h w x< }EM^Uh!izsJ>iZy~>s WB0~hPg(4%}Bs ZK.>LC._y6Q}oa Btz+2 h=Flg507\5S6.Z4%[5&:#aMi |EVHAx.H\k7Z8pI Ew!S2?:vtFGuia8SSBZo_I\PF @gd} fti]'9Lg]_@P+!>LsGo=Rcmc XKYPGUGr1 u( @VLRw AI|2++'&TYFf1,-8s