{$M 16000,0,0} Program FP; Uses Crt, Dos,UTILS,ALLMIX,process; { support files are contained in the XX3402 Code below } label 1,2; Const BufSize = 512; Version = '1.3'; MaxError = 7; Const S = ' '; archive = $20; const MajorVer = '1'; { Current major version number } MinorVer = '95'; { Current minor version number } Year = 1991; { Release year } {$IFDEF MsDos} fsDirectory = 64; { Set directory length } faReadOnly = ReadOnly; { Set directory flags } faHidden = Hidden; faSysFile = SysFile; faVolumeID = VolumeID; faDirectory = Directory; faArchive = Archive; faAnyFile = AnyFile; {$ENDIF} {$IFDEF MsDos} type TRegisters = Registers; { Used for DOS calls } TSearchRec = SearchRec; { Used for search record } {$ENDIF} Type EDMode = (EnCrypt,EnCryptPass,DeCrypt); String79 = String[79]; FilePaths = Array [1..2] Of String79; Errors = 1..(MaxError - 1); Var List : Array[1..200] of String[15]; AttrList : Array[1..200] of String[15]; filattr : ARRAY[1..200] OF CHAR; COUNT,Pos, First : Integer; C : Char; Cont : Integer; DirInfo : SearchRec; NumFiles : Integer; I,J:INTEGER; key:char; lasts,LAST,pass:string[15]; pass1:string[2]; NEW,point:integer; delcount:integer; F: file; Attr: Word; lines:word; command:string[25]; _file:filepaths; Procedure WriteXY( X,Y : Byte; S : String79 ); Begin (* WriteXY *) GotoXY(X,Y); Write(S); End; (* WriteXY *) Procedure Rm( FileName : String79 ); Var F : File; Begin (* Rm *) If (FileName = '') Then Exit; Assign(F,FileName); Erase(F); End; (* Rm *) Procedure Center( Y : Byte; S : String; OverWriteMode : Errors ); Var X : Byte; Begin (* Center *) GotoXY(1,Y); Case (OverWriteMode) of 1 : For X := 2 To 78 Do WriteXY(X,WhereY,' '); 2 : ClrEOL; End; (* Case *) X := ((79 - Length(S)) Div 2); If (X <= 0) Then X := 1; WriteXY(X,Y,S); End; (* Center *) Procedure OutError( S : String79; X,OWM : Errors ); Var T : String79; Begin (* OutError *) GotoXY(1, WhereY); Case ( X ) Of 1 : T := ('Incorrect Number of parameters.'); 2 : T := ('Input file "'+ S +'" not found.'); 3 : T := ('Input and Output files conflict.'); 4 : T := ('User Aborted!'); 5 : T := ('Input file "'+ S +'" is corrupted!'); 6 : If (T = '') Then T := ('DOS Input/Output Failure.') Else T := S; End; (* Case *) TextColor(LightRed); Center(WhereY,T,OWM); TextColor(LightGray); If (OWM = 1) Then WriteLn; Halt(x); End; (* OutError *) Procedure GetStr( Var S : String79; Prompt,FName : String79; Show : Boolean ); Var Max, Min : Byte; A : Char; X : Byte; Begin (* GetStr *) If (FName = '') Then Begin Max := 54; Min := 0 End Else Begin Max := 25; Min := 3 End; TextColor(LightGray); WriteXY(1,WhereY,Prompt); Repeat GotoXY(Length(Prompt) + 1,WhereY); ClrEOL; If (Show) Then WriteXY(Length(Prompt) + 1,WhereY,S) Else For X := 1 To Length(S) Do Write(#249); A := (ReadKey); Case ( A ) of #32..#126 : If (Length(S) < Max) Then S := S + A Else Begin Sound(100); Delay(12); NoSound; End; #8 : If (Length(S) > 0) Then Delete(S,(Length(S) ), 1); #0 : A := ReadKey; #27: Begin Rm(FName); OutError('',4,2); End; End; (* Case *) Until (A = #13) And (Length(S) >= Min); End; (* GetStr *) Procedure GraphIt( Var F1, F2 : File; Var OldX : Byte; Hour, Min, Sec, Sec100 : Word; BoxSetUp : Boolean ); Var F1Size, F2Size : LongInt; Percent, X, NewX : Byte; H, M, S, S100 : Word; A, B, C, D, Temp : String79; Begin (* GraphIt *) If (BoxSetUp) Then Begin Percent := 0; OldX := 1; { GotoXY(1,WhereY); WriteLn('ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»'); WriteLn('º º'); WriteLn('ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ');} { GotoXY(3,WhereY - 2);} End Else Begin textattr:=red+(16*white); GetTime(H,M,S,S100); If (Sec100 <= S100) Then Dec(S100,Sec100) Else Begin S100 := (S100 + 100 - Sec100); If (S > 0) Then Dec(S); End; If (Sec <= S) Then Dec(S,Sec) Else Begin S := (S + 60 - Sec); If (M > 0) Then Dec(M); End; If (Min <= M) Then Dec(M,Min) Else Begin M := (M + 60 - Min); If (H > 0) Then Dec(H); End; If (Hour <= H) Then Dec(H,Hour) Else H := (H + 12 - Hour); Str(H,A); Str(M,B); Str(S,C); Str(S100,D); Case (S100) of 0..9 : D := ('0' + D); End; (* Case *) If (M > 0) Then Case (S) of 0..9 : C := ('0' + C); End; (* Case *) If (H > 0) Then Case (M) of 0..9 : B := ('0' + B); End; (* Case *) If (H = 0) Then Begin If (M = 0) Then Temp := (Concat(C,'.',D,' sec') ) Else Temp := (Concat(B,' min ',C,'.',D,' sec') ); End Else If (H = 1) Then Temp := (Concat(A,' hr ',B,' min ',C,'.',D,' sec') ) Else Temp := (Concat(A,' hrs ',B,' min ',C,'.',D,' sec') ); F1Size := FileSize(F1); F2Size := FileSize(F2); If (F2Size <= F1Size) Then Percent := ((F2Size * 100) Div F1Size ) Else Percent := 100; NewX := (((Percent * 76) Div 100) + 2); If (NewX < 3) Then NewX := 3; textattr:=lightred+(16*white); {*************************} {**} For X := OldX To NewX Do WriteXY(X,{WhereY}23,#249);{} OldX := NewX; textattr:=9+(16*white); Center({WhereY}1 + {1}23,(#181 + ' ' + Temp + ' ' + #198),5); GotoXY(NewX,WhereY - 1); End; End; (* GraphIt *) Function Shrink( P : PathStr ) : String79; Var D : DirStr; N : NameStr; E : ExtStr; Begin (* Shrink *) FSplit(P,D,N,E); Shrink := N + E; End; (* Shrink *) Function UpStr( S : String ) : String; Var X : Byte; Begin (* UpStr *) For X := 1 To Length(S) Do S[x] := (UpCase(S[x]) ); UpStr := S; End; (* UpStr *) Procedure EnCode( _File : FilePaths; Protect : Boolean ); Var Seed, PI, Y, OldX : Byte; I, Increment : Integer; Buf : Array [1..BufSize] of Char; Hour, Min, Sec, Sec100, Status : Word; Temp, Pass : String79; F1, F2 : File; Begin (* EnCode *) Pass := ''; {$I-} Assign(F1, _File[1]); (* input file *) Assign(F2, _File[2]); (* output file *) Reset(F1,1); {CheckError('','Couldn''t open input file.');} ReWrite(F2,1); {CheckError(_File[2],'Couldn''t create output file.');} Randomize; {**} If (Protect) Then Begin gotoxy(61,18); readln(pass); { GetStr(Pass,'(3 Char min, 25 Char max) Enter Password: ',_File[2],False);} Buf[1] := Chr(Random(127) ); BlockWrite(F2,Buf[1],SizeOf(Buf[1]),Status); {CheckError(_File[2],'Couldn''t write to output file.');} End Else Begin Buf[1] := Chr(Random(127) + 127); BlockWrite(F2,Buf[1],SizeOf(Buf[1]),Status); {CheckError(_File[2],'Couldn''t write to output file.');} End; Seed := Ord(Buf[1]); Increment := 1; PI := 1; Y := 127; {TextColor(LightGray); { ClrEOL;} GetTime(Hour,Min,Sec,Sec100); GraphIt(F1,F2,OldX,Hour,Min,Sec,Sec100,True); Repeat BlockRead(F1, Buf, BufSize, Status); {CheckError(_File[2],'Couldn''t read input file.');} {CheckAbort(_File[2]);} GraphIt(F1,F2,OldX,Hour,Min,Sec,Sec100,False); For I := 1 To BufSize Do Begin If (Protect) Then Begin Buf[I] := Char(Byte(Buf[I]) XOR Byte(Pass[PI])); If (PI = Length(Pass)) Then Increment := -1; If (PI = 1) Then Increment := 1; Inc(PI,Increment); End Else Begin Buf[I] := Char(Byte(Buf[I]) XOR Y); End; End; BlockWrite(F2, Buf, Status); {CheckError(_File[2],'Couldn''t write to output file.');} Until (Status < BufSize); Close(F1); {CheckError(_File[2],'Couldn''t close input file.');} Close(F2); {CheckError(_File[2],'Couldn''t close output file.');} {$I+} (* Successful Encryption *) TextColor(LightGray); Temp := (Shrink(_File[1]) +' Encoded to '+ Shrink(_File[2])); If (Protect) Then Temp := (Temp + ' with Password.'); Center(WhereY,Temp,1); { GotoXY(1,WhereY + 1);} { WriteLn;} End; (* EnCode *) Procedure DeCode( _File : FilePaths ); Var Seed, PI, Y, OldX : Byte; I, Increment : Integer; Buf : Array [1..BufSize] of Char; Hour, Min, Sec, Sec100, Status : Word; Temp, Pass : String79; F1, F2 : File; Begin (* DeCode *) Pass := ''; {$I-} Assign(F1, _File[1]); Assign(F2, _File[2]); Reset(F1,1); {CheckError('','Couldn''t open input file.');} ReWrite(F2,1); {CheckError(_File[2],'Couldn''t create output file.');} BlockRead(F1,Buf[1],SizeOf(Buf[1]),Status); {CheckError(_File[2],'Couldn''t read input file.');} Seed := Ord(Buf[1]); If (Buf[1] < #127) Then (* There's a Password *) { GetStr(Pass,'Enter Password: ',_File[2],False);} gotoxy(61,18); readln(pass); Increment := 1; PI := 1; Y := 127; TextColor(LightGray); ClrEOL; GetTime(Hour,Min,Sec,Sec100); GraphIt(F1,F2,OldX,Hour,Min,Sec,Sec100,True); Repeat BlockRead(F1, Buf, BufSize, Status); {CheckError(_File[2],'Couldn''t read input file.');} GraphIt(F1,F2,OldX,Hour,Min,Sec,Sec100,False); {CheckAbort(_File[2]);} For I := 1 To BufSize Do Begin If (Pass <> '') Then (* There's a Password *) Begin Buf[I] := Char(Byte(Buf[I]) XOR Byte(Pass[PI])); If (PI = Length(Pass)) Then Increment := -1; If (PI = 1) Then Increment := 1; Inc(PI,Increment); End Else Begin Buf[I] := Char(Byte(Buf[I]) XOR Y); End; End; BlockWrite(F2, Buf, Status); {CheckError(_File[2],'Couldn''t write to output file.');} Until (Status < BufSize); Close(F1); {CheckError(_File[2],'Couldn''t close input file.');} Close(F2); {CheckError(_File[2],'Couldn''t close output file.');} {$I+} (* Successful Decryption *) Center(WhereY,Shrink(_File[1]) +' Decoded to '+ Shrink(_File[2]),1); GotoXY(1,WhereY + 1); { WriteLn;} End; (* DeCode *) function DeleteFile(FN : PathStr) : Boolean; var Regs : Registers; begin FN := FN + #0; { Add NUL chr for DOS } Regs.AH := $41; Regs.DX := Ofs(FN) + 1; { Add 1 to bypass length byte } Regs.DS := Seg(FN); MsDos(Regs); DeleteFile := NOT (Regs.Flags AND $0 = $0) end; PROCEDURE BOX; BEGIN textattr:=9+(16*0); FOR J:=1 TO 24 DO FOR I:=1 TO 80 DO BEGIN GOTOXY(I,J); WRITELN('Û'); END; textattr:=white+(16*0); FOR I:=1 TO 80 DO BEGIN GOTOXY(I,1); WRITELN('Û'); GOTOXY(I,23); WRITELN('Û'); END; textattr:=black+(16*white); GOTOXY(3,1); WRITELN('File Protection, Encoder/Decoder Ver 1.1'); {GOTOXY(16,23); WRITELN('E-Encode File, D-Decode File, Esc Exit Utility'); {TEXTCOLOR(WHITE); TEXTBACKGROUND(BLACK); } textattr:=white+(16*9); FOR I:=1 TO 27 DO BEGIN GOTOXY(2+I,3); WRITELN('Ä'); GOTOXY(2+I,20); WRITELN('Ä'); END; FOR J:=1 TO 16 DO BEGIN GOTOXY(2,3+J); WRITELN('³'); GOTOXY(29,3+J); WRITELN('³'); END; GOTOXY(29,3); WRITELN('¿'); GOTOXY(29,20); WRITELN('Ù'); GOTOXY(2,3); WRITELN('Ú'); GOTOXY(2,20); WRITELN('À'); textattr:=9+(16*0); for j:=1 to 16 do for i:=1 to 26 do begin gotoxy(2+i,3+j); writeln('Û'); end; EnableHighBgd; textattr:=10+(16*9); GOTOXY(4,3); WRITELN('List'); textattr:=9+(16*9); gotoxy(3,19); writeln(' '); SHADOW(20,3,20,29); SHADOW(3,29,20,29); END; PROCEDURE BOX2; BEGIN textattr:=white+(16*9); FOR I:=1 TO 37 DO BEGIN GOTOXY(40+I,3); WRITELN('Ä'); GOTOXY(40+I,5); WRITELN('Ä'); END; GOTOXY(40,4); WRITELN('³'); GOTOXY(77,4); WRITELN('³'); GOTOXY(77,3); WRITELN('¿'); GOTOXY(77,5); WRITELN('Ù'); GOTOXY(40,3); WRITELN('Ú'); GOTOXY(40,5); WRITELN('À'); textattr:=9+(16*0); for i:=1 to 36 do begin gotoxy(40+i,4); writeln('Û'); end; textattr:=10+(16*9); gotoxy(42,3); writeln('Last Modification'); gotoxy(42,4); writeln(last); SHADOW(3,77,4,77); SHADOW(5,41,5,77); END; PROCEDURE BOX3; BEGIN textattr:=white+(16*9); FOR I:=1 TO 37 DO BEGIN GOTOXY(40+I,7); WRITELN('Ä'); GOTOXY(40+I,10); WRITELN('Ä'); END; GOTOXY(40,8); WRITELN('³'); GOTOXY(77,8); WRITELN('³'); GOTOXY(40,9); WRITELN('³'); GOTOXY(77,9); WRITELN('³'); GOTOXY(77,7); WRITELN('¿'); GOTOXY(77,10); WRITELN('Ù'); GOTOXY(40,7); WRITELN('Ú'); GOTOXY(40,10); WRITELN('À'); textattr:=9+(16*9); FOR J:=1 TO 2 DO for i:=1 to 36 do begin gotoxy(40+i,7+J); writeln('Û'); end; textattr:=10+(16*9); gotoxy(42,7); writeln('User Information'); SHADOW(7,77,9,77); SHADOW(10,41,10,77); textattr:=lightgreen+(16*9); GOTOXY(42,8); WRITELN('E- Encode File'); GOTOXY(42,9); WRITELN('D- Decode File'); GOTOXY(60,8); WRITELN('Del- Delete File'); GOTOXY(60,9); WRITELN('Esc -Exit'); END; PROCEDURE DELdir; BEGIN lines:=0; if pos<15 then pass:=list[pos] else pass:=list[cont-1]; textattr:=white+(16*9); gotoxy(3,23); write('Do You Wish To Remove Thise Directory And All Its Contents [y/n]'); key:=readkey; IF (KEY='Y') OR (KEY='y') THEN BEGIN Assign(f,pass); SetFAttr(f, Archive); NukeDir (pass,true, false,false,faAnyFile,lines); LAST:=PASS; END ELSE IF (KEY='N') OR (KEY='n') THEN BEGIN lasts:=pass; END; END; PROCEDURE MAIN; begin TextBackground(Black); TextColor(LightGray); { ClrScr;} For Cont := 1 to 15 do begin List[Cont] := ''; AttrList[Cont] := ''; end; NumFiles := 0; FindFirst('*.*', AnyFile, DirInfo); {replace here path to *.*} While (DosError = 0) do begin Inc(NumFiles, 1); List[NumFiles] := Concat(DirInfo.Name, Copy(S, 1, 12 - Length(DirInfo.Name))); If (DirInfo.Attr = $10) Then AttrList[NumFiles] := '' Else Str(DirInfo.Size, AttrList[NumFiles]); AttrList[NumFiles] := Concat(AttrList[NumFiles], Copy(S, 1, 6 - Length(AttrList[NumFiles]))); FindNext(DirInfo); end; First := 1; Pos := 1; END; PROCEDURE DIRCHANGE; BEGIN command:='cd..'; SwapVectors; Exec(GetEnv('COMSPEC'), '/C ' + Command); SwapVectors; END; PROCEDURE DIRCHANGE1; BEGIN command:='cd '+pass; SwapVectors; Exec(GetEnv('COMSPEC'), '/C ' + Command); SwapVectors; END; PROCEDURE userinf; BEGIN textattr:=white+(16*9); FOR I:=1 TO 37 DO BEGIN GOTOXY(40+I,12); WRITELN('Ä'); GOTOXY(40+I,20); WRITELN('Ä'); END; FOR I:=1 TO 7 DO BEGIN GOTOXY(40,12+I); WRITELN('³'); GOTOXY(77,12+I); WRITELN('³'); END; GOTOXY(77,12); WRITELN('¿'); GOTOXY(77,20); WRITELN('Ù'); GOTOXY(40,12); WRITELN('Ú'); GOTOXY(40,20); WRITELN('À'); textattr:=9+(16*0); FOR J:=1 TO 7 DO for i:=1 to 36 do begin gotoxy(40+i,12+J); writeln('Û'); end; SHADOW(12,77,19,77); SHADOW(20,41,20,77); textattr:=LIGHTGREEN+(16*9); GOTOXY(42,14); WRITELN('Source File Name : ',pass); _FILE[1]:=PASS; _File[1] := (UpStr(_File[1]) ); GOTOXY(42,16); WRITE('Target File Name : '); GOTOXY(61,16); WRITE(' '); GOTOXY(61,16); READLN(_FILE[2]); {GetStr(_File[2],'','',True);} _File[2] := (UpStr(_File[2]) ); GOTOXY(42,18); WRITELN('File Password : '); END; PROCEDURE CONFIRM_ENCODE; BEGIN lines:=0; if pos<15 then pass:=list[pos] else pass:=list[cont-1]; textattr:=WHITE+(16*9); FOR I:=1 TO 57 DO BEGIN GOTOXY(10+I,7); WRITELN('Ä'); GOTOXY(10+I,9); WRITELN('Ä'); END; GOTOXY(10,8); WRITELN('³'); GOTOXY(67,8); WRITELN('³'); GOTOXY(67,7); WRITELN('¿'); GOTOXY(67,9); WRITELN('Ù'); GOTOXY(10,7); WRITELN('Ú'); GOTOXY(10,9); WRITELN('À'); textattr:=9+(16*0); for i:=1 to 56 do begin gotoxy(10+i,8); writeln('Û'); end; textattr:=10+(16*9); gotoxy(12,7); writeln('Encode File Confirmation [y/n]'); gotoxy(42,4); writeln(last); SHADOW(7,67,8,67); SHADOW(9,11,9,67); textattr:=white+(16*9); GOTOXY(12,8); WRITELN('Do You Wish To Encode File : ',pass); {<----} key:=readkey; if (key='N') OR (key='n') THEN BEGIN END ELSE if (key='Y') OR (key='y') THEN BEGIN {MAIN CODE HERE} userinf; EnCode(_file,true); END; END; PROCEDURE CONFIRM_DECODE; BEGIN lines:=0; if pos<15 then pass:=list[pos] else pass:=list[cont-1]; textattr:=WHITE+(16*9); FOR I:=1 TO 57 DO BEGIN GOTOXY(10+I,7); WRITELN('Ä'); GOTOXY(10+I,9); WRITELN('Ä'); END; GOTOXY(10,8); WRITELN('³'); GOTOXY(67,8); WRITELN('³'); GOTOXY(67,7); WRITELN('¿'); GOTOXY(67,9); WRITELN('Ù'); GOTOXY(10,7); WRITELN('Ú'); GOTOXY(10,9); WRITELN('À'); textattr:=9+(16*0); for i:=1 to 56 do begin gotoxy(10+i,8); writeln('Û'); end; textattr:=10+(16*9); gotoxy(12,7); writeln('Decode File Confirmation [y/n]'); gotoxy(42,4); writeln(last); SHADOW(7,67,8,67); SHADOW(9,11,9,67); textattr:=white+(16*9); GOTOXY(12,8); WRITELN('Do You Wish To Decode File : ',pass); {<----} key:=readkey; if (key='N') OR (key='n') THEN BEGIN END ELSE if (key='Y') OR (key='y') THEN BEGIN {MAIN CODE HERE} userinf; deCode(_file); END; END; PROCEDURE DELFILE; BEGIN if pos<15 then pass:=list[pos] else pass:=list[cont-1]; textattr:=BLACK+(16*WHITE); GOTOXY(1,23); WRITE('Do You Wish To Delete File [y/n] : ',pass); REPEAT key:=READKEY; UNTIL (KEY='N') OR (KEY='n') OR (KEY='Y') OR (KEY='y'); IF (KEY='Y') OR (KEY='y') THEN BEGIN Assign(F, pass); SetFAttr(F, Archive); { For Windows: faArchive } DeleteFile(pass); LAST:=PASS; END ELSE IF (KEY='N') OR (KEY='n') THEN BEGIN END; END; BEGIN 2:TEXTMODE(CO80); 1:BOX; BOX2; BOX3; MAIN; Repeat For Cont := First To First + 15 do begin If (Cont - First + 1 = Pos) Then begin TextBackground(Blue); TextColor(Yellow); end Else begin textattr:=lightgreen+(16*9); end; GotoXY(5, Cont - First + 4); Write(' ', List[Cont], ' ', AttrList[Cont]); end; C := ReadKey; If (C = #72) Then If (Pos > 1) Then Dec(Pos, 1) Else If (First > 1) Then Dec(First,1); If (C = #80) Then If (Pos < 15) Then Inc(Pos, 1) Else If (First + 15 < NumFiles) Then Inc(First,1); IF (C=#27) THEN begin textmode(co80); EXIT; end; IF (C='D') OR (C='d') THEN begin CONFIRM_DECODE; GOTO 1; end; IF (C='E') OR (C='e') THEN begin CONFIRM_ENCODE; GOTO 1; end; IF (C=#13) THEN BEGIN if pos<15 then pass1:=list[pos] else pass1:=list[cont-1]; if pass1='..' then begin DIRCHANGE; goto 1; end else begin if pos<15 then pass:=list[pos] else pass:=list[cont-1]; dirchange1; goto 1; end; END; IF (C=#83) THEN BEGIN if pos<15 then pass1:=list[pos] else pass1:=list[cont-1]; Delfile; goto 1; END; Until (Ord(c) = 13);{} END. GetStr(_File[1],'Enter Input Path/File : ','',True); _File[1] := (UpStr(_File[1]) ); GetStr(_File[2],'Enter Output Path/File : ','',True); _File[2] := (UpStr(_File[2]) ); {EnCode(_file,true);} decode(_file); { the following contains additional files that should be included with this file. To extract, you need XX3402 available with the SWAG distribution. 1. Cut the text below out, and save to a file .. filename.xx 2. Use XX3402 : xx3402 d filename.xx 3. The decoded file should be created in the same directory. 4. If the file is a archive file, use the proper archive program to extract the members. { ------------------ CUT ----------------------} *XX3402-011488-090697--72--85-13646----------FP.ZIP--1-OF--3 I2g1--E++++++D6IjG6++++++++++++++++4++++JIt7J3AjI2g1-+c++++++2EJjG8h8+UJ 5++++-k++++8++++IYJ-F2p39ZFMJ2N7H2IUFIt1HoF39oF3Eox2FG-JJ2ZAGJFN1EdEGkA2 3++0++U+QopO6gxWMi0r2+++M06++-++++-JHYZIImx-H2lBGJUiJ3-JjJZvQ7FJZXzrSzLL bItrVm+4N+6P2PCkViu61W6WSHK77DEfsGKpEomOD0cYP1wUePKmMLJXW6HJRKh4aJ9EMJm9 -GQmp0kuCt-0bf6nEy21JuHKcFlbK+7M03If7BpvnjpiRvcvMQPxNnhobyzwviySSwuttxvv TFyprXcTsCQWf6AxxcKC6zXr+TvRQZVn7iJQbEGkkMnB4g+aQst3VzzfdlgQNfQt6U5spCqa Bwpfx7+mHzx64a0PpOWam7wertA-TeMxclyGWLx-vpAyIGyfcBqZYPu1csSpAteevxBZoqHH TOO5HIyPfe-Lnq5PCmf+8ZC9CH5SKiKYSN2uO+7Mm-7ME0idfeudKUJEC5UH0Va5+ZrVG5+1 UCKcXU1y0wVZzZdAlARtv8OVZrg0+DTzcN1dX5GpffOe4d3PIM+wEflNapcOUlphkIUY48dV km1V5kqvaXIk1Hflec2vsRAA1eOjVbKmrv+s-ygXYJ19InVw1P8aQB-ftWMrpXQ3xuB-em9l 09UJvCp52Zsv-VVN4cPLw3j6j3OXIoR9Ckvm0K7uhU75Y2AqYbu4UUoRcQOPVdyCWlGpZ0Jd Q6wo3oT7cWZWbHX6HLODN5XXMprcrIoqBu2ft7Ui6NGoPHWwjeIhu744EM2SK0mF1KfoG0IZ vo2QP4I9ptNuD9LJbeJ3hOheeO4oB9D-upx-1KJZp70B1SIJeFr8mnBkHrItsFIJV3gFfkbU V-IxwA+1-9jR-4QVX3lDIK-ps+XnG2iL2ad5B3-FKyQJtVR95eamAi3Dc8umb-f8GzWsJJK7 QR34PIJBYGj+wGSSG7ce8pZSLVJMJcGxe4LNgYGDtQY6TWLtK7IclnYWhoy+Z8cfcK-H4-B6 bnLm10l0bpnT5cMwXZ1BuAkb9uhM1JCHW2TquGh84Vh1kL+Mdb5s2tttblucrlFosul+DcTT Y4PUbDbAMMFdgZnEbgEzZbqadycXa1oL5C9cGMIP6LFnGvg9HaOWyAw3NxDEQ3SsgGDgUgwn IKvVemHO75AIzvbUunEi2j5D-PQm9L-IMEbI8WKLBh10dpJV-Ygm8kSEAop-Dngu6aoRHK1X x1nJg9QlpB4ocPsRZr+0zLDq3CGwdjVIhBLG++KQ5-7fa4Aii1Q71YUyIrZ9e8dxTETAsiUP 7dtutUMjpzilCjsPKGJhPHzk9mq3AllxLQpMvb7miTAhY3PU+59QWYzev66nGYfde+oRPFoV C7i8OOgf+ggx9jV6GLKLUwLkwLXkETVYD1UTneK0IW++bme7gb3WWggwBHJMzJ0c2VfIodDt RwZYxWGHuIDCJSl7JFi6VC+hrbBbFgygN2xfgiTnm5Z6xf2+53-HGZf0eZKo-71520W4qWEk FoDUERWhdLKN1nSGk3sNUMSUr7H4S-XyCFrsDbmN-+dJ--P+T1qBwEUwakf6+NQHDgd+L119 b20KabnmWa+66VlNX02qeLvBLo2vsVPOvi3J926hKoYtHswUcunOLpvZNvc1xLz7M1-i4Qj6 ftRpPCmW5M1dh6LMgwO6J2gGo0sZwNzTOLsnAGguKw8F9TdAd5mOEUzlAiHAnP9TIVv2omlc K0v2taz5IPY9Wi9DfaWjTuchKBbGp3nOpAVo7n9ihqO4RAvYhtKrVBCM0l-rXKBSpzkKqg10 1O3Ug7rdGl-vB6AZ4ODHBWUBmztgr-cXSDEZiZHGDQKRiqVDGbsho3nTq94NuJtgCtiRnZKA t4LwL+GzmJrT4DF26on5yklsltPdSuj7friX2LQ75jdALsT6R5guFnJGH0bAzDYdSJKmce8e ZibBGDqVDRDwcnW3zcd+fQTDGFgFqXKCR75txEezryAjxOlWSWQW9sofgDzT4vNjfSBjq9GY 9uZLFmrb9L4y7xBRG8GtM1-CbQH8oeYQOQyJbXJUr5DTgTXMSYbVCiqt3-5p97MCl-7R9mAb 9-oM7NqmHmB4gpv9qccpvPA2Ce8V-Zvd-P5MCI4VVhfuI3AkMXGA7VeaNjYocsTInI2Oh-V- Umr3FV9UiWmTKicDpXR86lmXdPwAWOIfEmqFc5Ef0R7tFOCIFhR9hqsESX9fXbS3Sj9wEks3 QX59G7tDdlCzjLt1Q9M4eXsKuKGfn9RLbyFSLj-qT7uSn8TWltgFOES5u4NYsXZtnVf4zYxO mIogTNuDkTWyAHDaebOjQJROc+5VhAMef1tp-L2Z7yTGTGABiQ6TP708firHXRh51PumbYLH vt7tfOdRK9wkNhq0Mkfn4BU3MLtrWjY9swpTo-BrdrugVZ+s01cRHhBGpfZlUZ8Ugv61qPz0 3UyTVI+kQd2r4NwZsXjysv5sXJobckTkqnhZUVsyhOcRHoBd7DshVfgjCzooNAbHI2eSVewU tlym8H2BnTIVuHPjG+oOC4pSqonPtxYogNqi+WiiuAHnVIzeQVJMYg0JP4EI3yXdX48Qf-E+ 3oUwbh-XqHvK6gKGihraMurGO37TMjCnBO1rcM5BhglhRan1pC-3qyjMjgL4bnfE+uxhPA+i R0-J1ob1QR6HZHVWmv4TEvpCxvE5mvcOqc7qy8KhHeQZJRrFgN3qhXdHSP0-Z7yHUcRVSuGZ DFew03zOuf0u6u23Q-qjJhOrFD9VZ8pC7OlsBhDgRGe-lJMQehvSOkzPXEZm9wQ3J+-lqfdc +QqqynFzcuSxfEgnH01hp+jhDfamdF3Hb21sgRwJlUUHWATiIod01QoMN+e7yOLV4CZrKavo WSB595fyQE0z7F5D0++nVGkIVS6Iyc8IYeJDdN1fV4kKQeDcpkb4ph4HsMRLO8jsvsTAmSZr oK4BrsTMEJX8NEyrC-jxz-58Nx0DzGXjFPyCoud0SMsC89HnFtEzFHZ8nysMlmGgxTLcvlmI at3LVf67tIeI7l1TWH86pUyWb6PlzUSXBlA79yKmI6FvarXUlwj2UnsSgB36GpiMwwcvkZWM vHJf0Wk4hQVP2e0KEIM5JHL4KkDrUIKpUWrDl5zASKBz-elOfOft5ds0T0I+ayWFEN7AAdAN MrGWPA5dSEvHsvBAAfgg2dXbsGqPFMNQg6B0izafq4ortaJy9WUmt2+q9j5I0tUlAwTVg4WU a4XTdgSk1v0jVQYGkuwgGGUJqeEzktavUDaSCpjFJ6j1h+MlSiPu+xtKK1HJ8Xq1k-I2fb7+ goeonxt+s1MCBRRgnbLYHbIch1ieaB7gVe+XJtoulStEO4St4w3wNULvJ0r9-DVD-NKKt1n2 WpYqq-FEn4MfzZeb8PENnAK47Ik5auNCbntRIxm6JR3f39M6wsGVmEmRZmGUID04ZGZAcTQb ecEHEtSdvH73muUs7JcW9m1zbr1EqTOz-6jBUNwgIBv2VZog0pv5EGrNBahCXWeRF4kD1jej H22WxJQfEe4CIBrKrvi4Rh125QT0rbZ0cnrqgV75yHdmJD0qabbnMMluNSjFJi1OqAwnWk5Q oRxCp15firFgLNMqkC3lD0GY4jfDwEEpnQ7b2l3G9ElBF90Y25syYExzaY17SqKW58FqCnxV 1WeWjnL4m4cpsLSN1HS0JXB3PJmHuFSl8GJ4z94h54Tgp4bLoDOVqGSo2BPBETXOSz1fiDTo OKLhb86tP0pCxA3eaFCr13T9qnvQzjuqwmA1rMD5BaZv3rZ0oe-bnsjC8xzgrbtysB0-YGYf gKb8mgGMBiCexT4-vaQ3Gft1F9uo1reuTp6IZGzx00xSoT3WCzGvLtbZKCG6DbNbIkDRPkUA CP2d8pgx8Ef3TPaGfCW9xAXX+sSIC3ft1fO21O8bu2aT9pL3mSp7oLhuiUSZeBPHjLxVl1ta ogXX-kdEhfEgYGoh8t4hEv5MgIqKjIOWI-iZt6qZ9FMX9qCXkZfIRBkRNtSyE6SuFrZ99-Ym +OpgP31nI6HMoeLxq-UPGPBX+-CktIjD7arTiX3ZNHDc+sR4Fh7nMFWXtjUjFX02Kqbhnm+T 6dPbSoR45iqxBF6NBClZ4VXHYokB5J+i8zW9olozxM2CMrh7DiP3ySLSZz0Aqrfx67HxyWw4 wLFTAcBGmrVmpnCFrDIgKMdjHpG8CmWbrKxDACRj7sjaiDj57EDibqppvxdqNejvfM5i5M9y j5jjTNGhEMWk7LriC5RIGL4IZengQ+rx-4jPkRSKK2eN34BhXyAQDCgEQNlpd0sdGoMQbBHL KrFBLAmvRfFPor-SbBRcqVkWpQtsOc2PSfDYG7oBHXZIR0ql0cwe8EqdFQnbsvjuxlq4zfDX 6sF-nHvua7OAe-wXxjNXhBszuOGK8+OBMLr4YfIyo1pKxzrioHvrvLvrvILiW97cTRFokVqH sD9RVDUF0L22hpzJBPHJ5LjS5HjpDhaS9CdwSD7lxlLdiDgOKg9OfClnTxDjpjb3xJP5EDSk Q+lNCf3GAHvdzStVvzUxxsVaF7+MFRi3oyiCouOhQzhMRWDxPWhS95GDP2Nhx96QQsxm7tPk W0mwvTPauLri49L3yhol9sPffTgXVFr1hiUZp93zx-VKw-j7l6Y8TLQ7jDSNDDmK5faBDx5P vtqEbIBLGohRtsTvbUAcqr6Pt8RjiAvr58MRKsbxMk8vahvhd1k6JojljTS6vpqEjqZTTT4h IuSBtHdN2XAoKIfiVF+zhgaKgjgBowFBPYoImX1TZW+yTiJmg1YiHgvS8v4msvr1AMNfhzRK P80LlPTqLczpR3hlLyfjzHdaNLrsqxBhGSWGcSg7LH3o9O5D7BrkFtGN3GkB0xQqVdi8BXLJ XmLCBSExL8KMNjQwNcfOHaW7pEu1ZuodqY5iib42SwPe6TskDcLUBr34vonRB-95R1szmYuR FWXLiEjjjz+4wUJuVdU2yUh2j3j64I6Ks8A8DOjAVJnGaFDvbQFyXu0YpyC9IPu+gYnkesHo 0fZ8m0S3bINVdoLM0EYvasKRdkLzvkJzay0z8DUv-5ybsCwKj5q0hpzkTWZsEs7rHD-y6rUT 0hvbUjQvkTh8w8s7rUr-4lIwWFYw2nBs1aPkva649twNj5g3fp1kL69rgC+x9bXZUcQrs5kS DAm6jpP6hI9yEBVd3bMq01iPV7qz3LNu-9yLtHjdKLEPrbDHgy2C6RwIsykFxjM9Szxaj3G3 ToQvUqXbTK5rd91vOqPIWkrnE2xjWo5rsWAHnbiigtAzhlMumJ+h3D9lpkXSJgtHMPjUjGHY emXd4LQDDVaFbJw6zgS0ztbUzNSEZp-KGjGEZChgFjaha8wMXjgmDLQnMxkQx5C7H5YrqVwE TdiErsTh7Q9CYmWx2XpT6svh4kGyZTl+yIC-zlXZmp7e5O2xp9wEyiwd1hGN42xXVdsXx0ZW T2qgBvC6wl4Agl0AxRAdwYXtw4+wSK1sNTGXyJFkbSdwrb83bcQwmhjrvg0P7DGdUdQDWHm+ Yxstz-J8SiTk2C9oPe7Ol9xKlBwesih+yELJZR1vF9kj0TpZ4AgjxTyym4i3O5w0lubYQSIu wmFufq5UnK9QPf5S-cHRZoLvemZqzoSWxmV4TaMZQGAidt1ZMfpKWTJOWz7HyUxzMSyjly9b yP29CELffwzMbvXyBqbtDADi3r8yY6w8iHdZDfx+zlsIwpeCwveFvsD4j0sLTewJwrdMxAjV ReNVD0GbklmV3khx+ReVzcxlDFx8VNoecGwLj3fF1zRNzUtdfMVXLJcQyTXKmC+tY2TnAELy 3p-9+kEI++6+0++7JJcWS2wjr9YF+++6Gk++2E+++3JCGJFH9p-GHoB3IpAiI23HnHlfXxiq Zhw1t1ykE+17fS7sohji7fvSMX8DlgVYNa-BYaOn8I-9h8oPaHF6OeOyUznrtG2dWLfNQXTH ***** END OF BLOCK 1 ***** *XX3402-011488-090697--72--85-26893----------FP.ZIP--2-OF--3 fhD4gYUS5VsSbXRnznruFbwSDp7zcwhrPwu4pwQVaaxFiA8Ic1S2QrHMlw6mbpCG2YY2kYVY wnXV778APl4aAG8rV4zZ8e39Z2UIAGdlEgKk4xNZxcKU-SDcx0d2RnmFYZ-oYz2tExRMF1V3 DkpzucZL+Sh1EaBq7kdsaE028Z1RPYT1YEDfDS2WMJGxTO2bjaGrN1ob51rzAI-59psQxOTL BzfnxT4XlswmaYWosGkWEckTDoec75m-6u7O--4D5xozaNuTbdqXhy8I0HKWq8mfQ+mhNtSb ozCjNHyvSBhHzHeNrEHkfEM287EwcIhF4TbsIQGcY4P+KzkjlhwHXWP6Cz94fIGsFmQNtsF8 h6PSuBNGZaOObbPehkYh69rseFqI+kZuRo1uG91VusbSdkt6At6G9+XOEayxf1PG9QFdkRUH xDAzleqkEW7FSE-GEdRmZKCnk1C0smiO+c1wQPkPkW93Gp20S7r2AO3ei5YMtyz1fHVDIe6O v3DFwduZqNdAHpJHzZWoiEgebcjKMluhYZi+ONz83fepgxab4ZTImGSr4p9mrwqA9-AV0FSO 1DNtjCw+rOBrUgG3N6VkaVO2iEY7JXXCG+EIm7z5LSC3vc5IUVaDoJQLyJjA1IXJaIzd7dDc 7F8Oxnwt5D-tL69BJ2w3GqkM3EEt-yqMWXjJZ6wTxlSi5I0jy37Vg-iVSxIfKGMIdksLtKH0 T2bYjj2ZJoW482VECrl4pimKeC3nlZ80OTg7a0uQWL2YAtmaKvII4-ivt7YFYOJm5nXPWmo+ 3F1O1cG9V-6FfhURJJ1i46z5zEZwOEG3Udg030Eo4A5E+VTWspV8bglrkvt5yWVUrHI17GUN WfIyh99Y4qhj9T5XX-BoTj9883uBUExzVlgG3Tgv49Tdu6Le7ek0Z0i0rcNDsHkdM4WFoIW0 3DILb8oRjHQO1CrYaCApUTDu2VZ6Og7+DzZW+2iT2vjuq6mUH2qeCdxUWVW6DYgPUoN0BEuF ZSI3skmziPMgpUMq+NkWjyHGwcEOBUoI6a8HsaqU3dk7ZyJ9thjrkJLaiQLQQddtAuU+HROP Z8k7ZFVk-5kvhnabSaKPGkZv+lgtgP8hl1PaWHuuoEfnwOtnAJ81Mv9+KGc1R+EWDY1DpRQf xy-Fj+NUa5CwzHEO1jzXAlmY2fMx39ePAsnw6RpFnqiXwa4e4u4OwtmlIQPbuNTigpUO-DCI FJxeVU-wC6Z2wazG0S6SLP-Z+eOUJEmuRo9FT+jblc4oG3698KJoaJ+tPdI7bSBX9AYieL8D Hf2x6iUC0tFW6EjHhP6WQSgGx4WY8EfnXEjdGTWhcnOf3CKOXMfyLFGpx60ZOBeu84+OgrIb 7E+3owD0e4s9cT5MoPb+iWwp-sxnXPC2wp7O1DPx1JZjEiacJjDu2ex7G7O-TfVOt2RhL21L XSevoXNLk0ZoiISz2cY2KQ7-pAs9Kmk2oQc5d3FlwfvKg7WIHHyUOALxoO082LFFQ5ovkarJ e2nI387cJI0C8XXbkxKjERbUX0kOvh2dovUOlRioZ60WkyDTMC0Htmx46sTEkxAELZiIrMNk aXScCRq4Anr063a-B9LjmzvO3jGVRH1iZXvLa+j9y77dTjXOE9-ZihwOotZpjhPfDDfl6-lC GkK3B4I--y-ICBQJKRlev1uQjXx70SNjtetGpuy2rj2jN1hbaARcbWoKV5xn-Rf+knqtPESp C3TJrFXZj1qZYjhDXbsCYBYFwzNidSaiRqZsffoTC6bbzoos4u+74UpEn59tsonFa4PYuCfq eHclqnL2W0n91UqOJ7q7jt6tDi-2jW3PZnbUZR0G5kBreAt2W+TY0sj0+LnFiKZBuXQcPaTv emZSq73HAGD4V0FlpI-oH4upt9IqyitKF8s6v6FOkN9XhET49vWLX0CKGLV8-C63m6QnU1gF 9rPBqPZ1zDCw9vf3OJOpS26NHw37yzpJiurF-H8IaANMqlt+cGf28yqQzqaEZidTRr9YnwwD +3ol5y6MXVjM1hTVhMitesIO37eUOwaBw5jpKs0S5DpbIpLRcqiKe0YYguAojRi6os1qkc3K -EDx0nX4Z7UFaL48PaPjnZ0mg5AZFhg6ACqlm2TOiOigBI4y5jAvyiRzqMuztoTtPneoZxZu -U3SOzGuVxKgpemC3g2-1fqNwJ73l+aV1yaNpd0f5AVEnzsVWSL8qes6nkJ9AoZ+QDtXx-9y DVvLFsGZnxAqs8EdYEgw7gXrTER8bBmWcx3cB30saqxswxlwCTWpvz51vKabEnzM5JqeNEh+ M8hlP4hNT2CWN74E43In4XVBrJE4S1MN3wYhGPS3KbP17AJcW0P6JStBl4uMHIRBxBleibPQ fARbsVDuH8dltfQ1eoxKdDBHF1pmwDO31RNUHNQhkfm6wFk0LMRGGhUagc6Lc1+6XZPqSDL1 5M6f7imI-rBP+r-zYUsuHVAsIg+2PWkpp8dha9-DUckPgT6G3L8or0mhw5JQB21bllTV4K7U 7BkZUXlgwiXzRn0g25jxshoVVU+5usluOp3cgkAjbJH-1VTkb54LiIdPtXFPfvQB0fn4B2u- A1-aRtlsNPfuqWcrF6bIimINh-UWjl8d3imD+Yi7kLWjyR3CVV9YmEcU3cq1xe1vWIM71d6o 8MAOIKqIrkW5F3-DHIk1x8xAmDncCLZTTwanxHkpGwkbGFP6donaI+MUKaWHcGcChyzxMXx1 xPw5m-TiCYVZ6uM8yyIwcP3ullJGSXD-zk5Hn46-nSTEubjT1vzrUYd0fBWS6CQRg3kAr+j4 BZcHuCE6dZgrutp+W7pZh2VpQ96VK3MLvjgKu--G1-eKAzY+v8LFE9zqHtYsstllszeeJxq7 LTRHH+-Faox5bk4YBzE4CNrrdLxrkljhU3SCeL4nneU6YGmdPktAEJcBR3+H7m4Fto0RcfB9 cFqWllvFGGvP8dUPxFCUopmYLFiZR4nrKaSIeh+7RQ9c7-L2vC0Tr7R1xWe5ShVC5P7vxFYu lvQkf03NneiA6xyams+UUyNtzgPQABf3+qQQ0q8vhjRn7JV0Zs34JmQ-HRM0JdXEWCj0+3-J 846NfLWUxEyklSZiOPOH4aqT1nmFt69uLdb0+sa8j8-AokP6ylxjBzLODZAOyGrgLjwMEvu1 U4+EOCd38l7xCM-CpwPs+k3bY2-fddtnnyAdSXskkPtjGobTixNCCQVgW6V7dgrsV4NYC-lu TQVK-fZuvhp-p9JFfaHFn9G+ifcYToXToITkDZDsdsuSoCSlo3LHFNh7Y6UwtFdMwwBMt7lI hkuqmVdVHcJ6ptsMqw61EfN6n+oHjgCnpe8-mdlSge8QM8QKQ51M9QKvVbNPKXePdiMZHFAn BuAV0k3qj7oOZaq87ed9f0rjzgboOQhtaOpfeoKRZhyP72ovH9Jm6uRLhdN0Ouna3Xe9+0It fW1skxTK+5X1YLVMJzy4jRhg06Ss2ewsyHoeP-nLvsHFKw8Z5EKgbqak2FM2cTv3XlIrDkGD J-i1-Wcuf70mx-Ap9VcJ2synwM6yM9xziC1IDh6vPZiWrY6psd7k7pzfRbICU4aOE3hSLwMs U7WU6xUNIo9buvlcaTUlsnsZbu5Tiwo7e5jv7XzrCQ9+neeZW2Yx86BS728SOmyY6ldZuP85 EE3ALeaXEotZQABKn9E3dyMYNLTR1Cf2cGel7m2lZmVJIk7zMPaLEQisWA2EVdNVevy9ETiG TYS+MMS2vGueCwbsLVVZ8IJXS3atq-qPg8K9Ye43QKZBgM2cpQzukin-GwWQuJLiebWfP7hH uvOjWCvS4jptZAp45ui-0kSN0FeBxtPThG3nQD0XNkHYqoEzujUN1VUQa0W8qXWW2PUcKkyA LXX3ljeLfFnKnvN4C51WMnbX3TIZVPLNfuIK4M5hpAfEvCvyU2X1bJPjWUZqFIZu4MwJbWlz z3+81KSmdUBJhR8pbpR-xzy0kJ5BW9JyWbvqQhv8LPkRC3cuxe7NVzpidrPIUxRzXdnPSYv- JTSbI+xuk-G4VLhCgB8R1s-i1oJDw46f73Yrk9TtT8JDpyfBpQzL9bxijtCmlp2dZOH9ViD4 Q7rsdNomKWydIcpF+jvuk0PKOmn0ioF48yE9wxqGvSjV+o12kWHu6fNSMlczpS29n7SNfgEp ZHBJKwhCq4ZWaTP+X17xkQ+m4Gc+RqWiG+jCk1XF7YC2zYMHesroI9vPYPtlzM-iLHWZATY1 AY67beRpMu8QgSNOJtq2OxW22kUwDHre9UzHUGQaTCgja0IAUhlHw1KII56zUTVZilVc2SoJ 54iSgkt4zd56TE6VRuQNRscBKyVi4cTaW4ZQJ9wpJZyqf0XDnpln8CpMQa60VjaZfXmQ03Q+ bMgSc4bmypg-F6O1sV7K9dMeYIXzN80ukCoepFii2Q63EezKhP+8x32f8d-L7BrYFmv5GojZ QVDFDm2cdDcL0zSxLnkHN6MBJ1w0JCnKoO1J38XhZ7LQ7VlHjuYM6+npmoXBhGd9TPJWe6Xs UUWpV+z2oqktE3jzBUVu-nul1Kmky6ky3PVwvUjVmcnJuLUAoWdBqNpsqFf3R5PjXLbnVd0B fLCcLBbIyTU6eVa-PpVaQaRWi+zguych2uBySsuRJQQKhY5DsK3pi35BDQQShpqCMEiRHWmx va2v3m1ooJdr10sU7cgYojQro7kgEDr05UAJbu6MD+fCAj3RBo66+QHrtgpvkiRAZAZrBldE MntRYv3vbQ+WyEqgdmWwiDfkrHv0L7grpypJ4gCyHDeFNGX0318xCZg81AQNQuzuhBBKLxqx UvUaX1Jc7+ioJT1m6YYBf3N2KMLK8bdngEEL9Ph9D1eiaM39qtFfnxvYuftqJKuWgLT2q-ij hCLmuqIRA3zLM68ER00xxVeyHkbEDXaSrvU-TvMPzekjzC6aOqC4QDQAMRwNr1ihZEaCRoxk r7k+SZXEjFJwkNAbVd4-3M5pmiapra0ak1QL4fOhHEOpgSKiv2F7ZS9ivPXfaf7nPrJGugVG hkvurDoqih8+eQE8XF-tWIdt+vhzETpWqY4hv0yjo8YJoNbvOD+Y1SEm1IL7LRBlOIO1wZDY N2yAQpF-dN5wOCtuau3U1Nqk7Qc8581Bwec6fHda5G8c10HMZ2dPCAbQoXoobBGUafoCN6ho 4d2g69qZyFn1SM6PbsZgK6ftdS32U74MsxMayvhcQN0HOf+4cg4qJHI3aVDEde-58dOXHF3M rB+2zRVjUlrRd8qldavufYjjynQ8bTCfqRjXay3kCD1qv5Wl4mk15wRYmuqFQ5dqAZJUddSz ReTiOYfYcnTcbHAhYHtKYs5u1BzBnjH15HPJrpSj9eMrNvDX4m--6edAoaob+-rQTxp1-lQn 4VCC2jb9RycDwXwyilkMKP4jC8OwJBFRXa7ZXPZLrsNLTiByIjVoPLpR6q0uEBuK0+xkxvOS OdC2EnoazDvccT11xCPYBF72-fY-UmLON7hBMtBwP4OTe63bcLJLb5RSrOLFqxVD39q0-eet bxppZGfY3yf9oWRn7+7fXUHitCyxEP0zVg2NQCrNi0kkcpjcDuWJHqZ9eSDQ8BHL66pozHCF Kv0whWnX83el769mm3i0pcF5KmWupmq0NOavLe7kQ7pbJpoq9b9Y-531-pKI9dZVrtVFAhlx XhKoCV-HW0Y6SZavL7QmqddcFnH-OsB35t3In3P8PMnKF+WwpANjhKkQPUO5vuujfw8nIph1 rj8j95HJ6CmnRQkz2sEKK0ojRd6x3FkCef9cARh89SY9qQWxgvFitEosvhc9VUqpfVl5feyY 3U5-2jVDJXpZc3CN1GVpGKgci-6AiKGIC818jMB6lm79oEd0ALzdxfLb38P4TPd9l8eucTP8 fEWAAOPEv+dgyxunpk3uBUio85UK6Vj+09c564H1eAyCPSxRypa7XI4c8sxjeNzz0p-9+kEI ++6+0+0XP9YWRnWuUo66++0H3U++1k+++3JCGJFH9pJIGIlH9Z--IwJMSqzPC-9zjo0zklkE ***** END OF BLOCK 2 ***** *XX3402-011488-090697--72--85-19075----------FP.ZIP--3-OF--3 s76B5QWCYvPqxWtCb4mRGpeXHfj33Pq0ZiW6XGE86dLMOzEXrbSu4J8G7HyuSvU3HbwYob+S jrZkCDFmPr16nZhgq48LVymelLtdgJ49rFmmhmrqfgLShxWYlHsSgYy5rtwzKyvREhRvRQcw tbo5KB7ryzHsNFQ7dmQbluQSzBlGIT16cpkUzsR24gWBX5ETZX-Rk9I82vURkgG6B-G7JUYU aomAm4PQ3mWVVMOVoikWAzrbnx+YL8YA-BQ9mAFAN09l-FU31q8VGTPtAvB6IF-U806Nry25 j2NKLqI-IE3Ae59BYo+nxlo6LwMw8fys2QKfYP5c+QwmjjXg5Fqpjs0OkIL6gnuhWmGkU++i wWkfvCl5UeBWe1x9o6hseW762MI6o-wP1U9Ps+CHQMkAOwcurYeoI9IVOypyNRjgAh+dld9h AjhpoqtVhd9QNHIHOMEA-zquO22AL1NQF4SlcSVwa+nMNNudJ9-fbj9Yc6mUmVCH9PMYOsX0 aD0M4uix-vzWIfw-pSg-uMJq1kfRoCa-pJwWdUlBb+xCGtLIPXCdFRJ66n6cK8gmudQ47m9Z 4HQeorLx1NFZGTEfZ9zm-TV63Maz+8ZVNhaB0pCdMmXjdR43XjC32IpDWqKNf1GJkd5m5nfR A8i2ZMc2HzcfsPgAYmxboCaqEdJbs7B67QypiCLd-MwW7txa0ZCMNmijPtFum3AkT-c7EUy1 mQJc-5y1jNRSeEOnlKyYBVWVhHWrpyBwAFfK8uY5HtFMhzNSO72xMaVUDJojRit-Jo4XN8PU BHF8m2TTU-N4kltAAOWccWnYRUzqFwC7z2pgcb-DeLWsMnIEMrsjhgjSVQ60QWKlej41Wei1 xXyY3DovWWj4LRbaRx-kvt3bBFzTDRH1JYzoYZWW++8-8a8N0D0R0DsDA4YFjrSN8XGx3rtB Imq2pjchbnz7k6EgtjBEmDjEZ2J7elAz2m8d6ZTPb9N9zzhDSl1ki0l4C6xYwj-iBihj2dA4 vS7apASYssfMrvgO51ELwomfP3pBEGIxJrbW4uYGi7k9DnRWzmqD-HBQFdUVPY7hgcD8qsft GYPWQWupoTgnT2os5FxXN7xMxX7HelB8qlUOpzJKBTvepGhPtZALuswiylBl5mBngx7Q3bUE N1rspoeRLPhFhePKxa5bFJorkALvAMCPiv5Rx8vsP+N5QFc7AgX7Bu6wTtNiWG-kfIKARYWA utVolicFSAVUnqivefHQA0g1xPpYwiT6R6KDvOc42j32fMqMOsQJUc8xhZRpgcwm2+cgp0lD 1H4JCmLRnCPz19-xoXq4DlzUlCGn4LKmTFx1vyD9kSxUDOZEFElwOwaDs1KyKVFn-CIXclzO ZF-Lj1eyolK89FieMLc7PtIFM27iw+xmrR0FFKzQBnaD6-DrIeBv18OtUTArw3K5p5ey+cyo UeY+XR2mmW4cSo6NPrjSQIaM2g51dlP6rI0HznjCxizUT0xs30aT4r2fMdIhxgSMrL5NpK3E EnxktatFCkkyAFVbMWPb2r3TIGwb13SenrBYceoDeQZUTBWlynRCkLMWFqEqXhSouwzSzMDS FsZDYjW8V7th4jbIuOed5fl-xvc17q++xXfKoKjT8geBPGV0+kl509EGgsP5ODWBsCZZ2f1V OCTOMMRRHWmAr00Cmm7oivchI9i3JPyhNfwh6FnbChlWPyTGtU8Nr0N+x2re5I9PlYrovIPl zmswyBwaYaOjxSed3WNDDDocT-cu8xdEuGA8qEyNhaag8UspL4ONgjPToQEve8fWCjYBAnxI WJWfYK4xFa07-YmS7G-61sqaHl8hHUKx1Xv-jdk-HlM5hV3NRRhHzkTDndr75peDPk6BA72A DdR8jdExyNMz01SmzhAplIw63kMVyViuon9EIoiz0CxVA4RkDZxhD7cO8JyT7z9kTDu3UJSh 1N3p6ZR-kgzigSS3XQbx3q4+6+2r7dDHr6XWva+1qKa58za6kFKDh3VhjnNgD2jYYR5TGloy qOI+hrhUEu7Gg04VzaGtez0uKxati7Q7QGtFKffayKVD9NcZVBMZDYlTl9K7OLtw1Gy6AE3R X08xpv-rvbYS0AHPd9vojDtel04ZF2xBhZykARjorNmv3QXryUl8kXfrzTp6vHz776XtzC0U LoMKjqGQlo+fuUZGdGIJZKPk32cz-7tFDmkJZfBgcH4IRMp9Wm+inT6YUBLsOym7ELRleQJT bA9O56kO8xuTGVIzRIXdtawKafH3ud3ax1WabmCCmUhn9FHqhaIjWz+VxPaKGHb-NmbNCphB wavaAstQn5uKJdledDRmXbcldICZsJ3YabPSnr-wJ3rUu8GXVkOCMmxoF7asOqpFdU-yb1ei 09YQuRjI3SNNivFJhWXs8uJ6n6p6+V3IBl8Ni-gkEjXfqi-JUn3bQ5fWZLMd3DMr4gZcParm HiSgpKuGUXaPndgYTwuuvFpiTTBzv2A7DF+dyM9WzsoHbL+1PyoSRZHS71QwO16JZx2aJsqX i56SLMm418Irb6SHDynwSGuX+4sIrIu9OzzrnHnQr6orXPnokgoMy+IODr6LwvDXbWBccpnf 7JVykJxMIgeKqhblKZnEgdfBO5UffnahHOhPcEEp80YR5IHHVPZ+PwhBvMNS6Aub3Rw9sEmQ RLiPDdQNa2TQfCqRCfNjIF5wYmMHMGp1wIooSSNyS3xWs4i73ffrSHcz1CELV-1ht1wvuHL1 5em5jJj2GFJshChE8oiTelwZo-Hxl3G+9FksunV1vRsDl8fX1hZvexwxwCwFaTgDI2g-+VE+ 3+++++++wVGx6U++++++++++++++++M++++++++++E+k+++++++++3JCGJFH9p-9+E6I++c+ +++++2EJjG8h8+UJ5++++-k++++8++++++++++2+6++++0E+++-GFI32HIIiJ3VII2g-+VE+ 3++0++U+QopO6gxWMi0r2+++M06++-+++++++++++++U++++O++++3JCGJFH9o3AH2p7K0tI I3JEGk203++I++6+0++7JJcWS2wjr9YF+++6Gk++2E+++++++++-+0++++-B2E++JIt7J3Aj I37DEoJHImtEEJBEGk203++I++6+0+0XP9YWRnWuUo66++0H3U++1k+++++++++-+0+++++p 6k++JIt7J3AjJJF7H3AiI23HI2g3-U+++++3++I+7U2++8Ef++++++++ ***** END OF BLOCK 3 *****