IMD 1.16: 8/06/2007 8:07:30 ååååååååååTOOLSBDSLBR€ TOOLSBDSLBR€ !TOOLSBDSLBR€"#$%&'()*+,-./01TOOLSBDSLBR€23456789:;<=>?@ATOOLSBDSLBR BCDEFGHIJKTPKERM HQPLTPKERMITLBR€MNOPQRSTUVWXYZ[\TPKERMITLBR]^_`abcdeTPWARMSTPQTfgTRACER LBRBhijklTRAP COMmTREK COMVnopqrstuvwxyz{TREKINSTCOM|}~€�‚ƒ„…TRIVFF LBR€†‡ˆ‰Š‹Œ�Ž��‘’“”•TRIVFF LBR–—TSORT LBRh˜™š›œ�žŸ ¡¢£¤¥¦TXT2ASM AQMG§¨©ª«TXT42 LBRo¬­®¯°±²TXT50 LBR#³´µ¶·¸¹º»¼½-PUBDOM 056åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå zSINGLE SUB7þTOOLS H 6ðROFF H C&®RARGS BDSi î4CONVERT BDS‰=ÔHCOPY BDSÆ”DATE BDSÈXkECHO BDSØñ=FILE BDSÜVÚMISC BDS2LˆPATTERN BDS:Sœ¬RAT2C BDS�bºRAWFILE BDSªždROFF1 BDSÅc@?ROFF2 BDS(Ž5ãSTORAGE BDS¶ €ÍSTRING BDSÀ(…(SYMTAB BDSèFN5TOOLIB1 BDS.pyœTOOLIB1 CRLž.ìTOOLIB2 CRLÌ*>áBDS DOCöJÚCHANGES DOC4CONVR2C DOCH.-6FILE DOCvÌLINKARGSSUBŽ»†LINKCOPYSUB�Ñ@SYMLINK SUB�®0TOOLS SUB‘݈ÿÿå;submit file to create "primitives and tools in BDS C" disk ;put single density disk to be created on drive B: ; xsub pip b:=a:single.sub b:=a:tools.h b:=a:roff.h b:=a:args.bds b:=a:convert.bds b:=a:copy.bds b:=a:date.bds b:=a:echo.bds b:=a:file.bds b:=a:misc.bds b:=a:pattern.bds b:=a:rat2c.bds b:=a:rawfile.bds b:=a:roff1.bds b:=a:roff2.bds b:=a:storage.bds b:=a:string.bds b:=a:symtab.bds b:=a:toolib1.bds b:=a:toolib1.crl b:=a:toolib2.crl b:=a:bds.doc b:=a:changes.doc b:=a:convr2c.doc b:=a:file.doc b:=a:linkargs.sub b:=a:linkcopy.sub b:=a:symlink.sub b:=a:tools.sub /* Standard header for Software Tools * This file includes a version of BDSCIO.h * source: tools.h * version: August 23, 1981 */ /* This file contains: 1. Unchanging constants used by BDS C. 2. Unchanging constants used by Software Tools. 3. Global variables for the Software tools and constants used to define those variables. All software tools sdependent parameters */ /* comment out ----- #define BITS_PER_CHAR 8 #define BITS_PER_WORD 16 #define CHARS_PER_WORD 2 #define MAX_INTEGER 32767 #define MIN_INTEGER -32768 #define MAX_REAL_EXP 38 #define MIN_REAL_EXP -38 #define REAL_PRECISION 6 ----- comment out */ /* DRIVER and DRETURN have been eliminated. Instead, each tool should start as follows: main(arc, argv) int argc; char ** argv; { initst(argc, argv); tool(); } */ /* Definitions for 'spawn' primitive */ /* comment out ---------- #define WAIT 'w' wait for subprocess to complete #define NOWAIT 'n' control returns as soon as subprocess starts #define BACKGR 'b' spawning a background process ---------- end comment out */ /* Part 3 -- Define global variables */ /* max chars in file name (including EOS) for CP/M = 2 (disk) 8 (filename) 1 (dot) 3 (extension) 1 (EOS) */ #define SYS_MAXFN 15 /* replaces FILENAMESIZE, MAXNAME */ #define MAXLINE 135 /* used by BOTH BDS and tools */ hould include tools.h and should NOT include bdscio.h */ /* Part 1 -- Unchanging constants used by BDS C*/ #define BASE 0 /* Base of CP/M system RAM */ #define NULL 0 #define EOF -1 /* Physical EOF returned by */ /* low level I/O functions */ #define ERROR -1 #define OK 0 #define CPMEOF 0x1a /* CP/M End-of-text-file marker */ /* (sometimes!) */ #define SECSIZ 128 /* Sector size for read/write calls */ #define TRUE 1 #define FALSE 0 /* Part 2 -- Unchanging constants used by Software Tools */ #define BEGINNING_OF_FILE -2 /* seek to start of file */ #define END_OF_FILE EOF /* flag to seek for eof */ #define DIGIT '0' #define LETTER 'A' #define ERR ERROR #define HUGE 30000 /* some arbitrarily large number */ #define LAMBDA 0 /* end of list marker */ #define NO 0 #define YES 1 #define NOERR OK /* file types */ /* comment out ----- (file types) #define ALPHA -9 #define ASCII 12 #define BINARY 60 #define LOCAL 6 ----- end comment out */ /* AS #define MAXCARD 80 /* "card" size */ /* to be replaced */ #define MAXCHARS 20 /* max nbr of chars when converting */ /* from integers to characters */ /* (used by putint, outnum, etc.) */ #define MAXPAT 128 /* max size of encoded patterns */ /* (used in string matching) */ #define NCHARS 33 /* number of special characters */ /* define size of I/O buffers The NSECTS symbol controls the size of the file buffers. To change the buffer size allocation, follow these steps: 1) Alter NSECTS to the desired value here in tools.h 2) Re-compile ALL bds files. Make sure you use declare all your I/O buffers with the a statement such as: char buf_name[BUFSIZ]; */ #define NSECTS 8 /* Number of sectors to buffer up in ram */ #define BUFSIZ (NSECTS * SECSIZ + 6 ) /* Don't touch this */ struct _buf { /* Or this... */ int _fd; int _nleft; char *_nextp; char _buff[NSECTS * SECSIZ]; }; /* seed for random number generators */ inCII control character definitions */ #define NUL 0 #define BEL 7 #define BS 8 #define HT 9 #define LF 10 #define VT 11 #define FF 12 #define CR 13 #define CAN 24 #define ESC 27 #define DEL 127 /* Synonyms for important non-printing ASCII characters */ #define BACKSPACE 8 #define BELL 7 #define BLANK 32 #define NEWLINE 10 #define RUBOUT 127 #define TAB 9 /* Printable ASCII characters */ #define DQUOTE 34 #define LBRACE 123 #define LBRACK 91 #define LPAREN 40 #define RBRACE 125 #define RBRACK 93 #define RPAREN 41 #define SQUOTE 39 #define UNDERLINE 95 /* Ratfor language extensions */ #define FILEDES int #define POINTER int #define BOOL int #define EOS 0 /* comment out ----- define (DS_DECL,integer $1($2);common/cdsmem/$1) define (IS_DIGIT,(DIG0<=$1&$1<=DIG9)) # valid only for ASCII! define (IS_LETTER,(IS_UPPER($1)|IS_LOWER($1))) define (IS_LOWER,(LETA<=$1&$1<=LETZ)) define (IS_UPPER,(BIGA<=$1&$1<=BIGZ)) ----- end comment out */ /* Machine-t sys_seed; /* time and date */ char sys_date [MAXLINE]; /* dynamic storage allocation information */ struct _header { struct _header *_ptr; unsigned _size; }; struct _header _base; struct _header *_allocp; /* command line argument information */ int sys_narg; /* number of arguments in list */ /* init to 0 */ int sys_args[30]; /* pointers to n'th argument */ /* BDS C has max of 30 arguments */ /* file information: Units are either standard units or explicitly opened files. Units 0, 1, and 2 are the STDIN, STDOUT, and ERROUT units. By default, these units are the same as the user's console, but these units may be redirected to files via the command line characters >, < and ?. Units 3 and 4 are always assigned to the user's console and line printer respectively. These units can not be reassigned. Reading from unit 4 is not permitted. The user need never open units 0 through 4, although it is permissible to do so. Units with  /* define special characters visible to the user */ #define ARGFLAG '$' #define PAGENUM '#' #define CURRENTDATE '%' /* define default settings of parameters */ #define PAGEJECT FF /* FF is ASCII formfeed (control-L) */ #define PAGEWIDTH 65 #define PAGELEN 66 /* define return codes and other values */ #define LEFT 1 #define CENTER 2 #define RIGHT 3 #define STARTU 1 /* start underscoring */ #define STOPU 2 /* stop underscoring */ /* these variable were originally local variables * initialized with data statements. */ int cuflag; /* cuflg in text() */ int dir; /* dir in spread() */ int putflag; /* cuflg in put() */ /* temporary buffers -- from common block ctemp */ char tbuf1 [MAXLINE]; /* for use by puttl and tabs */ char tbuf2 [MAXLINE]; char ttl [MAXLINE]; /* misc. line info -- from common block cparam */ int fill; /* flag: fill; init = YES */ int lsval; /* line spacing; init = 1 */ int inval; /* indent; >= 0; init = 0 */ int rmvanumbers greater than 4 are files. These units must always be opened by calling open(). Normally, these units are disk files. However, these units may assign to the files TTY or PRINTER. All I/O assigned to TTY is assigned to unit 3. All I/O assigned to PRINTER is assigned to unit 4. I/O from standard units may be redirected to any file, including TTY and PRINTER. Sys_bufp [unit] != ERR ==> unit is directed to a disk file. Sys_spec [unit] != ERR ==> unit is directed to special file. Otherwise, the unit is closed. */ /* define access modes */ #define READ 1 #define WRITE 2 #define APPEND 3 #define READWRITE 4 /* define standard unit numbers */ #define SYS_STD 5 /* # of standard units */ #define STDIN 0 #define STDOUT 1 #define ERROUT 2 #define STDERR ERROUT #define SYS_TERM 3 #define SYS_PRT 4 /* define reserved filenames */ #define TERMINAL "TTY" /* user's terminal */ #define PRINTER "PRINTER" /* user's printer */ #define MAXOFILES 5 /* max l; /* right margin; init = PAGEWIDTH = 60 */ int tival; /* current temporary indent; init = 0 */ int ceval; /* number of lines to center; init = 0 */ int ulval; /* number of lines to underline; init = 0 */ int boval; /* number of lines to boldface; init = 0 */ char cchar; /* line control character; init = PERIOD */ int tjust [3]; /* justification types for heads and foots */ /* init = LEFT, CENTER, RIGHT */ int bsval; /* number of lines to blank suppress; init=0 */ int rjust; /* flag: right justify filled lines */ /* init = YES */ int cuval; /* number of lines to continuously underline */ /* init = 0 */ int tabs [INSIZE]; /* tab stops; init every 8 spaces */ /* misc. page info -- from common block cpage */ int curpag; /* current output page number; init = 0 */ int newpag; /* next output page number; init = 1 */ int lineno; /* next line to be printed; init = 0 */ int plval; /* page length in lines; init = PAGELEN = 66 */ int m1val; /* margin before and including # of open files */ int sys_bufp [SYS_STD + MAXOFILES]; /* ERR or ^ buffer */ int sys_bufn [SYS_STD + MAXOFILES]; /* buffer number */ int sys_spec [SYS_STD + MAXOFILES]; /* ERR or std unit */ int sys_acc [SYS_STD + MAXOFILES]; /* access mode */ char sys_bufs [MAXOFILES * BUFSIZ]; /* file buffers */ /* software tools format program -- C version -- header file * source: roff.h * version: November 26, 1981. */ /* contains the following common blocks: ctemp cparam cpage cout cnr cfiles cdefio cmac */ /* define PAGECONTROL if you want format to output a * page eject character (CNTRL-L) rather than count * lines to finish off a page. */ /* comment out ----- #define PAGECONTROL 1 ----- end comment out */ /* define size of important data objects */ #define MAXLINE 400 #define MAXDEF 400 #define MAXNAME 400 #define INSIZE 400 #define MAXOUT 400 #define PBSIZE 400header */ int m2val; /* margin after header */ int m3val; /* margin after last text line */ int m4val; /* bottom margin, including footer */ int bottom; /* last live line on page */ /* always equal to plval - m3val - m4val */ char ehead [MAXLINE]; /* top of page title for even pages */ /* init = NEWLINE */ char ohead [MAXLINE]; /* top of page title for odd pages */ int ehlim [2]; /* left,right margins for even header */ /* init = inval, rmval */ int ohlim [2]; /* left,right margins for odd header */ /* init = inval, rmval */ char efoot [MAXLINE]; /* bot of page title for even pages */ /* init = NEWLINE */ char ofoot [MAXLINE]; /* bot of page title for odd pages */ /* init = NEWLINE */ int eflim [2]; /* left,right margins for even footer */ /* init = inval, rmval */ int oflim [2]; /* left,right margins for odd footer */ /* init = inval, rmval */ int stopx; /* flag for pausing between pages */ int frstpg; /* first page to begin printing with */ iys_spec [%d] = %3d\n",i,sys_spec [i]); } } printf("End of test\n"); } /* delarg - delete argument n from the command line */ delarg (n) int n; { /* include common /args/ */ int i; /* check for valid argument number */ if (n < 0 || n > sys_narg) { return; } /* move pointers down */ for (i = n; i < sys_narg; i++) { sys_args [i] = sys_args [i + 1]; } sys_narg--; } /* endst - close all files and terminate the program */ endst() { int i; for (i = 0; i < MAXOFILES + SYS_STD; i++) { close (i); } BDS_exit(); } /* errsub - see if argument is ERROUT substitution * abort if we can not open the file */ BOOL errsub (arg) char arg[]; { int access; if ( arg [0] == '?' && arg [1] != '?' && arg [1] != EOS ) { arg++; access = WRITE; } else if ( arg [0] == '?' && arg [1] == '?' && arg [2] != EOS ) { arg++; arg++; access = APPEND; } else { return(NOnt lastpg; /* last page to be printed */ int print; /* print page flag */ int offset; /* offset whole page by this much */ /* init = 0 */ /* output lines and related info -- from common block cout */ int outp; /* last char position in outbuf; init = 0 */ int outw; /* width of text in outbuf; init = 0 */ int outwds; /* number of words in outbuf; init = 0 */ char outbuf [MAXOUT]; /* lines to be filled collect here */ /* word in outbuf; init=0 */ /* number registers -- from common block cnr */ int nr [26]; /* number registers a..z */ /* list of input files -- from common block cfiles */ int infile [SYS_STD + MAXOFILES]; /* file descriptor stack */ int level; /* current file is infile[level] */ /* pushed-back input characters -- from common block cdefio */ int bp; /* next available character; init = 0 */ char pbbuf [PBSIZE]; /* pushed-back characters */ /* symbol table for macros -- from common block cmac */ char * mactbl; /* symbol table cont); } if (_assign(ERROUT, arg, access) == NO) { /* abort -- no place for error message */ endst(); } return(YES); } /* getarg - return pointer to n'th arg. * this is a change from software tools. */ POINTER getarg (n) int n; { if (n < 1 || n > sys_narg) { return(EOS); } else { return(sys_args [n]); } } /* initst - initialize software tools programs */ initst(argc, argv) int argc; char **argv; { int i; POINTER arg; /* initialize system date */ sys_date [0] = EOS; /* initialize system storage management */ /* dsinit(); */ _allocp = NULL; /* initialize system argument area */ sys_narg = argc - 1; sys_args [0] = NULL; for (i = 1; i < argc; i++) { sys_args [i] = argv [i]; } /* close all disk files */ for (i = 0; i < SYS_STD + MAXOFILES; i++) { sys_bufp [i] = ERR; sys_bufn [i] = ERR; sys_spec [i] = ERR; } /* open the standard units */ sys_spec [STDIN] = SYS_TERM; sys_spec [STDOUT] = aining macros */ /* Command line handling routines for Software Tools * source: args.bds * version: August 23, 1981 */ #include tools.h /* routines on this file: initst endst getarg delarg $ insub $ outsub $ errsub */ /* make BDS calls more visible */ #define BDS_exit _exit /* test routine for initst(), and command handlers */ main(argc, argv) int argc; char **argv; { initst(argc, argv); echo(); endst(); } echo() { int i; int unit; char *p; printf("Test of initst()\n"); for (i = 1; (p = getarg(i)) != NULL; i++) { unit = open(p,READ); printf("file %s is unit = %d\n",p,unit); } for (i = 0; i < SYS_STD + MAXOFILES; i++) { if ( sys_bufp [i] != ERR || sys_spec [i] != ERR || sys_bufn [i] != ERR ) { printf("sys_bufp [%d] = %x ",i,sys_bufp [i]); printf("sys_bufn [%d] = %3d ",i,sys_bufn [i]); printf("sSYS_TERM; sys_spec [ERROUT] = SYS_TERM; sys_spec [SYS_TERM] = SYS_TERM; sys_spec [SYS_PRT] = SYS_PRT; /* pick up file substitutions for standard files */ for (i = 1; (arg = getarg(i)) != NULL; ) { if ( insub (arg) == YES || outsub (arg) == YES || errsub (arg) == YES ) { delarg(i); } else { i++; } } } /* insub - check for STDIN substitution */ BOOL insub (arg) char arg []; { if (arg [0] == '<' && arg [1] != EOS) { arg++; } else { return(NO); } if (_assign(STDIN, arg, READ) == NO) { cant (arg); return(NO); } return(YES); } /* outsub - check for STDOUT substitution */ BOOL outsub (arg) char arg[]; { int access; if ( arg [0] == '>' && arg [1] != '>' && arg [1] != EOS ) { arg++; access = WRITE; } else if ( arg [0] == '>' && arg [1] == '>' && arg [2] != EOS ) { arg++; arg++; access = APPEND; } else { return(NO); }  increment i. * calling sequence: gctoi(str, &i, radix); */ /* comment out ----- gctoi (str, ii, radix) char str[]; int *ii, radix; { int base, i, v, d, j; BOOL neg i = *ii; v = 0; base = radix; while (str[i] == ' ' || str[i] == TAB) { i++; } neg = (str[i] == '-'); if (str[i] == '+' || str[i] == '-') { i++; } if ( ( str[i+2] == 'r' && str[i] == '1' && IS_DIGIT(str[i+1])) || ( str[i+1] == 'r' && IS_DIGIT(str[i]) ) { base = str[i] - '0'; j = i; if (str (i + 1) != 'r') { j++; base = base * 10 + (str[j] - '0') } if (base < 2 | base > 16) { base = radix; } else { i = j + 2; } } for (; str[i] != EOS; i++) { if (IS_DIGIT(str[i])) { d = str[i] - '0' } else { d = index (digits, clower (str[i])) - 1; if (d < 0 || d >= base) { break; } v = v * base + d } *ii = i; if (neg) { return (-v); } else { return (+v); } } ----- if (_assign(STDOUT, arg, access) == NO) { cant (arg); return(NO); } return(YES); } /* Conversion routines for Software Tools * source: convert.bds * version: July 28, 1981 */ #include tools.h /* ctoi - convert string at in[i] to int, increment *i. * increment i. * calling sequence: ctoi(buffer, &i); */ ctoi(in, i) char *in; int *i; { while (in[*i] == ' ' || in[*i] == TAB) { (*i)++; } /* note: i still points at beginning of number */ return(atoi(in + *i)); } /* ctomn - translate ASCII control char to mnemonic string */ /* comment out ----- ctomn (c, rep) char c, rep[4] { int i; char *s; i = c & 127; if (0 <= i && i <= 32) { /* non-printing char or space */ switch(i) { case 0: s = "NUL"; break; case 1: s = "SOH"; break; case 2: s = "STX"; break; case 3: s = "ETX"; break; case 4: s = "EOT"; break; case 5: s = "ENG"; break; case 6: s = "ACK"; break; case end comment out */ /* gitoc - convert single precision int to any radix string * */ /* comment out ----- gitoc (int, str, size, base) int int, size, base; char str [size]; { int carry, d, i, radix, n; int value; logical unsign; /* digit string is generated backwards, then reversed */ str[1] = EOS; if (size <= 1) { return[0]; } radix = abs(base); if (radix < 2 || radix > 16) { radix = 10; } /* negative radices mean unsign conversion */ unsign = (base < 0); if (unsign) { /* make positive, but keep high-order bits intact */ n = (int / 2) & (MAX_INTERGER); carry = int & 1; /* get initial carry */ } else { n = int; } i = 1; repeat { d = abs (n % radix); /* generate next digit */ if (unsign) { /* this is only half of actual digit value */ d = 2 * d + carry /* get actual digit value */ if (d >= radix) { /* check for generated carry */ d -= radix carry = 1 } else { carry =  7: s = "BEL"; break; case 8: s = "BS"; break; case 9: s = "HT"; break; case 10: s = "LF"; break; case 11: s = "VT"; break; case 12: s = "FF"; break; case 13: s = "CR"; break; case 14: s = "SO"; break; case 15: s = "SI"; break; case 16: s = "DLE"; break; case 17: s = "DC1"; break; case 18: s = "DC2"; break; case 19: s = "DC3"; break; case 20: s = "DC4"; break; case 21: s = "NAK"; break; case 22: s = "SYN"; break; case 23: s = "ETB"; break; case 24: s = "CAN"; break; case 25: s = "EM"; break; case 26: s = "SUB"; break; case 27: s = "ESC"; break; case 28: s = "FS"; break; case 29: s = "GS"; break; case 30: s = "RS"; break; case 31: s = "VS"; break; } scopy (s, 1, rep, 1); } else if (i == 127) { /* rubout (DEL) */ scopy ("DEL", 1, rep, 1); } else { /* printing character */ rep[1] = c; rep[2] = EOS; } return (length (rep)); } ----- end comment out */ /* gctoi - convert any radix string to single precision int * 0 } } i++; if (str[i] < 10) { str[i] += '0'; } else { str[i] += 'A' - 10; } n /= radix } until (n == 0 || i >= size); if (unsign) { if (carry != 0 & i < size) { /* check for final carry */ i++; str[i] = '1'; } } else if (int < 0 && i < size) { /* add sign if needed */ i++; str[i] = '-'; } value = i - 1; /* will return length of string */ for (d = 1; d < i; d++) { /* reverse digits */ carry = str[d]; str[d] = str[i]; str[i] = carry; i--; } return (value); } ----- end comment out */ /* mntoc - translate ASCII mnemonic into a char */ /* comment out ----- char mntoc (buf, p, default) char buf[], default int p int i, tp int equal char c, tmp (MAXLINE) char text (170) data text / _ ACK, LETA, LETC, LETK, EOS, BEL, LETB, LETE, LETL, EOS, BS, LETB, LETS, EOS, EOS, CAN, LETC, LETA, LETN, EOS, CR, LETC, LETR, EOS, EOS, DC1, LETD, LETC, DIG1, EOS, DC2, LETD, LETg in str */ itoc (n, str, size) int n, size; char *str; { int l; sprintf(str, "%d", n); if ((l = length(str)) >= size) { sys_error("itoc\n"); } return(l); } /* comment out ---------- int d, i, intval, j, k; intval = abs (n); str [0] = EOS for (i = 1;intval == 0 || i > size - 2;i++) { i++; str [i] = '0' + (intval % 10); intval = intval / 10; } if (n < 0 && i < size) { /* then sign */ i = i + 1 str (i) = MINUS } itoc = i - 1 for (j = 1; j < i; j = j + 1) { /* then reverse */ k = str (i) str (i) = str (j) str (j) = k i = i - 1 } } ----- end comment out */ Truncate after len chars */ ctoc (from, to, len) int len; char *from, *to; { int i; for (i = 0/* file copy routine -- test * source: copy.bds * version: July 22, 1981 */ #include tools.h main(argc, argv) int argc; char **argv; { initst(argc, argv); fcopy(STDIN, STDOUT); endst(); } flusèMgetliîNputdeãTitoãUputãVreadC, DIG2, EOS, DC3, LETD, LETC, DIG3, EOS, DC4, LETD, LETC, DIG4, EOS, DEL, LETD, LETE, LETL, EOS, DLE, LETD, LETL, LETE, EOS, EM, LETE, LETM, EOS, EOS, ENQ, LETE, LETN, LETQ, EOS, EOT, LETE, LETO, LETT, EOS, ESC, LETE, LETS, LETC, EOS, ETB, LETE, LETT, LETB, EOS, ETX, LETE, LETT, LETX, EOS, FF, LETF, LETF, EOS, EOS, FS, LETF, LETS, EOS, EOS, GS, LETG, LETS, EOS, EOS, HT, LETH, LETT, EOS, EOS, LF, LETL, LETF, EOS, EOS, NAK, LETN, LETA, LETK, EOS, NUL, LETN, LETU, LETL, EOS, RS, LETR, LETS, EOS, EOS, SI, LETS, LETI, EOS, EOS, SO, LETS, LETO, EOS, EOS, SOH, LETS, LETO, LETH, EOS, SP, LETS, LETP, EOS, EOS, STX, LETS, LETT, LETX, EOS, SUB, LETS, LETU, LETB, EOS, SYN, LETS, LETY, LETN, EOS, US, LETU, LETS, EOS, EOS, VT, LETV, LETT, EOS, EOS/ tp = 1 repeat { tmp (tp) = buf[p] tp = tp + 1 p++ } until (! (IS_LETTER(buf[p]) | IS_DIGIT(buf[p])) | tp >= MAXLINE) tmp (tp) = EOS if (tp == /* Time and date routines for Software Tools * source: date.bds * version: August 22, 1981 */ #include tools.h /* fmtdat - format date and time information into date * form is reserved for a format selector. * time is a scratch buffer */ fmtdat (date, time, now, form) char *date, *time, *now; int form; { /* copy now to date. do not copy newline */ while (*now != NEWLINE && *now != EOS) { *date++ = *now++; } *date = EOS; /* comment out ----- format date and time date [0] = now [1] / 10 + '0'; date [1] = now [1] % 10 + '0'; date [2] = '/'; date [3] = now [2] / 10 + '0'; date [4] = now [2] % 10 + '0'; date [5] = '/'; date [6] = now [0] % 100 / 10 + '0'; date [7] = now [0] % 10 + '0'; date [8] = EOS; time [0] = now [3] / 10 + '0'; time [1] = now [3] % 10 + '0'; time [2] = '/'; time [3] = now [4] / 10 + '0'; time [4] = now [4] % 10 + '0'; time [5] = ':'; time [6] = now [5] / 10 + '0'; time [7] = now [5] % 10 + '0'2) c = tmp[1] else { lower (tmp) for (i = 1; i < 170; i = i + 5) /* should use binary search here */ if (equal (tmp, text (i + 1)) == YES) break if (i < 170) c = text[i] else c = default } return[c] } ----- end comment out */ /* upper - fold all alphas to upper case */ upper (token) char *token; { int i; for (i = 0; token[i] != EOS; i++) { token[i] = toupper(token[i]); } } /* lower - fold all letters to lower case */ lower (token) char *token; { int i; for (i = 0; token [i] != EOS; i++) { token [i] = tolower(token [i]); } } /* ctoc - copy the from string. Truncate after len chars */ ctoc (from, to, len) int len; char *from, *to; { int i; for (i = 0; i < len && from [i] != EOS; i++) { to [i] = from [i]; } to [i] = EOS; return (i); } /* fold - fold all letters in a string to lower case */ fold (token) char *token; { lower (token); } /* itoc - convert int int to char strin; time [8] = EOS; ----- end comment out */ } /* getnow - return pointer to current time and date */ char * getnow () { if (sys_date [0] == EOS) { putlin("\nEnter date: \n", SYS_TERM); getlin(sys_date, SYS_TERM); if (sys_date [0] == EOS) { sys_date [0] == ' '; sys_date [1] == EOS; } } return(sys_date); /* comment out ----- set now [], date [] now [0] = 1981; /* the year */ now [1] = 1; /* the month */ now [2] = 1; /* the day */ now [3] = 23; /* the hour (24-hour clock) */ now [4] = 59; /* the minute of the hour */ now [5] = 59; /* the second of the minute */ now [6] = 999; /* the millisecond */ ----- end comment out */ } /* wkday - get day-of-week corresponding to month,day,year */ int wkday (month, day, year) int month, day, year; { month = month - 2; if (month <= 0) { month = month + 12; year--; } return ( ((day + (26 * month - 2) /10 +year +year/4 -34) % 7)+ 1 ); }  /* _chkacc - check access parameter */ BOOL _chkacc(access) int access; { if (access == READ || access == WRITE) { return (YES); } if (access == READWRITE) { error("READWRITE access not supported\n"); } else if (access == APPEND) { error("APPEND access not supported\n"); } else { printf("access = %d\n",access); error("unknown file access type\n"); } return(NO); } /* _getunit - return an available file unit number */ int _getunit() { int i, j; /* search sys_bufn [] for unit i */ for (i = SYS_STD; i < MAXOFILES + MAXOFILES; i++) { if (sys_spec [i] != ERR) { continue; } for (j = 0; j < SYS_STD + MAXOFILES; j++) { if (sys_bufn [j] == i) { /* buffer i in use */ break; } } if (j == SYS_STD + MAXOFILES) { /* free buffer found */ return(i); } } return(ERR); } /* _open1 - internal open routine */ BOOL _open1(unit, filename, access) int unit; char *filename; int access; { FILEDES fd; int /* echo command line arguments * source: echo.bds * version: July 17, 1981 */ /* echo - echo command line arguments */ # include symbol definitions DRIVER(echo) integer i integer getarg character buf (MAXARG) call query ("usage: echo [args].") for (i = 1; getarg (i, buf, MAXARG) != EOF; i = i + 1) { if (i != 1) call putch (BLANK, STDOUT) call putlin (buf, STDOUT) } if (i != 1) call putch (NEWLINE, STDOUT) } /* I/O routines and primitives for software tools * source: newfile.bds * version: November 25, 1981 * * This file is the version of August 9, 1981 * put in alphabetical order. */ #include tools.h /* make the calls to buffered BDS routines more visible */ #define BDS_fclose _fclose #define BDS_fcreat _fcreat #define BDS_fflush _fflush #define BDS_fopen _fopen #define BDS_getc _getc #define BDS_gets _gets #define BDS_gchar _getchar #define BDS_fopen diskunit; char *iobuf; if (unit < 0 || unit >= SYS_STD + MAXOFILES) { sys_error("_open1: bad unit\n"); } /* fill in access mode */ if (_chkacc(access) == NO) { return(NO); } else { sys_acc [unit] = access; } /* check for special files */ if (equal (filename, TERMINAL)) { sys_spec [unit] = SYS_TERM; return(YES); } else if (equal (filename, PRINTER)) { if (access == READ) { return(NO); } else { sys_spec [unit] = SYS_PRT; return(YES); } } if (unit < SYS_STD) { /* find a disk file slot */ if ((diskunit = _getunit()) == ERR) { return(NO); } } else { diskunit = unit; } iobuf = sys_bufs + ((diskunit - SYS_STD) * BUFSIZ); if (access == READ) { fd = BDS_fopen(filename, iobuf); if (fd == ERR) { return(NO); } else { /* open system tables */ sys_bufp [unit] = iobuf; sys_bufn [unit] = diskunit; return(YES); } } if (access == WRITE) { /* erase the file if it exists ! */ fd = _fopen #define BDS_putc _putc #define BDS_pchar _putchar #define BDS_rename _rename #define BDS_unlink _unlink /* This file contains: _assign _chkacc _getunit _open1 close creat fcopy flush getc getch getch1 getlin isatty mkuniq note open prompt putc putch putch1 putdec putint putlin putstr readf remove rename seek writef */ /* _assign - open a file for STDIN, STDOUT, or ERROUT * redirect I/O to that file. */ BOOL _assign(unit, filename, access) int unit; char *filename; int access; { BOOL _open1(); if (unit < 0 || unit >= SYS_STD) { sys_error("_assign\n"); } if (access == READ && unit != STDIN) { return(NO); } if (access == WRITE && unit == STDIN) { return(NO); } /* open the unit */ if (_open1(unit, filename, access) == NO) { return(NO); } /* comment out ----- printf("assign: unit = %d name = %s\n",unit,filename); ----- end comment out */ return(YES); } BDS_fcreat (filename, iobuf); if (fd == ERR) { return(NO); } else { /* open system tables */ sys_bufp [unit] = iobuf; sys_bufn [unit] = diskunit; return(YES); } } /* unknown access */ return(NO); } /* close - close unit */ close (unit) int unit; { if (unit < 0 || unit >= SYS_STD + MAXOFILES) { return; } else if (sys_spec [unit] != ERR) { if ( unit == STDIN || unit == STDOUT || unit == ERROUT ) { sys_spec [unit] = SYS_TERM; } else { sys_spec [unit] = ERR; } } if (sys_bufp [unit] == ERR) { return; } /* write end of file mark and flush for output files */ if (sys_acc [unit] != READ) { putch (CPMEOF, unit); flush (unit); } /* close the file */ BDS_fclose(sys_bufp [unit]); sys_bufp [unit] = ERR; sys_bufn [unit] = ERR; } /* create - create a clean file * erase it if it exists. */ int create (filename, access) char *filename; int access; { int ue [0] == (CPMEOF & 0xff)) { return(EOF); } for (i = 0; line [i] != EOS; i++) { ; } return (i); } for (i = 0; i < MAXLINE - 1; i++) { c = getch(unit); if (c == EOF) { line [i] = EOS; return (EOF); } else if (c == NEWLINE) { line [i] = c; line [i + 1] = EOS; return (i); } else { line [i] = c; } } line [MAXLINE-1] = EOS; return (MAXLINE); } /* isatty - determine if file is a teletype/CRT device */ BOOL isatty (unit) int unit; { int type; if (sys_bufp [unit] != ERR) { /* disk file */ return(NO); } else if (sys_spec [unit] != ERR) { /* special file */ return(YES); } else { /* unit not open */ return(NO); } } /* mkuniq - make a scratch file name based on 'seed' */ mkuniq (seed, name) char seed[], name[]; { /* name is $$A.$$$ through $$Z.$$$ */ scopy ("$$", 0, name, 0); name [2] = seed + 'A'; scopy (".$$$", 0, name, 3); } /* note - determine current file position */ notenit; BOOL _open1(); if (access != WRITE) { error("in create: bad access mode\n"); } if ((unit = _getunit()) == ERR) { return(ERR); } if (_open1(unit, filename, WRITE) == NO) { return(ERR); } else { return(unit); } } /* fcopy - copy file in to file out */ fcopy (in, out) int in, out; { char line [MAXLINE]; while (getlin (line, in) != EOF) { putlin (line, out); } } /* flush - flush file's output buffer */ flush (unit) int unit; { if (unit < 0 || unit >= SYS_STD + MAXOFILES) { error("flush: bad unit\n"); } if (sys_bufp [unit] == ERR) { return; } /* flush buffer */ if (sys_acc [unit] != READ) { BDS_fflush(sys_bufp [unit]); } } /* getc - get char from STDIN */ int getc(c) char c; { return(getch(STDIN)); } /* getch - get a character from a file * return the character and set c to character. * Note: this is a change from Software Tools */ int getch (unit) int unit; { in (unit, offset) int unit; int offset[2]; { error("note() not implemented\n"); } /* open - open a file */ int open (filename, access) char *filename; int access; { int unit; BOOL _open1(); /* get an available file number */ if ((unit = _getunit()) == ERR) { return(ERR); } /* open the file */ if (_open1(unit, filename, access) == NO) { return(ERR); } else { return(unit); } } /* prompt - write to/read from teletype */ prompt (str, buf, unit) char *str, *buf; int unit; { int i; if (isatty(unit) == YES) { putlin (str, unit); flush (unit); } getlin (buf, unit); } /* putc - put char c onto STDOUT * return c */ int putc (c) char c; { return (putch (c, STDOUT)); } /* putch - put char 'c' to a file * return 'c' */ int putch (c, unit) { /* check unit once here */ if (unit < 0 || unit >= SYS_STD + MAXOFILES) { error("in putch: bad unit\n"); } /* add carriage returns before LF (NEt c; /* check unit once here */ if (unit < 0 || unit >= SYS_STD + MAXOFILES) { error("in getch: bad unit\n"); } /* ignore all carriage returns */ while ((c = getch1(unit)) == CR) { ; } return(c); } int getch1 (unit) int unit; { int c; if (sys_bufp [unit] != ERR) { c = BDS_getc(sys_bufp [unit]); if (c == CPMEOF) { return(EOF); } else { return(c); } } else if (sys_spec [unit] == SYS_TERM) { c = BDS_gchar(); if (c == CPMEOF) { return(EOF); } else { return(c); } } else { error("getch: unit not open\n"); } } /* getlin - get a line from a unit * return number of chars in the line. */ int getlin (line, unit) char *line; int unit; { int i; int c; if (unit < 0 || unit >= SYS_STD + MAXOFILES) { error("getlin: bad unit\n"); } if ( sys_bufp [unit] == ERR && sys_spec [unit] == SYS_TERM ) { /* allow delete char & line functions */ BDS_gets(line); if (linWLINE) */ if (c == NEWLINE) { putch1 (CR, unit); } return(putch1 (c, unit)); } int putch1 (c, unit) char c; int unit; { if (sys_bufp [unit] != ERR) { return(BDS_putc(c, sys_bufp [unit])); } else if (sys_spec [unit] == SYS_TERM) { return(BDS_pchar(c)); } else if (sys_spec [unit] == SYS_PRT) { bdos(5,c); return(c); } else { error("in putch: unit not open\n"); } } /* putdec - put decimal int n in field width >= w */ putdec(n,w) int n, w; { char chars [MAXCHARS]; int i, nd; nd = itoc (n, chars, MAXCHARS); for (i = nd; i < w; i++) { putc (' '); } for (i = 0; i < nd; i++) { putc (chars[i]); } } /* putint - output int in specified field */ putint (n, w, unit) int n, w; int unit; { char chars [MAXCHARS]; itoc (n, chars, MAXCHARS); putstr (chars, w, unit); } /* putlin - output a line to a unit */ putlin (line, unit) char *line; int unit; { int i; for (i = 0; line [i] != EOS; i++) { putch (line in: "); remark (line); _exit(); } /* remark - print error message and continue */ remark(line) char *line; { putlin (line, ERROUT); } ontinue */ remark(line) char *line; { putlin (line, ERROUT); } ) { return(ERR); } /* Pattern and set routines for Software Tools * source: pattern.bds * version: November 26, 1981 */ /* note: only addstr() and addset are translated and debugged */ #include tools.h /* addstr - add s to str[j] if it fits, increment j */ addstr (s, str, j, maxsiz) char *s, *str; int *j, maxsiz; { int i; for (i = 0; s[i] != EOS; i++) { if (addset (s[i], str, j, maxsiz) == NO) { return(NO); } } return(YES); } /* comment out ---------- /* catsub - add replacement text to end of new */ catsub (lin, from, to, sub, new, k, maxnew) char *lin; int from [10], to [10]; char *sub, *new; int k, maxnew; { int i, j, ri; for (i = 0; sub[i] != EOS; i++) { if (sub[i] == DITTO) { i++; ri = [i], unit); } } /* putstr - output char string in specified field */ putstr (str, w, unit) char *str; int w; int unit; { int i, len; len = length (str); /* output leading blanks blanks */ for (i = len; i < w; i++) { putch (' ', unit); } /* output string */ for (i = 0; i < len; i++) { putch (str [i], unit); } /* output trailing blanks */ for (i = (-w) - len; i > 0; i--) { putch (' ', unit); } } /* readf - read 'n' bytes/words/whatever from file fd */ readf (buf, n, unit) char *buf; int n; int unit; { int i; for (i = 0; i < n; i++) { if ((buf [i] = getch(unit)) == EOF) { buf[i] = EOS; return (EOF); } } buf[i] = EOS; return (i); } /* remove - remove a file from the file system */ BOOL remove (filename) char *filename; { return (BDS_unlink(filename)); } /* rename - change old file name to new file name */ BOOL rename (old, new) char *old, *new; { BDS_rename(old, new); return(OK); } /* writef - w sub[i] + 1; for (j = from [ri]; j < to [ri]; j++) { addset (lin[j], new, k, maxnew); } } else { addset (sub[i], new, k, maxnew); } } } /* getpat - convert str into pattern */ getpat (str, pat) char *str, *pat; { return (makpat (str, 1, EOS, pat)); } /* maksub - make substitution string in sub */ maksub (arg, from, delim, sub) char *arg; int from; char delim; char *sub; { int i, j; j = 1; for (i = from; arg[i] != delim && arg[i] != EOS; i++) { if (arg[i] == AND) { addset (DITTO, sub, j, MAXPAT); addset (0, sub, j, MAXPAT); } else if ( arg[i] == ESCAPE && type(arg[i + 1]) == DIGIT ) { i++ addset (DITTO, sub, j, MAXPAT); addset (arg[i] - DIG0, sub, j, MAXPAT); } else { addset (esc (arg, i), sub, j, MAXPAT); } } if (arg[i] != delim) { /* missing delimiter */ return(ERR); } else if (addset (EOS, sub, j, MAXPAT) == NO) { /* no room */ return(ERR); } else { rrite 'n' bytes/words/whatever to file */ writef (buf, n, unit) char *buf; int n; int unit; { int i; for (i = 0; i < n; i++) { if (buf[i] == EOS) { break; } putch (buf[i], unit); } return (i); } /* Miscellaneous routines for Software Tools * source: misc.bds * version: July 26, 1981 */ #include tools.h /* routines on this file: cant error query */ /* query - print usage message if user has typed '?' */ query (mesg) char *mesg; { char *p; p = getarg(1); if ( p [0] == '?' && p [1] == EOS) { error (mesg); } } /* cant - print "file: can't open" and terminate execution */ cant (file) char *file; { putlin ("Can't open: ", ERROUT); putlin (file, ERROUT); endst(); } /* error - print message and terminate execution */ error (line) char *line; { remark (line); endst(); } /* system error - don't try to close files ! */ sys_error (line) char *line; { remark ("System erroreturn(i); } } /* makpat --- make pattern from arg (from) * terminate at delim */ int makpat (arg, from, delim, pat) char *arg; int from; char delim; char *pat; { int i, j, lastcl, lastj, lj; int tagnst, tagnum, tagstk[9]; /* pat index */ j = 1; lastj = 1; lastcl = 0; tagnum = 0; tagnst = 0; for (i = from; arg[i] != delim && arg[i] != EOS; i++) { lj = j; if (arg[i] == ANY) { addset (ANY, pat, j, MAXPAT); } else if (arg[i] == BOL & i == from) { addset (BOL, pat, j, MAXPAT); } else if (arg[i] == EOL & arg (i + 1) == delim){ addset (EOL, pat, j, MAXPAT); } else if (arg[i] == CCL) { if (getccl (arg, i, pat, j) == ERR) { return (ERR); } } else if (arg[i] == CLOSURE & i > from) { lj = lastj; if ( pat (lj) == BOL || pat (lj) == EOL || pat (lj) == CLOSURE || pat (lj) == START_TAG || pat (lj) == STOP_TAG ) { break; } lastcl = stclos(pat, j, lastj, l if (pat [n] == CHAR | pat [n] == START_TAG | pat [n] == STOP_TAG) patsiz = 2 else if (pat [n] == BOL | pat [n] == EOL | pat [n] == ANY) patsiz = 1 else if (pat [n] == CCL | pat [n] == NCCL) patsiz = pat (n + 1) + 2 else if (pat [n] == CLOSURE) /* optional */ patsiz = CLOSIZE else error ("in patsiz: can't happen.") return } /* filset --- expand set at array [i] into set [j], * stop at delim. */ filset (delim, array, i, set, j, maxset) char delim; char *array; int i; char *set; int *j; int maxset; { string digits "0123456789" string lowalf "abcdefghijklmnopqrstuvwxyz" string upalf "ABCDEFGHIJKLMNOPQRSTUVWXYZ" for ( ; array [i] != delim && array [i] != EOS; i++) { if (array [i] == ESCAPE) { addset (esc(array,i), set, *j, maxset); } else if (array [i] != DASH) { addset (array [i], set, j, maxset); } else if (j <= 1 | array (i + 1) == EOS) { /* literal - */ addset (DASH, set, j, maxset); } else if astcl); } else if (arg[i] == START_TAG) { if (tagnum >= 9) { /* too many tagged sub-patterns */ break; } tagnum++; tagnst++; tagstk [tagnst] = tagnum; addset (START_TAG, pat, j, MAXPAT); addset (tagnum, pat, j, MAXPAT); } else if (arg[i] == STOP_TAG & tagnst > 0) { addset (STOP_TAG, pat, j, MAXPAT); addset(tagstk[tagnst], pat, j, MAXPAT); tagnst--; } else { addset (CHAR, pat, j, MAXPAT); addset (esc (arg, i), pat, j, MAXPAT); } lastj = lj; } if (arg[i] != delim) { /* terminated early */ return(ERR); } else if (addset (EOS, pat, j, MAXPAT) == NO) { /* no room */ return(ERR); } else if (tagnst != 0) { return(ERR); } else { return(i); } } /* stclos --- insert closure entry at pat [j] */ stclos (pat, j, lastj, lastcl) char pat (MAXPAT) int j, lastj, lastcl { int addset int jp, jt, junk for (jp = j - 1; jp >= lastj; jp = jp - 1) { /* make a hole */ jt = jp + CLOSIZE (index (digits, set (j - 1)) > 0) { dodash (digits,array,i,set,j,maxset); } else if (index (lowalf, set (j - 1)) > 0) dodash (lowalf,array,i,set,j,maxset); } else if (index (upalf, set (j - 1)) > 0) { dodash (upalf,array,i,set,j,maxset); } else { addset (DASH, set, j, maxset); } } } /* locate --- look for c in char class at pat (offset) */ int locate (c, pat, offset) char c; char *pat; int offset; { int i /* size of class is at pat (offset), chars follow */ for (i = offset + pat [offset]; i > offset; i--) { if (c == pat [i]) { return (YES); } } return (NO) } /* dodash - expand array (i-1)-array (i+1 * into set [j]... from valid */ subroutine dodash (valid, array, i, set, j, maxset) int i, j, maxset char valid (ARB), array (ARB), set (maxset) char esc int junk, k, limit int addset, index i = i + 1 j = j - 1 limit = index (valid, esc (array, i)) for (k = index (valid, set [j]); k <= limit; k junk = addset (pat (jp), pat, jt, MAXPAT) } j = j + CLOSIZE stclos = lastj /* put closure in it */ junk = addset (CLOSURE, pat, lastj, MAXPAT) /* COUNT */ junk = addset (0, pat, lastj, MAXPAT) /* PREVCL */ junk = addset (lastcl, pat, lastj, MAXPAT) /* START */ junk = addset (0, pat, lastj, MAXPAT) return } /* getccl --- expand char class at arg [i] into pat [j] */ getccl (arg, i, pat, j) char arg (MAXARG), pat (MAXPAT) int i, j { int jstart, junk int addset i = i + 1 /* skip over [ */ if (arg [i] == NOT) { junk = addset (NCCL, pat, j, MAXPAT) i = i + 1 } else junk = addset (CCL, pat, j, MAXPAT) jstart = j /* leave room for count */ junk = addset (0, pat, j, MAXPAT) filset (CCLEND, arg, i, pat, j, MAXPAT) pat (jstart) = j - jstart - 1 if (arg [i] == CCLEND) getccl = OK else getccl = ERR return } /* patsiz --- returns size of pattern entry at pat [n] */ int function patsiz (pat, n) char pat (MAXPAT) int n = k + 1) junk = addset (valid [k], set, j, maxset) return } ---------- end comment out */ /* addset - put c in string [j] if it fits, increment j * * calling sequence: addset (c, str, &j, maxsiz); */ BOOL addset (c, str, j, maxsiz) char c; char *str; int *j; int maxsiz; { if (*j >= maxsiz) { return(NO); } else { str[(*j)++] = c; return(YES); } } /* comment out ---------- /* esc - map array [i] into escaped char if appropriate */ char esc (array, i) char *array; int i; if (array [i] != ESCAPE) { return(array [i]); } else if (array (i+1) == EOS) { /* @ not special at end */ return(ESCAPE); } else { i++; if ( array [i] == 'n' || array [i] == 'N') { return(NEWLINE); } else if (array [i] == 't' || array [i] == 'T'){ return(TAB); } else { return(array [i]); } } } /* match --- find match anywhere on line */ match (lin, pat) char *lin, *pat; { int i, junk[9] for (i = 0;  0; } } else if (pat [j] == ANY) { if (lin [i] != NEWLINE) { bump = 1; } } else if (pat [j] == EOL) { if (lin [i] == NEWLINE) { bump = 0; } } else if (pat [j] == CCL) { if (locate (lin [i], pat, j + 1) == YES) { bump = 1; } } else if (pat [j] == NCCL) { if ( lin [i] != NEWLINE && locate (lin [i], pat, j + 1) == NO ) { bump = 1; } } else { error ("in omatch: can't happen."); } if (bump >= 0) { *i += bump; return(YES); } else { return(NO); } } ---------- end comment out */ /* BDS C program to convert from RATFOR to C style comments * source: rat2c.bds * version: May 21, 1981. */ /* define globals */ #include bdscio.h #define YES 1 #define NO 0 #define EOS 0 #define CR 13 #define LF 10 #define VERSION "ver: May 21, 1981" #define SIGNON "Welcome to RAT4 to C comment converter. " int input; int output; char buffer[lin[i] != EOS; i++) { if (amatch (lin, i, pat, junk, junk) > 0) { return(YES); } } return(NO); } /* amatch --- (non-recursive) look for match * starting at lin (from) */ amatch (lin, from, pat, tagbeg, tagend) char lin (MAXLINE), pat (MAXPAT) int from, tagbeg (10), tagend (10) { int i, j, offset, stack; for (i = 1; i <= 10; i = i + 1) { tagbeg [i] = 0; tagend [i] = 0; } tagbeg [1] = from; stack = 0; offset = from; /* next unexamined input char */ for (j = 1; pat [j] != EOS; j = j + patsiz (pat, j)) { if (pat [j] == CLOSURE) { /* a closure entry */ stack = j /* step over closure */ j += CLOSIZE for (i = offset; lin [i] != EOS; ) { /* match as many as possible */ if (omatch(lin,i,pat,j) == NO){ break; } } pat (stack + COUNT) = i - offset; pat (stack + START) = offset; /* char that made us fail */ offset = i; } else if (pat [j] == START_TAG) { i = pat (j + 1); 100]; /* general buffer */ char inbuf[BUFSIZ]; /* input file buffer */ char outbuf[BUFSIZ]; /* output file buffer */ /* convert one file after another interactively */ main() { /* sign on */ puts(SIGNON); puts(VERSION); ccrlf(); /* mark files as closed */ input = -1; output = -1; while (1) { if (openio() == NO) { closeio(); break; } convert(); closeio(); } puts("End of comment converter"); ccrlf(); } /* open an input and output file. * the input file must exist. * the output file must not exist. * return NO if the user gives up by entering a null file name. */ openio() { if (openin() == NO) { return(NO); } else { return(openout()); } } /* open the input file, which must exist. * keep trying until the file is open or the user gives up. */ openin() { while (1) { ccrlf(); puts("input file ? "); gets(buffer); if (buffer[0] == EOS) { return(NO); } input = fopen (buffer,inbuf); if (input == -1 tagbeg (i + 1) = offset; } else if (pat [j] == STOP_TAG) { i = pat (j + 1) tagend (i + 1) = offset } else if (omatch (lin, offset, pat, j) == NO) { /* non-closure */ for ( ; stack > 0; stack = pat (stack + PREVCL)) if (pat (stack + COUNT) > 0) break if (stack <= 0) { /* stack is empty */ amatch = 0 /* return failure */ return } pat (stack + COUNT) = pat (stack + COUNT) - 1 j = stack + CLOSIZE offset = pat (stack + START) + pat (stack + COUNT) } } /* else omatch succeeded */ amatch = offset; tagend [1] = offset; return; /* success */ } /* omatch --- try to match a single pattern at pat [j] * increment i. */ BOOL omatch (lin, i, pat, j) char *line; int *i; char *pat; int j; { int bump; if (lin [i] == EOS) { return(NO); } bump = -1; if (pat [j] == CHAR) { if (lin [i] == pat [j + 1]) { bump = 1; } } else if (pat [j] == BOL) { if (i == 1) { bump =) { ccrlf(); puts("file not found"); } else { return(YES); } } } /* open the output file, which must not exist. * keep trying until the file is open or the user gives up. */ openout() { while (1) { ccrlf(); puts("Output file ? "); gets(buffer); if (buffer[0] == EOS) { return(NO); } /* make sure the file does not exist */ output = fopen(buffer,outbuf); if (output != -1) { ccrlf(); puts("File exists"); fclose(outbuf); continue; } output = fcreat(buffer,outbuf); if (output == -1) { ccrlf(); puts("disk error"); } else { return(YES); } } } /* close any open files */ closeio() { if (input != -1) { fclose(inbuf); } if (output != -1) { fflush(outbuf); fclose(outbuf); } } /* copy input file to output file. * convert everything following a '#' on a line into * a C style comment. */ convert() { /* copy one line at a time */ while (do1line() == NO) { ; } } ; } else { /* open for writing */ return(BDS_open(filename,1)); } } /* The following routines came from STDLIB1.C They all use this stucture: #define NSECTS 8 Number of sectors to buffer in ram note: (NSECTS * SECSIZ + 6) = sizeof(struct_buf) #define BUFSIZ (NSECTS * SECSIZ + 6 ) Don't touch this struct _buf { Or this... int _fd; returned by BDS_open int _nleft; char *_nextp; char _buff[NSECTS * SECSIZ]; }; */ int _fopen(filename,iobuf) struct _buf *iobuf; char *filename; { if ((iobuf -> _fd = BDS_open(filename,0)) < 0) { return(ERROR); } iobuf -> _nleft = 0; return iobuf -> _fd; } int _getc (iobuf) struct _buf *iobuf; { int nsecs; /* comment out ----- if (iobuf == 0) return getchar(); if (iobuf == 3) return bdos(3); ----- end comment out */ if (iobuf -> _nleft--) { return *iobuf -> _nextp++; } nsecs = BDS_read(iobuf -> _fd, iobuf -> _buff, NSECTS); if (nsecs <= 0) { return iobuf -> _nleft++; }  /* copy one line from input file to output file. * return YES if end of file has been seen. */ do1line() { int c; /* the current character */ int comflag; /* YES means in comment */ /* start off each line not in a comment */ comflag=NO; while (1) { /* get next character from input */ c = getc(inbuf); if ( (c == -1) || (c == 0x1a) ) { /* end of file */ if (comflag == YES) { /* finish comment */ putc(' ',outbuf); putc('*',outbuf); putc('/',outbuf); } /* output end of file mark */ putc(0x01a,outbuf); return(YES); } else if ((comflag == NO) & (c == '#') ) { /* start of comment */ comflag = YES; putc('/',outbuf); putc('*',outbuf); putc(' ',outbuf); } else if (c == CR) { /* end line. assume LF will follow */ c = getc(inbuf); if (comflag == YES) { /* finish comment */ putc(' ',outbuf); putc('*',outbuf); putc('/',outbuf); } /* finish line */ putc(CR,outbuf); p iobuf -> _nleft = nsecs * SECSIZ - 1; iobuf -> _nextp = iobuf -> _buff; return *iobuf->_nextp++; } int _fcreat(name,iobuf) char *name; struct _buf *iobuf; { if ((iobuf -> _fd = BDS_creat(name)) < 0 ) { return ERROR; } iobuf -> _nextp = iobuf -> _buff; iobuf -> _nleft = (NSECTS * SECSIZ); return iobuf -> _fd; } int _putc (c,iobuf) char c; struct _buf *iobuf; { int nsecs; /* comment out ----- if (iobuf == 1) return putchar(c); if (iobuf == 2) return (bdos(5,c)); if (iobuf == 3) return (bdos(4,c)); ----- end comment out */ if (iobuf -> _nleft--) { return *iobuf -> _nextp++ = c; } nsecs = BDS_write(iobuf->_fd, iobuf->_buff, NSECTS); if (nsecs != NSECTS) { return ERROR; } iobuf -> _nleft = (NSECTS * SECSIZ - 1); iobuf -> _nextp = iobuf -> _buff; return *iobuf -> _nextp++ = c; } int _fflush(iobuf) struct _buf *iobuf; { int i; /* comment out ----- if (iobuf < 4) return OK; ----- end comment out */ if (iobuf -> _nlefutc(LF,outbuf); /* no EOF seen yet */ return(NO); } else { /* just copy next character */ putc(c,outbuf); } } } /* output CR and LF to console */ ccrlf() { putchar(CR); putchar(LF); } n a comment */ comflag=NO;/* Lowest level file routines for Software Tools * Used by File primitives * * source: rawfile.bds * version: July 23, 1981 */ #include tools.h /* make calls to raw BDS file routines more visible */ #define BDS_close _close #define BDS_creat _creat #define BDS_flush _flush #define BDS_open _open #define BDS_read _read #define BDS_seek _seek #define BDS_unlink _unlink #define BDS_write _write /* routines on this file: _creat _fcreat _fclose _fflush _fopen _getc _putc */ /* The following routines are replacements for routines * on STDLIB2.CRL */ BDS_creat (filename) char *filename; { _unlink (filename); /* call BDOS create function */ if (bdos (22,0x5c) == 255) { return(ERR)t == (NSECTS * SECSIZ)) { return OK; } i = NSECTS - iobuf->_nleft / SECSIZ; if (BDS_write(iobuf -> _fd, iobuf -> _buff, i) != i) { return ERROR; } i = (i-1) * SECSIZ; if (iobuf -> _nleft) { movmem(iobuf->_buff + i, iobuf->_buff, SECSIZ); iobuf -> _nleft += i; iobuf -> _nextp -= i; return BDS_seek(iobuf->_fd, -1, 1); } iobuf -> _nleft = (NSECTS * SECSIZ); iobuf -> _nextp = iobuf -> _buff; return OK; } int _fclose(iobuf) struct _buf *iobuf; { /* comment out ----- if (iobuf < 4) return OK; ----- end comment out */ return BDS_close(iobuf -> _fd); }  *iobuf -> _nextp++ /* software tools format program -- C version -- Part 1 * source: roff1.bds * version: November 27, 1981. */ #define VERSION "November 27, 1981" #include tools.h #include roff.h main(argc, argv) int argc; char **argv; { initst(argc, argv); main1(); endst(); } main1() { /* include: cpage, cparam, cout */ char *arg; int i, fd, nf; finit();  { tbuf [j++] = buf [i - k1]; } for (k1 = k; k1 > 0; k1--) { tbuf [j++] = BACKSPACE; } for (k1 = k; k1 > 0; k1--) { tbuf [j++] = buf [i - k1]; } /* copy delimiter */ tbuf [j++] = buf [i]; /* reset counter */ k = 0; if (buf [i] == NEWLINE) { break; } } } tbuf [j] = EOS; if (j >= size) { sys_error("bold"); } /* copy tbuf back to buf */ scopy(tbuf, 0, buf, 0); } /* brk - end current filled line */ brk() { /* include cout */ if (outp > 0) { outbuf [outp++] = NEWLINE; outbuf [outp] = EOS; put(outbuf); } outp = 0; outw = 0; outwds = 0; } /* center - center a line by setting tival */ center(buf) char buf []; { /* include cparam */ tival = max( (rmval + tival - width(buf)) / 2, 0); } /* command - perform formatting command */ command(buf) char *buf; { /* include: cpage, cparam, cfiles, cnr */ char name [MAXLINE], defn[MAXDEF]; int val, argtyp; /* command line va query("usage: ROFF [-s] [+n] [-n] [-pon] [files]\n"); putlin("Welcome to roff version 0b:, ",SYS_TERM); putlin(VERSION, SYS_TERM); putlin("\n",SYS_TERM); /* open all files. examine options */ nf = 0; /* number of open files */ for (i = 1; (arg = getarg(i)) != EOS; i++) { /* -s option: stop after each page */ if (arg [0] == '-' && tolower(arg[1]) == 's') { stopx = YES; } /* -po n option: page offset */ else if ( arg [0] == '-' && tolower(arg [1]) == 'p' && tolower(arg [2]) == 'o' ) { set (&offset, atoi(arg + 3), arg [3], 0, 0, rmval - 1); } /* + n option: start printing with page n */ else if (arg [0] == '+') { frstpg = atoi(arg + 1); } /* - n option: stop printing after page n */ else if (arg [0] == '-' && arg[1] != EOS) { lastpg = atoi(arg + 2); } /* - or filename option: process input */ else { if (arg [0] == '-') { fd = STDIN; } else { fd =lues */ int spval; /* temp spacing param */ int ismacro; int i, j; /* must look for macros before expanding escapes */ i = 1; getwrd(buf, &i, name); ismacro = ludef(name, defn); doesc(buf, name, MAXLINE); /* get value of argument following command */ i = 0; while ( buf [i] != ' ' && buf [i] != TAB && buf [i] != NEWLINE ) { i++; } /* warning: i used below as index into buf */ val = getval(buf, &i, &argtyp); if (ismacro == YES) { /* evaluate args. push back definition */ eval(buf, defn); return; } if (lu(buf,"fi")) { brk(); fill = YES; } else if (lu(buf,"br")) { brk(); } else if (lu(buf,"nf")) { brk(); fill = NO; } else if (lu(buf,"ls")) { set(&lsval, val, argtyp, 1, 1, HUGE); } else if (lu(buf,"ce")) { brk(); set(&ceval, val, argtyp, 1, 0, HUGE); } else if (lu(buf,"ul")) { cuval = 0; set(&ulval, val, argtyp, 0, 1, HUGE); } else if (lu(buf,"bd")) { set(&boval,  open(arg, READ); } if (fd == ERR) { cant(arg); continue; } /* process one file */ doroff(fd); nf++; if (fd != STDIN) { close(fd); } } } /* end of for loop */ /* if no input files, do STDIN */ if (nf == 0) { doroff(STDIN); } /* end gracefully */ brk(); if ( plval <= 100 && (lineno > 0 || outp > 0) ) { /* flush last output */ space(HUGE); } /* comment out ----- disable pagecontrol ifdef(PAGECONTROL, putc(PAGEJECT); putc(NEWLINE); ) ----- end comment out */ } /* bold - bold-face or overstrike a line */ bold(buf, tbuf, size) char *buf, *tbuf; int size; { int i, j, k, k1; /* expand into tbuf */ k = 0; j = 0; for (i = 0; ; i++) { if ( buf [i] != ' ' && buf [i] != TAB && buf [i] != BACKSPACE && buf [i] != STARTU && buf [i] != STOPU && buf [i] != NEWLINE ) { k++; } else { /* over strike word */ for (k1 = k; k1 > 0; k1--)val, argtyp, 0, 1, HUGE); } else if (lu(buf,"he")) { gettl(buf, ehead, ehlim); gettl(buf, ohead, ohlim); } else if (lu(buf,"fo")) { gettl(buf, efoot, eflim); gettl(buf, ofoot, oflim); } else if (lu(buf,"bp")) { /* perform break explicitly */ brk(); if (lineno > 0) { space(HUGE); } set(&curpag,val,argtyp,curpag+1,-HUGE,HUGE); newpag = curpag; } else if (lu(buf,"sp")) { set(&spval, val, argtyp, 1, 0, HUGE); space(spval); } else if (lu(buf,"in")) { brk(); set(&inval, val, argtyp, 0, 0, rmval-1); tival = inval; } else if (lu(buf,"rm")) { set(&rmval, val, argtyp, PAGEWIDTH, tival + 1, HUGE); } else if (lu(buf,"ti")) { brk(); set(&tival, val, argtyp, 0, 0, rmval); } else if (lu(buf,"pl")) { set(&plval, val, argtyp, PAGELEN, m1val+m2val+m3val+m4val+1, HUGE); bottom = plval - m3val - m4val; } else if (lu(buf,"po")) { set(&offset, val, argtyp, 0, 0, rmval-1); } else if (lu(buf,"m1")) { set(&m1val, v if (spval > lineno && lineno == 0) { phead(); } if (spval > lineno) { space(spval - lineno); } } else { /* ignore unknown commands */ return; } } /* return true if first two characters of buffer matches * the string. */ BOOL lu (buf, string) char *buf, *string; { if ( buf [1] == string[0] && buf [2] == string[1] ) { return(YES); } else { return(NO); } } /* dodef - define a command; .de xx is in buf * read lines until a .en is found */ dodef(buf, fd) char *buf; int fd; { /* include cparam */ char name [MAXNAME], defn [MAXDEF]; int i; /* comment out ----- printf("in dodef: buf = %s\n", buf); ----- end comment out */ /* get name */ i = 0; getwrd(buf, &i, name); i = getwrd(buf, &i, name); /* comment out ----- printf("dodef: name = %s\n", name); ----- end comment out */ if (i == 0) { /* null definition -- ignore */ return; } /* allow arbitrary length names */ i = 0; al, argtyp, 3, 0, plval-m2val-m3val-m4val-1); } else if (lu(buf,"m2")) { set(&m2val, val, argtyp, 2, 0, plval-m1val-m3val-m4val-1); } else if (lu(buf,"m3")) { set(&m3val, val, argtyp, 2, 0, plval-m1val-m2val-m4val-1); bottom = plval - m3val - m4val; } else if (lu(buf,"m4")) { set(&m4val, val, argtyp, 3, 0, plval-m1val-m2val-m3val-1); bottom = plval - m3val - m4val; } else if (lu(buf,"eh")) { gettl(buf, ehead, ehlim); } else if (lu(buf,"oh")) { gettl(buf, ohead, ohlim); } else if (lu(buf,"ef")) { gettl(buf, efoot, eflim); } else if (lu(buf,"of")) { gettl(buf, ofoot, oflim); } else if (lu(buf,"cc")) { /* change command character */ cchar = argtyp; if (cchar == EOS || cchar == NEWLINE) { cchar = '.'; } } else if (lu(buf,"ne")) { if (lineno + val > bottom && lineno <= bottom){ space(val); lineno = 0; } } else if (lu(buf,"bs")) { set(&bsval, val, argtyp, 1, 0, HUGE); } else if (lu(bufwhile (ngetln(buf, fd) != EOF) { /* .en terminates macro definition */ if ( buf [0] == cchar && buf [1] == 'e' && buf [2] == 'n' ) { break; } addstr(buf, defn, &i, MAXDEF); } if (addset(EOS, defn, &i, MAXDEF) == NO) { error("definition too long."); } entdef(name, defn); } /* doesc - expand values of number regs into buf */ doesc(buf, tbuf, size) char *buf, *tbuf; int size; { /* include cnr */ int i, j; j = 0; /* expand into tbuf */ for (i = 0; buf [i] != EOS && j < size; i++) { if (buf [i] != '@') { tbuf [j++] = buf[i]; } else if (buf [i+1] == '@') { /* two at signs count as one */ tbuf [j++] = '@'; i++; } else if ( buf [i+1] == 'n' && isalpha(buf [i+2]) ) { /* @na is request for number reg a */ j += itoc( nr [tolower(buf [i+2])-'a'], tbuf + j, size - j - 1 ); i += 2; } else { tbuf [j++] = buf[i]; } } tbuf [j] =,"ju")) { rjust = YES; } else if (lu(buf,"nj")) { rjust = NO; } else if (lu(buf,"so")) { /* start new source file */ if (getwrd(buf, &i, name) == 0) { return; } if (level + 1 >= MAXOFILES) { error("so commands nested too deeply."); } infile [level+1] = open(name, READ); if (infile [level+1] != ERR) { level++; } } else if (lu(buf,"cu")) { ulval = 0; set(&cuval, val, argtyp, 0, 1, HUGE); } else if (lu(buf,"de")) { dodef(buf, infile [level]); } else if (lu(buf,"nr")) { /* set number register */ if (getwrd(buf, &i, name) == 0) { return; } fold(name); if (name [0] < 'a' || name[0] > 'z') { error("invalid number register name."); } val = getval(buf, &i, &argtyp); set(&nr [name[0]-'a'], val, argtyp, 0, -HUGE, HUGE); } else if (lu(buf,"st")) { /* space to line n from top of page */ if (argtyp == '-') { spval = plval; } else { spval = 0; } set(&spval, val, argtyp, 0, 1, bottom);  EOS; scopy(tbuf, 0, buf, 0); } /* doroff - format text in file fd */ doroff(fd) int fd; { /* include cfiles, cparam */ char inbuf [INSIZE]; infile [0] = fd; for (level = 0; level >= 0; level--) { while (ngetln(inbuf, infile [level]) != EOF) { if (inbuf [0] == cchar) { command(inbuf); } else { text(inbuf); } } /* close an .so file */ if (level > 0 && infile [level] != ERR) { close(infile [level]); } } } /* dotabs - expand tabs in buf */ dotabs(buf, tbuf, size) char *buf, *tbuf; int size; { /* include cparam */ int i, j; /* expand into tbuf */ j = 0; for (i = 0; buf [i] != EOS && j < size; i++) { if (buf [i] == TAB) { while (j < size) { tbuf [j++] = ' '; if ( tabs [j] == YES || j >= INSIZE ) { break; } } } else { tbuf [j++] = buf [i]; } } tbuf [j] = EOS; scopy(tbuf, 0, buf, 0); } /* entdef - enter name and definition in macro table */ entd/* software tools format program -- C version -- Part 2 * source: roff2.bds * version: November 26, 1981. */ #include tools.h /* defs for primitives */ #include roff.h /* finit - set parameters to default values */ finit() { /* include: cparam, cpage, cout, cdefio, cnr, cmac */ int i; /* initialize flags */ cuflag = NO; dir = 0; putflag = NO; /* initialize cparam */ inval = 0; rmval = PAGEWIDTH; tival = 0; lsval = 1; fill = YES; ceval = 0; ulval = 0; boval = 0; cchar = '.'; tjust [0] = LEFT; tjust [1] = CENTER; tjust [2] = RIGHT; bsval = 0; rjust = YES; cuval = 0; for (i = 0; i < INSIZE; i++) { if (i % 8 == 0) { tabs [i] = YES; } else { tabs [i] = NO; } } /* initialize cpage */ lineno = 0; curpag = 0; newpag = 1; plval = PAGELEN; m1val = 3; m2val = 2; m3val = 2; m4val = 3; bottom = plval - m3val - m4val; ehead [0] = NEWLINE; ehead [1] = EOS; ohead [0] = NEWLINE; ohead [1] = EOS; efef (name, defn) char *name, *defn; { /* include cmac */ int i; char *locn; /* comment out ----- printf("entdef: name = %s, defn = \n%s\n",name,defn); ----- end comment out */ if ((locn = lookup (name, mactbl)) != 0) { /* erase old definition */ delete(name, mactbl); } enter (name, defn, mactbl); } /* eval - evaluate defined command; push back definition. * buf contains a call to a macro. * defn contains its definition. * substitute args from buf into definition and * push it all back. */ eval(buf, defn) char *buf, *defn; { int i, j, k; int argptr [10]; /* comment out ----- printf("eval: buf = %s\ndefn = %s\n", buf, defn); ----- end comment out */ /* create null string */ buf [0] = EOS; /* initialize pointers to null string */ for (j = 0; j < 10; j++) { argptr [j] = 0; } /* up to 9 positional arguments are allowed. * $0 refers to command name. */ for (i= 1, j = 0; j < 10; j++) { /oot [0] = NEWLINE; efoot [1] = EOS; ofoot [0] = NEWLINE; ofoot [1] = EOS; ehlim [0] = inval; ehlim [1] = rmval; ohlim [0] = inval; ohlim [1] = rmval; eflim [0] = inval; eflim [1] = rmval; oflim [0] = inval; oflim [1] = rmval; stopx = NO; frstpg = 0; lastpg = HUGE; print = YES; offset = 0; /* initialize cout */ outp = 0; outw = 0; outwds = 0; /* initialize dynamic storage */ /* ----- calling sequence changed ----- */ dsinit(); /* initialize symbol table for macros */ /* ----- calling sequence changed */ mactbl = mktabl(29); /* initialize cdefio */ bp = -1; /* initialize cnr */ for (i = 0; i < 26; i++) { nr [i] = 0; } } /* gettl - copy title from buf to ttl */ gettl(buf, ttl, lim) char *buf, *ttl; int *lim; { /* include: cparam */ int i; /* skip command name */ i = 0; while ( buf [i] != ' ' && buf [i] != TAB && buf [i] != NEWLINE ) { i++; } /* skip to start of title* scan past blanks ending previous argument */ skipbl(buf, &i); if (buf [i] == NEWLINE || buf[i] == EOS) { break; } /* point argptr at arg */ argptr [j] = i; while ( buf [i] != ' ' && buf [i] != TAB && buf [i] != NEWLINE && buf [i] != EOS ) { i++; } /* end argument */ buf [i++] = EOS; /* comment out ----- printf("argptr[%d] = %d,",j, argptr[j]); printf("buf + argptr[%d] = %s\n", j, buf + argptr[j]); ----- end comment out */ } /* push the defintion back in reverse order. * substitute actual parameters for $1 ... $9 * substitute command name for $0 */ for (k = length(defn) - 1; k > 0; k--) { if (defn [k-1] != ARGFLAG) { putbak(defn [k]); } else { if (defn [k] < '0' || defn [k] > '9') { putbak(defn [k]); } else { i = defn [k] - '0'; pbstr(buf + argptr [i]); k--; /* skip over $ */ } } } /* do last character */ if (k >= 0) { putbak(defn [k]); } }  */ skipbl(buf, &i); /* copy titles to ttl */ scopy(buf, i, ttl, 0); /* comment out ----- gettl trace printf("gettl: buf is -->%s\n",buf); printf("gettl: ttl is -->%s\n",ttl); printf("Hit any key to continue\n"); getch(SYS_TERM); ----- end comment out */ /* set limits */ lim [0] = inval; lim [1] = rmval; } /* getval - evaluate optional numeric argument * set i past argument * set argtype to type (numeric or not) * calling sequence: getval (buf, &i, &argtyp); */ getval(buf, i, argtyp) char *buf; int *i, *argtyp; { /* move *i past blanks */ skipbl(buf, i); *argtyp = buf [*i]; if (*argtyp == '+' || *argtyp == '-') { (*i)++; } /* move *i past argument */ return(ctoi(buf, i)); } /* getwrb - get a word; hangs onto trailing blanks * point i past word * calling sequence: getwrb (in, &i, out); */ getwrb(in, ii, out) char *in, *out; int *ii; { int i, j; i = *ii; j = 0; while ( ielete leading blanks, set tival */ leadbl(buf) char *buf; { /* include: cparam */ int i, j; brk(); /* find first non-blank character on the line */ for (i = 0; buf [i] == ' '; i++) { ; } if (buf [i] != NEWLINE) { tival += i; } /* move line to left */ j = 0; while ((buf [j++] = buf [i++])!= EOS) { ; } } /* ludef - look up a macro name * copy the definition to defn * return pointer to definition if found. * Note: this is a change in lookup. */ ludef (name, defn) char *name, *defn; { /* include: cmac */ int i; char *locn; /* comment out ----- printf("in ludef: name = %s\n",name); ----- end comment out */ if ((locn = lookup (name, mactbl)) == 0) { return (NO); } else { scopy (locn, 0, defn, 0); return (YES); } } /* ngetch - get a char from file fd or * the stack of pushed back characters. */ ngetch(fd) int fd; { /* include: cdefio */ if (bp >= 0) { return(pbbuf n [i] != EOS && in [i] != ' ' && in [i] != TAB && in [i] != NEWLINE ) { out [j++] = in [i++]; } /* include trailing blanks */ while (in [i] == ' ') { i++; out [j++] = ' '; } /* supply a blank to end the word if none there */ if ( j > 0 && out [j - 1] != ' ') { out [j++] = ' '; } out [j] = EOS; *ii = i; /* comment out ----- getwrb trace printf("getwrb: out = %s, i = %d, j = %d\n",out,i,j); printf("Hit any key to continue\n"); getch(SYS_TERM); ----- end comment out */ return(j); } /* gfield - get next tab or title field * set i past field * return number of characters copied * calling sequence: gfield(buf, &i, n, temp, delim); */ int gfield(buf, ii, n, temp, delim) char *buf; int *ii; int n; char *temp; char delim; { int i, j; i = *ii; j = 0; if (n > 0) { if (buf [i] == delim) { i++; } while ( buf [i] != delim && buf [i] != EOS && b[bp--]); } else { return(getch(fd)); } } /* ngetln - get next line from f into line */ ngetln(line, fd) char *line; int fd; { int i; int c; i = 0; while (i < MAXLINE - 1 && (c = ngetch(fd)) != EOF) { line [i++] = c; if (c == NEWLINE) { break; } } line [i] = EOS; if (i == 0 && c == EOF) { i = EOF; } return(i); } /* pbstr - push string back onto input */ pbstr(in) char *in; { int i; for (i = length(in) - 1; i >= 0; i--) putbak(in [i]); } /* pfoot - put out page footer */ pfoot() { /* include: cpage */ skip(m3val); if (m4val > 0) { if (curpag % 2 == 0) { puttl(efoot, eflim, curpag); } else { puttl(ofoot, oflim, curpag); } /* comment out ----- pagecontrol ifnotdef(PAGECONTROL, skip(m4val-1) ); ----- end comment out */ skip(m4val-1); } } /* phead - put out page header */ phead() { /* include: cpage */ int c [MAXLINE]; curpag = newpag; /* check whether we should pruf [i] != NEWLINE && j < n ) { temp [j++] = buf [i++]; } } /* skip things between delims */ while ( buf [i] != delim && buf [i] != EOS && buf [i] != NEWLINE ) { i++; } temp [j] = EOS; *ii = i; return(j); } /* jcopy - scopy without copying EOS */ jcopy(from, i, to, j) char *from, *to; int i, j; { while (from [i] != EOS) { to [j++] = from [i++]; } } /* justify - justifies string in its tab column */ justify(in, left, right, type, out) char *in, *out; int left, right, type; { int j, n; n = width(in); if (type == RIGHT) { j = max ( (right - n), 0); jcopy(in, 0, out, j); } else if (type == CENTER) { j = max( (right + left - n) / 2, left); jcopy(in, 0, out, j); } else jcopy(in, 0, out, left); /* comment out ----- justify trace printf("justify: type = %d\n out = %s\n",type,out); printf("Hit any key to continue\n"); getch(SYS_TERM); ----- end comment out */ } /* leadbl - d int this page */ if (curpag >= frstpg && curpag <= lastpg) { print = YES; } else { print = NO; } if (stopx == YES && print == YES) { prmpt(); } newpag++; /* comment out ---------- pagecontrol ifdef(PAGECONTROL, if (stopx == 0 && print == YES) { putc(PAGEJECT); } ) ---------- end comment out */ if (m1val > 0) { skip(m1val-1); if (curpag % 2 == 0) { puttl(ehead, ehlim, curpag); } else { puttl(ohead, ohlim, curpag); } } skip(m2val); lineno = m1val + m2val + 1; } /* prmpt - pause for paper insertion. */ prmpt() { char line [MAXLINE]; putlin("Type return to begin a page",SYS_TERM); getlin(line, SYS_TERM); } /* put - put out line * ALL output eventually comes here via * calls from text() or calls from brk(). */ put(buf) char *buf; { if (lineno == 0 || lineno > bottom) { phead(); } if (print == YES) { put1(buf); } tival = inval; skip (min (lsval - 1, bottom - lineno)); lturn; } left = lim [0]; right = lim [1]; /* calculate the width of the page number and date */ nc = itoc(pageno, chars, MAXLINE - 1); now = getnow(); fmtdat(cdate, tbuf1, now, 0); ncd = length(cdate); delim = buf [0]; /* blank out title field */ for (j = 0; j < right; j++) { ttl [j] = ' '; } /* get the left, center, and right fields */ i = 0; for(n = 0; n < 3 ;n++ ) { /* get next field of title */ if ( gfield ( buf, &i, right - left, tbuf1, delim) > 0 ) { /* substitute page num for '#' */ subst ( tbuf1, PAGENUM, tbuf2, chars, nc); /* substitute date for '%' */ subst ( tbuf2, CURRENTDATE, tbuf1, cdate, ncd); justify ( tbuf1, left, right, tjust [n], ttl); } if ( buf [i] == EOS || buf [i] == NEWLINE ) { break; } } /* trim blanks */ while (ttl [right-1] == ' ') { right--; } ttl [right] = NEWLINE; ttl [right+1] = EOS; /* offset titineno += lsval; if (lineno > bottom) { pfoot(); } } /* put1 - put out text beteen header and footer */ put1(buf) char *buf; { /* include: cpage, cparam */ int i, j, w, c; int start; /* comment out ----- put1 trace printf("put1: buf = %s\n",buf); printf("Hit any key to continue\n"); getch(SYS_TERM); ----- end comment out */ /* putflag may be YES on entry */ w = 0; start = 0; /* page offset */ for (i = 0; i < offset; i++) { putc(' '); } /* indentation */ for (i = 0; i < tival; i++) { putc(' '); } /* put out line. handle underlining */ for ( i = 0; ;i++) { c = buf [i]; if ( (putflag == NO) && (c == EOS || c == NEWLINE) ) { break; } if (c == STARTU) { start = i + 1; w = 0; putflag = YES; } else if (c == STOPU && putflag == NO) { remark("in put1: extra STOPU ignored"); } else if ( c == STOPU || c == EOS || c == NEWLINE ) { /* output charle */ for (i = 0; i < offset; i++) { putc(' '); } /* output title */ putlin(ttl, STDOUT); } /* putwrd - put a word in outbuf * the word includes trailing blanks * justify right margin when line becomes full */ putwrd(wrdbuf) char *wrdbuf; { /* include cout, cparam */ int last, llval, nextra, len, w; len = length(wrdbuf); w = width(wrdbuf); /* set new end of outbuf */ last = len + outp; llval = rmval - tival; if (outw + w > llval || last >= MAXOUT) { /* too big -- buffer will have one word */ last = len; /* do not allow trailing blanks on a line */ nextra = llval - outw; while ( outp > 0 && outbuf[outp - 1] == ' ' ) { outp--; nextra++; } /* outp points past the last char or 0 here */ if (rjust == YES) { spread(outbuf, outp, nextra, outwds); if (nextra > 0 && outwds > 1) { outp += nextra; } } brk(); /* flush previous line */ } scopy(wrdbuf, 0, outbuf, outp)s */ for (j = start; j < i ;j++) { putch(buf[j], STDOUT); } /* now backspace */ for (j = 0; j < w; j++) { putch(BACKSPACE, STDOUT); } /* now underline */ for (j = 0; j < w; j++) { putch('_', STDOUT); } if (c == EOS || c == NEWLINE) { break; } putflag = NO; } else if (putflag == YES) { w += widthch(c); } else { putch(c, STDOUT); } } /* end of for loop */ putch(NEWLINE, STDOUT); } /* putbak - push character back onto input */ putbak(c) char c; { /* include: cdefio */ if (++bp >= PBSIZE) { error("too many characters pushed back."); } pbbuf [bp] = c; } /* puttl - put out title line * substitute line number for '#' * substitute date for '%' */ puttl(buf, lim, pageno) char *buf; int *lim; int pageno; { /* include cpage, cparam, ctemp */ char chars [MAXLINE], cdate[MAXLINE]; char delim; int nc, i, j, n, left, right, ncd; char *now; if (print == NO) { re ; outp = last; outw += w; outwds++; } /* set - set parameter and check range */ set( param, val, argtyp, defval, minval, maxval) int *param, val, argtyp, defval, minval, maxval; { if (argtyp == NEWLINE) { /* use default */ *param = defval; } else if (argtyp == '+') { /* increase */ *param += val; } else if (argtyp == '-') { /* decrease */ *param -= val; } else { /* set to new value */ *param = val; } /* put value in bounds */ *param = min(*param, maxval); *param = max(*param, minval); } /* skip - output n blank lines */ skip(n) int n; { /* include cpage */ if (print == YES) { while (n-- > 0) { putc(NEWLINE); } } } /* space - space n lines or to bottom of page */ space(n) int n; { /* include: cpage */ brk(); if (lineno > bottom) { return; } if (lineno == 0) { phead(); } skip(min(n, bottom + 1 - lineno)); lineno += n; if (lineno > bottom) { pfoot(); } } /* spread - spread w leadbl(inbuf); } if (ulval > 0) { /* word underlining */ underl(inbuf, wrdbuf, INSIZE); ulval--; } if (cuval > 0) { /* continuous underlining */ if (cuflag == NO) { scopy(inbuf, 0, wrdbuf, 0); inbuf [0] = STARTU; scopy(wrdbuf, 0, inbuf, 1); cuflag = YES; } cuval--; if (cuflag == YES && cuval == 0) { /* overwrite \n and EOS */ i = length(inbuf) - 1; inbuf [i] = STOPU; inbuf [i+1] = NEWLINE; inbuf [i+2] = EOS; cuflag = NO; } } if (boval > 0) { /* boldfacing */ bold(inbuf, wrdbuf, INSIZE); boval--; } if (ceval > 0) { /* centering */ center(inbuf); put(inbuf); ceval--; } else if (inbuf [0] == NEWLINE) { /* all blank line */ put(inbuf); } else if (fill == NO) { /* unfilled textd */ put(inbuf); } else { /* filled text */ /* comment out ----- text trace printf("text: inbuf = %s\n",inbuf); printf("Hit any character to continue\n"); getch(SYS_TERM); ----- end coords to justify right margin * warning: this routine is sensitive to * bad parameters. */ spread(buf, outp, ne, outwds) char *buf; int outp, ne, outwds; { /* include: cparam */ int i, j, nb, nholes; /* comment out ----- spread trace printf("spread: outp = %d, ",outp); printf("ne = %d, ",ne); printf("outwds = %d \n",outwds); printf("spread: buf = %s\n",buf); printf("Hit any key to continue\n"); getch(SYS_TERM); ----- end comment out */ if (ne <= 0 || outwds <= 1 || outp <= 0) { return; } /* reverse direction */ dir = 1 - dir; nholes = outwds - 1; if (tival != inval && nholes > 1) { nholes--; } /* point i at last character of buf */ i = outp - 1; /* leave room for NEWLINE and EOS */ j = min(MAXOUT - 2, i + ne); while (i < j) { buf [j] = buf [i]; if (buf [i] == ' ' && buf [i-1] != ' ') { if (dir == 0) { nb = (ne-1) / nholes + 1; } else { nb = ne / nholes; } ne = ne - nb; mment out */ /* insure two spaces after a period */ i = length(inbuf); inbuf [i] = ' '; if (inbuf [i-1] == '.') { inbuf [++i] = ' '; } inbuf [i+1] = EOS; for (i = 0; getwrb(inbuf, &i, wrdbuf) > 0; ) putwrd(wrdbuf); } } /* underl - underline words in a line * surround each word with STARTU and STOPU */ underl(buf, tbuf, size) char *buf, *tbuf; int size; { int i, j, t; int inword; inword = NO; /* use tbuf as internal buffer */ for (i = 0, j = 0; j < size - 3; ) { if (buf [i] == EOS || buf [i] == NEWLINE) { break; } t = tolower(type(buf[i])); if (inword == NO) { /* look for start of word */ if (t == 'a' || t == '0' || t == '_') { /* add STARTU to buffer */ tbuf [j++] = STARTU; inword = YES; } } else { /* look for end of word */ if (t != 'a' && t != '0' && t != '_') { /* add STOPU to buffer */ tbuf [j++] = STOPU; inword = NO; } } /* always copy the character */ nholes--; while (nb-- > 0) { buf [--j] = ' '; } } i--; j--; if (i < 0 || j < 0) { sys_error("spread:\n"); } } } /* subst - substitute a string for char1 */ subst(in, char1, out, subara, n) char *in, *out, *subara; char char1; int n; { int i, j, k; for (i = 0, j = 0; in [i] != EOS; i++) { if (in [i] == char1) { for (k = 0; k < n; ) { out [j++] = subara [k++]; } } else { out [j++] = in [i]; } } out [j] = EOS; /* comment out ----- subst trace printf("subst: char = %c, out = %s\n",char1,out); printf("Hit any key to continue\n"); getch(SYS_TERM); ----- end comment out */ } /* text - process text lines */ text(inbuf) char *inbuf; { /* include cparam */ char wrdbuf [INSIZE]; int i; /* data cuflag /NO/ */ /* expand escapes */ doesc(inbuf, wrdbuf, INSIZE); /* expand tabs */ dotabs(inbuf, wrdbuf, INSIZE); if (inbuf [0] == ' ' || inbuf [0] == NEWLINE) { /* move left, set tival */   tbuf [j++] = buf [i++]; } /* make sure we end outside underline mode */ if (inword == YES) { tbuf [j++] = STOPU; } tbuf [j++] = NEWLINE; tbuf [j] = EOS; /* put result back in tbuf */ scopy(tbuf, 0, buf, 0); /* comment out ----- underl trace printf("underl: buf is: %s\n",buf); ----- end comment out */ } /* width - return width of character string */ int width(buf) char *buf; { int value; value = 0; while (*buf != EOS) { value += widthch(*buf++); } return(value); } /* return width of a character */ widthch(c) int c; { if (c == BACKSPACE) { return(-1); } else if (c >= ' ' && c <= '~') { return(1); } else { return(0); } } /* Storage management routines for Software Tools & BDS C. * source: storage.bds * version: August 27, 1981 */ #include tools.h /* The only routine whose calling sequence has been * changed is dsinit: * * RATFOR: dsinit (w) * s from start of string * return length of new string */ int sdrop (from, to, chars) char *from, *to; int chars; { int len, start; len = length (from); if (chars < 0) { return (ctoc (from, to, len + chars)); } else { start = min (chars, len); return (ctoc (from + start, to, len)); } } /* stake --- take chars from a string APL-style * if chars < 0 take chars from end * if chars >= 0 take chars from beginning * return number of chars taken */ int stake (from, to, chars) char *from, *to; int chars; { int len, start; len = length (from); if (chars < 0) { start = max(len + chars, 0); return (ctoc (from + start, to, len)); } else { return (ctoc (from, to, chars)); } } /* strcmp - compare 2 strings * return -1 if <, 0 if =, +1 if > */ int strcmp (str1, str2) char *str1, *str2; { int i; for (i = 0; str1[i] == str2[i]; i++) { if (str1[i] == EOS) { return(0); } int w; * * * C: dsinit (); * */ /* dsinit -- initialize the dynamic storage space */ dsinit() { /* reserve 1000 bytes for stack at all times */ rsvstk(1000); /* anchor the free memory space */ _allocp = NULL; } /* dsfree -- return a block to the available space list */ dsfree (block) char *block; { free(block); } /* dsget -- get pointer to block of n bytes */ char *dsget (n) int n; { char *p; /* comment out ----- printf("In dsget: n = %d\n", n); ----- end comment out */ if ((p = alloc(n)) == 0) { error ("dsget: out of dynamic memory"); } return(p); } /* ---------- dsdump not implemented: /* dsdump --- produce semi-readable dump of storage */ dsdump (form) char form; { } ---------- end comment out */ /* ---------- dsdbiu not implemented: /* dsdbiu - dump contents of block-in-use */ dsdbiu (b, form) pointer b; char form; { } ---------- end comment out */  } if (str1[i] == EOS) { return(-1); } else if (str2[i] == EOS) { return(1); } else if (str1[i] < str2[i]) { return(-1); } else { return(1); } } /* strim - trim trailing blanks and tabs from a string * return number of characters in str [] */ int strim (str) char *str; { int i, j; for (i = 0, j = 0; str[i] != EOS; i++) { if (str[i] != BLANK && str[i] != TAB) { j = i; } } str [j + 1] = EOS; return (j); } /* slstr --- slice a substring from a string * if first < 0 count backwards from end * if chars < 0 count backwards from first * return the number of characters in the slice */ int slstr (from, to, first, chars) char *from, *to; int first, chars; { int i, k, last, len; len = length (from); if (first < 0) { /* count backwards from end */ first += len; } if (chars < 0) { /* count backwards from first */ first += chars; chars = - chars; } first =/* Sting manipulation routines for Software Tools * source: string.bds * version: July 25, 1981 */ #include tools.h /* concat - concatenate two strings together */ concat (buf1, buf2, outstr) char *buf1, *buf2, *outstr; { int i; i = 0; stcopy (buf1, 0, outstr, &i); scopy (buf2, 0, outstr, i); } /* getwrd - get non-blank word from in [i] into out [] * increment i. * return j = the number of characters copied. * * calling sequence: j = getwrd (in, &i, out); */ int getwrd (in, ii, out) char *in, *out; int *ii; { int i, j; i = *ii; while (in[i] == ' ' || in[i] == TAB) { i++; } j = 0; while ( in[i] != EOS && in[i] != ' ' && in[i] != TAB && in[i] != NEWLINE ) { out[j++] = in[i++]; } out[j] = EOS; *ii = i; return(j); } /* sdrop --- drop chars from a string APL-style * if chars < 0 drop chars from end of string * if chars >= 0 drop char  max (0, first); last = min (len, first + chars); for (k = 0, i = first; k < last; ) { to [k++] = from[i++]; } to [k] = EOS; return(k); } /* type - determine type of char */ char type (c) int c; { if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')) { return('a'); } else if ('0' <= c && c <= '9') { return('0'); } else { return(c); } } /* skipbl - skip blanks and tabs at lin[i] * point i past blanks. * calling sequence: skipbl(lin, &i); */ skipbl(lin, i) char *lin; int *i; { while (lin [*i] == BLANK || lin [*i] == TAB) { (*i)++; } } /* equal - compare str1 to str2 */ BOOL equal (str1, str2) char *str1, *str2; { int i; for (i = 0; str1 [i] == str2 [i]; i++) { if (str1 [i] == EOS) { return (YES); } } return (NO); } /* locate --- look for c in char class at pat (offset) */ BOOL locate (c, pat, offset) char c, *pat; int offset; { int i; /* size of class is at pat [offset], chachar data [1]; /* first byte of data field */ }; #define NODE "N" /* only legal value for nchk */ #define NHEAD 3 /* size of fixed part of node */ /* These routines have different calling sequences from * the RATFOR routines from the Software Tools Users Group: * * * RATFOR: delete (symbol, table) * char *symbol, *table; * * C: delete (symbol, table) * char *symbol; * struct symtab *table; * * * RATFOR: enter (symbol, info, table) * char *symbol; * int info; * char *table; * * C: enter (symbol, info, table) * char *symbol, *info; * struct symtab *table; * * * RATFOR: lookup (symbol, info, table) * char *symbol, *info, *table; * (copy information to info []); * * C: lookup (symbol, table) * char *symbol; * struct symtab *table; * (return pointer to info field) * rs follow */ for (i = offset + pat [offset]; i > offset; i--) { if (c == pat [i]) { return (YES); } } return (NO); } /* scopy - copy string at from (i) to to (j) */ scopy (from, i, to, j) char *from, *to; int i, j; { while ((to [j++] = from [i++]) != EOS) { ; } } /* stcopy - copy string at from [i] to to [j] * update j to point AT the EOS * * calling sequence: stcopy (from, i, to, &j); */ stcopy (from, i, to, j) char *from, *to; int i; int *j; { while ((to [*j] = from [i++]) != EOS) { (*j)++; } } /* index - find char c in string str */ int index (str, c) char *str, c; { int i; for (i = 0; str [i] != EOS; i++) { if (str [i] == c) { return(i); } } return (-1); } /* length - compute length of string * do not count EOS in length */ int length (str) char *str; { int i; for (i = 0; str [i] != EOS; i++) { ; } return(i); }  * * RATFOR: mktabl (nodesize) * int nodesize; * * C: mktable (htsize) * int htsize; * * * RATFOR: rmtabl (table) * char *table; * * C: rmtabl (table) * struct symtab *table; * * * RATFOR: sctabl (table, sym, info, posn) * char *table, *sym, *info; * int *posn; * (copy fields to sym [] and info []) * * C: sctabl (table, posn) * struct symtab *table; * int *posn; * (return pointer to data field of node) * */ #define NTABS 10 /* number of symbol tables */ main(argc, argv) int argc; char **argv; { initst(argc, argv); main1(); endst(); } main1() { char inbuf[100]; /* input buffer */ int i, number; char *tables [NTABS]; /* pointer to symbol tables */ char symbol [100]; /* symbol name */ char info [100]; /* info field of symbol */ /* init available memory */ dsinit(); printf("\nTest of symtab.bds: A/* Symbol table routines for Software Tools * source: symtab.bds * version: November 27, 1981 */ #include tools.h /* These routines assume that the data field in each node * has the following format: * * name field: string, ends with EOS. * value field: string, ends with EOS. * * The length of these fields is arbritrary; * that is why they are not made part of struct node. * The table lookup routines examine only the name field. * This format works well for macros, but may not be so * good for numeric fields which may contain embedded EOS * characters. */ /* format of each symbol table */ struct symtab { char stchk; /* check byte */ int htsize; /* size of hash table */ struct node *hashtab [1]; /* start of hash table */ }; #define TABCHK "T" /* only legal value for stchk */ #define STHEAD 3 /* size of fixed part of symtab */ /* format of each node */ struct node { char nchk; /* check byte */ struct node *next; /* pointer to next node */  ugust 27, 1981\n"); for (i = 0; i < NTABS; i++) { tables [i] = 0; } /* main loop */ for(;;) { printf("\nEnter table number or "); printf("-1 to exit or "); printf("-2 to dump tables.\n"); _gets(inbuf); number = atoi(inbuf); if (number == -1) { return; } if (number == -2) { for (i = 0; i < NTABS; i++) { if (tables [i] != 0) { printf("\nDump of table %d\n",i); dumptabl (tables [i]); } } continue; } if (number < 0 || number >= NTABS) { printf("Bad table number\n"); continue; } /* create table if needed */ if (tables [number] == 0) { printf("Creating table %d\n",number); tables [number] = mktabl(33); printf("Table %d at %x\n", number, tables [number]); } /* get name of symbol */ printf("Enter symbol name\n"); _gets(symbol); if (symbol [0] == 0) { continue; } /* delete if info field is null */ printf("Enter info field or CR\n"); _gets(info); if ( /* use a cast for maximum portability: * n = (struct * node) dsget (k); */ n = dsget (k); /* set header fields of node */ n -> nchk = NODE; /* copy symbol and info to data area */ i = 0; stcopy (symbol, 0, n -> data, &i); i++; scopy (info, 0, n -> data, i); /* hang node from hash table */ h = hashfunc(symbol, table -> htsize); n -> next = table -> hashtab [h]; table -> hashtab [h] = n; } /* compute the hash function for symbol in a table with * n entries. */ hashfunc (symbol, n) char *symbol; int n; { int i, h; h = 0; for (i = 0; symbol[i] != EOS; i++) { h += symbol [i]; } return (h%n); } /* lookup - return pointer to info for symbol in table. * -- return 0 if symbol not in table */ char *lookup (symbol, table) char *symbol; struct symtab * table; { int h; struct node *n; char *p; h = hashfunc(symbol, table -> htsize); n = table -> hashtab [h]; for ( ; n; n = n -> next) { if (equal(symbol, n -> datinfo [0] == 0) { delete(symbol, tables [number]); } else { enter(symbol, info, tables [number]); } } } /* delete - remove a symbol from the symbol table */ delete (symbol, table) char *symbol; struct symtab *table; { int h; struct node *n, *n1; /* comment out ----- printf("In delete: symbol = %s, table = %x\n", symbol, table); ----- end comment out */ /* point at list of buckets */ h = hashfunc(symbol, table -> htsize); n = table -> hashtab [h]; /* the first bucket is a special case so that the code * is independent of the format of struct symtab. */ if (n == 0) { return; } if (equal(symbol, n -> data)) { table -> hashtab [h] = n -> next; dsfree(n); return; } /* general case: search list of buckets */ n1 = n; /* n1 points at previous bucket */ n = n -> next; /* n points at current bucket */ while (n) { if (equal(symbol, n -> data)) { n1 -> next = n -> next; dsfree(n); return; } elsa)) { /* point p at info field */ p = n -> data; while (*p++ != EOS) { ; } return(p); } } return (0); } /* mktabl - make a new (empty) symbol table */ char *mktabl (hashsize) int hashsize; { char *dsget(); struct symtab *table; int i; /* get storage for the table. * use a cast for maximum portability: * table = (symtab *) dsget (...); */ table = dsget ((2 * hashsize) + STHEAD); /* fill in the debugging byte */ table -> stchk = TABCHK; /* fill in the size of the table */ table -> htsize = hashsize; /* zero out the hash table */ for (i = 0; i < hashsize; i++) { table -> hashtab [i] = 0; } return(table); } /* rmtabl - remove a symbol table, deleting all entries */ rmtabl (table) struct symtab *table; { struct node *n, *n1; int i; /* check debugging byte */ if (table -> stchk != TABCHK) { syserr ("rmtabl: bad check byte"); } /* free every entry in hash table */ for (i = 0; i < table -> htsizee { n1 = n; n = n -> next; } } } /* dumptabl -- dump all symbols of a symbol table */ dumptabl (table) struct symtab *table; { int i, k, posn; char *n, *symbol, *info; int *p; /* dump hash table */ printf("The hash table is:\n\n"); for (i = 0; i < table -> htsize; i++) { if (k = table -> hashtab [i]) { printf("hashtab [%3d] = %x\n", i, k); } } /* print all the nodes in the table */ posn = 0; while (symbol = sctabl(table, &posn)) { info = symbol; while (*info++ != EOS) { ; } p = symbol - 2; printf("node = %x, ", symbol); printf("next = %x, ", *p); printf("symbol = %s, ", symbol); printf("info = %s\n", info); } } /* enter -- place a symbol in the symbol table * update entry if already present */ enter (symbol, info, table) char *symbol, *info; struct symtab *table; { struct node *n; int i, h, k; /* allocate another node */ k = (length(symbol) + 1) + (length(info) + 1) + NHEAD;  ; i++) { n = table -> hashtab [i]; while (n) { n1 = n -> next; dsfree(n); n = n1; } } /* free the symbol table itself. * a cast would be best: dsfree( (char *) table); */ dsfree(table); printf("End of rmtabl\n"); } /* sctabl -- scan symbol table. * update *posn. * return pointer to data field or 0. */ char *sctabl (table, posn) struct symtab *table; int *posn; { int i, count; struct node *n; count = 0; for (i = 0; i < table -> htsize; i++) { n = table -> hashtab [i]; while (n) { if (count == *posn) { (*posn)++; return (n -> data); } else { count++; n = n -> next; } } } (*posn)++; return(0); } /* New BDS library for use with software tools * source: toolib1.bds * version: November 26, 1981 */ #include tools.h /* This file contains all the standard BDS C library functions which are written in C that are used by the software to j >= 0; j -= gap) { if ((*compar)(base+j, jd+j) <=0) break; _swp(width, base+j, jd+j); } } } _swp(w,a,b) char *a,*b; int w; { char tmp; while(w--) {tmp=*a; *a++=*b; *b++=tmp;} } /* Some string functions */ int atoi(n) char *n; { int val; char c; int sign; val=0; sign=1; while ((c = *n) == '\t' || c== ' ') ++n; if (c== '-') {sign = -1; n++;} while ( isdigit(c = *n++)) val = val * 10 + c - '0'; return sign*val; } /* Some character diddling functions */ int isalpha(c) char c; { return isupper(c) || islower(c); } int isupper(c) char c; { return c>='A' && c<='Z'; } int islower(c) char c; { return c>='a' && c<='z'; } int isdigit(c) char c; { return c>='0' && c<='9'; } int isspace(c) char c; { return c==' ' || c=='\t' || c=='\n'; } char toupper(c) char c; { return islower(c) ? c-32 : c; } char tolower(c) char c; { return isupper(c) ? c+32 : c; } /* Storage allocation routols programs. These library functions are identical to the functions which were on files stdlib1 and stdlib2.c EXCEPT that these functions call some routines whose names have changed. The object code for these functions used to be on deff.crl. Now the object code is on toolib1.crl. The functions on this file ONLY use functions on toolib2.crl All the functions with new names are on file toolib2.crl. All functions on toolib2.crl came from deff2.crl. The names have all been changed in the same way, viz., by adding a leading underscore character to the name. The following functions have been renamed: ( * denotes that a call to the function is in this file) _getchar _ungetch _putchar * _putch _gets * _call _read * _write _open * _close * _creat (_unlink) _seek (_tell) _rename _exit _rread _rwrite _rseek _rtell _rsrec _rcfsiz The following functions were on stdlib1.c but have been deleted from this file. getc(),ines, taken from chapter 8 of K&R, but simplified to ignore the storage allignment problem and not bother with the "morecore" hack (a call to "sbrk" under CP/M is a relatively CHEAP operation, and can be done on every call to "alloc" without degrading efficiency.) */ char *alloc(nbytes) unsigned nbytes; { struct _header *p, *q, *cp; int nunits; /* comment out ----- printf("In alloc: nbytes = %d\n", nbytes); ----- end comment out */ nunits = 1 + (nbytes + (sizeof (_base) - 1)) / sizeof (_base); if ((q = _allocp) == NULL) { _base._ptr = _allocp = q = &_base; _base._size = 0; } for (p = q -> _ptr; ; q = p, p = p -> _ptr) { if (p -> _size >= nunits) { if (p -> _size == nunits) q -> _ptr = p -> _ptr; else { p -> _size -= nunits; p += p -> _size; p -> _size = nunits; } _allocp = q; /* comment out ----- printf("Alloc returns: %x\n", p+1); ----- end comment out */ return p + 1; } if (p == _allocp) { cp = sbrk putc(), and ungetc() are now defined on file.bds. They had to be completely rewritten to allow for I/O redirection. fopen getc ungetc getw fcreat putc putw fflush fclose strcat strcmp strcpy strlen qsort initw initb getval The following functions from stdlib1.c are on this file: qsort atoi isalpha isupper islower isdigit isspace toupper tolower alloc free abs max min */ /* This is the new qsort routine, utilizing the shell sort technique given in the Software Tools book (by Kernighan & Plauger.) NOTE: this "qsort" function is different from the "qsort" given in some old releases (pre 1.32) -- here, the items are sorted in ASCENDING order. */ qsort(base, nel, width, compar) char *base; int (*compar)(); { int gap,ngap, i, j; int jd, t1, t2; t1 = nel * width; for (ngap = nel / 2; ngap > 0; ngap /= 2) { gap = ngap * width; t2 = gap + width; jd = base + gap; for (i = t2; i <= t1; i += width) for (j = i - t2; (nunits * sizeof (_base)); if (cp == ERROR) { printf("Alloc: Out of memory"); return NULL; } cp -> _size = nunits; /* remember: pointer arithmetic ! */ free(cp+1); p = _allocp; } } } free(ap) struct _header *ap; { struct _header *p, *q; /* comment out ----- printf("In free: ap = %x\n", ap); ----- end comment out */ p = ap - 1; /* No need for the cast when "ap" is a struct ptr */ for (q = _allocp; !(p > q && p < q -> _ptr); q = q -> _ptr) if (q >= q -> _ptr && (p > q || p < q -> _ptr)) break; if (p + p -> _size == q -> _ptr) { p -> _size += q -> _ptr -> _size; p -> _ptr = q -> _ptr -> _ptr; } else p -> _ptr = q -> _ptr; if (q + q -> _size == p) { q -> _size += p -> _size; q -> _ptr = p -> _ptr; } else q -> _ptr = p; _allocp = q; /* comment out ----- printf("In free: new _allocp = %x\n", q); ----- end comment out */ } /* define max(), min(), abs() */ int abs(n) { return (n<0) ? - where the string pointer points. Usage: sprintf(string,format,arg1, arg2, ...); */ sprintf(buffer,format) char *buffer, *format; { _spr(buffer,&format); /* call _spr to do all the work */ } /* sscanf: Reads a line of text in from the console and scans it for variable values specified in the format string. See the comments below in _scn() Usage: sscanf(format,&arg1,&arg2,...); */ int sscanf(line,format) char *line, *format; { return _scn(line,&format); /* let _scn do all the work */ } /* General formatted output conversion routine, used by fprintf and sprintf..."line" is where the output is written, and "fmt" is a pointer to an argument list which must consist of a format string pointer and subsequent list of (optional) values. The arguments are, of course, passed on the stack. */ _spr(line,fmt) char *line, **fmt; { char _uspr(), c, base, *sptr, *format; char wbuf[MAXLINE], *wptr, pf, ljflag, zfflag; int width, precision, *argn : n; } int max(a,b) { return (a > b) ? a : b; } int min(a,b) { return (a <= b) ? a : b; } /* The following functions from stdlib2.c are on this file: printf _spr scanf _scn _puts (renamed by analogy to _get) swapin The following functions from stdlib2 have been deleted: fprintf sprintf scanf sscanf fputs fgets Many comments have been deleted from these functions. See STDLIB2.C if you are really interested. Each function uses an array of dimension MAXLINE. Make sure MAXLINE is longer than the largest line ever printed! Remember to put out a 0x1a (control-Z, CPMEOF) at the end of text files being written out to disk. Also remember that there are two end of file conditions: -1 and CPMEOF. */ /* printf usage: printf(format, arg1, arg2, ...); Exactly the same as in Kernighan & Ritchie. */ printf(format) char *format; { char line[MAXLINE]; _spr(line,&format); /* use "_spr" to form the output */ s; format = *fmt++; /* fmt first points to the format string */ args = fmt; /* now fmt points to the first arg value */ while (c = *format++) if (c == '%') { wptr = wbuf; precision = 6; ljflag = pf = zfflag = 0; if (*format == '-') { format++; ljflag++; } if (*format == '0') zfflag++; /* zero-fill feature test */ width = (isdigit(*format)) ? _gv2(&format) : 1; if ((c = *format++) == '.') { precision = _gv2(&format); pf++; c = *format++; } switch(toupper(c)) { case 'D': if (*args < 0) { *wptr++ = '-'; *args = -*args; width--; } case 'U': base = 10; goto val; case 'X': base = 16; goto val; case 'O': base = 8; /* note that arbitrary bases can be added easily before this line */ val: width -= _uspr(&wptr,*args++,base); goto pad; case 'C': *wptr++ = *args++; width--; goto pad; case ' /* comment out ----- _puts(line); /* and print out the line */ ----- end comment out */ putlin(line, STDOUT); } /* scanf: This one accepts a line of input text from the console, and converts the text to the required binary or alphanumeric form. (see K & R) Usage: scanf(format, ptr1, ptr2, ...); Returns number of items matched. Since a new line of text must be entered from the console each time scanf is called, any unprocessed text left over from the last call is lost forever. This is a difference between BDS and UNIX. The field width specification is not supported. */ int scanf(format) char *format; { char line[MAXLINE]; /* comment out ----- _gets(line); /* get a line of input from user */ ----- end comment out */ getlin(line, STDIN); return _scn(line,&format); /* and scan it with "_scn" */ } /* sprintf: Like fprintf, except a string pointer is specified instead of a buffer pointer. The text is written directly into memory S': if (!pf) precision = 200; sptr = *args++; while (*sptr && precision) { *wptr++ = *sptr++; precision--; width--; } pad: *wptr = '\0'; pad2: wptr = wbuf; if (!ljflag) while (width-- > 0) *line++ = zfflag ? '0' : ' '; while (*line = *wptr++) line++; if (ljflag) while (width-- > 0) *line++ = ' '; break; default: *line++ = c; } } else *line++ = c; *line = '\0'; } /* Internal routine used by "_spr" to perform ascii- to-decimal conversion and update an associated pointer: */ int _gv2(sptr) char **sptr; { int n; n = 0; while (isdigit(**sptr)) n = 10 * n + *(*sptr)++ - '0'; return n; } /* Internal function which converts n into an ASCII base `base' representation and places the text at the location pointed to by the pointer pointed to by `string'. Yes, you read that correctly. */ char _uspr(string, n, base) char **string; unsigned (&line),base) == ERROR) return n; while ((c = _bc(*line++,base)) != 255) val = val * base + c; line--; break; case 'S': _igs(&line); sptr = *args; while (c = *line++) { if (c == *format) { format++; break; } if (!sf) *sptr++ = c; } if (!sf) { n++; *sptr = '\0'; args++; } continue; case 'C': if (!sf) { poke(*args++, *line); n++; } line++; continue; default: return n; } if (!sf) { **args++ = val * sign; n++; } }} return n; } /* Internal function to position the character pointer argument to the next non white-space character in the string: */ char _igs(sptr) char **sptr; { char c; while (isspace(c = **sptr)) ++*sptr; return (c); } /* Internal function to convert character c to value in base b , or return ERROR if illegal character for that base: */ inn; { char length; if (n b-1) return ERROR; else return c; } /* _puts: Write out the given string to the console. A newline is NOT automatically appended: */ _puts(s) char *s; { while (*s) _putchar(*s++); } swapin(name,addr) char *name; /* the file to swap in */ { int fd; if (( fd = _open(name,0)) == ERROR) { printf("Swapin: cannot open %s\n",name); return ERROR; } if ((_read(fd,addr,512)) < 0) { printf("Swapin: read error on %s\n",name); _close(fd); return ERROR; } _close(fd); return OK; } QSORÔ_SWЋATOÉêISALPHÁÈISUPPEÒISLOWEÒSISDIGIÔ‰ISSPACÅ¿TOUPPEÒûTOLOWEÒGALLOÓFREŃABÓ MAØE MIÎu PRINTÆ¥ SCANÆí SPRINTÆ: SSCANÆf _SPÒ” _GV²s_USPÒì_SCΰ_IGÓN_Bê_PUTÓnSWAPIε€±he buffer "str" until a COLON or null byte is encountered. */ int _scn(line,fmt) char *line, **fmt; { char sf, c, base, n, *sptr, *format; int sign, val, **args; format = *fmt++; /* fmt first points to the format string */ args = fmt; /* now it points to the arg list */ n = 0; while (c = *format++) { if (!*line) return n; /* if end of input string, return */ if (isspace(c)) continue; /* skip white space in format string */ if (c != '%') { /* if not %, must match text */ if (c != _igs(&line)) return n; else line++; } else { /* process conversion */ sign = 1; base = 10; sf = 0; if ((c = *format++) == '*') { sf++; /* if "*" given, supress assignment */ c = *format++; } switch (toupper(c)) { case 'X': base = 16; goto doval; case 'O': base = 8; goto doval; case 'D': if (_igs(&line) == '-') { sign = -1; line++; } doval: case 'U': val = 0; if (_bc(_igs ;_SWÐgÃÃÅ!òÿ9ùDMÍ�åÍ�ÑÍ?ë! s#rÍ�ëÍËë! s#rÍ�ÍÒ^Í�åÍ�ÑÍ?ë`is#rÍ�åÍ�Ñë! s#rÍ�åÍ�Ñë! s#rÍ� ë! s#rÍ�åÍ� ÑÍÚFÍ�åÍ� ÑÍúë! s#rÍ�|·ú.Í�åÍ�åÍ�ÑåÍ�åÍ�Ñå!áå!9~#foéÑÑÑÍÚðÃ.Í�åÍ�ÑåÍ�åÍ�ÑåÍ�åÍÑÑÑ! å~#foåÍ�ÑÍúëás#rî! å~#foåÍ�Ñëás#rÈ! å~#foëÍËëás#rÃ6ë!9ùëÁÉ A–µÕëî,D\VÅ!ÿÿ9ùDM! ^#Vr+sz³ÊMÍ�në`is! ^#Vr+sÕÍ� nëás! ^#Vr+sÕ`inëásÃë!9ùëÁÉKISDIGIÔÀÃÃÅ!ûÿ9ùDM`i¯w#w! 6#6Í� në! s{þ Ê9! n}þ ÂG! ^#Vr+sÃ! n}þ-Âf! 6ÿ#6ÿ! ^#Vr+s! ^#Vr+sënë! sÕÍÑ|µÊ§Í� Í?å! nѯgÐÿë`is#rÃfÍ�åÍ�ÑÍ?÷ë!9ùëÁÉ ,7EP~„¥µISUPPEÒISLOWEÒ:à ÃÃÅ!9ùDM! n&åÍÑ|µÍ£Â6! ^#Vr+së6-Í�–åÍ�–~#foÍúëás#r!’ ^#Vr+s! 6 ×! 6×! 6!’ å~#foå! n&å!– ^#Vr+së~#foå!� åÍÑÑÑѯgÍúëás#rÀ!� ^#Vr+sÕ!– ^#Vr+së~#foëás!’ ^#Vr+sÀ!� n}·Â!” 6È#6!– ^#Vr+së~#foë! s#rÍ�n}·Ê€Í�”|µÊ€!� ^#Vr+sÕ! ^#Vr+sënëás!” ^#Vr+s!’ ^#Vr+sÃ6Í��6! ë!� s#r!� n}·Â×!’ ^#Vr+s!ÍÒ×!œ ^#Vr+sÕ!‘ n}·ÊÎ!0ÃÑ! ëásÜÍ�œå!� ^#Vr+sënëás{·Ê!œ ^#Vr+sÃ×!� n}·Ê1!’ ^#Vr+s!ÍÒ1!œ ^#Vr+së6 à ÃG!œ ^#Vr+sÕ`inëásÃ]!œ ^#Vr+sÕ`inëásÃ>Í�œ6ë!˜9ùëÁÉ*S\�¨¸¾ÆÊíõ%*/49>AN†�ÃÕ>G~š¯ÆÌÕðþ/2H^ISDIGIÔcÃÃÅ!þÿ9ùDM`i¯w#wÍ�~#fon&åÍÑ|µÊSÍ� Í?åÍ�^#Vr+sënѯgÐÿë`is#rÃÍ�ÃZë!9ùëÁÉ!'QX_USPÒªÃÃÅ!ÿÿ9ùDMÍ�åÍ� ÑÍìÒVÍ�^#Vr+sÕÍ� ÍëÒCÍ�0ÃKÍ�7ëás!&áÍ� åÍ�åÍ� Ñ͉åÍ�åÍÑÑÑë`isÍ� åÍ�åÍ� ÑÍ)åÍ�åÍÑÑÑ`in&#&áë!9ùëÁÉ6ATo‘ŸISSPACÅ_IGÓTOUPPEÒ_BÃPOKÅÃÃÃÃÃÃÅ!òÿ9ùDM! ^#Vr+së~#foë! s# n&åÍÑ|µÍ£ÁÉÁÉ#./Å!9ùDM! n&AÍùͯÚ+! n&ZÍͯÁÉÁÉ/Å!9ùDM! n&aÍùͯÚ+! n&zÍͯÁÉÁÉ/Å!9ùDM! n&0ÍùͯÚ+! n&9ÍͯÁÉÁÉ3Å!9ùDM! n}þ Í�Ê/! n}þ Í�Ê/! n}þ Í�ÁÉÁÉ"ISLOWEÒ8ÃÃÅ!9ùDM! n&åÍÑ|µÊ-! n&àÿÃ2! n&ÁÉÁÉ+ISUPPEÒ8ÃÃÅ!9ùDM! n&åÍÑ|µÊ-! n& Ã2! n&ÁÉÁÉ+SBRËPRINTÆFREÅÁà ÃÃÃÅ!øÿ9ùDMÍ� ###ë͉ë! s#rÍ\�ë! s#rz³Âq*‰ë! s#rÕ*�Ñs#rÕ*‰Ñs#r*‹¯w#wÍ�~#foë`is#rÍ�##~#foåÍ�ÑÍìÚ Í�##~#foåÍ�ÑÍåÂÀÍ�åÍ�~#foëás#rÃÍ�##å~#foåÍ�ÑÍúëás#r`iå~#foåÍ�##~#foÑ))ëás#rÍ�##åÍ�ëás#rÍ�å*�Ñs#rÍ�####ãÍ�åÍ\�ÑÍå†Í�Í?åÍÑë! s#rÍ�#|µÂ_!¬åÍÑ!ãÍ�##åÍ�ëás#rÍ�####åÍ ÑÍ\�ë`is#rÍ�ë! s#rÍ�~#foë`is#rÃë!9ùëÁÉAlloc: Out of memory=“©¾.<ORV]y¡{Å!üÿ9ùDMÍ�++++ë`is#rÍ\�ë! s#rÍ�åÍ�ÑÍóÒFÍ�åÍ�~#foÑÍìÚ”Í�åÍ�~#foÑÍìÚ�Í�åÍ�ÑÍóÚ~Í�åÍ�~#foÑÍìrÍ�ë! s#r! 6! ^#Vr+sënë! s{·Ê Í�n}·Ât! n&Ã! n&åÍÑ|µÊˆÃG! n}þ%ÊÆ! nå! åÍÑÑÍåʸ! n&ÃÃÃ! ^#Vr+sÃ! 6#6! 6 `i6! ^#Vr+sënë! s{þ* `i4! ^#Vr+sënë! s! n&åÍ Ñ}þXÊ8þOÊAþDÊJþUÊpþSÊüþCÊ�ÃË! 6Ãp! 6Ãp! åÍÑ-ÍåÂp! 6ÿ#6ÿ! ^#Vr+s! ¯w#w! n&å! åÍÑåÍ ÑÑ#|µÂŸ! n&Ã! n&å! ^#Vr+sën&åÍ ÑÑë! s{þÿÊîÍ� å! nѯgÍ?å! nѯgë! s#rß! ^#Vr+sÃÕ! åÍÑÍ� ~#foë! s#r! ^#Vr+sënë! s{·Êm! nåÍ�nÑ}»ÂM! ^#Vr+sÃm`in}·Âj! ^#Vr+sÕ! nëásÃ`in}·ÂŒ! 4Í�6! ^#Vr+sÃG`in}·Â½Í�n&å! ^#Vr+së~#foåÍÑÑ! 4! ^#Vr+sÃG! n&Ã`in}·Â! ^#Vr+së~#foåÍ� åÍ�ÑÍ?ëás#r! 4ÃG! n&Ãë!9ùëÁÉ1^hr}ƒ†‘Ÿ©³¶Äñ$).36?HPZ†‹“�¹Çìú,=KSks�•´ÉÓÛ ISSPACÅFÃÃÅ!ÿÿ9ùDMÍ�~#fonë`isÕÍÑ|µÊ5Í�^#Vr+sÃ`in&Ã=ë!9ùëÁÉ%3;ISALPHÁTOUPPEÒISDIGIÔ–Ã ÃÃÃÅ!9ùDM! n&åÍÑë! sÕÍÑ|µÊD! ån&ÉÿÒ�ÔÍ�~#foë! s#rÃ"Í�åÍ�##~#foÑ))åÍ�~#foÑÍåÂñÍ�##å~#foåÍ�~#fo##~#foÑëás#rÍ�åÍ�~#fo~#foëás#rÃÍ�åÍ�~#foëás#rÍ�åÍ�##~#foÑ))åÍ�ÑÍåÂTÍ�##å~#foåÍ�##~#foÑëás#rÍ�åÍ�~#foëás#rÃbÍ�åÍ�ëás#rÍ�å*�Ñs#rë!9ùëÁÉ 0DXh|’µï R#Å!9ùDMÍ�|·òÍ�ÍúÃÍ�ÁÉÁÉ'Å!9ùDMÍ�åÍ�ÑÍÒÍ�Ã#Í�ÁÉÁÉ'Å!9ùDMÍ�åÍ�ÑÍÚÍ�Ã#Í�ÁÉÁÉ_SPÒPUTLIÎ3à ÃÃÅ!yÿ9ùDM!‹ å`iåÍÑÑ!å`iåÍÑÑë!‡9ùëÁÉ&GETLIÎ_SCÎ6à ÃÃÅ!yÿ9ùDM!å`iåÍÑÑ!‹ å`iåÍÑÑÃ-ë!‡9ùëÁÉ&+_SPÒÃÃÅ!9ùDM! åÍ�åÍÑÑÁÉ_SCÎ!ÃÃÅ!9ùDM! åÍ�åÍÑÑÁÉÁÉ_USPÒISDIGIÔ_GV²TOUPPEÒoÃÃÃÃÃÅ!hÿ9ùDM!ž ^#Vr+së~#foë! s#rÍ�žë!– s#r! ^#Vr+sënë`is{·Ê``in}þ%ÂJ! ë!� s#r!” 6#6!‘ s!� s!� sÍ�n}þ-Ÿ! ^#Vr+s!� 4Í�n}þ0¯!‘ 4Í�n&åÍÑ|µÊÌ! åÍ ÑÃÏ!ë!’ s#r! ^#Vr+sënë`is{þ.Â! åÍ Ñë!” s#r!� 4! ^#Vr+sënë`is`in&åÍ Ñ}þDÊCþUÊþXʈþOÊ‘þCÊ×þSÊÃ4Í�–~#fo|·ò!� ëásÃl! n&åÍ Ñ|µÊg! ån&ÐÿëásÃl!ÿÿÁÉ! nå! n&+ÑÍÒ‹!ÿÿÁÉÔ! n&ÁÉÁÉ *0BMSe�‰_PUTCHAÒ2ÃÃÅ!9ùDMÍ�n}·Ê0! ^#Vr+sën&åÍÑÃÁÉ*._OPEÎPRINTÆ_REAÄ_CLOSÅÅÃÃÃÃÃÅ!þÿ9ùDM!åÍ�åÍÑÑë`is#rz³ÂEÍ�å!“åÍÑÑ!ÿÿÊ!åÍ�åÍ�åÍ ÑÑÑ|·ò{Í�å!«åÍÑÑÍ�åÍ Ñ!ÿÿÊÍ�åÍ Ñ!Êë!9ùëÁÉSwapin: cannot open %s Swapin: read error on %s !/7;CT\dhry�ˆ_GETCHAÒKBHIÔC_UNGETCÈ]_PUTCHAÒq_PUTCȲ_GETÓÓRANÄ SRANÄ:SRAND±®NRANÄæCS×ùSETMEÍMOVMEÍ*_CALÌŒCALLÁ±INÐÙOUTÐëPEEËýPOKÅ SLEEÐPAUSÅWSETFCÂk_REAÄ”_WRITÅ_OPEÎŒ_CLOSÅÙ_CREAÔá_UNLINË'_SEEËATELÌÁ_RENAMÅîFABORÔT FCBADDÒh _EXIÔ} BDOÓ… BIOÓ� CODENÄÈ EXTERNÓÑ ENDEXÔÚ TOPOFMEÍã EXEÃí EXECÌ SBRË RSVSTË» _RREAÄÇ _RWRITÅe _RSEEËæ _RTELÌ< _RSREÃV _RCFSIÚz FО €Šo#|µÂ>Í�ÃP`i^#Vr+sÃ!ÿÿÃPë!9ùëÁÉÃhÃÃÃÃÅ!üÿ9ùDMÍ�Íkå*«Ñë! s#rÍ�åÍ� åÍ\ÑÑë`is#rÍ� +|µÂÍ�#&á 6C#6O#6MÑÍþÿÂ/áÁÃ[!€¯w#w#*w#Â<Á:þ**ÊS*ù!åÂÕÅÍÑÕÍÁѷʤ€ÍÃ!€ëÃ…(0BNåÍ7Å*Ÿë!Äÿ9åååÍ&á 6C#6O#6MÑÍþÿÂ/áÁÃ*¡|µÂE¡Õ!\Í&áÃWë!\Í&*£|µÂW!£ë!lÍ&�¯!¡å~#fo´Ê�> +͆#~·Âtá##ÃhþaØþ{ÐÖ Éá!€p»!Ö*w#œÁ:þ**ʳ*ù!åÃÖÕÅÍÑÕÍÁÑ·Êø€ÍÃ!€ëÃÙ (5CRou~„•¢®1Í ë*³åÚ&+ë*µ|/g}/o#9Í*Ò&ë#"³áÉáÃz¼ØÀ{½É Í "µÉ�Í7:ŸÍ)Ú~æÊÅ:ŸÍ,"s!"u*£|µ*uÂ/ÁÉ*¡ëÍ*së!ÕÍÑ·ÊfþÊUO!è ÁÉ! ~þ€Âa6*uÁÉ*£+"£*¡€"¡*u#"u*s! N#Fp+qÃ"+EJ]�vÍ7:ŸÍ)Ú~æÊÅ:ŸÍ,"s!"u€Í*£|µ*uÂ7ÁÉ*¡€€~#Â?"¡*së"Í·*uÁÀÅ#"u*£+"£*s! N#Fp+qÃ*3EtGÍ7:ŸÍ,ÚåÍ?*¡:£·Ê4=Â"Ã4ÑÕÅ#ÍÁáåÍ?*¡ã!Ñs#rëÉ!^#VÉ .Í7:ŸÍ,Ú!^#VëÉÍ7:ŸÍ,ÚåëÅ$ÍÁá!~#foÉÍ7:ŸÍ,ÚåëÅ#ÍÁá!~#foÉÉÍ7Å!&å:Ÿ_!ëogé(2;DMVÁÉÍ]͌̀ÉÍmÍØÃ.ÍmÍvÃ.ÍmÍ�Ã.ÍmÍÃ.Í]Í«É*£Í]5:w·oʯ2w&ÉÅÍÁþÊþ!ÿÿÈoþ Â2Å ÍÁ. &É%:w&o·ÀÅ Íæo&ÁÉ:woåÍ2wá&É6Í Åþ Â Í ÍÃ_Í ÍæÂ*ÁÉÍþÊÁÉ &Í Å_þ Â Í ÍÁÉ -Í Å6ÿ ëÕÕÕÍ Íá#F#Ñx·Ê(~#ïáÁÉ&(*—ë>H£Êê7*™|g}o"™zg{o"—|ægÉ iÍ |µÊ"—"™ÉEÅ Í!½½å Íá###æÊ"—"™ Í ÍÍÁÉWait a few seconds, and type a CR: $(PUTÓ)ÃÃÍ åÍáÅ!xVå Íá###æÊ"—"™ÁÉ PUTÓÒÃÃÍ7*Ÿ|¥þÿÂ&*¡"Æ*£"È*¥"ÊÉÅ|µÂP*¡åÍÑ!—Zå Íá##æÊ7"Æ"È"ÊÁÉ:Æö2Æ!Ì6#Â]!¿ ~ÅW!̯~w# ÂvzÒ—õ¯!ÌÆŽw# Â�ñÂoÁ Âg!Æ̯?/Îw#ª+~æg:ÊoÁÉŇšà#*1CFILQV[bhq|�ˆ‹”™ž£¦³»Ûÿo&ÉÍ7Å*¡ë*Ÿ:£Oz³ÂÁÉq#ÃQÍ7*£|µÈÅDM*¡ë*ŸÍKÚ/><ê#í°ÁÉ~# x±Â#ÁÉ ë ë><ê?í¸ÁÉ~+ x±Â?ÁÉ|ºÀ}»É+9GÍ7Å*§ë*¥DM:¡!å*Ÿå*£ÉÁÉ!Í7Å*§ë*¥DM:¡!å*Ÿå*£Éo&ÁÉ Í 2®Í­o&É Í 2±ÍͰÉë!‘6#Í]ÉÍ]*¥ë!š6#Í]É*¡’Í]É:•2 §òž!‘Í!‘Í ­2–É!‘Í)!–5:•§ò­!–4+Í3: Ð!‘ÍÉ!’Í Âï!’›Í]É!›Í È:–!Ÿ–ÊBò/<þ ú !–:Ÿ–ø›!’Í]É:–!Ÿ–Gú8!ŸÍdÂ+ÃB!–ÍdÂ8¯2‘2š!–Íd!ŸÍd!‘šÍ=ÍŒÉ4+~§úqÍ3É7Í4É!’ÍÃØÍf!¡ÍU!–:Ÿ†@†w#>Ž ÂüwÉ!›Í Â!’ÍUÉÍf!¡ ÍU>2­!–:ŸG~�†òÍî!–~§ÃöÍÃ!’ÁÍ=!±’Í]!µ6!±Í)͆!–4ÊH!µÍ3Ã6>2¶!µ~§Êp!µ>0†*®w#"®!¶5ʹ͆ÃU!°5!±Í Âc¯2¶Ãc¯2µ!¡±Í]!±Í)!±Í)¡!±Í=!±Í)É*®6E#:°§òÑ/<2°6-#:°Ö úß2° ÃÓ>0�w#:°Æ0w#6É!›¼Í]Í�!°5É!›·Í]Í�!°4É7~/Îw# Âɯ¶# Â!§É§~w# Â*ɧ~w+ Â4ɧŽw# Â>ɧëž# ÂJëÉ6# ÂUÉwÍ n&É Í7*Ÿ:¡wÉ1Í Å#+|µÂ ÁÉ'z³Âå ÍæáÊåÍþÊáà  / Å ÍæÊÁÉ Í7Å*¡~#þ Êþ Ê+ë*ŸÍ&!ÁÉ vÍ7:ŸÍ)Ú~æÊÅ:ŸÍ,"s!"u*£|µÊV*¡ëÍ*sëÕÍÑþÁÊÅþÂ[! ~þ€ÂV6*uÁÉ*£+"£*¡€"¡*u#"uÃ"(HRthÍ7:ŸÍ)Ú~æÊÅ:ŸÍ,"s!"u€Í*£|µ*uÊf*¡€€~#Â="¡*sëÍ·*uÂf#"u*£+"£Ã*ÁÉ3CVdDÍ7¯Í,Ú2që*ŸëÅÍ&ÍþÿÁÊ:qÍ):¡·Ê<=Ê<=Âr:qo&É.4Ã#UNLINËOPEÎ1à ÃÃÍ7*ŸÅåÍÑ\ÍþÿÁÊ!å*ŸåÍÑÑÉ,Í Åë!\Í&Í!ÁÉTELÌkÃÃÍ7:ŸÍ,ÚÅå*ŸåÍÑë:£*¡·Ê(}|æ2qã å¾ÊYãëÕÍÑáþÿÂOÑÁÃ:qwÕÍÑþÿÊJ! Ñ{æwëÁÉ%9H]&Í Í,ÚÅ FN¯xg>G�oy ò$$ÁÉ![Í7Å*Ÿë!*Í&*¡ë!:Í&*ÍÁþÿÊ!ÉÑÑÉ,Í Åë!\Í&Í!ÁÉTELÌkÃÃ Í Í)Ú6!ÉÍ Í)ÚÍ Í,Éà Í7Å:ŸO*¡ëÍo`ÁÉ$Í7Å*+++:ŸG‡€_å*¡DM!ãéo&ÁÉ*É*É*É*+É…Í7Å*Ÿë!Äÿ9åååÍ# Â]É:•2 §òx!’Í! :ž®w:ž§ð!›ÍÉffffýP€ "),/$WZ369<?BEHKNQTbjnu}„‰��”—œŸ¤§ª®³¶º¾ÁÈËÐÕÙÞáäçìðõùü  !$),/369<@DGJMPSVY^aknsw|‚…Š��–›ž£¨«®³¶º½ÂÅËÎÑÖÙÝãèìïô $),/7:=@EIMRUZ]adgjmruz‚†‰Ž‘”™œŸ¤§¯´¸½ÂÅÏÓó÷ÖÛÞêíðãý $',147;>CFKNSV\adhknquz}�„ˆ‹Ž“–›ž£¦©®±¶ºÀÄÉÏÖÙÝåïò÷úý  %0:EQZcgjnqvy|�†‹SV\adhknquz}�„ˆ‹Ž“–›ž£¦©®±¶ºÀÄÉÏÖÙÝåïò÷úý  %0:EQZcgjnqv.cm comments about the files on this disk .cm source: bds.doc .cm version: December, 1981 .bp 1 .he 'bds.doc''%' .fo ''-#-'' .ul Primitives The following files contain the software tools primitives written in BDS C: TOOLS.H, DATE.BDS, Fch are written in assembly language. Note that some of the names in this file have been changed. This file was, of course, created with CLIB. The file COPY.BDS is a test propram for the primitives. The file ARGS.BDS also contains a main() function which is a test of I/O redirection. The file SYMTAB.BDS contains a main() function which is a test of the symbol table primitives. The .SUB files on this disk are SUBMIT files used to compile or link the primitives. The file TOOLS.SUB simply compiles all the primitives. The files LINKARGS.SUB, LINKCOPY.SUB, and SYMLINK.SUB link the files ARGS.BDS, COPY.BDS, and SYMTAB.BDS. Note that linking all the primitives together is fairly complicated at this stage. .ul Utilities and documentation The file RAT2C.BDS is a filter which converts RATFOR-style comments into BDS C style comments. At present this program is the only tool that I have for converting RATFOR programs to C program. The file CONVR2C.DOC tells what has to be doILE.BDS, RAWFILE.BDS, ARGS.BDS, MISC.BDS, STORAGE.BDS, STRING.BDS, CONVERT.BDS, SYMTAB.BDS, and PATTERN.BDS. The file TOOLS.H contains all global variables and declarations used by the BDS C version of the software tools primitives. This file must be used in ALL programs instead of BDSCIO.H. This file contains portions of BDSCIO.H and RATDEF. See the file TOOLS.H for more comments. The files FILE.BDS, RAWFILE.BDS, ARGS.BDS, MISC.BDS implement the I/O primitives and I/O redirection. (MISC.BDS contains some odds and ends.) I have been using them for several months now with no problems. The file STORAGE.BDS contains the dynamic storage allocation primitives. This file simply calls the BDS C allocation primitives. The file STRING.BDS contains string manipulation primitives. Not all the primitives on this file have been debugged. The file CONVERT.BDS contains various conversion utility routines. Not all of the routines on this file have been converted from RATFOR to BDne to convert programs from RATFOR to C. You may be surprised (or shocked) to see how difficult it is. The file CHANGES.DOC tells what changes should or could be made to the primitives. The contents of this file are only opinions, but I hope they will form a starting point for future discussions. The file FILE.DOC tells how the primitives implement I/O redirection. Some of this information can also be found on TOOLS.H. .cm changes made to primitives .cm source: changes.doc .cm version: October 15, 1981 .bp 1 .he 'changes.doc''%' .fo ''-#-'' This file discusses changes that I made to adapt the primitives from the Software Tools Users Group to the environment of BDS C. As I mentioned in the file CONTENTS.DOC, these changes are not very satisfactory. The resulting primitives are compatible with neither the Software Tools Primitives nor the Unix primitives. However, many of the primitives supplied by tS C. The ones that have not been converted are commented out. The file SYMTAB.BDS contains symbol table creation, deletion, and lookup routines. These routines are used by the ROFF program, but you still might want to revise them extensively. There are more comments on the file SYMTAB.BDS. The file PATTERN.BDS contains pattern-matching and set manipulation primitives. None of the primitives on this file have been completely converted to BDS C and debugged. Indeed, the primitives on this file are in various stages; some are mostly RATFOR still while others are mostly BDS C. The file TOOLIB1.BDS contains most of the library routines from STDLIB1.BDS and STDLIB2.BDS. Some of the routines were modified for use with the directed I/O routines. Some of the names of routines were changed to avoid conflicts. Some of the BDS C routines were deleted. See the comments on the file TOOLIB1.BDS for more details. The file TOOLIB2.CRL contains the object for all the BDS C routines whihe Software Tools Users Group have no analog in the Unix primitives. Thus, it will still pay you to look at the primitives and see what you can use. .ul Changes made to BDSCIO.H All global definitions used by BDS C and the Software Tools have been combined into the file TOOLS.H. The following changes have been made to BDSCIO.H: 1. I have not included the constants for terminal characteristics, serial port characteristics or modem characteristics. I really don't see why these are needed in .ul every program. However, the definition for ESC does appear in TOOLS.H. 2. The definition of MAXLINE has been moved so that it appears with all other constants which affect data structures. 3. Ditto for NSECTS, BUFSIZ and struct _buf. 4. Since the Software Tools assume that dynamic storage is available, I have removed the ALLOC_ON and ALLOC_OFF definitions. All tools compiled with TOOLS.H will have access to struct _header and the variables _base and _allocp. I think this is aict with the names of the primitives used by the Software Tools. The following BDS C routines were changed by prefixing them with an underscore character: close, creat, exit, fclose, fcreat, fflush, fopen, flush, getc, gets, getchar, open, putc, puts, putchar, read, rename, rcfsiz, rreed, rseek, rsrec, rtell, rwrite seek, ungetch, unlink, write The routines getc(), putc(), and ungetc() are now defined on file FILE.BDS rather than on STDLIB1.C. These routines had to be completely rewritten to allow for I/O redirection. Some other changes were made to the code in TOOLIB1.BDS to allow for I/O redirection. See that file for more details. .ul Changes made to the Software Tools Primitives 1. The calling sequence of getch() was changed. old calling sequence: c = getch (unit, &c) new calling sequence: c = getch (unit) The change was made because the old calling sequence is awkward in a C environment. The old sequence was used because the following is not l reasonable scheme because there are lots of variables whose names start with either _ or SYS_. We might as well just prevent the user from using variables and functions which start with those characters. Another reason why this decision seems reasonable is that the dsinit() primitive makes it unnecessary for programs to access _base and _allocp directly. .ul Changes made to RATDEF: 1. I have eliminated many of the definitions for ASCII control characters. This was done in an effort to control the number of names that the system is supposed to define. 2. I have eliminated all of the definitions for individual letters. For instance, I see no reason to define BIGA as "A". In RATFOR, there is a reason, but not in C. 3. I have eliminated most, but not all, of the definitions for printable ASCII characters. I have kept only those characters that may not appear on most keyboards or which might be confusing inside quotes. 4. I have eliminated most RATFOR language extensions becausegal in a RATFOR environment: while ((c = getch(unit)) != EOF) { 2. The calling sequence of getarg() was changed. old calling sequence: arg = getarg (n) new calling sequence: p = getarg (n) In other words, the new version of getarg() returns a pointer to the argument where the old version copied the argument. The change was made because there is no need for getarg to actually copy an argument. Returning a pointer to an arg is more natural in C. 3. Getwrd() changes one of its parameters. Thus, the calling sequence must be: j = getwrd (in, &i, out); 4. The old definition of type() is absurd. There is, in fact, not much use for this "primitive" in C. I suggest that type() return "a" for alphabetic characters, "0" for numeric characters, and the character itself for all other characters. See STRING.BDS for the new definition of type(). 5. Stcopy() changes one of its parameters. Thus, the calling sequence must be: stcopy (from, i, to, &j); 6. The C version of ie they already are a part of C. Indeed, their purpose was to make RATFOR look more like C. 5. I have eliminated most of the "manifest constants". These are either unneeded or are duplicates of BDS C constants. 6. I have (reluctantly) kept most of the constants which affect the size of data structures. This is one area where having pointers eliminates a lot of Mickey Mouse declarations that do absolutely nothing. There is a real difference between: int vector[] /* in C */ and integer vector (ARB) # in RATFOR. The diffence is that there are a lot fewer irrelevant names (I'm talking about ARB) to worry about. 7. I have eliminated the DRIVER and DRETURN macros. I don't know how to implement them in BDS C. 8. I have inserted declarations for variables used by my implementation of the primitives. These declarations are needed in TOOLS.H only because BDS C does not have STATIC variables. .ul changes to BDS C routines The names of several BDS C routines conflndex must return one less than the RATFOR version of index because C arrays start at 0, not 1. 7. The length() primitive in RATFOR is a duplicate of the BDS C strlen() routine. 8. The RATFOR ctoi() routine changes one of its arguments. Thus, the calling sequence must be: ctoi (string, &i); 9. I have not examined (or converted) many of the routines in CONVERT.BDS or PATTERN.BDS. I can't say for sure what may have to be done. However, many of the routines in PATTERN.BDS change their arguments. Thus, the calling sequences for these routines will have to contain the & character. 10. As I have said before, I don't exactly know what to do with the routines in SYMTAB.BDS. The routines there do work, but they assume that the information field associated with a symbol is a string terminated by an EOS. This is not a very good way to design an important primitive. See the comments and code in SYMTAB.BDS for more details. ration. .ul changes to declarations .ti +3 The RAT4 keywords function and subroutine must be eliminated where they appear. .ti +3 RAT4 groups parameter declarations with declarations of local variables. In C, these two declarations are separated by a {. .ti +3 The RAT4 keyword integer and character must be changed to int and char. .ti +3 The RAT4 keyword pointer indicates (probably) that the variable is an int whose address will be passed (via &) as an actual parameter. It is not clear whether the RAT4 usage of pointer is consistent with good C coding practice. .ti +3 As mentioned before, include statements inside RAT4 subroutines must be eliminated. .ti +3 The RAT4 data statement can not be simulated directly without C initializers. An alternative is to create global variables which are initialized at run time. .ti +3 The names of functions which are used by a RAT4 subroutine appear in the declarations of that routine. These declarations must be eliminated from C.cm How to convert from RATFOR to C .cm .cm source: convr2c.doc .cm version: May 22, October 14, 1981. .bp 1 .pl 66 .rm 60 .he 'convr2c'RATFOR to C conversions'%' .fo ''-#-'' .ul introduction .ti +3 This file tells what I had to do to convert a large program (ROFF) from RATFOR to C. Most of this file was written just after I finished the project, so it is quite complete. .ul general changes .ti +3 Comments must be changed from RATFOR style to C style. RAT4 comments start with # (outside strings) and continue to the end of the line. C comments start with /* and continue to */. The program rat2c converts from RAT4 comments to C comments. .ti +3 Multiple spaces may be replaced with tabs. The routines entab() and detab() are only marginally useful for this. .ti +3 RATFOR define statment must be replaced by the C #define. The RATFOR define looks like: define (a,b) The C define looks like: #define a b Note that the C define must start in column 1. No arithmet programs. (The C compiler thinks local variables are being declared.) .ti +3 RAT4 uses parens to declare arrays. C uses square brackets. .ul changes to executable statements .ti +3 The biggest problem is probably subscripts. (See below for a more semantic problem with subscripts). RAT4 uses parens for both actual parameter lists and array subscripts. C uses parens for parameter lists, but square brackets for subscripts. Clearly, whether to convert to square brackets depends on knowing whether an id is an function or not. .ti +3 In C, all statements must end in semicolons. Once again, a full RAT4 parser is needed in order to know where to put the semicolons. .ti +3 RAT4 assignment statements like: .in +5 i = i + 1 .br .in -5 can be changed to: .in +5 i++; .br .in -5 .ti +3 In RAT4 functions, the name of the function is used as a variable which denotes the value returned by the function. In C, the name of a function denotes recursive execution. In C, a new lic is allowed in the C define. .ti +3 RAT4 had the ifdef and ifnotdef pseudo ops. These may have to be changed in some versions of C. They can be replaced by just commenting out code or by creating runtime global variables corresponding to compile time variables tested by the ifdef. .ti +3 RAT4 uses includes inside each program for including declarations of variables. In C, these #includes appear once at the start of each file. The includes inside each RAT4 program must be commented out and replaced by a single set at the start of the C file. .ti +3 Printable character constants can be eliminated from C programs. I think that RAT4 uses them to get around problems with character sets. At the present time I can see no reason to have constants for printable characters. I may be wrong though. .ti +3 RAT4 common blocks must be replaced by global variables declared in a header file. Array dimensions must appear in the variable declarations in C rather than in the common block declaocal variable must be declared inside the function and the function must return a value with a return(value) statement. .ti +3 My version of C does not have a repeat statement. The RAT4 statement: .in +5 repeat { ... } until ( ) .br .in -5 must be replaced by the C statement: .in +5 while (1) { ... if ( ) break; } .br .in -5 .ti +3 The RAT4 statement next must be replaced by the C statement continue. .ti +3 RAT4 uses call statement. C does not. RAT4 calls with no arguments do not need actual parameter lists. In C, a function with no arguments still needs (). .ti +3 In RAT4 all arrays start at 1. In C all arrays start at 0. This means that array declarations will have to be changed, as well as all code that refers to the limits of arrays. In practice, a semantic analysis of how .ul all variables of a program are used is required. Almost every part of a program might need to be changed: initialization of variables, for loop indices, actual parameters, etc. . system maintains the following file information: int sys_spec [SYS_STD + MAXOFILES]; int sys_bufp [SYS_STD + MAXOFILES]; int sys_bufn [SYS_STD + MAXOFILES]; .ti +3 As you can see, there is one entry in each array for each unit. If sys_bufp [unit] != ERR then I/O is assigned to the file whose buffer is sys_bufp [unit]. Otherwise, if sys_spec [unit] != ERR then I/O is assigned to either special unit 3 (the console) or 4 (the line printer). If sys_bufp [unit] == sys_spec [unit] == ERR then the unit is not open. .ti +3 Note that both sys_bufp [unit] and sys_spec [unit] may be non-ERR. In this case the unit is NOT a special file, it is a disk file. In other words, sys_bufp [] is checked before sys_spec [] in getch1() and putch1() and close() and flush(). This is somewhat of a kludge, but it makes open() simpler. .ti +3 The array sys_bufn [unit] is used only by open() and close(). sys_bufn [] keeps track of which disk files (0 -- (MAXOFILES - 1)) have been assigned. Close() ti +3 RAT4 uses call by reference. C uses call by value. This means that if a RAT4 subroutine changes any of it's arguments, the C routine will have to pass a pointer to a variable, rather than the variable itself. The C routine will have to change the variable via indirection. This also means that C programs do not have to protect there arguments from change like RAT4 programs do. .ti +3 RAT4 uses & and | to indicate AND and OR. C uses && and || to indicate boolean AND and OR. C can use & and | only if each relational clause joined by & and | is fully parenthesized. .ti +3 For best portability RAT4 uses the construction: .in +5 junk = func() .br .in -5 even when junk is not going to be used. This is not needed in C. .cm File primitives for Software Tools .cm source: file.doc .cm version: August 9, 1981 .bp 1 .rm 60 .pl 66 .he 'file.doc'File primitives for Software Tools'%' .fo ''page #'' .ti +3 This file discusses the file primitives for the software tooluses sys_bufn [] to deassign disk files. Sys_bufn [] may not really be needed, but without it close() would have to do some hairy pointer subtraction and division on sys_bufp [] in order to figure out what disk file was being closed. It seems simpler to use sys_bufn []. .ul system initialization routine .ti +3 initst() initializes all system data areas. It puts the command line arguments in sys_args[] and puts the number of command line arguments in sys_narg. It redirects I/O if requested on the command line. This is done by calling _assign() which in turn updates the arrays sys_spec [], sys_bufp [] and sys_bufn []. clink args file rawfile misc string toolib1 toolib2 file ile misc string toolib1 toolib2 d); } turn *iobuf -> _nextp++ clink copy -s args file rawfile string misc toolib1 toolib2 EprompôJisattùKputliîLflusèMgetliîNputdeãTitoãUputãVreads. .ul file open routine .ti +3 READ, WRITE, READWRITE, and APPEND are global constants known to all programs. .ti +3 WRITE access implies erasing the file first. READWRITE and APPEND access are currently illegal. .ti +3 If name = TERMINAL then open() must assign the I/O to the user's console. If name is PRINTER then open() must assign the I/O to the line printer. Note that because BDS C truncates names at 8 characters, the name TERMINAL is the same as the names TERMINAL_IN and TERMINAL_OUT. .ti +3 open() returns unit numbers to the user. Units may be assigned to disk files, the console, or the line printer. open() never returns unit < SYS_STD. .nf Unit 1 is reserved for standard input. Unit 2 is reserved for standard output. Unit 3 is reserved for error output. Unit 4 is reserved for the console. Unit 5 is reserved for the line printer. .fi .ti +3 open() might save the file name for the software tools error routines. At present it does not do so. .ti +3 Thexsub clink symtab storage args misc string file rawfile misc toolib1 toolib2 ren toolib2.brl=toolib2.crl era *.crl ren toolib2.crl=toolib2.brl cc1 file.bds cc1 rawfile.bds cc1 toolib1.bds cc1 args.bds cc1 string.bds cc1 misc.bds cc1 convert.bds cc1 date.bds string.bds cc1 misc.bds  if (fd == SYS_TERM) { BDS_pchammand line arguments in sys_args[] and puts the number of command line arguments in sys_narg. It redirects I/O if requested on the command line. This is done by calling _assign() which in turn updates the arrays sys_spec [], sys_bufp [] and sys_bufn []. clink args file rawfile misc string toolib1 toolib2 file ile misc string toolib1 toolib2 d); } turn *iobuf -> _nextp++ clink copy -s args file rawfile string misc toolib1 toolib2 EprompôJisattùKputliîLflusèMgetliîNputdeãTitoãUputãVreadåå ', , <=?¢ÿÌÿéÿ¤ÿ·ÿŽÿB‰ÿDACEFG@HÙÿ¿ÿ­ÿ«ÿºÿÒÿ½ÿ¼ÿÛÿïÿªÿ§ÿ®ÿ¬ÿ±ÿÑÿÿþ³ÿ‚ÿ´ÿ¸ÿ‡ÿ»ÿ¹ÿ_ì¨U1Ê®ÁQÑv¼6Þ­¸á[�ÃW­Ü]±oŽ«$)¸tž oú/_¼¶<Ð&{Ø8*Úoú/^õ<W\%IÁ¥õ�‰Þ/^õ¢iµvÿTPKERM.HLPCßÿ šÿ¯ÿ‹ÿÑÿ–ÿžÿ �ÿ¬ÿ�ÿ!‘ÿ"¾ÿ#oÿ«ÿŒÿ$%òÿõÿ'&—ÿ(*)ºÿŠÿ+´ÿ»ÿ’ÿ,“ÿ›ÿ-.�ÿ­ÿ™ÿöÿüÿ0ûÿ¶ÿ/±ÿ¼ÿ21²ÿ3˜ÿ�ÿ64œÿ57ÎÿÒÿ‰ÿ³ÿ°ÿ9ˆÿ:8†ÿ;Óÿ<ÇÿÖÿ×ÿÉÿ=Ìÿ?>BA·ÿ@ÈÿÏÿÐÿµÿ½ÿåÿúÿ¿ÿ¦ÿÅÿ©ÿÆÿÊÿªÿ‡ÿÿþäš4“¦ç(=yÖJ§·ñhÈZYŸß©¨›iµ–óEäí©“]� a·b\Q4ÅjEÝÉ5ižµÒém ˜ƒ)žºZoÍ­x›siŠåþ´aŠmÏj­¹c›'±í#yœLšË7Uð\ýä\šfõ�ÚËìOÓ «éBor|êjãmü¹´†nÑ£%͹úÉÕŸ5d­¬ðw*êæHŒ+Цì[a5U»èR!�æÅmF±÷í.o»Ëýi#‘¯Èk ö¨Õ#_Ó€†ÌmObŒ;?íeȸ-ú¬vÚH. Y+ëó;u3­Örž ÓTš«?kXU›ª¶—*õ5¤§Nv=ÓÛ4×ÚôT©€Ç§›¦ßϹ´Ìña5�êצ 9¾¡çÒšýy.¿ž°:m#åÜC…¬ÍìÏseµUÍ~T�¦R£t+äø ódžkÚœKc8ƒNSm/5¨¯e?#!—¦ªíå´ š^uW|­³1m7s륆ïÖj-çI1é©“]Ïô6·^*€áx;¾tXø›üvA6ãK`8Þ>n2¾tXø›üÇíAÆ—Àp¼-ÈøÒaáoò‹2¾t†ãíë_nãK‡…¿ÉýËm|é ÇÛâáþ‹Üe|é°ð7ùÅÃýñ¥0ow,/|é°ð7ù;–—?¾t†ã-²ÜÇ— “�,÷ñ¥0oÉ‚lÆ— “Od3¾t†ã­[nÅøÒaáoòÝr+Æ—Àp¼E–;s|é°ð7ùÈrgŽ/€áx{ßãK‡…¿É¿oŠñ¥�!_÷‡ËË µàY�3=ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååÖC&z¿xÕ‹¦Õ°2ÑûÅ«^4M½õ�‰Þ/^õ|·™ y2®§;­¿xÕçqk·2äɸžî´Þ*oûVÀ_¼‚ín3òd\OwZÿ~ñªÏã ÖneÈ“q=Ý9h½UÞö­€¿xh“¿xÉ<Žª} Ó˜'ãzºsÐz«¼í[ñJåɸâ*I .­‡WQº!OÆõtç �µcTí™Æ<×Ó�ƒÖ÷_¼yǯTžŒ+®’¤àÒzÈy2®§;íýâ—ï¯ú<Žª} Ó˜'ãzºsÐz«¼í[ñ –ȸ1äɸžî´±vŒª} Ó˜'ãzºsÐúþ‹Wyǯ`žŒëéÎA³2ÑûÅ«žï6“!OÆõtç õï¯ú<Î`íV†<×Ó�ƒÖ[åmß ø‹Wð�6ù‹—Ìã¨Ú2�y2®§;­·ÊÛ¾ð¯TÑ´Zë!ÇU”nÈ“q=Ý9hcíUû@¦1OÆõtç õý/AÞñÅ+U4­ÖzÈy2®§;íýâ—ï¯ú<Žª} Óè<×Ó�ƒÖ[åmß ø‹W°DÆ�!OÆõtç �µcTí™Æ<×Ó�ƒÖ÷_¼êÈ;¾xód\Owšõ�‰Þ/^õ|·™ y2®§;­¿xÕçqk·2äɸžî´Þ*oûVÀ_¼‚´É_¼dGÕ>�iÌ“q=Ý9h½UÞö­€¿x¥Š¦Õ°r\Eé†<×Ó�ƒ6ÖŽQµdód\OwZßñä_¼REÓjX9OÆõtç ½_¼‚àòýâUŸÇQµd�'ãzºsÐz«¼í[ñ –ȸ1äɸžî´±vŒª} Ó˜'ãzºsÐúþ‹Wyǯ`žŒëéÎA³2ÑûÅ«žï6“!OÆõtç õï¯ú<Î`íV†<×Ó�ƒÖ[åmß ø‹Wð�6ù‹—Ìã¨Ú2�y2®§;­·ÊÛ¾ð¯TÑ4õÖCŽ«(Ý�'ãzºsÐÆÚ1ªö�LcžŒëéÎAëû/^‚¼ã‹Wªhšzë!çɸžî´÷‹W\¾_¼¶€Ë×ÃÆQÑvxÓù2l^nú/_ì¨U1Ê®ÁQ«’è~=l¾Í¾8jUÝN°ï…oú/_¼¶<Ð&ñª‡oóÆ@�†-™·Šú÷‹×pù~ù2l^nú/_ì¨U1Ê®Áî+NÊ+OÆëaㆢô­Àq•$—ΓáMÿå‹×–Úä/^õ†¢Ì<äɸžî´þýâUŸÇ¬ÝÊ�'ãzºsÐz«¼í[ñ >Ð&ñ’¨h;Þ/^;œ'㊫$)¸T[«ÎÕùâ•¢ÀÒH1Y÷�–¼_¼R8©$ë.g{¿x¥( &y6\ž”Á£5´†“~0Ÿô#õEëgü©?ÃåIürTûl×?Æ·öYw¾ñ5 |\[±ÀG˜äIx†Ë“2x”Ö>ë.¿<=4\ž”Á‡Ç7þ¡¦��á…PZû¬»Fåòƒå/F*4\ž”Á£5˜šôµÏæÿLp$á.OÊàÃãÿPÓÀG”Ö>ÛÿÊ´öY­Fåò+1R¡áòW´­Át?éó.eÞ¡‘ú3\þŠÖOä."û¸Õ>Û —¿¢õk+f¸ü­Ø’%ií³Z�ÊåWþb¤BÃåI‹ÿ+ÓÁ|B6ɉÔÔÜå¨öÚg݂㳗Îùñejj2=äk¸üÚ‹tøb!`”Ö^û,æãËÄ¢p~âÎdúi˜Ô‰.Eë'®œáò¤ ~ÆŸ9ñ§aR§‹®�h\í³@2QJ¬}Ÿ£ÚkŸÅ7‹Sû¬6óÎ¥µÇ—û“Ö>«•‡›íE:|±PZû¬Öpù+Z¿ö"¾˜kØ%­}Vk¸<)ƒ_{‘_ÌUÇ%­½öY¼þ1¾µ×>«²IN¤¦æB¾†Ë‡'7x†Ë_Ñúð —'eð(Ì84ÃåcðÙø.8>ø3ãOk9ª}VËfòpó�ï\“&& PÒÈÄe¤þ­}¶›LïrY[1$”‡›­Ñà ®óEòçGêOnþÅà³å¨öYí—øµÏv“é]C.k+Ö0ÌçÄŸ|#œB“‡›9ª}VküYæ�Kk+ùé~Òæ ß‘ú3\þŠÖƒÖÄs„r>ø#ˆý ïzZ¤Ã[ŽjŸí&Ó»†¶Ì;—\ÖVÌ —¿¢õ®™w.¹ ´öY­ñg™w.­­Xhä§3éóEÑúf¸<)ƒ 'Òô?¾ôØŸ8õÏ/GµÏv“é]›<°e޹䲶bþHh¸<)ƒwͼsÉ¥µÏj�?˼simÅB:#?œLúÁ|ç#Í›é´.㸆I\ŽjŸí&Ó»f޹䲶b ÓÚgñeZ{í³nÁñÙKçüâ‹“©†O$Ø,ÎÎG§ÐÚãK�ýAiíµÏâa¾øâdêŒ?3|"M]Ѹe¢І«�N¡q\à#û;¾Ó—&NïógÞÔ> Äpù|ž?›]?ÃåÇqÆ;W.Gµ×>‹×?Æ·öYíùèZ[1½ôâ …'¤<Ðdz„ÒÚgñeZ{í³nÁñÙKçüâ‹“©÷6‹³óÑ)´öøÒcPZ{í³x˜/¾8™:ãÏîÐtѵ�[&J W�Bã¸(Z?'ô¾ù—£ÚkŸÅëã[û dÝ´É_¼Òâb‡ód\q•$—jk¨su¾x¥§@h¤FÖ]"Ÿ™ñ~ñJO5¥‘ÂNÖ½u7ï÷‹W¸|=l;¼é¿x©—﯆Fzh¤0ÓH™F <�tȺÏä¹+﯅�FÒȺh“¿x¥Å¹íq{¿x¥íwqÃzÈîëÌŒ÷‹WZCŒY3Þ/^jÀåûÅ+E[ÑH Y·‚½_¼Rik²î­»y¿_¼R�ÔȺh“¿x¥Å¹íq{¿x¥íwqÃzÈ 1f͸&Ïûýâ•ÖcÖŒ÷‹—pù~ñJQi¤�¬û�6ù‹WZ\ìpžŒ+®’¤àRm u®Î¯ô�²î¸Øá<W\%IÁ¥Zõê\�/^P8h$&ëÞÁåûÅ+ ”FºÉºwÜWT´"y¿x… \¾6Ž‹Þô_¼ÒÓV4’BÖ½+Uø÷‹W¸|=l;¼é¿x©—¯‡�ãb‡woú/^)ä_¼Â¾Í™ª Ï$ÊHÀ7JÇU’\޾ÓEðVÈ‘OÕœç~»:Ž«$)¸ÜÃIýûÅKÀåëaã¸ØáMÿÅ+.ß/^[Àåû%ý K˜Ö÷_¼êÈ;¾xód\Owšõ�‰Þ/^õ|·™ y2®§;­¿xÕçqk·2äɸžî´Þ*oûVÀ_¼‚´É_¼dvÿÓTPDIR.PASTßÿ  šÿ‹ÿ–ÿ�ÿ‘ÿõÿ“ÿòÿŒÿ�ÿ™ÿoÿžÿ›ÿÖÿ !×ÿ#"œÿÕÿØÿÄÿ�ÿ$Šÿ%'&(—ÿ˜ÿ)+*’ÿÅÿ-,ÎÿÓÿ./0�ÿˆÿ÷ÿÂÿ†ÿ1ùÿÑÿ2435‰ÿ76¢ÿ¤ÿûÿóÿÌÿ8:9ÔÿÍÿ;Êÿ‡ÿ<> ÿ=?ÃÿÏÿA@DBÀÿCöÿEÁÿñÿGHIJ”ÿF¹ÿK½ÿ»ÿLÛÿON²ÿMP¼ÿ¬ÿ«ÿ°ÿ¯ÿðÿÒÿ…ÿ¾ÿ•ÿÆÿRÇÿSQ­ÿËÿ±ÿÐÿÉÿïÿåÿøÿ·ÿçÿÿþºÿúÿÞÿµÏºÇg/�ó²IN¤¦æBÃåÏ›µéðÅBÀéšÅ™<Üük/Òá‹…ÒÚgq»Yœ.Eë×^¤Ã §kg†Ë“2øµéðÅtPZ{í³x˜¯ñ*ÇÇg/�óËümþCqb‘_l|É�Ô_$q¥8r@7ç¸ÌøÓTû,ãÏ‚ã³�‘/ZãUŽ3þ´�ãD)s‚àÏ2?ë–£ÚkŸuk§öY¼áòW´~íE:|1×°KZû,ÞpyR¿ö"¾˜«ŽKZû,ž¯|€ð2ï\ ï|t ­=¾ôØŸ´öÚ7ýc|kŸuc3q°ÐK’‘ú·öY¼8XhmÅ’”'é`>Í'¥ì¼�¥ŒÔŸáòW´>.GµÏºñejj2= ¡tƒùâÓœ`¤þtZ—å¨öY7½ôâá )”-�P:˜/>Í FêO¶Ä„”çc\ŽjŸu‹/N¦>‘àùèBéóï›ñg¤þ ŸH“|>#”ûKG¹Õ>ë–yçÒÚŠ5LóeþÒŒ?3þ´_lÞ¡À¡ñ%?\/ø³Â÷—£ÚgÝØì|t ­ ��Ô¿ƒù4‡éGêÏð‰4Ãå¯hýrTû,^ÿßÚgµšÃô妵Ïj5‡éË…‰®|>#”+‰/6ãÏ’ðÄÁB(­}V«9L_nZû¬Öø3¾òÖV ÂóÑ)´|:àh` ¡‘„ç£ShùtÀÑÀÖd4ékŸíšÃô0S”-áÊW>€ Bií³ZÍaz˜€”Ö>«5þŒ¯|€µƒð|t -Ÿ8ØB ÑÈÂóÑ)´|:àh` �£I_û¬»æ0=ÌÔeK¸ò•à‚PZû¬Vs˜&k/Aií³ÚÌ;—ÖV,óÎ¥�-”Ö>‹ÿ+kŸuû¿öY¼æ0}¹0¹~†Ë'(̇9ã˜&ýß„öi9ª}ÖM£rùÁóÑ)´€ Œ&}í³xýc|kŸÕÆ'Sï<�B(Ìר°â}c|±å¨öY-›��N¡54p`à‘ú·öÙ®Œoí³î™w.­­Xæ�K[(̧wZÁHýIŽAÊeÞ¹ôg9ª}ÖÝø3¾òÖV ž�N¡åÓG[häáùèZ>p4°5MúÚgkÓÃL=P¶„+_ù.¥µÏºkÓÔ ´öYwãÏøÊX[1ÏG§Ðò連�-Ô�ü <�B˧޶8šôµÏÖ¦‡™z l W¾ò\JkŸug33ï\ZËË£)Ö�Ô¿µÏÖ¦/·öY÷/ñkŸ¬9L“µ— ´öYí_™Ö>ëöW¦µÏºiÓ—›Ö¾ý•iíµ‡#‰µÏáK~¤þ"¾ØØŒÔŸ†‹ÌÄ‘q8æÏò‰ó3Þ¹r|Gê/Òá‹�jŸ¢_QŠ2‹ÏQíµÏâ›Å©}VË7þ¡¦��áeÞ¹´öøÒcÒÚkŸÅëã[û¬Öø³Ì;—ÖV,4ò+1R¡áòç šôƒù2›ÿÐÈÏ ‚?ËDüå¨öÙÎfÐpùóÆ5óÎ%—ñ�k"(iBâ‚FêßÚgÝ —?o\3ï\rY[±L=Ð —?o\3ï\rAWwiPZû¬–ÍaJÂ3\þ¼Akh GêßÁ|ñqýHý.¿+Z?qåHürTûl×?Æ·öYwÃå¯hýÚŠe>PBÃåÏ›ðBá>”„g¸üyƒÖè…PZû¬»áò¤ ~mÅ2(¡áòçMx��0%á.Þ �-žJkŸíeí³Ú/ñkŸíúÇøÖ>ën¸ü­_[1ÃåÏ›´öYwÃåIüÚŠ%I:˜ïú.?R?¾#•ã29ª}¶ÿ•ií³Z6 |„I; Ïpù+Z�ÖÐŽÔ¿ƒù2õ³Æfü™<Üü‹ÁgËQí³]ÿßÚgÝåáæ_[±ÌJh¸ü­/^à#LÚIx†Ë_Ñz´F/„ÒÚgÝå—§‡†Ë_ÑúðBá>¤�„g¸ü­G(­}Ö�Í —¿¢õS,IFêßÚgëã[û,N —¿¢õk+–äIZû,N —'eðk+–äIZû,à¿2­}¶ÿ•µÏj¿Ä¯}¶ËÃÍ¿¶b n&é`>é´ZÊ5‹âüŒ? Ä­å¨öÚgµ•Ë>Â$O†Ë_Ñz´€ÖMúÁ|†¯œ¸Ê%y2 ™‰#ãrTûl×?Æ·öÙÎ7þ¡¦��k+ø“< Ïpù+Z�ÒÁ|†¯©¿xZŽjŸíòËÓCÃå¯h}x|ãjø^¥̇=í°œ7Ë—£Úg»Fåòƒå/F*4\þŠÖ£5˜îѤ¯}ÖæãÿÐp$qÎ%.3\þŠÖ�ã —ò4œyú‘*h¤þ ŸHKò¤öÙFi¸”.e¤þ"¾XxÑO\å<©–'q|GêïŠÖOÃ¥LÿµÏ6J~yz9qåÎEd/§aR'ùbå—àH@[’7–'Óp)Óí³�ÊümþC/G~ ‹o GRû¬{ŽjŸuçÿLp$á.EëÃãÿPÓÀG”Ö>«ý+ÓÚgµ•Ë/ðoÁñÙKçüäÃåÓÁ|òËÓ�Ô_üò½œáòq9ª½öY·fqjŸÅŸ�N¡µÇ—û“Ö>‹7\þ¼Y{‘_,œÖ^û¬[p|öÒ9?ùåé —‡Íâì|t ­=¾ôØ”Ö^û,^ÿßÚgµç£ShmÅôÒGˆ{H'‹ÿ+ÓÚkŸuÓ?Æw0Ÿüb¸ürTû,žÍÄÁBS,IFêßÚgµúÇøÖ>Û5‡éËMkŸíšÃô0ÑÝKf¸<Œhä÷GÄo/Aií³ý¼�åBq°JkŸÕþ•ií³x¾LMM¦‡â`!”Ö>‹—_žÞpyx>:…PZû,žÍÎG§ÐøÎµ!¤ã2RÿÖ>«Õ¦/&ºqyÑä—§— Õ>‹ÿ¿öY­æ0}¹0Ñ�ËÈv=ÍxçJP‚ÒÚgñšÃô妵Ϻý•é`>ùÅpùå(·t>Í FêO¶Ä„”çc\ŽjŸu‹/N¦>‘àùèBéóï›ñg¤þ ŸH“|>#vÿômTPDISP.PAS: ßÿ šÿ‹ÿ�ÿŒÿòÿ�ÿõÿ–ÿžÿoÿ›ÿ‘ÿ×ÿÄÿ Öÿ"!#†ÿ$ùÿ%�ÿ&œÿØÿÓÿ'ˆÿÅÿ˜ÿ(“ÿŠÿ)�ÿ*‡ÿ+—ÿ,™ÿ-ÊÿÕÿ/.‰ÿ0”ÿ’ÿ2Îÿ31¯ÿûÿ ÿÌÿ45ËÿÈÿ6ÍÿÑÿ­ÿÉÿ½ÿ«ÿúÿ98´ÿ7¬ÿ©ÿÿþÏÿ¾ÿáÿÇÿåÿ6+úÊæá]áøw £|…ÁwéØôãF'ÿš½©y;ôáÑplïr`¤2òk:]-éòUn ÷°^�OÇ·äƒcÓ�õz»1Àrè×l­ä­×;wlþ¼Ï‡±vM§«±y«~Z²ÞÇ�>/•«T†/¿Þø¡>w•ÊX«jüqlÞªŸ–¬·k#ÖtºZÝÖ÷á~|^†¾üNxumM»H×\sM»…Q¾Âà­úiÉz7+ZõÓ’õvlÞç¥r•ÊðåwÂûD�?.Ò5×\Óiy±Ë5�vqÄ¸Ü �£)_ÓiסǓ’eW0@†·ê)+imø&úpú�ÎrNRhД¯é´‹#Æåf…\“ò5�vz<ËPïøã€*Oã^ Î(_ÓiGŒËÍ4´Ï5)_Óiסdz õŽ?Žá€*OãApFùšN»8b\nVÈ›)_Óiסdzl«–¸�c"/CÈ(_ÓiGŒËÍ y�ò5�vz<Ë®@ÿ#d”¯é´ýRñ5×´[üì¤ðJÎ6‡­qÏ£Ôh•ÌÝ–Î×À{Ÿœím&Rĵ4Û9âïtc.¼’³ÍÃakÜó(5Z%s·¥ó5ðÞ'g{›‰ôµ4[ u Ð<{Yê–¤µåÆ=�R£U2w[:_ï}r¶·™Ø�µ4{89öØ(Cæ�–¤µeܸçQj´JænKçkà½OÎö’S5Ÿ1ð[ŒabÿrãžG©Ñ*™»-�G©Ñ*™»-�¯�÷Šõlï3”:<ºÏãEv°î&ð?œ<Ógø» ]³eܸçQjôó�ãQj©/YM‹/ù,µÔäg§ì8ä ^#~`�޼äàµ@~im9ä³ÔR£Ÿ¿äø~tœŸ�²ã�7/rhÀl`+í4{€…ÆØcüJ; —M æc!æ£8†Øb�Í ÒÚ2(Šã±Ï‰¸,r§4?;<*ÄÛR£Iñþ”[Žui#w{âS$‰ÂW° t£8I‚9æÆËm°ËtVj4)i¨<";ö¹So3º¹q3Ý2�sQèÂL· ÿF©ÑÏÉg©¥F?G—­²•þ6Š7hú´ý,¥–ýÜÛOŸyÉÁkÄ RÈg©Ñ*ðø#j�¨ÁqþR£›»>o›;Þ ñöÓg©Ñߺ?/ð‘¯ÜDÜ3ŽóùÊuóž±ÇÎR£zûé³ÔhÒãzÃOЯ÷(5šô¸ÞðCHnÜ _¹nÞ£Ôè�;ÇR£¿-Å[jô@o?}–Mz\oø ú?P¼G©Ñ¤Çõ†BrãýÊu~ÿ=J�¸s×~"¹qÓq¦“sÛŒë ?„äÆ=�R£EÛ9¥F7w›¿m®ÿ�·Ÿ>K�þ¦ÞƒD Žó—=ð>sÛ\¸Aãït þ%�ÀA¿Xéý(5zàçms½4þN—0á_ ô+^ŸÀÂQjôÀ¥xK�&-s·¥ó½b™>¦“gü�nLø·qÏ£Ôèo;Ç#/9 à ù,5ú›ÌÝ–Î÷6ßéšðoðZÌ¡Émãït l<Èßé&üK �ŸG©Ñ¢í�R£›»ê·ÍýoÐxûé³Ôèo à ðGÔ Äà8©Ñï3·½pƒÆÛOŸ¥F7Qo€?ˆA¢ÇùK�~zEÜ6wÞ ù�» „ ÿHà _™Žø�» G©ÑO¯˜·Í•nÐüÀÝ„ $pЯHÀ>ˆ¸›p”ýô6»m.¾Aówþ%�ÀA¿‚P–ø�» G©ÑO¯ÈÛæî š¸›@˜ð/�ú•Eî$~ànÂQjôÓ;ÀmsÝ š¸›@˜ð/�ú7ŽÄÜM8J�~ºoå+ ÞªŸ–¬7p³¢U?-YoÇæ}^*W© _~'¼OÔøã"]sM§mäÅ.×tÚÅãr3tަ|M§]‡OJ–]ÁÞª§¬¤µ=à{˜èÃéC:ËMx8}H¡Y@S¾¦Ó.Ž—›rMÊ×tÚuèñ,C½ã�ª<�x%8£|M§]1.7+äÍ”¯é´ëÐãY¶UKÜÇñõ/¿^ åk:íâˆq¹Y!/P¾¦Ó®C�gÙõ脌ò5�¶_*¾æšv £|…ÁkU�gm-q§é¼Œ¼­%îã4!UYp—ñâåfEc­ªñŽÍ[õÓ’õv‘®¹¦Ó6òb—k:íâˆq¹±FÞLùšN»=žµµÄ}œ¦ó2Ê×tÚÅãr3b�¼@ùšN»=žµµÄ}œ&¤*…ò5�vqĸ܌X#פ|M§]‡Ï‚5Mûh4±T@¡|M§í—Šk™´ÖÏj5‡éË…‰®|>#”+‰/6ãÏ’ðÄÁB(­}V«vÿo¾TPHELP.PAS[ßÿ šÿ‹ÿ�ÿžÿØÿ‘ÿ–ÿòÿõÿ�ÿoÿ !“ÿ"Œÿ#�ÿ$×ÿÄÿÖÿ%›ÿ&Óÿ�ÿ'œÿ(’ÿˆÿ†ÿ) ÿ*+Åÿ˜ÿ,—ÿ-.ŠÿÑÿ/0™ÿùÿ1324ÕÿÍÿ‰ÿÂÿ57698;:=<Òÿ¯ÿ?>A@¼ÿBêÿCDûÿÊÿÚÿ¤ÿ¢ÿEèÿ¬ÿFÜÿ­ÿÏÿ«ÿ”ÿ»ÿHGJIÎÿK±ÿºÿøÿæÿLÞÿ¾ÿM°ÿN÷ÿ¹ÿOPTRQS…ÿ²ÿìÿ‡ÿÐÿUÁÿ´ÿWÃÿYVZXªÿÌÿ¶ÿàÿ¸ÿ·ÿ•ÿ½ÿ¡ÿÛÿ©ÿ£ÿåÿ®ÿóÿ³ÿŽÿÿþðÿ¿ÿÉÏNÙqÈüpò‘—üprì±Q†Ì;-?0HkË8ä³ÔR£Ÿ¿äø~tœŸ�²ã�7´cñÇF2ï´`Û8~`�Ö–qüŽóìe©[£ÔhR¾Ë›Ž¡ÝŒnº0‡Ìeté3öè8À m;i¼ñ;.5š”hCÞ¬è?LÜÝ Ì1ØI¹SoÓ¥Ÿ®´ÓvŒü؈O‘$j_Á&Ð-5š”â$ æ˜/§ãté§+í´¥F?'Ÿ¥–ýÜÛOŸyÉÁ'‡|–­’¹ÛÒù^’!óN 6°�óçimxÑ{¥F«dî¶t¥F«dî¶t¾Þ‹8ÛÜæ;]þÍÛ|©ÑOeî¶t¾W¸›þÍmüA´¹™Î”:yÇÆ=�R£›ì�¼ä(€7ä³Ôè&2w[:ß«ÜM^‹94·ÍÜM °ñ ¸›@˜ð/�|¥F¿sŸ>?é8Óɹm~îÓÉ�{¥F‹{çx”ýmçxä%G¼!Ÿ¥F‹¶s0üȽ$÷6îy”­’¹ÛÒùx/âlsÕAñ±ÜÅØ¼Íº{¢¹m~P|¬¸‹±ímÜó(5Z%s·¥ó5ð^ÄÙæŠJÞrœ??ŒQÀ Ø2Î+â‡ñDsÛÌÆö6îy”­’¹ÛÒùx/âlsÕaŒòÅ–c.xç˜WýŸ'åüÞö‡±½gãžG©Ñ*™»-�¯�÷"Î6—䱊�˜ðo^’Ç*>Lø÷Ds[åáƒ0áßö6îy”­’¹ÛÒùx/âls}®7üDrãæõ¹Þðs¢¹mÆõ†Brã¶¹�{¥F«dî¶t¾Þ‹8Û\CÉ[Žó‡×¸/FsÛH º±Ðæ6îy”­’¹ÛÒùx/âlsÕ¹O[ŽäÆÍ«Þ´O[>ÑÜ6?÷i„äÆms÷óï´ÇâÅ�<ãy¼ÈÖÝÄÞ(ðwÚÅØ±qÏ£Ôèç;Ç#/9øáä�ÏRK-5ùÙ);yóXú¥–ýü%Ç÷£ãü씇¼Ç[hdžc� h£8I‚9âØ, Ìxþãf|Ùs¥F“zö²Ô­QjôsòYj©ÑϽýôYj´J¡Œ>J�VÉÜmé|¯ïÇÆï(urŸŸo�@ûÅIÌ£÷9ÛÛ|Ÿ?¢–f�¡etò ¯älƒ—‘Ë�{¥F«dî¶t¾Þûäl¯ØÖ¢±­Åü¯Òý}Çø;ÝŸñ³“b�ÍÃakÜó(5Z%s·¥ó5ðÞ'g{žô�Z|vüSb�ŽóXúGZŒá³�{¥F«dî¶t¾ÞûälE-M׆Ñÿ?Ëÿ…ÿÊÿ@ŽÿABFDEGÐÿC÷ÿ¼ÿÛÿHIáÿLJNMKO«ÿ¡ÿ¯ÿ¬ÿèÿÒÿ¶ÿ²ÿ‡ÿÔÿÉÿìÿªÿ£ÿ­ÿåÿ±ÿ°ÿ¸ÿÿþºÿêÿ¾ÿ½ÿüÿðÿÚ´, Õ¦¿‚ä¸ÏƒÔVÉqŸ÷ùÌµé¯ 9îó2ÕVÉqŸ÷‘é3צ¿‚ä¸Ï;yZ[%Ç}ÞÇÉÓÏ\›þ ’ã>’ym•÷y�Ì?smú+HŽû<Èéim•÷y�ÌO?smú+H&^`§�µ—ûpßå¤r߯;,€—Ž�¤r߯;lR¹ï;ÇD›þP–ûàÇR6i¬Ûk_pß失n¯}¼tl$�u{í Æ;l¢M(Ë}ð…Mê-ƒñ‹åÚôW�L¼€´µ•"Hø�L¼ÀN!?;ÇJŽû¼�L§Ÿ¹6ýÆ;,@”ÖVœ¤»7©…€åÚôWï°€´µ•"Høï°QPúÙ9VrÜç}@N?smú+ ŠË@”ÖVüM€(. ISŠ,@—…¤‘[€(. I×¾ ŠËB¢MåžÇÅe˵鯀(. €´µ•"Hø@—€((ýì+9îó> §Ÿ¹6ýÐ ˆ‚ÒÚŠ»ùä6©›išôë X®M4ƒ hk+E�ð�f0@”~vŽ•÷yN?smú+ rÙe€((­­¸KY€Èe“ĹlÒ�˜¹lRxéØˆ\6Ѧ¿2e"—M*÷‘Ë&�•ö="—MJ. ¹l¢Meì;"—Mú}Ù7¡–kÓ_aéÉÚô·ìòÎW[!P!yqµî±�kß�w¾¾oêoTÅ´éoùßqÜ�7³­­� 'óâjQL/(í•}“+—ûEg”žÐÉðFåÍl׃¹oBWÅ´éo�wX 9*v¼ÃÐÖVü¬JV\ J8'=+ç}Â˵éo!ŠË�‹(. €´µ?+Ï|{NzV"Eöœô¬dDnÏIÏÊeßwNzVÞã8c¹6ý-4ƒ�ä¨X4ƒ hk+~V|>9‡='=gÔÒ±¡”’¾ÏÁç¤ç�U|>9‡=c¹6ý-ÉÄ $GÅJ&^ÀÚÚŠŸå¾£÷]>'=Ë}GÇ;lá¥cãœô,÷ï°çñ�mpÜ·St¸oÅJŽû¼“§X®�6ý-\ml:í+ËAw¸Ï«DäVvŒ™–*9îóʳˆBnÞº™¦ôŽ÷mULmú[þz÷W7­ŠiÓ_4|‡ípß~ û<†ñá¾Å>kë¹çS›þŠ;,/>ܷɰÏcî[,�`¹6ý­}G^\mpÜ´*¦MFÿÊŸ‘UL›þÖx‡õ¿ã¸Q±AÂ*Tÿ;Žòf¶Ÿ�cL‘W;Þaëf�¥£*¦Mk¼Ã‚X7ã�{¯·‘Wû¾©¿Ñ9’ád}�·±nÆ!{_�+³ï°U1mú[ãÍûx£bïãõ6òâj¡vÿÛÔTPKERM.DOC^ßÿ  šÿ  ‹ÿžÿ–ÿ�ÿ�ÿ‘ÿŒÿ“ÿ›ÿõÿœÿ—ÿòÿ’ÿŠÿ �ÿ!™ÿ"öÿ$#%˜ÿ&Ñÿ'�ÿoÿ†ÿ)(+*‰ÿ,.-«ÿˆÿ0/1¯ÿÓÿ2¬ÿ34¼ÿÒÿ56¶ÿ87”ÿ9¾ÿ´ÿüÿ:ºÿ;<ûÿ>=»ÿ²ÿ?ØÿÏÿ°ÿ@½ÿ±ÿ­ÿ¹ÿÐÿA ÿCBDÇÿE‡ÿF¦ÿÎÿ³ÿHGJIK×ÿÅÿÖÿŽÿLM¨ÿËÿ©ÿÉÿ·ÿOÌÿªÿNÆÿ¸ÿÍÿPQ¡ÿ•ÿúÿ…ÿÊÿTSRUµÿVùÿÈÿYX][\ZÕÿW¥ÿóÿåÿ§ÿçÿ®ÿÿþéÿøÿëÿÁÿÀÿ£ÿÃÿôÿÞÿ¿“4Ôå]ÚV& ê5·ÊK¯Õƒnö»ßÉ4ù1Ýn„0\µæ {¿ëÔÞ½±;n7IC]Þ¥aåwåw»uríäwÕ,q» @«�¾ Z'ºù¿û�¤¡.OÔk®ÒjëjÑTœYÎàbOàw¿ë”…•¯A–ÊÏoÝêçwÞÑsbÁk�¥òó}oü; Ù;!èL‚ s^´àø~ç8¿“�½‚Îê3jÏ‹ßïçw7Õ…Q\^ô[·¼ñä­‹½‡¸– áö¿“g…îUž�/ð%ˆš:•Ÿï{ãßyÑ‚g=VÉ¥èQ~“ñ°F{~ç8¿«´7‰öXð&ýÖ-oü»›ó[@Í]B½PßÝ÷;Çù�wÔ°\%7/wIõB}wß÷Æ¿“) z–XÀÂBn•„Üñ}oü; ¨×ge7ú¦X*?ß÷Æ¿«ä¾ož KåwV…L}÷ãû�ãLÞÚH³}ûßIÈÞé5�`r~ë–7þ]`Àê«ä¾ožD›þ'<Ë}GwŽç¤g¹ï¨KÙsÒs¬ÛkßÞwùœhÓÿ„çX·×¾…—Ž�sÒs¬ÛkߎwØsÒ³ÜwÔöœhÓÿ„go¹ãöŒåÚô·V:B LQ[¡€¸¼ÅÕ*ý[7Ç”é“ËÊ�$\Ó¦¿åï0ÔV¥gD®Më¾Ë‘Ë.y3ÛÚzâi^\íWn©2¥a("—]î8£¼’ïóªbÚhÓÚ)´Ñ¦¿5ßù’ú2©‹¤ÃX±¦Èµéo¹ù}\±÷ñzyqµÞ¾ о�¦Üºù}\;Å%ت˜6ý­á¾n¦)½#)…IJáeHJáeªXÉqŸ÷‘!óϼ¸ÚtÆV"rÛqFÇ;ì£t«bÚô·†ûøßqܨXÉqŸ÷qòô3צ¿…fpÅÞÇëmäÅÕ¢\; ß-ÏÒ;”šQèËpïôÞŽ3Šfpå2ßçUÅ´éoómÅúsK//®öø¦©P;Å%ØŽ3šÒ}E1]‡9QUL›þÖx‡, vŠŠï°QPškÓßB—ÀZ`§¨XDqYˆ‚Ò\›þšÁ€´ÀNQ±hDAi®M ‘Ë.ÐV,"—]ˆ‚Ò\›þ–dâ­XÉÄ ì2/®V2ñÖNqɶãŒJ&ÞJèËÞ�U1mú[ˆ\vÈ›Ù&å›îürÒ‡èHºïsÃ}[±÷ñz¹6ý-DGÒŒ¿“8˜"iÆßÉ N&up°€6i,Zbà`ŠŠu0E®M ‘Ë.ÿ;ŽI¹ì2ð¿ã¸bJë"—]®XÉqŸ÷Éüô3צ¿…Èe—ÁÌ&%—3›t¢}`f“ŽwXpÌ·IÉŸÁëÏ9,½\›þ"—]ï›&�u‘Ë.ƒ÷M“"rÙe ä>NŠÈe—%ð鍨ûx½�\›þÖüòx‡­Øñ›Wû}, =:Þa;Îh,�Q踼U1mú[ãL´¯bý9‡¥—kÓßï° �ÇVìÒy¬Ìµéoź½ö=ÀAL+9îó> §§Ÿ¹6ý­Œ¿“ïó*ÖŸsXz¹6ý­X´Ä÷yëÏ9,½\›þŠûø>¯bý9‡¥—kÓßBqƒt[±’ã>ï#Óg®M+¢8˜")|%p<€Œ¿“7)|%Èø;y�ƒ)*ÖÁ¹6ý­Tˆð¾iR¹ï;‡Š½�×Ûȵéo뽊õç–^®MëXÿë�t[±’ã>ï#Óg®MëN_à­X_à-ùr_ÞBqú+_¦¼¸ZÅ•¤”+™ÞAqôN_àí0ñ�¯*¦MË'¹àN_à­X_àÍ‹«•LÁ÷y½Óx«bÚô·Ð wúoÅúo^\í�¾ÀÛqF³é庙¦ KåçûÞøw²wL¤ò[§|¿ë»û¾7þ]ÎQ~ë”ïw}w¿uËÿλIW�º°E¿uËÿNFäì¬ äù­[Þøw+rK^Èò[·:Çù�Lô؈«ä¾·ÏB¦U�< ßÿ®SVæE VÝžÝÑã¥ïwŽ3y£ÒíWÉ}o/z |šó¢Ç÷½ñï.I_‚VÉ/‰‹ßºÕ9Îï~·I>=›žÍ¶ü”âF(°ƒ�ÃMÒP—wiGX™,¨×\È´ÊK¯Õws°ë˜Ó³Çù;Á}]�Ó¦”ö"ºÍýŽxÝ*¹ïñòt,Ô q:Ömî#ÔLy:†×Í›Ep�ëïgýÌcZ¬[0ËÉÛ™Näñö»¹Â ºÉÎÈc…ž¾ûéÓ,÷»µx…'ó"èð[§ö𻵸7¾.ÀdaòëXu».X'7YáÎüîw[õF|[~öäÎvç%/ è)vC»x ™ö¡Ô³‡'¸!»£ÇËŽÙ‹K^%—¦ïªý®O= £Ù^È4A°ÔwßdA½æu­[’ÏžÜÙ¬Þ’·üø`“~¼}æÁÆaBü�à¾ÇËÓ±P/Ä阽8¼Ïž@�—çú»ßU稡 Kå·ÎêI¦öí~÷»(¨Ú�Ê ›/°B®Zó„½íÆ…‰wԃҡ爂8IC]ž,¨×¼nÕí¶˜f;¿[«BŸ½;⤠ÜîwìäÚÉï~×ÉuõµjÁ™TKÙcéºX’½Ók&âìÅÔƒ8ÁDYÚ×ßý.×ÉĈ¸ž Ã…‰wÔƒ î{¼^⤾û>;ëo‘¦oùa!—ÂR}÷ÁÎí~÷»N®»¹b~ëjî6 §¾ûõw¿ ÀuÆY껯6Òl_÷» _wIú´Â÷»¾ûõw¿»`'×`¿û]°›ƒªÝ¨ ºù“)öÖÙ¦”­’‰ qÕ” ’©½°y"•ß’'e’¿Y)‹¤œëï.:ÊoÁ&µ³Ï( ŽˆK^$õ`•ãWÚ×íÆûì Äå‡E%ˆdjïwQO]¬½äÝä—¦§c]d‚jÁ³‹zêbíëï~'#âªôþ‚ø­ð�2­Ú�Êy箾ëvÃŽ–öÄg�iœh¿;í“èϺíG}÷Ù{Ü<�Õı!\÷;™jÁ" ã:•ßäµ×^$õàö×E3¸*¦M+–C¨XÎaéåÅÕÞ±Âüš—gÇnK�å:_å¾£3ëöÚ·ˆ\v¹*¦M+%eq{¯·‘kÓß�_±AÂ*ÔLPúìë ¼yqµ£ó;Îèq£n¦)½£*¦MëH©b)‚„T¨� '?;Çúo^\í‘Rýï8ntœÑãFÝLSzGUL›þÖx‡õ¿ã¸Q±AÂ*Tÿ;Žòf¶Ÿ�cL‘W;Þaëf�¥£*¦Mk¼Ã‚X7ã�{¯·‘Wû¾©¿Ñ9’ád}�·±nÆ!{_�+³ï°U1mú[ãÍûx£bïãõ6òâj¡á�-ô–b{_ÞÆºGUL›þ–ÿÇ ð¾iÅÞÇëmäÅÕº)=¡� 'ë ¼�u3Y˜ì[èm,�Qè¸ÌûªbÚô·bÝ^û‚c¾­XÎaéåÅÕÊë=dÞî;:ÇÆº½ö­›iJ見i£M;~Ÿã;_™|\"r++ö>^o«XÉqŸwò4×F›þ®Við•¿Ïñ�¯Þ¾ â•¥JŽû¼Î±‘[ÙqFÇ)1ßçÅ}|ŸWÓF›þ–�¢n~Wì}¼ÞF®MÅxST±’ã>ïãäég®�6ý-½ûŠ«eò«bÚôWÄ›¢Š¶žÏ¹6ý�3êæ÷qE[!åY‰È­ì1µé¯oŠ*ÚÊ›¢*»çžsmú+bò+ÚÊ›¢\›þÖ¾#/®–ɯŠi£M;~Ÿã;_¸ƒ)ÈñFÅ:˜«XSäÚhÓßÂÕ* ¾²ã÷9¾ó•ƒžg¤²TS�ã�òTjŒ™–êæã˜CLAŽ7ªbÚhÓßò×»O›þŠmupà3ÜÁäx«²fŠO±\›þÖ¾#×F›vü>Çw¾:˜âÄSü}S£bïãõ6°Šu0E®M WKÇÑO;ÓPž¥¾oêotœQ7Ÿ}CÞùʳ(îcò‡­ƒ)ÈñFULmú[þz÷iÓ_‘ƒ)N<­h«ƒßÔߨ²›)–kÓßÚwäÚhÓŽßçøÎ×ïs0î` r¼Q±¦À*ö>^o#צ¿…«•_Ÿƒ÷ÄÓNÇ4tŒ™ÖÁäx£ãŒºùìòÎWŸ\¶mú+ú>ST´uÆ�;˜‚o`Uf3eȵéoí;rm´iQL·Ç7¶ÇMq;E‡û¶b%Ç}ÞÉS,×F›þ®66�ö•–Žû¼JDneǘi©Ã}ÛqF…¼Ï+Ã[7Ó”ÞÑá¾­Ši£MË_ï¾âjŽ›VŴ鯾Ãv¸o? ŸµõÜs�©MÅŽ–îÛ’@°\›þÖ¾#/®và¸iULmZÓíßý®u´D\gQêŽ î{{q5q_gÇìÅY)#nRÎ, !qÝöòÃï¬Ë ï³'Ðãå¹þîw v ö»ß»É j7*ƒn¾Àa¸jÍö´À§©VF(°ƒq8IC]Þ¥ae² ^s!Ó*/½Vº9Øõw¿û�ï¯UAIêò.í+“õš«†#HëT~¿ûÝ&ù°õœê±T~[Ÿ¾¸IISß}6YP¯9íë‚/-•ßôMÒP—wiGX™ÔÎïjÒ'´¶RÚKÞgÌvÇ©˜,¨×\~–“rSâ¨yã7Ûœëï~·I>=«‰ïdýô줖2}Ó<‹ð pÝ㥕�´;®›äaFØI-e‡{¬ÛÜÏïò³Üg,y]LÊ$‡8n²cöâòaFXˆp–ŸåÎÇM‰ëb#bǺM.ðw×X~z¦g¶;sÜI£Ôw_Íú²‚ýÝï6ɇ1é]Ÿ•ÝÙÊ8\~zVßDNjgÉ«‰c#0›,¨×\~–Ü”8Á}�ÄïN Ä ©LªùÍÞìôÝÒ^±woìŽy@Gùu¬Û亘”4oúfûôþ�VàAù]±woìŽ-?ËMÊM‰[ƒ-y½éKÓ7{q‚›×Åšƒ8}³yŒÙ‡¿;í“èÏu ÌI¹)qV¯‹ÁŽ–ö,Z�Ö-Xò8?ÐÆ5ÈRß};í“xgËÏòwÂÞFÍÛ$ uy—v„•�F|³³êUAÕ‚WÍ^\å¥×êA7wæºIx¶btÇpaâeÇòÓ3=¿KjpÝ$Ó³õLظYê»o§}ýQãE¼ÜGlùÙÛ7&½ë³RÚ¿Ó—x±cë6¹õ|rNsz¦o¶Ò7©gùYNpSâºAJš‰7ØÑÒþ]È4{œh\ƒ,õÝwÚ'Ñ_7ɇՠ�©·'0=»3Ç ~G#Hß}ùYNsÓó;)i&ÞôíÒŽ°rÝ*ù=ˆ\ϳº†ÑYòºØ½hŠ/($`– Pg‚[ךØ1{q�¿ûÌƒí³¸=ÞjânA6©æ·…Z°${!h±Á’wj ÎrêL°`ëZggR”Òñ»æè»/¥¼j7*wAIP'7«x:FÍ{úîër~{L½•U^z­>{q `•—Þp]ë–äÃq'`ãðwÝ& Aúîã7õú¬Lð{©üƯ´¯¿û�¿]Êx”t¾ õFr;µ t ¼ŽqŒcÚã‡ë–ŸžIµ” ~P.?ìæü~·–ëjnÎjÁ’ì�´äå‡Y]פ–Xm¤Ù^È´P –dï„ ëïÖr—FšíéÙIÒºF¿Ôƒë&óÚ«�4ÛÃ…uîñäZÊf™èëüÝZîæüÖÕÜmN}÷i¸®>£öB-83 D"^÷;óØé�- >£ö˜&s„êu 'SU8=;(‰Ø1+e¡œ%Ù;½f"þn-'ÕR¶.– ^Ÿ%âø-?,T:9y°E$D"NßòÃB-¸nÞ! }÷ß­å¤ZÊ¿Ô×`ÍK-³7¼8jÁjrÈéA@=ˆ×í¦ÞÖÕgÔþÝZNÏvP ±cË[¨g“j)[;x¹æ¥–U^z­¾£÷gå,?¬ØÉß­åD2]7™³/•â¬Ët¬«Ï¨½P –dï„ Iµ”u±Y&ú:·–k޾ûnÎo]ÍݦáÔwŸ†«�4Ûãü@ËÏÞ?LÏ D"^÷;» î]²­²!ÂËÒ¿ÒÁ"ÈkÝ<ñÍ^\*;¹ÝŒ°ÓÔ5S"®9úîË¿[ËU^z­¾“ö¢Q\`ð€�Kn\÷;¿uq»$¾“õ Nw{z–Êïw¿ÛBXs°å‡ÕÄw²~zö86¥´Y4=^"v,?,äRXªï>=³EAZ§òû‡ËcºÛÓ›°T~ãpùa5ñ�¬_ò>”z¡¾8égYñLú�p]ëV@k6IC]þ�TKÙø•ööÙ‹›mE{MĽ ,Ô‚ŽåÂŒ0Ûkú.hNŸ(MÄB-8×ßI>=“Ú™•Ëü°ÃËÏrùa5ñ�¬ŸTK™à¾Ö‚MßÖ£gjoÉÛ©�¸5õï"ºÍýú»ßm’ µàŒp›F qF¸Ýï~·Ö-Ùë¥L•´šøNÖïƒEPÇô‰ÒDT<³×›¾Õı!ün­[²�Þ%×K™*?hÙ®Ñ1ÁïdÇìÅyŒ!Š‘¥ò;³wÇYY“Z4çwkÝ’­èýz)Så-*A$S{EO껯&ˆ áün­[²Á/ox»^ÊTùAão¶P Æoùa½ âß­uK¶Z`Õe§2�_/eªü E=u±öjb�ØÎB¦¼8{qõàwkÝ’íì�N/¯—2U~Ð>”zQO]¬}f/î WY�­&ˆ áün­[²ÞoT^/eªü Ýñ@VFPV Ćp~·Ö-YÉ ïÕ¯—2U~д7#lR”ò»È¢éñqÓ·å‡MÔkn8 ³U·×X™½¸ü°KâdÁe½½ÆÊjb�FÄuÛ¿«äÒô]µë¸�klùYnùa ¹–ê»oR-eûPêí|,ݤŸå²!œÍ¿3�i±nÁf/nöÚ[·¹Ÿ�ikápñ nzNƒ³ü@˜¦oùaÚ×=^"þNpßÛ‹çú»ßm2{œ˜u¹Éå‡ î{{qµÑÝn’OÏj£šTKÙ㜕ÂÒUð›½8a5fçwú¶j7*ƒl³7Ît®kÝê,Káulùaëõißô[óô6 fÝ.Á£–ÊoR-e]üŽ øþô&gg6��Ü÷öâu“Ù�9®fJå7—VÐ’·È[~z¶ÏÎïºÀÛ¤¤™x›½¸õÖ^³—¹3r«MÈ!2M0D>œó;߯‹ò/MÈYŒËOÏBX6„ëï~çêÁ‚æêÁj�¼çö ‰ûå‡zNLÔk^7/Zp&ÕRÖÅêAœ½ø»µÜI&Äé[~ر{Öã,?Ëå‡zNl² ^s;5„†Š³éÛ4ÏïÖr¡l,‚¶Ú„RÞsûëZ·ª7%µ.ØB-8[oí­‹�  Äë&ùôün-'¸ïíÅEÆÙãá6 N.Ô‚³�¸_~Ø='6YP¯y]ëV`nRÓ<¿[Ë5/µlùa#ôœØdA½æ¦OS-·ü°…Z°%Ù;!èºÖ­Àpùáwk¹P žõXúî;x9+‹íáB=y:&i¨Ë›,¨×ܤZÊf™èëÜ’·–Kl¶5OoÓ` µàY�-dZ~X¨×-0\~z¦g§ç„Mé˜ýn-×ã»cÉËOφ9©–².V“¾D¿å‡AÀ»þîwF®‚ µàÔÜ‚~çoÞq›'·�¸ßl#ôœØÈÚò³œ¥é[¨òžÛ¯‹¼¼n’¿[Ë…ZpjˆÙY¶kÄéÙÁËáBYÚK^~¡çÄdA½æuó¢g“j)¿[Ëu1‚€zg/î$âìLßêÁzޏþîwÛX�¿ÝôÃÛ^nÉ›�Ðsbäu¬ð}ÜäòÃÈ꘽¸Â÷q“Ë¿[Ë}|òº†Ë+|ç&ÇáòÃÈšž�Fœ6¥c¸PsÉ«¼ôZýºÖ­Àðwk9ÍMÏšgÝ‚%¯ð�›\~¡çÄ>>Ù1IC]ž,¨×!zgÉË¿[ËÕÄ}�+ð \7ɧgz–<+…¥#~"•ß’·ü°zNl§}ýïÖr!Ó†òÍD*¿I5?nrŸyôÝ—=ß‚¶Nù¾q“[~Ø='v@Ðu —ŸžéYóN#Î ›Ò1[�sìŽéùÝZ.ê©‹µg¹ü°õú¬\÷»NùÎM.hë”ïÜäòÃ='v@ÐìÅå‡zNì´O¢Ÿ½8Boú¦o² ^óú»ßUSZ�¿]’¾Ül‹JÉÔ^Ñ“úî ™f¯½HêÁu»©–(Œâ™f¥°qú~·–Ë µàÔ ¹–ê»/?¬šÒ÷½½xýÝïn�-Èßn�löÚ µ@Þsû�BCE¿Ùk/’zpÝnª% £xf„Y),Eœ¾ß­åòÃB-85ÄB.…¥úîË»A6Á}o/^÷»*ä‚ü­ ¹Ù&i¨ËÛ¥ae“õš[md=t]ë–äÃr),ÕwŸæ±¢ñwk¹ÚÈz$èÜîw¿ó·Kï�Þ$7¼/hüÆá8 ¯ÛMKY6ô–V“¾�ßB¦¾ßõÝgó(ecåwk¹!ýƒg«MÈ!—!zK^å¥×êkžà5•Ÿ•Òþ�ï{ѧçóýÏ^,X·�Ž…úô|³WøÎMNpßÛ‹çw¾_…}ÿàÅÙB-Xò='öñÉßù~€‘ò½h�üj–æw-q¶hi«MÈ!çûUú4}ÿàÅéÓÜIKì³ èw¾_õÁ"È÷^\¨û`´Ï^, ßù~U¨¾ðâB-X´´}öbýÎ÷«À¡ï¼8¼8jÁ>{±€~çûU]‚ÉùþÁ‹ëLnŸ½X@¿óý*¼(_FÈù/ÎÞLÈ­6!‡ü�ïWáEùÞLÎ?xq¶gr«MÈ!÷;/Z° _Öû�ÊN®—2U¿û�ï{ÿ`äûõ`¡ìƒEÐjrÈßù~€‘¾ðâÈÚ9Á}o/þÎ÷½ëÓô}‚€z°ƒ§Osµ 9äï|ÿÆ…µ½(ÿÒ„Ò�z rõ .ZÚjrÈßù¾÷P |Ÿ  ,Ô‚EKûÝï¼hÁ‚|ÙÊêÕ®—2U¿û�ï_ø~mt°ü0Á}o/®èÃï|ÿ’¸¯Ó÷£žºX{¶š¸¯ów¾`¤üJî{{Q~§ú°¨§¶ß÷½½¸´l׈Ü÷öâŠ>üîw¿ó[·ÖºXÕ>‰~ÕPãE¼\%Güîw›äÃÆ¤w}V6}‰—‡›¤¡.o—v„•MÔkNjgÉ«‰c#0›t”ß8ü�,¨×\~–“rS⺘”4oRÍo¶^ŸöVö€¸�i;í“è·ˆ/âå&8âú;IC]Þ.í+«‰=qvÇYYM,ÂYÈ´#xûìÅ¢ï¾ü,Ç]�Zbùáwˆ ™Ö7âÛiŸD?y™– ^Ÿ•EÔx/o?Áë6¹ü@ØŒ°î±ÁÎïò³\ßœ\“’fâMªù-?,�îÈ�öIôÓ·^_¼nUÜ#?}÷³ÛjNNØ«˜ëâw‘&Õü¸É凃7©§cöâN ÄéÞgO ®Û^sôÝ—úëï~·u–¥ð€:6IC]Þ¥aezv›F íäu |ËOÏ´¯ z¼´T~ Üg쳸ǿ{@\ò,ÆÙ9軥½bïÞØ#nRÎ’§}]ÐãåòÃÖóÉM�¦ +Û©�ø;B±Dq“úp:– ^Ÿ•õ1{q/z%¨«MÈ!Ïu Ügt,?nî_Ç>‹¿KÞ,Æí´O¢ß"j¼ˆ—qÝ$Ÿžy@Gù�ÃÉ‚zÍéYÄÑûC\ò¨yã÷»ÊK¯Õƒn6~¥}Ý߬”å‡%¨×geöâ÷}óTX*¿³ÕL¹7©g Ü>óàwÍ)q],jªhJ.y&÷uÑóÍ^ÜI-e½éKÓ7{íìð³nÁN Äëï~·uæºà5ž¾ûB-8¿ûÝZ·íE 6®ñôÝ7{q…�¾û¦g³R¶È›T󛤡.ïÒŽ°²šX 6„sýÝZ;ËRx@Ë;z‡ËË µàY�3=ûŒâðGÄéKÞòÃFܤ>œß­uñðv¸Çzœ£ï>#n^œTKY#ܦQB\È´Ó>‰þ,?Ë}öbÁ¢†!/·ÖÅ‚wÏo¡<ëq®¿ûÝZ·í�³rxùY.?¬&ˆ a-ÞVsR~ø*®°°Dœ¾U”‹J×ÚNÅéYs—ü»µ.†úâV8[ò¦ï€rŸ‘‰�MßòÃB-xÖcÎö¬×wŸàù»µ.² �I?¼q�§ï>[¨ ™6)iê»_׺nmn6ñÙ»cË[T‚H¦öïÖºXô¤¾ûFܤ>œŽ­À<Øò³ÜøaÓ·åBǘ¦}]ÐãåòÃB-xÖãwk]ü¢"Gܤ>,j‚ð²´¯¿ûÝ&�×UCAê»/Ô‚ó»ß­uÛÕP�úî[¨gӳȓj~«¼ôZ}ƒW�¸I}8×Mòé™TK™•Ãû̃%ÿn­‹]Œ %ÍÄ[È4{œh§}ýµBkÝV…lùa;ÖcÙ®1W3åŽvÿTPKERM.HLPCßÿ šÿ¯ÿ‹ÿÑÿ–ÿžÿ �ÿ¬ÿ�ÿ!‘ÿ"¾ÿ#oÿ«ÿŒÿ$%òÿõÿ'&—ÿ(*)ºÿŠÿ+´ÿ»ÿ’ÿ,“ÿ›ÿ-.�ÿ­ÿ™ÿöÿüÿ0ûÿ¶ÿ/±ÿ¼ÿ21²ÿ3˜ÿ�ÿ64œÿ57ÎÿÒÿ‰ÿ³ÿ°ÿ9ˆÿ:8†ÿ;Óÿ<ÇÿÖÿ×ÿÉÿ=Ìÿ?>BA·ÿ@ÈÿÏÿÐÿµÿ½ÿåÿúÿ¿ÿ¦ÿÅÿ©ÿÆÿÊÿªÿ‡ÿÿþäš4“¦ç(=yÖJ§·ñhÈZYŸß©¨›iµ–óEäí©“]� a·b\Q4ÅjEÝÉ5ižµÒém ˜ƒ)žºZoÍ­x›siŠåþ´aŠmÏj­¹c›'±í#yœLšË7Uð\ýä\šfõ�ÚËìOÓ «éBor|êjãmü¹´†nÑ£%͹úÉÕŸ5d­¬ðw*êæHŒ+Цì[a5U»èR!�æÅmF±÷í.o»Ëýi#‘¯Èk ö¨Õ#_Ó€†ÌmObŒ;?íeȸ-ú¬vÚH. Y+ëóA\ÀÀàUVʹn’û̃Y),Eœ-A½>+ë9bùYNª¥Œk�%f¹u&X°ßu­‰×-``ðª +åì3fåðºÀ[s—¼ƒg/Ž  ,ZÚjrÈsÝ$~g„íqn·i41; ídǺMÎêFK^Ñ^qÉ;Eï_–ö ÎY~öv�›ƒ[ךø;©æ·Çë6aÒw‡‹–6}ËëÚQ1®A–úî;í“诛äÃÆù�6#ØÆáïòÓ³ÕÄw²~ËÏrkÎVyéµzÐÍÁ¶Ó>‰~VÊÙôlùa‹JÉÔ^MúRßýwÄMêùþîw[à&µ³ÕÅÞÓwß’wPYbVÊòÃNû$úEÔx/'8bú’Çë96¿ë6¹¡qv7}'—ŸåºÖ,?¦gɼ¾ß8œæìÅå‡7©g§¶÷»Èʺ……ÜY~–‹¼Ç¹ÂwVJ{¡æ’ïÈtÝßIXìX~z¶‘Êoãðwùa½½ÆÊB¦IêòdA½æôL_âEÄ%/"MËòãƒÁÎò³Ügì´O¢ÿ]D�ñr±…LË�&ýx½µ×Åô%'§o=G ÛúîËOÏ< £ü2ýŽó�k�¥¾ûNû$úsýÝïÖºÕÉuÕ” ’©½Nõ¤¾ûùÝïÖ’ɇ-*A$S{+zRß}1'i¨Ë“õš3¬ô|rx©„ÒÞiŸDÿ»µ.FÔx/¯›äâD2µ§/dê-•ßô &™HÄyÔ00xÕ„•r:f/.?ün­‹Q "™ÚëíÈMÏ?(—¼¦®Av0{q¸°¶—¼.6‚EëlÝöïÖºXyéµzÐÍÁ®kÝ’|z6©–²ÕÄ]ë–öÖÅ5 Ax¹…L[Ï'7Î4®A–úî¿[ëâiŸD®¿ûÝZ·p]`ð€�KnüîwkɃL)›à¾ož Kåw6yÔë³²õ±Ù‹;xÑ+A@=XmByn?#,òÃïÖº(ÕüVyéµú*Ÿ +å\·À7¦Zòô%ˆøn‰å‡yŒ”›³š)OÇòÃ*/½VÿÝZƒì\rcz&>{wÄ%�ˆÜòÃq”7Á}ß<–Êïl5SnG ñú»µ.J>=›t”ßVNÓãlùYnùa °sÉ�MÏ KÄé›w™ê³\°Ö­ ïÃ…×ß­uQò°yŒÔºg3ÂÖÄ-y;È-?l�Áv.¹q]ë–äC{3ÂZ·**wÛ‰Š¿[ëbÅ®ÈWî¶;6{q«X3¥|ån;QñºÖ­Š];�¯Üm'*nzf\·Çá**wÛ‰Š¿[ë¢ôÃ[~XM|'ë§gx B¼nk¦”¯Üm'*;u3­Örž ÓTš«?kXU›ª¶—*õ5¤§Nv=ÓÛ4×ÚôT©€Ç§›¦ßϹ´Ìña5�êצ 9¾¡çÒšýy.¿ž°:m#åÜC…¬ÍìÏseµUÍ~T�¦R£t+äø ódžkÚœKc8ƒNSm/5¨¯e?#!—¦ªíå´ š^uW|­³1m7s륆ïÖj-çI1é©“]Ïô6·^*€áx;¾tXø›üvA6ãK`8Þ>n2¾tXø›üÇíAÆ—Àp¼-ÈøÒaáoò‹2¾t†ãíë_nãK‡…¿ÉýËm|é ÇÛâáþ‹Üe|é°ð7ùÅÃýñ¥0ow,/|é°ð7ù;–—?¾t†ã-²ÜÇ— “�,÷ñ¥0oÉ‚lÆ— “Od3¾t†ã­[nÅøÒaáoòÝr+Æ—Àp¼E–;s|é°ð7ùÈrgŽ/€áx{ßãK‡…¿É¿oŠñ¥�!_÷‡ËË µàY�3=vÿ±OTPKERM.PAS<ßÿ  šÿ‹ÿ�ÿ–ÿ‘ÿ�ÿžÿÕÿ�ÿ›ÿõÿŒÿ òÿ"!#“ÿŠÿ’ÿ%$™ÿoÿÖÿ×ÿœÿÄÿÂÿ&Åÿ ÿ†ÿ'Øÿ()˜ÿ—ÿûÿ”ÿ¶ÿ*�ÿùÿ+,ˆÿ-Ûÿ‚ÿ„ÿ/‰ÿŽÿ.10Îÿ‡ÿ4253…ÿÓÿ8Ïÿ97:6Çÿ;ÌÿÊÿ�ÿÿþ»ÿ«ÿ•ÿåÿÙÿÍÿÑÿÐÿüÿÜÿ\Üt {Ú?«¾/�¹à‚HŸ¶ÚRDúü3»:� "}þ˜j.ˆôùgvIƒCà‚HŸ†6.ˆôùg½"Dúü3­¾¸ ÒçŸÉj–À‘>ÿ¬WDCà‚HŸí–Àÿ´ÈÕž‡ïiµ‡Œ‹�(öä²1Ñaár•1åN¦~Ç{’ÑZ1Q“úRÆUÆ”;™úï \“úR&æâ#j ««Œ)w2õ;Þ#Ø÷øÏÃm iÃúö}k+Jº Éèú¼W²Õ'j¶!ÙCÆÅGT×^°éïÆÏÃ'ÞêôëÚ 6eýúµ\{5-û�qñ��™«Œ©;Þ)*~ήG©fnáʘ:Í#¤¢™|ȸøˆö2•Ô��Ôïx§&FÅÏÃè7Yö}‘ˆ¾û!ãâ#j¡ÕïC²â?·Û¾3ŸL}¥)®п§ÕÞËTRÖ— æK~r¥ûmKo:DÑi’å.˜2Zw¼/˜2Zñóp²ôŠÔW[ºNÏôiª•ÒÞA.y«Y_n–¿[ëb~ØA^ëæ‰o5S^7ɧg#µnÁ„½u1ñÙ»#®9úîË«XuC²ËàÞ%·ÖEÁ}o/NÞšX 6„–ˆÓ·P VQîC©¯µ�Š×M&FMåge5SžMØÛºøÝZ-FÄé[~zFܤ>\÷»­Â×UáE}÷‰ÏÈD‚Î’'¸ï›§ÂRù�ÕLù»ß­%’Ó'J±P VQ.Aýµ¶SqúDi"ÎòãŠ×MòéùÝZkb�ØF8ȳü°Àà;—ÜXòjÖ—³\~˜Õ5qMj‰ÕL9{q/žå‡ß­uQ|F&´æè»Ï00xÕ„•rÝ$Ÿž7©Ü”¸u±ÁŽ–öF¨‹ Ä-ùwk]Qšˆ…Z°Šrq­íTœž5ñºÖ-ɧg«‰bCèØ„•‚ø»µ.V¼#å‹Ï¨âVƒB¦þlùa;ÖcÙ®1W3åŽTS|úî#ܦQB\·½ÊK¯Õ—ü»µ.ŠBn'-›3;ó(ece êõYYÏ×Mòéq“ú0aoëb#ÔÅâÖmÿn­‹‡{ä§ï>[Ô0áå¸Yê»ï´O¢Ÿ°·æEÐI{ñú»ßm7yÝ•²±²õú¬¬çˆßýn­Û¾ R6V– ^Ÿ•õ1=#�± Nªù­òÒkõ ^5a¥œëšƒU^z­¾È8¿[ëâãܬ–n5Sn'-›³%o]l‹Ã…uNúá-?¬fÊéY~Xá» +¿[ë¢àw¸ c êÕ^YÏÓ3[a®—ŸåÄgü°š)Ï’×Åòÿÿ[뢽8ñAÈ�å‡�´lÎu»é‡·ü°“–Í™¾¨Âg6ñ™HÐôÌ<¦Åº¿[ë¢åòÃ÷}óTX*¿³š);¦9= ‘âCœ½¸ƒ—K^~ؼëvÓo³ß­uQ|F&´éY¶kÄY.?Lí.ÅŽiNÏ^.yùa‚û¾y*,•ßYÍ”¿[ë¢Gmùa^”/>£Š«‰bC˜uÙƒëZ·$ ^Ÿ•­çˆMÊM‰ÛglÉ[¿[ë"AJš‰·�iöÚãü@Ëv�q¸Ó>‰þú»ß­uÛ’„MÏöx êõYú¦X*¿Õ&äìŽé[~zæå7' ê5¯›äÓó»µ.J¹þ‚)£õ�qñ5ÐõŽwÿÆÏà tý’�`ß2.>¢ºº ¦ŒÖïù4ÉrL­§fO¢ìÐo kü<\–Þ@×/˜2ZQ[Ó�¼ã}HXVü<ÜÖt#¿ƒ­/y†‡Œ‹�¨é«éjäïC²âç᦯¦Ç@’«‘_ò0 ÑaárÁT»ã}HXVü<¼Á‡…KLµ‡Œ‹�¨é«©»ƒ­;Þ)*~nújúl]j_�üýöCÆÅGÔÖt#ÝlÝñNÁ0Pñóp[Ó�ü¶.µ¯F~€~‰û!ãâ#º'ZíÌïÆÏÃm iÃú=Ñ®}ÛßKû*ù�qÁÅG´—©¤\|ôåáþGê` ìÕÈ›ÔÓ^Z]>õz/Yzh¯!�`ßS³}&E³RW.VuÇûjK]“¢Y©+«ŠŸ‡ÃÖokHÖ›ÍJ/«zȸøèëe*éjäïC²âçá{šÕåÖë캅Féµ3ïe*éM¯aÑ®F>d\|ô5“ìï,ã�þÊÃç·Ð(}«²7ÉÚÕȇŒ‹�>“ìïÒs–Yü<|ºé×ðùí²ŸSöìÔômÃø!ãâ£og\“¬Û¶ýŽw–ñóðùÙÐ(½¬fo’µ«‘ß.)ßËo+©e2.>úªY¯Vw¼ÓL?/ZS‘–}5{ŽW«GHê)Òê}²šu ðï4ÄÏÃçÆ—ÕìÓ£~…KM]Ï^Š.vÿ2xTPREC.PASRßÿ  šÿ‹ÿœÿ�ÿžÿõÿ—ÿòÿ‘ÿ�ÿoÿ�ÿ–ÿ”ÿ! ×ÿÕÿ"Öÿ# ÿÄÿŒÿ$›ÿ˜ÿ%ŠÿÅÿ’ÿ&�ÿ'“ÿ™ÿ)(*Âÿ+Øÿ,†ÿˆÿ-/.0ïÿñÿÓÿùÿ1324Îÿ65‰ÿ÷ÿóÿ789;:íÿÏÿ=ûÿ><@?ÁÿÍÿA‡ÿBC¡ÿD¢ÿÃÿÔÿ¤ÿGFHEÑÿI¾ÿëÿÉÿÛÿËÿJÒÿÌÿôÿ»ÿÈÿÇÿNLOMQK«ÿPéÿ¬ÿáÿ½ÿ¥ÿåÿÐÿ¦ÿ­ÿæÿ±ÿ°ÿºÿ¹ÿÿþ¼ÿÊÿÆÿÇ9z}pïGÁø|œŒ~.Ð×CúÁç1à Ô»‚Ëïì]qeãdôs�~ÒG« 鸇4MH¨ñ4qÀÇKO}åÊlÆãœô1ô^ ¼4MH¨ñ´+f8Ž ?vö®¸2›ñ’+³ ñ ï½¶9vŽ^Û:0&øxé©rŕٌ·—€we¶!žá›Ë\¹2Û  5ž&6—¹re¶o†bbsW¼Ô_¹2Û@$ŸØÜ/õW®¸2Û@ÏÕÙûÀÜäñ›ã†¢æ&�¯vœ ’/̤�iBÚ• 3øÄ€˜&ôþ/;{WfïÓk[ÆÄænÀÔ‡l_¹2{\G¯mkœÍ2/Òûç"=ý@=œ&$ÔxŸ/íì]™-à:n(Ú�óoï!­95 ³HïwœKèóËO ÃŒ"�ó§Ýu—3TÆS¼\vö®ÌÞÑ„„O›»Sìô®Ì–¿ÔïÊìMH¨ñ4±¹0õÁ¶¯vœêŸ_›Ëd˜ÙÕÐL¤§zgïÊì}`nòø‰Íݰþ˜›<¾ÚqNÓ+ÜÕÐpš�PãiW2ÌàËo)ßÙ»2Õÿ%&ŠÿÓÿ'˜ÿ(Øÿ’ÿ*)+œÿ—ÿÅÿ-,ˆÿ.†ÿ/10�ÿ243657Âÿâÿ”ÿ:8åÿ9ùÿ;=<Ïÿ‰ÿÎÿ‡ÿ?>B@ACÑÿ÷ÿD¶ÿEF¹ÿÔÿûÿéÿóÿäÿÞÿÁÿàÿÃÿHIKGJLçÿ«ÿ‚ÿÛÿ…ÿ„ÿÒÿM¤ÿ¢ÿÍÿÊÿPNQROSèÿæÿøÿÙÿöÿÇÿ¯ÿÉÿ»ÿ°ÿÿþÚÿÆÿÜÿÈÿêÿÌÿŽÿ•ÿëÿƒ³‚}6gL9åVŸ»ædöjâ¼%rØ9¿ïÄ.»ç÷�èƒn‰<Ü]Öÿ#Á…>)§\bpúèB|õ¹kNæaÁÿ|ëïûo¯&tKd÷=uù‚Pïé!˜¡”kŸazA¨þœÀ™ú¨y`·+~ bõ¹kNæ¡ЮÜý vKdÅ÷j"§”kŸáÍõšÞo3FƒÒ«‰ó ¯ø~ó '¥§n‰œ¯&V|¿y�Sÿ1™rmgL9åÚªà¤\k´¾&~¥^ƒ5g}}—ü„x‚”k�¦#ªì²þA.H¹Öèó­ç�]Öÿ#…šJ¨AʵF["¼Ùeý?‚P(p¡‡¤\k´%ò4»¬ÿG å¹B RN¹6„>wÍÉ<ìÕÄyß3»Ž|["w—õÿBp¡U§WçÞea÷Fƒ”S®5œ>;`¯&vßSבO¥²{èù+¾Þ\¯éý6£Ò¿`·DÄC0R®}áÅÿ ]‰ý ñUåñrQ©‹EªòÔð÷ßNôÿ\C–ðâ¿ ”ríÓ¶D*õ·Án‰¬ø"Uyzè:ò?1åZ#gL9åZ#!Á”kïÂášK¤Ò-‘‡{ :8Þ „ÝUÁ©3¦\ûðñ'W®ðD§ß<Ø»wåv½à:\ª3¦\ûðÐó×ü["Ç ƒÓ ý·W+¿Î˜ríÃÇŸ\éþ‰NAŒ×UžsO× ®Ã¡ÖS®}(»r½Õª¯Jÿ‚ØÁ©J÷=½š¨ï¯J÷=Åû»¯‰S�1åÚ #$ØN·D"x³â‹tuK¤Ò«‰•_gL¹ÖØ¡ëÈçpÍ¿%r R®5¶%r>\ß3ù.W»%ÒËc®ù·DŽA§ÿ‚õò{wÿ‚ÝYgL¹ÖØÕÄù†w¹ÚLœî ß}O× FA¨úÜ5'ó°Î˜r­±-‘óÕÄ.Wû�É åZc0sožÍw—«U :8u±à°à÷/Ø-ÇÿÂ̽yzw'ðA�1åÚLœR®}Èè™rm¾š8ßð.W»Aô :8}tÁn‰,ˆ‡`2”ðâ?§:cʵF{?žá›»å¦>Øéd÷zí+Wfïƒëâ¾ÆÙ,ó"½we¶Ü^Þ•Ù;Šõ/žá3WWf;î2qx3› ¾Úq®«.o†¢ÞÕмaíì]™í`7s>qôAò‰Í _í8§´«!ýzïó™ë8*üØÙ»2{ç}^í8§XÿÎÞ•Ùò>¯\™m|€ËŽƒ^Û:0Ö8›eîghx334ú y_í8§Æç €ñ»Úß bgïÊl¸Ž#��·!çßÞCZãlæMË‘@È·Hï]™½¯ 5ž&6§ 5ž†>»]»V;ÎÕA€/Ò�#��ïbgïÊlÆ÷yåŠ+'£Ÿ ô£×÷¾å¨ð£re6ãqNúN Ã/?Ž ?dØÎÞWf3ÞCre¶�^[MH�‹gøÄ/=U®Ì6hz…­&¤ÎÅ3¼Õ„4qš�*Wf4½ÂÖÀ‰»syô•+³ š^a-0�S#øèðùß=qÀÇKO•+®¸2ÛÀÉèçý¤�–·—÷R¤ÊWfïçØ»ÆÓ¤�^®+ö:WRÌ\ÇQáGç"ýüßÓ„„O«“.ùnïÊl—"ý.ï¥H3×EúqTø!Ö�êq2ú¹@?ÖãÂåòùŒ3×EzWf»Ä ð£×÷~œŒ~.Ð/Ì„?{¬ÁÓÂ,¡Ï/?œÖ8*üpe¶KjॿÛ_ ý"ýÌ%Ÿñ¿+ð NŸïЄ„Oõ.¦ŽÎ}¨ ½+³÷ÏÞWfïß^Þ•Ù®ó&vàÍPÌÐèƒäý"½ßq®†€\w5¤Ÿï&ŸáO†vö®ÌÞ¹½¼+³ÒG« é ×VR_í8ÇúIÃiBB�§�½+³š^a-0›£×VRµãÜPÓ„´0Óô k�ÙÙ»2Û¡Fð1±9zm5!­ ë"ÛjÇ9V¨gG…»¼—"íì]™½ó>¯\™½ÿ>¯\qe6ãí%àwœ£×–£Â��½+³ š^a-0›Ë\í8WRŒ"Í›iz…µÀìì]™m ×–£Â�‰Íe³ÕŽsÞ,ÇÀ?Ž ?vö®Ì6hz…­�›»â¥þjÇ9pë—ðÞûlL21G…�1EŸ�Ý~è哌Éwö®Ì6pTøÑ8±¹+^ê¯vœ«‘ù¥§ßÙ»2Û@Ïc;ÎI늽�½+³÷¥�VÒA¯­&¤¾re¶Að.;zm5!­9Ù~††7C1C£’÷•+³ ÒGËÛË{)Rµãë'™®+öV›±~þ?_¤ßå½iæºH?Ž ?vö®Ì6€ë¼‰x334ú y¿Hï]™½{ xWf = WfïH­&¤ƒ^[MH}µã\�ŒpÉwûqTø±�óÄ)H9åÚ0B‚œ^Mœ·DÖS®5ZÏn‰œßwbïN¹öá!˜æ«‰]FH0åÚ�À{�p¸æß©tKäáƒNÿ1ôß^Mì–È:cʵ!rå O¤\òÐó×ü["Ç åÚ��?¹Òý)׆”]¹‡ÞŒ¿«Ué_;85Ð+•_‹ÿ¾Î˜rí#0B‚)׺]Mœox—«ýÇd�r­Û–Èùjb—«ýÇd�r­Û–Èùp}Ïä»\í–H/�q¸æß9)׺A÷_xðâДçƒN'ñ:C·DzyŒÝ÷TŸ zßC}ϯ3¦\ëæ:ò9 ["çÃõ=“¯S¸Ðž>.W<)׺Á̽yf4ß]®V%H¹öâ”rmHFÏvpº¾fœðõ{5±["ëŒ)×>#$˜r­ÛÕÄù†w¹Ú ¢g�r­tÿ…7 pÊÓÇ åZ7בÏáåN"ûRº%òp+}uºôÅûKxñÿÁk R®}„8)×>?q R®}è:ò9_Mì²0B‚)×>åjâ¼ï™]G>‡-‘‡[éÕÄù†�A§ÿz±Ä uÆ”kŸ"»x¯&Î7¼AL¹ÖmpêN" â!˜ %¼øÏI©¿uñcÿ1ôßÂL‰SAʵa&Ês›ì–HovßÓ¿`·DàÔ«‰ý ðÔÝ=)׆Ñwe§‹¯ßÃ7ß0¥òë’{1ú�¡ÿ¦\&èy~_Ï|Õ „¾&~‰1ö/X·ÄÈ)åÚ°õ°þ<Õ×Ë—‹¾‚ý vK$‚7 kzN5õƒ”kÃ]°÷$b·D"x³.‰± º€ÁÆêCOüR®usÆ”S®}*Œ�`ʵÆ?ßzÞØåj·Dî åZ㇚à§\¦ç3ýŸ7Ÿo=oT:Q¥Ò-‘ÞTº%ò4Ç åÚ°Ï·ž7v¹Ú-‘Þ¬û¾¼ê¾["¿A3H¹6Lv§#ª¬Zõ}©{õ/ˆ)תù|ëyc—«�ލ²îûZ¾ê¾Ÿo=o R® ó¬9ëë»\­¾~xõ¥|¾õ¼q R® “]¯Áš³¾¾jÕW¥AL¹V Œ�`ʵê&F~Ÿo=oT¼kÎúzn R®U'èyþðzæKù|ëy£â5XsÖ×�Aʵê\ ‰¬¾~xõ¥|¾õ¼q¬ZõUétS®}Ö‰‘ŸÃç[Ï}ýðêKù|ëyã¨À�Aʵê®&ÎûžÙuäsø|ëy£Ò«‰ó ƒ”kÕ§ åZã&~‰®&Î7|ì=¼kÎúú®Ve R®5Ýá œò,c�r­qÙ½š8ßðþ±ƒS}ÿ‚Eºº%Á›uÆ”kÃdwø|ëycÕªï–ÈÃ=ö/ˆ)תqù^î$ú|9îì]™½®£×VÒš“]¤÷;ÎI&柵:�bæ:Ž ?vö®ÌvÜ^~¶ã8§—Gš¨þ˽¯g„JüÎÞ•Ùnzm9*ü˜Ø\6[¹2Û-}´¼½¼—"U;ÎIóÏÚå½igïÊlÇûÜ•Ù;©;Î1B»ýpš�PãigïÊlÇí%à]™í¦×–£Â�‰ÍÑkËQáÇ™&:èµÕ„ÔW;Îaž/Ì8*üØÙ»2Û­éÖ3±9M¯°˜52zm5!U;ÎažøEúiz…µÀìì]™íV#ø˜ØœÁǺ0Ùjǹü•žy‹ôÓ„„OS#øxÚÙ»2Ûñ>¯\™-‚pÙ�7CÑÏÐèƒä3´C�àcÍeî+Wf G…u[¿�‰ÍqTøQ·õûX#“­vœ«ßÇ@=jo˜§¥§ßÙ»2[Àuùßi‘Þï8W'Ã+aŒõ“Lìì]™½s{ xWf;$ænù!Û)˶¯\™í`ˆ?²ÄQ¡¸l_¹2Ûq545‚�‰ÍÉ.Ì.ï¥H½¶~ôËÍŽsœ€�EúqTø±³we¶ûöð®ÌfŠgx« ibsôÚrTøÑ¨ÁGcÕŽs¹À0ò] �ð¼´³we6¸îˆgx« il¦‰Y¶]ëûEz¿ã\×#íbõÇÎÞ•Yöo/ïʬŒXâ�¬ÍØW;Îq>–]˜ÕɰÖõH»�Xý±³weVFñ o5!MlN†ò#žá­&¤~èó±Ûµk_í8W¾RŠ´ˆ�½+³ì¿Ï«Ù»:ΡÏwÅËe‘ÈRÚÙ»2› \wÄ3¼Õ„´Æ—]¶_¤÷;Îq>¦q™&¤±@¤uµ³we–}�ø#ÛUv�LãrÄ3¼Õ„Ô÷®ÌfúKý®Ì²Ï"Ä3¼Õ„ÔW;Î1B»ý8x»üÎÞ•Ùî÷yåÊì�÷yåÊl×yÛ¡X¤÷;Î]>êiz…c%Œ±~Š~x3BŒ£Â��½+³wn/ïÊl‡¦WX ÌÄæ4½ÂZ`Ö…Ñk« ©Úq®nA¨1M°˜iBÚÙ»2Û¡é¶š�&6§ é.™�CÓ+¬f�ì84½ÂZ`†>Ÿ¬L²í—ƒ{cç.}ïÊl7ú|ìt±¯\™í×å¤Ez¿ã\� k‘~š^a-0û»ùk|>ôùèõÁ½Ïwö®Ìvß^Þ•ÙL’ s·ü�픕‰¾re6‹@ü‘•¹×÷>Ÿ¦WX Œ¸l'½¶~4zy/E:èµå¨ð£o¬Ó•Y™Ï.ƒñ¢Âãóiz…µÀˆËvNÓ+l5!õ•+³ÝïóÊ•Ùp�¦WØjBZsôÚrTøÑèå½é ×–£Â�¾±EzïÊl·¦WØ8±�Ây`�¾#víi1‡`Q¸?S¢î¾F�bמîÏ”‰j»ö4p¦Ä³7?ÈQvv'ÚÅp¦ÄîõŒå.çÓý2ª¢®¸?SâÙ›ä(k;é€û3O“¨Àý™Ÿ¨RNÝ�îÜŸy’ äý™_çùáý™%¶9bË‘Ò)÷g–ˆ]{õ­r‹Øµ§åÁ,V¾•vLf mcª¼ñLx¦Æbå+p”¹WQ"©ÍNa7OU>‹Øµ§¥nDoÑ™ÅÊW Ò¾?Scc¸–_»ö´<H´˜�ÉŒ7™+Îâ’>Ën�+&3P°¾öQÝŸ©�®TçŠo³hëÝŸ©9ܹÿþLÍÂ^÷gØr䘇Æ3¸?sàá³Ñ÷9F÷¾áFpÿý™š:ÏïϨ͂u�û3Ôƒ¢ÙŽîÏ»ö´]iއ8÷gˆ]{Ú¨»mË5ªm;ÇCºN£+¥³×¹ÜŸ9 »¯Q£Øµ§�û3l9r<Ä ¸?s`QpÛý™'!Q�bמîÏ<¹Xù Å®= ÜŸyòµ»ö´Ñ÷Ù¨R»ö´Ñ‚9Õ(ví;1™xæ×y~xf‰Øµ§�èJsÃ�û3KªÌÚ�Ÿ•>}ß÷g–¼6Ÿ�¾�ÉÄû3µê~eë~Y'&ïÏü:ÏïÏ,»ö48ê[åxˆØµ§ÁQß*¥S îÏ,±åÈñ¹ á«ç$còiz…µÀìì]™í ×–£Â�Ö ÌÄæ¯ é ×–£Â�Feë«çX cø|æ:Ž ?vö®Ìv(Ö?zm9*üh”mc3WWf»³w��8Ž ?Ú�óŸØÜ�aËQaåÊlw¶ËÙ‰ã¨ð£ 9ÿ‰ÍåØrTX¹2Û�•™ìÄqTøÑ†œÿÄæžÈPËQaåÊlwVf³ÇQáGrþ›K�ùSËQaåÊlw6C²ÇQáGrþ›ó[Ž +Wf»³2ÎNG…mÈùOl®~Ÿ·V®Ìvg3��8Ž ?Ú�óŸØ}ýtïó–£ÂÊ•Ùîl†g'Ž£Â�6äü'6‡ [Ž +Wf»³2•�8Ž ?Ú�óŸØÜû¼å¨°re¶û/õ�£Â�6äü'6'xè ËW®Ìv¼Ï«çëßÙ»2Û®»¼—"ôÚrTøÑ�ͺ¸HïwœÓË£Ÿ¹^éÇQáǼÀÜž:]™ÍÌQáÇBοsèóiz…µÀìì]™í¾½¼+³™ò¿|üA¯-G…�²�lûÊ•ÙLù_>þ ×–£Â�ÎË{)ÒA¯-G…}§l_¹2Ûý>¯\™íך^ak`?ôùŽ ?Ú�ó_ãl&xè Ë÷‹ôÞ•ÙnŽ ?Z'6$|åÊl¸.ÿ› -Ò{Wf»o/ïÊl&É„¹[~ÈvÊv½¯\™ÍÄ"d9*ü˜�â²�~´ö•+³ÝïóÊ•Ù;ïóÊ•ÙûïóʕٌïójÇ9zm9*üØÙ»"ÓV† +³ì¿Ï«Ù»:ΡÏwÅËe‘ÈRÚÙ»2› \wÄ3¼Õ„´Æ—]¶_¤÷;Îq>¦q™&¤±@¤uµ³wvÿøäTPREC1.PASbßÿ šÿ ‹ÿ‘ÿ–ÿõÿòÿ�ÿžÿoÿœÿ�ÿ›ÿ�ÿÄÿŒÿ ! ÿ"”ÿ“ÿ™ÿ$#%Šÿ&�ÿ'—ÿ(˜ÿÂÿÅÿ*)Öÿ+,×ÿ‰ÿ-†ÿ.0/1’ÿ324Õÿùÿ5Øÿˆÿóÿ6ÑÿÎÿ879Óÿøÿûÿ;:=<>÷ÿ?ïÿ‡ÿ@AÔÿCBÏÿDäÿñÿ¶ÿE¢ÿçÿF¤ÿHGÞÿI¼ÿJ«ÿâÿLŽÿMKPNæÿORQUSíÿTºÿÚÿëÿàÿÆÿÜÿWXYV\[´ÿZìÿêÿåÿáÿÛÿèÿ…ÿÃÿãÿîÿ¡ÿÍÿ­ÿéÿ_`a^¾ÿ]ÈÿÇÿËÿÉÿÒÿü[Ž”N1¸?³Õˆ»÷g~¢÷gž|mÊe[Ž"݃l9:‰_Ùº_Ö‰ÉÄû3¿ÎóÃû3K¶î—åxˆ-—àþ̱kOu·m¹FµmçxH×)†ØˆÞr¦U>‹Øµ§u�û3Kt÷5j»ö4pf $ªQìÚÓÀý™%go~�£\¬=¤¸?³¤{=cƒå®!6¢·œi�D5>|±kO+êê€û3?Q�û3\´×dë~YüJÚ6æ�ÅÊWà(s+®¸?S“¨Àý÷'bùJå.f=|î¿?S³<œÁä#–¯Tîbº÷3˜Ö¯ì@¢ÊÃg»ö´¢D’åÁ¸�*Ý21ûþL�ÅÊW`ª—J7ª<sªèŽ˜Ì¸�«(LæbëcòƒËW*wñþL�î×4‘7ž#s1.Úk²SØÍS�D•‡Ï"víiy0‹•¯@¥¿b2ïÏÔp!W¶î—Á˜Ìˆå+!L»¼4&3=ºßKÝŸ©9ܹÿþLÍÂ^÷gØr䘇Æ3¸?sàá³Ñ÷9F÷¾áFpÿý™š:ÏïϨ͂u�û3Ôƒ¢ÙŽîϰåÈñ'àþÌ�EÁm÷gž\¬|ŽbמîÏ<ùÚˆ]{ÚèûlT)‹]{ÚhÁ‰j»ö�˜L¼?óë}ß÷g–¼6Ÿ�¾�ÉÄû3µê&ïÏüuCFìÚÓFsÆ·÷g–ÈÜŠk»ö9Fçùáý™§åql_Ãr÷zÆÑ ¢vë(víipæi½6^GßÇdâý™ÎÔy~xfÚ×Pø‡Æ•ã!Å åáíy̶èõ¸?3ÝëË]§ÁÊWxx.šÎ�éÜ]pf Q�»öàþÌ@ÛÆY¬|ŽíkîÏt&QÝŸyZl ïÏt¦ÎóÃû3#víi£î¶-Wއt�bˆ�è-^Ó¾†]àþÌèîkÔ(víiàþÌ@¢Å®= ÜŸ™­ûe9bË%¸?3go~�£\¬=¤¸?3Ýë,w ±½Å bÚ×ð˜.íÅ:Š]{ZÜŸéL¢÷g:ƒ¨Àý™%�¨F±kŸctžÞŸé ±kOÑ•æxÈbÅ®=mDW îÏt$ªq×ÜŸ)‘¨Àý™%úâîG±kŸctžÞŸ©EìÚÓFt¥9²XG±kOÑ•‚û3µ@¢wíÁý™Z¶î—åxˆ-—àþL-go~�£ììN´‹;àþL-ÝëË]Cx©hhTE]p¦–³7?ÈQ.Ö.vÒ÷g:ETàþ̢Ů}ŽÑy~x¦Sbמ6¢+Íñ�Å:Š]{Úˆ®ÜŸé$ªq×ÜŸ)y¢÷g–¸Ø£ïÆ£óüðþL‰[÷Ër<Ä–Kp¦D±kOÑ•æxÈbÅ®=mDW îÏ”(víi£î¶-Wއtº?SÃùyã1ƒÉŒwM¸µmǹҵXù TQÛvW ¤Å|Ðmšl‹É¼?óê{ó0&3ÐÖÃsÑý÷gjHBáÚ1‹u»ö´”Ï�×wÓ¹?SÃù»&\;f±ò¨Fµm§|n¼¾›Îý™šÃ�ûïÏÔ,ìuæÀCáaŽyhæxÈCáaJ§ÜŸYBTàþÌ“DRN·üf¸s¦&Q�ûïOÄò•Ê]Ìj_Cpÿý™šåá &?±|¥r³Xù „i_èm;íòÒ˜Ì,J½1Îâ’>+J$Ùý™ݯiR=ÚC—qÑ^“}q÷»ö4íU|[¡ôAøt9u[΋ÓŸ¬}È™xLê¶úlóp�ö¯¦nÓ`¦Î•?uR‡0þÅt£üR¶ í_ó…�ö¯ŠùŽ2r<6׈;/¦c¶ýÂýaéhy÷¼˜n$ÐþUaî|è–޹ó¡ƒW¶ í_õÏ‹éFù…@ûW…¹ó¡C Ћ;/¦£µ9/¦SË/ïl¯lÚ¿Zo¬¶9S¯*­Q;:켘þœ@ûWÅ!ǹaé¼³ P¼²Mhÿj½±ÚþÅtê5�½˜þ¼ Û~áþ°t>0�=ã1!ÐþÕ#K�Àä1ƒÖÈþÍt9vÆ¿˜Ž;ùy1Ý(¿´aÛ/ÜvÆcb®V�|rò¸WS7€fØÔÁÔ#Œ1­}Èy1�Z~!ÐþUaî|ètÆvÆcrü’DåhÝ«¶¡: fUÃøÓŸ�ì‚ó…¥óÎ6@ñÊ6A ý«õÆQÛ?ã1™ïÈÚ÷…O aü‹éÔò �ö¯ sçC‡ S#:켘þ|d¸h”°tšš^Ù&´µ^�Úþy1�Z~!ÐþUaî|ètl<:켘þüØÉÅ:3,�w¶ŠW¶ í_­gãµýób:µüB ý«ÂÜùÐ!èØv^LníC΋éË/e› ÐþÕz6×�jªÑaçÅt òMMAù:ݰt(_§+ÚåbzÅk{1݃Çû3µèªacíCÎxLê¶jšy�Í �P¾N7m€Æ¿˜n”¯S9aéhy÷¼˜n”¯Óõ…¥S¶ í_­gXíóbzM;ùy1½â5�½˜nƒ6lû…ûÃÒùÀ<öŒÇdØpÉgUsìäm ÏÀ”0�=ã1¡º:Š»œ�¨ åët“gØÔ¹YÕ‹é5Aû§«3—?6RÃøÓq'?/¦?íäg<&mØö 9¥†ñ/^LHqmù[6mØö hÿ�I¶ý�öçPÐ=ò¹’‘;4Ú¿z„ñ/^L¯eíC΋éOÐ~áþ°t>0�=ã1©ÛªiŽãm ðhÿj`ò�âžmœ[êä±aü‹éOeÛÊg+´õ¼˜þ$¿hÿªp`òxÓiÀrEýè°óbºÑÚ‡œÓ±Á±!ÐþU¡v²qßÅtjh¿ Ðþ°‘_Ê6A ý«b¾£Ð!ÐþU1ßQFŽÇæÑaçÅtCBû…ûÃÒÑòî�IÝÆZÕ-±6[šÆÍè �¸¹aü‹éÔ~A ýacíC΋醔_Ê6A ý«b¾£Ð¡ˆ;/¦¤lÚ¿*æ; KÇæq\L7äšÇ¦lÚ¿*æ; K§lÚ¿*æ; U;/¦R~)Û�ö¯ŠùŽBÇ#ÐþU1ßQFŽÇæ~tØy1Ý Ð~áþ°t´¼{Æc2áÏçJæVÐÈ#Ðþ|®¤½¥ìÔ0þÅôñc'?/¦So)®íkrÆc2lF6/9VšÑ†ñ/¦äáÔU°{c¶õÏ‹é©+R×+Û�ö¯úçÅtƒ€åІ¥£åÝóbº!wòób:õšÇ^LíîKçóØ3ùEjõL§Ã–¨�l´Ø£.ÿ.ɱ“Ëù¸˜n#T‡»YÕüÓÕE~ÑA‘GŠ| jëÕH½˜n#‡{'?bº‡l`R ã_LÇ�üŒÇ¤Á±aü‹éÆ�übúÓšÇ^L7Bû…ûÃÒùÀ<ö¼˜þ$¿ðµÞGtØy1ÝhíC΋éøpê*ؽ1Û1›ýób:Ö©ëU¡ýÂýlª¶�ö ÷ÛVí_ó±©Úhÿª˜ïÈöb:u5)Û�ö¯ŠùŽØTmË6A ý«b¾#ÿ¼˜nÜÉÏ‹éOò ´_¸?t>0��;/¦ ´õð°t´õðTf켘^k'?/^LHqmù[6ÇN.´õ¼x1½–Çd\y¤NšfŽ�<í_� Hy8uCf¸s¦Ó‰ ÜŸyÚDîÏ|–cÖÃgàþÌ¿Xù enÅ•c–Ì­¸Àý™±ò8¶¯aŽYíkîÏÝ/£*Ê<ÙÕ÷gt¯g,ŸZ)í€û3ÎÞü G¹X»ØI¤<œ3-&3Õ]Яè»öÑÙøî˜Ì¨E³îÜŸ©IT åá,V¾3ܹß³¤”(vís¼?S‹ÎóÃû3mÚ×pô‚“‰)Uš -‹Õ/•áÎý™'Öy~xæ ¯MûŽæ {å� ë{1™xæ�_›ö5þ¡qE²‡ènÛrÁ'Ædâý™§l_CÝm[®ÓÛ×Pø‡Æ%!ÇCNÍ9Áý™'è�¯vÿuTPSEND.PASmßÿ šÿ‹ÿžÿõÿòÿ‘ÿœÿoÿ�ÿ�ÿ ÿ–ÿ ›ÿ�ÿ!™ÿ”ÿ"ŠÿŒÿÄÿ—ÿ#%$×ÿÖÿ�ÿ&'“ÿÕÿÅÿ(Âÿ˜ÿ)’ÿ*,+-Øÿ.†ÿ/÷ÿ10ùÿ2Îÿ3ˆÿ4657Ôÿ8Óÿ:9;óÿÏÿŽÿ‰ÿñÿ=<¤ÿ>ûÿ¢ÿËÿ?‡ÿ@BAECÁÿDÑÿFHGJIÇÿÍÿÛÿKðÿïÿMÉÿOLÈÿNRQSPÒÿ¶ÿUTVWYXÌÿ…ÿôÿZ[\^]áÿàÿíÿãÿöÿîÿÃÿ¿ÿäÿÆÿ¡ÿæÿa`b_ec¹ÿd¦ÿ¾ÿìÿ«ÿ¼ÿüÿÝÿ½àˆµ;CÊ(ËcÙc½Òä!ÐþUÛÔ ² ÓÇ;w{dä�û¢Ã¦Î•ŸÊÅôZŒñbz­gP.¦?鎈h”°i”óâÅôZÖ>äŒÇäØÉ�ö¯†ñ/¦?IgÙuÃÒñ¤³ìº�ÉSÓ×ü¸⊞ñ˜«!®hÿbúSÝ Í�%Ýá�ù1˜�P„»‹éFKºÃ«ß?ã1iæB‰œäÕXï÷m ©9g¾#KBÊ67íäGÿbú“t–]7,O:Ë®˜<5}Í�+;ã19VC\ѨKs“ ã_Lz ]�@ûWqìTÛhÿê!,àþ�ÉK8èF‡ —1Áž:©CæÖEÎÏ…ñ/¦?É/|­÷v^L7Zû�ób:>œº voÌvÌ0ÿ¼˜ŽuEêzÕñí_�¹ó¡›ªmÌ�<í_Öû}[|ÿ¼˜Ž§®‚ݳ‡^LǺ"u½êA ýlªþy1?WÒÜ;5,�±¨‹¹ó¡ƒG ý«Âz¿o‹î.¦S[û�óbúsÝm€–�ö¯ ëý¾-õš{§Ö>ã1Á¿áïhdÏ3(aü‹éÏåW¸§;"¢ PüÈXý†E‡�éãÝcRŸ±¤æX ã_L¯ØÚ‡œÓm ;"¢ PÂÒiCñ\ážîˆˆ6@ñ“§&Ã>ÿŒÇäÐ"IêÓ!–Ô0þÅtÔ©ëU{-ÿL<&ÇàêRÍçJêÓ!–ÔÀäùÀ4£Cqïcã_L¯x'?/¦?—_tGD´J –jªÑaçÅôŠëŠÔõª†¨¦2MMOwDD øþÅôçk›º"u=Ým€âŸÓ©wòóbºq'?/¦?}®¤¹wjX:cQsçC�@ûW…õ~ß?Ü]L7;¹hÏîhÿª°ÞïÛR¯¹wjmß?/¦×ÚÉÏxLŽ�\hÿjÿâE�¡ªœñ/^LHqmù[6Ö+M.´õ¼x1ýÉc2®ƒä¼˜N݆mÿñŽÂÒiöŠhî�šÊŒ�Ó+Ò‘°tÚP†0þÅôšÉ/ž+ÜÓ?0yj2ìóc°¸Â½jª~tØy1ýZû�óbzEÚ¿*¬÷û¶ aé‹é†&ÐþUa½ß·EpPHe(_§+Ú%•ijzº#âŸÓ+jÑÜ;5,�6@ͽSS™úÏ‹éw'¿˜^³5�½˜~­}Èy1½"ùÅs…{º#â&OM†}~è¸Â=Ê×éŠ6@ñ£Ã΋醶ö!çÅôq!ÐþUa½ß·EpPK‡@ûW…õ~ßÁA!•¡|�®h”óbú¸´Šhî�–N ˆæÞ©©ÌØy1ÝÐ;ùy1½"í_Öû}[…°t´UXï÷mRÝ9/¦WÔ(¢¹wjX:m€"š{§¦2cçÅô»“ŸÓk&¿xŸ4W¨�¬x%tàhRúÑaçÅô+¿èŽH覣Ã΋éYû�óbº¡wrá>ñIsÃÒÑòîy1ÝÐ|ÍÕõ´UXï÷mlÍ�<í_Öû}[?TeÌ6õûçÅtxLøš«CØt@³“Ç}!ÐþÕ0þÅôŠvòóbºq'?ã1©¤¹aü‹éFùÅÛÉ…ûÄ'Í�+ñ¼OšKœœº%b½ß·å�ã\?0yÖ}ž{õ“æú½æ£Ã΋éhíC΋éÔŸ4Wp77,-ïžÓ©›éŽõÜ«Ÿ4×?/¦ãN~1ݸæ±Óñ“æ îæ†¥ó�yìy1ýi'?/^L¯EŠkËß²9ä”zÆcÂ]Ž�¢Ã΋éX–,¨h”°tªã£z1ݸæ±Ó±,YPÑ(aéTS=/¦ ´UXï÷mÂÒIÕ¦ª©L Ô ð´Urœë§2m€RƒÂS9Z÷ª1Ýð•i”Þ$ÀýT¦©éà~*Ó(5(¼�\¸O˜r®1Ýð•¡|�®h”T†òuº¢¾T¦ ¿P;ً醯LY² ¢ P΋éFë•&Ú¿z^L7–% z1¡ýÂýaé|`{ÆÿxG©Œ+Ü#ÐþUa½ß·¥^sïÔÚþy1wòóbº± Ûþã…¥ãymØöï(•ñ¼6lû�w˜9å1œñ˜|rÊcH�Ô!Ç–g[BU,ûÚæ“SƒmL÷p¯Ú¦¹Ñ&?Âø/¦×zåbú“{ØÈ©ûØr^¼˜^ËcÇñŽ6R�XÀóN•fHqÏ–Çé°¥NÆ¿˜ŽÚ¿zˆc§†¥C ý«‡8vj*3v^LÇc'Ú¿z^LDzmå³Ú¿z^LGù…¯õ>¢Ã΋éÔÖ>优þüáÔU°{c¶õ×ïŸÓŸ×©ëUN#gs#9!ÐþÕª^L§ÞÉÏ‹é(¿xÚ¿*ܘ<�ö¯ µ“ h¿ Ð~?0y¼é4`¹¢¾v^L§nö_È)Õƒö ÷ûçÅtÔbKG‹=•;/¦ß©Ò ´_¸?®,W4®ÄÓb�TÐb÷Ï‹éFùÚ/Üv^LÇCA7,�c'Ÿ4W |ËÅtãšÇ,W4,-ïžÓŸvò3“CN©aü‹Ók‘âÚò·lŽa�o9ã19vò|ÒÜ |KÿâÅô'kr^L7hÿª˜ï(,í_ó¥2cg<&s+h´5Œ1ÝH ý«Âz¿o‹à –Nu¼ª© ”ÇØy1Ýh½Òä‚@ûWÏ‹éF-ö°t(Î‹éÆ²dA/¦ã±“ í_=/¦c¶ýÚ^LG-ö°t´ØS™±óbºñ�*Í@û…ûãJÀrEãJ<-öÐA-vÿ¼˜n”_ ýÂýÑaçÅt<tÃÒ9vrñIs/¦×<öb:‚劆¥£åÝóbúÓN~ÆcrÈ)5ŒñâÅôZ¤¸¶ü-›ã“æžñ˜;ytØ|ÒÜpPã_¼˜þdíCÎ‹éÆ‡SWÁîÕ °­ß?/¦ëŠÔõª6µ“Ëù Òk¾êŸÓ�eÉ‚^LGí_ó…¥C ý«b¾£Tf켘Ž�UñIs…ób:Ê/æÎ‡�ö¯ ëý¾-‚ƒ‚‹;ã1!ÐþÕ p„ƒBäŒÔ0þÅtjkr^Ln½Òä‚@ûWÏ‹éϵØÃÒ¡8/¦?/KôbzÅÇN.´õ¼˜^q¶ýÚ^L¯X‹=,-öTf켘þü�*Í@û…ûãJÀrEãJ<-öÐA-vÿ¼˜N½“ŸÓ�ïTiæ“æ îæÆ•€åŠÆ•xZì¡3‚ Zìþy1Ý(¿|Ò\ÁÝÜè°ób: ºaé;¹X÷]L7®yìÅtË KGË»çÅô§�ü¼x1½)®-ËæX÷�ñ˜;yÆçñw¼B ý«aü‹ÓŸ¬}Èy1ÝH ý«b¾£°t<í_ó¥2c~FŽÇæçÅt#�ö¯ ëý¾-‚ƒBX:ë>A ý«çÅt£õJ“ í_=/¦µØÃÒ¡8/¦Ë’½˜ŽÇN.´õ¼˜ŽmØö hÿy1µØÃÒÑbOeÆÎ‹éÆwª4íî�+Ë�+ñ´ØCg´ØýóbºQÚ‡œñ˜|rÊcã_LjplL9W47ÁäõÆjÇ}Ó�ÕñªÚV¿jØhÿª°ÞïÛ"8(„¥SãU=/¦«6Zµ­ZUÛêx¬ÚVÍjØhÿª°ÞïÛ"8(„¥Sã±z^LÚÉÏxLÆ¿˜þD ý«b¾£°t(΋éOZìaéPœÓŸ¬Wš\hÿêy1ý©,YЋéF-ö°t´ØS™±óbºñØÉ�ö¯žÓ�mØö hÿy1ýé�*Íx`¹¢~\‰íî÷ãJ<-öÈ*h±ûçÅô'ùÅÓb��Œ ‚»W–+v^L7Zû�ób:>œº voÌÖ þy1ëŠÔ5§Wÿ&XæF]L÷p¯æØòl •ª^L7îäÓ�k{1SÎÍ�F0y½±Úq_zÍ{Lê6nšö `jä—ªeßj`òÔmL÷x,�{5Œ1�ºj£UÛªU ›L=/¦ãN~ÆcÒàØ0þÅô§‡SWÁî�ÙÖ?ÿŒÇ䱚ö–ÕXÐþXkººpyìaü‹éµvò3“ONy aü‹=†ªnpÆ¿x1!ŵåoÙ;ù�ɱ“òIs£.eGN7ƒ;4Œñbz­ææ¡ÓŸÖ}‚@ûWC§jÓÕóbú“U~A ý«¡SµÑêyñbz­gP.¦?i±‡�œº�-çÅô§c'ÜÍ Ë9saž/¦×"ŵåoÙi®î.¦£µ9/¦×L~ñ>i.qrê–ˆõ~ß–CŽsýè°óbúµö!çÅôŠ,Óµ¿,pϽúIsmóIs­÷û¶ØfÌ?/¦WôIs‰“S·„¥3v^L¯Èz¿o‹˜ï(,ëý¾-b¾£Tf켘~wòóbzÍtG$,�Ošk½ß·¥Þ'Í%NNÝRû¼˜^³OšKœœº%,�OšKœœº%•;/¦×L~ñ\ážîˆø1�š ûüÀä¡|�Êùˆ;/¦_kr^L¯ˆ@ûW…õ~ßÁA!,í_Öû}[…T†òuº¢¾3ñ˜ç©/–ÔP¾N7m€Æ¿˜^Q ˆæÞ©aé´~�ö ÷G‡�ÓñPÐ KçØÉ…Uþ‹éÆ5�½˜Ž`¹¢aéhy÷¼˜þ´“Ÿ/¦×"ŵåoÙVYøÏ‹ÓŸ¬}Èy1Ýx(膥sìäÂ* ÿy1ÝH ý«b¾£°t<í_ó¥2c~FŽÇæçÅt#�ö¯ ëý¾-‚ƒBX:VYø�ö¯žÓ�Ö+M.´õ¼˜nÔbK‡â¼˜n,Kôb:;¹ ÐþÕób:¶aÛ/ ýçÅtÔbKG‹=•;/¦ß©Ò ´_¸?®,W4®Ä‹{茠‚»^L7Ê/Ð~áþè°ób:;¹ànnX:ZÞ½˜n\óØ‹é–+–Ž–wÏ‹éÆ�üŒÇä°ÊÂÆ¿x1½–µ9ã19vò0þÅô§f–£•óbú�ö¯âØ©aéPœÓŸ´õð°t(΋éOÇN.¸›–Îæ±çÅô'.b‚]Ï‹éOŽìŸ4×+ \8²Ó6Pcþy1ýI~qd§ptØy1ÝhíC΋éøIs‰“S·„¥c½ß·å�ãÜTfìŒÇ„¸C¥›!NNÝkínòìäqßÅt[ëý¾-9\ê6�Õ@Ê6WxÜÌN-ö‹é>ã_LÇCA7,�c'rJ=/¦cY² Ó©›CA7þüØÉ…œRÃæ�Sêy1ýù±“‹Oš+†¾%lŽa�o9/¦??vrñIsÃæø¤¹çÅôçÇN.Ö}as¬û΋éÏ��\Xeá›Ã* ÿy1�z'?ã1iplÿb:¾S¥°\Ѹ’c'ÜÍ=/¦£ürìä‚»¹ÑaçÅtjkr^Lþpê*ؽ¶õûçÅôçuEêzÕšs#b®.§’>ž«¶±Ö4ýób:õN~1×<öb:µµ9/¦?8uì^ Ûúýóbúóº"u½ê¸[®èòtcÕ6Öš¦^L§ÞÉÏ‹é(¿€åŠ&_ë}D‡�Ó©­}Èy1ýùé«`÷ÆlÇêóÏ‹éÏëŠÔ5§WwËMs“K•n©Û²lÕ?/¦?¯+Rל^Õ¦tÃß"ç#`¹¢©ƒƒMÕ6‡‚®8´Ô;tkûçÅôçuEêšÓ«Ž_¯S9©ƒƒMÕ–òu*çÃ?/¦SïäçÅtãN~^L7>œº vo̶þqøçÅôZ;ù�ɱ“‡ñ/^ôªºÁÿâńז¿esìäÚ^¼˜^딋éO”â”°i”óâÅôZÖ>äŒÇäØÉ´?Œ1ýI~ñÝÐ)ÛV>[!§T?®Ä;tCç±*>i®v^L7Zû�ób:Ê/”¯S9ÑaçÅtjJñ JX:”¯Óõ]LÇ5�½˜NM)žA K§j“Õób:ÁjûT!8)LÓBnÎ^|ÀÆ^Ý5J¸'1·€}FýŸ¶¬û2›«ñO?T;`\Çkg~õ„I[Ö}™Í=p!ÁIÊÝð#sàB‚º/³¹â`½$´¡<㌟yylhs³ÿ…àλëØUçóükʾ̽$Ô,Y÷e6÷óf_f�¸�à$ånø‘9p!AÝ—Y£'¿ë@BÊ3Îø™_>_fËÅìy¾Ìš;ùÝð#ÈÍŒaÿSÎ�ª.Ÿ/³90#ø')wHhd_fÍ'ú2›3‚’r×�„š%ë¾Ìš;p!ÁIÊ]=1sàB‚º/³æ® mPs˜ü²îˬ¹“ßýÏ‹ó² ÁçËlŽë@B¨9Ì~Y÷e¶ðUº/³¹.$8I¹«'f\HPÚœÚq©þœµ?wu×h=æà%À\Söe6÷äwHhCyÆ?ó ÁçˬыÙó|™-˜ü“”»$Ô,Y÷eÖœë‰ÃŒàä‡6ç]£åá�Éõ›Kl‹šÏqMÙ—ÙL®ßÌ8Ñÿ¤]ÌžçËlëN~AõžrL®ßÌ8ÑÿBðù2»ÄWeœèerýfƉþe_f[GœèËì‚ê=I9&×ofœè_÷e¶]ù*Ý—Ù­o`ƒšk}œ´‹Ùó6´9Ñ_…¹ú¾ù×_5 üs=qÓ6Ð^SöeÖì“_P½§“ë73Nô¿|¾Ì¶ÑÁ{t‘aK'&)¿¦/³f'ú2ÛÆÄWeœèÅŒà—u_fͪ÷$åÌë¾Ì¶#_¥û2›ƒ8Ñ—ÙV/fÏóe¶5'¿ zO9&×ofœè!ø|™5æbö<_fÍL|UƉþQ&×ofœè_Ö}™5S㟠êàiî"Ʋîˬ1|•îËlk_•q¢3‚_Ö}™53¨Þ“”3¯û2k _¥û2kŽ¯Ò‡6çzâš²/³…¯Ò}™Í­_<ïÑE†-�Ð}™Í=p!ÁIÊ]=1sàB‚úÐæÔÞˆKõç4¨ý¹«»Fë1ƒ9¥5e_fÛóUúÐæ‚_]Sö¥]lÛ·q~��´X�ÎËî³W¨¼þªiüDå�´ WÕÿ¼ìnø±=êäˬw‚®ÑyYÍ%P¹ó¨çeçDÿÝšÚ‘]†¦5ÖV÷ –êO_f½†@vÕ±sýMô—õê{Ñ1FL¾ø2«hüî:¤=x4ù2«hååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååhÿª°ÞïÛ"8(„¥“ê¸US™6@©Aáhÿª8ä8×OeÚ¥…§r´îUÿbºá+Ó(5(¼I€û©LSÓ#ÀýT¦ PjPx;¹pŸ0å\ÿbºá+Cù:]Ñ(© ¥x%•iÃ/ÔNö¼x1ݸ“_LZóØ‹éFí_Öû}[…°tªãV=/¦?Y¯4¹ ÐþÕóbúÓ±“ í_=/¦×ÚÉÏxLŽ�\@ûÃø/z UÝàŒñbBŠkËß²9vr1á?/^L¯eíC΋éOÚ¿*¬÷û¶ aéTm²z^L²^irA ý«çÅô§c'Ú¿z^L¯µ“Ÿm¬�çñwÏ‹éÆ�üŒÇä°ÊÂÆ¿x1½–µ9ã19vò0þÅô§f–£•óbú�ö¯âØ©aéPœÓŸ´õð°t(΋éOÇN.¸›–Îæ±çÅô'.b‚]Ï‹éOŽìŸ4×+ \8²Ó6Pcþy1ýI~qd§ptØy1Ývÿë‹TPTERM.PASXßÿ  šÿ ‹ÿ�ÿ‘ÿ�ÿ–ÿžÿõÿŒÿœÿòÿoÿ—ÿ“ÿ�ÿ�ÿ! ›ÿŠÿ#"%$&Äÿ'’ÿÅÿÖÿ†ÿ×ÿ)(*Õÿ+™ÿ ÿ˜ÿÑÿ,.-0/øÿÂÿ2143658ùÿ:7;9¼ÿ‰ÿ«ÿØÿˆÿÓÿ=ûÿ><A?°ÿ@”ÿ¶ÿBÎÿóÿÏÿñÿ±ÿDECFÐÿ÷ÿIHGJNLKM‡ÿªÿîÿïÿOÌÿ­ÿéÿëÿÒÿÃÿÁÿÍÿäÿQRPSUVWTíÿ©ÿ¾ÿ»ÿáÿÛÿÉÿâÿ¡ÿËÿ¦ÿ£ÿ¯ÿæÿºÿ´ÿ½ÿôÿÿþ¿ÿŽÿÀÿÊÿÇÿåÿãÿ¾ Mcm»7e_|ÙîŽUý¹ÄWeœèu¢ÿî‚ÒÎ fùeÝ_fÛ£Íi‰“vp¬êÏ%¾*­Ï‰þ» þAƒüBp7üXºéNþ°Ú…ø2«ÁUÌ÷ǼêÄ�7øKŒ]È´c7üОUí¯2mZ‚sõÿ|�_f©¾oøÁj7üHëŸûì¿‘»~N¬¿j-4”L›–à Ž»Ž,÷Ù+~_fwýœØ ?vÒ O_î:�æ:Æ Ø]?'u˜6-qÒNZÀP7ó5ƈìˬââú…¹€Awkë]'VõèK°ë¼þ‘åfšëo¿¿”çgåˬ¢:Ÿ.0bÚ´uÜu,`-4”vÒ*xvÿ3¶TPWARMST.PATVßÿ Ïÿ‹ÿšÿŒÿžÿõÿòÿoÿ�ÿ !"#$%&�ÿ‘ÿºÿ¼ÿ“ÿÎÿ›ÿ�ÿ«ÿ–ÿ—ÿ»ÿœÿ'()*+,-./01234567­ÿ˜ÿ’ÿ°ÿ¾ÿûÿ±ÿ¶ÿŠÿ×ÿÖÿ·ÿ¯ÿ¬ÿÌÿúÿÓÿÑÿÅÿ¹ÿÒÿ™ÿˆÿ²ÿ•ÿ89:;<=>?@½ÿ¨ÿ†ÿ³ÿ‰ÿ”ÿÍÿªÿÉÿÈÿ¸ÿABCDEFG¦ÿÆÿ�ÿøÿÐÿ©ÿHIJKLMNOåÿÁÿ÷ÿôÿëÿçÿäÿÛÿØÿÀÿPQRSTUöÿóÿ‡ÿñÿÊÿÃÿµÿ´ÿ§ÿŽÿ€ÿÿþÇécrÀ�«Õý¨w]WûÕ¨rö{Ò[O‡“ù^gG¯ÕrØ;@ÏdeôP±³ÎV�â²,\ê¸Oid×(Í9DT³èK`etg2žT¤ëkò½;^öBì0qÁf/rg¡¨Ï<„YD…~dè€lŒ¤–Aéø‰™É00²îL–=Pªè¢†‹‰Î~ Ab$²Qt!î²™®CL8#E…~d{g�í¥«oWL\pw·¦ŒB?2MgbTVêØH…l±RE¦´&RY0E÷ gÒÕ·«³²™i´yªã>†¬–2SÌëŠÎh¥wú‘2’B™lA8#ë�Ú;ëlÕ(Ê¨Ž»º43­ j�ÑœC–…‹>À4ÖR™‚pÆp› Jd@6ŠtõíÊÅDgµ4‘äIu2DÌ…7‹ÅÀ<+d£(£Ð�Ìõ7ÕͤÂ)9‹b.MÝ5Δ‰õŽ)ý™Òz‡!RrÅÈ€liºbž†X‡L‘†ÁÀÄ«(tJë-ö0�� Q¡"d@ϺNi}že˜® ƒ2«uƒlj½ã¢Ì´DÿwVG‘Ê0t¡| œ�•�BKÓ=S†:–*Âhj‰ú[­¥*ø¢Î!RÈF±2º3eú‘p1šhï�uöŸ÷£Þd:ù80Z3å~´æ¾7­¦“ªåt½cDµ¾~,+ÒÑ5a:©†\?±LFí¦Gî>9KòŸ$}­¦“Fô’êµ7ÙqŸ0ê%üëõºšN>¨†TË„4]í¸O¸¾®+¦“õk/¡ZŽ*g™VLד?*†ß“Þ}oZUÉ„a�j™°þ´®’+÷ÓÇGÒÞh½Üçá+ëåðõ±eÕÞ�î?9Ë:©¨– ÕpÅðÈ5¹{Ÿ©– «Þð£7ºR܅̉þ²çe‚kÜ¢íÚF«�–À—YEΠENi7üØIkÙ ¡´þªÕé¼ìú®i®clòeV‘‚IZCÓ´׿“=ÑñÌ`bÿNLí¯îxé¦;ùô=vÞ]Çú«uÜuø2ÛJÀBp^ÌõWí³Wü»ëçÄnø±“VÁã4Nˆ…àÄÉ _f[�_ñï:±ÄXÀÌ›¶ÆÝ�ì¿ZþƒºO|ú…¹õwL Ñ×ÙVBœ´“ö öè˜Rÿ#K ¹«Ž�˜ƒWs½N\ßýáÂTÏ—ÙV¨\BRPM&_|™U4~w“v^0Ë?ÃŽkòs¢ÿî‚»¸Ä&_f-ê¸ë˜´�&_f­íÿô 3­çótÁJÚƒGÝ—ÙöMÙ_fÛ_ÌžçËl®ë‰»áG&�›Ãþy_f�:PÕI»$´­4çDÿÝ¿¬û2k´v 'íbö<_f[=p!ÁIÊÝð#sàB‚úÐæêĹú¾Ø ?Ö”}™mõ:�Ð5çDÿÝ¿¬û2Ûê� NRîꉙÔ‡6÷õ ü“=¯ãÝðcyøsð`®)û2›ƒ¯Ò}™Íå«ô¡Í¹ž¸¦ìËl{¾J÷Å´i¬m˦ì‹/ÛýÁ±ª?üª>´9Ãó£îxÁ¯ž×ñT¨¸¦ì‹/³íÑæ´øÕ�´œáùQw¼àWÏëx*T4­M q^v�ܬÖc!¸àWÏëØ—YÅIK|±€…à\ý?_`d‰˜.X톚ë¯ZHˆó² ÁÝð×Yŧã1dÚIK|±€…à‚_=¯c“/³ -Á¿z^Ç;i7ü˜A‹œÒú«‚«˜ï5ŽÝðc'ÍŒ6›!i‡–sJ&_f h[ƒõ ~¤…à Ï�ºã¿z^ÇS¡¢i3À쯾wÒ*xÜ…¬"fœ—]ÇØ—Y…ëâwüiç-wÞ]Ç®:Ÿç_�…àâ¨\ÎÁ{tqàí¤ÁÍÇÊäˬ¢M¯±‘;i<Îðô]Ò\Ç8™¶œ°»ÿÈœ kt^ÖHŠîû¼ìNZ�&_f9!(­q~��´X�ÎËî³W¨¼þªiüDå�´ WÕÿ¼ìnø±=êäˬw‚®ÑyYÍ%P¹ó¨çeçDÿÝšÚ‘]†¦5ÖV÷ –êO_f½†@vÕ±sýMô—õê{Ñ1FL¾ø2«hüî:¤=x4ù2«hQÇ]Ǥ=x4ù2«hmÿ§_˜i=Ÿ§ VÒ<š|™mß”}ñe¶½aÿ¾ÌæbFðk.¨Þ“v^0˯û2›ëà=ºÈ°¥“v`ö§ûâ‹/³í/fÏÚ\ð«kÊ¾Ìæ:x�.2léÄ$åò'ê¾ÌæÕ{’ræu_fs5þ â‡jÀ{t ¹KX¯ÉýrTñ˜¬×Ì_þýçŸ.œ¥ZŽ&TË„»äc:™L' �ܵÃ5óQÛö’õšÇa:ª’–Q…âm¹ØCµœ®¹}Ú9KµLX�Öéè‘UoøÑ]¹Nþ¨H‡wwI�j™�¦+F“–iÅýôñ‘u5}|ä.q–j™ôî—É„û„Q/¡—ŒÚOTCzIõÚ›ìtÖÙûFÅêIE<„ƒPÔç eú‘pÎ’‹‰ZšHTÈFÑ…XªXjgÑ‹ˆ\¼ìáž²QZñd²™ÒÈ€ÈÅ&.¹H‰”.U'ϳ,{Ø;;=óft�‰û Ù(´4‘¬ã>¦("¥5áÌC˜E¬ŒîLF…~d;d£´âÉd3¥�½ÔYF$_F£›p‰ù¢²pÙ;ëìÉ/�uö{Ò[O‡ò½Î: ŒŠ"RZãí0+ð¿NÔÅYàä¿ÂÉÿœüÎâÇ"â¤ÞßÈ[àV‚–&’øqºA¼!rüöV‚6OZ>;‹‹\lÀ|è÷Õïæ“@ט¸¯ÎâÇ"o`ž†ò!ªû�d ´6}µÀo“–÷ ¢Eä�0¹h;]:‹ÿ=ÝðþFÞâ··´4‘t¿Fu¿ŽM†–¦{FË™¾âtú¿!ð?~ì,~,rq<àKZÞï-"‡¬]îæ"íÂYüvÞSrÅÈ@ºúvå©6¤éj�ÿš~Æÿ)‰ÿ»³Î:‹çíûËxÑÈ šl7¢=.H7ˆ#"Çoo%‘–Z>;‹ÿkòÿ—[ɼÉÎ:‹ ÑéB,Mkd£0E)­‘�ÛlP:‹Ë€‘”QèGf€Š L\Pk´’Èà,~,üxÉ—d£XÝ™ŒhËz öÎ:ëìÉ/�uö{Ò[O‡^öB8ë,0*ŠHi�·Ã¬Àÿ:Qg�“ÿ 'ÿ pò?8‹‹\ˆ�nH?“�[ ZšHâÇéñ†ÈñÛ[ ÚÊÿ@?BAÃÿÀÿÖÿÐÿÞÿ ÿDüÿECHFôÿG×ÿäÿKJãÿIéÿÕÿ¿ÿúÿÛÿêÿ÷ÿàÿåÿ®ÿÿþïÿûÿóÿ#c<ÜÂðEÆÈÿ¼ü|¸2¼J0cdŒ‡[¾È£ìt»Î#Þµè-»ì”2¼J0cÃyÄ»�™€jÚuÑN â•"Hƨ t1º!nŸ¢Ë�Ò蕞MÓºË7i—dŒZNB¯R<½Û›–âé׋Õ=ô0ŸŒ‘1j)¸ÝÕõºµÈwMe³,>ÝŒ‘1ÊN·Ëíºµí]—L ex•`u&fŒâÃñáɡ+†óˆwÝe³)¡DÑ&:cÔu‹—Wj®Œ6A¯î.:3å,c”¦W¶ËN)5� °]³SvJ¡Ý6Á�1Š¡›X6K(Q´9p¬ j2~5µxå,c”�J]¢hrMvÙ)„²šŒ_M-£ÈT×Üu�.F®’]·P¶]´²SP¼ŒQvJÙÅ£X1œG¼k] Ëð*ÁZém£)  ©UÖ‰íÚ();¥]%cÔ:µë8Ñ¥itàXB‰¢ÍMàeŒŒQ†lrMtÙ,Ó¤V ëNíº@gŒZ¯–rÀfÝÚv�®K&�b8�x׌Q0p¿igŒ‚�“:/Ùeç\ïΧ݃uD™S—F/c œqÀ&èË€—1 N<‡wfŒ ¯vÔwfxì6;ãv{ÍcŽ£Î‹rQJ  /°¾L_“�1`à˜12†š`O"5ic´NÚ/cèk·Ü.v÷]”�R­·µPŽÃN©Ö“´ö­ZZû tµ6ªµPŽn›àÎ+½­)†²—��betg2¢Y,ë�Ú;묳'¿tÖÙïIo=NØìEÀ¨("¥5Þ³ÿëD]œNþ+œü/ÀÉÿà,~,r!@º!Ùð"€[ ZšHâÇéñ†ÈñÛ[ Ú;‹‹\lÀ|è÷Õïæ“@ט¸¯ÎâÇ"o`ž†ò!ªû�d ´6}µÀo“–÷ ¢Eä�0¹h;]:‹ÿ=ÝðþFÞâ··´4‘t¿Fu¿ŽM†–¦{FË™¾âtú¿!ð?~ì,~,rq<àKZÞï-"‡¬]îæ"íÂYüvÞSrÅÈ@ºúvå©6¤éj�ÿš~Æÿ)‰ÿ»³Î:‹çíûËxÑÈ šl7¢=.H7ˆ#"Çoo%‘–Z>;‹ÿkòÿ—[ɼÉÎ:‹ ÑéB,Mkd£0E)­‘�ÛlP:‹Ë€‘”QèGf€Š L\Pk´’Èà,~,üxÉ—d£XÝ™ŒhËz öÎ:ëìÉ/�uö{Ò[O‡^öB8ë,0*ŠHi�·Ã¬Àÿ:Qg�“ÿ 'ÿ pò?8‹‹\ˆ�nH?“�[ ZšHâÇéñ†ÈñÛ[ Úv^%W¯.!¿îã¤-ãÕ%ä¯Öü8ŠÕÕeïŒ_çòo¿þ8ŠUÓÍøm÷›nƯK÷kÏuÿ`´•…Ûf¼ÔŸ?ŽbÕ,fü:—û5ã·Ýo3žPîÏž¡è•eü>‰~žî”m­–¢lbƯK÷·çOÆo»ÏÃý`´•å£W–ñ„röë>.f¼º„üº�“¶Û.ZÙÅ£XÁUÆ«KÈ_­øq««5ÊÞÏÔIþÇqÒ œeŒŒQ›npÒæ€ÔR”M]6«iʶ‹æeŒrVû.e—�RÛ®‚/60Áº@—�’1 åè¶ –šÀØö2FCÑ+ó×ÞLÿ¶.ìî�}—R�‰ex•`ÆïÍô£Ø"ìî�}—R�‰e�b¿O¢ź°»?ö]J�$ãÙdþ8ŠŠÑêj�¯õç�«}ô¶r–Q0pA(÷›õ�m¾2žÑûüó£­PŒFP”³ ëúŸPîÏžû�²m¢ÔI2žÑû|¶!?ö]J¡wÆ3zŸßd<£÷ù:ã½Ï?3žÑû|*ãÉIô£Ø"ìnÆ3zŸþØw)µYÆ u;Ïè}>Û�Œêv2^(*ã½Ïo2žÑû|�ñŒÞçŸ/•ñŒÞç·3Þ·²×ôÊ~Ð[°´ÛŒÜvá¤ÍÉ£6Ýà¤Í)›…²m¢ÊÑmÜ£.Ð…"ÀË.ÅŠá<â]½Œ‘�"ÀüO(÷›õû.O’ñl²? l›(…rÜÏ&{�ñl²o2žMölC2PlÑÿ„r¿YÏý@Ù6QÊ.ÅjÛUð�bÿ£¹ ¾l–]<ŠÃãš12Æ œgŒZ¯ex•`1œG¼«—1`àÞwTÆ+æžSMÆûxß ³±ŒWÌ='‡f¼�÷™:IÆ+æž�ñ>Þ­¦–Œ‘1Êd[u&ŠÑÊÚLÊ�mèeŒŒ'”û¦çnÆÊýÙO ¯”ÃŒ§ðþÍxµ²Wï¼�b¶-cdŒ2ÙV�‰e'ŠTÓ6)2¯Þ#ã×¹üÛKÆÊ}ÓšñJ9Ìx ïߌW+{•ñ>Àûvbc#c”ɶêL,ƒÌjÚ&EæÕ;cdü:—{ÉxB¹oú.OÆ+å0ã)¼3^­ìUÆûïd6–12†É¶êL,;Q¤š¶I©KÈ® tùV¶3FƯsù·—Œ'”û¦ïòd¼R3žÂû7ãÕÊ^e¼𾺄ضŒ‘1Êd[u&ʶ‹¶3FƯsù·—Œ'”û¦?œñJ9Ìx ïߌW+{•ñ>Àû¸-cdŒ2ÙV�‰…B®¹¥”�^ÙοÎåß^2žPî›þpÆ+å0ã)¼3^­ìUÆûïûжe¼oeøHc#c”ɶêL,­Ùч]-oyQTQT9° ½Œ‘!ZM-þZçòoO~ÜZ¨f1ã å¾é9•ñ„röZwô�ŒWÊaÆSxÿf¼ZÙ«Œ÷!àý6–ñ¾•ád6–12†É¶êL,­ÙÑÕò–E•Û0cd8Êÿë\þíÉ�[ Õ,f<¡Ü7}÷ÐŒ'”û³×º£y2^)‡Oáý›ñje¯2Þ‡€÷íÄÆ2FÆ(“mÕ™XZ²£«å-/¶aÆÈøu.ÿö’ñ„rßôœÊx¥f<…÷oÆ«•½ÊxÞ7Èl,cdŒªÎ$dB8NÚ�íÏ×ÝCʶ‰RÚmF®]“ñ«©%c \/¢„rVgg�¤ø[”ÕdüjjÉ%À âì,”m­®Ö»[Ô¶«à3F] K åX ÚmF®]MÛ¤àÐtáeŒŒ6æ6ÙŸ?ÈT5;…²í¢ìêf¼VÔŸ?˜•ÍBÙvÑ2žÑûüóÇ+šŠÑ2~�Ë¿½ü@Ù6QJ»ÍÈU¢KM-¿Îå¯ýÍx¨?œ¤ø[* ”ÕdüjjÉx¨?3ÞêÏŒw€ú3ã}+ÃGëfŒ ;±1ÿ³ÉþÌx­¨?3žÑûü3ã×¹üÛKƯsùk3ÞêÏŒ÷­ ß ÝŒ‘a�Ù˜ÿÙdf¼VÔŸÏxñ� ,àš†HÆãŌNj�3^]B¾qàîj‚¥ eü:—û5£qànÿ_àžëœµ{îÌxÅÜóÜ3ã}¨ÞónÆ_íž;|fxÞõ¿º„¼š´e<ŠeŒŒ/íf^Ô壭pÒæ€xÅh» ÎNÆ(¾ò.t«À,xi£÷):c _y¸*xi£÷)ºà ¯Ýr Zok¡‘12”É6ÿ;ðjÛµðÒ.FïS4¬�{ÔíuÃÿPð…º]�³ŒGÞÿÁ»fÁK;ãx¥¯ÝG±Ò×nÆ_àþpçÇz7|±‹ÎÚ�b#c8Àh«[§PuµFÙÛË(F#ØqvÖÕeïŒá@�¤PŽ^ÆÈ¸Z;àB¹?{îǶ‹Vggqžwý¯.!¯L¶ý€—6¬ïCÞ÷¼›ñйçô=�ÀšñÈû?xÚ²3~�Ëoúûcߥ”:/f¼bîv� ,u·Àšñ>TïyÍU fÆoÚý"÷e�K©ÆÝ�áy�ÿ7í¾•kýq·r®wwÆûP½çÝjL«S¨ÊxÅÜwg¼�zÏ»?€Z(0­N¡*ãsßå2Þ‡¼ïy÷ïB�iu •ñ>Tïyê‡Z(Xªõ¶fü¦Ýþ±N”jÜÝž§ü¯¯þóÇ>]Çj.3^_ýgÆë«ÿÌx}õŸ?ñ>ùÁh+J�3~�Ë'ýÍøu.ÿöÍ�£XMtG.Éxu y5iû!êœå,ã}+Ã÷¼ûc�(¥ÝÑÙΣCî±ÎK¬.Ðuœe³Ô\× t­SKÆÈ¸ç%æB¹?û“غ�¯.!¿îã¤íC¬œeŒŒ�²m¢”]<ŠÃyÄ»fŒ ”mÅOôý¦ûC»ÍÈU¢k2~5µd<9‰þ}—¸íʶ‹Vd*/ã×¹üµ¿?:Ž*gï[Ù;àì‡ÍRs]/еN-#c,ÀÀ1c™¾hVv"»:kyÑMzgŒšŒ_M-ÛË 0pÌv"þŒ Äÿ^Ó6yNq=§øôœæzNóÉx¯i›<'\Ï Ÿžëp=×á“ñ^Ó6yNÚs#ÃN$zûËkÚ&Ïuûn·_ìö<ÝŒ÷š¶É/.ö‹·çYìynÆ{MÛ乌‘aMÛÄÿ^Ó6yî`ÏIß=Øw%㽦mò‹ûEéyö<’ñ^Ó6yNóôœnzNì9%ï5m“çôÁžÓÒsr°çD2ÞkÚ&Ïuö\Gz.cdøV¦.ñ¿×´MžS‹=§nÏéÅžÓ7㽦mòœ,öœÜžë,ö\çf¼×´MžS<=§ôœR=§d¼×´MžÓªçä@ωê¹Î�Œ÷š¶ÉsÕsJ÷\ÆÈÀmÛÿ^Ó6yNuzNîè}þ™ñë\þí%ã×¹üµ¿éúßêÏŒw€ú3ã}+ÃGëfŒŒ ¤1ÿ³ÉþÌx­¨?3žÑûü3ã×¹üÛKƯsùk3ÞêÏŒ÷­ ­›12Ô%Äÿl²?3^+êÏŒgô>ÿÌøu.ÿö’ñë\þÚß(Û&JMƯ¦–Œw€úóÇQ¬Ô%¤®Öèeü:—/ýšñPfü:—¯û5ã)uÿÇIø[”ÕdüjjÉøu.ÿökƯK÷kÏuÿp`Û%¤p[ÆûV†�¶˜12|è6ÙŸ¯õgÆ3zŸfü:—{Éøu.íï”m¥&ãWSKÆ;@ý™ñë\þí×(äš[JÍNg‹e¼ZÙ7ï[߇ݾr�r¬Ùél±Œw€ú3ã¯ÖO~¨KTÊêj�^ÆûV†ïÃÅŒ‘áîÿÕÊždü:—ßô7ã×¹üÛ“ŒßtóÍu‰*@Y]­ÑËðá¢ÿ×¹|Òß'áo PV“ñ«©%ã}+ÃGëfŒŒ1AÝBÙvÑÊN)†óˆw-¡˜(Ûu3†�^Y9° ien¯ì”ÂI›RG±�1씺Z£ì]³SvJùè•Õºm»œe ÊN©“ÊÑ˸Íÿl²?3^+êÏŒgô>ÿÌøu.ÿöòeÛD©ÉøÕÔ’ñë\þÚߌ§Ð=§ÿ€œN�…²í¢Ášñà߸­®ÖX°«›ñë\>éoƯK÷gÏý8I-ʶ‹V°«›ñ›�$ãÙdþ8 K€²šŒ_M-ï[>Z7cd0uÿ³ÉþÌx­¨?3žÑûü3ã×¹üÛKƯsùk l›(5¿šZ2žœDÿ¾Ë“ü8ŠÕI2Þ·2|´nÆÈ@1ÿ³ÉþÌx­¨?3žÑûü3ã×¹üÛKƯsùk l›(5¿šZ2žMöç�£X±»­P€a»˜yÏ&ûóÇIø[B1AMPÛ®‚Ï@ëú�Ë¿ýúPV“ñ«©%ã×¹üµ×?må@¡l»hh‹þßv¿éþØw)5¿šZ2Þ·2|úÇq–PÎ2FÆ(“m¥&ÐÎÜ— ¹æ–R>ze;c”ÍÒb‚«R@(«ÉøÕÔR6«‘ŒQB‰¢M´—1 'mH9°í²ËN©ÉøÕÔRdŒr¶…tê](Û&Ê.¶!^9+;dŒJm²ËN©ÉÔÔR6K‹ ®HÆ(;¥ÔÚ™›à’BÙ41/cdøÐ¶ù�Ë¿½d<¡ÜoÖï»d’ñÛîûк?m5¿šZÊ�–e<›ìÙ†ü°‹G±b’áCëúß·2|Ÿu˜l+=�Ô)(-Ëx²™þm]ØÝ°ð—ë˜å[YÆûV†o�ÙXÆÈðY×ÿd3ýÛº°»?`á/×)ß9Ýé99œñ^Ó6yN:=×9Üs#ÇÛÿ^Ó6ù.×wùô‹\¿È'㽦mò<\Ïçç2F†ÖÍã¯i›<Ï�ž‡ïþ0×îf¼×´Mþðb˜§?| ?ÌwÆ{MÛäîìHÏ÷ÁŒ÷š¶Éó-ýÁƒýAéKÆ{MÛäùìùHèÁþPÉx¯i›ã åþì÷]â6ØÝŒ'”{Ý#¹��Œ_—îUÏéóGÇ Ñ»l–v›yžwý¯.!�rœ´ý`è€Õ­Ž¢3^+|•ñ>¼ïy÷™“•9BJO ¯.!¯L¶ýPð/íFg¼�÷·]´¼ `¼´3^1÷ÝæüÁ.½¥ÔyÖŒ÷ÞßvÑ~Þ03žPîÏžá\™e¼º„üº�“¶ Ïkü¯.!¯L¶e¼yßóš¼ `ZµÅ2^1÷ÝæÌxïo»h�{Nw~ˆ³S°Z©ÖŒWÌ}+Õšñ>ÞGÙ6Q~¨¹®èZ§–Œ÷­ ß󚌑1&mŒ¶B9ºm‚En#¤.ÐCM`l{#å8ió?¥ÎcÆ«Kȯû8iûÁX‘ÛÉxJ�ÇŒW—�?©IÛ�-@×­¦m’ñZQf¼º„üIMÚ2^+êÏŒG±Œ‘±îã¤Íÿë\~Ó¯?Ö},"àhg†ç]ÿ;@ýùã(V꼘ñë\þí׌W—�W“¶ °r–ñZá7ïCÀûžwÞ0­ô’ñPf<ŠeŒŒ1ic´Nrˆr îVÎeŒŒ“š´ù�Ë¿ýšñvÿÛÑTRACER.DOC4ßÿ ºÿ «ÿ ­ÿ¾ÿ¬ÿ°ÿ¶ÿ±ÿ·ÿ¼ÿ»ÿ¯ÿ²ÿªÿòÿõÿ¸ÿ³ÿÑÿ¦ÿ½ÿ¹ÿ¨ÿ öÿ!"Øÿ#´ÿ$§ÿ&%('oÿÇÿ*Ïÿ,)+-.ÕÿÖÿ¥ÿ0×ÿ/132ãÿÐÿÉÿÓÿÎÿµÿÿþüÿˆÿÒÿÅÿÁÿÊÿ©ÿåÿËÿÍÿÌÿ´¼ù'-/EžC…W�}ÿ>êÜß——"Ïã¤å¥Èç8�ó8iH*¼j¼~SñìÚb/nvá¨ð’¦vù÷÷ãü­E%!%á~�>%áxý¦âqv±kËÕÔ÷ÚíÍèSîó¶úÏd³œ{^ÃHMíò/Äöûbô) g®A�³°åê께�>RÇfzÈLlø«·/º›K*íö=z~¹#_ìy #µÛWùæöèùå')¯i{M6û�fÊZ{>»-÷öfþ39CÒÕãõ›Šç8Ÿ×°Èì�Ôn_å›Û£ç—;R>^Ó�4TxÕ^“­dˆ‚'Ý2´Ao¹t}ÚÅžßvÙ�ê¿M’†¨F¯ßT<ÎqÒ�4TxÕ¢³!ªÆë7Ïž×0RË~0±ÝŽœ�ž_n›CRŸ:TCÒPáU£Þ~A]ý·Ë’Öºe¯ÿpgÑÖú5$-+™-—Tšûßå¢cø3DaìϽ½*¼ê8ooýz÷wg{^ÃH-ú‚±’ÙüïˆÛoo†¤µnFºÐqþÖ¢ïsÿ™œ!i&ÿ;¯ÿp,Œhký’Œ•Ì–K*Íýïq殥áÏ…©]þÅíÍ�4D5Âxý¦âq†¤ÝÎ_,XÉLvœ–þ›±‘ÚíKj_ëgÙω�tóQu£ÑJx«;»­Åžk¢ví8Ÿ`ÚíS‡êö¦Íåÿ—kHšÿUòX0V2[´ ’Žó¹† Ê*¼j¢†¤eaXë¿5Ÿ¢ÂCeƒËÅœE ª!é8Mþw¶`¬d¶kƒËņ ¯ZþïÃmøCÒÕãõ›Šg�ãDÒŒËßÖ[0V2[t6RÍí6µû·7Î>ÿ}êþ¿ªÛ›ãDÒJ†(ŒnÚ ·‹ån–Ñqœ´üv�gáIó¿C¶ß’Vj®AeÇI#À)ñ,¼†¤‘.4v�gáÅFºCÒÈRù¿ÇI#Ðñ‘ù7 hHZW;ö¹ÿLé©]þ…ØqÒvn7D–-V2Da�!i]íXö}àþ~œ´¶9%u¨†¨F¯ßT< IËÂ0²DþoÇq' <^Ó�4Tx'TRAP.COM'Ÿèís€1€!‚ 4í°>Ã20! "1ÍaTrap is RST 6 vectored to > ÍÙ >ÍÙ ÍaH Ší{€Éã~#͹ ‡0øãÉã"¡áís¡1¡åÕÅõíWgí_ÖoåýåÝåÙåÕÅõÙ!¡Í‡ ÍÊ ûÕ͇ ÑÍÊ ûͲ 1¡ÙñÁÑáÙÝáýáá|íG}Ö íOñÁÑáí{¡å*¡ãÉSZxHxPNC ábãdåhìiøiùiòbãdåhìsðpãͲ g Ë8>.͹ ó#ͦ ~ÍÙ #É͹ 0ø> > ͹ > õÅÕåæ_ÍáÑÁñÉÍ® Í¦ #~+ÍÙ ~##õÍâ ñæÆ�'Î@'ÍL. Barker P.O.Box 135 Chgo Il 60690 ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååÕréfÚÅ®­ÞÞooæþw¼dvœHU惋:ºù‘‰Þˆr�Ũ¨ð*:©ãõŽYúoÆœ+Ê9ΘÉÿÎF•ùà¢ÎÿŽÛ_Ù~_î" IC…—3ü>’Ž^»}¼~S2[ë–a�0$ ^ãõŽ‘îxÉìöfH:NªÌ׈r�!©�—̆¤QÛ©#Êu† ¯ZîfÙJ†_’Ž“]ãYx±}î?Ó�Ô§Õ�´Ûù‹=ŸiÑÄíAmÉ32ãÿÐÿÉÿÓÿÎÿµÿÿþüÿˆÿÒÿÅÿÁÿÊÿ©ÿåÿËÿÍÿÌÿ´¼ù'-/EžC…W�}ÿ>êÜß——"Ïã¤å¥Èç8�ó8iH*¼j¼~SñìÚb/nvá¨ð’¦vù÷÷ãü­E%!%á~�>%áxý¦âqv±kËÕÔ÷ÚíÍèSîó¶úÏd³œ{^ÃHMíò/Äöûbô) g®A�³°åê께�>RÇfzÈLlø«·/º›K*íö=z~¹#_ìy #µÛWùæöèùå')¯i{M6û�fÊZ{>»-÷öfþ39CÒÕãõ›Šç8Ÿ×°Èì�Ôn_å›Û£ç—;R>^Ó�4TxÕ^“­dˆ‚'Ý2´Ao¹t}ÚÅžßvÙ�ê¿M’†¨F¯ßT<ÎqÒ�4TxÕ¢³!ªÆë7Ïž×0RË~0±ÝŽœ�ž_n›CRŸ:TCÒPáU£Þ~A]ý·Ë’Öºe¯ÿpgÑÖú5$-+™-—Tšûßå¢cø3DaìϽ½*¼ê8ooýz÷wg{^ÃH-ú‚±’ÙüïˆÛoo†¤µnFºÐqþÖ¢ïsÿ™œ!i&ÿ;¯ÿp,Œhký’Œ•Ì–K*Íýïq殥áÏ…©]þÅíÍ�4D5Âxý¦âq†¤ÝÎ_,XÉLvœ–þ›±‘ÚíKj_ëgÙω�tóQu£ÑJx«;»­Åžk¢ví8Ÿ`ÚíS‡êö¦Íåÿ—kHšÿUòX0V2[´ ’Žó¹† Ê*¼j¢†¤eaXë¿5Ÿ¢ÂCeƒËÅœE ª!é8Mþw¶`¬d¶kƒËņ ¯ZþïÃmøCÒÕãõ›Šg�ãDÒŒËßÖ[0V2[t6RÍí6µû·7Î>ÿ}êþ¿ªÛ›ãDÒJ†(ŒnÚ ·‹ån–Ñqœ´üv�gáIó¿C¶ß’Vj®AeÇI#À)ñ,¼†¤‘.4v�gáÅFºCÒÈRù¿ÇI#Ðñ‘ù7 hHZW;ö¹ÿLé©]þ…ØqÒvn7D–-V2Da�!i]íXö}àþ~œ´¶9%u¨†¨F¯ßT< IËÂ0²DþoÇq' <^Ó�4TxååÃðÈÀ,ÅÕ*ë}‘o|˜g"ëë*ç>(Í~B}“|šÚ;$!"|!|"~ÍŸ*é"ëÑÁÉ*í}“|šëÚI$"íå6# x±ÂJ$áÑÁÉ*Ýå "Ýá>Ú:áæÈåÕÅëÍZsáå|µÊ‚$Í u+Ãt$*ßëÍ`sÁÑáÉÍ%)Øå##~>Ò�$> Íx#Ñs#rûÿ õw+åÍÈ*å>2 Í×$ñ#w+õë>3Íx#s#rûÿñw+§ÉÍx#xDMã"ô$áÖÚï$Ñs#r#Ãâ$!ûÿ Ã%>2ÙÉÍ|#Ã%Íx#ÍÚ$ÃÃ#ÅÕ~#þåÊ%#~+Ò%~õ+ëx Íx#s#rûÿñw+§ÑÁɯ2h%x‡_ÆOÍx#ë9ëw#w+x§Ê`%Ñ+r+s=ÂW%Áûÿñw>#w+§ÀÃÃ#~þ7ÀÕå^#Vþå•%þÊ•%!~áѧÉáÑ7ÉͶ*Öá§ÀÍ’#¯ÉͶ*þŸÈþ�É~þ7ÀÕë!~#fo~þçÊÑ%þå7ÂÑ%#~+îÖ~ëÑÉw}D#wx#ÉÍ+áÉõëÍŸ#ñÍ~BÃÔ%åÕ!Øÿ9ë*ã?ÑáÐ>Ã: ÖÂ&2þ>2 : þÊ"& ÅÍ–FÊš&ò3&ñö€õÍ{F: þÊ|&õ!ÍGÍ­ÒK&Í H!W&åÍñGáÁØ&Á*ýåxþÊk&ÍBH̓GÃw&ÍH!ÍÇFÍG!Ã4Í3Ï3Ôð!3ÍB!ÍYCÍBÃz*)å^#Vë͹CÍ`A ͘AÉ3ÍwC�á&^#Vë͹CÍ`A$͘AÉ3ÍA�!`ÍÈ?ÍÛC"(ÉÍØ9ÍmBÍAÁ3!`Í—?ÍÛC"*ÉÍØ9Í7A½3!`Í—?ͧC,͉C0,Ía$**͹CͧC4͉C8¹3Ía**ÍSDd( ͹CͧC<͉C@<͉CDµ3͉CHµ3͉CL±3!"*Ía**"P!"*Ía**"R!ͺ!�ÍÞ*k)))ë*)x^#Vë#ë!Í#Bͺ!«-ͺ<*ÍÈBË õ %CUgÍ6>!"3ÍÞ<*#"*÷ÿ|Ú¼ )Ú9 Í6>!�ÍÞ<Ã|Í6>!Ÿ-ͺ!†-ͺ!z-ͺ<*Pͱ!j-ͺ!`-ͺ!L-ͺ!;-ͺ<*[ÍÕ<è ÍÎÍ6>!.-ͺ<!ÿÍŽ[�ÍB�!+-Íâ@…�!'-ÍÝ@°!-Í”4!�ͤ?Ðÿ|ÚÀ)Ÿgoå!�ͤ?Æÿ|ÚÔ)?ŸgoÑ|²g}³o|µÂ…!�ÍÕ?ÍmCͧC„Í6>!�ÍÞ<Í÷@„Á3ÍÛCÍÈB ^ ¢.{/;í!í!í!Ãy! -Í\<Íì:!�Í<Í’@�|Í'@�Á3 Í6@�i3 !õ,Í\<Íì:!”Í<Íy@” Í,@”e3 Í1@”a3‰* )Ò‰Í6>!Ö,ÍÞ<à *a|‡ÚŸµÊŸÍV̓@<'!Ãæ͉C˜]3*)^#Vë#)ÒÄ͉C˜Á3*)å^#Vë#͹CÍ7A˜ÍÛCëás#r*#"*ùÿ|Úö)Ú¥ÍØ9ÍV@Y3¼ÍØ9Í7AU3ÍAÁ3!`Í—?ͧC|ÍØ9ÍV@Q3•!|ÍÃC)å^#Vë͹CÍwC�ÍØ9Í7AM3ÍfA�ÍAy3ÍÛCëás#rÍ6>!Ã,ͺ<Í A|e3ÍAI3ͧCœÍ6>!œÍÃCëT! Í#Bͺ!ÍYCå!ÍYCÑÍÄ>ͺ!r2ÍÞ<Í6>!22ÍÞ<Í6>! 2ͺ<*[ͱ!ç1ͺ!ç1ͺ!1ͺ<Í÷@04!`ÍÃ<Í6>!"3ÍÞ<Í6>!"3ÍÞ<Í6>!31ÍÞ<Í6>!ä0ÍÞ<Í6>!"3ÍÞ<Í6>!™0ÍÞ<Í6>!K0ÍÞ<Í6>!ý/ÍÞ<Í6>!³/ÍÞ<Í6>!e/ÍÞ<Í6>!J/ÍÞ<Í6>!"3ÍÞ<Í6>!/ÍÞ<Í6>!³.ÍÞ<Í6>!f.ÍÞ<Í6>!F.ÍÞ<Í6>!!.ͺ<!ÿÍŽ[oÍBÍ¥!Í6>!ͺ<ÍÎ!"a͉Cc�3͉Cg�3*Pÿÿ|Ú¯)?Ÿgoå*P÷ÿ|ÚÁ)ŸgoÑ|¢g}£oå*Rÿÿ|ÚÙ)?ŸgoÑ|¢g}£oå*R÷ÿ|Úò)ŸgoÑ|¢g}£o|µÂ|šÒÙõ͉C|Á3ÍØ9ͧC¢͉C˜�3*)^#Vë͹CÍwC�Í A¢M3ÍA�ÍAÁ3ͱ@N͉C˜Á3*)å^#Vë͹CÍwC�Í A¢M3ÍA�ÍAÁ3Í7A˜ÍÛCëás#rÍ6>!§,ͺ<Í A|e3ÍAI3ͧCœÍ6>!œÍÃCëT! Í#Bͺ!p,ͺ<*´ͱ!V,ÍÞ<Ã|Í6>!ÍYCͺ�ÍB ÃÒ *R)))ë*P)ø^#Vë͹CÍ7A©3ͧCr!rÍ—?ÍÛC"a*a͹CÍrArÍ7Aµ3!`Í—?ͧCc*R)))ë*P)ø^#Vë͹CÍwC�Í7A}3!`Í—?Í7Aµ3ÍfA�ͧCg!ÿ !è *kÍSD ë*)s#r*k#"k*küÿ|Ú¸ )ÚŒ *#"*öÿ|ÚÏ )Ú† !à !Ãø *k)))ë*)xs#r*k#"k*k÷ÿ|Ú )ÚÞ *#"*÷ÿ|Ú )ÚØ !$ÍÃC)))å! ÍÃCÑ)xs#r*a"v!é Ͷ!xÍÃC)))å!|ÍÃCÑ)xs#r!|ÍÃCå*)"ìÑs#r!xÍÃCå*ì&Ñs#r!LÍÃCå*ì8Ñs#r*#"*ë*vz¬|ú½ }“|šÒK !cÍÃC"€!Ãô Ͷ!xÍÃC)))å!|ÍÃCÑ)xs#r*#"*ë*€z¬|ú }“|šÒÐ !gÍÃC"‚!Ã? Ͷ!xÍÃC)))å!|ÍÃCÑ)xs#r*#"*ë*‚z¬|úS }“|šÒ ͉C„y3!ÿÿÑ !ÿÿÃz *͹CÍA Í@Á3åÍ@Å3Ñ|¢g}£oå*k͹CÍA$Í@Á3Ñ|¢g}£oåÍ@Å3Ñ|¢g}£o|µÂ´ Ãv *k͹CÍA$ÍÛC)))å*͹CÍA ÍÛCÑ)x^#VÕáýÿ|µÂv ˆ!.ÍBÍIA8<ÍAu3ͧC8ÍØ9Í7Am3!`Í—?ÍAq3ͧC<ÍØ9ÍmB!`Í—?ÍAÅ3ͧCHÍØ9Í`@}3H Í6>!ó-ÍÞ<Ãß !Ã` *‹)s#r*‹#"‹*‹ùÿ|Úp )ÚN Ãß *k#"k*kþÿ|ÚŠ )Új *#"*þÿ|Ú¡ )Úd *a|‡Ú° µÂÊ Í A@}3ÍV@<Ö ˆ!ë-ÍBÃß ˆ!å-ÍBÃß ˆ!Ü-ÍB͈@„é ÍV̓@<'* )Ò Í6>!ÍYCÍ6>!�ÍÞ<*P#"À*P+Ã͉CL�3͉CP�3͉CT�3*R#"Â*R+ÃÇ*ÿÿ|ÚG)Ÿgoå*÷ÿ|ÚX)?ŸgoÑ|²g}³o|µÂÃ*kÿÿ|Úu)Ÿgoå*k÷ÿ|Ú†)?ŸgoÑ|²g}³o|µÂÃ*k)))ë*)ø^#Vë͹C*Rë*k}“o|šg))PÍœC*k#"k*kë*Âz¬|úÛ}“|šÒ:Í6>!&,ͺ!�ÍÞ<*#"*ë*Àz¬|ú'}“|šÒÃ^ *)ÒAÍ6>!,ÍÞ<ÃyÍ6>!é+ͺ!µ+ͺ<*)å^#Vëͱ!¥+ͺ!r+ÍÞ<ÃyÍ~@H¡Í6>!Y+ÍÞ<Ãy!=+Í\<Íì:!�Í<Í’@�yÍ'@�Á3¡Í6@�i3¡Íý͉Cr ͉Cª$Í÷@Hy3ͧCHÍ6>!,+ͺ<Í÷@r°ͧCrÍ÷@ª¶ͧCªÍ÷@rQ3!`Í—?ÍÛC"´Í÷@ªQ3!`Í—?ÍÛC"º*´ÿÿ|Ú=)Úp*ºÿÿ|ÚM)Úp*´÷ÿ|Ú])Òp*º÷ÿ|Úm)ÚsÃçÍ6>*´ͱ!+ÍÞ<*a+"a*[+"[*[|‡ÚϵÊÏ!Ã*)"ì^#V*´}«o|CÑÍÄ>ëáͲBÃG ÉÍ6>!ͺ!U'ÍÞ<Í6>! 'ÍÞ<Í6>!"3ÍÞ<Í6>!À&ÍÞ<Í6>!q&ÍÞ<Í6>!-&ÍÞ<Í6>!"3ÍÞ<Í6>!á%ÍÞ<Í6>!�%ÍÞ<Í6>!D%ÍÞ<Í6>!ø$ÍÞ<Í6>!á$ÍÞ<Í6>!”$ÍÞ<Í6>!L$ÍÞ<Í6>!8$ÍÞ<ÉÍ!Í "Í6>!ÍYCͺë!$ÍÝ@ì!ÍØ9ͧC]ÃÕ!ÉÍ6>!ͺ<Í"Í6>!"3ÍÞ<Ã^ Í6>!æ#ÍÞ<Í6>!¶#ÍÞ<Í6>!"3ÍÞ<Í6>!�#ÍÞ<Í6>!`#ÍÞ<Í6>!4#ÍÞ<Í6>!#ÍÞ<Í6>!Ø"ÍÞ<Í6>!«"ÍÞ<Í6>!‚"ÍÞ<Í6>!l"ͺ<ÉÍõ5o"9 - COMMAND SUMMARY&…"6 - PROGRESSIVE GALAXY DISPLAY 7*®"5 - DAMAGE CONTROL REPORT 6 | 8)Û"4 - PHOTON TORPODOES / | \-#3 - PHASORS 5---- * ----1)7#2 - LONG RANGE SCAN \ | /*c#1 - SHORT RANGE SCAN 4 | 2&�#0 - FIRE WARP ENGINES 3-¹#============== ===============-é#COMMAND SUMMARY DIRECTION CHART$$HIT ANY KEY TO CONTINUE 7$=;$a Klingon nearby.EO$torpodeos could destroy the home base, so shoot carefully if there isJ—$To refuel and re-arm the ship must be docked at a home base. Remember thatä$use the chart below.Iû$are oªµÂ*ì&^#V*º}«o|ªµÊ2*#"*öÿ|Ú/)Úë*)8s#r×*º)))ë*´)x^#VÕáüÿ|µÂyÍ6>!+ÍÞ<Í÷@gy3ͧCg×Í6>!"3ÍÞ<Í6>!Ð*ÍÞ<Í÷@cy3ͧCc*º)))ë*´)xs#r*aÍSDd͹CÍwC�Í Acµ3ÍA�ÍAgÍÛCå*R)))ë*P)øÑs#rÃðÍ6>!¿*ÍÞ<ÍV̓@<'ÃyÍ A�53ÍA13!`Íõ>ͧC¶Í A�53ÍA13!`Í»?ÍJDͧC°É*)ÒBÍ6>!–*ÍÞ<Ã|Í6>!"3ÍÞ<͉CÈÁ3Í6>!ÍYCͺ!ÈÍÃCëT! Í#Bͺ<*)^#VëÍÕ<Í÷@Èe3ͧCÈ*#"*ùÿ|Ú¯)ÚjÃ^ Í6>!o*ͺ<*)å^#Vëͱ!C*ÍÞ<Ãy!Ã*)8^#Vë|‡ÚµÊÍ*)8^#Vë͹CÍwC�ÍØ9ÍAÉ3Í=A�ÍwC‚*(͹CÍÖA‚ͧCÄÍIA<ÄͧC<Í6>!*ͺ<*)å^#Vëͱ!¥+ͺ!ÍYCͺ!Ô)ÍÞ<Í6>!Ÿ)ͺ<*[ͱ!|)ÍÞ<Í6>!e)ͺ!*)ÍÞ<Í6>!)ͺ<!ÿÍŽ[oÍB )!oÍ%?#͹CÍ7AQ3!`Í—?ÍAÁ3ÍÛCÍÈB“zÌÍõ5Í6>!ÍYCͺ!Õ(ÍÞ<Í6>!µ(Ínly a limited number, and they must be aimed accurately. For aiming,HG%on Klingons is cumulative. Photon torpodoes do not use energy, but thereO’%ship's energy, but they destroy any klingon within range. The effect of PhasorsIä%Klingons are destroyed by Phasors and Photon torpodoes. Phasors drain theA0&to the width of one quadrant. For direction, use the chart below.Lt&is determined by the warp factor - a factor of 1 corresponding approximatelyIÃ&To move around the Universe, use the warp engines. The amount of movementF'Within each quadrant there are 64 sectors, identified in the same way.AX'by its row and column number, 1 to 8, starting from the top left.Fœ'The Universe is divided into 64 quadrants. Each quadrant is referencedå' !é' 1 2 3 4 5 6 7 8 (PROGRESSIVE GALAXY SCAN'(ADMIRAL1(CAPTAIN ;(COMMANDER G(LIEUTENANTT(ENSIGN]( YEARS. RATING= o( KLINGONS IN (YOU HAVE BEEN PROMOTED TO œ(COMMANDER IN CHIEF±(BOOT¸(THE FEDERATION HAS BEEN SAVED3Ø(THE LAST KLINGON BATTLE CRUISER HAS BEENÞ<*m͹CÍwC�ÍIA,0ÍwC‚ÍIAu3<ÍA8Í=A‚Í7A-3ÍÖA�Í7Am3!`Í—?ͧCÌÍ AÌ©3!`Í—?ÍÛCÍÈBÿ #/Í,@Ì)3sˆ!®(ÍBÃ|ˆ!™(ÍBÍ6>!|(ͺ*mͱ!ÍYCͺ!æ'ÍÞ*ͱ*k)))ë*ÍSD=ͺ!"3ÍÞ<*#"*÷ÿ|ÚÈ)ÚeÃ^ *)ÚH *P#"Ð*P+Ã/ *R#"Ò*R+à *ÿÿ|Úþ)Ÿgoå*÷ÿ|Ú)?ŸgoÑ|²g}³o|µÂ *kÿÿ|Ú,)Ÿgoå*k÷ÿ|Ú=)?ŸgoÑ|²g}³o|µÂ *k)))ë*)ø^#VëÍòC ͹CͧCL*k)))ë*)ø^#VëÍòCd͹CÍ`ALͧCP*k)))ë*)ø^#Vë͹CÍ`ALÍ`APͧCT*k)))ë*ÍSD=Í AT©3ÍA%3åÍÛCÍYCÍ AP}3ÍA%3åÍÛCÍYCÑÍÄ>Í÷@L%3åÍÛCÍYCÑÍÄ>ëáͲB*k#"k*kë*Òz¬|ú' }“|šÒñ*#"*ë*Ðz¬|úC }“|šÒãÉ*R)))ë*P)ø^#VëÍòC ͹CͧCL*R)))ë*P)ø^#VëÍòCd͹CÍ`ALͧCP*R)))ë*P)ø^#Vë͹CÍ`ALÍ`APͧCT*R)))ë*PÍSD=Í AT©3ÍA%3åÍÛCÍYCÍ AP}3ÍA%3åÍÛCÍYCÑÍÄ>Í÷@L%3åÍÛCÍY DESTROYED!)yYnN) MENACE ONCE AGAIN ? 8-)DO YOU WISH TO ENTER INTO COMBAT WITH THE DEADLY KLINGONh)YOU WILL BE REPLACED)BATTLE CRUISERS LEFT.—) KLINGON2¢)THE FEDERATION WILL BE CONQUERED. THERE ARE STILL !×)THE ENTERPRISE HAS BEEN DESTROYEDû)IT IS STARDATE  * - ENERGY LEFT=$*ENTERPRISE HIT BY KLINGON AT SECTOR F*STARBASE PROTECTS ENTERPRISE e*DESTROYED!r*KLINGON AT SECTOR ‡*DEVICE STATE&™*DAMAGE CONTROL REPORT IS NOT AVAILABLEÂ*TORPEDO MISSED.Ó****HOME BASE DESTROYED. . .CONGRATULATIONS!***+STAR DESTROYED+***KLINGON DESTROYED***/+TORPEDO TRACK @+TORPEDO COURSE (0*1-8.9)=\+ALL TORPEDOES EXPENDED u+SPACE CRUD BLOCKING PHOTON TUBES ˜+ ENERGY LEFT= ¨+ENERGY DRAIN=¸+KLINGON HIT AT SECTOR Ñ+NUMBER OF UNITS TO FIRE=+ì+PHASORS LOCKED ON TARGET. ENERGY AVAILABLE= ,PHASORS OUT!),:-,#1,,!5,LONG RANGE SENSOR SCAN. QUADRANT Y,LONG RANGE SENSORS OUT!s,A THINGY BLOCKS YOU AT SECTOR ”, REPAIRS INITIATED. ª,***TRUCE, ·, DAMAGED ***Æ,***SPACE STORM, Ù,WARP DRIVE OUT, MAX SPEED=.2ø,WARP FACÍ\ÍÑ·À!€>¼Â+ ÍÃ*OUT OF MEMORY* $d§Ê×W> Í´[Â×W*õcë*÷c"õcë"÷c*óc|µÊåWë͵V*õc|µÊóWë͵V!ùc^#V#åz³Ê!9"=5*ë*ü·Ê‘5ë!ë6#}»Â‘5|ºÂ‘56!C56#z³Â¤5*|µÊÅ5> 66Ã#s#r#=º5>Û275>Ó2:5>É2952<5"?5!‘4"J5Í+4ñGÍH STOÐÍÝ8Ãõ5Íf9*J5éé.. . ..†.......Í¡Fë*X5|µÂü5:U5§Âj6*S5|µÊj6ÕÍi8ë*ü s#rÑ*ü {æw#6á"V5*=5ù*S5>2U5éÍf9ÍHError - !—6~<Ê�6=»Ê�6#~§#ò‡6Ã|6#Í HÃï5Syntax Error in DATÁRETURN without GOSU Type MismatcèOut of DatáIllegal Function CalìFloating Overflo÷†Integer Overflo÷Out of Memorù Subscript Out of Rangå Division By ZerïOut of String SpacåString Formula Too CompleøRESUME without Erroò2Field Overflo÷3Internal Erroò4Bad File Numbeò5File Not Founä6Bad File Modå7File Already Opeî9Disk I/O Erroò:File Already Existó=Disk Fulì>Input Past Enä?Bad Record Numbeò@Bad File NamåCToo Many FileóÿUnprintable ErroòÅ!9N#F*öÕ~‘#~˜Òš8~+¶Ê 8~“#~šÚš8+^#V#ñå##Ãx8###Ãx8á|µÊ¬8~#foÁÉ!ÿÿ´8ÁÉÍH Internal Error - No Line Number ŠÃ‘4*ö~#¶ÊH9ÍH at line Íi8Íû8Ãf9ë>õÍTOR (0-12)=-COURSE (0*1-8.9)="-GAMES*-N.- 1-COMMAND : >-KLINGONS LEFT=O-PHOTON TORPEDOES=c-ENERGY=m-SECTOR=w- - }-QUADRANT= ‰-CONDITION= –-REMAINING ¢-STARDATE=®- µ- º--¾-GÂ-FSHORT RANGE SENSORS OUT !ß-YELLOWè-REDî-GREEN"ö-OUT OF PARTS : NO REPAIRS POSSIBLE.DOCKED"$.Hit any key for more instructions.I.third is the number of stars.Ji.Klingons in the quadrant, the second is the number of home bases, and the K¶.data in the form of a three digit number. The first digit is the number of F/The long range scanner and the progressive galaxy display return theirM/can be made immediately.Kh/expected to take, but getting to a home base will usually mean that repairsG¶/is damaged the damage control report will indicate how long repairs areK0you may have to cope with space storms and wayward meteorites. If the ship KN0perils of space can never be eliminated, and apart from the deadly KlingonsHœ0Although you have been supplied with the best of materials and men, the Lç0you may be promoted, but /9<Ú9Í(9ñÖÂþ8õÍ/9<Ú9Æ0Íø]Í(9ñÖÒ9É}“_|šWÉ!>9Í_~#foë>ÿÉÿÿöÿœÿüðØÍH at address áã|Í“>}Í“>ãåÃf9> Íø]> Ãø]å!9"55áÉÑ*55ùëé€ÅÕå)ÚÔ9|µ*?5ë*A5Ê»9åÕë)ë)Üá9ë)Á ë)Üá9Á Üá9 Üá9"A5ë"?5ëKë!€€"`ÍÚiáÑÁÉ]û9å!ÍŠ9áÉÉÑÁÉõ>Ñå!9Í6\áñÉõ>Ãp\ÅÕåÍg[áÑÁ>Ã�\"˜\!˜\Ã6\xãå>Í6\á#ãÉÕ.ÿî\Õo æõg¯7%ò´\*ûcë!þÊò\#þÊò\##þÊò\*ûc##n&þÊ÷\!ýcþ Êé\#7~4Òï\4o&~#foñÑÉ>ÕåÍ5^^#Vz³ÊG]þíÂG]ÕѧÊG]ÅåÕ+^#Vëc!å o gÍÄBÂ6]á$>á-Â&]Ñ%áÁÂG]ëÍ_ë6+6áÑÉþÊV]##Íš\Í>2Ã�\‡‡‡‡<Ã{\å&Ãp]å&ÿÅÕGáåN#"è9ë!9"ã9"å9y2ç9*H5|µÊ;*`5é!å;"X5ëA~õ#Åå*ê9õÍü^~§Êå;ñþÊ ;õþÂ9;Í`JÃ<;ÍgJ"ê9ñþÊb;þÊn;Í‹HÑÁ*`å*`å*`å*`åÃ{;ÍÙIÑÁ*`åÃ{;ÍtHÑÁ*`å*`å*ê9Íü^Ê“;~#"ê9ëþ,Âå;Ã;~§Âå;!"X5ëé~,þ"«;#"å~§Ê¿;¸Ê¿;# ®;Ãå;þ"ÂÅ;#"ê9xþ"ÊÚ; ÊÚ;+~þ ÊÏ;áÑyÁ͆FåÃ{;ÍH?Redo from Start Š*ã9ùÍ¡F!<Í\<*è9:ç9OÃ;ë*å9+~+þÊ@<þÊ2<þÊ2<ë +w Â4<ëÃK<++å~#foÍ‚Bá"å9!ç95ÀÑ*ã9ùáëé\ã~2[<#ãÕ~#^#VëÍøGë++Í—FÑÍ\Úæ5ÉÍp9Íç<ÃÈ=Íp9Íò<ÃÈ=Íp9Íý<ÃÈ=Íp9ͽ<ÃÈ=Íp9Íç<Ãå=Íp9Íò<Ãå=Íp9Íý<Ãå=Íp9ÍO=Ãó=Íp9Íç<Ø=Íp9Íò<Ø=Íp9Íý<Ø=Íp9ÍO=Ø=ÅÕå`Ã=ÅÕå`Ã="`if you fail punishment will be swift and merciless.I61Your mission is to carry out your orders as detailed above. If successful ‚1 STARDATE.Ž1SOLAR YEARS TO COMPLETE YOUR MISSION, IE UNTIL¿1 FOR REFUELING AND REARMING. Þ1HOME BASE ê1 YOU HAVEö1Sú1ý1BATTLE CRUISERS."2 MUST DESTROY THE KLINGON FORCE OF=52 RID THE GALAXY OF THE DEADLY KLINGON MENACE. TO DO THIS YOU=u2 AS COMMANDER OF THE SPACESHIP ENTERPRISE, YOUR MISSION IS TOµ2ORDERS : STARDATE=Ê2***JÐ2WARP ENGINESS.R. SENSORSL.R. SENSORSPHASOR CNTRLPHOTON TUBESDAMAGE CNTRL 3.EKB*%3@†ÀŠ>Ã.u×É€×I€€}~°0°„ ƒ€@ƒÌÍÌL~@„„zŠ@Œ€;Œ€�ÍÌL}�Âu€PâzT„ÂõHƒ…ëQ‚fff�)\ ×#}�Âu{ ×#z·QsHˆ „HH‡�„‚[[[[ BASLIB #900354 5.1 - OWNED BY MICROSOFT, 1979 ¯<Ã4¯Ã4#V#å‡!DM*ùÅÿ"¾D*öG##"¼DÃy5>Ã2 424*^#Vë" 4ë##^#Vë"4!s5"p56#6P>„2w5>2v5>ÿ2u5ÉÅÕåÍ 4·Ã�4ÅÕåÍ4Ã�4ÅÿÄ4ÅÕåõ _ÍñáÑÁÉÃÍp9ÍyUÚ¨4! S6C#6O#6MS!\>!Í _ÍKXtRÍ\Í<Êõ[!9%.ø4>=Í _.åô4·Êê4otÃß42h2|!É"ÕëÕÅÕåÃ=H~#  =x2?H:k5§Â¿=Í�=Â>=Í1LÍwF<Íÿ=~§Ê:=Íd]#Ã.=áÑÁÉÍ1L~§Ê:=þ Äd]#ÃA=>2?H:k5§ÅÕå¿=F#~#foxÍ�=Ìÿ=͆=Ê}=~#Íd]Ãq=͆=áÑÁ×FÍ�=È>"Ãd]ÅG:o5§xÁÉÍ�=Ê ^å*p5+~<Ê»==Ê»=###~þ»=å*f5ãÉáà ^ë!:=å*l5éå*p5~á=ÖÒÏ=/<Íÿ=ÈõÍî=ñ=ÃÛ=Íó=À:k5·À> Ãd]Í�=È>,Íd]öÉåÕÅW*p5#^ Ì">Ê>+†=»Ú>Í ^zÁÑá§Éõ{ÖÚ4>õ{Æ_ñÃ&>ñÉå!s5"p5!"H5¯2k5ÍL>áÉ!n5~6#wÉá~!l>Í�>NÊc>ÿÍz9i&à 6Љ ‹ÅG~#¸Ê‘>§#ƒ>++´ÁÉõÍœ>ñæÆ0þ:Ú§>ÆÃø]ÅÕÍf4!ª>>ʾ>Íp4w>͆FÑÁɆÚ6Íp9ÕåÕÍ#FãÍå>áãÍå>Í—FÑáÍ—FëÉå~#õ~#foñëÍ _ëáÉÍp9ÅÕåÍôdáÑÁɯ2`ÉÅÕåͯE*ºD#V#NX!�€"`ÍÚiáÑÁÉÅÍ.?ÁÉx§Â6űÊ9? Õåy<2$?Fë~‘Úƒ?�Úƒ?õ#~#foyÍ_ñO ë#~#fox§Ê‡?ÅÕå¾Âw?#Âf?ñññÇ?!$?4áÑÁ Âc?¯2$?ÑáÁÍ—FëÍ—F*$?&ÉÅÕåÍÑjÄÁháÑÁÉ~§Ê6Õ#^#V++ÑõÍ—Fño&ÉÍp9ÅÕåÍeáÑÁÉÍp9ÅÕåÍudáÑÁÉÍp9~<Ê6ÅÕååÍ#Fã~õ#~#foñëåÍ _6á+ÍwQÍgJÍ‹HáÍ—FáÑÁ×F>!>!>!>!>!>áÕ^#V#å!`ÃH^>ÃB@>ÃB@>ÃB@>ÃB@>ÃB@>ãÕ^#V#Õ^#V#ãÃ$^>Ãl@>Ãl@>Ãl@>Ãl@>Ãl@>ãÕ^#V#å!`Ã$^>Ô@>Ô@>Ô@>Ô@>Ô@>ãÕ^#V#å!�9ëÃ$^>ý@>ý@>ý@>ý@>ý@>ãÕå�9!`Ã$^>Ãä@>Ãä@>Ãä@>Ãä@>Ãä@>åÍkDáãÊó@~#foãÉ##ãÉãÕÅͬ^^#V>¸�Íæc¯2`É!TJýg!PJÃ¥a!!`Ã¥a~ƒ_#~ŠW#~‰OÉÍújÃKg!QÃHgÍûhÂ=I¯É‡Ÿ<ÀÖÉáÉo&͘HÃ)ië*`ãå*`ãåëÉÍmIë"``i"`ëÉ!`^#V#N#F#É!TJÃIhÍèjxþ˜{ÒÝj!`6€Í½iwg>˜�ÍEkÉÃkæIë:?HGw#¦IÉ¡IûI!!`¢IÕ`Í‘QØ`ÉÍ‘Qò™I*`|µÈ|ŸÀ<ÉÍ‘Q*`øâõI͵I!QͯIÍËHÍ{HÃøIÍ/I:`·õæ2`:`þ�ÒnRÍ|I:`·ÂJñëÃJñëò$J|/g}/oÃ8J!nRå:`þ�ÒAJÍ|IëÑ"`>2?HÉ€�Í5IÀajÃ7J „ÍÌÌÌÌÌL}ÍoHÍ•Hö¯YRÅõ>2Hñëÿ`hÌ8Jë~þ&ʬQþ-õÊ�Jþ+Ê�J+ÍwQÚrKþ.ÊKþeÊ¡JþEÂËJåÍwQþlʹJþLʹJþqʹJþQáÊÊJ:?HþÊäJ>ÃäJ~þ%Ê)Kþ#Ê8Kþ!Ê9KþdÊäJþDÂûJ·Í@KÍwQÍ¢QÍwQÚåKÂûJ¯“_å{�_ôOKü_KÂÿJáñåÌFHáÍ‘Qèå!DIåÍAJÉÍ‘Q ÂûJÜ@KÃ�Jñ#DIåÅÙIÅõÃûJ·Í@K#ÃûJåÕÅõÌtHñÄ‹HÁÑáÉÈõÍ‘QõävIñìIñ=ÉÕåõÍ‘Qõä IñìîHñáÑ<ÉÕx‰GÅå~Ö0õÍ‘Qò«K*`Í ÍæHÒ§KT])))ñO |·ú¥K"`áÁÑÃ�JyõÍ‚H7ÒÇKt”$Í5IòÄKÍvIñÍÚKßKÍ’HÍI͵IñÍFIÍ’HÍËHßKÍOIÍFIÁÑÃ)I{þ ÒôKƒ†Ö0_úÃîJ·Ã.Lñå!`Í‘QâL:'`ÃLy®áÃ.L:`Ã*Lñññ:`Ã.Lñ:`/Ã.LÃnR¯ÍºLæÊD¸GáÂÞLñ#åëÍp9ÍHgáÁÑãÉãÕÅÃý@ãÕÅ^#åÍ¡^ÃAãÕÅͬ^^#V#åëÍp9ÍIháÁÑãÉãÕÅÃ&AãÕÅ^#åÍ¡^Ã,AãÕÅͬ^^#V#åëÍp9ͪgáÁÑãÉãÕÅÃOAãÕÅ^#åÍ¡^Ã{AãÕÅ^#V#åëÍÞ^ÃUAãÕÅͬ^^#V#åëÍp9ÍÿeáÁÑãÉãÕÅÇAãÕÅ^#åÍ¡^óAãÕÅ^#V#åëÍÞ^Ã�AãÕÅͬ^^#V#åëÍp9ͽgáÁÑãÉãÕÅÿAãÕÅ^#åÍ¡^ÃëAãÕÅ^#V#åëÍÞ^ÃÅA|§Íp9Â6ÅBKÍ+BPYÁÉ|§Â6Íp9ÅBK •ÒB o¯_ÃÿAz´Â6Íp9ÅÕz³Ê3B »Ò9B_“½Ò?Bo ƒ_ ÎW}ë͆FÑãÍ—FDMáÉãÕͬ^:`§ÊfB†2`#ÑãÐÃ6:`ã§ÊyB†2`#ãÐÃ6Íp9ÅÍ`FÔ¼Bë~#¶#¶++ÄGÕ>Í _+V+^+ë·Ê¯B+r+sáÍaGÁÉáÁÉÍp9ÕëÍ‚BÑÉ~#Õ^#VëÑÆF¯ÃÎB>2ÇB|§Â C+})ÑÕëN#¹ÒCë~#foë ãë:ÇB§ÂøBñéå!9"=5!C54É ñéá~‡Í_#åÃ6Íp9Õ ëÍ7CÑÉ~§Ê6å#~#fon&ãÍ—FáÍp9Õëz´ÂSC}ÕÍ#F~ãëÖÚPCs#ÃFCáÑÉÍz9Ã6|§Â6Íp9å!9>͆FñÉÕÅåÍCdáÁÑÉãÕ^#åÍ¡^`ͼ^áÑãÉãÕ^#V#Õ^#V#ãͼ^áÑãÉÕå`ͼ^áÑÉãÕ^#V#åë`ͼ^áÑãÉÕÅåÍ)iáÁÑÉÍp9ÕÅÍÞ^åÍæCÑå!`ͼ^áÁÑÉÍp9ÕÅÍæCÁÑÉ!†9ÍHgÍÁhòdëãÕ^#V#ãÍp9ÍDëáãëÉÍp9ÕëÍDÑÉÍp9ÅÕz³Ê,D|µÊ,D|·õÕëÍIiáñüpiëÑÁÉëãÕ^#VãëÃúCãÕͬ^:`î€2`ÑãÉ:`î€2`ÉëãÕ^#V#ãÍcDëáãëÉÕÅÍ•iÁÑÉÅÕåõGN§Ê—Dy§Ê—D#~#foë~#fo¾Â D#Ê–D †D y°Ê DyÖ<.ÚªD)ʪD)ñ¥áÑÁõÍ—FëÍ—FñÉÿÆÿ€´ÂDÅDÖÈD�ËD�ÎD�ÑD‰ÔD�×D€ÚD)ÝD àD‰ãD�æD�éDìDÅÕ_!¹D4ÂÿD5*ÁÑë"``i"`ëÁÑÉÅ#~þ+ÊVMþ-Ê-MÖ0Ox‡‡€‡�GþÒVM#~·ÂM`ÁxþEÂKMy„þ áÒÿL>€2HÃ[M|�þáÒÿLÃCMÁáÃÿLñÁÑë"``i"`ëÁÑÍ_I#þåÞWÍdOõ:H·ò‰Mñ‚ÓMñ‚ú—MºÒ—MÖáõÍP60ÌtIÍ*P+~þ0ʦMþ.ÄtIñÊØMõÍ‘Q>"�w#ñ6+òÉM6-/</Ö ÒËMÆ:#p#w#6ë!HÉ#ÅþzÒYNÚöNÍûOÑzÖô×OÍÂP{·ÌìH=ô×OåÍjLáÊNp#6!H#:@H•’È~þ ÊNþ*ÊN+åõ'NÅÍwQþ-Èþ+Èþ$ÈÁþ0ÂQN#ÍwQÒQN++wñÊGNÁÃNñÊQNá6%ÉåÚýNÊuNQÍÑHúƒNáÁÍ1L+6%ɶÊÍ5IòlNÍ™IÄdOáÁú¨NÅ_x’“ô×OÍîOÍ*P³ÄçO³ÄPÑÃûM_y·Ä]Kƒú³N¯Åõü_KúµNÁ{�Á_‚xúÑN’“ô×OÅÍîOÃâNÍ×OyÍPO¯’“Í×OÅGOÍ*PÁ±ÂíN*@Hƒ=ô×OPÃNåÕÍ‚HѯÊOÍ™I7ÄdOáÁõy·õÄ]K€OzæþŸW�O“õÅü_Kú#OÁñÅõú1O¯/<€<‚GÍ*PñôàOÍPÁñÂTOÍìH~þ.ÄtI"@HñÚ[Oƒ�’ÅͶMëÑÃNÕ¯õÍ‘QâˆO:`þ‘ÒˆOùP!!`Í¢IÍIñÖ õÃmOͺOÍ‘Qê�OC‘ùOÍ5IãOQÍÑHò¶OñÍPKõËOñÍ_KõͺOñ·ÑÉÍ‘QêÌOt”ø#Í5IÃÒO QÍÑHáò®Oé·È=60#ÃØOÂçOÈÍP60#=ÃãO{‚ ÍPÅõåÕ/áå>žÍ¸HÒSPá>ŽÍ¸Hëáp#ñÁ=ÂJPÅå!`Í\IÆPÅåÍ/I>Í|IÍ_IáÁ¯gQ?ÍPÅõåÕÍjIá/{–_#zžW#yžO++ÒšPÍI#Í_Iëáp#ñÁÚŒP>ÃÈPÕmQ>ÍPÅõåëN#FÅ#ãë*`/}“o|šgÒÛP"`Ñáp#ñÁ=ÂÈPÍPwÑÉùºD"ºD~#N#F#‡Ú?EúE Í_ÃEy“xšÒ$E ÃEå+++6@#y“w#xšwáÑÁ+++6###É!¹D~6þÚPEÍeEÃÿDͯE*ºD#~“#~šÒÿDÍz9à 6Õ!å*¼D"ºD~#^#V#‡Ú¬Eú‹EÍ_ÑÕÃrEã|µÂ—EáåÃrEñ++~ƒ_w#~ŠWw#åÃrEÑÑÉÕÍeE*¼DDM~#^#V#‡Ú FòÉEøE+z¾ÄÊF+{¾ÄÊF##¯{zë~#q#pë_§Ê¸Ey½ÂþEx¼ÂþEDMøE~#ÂþEøEYP+++ë"ºD6@###{•_zœW+r+sÑÉ·ÊSFõ*ÀD|µÂ6FÍz9Ã6^#V+ë"ÀDñÍïDë#s#r++ë+r+s##ëÉ!ZF_FÉÕë*òG{•zœ*ôGë?ÒuF}“|šÑÉåÅÿ~# §Â{FyÁáÉÅÕGåÍ#FãxëÍ _áÑÁÉÍ`FÐÍGÃaGÅÕå*òGë*ôGëÍ_ÊÆFÍšGÊÀFÍGåÍaGá###çFáÑÁÉÍìFÍH during G.C. ŠÃ‘4ÍìFÍH ŠÃ‘4ÍH Internal Error - String Space CorrupôÉ#ÅN#Få*¼Dy•xœÚ\G*¾Dy•xœÒ\GáÕ++å`i+V+^áÍ_ÂáF##Ñ6+6+~6  >@¯ÁÉá++ÁÉÕë*ÀDë"ÀDs#r+ÑÉÕÅͯEÁ*ºD#~‘_#~˜WÒŠGÍz9Ã6r+s##6€"¾D###ÑÉë!ÀD~#fo´Ê®GÍ_žGëÉ<ëÉ*¼D"ºDë*¾D}“o|šgë6@#s#r#6€"¾D*ôGë*òG"ÀD}Æw>Œ#w##Í_ÂÙG++6+6ÉÂDïDik§Èõ~Íø]ñ#=ÂúGÉãÍ HãÉ~æÍø]¾#Àà Hs#r*#"*ùÿ|Ú&)Ú!"*Ía**ͽ͑QògH*`}/o|/g#"`|À͘HÍ)iÃgH!`~î€wɯ2`ÉÍ‘Qàú‚HÍCd͘HÉ*`͘HÃ)iÍ‘QÐü‚HÍ#d>>Ã=J~·ÈÍy4#Ã�HÃy46H!!`ûH>Ž!!``2ÂH¯Ž# ÂÁHÉ!!`Ã�b!!`Í¢IÍ5`>È>ÚäH>ÿ§É|’À}“É+É!XJÃ¥aÍjIͰi+6¸!`¢áÿŸ1©_c²þÿ¿É¶€¿É¶€Æ¤~�@zóZ rN ¥ÔèèvHä TÊš;áõ€–˜@B †''èd #~þ:Ðþ ÊwQþ ÊwQþ ÊwQþ0?<=É:?HþÒžQÖ·7ÉÖ·Éþ-Èþ+È+ÉÍwQÍ4RþOʽQþHʽQ+ÍÉQÚÒQëÍ8JëÉþH#ÊþQÃØQÍz9à 6ÅMë!ÍêQëÚèQ}‘§ÁÉÖ0?ÐþÐ)Ø)Ø)صoÃêQÅMë!ÍRëÚR}‘§ÁÉÍ4RÖ0?Ðþ Ú&RÖ?ÐþÐÆ )Ø)Ø)Ø)صoÃRþaØþ{ÐÖ ÉÙIÅÍ‘Qø:`þ�À:`·ø€‘Ã)Iõ:H2Hñõ¯2HñÉÍz9à 6Íz9Ã6”e3 Íz”a3‰* )Ò‰Íó!Ö,Íùà *a|‡ÚŸµÊŸÍVÍê <'!ÃæÍX ˜]3*)^#Vë#)ÒÄͦ˜Á3*)å^#Vë#ÍÊ Í ˜Íëás#r*#"*ùÿ|Úö)Ú¥Í3 ͸ Y3¼ÍúÍÖU3Íâ Á3!ç Í& Íî|ÍÍp9ÅÕ}ÍhXÊæ[þÊã[!$ ~·Ê`S#~·ÂUSÅ`iÍUÁÀ–O #~ÖÖŸgoÑÁÉPY!$ ůwÍMUÍþÊû[þÂ�SѯÍÃì[<Ê\Á!" ^#Vr+sÉÍp9}§ÊKXÅÕå}ÍhXÊÝSÅ PYÕþÂÓS!ÊSåå`i>Ã,T!$ ~·ÄkSÑÍMUÍÁÍYáÑÁÉÍp9ÅÕ}ÍhXÊæ[þ!#ÂûS!« ~+ngÑÁÉÍp9ÅÕ}ÍhXÊæ[! n&ÑÁÉáñåõ*H5~þÊà[þÊõZñÕÅDMõ$~þ€åÌhSá4N#ñõVþ pÊPTÆàzˆw ñÁÑwáÉ+s#r#6€#6€áãDMå! {zVºÊ¤TÕõåÅtRÍÑÕÍÑáñwÕÕÍÑ<¢TÍ<Ê\ÁÑ!! {æwá:Ð[·Â¹TÍUáÉ!! ~þõtR!& ÕåÌÚTÍhSÑáñÌÚTáÃ×[Å€~# ÂÝTÁÉÅå*H5~þÊ#[% ~·ÊU+~#5–]yq#Í1]Ö Âx\> Í1]Í\]·Ê]þ Êx\Ã{\:[<æÌ.]¯wÉ1Ãf9Ãø]õ>^Í1]ñõö@Í1]Í.]ñÉ~§Èþ ÂU]õ> Í1]ñÍ1]#ÃF]Íp4æÉCå*p5þ Ê{]õ#~+<Êz]=–Ü ^ñõþ Ìã]þÌæ]þ ÚŒ]4+~#<Ê»]=Âß]ñþ Êê]áÍy4þ ÀõÅ:x5Gʸ]¯ÅÍy4Áë]ÁñÉ:M5§ÂÔ]<2M5å*J5"b]!^"J5áñþ Êê]Í€4áÉ*d5é6É5À4É> Íd]~=æÂê]áÉå*p5å!s5"p5Íd]á"p5áÉ> Íd]> Ãd]> Í€4> Í€4*b]éÅÃ/^Å ë GÍg^ ÁáÊC^~#foÃE^##ÑãÉÅÃS^Å ë GÍg^ ÁÊc^áãëÉÍq^>ØÈɧÂ~^~§È+~?É~§Â‰^öÉ+®#øÒ–^ë–À+ ò–^¯Éë&)))ÔÿÉ^#V#å!`ͼ^áÉͼ^w#w#w#w#Év<Ä͹>Å`Ãä^>Å`ÕÍ^õ ~#ñ=Âè^ÑÁ!Í^É#~þ Êû^þ Êû^É…oÐ$ɧÈÅGw#Â_ÁÉ{­Àz¬É#"*öÿ|Ú#)ÚsÉÍõ!ÍYÍ!ø)Í1!,Í!Í.ÍhÍ(!Ô)ÍFÍI!Ÿ)Í7*[Íà!”)ÍOÍR!|)ÍdÍg!e)ÍX!ÍCÍmÍp!*)ÍÍ‚!)Ív!ÿÍŒoÍþ )!oÍ#Ͳ;Q3!!Í(Í¢Á3Í>Í“zÌÍÍ‹!Í|Í‘!ø)ÍÙ!,Í=!ÍÖ͈ÍÐ!Õ(ÍîÍñ!µ(Í÷*mÍ­Í«�;,0Í ‚Í 6#ÖÒ)`ÉÍXd(`·Êd`ÍkOÊi`! kå!`®yø#–Âa`+ÂT`ÁÉ©ÉÍk?Éà kåÍLaáÍÑjÍ#dÂ`åÍLaáÍdÍ/a!!`ÍXdÊî`:`·Êk:(`/‰!`N#FͰi®+6¸õO ~·áÁÉ+~·ÊUÍUÂéT7áÁ>É*H5ÕT]" N#F+q#p##å€#6 Â1UÍMUÍ=ÊFU>€áw+w·ÑÉÅÕå!%ëÍáÑÁÉÍçTØþ7?ÀÅå*H5$ 6#67áÁÉå~·Êþ[õ#^#fk_þÚ–UN#~þ:ÊšU++@Êþ[yÖ@Úþ[þÒþ[S #úëU~þ.ÂÄUÍ×Uñ7õðU#±U¯2SñáõÍ—FñÉzþ Êþ[þÚþ[È> Ã×UÊËU> ÂðUÃËUÍp9ÅÕåëÍyUtRÍSÍ<Êõ[!ôRS> Í _áåÍyU:S!ôR¾Â\SÍ<Âï[ôRÍáÑÁÉÕÅ*%S~·Êã[#N#F++Í—F æßþOÊ„VþIÊ„VþRÂã[*'S|µÂ„V!€"'SáÕ}Ñ_ÕÍhX—VÍY{ÍhXÂò[ÑzáÅÕÍyUÑÁÅõ Í?Yñá"H5å#S> Í _66ÑÕÍMUáå~þÂãVÕÍÑÍ<Ê\ÃøVÍ<ÂøVÑÕþÂõ[Ã×VÑÕ!"¯w#w#w#wá~þÊWþÀÍUÉ& €p# ÂWÉåÕÅÍKXÍõ Íñ_ÍÁÑáÉÍp9ÅÕåÍyUtRÍSÕÍ<ÑÕõÄñÑÊõ[ÍáÑÁÉÍp9ÅÕå!S6# Í XËWÍp9ÅÕåÍyU¯2S!SÍX! SÍXtRÍSÍþÿÊõ[懇‡‡‡O!uR  ~#Í1]yþÂÚW~þ Ê×W>.Í1] ÂÄW:s5Æ W:t5ºÚóW> Í1]Í1]Ü.]SÍþÿ´WáÑÁÉ~þ*À6?#  XÉ"%S>2N5å!^["O5á:L5§À<2L5å*J5")S!_X"J5áÉ"'SÍp9åÕÅÍKVÁÑáÉå*\5|µÊ]X##nÍ©SÃLXáÉ.ͤS*)Sé§Êæ[<Êæ[=_å!\5~#fo´ÊŒX##{¾Ê¢X++ÃxX*\5åÍ«X"\5Áq#p#s#4#5++###DM §áÉÅÕ!^5~#fo´ÊÞX+V+^##å*'S{•zœáÚ°XBK^#V+ë"^5!¶ DMëÃðX¶*'Så DMÍpGÑs#r#å 6# x±ÂóXáÑÁÉü$a!`>¸�Íæcñüc¯2`:`õÍMcÍkÁxð/<É!`~5·#Ê'aÉ`!!`Nwy#Â7aÃk`ëÃ[d!`ÃXd!!`ÃodÍCf!Cfãé!(`Ãia!`>ÑF+N+Å=Âlaëé!!`Àa!`>ÑÁq#p#=ƒaëé!`Ã¥aá"O_ÍwaÍfaÍRa*O_éÍXdʸj:`·Ê¸j!'`N#FÍ¡hÍÏcq·ÕÊâaÅGÜcÍdxÁ ÂËaÑÂÂaÃMc!`ÍîcÃÚa²jöô¢0 TeÂB׳]�Âh!¢ÚI�.›kÁ‘ €�åÍLaáÍÑjÍ#dÃ)båÍLaáÍd!!`Ã¥aÍU>!`ÿq#~æ€ö++w+qÂDbÃk€DNnƒù"~€‚`Þù3ó5�zÏÑ÷r1{ÏÑ÷r1€Àh!¢ÚI‚ÍXdÊkyî€O2'`ãbÍXdÊk:`·Ê/a�Òµb/<õÍ/añþ9Òkõ:'`OͰiG¯2 `ñ!'`Íæc: `2`x!!``·ò4cÍcÒìbë4Íd:`·üc!`~æ€++®wÃk!`4À#Âc4Ê/b+6€É!!``¯Ž# Âcɯž# Â*cÉÍ*cÒMc/!`¯Oyžw#ÂEc¯G:`·Âvc!`Vwz# Â[cxÖþÀÂNcøj!`͉c·òncx·Êìb!`†wÒ¸jÃìb~w# ‹cÉåÍLaáÍÑjÍ#dêcåÍLaáÍd!!`Ã�båÍLaáÍÑjÍ#dÃÆcåÍLaáÍdÍ/a!!`Ã�by2'`!`V_~q+ÂÜcÉqåÖÚýcáåNsY+ÂòcÃècÆ W¯áÈå~w+ÂdÃd!`ÃdÍ)iÃ#dÍÑj¯!`w#Â)dÃkÍ:d}ÉÍodÍCdòdÍodͰi!`F#^#V#NØjͲd}É!`~#Â]d·G++NÈyà k`Ã[dÍÑjÈú®dxõ>@G2`>õÍÅiÕÅx·ÍÀgÁÑÍKg!HeÍIhÍÏiñ=ˆdñÆÀ€GÃÚjÍU>‹!`ÍÑj>�¸ÊédÒÇdÍU>�ÍújÍðeÍèjëÈë!`6€Í½ig>˜�ÍEk|Ô~iëÉ>€©²³ÂÁdakÉÍÑj!áeÍHgÃeÅÕå !\5T]~#fo´Êæ[x¼Â Yy½Â Y~#~+ë*^5ë"^5s#ráÑÁÉšÒÃ^ *þÀ*'SÕ€|µÊOYë!¦ s#r¯#wÂYYÑÉö¯2ë!å)ãÒùY)#ÃúY)ãë)ëÒZ ãÒZ#ã=ÂïY}æ_Á}la)Ú\ÒZ#x·Â\"5YáÁå!¯ "7Y!& "9Yáå!€}“o|šgÑÕÍÑ[ÚNZbk:;Y·Ê”Z€ÍÑ[ÒcZåͱZáÅDM*9Yë*7YÍèZ"7YPYÁͰZá}“o|šgµå*5Y#"5YÂ1ZááÑÁÉåͱZáÅDM*7Yë*9YÍèZë"7YPYÁÃyZö¯2Ð[ÅÕå*5Yë!¨ å~#foÍÑ[ás#rÂ×Z:Ð[·ÊäZ!äZåÅå!# ÃWTáÑÁÉÅ~# x±ÂéZÁÉñÕÅõDMÍQ[Êø[ÍF[!® ñwõ!% V6þ Ê[ÆàzÎwñÁÑáÉÕÍO[Êø[ÍF[!® ~·ÑáÁÉ!¦ÃA[!­ ^#VÉ!­ s#rÉDMÍ>[ÕÍ8[ëÑÍÑ[ÉÅÕ}ÍhXÊæ[þÊq[þÂã[`i"H5!�["Q5ÑÁî[Í^UÐÍz9!>à 6Íp9|²Â6,ʨ[-:N5·Êæ[å*O5ãÉ!p4"Q5ÅÕ{Í#Fåf$%ÊÌ[Õå!Å[å*Q5éáÑ÷[áÑÁÉ|’À}“Éå!"H5áÉñáÉ>6>4>?>=>:>7>5>2>3>@>C>Íz9o&à 6åÕÅ!"H5!ì9"ê9Í%\ÁÑáÉ:[<æÂ6\ÍH? Ã6\pÍ\]Ãj\:-]·>\2-]ÂP\Ê5\Í1]+Êd\~Í1]Ãx\+Í1]Âx\Í1]Í.]!ì9õ¯2-]ñÃ{\Í\]OþÊ<\:-]·Ê‘\>\Í1]¯2-]yþÊû\þÌ4]7Èþ Ê"]þ Êû\þ µ\Ê6\Ãû\þÌ4]Ê6\þÂÓ\Ê6\Í1]> Í1]>Ã]\þÂÝ\>#Ãd\þÂö\ÅÕå6Í.]!ì9ÍF]áÑÁÃx\þ Úx\x<>ÊÍÑjÈxþ™ÚeÍU>"~ƒùÍShÍÅiÍÁhÍÏix±Í­g!Leͪgõú8e!HeͪgôCf!LeÍHgñôCf!Peà g€û׆d&™‡X4#‡á]¥†ÛIƒÍÑjòreÍCf!Cfå�QYÍûhÚ‡e!¸eåÍŒiÍÃg £8ÍûhÚ²e!ÁeåÍÅi!ÈeÍHgÁÑÍŒiÕÅ!ÇeÍgÁÑÍÃg!Ðeà g!áeͪgÃCf!åeÃHg׳]�€�b5ƒ~P$L~y©ª�ÛI�’ €�ÍÑjÈõüCfÍÁhñúCfÃkÍòjÊQfõÍkÊYfáÍÅiò!fÅÕÍÄhÑÁõÍûhá|ÍÝjÁÑÒ-f!CfåÌ>fÍÅiͽfÁÑÍOhÃ`f>¡OÉ!`~·È+>€®wÃk�QYÃÚjñúliÃk:`þˆÒ—fþhÚ�fÍÅiÍÁhÆ�ÁÑÊ—fõÍŒiͰg! fÍgÁJÃSh�QYÃÚjÍkú¸jÇj|ˆYtà—&wÄz^Pc|þu~r1€�ÍÚjâÇfÍU>Š>€2`¨õ!äfÍgñÍÅioŸgÍ)iÁÑÃNg Øî”‚©ª}„}™¿†{å(‡ŠqÀ‡n•‡² †­z… ��ƒëÍÅiÕÍèjÍOháÍgÁÑÃOhëÍÅië~õ#ÍÑjñÁÑ=ÈÕÅõåx±ÍLháÍòjåÍNgáÃ(gÍ;iÃKgÍòjÊk:`·ÊÚj�Ò^g/<ÍŒiþÒkõͰigñåÍEkñ·!`ò�g~ƒ_#~ŠW#~‰OÒ˜j#4ʇj.Í[kØj¯�G~›_#~šW#~™OÜxiÃÚiÍ;iígÍòjÊk>€©OÃNgÍ;iÃÀgÍòjÊliÍkȯ�GÍ¡hë"`ëy2`F¯o̓iÍŒi!Då*`:`‰OÒýg`ë4ëÑʇjÃhÑÍ%hg.å*`:`‰OÑz‹ÑÒþgÍ%hg.ÿå*`:`à hx<=ú˜�ÍEk|Ôªj{õ>˜2`ÍÚiñØ/<Éx±ÊkÃ!3Ã,ñóͱ!!ÍÀ"ÍY Í7#éÃWͱ!!ÞÍY ÍO" éÍ?# Í/" íGͱ!! ÍÔ"!ÞÍ5 !©ÍY ͱ!! ÍÔ"!ÞÍ5 !tÍY ͱ!! ÍÔ"!ÞÍ5 !tÍY ͱ!! ÍÔ"!ÞÍ5 !?ÍY ͱ!! ÍÔ"!ÞÍ5 !tÍY ͱ!! ÍÔ"!ÞÍ5 !tÍY ͱ!! ÍÔ"!ÞÍ5 !©ÍY Í7#éÃͱ!!ÞÍY ÍO" éÍ?# Í/" åÍ7#éÃ-ÍO"éÍ?#Í/"á&ͱ!!ÍÀ"ÍY ͱ!!ÍY ͱ!!ÆÍY ͱ!!„ÍY ͱ!!UÍY ͱ!!ÍY ͱ!!ÖÍY ͱ!!”ÍY ͱ!!|ÍY ͱ!!ÞÍY ͱ!!BÍY ͱ!!ÍY ͱ!!ÞÍY ͱ!!ÂÍY ͱ!!„ÍY ͱ!!GÍY ͱ!!ÍY ͱ!!ýÍY ͱ!!ÞÍY ͱ!!ÞÍY ÍJͱ!!ºÍY ͱ!!œÍY ͱ!!ÞÍY ͱ!!sÍY ͱ!!=ÍY ͱ!!ÍY ͱ!!ÔÍY ͱ!!œÍY ͱ!!hÍY ͱ!!3ÍY ͱ!!ýÍY ͱ!!ÙÍY ͱ!!¤ÍY ͱ!!}ÍY ͱ!!UÍY ͱ!!*ÍY ͱ!!ÍY ͱ!!ÞÍY ͱ!!ÞÍY ÍJͱ!!ÜÍY ͱ!!ªÍY ͱ!!ÞÍY ͱ!!tÍY ͱ!!KÍY ͱ!!$ÍY ͱ!!ãÍY ͱ!!ÎÍY ͱ!!ÞÍY ͱ!!“ÍY ͱ!!ÞÍY ͱ!!jÍY ͱ!!+ÍY ͱ!!ìÍY ͱ!!ªÍY ͱ!!kÍY ͱ!!0ÍY ͱ!!ÍY ͱ!!ÞÍY ͱ!!ãÍY ͱ!!ÞÍY ͱ!!ÞÍY ÍJͱ!!ÁÍY ͱ!!„ÍY ͱ!!IÍY ͱ!! ÍY ͱ!!÷ ÍY ͱ!!ÞÍY ͱ!!Î ÍY ͱ!!Œ ÍY ͱ!!R ÍY ͱ!! ÍY ͱ!!Ï ÍY ͱ!!‘ ÍY ͱ!!ÞÍY ͱ!!S ÍY ͱ!! ÍY ͱ!!ÞÍY ͱ!!! kåÍky/È!`®~ðÍi©É#~¸À+~¹À+~ºÀ+~“ÀááÉLUX)!�€"`ÜxiÃÚiëÍÅiëÍ)iÁÑÍŒiÉëz³Êliz·Büpi|¨G|µÈ|·ëüpiÅÍkñ·üpiëÉÍU>‰¯O“_yšWÉ!`~/w¯o�G}›_}šW}™OÉÍÅiÍÝjÁÑÉ|µÈë|µÈDM!>)ë)ëÒ«i =£iÉ!`~7w?##wy7O®É*`ãå*`ãéáã"`áã"`ÉajSXÍ!jʸjJS\E!`–Ò¸j/j³ÂGjÉejSXÃNjëÃNjch|·úcj{_zW}o|gÃOj"ù_ë"÷_xÉå!÷_·~w#ÂsjáÉÍljÂjÉ jÕÍU>ÿÿJ!`qÉx!`·üªjF#~怩OÃÚjÀÀ À€4ÀËjá¯go"`"`ÉåÍèjás#r#q#pÃújÍòjåÍÝjáÉÍújë"`ë`i"`É*`ë*`DMÉ^#V#N#F#x·Èyà k:`·È:`Ÿ·7ÀÆÉ|/G}/O!>õ·Ã,kõå Ò+kñ7>á{_zW}o|gñ=Â"k|·g}oÉÖÚTkCZQÃGkÆ o¯-ÈyOzW{_xGÃWk>ÿ§É|’À}“É+É!XJÃ¥aÍjIͰi+6¸!`>¸�Íæc¯2`É!TJýg!PJÃ¥a!!`Ã¥a~ƒ_#~ŠW#~‰OÉÍújÃKg!QÃHgÍûhÂ=I¯É‡Ÿ<ÀÖÉáÉo&͘HÃ)ië*`ãå*`ãåëÉÍmIë"``i"`ëÉ!`^#V#N#F#É!TJhg.å*`:`‰OÑz‹ÑÒþgÍ%hg.ÿå*`:`à hx<=ú˜�ÍEk|Ôªj{õ>˜2`ÍÚiñØ/<Éx±ÊkÞÍY ÍJͱ!!ü ÍY ͱ!!¼ ÍY ͱ!!{ ÍY ͱ!!7 ÍY ͱ!!ÞÍY ͱ!! ÍY ͱ!!Ë ÍY ͱ!!� ÍY ͱ!!} ÍY ͱ!!ÞÍY ͱ!!ÞÍY ÍJͱ!!Z ÍY ͱ!!( ÍY ͱ!!ú ÍY ͱ!!· ÍY ͱ!!� ÍY ͱ!!` ÍY ͱ!!! ÍY ͱ!!òÍY ͱ!!ËÍY ͱ!!�ÍY ͱ!!cÍY ͱ!!8ÍY ͱ!!ýÍY ͱ!!ÔÍY ͱ!!£ÍY ͱ!!iÍY ͱ!!>ÍY ͱ!!ÍY ͱ!!ÕÍY ͱ!!¹ÍY ͱ!!ÞÍY ͱ!!ÞÍY !•Í®!ÍÑ!†ÍÐÍ7!gÍ®!ÍÑͱ!!ÍÀ"ÍY ÉÍ7jENTER 'RETURN' TO CONTINUE. ‰STARTREK.BAS!˜ENTER 'RETURN' TO START THE GAME.¼ GALACTIC REGIONS.:Ø THIS OPTION PRINTS THE NAMES OF THE SIXTEEN MAJOR ) OPTION 5 = GALACTIC REGION NAME MAP:(A DIRECTION/DISTANCE CALCULATIONS.7l THIS OPTION ALLOWS YOU TO ENTER COORDINATES FOR.¦ OPTION 4 = DIRECTION/DISTANCE CALCULATOR:&× STARBASE WITHIN YOUR QUADRANT.8 THIS OPTION GIVES DIRECTION AND DISTANCE TO ANY (; OPTION 3 = STARBASE NAVGATION DATA:)f TO ALL KLINGONS IN YOUR QUADRANT.9’ GIVES DIRECTIONS AND DISTANCE FROM THE ENTERPRISE$Î OPTION 2 = PHOTON TORPEDO DATA:,õ ANDå STARBASES REMAINING IN THE GAME.<$ THIS OPTION SHOWS THE NUMBER OF KLINGONS, STARDATES,c OPTION 1 = STATUS REPORT:3„ PREVIOUS SHORT AND LONG RANGE SENSOR SCANS.@º THIS OPTION SHOWES COMPUTER MEMORY OF THE RESULTS OF ALL+ý OPTION 0 = CUMULATIVE GALACTIC RECORD:/+ THE LIBRARY-COMPUTER CONTAINS SIX OPTIONS: ] \COM\ COMMAND = LIBRARY-COMPUTER € DAMAGED.;� 'STATE OF REPAIR' SHOWS THAT THE DEVICE IS TEMPORARILY@Î GIVES THE STATE OF REPAIR OF ALL DEVICES. WHERE A NEGATIVE& \DAM\ COMMAND = DAMMAGE CONTROL REPORTA: THAT THE STATUS DISPLAY TOTAL ENERGY INCLUDES SHIELD ENERGY.>~ SHIELDS. ENERGY IS TAKEN FROM TOTAL SHIP'S ENERGY. NOTE=¿ DEFINES THE NUMBER OF ENERGY UNITS TO BE ASSIGNED TO THEÿ \SHE\ COMMAND = SHIELD CONTROL3 COMPUTE TORPEDO TRAJECTORY FOR YOU (OPTION 2).;V THE LIBRARY-COMPUTER (\COM\ COMMAND) HAS AN OPTION TO ;” THE PHASER FIRE OF ALL OTHER KLINGONS IN THE QUADRANT.?Ò HIS PHASER FIRE. IN EITHER CASE, YOU AREPLANETS.< KLINGON WARWHIPS WHICH ARE MENACING THE UNITED FEDERATION OF:JENTERPRISE; YOUR MISSION: TO SEEK AND DESTROY THE FLEET OF;‡GALAXY TO BEGIN A TOUR OF DUTY AS COMMANDER OF THE STARSHIP;Å YOU WILL BE ASSIGNED A STARTING POINT SOMEWHERE IN THE?AND EACH QUADRANT IS FURTHER DIVIDED INTO AN 8 X 8 SECTOR GRID.7E THE GALAXY IS DIVIDED INTO AN 8 X 8 QUADRANT GRID, WILL BE ABORTED.?— TYPE IN ILLEGAL DATA (LIKE NEGATIVE NUMBERS), THAT COMMAND=Ù 'NAV' COMMAND COMES BACK WITH 'COURSE (1-9) ?'.) IF YOU<3. SOME COMMANDS REQUIRE YOU TO ENTER DATA (FOR EXAMPLE, THE,X LIST OF THE LEGAL COMMANDS PRINTED OUT.?‡2. IF YOU SHOULD TYPE IN AN ILLEGAL COMMAND, YOU'LL GET A SHORT8É COMMANDS (NAV,SRS,LRS,PHA,TOR,SHE,DAM,COM, OR XXX).;1. WHEN YOU SEE \COMMAND ?\ PRINTED, ENTER ONE OF THE LEGAL2B* * * SUPER STAR TREK INSTRUCTIONS * * *2w* *2¬**************************************************áz‹@ƒ�`ƒ[[[[ BASLIB  ALSO SUBJECT TO > CANNOT FIRE BACK AT YOU. IF YOU MISS, YOU ARE SUBJECT TO7U IF YOU HIT THE KLINGON VESSEL, HE IS DESTROYED AND?� TORPEDO COURSE IS THE SAME AS USED IN WARP ENGINE CONTROL.&Ñ \TOR\ COMMAND = PHOTON TORPEDO CONTROLú PHASERS TOO!): DEPLETE THEIR SHIELD POWER. (REMEMBER, KLINGONS HAVE8L ZAPPING THEM WITH SUITABLY LARGE UNITS OF ENERGY TO:‡ ALLOWS YOU TO DESTROY THE KLINGON BATTLE CRUISERS BY Ä\PHA\ COMMAND = PHASER CONTROL.9æ EXAMPLE - 207 = 2 KLINGONS, NO STARBASES, & 7 STARS." KLINGONS.83 STARBASES, AND THE HUNDRESDS DIGIT IS THE NUMBER OFæ >B< = FEDERATION S#500240 5.2 - OWNED BY MICROSOFT, 1979 ¯<Ã9¯Ã9Ê…;ÃJ<þDM*ùÅÿ"ž#*Û&##"œ#û>Ã2023*^#Vë"1ë##^#Vë"4 Í26·!Ê„!!""7!µ"²6#6P>„2¹>2¸>ÿ2·ÉÅÕåÍ0·ÃÉÅÕåÍ3ÃÉÅÿÃÀÅÿÕåõ _ÍñáÑÁÉÃÍ“Í�4Úä!ö16C#6O#6M!\>!Í!?í1!\> Í>Í‘7]1Í\Í<ÊD;!9%.6>AÍ>.å2·Ê.otÃ#!É#&ÕÕëÕÍ\ÍÑ·À!€>¼Â/ ÍÃ*OUT OF MEMORY* $=áÉå*²å!µ"²ͳ<á"²áÉ> ͳ<> ó<> ͼ> ͼ*±<éÅÃ~=Å ë GÍ—= Áá!9"*1ë*+·ÊÓë!ë6#}»ÂÓ|ºÂÓ6!…6#z³Âæ*/|µÊ> T6Ã#s#r#=Âü>Û2y>Ó2|>É2{2~"�!Í"ŒÍRÖ&Íë& STOÐÍÃ7͉*Œéé.. . ........͆%ë*š|µÂ>:—§Â§*•|µÊ§ÕÍŒë*+ s#rÑ*+ {w#6á"˜*ù*•>2—é͉Íë&Error - !Ô~<ÊÍ=»ÊÍ#~§#òÄù#Íñ&Ã1Syntax Error in DATÁRETURN without GOSU Type MismatcèOut of DatáIllegal Function CalìOverflo÷Out of Memorù Subscript Out of Rangå Division By ZerïOut of String SpacåString Formula Too CompleøRESUME without Erroò2Field Overflo÷3Internal Erroò4Bad File Numbeò5File Not Founä6Bad File Modå7FilTARBASE (REFUEL/REPAIR/RE-ARM HERE!)$' +K+ = KLINGON BATTLE CRUISER&N = YOUR STARSHIP'S POSITION3w SYMBOLOGY ON YOUR SENSOR SCREEN IS AS FOLLOWS:/­ SHOWS YOU A SCAN OF YOUR PRESENT QUADRANT.'ß\SRS\ COMMAND = SHORT RANGE SENSOR SCAN!  USE COURSE 3, WARP FACTOR 1.(- FROM QUADRANT 6,5 TO 5,5, YOU WOULD%X ONE QUADTANT. THEREFORE, TO GET$€ ONE WARP FACTOR IS THE SIZE OF 2§ COURSE!Ü ITSELF IS EQUIVALENT TO 1.0.3 VALUES MAY APPROACH 9.0, WHICH 6 7 826 . . .1k WAY BETWEEN 1 AND 2). ...5Ÿ USED. (THUS COURSE 1.5 IS HALF- 5 ---- 11× INTEGER AND REAL VALUES MAY BE ...2  VECTOR ARRANGEMENT AS SHOWN. . . .3@ COURSE IS IN A CIRCULAR NUMERICAL 4 3 2&v\NAV\ COMMAND = WARP ENGINE CONTROL --ŸOF THE STARSHIP ENTERPRISE:@½ YOU HAVE THE FOLLOWING COMMANDS AVAILABLE TO YOU AS CAPTAINe Already Opeî9Disk I/O Erroò:File Already Existó=Disk Fulì>Input Past Enä?Bad Record Numbeò@Bad File NamåCToo Many FileóÿUnprintable ErroòÅ!9N#F*%Õ~‘#~˜Ò½~+¶ÊÃ~“#~šÚ½+^#V#ñå##Û###Ûá|µÊÏ~#foÁÉ!ÿÿ×ÁÉÍë& Internal Error - No Line Number ŠÃÍ*%~#¶ÊkÍë& at line ÍŒÍÉë>õÍR<Ú7ÍKñÖÂ!õÍR<Ú7Æ0ÍG=ÍKñÖÒ3É}“_|šWÉ!aÍý=~#foë>ÿÉÿÿöÿœÿüðØÍë& at address áã|Í"}Í"ãåÉ> ÍG=> ÃG=å!9"wáÉÑ*wùëé€Àã~2­#ãÕ~#^#VëÍÝ&ë++Í|%ÑÍ^;Ú(:ô·ÉÍ“ÅÕå*Š|µÂð!ôÍ\%Ík%ÑÍ{"ëÑÁÉ*¤éÛB:?2 ?x!? ?·ò)BÍBÒáAë4ÍC: ?·üõA!?~æ€++®wÃ¥H! ?4À#ÂúA4Ê$A+6€É!? ?¯Ž# ÂBɯž# ÂBÉÍBÒBB/! ?¯Oyžw#Â:B¯G:?·ÂkB! ?Vwz# ÂPBxÖþÀÂCBÃ\H! ?Í~B·òcBx·ÊáA!?†wÒ\HÃáA~w# €BÉåÍA@áÍuHÍCßBåÍA@áÍC!?Ã’AåÍA@áÍuHÍCûBåÍA@áÍCÍ$@!?Â͓Íb ÃC!Í“Ím ÃC!Í“Íx ÃC!Í“Í8 ÃC!Í“Íb Ã`!Í“Ím Ã`!Í“Íx Ã`!Í“ÍÊ Ãn!Í“Íb Ã!Í“Ím Ã!Í“Íx Ã!Í“ÍÊ Ã!ÅÕå?à ÅÕå ?à "?ÅÕåÃŒ H~# „ x2$':­§Â:!Í !¹ Í+Í\%<Íz!~§Êµ ͳ<#é áÑÁÉÍ+~§Êµ þ ij<#ü >2$':­§ÅÕåÂ:!F#~#foxÍ !Ìz!Í!Êø ~#ͳ<Ãì Í!áÑÁÃ|ò )|/g}/oÃ)!W1å:?þ�Ò&)Ía(ëÑ"?>2$'É€�Í(ÀajÃ) „ÍÌÌÌÌÌL}ÍT'Íz'ö¯B1Åõ>2ý&ñëÿ`hÌ)ë~þ&Ê•0þ-õÊt)þ+Êt)+Í`0Ú[*þ.Ê*þeʆ)þE°)åÍ`0þlÊž)þLÊž)þqÊž)þQáʯ):$'þÊÉ)>ÃÉ)~þ%Ê*þ#Ê*þ!Ê *þdÊÉ)þDÂà)·Í)*Í`0Í‹0Í`0ÚÎ*Âà)¯“_å{�_ô8*üH*Âä)áñåÌ+'áÍz0èå!)(åÍ&)ÉÍz0 Âà)Ü)*Ãt)Í`0ñå!)(å!¾(åõÃà)·Í)*Í`0Ãà)åÕÅõÌY'ñÄp'ÁÑáÉÈõÍz0õä[(ñìö'ñ=ÉÕåõÍz0õäð'ñìÓ'ñáÑ<ÉÕx‰GÅå~Ö0õÍz0ò”**?Í ÍË'Ò�*T])))ñO |·úŽ*"?áÁÑÃt)yõÍg'7Ò°*t”$Í(ò­*Í[(ñÍÃ*È*Íw'Íö'Íš(ñÍ+(Íw'Ͱ'È*Í4(Í+(ÁÑÃ({þ ÒÝ*ƒ†Ö0_úÃÓ)·Ã+ñå!?Íz0â÷*:?Ãø*y®áÃ+:?Ã+ñññ:?Ã+ñ:?/Ã+ÃW1¯Í£+æÊ%+6+ëͬ(ëò7+6-ÅåÍ+'áÁ´#60:''W:$'ÚÈ,ÊÀ,þÒ¬+Í«/!'F :''_æ Êp+x¹*Âp+{æÂp+AqÍ`0Ê�+þEÊ�+þDÊ�+þ0Êp+þ,Êp+þ.“++60{æÊœ++6${æÀ+pÉ2''!'6 ÉÍ4(ë* ?å*?åëõ¯2ÿ&ñõÍW,Eå~¸Êø+þ:ÒØ+þ0ÚØ+ #~·ÂÉ+>D¸GáÂÇ+ñÁÑë" ?`i"?ëÁÑÉÅ#~þ+Ê?,þ-Ê,Ö0Ox‡‡€‡�GþÒ?,#~·Âý+`ÁxþEÂ4,y„þ áÒè+>€2ÿ&ÃD,|�þáÒè+Ã,,ÁáÃè+ñÁÑë" ?`i"?ëÁÑÍD(#þåÞWÍM.õ:ÿ&·òr,ñ‚Ã|,ñ‚ú€,ºÒ€,ÖáõÍì.60ÌY(Í/+~þ0Ê�,þ.ÄY(ñÊÁ,õÍz0>"�w#ñ6+ò²,6-/</Ö Ò´,Æ:#p#w#6ë!'É#ÅþzÒB-Úß-Íä.ÑzÖôÀ.Í«/{·ÌÑ'=ôÀ.åÍS+áÊ÷,p#6!'#:%'%Í !È>"ó<ÅG:±§xÁÉÍ !Ê[=å*²+~<Ê6!=Ê6!###~þÂ6!å*¨ãÉáÃ[=ë!µ å*®éå*²~á=ÖÒJ!/<Íz!ÈõÍi!ñ=ÃV!Ín!À:­·À> ó<Í !È>,ͳ<öÉåÕÅW*²#^ Ì�!Ê—!+†=»Ú—!Í[=zÁÑá§Éõ{ÿÖÚ¯!õ{Æ_ñá!ñÉå!µ"²!"Н2­ÍÇ!áÉ!°~6#wÉá~!ç!Íü!NÊÞ!ÿÍ�i&Ã_Љ ‹ÅG~#¸Ê "§#Âþ!++´ÁÉõÍ"ñæÆ0þ:Ú""ÆÃG=>Ã@">Ã@">Ã@">Ã@">Ã@">ãÕ^#V#Õ^#V#ãÃs=ãÕÅÍÜ=^#V#åëÍ“ÍEáÁÑãÉãÕÅÃU"ãÕÅ^#åÍÑ=Ã["Í“ÅÍE%Ôµ"ë~#¶#¶++Äü%Õ>Í>+V+^+ë·Ê¨"+r+sáÍF&ÁÉáÁÉÍ“ÕëÍ{"ÑÉ~#Õ^#VëÑÃk%Í“|§ÂTå!9>Ík%ñÉÕå+Í!#ë*²{<–Òè"Í[={·Ê÷"=õ> ͳ<ñÃè"áÑÉ|·ÂTÕå}*²–Ú÷"<Ãè"ÕåÍ!#}Ãè"|·ÂTÕå}Ãè"|·ò)#!Õë*²#n&Íd#ÑÉãÕÍÜ=ÑãÉãÕ^#V#åë?Íì=áÑãÉëãÕ^#V#ãÍ“Íq#ëáãëÉÍ“ÕëÍq#ÑÉÍ“ÅÕz³Ê‹#|µÊ‹#|·õÕëÍGáñü/GëÑÁÉëãÕ^#VãëÃY#¨xòxFÆ¢#¥#w¨#G«#É®#ú±#ô#Í·#xº#{½#HÀ#?Ã#ÍÆ#wÉ#žÌ#³FÅÕ_!™#4Âß#5*š#"š#~#N#F#‡Ú$úù# Íý=Ãâ#y“xšÒ$ Ãâ#å+++6@#y“w#xšwáÑÁ+++6###É!™#~6þÚ0$ÍE$Ãß#Í�$*š##~“#~šÒß#Í�ÃKÕ!å*œ#"š#~#^#V#‡ÚŒ$úk$Íý=ÑÕÃR$ã|µÂw$áåÃR$ñ++~ƒ_w#~ŠWw#åÃR$ÑÑÉÕÍE$*œ#DM~#^#V#‡Úé$ò©$Ø$+z¾Ä¯%+{¾Ä¯%##¯{zë~#q#pë_§Ê˜$y½ÂÞ$x¼ÂÞ$DMØ$~#ÂÞ$Ø$YP+++ë"š#6@###{•_zœW+r+•’È~þ Êü,þ*Êü,+åõ-ÅÍ`0þ-Èþ+Èþ$ÈÁþ0Â:-#Í`0Ò:-++wñÊ0-ÁÃý,ñÊ:-á6%ÉåÚæ-Ê^-0Ͷ'úl-áÁÍ++6%ɶÊÍ(òU-Í~(ÄM.áÁú‘-Å_x’“ôÀ.Í×.Í/³ÄÐ.³Äÿ.ÑÃä,_y·ÄF*ƒúœ-¯ÅõüH*úž-Á{�Á_‚xúº-’“ôÀ.ÅÍ×.ÃË-ÍÀ.yÍ/O¯’“ÍÀ.ÅGOÍ/Á±ÂÖ-*%'ƒ=ôÀ.PÃí,åÕÍg'ѯÊì-Í~(7ÄM.áÁõy·õÄF*€OzæþŸW�O“õÅüH*ú .ÁñÅõú.¯/<€<‚GÍ/ñôÉ.Íÿ.ÁñÂ=.ÍÑ'~þ.ÄY("%'ñÚD.ƒ�’ÅÍŸ,ëÑÃí,Õ¯õÍz0âq.:?þ‘Òq.â/!?͇(Íü'ñÖ õÃV.Í£.Íz0ê†.C‘ùOÍ(ÃŒ.ê/Ͷ'òŸ.ñÍ9*õÃt.ñÍH*õÍ£.ñ·ÑÉÍz0êµ.t”ø#Í(û.ò/Ͷ'áò—.é·È=60#ÃÁ.ÂÐ.ÈÍÿ.60#=ÃÌ.{‚ Íÿ.ÅõåÕ/áå>žÍ�'ÒŽÍ�'ëáp#ñÁ=Â3/Åå! ?ÍA(Ão/ÅåÍ(>Ía(ÍD(áÁ¯P0?Íÿ.ÅõåÕÍO(á/{–_#zžW#yžO++Òƒ/Í(#ÍD(ëáp#ñÁÚu/>ñ/ÕV0>Íÿ.ÅõåëN#FÅ#ãë*?/}“o|šgÒÄ/"?Ñáp#ñÁ=±/Íÿ.wÑÉù¢áÿŸ1©_c²þÿ¿É¶€¿É¶€Æ¤~�@zóZ rN ¥ÔèèvHä TÊš;áõ€–˜@B †''èd #~þ:Ðþ Ê`0þ Ê`0þ Ê`0þ0?<=É:$'þÒ‡0Ö·7ÉÖ·Éþ-Èþ+È+ÉÍ`0Í1þOʦ0þHʦ0+Ͳ0Ú»0ëÍ)ëÉþH#Êç0ÃÁ0Í�ÃQÅMë!ÍÓ0ëÚÑ0}‘§ÁÉÖ0?ÐþÐ)Ø)Ø)صoÃÓ0ÅMë!Íù0ëÚ÷0}‘§ÁÉÍ1Ö0?sÑÉ·Ê8%õ* #|µÂ%Í�ÃNñõåÍÏ#ã^#V+ë" #áñëw#s#r++ë+r+s##ëÉ!?%D%ÉÕë*×&{•zœ*Ù&ë?ÒZ%}“|šÑÉåÅÿ~# §Â`%yÁáÉÅÕGåÍ%ãxëÍ>áÑÁÉÍE%ÐÍü%ÃF&ÅÕå*×&ë*Ù&ëÍ>Ê«%Í&Ê¥%Íü%åÍF&á###ÃŒ%áÑÁÉÍÑ%Íë& during G.C. ŠÃÍÍÑ%Íë& ŠÃÍÍë& Internal Error - String Space CorrupôÉ#ÅN#Få*œ#y•xœÚA&*ž#y•xœÒA&áÕ++å`i+V+^áÍ>ÂÆ%##Ñ6+6+~6  >@¯ÁÉá++ÁÉÕë* #ë" #s#r+ÑÉÕÅÍ�$Á*š##~‘_#~˜WÒo&Í�ÃZr+s##6€"ž####ÑÉë! #~#fo´Ê“&Í>ƒ&ëÉ<ëÉ*œ#"š#ë*ž#}“o|šgë6@#s#r#6€"ž#*Ù&ë*×&" #}Æw>Œ#w##Í>¾&++6+6É¢#Ï# I§Èõ~ÍG=ñ#=Âß&ÉãÍñ&ãÉ~æÍG=¾#ÀÃñ&CJÒ$J#4Ê%T.ÍyJÃ$J¯�G~›_#~šW#~™OÜOJhc¯Gy·ÂJJTÍz0òL'*?}/o|/g#"?|ÀÍ}'ÍèFÃL'!?~î€wɯ2?ÉÍz0àúg'Í8CÍ}'É*?Í}'ÃèFÍz0Ðüg'ÍC>>Ã")~·È͵#Â'õ'!?à'>Ž!? ?2§'¯Ž# ¦'É!?Ã’A!?͇(Í*?>È>ÚÉ'>ÿ§É|’À}“É+É!=)Ú@ÍO(ÍTG+6¸!?>¸�ÍÛB¯2 ?É!9)Ã|E!5)Ú@!?Ú@~ƒ_#~ŠW#~‰OÉÍžHà E!þ/ÃEͺFÂ"(¯É‡Ÿ<ÀÖÉáÉo&Í}'ÃèFë*?ãå*?ãåëÉÍR(ë"?`i"?ëÉ!?^#V#N#F#É!9)ÃFÍŒHxþ˜{Ò�H!?6€ÍaGwg>˜�ÍéHÉÃ¥HË(ë:$'Gw#‹(Ɇ(à(!?‡(Õ?Íz0Ø ?ÉÍz0ò~(*?|µÈ|ŸÀ<ÉÍz0*?øâÚ(Íš(!ú/Í”(Ͱ'Í`'ÃÝ(Í(:?·õæ2?:?þ�ÒW1Ía(:?·Âþ(ñëÃ)ñëÐþ Ú1Ö?ÐþÐÆ )Ø)Ø)Ø)صoÃù0þaØþ{ÐÖ É¾(ÅÍz0ø:?þ�À:?·ø€‘Ã(õ:ý&2þ&ñõ¯2ý&ñÉÍ�ÃQÍ�ÃQÃZTyÃSTåÕ!¥ÖTÍDL:ÖT2§ÍýâNT:«ÃQT:µÑá!Ä"ÆåÅÕõõ*À|µÂ‹T:·ÊxTþ‹T>2Â*ÆÍN2Ã> Í`> Í`ñ!©ÒTÒ˜TÖTÍDLÍýâªT!¥ÖTÍDL*À|µÊÇT*ÆÅÍÿ!Å"ÆÊHúñ!Å"ÆÑÁáÉÿÿÿÿÿÿÿ€!€6Í“ÅÕ}Íæ7Ê5;þÊ2;!' ~·ÊT2 þÊT2#~·ÂI2Å`iÍ04ÁÃ*2>€–O #~ÖÖŸgoÑÁÉPY!' ůwÍd4:8Í*7þÿÊP;=ÊJ;=ˆ2ѯÍÃ;;<ÊP;Á!% ^#Vr+sÉÍ“}§Ê‘7ÅÕå!"2áå}Íæ7ÊÝ2Å PYÕþÂÓ2!Ê2åå`i>Ã,3!' ~·Ä_2ÑÍd4ÍÁÍ„8áÑÁÉÍ“ÅÕ}Íæ7Ê5;þ!&Âû2!® ~+ngÑÁÉÍ“ÅÕ}Íæ7Ê5;! n&ÑÁÉáñåõ*Š~þÊ/;þÊD:ñÕÅDMõ'~þ€åÌ\2á4N#ñõVþ pÊP3Æàzˆw ñÁÑwáÉ+s#r#6€#6€áãDMå:6·Ê{3!" s#r#6ÃÀ3! {zVºÊ¸3ÕõåÅ]1ÍÑÕÍÑáñwÕÕÍÑ<¶3Í<ÊP;ÁÑ!! {æwá:;·ÂÍ3Í04áÉ!! ~þõ]1!) ÕåÌî3Í\2ÑáñÌî3áÃ&;Å€~#Âñ3ÁÉÅå*Š~þÊr:( ~·Ê4+~#5–O ~·áÁÉ+~·Ê'4Í-4Âý37áÁ>É*ŠÕT]% N#F+q#p##å€#6 ÂE4Íd4:7Í*7·>Â]4>€áw+w·ÑÉÅÕå!(ëÍáÑÁÉÍû3Øþ7?ÀÅå*Š' 6#67áÁÉå~·ÊM;õ#^#fk_þÚ­4N#~þ:ʱ4++@ÊM;yÖ@ÚM;þÒM;í1 #ú5~þ.ÂÛ4Íî4ñ7õÃÇ4#ÂÈ4¯2ù1ñáõÍ|%ñÉzþ ÊM;þÚM;È> Ã͵ÁÃú<ÁñÉ:�§Â#=<2�å*Œ"± ͳ<~=æÂ9=áÉå*²å!µ"²ͳ<á"²áÉ> ͳ<> ó<> ͼ> ͼ*±<éÅÃ~=Å ë GÍ—= ÁáÊ’=~#foÔ=##ÑãÉÍ¡=>ØÈɧ®=~§È+~?É~§Â¹=öÉ+®#øÒÆ=ë–À+ òÆ=¯Éë&)))ýÉ^#V#å!?Íì=áÉÍì=w#w#w#w#É…oÐ$ɧÈÅGw#Â>ÁÉ{­Àz¬Éë`:²i¼7È~þPÚË`þ€ÒË`#{¾#~++ÂË`ºÂË`Éå!µiaå!¸i~4®>üa~#¾ÚawáÉ^#VëT]##~æ À#~#¶Àë#V#~æÂGazÍU,OëÍ’'ë#s#rÉå~#fo~þÚ`a>áÉÕå!¡iWæ‡ÍïGzë!™iæ‡ÍïG¾Â„a#¾áÑÉ!.åõÍÕcë*­i&ñ§ÊÀaþÊ«a)þÊÀa#ÃÀa))þÊÀa#þÊÀa#þÊÀa#)å*®i&)îc~#fo###ÑÑ{§ÂßaÍHbÍ>2Ã=bÅÕOæë*6#ÖÒ?ÉÍMC?·ÊY?Í¥HOÊ^?!­Hå!?®yø#–ÂV?+ÂI?ÁÉ©ÉÍ¥H?ÉíHåÍA@áÍuHÍCÃw?åÍA@áÍCÍ$@!?ÍMCÊã?:?·Ê¥H:?/qAE>!?ÍB™?Úº?E>!?ÍB¯Ú:?<=úáA! ?Í€B!E>Í~Bx·Â ?!?5 ?Ã$AÍÐ!‰!?N#FÍTG®+6¸õü@!?>¸�ÍÛBñüõA¯2 ?: ?õÍBBÍ¥HÁxð/<É! ?~5·#Ê@É ?!?Nwy#Â,@Ã¥H ?ëÃPC! ?ÃMC!?ÃdCÍD!Dãé!?Ã^@!?>ÑF+N+Å=Âa@ëé!?Ãu@! ?>ÑÁq#p#=Âx@ëé! ?Ú@á"D>Íl@Í[@ÍG@*D>éÍMCÊ\H:?·Ê\H!?N#FÍ`FÍÄBq·ÕÊ×@ÅGÜ BÍCxÁ ÂÀ@Ñ·@ÃBB!?ÍãBÃÏ@²jöô¢0 TeÂB׳]�Âh!¢ÚI�.›kÁ‘ €î4Êâ4> Â5Ãâ4Í“ÅÕåëÍ�4]1Íí1Í<ÊD;!Ý1í1> Í>áåÍ�4:í1!Ý1¾ÂS;í1Í<Â>;Ý1ÍáÑÁÉÕÅ*2~·Ê2;#N#F++Í|% æßþOÊ›5þIÊ›5þRÂ2;*2|µÂ›5!€"2áÕ}Ñ_ÕÍæ7®5Í„8{Íæ7ÂA;ÑzáÅÕÍ�4ÑÁÅõ ÍÀ8ñá"Šå#í1> Í>66ÑÕÍd4áå~þÂú5ÕÍÑÍ<ÊP;Ã6Í<Â6ÑÕþÂD;Ãî5ÑÕ!%¯w#w#w#wá~þÊ+6þÀÍ-4É) €p# Â16ÉåÕÅÍ‘7Íõ Íñ_ÍÁÑáÉÍ“ÅÕåÍ�4]1Íí1ÕÍ<ÑÕõÄñÑÊD;ÍáÑÁÉÍ“ÅÕå!í16# Í"7â6Í“ÅÕåÍ�4¯2ù1!î1Í7!ö1Í7]1Íí1ÍþÿÊD;懇‡‡‡O!^1  ~#Í€.Í€< ÂÛ6:µÆ W:¶ºÚ 7> Í€<Í€<Ü}<í1ÍþÿÂË6áÑÁÉ~þ*À6?# Â"7ÉÕOÅÍÁÑõ!!4ÂB7#4ÂB7#4yþ"ÂW7ñ·ÈþÊP;þ>È<ÉñÉ"2>2�å!­:"‘á:ާÀ<2Žå*Œ"2!¥7"ŒáÉÍ“"2åÕÅÍb5ÁÑáÉå*ž|µÊ£7##nÍ¡2Ã’7áÉ.Íœ2*2éÍ“öú7Í“¯22ÅÕåÂâ8"2ëÃâ8Í“öÃÖ7Í“¯22ÅÕåÂã8"2ëÃã8§Ê5;<Ê5;=_å!ž~#fo´Ê 8##{¾Ê 8++Ãö7*žåÍ)8"žÁq#p#s#4#5++###DM §áÉÅÕ! "2~#fo´Êb8+V+^##å*2{•zœáÚ.8BK^#V+å*2s#r!¹ DMáÃt8¹*2å DMÍU&Ñs#r#å 6# x±Âw8áÑÁÉÅÕå !žT]~#fo´Ê5;x¼Â�8y½Â�8~#~+ë* ë" s#ráÑÁÉå·! [5>þÀ*2Õ€|µÊÐ8ë!© s#r¯#wÂÚ8ÑÉö¯2¿8}Íæ7þÂ2;Å!­ ^#Vå:2§Â�åÍA@áÍuHÍCÃAåÍA@áÍC!?Ú@ÍÐ!!?ÿq#~æ€ö++w+qÂ9AÃ¥H€DNnƒù"~€‚`Þù3ó5�zÏÑ÷r1{ÏÑ÷r1€Àh!¢ÚI‚ÍMCÊ¥Hyî€O2?ØAÍMCÊ¥H:?·Ê$@�ÒªA/<õÍ$@ñþ9Ò¥Hõ:?OÍTGG¯2?ñ!?ÍÛB:?2 ?x!? ?·ò)BÍBÒáAë4ÍC: ?·üõA!?~æ€++®wÃ¥H! ?4À#ÂúA4Ê$A+6€É!? ?¯Ž# ÂBɯž# ÂBÉÍBÒBB/! ?¯Oyžw#Â:B¯G:?·ÂkB! ?Vwz# ÂPBxÖþÀÂCBÃ\H! ?Í~B·òcBx·ÊáA!?†wÒ\HÃáA~w# €BÉåÍA@áÍuHÍCßBåÍA@áÍC!?Ã’AåÍA@áÍuHÍCûBåÍA@áÍCÍ$@!?ÂAy2?!?K>~q+ÂÑBÉqåÖÚòBáåNsY+ÂçBÃÝBÆ W¯áÈå~w+ÂüBÃõB!?ÃùBÍèFÃCÍuH¯! ?w#ÂCÃ¥HÍ/C}ÉÍdCÍ8CÃjCÍdCÍTG!?F#^#V#NÃ�¸Ê¡CÒCÍÐ!�ÍžHͯCÍŒHëÈë!?6€ÍaGg>˜�ÍéH|Ô=GëÉ>€©²³ÂyCakÉÍuHÈõüDÍ€FñúDÃ¥HÍ–HÊDõÍ¥HÊDáÍiGòàCÅÕ̓FÑÁõͺFá|Í�HÁÑÒìC!DåÌýCÍiGÍ|DÁÑÍFÃD>¡OÉ!?~·È+>€®wÃ¥H�QYÃ~Hñú+GÃ¥H:?þˆÒVDþhÚNDÍiGÍ€FÆ�ÁÑÊVDõÍKGÍoE!_DÍÜDÁJÃF�QYÃ~HÍ¥Hú\HÃ+H|ˆYtà—&wÄz^Pc|þu~r1€�Í~Hâ†DÍÐ!Š>€2?¨õ!£DÍÜDñÍiGoŸgÍèFÁÑà E Øî”‚©ª}„}™¿†{å(‡ŠqÀ‡n•‡² †­z… ��ƒëÍiGÕÍŒHÍFáÍÜDÁÑÃFëÍiGë~õ#ÍuHñÁÑ=ÈÕÅõåx±Í FáÍ–HåÍ EáÃç9*2ëá{²Ê8;+s#rÁÅ!° ¯w#w!© ~#foëÕå!€Í ;áÂ59Ãs9BK>ë!å)ãÒH9)#ÃI9)ãë)ëÒW9 ãÒV9#ã=Â>9}æ_Á}la)ÚS;Òn9#x·ÂS;"¹8áÁå!² "»8!) "½8áå!€}“o|šgÑÕÍ ;Ú�9bk:¿8·Êã9€Í ;Ò²9åÍ:áÅDM*½8ë*»8Í7:"»8PYÁÍÿ9á}“o|šgµå*¹8#"¹8€9ááÑÁÉåÍ:áÅDM*»8ë*½8Í7:ë"»8PYÁÃÈ9ö¯2;ÅÕå*¹8ë!« å~#foÍ ;ás#rÂ&::;·Ê3:!3:åÅå!& ÃW3áÑÁÉÅ~# x±Â8:ÁÉñÕÅõDMÍ :ÊG;Í•:!± ñwõ!( V6þ Êm:ÆàzÎwñÁÑáÉÕÍž:ÊG;Í•:!± ~·ÑáÁÉ!©Ã�:!° ^#VÉ!° s#rÉDMÍ�:Õ͇:ëÑÍ ;ÉÅÕ}Íæ7Ê5;þÊÀ:þÂ2;`i"Š!Ð:"“ÑÁÃý:Íu4ÐÍ�!>Ã_Í“|²ÂT,Ê÷:-:�·Ê5;å*‘ãÉ!¬"“ÅÕ{Í%åf$%Ê;Õå!;å*“éáÑÃ;áÑÁÉï|’À}“Éå!"ŠáÉñáÉ>6>4>?>=>:>7>5>2>3>@>C>Í�o&Ã_åÕÅ!"Š!ô"ôÍt;ÁÑáÉ:­æÂ…;Íë&? Ã…;pÍ«<ù;:|<·>\2|<Ÿ;Ê„;Í€<+ʳ;~Í€<ÃÇ;+Í€<ÂÇ;Í€<Í}\Í€<¯2| Í€<>ì;þÂ,<>#ó;þÂE<ÅÕå6Í}ÊU Í€<Í«<·Êb<þ ÊÇ;ÃÊ;:­æÌ}<¯wÉ~ÉÃG=õ>^Í€<ñõö@Í€<Í}<ñÉ~§Èþ ¤<õ> Í€<ñÍ€<#Õ<ͬæÉœå*²þ ÊÊ<õ#~+<ÊÉ<=–Ü[=ñõþ Ì2=þÌ5=þ ÚÛ<4+~#<Ê ==Â.=ñþ Ê9=á͵þ ÀõÅ:ºGÊ=¯ÅDÍúFà EÍ–HÊ¥H:?·Ê~H�ÒE/<ÍKGþÒ¥HõÍTGgñåÍéHñ·!?òOE~ƒ_#~ŠW#~‰OÒ€©Oà EÍúFÃEÍ–HÊ+GÍ¥Hȯ�GÍ`Fë"ù>ëy2û>F¯oÍBGÍKG!Då*?:?‰OÒ¼E?ë4ëÑÊ+HÃÔEÑÍäEg.å*ù>:û>‰OÑz‹ÑÒ½EÍäEg.ÿå*?:?ÃÊEx<=úûE{_zWxG)yOŸëãéHGáØ�ÍéH|ÔNH{õ>˜2?Í~GñØ/<Éx±Ê¥H!­HåÍ¥Hy/È!?®~ðÍÕF©É#~¸À+~¹À+~ºÀ+~“ÀááÉLUX)!�€"?Ü7GÃ~GëÍiGëÍèFÁÑÍKGÉëz³Ê+Gz·Bü/G|¨G|µÈ|·ëü/GÅ͵Hñ·ü/GëÉÍÐ!‰¯O“_yšWÉ!?~/w¯o�G}›_}šW}™OÉÍiGÍ�HÁÑÉ!?~7w?##wy7O®É*?ãå*?ãéáã"?áã"?ÉajSXÍÅGÊ\HJS\E!?–Ò\H/~·Â¸GxÖ8­GGÉÆ@GÍ#HÃ�GúÃGÍH·ò¸GxÉ|·ÂòGµÂÙG²ÂâG³ÂëGÉejSXÃòGëÃòGch|·úH{_zW}o|gÃóG"î>ë"ì>xÉå!ì>·~w#ÂHáÉÍHÂ#HÉDHÕÍÐ!ÿÿJ!?qÉx!?·üNHF#~怩OÃ~HÀÀ À€4ÀÃ/Há¯go"?"?ÉåÍŒHás#r#q#pÞHÍ–HåÍ�HáÉÍžHë"?ë`i"?É*?ë*?DMÉ^#V#N#F#x·ÈyíH:?·È:?Ÿ·7ÀÆÉ|/G}/O!>õ·ÃÐHõå ÒÏHñ7>á{_zW}o|gñ=ÂÆH|·g}oÉÖÚøHCZQÃëHÆ o¯-Èy TRIVIA CQMŠTRIVIA DOC  TRIVIA1 DQT�TRIVIA2 DQT�TRIVIA3 DQT¯ TRIVIA4 DQT»TRIVIA5 DQTÌ TRIVIA6 DQTÙ TRIVIA7 DQTå TRIVIA8 DQTñ TRIVIA9 DQTý vÿTRIVIA.COM 2ÿÿÿßÿÕÿÁÿ !"#$%&'()*+,-./012345Þÿoÿÿ„ÿ<ÿÿfÿVÿ=ÿþÿÜÿcÿ6789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[5ÿÅÿÝÿHÿúÿÿÍÿÿ�ÿûÿxÿ_ÿõÿùÿeÿÿdÿñÿ6ÿòÿîÿTÿ|ÿˆÿ�ÿÿ\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�wÿýÿ�ÿŒÿ‹ÿƒÿsÿlÿüÿuÿÿtÿgÿ:ÿÔÿìÿ†ÿ°ÿ-ÿöÿšÿ�ÿºÿaÿ]ÿ>ÿæÿqÿ–ÿŽÿåÿiÿhÿÉÿkÿ­ÿ ÿ¯ÿjÿ7ÿ±ÿ‡ÿ‚ÿ«ÿ~ÿÿŽ��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃXÿ%ÿ ÿyÿ‘ÿPÿÿ¨ÿÂÿŠÿœÿ˜ÿzÿžÿJÿÑÿ¬ÿbÿøÿ—ÿ}ÿ¶ÿ¡ÿ“ÿÿ…ÿèÿ¹OzW{_xGÃûHÉá++ÁÉÕë* #ë" #s#r+ÑÉÕÅÍ�$Á*š##~‘_#~˜WÒo&Í�ÃZr+s##6€"ž####ÑÉë! #~#fo´Ê“&Í>ƒ&ëÉ<ëÉ*œ#"š#ë*ž#}“o|šgë6@#s#r#6€"ž#*Ù&ë*×&" #}Æw>Œ#w##Í>¾&++6+6É¢#Ï# I§Èõ~ÍG=ñ#=Âß&ÉãÍñ&ãÉ~æÍG=¾#ÀÃñ&CJÒ$J#4Ê%T.ÍyJÃ$J¯�G~›_#~šW#~™OÜOJhc¯Gy·ÂJJTÍz0òL'*˜�ÍéH|ÔNH{õ>˜2?Í~GñØ/<Éx±Ê¥H!­HåÍ¥Hy/È!?®~ðÍÕF©É#~¸À+~¹À+~ºÀ+~“ÀááÉLUX)!�€"?Ü7GÃ~GëÍiGëÍèFÁÑÍKGÉëz³Ê+Gz·Bü/G|¨G|µÈ|·ëü/GÅ͵Hñ·ü/GëÉÍÐ!‰¯O“_yšWÉ!?~/w¯o�G}›_}šW}™OÉÍiGÍ�HÁÑÉ!?~7w?##wy7O®É*?ãå*?ãéáã"?áã"?ÉajSXÍÅGÊ\HJS\E!?–Ò\H/~·Â¸GxÖ8­GGÉÆ@GÍ#HÃ�GúÃGÍH·ò¸GxÉ|·ÂòGµÂÙG²ÂâG³ÂëGÉejSXÃòGëÃòGch|·úH{_zW}o|gÃóG"î>ë"ì>xÉå!ì>·~w#ÂHáÉÍHÂ#HÉDHÕÍÐ!ÿÿJ!?qÉx!?·üNHF#~怩OÃ~HÀÀ À€4ÀÃ/Há¯go"?"?ÉåÍŒHás#r#q#pÞHÍ–HåÍ�HáÉÍžHë"?ë`i"?É*?ë*?DMÉ^#V#N#F#x·ÈyíH:?·È:?Ÿ·7ÀÆÉ|/G}/O!>õ·ÃÐHõå ÒÏHñ7>á{_zW}o|gñ=ÂÆH|·g}oÉÖÚøHCZQÃëHÆ o¯-Èyÿ€ÿêÿ¦ÿvÿ÷ÿ^ÿRÿÿàÿÐÿ£ÿ’ÿ‰ÿLÿ.ÿ*ÿ ÿªÿ{ÿrÿÊÿ©ÿpÿnÿíÿéÿÈÿ®ÿÏÿ¾ÿÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõ¸ÿ§ÿ™ÿóÿÒÿÀÿ›ÿ¼ÿ»ÿ”ÿZÿ9ÿ`ÿDÿðÿÿ³ÿ¤ÿ1ÿ¢ÿÙÿmÿÛÿ¿ÿ¥ÿ(ÿÖÿÄÿNÿFÿÿäÿ²ÿ3ÿ×ÿËÿ\ÿSÿ�ÿUÿQÿ&ÿãÿÇÿ•ÿWÿ;ÿôÿëÿÚÿÓÿÃÿ½ÿµÿ)ÿCÿ4ÿÿÿçÿâÿ[ÿÿÿïÿYÿMÿIÿBÿ?ÿ/ÿÿáÿÎÿÆÿ·ÿOÿ@ÿ,ÿ+ÿŸÿKÿGÿ'ÿ#ÿ"ÿÿÿÿÿ´ÿ!ÿÿö÷øùúûüEÿ8ÿ0ÿ ÿÿÿAÿÌÿ$ÿÿ ÿýþÿ ÿ ÿÿØÿÿÿþ’1ˆ˜‹å¹Mþ5‰ü–\9ø 梌¼,#/ËÈË2ò²Œ¼,#/ËÈË2ò²Œ¼,#/ËÈË2ò²Œ¼,#/ËÈË2ò²Œ¼,#/ËÈË2ò²Œ¼,#/ËÈË2ò²Œ¼,#/ËÈË2ò²Œ¼,#/ËÈË2ò²Œ¼,#/ËÈË2ò²Œ¼,#/ËÈË2ò²Œ¼,#/ËÈË2ò²Œ¼,#/ËÈË2ò²Œ¼,#/ËÈË2ò²Œ¼,#/ËÈË2ò²Œ¼,#/ËÈË2ò²Œ¼,#/ËÈˈº¼ eäeyYF^–‘—eäeyYF^–‘—eäeyYF^–‘—eäeyYF^–‘—iÿÇò‚ªèÈTeJƒ AU¶`+ajHºg° éoƒ¸3�ìcªR�1† * ”~tCkˆëna¹PççúZX.Ôùáº�ÀTåF±¦†¤âÁ»QªÔçHK J-ƒéñAÜ®{P€‹:i_‹@#ƒ¼íw.ê¤Ý-õ ð¶Ü¸¨’} AUª1ÆTe#2Uá�!¨Š ‚ªœB† *Ÿ#÷˜n«Ö‚ª¬DθÙöØÍ AU‘!¨Êi”þ÷tîH-wÓi�«˜e† *ý(Í9½ éí§pgÀÞÈt.”„:?CP•%(]{:é¦Ó7‰­ðà�À�ëÎûD‡ñã3áÔú’Ü/’Bêâ AU"CP•£ÈTe6J§i÷i�årÍI¨ó3U9‚ªœ‹ AU6¡$�Ž÷¯<ºò¬d9­O"JûN듈ÒK§u”~?í]|ÉÙqîåÓmN PÝ B#´ú/? f`mN PÝå B#´úá4˜E€pk>ýú´Û}°1.êä=-ÀE�\ÅPaªò rp¯Èr9êü AU¢ô[?"õ'º²_€W|ðb‘eñ† * ‘!¨ÊC(åõëH›“ÝÝ/ÀÛ>–Ë5'¡ÎÏTeJíý:Ò¢~Á ­!®â® Á�… AU.Â(VÂÔ�ô^¿Žô‹~¦† ª�ún®â]0‚ª4 Tׯ#ý¨_€íc AUÎCIèב–õ ´9)pÕ:¼Z ­!®â]® AY„!¨Ê|”Î_’‹4°D ÍI�«ÖáÕbh qp]Ê" AU–#CP•”¬K©?)ÐÇ—ð²^,²$O3UéD† *”V-A¤ÍI�îZ"ÀË>x±Èò膠*dª’�Q¬„©!éÊ%÷�ä‘ñþ•GWž½ðÂÅ—œ'çu¬nÈ'y3ÈEù—.&¤a´£ cÆ|R°¼�4fòægîæ¸éKHöA8�CP•”J.eª2‚ªŒ"CP•Âø8CP•CÈTåÂOã AU \1›!¨Êt„»/eªâCéîqé»I�¶� ð²^,²|6ÎTŇҬ%ÒÅã AUrž™ÁTe3BÉ¥ AUŽ#CP•ndªRŒÒãç#]>.Hùã¤�ãt 2UéÃ(VÂÔ�T4ŽHKǘ‚pº{>oX½:�,oÈ4,&döò…¤#ŸÔäÍÍ� w7tiÎC‚Tü�ŽôøCt 2U¹)7Š•05át÷4fòóIÓøÁþR�GæåÍ(è˜1·s!‚W{ ‚®ˆËLB8T�CP•gs¥íO°\è�HÿyHŸD„Vÿö‡àârÍÓÀTå†\† *ÿ› ·2U¹/7Š•05$Ý>ïîMysÉü¼ÒQ@2ó—,ãƒÜ1O€d„Cˆ0U¹-7ŠÐÝÄñå—ÞKù á—QÂ;(%¼ƒRÂ{)$|�ÞAãJ 凜B)!„RÂ{)%”B(%¼ƒRB¥„÷RJx/¥”B)�(%¼—RB¥„J !”B(%„PJ¡”B)ეBy¡¼# ü2Â{)$¼—òË!”B(%„PJø ¥„PÞA(ïˆ(%¼ƒRB(%„RÂ{)%„PJx/¥„RÂ{)%|�RB¥”B)�(%¼ƒRB(%„PJ¡”B)á½”J ï ”ð^JãÊo!„PJx/¥„PJ¡”ðJ)á—Q>Hx¥”B)ņ *ŸåJ\Ã:¤;‰6�Þ× @Ç CP•›s£X SCAwOc¦!?Ÿô7�ì!yd^ÞŒ‚Žs0Â!xµÂ!芸Ì$„C5ˆ0U9›+m‚åBD*mÈ�D„Vÿô¸¸\[¶œ!¨Ê ¹ AU.Î…Û‚ª\’Eèî‰â�x€ð^J)á½”B ¡¼—By!”÷ÞA)�!”B !”B ¡„J%|�B(!„òŽx€B !”B !”J¡„PÂ)!„B(ïˆ!”ðË(!„B !”Jø %„PBåñá½”ðAJ¡„PB%„>H !”ð^J)὿544’¹�¤`y™Ÿ—wIçe.åâÂ;(á”B ¡¼—B)%¼—ò^Â;(¥ñეð^J¡„PÂ)ეPÂ/£ñ!„B(!„B(!”ðAJø %„>B(!„B(!„B ¤„RB%¼—RÞK)%¼ƒRJ¡„RÞA%„PÂ{)¥XÂTev®ôðüuHŸœ/H{ç�Þ1_€ŽA† *çæF±¦† ‚îžÆLC~>éo?Ø?B òȼ¼3æ6`.„Cðj„CÐq™I‡j aª²)WÚþË…þˆT½<÷CDhõ_µ..×¶?ÁTå›\† * s£Ý=ñ@<@ !”Ê;彄PÂ;h<òÁ‹E–¦Ù AUˆÎT…Ó£X SC4”àpŸtÁ샫æ7�yËóòòHÞŒr^&o7)XÞ@VwäpñÙ$û‚ªØtÉz”!¨Š¡3U¹I—NÏÖ‘ÖÎÜÐ’VÍÎEºk¶@ßL \µP ×…àÎB† *Ïê AUnÐ¥é³sGj¹Ôl�«˜e† *÷é1† *gt† *gt† *Gô(VÂÔ�ôÝléû³˜‚p¨껹Š0‚ªôê AUNéÒ_g#Òg ,—kIB�Ÿ!¨ÊãºôËìÜ‘ZnÚl�«˜e† *ŸéRô\Dzþ¹ËåLB�Ÿ!¨ÊÍ:CP•›u† *gu¸}�!¨Ê z+ajHºä\é ç 05áP Ôws-0`2U¹X—Î;·¤©v=WÑ"p�+@c,)²L9—!¨ÊÅ:CP•Kt©èÜ’MMK¸œs®b ”E‚ª4éÒÿ¬bª²^gªrŽ.í=WGÚ’èç ð¶�år-I¨ó3Uù\—êÎÕQºõ\}'ýè\�«h¸ýç 0#Ÿår'¡ÎÏTe¥.]}®Ž\E‹@N ô—sØîƒ�3\… e† *ƒ:WÑ"p-ÜšON °Ýó¹Š(‹0U9­K7oÒQjÚ¤ï¤l“ÀU´ÜÅ›˜‘Ïr¹‡“PçgªÒ¯KË7éÈU¨ÜšOÏÛ$ÀË>x±ÈòÀ&† *ýº”³IG®¢E ':}“Û}ðq†«xÊ"Ò_71UY¢3U×¹Š�«xÊ" AUêQ¬„©!‡ aªrT—j®eª2[gªr®ÎU´\E‹·æÓ‡“l÷ÁÆ|®¢Ê" AU6éRüDúô-ËåžLB�Ÿ!¨Ê7ºôì-:Rã�år�$¡ÎÏTe¡ÎTe¡ÎTå!]úí¥Á[ô�tå-WÑ"p#·0#Ÿår'¡ÎÏTež.åß‚HN ´ó^öÁ‹E–ooaª2Ogªr‘.õÜ¢#ºE`¹Ü“I¨ó3UiÐ¥ ®eªržÎTe¾NI Üc7ëÅВ๊�>œè+·°ÝgດE‚ª,×¹Š�«hàÖ|úpR€í>ؘÏU´@Y„!¨J‡.U_«#}$)Ðĵ¼íc¹Ü#I¨ó3UiÔ‚ª4êÒg×êHŸL ôÔµ¼ìƒ‹,�ßÂT¥S§�$î±›áÕbh q-\‚²CP•Œ·2UÉׂªäëQ¬„©!©üZ¥¯-YLˆÔs­~!mI PÝ B#`mI PÝ ·6­ùtóµl@ !”Jx%„PB(!„Æ”B ¡„wPB%„PBãJ¡„PÞK彄wÐx€PB !”ðJ(áƒ4 ”PB%¼ƒB ï ñ!”ð^Ê;%„PÂ{i<>Nyá½”÷ÞKy/!„ò^Â)¥$ üù”ðJ%¼—B 籠PB%¼—òŽx€ðçSÂo¡„÷RB(á½”Jx/%„PÞþ|Jx/¥„PÂ{)!”ð^J%¼—ÞK)�>%¼ƒB 籠PÂ{)!”ð^Jx�>%¼ƒB 籠PÂ{)!”BãÂÇ)$„PÞKx/彄Ê{ ¤”Æ„ßI)ņ *5¹Ò�O¬CÊã‚y"€TyB€ŽA† *“¹Q¬„©!‡ »§1Ó�ŸOú›Æö��‚<2/oFAÇŒ¹ ˜ á¼ÚátE\f¡D‚ªLäJÛŸ`¹p,ÂT%•cª² —!¨Ê‚\† *›s%D† *Çs‚ªÏeª2” ·2UéÎ�"t÷Äñ@<@øÇªæð˪â�úúzÂ{ ûòç®.È/ŒÿXÕ~YU<` CPo‰ôû¥Ÿ®œA –wä“y ÎÏËÔìzŽÔäÍ%óó ÈBR�W°p5É;�†Aæåe2 ó ¸/˜ z¢X SCôÁ¤wõÁƆp Â!D‚ª8J¢X SCA ÂT%X"Ý¿ú™¼¹$I�ûxµöF¸>6Q3)pÿY-€½®Ï��EÐî£fRà~Y-€½®Ï��EÐî£fRà^[-€½®Ï��EÐ,Ý»‚ª$J‚ªœ(‰b%L IžÝÏ ®nX˜ß@ÎÈO7dÈ&’—!#\Çn’} AUªK¤�Õ AUž)aª²±DjÙ­o’¦ìÖk¨™8ÿnì�0˜‹¨™¸Ëv `o„ÁØX)¼Xdùy7CP•�%Òï»u¤?ìX.÷nêü’cCP•�%Òßw#ÒÿÙ-°\îÝ$Ôù‚ªœ,‰1Ui+aªÒVÂTÅ(�Û‚ªÜTEèî)X¾÷ÁÆ|®ýZ.êä*à¢NnèZ.ê„d„Cˆ0U)Ð%áZ¹ U€[óiÙµ¼âƒ‹,%»‚ªèRû.† *suéª]:Òø.�årþ$´† Î×…úHR�ªvéÈݶ‹å‚ßÏTe�ÅJ˜‚�CÒç»nF©vWÉbBèú]õ'xÛî ÷Û..ê¤þ¤À=v3@1\Ô É>‡ aª’ֹªŒê AUFu† *5z+ajHš² ‘^¶K€©!‡ »gSÞÜ ™·<¯c^ƒ•`.„C5PßÍU< &„C5ˆ0U™Ô¹Š'®B 1–Y~ÝÅTeR‡g¤·V1U™Ð‚ª¬Ð£X SCÒÆëiõõL A8Ý=³3y3æ/&dH%¼—B(á½ñá”wÞK ¿…òÞx€ðJx/%„PJ ï „÷Òx€ðJx%„~%¼—Bùeñá«)á—Q>Hx�_Mù !”ð^Jx%ü2þnJx/%¼ƒ>H)�7%¼—ÞA ï ¼ƒ�x€ð7PÂ;(ïˆ%|�RþJ)á½pÆ¥ùä¼¼ i\½°¦cÆüx ˆâ�úzÊ;彄PÞA(!„Ê;¡”Bhíd;¹]�iø‰Gë¼Nû�ÁNëC�ÿ­»êävu²eà÷sˆaä·¸mR'ì1]Ç–rÇ–BYö˜.ŸÉùL(‹pÇ–Ây ç3á<…Ë1u=v‹Ùi”H7v&x\Ú•¶[’�Fu‰tEç¨Ýò^gT®qùL¨ŒøÌ™®œ¥.›9İÛöFh‘å™ G2Ì ~?w_†yÁï‡{s7e˜ü~XwŒ»/üPççîË0/øýÜ}æ¿ÊÀÖ"î¾ óB�Ÿ»/üà÷sˆáj¥áß ipRž";ݶ÷2\k†y¡Îo}*s•ýÀŒ ךa^ðû¹Uæ¿Ì"®5üPç—fdP–e·í½ ךa^¨ó[ŸÊ¸bkkÆ~õ¢Œs]ÝP†kÍÜ,±ži‡æËX[3’˜ážÊXc™5ú9ž5Î/Ò\kD¹Ö ó‚ßÏ!†¹Ê ó‚ßOßË„‘¯wÛ~Ïp>³W†²ˆ5Ç8‰û9İ{ßIÜÏôi:beØm{'ßm«Îç|f¯ eku¾Ëgr>ÎS 2â39Ä0¢ÛÖ‘ÿö¹o@Ûê|Øcº|&ç3¡,ÂùL8OùDæ|¦ñ˜Ç®}–/º|¦@Wç[}æuKò]«óóÒh8p_´sÛÞ/tÛÞ+ä|f¯ eøh:×g²�½hÌѦ&rLQàÃ÷0N]a·ü¥Ð“uö[æ�9—XþZÈí/”&”ûÖ¯¼¦‰Ô6]g«ã¶`[/ºm׌q>³W†²|4ÝšcÚ-ޱ9Ñ(80±ei´ ˜È1iíXðü®´QíÐ6Ž7ö¢áÐvŒÑÚ±lô*p SæN�Y&Z;–xÛze£�^4 £9Ä0bÉ’ Æ7 6‘õ+¯i"#µãd}íÁ‘§l·Ž¹m_�q>³W†²|4ÝšcÚ-¾±9Ñ(80±ei´ HoKä˜Ñó»ÒFu\ëëE#úL/qíÍ1zë˜��^tÊÜ£c– Å�¸Ûzeƒ9zј£ýy¬W6ze1Œèí¿`|Ó`Y¿òš&2R;NÖ×yÊ]6æ*_zÓáÔvËÓOÖÙo¹Âã\byÌÃ%<Ò„rÛú•×4‘‹¯©]Ri+õ$žÅ6�}8áÀ6�]ûÌCK=‰g±­c0ÃCK=‰g±­i©Çc·Œ{æ D£àÀÄ–¥Ñ.p -õd£ï€¹Ã§l™Pb´Ô“¸Û<ÆûÓh©'Ëy˜„Ô¬ai†±Ë±ä‚ñMƒMdýÊkšÈÅ×Ô.©´%R‰›°-1� žï9aT;´¤Ç:/e¶.O9Ñ"y ~2±ei´ H©lôp M¤÷a[/ÆÎYãtNŽjY�+“ŠM³–/­e:œºÂny:åqökO§fퟦoÁú4‡=X¸ÈuWj–Û–HeÝ6Ï·íOܶKSÜMØ–HÏwíNMóœ0ªÚ?7X¯ÜàŒ[üf9Ѻ»2F/MÁm“ðÚ—ŸÒ&ë]){b] —¦l):�²]”¢ S¶óRÖÝ)'2´8&wº–§b´#·MÂÆ nCJ›P·§h"¼©+mT;42»ä:�ÊBlÅØš ®ÎTpÙ̵;f‹; wÌÛ‘çЬ“k÷jWMØòR3m»R¶ÇS®U)—5e½+eצLÒ¼\¹¢Ð®]51¶æßÚUckvÔÒD*q>¶yî´L™¬h"•�¾t·vÒD*½ 蔹+R– …&R·.U–¸=ä<'ÊÒF™Qíо�t[祸m)»eB±ž“rÍHqW¤œ²eB±Þ•²k?O7мԘßhÊÙçn³®Î¿ßº:‡(pˆaD·íë|ØcºŽ-åŽ-…²wl)œ§ÀÓå39Ÿ eÎgÂyʾßNâ\ŽÙfõ™ÅçXy\j·ü%ßÊãÒh±|!q|i—]ÓòÝA¬”¾Ê7þQmy?ßmœïÐ’ù ÄýbØm{-ö˜.ŸÉùL(‹p>ÎS¸óÙc%³À¹Xûz®UíZxîN—$Jf�ÓÐÌ«$:å{kE'Þ{Ž(™ô2Ѱ-¬àrLÛe¢mŠèqͱ.¥¿Ïu^ Uï� E&»*E�s±åñ=Nby|�³Éòø»åñ=tŠ˜6lSD˜-Â…¢GªÞã\|ï…¢ÇI,×ïq6Y®ßc·\¿‡NÓ†mŠ"\(Jsö8›´ëö°*WL„ E�óËÚ=NbY»ÇY¥MîqÅD¸P4<ö*�v|;C/«l—‰®?‹p¡èq ‹Ö?‹/�É».€,˱‹/�É»xÛç¶í­1Ñy�vݺW )ÇmÛ+Ò)b/Ò½bá"KUÚú¥hתÒt¯Xh¿zKšª¢@·‰l÷ѽ¢ZùÔù"Ý+BçZ©*M÷Š4åÐm¢Û}4)  •×Íé^Q€¦7\¹’iš:S@+¯»,M“¢m¦H·‰YšÛ9f›mŠè¹Ü‘ö8­S/K¿H \Ž)€V®U¤é61K“b["Çl«òé*Aà6›håiö©+Ç„Ù"·Ù´M¥ƒi:E¬²M=ϧ¥ƒiH¦¥¯ÓÖ/Eû0UE�nØîsÛ¦ˆ…‹† íW¿’†Îµ1šrÜpåÚ˜õNÑumÊu*e½=e·¼=9g Ò…©,7‰¶�)ÑV�¢©מ’&”±5,÷LX;Sv˧Ó`Þ mû ¸cbÖÍ6ÑwLÀ¼ÕU…‹´O'¬Õ)û0Ì[wLHNÀ•+„ýÑ.p õ®”]›°^›rnÐÆ&öíçrÌàdWÚ¨vh»'9f´ ˜¸=e½+e�n´”ODmàÀë])»eéÝ•2l»R¢ÝݪM[ñôèÉIl«ÌJ§'„ý´:•ز4ۖζêÔ˜sR»z"±ei´ ˜¸=e½+e�n´ü8µ�¬w¥ì–ítWʰíJ‰vmÚ ÑV�ÚçŽ�­Ù`yv…µ3e·œ\1 æ­Ð¶¯˜5G ¬€y+´í+NTW.ÒN®ˆÁ•+„ýÑ.p`b]ÊzWÊ}Æ2gE”XïJÙ-µ+èã)ÃöxJ´»[µí+ž½c81‰m•Yé¶Ö“);ëúp¿@7¦Æœ“ZrE"ÇŒv�ëRÖ»Röè3–òQ8`½+e·,]AO¶ÇS¢Ýòä ×É”{_ŒCLä˜Ù¶õYö1åÞ7s4\6³pÇü±yíƒ1ö‡(doËÖý°¢¾î‡eFÙí�ûb·•M»mV]v…Q&ýe—Ÿ’&nCÊ©[&®=å̵L(œ–’&îë”4¡ ¿p2ØÁø¦Á&Òßtö©eMçŽ7�\²rä²~å5•[šF.!µëÉ%+—üF.9;ÞZßvä’Ú{HÓŵýOú/ß4ØDÖ¯¼¦‰ŒÔŽ“ÚÁ¦ëž©%÷Ôö7‘KVö“%ƒg/®¤³ûkGÎ!ã››Èú•×T¢í�Ó¬åKk™§®°[¾?äq.Ѿ?¤oÁz�³ßòý!6;�µ•J‡‚UžFµC;qh–3¨->DßYà ñ�ÛcHÖCsN"÷û¡6}gÁ4Á�‡ÜƬ9šõ-;”«ºÒFµC«=ß!îÄmB¡Á¶§Ð- lñRç¡iôé…‹,窲=½€ÆÌJ¶ø‚˜5°€Û±Àn™P¬W-°kKít]µ Fƒ “× UÒ- ²û£]à@«pÈnùòМ�h˜E7‚íîÖŸ½c81‰m•Y)yˆ;µ@šP–yƒ¹:ò;ãK.X¿òš&2»åxetvÿÊñ&R;BŽ\P;Ø4Òt Y¿òšÊç–�ñMƒMdýÊk*mK§O³–/­e:œºÂn9oºÇ¹D;oº¾ë=ÎÙ–ó¦³þtÖÖ9=‘?=H='Œj‡Ö¸`–3¨m]î.ŸÉå˜Óp/p§�Ys4ßÎg tét(‹HZ0gà$r«§·yèÒnyc”n®x,‡ªb™Û}n›*Òm¢À• �åp%(À²ºM,`»Ïm»C,\¤½1J·‰…‹ž:G´^)îœmý@Ü9`­[°ôŽRU¬²©"UE�nÐʧÎé6Ñ6E´.í–é£V»hצ�Ò)¢@U±J­¼nÏ(#pD¤SDÃ6E”®¥SD�ª¢Z9»é‡#¢Õ.Ú-0J§ˆUÅ*´òºä(£pD¤SDÃ6E”x¥SD�ª¢ZyŒZ‰N™ÝtïѺHt"£÷­‹ÄùV»ø­6m”NªŠhåuÓF�#"�"¶)¢ô¯Që•â|k¥øí|ëâÎ7-w×X+E§Ì.¸÷ˆh­�hµˆ÷¹Ó6E´Þ)Ú-Ý5t›(Ð;D¶ûܶm"½C,\d¯¡SD�a›"‘Þ!VÙî%k Ý&.²|QC§ˆ—c  •³çž:"Ò)"+™æàˆèžeÌÑ:klSDºM%¸¶ûܶm"�"Jã5t›X¸ÈòEM•m›H§ˆÃ6E„#¢Ô]c•D§Ìß{D¤3ÅÂE–554).²\]C§ˆÃ6E„#"MŠU¶¤HgŠU¶™¢ôA MŠ…‹,W×TÙ’";GDiM�õKÑ)[ké^±p‘åܵ¬ ŽˆÖoEû4Võ_GÄYì‚_�ˆt¯Xh?°s­M9nÛ^‘î.€<–ãÆ.?GD.€,Ë¡{Å2¶ûÜc—Ÿ�#¢õщÃÖJÑ)OcÜ{DœeµˆOc¶DºMÌÒ™¢Ð¦ç˜õ¶)"}@l³mé¢Û}nÛL‘îú€(ÀvŸÛ¶W¤3ÅBû[†m¦H§ˆ½g ÛQºl­í‘n³t¦Ø¦ç˜õ¶)â~ú€(ÀvŸÛ¶M¤3Å,}@l³Íé^1KÛl{EºM,´¿E§ˆU#]e›" \Ž)€V®M[ËθrL:E4lSD˜-JÖ:�açâaçsÃÎ †�7 ;é°sÕ°³*6ÍZ¾´vDšcô2Ѱ]&ƨ*6UŒÑ¤hØ’bŒn Û61FgІm¦cÏ‘8"Òm¢MéLÑ– 1´L™ì’D†®E¢Ë.ºî]WŠ®D×—¢«U”¦�"+LlYírˆ¶µ…3]}¦5Ç´[¶‹s¢QpàLWM!‡=X¸È/Œî&‚ØæqÕ&rÌhè”-§ áùÂDŽ=tÊ–3…ð|¡ôF!×gÞ/Å éÚ²𚒼P'%^_Ú–¥k ³ÖšB»ÖQ}gæ?,Vqí–¬mma,ºÅc¼o¹¨°:®]Z(]Tˆˆp¬pbËéÓp/p§�Ys´m hçôDþô íJÕM[ƒÿ^`箘®M(´oºM™N»§Û"Ó©2½p‘å•U6e:�L÷¶Èô˜µb:·mºÝ2¡Ð¾é‰I„ë†*i÷ôìþh8К?Ýn±MŸ3�‚ùӣπíîVË©éNÝrÉt{ìéÑ;†“ØV™•¢Ó…JÚ7=1‰pÝ�{ìN¦ßãNö¢áÐ6M�k³§ÏŒqOM—&”eÞ`®Žüâ«ú›Î^BÏ.'Mµ—¿ÓßtöR;BŽ\P;Ø4Òt Y¿òšÊç–�ñMƒMdýÊk*¹Q{º—s´ýÓQär̶^ärÌDÚgÝl:­ 5Ýç1 ç7Såé/‘—n>QÜâ±[nòÎÅ–›|'ªšÃç±[nòÎÅ–›|ÒI_bÒ,ñØ-G|'Œj‡v›�õ·ÀQ7é –ÀQ—c&Ò¾àù]i£Ú¡Ýã‹EÑã¤ÚC>F¢ò@�]´4úœDkô± Ó†C;×Cþ|wë¾µ_ÌïØv·î[ëŸ-nØvÛ~ô�VÎä©�ú¤[}nÛ�>ÐÊZõM}ÔÇdéQŸÛö£´r&[õI·úܶ} •3Y{ÔÇ^+çÃî²Bû�Ÿ};ç�íÌ3Ê­ûÜcÅy…¡ùBe¬uŸ{,•WX:_¨Œ¹m‹sàÓw+<84Køµ)‡.Î »m‹sàÓœ}n¸nhVå¯M9bx_«»ðÉi…‚ýצœÑJû¯M9Ù°»¬pçü±�yFYؽ¯µæJ&[:r¤ù9î}­5W2YëÈa(@}‘»,ì¶Ï¡”É–Ã9RyŽÛv<„R&k‡sÂïåb˜¡ë®R·í©Ò™®Ó¥•ºþ\ÊYJ™êüÖWJí–çJ­Pz•K*]¶Æé‚RÎRʼà÷³\è�pß—2/øýpqùÔ·r¸¯K™ü~XwŒÓJï—^Éa¹Ðá~(e^ðûáâòº�›¹¯K™ü~¸÷0§•‘Þʱþ¹Ô®-Þ¼ÓõçRîß¥Ì ~?˜EÒ+9œ¥”y¡ÎÏi¥û�›7ï|ÞüD¯û|ó*Oqš‹]±RÑ5\Ê]W ŒҴáÐnÙ”«¼çKÃf«TjgäÀèfv�+Ç´—ÚôlžL/-^e5l—¯Ý;œ]e­‚kŠ¥û‹š_lMÛµ]ÅmYé¡bqh`­9Û�odbÈ/h¤¸,†¸Ê8jxŒ‘ –Tî7Œ„Ž#ÆúC˜–…‡²³Üs´GŠÝ­5sÒõw¯Ý«iű2ÛOÅnxµØµÜU ~¿@*.‹ Òïňe¶œ>·mzŸax\å}†ÇUÚgx\E}ƈ±Þ(훺¼OÛØW34uy_™µ¼/ëžc¹¹/;b¬7²%ðàPٴѾ©Ëû´Çûj†¦.ï›UÖZ?GÛÑg-í« ¢µ¨ÏÔjûJàÁ¡,�Þ7b¬ÏÖ[Kûαõ 4§¯,ÆÍè“&”uK¾°äâþ•ƒã¤öà8©]O^¨=8rÉWÈ/s—�¹rÌ™®Í&ç3{uë7ö­åKkY.|×+³ýÑç†=¦Ëgr>Ê"VŸ9p¹³­­ßT8eË}œÏ´–/­e¹ð]�@ÿè+‹!–ÙØ�n ê‰w‡ºœg´·ûª¥Y}\ŽÙK¬— 9«,õCi£ËnÙ8”öVKõC£N]Û1Ô{Æx¾]>ÓúM…S¶<>ÄùLkùÒZ– ßõ” •ÅËlÊ�›{w¨¬ÐΪ\— Û™W¸s¾Á.p]6”ˆ éè¨ÌŽë³õ…ö«ÓCeÏ•I—Õì¬ÝyNI}kYuÍågÒF–‡Ê*¥ó†ÜU†Êbˆo}ÿú¯¦üß²,#¿¬rZÍþ,‡_�—CûfµÆ¢[vÔ]>Ô–½-×Z‡bYÛ²n–p»uÄSŠëÖ®›Í»�XJºkÖÕŽ®;Ǩé®5F›Ï©û×]Ö]É=Ò¿†^ø-†ˆÓj™§®pæZÎï™Uë:dr9¦m�9Óå3ƒr¥¯ùÝ­SŸèvÆ-Ot;·XŠ»�,“ÝΖ;º�-¯t;K,ùÝi‡åÑnë�ÍN´Ìë*=inu{ çÝÚ ÝLæÑå3{1f=Þì”-ˆ¬DéuÊ–º½UžJ"ÍîVé†îQ§l¹¡Û[%T²-if"Íl Dš[ÝÒ ÝB%<ÑÍ ˆ4C ÂùL– ßõ´º¥º™‘fD¬‡L©¾›û[7´…¬}͵ðj�õ�)Õwﯭ%÷œÙD.þülÓÅãMýK“{ΞKV.!®#‹×!“Ë1m Ì™.ŸéN±m•q4kÛÜÃÜý=ÝÜ#ÐfŒ.0=θev�³Ë’é1l L«Ï¼\wù̺z¸òiBa®¡G ›{ºÀŒÑŽé±k—öž1z‘é.Ÿ)�”z �]»¸tÔå3­w•:eË¥Öo*œ²å‰RkùÒZ–ËùLø®‡>U*9K)ó‚ßÏ}]ʼà÷ý‡9K)óB�¦ëòRÎRê±[¾-½úÛÒ9iJ£%vϺtU\k)µ^^ºÎuy©t¬”³”‚È£õòÒËÏ´ºcÈŸðúõIÄ×î½÷Þ¿M?õ2ºm¯—sÇ–öÊPá|f¯ eŽÇ¥‰3({ì–3åµ]vËÝåwjëÊ�j‡¦—ÏäÃ'‰Çn9Y^»öNm]¹áÐÞ(—N–GI—Ýr²üNm]yµCs•K'Ëݶʹ“y¡ÎÏ™Ì u~î˜i-7ÙQ×Qîùoç©¥ÜZn&ŠL.Ç„wË-…åô�ò0Wn&Ž™ž5¯¥»Ö¼v‚Ûl&›;ê†Ê³Á’®h-åFµCë)çÃ;ê’åÙ®G|YÞUk?`/ÏVwÙkÖ}xa¬ë1wë¾µOx©|­�ÉWUnÛO…×~§ýX.ÞvÛ>.ç”Ûµ¿•sÿS.pˆaôŽgæ68Ö/\�ßÀɲ][VÄ!–…oÀÅãv­ºhñú²°Ûö¿E0ZÄɲöl‡(pˆaæ•>-bËܶsЏêüÖͦ�ÉW7í´sˆawYá¢a&ÛcnÛž¢}â{–yEBu—$íç|f¯ eº§H°æ˜’X„è.sŽ[*Šœ–Š"ç&KE‘³ÆRQä”-E í1&Ûc ¥ŠØ¤ë£"· Š¸ï‹˜êüÜWEÌ uþ™®[‹\?Á�EÜWEÌ ~?‡F>çæ¾*‚­‡¹ï‹`ëaº¯¨pÛ�Àaë¾"ûïaîÖ"xä°8ÌýP�æ~(JÜZôÎìj?Qu·C«>L÷�=8vàŸ‡«»ìþy˜»µ9Ìd×¾"`ÉÌSíéºsW9´Û[÷-[£ŸÃ½TäYãü"Í}U"�Ö¯‹ì¿Ìt½Tã^*ò\5°l�3Íý«ÈsÕìekœiëGEÏÎÚöq_%¾/éºsøõÀÐau™>zg]äp¶–R‡ïzí†gGÚ¡]v8ô ž�é*‡vÇa·^‚vÏåzºÊ““þ(®i‡cnÛævî²væ…:?·µ�y¡Îo}·Ý~ ¨ÝÚÒn?PÔÎ=ÙîXãLso¶{f¯q¦³6µÝºµÝ•lç*Úƒ�™iáEÛƒ¯K¤Ýa¹½¾m©½®­ÝÎ5·'Þl�»ÚÓUwǵ�íR[»5Ù~Žõ²öÚIWEû¨zuc»µ¢]=ÐØ>j¿º¨�ªíYno;“!xŒû¢�yÁï§›ÛÃP×NÕö,i·*í<ÆU´3/øýb˜{°�yÁï§f/r9¦m�9+fؘVŸy¹îò™u =LvùL©¡ñ‚³K.^¹’¬_yM¥Ûc·¼Ùci–º{ �!8s‡�%Ójî Df ÃÇ¡˜+Üã±[íqýÔcxì–G{ˆ4ïã~ê9by´'+I=Öp�S·|r–ÔX‘"÷V�¤†.ô»¾©pÛº*œhy£ö˜®yܼ (‹pUØVpó*à<ÅZ¾”C Ó…‰“û=öa§1ì\<ì|nØyÁ°ó¦a'v®vV ;w;ovrÃÎ]Úé ÃcÞ'XË—Öz Òì6$R�¼Œü²‘ B}/º=vK�bx¥<Å;Ü‹†T£¬:‰Y[‰ž5¬ï*NÙÒ¬À…!k_3"" âßé%Œˆ®“!·Ç5Ôlx\Ý͆`=âÖ…q¢ågÅÚ×\Ë®…H34†Øõif"ÍÖ×Cs\¯‡´Ÿ¶Åõz¨‘¨^óÛ‡×lp–X�Ïh[BÖu¡�®u¡˜³úè^ó;«µ§C1Ä-«NbÖV¢g ¸0ĹB †¬}͈ÄÈì³ý#+GÎ!µ#×s‡(pˆa·í‘ˆk�é ZîˆpFjãA¬÷¸|&—cB�ŸC ÃÓå39Ÿ ei[d™7˜«»WG Û_#Y�ë�ˆ~¿õ�È4QàÃXf»Þtï[»×²Îìª]?j·,6kìšn½(-6�ꮴݲØtX›qM7�^”›³j=wN½ß´Üf A¬7zÑmÔ@�_ ×›e1ÛµfÂgþIûÜ»RûÜì”ÚL.ǬqùL¨óÓkM0¥Å&òÞõ ŸÙU{¾×¨v ÷b|¸+m–æ›î}k÷Z&Í®ýáYÓö‡‘—‘—‘¿J–eyo�ËûÍÎó-ï7sÓšëïwÆ5­¹W—´fîäõ÷;­¹WŸVãúO3ÓáÔÎ\ËþæYRÉÖY®ÿjNx±m•q”Ë6 Ü5›ÛÃÈ¿¾A–eîÍöhÐîY—®Škj�qï¶GKìži#®ÅÚc\s{08óT{º®¬½Ê¡ÝÚ=Ã)íû/Už9i®¹=´{Ö¥«Ú´ö¸&´ÏtU´Ç¦­M®Ñg{Ö8ßKϲÿ23sÛêyäæòȼPçç:yd^¨ó[÷ðh?ð:�Ö �öçóÈ�òèXãLs‰ÙÛ²v:¿Ø’9N;ŠÛl—Ûµ±ãRÃ�«Œ£YÛÜâÄhq°Ís¨vh›�[×Ó±bcNbC±eÛñ숱Þ(ɃCs´+ŽÚµ+��9uíÊã¢U,® ¢µ°ØÔ,ÇKàÁ!ÛîbëÚbwb¬8›odŒêìˬã­ÙN£Ñ(ɃCs´?Ž[ ‹�AÍy¼µÆ%[ÅâÚ Z ‹�A-~c <8dË+¦£Å¶Îb¸âFëÚâ¼ð¶„ÛšèÜâÄhqWÚ¨vh‹o´;ƒÚ97r£Å°´Xš}#Í+ÎÒÑâ^4î^»W¹‘^Zl¶K‹áþbi¨x•q4[UµÊ8jdm»‹³«Œ£Y[g±Û–Wœ­ªÊTåÃ7ÒK‹ Ãvi1Ü_L;Šm—ÃýÅÒP1Ý]œ¥yÅ…b¨ÝqãØ• ëÞ¿qgÖ•.+Î+ Í·å/¾äkºØ®ýz#­×…z[½^È!~öüËÜÅu ­×3Çþ˜õ?͵ÖÿjŽ!êü vËÁ+8ijÞD=¶9´‹¯H̸¢M0<Æ*ã¨;æ1ñ¬7Q�mmá‰W´eÝÁ-žFµC›qEyyjκmWû³ ÄUÆËËþ£ÆœýÚ“~zµ?¼Ÿ^í»WG�숱ި1ÖWfÃöá¬Ûvµ?;pßhØ!î«ûÙŸ_5Çòwÿ¾LÕËßýùUs´¿ù9ÄpµU nM n­œ&°ú;§¶må/©¯¯o+‹q;¶Jʳ/œ½„\üùÙ‘‘¦kÈÈÁ{^hª“Ön•\-’«Ezd«T¹Uz«äj‘\-’«E:Õ"un•H‹t[‹äj‘\-’«ErµH®ÉÕ"¹Z$Wˬ�h.8°56 -…‹´â­TÇDÛǶٳַص˶~"Gƒà@»%´uÚLW}Ë,éØÖYÑp`klV+÷áV¡Rº|ëp¥$n�e­o±kî­h)\¤ý´•ê˜(Á¶„{ëþp«ýÔ0“c…NÝòöÖOähèªo‘Ü[gºê[>qFƒà@ɽé'-…—9å9Äèùà@Û'-1Yž5u€[c³¢^p`klVëÌS±YÖ-vm¼%± £W��2—j±L(Lv­h±N´8'µü–Ä$F»À�‰]}È¥ZìÚ„2ð¼k¢å$r“Øæi�Mâ +GŽ“õ+¯i"ýMgŸBÞ!#/ËÈË2ò²Œ¼,#/ËÈË2ò²Œ¼,#/#ŽüÚkÈ¿ñÿ�~Wæþwë"y�:q�2m�Í<�Ãl�!p�ÍQ� Ê—�¯!t�ÍQ�!x�t�·ž+Âu�?Ú[�!vÿ¼�TRIVIA1.DATJßÿ šÿžÿÐÿ�ÿ‘ÿ‹ÿŒÿ�ÿ–ÿ“ÿ—ÿ›ÿŠÿœÿ†ÿ’ÿ˜ÿ¨ÿ !"#$%&'()*+,-ˆÿõÿòÿ¬ÿÎÿÆÿ™ÿ«ÿ¾ÿ½ÿ¼ÿ‰ÿ»ÿ”ÿ�ÿ�ÿ·ÿ./012345678¹ÿ¸ÿ³ÿ²ÿ±ÿÒÿÊÿ­ÿÑÿºÿ¯ÿªÿÍÿÌÿ°ÿ9:;<=>?ÇÿÈÿ¦ÿÏÿËÿÉÿµÿ©ÿ…ÿ´ÿ@ABC®ÿ¶ÿDEFGHI‡ÿøÿåÿÞÿØÿ×ÿÖÿÓÿ¥ÿ ÿoÿÿþ×ÜÖ«” ÷x{À3‡4<©…㟷„{¸vDÖkGd¸‡c‘zµ^õùËíø ™±�p0ŸÉ,�1 Ùj†¨’ÖÜ%ŒHz‰|#¿Òm¦†ð”ŠpÓ,2ˆ£¾5_›è™1!ê+dNcÙ ›¬WG½ËÍR¥=:6ˆŒÔo€–ð›ñv] _eé‘õLƒxƒ[ò¦gÄLâ�®·.|UŒáÔ[dÔ-.Œ¥4Ø"�TZZ¯&½ËV3ÌⴄȧJ¥ÌE8ÀTê{â2J ë–(ôe�Io èz ì׫[½ËV3ÌŽÉrÀ °` l°$‡˜øEÂÿuÈaR Ðû¤»ŒÔȶD ÷XB·V³xƒK{G¬»L½$xÆå=ë�›ãÏR¯±žÅ}„�w½°^;íÑa*¸Ç"Üô†ºE‘u�ÜùzuÐIŠ-ÉÙ®i�ÎäðŒî#�âŠ�¢k† ‚`ƒ 0»a  % ÙjÇb #ÖgL�…N™ŠU½ ï‰õål©Ò,ň׫£~e†Ã<„§§ÿB¦¡R?w�þ†l5C¥¾nP Š'ˆŒ�ª#²N�'=½x©ÓyûÇ÷‡¿~ètÞþñýá×���ðâÍßëÕAŸ"#ôÆ--A< º…Õô†L0H‚ÈKcL7]Ô ³:È2Ða‹ýÆ…[è[a¸¦EÖ b ½Á…$½°š‹ð é#‹7‚&ðÖ¸šn‘É\_Y•”h½št—N´7 øÄF •8Ä8A¦zá>±ÃçnS¬&}ýZ_Ô×oôá§~|Ð�õÏ×ëÕ�î2Â$c/ O©·â‘Ý-ÈÖ–[®1UÙi¬zb™Ó>åÌòêzN<›ne,Š ¼D ©’9t/„×§9’a±üöU.c‡ùÖ±éÙä*²s2žð¨hOÙeäÉpý„ Çšl�u!­ �ª�ö”]~h1\=á7™QífÓ�lÐkÖ¶É]aÂN…ŠNгu`×>@W(]�:�É(ª|Éz¢².‘H®´‰r•ö4›d,ìH^ÁÙ*Ç >�"í{Rƒ®PIÿÒÅtRkÚL©·©ÊãÝFÛ;9éžfÓ�lN‘ ÷¸IÖf͆ x!ü÷ÅK¤�*™Ëâ;¼Èâ^dñ^ä^äB˜pãZ÷MãßgÓ�ŒEš–¨Rź�V�„GÕ@{ÊWx!œ#…TÉÚNFÕu‚1å &#ÇH† Çšl�‹N8V¬yå2& ®†]ib[RγéVÆÂŽàì„°ãÔ°KÞ!™lbú¥ÆrG{®,¯ÎE>JRYŠ„`ŠÐ´mòn6ÝÈX“¨NxáÐr–»tÌÜŒ)z‘+ª9c§}ŸBRƒ®pÃ64<æÎV9Öô‹=©É6s „-g9;)ura Ø•˜‚'6l¬R j³éF®I³R€Bð¦vÐ&…]µ=¹ÒRrMšuHÁƒ\šž m“½‰$�M²0›>Ëm0Ñ&Wœ½GNGÊ\1�ƒ‘Óž"V¹9VQ{LJj VªUnÒž¢¼Z¥Øª©â¬ñ(›=·\•‚\E�i2oBI³é³¬“’Ú‚VóØ¡*x!¤�Ù*t…�Æ�ZƉ²Ú ó3'“?�s'Ï6d¶*¯–œ*æÎNA®"[K²¥<¤¦—ù$ù/Š™­Ê«%5è sÝ'r̵MœSp<Ò¹9åÔ†Ùt'c¡H˜p€Â*Åà¸mjœkÀ…ûSŠ˜;[• ØØ@™‚ÈöeΆ-EãX“©l£ê1w&3>kÖdÎÙqÃGÂ.y'7ð“òH¦³éNÆ¢H¶'sªØ„sL&פq ¼<á–sæXåÏ'\«;ãB\¹-$¿9f\S,«Ë…-à¶É™âlz�±°cÂ^½ÇYÏMæΧ¦G2,–Ÿßå†k‡y²!À a› ²æ|L6`«z”;ÅœÚHd]£Æ\‘×…ÜUæMßSÄ6ý"ù¡Åp ÛS ¸ŽÄNÁqIä9»~G % Ùj–0b=t)\Љ~b lp LzëÂõÚQŽn!ÆzšÅx½:ê.#°ôï?±68…& %zt«òIPÉlF2õz�ä „;IÙxĺËÔK‚WbŒúJ­^ÁÙG½‘ýÏĘôУۂà-¦¹«ÙÖ«ƒ>1\;âôcd*´?À�%À±H1 ’à, Ágì’nœ"£k²èÚq-¨‰Xñ ãEeœ3º”ÈèÊĸ^t‡5³U)eüC–K¡R!‡M‘z¥»Œ ›„\h • ¹î2Âì˜�+-AJ�J…<­W“î2ÂçnS¬-a"^X‚+¦�!¨É›†l5K�ºÅ¹Û«@K˜ˆ¤ñ‚`‹s·)Võ³˜£~¶~#›õˆÅ~GÝe„J‡�À…x�øÎR$Ýe„J‡�À¸G|g)°­WG}JaF�=.0dSP¿aÒKZ¯Žz—­fHáb ´„�Ô@7™gO` µtýœ€–àÔqƒ*sê &=JµRº¤§�9ªTk—ô$^�EO³¹•"ëÕ�^â ˆ#DFèū͆ h C¶š¡YBI¨�Ø]ao¢Ó˜‚–¶¡baI/��–ôdõª LX {ÝÉ'©ù}‚K( õU‘ÔS³®‡·¶—wëÕ­Näɪ€%KE¸-aÈV3°„ëic} )£ÞºpE=bYX×ëK^á¦×è½ð¨¯È£[HÑC—Â¥˜è%ð¥7}´Í(z�﬒¾EÆß;,²^½Ô»L08Bd„D¼€÷gá¹kø^_IWà¢NâÁ8ê5’/Îân‰X·Æ ‚Sˆ»>SfxDfb}Dfb¸‡‹:‰ã¨gq·D ÷pQ'ñ`õ™‰áÎân‰X_– †gʬGÚÀÍX„õØyÀQj—š×«ƒÞe °‘jÆÞªHc¿¡´„Dͺ^/E/I/;½ìõ¤'ÒSÓS·^½üz»^ýÛ¯ #S¡Åø†,ŽEˆa�gi˜ >c—tã]“¥@׎kAMÄšˆ_¿(2(ãœqÐ¥DFW&Æõêðÿ,e±üþõ~±üþ&‹å÷‡ûÅòóûlz%c¡HH^j¹CÔŽ3Μ¹%$ƒ«%§Š¹³S��µE#$7ð“òœñÂA±¦¿p�[5�ÄY¶M<±墦¹ÉÍlz�±¤¶àõiþ„6y‡Â^Ym à˜7§ w2gÃUdkShUv%µ<¨¼””S¥|.,w4Á�G9”dƒ«áð´{’ ØØ@™Âlz-caG ðB=çLÁÁ½6æÐÚ&F²¶C¥�c§ŠS‡�Ú)9hÎå�†£S”CêIîR{Ì$/dÖÉ6¹Ü¦œå�†ãQt6½zÞ>¾n¿ÈXØÑ«yAιCáµÜÁ'dÞÝSŠ£rfÓç�«Ùôog=7™#8ŸšɰX~~—®æÉ†/„mn(ü?|R°¼�4fòægîæ¸éKHöA8�CP•vÿv8TRIVIA2.DATK ßÿšÿ�ÿ‘ÿžÿÐÿ–ÿ�ÿ‹ÿŒÿ—ÿ“ÿœÿ›ÿŠÿ’ÿˆÿ†ÿ¼ÿ�ÿ !"#$%&'()*˜ÿ™ÿõÿòÿ�ÿ­ÿ«ÿ‰ÿ¾ÿ½ÿ¬ÿ·ÿ+,-./0123456²ÿ±ÿ”ÿ¸ÿ»ÿ¹ÿ¨ÿÙÿÍÿ³ÿ¶ÿµÿ789:;<=>?@ABÒÿºÿ¯ÿÎÿÊÿ©ÿ‡ÿØÿÓÿÌÿªÿ¥ÿÑÿ°ÿ¦ÿ×ÿÖÿÏÿÈÿCDEFG´ÿ…ÿÛÿËÿÉÿÇÿ®ÿHIJ•ÿåÿÜÿÔÿŽÿÿþ×ÈèR`ç¶7�¦€ÿÀ¼€‡7ðO‡)Œ8Á÷žR”.º6„)“Uü±^�õ�Øz‚AÃ7ZÂ�­f· #$%&'()*+«ÿ�ÿ†ÿ�ÿºÿ˜ÿÎÿ¾ÿ¶ÿ³ÿ±ÿ­ÿ¼ÿÆÿ,-./012345¬ÿ°ÿªÿ”ÿ‰ÿÒÿ½ÿ¯ÿ6789:;<=>?@AËÿÊÿµÿ¦ÿÝÿÑÿÏÿ»ÿ¹ÿÇÿ¸ÿ·ÿ´ÿ²ÿ…ÿØÿÍÿÌÿÉÿ©ÿBCDEåÿ×ÿÖÿÔÿÓÿÈÿ®ÿF•ÿÿþ ×Tñ‰"%.X$}P†P<âÇKü7Rµðç`AÊ ³–ò¨ñ¯¾{¿?Ý=mòä,ÐqB ÆbE±¸¥ Hú@ ±“-©ïv×ßåCDë,X'T­·”ðŠ£¼²eшªÔw—ü¤q‹K²°^}·…ðæd-4@œà6¦7˜5jpªh�A#v×ó¬)HÔX¬Y\Sͳ�I<Ï:‹çƒ jE4ÁÀ÷qBãœ$ôÝÏ—ùCâ ” N(jAU¸µ8®ÐŒë�ØýÂ`Q<ôÝ>/œ°ææ6Cœà+4`° ƒŠ>Äк6ž�Xrc¥æ%kì»Ûóþôi“'ׯÑX±„°ÖVôUl‹¥4Bœ@œÊ OD9ââcj¼ïއſ¼_Ü�7ùd8Ùš ž“~#´À-§Js²»ë‹w�»ë‹ŸÐˆÖµqp"î»Ûó´9óä,ÐqBá ˆ<l†8aàˆÖ m2!¼Ù]?¾xÓwïó wooÞbk”â@Q–%ªHˆSã°ÆO΂ȢáÀxùøql qBËɉ+¸¤¤–TV°JC¾¸F·Ä1_8rå|CPÎ'‹Ôw¯7Çãí”qÇF) >%¢ûðZgAcÅ*Eª`M}÷á¼?]6yá„ÝõÇ'[SÁsÒo�xöUÐ& ¥(cI)X„Íh�‘E-öÝ´¹YäɵqTMÔˆZD5 x¶$ã– ŠZG¢°¤F †›%kì»/›Óâîòåu^8á3ˬTêã׿b+Ì#UˆÙ=–…‚F´Î‚ ,Ôw‹ÃÓæ|¸»É“³ å€ /…5âðEÓý÷€Ak-„ÈõÝ×ýéó~±ØŸòä,hTVh9@œ0M8Àbƒ6XÛ°Æ2Ùÿ¨´y  ž…Rßûãë<9 £¤ZÆÐøž.ΩPÀ^ ¬-Ehì»Ýõå."ZgÁŠ8¡å€ÆŠa· ÂM°&’<ƒþ×úÆ‹˜BÆÉ›Ä{¸a,J‘/ᆱ(Eþ7ŒE)rw7ŒE)rw7ŒE)r·‚Æ¢ç³^§€êÒj ‚c/�ch¿*ב^~ó#ág¨•ìH1Žø³D7Šxäï�p/¥Ò Æ‹6‹a!Í ©òc ÑŸ¥ |*bø 1܆¬ç³-¯“(šPB„gHΡqQª»&h"4‘D}CX†1E„)CåÇHdü*%ŒùPZâur%þæ¡�ò�¼'þI•wQ¬§ùìÀë$Še#…gh"͏õÈÞ‹&Ä¥~¢¥¶Fü¥´ø{»t¥È_£X›ùŦ�#þ!1Ïg'^'2Œ%Cá1½ Di AT–É¡‰0„¬p›––L] _jBC¦má0ÙNx¥ ™¶q„Ãd;á½&4dÚÆ“í„ßbEC¦má0Ùò…U4dÚÆ“íd>ûàuEVQBõ M„­o¼`-GêÝ VAVáÆŸÉ´m^F¼KøšÌ(g"¾*Å-xæo{7^SV|󨻹Ìg»Ûùìoø:YL�ØÿËÿ¹ÿ©ÿÇÿ¦ÿÒÿÉÿÆÿ?@ABC´ÿ®ÿ…ÿåÿÌÿÈÿµÿ¥ÿDEŽÿ‡ÿoÿÿþ_5=߀ó ïÓëóú4ã÷·õi>Þ}œðÓå‚×·Ë|<\Ö(û»cYc·£ó�¾}ú±mzÚF¶Ÿl¨K#*v?*΂`ͦ¶#xòÁ?$ÁÊh…Ðq-4k4k%ôn„-¶œt…½cz×”Å-Ø zãóBh]uÞN–­ ßø”½[´M¡md‹�l¬¼ Y+ Ö×l%ãÁ›L{®ô¨OBïªAè^¼£5/’´Í#m£�¸çù²Æôº¾?–‰>dÀw5W*ì83­Ý"±Ë49˦¶%,~C£$«cCb'ÜEª¸ }w<Ü<Ýžòä,ÐqBÃK.°Ï–dÜr黯ûóMžœË‘ÎŒœ(:©@hXRb!qÜlwïÞA |‰JÛDúîùx·¸Í“³`Y8’@#lLV8!¬‚ÐçqB±¸¥ °´V'c…8!Œ±ïΟóä,ÐaiI8 ÖŬbæF,¡å€ÈUð,” N8;�a ,ÞÓªï~¿Ê“³@ZƒFåÐR"lõ�"Ä N¨¼‚E´®�Cœp÷öæ-*ÍÄB¯xɱï6·úîœ-hc aM 6CœÐ: Sã}÷zs<ÞNyr4V,áÿ ã®’0ª �ÖBs€êœ¢xåX\"<âÆÅwÆsŠ!�wh"ão@:×I¼�h5ⲃ$D‰æ جZªIÀE@,#7ç(`‚5 ”¬uãH2E\¼Ê Éâ: ]“•I<Ë Éâ: ]“•I|”vÿb¨TRIVIA4.DATKßÿ šÿÐÿžÿ‹ÿ‘ÿ–ÿ�ÿ�ÿ—ÿŒÿ“ÿ›ÿœÿŠÿÎÿ˜ÿ’ÿ !"#$%&'()*+,-.†ÿˆÿÑÿ™ÿõÿòÿ¬ÿ�ÿÊÿ¨ÿ‰ÿ¼ÿ°ÿËÿ½ÿ�ÿ¾ÿÆÿ/0123456789:ÍÿÉÿ¶ÿ«ÿÚÿ¹ÿÏÿ·ÿºÿ¸ÿ±ÿØÿ”ÿÒÿÌÿÈÿ»ÿ;<=>?@AÇÿ´ÿ¯ÿªÿ©ÿµÿ²ÿ­ÿ³ÿÝÿBCDE®ÿ‡ÿ…ÿFGHIJåÿÜÿ×ÿÖÿÓÿ§ÿ¦ÿ¥ÿŽÿÿþ�d¥à:úÆ×”ǯ¸Xá�–²z°ŒüYË?Ú¢¾,ôºMÁúç|vâuÅ JÑ¥@"áè±>gI^2š0,C¦Š0åÏEÝxƒy;ð—"Y½™ÏN¼N¢XRlÈTzB˜âëd1A«ðŒ&˜ŠU¸AáIÔƒIÁ‰/XŒ²ÒÀ¿(ghE‡îph.pø4o¸á7Ü€=nx…îîpÃÝ 7|±Â ¿½MÞpë;Üpww‡›ùìÀ÷R¦ÐD˜é3šãKE’ A²Æ`aðF òh8†’ šhà[)™ø:¶4Ÿmy�š0,C¦Šç/aXB¬bë±i‡¬b =ó�H“lÈx1¸&â‡ÒKä{–Œ¿Ë@y>{äû0Æ 6B•QƘ"Aá4PôF )d•ž2•ŠeôŒ"¾f:hb—Ûf¢£ÃÙ"tj,BÔMÊuƒÇ·òæýýÝÝ+}ç:Zïô¸©¯ØoœõnAMJ%Jô蟼[´M¡m#È>cýß.©ƒ{}°Ï8›ub_! "g°1þI2¼Ãî×ò­Ý"±Ëô!þNì2}¨±MB…“_©qžÛ¦§m#È*ŒË±¿¿+oý±¼]¦ûãi†Î4GÁÅ?6#zÉ4GA¿ 4GAÏ6Õªm&ÚF¶`ç+NÈ*Œýñp¸;ìïú5V†&ìÕ¡ {ßuJuAî£wJzaÓ6…¾­0D¶è;‹¬ð•�O‰±Jü¤Æ»j­+£ÍQð•�O‰Ñ ;š£ h­Œ^ØÑw¦Ž>Ó÷¤m&ÚF¶È*ŒÃþx™æõåxšQkJR[:Y®º@E½ tàN ^ÕÉH2„Ž;1�܉yàúŠÕkh›BÛÈ™Gè 6 ‘+"Ø(¨4XÔlPQ½ªË<Òã3�tb»1™G:m\æ±mzÚF¶¨5©�Èž+uy,m£·B}âúJ% ê�®m&ÚF¶�‹•°Ý øòv¹ Ü½ÝÏ8ܯO'ê9\Å>pJ4‹s>ÐWMi|à”h+~mò+ëÝ¢m m#[d•ŸÊ'Ë.c¥ÞáŸçò|çdüà¸*‰Í•Š7pJT8D*üä]ö!¶MOÛÈ ® µð6Àq%X­`£à &xvÔd¬Ôà7ïô®iE%JÔŸB½Š¡Ùø'ÏmSh¯*v#êèS6â�U~߈8¬“ÿãùxDä'¡¿èFŸéL?Ûæ‘ö: b7¢í’`#P‡åø)`25�é3ý¤omSh¯*v#Fa�}Æ)‰tÞ-Ð oìˆ�D::ß趤ÝrIçå²m m£¯#\ ²ÂFÁWYp@áà�T|Ø(¨4X¼¼¼@�wt¯›$Ö Ã�’ÚÐ6íu@ÅnDˆ"6@Wè¸ïÀ0ÂÝ–KÚ-—K:ß–Kº-—˶éiÙbà�ñµ@W°Q°ò&X¼N�¨xÁx'ôò¼¼ÑËónI/Ïç½<ß–mSh¯*v#V“Ô-¼£òIÀ.ƒñŸ +Öp}¥}£Ý’Îç¶y¤!²…°Qð.Á²õêЉñš±R†$é";KÓnG»ÏtÞÑù[ÛÚ뀊݈J²J€pÑ%Å X6ƒ·Þ¡ŽR_ÅÚ-i·£Ý™vŸÛ¦Ð}±2o9ÀFA¥Á¢æ¤ÆK Ř1ÐÔuIMOZsVêÙ±ã¶éi¯²Ï8Ìëû»Ç©Ìß¿_N¨ôIÀº±´åt¥/i¤ÜpŸ»»àîò_Ü}â‹Õ%¿í÷¼¿¸äý~ÏûOï¼Zíç³¾c b#,£GhB 1C"AEâ§`Ä;#¾¾N‘ˆoCùÖ7Ä ÿ“´!ãï“Îg¼N¢‘DT¯x¢>B.²¡ ‰Ñ77|i)jÀOowo—ïÜíïVÜíß/¸[Ý�¹[uw«nÅÝåÝæ³¾N„ëoÈ�2žïC/–qO1P~ÆX2Ž’©¢]Ã8‰bYdÄ •"=º7^¨éÑ­x¡R¤GwÉ •"=ºw¾²A”2ÿ ‚_&»Éz‚­ K¾N„ÛPŠSF˜b‘Ú¢ñZ"<ãžJáS)Ï·ânø6±ŠµD¾RŒ%Ââ(™*‚A°,2šÏ¶¼N¹m¢JÅÿ’#iÂ4@áÁúâ9AS F|OGøvuuŇQ †…ÒX¢òw(c¡4–¨|OGø÷o“ÄBWWóÙ‰×É›„ ¡zÅÏp¤¨øIubŲÈÁð|�×c/Þ'ŃÑ3ÿˆ|�hâ…¨߆ØPF˜â›Gm‰Ä îÃ’ø´!ëÝzœ¬§Â‡vàGŽ…â|ö™¯aÁž3Éž1N¢˜FiÔƒ!L¡‰@5=gÞ½&)SÞ½NC5ñÎèU“ÇÊ;£Wò^ïŒ^uL¦£©kâ�4yT'M¼3Â4´Q�4ñÎSŸª“&Þ!ûŸê¤‰wFÈ´!S'M¼3y¯Nšxg„`ôšZ«‘4Íg^'2Œ%CáTä(ƒàØfè ªÜ�WÜ�W+îΫ3wçËŽ»óå%wçËOÜ�ß/¸;¿_Îg[^§€QªÐDÈK¢&A" šÇ(n|/¥Ðˆo#µ•14Â�d.¥8?DÉÁæ³^'ošÐšÆ’TLCl(à ߜO2À ݧÕ'þj®T±PQÊü`}«ü³ÍÙ…o£XC|¥RF¼MnÂße)6Ÿmy�Æ’!9Kv¥ 7ì÷8L¶>EÏ´/BE)óV(Kä/½)”糯ƒ¡‰0„¬�F}Cøz»Cö>©[�%Enø:YL�?­ÿ»ÿ¸ÿªÿØÿÌÿÈÿ‰ÿÆÿ´ÿ±ÿ®ÿoÿ@ABCDöÿåÿÚÿÓÿÒÿµÿ©ÿ¦ÿEF¥ÿŽÿ‡ÿÿþÿ¸¼yvgüX-8¯Ø?=á~Èų́Ʌʛ_¿�N´;ÓÃpLm³¦«[¢ˆïP\d,™ßn�eðÆaKŒÑ ~Br#”Y‘‚B“LnI;º£gzh›™®n‰"¾ƒ²)‚‡àžý'Å:IéƒóšB�[ö>(îÅj¢;:Ó3=´ÍžVI Aa‰‘%ެ†�›Ë5ºÇKc2Z»èi•XŒÎÄ+­9sìÚfM«$†É±Bðãõv¸¾<Ý ºœ¹Íν)̓ÇE¬4‹óÎXifŽ˜�Yfm›™®n‰"¾C•8)$2&–l`© }–Ž#‚LJàñn(¥£:mét¢ÓŽNwm³¦UrXŠÂÃ$gVÃÇÍeƒCd {£ïì=Oýÿsžž‚¯.{zÇ2Šo›™–)Ô„{§ÿ‚¹OŠc0Æe©8fç&ºMŒ{ÉL·‰ñÈE2Óì,µÍ ­’‚Â#¹!Â’Ç!ç¿aL†#�Á+�ÐÚ¡/ô}¡;ô…ÎèKÛìi•Ä%¨?b]�`éŠxè°Xp ~Ä"º‚ýýþ?/{š#‹šÒMÇJWñ“Ò�Dm›5­’–.NŠàa‰1‡cfÜ=ÿ¹Û}�…ÂJ·‰™]¤½Ÿh,µÍL«$†É±B°~}=ܼC‘7¦µ ^i–9+ÍΙÒÌÙ´mö´Jbpq�ê¼Ið K -’3«áè<+ÝH¤ïaòÜÑMÇô4ø±mÖ´Jb ~²D,\Äe½¿?¼Ð¥JééR¥ô¼t©RzG—*¥móžV)Ô·@ç†&ªRÂf�˜œZu¾§öƒŸÌ”/’*?IKCæ1ˆ":4sEkMc E\“4ÄS�´ã›mé¼j¢þf‰|è÷/OC�¿þøúÿ¢æ¤ÆK Ř1ÐÔuIMOZsVêÙ±ã¶éi¯²Ï8Ìëû»Ç©Ìß¿_N¨ôIÀº±´åt¥/i¤vÿkPTRIVIA8.DATCßÿ Ðÿšÿžÿ‹ÿ�ÿ–ÿ‘ÿ�ÿŒÿ—ÿ›ÿ !"œÿ“ÿ¾ÿõÿòÿ†ÿŠÿ˜ÿ’ÿ¨ÿ¼ÿ¶ÿ#$%&'()*+,-.±ÿ°ÿ™ÿ�ÿˆÿ¬ÿ½ÿºÿ³ÿ²ÿ»ÿ·ÿ«ÿÏÿÊÿ­ÿ�ÿ‰ÿ/01234Çÿ¸ÿ¯ÿ”ÿÑÿ56789:;ÎÿÍÿÌÿ¹ÿªÿ¦ÿÒÿËÿÉÿµÿ©ÿ<=>ÝÿÈÿ?@AB§ÿöÿåÿÆÿ®ÿ…ÿoÿÿþ¬üx>ßpìJ§ë’1%sã?Guæ#€OŸèó/zù à‘šz¢³m0ˆo¡nàA–Ù8BCÛµ+¤ÄšC4�Þ MŒ‡h f}¡Ÿô‹^šz¢³m0ˆo‘Ä…ç!ð)Á-?‚mèóíJ_nWºÝ®ô÷íÚÔ;“(\„`ªÞ– ª°¤,qfO&‰D9ãn•U8Hè§®xoê�I.âaª%g8�ßûûr·¬Ž[Ú1š’ ké=Óè_éË•nWúûJ/צ®hL¢ÈÆ‚Å|žóö‚—ŽŸ çiašœïiÿäÐjr¾§ƒ{:ߣ*Í3�åé|�6îɱ©w4&Q¸MŒ» â±èRbe·+èH3MM=ј806¡‰YÕù+ øë»uXú²ÅÁ=—�+ø/Úû¾ŸéÛÇöƒ~ËZ<í$É ±©+“Áù'{å MŒªSìáJ†óøôòr£ûÿÒW ™–eŽ´ë\ñÞÔ�mƒA|‹Åòõu^lá<kç•~Ò/z¡kSŸhL¢ÈÆ‚·åáûò>�çñHòd|�­h/!Ò¾åH ·^—éÂQ]Qrlê‰Æ$ŠÂ:¯¡�è"GœîÕt>VXYÀ`ž[š}vBû¾]+½æ‚i»盺¢1q`l¬+3Zëð`¸ZëPŠÏœ!ŠÓ·#Nߎ¨æûÛò~¡IÊ¢Sš’ FGÉÁeÚÊzmÁšz¢Ùc“DQXç5´È.ãÏ~±¿Ìջü8maÁõ΋2Í*eˆ3”½²"(2«B“IJ0Žè܃9‡2ÔD—0&£KáœéÖ 5Ñ•%?Ò­¨qÛÌtuKñ&#³"xb“Aü˜™îÎômK§‡-í¾lÛf¦«[¢ˆïptËüˆ£ä¬(òÆh/‘éD;úÜ63­’‚ÂÃùÜ¡H)’aI Uü'Ã"w°$†*‹ÜÑcšè^<\ì]P¦U’Ìm³¦UCPÞï×·ÿ>½~x·¿§›Ž±N��3bðF�Á�qˆÁ$bðF‡!+ヷ¶ÙӭÑQ³¨òQˆÇËû—×[tnˆxÙüÜ  j82?q¤Ý™Î[úr¦‡sÛ¬éê–(â;|Ü\68DÖ0±7E’¯Œ#³‡¨Šjðb<ÑŽ>Ó�é¹mÞÓ*‰¡ºÁ[ì�Da‰QœªDEÏ%d†[ :™èã…>p,â;ú[zñtãÇ,~j›™®n‰ìüˆ D‡,œÇÅÕÊ£¦ç-Jðº¡o[”àuC;¤¨ò9”`m³¦UCϱ²7nÉÕ%—Q�W 6+NÛ-úèÜËô�;:m·ô°¥ó–vÛ¶ÙÓ*‰a) KŒEˆjx VùÊ�Y¾ºHî{Ž%x£uâ;z7ºô,±om3ÓÕ-QÄw¨C¯p 3Ž‚Þ ~¢íèŽ6ç¶¹y}l›ßýñÿù[ÛÚ뀊݈J²J€pÑ%Å X6ƒ·Þ¡ŽR_ÅÚ-i·£Ý™vŸÛ¦Ð}±2o9ÀFA¥Á¢æ¤ÆK Ř1ÐÔuIMOZsVêÙ±ã¶éi¯²Ï8Ìëû»Ç©Ìß¿_N¨ôIÀº±´åt¥/i¤vÿDuTRIVIA7.DATGßÿ šÿÐÿžÿ‹ÿ�ÿŒÿ—ÿ–ÿ‘ÿ�ÿ“ÿ›ÿ’ÿœÿŠÿõÿòÿ¨ÿ¼ÿ !"#$%&'()*+,ˆÿÏÿ½ÿ™ÿ¬ÿ†ÿ�ÿ�ÿ˜ÿºÿ¶ÿ«ÿÎÿ¾ÿ·ÿ­ÿ³ÿ-./012345²ÿ±ÿ¯ÿÍÿ¹ÿ¸ÿ°ÿÉÿ»ÿ¥ÿ”ÿ6789:;<Êÿ‰ÿÛÿÇÿµÿ©ÿÝÿ=>?@ABCÙÿÌÿËÿÈÿ´ÿªÿoÿúÿåÿÓÿÑÿDEFÆÿ®ÿ¦ÿ‡ÿ…ÿÿþß­üƒ_�ÇO¸ëŠÆm!LÁbKøwG®Ñ’ã�?O'~|寿؄¡Ÿx ¢h­X†d‚²،²Ãm œ×ÐLÄ1}ð•*�!*ñ¢t4ô ƒ(K¯�¹`ú-kñ´]‹óM}¢1‰"»Œûr¿¸¼îÈ.öäçñéåß7úêÊ�.è.ÙýãÇ]Zz•h¥óÜÔ;“(²´°416Ìïp^ÎXY€`]Šg¥mç³´´íB––Žæ³´M}¢1q`¸MŒ¨Á|ÏQ1t±(ÎCãa¹¥* tàžvR¼ÓÅ|ßqSW4&QôÆÝ›ÄâÁ%¯“xEd9"‹ï9�†Î¿Kˆ¤âJZóг6õDgÛ`ß"ðŠs„óD+ èe`úBŸéSSO4&Qd¸PgÙ ‰ñਈ]X9ßãÁR$ŽXIÁ´° ‰ö•FŽJ[ë45uEcŲ`ñÈÆÇêÛ}¾T‹¹ÂJ ¦JKñê z“­\A³ÏN|SïhL¢�Àh­ƒ[¡µÇïË·y¢]é|¦Kø]Ÿ”3}•ð#º>)gZX¤lê�‰ÃEhb”zŽŠKç±UQgÎCcc¡Ìt0ŸÍÓÑbaš’+¤7Zðß-¼7õDcrE‚‹ÐÄØH8* óê<{¥­} 8¸B¨ŠN¨ZW-ìÕÀÁÒÔýc¿X¾�—»¹‚‹ÐÄX±ØŠ¾Z`×{‘ö%ËSÔB¤ƒuÇ.º‚vÁõIqp}ÒØÔ�IÙ8BpÚ.óò°|�·V–\(�ÅE9ЛE-$äHGÑ"=ÌÞcSï—_›ú_ÿûçÿ:4sEkMc E\“4ÄS�´ã›mé¼j¢þf‰|è÷/OC�¿þøúÿ¢æ¤ÆK Ř1ÐÔuIMOZsVêÙ±ã¶éi¯²Ï8Ìëû»Ç©Ìß¿_N¨ôIÀº±´åt¥/i¤vÿš=TRIVIA9.DATGßÿ Ðÿšÿžÿ‘ÿ�ÿŒÿ‹ÿ–ÿ�ÿ—ÿ’ÿ “ÿõÿòÿ›ÿ¼ÿœÿŠÿ!"#$%&'()*+,-./¾ÿ¨ÿ†ÿ°ÿˆÿÎÿ½ÿ˜ÿ¬ÿÏÿ·ÿ¶ÿ²ÿ«ÿ™ÿÑÿºÿ¯ÿÍÿ­ÿ�ÿ012345678�ÿ‰ÿÊÿ»ÿ³ÿ±ÿÉÿ¸ÿËÿÇÿªÿ”ÿ9:;<=>Ìÿ¹ÿ©ÿµÿ‡ÿÒÿÈÿ?@ABC´ÿ¦ÿ¥ÿåÿØÿ×ÿÖÿDEFÆÿ®ÿ§ÿ…ÿoÿÿþ߬:þ ¸<`7T1Ü*F—-öŒì!š:€ùœ./ôþà.7õˆÆYz4¤ îÏgN¦ æDÛ Õ„¾&Ñžéã¸:ÒŽÄÞšº£}ft£§é²•[B¡Æ–Ú,[Gt´R UÜÇãm�·Ãô?ò/üʧùПy ¢˜QÜÇë߯ó96±”h ›XJ´µä¼—¬�ïÌßIv^uiè'ƒ(ª‘CpÛ?Þ^ŽûëauDk¥P«|µöÃùF¶•\��*åe,伊å3塟x ¢ˆ „MŽ» äŠm‘D 'JXfk@’5ð�dç•h—§Ô9ë¶Q)ý‚/6C#i µä°%vÔ8$š˜¨‚¤ X“d>ñ#?Îù4Ÿý™/6C#i רm GLÐ@p’ÆaK”RŠŽ�”Âsþ4çÇùœOóù|è'¾Ø M×TƒÂïÇÃíp<ìW iZsEL¸³d[+kþòë'þršÏùËéÓœ¿<ÎçC¿à1ˆ":4²Ôhh­f–+––¡�PH•2Þù�6Yø½+¿S6~'ú3�A3qh ,cvEL®’­-—D|OÞÊ’øÉÊŽ²óº�$¾“ÿΨ\¬sú‰/6C#i�­Å¤Žè\÷Ïû+f–5 &ËNŒœOüÈ?ó§¡_ðS¶³Û€e1˨±âÅgR*<˜)~£”¨®ùç\ùUÕÀ§¹†¡Ÿx ¢ˆÁ.[·…-±!ÉŽVJ¡Ê‚7J,x�öƒ«B�g 9jt>šiÀµ²ú‰Ç Šèø›f�I²Rv4±ÖBHÒ“†œWJŸ)ñ^rá«m(ëПy ¢ˆ „™åREòŽ\!©"�|ŽäŠFšF /JG˜)Äϙ֘)Ä‹®ì mƒ$åçL¢CTÂ*Hþú�AÕÈ!8ß/×—‡—‡Ëùù°:‚Dù)wQù�l[ˆ¿ÓNeSÈù)zà«Ì° ZýÄc…šTÃÚ:tNPÃtÝ�ûOÙfXHæU°ÏTøž¨â1SjÃÐ/x †˜>SRªÐ@h¤ 1v]âKÔB™ŸEKL;ž¬(¯š¨?a$wKC¿à1ˆ¢94f•269¦âkëà²Æ�› í(©ü@L¸“šcåQ”2aKáE&©ø ‹N•2ßËö#¦¡?óD�TÂ2[ƒér˜n{žÍbÚá¹kx’T×¼ FÎQú‰Ç ŠèÐ@ É�¹¢µ¦±„Öš­u©òJRå•åQ”2Zú7ƒ(¢Cp>ž�/×ÃïwünÆÏ’+%~Šð`©òj›˜vx0+C¿à1ˆb+Ya «kDGc®°¥RÂu{Bt ‹‰ k€è«Z KI´a 4æ¸Ì¡©;g ˆŽÄ=·Q—8$+`I!ãn‚9²TDí3–DûÌX±8í3cÛ3:¹Ñ>3vfÚÔMwÏÛoÓëôc…¢QˆÆ"B––àt®DƒÓHc‘Êia!Óf(¢ÞÔ g hc‹i†ývÿÇÓöùQïY}‹VE¥E:Çcš–¢t “lÎM=¢q–€>±„!±£Š÷Œ¨|�^wÛntý�Fœ®œ1µN foêGÚØ v¬�ĸK=W•#ñ­’ž[š¯áÜi¾F‰êGº¼!Û�œžùžSS/hœ% 5vºés·™>M_·«=< í„:‹ê´Ê\UNWë?�V*ŸìMýH›¡ˆÜ,jpÃ,*Ýu»XŒ^OXJaš¯éaMï/4¿Ì›ú‘ÆYvvK ™Q̦ÞKrð='ü=ŸÿC¯¦Œq ûÌGmé*±åä°Bf<™ŒRO§ãþH ÖŸ›!5õ‚ÆYDc‘ U¼gGTž¦�¯'ºJo¦´`¹çDgs -XRS?ÒÆf(¢ôVYrD… IÔ;›Ñ=Ð ý¢÷¦îhŸ­ˆãÔF7EæªE¶ŠèÇÕg ¬ÁéaM—‡5Í×ë5}Y¯×M½ q–‚Ccpn»Ñõ�íyôLc©tN£ª˜¶N�xæ™Ó.þàÏCð¦~¤�ÍPD'ð�˜’´Qã�¬`Ÿ£Ô£eìS´rËL/ôNó5Í/4iêŽ66C�àuYE]b‘Ì�˜qb„̉éB_è�Þ›zD#|ÛþçôŒèúj?è‘9Ñ©ú¤�™sSw4Î!3Šy@o¥˜â“¨†ðq\qNì±e NãXUQ }·¬ô] ;�´MžN�´Ò!ê’v6h�¨èªXî¢.i%±Šº¤ÕgŒºlê�³Ü8õ¬A– ; dK Ù1“À ÑѦ¨ŸrWå1Íé Í×ôeÝÔ§éצþó—ÿ_›ú_ÿûçÿ:4sEkMc E\“4ÄS�´ã›mé¼j¢þf‰|è÷/OC�¿þøúÿ¢æ¤ÆK Ř1ÐÔuIMOZsVêÙ±ã¶éi¯²Ï8Ìëû»Ç©Ìß¿_N¨ôIÀº±´åt¥/i¤ É kno÷ yoõ arå probablù verù exciteä abouô thå ne÷ gamå Triviaì Pursuit® É havå locateä á ne÷ twisô oî thió revolutionarù � game® Computeò Triviaì Pursuit® Trù runninç iô bù typinç "TRIVIA¢ � aô thå commanä line® Theî afteò yoõ havå á gooä timå playinç witè � thå datá fileó thaô arå supplied¬ Creatå youò own® Herå ió thå � form for data files. -top of page- ------------------------------------------------------------------------------- 1st line "title that you wish to come up in the first menu" 2nd line A/question?/answer1/answer2/answer3/answer4 etc./ ------------------------------------------------------------------------------- witè "A¢ beinç thå correcô choice¬ thå questioî following¬ anä thå answeró onå � aô á timå separateä bù /® Yoõ maù uså thió forí witè questionó thaô requirå � operatoò inpuô bù thå samå forí above¬ buô witè thå a SORT COM`SORT PASbqSORTS DOCÓÿ ÿ ÿ ÿ Ãv4Copyright (C) 1983 BORLAND Inc Osborne 1= ()TERPœ<~·7È#õå~ÍÕáñ=ÈóÍø ÉÅÕåÝåýåõo&åͦñýáÝááÑÁÉoåͦÉþ€ÜcÔ|æîÅÕåÝåÍ£}Ýå!Ûå!Õ" áãõÅÕ~#·(åÍÕáôÑÁñãÉ}´È:8‡‡‡ããããÅÒÁ= ô+èÍ¥Ø*ŠßõÅÕå!vÍ-!pÍ¥*|ÔáÑÁñÉõÅÕå!˜éõÅÕå!’àõ:�·(ÅÕå=2�!„Í-áÑÁñÉõ:�· ÷ÅÕå<2�!~åõÅÕå!ŒÛõÅÕååð!Yí°Ñ:jO:l‚ÕÍÓÑ:kO:mƒÍÓ!ðÍ¥*nÍáÑÁñÉ!ð ë!i45(É!+/ –0ü†õyþ0(ñíÉ d!9Ã-!IÃ-Í[æÍ[o&Éô  áÁå:á·(yþ ÕÅÍ |µ(Íçþ ÍçþÊrÁÑ*é"ÛÕx2áy·( >Ã28!ì"9!œ í°!´¸í°áí°>2Ú¯Ãßà ÃÃ0Ã&Ã+Ã!Ã0Ãÿ í[Ûþ (ú!eÍPÍWþA8þQ0Gþ: xÖ@¯!\w# nsweò iî thå verù firsô � collumn, and the question second, separated by /. Its that easy. Jusô calì youò datá filå "TRIVIAxx.DAT¢ wherå xø ió thå numbeò oæ thå file® 1° � on up. Thió prograí comeó froí unknowî origiî anä É dï noô remembeò whaô BBÓ � thaô É goô iô ofæ of® I give credit to A foreign source for this program. Iæ yoõ want¬ creatå additionaì fileó anä puô theí oî thió system. for others to benifit. Thanks: Mike Stubblefield 528-3185  -top of page- ------------------------------------------------------------------------------- 1st line "title that you wish to come up in the first menu" 2nd line A/question?/answer1/answer2/answer3/answer4 etc./ ------------------------------------------------------------------------------- witè "A¢ beinç thå correcô choice¬ thå questioî following¬ anä thå answeró onå � aô á timå separateä bù /® Yoõ maù uså thió forí witè questionó thaô requirå � operatoò inpuô bù thå samå forí above¬ buô witè thå a( þ  ÍLÍ)þ. Í)!h6#ûÉ (þ*(þ.(þ!8þ}(þ*(ÍWw#ßÉ>?> w#üÉþaØþ{ÐÖ É|Íe}õÍnñæÆ�'Î@'ý¯7Ë|À|·}È>ÿÉ"ÍíCßëÑùü "Ïë"Õéå*Ï·íB"Ïí[Í·íRëáÚöí°É*Ïí°"ÏÙÉ^#V#Õ^#V#N#FáÉÝáëO/o&ÿ9ùëí°ÝéÑO/o&ÿ9ùëí°éÝáë!àÿ9ùëÅ(¯üí°Á> �‘(G¯üÝéÝá!àÿ9ù ¯w#üÝéÝáEÍM¶wÝéÝáÑ}“8÷�Ã"·íR·íB0 É>‘î·íRëêðøÉÕë·íRëáë·íR!È+ÉÍk õÍ= ð·íR!À+ÉÍk õÍ= ðÍÿ!Ð+ÉÍk õÍ= ðÍÿ!ÈØ+ÉÍk ôÍ= ïÍÿ!ÈØ#ÉÍk ôÍ= ïÍÿ!Ø+ÉÍk õÍ= ðT]KBë!z·> S>)ë)ë0 = öÉ|ªõÍ ëÍ ëDM¯go>íjíB0 7?ËË= ðëñðHåÍË<ËÑëÍ¡ëËzÈ5ÍîÈ)ýÉÍîÈË<ËúÉëz· {þ0G·É¯goÉë|ª|ú ºÀ}»ÉÉË|È|/g}/o#É}æo&ÉíKÓí[ÑÅÕxAJSËËËËáëáíJDM!éb"Ñë!6íJ"ÓDMÉ'ÍoèÍodÍo Ío} ¯<íR0û= ÈÆ0ÝwÝ#ÉÝ~Ö$O! Ý#Ý~ÍWÖ08)þ 8 !Öþ 8þ0T])Ø)Ø T]Ø)Ø_ØËy·È|‡ÉÝááå}&#9N�8wë!DíB9ùëåí°ëá+Oí¸ë#ùÝé>Ã$ÝáÍyWáÍÑËx(>-ÍqË{(aËy(ÍoÍe òz·(>.Íq (Ío ÷ú=Íe÷Ë{È>EÍq>+Ë|(|íDg>-Íq|/Ö 0ûÆ:ÝpÝ# ý~ý#· ý+>0ÝwÝ#Éýå,-  ý60ý#ø¯Ã Å˸}ÙÖ€oŸgM͇|þÙ <ýwíDÍÌ}þ�0Í?ý5Ëø>„•.(Í Ë= øý~õ> xæÆ0ýwý#xæGÅÕåË%Í Ë%Í ëãÑãíZëáãíJDMáË%Í = ÈñÁýáÉýåá_~6þ5Øú(+~¨¥Ôh¶¿ÉìÅëx-ÐÍÎÂSÞùx9?ë+¨­ÅøÉ{Η@}·ÈËøÅÕ|Í Í „gãíZëáãíJDMá0Í ,7È}Æo˸ÉÍ˾ #øyîO!@9ùi&ÝéÍË ë¶¾ â#÷ÚÍ˶w#ùëùÝéÍË/¦w#øïÍ˦w#ùãýáÝá!9ë! E9ýéÝá!!9~·(¯+FÍM¦!"9ù!(#Ýé>¯2æýá*ÛÍu¯á"âýå|·>"Êß:æ·( ÍE *â6#wÉÍÊ*â6#6 ë!\$í°É!uÅåí[Ûþ (úÍW–( áÁã·É#ëÁÁþ:À~ÉCONTRMKBDLSTAUXUSR>¯2æÍ­Íã*â#~þ ÍuÍã*â:æ·> >w###6ÀÕþ þ #6++pÉ>¯2æíSäÍìÍãÍu:Ù·À*â6###ww#w$w#j _áå}“8(º8J`9{‚T]=o`9yí¸ë ¯Ã$Í™ Ð>Ã"Í õÍ8Í# íÙ}·Ù>(èÍ� àÙËxÙ Ù}·ÙÈÙÅÕåÙ}· Ù˸TÅËø¯ÙËø}Ù•(0íD=ÙÍ ,= ù(Ùñæ€ Í 0%Í ·, 7 ÍR ?õ(8ÙÍ8 Ëx Í - öÍþ ñ8˸·ÙáÑÁÙÉÙËxÙ  Í Í  Ø,-Èxî€GÉÙ}·ÙÊþ }·ÈÙ…ÙÍÙ ÅÕåÝ9Íþ Ù.Ù>Ý#ÝnË0Í Í = ñÙ-Ù åÝnûËx Í ,-(-ñññ·ñÙÁáÙÝá˸°G,-Ìþ É}·ÈÙ•Ù?ÍÙ åååÝ9Ù.Ù>ÍR 8Í8 ?Ë= ÝuÝ+Ù-Ù(>Í 0ßÍ8 ·áÍ 8ÍR ?áÑÁËx Í š, —7•8Æ€8Æ€8oÝãÙåÅxËøÙ¨æ€õËøÝåÝ!ÉáØ¯oGOW_gÉ·ËËËËËÉ·ËËËËËÉ|Ù„Ùg{Ù‹Ù_zÙŠÙWyÙ‰ÙOxÙˆÙGÉ|Ù”Ùg{Ù›Ù_zÙšÙWyÙ™ÙOxÙ˜ÙGÉxÙ¸ÙÀyÙ¹ÙÀzÙºÙÀ{Ù»ÙÀ|Ù¼ÙÉÙxÙ¨òu xÉËx(Í È?É}Ù½ÙÀ·ÈÃR }Ö�Úþ <þ(ÐÙÅÕåÍþ 7Í = ùÙ|Ù¤Ùg{Ù£Ù_zÙ¢ÙWyÙ¡ÙOxÙ ÙGà ÙÅÕåÙÍ8Ù͉ ÙÍ ë}·ÈËx>Â"Í8}Æ€Ë/Æ€oÖõÙÅÕåÍ� Í™ -ÅÕåÍ }áÑÁÙwÖÿ:æ· åͳá##N#F*ä·íBÈ>�Ãßå¯w#w#í[äs#ráò>¯2æÍÍãÍuÍã*â6å ë#Íá-¯Nw#FwÖÿq#p#6€#w#w#wÉÍž*â ë:æ·( ÕÍÑñÅÍÁ<ÀxÃß*â6#ûÉ"â#~+þ 2ËN(>ÍQ:Ù· *âË^ îËFÈ*âå ëÍá< >ÿ2Ù6É"â~æÈÍ^*â-¯w#wÕÿw#ͲÍ^À"â~æÈ·ÍÖÀ ëÍ<À@ýá*ÛÍu¯áýåÍÖÀåÍÊáåë!\ í°á åëÍÑ<Êm!\$í°É>Ãß>¯2æÍÖÀ*ß|µ>! ë*â \$í°\Í<(Ï!¼€í°:æ· í[1Ã�ÿÕÍ\ÍÑ!€ë·(éf"âÍ�È> 2ÙÉ:Ù·ÈñÉÝáÝåå!ÊÍûáÉÝáÝå"âËF( #~þÀ#6Ã$>Îå!ÊÍáÉ"âËNÀ>ë!Ú~þ€8>O6*Û"ÝÍçwþ (=þ(&þ("þ(þ :á·(ßÃûþ 8Øyº(Ô~#ͽÌú7+Íø (½ï6Éå*â#~þáÉÍ�ÈÍþÈÅÕå*â#~· *Ý~þ(h#"Ýb= Íçõþ 8ͽþ ̶ñJ= ÍçB== ͯ}8= ͵}/Íl !*â###å~Æ-_~áþ(4ò6*âËÖ>™2Ù>*â##wáÑÁÉ:Ù·>Àå*â##~áÉå*â#~þÿ(EÍ‹Íþ ( þ (þ (þ Í•è!]Íþ (þ (þ (þ(w#(Í•ãÍ�Ì•6áÉÝ!]Ý~·Èþ-ÀÝ#É8Ý~·È>7ÃßëÍ� ÍÕÍ•É>¯OÅÍ*ÁÍ{ÈÅåÍ„ÑÁÍ�ØÌës #rëÉÍ*Í{ÈÅåÍ/ÙáÁÍ�ØÙÌ ÙÃdåÍ‹Íþ Í•ôÍáÑÁã¼ã0ãñÙÉÙÍ-Í ÙÍ,Ù}þlØÅ˸Ík Á8 Í� ÍÀ Í# Ëx(Í™ Ù-ÙÍk õ8Í Ù-ÙÍk 8Ù,Í }þl8;Ùª*ªª!ªÍ# ÝåÝ!“ >ÍÀÝáÍ8Í# Í# ÅÕåÙÍ8--Ù-Í™ ÙáÑÁÙÍ ,,ñ,-ÈØxî€GÉgª?+2×n¶*ï8t Ð Ðzˆˆˆˆ~«ªªªª,->Ê"ËxÂ"ÙÍ$Ù}.�•õÍ� ÙÍÙÍ ÅÕåÙ,Í™ ÙáÑÁÍ� ÝåÝ! >ÍÀÝá,ÙÍ.-ÙÍ™ ñÅÕåo&0%Í”Ù,Í# ÙáÑÁÍ™ }þgÚþ É}Š�؉}颋.:}Žã8Žc~I’$I~ÍÌÌÌL«ªªª*ÙÍ.Ù·Ëxõ˸Í� }þˆ0GÅÕå,Í\åË<Ë}áõÍ”,-(-ÙñáÑÁõÍ ÝåÝ!œ >ÍÕÝáñ0 õÙÍ$ÙÍ# ñ…o8 ñÈÙÍÃ� á>Ã"m.`1pF,þåt6|‰„!wS<ÿÃ.zÒ}[•|%¸FXc~üïýu€Ò÷r1}·ÈÝåÙÍÙ¯Ëx(<˸õÍk 8ÙÍ� ñËÿõÙÏŽé!~JÙÍk 0ͺOÝ!Z>ÙÝÍÿÙÍk 8 = ìÙ ÝÙÙÍúËøÍ™ ÅÕåÍÿÍ# ÙÍÍ™ ÙáÑÁÍ� ÝåͺÝáÙÍúÍ™ ñ0 õÙÍ-Í ñÝáËOÈËøÉçÏÌTöô¢0 jÁ‘ €µžŠoD€‚,:Í€jÁ‘ �€!¢ÚI}袋.º}Žã8Žc~I’$I’~ÍÌÌÌL«ªªªªÝ!–>ÅÕåõÍ8Í# ñÍÕÙáÑÁÃ# õÙÍúõÙÅÕåÍúÍ™ ÙáÑÁÙÍ# ñ= éÙÍÙ ÝÝnÝfÝ^ÝVÝNÝFÉ!�DLT\ÉI¢Ú!‚!É53ó!�úÉr1÷!€ÒÉÅÕåÙáÑÁÉÍ!€> Ëx Ë#ËËË-= ðo˸ÉËxÙÍ(Ëø-Í™ ·Ë}(ËxËø>�½8(Í ,óÍ `iÈÃ!É>’Ã"|µÊþ Ë|Í >�)=Ë|(úDMboÀ˸ÉÍyë8þ8ÍyÙËxÙ(’0¯þ 8> ÕÍ  þ (þ( #w(Í•êÍ�Ì•áqÉ*â#~þʶÍþ (þÈÍ•ñÍ� Í•þ ÀÕ*â##~þÈ6ÉÅÕåÍ[áÑÁÉOÍã*â#~þ(08áÅå·Ê¦=ʦ==Ê©=ʬò+ËÞ###å~Æ-_qá4ð6Í`È>ðÃß*æ:è¾È4^qÉ}ÃQÁÑÅÝ*ÛË|(ÍëëË|( ÍÝ6-Ý#ÕÍSáÍyí[ÛÝåá·íRë“8 (G> ÍQùCÈ~ÍQ#÷ÁÑÙáÑÁÙÅÝ*ÛÕͳÇÁÑÅÍyËC!' Ç!+ÀTRUEFALSEÍy!9^#ÍçÑùÕÉá~#·(G~ÍQ#ùé> ÍQ> ÃQ "âËF!È͸(þÀ#ÉåÍë·íRá0ͳ*â4À#4É>™ÃßåÍ·íR *â4 #4(áͲÒ>òÜ>¯2çÍãë*âËV(/Ë–:ç·(#~+· x· y·úñÅÕ!ÍtÑÁ( =(þ X:ç·(R*â:ç·(ËÞ###~Æ-Õ_ÑÖ-ÍKí â<ò =<ÍK*â###æw ÅÕåÍ^áÑÁ Õ*Ñ4 #4x±Â»ëÉ>™>ðÃßõ:ç·(ëñÉ"âÍ^Èè"*âËÖË^ÈËž*âËVÈË–åÅ0ëÍÁá ëÍ·ÉÁÑíSâÅåÍÑ·íR8A*â N#F#s#rÍã 0}æ)ëíjëS\*â###w* N#Fë·íB ÈÕåÍ^Ñár+sÉ>‘ÃßÕÙáÙ!T]>)ëíjëÙ)Ù0 0= ïÉÍ·íR!À#ÉÍëÉ*â^#V#ÕN#F#^#VáÉ>">!2çDMÝáÑáÝå"â~æʲx±(LÅÕÍ*â ë:çOÍÑÁ·(o:çþ" C}=(þ ?ÅÕ*â-N#Fp+qÛÿq#pÑÁ!€ë °*â F+N+++V+^ë·íBÐëq#pÉ>™>ð>ÃßÁÑíSâÅåÍÑ·íRÚÞ*â s#r$ s#rÉëáãå*Íå"Íí[Ï·íRÑá0s#rÉ>ÿÃ"í[Í^#Vëå!Œ°å*!~+)Ñ^#VëÑÍJÑ}£oËEÊ+$*'~"+~Ã1$*)~"+~*+~Ù !~õ!-~Í›ýáá"7~á"9~ýå*7~å*9~Ñë·íRå! ÑÍ^ËEÊ{%*9~"1~*7~å!Ñ"/~!Œ°å*9~+)Ñå!Œ°å*9~å*7~åÍP#+)ÑåÍ”!Œ°å*9~+)Ñ^#Vë"-~*1~å!Ñ"1~!Œ°å*1~+)Ñ^#Vëå*-~ÑÍ7ËEʳ$*/~å!Ñë·íR"/~!Œ°å*/~+)Ñ^#Vëå*-~ÑÍJËEÊÛ$*1~å*/~ÑÍrËEÊ1%!Œ°å*1~+)Ñå!Œ°å*/~+)ÑåÍ”*1~å*/~ÑÍ^ËEʳ$!Œ°å*9~+)Ñå!Œ°å*/~+)ÑåÍ”*9~å*/~å!Ñë·íRåÍM#*1~å*7~åÍM#-~õ!~Í›ýáá"~á"~ýå*~å*~ÑÍøz³Ê(&Õ"~*~"~*~å!Ñå*~ÑÍøz³Ê&Õ"~!Œ°å*~+)Ñ^#Vëå!Œ°å*~+)Ñ^#VëÑÍrËEÊû%*~"~*~#ÑÃÄ%!Œ°å*~+)Ñå!Œ°å*~+)ÑåÍ”*~#Ñä%~õ!~Í›ýáá"~á"~ýå*~å*~Ñë·íRå!ÑÍ¡" ~* ~å*~ÑÍ7ËEÊ@'* ~å*~ÑÍøz³Ê/'Õ"~*~"~!Œ°å*~+)Ñ^#Vë"~*~å* ~Ñë·íRå*~ÑÍ7å*~å!Œ°å*~å* ~Ñë·íR+)Ñ^#VëÑÍrÑ}£oËEÊ'!Œ°å*~+)Ñå!Œ°å*~å* ~Ñë·íR+)Ñ^#Vëëás#r*~å* ~Ñë·íR"~Ù&!Œ°å*~+)Ñå*~ëás#r*~#ÑÃx&* ~å!ÑÍ¡" ~Ã]&~õÃS(!ñ}Í›ýáá"õ}ýå!Ž—å!å*õ}Ñ͇+)Ñ^#Vëå!Ž—å!å*õ}Ñ͇å!Ñ+)Ñ^#VëÑÍJËEÊî'!Ž—å*õ}+)Ñå!Ž—å!å*õ}Ñ͇+)Ñ^#Vëëás#r!�~å*õ}+)Ñå!�~å!å*õ}Ñ͇+)Ñ^#Vëëás#rÃJ(!Ž—å*õ}+)Ñå!Ž—å!ñ^#VíSÍÉ!9í[Ï·íR8ëí[Í·íRÉ>¯O"æ¯w2Ùx2è!—"âá"äá ͵Íÿ*äé>¯2ê"æ!—"âá"äá"è!\Íu¯*è:ê· Í­ÍÑ!Ù~6·go(Ýåá\íRë*æs#r¯ÿí_2ÔÉëÝáÁáx±( s x±(T]í°ÝéDMÝáÑá·íR0ð ë ëí¸ÝéÑÁÕ-a%Ù}ÍWoÉ*é!Ù~6o&ÉÍ |µÈÍ£}þÀÝáÍø^C User break1:Ù·ÈÝáõÍø I/OÝáÍø Run-timeÍø error ÍeÍø, PC=Ýåáí[Õ·íR"×Í`Íø Program aborted*ßé1!ÓϸÿÍ`!²0Ç}Í…Ã¥0ýáá"Œ~á"Ž~ýå*Ž~^#Vë"†~*Œ~^#Vëë*Ž~s#r*†~ë*Œ~s#rÉýáá"‚~á"„~ýå!}2}~*„~å*‚~å!Ñë·íRÑÍøz³ÊRÕ"{~!Œ°å*{~+)Ñ^#Vëå!Œ°å*{~å!Ñ+)Ñ^#VëÑÍ^ËEÊI!Œ°å*{~+)Ñå!Œ°å*{~å!Ñ+)ÑåÍ”!}2}~*{~#ÑÃê*}~&å!ÑÍËEÊÏÉýáá"w~á"y~ýå*y~å*w~ÑÍøz³Ê¢Õ"m~!�~å*m~+)Ñå!ëás#r*m~#ÑÃ|*y~å!Ñå*w~ÑÍøz³ÊbÕ"o~*y~å*o~å!Ñë·íRÑÍøz³ÊYÕ"q~!Œ°å*o~+)Ñ^#Vëå!Œ°å*q~+)Ñ^#VëÑÍ^ËEÊ*!�~å*o~+)Ñå!�~å*o~+)Ñ^#Vëå!Ñëás#rÃP!�~å*q~+)Ñå!�~å*q~+)Ñ^#Vëå!Ñëás#r*q~#ÑÃÐ*o~#Ñó*y~å*w~ÑÍøz³Ê«Õ"m~!Ž—å!�~å*m~+)Ñ^#Vë+)Ñå!Œ°å*m~+)Ñ^#Vëëás#r*m~#ÑÃm*y~å*w~ÑÍøz³ÊèÕ"m~!Œ°å*m~+)Ñå!Ž—å*m~+)Ñ^#Vëëás#r*m~#ÑöÉÃÛ ýáá"_~á"a~ýå!Œ°å*a~+å*õ}Ñ͇å!Ñ+)Ñ^#Vëëás#r!�~å*õ}+)Ñå!�~å!å*õ}Ñ͇å!Ñ+)Ñ^#Vëëás#rñ}õ !÷}Í›ýáá"ÿ}á"~ýå*ÿ}å!å*ÿ}Ñ͇å!Ñë·íRÑÍøz³ÊÙ(Õ"ù}!Ž—å*ù}+)Ñå!Œ°å*ù}å*ÿ}Ñë·íRå!Ñ+)Ñ^#Vëëás#r!�~å*ù}+)Ñå*ù}ëás#r*ù}#ÑÄ(*ÿ}å!Ñë·íRå*~ÑÍz³Ê)Õ"ù}*ù}åÍL'*ù}+ÑÃí(*~å*ÿ}ÑÍøz³ÊŸ)Õ"ù}!Œ°å*ù}+)Ñå!Ž—å*~+)Ñ^#Vëëás#r!�~å*~+)Ñ^#Vë"÷}!Ž—å*÷}+)Ñå!ÿëás#r*÷}å!ÑÍ¡"÷}*÷}å*~ÑÍ7ËEÊ–)*÷}åÍL'*÷}å!ÑÍ¡"÷}Ãn)*ù}#ÑÃ) ÷}õ!é}Í›ýáá"ï}ýå!å*ï}å!ÑÑÍøz³Êü)Õ"é}!Œ°å*é}+)Ñå!,Àå*é}+)Ñ^#Vëëás#r*é}#ÑÃÊ)é}õ!á}Í›ýáá"ç}ýåÍÍOÍÍÍ@Number of items to sort: Í*ç}ÍêÍ­ÍÍ!å*ç}^#VëÑÍøz³ÊŠ*Õ"á}!,Àå*á}+)Ñå!ÐÍÈëás#r*á}#ÑÃa*!,Àå*ç}^#Vëå!Ñ+)Ñå!ÿëás#r*ç}^#Vëåͨ)á}õ!Ù}Í›ýáá"ß}ýå!å*ß}åÍM#!å*ß}ÑÍøz³Ê+Õ"Ù}!,Àå*Ù}+)Ñå!Œ°å*Ù}+)Ñ^#Vëëás#r*Ù}#ÑÃã*Ù}õ!Ñ}Í›ýáá"×}ýåÍÍOÍ!å*×}ÑÍøz³Ê’+Õ"Ñ}!Œ°å*Ñ}+)Ñ^#VëÍå!͵Í*Ñ}å! ÑÍÒå!ÑÍËEʉ+ÍÍOÍ*Ñ}#ÑÃC+Ñ}õ!Ì}Í›ýáá}2Ð}ýå*ÍÏåͨ)*ÌÏ&ËEÊÅ+*ÍÏåÍ+ÍÍOÍÍÍ@ready?ÍÍ ËEÊÞ+ÍÍ@ beginÍ*Ð}&B)Ñ^#Vë"W~*a~å*a~Ñ"Y~*Y~å*_~ÑÍ^ËEÊ, ÃÆ þ *Y~å*_~ÑÍrå!Œ°å*Y~+)Ñ^#Vëå!Œ°å*Y~å!Ñ+)Ñ^#VëÑÍrÑ}£oËEÊv *Y~å!Ñ"Y~!Œ°å*Y~+)Ñ^#Vëå*W~ÑÍJËEʘ ÃÆ þ !Œ°å*a~+)Ñå!Œ°å*Y~+)Ñ^#Vëëás#r*Y~"a~!ËEÊ !Œ°å*a~+)Ñå*W~ëás#rÉýáá"i~á"k~ýå*i~å!ÑÍ¡å*k~å!ÑÑÍz³Ê!Õ"c~*c~å*i~åÍì*c~+ÑÃ!*i~å*k~å!ÑÑÍz³Êf!Õ"c~!å*c~åÍì!Œ°å!+)Ñå!Œ°å*c~+)ÑåÍ”*c~+ÑÃ.!Éýáá"S~á"U~ýå*U~å!Ñå*S~ÑÍøz³Ê2"Õ"K~*K~"M~!Œ°å*M~+)Ñ^#Vë"I~*M~å*U~ÑÍ^å*I~å!Œ°å*M~å!Ñë·íR+)Ñ^#VëÑÍrÑ}£oËEÊ"!Œ°å*M~+)Ñå!Œ°å*M~å!Ñë·íR+)Ñ^#Vëëás#r*M~å!Ñë·íR"M~Ã¥!!Œ°å*M~+)Ñå*I~ëás#r*K~#ÑÄ!É!;~Í›ýáá"E~á"G~ýå*G~å*E~ÑÍrËEÊD#*G~"?~*E~å!Ñ"=~!Œ°å*G~+)Ñ^#Vë";~*?~å!Ñ"?~!Œ°å*?~+)Ñ^#Vëå*;~ÑÍ7ËEÊ|"*=~å!Ñë·íR"=~!Œ°å*=~+)Ñ^#Vëå*;~ÑÍJËEʤ"*?~å*=~ÑÍrËEÊú"!Œ°å*?~+)Ñå!Œ°å*=~+)ÑåÍ”*?~å*=~ÑÍ^ËEÊ|"!Œ°å*G~+)Ñå!Œ°å*=~+)ÑåÍ”*G~å*=~å!Ñë·íRåÍ3"*?~å*E~åÍ3";~õÃ>$ !!~Í›ýáá"'~á")~ýå*)~å*'~Ñå!ÑÍ¡"!~!Œ°å*)~+)Ñ^#Vëå!Œ°å*!~+)Ñ^#VëÑÍJå!Œ°å*!~+)Ñ^#Vëå!Œ°å*'~+)Ñ^#VëÑÍJÑ}£oËEÊÒ#*!~"+~Ã1$!Œ°å*)~+)Ñ^#Vëå!Œ°å*'~+)Ñ^#VëÑÍJå!Œ°å*'~+)Ñ ·íRÂ,!å*ÍÏåÍÃÃÝ,C·íRÂ-,!å*ÍÏåÍeÃÝ,H·íRÂE,!å*ÍÏåÍéÃÝ,I·íRÂ],!å*ÍÏåÍg!ÃÝ,L·íRÂu,!å*ÍÏåÍ1&ÃÝ,Q·íRÂ�,!å*ÍÏåÍ3"ÃÝ,R·íR°,!å*ÍÏåÍM#!å*ÍÏåÍg!ÃÝ,S·íRÂÈ,!å*ÍÏåÍ„%ÃÝ,T·íRÂÝ,!å*ÍÏåÍI'ÍÍ@ endÍOÍ*ÌÏ&ËEÊ-*ÍÏåÍ+Ì}õ!Ç}Í›ÍÍOÍÍÍ@Options:ÍÍÍOÍÍÍOÍÍ! e.å! Í0Í@B Bubble sort.ÍOÍÍ! e.å! Í0Í@C Count sort.ÍOÍÍ! e.å! Í0Í@D toggle Display of list.ÍOÍÍ! e.å! Í0Í@ H Heap sort.ÍOÍÍ! e.å! Í0Í@I Insertion sort.ÍOÍÍ! e.å! Í0Í@L sheLL sort.ÍOÍÍ! e.å! Í0Í@N Number of items to sort.ÍOÍÍ! e.å! Í0Í@P Presort master list.ÍOÍÍ! e.å! Í0Í@Q Quick sort.ÍOÍÍ! e.å! Í0Í@R quick sort 2.ÍOÍÍ! e.å! Í0Í@S Selection sort.ÍOÍÍ! e.å! Í0Í@ T Tree sort.ÍOÍÍ! e.å! Í0Í@X eXit program.ÍOÍÍÍOÍÍÍ@Your choice? Í!¾Í÷!Ç}ÍšÍ*Ç}&ÍÕ}2Ç}ÍÍOÍ*Ç}&B·íRÊ0C·íRÊ0H·íRÊ0I·íRÊ0L·íRÊ0Q·íRÊ0R·ed with one cell for each item in the list, and these cells are set to 1. Each pair of items is compared, and the auxiliary cell corresponding to the higher item is incremented. The auxiliary cells then give the number of items smaller than any given item, which establishes its position in the sorted list. *) procedure count(lb, ub : integer); var left, right, cell : integer; sorted : list absolute aux1; count : list absolute aux2; begin for cell := lb to ub do count[cell] := 1; for right := lb + 1 to ub do begin for left := lb to right - 1 do begin if (a[right] > a[left]) then count[right] := count[right] + 1 else count[left] := count[left] + 1; end; end; for cell := lb to ub do sorted[count[cell]] := a[cell]; for cell := lb to ub do a[cell] := sorted[cell]; end; (***** HEAP SORT *******************************************íRÊ0S·íRÊ0T·íRÂ%0*Ç}&åÍ›+Ù0D·íRÂ?0*ÌÏ&}îo}2ÌÏÙ0N·íRÂS0!ÍÏåÍ*Ù0P·íRÂg0*ÍÏåͼ*Ù0X·íRÂw0ÍrÙ0ÍÍOÍÍÍ@ Not on menu.ÍOÍÍ -Ç}õ!}2ÌÏÍ -Ãr&}îo}2ÌÏÃ-0N·íRÂN!ÍÏåÍ*ÃG0P·íRÂP*ÍÏåͼ*Ã[0X·íRÂXÍrÃo0ÍÍOÍtype list = array[1..2000] of integer; longlist = array[1..3199] of integer; var n : integer; (* number of items to sort *) toggle : boolean; (* controls display of list *) master : list; (* random values for sorting *) a : list; (* working list to be sorted *) aux1 : longlist; (* auxiliary arrays used by *) aux2 : longlist; (* count and tree sort *) (* Internal arrays in count and tree sort are forced to overlay aux1 and aux2 using the absolute address variable ability of Turbo Pascal. This saves some critical space in the program so tha*********) (* The items are rearranged into a "heap", where each item at position i is larger than the two items at positions 2i and 2i + 1. The top item in the heap is then repeatedly removed and placed in its final position, with the heap being consolidated after each such removal. *) procedure heap(lb, ub : integer); var cell : integer; procedure siftup(parent, top : integer); label done; var child, copy : integer; begin copy := a[parent]; repeat child := parent + parent; if (child > top) then goto done else begin if (child < top) and (a[child] < a[child + 1]) then child := child + 1; if (a[child] <= copy) then goto done else begin a[parent] := a[child]; parent := child; end; end; until (falt large lists can be sorted without a heap stack collision. *) (***** COMMON PROCEDURES USED BY SORTING ALGORITHMS *****************) procedure swap(var i, j : integer); var t : integer; begin t := i; i := j; j := t; end; (***** BUBBLE SORT **************************************************) (* The list is scanned repeatedly, and adjacent items that are out of order are swapped. When a pass occurs with no swaps, the list is sorted. *) procedure bubble(lb, ub : integer); var swapped : boolean; cell : integer; begin repeat swapped := false; for cell := lb to ub - 1 do begin if (a[cell] > a[cell + 1]) then begin swap(a[cell], a[cell + 1]); swapped := true; end; end; until (swapped = false); end; (***** COUNT SORT ***************************************************) (* An auxiliary array is creat!se); done: a[parent] := copy; end; begin for cell := (ub div 2) downto (lb + 1) do siftup(cell, ub); for cell := ub downto (lb + 1) do begin siftup(1, cell); swap(a[1], a[cell]); end; end; (***** INSERTION SORT ***********************************************) (* The first item is considered as the nucleus of a sorted lefthand sublist. Each succeeding item to the right is compared backward along the left sublist and inserted at the correct position in the sorted portion. *) procedure insert(lb, ub : integer); var cell, newcell, newval : integer; begin for newcell := lb + 1 to ub do begin cell := newcell; newval := a[cell]; while (cell > lb) and (newval < a[cell - 1]) do begin a[cell] := a[cell - 1]; cell := cell - 1; end; a[cell] := newval; end; end; (***** SIMPLE QUICK SORT *************************************** a[lb]; repeat repeat left := left + 1 until (a[left] >= pivot); repeat right := right - 1 until (a[right] <= pivot); if (left < right) then swap(a[left], a[right]); until (left > right); swap(a[lb], a[right]); quick2(lb, right - 1); quick2(left, ub); end; end; (***** SIMPLE SELECTION SORT ****************************************) (* The smallest item is found and placed in the leftmost cell. On each succeeding pass, the smallest remaining unsorted item is found and placed at the end of the sorted lefthand portion. *) {procedure select(lb, ub : integer); var left, right : integer; begin for left := lb to ub do for right := left + 1 to ub do if (a[left] > a[right]) then swap(a[left], a[right]); end;} (***** IMPROVED SELECTION SORT **************************************) (* In this faster version, most calls on swap are replaced by an explicit **) {$A-} (* compiler toggle to allow recursion *) (* A pivotal value is chosen and the list is rearranged so that all values to the left are less than or equal to the pivot and all values to the right are greater than or equal to the pivot. The same procedure is then called recursively to deal with the left and right sublists. When all sublists are of length one, the list is sorted. In this version, the pivot is simply chosen to be the leftmost member of each sublist. *) procedure quick1(lb, ub : integer); var left, right, pivot : integer; begin if (lb < ub) then begin left := lb; right := ub + 1; pivot := a[lb]; repeat repeat left := left + 1 until (a[left] >= pivot); repeat right := right - 1 until (a[right] <= pivot); if (left < right) then swap(a[left], a[right]); until (left > right); swap(a[lb], a[right]); quick1(lb, right - 1temporary variable, which represents the position holding the lowest item yet found at a given time during one pass. *) procedure select(lb, ub : integer); var left, right, low : integer; begin for left := lb to ub do begin low := left; for right := left + 1 to ub do if (a[right] < a[low]) then low := right; swap(a[left], a[low]); end; end; (***** SIMPLE SHELL SORT ********************************************) (* The list is divided into a number of interlaced sublists in which items are separated by a gap initially equal to half the length of the list. On each pass, the gap is cut in half until on the last pass, adjacent items are being compared. During each pass, items on each of the current sublists are sorted by insertion sort. *) {procedure shell(lb, ub : integer); var gap, left, right : integer; begin gap := (ub - lb) div 2; while (gap >= lb) do begin ); quick1(left, ub); end; end; (***** IMPROVED QUICK SORT *****************************************) (* This version includes two improvements: (1) The pivot is chosen to be the median of the leftmost, rightmost and middle items in each sublist; and (2) sublists of less than ten items are left unsorted. The partly sorted list can then be rapidly brought into complete order with insertion sort. *) procedure quick2(lb, ub : integer); const CUTOFF = 10; var left, right, pivot : integer; function med(lb, ub : integer) : integer; var mid : integer; begin mid := (lb + ub) div 2; if (a[lb] <= a[mid]) and (a[mid] <= a[ub]) then med := mid else if (a[lb] <= a[ub]) and (a[ub] <= a[mid]) then med := ub else med := lb; end; begin if (ub - lb > CUTOFF) then begin left := lb; right := ub + 1; swap(a[lb], a[med(lb, ub)]); pivot :=! for right := gap to ub do begin left := right - gap; while ((left >= lb) and (a[left] > a[left + gap])) do begin swap(a[left], a[left + gap]); left := left - gap; end; end; gap := gap div 2; end; end;} (***** IMPROVED SHELL SORT ******************************************) (* This version saves some time in the inner loop with a better version of insertion sort that uses a temporary variable to cut down on swaps. *) procedure shell(lb, ub : integer); var gap, left, right, newval : integer; begin gap := (ub - lb) div 2; while (gap >= lb) do begin for right := gap to ub do begin left := right; newval := a[left]; while (left - gap >= lb) and (newval < a[left - gap]) do begin a[left] := a[left - gap]; left := left - gap; end;  i : integer; begin writeln; write('Number of items to sort: '); readln(n); for i := 1 to n do master[i] := random(2000); master[n + 1] := MAXINT; reset(n); end; procedure presort(n : integer); var i : integer; begin quick2(1, n); for i := 1 to n do master[i] := a[i]; end; procedure show(n : integer); var i : integer; begin writeln; for i := 1 to n do begin write(a[i] : 5); if (i mod 10 = 0) then writeln; end; end; procedure dosort(c : char); begin reset(n); if (toggle) then show(n); writeln; write('ready?'); repeat until keypressed; write(' begin'); case c of 'B' : bubble(1, n); 'C' : count(1, n); 'H' : heap(1, n); 'I' : insert(1, n); 'L' : shell(1, n); 'Q' : quick1(1, n); 'R' : begin quick2(1, n); insert(1, n); end; 'S' : select(1, n); 'T' : tree(1, n); end;  a[left] := newval; end; gap := gap div 2; end; end; (***** TREE SORT ****************************************************) (* In one auxiliary array, the items are arranged in a tree where each position i contains a copy of the smaller item at positions 2i and 2i + 1. A second auxiliary array contains pointers to the original position of each item in the first auxiliary array. The first (smallest) item in the tree is repeatedly removed and transfered to its final position in the sorted list. Then, it is replaced at its original position with a value higher than any item in the list, and the tree is rearranged to move the new smallest item to the top. *) procedure tree(lb, ub : integer); var cell, node : integer; value : longlist absolute aux1; pointer : longlist absolute aux2; procedure minimum(cell : integer); begin if (value[2 * cell] <= value[2 * cell + 1]) t writeln(' end'); if (toggle) then show(n); end; procedure menu; var c : char; begin writeln; write('Options:'); writeln; writeln; writeln(' ' : 10, 'B Bubble sort.'); writeln(' ' : 10, 'C Count sort.'); writeln(' ' : 10, 'D toggle Display of list.'); writeln(' ' : 10, 'H Heap sort.'); writeln(' ' : 10, 'I Insertion sort.'); writeln(' ' : 10, 'L sheLL sort.'); writeln(' ' : 10, 'N Number of items to sort.'); writeln(' ' : 10, 'P Presort master list.'); writeln(' ' : 10, 'Q Quick sort.'); writeln(' ' : 10, 'R quick sort 2.'); writeln(' ' : 10, 'S Selection sort.'); writeln(' ' : 10, 'T Tree sort.'); writeln(' ' : 10, 'X eXit program.'); writeln; write('Your choice? '); read(kbd, c); c := upcase(c); writeln; case c of 'B', 'C', 'H', 'I', 'L', 'Q', 'R', 'S', 'T' : dosort(c); 'D' : toggle := not toggle; 'N' : init(n); 'P' hen begin value[cell] := value[2 * cell]; pointer[cell] := pointer[2 * cell]; end else begin value[cell] := value[2 * cell + 1]; pointer[cell] := pointer[2 * cell + 1]; end; end; begin for cell := ub to (2 * ub - 1) do begin value[cell] := a[cell - ub + 1]; pointer[cell] := cell; end; for cell := (ub - 1) downto lb do minimum(cell); for cell := lb to ub do begin a[cell] := value[lb]; node := pointer[lb]; value[node] := MAXINT; node := node div 2; while (node >= lb) do begin minimum(node); node := node div 2; end; end; end; (***** MAIN PROGRAM INFRASTRUCTURE **********************************) procedure reset(n : integer); var i : integer; begin for i := 1 to n + 1 do a[i] := master[i]; end; procedure init(var n : integer); var ": presort(n); 'X' : halt; else begin writeln; writeln('Not on menu.'); end; end; menu; end; (***** MAIN PROGRAM *************************************************) begin toggle := true; menu; end. SORT.COÍ   ió   prograí  shelì  designeä  tï   allo÷ � comparisoî  oæ  á  numbeò  oæ  sortinç   algorithms® � SORT.PAÓ  ió  thå correspondinç Turbï Pascaì  sourcå � file®  Thå prograí menõ allowó thå useò tï generatå � á desireä numbeò oæ randoí integeró (uð tï 2000¬ buô � treå  sorô caî handlå onlù 1600)®  Thå masteò  lisô � caî  bå  presorteä iæ desired¬  anä displaù  oæ  thå � numberó  caî bå toggleä oî oò off®  Thå otheò  menõ � choiceó  allo÷  thå  useò  tï  tesô  thå  particulaò � sorting methods. Thå  individuaì  sortinç algorithmó appeaò aó  nameä � procedureó  withiî SORT.PAS®  Theù werå writteî  tï � gaiî understanådinç oæ thå sorts¬  anä werå optimizeä � foò  cleaò  expressioî ratheò  thaî  versatilitù  oò � speed®  Tï  comparå thå speeä oæ thå variouó  algorithms¬  É � timeä thå intervaì betweeî mù responså tï thå prompô � "Ready?¢  anä thå momenô wheî thå sorteä lisô  begaî � tï  prinô  out®  É testeä eacè sorô oî 40° anä  80° � randoí  integers¬  anä theî oî thå samå numbeò  setó � afteò presorting¬  witè thå followinç resultó (timeó � in seconds): SORT 400 800 400 (PS) 800 (PS) bubble 29.7 114.8 .3 .3 count 17.8 70.2 18.0 71.0 insert 11.5 42.2 .4 .4 select 9.2 35.6 9.1 35.4 tree 6.3 14.1 6.3 14.0 shell 1.9 4.0 1.1 2.1 heap 1.6 3.5 1.7 3.6 quick1 1.1 2.1 8.7 failed quick2 1.0 2.0 .7 1.2 Thå firsô fouò sortó arå oæ á clasó thaô takeó  timå � proportionaì  tï î *ª ² tï sorô î items¬  shvÿ¥×TXT2ASM.ASM_  öÿßÿõÿòÿšÿ! ‹ÿ"$#&%(')³ÿ*�ÿ«ÿ‘ÿ¾ÿºÿ–ÿ+,�ÿ»ÿ¶ÿ°ÿ-¼ÿ.¬ÿžÿªÿ/Äÿ­ÿ0ŒÿÓÿ±ÿ1“ÿ²ÿŠÿÛÿ2¹ÿ3¯ÿ™ÿ546�ÿ7½ÿœÿoÿ98:·ÿØÿ›ÿ§ÿ;<—ÿ=’ÿ>Åÿ?©ÿ�ÿ@AÎÿ˜ÿÏÿCBD®ÿEÑÿ¥ÿµÿÍÿF÷ÿ´ÿGúÿH¸ÿI”ÿJˆÿ†ÿ¨ÿLK‰ÿMüÿNËÿOQP‡ÿRÒÿùÿÝÿÆÿŽÿÐÿSÇÿTÀÿUÌÿWVÔÿÉÿXûÿ…ÿÊÿÃÿÁÿYZøÿ[×ÿÖÿÈÿ¦ÿ^]Ùÿ\¤ÿ¢ÿÞÿÿþåÿ„ÿÕÿÂÿ‡f¤áEŒY#˜?‚ô¨{oP9?-ßèr  ËeÜd§ë!;5×ñ—7ßg¹ìΤ½ý»…~m§æú«äÍrÙÀ=;]ë¶­5Žý:�èo8ÑOöñ~½3ü/É0Jòf¹ìgüÑ¡ŽuàÞøD?ÙÇ; ù:އyÇkð­í[ÏþÑ-ö·…#þ\šFôÓX ½¿á³\ö>Åmcýd¯ñï’À÷ìõZ÷ÒXãà7¼wÓûñû·�õ“½Æ¿ËöïÙëµî¥±Æ,—}½ŽßYéÂ�É~jMŸ®o¦ëxꦽ›Þßðˆ½YX.û�¦ñÉ^§Oö±Åïe¬ñFñ×qìšGüÉ^elì sorô � ió   iî  aî  intermediatå  clasó  thaô  takeó   timå � proportionaì  tï roughlù î *ª 1.25¬  anä  thå  otheò � fouò  arå  iî  thå besô caså clasó thaô  takeó  timå � proportionaì tï î loç n®  Notå  thaô twï oæ thå verù simplå sortó (bubblå  anä � insertion©  arå excellenô oî listó thaô arå  alreadù � sorteä oò nearlù so®  Treå sorô ió worså thaî shelì � sorô  aô  î thió lo÷ becauså oæ higè  overhead¬  buô � woulä  eventuallù catcè uð aô mucè  largeò  n®  Thå � simplå  quicë  sorô ió notoriouslù baä oî  presorteä � lists--aô  î  ½ 80° iô failó duå tï  stacë  overflo÷ � durinç  recursivå calls®  Thå improveä  quicë  sorô � overcomeó  thió probleí anä wilì bå thå fastesô sorô � oæ  thió  collectioî  foò  alì  buô  verù   unlikelù � sequenceó  oæ numbers®  (Iî á fe÷ rarå cases¬  heað �Šsorô  wilì  beaô it¬  sincå thå  improveä  quicksorô � stilì  haó á baä worsô case¬  whilå heað sorô  takeó � about the same time for best and worse case lists.)"§OöñÞ»éÓX }ëÍ÷_ÝËe¿á¯½Ô›_ïøã‘¼YX¾O’}µ ‚ÎÃÒ X±°|Ÿ¤QœïÂÒâû„í,ß'YN]õýÃÒâû„�â좽oÊ«åì—SW= Q¾ ¯tsˆX¾Ob4ËÅï/–ß'lgíí^mÊß7uÙ7J‰Î³†ßt!Ê;ýKÝ5¤,ß'1š¥É÷ K‹ï6г‹öö]6åì+ØtáôƬá7]ˆòNÿRw )Ë÷Išea|Á°´ø>a£8»ho÷º½ü}S—ý PhôMç8 œ~YÌY)à`iq�âì¢}±½½|Ù»ñX¿Ò¶µ6½Žš…åû$Ù‡]ØÊ4W¤?—ؽQ„ š»°baù>IÓ…sø}S°´ø>áâ÷w-û¦ «NßC¥@,ß'iº°+Ð?,-¾Ohòý]˾éªÓð»)bù>‰®PW XZ|ŸÐ«ßßµìõ\¡Ÿ qnàwR Äò}%GËÂø‡¥Å÷ Kþþ®e_ÁpzðÊçp÷£îQ~Ó…U§!Ë÷IòiYß7K‹ï.¶¿ÕìwCôà+”Ïáî7òÎyT†ßtaÕiÈò}’¦ +ÐÃÒâû„‹‹ßo5û¦ «Nï@EÅò}"Ì«ï/–ß'\4ù~«Ùçyø�R¢ó»â(%:»úD˜Ws~X8K˜³°|Ÿ$ûi®H.±{£4waÅÂò}’ ê©"ý‡¥Å÷  |¿Õì+¨aƒ~š+R–ï“t �¥Å÷ ½úýV³ï¾1kÈò}’Fw4þaiñ}ÂÅ]~¿ÕìÝUðÁ³†,ß'™ †Èø‡¥Å÷ Kþ~«ÙOPC¼1kÈò}’‚Éø¾)XZ|ŸÐ¤ýû­fŸC0=ø6]>±|Ÿ¤e>#hüÃÒâû„&‹ßo5û–ùŒàƒÏaÓåË÷I@ �¥Å÷ ML¾ßjöM‚Þ˜5dù>IÑä€XZ|ŸÐd—ßo5û ¢ŸæŠô'<˜¦VË÷IªÙß7K‹ïìÕï·š}Ó9J�ೆ_Í6�…åû$Ù£rWÁ7аAsVŸÃÒbÎçp÷ƒ_.(‚òÝ…Cô-g­zØ Ge€~¹ ²|Ÿ${Ôýþ>*ÇŸÃÝs…`îý¦)‡Uõ ß]80DÕƒ¾ª N?‡�Ê�åû$ÙOðs¸{®̽ÿsˆŠ<ü¦›`õ ‡¯€ª‚ÓÏá£2|Ð4Þÿsø»as –ï“d>‡¨ÈÃ�y÷s8Í @°úªhXUÁ·,Ï>øÎ0Ê?‡ÓÜ«7À¬‹z³°|Ÿ$ûž½^ë^ë�Ü7‡–‚ò»ìã‘~O7œÆú‰~œê5=UÇUÕ±²\ Ëe�ôîþ“}~Ã{7ýŽ«ªc >­5Žý:m¸í›<ÐFð5޾a°\ö=ŠÓJýøýýJ÷c}¿Þ~ìý¯øuo| .M#þz¥.Ž~ ¤�Óºá¶8`¹ìÍõ ·}ì®ãý(uwüñ›ygD£#ú%¸4�Øû¿e�zößûuo˜NOU–˾GÍæ:þG߸-ÙŸªOÝ´wÓûÞ,, …–žCHf9]ÖÓÍ¡¥ ü.ûž»®§ßqUu¬¿§Nce9=ÁéºY Êï²§nÚ»éý �ßÓ §±²8€¶“Ïéˆç.û¶‘¾g¯×WWjþ ïÝÄr�2쌻ìŽ>UÃ{7™Îr¶6ÃÉšË5Ê|MÎr¶6§Èjò»ìÍõºðñhíox°\£Ì§ –³µ9¥@–6î²�©y¼¿á”âHz{íe|“Ç,×(ó]î,gksJ�,ø˾ÆÑWéj~uŒhÌr�2Pºê.ûͼ3¢Ñý\š†é,gÚœHá"Ë5@ëS d¥«.û½›~ßZÓ¯÷4N+ÝÛGÌr Ðú”Y@é*–›CÏ•YÎ6?�Âv–Ë~S¿õø6šÞ>Ö|²ü{¿Þð÷ìõZ÷ÒXYX@ ÉççÊ ÈrgÌy…î²Ç4½º­qúž½^¿Æ-Ìt,§'psh•‚—}½Žo=~Ãñ_‚KÓˆ~œÖ ·™Îr]°œmÚœH¡É]ö-F|”âHú½_÷Æ×{³\´>¥@Pºê²Ç4xs½.ü8Õkzª~ ¤÷7 ¬šïÂÒâû„‹Ëò÷ ³q¯Þ�ïÑè`ù> ìŒïÂÒâû„‹ ü}Âì޶BÕVÔÍÁ÷(N+õ[ñ Ë÷I–Pëï/–ß'l_�ò÷ ³Oc5o¸ögø>Ë÷I–Õ÷[…¥Å÷ Û½.Ÿ0û�º·0Þ×½Ár,–×^rù²OõÎ÷ìõÊr@骃¥ÅEú ¾ìë=�ÓJ÷öÁrF—;ÆÁÒâÚ›òe¯ÒÕüêQ–ï“d,g]Áƒ¥Åµ·—Yåz _¥ëoxï¦W7°\£ÌùËÙÚ\Q�Ýð.û4|ÿí´õ'ún<¼YX.ûž}ô¾J×�G�âè«›?׿ñuüÔM{7±°œžÀÍÒd‹,×(óE>Âr�Í´*àÀËÞ�Ç'ûø¸6�W7|?uÓÞM,§=ó•£Yš°œöÌ7]�,£Y^öfêe|¢OÝ´wÓÍ’åâ|Ë`Ñ„åô4ç×7•½™z¿%–sˆó-,ZY$ŸCœÏ Úï²W7ßÿuÄé©úF³üÖ[²¿WÆJc–›CÏ•Yn² mN+‹,,—ý†÷núGŸºiï¦7šeüõ:>ÉûCÚúé~àßðÞM¯nþøG_Ý|ÿw\U+ ËiÏ|S`4ËE–sˆó5A§ÀÐ`¹h}Ë©«î²Ok‹Oôé~àOöñÞ»‰åæ0?ÀrÚ3ß„�Õ)0d9[›ƒyÞåwÙcšìnûdëøDŸîöf9í™o ºYF³d9‡8_LPCd\öë0S/ãkÜâÇ[œ6ÜöÔM{7½ºùƒå õ-§®b9O°œöÌ7]�,£YZÐÃrq¾e`B€Åæù*<7±Üznb¹É6´9˜wwÙ¯ã½2Vújo‡å´g¾)è dÍ’åâ|MàRhÜe_ã诣•Þ:ê4~K,×­o9uËÍa~€å´g¾);ˤ�ålmæy—�Y®Qæs€ÇÒ0¼Ë~uÏ>¢?pÔt–³ mΤ°�åôn­Ò¢C�庸Ë~Ãñ_‚KÓˆ¾¿áa:ËÙæ6çRHà.{L÷Ûå õ)²€ÒU—ýÀѧê—àÒ4¢ŸÆ‰Å¤�ùâ| hr–«ðÜt—ý:jÿŽ>Ußßð`¹9ôÜÄrq>hƒå*<7±\UÖÓÍ¡¥ ü.û¸ö2¾ç®ëÀéw\Uëïé†ÓXY.‡ˆ…†“5#òé ÜZ¥E‡ Ëu98p—ý†ã-:¾—¦ý8­n3�åls›ƒá4£E–sˆó�Àº‚,W!psh•‚,×­O)�”®ºì[Œ8xs½.ü�£,0œf´H>=�3æ¼B,×åàÀ]öê¶Æé÷4ÞÒFñoøý ÓYÎ6·9N32a¹h}J�¬¦spÙcºÁã1¢_�šÍõÛÇ:X`8ÍÈ„| Ðú”Y@é*–sˆó� bEî²7×ëÂ8úTý4H,W!้åæÐsË5@ëS d¥«.ûÖ[²£”è<ìœ7×ë±²œCœ(/ ËUì ËлYÎÖQΤ�À]ö5ŽþÀÑ÷7vwVê¦ �˜…E)�ÕääSŠª|e–Óe=ÝléÐjBÄrsè¹2ËUe=ÝléÐjBtÙ÷¨‹Óoxï¦÷7¥@Pºê²ïù4¿¥W·5N,çç�tY®BàæÐ*-:/ûuÄ#½ê×m,J�¬f‘|zgÌy…X®ËÁ�»ìwFÛ†ñ†Ûžªïox˜Îr¶¹Í)²“»ì[Œ}ð˜~�šÍ5Ë5@ëS d5�ã¥@VcB>‡8P^@–«8cÎ+t—=¦éwFÛ†ñ†Û¾Æ-Ìt,ççA¤‰°\…€ç¦»ì÷nú’š¼¤÷ë�áÿ†ï×½Árs蹉åâ| ˆä–«ðÜÄrs蹉E)�ÕL¾9ô\™åœŽx pî²OõÂñ½zOÕ×Ë5Ê|Ú`9ÛÐæ@ °(²´A>=�›C«´èd¹.XÎ6·9¥@–^d¹h}J�, tË9Äù@`]A–«¸9´J‹A¥@–^$ŸžÀs^!–ërp€åls›S di–k€Ö§Èj:ÇÇrq> ¼€,W!pÆœWˆE)�¥MÈççADGX®BÀsÓ]ö{7}IÚ(éýzgø¿áßûuo°Üznb9‡8"F„å*<7±Üzßeß«q$½¹^8^Ýü<¦¿Rjfa¹ìwh²¿ºù#~º8øx¤w÷ߣ.Nc�¿ÆÑßÓ §±Æ,,§=ó•ƒv–«ÊzºÙÒ¡Õ„è²ßðÞMïoxÄ,W•õt�¥C« ÑeOÝ´wÓûߣ.N,§=ó•ƒ9´–…ÁrUYO7‡–‚ò»ì7¼wÓ︪:ÖßÓ §±²œöÌWºYz!ËUe=]W KAù]öÔM{7½¿áñ;®ªŽ•å´g¾rÐÈZËUe=]W kªHï²�nñ§nÚ»éw\U+ Ëe¿§Nc�Ÿ ¾G]œÆÞßðøD?ºÅ YNOà`gX†Þ}—}ë:þdëø?ìŒ�ºë†Û~Ã{7™Îr]°œmnsZ1¹ËÓý¾GqÚ°;X®ZŸ¡‹ª|—}‹¯únlÿu˜ë o¸í©›önz–Óe=ÝléÐjBÄr ÐúÊÚd‚Í]öûuÃé±kÞëSõ7¼wÓû1ËiÏ|S0‡–Síf¹h}Š«ŠåtYO×Y:´š]öÔM{7½¿á³\´¾²6™`ÃrÚ3ßt²œj7Ë5@ëSXU,§=óMAW Ëh–,ççk‚Fw4X®Zßrꪻìc»›>Ù7Ü”¶Æ,7‡ù–Óžù¦ ì¬Fwd9[›ƒyÞåwÙS{@íïÝ7õ½GÒ÷|�W74–³u”kç.ûu$wÅŸèÓýXë´á¶�[Äi˜YX.{uóýOöñÞ»éw\U«÷Ç#=ìŒWýºí7õ[�ßqÍûßp¢?pô©úêæocÖÚZ™å´g¾r0‡Ö²0XŒYëEòUe=ÝZ ÊYÎÓ”w³œCœ¯ *ˆ&°\´¾åÔUwÙ§áû¿œºê[ÛÇ:>Ño£,§=óM�Ñ,YÎ!Î×9“Ár Ðú–SWÝe¿Ž:ú15�dßpËu98Àr¶yhsƬ5�»ìÛhzØÁÇ#½ê×m,§Ëzº9´”³œöÌ7^·—YnÓMwÙã±@úxô]YNOà–SWíÂä.ûž}ô¾J×ÇôWJÍ¿á73][°\ã(Wf9Ûí™o Œf¹Èrq¾&htWAƒå õ-§®ºË>JñøÖ[²²×éÕÍ,§=ó•ƒ9´–…ÁrUYO#nb9Ûü”Y ÁwÙû”.|•®Sóx3] ‹R (]Ef9‡8€ÒU,W!้åæÐsÓ]ö{7}�¿ÞÓ8­to¿á§nÚ»éý –Ë!baQ d5�ã2Ë9Äù@ ",W!้åæÐsËå±°(² ƒ|q>DŒËUxnb¹9ôÜÄrž›Xn=7±\ Ëeߣ.NOÝ´wÓ÷ìõ¿Žä®ø{ÔÅé7ü€…¥+�Õ„ˆÌrzŽÕˆåæ0?ÀrŽÕˆårˆXX.ûÖë–ÆS7íÝôþ†Ç'ú;®ªŽÕû¿¥}àßqUu¬¯n¾ßzÝÒø-}¢Ýâ…Þ,,-sdé9„d–SŠª|e–SŠª|Ëé N×Èš*R–ÓžùÊAW KÏ!di™£Eò9ñ@à°\…€ç¦»ìÍÔËxÃãÓæû�ñõkƒå´g¾eÐY˰P§\ö;®ªŽõݳœÓK–kå&–³ m®eްœÓ Ë5Žr�ålC›k™#,,—ýŽ«ªc}Õõýà[¯[¿¥§nba9¥¨ÊW¾Ë>®½Œï¹ë:pzÃã÷tÃi¬,ççÁ²0¬j¶�,×­¯eެea°œöÌWºYËÂ`¹ª¬§ë d)(g9¥S®|—=uÓÞMïoxüžn8�•ålåZæhñ.ûÅiÃîøÖ[²¿™zÁoê׸ÅûCMÇÒ2GÈçtÄ�s—}ÛHß³×ë×mõ†Yn=Wf¹9ôÜÄr�2Ÿ6î²8úT}ÃÃt–³ m®eŽY®šàt]�¬©"½Ë>®½Œï¹ë:pzŸöê´QüþWUÇÊrº¬§ë,ZMˆXn=Wf¹ª¬§ë,ZMˆXNé”›XNé”+³\ Ëe¯únlÿuÄé©úÔM{7ýŽ«ªcýD?ºÅ YX ]Teò鲞®+�5U¤wÙ«›ïÿ:âôTýWUÇú­·dØ1‹¡‹ª¼H>‡8ŸÀÎ`¹9ô\™åœŽx ÐwÙ§Í÷�Òïë¶ñ;먲\—ƒ,g›‡6gè¢*/²œöÌ7­t²–…Ár˜nºË¾Wû=ïÇ®yg¬OÕ�G/Ñ5þD¿õº¥ÁrNG<”ï²ß×m#f90Mî²�RwǯÒõãÑKt�YnówÙï}7~ŠÇ«tý¸VGjÁÒ2GÖ²0È,§=󕃮@Ö²0XZæÈ„|JQ•O©Z²\UÖÓu²¦Š”å gÃt/TÝØJŠR&Îp@€œ !A÷¢ dp’AÙf€#äl¸!Â@ÊàIÚó8h@Ά›�0�2xò6ªg8H8 5¦œ…:$}˜MG8.×Ïn¦Ÿ8 C"¯„ô.Òžg€#iÏmUÅÂdÏCÄTü*Ëu7ËEÈY†„â•�ÞÅÂÛ¨nT#€¨�3èþŽ˜Š_Åàb¹.àf¹(8 WD(|k¥=ÏGâ•�ÞÅBÚóì¹LͧgËÅk·3ÎÂUH(|k½�êFe€#ñJHïbámT7*LͧgËÅk·3ÎÂ-zÛ4BiÏ3À€´ç¶ªba²�[è0õ³·o‹Å¦ƒbÊY¸Õ„Þ6�PÆÛ¨nT†#ñJHïbámT7*ÃÔÏÞ¾-c˜Š)gá!$L9 7D˜¾é*ÎÂMH˜rnB�)"Þw?8 7a‚)"Þw/!Þ8«`pß½ä,Ü„9¦ˆxßýà,Ü„CL9 7aˆé·î_ 6�4`+¼qߔҞdЀ·_»álE!azß½„áî»—ÀÙJaÊÙJ‡„)VËÁz ñÅ (�70{„åb=<\Œ—³Åš³UB„)g«$$,¥S}$c/{ÎVÉŠÐUàÛ@ÞÙÃæjŽˆ`Z¡WÛ}ý­×-�ëJW–S:唪%ËMM~€år–Óe=]W kªHYN{曯ÛË,7�é&–³Í¯eŽLXX.û(uwüñûuô¶x£ø{{kú²þD?:z›¹öYXÊÚd‚ ù´g¾eÐÊb{Á,×­¯ ‰9ºË~±=h?ºµm‰åœŽx €,×åàÀ]öñÂmÿþ¨£n{¯Œ•Æ,g›Û\YO‹,×­ošwwb)ëi‘|Ú3ß2he±½oŠå õ5!1GwÙ/í}SñG·¶-±œÓ�åº`9ÛÜæÊz2a¹h}Ó¼»+KYO&äÓžù–A+‹íí,×­¯ ‰9b9§# Ëu98Àr¶¹Í•õD0Ë5@ë›æÝ]�XÊz"˜|Ú3ß2he±�å õ5!1G,çtÄd¹.XÎ6·¹²ž°\´¾iÞ݈¥¬'äs:â�@ße¿_7œÞ¯ãôÑ­mKÁ/ý^+e¹h}Ó¼»+Ëå±°4!1GäsˆóÁ •E–&$.’oóƒ,7�é–,çtÄA™åº`9[åš�¸ÈrNG<,Y®qË9ñ–`9§#–kÀrNG¼&,7‡ž[²Ü¦[²\ Ë4ïî D>0Íi�°4]�ȧUùÊ,§Uù&–SŠª|K–s:âÁ°œCœ¯ š.ì Är Ðú–SW±œÒ)·d9¥Snb9¥S®Ìr9D,,—=¦¿á½›^Ýü|¾ÿn<Öom¯Ó'úQÊÂRT`7$ŸöÌ7E-§ÚÍr ÐúVËÙ:Ê5ŠÃÂrÙ�u¥ë¯ÔMÁï× §7�8®ÛÆ×éwe‚»ú5Ž~½C×ô‰~£”è°°À<ïrò5@ëSXU,gë(×( K“kƒ|Ú3ß4¹6,§Ú}Ùǵ—ñ15�ïÑèxûX‹âÀª"ŸCœ¯ ”- ƒålå–SW±°\ön<6Üöqm¿á½›^Ýüñ¸6�WéúÔM{7yÿÂ1ö�kóÞ\/ŸZìËeOß{Z²°´*à@2ËiÏ|åÀh–‹,§=óM�Ñ,MXN{æ[%³œžæü.{3õ2>ÙÇãڵؖ›CÏ•YÎ!Îç‘�°\ Ëeoq\·�˜…¥¨ åT»É,7-¯Ém°Ü´¼H×mƒ|ȃL@å¼i6¬nþ0íï:ÓP7©›?L»ë#A“Ú`¹iy‘k(ö2Öœj­×è§±@ú ïÝôêæ�Oô§å«t5×éUº~„å¦åEê8æ¿E$hò@,7-/rû•¶­µ9ö~  bTXT42 DOCµßTXT42 ASM .9TEXTCOM LIBN�nDOC COMPïÕÿÿÿ TXT42.DOC:      � - TXT42.COÍ  ió  á upgradå oæ thå  prograí  TXT40.COM®  Seå �      TXT42.ASÍ  foò  thå  modificatioî  historù  anä  creditó  tï �      originaì authors. - Terry Hazen 07/14/84 TXT42.COM  ió  á methoä oæ creatinç instanô .COÍ fileó thaô  wilì � prinô  ouô textuaì messages®  Thå printouô oæ thå messagå maù  bå � intercepteä witè ^à ¬ ^X¬ anä witè thå ESCAPÅ key® ^Ó wilì causå � the display to pause. Iô  ió basicallù á shorô prograí thaô sitó aô thå heaä oæ á  .COÍ � filå thaô ió createä iî Wordstar'ó NON-documenô mode®  Á standarä � WÓ texô filå ió theî addeä tï creatå aî instanô texô displaù .COÍ � file®  Seå TXT42.ASÍ foò thå listinç iî caså yoõ arå  interesteä � iî examininç oò modifyinç it. TXÓlXÝüaÚßâßðÞMŸÆ)xºOŵÿ–›–1 u“ºùô¿ÅŸì#4y  –›–9ꦽ›^Ýüáý?«�éS7íÝôêæ�ßâ�÷£·©Ûˆa¹iyꦽ›~‹?8E‚&´ÁrÓò"—è›fÃêæ�ǵy˜Ö{Z^ßT„å¦åEv]×KÞ_rð‹%{mòO\ô^Üõ‘ ÉmMhƒå¦åE¬KØY�Cò´¼�áûA¤©1¦éé~àßðÞM¯nþ¾g½…ÝÖÑKtmñ5Ž~¼¾¿á6ïËMËkò@AÄŠ°„�åRHž–·3|?ˆ45Æ4}ouOÝ´wÓ«›?‚ïÙGoáÇûº7~æzÃnóް4¹6,§ÚMf¹iyMh#ˆX–°³ÝU�ÌrÓòv†ï‘¦Æ˜¦ïù4OÝ´wÓ«›?‚�uÃ[¿_éŽ?Ìoëðްܴ¼&´D¬KØY-óA2ËMËÛ¾Dšcš¾GÍ{¤ñ­×-�Oô©›önzuó‡÷ÿ´Å ¿Ò�zÇoñªëû–›–×ä�6‚ˆa ;Ë�ù¦åí ß"3Ž]UÝzÛÀéÍÃLׯÒõ7¼wÓ«›?¼#Ao |5ˆX–9´œj7ù¦åEÞßðˆÃ{7yG‚Þøj±",]�,§ÚMž–yÃ#~ꦽ›¼#Ao |5ˆXZNEJ¾iy,ƒÈ´Œ,YœŠÔÒ0Iä²Çµy°Ü´¼È÷MEî²O-öƒ¥+�e4K zÈ,7UGpû]öÉ>~qba¹ìw\Uk̲, «šmàÁÒâwyÙ/îòãÑKt�_¥ë︪:V–®@–žCHf¹©:¯ÛYXºYË OÕ-šxýá—…aU³ dé¬eaX¨S–g±°Ì¡µ,Œƒ¥ÅY,,É… õ 2A\·�˜…¥¨ åT»É,7-¯Ém°Ü´¼H×mƒ|ȃL@å¼i6¬nþ0íï:ÓP7©›?L»ë#A“Ú`¹iy‘k(ö2Öœj­×è§±@ú ïÝôêæ�Oô§å«t5×éUº~„å¦åEê8æ¿E$hò@,7-/rû•¶­µ9ö~#T42.COM  haó beeî renameä TEXTCOM.LI iî thió .LBR®   Iô  neveò � runó oî itó own¬ sï caî bå calleä bù anù convenienô namå tï avoiä � confusing it with a working .COM file. ~ Loaä  TEXTCOM.LBÒ witè Wordstaò anä yoõ wilì noticå thaô iô lookó � like this:�      !^V^A......and.assorted.junk..............................^Á�      Inserô youò texô betweeî thå "?¢ anä thå "^@"º�      ¿      ^À Thió  ió  thå  shorô  prograí thaô wilì prinô  whateveò  texô  ió � inserteä  betweeî thå "?¢ linå anä thå "^@¢ line®   Thå texô musô � bå terminateä witè á nulì (^@)® Á nulì (^@© haó beeî includeä aô thå enä oæ thå file¬ whicè meanó � thaô  yoõ  caî jusô inserô youò texô betweeî thå ¿  oî thå  thirä � linå anä thå ^À oî thå fiftè line. Thå prograí permitó thå uså oæ thå tildå characteò iî thå texô tï � makå  thå displaù pauså untiì anù keù ió  hit®  Formatteä  screeî � pageó  maù bå createä bù addinç sufficienô CRLF'ó tï thå texô  tï � creatå thå desireä screeî pagå formats¬ usuallù everù 2´ lineó tï � forma; TXT v4.2 - MESSAGE UTILITY PROGRAM 07/14/84 ; ; Terry Hazen ; ; TXT42.COM ió á methoä oæ creatinç instanô .COÍ fileó  ; thaô wilì prinô ouô textuaì messages®  Thå printouô oæ ; thå messagå maù bå intercepteä witè ^àanä ^Ó and witè  ; ESCAPÅ key® ; ; Thå filå TXT42.COM ió basicallù á shorô prograí thaô sitó ; aô thå heaä oæ á texô filå thaô ió createä iî Wordstar'ó ; NON-documenô mode®   ; ; Thå prograí permitó thå uså oæ thå tilde ¨þ© characteò  ; iî thå texô tï makå the display pause®  Formatted screen ; pages may be created by adding sufficienô  CRLF'ó tï the ; text to create the desired screen pagå formats. ; ; TXT42.COM has been renamed TEXTCOM.LIB in this .LBR. It ; never runs on its own, so can be called by any convenient ; name to avoid confusing it with a working .COM file. ; ; Uså thå followinç procedurå tï seô uð á texô filå  ; FILENAME.COMº ; ;    1® Loaä WÓ anä gï intï non-documenô mode® ;    2® Uså FILENAME.COÍ foò thå filå tï edit® ;    3® WÓ wilì responäô completå screenó oî á 2´ linå display. ~ Uså  thå  followinç  procedurå  tï seô uð  á  texô  displaù  filå � FILENAME.COM: 1. Create your text file using WS, and save it.      2® In Non-Document mode, create  new file FILENAME.COM.�      3® Uså ^KÒ tï reaä thå filå TEXTCOM.LI into FILENAME.COM.�      4® Use ^KR to read your text file into FILENAME.COM Š between the "?" and the following "^@".      5® Savå thå filå anä ruî iô aó á .COÍ file® Whilå  shorô texô lineó maù bå inserteä directly¬  á longeò  filå � maù  morå  easilù bå createä anä formatteä aó á separatå WÓ  filå � createä  iî  eitheò thå Documenô  oò  Non-documenô  mode®  Inserô � tildeó everù 2´ lineó oò aó desireä foò paging. ALÌ  characteró  uð  tï  thå finaì ^À  wilì  print®  Iô  ió  VERÙ � importanô  thaô thå finaì ^À bå iî placå aô thå enä oæ thå  file¬ � otherwiså  strangå  thingó  wilì  bå  printeä  untiì  á  nulì  ió � encountered. DOC.COM¬ a texô filå printinç thió informatiowaó createä usinç� thå proced witè NE× FILE® ;    4® Uså ^KÒ tï reaä intï memorù thå filå TXT401.COM® ;    5® Use ^KR to read into memore your texô file ; betweeî thå ¿ anä thå followinç ^@® ;    6® Savå thå filå anä theî ruî iô aó á .COÍ file® ; ; ALÌ characteró uð tï thå finaì ^À  wilì  print®  Iô ió ; VERÙ importanô thaô thå finaì ^À bå iî placå aô thå enä oæ ; thå  file¬ otherwiså strangå thingó wilì bå printeä untiì  ; á nulì ió encountered. A null (^@) has been included at ; the end of the file so that text may be inserted without ; worrying about how to create a null on your terminal. ; Note that the ^@ is a null, NOT a "^" character plus a ; "@" character. ; ; For more information on its use, see TXT42.DOC or run ; DOC.COM, an example of a finished .COM file. ; ;*********************************************************** ; ; 07/14/84 Added a line of code to strip hi-order bits ; v4.2 from text to make text creation with WS Doc- ; ument mode easier. Now reads tildes even if ; created in Documeurå describeä above¬ witè TXT42.DOC aó thå texô file® ~ Whaô uså ió alì this¿� """""""""""""""""""¢ Yoõ maù welì ask..® Iô haó beeî useä oî aî rcp/í tï helð witè thå� probleí oæ somå useró typinç QUIÔ oò LOGOFÆ etc® insteaä oæ BYE® Insteaä  oæ havinç tï creatå aî assembleò filå witè D lineó  anä � writå  á routinå tï prinô á messagå thaô sayó "Pleaså uså BYÅ  tï � loç ofæ thió system......¢ (pluó otheò info)¬  anä theî  assemblå � iô  anä  theî loaä it¬  wå simplù follo÷ thå  procedurå  outlineä � earlieò  anä  creatå  aî 'instant§ .COÍ filå  usinç  thå  editinç � capabilitieó oæ WS. Iô  haó  alsï  beeî  useä tï displaù helð  fileó  iî  á  businesó � environment®  Thå  operatoò  simplù typeó thå namå  oæ  thå  iteí � she/hå wisheó tï kno÷ morå abouô anä getó aî instanô listing. Wå hopå yoõ finä thió aó usefuì aó wå have....® (Notå thaô thå ^À terminatinç thå filå ió reallù á null¬  noô á Þ � characteò pluó aî À character!© ~ $nt mode. Added abort with ; <^X> to previous abort characters. ; - Terry Hazen ; ; 07/12/84 Program and documentation re-written. ; v4.1 'Hit ' was replaced with '[more]' to ; be consistant with other programs. Now ; aborts with <^C> or . <^S> pauses the ; text display. ; - Terry Hazen ; ; 06/15/84 Revised file and added , abort char- ; v4.0 acter etc. Named it TXT40.ASM to get a jump ; on the version numbers, as this version is ; based on my version 2.5 and incorporated Bob ; Schultz direct I/O calls dated 01/17/84 and ; Walt Wheeler, Justus Addiss's idea of the ; tilde character (this is a neat idea) from ; their version NTXT3.ASM dated 06/12/84, ; allowing the creator of a file to implement ; paging by inserting a tilde (~) in the ; source text file, to PAUSE until the reader ; strikes a key. Suggest including a tilde ; not less often than every 22nd line. ; - Harry Kaemmerer ; ; 01/01/84 8080 version N-TXT.COM mess ;done with message, so pause ; EXIT: POP H ;clean up the stack ;do a conin before exit CONIN: MVI E,0FFH ;direct input MVI C,DIRIO ; CALL BDOS ; ORA A ;set flags RET ; ; MESS1: DB '[more] ',0 ;paging message ; DB CR,LF,'Insert your text between' DB ' the "?" and the "^@":',CR,LF DB '?',CR,LF ;start of buffer marker ;----------------------------------------------------------- ; Message space starts here, and is as large as your TPA ; - 512 bytes ;----------------------------------------------------------- BUFFER: DB CR,LF ;add blank line to make ; insertion easier DB 0,CR,LF,EOF ;force a NULL and an EOF ; ;marker to keep the Wordstar END START ;clean !›å~þÊTæþ~Ê<_ÍÍUÊ7þÂ(ÍUÊ"þÊTþÊTþÊTá#Ãå!^~_åÍá#~þÂAáÃ"áÿÍ·É[more] Insert your text between the "?" and the "^@": ? age utility. ; - Harry Kaemmerer ; CP/M NET EAST ; (201) 249-0691 ; ; Original Z80 TXT.COM version ; - Simon Ewins ; e-mx rcp/m ; (416) 484-9663 ; ;*********************************************************** ; ; ; ASCII CHARACTERS CR: EQU 0DH ;carriage return LF: EQU 0AH ;line feed CNTRLC: EQU 03H ;control C CNTRLS: EQU 13H ;control S CNTRLX: EQU 18H ;control X EOF: EQU 1AH ;end of file marker ESC: EQU 1BH ;escape character TILDE: EQU 7EH ;tilde character ; ; CP/M EQUATES BDOS: EQU 5 ;bdos entry point DIRIO: EQU 6 ;direct console I/O ; ;*********************************************************** ; ; ; PROGRAM STARTS HERE ; ; ; ;*********************************************************** ; ; ORG 100H ; ; START: LXI H,BUFFER ;point to text ; LOOP: PUSH H ;save pointer MOV A,M ;get character CPI 0 ;at end? JZ EXIT ;yes, so quit ANI 7FH ;strip hi-order bit CPI TILDE ;is it page character? !›å~þÊTæþ~Ê<_ÍÍUÊ7þÂ(ÍUÊ"þÊTþÊTþÊTá#Ãå!^~_åÍá#~þÂAáÃ"áÿÍ·É[more] Insert your text between the "?" and the "^@": ? TXT42.DOC:      � - TXT42.COÍ  ió  á upgradå oæ thå  prograí  TXT40.COM®  Seå �      TXT42.ASÍ  foò  thå  modificatioî  historù  anä  creditó  tï �      originaì authors. - Terry Hazen 07/14/84 TXT42.COM  ió  á methoä oæ creatinç instanô .COÍ fileó thaô  wilì � prinô  ouô textuaì messages®  Thå printouô oæ thå messagå maù  bå � intercepteä witè ^à ¬ ^X¬ anä witè thå ESCAPÅ key® ^Ó wilì causå � the display to pause. Iô  ió basicallù á shorô prograí thaô sitó aô thå heaä oæ á  .COÍ � filå thaô ió createä iî Wordstar'ó NON-documenô mode®  Á standarä � WÓ texô filå ió theî addeä tï creatå aî instanô texô displaù .COÍ � file®  Seå TXT42.ASÍ foò thå listinç iî caså yoõ arå  interesteä � iî examininç oò modifyinç it. TXT42.COM  haó beeî renameä TEXTCOM.LI iî thió .LBR®   Iô  neveò � runó oî itó own¬ sï caî bå calleä bJZ PAGING ;yes, then pause MOV E,A ;move character to e MVI C,DIRIO ;console out CALL BDOS ;bdos CALL CONIN ;check for key pressed JZ LOOP2 ;if no key then continue CPI CNTRLS ;is it ^S? JNZ CHECK ;if not, check for ESC or ^C ; LOOP1: CALL CONIN ;check for key pressed JZ LOOP1 ;loop until key pressed ; CHECK: CPI ESC ;is it an ESC? JZ EXIT ;if so, exit CPI CNTRLC ;is it a ^C? JZ EXIT ;if so, exit CPI CNTRLX ;is it a ^X? JZ EXIT ;yes, quit ; LOOP2: POP H ;get pointer INX H ;and bump to next character JMP LOOP ;go on doing it ; PAGING: PUSH H ;save pointer LXI H,MESS1 ;get the message MOV A,M ;get first character ; LOOP3: MOV E,A ;need it in E for bdos call MVI C,DIRIO ;set bdos function call PUSH H ;save pointer CALL BDOS ;ok, send the character POP H ;return pointer INX H ;set up for next character MOV A,M ;get next character CPI 0 ;is it the end? JNZ LOOP3 ;nope, loop POP H ;return pointer JMP LOOP1$ù anù convenienô namå tï avoiä � confusing it with a working .COM file. ~ Loaä  TEXTCOM.LBÒ witè Wordstaò anä yoõ wilì noticå thaô iô lookó � like this:�      !^V^A......and.assorted.junk..............................^Á�      Inserô youò texô betweeî thå "?¢ anä thå "^@"º�      ¿      ^À Thió  ió  thå  shorô  prograí thaô wilì prinô  whateveò  texô  ió � inserteä  betweeî thå "?¢ linå anä thå "^@¢ line®   Thå texô musô � bå terminateä witè á nulì (^@)® Á nulì (^@© haó beeî includeä aô thå enä oæ thå file¬ whicè meanó � thaô  yoõ  caî jusô inserô youò texô betweeî thå ¿  oî thå  thirä � linå anä thå ^À oî thå fiftè line. Thå prograí permitó thå uså oæ thå tildå characteò iî thå texô tï � makå  thå displaù pauså untiì anù keù ió  hit®  Formatteä  screeî � pageó  maù bå createä bù addinç sufficienô CRLF'ó tï thå texô  tï � creatå thå desireä screeî pagå formats¬ usuallù everù 2´ lineó tï � formaô completå screenó oî á 2´ linå display. ~ Uså  thå  followinç  procedurå  tï seô uð  á  texô  disp h¼-02FEB85 DOC COMq2Z;TXT50 AQM3>Í.TXT50 COM1�òTXT50 DOC/'ÿ ÿ ***************************************************************** * * * TXT version 5.0 * * * * A Message Utility Program * * * * Terry Hazen * * Los Gatos, California * * 02/09/85 * * * ***************************************************************** INTRODUCTION... TXÔ ió álaù  filå � FILENAME.COM: 1. Create your text file using WS, and save it.      2® In Non-Document mode, create  new file FILENAME.COM.�      3® Uså ^KÒ tï reaä thå filå TEXTCOM.LI into FILENAME.COM.�      4® Use ^KR to read your text file into FILENAME.COM Š between the "?" and the following "^@".      5® Savå thå filå anä ruî iô aó á .COÍ file® Whilå  shorô texô lineó maù bå inserteä directly¬  á longeò  filå � maù  morå  easilù bå createä anä formatteä aó á separatå WÓ  filå � createä  iî  eitheò thå Documenô  oò  Non-documenô  mode®  Inserô � tildeó everù 2´ lineó oò aó desireä foò paging. ALÌ  characteró  uð  tï  thå finaì ^À  wilì  print®  Iô  ió  VERÙ � importanô  thaô thå finaì ^À bå iî placå aô thå enä oæ thå  file¬ � otherwiså  strangå  thingó  wilì  bå  printeä  untiì  á  nulì  ió � encountered. DOC.COM¬ a texô filå printinç thió informatiowaó createä usinç� thå procedurå describeä above¬ witè TXT42.DOC aó thå texô file® ~ Whaô uså ió alì this¿� """""""""""""""" prograí thaô allowó á worä processoò sucè aó WordStaò tï � creatå  'instant§  texô  displaù  .COÍ  fileó  tï  displaù  texô � messageó oî á terminaì oò tï senô controì sequenceó tï  terminaló � oò printers®  TXÔ permitó thå uså oæ thå tildå characteò (~© iî � thå  texô  tï  causå thå displaù  tï  pause¬  creatinç  formatteä � displaù  pages®  Non-printinç characters¬  sucè aó ESC¬  maù  bå � synthesizeä  foò  uså iî controì sequenceó oò tï  creatå  reverså � videï oò otheò speciaì displaù effects. SOME APPLICATIONS... Instant RCP/M Message Files... Insteaä  oæ  writinç aî assemblù languagå filå witè D  lineó  tï � prinô  á message¬  theî assemblinç anä loadinç iô eacè  timå  yoõ � neeä á ne÷ message¬  TXÔ anä WordStaò caî dï iô foò yoõ mucè morå � quicklù anä easily Instant HELP Files... TXÔ caî bå useä tï creatå HELÐ files®  Typå thå namå oæ thå iteí � oò procedurå yoõ neeä helð witè anä geô aî instanô display. Terminal or Printer Control Sequences... TXÔ caî synt"""¢ Yoõ maù welì ask..® Iô haó beeî useä oî aî rcp/í tï helð witè thå� probleí oæ somå useró typinç QUIÔ oò LOGOFÆ etc® insteaä oæ BYE® Insteaä  oæ havinç tï creatå aî assembleò filå witè D lineó  anä � writå  á routinå tï prinô á messagå thaô sayó "Pleaså uså BYÅ  tï � loç ofæ thió system......¢ (pluó otheò info)¬  anä theî  assemblå � iô  anä  theî loaä it¬  wå simplù follo÷ thå  procedurå  outlineä � earlieò  anä  creatå  aî 'instant§ .COÍ filå  usinç  thå  editinç � capabilitieó oæ WS. Iô  haó  alsï  beeî  useä tï displaù helð  fileó  iî  á  businesó � environment®  Thå  operatoò  simplù typeó thå namå  oæ  thå  iteí � she/hå wisheó tï kno÷ morå abouô anä getó aî instanô listing. Wå hopå yoõ finä thió aó usefuì aó wå have....® (Notå thaô thå ^À terminatinç thå filå ió reallù á null¬  noô á Þ � characteò pluó aî À character!© ~ ZëvZ„”~z>ž?ÜlO—»Íšb¼iT|˜SN9åizrY~÷wÌ7›)å”ߺJ¶E‹°–è…izrY~÷wÌ7›‰ÆF5."/Å7.HÀÄš«ãýýò<R6±Œ 1U%5ìV E 7.ÂèíÚ›¾Ø‰€—tÎK=“òÓizr%hesizå ESà anä otheò non-printinç characteró useä  tï � controì printeró anä terminals®  Yoõ caî quicklù creatå fileó tï � initializå  printeró anä terminaló foò speciaì  situations®  Yoõ � caî  alsï includå ESà sequenceó withiî texô displayó foò reverså � video¬ underlining¬ blinking¬ double-higè double-widå characters¬ � selectinç  speciaì graphicó characteò sets¬  oò anù  effecô  youò � terminaì supports® PAGING... Wheneveò  TXÔ seeó á tilde characteò iî thå text¬  iô wilì  pauså � anä  waiô foò anù keù tï bå hit®  Formatteä displaù pageó maù  bå � createä  foò lonç texô displayó bù thå inclusioî oæ extrá  lines® �ŠThå  uså oæ ^Ó bù thå operatoò wilì alsï pauså thå display®  Thå � uså oæ ^à oò thå ESCAPÅ keù wilì stoð thå printout® SYNTHESIZING NON-PRINTING CHARACTERS... Non-printinç  characters¬  sucè  aó  ESà (1BH©  whicè  cannoô  bå � directlù addeä tï thå texô messagå bù WordStaò caî bå synthesizeä � usinç á two-characteò string®  Thå first¬ oò intercepô characteò � maù båì  prinô �   strangå   thingó  afteò  thå  texô  messagå  untiì  á  NULÌ  ió �   encountered. Š- Save FILENAME.COM and run it as a .COM file. EXAMPLE... TXÔ waó useä tï creatå DOC.COÍ froí thió file¬ TXT50.DOC® Ruî iô � aó  aî examplå oæ whaô mighô bå done®  Noticå thaô  blanë  lineó � werå  addeä oò deleteä tï formaô thå displaù pages¬  anä thaô thå � tilde  characteò  waó  eliminateä  froí  thå  actuaì  text®  Thå � backslasè  waó useä aó aî intercepô characteò sincå '^' waó  useä � ofteî iî thå text®  ESà sequenceó werå noô useä iî DOC.COÍ sincå � theiò uså ió highlù terminaì dependent. I'vå  founä thå capabilitieó oæ TXÔ verù usefuì foò lotó oæ  'odä � jobs§  thaô  havå comå uð froí timå tï time¬  sucè aó  settinç  á � VT10°  compatiblå terminaì tï emulatå á VT52¬  settinç  aî  EPSOÎ � printeò  tï  prinô iî Emphasizeä modå wheî printinç listingó  ofæ � thå screen¬  anä iî quicklù testinç thå desigî oæ screeî layouts¬ � sucè  aó  menus¬  thaô  featurå reverså videï  oò  otheò  speciaì defineä bù thå useò beforå assembly®  Iô ió seô tï '^' iî � the distribution version of TXT50.COM® Thå intercepô characteò cannoô appeaò anywherå iî thå texô excepô � wheî á non-printinç characteò ió tï bå synthesized® Iæ youò texô � wilì includå '^§ (aó thió onå does)¬ whilå iî WordStaò changå thå � intercepô characteò Þ (iî linå 1¬ coì 11© tï somethinç elså (likå � backslash© thaô won'ô bå useä iî thå text. Wheî  TXÔ  ió run¬  thå intercepô characteò wilì  bå  recognized¬ � dropped¬  anä thå nexô characteò wilì havå 40È subtracteä froí iô � tï synthesizå thå non-printinç character® Thus¬ iæ yoõ wanteä tï � saù ESà yoõ woulä writå ^Û ¬  whicè ió 5BÈ ([© - 40È ½ 1BÈ (ESC)® � Iî   otheò  words¬   writå  thå  non-printinç  characteò  aó  itó � equivalenô controì characteò (^Ç foò BEL¬  ^Ê foò LF¬  ^Í foò CR¬ � etc). Notå  thaô eacè non-printinç characteò takeó uð twï spaceó iî thå � texô filå thaô wilì noô appeaò iî thå display¬ sï thaô thå numbeò � oæ  spaceó iî á linå containinç non-printinç c � display effects. I hope you find it just as useful! - Terry Hazen !©å~æþÊYþ^Êcþ~ÊA_ÍÍZÊ<þÂ-ÍZÊ'þÊYþÊYþÊYá#Ãå!l~_åÍá#~þÂFáÃ'áÿÍ·Éá#å~Ö@Ã[more] Insert your text between the "?" and the "^@": ? vÿ’óTXT50.ASM–ßÿ šÿ‹ÿžÿ–ÿ‘ÿöÿ�ÿ�ÿòÿõÿÄÿŒÿœÿ !"#$%&—ÿ_ÿ“ÿ›ÿÿ�ÿŠÿoÿ'()*+,-./012345678«ÿ’ÿÑÿºÿ™ÿ¼ÿ¶ÿ°ÿ˜ÿ¬ÿ�ÿ ÿ†ÿˆÿ9:;<=>?@ABCDEFGHIJKLMN¯ÿ¾ÿ ÿ±ÿ³ÿ ÿ½ÿ·ÿÒÿ­ÿÿÓÿ²ÿ‡ÿÿÏÿ‰ÿ§ÿSÿÎÿÿ»ÿOPQRSTUVWXYZ[\]^_`abcdªÿÿÅÿ”ÿÿØÿ¡ÿÐÿ¹ÿÕÿÿËÿQÿ…ÿ×ÿÀÿÿÿÍÿefghijklmnopqrstuvwxyz{|}¸ÿ¨ÿÇÿµÿŽÿÿÊÿ®ÿ+ÿ©ÿ¥ÿûÿÖÿÃÿ ÿÝÿÌÿÉÿÿÈÿÁÿ´ÿ¦ÿVÿ<ÿùÿåÿÆÿ¿ÿ•ÿ:ÿæÿ7ÿ2ÿÿøÿëÿèÿ~€�‚ƒ„…†‡ˆ‰äÿÞÿ¤ÿXÿíÿìÿ¢ÿƒÿ�ÿuÿ,ÿÿŠ‹Œ�Ž��‘’“”•úÿ÷ÿñÿéÿãÿâÿáÿÚÿÂÿrÿOÿBÿ?ÿ=ÿ8ÿ5ÿ3ÿ1ÿ/ÿ-ÿ$ÿ!ÿÿÿþwÛUçî¢}|×ù€»hîœvpB&J«haracteró maù  neeä � tï  bå  adjusteä wheî reverså videï oò otheò speciaì effectó  arå � useä iî thå messagå text. USING TXT TO CREATE A TEXT DISPLAY FILE... - Witè  WordStar¬  creatå thå ne÷ filå FILENAME.COM®  Thió maù bå �   donå iî eitheò thå Documenô oò Non-Documenô mode¬  aó TXÔ  wilì �   ignorå thå higè ordeò bit. - Reaä  TXT50.COM intï memorù (usinç ^KÒ oò equivalent)¬  anä yoõ �   wilì seå somethinç likå thå following: !)^Ae...and..lots..of..other..junk.............................^A Insert your text between the "?" and the "^@": ? <<--------(Insert your text on this line)------------------. ^@ | | - Inserô  youò messagå texô oò controì sequencå oî thió  linå  ^¬ �   addinç  aó manù extrá lineó aó yoõ need®  Iæ thå texô ió long¬ �   creatå iô aheaä oæ timå anä inserô iô froí anotheò file®  MAKÅ �   SURÅ THAÔ THÅ ^À (NULL© REMAINÓ AÔ THÅ END¬  oò TXÔ wil%ðJïí·w�¸‹öñ]çî¢ýÍ*(F1!\aYH^`ÅØ‰]´?Ýu>à.ÚÇw�¸‹öÛ³À¶xH í/î:píO6â9Á6îc( 9°FI�ö¯ï:pí/ŽŸÝ>þòö ¯ ý›»ÎÜEûø®ówÛUçÚ-çÚ-çFë�Ýñå•ag4^ïõzhŸ9Ðn9Ð9} r /£6vbÄàLlB…]®áe,­ÙCml¢í±IO!Öð¼5å”Å|á|@2$¸ÊqSªÈBñ¯s0næ(e¬ q5zÃñ÷9² µ|‘£”±.ÄÕL‡›Ît)F1¡5Ø#¼ &Ó•JÜ€�ƒ/Im"YÅÆÞ@¤—R‰ÖÀ9˜LW*Q¬9`ç¨�TL&>ÈtN_CM¦+y œUhbûœU`Y”R&ŒHLs<úç�GÎpVå`:ÜÌÁ9’hbÎ*”2Ö…¸šƒ/rÔ¢‰t–#,Õ½kº‚™öœ(e¬ q5G-&äÀºU;µ‘Š¥º‡” #“‰g9b“žB¬¡?žå芫9f•óq¡8£(Ò^Ž��çhby„d{‘^jH%Zƒ�ƒ/r$C‚«†NÈÄÊù€YÒì–3š#Ö”¤¸�RƺWAƒ%Ž=´_8Ðn9Ðn90ô±º²²1®vFãõi¯×C»ã|@»å|@ûùHEб;\¹}€ŠQLwdA±×ë¡ý;çÚ-çF*2‰½öIŽ¥‘,Õ=ˆ#ˆ©;+®¢jÒˆI…�,*,%?Åå¿æ(¤¢µ|á|@m¤ÚÌñ2º£˜ÐYÎè"FêÎ ©îA¨=V”R݃܉ô4Ën•caßq>@íáe(ú3º£˜ÐYŽÎékjÏ[SNYÌ‘ÄÊ ÈM ì ûºMzŠ®5•ó/52]/®B¨=�ˆ²X ½í|@»å|@ûùHEбÝßXÁYPìõzho:Ðn9Ð9} IaV¡‰´¾@2$¸Âvã¿0�Å9ÐYÔ8« D·‚}Î*H¦œ°sÔÆ&*Saaß�"ÚCFÅXJ~ ¡ö0¡Mˆ#HY¨M”2Ö…XôÐ~î|@»å|@ûy‡LW*QÀ¬©˜ †V±±¦ôRC*Qìõzhr> Ýr> sú’8B\(Î(ʇúÓÏ Ô,g4‡²j§6R±T÷�2aDb2kh"íåà ç’Ulì ÔF*&³¡öÀdºR‰">È�Oì;Hâ/52]/®"\a Z_8 •d) ù°ÊQ©˜Ì„Ú“éJ%Š5 챦$Å�Qr#XŒbRåhË9^α~eã?rÈ5çòœT²�b2Töоç|@»å|À¦â„pg´Ñ__=è÷†ãUÂ4 ’!"zÃñ² Úߺ?´[δ[ÎôOWV6ú½^í‡Î´[ÎtN_ÃR¬¡‰´¾@2$¸ÂåxØŽ¿ÇÀØÀa :Cç´óÊqïr<|`·9‚Üt>@¬åG CÑ­‹ ö –™ØDWN²MÌ*”VуX·,SÎÄfŽY!Ôÿå(¤¢5ç–dª¢,ivŽ’ bÚ_``MWl‚³ ¥Œu!®¢Šg9„ÚgbœUΰ,JÊ‘2aDbšçXеTÈ®T‚i/ÇÀØrpVå‰q#Ó!?È�NV90éz,D|šc)ÖÐDÚƒXƒ8‚TL&Q½‰” #ÓQªTáæ­›XеM¤=çì€éòœU`:ä9П~†H/5¤­aI¦‚²›h"íAár<ì Çß#J•*ç8#9G+È5dr’WÁdºR‰(©&U’âÚ/œh·œÝ<©r l£öÀY…$j1“…dIk°OÐ9} 'd®¢‰4hn``ç(,¯Á>ÉqÓ–{Î|mgñ×98›92qR!Ùn…æ Œý,»ø,»t–#6é)ÄZŽHÌRÝËñ²ó¯wÎ�ÿ)G²ÝZ°œ˜LW*q|ê6…à /ãõÎ+ÏÎrDb–ê^q”£¿2ÿ§óµ‘Šižƒ/rÔFªMÈ#ô»u&¢|H{èÚ²Â2£#ÔF*–ê YªÉZ;xâ|gb2Dê,‡P{�Gx©‘ézqL‘¥ºÎ*”åäö b2DG(ÄÂ6ÏœˆMzšC¬åè’jâYÎÄfŽ nLC'db…YÒE;Ïa9£yŽXS’â†ó¥Œu! Á€Ç0BfkÂÂ6HUB2¾n"CD4‘MñK´Îù€vËù€ö;è�1 l‹‡¤Ð~á|@»å|p>Üm·œÎ?»}üåí^Ñ«eI%’- l!ŠÂ.¡¬Ú©�T,Õ)F$&�N^éëØ¤ "¢?‚-f„¸PœQ”©„TàŒÀtÈ=çƒÖ�LFˆ¢°Ë&Ó•JHV±±"½Ô�J!Té|к6R1$«ØØÉ–Á3B$Å=`—–Æ29´.mjº¤X°´ªç|ÐZ£ýq2f�mñ�”óÁù€ãoŸß¿ýÂ}½Z–TB �Š`H¶$°Ed#kdrÇš’ f’£óÀÉýÞ3=0¶ ¦C[tÅuÓ!#,­ÂRr†ç§¸´iÇù uÓ%ÅèÚ’@"J2=`Ý.ZäÀ'öç’8ÊQÄ H•Ц¬ÐŸ~†H/5¤­a)9“G`:ÜD)c]ˆÅvC'dbå|À‰,Éž¡Q%™B*©&g˜R]—jr†Ò6³‚v29yŠÒ6³‚v–²¬�2aDb2ñÌù€H%–ê^ŽXS’â&FÔ™LkH™0"1͉ãY;‡PWsÐ`@i3ÇÂ6sç˜LW*q±©kk8>@{Ûù€vËù€vËù€•ÕçFëÏõz=´/8Ðn9ð|FŠNhž£sú"Ñ^Ë¢$¤L‘˜æ�Gà¬Ó!Ÿå�›XÊâFŽZ4±r>@¨½K!71°su×é*ø³ ™ä9îXÓÌ´‡RƺWQ‹ ­¡+®æ˜UÎ$C‚i/ÇÀÎQXuL‡›(e¬ ±XÃì*8« U*š(íìÐ!›—sRQ|à|@'«r4±‚}‚[Âì*8«`k2‚íKYÜ€(âjÑÄ œU(e¬ ±x��¬r hbû·>ƒ�ƒ³ ýépuå\§«XÊâ"ÛÀY…ÚHŶáhÿÊù€vËù€vËù€é'ë�íþtôÆhý9¬�×wVvGë�Ñúsn¯î®;ýÝi¯×Cû…óí–óëVíÔF*–ê^Ž” #“‰g9b“žæk9úÓÏðè|kûÓËL¦§9’PÊnæ˜UΔÒPââ*DYÒøœU`:ÜD—b“ ³«xÞšrÊbŽ$Ž0«Š3Šò!í9ÐD©îáeðÒî¤L‘˜æˆl¤š<È�NVa Mä3Ø9¤b2‰êM¤L‘˜æÎtÅUÌ*”4�Šö0» Î*4‘æ˜ÑÀš "FêΊEÀˆ!#"1Øâæ­›�Gÿè8#”2²‘³†¥U8!¥U°tN;¯÷†ãƒh¿u> Ýr> “U�ŠÉ$ª7‘2aDbš# ¥ì&D]“˜C¨Å2#SA�³ L‡› ÃDõ¦óËŒŽð2”U;µ‘Š¥º‡” #Ór |�Y…¸PœQ”©|Œž`a›9˜7�XÊâ¤JESV¸yë×x$ÖÀ™\ƒUJKñ­3,3YT�GxÞšrÊbŽ” 5©ÀYå|€TL&Q½‰” #Óÿ‹Gò…TÎÏ�ì œŸ ¾@´]âLª{ "VxTÈë•ó3‘®ÇBÄìSp&6±´êæ&fšH{�Gà¬Ó!÷Ðþì|@»å|Àóå蜾–C®Á4ê,g¤b2‰êM¤L‘˜æXÊâFŽY•ÃP²%Ryæ|@il]Sy–C¨=pVAÑá&R&ŒHLs,eq™8©pÿø;ÄfÆF$¦= ŒýrÓù¾@\(Î(ʇaH”,‹’"è„äÀù u2$˜JH…K›š.)F×–ÔVË’Jˆ™5Œ¥äÌù õÛ·N?[Ô†N¤m"ÄÌFÊ„‰ÉÄžóA·oî CÆ,°-’r>8püáíóg·_¸¯WŒ�Ñ…P%J›š.),­‚¡�¥‘̤zÎ'÷{çúæ¶d¼½Ûï\Ù]ÿè&–"ÂP]ˆD%–’3ÜüU×úÝM°u>h=#$«¢Œ,c)9ƒåŒ jc'FtcX·KçƒÖbf G,%gxûÖð#Xƒ·ûÓáG=oßš~„Z4‘"8#çƒÖL‡ŒRƺ‹žóA·oî CÆ,°-’r>8püþíóWn¿p_ïÒ‰ŒTb ‚P%DYR‰·‡lŠ�éGû3k)fÇùàä~ïX‹Äd@œzÀºèR Éèœvî÷V§`‹ 1¾nºµóAk«Àá„L”VA5Ý™¸Á™Œ8!¥U�Ñù õLD*aº œ�‰Ò*<뽡JH•¬©­L%¶ìÌù õ4eMÁQJC‰1º=FEQ ¦Çç·Ï?¼ýÂ}U:´~^Œç3¢‚Ì>^l"7«e)c¼!K°pFέY%!eˆÄdðˆ3!# †,I¼…�±]çƒÖœ‘48!¥UXïœvÞë­NP ¦Çïß>vû…ûûέEQØ¥TpFH†[;€À@¶�ݺ .)v>h]‹‰TÌ�*’a©&`Y”„Gx R�3r>hmc�é�1�íƒ-VV¯LûhËœ ‰’ŒóAëÈF^§�ë´èéi3™PdH•Ц”j–EIέ•e#ì€I�3¡@'dxöL•(¤¢žóA·oî`[³ÀÇ‚º]2dœÎŸß>>¿ýÂ}ýÂñ Ç8!¥UXßéœvzÃñº£˜–…äEÏù Û7w°-ŒYàcAÝ.2Îݾ Wn`½ßAuÚq>èöMàѳãó·ðìþ—;Çïyî|p>h=6r"•(ðÆ ÇèœvzÃñNÈDi•óA·oî`*»V¡¿”*:tû&@;ÝC˜Tßî:tû&ðèþùûoáþ ÷w¾|ÿý÷œ·»í–óÁù€+Óþ®>_ŽîŒV·6úè¿zeµÓ¿æ|p>`¤˜L¢š‘2aDb2Xƒ¸PœQ”¥š@YµS©Xª R&ŒHL&öœÎL‰Á)F$&ƒ…m°”E�õq3B¥š@*,lcÀtÈ¿V ER\,œˆÄ`‹›·nöt2BÊ„‰ÉwÆãçGëÏœ “IT3�2aDb2p>@*pF`:d,eQ8« ¬Ú©�T,Õ=¤L‘˜Ì “5ñ ò ö,…bÚ_8ÅUô§ŸaaßÁÒ6Å–Fr…[ÿƒ³ËL¦§�kxeë;<úÕ§ØÁýãïðÏ8ßú�úÓá[œå9,g4ϱ´¦ŒgyŽ¥‘\åà¬Ê¡¬Ú©�T,Õ½)F$¦y±–CòšóôR#ODAjÉ*6öR&ŒHLs<ºõoØ9¶úg9ný;vŽ�;g9n}���c¸{æ|qz«‡ömçÚ-çÖ-W98› ‘žBYµS©Xª{H™0"1ÍÁâ:­¡ù¼¼@¬E¢5È#pV9Àt¸‰�,*p&6±”Å (» Q×$æ�Gà¬B)c]ˆÅâ8›à¬‚jº3š;`ŸäˆµH´y„—QHU!YÅB*©îAYµS©Xª{H™0"1™5tÅÕŠhÏù¾È1«rˆòë&2ía™Ñ ��‰NdI°sXÎhŽXS’âh0 Äk9„©œh"íA�³ ]ŠQL*0rí#çÚ-çÚ-ç®LGëÏ¡sÚAgŒánµÓÇ*:ýÓ.GÓ•�ÕOpg´Ñïõzhv> Ýr>`ÏK~šãykÊ) s–#\�³ ŠþŒ�,*Ümô×Wú½áøàAŽN&×ÐW1«œÈóÒª ò$9£98«piSÓ%µ ;ǺU;—65]R›èÚ’Îrˆ5tN_˱”Å çò\N”58«�ÉÉSXSÒ3É=´ï|@»å|ÀvIìåèœv^9î Ç�Š/Ð¥®5Wñ¨‰RÝí�ÿvz©‘'¢ Åo�åj ûŽóy¾”Å Dªm—8“ê y½g¶(ìRªÉ5´ß:Ðn9ðË·n­R¯×ªìõ ˱׳ƒ^ÏrF¦×ûºQ×{íßÞZu>`¤"ÆÂ6L‡Œñ’H�3»�ß…P%8#¼{ë«w¯¡ý­ó�Ñ~å|@ûo¿½Óþ壑Šd Û02¬g2¢�ŠÞÚiÓƒó·¾Bû¿‡óíW¿‡ó;©Hf3ÇÂ6st)F1©Àt¸ ;G²Š�½�H/5¤R{ÎäZŽBª*Ç­3çò\”¥T÷rˆ5t…º :dó2 ©h b ûQù FOÀY¦ÃMÈ5VMΜÈódHp¹ ‘‘؃}–Ý BíAªHfrc?€P–3šc z�«ã|@žO¯ì~ƒÎöêkèlƒ[ÿ‚GëW66>Ånÿ`u´þ'¬¾†Îö7è¯_žå°stN_ÃR7rÔFªMçò<²jRå98“j²–C ˜æ98«r0næèR& '„ûÇۈ͌�HL%Æv!yœ‘Bm¤b*Áœ‘óɪh ‚PåmkP©˜LÏùà|Àó) sÚ�Œ˜‘T”2Ö…XP ©ð¼5å”…Ùg©˜L¢š‘2aDb2p>@Ô5 !PHE8G²EÓU8?ߢ…dtÅ3BÊ„šP‰eFŠNÈ€é���3’jQ–TÂP)™J,%g¶aÌHª 툩;+¨„50´SXQRÙs>8?Zïôw‡ý•Î5Ýõоyë¦óÁù°Ón9œX�G# ·WwW‡�þîÔùáî5ÝõŠ>¾ÜÖ:$aŒ‚!nŒr~ãÎ5ÝõŠ>^ÝÖ:RD¥óÃõÎîÆðšî¿zE¿·­uHV±±†Î×;»Ókºÿê}þÞ¶Ö!YÅÆ˜:?\ïìnœ^ÓýW¯èó¶µÉ*6¶À©óýñ�kºÿê}¾º­u UÂ0�¡+Ìu2Î÷§Ãkºÿê}¾µ­u ˜DMH™0"1ç;£�Ëþ5ÝõŠþ°¿­u`Y”„” #“q>80\¹}€þ«WV;ý©ó[—ãé5ÝõŠ~Eë0+m)6 ÔV*vþr´;_ÓýW¯è÷µ¥4”ɪh ÂèöØùà|¸ÛçƒnœZ¯ìŽŸÛ]=À´³ºÛ™b»¿Û×ZÎÝþ 8î¶Áùà|p^�wŸÓçÇÇÛZçƒóÓÎênçšózãt¤·÷·®Ü¹ÓßÕ¡¶R1Ø‚é��ÎoŒÇ+ל×+W¦Ûz[ëÅ ¡¶R1çõÁøu½º u˜#eˆÄdœ×«ë#ýá�m­Cd#kdrÇš’ f’�×Õ‘>Ö:©ò±óúÅ7tÿtÔÑ:,(î#Z¼ÔHv^WFz´Þéïû+d„dpF�ŠÉ$ª)F$&óØyýâzúÉzg[ë° ¸�‰E\(Î(ʇÉÎç7Æã•ûz¸2Ò�ÑÆe_ë #$ƒ3B-&„” #“yì¼~ñ ½²úÜhý9­Ã‚â>8#…Z4‘œ×ã×uUëе'„” #“[�óúàõ‘î_ŽvGc­C²*Ú‚`v^W76ôÖåxªu˜•6:¯‡«z8^­kRFé:Öà:-PŠ‘Jçõ‹oè�ñxå™ÖA ,®Óœ‘B²Š¥jÈy=\éázgwcªu�’qkúØyýâúz¸Ý~¬u�(ËûH¥ëXƒþtkpkè|p~c<^9¿æ¼®nlèáx}´®uH¥ëXƒë´@m(F*�×/¾¡7Æã•s­Cam�F±,p�¨ ÅH¥óÁùávøñ5çõpe¤ûÓ¡ÖAFH†******** INTRODUCTION... TXÔ ió á prograí thaô allowó á worä processoò sucè aó WordStaò tï � creatå  'instant§  texô  displaù  .COÍ  fileó  tï  displaù  texô � messageó  oî á terminaì oò tï senô controì sequenceó tï terminaló � oò printers®  TXÔ permitó thå uså oæ thå tildå characteò  (7EH© � iî  thå  texô tï causå thå displaù tï pause¬  creatinç  formatteä � displaù  pages®  Non-printinç characters¬  sucè aó ESC¬  maù  bå � synthesizeä  foò  uså iî controì sequenceó oò tï  creatå  reverså � videï oò otheò speciaì displaù effects. ~ SOME APPLICATIONS... Instant RCP/M Message Files... Insteaä  oæ  writinç aî assemblù languagå filå witè D  lineó  tï � prinô  á message¬  theî assemblinç anä loadinç iô eacè  timå  yoõ � neeä á ne÷ message¬  TXÔ anä WordStaò caî dï iô foò yoõ mucè morå � quicklù anä easily Instant HELP Files... TXÔ caî bå useä tï creatå HELÐ files®  Typå thå namå oæ thå iteí � oò procedurå yoõ neeä helð witè anä geô aî instanô display. Terminal or PrinPèO‡��×/¾¡û§£ŽÖAí>èP²óz¸2ÒÃõÎîÆPë #$CàÖð±óúÅ7tÿtÔÑ:È¢ÝJv^WFz¸ÞÙÝ8Õ:ÈɸuúØyýâº:êh÷ñR#ÙùàüÆx¼òìšóze¼¢·µbÔV*&ã¼­Ÿêm­ƒP%fM·[(:d¤L‘˜Œóúѽ1¯h&V¡´RM ÙùàüÊês£õç®9¯W®L·õ¶Ö!ŠBm¥b2Îë�Ó‘ÞÞ?˜>w®u¨­T ¶àŒP‹‰Tt)F1!çõÁøu½º u˜c Md¤L‘˜ŒóÁù�ñxå½kÎëƒñ뺿¿ªuPD%$C*ô1°³ÒF$QÎëƒ×Gz¸9Ú�µ‘³ÒF •XZ…$ŠÂy½reº­·µQœj+“q^W76ôÖåxªuˆ¤JpFH™0"1çõÊxEok qcj+“q^�ÖOõ¶Ö!£©1°Š)F$&ã¼>¿®W÷´b(:d¤L‘˜Œóz¸2ÒÇZ!œH•��×/®¿¡7Æã•÷´ÊÖ´�ÂÚÚy½2^ÑÛZCÜ…ÚJÅdœ×/¬è�ñxå\ëPZEXJÎХńö-jÑDr>8ß?u®9¯WÆ+z[ë�  M ΑEºî|p~8^­_Ó¯�tÿøÎ�m­Ci!�¬’ 3XC CÉÎëƒ×Gz¸9Ú�µ¥4”RÕ ;¯‡«zër<Õ:8¯Ç»«zUë‰1(Ä$:¯wû­up>8?ýd½³}M¯ŒWô¶ÖaBŒÚJÅdœ×£õS½­u¨­T ¶PtÈH™0"1çõÊ•é¶ÞÖ:DqB¨­TLÆy}0~]¯îh&ÄH™0"1çõôÊHß?ÞÖ:ÄfÆF$Æýãmçõ‹+zc<^¹¯u˜X ¤’1Cml¢¥š@²óÁùƒésç×ôå–¾ù«®5ô;ÜÜ?Ö¡©&èRŒbBÎçõå–îîoÜÙ¿9R‘ ca¦CÆŒxI¤n:¯/·ôMpFx÷ñ»ªg„wo}õîµ›ûÃÝý�;ÎëË-}óñÍýáîþÆ" Ã;v°3k2è s�Œóa§½œ8 Å„k‘‘…ሌ íC¨2BDÂL"baƒÎÊ*€à|vðÊù3ÌLQ·Ÿ·�öZp~ëÊ�;ýÝkÎëË-=ÜÝ߸£ue �Y!ÔuRØ¢+®“óA·oHɰ´ $¢$ã¼¾ÜÒÇûÃÝý�;ûýñÖ$‚Àú•� UB(ôÇwœº}3 +Ìu2`‹ëD58#oœ5;—™íq<ž8Ú‰<}Žk-ËžR"¥Dï�Þ;)%zï¤Dï¤Dï$z-Ëîî¸;9grθ;9gÜÉwrÆÉµ c-ÃXË0r»?½ûûŸ§?ØÎôò²êyâãº�/¯v¹äu~æõ¿k-ÃXË0Ö²ìAD`f˜�™�˜X-Ë. I´Öh­!‰Ö­!Ñ¢Õ²¼IÂÝ‘;rGf†Ì�rGfµ,»$"‚œ3ŠLïI˜]†"Óeµ,»»# I¸3CîŽÉq9&¯eÙ…EF‘EŽF"‰$#ÉŒ$³¨eÙ… ™�)�)‰d$É$SäZ–]È‘;rä� DÈ™™¼–a¬ekFn÷Ÿ><~çý:¯qfž>ml/Ø:OÁ:s™'þ]ç×mºÖ2Œµ c-Ë›9IÞ¦’Ì¢ár9&oµ|½}û?»ÞqÊ)§vÿ±)TTYPEXB.DAT?ßÿ šÿ›ÿŠÿ™ÿÄÿ•ÿžÿŒÿõÿòÿ“ÿ˜ÿÞÿÜÿ‹ÿ –ÿ”ÿ—ÿ‘ÿ�ÿƒÿÑÿ�ÿoÿ!"#$%&'()÷ÿ¬ÿ¤ÿ¢ÿ�ÿ¾ÿÌÿ»ÿ†ÿÍÿ*+,-./01¹ÿ«ÿºÿœÿ¸ÿ’ÿ¶ÿ´ÿªÿËÿµÿ·ÿ2345­ÿ³ÿ6789:;±ÿ°ÿûÿöÿïÿåÿÅÿ½ÿ¯ÿ<=>©ÿ�ÿ‰ÿˆÿ‡ÿÿþ¥>ý�¦çÎþ^b(5†R±í~<ýëmÿöë/K ¥ÆPj ó]Ua­3£ï{xï‘R‚sƨ*¬µ1Ìwï=œs`fxÇðŽáœƒ÷}ßÃùÎ÷1”C©Øv�áðtDO·%†R±í><¡ „ÃõíÆLÓ‚ä oæ timå anä inserô iô froí anotheò file®  MAKÅ �   SURÅ THAÔ THÅ ^À (NULL© REMAINÓ AÔ THÅ END¬  oò TXÔ wilì  prinô �   strangå   thingó  afteò  thå  texô  messagå  untiì  á  NULÌ  ió �   encountered. - Save FILENAME.COM and run it as a .COM file. ~ EXAMPLE... TXÔ waó useä tï creatå DOC.COÍ froí thió file¬ TXT50.DOC® Ruî iô � aó  aî examplå oæ whaô mighô bå done®  Noticå thaô  blanë  lineó � werå  addeä oò deleteä tï formaô thå displaù pages¬  anä thaô thå � tilde  characteò  waó  eliminateä  froí  thå  actuaì  text®  Thå � backslasè  waó useä aó aî intercepô characteò sincå '^' waó  useä � ofteî iî thå text®  ESà sequenceó werå noô useä iî DOC.COÍ sincå � theiò uså ió highlù terminaì dependent. I'vå  founä thå capabilitieó oæ TXÔ verù usefuì foò lotó oæ  'odä � jobs§  thaô  havå comå uð froí timå tï time¬  sucè aó  settinç  á � VT10°  compatiblå terminaì tï emulatå á VT52¬  settinç  aî  EPSOÎ � printeò  tï  prinô iî Emphasizeä modå wheî printinç listingó  ofæ � thå screen¬  anä iî quick' í|TXTL COM¢TXTL DOCÄTXTL MQC'3Ù†>Ã222íS ~íSqíSý×!]~þ ÊÌ!e~þ Úw#ú\ÏþÚ‹?$íSh\×Í„´×æÏ·úÍræÏñ!Œ…o6$}Ö oë×> ß> ßÉ!û"ùD×ÍbþY 2÷-ͯ·(!û€*kéÕåëÏ\ÏáÑ·(î€Ï!û~þ #ë×ÃVÃ!ûX×>A2ø~þ(:øß<2ø>.ß~þÊNß#þ ô á#"ùn×1àÍbþ(¼þ;(2æßÖ@G(0Ï׬ ¹0ö*ù ͈~þ(›ö~#þ(îþ öÓ׉*ù͈~þ øÃÌåÕÅÏÁÑáõÍ„ñÉõåÕÅ_ÏÁÑáñÉåÕÅ ÏÁÑáÉ#~æþ(0þÊÄßõ:÷·(ñõåÕÅþ (9ÍÞÁÑá åÕÅ ÏÁÑá· ñþ ÊÆ~þ(–×ÍbþÊÚþÊÌÉñæ_ÏÉyæO>‘G> õÅÍÞÁñ÷ÁÑáÿ³Text library by D.Amos. December 1983. << With Printer facility >> $For Printing? Y/N $Library file menu:- $Choose A\Z keys. ;=View all. ^C=Exit. $CR=Page. ESC=Menu. ^C=Exit. $ Default disk LIB files. $? $1AH in LIB text. $????????LIB?Load a .LIB file using CP/M cold start, i.e. A>TXTL D:TNNNNNNN $Âsk LIB files. $? $1AH in LIB text. $????????LIB?Load oæ texô fileó useable¬  noô anù gooä  foò  extensivå � businesó    applications¬    buô   usefuì   foò   manù   FOÇ    members/homå � programers/students, applications.  Thå  operatioî  oæ TXTÌ anä thå creatioî oæ á useablå texô librarù filå  arå � shown here. Tï operatå Wordstaò (oò  anù texô  editoò, aó  lonç  aó  controì characteró arå enterable witè it©, enteò thå 'D§ modå (foò documenô files)® A filename with a filetype .LIB, must be entered next to fill the 'D' prompt foò á file¬  endinç iî á ®  Afteò settinç uð youò requireä screeî width¬ � creatå  youò TEXÔ MENÕ firsô iî thå file®  DÏ NOÔ labeì eacè menõ  linå  bù � numbering aó TXTÌ wilì makå eacè linå á letteò froí thå alphabet¬ foò yoõ tï chooså whicè sectioî oæ thå filå tï view® Afteò entrù oæ thå menu¬  á ^PÄ oò controì Ð theî Ä musô bå placeä aô thå beginninç oæ thå nexô line¬  thå samå musô bå entered afteò eacè sectioî oæ texô excepô thå lasô, whicè useó á 1AÈ oò SU controì characteò tï marë thå enä oæ file¬ thió ió donå autINTRODUCTION TO THE SUBJECT OF A TEXT LIBRARY. THE ENHANCMENTS OF THIS VERSION. OPERATION INSTRUCTIONS FOR WORDSTAR AND TXTL.COM.  Firstly a short explanation of the use for a text library; Informatioî thaô caî bå displayeä quicklù usinç á simplå A-Ú menu¬  coverinç � thå  entrieó iî á .LI texô file¬  withouô havinç tï makå tï mucè efforô  tï � achievå  it®  Simplicitù  foò  settinç  uð thå printeò  tï  prinô  thå  samå � informatioî iî aî acceptablå format® Theså arå thå reasonó foò thå followinç � program TXTL.COM. <<<<<<< SPECIAL NOTICE >>>>>>> Thió  filå TXTL.DOà haó beeî formatteä intï thå TEXÔ LIBRARÙ FORMAÔ anä  caî � bå  useä  no÷ witè thå TXTL.COÍ controì program¬  jusô returî tï CP/Í  warí � start and at the A> prompt; A>TXTL TXTL.DOC ------------------------------  Aó  thió  filå  ió  programeä  iî Z8° assemblù  languagå  anä  haó  standarä � BDOS/BIOS addressinç throughouô iô will worë foò anù CP/M system¬ includinç thå  Osbornå omaticallù bù Wordstaò sï neeä noô bå donå bù you®  Anù numbeò oæ menõ lineó  anä  texô sectionó  arå  possiblå  untiì thå 26th®  Afteò entrù  oæ  youò  texô  leavå �ŠWordstar by ^KX or control K then X and you are now ready to use TXTL.COM. Á  commanä  strinç musô bå entereä froí CP/Í colä starô anä youò  texô  filå � should have the filetype .LIB. A or B disk can be used. Here is an example; A>TXTL B:MYTEXT Otheò filetypeó caî bå used¬ iæ formatteä foò TXTL¬ buô theù musô bå entereä � in the CP/M command string with the new type, as; A>TXTL TXTL.DOC TXTL.COM written by: D.AMOS. 68a FINDLAY AVE, ROSEVILLE, N.S.W. AUSTRALIA. 2069. A member of a Sydney based software group for better assembly files. ------------------------------ vÿѤTXTL.MACW ßÿöÿºÿ«ÿõÿòÿ¬ÿ­ÿ³ÿ»ÿ±ÿ°ÿ¾ÿ¼ÿ·ÿ¶ÿ¯ÿÓÿÄÿ¹ÿ½ÿªÿÏÿÑÿ²ÿ ± anä thå Executive®  Buô á computeò witè aî 808° CPÕ wilì  noô � run TXTL.COM, unless re-programed to do so. Thå TXTL.MAà filå haó beeî writteî tï compilå intï á 1Ë TXTL.COÍ file, smalì enougè foò á useò tï forgeô abouô disë spacå problems®  Thió woulä leavå thå � resô oæ thå disë availablå foò the useòs TEXÔ LIBRARÙ files! Any screeî widtè probleí ió totallù thå useró anä caî bå setuð aô thå  timå oæ  writinç thå texô file®  Iî Wordstaò ^OÒ 52?@ABCDÍÿ©ÿ–ÿšÿÊÿËÿ´ÿ‹ÿÔÿÀÿ®ÿÛÿÌÿ�ÿžÿ“ÿŒÿÞÿÐÿÆÿ‘ÿoÿ¡ÿ�ÿ™ÿ†ÿÉÿEFGHIÈÿÁÿ�ÿJKLMNOPŠÿ‡ÿûÿÙÿÃÿœÿ›ÿ˜ÿQRSTUV’ÿ÷ÿÕÿ—ÿ”ÿøÿðÿåÿÒÿ£ÿˆÿÿþ#â”ìÉâÜ<hqJnÏÜR#¾b¿…TTF¦+ßf—Ý”´ÃÔ< 5ÇàÉà.¹`œ0]1LÍ“Á]ã \ ¦æ‰/:ÁæÛ¼©ŒF…[Š-žä‰ÉW‚�â9ȓʥ‚Qá–"ÜÐU¡ÎÀ•Àgã[˜/`}Z•‘+Åiv9ÚÞÌZŠpC‰o¡¤È.y(5»\˜Ü�|ëZ¸K.g·äx¡2–Ù%¥f— “ƒ’`&XŒdŸâ9dƒÆÄÄÐ"“›ÈÀ]ã �ã…ʘ¸’Ãgt1§ì”Ù%op‘XŒ E¸H‹KßeG´\3CÉFÀµXZ\!•±¤@`5->ÀLPjŽç Ç%í½y p׸ÂEZ”šZ!H”Ù%Pjv¹0¹�*#=¤9B¶Ò”š].LòœÌ Cc¸K‹àÈØµÂÀ•TF¦+†Ð¬û|AaSUÆÁ§Z<‡‹´8˜š§˜w Mp‘¡Ù3˜š'¨Ù€+_t‚Í·¸Rh PrTgOCš&àJPú§JÚ÷»Ï˜’k{÷mjÀ§Z<ß Ç H\ÉÓ«ŒSód0%·gf Ð"p%à+ö0%·CÉf‚Å(À]ã \ rï.u×2LÍðE'•±EàJPÒ¾ç€sóÀ¼0p%#¸kÞCL VÓ´\ øŠ=eW*À”Kó�/•ñ®¶RÁ§ôÌ`J6ßf˜š'ÛTF•±¤È.y(5»\˜œm*qñH¯\תâ'¤W ®¹ª‡ôjÁ5T•Qe\¬Ås¸K.gœ`Ïîp%  M05O›Š-3Ò«¹ªŒ*ã”Ì!”ì½m*sH†ôjÁõIUUFGF 9Gf@¯–ÌdLÉÁåõ ή‡Ã 98\o*s0gŒôjÁ9${ñFÅvgŒôjÁÃZUJuÆH¯<\W•Qe4Î1d`jž ¤È.y˜}*Ï 3¬ë“R7•©ÌH¯|RªÊ¨²]^¯øU}À@ÃTftƸ^Wì©cõ*ØSÇ@*˜f•QeldptÞŒÉݯk…Ó²w˜’ƒìÉ8ÊaSÁ“ÃËarÆÆô ×kE1p%{†‚#³M}À2Ø2« 3ÆõºªŒc˜/˜ MàS€éŠ!9h±q˾Yæ–"»Ï_ª„´S\ŽèV?ø6O;« ˜‡›êoUÆ·ì›en)ÂÃì‚fÀ• ¤È.y(5»\˜¬O릂¥ãú´ªŒ•ÁNq�ä ÅÆ-ûf™[Š`ä©0…MOãå`¾ðl±`õ*HWh¨^eTmc×â9t×"ƒK ·H› :c<¬Ue4Ê®TÈ¥$Z<NàÛ<í ã‚ÛTb8â©ãä�V•Qe<-{NP’`œo*1¬G`õƒoó´³ ú€�†�¢± :c<¬Ue¤ M°S\€g~Ý_n*è΃-³Êè輓ƒ)9(5EðÄLnSA° qñ*èæá,Ÿ© x“9]ÞYe,•Ê3˜’®¤ ¸ì—Me�W|D07ÕߪŒßÂ=Åi£Â-ÅMKÇõiUÁ“ÃË¡øƒÊØ]‹ 8Á如>`n2§Ë[tÆx¸®*c‹ÅÑN‘!ÇÆÉp%ˆtÅà‰™Ü¦‚-Ì*èÞdN—·CVA0¨ª 3ÆÃuU÷Ü"ìð)õMe�¾ÑÌÃMõ·*X:Ú2«à©ãå@‰¯TÐãẪ`‹«WÁÒÑO*xr/‡=ú®‚-,*cž˜<ø¾E²O8Áå=Å>¥¾©`8ÅKÜã«c8b‹«W}6†‚#3Hì—M}ÀJ|Å·Cõ*èJMV\QAgŒ‡µªŒ*#þ 2Øž½‡yaXŒ¦ÅCO-òGø]e´\3÷“K;”¾CI>€qv wÍ{è®E®;Åe˜†˜¸ÓàJ*£q.Ï ÄÄÐbã–}3 °Dnbºû¨‚> õa¥u]« –ì=–[TÁÒq}SUðäðrˆaU3í Jò)Â]óºk‘!{LW¼©`éx_ÿkà`õÃTæôópSý­ –ŽÖª2ÆSó§eïÀ BÚ).ðñ뿪à©ãåÒNqQ§2ÃÔ<ñE'èÉ·7•©Ì|Ñ�èV?Le~ñY}À<ÜT«‚¥ãƒµªŒSZb€ SóÄ�à´ì8Aê§æiSÁ“Ãx9¤NqR“Ÿrßf˜š'¾è´©ðE�éˆ>à<¬oª ú€�J“oó‹ßTø¢û~D07�nUм©þvÈ*ØbÁ@*ØbÁêU0œâ%òE÷]eTç�ìðR§S󴩤Nq:¢h˜Ê¬‚>`Ö©"ŽsHvx²© 3ÆõºªŒÓtLÍÓ‰+¹»fù~]ë°ê°>¨Ãú¦n*X:®O« ž:–arÆÆ*cŠ05OÔ–è®E®ä\Š”ƒ©yŠy'È1@†—› ú€�†OßLU}À›©Ì/n‡@*è¦2« 3ÆÃZU&o´±dï±8?!Ž%;×ò9�#^\„øi" ›Êh”]©0%›o3LÍSÌ;¤\ Myñ ¡Ù³MÅ\©Gô ¾Í¡9tÆxX« ú€�ßfs¥ªŒFÙ• Sr05g¼© X†Ã¡ª 3Æõºª˜+Õ÷õ˜f•1E˜ró‹£ûiªÐ³p‚ÖMO÷!.^KöÍ•úq<-{NÐ]‹ SóóN`ŸÜ¦‚>` Á·Ù\©*£Qv¥Â”ØR ™µ‡1ï´© X†Ãƒª‚Î×몂'‡æJõ}UÛ\ Œ²+ñâ¢A‹�a]ë°ê°>¨Ãú¦W‚© ú€y¸©þVKÇõiUÁ“ÃËÁ|á=.*xr‹£ý ÂÆ1ÑÌÃMõ·*ØbÁêU°t\ŸV<9¼bq´¯*lÃzÄÒÑ–YOãåÀÆ1¨Pâ«#ú€�J“o³ :c<¬UOÍÞã¢2NÉ�ÑÞ $Ÿâ}ö˜®l™?¹´p‹´©ØÞŠ�Gô«n(ñߪØÞŠ_�X²÷¸çLetÄ‹‹•Á”Dºb0*¼© ˜‡›êoU°t´eVÁ“Ãx9ØÞŠ_UðÔ1¤�â¢2ªŒsHv€)9hÑ8óbt×"”šdoiS))¶xľXÅêU°/V1� öÅ*ÎE}À2¬‡ª‚Î×몂=uœ‹ öÔ1� öÔ±zì‹UÌ“ –ì=ç'ì©cžTЫŒ*ã’=€îZd(5»\˜´yS)5»#öÅ*æIûb«WÁ¾XÅ@*Ø«8ô˰>¨*èÒ�UÐãz]U°§ŽsQÁž:RÁž:V¯‚=uÌ“ :b•QeœC²Ï`ƒÁNfùœÀصx¾©Ø~ľXÅêU°/V1� öÅ*ÎE}À2¬Ÿ« :c\¯« öÔq.*ØSÇ@*ØSÇêUЫŒ*£G�éŠÁ·Hvÿà„fÝç ›Êžc°#ú€ópøUUÆ)9àJÐ]‹L8ÏàÒÂ-´Xíyƒ%ró�ÁO›Êžc°Ã}À2ÄÅ«ì9[�ØbÁêUÐÌÃMõ·*c\­*xrx9ØL‰U°t´eVÁSÇËÁfJ¬2v×"W‚ù‚ Z„³|ŽÎ7tÆx¸®*Ø«˜'ôópÓ�qæ[L³ ž^ö¬wVÁž:æIûbó„8Z~H�½Gç͘œm*Ø«X½ öÅ*RÁ¾XʍŒ*X:®Ÿ+âØ ¸ÌL��ó ëçúRO/ž�Ê8%\ æ� ºk‘ÉAÉÞo*X²÷د*ØSǹ¨`O©`O«WUÆR©<ƒ)9 +Pjv¹0¹kñæ�ìp€)9•±¤hÉ´Ø EG;E†ŽÎ›19à¨`Oó„8N-fï/À‘qr\ 28:oÆä6,ý¤‚'‡ñrØs ¶ªŒ)‚o‘`" Ÿ(Hø ù”ptœg•±¤%2ä »TÈ yŠy'hݵÈ6s¥>9¢ó%« ó%« ó%« ó%« ó%#âøäß28:ßTưg˜—i"÷b-’ƒ©yŠy§|ÑiSA°úa]¯KUÁæÁ« 臬2vŸ A\ ²Êhw¹'´© ]a ¡ztÆxX«ÊX²s­åsG¼¸9ð-ÒDÀ¥…[¤M¥8?ÑÌCq*èŒñp]UÐ̃ŸTÐãẪ #VUFJ|ÅîÀÑy3&!-³'ƒ)9p”ÃÔ3¹MerÆÆGô«|›§�Uм¡ÄW|;T¯2NÉAw-r‹ç/UÐ 4tÇÆ*èŒñ°V,Ù{,)¶¨‚¥ãÙÅ™ žÆËarÆÆ« ú€7Ýg¾²Ê¨2rmÍ ÃÜ’ÁiÙ;p‚¹%;<à®¶RÁ/.¬k…!C›€+Aw-29h«ŒŽr¸ q%w׌ ¤È-.w�+p%è®E&v׸THqSA�†¡ª`ÉÞcK-² &‡YO/‡É¯*£Êøo9^@âJºk‘É�Ý5.• JZ|€™ Åâ—@*9kñ`ÉžXÚ‰k‹ç*#øöŒ€k³QeD0Ð�:·qL�[Š`ìZ<‡îÒÞySÑãa­ˆã”Å;™ås‚‚#3 0_@ ptÞŒÉm*#–ì=–[D³AžÓC€É¦äà’ƒøReÄ“Ãx9LÎØxÅ1&°»Æ¥B$ 6•QeD�†’b h8–E£v׸TÈ9½Z2Ó¦2¢X†õIEç�ì LÉAw-r‹ç@à輓ÛTFtƸ^WÄ1Ç ˜C2(Ù{h¸6ƒ©y‚ÅÈÀÃz]7•Qe4bàJö G9À•ä¦29cãõèV?ø6O;« hX×뵪àÉáäŒ�¨Œ*ãiÙ;p‚¹%ƒ)9ptÞŒÉÁ´ÄÂ-ÅM¥¥ùˆ>`õÃÍz¨·*èú�TðÔñ¦ú[•QeÌ!W[J!³ö� ìrŽÌ€T¿©LÎØøpÌ!`õC •QeÜs‹à(ð)õMerÆÆŽ}±Š�GË �£ófLnSÁ¾XÅêGË ªGç͘ܦ‚t…�†êG»Ë¦ä ìrŽÌ€Gç͘ܦ2ªŒ>å‘î ìrŽÌ€Ì!Ùƒ_› ú€e°eVAgŒëuUUFŸr€8*Éà\ JMFž!‡àÈlSA° ‡§