[comp.sys.amiga] Structure Browser

kim@amdahl.UUCP (Kim DeVaughn) (05/04/87)

[ For all you do ... this line's for you ... ]

I came across this tool on one of the local BBS's over the weekend.  It
was originally published in the Transactor magazine, and from the comments
(in the printed, magazine version), it is freely redistributable.

Since there have been a few utilities posted here recently that "twiddle"
various structures in running applications to modify menus, and such, I
thought y'all might find it useful.

The article in the Transactor has alot of useful supplementary material
as well.  BTW, this magazine is about 80% oriented toward the C-68/128
machines, but the 20% coverage they're devoting to the Amiga truly makes
it worthwhile for Amiga hackers ... very good, *technical* articles, source,
etc. (the current July '87 issue has Bryce Nesbitt's "Pop To Front" program
[in assembler] for the currently active window, for example).  Hi, Bryce,
and thanks!

Anyhow, if you're interested in the Transactor, their addresses are:

U.S.:  Transactor                   Canada:  Transactor
       PO Box 338  Station 'C'               501 Alden Road
       Buffalo, NY  14209-990                PO Box 3250
                                             Markham Industrial Park
                                             Markham, Ontario
                                             L3R 9Z9

Subscriptions are $15 for 6 issues (US or Canadian), and as of the July
issue, will ONLY be available by subscription (pity ... you should see
what the Postal Carrier does to my magazines :-( )!  The Structure Browser
article was in the May 1987 issue, and back issues are available ($4.50),
as are disks.

I know, I know, the above is a bit commercial, but these people are providing
quality information, and seem to be rather "obscure" ... hence, the plug!
(And no, I'm not affiliated with them in any way ... wish they were 80/20 the
other way with their Amiga coverage, though!)

So without further verbosity, here is the Structure Browser (the uuencoded
executable will be along in part 2).  Watch for the .signature at the end ...
if it ain't there, you didn't get everything!

/kim



# This is a shell archive.  Remove anything before this line, then
# unpack it by saving it in a file and typing "sh file".  (Files
# unpacked will be owned by you and have default permissions.)
#
# This archive contains:
# sb.c sb.doc sb.h sb.lnk sbGadget.c sbGraphics.c sbIntuiText.c sbMsgPort.c sbNode.c sbScreen.c sbTextAttr.c sbWindow.c sbio.c

echo x - sb.c
cat > "sb.c" << '//E*O*F sb.c//'
/*	The Transactor Structure Browser (SB) V1.0
 *	From Transactor Magazine, Volume 7, Issue 6
 *
 *	By Nick Sullivan and Chris Zamara (AHA!) (c) 1986
 *
 *	SB displays system structures via pointers found
 *	in other structures. You start from IntuitionBase.
 *
 *	Structures implemented in V1.0:
 *	IntuitionBase, Window, Screen, RastPort, BitMap, Gadget
 *
 *	Usage is through Intuition, clicking on a structure member
 *	names to display info or a new structure.
 *
 *	*****  THIS PROGRAM MAY BE FREELY DISTRIBUTED  *****
 */

/* include not needed for Aztec C using provided makefile */

/* I keep all the files in directory sb on df1:
 * To keep the system happy, I 'ASSIGN SB: DF1:SB' then 'CD SB:'. GG.
 */ 


#include "sb:sb.h"
#define MIN(x,y) ((x)<(y)?(x):(y))
#define FLAGFIELDS 4
extern struct IntuitionBase *IntuitionBase;
extern struct IntuiText ChoiceText[], BackIText;
APTR OpenLibrary ();
int level = 0; /* current level of nesting */
static char textlines[MAXGADG + 1][80];
extern void PrIntuiBase(), HexLine();

void main()
{
int choice = -1;
  SetupGadg();
  OpenStuff(); /* open intuition library & window */
  while (choice) {
    putHeader("Choose a library structure", NULL);
    ChoiceText[0].IText = (UBYTE *)" Intuition       struct Library";
    BackIText.IText = (UBYTE *)"  Quit  Program";
    switch (choice = GetChoice(1)) {
      case 1:
        PrIntuiBase ("The IntuitionBase structure", IntuitionBase);
        break;
    }
  }
  CloseOut();
}


void PrIntuiBase (string, IBase) char *string; struct IntuitionBase *IBase;
{
static struct StructData structdata[] = {
     { "(LibMode",           "struct Library)", 0, SZ(Library) },
     { "(ViewLord",          "struct View)",    0, SZ(View)    },
     { " ActiveWindow",      "struct Window *", 5, PTRSIZE     },
     { " ActiveScreen",      "struct Screen *", 5, PTRSIZE     },
     { " FirstScreen",       "struct Screen *", 5, PTRSIZE     }
  };
int sum, choice = -1;
  level++;
  while (choice) {
    sum = SetOptionText(string, structdata, (APTR)IBase, DATASIZE, 0);
    switch (choice = GetChoice(DATASIZE)) {
      case 3:
        if (IBase->ActiveWindow)
          PrWindow("The currently active window", IBase->ActiveWindow);
        break;
      case 4:
        PrScreen("The currently active screen", IBase->ActiveScreen);
        break;
      case 5:
        PrScreen("The first screen on Intuition's list", IBase->FirstScreen);
        break;
    }
  }
  level--;
}


void put (option, stuff, base, offset)
int option; struct StructData *stuff; char *base; int offset;
{
register long lnum;
register int  inum;
char buf[40];
int i;
  sprintf(textlines[option], "%-16s%-24s", stuff->membername, stuff->membertype);
  switch (stuff->printtype) {
    case 0:			/* don't print anything */
      buf[0] = '\0';
      break;
    case 1:			/* print a long */
      lnum = *(long *)(base + offset);
      sprintf(buf, "$%8lx  %0ld", lnum, lnum);
      break;
    case 2:			/* print an int */
      inum = *(short *)(base + offset);
      sprintf(buf, "$%8x  %10d", inum, inum);
      break;
    case 3:			/* print a byte */
      inum = *(base + offset);
      sprintf(buf, "$%8x  %10d", inum, inum);
      break;
    case 4:			/* print a string */
      if (!(lnum = *(long *)(base + offset) ))
        sprintf(buf, "NULL");
      else {
        for (i = 0; i < 30 && *((char *)lnum + i); i++)
          buf[i + 1] = *((char *)lnum + i);
        buf[0] = buf[i + 1] = '\"';
        buf[i + 2] = '\0';
        if (*((char *)lnum + i))
          strcat(buf, "...");
      }
      break;
    case 5:			/* print a pointer */
      if (!(lnum = *(long *)(base + offset) ))
        sprintf(buf, "NULL");
      else
        sprintf(buf, "$%8lx  %10ld", lnum, lnum);
      break;
    case 11:			/* print a long */
      lnum = *(long *)(base + offset);
      sprintf(buf, "$%8lx  %10lu", lnum, lnum);
      break;
    case 12:			/* print an int */
      inum = *(short *)(base + offset);
      sprintf(buf, "$%8x  %10u", inum, inum);
      break;
    case 13:			/* print a byte */
      inum = *(base + offset);
      sprintf(buf, "$%8x  %10u", inum, inum);
      break;
  }
  strcat(textlines[option], buf);
  ChoiceText[option].IText = (UBYTE *)textlines[option];
}


void FlagPrint(string, names, flags)
char *string, **names; ULONG flags;
{
int i, line, fields = FLAGFIELDS;
char buf[32];
  SetBackText(1); /* 'prev level' */
  for (i = 0; i < 8; i++) {
    strcpy(textlines[i], "-");
    ChoiceText[i].IText = (UBYTE *)textlines[i];
  }
  putHeader(string, NULL);
  for (i = line = 0; i < 32; i++) {
    if ((flags & (1L << i)) && names[i]) {
      sprintf(buf, "%-19s", names[i]);
      strcat(textlines[line], buf);
      if (!--fields) {
        ChoiceText[line].IText = (UBYTE *)textlines[line];
        line++;
        fields = FLAGFIELDS;
      }
    }
  }
  if (fields < FLAGFIELDS)
    ChoiceText[line].IText = (UBYTE *)textlines[line];
  while (GetChoice(line + 1))
    ;
}


void HexDump(string, address, unit, size)
char *address, *string; int unit; long size;
{
int line = 0, c;
char *buf[80];
  BackIText.IText = (UBYTE *)" Exit Hex Dump  ";
  if (size == -1)
    size = 0x7ffff;
  do {
    sprintf(buf, "%s from %lx (%ld)", string, address, address);
    putHeader(buf, NULL);
    if (line == MAXGADG)
      line = 0;
    while (line < MAXGADG && size > 0) {
      HexLine(address, unit, line++, size);
      size -= 16;
      address += 16;
    }
    c = GetChoice(size > 0 ? MAXGADG + 1 : line);
  } while (size > 0 && c == MOREGADG);
}


void HexLine (address, unit, line, size)
UBYTE *address; int unit, line; long size;
{
USHORT i, j;
char buf[80];
static char hexdigit[] = "0123456789ABCDEF";
  sprintf(textlines[line], "-%6lx: ", address);
  for (i = 0; i < MIN(size, 16); i += unit) {
    switch (unit) {
      case BYTESIZE:
        j = *(address + i);
        sprintf(buf, "%c%c ", hexdigit[j / 16], hexdigit[j % 16]);
        break;
      case INTSIZE:
        sprintf(buf, "%04x ", *(short *)(address + i));
        break;
      case PTRSIZE:
        sprintf(buf, "%08lx ", *(long *)(address + i));
        break;
    }
    strcat(textlines[line], buf);
  }
  ChoiceText[line].IText = (UBYTE *)textlines[line];
}


int SetOptionText (hdrtext, data, object, size, offset)
char *hdrtext;
struct StructData *data;
APTR object;
int size, offset;
{
int i, sum;
  SetBackText( offset ? 1 : 0);
  putHeader(hdrtext, object);
  for (i = sum = 0; i < size; i++) {
    put(i, &data[i], object, sum + offset);
    sum += data[i].datasize;
  }
  return (sum + offset);
}
    

void PrString(heading, string) char *heading, *string;
{
char *newstring, *malloc();
  putHeader(heading, NULL);
  newstring = malloc(strlen(string) + 1);
  *newstring = '-';
  strcpy(newstring + 1, string);
  ChoiceText[0].IText = (UBYTE *)newstring;
  GetChoice(1);
  free(newstring);
}
//E*O*F sb.c//

echo x - sb.doc
cat > "sb.doc" << '//E*O*F sb.doc//'
Panorama Librarian:
Please read note at bottom
********************* CUT HERE *********************

Structure Browser

The Transactor, May 1987, Volume 7, Issue 6

There are two changes from the original listings for Lattice C.
One relates to the size of an integer in the defines. The size of an
integer in Aztec is sixteen bits, however, Lattice uses thirty-two.
I changed the define to SHORT.  The other change is in one of the
structure definitions where a BYTESIZE definition needed to be
padded to sixteen bits by calling it INTSIZE for proper alignment
purposes.  These are all the changes I can remember I had to do.

I also have added a few additional structure definitions and will
be adding more as I find spare time.

One thing to remember when traversing linked structures...  the
Amiga is constantly in action and what may have been a valid pointer
when it was displayed but may be pointing to garbage by the time you
actually look at the data it was pointing to.

Anybody interested in looking at the nitty-gritties of the system
should find this program interesting and possibly even enlightening.

Please buy a copy of the magazine to help support the publishing of
additional excellent programs like this one.  There are also two
other Amiga articles in the same issue.  The first gives some insight
into the infamous GURU messages and the other describes Amiga file
structures.

********************** CUT HERE ***********************

Panorama Librarian: Please confirm we can release this
without violating any copyright notices.

The fine print on page 2 states...

     "All material is copyright by Transactor Publications
      Inc.  Reproduction in any form without permission is
      in violation of applicable laws."
//E*O*F sb.doc//

echo x - sb.h
cat > "sb.h" << '//E*O*F sb.h//'
/* Lattice C Ver 3.1 */

#include <intuition/intuition.h>
#include <intuition/intuitionbase.h>
#include <stdlib.h>
#include <stdio.h>

#define SZ(x)		sizeof(struct x)
#define DATASIZE	( sizeof(structdata) / sizeof(struct StructData) )
#define PTRSIZE		sizeof(APTR)

/* for Aztec C make the following 'sizeof(int)' */
#define INTSIZE		sizeof(short)

#define BYTESIZE	sizeof(char)
#define MAXGADG		16
#define MOREGADG	25 /* id of "more" gadget */

struct StructData {
			char *membername;
			char *membertype;
			int  printtype;
			int datasize;
		  };
//E*O*F sb.h//

echo x - sb.lnk
cat > "sb.lnk" << '//E*O*F sb.lnk//'
FROM	LIB:c.o+
	sb.o+
	sbGadget.o+
	sbGraphics.o+
	sbio.o+
	sbScreen.o+
	sbWindow.o+
        sbIntuiText.o+
        sbTextAttr.o+
	sbMsgPort.o+
	sbNode.o
TO	sb
LIB	LIB:lc.lib+
	LIB:amiga.lib
MAP	sb.map
//E*O*F sb.lnk//

echo x - sbGadget.c
cat > "sbGadget.c" << '//E*O*F sbGadget.c//'
/* include not needed for Aztec C using provided makefile */
#include "sb:sb.h"
extern int level;


void PrGadget(string, gadget) char *string; struct Gadget *gadget;
{
static struct StructData structdata[] = {
     { " NextGadget",   "struct Gadget *",     5, PTRSIZE },
     { "-LeftEdge",     "SHORT",               2, INTSIZE },
     { "-TopEdge",      "SHORT",               2, INTSIZE },
     { "-Width",        "SHORT",               2, INTSIZE },
     { "-Height",       "SHORT",               2, INTSIZE },
     { " Flags",        "USHORT",             12, INTSIZE },
     { " Activation",   "USHORT",             12, INTSIZE },
     { " GadgetType",   "USHORT",             12, INTSIZE },
     { "(GadgetRender", "APTR)",               5, PTRSIZE },
     { "(SelectRender", "APTR)",               5, PTRSIZE },
     { " GadgetText",   "struct IntuiText *",  5, PTRSIZE },
     { "-MutualExclude","LONG",                1, PTRSIZE },
     { "(SpecialInfo",  "APTR)",               5, PTRSIZE },
     { "-GadgetID",     "USHORT",             12, INTSIZE },
     { "-UserData",     "APTR",                5, PTRSIZE }
  };
static char *flagnames[16] = {
     "GADGHBOX",       "GADGHIMAGE",    "GADGIMAGE",      "GRELBOTTOM",
     "GRELRIGHT",      "GRELWIDTH",     "GRELHEIGHT",     "SELECTED",
     "GADGDISABLED"
  };
static char *activatenames[16] = {
     "RELVERIFY",      "GADGIMMEDIATE", "ENDGADGET",      "FOLLOWMOUSE",
     "RIGHTBORDER",    "LEFTBORDER",    "TOPBORDER",      "BOTTOMBORDER",
     "TOGGLESELECT",   "STRINGCENTER",  "STRINGRIGHT",    "LONGINT",
     "ALTKEYMAP",      "BOOLEXTEND"
  };
static char *systypenames[16] = {
     "SIZING",         "WDRAGGING",     "SDRAGGING",      "WUPFRONT",
     "SUPFRONT",       "WDOWNBACK",     "SDOWNBACK",      "CLOSE",
     NULL,             NULL,            NULL,             NULL,
     "REQGADGET",      "GZZGADGET",     "SCRGADGET",      "SYSGADET"
  };
static char *applitypenames[16] = {
     "BOOLGADGET",     "GADGET0002",    "PROPGADGET",     "STRGADGET",
     NULL,             NULL,            NULL,             NULL,
     NULL,             NULL,            NULL,             NULL,
     "REQGADGET",      "GZZGADGET",     "SCRGADGET",      "SYSGADGET"
  };
int sum, choice = -1;
USHORT bits;
  level++;
  while (choice) {
    sum = SetOptionText(string, structdata,
                        (APTR)gadget, DATASIZE, 0);
    switch (choice = GetChoice(DATASIZE)) {
      case 1:
        if (gadget->NextGadget)
          PrGadget("The next gadget in Intuition's list", gadget->NextGadget);
        break;
      case 6:
        bits = gadget->Flags;
        switch (bits & GADGHIGHBITS) {
          case 0:
            flagnames[0] = "GADGHCOMP";
            bits |= 0x01;
            break;
          case 1:
            flagnames[0] = "GADGHBOX";
            break;
          case 2:
            flagnames[1] = "GADGHIMAGE";
            break;
          case 3:
            flagnames[1] = "GADGHNONE";
            bits ^= 0x01;
            break;
        }
        FlagPrint("Flags set for this gadget", flagnames, (ULONG)bits);
        break;
      case 7:
        FlagPrint("Activation flags set for this gadget",
                  activatenames, (ULONG)gadget->Activation);
        break;
      case 8:
        bits = gadget->GadgetType;
        if (bits & SYSGADGET) {
          bits = (bits & 0xff00) | (1 << (((bits & 0xf0) >> 4) - 1));
          FlagPrint("Gadget type flags set for this gadget",
                systypenames, (ULONG)bits);
        }
        else {
          bits = (bits & 0xff00) | (1 << ((bits & 0x0f) - 1));
          FlagPrint("Gadget type flags set for this gadget",
                applitypenames, (ULONG)bits);
        }
        break;
      case 11:
        if (gadget->GadgetText)
          PrIntuiText("The gadget's first text (IntuiText structure)",
                      gadget->GadgetText);
        break;
    }
  }
  level--;
}
//E*O*F sbGadget.c//

echo x - sbGraphics.c
cat > "sbGraphics.c" << '//E*O*F sbGraphics.c//'
/* include not needed for Aztec C using provided makefile */
#include "sb:sb.h"
extern int level;
extern void PrPlanes(), PrRastPort2();


void PrBitMap(string, bitmap) char *string; struct BitMap *bitmap;
{
static struct StructData structdata[] = {
     { "-BytesPerRow", "UWORD",   12, INTSIZE    },
     { "-Rows",        "UWORD",   12, INTSIZE    },
     { "-Flags",       "UBYTE",   13, BYTESIZE   },
     { "-Depth",       "UBYTE",   13, BYTESIZE   },
     { "-Pad",         "UWORD",   12, INTSIZE    },
     { " Planes[8]",   "PLANEPTR", 5, PTRSIZE * 8}
  };
int sum, choice = -1;
  level++;
  while (choice) {
    sum = SetOptionText(string, structdata,
                         (APTR)bitmap, DATASIZE, 0);
    if ((choice = GetChoice(DATASIZE)) == 6)
      PrPlanes("BitPlanes belong to the BitMap", bitmap->Planes,
               bitmap->Rows, bitmap->BytesPerRow);
  }
  level--;
}


void PrPlanes(string, planes, rows, bytes)
char *string; PLANEPTR planes[]; UWORD rows, bytes;
{
static struct StructData structdata[] = {
     {" BitPlabe[0]",   "PLANEPTR", 5, PTRSIZE },
     {" BitPlabe[1]",   "PLANEPTR", 5, PTRSIZE },
     {" BitPlabe[2]",   "PLANEPTR", 5, PTRSIZE },
     {" BitPlabe[3]",   "PLANEPTR", 5, PTRSIZE },
     {" BitPlabe[4]",   "PLANEPTR", 5, PTRSIZE },
     {" BitPlabe[5]",   "PLANEPTR", 5, PTRSIZE },
     {" BitPlabe[6]",   "PLANEPTR", 5, PTRSIZE },
     {" BitPlabe[7]",   "PLANEPTR", 5, PTRSIZE }
  };
int sum, choice = -1;
  level++;
  while (choice) {
    sum = SetOptionText(string, structdata,
                        (APTR)planes, DATASIZE, 0);
    choice = GetChoice(8);
    if (choice >= 1 && choice <= 8 && planes[choice - 1])
      HexDump(structdata[choice - 1].membername,
              planes[choice - 1], PTRSIZE, (long)(rows * bytes));
  }
  level--;
}


void PrRastPort(string, rastport) char *string; struct RastPort *rastport;
{
static struct StructData structdata[] = {
     { "(Layer",      "struct Layer *)",     5, PTRSIZE  },
     { " BitMap",     "struct BitMap *",     5, PTRSIZE  },
     { "-Area Ptrn",  "USHORT *",            5, PTRSIZE  },
     { "(TmpRas",     "struct TmpRas *)",    5, PTRSIZE  },
     { "(AreaInfo",   "struct AreaInfo *)",  5, PTRSIZE  },
     { "(GelsInfo",   "struct GelsInfo *)",  5, PTRSIZE  },
     { "-Mask",       "UBYTE",              13, BYTESIZE },
     { "-FgPen",      "BYTE",                3, BYTESIZE },
     { "-BgPen",      "BYTE",                3, BYTESIZE },
     { "-AOlPen",     "BYTE",                3, BYTESIZE },
     { "-DrawMode",   "BYTE",                3, BYTESIZE },
     { "-AreaPtSize", "BYTE",                3, BYTESIZE },
     { "-linpatcnt",  "BYTE",                3, BYTESIZE },
     { "-dummy",      "BYTE",                3, BYTESIZE },
     { "(Flags",      "USHORT",             12, INTSIZE  },
     { "-LinePtrn",   "USHORT",             12, INTSIZE  }
  };
int sum, choice = -1;
  level++;
  while (choice) {
    sum = SetOptionText(string, structdata,
                        (APTR)rastport, DATASIZE, 0);
    switch (choice = GetChoice(MAXGADG + 1)) {
      case 2:
        if (rastport->BitMap)
          PrBitMap("The BitMap for the RastPort", rastport->BitMap);
        break;
      case MOREGADG:
        PrRastPort2("More RastPort members", rastport, sum);
        break;
    }
  }
  level--;
}


void PrRastPort2(string, rastport, offset)
char *string; struct RastPort *rastport; int offset;
{
static struct StructData structdata[] = {
     {"-cp_x",            "SHORT",             2, INTSIZE     },
     {"-cp_y",            "SHORT",             2, INTSIZE     },
     {" minterms[8]",     "UBYTE",             0, BYTESIZE * 8},
     {"-PenWidth",        "SHORT",             2, INTSIZE     },
     {"-PenHeight",       "SHORT",             2, INTSIZE     },
     {"(TextFont",        "struct Font *)",    5, PTRSIZE     },
     {"-AlgoStyle",       "UBYTE",            13, BYTESIZE    },
     {"(TxFlags",         "UBYTE",            13, BYTESIZE    },
     {"-TxHeight",        "UWORD",            12, INTSIZE     },
     {"-TxWidth",         "UWORD",            12, INTSIZE     },
     {"-TxBaseLine",      "UWORD",            12, INTSIZE     },
     {"-TxSpacing",       "WORD",              2, INTSIZE     },
     {"-RP_User",         "WORD",              2, INTSIZE     },
     {" wordreserved[7]", "UWORD",             0, INTSIZE * 7 },
     {" longreserved[2]", "ULONG",             0, PTRSIZE * 2 },
     {" reserved[8]",     "UBYTE",             0, BYTESIZE * 8}
  };
int sum, choice = -1;
  level++;
  while (choice) {
    sum = SetOptionText(string, structdata,
                        (APTR)rastport, DATASIZE, offset);
    switch (choice = GetChoice(DATASIZE)) {
      case 3:
        HexDump("Hexdump of RastPort minterms bytes",
                &rastport->minterms[0], BYTESIZE, (long)BYTESIZE * 8);
        break;
      case 14:
        HexDump("Hexdump of reserved RastPort words",
                &rastport->wordreserved[0], INTSIZE, (long)INTSIZE * 7);
        break;
      case 15:
        HexDump("Hexdump of reserved RastPort longwords",
                &rastport->longreserved[0], PTRSIZE, (long)PTRSIZE * 2);
        break;
      case 16:
        HexDump("Hexdump of reserved RastPort bytes",
                &rastport->reserved[0], BYTESIZE, (long)BYTESIZE * 8);
        break;
    }
  }
  level--;
}
//E*O*F sbGraphics.c//

echo x - sbIntuiText.c
cat > "sbIntuiText.c" << '//E*O*F sbIntuiText.c//'
/* module written by G. Gagnon, Mar 24, 1987 */

#include "sb:sb.h"

extern int level;


void PrIntuiText(string, intuitext) char *string; struct IntuiText *intuitext;
{
static struct StructData structdata[] = {
     { "-FrontPen",     "UBYTE",                     3, BYTESIZE },
     { "-BackPen",      "UBYTE",                     3, BYTESIZE },
     { "-DrawMode",     "UBYTE",                     3, INTSIZE  },
     { "-LeftEdge",     "SHORT",                     2, INTSIZE  },
     { "-TopEdge",      "SHORT",                     2, INTSIZE  },
     { " ITextFont",    "struct TextAttr *",         5, PTRSIZE  },
     { " IText",        "UBYTE *",                   4, PTRSIZE  },
     { " NextText",     "struct IntuiText *",        5, PTRSIZE  }
  };
int sum, choice = -1;
  level++;
  while (choice) {
    sum = SetOptionText(string, structdata, (APTR)intuitext, DATASIZE, 0);
    switch (choice = GetChoice(DATASIZE)) {
      case 6:
        if (intuitext->ITextFont)
          PrTextAttr("Structure TextAttr",intuitext->ITextFont);
          break;
      case 7:
        PrString("The text pointed to by IText", intuitext->IText);
        break;
      case 8:
        if (intuitext->NextText)
          PrIntuiText("The next IntuiText in Intuition's list",
                      intuitext->NextText);
        break;
    }
  }
  level--;
}
//E*O*F sbIntuiText.c//

echo x - sbMsgPort.c
cat > "sbMsgPort.c" << '//E*O*F sbMsgPort.c//'
/* module written by G. Gagnon, Mar 24, 1987 */

#include "sb:sb.h"

extern int level;


void PrMsgPort(string, msgport) char *string; struct MsgPort *msgport;
{
static struct StructData structdata[] = {
     { "-mp_Node",         "Node structure",    0, 0        },
     { "   .ln_Succ",      "struct Node *",     5, PTRSIZE  },
     { "   .ln_Pred",      "struct Node *",     5, PTRSIZE  },
     { "-  .ln_Type",      "UBYTE",            13, BYTESIZE },
     { "-  .ln_Pri",       "BYTE",              3, BYTESIZE },
     { "   .ln_Name",      "CHAR *",            4, PTRSIZE  },
     { "-mp_Flags",        "UBYTE",            13, BYTESIZE },
     { "-mp_SigBit",       "UBYTE",            13, BYTESIZE },
     { "(mp_SigTask",      "struct Task *)",    5, PTRSIZE  },
     { "-mp_MsgList",      "List structure",    0, 0        },
     { "   .lh_Head",      "struct Node *",     5, PTRSIZE  },
     { "   .lh_Tail",      "struct Node *",     5, PTRSIZE  },
     { "   .lh_TailPred",  "struct Node *",     5, PTRSIZE  },
     { "-  .lh_Type",      "UBYTE",            13, BYTESIZE },
     { "-  .l_pad",        "UBYTE",            13, BYTESIZE }
  };
int sum, choice = -1;
  level++;
  while (choice) {
    sum = SetOptionText(string, structdata, (APTR)msgport, DATASIZE, 0);
    switch (choice = GetChoice(DATASIZE)) {
      case 2:
        if (msgport->mp_Node.ln_Succ)
          PrNode("MsgPort->mp_Node.ln_Succ", msgport->mp_Node.ln_Succ);
        break;
      case 3:
        if (msgport->mp_Node.ln_Pred)
          PrNode("MsgPort->mp_Node.ln_Pred", msgport->mp_Node.ln_Pred);
        break;
      case 6:
        PrString("mp_Node->ln_Name",msgport->mp_Node.ln_Name);
        break;
      case 11:
        if (msgport->mp_MsgList.lh_Head)
          PrNode("MsgPort->mp_MsgList.lh_Head", msgport->mp_MsgList.lh_Head);
        break;
      case 12:
        if (msgport->mp_MsgList.lh_Tail)
          PrNode("MsgPort->mp_MsgList.lh_Tail", msgport->mp_MsgList.lh_Tail);
        break;
      case 13:
        if (msgport->mp_MsgList.lh_TailPred)
          PrNode("MsgPort->mp_MsgList.lh_TailPred", msgport->mp_MsgList.lh_TailPred);
        break;
    }
  }
  level--;
}


//E*O*F sbMsgPort.c//

echo x - sbNode.c
cat > "sbNode.c" << '//E*O*F sbNode.c//'
/* module written by G. Gagnon, Mar 24, 1987 */

#include "sb:sb.h"

extern int level;


void PrNode(string, node) char *string; struct Node *node;
{
static struct StructData structdata[] = {
     { " ln_Succ",      "struct Node *",           5, PTRSIZE  },
     { " ln_Pred",      "struct Node *",           5, PTRSIZE  },
     { "-ln_Type",      "UBYTE",                   4, BYTESIZE },
     { "-ln_Pri",       "BYTE",                    3, BYTESIZE },
     { " ln_Name",      "UBYTE *",                 4, PTRSIZE  }
  };
int sum, choice = -1;
  level++;
  while (choice) {
    sum = SetOptionText(string, structdata, (APTR)node, DATASIZE, 0);
    switch (choice = GetChoice(DATASIZE)) {
      case 1:
        if (node->ln_Succ)
          PrNode("Node->ln_Succ", node->ln_Succ);
          break;
      case 2:
        if (node->ln_Pred)
          PrNode("Node->ln_Pred", node->ln_Pred);
          break;
      case 5:
        PrString("ln_Name",node->ln_Name);
        break;
    }
  }
  level--;
}


//E*O*F sbNode.c//

echo x - sbScreen.c
cat > "sbScreen.c" << '//E*O*F sbScreen.c//'
/* include not needed for Aztec C using provided makefile */
#include "sb:sb.h"
extern int level;
extern void PrScreen2(); 

void PrScreen(string, screen) char *string; struct Screen *screen;
{
static struct StructData structdata[] = {
     { " NextScreen",   "struct Screen *",     5, PTRSIZE    },
     { " FirstWindow",  "struct Window *",     5, PTRSIZE    },
     { "-LeftEdge",     "SHORT",               2, INTSIZE    },
     { "-TopEdge",      "SHORT",               2, INTSIZE    },
     { "-Width",        "SHORT",               2, INTSIZE    },
     { "-Height",       "SHORT",               2, INTSIZE    },
     { "-MouseY",       "SHORT",               2, INTSIZE    },
     { "-MouseX",       "SHORT",               2, INTSIZE    },
     { " Flags",        "USHORT",             12, INTSIZE    },
     { " Title",        "UBYTE *",             4, PTRSIZE    },
     { " DefaultTitle", "UBYTE *",             4, PTRSIZE    },
     { "-BarHeight",    "BYTE",                3, BYTESIZE   },
     { "-BarVBorder",   "BYTE",                3, BYTESIZE   },
     { "-BarHBorder",   "BYTE",                3, BYTESIZE   },
     { "-MenuVBorder",  "BYTE",                3, BYTESIZE   },
     { "-MenuHBorder",  "BYTE",                3, BYTESIZE   }
  };
static char *flagnames[8] = {
    "WBENCHSCREEN",    "CUSTOMSCREEN",  NULL,             NULL,
    "SHOWTITLE",       "BEEPING",       "CUSTOMBITMAP",   NULL
  };
int sum, choice = -1;
ULONG bits;
  level++;
  while (choice) {
  sum = SetOptionText(string, structdata,
                      (APTR)screen, DATASIZE, 0);
  switch (choice = GetChoice(MAXGADG + 1)) {
    case 1:
      if (screen->NextScreen)
        PrScreen("The next screen in Intuition's list", screen->NextScreen);
      break;
    case 2:
      if (screen->FirstWindow)
        PrWindow("The screen's first window", screen->FirstWindow);
      break;
    case 9:
      if ((bits = screen->Flags) & 2)
        bits ^= 1;
      FlagPrint("The screen's flags", flagnames, bits);
      break;
    case 10:
      PrString("The Screen's Title", screen->Title);
      break;
    case 11:
      PrString("The Screen's Default Title", screen->DefaultTitle);
      break;
    case MOREGADG:
      PrScreen2("Screen members (page 2)", screen, sum);
      break;
    }
  }
  level--;
}


void PrScreen2(string, screen, offset)
char *string; struct Screen *screen; int offset;
{
static struct StructData structdata[] = {
     { "-WBorTop",      "BYTE",                 3, BYTESIZE      },
     { "-WBorLeft",     "BYTE",                 3, BYTESIZE      },
     { "-WBorLeft",     "BYTE",                 3, BYTESIZE      },
     { "-WBorBottom",   "BYTE",                 3, INTSIZE       },
     { " Font",         "struct TextAttr *",    5, PTRSIZE       },
     { "(ViewPort",     "struct ViewPort)",     0, SZ(ViewPort)  },
     { " RastPort",     "struct RastPort ",     0, SZ(RastPort)  },
     { " BitMap",       "struct BitMap",        0, SZ(BitMap)    },
     { "(LayerInfo",    "struct Layer_Info)",   0, SZ(Layer_Info)},
     { " FirstGadget",  "struct Gadget *",      5, PTRSIZE       },
     { "-DetailPen",    "UBYTE",               13, BYTESIZE      },
     { "-BlockPen",     "UBYTE",               13, BYTESIZE      },
     { "-SaveColor0",   "USHORT",              12, INTSIZE       },
     { "(BarLayer",     "struct Layer *)",      5, PTRSIZE       },
     { "(ExtData",      "UBYTE *)",             5, PTRSIZE       },
     { "(UserData",     "UBYTE *)",             5, PTRSIZE       },
  };
int sum, choice = -1;
  level++;
  while (choice) {
    sum = SetOptionText(string, structdata, (APTR)screen, DATASIZE, offset);
    switch (choice = GetChoice(DATASIZE)) {
      case 5:
        if (screen->Font)
          PrTextAttr("Structure TextAttr",screen->Font);
        break;
      case 7:
        PrRastPort("The screen's RastPort", &screen->RastPort);
        break;
      case 8:
        PrBitMap("The screen's BitMap", &screen->BitMap);
        break;
      case 10:
        if (screen->FirstGadget)
          PrGadget("The screen's first gadget", screen->FirstGadget);
        break;
    }
  }
  level--;
}
//E*O*F sbScreen.c//

echo x - sbTextAttr.c
cat > "sbTextAttr.c" << '//E*O*F sbTextAttr.c//'
/* module written by G. Gagnon, Mar 24, 1987 */

#include "sb:sb.h"

extern int level;


void PrTextAttr(string, textattr) char *string; struct TextAttr *textattr;
{
static struct StructData structdata[] = {
     { " ta_Name",      "UBYTE *",                   4, PTRSIZE  },
     { "-ta_YSize",     "UWORD",                     2, INTSIZE  },
     { "-ta_Style",     "UBYTE",                     3, BYTESIZE },
     { "-ta_Flags",     "UBYTE",                     3, BYTESIZE }
  };
int sum, choice = -1;
  level++;
  while (choice) {
    sum = SetOptionText(string, structdata, (APTR)textattr, DATASIZE, 0);
    switch (choice = GetChoice(DATASIZE)) {
      case 1:
        PrString("ta_Name",textattr->ta_Name);
        break;
    }
  }
  level--;
}

//E*O*F sbTextAttr.c//

echo x - sbWindow.c
cat > "sbWindow.c" << '//E*O*F sbWindow.c//'
/* include not needed for Aztec C using provided makefile */
#include "sb:sb.h"
extern int level;
extern void PrWindow2(), PrWindow3();


void PrWindow(string, window) char *string; struct Window *window;
{
static struct StructData structdata[] = {
     { " NextWindow",   "struct Window *",     5, PTRSIZE },
     { "-LeftEdge",     "SHORT",               2, INTSIZE },
     { "-TopEdge",      "SHORT",               2, INTSIZE },
     { "-Width",        "SHORT",               2, INTSIZE },
     { "-Height",       "SHORT",               2, INTSIZE },
     { "-MouseY",       "SHORT",               2, INTSIZE },
     { "-MouseX",       "SHORT",               2, INTSIZE },
     { "-MinWidth",     "SHORT",               2, INTSIZE },
     { "-MinHeight",    "SHORT",               2, INTSIZE },
     { "-MaxWidth",     "SHORT",               2, INTSIZE },
     { "-MaxHeight",    "SHORT",               2, INTSIZE },
     { " Flags",        "ULONG",              11, PTRSIZE },
     { "(MenuStrip",    "struct Menu *)",      5, PTRSIZE },
     { " Title",        "UBYTE *",             4, PTRSIZE },
     { "(FirstRequest", "struct Requester *)", 5, PTRSIZE },
     { "(DMRequest",    "struct Requester *)", 5, PTRSIZE }
  };
static char *flagnames[32] = {
     "WINDOWSIZING",    "WINDOWDRAG",   "WINDOWDEPTH",    "WINDOWCLOSE",
     "SIZEBRIGHT",      "SIZEBOTTOM",   "SIMPLE_REFRESH", "OTHER_REFRESH",
     "BACKDROP",        "REPORTMOUSE",  "GIMMEZEROZERO",  "BORDERLESS",
     "ACTIVATE",        "WINDOWACTIVE", "INREQUEST",      "MENUSTATE",
     "RMBTRAP",         "NOCAREREFRESH", NULL,            NULL,
     NULL,              NULL,            NULL,            NULL,
     "WINDOWREFRESH",   "WBENCHWINDOW",  "WINDOWTICKED"
  };
int sum, choice = -1;
ULONG bits;
  level++;
  while (choice) {
    sum = SetOptionText(string, structdata, (APTR)window, DATASIZE, 0);
    switch (choice = GetChoice(MAXGADG + 1)) {
      case 1:
        if (window->NextWindow)
          PrWindow("The next window in Intuition's list", window->NextWindow);
        break;
      case 12:
        bits = window->Flags & ~SUPER_UNUSED;
        switch ((bits & REFRESHBITS) >> 6) {
          case 0:
            flagnames[6] = "SMART_REFRESH";
            bits |= 0x40;
            break;
          case 1:
            flagnames[6] = "SIMPLE_REFRESH";
            break;
          case 2:
            flagnames[7] = "SUPER_BITMAP";
            break;
          case 3:
            flagnames[7] = "OTHER_REFRESH";
            bits ^= 0x40;
            break;
        }
        FlagPrint("Flags set in this window", flagnames, bits);
        break;
      case 14:
        PrString("The Window's Title", window->Title);
        break;
      case MOREGADG:
        PrWindow2("Window menbers (page 2)", window, sum);
        break;
    }
  }
  level--;
}


void PrWindow2(string, window, offset)
char *string; struct Window *window; int offset;
{
static struct StructData structdata[] = {
     { "-ReqCount",     "SHORT",               2, INTSIZE  },
     { " WScreen",      "struct Screen *",     5, PTRSIZE  },
     { " RPort",        "struct RastPort *",   5, PTRSIZE  },
     { "-BorderLeft",   "BYTE",                3, BYTESIZE },
     { "-BorderTop",    "BYTE",                3, BYTESIZE },
     { "-BorderRight",  "BYTE",                3, BYTESIZE },
     { "-BorderBottom", "BYTE",                3, BYTESIZE },
     { " BorderRPort",  "struct RastPort *",   5, PTRSIZE  },
     { " FirstGadget",  "struct Gadget *",     5, PTRSIZE  },
     { " Parent",       "struct Window *",     5, PTRSIZE  },
     { " Descendant",   "struct Window *",     5, PTRSIZE  },
     { "(Pointer",      "USHORT *",            5, PTRSIZE  },
     { "-PtrHeight",    "BYTE",                3, BYTESIZE },
     { "-PtrWidth",     "BYTE",                3, BYTESIZE },
     { "-XOffset",      "BYTE",                3, BYTESIZE },
     { "-YOffset",      "BYTE",                3, BYTESIZE }
  };
int sum, choice = -1;
  level++;
  while (choice) {
    sum = SetOptionText(string, structdata, (APTR)window, DATASIZE, offset);
    switch (choice = GetChoice(MAXGADG + 1)) {
      case 2:
        if (window->WScreen)
          PrScreen("The screen referenced in the window structure",
             window->WScreen);
        break;
      case 3:
        if (window->RPort)
          PrRastPort("The window's RPort (RastPort)", window->RPort);
        break;
      case 8:
        if (window->BorderRPort)
          PrRastPort("The window's BorderRPort", window->BorderRPort);
        break;
      case 9:
        if (window->FirstGadget)
          PrGadget("The window's first gadget", window->FirstGadget);
        break;
      case 12:
        printf("Sorry, selection not implemented\n\n");
        break;
      case 10:
        if (window->Parent)
          PrWindow("The 'parent' window", window->Parent);
        break;
      case 11:
        if (window->Descendant)
          PrWindow("The 'descendent' window", window->Descendant);
        break;
      case MOREGADG:
        PrWindow3("Window members (page 3)", window, sum);
        break;
    }
  }
  level--;
}


void PrWindow3(string, window, offset)
char *string; struct Window *window; int offset;
{
static struct StructData structdata[] = {
     { " IDCMPFlags",   "ULONG",                  1, PTRSIZE  },
     { " UserPort",     "struct MsgPort *",       5, PTRSIZE  },
     { " WindowPort",   "struct MsgPort *",       5, PTRSIZE  },
     { "(MessageKey",   "struct IntuiMessage *)", 5, PTRSIZE  },
     { "-DetailPen",    "UBYTE",                 13, BYTESIZE },
     { "-BlockPen",     "UBYTE",                 13, BYTESIZE },
     { "(CheckMark",    "struct Image *)",        5, PTRSIZE  },
     { " ScreenTitle",  "UBYTE",                  4, PTRSIZE  },
     { "-GZZMouseX",    "SHORT",                  2, INTSIZE  },
     { "-GZZMouseY",    "SHORT",                  2, INTSIZE  },
     { "-GZZWidth",     "SHORT",                  2, INTSIZE  },
     { "-GZZHeight",    "SHORT",                  2, INTSIZE  },
     { "(ExtData",      "UBYTE *)",               5, PTRSIZE  },
     { "(UserData",     "BYTE *)",                5, PTRSIZE  },
     { "(WLayer",       "struct Layer *)",        5, PTRSIZE  }
  };
static char *IDCMPnames[32] = {
     "SIZEVERIFY",     "NEWSIZE",       "REFRESHWINDOW",  "MOUSEBUTTONS",
     "MOUSEMOVE",      "GADGETDOWN",    "GADGETUP",       "REQSET",
     "MENUPICK",       "CLOSEWINDOW",   "RAWKEY",         "REQVERIFY",
     "REQCLEAR",       "MENUVERIFY",    "NEWPREFS",       "DISKINSERTED",
     "DISKREMOVED",    "WBENCHMESSAGE", "ACTIVATEWINDOW", "INACTIVEWINDOW",
     "DELTAMOVE",      "VANILLAKEY",    "INTUITICKS",     NULL,
     NULL,             NULL,            NULL,             NULL,
     NULL,             NULL,            NULL,             "LONELYMESSAGE"
  };
int sum, choice = -1;
  level++;
  while (choice) {
    sum = SetOptionText(string, structdata, (APTR)window, DATASIZE, offset);
    switch (choice = GetChoice(DATASIZE)) {
      case 1:
        FlagPrint("IDCMP flags set in this window",
              IDCMPnames, window->IDCMPFlags);
        break;
      case 2:
        if (window->UserPort)
          PrMsgPort("Window->UserPort",window->UserPort);
        break;
      case 3:
        if (window->WindowPort)
          PrMsgPort("Window->WindowPort",window->WindowPort);
        break;
      case 8:
        PrString("The screen title when this window is activated",
                 window->ScreenTitle);
        break;
    }
  }
  level--;
}
//E*O*F sbWindow.c//

echo x - sbio.c
cat > "sbio.c" << '//E*O*F sbio.c//'
/* include not needed for Aztec C using provided makefile */
#include	"sb:sb.h"

#define		CHOICEWIDTH 280
#define		CHOICEHEIGHT 8
#define		SPACING 9
#define		TOPGADG 30
#define		PUTTEXT(text, x, y) { Move(rp, (long)x, (long)y); \
                	              Text(rp, text, (long)strlen(text)); }
struct	IntuitionBase 	*IntuitionBase = NULL;
struct	GfxBase		*GfxBase = NULL;
struct	Window 		*OpenWindow(), *MainWindow = NULL;
struct	RastPort 	*rp;
extern	int 		level;
APTR	OpenLibrary();
struct	IntuiText 	ChoiceText[MAXGADG + 1];
struct	Gadget 		ChoiceGadg[MAXGADG + 1];
extern	void 		CloseOut(), Redisplay();

struct IntuiText BackIText = {
        3, 2, JAM2,
        5, 2,
        NULL, NULL, NULL
    };
struct IntuiText MoreIText = {
        2, 3, JAM2,
        5, 2,
        NULL,
        (UBYTE *)"(MORE)",
        NULL
    };
struct Gadget BackGadg = {
        NULL,
        10, -12, 140, 12,
        GADGHCOMP | GRELBOTTOM,
        RELVERIFY,
        BOOLGADGET,
        NULL, NULL, &BackIText,
        NULL, NULL,
        0, NULL /* gadget ID is zero */
    };
struct Gadget MoreGadg = {
        NULL,
        300, -12, 59, 12,
        GADGHCOMP | GRELBOTTOM,
        RELVERIFY,
        BOOLGADGET,
        NULL, NULL, &MoreIText,
        NULL, NULL,
        MOREGADG, NULL
    };
struct NewWindow NWindow = {
        0, 10, 640, 189,        /* left, top, width, height */
        -1, -1,                 /* use screen colours */
        GADGETUP                /* IDCMP flags */
         | CLOSEWINDOW,
        WINDOWDEPTH             /* window flags */
         | WINDOWCLOSE
         | WINDOWDRAG
         | RMBTRAP
         | ACTIVATE
         | NOCAREREFRESH
         | SMART_REFRESH,
        &BackGadg,              /* first gadget in list */
        NULL,
        (UBYTE *)"The Transactor Structure Browser V 1.0",
        NULL, NULL,
        0, 0, 0, 0,             /* sizing limits (non-resizable) */
        WBENCHSCREEN
    };


void SetupGadg()
{
int i;
  for (i = 0; i < MAXGADG; i++) {
    ChoiceText[i].BackPen     = 0;
    ChoiceText[i].DrawMode    = JAM2;
    ChoiceText[i].LeftEdge    = 0;
    ChoiceText[i].TopEdge     = 0;
    ChoiceText[i].ITextFont   = NULL;
    ChoiceText[i].IText       = NULL;
    ChoiceText[i].NextText    = NULL;
    ChoiceGadg[i].LeftEdge    = 20;
    ChoiceGadg[i].TopEdge     = i * SPACING + TOPGADG;
    ChoiceGadg[i].Width       = CHOICEWIDTH;
    ChoiceGadg[i].Height      = CHOICEHEIGHT;
    ChoiceGadg[i].Flags       = GADGHCOMP;
    ChoiceGadg[i].Activation  = RELVERIFY;
    ChoiceGadg[i].GadgetType  = BOOLGADGET;
    ChoiceGadg[i].GadgetText  = &ChoiceText[i];
    ChoiceGadg[i].GadgetID    = i + 1;  /* gadget IDs start at 1 */
  }
}


int GetChoice (num) int num;
{
struct IntuiMessage *GetMsg(), *message;
ULONG msgclass;         	/* message class from IDCMP */
APTR IAddr;			/* pointer to gadget from IDCMP */
  Redisplay(num);		/* put up choices in windows */
  FOREVER {			/*** main event loop ***/
    Wait (1L << MainWindow->UserPort->mp_SigBit);
    while (message = GetMsg(MainWindow->UserPort)) {
				/* get what we need from the message port */
      msgclass = message->Class;
      IAddr    = message->IAddress;
      ReplyMsg(message);	/* reply to message right away */
				/* check for gadget selected */
      if (msgclass == GADGETUP)
        return ( (int)((struct Gadget *)IAddr)->GadgetID );
				/* finish up if the close gadget is clicked */
      else if (msgclass == CLOSEWINDOW)
        CloseOut(); /* clean up and exit */
    }
  }
  return(0);			/* dummy to stop warning */
}


void putHeader(string, ptr) char *string; APTR ptr;
/* put title and pointer at top of screen -
 * if ptr is NULL, put string only. */
{
char buf[80];
  SetAPen(rp, 0L);
  RectFill(rp, 1L, 10L, (long)MainWindow->Width-25, 27L);
  SetAPen(rp, 3L);
  if (ptr) {
    sprintf(buf, "%d: %s (address $%lx):", level, string, ptr);
    PUTTEXT(
     " Member         Type                   Value (hex/decimal)",
     20L, 10L + 2 * rp->TxHeight);
  }
  else
    sprintf(buf, "%d: %s:", level, string);
  PUTTEXT(buf, 20L, 10L + rp->TxHeight);
}


void OpenStuff ()
{
  /* open intuition & graphics libraries and window */
  if (!(IntuitionBase = (struct IntuitionBase *)
                 OpenLibrary("intuition.library", 0L) ) )
    CloseOut();
  if (!(GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 0L) ) )
    CloseOut();
  /* now attempt to open the main window */
  if (!(MainWindow = OpenWindow(&NWindow)) )
    CloseOut();
  rp = MainWindow->RPort; /* rastport for graphics routines */
}


void CloseOut()
{
  /* close everything up before ending */
  if (MainWindow)    CloseWindow(MainWindow);
  if (IntuitionBase) CloseLibrary(IntuitionBase);
  if (GfxBase)       CloseLibrary(GfxBase);
  exit(0); /* exit program - we may be deeply nested */
}


void Redisplay(num) int num;
/* clear window, remove old gadgets, prepare and add new ones */
{
struct Gadget *gadg;
BOOL MoreFlag = FALSE;
int i, c;
  SetAPen(rp, 0L); /* rectfill with background colour to clear */
  RectFill(rp, 1L, (long)TOPGADG, (long)MainWindow->Width - 2,
           (long)MainWindow->Height - 2);
  if (num > MAXGADG) {
    num = MAXGADG;
    MoreFlag = TRUE; /* put up "more" gadget */
  }
  /* remove all choice gadgets */
  gadg = &BackGadg;
  while (gadg = gadg->NextGadget)
    RemoveGadget(MainWindow, gadg);
  /* render gadgets according to single-digit code at
   * the start of the gadget's intuitext */
  for (i = 0; i < num; i++) {
    ChoiceText[i].FrontPen = 1;
    if ((c = *ChoiceText[i].IText) == '-' || c == '(') {
      if (c == '-') {
        *ChoiceText[i].IText = ' ';
        ChoiceText[i].FrontPen = 2;
      }
      PrintIText(rp, &ChoiceText[i],
                (long)ChoiceGadg[i].LeftEdge,
                (long)ChoiceGadg[i].TopEdge);
    }
    else
      AddGadget(MainWindow, &ChoiceGadg[i], -1L);
  }
  if (MoreFlag)
    AddGadget(MainWindow, &MoreGadg, -1L);
  /* display gadget imagery (the text) */
  RefreshGadgets(&BackGadg, MainWindow, NULL);
}


void SetBackText (sflag) int sflag;
{
  BackIText.IText = (UBYTE *)(sflag ?
             " Previous  Page " : " Previous Level ");
}
//E*O*F sbio.c//

echo Possible errors detected by \'wc\' [hopefully none]:
temp=/tmp/shar$$
trap "rm -f $temp; exit" 0 1 2 3 15
cat > $temp <<\!!!
    249    941   6869 sb.c
     43    278   1747 sb.doc
     24     68    551 sb.h
     15     19    201 sb.lnk
    104    381   3947 sbGadget.c
    142    578   5368 sbGraphics.c
     40    141   1351 sbIntuiText.c
     60    210   2176 sbMsgPort.c
     38    112   1005 sbNode.c
    108    435   4154 sbScreen.c
     28     86    754 sbTextAttr.c
    195    747   7555 sbWindow.c
    211    773   6176 sbio.c
   1257   4769  41854 total
!!!
wc  sb.c sb.doc sb.h sb.lnk sbGadget.c sbGraphics.c sbIntuiText.c sbMsgPort.c sbNode.c sbScreen.c sbTextAttr.c sbWindow.c sbio.c | sed 's=[^ ]*/==' | diff -b $temp -
exit 0


-- 
UUCP:  kim@amdahl.amdahl.com
  or:  {sun,decwrl,hplabs,pyramid,ihnp4,seismo,oliveb,cbosgd}!amdahl!kim
DDD:   408-746-8462
USPS:  Amdahl Corp.  M/S 249,  1250 E. Arques Av,  Sunnyvale, CA 94086
CIS:   76535,25

[  Any thoughts or opinions which may or may not have been expressed  ]
[  herein are my own.  They are not necessarily those of my emplodic  al

kim@amdahl.UUCP (Kim DeVaughn) (05/04/87)

[ "Send lawyers, guns, and money ..." ]

begin 755 sb
M   #\P         =         !P    "   "5    )D   %4    C    70 
M  #(   !P0   88   !R   !$0   )L   %L   !"0   N<    U    7   
M "     C    6P   +8    S    -   !NT   #K    +0   #$    <    
M,@   ^D    "3OD           /L     0   !<    "         _(   /I
M   "5$Y5__R_^0    1D!D[Y   %''#_*T#__$ZY     $ZY   #-$JM__QG
M3D*G2'D    $3KD   'F4(\C_    !\    0(_P    _    &' !+P!.N0  
M 5)8CRM __P,@     %FOB\Y     $AY    3V$.4(]@K$ZY   #I$Y=3G5.
M5?_XO_D    $9 9.^0  !1QP_RM __A2N0    !*K?_X9P  GB!M  Q"IW %
M+P O"$AY    ]"\M  AA  >$3^\ %'(%+P$K0/_\3KD   %26(\K0/_X#(  
M   %9T@,@     1G)@R      V:N(&T #$JH #1GI"\H #1(>0   41.N0  
M  !0CV"0(&T #"\H #A(>0   6!.N0    !0CV  _W@@;0 ,+R@ /$AY   !
M?$ZY     %"/8 #_7E.Y     $Y=3G5.5?_(2.<# +_Y    !&0&3OD   4<
M("T "')03KD  !E(($#1_      B;0 ,+RD !"\12'D   &A+PA.N0  !G!/
M[P 0(&T #" H  @,@     YD  ("Y8!.^P@"8   -F   #I@  !@8   B&  
M *Y@  $J8  !X&   =Q@  '88  !U&   =!@  %48  !>&   9Y"+?_08  !
MO"!M !#1[0 4( @@0"X0+P<O!TAY   !K$AM_]!.N0  !G!/[P 08  !DB!M
M !#1[0 4( @@0#P02,8O!B\&2'D   &X2&W_T$ZY   &<$_O !!@  %F(&T 
M$-'M !0<$$B&2,8O!B\&2'D   '#2&W_T$ZY   &<$_O !!@  $\(&T $-'M
M !0@""! +A!*AV862'D   '.2&W_T$ZY   &<%"/8  !%$*M_\P@+?_,#(  
M   >;!8@1]' 2A!G#B!'T< ;D C14JW_S&#><"(B+?_,&X 8T1M _]!"-1C2
M($?1P4H09P  TDAY   !TTAM_]!.N0  !JA0CV   +P@;0 0T>T %" (($ N
M$$J'9A9(>0   ==(;?_03KD   9P4(]@  "4+P<O!TAY   !W$AM_]!.N0  
M!G!/[P 08'@@;0 0T>T %" (($ N$"\'+P=(>0   >E(;?_03KD   9P3^\ 
M$&!0(&T $-'M !0@""! /!!(QB\&+P9(>0   ?9(;?_03KD   9P3^\ $& F
M(&T $-'M !0<$$B&2,8O!B\&2'D   (!2&W_T$ZY   &<$_O ! @+0 (<E!.
MN0  &4@@0-'\     $AM_] O"$ZY   &J%"/("T "'(43KD  !E(($#1_   
M  0@+0 (<E O2  (3KD  !E(($#1_      B;P ((T@ #$S? ,!.74YU3E7_
MT$CG( "_^0    1D!D[Y   %'' $*T#_]' !+P!.N0  !>98CT*M__P@+?_\
M#(     (;%IR4$ZY   92"! T?P     2'D   (,+PA.N0  %*!0CR M__QR
M%$ZY   92"! T?P    $("W__')0+T@ !$ZY   92"! T?P     (F\ !"-(
M  Q2K?_\8)I"IR\M  A.N0   >90CW  *T#__"M __@@+?_\#(     @;   
MM'(!X:$D+0 0Q(%*@F<  )SE@"!M  S1P$J09P  CB M__SE@"!M  S1P"\0
M2'D   (.2&W_U$ZY   &<$_O  P@+?_X<E!.N0  &4@@0-'\     $AM_]0O
M"$ZY   &J%"/4ZW_]$JM__1F/B M__AR%$ZY   92"! T?P    $("W_^')0
M+T@ !$ZY   92"! T?P     (F\ !"-(  Q2K?_X< 0K0/_T4JW__&  _T(,
MK0    3_]&PT("W_^'(43KD  !E(($#1_     0@+?_X<E O2  $3KD  !E(
M($#1_      B;P $(T@ #" M__A2@"\ 3KD   %26(]*@&;L3-\ !$Y=3G5.
M5?ZXO_D    $9 9.^0  !1Q"K?_\(_P   (4    & RM_____P 49@@K?  '
M__\ %"!M  PO""\(+RT "$AY   ")4AM_KA.N0  !G!/[P 40J=(;?ZX3KD 
M  'F4(\,K0   !#__&8$0JW__ RM    $/_\;#1*K0 4;RX@+?_\4JW__"\M
M !0O "\M ! O+0 ,84A/[P 0!*T    0 !0&K0   !  #&#"2JT %&\$<!%@
M!" M__PO $ZY   !4EB/*T#_^$JM !1O# RM    &?_X9P#_6DY=3G5.5?^H
MO_D    $9 9.^0  !1P@+0 0<E!.N0  &4@@0-'\     "\M  A(>0   D@O
M"$ZY   &<$_O  Q";?_^#*T    0 !1L!B M !1@ G 0<@ R+?_^LH!D  $*
M("T # R     !&<  *(,@     )G; R      68  +9P # M__X@;0 (T< 0
M$ )  /\[0/_\ H   /__+T   .B(($#1_    C<0$$B 2, B+P   H$    /
M($'1_    C<2$$B!2,$O 2\ 2'D   )02&W_K$ZY   &<$_O !!@4G  ,"W_
M_B!M  C1P" (($ R$$C!+P%(>0   E9(;?^L3KD   9P3^\ #& F<  P+?_^
M(&T "-' ( @@0"\02'D   )<2&W_K$ZY   &<$_O  P@+0 0<E!.N0  &4@@
M0-'\     $AM_ZPO"$ZY   &J%"/<  P+?_^T*T ##M __Y@ /[<("T $'(4
M3KD  !E(($#1_     0@+0 0<E O2   3KD  !E(($#1_      B;P  (T@ 
M#$Y=3G5.5?_XO_D    $9 9.^0  !1Q*K0 89P1P 6 "<  O $ZY   %YEB/
M+RT $"\M  A.N0   >90CW  *T#__"M __@@+?_\L*T %&P^Z8 @;0 ,T< @
M+?_XT*T &"\ +RT $"\(+RW__&$ ^*!/[P 0("W__.F (&T #-' ("@ #-&M
M__A2K?_\8+@@+?_XT*T &$Y=3G5.5?_\O_D    $9 9.^0  !1Q"IR\M  A.
MN0   >90CR\M  Q.N0  $018CU* +P!.N0  !L!8CR! $+P +2M(__Q2B"\M
M  PO"$ZY   4H%"/(^W__    !!P 2\ 3KD   %26(\O+?_\3KD   <B6(].
M74YU   #[    !\    "   'Q@  !YX   =R   '8@  !TH   ;2   &"   
M!>    3J   $3@   Y0   -L   #0@   QH   ,    "V    H    )6   "
M+    @    &$   !1@   30   $:   ! @   +8   "<    ;@   $8    \
M    +@    L    #   (-   !^@   ;(   %H   !5    4,   $A   !$@ 
M  /P   #M@   70    /    "   "&8   0F    >@  "3H   :&   %M@  
M -    !4   (]   "'8   8B   $G@   #0    @    &@    ,    )    
M:   !>0   !*    !P    H   DP   ('   !8@   4X   $;    ]@   ! 
M     @    L   $Z   !(     $    -   !"    #$    7   )1@  "0P 
M  D    ))@  !%8   ?T   %&    \(   +B   'T   !Z@   =\   &V@  
M!A(   3T   #G@   W8   -,   #)    PH   **   "8    C8   (*   !
MC   ""P   @4   'X   !L    68   %@   !4@   4P   %!   !'P   1D
M   $0    ^@   /0   #K@   6P   CH   (4@  !K0   76   $%@   6  
M  "0    #@    @    8   (X   "$H   :L   %S@  ! X   %8    B   
M  8        #\@   ^H   "9     $-H;V]S92!A(&QI8G)A<GD@<W1R=6-T
M=7)E "!);G1U:71I;VX@(" @(" @<W1R=6-T($QI8G)A<GD ("!1=6ET("!0
M<F]G<F%M %1H92!);G1U:71I;VY"87-E('-T<G5C='5R90 H3&EB36]D90!S
M=')U8W0@3&EB<F%R>2D *%9I97=,;W)D '-T<G5C="!6:65W*0 @06-T:79E
M5VEN9&]W '-T<G5C="!7:6YD;W<@*@ @06-T:79E4V-R965N '-T<G5C="!3
M8W)E96X@*@ @1FER<W138W)E96X <W1R=6-T(%-C<F5E;B J     &L   !T
M         "(   "$    C@         2    FP   *D    %    !    +D 
M  #'    !0    0   #7    Y     4    $5&AE(&-U<G)E;G1L>2!A8W1I
M=F4@=VEN9&]W %1H92!C=7)R96YT;'D@86-T:79E('-C<F5E;@!4:&4@9FER
M<W0@<V-R965N(&]N($EN='5I=&EO;B=S(&QI<W0 )2TQ-G,E+3(T<P D)3AL
M>" @)3!L9  D)3AX(" E,3!D "0E.'@@("4Q,&0 3E5,3  N+BX 3E5,3  D
M)3AL>" @)3$P;&0 )"4X;'@@("4Q,&QU "0E.'@@("4Q,'4 )"4X>" @)3$P
M=0 M "4M,3ES "!%>&ET($AE>"!$=6UP("  )7,@9G)O;2 E;'@@*"5L9"D 
M,#$R,S0U-C<X.4%"0T1%1@ M)39L>#H@ "5C)6,@ "4P-'@@ "4P.&QX(   
M   #[     H    "   !.    30   $H   !)    1@   $4   !"    00 
M  #X    ]         /R   #ZP   50   /R   #Z0   (Q.5?_R2.<@ +_Y
M    !&0&3OD   4<</\K0/_X4KD     2JW_^&<  ?@@;0 ,0J=P#R\ +PA(
M>0   1@O+0 (3KD   A$3^\ %'(/+P$K0/_\3KD   %26(\K0/_X<B@$@0  
M  AKNK"[& AF\D[[& 8    +8  !A@    A@  #D    !V   +8    &8   
M)     %@   "(&T #$J09X O$$AY   $R&$ _U10CV  _W @;0 ,,"@ ##M 
M__8"@   __\"@     ,,@     1D2.. 3OL( F &8!9@(& J(_P   3L   "
M9@CM  #_]V H(_P   3V   "9F <(_P   3_   ":F 0(_P   4*   ":@AM
M  #_]W  ,"W_]B\ 2'D   )F2'D   443KD   0$3^\ #&  _N9P "!M  PP
M*  .+P!(>0   T9(>0  !2Y.N0  ! 1/[P ,8 #^P"!M  PP*  0.T#_]@* 
M  #__R]   0(   /9T "@   _P B+P $ H$   #PZ(E3@70!XZ* @CM __8"
M@   __\O $AY   #]$AY   %4TZY   $!$_O  Q@ /YD,"W_]@) _P R+?_V
M D$ #U-!= 'C8H!".T#_]@*   #__R\ 2'D   2(2'D   5Y3KD   0$3^\ 
M#&  _B8@;0 ,2J@ &F< _AHO*  :2'D   6?3KD     4(]@ /X$4[D     
M3-\ !$Y=3G4      ^P    %     0   ?(   &T   !6    3(   !"    
M @    (   (B    '@   !,    %   "$    >P   'F   !K@   :@   %2
M   !3    2P   $F   !$@   0X   $&   ! @   /H   #V    Z    .0 
M  "F    .     $    (    5     $    /   "%@    $    7    $@  
M  $    8    "@        /R   #Z@   70@3F5X=$=A9&=E= !S=')U8W0@
M1V%D9V5T("H +4QE9G1%9&=E %-(3U)4 "U4;W!%9&=E %-(3U)4 "U7:61T
M: !32$]25  M2&5I9VAT %-(3U)4 "!&;&%G<P!54TA/4E0 ($%C=&EV871I
M;VX 55-(3U)4 "!'861G9714>7!E %532$]25  H1V%D9V5T4F5N9&5R $%0
M5%(I "A396QE8W1296YD97( 05!44BD ($=A9&=E=%1E>'0 <W1R=6-T($EN
M='5I5&5X=" J "U-=71U86Q%>&-L=61E $Q/3D< *%-P96-I86Q);F9O $%0
M5%(I "U'861G971)1 !54TA/4E0 +55S97)$871A $%05%(           P 
M   %    !    !P    F     @    (    L    -0    (    "    .P  
M $(    "     @   $@   !0     @    (   !6    70    P    "    
M9    '     ,     @   '<   "#    #     (   "*    F     4    $
M    G@   *P    %    !    +(   "^    !0    0   #1    X     $ 
M   $    Y0   /(    %    !    /@   $"    #     (   $)   !$P  
M  4    $1T%$1TA"3U@ 1T%$1TA)34%'10!'041'24U!1T4 1U)%3$)/5%1/
M30!'4D5,4DE'2%0 1U)%3%=)1%1( $=214Q(14E'2%0 4T5,14-4140 1T%$
M1T1)4T%"3$5$     @@   (1   "'    B8   (Q   ".P   D4   )0   "
M60                                    !214Q615))1ED 1T%$1TE-
M345$24%410!%3D1'041'150 1D],3$]734]54T4 4DE'2%1"3U)$15( 3$5&
M5$)/4D1%4@!43U!"3U)$15( 0D]45$]-0D]21$52 %1/1T=,15-%3$5#5 !3
M5%))3D=#14Y415( 4U1224Y'4DE'2%0 3$].1TE.5 !!3%1+15E-05  0D]/
M3$585$5.1      "I@   K    *^   "R    M0   +@   "ZP   O4   ,"
M   ##P   QP   ,H   #,    SH          %-)6DE.1P!71%)!1T=)3D< 
M4T1204='24Y' %=54$923TY4 %-54$923TY4 %=$3U=.0D%#2P!31$]73D)!
M0TL 0TQ/4T4 4D511T%$1T54 $=:6D=!1$=%5 !30U)'041'150 4UE31T%$
M150    #A@   XT   .7   #H0   ZH   .S   #O0   \<             
M           #S0   ]<   /A   #ZT)/3TQ'041'150 1T%$1T54,# P,@!0
M4D]01T%$1T54 %-44D=!1$=%5 !215%'041'150 1UI:1T%$1T54 %-#4D=!
M1$=%5 !365-'041'150     !#0   0_   $2@  !%4                 
M                            !%\   1I   $<P  !'U4:&4@;F5X="!G
M861G970@:6X@26YT=6ET:6]N)W,@;&ES= !'041'2$-/35  1T%$1TA"3U@ 
M1T%$1TA)34%'10!'041'2$Y/3D4 1FQA9W,@<V5T(&9O<B!T:&ES(&=A9&=E
M= !!8W1I=F%T:6]N(&9L86=S('-E="!F;W(@=&AI<R!G861G970 1V%D9V5T
M('1Y<&4@9FQA9W,@<V5T(&9O<B!T:&ES(&=A9&=E= !'861G970@='EP92!F
M;&%G<R!S970@9F]R('1H:7,@9V%D9V5T %1H92!G861G970G<R!F:7)S="!T
M97AT("A);G1U:51E>'0@<W1R=6-T=7)E*0        /L    20    4   3$
M   $P   !+P   2X   $E   !)    2,   $B   !#    0L   $*   !"0 
M  00   $#   ! @   0$   $     _P   /X   #]    WH   -V   #<@  
M VX   -J   #9@   V(   ->   #6@   U8   -2   #3@   TH   -&   "
MA@   H(   )^   ">@   G8   )R   ";@   FH   )F   !_    ?@   'L
M   !Z    =P   '8   !S    <@   &\   !N    :P   &H   !G    9@ 
M  &,   !B    7P   %X   !;    6@   %<   !6    4P   %(   !/   
M 3@   $L   !*    1P   $8         _(   /I    R$Y5__B_^0    1D
M!D[Y   %''#_*T#_^%*Y     $JM__AG8"!M  Q"IW &+P O"$AY    6"\M
M  A.N0  "$1/[P 4<@8O 2M __Q.N0   5)8CRM __A=@&;"(&T #%"(<  B
M;0 ,,"D  G( ,A$O 2\ +PA(>0   +AA$$_O !!@FE.Y     $Y=3G5.5?_X
MO_D    $9 9.^0  !1QP_RM __A2N0    !*K?_X9P  CD*G< @O "\M  Q(
M>0   8@O+0 (3KD   A$3^\ %'((+P$K0/_\3KD   %26(\K0/_X#(     !
M;;X,@     ANMN6 68 @;0 ,T<!*D&>H("W_^.F ($#1_    7@@+?_XY8!9
M@")M  S3P# M !+ [0 6+P!R!"\!+Q$O$$ZY   %R$_O !!@ /]N4[D     
M3EU.=4Y5__B_^0    1D!D[Y   %''#_*T#_^%*Y     $JM__AG=B!M  Q"
MIW 0+P O"$AY   #*B\M  A.N0  "$1/[P 4<A$O 2M __Q.N0   5)8CRM 
M__@,@    !EG) R      F:V(&T #$JH  1GK"\H  1(>0  !"IA /XX4(]@
MFB\M__PO+0 ,2'D   1&81!/[P ,8(13N0    !.74YU3E7_^+_Y    !&0&
M3OD   4<</\K0/_X4KD     2JW_^&<  00@;0 ,+RT $' 0+P O"$AY   %
M<B\M  A.N0  "$1/[P 4<A O 2M __Q.N0   5)8CRM __AR( 2!    "&NX
ML+L8"&;R3OL8!@   !!@  ",    #V   %X    .8   ,     -@   "(&T 
M#-#\ "AP""\ <@$O 2\(2'D   9R3KD   7(3^\ $&  _VH@;0 ,T/P 3G .
M+P!R B\!+PA(>0  !I5.N0  !<A/[P 08 #_1"!M  S0_ !&< @O '($+P$O
M"$AY   &N$ZY   %R$_O !!@ /\>(&T #-#\ %QP""\ <@$O 2\(2'D   ;?
M3KD   7(3^\ $&  _OA3N0    !.74YU   #[     D    !   #"@   N0 
M  *^   "F    30   (N   !A@   ,H    \    "     (   ,8   ""   
M >8   %D   !0@   *@   "&    &@    P    '   #!    MX   *X   "
MD@   B0   '8   !P@   7P   $.    P    '@    R    !     @   ) 
M   !F    -P   !.    !    !<   '\   !6    )P    .    !    !@ 
M  'T   !4    )0    &         _(   /J   !P2U">71E<U!E<E)O=P!5
M5T]21  M4F]W<P!55T]21  M1FQA9W, 54)95$4 +41E<'1H %5"651% "U0
M860 55=/4D0 (%!L86YE<ULX70!03$%.15!44@          #0    P    "
M    $P   !D    ,     @   !\    F    #0    $    L    ,P    T 
M   !    .0   #X    ,     @   $0   !/    !0   "!":710;&%N97,@
M8F5L;VYG('1O('1H92!":71-87  ($)I=%!L86)E6S!= %!,04Y%4%12 "!"
M:710;&%B95LQ70!03$%.15!44@ @0FET4&QA8F5;,ET 4$Q!3D505%( ($)I
M=%!L86)E6S-= %!,04Y%4%12 "!":710;&%B95LT70!03$%.15!44@ @0FET
M4&QA8F5;-5T 4$Q!3D505%( ($)I=%!L86)E6S9= %!,04Y%4%12 "!":710
M;&%B95LW70!03$%.15!44@      UP   .0    %    !    .T   #Z    
M!0    0   $#   !$     4    $   !&0   28    %    !    2\   $\
M    !0    0   %%   !4@    4    $   !6P   6@    %    !    7$ 
M  %^    !0    0H3&%Y97( <W1R=6-T($QA>65R("HI "!":71-87  <W1R
M=6-T($)I=$UA<" J "U!<F5A(%!T<FX 55-(3U)4("H *%1M<%)A<P!S=')U
M8W0@5&UP4F%S("HI "A!<F5A26YF;P!S=')U8W0@07)E84EN9F\@*BD *$=E
M;'-);F9O '-T<G5C="!'96QS26YF;R J*0 M36%S:P!50EE410 M1F=096X 
M0EE410 M0F=096X 0EE410 M04]L4&5N $)95$4 +41R87=-;V1E $)95$4 
M+4%R96%0=%-I>F4 0EE410 M;&EN<&%T8VYT $)95$4 +61U;6UY $)95$4 
M*$9L86=S %532$]25  M3&EN95!T<FX 55-(3U)4     @@   (/    !0  
M  0   (?   ")P    4    $   "-P   D(    %    !    DL   )3    
M!0    0   )D   ";@    4    $   "@0   HL    %    !    IX   *D
M    #0    $   *J   "L0    ,    !   "M@   KT    #     0   L( 
M  +*     P    $   +/   "V0    ,    !   "W@   NH    #     0  
M N\   +Z     P    $   +_   #!@    ,    !   #"P   Q(    ,    
M @   QD   ,C    #     )4:&4@0FET36%P(&9O<B!T:&4@4F%S=%!O<G0 
M36]R92!287-T4&]R="!M96UB97)S "UC<%]X %-(3U)4 "UC<%]Y %-(3U)4
M "!M:6YT97)M<ULX70!50EE410 M4&5N5VED=&@ 4TA/4E0 +5!E;DAE:6=H
M= !32$]25  H5&5X=$9O;G0 <W1R=6-T($9O;G0@*BD +4%L9V]3='EL90!5
M0EE410 H5'A&;&%G<P!50EE410 M5'A(96EG:'0 55=/4D0 +51X5VED=&@ 
M55=/4D0 +51X0F%S94QI;F4 55=/4D0 +51X4W!A8VEN9P!73U)$ "U24%]5
M<V5R %=/4D0 ('=O<F1R97-E<G9E9%LW70!55T]21  @;&]N9W)E<V5R=F5D
M6S)= %5,3TY' "!R97-E<G9E9%LX70!50EE410     $7   !&(    "    
M @  !&@   1N     @    (   1T   $@0         (   $AP  !)$    "
M     @  !)<   2B     @    (   2H   $L@    4    $   $P0  !,P 
M   -     0  !-(   3;    #0    $   3A   $ZP    P    "   $\0  
M!/H    ,     @  !0    4,    #     (   42   %'0    (    "   %
M(@  !2L    "     @  !3    5!          X   5'   %6          (
M   %7@  !6L         "$AE>&1U;7 @;V8@4F%S=%!O<G0@;6EN=&5R;7,@
M8GET97, 2&5X9'5M<"!O9B!R97-E<G9E9"!287-T4&]R="!W;W)D<P!(97AD
M=6UP(&]F(')E<V5R=F5D(%)A<W10;W)T(&QO;F=W;W)D<P!(97AD=6UP(&]F
M(')E<V5R=F5D(%)A<W10;W)T(&)Y=&5S       #[    %P    '   &9@  
M!F(   96   &4@  !D8   9"   &-@  !C(   8F   &(@  !A8   82   &
M!@  !@(   7V   %\@  !>8   7B   %U@  !=(   7&   %P@  !;8   6R
M   %I@  !:(   66   %D@  !88   6"   %=@  !7(   0>   $&@  ! X 
M  0*   #_@   _H   /N   #Z@   ]X   /:   #S@   \H   .^   #N@  
M ZX   .J   #G@   YH   ..   #B@   WX   -Z   #;@   VH   ->   #
M6@   TX   -*   #/@   SH   ,N   #*@   ?P   'X   ![    >@   '<
M   !V    <P   '(   !O    ;@   &L   !J    9P   &8   !C    8@ 
M  "L    J    )P   "8    C    (@   !\    >    &P   !H    7   
M %@        #\@   ^D   &&3E7_\+_Y    !&0&3OD   4<0JW__" M__P,
M@    !!L  $L<A1.N0  &4@@0"](  #1_     1"*  !($#1_     01?  !
M  (@0-'\    !'( ,4$ !"! T?P    $,4$ !B! T?P    $D\DA20 (($#1
M_     0A20 ,($#1_     0A20 0("W__'(L3KD  !E(($ O2  $T?P   %8
M,7P %  $($#1_    5@@+?_\<@DO2  (3KD  !E(!H     >(&\ "#%   8@
M;P $T?P   %8,7P!&  ((&\ !-'\   !6#%\  @ "B!O  31_    5A":  ,
M(&\ !-'\   !6' !,4  #B!O  31_    5@Q0  0(&\ !-'\   !6")O  #3
M_     0A20 :(&\ !-'\   !6" M__Q2@#%  "92K?_\8 #^RDY=3G5.5?_T
MO_D    $9 9.^0  !1PO+0 (80 "EEB/(GD    ((&D 5G  $"@ #W(!X:$O
M 4ZY    7%B/('D    (+R@ 5DZY    <%B/*T#__$J 9\@@0"MH !3_^"MH
M !S_]"\ 3KD   "$6(\,K0   $#_^&8.(&W_]'  ,"@ )DY=3G4,K0   @#_
M^&:L80 !PF"F3E7_L$CG, "_^0    1D!D[Y   %'$*G+SD     3KD   !8
M4(\@>0    @P*  (2, $@    !ER&R\!+P!T"B\"=@$O R\Y     $ZY    
M.$_O !1P R\ +SD     3KD   !84(]*K0 ,9W0O+0 ,+RT ""\Y     $AY
M    [$AM_[!.N0  !G!/[P 4('D     ,"@ .@*   #__^. !H     *+P!R
M%"\!+PA.N0   !Q/[P ,2'D   $^3KD  !$$6(\O $AY   ! R\Y     $ZY
M     $_O  Q@'B\M  @O.0    !(>0   7E(;?^P3KD   9P3^\ $'  ('D 
M    ,"@ .@:     "B\ <A0O 2\(3KD    <3^\ #$AM_[!.N0  $018CR\ 
M2&W_L"\Y     $ZY     $_O  Q,WP ,3EU.=;_Y    !&0&3OD   4<0J=(
M>0   8%.N0   *Q0CR/      $J 9@)A1D*G2'D   &33KD   "L4(\CP   
M  1*@&8"82I(>0   +Q.N0   #!8CR/     "$J 9@)A$"!Y    ""/H #( 
M    3G6_^0    1D!D[Y   %'$JY    "&<.+SD    (3KD    <6(]*N0  
M  !G#B\Y     $ZY    F%B/2KD    $9PXO.0    1.N0   )A8CT*G3KD 
M  6 6(].=4Y5_^Y(YS  O_D    $9 9.^0  !1Q";?_Z0J<O.0    !.N0  
M %A0CR!Y    "# H  A(P%6 ,B@ "DC!58$O 2\ =!XO G8!+P,O.0    !.
MN0   #A/[P 4#*T    0  AO#' 0*T  "#M\  '_^BM\    //_\(FW__"!1
M*TC__+'\     &<2+P@O.0    A.N0   'Q0CV#<0JW_]B M__:PK0 (;   
M^G(43KD  !E(($#1_     00O  !($#1_     0B:  ,<  0$2M __(,@   
M "UG"@R     *&8  (X,K0   "W_\F8H("W_]G(43KD  !E(($#1_     0B
M:  ,$KP ("! T?P    $$+P  B M__9R%$ZY   92"! T?P    $("W_]G(L
M+T@ "$ZY   92"! T?P   %8,B@ !$C!($#1_    5@P*  &2, O "\!+R\ 
M$"\Y     $ZY    1$_O !!@*B M__9R+$ZY   92"! T?P   %8</\O "\(
M+SD    (3KD     3^\ #%*M__9@ /[^2FW_^F<:</\O $AY    :"\Y    
M"$ZY     $_O  Q"IR\Y    "$AY    /$ZY    8$_O  Q,WP ,3EU.=4Y5
M  "_^0    1D!D[Y   %'$JM  AG"$'Y   !I& &0?D   &U(\@    83EU.
M=0     #[     (    "   "S@   EX    ?    "0  !@X   8(   &    
M!=    7*   %N   !;(   60   $D   !'0   0L   #Z    ^    /2   #
MR@   [P   .T   #E@   XH   -\   #<    V(   -4   #1@   M0   *R
M   "H@   F0   (.   !C@   7     D    "@  !80   5D   %4   !4( 
M  4J   %$@  !0(   3&   $N@  !$X   0>   #G@   QX   +J   "N   
M G@   )"   "+@   @    $X   !*@   2    $2   ! @   /0   #D    
MU    *P   ">    @@   '8   !H    7    $X   !     -    !0    7
M   #^    Q    *H   "W@   FX   5\   %.@  !2(   3Z   $L@   +P 
M  "2    *   !?0   02   #K@   SX   'X   !8     X    '    &   
M!>P   0*   #I@   S8   'P   !6     8    '    &@   ^X   /8   #
M:    TP   &X   !F    88    )    &P   R0   *^   # @   I@   14
M   "-   !"0   )(   "!@    <    <   %U@  !;X   66   %:@  !)8 
M  /"   #@@        /R   #Z@   '(                # @$   4  @  
M             "A-3U)%*0   @,!   %  (         (             K_
M] ",  P "  !  $               P                        !+/_T
M #L #  (  $  0              *            !D     5&AE(%1R86YS
M86-T;W(@4W1R=6-T=7)E($)R;W=S97(@5B Q+C        H"@ "]__\   ) 
M  ,0#@   #P         E                        25D.B E<R H861D
M<F5S<R D)6QX*3H ($UE;6)E<B @(" @(" @(%1Y<&4@(" @(" @(" @(" @
M(" @(" @5F%L=64@*&AE>"]D96-I;6%L*0 @365M8F5R(" @(" @(" @5'EP
M92 @(" @(" @(" @(" @(" @("!686QU92 H:&5X+V1E8VEM86PI "5D.B E
M<SH :6YT=6ET:6]N+FQI8G)A<GD 9W)A<&AI8W,N;&EB<F%R>0 @4')E=FEO
M=7,@(%!A9V4@ "!0<F5V:6]U<R!,979E;"        /L    !0    D   #6
M    S@   ((   !6    -         /R   #ZP   1$   /R   #Z0   )M.
M5?_TO_D    $9 9.^0  !1QP_RM __A2N0    !*K?_X9P !/B!M  Q"IW 0
M+P O"$AY   !&"\M  A.N0  "$1/[P 4<A$O 2M __Q.N0   5)8CRM __AR
M, 2!    "&NZL+L8"&;R3OL8!@   !E@  #6    "V   +0    *8   D@  
M  E@  !0     F   "8    !8    B!M  Q*D&< _W@O$$AY   "<F$ _TY0
MCV  _V8@;0 ,2J@ !&< _UHO*  $2'D   *63KD     4(]@ /]$<  @;0 ,
M,"@ %"M __0(   !9P@(0   *T#_]"\M__1(>0   E)(>0   K!.N0  ! 1/
M[P ,8 #_"B!M  PO*  62'D   +#3KD   C:4(]@ /[P(&T #"\H !I(>0  
M M9.N0  "-I0CV  _M8O+?_\+RT #$AY   "\6$23^\ #&  _KY3N0    !.
M74YU3E7_^+_Y    !&0&3OD   4<</\K0/_X4KD     2JW_^&<  -(@;0 ,
M+RT $' 0+P O"$AY   $6"\M  A.N0  "$1/[P 4<A O 2M __Q.N0   5)8
MCRM __@$@     5MN@R     !FRRXX!.^P@"8 I@J& D8#Y@HF!6(&T #$JH
M "AGEB\H "A(>0  !5A.N0    !0CV""(&T #-#\ %0O"$AY   %:TZY   !
M2E"/8 #_:"!M  S0_ "X+PA(>0  !8%.N0    !0CV  _TP@;0 ,2J@!1F< 
M_T O* %&2'D   653KD     4(]@ /\J4[D     3EU.=0   ^P    %    
M 0   4    $F   !"@   :P    ^    !     (   )D   !A@   60    :
M     0    0   )8     @    8   (V   "&@    (    (   !O@   %  
M   -    #    E(   (P   "%    ?H   &B   !5    3H   $@   !!   
M /X   #,    K    #0    !    #0   -(    !    $0   @     "    
M%P   7H    .     @   !@   %R    !@        /R   #Z@   6P@3F5X
M=%-C<F5E;@!S=')U8W0@4V-R965N("H ($9I<G-T5VEN9&]W '-T<G5C="!7
M:6YD;W<@*@ M3&5F=$5D9V4 4TA/4E0 +51O<$5D9V4 4TA/4E0 +5=I9'1H
M %-(3U)4 "U(96EG:'0 4TA/4E0 +4UO=7-E60!32$]25  M36]U<V58 %-(
M3U)4 "!&;&%G<P!54TA/4E0 (%1I=&QE %5"651%("H ($1E9F%U;'14:71L
M90!50EE412 J "U"87)(96EG:'0 0EE410 M0F%R5D)O<F1E<@!"651% "U"
M87)(0F]R9&5R $)95$4 +4UE;G560F]R9&5R $)95$4 +4UE;G5(0F]R9&5R
M $)95$4           P    %    !    !P    I    !0    0    Y    
M0P    (    "    20   %(    "     @   %@   !?     @    (   !E
M    ;0    (    "    <P   'L    "     @   ($   ")     @    ( 
M  "/    E@    P    "    G0   *0    $    !    *P   "Z    !   
M  0   #"    S0    ,    !    T@   -X    #     0   .,   #O    
M P    $   #T   ! 0    ,    !   !!@   1,    #     5="14Y#2%-#
M4D5%3@!#55-43TU30U)%14X 4TA/5U1)5$Q% $)%15!)3D< 0U535$]-0DE4
M34%0      (8   ")0             ",@   CP   )$     %1H92!N97AT
M('-C<F5E;B!I;B!);G1U:71I;VXG<R!L:7-T %1H92!S8W)E96XG<R!F:7)S
M="!W:6YD;W< 5&AE('-C<F5E;B=S(&9L86=S %1H92!38W)E96XG<R!4:71L
M90!4:&4@4V-R965N)W,@1&5F875L="!4:71L90!38W)E96X@;65M8F5R<R H
M<&%G92 R*0 M5T)O<E1O< !"651% "U70F]R3&5F= !"651% "U70F]R3&5F
M= !"651% "U70F]R0F]T=&]M $)95$4 ($9O;G0 <W1R=6-T(%1E>'1!='1R
M("H *%9I97=0;W)T '-T<G5C="!6:65W4&]R="D (%)A<W10;W)T '-T<G5C
M="!287-T4&]R="  ($)I=$UA< !S=')U8W0@0FET36%P "A,87EE<DEN9F\ 
M<W1R=6-T($QA>65R7TEN9F\I "!&:7)S=$=A9&=E= !S=')U8W0@1V%D9V5T
M("H +41E=&%I;%!E;@!50EE410 M0FQO8VM096X 54)95$4 +5-A=F5#;VQO
M<C  55-(3U)4 "A"87),87EE<@!S=')U8W0@3&%Y97(@*BD *$5X=$1A=&$ 
M54)95$4@*BD *%5S97)$871A %5"651%("HI     PD   ,2     P    $ 
M  ,7   #(0    ,    !   #)@   S     #     0   S4   -!     P  
M  (   -&   #3     4    $   #7@   V@         *    WD   .#    
M     &0   .4   #G          H   #J@   [4         9@   \@   /5
M    !0    0   /E   #\     T    !   #]@  !      -     0  ! 8 
M  02    #     (   09   $(P    4    $   $,P  !#P    %    !   
M!$4   1/    !0    13=')U8W1U<F4@5&5X=$%T='( 5&AE('-C<F5E;B=S
M(%)A<W10;W)T %1H92!S8W)E96XG<R!":71-87  5&AE('-C<F5E;B=S(&9I
M<G-T(&=A9&=E=      #[    $4    ,   %3   !4@   4\   %.   !2P 
M  4H   %'   !1@   4,   %"   !/P   3X   $[   !.@   3<   $V   
M!,P   3(   $O   !+@   2L   $J   !)P   28   $C   !(@   1\   $
M>   !&P   1H   $7   !%@   )J   "9@   F(   )6   "4@   @P   ((
M   !_    ?@   'L   !Z    =P   '8   !S    <@   &\   !N    :P 
M  &H   !G    9@   &,   !B    7P   %X   !;    6@   %<   !6   
M 4P   %(   !/    3@   $L   !*    1P   $8         _(   /I   !
M"4Y5__2_^0    1D!D[Y   %''#_*T#_^%*Y     $JM__AG  $^(&T #$*G
M<! O "\(2'D   $L+RT "$ZY   (1$_O !1R$2\!*T#__$ZY   !4EB/*T#_
M^'(@!($    (:[JPNQ@(9O).^Q@&    &6   -8    .8   M     Q@   D
M     6    (@;0 ,2I!GB"\02'D   .F80#_8%"/8 #_>"!M  P@*  8 H #
M ___*T#_] *     P.R(#(     $9$CC@$[[" )@!F 68"!@*B/\   #R@  
M SX([0 &__=@*"/\   #V    SY@'"/\   #YP   T)@$"/\   #]    T((
M;0 &__<O+?_T2'D   ,F2'D   0"3KD   0$3^\ #&  _O @;0 ,+R@ ($AY
M   $&TZY   (VE"/8 #^UB\M__PO+0 ,2'D   0N81)/[P ,8 #^OE.Y    
M $Y=3G5.5?_XO_D    $9 9.^0  !1QP_RM __A2N0    !*K?_X9P !?B!M
M  PO+0 0<! O "\(2'D   6,+RT "$ZY   (1$_O !1R$2\!*T#__$ZY   !
M4EB/*T#_^') !($    (:[BPNQ@(9O).^Q@&    &6   10    +8   [   
M  I@  #$    #&   *H    )8   @     A@  !6     V   "P    "8   
M B!M  Q*J  N9P#_9"\H "Y(>0  !HQ.N0    !0CV  _TX@;0 ,2J@ ,F< 
M_T(O*  R2'D   :Z3KD   %*4(]@ /\L(&T #$JH #IG /\@+R@ .DAY   &
MV$ZY   !2E"/8 #_"B!M  Q*J  ^9P#^_B\H #Y(>0  !O%.N0    !0CV  
M_NA(>0  !PM.N0   H18CV  _M8@;0 ,2J@ 0F< _LHO* !"2'D   <N80#]
M,E"/8 #^MB!M  Q*J !&9P#^JB\H $9(>0  !T)A /T24(]@ /Z6+RW__"\M
M  Q(>0  !UIA$D_O  Q@ /Y^4[D     3EU.=4Y5__B_^0    1D!D[Y   %
M''#_*T#_^%*Y     $JM__AG  #>(&T #"\M !!P#R\ +PA(>0  "*XO+0 (
M3KD   A$3^\ %'(/+P$K0/_\3KD   %26(\K0/_X!(     !;;H,@     AL
MLN. 3OL( F .8"Y@3F"D8*)@H&">8&8@;0 ,+R@ 4DAY   *J$AY   +*$ZY
M   $!$_O  Q@ /]\(&T #$JH %9G /]P+R@ 5DAY   +1TZY     %"/8 #_
M6B!M  Q*J !:9P#_3B\H %I(>0  "UA.N0    !0CV  _S@@;0 ,+R@ :$AY
M   +:TZY   (VE"/8 #_'E.Y     $Y=3G4   /L    !P    $   00   !
M0    [    $D   #6    :P    ^    !@    (   0<   #,@   Q    &&
M   !9    !H    !    !    IH    "    !@   G@   )6     P    @ 
M  -J   !O@   %     !    "P   C0    =    #@  ! H   /P   #S@  
M ZH   .D   #3@   P    +H   "R    J8   *4   "<@   E    (N   !
MH@   50   $Z   !'@   1@   $(   !!    /P   #X    \    .P   #>
M    V@   )H    T     @   !,   /V   #U     0    7   "K    R8 
M  %Z    #@    ,    8   #'@   7(    &         _(   /J   "YR!.
M97AT5VEN9&]W '-T<G5C="!7:6YD;W<@*@ M3&5F=$5D9V4 4TA/4E0 +51O
M<$5D9V4 4TA/4E0 +5=I9'1H %-(3U)4 "U(96EG:'0 4TA/4E0 +4UO=7-E
M60!32$]25  M36]U<V58 %-(3U)4 "U-:6Y7:61T: !32$]25  M36EN2&5I
M9VAT %-(3U)4 "U-87A7:61T: !32$]25  M36%X2&5I9VAT %-(3U)4 "!&
M;&%G<P!53$].1P H365N=5-T<FEP '-T<G5C="!-96YU("HI "!4:71L90!5
M0EE412 J "A&:7)S=%)E<75E<W0 <W1R=6-T(%)E<75E<W1E<B J*0 H1$U2
M97%U97-T '-T<G5C="!297%U97-T97(@*BD            ,    !0    0 
M   <    )@    (    "    +    #4    "     @   #L   !"     @  
M  (   !(    4     (    "    5@   %X    "     @   &0   !L    
M @    (   !R    ?     (    "    @@   (T    "     @   ),   "=
M     @    (   "C    K@    (    "    M    +L    +    !    ,$ 
M  #,    !0    0   #;    X@    0    $    Z@   /@    %    !   
M 0P   $7    !0    1724Y$3U=325I)3D< 5TE.1$]71%)!1P!724Y$3U=$
M15!42 !724Y$3U=#3$]310!325I%0E))1TA4 %-)6D5"3U143TT 4TE-4$Q%
M7U)%1E)%4T@ 3U1(15)?4D5&4D532 !"04-+1%)/4 !215!/4E1-3U5310!'
M24U-15I%4D]:15)/ $)/4D1%4DQ%4U, 04-4259!5$4 5TE.1$]704-4259%
M $E.4D5154535 !-14Y54U1!5$4 4DU"5%)!4 !.3T-!4D52149215-( %=)
M3D1/5U)%1E)%4T@ 5T)%3D-(5TE.1$]7 %=)3D1/5U1)0TM%1      "+   
M CD   )$   "4    EP   )G   "<@   H$   */   "F    J0   *R   "
MO0   L8   +3   "W0   N<   +O                                
M   "_0   PL   ,8                          !4:&4@;F5X="!W:6YD
M;W<@:6X@26YT=6ET:6]N)W,@;&ES= !334%25%]2149215-( %-)35!,15]2
M149215-( %-54$527T))5$U!4 !/5$A%4E]2149215-( $9L86=S('-E="!I
M;B!T:&ES('=I;F1O=P!4:&4@5VEN9&]W)W,@5&ET;&4 5VEN9&]W(&UE;F)E
M<G,@*'!A9V4@,BD +5)E<4-O=6YT %-(3U)4 "!74V-R965N '-T<G5C="!3
M8W)E96X@*@ @4E!O<G0 <W1R=6-T(%)A<W10;W)T("H +4)O<F1E<DQE9G0 
M0EE410 M0F]R9&5R5&]P $)95$4 +4)O<F1E<E)I9VAT $)95$4 +4)O<F1E
M<D)O='1O;0!"651% "!";W)D97)24&]R= !S=')U8W0@4F%S=%!O<G0@*@ @
M1FER<W1'861G970 <W1R=6-T($=A9&=E=" J "!087)E;G0 <W1R=6-T(%=I
M;F1O=R J "!$97-C96YD86YT '-T<G5C="!7:6YD;W<@*@ H4&]I;G1E<@!5
M4TA/4E0@*@ M4'1R2&5I9VAT $)95$4 +5!T<E=I9'1H $)95$4 +5A/9F9S
M970 0EE410 M64]F9G-E= !"651%      1&   $4     (    "   $5@  
M!%\    %    !   !&\   1V    !0    0   2(   $E     ,    !   $
MF0  !*0    #     0  !*D   2V     P    $   2[   $R0    ,    !
M   $S@  !-L    %    !   !.T   3Z    !0    0   4*   %$@    4 
M   $   %(@  !2X    %    !   !3X   5'    !0    0   50   %6P  
M  ,    !   %8   !6H    #     0  !6\   5X     P    $   5]   %
MA@    ,    !5&AE('-C<F5E;B!R969E<F5N8V5D(&EN('1H92!W:6YD;W<@
M<W1R=6-T=7)E %1H92!W:6YD;W<G<R!24&]R=" H4F%S=%!O<G0I %1H92!W
M:6YD;W<G<R!";W)D97)24&]R= !4:&4@=VEN9&]W)W,@9FER<W0@9V%D9V5T
M %-O<G)Y+"!S96QE8W1I;VX@;F]T(&EM<&QE;65N=&5D"@H 5&AE("=P87)E
M;G0G('=I;F1O=P!4:&4@)V1E<V-E;F1E;G0G('=I;F1O=P!7:6YD;W<@;65M
M8F5R<R H<&%G92 S*0 @241#35!&;&%G<P!53$].1P @57-E<E!O<G0 <W1R
M=6-T($US9U!O<G0@*@ @5VEN9&]W4&]R= !S=')U8W0@37-G4&]R=" J "A-
M97-S86=E2V5Y '-T<G5C="!);G1U:4UE<W-A9V4@*BD +41E=&%I;%!E;@!5
M0EE410 M0FQO8VM096X 54)95$4 *$-H96-K36%R:P!S=')U8W0@26UA9V4@
M*BD (%-C<F5E;E1I=&QE %5"651% "U'6EI-;W5S95@ 4TA/4E0 +4=:6DUO
M=7-E60!32$]25  M1UI:5VED=&@ 4TA/4E0 +4=:6DAE:6=H= !32$]25  H
M17AT1&%T80!50EE412 J*0 H57-E<D1A=&$ 0EE412 J*0 H5TQA>65R '-T
M<G5C="!,87EE<B J*0     '<@  !WX    !    !   !X0   >.    !0  
M  0   >?   'JP    4    $   'O   !\@    %    !   !]\   ?J    
M#0    $   ?P   '^@    T    !   (    " L    %    !   "!L   @H
M    !     0   @N   (.0    (    "   (/P  "$H    "     @  "%  
M  A:     @    (   A@   (:P    (    "   (<0  "'H    %    !   
M"(,   B-    !0    0   B5   (G0    4    $4TE:159%4DE&60!.15=3
M25I% %)%1E)%4TA724Y$3U< 34]54T5"55143TY3 $U/55-%34]610!'041'
M151$3U=. $=!1$=%5%50 %)%45-%5 !-14Y54$E#2P!#3$]315=)3D1/5P!2
M05=+15D 4D515D522499 %)%44-,14%2 $U%3E5615))1ED 3D574%)%1E, 
M1$E32TE.4T525$5$ $1)4TM214U/5D5$ %="14Y#2$U%4U-!1T4 04-4259!
M5$5724Y$3U< 24Y!0U1)5D5724Y$3U< 1$5,5$%-3U9% %9!3DE,3$%+15D 
M24Y454E424-+4P!,3TY%3%E-15-304=%      F>   )J0  ";$   F_   )
MS   "=8   GA   )Z@  "?$   GZ   *!@  "@T   H7   *(   "BL   HT
M   *00  "DT   I;   *:@  "GD   J#   *C@                      
M                       *F4E$0TU0(&9L86=S('-E="!I;B!T:&ES('=I
M;F1O=P!7:6YD;W<M/E5S97)0;W)T %=I;F1O=RT^5VEN9&]W4&]R= !4:&4@
M<V-R965N('1I=&QE('=H96X@=&AI<R!W:6YD;W<@:7,@86-T:79A=&5D    
M   #[    (L    .   +)   "P    K\   *^   "O0   KP   *[   "N@ 
M  KD   *X   "MP   K8   *U   "M    K,   *R   "L0   K    *O   
M"K@   JT   *L   "JP   JH   )D@  "8X   F"   )?@  "7(   EN   )
M8@  "5X   E2   )3@  "4(   D^   ),@  "2X   DB   )'@  "1(   D.
M   ) @  "/X   CR   ([@  ".(   C>   (T@  ",X   C"   (O@  "+( 
M  BN   &@   !GP   9P   &;   !F    9<   &4   !DP   9    &/   
M!C    8L   &(   !AP   80   &#   !@    7\   %\   !>P   7@   %
MW   !=    7,   %P   !;P   6P   %K   !:    6<   %D   !8P   ..
M   #B@   X8   -J   #9@   V(   ->   #6@   U8   -2   #3@   TH 
M  -&   #0@   SX   ,Z   #-@   S(   ,N   #*@   R8   (@   "'   
M A    (,   "     ?P   'P   ![    >    '<   !T    <P   '    !
MO    ;    &L   !H    9P   &0   !C    8    %\   !<    6P   %@
M   !7    5    %,   !0    3P   $P   !+         /R   #Z0   #5.
M5?_XO_D    $9 9.^0  !1QP_RM __A2N0    !*K?_X9P  IB!M  Q"IW (
M+P O"$AY    F"\M  A.N0  "$1/[P 4<@@O 2M __Q.N0   5)8CRM __@,
M@     AG2 R     !V<F#(     &9JP@;0 ,2J@ "&>B+R@ "$AY   !&$ZY
M     %"/8(X@;0 ,+R@ #$AY   !*TZY   (VE"/8 #_=B!M  Q*J  09P#_
M:B\H !!(>0   4AA /\^4(]@ /]64[D     3EU.=0   ^P    "     0  
M *     ^     @    (   #,    &@    $    (    4     0    0    
MO    )H   ""    -     $    1    B     $    7    #@    $    8
M    !@        /R   #Z@   %PM1G)O;G1096X 54)95$4 +4)A8VM096X 
M54)95$4 +41R87=-;V1E %5"651% "U,969T161G90!32$]25  M5&]P161G
M90!32$]25  @251E>'1&;VYT '-T<G5C="!497AT071T<B J "!)5&5X= !5
M0EE412 J "!.97AT5&5X= !S=')U8W0@26YT=6E497AT("H            *
M     P    $    0    &0    ,    !    'P   "D    #     @   "\ 
M   Y     @    (    _    2     (    "    3@   %D    %    !   
M &L   !R    !     0   !Z    A     4    $4W1R=6-T=7)E(%1E>'1!
M='1R %1H92!T97AT('!O:6YT960@=&\@8GD@251E>'0 5&AE(&YE>'0@26YT
M=6E497AT(&EN($EN='5I=&EO;B=S(&QI<W0      ^P    0    $    0P 
M  $(    _    /@   #L    Z    -P   #8    S    ,@   "\    N   
M *P   "H    G    )@        #\@   ^D    @3E7_^+_Y    !&0&3OD 
M  4<</\K0/_X4KD     2JW_^&=2(&T #$*G< 0O "\(2'D   !"+RT "$ZY
M   (1$_O !1R!"\!*T#__$ZY   !4EB/*T#_^ R      6:^(&T #"\02'D 
M  ""3KD   C:4(]@J%.Y     $Y=3G4   /L     @    $   !N    /   
M  (    "    >    !H    !    "    $X    "    $@   &@    R    
M 0   !<    .     0   !@    &         _(   /J    (R!T85].86UE
M %5"651%("H +71A7UE3:7IE %573U)$ "UT85]3='EL90!50EE410 M=&%?
M1FQA9W, 54)95$4            )    !     0    1    &P    (    "
M    (0   "L    #     0   #$    [     P    %T85].86UE       #
M[     @    2    =@   '(   !F    8@   %8   !2    1@   $(     
M   #\@   ^D   !;3E7_^+_Y    !&0&3OD   4<</\K0/_X4KD     2JW_
M^&<  3P@;0 ,0J=P#R\ +PA(>0   4PO+0 (3KD   A$3^\ %'(/+P$K0/_\
M3KD   %26(\K0/_X!(     ";;P,@     QLM.6 3OL( F   "Y@  !(8 #_
MI&  _Z!@  !>8 #_F&  _Y1@ /^08 #_C&   &1@  ""8   H"!M  Q*D&< 
M_W8O$$AY   "/$ZY     %"/8 #_8B!M  Q*J  $9P#_5B\H  1(>0   E5.
MN0    !0CV  _T @;0 ,+R@ "DAY   ";DZY   (VE"/8 #_)B!M  Q*J  4
M9P#_&B\H !1(>0   G].N0    !0CV  _P0@;0 ,2J@ &&< _O@O*  82'D 
M  *;3KD     4(]@ /[B(&T #$JH !QG /[6+R@ '$AY   "MTZY     %"/
M8 #^P%.Y     $Y=3G4      ^P    "     0   /     ^     @    ( 
M  %B    &@    $    (    4     <    4   !4    2X   $,    Z@  
M -    "N    -     4    5   !5@   30   $2    U@   +0    !    
M%P    X    !    &     8        #\@   ^H   "V+6UP7TYO9&4 3F]D
M92!S=')U8W1U<F4 (" @+FQN7U-U8V, <W1R=6-T($YO9&4@*@ @(" N;&Y?
M4')E9 !S=')U8W0@3F]D92 J "T@("YL;E]4>7!E %5"651% "T@("YL;E]0
M<FD 0EE410 @(" N;&Y?3F%M90!#2$%2("H +6UP7T9L86=S %5"651% "UM
M<%]3:6=":70 54)95$4 *&UP7U-I9U1A<VL <W1R=6-T(%1A<VL@*BD +6UP
M7TUS9TQI<W0 3&ES="!S=')U8W1U<F4 (" @+FQH7TAE860 <W1R=6-T($YO
M9&4@*@ @(" N;&A?5&%I; !S=')U8W0@3F]D92 J " @("YL:%]486EL4')E
M9 !S=')U8W0@3F]D92 J "T@("YL:%]4>7!E %5"651% "T@("YL7W!A9 !5
M0EE410          "0              &    "0    %    !    #(    ^
M    !0    0   !,    6     T    !    7@   &D    #     0   &X 
M  !Z    !     0   "!    BP    T    !    D0   )P    -     0  
M *(   "N    !0    0   "]    R0              V    .0    %    
M!    /(   #^    !0    0   $,   !'     4    $   !*@   38    -
M     0   3P   %&    #0    %-<V=0;W)T+3YM<%].;V1E+FQN7U-U8V, 
M37-G4&]R="T^;7!?3F]D92YL;E]0<F5D &UP7TYO9&4M/FQN7TYA;64 37-G
M4&]R="T^;7!?37-G3&ES="YL:%](96%D $US9U!O<G0M/FUP7TUS9TQI<W0N
M;&A?5&%I; !-<V=0;W)T+3YM<%]-<V=,:7-T+FQH7U1A:6Q0<F5D      /L
M    '@   !0   (P   "+    B    (<   "$    @P   (    !_    ?  
M  'L   !X    =P   '0   !S    <    &\   !L    :P   &@   !G   
M 9    &,   !@    7P   %P   !;    6    %<   !4    4P        #
M\@   ^D    S3E7_^+_Y    !&0&3OD   4<</\K0/_X4KD     2JW_^&< 
M )X@;0 ,0J=P!2\ +PA(>0   %PO+0 (3KD   A$3^\ %'(%+P$K0/_\3KD 
M  %26(\K0/_X#(     %9T8,@     )G( R      6:L(&T #$J09Z0O$$AY
M    K&$ _WQ0CV"4(&T #$JH  1GBB\H  1(>0   +IA /]@4(]@ /]X(&T 
M#"\H  I(>0   ,A.N0  "-I0CV  _UY3N0    !.74YU   #[     (    !
M    N    #X    "     @   ,0    :     0    @   !0    !    !8 
M  "R    F@   'X    T     0   !<    .     0   !@    &        
M _(   /J    -"!L;E]3=6-C '-T<G5C="!.;V1E("H (&QN7U!R960 <W1R
M=6-T($YO9&4@*@ M;&Y?5'EP90!50EE410 M;&Y?4')I $)95$4 (&QN7TYA
M;64 54)95$4@*@            D    %    !    !<    @    !0    0 
M   N    -P    0    !    /0   $4    #     0   $H   !3    !   
M  1.;V1E+3YL;E]3=6-C $YO9&4M/FQN7U!R960 ;&Y?3F%M90    /L    
M"@   !8   "@    G    )    ",    @    'P   !P    ;    &    !<
M         _(   /I   &[2/     4"/(    5" /2.=^_BI +'D    $(\X 
M  ! (\\   !,0KD   !(D\E.KO[:*$ C[ "8    .$JL *QG  "*( V0K0 $
M(\     $80 !S$*G3KD    P6(\@0"!H *S1R-'((F@ $-/)T\D@.0   %!R
M !(9(\D   !<T(%2@$)G4H "0/_^G\!5@$)W"  @.0   % @>0   %0D %. 
MU($?L   ( !3@E'(__8?O  @( !3@A^Q(  @ %'*__@B3R\)8   ="/L #H 
M   $80 !2&$  3(CP    $@O "1 ("H )&<6+'D   "D($ B*   (\$    X
M3J[_@B(J "!G'"0\   #[4ZN_^(CP    %AG"N6(($ I:  ( *0@>0   $@O
M"$AY     "!H "0CZ  $    7$WY   "8" \    4V<*4X!R "S!4<C__$WY
M     $ZY   "O'  8 0@+P $+P @.0   "QG!"! 3I!.N0  %Z8L>0   $ B
M>0   *1.KOYB2KD   "<9PHB>0   )Q.KOYB2KD   "@9PHB>0   *!.KOYB
M2KD   !@9PHB>0   &!.KOYB2KD   !(9RPB.0   #QG!$ZN_]PB.0   %AG
M!$ZN_]PL>0    1.KO]\(GD   !(3J[^AB ?+GD   !,3-]_?DYU<&1@ /]@
M0>P 7$ZN_H!![ !<3J[^C$YU0_D   !D< !.KOW8(\    "D9]1.=4Y5  !2
MN0   F!3N0   =8@.0   =9*@&L8('D   '.4KD   '.("T "!" <@ 2$& :
M("T " *     _TAY   !RB\ 3KH+"E"/(@!.74YU3E4  $*Y   "8$AM  PO
M+0 (2'K_G$ZZ"D9/[P ,2'D   '*</\O $ZZ"M90CR Y   "8$Y=3G5.5?_X
M2.<!&"AM  @,N0   "    )D;   KG  $!0,@    "!G#@R     "6<&#   
M"F8$4HQ@XA 42@!G  "((#D   )DY8!2N0   F0@0-'\   ";"9($!0,   B
M9C)2C":,<  0%$J 9PP,@    ")G!%*,8.P0%$H 9@QP 2\ 3KH$T%B/8()"
M%%*,8 #_?":,<  0%$J 9QH,@    "!G$@R     "6<*#   "F<$4HQ@WA 4
M2@!F F (0A12C&  _TA*N0   F1F""!Y    2& &0?D   )L(\@   )H2KD 
M  )D9GHB>0   $@@:0 D<"@O "\H  1(>0   '!.N@%T3^\ #"\\   #[DAY
M    <$ZZ 2A0CR/    #$"/    #&'($(\$   ,4(\    ,@(\$   ,<Y8!"
MIR/    "\$ZZ /Y8CR!Y   "\") (V@ " "D?@ CP    NQ@+DZZ .PCP   
M Q!.N@#H(\    ,8+SP   /M2'D   "83KH NE"/(\    ,@?@0@!P"   " 
M 8&Y   ##" ' (   ( "@;D   ,4 +D  ( #   #'$JY    J&<$< !@!B \
M  "  "X (_D   ,0   !Q" ' (     !(\    ' (_D   ,8   !YB ' (  
M   "(\    'B(_D   ,@   """ ' (    " (\    ($0?H"WB/(    ,"\Y
M   ":"\Y   "9$ZZ "!0CT*G3KH D%B/3-\8@$Y=3G5.^0    !.^0   #!.
M^0    !.^0   &A.^0   '@ ;2YY    3$ZY   %Z"\\    %$ZY   %@$Y5
M__PO+0 (3KH+QEB/(&T "-' *TC__" M !!3K0 02H!O&B!M  P0$")M__P2
M@%*M  Q* &<&4JW__&#:(&W__$(0("T "$Y=3G5.5?_T*WP   &H__1*K?_T
M9T@@;?_T""@  @ ;9C(@;?_T""@  0 ;9R8@;?_T("@ !)"H ! K0/_X2H!G
M$B\ +R@ $"\H !Q.NA &3^\ #"!M__0K4/_T8+(O+0 (3KH",%B/3EU.=4JY
M     &840J=(>0   01.N@!04(\CP      C^0   %P   "X<"@O "\\    
M^G( +P$O 4AY    \"\!2'D   #6+P%.N@ 43^\ (' 4+P!.N@'46(].=0  
M3OD   "43OD   "L3E4  %*Y   "^" M  @@>0   O00@%*Y   "]$Y=3G5.
M50  0KD   +X(^T "    O1(;0 0+RT #$AZ_\1.N@923^\ #"!Y   "]$(0
M(#D   +X3EU.=2!O  @B;P $2AEF_%.)$MAF_" O  1.=4Y5__A*N0   OQG
M&B!Y   "_"\0+P@K2/_X3KH34%"/0KD   +\2JT "&8&< !.74YU6*T ""\M
M  A.N@W06(\K0/_\2H!F!G  3EU.=2!M__P@K0 (*TC_^%B(( A.74YU3E4 
M $*G8998CR!M  A9B"/(   "_'  3EU.=4Y5__0@;0 (68@@"") (A%9@2M 
M__PK0?_TL+D   +\9PA"IV$ _UQ8CR\M  QA /]26(\K0/_X2H!G+B M  PB
M+?_TLH!C!"M __0O+?_T+RT ""\M__A.N@F<3^\ #"\M  AA /]^6(\@+?_X
M3EU.=4JY     &840J=(>0   91.NOZ(4(\CP      C^0   %P   %4<#PO
M "\\    ^G( +P$O 4AY   !@$AY   !9DAY   !2"\!3KK^2$_O "!3@&<$
M</].=7  3G4  $Y5__A(YP$(?@!)^0   PR^N0   D1L'DJ49Q0(+  "  -G
M F *+RP !$ZZ"*!8CU*'4(Q@VB\M  PO+0 (3KKY%E"/3-\0@$Y=3G5.5?_$
M2.<@('  &WP (/_[<@ K0?_V=/\K0O_R0>W_T!M __$;0/_\&T#__1M __X;
M0/__*T'_Y"M!_^@K2/_,(&T "! 02@!G7G( $A!P( 2     "&M0LKL("&;R
M3OL(!@   "-@   R    (&   "(    K8   $@   "U@   "&WP  ?__8!@;
M?  !__Y@$!M\  '__6 (&WP  ?_\3G%2K0 (8)@@;0 ($! ,   P9@H;?  P
M__M2K0 ((&T "! 0#   *F82)&T #")26)(K4?_V4JT "& 22&W_]B\M  A.
MN@@>4(_1K0 ((&T "! 0#   +F8T4JT ""!M  @0$ P  "IF$B)M  P@45B1
M*U#_\E*M  A@$DAM__(O+0 (3KH'WE"/T:T ""!M  @0$ P  &QF"AM\  '_
M\5*M  @@;0 ($!!2K0 (&T#_\ *     _W(X!($    (:P ";+"[& AF\$[[
M& 8   !C8  "0    '-@  'X    6&   8(   !X8  !>@   &]@  $D    
M=6   /@   !D8    DHM__%G#")M  P@45B1(!!@"B)M  P@45B1(! K0/_L
M2H!J"G(!*T'_Z$2M_^Q*K?_H9P1P+6 ,2BW__F<$<"M@ G @&T#_T'  $"W_
M_B(M_^B"@'  $"W__8* 2H%G"%*M_\Q2K?_D+RW_["\M_\Q.N@>$4(\K0/_(
M2JW_\FH&< $K0/_R("W_R"(M__*2@"M!_\1*@6\T(&W_S-'!+P O+?_,+PA.
MN@:*3^\ #'  $"W_^R\M_\0O "\M_\Q.N@963^\ #"MM__+_R" M_\C1K?_D
M0>W_T"M(_\Q*+?__9P !4!M\ "#_^V   49*+?_Q9PPB;0 ,(%%8D2 08 HB
M;0 ,(%%8D2 0*T#_[&  _UA*+?_Q9PPB;0 ,(%%8D2 08 HB;0 ,(%%8D2 0
M*T#_[$HM__QG$B!M_\P0O  P4JW_S' !*T#_Y"\M_^PO+?_,3KH&_E"/*T#_
MR&  _QQ*+?_Q9PPB;0 ,(%%8D2 08 HB;0 ,(%%8D2 0*T#_[$HM__QG'B!M
M_\P0O  P4JW_S"!M_\P0O !X4JW_S' "*T#_Y"\M_^PO+?_,3KH'!%"/*T#_
MR PM %C_\&8 _KQ(;?_03KH'3%B/8 #^KB)M  P@45B1(E K2?_,L_P     
M9@@K?    A#_S"\M_\Q.N@406(\K0/_D2JW_\FLR(BW_\K"!;RHK0?_D8"1P
M 2M _^0B;0 ,(%%8D2 0&T#_T$(M_]%@"G  3-\$!$Y=3G4@+?_VL*W_Y&P&
M0JW_]F (("W_Y)&M__9*+?__9T)3K?_D("W_Y$J :QAP "!M_\P0$%*M_\PO
M "!M !!.D%B/8-Q3K?_V("W_]DJ :U1P ! M__LO "!M !!.D%B/8.)3K?_V
M("W_]DJ :Q)P ! M__LO "!M !!.D%B/8.)3K?_D("W_Y$J :QAP "!M_\P0
M$%*M_\PO "!M !!.D%B/8-P@+0 (3-\$!$Y=3G5.5?_V*VT $/_V(&T #! 0
M4JT #!M __\"@    /]*@&=\#(     E9C0@;0 ,$! ,   E9@92K0 ,8"(O
M+0 (2&W_]B\M  QA /LP3^\ #"M __I*@&<&*T  #&"L2KD    T9R0(+0 '
M__]G''  $"W__R\ (&T "$Z06(\@;0 ,&U#__U*M  QP ! M__\O "!M  A.
MD%B/8 #_;DY=3G5.5?_L*VT "/_T(&T #" H !@"@    #!*@&<&</].74YU
M(&T #" H !@"@   @ !6P40!2(%(P1M!__Y*J  49@  I@@H  ( &V8  )QP
M "%   P,K?____\ "&8$3EU.=2\M  Q.N@5<6(]*@&<0(&T # CH  4 &W#_
M3EU.=2!M  P(Z  ! !M*+?_^9PP@*  41( A0  ,8 H@;0 ,(6@ %  ,(&T 
M#%.H  P@*  ,2H!K%")H  12J  $("T "!* <@ 2$6 8("T " *     _R\M
M  PO &$ _R10CR( ( %.74YU(&T # @H  ( &V=T#*W_____  AF!G  3EU.
M=2 M  @;0/__2BW__F<L#(     *9B1P B\ 2'D   (4(&T #"\H !PK0/_P
M3KH$^D_O  PK0/_X8"!P 2\ 2&W__R!M  PO*  <*T#_\$ZZ!-A/[P ,*T#_
M^'#_*T  "&   2P@;0 ,""@    ;9P9P_TY=3G4@;0 ,".@  0 ;2BW__F=@
M#*W_____  AG5E2H  P,K0    H "&8F(F@ !%*H  02O  -2J@ #&L,+PAP
M_R\ 80#^1%"/(&T #%*H  PB;0 ,(&D !%*I  0@+0 ($(!*J0 ,:@1.74YU
M</\K0  ((&T #" H  20J  0*T#_\$J 9P  D @H  8 &F=H< (O $*G+R@ 
M'$ZZ")Q/[P ,*T#_[$HM__YG3%.M_^P@+?_L2H!K0$*G+P @;0 ,+R@ '$ZZ
M"')/[P ,< $O $AM__T@;0 ,+R@ '$ZZ!$)/[P ,2KD    89@P0+?_]#   
M&F>V3G$O+?_P(&T #"\H ! O*  <3KH#JD_O  PK0/_X8 1"K?_X#*W_____
M__AF#"!M  P(Z  % !M@%" M__BPK?_P9PH@;0 ,".@ !  ;2BW__F<0(&T 
M#" H !1$@"%   Q@"B!M  PA:  4  PB;0 ,(&D $"-(  0@+0 (#(#_____
M9S13J0 ,(BD #$J!:Q @:0 $4JD !!" <@ 2$& 8("T " *     _R\M  PO
M &$ _-Y0CR( (&T #" H !@"@    #!*@&<&</].74YU#*W_______1F!G  
M3EU.=2 M__1.74YU3E4  $JY    ,&<$3KH*:B\M  A.N@ *6(]P $Y=3G5.
M^0   !P  "!O  0,&   9OI3B)'O  0@"$YU(&\ !" O  QO"B(O  @0P5. 
M9OH@+P $3G4  "!O  @B;P $("\ #&\6L\AE#-' T\ 3(%. 9OI@!A+84X!F
M^B O  1.=0  3E7_\'  (&T "!(0*T#__"M __@K0/_P# $ +68,< $K0/_X
M*T#_\& 2(&T "! 0#   *V8&< $K0/_X(&T "-'M__AP ! 0+P!.N@+06(]*
M@&<H("W__'(*3KH'C"!M  C1[?_X4JW_^'( $A $@0   ##0@2M __Q@P$JM
M__!G!$2M__P@;0 ,(*W__" M__A.74YU  !.5?_P< LK0/_P0BW__U.M__ @
M+0 ,<@I.N@>(!H$    P("W_\!N!"/0@+0 ,<@I.N@=P*T  #$JM  QFT$'M
M__31[?_P+P@O+0 (3KH"6E"/< N0K?_P3EU.=4Y5__!P"RM __!"+?__4ZW_
M\" M  P"@     <&@    # B+?_P&X 8]" M  SF@ * '____RM   Q*K0 ,
M9LY![?_TT>W_\"\(+RT "$ZZ ?Q0CW +D*W_\$Y=3G4  $Y5__)"+?_[< @K
M0/_\4ZW__" M  P"@     \@0-'\   "&" M__P;D CS("T #.B  H /____
M*T  #$JM  QFS$'M__/1[?_\+P@O+0 (3KH!FE"/< B0K?_\3EU.=4Y5__PK
M;0 (__P@;?_\2A!G&'  $! O $ZZ 898CR!M__P0@%*M__Q@X" M  A.74YU
M  !.50  (&T "$JH !1G#@@H  , &V8&< !.74YU+SD   (L3KH!8%B/(&T 
M""%   0A0  02H!F#G ,(\    )(</].74YU(&T ""%Y   "+  4 JC____S
M !AP "%   PA0  (3EU.=4Y5_^HO+0 (3KH%+EB/*T#_ZDJ 9@9P_TY=3G4@
M;?_J""@  P #9Q)P B\ 0J<O+0 (3KH"2$_O  PO+0 0+RT #"!M_^HO*  $
M3KH!U$_O  PK0/_Z2KD    89P9P_TY=3G4@+?_Z3EU.=4Y5__Q(YP$ 2KD 
M   P9P1.N@<F0KD    8+RT $"\M  PO+0 (3KH ,D_O  PN  R'_____V82
M3KH &B/     &' %(\    )(( =,WP" 3EU.=4[Y    I$[Y    ,$Y5   @
M+0 (#(     P;0P,@    #EN!' !8 )P $Y=3G4  "!O  @B;P $$MAF_" O
M  1.=0  ("\ ! P  &%M"@P  'IN! 0  "!.=0  3E4  "\M  AA!EB/3EU.
M=4Y5_^Q(YR<X+BT "$J';@IP $S?'.1.74YU#(<    (; )^"" '5H#D@.6 
M+@!'^0   E@H4[G\     &=:("P !+"'94RPAV86)I2?N0   EP@#"!,( A,
MWQSD3EU.=2 L  20APR     "&4D(@P@3-'') @D0B24)4  !":*G[D   )<
M($P@"$S?'.1.74YU)DPH5&">( <B.0   CS0@5. 3KH#YB(Y   "/$ZZ [Q0
M@"H ( 56@.2 Y8 J "\%3KH U%B/+ !*AF<:+P4O!DZZ!'Q0CR\'80#_)%B/
M3-\<Y$Y=3G5P $S?'.1.74YU  !.5?_\2.<! $JY    ,&<$3KH%<D*Y    
M&"\M ! O+0 ,+RT "$ZZ "Q/[P ,+@ ,A_____]F$DZZ_F8CP    !AP!2/ 
M   "2" '3-\ @$Y=3G5.^0   $P 7TY5__HO+0 (3KH"LEB/2H!F!G#_3EU.
M=2\M ! O+0 ,+RT "$ZZ >)/[P ,*T#_^DJY    &&<&</].74YU("W_^DY=
M3G4  $Y5__P@+0 (!H     ,0J<O $ZZ :90CRM __Q*@&8&< !.74YU(&W_
M_" M  @&@     PA0  (+PA(>0   P!A  $P4(]*N0   DQF""/M__P   ),
M(&W__-#\  P@"$Y=3G5.5?_\+RT "&&26(\K0/_\2H!G!$Y=3G4@?/____\@
M"$Y=3G5.5?_X2.<!"&$  *!P "/     $"/     ""/     #"/    "6"/ 
M   "7"/    "4"/    "3"/    "5$JY   "0&=:(#D   (\(CD   ) TH!3
M@2 !(CD   (\3KH"#"(Y   "/$ZZ >)0@"X ( =6@.2 Y8 N "\'80#^^EB/
M*$"Y_     !F"G#_3-\0@$Y=3G4O!R\,3KH"E%"/< !,WQ" 3EU.=4Y5__@K
M>0   P#__$JM__QG'"!M__PK4/_X+R@ ""\(3KH 8%"/*VW_^/_\8-Z1R"/(
M   #!"/(   # $Y=3G5.50  (&T "")M  PC:  $  21R"*((&T "$J09@(@
MB2!M  A*J  $9P@@:  $(*T #"!M  @A;0 ,  1.74YU  !.^0   !A.^0  
M  !.5?_\2.<! $JY    ,&<$3KH##D*Y    &" M !#E@"! T?P   (P+Q O
M+0 ,+RT "$ZZ 'A/[P ,+@ ,A_____]F$DZZ^_8CP    !AP%B/    "2" M
M ! ,@     )G)@R      6<02H!F-" M  Q,WP" 3EU.=2 'T*T #$S? (!.
M74YU<  O "\ +RT "$ZZ !A/[P ,3-\ @$Y=3G5,WP" 3EU.=0  3OD   "(
MD&].5?_\<  CP    !@K0/_\("W__+"Y   "1&PTYX @0-'\   ##$J09R @
M0-'\   ##"(H  2RK0 (9@X@0-'\   ##" (3EU.=5*M__Q@P' )(\    )(
M< !.74YU   @0B)#)  F 4A"2$/$P<; P,'40TA"0D+0@B8)) A.=4J :@  
M'D2 2H%J   ,1(%A   @1(%.=6$  !A$@$2!3G5*@6H   Q$@6$   9$@$YU
M+P)(030!9@  (DA 2$%(0C0 9P  !H3!, )(0#0 A,$P DA",@(D'TYU+P-V
M$ Q! (!D   &X9E10PQ!" !D   &Z9E90PQ!( !D   &Y9E50TI!:P  !N.9
M4T,T .:H2$)"0N:J2$. P38 , (T TA!Q,&0@F0   A30]"!9/YR #(#2$/G
MN$A P4$F'R0?3G5.5?_\("T #"\ +RT ""M __QA!E"/3EU.=4Y5_^A(YP,X
M+BT #$J';@IP_TS?',!.74YU#(<    (; )^"" '5H#D@.6 +@ D;0 ((&T 
M"-''( @L -^Y   "7$?Y   "6"A3N?P     9P  IB ,($S1[  $(@@K0?_L
ML(9C$B2,)4< !":*< !,WQS 3EU.=;G&9A@DE" 'T*P !"5   0FBG  3-\<
MP$Y=3G6U[?_L9!"?N0   EQP_TS?',!.74YUM>W_[&8Z2I1G%+R48Q"?N0  
M EQP_TS?',!.74YUWZP !$J49Q"\E&8,($8@*  $T:P !"B0< !,WQS 3EU.
M=29,*VW_[/_H*%1@ /]4)HJ1R"2()4< !" (3-\<P$Y=3G4  $Y5__PO/   
M, !"ITZZ $I0CP*    P "M __Q*@&8&< !.74YU2KD    P9QX@>0   #!.
MD$J 9@9P $Y=3G5"IW 4+P!.NNQT4(\@+?_\3EU.=6&J3G5.^0   $0Z&@  
M ^P    !     0  !0H    $    "0  !\@   >R   &    !>H    $    
M%P  !20   4P   !>@   5X   "M    &   &X0  !M\   ;    &N(  !J*
M   :A   &3P  !DH   9%@  &0H  !C^   8\   &(8  !A^   82@  &#X 
M !A8   78   %U8  !=$   72@  %SP  !<D   7'@  %Q@  !<2   7#   
M%S8  !<P   7*@  %L8  !:\   7W@  %]@  !>L   6L   %EX  !86   6
M#@  %>8  !7:   5A@  %7@  !5>   5*@  %0P  !1B   46@  %#(  !0F
M   4"   $X0  !.4   39@  $M0  !#B   /X@  #J0   U"   +Z   ""( 
M  @<   'S@  !_0   ?N   'Z   !](   >\   '6@  !S0   ;B   &S@  
M!L8   :@   &F   !GX   9V   &:   !F    96   &!@  !B@   8@   &
M"@  !?0   6&   %'@  !-8   3,   $O@  !+0   2F   $G   !(X   1V
M   $N@  !*(   2*   $<   !&8   18   $2   !#    0F   #]    ^X 
M  /H   #X    ]H   .H   #C   !.(   3<   $&@  ! H   /^   #H   
M YH   .4   #A    PX   ,&   "_@   LX   0\   #S@   [H   *D   "
M<@   E8   )0   "1@   D    *T   "B@   CH   &J   !H@   9@   &0
M   !6    4    (L   !A@   .X   (@   !_    ?    ':   !S@   <8 
M  &\   !M    8    %N   !.@   2X   $F   !%    /H   #>    T   
M )P   "6    ?    '(   !,    .    "@    B    '     @    "    
M"    !D  !CB   6)@  %'(  !1X   0_@  !18   40   $_@    8    :
M   ;K@  &"H  !@P   &3   !00   !8     0   !P   9&         _  
M   #7T-H:U]!8F]R=      ;J     -?8VAK86)O<G0      !M4     E]R
M;'-M;      :1@    )?<FQS;65M    &BP    "7T-81#,S     !EH    
M E]#6$0R,@     9F@    )?0UA-,C(     &4@    "7T-833,S     !E(
M     E]C:&MU9F(    8Z     )?9'-E96L     &#0    #7TUE;4-L96%N
M=7     7I@    )?<F)R:P      %OP    "7W-B<FL      !;8     E]L
M<V)R:P     6=     )?;'-E96L     %BP    "7V1W<FET90   !70    
M E]G971M;      4W     )?9V5T;65M    %,P    "7W1O=7!P97(  !2T
M     E]S=')C<'D    4H     )?:7-D:6=I=   %'P    "7V1R96%D    
M !0<     E]W<FET90     3L     )?7V=E=&)F    $T@    "7W-T<G5P
M<@   !,4     E]S=&-L7V@    2M     )?<W1C;%]O    $E0    "7W-T
M8W5L7V0  !'X     E]S=&-D7VD    18     )?;65M8W!Y    $30    "
M7VUE;7-E=    !$8     E]S=')L96X    1!     )?<W1C;&5N    $00 
M   "7V1C;&]S90   !#<     E]?9FQS8F8    -A     %?7W!F   ,X@  
M  )?7W!F;70     "%P    "7U]E>&ET      @0     E]#6$)22P     '
ML     )?<F5A;&QO8P  !SX    "7V9R964       <B     E]M86QL;V, 
M   &P     )?<W1R8V%T    !J@    "7W-P<FEN=&8   9P     E]C>&]V
M9@     %Z     )?97AI=       !8     "7W-T<FYC870   4T     E]?
M;6%I;@     "O     )?<')I;G1F     H0        #\@   ^H   "8    
M                                                            
M                                                            
M         &1O<RYL:6)R87)Y &-O;CHQ,"\Q,"\S,C O.# O            
M                   J                      "  /__    #@ .    
M            *BH@4W1A8VL@3W9E<F9L;W<@*BH  /__    !  $        
M ,    "L15A)5   __\    $  0         Z@    !I;G1U:71I;VXN;&EB
M<F%R>0   "HJ(%5S97(@06)O<G0@4F5Q=65S=&5D("HJ  #__P    X #@  
M      $8     /__    !  $              $T0T].5$E.544  /__    
M!  $         5P     04)/4E0 __\    $  0        !>@    !I;G1U
M:71I;VXN;&EB<F%R>0       <H                                 
M          'L                                                
M                                              T*   P,3(S-#4V
M-S@Y86)C9&5F         @#_____          $   0          !0     
M                              /L    "0   !@   '*   !J    8P 
M  %R   !6    4    #\    Y@   .(        #\     )?7VUE;'0     
M E@    "7U]P;V]L      ),     E]E<G)N;P     "2     )?7W5F8G, 
M     PP    "7U]N=69B<P    )$     E]?34Y%140    "0     )?7VUS
M=&5P     CP    #7U]-96U,:7-T       #      )?7V)U9G-I>@   BP 
M   "7U]I;V(       &H     E]?9FUO9&4     J     )?1$]30F%S90  
M *0    $7TUA=&A4<F%N<T)A<V4      *     #7TUA=&A"87-E        
MG     )?87)G=@       FP    "7W1A<F=V      )H     E]A<F=C    
M   "9         /R   #Z0   "U(YR "+'D   "D3.\ !@ ,3J[_XDS?0 1.
M=0  +PXL>0   *0B+P (3J[_W"Q?3G5(YS "+'D   "D3.\ #@ 03J[_UDS?
M0 Q.=0  2.<P BQY    I$SO  X $$ZN_]!,WT ,3G4  "\.+'D   "D3J[_
MRBQ?3G4O#BQY    I$ZN_\0L7TYU2.<P BQY    I$SO  X $$ZN_[Y,WT ,
M3G4  "\.+'D   "D3J[_?"Q?3G4   /L    "    !@   "H    C@   'P 
M  !L    4@   #8    @    !@        /P     E]);T5R<@      I   
M  )?4V5E:P       (@    "7T]U='!U=     !X     E]);G!U=       
M:     )?5W)I=&4      $P    "7U)E860        P     E]#;&]S90  
M    '     )?3W!E;@                 #\@   ^D    Q+PXL>0   $!,
M[P #  A.KO\Z+%].=0  +PXL>0   $ B;P (("\ #$ZN_RXL7TYU+PXL>0  
M $ B;P (3J[^VBQ?3G4O#BQY    0$SO  , "$ZN_LXL7TYU   O#BQY    
M0" O  A.KO["+%].=2\.+'D   ! (&\ "$ZN_HPL7TYU+PXL>0   $ B;P (
M3J[^ABQ?3G4O#BQY    0")O  A.KOYB+%].=2\.+'D   ! (F\ "" O  Q.
MKOW8+%].=0   ^P    )    &    +    "<    B    '0   !@    2   
M #0    <    !         /P     U]/<&5N3&EB<F%R>0   *P    $7T-L
M;W-E3&EB<F%R>0       )@    #7U)E<&QY37-G        A     )?1V5T
M37-G     '     "7U=A:70       !<     U]39713:6=N86P      $0 
M   #7T9I;F1487-K        ,     )?1G)E94UE;0   !@    #7T%L;&]C
M365M                  /R   #Z0   !PO#BQY    !")O  @@;P ,("\ 
M$$ZN_\0L7TYU+PXL>0    0B;P (3.\  P ,3J[_$"Q?3G4  $CG, (L>0  
M  0B;P 03.\ #P 43J[^SDS?0 Q.=0  +PXL>0    0B;P (("\ #$ZN_JHL
M7TYU   #[     0    )    7    #X    @    !         /P     E]3
M971!4&5N    6     -?4F5C=$9I;&P        X     E]-;W9E        
M'     )?5&5X=                  #\@   ^D    R+PXL>0    !,[P, 
M  @@+P 03J[_UBQ?3G4  "\.+'D     (&\ "$ZN_[@L7TYU+PXL>0     @
M;P (3J[_-"Q?3G4O#BQY     $SO P  "$SO  , $$ZN_R@L7TYU2.< (BQY
M     $SO!P  #$ZN_R),WT0 3G4  "\.+'D     3.\#   (3J[_'"Q?3G4 
M $CG,#(L>0     @;P 8(F\ '"1O " F;P D("\ *"(O "PD+P P)B\ -$ZN
M_J1,WTP,3G4   /L    !P    D   ":    @    &8   !(    -    "  
M   $         _     #7T%U=&]297%U97-T    E     1?4F5M;W9E1V%D
M9V5T        ?     1?4F5F<F5S:$=A9&=E=',     8     -?4')I;G1)
M5&5X=     !$     U]/<&5N5VEN9&]W     #     #7T-L;W-E5VEN9&]W
@    '     -?061D1V%D9V5T                 _(#
 
end


-- 
UUCP:  kim@amdahl.amdahl.com
  or:  {sun,decwrl,hplabs,pyramid,ihnp4,seismo,oliveb,cbosgd}!amdahl!kim
DDD:   408-746-8462
USPS:  Amdahl Corp.  M/S 249,  1250 E. Arques Av,  Sunnyvale, CA 94086
CIS:   76535,25

[  Any thoughts or opinions which may or may not have been expressed  ]
[  herein are my own.  They are not necessarily those of my employer. ]