rheffel@cs2.wsu.edu (05/30/89)
I have seen a lot of requests on the net asking how to apply the patches from bugs.nosc.mil, vm1.nodak.edu, or BITNET's listserv@ndsuvm1. So, I decided to write this little note to help others. Believe me, the method I used is included in this file. I just would like you to read some things that I think are important and relevant first. First, I want to express some very strong opinions. AST's MINIX is a great for learning about operating systems. I started first on VM/CMS, then moved to PC-DOS, subsequently UNIX. I have come to appreciate UNIX thoroughly. The main drawback to UNIX is its interface. For hackers like myself, the spartan interface is dandy. But for everyone else, it is a major pain in the rear. I would like to see UNIX become as dominant in the upper-end PCs as DOS is on 8088/86 and 286 machines. However, I believe this will not be the case. Why? The tools, such as Turbo[ Assembler, C, Pascal] as well as end-user programs have such a nice rapport with the end-user that will cause them to promote an operating system such as OS/2 PM or WINDOWS-based DOS. What do I think should be done about this situation? First, I have been working on modifying MINIX so that a floppy disk (5 1/4) or micro-disk (3 1/2) can be formatted from MINIX so it can be used solely by MINIX (faster, since no boot, FAT, or DIR sectors is necessary) or can be used by PC-DOS. The requirement that MINIX use another operating system to format its diskettes defeats the purpose of an OS. I also believe that all programs should have a flag "?" or "-?" that will display the syntax of the command. Of course, programs expecting stdin will need to be re-written to accomodate this flag. The ramifications extend further. What happens if the command is sitting in the middle of a pipeline with the "?" flag activated? Nevertheless, I am using in a personal capacity Allen Holub's getargs() routine found in Dr. Dobb's Journal May 1985. I will write such a routine from scratch at some point with some improvements and place it in the public domain. But, I suggest that people look at the article and the following source code: /* getargs.h */ /* Typedefs and defines needed for getargs */ #define INTEGER 0 #define BOOLEAN 1 #define CHARACTER 2 #define STRING 3 #define PROC 4 typedef struct { unsigned arg : 7; unsigned type : 4; int *variable; char *errmsg; } ARG; /* GETARGS.C Command line argument processor for C programs */ /* (C) Copyright 1985, Allen I. Holub. All rights reserved. */ /* This program may be copied for personal, non-profit use only */ /* Dr. Dobb's Journal May 1985 */ #include <stdio.h> #include "getargs.h" typedef int (*PFI)(); static char *setarg( argp, linep) ARG *argp; char *linep; { /* Set an argument. */ /* argp points at the argument table entry corresponding to *linep. */ /* Return linep, updated to point past the argument being set */ ++linep; switch(argp->type) { case INTEGER : *argp->variable = stoi(&linep); break; case BOOLEAN : *argp->variable = 1; break; case CHARACTER : *argp->variable = *linep++; break; case STRING : *(char **)argp->variable = linep; linep = ""; break; case PROC : (* (PFI)(argp->variable) )(linep); linep = ""; break; default : fprintf(stderr, "INTERNAL ERROR: BAD ARGUMENT TYPE\n"); break; } return(linep); } static ARG *findarg(c, tabp, tabsize) int c, tabsize; ARG *tabp; { /* Return pointer to argument table entry corresponding to c */ /* or 0 if c isn't in table. */ for (; --tabsize >= 0; tabp++) if (tabp->arg == c) return(tabp); return(0); } static pr_usage(tabp, tabsize) ARG *tabp; int tabsize; { /* Print the argtab in the form: */ /* -<arg> <errmsg> (value is <*variable>) */ for (; --tabsize >= 0; tabp++) switch(tabp->type) { case INTEGER : fprintf(stderr, "-%c<num> %-40s (value is ", tabp->arg, tabp->errmsg); fprintf(stderr, "%-5d)\n", *(tabp->variable) ); break; case BOOLEAN : fprintf(stderr, "-%c %-40s (value is ", tabp->arg, tabp->errmsg); fprintf(stderr, "%-5s)\n", *(tabp->variable) ? "TRUE" : "FALSE" ); break; case CHARACTER : fprintf(stderr, "-%c<c> %-40s (value is ", tabp->arg, tabp->errmsg); fprintf(stderr, "%-5c)\n", *(tabp->variable) ); break; case STRING : fprintf(stderr, "-%c<str> %-40s (value is ", tabp->arg, tabp->errmsg); fprintf(stderr, "<%s>)\n", *(char **)tabp->variable); break; case PROC : fprintf(stderr, "-%c<str> %-40s\n", tabp->arg, tabp->errmsg); break; } } #define ERRMSG "Illegal argument <%c>. Legal arguments are:\n\n" int getargs(argc, argv, tabp, tabsize) int argc, tabsize; char **argv; ARG *tabp; { /* Process command line arguments. Stripping all command line switches */ /* out of argv. Return a new argc. If an error is found, exit(1) is */ /* called (getargs won't return) and a usage message is printed showing */ /* all arguments in the table. */ register int nargc; register char **nargv, *p; register ARG *argp; nargc = 1; for (nargv = ++argv; --argc > 0; argv++) if (**argv != '-') { *nargv++ = **argv; nargc++; } else { p = (*argv) + 1; while (*p) if (argp = findarg(*p, tabp, tabsize) ) p = setarg(argp, p); else { fprintf(stderr, ERRMSG, *p); pr_usage(tabp, tabsize); exit(1); } } return(nargc); } /* STOI.C More powerful version of atoi */ /* Copyright (C) 1985 by Allen Holub. All rights reserved. */ /* This program may be copied for personal, non-profit use only */ /* Dr. Dobb's Journal May 1985 */ #define islower(c) ('a' <= (c) && (c) <= 'z') #define toupper(c) (islower(c) ? (c) - ('a' - 'A') : (c) ) int stoi(instr) register char **instr; { /* Convert string to integer. If string starts with 0x it is */ /* interpreted as a hex number, else if it starts with a 0 it */ /* is octal, else it is decimal. Conversion stops on encountering */ /* the first character which is not a digit in the indicated radix */ /* *instr is updated to point past the end of the number */ register int num=0; register char *str; int sign=1; str = *instr; while (*str == ' ' || *str == '\t' || *str == '\n') str++; if (*str == '-') { sign = -1; str++; } if (*str == '0') { ++str; if (*str == 'x' || *str == 'X') { str++; while( ('0' <= *str && *str <= '9') || ('a' <= *str && *str <= 'f') || ('A' <= *str && *str <= 'F') ) { num *= 16; num += ('0' <= *str && *str <= '9') ? *str - '0' : toupper(*str) - 'A' + 10; str++; } } else while ('0' <= *str && *str <= '7') { num *= 8; num += *str++ - '0'; } } else while ('0' <= *str && *str <= '9') { num *= 10; num += *str++ - '0'; } *instr = str; return( num * sign); } Furthermore, a graphical interface is now the de facto standard (Menu Headers and pull-down menus). I know this means all that overhead in terms of code and extra-time to do the programming. But, end-users expect to be able to use software without having to RTFM. And in the end, it will be free-market forces that decide whether UNIX will grow in popularity or will be just a second-class OS used primarily by DOD and universities. Clearly, the window system called X (I wish they would simply call it X Windows) is out of the question under MINIX. However, I did obtain mgr.tar.Z from bugs.nosc.mil and will be taking a look at that later. This also may be too large for MINIX (I don't yet know). If mgr is too complex or too code intensive, a simple menu header and pop-down window scheme can be found in Al Steven's C programming column of the Sept and Oct 88 issues of Dr. Dobb's Journal. This interface is simple yet elegant. I also typed in this code, but I made a mistake somewhere and can not seem to find it. As of right now, I would like to see these authors (Allen Holub and Al Stevens) donate these specific routines to the public domain. I think that these routines together could be used to develop a consistent interface that would be extremely easy to use both in a DOS and UNIX (particularly MINIX) environment. If you haven't caught the drift of this diatribe, let me state it explicitly. I believe that no-one has a monopoly (copyright or patent) on a user-interface. I am clearly dismayed by the look-and-feel litigation trend in industry. My position is quite simply that a screen (crt, monitor) is simply another data structure that is fundamental to computer science. A consistent interface is necessary across all hardware configurations. Let us briefly examine an analogy. Road signs indicating hazards and driving conditions are pretty much standardized internationally. This allows a traveller to proceed from country to country without having to be licensed in every country. The benefits are enormous. Looking at the other side of the coin, the best example would be Great Britain and her former colonies. They drive on the wrong side of the road, require cars with steering wheels in the passenger's seat, etc. It takes time to learn to navigate in these backward countries. Even more importantly, I am outraged by the fact that file-formats are proprietary as viewed by the courts in the SEAware vs. PKware case. Files are just streams of meaningless information to be deciphered by a program. This judgment is a serious detriment to the whole industry unfortunately. The only protection that should be accorded developers is for their source code. Reverse-engineering is very common. Most cars require a combustion engine (not solar or electric). But some car manufacturers build a sports car like a Porche, others build a reliable family car like a Chevy, and yet others build a funeral-box car like a Yugo (I stay). Some applications are faster and more comfortable to use but accomplish the same tasks as does another vendor's application. The classic example is PKware's archiver versus SEAware's. My last comment concerns the legal community. We are living in a new age, the INFORMATION AGE. Most judges are not technologically competent (having skills in EE and Computer Science). They simply do not have the background to understand these issues. Yet, their decisions will have very profound ramifications upon society. This deficiency is highly disconcerting. What can be done about this situation? I really don't know. Pray, I suppose. Apart from praying, I hope that some of the giants (IBM, INTEL, Chips & Technologies, Microsoft, ATT) will pressure law schools to accept students with backgrounds in these areas and provide scholarships to individuals willing to continue their education in this field. I hope that these companies will also push legislation to increase judges salaries so that they are equitable with those found in industry. Why should anyone work for less than they could get elsewhere? Remember the standing joke is that the biggest division at IBM is the legal division and not the manufacturing division. ------------------------------------------------------------------------------- Returning to the original subject matter dealing with MINIX PATCHES: I confess that I was having difficulty upgrading from MINIX 1.2 to 1.3 using the upgrades found on the net. I found this particularly annoying because I have used patch to upgrade the floppy device driver to handle 3 and 1/2 inch drives and a few other utilities. But I was at a complete loss when applying the diff patches to move from MINIX ver 1.2 to ver 1.3. The following text documents how (and why I chose a particular manner to accomplish this feat) I did it. First, grab the following files from bugs.nosc.mil via ftp: "patch", "d1.1-1.2.tar.Z", and "d1.2-1.3.tar.Z". The following is a log of an ftp session that accomplishes the task at hand. ftp bugs.nosc.mil Name (bugs.nosc.mil:rheffel): anonymous Password (bugs.nosc.mil: anonymous): guest cd pub/Minix/bin type binary get patch cd ../d1.1-1.1 get d1.1-1.2.tar.Z cd ../d1.2-1.3 get d1.2-1.3.tar.Z close quit At this point, you will have copied in binary format 3 files from the remote host. The files are: patch, the upgrade from ver 1.1 to 1.2, and the upgrade from ver 1.2 to 1.3. I strongly recommend that you rename d1.1-1.2.tar.Z to d1112.trz and d1.2-1.3.tar.Z to d1213.trz. Why should you rename the files. Remember that DOS allows only 3 characters for a file's extension. We will use *.trz under DOS as the equivalent of UNIX's *.tar.Z. Somehow, you must transfer the files down to your PC from your local host. The files must be transfered in binary format just as before. I am assuming that you are transferring these files to a PC- DOS partition. Personally, I have not yet tried running kermit under MINIX yet. The file mxkermit.tar.Z is available from bugs.nosc.mil. I have read that the modem handling under MINIX is not quite stable yet so that is the reason I assume that these files are being transferred to a PC-DOS subdirectory. If you have ftp on your PC, you can follow the same sequence as above except for changing directory. If you don't have ftp, you can use KERMIT. By typing "kermit -ix", you will invoke the kermit server on the local host. It will transfer the file images (binary format). Next type "get patch", "get d1112.trz", and "get d1213.trz". At this point, you should now have these 3 files on your PC. But first lets cover the aspect of getting the equivalent files from a different remote host. Note: You can get the equivalent files from vm1.nodak.edu on internet or listserv@ndsuvm1 on BITNET. The major difference is that the files are in ASCII format. If you are dialing in to vm1.nodak.edu, I presume that you are on internet and can get the files. The following is a transcript of such a session. ftp bugs.nosc.mil Name (vm1.nodak.edu:rheffel): anonymous Password (vm1.nodak.edu: anonymous): guest cd MINIX type ascii get commands.patch mget minix.* close quit If you are on an IBM mainframe and are using BITNET, then you may use the following command to retrieve one file at a time. Type "TELL LISTSERV@NDSUVM1 GET MINIX 1112A". Admittedly, this process of asking for one file at a time is painfully slow. If anyone knows of a better method, please let me know. (I assume that REXX could be programmed to expand a wildcard or a script file could be built). Regardless of whether you accessed vm1.nodak.edu or listserv@ndsuvm1, the naming convention on that remote host follows IBM's standard convention. The files are MINIX.1112[A-D], MINIX.1213[A-Z] and MINIX.1213[AA-AE]. The files to upgrade from 1.3 to 1.4 are found as MINIX.1314A-[F1-F2], and MINIX.1314A-[0-9]. After I had copied the files from the remote host to my local host, I renamed the files as follows since DOS allows only 3 characters for the extension. MINIX.1112[A-] was renamed to M1112.[A-], MINIX.1213[A-Z] was changed to M1213.[A-Z], MINIX.1213[AA-AE] was transformed to M1213.[AA-AE]. Do you get the picture. For those of you unfamiliar with this notation, let us take a specific file and show you what was done: MINIX.1213AA was renamed to M1213.AA This renaming scheme will work on both UNIX and IBM systems. Then I downloaded the files to PC-DOS. This method prevented the terminal emulation package from truncating the name to something obscure. Another advantage from this new naming scheme is that it will permit us to write a shell script to UNSHAR the files M1213.[A-W] unattended. ------------------------------------------------------------------------------- You will need to be able to uncompress files that end in *.Z. To do this, you first must compile the compress command. cc -i -o compress compress.c The -i flag must be specified in order for this command to work. Remember that you must always transfer compressed files (ending in *.Z) in binary format. The next step is to transfer the files from your DOS partition to your MINIX partition. The type of file that you downloaded (binary or ASCII format) will determine the switch settings on the dosread command line. If your file is a binary file (file is from bugs.nosc.mil), you will want to type the following: dosread c ver13/d1213.trz > d1213.tar.Z dosread c ver13/patch > patch If your file is an ASCII file, you will want to use the "-a" flag as follows. Notice that I read the file patch from the DOS partition as patchvm onto the MINIX partition. There is a good reason for doing so, but will not be covered now. Please note that I demonstrate how to read in the ASCII files m1213.* in the following command. Do not however type this for each and every file. Use the Ralph Clark's modified script included below to automatically read an entire DOS directory (eg, dosrdall c vm1 [where the files are on c: drive ind subdirectory \vm1]). dosread -a c ver13/m1213.aa > m1213.aa dosread -a c ver13/patch > patchvm If you got your version of patch from vm1.nodak.edu or listserv@ndsuvm1, you will need to do the following after you have read in the file onto MINIX partition. uudecode patchvm compress -d patch.Z As you noticed, the uncompressing of patch.Z created a file called patch. Now you understand why it was desirable to read the file patch from DOS to MINIX as patchvm and not as patch. The above 2 steps are not necessary if you got your version of patch from bugs.nosc.mil. Regardless of where you obtained patch, remember to change its rwx flags so that it is executable. chmod 755 patch I include Ralph Clark's script (which I have modified sligthly) to allow you to read all the files from a PC-DOS subdirectory on a particular drive. Path: cod!nosc!ucsd!ames!amdahl!pyramid!prls!philabs!ttidca!clark From: clark@ttidca.TTI.COM (Ralph Clark) Newsgroups: comp.os.minix Subject: my read-all-from-dos script (version 23) Keywords: dosread Message-ID: <2951@ttidca.TTI.COM> Date: 24 Jul 88 06:45:23 GMT Organization: Citicorp/TTI, Santa Monica Lines: 20 Here's the one I've been using since the first time my fingers got tired of backspacing to put the -a in the right place : ----------------cut me--------------- #/********************************************************************/ #/************ Modified version of Ralph Clark's DOSRDALL ************/ #/******************* modified by Rich Heffel ************************/ #/******************** handles only ASCII files **********************/ #dosrdall - read all files from DOS physical drive to current directory echo "dosrdall [drive [directory]]" getlf "to proceed, press RETURN" for FILE in `dir $1 $2 | grep -v [a-z] | tr[A-Z] [a-z]` do echo $FILE dosread -a $1 $2/$FILE > $FILE done ----------------cut me--------------- The grep -v gets rid of the title and footer from dosdir, which have lower case letters. I wish there were an option in dosread-write-dir to suppress the noise and just give file names. This script needs addition of a parameter to specify a dos subdirectory. Remember to change the rwx flags to execute by typing: chmod 755 dosrdall #Ralph Clark (clark@ttidca.tti.com) {csun|philabs|psivax}!ttidca!clark --- ------------------------------------------------------------------------------- The next major step is to apply the patches. The files from vm1.nodak.edu and listserv@ndsuvm1 are in ASCII format already. The files from bugs.nosc.mil are not and must be uncompressed and extracted from the tape archive. How is this accomplished? As an example, we will take the file d1.2-1.3.tar.Z which we had renamed to d1213.trz previously. First, rename d1213.trz to d1213.tar.Z. mv d1213.trz d1213.tar.Z compress -d d1213.tar.Z This command unpacks (uncompresses) the file. Next, we must extract the files from this newly created tar file. tar vx d1213.tar ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- The file "diff.patch" that was extracted from bugs.nosc.mil's d1213.tar (our renamed file) corresponds to vm1.nodak.edu's and listserv@ndsuvm1's minix.1213[aa-ae] and minix.[x-z]. The question that remains is "How do we apply these patches?" First, we must note that the patch command unfortunately uses the subdirectory /tmp for scratch work and does not allow a flag to specify another directory for scratch use. (The lack of this needed feature is indicative of some of the drawback's of UNIX besides being a classic example of poor programming technique. I confess that I too am guilty of such poor practice.) Unfortunately, running patch requires more than one floppy worth (mkfs /dev/fd0 360) of information. If you are running a RAM DISK that means you probably do not have enough space, and patch will choke. The trick to overcome this is the following: Normally, we mount our hard disk partition with the /usr file system as follows. I will assume that /usr is on /dev/hd4, though this need not be the case. In the file /etc/rc, we have a one-line command that says "/etc/mount /dev/hd4 /usr". Change this one-line command from "/etc/mount /dev/hd4 /usr" to "/etc/mount /dev/hd4 /tmp". This change must be done in the file /etc/rc. After you have applied the patches, you should change it back to its original state. Why must it be done in /etc/rc. Because if you try doing it after you have logged in as "root", you will be notified that /tmp is busy. Now logoff and reboot. When you log in as "root", the file system will be found on /tmp. If you are applying the file "diff.patch" from the tar.Z file from bugs.nosc.mil, all you will need to do is to cd (change dir) to subdirectory where the copy of the original 1.2 distribution is found (usually /usr/minix/commands) and type the following. patch < diff.patch I presume that for those of you who are using vm1 or listserv's patch and files, you would move the files m1213.[x-z] and m1213.[aa-ae] to a newly created directory and cd to that directory. You could then type the following: for i in * do echo $i; patch < $i done ------------------------------------------------------------------------------- Remember to change the file /etc/rc back to its original state and to reboot. Naturally, the next step should be to unshar all the files. This refers to those files found on vm1 and listserv. The simplest way to unshar the files is to write a simple script on the MINIX command line. for i in m1213.* do echo $i; sh < $i done If you have a PC, leave it unattended overnight. If you have an AT or 386 machine, go out to dinner. If you have any suggestions, please send them to me at the following address: rheffel@cs2.wsu.edu I have include a uuencoded version of patch obtained from bugs.nosc.mil. This is level 11 patch. To get this version running, get it onto your MINIX partition using dosread -a c patch > patch.ascii Then uudecode the file. uudecode patch.ascii Remember to make it executable. chmod 755 patch Path: cod!nosc!helios.ee.lbl.gov!lll-tis!ames!mailrus!cornell!rochester!udel!mmdf From: frank@morgan.com (Frank Wortner) Newsgroups: comp.os.minix Subject: Yet Another Patch Binary Message-ID: <3961@louie.udel.EDU> Date: 3 Sep 88 07:47:42 GMT Sender: mmdf@udel.EDU Lines: 704 I've posted several Minix patch binaries for the benefit of those who can't compile the source for one reason or another. Unfortunately, those binaries had a minor bug in them which seems to be related to the C compiler and/or library used to create them. The bug caused patch to print spurious messages about "skipping garbage" at the end of a patch file. In almost all cases, there was no "garbage" for patch to skip. Since my last binary posting, I've recompiled patch with the 1.3 Minix library, and the spurious message bug seems to have disappeared. If anyone is using one of my previous binaries, try this one instead. It should work just a bit better. If you have the source, don't worry: I've made NO CHANGES. I just recompiled and relinked with a newer (and more bug-free) library. You should be able to do the same once you upgrade to Minix 1.3. Frank ------------------------cut here -- valuable program below -------------------- begin 644 patch M 0,@!" #08@ LA0 .X2 ! ")XXL/@\,"B<A T> ! MV*, %!34>@' (/$!E#H5U55B>6#[!I65S'V,?_'1NH +@N&U#_-KX2Z-5, M6UO'1N@ (-^Z )]$(M>Z-'CQX? %@ _T;HZ^JX5 !0Z#M:6[AF %#H,UI; MN'@ 4.@K6ENXB@!0Z"-:6XM.!(D.Z!J+3@:)#N8:Z%,%,<!0Z ]#6_\VPA;H M,Q-;Z+84F G =0/IB@2#/DX '4+_S; %N@_05NC3@" /K( '4(N%0 4.AO M#UN#/K@ W4&Z!4SZ58$N'@ 4.B'#UN /K( '4(_S; %NAD-5LQ]C'_Q@9& M #H'QV8"<!U ^GJ D;'1O0 ,=&]@ Z'XRB4;PB5;R_S:H /\VI@#_=O+_ M=O#HC&$)P'T.BPZF (L6J ")3O")5O* /K( '0#Z:L!_W;V_W;TZ-4&6UN) M1OR)5OZ#_@%T ^E0 8M&_@M&_'0#Z44!@#ZJ !T ^D[ >A%+I@)P'4=BT;V M"T;T= /I* $QP%!04+@V 5#HS$"#Q CI%@&@K@"8,<D)P'4!08@.K@#_=O;_ M=O3H<P9;6XE&_(E6_HM&_@M&_'4IZ/@MF G =0\QP%!04+AT 5#HMT"#Q B@ MK@"8,<D)P'4!08@.K@#IQ0" /K '0]Z,@MF G =0\QP%!04+B0 5#HAT"# MQ B@K@"8,<D)P'4!08@.K@ QP%!04+BL 5#H/$"#Q C&!K( >F! #' 4( ^ MK@ = :X) )0ZP2X+ )0@#ZN !T!K@> E#K!+@@ E"XW@%0Z%M @\0(@#[$ M%FYU2S' 4%!0N#0"4.A%0(/$"( ^Q!9Y= 7&!K( <=&_ QT;^ "@K@"8 M,<D)P'4!08@.K@#H(2V8"<!U#S' 4%!0N$@"4.C@/X/$"( ^L@ =2:+1OX+ M1OQU'H-&] O8 _W;V_W;T_W;R_W;PZ.%?"<!_ ^EJ_H ^L@ = [_-D MZ#Y&6\<&0 /\VH@#_-J Z&XP65L!P1'3B4[XB5[Z@#ZR !T)>@N!T> M/JP '4#Z=W],<!0_W;Z_W;X5KAD E#H,3^#Q KIQOV+1OX+1OQU)>@!!T> M/JP '4#Z;#],<!0_W;Z_W;X5KA^ E#H!#^#Q KIF?W_=O[_=OSHXPA;6X ^ MK =0/IA/TQP%#_=OK_=OA6N)@"4.C8/H/$"HM&]@M&]'04,<!04/]V]O]V M]+BR E#HO#Z#Q J+#J( "PZ@ '0M,<!0@SZ@ %U#8,^H@ =0:XV )0ZP2X MV@)0_S:B /\VH "XP@)0Z(4^@\0*,<!04%"XW )0Z'8^@\0(Z0O]@#Y& !T M*8 ^1 ="*+#N0:B0[H&HL.XAJ)#N8:,<!04%"XX )0Z$8^@\0(Z1$!@#ZR M !U ^C:#.C8/X ^L@ =3+_-DX N%0 4.A*.EM;"<!]%,8&G !_S8^ +A4 M %#HIDY;6^L-_S8^ /\V3@#HETY;6_\V0@#HO$1;QP9" "?]U ^FN %^ MZH ^0!8 =67_-DX N$ 64.CP5UM;N"\ 4+A %E#H]UI;6XE&YH-^Y@!U!<=& MYD 6_W;FZ/=76ST- 'X=BU[F@'\,+G44BU[FBT;F!0P ,<F*3PU1B<-8B >+ M7N;&1PT N!0#4+A %E#H9E=;6X ^L@ =!*X0!905E>X%@-0Z&(]@\0(ZQ"X M0!905E>X2 -0Z% ]@\0(N$ 64+AX %#H:SE;6PG ?07&!IX ;@! %#H>#Y; MZ T Z6O[_W;JZ @.6^EL756)Y>@Y#NAS,,<&V@P ,<&W P ,<&W@P ,<& MX P ,<&2 (,^P!8 =!6 /D8 '4._S; %NA(5%O'!L 6 "#/DX '0. M_S9. .@S5%O'!DX #'!J #'!J( #'!K@ "#/L0 '0._S;$ .@, M5%O'!L0 #&!JX ,8&L@ Z!D @SY( )\#S' 4%!0N'H#4.BM/(/$".G) M7%6)Y5!6Q@9 %@"+#N@:B0[D&HL.YAJ)#N(:@S[H&@!U ^FD7/\.Z!J#!N8: M H,^Z!H =0/I!0*+'N8:BS>XJ@-05NA\3%M;"<!U ^EZ7( \+74&@'P! '4N M@SY( )U#S' 4%!0N*P#4.@[/(/$"%;HH3M;BPY( /\&2 ")R]'CB8? %NFI M 4:*!)A0Z9H!BQ[F&O]W NA[.UNC4 #_#N@:@P;F&@+IAP&+'N8:_W<"Z&$[ M6Z-2 /\.Z!J#!N8: NEM <<&N ! .ED 4: / !U#_\.Z!J#!N8: HL>YAJ+ M-U;H%4Q;"<!\ ^E# 3' 4%!6N,8#4.BN.X/$".DQ <8&N@ !1H \ '4/_P[H M&H,&YAH"BQ[F&HLWB@28B<.*AT\3F*@#=0\QP%!04+C8 U#H=#N#Q A6N/P# M4+C %5#HZ$:#Q 96N @$4+A %5#HV4:#Q 96N!0$4+C %%#HRD:#Q ;IR@#' M!K@ P#IP0#&!JH >FY $: /#UU 496Z 576YFCI@")%J@ Z:( Q@:V 'I MF@#'!K@ @#ID0#&!K >F) (L>YAK_=P+H8SI;HTX _P[H&H,&YAH"ZW!& M@#P]=0%&5NB\5ENCM #K7XL>YAK_=P*X0!90Z+M46UO_#N@:@P;F&@+K1,8& MK@ !ZSW&!JP .LVQ@:R 'K+^AJ/NLJC40!4.AZ5ENCI #K'8L>YAHQP%!0 M_S>X)@10Z(,Z@\0(ZP>[Q@!8Z<I7_P[H&H,&YAH"Z?']Z8E:58GE@^P6_S:B M /\VH #H&RM96P'!$=.)3OR)7O[H&2N)1O2)5O:+#MH,BQ;<#"M._!M6_BM. M]!M6]H/! 8/2 (E.\(E6\HM&_(M._BL&W@P;#N ,+0$ @]D 45#H#BM96P'! M$=.)3NR)7NZ+1O8+1O1U"?]V_O]V_.F; ?]V[O]V[/]V_O]V_.@'6@G ?!*+ M1OR+3OXM 0"#V0")1NR)3N[_=O[_=OS_-MP,_S;:#.C@60G ?R3_=@;_=@0Q MP%!0_W;^_W;\Z)X(@\0,F G = G_=O[_=OSI/0''1O@! ,=&^@ _W;Z_W;X M_W;R_W;PZ)]9,<D)P'\!08A.Z_]V^O]V^/]V[O]V[.B&63')"<!_ 4&(3NJ M?NL =%__=@;_=@3_=OK_=OC_=O[_=OSH-@B#Q R8"<!T0O<&I ! '0;,<!0 M_W;Z_W;X_S:B /\VH "X0 10Z.(X@\0,BT[XBU;ZB0Z@ (D6H@"+1OB+3OH# M1OP33OY14.F< (!^Z@!U ^EV (M&^(M.^O?9]]B#V0#_=@;_=@114/]V_O]V M_.C%!X/$#)@)P'10]P:D $ ="2+1OB+3OKWV??8@]D ,=)245#_-J( _S:@ M +AB!%#H:#B#Q R+1OB+3OKWV??8@]D HZ B0ZB (M&_(M._BM&^!M.^E%0 MZQV ?NH =0R ?NL =08QP%!0ZPN#1O@!@U;Z .G-_EA:Z6Y858GE@^P<5E?H M.2F)1OB)5OK_-J( _S:@ .CT*%E; <$1TXE.](E>]O\VH@#_-J Z/<H65L! MP1'3B4[PB5[RZ-LH T;T$U;V+0$ @]H B4;LB5;NZ. H T;P$U;R+0$ @]H MB4;HB5;J@SZX 1U!KB$!%#K!+B*!%!>@SZX 1U!KB,!%#K!+B2!%!?N)H$ M4/\V0@#HX3U;6\=&_ QT;^ #_=O[_=OS_=OK_=OCHPU<)P'X#Z5 !_W;^ M_W;\Z+,H6UN84.DN ?]V[O]V[/]V]O]V].B=5PG ?1)6N*P$4/\V0@#HD#V# MQ ;I$ &+1O2+3O8Y1NQU'3E.[G485O]V]O]V]+BV!%#_-D( Z&@]@\0*Z>@ M5O]V[O]V[/]V]O]V]+C"!%#_-D( Z$H]@\0.Z<H _W;J_W;H_W;R_W;PZ#)7 M"<!]$E>XT@10_S9" .@E/8/$!NFE (M&\(M.\CE&Z'4=.4[J=1A7_W;R_W;P MN-P$4/\V0@#H_3R#Q KI?0!7_W;J_W;H_W;R_W;PN.@$4/\V0@#HWSR#Q [K M8/]V_O]V_.C?)UM;4+CX!%#_-D( Z,,\@\0&ZT3_=O[_=OSHPR=;6U#_=O[_ M=OSHIB=;6YA0N/P$4/\V0@#HFCR#Q CK&S' 4%!0N (%4.@O-H/$".BD2NL' MNQ8!6.F@4X-&_ OX Z9K^Z5]658GE@^P45L=&_ $ QT;^ #H_":)1OB) M5OJX 0 QR0-&^!-.^HE&](E.]C'VB@ZZ (A.\>@ )XE&[(E6[HM&!(M.!BT! M (/9 (E&!(E.!O]V]O]V].@1)UM;F#T] '01_W;V_W;TZ G6UN8/0H =0J# M1O0!@U;V .O4_W;^_W;\_W;Z_W;XZ-]5"<!^ ^F, O]V_O]V_.C/)EM;F#TM M '0#Z70 BT;\BT[^ T8$$TX&+0$ @]D 45#HC -;6X!^\0!T0 GV=1+_-D MN$ 54.CH.UM;O@$ ZQ6#_@)U$/\V0 "XO !0Z-$[6UN^ P#_-D _W;^_W;\ MZ'XF6UM0Z+D[6UN#!MX, 8,6X P @T;\ 8-6_@#I8O__=O;_=O3_=N[_=NSH M054)P'X#Z>X!_W;V_W;TZ#$F6UN8/2L =6J+1OR+3OX#1@033@8M 0"#V0!1 M4.CQ EM;@'[Q '0K@_X!=1+_-D N+P 4.A,.UM;O@, ZQ0)]G40_S9 +C M%5#H-CM;6[X" /\V0 #_=O;_=O3HXR5;6U#H'CM;6X-&] O8 Z='^_W;V M_W;TZ+8E6UN84/]V_O]V_.BI)5M;F%DYP71>,<!0_W;V_W;TZ+XE65L!P1'3 M4U'_=O[_=OSHK2596P'!$=-34;@J!5#H'C2#Q PQP%#_=O;_=O3H9B5;6YA0 M_W;^_W;\Z%DE6UN84+AR!5#H]S.#Q BX 0!0Z-($6_]V]O]V].@Z)5M;F#TA M '0#Z= BT;\BT[^ T8$$TX&+0$ @]D 45#H]P%;6X!^\0!T$/\V0 "X0!50 MZ%<Z6UN^ 0#_=O[_=OSH]R1;6Y@](0!U+X!^\0!T%?\V0 #_=O[_=OSH[21; M6U#H*#I;6X,&W@P!@Q;@# "#1OP!@U;^ .O @'[Q '00_S9 +B\ %#H 3I; M6[X# /]V]O]V].BA)%M;F#TA '4?_S9 /]V]O]V].B=)%M;4.C8.5M;@T;T M 8-6]@#KT(!^\0!U ^F#_?\V0 "XP!10Z+@Y6ULQ]NEQ_8-&_ OX @T;T M 8-6]@#I7OW_=O;_=O3_=N[_=NSH/5,)P'X#Z:$ _W;V_W;TZ"TD6UN8/2L M= /IC0"+1OR+3OX#1@033@8M 0"#V0!14.CJ %M;@'[Q '0K"?9U$O\V0 "X MP!50Z$8Y6UN^ @#K%8/^ 740_S9 +B\ %#H+SE;6[X# /]V]O]V]/]V[O]V M[.C)4@G ?S#_=O;_=O3HO"-;6Y@]*P!U'_\V0 #_=O;_=O3HN"-;6U#H\SA; M6X-&] O8 Z[V ?O$ =!$)]G0-_S9 +C %%#HTCA;6^ER4E6)Y5:+=@2X MD@505NA$.5M;HT @SY !U#S' 4%!6N)0%4.@J,H/$".E%4E6)Y5:+=@2X MK@505N@7.5M;HT( @SY" !U#S' 4%!6N+ %4.C],8/$".D84E6)Y5!0BP[> M#(L6X R)3OR)5O[_=O[_=OS_=@;_=@3H_U$)P'X/,<!04%"XR@50Z)@Q@\0( M_W;^_W;\_W8&_W8$Z-U1"<!]%8-&_ OX _W;^_W;\Z&4 6UOKV(M._(M6 M_HD.W@R)%N ,Z:M158GE]P:D !=!TQP%#_-N ,_S;>#/\VW S_-MH,N/P% M4.@W,8/$#(L.W P+#MH,= W_-MP,_S;:#.A5_UM;_S9 .C?-UO'!D #I M6U%5B>504%;&1OT*,<!0_W8&_W8$Z%(K@\0&B<:*!)C_-D 4.AE0%M;4(I& M_9A9.<%T T;KYNDB456)Y8/L#(M&#(M.#@4! (/1 (E&_(E._NBW(2M&#!M6 M#HE&](E6]HM&"(M."@-&!!-.!@-&#!-.#HE&^(E.^O]V_O]V_/]V]O]V].C= M4 G ?@/IK0" /K8 '1*_W;^_W;\Z*XA6UM0_W;^_W;\Z,LA6UM0_W8*_W8( M,<!04.BJ4#')"<!\ 4%1_W;Z_W;XZ)XJ@\0&4.AQ (/$!I@)P'5.,<!0ZV#_ M=O[_=OSH9"%;6U#_=O[_=OSH@2%;6U#_=@K_=@@QP%!0Z&!0,<D)P'P!05'_ M=OK_=OCH5"J#Q 90Z%A*@\0&"<!T!3' 4.L7@T;\ 8-6_@"#1O@!@U;Z .D] M_[@! %!8Z1E058GE5HMV!E>+?@2#?@@ =0/IDP"*!)B)PXJ'3Q.8J AU ^EE M (H%F(G#BH=/$YBH"'4&,<!0Z7( @WX( '09B@28B<.*AT\3F*@(= N / IT M!D;_3@CKX8H%F(G#BH=/$YBH"'0(@#T*= -'Z^J /0IT!8 \"G63B@684(H$ MF%DQTCG!=0%"4NLAB?M'B@>8B?-&4(H'F%DYP70%,<!0ZPK_3@CI9/^X 0!0 M6.EH3U6)Y;AF %#HP4E;@#Z< !U"+A4 %#HLDE;@#Z> !U"+AX %#HHTE; MN(H 4.B;25O_=@3H!$);Z2]/58GEQP80&P QP82&P QP8,&P QP8.&P MQP8(&P QP8*&P QP8$&P QP8&&P QP8.!O__QP80!O__QP8 &P QP8" M&P QP;^&@ Z=M.58GE5HMV! GV=!. / !T#KA*!E!6Z+L^6UL)P'59N$P& M4+B* %#HDC5;6Z,,!H,^# 8 =1(QP%!0N(H 4+A.!E#H=2Z#Q C_-KH2N $ M4+C$%E#H1C2#Q 8)P'0/_S8,!KC$%E#HS31;6^O;_S8,!NCB-%N^B@"X: 90 M5N@\-5M;HPP&@SX,!@!U#S' 4%!6N&H&4.@B+H/$"(L># :XQ!I0_S?H&4); M6XL.TAJ+%M0:B0X4&XD6%ALQP%"X 0!0,<!04.B?"(/$".@# .D*3E6)Y8,^ M&@8 =0Z+#B &T>%1Z!M#6Z,:!H,^' 8 =0Z+#B &T>%1Z 9#6Z,<!H,^'@8 M=0O_-B &Z/1"6Z,>!NG)356)Y8L.( ;1X8D.( ;1X5'_-AH&Z*!#6UNC&@:+ M#B &T>%1_S8<!NB-0UM;HQP&_S8@!O\V'@;H?4-;6Z,>!H,^&@8 =!&#/AP& M '0*@SX>!@!T ^ER38 ^1 =0\QP%!04+B$!E#H/2V#Q C&!D8 >E4356) MY8L._!H+#OH:=#/_-OP:_S;Z&O\V%AO_-A0;Z#Q-"<!\'( ^K = \QP%!0 M4+BJ!E#HSBR#Q @QP%#IOP& /JP '0/,<!04%"XL 90Z+(L@\0(Z*H!H[@ M@SZX !U-XL._!H+#OH:=!B /JP '0@,<!04%"XN 90Z(4L@\0(ZP\QP%!0 M4+C@!E#H="R#Q @QP%#I90& /JP '1,,<!0@SZX %U!KAZ!U#K'H,^N $ M=0:X8 =0ZQ&#/K@ G4&N$0'4.L$N%('4(L._!H+#OH:=0:X, =0ZP2X,@=0 MN!0'4.@;+(/$"(,^_AH ="F /JP '0B,<!0@S[^&@%U!KBL!U#K!+BN!U#_ M-OX:N(H'4.CK*X/$"/\V\!K_-NX:_S;T&O\V\AKHT0:#Q B#/L 6 '0#Z;X M@#ZJ !T(3' 4%!0N+ '4.BU*X/$"/\V3 #H12M;H\ 6N $ 4.F: #' 4%!0 MN- '4.CJ*X/$"( ^Q!8*="N#/DP '0(_S9, .CA0ENXQ!90Z XK6Z-, #' M4%"XQ!90Z.PM@\0&H\ 6@S[ %@!UAC' 4%!0N. '4.BB*X/$"( ^Q!9Y= /I M;?^ /JP '0/,<!04%"X!@A0Z"PK@\0(N $ 4#' 4/\V3 #HHBV#Q :CP!;& M!K( ;@! %#K!+@! %!8Z5%+58GE@^PJ5E?'1OP ,=&_@ QT;T___'1O;_ M_\9&[P#&1NX QD;M ,9&[ #'1N0 ,=&X@ QT;@ #'1MX ,=&W QT;: M QP(,^P!8 =0% B$;7Q@9* QP%#_-OP:_S;Z&O\V# ;HR#*#Q B+#O8: MBQ;X&H/I 8/: (D.%@:)%A@&BT;\BT[^B4;XB4[ZBD;NB$;OBD;LB$;M_S8, M!NC=,UN)1OR)5O['1NH (,&%@8!@Q88!@#_-@P&N $4+C$%E#H1S"#Q 8) MP'50@W[V 'PDBT[TBU;VB0[R&HD6]!J+3O"+5O*)#NX:B1;P&L=&V , Z?$" MBT[\BU;^B0[R&HD6]!J+#A8&BQ88!HD.[AJ)%O :QT;8 #IRP*^Q!: /"!T M"H \"70%@#Q8=2& / EU%KD( (M&ZIGW^8/J"/?: U;JB5;JZP/_1NI&Z]") M]XH%F(G#BH=/$YBH!'4%@#TL=0-'Z^J*!)B)PXJ'3Q.8J 1T%8 ]9'0*@#UC M= 6 /6%U!K@! %#K S' 4%B(1NZ#?O8 ?2> ?NX ="&+1OR+3OZ)1O2)3O:+ M#A8&BQ88!HE.\(E6\HM.ZHD._AJ ?NT =2&X! !0N!H(4%;HDT.#Q 8)P'4. MC40$4.BX*%N)1N+II@"X! !0N" (4%;H<D.#Q 8)P'4.C40$4.B7*%N)1N#I MA0"X!@!0N"8(4%;H44.#Q 8)P'4-C40&4.AV*%N)1N3K9;@' %"X+@A05N@Q M0X/$!@G =5*-1 >)QXH%F(G#BH=/$YBH"'0#1^OO5^A#*%NCQ "+/L0 @#T M=!&*!9B)PXJ'3Q.8J AU T?KZL8% (L>Q " /P!U#O\VQ #HW3];QP;$ M@SZX !T!X,^N #=3^#?O8 ?#FX-@A05NB<.%M;"<!U*XM.ZHD._AJ+3O2+ M5O:)#O(:B1;T&HM.\(M6\HD.[AJ)%O :QT;8 P#I#P&X" !0N#H(4%;H?T*# MQ 8QR0G =0%!B$[L@SZX !T"H,^N != /I<@" ?NT =&RX! !0N$0(4%;H M3T*#Q 8)P'59C40$4.A_1%L)PG4%Q@9* & / IT T;K^(M.ZHD._AJ+3OB+ M5OJ)#O(:B1;T&HL.%@:+%A@&@^D!@]H B0[N&HD6\!J ?/\J=0:X! !0ZP2X M 0!0CT;8ZW.#/K@ '0*@SZX )T ^G\_(!^[P!U ^GS_+@" %"X2@A05NC) M08/$!@G =!:X @!0N$X(4%;HMD&#Q 8)P'0#Z<K\BT[XBU;ZB0[R&HD6]!J+ M#A8&BQ88!H/I 8/: (D.[AJ)%O :BT[JB0[^&L=&V ( @'[7 '4#Z;T @W[D M '05H$H F%#_-K0 _W;DZ'XI@\0&B4;>@W[B '05H$H F%#_-K0 _W;BZ&,I M@\0&B4;<@W[@ '05H$H F%#_-K0 _W;@Z$@I@\0&B4;:@W[< '0R@W[: '0L M_W;<Z/- 6U#_=MKHZT!;63G!?0S_=MSH+R9;H\ 6ZT#_=MKH(R9;H\ 6ZS2# M?MP = S_=MSH$29;H\ 6ZR*#?MH = S_=MKH_R5;H\ 6ZQ"#?MX = K_=M[H M[25;H\ 6@SY, !T#O\V3 #HICU;QP9, @S[ %@!T#O\VP!;HQB5;HTP MZ:L @W[D '07N $ 4/\VM #_=N3HF"B#Q :C3 #IC@"#?N( =!2X 0!0_S:T M /]VXNA[*(/$!HE&W(-^X !T%+@! %#_-K0 _W;@Z&$H@\0&B4;:@W[< '0R M@W[: '0L_W;<Z Q 6U#_=MKH!$!;63G!?0S_=MSH2"5;HTP ZR[_=MKH/"5; MHTP ZR*#?MP = S_=MSH*B5;HTP ZQ"#?MH = K_=MKH&"5;HTP @W[D '0' M_W;DZ-,\6X-^X@!T!_]VXNC&/%N#?N = ?_=N#HN3Q;@W[> '0'_W;>Z*P\ M6X-^W !T!_]VW.B?/%N#?MH = ?_=MKHDCQ;BT;8Z7-%58GEBTX$BU8&B0[Z M&HD6_!J+3@B+5@J)#O8:B1;X&NE3156)Y5!6@#ZL !U ^F) /\V_!K_-OH: M_W8&_W8$Z#M%"<!]=#' 4/\V_!K_-OH:_S8,!N@"+8/$"#' 4%!0N%((4.B_ M)(/$"/\V# ;H-BY;4E#_=@;_=@3H $4)P'TH_S8,!K@ !%"XQ!90Z*8J@\0& MB<8QP%!0N,064+B0"%#H@B2#Q CKP3' 4%!0N)0(4.AQ)(/$".L3,<!0_W8& M_W8$_S8,!NB0+(/$"(M&"(M."BT! (/9 *,6!HD.& ;ID415B>6#["I65S'_ M@SX0!@!\5HL.(@:+%B0&.0X.!G48.180!G42BPXF!HL6* :)#@X&B180!NL8 MBPX.!HL6$ ;1X='2B<L#'AH&_S?H6CM;BPX.!HL6$ :#Z0&#V@")#@X&B180 M!NNCQP8B!O__QP8D!O__H2 &F:, &XD6 AN#/K@ 70*@SZX 1T ^E("_\V M# ;H+BU;B4;VB5;XQT;R #'1O0 ,=&[@ QT;P #&1N4 QD;D <9&XP#' M1MX ,=&X QT;6 #'1M@ /\V# :X 10N,064.A-$(/$!HE&_(,&%@8! M@Q88!@"#?OP =!:X" !0N+ (4+C$%E#HI3V#Q 8)P'0:_S88!O\V%@;_=OC_ M=O;H /Z#Q @QP%#I Q#'!A(&9 #'!A0& "X 0 QR0,&%@83#A@&H^H:B0[L M&O\V$ ;_-@X&_S8"&_\V !OH04,)P'P#Z:$'_S8,!NA=+%N)1O:)5OC_-@P& MN $4+C$%E#HL ^#Q :)1OR#!A8& 8,6& 8 @W[\ '53BPX &XL6 ALK#@X& M&Q80!E)1,<!0N 0 4.CK0@G ?0^XN@A0N,064.BE/%M;ZR2+1O0+1O)T#8!^ MY !T!\9&XP'I*@<QP%!04+B^"%#HC2*#Q B#!@X& 8,6$ 8 BQX.!@,>'@:* M#L06B ^+#@X&BQ80!M'AT=*)RP,>&@;'!P H,06F%#I?P:X" !0N. (4+C$ M%E#H?SR#Q 8)P'4KBT;T"T;R= V ?N0 = ?&1N,!Z;H&,<!04/\V& ;_-A8& MN.H(4.@6(H/$"HL.$ 8+#@X&="Z+1O0+1O)T#8!^Y !T!\9&XP'IA08QP%"X MQ!90_S88!O\V%@:X$ E0Z-XA@\0*,?^XQ!90Z#\A6XL.#@:+%A &T>'1THG+ M QX:!HD'@#Y& !T'(L.#@:+%A &@^D!@]H B0X.!HD6$ 8QP%#I4PZ^Q!: M/ !T$8H$F(G#BH=/$YBH!'4#1NOJ@#P =0/I%@ZX P!0N# )4%;HISN#Q 8) MP'4*C40"4%;H43M;6U;HT#U;HQ ;B182&XH$F(G#BH=/$YBH!'0#1NOO@#PL M=3J / !T$8H$F(G#BH=/$YBH!'4#1NOJ@#P =0/IN0U6Z) ]6RL&$!L;%A(; M!0$ @]( HP@;B18*&^LPBPX2&PL.$!MT#L<&"!L! ,<&"AL .L8QP8(&P MQP8*&P QP80&P$ QP82&P N 8 ,<D#!@@;$PX*&Z, &XD. ANA( :9_S8" M&_\V !M24.C50 G ? 7H_?+KYJ$@!IFC !N)%@(;Z<8$@#[%%BUT ^FY HM& M] M&\G5"BPX.!HL6$ :#Z0&#V@")RP,>'@:*!Y@QR3T* '4!08G(F;D! #'; M PX(&Q,>"AL!P1'3.0X.!G4).1X0!G4#Z<< @SX.!@%U28,^$ 8 =4*X 0 Q MR0,&"!L3#@H;HPX&B0X0!K@! #') P8.!A,.$ :)1NJ)3NS'1N8! ,=&Z MBPX(&XL6"AN)3NZ)5O#I=P"+1O0+1O)T-(!^Y !T!\9&XP'I; 2+1O*+3O0# M!NH:$P[L&C'24E%0_S88!O\V%@:X- E0Z+D?@\0,ZSO_-NP:_S;J&O\V& ;_ M-A8&_S80!O\V#@;_-@H;_S8(&^B[/PG ?P:XJ@E0ZP2XM E0N'()4.A\'X/$ M#(L.#@:+%A &B4[RB5;T_S8,!NBX*%N)1MZ)5N"+#A8&BQ88!HE.VHE6W+C$ M%E#HM1Y;BPX.!HL6$ ;1X='2B<L#'AH&B0> /D8 '0<BPX.!HL6$ :#Z0&# MV@")#@X&B180!C' 4.G)"XL>#@8#'AX&Q@<]OL06@#P =!&*!)B)PXJ'3Q.8 MJ 1U T;KZH \ '4#Z8$+5NA8.UNC#!N)%@X;B@28B<.*AT\3F*@$= -&Z^^ M/"QU.H \ '01B@28B<.*AT\3F*@$=0-&Z^J / !U ^E!"U;H&#M;*P8,&QL6 M#AL% 0"#T@"C!!N)%@8;ZS"+#@X;"PX,&W0.QP8$&P$ QP8&&P ZQC'!@0; M #'!@8; #'!@P; 0#'!@X; "+#@X&BQ80!@,.!!L3%@8;B0X &XD6 AO_ M-@(;_S8 &[@! %"XH(90Z%<^"<!^'KC$%E#_-A@&_S86!O\V AO_-@ ;N+P) M4.@.'H/$#*$@!IG_-@(;_S8 &U)0Z"0^"<!\!>A,\.OFBT;6BT[8.08$&W4) M.0X&&W4#Z0X"QD;D .D' L9&Y " /L46"G44@#ZV !T#;CH"5"XQ190Z*LW M6UN@Q1:8B<.*AT\3F*@(=2. /L46/G0<@#[%%CQT%8M&] M&\G0-@'[D '0' MQD;C >D5 @G_?B&)^)E24/\V% ;_-A(&Z)H]"<!]"HGXF:,2!HD6% :_&/RX MQA90Z,4<6XL.#@:+%A &T>'1THG+ QX:!HD'@#Y& !U ^EK 8L.#@:+%A & M@^D!@]H B0X.!HD6$ 8QP%#IU@F+1O0+1O)T&H!^Y !T%(!^Y0!T!X,^N $ M=0?&1N,!Z8P!N,064.AA'%N+#@X&BQ80!M'AT=*)RP,>&@:)!X ^1@ =!R+ M#@X&BQ80!H/I 8/: (D.#@:)%A &,<!0Z74)N $ ,<D#!@@;$PX*&SD&#@9U M"3D.$ 9U ^G2 (I&Y9A0_W;T_W;R,<!04.BX/%D)P'0$@<D! (A.Y4>+1O0+ M1O)U"(-&U@M@ BQX.!@,>'@;&!R#IE0"@Q1:8B<.*AT\3F*@(=16+1O0+ M1O)T#8!^Y !T!\9&XP'IT !'BT;T"T;R=0B#1M8!@U;8 +C&%E#HE!M;BPX. M!HL6$ ;1X='2B<L#'AH&B0> /D8 '0]BPX.!HL6$ :#Z0&#V@")#@X&B180 M!C' 4.FH"(M&] M&\G4#Z8$(@'[D '4#Z7@(QD;C >MFNRH&6.DA.8L.#@:+ M%A &T>'1THG+ QX:!H,_ '0OBPX.!HL6$ ;1X='2B<L#'AH&_S?HO35;BPX. M!HL6$ ;1X='2B<L#'AP&B0?I7OB+#@X&BQ80!M'AT=*)RP,>' ;'!P Z47X M@SX0!@!\&XM&] M&\G43,<!04.BL#%)0N.P)4.A0&X/$"H!^XP!U ^FU (M. MVHM6W(D.%@:)%A@&BPX.!HL6$ :#Z0&#V@")#@X&B180!O\V$ ;_-@X&_W;T M_W;RZ#D["<!^,(L.#@:+%A &T>'1THG+ QX:!O\WZ"PR6XL.#@:+%A &@^D! M@]H B0X.!HD6$ ;KNS' 4/]VX/]VWO\V# ;HTB*#Q C'1NH! ,=&[ N $ M,<D#1O(33O2)1N:)3NB+#@0;BQ8&&XE.[HE6\(L. !N+%@(;B0X.!HD6$ :# M/K@ 75<BT;P"T;N=3'_-A(;_S80&S' 4+@! %#HF#H)P'X^BPX2!HL6% ;1 MX='2_W;8_W;64E'H?3H)P'XC@#ZL !T%KB@"E"X7 I0N!H*4+@0"E#H"!J# MQ C'!K@ ! "+1O +1NYU ^GR!8M.YHM6Z(D.)@:)%B@&BT;NBT[P T;F$T[H M+0$ @]D HR(&B0XD!HM&[HM.\"T! (/9 /]V\/]V[HE&[HE.\#' 4%#H!3H) MP'\#Z<< _W;L_W;J_S80!O\V#@;H[3D)P'\6BU[J QX>!H _('0*@T;J 8-6 M[ #KU?]V[/]VZO\V$ ;_-@X&Z,(Y"<!^%C' 4%#_-NP:_S;J&KBR"E#H@1F# MQ J+1NJ+3NS1X-'1B<,#'AH&BT;FBT[HT>#1T?\WB<,#'AH&CP>+7NH#'AX& M,<"*!U"+7N8#'AX&6(@'BT;JBT[LT>#1T8G# QX<!HM&YHM.Z-'@T='_-XG# M QX<!H\'@T;J 8-6[ "#1N8!@U;H .D3__]V[/]VZO\V$ ;_-@X&Z"8Y"<!_ M)HM&\HM.]#E&ZG4%.4[L=!:+7NH#'AX&@#\@= J#1NH!@U;L .O%]P:D $ M=0/IF 2X 0 QR0,&#@83#A &45#_=O3_=O+_=NC_=N;_=NS_=NJX\ I0Z/$> M@\02Z6H$_S8,!NCF(5N)1NJ)5NS'!A(& #'!A0& #_-@P&N $4+C$%E#H M+06#Q :)1OR#!A8& 8,6& 8 @W[\ '0/H,06F(G#BH=/$YBH!'4:_S88!O\V M%@;_=NS_=NKHY_*#Q @QP%#IZ@2XQ!90Z*(T6Z,0&XD6$AN^Q!:*!)B)PXJ' M3Q.8J 1T T;K[X \+'4L1E;H?#1;*P80&QL6$AL% 0"#T@"C"!N)%@H;B@28 MB<.*AT\3F*@$=!A&Z^^*!)@QR3UA '0!08G(F:,(&XD6"AN*!(A&^8!^^6%U M"H,&$!L!@Q82&P!&5N@F-%N)1O*)5O2*!)B)PXJ'3Q.8J 1T T;K[X \+'4. M1E;H!#1;B4;NB5;PZPR+1O*+3O2)1NZ)3O" ?OED=0B#1O(!@U;T +@! #') M P8(&Q,."AL#1NX33O K1O(;3O0% 0"#T0"C#@:)#A &_S80!O\V#@:X 0!0 MN*"&4.A:-PG ?AZXQ!90_S88!O\V%@;_-A &_S8.!K@<"U#H$1>#Q RA( :9 M_S80!O\V#@924.@G-PG ? 7H3^GKYHM.\HM6](D.#!N)%@X;BT;NBT[P*T;R M&T[T!0$ @]$ HP0;B0X&&XL."!N+%@H; PX0&Q,6$AN#Z0&#V@!24?\V$AO_ M-A ;N$@+4+C$%E#H)2*#Q RXQ!90Z 466XL>&@:)!X ^1@ =!+'!@X&___' M!A &__\QP%#I,0.+'AX&Q@<JQT;V 0"+1O:94E#_-@H;_S8(&^B%-@G ?@/I MK@#_-@P&N $4+C$%E#H @.#Q :)1OR#!A8& 8,6& 8 @W[\ '46,<!04/\V M& ;_-A8&N%8+4.@<%H/$"H ^Q!8\=!8QP%!0_S88!O\V%@:XA M0Z/\5@\0* MN,864.AB%5N+7O;1XP,>&@:)!X ^1@ =!*+1O9(F:,.!HD6$ 8QP%#IB0*+ M7O;1XP,>&@;_-^C?+UN+7O;1XP,>' :)!XM>]@,>'@;&!RW_1O;I.O^ ?OEC M=5C_-@P&N $4+C$%E#H3@*#Q :)1OR#!A8& 8,6& 8 @W[\ '46,<!04/\V M& ;_-A8&N*8+4.AH%8/$"H ^Q!8M=!8QP%!0_S88!O\V%@:XU M0Z$L5@\0* M_W;P_W;N_W;T_W;RN/@+4+C$%E#HM""#Q RXQ!90Z)046XM>]M'C QX:!HD' M@#Y& !T$HM&]DB9HPX&B180!C' 4.F[ 8M>]@,>'@;&!SW_1O:+1O:94E#_ M-A &_S8.!N@.-0G ?@/IK@#_-@P&N $4+C$%E#HBP&#Q :)1OR#!A8& 8,6 M& 8 @W[\ '46,<!04/\V& ;_-A8&N 8,4.BE%(/$"H ^Q!8^=!8QP%!0_S88 M!O\V%@:X- Q0Z(@4@\0*N,864.CK$UN+7O;1XP,>&@:)!X ^1@ =!*+1O9( MF:,.!HD6$ 8QP%#I$@&+7O;1XP,>&@;_-^AH+EN+7O;1XP,>' :)!XM>]@,> M'@;&!RO_1O;I.O^ /JX '07Z%4!F G =0\QP%!04+A6#%#HYQ.#Q CW!J0 M @!T;<=&^ BT;XF5)0_S80!O\V#@;H'30)P']3BT;XF3D&"!MU##D6"AMU M!L9&]U[K!,9&]R"+7OC1XP,>&@:*1O>8_S>+7O@#'AX&4(H'F%#_=OBX? Q0 M_S:^$NC9&8/$#/\VOA+H!R=;_T;XZYBX 0 QR0,&#@83#A &45"A( :94E#H MKC,)P'T7BPX.!HL6$ :#P0&#T@")RP,>'@;&!UZX 0!0ZQPQP%"XQ!90_S88 M!O\V%@:XB@Q0Z$T3@\0*,<!06.EC,U6)Y8/L!E97_W8(_W8&_W8$Z!(9@\0& MB4;^,?^#/OX: '1*@W[^ '1$OL06.3[^&GXK@#P@= J / ET!8 \6'4<@#P) M=1.Y!P")^)GW^8/J"/?: ?J)U^L!1T;KSX'^Q!9T"E:XQ!90Z,LL6UN+1O[I M\#)5B>6#[!)65\9&\0"+#A ;BQ82&XE.]HE6^(L.#!N+%@X;B0X0&XD6$AN+ M3O:+5OB)#@P;B18.&XL.&@:)3OZ+#AP&B4[\BSX>!L<&&@8 ,<&' 8 ,<& M'@8 .B(Y(,^&@8 = Z#/AP& '0'@SX>!@!U18,^&@8 =0C_-AH&Z(8I6XM. M_HD.&@:#/AP& '4(_S8<!NAP*5N+3OR)#AP&@SX>!@!U"/\V'@;H6BE;B3X> M!C' 4.G7 K@! #') P8(&Q,."AN)1O:)3OB+7O8!^X _"G4,QD;Q 8-&]@&# M5O@ @SXD!@!\6O\V) ;_-B(&_W;X_W;VZ R"<!_'(L.#@:+%A &*T[V&U;X M@\$!@]( B4[RB5;TZQ.+1O:+3OCWV??8@]D B4;RB4[TBT;RBT[T 08B!A$. M) 8!!B8&$0XH!L=&\@ QT;T #_=OC_=O;_-A &_S8.!NB<,0G ?@/I@P"+ M1O:+3OC1X-'1B<,#7OZ+1O*+3O31X-'1_S>)PP,>&@:/!XM>]@'[,<"*!U"+ M7O(#'AX&6(@'BU[R QX>!H _*W4*BU[R QX>!L8'+8M&]HM.^-'@T=&)PP-> M_(M&\HM.]-'@T='_-XG# QX<!H\'@T;V 8-6^ "#1O(!@U;T .EE_X!^\0!T M=;@! #') P8(&Q,."AN)1O:)3OB+1O:+3OC1X-'1B<,#7OZ+1O*+3O31X-'1 M_S>)PP,>&@:/!XM>]@'[,<"*!U"+7O(#'AX&6(@'BT;VBT[XT>#1T8G# U[\ MBT;RBT[TT>#1T?\WB<,#'AP&CP>#1O(!@U;T (L>'@;&!RJ+'AH&BS> / !T M"X \+74#Q@0J1NOPQ@4]BU[^BS> / !T"X \*G4#Q@0M1NOPQT;V #'1O@ M /]V]/]V\O\V$ ;_-@X&Z$<P"<!^ ^F# (M&]HM.^-'@T=&)PP->_HM&\HM. M]-'@T='_-XG# QX:!H\'BU[V ?LQP(H'4(M>\@,>'@98B >+7O(#'AX&@#\M M=0J+7O(#'AX&Q@<KBT;VBT[XT>#1T8G# U[\BT;RBT[TT>#1T?\WB<,#'AP& MCP>#1O8!@U;X (-&\@O0 Z67_BPX(&XL6"AN)3O:)5OB+#@0;BQ8&&XD. M"!N)%@H;BT[VBU;XB0X$&XD6!AN#?OX =0?_=O[HDR9;@W[\ '4'_W;\Z(8F M6PG_=057Z'TF6[@! %!8Z5PO58GEH1 ;BQ82&^E1+U6)Y:$(&XL6"AOI1"]5 MB>6A#!N+%@X;Z3<O58GEH00;BQ8&&^DJ+U6)Y:$.!HL6$ ;I'2]5B>6A$@:+ M%A0&Z1 O58GEBT8$BTX&T>#1T8G# QX<!HL'Z?@N58GEBUX$ QX>!HH',.3I MYRY5B>6+1@2+3@;1X-'1B<,#'AH&BP?ISRY5B>6AZAJ+%NP:Z<(N58GE@^P* M5E?&1OD @#ZR !U4;A4 %#H"2E;N%0 4/\VP!;H3PU;6X ^K =!2X5 !0 MN*H,4+C$%E#HY1F#Q ;K$KA4 %"XN@Q0N,064.C1&8/$!KC,#%"XQ!90Z"(2 M6UN)Q_\V# ;HB1=;B4;ZB5;\_S8,!K@ !%"XQ!90Z-SZ@\0&"<!U%_\V& ;_ M-A8&_W;\_W;ZZ+3H@\0(Z<D @P86!@&#%A@& +[$%HH$F(G#BH=/$YBH!'4% M@#PL=0-&Z^J@Q!:8B<.*AT\3F*@$=!6 /&1T"H \8W0%@#QA=0:X 0!0ZP,Q MP%!8B$;Y@'[Y '1A@#ZR !U"E>XQ!90Z!H46UN /&1U ^E8__\V# :X 10 MN,064.A"^H/$!@G =0/I/_^#!A8& 8,6& 8 @#ZR !U"E>XQ!90Z-X36UNX MS@Q0N,064.AO'5M;"<!UN^D0__\V& ;_-A8&_W;\_W;ZZ.CG@\0(@#ZR !T M ^E.+;C2#%!7Z%,36UNXU@Q05^A)$UM;5^A[(%M7Z!,26^B%#O\V3@"X5 !0 MZ/X(6UL)P'T4Q@:< '_-CX N%0 4.A:'5M;ZPW_-CX _S9. .A+'5M;N $ M4.CO#5OI\"Q5B>6 /D0 '0XQP8F&P QP8H&P @SXB&P!T"/\V(AOHY"-; M@SXD&P!T"/\V)!OHU2-;QP8D&P QP8B&P ZU/&!D0 ?\VX@SHL2!;QP;B M#/___S8>&^BL(UO_-B ;Z*0C6\<&(!L (L.(!N)#AX;QP;H#/__QP;J#/__ MBP[H#(L6Z@R)#N0,B1;F#,<&&!L .E:+%6)Y5:+=@16Z#0 6Y@)P'4%5NCO M UN /JP '0?,<!0@#Y$ !T!K@0#5#K!+@2#5!6N.P,4.C2"X/$".D:+%6) MY8/L"%97BWX$@#Y* !T/;C$&E!7Z' E6UL)P'TO@#ZL !T#S' 4%!7N!0- M4.B9"X/$"+@! %!7Z% -6UNXM@%05^@Z'%M;4.C:'UNXQ!I05^@S)5M;"<!\ M ^D= ;@V#5!7N"P-4+C$%E#H#!>#Q BXQ!I0N,064.@,)5M;"<!]$;C$&E"X MR!90Z/LD6UL)P'Q45[@Z#5"XQ!90Z-L6@\0&@#ZL !T#S' 4%!7N$0-4.@5 M"X/$"+C$%E#HN1!;"<!U$;C$&E!7Z+PD6UL)P'4#Z:8 ,<!04%>X>@U0Z!8+ M@\0(Z90 5[B:#5"XD U0N-@64.B#%H/$"+[8%KC$&E!6Z(,D6UL)P'T1OMT6 MN,0:4%;H<B1;6PG ?%!6N)X-4+C$%E#H4A:#Q : /JP '0/,<!04%>XJ U0 MZ(P*@\0(N,064.@P$%L)P'4.N,0:4%?H,R1;6PG =" QP%!05[C8#5#HD J# MQ CK#S' 4%!7N.@-4.A_"H/$"(L.R!J)#CX @>$ \/?!_W]T#S' 4%!7N/@- M4.A>"H/$"(L.TAJ+%M0:B0XF&XD6*!N /D8 '0.Z%C<Q@9& QP%#I_@&X M @ QR0,&)AL3#B@;4.AK'UNC)!N#/B0; '4&,<!0Z=P!,<!05^B (EM;B4;^ M@W[^ 'T/,<!04%>X( Y0Z/8)@\0(_S8F&_\V)!O_=O[HLB*#Q :9.08F&W4& M.18H&W05_W;^Z/X=6_\V)!OH_R!;,<!0Z8@!_W;^Z.D=6XL.*!L+#B8;=#N+ M#B8;BQ8H&X/I 8/: (G+ QXD&X _"G0BN H 4/\V)!O_-B@;_S8F&X,&)AL! M@Q8H&P!865L!PUB(!XL>)AL#'B0;Q@< QT;X #'1OH (LV)!N / !T$( \ M"G4(@T;X 8-6^@!&Z^N+1OB+3OH% @"#T0#1X-'14.AX'ENC(AN#/B(; '4. M_S8D&^A8(%LQP%#IX0#'1O@! ,=&^@ BT;XBT[ZT>#1T8G# QXB&XL.)!N) M#XLV)!N / !T)8 \"G4=@T;X 8-6^@"+1OB+3OK1X-'1B<,#'B(;C40!B0=& MZ]:+1OB+3OHM 0"#V0"CV@R)#MP,@S[$ !U ^ER /\V)!OH# 1;F G =4R M/JH '0;@#ZL !T5S' 4%#_-L0 N#0.4.A7"(/$".M#,<!04/\VQ "X?@Y0 MZ)D(@\0(@#[$%GET*C' 4%!0N, .4.A:"(/$".L9@#ZL !T$C' 4%#_-L0 MN,H.4.@2"(/$"+@! %!8Z50H58GE@^P(5E<Q_\=&^@$ ,<"#/L0 '4!0(A& M^<8&1 N/H.4/]V!.@+#UM;B<8)]G41,<!04/]V!+C\#E#H\P>#Q BXM@%0 MN&8 4.AN&%M;H^(,@S[B# !]$C' 4%"X9@!0N! /4.C*!X/$"%:X 10N,06 M4.B>#8/$!@G =#*#/L0 '07@'[Y '41N,064.@% UN8"<!T!,9&^0&XQ!90 MZ*PA6XG'.7[Z?<")?OKKNX,^Q =&N ?OD =4R /JH '0;@#ZL !T5S' M4%#_-L0 N"0/4.@K!X/$".M#,<!04/\VQ "X;@]0Z&T'@\0(@#[$%GET*C' M4%!0N+ /4.@N!X/$".L9@#ZL !T$C' 4%#_-L0 N+H/4.CF!H/$"#' 4%!0 M5N@.#X/$"+@ !)GW?OJ9HQH;B18<&XM.^HD.&!NX 010Z"T<6Z,>&[@!!%#H M(AQ;HR ;@SX@&P!U#S' 4%!0N.H/4.C%!H/$"+\! (GXF5)0_S8<&_\V&AOH M)"4)PG4FN $4/\V'AO_-N(,Z&TA@\0&/0 $?0\QP%!04+@,$%#HB :#Q B+ M1OI 5E")^)G_-AX;4E#_-AP;_S8:&^C@)%)0BT;ZF>BV)%L!PU/H/@R#Q 8) MP'5'B?A(F:/:#(D6W R)^)E24/\V'!O_-AH;Z*XD"<)T++@ !%#_-AX;_S;B M#.CW((/$!CT !'T5,<!04%"X+!!0Z!(&@\0(ZP1'Z4K_5NBA#%O_-N(,Z"P: M6S' 4+AF %#H91Y;6Z/B#(,^X@P ?1(QP%!0N&8 4+A,$%#HUP6#Q CI\255 MB>6#[ A6BW8(_W8&_W8$,<!0N $ 4.CA)0G ?!7_=@;_=@3_-MP,_S;:#.C, M)0G ?@>X8A!0Z?@ @#Y$ !T%8M&!(M.!M'@T=&)PP,>(AO_-^G< /]V!O]V M!/\V'!O_-AH;Z-\CB4;\B5;^BT8$BTX&*T;\&T[^B4;XB4[ZBT;XBT[Z.0;D M#'4+.0[F#'4%,?;I@0"+1OB+3OHY!N@,=0LY#NH,=06^ 0#K:HGST>/1XXM& M^(M.^HF'Y R)C^8,,<!0_W;Z_W;X_S8<&_\V&AOH<B)24+@ !#'2Z$8C4E#_ M-N(,Z)L9@\0(B?/1X[@ !%#_MQX;_S;B#.B@'8/$!@G ?1(QP%!0N&8 4+AD M$%#HO02#Q B)\]'CH1@;F?^W'AM24(M&_(M6_NCW(EL!PU-8Z;PD58GE4%!6 M5X,^Q =0>X 0!0Z7X _S;$ .B<'EN)QU?_-L0 _W8$Z*L>@\0&"<!U&(G[ M ?.*!YB)PXJ'3Q.8J AT!K@! %#K2HMV!( \ '0_B@28B<.*AT\3F*@(="Y7 M_S;$ (U$ 5#H:AZ#Q 8)P'4;B?A B<,!\XH'F(G#BH=/$YBH"'0&N $ 4.L& M1NN\,<!06.DD)%6)Y8'L# )65[B $%#_=@;H"Q1;6PG = /IB #W!J0 ! !T M$3' 4%#_=@2X@A!0Z*4#@\0(,<!0_W8$Z#D<6UN)QPG_?1$QP%!0_W8$N)@0 M4.BP X/$"+@ !%"XQ!905^AN'(/$!HF&_/V#OOS] 'XH_[;\_;C$%E"X 0!0 MZ%4>@\0&/0$ =,\QP%!04+C $%#H< .#Q CKOE?HEA=;,<!0Z3$"@SY2 !T M'?\V4@"-A@#^4.A '5M;_W8&C88 _E#H 1U;6^LH_W8&C88 _E#H)!U;6X,^ M4 = ;_-E ZP2XUA!0C88 _E#HUQQ;6[C$&E#_=@;HFQQ;6PG ?0/I^ "+ M#L0:B8[X_8L.QAJ)CO;]C88 _HF&]/V-A@#^B<: / !T#X \+W4'C40!B8;T M_4;K[+C$&E"-A@#^4.A4'%M;"<!\4(L.Q!HYCOC]=4:+#L8:.8[V_74\B[;T M_8 \ '01B@28B<.*AT\3F*@"=0-&Z^J / !T"HH$F"T@ (@$Z[&+GO3]@\,! M4_^V]/WH9!Q;6^N>C88 _E#HZ!Q;"<!\ NOQ]P:D 0 =!4QP%"-A@#^4/]V M!KC8$%#H%P*#Q B-A@#^4/]V!NBW%EM;"<!]&C' 4/]V!/]V!KCJ$%#H\P&# MQ BX__]0Z>< _W8&Z),<6PG ? +K\_<&I $ '03,<!0_W8&_W8$N!014.C$ M 8/$"/]V!O]V!.AF%EM;"<!\ ^FC +BV 5#_=@;H6Q);6XF&^/V#OOC] 'T: M,<!0_W8$_W8&N"814.B( 8/$"+C__U#I? QP%#_=@3H%1I;6XG'"?]]$3' M4%#_=@2X4!%0Z(P!@\0(N $4+C$%E!7Z$H:@\0&B8;\_8.^_/T ?BG_MOS] MN,064/^V^/WH,1R#Q 8YAOS]=,XQP%!04+AX$5#H2P&#Q CKO5?H<15;_[;X M_>AI%5O_=@3HMAM;,<!06.E+(56)Y8/L!E97N+8!4/]V!NBB$5M;B<8)]GT1 M,<!04/]V!KB.$5#H P&#Q @QP%#_=@3H:AE;6XG'"?]]$3' 4%#_=@2XJ!%0 MZ.$ @\0(N $4+C$%E!7Z)\9@\0&B4;Z@W[Z 'XF_W;ZN,064%;HC!N#Q 8Y M1OITU3' 4%#_=@:XT!%0Z*4 @\0(Z\)7Z,L46U;HQA1;Z;,@58GE4%!65XM^ M! G_=0._ZA&)_HGS1H _ '0"Z_:)\"GX4.BT%5N)1OZ#?OX =1^ /D0 '0' MQ@9& 'K(S' 4%!0N/ 14.A* (/$".L2BW;^B?M'B@>(!$:8"<!T NOQBT;^ MZ4T@58GE_W80_W8._W8,_W8*_W8(_W8&_W8$_S:^$N@[!H/$$/\VOA+H:1-; MZ2(@58GE_W80_W8._W8,_W8*_W8(_W8&_W8$Z+C_@\0.N $ 4.B3T%OI^1]5 MB>6#[ 965[@" %#HH1-;B$;[_W80_W8._W8,_W8*_W8(_W8&_W8$N,064.@K M"X/$$/\VOA+H Q-;N ( 4+@0$E#H!1A;6XG&"?9\-5;H7Q-;"<!T++C$%E#H MEQE;4+C$%E!6Z$$:@\0&N $4+C$%E!6Z"X8@\0&B<=6Z(<36^M&,<!0Z"@3 M6PG =#/_-KH2Z*@26[C$%E#H6!E;4+C$%E QP%#H !J#Q :X 10N,064#' M4.CK%X/$!HG'ZPC&!L06"K\! G_?P?&!L06 .L'B?O&A\06 (!^^P!U#S' M4%!0N,064.B^_H/$".D%'U6)Y8-^! !U-[@! %!0Z,L76UNC*AN#/BH; 70& MQP8J&SH3N $ 4+@" %#HKA=;6Z,L&X,^+!L!= ;'!BP;.A/_-BH;N $ 4.B1 M%UM;_S8L&[@" %#HA!=;6^FJ'E6)Y;@! %!0Z'076UNX 0!0N ( 4.AG%UM; MZ8T>58GE@>PN 597BWX$C88 _XG&QX;2_@ @#T ="J /2]U&T>+AM+^_X;2 M_HG#T>.-AM;^ <.)-\8$ $;KVXG[1XH'B 1&Z]'&! "+GM+^T>.-AM;^ <.) M-X!^!@!T!/^.TOZ#OM+^ 'T#Z1\>N!H24+C$%E#HYQ=;6[[$%L>&U/X (N& MTOXYAM3^?RZ / !T T;K^,8$($:-A@#_4%;HO1=;6XN>U/[1XXV&UOX!PXL? MQ@<O_X;4_NO(N,064.@K UOIQAU5B>6![,X 5E>#?@0 =08QP%#I5 '_=@3H M^/Q;B4;^BW;^B@28B<.*AT\3F*@(= -&Z^^)]_<&I " '01_W8(_W8&5[@@ M$E#H+OV#Q BX"0!0N#024%?HAA>#Q 8)P'4&,<!0Z0(!@#P =""*!)B)PXJ' M3Q.8J AU$H \+W4*_TX&? 6-1 &)QT;KV\8$ #E^_G0KBU[^@#\O="/&1?\ MN,0:4/]V_NB-%EM;"<!T#_<&R!H 0'0'QD7_+XM^_E?H4/Q;B<=7N#X24(V& M,O]0Z%8(@\0&_W;^Z (46[C$&E!7Z%(66UL)P'P#Z7H @WX( '0#Z7$ N$82 M4(V&,O]0Z&066UNXQ!I0C88R_U#H)A9;6PG ?5&XQ!I0C88V_U#H%!9;6PG M?3]7N%024+A*$E"-AC+_4.CO!X/$"+C$&E"-AC+_4.CN%5M;"<!]&;C$&E"- MAC?_4.C<%5M;"<!]!U?H>1-;,?]76.E9'%6)Y3' 4+@+ %"X @!0N%@24.@D M_(/$".E '%6)Y8/L"E97BWX&@#UR=04QP%#K#X ]=W4&N $ 4.L$N ( 4%Z# M_@)T&(U&_%#H>Q1;"<!\#.BB#XE&^(-^^ !]!C' 4.G4 (-^^ !T ^F/ ,=& M]BX?@7[V5A]S'XM>]H,_ '01BT;V+2X?N0( F??Y4.C8#UN#1O8"Z]J)\]'C MC4;\ </_-^C##ULQP GV=0% ,<D)]G4!08G+T>.-3OP!RU#_-^@:#%M;,< ) M]G4!0(G#T>.-1OP!P_\WZ(X/6S' 4/]V!+AX$E"X=!)0N&P24.@2#(/$"KA_ M %#H,@Y;B?/1XXU&_ '#BQ_1XXM&^(F'+A\QP GV=0% B</1XXU&_ '#_S?H M1 ];B?/1XXU&_ '#5_\WZ-(%6UM06.D>&U6)Y8/L"E97BUX$BS>X 0!0N ( M4.C=$UM;B4;XN $ 4+@# %#HS1-;6XE&]O]V!.AG 5N-1OQ0Z&$56XG'@___ M= J)\]'C.;\N'W7G@___=07'1OS___]V^+@" %#HE!-;6_]V]K@# %#HB!-; M6XGST>/'ARX? "+1OSIGQI5B>6#[ 965^@Q#HG&"?9U(#' 4/]V!+B($E"X MA!)0N'P24.@B"X/$"KA_ %#H0@U;"?9]"+@! %#H-@U;C4;^4.C9%%N)QSG^ M= >#__]T NOK@___=07'1O[__XM&_ND]&E6)Y5!05E>+=@2+1@8M 0")1@:# M?@8 =AC_=@CHY@-;B<>#__]T"HGXB 1&@_\*==F#__]U"CEV!'4%,<!0ZP;& M! #_=@18Z?,958GE5HMV!(U&"%#_=@96Z%P&@\0&]D0$0'0%5N@9#5M>B>Q= MPU6)Y8U&!E#_=@3_-KP2Z#@&@\0&BQZ\$O9'!$!T"/\VO!+H[@Q;B>Q=PU6) MY5:+=@2 / !T$8GS1HH'F/]V!E#HO0A;6^OJZ84958GE4%97BWX$,?:#_A1] M&8GST>,YO[H2=0R)\]'CQX>Z$@ ZP-&Z^*#_A1\!KC__U#K*U?HD0Q;_S7H M50U;]D4$('0-@WT& '0'_W4&Z$L06X/^ GX%5^A!$%LQP%!87UZ)[%W#58GE M@^P(5E?'1O@ #'_B?O1XX._NA( = Z#_Q1\!C' 4.G9 $?KYXM>!HH'F%#I M=@"!3O@" +BD 5#_=@3H1@E;6XE&^H-^^@!]8S' 4.FL (%.^ ( N $ 4/]V M!.@0$5M;B4;Z@W[Z 'T&,<!0Z8P N ( 4#' 4%#_=OKH, V#Q CK*H%.^ $ M,<!0_W8$Z-X06UN)1OJ#?OH ?1$QP%#K6S' 4.M6NXP26.FB%;@* %#HC@U; MB<8)]G4%,<!0ZSS'1 ( (M&^HD$BT;XB40$N $4.AK#5N)1 :#? 8 =0>! M3 0$ .L%@4P$( "+1 :)1 B)^]'CB;>Z$E987UZ)[%W#58GE@^P*5HMV!%?' M1OK__\=&_/__@60$Y__V1 0!=0/I[P"#?@H"? /IR "#? 8 =0/IOP#V1 0$ M= /IM@"+? *+1@:+3@B)1OJ)3OR#?@H =2VX 0!0,<!04/\TZ$L,@\0(B4;V MB5;XB?B9*T;V&U;X T;Z$U;\B4;ZB5;\ZQ.)^)F+3@:+7@@IP1G3B4X&B5X( M"?]^2(GXF?]V_/]V^E)0Z'X7"<!_-HM$!IG_=OS_=OI24(M$")E96RG!&=-3 M4>A?%PG ?!>+7OH#7 B)7 B+1 (K1OJ)1 (QP%#K:H-^"@%U#XGXF0-&!A-6 M"(E&!HE6"/]V"O]V"/]V!O\TZ*D+@\0(B4;ZB5;\QT0" #K(O9$! )T'%;H M0@I;_W8*_W8(_W8&_S3H@ N#Q B)1OJ)5OR#?OK_=0R#?OS_=0:X__]0ZP,Q MP%!8Z<P658GE@^P&5HMV!%<Q__9$! %T"8GX*T0"B<?K)O9$! )T%H-\!@!T M$/9$! 1U"HM$""M$!HG'ZPJX__]0N/__4.M*N $ 4#' 4%#_-.@/"X/$"(E& M_(E6_HM&_(M._BT (/9 '4%(<!T 4$)R7T(_W;^_W;\ZQ6)^)D#1OP35OZ) M1OR)5O[_=O[_=OQ86E]>B>Q=PU6)Y5!6BW8$]D0$&'0'N/__4.F, /9$! %U M![C__U#I?P"#? ( ?U'V1 0$=!6X 0!0C4;^4/\TZ*H.@\0&B40"ZQ*X 10 M_W0&_S3HE@Z#Q :)1 *#? ( ?QB#? ( =0>!3 0( .L%@4P$$ "X__]0ZRZ+ M1 :)1 B+1 )(B40"]D0$!'0)BT;^)?\ 4.L2BT0(B<.#PP&)7 B)PS' B@=0 M6.F4%56)Y5:+=@2#? 8 = WV1 0@= ?_= ;HD@Q;@60$F_^+1@:)1 :#? 8 M=06!3 0$ (M$!HE$",=$ @ 7HGL7<-5B>6#[ 965\=&^@ ,?^)^]'C@[^Z M$@!T#H/_%'P&,<!0Z8T 1^OGBUX&B@>84.LK@4[Z @#K*X%.^@( N ( 4#' M4%#_=@3HF@F#Q CK$X%.^@$ ZPPQP%#K5KOB$ECI(Q*X"@!0Z \*6XG&"?9U M!3' 4.L\QT0" "+1@2)!(M&^HE$!+@ !%#H[ E;B40&@WP& '4'@4P$! #K M!8%,!" BT0&B40(B?O1XXFWNA)66.F=%%6)Y8/L"E:+=@3'1O;__\=&^H( MB7;\B7;^C48(4/]V!HU&]E#H\ "#Q :-1O90,<!0Z)H#6UN)\.EB%%6)Y5!0 M5E>+7@2#PPN)WHM&!C'2]W8(B=>#QS"#_SE^ X/'!TZ)^(@$BT8&,=+W=@B) M1@:#?@8 ==6+7@0I\X/#"XG?B?-&,<"*!U"+7@18B ?_1@1/"?]UZHM&!.D! M%%6)Y5!05E>+7@2#PPN)WHM&"IG_=@C_=@924.C"$HG'@\<P@_\Y?@.#QP=. MB?B(!(M&"IG_=@C_=@924.BE$8E&!HE6"/]V"/]V!C' 4%#HP! )P'6YBUX$ M*?.#PPN)WXGS1C' B@=0BUX$6(@'_T8$3PG_=>J+1@3IA1-5B>6#["165XM> M!O]&!HH'F(G'"?]U ^EK$X/_)70+_W8$5^B1 EM;Z]Z-1O2)QHU&](E&\,=& MY BUX&@#\M=0;_1@;_1N3'1N(@ (M>!H _,'4(_T8&QT;B, #'1NH (M> M!O]&!HH'F(G'@_\P? J#_SE_!8/O,.L.@_\J=1>+7@B#1@@"BS^X"@#W9NJ) M1NH!?NKKRL=&Y@ QT;H "#_RYU.8M>!O]&!HH'F(G'@_\P? J#_SE_!8/O M,.L.@_\J=1J+7@B#1@@"BS^X"@#W9NB)1N@!?NC_1N;KQ\=&X @_]L= 6# M_TQU%O]&X(M>!H _ '0+BUX&_T8&B@>8B<=7Z1<!_T;@OQ ZP[_1N"_"@#K M!O]&X+\( (-^X !T&8M>"(-&" 17_W<"_S=6Z$[^@\0(B<;IZ0"+7@B#1@@" M5_\W5NC8_8/$!HG&Z=, _T;@@W[@ '0\BUX(@T8(!(L'BT\"B4;<B4[>@W[> M 'T.Q@0M1O=>W/=>WH->W@"X"@!0_W;>_W;<5NCS_8/$"(G&Z8X BUX(@T8( M HL'B4;L@W[L 'T'Q@0M1O=>[+@* %#_=NQ6Z&?]@\0&B<;K8\=&XB Q@0_ M1NM8QT;B( "+7@B#1@@"BP>(!$;K1<=&XB BUX(@T8( HL'B4;P@W[P '4% MQT;P*A.#?N@ =07'1NC_?XMV\( \ '06_T[H?!%&Z_.)^(@$1NL'N_(26.F1 M#HGP*T;PB4;LBT;J*T;LB4;J@W[J 'T%QT;J "#?N0 =0/W7NJ#?NH ?3.+ M7O" /RUU&X-^XC!U%8M>\/]&\(H'F/]V!%#H1P!;6_].[/]V!/]VXN@Y %M; M_T;J=?#_3NQ\%(M>\/]&\(H'F/]V!%#H'0!;6^OG@W[J '4#Z6']_W8$_W;B MZ < 6UO_3NKKYU6)Y5!05HMV!E<Q__9$!!AT![C__U#IJP#V1 0"=0>X__]0 MZ9X ]D0$!'0;N $ 4(U&!%#_-.A&"X/$!HE&_L=$ @$ 1^M(QP9<)[Q5BT0( MB<.#PP$QR8I.!%&)7 B)PUB(!XM$ D")1 *!? ( !'P>]D0$@'48_W0"_W0& M_S3H_0J#Q :)1OZ+1 :)1 A'"?]T*X-^_@!^"(M&_CE$ G08@W[^ 'T'@4P$ M$ #K!8%,! @ N/__4.L+QT0" QP(I&!%!8Z08058GE5HMV!%>+?@:*!)A0 MB@6863G!= V*!)A0B@6862G!4>L.@#P =04QP%#K!$9'Z]E87UZ)[%W#58GE M_W8$,<!0N P 4+@! %#HR0J#Q B)[%W#58GE_W8$_W8&N \ 4+@! %#HK@J# MQ B)[%W#58GE_W8$_W8&N @ 4+@! %#HDPJ#Q B)[%W#58GEBT8$!4 ,<E1 M45%1_W8&4+@I %"X 0!0Z#(*@\00B>Q=PU6)Y?\V "-1@90_W8$Z$0 @\0& MZ4(/58GE4%:-1@:)QHGS@\8"@S\ = +K]/\TC48&4/]V!.@< (/$!ND9#U6) MY?\V #_=@;_=@3H!@"#Q ;I! ]5B>6![!0(5E?'AO+W #'AO#W "+1@:) MAO[WBT8(B8;\]XN>_O>#AO[W H,_ '0&_X;R]^OLBY[\]X.&_/<"@S\ = ;_ MAO#WZ^R+AO#W X;R]]'@!08 C9X ^ '#B=Z+GO+W ?,#GO#WC48 .<-R#<<& MA"<' +C__U#I)P&-A@#XB<>+AO+WB06#QP+'AO3W "+AO+W.8;T]WU6C88 M^(GQ*<&)CNSWBX;L]XD%@\<"BUX&@T8& HL'B8;V]XN>]O> /P!T(8N>]O?_ MAO;WB@>(!$:-1@ YQG+CQP:$)P< N/__4.F\ ,8$ $;_AO3WZZ#'!0 @\<" MQX;T]P BX;P]SF&]/=]58V& /B)\2G!B8[L]XN&[/>)!8/' HM>"(-&" *+ M!XF&]O>+GO;W@#\ =""+GO;W_X;V]XH'B 1&C48 .<9RX\<&A"<' +C__U#K M4,8$ $;_AO3WZZ''!0 @\<"C88 ^(GQ*<%!NP( B<B9]_O1X(F&[O<QP%"- MA@#X4/]V!#' 4/^V[O?_=@3H#@E;4+@[ % QP%#H-0B#Q!!06.E9#56)Y5:+ M=@0QP%"X5B=05C' 4+@& %!6Z. (6U"X.P!0,<!0Z <(@\00Z2X-58GE@SY< M)P!T!HL.7"?_T3' 4%!04%#_=@2X 0!0,<!0Z-T'@\00Z04-58GE,<!04%!0 M4/]V!+@! % QP%#HP >#Q!#IZ Q5B>505C'V@_X4?1J)\]'C@[^Z$@!T#(GS MT>/_M[H2Z D 6T;KX5Z)[%W#58GE4%:+=@17]D0$!'4&]D0$ G4%,<!0ZS># M? ( ?P4QP%#K+/]T O]T!O\TZ#P'@\0&B<<Y? )U#L=$ @ BT0&B40(5^L) M@4P$$ "X__]06%]>B>Q=PU6)Y3' 4%!04%!0N ( 4#' 4.@B!X/$$(GL7<-5 MB>7'!CX3"'2+3@2)#CH3N#8 4+@! %#HBP=;6PG ?04QP%#K!+@! %!8Z1L, M58GE4%8QP%!0_W8&4%#_=@2X' !0N $ 4.C1!H/$$(G&B?!>B>Q=PU6)Y3' M4%!04%#_=@2X!@!0N $ 4.BM!H/$$(GL7<-5B>6X!@!0Z/\#4.@% %M;Z<$+ M58GE,<!04%!0_W8&_W8$N"4 4#' 4.AZ!H/$$(GL7<-5B>56BW8&5XM^!#' M4%974%;H*P=;4%?H)0=;4+@) %"X 0!0Z$L&@\007UZ)[%W#58GE4%:+3@2) M#CH3BTX&B0Y $XM."(D.0A.+3@J)#CP3N!, 4+@! %#HH09;6XG&"?9T!XGP MF5)0ZPC_-D(3_S9 $UA:7HGL7<-5B>505HL.8"<#3@2!P?\#@>$ _(G..39@ M)W<)5NB, EL)P'0%,<!0ZQR+'F GB7?^QT3^ #_-F GZ/\!6XDV8">X 0!0 M6.G;"E6)Y8/L#%97@WX$ '4%QT8$ @#'1O0 (-^] )R ^FB (M&!$ E_O\% M @")1O:#/F(G '4BN 0 4.A= EN)QHGP0"7^_XG&@\8"B39B)XDV8"?'1/X M ,=&_@ BS9>)PGV=$R+1/Z)1OJ+7O8!\XG?.7[Z<P+K,8M&^HU- CG!<P^+ M1OJ)1?Z)?/Z+!(D%B3R#?OX = F+!(M>_HD'ZP:+#(D.7B=6ZQV)=OZ+-.NP M_W;VZ #_6PG =0+K!O]&].E5_S' 4%CI$ I5B>6#[ Q65XM&!D E_O\% @") M1O:+7@2+1_Z)1OJ+1OHK1@2)1O3'1OX (LV7B<)]G0\.7;Z<P+K-3EV^G4I MBUX$BT3^B4?^@W[^ '0)BP2+7OZ)!^L&BPR)#EXGBUX$BT?^B4;ZZP>)=OZ+ M-.O BU[V UX$B=\Y?OIR((M&^HU- CG!<Q&+1OJ)1?Z+7@2)?_Y7Z)$ 6_]V M!.LG_W8&Z)/^6XG'"?]U!3' 4.L5_W;T5_]V!.@/ (/$!O]V!.AF %M76.E( M"56)Y5:+=@97BWX$BT8(_TX("<!T"HG[1XH'B 1&Z^SI)@E5B>504%97BT8$ M]V8&B48$_W8$Z#;^6XG&"?9U!3' 4.L8B?>+1@2)P8/I 8E.! G = ;&!0!' MZ^M66.GH"%6)Y5!05E<Q_XLV7B<)]G0-.78$<P+K!HGWBS3K[XM>!(DW"?]T M!XM&!(D%ZP>+3@2)#EXG"?9T&(M>!#EW_G40BUX$BT3^B4?^BP2+7@2)!PG_ M=!B+1@0Y1?YU$(M>!(M'_HE%_HM>!(L'B07I> A5B>505C' 4%#_=@104%"X M$0!0,<!0Z#,#@\00B<8)]G4-BPY($XD.,A,QP%#K!+C__U!8Z4((58GE4%!6 M5XL^,A.+7@0#'C(3B=Z#?@0 ?@HY]W8&N/__4.L05NBA_UL)P'4#5^L$N/__ M4%CI"0A5B>6#[ 965^@U (G'BW8$B?-&@#\ = +K]DY.@#Q8=1:Y"@")^)GW M^8/",(@4B?B9]_F)Q^ODBT8$7UZ)[%W#58GE,<!04%!04%"X% !0,<!0Z(@" M@\00B>Q=PU6)Y?]V!/]V!K@% %"X 0!0Z*D"@\0(B>Q=PU6)Y5!65XM^!#' M4%!04%!0N"H 4+@! %#H2@*#Q!")Q@GV?!*+#CH3B0V+#CP3B4T",<!0ZP%6 M6%]>B>Q=PU6)Y5!6,<!04/]V!E#_=@C_=@2X P!0N $ 4.@) H/$$(G&B?!> MB>Q=PU6)Y5!05HMV!E>+1@31X"T" (G#B[]D)XM&!-'@+0( B<.)MV0GBTX$ MB0XZ$X/^ 70$"?9U U;K!+CB6U"/!D03N# 4#' 4.@] EM;B4;^@W[^ 74# MOP$ @W[^ 'T%_W;^ZP%76.G !E!345)65U4>!HGCBU\2B=A+ =N+GV0G_S8X M$U#_TUB/!C@3!Q]=7UY:65M8CP8T$\]5B>505E>+?@0QP%#_=@974%!7Z!H" M6U"X$@!0N $ 4.A 8/$$(G&B?!?7HGL7<-5B>505HMV!%>+?@:)=OZ / !T M T;K^( ] '0*B?M'B@>(!$;K\<8$ (M&_E]>B>Q=PU6)Y5!6BW8$5XM^!HEV M_H ] '0*B?M'B@>(!$;K\<8$ (M&_E]>B>Q=PU6)Y5!6BW8$5XGW@#P = -& MZ_B)\"GX7UZ)[%W#58GE5HMV!%>+?@:#?@@ ?P4QP%#K+XGS1HH'F(G[1U"* M!YA9.<%U$(!\_P!T!?]."'7C,<!0ZPV*1/^84(I%_YA9*<%16.F=!56)Y?]V M!#' 4+@* %"X 0!0Z)D @\0(B>Q=PU6)Y5!65XM^!#' 4%!04%!0N < 4#' M4.@[ (/$$(G&"?9\"@G_= :+#CH3B0V)\.E/!56)Y3' 4%#_=@90_W8(_W8$ MN 0 4+@! %#H!P"#Q!")[%W#58GEBTX(B0XZ$XM."HD./!.+3@R)#CX3BTX. MB0Y $XM.$(D.0A.+3A*)#D03_W8&_W8$Z%4 6UN)[%W#58GE4%!65_]V"NB$ M %N)QXD^.A.+3@B)#CP3BTX*B0X^$[Y $X/_#G\4B?A/"<!T#8M>"O]&"HH' MB 1&Z^S_=@;_=@3H" !;6U]>B>Q=PU6)Y5!6BTX&B0XX$[@V$U#_=@3HT0!; M6XG&"?9T U;K&X,^.!, ?1"+#C@3]]F)#H0GN/__4.L$_S8X$UA>B>Q=PU6) MY5!6BW8$5S'_B?-&@#\ = -'Z_6)^$!?7HGL7<-5B>6#[ 96BW8$5S'_QT;Z M "*!)BCAB>#/H8G('0<@SZ&)PET%8,^AB<-= Z#/H8G"G0'@SZ&)PQU T;K MU( \+74&1L=&^@$ B?-&B@>8+3 B4;\@W[\"G,,N H ]^>)QP-^_.OB@W[Z M '0'B?CWV%#K 5=87UZ)[%W#N0$ ZPJY @#K!;D# .L 58GEBT8$BUX&S2!= MPU6)Y8/L"%:+=@17QT;\ #'1OX #'_B@28B<.*AT\3F*@(= -&Z^^ /"UU M!$:_ 0")\T:*!Y@M, ")1OJ#?OH*<RFX"@ QTO]V_O]V_.B+ 8E&_(E6_C' MBT[\BU;^ T[Z$<*)3OR)5O[KQ0G_=!&+1OR+3O[WV??8@]D 45#K!O]V_O]V M_%A:7UZ)[%W#58GE4%:+=@17,?^*!)A0BD8&F%DYP74"B?>)\T: /P!UZ8GX M7UZ)[%W#6UE:6%:)YH=< EXYTW</<@8YR'<)= 2X___#,<##N $ PXL7BT\" M@\,$27P4.P=U]HM? H7;=0>X% !0Z>0!_^.)T^OO5E>)YHM<!HM$")F)USG" M=38ATGT$]]MT+C'2BTP*BT0,(<!]"/?8]]D9T/?7]_.1]_,A_WT']]GWV(/9 M (G*7UY;@\0(_^-2B<<QVR'_?0?WW_=<!AG?BT0*BU0,(=)]"??:]]@9VO=4 M_KD0 -'@T=+1TSG?=P=R"3E4!G8$XNWK""M4!AG[0.+C7^NE5E>)YHM<!HM$ M" G =1<QTHM,"HM$#/?SD??SB<I?7EN#Q C_XXG',=N+1 J+5 RY$ #1X-'2 MT=,YWW<'<@DY5 9V!.+MZ]0K5 89^T#BX^O*B>-2B<'W9P1:4(G0]V<"6@'" MB<B)T?=G @'*6X/$!/_C5E>)YHM<!HM$")DYPG4Z(=)]!/?;=#(QTHM,"HM$ M#"' ?0;WV/?9&=#W\Y'W\S';@WP, 'T']]OWVH/; (G0B=I?7EN#Q C_XXG' M,=LA_WT']]_W7 89WXM$"HM4#"'2?0;WVO?8&=JY$ #1X-'2T=,YWW<'<@DY M5 9V!.+MZ[ K5 89^T#BX^NF5E>)YHM<!HM$" G =1LQTHM,"HM$#/?SD??S M,=N)T(G:7UY;@\0(_^.)QS';BT0*BU0,N1 T>#1TM'3.=]W!W().50&=@3B M[>O2*U0&&?M XN/KR.A9 .C# +@& +KZ$^LPN!( NA$4ZRBX% "Z*!3K(+@! M +H_%.L8N ( NE84ZQ"X$@"Z;!3K"+@1 +J#%.L ,=N''K 4A=MT!5#_TUC# MNQ8 4U*X @!0Z#L Z$/SB<*#^A5S$='BN] 3 =.+'X7;= 2)VNL>NZ$4N08 MB<*!X@< Q8P (@72]'ZT?K1^N+MNI,4ZZI5B>7'!HHG! "+7@2)'HPGBUX( MB1Z.)XM>!HD>DB>XB"=0N $ 4+@! +N()[D# ,T@B>Q=P^C3\E]>B>Q=PUY? MZ_A;65I85HGFAUP"7CG3?P]\!CG(=PET!+C__\,QP,.X 0## "1(96%D M97(Z('!A=&-H+F,L=B R+C N,2XU(#@X+S V+S S(#$U.C Y.C,W(&QW86QL M($QO8VME9" D *0! $ O=&UP+W!A=&-H;UA8 M6%A86 O=&UP+W!A=&-H:5A86%A86 O=&UP+W!A=&-H<EA86%A86 O=&UP M+W!A=&-H<%A86%A86 @ 0 "] P M "-E;'-E"@ #N!Q, 0@"$!D0 V@9& %('3@!Z!U( QP=3 -4'8@!J!F, MG@9D *<&90!!!V8 2@=L &D';@!Q!V\ @@=P )L'<@"L!W, S@=V -P'> #A M!QH,!P * -4+( #Q"R$ \0LJ +*P#Q"RT \0L] &L+3F]T(&5N;W5G:"!M M96UO<GD@=&\@=')Y('-W87!P960@:'5N:R$@($%S<W5M:6YG('5N<W=A<'!E M9"X* !,;W-T(&AU;FL@;VX@86QL;V,@97)R;W(A"@ 3&]S="!H=6YK(&]N M(&%L;&]C(&5R<F]R(0H $EG;F]R:6YG('!R979I;W5S;'D@87!P;&EE9" H M;W(@<F5V97)S960I('!A=&-H+@H )7-E=F5R<V5D("AO<B!P<F5V:6]U<VQY M(&%P<&QI960I('!A=&-H(&1E=&5C=&5D(2 @)7,@+5(_(%MY72 %( 56YR M $%S<W5M90 26=N;W)E !!<'!L>2!A;GEW87D_(%MN72 $QO<W0@:'5N M:R!O;B!A;&QO8R!E<G)O<B$* !(=6YK(",E9"!I9VYO<F5D(&%T("5L9"X* M $AU;FL@(R5D(&9A:6QE9"!A=" E;&0N"@ 2'5N:R C)60@<W5C8V5E9&5D M(&%T("5L9 @=VET:"!F=7IZ("5L9 ("AO9F9S970@)6QD(&QI;F4E<RD M <P N"@ "@I286X@;W5T(&]F(&UE;6]R>2!U<VEN9R!0;&%N($$M+71R M>6EN9R!A9V%I;BXN+@H* ", )60@;W5T(&]F("5D(&AU;FMS(&EG;F]R960M M+7-A=FEN9R!R96IE8W1S('1O("5S"@ E9"!O=70@;V8@)60@:'5N:W,@9F%I M;&5D+2US879I;F<@<F5J96-T<R!T;R E<PH %EO=2!M87D@;F]T(&-H86YG M92!T;R!A(&1I9F9E<F5N="!P871C:"!F:6QE+@H "L 5&]O(&UA;GD@9FEL M92!A<F=U;65N=',N"@!#86XG="!C9"!T;R E<RX* !!<F=U;65N="!T;R M M1"!N;W0@86X@:61E;G1I9FEE<BX* C:69D968@)7,* C:69N9&5F("5S M"@ C96YD:68@+RH@)7,@*B\* !5;G)E8V]G;FEZ960@<W=I=&-H.B E<PH M $]F9G-E="!C:&%N9VEN9R!F<F]M("5L9"!T;R E;&0* !/9F9S970@8VAA M;F=I;F<@9G)O;2 E;&0@=&\@)6QD"@ ("HJ*BH @+2TM+0 @+2TM+2T M "HJ*BHJ*BHJ*BHJ*BHJ*@H "HJ*B P)7,* J*BH@)6QD)7,* J*BH@ M)6QD+"5L9"5S"@ +2TM(# E<PH "TM+2 E;&0E<PH "TM+2 E;&0L)6QD M)7,* E<P )6,@)7, 1F%T86P@:6YT97)N86P@97)R;W(@:6X@86)O<G1? M:'5N:R@I+@H $]U="UO9BUS>6YC('!A=&-H+"!L:6YE<R E;&0L)6QD+2UM M86YG;&5D('1E>'0@;W(@;&EN92!N=6UB97)S+"!M87EB93\* &]L9&-H87(@ M/2 G)6,G+"!N97=C:&%R(#T@)R5C)PH =P!P871C:#H@8V%N)W0@8W)E871E M("5S+@H '< <&%T8V@Z(&-A;B=T(&-R96%T92 E<RX* !P871C:#H@;6ES M;W)D97)E9"!H=6YK<R$@;W5T<'5T('=I;&P@8F4@9V%R8FQE9"X* &EL/25L M9"!L9FP])6QD"@ /____\# 'T __________^3)@< M"0!E)0H 924@ !\F(0"M)"H +B K *TD+0#N(2T =P!P871C:#H@8V%N)W0@ M8W)E871E("5S+@H '( <&%T8V@@9FEL92 E<R!N;W0@9F]U;F0* !P871C M:#H@;W5T(&]F(&UE;6]R>2 H9W)O=U]H=6YK;6%X*0H &1O;F4* $AM;2XN M+@ ("!)9VYO<FEN9R!T:&4@=')A:6QI;F<@9V%R8F%G92X*9&]N90H " @ M22!C86XG="!S965M('1O(&9I;F0@82!P871C:"!I;B!T:&5R92!A;GEW:&5R M92X* @("5S;V]K<R!L:6ME("5S('1O(&UE+BXN"@ 3 !4:&4@;F5X="!P M871C:"!L !A(&YO<FUA;"!D:69F &%N(&5D('-C<FEP= 82!N97<M<W1Y M;&4@8V]N=&5X="!D:69F !A(&-O;G1E>'0@9&EF9@ *%!A=&-H(&ES(&EN M9&5N=&5D("5D('-P86-E)7,N*0H <P!.;R!F:6QE('1O('!A=&-H+B @ M4VMI<'!I;F<N+BX* $9I;&4@=&\@<&%T8V@Z( !.;R!F:6QE(&9O=6YD+2US M:VEP('1H:7,@<&%T8V@_(%MN72 %-K:7!P:6YG('!A=&-H+BXN"@ *BHJ M( +2TM( 26YD97@Z !0<F5R97$Z "X* J*BHJ*BHJ*@ *BHJ( M/" #X@ !4:&4@=&5X="!L96%D:6YG('5P('1O('1H:7,@=V%S.@HM+2TM M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+0H 'PE<P M+2TM+2TM+2TM+2TM+2TM M+2TM+2TM+2TM+0H *BHJ*BHJ*BH " @"@!5;F5X<&5C=&5D(&5N9"!O9B!F M:6QE(&EN('!A=&-H+@H *BHJ*BHJ*BH %5N97AP96-T960@96YD(&]F(&AU M;FL@870@;&EN92 E;&0N"@ 56YE>'!E8W1E9" J*BH@870@;&EN92 E;&0Z M("5S P+# 1'5P;&EC871E("(M+2TB(&%T(&QI;F4@)6QD+2UC:&5C:R!L M:6YE(&YU;6)E<G,@870@;&EN92 E;&0N"@ E<R B+2TM(B!A="!L:6YE("5L M9"TM8VAE8VL@;&EN92!N=6UB97)S(&%T(&QI;F4@)6QD+@H %!R96UA='5R M90!/=F5R9'5E $AU;FL@=&]O(&QA<F=E("@E;&0@;&EN97,I(&%T(&QI;F4@ M)6QD.B E<P ( H $YO("TM+2!F;W5N9"!I;B!P871C:"!A="!L:6YE("5L M9 H "5S"B5S"B5S"@ H1F%S8VEN871I;F<M+71H:7,@:7,@<F5A;&QY(&$@ M;F5W+7-T>6QE(&-O;G1E>'0@9&EF9B!B=70@=VET:&]U= !T:&4@=&5L;'1A M;&4@97AT<F$@87-T97)I<VMS(&]N('1H92 J*BH@;&EN92!T:&%T('5S=6%L M;'D@:6YD:6-A=&4 '1H92!N97<@<W1Y;&4N+BXI %)E<&QA8V5M96YT('1E M>'0@;W(@;&EN92!N=6UB97)S(&UA;F=L960@:6X@:'5N:R!A="!L:6YE("5L M9 H 9FEL;'-R8R E;&0L(&9I;&QD<W0@)6QD+"!R8B E;&0L(&4K,2 E;&0* M !(=6YK('1O;R!L87)G92 H)6QD(&QI;F5S*2!A="!L:6YE("5L9#H@)7, M "HJ*B E;&0L)6QD"@ 56YE>'!E8W1E9"!E;F0@;V8@9FEL92!I;B!P871C M:"!A="!L:6YE("5L9"X* #P@97AP96-T960@870@;&EN92 E;&0@;V8@<&%T M8V@N"@!5;F5X<&5C=&5D(&5N9"!O9B!F:6QE(&EN('!A=&-H(&%T(&QI;F4@ M)6QD+@H +2TM(&5X<&5C=&5D(&%T(&QI;F4@)6QD(&]F('!A=&-H+@H +2TM M("5L9"PE;&0* !5;F5X<&5C=&5D(&5N9"!O9B!F:6QE(&EN('!A=&-H(&%T M(&QI;F4@)6QD+@H /B!E>'!E8W1E9"!A="!L:6YE("5L9"!O9B!P871C:"X* M $YO="!E;F]U9V@@;65M;W)Y('1O('-W87 @;F5X="!H=6YK(0H )3-D("5C M("5C("5S !-86QF;W)M960@<&%T8V@@870@;&EN92 E;&0Z("5S "]U<W(O M8FEN+V5D("5S O=7-R+V)I;B]E9" M("5S !W "X* !W"@ <0H M _____________U!A=&-H:6YG(&9I;&4@)7,@=7-I;F<@4&QA;B E M<RXN+@H $$ 0@ H0W)E871I;F<@9FEL92 E<RXN+BD* !20U,O)7,E<P M+'8 &-O("UL("5S !#86XG="!F:6YD("5S+2UA='1E;7!T:6YG('1O(&-H M96-K(&ET(&]U="!F<F]M(%)#4RX* !#86XG="!C:&5C:R!O=70@)7,N"@ M4T-#4R\E<R5S ',N !G970@+64@)7, 0V%N)W0@9FEN9" E<RTM871T96UP M=&EN9R!T;R!G970@:70@9G)O;2!30T-3+@H 0V%N)W0@9V5T("5S+@H $-A M;B=T(&9I;F0@)7,N"@ E<R!I<R!N;W0@82!N;W)M86P@9FEL92TM8V%N)W0@ M<&%T8V@N"@ 0V%N)W0@;W!E;B!F:6QE("5S"@!787)N:6YG.B!T:&ES(&9I M;&4@9&]E<VXG="!A<'!E87(@=&\@8F4@=&AE("5S('9E<G-I;VXM+7!A=&-H M:6YG(&%N>7=A>2X* %1H:7,@9FEL92!D;V5S;B=T(&%P<&5A<B!T;R!B92!T M:&4@)7,@=F5R<VEO;BTM<&%T8V@@86YY=V%Y/R!;;ET@ $%B;W)T960N"@!' M;V]D+B @5&AI<R!F:6QE(&%P<&5A<G,@=&\@8F4@=&AE("5S('9E<G-I;VXN M"@!R $-A;B=T(&]P96X@9FEL92 E<PH 0V%N)W0@;W!E;B!F:6QE("5S"@!7 M87)N:6YG.B!T:&ES(&9I;&4@9&]E<VXG="!A<'!E87(@=&\@8F4@=&AE("5S M('9E<G-I;VXM+7!A=&-H:6YG(&%N>7=A>2X* %1H:7,@9FEL92!D;V5S;B=T M(&%P<&5A<B!T;R!B92!T:&4@)7,@=F5R<VEO;BTM<&%T8V@@86YY=V%Y/R!; M;ET@ $%B;W)T960N"@!';V]D+B @5&AI<R!F:6QE(&%P<&5A<G,@=&\@8F4@ M=&AE("5S('9E<G-I;VXN"@!#86XG="!S965M('1O(&=E="!E;F]U9V@@;65M M;W)Y+@H <&%T8V@Z(&-A;B=T('=R:71E('1E;7 @9FEL92X* !P871C:#H@ M8V%N)W0@=W)I=&4@=&5M<"!F:6QE+@H $-A;B=T(')E;W!E;B!F:6QE("5S M"@ $5R<F]R(')E861I;F<@=&UP(&9I;&4@)7,N"@ M $UO=FEN9R E<R!T M;R!S=&1O=70N"@!P871C:#H@:6YT97)N86P@97)R;W(L(&-A;B=T(')E;W!E M;B E<PH <&%T8V@Z('=R:71E(&9A:6QE9 H 'X 36]V:6YG("5S('1O("5S M+@H <&%T8V@Z(&-A;B=T(&)A8VMU<" E<RP@;W5T<'5T(&ES(&EN("5S"@ M36]V:6YG("5S('1O("5S+@H <&%T8V@Z(&-A;B=T(&-R96%T92 E<RP@;W5T M<'5T(&ES(&EN("5S+@H <&%T8V@Z(&EN=&5R;F%L(&5R<F]R+"!C86XG="!R M96]P96X@)7,* '!A=&-H.B!W<FET92!F86EL960* !P871C:#H@8V%N)W0@ M8W)E871E("5S+@H '!A=&-H.B!I;G1E<FYA;"!E<G)O<BP@8V%N)W0@<F5O M<&5N("5S"@!P871C:#H@=W)I=&4@*"5S*2!F86EL960* $]O<', '!A=&-H M.B!O=70@;V8@;65M;W)Y("AS879E<W1R*0H +V1E=B]T='D &UK9&ER &9E M=&-H;F%M92 E<R E9" E9 H +V1E=B]N=6QL %)#4R\E<P +'8 %-#0U,O M)7,E<P!S+@ )7,*4&%T8V@@;&5V96PZ("5D"@ O8FEN+W-H '-H M8P M+V)I;B]S: !S: +6, "=* P!A -9)<@ )2G< MDD 0!6(U8C 0 M $( 5A]6'P( & "<$J82L!( M IDT# &$ ATUR )]-=P" 3391#0!$ '%03P V4%4 +E!8 M "908P#L4&0 =%!E .%09@#A4&< X5!O #E0<P#_4'4 ,5!X "E0*&YU;&PI M "@)P " @(" @(" @( @(" @( M(" @(" @(" @(" @(" @(" @"! 0$! 0$! 0$! 0$! 0$ 0$! 0$! 0$! 00 M$! 0$! 004%!04%! 0$! 0$! 0$! 0$! 0$! 0$! 0$0$! 0$!!"0D)"0D(" M @(" @(" @(" @(" @(" @(" A 0$! @ /Q16% /H3 M "#%!$4$10H%$5R<F]R.B!$:79I<VEO;B!B>2 P( H M26QL96=A;"!%32!I;G-T<G5C="=N"@!%<G(@:6X@14T@8V%S92!I;G-T<B * M %9A<FEA8FQE(&]U="!O9B!R86YG90H 17)R(&EN($5-('-E="!I;G-T<B * M $9L;V%T:6YG('!T(&YO="!I;7!L+@H 2&5A<"!O=F5R9FQO=R * $5-('1R :87 @,# P,# P,"!O8W1A; H H">@)P !A end
rheffel@cs2.wsu.edu (05/30/89)
I have seen a lot of requests on the net asking how to apply the patches from bugs.nosc.mil, vm1.nodak.edu, or BITNET's listserv@ndsuvm1. So, I decided to write this little note to help others. First, I want to express some very strong opinions. AST's MINIX is a great for learning about operating systems. I started first on VM/CMS, then moved to PC-DOS, subsequently UNIX. I have come to appreciate UNIX thoroughly. The main drawback to UNIX is its interface. For hackers like myself, the spartan interface is dandy. But for everyone else, it is a major pain in the rear. I would like to see UNIX become as dominant in the upper-end PCs as DOS is on 8088/86 and 286 machines. However, I believe this will not be the case. Why? The tools, such as Turbo[ Assembler, C, Pascal] as well as end-user programs have such a nice rapport with the end-user that will cause them to promote an operating system such as OS/2 PM or WINDOWS-based DOS. What do I think should be done about this situation? First, I have been working on modifying MINIX so that a floppy disk (5 1/4) or micro-disk (3 1/2) can be formatted from MINIX so it can be used solely by MINIX (faster, since no boot, FAT, or DIR sectors is necessary) or can be used by PC-DOS. The requirement that MINIX use another operating system to format its diskettes defeats the purpose of an OS. I also believe that all programs should have a flag "?" or "-?" that will display the syntax of the command. Of course, programs expecting stdin will need to be re-written to accomodate this flag. The ramifications extend further. What happens if the command is sitting in the middle of a pipeline with the "?" flag activated? Nevertheless, I am using in a personal capacity Allen Holub's getargs() routine found in Dr. Dobb's Journal May 1985. I will write such a routine from scratch at some point with some improvements and place it in the public domain. But, I suggest that people look at the article and the following source code: /* getargs.h */ /* Typedefs and defines needed for getargs */ #define INTEGER 0 #define BOOLEAN 1 #define CHARACTER 2 #define STRING 3 #define PROC 4 typedef struct { unsigned arg : 7; unsigned type : 4; int *variable; char *errmsg; } ARG; /* GETARGS.C Command line argument processor for C programs */ /* (C) Copyright 1985, Allen I. Holub. All rights reserved. */ /* This program may be copied for personal, non-profit use only */ /* Dr. Dobb's Journal May 1985 */ #include <stdio.h> #include "getargs.h" typedef int (*PFI)(); static char *setarg( argp, linep) ARG *argp; char *linep; { /* Set an argument. */ /* argp points at the argument table entry corresponding to *linep. */ /* Return linep, updated to point past the argument being set */ ++linep; switch(argp->type) { case INTEGER : *argp->variable = stoi(&linep); break; case BOOLEAN : *argp->variable = 1; break; case CHARACTER : *argp->variable = *linep++; break; case STRING : *(char **)argp->variable = linep; linep = ""; break; case PROC : (* (PFI)(argp->variable) )(linep); linep = ""; break; default : fprintf(stderr, "INTERNAL ERROR: BAD ARGUMENT TYPE\n"); break; } return(linep); } static ARG *findarg(c, tabp, tabsize) int c, tabsize; ARG *tabp; { /* Return pointer to argument table entry corresponding to c */ /* or 0 if c isn't in table. */ for (; --tabsize >= 0; tabp++) if (tabp->arg == c) return(tabp); return(0); } static pr_usage(tabp, tabsize) ARG *tabp; int tabsize; { /* Print the argtab in the form: */ /* -<arg> <errmsg> (value is <*variable>) */ for (; --tabsize >= 0; tabp++) switch(tabp->type) { case INTEGER : fprintf(stderr, "-%c<num> %-40s (value is ", tabp->arg, tabp->errmsg); fprintf(stderr, "%-5d)\n", *(tabp->variable) ); break; case BOOLEAN : fprintf(stderr, "-%c %-40s (value is ", tabp->arg, tabp->errmsg); fprintf(stderr, "%-5s)\n", *(tabp->variable) ? "TRUE" : "FALSE" ); break; case CHARACTER : fprintf(stderr, "-%c<c> %-40s (value is ", tabp->arg, tabp->errmsg); fprintf(stderr, "%-5c)\n", *(tabp->variable) ); break; case STRING : fprintf(stderr, "-%c<str> %-40s (value is ", tabp->arg, tabp->errmsg); fprintf(stderr, "<%s>)\n", *(char **)tabp->variable); break; case PROC : fprintf(stderr, "-%c<str> %-40s\n", tabp->arg, tabp->errmsg); break; } } #define ERRMSG "Illegal argument <%c>. Legal arguments are:\n\n" int getargs(argc, argv, tabp, tabsize) int argc, tabsize; char **argv; ARG *tabp; { /* Process command line arguments. Stripping all command line switches */ /* out of argv. Return a new argc. If an error is found, exit(1) is */ /* called (getargs won't return) and a usage message is printed showing */ /* all arguments in the table. */ register int nargc; register char **nargv, *p; register ARG *argp; nargc = 1; for (nargv = ++argv; --argc > 0; argv++) if (**argv != '-') { *nargv++ = **argv; nargc++; } else { p = (*argv) + 1; while (*p) if (argp = findarg(*p, tabp, tabsize) ) p = setarg(argp, p); else { fprintf(stderr, ERRMSG, *p); pr_usage(tabp, tabsize); exit(1); } } return(nargc); } /* STOI.C More powerful version of atoi */ /* Copyright (C) 1985 by Allen Holub. All rights reserved. */ /* This program may be copied for personal, non-profit use only */ /* Dr. Dobb's Journal May 1985 */ #define islower(c) ('a' <= (c) && (c) <= 'z') #define toupper(c) (islower(c) ? (c) - ('a' - 'A') : (c) ) int stoi(instr) register char **instr; { /* Convert string to integer. If string starts with 0x it is */ /* interpreted as a hex number, else if it starts with a 0 it */ /* is octal, else it is decimal. Conversion stops on encountering */ /* the first character which is not a digit in the indicated radix */ /* *instr is updated to point past the end of the number */ register int num=0; register char *str; int sign=1; str = *instr; while (*str == ' ' || *str == '\t' || *str == '\n') str++; if (*str == '-') { sign = -1; str++; } if (*str == '0') { ++str; if (*str == 'x' || *str == 'X') { str++; while( ('0' <= *str && *str <= '9') || ('a' <= *str && *str <= 'f') || ('A' <= *str && *str <= 'F') ) { num *= 16; num += ('0' <= *str && *str <= '9') ? *str - '0' : toupper(*str) - 'A' + 10; str++; } } else while ('0' <= *str && *str <= '7') { num *= 8; num += *str++ - '0'; } } else while ('0' <= *str && *str <= '9') { num *= 10; num += *str++ - '0'; } *instr = str; return( num * sign); } Furthermore, a graphical interface is now the de facto standard (Menu Headers and pull-down menus). I know this means all that overhead in terms of code and extra-time to do the programming. But, end-users expect to be able to use software without having to RTFM. And in the end, it will be free-market forces that decide whether UNIX will grow in popularity or will be just a second-class OS used primarily by DOD and universities. Clearly, the window system called X (I wish they would simply call it X Windows) is out of the question under MINIX. However, I did obtain mgr.tar.Z from bugs.nosc.mil and will be taking a look at that later. This also may be too large for MINIX (I don't yet know). If mgr is too complex or too code intensive, a simple menu header and pop-down window scheme can be found in Al Steven's C programming column of the Sept and Oct 88 issues of Dr. Dobb's Journal. This interface is simple yet elegant. I also typed in this code, but I made a mistake somewhere and can not seem to find it. As of right now, I would like to see these authors (Allen Holub and Al Stevens) donate these specific routines to the public domain. I think that these routines together could be used to develop a consistent interface that would be extremely easy to use both in a DOS and UNIX (particularly MINIX) environment. If you haven't caught the drift of this diatribe, let me state it explicitly. I believe that no-one has a monopoly (copyright or patent) on a user-interface. I am clearly dismayed by the look-and-feel litigation trend in industry. My position is quite simply that a screen (crt, monitor) is simply another data structure that is fundamental to computer science. A consistent interface is necessary across all hardware configurations. Let us briefly examine an analogy. Road signs indicating hazards and driving conditions are pretty much standardized internationally. This allows a traveller to proceed from country to country without having to be licensed in every country. The benefits are enormous. Looking at the other side of the coin, the best example would be Great Britain and her former colonies. They drive on the wrong side of the road, require cars with steering wheels in the passenger's seat, etc. It takes time to learn to navigate in these backward countries. Even more importantly, I am outraged by the fact that file-formats are proprietary as viewed by the courts in the SEAware vs. PKware case. Files are just streams of meaningless information to be deciphered by a program. This judgment is a serious detriment to the whole industry unfortunately. The only protection that should be accorded developers is for their source code. Reverse-engineering is very common. Most cars require a combustion engine (not solar or electric). But some car manufacturers build a sports car like a Porche, others build a reliable family car like a Chevy, and yet others build a funeral-box car like a Yugo (I stay). Some applications are faster and more comfortable to use but accomplish the same tasks as does another vendor's application. The classic example is PKware's archiver versus SEAware's. My last comment concerns the legal community. We are living in a new age, the INFORMATION AGE. Most judges are not technologically competent (having skills in EE and Computer Science). They simply do not have the background to understand these issues. Yet, their decisions will have very profound ramifications upon society. This deficiency is highly disconcerting. What can be done about this situation? I really don't know. Pray, I suppose. Apart from praying, I hope that some of the giants (IBM, INTEL, Chips & Technologies, Microsoft, ATT) will pressure law schools to accept students with backgrounds in these areas and provide scholarships to individuals willing to continue their education in this field. I hope that these companies will also push legislation to increase judges salaries so that they are equitable with those found in industry. Why should anyone work for less than they could get elsewhere? Remember the standing joke is that the biggest division at IBM is the legal division and not the manufacturing division. ------------------------------------------------------------------------------- Returning to the original subject matter dealing with MINIX PATCHES: I confess that I was having difficulty upgrading from MINIX 1.2 to 1.3 using the upgrades found on the net. I found this particularly annoying because I have used patch to upgrade the floppy device driver to handle 3 and 1/2 inch drives and a few other utilities. But I was at a complete loss when applying the diff patches to move from MINIX ver 1.2 to ver 1.3. The following text documents how (and why I chose a particular manner to accomplish this feat) I did it. First, grab the following files from bugs.nosc.mil via ftp: "patch", "d1.1-1.2.tar.Z", and "d1.2-1.3.tar.Z". The following is a log of an ftp session that accomplishes the task at hand. ftp bugs.nosc.mil Name (bugs.nosc.mil:rheffel): anonymous Password (bugs.nosc.mil: anonymous): guest cd pub/Minix/bin type binary get patch cd ../d1.1-1.1 get d1.1-1.2.tar.Z cd ../d1.2-1.3 get d1.2-1.3.tar.Z close quit At this point, you will have copied in binary format 3 files from the remote host. The files are: patch, the upgrade from ver 1.1 to 1.2, and the upgrade from ver 1.2 to 1.3. I strongly recommend that you rename d1.1-1.2.tar.Z to d1112.trz and d1.2-1.3.tar.Z to d1213.trz. Why should you rename the files. Remember that DOS allows only 3 characters for a file's extension. We will use *.trz under DOS as the equivalent of UNIX's *.tar.Z. Somehow, you must transfer the files down to your PC from your local host. The files must be transfered in binary format just as before. I am assuming that you are transferring these files to a PC- DOS partition. Personally, I have not yet tried running kermit under MINIX yet. The file mxkermit.tar.Z is available from bugs.nosc.mil. I have read that the modem handling under MINIX is not quite stable yet so that is the reason I assume that these files are being transferred to a PC-DOS subdirectory. If you have ftp on your PC, you can follow the same sequence as above except for changing directory. If you don't have ftp, you can use KERMIT. By typing "kermit -ix", you will invoke the kermit server on the local host. It will transfer the file images (binary format). Next type "get patch", "get d1112.trz", and "get d1213.trz". At this point, you should now have these 3 files on your PC. But first lets cover the aspect of getting the equivalent files from a different remote host. Note: You can get the equivalent files from vm1.nodak.edu on internet or listserv@ndsuvm1 on BITNET. The major difference is that the files are in ASCII format. If you are dialing in to vm1.nodak.edu, I presume that you are on internet and can get the files. The following is a transcript of such a session. ftp bugs.nosc.mil Name (vm1.nodak.edu:rheffel): anonymous Password (vm1.nodak.edu: anonymous): guest cd MINIX type ascii get commands.patch mget minix.* close quit If you are on an IBM mainframe and are using BITNET, then you may use the following command to retrieve one file at a time. Type "TELL LISTSERV@NDSUVM1 GET MINIX 1112A". Admittedly, this process of asking for one file at a time is painfully slow. If anyone knows of a better method, please let me know. (I assume that REXX could be programmed to expand a wildcard or a script file could be built). Regardless of whether you accessed vm1.nodak.edu or listserv@ndsuvm1, the naming convention on that remote host follows IBM's standard convention. The files are MINIX.1112[A-D], MINIX.1213[A-Z] and MINIX.1213[AA-AE]. The files to upgrade from 1.3 to 1.4 are found as MINIX.1314A-[F1-F2], and MINIX.1314A-[0-9]. After I had copied the files from the remote host to my local host, I renamed the files as follows since DOS allows only 3 characters for the extension. MINIX.1112[A-] was renamed to M1112.[A-], MINIX.1213[A-Z] was changed to M1213.[A-Z], MINIX.1213[AA-AE] was transformed to M1213.[AA-AE]. Do you get the picture. For those of you unfamiliar with this notation, let us take a specific file and show you what was done: MINIX.1213AA was renamed to M1213.AA This renaming scheme will work on both UNIX and IBM systems. Then I downloaded the files to PC-DOS. This method prevented the terminal emulation package from truncating the name to something obscure. Another advantage from this new naming scheme is that it will permit us to write a shell script to UNSHAR the files M1213.[A-W] unattended. ------------------------------------------------------------------------------- You will need to be able to uncompress files that end in *.Z. To do this, you first must compile the compress command. cc -i -o compress compress.c The -i flag must be specified in order for this command to work. Remember that you must always transfer compressed files (ending in *.Z) in binary format. The next step is to transfer the files from your DOS partition to your MINIX partition. The type of file that you downloaded (binary or ASCII format) will determine the switch settings on the dosread command line. If your file is a binary file (file is from bugs.nosc.mil), you will want to type the following: dosread c ver13/d1213.trz > d1213.tar.Z dosread c ver13/patch > patch If your file is an ASCII file, you will want to use the "-a" flag as follows. Notice that I read the file patch from the DOS partition as patchvm onto the MINIX partition. There is a good reason for doing so, but will not be covered now. Please note that I demonstrate how to read in the ASCII files m1213.* in the following command. Do not however type this for each and every file. Use the Ralph Clark's modified script included below to automatically read an entire DOS directory (eg, dosrdall c vm1 [where the files are on c: drive ind subdirectory \vm1]). dosread -a c ver13/m1213.aa > m1213.aa dosread -a c ver13/patch > patchvm If you got your version of patch from vm1.nodak.edu or listserv@ndsuvm1, you will need to do the following after you have read in the file onto MINIX partition. uudecode patchvm compress -d patch.Z As you noticed, the uncompressing of patch.Z created a file called patch. Now you understand why it was desirable to read the file patch from DOS to MINIX as patchvm and not as patch. The above 2 steps are not necessary if you got your version of patch from bugs.nosc.mil. Regardless of where you obtained patch, remember to change its rwx flags so that it is executable. chmod 755 patch I include Ralph Clark's script (which I have modified sligthly) to allow you to read all the files from a PC-DOS subdirectory on a particular drive. Path: cod!nosc!ucsd!ames!amdahl!pyramid!prls!philabs!ttidca!clark From: clark@ttidca.TTI.COM (Ralph Clark) Newsgroups: comp.os.minix Subject: my read-all-from-dos script (version 23) Keywords: dosread Message-ID: <2951@ttidca.TTI.COM> Date: 24 Jul 88 06:45:23 GMT Organization: Citicorp/TTI, Santa Monica Lines: 20 Here's the one I've been using since the first time my fingers got tired of backspacing to put the -a in the right place : ----------------cut me--------------- #/********************************************************************/ #/************ Modified version of Ralph Clark's DOSRDALL ************/ #/******************* modified by Rich Heffel ************************/ #/******************** handles only ASCII files **********************/ #dosrdall - read all files from DOS physical drive to current directory echo "dosrdall [drive [directory]]" getlf "to proceed, press RETURN" for FILE in `dir $1 $2 | grep -v [a-z] | tr[A-Z] [a-z]` do echo $FILE dosread -a $1 $2/$FILE > $FILE done ----------------cut me--------------- The grep -v gets rid of the title and footer from dosdir, which have lower case letters. I wish there were an option in dosread-write-dir to suppress the noise and just give file names. This script needs addition of a parameter to specify a dos subdirectory. Remember to change the rwx flags to execute by typing: chmod 755 dosrdall #Ralph Clark (clark@ttidca.tti.com) {csun|philabs|psivax}!ttidca!clark --- ------------------------------------------------------------------------------- The next major step is to apply the patches. The files from vm1.nodak.edu and listserv@ndsuvm1 are in ASCII format already. The files from bugs.nosc.mil are not and must be uncompressed and extracted from the tape archive. How is this accomplished? As an example, we will take the file d1.2-1.3.tar.Z which we had renamed to d1213.trz previously. First, rename d1213.trz to d1213.tar.Z. mv d1213.trz d1213.tar.Z compress -d d1213.tar.Z This command unpacks (uncompresses) the file. Next, we must extract the files from this newly created tar file. tar vx d1213.tar ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- The file "diff.patch" that was extracted from bugs.nosc.mil's d1213.tar (our renamed file) corresponds to vm1.nodak.edu's and listserv@ndsuvm1's minix.1213[aa-ae] and minix.[x-z]. The question that remains is "How do we apply these patches?" First, we must note that the patch command unfortunately uses the subdirectory /tmp for scratch work and does not allow a flag to specify another directory for scratch use. (The lack of this needed feature is indicative of some of the drawback's of UNIX besides being a classic example of poor programming technique. I confess that I too am guilty of such poor practice.) Unfortunately, running patch requires more than one floppy worth (mkfs /dev/fd0 360) of information. If you are running a RAM DISK that means you probably do not have enough space, and patch will choke. The trick to overcome this is the following: Normally, we mount our hard disk partition with the /usr file system as follows. I will assume that /usr is on /dev/hd4, though this need not be the case. In the file /etc/rc, we have a one-line command that says "/etc/mount /dev/hd4 /usr". Change this one-line command from "/etc/mount /dev/hd4 /usr" to "/etc/mount /dev/hd4 /tmp". This change must be done in the file /etc/rc. After you have applied the patches, you should change it back to its original state. Why must it be done in /etc/rc. Because if you try doing it after you have logged in as "root", you will be notified that /tmp is busy. Now logoff and reboot. When you log in as "root", the file system will be found on /tmp. If you are applying the file "diff.patch" from the tar.Z file from bugs.nosc.mil, all you will need to do is to cd (change dir) to subdirectory where the copy of the original 1.2 distribution is found (usually /usr/minix/commands) and type the following. patch < diff.patch I presume that for those of you who are using vm1 or listserv's patch and files, you would move the files m1213.[x-z] and m1213.[aa-ae] to a newly created directory and cd to that directory. You could then type the following: for i in * do echo $i; patch < $i done ------------------------------------------------------------------------------- Remember to change the file /etc/rc back to its original state and to reboot. Naturally, the next step should be to unshar all the files. This refers to those files found on vm1 and listserv. The simplest way to unshar the files is to write a simple script on the MINIX command line. for i in m1213.* do echo $i; sh < $i done If you have a PC, leave it unattended overnight. If you have an AT or 386 machine, go out to dinner. If you have any suggestions, please send them to me at the following address: rheffel@cs2.wsu.edu
HELMER%SDNET.BITNET@vm1.nodak.edu (Guy Helmer) (05/30/89)
I have a few comments about Rich's comments on upgrading MINIX. Over the past five months, I have upgraded from Minix 1.1 to Minix 1.3. The upgrade from Minix 1.1 to Minix 1.2 is the worst software nightmare I have ever had. The 1.1 shell couldn't handle the shar files and patch (binary from NDSUVM1) couldn't handle the diff files. I spent many hours with BRIEF under PC-DOS extracting files from the shars by hand, and I spent even more quality time changing the diff files so patch could handle them without choking. I don't even remember how I got around the problem of space on the root file system. I do know that after I finally had 1.2 source on my machine, I spent plenty of time watching every little thing compile just in case the 1.1 compiler would abort and leave my file systems in a mess. The neat thing was I had 1.2 up and running, and then I trashed the hard disk and hard to start over from Minix 1.1 on floppies. The upgrade from 1.2 to 1.3 wasn't nearly as painful, and in fact hurt less than a final exam in an upper-level Electrical Engineering course :-). Even though sh would choke with "can't create pipe" after running into the 11th file in a shar and I still had to modify the patch files, the upgrade went much better than the previous upgrade. With the new compiler binaries (again, from NDSUVM1), I now have a working 1.3 system. Good luck to those that are still upgrading. Many thanks go to those who assembled Dr. Tannenbaum's postings into nice "little :-)" packages and put these packages out on the net for the rest of us. Now, to put in Bruce's patches and get a protected, fast-interrupting Minix... -- Guy Helmer BITNET: HELMER@SDNET Dakota State College AT&T: (605) 256-5315 Technical Services, Development Group (605) 256-6411 Madison, SD 57042 Opinions are mine, all mine.
henry@utzoo.uucp (Henry Spencer) (06/01/89)
In article <16461@louie.udel.EDU> rheffel@cs2.wsu.edu writes: > Nevertheless, I am using in a personal capacity Allen Holub's >getargs() routine found in Dr. Dobb's Journal May 1985. I will write >such a routine from scratch at some point with some improvements and >place it in the public domain... You might want to consider that Unix already has a standardized, widely- used option parser, with a public-domain implementation available: getopt. It's not as good in some ways, but programs written using it will be much more portable. -- You *can* understand sendmail, | Henry Spencer at U of Toronto Zoology but it's not worth it. -Collyer| uunet!attcan!utzoo!henry henry@zoo.toronto.edu
paula@bcsaic.UUCP (Paul Allen) (06/01/89)
When I upgraded from 1.1 to 1.3, I used my Sun to apply the patches. With no worries about memory, stack space, disk space or cpu horsepower, the patching went fairly smoothly. Compared to a real Unix environment, Minix is a considerable pain to try to do any real work on. (And applying all those diffs is *real* work. :-) If you are faced with the prospect of upgrading using Minix itself as the development environment, my heart goes out to you! Based on the fact that many posters to this group have reported success, I'm certain that your quest is not hopeless. Many attempted- upgraders have also reported frustration and confusion after spending many hours in the trying. I don't see much joy in your ordeal. Paul Allen -- ------------------------------------------------------------------------ Paul L. Allen | pallen@atc.boeing.com Boeing Advanced Technology Center | ...!uw-beaver!bcsaic!pallen