page%swap@Sun.COM (Bob Page) (05/12/89)
Submitted-by: d84sp@efd.lth.se (/Stefan Parmark) Posting-number: Volume 89, Issue 136 Archive-name: intuition/scanner.1 Scanner makes commented C code of all intuition structures in memory. The structures will receive correct pointers towards each other. Scanner starts looking at IntuitionBase, and follows all pointers, storing them in memory. When finished, scanner writes it all to stdout. Since a structure may be referenced from more than one spot, I made sure it would never look at it more than once. [uuencoded executable included. ..bob] # This is a shell archive. # Remove anything above and including the cut line. # Then run the rest of the file through 'sh'. # Unpacked files will be owned by you and have default permissions. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: SHell ARchive # Run the following text through 'sh' to create: # Makefile # README # TODO # scanner.c # scanner.h # scanner.uu # This is archive 1 of a 1-part kit. # This archive created: Thu May 11 20:13:44 1989 echo "extracting Makefile" sed 's/^X//' << \SHAR_EOF > Makefile XCFLAGS = -cef -v X Xscanner: scanner.o X blink LIB:c.o scanner.o TO scanner LIB LIB:lc.lib \ X LIB:amiga.lib SC SD ND X Xscanner.o: scanner.c scanner.h X Xclean: X delete scanner.o scanner SHAR_EOF echo "extracting README" sed 's/^X//' << \SHAR_EOF > README XScanner is in the public domain. Do whatever you like with it. XI assume no responsiblity for its use. X XThis is a little program I wrote when I wanted to find out Xhow requesters worked. I started Deluxe Paint II, activated Xthe interesting requester, and let scanner make a copy of it all. X XScanner makes commented C code of all intuition structures in memory. XThe structures will receive correct pointers towards each other. XScanner starts looking at IntuitionBase, and follows all pointers, Xstoring them in memory. When finished, scanner writes it all to stdout. XSince a structure may be referenced from more than one spot, I made Xsure it would never look at it more than once. X XIt is quite useful if you want to are a beginner, and want to make Xthings work right away. X XI never finished scanner, because it had all I needed at the time. XIt should be quite easy to complete the job. X X/Stefan Parmark Xd84sp@efd.lth.se SHAR_EOF echo "extracting TODO" sed 's/^X//' << \SHAR_EOF > TODO XExpand flags to their #define names, i.e. gadget->Flags = 0x0081 becomes Xgadget->Flags = GADGHBOX | SELECTED. This makes the code easier to read. X XComplete all structures. For instance, screens are never scanned or listed. X XProvide a way to comfortably select the interesting structures. Scanner Xcurrently lists ALL structures, even those you aren't interested in. SHAR_EOF echo "extracting scanner.c" sed 's/^X//' << \SHAR_EOF > scanner.c X/* scanner.c */ X X#include <exec/types.h> X#include <exec/memory.h> X#include <intuition/intuitionbase.h> X#include <proto/exec.h> X#include <proto/graphics.h> X#include <proto/intuition.h> X#include <string.h> X#include <stdio.h> X X#include "scanner.h" X X#define VERSION "1.0" X Xstatic struct structList structlist[MAXSTRUCTURE]; X X Xvoid main(argc, argv) Xint argc; XBYTE *argv[]; X{ X extern struct GfxBase *GfxBase; X extern struct IntuitionBase *IntuitionBase; X X GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 1); X IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library", 1); X X ScanScreens(IntuitionBase->FirstScreen); X X ListBitMaps(); X ListBoolInfos(); X ListBorders(); X ListGadgets(); X ListImages(); X ListIntuiMessages(); X ListIntuiTexts(); X ListKeyMaps(); X ListLayers(); X ListMenus(); X ListMsgPorts(); X ListPropInfos(); X ListRastPorts(); X ListRequesters(); X ListScreens(); X ListStringInfos(); X ListTextFonts(); X ListWindows(); X X EraseStructList(); X X CloseLibrary((struct Library *)IntuitionBase); X CloseLibrary((struct Library *)GfxBase); X} X X Xvoid ScanBitMaps(bitmap) Xregister struct BitMap *bitmap; X{ X WORD bitmapno; X X if (bitmap != NULL) X bitmapno = BitMapNumber(bitmap); X} X X Xvoid ScanBoolInfos(boolinfo) Xregister struct BoolInfo *boolinfo; X{ X} X X Xvoid ScanBorders(border) Xregister struct Border *border; X{ X WORD borderno; X X while (border != NULL) X { X borderno = BorderNumber(border); X X border = border->NextBorder; X } X} X X Xvoid ScanGadgets(gadget) Xregister struct Gadget *gadget; X{ X WORD gadgetno, gadgetrenderno, selectrenderno, X gadgettextno, specialinfono, gadgettype; X X while (gadget != NULL) X { X gadgetno = GadgetNumber(gadget); X X if (gadget->Flags & GADGIMAGE) X { X gadgetrenderno = ImageNumber(gadget->GadgetRender); X selectrenderno = ImageNumber(gadget->SelectRender); X } X else X { X gadgetrenderno = BorderNumber(gadget->GadgetRender); X selectrenderno = BorderNumber(gadget->SelectRender); X } X gadgettextno = IntuiTextNumber(gadget->GadgetText); X gadgettype = gadget->GadgetType & 0x0F; X if (gadgettype == GADGET0002) X specialinfono = BoolInfoNumber(gadget->SpecialInfo); X else if (gadgettype == PROPGADGET) X specialinfono = PropInfoNumber(gadget->SpecialInfo); X else if (gadgettype == STRGADGET) X specialinfono = StringInfoNumber(gadget->SpecialInfo); X else X specialinfono = 0; X X if (gadget->Flags & GADGIMAGE) X { X if (Fresh(gadgetrenderno)) ScanImages((struct Image *)gadget->GadgetRender); X if (Fresh(selectrenderno)) ScanImages((struct Image *)gadget->SelectRender); X } X else X { X if (Fresh(gadgetrenderno)) ScanBorders((struct Border *)gadget->GadgetRender); X if (Fresh(selectrenderno)) ScanBorders((struct Border *)gadget->SelectRender); X } X if (Fresh(gadgettextno)) ScanIntuiTexts(gadget->GadgetText); X if (Fresh(specialinfono)) X { X if (gadgettype == GADGET0002) X ScanBoolInfos((struct BoolInfo *)gadget->SpecialInfo); X else if (gadgettype == PROPGADGET) X ScanPropInfos((struct PropInfo *)gadget->SpecialInfo); X else if (gadgettype == STRGADGET) X ScanStringInfos((struct StringInfo *)gadget->SpecialInfo); X } X X gadget = gadget->NextGadget; X } X} X X Xvoid ScanImages(image) Xregister struct Image *image; X{ X WORD imageno; X X while (image != NULL) X { X imageno = ImageNumber(image); X X image = image->NextImage; X } X} X X Xvoid ScanIntuiMessages(intuimessage) Xregister struct IntuiMessage *intuimessage; X{ X} X X Xvoid ScanIntuiTexts(intuitext) Xregister struct IntuiText *intuitext; X{ X WORD intuitextno, itextfontno; X X while (intuitext != NULL) X { X intuitextno = IntuiTextNumber(intuitext); X X itextfontno = TextAttrNumber(intuitext->ITextFont); X X if (Fresh(itextfontno)) ScanTextAttrs(intuitext->ITextFont); X X intuitext = intuitext->NextText; X } X} X X Xvoid ScanKeyMaps(keymap) Xregister struct KeyMap *keymap; X{ X} X X Xvoid ScanLayers(layer) Xregister struct Layer *layer; X{ X} X X Xvoid ScanMenus(menu) Xregister struct Menu *menu; X{ X} X X Xvoid ScanMsgPorts(msgport) Xregister struct MsgPort *msgport; X{ X} X X Xvoid ScanPropInfos(propinfo) Xregister struct PropInfo *propinfo; X{ X} X X Xvoid ScanRastPorts(rastport) Xregister struct RastPort *rastport; X{ X} X X Xvoid ScanRequesters(requester) Xregister struct Requester *requester; X{ X WORD requesterno, olderrequestno, reqgadgetno, reqborderno, reqtextno, X reqlayerno, imagebmapno, rwindowno; X X if (requester != NULL) X { X requesterno = RequesterNumber(requester); X X olderrequestno = RequesterNumber(requester->OlderRequest); X reqgadgetno = GadgetNumber(requester->ReqGadget); X reqborderno = BorderNumber(requester->ReqBorder); X reqtextno = IntuiTextNumber(requester->ReqText); X reqlayerno = LayerNumber(requester->ReqLayer); X imagebmapno = BitMapNumber(requester->ImageBMap); X rwindowno = WindowNumber(requester->RWindow); X X if (Fresh(olderrequestno)) ScanRequesters(requester->OlderRequest); X if (Fresh(reqgadgetno)) ScanGadgets(requester->ReqGadget); X if (Fresh(reqborderno)) ScanBorders(requester->ReqBorder); X if (Fresh(reqtextno)) ScanIntuiTexts(requester->ReqText); X if (Fresh(reqlayerno)) ScanLayers(requester->ReqLayer); X if (Fresh(imagebmapno)) ScanBitMaps(requester->ImageBMap); X if (Fresh(rwindowno)) ScanWindows(requester->RWindow); X } X} X X Xvoid ScanScreens(screen) Xregister struct Screen *screen; X{ X WORD screenno, windowno; X X while (screen != NULL) X { X screenno = ScreenNumber(screen); X X windowno = WindowNumber(screen->FirstWindow); X X if (Fresh(windowno)) ScanWindows(screen->FirstWindow); X X screen = screen->NextScreen; X } X} X X Xvoid ScanStringInfos(stringinfo) Xregister struct StringInfo *stringinfo; X{ X WORD stringinfono, layerptrno, altkeymapno; X X if (stringinfo != NULL) X { X stringinfono = StringInfoNumber(stringinfo); X X layerptrno = LayerNumber(stringinfo->LayerPtr); X altkeymapno = KeyMapNumber(stringinfo->AltKeyMap); X X if (Fresh(layerptrno)) ScanLayers(stringinfo->LayerPtr); X if (Fresh(altkeymapno)) ScanKeyMaps(stringinfo->AltKeyMap); X } X} X X Xvoid ScanTextAttrs(textattr) Xregister struct TextAttr *textattr; X{ X} X X Xvoid ScanTextFonts(textfont) Xregister struct TextFont *textfont; X{ X} X X Xvoid ScanWindows(window) Xregister struct Window *window; X{ X WORD windowno, menustripno, firstrequestno, dmrequestno, rportno, X borderrportno, firstgadgetno, parentwindowno, descendantwindowno, X userportno, windowportno, messagekeyno, checkmarkno, wlayerno, X ifontno, wscreenno; X X while (window != NULL) X { X windowno = WindowNumber(window); X X menustripno = MenuNumber(window->MenuStrip); X firstrequestno = RequesterNumber(window->FirstRequest); X dmrequestno = RequesterNumber(window->DMRequest); X wscreenno = ScreenNumber(window->WScreen); X rportno = RastPortNumber(window->RPort); X borderrportno = RastPortNumber(window->BorderRPort); X firstgadgetno = GadgetNumber(window->FirstGadget); X parentwindowno = WindowNumber(window->Parent); X descendantwindowno = WindowNumber(window->Descendant); X userportno = MsgPortNumber(window->UserPort); X windowportno = MsgPortNumber(window->WindowPort); X messagekeyno = IntuiMessageNumber(window->MessageKey); X checkmarkno = ImageNumber(window->CheckMark); X wlayerno = LayerNumber(window->WLayer); X ifontno = TextFontNumber(window->IFont); X X if (Fresh(menustripno)) ScanMenus(window->MenuStrip); X if (Fresh(firstrequestno)) ScanRequesters(window->FirstRequest); X if (Fresh(dmrequestno)) ScanRequesters(window->DMRequest); X if (Fresh(wscreenno)) ScanScreens(window->WScreen); X if (Fresh(rportno)) ScanRastPorts(window->RPort); X if (Fresh(borderrportno)) ScanRastPorts(window->BorderRPort); X if (Fresh(firstgadgetno)) ScanGadgets(window->FirstGadget); X if (Fresh(parentwindowno)) ScanWindows(window->Parent); X if (Fresh(descendantwindowno)) ScanWindows(window->Descendant); X if (Fresh(userportno)) ScanMsgPorts(window->UserPort); X if (Fresh(windowportno)) ScanMsgPorts(window->WindowPort); X if (Fresh(messagekeyno)) ScanIntuiMessages(window->MessageKey); X if (Fresh(checkmarkno)) ScanImages(window->CheckMark); X if (Fresh(wlayerno)) ScanLayers(window->WLayer); X if (Fresh(ifontno)) ScanTextFonts(window->IFont); X X window = window->NextWindow; X } X} X X XBYTE Fresh(number) Xregister WORD number; X{ X register BYTE fresh; X X fresh = (number != 0 && ((number & FOUND) == 0)); X X return(fresh); X} X X XWORD structNumber(structure, structurekind) Xregister APTR structure; Xregister WORD structurekind; X{ X register WORD number; X register BYTE found; X register struct structList *structitem; X struct structList *newstruct; X extern struct structList structlist[MAXSTRUCTURE]; X X if (structure == NULL) X number = 0; X else X { X structitem = structlist[structurekind].next; X found = FALSE; X while (structitem != NULL && !found) X { X if (structitem->structure == structure) X found = TRUE; X else X structitem = structitem->next; X } X X if (found) X number = structitem->number | FOUND; X else X { X number = ++(structlist[structurekind].number); X X newstruct = (struct structList *)AllocMem( X sizeof(struct structList), MEMF_PUBLIC); X newstruct->next = structlist[structurekind].next; X newstruct->structure = (APTR)structure; X newstruct->number = number; X structlist[structurekind].next = newstruct; X } X } X X return(number); X} X X Xvoid EraseStructList() X{ X register WORD structurekind; X register struct structList *structitem, *nextstructitem; X extern struct structList structlist[MAXSTRUCTURE]; X X for (structurekind = 0; structurekind < MAXSTRUCTURE; structurekind++) X { X structitem = structlist[structurekind].next; X while (structitem != NULL) X { X nextstructitem = structitem->next; X FreeMem((BYTE *)structitem, sizeof(struct structList)); X structitem = nextstructitem; X } X } X} X X XUBYTE *APTRName(name) Xregister UBYTE *name; X{ X static UBYTE string[40]; X X if (strcmp(name, "NULL") == 0) X strcpy(string, name); X else X { X strcpy(string, "(APTR)"); X strcat(string, name); X } X X return(string); X} X X XUBYTE *structName(number, structurekind) Xregister WORD number, structurekind; X{ X static UBYTE string[40]; X static UBYTE *structname[MAXSTRUCTURE] = X { X "bitmap", X "boolinfo", X "border", X "gadget", X "image", X "intuimessage", X "intuitext", X "keymap", X "layer", X "menu", X "msgport", X "propinfo", X "rastport", X "requester", X "screen", X "stringinfo", X "textattr", X "textfont", X "window" X }; X X if (number == 0) X strcpy(string, "NULL"); X else X sprintf(string, "&%s%d", structname[structurekind], NUMBER(number)); X X return(string); X} X X XUBYTE *TitleName(title) Xregister UBYTE *title; X{ X static UBYTE string[100]; X X if (string == NULL) X strcpy(string, "NULL"); X else X sprintf(string, "\"%s\"", title); X X return(string); X} X X XUBYTE *MemoryName(memorypos) Xregister APTR memorypos; X{ X static UBYTE string[20]; X X if (memorypos == NULL) X strcpy(string, "NULL"); X else X sprintf(string, "0x%X", memorypos); X X return(string); X} X X Xvoid ListBitMaps() X{ X register struct BitMap *bitmap; X register struct structList *structitem; X register WORD plane; X WORD bitmapno; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[BITMAP_KIND].next; X X while (structitem != NULL) X { X bitmap = (struct BitMap *)structitem->structure; X bitmapno = structitem->number; X X printf("struct BitMap bitmap%d =\n", bitmapno); X printf("{\n"); X printf(" %d,\011/* BytesPerRow */\n", bitmap->BytesPerRow); X printf(" %d,\011/* Rows */\n", bitmap->Rows); X printf(" 0x%X,\011/* Flags */\n", bitmap->Flags); X printf(" %d,\011/* Depth */\n", bitmap->Depth); X printf(" %d,\011/* Pad */\n", bitmap->pad); X printf(" {\011/* Planes */\n"); X for (plane = 0; plane < 7; plane++) X printf(" %s,\n", MemoryName((APTR)(bitmap->Planes[plane]))); X printf(" %s\n", MemoryName((APTR)(bitmap->Planes[7]))); X printf(" }\n"); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListBoolInfos() X{ X register struct BoolInfo *boolinfo; X register struct structList *structitem; X WORD boolinfono; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[BOOLINFO_KIND].next; X X while (structitem != NULL) X { X boolinfo = (struct BoolInfo *)structitem->structure; X boolinfono = structitem->number; X X printf("struct BoolInfo boolinfo%d =\n", boolinfono); X printf("{\n"); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListBorders() X{ X register struct Border *border; X register struct structList *structitem; X WORD borderno, xyno, nextborderno; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[BORDER_KIND].next; X X while (structitem != NULL) X { X border = (struct Border *)structitem->structure; X borderno = structitem->number; X X xyno = NUMBER(borderno); X nextborderno = BorderNumber(border->NextBorder); X X if (border->XY != NULL) X { X printf("WORD xypair%d[%d] =\n", xyno, 2 * border->Count); X PrintWords("%d", " ", "{", border->XY, "};", (WORD)(2 * border->Count), 8); X } X X printf("struct Border border%d =\n", borderno); X printf("{\n"); X printf(" %d, %d,\011/* LeftEdge, TopEdge */\n", border->LeftEdge, X border->TopEdge); X printf(" %d, %d,\011/* FrontPen, BackPen */\n", border->FrontPen, X border->BackPen); X printf(" 0x%X,\011/* DrawMode */\n", border->DrawMode); X printf(" %d,\011/* Count */\n", border->Count); X if (border->XY == NULL) X printf(" NULL"); X else X printf(" &xypair%d[0]", xyno); X printf(",\011/* XY */\n"); X printf(" %s\011/* NextBorder */\n", BorderName(nextborderno)); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListGadgets() X{ X register struct Gadget *gadget; X register struct structList *structitem; X WORD gadgetno, nextgadgetno, gadgetrenderno, selectrenderno, X gadgettextno, specialinfono, gadgettype; X UBYTE *name; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[GADGET_KIND].next; X X while (structitem != NULL) X { X gadget = (struct Gadget *)structitem->structure; X gadgetno = structitem->number; X X nextgadgetno = GadgetNumber(gadget->NextGadget); X if (gadget->Flags & GADGIMAGE) X { X gadgetrenderno = ImageNumber(gadget->GadgetRender); X selectrenderno = ImageNumber(gadget->SelectRender); X } X else X { X gadgetrenderno = BorderNumber(gadget->GadgetRender); X selectrenderno = BorderNumber(gadget->SelectRender); X } X gadgettextno = IntuiTextNumber(gadget->GadgetText); X gadgettype = gadget->GadgetType & 0x0F; X if (gadgettype == GADGET0002) X specialinfono = BoolInfoNumber(gadget->SpecialInfo); X else if (gadgettype == PROPGADGET) X specialinfono = PropInfoNumber(gadget->SpecialInfo); X else if (gadgettype == STRGADGET) X specialinfono = StringInfoNumber(gadget->SpecialInfo); X else X specialinfono = 0; X X printf("struct Gadget gadget%d =\n", gadgetno); X printf("{\n"); X printf(" %s,\011/* NextGadget */\n", GadgetName(nextgadgetno)); X printf(" %d, %d,\011/* LeftEdge, TopEdge */\n", gadget->LeftEdge, X gadget->TopEdge); X printf(" %d, %d,\011/* Width, Height */\n",gadget->Width, gadget->Height); X printf(" 0x%X,\011/* Flags */\n", gadget->Flags); X printf(" 0x%X,\011/* Activation */\n", gadget->Activation); X printf(" 0x%X,\011/* GadgetType */\n", gadget->GadgetType); X if (gadget->Flags & GADGIMAGE) X name = ImageName(gadgetrenderno); X else X name = BorderName(gadgetrenderno); X printf(" %s,\011/* GadgetRender */\n", APTRName(name)); X if (gadget->Flags & GADGIMAGE) X name = ImageName(selectrenderno); X else X name = BorderName(selectrenderno); X printf(" %s,\011/* SelectRender */\n", APTRName(name)); X printf(" %s,\011/* GadgetText */\n", IntuiTextName(gadgettextno)); X printf(" 0x%X,\011/* MutualExclude */\n", gadget->MutualExclude); X if (gadgettype == GADGET0002) X name = BoolInfoName(specialinfono); X else if (gadgettype == PROPGADGET) X name = PropInfoName(specialinfono); X else if (gadgettype == STRGADGET) X name = StringInfoName(specialinfono); X else X name = MemoryName(gadget->SpecialInfo); X printf(" %s,\011/* SpecialInfo */\n", APTRName(name)); X printf(" %d,\011/* GadgetID */\n", gadget->GadgetID); X printf(" %s\011/* UserData */\n", MemoryName(gadget->UserData)); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListImages() X{ X register struct Image *image; X register struct structList *structitem; X register WORD count; X WORD imageno, imagedatano, nextimageno; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[IMAGE_KIND].next; X X while (structitem != NULL) X { X image = (struct Image *)structitem->structure; X imageno = structitem->number; X X imagedatano = NUMBER(imageno); X nextimageno = ImageNumber(image->NextImage); X X if (image->ImageData != NULL) X { X count = image->Depth * image->Height * ((image->Width + 15) / 16); X printf("UWORD imagedata%d[%d] =\n", imagedatano, count); X PrintWords("0x%X", " ", "{", image->ImageData, "};", count, 8); X } X X printf("struct Image image%d =\n", imageno); X printf("{\n"); X printf(" %d, %d,\011/* LeftEdge, TopEdge */\n", image->LeftEdge, X image->TopEdge); X printf(" %d, %d,\011/* Width, Height */\n", image->Width, image->Height); X printf(" %d,\011/* Depth */\n", image->Depth); X if (image->ImageData == NULL) X printf(" NULL"); X else X printf(" &imagedata%d[0]", imagedatano); X printf("\011/* ImageData */\n"); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListIntuiMessages() X{ X register struct IntuiMessage *intuimessage; X register struct structList *structitem; X WORD intuimessageno; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[INTUIMESSAGE_KIND].next; X X while (structitem != NULL) X { X intuimessage = (struct IntuiMessage *)structitem->structure; X intuimessageno = structitem->number; X X printf("struct IntuiMessage intuimessage%d =\n", intuimessageno); X printf("{\n"); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListIntuiTexts() X{ X register struct IntuiText *intuitext; X register struct structList *structitem; X WORD intuitextno, itextfontno, nexttextno; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[INTUITEXT_KIND].next; X X while (structitem != NULL) X { X intuitext = (struct IntuiText *)structitem->structure; X intuitextno = structitem->number; X X itextfontno = TextAttrNumber(intuitext->ITextFont); X nexttextno = IntuiTextNumber(intuitext->NextText); X X printf("struct IntuiText intuitext%d =\n", intuitextno); X printf("{\n"); X printf(" %d, %d,\011/* FrontPen, BackPen */\n", intuitext->FrontPen, X intuitext->BackPen); X printf(" 0x%X,\011/* DrawMode */\n", intuitext->DrawMode); X printf(" %d, %d,\011/* LeftEdge, TopEdge */\n", intuitext->LeftEdge, X intuitext->TopEdge); X printf(" %s,\011/* ITextFont */\n", TextAttrName(itextfontno)); X printf(" %s,\011/* IText */\n", TitleName(intuitext->IText)); X printf(" %s\011/* NextText */\n", IntuiTextName(nexttextno)); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListKeyMaps() X{ X register struct KeyMap *keymap; X register struct structList *structitem; X WORD keymapno; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[KEYMAP_KIND].next; X X while (structitem != NULL) X { X keymap = (struct KeyMap *)structitem->structure; X keymapno = structitem->number; X X printf("struct KeyMap keymap%d =\n", keymapno); X printf("{\n"); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListLayers() X{ X register struct Layer *layer; X register struct structList *structitem; X WORD layerno; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[LAYER_KIND].next; X X while (structitem != NULL) X { X layer = (struct Layer *)structitem->structure; X layerno = structitem->number; X X printf("struct Layer layer%d =\n", layerno); X printf("{\n"); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListMenus() X{ X register struct Menu *menu; X register struct structList *structitem; X WORD menuno; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[MENU_KIND].next; X X while (structitem != NULL) X { X menu = (struct Menu *)structitem->structure; X menuno = structitem->number; X X printf("struct Menu menu%d =\n", menuno); X printf("{\n"); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListMsgPorts() X{ X register struct MsgPort *msgport; X register struct structList *structitem; X WORD msgportno; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[MSGPORT_KIND].next; X X while (structitem != NULL) X { X msgport = (struct MsgPort *)structitem->structure; X msgportno = structitem->number; X X printf("struct MsgPort msgport%d =\n", msgportno); X printf("{\n"); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListPropInfos() X{ X register struct PropInfo *propinfo; X register struct structList *structitem; X WORD propinfono; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[PROPINFO_KIND].next; X X while (structitem != NULL) X { X propinfo = (struct PropInfo *)structitem->structure; X propinfono = structitem->number; X X printf("struct PropInfo propinfo%d =\n", propinfono); X printf("{\n"); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListRastPorts() X{ X register struct RastPort *rastport; X register struct structList *structitem; X WORD rastportno; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[RASTPORT_KIND].next; X X while (structitem != NULL) X { X rastport = (struct RastPort *)structitem->structure; X rastportno = structitem->number; X X printf("struct RastPort rastport%d =\n", rastportno); X printf("{\n"); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListRequesters() X{ X register struct Requester *requester; X register struct structList *structitem; X WORD requesterno, olderrequestno, reqgadgetno, reqborderno, reqtextno, X reqlayerno, imagebmapno, rwindowno; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[REQUESTER_KIND].next; X X while (structitem != NULL) X { X requester = (struct Requester *)structitem->structure; X requesterno = structitem->number; X X olderrequestno = RequesterNumber(requester->OlderRequest); X reqgadgetno = GadgetNumber(requester->ReqGadget); X reqborderno = BorderNumber(requester->ReqBorder); X reqtextno = IntuiTextNumber(requester->ReqText); X reqlayerno = LayerNumber(requester->ReqLayer); X imagebmapno = BitMapNumber(requester->ImageBMap); X rwindowno = WindowNumber(requester->RWindow); X X printf("struct Requester requester%d =\n", requesterno); X printf("{\n"); X printf(" %s,\011/* OlderRequest */\n", RequesterName(requesterno)); X printf(" %d, %d,\011/* LeftEdge, TopEdge */\n", requester->LeftEdge, X requester->TopEdge); X printf(" %d, %d,\011/* Width, Height */\n", requester->Width, X requester->Height); X printf(" %d, %d,\011/* RelLeft, RelTop */\n", requester->RelLeft, X requester->RelTop); X printf(" %s,\011/* ReqGadget */\n", GadgetName(reqgadgetno)); X printf(" %s,\011/* ReqBorder */\n", BorderName(reqborderno)); X printf(" %s,\011/* ReqText */\n", IntuiTextName(reqtextno)); X printf(" 0x%X,\011/* Flags */\n", requester->Flags); X printf(" %d,\011/* BackFill */\n", requester->BackFill); X printf(" %s,\011/* ReqLayer */\n", LayerName(reqlayerno)); X PrintBytes(" ", " {\011/* ReqPad1 */", requester->ReqPad1, " },", X 32, 8); X printf(" %s,\011/* ImageBMap */\n", BitMapName(imagebmapno)); X printf(" %s,\011/* RWindow */\n", WindowName(rwindowno)); X PrintBytes(" ", " {\011/* ReqPad2 */", requester->ReqPad2, " }", X 36, 9); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListScreens() X{ X register struct Screen *screen; X register struct structList *structitem; X WORD screenno; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[SCREEN_KIND].next; X X while (structitem != NULL) X { X screen = (struct Screen *)structitem->structure; X screenno = structitem->number; X X printf("struct Screen screen%d =\n", screenno); X printf("{\n"); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListStringInfos() X{ X register struct StringInfo *stringinfo; X register struct structList *structitem; X WORD stringinfono, layerptrno, altkeymapno; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[STRINGINFO_KIND].next; X X while (structitem != NULL) X { X stringinfo = (struct StringInfo *)structitem->structure; X stringinfono = structitem->number; X X layerptrno = LayerNumber(stringinfo->LayerPtr); X altkeymapno = KeyMapNumber(stringinfo->AltKeyMap); X X printf("struct StringInfo stringinfo%d =\n", stringinfono); X printf("{\n"); X printf(" %s,\011/* Buffer */\n", TitleName(stringinfo->Buffer)); X printf(" %s,\011/* UndoBuffer */\n", TitleName(stringinfo->UndoBuffer)); X printf(" %d,\011/* BufferPos */\n", stringinfo->BufferPos); X printf(" %d,\011/* MaxChars */\n", stringinfo->MaxChars); X printf(" %d,\011/* DispPos */\n", stringinfo->DispPos); X printf(" %d,\011/* UndoPos */\n", stringinfo->UndoPos); X printf(" %d,\011/* NumChars */\n", stringinfo->NumChars); X printf(" %d,\011/* DispCount */\n", stringinfo->DispCount); X printf(" %d, %d,\011/* CLeft, CTop */\n", stringinfo->CLeft, X stringinfo->CTop); X printf(" %s,\011/* LayerPtr */\n", LayerName(layerptrno)); X printf(" %d,\011/* LongInt */\n", stringinfo->LongInt); X printf(" %s\011/* AltKeyMap */\n", KeyMapName(altkeymapno)); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListTextAttrs() X{ X register struct TextAttr *textattr; X register struct structList *structitem; X WORD textattrno; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[TEXTATTR_KIND].next; X X while (structitem != NULL) X { X textattr = (struct TextAttr *)structitem->structure; X textattrno = structitem->number; X X printf("struct TextAttr textattr%d =\n", textattrno); X printf("{\n"); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListTextFonts() X{ X register struct TextFont *textfont; X register struct structList *structitem; X WORD textfontno; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[TEXTFONT_KIND].next; X X while (structitem != NULL) X { X textfont = (struct TextFont *)structitem->structure; X textfontno = structitem->number; X X printf("struct TextFont textfont%d =\n", textfontno); X printf("{\n"); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid ListWindows() X{ X register struct Window *window; X register struct structList *structitem; X WORD windowno, menustripno, firstrequestno, dmrequestno, rportno, X borderrportno, firstgadgetno, parentwindowno, descendantwindowno, X pointerno, userportno, windowportno, messagekeyno, checkmarkno, X wlayerno, ifontno, wscreenno, nextwindowno, count; X extern struct structList structlist[MAXSTRUCTURE]; X X structitem = structlist[WINDOW_KIND].next; X X while (structitem != NULL) X { X window = (struct Window *)structitem->structure; X windowno = structitem->number; X X nextwindowno = WindowNumber(window->NextWindow); X menustripno = MenuNumber(window->MenuStrip); X firstrequestno = RequesterNumber(window->FirstRequest); X dmrequestno = RequesterNumber(window->DMRequest); X wscreenno = ScreenNumber(window->WScreen); X rportno = RastPortNumber(window->RPort); X borderrportno = RastPortNumber(window->BorderRPort); X firstgadgetno = GadgetNumber(window->FirstGadget); X parentwindowno = WindowNumber(window->Parent); X descendantwindowno = WindowNumber(window->Descendant); X pointerno = NUMBER(windowno); X userportno = MsgPortNumber(window->UserPort); X windowportno = MsgPortNumber(window->WindowPort); X messagekeyno = IntuiMessageNumber(window->MessageKey); X checkmarkno = ImageNumber(window->CheckMark); X wlayerno = LayerNumber(window->WLayer); X ifontno = TextFontNumber(window->IFont); X X if (window->Pointer != NULL) X { X count = 2 * window->PtrHeight; X printf("WORD pointer%d[%d] =\n", pointerno, count); X PrintWords("0x%X", " ", "{", window->Pointer, "};", count, 8); X } X X printf("struct Window window%d =\n", windowno); X printf("{\n"); X printf(" %s,\011/* NextWindow */\n", WindowName(nextwindowno)); X printf(" %d, %d,\011/* LeftEdge, TopEdge */\n", window->LeftEdge, X window->TopEdge); X printf(" %d, %d,\011/* Width, Height */\n", window->Width, window->Height); X printf(" %d, %d,\011/* MouseY, MouseX */\n", window->MouseY, window->MouseX); X printf(" %d, %d,\011/* MinWidth, MinHeight */\n", window->MinWidth, X window->MinHeight); X printf(" %d, %d,\011/* MaxWidth, MaxHeight */\n", window->MaxWidth, X window->MaxHeight); X printf(" 0x%X,\011/* Flags */\n", window->Flags); X printf(" %s,\011/* MenuStrip */\n", MenuName(menustripno)); X printf(" %s,\011/* Title */\n", TitleName(window->Title)); X printf(" %s,\011/* FirstRequest */\n", RequesterName(firstrequestno)); X printf(" %s,\011/* DMRequest */\n", RequesterName(dmrequestno)); X printf(" %d,\011/* ReqCount */\n", window->ReqCount); X printf(" %s,\011/* WScreen */\n", ScreenName(wscreenno)); X printf(" %s,\011/* RPort */\n", RastPortName(rportno)); X printf(" %d, %d,\011/* BorderLeft, BorderTop */\n", window->BorderLeft, X window->BorderTop); X printf(" %d, %d,\011/* BorderRight, BorderBottom */\n", window->BorderRight, X window->BorderBottom); X printf(" %s,\011/* BorderRPort */\n", RastPortName(borderrportno)); X printf(" %s,\011/* FirstGadget */\n", GadgetName(firstgadgetno)); X printf(" %s,\011/* Parent */\n", WindowName(parentwindowno)); X printf(" %s,\011/* Descendant */\n", WindowName(descendantwindowno)); X if (window->Pointer == NULL) X printf(" NULL"); X else X printf(" &pointer%d", pointerno); X printf(",\011/* Pointer */\n"); X printf(" %d, %d,\011/* PtrHeight, PtrWidth */\n", window->PtrHeight, X window->PtrWidth); X printf(" %d, %d,\011/* XOffset, YOffset */\n", window->XOffset, X window->YOffset); X printf(" 0x%X,\011/* IDCMPFlags */\n", window->IDCMPFlags); X printf(" %s,\011/* UserPort */\n", MsgPortName(userportno)); X printf(" %s,\011/* WindowPort */\n", MsgPortName(windowportno)); X printf(" %s,\011/* MessageKey */\n", IntuiMessageName(messagekeyno)); X printf(" %d, %d,\011/* DetailPen, BlockPen */\n", window->DetailPen, X window->BlockPen); X printf(" %s,\011/* CheckMark */\n", ImageName(checkmarkno)); X printf(" %s,\011/* ScreenTitle */\n", TitleName(window->ScreenTitle)); X printf(" %d, %d,\011/* GZZMouseX, GZZMouseY */\n", window->GZZMouseX, X window->GZZMouseY); X printf(" %d, %d,\011/* GZZWidth, GZZHeight */\n", window->GZZWidth, X window->GZZHeight); X printf(" %s,\011/* ExtData */\n", MemoryName((APTR)window->ExtData)); X printf(" %s,\011/* UserData */\n", MemoryName((APTR)window->UserData)); X printf(" %s,\011/* WLayer */\n", LayerName(wlayerno)); X printf(" %s\011/* IFont */\n", TextFontName(ifontno)); X printf("};\n\n"); X X structitem = structitem->next; X } X} X X Xvoid PrintBytes(indenttext, text1, bytes, text2, length, rowlength) Xregister UBYTE *indenttext, *text1, *bytes, *text2; Xregister WORD length, rowlength; X{ X register WORD byte; X X printf("%s\n", text1); X X for (byte = 0; byte < length; byte++) X { X if (byte % rowlength == 0) X printf(" "); X printf("%d", bytes[byte]); X X if (byte != (length - 1)) X printf(", "); X if ((byte + 1) % rowlength == 0 || byte == (length - 1)) X printf("\n"); X } X X printf("%s\n", text2); X} X X Xvoid PrintWords(format, indenttext, text1, words, text2, length, rowlength) Xregister UBYTE *format, *indenttext, *text1, *text2; Xregister UWORD *words; Xregister WORD length, rowlength; X{ X register WORD word; X X printf("%s\n", text1); X X for (word = 0; word < length; word++) X { X if (word % rowlength == 0) X printf(" "); X printf(format, words[word]); X X if (word != (length - 1)) X printf(", "); X if ((word + 1) % rowlength == 0 || word == (length - 1)) X printf("\n"); X } X X printf("%s\n", text2); X} SHAR_EOF echo "extracting scanner.h" sed 's/^X//' << \SHAR_EOF > scanner.h X/* scanner.h */ X X#define FOUND 0x8000 X#define NUMBER(number) ((number) & 0x7FFF) X X#define BITMAP_KIND 0 X#define BOOLINFO_KIND 1 X#define BORDER_KIND 2 X#define GADGET_KIND 3 X#define IMAGE_KIND 4 X#define INTUIMESSAGE_KIND 5 X#define INTUITEXT_KIND 6 X#define KEYMAP_KIND 7 X#define LAYER_KIND 8 X#define MENU_KIND 9 X#define MSGPORT_KIND 10 X#define PROPINFO_KIND 11 X#define RASTPORT_KIND 12 X#define REQUESTER_KIND 13 X#define SCREEN_KIND 14 X#define STRINGINFO_KIND 15 X#define TEXTATTR_KIND 16 X#define TEXTFONT_KIND 17 X#define WINDOW_KIND 18 X#define MAXSTRUCTURE 19 X X#define BitMapNumber(item) structNumber((APTR)item, BITMAP_KIND) X#define BoolInfoNumber(item) structNumber((APTR)item, BOOLINFO_KIND) X#define BorderNumber(item) structNumber((APTR)item, BORDER_KIND) X#define GadgetNumber(item) structNumber((APTR)item, GADGET_KIND) X#define ImageNumber(item) structNumber((APTR)item, IMAGE_KIND) X#define IntuiMessageNumber(item) structNumber((APTR)item, INTUIMESSAGE_KIND) X#define IntuiTextNumber(item) structNumber((APTR)item, INTUITEXT_KIND) X#define KeyMapNumber(item) structNumber((APTR)item, KEYMAP_KIND) X#define LayerNumber(item) structNumber((APTR)item, LAYER_KIND) X#define MenuNumber(item) structNumber((APTR)item, MENU_KIND) X#define MsgPortNumber(item) structNumber((APTR)item, MSGPORT_KIND) X#define PropInfoNumber(item) structNumber((APTR)item, PROPINFO_KIND) X#define RastPortNumber(item) structNumber((APTR)item, RASTPORT_KIND) X#define RequesterNumber(item) structNumber((APTR)item, REQUESTER_KIND) X#define ScreenNumber(item) structNumber((APTR)item, SCREEN_KIND) X#define StringInfoNumber(item) structNumber((APTR)item, STRINGINFO_KIND) X#define TextAttrNumber(item) structNumber((APTR)item, TEXTATTR_KIND) X#define TextFontNumber(item) structNumber((APTR)item, TEXTFONT_KIND) X#define WindowNumber(item) structNumber((APTR)item, WINDOW_KIND) X X#define BitMapName(number) structName(number, BITMAP_KIND) X#define BoolInfoName(number) structName(number, BOOLINFO_KIND) X#define BorderName(number) structName(number, BORDER_KIND) X#define GadgetName(number) structName(number, GADGET_KIND) X#define ImageName(number) structName(number, IMAGE_KIND) X#define IntuiMessageName(number) structName(number, INTUIMESSAGE_KIND) X#define IntuiTextName(number) structName(number, INTUITEXT_KIND) X#define KeyMapName(number) structName(number, KEYMAP_KIND) X#define LayerName(number) structName(number, LAYER_KIND) X#define MenuName(number) structName(number, MENU_KIND) X#define MsgPortName(number) structName(number, MSGPORT_KIND) X#define PropInfoName(number) structName(number, PROPINFO_KIND) X#define RastPortName(number) structName(number, RASTPORT_KIND) X#define RequesterName(number) structName(number, REQUESTER_KIND) X#define ScreenName(number) structName(number, SCREEN_KIND) X#define StringInfoName(number) structName(number, STRINGINFO_KIND) X#define TextAttrName(number) structName(number, TEXTATTR_KIND) X#define TextFontName(number) structName(number, TEXTFONT_KIND) X#define WindowName(number) structName(number, WINDOW_KIND) X Xstruct structList X{ X struct structList *next; X APTR structure; X WORD number; X}; X Xextern void XEraseStructList(void), XListBitMaps(void), XListBoolInfos(void), XListBorders(void), XListGadgets(void), XListImages(void), XListIntuiMessages(void), XListIntuiTexts(void), XListKeyMaps(void), XListLayers(void), XListMenus(void), XListMsgPorts(void), XListPropInfos(void), XListRastPorts(void), XListRequesters(void), XListScreens(void), XListStringInfos(void), XListTextAttrs(void), XListTextFonts(void), XListWindows(void), Xmain(int, BYTE **), XPrintBytes(UBYTE *, UBYTE *, UBYTE *, UBYTE *, WORD, WORD), XPrintWords(UBYTE *, UBYTE *, UBYTE *, UWORD *, UBYTE *, WORD, WORD), XScanBitMaps(struct BitMap *), XScanBoolInfos(struct BoolInfo *), XScanBorders(struct Border *), XScanGadgets(struct Gadget *), XScanImages(struct Image *), XScanIntuiMessages(struct IntuiMessage *), XScanIntuiTexts(struct IntuiText *), XScanKeyMaps(struct KeyMap *), XScanLayers(struct Layer *), XScanMenus(struct Menu *), XScanMsgPorts(struct MsgPort *), XScanPropInfos(struct PropInfo *), XScanRastPorts(struct RastPort *), XScanRequesters(struct Requester *), XScanScreens(struct Screen *), XScanStringInfos(struct StringInfo *), XScanTextAttrs(struct TextAttr *), XScanTextFonts(struct TextFont *), XScanWindows(struct Window *); X Xextern UBYTE X*APTRName(UBYTE *), X*MemoryName(APTR), X*structName(WORD, WORD), X*TitleName(UBYTE *); X Xextern BYTE XFresh(WORD); X Xextern WORD XstructNumber(APTR, WORD); SHAR_EOF echo "extracting scanner.uu" sed 's/^X//' << \SHAR_EOF > scanner.uu X Xbegin 644 scanner XM```#\P`````````#``````````(```U[````````!3@```/I```->R1()`!)- XM^0````!'^0``$.!R`"`\```!`&`")L%1R/_\+'@`!"E.$1@I3Q$@0JP1'"9NU XM`11P`"(\```P`$ZN_LXI:P"8$11*JP"L9P``<"`/D*\`!`:`````@"E`$.1A: XM``$N(&L`K-'(T<@B:``0T\G3R2`"<@`2&2E)$2C0@5*`0F=2@`)`__Z?P%6`E XM0G<(`"`"4X#4@1^R```@`%."4<C_]A^\`"`@`%."'[$@`"``4<K_^")/+PE@Z XM``!X*6L`.A#D<']2@-&L$.1A``#"0>L`7$ZN_H!!ZP!<3J[^C"E`$1PO`"1`( XM("H`)&<2+&P4T"!`(B@``"E!$11.KO^"(BH`(&<:)#P```/M3J[_XBE`$21GX XM"N6(($`G:``(`*0@;!$<+PA(;!#@(&@`)"EH``01*$ZZ'L1.NB5`<`!@!"`O: XM``0O`"`L$0QG!"!`3I!.NC/\+'@`!")L%-!.KOYB3KH>FDJL$1QG&B(L$21G` XM!$ZN_]PL>``$3J[_?")L$1Q.KOZ&(!\N;!$@3G5P9&"T0_H`$'``3J[]V"E`A XM%-!G[$YU9&]S+FQI8G)A<GD`3E4``"\.0^P``'`!+'@`!$ZN_=@I0!3(0^P`0 XM$G`!3J[]V"E`%,0@0"\H`#QA``1\80`*#F$`"OIA``LX80`,@F$`#W9A`!"PA XM80`0[F$`$<YA`!(,80`22F$`$HAA`!+&80`3!&$`$T)A`!5.80`5C&$`%PAAD XM`!=&80`(A")L%,0L>``$3J[^8B)L%,A.KOYB+&W__$Y=3G5(YP$0)F\`#"`+( XM9PQ"IR\+80`'L%!/+@!,WPB`3G4O"R9O``@F7TYU2.<!$"9O``P@"V<42'@`7 XM`B\+80`'AE!/+@`F:P`,8.A,WPB`3G5.5?_T2.</$"9O`"@@"V<``:A(>``#Q XM+PMA``=:4$\N``@K``(`#6<B2'@`!"\K`!)A``="+`!(>``$+RL`%F$`!S1/Y XM[P`0*@!@($AX``(O*P`280`'("P`2'@``B\K`!9A``<23^\`$"H`2'@`!B\K/ XM`!IA``<`4$\H`'`/P&L`$$BM``'_]%5`9A1(>``!+RL`(F$`!N!03SM`__9@N XM/'`#L&W_]&842'@`"R\K`")A``;$4$\[0/_V8"!P!+!M__1F%$AX``\O*P`B# XM80`&J%!/.T#_]F`$0FW_]@@K``(`#6<V(`9(P"\`80`&:%A/2@!G"B\K`!)A@ XM``#(6$\@!4C`+P!A``9.6$]*`&=`+RL`%F$``*Y83V`T(`9(P"\`80`&,EA/O XM2@!G"B\K`!)A`/ZL6$\@!4C`+P!A``886$]*`&<*+RL`%F$`_I)83R`$2,`OY XM`&$`!?Y83TH`9PHO*P`:80``CEA/,"W_]DC`+P!A``7B6$]*`&<Z<`*P;?_TU XM9@PO*P`B80#^2EA/8"9P`[!M__1F#"\K`")A``#,6$]@$G`$L&W_]&8*+RL`) XM(F$``F)83R938`#^5DS?"/!.74YU2.<!$"9O``P@"V<42'@`!"\+80`%H%!/V XM+@`F:P`08.A,WPB`3G4O"R9O``@F7TYU2.<#$"9O`!`@"V<\2'@`!B\+80`%' XM<"X`2'@`$"\K``AA``5B+``@!DC`+H!A``4T3^\`$$H`9PHO*P`(80`"4EA/! XM)FL`$&#`3-\(P$YU+PLF;P`()E].=2\+)F\`""9?3G4O"R9O``@F7TYU+PLFT XM;P`()E].=2\+)F\`""9?3G4O"R9O``@F7TYU3E7_\$CG#Q`F;P`L(`MG``$RC XM2'@`#2\+80`$X"X`2'@`#2\380`$U"P`2'@``R\K`!!A``3&*@!(>``"+RL`, XM%&$`!+@H`$AX``8O*P`880`$JDAX``@O*P`@.T#_]F$`!)I"ER\K`$0[0/_TV XM80`$C$AX`!(O*P!(.T#_\F$`!'PB!DC!+H$[0/_P80`$3$_O`#Q*`&<(+Q-A# XM`/]F6$\@!4C`+P!A``0R6$]*`&<*+RL`$&$`_-)83R`$2,`O`&$`!!A83TH`J XM9PHO*P`480#\DEA/,"W_]DC`+P!A``/\6$]*`&<*+RL`&&$`_HQ83S`M__1(< XMP"\`80`#X%A/2@!G"B\K`"!A`/[(6$\P+?_R2,`O`&$``\183TH`9PHO*P!$* XM80#\%EA/,"W_\$C`+P!A``.H6$]*`&<*+RL`2&$``-Q83TS?"/!.74YU2.<#4 XM$"9O`!`@"V<Z2'@`#B\+80`#G"X`2'@`$B\K``1A``..+``@!DC`+H!A``-@E XM3^\`$$H`9PHO*P`$80``DEA/)E-@PDS?",!.=4CG!Q`F;P`4(`MG7DAX``\OO XM"V$``U`N`$AX``@O*P`880`#0BP`2'@`!R\K`"!A``,T*@`@!DC`+H!A``,&" XM3^\`&$H`9PHO*P`880#][%A/(`5(P"\`80`"ZEA/2@!G"B\K`"!A`/W(6$],2 XMWPC@3G4O"R9O``@F7TYU+PLF;P`()E].=4Y5_^!(YP<0)F\`."`+9P`"IDAX7 XM`!(O"V$``L8N`$AX``DO*P`<80`"N"P`2'@`#2\K`"1A``*J*@!(>``-+RL`2 XM*&$``IQ(>``.+RL`+CM`__AA``*,2'@`#"\K`#([0/_@80`"?$AX``PO*P`Z/ XM.T#_]F$``FQ(>``#+RL`/CM`__1A``)<2'@`$B\K`$([0/_R80`"3$_O`$A(> XM>``2+RL`1CM`__!A``(X2'@`"B\K`%8[0/_N80`"*$AX``HO*P!:.T#_[&$`A XM`AA(>``%+RL`7CM`_^IA``((2'@`!"\K`&0[0/_H80`!^$AX``@O*P!\.T#_\ XMYF$``>A(>``1+RL`@#M`_^1A``'8(@9(P2Z!.T#_XF$``:A/[P`X2@!G"B\K$ XM`!QA`/R86$\@!4C`+P!A``&,6$]*`&<*+RL`)&$`_*983S`M__A(P"\`80`!Y XM<%A/2@!G"B\K`"AA`/R*6$\P+?_@2,`O`&$``5183TH`9PHO*P`N80#]N%A/R XM,"W_]DC`+P!A``$X6$]*`&<*+RL`,F$`_$A83S`M__1(P"\`80`!'%A/2@!GZ XM"B\K`#IA`/PL6$\P+?_R2,`O`&$``0!83TH`9PHO*P`^80#YH%A/,"W_\$C`D XM+P!A``#D6$]*`&<*+RL`0F$`_AA83S`M_^Y(P"\`80``R%A/2@!G"B\K`$9A= XM`/W\6$\P+?_L2,`O`&$``*Q83TH`9PHO*P!680#[J%A/,"W_ZDC`+P!A``"07 XM6$]*`&<*+RL`6F$`^XQ83S`M_^A(P"\`80``=%A/2@!G"B\K`%YA`/KZ6$\P[ XM+?_F2,`O`&$``%A83TH`9PHO*P!D80#ZN%A/,"W_Y$C`+P!A```\6$]*`&<*2 XM+RL`?&$`^R183S`M_^)(P"\`80``(%A/2@!G"B\K`(!A`/U*6$\F4V``_5A,X XMWPC@3EU.=4CG`P`^+P`.2D=G"@@'``]F!'`!8`)P`"P`(`9,WP#`3G5.5?_T% XM2.<',B9O`"P^+P`R(`MF!GP`8```@B`'P?P`"D'L$?0D<`@`>@`@"F<42@5F- XM$"!J``2QRV8$>@%@["128.A*!6<.,"H`"$C``$"``"P`8$8@!\'\``I![!'TI XM4G`("$'L$?0\,`@(<`IR`2QX``1.KO\Z(@?#_``*0>P1]")`(K`8`"-+``0S? XM1@`(0>P1]"&`&``K0/_T(`9,WTS@3EU.=4CG`3)^`'`3OD!L*"`'P?P`"D'L2 XM$?0F<`@`(`MG$B13(DMP"BQX``1.KO\N)DI@ZE)'8-),WTR`3G4O"R9O``@@L XM2T/L`"00&+`99A)*`&;V9@P@2T/L$2P2V&;\8!I![``J0^P1+"+8,M!"$2\+( XM2&P1+$ZZ(0)03T'L$2P@""9?3G5(YP,`/B\`#CPO`!)*1V8.0>P!*$/L$50B0 XMV$(18"H@!DC`Y8`B!TC!`H$``'__+P%![`#<+S`(`$AL`2Y(;!%43KHB!$_O# XM`!!![!%4(`A,WP#`3G4O"R9O``AP`$'L$7RPB&8.0>P!-$/L$7PBV$(18!`OO XM"TAL`3HO"$ZZ(<I/[P`,0>P1?"`()E].=2\+)F\`""`+9@Y![`%`0^P1X"+86 XM0A%@$B\+2&P!1DAL$>!.NB&63^\`#$'L$>`@""9?3G5(YP,P)&P1]"`*9P``^ XMWB9J``0\*@`((`9(P"\`2&P!3$ZZ%,)03TAL`69.NA1,6$]P`#`3+P!(;`%JF XM3KH4J%!/<``P*P`"+P!(;`&$3KH4EE!/<``0*P`$+P!(;`&63KHBWE!/<``0Y XM*P`%+P!(;`&L3KH4<E!/<``P*P`&+P!(;`'`3KH48%!/2&P!TDZZ$^I83WX`N XM<`>^0&P@(`=(P.6`+S,("&$`_R983R\`2&P!Y$ZZ%#)03U)'8-HO*P`D80#_: XM#%A/+P!(;`'N3KH4&%!/2&P!]DZZ$Z)83TAL`?Q.NA.86$\D4F``_R!,WPS`> XM3G5(YP$P)&P1_B`*9S`F:@`$/BH`""`'2,`O`$AL`@).NA/44$](;`(@3KH3< XM7EA/2&P")$ZZ$U183R128,Q,WPR`3G5(YP<P)&P2""`*9P`!/"9J``0^*@`(S XM+`<"1G__2'@``B\K``QA`/S"4$\J`$JK``AG2"`&2,`2*P`'2(%(P=*!+P$OK XM`$AL`BI.NA-H$"L`!TB`2,#0@$C`2'@`""\`2&P"2B\K``A(;`)(2&P"1$AL2 XM`D!A`!&N3^\`*"`'2,`O`$AL`DY.NA,L4$](;`)H3KH2MEA/,!-(P#(K``)(7 XMP2\!+P!(;`)L3KH3"D_O``QP`!`K``1R`!(K``4O`2\`2&P"D$ZZ$NY/[P`,+ XM<``0*P`&+P!(;`*T3KHA-%!/$"L`!TB`2,`O`$AL`LQ.NA+&4$]*JP`(9@Q(_ XM;`+@3KH22EA/8!`@!DC`+P!(;`+H3KH2I%!/2&P"^$ZZ$BX@!4C`2'@``B\`U XM80#\Z$_O``PO`$AL`P1.NA)^4$](;`,<3KH2"%A/)%)@`/["3-\,X$YU3E7_> XMYDCG#S`D;!(2(`IG``+@)FH`!#XJ``A(>``#+Q-A`/MX4$\L``@K``(`#6<BN XM2'@`!"\K`!)A`/M@*@!(>``$+RL`%F$`^U)/[P`0*`!@($AX``(O*P`280#[X XM/BH`2'@``B\K`!9A`/LP3^\`$"@`2'@`!B\K`!IA`/L>4$]R#\)K`!`[0/_N5 XM.T'_ZE5!9A1(>``!+RL`(F$`^OY03SM`_^Q@/'`#L&W_ZF842'@`"R\K`")A' XM`/KB4$\[0/_L8"!P!+!M_^IF%$AX``\O*P`B80#ZQE!/.T#_[&`$0FW_["`'K XM2,`O`$AL`R).NA%V2&P#/$ZZ$0(@!DC`2'@``R\`80#[O$_O`!0O`$AL`T!.K XMNA%24$\P*P`$2,`R*P`&2,$O`2\`2&P#6$ZZ$3A/[P`,,"L`"$C`,BL`"DC!S XM+P$O`$AL`WQ.NA$<3^\`#'``,"L`#"\`2&P#G$ZZ'V)03W``,"L`#B\`2&P#1 XMLDZZ'U!03W``,"L`$"\`2&P#S$ZZ'SY03P@K``(`#6<6(`5(P$AX``0O`&$`9 XM^RA03RM`_^9@%"`%2,!(>``"+P!A`/L24$\K0/_F+P!A`/J^6$\O`$AL`^9.* XMNA">4$\(*P`"``UG%B`$2,!(>``$+P!A`/KB4$\K0/_F8!0@!$C`2'@``B\`B XM80#ZS%!/*T#_YB\`80#Z>"Z`2&P$`$ZZ$%HP+?_N2,!(>``&+P!A`/JF3^\`V XM$"\`2&P$&DZZ$#Q03R\K`!Y(;`0R3KH>B%!/<`*P;?_J9A@P+?_L2,!(>``!Z XM+P!A`/IP4$\K0/_F8$YP`[!M_^IF&#`M_^Q(P$AX``LO`&$`^E!03RM`_^9@2 XM+G`$L&W_ZF88,"W_[$C`2'@`#R\`80#Z,%!/*T#_YF`.+RL`(F$`^JQ83RM`Q XM_^8O`&$`^<PN@$AL!%!.N@^N<``P*P`F+H!(;`1J3KH/GBZK`"AA`/I^3^\`# XM#"\`2&P$@$ZZ#XA03TAL!)9.N@\26$\D4F``_1Y,WPSP3EU.=4Y5__Q(YR\P! XM)&P2'"`*9P`!)B9J``0\*@`(*@8"17__2'@`!"\K`!!A`/AX4$\H`$JK``IG9 XM8C`K``C!ZP`&,BL`!$C!=`_2@B]``!P@`7(03KH@>B(O`!Q.NB!2+@`@!4C`* XM(@=(P2\!+P!(;`2<3KH._"`'2,!(>``(+P!(;`3"+RL`"DAL!,!(;`2\2&P$? XMMF$`#4I/[P`H(`9(P"\`2&P$QDZZ#LA03TAL!-Y.N@Y26$\P$TC`,BL``DC!$ XM+P$O`$AL!.).N@ZF3^\`##`K``1(P#(K``9(P2\!+P!(;`4&3KH.BD_O``PP* XM*P`(2,`O`$AL!29.N@YV4$]*JP`*9@Q(;`4Z3KH-^EA/8!`@!4C`+P!(;`5"5 XM3KH.5%!/2&P%5$ZZ#=Y83TAL!69.N@W46$\D4F``_MA,WPST3EU.=4CG`3`DH XM;!(F(`IG,"9J``0^*@`((`=(P"\`2&P%;$ZZ#@Y03TAL!9).N@V86$](;`66= XM3KH-CEA/)%)@S$S?#(!.=4CG!S`D;!(P(`IG``#2)FH`!#XJ``A(>``0+RL`O XM"&$`]P(L`$AX``8O*P`080#V]"H`(`=(P"Z`2&P%G$ZZ#:Y(;`6\3KH-.G``< XM$!-R`!(K``$N@2\`2&P%P$ZZ#9!P`!`K``(N@$AL!>1.NAO:,"L`!$C`,BL`( XM!DC!+H$O`$AL!?Q.N@UH(`9(P$AX`!`O`&$`][8N@$AL!B!.N@U0+JL`#&$`- XM]_@N@$AL!CA.N@T^(`5(P$AX``8O`&$`]XQ/[P!$+P!(;`9,3KH-(E!/2&P&O XM8DZZ#*Q83R128`#_+$S?#.!.=4CG`3`D;!(Z(`IG,"9J``0^*@`((`=(P"\`# XM2&P&:$ZZ#.A03TAL!H).N@QR6$](;`:&3KH,:%A/)%)@S$S?#(!.=4CG`3`DI XM;!)$(`IG,"9J``0^*@`((`=(P"\`2&P&C$ZZ#*903TAL!J1.N@PP6$](;`:HO XM3KH,)EA/)%)@S$S?#(!.=4CG`3`D;!).(`IG,"9J``0^*@`((`=(P"\`2&P&J XMKDZZ#&103TAL!L1.N@ON6$](;`;(3KH+Y%A/)%)@S$S?#(!.=4CG`3`D;!)8! XM(`IG,"9J``0^*@`((`=(P"\`2&P&SDZZ#")03TAL!NI.N@NL6$](;`;N3KH+% XMHEA/)%)@S$S?#(!.=4CG`3`D;!)B(`IG,"9J``0^*@`((`=(P"\`2&P&]$ZZB XM"^!03TAL!Q).N@MJ6$](;`<63KH+8%A/)%)@S$S?#(!.=4CG`3`D;!)L(`IG! XM,"9J``0^*@`((`=(P"\`2&P''$ZZ"YY03TAL!SI.N@LH6$](;`<^3KH+'EA/A XM)%)@S$S?#(!.=4Y5_^A(YP\P)&P2=B`*9P`!^"9J``0^*@`(2'@`#2\380#T> XMD"P`2'@``R\K`!!A`/2"*@!(>``"+RL`%&$`]'0H`$AX``8O*P`880#T9DAX^ XM``@O*P`@.T#_[F$`]%9"ER\K`$0[0/_L80#T2$AX`!(O*P!(.T#_ZF$`]#@B6 XM!TC!+H%(;`=$.T#_Z$ZZ"O!(;`=D3KH*?"`'2,!(>``-+P!A`/4V3^\`1"\`W XM2&P':$ZZ"LPP*P`$2,`R*P`&2,$N@2\`2&P'@DZZ"K0P*P`(2,`R*P`*2,$N^ XM@2\`2&P'IDZZ"IPP*P`,2,`R*P`.2,$N@2\`2&P'QDZZ"H0@!4C`2'@``R\`V XM80#TTBZ`2&P'Z$ZZ"FP@!$C`2'@``B\`80#TNBZ`2&P(`$ZZ"E0P+?_N2,!(, XM>``&+P!A`/2@+H!(;`@83KH*.D_O`$1P`#`K`!PO`$AL""Y.NAB`<``0*P`>; XM+H!(;`A$3KH*%C`M_^Q(P$AX``@O`&$`]&(N@$AL"%I.N@G\0>L`)$AX``A(% XM>``@2&P(B"\(2&P(=DAL"'!A``><,"W_ZDC`0I<O`&$`]"PN@$AL"(Y.N@G&; XM,"W_Z$C`2'@`$B\`80#T$BZ`2&P(IDZZ":Q/[P!$0>L`3$AX``E(>``D2&P(D XMU"\(2&P(PDAL"+QA``=(3^\`&$AL"-A.N@D26$\D4F``_@9,WPSP3EU.=4CG# XM`3`D;!*`(`IG,"9J``0^*@`((`=(P"\`2&P(WDZZ"4Q03TAL"/A.N@C66$](5 XM;`C\3KH(S%A/)%)@S$S?#(!.=4CG!S`D;!**(`IG``$L)FH`!#XJ``A(>``(K XM+RL`&&$`\D`L`$AX``<O*P`@80#R,BH`(`=(P"Z`2&P)`DZZ".Q(;`DD3KH(J XM>"Z380#SCBZ`2&P)*$ZZ"-0NJP`$80#S?"Z`2&P)/$ZZ",(P*P`(2,`N@$AL% XM"51.N@BR,"L`"DC`+H!(;`EL3KH(HC`K``Q(P"Z`2&P)@DZZ")(P*P`.2,`NR XM@$AL"9A.N@B","L`$$C`+H!(;`FN3KH(<C`K`!)(P"Z`2&P)Q$ZZ"&(P*P`4Z XM2,`R*P`62,$N@2\`2&P)W$ZZ"$H@!DC`2'@`""\`80#RF$_O`$@O`$AL"?I.? XMN@@N+JL`'$AL"A!.N@@B(`5(P$AX``<O`&$`\G!/[P`4+P!(;`HF3KH(!E!/E XM2&P*/$ZZ!Y!83R128`#^TDS?#.!.=4CG`3`D;!*4(`IG,"9J``0^*@`((`=(* XMP"\`2&P*0DZZ!\Q03TAL"F!.N@=66$](;`ID3KH'3%A/)%)@S$S?#(!.=4CG" XM`3`D;!*>(`IG,"9J``0^*@`((`=(P"\`2&P*:DZZ!XI03TAL"HA.N@<46$](, XM;`J,3KH'"EA/)%)@S$S?#(!.=4Y5_])(YP<P)&P2J"`*9P`%#B9J``0^*@`(J XM2'@`$B\380#P?$AX``DO*P`<.T#_U&$`\&PL`$AX``TO*P`D80#P7BH`2'@`[ XM#2\K`"AA`/!02'@`#B\K`"X[0/_P80#P0$AX``PO*P`R.T#_UF$`\#!(>``,V XM+RL`.CM`_^YA`/`@2'@``R\K`#X[0/_L80#P$$AX`!(O*P!".T#_ZF$`\`!/! XM[P!(2'@`$B\K`$8[0/_H80#O[%!/(@<"07__2'@`"B\K`%8[0/_F.T'_Y&$`J XM[]!(>``*+RL`6CM`_^)A`._`2'@`!2\K`%X[0/_@80#OL$AX``0O*P!D.T#_\ XMWF$`[Z!(>``(+RL`?#M`_]QA`.^02'@`$2\K`(`[0/_:80#O@$_O`#`[0/_8Q XM2JL`2F=*$"L`3DB`2,#0@#(M_^1(P3M`_])(P"\`+P%(;`J23KH&&C`M_])(% XMP$AX``@O`$AL"K0O*P!*2&P*LDAL"JY(;`JH80`$9D_O`"@@!TC`+P!(;`JX4 XM3KH%Y$AL"M).N@5P,"W_U$C`2'@`$B\`80#P*"Z`2&P*UDZZ!<(P*P`$2,`R: XM*P`&2,$N@2\`2&P*[DZZ!:HP*P`(2,`R*P`*2,$N@2\`2&P+$DZZ!9(P*P`,+ XM2,`R*P`.2,$N@2\`2&P+,DZZ!7HP*P`02,`R*P`22,$N@2\`2&P+4DZZ!6)P+ XM`#`K`!1R`#(K`!8N@2\`2&P+>$ZZ!4HNJP`82&P+GDZZ$YA/[P!$(`9(P$AXQ XM``DO`&$`[X@N@$AL"[1.N@4B+JL`(&$`[\HN@$AL"\Q.N@40(`5(P$AX``TOR XM`&$`[UXN@$AL"^!.N@3X,"W_\$C`2'@`#2\`80#O1"Z`2&P+^DZZ!-XP*P`L[ XM2,`N@$AL#!).N@3.,"W_UDC`2'@`#B\`80#O&BZ`2&P,*$ZZ!+0P+?_N2,!(S XM>``,+P!A`.\`+H!(;`P^3KH$FD_O`$00*P`V2(!(P!(K`#=(@4C!+P$O`$ALQ XM#%).N@1Z$"L`.$B`2,`2*P`Y2(%(P2Z!+P!(;`QZ3KH$7C`M_^Q(P$AX``PO\ XM`&$`[JHN@$AL#*9.N@1$,"W_ZDC`2'@``R\`80#ND"Z`2&P,P$ZZ!"HP+?_HD XM2,!(>``2+P!A`.YV+H!(;`S:3KH$$#`M_^9(P$AX`!(O`&$`[EQ/[P!`+P!(= XM;`SN3KH#\E!/2JL`2F8,2&P-!DZZ`W983V`2,"W_Y$C`+P!(;`T.3KH#SE!/2 XM2&P-'$ZZ`U@0*P!.2(!(P!(K`$](@4C!+H$O`$AL#2Y.N@.H$"L`4$B`2,`2D XM*P!12(%(P2Z!+P!(;`U43KH#C"ZK`%)(;`UV3KH1VC`M_^)(P$AX``HO`&$`- XM[<PN@$AL#9!.N@-F,"W_X$C`2'@`"B\`80#MLBZ`2&P-IDZZ`TPP+?_>2,!(< XM>``%+P!A`.V8+H!(;`V^3KH#,G``$"L`8G(`$BL`8RZ!+P!(;`W63KH#&D_OS XM`$0P+?_<2,!(>``$+P!A`.UB+H!(;`W\3KH"_"ZK`&AA`.VD+H!(;`X43KH"9 XMZC`K`&Q(P#(K`&Y(P2Z!+P!(;`XN3KH"TC`K`'!(P#(K`')(P2Z!+P!(;`Y46 XM3KH"NBZK`'1A`.V:+H!(;`YZ3KH"J"ZK`'AA`.V(+H!(;`Z03KH"EC`M_]I(: XMP$AX``@O`&$`[.(N@$AL#J9.N@)\,"W_V$C`2'@`$2\`80#LR$_O`#PO`$ALP XM#KI.N@)>4$](;`[,3KH!Z%A/)%)@`/KP3-\,X$Y=3G5.5?_^2.<',"9O`!XD7 XM;P`B/B\`,#PO`#0O"DAL#M).N@(B4$]Z`+I';'(@!4C`@<9(0$I`9@I(;`[6, XM3KH!FEA/<``@;0`0$#!0`"\`2&P.W$ZZ`?!03R`'2,!3@"(%2,&R@&<*2&P.C XMX$ZZ`6Q83R`%2,!2@"(&2,%.NA,H2H%G#B`'2,!3@"(%2,&R@&8*2&P.Y$ZZQ XM`4)83U)%8(HO+0`42&P.YDZZ`9Q,[0S@_^I.74YU3E7__DCG!S`F;P`>)&\`P XM(CXO`#0\+P`X+RT`$$AL#NI.N@%N4$]Z`+I';'8@!4C`@<9(0$I`9@I(;`[N7 XM3KH`YEA/(`5(P-"`<@`@;0`4,C`(`"\!+PM.N@^24$\@!TC`4X`B!4C!LH!G, XM"DAL#O1.N@"T6$\@!4C`4H`B!DC!3KH2<$J!9PX@!TC`4X`B!4C!LH!F"DALE XM#OA.N@"*6$]216"&+RT`&$AL#OI.N@#D3.T,X/_J3EU.=4YU3G5(YP<P+B\`= XM&"9O`!PL+P`@+P=.NA0<6$\D0"`*9@1P_V`V""H``P`#9Q!(>``"0J<O!TZZN XM#S!/[P`,+P8O"R\J``1.NA"<3^\`#"H`2JP0^&<$</]@`B`%3-\,X$YU````V XM``````!P84CG`Q`F;P`0($M*&&;\4XB1RRP(?@`>&TJ'9S)3K`]&;18@;`\^C XM0^@``2E)#SX@!Q"`<@`2`&#<(`=R`!(`2&P/.B\!3KH(/E!/(@!@QDAL#SI(T XM>/__3KH(+%!/(`9,WPC`3G4```````!P84Y5_]Q(YP\P)F\`1'P`0>T`#"M(L XM__(>&TH'9P`!"G`EO@!F``#,'AMP`!`'<AA=06L``(BP>Q`(9O1.^Q`$`&1@+ XM``!0`'A@```:`'!@```4`'-@```"(&W_\B18*TC_\F!*(&W_\B@8*TC_\D7M7 XM_^QZ!TJ%:Q8@!'(/P(%!^@#`T<`4D%.*Z(13A6#F0BW_[6`:(&W_\B@8*TC_^ XM\B\$2&W_Y4ZZ"V!03T7M_^4O"DZZ_N183]R`8`#_7E*&4ZP/1FT8(&P//D/H^ XM``$I20\^(`<0@'(`$@!@`/\^<``0!TAL#SHO`$ZZ!S)03R(`8`#_*%*&4ZP/Z XM1FT8(&P//D/H``$I20\^(`<0@'(`$@!@`/\(<``0!TAL#SHO`$ZZ!OQ03R(`O XM8`#^\DAL#SI(>/__3KH&Z"`&3.T,\/_$3EU.=3`Q,C,T-38W.#E!0T1%1@``M XM`$Y5_\1(YR<P)F\`7"1O`&!^`'P`>@!P`!M\`"#_^W(`*T'_]G3_*T+_\D'MW XM_]`;0/_Q&T#__"M!_^0K0?_H*TC_S$H39T)P`!`3<AA=06LXL'L0"&;V3OL0L XM!``C8```(``@8```%@`K8```#``M8````GX!8`Y\`6`*>@%@!AM\``'__%*+( XM8+H0$W(PL`%F!E*+&T'_^W`JL!-F$"!20^@`!"2)*U#_]E*+8`Y(;?_V+PM.] XMN@HX4$_7P!`3<BZP`68F4HMP*K`39A`@4D/H``0DB2M0__)2BV`.2&W_\B\+' XM3KH*"E!/U\`0$W)LL`%F"AM\``'_\5*+8`AR:+`!9@)2BQ`;<@`2`!M`__!PZ XM,%U`:P`"5+)[``AF]$[[``0`8V```BH`<V```>@`6&```7X`>&```7@`<&``M XM`5X`;V```0P`=6```.(`9&````)*+?_Q9PP@4D/H``0DB2`08`H@4D/H``0D_ XMB2`0*T#_[&P*<@%$K?_L*T'_Z$JM_^AG!'`M8`I*!F<$<"M@`G`@&T#_T'``9 XM$`8B+?_H@H!P`!`%@H!G"%*M_\Q2K?_D+RW_["\M_\Q.N@AB4$\K0/_(("W_M XM\DJ`:@9R`2M!__(@+?_((BW_\I*`2.T``O_$;RX@;?_,(DC3P6`"$MA3@&3Z, XM<``0+?_[(BW_Q"!M_\Q@`A#`4X%D^B`M__(K0/_(T:W_Y$'M_]`K2/_,2@=GY XM``%0&WP`(/_[8``!1DHM__%G#"!20^@`!"2)(!!@"B!20^@`!"2)(!`K0/_L_ XM8`#_8DHM__%G#"!20^@`!"2)(!!@"B!20^@`!"2)(!`K0/_L2BW__&<2(&W_. XMS!#\`#!R`2M!_^0K2/_,+P`O+?_,3KH'O%!/*T#_R&``_R@;?``P__L@+?_R` XM2H!J!G`(*T#_\DHM__%G#"!20^@`!"2)(!!@"B!20^@`!"2)(!`K0/_L2BW_: XM_&<6(&W_S!#\`#`0_`!X<@(K0?_D*TC_S"\`+RW_S$ZZ!YA03RM`_\AP6+`M% XM__!F`/Z^2&W_T$ZZ!EQ83V``_K`@4D/H``0DB2)0*TG_S&8(0?H`W"M(_\P@6 XM;?_,2AAF_%.(D>W_S"M(_^0@+?_R2H!K*K'`;R8K0/_D8"!P`2M`_^0@4D/H# XM``0DB2`0&T#_T$(M_]%@!G``8```C"`M_^0B+?_VLH!L"'0`*T+_]F`$D:W_= XM]DH'9S93K?_D;1AP`"!M_\P0&"\`*TC_S"!M`!!.D%A/8.)3K?_V;4AP`!`MD XM__LO`"!M`!!.D%A/8.A3K?_V;1)P`!`M__LO`"!M`!!.D%A/8.A3K?_D;1AP? XM`"!M_\P0&"\`*TC_S"!M`!!.D%A/8.(@"TS?#.1.74YU``!.5?_V2.<!,"9O2 XM`!XD;P`B*VT`$/_V'AI*!V<T<"6^`&8BL!)F!%**8!HO"TAM__8O"F$`^\Q/% XM[P`,*T#_^F<$)$!@TG``$`<O`$Z36$]@QDS?#(!.74YU3E7_\$CG(3(F;P`L^ XM#*P````@%"YL``"&$!-R(+`!9PQR";`!9P9R"K`!9@12BV#H2A-G:"`L%"[E9 XM@%*L%"Y![!0VT<`D2'`BL!-F)E*+)(M*$V<*<"*P$V<$4HM@\DH39@Q(>``!N XM3KH.&%A/8)Y"&V":)(M*$V<8$!-R(+`!9Q!R";`!9PIR"K`!9P12BV#D2A-FK XM`F`&0AM@`/]R2JP4+F8&(&P1'&`$0>P4-BE(%#)*K!0N9GQ!^@$D0^P3]"+8O XM(M@BV"+8,I`B;!$<(&D`)$AX`"@O*``$2&P3]$ZZ!')/[P`,0>P3]"(()#P`< XM``/N+&P4T$ZN_^(I0!*X*4`2P'($*4$2O"E`$L@I01+$Y8"3R2QX``0K0/_PL XM3J[^VB!M__`B0"-H``@`I'X`*T#_]&`J+&P4T$ZN_\HI0!*X3J[_Q"E`$L!!^ XM^@"F(@@D/````^U.KO_B*4`2R'X$(`<`0(`!@:P2M"`'`$"``H&L$KP`K```G XM@`,2Q$JL#X!G!'``8`8@/```@``N`$*L#S0@!P!```$I0`\P<`$I0`]6(`<`0 XM0``"*4`/4G`"*4`/>"`'`$``@"E`#W1!^@K"*4@1$"\L%#(O+!0N3KK9:D*7\ XM3KH(0$SM3(3_W$Y=3G5C;VXZ,3`O,3`O,S(P+S@P+P`J````````````````! XM`````````````````````````'!A+PLF;P`(2JL`%&<,""L``P`;9@1P`&`VE XM+RP0W$ZZ!\Y83R=```0G0``02H!F"G`,*4`4S'#_8!8G;!#<`!1P\\&K`!AP[ XM`"=```PG0``()E].=0``````````````````3E7_[$CG+Q`N+P`T)F\`."@'S XM<#'`JP`89P9P_V```G`(*P`'`!I6P$0`2(!(P"P`2JL`%&8``(0(*P`"`!MFE XM>G``)T``#'+_OH%G``)"+PM.NO].6$]*@&<,".L`!0`;</]@``(J".L``0`;( XM2@9G#B`K`!0B`$2!)T$`#&`(("L`%"=```Q3JP`,;18@:P`$0^@``2=)``0@5 XM!Q"`<@`2`&`2(`=R`!(`+PLO`6$`_U)03R(`(`%@``'6""L``@`;9UAP_[Z`I XM9@9P`&```<(@!QM`__]*!F<B<@J^@68<<@(O`4AZ`;(O*P`<*T'_\$ZZ]B1/P XM[P`,*@!@&G(!+P%(;?__+RL`'"M!__!.NO8(3^\`#"H`?O]@``#@".L``0`;, XM2@9G4G#_OH!G3%2K``QR"KZ!9B8@:P`$0^@``2=)``00O``-(BL`#$J!:PHO+ XM"R\`80#^KE!/4JL`#"!K``1#Z``!)TD`!"`'$(`B*P`,2H%K``$<?O\@*P`$- XMD*L`$"M`__!G<@@K``8`&F=22'@``D*G+RL`'$ZZ!.!/[P`,*T#_[$H&9SA3Y XMK?_L;3)"IR\M_^PO*P`<3KH$P$AX``%(;?_]+RL`'$ZZ`_1/[P`82JP0^&8*4 XM$"W__7(:L`%GR"\M__`O*P`0+RL`'$ZZ]2A/[P`,*@!@`GH`</^Z@&8(".L`/ XM!0`;8`RZK?_P9P8(ZP`$`!M*!F<.(BL`%"0!1((G0@`,8!@(*P`"`!MG"'(`0 XM)T$`#&`((BL`%"=!``P@:P`0)T@`!+Z`9RY3JP`,;18@:P`$0^@``2=)``0@N XM!Q"`<@`2`&`2(`=R`!(`+PLO`6$`_9!03R(`<##`JP`89P1P_V`,</^X@&8$+ XM<`!@`B`$3-\(]$Y=3G4-"@````!(YR`P)F\`$"1+2A)G)'``$!)![`_9"#``[ XM`0@`9PIR`!(`=""2@F`$<@`2`!2!4HI@V"`+3-\,!$YU``````````!P84Y54 XM__A(YP,P)F\`("1O`"0N+P`H($I*&&;\4XB1RBP(($M*&&;\4XB1RR`((DO3P XMP"M)__B\AV,"+`<@!B!*8`(2V%.`9/H@;?_X0C!H`"`+3-\,P$Y=3G4B;P`(: XM(&\`!"`(2AAF_%.($-EF_$YU```@+P`((&\`!$Y5__0B3W(*3KH&&`9!`#`2$ XMP4J`9O`@"1#AO\EF^D(0D(].74YU```@+P`((&\`!$Y5__0B3R(``D$`!P9!F XM`#`2P>:(9O`@"1#AO\EF^D(0D(].74YU```P,3(S-#4V-S@Y86)C9&5F("\`9 XM""!O``1#[P`$,@`"00`/$OL0W.B(9O(@"2(/6($0X;*)9OI"$)"!3G4@+P`(2 XM(&\`!$Y5__0B3VP&$/P`+42`<@I.N@5T!D$`,!+!2H!F\!#AO\EF^D(0(`A.1 XM79"O``1.=2!O``0B2'(`<``O`@P0`"MG!@P0`"UF`E)($!@$```P;1(,```)B XM;@PD`>6!TH+2@=*`8.8,$0`M9@)$@20?(`A3@"!O``@@@9")3G4O!RXO``A2Z XMK!2\(`<@;!2X$,`I2!2X+A].=4Y5``!(YP`P)F\`$"1O`!1"K!2\*4L4N$AM9 XM`!`O"DAZ_\9.NOB*(&P4N$(0("P4O$SM#`#_^$Y=3G5.5?_H2.<!,BXO`#1*1 XMAVX&</]@``#2<`B^@&0"+@`@!U:`+@`"1__\)&T`""!M``C1Q]^L#Q1#[`\07 XM)E$K2/_P*TG_]"`+9P``D"!+("L`!-'`*TC_[")M__"WR6,0)(LE1P`$+&W_S XM]"R*<`!@>+?)9AHL4R2.("L`!"(`TH<E00`$+&W_]"R*<`!@6K7(9`B?K`\4: XM</]@3K7(9BQ*DV<.(%.SR&,(GZP/%'#_8#C?JP`$2I-G#K/39@H@*0`$T:L`K XM!":1<`!@'BM+__0K;?_L_^@F4V``_VX@;?_T((I"DB5'``1P`$S?3(!.74YU% XM``````````!P84CG!S`N+P`8)F\`'"PO`"`O!TZZ!7183R1`(`IF!'#_8!XO* XM!B\++RH`!$ZZ`M1/[P`,*@!*K!#X9P1P_V`"(`5,WPS@3G4``"\'+B\`"%*L! XM%,!3K`]&;18@;`\^0^@``2E)#SX@!Q"`<@`2`&`4(`=R`!(`2&P/.B\!3KKYW XMR%!/(@`N'TYU3E4``"\+)F\`#$*L%,!(;0`,+PM(>O^L3KKVW$AL#SI(>/__6 XM3KKYF"`L%,`F;?_\3EU.=0``2.</$"XO`!@L+P`<*B\`("\'3KH$N%A/)D`@/ XM"V8$</]@'B\%+P8O*P`$3KH!G$_O``PH`$JL$/AG!'#_8`(@!$S?"/!.=0``$ XM````````<&%(YP,P+B\`%$J';@9P`&```*1P"+Z`9`(N`"`'5H`N``)'__Q%; XM[`\0)E(@"V=`("L`!+"';3*PAV8,(%,DB)^L#Q0@"V!N("L`!)"'<@BP@646U XM($O1QR2()$@DDR5```2?K`\4(`M@3"1+)E-@O"`'(BP/A-"!4X!.N@(&(BP/= XMA$ZZ`=XL`%"&(`96@"P``D;__"\&3KH%-EA/)D`@"V<2+P8O"TZZ_58NAV$`A XM_U103V`"<`!,WPS`3G4``````````'!A+P<N+P`(+P=.NO\R6$\N'TYU``!(8 XMYP,0+B\`$$?L#Q@@"V<T""L``@`;9B@(*P`!`!MG("`K``20JP`0+`!*AF<2* XM+P8O*P`0+RL`'$ZZ[SI/[P`,)E-@R"\'3KH$*%A/3-\(P$YU``!(YS<0+B\`+ XM'"9O`"`L+P`D2JP1$&<$3KH#@$*L$/@B!R0+)@8L;!303J[_T"H`</^Z@&8.E XM3J[_?"E`$/AP!2E`%,P@!4S?".Q.=0``2.<_`"XO`!PL+P`@*B\`)$JL$1!G* XM!$ZZ`S1"K!#X(`53@"(')`8F`"QL%-!.KO^^*`!P_[B`9@Y.KO]\*4`0^'`60 XM*4`4S"`%#(`````"9Q8,@`````%G"$J`9A@@!F`4(`30AF`.(@=T`'8`+&P4^ XMT$ZN_[Y,WP#\3G4``$CG-Q`N+P`<)F\`("PO`"1*K!$09P1.N@*X0JP0^"('Y XM)`LF!BQL%-!.KO_6*@!P_[J`9@Y.KO]\*4`0^'`%*4`4S"`%3-\([$YU```O+ XM!RXO``A*K!$09P1.N@)V(@<L;!303J[_W'``+A].=4CG,``D`"8!2$)(0\3!N XMQL#`P=1#2$)"0M""3-\`#$YU2H!J```>1(!*@6H```Q$@6$``"!$@4YU80``^ XM&$2`1(%.=4J!:@``#$2!80``!D2`3G4O`DA!-`%F```B2$!(04A"-`!G```&+ XMA,$P`DA`-`"$P3`"2$(R`B0?3G4O`W80#$$`@&0```;AF5%##$$(`&0```;I3 XMF5E##$$@`&0```;EF55#2D%K```&XYE30S0`YJA(0D)"YJI(0X#!-@`P`C0#[ XM2$'$P9""9```"%-#T(%D_G(`,@-(0^>X2$#!028?)!].=4Y5_YY(YS,R?@`@M XM;!$H'BC__W!/OH!O`BX`(`=#[?^O8`(2V%.`9/I"-7BOD\DL>``$3J[^VB9`C XM2JL`K&=,("L`K.6`)$`L*@`X2H9F!"PK`*!*AF<T(@9!^@"R)`AV"RQL%-!.* XMKO_0($=2AR`(&[P`"@BO(@9![?^O)`@F!RQL%-!.KO_0</]@3DJL%,1F$D/Z! XM`(9P`"QX``1.KOW8*4`4Q$'M_Z\I2`^H2'@`/$AX`/IP`"\`+P!(;`_$2&P/" XML$AL#YQ"ITZZ`0A/[P`@4X!G!'#_8`)P`$S?3,Q.74YU*BH@57-E<B!!8F]R. XM="!297%U97-T960@*BH``$-/3E1)3E5%``!!0D]25``J*BH@0G)E86LZ(`!I= XM;G1U:71I;VXN;&EB<F%R>0```````````````````"\'+B\`"'``*4`0^$J'J XM:R*^K`\`;!P@!^>`0>P2M$JP"`!G#B`'YX!![!*TT<`@"&`(<`DI0!3,<``N( XM'TYU``````````!P84CG`0)P`"(\```P`"QX``1.KO[.+@`"AP``,`!*AV8$U XM<`!@($JL$1!G&"!L$1!.D$J`9@1P`&`,2'@`%$ZZ`$983R`'3-]`@$YU8;1.B XM=0``2.<P,BQL%,0@;P`8(F\`'"1O`"`F;P`D("\`*"(O`"PD+P`P)B\`-$ZNR XM_J1,WTP,3G4``$CG!P`N+P`0("P/`%.`+`!*1FLP(`9(P.>`0>P2M"HP"`!*$ XM!6<:"`4``F84(`9(P.>`0>P2M"\P"`1.NOR\6$]31F#,+P=.NLO^6$],WP#@G XM3G4``$CG`#(F;!34(`MG%"13(DL@*P`(+'@`!$ZN_RXF2F#HD<@I2!38*4@4_ XMU$S?3`!.=4CG`3(N+P`4<`S>@"`'<@`L>``$3J[_.B9`(`MF!'``8#HG1P`(L XM1>P4U"!J``0G2``$D<@FB$J29@(DBTJJ``1G!B)J``0BBR5+``1*K`\$9@0I& XM2P\$0>L`#"`(3-],@$YU``````````````````````/L`````@````(````,W XM````!@````````/R```#Z0````````/R```#Z@``!#AG<F%P:&EC<RYL:6)RM XM87)Y``!I;G1U:71I;VXN;&EB<F%R>0!.54Q,```H05!44BD``&)I=&UA<```2 XM8F]O;&EN9F\``&)O<F1E<@``9V%D9V5T``!I;6%G90!I;G1U:6UE<W-A9V4`3 XM`&EN='5I=&5X=`!K97EM87```&QA>65R`&UE;G4``&US9W!O<G0`<')O<&ENK XM9F\``')A<W1P;W)T``!R97%U97-T97(`<V-R965N``!S=')I;F=I;F9O``!TK XM97AT871T<@``=&5X=&9O;G0``'=I;F1O=P``````,@```#H```!$````3```< XM`%0```!:````:````'(```!Z````@````(8```".````F````*(```"L````\ XMM````,````#*````U$Y53$P``"8E<R5D`$Y53$P``"(E<R(``$Y53$P``#!X. XM)5@``'-T<G5C="!":71-87`@8FET;6%P)60@/0H`>PH``"`@)60L"2\J($)Y# XM=&5S4&5R4F]W("HO"@``("`E9"P)+RH@4F]W<R`J+PH`("`P>"58+`DO*B!&L XM;&%G<R`J+PH``"`@)60L"2\J($1E<'1H("HO"@``("`E9"P)+RH@4&%D("HO> XM"@``("!["2\J(%!L86YE<R`J+PH`("`@("5S+`H``"`@("`E<PH`("!]"@``D XM?3L*"@``<W1R=6-T($)O;VQ);F9O(&)O;VQI;F9O)60@/0H`>PH``'T["@H`B XM`%=/4D0@>'EP86ER)61;)61=(#T*```E9```("```'L`?3L``'-T<G5C="!"M XM;W)D97(@8F]R9&5R)60@/0H`>PH``"`@)60L("5D+`DO*B!,969T161G92P@' XM5&]P161G92`J+PH``"`@)60L("5D+`DO*B!&<F]N=%!E;BP@0F%C:U!E;B`J- XM+PH``"`@,'@E6"P)+RH@1')A=TUO9&4@*B\*`"`@)60L"2\J($-O=6YT("HO; XM"@``("!.54Q,```@("9X>7!A:7(E9%LP70``+`DO*B!862`J+PH`("`E<PDOK XM*B!.97AT0F]R9&5R("HO"@``?3L*"@``<W1R=6-T($=A9&=E="!G861G970E8 XM9"`]"@!["@``("`E<RP)+RH@3F5X=$=A9&=E="`J+PH`("`E9"P@)60L"2\JP XM($QE9G1%9&=E+"!4;W!%9&=E("HO"@``("`E9"P@)60L"2\J(%=I9'1H+"!(W XM96EG:'0@*B\*```@(#!X)5@L"2\J($9L86=S("HO"@``("`P>"58+`DO*B!!K XM8W1I=F%T:6]N("HO"@`@(#!X)5@L"2\J($=A9&=E=%1Y<&4@*B\*`"`@)7,L< XM"2\J($=A9&=E=%)E;F1E<B`J+PH`("`E<RP)+RH@4V5L96-T4F5N9&5R("HOP XM"@`@("5S+`DO*B!'861G971497AT("HO"@`@(#!X)5@L"2\J($UU='5A;$5X, XM8VQU9&4@*B\*```@("5S+`DO*B!3<&5C:6%L26YF;R`J+PH``"`@)60L"2\J] XM($=A9&=E=$E$("HO"@`@("5S"2\J(%5S97)$871A("HO"@``?3L*"@``55=/Y XM4D0@:6UA9V5D871A)61;)61=(#T*```P>"58```@(```>P!].P``<W1R=6-T! XM($EM86=E(&EM86=E)60@/0H`>PH``"`@)60L("5D+`DO*B!,969T161G92P@S XM5&]P161G92`J+PH``"`@)60L("5D+`DO*B!7:61T:"P@2&5I9VAT("HO"@``? XM("`E9"P)+RH@1&5P=&@@*B\*```@($Y53$P``"`@)FEM86=E9&%T825D6S!=> XM``DO*B!);6%G941A=&$@*B\*`'T["@H``'-T<G5C="!);G1U:4UE<W-A9V4@A XM:6YT=6EM97-S86=E)60@/0H`>PH``'T["@H``'-T<G5C="!);G1U:51E>'0@B XM:6YT=6ET97AT)60@/0H`>PH``"`@)60L("5D+`DO*B!&<F]N=%!E;BP@0F%CM XM:U!E;B`J+PH``"`@,'@E6"P)+RH@1')A=TUO9&4@*B\*`"`@)60L("5D+`DO\ XM*B!,969T161G92P@5&]P161G92`J+PH``"`@)7,L"2\J($E497AT1F]N="`J6 XM+PH``"`@)7,L"2\J($E497AT("HO"@``("`E<PDO*B!.97AT5&5X="`J+PH`1 XM`'T["@H``'-T<G5C="!+97E-87`@:V5Y;6%P)60@/0H`>PH``'T["@H``'-TG XM<G5C="!,87EE<B!L87EE<B5D(#T*`'L*``!].PH*``!S=')U8W0@365N=2!M` XM96YU)60@/0H`>PH``'T["@H``'-T<G5C="!-<V=0;W)T(&US9W!O<G0E9"`]L XM"@!["@``?3L*"@``<W1R=6-T(%!R;W!);F9O('!R;W!I;F9O)60@/0H`>PH`/ XM`'T["@H``'-T<G5C="!287-T4&]R="!R87-T<&]R="5D(#T*`'L*``!].PH*P XM``!S=')U8W0@4F5Q=65S=&5R(')E<75E<W1E<B5D(#T*`'L*```@("5S+`DOV XM*B!/;&1E<E)E<75E<W0@*B\*`"`@)60L("5D+`DO*B!,969T161G92P@5&]PW XM161G92`J+PH``"`@)60L("5D+`DO*B!7:61T:"P@2&5I9VAT("HO"@``("`E1 XM9"P@)60L"2\J(%)E;$QE9G0L(%)E;%1O<"`J+PH``"`@)7,L"2\J(%)E<4=A0 XM9&=E="`J+PH``"`@)7,L"2\J(%)E<4)O<F1E<B`J+PH``"`@)7,L"2\J(%)ES XM<51E>'0@*B\*```@(#!X)5@L"2\J($9L86=S("HO"@``("`E9"P)+RH@0F%C9 XM:T9I;&P@*B\*`"`@)7,L"2\J(%)E<4QA>65R("HO"@`@("`@```@('L)+RH@@ XM4F5Q4&%D,2`J+P`@('TL```@("5S+`DO*B!);6%G94)-87`@*B\*```@("5ST XM+`DO*B!25VEN9&]W("HO"@``("`@(```("!["2\J(%)E<5!A9#(@*B\`("!]= XM`'T["@H``'-T<G5C="!38W)E96X@<V-R965N)60@/0H`>PH``'T["@H``'-TY XM<G5C="!3=')I;F=);F9O('-T<FEN9VEN9F\E9"`]"@!["@``("`E<RP)+RH@_ XM0G5F9F5R("HO"@`@("5S+`DO*B!5;F1O0G5F9F5R("HO"@`@("5D+`DO*B!"/ XM=69F97)0;W,@*B\*```@("5D+`DO*B!-87A#:&%R<R`J+PH`("`E9"P)+RH@5 XM1&ES<%!O<R`J+PH``"`@)60L"2\J(%5N9&]0;W,@*B\*```@("5D+`DO*B!., XM=6U#:&%R<R`J+PH`("`E9"P)+RH@1&ES<$-O=6YT("HO"@``("`E9"P@)60LS XM"2\J($-,969T+"!#5&]P("HO"@``("`E<RP)+RH@3&%Y97)0='(@*B\*`"`@1 XM)60L"2\J($QO;F=);G0@*B\*```@("5S"2\J($%L=$ME>4UA<"`J+PH`?3L*\ XM"@``<W1R=6-T(%1E>'1!='1R('1E>'1A='1R)60@/0H`>PH``'T["@H``'-T7 XM<G5C="!497AT1F]N="!T97AT9F]N="5D(#T*`'L*``!].PH*``!73U)$('!OR XM:6YT97(E9%LE9%T@/0H`,'@E6```("```'L`?3L``'-T<G5C="!7:6YD;W<@( XM=VEN9&]W)60@/0H`>PH``"`@)7,L"2\J($YE>'17:6YD;W<@*B\*`"`@)60LB XM("5D+`DO*B!,969T161G92P@5&]P161G92`J+PH``"`@)60L("5D+`DO*B!7Q XM:61T:"P@2&5I9VAT("HO"@``("`E9"P@)60L"2\J($UO=7-E62P@36]U<V58L XM("HO"@`@("5D+"`E9"P)+RH@36EN5VED=&@L($UI;DAE:6=H="`J+PH``"`@_ XM)60L("5D+`DO*B!-87A7:61T:"P@36%X2&5I9VAT("HO"@``("`P>"58+`DO) XM*B!&;&%G<R`J+PH``"`@)7,L"2\J($UE;G53=')I<"`J+PH``"`@)7,L"2\J0 XM(%1I=&QE("HO"@``("`E<RP)+RH@1FER<W1297%U97-T("HO"@`@("5S+`DO; XM*B!$35)E<75E<W0@*B\*```@("5D+`DO*B!297%#;W5N="`J+PH`("`E<RP)_ XM+RH@5U-C<F5E;B`J+PH``"`@)7,L"2\J(%)0;W)T("HO"@``("`E9"P@)60L] XM"2\J($)O<F1E<DQE9G0L($)O<F1E<E1O<"`J+PH``"`@)60L("5D+`DO*B!"9 XM;W)D97)2:6=H="P@0F]R9&5R0F]T=&]M("HO"@``("`E<RP)+RH@0F]R9&5R@ XM4E!O<G0@*B\*```@("5S+`DO*B!&:7)S=$=A9&=E="`J+PH``"`@)7,L"2\J] XM(%!A<F5N="`J+PH`("`E<RP)+RH@1&5S8V5N9&%N="`J+PH`("!.54Q,```@J XM("9P;VEN=&5R)60``"P)+RH@4&]I;G1E<B`J+PH``"`@)60L("5D+`DO*B!0^ XM=')(96EG:'0L(%!T<E=I9'1H("HO"@``("`E9"P@)60L"2\J(%A/9F9S970L[ XM(%E/9F9S970@*B\*`"`@,'@E6"P)+RH@241#35!&;&%G<R`J+PH`("`E<RP)@ XM+RH@57-E<E!O<G0@*B\*`"`@)7,L"2\J(%=I;F1O=U!O<G0@*B\*`"`@)7,LJ XM"2\J($UE<W-A9V5+97D@*B\*`"`@)60L("5D+`DO*B!$971A:6Q096XL($)LO XM;V-K4&5N("HO"@``("`E<RP)+RH@0VAE8VM-87)K("HO"@``("`E<RP)+RH@; XM4V-R965N5&ET;&4@*B\*```@("5D+"`E9"P)+RH@1UI:36]U<V58+"!'6EI-A XM;W5S95D@*B\*`"`@)60L("5D+`DO*B!'6EI7:61T:"P@1UI:2&5I9VAT("HOX XM"@``("`E<RP)+RH@17AT1&%T82`J+PH``"`@)7,L"2\J(%5S97)$871A("HO6 XM"@`@("5S+`DO*B!73&%Y97(@*B\*`"`@)7,)+RH@249O;G0@*B\*`'T["@H`P XM`"5S"@`@("`@```E9```+"````H`)7,*`"5S"@`@("`@```L(```"@`E<PH`] XM```````H``````````````````````````````\Z````````````````````Q XM```````````````````````/7```````````````````````````````````K XM````````````````````````````````````````````````````````@```` XM``0`__\````.``X````````SU`````#__P````0`!``````````````/B/__` XM````!``$````````,_``````__\````$``0````````S^@``````("`@("`@> XM("`@*"@H*"@@("`@("`@("`@("`@("`@("!($!`0$!`0$!`0$!`0$!`0A(2$L XMA(2$A(2$A!`0$!`0$!"!@8&!@8$!`0$!`0$!`0$!`0$!`0$!`0$!`1`0$!`0V XM$(*"@H*"@@("`@("`@("`@("`@("`@("`@("$!`0$"`@("`@("`@("`H*"@HD XM*"`@("`@("`@("`@("`@("`@($@0$!`0$!`0$!`0$!`0$!"$A(2$A(2$A(2$( XM$!`0$!`0$(&!@8&!@0$!`0$!`0$!`0$!`0$!`0$!`0$!$!`0$!`0@H*"@H*"V XM`@("`@("`@("`@("`@("`@("`@(0$!`0(````````@````/L`````P``````\ XM``_0```/O```#Y0````6`````@``#ZP```\Z```/&````20```$@```!'```S XM`1@```$4```!$````0P```$(```!!````0````#\````^````/0```#P````S X9[````.@```#D````X````-P````````#\@``I X`` Xend Xsize 18340 SHAR_EOF echo "End of archive 1 (of 1)" # if you want to concatenate archives, remove anything after this line exit