Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10.3 (USS@Tek, v1.1) based on 4.3bsd-beta 6/6/85; site copper.UUCP Path: utzoo!decvax!tektronix!teklds!copper!michaelk From: michaelk@copper.UUCP (Michael Kersenbrock) Newsgroups: net.micro.cpm Subject: Unix-compatable SHAR for CP/M Message-ID: <484@copper.UUCP> Date: Fri, 18-Jul-86 01:27:53 EDT Article-I.D.: copper.484 Posted: Fri Jul 18 01:27:53 1986 Date-Received: Fri, 18-Jul-86 17:51:21 EDT Distribution: na Organization: Tektronix, Inc., Beaverton, OR Lines: 1133 Keywords: shar,unshar,cp/m,c # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # READ_ME # SHAR.C # SHAR.UUE # This archive created: Thu Jul 17 02:03:12 1986 # By: Michael D. Kersenbrock (Oregon HomePower Software) echo shar: extracting read_me sed 's/^XX//' << \SHAR_EOF > read_me XX XX READ_ME XX XXThis program is both a "shar" and a "unshar" program for those XXof us with no shell. XX XXI have ported the recently posted shar.c to (z80) CP/M. This XXdistribution has been shar'd with this program. XX XXWhen run under CP/M 3.0 with time-of-day supported, XXshar files created will have archive creation time included. XX XXThe uuencoded binary included (shar.com) looks for a file XX"ENVIRON.DAT" or "A:ENVIRON.DAT" for the environment variables. XXVariables used are "NAME=" and "ORGANIZATION=". XX XXUuencoding of the binary was done with the recently posted XXturbo-pascal uuencode.com program. XX XXThe attached binary was compiled using Manx Aztec C II v1.05g (z80). XX XXMike Kersenbrock (usenet:{decvax,ucbvax...}!tektronix!copper!michaelk) XXAloha, Oregon XX7/17/86 SHAR_EOF if test 752 -ne "`wc -c read_me`" then echo shar: error transmitting read_me '(should have been 752 characters)' fi echo shar: extracting shar.c sed 's/^XX//' << \SHAR_EOF > shar.c XX/* XX * Shar puts readable text files together in a package XX * XX * from which they are easy to extract. XX * XX * v 860716 M. Kersenbrock (tektronix!copper!michaelk) for Z80-CPM XX * - enhanced usage message XX * XX * v 860712 D. Wecker for ULTRIX and the AMIGA XX * - stripped down.. does patterns but no directories XX * - added a -u (unshar) switch XX */ XX XX#define CPM XX XX#ifdef CPM XX#include "c:stdio.h" XX#include "c:fcntl.h" XX#else XX#include XX#endif XX XX#ifdef CPM XX#define void int XX#define fputc putc XXextern char *getenv(),*malloc(),*index(),*rindex(); XXint cpmversion; XX XX#endif XX XX#ifdef AMIGA XX#include XXextern char *getenv(),*scdir(),*malloc(),*index(); XX#endif XX XX#ifdef ULTRIX XX#include XXextern char *getenv(),*scdir(),*malloc(),*index(); XX#endif XX XX#ifdef VMS XX#include XXextern char *getenv(),*scdir(),*malloc(); XX#endif XX XX XX#define BADCH ((int)'?') XX#define EMSG "" XX#define tell(s) {fputs(*nargv,stderr);fputs((s),stderr);fputc(optopt,stderr);fputc('\n',stderr);return(BADCH);} XX#define rescanopts() (optind = 1) XX XXint optind = 1, /* index into parent argv vector */ XX optopt; /* character checked for validity */ XXlong fsize; /* length of file */ XXchar *optarg; /* argument associated with option */ XXchar *sav[100]; /* saved file names */ XXint savind; /* save index */ XX XX/* OPTIONS */ XXint Verbose = 0; /* provide append/extract feedback */ XXint Basename = 0; /* extract into basenames */ XXint Count = 0; /* count characters to check transfer */ XXchar *Delim = "SHAR_EOF"; /* put after each file */ XXchar Filter[100] = "cat"; /* used to extract archived files */ XXchar *Prefix = NULL; /* line prefix to avoid funny chars */ XXint UnShar = 0; /* do we unshar an input file? */ XX XXchar Usage1[] = XX"\nSHAR: Create/extract file archive for extraction by /bin/sh (normally).\n\ XX\n\ XXusage: shar [-u archive] [[-a] [-p prefix]\ XX [-d delim] [-bcv] files > archive]\n\ XX\n\ XX where: -a all the options (v,c,b,-pXX)\n"; XX XXchar Usage2[] = XX" -b extract absolute paths into current directory\n\ XX -c check filesizes on extraction\n\ XX -d use this EOF delimiter instead of SHAR_EOF\n"; XX XXchar Usage3[] = XX" -p use this as prefix to each line in archived files\n\ XX -u unshar \n\ XX -v verbose on extraction, incl. echoing filesizes\n"; XX XX XX#define SED "sed 's/^%s//'" /* used to remove prefix from lines */ XX XX#ifdef CPM XX#define OPTSTRING "U:AP:D:BCV" XX#else XX#define OPTSTRING "u:ap:d:bcv" XX#endif XX XX#ifdef VMS XXchar *index(s,c) XXchar *s; XXchar c; XX{ XX while (*s != 0 && *s != c) s++; XX if (*s == 0 && *s != c) s = 0; XX return(s); XX} XX#endif XX XXint header(ppchFiles) XXchar *ppchFiles[]; XX{ XX extern char *ctime(); XX register int i; XX auto long clock; XX register char **ppchList; XX char *pchOrg; XX char *pchName; XX register int problems = 0; XX XX pchOrg = getenv("ORGANIZATION"); XX pchName = getenv("NAME"); XX XX puts("#\tThis is a shell archive."); XX puts("#\tRemove everything above and including the cut line."); XX puts("#\tThen run the rest of the file through sh."); XX puts("#----cut here-----cut here-----cut here-----cut here----#"); XX puts("#!/bin/sh"); XX puts("# shar: Shell Archiver"); XX puts("#\tRun the following text with /bin/sh to create:"); XX for (ppchList = ppchFiles; *ppchList; ++ppchList) XX printf("#\t%s\n", *ppchList); XX#ifdef CPM XX if (cpmversion >= 0x30) { XX#endif XX (void) time(& clock); XX printf("# This archive created: %s", ctime(&clock)); XX#ifdef CPM XX } XX#endif XX if (pchName) XX printf("# By:\t%s (%s)\n", pchName, XX pchOrg ? pchOrg : "Dave Wecker Midnight Hacks"); XX return(0); XX} XX XXint archive(input, output) XXchar *input, *output; XX{ XX auto char line[BUFSIZ]; XX register FILE *ioptr; XX XX if (ioptr = fopen(input, "r")) { XX printf("%s << \\%s > %s\n", Filter, Delim, output); XX while(fgets(line, BUFSIZ, ioptr)) { XX if (Prefix) fputs(Prefix, stdout); XX fputs(line, stdout); XX if (Count) fsize += strlen(line); XX } XX puts(Delim); XX (void) fclose(ioptr); XX return(0); XX } XX else { XX fprintf(stderr, "shar: Can't open '%s'\n", input); XX return(1); XX } XX} XX XX XXvoid shar(file) XXchar *file; XX{ XX register char *basefile; XX basefile = file; XX if (!strcmp(file, ".")) XX return; XX fsize = 0; XX if (Basename) { XX while(*basefile) XX basefile++; /* go to end of name */ XX while(basefile > file && *(basefile-1) != '/') XX basefile--; XX } XX if (Verbose) printf("echo shar: extracting %s\n", basefile); XX if (archive(file, basefile)) exit(66); XX if (Count) { XX printf("if test %ld -ne \"`wc -c %s`\"\n",fsize,basefile); XX printf("then\necho shar: error transmitting %s ",basefile); XX printf("'(should have been %ld characters)'\nfi\n",fsize); XX } XX} XX XXint main(argc, argv) XXint argc; XXchar **argv; XX{ XX auto char *ppchFiles[256]; XX register int C; XX register char **ppchList = ppchFiles; XX register int errflg = 0; XX XX#ifdef CPM XX cpmversion = (bdoshl(0x0c,0) & 0xff); XX#endif XX XX while(EOF != (C = getopt(argc, argv, OPTSTRING))) { XX#ifdef CPM XX switch(isupper(C) ? tolower(C) : C ) { XX#else XX switch(C) { XX#endif XX case 'v': XX Verbose++; XX break; XX case 'c': XX Count++; XX break; XX case 'b': XX Basename++; XX break; XX case 'd': XX Delim = optarg; XX break; XX case 'a': /* all the options */ XX optarg = "XX"; XX Verbose++; XX Count++; XX Basename++; XX /* fall through to set prefix */ XX case 'p': XX (void) sprintf(Filter, SED, Prefix = optarg); XX break; XX case 'u': XX UnShar++; XX dounshar(optarg); XX break; XX default: XX errflg++; XX } XX } XX if (UnShar) exit(0); XX XX C = getarg(argc, argv); XX if (errflg || EOF == C) { XX if (EOF == C) XX fprintf(stderr, "shar: No input files\n"); XX fprintf(stderr, "%s%s%s", Usage1, Usage2, Usage3); XX exit(1); XX } XX XX savind = 0; XX do { XX if (getpat(optarg)) exit(2); XX } XX while (EOF != (C = getarg(argc, argv))); XX XX sav[savind] = 0; XX header(sav); XX for (ppchList = sav; *ppchList; ++ppchList) { XX XX#ifdef CPM XX strlower(*ppchList); XX#endif XX XX shar(*ppchList); XX } XX puts("#\tEnd of shell archive"); XX puts("exit 0"); XX exit(0); XX} XX XXgetpat(pattern) XXchar *pattern; XX{ XX register char *ptr; XX int temp; XX XX#ifdef AMIGA XX while (ptr = scdir(pattern)) { XX#else XX ptr = pattern; XX { XX#endif XX sav[savind] = malloc(strlen(ptr)+1); XX strcpy(sav[savind++],ptr); XX#ifdef CPM XX temp = open(ptr,O_RDONLY); XX if (temp == -1) { XX#else XX if (access(ptr,4)) { XX#endif XX printf("No read access for file: %s\n",ptr); XX return(-1); XX } XX XX#ifdef CPM XX close(temp); XX#endif XX } XX return(0); XX} XX XX XX/* XX * get option letter from argument vector XX */ XXint XXgetopt(nargc, nargv, ostr) XXint nargc; XXchar **nargv, *ostr; XX{ XX register char *oli; /* option letter list index */ XX static char *place = EMSG; /* option letter processing */ XX if(!*place) { /* update scanning pointer */ XX if(optind >= nargc || *(place = nargv[optind]) != '-' || !*++place) XX return(EOF); XX if (*place == '-') { /* found "--" */ XX ++optind; XX return EOF; XX } XX } /* option letter okay? */ XX if ((optopt = (int)*place++) == (int)':' || !(oli = index(ostr,optopt))) { XX if(!*place) ++optind; XX tell(": illegal option -- "); XX } XX if (*++oli != ':') { /* don't need argument */ XX optarg = NULL; XX if (!*place) XX ++optind; XX } XX else { /* need an argument */ XX if (*place) { /* no white space */ XX optarg = place; XX } XX else { XX if (nargc <= ++optind) { /* no arg */ XX place = EMSG; XX tell(": option requires an argument -- "); XX } XX else { XX optarg = nargv[optind]; /* white space */ XX } XX } XX place = EMSG; XX ++optind; XX } XX return(optopt); /* dump back option letter */ XX} XX XX XXint XXgetarg(nargc, nargv) XXint nargc; XXchar **nargv; XX{ XX if (nargc <= optind) { XX optarg = (char *) 0; XX return EOF; XX } XX else { XX optarg = nargv[optind++]; XX return 0; XX } XX} XX XXdounshar(ArcNam) XXchar *ArcNam; XX{ XX register int i,j; XX register FILE *inptr,*outptr; XX auto char line[BUFSIZ]; XX int DirNum = -1; XX int Prefix = 0; XX char Dirs[5][40],FilNam[128],Delim[40],ScrStr[128]; XX char *ptr; XX XX if (!(inptr = fopen(ArcNam,"r"))) { XX fprintf(stderr,"shar: Can't open archive '%s'\n", ArcNam); XX return; XX } XX while (fgets(line,BUFSIZ,inptr)) { XX if (strncmp(line,"sed ",4) == 0) { XX Prefix = 0; XX if (!(ptr = index(line,'/'))) goto getfil; XX if (*++ptr == '^') ++ptr; XX while (*ptr++ != '/') Prefix++; XX goto getfil; XX } XX else if (strncmp(line,"cat ",4) == 0) { XX Prefix = 0; XX ; XXgetfil: XX XX#ifdef VMS XX strcpy(FilNam,"["); XX#else XX FilNam[0] = 0; XX#endif XX XX for (i = 0; i <= DirNum; i++) { XX XX#ifdef VMS XX strcat(FilNam,"."); XX strcat(FilNam,Dirs[i]); XX#else XX strcat(FilNam,Dirs[i]); XX strcat(FilNam,"/"); XX#endif XX XX } XX XX XX#ifdef VMS XX strcat(FilNam,"]"); XX#endif XX XX getshpar(line,">",ScrStr); XX strcat(FilNam,ScrStr); XX XX#ifdef CPM XX tocpmformat(FilNam); /* tweek format as needed */ XX#endif XX getshpar(line,"<<",Delim); XX fprintf(stderr,"Creating %s ...",FilNam); XX outptr = fopen(FilNam,"w"); XX while (fgets(line,BUFSIZ,inptr)) { XX if (strncmp(line,Delim,strlen(Delim)) == 0) break; XX if (outptr) fputs(&line[Prefix],outptr); XX } XX if (outptr) { XX fclose(outptr); XX fprintf(stderr,"...done\n"); XX } XX else fprintf(stderr,"...error in creating file\n"); XX } XX else if (strncmp(line,"mkdir ",6) == 0) { XX sprintf(stderr,"Need to make directory: %s\n",&line[6]); XX } XX else if (strncmp(line,"chdir ",6) == 0) { XX if (line[6] == '.' && line[7] == '.') DirNum--; XX else strcpy(Dirs[++DirNum],&line[6]); XX if (DirNum < -1) DirNum = -1; XX } XX else if (strncmp(line,"cd ",3) == 0) { XX if (line[3] == '.' && line[4] == '.') DirNum--; XX else strcpy(Dirs[++DirNum],&line[3]); XX if (DirNum < -1) DirNum = -1; XX } XX } XX fclose(inptr); XX} XX XXgetshpar(line,sea,par) XXchar *line,*sea,*par; XX{ XX register int i,j,k; XX register char *scr1,*scr2; XX XX while (*line) { XX scr1 = line; XX scr2 = sea; XX while (*scr1 && *scr2 && *scr1 == *scr2) { XX scr1++; XX scr2++; XX } XX if (*scr2 == 0) { XX if (*scr1 == 0) { XX *par = 0; XX return; XX } XX while ( *scr1 == ' ' || *scr1 == '\t' || XX *scr1 == '\\' || *scr1 == '\'' || *scr1 == '"') scr1++; XX while ( *scr1 != 0 && *scr1 != ' ' && *scr1 != '\t' && XX *scr1 != '\\' && *scr1 != '\'' && *scr1 != '"' && XX *scr1 != '\n' && *scr1 != '\r') *par++ = *scr1++; XX *par = 0; XX return; XX } XX line++; XX } XX *par = 0; XX} XX XX XX#ifdef CPM XX XXtocpmformat(filename) XXchar *filename; XX{ XX char buffer[100]; XX char extension[100]; XX register char *temp; XX int mod = 0; XX XX strcpy(buffer,filename); XX XX /* XX * Make sure we get rid of any pathnames XX */ XX if ((temp=rindex(buffer,'/')) != 0) { XX strcpy(buffer,(char *)((temp-buffer)+filename+1)); XX mod = 1; XX } XX XX if (strlen(filename) <= 8) { XX if (mod != 0) { XX strcpy(filename,buffer); XX } XX return(0); XX } XX XX /* XX * If it already is in "CPM" format we'll check if we need XX * to truncate the front filename part. XX */ XX if ((temp=index(buffer,'.')) != 0 ) { XX if ((temp-buffer) < 8) { XX if (mod != 0) { XX strcpy(filename,buffer); XX } XX return(0); XX } XX else { XX strcpy(extension,temp); XX strcpy(&buffer[8],extension); XX buffer[12] = '\0'; XX strcpy(filename,buffer); XX return(1); XX } XX } XX XX /* XX * OK, filename is longer than can be handled, and it doesnt have XX * a filetype "." marker already. We will put one in to minimize XX * truncation. XX */ XX strcpy(extension,&buffer[8]); XX buffer[8] = '.'; XX strcpy(&buffer[9],extension); XX buffer[12] = '\0'; XX strcpy(filename,buffer); XX return(2); XX} XX XX XX XXstrlower(string) XXchar *string; XX{ XX register char *pointer; XX char c; XX for (pointer = string ; (c=*pointer) != '\0' ; pointer++ ) { XX if (isupper(c)) XX *pointer = tolower(c); XX } XX} XX XX#endif SHAR_EOF if test 12942 -ne "`wc -c shar.c`" then echo shar: error transmitting shar.c '(should have been 12942 characters)' fi echo shar: extracting shar.uue sed 's/^XX//' << \SHAR_EOF > shar.uue XXbegin 644 SHAR.COM XXMPT$F4TA!4E]%3T8`S3,5^/\A``#E_>$A`@+ES083T>LA!@`Y7A XXM?B.VRJ`!W6X`W68!Y2$@`^7-.A?1T<-\`2H,5Q$P`.O-D17*R0$A"``YY(U;5S9P7T=%$37RURA8$(0X$.5XC5M4JH%;E(:)6Y2$R!.7-.A?K(0@` XXM.?G%(0`$Y2$(`#GES7$9T='1R@4$*@97?+7*S0,A)%;E*@97Y4A!@`YY(U;5(4($Y2$O5N7-71?1 XXMT=$A`0#)<@`E(U9"2R$U!>4A#@`Y7B-6U7-Z$,` XXM````X<6 XXMRLT$(?__"5X6`"$O`,V!%7-.A?1 XXMT<4A#@`Y7B-6U7-.A?1T2%067-.A?1T=')+@!E XXM8VAO('-H87(Z(&5X=')A8W1I;F<@)7,*`&EF('1E(U;5(1`".5XC5M7-S0C1T=%$3>4A___1S8$5RL8&Q<'(J!9*@Y7(R(.5RLJGE8C(IY6*RJ25B,BDE8K*J!9(@97Y2'J XXM!^4AHE;ES:\?T='1P\,&*A!7(R(05RLJH%GES>D*T$KP\,& XXMS;$6!P!V`"(&8P`M!F(`.`9D`$,&80!,!G``:@9U`((&E0;#Y@4J$%=\M%\M<(`!R'__U!9 XXMS7(5RCT'(?__4%G-7-,PC1RE8'(0(`Y(U;5S:P*T=%$3>4A___1S8$5PD,'(0``Y2IL6BD1 XXMI%D9T7,C7-#`'1(:19Y=WAPZ$'W>7A(R/EW>'=Y>%^([;*PP?=;@#= XXM9@'ES;T2T=UN`-UF`>7-6031PYD'(14(Y(U;5S6Q"T=$A``#EQLA#@`Y?B-F;QE>(U;K(CQ17A8`(2T`S8$5PAD)*CQ1(R(\47ZW XXMPAT)(?__R2H\45X6`"$M`,UR%%@#K XXM(J)9$3H`S7(5PF<)*J)9Y2$2`#E>(U;5S1-#T=%$37RUPK8)*CQ1?K?"=@DJ XXM3EDC(DY9(2]6Y2$0`#E>(U;K7B-6U(U;AS9(5RDP*(8@*(CQ1(2]6Y2$0`#E>(U;K7B-6U7]X7RUPC0+(00&.5XC5M4AG@[E(2]6Y%@`A7@#-LA^`$Y?B-F;\V2%7-UT+1T<,5#"$&`#GE(7-71'1(88`.>4ARP[E(?X!.>7-,@_1T=$AK@`Y XXMY2'.#N4A+U;ES5T7T='1(=X.Y2&P`#GES9P7T='K(?H%.7,C7-JD+1T='"!PXA``(Y7A8`(2X`S7(5RL,-(0$".5X6`"$N XXM`,UR%4A^@$YY7XC9F\CZ^%S XXM(W(A*`#-*A;K(3`!.1GES6Q"T=$A^`$Y7B-6(?__S:P5R@0.(?__ZR'X`3ES XXM(W+#D@XA`P#E(2X/Y2'^`3GES:I"T='1PI(.(?T!.5X6`"$N`,UR%%@`A+@#-5^ XXM(V9O(^OA7-,QW1R7(`(U8A!@`Y(U;K7A8`U2$(`#E>(U;K7A8`X5^(V9O(^OA%@!ZL\+L#R$``.4A%@`Y7B-6Z]%SR2$&`#E> XXM(U;K7A8`(2``S7(5PE`0(08`.5XC5NM>%@`A"0#-(U;K7A8`(2<`S7(5PE`0(08`.5XC5NM>%@`A(@#- XXM(U;K7A8`>K/**Q$A!@`Y XXM7B-6ZUX6`"$@`,V!%(U;K7A8`(0D`S8$5RBL1(08`.5XC5NM> XXM%@`A7`#-@17**Q$A!@`Y7B-6ZUX6`"$G`,V!%(U;K7A8`(2(` XXMS8$5RBL1(08`.5XC5NM>%@`A"@#-@17**Q$A!@`Y7B-6ZUX6`"$-`,V!%7--4/1T41-?+7*OQ%@:>LA:@`YS886ZR'6`#E^(V9O&2/E(6P`.>7-;$+1 XXMT2$!`.LA!``Y(U;5S6Q"T=$A``#)(2X`Y2%L`#GES1-#T=%$37RURG<28&GK XXM(6H`.4AV``Y7B-6U4A=``YY4A XXMV``Y7B-6U7-;$+1T2$N`.LA<@`Y7-;$+1T2$``.LA=@`Y(U9"2\/4$F!I(T1-*V!I7A8`(00`.7-ZL\H%$R$$`#E>%@#5S7-# XXMT%@#5S<1#T>M@:7/#SA+)S3,5K/4A`A7ES9P7T='K(00`.7,C7- XXMG!?1T>LA!``YK/"71,A``#)(6`(.5XC5M4A"@@YYLA"`0YS7(5RO(3(08`.5XC5B'__\UR%4A#`@YYLA"`0Y&41-Q2$* XXM`#GES6Q"T=$A"`0Y1$TA``#K8&ES(00`.5XC5M7-^AG1ZR$&`#ES(W(A___- XXM@17*?A0A!@`Y7B-6(0H`S8$5RGX4(08`.5XC5M5@:2-$32O1<\,^%"$``.M@ XXM:7,A"`0Y7A8`U7- XXMD4+1T1D1``3KS:P5RM$4(0@$.>4A"@`YY%,,Q XXM%"$(`#GES9%"T2/ES6,ST41->+'*_Q0A"``YY<7-;$+1T6!IR45.5DE23TXN XXM1$%4`'(`03I%3E9)4D].+D1!5`!R`#T`?*)G?:-OM,E\+V=]+V^TR>GAW>7] XXMY<5>(U8C1$TA```YZSGYU6!IS3(5Z^'YP?WAW>'K?+7)>JPR/U'-UQ7K.C]1 XXMM_I"%GVTRM]M,E]D\)\%7R2RHL5(0``K\E]D\*+%7R2RGP5(0$`?;3) XXMZWRJ^J05?9-\FC\^`,X`;R8`R7H'Y@%O)@#)ZWRJ^KX5?9-\FCX`S@!O)@#) XXM?`?F`6\F`,EZ,C]1S=<5.C]1M_I"%GRUR7RW\N(5+V=]+V\C>K?R\!4O5WLO XXM7Q/#\!7%1$TA```^$#(^42GK*>O2`Q8C?9%O?)AGTAL6"3H^43TR/E'"^Q7! XXM?;3)$SH^43TR/E'"^Q7!?;3)Q41-(0``/A`IZRGKTCH6"3W",A;!?;3)?2]O XXM?"]G(WVTR7RURHL5PWP5?+)G?;-OM,GK>^8?7\J#%GRT\OL6?#M[YA]?RH,6*1W"?A9]M,GK?9-O?)IGM[G2JQ8C(QD97B-6Z\'IZ^'%0DM>(U8;>K?ZT18C>;[*RQ8C(R/#N18C XXM>+["QA8C?B-F;\'IZWV3?)H^`#_.`&\F`,GK?9-\FCX`S@!O)@#)ZWOF'U_* XXM@Q9\MQ]G?1]O'<+[%K3)?*IG?:MOM,GML,G1(0(`.=WE_>7%U1%`408&?A(C XXM$P7"(Q4A#@`Y7B-6U%@`A*P#- XXM$A#@`Y7B-6ZUX6`.O#PAC=Y>%\M(U;5S2PVT='K(0<`"7,A___-7A XXM?+7*;!@A`@##;Q@A`0`1``'-5!;E(0X`.5XC5M7-+#;1T>LA!P`)A#`````,T51"$'``E>%@#5S;4_ZR$(`#GYP]48(?K_ XXM(I99(0``R7=X1'__\V!%5@:2-$32O1<\,1&2$` XXM`.M@:7/=Y>$1___-LA#``Y?B-F;\UR%(U;5W>$A#@`YY7XC9F\KZ^%S(W(A``#-K17*RADA$``Y XXM7B-6U$KT7-@:1$*`,UR%<+*&<.` XXM&2$``-UU`&!I$?__S7(5RO$9W>7AZR$,`#E^(V9OS7(5RO$9(0``R2$,`#E> XXM(U;KR7AR!HA)%;E8&DC1$TK7A8`U4A#0#ES9P7%S9P XXM(U;5S5@;T>7=X1'__\UR%$1"`#KS7864%G-5!;)S3,5```A XXM#``Y3B-&(0(`"5XC5M5@:5XC5N'-V!;*'!PA!@`)7A8`(0@`S2(5RHP;(?__ XXMR2'[_^5@:1$&`!G1Y6XF`,TB%>OA%@#5S:(U;5Q(U;5S=(=T=')S3,5```A&59$36!I$9)6Z\WF%LHR'6!I XXM$0L`&41-$?7_&>7-,QW1PQ(=RLA!``Y(U;KR%@`A!`#-(A7*/!XA!``)7B-6U6!I7B-6X(?O_Y6!I$08`&='E;B8` XXMS2(5Z^%S(0``ZV!I(U8A`0#-4A!P`)7A8`U(U;KR2$$``E>(U9@:7,C(U;5(00`"5XC5N$9ZR$"``ES XXM(W(A!`#E8&D1!@`9T>5N)@#-5!;KX7,A#@`Y7B-6U6!IY7XC9F\CZ^%S(W+K XXM*]%S(?\`S2(5R(U8A`0#- XXM(U;5S6,ST>LA!``YK/"BQ\A`0#K(0D`"7,C(U8A!``)(U;5(>`?Y(U;5*DA1 XXM(R)(42O17A(^7=X2M> XXM%@#5_>%ZL\H0)?WEX1$E`,UR%$CY=WA*UX6`-7]X?WEX1$P`,UR%("$P`.LA0@`Y$CY=WA*UX6`-7]X2$P`,V1%71&1'0_QGK(3X`.7,C7A(^7=X2M>%@#5_>$A,`#-D17*2"']Y>$1.0#KS9(5RD@A(4`` XXM.5XC5B$*`,TJ%OWET1D1T/\9ZR%``#ES(W+#!"']Y>$1;`#-$C XXMY=WA*UX6`-7]X2$Z`#GE(50`.>5^(V9O$00`&>OA7A$60`S7(5RKHA(3H`.>4A5``YY7XC9F\C(^OA$190#-$19@#-$19P#-5^(V9O(R/KX7,C7AP]$C(1H`.>4A"`#E(3X` XXM.LA"``Y^2$T`#ES(W+#^",A.@`YS>]#S=I#`````,TG1\JF XXM(B$:`#GE(0H`Y2$^`#G-[T/-4$3-%43-$27K(0@`.?DA-``Y4A"@#E(3X`.LA"``Y^2$T`#ES XXM(W+#^",A&@`YY2$0`.4A/@`YS>]#S15$S7,EZR$(`#GY(30`.7,C$190#-(U;KY2$0`#GE XXM(0H`.']Y>'E(1L`.>LA-@`YLA-``Y?B-F;\V&%NLA.``Y5^(V9O*^OA5^ XXM(V9O(^OA(U8A0``Y?B-F;\VL%$KY=WAT7,A#``YY6!IS5]'S4%$X>7-[T/- XXMFT7AS0)$S6!$PB7AR(U;5W>$A#``YS>]# XXMS=I#`````,TG1\HI)B$,`#G-[T/-$A#``YY2$.`#G-[T/- XXMVD,!````S5)%S=I#____?\W71.'-`D1@:1$!`.O-7!;-7T?-%40A$``YS>]# XXMS2U$S=5%S7)'*?WET1D12E$97A8`U=WEX2OEW>'17-[T/-FT7AS0)$W>7%(1``.LA"``Y^>O)*@8` XXM^B9O)@#)S1,7*D!1ZRH!`"LK*QD9&>LJ0E%$32I$4>OIQ2$$`#E.(T8C7B-6 XXM:V(V`",^"S8@(SW"I28^!#8`(SW"KB;K`PK^.@L^`,+A)@KF?_Y!VALG_EO2 XXMTB;60,/>)OYAVALG_GO2&R?68'<#`R,>"!P*`_XNROPFM\H5)QW*Y";-(B=W XXM(\/E)AU[A6]\S@!G'@,*`[?*%2?-(B=W(QW"!B$A XXM`0`BVU(JVU(1@`#KS:P5RE0JW6X`)@`1(`#-'#D2?=;@`F`'RUPL0GPU0JW6X`)@`1?`#-$CY=WA(M]2*@I7Y?WA(0$`1$W#N2C=;@`F`!$^`,UR%%>%@`A(`#-7]X=WEX2/EW>%^M\I_*-UN`"8`$2``S7(5PFLHW6X` XXM)@`1"0#-7A(^7=X2O1<\-_*,-#*'BQPKDH_>7-23+1RKDH XXM(0$`Y2K;4BD16U$9Y?WES?`NT='1$0$`S7(5RKDH*MM2*1%;41E>(U;5_>'% XXMS9@WT7BQROPH(;8!Y?WES0PVT=%$36!I*2DI$?18&5XC5B%[.'E*MM2(R+;4BLI$5M1&=%S(W+=Y>%^M\J( XXM*=UN`"8`$2(`S8$5RH@IW>7A(^7=X2O#9RG=;@`F`'RURJ`I(0``Y=WEX2/E XXMW>$KT7/#42K=;@`F`!$R`,UR%7A(^7=X2LA XXM`@!$3<,9*-WES4DRT'E*MM2(R+;4BLI$5M1&=%S(W+=Y>$CY=WA?K?*42K= XXM;@`F`!$@`,UR%<(]*MUN`"8`$0D`S7(5RDXJ(0``Y=WEX2/EW>$KT7/#42K# XXM%2K#A""OES=%!T2K=4GRURG0K*@A7Y2H*5^7->4'1T2K?4EX6`"$@`,UR%<+C*BK? XXM4EX6`"$)`,UR%%@`A(`#- XXM@17*'RM@:5X6`"$)`,V!%PLT=$A7`#E(0\`Y'#*2S]Y>$C(^7]X2LK_>7A?B.VRH8LW>7A$<\`Z\WF%LJ& XXM+/UN`/UF`41-PUXL8&DC1$TK7A8`U=WEX2/EW>$KT7-@:7ZWRG4LW>7A$<\` XXMZ\WF%LIU+,-*+"$@`.7=Y>$CY=WA*]%SPQ\L(0``W74`W>7A$8#_&7TR@`#- XXMPS+)+D-/30#-,Q4``"$,`#E>(U;K?K?*TRPA#``YY7XC9F\CZ^%S(W+K*UX6 XXM`-4A`@#ES5DFT='#I2S)S3,5```A_?\BEEDA___)S3,5```A``#)S3,5```A XXM)`#EW>$A#@`Y7B-60DO##RTA``#E8&DC1$TKT7/=Y>$KY=WA$0``Z\V1%(U;K?K?*=RTA#``Y7B-6ZR->%@`A.@#-4A$``Y7B-6Z]%S(0(`ZR$,`#GE?B-F;QGKX7,C(U;5(1``.5XC5M7-C2W1T5N)@`KZ^%S(0``S9$5RN,M(0\`.5XC5NM^M\K4+2$@`,/7 XXM+2$_`.5@:2-$32O1<\.L+2$-`#E>(U8A"``91$TA#0`Y7B-6(0H`&>7=X2$/ XXM`#E>(U;K?K?*[RXA#P`Y7B-6ZUX6`"$@`,V!%(U;K7A8`(2H` XXMS7(5RILN(0T`.5XC5F!IS>86RFXN(0T`.5XC5F!IS>86RFLN(3\`Y2$/`#GE XXM?B-F;R/KX7,C7AS=D6RI@N(3\`Y2$/`#GE XXM?B-F;R/KX7,C5^ XXM(V9O(^OA(U8A!@`Y(U;5S>PLT=$A7`#E(1$`YLA$@`Y7-H"S1(0$`Y7=X2$&`#E>(U;K(UX6`"$Z`,UR%(U;K7A8`U6!I(T1-*]%S(3H`Y6!I(T1-*]%S(0$`Y?WAP\0O_>7A(^7] XXMX2O]Y>$1"P#KS9(5RC,PW6X`)@`1?P#-(A41(`#-@17*_"_=Y>$CY=WA*UX6 XXM`-5@:2-$32O1<\,$,-WEX2/EW>$K_>7A$0@`S7(5RC`PW6X`)@`1?P#-(A41 XXM(`#-(U8A_P#-@17*HC`A!``Y7B-6(18`.7XC9F_-K!7"0R\A XXM``#K(0@`.7,C86RHHQ(0@`.5XC5M7]X$K_>7AZR$$`#E^(V9OS:P5RH7A*>LA%``Y?B-F;QE>(U;5(0H`.5XC5NLIZR$6`#E^(V9O&5XC5M7-N#'1 XXMT(U;K*>LA%``Y?B-F;QE>(U9"2_WEX2GK(10`.7XC9F\97B-6 XXMU2$*`#E>(U;K*>LA%@`Y?B-F;QG17A*>LA%@`Y?B-F;QG1%@#5(0X`.5XC5NM>%@#AS:P5 XXMRA(R(0``R2$,`#GE?B-F;R/KX7,C5^(V9O(^OA(U;5 XXMS6,ST>LA!@`YK/"+C,A``#)(0``Y2$&`#E>(U;5(0H`.5XC5M7-%T+1 XXMT=$A!@`Y7B-6Z\G-,Q4``"$,`#E>(U;5S8(TT(U;K(R,C XXM$0(`Z\WS%B/E_>$JY5+EW>%\M<*;,R'A4N7=X2+E4B+A4B$!`"+C4MUN`-UF XXM`41-P[(S8&GEW>%@:5XC5D)+(0(`"5XC5OWEX(U;]Y>'- XXM XXM(U;K*2E061E$3?WEX>LA`@`)7A(N528&D1!``9R6!IZRKE4LUR%7-GS711$T1 XXM___-$A#``Y7B-6W7,"W7(#W>7A$00`&>7-@C31*N52 XXMR7=X6!IW>71Z\WG XXM%LK#--UN`-UF`>5@:='KS>86PO4TW6X`W68!Y=WEX='KS=@6RO(T8&G=Y='K XXMS><6PO4TW6X`W68!Y6!IT>O-YA;"]33#G33=;@#=9@'E(0(`"5XC5NLI*5!9 XXM&='-5^(V9O&>OA XXM(U;5W>7A(R/1Y7XC9F\9Z^%S(W)@:5XC5MUS`-UR`<.,-6!IW74`W70!W>7A XXM(N52R2$$`,VB-2-\M<@KR2$"`#E>(U8JYU(9Z]K$-2KI4CE]DWR:VL0U*N=2 XXMZR+G4NM\M XXM(U;5(0$#Y2$0`#E>(U;5S2PVT='1R$1"``9Y=WA(08`.>5^(V9O(^OA XXM(U8A`P#-(A4CZR$$`#ES(W(A!``Y7B-6(0$`S2(5R@(W_6X`)@#==0!\M<(" XXM-R'V_R*662'__\DA!``Y7B-6(0(`S2(5RBDW_6X!)@#==0%\M<(I-R'V_R*6 XXM62'__\DA!``)7B-6W7,&W7('_6X")@#==0+];@,F`-UU`R&>.=UU!-UT!<7= XXMY2$8`#E>(U;5(1@`.5XC5M4A&``Y7B-6U?UN!/UF!LA"@`Y^2$``,VL XXM%(U8A``#-K!7" XXMO3(U;K*2DI$?!8&41- XXM(08`"5XC5M4A!``)7B-6Z\TR%='K(0P`.7,C(U;KRM21$W#,SA@:1$F`!E$ XXM36!I$1M4Z\WF%LI.."$E``E>%@!ZL\I8.,,K."'Y_R*662'__\G%(0X`.5XC XXM5M7-DB;1T(U8A!@`9 XXMT7,C(U8A`P#-(A4CZR$E``ES(0(`S2(5RDHY(7LYY2$4`#E>(U8A XXM!``9T7,C4A%``Y7B-6(00`&=%S(W(A``#)S3,5```A``#E(0X` XXM.5XC5B$E`!G1(U8A"P#- XXMK17*UCDA_?\BEEDA___)(0P`.5XC5NLI*2D1\%@91$TA$``Y7B-6U2$0`#E> XXM(U;5(08`"5XC5M5@:5X6`.LI$1M4&5XC5NO-,A71T=')S3,5_/\A``!$32$0 XXM`#E>(U;5W>'=Y>$1)``9?K?*=3K=;B0F`.4A@`#1Z\V&%D1-ZR$4`#E^(V9O XXMS><6RETZ(10`.5XC5D)+Q2$4`#E>(U;5W>7-+#O1T='*=3HA___)(10`.5XC XXM5F!IS886$0<`Z\WS%NLA!@`YK/*VCHA!@`Y7B-6U2$4`#E>(U9@:1GE XXMW>7-*$'1T='K(00`.7,CLA%``Y?B-F;\WF%LHC.R$4`#E> XXM(U9@:%@`A@``9Y2$2`#E>(U;5S?=!T='1(20`"5X6`"$0`#E^ XXM(V9O&1%_`,TB%>LA)``)LJ)549(B558&GK.B14;R8`Z\V&%GTR)%1@:'#K#S=Y>$CY=WAW>7AZR$0`#E^(V9OS:P5RM\\(0P`.5XC XXM5M7-62;1Y6!I(T1-*]%S(1H`S7(5PM\\PZ4\W>7AR(U8A"P#-K17*$CTA_?\BEEDA___)(0P`.5XC5NLI*2D1 XXM\%@91$TA$``Y7B-6U2$0`#E>(U;5(08`"5XC5M4A`0`)7A8`ZRD1)U497B-6 XXMZ\TR%='1T(U;5(10`.5XC5F!I&>7=YLA!``YK/* !@`Y XXM7B-6(00`.7XC9F_-AA81!P#KS7864%D9R2$&`#E>(U8A!P#-=A9061E$36!I XXMZR$4`#E^(V9OS>86RF$^(10`.5XC5F!IS886Y2$4`#E>(U9@:1GEW>7-:C[1 XXMT='*83Y@:(U;5(1``.5XC5M4A)``) XXM7A8`(8``&>7-]T'1T='%(2(`YLA)``)7A(^7=X=WEX>LA$@`Y?B-F;\VL%(U;5 XXMS5DFT=$A!``Y7B-6U2$0`#E>(U;5S5DFT='#3S_=Y>')S3,5```A#``Y7B-6 XXM(0``S:P5PO$_(0P`.5XC5B$+`,VM%<+Q/R$,`#E>(U;K*2DI$?-8&5X6`'JS XXMPO\_(?W_(I99S>A#_____\DA#``Y7B-6ZRDI*1'V6!E>(U9"2R$2`#E>(U;K XXMPZ!`Q2$0`.7-62;1T1'_`,UR%0`$`4D```(]`DD`A``#K(2,`"7,A#@`YS>]#S=I#`````,TG1\KN XXM0"$``.LA(0`)]#S=I#!P```,U21LA@``9(D)1#AK-!0#!Q2I`4>O-!0"WPFY!*D!1 XXM$2$`&33"8$$C-"I$42LB1%%]M,(V0<');R8`(I99P2I$44A2@`Y7B-6U4A3``Y7B-6U4A%P#ES5DFT=')S3,5W/\A!``YY2$R XXM`#E>(U;5S9(FT=$A!``YY2$3`.7-62;1T+'*5T(:OL)<0K?*5T(C$PO#0T+!(0``R<':9D(A`0!] XXMM,DA__]]M,DA`@`YQ0'_?UXC5M4C?B-F;WBQRHY"?A*WRHY"(Q,+PWU"X<') XXM(0(`.7XC9F\1``"OOLJF0A,CPYU"ZWVTR2$"`#G%7B-6U2->(U8C3B-&Z]'# XXM0T(A`@`YQ5XC5M75(UXC5B-.(T;KT<-]0L4!_W\A!``Y7B-6U2-^(V9OZWBQ XXMRHY"?K?*^$(C"\/I0NO#?4(A`@`YQ5XC5M75(UXC5B-.(T;AK\/I0L4A!``Y XXM7B-6(V[K?K?**T.[RC%#(\,>0R$``*_!R7RUP]J"0R$``*_)(0(` XXM.7[^,-J70_XZTI=#PX)#(0(`.7[^8=J_0_Y[TK]#UB!O)@"WR2$"`#E^_D': XXMU4/^6]+50\8@;R8`M\G1(00`&>7KZRJ:5L/S0]$A!``9Y>OK*IA6&G$B+U4JF%81`P`95BM>*]56 XXM*U[5*B]5Z>$B+U4JFE;1=R,5PE9$R2J85A8$?K?"(4$B,3!<+,1,')Q2J8 XXM5NLJFE8&!!JF$B,3!<+A1,')Q2J85NLJFE8&!!JV$B,3!<+V1,')Q2J85NLJ XXMFE8&!!JN$B,3!<(+1<')*IA6%@1^+W(U8C XXM?B-F;RGK*>O20$4C!<(X141-*IA64>!+=^'W$5PF5%R>4>!#=^'W$5PG=%R=4&!'X2 XXM(Q,%PHQ%X4^W\,-31,4JF%81.U7-B45Y,CE5*II6$4-5S8E%.CE5J3(Y53(Y52J:5A%# XXM5$A,C!<(T1GG>`,)/ XXM1B$[530A.E4UPAE&R2$Z537*@48A.U4&"+=^CWD3*(4A#`````.'-`D0A``#E(1`` XXM.5XC5NO1(U;K(R/1LA!``Y4J1U41:0L9S5%'S=I#@%$!`,V41N'-`D0Z255O)@`1 XXM!`#KS5P6$0H`S2H6Y3I)56\F`!$/`,TB%=$9ZR$&`#ES(W(A"``YY2$(`#E> XXM(U;KS5%'S=I#$`X``,V41LU!1.'ES>]#S:M$X7-[T/-JT3AS0)$(00`.5XC5B$$`,U<%A$*`,TJ%N4A XXM!@`Y7B-6(0\`S2(5T1GK(08`.7,C4A!@`Y7B-6Z\U?1\W:0SP```#-E$;-%40A*@`Y7B-6Z\WO XXM0\TM1,W!1.'-`D0A$``YY'=;@[=9@]$32'75>LA&``Y5^(V9O$0@`&>OA(U;K7B-6(08`.7XC9F_-(U8A!``97B-6(18`.7,C(U8A!``9 XXM7B-6(1H`.7,C7-VDO1T>7]X2$:`#E>(U;5W>7-VDO1T>LA&@`Y(U;KPWU+8&G]Y='KS:T5PN!*8&G]Y='-LA&@`Y?B-F;\UR%

')PXQ+8&G]Y='KS:T5PG9+8&G]Y='-LA&@`Y?B-F XXM;\UR%')PXQ+W>7AR]#S:M$X7=X=WEX1$0`!GE?B-F;R/KX7,C7AR(U;5W>'=Y>$1.@#KS9$5RA1,(0H`"5XC5M7-KU#1$9/^&=WE XXMT1GEW>$A#``)7B-6U2$.``E>(U;5W>7AT>O-AA;1&1&\`AD1!P#KS<85Y=WE XXMX='KS886R4A%@`Y7B-6Z\WO0\W:0X!1`0#-U47AS0)$(00` XXM.>4A%@`Y7B-6Z\WO0\W:0X!1`0#-FT7AS0)$(0@`.$A"``YS>]#S=I#/````,W51$C(^7] XXMX2LKT7,C7A$3P`Z\W&%>7]Y>$C XXM(^7]X2LKT7,C7=X=WEX>7]Y>$C(^7]X2LKT7,C7A(^7=X2O=Y]#S2U$S3Q' XXMRL=-(00`.>7=Y'# XXMVTW=Y>$KY=WA(R$$`#G-[T/-VD,`````S2='RA).(00`.>7=Y>$KY$B$58A!``YS>]#S7)'1$TB%5;=Y'#34[=Y>$CY=WA*]WEX2D195497B-6 XXMU6!IT>O-D17*>4[=Y>$I$655&5XC5F!IZ\V&%D1-PT5.(1P`(F=58&DCY?WE XXMX2,CY?WA*RO17AY?WEX2,CY?WA*RO1'=Y>$CY=WA*UX6`-5@:2-$32O1(U8A`P#-*A81=%`9Y=WA(4M51$W=Y>$CY=WA*UX6`-5@:2-$32O1 XXM<]WEX2/EW>$K7A8`U6!I(T1-*]%SW>7A(^7=X2M>%@#58&DC1$TKT7-@:2-$ XXM32LA#``Y7B-6(0@`&>7]X?UN`/UF`1$#`,TJ%A&*4!GEW>'=Y>$CY=WA*UX6 XXM`-5@:2-$32O1<]WEX2/EW>$K7A8`U6!I(T1-*]%SW>7A(^7=X2M>%@#58&DC XXM1$TKT7/]Y>$K*^7]X5XC5M7%S7%S7%S7% XXMS(U8A"@`97B-6(60`S9$5RC-0(3(`ZR$!``ES(0P`.5XC XXM5B$*`!E>(U8A,``9$<@`Z\V1%>LA`@`) XXM(U8A9``9Y<7-S%#1T41-(4M5R41A>2!-;VX@,#`@,#`Z,#`Z,#`@,3DP,`H` XXM4W5N36]N5'5E5V5D5&AU1G)I4V%T`$IA;D9E8DUA4IU;DIU;$%U XXM9U-E<$]C=$YO=D1E8P#-,Q4``"$,`#E>(U8A!`#-QA7"R%`A;@')(6T!R(U8A"@#-D17*$E$A#@`Y7B-6(0H`S5@5 XXM$0H`Z\W&%1$P`!GE8&DC1$TKT7/#'E$A(`#E8&DC1$TKT7,A#@`Y7B-6(0H` XXMS<85$3``&>5@:2-$32O1`!\`'@`?`!\`'@`?`!X`'P"V!P4`30&W!SH`+P$``'<` XXM+P&R!Y`!``"S!R\!``"T!R\!.@```"\!00"_!U8`+P'`!U8`+P'!!U8`+P$` XXM`)`!``"_!U8`$`'`!U8`$`'!!U8`$`$``)`!```!``$`?54!``(``0"/50`` XXM`P`!`*=5`0`$``$`OU4!``4``0"_50$`__\````````````````````````` XXM```````````````!````!`````````$!``$``````````0(``0`````````` XXM```````````````````````````````````````````````````````````` XXM````````````````````````````````````````````````````````,54U XXM50`````#`6-A=``````````````````````````````````````````````` XXM```````````````````````````````````````````````````````````` XXM`````````````````````````"LG-"<````````*4TA!4CH@0W)E871E+V5X XXM=')A8W0@9FEL92!A'1R86-T:6]N(&)Y("]B:6XO'1R86-T(&%BF5S(&]N(&5X=')A8W1I;VX*"0DM XXM9"`@=7-E('1H:7,@14]&(&1E;&EM:71E'1R86-T:6]N+"!I;F-L+B!E8VAO:6YG(&9I;&5S:7IE.0$``````-HU2%D"`-\U2%D"`.0UY%@%`.DUY%@% XXM`.XUY%@%`/,UY%@%`/@UY%@$`/TUY%@$``(VZE@#``