]> Dogcows Code - chaz/thecheat/commitdiff
The Cheat 1.0b3
authorCharles McGarvey <chazmcgarvey@brokenzipper.com>
Wed, 12 Nov 2003 19:00:00 +0000 (12:00 -0700)
committerCharles McGarvey <chazmcgarvey@brokenzipper.com>
Wed, 12 Nov 2003 19:00:00 +0000 (12:00 -0700)
New Features:
- Change values on a time interval to make variables seem constant.
- Informative about box added.
- Remote cheating (cheat games over a network).
- Pause target (pause without switching applications).
- New icon.
Bug Fixes:
- Searching implemented for all supported types.
- Changing values now works.
- Searching/changing decimal numbers is no longer broken.
- Targets can now be paused before the first search.
- Some user interface glitches fixed.
- Other minor bugs.

86 files changed:
AboutBoxController.h [new file with mode: 0644]
AboutBoxController.m [new file with mode: 0644]
AppController.h
AppController.m
CheatClient.h [new file with mode: 0644]
CheatClient.m [new file with mode: 0644]
CheatListener.h [new file with mode: 0644]
CheatListener.m [new file with mode: 0644]
CheatServer.h [new file with mode: 0644]
CheatServer.m [new file with mode: 0644]
ClientDelegate.h [new file with mode: 0644]
English.lproj/AboutBox.nib/classes.nib [new file with mode: 0644]
English.lproj/AboutBox.nib/info.nib [new file with mode: 0644]
English.lproj/AboutBox.nib/keyedobjects.nib [new file with mode: 0644]
English.lproj/AboutBox.nib/objects.nib [new file with mode: 0644]
English.lproj/AboutBox~.nib/classes.nib [new file with mode: 0644]
English.lproj/AboutBox~.nib/info.nib [new file with mode: 0644]
English.lproj/AboutBox~.nib/keyedobjects.nib [new file with mode: 0644]
English.lproj/AboutBox~.nib/objects.nib [new file with mode: 0644]
English.lproj/Credits.rtf [new file with mode: 0644]
English.lproj/InfoPlist.strings
English.lproj/MainMenu.nib/classes.nib
English.lproj/MainMenu.nib/info.nib
English.lproj/MainMenu.nib/keyedobjects.nib
English.lproj/MainMenu.nib/objects.nib
English.lproj/MainMenu~.nib/classes.nib
English.lproj/MainMenu~.nib/info.nib
English.lproj/MainMenu~.nib/keyedobjects.nib
English.lproj/MainMenu~.nib/objects.nib
English.lproj/MyDocument.nib/classes.nib [new file with mode: 0644]
English.lproj/MyDocument.nib/info.nib [new file with mode: 0644]
English.lproj/MyDocument.nib/keyedobjects.nib [new file with mode: 0644]
English.lproj/MyDocument.nib/objects.nib [new file with mode: 0644]
English.lproj/MyDocument~.nib/classes.nib [new file with mode: 0644]
English.lproj/MyDocument~.nib/info.nib [new file with mode: 0644]
English.lproj/MyDocument~.nib/keyedobjects.nib [new file with mode: 0644]
English.lproj/MyDocument~.nib/objects.nib [new file with mode: 0644]
English.lproj/NetTraffic.nib/classes.nib [new file with mode: 0644]
English.lproj/NetTraffic.nib/info.nib [new file with mode: 0644]
English.lproj/NetTraffic.nib/keyedobjects.nib [new file with mode: 0644]
English.lproj/NetTraffic.nib/objects.nib [new file with mode: 0644]
English.lproj/NetTraffic~.nib/classes.nib [new file with mode: 0644]
English.lproj/NetTraffic~.nib/info.nib [new file with mode: 0644]
English.lproj/NetTraffic~.nib/keyedobjects.nib [new file with mode: 0644]
English.lproj/NetTraffic~.nib/objects.nib [new file with mode: 0644]
English.lproj/Preferences.nib/classes.nib [new file with mode: 0644]
English.lproj/Preferences.nib/info.nib [new file with mode: 0644]
English.lproj/Preferences.nib/keyedobjects.nib [new file with mode: 0644]
English.lproj/Preferences.nib/objects.nib [new file with mode: 0644]
English.lproj/Preferences~.nib/classes.nib [new file with mode: 0644]
English.lproj/Preferences~.nib/info.nib [new file with mode: 0644]
English.lproj/Preferences~.nib/keyedobjects.nib [new file with mode: 0644]
English.lproj/Preferences~.nib/objects.nib [new file with mode: 0644]
Info-The_Cheat__Upgraded_.plist [new file with mode: 0644]
ListenerDelegate.h [new file with mode: 0644]
MenuExtras.h [new file with mode: 0644]
MenuExtras.m [new file with mode: 0644]
MyDocument.h [new file with mode: 0644]
MyDocument.m [new file with mode: 0644]
NetTrafficController.h [new file with mode: 0644]
NetTrafficController.m [new file with mode: 0644]
NetTrafficControlling.h [new file with mode: 0644]
PreferenceController.h [new file with mode: 0644]
PreferenceController.m [new file with mode: 0644]
PreferenceControlling.h [new file with mode: 0644]
Read Me.pdf [new file with mode: 0644]
Read Me.rtf [new file with mode: 0644]
Read Me.txt [deleted file]
SearchResults.h [new file with mode: 0644]
SearchResults.m [new file with mode: 0644]
ServerDelegate.h [new file with mode: 0644]
ServerDelegate.m [new file with mode: 0644]
ServerHolder.h [new file with mode: 0644]
ServerHolder.m [new file with mode: 0644]
The Cheat.pbproj/chaz.pbxuser
The Cheat.pbproj/project.pbxproj
The_Cheat_Prefix.pch [moved from The_Cheat_Prefix.h with 62% similarity]
cheat_globals.h [new file with mode: 0644]
cheat_globals.m [new file with mode: 0644]
cheat_net.h [new file with mode: 0644]
cheat_net.m [new file with mode: 0644]
cheat_shared.h [new file with mode: 0644]
cheat_shared.m [new file with mode: 0644]
cheat_types.h [new file with mode: 0644]
icon_b.icns [new file with mode: 0644]
main.m

diff --git a/AboutBoxController.h b/AboutBoxController.h
new file mode 100644 (file)
index 0000000..2b9901d
--- /dev/null
@@ -0,0 +1,22 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      AboutBoxController.h
+// Created:   Mon Nov 24 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import <Foundation/Foundation.h>
+
+
+@interface AboutBoxController : NSWindowController
+{
+       IBOutlet NSWindow               *aboutWindow;
+}
+
+- (IBAction)launchWebsiteButton:(id)sender;
+- (IBAction)launchEmailButton:(id)sender;
+
+@end
diff --git a/AboutBoxController.m b/AboutBoxController.m
new file mode 100644 (file)
index 0000000..68e2c6d
--- /dev/null
@@ -0,0 +1,40 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      AboutBoxController.m
+// Created:   Mon Nov 24 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import "AboutBoxController.h"
+
+#include "cheat_shared.h"
+
+
+@implementation AboutBoxController
+
+
+- (id)init
+{
+       return [super initWithWindowNibName:@"AboutBox"];
+}
+
+- (void)windowDidLoad
+{
+       [aboutWindow center];
+}
+
+- (IBAction)launchWebsiteButton:(id)sender
+{
+       LaunchWebsite();
+}
+
+- (IBAction)launchEmailButton:(id)sender
+{
+       LaunchEmail();
+}
+
+
+@end
index 791788728a5ccd27b354fdab5927f0175d76a4a2..fb222b3ac0305fa64ece1cf1dc1678ea0379941b 100644 (file)
 
 #import <Cocoa/Cocoa.h>
 
+#import "PreferenceControlling.h"
+#import "NetTrafficControlling.h"
+#import "ListenerDelegate.h"
+#import "ServerDelegate.h"
 
-// constants
-enum
-{
-       TYPE_STRING, TYPE_INTEGER, TYPE_FLOAT
-};
+#include "cheat_globals.h"
 
-enum
-{
-       SIZE_8_BIT, SIZE_16_BIT, SIZE_32_BIT, SIZE_64_BIT
-};
+
+@class AboutBoxController;
+@class PreferenceController;
+@class NetTrafficController;
 
 
-@interface AppController : NSObject
+@interface AppController : NSObject < PreferenceControlling, NetTrafficControlling, ListenerDelegate, ServerDelegate >
 {
-       BOOL                    cheating;
-       
-       NSArray                 *processList;
-       
-       NSMutableArray  *addressList;
-       BOOL                    searching;
-       
-       IBOutlet id             window;
-       IBOutlet id             processPopup;
-       IBOutlet id             searchTextField;
-       IBOutlet id             changeTextField;
-       IBOutlet id             searchButton;
-       IBOutlet id             changeButton;
-       IBOutlet id             typePopup;
-       IBOutlet id             sizePopup;
-       IBOutlet id             statusText;
-       IBOutlet id             statusBar;
-       IBOutlet id             addressTable;
+       BOOL                                    waitingToListen;
+       NSConnection                    *connection;
+       int                                             connectionPort;
+       BOOL                                    connectionRemote;
+       int                                             sockfd;
+       NSNetService                    *service, *oldService;
+
+       NSMutableArray                  *servers;
+
+       AboutBoxController              *aboutBoxController;
+       PreferenceController    *preferenceController;
+       NetTrafficController    *netTrafficController;
 }
 
-- (void)reset;
-
-- (void)firstSearch:(id)nothing;
-- (void)search:(id)nothing;
-
-- (void)change;
+- (void)listenOnPort:(int)port remote:(BOOL)remote;
+- (void)stopListener;
 
-- (void)updateProcessPopup;
-- (void)updateTypePopup;
-- (void)updateSizePopup;
-- (void)updateSearchButton;
-- (void)updateChangeButton;
-- (void)updateStatusText;
+- (void)broadcastWithName:(NSString *)name;
+- (void)stopBroadcast;
 
-- (void)rebuildProcessList;
+- (IBAction)showAboutBoxWindow:(id)sender;
+- (IBAction)showPreferenceWindow:(id)sender;
+- (IBAction)showNetTrafficWindow:(id)sender;
 
-- (IBAction)processPopup:(id)sender;
-- (IBAction)typePopup:(id)sender;
-- (IBAction)searchButton:(id)sender;
-- (IBAction)changeButton:(id)sender;
+- (IBAction)launchHelpFile:(id)sender;
+- (IBAction)launchWebsiteMenu:(id)sender;
+- (IBAction)launchDebugEmailMenu:(id)sender;
 
 @end
\ No newline at end of file
index d5de59e1cb629da7427245be8dfa1e982f0870d9..c8750c03b8ceec35d47e654dc9f716b8d61ef1f1 100644 (file)
 
 #import "AppController.h"
 
-#include <mach/vm_map.h>
-#include <mach/mach_traps.h>
+#include "cheat_shared.h"
 
+#import "AboutBoxController.h"
+#import "PreferenceController.h"
+#import "NetTrafficController.h"
 
-// defines
-#define PID_SELECTED   [[[processList objectAtIndex:[processPopup indexOfSelectedItem]] objectForKey:@"NSApplicationProcessIdentifier"] intValue]
-#define TYPE_SELECTED  [typePopup indexOfSelectedItem]
-#define SIZE_SELECTED  [sizePopup indexOfSelectedItem]
+#import "CheatListener.h"
+#import "CheatServer.h"
+
+#import "ServerHolder.h"
 
 
 @implementation AppController
 
++ (void)initialize
+{
+       NSMutableDictionary             *defaults = [NSMutableDictionary dictionary];
+       char                                    temp[104];
+       
+       // change the socket path to reside in the home directory of the current user
+       strncpy( temp, [NSHomeDirectory() lossyCString], 103 );
+       strncat( temp, TCDefaultListenPath, 103 - strlen(TCDefaultListenPath) );
+       strncpy( TCDefaultListenPath, temp, 103 );
+
+       [defaults setObject:[NSNumber numberWithBool:TCGlobalPlaySounds] forKey:TCPlaySoundsPref];
+       [defaults setObject:[NSNumber numberWithBool:TCGlobalWindowsOnTop] forKey:TCWindowsOnTopPref];
+       [defaults setObject:[NSNumber numberWithBool:TCGlobalAllowRemote] forKey:TCAllowRemotePref];
+       [defaults setObject:[NSNumber numberWithInt:TCGlobalListenPort] forKey:TCListenPortPref];
+       [defaults setObject:[NSString stringWithFormat:@"%@'s Computer", NSFullUserName()] forKey:TCBroadcastNamePref];
+
+       [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
+
+       TCGlobalPlaySounds = [[NSUserDefaults standardUserDefaults] integerForKey:TCPlaySoundsPref];
+       TCGlobalWindowsOnTop = [[NSUserDefaults standardUserDefaults] integerForKey:TCWindowsOnTopPref];
+       TCGlobalListenPort = [[NSUserDefaults standardUserDefaults] integerForKey:TCListenPortPref];
+       TCGlobalAllowRemote = [[NSUserDefaults standardUserDefaults] boolForKey:TCAllowRemotePref];
+}
+
 - (id)init
 {
        if ( self = [super init] )
        {
+               servers = [[NSMutableArray alloc] init];
                
+               [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willQuit:) name:@"NSApplicationWillTerminateNotification" object:nil];
+
+               [self listenOnPort:TCGlobalListenPort remote:TCGlobalAllowRemote];
+               [self broadcastWithName:TCGlobalBroadcastName];
        }
 
        return self;
 }
 
-- (void)awakeFromNib
-{
-       NSNotificationCenter    *nc = [[NSWorkspace sharedWorkspace] notificationCenter];
 
-       [self rebuildProcessList];
-       [self updateProcessPopup];
-       [self updateTypePopup];
-       [self updateSizePopup];
-       [self updateChangeButton];
-       [self updateStatusText];
+- (void)listenOnPort:(int)port remote:(BOOL)remote
+{
+       if ( connection )
+       {
+               [self stopListener];
 
-       [nc addObserver:self selector:@selector(processListChanged:) name:@"NSWorkspaceDidLaunchApplicationNotification" object:nil];
-       [nc addObserver:self selector:@selector(processListChanged:) name:@"NSWorkspaceDidTerminateApplicationNotification" object:nil];
-       
-       [self reset];
+               waitingToListen = YES;
+               connectionPort = port;
+               connectionRemote = remote;
+       }
+       else
+       {
+               connection = [[CheatListener listenerWithDelegate:self port:port remote:remote] retain];
+               connectionPort = port;
+               connectionRemote = remote;
+       }
 }
 
-
-- (void)reset
+- (void)stopListener
 {
-       if ( cheating )
+       if ( connection )
        {
-               cheating = NO;
-
-               [addressList release], addressList = nil;
-
-               // update the interface
-               [typePopup setEnabled:YES];
-               [sizePopup setEnabled:YES];
-               [searchTextField setStringValue:@""];
-               [changeTextField setStringValue:@""];
-               [addressTable reloadData];
+               close( sockfd );
+               [connection release], connection = nil;
        }
 }
 
 
-- (void)firstSearch:(id)nothing
+- (void)broadcastWithName:(NSString *)name
 {
-       NSAutoreleasePool                       *pool = [[NSAutoreleasePool alloc] init];
-       
-       pid_t                                           pid = (pid_t)PID_SELECTED;
-       vm_map_t                                        task;
-
-       kern_return_t                           result;
-
-       vm_address_t                            address = 0x0;
-       vm_size_t                                       size = 0;
-       vm_region_basic_info_data_t     info;
-       mach_msg_type_number_t          infoCnt = 8;
-       mach_port_t                                     object_name = 0;
-
-       char unsigned                           *data;
-       vm_size_t                                       dataCnt;
+       if ( TCGlobalAllowRemote )
+       {
+               [self stopBroadcast];
+               
+               service = [[NSNetService alloc] initWithDomain:@"local." type:@"_cheat._tcp." name:name port:TCGlobalListenPort];
+               [service setDelegate:self];
+               [service publish];
+       }
+}
 
-       char unsigned                           *string8bit = (char unsigned *)[[searchTextField stringValue] lossyCString];
-       long unsigned                           stringSize = strlen( string8bit );
-       char                                            integer8bit = (char)[searchTextField intValue];
-       short                                           integer16bit = (short)[searchTextField intValue];
-       long                                            integer32bit = (long)[searchTextField intValue];
-       long long                                       integer64bit = (long long)[searchTextField intValue];
-       float                                           float32bit = (float)[searchTextField floatValue];
-       double                                          float64bit = (double)[searchTextField doubleValue];
+- (void)stopBroadcast
+{
+       oldService = service;
+       [oldService stop], service = nil;
+}
 
-       BOOL                                            done = NO;
 
-       if ( (result = task_for_pid( current_task(), pid, &task)) != KERN_SUCCESS )
+- (IBAction)showAboutBoxWindow:(id)sender
+{
+       if ( !aboutBoxController )
        {
-               NSLog( @"task_for_pid returned error: %i", result );
-               return;
+               aboutBoxController = [[AboutBoxController alloc] init];
        }
+       
+       [aboutBoxController showWindow:self];
+}
 
-       addressList = [[NSMutableArray alloc] init];
-
-       while ( !done )
+- (IBAction)showPreferenceWindow:(id)sender
+{
+       if ( !preferenceController )
        {
-               if ( (result = vm_region( task, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS )
-               {
-                       if ( result != KERN_INVALID_ADDRESS )
-                       {
-                               NSLog( @"vm_region returned error: %i", result );
-                       }
+               preferenceController = [[PreferenceController alloc] initWithDelegate:self];
+       }
 
-                       done = YES;
-               }
+       [preferenceController showWindow:self];
+}
 
-               //NSLog( @"address: %X, size: %i", address, size );
+- (IBAction)showNetTrafficWindow:(id)sender
+{
+       if ( !netTrafficController )
+       {
+               netTrafficController = [[NetTrafficController alloc] initWithDelegate:self];
+       }
 
-               if ( (info.protection & VM_PROT_READ) && ((info.protection & VM_PROT_WRITE) >> 1) )
-               {
-                       data = (char unsigned *)malloc( size );
-                       dataCnt = size;
-
-                       if ( (result = vm_read_overwrite( task, address, size, (vm_address_t)data, &dataCnt )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE )
-                       {
-                               NSLog( @"vm_read_overwrite returned error: %i", result );
-                               free( data );
-                               done = YES;
-                       }
-
-                       if ( result == KERN_SUCCESS )
-                       {
-                               long unsigned   i, max = (long unsigned)dataCnt;
-
-                               //NSLog( @"data: %X, size: %i", (vm_address_t)data, dataCnt );
-
-                               switch ( TYPE_SELECTED )
-                               {
-                                       case TYPE_STRING:
-                                               switch ( SIZE_SELECTED )
-                                               {
-                                                       case SIZE_8_BIT:
-                                                       {
-                                                               long unsigned   maxString = max - stringSize;
-
-                                                               for ( i = 0; i < maxString; i += sizeof(char unsigned) )
-                                                               {
-                                                                       if ( strncmp( string8bit, data+i, stringSize ) == 0 )
-                                                                       {
-                                                                               [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]];
-                                                                       }
-                                                               }
-                                                       }
-                                                               break;
-                                               }
-                                               break;
-
-                                       case TYPE_INTEGER:
-                                               switch ( SIZE_SELECTED )
-                                               {
-                                                       case SIZE_8_BIT:
-                                                       {
-                                                               for ( i = 0; i < max; i += sizeof(char) )
-                                                               {
-                                                                       if ( integer8bit == *((char *)(data+i)) )
-                                                                       {
-                                                                               [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]];
-                                                                       }
-                                                               }
-                                                       }
-                                                               break;
-
-                                                       case SIZE_16_BIT:
-                                                       {
-                                                               for ( i = 0; i < max; i += sizeof(short) )
-                                                               {
-                                                                       if ( integer16bit == *((short *)(data+i)) )
-                                                                       {
-                                                                               [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]];
-                                                                       }
-                                                               }
-                                                       }
-                                                               break;
-
-                                                       case SIZE_32_BIT:
-                                                       {
-                                                               for ( i = 0; i < max; i += sizeof(long) )
-                                                               {
-                                                                       if ( integer32bit == *((long *)(data+i)) )
-                                                                       {
-                                                                               [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]];
-                                                                       }
-                                                               }
-                                                       }
-                                                               break;
-
-                                                       case SIZE_64_BIT:
-                                                       {
-                                                               for ( i = 0; i < max; i += sizeof(long long) )
-                                                               {
-                                                                       if ( integer64bit == *((long long *)(data+i)) )
-                                                                       {
-                                                                               [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]];
-                                                                       }
-                                                               }
-                                                       }
-                                                               break;
-                                               }
-                                               break;
-
-                                       case TYPE_FLOAT:
-                                               switch ( SIZE_SELECTED+2 )
-                                               {
-                                                       case SIZE_32_BIT:
-                                                       {
-                                                               for ( i = 0; i < max; i += sizeof(float) )
-                                                               {
-                                                                       if ( float32bit == *((float *)(data+i)) )
-                                                                       {
-                                                                               [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]];
-                                                                       }
-                                                               }
-                                                       }
-                                                               break;
-
-                                                       case SIZE_64_BIT:
-                                                       {
-                                                               for ( i = 0; i < max; i += sizeof(double) )
-                                                               {
-                                                                       if ( float64bit == *((double *)(data+i)) )
-                                                                       {
-                                                                               [addressList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]];
-                                                                       }
-                                                               }
-                                                       }
-                                                               break;
-                                               }
-                                               break;
-                               }
-                       }
-
-                       free( data );
-               }
+       [netTrafficController showWindow:self];
+}
 
-               address += size;
-       }
 
-       searching = NO;
+- (IBAction)launchHelpFile:(id)sender
+{
+       //[[NSWorkspace sharedWorkspace] openFile:[[NSBundle mainBundle] pathForResource:@"Read Me" ofType:@"html"] withApplication:@"Safari"];
+       [[NSWorkspace sharedWorkspace] openURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Read Me" ofType:@"pdf"]]];
+}
 
-       // update the interface
-       [statusBar stopAnimation:self];
-       [self updateProcessPopup];
-       [self updateSearchButton];
-       [self updateTypePopup];
-       [self updateSizePopup];
-       [self updateChangeButton];
-       [self updateStatusText];
-       [addressTable reloadData];
+- (IBAction)launchWebsiteMenu:(id)sender
+{
+       LaunchWebsite();
+}
 
-       [pool release];
+- (IBAction)launchDebugEmailMenu:(id)sender
+{
+       [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"mailto:thecheat@brokenzipper.com"]];
 }
 
-- (void)search:(id)nothing
+
+- (void)dealloc
 {
-       NSAutoreleasePool                       *pool = [[NSAutoreleasePool alloc] init];
-       
-       pid_t                                           pid = (pid_t)PID_SELECTED;
-       vm_map_t                                        task;
+       [[NSNotificationCenter defaultCenter] removeObserver:self];
 
-       kern_return_t                           result;
+       [self stopListener];
+       [self stopBroadcast];
 
-       vm_address_t                            address = 0x0;
-       vm_size_t                                       size = 0;
-       vm_region_basic_info_data_t     info;
-       mach_msg_type_number_t          infoCnt = 8;
-       mach_port_t                                     object_name = 0;
+       [servers release];
 
-       char unsigned                           *data;
-       vm_size_t                                       dataCnt;
+       [super dealloc];
+}
 
-       char unsigned                           *string8bit = (char unsigned *)[[searchTextField stringValue] lossyCString];
-       long unsigned                           stringSize = strlen( string8bit );
-       char                                            integer8bit = (char)[searchTextField intValue];
-       short                                           integer16bit = (short)[searchTextField intValue];
-       long                                            integer32bit = (long)[searchTextField intValue];
-       long long                                       integer64bit = (long long)[searchTextField intValue];
-       float                                           float32bit = (float)[searchTextField floatValue];
-       double                                          float64bit = (double)[searchTextField doubleValue];
 
-       long unsigned                           j, max = [addressList count];
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   PreferenceControlling
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-       NSMutableArray                          *newList = [[NSMutableArray alloc] init];
 
-       if ( (result = task_for_pid( current_task(), pid, &task)) != KERN_SUCCESS )
+- (void)preferenceAllowRemoteChanged:(BOOL)allow
+{
+       [self listenOnPort:TCGlobalListenPort remote:allow];
+       
+       if ( allow )
        {
-               NSLog( @"task_for_pid returned error: %i", result );
-               return;
+               [self broadcastWithName:TCGlobalBroadcastName];
        }
-
-       for ( j = 0; j < max; j++ )
+       else
        {
-               long unsigned           item = [[addressList objectAtIndex:j] unsignedLongValue];
+               [self stopBroadcast];
+       }
 
-               address = (vm_address_t)item;
+       [netTrafficController allowRemoteChanged:allow];
+}
 
-               if ( (result = vm_region( task, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS )
-               {
-                       if ( result != KERN_INVALID_ADDRESS )
-                       {
-                               NSLog( @"vm_region returned error: %i", result );
-                       }
+- (void)preferenceListenPortChanged:(int)port
+{
+       [self listenOnPort:port remote:TCGlobalAllowRemote];
+       [self broadcastWithName:TCGlobalBroadcastName];
 
-                       break;
-               }
+       [netTrafficController listenPortChanged:port];
+}
 
-               //NSLog( @"address: %X, size: %i", address, size );
+- (void)preferenceBroadcastNameChanged:(NSString *)name
+{
+       [self broadcastWithName:name];
 
-               if ( (info.protection & VM_PROT_READ) && ((info.protection & VM_PROT_WRITE) >> 1) )
-               {
-                       data = (char unsigned *)malloc( size );
-                       dataCnt = size;
-
-                       if ( (result = vm_read_overwrite( task, address, size, (vm_address_t)data, &dataCnt )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE )
-                       {
-                               NSLog( @"vm_read_overwrite returned error: %i", result );
-                               free( data );
-                               break;
-                       }
-
-                       if ( result == KERN_SUCCESS )
-                       {
-                               long unsigned   i = item - (long unsigned)address;
-
-                               if ( i < (long unsigned)dataCnt )
-                               {
-                                       //NSLog( @"data: %X, size: %i", (vm_address_t)data, dataCnt );
-
-                                       switch ( TYPE_SELECTED )
-                                       {
-                                               case TYPE_STRING:
-                                                       switch ( SIZE_SELECTED )
-                                                       {
-                                                               case SIZE_8_BIT:
-                                                               {
-                                                                       if ( strncmp( string8bit, data+i, stringSize ) == 0 )
-                                                                       {
-                                                                               [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]];
-                                                                       }
-                                                               }
-                                                                       break;
-                                                       }
-                                                       break;
-
-                                               case TYPE_INTEGER:
-                                                       switch ( SIZE_SELECTED )
-                                                       {
-                                                               case SIZE_8_BIT:
-                                                               {
-                                                                       if ( integer8bit == *((char *)(data+i)) )
-                                                                       {
-                                                                               [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]];
-                                                                       }
-                                                               }
-                                                                       break;
-
-                                                               case SIZE_16_BIT:
-                                                               {
-                                                                       if ( integer16bit == *((short *)(data+i)) )
-                                                                       {
-                                                                               [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]];
-                                                                       }
-                                                               }
-                                                                       break;
-
-                                                               case SIZE_32_BIT:
-                                                               {
-                                                                       if ( integer32bit == *((long *)(data+i)) )
-                                                                       {
-                                                                               [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]];
-                                                                       }
-                                                               }
-                                                                       break;
-
-                                                               case SIZE_64_BIT:
-                                                               {
-                                                                       if ( integer64bit == *((long long *)(data+i)) )
-                                                                       {
-                                                                               [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]];
-                                                                       }
-                                                               }
-                                                                       break;
-                                                       }
-                                                       break;
-
-                                               case TYPE_FLOAT:
-                                                       switch ( SIZE_SELECTED+2 )
-                                                       {
-                                                               case SIZE_32_BIT:
-                                                               {
-                                                                       if ( float32bit == *((float *)(data+i)) )
-                                                                       {
-                                                                               [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]];
-                                                                       }
-                                                               }
-                                                                       break;
-
-                                                               case SIZE_64_BIT:
-                                                               {
-                                                                       if ( float64bit == *((double *)(data+i)) )
-                                                                       {
-                                                                               [newList addObject:[NSNumber numberWithUnsignedLong:(long unsigned)address + i]];
-                                                                       }
-                                                               }
-                                                                       break;
-                                                       }
-                                                       break;
-                                       }
-                               }
-                       }
-
-                       free( data );
-               }
-       }
+       [netTrafficController broadcastNameChanged:name];
+}
 
-       [addressList release];
-       addressList = newList;
 
-       searching = NO;
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   NetTrafficControlling
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-       // update the interface
-       [statusBar stopAnimation:self];
-       [self updateProcessPopup];
-       [self updateSearchButton];
-       [self updateTypePopup];
-       [self updateSizePopup];
-       [self updateChangeButton];
-       [self updateStatusText];
-       [addressTable reloadData];
 
-       [pool release];
+- (int)netTrafficConnectionCount
+{
+       return [servers count];
 }
 
-
-- (void)change
+- (NSArray *)netTrafficConnectionList
 {
-       pid_t                                           pid = (pid_t)PID_SELECTED;
-       vm_map_t                                        task;
+       return servers;
+}
 
-       kern_return_t                           result;
+- (void)netTrafficKillConnection:(int)index
+{
+       NSLog( @"kill connection" );
 
-       char unsigned                           *string8bit = (char unsigned *)[[changeTextField stringValue] lossyCString];
-       long unsigned                           stringSize = strlen( string8bit );
-       char                                            integer8bit = (char)[changeTextField intValue];
-       short                                           integer16bit = (short)[changeTextField intValue];
-       long                                            integer32bit = (long)[changeTextField intValue];
-       long long                                       integer64bit = (long long)[changeTextField intValue];
-       float                                           float32bit = (float)[changeTextField floatValue];
-       double                                          float64bit = (double)[changeTextField doubleValue];
+       close( [[servers objectAtIndex:index] sockfd] );
+}
 
-       NSEnumerator                            *enumerator = [addressTable selectedRowEnumerator];
-       NSNumber                                        *row;
 
-       if ( (result = task_for_pid( current_task(), pid, &task)) != KERN_SUCCESS )
-       {
-               NSLog( @"task_for_pid returned error: %i", result );
-               return;
-       }
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   ListenerDelegate
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-       while ( row = [enumerator nextObject] )
-       {
-               long unsigned           item = [[addressList objectAtIndex:[row intValue]] unsignedLongValue];
 
-               //NSLog( @"address: %X", item );
+- (void)listenerListeningWithSocket:(int)sock
+{
+       sockfd = sock;
 
-               switch ( TYPE_SELECTED )
-               {
-                       case TYPE_STRING:
-                               switch ( SIZE_SELECTED )
-                               {
-                                       case SIZE_8_BIT:
-                                       {
-                                               result = vm_write( task, (vm_address_t)item, (vm_offset_t)string8bit, (mach_msg_type_number_t)stringSize );
-                                       }
-                                               break;
-                               }
-                               break;
-
-                       case TYPE_INTEGER:
-                               switch ( SIZE_SELECTED )
-                               {
-                                       case SIZE_8_BIT:
-                                       {
-                                               result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&integer8bit), sizeof(char) );
-                                       }
-                                               break;
-
-                                       case SIZE_16_BIT:
-                                       {
-                                               result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&integer16bit), sizeof(short) );
-                                       }
-                                               break;
-
-                                       case SIZE_32_BIT:
-                                       {
-                                               result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&integer32bit), sizeof(long) );
-                                       }
-                                               break;
-
-                                       case SIZE_64_BIT:
-                                       {
-                                               result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&integer64bit), sizeof(long long) );
-                                       }
-                                               break;
-                               }
-                               break;
-
-                       case TYPE_FLOAT:
-                               switch ( SIZE_SELECTED+2 )
-                               {
-                                       case SIZE_32_BIT:
-                                       {
-                                               result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&float32bit), sizeof(float) );
-                                       }
-                                               break;
-
-                                       case SIZE_64_BIT:
-                                       {
-                                               result = vm_write( task, (vm_address_t)item, (vm_offset_t)(&float64bit), sizeof(double) );
-                                       }
-                                               break;
-                               }
-                               break;
-               }
-       }
+       TCGlobalListening = YES;
+       [[NSNotificationCenter defaultCenter] postNotificationName:@"TCListenerStarted" object:nil];
 }
 
-
-- (void)updateProcessPopup
+- (void)listenerDisconnected
 {
-       if ( searching )
+       if ( waitingToListen )
        {
-               [processPopup setEnabled:NO];
+               waitingToListen = NO;
+               connection = [[CheatListener listenerWithDelegate:self port:connectionPort remote:connectionRemote] retain];
        }
        else
        {
-               [processPopup setEnabled:YES];
+               [self stopListener];
        }
+
+       TCGlobalListening = NO;
+       [[NSNotificationCenter defaultCenter] postNotificationName:@"TCListenerStopped" object:nil];
 }
 
-- (void)updateTypePopup
+- (void)listenerError:(NSString *)error message:(NSString *)message
 {
-       if ( cheating || searching )
-       {
-               [typePopup setEnabled:NO];
-       }
-       else
-       {
-               int                     selected = [typePopup indexOfSelectedItem];
-               
-               [typePopup setEnabled:YES];
-               
-               [typePopup removeAllItems];
-
-               [typePopup addItemWithTitle:@"String"];
-               [typePopup addItemWithTitle:@"Integer"];
-               [typePopup addItemWithTitle:@"Float"];
+       NSRunCriticalAlertPanel( error, message, @"OK", nil, nil );
+}
 
-               [typePopup selectItemAtIndex:selected];
-       }
+- (void)listenerReceivedNewConnection:(int)sock
+{
+       [servers addObject:[ServerHolder holderWithConnection:[CheatServer serverWithDelegate:self socket:sock] socket:sock]];
 }
 
-- (void)updateSizePopup
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   ServerDelegate
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+- (void)server:(CheatServer *)server connectedWithSocket:(int)sock
 {
-       if ( cheating || searching )
-       {
-               [sizePopup setEnabled:NO];
-       }
-       else
-       {
-               [sizePopup setEnabled:YES];
-               
-               [sizePopup removeAllItems];
+       int                             i, top = [servers count];
 
-               switch ( TYPE_SELECTED )
+       for ( i = 0; i < top; i++ )
+       {
+               if ( [(ServerHolder *)[servers objectAtIndex:i] sockfd] == sock )
                {
-                       case TYPE_STRING:
-                               [sizePopup addItemWithTitle:@"  8-bit"];
-                               break;
-
-                       case TYPE_INTEGER:
-                               [sizePopup addItemWithTitle:@"  8-bit"];
-                               [sizePopup addItemWithTitle:@"16-bit"];
-                               [sizePopup addItemWithTitle:@"32-bit"];
-                               [sizePopup addItemWithTitle:@"64-bit"];
-                               break;
-
-                       case TYPE_FLOAT:
-                               [sizePopup addItemWithTitle:@"32-bit"];
-                               [sizePopup addItemWithTitle:@"64-bit"];
-                               break;
+                       [(ServerHolder *)[servers objectAtIndex:i] setServer:server];
+                       break;
                }
        }
-}
 
-- (void)updateSearchButton
-{
-       if ( searching )
-       {
-               [searchTextField setEnabled:NO];
-               [searchButton setEnabled:NO];
-       }
-       else
-       {
-               [searchTextField setEnabled:YES];
-               [searchButton setEnabled:YES];
-       }
+       [netTrafficController connectionListChanged];
 }
 
-- (void)updateChangeButton
+- (void)serverDisconnected:(CheatServer *)server
 {
-       if ( [addressTable selectedRow] == -1 || searching )
-       {
-               [changeTextField setEnabled:NO];
-               [changeButton setEnabled:NO];
-       }
-       else
-       {
-               [changeTextField setEnabled:YES];
-               [changeButton setEnabled:YES];
-       }
-}
+       int                             i, top = [servers count];
 
-- (void)updateStatusText
-{
-       if ( searching )
+       for ( i = 0; i < top; i++ )
        {
-               [statusText setStringValue:@"Searching..."];
-       }
-       else if ( !cheating )
-       {
-               [statusText setStringValue:[NSString stringWithFormat:@"PID: %i", PID_SELECTED]];
-       }
-       else // cheating
-       {
-               [statusText setStringValue:[NSString stringWithFormat:@"Found: %i", [addressList count]]];
+               if ( [(ServerHolder *)[servers objectAtIndex:i] server] == server )
+               {
+                       [servers removeObjectAtIndex:i];
+                       break;
+               }
        }
 
-       [statusText display];
+       [netTrafficController connectionListChanged];
 }
 
-
-- (void)processListChanged:(NSNotification *)note
+- (void)server:(CheatServer *)server changedAddress:(NSString *)address
 {
-       if ( cheating && [[note name] isEqualToString:@"NSWorkspaceDidTerminateApplicationNotification"] )
+       int                             i, top = [servers count];
+
+       for ( i = 0; i < top; i++ )
        {
-               int                     pid = PID_SELECTED;
-               int                     other = [[[note userInfo] objectForKey:@"NSApplicationProcessIdentifier"] intValue];
-               
-               // check to make sure the program we were cheating wasn't the one that quit
-               if ( pid == other )
+               if ( [(ServerHolder *)[servers objectAtIndex:i] server] == server )
                {
-                       // it was, so let's take care of it
-                       NSBeginAlertSheet( @"", @"OK", nil, nil, window, nil, nil, nil, 0, @"The application that was being cheated has quit." );
-                       
-                       [self reset];
+                       [(ServerHolder *)[servers objectAtIndex:i] setAddress:address];
+                       break;
                }
        }
 
-       [self rebuildProcessList];
-       [self updateProcessPopup];
-       [self updateStatusText];
+       [netTrafficController connectionListChanged];
 }
 
-
-- (void)rebuildProcessList
+- (void)server:(CheatServer *)server changedAction:(NSString *)action
 {
-       NSString                *selected = [[processPopup titleOfSelectedItem] retain];
-       int                             i, max;
-
-       [processList release];
-       processList = [[[NSWorkspace sharedWorkspace] launchedApplications] retain];
+       int                             i, top = [servers count];
 
-       max = [processList count];
-
-       [processPopup setImagePosition:NSImageOverlaps];
-
-       [processPopup removeAllItems];
-
-       for ( i = 0; i < max; i++ )
+       for ( i = 0; i < top; i++ )
        {
-               NSString        *name = [[processList objectAtIndex:i] objectForKey:@"NSApplicationName"];
-               NSString        *path = [[processList objectAtIndex:i] objectForKey:@"NSApplicationPath"];
-
-               NSImage         *image = [[NSWorkspace sharedWorkspace] iconForFile:path];
-
-               [processPopup addItemWithTitle:name];
-
-               [image setScalesWhenResized:YES];
-               [image setSize:NSMakeSize( 16.0, 16.0 )];
-
-               [[processPopup itemAtIndex:i] setImage:image];
-
-               if ( [selected isEqualToString:[processPopup itemTitleAtIndex:i]] )
+               if ( [(ServerHolder *)[servers objectAtIndex:i] server] == server )
                {
-                       [processPopup selectItemAtIndex:i];
+                       [(ServerHolder *)[servers objectAtIndex:i] setAction:action];
+                       break;
                }
        }
 
-       [selected release];
+       [netTrafficController connectionListChanged];
 }
 
-
-- (void)dealloc
+- (NSArray *)serverProcessList
 {
-       [self reset];
-       
-       [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self];
+       return [[NSWorkspace sharedWorkspace] launchedApplications];
+}
 
-       [processList release];
-       
-       [super dealloc];
+- (pid_t)serverFirstProcess
+{
+       return (pid_t)[[[[[NSWorkspace sharedWorkspace] launchedApplications] objectAtIndex:0] objectForKey:@"NSApplicationProcessIdentifier"] intValue];
 }
 
 
-- (IBAction)processPopup:(id)sender
-{
-       [self reset];
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   NetService Delegate
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-       [self updateStatusText];
-}
 
-- (IBAction)typePopup:(id)sender
+- (void)netServiceWillPublish:(NSNetService *)sender
 {
-       [self updateSizePopup];
+       NSLog( @"service will publish" );
+       [sender resolve];
 }
 
-- (IBAction)searchButton:(id)sender
+- (void)netService:(NSNetService *)sender didNotPublish:(NSDictionary *)errorDict
 {
-       if ( [[searchTextField stringValue] isEqualToString:@""] )
-       {
-               NSBeep();
-               return;
-       }
-
-       searching = YES;
-
-       // update the interface
-       [statusBar startAnimation:self];
-       [self updateProcessPopup];
-       [self updateSearchButton];
-       [self updateTypePopup];
-       [self updateSizePopup];
-       [self updateChangeButton];
-       [self updateStatusText];
-
-       if ( !cheating )
+       NSLog( @"service did not publish" );
+       
+       if ( [[errorDict objectForKey:@"NSNetServicesErrorCode"] intValue] == NSNetServicesCollisionError )
        {
-               cheating = YES;
-
-               [NSThread detachNewThreadSelector:@selector(firstSearch:) toTarget:self withObject:nil];
+               [self broadcastWithName:[NSString stringWithFormat:@"%@ %i", TCGlobalBroadcastName, TCGlobalAlternateBroadcastNameCount++]];
        }
        else
        {
-               [NSThread detachNewThreadSelector:@selector(search:) toTarget:self withObject:nil];
+               NSRunCriticalAlertPanel( @"Network Error", @"Server couldn't broadcast.  Local can't be cheated by remote computers.", @"OK", nil, nil );
        }
-/*
-       {
-               pid_t                   pid = (pid_t)PID_SELECTED;
-               vm_map_t                task;
-
-               kern_return_t   result;
-               //int                           waitStatus;
-
-               addressList = [[NSMutableArray alloc] init];
-
-               result = task_for_pid( current_task(), pid, &task );
-
-               if ( result == KERN_SUCCESS )
-                       NSLog( @"KERN_SUCCESS" );
-               else if ( result == KERN_INVALID_ADDRESS )
-                       NSLog( @"KERN_INVALID_ADDRESS" );
-               else if ( result == KERN_INVALID_ARGUMENT )
-                       NSLog( @"KERN_INVALID_ARGUMENT" );
-               else if ( result == KERN_PROTECTION_FAILURE )
-                       NSLog( @"KERN_PROTECTION_FAILURE" );
-               else if ( result == KERN_NO_SPACE )
-                       NSLog( @"KERN_NO_SPACE" );
-
-               if ( ptrace( PT_ATTACH, pid, 0, 0 ) != -1 )
-               {
-                       if ( waitpid( pid, &waitStatus, WUNTRACED ) == pid )
-                       {
-                               if ( WIFSTOPPED(waitStatus) )
-                               {
-                                       NSLog( @"process stopped" );
-                               }
-                               else
-                               {
-                                       NSLog( @"process didn't stop" );
-                               }
-
-                               {
-                                       vm_address_t                            address = 0x1b000;
-                                       vm_size_t                                       size = 0;
-                                       vm_region_basic_info_data_t     info;
-                                       mach_msg_type_number_t          infoCnt = 8;
-                                       mach_port_t                                     object_name = 0;
-
-                                       BOOL                                            canRead, canWrite, canExecute;
-
-                                       char unsigned                           *data;
-                                       vm_size_t                                       dataCnt;
-
-                                       NSLog( @"pid: %i, task: %i", pid, task );
-                                       
-                                       result = vm_region( task, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name );
-
-                                       NSLog( @"info count: %i", (int)infoCnt );
-
-                                       if ( result == KERN_SUCCESS )
-                                               NSLog( @"KERN_SUCCESS" );
-                                       else if ( result == KERN_INVALID_ADDRESS )
-                                               NSLog( @"KERN_INVALID_ADDRESS" );
-                                       else if ( result == KERN_INVALID_ARGUMENT )
-                                               NSLog( @"KERN_INVALID_ARGUMENT" );
-                                       else if ( result == KERN_PROTECTION_FAILURE )
-                                               NSLog( @"KERN_PROTECTION_FAILURE" );
-                                       else if ( result == KERN_NO_SPACE )
-                                               NSLog( @"KERN_NO_SPACE" );
-
-                                       NSLog( @"address: %X, size: %i", address, size );
-
-                                       canRead = info.protection & VM_PROT_READ;
-                                       canWrite = (info.protection & VM_PROT_WRITE) >> 1;
-                                       canExecute = (info.protection & VM_PROT_EXECUTE) >> 2;
-
-                                       if ( canRead )
-                                               NSLog( @"can read" );
-                                       if ( canWrite )
-                                               NSLog( @"can write" );
-                                       if ( canExecute )
-                                               NSLog( @"can execute" );
-
-                                       data = (char unsigned *)malloc( size );
-                                       dataCnt = size;
-
-                                       result = vm_read_overwrite( task, address, size, (vm_address_t)data, &dataCnt );
-
-                                       if ( result == KERN_SUCCESS )
-                                               NSLog( @"KERN_SUCCESS" );
-                                       else if ( result == KERN_INVALID_ADDRESS )
-                                               NSLog( @"KERN_INVALID_ADDRESS" );
-                                       else if ( result == KERN_INVALID_ARGUMENT )
-                                               NSLog( @"KERN_INVALID_ARGUMENT" );
-                                       else if ( result == KERN_PROTECTION_FAILURE )
-                                               NSLog( @"KERN_PROTECTION_FAILURE" );
-                                       else if ( result == KERN_NO_SPACE )
-                                               NSLog( @"KERN_NO_SPACE" );
-
-                                       NSLog( @"data: %X, size: %i", (vm_address_t)data, dataCnt );
-
-                                       free( data );
-                               }
-                       }
-                       else
-                       {
-                               NSLog( @"waitpid() failed" );
-                       }
-
-                       ptrace( PT_DETACH, pid, 0, 0 );
-               }
-               else
-               {
-                       NSLog( @"ptrace() failed" );
-               }
-       }*/
 }
 
-- (IBAction)changeButton:(id)sender
+- (void)netServiceDidStop:(NSNetService *)sender
 {
-       [self change];
+       NSLog( @"service stopped" );
+       [oldService release], oldService = nil;
 }
 
 
-- (int)numberOfRowsInTableView:(NSTableView *)table
-{
-       if ( cheating && !searching )
-               return [addressList count];
-
-       return 0;
-}
-
-- (id)tableView:(NSTableView *)table objectValueForTableColumn:(NSTableColumn *)column row:(int)row
-{
-       return [NSString stringWithFormat:@"%X", [[addressList objectAtIndex:row] unsignedLongValue]];
-}
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   NSApplication Notification
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-- (void)tableView:(NSTableView *) setObjectValue:(id)object forTableColumn:(NSTableColumn *)column row:(int)row
-{
-       return;
-}
 
-- (void)tableViewSelectionDidChange:(NSNotification *)note
+- (void)willQuit:(NSNotification *)note
 {
-       [self updateChangeButton];
+       //[self listenPortTextField:self];
+       //[self broadcastNameTextField:self];
 }
 
 
diff --git a/CheatClient.h b/CheatClient.h
new file mode 100644 (file)
index 0000000..553e238
--- /dev/null
@@ -0,0 +1,32 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      CheatClient.h
+// Created:   Mon Sep 22 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import <Cocoa/Cocoa.h>
+
+#include "cheat_types.h"
+#include "cheat_globals.h"
+#include "cheat_net.h"
+
+
+@interface CheatClient : NSObject
+{
+       id                                      rootProxy;
+       int                                     sockfd;
+}
+
++ (NSConnection *)clientWithDelegate:(id)delegate server:(NSData *)server name:(NSString *)name;
++ (void)clientThread:(NSArray *)array;
+
+- (id)initWithRootProxy:(id)proxy;
+
+- (void)connectToServer:(NSData *)data name:(NSString *)name;
+- (void)run;
+
+@end
\ No newline at end of file
diff --git a/CheatClient.m b/CheatClient.m
new file mode 100644 (file)
index 0000000..a7df9fa
--- /dev/null
@@ -0,0 +1,230 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      CheatClient.m
+// Created:   Mon Sep 22 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import "CheatClient.h"
+
+#import "MyDocument.h"
+
+
+@implementation CheatClient
+
+
++ (NSConnection *)clientWithDelegate:(id)delegate server:(NSData *)server name:(NSString *)name
+{
+       NSPort                          *rPort = [NSPort port], *sPort = [NSPort port];
+       NSConnection            *connection;
+       NSArray                         *array;
+
+       connection = [[NSConnection alloc] initWithReceivePort:rPort sendPort:sPort];
+       [connection setRootObject:delegate];
+
+       array = [NSArray arrayWithObjects:sPort, rPort, server, name, nil];
+       [NSThread detachNewThreadSelector:@selector(clientThread:) toTarget:self withObject:array];
+
+       return [connection autorelease];
+}
+
++ (void)clientThread:(NSArray *)array
+{
+       NSAutoreleasePool       *pool = [[NSAutoreleasePool alloc] init];
+    NSConnection               *connection = [NSConnection connectionWithReceivePort:[array objectAtIndex:0] sendPort:[array objectAtIndex:1]];
+    CheatClient                        *object = [[self alloc] initWithRootProxy:[connection rootProxy]];
+
+       [object connectToServer:[array objectAtIndex:2] name:[array objectAtIndex:3]];
+       [object run];
+    
+    [object release];
+    [pool release];
+}
+
+
+- (id)initWithRootProxy:(id)proxy
+{
+       if ( self = [super init] )
+       {
+               rootProxy = proxy;
+               sockfd = -1;
+       }
+
+       return self;
+}
+
+
+- (void)connectToServer:(NSData *)data name:(NSString *)name
+{
+       struct sockaddr         identifier;
+
+       [data getBytes:&identifier length:sizeof(identifier)];
+
+       if ( (sockfd = socket( identifier.sa_family, SOCK_STREAM, 0 )) == -1 )
+       {
+               NSLog( @"ERROR: socket() failed" );
+               [rootProxy clientError:@"Network Error" message:@"Attempt to connect to server failed."];
+               return;
+       }
+
+       if ( identifier.sa_family == AF_INET )
+       {
+               struct sockaddr_in              addr;
+
+               [data getBytes:&addr];
+
+               if ( connect( sockfd, (struct sockaddr *)(&addr), sizeof(addr) ) == -1 )
+               {
+                       close( sockfd );
+
+                       NSLog( @"ERROR: connect() failed" );
+                       [rootProxy clientError:@"Network Error" message:@"Attempt to connect to server failed."];
+                       return;
+               }
+       }
+       else
+       {
+               struct sockaddr_un              addr;
+
+               [data getBytes:&addr];
+               
+               if ( connect( sockfd, (struct sockaddr *)(&addr), sizeof(addr) ) == -1 )
+               {
+                       close( sockfd );
+
+                       NSLog( @"ERROR: connect() failed" );
+                       [rootProxy clientError:@"Network Error" message:@"Attempt to connect to server failed."];
+                       return;
+               }
+       }
+
+       [rootProxy clientConnectedWithSocket:sockfd name:name];
+}
+
+- (void)run
+{
+       int                                     result;
+
+       PacketHeader            header;
+
+       NSData                          *data;
+       char                            *bytes = NULL;
+       
+       if ( sockfd == -1 )
+       {
+               NSLog( @"ERROR: can't run when not connected" );
+               return;
+       }
+
+       NSLog( @"CLIENT start" );
+
+       for (;;)
+       {
+               if ( (result = ReadBuffer( sockfd, (char *)(&header), sizeof(header) )) != sizeof(header) )
+               {
+                       if ( result != 0 && result != -1 )
+                       {
+                               NSLog( @"ERROR: incomplete header received" );
+                               close( sockfd );
+                               break;
+                       }
+
+                       break;
+               }
+
+               if ( !VerifyChecksum( header.checksum ) )
+               {
+                       NSLog( @"ERROR: checksum verification failed" );
+                       close( sockfd );
+                       break;
+               }
+
+               NSLog( @"CLIENT message %i/%i/%i", header.checksum, header.function, header.size );
+
+               if ( header.size != 0 )
+               {
+                       if ( (bytes = (char *)malloc( header.size )) == NULL )
+                       {
+                               NSLog( @"ERROR: failed to allocate buffer for reading a network packet" );
+                               close( sockfd );
+                               break;
+                       }
+
+                       if ( (result = ReadBuffer( sockfd, bytes, header.size )) != header.size )
+                       {
+                               NSLog( @"ERROR: failed to read the data of a network packet; only read %i bytes out of %i", result, header.size );
+                               free( bytes );
+                               close( sockfd );
+                               break;
+                       }
+               }
+
+               data = [NSData dataWithBytes:bytes length:header.size];
+
+               switch ( header.function )
+               {
+                       case 2:
+                               [rootProxy receivedProcessList:data];
+                               break;
+
+                       case 6:
+                               [rootProxy receivedSearchFinished];
+                               break;
+
+                       case 7:
+                               [rootProxy receivedVariableList:data];
+                               break;
+
+                       case 9:
+                               [rootProxy receivedChangeFinished];
+                               break;
+
+                       case 11:
+                               [rootProxy receivedError:data];
+                               break;
+                               
+                       case 15:
+                               [rootProxy receivedUndoFinished];
+                               break;
+                               
+                       case 17:
+                               [rootProxy receivedRedoFinished];
+                               break;
+                               
+                       case 19:
+                               [rootProxy receivedUndoRedoStatus:data];
+                               break;
+
+                       case 21:
+                               [rootProxy receivedAppLaunched:data];
+                               break;
+
+                       case 22:
+                               [rootProxy receivedAppQuit:data];
+                               break;
+
+                       case 23:
+                               [rootProxy receivedTargetQuit];
+                               break;
+
+                       case 24:
+                               [rootProxy receivedPauseFinished:data];
+                               break;
+               }
+
+               if ( header.size != 0 )
+               {
+                       free( bytes );
+               }
+       }
+
+       [rootProxy clientDisconnected];
+
+       NSLog( @"CLIENT close" );
+}
+
+
+@end
\ No newline at end of file
diff --git a/CheatListener.h b/CheatListener.h
new file mode 100644 (file)
index 0000000..78b4bed
--- /dev/null
@@ -0,0 +1,40 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      CheatListener.h
+// Created:   Wed Sep 24 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import <Cocoa/Cocoa.h>
+
+#import "ListenerDelegate.h"
+
+#include "cheat_globals.h"
+#include "cheat_net.h"
+
+#include "stdio.h"
+
+@class CheatServer;
+
+
+@interface CheatListener : NSObject
+{
+       id                              rootProxy;
+       int                             sockfd;
+
+       BOOL                    listenRemote;
+}
+
++ (NSConnection *)listenerWithDelegate:(id)del port:(int)port remote:(BOOL)remote;
++ (void)listenerThread:(NSArray *)array;
+
+- (id)initWithRootProxy:(id)proxy;
+
+- (void)listenOnPort:(int)port remote:(BOOL)remote;
+- (void)run;
+- (void)cleanup;
+
+@end
\ No newline at end of file
diff --git a/CheatListener.m b/CheatListener.m
new file mode 100644 (file)
index 0000000..40c4eb0
--- /dev/null
@@ -0,0 +1,182 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      CheatListener.m
+// Created:   Wed Sep 24 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import "CheatListener.h"
+
+#import "CheatServer.h"
+
+#include <string.h>
+
+
+@implementation CheatListener
+
+
++ (NSConnection *)listenerWithDelegate:(id)del port:(int)port remote:(BOOL)remote
+{
+       NSPort                          *rPort = [NSPort port], *sPort = [NSPort port];
+       NSConnection            *connection;
+       NSArray                         *array;
+
+       connection = [[NSConnection alloc] initWithReceivePort:rPort sendPort:sPort];
+       [connection setRootObject:del];
+
+       array = [NSArray arrayWithObjects:sPort, rPort, [NSNumber numberWithInt:port], [NSNumber numberWithBool:remote], nil];
+       [NSThread detachNewThreadSelector:@selector(listenerThread:) toTarget:self withObject:array];
+
+       return [connection autorelease];
+}
+
++ (void)listenerThread:(NSArray *)array
+{
+       NSAutoreleasePool       *pool = [[NSAutoreleasePool alloc] init];
+    NSConnection               *connection = [NSConnection connectionWithReceivePort:[array objectAtIndex:0] sendPort:[array objectAtIndex:1]];
+    CheatListener              *object = [[self alloc] initWithRootProxy:[connection rootProxy]];
+
+       [object listenOnPort:[[array objectAtIndex:2] intValue] remote:[[array objectAtIndex:3] boolValue]];
+       [object run];
+       [object cleanup];
+
+    [object release];
+    [pool release];
+}
+
+
+- (id)initWithRootProxy:(id)proxy
+{
+       if ( self = [super init] )
+       {
+               rootProxy = proxy;
+               sockfd = -1;
+       }
+
+       return self;
+}
+
+
+- (void)listenOnPort:(int)port remote:(BOOL)remote
+{
+       short                                   family = remote? AF_INET : AF_UNIX;
+       
+       int                                             yes = 1;        // for setsockopt()
+
+       if ( (sockfd = socket( family, SOCK_STREAM, 0 )) == -1 )
+       {
+               NSLog( @"ERROR: failed to start server because socket() failed" );
+               [rootProxy listenerError:@"Network Error" message:@"Server couldn't start.  Local can't be cheated."];
+               return;
+       }
+
+       if ( family == AF_INET )
+       {
+               struct sockaddr_in              addr;
+
+               addr.sin_family = family;
+               addr.sin_port = htonl( port );
+               addr.sin_addr.s_addr = INADDR_ANY;
+
+               if ( setsockopt( sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int) ) == -1 )
+               {
+                       NSLog( @"ERROR: failed to start server because setsockopt() failed" );
+                       [rootProxy listenerError:@"Network Error" message:@"Server couldn't start.  Local can't be cheated."];
+                       return;
+               }
+
+               if ( bind( sockfd, (struct sockaddr *)(&addr), sizeof(struct sockaddr) ) == -1 )
+               {
+                       NSLog( @"ERROR: failed to start server because bind() failed" );
+                       [rootProxy listenerError:@"Network Error" message:@"The cheat server could not start, probably because the port is already in use.  Local can not be cheated."];
+                       return;
+               }
+       }
+       else
+       {
+               struct sockaddr_un              addr;
+
+               addr.sun_family = family;
+               strncpy( addr.sun_path, TCDefaultListenPath, 103 );
+
+               remove( TCDefaultListenPath );
+
+               if ( bind( sockfd, (struct sockaddr *)(&addr), sizeof(addr) ) == -1 )
+               {
+                       NSLog( @"ERROR: failed to start server because bind() failed" );
+                       [rootProxy listenerError:@"Network Error" message:@"The cheat server could not start, probably because the path is already in use.  Local can not be cheated."];
+                       return;
+               }
+       }
+
+       if ( listen( sockfd, 50 ) == -1 )
+       {
+               NSLog( @"ERROR: failed to start server because listen() failed" );
+               [rootProxy listenerError:@"Network Error" message:@"Server couldn't start.  Local can't be cheated."];
+               return;
+       }
+
+       listenRemote = remote;
+
+       [rootProxy listenerListeningWithSocket:sockfd];
+}
+
+- (void)run
+{
+       int                                             result;
+
+       NSLog( @"LISTENER start" );
+
+       if ( listenRemote )
+       {
+               struct sockaddr_in              addr;
+               int                                             addrLen;
+               
+               for (;;)
+               {
+                       addrLen = sizeof(addr);
+                       
+                       if ( (result = accept( sockfd, (struct sockaddr *)(&addr), &addrLen )) == -1 )
+                       {
+                               break;
+                       }
+
+                       [rootProxy listenerReceivedNewConnection:result];
+               }
+       }
+       else
+       {
+               struct sockaddr_un              addr;
+               int                                             addrLen;
+
+               for (;;)
+               {
+                       addrLen = sizeof(addr);
+                       
+                       if ( (result = accept( sockfd, (struct sockaddr *)(&addr), &addrLen )) == -1 )
+                       {
+                               break;
+                       }
+
+                       [rootProxy listenerReceivedNewConnection:result];
+               }
+       }
+
+       NSLog( @"LISTENER close" );
+
+       [rootProxy listenerDisconnected];
+}
+
+- (void)cleanup
+{
+       if ( listenRemote )
+       {
+               remove( TCDefaultListenPath );
+       }
+}
+
+
+@end
\ No newline at end of file
diff --git a/CheatServer.h b/CheatServer.h
new file mode 100644 (file)
index 0000000..e313dbf
--- /dev/null
@@ -0,0 +1,104 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      CheatServer.h
+// Created:   Sun Sep 07 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import <Cocoa/Cocoa.h>
+
+#import "ServerDelegate.h"
+
+#include <mach/vm_map.h>
+#include <mach/mach_traps.h>
+
+#include <malloc/malloc.h>
+
+#include <sys/types.h>
+#include <sys/ptrace.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include "cheat_types.h"
+#include "cheat_net.h"
+
+
+@class SearchResults;
+
+
+@interface CheatServer : NSObject
+{
+       id                                      rootProxy;
+       int                                     sockfd;
+
+       pid_t                           processID;
+       vm_map_t                        processTask;
+
+       BOOL                            processPaused;
+
+       NSMutableArray          *searchResults;
+       NSMutableArray          *searchResultsUndone;
+}
+
++ (NSConnection *)serverWithDelegate:(id)delegate socket:(int)sock;
++ (void)serverThread:(NSArray *)array;
+
+- (id)initWithRootProxy:(id)proxy;
+
+- (void)handleSocket:(int)sock;
+- (void)run;
+
+- (void)setAddress:(NSString *)address;
+- (void)setAction:(NSString *)action;
+
+- (void)firstSearchString8bit:(char const *)value size:(int)vsize;
+- (void)firstSearchIntegerChar:(int8_t)value;
+- (void)firstSearchIntegerShort:(int16_t)value;
+- (void)firstSearchIntegerLong:(int32_t)value;
+- (void)firstSearchDecimalFloat:(float)value;
+- (void)firstSearchDecimalDouble:(double)value;
+
+- (void)searchString8bit:(char const *)value size:(int)vsize;
+- (void)searchIntegerChar:(int8_t)value;
+- (void)searchIntegerShort:(int16_t)value;
+- (void)searchIntegerLong:(int32_t)value;
+- (void)searchDecimalFloat:(float)value;
+- (void)searchDecimalDouble:(double)value;
+
+- (void)changeString8bit:(char const *)value size:(int)vsize addresses:(TCaddress *)addresses count:(int)count;
+- (void)changeIntegerChar:(int8_t)value addresses:(TCaddress *)addresses count:(int)count;
+- (void)changeIntegerShort:(int16_t)value addresses:(TCaddress *)addresses count:(int)count;
+- (void)changeIntegerLong:(int32_t)value addresses:(TCaddress *)addresses count:(int)count;
+- (void)changeDecimalFloat:(float)value addresses:(TCaddress *)addresses count:(int)count;
+- (void)changeDecimalDouble:(double)value addresses:(TCaddress *)addresses count:(int)count;
+
+- (void)sendProcessList;
+- (void)sendSearchFinished;
+- (void)sendVariableList:(TCaddress const *)data amount:(int)amount;
+- (void)sendChangeFinished;
+- (void)sendError:(NSString *)msg fatal:(BOOL)fatal;
+- (void)sendVariableValue:(u_int32_t)index;
+- (void)sendUndoFinished;
+- (void)sendRedoFinished;
+- (void)sendUndoRedoStatus;
+- (void)sendAppLaunched:(NSDictionary *)appInfo;
+- (void)sendAppQuit:(NSDictionary *)appInfo;
+- (void)sendTargetAppQuit;
+- (void)sendPauseFinished:(BOOL)paused;
+
+- (void)handleClearSearch;
+- (void)handleSearch:(char const *)data size:(int)dataSize;
+- (void)handleChange:(char const *)data size:(int)dataSize;
+- (void)handlePauseTarget;
+- (void)handleUndo;
+- (void)handleRedo;
+- (void)handleSetTargetPID:(char const *)data size:(int)size;
+
+- (void)unpause;
+- (void)setPID:(pid_t)pid;
+
+@end
+
diff --git a/CheatServer.m b/CheatServer.m
new file mode 100644 (file)
index 0000000..2a8ed8c
--- /dev/null
@@ -0,0 +1,2035 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      CheatServer.m
+// Created:   Sun Sep 07 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import "CheatServer.h"
+
+#import "SearchResults.h"
+
+#include <string.h>
+#include <math.h>
+
+
+// Internal Functions
+BOOL inline compare_float( float a, float b );
+BOOL inline compare_double( double a, double b );
+
+
+@implementation CheatServer
+
+
++ (NSConnection *)serverWithDelegate:(id)delegate socket:(int)sock
+{
+       NSPort                          *rPort = [NSPort port], *sPort = [NSPort port];
+       NSConnection            *connection;
+       NSArray                         *array;
+
+       connection = [[NSConnection alloc] initWithReceivePort:rPort sendPort:sPort];
+       [connection setRootObject:delegate];
+
+       array = [NSArray arrayWithObjects:sPort, rPort, [NSNumber numberWithInt:sock], nil];
+       [NSThread detachNewThreadSelector:@selector(serverThread:) toTarget:self withObject:array];
+
+       return [connection autorelease];
+}
+
++ (void)serverThread:(NSArray *)array
+{
+       NSAutoreleasePool       *pool = [[NSAutoreleasePool alloc] init];
+    NSConnection               *connection = [NSConnection connectionWithReceivePort:[array objectAtIndex:0] sendPort:[array objectAtIndex:1]];
+    CheatServer                        *object = [[self alloc] initWithRootProxy:[connection rootProxy]];
+
+       [object handleSocket:[[array objectAtIndex:2] intValue]];
+       [object run];
+
+    [object release];
+    [pool release];
+}
+
+
+- (id)initWithRootProxy:(id)proxy
+{
+       if ( self = [super init] )
+       {
+               NSNotificationCenter    *nc = [[NSWorkspace sharedWorkspace] notificationCenter];
+
+               rootProxy = proxy;
+
+               [nc addObserver:self selector:@selector(processListChanged:) name:@"NSWorkspaceDidLaunchApplicationNotification" object:nil];
+               [nc addObserver:self selector:@selector(processListChanged:) name:@"NSWorkspaceDidTerminateApplicationNotification" object:nil];
+
+               [self setPID:[rootProxy serverFirstProcess]];
+
+               processPaused = NO;
+
+               searchResults = [[NSMutableArray alloc] init];
+               searchResultsUndone = [[NSMutableArray alloc] init];
+       }
+
+       return self;
+}
+
+
+- (void)handleSocket:(int)sock
+{
+       struct sockaddr                 identifier;
+       int                                             addrLen = sizeof(identifier);
+
+       NSString                                *address;
+       char                                    *addressCString;
+
+       sockfd = sock;
+
+       if ( getpeername( sockfd, &identifier, &addrLen ) == -1 )
+       {
+               NSLog( @"ERROR: getpeername() failed" );
+       }
+
+       if ( identifier.sa_family == AF_INET )
+       {
+               struct sockaddr_in              addr;
+
+               addrLen = sizeof(addr);
+
+               if ( getpeername( sockfd, (struct sockaddr *)(&addr), &addrLen ) == -1 )
+               {
+                       NSLog( @"ERROR: getpeername() failed" );
+               }
+
+               if ( (addressCString = inet_ntoa( addr.sin_addr )) == NULL )
+               {
+                       NSLog( @"ERROR: inet_ntoa() failed" );
+               }
+
+               address = [NSString stringWithCString:addressCString];
+       }
+       else
+       {
+               struct sockaddr_un              addr;
+
+               addrLen = sizeof(addr);
+
+               if ( getpeername( sockfd, (struct sockaddr *)(&addr), &addrLen ) == -1 )
+               {
+                       NSLog( @"ERROR: getpeername() failed" );
+               }
+
+               NSLog( @"client connection: %s", addr.sun_path );
+               
+               address = [NSString stringWithString:@"127.0.0.1"];
+       }
+
+       [rootProxy server:self connectedWithSocket:sockfd];
+
+       [self setAddress:address];
+       [self setAction:nil];
+}
+
+- (void)run
+{
+       struct timeval          tv;
+       fd_set                          fdset, master;
+       int                                     numfds;
+
+       int                                     result;
+
+       PacketHeader            header;
+       char                            *data = NULL;
+
+       tv.tv_sec = 2;
+       tv.tv_usec = 0;
+
+       FD_ZERO( &fdset );
+       FD_ZERO( &master );
+       FD_SET( sockfd, &master );
+
+       numfds = sockfd + 1;
+
+       NSLog( @"SERVER start" );
+
+       for (;;)
+       {
+               fdset = master;
+
+               select( numfds, &fdset, NULL, NULL, &tv );
+
+               if ( FD_ISSET( sockfd, &fdset ) )
+               {
+                       if ( (result = ReadBuffer( sockfd, (char *)(&header), sizeof(header) )) != sizeof(header) )
+                       {
+                               break;
+                       }
+
+                       if ( !VerifyChecksum( header.checksum ) )
+                       {
+                               NSLog( @"checksum failed" );
+                       }
+
+                       if ( header.size != 0 )
+                       {
+                               if ( (data = (char *)malloc( header.size )) == NULL )
+                               {
+                                       NSLog( @"failed to allocate buffer for reading a network packet" );
+                                       break;
+                               }
+
+                               if ( (result = ReadBuffer( sockfd, data, header.size )) != header.size )
+                               {
+                                       NSLog( @"failed to read the data of a network packet" );
+                                       free( data );
+                                       break;
+                               }
+                       }
+
+                       NSLog( @"SERVER message %i/%i/%i", header.checksum, header.function, header.size );
+
+                       switch ( header.function )
+                       {
+                               case 1:
+                                       [self sendProcessList];
+                                       break;
+                                       
+                               case 3:
+                                       [self handleClearSearch];
+                                       break;
+
+                               case 5:
+                                       [self handleSearch:data size:header.size];
+                                       break;
+
+                               case 8:
+                                       [self handleChange:data size:header.size];
+                                       break;
+
+                               case 10:
+                                       [self handlePauseTarget];
+                                       break;
+
+                               case 14:
+                                       [self handleUndo];
+                                       break;
+
+                               case 16:
+                                       [self handleRedo];
+                                       break;
+
+                               case 18:
+                                       [self handleSetTargetPID:data size:header.size];
+                                       break;
+
+                       }
+
+                       if ( header.size != 0 )
+                       {
+                               free( data );
+                       }
+               }
+       }
+
+       close( sockfd );
+
+       NSLog( @"SERVER close" );
+
+       [rootProxy serverDisconnected:self];
+}
+
+
+- (void)setAddress:(NSString *)address
+{
+       [rootProxy server:self changedAddress:address];
+}
+
+- (void)setAction:(NSString *)action
+{
+       if ( action == nil )
+       {
+               [rootProxy server:self changedAction:@"Idle"];
+       }
+       else
+       {
+               [rootProxy server:self changedAction:action];
+       }
+}
+
+- (void)firstSearchString8bit:(char const *)value size:(int)vsize
+{
+       kern_return_t                           result;
+       
+       vm_address_t                            address = 0x0;
+       vm_size_t                                       size = 0;
+       vm_region_basic_info_data_t     info;
+       mach_msg_type_number_t          infoCnt = 8;
+       mach_port_t                                     object_name = 0;
+       
+       char                                            *data;
+       vm_size_t                                       dataLength;
+       
+       TCaddress                                       *results = NULL;
+       int                                                     resultsAmount = 0;
+       
+       NSLog( @"string search: %s", value );
+       
+       for (;;)
+       {
+               if ( (result = vm_region( processTask, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS )
+               {
+                       if ( result != KERN_INVALID_ADDRESS )
+                       {
+                               NSLog( @"vm_region returned error: %i", result );
+                       }
+                       break;
+               }
+               
+               if ( (info.protection & VM_PROT_READ) && (info.protection & VM_PROT_WRITE))
+               {
+                       data = (char *)malloc( size );
+                       dataLength = size;
+                       
+                       if ( (result = vm_read_overwrite( processTask, address, size, (vm_address_t)data, &dataLength )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE )
+                       {
+                               NSLog( @"vm_read_overwrite returned error: %i", result );
+                               free( data );
+                               break;
+                       }
+                       
+                       if ( result == KERN_SUCCESS )
+                       {
+                               int                             i, top = dataLength - vsize;
+                               
+                               if ( (results = realloc( results, TCAddressSize*resultsAmount + dataLength )) == NULL )
+                               {
+                                       NSLog( @"ERROR: could not expand buffer" );
+                                       exit(0);
+                               }
+                               
+                               for ( i = 0; i < top; i++ )
+                               {
+                                       if ( strncmp( value, data+i, vsize ) == 0 )
+                                       {
+                                               results[resultsAmount++] = (TCaddress)address + i;
+                                       }
+                               }
+                       }
+                       
+                       free( data );
+               }
+               
+               address += size;
+       }
+       
+       realloc( results, TCAddressSize*resultsAmount );
+       [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_8_BIT data:results amount:resultsAmount]];
+       
+       NSLog( @"found %i of %i", resultsAmount, value );
+}
+
+- (void)firstSearchIntegerChar:(int8_t)value
+{
+       kern_return_t                           result;
+       
+       vm_address_t                            address = 0x0;
+       vm_size_t                                       size = 0;
+       vm_region_basic_info_data_t     info;
+       mach_msg_type_number_t          infoCnt = 8;
+       mach_port_t                                     object_name = 0;
+       
+       int8_t                                          *data;
+       vm_size_t                                       dataLength;
+       
+       TCaddress                                       *results = NULL;
+       int                                                     resultsAmount = 0;
+       
+       for (;;)
+       {
+               if ( (result = vm_region( processTask, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS )
+               {
+                       if ( result != KERN_INVALID_ADDRESS )
+                       {
+                               NSLog( @"vm_region returned error: %i", result );
+                       }
+                       break;
+               }
+               
+               if ( (info.protection & VM_PROT_READ) && (info.protection & VM_PROT_WRITE))
+               {
+                       data = (int8_t *)malloc( size );
+                       dataLength = size;
+                       
+                       if ( (result = vm_read_overwrite( processTask, address, size, (vm_address_t)data, &dataLength )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE )
+                       {
+                               NSLog( @"vm_read_overwrite returned error: %i", result );
+                               free( data );
+                               break;
+                       }
+                       
+                       if ( result == KERN_SUCCESS )
+                       {
+                               int                             i;
+                               
+                               if ( (results = (TCaddress *)realloc( results, TCAddressSize*resultsAmount + TCAddressSize*dataLength )) == NULL )
+                               {
+                                       NSLog( @"ERROR: could not expand buffer" );
+                                       exit(0);
+                               }
+                               
+                               for ( i = 0; i < dataLength; i++ )
+                               {
+                                       if ( *(data+i) == value )
+                                       {
+                                               results[resultsAmount++] = (TCaddress)address + i;
+                                       }
+                               }
+                       }
+                       
+                       free( data );
+               }
+               
+               address += size;
+       }
+       
+       realloc( results, TCAddressSize*resultsAmount );
+       [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_8_BIT data:results amount:resultsAmount]];
+       
+       NSLog( @"found %i of %i", resultsAmount, value );
+}
+
+- (void)firstSearchIntegerShort:(int16_t)value
+{
+       kern_return_t                           result;
+       
+       vm_address_t                            address = 0x0;
+       vm_size_t                                       size = 0;
+       vm_region_basic_info_data_t     info;
+       mach_msg_type_number_t          infoCnt = 8;
+       mach_port_t                                     object_name = 0;
+       
+       int16_t                                         *data;
+       vm_size_t                                       dataLength;
+       
+       TCaddress                                       *results = NULL;
+       int                                                     resultsAmount = 0;
+       
+       for (;;)
+       {
+               if ( (result = vm_region( processTask, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS )
+               {
+                       if ( result != KERN_INVALID_ADDRESS )
+                       {
+                               NSLog( @"vm_region returned error: %i", result );
+                       }
+                       break;
+               }
+               
+               if ( (info.protection & VM_PROT_READ) && (info.protection & VM_PROT_WRITE))
+               {
+                       data = (int16_t *)malloc( size );
+                       dataLength = size;
+                       
+                       if ( (result = vm_read_overwrite( processTask, address, size, (vm_address_t)data, &dataLength )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE )
+                       {
+                               NSLog( @"vm_read_overwrite returned error: %i", result );
+                               free( data );
+                               break;
+                       }
+                       
+                       if ( result == KERN_SUCCESS )
+                       {
+                               int                             i, top = dataLength / sizeof(value);
+                               
+                               if ( (results = (TCaddress *)realloc( results, TCAddressSize*resultsAmount + 2*dataLength )) == NULL )
+                               {
+                                       NSLog( @"ERROR: could not expand buffer" );
+                                       exit(0);
+                               }
+                               
+                               for ( i = 0; i < top; i++ )
+                               {
+                                       if ( *(data+i) == value )
+                                       {
+                                               results[resultsAmount++] = (TCaddress)address + i * sizeof(value);
+                                       }
+                               }
+                       }
+                       
+                       free( data );
+               }
+               
+               address += size;
+       }
+       
+       realloc( results, TCAddressSize*resultsAmount );
+       [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_16_BIT data:results amount:resultsAmount]];
+       
+       NSLog( @"found %i of %i", resultsAmount, value );
+}
+
+- (void)firstSearchIntegerLong:(int32_t)value
+{
+       kern_return_t                           result;
+       
+       vm_address_t                            address = 0x0;
+       vm_size_t                                       size = 0;
+       vm_region_basic_info_data_t     info;
+       mach_msg_type_number_t          infoCnt = 8;
+       mach_port_t                                     object_name = 0;
+       
+       int32_t                                         *data;
+       vm_size_t                                       dataLength;
+       
+       TCaddress                                       *results = NULL;
+       int                                                     resultsAmount = 0;
+       
+       unsigned                                        zone_count = 10;
+       vm_address_t                            *zones = (vm_address_t *)malloc( zone_count * sizeof(vm_address_t) );
+       //memory_reader_t                               reader;
+       
+       if ( (result = malloc_get_all_zones( processTask, NULL, &zones, &zone_count )) != KERN_SUCCESS )
+       {
+               NSLog( @"malloc_get_all_zones error: %i", result );
+       }
+       else
+       {
+               //address = zones[0];
+               
+               /*int                   i;
+               
+               for ( i = 0; i < 10; i++ )
+               {
+                       NSLog( @"malloc_get_all_zones[%i] = %X", i, (vm_address_t)zones[i] );
+               }*/
+       }
+       
+       for (;;)
+       {
+               if ( (result = vm_region( processTask, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS )
+               {
+                       if ( result != KERN_INVALID_ADDRESS )
+                       {
+                               NSLog( @"vm_region returned error: %i", result );
+                       }
+                       break;
+               }
+               
+               if ( (info.protection & VM_PROT_READ) && (info.protection & VM_PROT_WRITE) )
+               {
+                       data = (int32_t *)malloc( size );
+                       dataLength = size;
+                       
+                       NSLog( @"address: %.8X size: %i", address, size );
+                       
+                       if ( (result = vm_read_overwrite( processTask, address, size, (vm_address_t)data, &dataLength )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE )
+                       {
+                               NSLog( @"vm_read_overwrite returned error: %i", result );
+                               free( data );
+                               break;
+                       }
+                       
+                       if ( result == KERN_SUCCESS )
+                       {
+                               int                             i, top = dataLength / sizeof(value);
+                               
+                               if ( (results = (TCaddress *)realloc( results, TCAddressSize*resultsAmount + dataLength )) == NULL )
+                               {
+                                       NSLog( @"ERROR: could not expand buffer" );
+                                       exit(0);
+                               }
+                               
+                               for ( i = 0; i < top; i++ )
+                               {
+                                       if ( *(data+i) == value )
+                                       {
+                                               results[resultsAmount++] = (TCaddress)address + i * sizeof(value);
+                                       }
+                               }
+                       }
+                       
+                       free( data );
+               }
+               
+               address += size;
+       }
+       
+       realloc( results, TCAddressSize*resultsAmount );
+       [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_32_BIT data:results amount:resultsAmount]];
+       
+       NSLog( @"found %i of %i", resultsAmount, value );
+}
+
+
+- (void)firstSearchDecimalFloat:(float)value
+{
+       kern_return_t                           result;
+       
+       vm_address_t                            address = 0x0;
+       vm_size_t                                       size = 0;
+       vm_region_basic_info_data_t     info;
+       mach_msg_type_number_t          infoCnt = 8;
+       mach_port_t                                     object_name = 0;
+       
+       float                                           *data;
+       vm_size_t                                       dataLength;
+       
+       TCaddress                                       *results = NULL;
+       int                                                     resultsAmount = 0;
+       
+       for (;;)
+       {
+               if ( (result = vm_region( processTask, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS )
+               {
+                       if ( result != KERN_INVALID_ADDRESS )
+                       {
+                               NSLog( @"vm_region returned error: %i", result );
+                       }
+                       break;
+               }
+               
+               if ( (info.protection & VM_PROT_READ) && (info.protection & VM_PROT_WRITE))
+               {
+                       data = (float *)malloc( size );
+                       dataLength = size;
+                       
+                       if ( (result = vm_read_overwrite( processTask, address, size, (vm_address_t)data, &dataLength )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE )
+                       {
+                               NSLog( @"vm_read_overwrite returned error: %i", result );
+                               free( data );
+                               break;
+                       }
+                       
+                       if ( result == KERN_SUCCESS )
+                       {
+                               int                             i, top = dataLength / sizeof(value);
+                               
+                               if ( (results = realloc( results, TCAddressSize*resultsAmount + dataLength )) == NULL )
+                               {
+                                       NSLog( @"ERROR: could not expand buffer" );
+                                       exit(0);
+                               }
+                               
+                               for ( i = 0; i < top; i++ )
+                               {
+                                       if ( compare_float( *(data+i), value ) )
+                                       {
+                                               results[resultsAmount++] = (TCaddress)address + i * sizeof(value);
+                                       }
+                               }
+                       }
+                       
+                       free( data );
+               }
+               
+               address += size;
+       }
+       
+       realloc( results, TCAddressSize*resultsAmount );
+       [searchResults addObject:[SearchResults resultsWithType:TYPE_DECIMAL size:SIZE_32_BIT data:results amount:resultsAmount]];
+       
+       NSLog( @"found %i of %i", resultsAmount, value );
+}
+
+- (void)firstSearchDecimalDouble:(double)value
+{
+       kern_return_t                           result;
+       
+       vm_address_t                            address = 0x0;
+       vm_size_t                                       size = 0;
+       vm_region_basic_info_data_t     info;
+       mach_msg_type_number_t          infoCnt = 8;
+       mach_port_t                                     object_name = 0;
+       
+       double                                          *data;
+       vm_size_t                                       dataLength;
+       
+       TCaddress                                       *results = NULL;
+       int                                                     resultsAmount = 0;
+       
+       NSLog( @"float search" );
+       
+       for (;;)
+       {
+               if ( (result = vm_region( processTask, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS )
+               {
+                       if ( result != KERN_INVALID_ADDRESS )
+                       {
+                               NSLog( @"vm_region returned error: %i", result );
+                       }
+                       break;
+               }
+               
+               if ( (info.protection & VM_PROT_READ) && (info.protection & VM_PROT_WRITE))
+               {
+                       data = (double *)malloc( size );
+                       dataLength = size;
+                       
+                       if ( (result = vm_read_overwrite( processTask, address, size, (vm_address_t)data, &dataLength )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE )
+                       {
+                               NSLog( @"vm_read_overwrite returned error: %i", result );
+                               free( data );
+                               break;
+                       }
+                       
+                       if ( result == KERN_SUCCESS )
+                       {
+                               int                             i, top = dataLength / sizeof(value);
+                               
+                               if ( (results = realloc( results, TCAddressSize*resultsAmount + dataLength )) == NULL )
+                               {
+                                       NSLog( @"ERROR: could not expand buffer" );
+                                       exit(0);
+                               }
+                               
+                               for ( i = 0; i < top; i++ )
+                               {
+                                       if ( compare_double( *(data+i), value ) )
+                                       {
+                                               results[resultsAmount++] = (TCaddress)address + i * sizeof(value);
+                                       }
+                               }
+                       }
+                       
+                       free( data );
+               }
+               
+               address += size;
+       }
+       
+       realloc( results, TCAddressSize*resultsAmount );
+       [searchResults addObject:[SearchResults resultsWithType:TYPE_DECIMAL size:SIZE_64_BIT data:results amount:resultsAmount]];
+       
+       NSLog( @"found %i of %i", resultsAmount, value );
+}
+
+
+- (void)searchString8bit:(char const *)value size:(int)vsize
+{
+       kern_return_t                           result;
+       
+       int8_t                                          data;
+       vm_size_t                                       dataLength;
+       
+       TCaddress                                       *results;
+       int                                                     resultsAmount = 0;
+       
+       SearchResults                           *lastResults = [searchResults lastObject];
+       TCaddress                                       *lastResultsData = [lastResults data];
+       int                                                     i, lastResultsAmount = [lastResults amount];
+       
+       if ( [lastResults type] != TYPE_INTEGER || [lastResults size] != SIZE_8_BIT )
+       {
+               [self sendError:@"This search is incompatible with the previous search." fatal:NO];
+               return;
+       }
+       
+       if ( (results = (TCaddress *)malloc( TCAddressSize*lastResultsAmount )) == NULL )
+       {
+               NSLog( @"ERROR: could not create buffer" );
+               
+               [self sendError:@"The server cancelled the search because it ran out of memory." fatal:NO];
+               return;
+       }
+       
+       for ( i = 0; i < lastResultsAmount; i++ )
+       {
+               TCaddress               address = lastResultsData[i];
+               
+               dataLength = sizeof(data);
+               
+               if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS )
+               {
+                       if ( data == value[0] )
+                       {
+                               results[resultsAmount++] = address;
+                       }
+               }
+               else
+               {
+                       if ( result != KERN_PROTECTION_FAILURE )
+                       {
+                               NSLog( @"vm_read_overwrite returned error: %i", result );
+                               break;
+                       }
+               }
+       }
+       
+       realloc( results, TCAddressSize*resultsAmount );
+       [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_8_BIT data:results amount:resultsAmount]];
+       
+       NSLog( @"found %i of %i", resultsAmount, value );
+}
+
+- (void)searchIntegerChar:(int8_t)value
+{
+       kern_return_t                           result;
+       
+       int8_t                                          data;
+       vm_size_t                                       dataLength;
+       
+       TCaddress                                       *results;
+       int                                                     resultsAmount = 0;
+       
+       SearchResults                           *lastResults = [searchResults lastObject];
+       TCaddress                                       *lastResultsData = [lastResults data];
+       int                                                     i, lastResultsAmount = [lastResults amount];
+       
+       if ( [lastResults type] != TYPE_INTEGER || [lastResults size] != SIZE_8_BIT )
+       {
+               [self sendError:@"This search is incompatible with the previous search." fatal:NO];
+               return;
+       }
+       
+       if ( (results = (TCaddress *)malloc( TCAddressSize*lastResultsAmount )) == NULL )
+       {
+               NSLog( @"ERROR: could not create buffer" );
+               
+               [self sendError:@"The server cancelled the search because it ran out of memory." fatal:NO];
+               return;
+       }
+       
+       for ( i = 0; i < lastResultsAmount; i++ )
+       {
+               TCaddress               address = lastResultsData[i];
+               
+               dataLength = sizeof(data);
+               
+               if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS )
+               {
+                       if ( data == value )
+                       {
+                               results[resultsAmount++] = address;
+                       }
+               }
+               else
+               {
+                       if ( result != KERN_PROTECTION_FAILURE )
+                       {
+                               NSLog( @"vm_read_overwrite returned error: %i", result );
+                               break;
+                       }
+               }
+       }
+       
+       realloc( results, TCAddressSize*resultsAmount );
+       [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_8_BIT data:results amount:resultsAmount]];
+       
+       NSLog( @"found %i of %i", resultsAmount, value );
+}
+
+- (void)searchIntegerShort:(int16_t)value
+{
+       kern_return_t                           result;
+       
+       int16_t                                         data;
+       vm_size_t                                       dataLength;
+       
+       TCaddress                                       *results;
+       int                                                     resultsAmount = 0;
+       
+       SearchResults                           *lastResults = [searchResults lastObject];
+       TCaddress                                       *lastResultsData = [lastResults data];
+       int                                                     i, lastResultsAmount = [lastResults amount];
+       
+       if ( [lastResults type] != TYPE_INTEGER || [lastResults size] != SIZE_16_BIT )
+       {
+               [self sendError:@"This search is incompatible with the previous search." fatal:NO];
+               return;
+       }
+       
+       if ( (results = (TCaddress *)malloc( TCAddressSize*lastResultsAmount )) == NULL )
+       {
+               NSLog( @"ERROR: could not create buffer" );
+               
+               [self sendError:@"The server cancelled the search because it ran out of memory." fatal:NO];
+               return;
+       }
+       
+       for ( i = 0; i < lastResultsAmount; i++ )
+       {
+               TCaddress               address = lastResultsData[i];
+               
+               dataLength = sizeof(data);
+               
+               if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS )
+               {
+                       if ( data == value )
+                       {
+                               results[resultsAmount++] = address;
+                       }
+               }
+               else
+               {
+                       if ( result != KERN_PROTECTION_FAILURE )
+                       {
+                               NSLog( @"vm_read_overwrite returned error: %i", result );
+                               break;
+                       }
+               }
+       }
+       
+       realloc( results, TCAddressSize*resultsAmount );
+       [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_16_BIT data:results amount:resultsAmount]];
+       
+       NSLog( @"found %i of %i", resultsAmount, value );
+}
+
+- (void)searchIntegerLong:(int32_t)value
+{
+       kern_return_t                           result;
+       
+       int32_t                                         data;
+       vm_size_t                                       dataLength;
+       
+       TCaddress                                       *results;
+       int                                                     resultsAmount = 0;
+       
+       SearchResults                           *lastResults = [searchResults lastObject];
+       TCaddress                                       *lastResultsData = [lastResults data];
+       int                                                     i, lastResultsAmount = [lastResults amount];
+       
+       if ( [lastResults type] != TYPE_INTEGER || [lastResults size] != SIZE_32_BIT )
+       {
+               [self sendError:@"This search is incompatible with the previous search." fatal:NO];
+               return;
+       }
+       
+       if ( (results = (TCaddress *)malloc( TCAddressSize*lastResultsAmount )) == NULL )
+       {
+               NSLog( @"ERROR: could not create buffer" );
+               
+               [self sendError:@"The server cancelled the search because it ran out of memory." fatal:NO];
+               return;
+       }
+       
+       for ( i = 0; i < lastResultsAmount; i++ )
+       {
+               TCaddress               address = lastResultsData[i];
+               
+               dataLength = sizeof(data);
+               
+               if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS )
+               {
+                       if ( data == value )
+                       {
+                               results[resultsAmount++] = address;
+                       }
+               }
+               else
+               {
+                       if ( result != KERN_PROTECTION_FAILURE )
+                       {
+                               NSLog( @"vm_read_overwrite returned error: %i", result );
+                               break;
+                       }
+               }
+       }
+       
+       realloc( results, TCAddressSize*resultsAmount );
+       [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_32_BIT data:results amount:resultsAmount]];
+       
+       NSLog( @"found %i of %i", resultsAmount, value );
+}
+
+- (void)searchDecimalFloat:(float)value
+{
+       kern_return_t                           result;
+       
+       float                                           data;
+       vm_size_t                                       dataLength;
+       
+       TCaddress                                       *results;
+       int                                                     resultsAmount = 0;
+       
+       SearchResults                           *lastResults = [searchResults lastObject];
+       TCaddress                                       *lastResultsData = [lastResults data];
+       int                                                     i, lastResultsAmount = [lastResults amount];
+       
+       if ( [lastResults type] != TYPE_DECIMAL || [lastResults size] != SIZE_32_BIT )
+       {
+               [self sendError:@"This search is incompatible with the previous search." fatal:NO];
+               return;
+       }
+       
+       if ( (results = (TCaddress *)malloc( TCAddressSize*lastResultsAmount )) == NULL )
+       {
+               NSLog( @"ERROR: could not create buffer" );
+               
+               [self sendError:@"The server cancelled the search because it ran out of memory." fatal:NO];
+               return;
+       }
+       
+       for ( i = 0; i < lastResultsAmount; i++ )
+       {
+               TCaddress               address = lastResultsData[i];
+               
+               dataLength = sizeof(data);
+               
+               if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS )
+               {
+                       if ( compare_float( data, value ) )
+                       {
+                               results[resultsAmount++] = address;
+                       }
+               }
+               else
+               {
+                       if ( result != KERN_PROTECTION_FAILURE )
+                       {
+                               NSLog( @"vm_read_overwrite returned error: %i", result );
+                               break;
+                       }
+               }
+       }
+       
+       realloc( results, TCAddressSize*resultsAmount );
+       [searchResults addObject:[SearchResults resultsWithType:TYPE_DECIMAL size:SIZE_32_BIT data:results amount:resultsAmount]];
+       
+       NSLog( @"found %i of %i", resultsAmount, value );
+}
+
+- (void)searchDecimalDouble:(double)value
+{
+       kern_return_t                           result;
+       
+       double                                          data;
+       vm_size_t                                       dataLength;
+       
+       TCaddress                                       *results;
+       int                                                     resultsAmount = 0;
+       
+       SearchResults                           *lastResults = [searchResults lastObject];
+       TCaddress                                       *lastResultsData = [lastResults data];
+       int                                                     i, lastResultsAmount = [lastResults amount];
+       
+       if ( [lastResults type] != TYPE_DECIMAL || [lastResults size] != SIZE_64_BIT )
+       {
+               [self sendError:@"This search is incompatible with the previous search." fatal:NO];
+               return;
+       }
+       
+       if ( (results = (TCaddress *)malloc( TCAddressSize*lastResultsAmount )) == NULL )
+       {
+               NSLog( @"ERROR: could not create buffer" );
+               
+               [self sendError:@"The server cancelled the search because it ran out of memory." fatal:NO];
+               return;
+       }
+       
+       for ( i = 0; i < lastResultsAmount; i++ )
+       {
+               TCaddress               address = lastResultsData[i];
+               
+               dataLength = sizeof(data);
+               
+               if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS )
+               {
+                       if ( compare_double( data, value ) )
+                       {
+                               results[resultsAmount++] = address;
+                       }
+               }
+               else
+               {
+                       if ( result != KERN_PROTECTION_FAILURE )
+                       {
+                               NSLog( @"vm_read_overwrite returned error: %i", result );
+                               break;
+                       }
+               }
+       }
+       
+       realloc( results, TCAddressSize*resultsAmount );
+       [searchResults addObject:[SearchResults resultsWithType:TYPE_DECIMAL size:SIZE_64_BIT data:results amount:resultsAmount]];
+       
+       NSLog( @"found %i of %i", resultsAmount, value );
+}
+
+
+- (void)changeString8bit:(char const *)value size:(int)vsize addresses:(TCaddress *)addresses count:(int)count
+{
+       int                                     failCount = 0;
+       int                                     i;
+       
+       NSLog( @"change string: %s", value );
+       
+       for ( i = 0; i < count; i++ )
+       {
+               if ( vm_write( processTask, (vm_address_t)addresses[i], (vm_offset_t)value, vsize ) != KERN_SUCCESS )
+               {
+                       failCount++;
+               }
+       }
+       
+       if ( failCount > 0 )
+       {
+               [self sendError:[NSString stringWithFormat:@"%i of the selected variables could not be changed.", failCount] fatal:NO];
+       }
+}
+
+- (void)changeIntegerChar:(int8_t)value addresses:(TCaddress *)addresses count:(int)count
+{
+       int                                     failCount = 0;
+       int                                     i;
+       
+       for ( i = 0; i < count; i++ )
+       {
+               if ( vm_write( processTask, (vm_address_t)addresses[i], (vm_offset_t)(&value), sizeof(value) ) != KERN_SUCCESS )
+               {
+                       failCount++;
+               }
+       }
+       
+       if ( failCount > 0 )
+       {
+               [self sendError:[NSString stringWithFormat:@"%i of the selected variables could not be changed.", failCount] fatal:NO];
+       }
+}
+
+- (void)changeIntegerShort:(int16_t)value addresses:(TCaddress *)addresses count:(int)count
+{
+       int                                     failCount = 0;
+       int                                     i;
+       
+       for ( i = 0; i < count; i++ )
+       {
+               if ( vm_write( processTask, (vm_address_t)addresses[i], (vm_offset_t)(&value), sizeof(value) ) != KERN_SUCCESS )
+               {
+                       failCount++;
+               }
+       }
+       
+       if ( failCount > 0 )
+       {
+               [self sendError:[NSString stringWithFormat:@"%i of the selected variables could not be changed.", failCount] fatal:NO];
+       }
+}
+
+- (void)changeIntegerLong:(int32_t)value addresses:(TCaddress *)addresses count:(int)count
+{
+       int                                     failCount = 0;
+       int                                     i;
+       
+       for ( i = 0; i < count; i++ )
+       {
+               if ( vm_write( processTask, (vm_address_t)addresses[i], (vm_offset_t)(&value), sizeof(value) ) != KERN_SUCCESS )
+               {
+                       failCount++;
+               }
+       }
+       
+       if ( failCount > 0 )
+       {
+               [self sendError:[NSString stringWithFormat:@"%i of the selected variables could not be changed.", failCount] fatal:NO];
+       }
+}
+
+- (void)changeDecimalFloat:(float)value addresses:(TCaddress *)addresses count:(int)count
+{
+       int                                     failCount = 0;
+       int                                     i;
+       
+       for ( i = 0; i < count; i++ )
+       {
+               if ( vm_write( processTask, (vm_address_t)addresses[i], (vm_offset_t)(&value), sizeof(value) ) != KERN_SUCCESS )
+               {
+                       failCount++;
+               }
+       }
+       
+       if ( failCount > 0 )
+       {
+               [self sendError:[NSString stringWithFormat:@"%i of the selected variables could not be changed.", failCount] fatal:NO];
+       }
+}
+
+- (void)changeDecimalDouble:(double)value addresses:(TCaddress *)addresses count:(int)count
+{
+       int                                     failCount = 0;
+       int                                     i;
+       
+       for ( i = 0; i < count; i++ )
+       {
+               if ( vm_write( processTask, (vm_address_t)addresses[i], (vm_offset_t)(&value), sizeof(value) ) != KERN_SUCCESS )
+               {
+                       failCount++;
+               }
+       }
+       
+       if ( failCount > 0 )
+       {
+               [self sendError:[NSString stringWithFormat:@"%i of the selected variables could not be changed.", failCount] fatal:NO];
+       }
+}
+
+
+- (void)sendProcessList
+{
+       NSArray                 *processList = [rootProxy serverProcessList];
+       
+       NSNumber                *pid;
+       u_int32_t               pidNum;
+       NSString                *name;
+
+       PacketHeader    header;
+
+       char                    *buffer, *ptr;
+
+       //                       PROCESS COUNT
+       int                             length = sizeof(u_int32_t);
+       int                             lengthAfter;
+
+       u_int32_t               processCount = [processList count];
+
+       int                             i, max = processCount;
+
+       header.checksum = RandomChecksum();
+       header.function = 2;
+
+       for ( i = 0; i < max; i++ )
+       {
+               pid = [[processList objectAtIndex:i] objectForKey:@"NSApplicationProcessIdentifier"];
+               name = [[processList objectAtIndex:i] objectForKey:@"NSApplicationName"];
+
+               //        PID                 NAME
+               length += sizeof(u_int32_t) + [name length] + 1;
+       }
+
+       header.size = length;
+       length += sizeof(header);
+       //        HEADER
+
+       if ( (buffer = (char *)malloc( length ))==NULL )
+       {
+               NSLog( @"sendProcessList failed" );
+               return;
+       }
+
+       ptr = buffer;
+
+       COPY_TO_BUFFER( ptr, &header, sizeof(header) );
+       COPY_TO_BUFFER( ptr, &processCount, sizeof(processCount) );
+
+       for ( i = 0; i < max; i++ )
+       {
+               pidNum = [[[processList objectAtIndex:i] objectForKey:@"NSApplicationProcessIdentifier"] unsignedLongValue];
+               name = [[processList objectAtIndex:i] objectForKey:@"NSApplicationName"];
+
+               COPY_TO_BUFFER( ptr, &pidNum, sizeof(pid) );
+               COPY_TO_BUFFER( ptr, [name lossyCString], [name length] + 1 );
+       }
+
+       lengthAfter = length;
+
+       if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length )
+       {
+               NSLog( @"sendProcessList failed" );
+       }
+
+       free( buffer );
+}
+
+
+- (void)sendSearchFinished
+{
+       PacketHeader    header;
+       int                             length = sizeof(header);
+
+       header.checksum = RandomChecksum();
+       header.function = 6;
+       header.size = 0;
+
+       if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) )
+       {
+               NSLog( @"sendSearchFinished failed" );
+       }
+}
+
+- (void)sendVariableList:(TCaddress const *)data amount:(int)amount
+{
+       PacketHeader    header;
+       int                             length;
+       int                             lengthAfter;
+
+       char                    *buffer, *ptr;
+
+       header.checksum = RandomChecksum();
+       header.function = 7;
+       header.size = sizeof(amount) + TCAddressSize*amount;
+       //            AMOUNT           DATA
+
+       lengthAfter = length = header.size + sizeof(header);
+
+       if ( (buffer = (char *)malloc( length )) == NULL )
+       {
+               NSLog( @"sendVariableList:amount: failed" );
+               return;
+       }
+
+       ptr = buffer;
+
+       COPY_TO_BUFFER( ptr, &header, sizeof(header) );
+       COPY_TO_BUFFER( ptr, &amount, sizeof(amount) );
+       COPY_TO_BUFFER( ptr, data, TCAddressSize*amount );
+
+       if ( SendBuffer( sockfd, buffer, &length ) == -1 || lengthAfter != length )
+       {
+               NSLog( @"sendVariableList:amount: failed" );
+       }
+
+       free( buffer );
+}
+
+- (void)sendChangeFinished
+{
+       PacketHeader    header;
+       int                             length = sizeof(header);
+
+       header.checksum = RandomChecksum();
+       header.function = 9;
+       header.size = 0;
+
+       if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) )
+       {
+               NSLog( @"sendChangeFinished failed" );
+       }
+}
+
+- (void)sendError:(NSString *)msg fatal:(BOOL)fatal
+{
+       PacketHeader    header;
+       int                             length;
+       int                             lengthAfter;
+
+       u_int32_t               type = (fatal)? 1:0;
+
+       char                    *buffer, *ptr;
+
+       header.checksum = RandomChecksum();
+       header.function = 11;
+       header.size = sizeof(type) + [msg length] + 1;
+       //            FATAL          STRING
+
+       lengthAfter = length = header.size + sizeof(header);
+
+       if ( (buffer = (char *)malloc( length )) == NULL )
+       {
+               NSLog( @"sendError:fatal: failed" );
+               return;
+       }
+
+       ptr = buffer;
+
+       COPY_TO_BUFFER( ptr, &header, sizeof(header) );
+       COPY_TO_BUFFER( ptr, &type, sizeof(type) );
+       COPY_TO_BUFFER( ptr, [msg lossyCString], [msg length] + 1 );
+
+       if ( SendBuffer( sockfd, buffer, &length ) == -1 || lengthAfter != length )
+       {
+               NSLog( @"sendError:fatal: failed" );
+       }
+
+       free( buffer );
+}
+
+- (void)sendVariableValue:(u_int32_t)index
+{
+
+}
+
+- (void)sendUndoFinished
+{
+       PacketHeader    header;
+       int                             length = sizeof(header);
+
+       header.checksum = RandomChecksum();
+       header.function = 15;
+       header.size = 0;
+
+       if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) )
+       {
+               NSLog( @"sendUndoFinished failed" );
+       }
+}
+
+- (void)sendRedoFinished
+{
+       PacketHeader    header;
+       int                             length = sizeof(header);
+
+       header.checksum = RandomChecksum();
+       header.function = 17;
+       header.size = 0;
+
+       if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) )
+       {
+               NSLog( @"sendRedoFinished failed" );
+       }
+}
+
+- (void)sendUndoRedoStatus
+{
+       PacketHeader    header;
+       int                             length;
+       int                             lengthAfter;
+       
+       u_int32_t               undoCount = (u_int32_t)[searchResults count];
+       u_int32_t               redoCount = (u_int32_t)[searchResultsUndone count];
+       
+       char                    *buffer, *ptr;
+       
+       header.checksum = RandomChecksum();
+       header.function = 19;
+       header.size = 2 * sizeof(u_int32_t);
+       
+       length = lengthAfter = sizeof(header) + header.size;
+       
+       if ( (buffer = (char *)malloc( length )) == NULL )
+       {
+               NSLog( @"sendSetTargetPID: failed" );
+       }
+       
+       ptr = buffer;
+       
+       COPY_TO_BUFFER( ptr, &header, sizeof(header) );
+       COPY_TO_BUFFER( ptr, &undoCount, sizeof(undoCount) );
+       COPY_TO_BUFFER( ptr, &redoCount, sizeof(redoCount) );
+       
+       if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length )
+       {
+               NSLog( @"sendUndoRedoStatus: failed" );
+       }
+       
+       free( buffer );
+}
+
+- (void)sendAppLaunched:(NSDictionary *)appInfo
+{
+       PacketHeader    header;
+
+       char                    *buffer, *ptr;
+
+       int                             length = 0;
+       int                             lengthAfter;
+
+       u_int32_t               pid = [[appInfo objectForKey:@"NSApplicationProcessIdentifier"] unsignedLongValue];
+       NSString                *name = [appInfo objectForKey:@"NSApplicationName"];
+
+       //        PID                 NAME
+       length += sizeof(u_int32_t) + [name length] + 1;
+
+       header.checksum = RandomChecksum();
+       header.function = 21;
+       header.size = length;
+
+       length += sizeof(header);
+       //        HEADER
+
+       if ( (buffer = (char *)malloc( length ))==NULL )
+       {
+               NSLog( @"sendAppLaunched: failed" );
+
+               return;
+       }
+
+       ptr = buffer;
+
+       COPY_TO_BUFFER( ptr, &header, sizeof(header) );
+       COPY_TO_BUFFER( ptr, &pid, sizeof(pid) );
+       COPY_TO_BUFFER( ptr, [name lossyCString], [name length] + 1 );
+
+       lengthAfter = length;
+
+       if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length )
+       {
+               NSLog( @"sendAppLaunched: failed" );
+       }
+
+       free( buffer );
+}
+
+
+- (void)sendAppQuit:(NSDictionary *)appInfo
+{
+       PacketHeader    header;
+
+       char                    *buffer, *ptr;
+
+       int                             length = 0;
+       int                             lengthAfter;
+
+       u_int32_t               pid = [[appInfo objectForKey:@"NSApplicationProcessIdentifier"] unsignedLongValue];
+
+       //        PID
+       length += sizeof(pid);
+
+       header.checksum = RandomChecksum();
+       header.function = 22;
+       header.size = length;
+
+       length += sizeof(header);
+       //        HEADER
+
+       if ( (buffer = (char *)malloc( length ))==NULL )
+       {
+               NSLog( @"sendAppQuit: failed" );
+
+               return;
+       }
+
+       ptr = buffer;
+
+       COPY_TO_BUFFER( ptr, &header, sizeof(header) );
+       COPY_TO_BUFFER( ptr, &pid, sizeof(pid) );
+
+       lengthAfter = length;
+
+       if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length )
+       {
+               NSLog( @"sendAppQuit: failed" );
+       }
+
+       free( buffer );
+}
+
+- (void)sendTargetAppQuit
+{
+       PacketHeader    header;
+       int                             length = sizeof(header);
+
+       header.checksum = RandomChecksum();
+       header.function = 23;
+       header.size = 0;
+
+       if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) )
+       {
+               NSLog( @"sendTargetAppQuit failed" );
+       }
+}
+
+- (void)sendPauseFinished:(BOOL)paused
+{
+       PacketHeader    header;
+
+       char                    *buffer, *ptr;
+
+       //                       PAUSED
+       int                             length = sizeof(paused);
+       int                             lengthAfter;
+
+       header.checksum = RandomChecksum();
+       header.function = 24;
+       header.size = length;
+
+       length += sizeof(header);
+       //        HEADER
+
+       if ( (buffer = (char *)malloc( length ))==NULL )
+       {
+               NSLog( @"sendPauseFinished: failed" );
+
+               return;
+       }
+
+       ptr = buffer;
+
+       COPY_TO_BUFFER( ptr, &header, sizeof(header) );
+       COPY_TO_BUFFER( ptr, &paused, sizeof(paused) );
+
+       lengthAfter = length;
+
+       if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length )
+       {
+               NSLog( @"sendPauseFinished: failed" );
+       }
+
+       free( buffer );
+}
+
+
+- (void)handleClearSearch
+{
+       [searchResults removeAllObjects];
+       [searchResultsUndone removeAllObjects];
+       
+       [self unpause];
+}
+
+- (void)handleSearch:(char const *)data size:(int)dataSize
+{
+       TCtype                  type;
+       TCsize                  size;
+       
+       char                    *ptr = (char *)data;
+
+       [self setAction:@"Searching"];
+
+       COPY_FROM_BUFFER( &type, ptr, sizeof(type) );
+       COPY_FROM_BUFFER( &size, ptr, sizeof(size) );
+
+       if ( ![searchResults lastObject] )
+       {
+               switch ( type )
+               {
+                       case TYPE_STRING:
+                       {
+                               switch ( size )
+                               {
+                                       case SIZE_8_BIT:
+                                       {
+                                               [self firstSearchString8bit:ptr size:(dataSize - (ptr - data))];
+                                       }
+                                               break;
+                               }
+                       }
+                               break;
+
+                       case TYPE_INTEGER:
+                       {
+                               switch ( size )
+                               {
+                                       case SIZE_8_BIT:
+                                       {
+                                               int8_t                  value;
+
+                                               COPY_FROM_BUFFER( &value, ptr, sizeof(value) );
+                                               [self firstSearchIntegerChar:value];
+                                       }
+                                               break;
+
+                                       case SIZE_16_BIT:
+                                       {
+                                               int16_t                 value;
+
+                                               COPY_FROM_BUFFER( &value, ptr, sizeof(value) );
+                                               [self firstSearchIntegerShort:value];
+                                       }
+                                               break;
+
+                                       case SIZE_32_BIT:
+                                       {
+                                               int32_t                 value;
+
+                                               COPY_FROM_BUFFER( &value, ptr, sizeof(value) );
+                                               [self firstSearchIntegerLong:value];
+                                       }
+                                               break;
+                               }
+                       }
+                               break;
+
+                       case TYPE_DECIMAL:
+                       {
+                               switch ( size )
+                               {
+                                       case SIZE_32_BIT:
+                                       {
+                                               float                   value;
+
+                                               COPY_FROM_BUFFER( &value, ptr, sizeof(value) );
+                                               [self firstSearchDecimalFloat:value];
+                                       }
+                                               break;
+
+                                       case SIZE_64_BIT:
+                                       {
+                                               double                  value;
+
+                                               COPY_FROM_BUFFER( &value, ptr, sizeof(value) );
+                                               [self firstSearchDecimalDouble:value];
+                                       }
+                                               break;
+                               }
+                       }
+                               break;
+               }
+       }
+       else
+       {
+               switch ( type )
+               {
+                       case TYPE_STRING:
+                       {
+                               switch ( size )
+                               {
+                                       case SIZE_8_BIT:
+                                       {
+                                               [self searchString8bit:ptr size:(dataSize - (ptr - data))];
+                                               
+                                               break;
+                                       }
+                               }
+                       }
+                               break;
+
+                       case TYPE_INTEGER:
+                       {
+                               switch ( size )
+                               {
+                                       case SIZE_8_BIT:
+                                       {
+                                               int8_t                  value;
+
+                                               COPY_FROM_BUFFER( &value, ptr, sizeof(value) );
+                                               [self searchIntegerChar:value];
+                                               
+                                               break;
+                                       }
+
+                                       case SIZE_16_BIT:
+                                       {
+                                               int16_t                 value;
+
+                                               COPY_FROM_BUFFER( &value, ptr, sizeof(value) );
+                                               [self searchIntegerShort:value];
+                                               
+                                               break;
+                                       }
+
+                                       case SIZE_32_BIT:
+                                       {
+                                               int32_t                 value;
+
+                                               COPY_FROM_BUFFER( &value, ptr, sizeof(value) );
+                                               [self searchIntegerLong:value];
+                                               
+                                               break;
+                                       }
+                               }
+                       }
+                               break;
+
+                       case TYPE_DECIMAL:
+                       {
+                               switch ( size )
+                               {
+                                       case SIZE_32_BIT:
+                                       {
+                                               float                   value;
+                                               
+                                               COPY_FROM_BUFFER( &value, ptr, sizeof(value) );
+                                               [self searchDecimalFloat:value];
+                                       }
+                                               break;
+
+                                       case SIZE_64_BIT:
+                                       {
+                                               double                  value;
+
+                                               COPY_FROM_BUFFER( &value, ptr, sizeof(value) );
+                                               [self searchDecimalDouble:value];
+                                       }
+                                               break;
+                               }
+                       }
+                               break;
+               }
+       }
+
+       [self sendVariableList:[(SearchResults *)[searchResults lastObject] data] amount:[[searchResults lastObject] amount]];
+       [self sendSearchFinished];
+       [self sendUndoRedoStatus];
+
+       [self setAction:nil];
+}
+
+- (void)handleChange:(char const *)data size:(int)dataSize
+{
+       TCtype                  type;
+       TCsize                  size;
+       
+       TCaddress               *addresses = NULL;
+       int                             count;
+       
+       char                    *ptr = (char *)data;
+       
+       [self setAction:@"Changing"];
+       
+       // read out the type and size of the variable.
+       COPY_FROM_BUFFER( &type, ptr, sizeof(type) );
+       COPY_FROM_BUFFER( &size, ptr, sizeof(size) );
+       
+       // read the amount of addresses.
+       COPY_FROM_BUFFER( &count, ptr, sizeof(count) );
+       
+       // save the pointer to the addresses.
+       addresses = (TCaddress *)ptr;
+       ptr += TCAddressSize*count;
+       
+       switch ( type )
+       {
+               case TYPE_STRING:
+               {
+                       switch ( size )
+                       {
+                               case SIZE_8_BIT:
+                               {
+                                       [self changeString8bit:ptr size:(dataSize - (ptr - data)) addresses:addresses count:count];
+                               }
+                                       break;
+                       }
+               }
+                       break;
+                       
+               case TYPE_INTEGER:
+               {
+                       switch ( size )
+                       {
+                               case SIZE_8_BIT:
+                               {
+                                       int8_t                  value;
+                                       
+                                       COPY_FROM_BUFFER( &value, ptr, sizeof(value) );
+                                       [self changeIntegerChar:value addresses:addresses count:count];
+                               }
+                                       break;
+                                       
+                               case SIZE_16_BIT:
+                               {
+                                       int16_t                 value;
+                                       
+                                       COPY_FROM_BUFFER( &value, ptr, sizeof(value) );
+                                       [self changeIntegerShort:value addresses:addresses count:count];
+                               }
+                                       break;
+                                       
+                               case SIZE_32_BIT:
+                               {
+                                       int32_t                 value;
+                                       
+                                       COPY_FROM_BUFFER( &value, ptr, sizeof(value) );
+                                       [self changeIntegerLong:value addresses:addresses count:count];
+                               }
+                                       break;
+                       }
+               }
+                       break;
+                       
+               case TYPE_DECIMAL:
+               {
+                       switch ( size )
+                       {
+                               case SIZE_32_BIT:
+                               {
+                                       float                   value;
+                                       
+                                       COPY_FROM_BUFFER( &value, ptr, sizeof(value) );
+                                       [self changeDecimalFloat:value addresses:addresses count:count];
+                               }
+                                       break;
+                                       
+                               case SIZE_64_BIT:
+                               {
+                                       double                  value;
+                                       
+                                       COPY_FROM_BUFFER( &value, ptr, sizeof(value) );
+                                       [self changeDecimalDouble:value addresses:addresses count:count];
+                               }
+                                       break;
+                       }
+               }
+                       break;
+       }
+       
+       [self sendChangeFinished];
+       
+       [self setAction:nil];
+}
+
+- (void)handlePauseTarget
+{
+       if ( !processPaused )
+       {
+               int                     wait_status;
+               
+               if ( ptrace( PT_ATTACH, processID, 0, 0 ) != -1 )
+               {
+                       if ( waitpid( processID, &wait_status, WUNTRACED ) == processID )
+                       {
+                               if ( WIFSTOPPED(wait_status) )
+                               {
+                                       processPaused = YES;
+                                       [self sendPauseFinished:YES];
+                               }
+                               else
+                               {
+                                       NSLog( @"ERROR: process couldn't be paused" );
+                                       [self sendPauseFinished:NO];
+                                       [self sendError:@"Process couldn't be paused." fatal:NO];
+                               }
+                       }
+                       else
+                       {
+                               NSLog( @"ERROR: process couldn't be paused" );
+                               [self sendPauseFinished:NO];
+                               [self sendError:@"Process couldn't be paused." fatal:NO];
+                       }
+               }
+               else
+               {
+                       NSLog( @"ERROR: process couldn't be paused" );
+                       [self sendPauseFinished:NO];
+                       [self sendError:@"Process couldn't be paused." fatal:NO];
+               }
+       }
+       else
+       {
+               ptrace( PT_DETACH, processID, 0, 0 );
+
+               processPaused = NO;
+               [self sendPauseFinished:NO];
+       }
+}
+
+- (void)handleUndo
+{
+       SearchResults           *results = [searchResults lastObject];
+       
+       if ( results )
+       {
+               [searchResultsUndone addObject:results];
+               [searchResults removeLastObject];
+       }
+
+       results = [searchResults lastObject];
+       if ( results )
+       {
+               [self sendVariableList:[results data] amount:[results amount]];
+       }
+       else
+       {
+               [self sendVariableList:NULL amount:0];
+       }
+       
+       [self sendUndoFinished];
+       [self sendUndoRedoStatus];
+}
+
+- (void)handleRedo
+{
+       SearchResults           *results = [searchResultsUndone lastObject];
+       
+       if ( results )
+       {
+               [searchResults addObject:results];
+               [searchResultsUndone removeLastObject];
+       }
+
+       results = [searchResults lastObject];
+       if ( results )
+       {
+               [self sendVariableList:[results data] amount:[results amount]];
+       }
+       else
+       {
+               [self sendVariableList:NULL amount:0];
+       }
+       
+       [self sendRedoFinished];
+       [self sendUndoRedoStatus];
+}
+
+- (void)handleSetTargetPID:(char const *)data size:(int)size
+{
+       char                    *ptr = (char *)data;
+
+       pid_t                   pid;
+
+       COPY_FROM_BUFFER( &pid, ptr, sizeof(pid) );
+
+       [self setPID:pid];
+}
+
+
+- (void)unpause
+{
+       if ( processPaused )
+       {
+               [self handlePauseTarget];
+       }
+}
+
+- (void)setPID:(pid_t)pid
+{
+       kern_return_t                           result;
+
+       [self unpause];
+       
+       processID = pid;
+
+       if ( (result = task_for_pid( current_task(), processID, &processTask)) != KERN_SUCCESS )
+       {
+               NSLog( @"task_for_pid returned error: %i", result );
+       }
+}
+
+
+- (void)dealloc
+{
+       [self unpause];
+
+       [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self];
+
+       [searchResults release];
+       [searchResultsUndone release];
+
+       [super dealloc];
+}
+
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   NSWorkspaceDidLaunchApplicationNotification Notification
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+- (void)processListChanged:(NSNotification *)note
+{
+       pid_t                   pid = [[[note userInfo] objectForKey:@"NSApplicationProcessIdentifier"] intValue];
+
+       if ( /*pid != getpid()*/ sockfd != -1 )
+       {
+               if ( [[note name] isEqualToString:@"NSWorkspaceDidLaunchApplicationNotification"] )
+               {
+                       [self sendAppLaunched:[note userInfo]];
+               }
+               else
+               {
+                       [self sendAppQuit:[note userInfo]];
+
+                       if ( pid == processID )
+                       {
+                               [self sendTargetAppQuit];
+
+                               // we can't set the new target here because this method is not called
+                               // in the server thread.  the client will have to change it.
+                               //[self setPID:[rootProxy serverFirstProcess]];
+                               processPaused = NO;
+                       }
+               }
+       }
+}
+
+
+@end
+
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   Internal Functions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+BOOL compare_float( float a, float b )
+{
+       float const             feps = 0.0001f;
+       
+       return feps > fabsf( a - b );
+}
+
+BOOL compare_double( double a, double b )
+{
+       double const    deps = 0.0000001;
+       
+       return deps > fabs( a - b );
+}
\ No newline at end of file
diff --git a/ClientDelegate.h b/ClientDelegate.h
new file mode 100644 (file)
index 0000000..6c5dc79
--- /dev/null
@@ -0,0 +1,20 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      ClientDelegate.h
+// Created:   Wed Sep 24 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import <Cocoa/Cocoa.h>
+
+
+@protocol ClientDelegate
+
+- (void)clientConnectedWithSocket:(int)sock name:(NSString *)name;
+- (void)clientDisconnected;
+- (void)clientError:(NSString *)error message:(NSString *)message;
+
+@end
\ No newline at end of file
diff --git a/English.lproj/AboutBox.nib/classes.nib b/English.lproj/AboutBox.nib/classes.nib
new file mode 100644 (file)
index 0000000..c9c6005
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    IBClasses = (
+        {
+            ACTIONS = {launchEmailButton = id; launchWebsiteButton = id; }; 
+            CLASS = AboutBoxController; 
+            LANGUAGE = ObjC; 
+            OUTLETS = {aboutWindow = NSWindow; }; 
+            SUPERCLASS = NSWindowController; 
+        }, 
+        {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }
+    ); 
+    IBVersion = 1; 
+}
\ No newline at end of file
diff --git a/English.lproj/AboutBox.nib/info.nib b/English.lproj/AboutBox.nib/info.nib
new file mode 100644 (file)
index 0000000..f0d37b7
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>IBDocumentLocation</key>
+       <string>85 112 356 241 0 0 1280 1002 </string>
+       <key>IBFramework Version</key>
+       <string>349.0</string>
+       <key>IBOpenObjects</key>
+       <array>
+               <integer>5</integer>
+       </array>
+       <key>IBSystem Version</key>
+       <string>7C107</string>
+</dict>
+</plist>
diff --git a/English.lproj/AboutBox.nib/keyedobjects.nib b/English.lproj/AboutBox.nib/keyedobjects.nib
new file mode 100644 (file)
index 0000000..c7aeaac
Binary files /dev/null and b/English.lproj/AboutBox.nib/keyedobjects.nib differ
diff --git a/English.lproj/AboutBox.nib/objects.nib b/English.lproj/AboutBox.nib/objects.nib
new file mode 100644 (file)
index 0000000..3fc0daa
Binary files /dev/null and b/English.lproj/AboutBox.nib/objects.nib differ
diff --git a/English.lproj/AboutBox~.nib/classes.nib b/English.lproj/AboutBox~.nib/classes.nib
new file mode 100644 (file)
index 0000000..c9c6005
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    IBClasses = (
+        {
+            ACTIONS = {launchEmailButton = id; launchWebsiteButton = id; }; 
+            CLASS = AboutBoxController; 
+            LANGUAGE = ObjC; 
+            OUTLETS = {aboutWindow = NSWindow; }; 
+            SUPERCLASS = NSWindowController; 
+        }, 
+        {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }
+    ); 
+    IBVersion = 1; 
+}
\ No newline at end of file
diff --git a/English.lproj/AboutBox~.nib/info.nib b/English.lproj/AboutBox~.nib/info.nib
new file mode 100644 (file)
index 0000000..f0d37b7
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>IBDocumentLocation</key>
+       <string>85 112 356 241 0 0 1280 1002 </string>
+       <key>IBFramework Version</key>
+       <string>349.0</string>
+       <key>IBOpenObjects</key>
+       <array>
+               <integer>5</integer>
+       </array>
+       <key>IBSystem Version</key>
+       <string>7C107</string>
+</dict>
+</plist>
diff --git a/English.lproj/AboutBox~.nib/keyedobjects.nib b/English.lproj/AboutBox~.nib/keyedobjects.nib
new file mode 100644 (file)
index 0000000..9eb8afa
Binary files /dev/null and b/English.lproj/AboutBox~.nib/keyedobjects.nib differ
diff --git a/English.lproj/AboutBox~.nib/objects.nib b/English.lproj/AboutBox~.nib/objects.nib
new file mode 100644 (file)
index 0000000..eeedf8f
Binary files /dev/null and b/English.lproj/AboutBox~.nib/objects.nib differ
diff --git a/English.lproj/Credits.rtf b/English.lproj/Credits.rtf
new file mode 100644 (file)
index 0000000..ff10d54
--- /dev/null
@@ -0,0 +1,11 @@
+{\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural
+
+\f0\b\fs24 \cf0 Programming:
+\f1\b0 \
+       Chaz McGarvey\
+
+\fs18 \
+Standard About Box ( Customize Me!! )}
\ No newline at end of file
index 623ed62fc4292f784fddc9938b8582dcaadcb0fb..613f8a55e6cac0d33d076a1f5f466f1c90fff848 100644 (file)
Binary files a/English.lproj/InfoPlist.strings and b/English.lproj/InfoPlist.strings differ
index e08ceca714d66c774d8d87cd236ea9b2b9472e3e..ad916b00c83e3b00b1cc7f884cef3aa31b88b16b 100644 (file)
@@ -1,25 +1,71 @@
 {
     IBClasses = (
         {
-            ACTIONS = {changeButton = id; processPopup = id; searchButton = id; typePopup = id; }; 
+            ACTIONS = {
+                launchDebugEmailMenu = id; 
+                launchHelpFile = id; 
+                launchWebsiteMenu = id; 
+                showAboutBoxWindow = id; 
+                showNetTrafficWindow = id; 
+                showPreferenceWindow = id; 
+            }; 
             CLASS = AppController; 
             LANGUAGE = ObjC; 
+            SUPERCLASS = NSObject; 
+        }, 
+        {
+            ACTIONS = {redoMenu = id; undoMenu = id; }; 
+            CLASS = FirstResponder; 
+            LANGUAGE = ObjC; 
+            SUPERCLASS = NSObject; 
+        }, 
+        {
+            ACTIONS = {
+                changeButton = id; 
+                disconnectButton = id; 
+                pauseButton = id; 
+                processMenuItem = id; 
+                searchButton = id; 
+                searchUnknownButton = id; 
+                serverMenuItem = id; 
+                serverMenuLocal = id; 
+                sizeMenu16bit = id; 
+                sizeMenu32bit = id; 
+                sizeMenu64bit = id; 
+                sizeMenu8bit = id; 
+                startButton = id; 
+                typeMenuFloat = id; 
+                typeMenuInteger = id; 
+                typeMenuString = id; 
+                typeMenuUnknown = id; 
+            }; 
+            CLASS = MyDocument; 
+            LANGUAGE = ObjC; 
             OUTLETS = {
                 addressTable = id; 
                 changeButton = id; 
                 changeTextField = id; 
+                cheatWindow = id; 
+                processMenu = id; 
                 processPopup = id; 
                 searchButton = id; 
+                searchPopup = id; 
                 searchTextField = id; 
+                searchUnknownButton = id; 
+                serverMenu = id; 
+                serverPopup = id; 
+                sizeMenu = id; 
                 sizePopup = id; 
+                startButton = id; 
                 statusBar = id; 
                 statusText = id; 
+                typeMenu = id; 
                 typePopup = id; 
-                window = id; 
+                typeTabs = id; 
+                variableValueText = id; 
             }; 
-            SUPERCLASS = NSObject; 
-        }, 
-        {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }
+            SUPERCLASS = NSDocument; 
+        }
     ); 
     IBVersion = 1; 
 }
\ No newline at end of file
index 6ea980697d75b9266c15b61015a5eba598762c97..6ea45962697edc861b4d22b1273627ba831d13f0 100644 (file)
@@ -3,21 +3,19 @@
 <plist version="1.0">
 <dict>
        <key>IBDocumentLocation</key>
-       <string>88 78 356 240 0 0 1280 1002 </string>
+       <string>485 133 356 240 0 0 1280 1002 </string>
        <key>IBEditorPositions</key>
        <dict>
                <key>29</key>
-               <string>122 595 201 44 0 0 1280 1002 </string>
+               <string>87 519 377 44 0 0 1280 1002 </string>
        </dict>
        <key>IBFramework Version</key>
-       <string>291.0</string>
+       <string>349.0</string>
        <key>IBOpenObjects</key>
        <array>
                <integer>29</integer>
-               <integer>348</integer>
-               <integer>410</integer>
        </array>
        <key>IBSystem Version</key>
-       <string>6L60</string>
+       <string>7C107</string>
 </dict>
 </plist>
index 3d050c817d3440bc28605d39766239ac17092f2f..9dba46f75ebc240c9ca6378ce2b0484c0f53f26d 100644 (file)
Binary files a/English.lproj/MainMenu.nib/keyedobjects.nib and b/English.lproj/MainMenu.nib/keyedobjects.nib differ
index 27f331fa3b2d5641213e7532ac3640631259738f..f524ff74e6322980177ee60878832c0cd0dd7c1f 100644 (file)
Binary files a/English.lproj/MainMenu.nib/objects.nib and b/English.lproj/MainMenu.nib/objects.nib differ
index e08ceca714d66c774d8d87cd236ea9b2b9472e3e..bfbeb7dbcd8f3f857a968c5d7dd4664ad9253f39 100644 (file)
@@ -1,25 +1,72 @@
 {
     IBClasses = (
         {
-            ACTIONS = {changeButton = id; processPopup = id; searchButton = id; typePopup = id; }; 
+            ACTIONS = {
+                launchDebugEmailMenu = id; 
+                launchEmailMenu = id; 
+                launchHelpFile = id; 
+                launchWebsiteMenu = id; 
+                showAboutBoxWindow = id; 
+                showNetTrafficWindow = id; 
+                showPreferenceWindow = id; 
+            }; 
             CLASS = AppController; 
             LANGUAGE = ObjC; 
+            SUPERCLASS = NSObject; 
+        }, 
+        {
+            ACTIONS = {redoMenu = id; undoMenu = id; }; 
+            CLASS = FirstResponder; 
+            LANGUAGE = ObjC; 
+            SUPERCLASS = NSObject; 
+        }, 
+        {
+            ACTIONS = {
+                changeButton = id; 
+                disconnectButton = id; 
+                pauseButton = id; 
+                processMenuItem = id; 
+                searchButton = id; 
+                searchUnknownButton = id; 
+                serverMenuItem = id; 
+                serverMenuLocal = id; 
+                sizeMenu16bit = id; 
+                sizeMenu32bit = id; 
+                sizeMenu64bit = id; 
+                sizeMenu8bit = id; 
+                startButton = id; 
+                typeMenuFloat = id; 
+                typeMenuInteger = id; 
+                typeMenuString = id; 
+                typeMenuUnknown = id; 
+            }; 
+            CLASS = MyDocument; 
+            LANGUAGE = ObjC; 
             OUTLETS = {
                 addressTable = id; 
                 changeButton = id; 
                 changeTextField = id; 
+                cheatWindow = id; 
+                processMenu = id; 
                 processPopup = id; 
                 searchButton = id; 
+                searchPopup = id; 
                 searchTextField = id; 
+                searchUnknownButton = id; 
+                serverMenu = id; 
+                serverPopup = id; 
+                sizeMenu = id; 
                 sizePopup = id; 
+                startButton = id; 
                 statusBar = id; 
                 statusText = id; 
+                typeMenu = id; 
                 typePopup = id; 
-                window = id; 
+                typeTabs = id; 
+                variableValueText = id; 
             }; 
-            SUPERCLASS = NSObject; 
-        }, 
-        {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }
+            SUPERCLASS = NSDocument; 
+        }
     ); 
     IBVersion = 1; 
 }
\ No newline at end of file
index 6ea980697d75b9266c15b61015a5eba598762c97..6ea45962697edc861b4d22b1273627ba831d13f0 100644 (file)
@@ -3,21 +3,19 @@
 <plist version="1.0">
 <dict>
        <key>IBDocumentLocation</key>
-       <string>88 78 356 240 0 0 1280 1002 </string>
+       <string>485 133 356 240 0 0 1280 1002 </string>
        <key>IBEditorPositions</key>
        <dict>
                <key>29</key>
-               <string>122 595 201 44 0 0 1280 1002 </string>
+               <string>87 519 377 44 0 0 1280 1002 </string>
        </dict>
        <key>IBFramework Version</key>
-       <string>291.0</string>
+       <string>349.0</string>
        <key>IBOpenObjects</key>
        <array>
                <integer>29</integer>
-               <integer>348</integer>
-               <integer>410</integer>
        </array>
        <key>IBSystem Version</key>
-       <string>6L60</string>
+       <string>7C107</string>
 </dict>
 </plist>
index 026ec00f89de79efef60b9d94332ef9db162ace0..9dba46f75ebc240c9ca6378ce2b0484c0f53f26d 100644 (file)
Binary files a/English.lproj/MainMenu~.nib/keyedobjects.nib and b/English.lproj/MainMenu~.nib/keyedobjects.nib differ
index 5b9086e1f68f90078970beed897f7cd88497ce76..f524ff74e6322980177ee60878832c0cd0dd7c1f 100644 (file)
Binary files a/English.lproj/MainMenu~.nib/objects.nib and b/English.lproj/MainMenu~.nib/objects.nib differ
diff --git a/English.lproj/MyDocument.nib/classes.nib b/English.lproj/MyDocument.nib/classes.nib
new file mode 100644 (file)
index 0000000..20e9ef1
--- /dev/null
@@ -0,0 +1,55 @@
+{
+    IBClasses = (
+        {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, 
+        {
+            ACTIONS = {
+                cancelButton = id; 
+                changeButton = id; 
+                clearSearchButton = id; 
+                okButton = id; 
+                pauseButton = id; 
+                processMenuItem = id; 
+                recurringChangeButton = id; 
+                redoMenu = id; 
+                searchButton = id; 
+                serverMenuDisconnect = id; 
+                serverMenuItem = id; 
+                serverMenuLocal = id; 
+                typePopup = id; 
+                undoMenu = id; 
+            }; 
+            CLASS = MyDocument; 
+            LANGUAGE = ObjC; 
+            OUTLETS = {
+                addressTable = NSTableView; 
+                cancelButton = NSButton; 
+                changeButton = NSButton; 
+                changeSecondsCombo = NSComboBox; 
+                changeSheet = NSWindow; 
+                changeTextField = NSTextField; 
+                cheatWindow = NSWindow; 
+                clearSearchButton = NSButton; 
+                decimalSizeMenu = NSMenu; 
+                integerSizeMenu = NSMenu; 
+                okButton = NSButton; 
+                pauseButton = NSButton; 
+                processMenu = NSMenu; 
+                processPopup = NSPopUpButton; 
+                recurringChangeButton = NSButton; 
+                searchButton = NSButton; 
+                searchRadioMatrix = NSMatrix; 
+                searchTextField = NSTextField; 
+                serverMenu = NSMenu; 
+                serverPopup = NSPopUpButton; 
+                sizePopup = NSPopUpButton; 
+                statusBar = NSProgressIndicator; 
+                statusText = NSTextField; 
+                stringSizeMenu = NSMenu; 
+                typeMenu = NSMenu; 
+                typePopup = NSPopUpButton; 
+            }; 
+            SUPERCLASS = NSDocument; 
+        }
+    ); 
+    IBVersion = 1; 
+}
\ No newline at end of file
diff --git a/English.lproj/MyDocument.nib/info.nib b/English.lproj/MyDocument.nib/info.nib
new file mode 100644 (file)
index 0000000..defb22a
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>IBDocumentLocation</key>
+       <string>555 97 356 406 0 0 1280 1002 </string>
+       <key>IBEditorPositions</key>
+       <dict>
+               <key>143</key>
+               <string>402 411 134 106 0 0 1280 1002 </string>
+               <key>192</key>
+               <string>272 343 101 49 0 0 1280 1002 </string>
+               <key>207</key>
+               <string>376 382 134 48 0 0 1280 1002 </string>
+               <key>400</key>
+               <string>612 529 69 87 0 0 1280 1002 </string>
+               <key>405</key>
+               <string>509 334 77 68 0 0 1280 1002 </string>
+               <key>410</key>
+               <string>509 326 77 49 0 0 1280 1002 </string>
+       </dict>
+       <key>IBFramework Version</key>
+       <string>349.0</string>
+       <key>IBOldestOS</key>
+       <integer>2</integer>
+       <key>IBOpenObjects</key>
+       <array>
+               <integer>610</integer>
+               <integer>285</integer>
+               <integer>192</integer>
+               <integer>143</integer>
+               <integer>400</integer>
+       </array>
+       <key>IBSystem Version</key>
+       <string>7C107</string>
+</dict>
+</plist>
diff --git a/English.lproj/MyDocument.nib/keyedobjects.nib b/English.lproj/MyDocument.nib/keyedobjects.nib
new file mode 100644 (file)
index 0000000..a857973
Binary files /dev/null and b/English.lproj/MyDocument.nib/keyedobjects.nib differ
diff --git a/English.lproj/MyDocument.nib/objects.nib b/English.lproj/MyDocument.nib/objects.nib
new file mode 100644 (file)
index 0000000..8fd4180
Binary files /dev/null and b/English.lproj/MyDocument.nib/objects.nib differ
diff --git a/English.lproj/MyDocument~.nib/classes.nib b/English.lproj/MyDocument~.nib/classes.nib
new file mode 100644 (file)
index 0000000..9b031d9
--- /dev/null
@@ -0,0 +1,54 @@
+{
+    IBClasses = (
+        {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, 
+        {
+            ACTIONS = {
+                cancelButton = id; 
+                changeButton = id; 
+                clearSearchButton = id; 
+                okButton = id; 
+                pauseButton = id; 
+                processMenuItem = id; 
+                redoMenu = id; 
+                searchButton = id; 
+                serverMenuDisconnect = id; 
+                serverMenuItem = id; 
+                serverMenuLocal = id; 
+                typePopup = id; 
+                undoMenu = id; 
+            }; 
+            CLASS = MyDocument; 
+            LANGUAGE = ObjC; 
+            OUTLETS = {
+                addressTable = NSTableView; 
+                cancelButton = NSButton; 
+                changeButton = NSButton; 
+                changeSecondsCombo = NSComboBox; 
+                changeSheet = NSWindow; 
+                changeTextField = NSTextField; 
+                cheatWindow = NSWindow; 
+                clearSearchButton = NSButton; 
+                decimalSizeMenu = NSMenu; 
+                integerSizeMenu = NSMenu; 
+                okButton = NSButton; 
+                pauseButton = NSButton; 
+                processMenu = NSMenu; 
+                processPopup = NSPopUpButton; 
+                recurringChangeButton = NSButton; 
+                searchButton = NSButton; 
+                searchRadioMatrix = NSMatrix; 
+                searchTextField = NSTextField; 
+                serverMenu = NSMenu; 
+                serverPopup = NSPopUpButton; 
+                sizePopup = NSPopUpButton; 
+                statusBar = NSProgressIndicator; 
+                statusText = NSTextField; 
+                stringSizeMenu = NSMenu; 
+                typeMenu = NSMenu; 
+                typePopup = NSPopUpButton; 
+            }; 
+            SUPERCLASS = NSDocument; 
+        }
+    ); 
+    IBVersion = 1; 
+}
\ No newline at end of file
diff --git a/English.lproj/MyDocument~.nib/info.nib b/English.lproj/MyDocument~.nib/info.nib
new file mode 100644 (file)
index 0000000..288842a
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>IBDocumentLocation</key>
+       <string>555 97 356 406 0 0 1280 1002 </string>
+       <key>IBEditorPositions</key>
+       <dict>
+               <key>143</key>
+               <string>402 411 134 106 0 0 1280 1002 </string>
+               <key>192</key>
+               <string>272 343 101 49 0 0 1280 1002 </string>
+               <key>207</key>
+               <string>376 382 134 48 0 0 1280 1002 </string>
+               <key>400</key>
+               <string>612 529 69 87 0 0 1280 1002 </string>
+               <key>405</key>
+               <string>509 334 77 68 0 0 1280 1002 </string>
+               <key>410</key>
+               <string>509 326 77 49 0 0 1280 1002 </string>
+       </dict>
+       <key>IBFramework Version</key>
+       <string>349.0</string>
+       <key>IBOldestOS</key>
+       <integer>2</integer>
+       <key>IBOpenObjects</key>
+       <array>
+               <integer>143</integer>
+               <integer>610</integer>
+               <integer>192</integer>
+               <integer>400</integer>
+               <integer>285</integer>
+       </array>
+       <key>IBSystem Version</key>
+       <string>7C107</string>
+</dict>
+</plist>
diff --git a/English.lproj/MyDocument~.nib/keyedobjects.nib b/English.lproj/MyDocument~.nib/keyedobjects.nib
new file mode 100644 (file)
index 0000000..d05cb29
Binary files /dev/null and b/English.lproj/MyDocument~.nib/keyedobjects.nib differ
diff --git a/English.lproj/MyDocument~.nib/objects.nib b/English.lproj/MyDocument~.nib/objects.nib
new file mode 100644 (file)
index 0000000..3d0c75c
Binary files /dev/null and b/English.lproj/MyDocument~.nib/objects.nib differ
diff --git a/English.lproj/NetTraffic.nib/classes.nib b/English.lproj/NetTraffic.nib/classes.nib
new file mode 100644 (file)
index 0000000..35f6f8c
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    IBClasses = (
+        {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, 
+        {
+            ACTIONS = {killConnectionButton = id; }; 
+            CLASS = NetTrafficController; 
+            LANGUAGE = ObjC; 
+            OUTLETS = {
+                broadcastNameText = id; 
+                connectionCountText = id; 
+                delegate = id; 
+                killConnectionButton = id; 
+                listenPortText = id; 
+                netTrafficWindow = id; 
+                serverListTable = id; 
+            }; 
+            SUPERCLASS = NSWindowController; 
+        }
+    ); 
+    IBVersion = 1; 
+}
\ No newline at end of file
diff --git a/English.lproj/NetTraffic.nib/info.nib b/English.lproj/NetTraffic.nib/info.nib
new file mode 100644 (file)
index 0000000..95a67e7
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>IBDocumentLocation</key>
+       <string>512 126 356 240 0 0 1280 1002 </string>
+       <key>IBFramework Version</key>
+       <string>349.0</string>
+       <key>IBOldestOS</key>
+       <integer>1</integer>
+       <key>IBOpenObjects</key>
+       <array>
+               <integer>26</integer>
+       </array>
+       <key>IBSystem Version</key>
+       <string>7C107</string>
+</dict>
+</plist>
diff --git a/English.lproj/NetTraffic.nib/keyedobjects.nib b/English.lproj/NetTraffic.nib/keyedobjects.nib
new file mode 100644 (file)
index 0000000..01c4b5e
Binary files /dev/null and b/English.lproj/NetTraffic.nib/keyedobjects.nib differ
diff --git a/English.lproj/NetTraffic.nib/objects.nib b/English.lproj/NetTraffic.nib/objects.nib
new file mode 100644 (file)
index 0000000..7a53aec
Binary files /dev/null and b/English.lproj/NetTraffic.nib/objects.nib differ
diff --git a/English.lproj/NetTraffic~.nib/classes.nib b/English.lproj/NetTraffic~.nib/classes.nib
new file mode 100644 (file)
index 0000000..35f6f8c
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    IBClasses = (
+        {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, 
+        {
+            ACTIONS = {killConnectionButton = id; }; 
+            CLASS = NetTrafficController; 
+            LANGUAGE = ObjC; 
+            OUTLETS = {
+                broadcastNameText = id; 
+                connectionCountText = id; 
+                delegate = id; 
+                killConnectionButton = id; 
+                listenPortText = id; 
+                netTrafficWindow = id; 
+                serverListTable = id; 
+            }; 
+            SUPERCLASS = NSWindowController; 
+        }
+    ); 
+    IBVersion = 1; 
+}
\ No newline at end of file
diff --git a/English.lproj/NetTraffic~.nib/info.nib b/English.lproj/NetTraffic~.nib/info.nib
new file mode 100644 (file)
index 0000000..95a67e7
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>IBDocumentLocation</key>
+       <string>512 126 356 240 0 0 1280 1002 </string>
+       <key>IBFramework Version</key>
+       <string>349.0</string>
+       <key>IBOldestOS</key>
+       <integer>1</integer>
+       <key>IBOpenObjects</key>
+       <array>
+               <integer>26</integer>
+       </array>
+       <key>IBSystem Version</key>
+       <string>7C107</string>
+</dict>
+</plist>
diff --git a/English.lproj/NetTraffic~.nib/keyedobjects.nib b/English.lproj/NetTraffic~.nib/keyedobjects.nib
new file mode 100644 (file)
index 0000000..ece02b9
Binary files /dev/null and b/English.lproj/NetTraffic~.nib/keyedobjects.nib differ
diff --git a/English.lproj/NetTraffic~.nib/objects.nib b/English.lproj/NetTraffic~.nib/objects.nib
new file mode 100644 (file)
index 0000000..2a6b2e5
Binary files /dev/null and b/English.lproj/NetTraffic~.nib/objects.nib differ
diff --git a/English.lproj/Preferences.nib/classes.nib b/English.lproj/Preferences.nib/classes.nib
new file mode 100644 (file)
index 0000000..d0ff1c9
--- /dev/null
@@ -0,0 +1,27 @@
+{
+    IBClasses = (
+        {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, 
+        {
+            ACTIONS = {
+                allowRemoteButton = id; 
+                broadcastNameTextField = id; 
+                listenPortTextField = id; 
+                playSoundsButton = id; 
+                windowsOnTopButton = id; 
+            }; 
+            CLASS = PreferenceController; 
+            LANGUAGE = ObjC; 
+            OUTLETS = {
+                allowRemoteButton = id; 
+                broadcastNameTextField = id; 
+                delegate = id; 
+                listenPortTextField = id; 
+                playSoundsButton = id; 
+                prefsWindow = id; 
+                windowsOnTopButton = id; 
+            }; 
+            SUPERCLASS = NSWindowController; 
+        }
+    ); 
+    IBVersion = 1; 
+}
\ No newline at end of file
diff --git a/English.lproj/Preferences.nib/info.nib b/English.lproj/Preferences.nib/info.nib
new file mode 100644 (file)
index 0000000..e8caea5
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>IBDocumentLocation</key>
+       <string>531 250 356 240 0 0 1280 1002 </string>
+       <key>IBFramework Version</key>
+       <string>349.0</string>
+       <key>IBOpenObjects</key>
+       <array>
+               <integer>9</integer>
+       </array>
+       <key>IBSystem Version</key>
+       <string>7C107</string>
+</dict>
+</plist>
diff --git a/English.lproj/Preferences.nib/keyedobjects.nib b/English.lproj/Preferences.nib/keyedobjects.nib
new file mode 100644 (file)
index 0000000..69fd8d0
Binary files /dev/null and b/English.lproj/Preferences.nib/keyedobjects.nib differ
diff --git a/English.lproj/Preferences.nib/objects.nib b/English.lproj/Preferences.nib/objects.nib
new file mode 100644 (file)
index 0000000..bad2835
Binary files /dev/null and b/English.lproj/Preferences.nib/objects.nib differ
diff --git a/English.lproj/Preferences~.nib/classes.nib b/English.lproj/Preferences~.nib/classes.nib
new file mode 100644 (file)
index 0000000..d0ff1c9
--- /dev/null
@@ -0,0 +1,27 @@
+{
+    IBClasses = (
+        {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, 
+        {
+            ACTIONS = {
+                allowRemoteButton = id; 
+                broadcastNameTextField = id; 
+                listenPortTextField = id; 
+                playSoundsButton = id; 
+                windowsOnTopButton = id; 
+            }; 
+            CLASS = PreferenceController; 
+            LANGUAGE = ObjC; 
+            OUTLETS = {
+                allowRemoteButton = id; 
+                broadcastNameTextField = id; 
+                delegate = id; 
+                listenPortTextField = id; 
+                playSoundsButton = id; 
+                prefsWindow = id; 
+                windowsOnTopButton = id; 
+            }; 
+            SUPERCLASS = NSWindowController; 
+        }
+    ); 
+    IBVersion = 1; 
+}
\ No newline at end of file
diff --git a/English.lproj/Preferences~.nib/info.nib b/English.lproj/Preferences~.nib/info.nib
new file mode 100644 (file)
index 0000000..e8caea5
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>IBDocumentLocation</key>
+       <string>531 250 356 240 0 0 1280 1002 </string>
+       <key>IBFramework Version</key>
+       <string>349.0</string>
+       <key>IBOpenObjects</key>
+       <array>
+               <integer>9</integer>
+       </array>
+       <key>IBSystem Version</key>
+       <string>7C107</string>
+</dict>
+</plist>
diff --git a/English.lproj/Preferences~.nib/keyedobjects.nib b/English.lproj/Preferences~.nib/keyedobjects.nib
new file mode 100644 (file)
index 0000000..0e6a08a
Binary files /dev/null and b/English.lproj/Preferences~.nib/keyedobjects.nib differ
diff --git a/English.lproj/Preferences~.nib/objects.nib b/English.lproj/Preferences~.nib/objects.nib
new file mode 100644 (file)
index 0000000..dbaceae
Binary files /dev/null and b/English.lproj/Preferences~.nib/objects.nib differ
diff --git a/Info-The_Cheat__Upgraded_.plist b/Info-The_Cheat__Upgraded_.plist
new file mode 100644 (file)
index 0000000..0d9ad20
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>CFBundleDevelopmentRegion</key>
+       <string>English</string>
+       <key>CFBundleDocumentTypes</key>
+       <array>
+               <dict>
+                       <key>CFBundleTypeName</key>
+                       <string>The Cheat</string>
+                       <key>CFBundleTypeRole</key>
+                       <string>Editor</string>
+                       <key>NSDocumentClass</key>
+                       <string>MyDocument</string>
+               </dict>
+       </array>
+       <key>CFBundleExecutable</key>
+       <string>The Cheat</string>
+       <key>CFBundleGetInfoString</key>
+       <string>The Cheat 1.0</string>
+       <key>CFBundleIconFile</key>
+       <string>icon_b.icns</string>
+       <key>CFBundleIdentifier</key>
+       <string>com.brokenzipper.TheCheat</string>
+       <key>CFBundleInfoDictionaryVersion</key>
+       <string>6.0</string>
+       <key>CFBundleName</key>
+       <string>The Cheat</string>
+       <key>CFBundlePackageType</key>
+       <string>APPL</string>
+       <key>CFBundleShortVersionString</key>
+       <string>1.0</string>
+       <key>CFBundleSignature</key>
+       <string>ThCh</string>
+       <key>CFBundleVersion</key>
+       <string>1B03</string>
+       <key>NSMainNibFile</key>
+       <string>MainMenu</string>
+       <key>NSPrincipalClass</key>
+       <string>NSApplication</string>
+</dict>
+</plist>
diff --git a/ListenerDelegate.h b/ListenerDelegate.h
new file mode 100644 (file)
index 0000000..2253e66
--- /dev/null
@@ -0,0 +1,22 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      ListenerDelegate.h
+// Created:   Wed Sep 24 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import <Cocoa/Cocoa.h>
+
+
+@protocol ListenerDelegate
+
+- (void)listenerListeningWithSocket:(int)sock;
+- (void)listenerDisconnected;
+- (void)listenerError:(NSString *)error message:(NSString *)message;
+
+- (void)listenerReceivedNewConnection:(int)sock;
+
+@end
\ No newline at end of file
diff --git a/MenuExtras.h b/MenuExtras.h
new file mode 100644 (file)
index 0000000..4f9f3a1
--- /dev/null
@@ -0,0 +1,25 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      MenuExtras.h
+// Created:   Wed Sep 17 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface NSMenu (MenuExtras)
+
+- (void)removeItemWithTitle:(NSString *)title;
+- (void)removeAllItemsWithTitle:(NSString *)title;
+- (void)removeItemWithTag:(int)tag;
+
+- (void)removeAllItems;
+
+- (void)enableAllItems;
+- (void)disableAllItems;
+
+@end
\ No newline at end of file
diff --git a/MenuExtras.m b/MenuExtras.m
new file mode 100644 (file)
index 0000000..d8af851
--- /dev/null
@@ -0,0 +1,89 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      MenuExtras.m
+// Created:   Wed Sep 17 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import "MenuExtras.h"
+
+
+@implementation NSMenu (MenuExtras)
+
+- (void)removeItemWithTitle:(NSString *)title
+{
+       int                     i, top = [self numberOfItems];
+
+       for ( i = 0; i < top; i++ )
+       {
+               if ( [[[self itemAtIndex:i] title] isEqualToString:title] )
+               {
+                       [self removeItemAtIndex:i];
+                       break;
+               }
+       }
+}
+
+- (void)removeAllItemsWithTitle:(NSString *)title
+{
+       int                     i, top = [self numberOfItems] - 1;
+
+       for ( i = top; i >= 0; i-- )
+       {
+               if ( [[[self itemAtIndex:i] title] isEqualToString:title] )
+               {
+                       [self removeItemAtIndex:i];
+               }
+       }
+}
+
+- (void)removeItemWithTag:(int)tag
+{
+       int                     i, top = [self numberOfItems];
+
+       for ( i = 0; i < top; i++ )
+       {
+               if ( [[self itemAtIndex:i] tag] == tag )
+               {
+                       [self removeItemAtIndex:i];
+                       break;
+               }
+       }
+}
+
+
+- (void)removeAllItems
+{
+       int                     i, top = [self numberOfItems];
+
+       for ( i = 0; i < top; i++ )
+       {
+               [self removeItemAtIndex:0];
+       }
+}
+
+
+- (void)enableAllItems
+{
+       int                     i, top = [self numberOfItems];
+
+       for ( i = 0; i < top; i++ )
+       {
+               [[self itemAtIndex:i] setEnabled:YES];
+       }
+}
+
+- (void)disableAllItems
+{
+       int                     i, top = [self numberOfItems];
+
+       for ( i = 0; i < top; i++ )
+       {
+               [[self itemAtIndex:i] setEnabled:NO];
+       }
+}
+
+@end
\ No newline at end of file
diff --git a/MyDocument.h b/MyDocument.h
new file mode 100644 (file)
index 0000000..1e928e0
--- /dev/null
@@ -0,0 +1,198 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      MyDocument.h
+// Created:   Sun Sep 07 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import <Cocoa/Cocoa.h>
+
+#include <float.h>
+
+#import "ClientDelegate.h"
+
+#import "MenuExtras.h"
+
+#include "cheat_types.h"
+#include "cheat_globals.h"
+#include "cheat_net.h"
+
+
+@interface MyDocument : NSDocument < ClientDelegate >
+{
+       // allows for easy interface updating
+       TCstatus                        status, lastStatus;
+       
+       // dealing with connecting
+       BOOL                            waitingToConnect;
+       NSConnection            *connection;
+       NSData                          *connectionAddress;
+       NSString                        *connectionName;
+       int                                     sockfd;
+       NSNetServiceBrowser     *browser;
+       
+       // for updating the interface
+       NSString                        *targetName;
+       int                                     targetPID;
+       BOOL                            targetPaused;
+
+       // list of broadcast servers
+       NSMutableArray          *serverList;
+       NSMutableArray          *addressList;
+
+       TCaddress                       *searchResults;
+       int                                     searchResultsAmount;
+
+       // to allow for connecting on new document
+       BOOL                            everConnected;
+       
+       // for the status field
+       NSString                        *savedStatusText;
+       NSColor                         *savedStatusColor;
+       NSTimer                         *statusTextTimer;
+       
+       // for updating the interface
+       int                                     undoCount, redoCount;
+       BOOL                            addressSelected;
+       
+       // for changing variables every x seconds
+       NSTimer                         *changeTimer;
+
+       // INTERFACE OUTLETS
+       IBOutlet NSWindow                               *cheatWindow;
+       IBOutlet NSPopUpButton                  *serverPopup;
+       IBOutlet NSButton                               *pauseButton;
+       IBOutlet NSPopUpButton                  *processPopup;
+       IBOutlet NSPopUpButton                  *typePopup;
+       IBOutlet NSPopUpButton                  *sizePopup;
+       IBOutlet NSTextField                    *searchTextField;
+       IBOutlet NSMatrix                               *searchRadioMatrix;
+       IBOutlet NSButton                               *searchButton;
+       IBOutlet NSButton                               *clearSearchButton;
+       IBOutlet NSButton                               *changeButton;
+       IBOutlet NSTableView                    *addressTable;
+       IBOutlet NSTextField                    *statusText;
+       IBOutlet NSProgressIndicator    *statusBar;
+
+       IBOutlet NSMenu                                 *serverMenu;
+       IBOutlet NSMenu                                 *processMenu;
+       IBOutlet NSMenu                                 *typeMenu;
+       IBOutlet NSMenu                                 *stringSizeMenu;
+       IBOutlet NSMenu                                 *integerSizeMenu;
+       IBOutlet NSMenu                                 *decimalSizeMenu;
+       
+       // FOR THE CHANGE SHEET
+       IBOutlet NSWindow                               *changeSheet;
+       IBOutlet NSTextField                    *changeTextField;
+       IBOutlet NSButton                               *recurringChangeButton;
+       IBOutlet NSComboBox                             *changeSecondsCombo;
+       IBOutlet NSButton                               *cancelButton;
+       IBOutlet NSButton                               *okButton;
+}
+
+// UPDATE INTERFACE
+- (void)initialInterfaceSetup;
+
+- (void)updateSearchButton;
+- (void)updatePauseButton;
+- (void)updateSearchBoxes;
+- (void)updateChangeButton;
+
+- (void)setStatusDisconnected;
+- (void)setStatusConnected;
+- (void)setStatusCheating;
+- (void)setStatusSearching;
+- (void)setStatusChanging;
+- (void)setStatusChangingLater;
+- (void)setStatusChangingContinuously;
+- (void)setStatusUndoing;
+- (void)setStatusRedoing;
+- (void)setStatusToLast;
+
+- (void)setStatusText:(NSString *)msg duration:(NSTimeInterval)seconds;
+- (void)setStatusText:(NSString *)msg duration:(NSTimeInterval)seconds color:(NSColor *)color;
+- (void)statusTextTimer:(NSTimer *)timer;
+
+// UPDATE CHANGE SHEET
+
+
+
+// CONNECT/DISCONNECT TO SERVER
+- (void)connectToLocal;
+- (void)connectToServer:(NSData *)addr name:(NSString *)name;
+- (void)disconnect;
+
+// SEND NETWORK MESSAGE
+- (void)sendProcessListRequest;
+- (void)sendClearSearch;
+- (void)sendSearch:(char const *)data size:(int)size;
+- (void)sendChange:(char const *)data size:(int)size;
+- (void)sendPauseTarget;
+- (void)sendVariableValueRequest;
+- (void)sendUndoRequest;
+- (void)sendRedoRequest;
+- (void)sendSetTargetPID:(int)pid;
+
+// RECEIVED NETWORK MESSAGE
+- (void)receivedProcessList:(NSData *)data;
+- (void)receivedSearchFinished;
+- (void)receivedVariableList:(NSData *)data;
+- (void)receivedChangeFinished;
+- (void)receivedError:(NSData *)data;
+- (void)receivedUndoFinished;
+- (void)receivedRedoFinished;
+- (void)receivedUndoRedoStatus:(NSData *)data;
+- (void)receivedAppLaunched:(NSData *)data;
+- (void)receivedAppQuit:(NSData *)data;
+- (void)receivedTargetQuit;
+- (void)receivedPauseFinished:(NSData *)data;
+
+// SEARCHING/CHANGING COMMANDS
+- (void)search;
+- (void)change;
+
+- (void)changeSheet:(NSWindow *)sheet returned:(int)returned context:(void *)context;
+
+- (void)changeTimer:(NSTimer *)timer;
+
+// CHEAT WINDOW INTERFACE
+- (IBAction)typePopup:(id)sender;
+
+- (IBAction)searchButton:(id)sender;
+- (IBAction)clearSearchButton:(id)sender;
+
+- (IBAction)changeButton:(id)sender;
+
+- (IBAction)serverMenuItem:(id)sender;
+- (IBAction)serverMenuDisconnect:(id)sender;
+- (IBAction)serverMenuLocal:(id)sender;
+- (IBAction)processMenuItem:(id)sender;
+
+- (IBAction)pauseButton:(id)sender;
+
+- (IBAction)undoMenu:(id)sender;
+- (IBAction)redoMenu:(id)sender;
+
+// CHANGE SHEET INTERFACE
+- (IBAction)cancelButton:(id)sender;
+- (IBAction)okButton:(id)sender;
+
+- (IBAction)recurringChangeButton:(id)sender;
+
+// CLEAN UP
+- (void)clearSearch;
+- (void)destroyResults;
+
+// NOTIFICATION SELECTORS
+- (void)listenerStarted:(NSNotification *)note;
+- (void)listenerStopped:(NSNotification *)note;
+
+- (void)windowsOnTopChanged:(NSNotification *)note;
+
+// ERROR HANDLING
+- (void)handleErrorMessage:(NSString *)msg fatal:(BOOL)fatal;
+
+@end
\ No newline at end of file
diff --git a/MyDocument.m b/MyDocument.m
new file mode 100644 (file)
index 0000000..a4733cc
--- /dev/null
@@ -0,0 +1,1737 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      MyDocument.m
+// Created:   Sun Sep 07 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import "MyDocument.h"
+
+#import "CheatClient.h"
+
+
+// Internal Functions
+void TCPlaySound( NSString *name );
+
+
+@implementation MyDocument
+
+- (id)init
+{
+    if ( self = [super init] )
+       {
+               NSNotificationCenter            *nc = [NSNotificationCenter defaultCenter];
+               
+               // initialize stuff
+               sockfd = -1;
+               serverList = [[NSMutableArray alloc] init];
+               addressList = [[NSMutableArray alloc] init];
+               
+               // set up the network browser
+               browser = [[NSNetServiceBrowser alloc] init];
+               [browser setDelegate:self];
+               [browser searchForServicesOfType:@"_cheat._tcp." inDomain:@"local."];
+
+               // notifications to receive
+               [nc addObserver:self selector:@selector(listenerStarted:) name:@"TCListenerStarted" object:nil];
+               [nc addObserver:self selector:@selector(listenerStopped:) name:@"TCListenerStopped" object:nil];
+               [nc addObserver:self selector:@selector(windowsOnTopChanged:) name:@"TCWindowsOnTopChanged" object:nil];
+
+               [self connectToLocal];
+       }
+       
+    return self;
+}
+
+- (NSString *)windowNibName
+{
+    return @"MyDocument";
+}
+
+- (NSString *)displayName
+{
+       return [NSString stringWithFormat:@"The Cheat %i", TCGlobalDocumentCount++];
+}
+
+- (void)windowControllerDidLoadNib:(NSWindowController *)controller
+{
+    [super windowControllerDidLoadNib:controller];
+
+       [self initialInterfaceSetup];
+}
+
+
+- (void)close
+{
+       // closing the window will automatically disconnect the client from the server,
+       // but if the application is quitting, the client may not get a chance to exit.
+       // this _should_ be OK.
+       [self disconnect];
+       
+       // clean up status timer stuff.
+       // we do this here because we don't want the timer to fire after the window is gone
+       // since we need to use the window in that method.
+       [savedStatusColor release], savedStatusColor = nil;
+       [savedStatusText release], savedStatusText = nil;
+       [statusTextTimer invalidate];
+       [statusTextTimer release], statusTextTimer = nil;
+       
+       [super close];
+}
+
+
+- (void)initialInterfaceSetup
+{
+       NSString                        *localName = @"Local"; //[NSString stringWithFormat:@"%@ (local)", TCGlobalBroadcastName];
+       
+       // misc window settings
+       [cheatWindow useOptimizedDrawing:YES];
+       [cheatWindow setFrameAutosaveName:@"TCCheatWindow"];
+
+       // set options
+       if ( TCGlobalWindowsOnTop )
+       {
+               [cheatWindow setLevel:NSPopUpMenuWindowLevel];
+       }
+
+       // set up the server menu default items
+       [serverMenu removeAllItems];
+       [serverMenu addItemWithTitle:@"Not Connected" action:@selector(serverMenuDisconnect:) keyEquivalent:@""];
+       [serverMenu addItemWithTitle:localName action:@selector(serverMenuLocal:) keyEquivalent:@""];
+       [processMenu removeAllItems];
+       
+       // give tags to the menu items.
+       [[typeMenu itemWithTitle:@"Integer"] setTag:TYPE_INTEGER];
+       [[typeMenu itemWithTitle:@"String"] setTag:TYPE_STRING];
+       [[typeMenu itemWithTitle:@"Decimal"] setTag:TYPE_DECIMAL];
+       [[typeMenu itemWithTitle:@"Unknown Value"] setTag:TYPE_UNKNOWN];
+       [[stringSizeMenu itemWithTitle:@"8-bit"] setTag:SIZE_8_BIT];
+       [[integerSizeMenu itemWithTitle:@"char"] setTag:SIZE_8_BIT];
+       [[integerSizeMenu itemWithTitle:@"short"] setTag:SIZE_16_BIT];
+       [[integerSizeMenu itemWithTitle:@"long"] setTag:SIZE_32_BIT];
+       [[decimalSizeMenu itemWithTitle:@"float"] setTag:SIZE_32_BIT];
+       [[decimalSizeMenu itemWithTitle:@"double"] setTag:SIZE_64_BIT];
+       
+       // set default state
+       [statusText setStringValue:@""];
+       [self setStatusDisconnected];
+       
+       // change sheet initial interface.
+       [changeSecondsCombo setEnabled:NO];
+}
+
+- (void)updateSearchButton
+{
+       TCtype                  type = [typePopup indexOfSelectedItem];
+       
+       if ( type != TYPE_UNKNOWN )
+       {
+               if ( [[searchTextField stringValue] isEqualToString:@""] )
+               {
+                       [searchButton setEnabled:NO];
+               }
+               else
+               {
+                       [searchButton setEnabled:YES];
+               }
+       }
+       else
+       {
+               [searchButton setEnabled:YES];
+       }
+}
+
+- (void)updatePauseButton
+{
+       if ( !targetPaused )
+       {
+               [pauseButton setTitle:@"Pause Target"];
+       }
+       else
+       {
+               [pauseButton setTitle:@"Resume Target"];
+       }
+}
+
+- (void)updateSearchBoxes
+{
+       TCtype                  type = [typePopup indexOfSelectedItem];
+       
+       if ( type != TYPE_UNKNOWN )
+       {
+               [searchTextField setEnabled:YES];
+               [searchRadioMatrix setEnabled:NO];
+       }
+       else
+       {
+               [searchTextField setEnabled:NO];
+               [searchRadioMatrix setEnabled:YES];
+       }
+}
+
+- (void)updateChangeButton
+{
+       if ( addressSelected )
+       {
+               [changeButton setEnabled:YES];
+       }
+       else
+       {
+               [changeButton setEnabled:NO];
+       }
+}
+
+
+- (void)setStatusDisconnected
+{
+       lastStatus = status;
+       status = STATUS_DISCONNECTED;
+       
+       [serverPopup setEnabled:YES];
+       [pauseButton setTitle:@"Pause Target"];
+       [pauseButton setEnabled:NO];
+       [processPopup setEnabled:NO];
+       [typePopup setEnabled:NO];
+       [sizePopup setEnabled:NO];
+       [searchTextField setEnabled:NO];
+       [searchRadioMatrix setEnabled:NO];
+       [searchButton setEnabled:NO];
+       [clearSearchButton setEnabled:NO];
+       [self setStatusText:@"Not Connected" duration:0];
+       [statusBar stopAnimation:self];
+       [addressTable setEnabled:NO];
+       [changeButton setTitle:@"ChangeÉ"];
+       [changeButton setEnabled:NO];
+       
+       [[serverMenu itemAtIndex:0] setTitle:@"Not Connected"];
+}
+
+- (void)setStatusConnected
+{
+       lastStatus = status;
+       status = STATUS_CONNECTED;
+       
+       [serverPopup setEnabled:YES];
+       [self updatePauseButton];
+       [pauseButton setEnabled:YES];
+       [processPopup setEnabled:YES];
+       [typePopup setEnabled:YES];
+       [sizePopup setEnabled:YES];
+       [self updateSearchBoxes];
+       [self updateSearchButton];
+       [clearSearchButton setEnabled:NO];
+       [self setStatusText:@"Connected" duration:0];
+       [statusBar stopAnimation:self];
+       [addressTable setEnabled:NO];
+       [changeButton setTitle:@"ChangeÉ"];
+       [changeButton setEnabled:NO];
+       
+       [[serverMenu itemAtIndex:0] setTitle:@"Disconnect"];
+}
+
+- (void)setStatusCheating
+{
+       lastStatus = status;
+       status = STATUS_CHEATING;
+       
+       [serverPopup setEnabled:YES];
+       [self updatePauseButton];
+       [pauseButton setEnabled:YES];
+       [processPopup setEnabled:NO];
+       [typePopup setEnabled:NO];
+       [sizePopup setEnabled:NO];
+       [self updateSearchBoxes];
+       [self updateSearchButton];
+       [clearSearchButton setEnabled:YES];
+       if ( searchResultsAmount < TCMaxSearchResults )
+       {
+               if ( searchResultsAmount == 1 )
+               {
+                       [self setStatusText:[NSString stringWithFormat:@"Results: %i", searchResultsAmount] duration:0 color:[NSColor colorWithCalibratedRed:0.0f green:0.5f blue:0.0f alpha:1.0f]];
+               }
+               else if ( searchResultsAmount == 0 )
+               {
+                       [self setStatusText:[NSString stringWithFormat:@"Results: %i", searchResultsAmount] duration:0 color:[NSColor colorWithCalibratedRed:0.5f green:0.0f blue:0.0f alpha:1.0f]];
+               }
+               else
+               {
+                       [self setStatusText:[NSString stringWithFormat:@"Results: %i", searchResultsAmount] duration:0];
+               }
+       }
+       else
+       {
+               [self setStatusText:[NSString stringWithFormat:@"Results: >%i", TCMaxSearchResults] duration:0];
+       }
+       [statusBar stopAnimation:self];
+       [addressTable setEnabled:YES];
+       [changeButton setTitle:@"ChangeÉ"];
+       [self updateChangeButton];
+       
+       [[serverMenu itemAtIndex:0] setTitle:@"Disconnect"];
+}
+
+- (void)setStatusSearching
+{
+       lastStatus = status;
+       status = STATUS_SEARCHING;
+       
+       [serverPopup setEnabled:NO];
+       [self updatePauseButton];
+       [pauseButton setEnabled:NO];
+       [processPopup setEnabled:NO];
+       [typePopup setEnabled:NO];
+       [sizePopup setEnabled:NO];
+       [searchTextField setEnabled:NO];
+       [searchRadioMatrix setEnabled:NO];
+       [searchButton setEnabled:NO];
+       [clearSearchButton setEnabled:NO];
+       [self setStatusText:@"SearchingÉ" duration:0];
+       [statusBar startAnimation:self];
+       [addressTable setEnabled:NO];
+       [changeButton setTitle:@"ChangeÉ"];
+       [changeButton setEnabled:NO];
+       
+       [[serverMenu itemAtIndex:0] setTitle:@"Disconnect"];
+}
+
+- (void)setStatusChanging
+{
+       lastStatus = status;
+       status = STATUS_CHANGING;
+       
+       [serverPopup setEnabled:NO];
+       [self updatePauseButton];
+       [pauseButton setEnabled:NO];
+       [processPopup setEnabled:NO];
+       [typePopup setEnabled:NO];
+       [sizePopup setEnabled:NO];
+       [searchTextField setEnabled:NO];
+       [searchRadioMatrix setEnabled:NO];
+       [searchButton setEnabled:NO];
+       [clearSearchButton setEnabled:NO];
+       [self setStatusText:@"ChangingÉ" duration:0];
+       [statusBar startAnimation:self];
+       [addressTable setEnabled:NO];
+       [changeButton setEnabled:NO];
+       
+       [[serverMenu itemAtIndex:0] setTitle:@"Disconnect"];
+}
+
+- (void)setStatusChangingLater
+{
+       lastStatus = status;
+       status = STATUS_CHANGING_LATER;
+       
+       [serverPopup setEnabled:NO];
+       [self updatePauseButton];
+       [pauseButton setEnabled:NO];
+       [processPopup setEnabled:NO];
+       [typePopup setEnabled:NO];
+       [sizePopup setEnabled:NO];
+       [searchTextField setEnabled:NO];
+       [searchRadioMatrix setEnabled:NO];
+       [searchButton setEnabled:NO];
+       [clearSearchButton setEnabled:NO];
+       [self setStatusText:@"Changing LaterÉ" duration:0];
+       [statusBar startAnimation:self];
+       [addressTable setEnabled:NO];
+       [changeButton setTitle:@"Cancel Change"];
+       [changeButton setEnabled:YES];
+       
+       [[serverMenu itemAtIndex:0] setTitle:@"Disconnect"];
+}
+
+- (void)setStatusChangingContinuously
+{
+       lastStatus = status;
+       status = STATUS_CHANGING_CONTINUOUSLY;
+       
+       [serverPopup setEnabled:NO];
+       [self updatePauseButton];
+       [pauseButton setEnabled:YES];
+       [processPopup setEnabled:NO];
+       [typePopup setEnabled:NO];
+       [sizePopup setEnabled:NO];
+       [searchTextField setEnabled:NO];
+       [searchRadioMatrix setEnabled:NO];
+       [searchButton setEnabled:NO];
+       [clearSearchButton setEnabled:NO];
+       [self setStatusText:@"Repeated Change" duration:0];
+       [statusBar startAnimation:self];
+       [addressTable setEnabled:NO];
+       [changeButton setTitle:@"Stop Change"];
+       [changeButton setEnabled:YES];
+       
+       [[serverMenu itemAtIndex:0] setTitle:@"Disconnect"];
+}
+
+- (void)setStatusUndoing
+{
+       lastStatus = status;
+       status = STATUS_UNDOING;
+       
+       [serverPopup setEnabled:NO];
+       [self updatePauseButton];
+       [pauseButton setEnabled:NO];
+       [processPopup setEnabled:NO];
+       [typePopup setEnabled:NO];
+       [sizePopup setEnabled:NO];
+       [searchTextField setEnabled:NO];
+       [searchRadioMatrix setEnabled:NO];
+       [searchButton setEnabled:NO];
+       [clearSearchButton setEnabled:NO];
+       [self setStatusText:@"UndoingÉ" duration:0];
+       [statusBar startAnimation:self];
+       [addressTable setEnabled:NO];
+       [changeButton setTitle:@"ChangeÉ"];
+       [changeButton setEnabled:NO];
+       
+       [[serverMenu itemAtIndex:0] setTitle:@"Disconnect"];
+}
+
+- (void)setStatusRedoing
+{
+       lastStatus = status;
+       status = STATUS_REDOING;
+       
+       [serverPopup setEnabled:NO];
+       [self updatePauseButton];
+       [pauseButton setEnabled:NO];
+       [processPopup setEnabled:NO];
+       [typePopup setEnabled:NO];
+       [sizePopup setEnabled:NO];
+       [searchTextField setEnabled:NO];
+       [searchRadioMatrix setEnabled:NO];
+       [searchButton setEnabled:NO];
+       [clearSearchButton setEnabled:NO];
+       [self setStatusText:@"RedoingÉ" duration:0];
+       [statusBar startAnimation:self];
+       [addressTable setEnabled:NO];
+       [changeButton setTitle:@"ChangeÉ"];
+       [changeButton setEnabled:NO];
+       
+       [[serverMenu itemAtIndex:0] setTitle:@"Disconnect"];
+}
+
+- (void)setStatusToLast
+{
+       switch ( lastStatus )
+       {
+               case STATUS_DISCONNECTED:
+                       [self setStatusDisconnected];
+                       break;
+                       
+               case STATUS_CONNECTED:
+                       [self setStatusConnected];
+                       break;
+                       
+               case STATUS_CHEATING:
+                       [self setStatusCheating];
+                       break;
+                       
+               case STATUS_SEARCHING:
+                       [self setStatusSearching];
+                       break;
+                       
+               case STATUS_CHANGING:
+                       [self setStatusChanging];
+                       break;
+                       
+               case STATUS_CHANGING_LATER:
+                       [self setStatusChangingLater];
+                       break;
+                       
+               case STATUS_CHANGING_CONTINUOUSLY:
+                       [self setStatusChangingContinuously];
+                       break;
+                       
+               case STATUS_UNDOING:
+                       [self setStatusUndoing];
+                       break;
+                       
+               case STATUS_REDOING:
+                       [self setStatusRedoing];
+                       break;
+       }
+}
+
+- (void)setStatusText:(NSString *)msg duration:(NSTimeInterval)seconds
+{
+       [self setStatusText:msg duration:seconds color:[NSColor blackColor]];
+}
+
+- (void)setStatusText:(NSString *)msg duration:(NSTimeInterval)seconds color:(NSColor *)color
+{
+       if ( seconds == 0 )
+       {
+               [statusText setTextColor:color];
+               [statusText setStringValue:msg];
+       }
+       else
+       {
+               if ( statusTextTimer )
+               {
+                       [statusTextTimer invalidate];
+                       [statusTextTimer release];
+               }
+               else
+               {
+                       [savedStatusText release];
+                       [savedStatusColor release];
+                       savedStatusText = [[statusText stringValue] retain];
+                       savedStatusColor = [[statusText textColor] retain];
+               }
+               
+               [statusText setTextColor:color];
+               [statusText setStringValue:msg];
+               statusTextTimer = [[NSTimer scheduledTimerWithTimeInterval:seconds target:self selector:@selector(statusTextTimer:) userInfo:nil repeats:NO] retain];
+               
+       }
+}
+
+- (void)statusTextTimer:(NSTimer *)timer
+{
+       [statusText setTextColor:savedStatusColor];
+       [statusText setStringValue:savedStatusText];
+       
+       [savedStatusColor release], savedStatusColor = nil;
+       [savedStatusText release], savedStatusText = nil;
+       [statusTextTimer invalidate];
+       [statusTextTimer release], statusTextTimer = nil;
+}
+
+
+- (void)connectToLocal
+{
+       NSString                        *localName = @"Local"; //[NSString stringWithFormat:@"%@ (local)", TCGlobalBroadcastName];
+       
+       // depending on how the listener is listening, we need to use different means to connect to local
+       if ( TCGlobalListening )
+       {
+               if ( TCGlobalAllowRemote )
+               {
+                       struct sockaddr_in      addr;
+
+                       addr.sin_family = AF_INET;
+                       addr.sin_port = htonl( TCGlobalListenPort );
+                       addr.sin_addr.s_addr = INADDR_ANY;
+
+                       [self connectToServer:[NSData dataWithBytes:&addr length:sizeof(addr)] name:localName];
+               }
+               else
+               {
+                       struct sockaddr_un      addr;
+
+                       addr.sun_family = AF_UNIX;
+                       strncpy( addr.sun_path, TCDefaultListenPath, 103 );
+
+                       [self connectToServer:[NSData dataWithBytes:&addr length:sizeof(addr)] name:localName];
+               }
+       }
+}
+
+- (void)connectToServer:(NSData *)addr name:(NSString *)name
+{
+       everConnected = YES;
+       
+       if ( connection )
+       {
+               [self disconnect];
+               
+               waitingToConnect = YES;
+               connectionAddress = [addr retain];
+               connectionName = [name retain];
+       }
+       else
+       {
+               connection = [[CheatClient clientWithDelegate:self server:addr name:name] retain];
+               connectionAddress = [addr retain];
+               connectionName = [name retain];
+       }
+
+       [self setStatusConnected];
+}
+
+- (void)disconnect
+{
+       if ( connection )
+       {
+               [connection release], connection = nil;
+               close( sockfd );
+
+               [self clearSearch];
+
+               [connectionAddress release], connectionAddress = nil;
+               [connectionName release], connectionName = nil;
+
+               [processMenu removeAllItems];
+
+               [serverPopup selectItemAtIndex:0];
+               [self setStatusDisconnected];
+       }
+}
+
+
+- (void)sendProcessListRequest
+{
+       PacketHeader    header;
+       int                             length = sizeof(header);
+
+       header.checksum = RandomChecksum();
+       header.function = 1;
+       header.size = 0;
+
+       if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) )
+       {
+               NSLog( @"sendProcessListRequest failed on socket %i", sockfd );
+       }
+}
+
+- (void)sendClearSearch
+{
+       PacketHeader    header;
+       int                             length = sizeof(header);
+       
+       header.checksum = RandomChecksum();
+       header.function = 3;
+       header.size = 0;
+       
+       if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) )
+       {
+               NSLog( @"sendClearSearch failed on socket %i", sockfd );
+       }
+}
+
+- (void)sendSearch:(char const *)data size:(int)size
+{
+       PacketHeader    header;
+       int                             length = sizeof(header) + size;
+       int                             lengthAfter = length;
+
+       char                    *buffer, *ptr;
+
+       header.checksum = RandomChecksum();
+       header.function = 5;
+       header.size = size;
+
+       if ( (buffer = (char *)malloc( length )) == NULL )
+       {
+               NSLog( @"sendSearch:size: failed" );
+       }
+
+       ptr = buffer;
+
+       COPY_TO_BUFFER( ptr, &header, sizeof(header) );
+       COPY_TO_BUFFER( ptr, data, size );
+
+       if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length )
+       {
+               NSLog( @"sendSearch:size: failed" );
+       }
+
+       free( buffer );
+}
+
+- (void)sendChange:(char const *)data size:(int)size
+{
+       PacketHeader    header;
+       int                             length = sizeof(header) + size;
+       int                             lengthAfter = length;
+       
+       char                    *buffer, *ptr;
+       
+       header.checksum = RandomChecksum();
+       header.function = 8;
+       header.size = size;
+       
+       if ( (buffer = (char *)malloc( length )) == NULL )
+       {
+               NSLog( @"sendChange:size: failed" );
+       }
+       
+       ptr = buffer;
+       
+       COPY_TO_BUFFER( ptr, &header, sizeof(header) );
+       COPY_TO_BUFFER( ptr, data, size );
+       
+       if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length )
+       {
+               NSLog( @"sendChange:size: failed" );
+       }
+       
+       free( buffer );
+}
+
+- (void)sendPauseTarget;
+{
+       PacketHeader    header;
+       int                             length = sizeof(header);
+
+       header.checksum = RandomChecksum();
+       header.function = 10;
+       header.size = 0;
+
+       if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) )
+       {
+               NSLog( @"sendPauseTarget failed" );
+       }
+}
+
+- (void)sendVariableValueRequest
+{
+
+}
+
+- (void)sendUndoRequest
+{
+       PacketHeader    header;
+       int                             length = sizeof(header);
+
+       header.checksum = RandomChecksum();
+       header.function = 14;
+       header.size = 0;
+
+       if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) )
+       {
+               NSLog( @"sendUndoRequest failed" );
+       }
+}
+
+- (void)sendRedoRequest
+{
+       PacketHeader    header;
+       int                             length = sizeof(header);
+
+       header.checksum = RandomChecksum();
+       header.function = 16;
+       header.size = 0;
+
+       if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) )
+       {
+               NSLog( @"sendRedoRequest failed" );
+       }
+}
+
+- (void)sendSetTargetPID:(int)pid
+{
+       PacketHeader    header;
+       int                             length = sizeof(header) + sizeof(u_int32_t);
+       int                             lengthAfter = length;
+
+       u_int32_t               tarPID = (u_int32_t)pid;
+
+       char                    *buffer, *ptr;
+
+       header.checksum = RandomChecksum();
+       header.function = 18;
+       header.size = sizeof(u_int32_t);
+
+       if ( (buffer = (char *)malloc( length )) == NULL )
+       {
+               NSLog( @"sendSetTargetPID: failed" );
+       }
+
+       ptr = buffer;
+
+       COPY_TO_BUFFER( ptr, &header, sizeof(header) );
+       COPY_TO_BUFFER( ptr, &tarPID, sizeof(tarPID) );
+
+       if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length )
+       {
+               NSLog( @"sendSetTargetPID: failed" );
+       }
+
+       free( buffer );
+}
+
+
+- (void)receivedProcessList:(NSData *)data
+{
+       NSMenuItem              *item;
+       u_int32_t               processCount = 0;
+
+       char                    *ptr = (char *)[data bytes];
+       int                             i, max;
+
+       COPY_FROM_BUFFER( &processCount, ptr, sizeof(processCount) );
+
+       max = (int)processCount;
+
+       for ( i = 0; i < max; i++ )
+       {
+               u_int32_t       pid;
+               NSString        *name;
+
+               COPY_FROM_BUFFER( &pid, ptr, sizeof(pid) );
+               name = [NSString stringWithCString:ptr], ptr += [name length] + 1;
+
+               item = [[NSMenuItem alloc] initWithTitle:name action:@selector(processMenuItem:) keyEquivalent:@""];
+               [item setTag:(int)pid];
+
+               [processMenu addItem:[item autorelease]];
+       }
+}
+
+- (void)receivedSearchFinished
+{
+       if ( searchResultsAmount == 1 )
+       {
+               TCPlaySound( @"Submarine" );
+       }
+       else if ( searchResultsAmount == 0 )
+       {
+               TCPlaySound( @"Basso" );
+       }
+       
+       [self setStatusToLast];
+       [self setStatusText:@"Search Finished" duration:1.5];
+       [cheatWindow makeFirstResponder:searchTextField];
+}
+
+- (void)receivedVariableList:(NSData *)data
+{
+       char                    *ptr = (char *)[data bytes];
+
+       [self destroyResults];
+
+       COPY_FROM_BUFFER( &searchResultsAmount, ptr, sizeof(searchResultsAmount) );
+
+       if ( searchResultsAmount > 0 )
+       {
+               int                             memSize = TCAddressSize*searchResultsAmount;
+               
+               if ( (searchResults = (TCaddress *)malloc( memSize )) == NULL )
+               {
+                       NSLog( @"receivedVariableList failed: malloc failed" );
+                       searchResultsAmount = 0;
+                       return;
+               }
+
+               COPY_FROM_BUFFER( searchResults, ptr, memSize );
+       }
+
+       [addressTable reloadData];
+}
+
+- (void)receivedChangeFinished
+{
+       TCPlaySound( @"Tink" );
+       
+       [self setStatusToLast];
+       [self setStatusText:@"Change Finished" duration:1.5];
+}
+
+- (void)receivedError:(NSData *)data
+{
+       u_int32_t               fatal;
+       NSString                *msg;
+
+       char                    *ptr = (char *)[data bytes];
+
+       COPY_FROM_BUFFER( &fatal, ptr, sizeof(fatal) );
+
+       msg = [NSString stringWithCString:ptr];
+       
+       // alert the user.
+       [self handleErrorMessage:msg fatal:fatal];
+}
+
+- (void)receivedUndoFinished
+{
+       [self setStatusToLast];
+}
+
+- (void)receivedRedoFinished
+{
+       [self setStatusToLast];
+}
+
+- (void)receivedUndoRedoStatus:(NSData *)data
+{
+       char                    *ptr = (char *)[data bytes];
+       
+       COPY_FROM_BUFFER( &undoCount, ptr, sizeof(undoCount) );
+       COPY_FROM_BUFFER( &redoCount, ptr, sizeof(redoCount) );
+       
+       NSLog( @"UNDO: %i, REDO: %i", undoCount, redoCount );
+}
+
+- (void)receivedAppLaunched:(NSData *)data
+{
+       NSMenuItem              *item;
+
+       char                    *ptr = (char *)[data bytes];
+
+       u_int32_t               pid;
+       NSString                *name;
+
+       COPY_FROM_BUFFER( &pid, ptr, sizeof(pid) );
+       name = [NSString stringWithCString:ptr], ptr += [name length] + 1;
+
+       item = [[NSMenuItem alloc] initWithTitle:name action:@selector(processMenuItem:) keyEquivalent:@""];
+       [item setTag:(int)pid];
+
+       [processMenu addItem:[item autorelease]];
+}
+
+- (void)receivedAppQuit:(NSData *)data
+{
+       u_int32_t               pid;
+       
+       char                    *ptr = (char *)[data bytes];
+
+       COPY_FROM_BUFFER( &pid, ptr, sizeof(pid) );
+
+       [processMenu removeItemWithTag:pid];
+}
+
+- (void)receivedTargetQuit
+{
+       [self clearSearch];
+       [self sendClearSearch];
+       
+       // tell the server that the first app is now the target.
+       targetPID = [[processMenu itemAtIndex:0] tag];
+       [self sendSetTargetPID:targetPID];
+       
+       // alert the user.
+       [self handleErrorMessage:@"The application that was being cheated has quit." fatal:NO];
+       
+       [self setStatusConnected];
+}
+
+- (void)receivedPauseFinished:(NSData *)data
+{
+       char                    *ptr = (char *)[data bytes];
+
+       COPY_FROM_BUFFER( &targetPaused, ptr, sizeof(targetPaused) );
+
+       if ( targetPaused )
+       {
+               [self setStatusText:@"Target Paused" duration:1.5];
+       }
+       else
+       {
+               [self setStatusText:@"Target Resumed" duration:1.5];
+       }
+       
+       [self updatePauseButton];
+}
+
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   Searching & Changing
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+- (void)search
+{
+       TCtype                  type = [[typePopup selectedItem] tag];
+       TCsize                  size = [[sizePopup selectedItem] tag];
+       
+       char                    *data, *ptr;
+       int                             dataSize = sizeof(type) + sizeof(size);
+       
+       data = (char *)malloc( dataSize );
+       ptr = data;
+       
+       // copy the size and type of the variable.
+       COPY_TO_BUFFER( ptr, &type, sizeof(type) );
+       COPY_TO_BUFFER( ptr, &size, sizeof(size) );
+       
+       // switch to cheating mode if this is the first search.
+       if ( status == STATUS_CONNECTED )
+       {
+               [self setStatusCheating];
+       }
+       
+       // copy the value to search for.
+       switch ( type )
+       {
+               case TYPE_STRING:
+               {
+                       switch ( size )
+                       {
+                               case SIZE_8_BIT:
+                               {
+                                       NSString                        *string = [searchTextField stringValue];
+                                       int                                     stringLength = [string length] + 1;
+                                       
+                                       data = (char *)realloc( data, dataSize + stringLength );
+                                       ptr = data + dataSize;
+                                       dataSize += stringLength;
+                                       
+                                       COPY_TO_BUFFER( ptr, [string cString], stringLength );
+                               }
+                                       break;
+                       }
+               }
+                       break;
+                       
+               case TYPE_INTEGER:
+               {
+                       switch ( size )
+                       {
+                               case SIZE_8_BIT:
+                               {
+                                       int8_t                  value = [searchTextField intValue];
+                                       
+                                       data = (char *)realloc( data, dataSize + sizeof(value) );
+                                       ptr = data + dataSize;
+                                       dataSize += sizeof(value);
+                                       
+                                       COPY_TO_BUFFER( ptr, &value, sizeof(value) );
+                               }
+                                       break;
+                                       
+                               case SIZE_16_BIT:
+                               {
+                                       int16_t                 value = [searchTextField intValue];
+                                       
+                                       data = (char *)realloc( data, dataSize + sizeof(value) );
+                                       ptr = data + dataSize;
+                                       dataSize += sizeof(value);
+                                       
+                                       COPY_TO_BUFFER( ptr, &value, sizeof(value) );
+                               }
+                                       break;
+                                       
+                               case SIZE_32_BIT:
+                               {
+                                       int32_t                 value = [searchTextField intValue];
+                                       
+                                       data = (char *)realloc( data, dataSize + sizeof(value) );
+                                       ptr = data + dataSize;
+                                       dataSize += sizeof(value);
+                                       
+                                       COPY_TO_BUFFER( ptr, &value, sizeof(value) );
+                               }
+                                       break;
+                       }
+               }
+                       break;
+                       
+               case TYPE_DECIMAL:
+               {
+                       switch ( size )
+                       {
+                               case SIZE_32_BIT:
+                               {
+                                       float                   value = [searchTextField floatValue];
+                                       
+                                       data = (char *)realloc( data, dataSize + sizeof(value) );
+                                       ptr = data + dataSize;
+                                       dataSize += sizeof(value);
+                                       
+                                       COPY_TO_BUFFER( ptr, &value, sizeof(value) );
+                               }
+                                       break;
+                                       
+                               case SIZE_64_BIT:
+                               {
+                                       double                  value = [searchTextField doubleValue];
+                                       
+                                       data = (char *)realloc( data, dataSize + sizeof(value) );
+                                       ptr = data + dataSize;
+                                       dataSize += sizeof(value);
+                                       
+                                       COPY_TO_BUFFER( ptr, &value, sizeof(value) );
+                               }
+                                       break;
+                       }
+               }
+                       break;
+                       
+               case TYPE_UNKNOWN:
+               {
+                       u_int32_t               value = 0;//[searchTextField intValue];
+                       
+                       data = (char *)realloc( data, dataSize + sizeof(value) );
+                       ptr = data + dataSize;
+                       dataSize += sizeof(value);
+                       
+                       COPY_TO_BUFFER( ptr, &value, sizeof(value) );
+               }
+                       break;
+       }
+       
+       [self sendSearch:data size:dataSize];
+       free( data );
+       
+       [self setStatusSearching];
+}
+
+- (void)change
+{
+       TCtype                  type = [[typePopup selectedItem] tag];
+       TCsize                  size = [[sizePopup selectedItem] tag];
+       
+       NSArray                 *selectedAddresses = [[addressTable selectedRowEnumerator] allObjects];
+       int                             i, addressCount = [selectedAddresses count];
+       
+       char                    *data, *ptr;
+       int                             dataSize = sizeof(type) + sizeof(size) + sizeof(addressCount) + TCAddressSize*addressCount;
+       
+       data = (char *)malloc( dataSize );
+       ptr = data;
+       
+       // copy the size and type of the variable.
+       COPY_TO_BUFFER( ptr, &type, sizeof(type) );
+       COPY_TO_BUFFER( ptr, &size, sizeof(size) );
+
+       // copy the amount and the list of addresses to change.
+       COPY_TO_BUFFER( ptr, &addressCount, sizeof(addressCount) );
+       for ( i = 0; i < addressCount; i++ )
+       {
+               COPY_TO_BUFFER( ptr, &((TCaddress *)searchResults)[ [[selectedAddresses objectAtIndex:i] intValue] ], sizeof(TCaddress) );
+       }
+       
+       // copy the new value.
+       switch ( type )
+       {
+               case TYPE_STRING:
+               {
+                       switch ( size )
+                       {
+                               case SIZE_8_BIT:
+                               {
+                                       NSString                        *string = [changeTextField stringValue];
+                                       int                                     stringLength = [string length] + 1;
+                                       
+                                       data = (char *)realloc( data, dataSize + stringLength );
+                                       ptr = data + dataSize;
+                                       dataSize += stringLength;
+                                       
+                                       COPY_TO_BUFFER( ptr, [string cString], stringLength );
+                               }
+                                       break;
+                       }
+               }
+                       break;
+                       
+               case TYPE_INTEGER:
+               {
+                       switch ( size )
+                       {
+                               case SIZE_8_BIT:
+                               {
+                                       int8_t                  value = [changeTextField intValue];
+                                       
+                                       data = (char *)realloc( data, dataSize + sizeof(value) );
+                                       ptr = data + dataSize;
+                                       dataSize += sizeof(value);
+                                       
+                                       COPY_TO_BUFFER( ptr, &value, sizeof(value) );
+                               }
+                                       break;
+                                       
+                               case SIZE_16_BIT:
+                               {
+                                       int16_t                 value = [changeTextField intValue];
+                                       
+                                       data = (char *)realloc( data, dataSize + sizeof(value) );
+                                       ptr = data + dataSize;
+                                       dataSize += sizeof(value);
+                                       
+                                       COPY_TO_BUFFER( ptr, &value, sizeof(value) );
+                               }
+                                       break;
+                                       
+                               case SIZE_32_BIT:
+                               {
+                                       int32_t                 value = [changeTextField intValue];
+                                       
+                                       data = (char *)realloc( data, dataSize + sizeof(value) );
+                                       ptr = data + dataSize;
+                                       dataSize += sizeof(value);
+                                       
+                                       COPY_TO_BUFFER( ptr, &value, sizeof(value) );
+                               }
+                                       break;
+                       }
+               }
+                       break;
+                       
+               case TYPE_DECIMAL:
+               {
+                       switch ( size )
+                       {
+                               case SIZE_32_BIT:
+                               {
+                                       float                   value = [changeTextField floatValue];
+                                       
+                                       data = (char *)realloc( data, dataSize + sizeof(value) );
+                                       ptr = data + dataSize;
+                                       dataSize += sizeof(value);
+                                       
+                                       COPY_TO_BUFFER( ptr, &value, sizeof(value) );
+                               }
+                                       break;
+                                       
+                               case SIZE_64_BIT:
+                               {
+                                       double                  value = [changeTextField doubleValue];
+                                       
+                                       data = (char *)realloc( data, dataSize + sizeof(value) );
+                                       ptr = data + dataSize;
+                                       dataSize += sizeof(value);
+                                       
+                                       COPY_TO_BUFFER( ptr, &value, sizeof(value) );
+                               }
+                                       break;
+                       }
+               }
+                       break;
+                       
+               case TYPE_UNKNOWN:
+               {
+                       u_int32_t               value = 0;//[searchTextField intValue];
+                       
+                       data = (char *)realloc( data, dataSize + sizeof(value) );
+                       ptr = data + dataSize;
+                       dataSize += sizeof(value);
+                       
+                       COPY_TO_BUFFER( ptr, &value, sizeof(value) );
+               }
+                       break;
+       }
+       
+       [self sendChange:data size:dataSize];
+       free( data );
+       
+       [self setStatusChanging];
+}
+
+
+- (void)changeSheet:(NSWindow *)sheet returned:(int)returned context:(void *)context
+{
+       if ( returned == 1 )
+       {
+               if ( [recurringChangeButton state] == NSOnState )
+               {
+                       float                   seconds = [changeSecondsCombo floatValue];
+                       
+                       [self setStatusChangingContinuously];
+                       
+                       [self change];
+                       
+                       changeTimer = [[NSTimer scheduledTimerWithTimeInterval:seconds target:self selector:@selector(changeTimer:) userInfo:nil repeats:YES] retain];
+               }
+               else
+               {
+                       [self change];
+               }
+       }
+}
+
+
+- (void)changeTimer:(NSTimer *)timer
+{
+       [self change];
+}
+
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   Cheat Window Interface
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+- (IBAction)typePopup:(id)sender
+{
+       switch ( [typePopup indexOfSelectedItem] )
+       {
+               case TYPE_STRING:
+                       [sizePopup setMenu:stringSizeMenu];
+                       break;
+
+               case TYPE_INTEGER:
+               case TYPE_UNKNOWN:
+                       [sizePopup setMenu:integerSizeMenu];
+                       break;
+
+               case TYPE_DECIMAL:
+                       [sizePopup setMenu:decimalSizeMenu];
+                       break;
+       }
+       
+       [self updateSearchBoxes];
+       [self updateSearchButton];
+}
+
+
+- (IBAction)searchButton:(id)sender
+{
+       [self search];
+}
+
+- (IBAction)clearSearchButton:(id)sender
+{
+       [self clearSearch];
+       
+       [self setStatusConnected];
+       [self setStatusText:@"Search Cleared" duration:1.5];
+
+       [self sendClearSearch];
+}
+
+
+- (IBAction)changeButton:(id)sender
+{
+       [changeTimer invalidate];
+       [changeTimer release], changeTimer = nil;
+       
+       if ( status == STATUS_CHANGING_CONTINUOUSLY )
+       {
+               [self setStatusCheating];
+       }
+       else if ( status = STATUS_CHEATING )
+       {
+               [NSApp beginSheet:changeSheet modalForWindow:cheatWindow modalDelegate:self didEndSelector:@selector(changeSheet:returned:context:) contextInfo:NULL];
+               //[NSApp runModalForWindow:changeSheet];
+               //[NSApp endSheet:changeSheet];
+               //[changeSheet orderOut:self];
+       }
+}
+
+
+- (IBAction)serverMenuItem:(id)sender
+{
+       NSData                          *data = [[[serverList objectAtIndex:[sender tag]] addresses] objectAtIndex:0];
+/*     struct sockaddr_in      addr;
+
+       [data getBytes:&addr];*/
+
+       [self connectToServer:data name:[serverPopup titleOfSelectedItem]];
+}
+
+- (IBAction)serverMenuDisconnect:(id)sender
+{
+       [self disconnect];
+}
+
+- (IBAction)serverMenuLocal:(id)sender
+{
+       [self connectToLocal];
+}
+
+- (IBAction)processMenuItem:(id)sender
+{
+       targetPID = [sender tag];
+
+       [self sendSetTargetPID:targetPID];
+
+       [self setStatusText:[NSString stringWithFormat:@"PID: %i", targetPID] duration:0];
+}
+
+
+- (IBAction)pauseButton:(id)sender
+{
+       [self sendPauseTarget];
+}
+
+
+- (void)undoMenu:(id)sender
+{
+       if ( undoCount == 1 )
+       {
+               [self clearSearchButton:self];
+       }
+       else
+       {
+               [self sendUndoRequest];
+
+               [self setStatusUndoing];
+       }
+}
+
+- (void)redoMenu:(id)sender
+{
+       [self sendRedoRequest];
+
+       [self setStatusRedoing];
+}
+
+- (BOOL)respondsToSelector:(SEL)aSelector
+{
+       if ( aSelector == @selector(undoMenu:) )
+       {
+               if ( status == STATUS_CHEATING && undoCount > 0 )
+               {
+                       return YES;
+               }
+               else
+               {
+                       return NO;
+               }
+       }
+       
+       if ( aSelector == @selector(redoMenu:) )
+       {
+               if ( status == STATUS_CHEATING && redoCount > 0 )
+               {
+                       return YES;
+               }
+               else
+               {
+                       return NO;
+               }
+       }
+       
+       return [super respondsToSelector:aSelector];
+}
+
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   Change Sheet Interface
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+- (IBAction)cancelButton:(id)sender
+{
+       [changeSheet orderOut:sender];
+       [NSApp endSheet:changeSheet returnCode:0];
+       //[NSApp stopModal];
+}
+
+- (IBAction)okButton:(id)sender
+{
+       [changeSheet orderOut:sender];
+       [NSApp endSheet:changeSheet returnCode:1];
+       //[NSApp stopModal];
+}
+
+
+- (IBAction)recurringChangeButton:(id)sender
+{
+       if ( [recurringChangeButton state] == NSOnState )
+       {
+               [changeSecondsCombo setEnabled:YES];
+       }
+       else
+       {
+               [changeSecondsCombo setEnabled:NO];
+       }
+}
+
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   Cleaning Up
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+- (void)clearSearch
+{
+       undoCount = 0;
+       redoCount = 0;
+       
+       targetPaused = NO;
+       
+       [changeTimer invalidate];
+       [changeTimer release], changeTimer = nil;
+       
+       [self destroyResults];
+       [addressTable reloadData];
+}
+
+- (void)destroyResults
+{
+       if ( searchResultsAmount > 0 )
+       {
+               free( searchResults );
+               
+               searchResultsAmount = 0;
+       }
+}
+
+
+- (void)dealloc
+{
+       [[NSNotificationCenter defaultCenter] removeObserver:self];
+       
+       [self disconnect];
+
+       [browser release];
+
+       [serverList release];
+       [addressList release];
+       
+       // clean up status timer stuff
+       [savedStatusColor release];
+       [savedStatusText release];
+       [statusTextTimer invalidate];
+       [statusTextTimer release];
+       
+       [changeTimer invalidate];
+       [changeTimer release];
+       
+       [self destroyResults];
+
+       [super dealloc];
+}
+
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   TCListener Notifications
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+- (void)listenerStarted:(NSNotification *)note
+{
+       if ( !everConnected )
+       {
+               [self connectToLocal];
+       }
+}
+
+- (void)listenerStopped:(NSNotification *)note
+{
+       
+}
+
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   TCWindowsOnTopChanged Notification
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+- (void)windowsOnTopChanged:(NSNotification *)note
+{
+       if ( TCGlobalWindowsOnTop )
+       {
+               [cheatWindow setLevel:NSPopUpMenuWindowLevel];
+       }
+       else
+       {
+               [cheatWindow setLevel:NSNormalWindowLevel];
+       }
+}
+
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   TCWindowsOnTopChanged Notification
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+- (void)handleErrorMessage:(NSString *)msg fatal:(BOOL)fatal
+{
+       // close the change sheet if it's open.
+       if ( [cheatWindow attachedSheet] )
+       {
+               [changeSheet orderOut:self];
+               [NSApp endSheet:changeSheet returnCode:0];
+       }
+       
+       // show message.
+       NSBeginAlertSheet( fatal? @"Fatal Error":@"Error", @"OK", nil, nil, cheatWindow, nil, nil, nil, 0, msg );
+}
+
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   ClientDelegate
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+- (void)clientConnectedWithSocket:(int)sock name:(NSString *)name
+{
+       // the client is reporting that a connection has been made.
+       sockfd = sock;
+
+       [self sendProcessListRequest];
+       
+       [serverPopup selectItemWithTitle:name];
+       
+       [self setStatusConnected];
+}
+
+- (void)clientDisconnected
+{
+       // if there is a pending connection, connect now.
+       if ( waitingToConnect )
+       {
+               waitingToConnect = NO;
+               connection = [[CheatClient clientWithDelegate:self server:connectionAddress name:connectionName] retain];
+       }
+       // if our connection variable is still valid, we were disconnected unexpectedly.
+       else if ( connection )
+       {
+               [self disconnect];
+               NSBeginAlertSheet( @"Network Failure", @"OK", nil, nil, cheatWindow, nil, nil, nil, 0, @"The server has disconnected you." );
+       }
+}
+
+- (void)clientError:(NSString *)error message:(NSString *)message
+{
+       NSBeginAlertSheet( error, @"OK", nil, nil, cheatWindow, nil, nil, nil, 0, message );
+}
+
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   NSToolbar Delegate
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+/*
+*** A toolbar is no longer used, but the code still remains for possible future use. ***
+- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag
+{
+       NSToolbarItem           *item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier];
+
+       if ( [itemIdentifier isEqualToString:@"Disconnect"] )
+       {
+               disconnectButton = item;
+               
+        [item setLabel:@"Disconnect"];
+        [item setPaletteLabel:[item label]];
+        [item setImage:[NSImage imageNamed:@"disconnect"]];
+        [item setTarget:self];
+               [item setToolTip:@"Click here to pause or unpause the program being cheated."];
+    }
+       else if ( [itemIdentifier isEqualToString:@"ServerPopup"] )
+       {
+               NSRect          fRect = [typePopup frame];
+               NSSize          fSize = NSMakeSize( FLT_MAX, fRect.size.height );
+               NSMenuItem      *menu = [[NSMenuItem alloc] initWithTitle:@"Server" action:@selector(serverPopup:) keyEquivalent:@""];
+
+               [menu setSubmenu:[serverPopup menu]];
+               
+        [item setLabel:@"Server"];
+        [item setPaletteLabel:[item label]];
+        [item setView:serverPopup];
+               [item setMinSize:fRect.size];
+               [item setMaxSize:fSize];
+               [item setMenuFormRepresentation:[menu autorelease]];
+               [item autorelease];
+    }
+
+    return item;
+}
+
+- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar
+{
+       return [NSArray arrayWithObjects:NSToolbarSeparatorItemIdentifier,
+               NSToolbarSpaceItemIdentifier,
+               NSToolbarFlexibleSpaceItemIdentifier,
+               NSToolbarCustomizeToolbarItemIdentifier,
+               @"Disconnect", @"ServerPopup", nil];
+}
+
+- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar
+{
+       return [NSArray arrayWithObjects:@"Disconnect", @"ServerPopup", nil];
+}*/
+
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   NSTableView Data Source/Delegate
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+- (void)controlTextDidChange:(NSNotification *)aNotification
+{
+       [self updateSearchButton];
+}
+
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   NSTableView Data Source/Delegate
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+- (int)numberOfRowsInTableView:(NSTableView *)table
+{
+       return (searchResultsAmount <= TCMaxSearchResults) ? searchResultsAmount : TCMaxSearchResults;
+}
+
+- (id)tableView:(NSTableView *)table objectValueForTableColumn:(NSTableColumn *)column row:(int)row
+{
+       return [NSString stringWithFormat:@"%0.8X", ((TCaddress *)searchResults)[row]];
+}
+
+- (void)tableView:(NSTableView *) setObjectValue:(id)object forTableColumn:(NSTableColumn *)column row:(int)row
+{
+       return;
+}
+
+- (void)tableViewSelectionDidChange:(NSNotification *)note
+{
+       if ( [addressTable selectedRow] != -1 )
+       {
+               addressSelected = YES;
+       }
+       else
+       {
+               addressSelected = NO;
+       }
+       
+       [self updateChangeButton];
+}
+
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   NSNetServiceBrowser Delegate
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+- (void)netServiceBrowser:(NSNetServiceBrowser *)browser didFindService:(NSNetService *)service moreComing:(BOOL)more
+{
+       // a server has broadcast; not much use until it's resolved.
+       [service setDelegate:self];
+       [service resolve];
+}
+
+- (void)netServiceBrowser:(NSNetServiceBrowser *)browser didRemoveService:(NSNetService *)service moreComing:(BOOL)more
+{
+       [serverMenu removeAllItemsWithTitle:[service name]];
+       
+       // if this is the last broadcast server, take away the divider.
+       if ( [serverMenu numberOfItems] == 3 )
+       {
+               [serverMenu removeItemAtIndex:2];
+       }
+}
+
+- (void)netServiceDidResolveAddress:(NSNetService *)service
+{
+       NSString                *name = [service name];
+       int                             tag = [serverList count];
+       NSMenuItem              *item;
+       
+       if ( [serverMenu itemWithTitle:name] == nil )
+       {
+               item = [[NSMenuItem alloc] initWithTitle:[service name] action:@selector(serverMenuItem:) keyEquivalent:@""];
+               
+               [item setTag:tag];
+               
+               // if this is the first server, add a divider.
+               if ( [serverMenu numberOfItems] <= 2 )
+               {
+                       [serverMenu addItem:[NSMenuItem separatorItem]];
+               }
+               
+               [serverList addObject:service];
+               [serverMenu addItem:[item autorelease]];
+               
+               // select the item if we are already connected to the server.
+               // this could happen if the server rebroadcast as a different name.
+               if ( connection && [[[service addresses] objectAtIndex:0] isEqualToData:connectionAddress] )
+               {
+                       [serverPopup selectItemWithTitle:[service name]];
+               }
+       }
+}
+
+
+@end
+
+
+// Internal Functions
+void TCPlaySound( NSString *name )
+{
+       if ( TCGlobalPlaySounds )
+       {
+               [[NSSound soundNamed:name] play];
+       }
+}
diff --git a/NetTrafficController.h b/NetTrafficController.h
new file mode 100644 (file)
index 0000000..092ffaf
--- /dev/null
@@ -0,0 +1,45 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      NetTrafficController.h
+// Created:   Wed Sep 24 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import <Cocoa/Cocoa.h>
+
+#import "NetTrafficControlling.h"
+
+#include "cheat_globals.h"
+
+
+@interface NetTrafficController : NSWindowController
+{
+       id                              delegate;
+       
+       IBOutlet id             netTrafficWindow;
+       IBOutlet id             broadcastNameText;
+       IBOutlet id             listenPortText;
+       IBOutlet id             serverListTable;
+       IBOutlet id             connectionCountText;
+       IBOutlet id             killConnectionButton;
+}
+
+- (id)initWithDelegate:(id)del;
+
+- (void)initialInterfaceSetup;
+- (void)interfaceUpdate;
+
+- (void)allowRemoteChanged:(BOOL)allow;
+- (void)listenPortChanged:(int)port;
+- (void)broadcastNameChanged:(NSString *)name;
+
+- (void)connectionListChanged;
+
+- (void)setConnectionCount:(int)count;
+
+- (IBAction)killConnectionButton:(id)sender;
+
+@end
\ No newline at end of file
diff --git a/NetTrafficController.m b/NetTrafficController.m
new file mode 100644 (file)
index 0000000..5649110
--- /dev/null
@@ -0,0 +1,167 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      NetTrafficController.m
+// Created:   Wed Sep 24 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import "NetTrafficController.h"
+
+#import "CheatServer.h"
+
+#import "ServerHolder.h"
+
+
+@implementation NetTrafficController
+
+
+- (id)initWithDelegate:(id)del
+{
+       if ( self = [super initWithWindowNibName:@"NetTraffic"] )
+       {
+               [self setWindowFrameAutosaveName:@"TCNetTrafficWindowPosition"];
+               
+               delegate = del;
+       }
+
+       return self;
+}
+
+- (void)windowDidLoad
+{
+       [self initialInterfaceSetup];
+       [self interfaceUpdate];
+}
+
+
+- (void)initialInterfaceSetup
+{
+       //[netTrafficWindow setResizeIncrements:NSMakeSize( 1.0, 17.0 )];
+       
+       [self allowRemoteChanged:TCGlobalAllowRemote];
+       [self listenPortChanged:TCGlobalListenPort];
+       [self setConnectionCount:[delegate netTrafficConnectionCount]];
+       [serverListTable reloadData];
+}
+
+- (void)interfaceUpdate
+{
+       NSArray                         *array = [[serverListTable selectedRowEnumerator] allObjects];
+       
+       if ( [array count] == 0 )
+       {
+               [killConnectionButton setEnabled:NO];
+       }
+       else
+       {
+               [killConnectionButton setEnabled:YES];
+               
+               if ( [array count] > 1 )
+               {
+                       [killConnectionButton setTitle:@"Kill Connections"];
+               }
+               else
+               {
+                       [killConnectionButton setTitle:@"Kill Connection"];
+               }
+       }
+}
+
+
+- (void)allowRemoteChanged:(BOOL)allow
+{
+       if ( allow )
+       {
+               [self broadcastNameChanged:TCGlobalBroadcastName];
+               [self listenPortChanged:TCGlobalListenPort];
+       }
+       else
+       {
+               [broadcastNameText setStringValue:@"Not accepting new connections from remote clients."];
+               [listenPortText setStringValue:@"Listening for local connections only."];
+       }
+}
+
+- (void)listenPortChanged:(int)port
+{
+       if ( TCGlobalAllowRemote )
+       {
+               [listenPortText setStringValue:[NSString stringWithFormat:@"Listening on port %i.", port]];
+       }
+}
+
+- (void)broadcastNameChanged:(NSString *)name
+{
+       if ( TCGlobalAllowRemote )
+       {
+               [broadcastNameText setStringValue:[NSString stringWithFormat:@"Broadcasting service as \"%@.\"", name]];
+       }
+}
+
+
+- (void)connectionListChanged
+{
+       [self setConnectionCount:[delegate netTrafficConnectionCount]];
+       [serverListTable reloadData];
+}
+
+
+- (void)setConnectionCount:(int)count
+{
+       [connectionCountText setStringValue:[NSString stringWithFormat:@"Now serving %i clients.", count]];
+}
+
+
+- (IBAction)killConnectionButton:(id)sender
+{
+       NSArray                         *array = [[serverListTable selectedRowEnumerator] allObjects];
+       int                                     i;
+       
+       for ( i = [array count] - 1; i >= 0; i-- )
+       {
+               [delegate netTrafficKillConnection:[(NSNumber *)[array objectAtIndex:i] intValue]];
+       }
+}
+
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%   NSTableView Data Source/Delegate
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+- (int)numberOfRowsInTableView:(NSTableView *)table
+{
+       return [delegate netTrafficConnectionCount];
+}
+
+- (id)tableView:(NSTableView *)table objectValueForTableColumn:(NSTableColumn *)column row:(int)row
+{
+       ServerHolder            *holder = [[delegate netTrafficConnectionList] objectAtIndex:row];
+       
+       if ( [[column identifier] isEqualToString:@"IP Address"] )
+       {
+               return [holder address];
+       }
+       else if ( [[column identifier] isEqualToString:@"Current Action"] )
+       {
+               return [holder action];
+       }
+
+       return @"Unknown";
+}
+
+- (void)tableView:(NSTableView *) setObjectValue:(id)object forTableColumn:(NSTableColumn *)column row:(int)row
+{
+       return;
+}
+
+- (void)tableViewSelectionDidChange:(NSNotification *)note
+{
+       [self interfaceUpdate];
+}
+
+
+@end
\ No newline at end of file
diff --git a/NetTrafficControlling.h b/NetTrafficControlling.h
new file mode 100644 (file)
index 0000000..2cd3d9c
--- /dev/null
@@ -0,0 +1,21 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      NetTrafficControlling.h
+// Created:   Wed Sep 24 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import <Cocoa/Cocoa.h>
+
+
+@protocol NetTrafficControlling
+
+- (int)netTrafficConnectionCount;
+- (NSArray *)netTrafficConnectionList;
+
+- (void)netTrafficKillConnection:(int)index;
+
+@end
\ No newline at end of file
diff --git a/PreferenceController.h b/PreferenceController.h
new file mode 100644 (file)
index 0000000..681c5c8
--- /dev/null
@@ -0,0 +1,41 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      PreferenceController.h
+// Created:   Wed Sep 24 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import <Cocoa/Cocoa.h>
+
+#import "PreferenceControlling.h"
+
+#include "cheat_globals.h"
+
+
+@interface PreferenceController : NSWindowController
+{
+       id                              delegate;
+       
+       IBOutlet id             prefsWindow;
+       IBOutlet id             playSoundsButton;
+       IBOutlet id             windowsOnTopButton;
+       IBOutlet id             allowRemoteButton;
+       IBOutlet id             broadcastNameTextField;
+       IBOutlet id             listenPortTextField;
+}
+
+- (id)initWithDelegate:(id)del;
+
+- (void)initialInterfaceSetup;
+- (void)interfaceUpdate;
+
+- (IBAction)playSoundsButton:(id)sender;
+- (IBAction)windowsOnTopButton:(id)sender;
+- (IBAction)allowRemoteButton:(id)sender;
+- (IBAction)listenPortTextField:(id)sender;
+- (IBAction)broadcastNameTextField:(id)sender;
+
+@end
\ No newline at end of file
diff --git a/PreferenceController.m b/PreferenceController.m
new file mode 100644 (file)
index 0000000..fe178fb
--- /dev/null
@@ -0,0 +1,127 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      PreferenceController.m
+// Created:   Wed Sep 24 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import "PreferenceController.h"
+
+
+@implementation PreferenceController
+
+
+- (id)initWithDelegate:(id)del
+{
+       if ( self = [super initWithWindowNibName:@"Preferences"] )
+       {
+               [self setWindowFrameAutosaveName:@"TCPreferencWindowPosition"];
+               
+               delegate = del;
+       }
+
+       return self;
+}
+
+- (void)windowDidLoad
+{
+       [self initialInterfaceSetup];
+       [self interfaceUpdate];
+}
+
+
+- (void)initialInterfaceSetup
+{
+       [playSoundsButton setState:(TCGlobalPlaySounds)? NSOnState:NSOffState];
+       [windowsOnTopButton setState:(TCGlobalWindowsOnTop)? NSOnState:NSOffState];
+       [allowRemoteButton setState:(TCGlobalAllowRemote)? NSOnState:NSOffState];
+       [listenPortTextField setIntValue:TCGlobalListenPort];
+       [broadcastNameTextField setStringValue:[[NSUserDefaults standardUserDefaults] objectForKey:TCBroadcastNamePref]];
+}
+
+- (void)interfaceUpdate
+{
+       if ( TCGlobalAllowRemote )
+       {
+               [listenPortTextField setEnabled:YES];
+               [broadcastNameTextField setEnabled:YES];
+       }
+       else
+       {
+               [listenPortTextField setEnabled:NO];
+               [broadcastNameTextField setEnabled:NO];
+       }
+}
+
+
+- (IBAction)playSoundsButton:(id)sender
+{
+       if ( [playSoundsButton state] == NSOnState )
+       {
+               TCGlobalPlaySounds = YES;
+               [[NSUserDefaults standardUserDefaults] setBool:YES forKey:TCPlaySoundsPref];
+       }
+       else
+       {
+               TCGlobalPlaySounds = NO;
+               [[NSUserDefaults standardUserDefaults] setBool:NO forKey:TCPlaySoundsPref];
+       }
+}
+
+- (IBAction)windowsOnTopButton:(id)sender
+{
+       if ( [windowsOnTopButton state] == NSOnState )
+       {
+               TCGlobalWindowsOnTop = YES;
+               [[NSUserDefaults standardUserDefaults] setBool:YES forKey:TCWindowsOnTopPref];
+       }
+       else
+       {
+               TCGlobalWindowsOnTop = NO;
+               [[NSUserDefaults standardUserDefaults] setBool:NO forKey:TCWindowsOnTopPref];
+       }
+
+       [[NSNotificationCenter defaultCenter] postNotificationName:@"TCWindowsOnTopChanged" object:nil];
+}
+
+- (IBAction)allowRemoteButton:(id)sender
+{
+       if ( [allowRemoteButton state] == NSOnState )
+       {
+               TCGlobalAllowRemote = YES;
+               [[NSUserDefaults standardUserDefaults] setBool:YES forKey:TCAllowRemotePref];
+       }
+       else
+       {
+               TCGlobalAllowRemote = NO;
+               [[NSUserDefaults standardUserDefaults] setBool:NO forKey:TCAllowRemotePref];
+       }
+
+       [self interfaceUpdate];
+
+       [delegate preferenceAllowRemoteChanged:TCGlobalAllowRemote];
+}
+
+- (IBAction)listenPortTextField:(id)sender
+{
+       TCGlobalListenPort = [listenPortTextField intValue];
+
+       [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:TCGlobalListenPort] forKey:TCListenPortPref];
+
+       [delegate preferenceListenPortChanged:TCGlobalListenPort];
+}
+
+- (IBAction)broadcastNameTextField:(id)sender
+{
+       NSString                        *name = [broadcastNameTextField stringValue];
+       
+       [[NSUserDefaults standardUserDefaults] setObject:name forKey:TCBroadcastNamePref];
+
+       [delegate preferenceBroadcastNameChanged:name];
+}
+
+
+@end
\ No newline at end of file
diff --git a/PreferenceControlling.h b/PreferenceControlling.h
new file mode 100644 (file)
index 0000000..1565412
--- /dev/null
@@ -0,0 +1,20 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      PreferenceControlling.h
+// Created:   Wed Sep 24 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import <Cocoa/Cocoa.h>
+
+
+@protocol PreferenceControlling
+
+- (void)preferenceAllowRemoteChanged:(BOOL)allow;
+- (void)preferenceListenPortChanged:(int)port;
+- (void)preferenceBroadcastNameChanged:(NSString *)name;
+
+@end
\ No newline at end of file
diff --git a/Read Me.pdf b/Read Me.pdf
new file mode 100644 (file)
index 0000000..69f0f9d
Binary files /dev/null and b/Read Me.pdf differ
diff --git a/Read Me.rtf b/Read Me.rtf
new file mode 100644 (file)
index 0000000..b92a086
--- /dev/null
@@ -0,0 +1,30 @@
+{\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fnil\fcharset77 MarkerFelt-Wide;\f1\fnil\fcharset77 AmericanTypewriter;\f2\fnil\fcharset77 Zapfino;
+\f3\fswiss\fcharset77 Helvetica;\f4\fswiss\fcharset77 Helvetica-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww12440\viewh17240\viewkind1\viewscale100
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc
+
+\f0\fs72 \cf0 The Cheat
+\f1  
+\fs28 v1.0b3
+\f2\fs72 \
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc
+
+\f0\fs28 \cf0 by Chaz McGarvey\
+
+\f3\fs36 November 26, 2003
+\f0\fs28 \
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640
+\cf0 \
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qj
+
+\f4\b \cf0 What is The Cheat?
+\f3\b0 \
+\
+The Cheat is a software program which allows you to attach to other programs running on a computer and change some of its values.....\
+\
+
+\fs36 BLAH BLAH BLAH\
+
+\fs28 (to be finished later!)}
\ No newline at end of file
diff --git a/Read Me.txt b/Read Me.txt
deleted file mode 100644 (file)
index 98588ea..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-
-The Cheat 1.0b
-by Chaz McGarvey
-
-
-WHAT THE CHEAT IS:
-
-The Cheat is a small, easy-to-use utility that grants you the ability to ultimately "cheat" another application at runtime.  The most obvious use is for games.  With the help of The Cheat, you can instantly replenish your life, raise your score, give yourself more time, or almost anything else you might need done in a game you are stuck at.
-
-
-HOW DO YOU USE THE CHEAT:
-
-First, select the program you want to cheat from the list of processes.  Then choose the type and size of the variable you want to change using the popup menus.  Since The Cheat will have no idea which variable you want to change or where it is, you're going to have to search for it before you can change it.  Enter the current value of the variable you want to change in the search text field and push "Search."  The Cheat will report what it found.  If there are multiple hits, you should search for the variable again after it has changed in the game.  Ideally, you would keep searching until there was only one possible location for the variable to be, and then you would change it.  If you have searched a million times but there are still more than one results, you can still change the variables one by one or all at the same time if you want (just select the variables from the list on the right).  Be careful when doing this if there are very many hits because of the obvious possibility that you might change something that ought not have been changed.  If you are searching for a variable and it keeps reporting 0 hits, you may have chosen the wrong type of variable of the game might have incorporated some type of anti-cheat features.  Usually even those can be cheated with enough patience, however.
-
-
-HOW DOES THE CHEAT WORK:
-
-The basic ideas of which The Cheat is based on are not new.  There have been many utilities for all of the major platforms that work the same as The Cheat.  But it has been hard to find a good "cheater" for Mac OS X until I wrote The Cheat, though I know of at least one other similar utility which only supports integers.  This little gem uses "undocumented" BSD-level functions to bypass the protected memory system Mac OS X uses in order to mess around with the memory of other programs.  A game's variables (amount of life, time left, strength, special abilities, etc.) are somewhere in its own section of memory.  It's simply a matter of finding where a certain variable is stored and changing it to whatever we want.
-
-
-ANYTHING ELSE YOU SHOULD KNOW:
-
-The Cheat is currently beta software.  It is _not_ optimized (it's not running as fast as it could), and I can't even guarantee that it works.  I would like The Cheat to be the best it can be, though, so if you have any suggestions or bug fixes or success stories or funny jokes, please send them to me.  That's the only way The Cheat will be able to improve.  As for the future, The Cheat will be optimized by 1.0, and I hope to have as many bugs squashed as possible.  I think I'll even include a decent Read Me and hopefully I'll have an icon.
-
-
-VERSION HISTORY:
-
-1.0b1 (9/4/03) - First public version.
-
-
-CONTACT ME:
-
-Chaz McGarvey
-
-Email: chaz@brokenzipper.com
-iChat: ChazMP
-
-http://www.brokenzipper.com/
-
-
-IF YOU ARE FEELING CHARITABLE:
-
-I will probably take donations if you feel I'm worth it.  Rest assured, it will be put to good use on a programming book or something.  School is keeping me busy, but a little light reading on the side never killed anyone.
-
-Also, I need an icon if any of you happen to be Photoshop gurus.  I have no idea what it should look like, so good luck if you want to help me in that area.  I would also be ecstatic if any of you could translate The Cheat (and I suppose the final Read Me) into additional languages, as I quite am languistically challenged.
-
-
-LEGAL STUFF:
-
-Basically, don't sue me if you think my software broke something of yours because I need to finish school and that would just not be cool.  Oh yeah, and The Cheat is copyrighted material, which means I own it and you can't steal it.  But it's free, so I don't know why anybody would do that.  Anyway, have a nice day.
diff --git a/SearchResults.h b/SearchResults.h
new file mode 100644 (file)
index 0000000..364470a
--- /dev/null
@@ -0,0 +1,33 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      SearchResults.h
+// Created:   Sat Oct 04 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import <Cocoa/Cocoa.h>
+
+#include "cheat_types.h"
+
+
+@interface SearchResults : NSObject
+{
+       TCtype                  myType;
+       TCsize                  mySize;
+       
+       TCaddress               *myData;
+       int                             myAmount;
+}
+
++ (id)resultsWithType:(TCtype)type size:(TCsize)size data:(TCaddress const *)data amount:(int)amount;
+- (id)initWithType:(TCtype)type size:(TCsize)size data:(TCaddress const *)data amount:(int)amount;
+
+- (TCtype)type;
+- (TCsize)size;
+- (TCaddress *)data;
+- (int)amount;
+
+@end
\ No newline at end of file
diff --git a/SearchResults.m b/SearchResults.m
new file mode 100644 (file)
index 0000000..8e15180
--- /dev/null
@@ -0,0 +1,68 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      SearchResults.m
+// Created:   Sat Oct 04 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import "SearchResults.h"
+
+
+@implementation SearchResults
+
+
++ (id)resultsWithType:(TCtype)type size:(TCsize)size data:(TCaddress const *)data amount:(int)amount
+{
+       return [[[SearchResults alloc] initWithType:type size:size data:data amount:amount] autorelease];
+}
+
+- (id)initWithType:(TCtype)type size:(TCsize)size data:(TCaddress const *)data amount:(int)amount
+{
+       if ( self = [self init] )
+       {
+               myType = type;
+               mySize = size;
+               myData = (TCaddress *)data;
+               myAmount = amount;
+       }
+
+       return self;
+}
+
+
+- (TCtype)type
+{
+       return myType;
+}
+
+- (TCsize)size
+{
+       return mySize;
+}
+
+- (TCaddress *)data
+{
+       return myData;
+}
+
+- (int)amount
+{
+       return myAmount;
+}
+
+
+- (void)dealloc
+{
+       if ( myData )
+       {
+               free( myData );
+       }
+       
+       [super dealloc];
+}
+
+
+@end
\ No newline at end of file
diff --git a/ServerDelegate.h b/ServerDelegate.h
new file mode 100644 (file)
index 0000000..f9ee572
--- /dev/null
@@ -0,0 +1,29 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      ServerDelegate.h
+// Created:   Thu Sep 25 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import <Cocoa/Cocoa.h>
+
+#include <sys/types.h>
+
+@class CheatServer;
+
+
+@protocol ServerDelegate
+
+- (void)server:(CheatServer *)server connectedWithSocket:(int)sock;
+- (void)serverDisconnected:(CheatServer *)server;
+
+- (void)server:(CheatServer *)server changedAddress:(NSString *)address;
+- (void)server:(CheatServer *)server changedAction:(NSString *)action;
+
+- (NSArray *)serverProcessList;
+- (pid_t)serverFirstProcess;
+
+@end
\ No newline at end of file
diff --git a/ServerDelegate.m b/ServerDelegate.m
new file mode 100644 (file)
index 0000000..94e7b2d
--- /dev/null
@@ -0,0 +1,18 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      ServerDelegate.m
+// Created:   Thu Sep 25 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import "ServerDelegate.h"
+
+
+@implementation ServerDelegate
+
+
+
+@end
\ No newline at end of file
diff --git a/ServerHolder.h b/ServerHolder.h
new file mode 100644 (file)
index 0000000..e0342ad
--- /dev/null
@@ -0,0 +1,42 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      ServerHolder.h
+// Created:   Sun Sep 28 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import <Cocoa/Cocoa.h>
+
+
+@class CheatServer;
+
+
+@interface ServerHolder : NSObject
+{
+       NSConnection            *connection;
+       CheatServer                     *server;
+       int                                     sockfd;
+
+       NSString                        *address;
+       NSString                        *action;
+}
+
++ (ServerHolder *)holderWithConnection:(NSConnection *)conn socket:(int)sock;
+- (id)initWithConnection:(NSConnection *)conn socket:(int)sock;
+
+- (NSConnection *)connection;
+- (void)setConnection:(NSConnection *)conn;
+- (CheatServer *)server;
+- (void)setServer:(CheatServer *)serv;
+- (int)sockfd;
+- (void)setSockFD:(int)sock;
+
+- (NSString *)address;
+- (void)setAddress:(NSString *)addr;
+- (NSString *)action;
+- (void)setAction:(NSString *)act;
+
+@end
\ No newline at end of file
diff --git a/ServerHolder.m b/ServerHolder.m
new file mode 100644 (file)
index 0000000..d6f7290
--- /dev/null
@@ -0,0 +1,102 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      ServerHolder.m
+// Created:   Sun Sep 28 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import "ServerHolder.h"
+
+#import "CheatServer.h"
+
+
+@implementation ServerHolder
+
+
++ (ServerHolder *)holderWithConnection:(NSConnection *)conn socket:(int)sock
+{
+       return [[[ServerHolder alloc] initWithConnection:conn socket:sock] autorelease];
+}
+
+- (id)initWithConnection:(NSConnection *)conn socket:(int)sock
+{
+       if ( self = [super init] )
+       {
+               connection = [conn retain];
+               sockfd = sock;
+       }
+
+       return self;
+}
+
+
+- (NSConnection *)connection
+{
+       return connection;
+}
+
+- (void)setConnection:(NSConnection *)conn
+{
+       [connection release];
+       connection = [conn retain];
+}
+
+- (CheatServer *)server
+{
+       return server;
+}
+
+- (void)setServer:(CheatServer *)serv
+{
+       [server release];
+       server = [serv retain];
+}
+
+
+- (int)sockfd
+{
+       return sockfd;
+}
+
+- (void)setSockFD:(int)sock
+{
+       sockfd = sock;
+}
+
+
+- (NSString *)address
+{
+       return address;
+}
+
+- (void)setAddress:(NSString *)addr
+{
+       [address release];
+       address = [addr retain];
+}
+
+- (NSString *)action
+{
+       return action;
+}
+
+- (void)setAction:(NSString *)act
+{
+       [action release];
+       action = [act retain];
+}
+
+
+- (void)dealloc
+{
+       [connection release];
+       [server release];
+
+       [super dealloc];
+}
+
+
+@end
\ No newline at end of file
index 60ee588f06c45d7123a5c32dbf24afb1c3f8abe2..3aaa283a86acf256fa25e175a6fe90aa4ceda178 100644 (file)
 // !$*UTF8*$!
 {
-       29B97313FDCFA39411CA2CEA = {
-               activeBuildStyle = 4A9504CCFFE6A4B311CA0CBA;
-               activeExecutable = 6E31BC0D04EB164300A80003;
-               activeTarget = 29B97326FDCFA39411CA2CEA;
+       089C1660FE840EACC02AAC07 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
+                       sepNavSelRange = "{139, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       2A37F4A9FDCFA73011CA2CEA = {
+               activeBuildStyle = 4A9504D1FFE6A4CB11CA0CBA;
+               activeExecutable = 6EF8EC0A055A1730008BBE46;
+               activeTarget = 6EF8EBD9055A1730008BBE46;
                addToTargets = (
-                       29B97326FDCFA39411CA2CEA,
+                       2A37F4C6FDCFA73011CA2CEA,
+                       6EF8EBD9055A1730008BBE46,
+               );
+               breakpoints = (
+                       6EF0870C0575382B00B81D60,
                );
-               codeSenseManager = 6EAFEFEF05D0CAEA00C357EF;
+               codeSenseManager = 6EAD5EEB054C3932005761EE;
                executables = (
-                       6E31BC0D04EB164300A80003,
+                       6E4E0952050BAF7F00A80003,
+                       6EF8EC0A055A1730008BBE46,
                );
                perUserDictionary = {
-                       PBXPerProjectTemplateStateSaveDate = 97569444;
-                       PBXPrepackagedSmartGroups_v2 = (
-                               {
-                                       PBXTransientLocationAtTop = bottom;
-                                       absolutePathToBundle = "";
-                                       activationKey = OldTargetSmartGroup;
-                                       clz = PBXTargetSmartGroup;
-                                       description = "Displays all targets of the project.";
-                                       globalID = 1C37FABC04509CD000000102;
-                                       name = Targets;
-                                       preferences = {
-                                               image = Targets;
-                                       };
-                               },
-                               {
-                                       PBXTransientLocationAtTop = bottom;
-                                       absolutePathToBundle = "";
-                                       clz = PBXTargetSmartGroup2;
-                                       description = "Displays all targets of the project as well as nested build phases.";
-                                       globalID = 1C37FBAC04509CD000000102;
-                                       name = Targets;
-                                       preferences = {
-                                               image = Targets;
-                                       };
-                               },
-                               {
-                                       PBXTransientLocationAtTop = bottom;
-                                       absolutePathToBundle = "";
-                                       clz = PBXExecutablesSmartGroup;
-                                       description = "Displays all executables of the project.";
-                                       globalID = 1C37FAAC04509CD000000102;
-                                       name = Executables;
-                                       preferences = {
-                                               image = Executable;
-                                       };
-                               },
-                               {
-                                       " PBXTransientLocationAtTop " = bottom;
-                                       absolutePathToBundle = "";
-                                       clz = PBXErrorsWarningsSmartGroup;
-                                       description = "Displays files with errors or warnings.";
-                                       globalID = 1C08E77C0454961000C914BD;
-                                       name = "Errors and Warnings";
-                                       preferences = {
-                                               fnmatch = "";
-                                               image = WarningsErrors;
-                                               recursive = 1;
-                                               regex = "";
-                                               root = "<PROJECT>";
-                                       };
-                               },
-                               {
-                                       PBXTransientLocationAtTop = bottom;
-                                       absolutePathToBundle = "";
-                                       clz = PBXFilenameSmartGroup;
-                                       description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter.";
-                                       globalID = 1CC0EA4004350EF90044410B;
-                                       name = "Implementation Files";
-                                       preferences = {
-                                               canSave = 1;
-                                               fnmatch = "";
-                                               image = SmartFolder;
-                                               isLeaf = 0;
-                                               recursive = 1;
-                                               regex = "?*\\.[mcMC]";
-                                               root = "<PROJECT>";
-                                       };
-                               },
-                               {
-                                       PBXTransientLocationAtTop = bottom;
-                                       absolutePathToBundle = "";
-                                       clz = PBXFilenameSmartGroup;
-                                       description = "This group displays Interface Builder NIB Files.";
-                                       globalID = 1CC0EA4004350EF90041110B;
-                                       name = "NIB Files";
-                                       preferences = {
-                                               canSave = 1;
-                                               fnmatch = "*.nib";
-                                               image = SmartFolder;
-                                               isLeaf = 0;
-                                               recursive = 1;
-                                               regex = "";
-                                               root = "<PROJECT>";
-                                       };
-                               },
-                               {
-                                       PBXTransientLocationAtTop = no;
-                                       absolutePathToBundle = "";
-                                       clz = PBXFindSmartGroup;
-                                       description = "Displays Find Results.";
-                                       globalID = 1C37FABC05509CD000000102;
-                                       name = "Find Results";
-                                       preferences = {
-                                               image = spyglass;
-                                       };
-                               },
-                               {
-                                       PBXTransientLocationAtTop = no;
-                                       absolutePathToBundle = "";
-                                       clz = PBXBookmarksSmartGroup;
-                                       description = "Displays Project Bookmarks.";
-                                       globalID = 1C37FABC05539CD112110102;
-                                       name = Bookmarks;
-                                       preferences = {
-                                               image = Bookmarks;
-                                       };
-                               },
-                               {
-                                       PBXTransientLocationAtTop = bottom;
-                                       absolutePathToBundle = "";
-                                       clz = XCSCMSmartGroup;
-                                       description = "Displays files with interesting SCM status.";
-                                       globalID = E2644B35053B69B200211256;
-                                       name = SCM;
-                                       preferences = {
-                                               image = PBXRepository;
-                                               isLeaf = 0;
-                                       };
-                               },
-                               {
-                                       PBXTransientLocationAtTop = bottom;
-                                       absolutePathToBundle = "";
-                                       clz = PBXSymbolsSmartGroup;
-                                       description = "Displays all symbols for the project.";
-                                       globalID = 1C37FABC04509CD000100104;
-                                       name = "Project Symbols";
-                                       preferences = {
-                                               image = ProjectSymbols;
-                                               isLeaf = 1;
-                                       };
-                               },
-                               {
-                                       PBXTransientLocationAtTop = bottom;
-                                       absolutePathToBundle = "";
-                                       clz = PBXFilenameSmartGroup;
-                                       description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter.";
-                                       globalID = PBXTemplateMarker;
-                                       name = "Simple Filter SmartGroup";
-                                       preferences = {
-                                               canSave = 1;
-                                               fnmatch = "*.nib";
-                                               image = SmartFolder;
-                                               isLeaf = 0;
-                                               recursive = 1;
-                                               regex = "";
-                                               root = "<PROJECT>";
-                                       };
-                               },
-                               {
-                                       PBXTransientLocationAtTop = bottom;
-                                       absolutePathToBundle = "";
-                                       clz = PBXFilenameSmartGroup;
-                                       description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter.";
-                                       globalID = PBXTemplateMarker;
-                                       name = "Simple Regular Expression SmartGroup";
-                                       preferences = {
-                                               canSave = 1;
-                                               fnmatch = "";
-                                               image = SmartFolder;
-                                               isLeaf = 0;
-                                               recursive = 1;
-                                               regex = "?*\\.[mcMC]";
-                                               root = "<PROJECT>";
-                                       };
-                               },
-                       );
-                       "PBXTemplateGeometry-F5F68CF101725D4C0D7A8F4C" = {
-                               Frame = "{{0, 0}, {1280, 873}}";
-                               PBXProjectWorkspaceModule_GeometryKey_Rev15 = {
-                               };
-                               RubberWindowFrame = "0 87 1280 915 0 0 1280 1002 ";
+                       PBXConfiguration.PBXFileTableDataSource3.PBXBookmarksDataSource = {
+                               PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
+                               PBXFileTableDataSourceColumnSortingKey = PBXBookmarksDataSource_NameID;
+                               PBXFileTableDataSourceColumnWidthsKey = (
+                                       532.2085,
+                                       517.5991,
+                               );
+                               PBXFileTableDataSourceColumnsKey = (
+                                       PBXBookmarksDataSource_LocationID,
+                                       PBXBookmarksDataSource_NameID,
+                               );
+                       };
+                       PBXConfiguration.PBXFileTableDataSource3.PBXErrorsWarningsDataSource = {
+                               PBXFileTableDataSourceColumnSortingDirectionKey = -1;
+                               PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_LocationID;
+                               PBXFileTableDataSourceColumnWidthsKey = (
+                                       20,
+                                       669.8799,
+                                       356.2085,
+                               );
+                               PBXFileTableDataSourceColumnsKey = (
+                                       PBXErrorsWarningsDataSource_TypeID,
+                                       PBXErrorsWarningsDataSource_MessageID,
+                                       PBXErrorsWarningsDataSource_LocationID,
+                               );
+                       };
+                       PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = {
+                               PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
+                               PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID;
+                               PBXFileTableDataSourceColumnWidthsKey = (
+                                       22,
+                                       1000,
+                               );
+                               PBXFileTableDataSourceColumnsKey = (
+                                       PBXExecutablesDataSource_ActiveFlagID,
+                                       PBXExecutablesDataSource_NameID,
+                               );
+                       };
+                       PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
+                               PBXFileTableDataSourceColumnSortingDirectionKey = -1;
+                               PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
+                               PBXFileTableDataSourceColumnWidthsKey = (
+                                       20,
+                                       751,
+                                       20,
+                                       133,
+                                       43,
+                                       43,
+                                       20,
+                               );
+                               PBXFileTableDataSourceColumnsKey = (
+                                       PBXFileDataSource_FiletypeID,
+                                       PBXFileDataSource_Filename_ColumnID,
+                                       PBXFileDataSource_Built_ColumnID,
+                                       PBXFileDataSource_ObjectSize_ColumnID,
+                                       PBXFileDataSource_Errors_ColumnID,
+                                       PBXFileDataSource_Warnings_ColumnID,
+                                       PBXFileDataSource_Target_ColumnID,
+                               );
+                       };
+                       PBXConfiguration.PBXFileTableDataSource3.PBXFindDataSource = {
+                               PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
+                               PBXFileTableDataSourceColumnSortingKey = PBXFindDataSource_LocationID;
+                               PBXFileTableDataSourceColumnWidthsKey = (
+                                       523.2974,
+                                       526.2085,
+                               );
+                               PBXFileTableDataSourceColumnsKey = (
+                                       PBXFindDataSource_MessageID,
+                                       PBXFindDataSource_LocationID,
+                               );
+                       };
+                       PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
+                               PBXFileTableDataSourceColumnSortingDirectionKey = -1;
+                               PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
+                               PBXFileTableDataSourceColumnWidthsKey = (
+                                       20,
+                                       636,
+                                       134,
+                                       20,
+                                       134,
+                                       43,
+                                       43,
+                               );
+                               PBXFileTableDataSourceColumnsKey = (
+                                       PBXFileDataSource_FiletypeID,
+                                       PBXFileDataSource_Filename_ColumnID,
+                                       PBXTargetDataSource_PrimaryAttribute,
+                                       PBXFileDataSource_Built_ColumnID,
+                                       PBXFileDataSource_ObjectSize_ColumnID,
+                                       PBXFileDataSource_Errors_ColumnID,
+                                       PBXFileDataSource_Warnings_ColumnID,
+                               );
                        };
+                       PBXPerProjectTemplateStateSaveDate = 91586952;
                        PBXWorkspaceContents = (
                                {
-                                       PBXProjectWorkspaceModule_StateKey_Rev39 = {
-                                               PBXProjectWorkspaceModule_DEGV_Geometry = {
-                                                       _collapsingFrameDimension = 0;
-                                                       _indexOfCollapsedView = 0;
-                                                       _percentageOfCollapsedView = 0;
-                                                       isCollapsed = yes;
-                                                       sizes = (
-                                                               "{{0, 0}, {1280, 127}}",
-                                                               "{{0, 127}, {1280, 746}}",
-                                                       );
-                                               };
-                                               PBXProjectWorkspaceModule_DataSourceSelectionKey_Rev6 = {
-                                                       BoundsStr = "{{0, 0}, {1265, 110}}";
-                                                       Rows = (
-                                                               0,
-                                                       );
-                                                       VisibleRectStr = "{{0, 0}, {1265, 110}}";
-                                               };
+                                       PBXProjectWorkspaceModule_StateKey_Rev36 = {
+                                               PBXProjectWorkspaceModule_DebuggerWindowVisible = true;
                                                PBXProjectWorkspaceModule_EditorOpen = true;
                                                PBXProjectWorkspaceModule_EmbeddedNavigatorGroup = {
-                                                       PBXSplitModuleInNavigatorKey = {
-                                                               Split0 = {
-                                                                       bookmark = 6EAFF00605D0D29D00C357EF;
-                                                                       history = (
-                                                                               6EAFEFFD05D0CB9B00C357EF,
-                                                                       );
-                                                               };
-                                                               SplitCount = 1;
-                                                       };
-                                               };
-                                               PBXProjectWorkspaceModule_GeometryKey_Rev15 = {
-                                                       GroupTreeCollapsed = yes;
-                                                       PBXProjectWorkspaceModule_SGTM_Geometry = {
-                                                               _collapsingFrameDimension = 182;
-                                                               _indexOfCollapsedView = 0;
-                                                               _percentageOfCollapsedView = 0.1421875;
-                                                               sizes = (
-                                                                       "{{0, 0}, {1280, 873}}",
+                                                       Split0 = {
+                                                               bookmark = 6E330A0C0575C22E0093550E;
+                                                               history = (
+                                                                       6E84B8F20558B3480001B5EB,
+                                                                       6E84B8F30558B3480001B5EB,
+                                                                       6E84B8F40558B3480001B5EB,
+                                                                       6E84B8F80558B3480001B5EB,
+                                                                       6EF8EC23055A1C39008BBE46,
+                                                                       6EF8EC26055A1C39008BBE46,
+                                                                       6EF8EC27055A1C39008BBE46,
+                                                                       6EF8EC28055A1C39008BBE46,
+                                                                       6EF8EC29055A1C39008BBE46,
+                                                                       6EE0048A0560B42800F8A5B1,
+                                                                       6E5EC36705633214001E3A3E,
+                                                                       6E5EC36905633214001E3A3E,
+                                                                       6E5EC36D05633214001E3A3E,
+                                                                       6E5EC37005633214001E3A3E,
+                                                                       6E00EF290566EE06001AB46F,
+                                                                       6E6126C7056B3091006177EC,
+                                                                       6E6126C8056B3091006177EC,
+                                                                       6E6126C9056B3091006177EC,
+                                                                       6E6126CB056B3091006177EC,
+                                                                       6E6126CC056B3091006177EC,
+                                                                       6E6126CD056B3091006177EC,
+                                                                       6E6126CE056B3091006177EC,
+                                                                       6E6126CF056B3091006177EC,
+                                                                       6E6126D0056B3091006177EC,
+                                                                       6E6126D1056B3091006177EC,
+                                                                       6E6126D2056B3091006177EC,
+                                                                       6E6126D3056B3091006177EC,
+                                                                       6E6126D4056B3091006177EC,
+                                                                       6E6126D5056B3091006177EC,
+                                                                       6E6126D6056B3091006177EC,
+                                                                       6E6126D7056B3091006177EC,
+                                                                       6E6126D8056B3091006177EC,
+                                                                       6E6126DA056B3091006177EC,
+                                                                       6E6126DB056B3091006177EC,
+                                                                       6E6126DC056B3091006177EC,
+                                                                       6E6126DD056B3091006177EC,
+                                                                       6E6126DE056B3091006177EC,
+                                                                       6E6126DF056B3091006177EC,
+                                                                       6E6126E0056B3091006177EC,
+                                                                       6E6126E1056B3091006177EC,
+                                                                       6E6126E2056B3091006177EC,
+                                                                       6E6126E3056B3091006177EC,
+                                                                       6E6126E4056B3091006177EC,
+                                                                       6E51A9060573258100506538,
+                                                                       6E51A9070573258100506538,
+                                                                       6E51A9080573258100506538,
+                                                                       6E51A90C0573258100506538,
+                                                                       6E51A90D0573258100506538,
+                                                                       6E51A9A00573385700506538,
+                                                                       6E51A9A20573385700506538,
+                                                                       6E51A9A30573385700506538,
+                                                                       6E51A9A40573385700506538,
+                                                                       6E51A9A50573385700506538,
+                                                                       6E51A9A60573385700506538,
+                                                                       6E51A9A70573385700506538,
+                                                                       6E51A9A80573385700506538,
+                                                                       6E51A9AD0573385700506538,
+                                                                       6E51A9AE0573385700506538,
+                                                                       6EB8529F057476DD00E260EA,
+                                                                       6EB852A0057476DD00E260EA,
+                                                                       6EB852A1057476DD00E260EA,
+                                                                       6EB852A3057476DD00E260EA,
+                                                                       6EB852A4057476DD00E260EA,
+                                                                       6EB852A5057476DD00E260EA,
+                                                                       6EB852A6057476DD00E260EA,
+                                                                       6EB852A9057476DD00E260EA,
+                                                                       6E3309E80575C22E0093550E,
+                                                                       6E3309E90575C22E0093550E,
+                                                                       6E3309EA0575C22E0093550E,
+                                                                       6E3309EB0575C22E0093550E,
+                                                                       6E3309EC0575C22E0093550E,
+                                                                       6E3309ED0575C22E0093550E,
+                                                                       6E5EC36C05633214001E3A3E,
+                                                               );
+                                                               prevStack = (
+                                                                       6E84B8FE0558B3480001B5EB,
+                                                                       6E84B8FF0558B3480001B5EB,
+                                                                       6E84B9000558B3480001B5EB,
+                                                                       6E84B9010558B3480001B5EB,
+                                                                       6E84B9020558B3480001B5EB,
+                                                                       6E84B9030558B3480001B5EB,
+                                                                       6E84B9040558B3480001B5EB,
+                                                                       6E84B9050558B3480001B5EB,
+                                                                       6E84B9060558B3480001B5EB,
+                                                                       6E84B9070558B3480001B5EB,
+                                                                       6E84B9080558B3480001B5EB,
+                                                                       6E84B9090558B3480001B5EB,
+                                                                       6E84B90A0558B3480001B5EB,
+                                                                       6E84B90B0558B3480001B5EB,
+                                                                       6E84B90C0558B3480001B5EB,
+                                                                       6E84B90D0558B3480001B5EB,
+                                                                       6E84B90E0558B3480001B5EB,
+                                                                       6E84B90F0558B3480001B5EB,
+                                                                       6E84B9100558B3480001B5EB,
+                                                                       6E84B9110558B3480001B5EB,
+                                                                       6E84B9120558B3480001B5EB,
+                                                                       6E84B9130558B3480001B5EB,
+                                                                       6E84B9140558B3480001B5EB,
+                                                                       6E84B9160558B3480001B5EB,
+                                                                       6E84B9180558B3480001B5EB,
+                                                                       6E84B91A0558B3480001B5EB,
+                                                                       6E84B91C0558B3480001B5EB,
+                                                                       6E84B91D0558B3480001B5EB,
+                                                                       6E84B91E0558B3480001B5EB,
+                                                                       6E84B91F0558B3480001B5EB,
+                                                                       6E84B9210558B3480001B5EB,
+                                                                       6E84B9230558B3480001B5EB,
+                                                                       6E84B9240558B3480001B5EB,
+                                                                       6E81662F0559E79E00377CF7,
+                                                                       6E8166300559E79E00377CF7,
+                                                                       6E8166310559E79E00377CF7,
+                                                                       6E8166320559E79E00377CF7,
+                                                                       6E8166330559E79E00377CF7,
+                                                                       6E8166340559E79E00377CF7,
+                                                                       6E8166350559E79E00377CF7,
+                                                                       6E8166370559E79E00377CF7,
+                                                                       6E8166380559E79E00377CF7,
+                                                                       6E8166390559E79E00377CF7,
+                                                                       6E81663A0559E79E00377CF7,
+                                                                       6E81663C0559E79E00377CF7,
+                                                                       6E81663E0559E79E00377CF7,
+                                                                       6E81663F0559E79E00377CF7,
+                                                                       6E8166410559E79E00377CF7,
+                                                                       6E8166430559E79E00377CF7,
+                                                                       6E8166450559E79E00377CF7,
+                                                                       6E8166460559E79E00377CF7,
+                                                                       6E8166480559E79E00377CF7,
+                                                                       6E8166890559F3BD00377CF7,
+                                                                       6E81668B0559F3BD00377CF7,
+                                                                       6E81668C0559F3BD00377CF7,
+                                                                       6E81668E0559F3BD00377CF7,
+                                                                       6E8166900559F3BD00377CF7,
+                                                                       6E8166920559F3BD00377CF7,
+                                                                       6E8166940559F3BD00377CF7,
+                                                                       6E8166960559F3BD00377CF7,
+                                                                       6E8166980559F3BD00377CF7,
+                                                                       6E81669A0559F3BD00377CF7,
+                                                                       6E81669C0559F3BD00377CF7,
+                                                                       6E81669E0559F3BD00377CF7,
+                                                                       6E8166A00559F3BD00377CF7,
+                                                                       6E8166A20559F3BD00377CF7,
+                                                                       6E8166A30559F3BD00377CF7,
+                                                                       6E8166A50559F3BD00377CF7,
+                                                                       6EF8EB660559F823008BBE46,
+                                                                       6EF8EB680559F823008BBE46,
+                                                                       6EF8EB6A0559F823008BBE46,
+                                                                       6EF8EB6C0559F823008BBE46,
+                                                                       6EF8EB6E0559F823008BBE46,
+                                                                       6EF8EB700559F823008BBE46,
+                                                                       6EF8EC2D055A1C39008BBE46,
+                                                                       6EF8EC2F055A1C39008BBE46,
+                                                                       6EF8EC31055A1C39008BBE46,
+                                                                       6EF8EC33055A1C39008BBE46,
+                                                                       6EF8EC35055A1C39008BBE46,
+                                                                       6EF8EC37055A1C39008BBE46,
+                                                                       6EF8EC39055A1C39008BBE46,
+                                                                       6EF8EC3B055A1C39008BBE46,
+                                                                       6EF8EC3D055A1C39008BBE46,
+                                                                       6EF8EC3F055A1C39008BBE46,
+                                                                       6EF8EC40055A1C39008BBE46,
+                                                                       6EF8EC42055A1C39008BBE46,
+                                                                       6EF8EC44055A1C39008BBE46,
+                                                                       6EF8EC45055A1C39008BBE46,
+                                                                       6EF8EC47055A1C39008BBE46,
+                                                                       6EF8EC49055A1C39008BBE46,
+                                                                       6EF8EC4B055A1C39008BBE46,
+                                                                       6EF8EC4D055A1C39008BBE46,
+                                                                       6EF8EC4F055A1C39008BBE46,
+                                                                       6EF8EC51055A1C39008BBE46,
+                                                                       6EF8EC53055A1C39008BBE46,
+                                                                       6EF8EC55055A1C39008BBE46,
+                                                                       6EF8EC56055A1C39008BBE46,
+                                                                       6EF8EC58055A1C39008BBE46,
+                                                                       6EF8EC59055A1C39008BBE46,
+                                                                       6EF8EC5A055A1C39008BBE46,
+                                                                       6EF8EC5B055A1C39008BBE46,
+                                                                       6EF8EC5C055A1C39008BBE46,
+                                                                       6EF8EC5D055A1C39008BBE46,
+                                                                       6EF8EC5E055A1C39008BBE46,
+                                                                       6EF8EC60055A1C39008BBE46,
+                                                                       6EF8EC62055A1C39008BBE46,
+                                                                       6EF8EC64055A1C39008BBE46,
+                                                                       6EF8EC65055A1C39008BBE46,
+                                                                       6EF8EC67055A1C39008BBE46,
+                                                                       6EF8EC69055A1C39008BBE46,
+                                                                       6EF8EC6A055A1C39008BBE46,
+                                                                       6EF8EC6B055A1C39008BBE46,
+                                                                       6EF8EC6D055A1C39008BBE46,
+                                                                       6EF8EC6E055A1C39008BBE46,
+                                                                       6EF8EC6F055A1C39008BBE46,
+                                                                       6EF8EC70055A1C39008BBE46,
+                                                                       6EF8EC72055A1C39008BBE46,
+                                                                       6EF8EC73055A1C39008BBE46,
+                                                                       6EF8EC74055A1C39008BBE46,
+                                                                       6EF8EC75055A1C39008BBE46,
+                                                                       6EF8EC76055A1C39008BBE46,
+                                                                       6EF8EC77055A1C39008BBE46,
+                                                                       6EF8EC78055A1C39008BBE46,
+                                                                       6EE070E0055CA8E200598538,
+                                                                       6EE070E2055CA8E200598538,
+                                                                       6EE070E4055CA8E200598538,
+                                                                       6EE070E6055CA8E200598538,
+                                                                       6EE070E8055CA8E200598538,
+                                                                       6EE070EA055CA8E200598538,
+                                                                       6EE070EC055CA8E200598538,
+                                                                       6EE004950560B42800F8A5B1,
+                                                                       6EE004960560B42800F8A5B1,
+                                                                       6EE004970560B42800F8A5B1,
+                                                                       6EE004980560B42800F8A5B1,
+                                                                       6EE004990560B42800F8A5B1,
+                                                                       6EE0049A0560B42800F8A5B1,
+                                                                       6EE0049B0560B42800F8A5B1,
+                                                                       6EE0049C0560B42800F8A5B1,
+                                                                       6EE0049D0560B42800F8A5B1,
+                                                                       6EE0049E0560B42800F8A5B1,
+                                                                       6EE0049F0560B42800F8A5B1,
+                                                                       6EE004A00560B42800F8A5B1,
+                                                                       6EE004A10560B42800F8A5B1,
+                                                                       6EE004A20560B42800F8A5B1,
+                                                                       6EE004A30560B42800F8A5B1,
+                                                                       6EE004A40560B42800F8A5B1,
+                                                                       6EE004A50560B42800F8A5B1,
+                                                                       6EE004A60560B42800F8A5B1,
+                                                                       6EE004A70560B42800F8A5B1,
+                                                                       6EE004A80560B42800F8A5B1,
+                                                                       6EE004A90560B42800F8A5B1,
+                                                                       6EE004AA0560B42800F8A5B1,
+                                                                       6EE004AB0560B42800F8A5B1,
+                                                                       6EE004AC0560B42800F8A5B1,
+                                                                       6EE004AD0560B42800F8A5B1,
+                                                                       6EE004AE0560B42800F8A5B1,
+                                                                       6EE004AF0560B42800F8A5B1,
+                                                                       6EE004B00560B42800F8A5B1,
+                                                                       6EE004B10560B42800F8A5B1,
+                                                                       6EE004B20560B42800F8A5B1,
+                                                                       6EE004B30560B42800F8A5B1,
+                                                                       6EE004B40560B42800F8A5B1,
+                                                                       6EE004B50560B42800F8A5B1,
+                                                                       6EE004B60560B42800F8A5B1,
+                                                                       6EE004B70560B42800F8A5B1,
+                                                                       6EE004B80560B42800F8A5B1,
+                                                                       6EE004B90560B42800F8A5B1,
+                                                                       6EE004BA0560B42800F8A5B1,
+                                                                       6EE004BB0560B42800F8A5B1,
+                                                                       6EE004BC0560B42800F8A5B1,
+                                                                       6EE004BD0560B42800F8A5B1,
+                                                                       6EE004BE0560B42800F8A5B1,
+                                                                       6EE004BF0560B42800F8A5B1,
+                                                                       6EE004C00560B42800F8A5B1,
+                                                                       6EE004C10560B42800F8A5B1,
+                                                                       6EE004C20560B42800F8A5B1,
+                                                                       6EE004C30560B42800F8A5B1,
+                                                                       6EE004C40560B42800F8A5B1,
+                                                                       6EE004C50560B42800F8A5B1,
+                                                                       6EE004C60560B42800F8A5B1,
+                                                                       6EE004C70560B42800F8A5B1,
+                                                                       6EE004C80560B42800F8A5B1,
+                                                                       6EE004C90560B42800F8A5B1,
+                                                                       6EE004CA0560B42800F8A5B1,
+                                                                       6EE004CB0560B42800F8A5B1,
+                                                                       6EE004CC0560B42800F8A5B1,
+                                                                       6EE004CD0560B42800F8A5B1,
+                                                                       6EE004CE0560B42800F8A5B1,
+                                                                       6EE004CF0560B42800F8A5B1,
+                                                                       6EE004D00560B42800F8A5B1,
+                                                                       6EE004D10560B42800F8A5B1,
+                                                                       6EE004D20560B42800F8A5B1,
+                                                                       6EE004D30560B42800F8A5B1,
+                                                                       6EE004D40560B42800F8A5B1,
+                                                                       6EE004D50560B42800F8A5B1,
+                                                                       6EE004D60560B42800F8A5B1,
+                                                                       6EE004D70560B42800F8A5B1,
+                                                                       6EE004D80560B42800F8A5B1,
+                                                                       6EE004D90560B42800F8A5B1,
+                                                                       6EE004DA0560B42800F8A5B1,
+                                                                       6EE004DB0560B42800F8A5B1,
+                                                                       6E2E17AE056201170070BE48,
+                                                                       6E2E17AF056201170070BE48,
+                                                                       6E2E17B0056201170070BE48,
+                                                                       6E2E17B1056201170070BE48,
+                                                                       6E5EC37105633214001E3A3E,
+                                                                       6E5EC37205633214001E3A3E,
+                                                                       6E5EC37305633214001E3A3E,
+                                                                       6E5EC37405633214001E3A3E,
+                                                                       6E5EC37505633214001E3A3E,
+                                                                       6E5EC37605633214001E3A3E,
+                                                                       6E5EC37705633214001E3A3E,
+                                                                       6E5EC37805633214001E3A3E,
+                                                                       6E5EC37905633214001E3A3E,
+                                                                       6E5EC37A05633214001E3A3E,
+                                                                       6E5EC37B05633214001E3A3E,
+                                                                       6E5EC37C05633214001E3A3E,
+                                                                       6E5EC37D05633214001E3A3E,
+                                                                       6E5EC37E05633214001E3A3E,
+                                                                       6E5EC37F05633214001E3A3E,
+                                                                       6E5EC38005633214001E3A3E,
+                                                                       6E5EC38105633214001E3A3E,
+                                                                       6E5EC38205633214001E3A3E,
+                                                                       6E5EC38305633214001E3A3E,
+                                                                       6E5EC38405633214001E3A3E,
+                                                                       6E5EC38505633214001E3A3E,
+                                                                       6E5EC38605633214001E3A3E,
+                                                                       6E5EC38705633214001E3A3E,
+                                                                       6E5EC38805633214001E3A3E,
+                                                                       6E5EC38905633214001E3A3E,
+                                                                       6E5EC38A05633214001E3A3E,
+                                                                       6E5EC38B05633214001E3A3E,
+                                                                       6E5EC38C05633214001E3A3E,
+                                                                       6E5EC38D05633214001E3A3E,
+                                                                       6E5EC38E05633214001E3A3E,
+                                                                       6E5EC38F05633214001E3A3E,
+                                                                       6E5EC39005633214001E3A3E,
+                                                                       6E5EC39105633214001E3A3E,
+                                                                       6E5EC39205633214001E3A3E,
+                                                                       6E5EC39305633214001E3A3E,
+                                                                       6E5EC39405633214001E3A3E,
+                                                                       6E5EC39505633214001E3A3E,
+                                                                       6E5EC39605633214001E3A3E,
+                                                                       6E5EC39705633214001E3A3E,
+                                                                       6E5EC39805633214001E3A3E,
+                                                                       6E5EC39905633214001E3A3E,
+                                                                       6E5EC39A05633214001E3A3E,
+                                                                       6E5EC39B05633214001E3A3E,
+                                                                       6E5EC39C05633214001E3A3E,
+                                                                       6E5EC39D05633214001E3A3E,
+                                                                       6E5EC39E05633214001E3A3E,
+                                                                       6E5EC39F05633214001E3A3E,
+                                                                       6E5EC3A005633214001E3A3E,
+                                                                       6E5EC3A105633214001E3A3E,
+                                                                       6E5EC3A205633214001E3A3E,
+                                                                       6E5EC3A305633214001E3A3E,
+                                                                       6E5EC3A405633214001E3A3E,
+                                                                       6E5EC3A505633214001E3A3E,
+                                                                       6E5EC3A605633214001E3A3E,
+                                                                       6E5EC3A705633214001E3A3E,
+                                                                       6E5EC3A805633214001E3A3E,
+                                                                       6E5EC3A905633214001E3A3E,
+                                                                       6E5EC3AA05633214001E3A3E,
+                                                                       6E5EC3AB05633214001E3A3E,
+                                                                       6E5EC3AC05633214001E3A3E,
+                                                                       6E5EC3AD05633214001E3A3E,
+                                                                       6E5EC3AE05633214001E3A3E,
+                                                                       6E5EC3AF05633214001E3A3E,
+                                                                       6E5EC3B005633214001E3A3E,
+                                                                       6E5EC3B105633214001E3A3E,
+                                                                       6E5EC3B205633214001E3A3E,
+                                                                       6E5EC3B305633214001E3A3E,
+                                                                       6E5EC3B405633214001E3A3E,
+                                                                       6E5EC3B505633214001E3A3E,
+                                                                       6E5EC3B605633214001E3A3E,
+                                                                       6E5EC3B705633214001E3A3E,
+                                                                       6E5EC3B805633214001E3A3E,
+                                                                       6E5EC3B905633214001E3A3E,
+                                                                       6E5EC3BA05633214001E3A3E,
+                                                                       6E5EC3BB05633214001E3A3E,
+                                                                       6E5EC3BC05633214001E3A3E,
+                                                                       6E00EF2B0566EE06001AB46F,
+                                                                       6E00EF2C0566EE06001AB46F,
+                                                                       6E00EF2D0566EE06001AB46F,
+                                                                       6E00EF2E0566EE06001AB46F,
+                                                                       6E00EF2F0566EE06001AB46F,
+                                                                       6E00EF300566EE06001AB46F,
+                                                                       6E00EF310566EE06001AB46F,
+                                                                       6E9F392A0569DB90007C1A1C,
+                                                                       6E9F392B0569DB90007C1A1C,
+                                                                       6E6126E7056B3091006177EC,
+                                                                       6E6126E8056B3091006177EC,
+                                                                       6E6126E9056B3091006177EC,
+                                                                       6E6126EA056B3091006177EC,
+                                                                       6E6126EB056B3091006177EC,
+                                                                       6E6126EC056B3091006177EC,
+                                                                       6E6126ED056B3091006177EC,
+                                                                       6E6126EE056B3091006177EC,
+                                                                       6E6126EF056B3091006177EC,
+                                                                       6E6126F0056B3091006177EC,
+                                                                       6E6126F1056B3091006177EC,
+                                                                       6E6126F2056B3091006177EC,
+                                                                       6E6126F3056B3091006177EC,
+                                                                       6E6126F4056B3091006177EC,
+                                                                       6E6126F5056B3091006177EC,
+                                                                       6E6126F6056B3091006177EC,
+                                                                       6E6126F7056B3091006177EC,
+                                                                       6E6126F8056B3091006177EC,
+                                                                       6E6126F9056B3091006177EC,
+                                                                       6E6126FA056B3091006177EC,
+                                                                       6E6126FB056B3091006177EC,
+                                                                       6E6126FC056B3091006177EC,
+                                                                       6E6126FD056B3091006177EC,
+                                                                       6E6126FE056B3091006177EC,
+                                                                       6E6126FF056B3091006177EC,
+                                                                       6E612700056B3091006177EC,
+                                                                       6E612701056B3091006177EC,
+                                                                       6E612702056B3091006177EC,
+                                                                       6E612703056B3091006177EC,
+                                                                       6E612704056B3091006177EC,
+                                                                       6E612705056B3091006177EC,
+                                                                       6E612706056B3091006177EC,
+                                                                       6E612707056B3091006177EC,
+                                                                       6E612708056B3091006177EC,
+                                                                       6E612709056B3091006177EC,
+                                                                       6E61270A056B3091006177EC,
+                                                                       6E61270B056B3091006177EC,
+                                                                       6E61270C056B3091006177EC,
+                                                                       6E61270D056B3091006177EC,
+                                                                       6E61270E056B3091006177EC,
+                                                                       6E61270F056B3091006177EC,
+                                                                       6E612710056B3091006177EC,
+                                                                       6E612711056B3091006177EC,
+                                                                       6E612712056B3091006177EC,
+                                                                       6E612713056B3091006177EC,
+                                                                       6E612714056B3091006177EC,
+                                                                       6E51A9120573258100506538,
+                                                                       6E51A9130573258100506538,
+                                                                       6E51A9140573258100506538,
+                                                                       6E51A9150573258100506538,
+                                                                       6E51A9160573258100506538,
+                                                                       6E51A9170573258100506538,
+                                                                       6E51A9180573258100506538,
+                                                                       6E51A9190573258100506538,
+                                                                       6E51A91A0573258100506538,
+                                                                       6E51A91B0573258100506538,
+                                                                       6E51A91C0573258100506538,
+                                                                       6E51A91D0573258100506538,
+                                                                       6E51A91E0573258100506538,
+                                                                       6E51A91F0573258100506538,
+                                                                       6E51A9200573258100506538,
+                                                                       6E51A9210573258100506538,
+                                                                       6E51A9220573258100506538,
+                                                                       6E51A9230573258100506538,
+                                                                       6E51A9240573258100506538,
+                                                                       6E51A9250573258100506538,
+                                                                       6E51A9260573258100506538,
+                                                                       6E51A9270573258100506538,
+                                                                       6E51A9280573258100506538,
+                                                                       6E51A9290573258100506538,
+                                                                       6E51A92A0573258100506538,
+                                                                       6E51A92B0573258100506538,
+                                                                       6E51A92C0573258100506538,
+                                                                       6E51A92D0573258100506538,
+                                                                       6E51A92E0573258100506538,
+                                                                       6E51A92F0573258100506538,
+                                                                       6E51A9300573258100506538,
+                                                                       6E51A9310573258100506538,
+                                                                       6E51A9320573258100506538,
+                                                                       6E51A9330573258100506538,
+                                                                       6E51A9340573258100506538,
+                                                                       6E51A9350573258100506538,
+                                                                       6E51A9360573258100506538,
+                                                                       6E51A9370573258100506538,
+                                                                       6E51A9380573258100506538,
+                                                                       6E51A9390573258100506538,
+                                                                       6E51A93A0573258100506538,
+                                                                       6E51A93B0573258100506538,
+                                                                       6E51A93C0573258100506538,
+                                                                       6E51A93D0573258100506538,
+                                                                       6E51A93E0573258100506538,
+                                                                       6E51A93F0573258100506538,
+                                                                       6E51A9400573258100506538,
+                                                                       6E51A9410573258100506538,
+                                                                       6E51A9420573258100506538,
+                                                                       6E51A9430573258100506538,
+                                                                       6E51A9440573258100506538,
+                                                                       6E51A9450573258100506538,
+                                                                       6E51A9460573258100506538,
+                                                                       6E51A9470573258100506538,
+                                                                       6E51A9480573258100506538,
+                                                                       6E51A9490573258100506538,
+                                                                       6E51A94A0573258100506538,
+                                                                       6E51A94B0573258100506538,
+                                                                       6E51A94C0573258100506538,
+                                                                       6E51A94D0573258100506538,
+                                                                       6E51A94E0573258100506538,
+                                                                       6E51A94F0573258100506538,
+                                                                       6E51A9500573258100506538,
+                                                                       6E51A9510573258100506538,
+                                                                       6E51A9520573258100506538,
+                                                                       6E51A9530573258100506538,
+                                                                       6E51A9540573258100506538,
+                                                                       6E51A9550573258100506538,
+                                                                       6E51A9560573258100506538,
+                                                                       6E51A9570573258100506538,
+                                                                       6E51A9580573258100506538,
+                                                                       6E51A9590573258100506538,
+                                                                       6E51A95A0573258100506538,
+                                                                       6E51A95B0573258100506538,
+                                                                       6E51A95C0573258100506538,
+                                                                       6E51A95D0573258100506538,
+                                                                       6E51A95E0573258100506538,
+                                                                       6E51A95F0573258100506538,
+                                                                       6E51A9600573258100506538,
+                                                                       6E51A9610573258100506538,
+                                                                       6E51A9620573258100506538,
+                                                                       6E51A9630573258100506538,
+                                                                       6E51A9640573258100506538,
+                                                                       6E51A9650573258100506538,
+                                                                       6E51A9660573258100506538,
+                                                                       6E51A9670573258100506538,
+                                                                       6E51A9B00573385700506538,
+                                                                       6E51A9B10573385700506538,
+                                                                       6E51A9B20573385700506538,
+                                                                       6E51A9B30573385700506538,
+                                                                       6E51A9B40573385700506538,
+                                                                       6E51A9B50573385700506538,
+                                                                       6E51A9B60573385700506538,
+                                                                       6E51A9B70573385700506538,
+                                                                       6E51A9B80573385700506538,
+                                                                       6E51A9B90573385700506538,
+                                                                       6E51A9BA0573385700506538,
+                                                                       6E51A9BB0573385700506538,
+                                                                       6E51A9BC0573385700506538,
+                                                                       6E51A9BD0573385700506538,
+                                                                       6E51A9BE0573385700506538,
+                                                                       6E51A9BF0573385700506538,
+                                                                       6E51A9C00573385700506538,
+                                                                       6E51A9C10573385700506538,
+                                                                       6E51A9C20573385700506538,
+                                                                       6E51A9C30573385700506538,
+                                                                       6E51A9C40573385700506538,
+                                                                       6E51A9C50573385700506538,
+                                                                       6E51A9C60573385700506538,
+                                                                       6E51A9C70573385700506538,
+                                                                       6E51A9C80573385700506538,
+                                                                       6E51A9C90573385700506538,
+                                                                       6E51A9CA0573385700506538,
+                                                                       6E51A9CB0573385700506538,
+                                                                       6E51A9CC0573385700506538,
+                                                                       6E51A9CD0573385700506538,
+                                                                       6E51A9CE0573385700506538,
+                                                                       6E51A9CF0573385700506538,
+                                                                       6E51A9D00573385700506538,
+                                                                       6E51A9D10573385700506538,
+                                                                       6E51A9D20573385700506538,
+                                                                       6E51A9D30573385700506538,
+                                                                       6E51A9D40573385700506538,
+                                                                       6E51A9D50573385700506538,
+                                                                       6E51A9D60573385700506538,
+                                                                       6E51A9D70573385700506538,
+                                                                       6E51A9D80573385700506538,
+                                                                       6E51A9D90573385700506538,
+                                                                       6E51A9DA0573385700506538,
+                                                                       6E51A9DB0573385700506538,
+                                                                       6E51A9DC0573385700506538,
+                                                                       6E51A9DD0573385700506538,
+                                                                       6E51A9DE0573385700506538,
+                                                                       6E51A9DF0573385700506538,
+                                                                       6E51A9E00573385700506538,
+                                                                       6E51A9E10573385700506538,
+                                                                       6E51A9E20573385700506538,
+                                                                       6E51A9E30573385700506538,
+                                                                       6E51A9E40573385700506538,
+                                                                       6E51A9E50573385700506538,
+                                                                       6E51A9E60573385700506538,
+                                                                       6E51A9E70573385700506538,
+                                                                       6E51A9E80573385700506538,
+                                                                       6E51A9E90573385700506538,
+                                                                       6E51A9EA0573385700506538,
+                                                                       6EB852AC057476DD00E260EA,
+                                                                       6EB852AD057476DD00E260EA,
+                                                                       6EB852AE057476DD00E260EA,
+                                                                       6EB852AF057476DD00E260EA,
+                                                                       6EB852B0057476DD00E260EA,
+                                                                       6EB852B1057476DD00E260EA,
+                                                                       6EB852B2057476DD00E260EA,
+                                                                       6EB852B3057476DD00E260EA,
+                                                                       6EB852B4057476DD00E260EA,
+                                                                       6EB852B5057476DD00E260EA,
+                                                                       6EB852B6057476DD00E260EA,
+                                                                       6EB852B7057476DD00E260EA,
+                                                                       6EB852B8057476DD00E260EA,
+                                                                       6EB852B9057476DD00E260EA,
+                                                                       6EB852BA057476DD00E260EA,
+                                                                       6EB852BB057476DD00E260EA,
+                                                                       6EB852BC057476DD00E260EA,
+                                                                       6EB852BD057476DD00E260EA,
+                                                                       6EB852BE057476DD00E260EA,
+                                                                       6EB852BF057476DD00E260EA,
+                                                                       6EB852C0057476DD00E260EA,
+                                                                       6EB852C1057476DD00E260EA,
+                                                                       6EB852C2057476DD00E260EA,
+                                                                       6EB852C3057476DD00E260EA,
+                                                                       6EB852C4057476DD00E260EA,
+                                                                       6EB852C5057476DD00E260EA,
+                                                                       6EB852C6057476DD00E260EA,
+                                                                       6EB852C7057476DD00E260EA,
+                                                                       6EB852C8057476DD00E260EA,
+                                                                       6EB852C9057476DD00E260EA,
+                                                                       6EB852CA057476DD00E260EA,
+                                                                       6EB852CB057476DD00E260EA,
+                                                                       6EB852CC057476DD00E260EA,
+                                                                       6EB852CD057476DD00E260EA,
+                                                                       6EB852CE057476DD00E260EA,
+                                                                       6EB852CF057476DD00E260EA,
+                                                                       6EB852D0057476DD00E260EA,
+                                                                       6EB852D1057476DD00E260EA,
+                                                                       6EB852D2057476DD00E260EA,
+                                                                       6EB852D3057476DD00E260EA,
+                                                                       6EB852D4057476DD00E260EA,
+                                                                       6EB852D5057476DD00E260EA,
+                                                                       6EB852D6057476DD00E260EA,
+                                                                       6EB852D7057476DD00E260EA,
+                                                                       6EB852D8057476DD00E260EA,
+                                                                       6EB852D9057476DD00E260EA,
+                                                                       6EB852DA057476DD00E260EA,
+                                                                       6EB852DB057476DD00E260EA,
+                                                                       6EB852DC057476DD00E260EA,
+                                                                       6EB852DD057476DD00E260EA,
+                                                                       6EB852DE057476DD00E260EA,
+                                                                       6EB852DF057476DD00E260EA,
+                                                                       6EB852E0057476DD00E260EA,
+                                                                       6EB852E1057476DD00E260EA,
+                                                                       6EB852E2057476DD00E260EA,
+                                                                       6EB852E3057476DD00E260EA,
+                                                                       6EB852E4057476DD00E260EA,
+                                                                       6EF08713057544F900B81D60,
+                                                                       6E3309EE0575C22E0093550E,
+                                                                       6E3309EF0575C22E0093550E,
+                                                                       6E3309F00575C22E0093550E,
+                                                                       6E3309F10575C22E0093550E,
+                                                                       6E3309F20575C22E0093550E,
+                                                                       6E3309F30575C22E0093550E,
+                                                                       6E3309F40575C22E0093550E,
+                                                                       6E3309F50575C22E0093550E,
+                                                                       6E3309F60575C22E0093550E,
+                                                                       6E3309F70575C22E0093550E,
+                                                                       6E3309F80575C22E0093550E,
+                                                                       6E3309F90575C22E0093550E,
+                                                                       6E3309FA0575C22E0093550E,
+                                                                       6E3309FB0575C22E0093550E,
+                                                                       6E3309FC0575C22E0093550E,
+                                                                       6E3309FD0575C22E0093550E,
+                                                                       6E3309FE0575C22E0093550E,
+                                                                       6E3309FF0575C22E0093550E,
+                                                                       6E330A000575C22E0093550E,
+                                                                       6E330A010575C22E0093550E,
+                                                                       6E330A020575C22E0093550E,
+                                                                       6E330A030575C22E0093550E,
+                                                                       6E330A040575C22E0093550E,
+                                                                       6E330A050575C22E0093550E,
+                                                                       6E330A060575C22E0093550E,
+                                                                       6E330A070575C22E0093550E,
+                                                                       6E330A080575C22E0093550E,
+                                                                       6E330A090575C22E0093550E,
+                                                                       6E330A0A0575C22E0093550E,
+                                                                       6E330A0B0575C22E0093550E,
                                                                );
                                                        };
+                                                       SplitCount = 1;
                                                };
-                                               PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {1280, 127}}";
-                                               PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 127}, {1280, 746}}";
-                                               PBXProjectWorkspaceModule_OldSuperviewFrame = "{{0, 0}, {1280, 873}}";
+                                               PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {1073, 124}}";
+                                               PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 124}, {1073, 742}}";
+                                               PBXProjectWorkspaceModule_OldSuperviewFrame = "{{207, 0}, {1073, 866}}";
                                                PBXProjectWorkspaceModule_SGTM = {
                                                        PBXBottomSmartGroupGIDs = (
                                                                1C37FBAC04509CD000000102,
                                                                1CC0EA4004350EF90041110B,
                                                                1C37FABC05509CD000000102,
                                                                1C37FABC05539CD112110102,
-                                                               E2644B35053B69B200211256,
                                                                1C37FABC04509CD000100104,
                                                        );
-                                                       PBXSmartGroupTreeModuleColumnData = {
-                                                               PBXSmartGroupTreeModuleColumnWidthsKey = (
-                                                                       165,
-                                                               );
-                                                               PBXSmartGroupTreeModuleColumnsKey_v4 = (
-                                                                       MainColumn,
-                                                               );
-                                                       };
-                                                       PBXSmartGroupTreeModuleOutlineStateKey_v7 = {
-                                                               PBXSmartGroupTreeModuleOutlineStateExpansionKey = (
-                                                                       29B97314FDCFA39411CA2CEA,
-                                                                       080E96DDFE201D6D7F000001,
-                                                                       29B97315FDCFA39411CA2CEA,
-                                                               );
-                                                               PBXSmartGroupTreeModuleOutlineStateSelectionKey = (
-                                                                       (
-                                                                               3,
-                                                                               1,
-                                                                               0,
-                                                                       ),
-                                                               );
-                                                               PBXSmartGroupTreeModuleOutlineStateVisibleRectKey = "{{0, 0}, {165, 855}}";
-                                                       };
                                                        PBXTopSmartGroupGIDs = (
                                                        );
                                                };
                                        };
                                },
                        );
+                       "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXBatchFindModule" = {
+                       };
                        "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXBuildResultsModule" = {
                        };
                        "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXClassBrowserModule" = {
-                               OptionsSetName = "Hierarchy, all classes";
+                               OptionsSetName = "Hierarchy, project classes";
+                       };
+                       "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugBreakpointsModule" = {
                        };
                        "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugCLIModule" = {
                        };
-                       "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXProjectFindModule" = {
+                       "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugSessionModule" = {
+                       };
+                       "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXNavigatorGroup" = {
+                               Split0 = {
+                                       bookmark = 6EF0871005753FB000B81D60;
+                                       history = (
+                                               6EF0870D05753FB000B81D60,
+                                               6EF0870E05753FB000B81D60,
+                                       );
+                                       prevStack = (
+                                               6EF0870F05753FB000B81D60,
+                                       );
+                               };
+                               SplitCount = 1;
                        };
                        "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXProjectWorkspaceModule" = {
-                               PBXProjectWorkspaceModule_StateKey_Rev39 = {
-                                       PBXProjectWorkspaceModule_DataSourceSelectionKey_Rev6 = {
-                                               BoundsStr = "{{0, 0}, {1083, 856}}";
-                                               Rows = (
-                                                       0,
-                                               );
-                                               VisibleRectStr = "{{0, 0}, {1083, 856}}";
-                                       };
-                                       PBXProjectWorkspaceModule_EditorOpen = false;
+                               PBXProjectWorkspaceModule_StateKey_Rev36 = {
+                                       PBXProjectWorkspaceModule_EditorOpen = true;
                                        PBXProjectWorkspaceModule_EmbeddedNavigatorGroup = {
-                                               PBXSplitModuleInNavigatorKey = {
-                                                       SplitCount = 1;
-                                               };
-                                       };
-                                       PBXProjectWorkspaceModule_GeometryKey_Rev15 = {
-                                               PBXProjectWorkspaceModule_SGTM_Geometry = {
-                                                       _collapsingFrameDimension = 0;
-                                                       _indexOfCollapsedView = 0;
-                                                       _percentageOfCollapsedView = 0;
-                                                       sizes = (
-                                                               "{{0, 0}, {182, 873}}",
-                                                               "{{182, 0}, {1098, 873}}",
+                                               Split0 = {
+                                                       bookmark = 6E51A96D0573258900506538;
+                                                       history = (
+                                                               6E84B8F20558B3480001B5EB,
+                                                               6E84B8F30558B3480001B5EB,
+                                                               6E84B8F40558B3480001B5EB,
+                                                               6E84B8F80558B3480001B5EB,
+                                                               6EF8EC22055A1C39008BBE46,
+                                                               6EF8EC23055A1C39008BBE46,
+                                                               6EF8EC26055A1C39008BBE46,
+                                                               6EF8EC27055A1C39008BBE46,
+                                                               6EF8EC28055A1C39008BBE46,
+                                                               6EF8EC29055A1C39008BBE46,
+                                                               6EE004830560B42800F8A5B1,
+                                                               6EE0048A0560B42800F8A5B1,
+                                                               6EE0048C0560B42800F8A5B1,
+                                                               6EE0048D0560B42800F8A5B1,
+                                                               6EE004900560B42800F8A5B1,
+                                                               6E5EC36505633214001E3A3E,
+                                                               6E5EC36605633214001E3A3E,
+                                                               6E5EC36705633214001E3A3E,
+                                                               6E5EC36905633214001E3A3E,
+                                                               6E5EC36C05633214001E3A3E,
+                                                               6E5EC36D05633214001E3A3E,
+                                                               6E5EC36E05633214001E3A3E,
+                                                               6E5EC37005633214001E3A3E,
+                                                               6E00EF260566EE06001AB46F,
+                                                               6E00EF290566EE06001AB46F,
+                                                               6E6126C7056B3091006177EC,
+                                                               6E6126C8056B3091006177EC,
+                                                               6E6126C9056B3091006177EC,
+                                                               6E6126CB056B3091006177EC,
+                                                               6E6126CC056B3091006177EC,
+                                                               6E6126CD056B3091006177EC,
+                                                               6E6126CE056B3091006177EC,
+                                                               6E6126CF056B3091006177EC,
+                                                               6E6126D0056B3091006177EC,
+                                                               6E6126D1056B3091006177EC,
+                                                               6E6126D2056B3091006177EC,
+                                                               6E6126D3056B3091006177EC,
+                                                               6E6126D4056B3091006177EC,
+                                                               6E6126D5056B3091006177EC,
+                                                               6E6126D6056B3091006177EC,
+                                                               6E6126D7056B3091006177EC,
+                                                               6E6126D8056B3091006177EC,
+                                                               6E6126DA056B3091006177EC,
+                                                               6E6126DB056B3091006177EC,
+                                                               6E6126DC056B3091006177EC,
+                                                               6E6126DD056B3091006177EC,
+                                                               6E6126DE056B3091006177EC,
+                                                               6E6126DF056B3091006177EC,
+                                                               6E6126E0056B3091006177EC,
+                                                               6E6126E1056B3091006177EC,
+                                                               6E6126E2056B3091006177EC,
+                                                               6E6126E3056B3091006177EC,
+                                                               6E6126E4056B3091006177EC,
+                                                               6E51A9060573258100506538,
+                                                               6E51A9070573258100506538,
+                                                               6E51A9080573258100506538,
+                                                               6E51A9090573258100506538,
+                                                               6E51A90A0573258100506538,
+                                                               6E51A90B0573258100506538,
+                                                               6E51A90C0573258100506538,
+                                                               6E51A90D0573258100506538,
+                                                               6E51A90E0573258100506538,
+                                                               6E51A90F0573258100506538,
+                                                               6E51A9100573258100506538,
+                                                               6E51A9110573258100506538,
+                                                               6E8166290559E79E00377CF7,
+                                                       );
+                                                       prevStack = (
+                                                               6E84B8FE0558B3480001B5EB,
+                                                               6E84B8FF0558B3480001B5EB,
+                                                               6E84B9000558B3480001B5EB,
+                                                               6E84B9010558B3480001B5EB,
+                                                               6E84B9020558B3480001B5EB,
+                                                               6E84B9030558B3480001B5EB,
+                                                               6E84B9040558B3480001B5EB,
+                                                               6E84B9050558B3480001B5EB,
+                                                               6E84B9060558B3480001B5EB,
+                                                               6E84B9070558B3480001B5EB,
+                                                               6E84B9080558B3480001B5EB,
+                                                               6E84B9090558B3480001B5EB,
+                                                               6E84B90A0558B3480001B5EB,
+                                                               6E84B90B0558B3480001B5EB,
+                                                               6E84B90C0558B3480001B5EB,
+                                                               6E84B90D0558B3480001B5EB,
+                                                               6E84B90E0558B3480001B5EB,
+                                                               6E84B90F0558B3480001B5EB,
+                                                               6E84B9100558B3480001B5EB,
+                                                               6E84B9110558B3480001B5EB,
+                                                               6E84B9120558B3480001B5EB,
+                                                               6E84B9130558B3480001B5EB,
+                                                               6E84B9140558B3480001B5EB,
+                                                               6E84B9160558B3480001B5EB,
+                                                               6E84B9180558B3480001B5EB,
+                                                               6E84B91A0558B3480001B5EB,
+                                                               6E84B91C0558B3480001B5EB,
+                                                               6E84B91D0558B3480001B5EB,
+                                                               6E84B91E0558B3480001B5EB,
+                                                               6E84B91F0558B3480001B5EB,
+                                                               6E84B9210558B3480001B5EB,
+                                                               6E84B9230558B3480001B5EB,
+                                                               6E84B9240558B3480001B5EB,
+                                                               6E81662F0559E79E00377CF7,
+                                                               6E8166300559E79E00377CF7,
+                                                               6E8166310559E79E00377CF7,
+                                                               6E8166320559E79E00377CF7,
+                                                               6E8166330559E79E00377CF7,
+                                                               6E8166340559E79E00377CF7,
+                                                               6E8166350559E79E00377CF7,
+                                                               6E8166370559E79E00377CF7,
+                                                               6E8166380559E79E00377CF7,
+                                                               6E8166390559E79E00377CF7,
+                                                               6E81663A0559E79E00377CF7,
+                                                               6E81663C0559E79E00377CF7,
+                                                               6E81663E0559E79E00377CF7,
+                                                               6E81663F0559E79E00377CF7,
+                                                               6E8166410559E79E00377CF7,
+                                                               6E8166430559E79E00377CF7,
+                                                               6E8166450559E79E00377CF7,
+                                                               6E8166460559E79E00377CF7,
+                                                               6E8166480559E79E00377CF7,
+                                                               6E8166890559F3BD00377CF7,
+                                                               6E81668B0559F3BD00377CF7,
+                                                               6E81668C0559F3BD00377CF7,
+                                                               6E81668E0559F3BD00377CF7,
+                                                               6E8166900559F3BD00377CF7,
+                                                               6E8166920559F3BD00377CF7,
+                                                               6E8166940559F3BD00377CF7,
+                                                               6E8166960559F3BD00377CF7,
+                                                               6E8166980559F3BD00377CF7,
+                                                               6E81669A0559F3BD00377CF7,
+                                                               6E81669C0559F3BD00377CF7,
+                                                               6E81669E0559F3BD00377CF7,
+                                                               6E8166A00559F3BD00377CF7,
+                                                               6E8166A20559F3BD00377CF7,
+                                                               6E8166A30559F3BD00377CF7,
+                                                               6E8166A50559F3BD00377CF7,
+                                                               6EF8EB660559F823008BBE46,
+                                                               6EF8EB680559F823008BBE46,
+                                                               6EF8EB6A0559F823008BBE46,
+                                                               6EF8EB6C0559F823008BBE46,
+                                                               6EF8EB6E0559F823008BBE46,
+                                                               6EF8EB700559F823008BBE46,
+                                                               6EF8EC2D055A1C39008BBE46,
+                                                               6EF8EC2F055A1C39008BBE46,
+                                                               6EF8EC31055A1C39008BBE46,
+                                                               6EF8EC33055A1C39008BBE46,
+                                                               6EF8EC35055A1C39008BBE46,
+                                                               6EF8EC37055A1C39008BBE46,
+                                                               6EF8EC39055A1C39008BBE46,
+                                                               6EF8EC3B055A1C39008BBE46,
+                                                               6EF8EC3D055A1C39008BBE46,
+                                                               6EF8EC3F055A1C39008BBE46,
+                                                               6EF8EC40055A1C39008BBE46,
+                                                               6EF8EC42055A1C39008BBE46,
+                                                               6EF8EC44055A1C39008BBE46,
+                                                               6EF8EC45055A1C39008BBE46,
+                                                               6EF8EC47055A1C39008BBE46,
+                                                               6EF8EC49055A1C39008BBE46,
+                                                               6EF8EC4B055A1C39008BBE46,
+                                                               6EF8EC4D055A1C39008BBE46,
+                                                               6EF8EC4F055A1C39008BBE46,
+                                                               6EF8EC51055A1C39008BBE46,
+                                                               6EF8EC53055A1C39008BBE46,
+                                                               6EF8EC55055A1C39008BBE46,
+                                                               6EF8EC56055A1C39008BBE46,
+                                                               6EF8EC58055A1C39008BBE46,
+                                                               6EF8EC59055A1C39008BBE46,
+                                                               6EF8EC5A055A1C39008BBE46,
+                                                               6EF8EC5B055A1C39008BBE46,
+                                                               6EF8EC5C055A1C39008BBE46,
+                                                               6EF8EC5D055A1C39008BBE46,
+                                                               6EF8EC5E055A1C39008BBE46,
+                                                               6EF8EC60055A1C39008BBE46,
+                                                               6EF8EC62055A1C39008BBE46,
+                                                               6EF8EC64055A1C39008BBE46,
+                                                               6EF8EC65055A1C39008BBE46,
+                                                               6EF8EC67055A1C39008BBE46,
+                                                               6EF8EC69055A1C39008BBE46,
+                                                               6EF8EC6A055A1C39008BBE46,
+                                                               6EF8EC6B055A1C39008BBE46,
+                                                               6EF8EC6D055A1C39008BBE46,
+                                                               6EF8EC6E055A1C39008BBE46,
+                                                               6EF8EC6F055A1C39008BBE46,
+                                                               6EF8EC70055A1C39008BBE46,
+                                                               6EF8EC72055A1C39008BBE46,
+                                                               6EF8EC73055A1C39008BBE46,
+                                                               6EF8EC74055A1C39008BBE46,
+                                                               6EF8EC75055A1C39008BBE46,
+                                                               6EF8EC76055A1C39008BBE46,
+                                                               6EF8EC77055A1C39008BBE46,
+                                                               6EF8EC78055A1C39008BBE46,
+                                                               6EE070E0055CA8E200598538,
+                                                               6EE070E2055CA8E200598538,
+                                                               6EE070E4055CA8E200598538,
+                                                               6EE070E6055CA8E200598538,
+                                                               6EE070E8055CA8E200598538,
+                                                               6EE070EA055CA8E200598538,
+                                                               6EE070EC055CA8E200598538,
+                                                               6EE004950560B42800F8A5B1,
+                                                               6EE004960560B42800F8A5B1,
+                                                               6EE004970560B42800F8A5B1,
+                                                               6EE004980560B42800F8A5B1,
+                                                               6EE004990560B42800F8A5B1,
+                                                               6EE0049A0560B42800F8A5B1,
+                                                               6EE0049B0560B42800F8A5B1,
+                                                               6EE0049C0560B42800F8A5B1,
+                                                               6EE0049D0560B42800F8A5B1,
+                                                               6EE0049E0560B42800F8A5B1,
+                                                               6EE0049F0560B42800F8A5B1,
+                                                               6EE004A00560B42800F8A5B1,
+                                                               6EE004A10560B42800F8A5B1,
+                                                               6EE004A20560B42800F8A5B1,
+                                                               6EE004A30560B42800F8A5B1,
+                                                               6EE004A40560B42800F8A5B1,
+                                                               6EE004A50560B42800F8A5B1,
+                                                               6EE004A60560B42800F8A5B1,
+                                                               6EE004A70560B42800F8A5B1,
+                                                               6EE004A80560B42800F8A5B1,
+                                                               6EE004A90560B42800F8A5B1,
+                                                               6EE004AA0560B42800F8A5B1,
+                                                               6EE004AB0560B42800F8A5B1,
+                                                               6EE004AC0560B42800F8A5B1,
+                                                               6EE004AD0560B42800F8A5B1,
+                                                               6EE004AE0560B42800F8A5B1,
+                                                               6EE004AF0560B42800F8A5B1,
+                                                               6EE004B00560B42800F8A5B1,
+                                                               6EE004B10560B42800F8A5B1,
+                                                               6EE004B20560B42800F8A5B1,
+                                                               6EE004B30560B42800F8A5B1,
+                                                               6EE004B40560B42800F8A5B1,
+                                                               6EE004B50560B42800F8A5B1,
+                                                               6EE004B60560B42800F8A5B1,
+                                                               6EE004B70560B42800F8A5B1,
+                                                               6EE004B80560B42800F8A5B1,
+                                                               6EE004B90560B42800F8A5B1,
+                                                               6EE004BA0560B42800F8A5B1,
+                                                               6EE004BB0560B42800F8A5B1,
+                                                               6EE004BC0560B42800F8A5B1,
+                                                               6EE004BD0560B42800F8A5B1,
+                                                               6EE004BE0560B42800F8A5B1,
+                                                               6EE004BF0560B42800F8A5B1,
+                                                               6EE004C00560B42800F8A5B1,
+                                                               6EE004C10560B42800F8A5B1,
+                                                               6EE004C20560B42800F8A5B1,
+                                                               6EE004C30560B42800F8A5B1,
+                                                               6EE004C40560B42800F8A5B1,
+                                                               6EE004C50560B42800F8A5B1,
+                                                               6EE004C60560B42800F8A5B1,
+                                                               6EE004C70560B42800F8A5B1,
+                                                               6EE004C80560B42800F8A5B1,
+                                                               6EE004C90560B42800F8A5B1,
+                                                               6EE004CA0560B42800F8A5B1,
+                                                               6EE004CB0560B42800F8A5B1,
+                                                               6EE004CC0560B42800F8A5B1,
+                                                               6EE004CD0560B42800F8A5B1,
+                                                               6EE004CE0560B42800F8A5B1,
+                                                               6EE004CF0560B42800F8A5B1,
+                                                               6EE004D00560B42800F8A5B1,
+                                                               6EE004D10560B42800F8A5B1,
+                                                               6EE004D20560B42800F8A5B1,
+                                                               6EE004D30560B42800F8A5B1,
+                                                               6EE004D40560B42800F8A5B1,
+                                                               6EE004D50560B42800F8A5B1,
+                                                               6EE004D60560B42800F8A5B1,
+                                                               6EE004D70560B42800F8A5B1,
+                                                               6EE004D80560B42800F8A5B1,
+                                                               6EE004D90560B42800F8A5B1,
+                                                               6EE004DA0560B42800F8A5B1,
+                                                               6EE004DB0560B42800F8A5B1,
+                                                               6E2E17AE056201170070BE48,
+                                                               6E2E17AF056201170070BE48,
+                                                               6E2E17B0056201170070BE48,
+                                                               6E2E17B1056201170070BE48,
+                                                               6E5EC37105633214001E3A3E,
+                                                               6E5EC37205633214001E3A3E,
+                                                               6E5EC37305633214001E3A3E,
+                                                               6E5EC37405633214001E3A3E,
+                                                               6E5EC37505633214001E3A3E,
+                                                               6E5EC37605633214001E3A3E,
+                                                               6E5EC37705633214001E3A3E,
+                                                               6E5EC37805633214001E3A3E,
+                                                               6E5EC37905633214001E3A3E,
+                                                               6E5EC37A05633214001E3A3E,
+                                                               6E5EC37B05633214001E3A3E,
+                                                               6E5EC37C05633214001E3A3E,
+                                                               6E5EC37D05633214001E3A3E,
+                                                               6E5EC37E05633214001E3A3E,
+                                                               6E5EC37F05633214001E3A3E,
+                                                               6E5EC38005633214001E3A3E,
+                                                               6E5EC38105633214001E3A3E,
+                                                               6E5EC38205633214001E3A3E,
+                                                               6E5EC38305633214001E3A3E,
+                                                               6E5EC38405633214001E3A3E,
+                                                               6E5EC38505633214001E3A3E,
+                                                               6E5EC38605633214001E3A3E,
+                                                               6E5EC38705633214001E3A3E,
+                                                               6E5EC38805633214001E3A3E,
+                                                               6E5EC38905633214001E3A3E,
+                                                               6E5EC38A05633214001E3A3E,
+                                                               6E5EC38B05633214001E3A3E,
+                                                               6E5EC38C05633214001E3A3E,
+                                                               6E5EC38D05633214001E3A3E,
+                                                               6E5EC38E05633214001E3A3E,
+                                                               6E5EC38F05633214001E3A3E,
+                                                               6E5EC39005633214001E3A3E,
+                                                               6E5EC39105633214001E3A3E,
+                                                               6E5EC39205633214001E3A3E,
+                                                               6E5EC39305633214001E3A3E,
+                                                               6E5EC39405633214001E3A3E,
+                                                               6E5EC39505633214001E3A3E,
+                                                               6E5EC39605633214001E3A3E,
+                                                               6E5EC39705633214001E3A3E,
+                                                               6E5EC39805633214001E3A3E,
+                                                               6E5EC39905633214001E3A3E,
+                                                               6E5EC39A05633214001E3A3E,
+                                                               6E5EC39B05633214001E3A3E,
+                                                               6E5EC39C05633214001E3A3E,
+                                                               6E5EC39D05633214001E3A3E,
+                                                               6E5EC39E05633214001E3A3E,
+                                                               6E5EC39F05633214001E3A3E,
+                                                               6E5EC3A005633214001E3A3E,
+                                                               6E5EC3A105633214001E3A3E,
+                                                               6E5EC3A205633214001E3A3E,
+                                                               6E5EC3A305633214001E3A3E,
+                                                               6E5EC3A405633214001E3A3E,
+                                                               6E5EC3A505633214001E3A3E,
+                                                               6E5EC3A605633214001E3A3E,
+                                                               6E5EC3A705633214001E3A3E,
+                                                               6E5EC3A805633214001E3A3E,
+                                                               6E5EC3A905633214001E3A3E,
+                                                               6E5EC3AA05633214001E3A3E,
+                                                               6E5EC3AB05633214001E3A3E,
+                                                               6E5EC3AC05633214001E3A3E,
+                                                               6E5EC3AD05633214001E3A3E,
+                                                               6E5EC3AE05633214001E3A3E,
+                                                               6E5EC3AF05633214001E3A3E,
+                                                               6E5EC3B005633214001E3A3E,
+                                                               6E5EC3B105633214001E3A3E,
+                                                               6E5EC3B205633214001E3A3E,
+                                                               6E5EC3B305633214001E3A3E,
+                                                               6E5EC3B405633214001E3A3E,
+                                                               6E5EC3B505633214001E3A3E,
+                                                               6E5EC3B605633214001E3A3E,
+                                                               6E5EC3B705633214001E3A3E,
+                                                               6E5EC3B805633214001E3A3E,
+                                                               6E5EC3B905633214001E3A3E,
+                                                               6E5EC3BA05633214001E3A3E,
+                                                               6E5EC3BB05633214001E3A3E,
+                                                               6E5EC3BC05633214001E3A3E,
+                                                               6E00EF2B0566EE06001AB46F,
+                                                               6E00EF2C0566EE06001AB46F,
+                                                               6E00EF2D0566EE06001AB46F,
+                                                               6E00EF2E0566EE06001AB46F,
+                                                               6E00EF2F0566EE06001AB46F,
+                                                               6E00EF300566EE06001AB46F,
+                                                               6E00EF310566EE06001AB46F,
+                                                               6E9F392A0569DB90007C1A1C,
+                                                               6E9F392B0569DB90007C1A1C,
+                                                               6E6126E7056B3091006177EC,
+                                                               6E6126E8056B3091006177EC,
+                                                               6E6126E9056B3091006177EC,
+                                                               6E6126EA056B3091006177EC,
+                                                               6E6126EB056B3091006177EC,
+                                                               6E6126EC056B3091006177EC,
+                                                               6E6126ED056B3091006177EC,
+                                                               6E6126EE056B3091006177EC,
+                                                               6E6126EF056B3091006177EC,
+                                                               6E6126F0056B3091006177EC,
+                                                               6E6126F1056B3091006177EC,
+                                                               6E6126F2056B3091006177EC,
+                                                               6E6126F3056B3091006177EC,
+                                                               6E6126F4056B3091006177EC,
+                                                               6E6126F5056B3091006177EC,
+                                                               6E6126F6056B3091006177EC,
+                                                               6E6126F7056B3091006177EC,
+                                                               6E6126F8056B3091006177EC,
+                                                               6E6126F9056B3091006177EC,
+                                                               6E6126FA056B3091006177EC,
+                                                               6E6126FB056B3091006177EC,
+                                                               6E6126FC056B3091006177EC,
+                                                               6E6126FD056B3091006177EC,
+                                                               6E6126FE056B3091006177EC,
+                                                               6E6126FF056B3091006177EC,
+                                                               6E612700056B3091006177EC,
+                                                               6E612701056B3091006177EC,
+                                                               6E612702056B3091006177EC,
+                                                               6E612703056B3091006177EC,
+                                                               6E612704056B3091006177EC,
+                                                               6E612705056B3091006177EC,
+                                                               6E612706056B3091006177EC,
+                                                               6E612707056B3091006177EC,
+                                                               6E612708056B3091006177EC,
+                                                               6E612709056B3091006177EC,
+                                                               6E61270A056B3091006177EC,
+                                                               6E61270B056B3091006177EC,
+                                                               6E61270C056B3091006177EC,
+                                                               6E61270D056B3091006177EC,
+                                                               6E61270E056B3091006177EC,
+                                                               6E61270F056B3091006177EC,
+                                                               6E612710056B3091006177EC,
+                                                               6E612711056B3091006177EC,
+                                                               6E612712056B3091006177EC,
+                                                               6E612713056B3091006177EC,
+                                                               6E612714056B3091006177EC,
+                                                               6E51A9120573258100506538,
+                                                               6E51A9130573258100506538,
+                                                               6E51A9140573258100506538,
+                                                               6E51A9150573258100506538,
+                                                               6E51A9160573258100506538,
+                                                               6E51A9170573258100506538,
+                                                               6E51A9180573258100506538,
+                                                               6E51A9190573258100506538,
+                                                               6E51A91A0573258100506538,
+                                                               6E51A91B0573258100506538,
+                                                               6E51A91C0573258100506538,
+                                                               6E51A91D0573258100506538,
+                                                               6E51A91E0573258100506538,
+                                                               6E51A91F0573258100506538,
+                                                               6E51A9200573258100506538,
+                                                               6E51A9210573258100506538,
+                                                               6E51A9220573258100506538,
+                                                               6E51A9230573258100506538,
+                                                               6E51A9240573258100506538,
+                                                               6E51A9250573258100506538,
+                                                               6E51A9260573258100506538,
+                                                               6E51A9270573258100506538,
+                                                               6E51A9280573258100506538,
+                                                               6E51A9290573258100506538,
+                                                               6E51A92A0573258100506538,
+                                                               6E51A92B0573258100506538,
+                                                               6E51A92C0573258100506538,
+                                                               6E51A92D0573258100506538,
+                                                               6E51A92E0573258100506538,
+                                                               6E51A92F0573258100506538,
+                                                               6E51A9300573258100506538,
+                                                               6E51A9310573258100506538,
+                                                               6E51A9320573258100506538,
+                                                               6E51A9330573258100506538,
+                                                               6E51A9340573258100506538,
+                                                               6E51A9350573258100506538,
+                                                               6E51A9360573258100506538,
+                                                               6E51A9370573258100506538,
+                                                               6E51A9380573258100506538,
+                                                               6E51A9390573258100506538,
+                                                               6E51A93A0573258100506538,
+                                                               6E51A93B0573258100506538,
+                                                               6E51A93C0573258100506538,
+                                                               6E51A93D0573258100506538,
+                                                               6E51A93E0573258100506538,
+                                                               6E51A93F0573258100506538,
+                                                               6E51A9400573258100506538,
+                                                               6E51A9410573258100506538,
+                                                               6E51A9420573258100506538,
+                                                               6E51A9430573258100506538,
+                                                               6E51A9440573258100506538,
+                                                               6E51A9450573258100506538,
+                                                               6E51A9460573258100506538,
+                                                               6E51A9470573258100506538,
+                                                               6E51A9480573258100506538,
+                                                               6E51A9490573258100506538,
+                                                               6E51A94A0573258100506538,
+                                                               6E51A94B0573258100506538,
+                                                               6E51A94C0573258100506538,
+                                                               6E51A94D0573258100506538,
+                                                               6E51A94E0573258100506538,
+                                                               6E51A94F0573258100506538,
+                                                               6E51A9500573258100506538,
+                                                               6E51A9510573258100506538,
+                                                               6E51A9520573258100506538,
+                                                               6E51A9530573258100506538,
+                                                               6E51A9540573258100506538,
+                                                               6E51A9550573258100506538,
+                                                               6E51A9560573258100506538,
+                                                               6E51A9570573258100506538,
+                                                               6E51A9580573258100506538,
+                                                               6E51A9590573258100506538,
+                                                               6E51A95A0573258100506538,
+                                                               6E51A95B0573258100506538,
+                                                               6E51A95C0573258100506538,
+                                                               6E51A95D0573258100506538,
+                                                               6E51A95E0573258100506538,
+                                                               6E51A95F0573258100506538,
+                                                               6E51A9600573258100506538,
+                                                               6E51A9610573258100506538,
+                                                               6E51A9620573258100506538,
+                                                               6E51A9630573258100506538,
+                                                               6E51A9640573258100506538,
+                                                               6E51A9650573258100506538,
+                                                               6E51A9660573258100506538,
+                                                               6E51A9670573258100506538,
                                                        );
                                                };
+                                               SplitCount = 1;
                                        };
-                                       PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {1098, 873}}";
-                                       PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 0}, {750, 480}}";
-                                       PBXProjectWorkspaceModule_OldSuperviewFrame = "{{182, 0}, {1098, 873}}";
+                                       PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {1073, 124}}";
+                                       PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 124}, {1073, 742}}";
+                                       PBXProjectWorkspaceModule_OldSuperviewFrame = "{{207, 0}, {1073, 866}}";
+                                       PBXProjectWorkspaceModule_RunWindowVisible = true;
                                        PBXProjectWorkspaceModule_SGTM = {
                                                PBXBottomSmartGroupGIDs = (
                                                        1C37FBAC04509CD000000102,
                                                        1CC0EA4004350EF90041110B,
                                                        1C37FABC05509CD000000102,
                                                        1C37FABC05539CD112110102,
-                                                       E2644B35053B69B200211256,
                                                        1C37FABC04509CD000100104,
                                                );
-                                               PBXSmartGroupTreeModuleColumnData = {
-                                                       PBXSmartGroupTreeModuleColumnWidthsKey = (
-                                                               165,
-                                                       );
-                                                       PBXSmartGroupTreeModuleColumnsKey_v4 = (
-                                                               MainColumn,
-                                                       );
-                                               };
-                                               PBXSmartGroupTreeModuleOutlineStateKey_v7 = {
-                                                       PBXSmartGroupTreeModuleOutlineStateExpansionKey = (
-                                                       );
-                                                       PBXSmartGroupTreeModuleOutlineStateSelectionKey = (
-                                                               (
-                                                                       0,
-                                                               ),
-                                                       );
-                                                       PBXSmartGroupTreeModuleOutlineStateVisibleRectKey = "{{0, 0}, {165, 855}}";
-                                               };
                                                PBXTopSmartGroupGIDs = (
                                                );
                                        };
                                };
                        };
+                       "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXRunSessionModule" = {
+                       };
                        PBXWorkspaceGeometries = (
                                {
-                                       Frame = "{{0, 0}, {1280, 873}}";
-                                       PBXProjectWorkspaceModule_GeometryKey_Rev15 = {
+                                       Frame = "{{0, 0}, {1280, 886}}";
+                                       PBXProjectWorkspaceModule_GeometryKey_Rev11 = {
+                                               PBXProjectWorkspaceModule_SGTM_Geometry = {
+                                                       _collapsingFrameDimension = 0;
+                                                       _indexOfCollapsedView = 0;
+                                                       _percentageOfCollapsedView = 0;
+                                                       sizes = (
+                                                               "{{0, 0}, {207, 866}}",
+                                                               "{{207, 0}, {1073, 866}}",
+                                                       );
+                                               };
                                        };
-                                       RubberWindowFrame = "0 87 1280 915 0 0 1280 1002 ";
+                                       WindowFrame = "{{0, 54}, {1280, 948}}";
                                },
                        );
+                       "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXBatchFindModule" = {
+                               Frame = "{{0, 0}, {543, 158}}";
+                               WindowFrame = "{{369, 822}, {543, 158}}";
+                       };
                        "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXBuildResultsModule" = {
-                               Frame = "{{0, 0}, {480, 217}}";
-                               PBXModuleWindowStatusBarHidden = YES;
-                               RubberWindowFrame = "400 592 480 238 0 0 1280 1002 ";
+                               Frame = "{{0, 0}, {535, 476}}";
+                               WindowFrame = "{{400, 278}, {535, 554}}";
                        };
                        "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXClassBrowserModule" = {
-                               ClassesFrame = "{{0, 0}, {408, 96}}";
+                               ClassesFrame = "{{0, 0}, {408, 92}}";
                                ClassesTreeTableConfiguration = (
                                        PBXClassNameColumnIdentifier,
                                        208,
                                        PBXClassBookColumnIdentifier,
                                        22,
                                );
-                               Frame = "{{0, 0}, {655, 476}}";
-                               MembersFrame = "{{0, 96}, {408, 404}}";
+                               Frame = "{{0, 0}, {655, 496}}";
+                               MembersFrame = "{{0, 92}, {408, 384}}";
                                MembersTreeTableConfiguration = (
                                        PBXMemberTypeIconColumnIdentifier,
                                        22,
                                        PBXMemberBookColumnIdentifier,
                                        22,
                                );
-                               RubberWindowFrame = "312 452 655 518 0 0 1280 1002 ";
+                               WindowFrame = "{{312, 398}, {655, 574}}";
+                       };
+                       "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXDebugBreakpointsModule" = {
+                               BreakpointsTreeTableConfiguration = (
+                                       enabledColumn,
+                                       16,
+                                       breakpointColumn,
+                                       282.583,
+                               );
+                               Frame = "{{0, 0}, {208, 494}}";
+                               WindowFrame = "{{390, 424}, {208, 516}}";
                        };
                        "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXDebugCLIModule" = {
-                               Frame = "{{0, 0}, {400, 201}}";
-                               PBXModuleWindowStatusBarHidden = YES;
-                               RubberWindowFrame = "50 974 400 222 0 0 1280 1002 ";
+                               Frame = "{{0, 0}, {400, 200}}";
+                               WindowFrame = "{{50, 974}, {400, 222}}";
+                       };
+                       "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXDebugSessionModule" = {
+                               DebugConsoleDrawerSize = "{100, 120}";
+                               DebugConsoleVisible = Drawer;
+                               DebugConsoleWindowFrame = "{{200, 200}, {500, 300}}";
+                               DebugSTDIOWindowFrame = "{{200, 200}, {500, 300}}";
+                               Frame = "{{0, 0}, {861, 735}}";
+                               WindowFrame = "{{404, 189}, {861, 813}}";
                        };
-                       "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXProjectFindModule" = {
-                               Frame = "{{0, 0}, {614, 100}}";
-                               RubberWindowFrame = "333 720 614 142 0 0 1280 1002 ";
+                       "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXNavigatorGroup" = {
+                               Frame = "{{0, 0}, {750, 480}}";
+                               WindowFrame = "{{38, 418}, {750, 558}}";
                        };
                        "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXProjectWorkspaceModule" = {
-                               Frame = "{{0, 0}, {1280, 873}}";
-                               PBXProjectWorkspaceModule_GeometryKey_Rev15 = {
+                               Frame = "{{0, 0}, {1280, 886}}";
+                               PBXProjectWorkspaceModule_GeometryKey_Rev11 = {
+                                       PBXProjectWorkspaceModule_SGTM_Geometry = {
+                                               _collapsingFrameDimension = 0;
+                                               _indexOfCollapsedView = 0;
+                                               _percentageOfCollapsedView = 0;
+                                               sizes = (
+                                                       "{{0, 0}, {207, 866}}",
+                                                       "{{207, 0}, {1073, 866}}",
+                                               );
+                                       };
                                };
-                               RubberWindowFrame = "0 87 1280 915 0 0 1280 1002 ";
+                               WindowFrame = "{{0, 54}, {1280, 948}}";
                        };
-                       PBXWorkspaceStateSaveDate = 97569444;
+                       "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXRunSessionModule" = {
+                               Frame = "{{0, 0}, {745, 442}}";
+                               WindowFrame = "{{530, 61}, {745, 464}}";
+                       };
+                       PBXWorkspaceStateSaveDate = 91586952;
                };
                perUserProjectItems = {
-                       6EAFEFFD05D0CB9B00C357EF = 6EAFEFFD05D0CB9B00C357EF;
-                       6EAFF00605D0D29D00C357EF = 6EAFF00605D0D29D00C357EF;
+                       6E00EF290566EE06001AB46F = 6E00EF290566EE06001AB46F;
+                       6E00EF2B0566EE06001AB46F = 6E00EF2B0566EE06001AB46F;
+                       6E00EF2C0566EE06001AB46F = 6E00EF2C0566EE06001AB46F;
+                       6E00EF2D0566EE06001AB46F = 6E00EF2D0566EE06001AB46F;
+                       6E00EF2E0566EE06001AB46F = 6E00EF2E0566EE06001AB46F;
+                       6E00EF2F0566EE06001AB46F = 6E00EF2F0566EE06001AB46F;
+                       6E00EF300566EE06001AB46F = 6E00EF300566EE06001AB46F;
+                       6E00EF310566EE06001AB46F = 6E00EF310566EE06001AB46F;
+                       6E2E17AE056201170070BE48 = 6E2E17AE056201170070BE48;
+                       6E2E17AF056201170070BE48 = 6E2E17AF056201170070BE48;
+                       6E2E17B0056201170070BE48 = 6E2E17B0056201170070BE48;
+                       6E2E17B1056201170070BE48 = 6E2E17B1056201170070BE48;
+                       6E3309E80575C22E0093550E = 6E3309E80575C22E0093550E;
+                       6E3309E90575C22E0093550E = 6E3309E90575C22E0093550E;
+                       6E3309EA0575C22E0093550E = 6E3309EA0575C22E0093550E;
+                       6E3309EB0575C22E0093550E = 6E3309EB0575C22E0093550E;
+                       6E3309EC0575C22E0093550E = 6E3309EC0575C22E0093550E;
+                       6E3309ED0575C22E0093550E = 6E3309ED0575C22E0093550E;
+                       6E3309EE0575C22E0093550E = 6E3309EE0575C22E0093550E;
+                       6E3309EF0575C22E0093550E = 6E3309EF0575C22E0093550E;
+                       6E3309F00575C22E0093550E = 6E3309F00575C22E0093550E;
+                       6E3309F10575C22E0093550E = 6E3309F10575C22E0093550E;
+                       6E3309F20575C22E0093550E = 6E3309F20575C22E0093550E;
+                       6E3309F30575C22E0093550E = 6E3309F30575C22E0093550E;
+                       6E3309F40575C22E0093550E = 6E3309F40575C22E0093550E;
+                       6E3309F50575C22E0093550E = 6E3309F50575C22E0093550E;
+                       6E3309F60575C22E0093550E = 6E3309F60575C22E0093550E;
+                       6E3309F70575C22E0093550E = 6E3309F70575C22E0093550E;
+                       6E3309F80575C22E0093550E = 6E3309F80575C22E0093550E;
+                       6E3309F90575C22E0093550E = 6E3309F90575C22E0093550E;
+                       6E3309FA0575C22E0093550E = 6E3309FA0575C22E0093550E;
+                       6E3309FB0575C22E0093550E = 6E3309FB0575C22E0093550E;
+                       6E3309FC0575C22E0093550E = 6E3309FC0575C22E0093550E;
+                       6E3309FD0575C22E0093550E = 6E3309FD0575C22E0093550E;
+                       6E3309FE0575C22E0093550E = 6E3309FE0575C22E0093550E;
+                       6E3309FF0575C22E0093550E = 6E3309FF0575C22E0093550E;
+                       6E330A000575C22E0093550E = 6E330A000575C22E0093550E;
+                       6E330A010575C22E0093550E = 6E330A010575C22E0093550E;
+                       6E330A020575C22E0093550E = 6E330A020575C22E0093550E;
+                       6E330A030575C22E0093550E = 6E330A030575C22E0093550E;
+                       6E330A040575C22E0093550E = 6E330A040575C22E0093550E;
+                       6E330A050575C22E0093550E = 6E330A050575C22E0093550E;
+                       6E330A060575C22E0093550E = 6E330A060575C22E0093550E;
+                       6E330A070575C22E0093550E = 6E330A070575C22E0093550E;
+                       6E330A080575C22E0093550E = 6E330A080575C22E0093550E;
+                       6E330A090575C22E0093550E = 6E330A090575C22E0093550E;
+                       6E330A0A0575C22E0093550E = 6E330A0A0575C22E0093550E;
+                       6E330A0B0575C22E0093550E = 6E330A0B0575C22E0093550E;
+                       6E330A0C0575C22E0093550E = 6E330A0C0575C22E0093550E;
+                       6E51A9060573258100506538 = 6E51A9060573258100506538;
+                       6E51A9070573258100506538 = 6E51A9070573258100506538;
+                       6E51A9080573258100506538 = 6E51A9080573258100506538;
+                       6E51A90C0573258100506538 = 6E51A90C0573258100506538;
+                       6E51A90D0573258100506538 = 6E51A90D0573258100506538;
+                       6E51A9120573258100506538 = 6E51A9120573258100506538;
+                       6E51A9130573258100506538 = 6E51A9130573258100506538;
+                       6E51A9140573258100506538 = 6E51A9140573258100506538;
+                       6E51A9150573258100506538 = 6E51A9150573258100506538;
+                       6E51A9160573258100506538 = 6E51A9160573258100506538;
+                       6E51A9170573258100506538 = 6E51A9170573258100506538;
+                       6E51A9180573258100506538 = 6E51A9180573258100506538;
+                       6E51A9190573258100506538 = 6E51A9190573258100506538;
+                       6E51A91A0573258100506538 = 6E51A91A0573258100506538;
+                       6E51A91B0573258100506538 = 6E51A91B0573258100506538;
+                       6E51A91C0573258100506538 = 6E51A91C0573258100506538;
+                       6E51A91D0573258100506538 = 6E51A91D0573258100506538;
+                       6E51A91E0573258100506538 = 6E51A91E0573258100506538;
+                       6E51A91F0573258100506538 = 6E51A91F0573258100506538;
+                       6E51A9200573258100506538 = 6E51A9200573258100506538;
+                       6E51A9210573258100506538 = 6E51A9210573258100506538;
+                       6E51A9220573258100506538 = 6E51A9220573258100506538;
+                       6E51A9230573258100506538 = 6E51A9230573258100506538;
+                       6E51A9240573258100506538 = 6E51A9240573258100506538;
+                       6E51A9250573258100506538 = 6E51A9250573258100506538;
+                       6E51A9260573258100506538 = 6E51A9260573258100506538;
+                       6E51A9270573258100506538 = 6E51A9270573258100506538;
+                       6E51A9280573258100506538 = 6E51A9280573258100506538;
+                       6E51A9290573258100506538 = 6E51A9290573258100506538;
+                       6E51A92A0573258100506538 = 6E51A92A0573258100506538;
+                       6E51A92B0573258100506538 = 6E51A92B0573258100506538;
+                       6E51A92C0573258100506538 = 6E51A92C0573258100506538;
+                       6E51A92D0573258100506538 = 6E51A92D0573258100506538;
+                       6E51A92E0573258100506538 = 6E51A92E0573258100506538;
+                       6E51A92F0573258100506538 = 6E51A92F0573258100506538;
+                       6E51A9300573258100506538 = 6E51A9300573258100506538;
+                       6E51A9310573258100506538 = 6E51A9310573258100506538;
+                       6E51A9320573258100506538 = 6E51A9320573258100506538;
+                       6E51A9330573258100506538 = 6E51A9330573258100506538;
+                       6E51A9340573258100506538 = 6E51A9340573258100506538;
+                       6E51A9350573258100506538 = 6E51A9350573258100506538;
+                       6E51A9360573258100506538 = 6E51A9360573258100506538;
+                       6E51A9370573258100506538 = 6E51A9370573258100506538;
+                       6E51A9380573258100506538 = 6E51A9380573258100506538;
+                       6E51A9390573258100506538 = 6E51A9390573258100506538;
+                       6E51A93A0573258100506538 = 6E51A93A0573258100506538;
+                       6E51A93B0573258100506538 = 6E51A93B0573258100506538;
+                       6E51A93C0573258100506538 = 6E51A93C0573258100506538;
+                       6E51A93D0573258100506538 = 6E51A93D0573258100506538;
+                       6E51A93E0573258100506538 = 6E51A93E0573258100506538;
+                       6E51A93F0573258100506538 = 6E51A93F0573258100506538;
+                       6E51A9400573258100506538 = 6E51A9400573258100506538;
+                       6E51A9410573258100506538 = 6E51A9410573258100506538;
+                       6E51A9420573258100506538 = 6E51A9420573258100506538;
+                       6E51A9430573258100506538 = 6E51A9430573258100506538;
+                       6E51A9440573258100506538 = 6E51A9440573258100506538;
+                       6E51A9450573258100506538 = 6E51A9450573258100506538;
+                       6E51A9460573258100506538 = 6E51A9460573258100506538;
+                       6E51A9470573258100506538 = 6E51A9470573258100506538;
+                       6E51A9480573258100506538 = 6E51A9480573258100506538;
+                       6E51A9490573258100506538 = 6E51A9490573258100506538;
+                       6E51A94A0573258100506538 = 6E51A94A0573258100506538;
+                       6E51A94B0573258100506538 = 6E51A94B0573258100506538;
+                       6E51A94C0573258100506538 = 6E51A94C0573258100506538;
+                       6E51A94D0573258100506538 = 6E51A94D0573258100506538;
+                       6E51A94E0573258100506538 = 6E51A94E0573258100506538;
+                       6E51A94F0573258100506538 = 6E51A94F0573258100506538;
+                       6E51A9500573258100506538 = 6E51A9500573258100506538;
+                       6E51A9510573258100506538 = 6E51A9510573258100506538;
+                       6E51A9520573258100506538 = 6E51A9520573258100506538;
+                       6E51A9530573258100506538 = 6E51A9530573258100506538;
+                       6E51A9540573258100506538 = 6E51A9540573258100506538;
+                       6E51A9550573258100506538 = 6E51A9550573258100506538;
+                       6E51A9560573258100506538 = 6E51A9560573258100506538;
+                       6E51A9570573258100506538 = 6E51A9570573258100506538;
+                       6E51A9580573258100506538 = 6E51A9580573258100506538;
+                       6E51A9590573258100506538 = 6E51A9590573258100506538;
+                       6E51A95A0573258100506538 = 6E51A95A0573258100506538;
+                       6E51A95B0573258100506538 = 6E51A95B0573258100506538;
+                       6E51A95C0573258100506538 = 6E51A95C0573258100506538;
+                       6E51A95D0573258100506538 = 6E51A95D0573258100506538;
+                       6E51A95E0573258100506538 = 6E51A95E0573258100506538;
+                       6E51A95F0573258100506538 = 6E51A95F0573258100506538;
+                       6E51A9600573258100506538 = 6E51A9600573258100506538;
+                       6E51A9610573258100506538 = 6E51A9610573258100506538;
+                       6E51A9620573258100506538 = 6E51A9620573258100506538;
+                       6E51A9630573258100506538 = 6E51A9630573258100506538;
+                       6E51A9640573258100506538 = 6E51A9640573258100506538;
+                       6E51A9650573258100506538 = 6E51A9650573258100506538;
+                       6E51A9660573258100506538 = 6E51A9660573258100506538;
+                       6E51A9670573258100506538 = 6E51A9670573258100506538;
+                       6E51A9A00573385700506538 = 6E51A9A00573385700506538;
+                       6E51A9A20573385700506538 = 6E51A9A20573385700506538;
+                       6E51A9A30573385700506538 = 6E51A9A30573385700506538;
+                       6E51A9A40573385700506538 = 6E51A9A40573385700506538;
+                       6E51A9A50573385700506538 = 6E51A9A50573385700506538;
+                       6E51A9A60573385700506538 = 6E51A9A60573385700506538;
+                       6E51A9A70573385700506538 = 6E51A9A70573385700506538;
+                       6E51A9A80573385700506538 = 6E51A9A80573385700506538;
+                       6E51A9AD0573385700506538 = 6E51A9AD0573385700506538;
+                       6E51A9AE0573385700506538 = 6E51A9AE0573385700506538;
+                       6E51A9B00573385700506538 = 6E51A9B00573385700506538;
+                       6E51A9B10573385700506538 = 6E51A9B10573385700506538;
+                       6E51A9B20573385700506538 = 6E51A9B20573385700506538;
+                       6E51A9B30573385700506538 = 6E51A9B30573385700506538;
+                       6E51A9B40573385700506538 = 6E51A9B40573385700506538;
+                       6E51A9B50573385700506538 = 6E51A9B50573385700506538;
+                       6E51A9B60573385700506538 = 6E51A9B60573385700506538;
+                       6E51A9B70573385700506538 = 6E51A9B70573385700506538;
+                       6E51A9B80573385700506538 = 6E51A9B80573385700506538;
+                       6E51A9B90573385700506538 = 6E51A9B90573385700506538;
+                       6E51A9BA0573385700506538 = 6E51A9BA0573385700506538;
+                       6E51A9BB0573385700506538 = 6E51A9BB0573385700506538;
+                       6E51A9BC0573385700506538 = 6E51A9BC0573385700506538;
+                       6E51A9BD0573385700506538 = 6E51A9BD0573385700506538;
+                       6E51A9BE0573385700506538 = 6E51A9BE0573385700506538;
+                       6E51A9BF0573385700506538 = 6E51A9BF0573385700506538;
+                       6E51A9C00573385700506538 = 6E51A9C00573385700506538;
+                       6E51A9C10573385700506538 = 6E51A9C10573385700506538;
+                       6E51A9C20573385700506538 = 6E51A9C20573385700506538;
+                       6E51A9C30573385700506538 = 6E51A9C30573385700506538;
+                       6E51A9C40573385700506538 = 6E51A9C40573385700506538;
+                       6E51A9C50573385700506538 = 6E51A9C50573385700506538;
+                       6E51A9C60573385700506538 = 6E51A9C60573385700506538;
+                       6E51A9C70573385700506538 = 6E51A9C70573385700506538;
+                       6E51A9C80573385700506538 = 6E51A9C80573385700506538;
+                       6E51A9C90573385700506538 = 6E51A9C90573385700506538;
+                       6E51A9CA0573385700506538 = 6E51A9CA0573385700506538;
+                       6E51A9CB0573385700506538 = 6E51A9CB0573385700506538;
+                       6E51A9CC0573385700506538 = 6E51A9CC0573385700506538;
+                       6E51A9CD0573385700506538 = 6E51A9CD0573385700506538;
+                       6E51A9CE0573385700506538 = 6E51A9CE0573385700506538;
+                       6E51A9CF0573385700506538 = 6E51A9CF0573385700506538;
+                       6E51A9D00573385700506538 = 6E51A9D00573385700506538;
+                       6E51A9D10573385700506538 = 6E51A9D10573385700506538;
+                       6E51A9D20573385700506538 = 6E51A9D20573385700506538;
+                       6E51A9D30573385700506538 = 6E51A9D30573385700506538;
+                       6E51A9D40573385700506538 = 6E51A9D40573385700506538;
+                       6E51A9D50573385700506538 = 6E51A9D50573385700506538;
+                       6E51A9D60573385700506538 = 6E51A9D60573385700506538;
+                       6E51A9D70573385700506538 = 6E51A9D70573385700506538;
+                       6E51A9D80573385700506538 = 6E51A9D80573385700506538;
+                       6E51A9D90573385700506538 = 6E51A9D90573385700506538;
+                       6E51A9DA0573385700506538 = 6E51A9DA0573385700506538;
+                       6E51A9DB0573385700506538 = 6E51A9DB0573385700506538;
+                       6E51A9DC0573385700506538 = 6E51A9DC0573385700506538;
+                       6E51A9DD0573385700506538 = 6E51A9DD0573385700506538;
+                       6E51A9DE0573385700506538 = 6E51A9DE0573385700506538;
+                       6E51A9DF0573385700506538 = 6E51A9DF0573385700506538;
+                       6E51A9E00573385700506538 = 6E51A9E00573385700506538;
+                       6E51A9E10573385700506538 = 6E51A9E10573385700506538;
+                       6E51A9E20573385700506538 = 6E51A9E20573385700506538;
+                       6E51A9E30573385700506538 = 6E51A9E30573385700506538;
+                       6E51A9E40573385700506538 = 6E51A9E40573385700506538;
+                       6E51A9E50573385700506538 = 6E51A9E50573385700506538;
+                       6E51A9E60573385700506538 = 6E51A9E60573385700506538;
+                       6E51A9E70573385700506538 = 6E51A9E70573385700506538;
+                       6E51A9E80573385700506538 = 6E51A9E80573385700506538;
+                       6E51A9E90573385700506538 = 6E51A9E90573385700506538;
+                       6E51A9EA0573385700506538 = 6E51A9EA0573385700506538;
+                       6E5EC36705633214001E3A3E = 6E5EC36705633214001E3A3E;
+                       6E5EC36905633214001E3A3E = 6E5EC36905633214001E3A3E;
+                       6E5EC36C05633214001E3A3E = 6E5EC36C05633214001E3A3E;
+                       6E5EC36D05633214001E3A3E = 6E5EC36D05633214001E3A3E;
+                       6E5EC37005633214001E3A3E = 6E5EC37005633214001E3A3E;
+                       6E5EC37105633214001E3A3E = 6E5EC37105633214001E3A3E;
+                       6E5EC37205633214001E3A3E = 6E5EC37205633214001E3A3E;
+                       6E5EC37305633214001E3A3E = 6E5EC37305633214001E3A3E;
+                       6E5EC37405633214001E3A3E = 6E5EC37405633214001E3A3E;
+                       6E5EC37505633214001E3A3E = 6E5EC37505633214001E3A3E;
+                       6E5EC37605633214001E3A3E = 6E5EC37605633214001E3A3E;
+                       6E5EC37705633214001E3A3E = 6E5EC37705633214001E3A3E;
+                       6E5EC37805633214001E3A3E = 6E5EC37805633214001E3A3E;
+                       6E5EC37905633214001E3A3E = 6E5EC37905633214001E3A3E;
+                       6E5EC37A05633214001E3A3E = 6E5EC37A05633214001E3A3E;
+                       6E5EC37B05633214001E3A3E = 6E5EC37B05633214001E3A3E;
+                       6E5EC37C05633214001E3A3E = 6E5EC37C05633214001E3A3E;
+                       6E5EC37D05633214001E3A3E = 6E5EC37D05633214001E3A3E;
+                       6E5EC37E05633214001E3A3E = 6E5EC37E05633214001E3A3E;
+                       6E5EC37F05633214001E3A3E = 6E5EC37F05633214001E3A3E;
+                       6E5EC38005633214001E3A3E = 6E5EC38005633214001E3A3E;
+                       6E5EC38105633214001E3A3E = 6E5EC38105633214001E3A3E;
+                       6E5EC38205633214001E3A3E = 6E5EC38205633214001E3A3E;
+                       6E5EC38305633214001E3A3E = 6E5EC38305633214001E3A3E;
+                       6E5EC38405633214001E3A3E = 6E5EC38405633214001E3A3E;
+                       6E5EC38505633214001E3A3E = 6E5EC38505633214001E3A3E;
+                       6E5EC38605633214001E3A3E = 6E5EC38605633214001E3A3E;
+                       6E5EC38705633214001E3A3E = 6E5EC38705633214001E3A3E;
+                       6E5EC38805633214001E3A3E = 6E5EC38805633214001E3A3E;
+                       6E5EC38905633214001E3A3E = 6E5EC38905633214001E3A3E;
+                       6E5EC38A05633214001E3A3E = 6E5EC38A05633214001E3A3E;
+                       6E5EC38B05633214001E3A3E = 6E5EC38B05633214001E3A3E;
+                       6E5EC38C05633214001E3A3E = 6E5EC38C05633214001E3A3E;
+                       6E5EC38D05633214001E3A3E = 6E5EC38D05633214001E3A3E;
+                       6E5EC38E05633214001E3A3E = 6E5EC38E05633214001E3A3E;
+                       6E5EC38F05633214001E3A3E = 6E5EC38F05633214001E3A3E;
+                       6E5EC39005633214001E3A3E = 6E5EC39005633214001E3A3E;
+                       6E5EC39105633214001E3A3E = 6E5EC39105633214001E3A3E;
+                       6E5EC39205633214001E3A3E = 6E5EC39205633214001E3A3E;
+                       6E5EC39305633214001E3A3E = 6E5EC39305633214001E3A3E;
+                       6E5EC39405633214001E3A3E = 6E5EC39405633214001E3A3E;
+                       6E5EC39505633214001E3A3E = 6E5EC39505633214001E3A3E;
+                       6E5EC39605633214001E3A3E = 6E5EC39605633214001E3A3E;
+                       6E5EC39705633214001E3A3E = 6E5EC39705633214001E3A3E;
+                       6E5EC39805633214001E3A3E = 6E5EC39805633214001E3A3E;
+                       6E5EC39905633214001E3A3E = 6E5EC39905633214001E3A3E;
+                       6E5EC39A05633214001E3A3E = 6E5EC39A05633214001E3A3E;
+                       6E5EC39B05633214001E3A3E = 6E5EC39B05633214001E3A3E;
+                       6E5EC39C05633214001E3A3E = 6E5EC39C05633214001E3A3E;
+                       6E5EC39D05633214001E3A3E = 6E5EC39D05633214001E3A3E;
+                       6E5EC39E05633214001E3A3E = 6E5EC39E05633214001E3A3E;
+                       6E5EC39F05633214001E3A3E = 6E5EC39F05633214001E3A3E;
+                       6E5EC3A005633214001E3A3E = 6E5EC3A005633214001E3A3E;
+                       6E5EC3A105633214001E3A3E = 6E5EC3A105633214001E3A3E;
+                       6E5EC3A205633214001E3A3E = 6E5EC3A205633214001E3A3E;
+                       6E5EC3A305633214001E3A3E = 6E5EC3A305633214001E3A3E;
+                       6E5EC3A405633214001E3A3E = 6E5EC3A405633214001E3A3E;
+                       6E5EC3A505633214001E3A3E = 6E5EC3A505633214001E3A3E;
+                       6E5EC3A605633214001E3A3E = 6E5EC3A605633214001E3A3E;
+                       6E5EC3A705633214001E3A3E = 6E5EC3A705633214001E3A3E;
+                       6E5EC3A805633214001E3A3E = 6E5EC3A805633214001E3A3E;
+                       6E5EC3A905633214001E3A3E = 6E5EC3A905633214001E3A3E;
+                       6E5EC3AA05633214001E3A3E = 6E5EC3AA05633214001E3A3E;
+                       6E5EC3AB05633214001E3A3E = 6E5EC3AB05633214001E3A3E;
+                       6E5EC3AC05633214001E3A3E = 6E5EC3AC05633214001E3A3E;
+                       6E5EC3AD05633214001E3A3E = 6E5EC3AD05633214001E3A3E;
+                       6E5EC3AE05633214001E3A3E = 6E5EC3AE05633214001E3A3E;
+                       6E5EC3AF05633214001E3A3E = 6E5EC3AF05633214001E3A3E;
+                       6E5EC3B005633214001E3A3E = 6E5EC3B005633214001E3A3E;
+                       6E5EC3B105633214001E3A3E = 6E5EC3B105633214001E3A3E;
+                       6E5EC3B205633214001E3A3E = 6E5EC3B205633214001E3A3E;
+                       6E5EC3B305633214001E3A3E = 6E5EC3B305633214001E3A3E;
+                       6E5EC3B405633214001E3A3E = 6E5EC3B405633214001E3A3E;
+                       6E5EC3B505633214001E3A3E = 6E5EC3B505633214001E3A3E;
+                       6E5EC3B605633214001E3A3E = 6E5EC3B605633214001E3A3E;
+                       6E5EC3B705633214001E3A3E = 6E5EC3B705633214001E3A3E;
+                       6E5EC3B805633214001E3A3E = 6E5EC3B805633214001E3A3E;
+                       6E5EC3B905633214001E3A3E = 6E5EC3B905633214001E3A3E;
+                       6E5EC3BA05633214001E3A3E = 6E5EC3BA05633214001E3A3E;
+                       6E5EC3BB05633214001E3A3E = 6E5EC3BB05633214001E3A3E;
+                       6E5EC3BC05633214001E3A3E = 6E5EC3BC05633214001E3A3E;
+                       6E6126C7056B3091006177EC = 6E6126C7056B3091006177EC;
+                       6E6126C8056B3091006177EC = 6E6126C8056B3091006177EC;
+                       6E6126C9056B3091006177EC = 6E6126C9056B3091006177EC;
+                       6E6126CB056B3091006177EC = 6E6126CB056B3091006177EC;
+                       6E6126CC056B3091006177EC = 6E6126CC056B3091006177EC;
+                       6E6126CD056B3091006177EC = 6E6126CD056B3091006177EC;
+                       6E6126CE056B3091006177EC = 6E6126CE056B3091006177EC;
+                       6E6126CF056B3091006177EC = 6E6126CF056B3091006177EC;
+                       6E6126D0056B3091006177EC = 6E6126D0056B3091006177EC;
+                       6E6126D1056B3091006177EC = 6E6126D1056B3091006177EC;
+                       6E6126D2056B3091006177EC = 6E6126D2056B3091006177EC;
+                       6E6126D3056B3091006177EC = 6E6126D3056B3091006177EC;
+                       6E6126D4056B3091006177EC = 6E6126D4056B3091006177EC;
+                       6E6126D5056B3091006177EC = 6E6126D5056B3091006177EC;
+                       6E6126D6056B3091006177EC = 6E6126D6056B3091006177EC;
+                       6E6126D7056B3091006177EC = 6E6126D7056B3091006177EC;
+                       6E6126D8056B3091006177EC = 6E6126D8056B3091006177EC;
+                       6E6126DA056B3091006177EC = 6E6126DA056B3091006177EC;
+                       6E6126DB056B3091006177EC = 6E6126DB056B3091006177EC;
+                       6E6126DC056B3091006177EC = 6E6126DC056B3091006177EC;
+                       6E6126DD056B3091006177EC = 6E6126DD056B3091006177EC;
+                       6E6126DE056B3091006177EC = 6E6126DE056B3091006177EC;
+                       6E6126DF056B3091006177EC = 6E6126DF056B3091006177EC;
+                       6E6126E0056B3091006177EC = 6E6126E0056B3091006177EC;
+                       6E6126E1056B3091006177EC = 6E6126E1056B3091006177EC;
+                       6E6126E2056B3091006177EC = 6E6126E2056B3091006177EC;
+                       6E6126E3056B3091006177EC = 6E6126E3056B3091006177EC;
+                       6E6126E4056B3091006177EC = 6E6126E4056B3091006177EC;
+                       6E6126E7056B3091006177EC = 6E6126E7056B3091006177EC;
+                       6E6126E8056B3091006177EC = 6E6126E8056B3091006177EC;
+                       6E6126E9056B3091006177EC = 6E6126E9056B3091006177EC;
+                       6E6126EA056B3091006177EC = 6E6126EA056B3091006177EC;
+                       6E6126EB056B3091006177EC = 6E6126EB056B3091006177EC;
+                       6E6126EC056B3091006177EC = 6E6126EC056B3091006177EC;
+                       6E6126ED056B3091006177EC = 6E6126ED056B3091006177EC;
+                       6E6126EE056B3091006177EC = 6E6126EE056B3091006177EC;
+                       6E6126EF056B3091006177EC = 6E6126EF056B3091006177EC;
+                       6E6126F0056B3091006177EC = 6E6126F0056B3091006177EC;
+                       6E6126F1056B3091006177EC = 6E6126F1056B3091006177EC;
+                       6E6126F2056B3091006177EC = 6E6126F2056B3091006177EC;
+                       6E6126F3056B3091006177EC = 6E6126F3056B3091006177EC;
+                       6E6126F4056B3091006177EC = 6E6126F4056B3091006177EC;
+                       6E6126F5056B3091006177EC = 6E6126F5056B3091006177EC;
+                       6E6126F6056B3091006177EC = 6E6126F6056B3091006177EC;
+                       6E6126F7056B3091006177EC = 6E6126F7056B3091006177EC;
+                       6E6126F8056B3091006177EC = 6E6126F8056B3091006177EC;
+                       6E6126F9056B3091006177EC = 6E6126F9056B3091006177EC;
+                       6E6126FA056B3091006177EC = 6E6126FA056B3091006177EC;
+                       6E6126FB056B3091006177EC = 6E6126FB056B3091006177EC;
+                       6E6126FC056B3091006177EC = 6E6126FC056B3091006177EC;
+                       6E6126FD056B3091006177EC = 6E6126FD056B3091006177EC;
+                       6E6126FE056B3091006177EC = 6E6126FE056B3091006177EC;
+                       6E6126FF056B3091006177EC = 6E6126FF056B3091006177EC;
+                       6E612700056B3091006177EC = 6E612700056B3091006177EC;
+                       6E612701056B3091006177EC = 6E612701056B3091006177EC;
+                       6E612702056B3091006177EC = 6E612702056B3091006177EC;
+                       6E612703056B3091006177EC = 6E612703056B3091006177EC;
+                       6E612704056B3091006177EC = 6E612704056B3091006177EC;
+                       6E612705056B3091006177EC = 6E612705056B3091006177EC;
+                       6E612706056B3091006177EC = 6E612706056B3091006177EC;
+                       6E612707056B3091006177EC = 6E612707056B3091006177EC;
+                       6E612708056B3091006177EC = 6E612708056B3091006177EC;
+                       6E612709056B3091006177EC = 6E612709056B3091006177EC;
+                       6E61270A056B3091006177EC = 6E61270A056B3091006177EC;
+                       6E61270B056B3091006177EC = 6E61270B056B3091006177EC;
+                       6E61270C056B3091006177EC = 6E61270C056B3091006177EC;
+                       6E61270D056B3091006177EC = 6E61270D056B3091006177EC;
+                       6E61270E056B3091006177EC = 6E61270E056B3091006177EC;
+                       6E61270F056B3091006177EC = 6E61270F056B3091006177EC;
+                       6E612710056B3091006177EC = 6E612710056B3091006177EC;
+                       6E612711056B3091006177EC = 6E612711056B3091006177EC;
+                       6E612712056B3091006177EC = 6E612712056B3091006177EC;
+                       6E612713056B3091006177EC = 6E612713056B3091006177EC;
+                       6E612714056B3091006177EC = 6E612714056B3091006177EC;
+                       6E81662F0559E79E00377CF7 = 6E81662F0559E79E00377CF7;
+                       6E8166300559E79E00377CF7 = 6E8166300559E79E00377CF7;
+                       6E8166310559E79E00377CF7 = 6E8166310559E79E00377CF7;
+                       6E8166320559E79E00377CF7 = 6E8166320559E79E00377CF7;
+                       6E8166330559E79E00377CF7 = 6E8166330559E79E00377CF7;
+                       6E8166340559E79E00377CF7 = 6E8166340559E79E00377CF7;
+                       6E8166350559E79E00377CF7 = 6E8166350559E79E00377CF7;
+                       6E8166370559E79E00377CF7 = 6E8166370559E79E00377CF7;
+                       6E8166380559E79E00377CF7 = 6E8166380559E79E00377CF7;
+                       6E8166390559E79E00377CF7 = 6E8166390559E79E00377CF7;
+                       6E81663A0559E79E00377CF7 = 6E81663A0559E79E00377CF7;
+                       6E81663C0559E79E00377CF7 = 6E81663C0559E79E00377CF7;
+                       6E81663E0559E79E00377CF7 = 6E81663E0559E79E00377CF7;
+                       6E81663F0559E79E00377CF7 = 6E81663F0559E79E00377CF7;
+                       6E8166410559E79E00377CF7 = 6E8166410559E79E00377CF7;
+                       6E8166430559E79E00377CF7 = 6E8166430559E79E00377CF7;
+                       6E8166450559E79E00377CF7 = 6E8166450559E79E00377CF7;
+                       6E8166460559E79E00377CF7 = 6E8166460559E79E00377CF7;
+                       6E8166480559E79E00377CF7 = 6E8166480559E79E00377CF7;
+                       6E8166890559F3BD00377CF7 = 6E8166890559F3BD00377CF7;
+                       6E81668B0559F3BD00377CF7 = 6E81668B0559F3BD00377CF7;
+                       6E81668C0559F3BD00377CF7 = 6E81668C0559F3BD00377CF7;
+                       6E81668E0559F3BD00377CF7 = 6E81668E0559F3BD00377CF7;
+                       6E8166900559F3BD00377CF7 = 6E8166900559F3BD00377CF7;
+                       6E8166920559F3BD00377CF7 = 6E8166920559F3BD00377CF7;
+                       6E8166940559F3BD00377CF7 = 6E8166940559F3BD00377CF7;
+                       6E8166960559F3BD00377CF7 = 6E8166960559F3BD00377CF7;
+                       6E8166980559F3BD00377CF7 = 6E8166980559F3BD00377CF7;
+                       6E81669A0559F3BD00377CF7 = 6E81669A0559F3BD00377CF7;
+                       6E81669C0559F3BD00377CF7 = 6E81669C0559F3BD00377CF7;
+                       6E81669E0559F3BD00377CF7 = 6E81669E0559F3BD00377CF7;
+                       6E8166A00559F3BD00377CF7 = 6E8166A00559F3BD00377CF7;
+                       6E8166A20559F3BD00377CF7 = 6E8166A20559F3BD00377CF7;
+                       6E8166A30559F3BD00377CF7 = 6E8166A30559F3BD00377CF7;
+                       6E8166A50559F3BD00377CF7 = 6E8166A50559F3BD00377CF7;
+                       6E84B8F20558B3480001B5EB = 6E84B8F20558B3480001B5EB;
+                       6E84B8F30558B3480001B5EB = 6E84B8F30558B3480001B5EB;
+                       6E84B8F40558B3480001B5EB = 6E84B8F40558B3480001B5EB;
+                       6E84B8F80558B3480001B5EB = 6E84B8F80558B3480001B5EB;
+                       6E84B8FE0558B3480001B5EB = 6E84B8FE0558B3480001B5EB;
+                       6E84B8FF0558B3480001B5EB = 6E84B8FF0558B3480001B5EB;
+                       6E84B9000558B3480001B5EB = 6E84B9000558B3480001B5EB;
+                       6E84B9010558B3480001B5EB = 6E84B9010558B3480001B5EB;
+                       6E84B9020558B3480001B5EB = 6E84B9020558B3480001B5EB;
+                       6E84B9030558B3480001B5EB = 6E84B9030558B3480001B5EB;
+                       6E84B9040558B3480001B5EB = 6E84B9040558B3480001B5EB;
+                       6E84B9050558B3480001B5EB = 6E84B9050558B3480001B5EB;
+                       6E84B9060558B3480001B5EB = 6E84B9060558B3480001B5EB;
+                       6E84B9070558B3480001B5EB = 6E84B9070558B3480001B5EB;
+                       6E84B9080558B3480001B5EB = 6E84B9080558B3480001B5EB;
+                       6E84B9090558B3480001B5EB = 6E84B9090558B3480001B5EB;
+                       6E84B90A0558B3480001B5EB = 6E84B90A0558B3480001B5EB;
+                       6E84B90B0558B3480001B5EB = 6E84B90B0558B3480001B5EB;
+                       6E84B90C0558B3480001B5EB = 6E84B90C0558B3480001B5EB;
+                       6E84B90D0558B3480001B5EB = 6E84B90D0558B3480001B5EB;
+                       6E84B90E0558B3480001B5EB = 6E84B90E0558B3480001B5EB;
+                       6E84B90F0558B3480001B5EB = 6E84B90F0558B3480001B5EB;
+                       6E84B9100558B3480001B5EB = 6E84B9100558B3480001B5EB;
+                       6E84B9110558B3480001B5EB = 6E84B9110558B3480001B5EB;
+                       6E84B9120558B3480001B5EB = 6E84B9120558B3480001B5EB;
+                       6E84B9130558B3480001B5EB = 6E84B9130558B3480001B5EB;
+                       6E84B9140558B3480001B5EB = 6E84B9140558B3480001B5EB;
+                       6E84B9160558B3480001B5EB = 6E84B9160558B3480001B5EB;
+                       6E84B9180558B3480001B5EB = 6E84B9180558B3480001B5EB;
+                       6E84B91A0558B3480001B5EB = 6E84B91A0558B3480001B5EB;
+                       6E84B91C0558B3480001B5EB = 6E84B91C0558B3480001B5EB;
+                       6E84B91D0558B3480001B5EB = 6E84B91D0558B3480001B5EB;
+                       6E84B91E0558B3480001B5EB = 6E84B91E0558B3480001B5EB;
+                       6E84B91F0558B3480001B5EB = 6E84B91F0558B3480001B5EB;
+                       6E84B9210558B3480001B5EB = 6E84B9210558B3480001B5EB;
+                       6E84B9230558B3480001B5EB = 6E84B9230558B3480001B5EB;
+                       6E84B9240558B3480001B5EB = 6E84B9240558B3480001B5EB;
+                       6E9F392A0569DB90007C1A1C = 6E9F392A0569DB90007C1A1C;
+                       6E9F392B0569DB90007C1A1C = 6E9F392B0569DB90007C1A1C;
+                       6EB8529F057476DD00E260EA = 6EB8529F057476DD00E260EA;
+                       6EB852A0057476DD00E260EA = 6EB852A0057476DD00E260EA;
+                       6EB852A1057476DD00E260EA = 6EB852A1057476DD00E260EA;
+                       6EB852A3057476DD00E260EA = 6EB852A3057476DD00E260EA;
+                       6EB852A4057476DD00E260EA = 6EB852A4057476DD00E260EA;
+                       6EB852A5057476DD00E260EA = 6EB852A5057476DD00E260EA;
+                       6EB852A6057476DD00E260EA = 6EB852A6057476DD00E260EA;
+                       6EB852A9057476DD00E260EA = 6EB852A9057476DD00E260EA;
+                       6EB852AC057476DD00E260EA = 6EB852AC057476DD00E260EA;
+                       6EB852AD057476DD00E260EA = 6EB852AD057476DD00E260EA;
+                       6EB852AE057476DD00E260EA = 6EB852AE057476DD00E260EA;
+                       6EB852AF057476DD00E260EA = 6EB852AF057476DD00E260EA;
+                       6EB852B0057476DD00E260EA = 6EB852B0057476DD00E260EA;
+                       6EB852B1057476DD00E260EA = 6EB852B1057476DD00E260EA;
+                       6EB852B2057476DD00E260EA = 6EB852B2057476DD00E260EA;
+                       6EB852B3057476DD00E260EA = 6EB852B3057476DD00E260EA;
+                       6EB852B4057476DD00E260EA = 6EB852B4057476DD00E260EA;
+                       6EB852B5057476DD00E260EA = 6EB852B5057476DD00E260EA;
+                       6EB852B6057476DD00E260EA = 6EB852B6057476DD00E260EA;
+                       6EB852B7057476DD00E260EA = 6EB852B7057476DD00E260EA;
+                       6EB852B8057476DD00E260EA = 6EB852B8057476DD00E260EA;
+                       6EB852B9057476DD00E260EA = 6EB852B9057476DD00E260EA;
+                       6EB852BA057476DD00E260EA = 6EB852BA057476DD00E260EA;
+                       6EB852BB057476DD00E260EA = 6EB852BB057476DD00E260EA;
+                       6EB852BC057476DD00E260EA = 6EB852BC057476DD00E260EA;
+                       6EB852BD057476DD00E260EA = 6EB852BD057476DD00E260EA;
+                       6EB852BE057476DD00E260EA = 6EB852BE057476DD00E260EA;
+                       6EB852BF057476DD00E260EA = 6EB852BF057476DD00E260EA;
+                       6EB852C0057476DD00E260EA = 6EB852C0057476DD00E260EA;
+                       6EB852C1057476DD00E260EA = 6EB852C1057476DD00E260EA;
+                       6EB852C2057476DD00E260EA = 6EB852C2057476DD00E260EA;
+                       6EB852C3057476DD00E260EA = 6EB852C3057476DD00E260EA;
+                       6EB852C4057476DD00E260EA = 6EB852C4057476DD00E260EA;
+                       6EB852C5057476DD00E260EA = 6EB852C5057476DD00E260EA;
+                       6EB852C6057476DD00E260EA = 6EB852C6057476DD00E260EA;
+                       6EB852C7057476DD00E260EA = 6EB852C7057476DD00E260EA;
+                       6EB852C8057476DD00E260EA = 6EB852C8057476DD00E260EA;
+                       6EB852C9057476DD00E260EA = 6EB852C9057476DD00E260EA;
+                       6EB852CA057476DD00E260EA = 6EB852CA057476DD00E260EA;
+                       6EB852CB057476DD00E260EA = 6EB852CB057476DD00E260EA;
+                       6EB852CC057476DD00E260EA = 6EB852CC057476DD00E260EA;
+                       6EB852CD057476DD00E260EA = 6EB852CD057476DD00E260EA;
+                       6EB852CE057476DD00E260EA = 6EB852CE057476DD00E260EA;
+                       6EB852CF057476DD00E260EA = 6EB852CF057476DD00E260EA;
+                       6EB852D0057476DD00E260EA = 6EB852D0057476DD00E260EA;
+                       6EB852D1057476DD00E260EA = 6EB852D1057476DD00E260EA;
+                       6EB852D2057476DD00E260EA = 6EB852D2057476DD00E260EA;
+                       6EB852D3057476DD00E260EA = 6EB852D3057476DD00E260EA;
+                       6EB852D4057476DD00E260EA = 6EB852D4057476DD00E260EA;
+                       6EB852D5057476DD00E260EA = 6EB852D5057476DD00E260EA;
+                       6EB852D6057476DD00E260EA = 6EB852D6057476DD00E260EA;
+                       6EB852D7057476DD00E260EA = 6EB852D7057476DD00E260EA;
+                       6EB852D8057476DD00E260EA = 6EB852D8057476DD00E260EA;
+                       6EB852D9057476DD00E260EA = 6EB852D9057476DD00E260EA;
+                       6EB852DA057476DD00E260EA = 6EB852DA057476DD00E260EA;
+                       6EB852DB057476DD00E260EA = 6EB852DB057476DD00E260EA;
+                       6EB852DC057476DD00E260EA = 6EB852DC057476DD00E260EA;
+                       6EB852DD057476DD00E260EA = 6EB852DD057476DD00E260EA;
+                       6EB852DE057476DD00E260EA = 6EB852DE057476DD00E260EA;
+                       6EB852DF057476DD00E260EA = 6EB852DF057476DD00E260EA;
+                       6EB852E0057476DD00E260EA = 6EB852E0057476DD00E260EA;
+                       6EB852E1057476DD00E260EA = 6EB852E1057476DD00E260EA;
+                       6EB852E2057476DD00E260EA = 6EB852E2057476DD00E260EA;
+                       6EB852E3057476DD00E260EA = 6EB852E3057476DD00E260EA;
+                       6EB852E4057476DD00E260EA = 6EB852E4057476DD00E260EA;
+                       6EE0048A0560B42800F8A5B1 = 6EE0048A0560B42800F8A5B1;
+                       6EE004950560B42800F8A5B1 = 6EE004950560B42800F8A5B1;
+                       6EE004960560B42800F8A5B1 = 6EE004960560B42800F8A5B1;
+                       6EE004970560B42800F8A5B1 = 6EE004970560B42800F8A5B1;
+                       6EE004980560B42800F8A5B1 = 6EE004980560B42800F8A5B1;
+                       6EE004990560B42800F8A5B1 = 6EE004990560B42800F8A5B1;
+                       6EE0049A0560B42800F8A5B1 = 6EE0049A0560B42800F8A5B1;
+                       6EE0049B0560B42800F8A5B1 = 6EE0049B0560B42800F8A5B1;
+                       6EE0049C0560B42800F8A5B1 = 6EE0049C0560B42800F8A5B1;
+                       6EE0049D0560B42800F8A5B1 = 6EE0049D0560B42800F8A5B1;
+                       6EE0049E0560B42800F8A5B1 = 6EE0049E0560B42800F8A5B1;
+                       6EE0049F0560B42800F8A5B1 = 6EE0049F0560B42800F8A5B1;
+                       6EE004A00560B42800F8A5B1 = 6EE004A00560B42800F8A5B1;
+                       6EE004A10560B42800F8A5B1 = 6EE004A10560B42800F8A5B1;
+                       6EE004A20560B42800F8A5B1 = 6EE004A20560B42800F8A5B1;
+                       6EE004A30560B42800F8A5B1 = 6EE004A30560B42800F8A5B1;
+                       6EE004A40560B42800F8A5B1 = 6EE004A40560B42800F8A5B1;
+                       6EE004A50560B42800F8A5B1 = 6EE004A50560B42800F8A5B1;
+                       6EE004A60560B42800F8A5B1 = 6EE004A60560B42800F8A5B1;
+                       6EE004A70560B42800F8A5B1 = 6EE004A70560B42800F8A5B1;
+                       6EE004A80560B42800F8A5B1 = 6EE004A80560B42800F8A5B1;
+                       6EE004A90560B42800F8A5B1 = 6EE004A90560B42800F8A5B1;
+                       6EE004AA0560B42800F8A5B1 = 6EE004AA0560B42800F8A5B1;
+                       6EE004AB0560B42800F8A5B1 = 6EE004AB0560B42800F8A5B1;
+                       6EE004AC0560B42800F8A5B1 = 6EE004AC0560B42800F8A5B1;
+                       6EE004AD0560B42800F8A5B1 = 6EE004AD0560B42800F8A5B1;
+                       6EE004AE0560B42800F8A5B1 = 6EE004AE0560B42800F8A5B1;
+                       6EE004AF0560B42800F8A5B1 = 6EE004AF0560B42800F8A5B1;
+                       6EE004B00560B42800F8A5B1 = 6EE004B00560B42800F8A5B1;
+                       6EE004B10560B42800F8A5B1 = 6EE004B10560B42800F8A5B1;
+                       6EE004B20560B42800F8A5B1 = 6EE004B20560B42800F8A5B1;
+                       6EE004B30560B42800F8A5B1 = 6EE004B30560B42800F8A5B1;
+                       6EE004B40560B42800F8A5B1 = 6EE004B40560B42800F8A5B1;
+                       6EE004B50560B42800F8A5B1 = 6EE004B50560B42800F8A5B1;
+                       6EE004B60560B42800F8A5B1 = 6EE004B60560B42800F8A5B1;
+                       6EE004B70560B42800F8A5B1 = 6EE004B70560B42800F8A5B1;
+                       6EE004B80560B42800F8A5B1 = 6EE004B80560B42800F8A5B1;
+                       6EE004B90560B42800F8A5B1 = 6EE004B90560B42800F8A5B1;
+                       6EE004BA0560B42800F8A5B1 = 6EE004BA0560B42800F8A5B1;
+                       6EE004BB0560B42800F8A5B1 = 6EE004BB0560B42800F8A5B1;
+                       6EE004BC0560B42800F8A5B1 = 6EE004BC0560B42800F8A5B1;
+                       6EE004BD0560B42800F8A5B1 = 6EE004BD0560B42800F8A5B1;
+                       6EE004BE0560B42800F8A5B1 = 6EE004BE0560B42800F8A5B1;
+                       6EE004BF0560B42800F8A5B1 = 6EE004BF0560B42800F8A5B1;
+                       6EE004C00560B42800F8A5B1 = 6EE004C00560B42800F8A5B1;
+                       6EE004C10560B42800F8A5B1 = 6EE004C10560B42800F8A5B1;
+                       6EE004C20560B42800F8A5B1 = 6EE004C20560B42800F8A5B1;
+                       6EE004C30560B42800F8A5B1 = 6EE004C30560B42800F8A5B1;
+                       6EE004C40560B42800F8A5B1 = 6EE004C40560B42800F8A5B1;
+                       6EE004C50560B42800F8A5B1 = 6EE004C50560B42800F8A5B1;
+                       6EE004C60560B42800F8A5B1 = 6EE004C60560B42800F8A5B1;
+                       6EE004C70560B42800F8A5B1 = 6EE004C70560B42800F8A5B1;
+                       6EE004C80560B42800F8A5B1 = 6EE004C80560B42800F8A5B1;
+                       6EE004C90560B42800F8A5B1 = 6EE004C90560B42800F8A5B1;
+                       6EE004CA0560B42800F8A5B1 = 6EE004CA0560B42800F8A5B1;
+                       6EE004CB0560B42800F8A5B1 = 6EE004CB0560B42800F8A5B1;
+                       6EE004CC0560B42800F8A5B1 = 6EE004CC0560B42800F8A5B1;
+                       6EE004CD0560B42800F8A5B1 = 6EE004CD0560B42800F8A5B1;
+                       6EE004CE0560B42800F8A5B1 = 6EE004CE0560B42800F8A5B1;
+                       6EE004CF0560B42800F8A5B1 = 6EE004CF0560B42800F8A5B1;
+                       6EE004D00560B42800F8A5B1 = 6EE004D00560B42800F8A5B1;
+                       6EE004D10560B42800F8A5B1 = 6EE004D10560B42800F8A5B1;
+                       6EE004D20560B42800F8A5B1 = 6EE004D20560B42800F8A5B1;
+                       6EE004D30560B42800F8A5B1 = 6EE004D30560B42800F8A5B1;
+                       6EE004D40560B42800F8A5B1 = 6EE004D40560B42800F8A5B1;
+                       6EE004D50560B42800F8A5B1 = 6EE004D50560B42800F8A5B1;
+                       6EE004D60560B42800F8A5B1 = 6EE004D60560B42800F8A5B1;
+                       6EE004D70560B42800F8A5B1 = 6EE004D70560B42800F8A5B1;
+                       6EE004D80560B42800F8A5B1 = 6EE004D80560B42800F8A5B1;
+                       6EE004D90560B42800F8A5B1 = 6EE004D90560B42800F8A5B1;
+                       6EE004DA0560B42800F8A5B1 = 6EE004DA0560B42800F8A5B1;
+                       6EE004DB0560B42800F8A5B1 = 6EE004DB0560B42800F8A5B1;
+                       6EE070E0055CA8E200598538 = 6EE070E0055CA8E200598538;
+                       6EE070E2055CA8E200598538 = 6EE070E2055CA8E200598538;
+                       6EE070E4055CA8E200598538 = 6EE070E4055CA8E200598538;
+                       6EE070E6055CA8E200598538 = 6EE070E6055CA8E200598538;
+                       6EE070E8055CA8E200598538 = 6EE070E8055CA8E200598538;
+                       6EE070EA055CA8E200598538 = 6EE070EA055CA8E200598538;
+                       6EE070EC055CA8E200598538 = 6EE070EC055CA8E200598538;
+                       6EF08713057544F900B81D60 = 6EF08713057544F900B81D60;
+                       6EF8EB660559F823008BBE46 = 6EF8EB660559F823008BBE46;
+                       6EF8EB680559F823008BBE46 = 6EF8EB680559F823008BBE46;
+                       6EF8EB6A0559F823008BBE46 = 6EF8EB6A0559F823008BBE46;
+                       6EF8EB6C0559F823008BBE46 = 6EF8EB6C0559F823008BBE46;
+                       6EF8EB6E0559F823008BBE46 = 6EF8EB6E0559F823008BBE46;
+                       6EF8EB700559F823008BBE46 = 6EF8EB700559F823008BBE46;
+                       6EF8EC23055A1C39008BBE46 = 6EF8EC23055A1C39008BBE46;
+                       6EF8EC26055A1C39008BBE46 = 6EF8EC26055A1C39008BBE46;
+                       6EF8EC27055A1C39008BBE46 = 6EF8EC27055A1C39008BBE46;
+                       6EF8EC28055A1C39008BBE46 = 6EF8EC28055A1C39008BBE46;
+                       6EF8EC29055A1C39008BBE46 = 6EF8EC29055A1C39008BBE46;
+                       6EF8EC2D055A1C39008BBE46 = 6EF8EC2D055A1C39008BBE46;
+                       6EF8EC2F055A1C39008BBE46 = 6EF8EC2F055A1C39008BBE46;
+                       6EF8EC31055A1C39008BBE46 = 6EF8EC31055A1C39008BBE46;
+                       6EF8EC33055A1C39008BBE46 = 6EF8EC33055A1C39008BBE46;
+                       6EF8EC35055A1C39008BBE46 = 6EF8EC35055A1C39008BBE46;
+                       6EF8EC37055A1C39008BBE46 = 6EF8EC37055A1C39008BBE46;
+                       6EF8EC39055A1C39008BBE46 = 6EF8EC39055A1C39008BBE46;
+                       6EF8EC3B055A1C39008BBE46 = 6EF8EC3B055A1C39008BBE46;
+                       6EF8EC3D055A1C39008BBE46 = 6EF8EC3D055A1C39008BBE46;
+                       6EF8EC3F055A1C39008BBE46 = 6EF8EC3F055A1C39008BBE46;
+                       6EF8EC40055A1C39008BBE46 = 6EF8EC40055A1C39008BBE46;
+                       6EF8EC42055A1C39008BBE46 = 6EF8EC42055A1C39008BBE46;
+                       6EF8EC44055A1C39008BBE46 = 6EF8EC44055A1C39008BBE46;
+                       6EF8EC45055A1C39008BBE46 = 6EF8EC45055A1C39008BBE46;
+                       6EF8EC47055A1C39008BBE46 = 6EF8EC47055A1C39008BBE46;
+                       6EF8EC49055A1C39008BBE46 = 6EF8EC49055A1C39008BBE46;
+                       6EF8EC4B055A1C39008BBE46 = 6EF8EC4B055A1C39008BBE46;
+                       6EF8EC4D055A1C39008BBE46 = 6EF8EC4D055A1C39008BBE46;
+                       6EF8EC4F055A1C39008BBE46 = 6EF8EC4F055A1C39008BBE46;
+                       6EF8EC51055A1C39008BBE46 = 6EF8EC51055A1C39008BBE46;
+                       6EF8EC53055A1C39008BBE46 = 6EF8EC53055A1C39008BBE46;
+                       6EF8EC55055A1C39008BBE46 = 6EF8EC55055A1C39008BBE46;
+                       6EF8EC56055A1C39008BBE46 = 6EF8EC56055A1C39008BBE46;
+                       6EF8EC58055A1C39008BBE46 = 6EF8EC58055A1C39008BBE46;
+                       6EF8EC59055A1C39008BBE46 = 6EF8EC59055A1C39008BBE46;
+                       6EF8EC5A055A1C39008BBE46 = 6EF8EC5A055A1C39008BBE46;
+                       6EF8EC5B055A1C39008BBE46 = 6EF8EC5B055A1C39008BBE46;
+                       6EF8EC5C055A1C39008BBE46 = 6EF8EC5C055A1C39008BBE46;
+                       6EF8EC5D055A1C39008BBE46 = 6EF8EC5D055A1C39008BBE46;
+                       6EF8EC5E055A1C39008BBE46 = 6EF8EC5E055A1C39008BBE46;
+                       6EF8EC60055A1C39008BBE46 = 6EF8EC60055A1C39008BBE46;
+                       6EF8EC62055A1C39008BBE46 = 6EF8EC62055A1C39008BBE46;
+                       6EF8EC64055A1C39008BBE46 = 6EF8EC64055A1C39008BBE46;
+                       6EF8EC65055A1C39008BBE46 = 6EF8EC65055A1C39008BBE46;
+                       6EF8EC67055A1C39008BBE46 = 6EF8EC67055A1C39008BBE46;
+                       6EF8EC69055A1C39008BBE46 = 6EF8EC69055A1C39008BBE46;
+                       6EF8EC6A055A1C39008BBE46 = 6EF8EC6A055A1C39008BBE46;
+                       6EF8EC6B055A1C39008BBE46 = 6EF8EC6B055A1C39008BBE46;
+                       6EF8EC6D055A1C39008BBE46 = 6EF8EC6D055A1C39008BBE46;
+                       6EF8EC6E055A1C39008BBE46 = 6EF8EC6E055A1C39008BBE46;
+                       6EF8EC6F055A1C39008BBE46 = 6EF8EC6F055A1C39008BBE46;
+                       6EF8EC70055A1C39008BBE46 = 6EF8EC70055A1C39008BBE46;
+                       6EF8EC72055A1C39008BBE46 = 6EF8EC72055A1C39008BBE46;
+                       6EF8EC73055A1C39008BBE46 = 6EF8EC73055A1C39008BBE46;
+                       6EF8EC74055A1C39008BBE46 = 6EF8EC74055A1C39008BBE46;
+                       6EF8EC75055A1C39008BBE46 = 6EF8EC75055A1C39008BBE46;
+                       6EF8EC76055A1C39008BBE46 = 6EF8EC76055A1C39008BBE46;
+                       6EF8EC77055A1C39008BBE46 = 6EF8EC77055A1C39008BBE46;
+                       6EF8EC78055A1C39008BBE46 = 6EF8EC78055A1C39008BBE46;
                };
-               sourceControlManager = 6EAFEFEE05D0CAEA00C357EF;
+               sourceControlManager = 6EAD5EEA054C3932005761EE;
                userBuildSettings = {
                };
        };
-       29B97326FDCFA39411CA2CEA = {
+       2A37F4ACFDCFA73011CA2CEA = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1308, 27807}}";
+                       sepNavSelRange = "{5165, 0}";
+                       sepNavVisRect = "{{0, 2944}, {1034, 710}}";
+                       sepNavWindowFrame = "{{15, 439}, {750, 558}}";
+               };
+       };
+       2A37F4AEFDCFA73011CA2CEA = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 3168}}";
+                       sepNavSelRange = "{3150, 0}";
+                       sepNavVisRect = "{{0, 1291}, {1034, 710}}";
+               };
+       };
+       2A37F4B0FDCFA73011CA2CEA = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
+                       sepNavSelRange = "{0, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       2A37F4BAFDCFA73011CA2CEA = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1032, 725}}";
+                       sepNavSelRange = "{66, 0}";
+                       sepNavVisRect = "{{0, 0}, {1032, 725}}";
+                       sepNavWindowFrame = "{{305, 328}, {750, 558}}";
+               };
+       };
+       2A37F4C6FDCFA73011CA2CEA = {
                activeExec = 0;
                executables = (
-                       6E31BC0D04EB164300A80003,
+                       6E4E0952050BAF7F00A80003,
                );
        };
-       6E31BC0D04EB164300A80003 = {
-               activeArgIndex = 2147483647;
-               activeArgIndices = (
-               );
-               argumentStrings = (
-               );
-               configStateDict = {
+       32DBCF750370BD2300C91783 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
+                       sepNavSelRange = "{238, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
                };
-               debuggerPlugin = GDBDebugging;
-               dylibVariantSuffix = "";
-               enableDebugStr = 1;
-               environmentEntries = (
-               );
-               isa = PBXExecutable;
-               name = "The Cheat";
-               shlibInfoDictList = (
-               );
-               sourceDirectories = (
-               );
        };
-       6E31BC0F04EB1BEF00A80003 = {
+       6E00EF290566EE06001AB46F = {
+               fRef = 6EE004DF0560B42800F8A5B1;
+               isa = PBXTextBookmark;
+               name = "vm_region.h: vm_region_extended_info";
+               rLen = 23;
+               rLoc = 3163;
+               rType = 0;
+               vrLen = 1400;
+               vrLoc = 2513;
+       };
+       6E00EF2B0566EE06001AB46F = {
+               fRef = 6E0D40AD05223CCE00A80003;
+               isa = PBXTextBookmark;
+               name = "NetTrafficController.m: 14";
+               rLen = 0;
+               rLoc = 375;
+               rType = 0;
+               vrLen = 902;
+               vrLoc = 146;
+       };
+       6E00EF2C0566EE06001AB46F = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 85";
+               rLen = 0;
+               rLoc = 2728;
+               rType = 0;
+               vrLen = 962;
+               vrLoc = 1240;
+       };
+       6E00EF2D0566EE06001AB46F = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: firstSearchIntegerShort:";
+               rLen = 0;
+               rLoc = 12922;
+               rType = 0;
+               vrLen = 1118;
+               vrLoc = 5291;
+       };
+       6E00EF2E0566EE06001AB46F = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 780";
+               rLen = 0;
+               rLoc = 18950;
+               rType = 0;
+               vrLen = 924;
+               vrLoc = 16876;
+       };
+       6E00EF2F0566EE06001AB46F = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: savedStatusColor";
+               rLen = 16;
+               rLoc = 1193;
+               rType = 0;
+               vrLen = 1219;
+               vrLoc = 598;
+       };
+       6E00EF300566EE06001AB46F = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 774";
+               rLen = 0;
+               rLoc = 18782;
+               rType = 0;
+               vrLen = 935;
+               vrLoc = 16873;
+       };
+       6E00EF310566EE06001AB46F = {
+               fRef = 6EE004DF0560B42800F8A5B1;
+               isa = PBXTextBookmark;
+               name = "vm_region.h: vm_region_extended_info";
+               rLen = 23;
+               rLoc = 3163;
+               rType = 0;
+               vrLen = 1400;
+               vrLoc = 2513;
+       };
+       6E0BDF7D0511568D00A80003 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1235, 14592}}";
-                       sepNavSelRange = "{18650, 0}";
-                       sepNavVisRect = "{{0, 12541}, {1235, 714}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1266, 710}}";
+                       sepNavSelRange = "{881, 9}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
                };
        };
-       6EAFEFEE05D0CAEA00C357EF = {
-               isa = PBXSourceControlManager;
-               scmConfiguration = {
+       6E0D40AC05223CCE00A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 720}}";
+                       sepNavSelRange = "{0, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
                };
-               scmType = scm.cvs;
        };
-       6EAFEFEF05D0CAEA00C357EF = {
-               indexTemplatePath = "";
-               isa = PBXCodeSenseManager;
-               usesDefaults = 1;
-               wantsCodeCompletion = 1;
-               wantsCodeCompletionAutoPopup = 0;
-               wantsCodeCompletionAutoSuggestions = 0;
-               wantsCodeCompletionCaseSensitivity = 1;
-               wantsCodeCompletionOnlyMatchingItems = 1;
-               wantsCodeCompletionParametersIncluded = 1;
-               wantsCodeCompletionPlaceholdersInserted = 1;
-               wantsCodeCompletionTabCompletes = 1;
-               wantsIndex = 1;
+       6E0D40AD05223CCE00A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 2672}}";
+                       sepNavSelRange = "{375, 0}";
+                       sepNavVisRect = "{{0, 40}, {1034, 710}}";
+               };
        };
-       6EAFEFFD05D0CB9B00C357EF = {
-               fRef = 6E31BC0F04EB1BEF00A80003;
+       6E0D40B4052243D500A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
+                       sepNavSelRange = "{440, 18}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       6E0D40B5052243D500A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 2032}}";
+                       sepNavSelRange = "{437, 44}";
+                       sepNavVisRect = "{{0, 49}, {1034, 710}}";
+               };
+       };
+       6E0D40B80522449500A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
+                       sepNavSelRange = "{0, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       6E0D40B90522449500A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1224, 2912}}";
+                       sepNavSelRange = "{2885, 0}";
+                       sepNavVisRect = "{{0, 1285}, {1034, 710}}";
+               };
+       };
+       6E0D40CE0522820D00A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
+                       sepNavSelRange = "{0, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       6E146B11051FA42C00A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
+                       sepNavSelRange = "{0, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       6E146B12051FA42C00A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 3680}}";
+                       sepNavSelRange = "{4293, 0}";
+                       sepNavVisRect = "{{0, 2573}, {1034, 710}}";
+               };
+       };
+       6E2E17AE056201170070BE48 = {
+               fRef = 6E4E098D050BB21400A80003;
                isa = PBXTextBookmark;
-               name = "AppController.m: 1";
+               name = "AppController.m: 49";
                rLen = 0;
-               rLoc = 0;
+               rLoc = 2232;
                rType = 0;
-               vrLen = 1022;
-               vrLoc = 0;
+               vrLen = 1404;
+               vrLoc = 454;
+       };
+       6E2E17AF056201170070BE48 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 730";
+               rLen = 12;
+               rLoc = 19184;
+               rType = 0;
+               vrLen = 969;
+               vrLoc = 15923;
+       };
+       6E2E17B0056201170070BE48 = {
+               fRef = 6E0D40AD05223CCE00A80003;
+               isa = PBXTextBookmark;
+               name = "NetTrafficController.m: 123";
+               rLen = 0;
+               rLoc = 2572;
+               rType = 0;
+               vrLen = 1345;
+               vrLoc = 2257;
+       };
+       6E2E17B1056201170070BE48 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: changeMenuRightNow:";
+               rLen = 0;
+               rLoc = 4477;
+               rType = 0;
+               vrLen = 1368;
+               vrLoc = 2625;
+       };
+       6E3309E80575C22E0093550E = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: ";
+               rLen = 0;
+               rLoc = 2334;
+               rType = 0;
+               vrLen = 936;
+               vrLoc = 415;
+       };
+       6E3309E90575C22E0093550E = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 2006";
+               rLen = 0;
+               rLoc = 44712;
+               rType = 0;
+               vrLen = 1193;
+               vrLoc = 43611;
+       };
+       6E3309EA0575C22E0093550E = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: 121";
+               rLen = 0;
+               rLoc = 3150;
+               rType = 0;
+               vrLen = 1279;
+               vrLoc = 2011;
+       };
+       6E3309EB0575C22E0093550E = {
+               fRef = 6E146B12051FA42C00A80003;
+               isa = PBXTextBookmark;
+               name = "CheatClient.m: 194";
+               rLen = 0;
+               rLoc = 4293;
+               rType = 0;
+               vrLen = 751;
+               vrLoc = 3746;
+       };
+       6E3309EC0575C22E0093550E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 208";
+               rLen = 0;
+               rLoc = 5165;
+               rType = 0;
+               vrLen = 1161;
+               vrLoc = 4564;
+       };
+       6E3309ED0575C22E0093550E = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 148";
+               rLen = 0;
+               rLoc = 3966;
+               rType = 0;
+               vrLen = 1074;
+               vrLoc = 3454;
+       };
+       6E3309EE0575C22E0093550E = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 511";
+               rLen = 0;
+               rLoc = 11611;
+               rType = 0;
+               vrLen = 1233;
+               vrLoc = 10998;
        };
-       6EAFF00605D0D29D00C357EF = {
-               fRef = 6E31BC0F04EB1BEF00A80003;
+       6E3309EF0575C22E0093550E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
                isa = PBXTextBookmark;
-               name = "AppController.m: 804";
+               name = "MyDocument.m: 1258";
                rLen = 0;
-               rLoc = 18650;
+               rLoc = 29583;
                rType = 0;
-               vrLen = 1350;
-               vrLoc = 18122;
+               vrLen = 909;
+               vrLoc = 28238;
+       };
+       6E3309F00575C22E0093550E = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: changeSheet:returned:context:";
+               rLen = 85;
+               rLoc = 4174;
+               rType = 0;
+               vrLen = 1352;
+               vrLoc = 3265;
+       };
+       6E3309F10575C22E0093550E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: receivedAppQuit:";
+               rLen = 0;
+               rLoc = 20648;
+               rType = 0;
+               vrLen = 1050;
+               vrLoc = 20081;
+       };
+       6E3309F20575C22E0093550E = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 2005";
+               rLen = 0;
+               rLoc = 44719;
+               rType = 0;
+               vrLen = 1061;
+               vrLoc = 43611;
+       };
+       6E3309F30575C22E0093550E = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: ";
+               rLen = 0;
+               rLoc = 2334;
+               rType = 0;
+               vrLen = 936;
+               vrLoc = 415;
+       };
+       6E3309F40575C22E0093550E = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 2005";
+               rLen = 0;
+               rLoc = 44719;
+               rType = 0;
+               vrLen = 1060;
+               vrLoc = 43611;
+       };
+       6E3309F50575C22E0093550E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 888";
+               rLen = 0;
+               rLoc = 20650;
+               rType = 0;
+               vrLen = 999;
+               vrLoc = 20081;
+       };
+       6E3309F60575C22E0093550E = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: 156";
+               rLen = 0;
+               rLoc = 4299;
+               rType = 0;
+               vrLen = 1354;
+               vrLoc = 1243;
+       };
+       6E3309F70575C22E0093550E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 894";
+               rLen = 0;
+               rLoc = 20951;
+               rType = 0;
+               vrLen = 1075;
+               vrLoc = 20081;
+       };
+       6E3309F80575C22E0093550E = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 2006";
+               rLen = 0;
+               rLoc = 44712;
+               rType = 0;
+               vrLen = 1193;
+               vrLoc = 43611;
+       };
+       6E3309F90575C22E0093550E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 839";
+               rLen = 0;
+               rLoc = 19626;
+               rType = 0;
+               vrLen = 912;
+               vrLoc = 18860;
+       };
+       6E3309FA0575C22E0093550E = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: 190";
+               rLen = 0;
+               rLoc = 5205;
+               rType = 0;
+               vrLen = 1002;
+               vrLoc = 4083;
+       };
+       6E3309FB0575C22E0093550E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 839";
+               rLen = 0;
+               rLoc = 19626;
+               rType = 0;
+               vrLen = 912;
+               vrLoc = 18860;
+       };
+       6E3309FC0575C22E0093550E = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: handleErrorMessage:fatal:";
+               rLen = 60;
+               rLoc = 5144;
+               rType = 0;
+               vrLen = 1055;
+               vrLoc = 4083;
+       };
+       6E3309FD0575C22E0093550E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 890";
+               rLen = 0;
+               rLoc = 20696;
+               rType = 0;
+               vrLen = 1028;
+               vrLoc = 20039;
+       };
+       6E3309FE0575C22E0093550E = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: recurringChangeButton:";
+               rLen = 44;
+               rLoc = 4845;
+               rType = 0;
+               vrLen = 1168;
+               vrLoc = 3878;
+       };
+       6E3309FF0575C22E0093550E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1401";
+               rLen = 0;
+               rLoc = 31786;
+               rType = 0;
+               vrLen = 1047;
+               vrLoc = 30813;
+       };
+       6E330A000575C22E0093550E = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: connectToServer:name:";
+               rLen = 0;
+               rLoc = 3150;
+               rType = 0;
+               vrLen = 1287;
+               vrLoc = 2011;
+       };
+       6E330A010575C22E0093550E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1401";
+               rLen = 0;
+               rLoc = 31786;
+               rType = 0;
+               vrLen = 1047;
+               vrLoc = 30813;
+       };
+       6E330A020575C22E0093550E = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: connectToServer:name:";
+               rLen = 0;
+               rLoc = 3150;
+               rType = 0;
+               vrLen = 1287;
+               vrLoc = 2011;
+       };
+       6E330A030575C22E0093550E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1401";
+               rLen = 0;
+               rLoc = 31786;
+               rType = 0;
+               vrLen = 1047;
+               vrLoc = 30813;
+       };
+       6E330A040575C22E0093550E = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: changeSecondsCombo";
+               rLen = 18;
+               rLoc = 2370;
+               rType = 0;
+               vrLen = 1287;
+               vrLoc = 2011;
+       };
+       6E330A050575C22E0093550E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 123";
+               rLen = 0;
+               rLoc = 3677;
+               rType = 0;
+               vrLen = 1570;
+               vrLoc = 2192;
+       };
+       6E330A060575C22E0093550E = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: changeSecondsCombo";
+               rLen = 18;
+               rLoc = 2370;
+               rType = 0;
+               vrLen = 1287;
+               vrLoc = 2011;
+       };
+       6E330A070575C22E0093550E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1406";
+               rLen = 0;
+               rLoc = 31731;
+               rType = 0;
+               vrLen = 1111;
+               vrLoc = 30970;
+       };
+       6E330A080575C22E0093550E = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: 121";
+               rLen = 0;
+               rLoc = 3150;
+               rType = 0;
+               vrLen = 1279;
+               vrLoc = 2011;
+       };
+       6E330A090575C22E0093550E = {
+               fRef = 6E146B12051FA42C00A80003;
+               isa = PBXTextBookmark;
+               name = "CheatClient.m: 194";
+               rLen = 0;
+               rLoc = 4293;
+               rType = 0;
+               vrLen = 751;
+               vrLoc = 3746;
+       };
+       6E330A0A0575C22E0093550E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 208";
+               rLen = 0;
+               rLoc = 5165;
+               rType = 0;
+               vrLen = 1161;
+               vrLoc = 4564;
+       };
+       6E330A0B0575C22E0093550E = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 148";
+               rLen = 0;
+               rLoc = 3966;
+               rType = 0;
+               vrLen = 1074;
+               vrLoc = 3454;
+       };
+       6E330A0C0575C22E0093550E = {
+               fRef = 089C1660FE840EACC02AAC07;
+               isa = PBXTextBookmark;
+               name = "English: 5";
+               rLen = 0;
+               rLoc = 139;
+               rType = 0;
+               vrLen = 201;
+               vrLoc = 0;
+       };
+       6E3F0D01050D4ACC00A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 799}}";
+                       sepNavSelRange = "{306, 41}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       6E3F0D02050D4ACC00A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1059, 1808}}";
+                       sepNavSelRange = "{1627, 0}";
+                       sepNavVisRect = "{{0, 952}, {1059, 536}}";
+               };
+       };
+       6E4E0952050BAF7F00A80003 = {
+               activeArgIndex = 2147483647;
+               activeArgIndices = (
+               );
+               argumentStrings = (
+               );
+               configStateDict = {
+               };
+               debuggerPlugin = GDBDebugging;
+               dylibVariantSuffix = "";
+               enableDebugStr = 1;
+               environmentEntries = (
+               );
+               isa = PBXExecutable;
+               name = "The Cheat";
+               shlibInfoDictList = (
+               );
+               sourceDirectories = (
+               );
+       };
+       6E4E098C050BB21400A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 896}}";
+                       sepNavSelRange = "{1386, 0}";
+                       sepNavVisRect = "{{0, 186}, {1034, 710}}";
+               };
+       };
+       6E4E098D050BB21400A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1084, 6384}}";
+                       sepNavSelRange = "{3966, 0}";
+                       sepNavVisRect = "{{0, 2106}, {1034, 710}}";
+               };
+       };
+       6E4E098E050BB21400A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1161, 32560}}";
+                       sepNavSelRange = "{11611, 0}";
+                       sepNavVisRect = "{{0, 7808}, {822, 329}}";
+                       sepNavWindowFrame = "{{0, 51}, {1280, 951}}";
+               };
+       };
+       6E4E098F050BB21400A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 1679}}";
+                       sepNavSelRange = "{2334, 0}";
+                       sepNavVisRect = "{{0, 266}, {1034, 710}}";
+               };
+       };
+       6E51A9060573258100506538 = {
+               fRef = 6ED3E46405192E2B00A80003;
+               isa = PBXTextBookmark;
+               name = "MenuExtras.m: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 915;
+               vrLoc = 0;
+       };
+       6E51A9070573258100506538 = {
+               fRef = 6E0D40B80522449500A80003;
+               isa = PBXTextBookmark;
+               name = "CheatListener.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 804;
+               vrLoc = 0;
+       };
+       6E51A9080573258100506538 = {
+               fRef = 6E71F41C051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.m: TCDefaultListenPath";
+               rLen = 0;
+               rLoc = 347;
+               rType = 0;
+               vrLen = 950;
+               vrLoc = 0;
+       };
+       6E51A90C0573258100506538 = {
+               fRef = 6E51A96B0573258500506538;
+               isa = PBXTextBookmark;
+               name = "(null): 354";
+               rLen = 11;
+               rLoc = 12930;
+               rType = 0;
+               vrLen = 1499;
+               vrLoc = 12376;
+       };
+       6E51A90D0573258100506538 = {
+               fRef = 6ED3E46305192E2B00A80003;
+               isa = PBXTextBookmark;
+               name = "MenuExtras.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 579;
+               vrLoc = 0;
+       };
+       6E51A9120573258100506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 304";
+               rLen = 0;
+               rLoc = 11441;
+               rType = 0;
+               vrLen = 1120;
+               vrLoc = 5466;
+       };
+       6E51A9130573258100506538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: savedStatusColor";
+               rLen = 16;
+               rLoc = 1193;
+               rType = 0;
+               vrLen = 1219;
+               vrLoc = 598;
+       };
+       6E51A9140573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1522";
+               rLen = 0;
+               rLoc = 39887;
+               rType = 0;
+               vrLen = 1315;
+               vrLoc = 33432;
+       };
+       6E51A9150573258100506538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: serverList";
+               rLen = 10;
+               rLoc = 951;
+               rType = 0;
+               vrLen = 1093;
+               vrLoc = 429;
+       };
+       6E51A9160573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1378";
+               rLen = 0;
+               rLoc = 34868;
+               rType = 0;
+               vrLen = 779;
+               vrLoc = 25602;
+       };
+       6E51A9170573258100506538 = {
+               fRef = 6E0BDF7D0511568D00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_types.h: 23";
+               rLen = 0;
+               rLoc = 521;
+               rType = 0;
+               vrLen = 947;
+               vrLoc = 0;
+       };
+       6E51A9180573258100506538 = {
+               fRef = 6E71F41C051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.m: TCDefaultListenPath";
+               rLen = 0;
+               rLoc = 347;
+               rType = 0;
+               vrLen = 950;
+               vrLoc = 0;
+       };
+       6E51A9190573258100506538 = {
+               fRef = 6E0BDF7D0511568D00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_types.h: 23";
+               rLen = 0;
+               rLoc = 521;
+               rType = 0;
+               vrLen = 947;
+               vrLoc = 0;
+       };
+       6E51A91A0573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1378";
+               rLen = 0;
+               rLoc = 34868;
+               rType = 0;
+               vrLen = 779;
+               vrLoc = 25602;
+       };
+       6E51A91B0573258100506538 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: 18";
+               rLen = 0;
+               rLoc = 442;
+               rType = 0;
+               vrLen = 828;
+               vrLoc = 0;
+       };
+       6E51A91C0573258100506538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: serverList";
+               rLen = 10;
+               rLoc = 951;
+               rType = 0;
+               vrLen = 1093;
+               vrLoc = 429;
+       };
+       6E51A91D0573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 196";
+               rLen = 0;
+               rLoc = 5395;
+               rType = 0;
+               vrLen = 1198;
+               vrLoc = 3724;
+       };
+       6E51A91E0573258100506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 1225";
+               rLen = 0;
+               rLoc = 43436;
+               rType = 0;
+               vrLen = 672;
+               vrLoc = 24308;
+       };
+       6E51A91F0573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 196";
+               rLen = 0;
+               rLoc = 5395;
+               rType = 0;
+               vrLen = 1198;
+               vrLoc = 3724;
+       };
+       6E51A9200573258100506538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: decimalSizeMenu";
+               rLen = 0;
+               rLoc = 2174;
+               rType = 0;
+               vrLen = 1329;
+               vrLoc = 835;
+       };
+       6E51A9210573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 196";
+               rLen = 0;
+               rLoc = 5395;
+               rType = 0;
+               vrLen = 1198;
+               vrLoc = 3724;
+       };
+       6E51A9220573258100506538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: changeButton:";
+               rLen = 0;
+               rLoc = 4477;
+               rType = 0;
+               vrLen = 1375;
+               vrLoc = 1046;
+       };
+       6E51A9230573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1310";
+               rLen = 0;
+               rLoc = 31589;
+               rType = 0;
+               vrLen = 1019;
+               vrLoc = 25175;
+       };
+       6E51A9240573258100506538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: 93";
+               rLen = 0;
+               rLoc = 2625;
+               rType = 0;
+               vrLen = 1289;
+               vrLoc = 2000;
+       };
+       6E51A9250573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1317";
+               rLen = 0;
+               rLoc = 32280;
+               rType = 0;
+               vrLen = 836;
+               vrLoc = 27944;
+       };
+       6E51A9260573258100506538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: 26";
+               rLen = 0;
+               rLoc = 575;
+               rType = 0;
+               vrLen = 1320;
+               vrLoc = 2389;
+       };
+       6E51A9270573258100506538 = {
+               fRef = 6ED3E46305192E2B00A80003;
+               isa = PBXTextBookmark;
+               name = "MenuExtras.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 579;
+               vrLoc = 0;
+       };
+       6E51A9280573258100506538 = {
+               fRef = 6ED3E46405192E2B00A80003;
+               isa = PBXTextBookmark;
+               name = "MenuExtras.m: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 915;
+               vrLoc = 0;
+       };
+       6E51A9290573258100506538 = {
+               fRef = 6ED3E46305192E2B00A80003;
+               isa = PBXTextBookmark;
+               name = "MenuExtras.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 579;
+               vrLoc = 0;
+       };
+       6E51A92A0573258100506538 = {
+               fRef = 6E0D40B80522449500A80003;
+               isa = PBXTextBookmark;
+               name = "CheatListener.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 804;
+               vrLoc = 0;
+       };
+       6E51A92B0573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: cancelButton:";
+               rLen = 32;
+               rLoc = 31458;
+               rType = 0;
+               vrLen = 936;
+               vrLoc = 24990;
+       };
+       6E51A92C0573258100506538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: search";
+               rLen = 31;
+               rLoc = 4141;
+               rType = 0;
+               vrLen = 1187;
+               vrLoc = 3492;
+       };
+       6E51A92D0573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1044";
+               rLen = 0;
+               rLoc = 25367;
+               rType = 0;
+               vrLen = 880;
+               vrLoc = 23055;
+       };
+       6E51A92E0573258100506538 = {
+               fRef = 6EE004DD0560B42800F8A5B1;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 463";
+               rLen = 278;
+               rLoc = 11649;
+               rType = 0;
+               vrLen = 1315;
+               vrLoc = 10997;
+       };
+       6E51A92F0573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1039";
+               rLen = 0;
+               rLoc = 24891;
+               rType = 0;
+               vrLen = 1119;
+               vrLoc = 23141;
+       };
+       6E51A9300573258100506538 = {
+               fRef = 6E71F41C051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.m: TCDefaultListenPath";
+               rLen = 0;
+               rLoc = 347;
+               rType = 0;
+               vrLen = 950;
+               vrLoc = 0;
+       };
+       6E51A9310573258100506538 = {
+               fRef = 6E0BDF7D0511568D00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_types.h: 36";
+               rLen = 13;
+               rLoc = 905;
+               rType = 0;
+               vrLen = 947;
+               vrLoc = 0;
+       };
+       6E51A9320573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1052";
+               rLen = 0;
+               rLoc = 25198;
+               rType = 0;
+               vrLen = 1131;
+               vrLoc = 23534;
+       };
+       6E51A9330573258100506538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: search";
+               rLen = 31;
+               rLoc = 4141;
+               rType = 0;
+               vrLen = 1383;
+               vrLoc = 1671;
+       };
+       6E51A9340573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1171";
+               rLen = 0;
+               rLoc = 27758;
+               rType = 0;
+               vrLen = 1283;
+               vrLoc = 23292;
+       };
+       6E51A9350573258100506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 1225";
+               rLen = 0;
+               rLoc = 43436;
+               rType = 0;
+               vrLen = 672;
+               vrLoc = 24308;
+       };
+       6E51A9360573258100506538 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: changeIntegerLong:";
+               rLen = 0;
+               rLoc = 2059;
+               rType = 0;
+               vrLen = 1394;
+               vrLoc = 702;
+       };
+       6E51A9370573258100506538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: search";
+               rLen = 31;
+               rLoc = 4141;
+               rType = 0;
+               vrLen = 1174;
+               vrLoc = 576;
+       };
+       6E51A9380573258100506538 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: changeIntegerLong:addresses:count:";
+               rLen = 90;
+               rLoc = 1969;
+               rType = 0;
+               vrLen = 1433;
+               vrLoc = 702;
+       };
+       6E51A9390573258100506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: firstSearchDecimalDouble:";
+               rLen = 0;
+               rLoc = 16503;
+               rType = 0;
+               vrLen = 683;
+               vrLoc = 9301;
+       };
+       6E51A93A0573258100506538 = {
+               fRef = 6EE004DD0560B42800F8A5B1;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 449";
+               rLen = 2332;
+               rLoc = 11036;
+               rType = 0;
+               vrLen = 1308;
+               vrLoc = 10775;
+       };
+       6E51A93B0573258100506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 457";
+               rLen = 0;
+               rLoc = 16503;
+               rType = 0;
+               vrLen = 861;
+               vrLoc = 9617;
+       };
+       6E51A93C0573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1055";
+               rLen = 78;
+               rLoc = 25264;
+               rType = 0;
+               vrLen = 1283;
+               vrLoc = 23292;
+       };
+       6E51A93D0573258100506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 457";
+               rLen = 0;
+               rLoc = 16503;
+               rType = 0;
+               vrLen = 826;
+               vrLoc = 9617;
+       };
+       6E51A93E0573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1055";
+               rLen = 78;
+               rLoc = 25264;
+               rType = 0;
+               vrLen = 1180;
+               vrLoc = 23175;
+       };
+       6E51A93F0573258100506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 460";
+               rLen = 0;
+               rLoc = 16503;
+               rType = 0;
+               vrLen = 660;
+               vrLoc = 9572;
+       };
+       6E51A9400573258100506538 = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 140";
+               rLen = 0;
+               rLoc = 4037;
+               rType = 0;
+               vrLen = 1015;
+               vrLoc = 3216;
+       };
+       6E51A9410573258100506538 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: 70";
+               rLen = 0;
+               rLoc = 1968;
+               rType = 0;
+               vrLen = 865;
+               vrLoc = 106;
+       };
+       6E51A9420573258100506538 = {
+               fRef = 6E0BDF7D0511568D00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_types.h: 35";
+               rLen = 9;
+               rLoc = 881;
+               rType = 0;
+               vrLen = 947;
+               vrLoc = 0;
+       };
+       6E51A9430573258100506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 460";
+               rLen = 0;
+               rLoc = 16503;
+               rType = 0;
+               vrLen = 660;
+               vrLoc = 9572;
+       };
+       6E51A9440573258100506538 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: changeIntegerLong:addresses:count:";
+               rLen = 0;
+               rLoc = 2030;
+               rType = 0;
+               vrLen = 1588;
+               vrLoc = 936;
+       };
+       6E51A9450573258100506538 = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 140";
+               rLen = 0;
+               rLoc = 4037;
+               rType = 0;
+               vrLen = 1015;
+               vrLoc = 3216;
+       };
+       6E51A9460573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1055";
+               rLen = 78;
+               rLoc = 25264;
+               rType = 0;
+               vrLen = 1180;
+               vrLoc = 23175;
+       };
+       6E51A9470573258100506538 = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 140";
+               rLen = 0;
+               rLoc = 4037;
+               rType = 0;
+               vrLen = 1015;
+               vrLoc = 3216;
+       };
+       6E51A9480573258100506538 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: changeIntegerLong:addresses:count:";
+               rLen = 92;
+               rLoc = 1969;
+               rType = 0;
+               vrLen = 1588;
+               vrLoc = 936;
+       };
+       6E51A9490573258100506538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: search";
+               rLen = 31;
+               rLoc = 4141;
+               rType = 0;
+               vrLen = 995;
+               vrLoc = 0;
+       };
+       6E51A94A0573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1055";
+               rLen = 78;
+               rLoc = 25264;
+               rType = 0;
+               vrLen = 1006;
+               vrLoc = 26131;
+       };
+       6E51A94B0573258100506538 = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 140";
+               rLen = 0;
+               rLoc = 4037;
+               rType = 0;
+               vrLen = 1015;
+               vrLoc = 3216;
+       };
+       6E51A94C0573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1042";
+               rLen = 0;
+               rLoc = 24868;
+               rType = 0;
+               vrLen = 1296;
+               vrLoc = 23277;
+       };
+       6E51A94D0573258100506538 = {
+               fRef = 6E0BDF7D0511568D00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_types.h: 35";
+               rLen = 9;
+               rLoc = 881;
+               rType = 0;
+               vrLen = 947;
+               vrLoc = 0;
+       };
+       6E51A94E0573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1055";
+               rLen = 0;
+               rLoc = 25325;
+               rType = 0;
+               vrLen = 1296;
+               vrLoc = 23277;
+       };
+       6E51A94F0573258100506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 1146";
+               rLen = 0;
+               rLoc = 40095;
+               rType = 0;
+               vrLen = 818;
+               vrLoc = 22789;
+       };
+       6E51A9500573258100506538 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: changeString8bit:size:addresses:count:";
+               rLen = 295;
+               rLoc = 1673;
+               rType = 0;
+               vrLen = 1633;
+               vrLoc = 663;
+       };
+       6E51A9510573258100506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 453";
+               rLen = 0;
+               rLoc = 16503;
+               rType = 0;
+               vrLen = 858;
+               vrLoc = 9301;
+       };
+       6E51A9520573258100506538 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: changeDecimalFloat:addresses:count:";
+               rLen = 183;
+               rLoc = 2061;
+               rType = 0;
+               vrLen = 1633;
+               vrLoc = 663;
+       };
+       6E51A9530573258100506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 1419";
+               rLen = 0;
+               rLoc = 45146;
+               rType = 0;
+               vrLen = 1242;
+               vrLoc = 27480;
+       };
+       6E51A9540573258100506538 = {
+               fRef = 6E51A96C0573258500506538;
+               isa = PBXTextBookmark;
+               name = "(null): 248";
+               rLen = 0;
+               rLoc = 10068;
+               rType = 0;
+               vrLen = 1108;
+               vrLoc = 9404;
+       };
+       6E51A9550573258100506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 1705";
+               rLen = 0;
+               rLoc = 45285;
+               rType = 0;
+               vrLen = 1387;
+               vrLoc = 0;
+       };
+       6E51A9560573258100506538 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: changeDecimalFloat:addresses:count:";
+               rLen = 183;
+               rLoc = 2061;
+               rType = 0;
+               vrLen = 828;
+               vrLoc = 0;
+       };
+       6E51A9570573258100506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 639";
+               rLen = 0;
+               rLoc = 16082;
+               rType = 0;
+               vrLen = 1170;
+               vrLoc = 14216;
+       };
+       6E51A9580573258100506538 = {
+               fRef = 6E51A96A0573258500506538;
+               isa = PBXTextBookmark;
+               name = "(null): 354";
+               rLen = 11;
+               rLoc = 12930;
+               rType = 0;
+               vrLen = 1499;
+               vrLoc = 12376;
+       };
+       6E51A9590573258100506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: handleClearSearch";
+               rLen = 59;
+               rLoc = 36394;
+               rType = 0;
+               vrLen = 812;
+               vrLoc = 35718;
+       };
+       6E51A95A0573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1016";
+               rLen = 0;
+               rLoc = 24205;
+               rType = 0;
+               vrLen = 945;
+               vrLoc = 22349;
+       };
+       6E51A95B0573258100506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 1600";
+               rLen = 0;
+               rLoc = 38852;
+               rType = 0;
+               vrLen = 818;
+               vrLoc = 35718;
+       };
+       6E51A95C0573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 99";
+               rLen = 0;
+               rLoc = 3513;
+               rType = 0;
+               vrLen = 1211;
+               vrLoc = 1590;
+       };
+       6E51A95D0573258100506538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: search";
+               rLen = 31;
+               rLoc = 4141;
+               rType = 0;
+               vrLen = 1344;
+               vrLoc = 1099;
+       };
+       6E51A95E0573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 99";
+               rLen = 0;
+               rLoc = 3513;
+               rType = 0;
+               vrLen = 1220;
+               vrLoc = 1590;
+       };
+       6E51A95F0573258100506538 = {
+               fRef = 6ED3E46305192E2B00A80003;
+               isa = PBXTextBookmark;
+               name = "MenuExtras.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 579;
+               vrLoc = 0;
+       };
+       6E51A9600573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 102";
+               rLen = 0;
+               rLoc = 3131;
+               rType = 0;
+               vrLen = 1359;
+               vrLoc = 1590;
+       };
+       6E51A9610573258100506538 = {
+               fRef = 6E0BDF7D0511568D00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_types.h: 35";
+               rLen = 9;
+               rLoc = 881;
+               rType = 0;
+               vrLen = 947;
+               vrLoc = 0;
+       };
+       6E51A9620573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 102";
+               rLen = 0;
+               rLoc = 3513;
+               rType = 0;
+               vrLen = 1359;
+               vrLoc = 1590;
+       };
+       6E51A9630573258100506538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: search";
+               rLen = 31;
+               rLoc = 4141;
+               rType = 0;
+               vrLen = 1344;
+               vrLoc = 1099;
+       };
+       6E51A9640573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 108";
+               rLen = 0;
+               rLoc = 3459;
+               rType = 0;
+               vrLen = 1653;
+               vrLoc = 1590;
+       };
+       6E51A9650573258100506538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: search";
+               rLen = 31;
+               rLoc = 4141;
+               rType = 0;
+               vrLen = 1344;
+               vrLoc = 1099;
+       };
+       6E51A9660573258100506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 108";
+               rLen = 0;
+               rLoc = 3504;
+               rType = 0;
+               vrLen = 1655;
+               vrLoc = 1590;
+       };
+       6E51A9670573258100506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 1584";
+               rLen = 0;
+               rLoc = 38695;
+               rType = 0;
+               vrLen = 768;
+               vrLoc = 35878;
+       };
+       6E51A96A0573258500506538 = {
+               isa = PBXFileReference;
+               name = math.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/architecture/ppc/math.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E51A96B0573258500506538 = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = math.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/architecture/ppc/math.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E51A96C0573258500506538 = {
+               isa = PBXFileReference;
+               name = math.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/architecture/ppc/math.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E51A97C0573304C00506538 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
+                       sepNavSelRange = "{414, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       6E51A97D0573304C00506538 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
+                       sepNavSelRange = "{424, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       6E51A986057330B900506538 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
+                       sepNavSelRange = "{401, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       6E51A987057330B900506538 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
+                       sepNavSelRange = "{605, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       6E51A9A00573385700506538 = {
+               fRef = 6E81664B0559E7C000377CF7;
+               isa = PBXTextBookmark;
+               name = "math.h: 397";
+               rLen = 0;
+               rLoc = 13455;
+               rType = 0;
+               vrLen = 1519;
+               vrLoc = 12819;
+       };
+       6E51A9A20573385700506538 = {
+               fRef = 2A37F4B0FDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "main.m: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 477;
+               vrLoc = 0;
+       };
+       6E51A9A30573385700506538 = {
+               fRef = 6E51A987057330B900506538;
+               isa = PBXTextBookmark;
+               name = "cheat_shared.m: 21";
+               rLen = 0;
+               rLoc = 605;
+               rType = 0;
+               vrLen = 607;
+               vrLoc = 0;
+       };
+       6E51A9A40573385700506538 = {
+               fRef = 6E3F0D01050D4ACC00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_net.h: 11";
+               rLen = 41;
+               rLoc = 306;
+               rType = 0;
+               vrLen = 1063;
+               vrLoc = 0;
+       };
+       6E51A9A50573385700506538 = {
+               fRef = 6E51A986057330B900506538;
+               isa = PBXTextBookmark;
+               name = "cheat_shared.h: 17";
+               rLen = 0;
+               rLoc = 401;
+               rType = 0;
+               vrLen = 409;
+               vrLoc = 0;
+       };
+       6E51A9A60573385700506538 = {
+               fRef = 6E0D40AC05223CCE00A80003;
+               isa = PBXTextBookmark;
+               name = "NetTrafficController.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1017;
+               vrLoc = 0;
+       };
+       6E51A9A70573385700506538 = {
+               fRef = 6E0D40AD05223CCE00A80003;
+               isa = PBXTextBookmark;
+               name = "NetTrafficController.m: 14";
+               rLen = 0;
+               rLoc = 375;
+               rType = 0;
+               vrLen = 939;
+               vrLoc = 82;
+       };
+       6E51A9A80573385700506538 = {
+               fRef = 6E0D40B4052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.h: 18";
+               rLen = 18;
+               rLoc = 440;
+               rType = 0;
+               vrLen = 994;
+               vrLoc = 0;
+       };
+       6E51A9AD0573385700506538 = {
+               fRef = 6E51A97C0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.h: aboutWindow";
+               rLen = 0;
+               rLoc = 414;
+               rType = 0;
+               vrLen = 533;
+               vrLoc = 0;
+       };
+       6E51A9AE0573385700506538 = {
+               fRef = 6E0D40B5052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.m: 19";
+               rLen = 44;
+               rLoc = 437;
+               rType = 0;
+               vrLen = 1060;
+               vrLoc = 106;
+       };
+       6E51A9B00573385700506538 = {
+               fRef = 6E81664B0559E7C000377CF7;
+               isa = PBXTextBookmark;
+               name = "math.h: 397";
+               rLen = 0;
+               rLoc = 13455;
+               rType = 0;
+               vrLen = 1519;
+               vrLoc = 12819;
+       };
+       6E51A9B10573385700506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 1584";
+               rLen = 0;
+               rLoc = 38695;
+               rType = 0;
+               vrLen = 768;
+               vrLoc = 35878;
+       };
+       6E51A9B20573385700506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1340";
+               rLen = 0;
+               rLoc = 31589;
+               rType = 0;
+               vrLen = 998;
+               vrLoc = 29449;
+       };
+       6E51A9B30573385700506538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: changeString8bit:size:addresses:count:";
+               rLen = 90;
+               rLoc = 25997;
+               rType = 0;
+               vrLen = 1159;
+               vrLoc = 22755;
+       };
+       6E51A9B40573385700506538 = {
+               fRef = 6E51A97C0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.h: 13";
+               rLen = 0;
+               rLoc = 402;
+               rType = 0;
+               vrLen = 249;
+               vrLoc = 0;
+       };
+       6E51A9B50573385700506538 = {
+               fRef = 6E51A97D0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.m: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 235;
+               vrLoc = 0;
+       };
+       6E51A9B60573385700506538 = {
+               fRef = 6E0D40B4052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.h: 1";
+               rLen = 315;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 994;
+               vrLoc = 0;
+       };
+       6E51A9B70573385700506538 = {
+               fRef = 6E51A97C0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.h: 1";
+               rLen = 313;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 403;
+               vrLoc = 0;
+       };
+       6E51A9B80573385700506538 = {
+               fRef = 6E51A97D0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.m: 9";
+               rLen = 0;
+               rLoc = 313;
+               rType = 0;
+               vrLen = 389;
+               vrLoc = 0;
+       };
+       6E51A9B90573385700506538 = {
+               fRef = 6E4E098C050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.h: stopListener";
+               rLen = 0;
+               rLoc = 1102;
+               rType = 0;
+               vrLen = 1189;
+               vrLoc = 172;
+       };
+       6E51A9BA0573385700506538 = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: launchHelpFile:";
+               rLen = 41;
+               rLoc = 3975;
+               rType = 0;
+               vrLen = 1015;
+               vrLoc = 3216;
+       };
+       6E51A9BB0573385700506538 = {
+               fRef = 6E51A986057330B900506538;
+               isa = PBXTextBookmark;
+               name = "cheat_shared.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 237;
+               vrLoc = 0;
+       };
+       6E51A9BC0573385700506538 = {
+               fRef = 2A37F4B0FDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "main.m: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 477;
+               vrLoc = 0;
+       };
+       6E51A9BD0573385700506538 = {
+               fRef = 6E51A986057330B900506538;
+               isa = PBXTextBookmark;
+               name = "cheat_shared.h: 5";
+               rLen = 0;
+               rLoc = 135;
+               rType = 0;
+               vrLen = 391;
+               vrLoc = 0;
+       };
+       6E51A9BE0573385700506538 = {
+               fRef = 6E51A987057330B900506538;
+               isa = PBXTextBookmark;
+               name = "cheat_shared.m: 5";
+               rLen = 0;
+               rLoc = 137;
+               rType = 0;
+               vrLen = 371;
+               vrLoc = 0;
+       };
+       6E51A9BF0573385700506538 = {
+               fRef = 6E51A97D0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.m: 5";
+               rLen = 0;
+               rLoc = 143;
+               rType = 0;
+               vrLen = 389;
+               vrLoc = 0;
+       };
+       6E51A9C00573385700506538 = {
+               fRef = 6E51A986057330B900506538;
+               isa = PBXTextBookmark;
+               name = "cheat_shared.h: LaunchWebsite";
+               rLen = 41;
+               rLoc = 359;
+               rType = 0;
+               vrLen = 394;
+               vrLoc = 0;
+       };
+       6E51A9C10573385700506538 = {
+               fRef = 6E51A987057330B900506538;
+               isa = PBXTextBookmark;
+               name = "cheat_shared.m: 18";
+               rLen = 0;
+               rLoc = 457;
+               rType = 0;
+               vrLen = 388;
+               vrLoc = 0;
+       };
+       6E51A9C20573385700506538 = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 139";
+               rLen = 16;
+               rLoc = 4019;
+               rType = 0;
+               vrLen = 1015;
+               vrLoc = 3216;
+       };
+       6E51A9C30573385700506538 = {
+               fRef = 6E51A987057330B900506538;
+               isa = PBXTextBookmark;
+               name = "cheat_shared.m: 16";
+               rLen = 0;
+               rLoc = 454;
+               rType = 0;
+               vrLen = 482;
+               vrLoc = 0;
+       };
+       6E51A9C40573385700506538 = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 144";
+               rLen = 0;
+               rLoc = 4037;
+               rType = 0;
+               vrLen = 1015;
+               vrLoc = 3216;
+       };
+       6E51A9C50573385700506538 = {
+               fRef = 6E51A987057330B900506538;
+               isa = PBXTextBookmark;
+               name = "cheat_shared.m: 21";
+               rLen = 0;
+               rLoc = 605;
+               rType = 0;
+               vrLen = 607;
+               vrLoc = 0;
+       };
+       6E51A9C60573385700506538 = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 13";
+               rLen = 0;
+               rLoc = 362;
+               rType = 0;
+               vrLen = 1631;
+               vrLoc = 0;
+       };
+       6E51A9C70573385700506538 = {
+               fRef = 6E3F0D01050D4ACC00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_net.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1063;
+               vrLoc = 0;
+       };
+       6E51A9C80573385700506538 = {
+               fRef = 6E51A986057330B900506538;
+               isa = PBXTextBookmark;
+               name = "cheat_shared.h: LaunchWebsite";
+               rLen = 41;
+               rLoc = 359;
+               rType = 0;
+               vrLen = 394;
+               vrLoc = 0;
+       };
+       6E51A9C90573385700506538 = {
+               fRef = 6E3F0D01050D4ACC00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_net.h: 11";
+               rLen = 41;
+               rLoc = 306;
+               rType = 0;
+               vrLen = 1063;
+               vrLoc = 0;
+       };
+       6E51A9CA0573385700506538 = {
+               fRef = 6E51A986057330B900506538;
+               isa = PBXTextBookmark;
+               name = "cheat_shared.h: 17";
+               rLen = 0;
+               rLoc = 401;
+               rType = 0;
+               vrLen = 409;
+               vrLoc = 0;
+       };
+       6E51A9CB0573385700506538 = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 13";
+               rLen = 25;
+               rLoc = 337;
+               rType = 0;
+               vrLen = 1655;
+               vrLoc = 0;
+       };
+       6E51A9CC0573385700506538 = {
+               fRef = 6E51A97D0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.m: 15";
+               rLen = 0;
+               rLoc = 374;
+               rType = 0;
+               vrLen = 416;
+               vrLoc = 0;
+       };
+       6E51A9CD0573385700506538 = {
+               fRef = 6E4E098C050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.h: launchWebsiteMenu:";
+               rLen = 41;
+               rLoc = 1345;
+               rType = 0;
+               vrLen = 1056;
+               vrLoc = 309;
+       };
+       6E51A9CE0573385700506538 = {
+               fRef = 6E51A97C0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.h: launchWebsiteButton:";
+               rLen = 85;
+               rLoc = 441;
+               rType = 0;
+               vrLen = 490;
+               vrLoc = 0;
+       };
+       6E51A9CF0573385700506538 = {
+               fRef = 6E51A97D0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.m: 26";
+               rLen = 0;
+               rLoc = 653;
+               rType = 0;
+               vrLen = 546;
+               vrLoc = 0;
+       };
+       6E51A9D00573385700506538 = {
+               fRef = 6E0D40AC05223CCE00A80003;
+               isa = PBXTextBookmark;
+               name = "NetTrafficController.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1017;
+               vrLoc = 0;
+       };
+       6E51A9D10573385700506538 = {
+               fRef = 6E0D40AD05223CCE00A80003;
+               isa = PBXTextBookmark;
+               name = "NetTrafficController.m: 14";
+               rLen = 0;
+               rLoc = 375;
+               rType = 0;
+               vrLen = 939;
+               vrLoc = 82;
+       };
+       6E51A9D20573385700506538 = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: stopBroadcast";
+               rLen = 44;
+               rLoc = 3251;
+               rType = 0;
+               vrLen = 819;
+               vrLoc = 2674;
+       };
+       6E51A9D30573385700506538 = {
+               fRef = 6E4E098C050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.h: aboutBoxController";
+               rLen = 18;
+               rLoc = 916;
+               rType = 0;
+               vrLen = 1094;
+               vrLoc = 309;
+       };
+       6E51A9D40573385700506538 = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 117";
+               rLen = 0;
+               rLoc = 3179;
+               rType = 0;
+               vrLen = 927;
+               vrLoc = 2677;
+       };
+       6E51A9D50573385700506538 = {
+               fRef = 6E51A97C0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.h: launchWebsiteButton:";
+               rLen = 85;
+               rLoc = 441;
+               rType = 0;
+               vrLen = 490;
+               vrLoc = 0;
+       };
+       6E51A9D60573385700506538 = {
+               fRef = 6E0D40B4052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.h: 18";
+               rLen = 18;
+               rLoc = 440;
+               rType = 0;
+               vrLen = 994;
+               vrLoc = 0;
+       };
+       6E51A9D70573385700506538 = {
+               fRef = 6E51A97C0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.h: 14";
+               rLen = 0;
+               rLoc = 401;
+               rType = 0;
+               vrLen = 500;
+               vrLoc = 0;
+       };
+       6E51A9D80573385700506538 = {
+               fRef = 6E51A97D0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.m: 26";
+               rLen = 0;
+               rLoc = 653;
+               rType = 0;
+               vrLen = 546;
+               vrLoc = 0;
+       };
+       6E51A9D90573385700506538 = {
+               fRef = 6E0D40B4052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.h: 18";
+               rLen = 18;
+               rLoc = 440;
+               rType = 0;
+               vrLen = 994;
+               vrLoc = 0;
+       };
+       6E51A9DA0573385700506538 = {
+               fRef = 6E51A97D0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.m: 26";
+               rLen = 0;
+               rLoc = 653;
+               rType = 0;
+               vrLen = 546;
+               vrLoc = 0;
+       };
+       6E51A9DB0573385700506538 = {
+               fRef = 6E0D40B4052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.h: 18";
+               rLen = 18;
+               rLoc = 440;
+               rType = 0;
+               vrLen = 994;
+               vrLoc = 0;
+       };
+       6E51A9DC0573385700506538 = {
+               fRef = 6E0D40B5052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.m: 71";
+               rLen = 0;
+               rLoc = 1666;
+               rType = 0;
+               vrLen = 1060;
+               vrLoc = 106;
+       };
+       6E51A9DD0573385700506538 = {
+               fRef = 6E0D40B4052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.h: 18";
+               rLen = 18;
+               rLoc = 440;
+               rType = 0;
+               vrLen = 994;
+               vrLoc = 0;
+       };
+       6E51A9DE0573385700506538 = {
+               fRef = 6E51A97C0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.h: aboutWindow";
+               rLen = 0;
+               rLoc = 437;
+               rType = 0;
+               vrLen = 524;
+               vrLoc = 0;
+       };
+       6E51A9DF0573385700506538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: search";
+               rLen = 31;
+               rLoc = 4141;
+               rType = 0;
+               vrLen = 1344;
+               vrLoc = 1099;
+       };
+       6E51A9E00573385700506538 = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 117";
+               rLen = 0;
+               rLoc = 3179;
+               rType = 0;
+               vrLen = 927;
+               vrLoc = 2677;
+       };
+       6E51A9E10573385700506538 = {
+               fRef = 6E51A97C0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.h: aboutWindow";
+               rLen = 0;
+               rLoc = 414;
+               rType = 0;
+               vrLen = 533;
+               vrLoc = 0;
+       };
+       6E51A9E20573385700506538 = {
+               fRef = 6E51A97D0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.m: 23";
+               rLen = 0;
+               rLoc = 475;
+               rType = 0;
+               vrLen = 637;
+               vrLoc = 0;
+       };
+       6E51A9E30573385700506538 = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 15";
+               rLen = 0;
+               rLoc = 393;
+               rType = 0;
+               vrLen = 1586;
+               vrLoc = 0;
+       };
+       6E51A9E40573385700506538 = {
+               fRef = 6E4E098C050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.h: showAboutBoxWindow:";
+               rLen = 0;
+               rLoc = 1214;
+               rType = 0;
+               vrLen = 1139;
+               vrLoc = 334;
+       };
+       6E51A9E50573385700506538 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1340";
+               rLen = 0;
+               rLoc = 31589;
+               rType = 0;
+               vrLen = 998;
+               vrLoc = 29449;
+       };
+       6E51A9E60573385700506538 = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 118";
+               rLen = 0;
+               rLoc = 3201;
+               rType = 0;
+               vrLen = 814;
+               vrLoc = 2436;
+       };
+       6E51A9E70573385700506538 = {
+               fRef = 6E0D40B5052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.m: 19";
+               rLen = 44;
+               rLoc = 437;
+               rType = 0;
+               vrLen = 1060;
+               vrLoc = 106;
+       };
+       6E51A9E80573385700506538 = {
+               fRef = 6E51A97C0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.h: aboutWindow";
+               rLen = 0;
+               rLoc = 414;
+               rType = 0;
+               vrLen = 533;
+               vrLoc = 0;
+       };
+       6E51A9E90573385700506538 = {
+               fRef = 6E51A97D0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.m: 21";
+               rLen = 0;
+               rLoc = 475;
+               rType = 0;
+               vrLen = 614;
+               vrLoc = 0;
+       };
+       6E51A9EA0573385700506538 = {
+               fRef = 6E0D40B5052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.m: 19";
+               rLen = 44;
+               rLoc = 437;
+               rType = 0;
+               vrLen = 1060;
+               vrLoc = 106;
+       };
+       6E5678E305350AF600A80003 = {
+               expectedFileType = text.html;
+               fileEncoding = 30;
+               isa = PBXFileReference;
+               name = "Read Me.html";
+               path = "/Users/chaz/Projects/The Cheat/Read Me.html";
+               refType = 0;
+               sourceTree = "<absolute>";
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {3751, 710}}";
+                       sepNavSelRange = "{2060, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       6E5EC36705633214001E3A3E = {
+               fRef = 6E5EC3BF05633214001E3A3E;
+               isa = PBXTextBookmark;
+               name = "(null): 68";
+               rLen = 44;
+               rLoc = 3031;
+               rType = 0;
+               vrLen = 1193;
+               vrLoc = 2522;
+       };
+       6E5EC36905633214001E3A3E = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: 19";
+               rLen = 0;
+               rLoc = 610;
+               rType = 0;
+               vrLen = 1229;
+               vrLoc = 0;
+       };
+       6E5EC36C05633214001E3A3E = {
+               fRef = 089C1660FE840EACC02AAC07;
+               isa = PBXTextBookmark;
+               name = "English: 7";
+               rLen = 0;
+               rLoc = 201;
+               rType = 0;
+               vrLen = 205;
+               vrLoc = 0;
+       };
+       6E5EC36D05633214001E3A3E = {
+               fRef = 2A37F4BAFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "English: 4";
+               rLen = 0;
+               rLoc = 66;
+               rType = 0;
+               vrLen = 66;
+               vrLoc = 0;
+       };
+       6E5EC37005633214001E3A3E = {
+               fRef = 6E5678E305350AF600A80003;
+               isa = PBXTextBookmark;
+               name = "Read Me.html: 38";
+               rLen = 0;
+               rLoc = 2060;
+               rType = 0;
+               vrLen = 2106;
+               vrLoc = 0;
+       };
+       6E5EC37105633214001E3A3E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1047";
+               rLen = 0;
+               rLoc = 29718;
+               rType = 0;
+               vrLen = 866;
+               vrLoc = 22574;
+       };
+       6E5EC37205633214001E3A3E = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: changeButton";
+               rLen = 0;
+               rLoc = 1843;
+               rType = 0;
+               vrLen = 1205;
+               vrLoc = 866;
+       };
+       6E5EC37305633214001E3A3E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: updateSearchBoxes";
+               rLen = 18;
+               rLoc = 4436;
+               rType = 0;
+               vrLen = 753;
+               vrLoc = 2534;
+       };
+       6E5EC37405633214001E3A3E = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: updateChangeButton";
+               rLen = 0;
+               rLoc = 2623;
+               rType = 0;
+               vrLen = 1293;
+               vrLoc = 1250;
+       };
+       6E5EC37505633214001E3A3E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 290";
+               rLen = 0;
+               rLoc = 8890;
+               rType = 0;
+               vrLen = 1199;
+               vrLoc = 5908;
+       };
+       6E5EC37605633214001E3A3E = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: updateStopButon";
+               rLen = 0;
+               rLoc = 2624;
+               rType = 0;
+               vrLen = 1297;
+               vrLoc = 1250;
+       };
+       6E5EC37705633214001E3A3E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 151";
+               rLen = 0;
+               rLoc = 4566;
+               rType = 0;
+               vrLen = 799;
+               vrLoc = 2586;
+       };
+       6E5EC37805633214001E3A3E = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: updateChangeButton";
+               rLen = 0;
+               rLoc = 2624;
+               rType = 0;
+               vrLen = 1335;
+               vrLoc = 1208;
+       };
+       6E5EC37905633214001E3A3E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 227";
+               rLen = 0;
+               rLoc = 6784;
+               rType = 0;
+               vrLen = 1248;
+               vrLoc = 3881;
+       };
+       6E5EC37A05633214001E3A3E = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: setStatusText:duration:color:";
+               rLen = 94;
+               rLoc = 2988;
+               rType = 0;
+               vrLen = 1409;
+               vrLoc = 1208;
+       };
+       6E5EC37B05633214001E3A3E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 434";
+               rLen = 0;
+               rLoc = 11905;
+               rType = 0;
+               vrLen = 974;
+               vrLoc = 9619;
+       };
+       6E5EC37C05633214001E3A3E = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: savedStatusColor";
+               rLen = 16;
+               rLoc = 1193;
+               rType = 0;
+               vrLen = 1195;
+               vrLoc = 734;
+       };
+       6E5EC37D05633214001E3A3E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 220";
+               rLen = 0;
+               rLoc = 6627;
+               rType = 0;
+               vrLen = 1436;
+               vrLoc = 3908;
+       };
+       6E5EC37E05633214001E3A3E = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 402";
+               rLen = 0;
+               rLoc = 21947;
+               rType = 0;
+               vrLen = 1280;
+               vrLoc = 7697;
+       };
+       6E5EC37F05633214001E3A3E = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: unpause";
+               rLen = 15;
+               rLoc = 3012;
+               rType = 0;
+               vrLen = 1466;
+               vrLoc = 989;
+       };
+       6E5EC38005633214001E3A3E = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 813";
+               rLen = 0;
+               rLoc = 36225;
+               rType = 0;
+               vrLen = 785;
+               vrLoc = 16680;
+       };
+       6E5EC38105633214001E3A3E = {
+               fRef = 6E0D40B4052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.h: playSoundsButton";
+               rLen = 0;
+               rLoc = 538;
+               rType = 0;
+               vrLen = 983;
+               vrLoc = 0;
+       };
+       6E5EC38205633214001E3A3E = {
+               fRef = 6E0D40B5052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.m: 38";
+               rLen = 18;
+               rLoc = 740;
+               rType = 0;
+               vrLen = 1026;
+               vrLoc = 235;
+       };
+       6E5EC38305633214001E3A3E = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: 25";
+               rLen = 0;
+               rLoc = 811;
+               rType = 0;
+               vrLen = 1070;
+               vrLoc = 0;
+       };
+       6E5EC38405633214001E3A3E = {
+               fRef = 6E71F41C051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.m: TCGlobalPlaySounds";
+               rLen = 0;
+               rLoc = 550;
+               rType = 0;
+               vrLen = 839;
+               vrLoc = 0;
+       };
+       6E5EC38505633214001E3A3E = {
+               fRef = 6E4E098C050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1103;
+               vrLoc = 0;
+       };
+       6E5EC38605633214001E3A3E = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 28";
+               rLen = 94;
+               rLoc = 1031;
+               rType = 0;
+               vrLen = 1425;
+               vrLoc = 309;
+       };
+       6E5EC38705633214001E3A3E = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: TCPlaySoundsPref";
+               rLen = 16;
+               rLoc = 1048;
+               rType = 0;
+               vrLen = 1107;
+               vrLoc = 0;
+       };
+       6E5EC38805633214001E3A3E = {
+               fRef = 6E71F41C051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.m: TCWindowsOnTopPref";
+               rLen = 0;
+               rLoc = 726;
+               rType = 0;
+               vrLen = 896;
+               vrLoc = 0;
+       };
+       6E5EC38905633214001E3A3E = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: TCPlaySoundsPref";
+               rLen = 16;
+               rLoc = 1048;
+               rType = 0;
+               vrLen = 1107;
+               vrLoc = 0;
+       };
+       6E5EC38A05633214001E3A3E = {
+               fRef = 6E71F41C051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.m: TCPlaySoundsPref";
+               rLen = 0;
+               rLoc = 724;
+               rType = 0;
+               vrLen = 892;
+               vrLoc = 0;
+       };
+       6E5EC38B05633214001E3A3E = {
+               fRef = 6E4E098C050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1103;
+               vrLoc = 0;
+       };
+       6E5EC38C05633214001E3A3E = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 36";
+               rLen = 18;
+               rLoc = 1495;
+               rType = 0;
+               vrLen = 1607;
+               vrLoc = 309;
+       };
+       6E5EC38D05633214001E3A3E = {
+               fRef = 6E0D40B5052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.m: 71";
+               rLen = 0;
+               rLoc = 1666;
+               rType = 0;
+               vrLen = 1010;
+               vrLoc = 1133;
+       };
+       6E5EC38E05633214001E3A3E = {
+               fRef = 6E0D40B4052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.h: playSoundsButton:";
+               rLen = 0;
+               rLoc = 811;
+               rType = 0;
+               vrLen = 994;
+               vrLoc = 0;
+       };
+       6E5EC38F05633214001E3A3E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1540";
+               rLen = 0;
+               rLoc = 40858;
+               rType = 0;
+               vrLen = 1098;
+               vrLoc = 33028;
+       };
+       6E5EC39005633214001E3A3E = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: TCGlobalPlaySounds";
+               rLen = 18;
+               rLoc = 792;
+               rType = 0;
+               vrLen = 1107;
+               vrLoc = 0;
+       };
+       6E5EC39105633214001E3A3E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1543";
+               rLen = 0;
+               rLoc = 40897;
+               rType = 0;
+               vrLen = 1005;
+               vrLoc = 33148;
+       };
+       6E5EC39205633214001E3A3E = {
+               fRef = 6E0D40B5052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.m: 71";
+               rLen = 0;
+               rLoc = 1666;
+               rType = 0;
+               vrLen = 1176;
+               vrLoc = 709;
+       };
+       6E5EC39305633214001E3A3E = {
+               fRef = 6E71F41C051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.m: TCPlaySoundsPref";
+               rLen = 0;
+               rLoc = 724;
+               rType = 0;
+               vrLen = 892;
+               vrLoc = 0;
+       };
+       6E5EC39405633214001E3A3E = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: 18";
+               rLen = 0;
+               rLoc = 570;
+               rType = 0;
+               vrLen = 1162;
+               vrLoc = 0;
+       };
+       6E5EC39505633214001E3A3E = {
+               fRef = 6E0D40B90522449500A80003;
+               isa = PBXTextBookmark;
+               name = "CheatListener.m: 184";
+               rLen = 19;
+               rLoc = 4291;
+               rType = 0;
+               vrLen = 339;
+               vrLoc = 3986;
+       };
+       6E5EC39605633214001E3A3E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 492";
+               rLen = 19;
+               rLoc = 13390;
+               rType = 0;
+               vrLen = 941;
+               vrLoc = 11195;
+       };
+       6E5EC39705633214001E3A3E = {
+               fRef = 6E71F41C051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.m: TCPlaySoundsPref";
+               rLen = 0;
+               rLoc = 724;
+               rType = 0;
+               vrLen = 892;
+               vrLoc = 0;
+       };
+       6E5EC39805633214001E3A3E = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: 17";
+               rLen = 19;
+               rLoc = 439;
+               rType = 0;
+               vrLen = 1139;
+               vrLoc = 0;
+       };
+       6E5EC39905633214001E3A3E = {
+               fRef = 6E0D40B90522449500A80003;
+               isa = PBXTextBookmark;
+               name = "CheatListener.m: 103";
+               rLen = 8;
+               rLoc = 2851;
+               rType = 0;
+               vrLen = 1662;
+               vrLoc = 2080;
+       };
+       6E5EC39A05633214001E3A3E = {
+               fRef = 6E5EC3BE05633214001E3A3E;
+               isa = PBXTextBookmark;
+               name = "(null): 68";
+               rLen = 0;
+               rLoc = 3050;
+               rType = 0;
+               vrLen = 1393;
+               vrLoc = 2296;
+       };
+       6E5EC39B05633214001E3A3E = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: 18";
+               rLen = 0;
+               rLoc = 611;
+               rType = 0;
+               vrLen = 1143;
+               vrLoc = 0;
+       };
+       6E5EC39C05633214001E3A3E = {
+               fRef = 6E0D40B90522449500A80003;
+               isa = PBXTextBookmark;
+               name = "CheatListener.m: 103";
+               rLen = 8;
+               rLoc = 2851;
+               rType = 0;
+               vrLen = 1662;
+               vrLoc = 2080;
+       };
+       6E5EC39D05633214001E3A3E = {
+               fRef = 6E5EC3C005633214001E3A3E;
+               isa = PBXTextBookmark;
+               name = "(null): 68";
+               rLen = 44;
+               rLoc = 3031;
+               rType = 0;
+               vrLen = 1193;
+               vrLoc = 2522;
+       };
+       6E5EC39E05633214001E3A3E = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: 18";
+               rLen = 0;
+               rLoc = 570;
+               rType = 0;
+               vrLen = 1244;
+               vrLoc = 0;
+       };
+       6E5EC39F05633214001E3A3E = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 30";
+               rLen = 0;
+               rLoc = 936;
+               rType = 0;
+               vrLen = 1693;
+               vrLoc = 309;
+       };
+       6E5EC3A005633214001E3A3E = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: TCDefaultListenPath";
+               rLen = 19;
+               rLoc = 586;
+               rType = 0;
+               vrLen = 1244;
+               vrLoc = 0;
+       };
+       6E5EC3A105633214001E3A3E = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 34";
+               rLen = 0;
+               rLoc = 936;
+               rType = 0;
+               vrLen = 1730;
+               vrLoc = 228;
+       };
+       6E5EC3A205633214001E3A3E = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: 19";
+               rLen = 0;
+               rLoc = 610;
+               rType = 0;
+               vrLen = 1245;
+               vrLoc = 0;
+       };
+       6E5EC3A305633214001E3A3E = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 34";
+               rLen = 0;
+               rLoc = 936;
+               rType = 0;
+               vrLen = 1730;
+               vrLoc = 228;
+       };
+       6E5EC3A405633214001E3A3E = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: TCDefaultListenPath";
+               rLen = 0;
+               rLoc = 610;
+               rType = 0;
+               vrLen = 1245;
+               vrLoc = 0;
+       };
+       6E5EC3A505633214001E3A3E = {
+               fRef = 6E0D40B90522449500A80003;
+               isa = PBXTextBookmark;
+               name = "CheatListener.m: 103";
+               rLen = 0;
+               rLoc = 2885;
+               rType = 0;
+               vrLen = 1668;
+               vrLoc = 2080;
+       };
+       6E5EC3A605633214001E3A3E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 492";
+               rLen = 0;
+               rLoc = 13414;
+               rType = 0;
+               vrLen = 947;
+               vrLoc = 11195;
+       };
+       6E5EC3A705633214001E3A3E = {
+               fRef = 6E0D40B90522449500A80003;
+               isa = PBXTextBookmark;
+               name = "CheatListener.m: 184";
+               rLen = 0;
+               rLoc = 4283;
+               rType = 0;
+               vrLen = 348;
+               vrLoc = 3977;
+       };
+       6E5EC3A805633214001E3A3E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 492";
+               rLen = 0;
+               rLoc = 13414;
+               rType = 0;
+               vrLen = 947;
+               vrLoc = 11195;
+       };
+       6E5EC3A905633214001E3A3E = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: TCMaxSearchResults";
+               rLen = 0;
+               rLoc = 648;
+               rType = 0;
+               vrLen = 1245;
+               vrLoc = 0;
+       };
+       6E5EC3AA05633214001E3A3E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 494";
+               rLen = 0;
+               rLoc = 13464;
+               rType = 0;
+               vrLen = 947;
+               vrLoc = 11195;
+       };
+       6E5EC3AB05633214001E3A3E = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: TCDefaultListenPath";
+               rLen = 40;
+               rLoc = 571;
+               rType = 0;
+               vrLen = 1251;
+               vrLoc = 0;
+       };
+       6E5EC3AC05633214001E3A3E = {
+               fRef = 6E71F41C051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.m: TCDefaultListenPath";
+               rLen = 0;
+               rLoc = 347;
+               rType = 0;
+               vrLen = 950;
+               vrLoc = 0;
+       };
+       6E5EC3AD05633214001E3A3E = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: 19";
+               rLen = 0;
+               rLoc = 610;
+               rType = 0;
+               vrLen = 1229;
+               vrLoc = 0;
+       };
+       6E5EC3AE05633214001E3A3E = {
+               fRef = 6E0D40B90522449500A80003;
+               isa = PBXTextBookmark;
+               name = "CheatListener.m: 184";
+               rLen = 0;
+               rLoc = 4283;
+               rType = 0;
+               vrLen = 346;
+               vrLoc = 3979;
+       };
+       6E5EC3AF05633214001E3A3E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 494";
+               rLen = 0;
+               rLoc = 13464;
+               rType = 0;
+               vrLen = 947;
+               vrLoc = 11195;
+       };
+       6E5EC3B005633214001E3A3E = {
+               fRef = 6E0D40B90522449500A80003;
+               isa = PBXTextBookmark;
+               name = "CheatListener.m: 162";
+               rLen = 0;
+               rLoc = 4108;
+               rType = 0;
+               vrLen = 633;
+               vrLoc = 3692;
+       };
+       6E5EC3B105633214001E3A3E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 476";
+               rLen = 0;
+               rLoc = 13018;
+               rType = 0;
+               vrLen = 947;
+               vrLoc = 11195;
+       };
+       6E5EC3B205633214001E3A3E = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 32";
+               rLen = 0;
+               rLoc = 933;
+               rType = 0;
+               vrLen = 1827;
+               vrLoc = 228;
+       };
+       6E5EC3B305633214001E3A3E = {
+               fRef = 6E0D40B90522449500A80003;
+               isa = PBXTextBookmark;
+               name = "CheatListener.m: 103";
+               rLen = 0;
+               rLoc = 2885;
+               rType = 0;
+               vrLen = 1473;
+               vrLoc = 2080;
+       };
+       6E5EC3B405633214001E3A3E = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 492";
+               rLen = 0;
+               rLoc = 13414;
+               rType = 0;
+               vrLen = 947;
+               vrLoc = 11195;
+       };
+       6E5EC3B505633214001E3A3E = {
+               fRef = 2A37F4BAFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "English: 9";
+               rLen = 0;
+               rLoc = 104;
+               rType = 0;
+               vrLen = 104;
+               vrLoc = 0;
+       };
+       6E5EC3B605633214001E3A3E = {
+               fRef = 089C1660FE840EACC02AAC07;
+               isa = PBXTextBookmark;
+               name = "English: 7";
+               rLen = 0;
+               rLoc = 201;
+               rType = 0;
+               vrLen = 205;
+               vrLoc = 0;
+       };
+       6E5EC3B705633214001E3A3E = {
+               fRef = 2A37F4BAFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "English: 4";
+               rLen = 0;
+               rLoc = 66;
+               rType = 0;
+               vrLen = 66;
+               vrLoc = 0;
+       };
+       6E5EC3B805633214001E3A3E = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: launchEmailMenu:";
+               rLen = 43;
+               rLoc = 4039;
+               rType = 0;
+               vrLen = 1014;
+               vrLoc = 3218;
+       };
+       6E5EC3B905633214001E3A3E = {
+               fRef = 6E4E098C050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.h: stopListener";
+               rLen = 0;
+               rLoc = 1102;
+               rType = 0;
+               vrLen = 1133;
+               vrLoc = 228;
+       };
+       6E5EC3BA05633214001E3A3E = {
+               fRef = 6E5678E305350AF600A80003;
+               isa = PBXTextBookmark;
+               name = "Read Me.html: 33";
+               rLen = 0;
+               rLoc = 1765;
+               rType = 0;
+               vrLen = 1602;
+               vrLoc = 0;
+       };
+       6E5EC3BB05633214001E3A3E = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 149";
+               rLen = 32;
+               rLoc = 4148;
+               rType = 0;
+               vrLen = 1016;
+               vrLoc = 3216;
+       };
+       6E5EC3BC05633214001E3A3E = {
+               fRef = 6E5678E305350AF600A80003;
+               isa = PBXTextBookmark;
+               name = "Read Me.html: 38";
+               rLen = 0;
+               rLoc = 2060;
+               rType = 0;
+               vrLen = 2106;
+               vrLoc = 0;
+       };
+       6E5EC3BE05633214001E3A3E = {
+               isa = PBXFileReference;
+               name = un.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/sys/un.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E5EC3BF05633214001E3A3E = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = un.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/sys/un.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E5EC3C005633214001E3A3E = {
+               isa = PBXFileReference;
+               name = un.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/sys/un.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E6126C7056B3091006177EC = {
+               fRef = 6E0D40B90522449500A80003;
+               isa = PBXTextBookmark;
+               name = "CheatListener.m: 103";
+               rLen = 0;
+               rLoc = 2885;
+               rType = 0;
+               vrLen = 1473;
+               vrLoc = 2080;
+       };
+       6E6126C8056B3091006177EC = {
+               fRef = 6EE0044305609C0600F8A5B1;
+               isa = PBXTextBookmark;
+               name = "stdlib.h: free";
+               rLen = 26;
+               rLoc = 4005;
+               rType = 0;
+               vrLen = 1244;
+               vrLoc = 3504;
+       };
+       6E6126C9056B3091006177EC = {
+               fRef = 6EE0044405609C0C00F8A5B1;
+               isa = PBXTextBookmark;
+               name = "NSObjCRuntime.h: NSLog";
+               rLen = 53;
+               rLoc = 1627;
+               rType = 0;
+               vrLen = 1191;
+               vrLoc = 899;
+       };
+       6E6126CB056B3091006177EC = {
+               fRef = 6E61273F056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1438;
+               vrLoc = 1751;
+       };
+       6E6126CC056B3091006177EC = {
+               fRef = 6E612721056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 16";
+               rLen = 7;
+               rLoc = 759;
+               rType = 0;
+               vrLen = 1715;
+               vrLoc = 3059;
+       };
+       6E6126CD056B3091006177EC = {
+               fRef = 6E61271E056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 580";
+               rLen = 45;
+               rLoc = 13814;
+               rType = 0;
+               vrLen = 1797;
+               vrLoc = 14643;
+       };
+       6E6126CE056B3091006177EC = {
+               fRef = 6E612735056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1551;
+               vrLoc = 0;
+       };
+       6E6126CF056B3091006177EC = {
+               fRef = 6E612716056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1441;
+               vrLoc = 956;
+       };
+       6E6126D0056B3091006177EC = {
+               fRef = 6E61273C056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1396;
+               vrLoc = 3676;
+       };
+       6E6126D1056B3091006177EC = {
+               fRef = 6E612737056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 2187;
+               vrLoc = 6860;
+       };
+       6E6126D2056B3091006177EC = {
+               fRef = 6E612718056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1581;
+               vrLoc = 941;
+       };
+       6E6126D3056B3091006177EC = {
+               fRef = 6E612731056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 843;
+               vrLoc = 1417;
+       };
+       6E6126D4056B3091006177EC = {
+               fRef = 6E612748056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 105";
+               rLen = 17;
+               rLoc = 5073;
+               rType = 0;
+               vrLen = 2281;
+               vrLoc = 2925;
+       };
+       6E6126D5056B3091006177EC = {
+               fRef = 6E61272C056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1400;
+               vrLoc = 1142;
+       };
+       6E6126D6056B3091006177EC = {
+               fRef = 6E612726056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 873;
+               vrLoc = 907;
+       };
+       6E6126D7056B3091006177EC = {
+               fRef = 6E61273D056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1108;
+               vrLoc = 0;
+       };
+       6E6126D8056B3091006177EC = {
+               fRef = 6E612720056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1283;
+               vrLoc = 2121;
+       };
+       6E6126DA056B3091006177EC = {
+               fRef = 6E612719056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 80";
+               rLen = 18;
+               rLoc = 1507;
+               rType = 0;
+               vrLen = 771;
+               vrLoc = 1114;
+       };
+       6E6126DB056B3091006177EC = {
+               fRef = 6E612732056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 146";
+               rLen = 43;
+               rLoc = 4735;
+               rType = 0;
+               vrLen = 1561;
+               vrLoc = 5395;
+       };
+       6E6126DC056B3091006177EC = {
+               fRef = 6E61272D056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1108;
+               vrLoc = 2303;
+       };
+       6E6126DD056B3091006177EC = {
+               fRef = 6E612742056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1194;
+               vrLoc = 0;
+       };
+       6E6126DE056B3091006177EC = {
+               fRef = 6E612727056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 486";
+               rLen = 5;
+               rLoc = 8588;
+               rType = 0;
+               vrLen = 768;
+               vrLoc = 8157;
+       };
+       6E6126DF056B3091006177EC = {
+               fRef = 6E61273E056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 77";
+               rLen = 28;
+               rLoc = 2434;
+               rType = 0;
+               vrLen = 1564;
+               vrLoc = 0;
+       };
+       6E6126E0056B3091006177EC = {
+               fRef = 6E612747056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1165;
+               vrLoc = 0;
+       };
+       6E6126E1056B3091006177EC = {
+               fRef = 6E61272B056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1224;
+               vrLoc = 0;
+       };
+       6E6126E2056B3091006177EC = {
+               fRef = 6E612741056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 195";
+               rLen = 20;
+               rLoc = 5232;
+               rType = 0;
+               vrLen = 1890;
+               vrLoc = 11125;
+       };
+       6E6126E3056B3091006177EC = {
+               fRef = 6E612724056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 98";
+               rLen = 0;
+               rLoc = 3234;
+               rType = 0;
+               vrLen = 847;
+               vrLoc = 1058;
+       };
+       6E6126E4056B3091006177EC = {
+               fRef = 6E61271F056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 2538;
+               vrLoc = 1162;
+       };
+       6E6126E7056B3091006177EC = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 346";
+               rLen = 0;
+               rLoc = 12921;
+               rType = 0;
+               vrLen = 1245;
+               vrLoc = 5715;
+       };
+       6E6126E8056B3091006177EC = {
+               fRef = 6E0D40B90522449500A80003;
+               isa = PBXTextBookmark;
+               name = "CheatListener.m: 103";
+               rLen = 0;
+               rLoc = 2885;
+               rType = 0;
+               vrLen = 1473;
+               vrLoc = 2080;
+       };
+       6E6126E9056B3091006177EC = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: unpause";
+               rLen = 15;
+               rLoc = 3012;
+               rType = 0;
+               vrLen = 1479;
+               vrLoc = 976;
+       };
+       6E6126EA056B3091006177EC = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 13";
+               rLen = 0;
+               rLoc = 518;
+               rType = 0;
+               vrLen = 1340;
+               vrLoc = 0;
+       };
+       6E6126EB056B3091006177EC = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: 18";
+               rLen = 0;
+               rLoc = 441;
+               rType = 0;
+               vrLen = 828;
+               vrLoc = 0;
+       };
+       6E6126EC056B3091006177EC = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 287";
+               rLen = 12;
+               rLoc = 10999;
+               rType = 0;
+               vrLen = 1127;
+               vrLoc = 5242;
+       };
+       6E6126ED056B3091006177EC = {
+               fRef = 6E612736056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 36";
+               rLen = 39;
+               rLoc = 1166;
+               rType = 0;
+               vrLen = 1564;
+               vrLoc = 0;
+       };
+       6E6126EE056B3091006177EC = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 289";
+               rLen = 0;
+               rLoc = 11133;
+               rType = 0;
+               vrLen = 1136;
+               vrLoc = 5242;
+       };
+       6E6126EF056B3091006177EC = {
+               fRef = 6EE0044305609C0600F8A5B1;
+               isa = PBXTextBookmark;
+               name = "stdlib.h: free";
+               rLen = 26;
+               rLoc = 4005;
+               rType = 0;
+               vrLen = 1244;
+               vrLoc = 3504;
+       };
+       6E6126F0056B3091006177EC = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 349";
+               rLen = 51;
+               rLoc = 12869;
+               rType = 0;
+               vrLen = 1112;
+               vrLoc = 6926;
+       };
+       6E6126F1056B3091006177EC = {
+               fRef = 6EE0044405609C0C00F8A5B1;
+               isa = PBXTextBookmark;
+               name = "NSObjCRuntime.h: NSLog";
+               rLen = 53;
+               rLoc = 1627;
+               rType = 0;
+               vrLen = 1191;
+               vrLoc = 899;
+       };
+       6E6126F2056B3091006177EC = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 289";
+               rLen = 0;
+               rLoc = 11133;
+               rType = 0;
+               vrLen = 1121;
+               vrLoc = 5344;
+       };
+       6E6126F3056B3091006177EC = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: 18";
+               rLen = 0;
+               rLoc = 442;
+               rType = 0;
+               vrLen = 828;
+               vrLoc = 0;
+       };
+       6E6126F4056B3091006177EC = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 290";
+               rLen = 0;
+               rLoc = 11133;
+               rType = 0;
+               vrLen = 1149;
+               vrLoc = 5406;
+       };
+       6E6126F5056B3091006177EC = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 774";
+               rLen = 0;
+               rLoc = 18782;
+               rType = 0;
+               vrLen = 924;
+               vrLoc = 16873;
+       };
+       6E6126F6056B3091006177EC = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 282";
+               rLen = 0;
+               rLoc = 10904;
+               rType = 0;
+               vrLen = 1149;
+               vrLoc = 5406;
+       };
+       6E6126F7056B3091006177EC = {
+               fRef = 6E612738056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1438;
+               vrLoc = 1751;
+       };
+       6E6126F8056B3091006177EC = {
+               fRef = 6E61271B056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 16";
+               rLen = 7;
+               rLoc = 759;
+               rType = 0;
+               vrLen = 1715;
+               vrLoc = 3059;
+       };
+       6E6126F9056B3091006177EC = {
+               fRef = 6E612733056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1551;
+               vrLoc = 0;
+       };
+       6E6126FA056B3091006177EC = {
+               fRef = 6E612749056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 580";
+               rLen = 45;
+               rLoc = 13814;
+               rType = 0;
+               vrLen = 1797;
+               vrLoc = 14643;
+       };
+       6E6126FB056B3091006177EC = {
+               fRef = 6E61272E056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1551;
+               vrLoc = 0;
+       };
+       6E6126FC056B3091006177EC = {
+               fRef = 6E612743056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1441;
+               vrLoc = 956;
+       };
+       6E6126FD056B3091006177EC = {
+               fRef = 6E612728056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1396;
+               vrLoc = 3676;
+       };
+       6E6126FE056B3091006177EC = {
+               fRef = 6E612722056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 2187;
+               vrLoc = 6860;
+       };
+       6E6126FF056B3091006177EC = {
+               fRef = 6E612739056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1581;
+               vrLoc = 941;
+       };
+       6E612700056B3091006177EC = {
+               fRef = 6E612744056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 843;
+               vrLoc = 1417;
+       };
+       6E612701056B3091006177EC = {
+               fRef = 6E612729056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 105";
+               rLen = 17;
+               rLoc = 5073;
+               rType = 0;
+               vrLen = 2281;
+               vrLoc = 2925;
+       };
+       6E612702056B3091006177EC = {
+               fRef = 6E612723056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1400;
+               vrLoc = 1142;
+       };
+       6E612703056B3091006177EC = {
+               fRef = 6E61273A056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 873;
+               vrLoc = 907;
+       };
+       6E612704056B3091006177EC = {
+               fRef = 6E61271C056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1108;
+               vrLoc = 0;
+       };
+       6E612705056B3091006177EC = {
+               fRef = 6E612734056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1283;
+               vrLoc = 2121;
+       };
+       6E612706056B3091006177EC = {
+               fRef = 6E61272F056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 80";
+               rLen = 18;
+               rLoc = 1507;
+               rType = 0;
+               vrLen = 771;
+               vrLoc = 1114;
+       };
+       6E612707056B3091006177EC = {
+               fRef = 6E612745056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 146";
+               rLen = 43;
+               rLoc = 4735;
+               rType = 0;
+               vrLen = 1561;
+               vrLoc = 5395;
+       };
+       6E612708056B3091006177EC = {
+               fRef = 6E61272A056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1108;
+               vrLoc = 2303;
+       };
+       6E612709056B3091006177EC = {
+               fRef = 6E612740056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1194;
+               vrLoc = 0;
+       };
+       6E61270A056B3091006177EC = {
+               fRef = 6E612725056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 486";
+               rLen = 5;
+               rLoc = 8588;
+               rType = 0;
+               vrLen = 768;
+               vrLoc = 8157;
+       };
+       6E61270B056B3091006177EC = {
+               fRef = 6E61273B056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 77";
+               rLen = 28;
+               rLoc = 2434;
+               rType = 0;
+               vrLen = 1564;
+               vrLoc = 0;
+       };
+       6E61270C056B3091006177EC = {
+               fRef = 6E61271D056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1165;
+               vrLoc = 0;
+       };
+       6E61270D056B3091006177EC = {
+               fRef = 6E612717056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1224;
+               vrLoc = 0;
+       };
+       6E61270E056B3091006177EC = {
+               fRef = 6E612730056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 195";
+               rLen = 20;
+               rLoc = 5232;
+               rType = 0;
+               vrLen = 1890;
+               vrLoc = 11125;
+       };
+       6E61270F056B3091006177EC = {
+               fRef = 6E612746056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 98";
+               rLen = 0;
+               rLoc = 3234;
+               rType = 0;
+               vrLen = 847;
+               vrLoc = 1058;
+       };
+       6E612710056B3091006177EC = {
+               fRef = 6E61271A056B3091006177EC;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 2538;
+               vrLoc = 1162;
+       };
+       6E612711056B3091006177EC = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 290";
+               rLen = 0;
+               rLoc = 11212;
+               rType = 0;
+               vrLen = 1061;
+               vrLoc = 5406;
+       };
+       6E612712056B3091006177EC = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 499";
+               rLen = 0;
+               rLoc = 13507;
+               rType = 0;
+               vrLen = 894;
+               vrLoc = 11326;
+       };
+       6E612713056B3091006177EC = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 296";
+               rLen = 0;
+               rLoc = 11307;
+               rType = 0;
+               vrLen = 1097;
+               vrLoc = 5346;
+       };
+       6E612714056B3091006177EC = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 499";
+               rLen = 0;
+               rLoc = 13507;
+               rType = 0;
+               vrLen = 894;
+               vrLoc = 11326;
+       };
+       6E612716056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = mach_debug_types.h;
+               path = /usr/include/mach_debug/mach_debug_types.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612717056B3091006177EC = {
+               isa = PBXFileReference;
+               name = cpu.h;
+               path = /usr/include/ppc/cpu.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612718056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = fat.h;
+               path = "/usr/include/mach-o/fat.h";
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612719056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = task.h;
+               path = /usr/include/mach/ppc/task.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61271A056B3091006177EC = {
+               isa = PBXFileReference;
+               name = malloc.h;
+               path = /usr/include/malloc/malloc.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61271B056B3091006177EC = {
+               isa = PBXFileReference;
+               name = vm_info.h;
+               path = /usr/include/mach_debug/vm_info.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61271C056B3091006177EC = {
+               isa = PBXFileReference;
+               name = bootstrap.h;
+               path = /usr/include/mach/bootstrap.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61271D056B3091006177EC = {
+               isa = PBXFileReference;
+               name = cpu.h;
+               path = /usr/include/machine/cpu.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61271E056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = mach_host.h;
+               path = /usr/include/mach/mach_host.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61271F056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = malloc.h;
+               path = /usr/include/malloc/malloc.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612720056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = clock_reply.h;
+               path = /usr/include/mach/clock_reply.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612721056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = vm_info.h;
+               path = /usr/include/mach_debug/vm_info.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612722056B3091006177EC = {
+               isa = PBXFileReference;
+               name = reloc.h;
+               path = "/usr/include/mach-o/reloc.h";
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612723056B3091006177EC = {
+               isa = PBXFileReference;
+               name = asm_help.h;
+               path = /usr/include/architecture/ppc/asm_help.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612724056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = "objc-runtime.h";
+               path = "/usr/include/objc/objc-runtime.h";
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612725056B3091006177EC = {
+               isa = PBXFileReference;
+               name = vm_map.h;
+               path = /usr/include/mach/vm_map.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612726056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = libc.h;
+               path = /usr/include/libc.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612727056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = vm_map.h;
+               path = /usr/include/mach/vm_map.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612728056B3091006177EC = {
+               isa = PBXFileReference;
+               name = ipc_info.h;
+               path = /usr/include/mach_debug/ipc_info.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612729056B3091006177EC = {
+               isa = PBXFileReference;
+               name = http_request.h;
+               path = /usr/include/httpd/http_request.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61272A056B3091006177EC = {
+               isa = PBXFileReference;
+               name = time_value.h;
+               path = /usr/include/mach/time_value.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61272B056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = cpu.h;
+               path = /usr/include/ppc/cpu.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61272C056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = asm_help.h;
+               path = /usr/include/architecture/ppc/asm_help.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61272D056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = time_value.h;
+               path = /usr/include/mach/time_value.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61272E056B3091006177EC = {
+               isa = PBXFileReference;
+               name = mach_debug.h;
+               path = /usr/include/mach_debug/mach_debug.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61272F056B3091006177EC = {
+               isa = PBXFileReference;
+               name = task.h;
+               path = /usr/include/mach/ppc/task.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612730056B3091006177EC = {
+               isa = PBXFileReference;
+               name = pthread.h;
+               path = /usr/include/pthread.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612731056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = OSTypes.h;
+               path = /usr/include/libkern/OSTypes.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612732056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = mach_types.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/mach_types.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612733056B3091006177EC = {
+               isa = PBXFileReference;
+               name = mach_debug.h;
+               path = /usr/include/mach_debug/mach_debug.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612734056B3091006177EC = {
+               isa = PBXFileReference;
+               name = clock_reply.h;
+               path = /usr/include/mach/clock_reply.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612735056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = mach_debug.h;
+               path = /usr/include/mach_debug/mach_debug.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612736056B3091006177EC = {
+               isa = PBXFileReference;
+               name = vm_types.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_types.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612737056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = reloc.h;
+               path = "/usr/include/mach-o/reloc.h";
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612738056B3091006177EC = {
+               isa = PBXFileReference;
+               name = page_info.h;
+               path = /usr/include/mach_debug/page_info.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612739056B3091006177EC = {
+               isa = PBXFileReference;
+               name = fat.h;
+               path = "/usr/include/mach-o/fat.h";
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61273A056B3091006177EC = {
+               isa = PBXFileReference;
+               name = libc.h;
+               path = /usr/include/libc.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61273B056B3091006177EC = {
+               isa = PBXFileReference;
+               name = vm_types.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_types.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61273C056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = ipc_info.h;
+               path = /usr/include/mach_debug/ipc_info.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61273D056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = bootstrap.h;
+               path = /usr/include/mach/bootstrap.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61273E056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = vm_types.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_types.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E61273F056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = page_info.h;
+               path = /usr/include/mach_debug/page_info.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612740056B3091006177EC = {
+               isa = PBXFileReference;
+               name = vm_task.h;
+               path = /usr/include/mach/vm_task.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612741056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = pthread.h;
+               path = /usr/include/pthread.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612742056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = vm_task.h;
+               path = /usr/include/mach/vm_task.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612743056B3091006177EC = {
+               isa = PBXFileReference;
+               name = mach_debug_types.h;
+               path = /usr/include/mach_debug/mach_debug_types.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612744056B3091006177EC = {
+               isa = PBXFileReference;
+               name = OSTypes.h;
+               path = /usr/include/libkern/OSTypes.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612745056B3091006177EC = {
+               isa = PBXFileReference;
+               name = mach_types.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/mach_types.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612746056B3091006177EC = {
+               isa = PBXFileReference;
+               name = "objc-runtime.h";
+               path = "/usr/include/objc/objc-runtime.h";
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612747056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = cpu.h;
+               path = /usr/include/machine/cpu.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612748056B3091006177EC = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = http_request.h;
+               path = /usr/include/httpd/http_request.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E612749056B3091006177EC = {
+               isa = PBXFileReference;
+               name = mach_host.h;
+               path = /usr/include/mach/mach_host.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E71F41B051BCCC600A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
+                       sepNavSelRange = "{610, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       6E71F41C051BCCC600A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
+                       sepNavSelRange = "{347, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       6E81662F0559E79E00377CF7 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 422";
+               rLen = 0;
+               rLoc = 28733;
+               rType = 0;
+               vrLen = 736;
+               vrLoc = 7802;
+       };
+       6E8166300559E79E00377CF7 = {
+               fRef = 089C1660FE840EACC02AAC07;
+               isa = PBXTextBookmark;
+               name = "English: 4";
+               rLen = 0;
+               rLoc = 106;
+               rType = 0;
+               vrLen = 201;
+               vrLoc = 0;
+       };
+       6E8166310559E79E00377CF7 = {
+               fRef = 6E146B12051FA42C00A80003;
+               isa = PBXTextBookmark;
+               name = "CheatClient.m: connectToServer:name:";
+               rLen = 12;
+               rLoc = 2598;
+               rType = 0;
+               vrLen = 518;
+               vrLoc = 3725;
+       };
+       6E8166320559E79E00377CF7 = {
+               fRef = 089C1660FE840EACC02AAC07;
+               isa = PBXTextBookmark;
+               name = "English: 7";
+               rLen = 0;
+               rLoc = 201;
+               rType = 0;
+               vrLen = 201;
+               vrLoc = 0;
+       };
+       6E8166330559E79E00377CF7 = {
+               fRef = 2A37F4BAFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "English: 9";
+               rLen = 0;
+               rLoc = 104;
+               rType = 0;
+               vrLen = 104;
+               vrLoc = 0;
+       };
+       6E8166340559E79E00377CF7 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: 52";
+               rLen = 0;
+               rLoc = 1402;
+               rType = 0;
+               vrLen = 924;
+               vrLoc = 859;
+       };
+       6E8166350559E79E00377CF7 = {
+               fRef = 6E0BDF7D0511568D00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_types.h: 23";
+               rLen = 0;
+               rLoc = 521;
+               rType = 0;
+               vrLen = 940;
+               vrLoc = 0;
+       };
+       6E8166370559E79E00377CF7 = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 993;
+               vrLoc = 0;
+       };
+       6E8166380559E79E00377CF7 = {
+               fRef = 6E71F41C051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.m: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 804;
+               vrLoc = 0;
+       };
+       6E8166390559E79E00377CF7 = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: 19";
+               rLen = 0;
+               rLoc = 652;
+               rType = 0;
+               vrLen = 944;
+               vrLoc = 82;
+       };
+       6E81663A0559E79E00377CF7 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: 52";
+               rLen = 0;
+               rLoc = 1402;
+               rType = 0;
+               vrLen = 924;
+               vrLoc = 859;
+       };
+       6E81663C0559E79E00377CF7 = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: TCMaxSearchResults";
+               rLen = 0;
+               rLoc = 651;
+               rType = 0;
+               vrLen = 1026;
+               vrLoc = 0;
+       };
+       6E81663E0559E79E00377CF7 = {
+               fRef = 6E81664C0559E7C000377CF7;
+               isa = PBXTextBookmark;
+               name = "(null): 328";
+               rLen = 0;
+               rLoc = 11593;
+               rType = 0;
+               vrLen = 867;
+               vrLoc = 11952;
+       };
+       6E81663F0559E79E00377CF7 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: 52";
+               rLen = 0;
+               rLoc = 1402;
+               rType = 0;
+               vrLen = 924;
+               vrLoc = 859;
+       };
+       6E8166410559E79E00377CF7 = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: TCMaxSearchResults";
+               rLen = 0;
+               rLoc = 651;
+               rType = 0;
+               vrLen = 1026;
+               vrLoc = 0;
+       };
+       6E8166430559E79E00377CF7 = {
+               fRef = 6E0D40AD05223CCE00A80003;
+               isa = PBXTextBookmark;
+               name = "NetTrafficController.m: 25";
+               rLen = 64;
+               rLoc = 539;
+               rType = 0;
+               vrLen = 527;
+               vrLoc = 350;
+       };
+       6E8166450559E79E00377CF7 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: 27";
+               rLen = 0;
+               rLoc = 637;
+               rType = 0;
+               vrLen = 602;
+               vrLoc = 404;
+       };
+       6E8166460559E79E00377CF7 = {
+               fRef = 6E0BDF7D0511568D00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_types.h: TCaddress";
+               rLen = 9;
+               rLoc = 881;
+               rType = 0;
+               vrLen = 838;
+               vrLoc = 109;
+       };
+       6E8166480559E79E00377CF7 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: searchResults";
+               rLen = 0;
+               rLoc = 1005;
+               rType = 0;
+               vrLen = 714;
+               vrLoc = 479;
+       };
+       6E81664B0559E7C000377CF7 = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = math.h;
+               path = /usr/include/architecture/ppc/math.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E81664C0559E7C000377CF7 = {
+               isa = PBXFileReference;
+               name = math.h;
+               path = /usr/include/architecture/ppc/math.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E8166890559F3BD00377CF7 = {
+               fRef = 6E0BDF7D0511568D00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_types.h: TCaddress";
+               rLen = 9;
+               rLoc = 881;
+               rType = 0;
+               vrLen = 841;
+               vrLoc = 106;
+       };
+       6E81668B0559F3BD00377CF7 = {
+               fRef = 6E0BDF7D0511568D00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_types.h: 28";
+               rLen = 0;
+               rLoc = 564;
+               rType = 0;
+               vrLen = 780;
+               vrLoc = 167;
+       };
+       6E81668C0559F3BD00377CF7 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: searchResults";
+               rLen = 0;
+               rLoc = 1005;
+               rType = 0;
+               vrLen = 714;
+               vrLoc = 479;
+       };
+       6E81668E0559F3BD00377CF7 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: setStatusDisconnected";
+               rLen = 263;
+               rLoc = 2626;
+               rType = 0;
+               vrLen = 887;
+               vrLoc = 1230;
+       };
+       6E8166900559F3BD00377CF7 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: changePulldown";
+               rLen = 0;
+               rLoc = 1843;
+               rType = 0;
+               vrLen = 1012;
+               vrLoc = 870;
+       };
+       6E8166920559F3BD00377CF7 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: changePulldown";
+               rLen = 0;
+               rLoc = 1843;
+               rType = 0;
+               vrLen = 1012;
+               vrLoc = 870;
+       };
+       6E8166940559F3BD00377CF7 = {
+               fRef = 6E0BDF7D0511568D00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_types.h: 23";
+               rLen = 0;
+               rLoc = 521;
+               rType = 0;
+               vrLen = 780;
+               vrLoc = 167;
+       };
+       6E8166960559F3BD00377CF7 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 890";
+               rLen = 0;
+               rLoc = 38718;
+               rType = 0;
+               vrLen = 539;
+               vrLoc = 17083;
+       };
+       6E8166980559F3BD00377CF7 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: changePulldown";
+               rLen = 0;
+               rLoc = 1843;
+               rType = 0;
+               vrLen = 1012;
+               vrLoc = 870;
+       };
+       6E81669A0559F3BD00377CF7 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: changePulldown";
+               rLen = 0;
+               rLoc = 1843;
+               rType = 0;
+               vrLen = 1012;
+               vrLoc = 870;
+       };
+       6E81669C0559F3BD00377CF7 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: changePulldown";
+               rLen = 0;
+               rLoc = 1843;
+               rType = 0;
+               vrLen = 1012;
+               vrLoc = 870;
+       };
+       6E81669E0559F3BD00377CF7 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: savedStatusText";
+               rLen = 0;
+               rLoc = 1210;
+               rType = 0;
+               vrLen = 789;
+               vrLoc = 557;
+       };
+       6E8166A00559F3BD00377CF7 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: setStatusText:duraction:";
+               rLen = 71;
+               rLoc = 2916;
+               rType = 0;
+               vrLen = 964;
+               vrLoc = 1346;
+       };
+       6E8166A20559F3BD00377CF7 = {
+               fRef = 6E0D40AD05223CCE00A80003;
+               isa = PBXTextBookmark;
+               name = "NetTrafficController.m: 25";
+               rLen = 64;
+               rLoc = 539;
+               rType = 0;
+               vrLen = 527;
+               vrLoc = 350;
+       };
+       6E8166A30559F3BD00377CF7 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: setStatusText:duraction:";
+               rLen = 71;
+               rLoc = 2916;
+               rType = 0;
+               vrLen = 920;
+               vrLoc = 749;
+       };
+       6E8166A50559F3BD00377CF7 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: statusTextTimer:";
+               rLen = 40;
+               rLoc = 3083;
+               rType = 0;
+               vrLen = 902;
+               vrLoc = 1551;
+       };
+       6E84B8F20558B3480001B5EB = {
+               fRef = 6E3F0D02050D4ACC00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_net.m: 77";
+               rLen = 0;
+               rLoc = 1627;
+               rType = 0;
+               vrLen = 443;
+               vrLoc = 1397;
+       };
+       6E84B8F30558B3480001B5EB = {
+               fRef = 6E84B92C0558B3480001B5EB;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 186;
+               vrLoc = 0;
+       };
+       6E84B8F40558B3480001B5EB = {
+               fRef = 6E84B9290558B3480001B5EB;
+               isa = PBXTextBookmark;
+               name = "(null): 5";
+               rLen = 0;
+               rLoc = 186;
+               rType = 0;
+               vrLen = 292;
+               vrLoc = 0;
+       };
+       6E84B8F80558B3480001B5EB = {
+               fRef = 6E84B92B0558B3480001B5EB;
+               isa = PBXTextBookmark;
+               name = "(null): 33";
+               rLen = 42;
+               rLoc = 751;
+               rType = 0;
+               vrLen = 795;
+               vrLoc = 0;
+       };
+       6E84B8FE0558B3480001B5EB = {
+               fRef = 6E3F0D02050D4ACC00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_net.m: 77";
+               rLen = 0;
+               rLoc = 1627;
+               rType = 0;
+               vrLen = 444;
+               vrLoc = 1397;
+       };
+       6E84B8FF0558B3480001B5EB = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 941;
+               vrLoc = 0;
+       };
+       6E84B9000558B3480001B5EB = {
+               fRef = 6E3F0D02050D4ACC00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_net.m: 77";
+               rLen = 0;
+               rLoc = 1627;
+               rType = 0;
+               vrLen = 443;
+               vrLoc = 1397;
+       };
+       6E84B9010558B3480001B5EB = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 135";
+               rLen = 0;
+               rLoc = 3369;
+               rType = 0;
+               vrLen = 488;
+               vrLoc = 2956;
+       };
+       6E84B9020558B3480001B5EB = {
+               fRef = 6E146B12051FA42C00A80003;
+               isa = PBXTextBookmark;
+               name = "CheatClient.m: 114";
+               rLen = 0;
+               rLoc = 2694;
+               rType = 0;
+               vrLen = 656;
+               vrLoc = 2385;
+       };
+       6E84B9030558B3480001B5EB = {
+               fRef = 6E3F0D02050D4ACC00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_net.m: 77";
+               rLen = 0;
+               rLoc = 1627;
+               rType = 0;
+               vrLen = 443;
+               vrLoc = 1397;
+       };
+       6E84B9040558B3480001B5EB = {
+               fRef = 6E146B12051FA42C00A80003;
+               isa = PBXTextBookmark;
+               name = "CheatClient.m: 114";
+               rLen = 0;
+               rLoc = 2694;
+               rType = 0;
+               vrLen = 656;
+               vrLoc = 2385;
+       };
+       6E84B9050558B3480001B5EB = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 135";
+               rLen = 0;
+               rLoc = 3369;
+               rType = 0;
+               vrLen = 488;
+               vrLoc = 2956;
+       };
+       6E84B9060558B3480001B5EB = {
+               fRef = 6E3F0D02050D4ACC00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_net.m: 77";
+               rLen = 0;
+               rLoc = 1627;
+               rType = 0;
+               vrLen = 443;
+               vrLoc = 1397;
+       };
+       6E84B9070558B3480001B5EB = {
+               fRef = 6E146B12051FA42C00A80003;
+               isa = PBXTextBookmark;
+               name = "CheatClient.m: 114";
+               rLen = 0;
+               rLoc = 2694;
+               rType = 0;
+               vrLen = 656;
+               vrLoc = 2385;
+       };
+       6E84B9080558B3480001B5EB = {
+               fRef = 6E3F0D02050D4ACC00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_net.m: 77";
+               rLen = 0;
+               rLoc = 1627;
+               rType = 0;
+               vrLen = 443;
+               vrLoc = 1397;
+       };
+       6E84B9090558B3480001B5EB = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 129";
+               rLen = 0;
+               rLoc = 3288;
+               rType = 0;
+               vrLen = 488;
+               vrLoc = 2956;
+       };
+       6E84B90A0558B3480001B5EB = {
+               fRef = 089C1660FE840EACC02AAC07;
+               isa = PBXTextBookmark;
+               name = "English: 6";
+               rLen = 0;
+               rLoc = 200;
+               rType = 0;
+               vrLen = 201;
+               vrLoc = 0;
+       };
+       6E84B90B0558B3480001B5EB = {
+               fRef = 2A37F4BAFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "English: 10";
+               rLen = 0;
+               rLoc = 97;
+               rType = 0;
+               vrLen = 97;
+               vrLoc = 0;
+       };
+       6E84B90C0558B3480001B5EB = {
+               fRef = 089C1660FE840EACC02AAC07;
+               isa = PBXTextBookmark;
+               name = "English: 6";
+               rLen = 0;
+               rLoc = 200;
+               rType = 0;
+               vrLen = 201;
+               vrLoc = 0;
+       };
+       6E84B90D0558B3480001B5EB = {
+               fRef = 6E84B9280558B3480001B5EB;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 186;
+               vrLoc = 0;
+       };
+       6E84B90E0558B3480001B5EB = {
+               fRef = 089C1660FE840EACC02AAC07;
+               isa = PBXTextBookmark;
+               name = "English: 6";
+               rLen = 0;
+               rLoc = 200;
+               rType = 0;
+               vrLen = 201;
+               vrLoc = 0;
+       };
+       6E84B90F0558B3480001B5EB = {
+               fRef = 6E84B92A0558B3480001B5EB;
+               isa = PBXTextBookmark;
+               name = "(null): 5";
+               rLen = 0;
+               rLoc = 186;
+               rType = 0;
+               vrLen = 292;
+               vrLoc = 0;
+       };
+       6E84B9100558B3480001B5EB = {
+               fRef = 089C1660FE840EACC02AAC07;
+               isa = PBXTextBookmark;
+               name = "English: 5";
+               rLen = 0;
+               rLoc = 139;
+               rType = 0;
+               vrLen = 201;
+               vrLoc = 0;
+       };
+       6E84B9110558B3480001B5EB = {
+               fRef = 2A37F4BAFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "English: 7";
+               rLen = 0;
+               rLoc = 73;
+               rType = 0;
+               vrLen = 97;
+               vrLoc = 0;
+       };
+       6E84B9120558B3480001B5EB = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: clearSearchButton";
+               rLen = 0;
+               rLoc = 1820;
+               rType = 0;
+               vrLen = 799;
+               vrLoc = 882;
+       };
+       6E84B9130558B3480001B5EB = {
+               fRef = 6ED3E46305192E2B00A80003;
+               isa = PBXTextBookmark;
+               name = "MenuExtras.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 579;
+               vrLoc = 0;
+       };
+       6E84B9140558B3480001B5EB = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: floatSizeMenu";
+               rLen = 0;
+               rLoc = 2459;
+               rType = 0;
+               vrLen = 930;
+               vrLoc = 2064;
+       };
+       6E84B9160558B3480001B5EB = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: 119";
+               rLen = 0;
+               rLoc = 4714;
+               rType = 0;
+               vrLen = 934;
+               vrLoc = 2064;
+       };
+       6E84B9180558B3480001B5EB = {
+               fRef = 6E84B9270558B3480001B5EB;
+               isa = PBXTextBookmark;
+               name = "(null): 33";
+               rLen = 42;
+               rLoc = 751;
+               rType = 0;
+               vrLen = 795;
+               vrLoc = 0;
+       };
+       6E84B91A0558B3480001B5EB = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: pauseButton:";
+               rLen = 0;
+               rLoc = 4679;
+               rType = 0;
+               vrLen = 928;
+               vrLoc = 2028;
+       };
+       6E84B91C0558B3480001B5EB = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: handleSocket:";
+               rLen = 12;
+               rLoc = 3228;
+               rType = 0;
+               vrLen = 787;
+               vrLoc = 3956;
+       };
+       6E84B91D0558B3480001B5EB = {
+               fRef = 6E146B12051FA42C00A80003;
+               isa = PBXTextBookmark;
+               name = "CheatClient.m: 114";
+               rLen = 0;
+               rLoc = 2694;
+               rType = 0;
+               vrLen = 895;
+               vrLoc = 2226;
+       };
+       6E84B91E0558B3480001B5EB = {
+               fRef = 6E146B11051FA42C00A80003;
+               isa = PBXTextBookmark;
+               name = "CheatClient.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 738;
+               vrLoc = 0;
+       };
+       6E84B91F0558B3480001B5EB = {
+               fRef = 6E146B12051FA42C00A80003;
+               isa = PBXTextBookmark;
+               name = "CheatClient.m: connectToServer:name:";
+               rLen = 12;
+               rLoc = 2598;
+               rType = 0;
+               vrLen = 756;
+               vrLoc = 3725;
+       };
+       6E84B9210558B3480001B5EB = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: handleSocket:";
+               rLen = 12;
+               rLoc = 3228;
+               rType = 0;
+               vrLen = 786;
+               vrLoc = 3956;
+       };
+       6E84B9230558B3480001B5EB = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: connectToServer:name:";
+               rLen = 0;
+               rLoc = 3236;
+               rType = 0;
+               vrLen = 908;
+               vrLoc = 1579;
+       };
+       6E84B9240558B3480001B5EB = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 621";
+               rLen = 15;
+               rLoc = 33933;
+               rType = 0;
+               vrLen = 732;
+               vrLoc = 12070;
+       };
+       6E84B9270558B3480001B5EB = {
+               isa = PBXFileReference;
+               name = NSObject.h;
+               path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSObject.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E84B9280558B3480001B5EB = {
+               isa = PBXFileReference;
+               name = test_Niobium_Prefix.pch;
+               path = "/Users/chaz/Projects/Niobium/build/Niobium Test.app/Contents/Resources/test_Niobium_Prefix.pch";
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E84B9290558B3480001B5EB = {
+               expectedFileType = text.plist.strings;
+               isa = PBXFileReference;
+               name = test_InfoPlist.strings;
+               path = "/Users/chaz/Projects/Niobium/build/Niobium Test.app/Contents/Resources/English.lproj/test_InfoPlist.strings";
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E84B92A0558B3480001B5EB = {
+               isa = PBXFileReference;
+               name = test_InfoPlist.strings;
+               path = "/Users/chaz/Projects/Niobium/build/Niobium Test.app/Contents/Resources/English.lproj/test_InfoPlist.strings";
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E84B92B0558B3480001B5EB = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = NSObject.h;
+               path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSObject.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E84B92C0558B3480001B5EB = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = test_Niobium_Prefix.pch;
+               path = "/Users/chaz/Projects/Niobium/build/Niobium Test.app/Contents/Resources/test_Niobium_Prefix.pch";
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E9F392A0569DB90007C1A1C = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 774";
+               rLen = 0;
+               rLoc = 18782;
+               rType = 0;
+               vrLen = 924;
+               vrLoc = 16873;
+       };
+       6E9F392B0569DB90007C1A1C = {
+               fRef = 6E0D40B90522449500A80003;
+               isa = PBXTextBookmark;
+               name = "CheatListener.m: 103";
+               rLen = 0;
+               rLoc = 2885;
+               rType = 0;
+               vrLen = 1473;
+               vrLoc = 2080;
+       };
+       6EAD5EEA054C3932005761EE = {
+               isa = PBXSourceControlManager;
+               scmConfiguration = {
+               };
+               scmType = scm.cvs;
+       };
+       6EAD5EEB054C3932005761EE = {
+               indexTemplatePath = "";
+               isa = PBXCodeSenseManager;
+               usesDefaults = 1;
+               wantsCodeCompletion = 1;
+               wantsCodeCompletionAutoPopup = 0;
+               wantsCodeCompletionAutoSuggestions = 0;
+               wantsCodeCompletionCaseSensitivity = 1;
+               wantsCodeCompletionOnlyMatchingItems = 1;
+               wantsCodeCompletionParametersIncluded = 1;
+               wantsCodeCompletionPlaceholdersInserted = 1;
+               wantsCodeCompletionTabCompletes = 1;
+               wantsIndex = 1;
+       };
+       6EB8529F057476DD00E260EA = {
+               fRef = 6E51A97D0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.m: 20";
+               rLen = 0;
+               rLoc = 424;
+               rType = 0;
+               vrLen = 663;
+               vrLoc = 0;
+       };
+       6EB852A0057476DD00E260EA = {
+               fRef = 6E4E098C050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.h: launchWebsiteMenu:";
+               rLen = 0;
+               rLoc = 1386;
+               rType = 0;
+               vrLen = 1103;
+               vrLoc = 334;
+       };
+       6EB852A1057476DD00E260EA = {
+               fRef = 6EB852E7057476DD00E260EA;
+               isa = PBXTextBookmark;
+               name = "(null): 28";
+               rLen = 74;
+               rLoc = 617;
+               rType = 0;
+               vrLen = 1390;
+               vrLoc = 18;
+       };
+       6EB852A3057476DD00E260EA = {
+               fRef = 6EE004DD0560B42800F8A5B1;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 71";
+               rLen = 32;
+               rLoc = 1601;
+               rType = 0;
+               vrLen = 1099;
+               vrLoc = 3399;
+       };
+       6EB852A4057476DD00E260EA = {
+               fRef = 6EFB422D052F601400A80003;
+               isa = PBXTextBookmark;
+               name = "SearchResults.h: data";
+               rLen = 0;
+               rLoc = 726;
+               rType = 0;
+               vrLen = 755;
+               vrLoc = 0;
+       };
+       6EB852A5057476DD00E260EA = {
+               fRef = 6EFB422E052F601400A80003;
+               isa = PBXTextBookmark;
+               name = "SearchResults.m: size";
+               rLen = 0;
+               rLoc = 896;
+               rType = 0;
+               vrLen = 468;
+               vrLoc = 574;
+       };
+       6EB852A6057476DD00E260EA = {
+               fRef = 6EE004DE0560B42800F8A5B1;
+               isa = PBXTextBookmark;
+               name = "vm_map.h: vm_write";
+               rLen = 23;
+               rLoc = 2656;
+               rType = 0;
+               vrLen = 709;
+               vrLoc = 2324;
+       };
+       6EB852A9057476DD00E260EA = {
+               fRef = 6E0BDF7D0511568D00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_types.h: 35";
+               rLen = 9;
+               rLoc = 881;
+               rType = 0;
+               vrLen = 947;
+               vrLoc = 0;
+       };
+       6EB852AC057476DD00E260EA = {
+               fRef = 6E51A97D0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.m: 20";
+               rLen = 0;
+               rLoc = 424;
+               rType = 0;
+               vrLen = 663;
+               vrLoc = 0;
+       };
+       6EB852AD057476DD00E260EA = {
+               fRef = 6E4E098C050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.h: launchWebsiteMenu:";
+               rLen = 0;
+               rLoc = 1386;
+               rType = 0;
+               vrLen = 1103;
+               vrLoc = 334;
+       };
+       6EB852AE057476DD00E260EA = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 147";
+               rLen = 7;
+               rLoc = 3873;
+               rType = 0;
+               vrLen = 1062;
+               vrLoc = 3454;
+       };
+       6EB852AF057476DD00E260EA = {
+               fRef = 6EB852E6057476DD00E260EA;
+               isa = PBXTextBookmark;
+               name = "(null): 28";
+               rLen = 74;
+               rLoc = 617;
+               rType = 0;
+               vrLen = 1390;
+               vrLoc = 18;
+       };
+       6EB852B0057476DD00E260EA = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 148";
+               rLen = 0;
+               rLoc = 3842;
+               rType = 0;
+               vrLen = 1075;
+               vrLoc = 3454;
+       };
+       6EB852B1057476DD00E260EA = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 315";
+               rLen = 0;
+               rLoc = 6725;
+               rType = 0;
+               vrLen = 1097;
+               vrLoc = 6333;
+       };
+       6EB852B2057476DD00E260EA = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: firstSearchString8bit:size:";
+               rLen = 0;
+               rLoc = 1158;
+               rType = 0;
+               vrLen = 1786;
+               vrLoc = 702;
+       };
+       6EB852B3057476DD00E260EA = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 302";
+               rLen = 0;
+               rLoc = 6461;
+               rType = 0;
+               vrLen = 1205;
+               vrLoc = 6067;
+       };
+       6EB852B4057476DD00E260EA = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: firstSearchString8bit:size:";
+               rLen = 0;
+               rLoc = 1158;
+               rType = 0;
+               vrLen = 835;
+               vrLoc = 137;
+       };
+       6EB852B5057476DD00E260EA = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 277";
+               rLen = 0;
+               rLoc = 5686;
+               rType = 0;
+               vrLen = 1285;
+               vrLoc = 5735;
+       };
+       6EB852B6057476DD00E260EA = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 148";
+               rLen = 0;
+               rLoc = 3842;
+               rType = 0;
+               vrLen = 1075;
+               vrLoc = 3454;
+       };
+       6EB852B7057476DD00E260EA = {
+               fRef = 6EE004DD0560B42800F8A5B1;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 71";
+               rLen = 32;
+               rLoc = 1601;
+               rType = 0;
+               vrLen = 1099;
+               vrLoc = 3399;
+       };
+       6EB852B8057476DD00E260EA = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 304";
+               rLen = 0;
+               rLoc = 6460;
+               rType = 0;
+               vrLen = 1141;
+               vrLoc = 5931;
+       };
+       6EB852B9057476DD00E260EA = {
+               fRef = 6EE004DD0560B42800F8A5B1;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 71";
+               rLen = 32;
+               rLoc = 1601;
+               rType = 0;
+               vrLen = 1099;
+               vrLoc = 3399;
+       };
+       6EB852BA057476DD00E260EA = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 314";
+               rLen = 0;
+               rLoc = 6665;
+               rType = 0;
+               vrLen = 1135;
+               vrLoc = 5931;
+       };
+       6EB852BB057476DD00E260EA = {
+               fRef = 6EE004DD0560B42800F8A5B1;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 71";
+               rLen = 32;
+               rLoc = 1601;
+               rType = 0;
+               vrLen = 1099;
+               vrLoc = 3399;
+       };
+       6EB852BC057476DD00E260EA = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 313";
+               rLen = 0;
+               rLoc = 6668;
+               rType = 0;
+               vrLen = 1208;
+               vrLoc = 5735;
+       };
+       6EB852BD057476DD00E260EA = {
+               fRef = 6EE004DD0560B42800F8A5B1;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 71";
+               rLen = 32;
+               rLoc = 1601;
+               rType = 0;
+               vrLen = 1099;
+               vrLoc = 3399;
+       };
+       6EB852BE057476DD00E260EA = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 562";
+               rLen = 0;
+               rLoc = 12621;
+               rType = 0;
+               vrLen = 1260;
+               vrLoc = 11861;
+       };
+       6EB852BF057476DD00E260EA = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: cancelButton:";
+               rLen = 32;
+               rLoc = 31458;
+               rType = 0;
+               vrLen = 998;
+               vrLoc = 29449;
+       };
+       6EB852C0057476DD00E260EA = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: searchIntegerShort:";
+               rLen = 41;
+               rLoc = 20989;
+               rType = 0;
+               vrLen = 1289;
+               vrLoc = 22038;
+       };
+       6EB852C1057476DD00E260EA = {
+               fRef = 6EFB422D052F601400A80003;
+               isa = PBXTextBookmark;
+               name = "SearchResults.h: initWithType:size:data:amount:";
+               rLen = 0;
+               rLoc = 647;
+               rType = 0;
+               vrLen = 736;
+               vrLoc = 0;
+       };
+       6EB852C2057476DD00E260EA = {
+               fRef = 6EFB422E052F601400A80003;
+               isa = PBXTextBookmark;
+               name = "SearchResults.m: size";
+               rLen = 0;
+               rLoc = 896;
+               rType = 0;
+               vrLen = 766;
+               vrLoc = 139;
+       };
+       6EB852C3057476DD00E260EA = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: searchIntegerShort:";
+               rLen = 41;
+               rLoc = 20989;
+               rType = 0;
+               vrLen = 1262;
+               vrLoc = 22105;
+       };
+       6EB852C4057476DD00E260EA = {
+               fRef = 6EFB422E052F601400A80003;
+               isa = PBXTextBookmark;
+               name = "SearchResults.m: size";
+               rLen = 0;
+               rLoc = 896;
+               rType = 0;
+               vrLen = 796;
+               vrLoc = 109;
+       };
+       6EB852C5057476DD00E260EA = {
+               fRef = 6EFB422D052F601400A80003;
+               isa = PBXTextBookmark;
+               name = "SearchResults.h: data";
+               rLen = 0;
+               rLoc = 726;
+               rType = 0;
+               vrLen = 755;
+               vrLoc = 0;
+       };
+       6EB852C6057476DD00E260EA = {
+               fRef = 6EFB422E052F601400A80003;
+               isa = PBXTextBookmark;
+               name = "SearchResults.m: size";
+               rLen = 0;
+               rLoc = 896;
+               rType = 0;
+               vrLen = 468;
+               vrLoc = 574;
+       };
+       6EB852C7057476DD00E260EA = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 1920";
+               rLen = 66;
+               rLoc = 42927;
+               rType = 0;
+               vrLen = 715;
+               vrLoc = 42398;
+       };
+       6EB852C8057476DD00E260EA = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: firstSearchString8bit:size:";
+               rLen = 0;
+               rLoc = 1158;
+               rType = 0;
+               vrLen = 1815;
+               vrLoc = 753;
+       };
+       6EB852C9057476DD00E260EA = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: sendSearchFinished";
+               rLen = 0;
+               rLoc = 30172;
+               rType = 0;
+               vrLen = 1028;
+               vrLoc = 29686;
+       };
+       6EB852CA057476DD00E260EA = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: ";
+               rLen = 0;
+               rLoc = 2334;
+               rType = 0;
+               vrLen = 1820;
+               vrLoc = 753;
+       };
+       6EB852CB057476DD00E260EA = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 741";
+               rLen = 0;
+               rLoc = 17084;
+               rType = 0;
+               vrLen = 1208;
+               vrLoc = 17032;
+       };
+       6EB852CC057476DD00E260EA = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 401";
+               rLen = 37;
+               rLoc = 10741;
+               rType = 0;
+               vrLen = 975;
+               vrLoc = 9731;
+       };
+       6EB852CD057476DD00E260EA = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 305";
+               rLen = 0;
+               rLoc = 6548;
+               rType = 0;
+               vrLen = 971;
+               vrLoc = 5004;
+       };
+       6EB852CE057476DD00E260EA = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 875";
+               rLen = 0;
+               rLoc = 20603;
+               rType = 0;
+               vrLen = 1002;
+               vrLoc = 19722;
+       };
+       6EB852CF057476DD00E260EA = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: changeString8bit:size:addresses:count:";
+               rLen = 90;
+               rLoc = 25997;
+               rType = 0;
+               vrLen = 1025;
+               vrLoc = 24939;
+       };
+       6EB852D0057476DD00E260EA = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: ";
+               rLen = 0;
+               rLoc = 2334;
+               rType = 0;
+               vrLen = 1906;
+               vrLoc = 828;
+       };
+       6EB852D1057476DD00E260EA = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 1056";
+               rLen = 8;
+               rLoc = 25718;
+               rType = 0;
+               vrLen = 1174;
+               vrLoc = 25004;
+       };
+       6EB852D2057476DD00E260EA = {
+               fRef = 6EE004DE0560B42800F8A5B1;
+               isa = PBXTextBookmark;
+               name = "vm_map.h: vm_write";
+               rLen = 23;
+               rLoc = 2656;
+               rType = 0;
+               vrLen = 709;
+               vrLoc = 2324;
+       };
+       6EB852D3057476DD00E260EA = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 1151";
+               rLen = 0;
+               rLoc = 28066;
+               rType = 0;
+               vrLen = 1102;
+               vrLoc = 27078;
+       };
+       6EB852D4057476DD00E260EA = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: ";
+               rLen = 0;
+               rLoc = 2334;
+               rType = 0;
+               vrLen = 1906;
+               vrLoc = 828;
+       };
+       6EB852D5057476DD00E260EA = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 1058";
+               rLen = 0;
+               rLoc = 25787;
+               rType = 0;
+               vrLen = 1133;
+               vrLoc = 25053;
+       };
+       6EB852D6057476DD00E260EA = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: search";
+               rLen = 31;
+               rLoc = 4141;
+               rType = 0;
+               vrLen = 1053;
+               vrLoc = 456;
+       };
+       6EB852D7057476DD00E260EA = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1341";
+               rLen = 0;
+               rLoc = 31525;
+               rType = 0;
+               vrLen = 952;
+               vrLoc = 29575;
+       };
+       6EB852D8057476DD00E260EA = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: changeTimer";
+               rLen = 0;
+               rLoc = 1401;
+               rType = 0;
+               vrLen = 1084;
+               vrLoc = 535;
+       };
+       6EB852D9057476DD00E260EA = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1341";
+               rLen = 0;
+               rLoc = 31525;
+               rType = 0;
+               vrLen = 962;
+               vrLoc = 29571;
+       };
+       6EB852DA057476DD00E260EA = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: recurringChangeButton";
+               rLen = 21;
+               rLoc = 2322;
+               rType = 0;
+               vrLen = 1364;
+               vrLoc = 1150;
+       };
+       6EB852DB057476DD00E260EA = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1348";
+               rLen = 0;
+               rLoc = 31525;
+               rType = 0;
+               vrLen = 1092;
+               vrLoc = 29575;
+       };
+       6EB852DC057476DD00E260EA = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: recurringChangeButton";
+               rLen = 21;
+               rLoc = 2322;
+               rType = 0;
+               vrLen = 1364;
+               vrLoc = 1150;
+       };
+       6EB852DD057476DD00E260EA = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1348";
+               rLen = 0;
+               rLoc = 31525;
+               rType = 0;
+               vrLen = 1102;
+               vrLoc = 29575;
+       };
+       6EB852DE057476DD00E260EA = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: changeSecondsCombo";
+               rLen = 18;
+               rLoc = 2370;
+               rType = 0;
+               vrLen = 1364;
+               vrLoc = 1150;
+       };
+       6EB852DF057476DD00E260EA = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1350";
+               rLen = 0;
+               rLoc = 31525;
+               rType = 0;
+               vrLen = 1113;
+               vrLoc = 29575;
+       };
+       6EB852E0057476DD00E260EA = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: changeTimer:";
+               rLen = 37;
+               rLoc = 4261;
+               rType = 0;
+               vrLen = 1235;
+               vrLoc = 3400;
+       };
+       6EB852E1057476DD00E260EA = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1353";
+               rLen = 0;
+               rLoc = 31525;
+               rType = 0;
+               vrLen = 1144;
+               vrLoc = 29634;
+       };
+       6EB852E2057476DD00E260EA = {
+               fRef = 6E0BDF7D0511568D00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_types.h: 35";
+               rLen = 9;
+               rLoc = 881;
+               rType = 0;
+               vrLen = 947;
+               vrLoc = 0;
+       };
+       6EB852E3057476DD00E260EA = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: search";
+               rLen = 15;
+               rLoc = 24517;
+               rType = 0;
+               vrLen = 922;
+               vrLoc = 26812;
+       };
+       6EB852E4057476DD00E260EA = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: savedStatusColor";
+               rLen = 16;
+               rLoc = 1193;
+               rType = 0;
+               vrLen = 1005;
+               vrLoc = 456;
+       };
+       6EB852E6057476DD00E260EA = {
+               isa = PBXFileReference;
+               name = NSWorkspace.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSWorkspace.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6EB852E7057476DD00E260EA = {
+               isa = PBXFileReference;
+               name = NSWorkspace.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSWorkspace.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6ED3E46305192E2B00A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
+                       sepNavSelRange = "{0, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       6ED3E46405192E2B00A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 1424}}";
+                       sepNavSelRange = "{0, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       6EE0044305609C0600F8A5B1 = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = stdlib.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/stdlib.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6EE0044405609C0C00F8A5B1 = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = NSObjCRuntime.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6EE0048A0560B42800F8A5B1 = {
+               fRef = 6E146B11051FA42C00A80003;
+               isa = PBXTextBookmark;
+               name = "CheatClient.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 738;
+               vrLoc = 0;
+       };
+       6EE004950560B42800F8A5B1 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: sendProcessListRequest";
+               rLen = 0;
+               rLoc = 3371;
+               rType = 0;
+               vrLen = 1359;
+               vrLoc = 2060;
+       };
+       6EE004960560B42800F8A5B1 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: clearSearch";
+               rLen = 0;
+               rLoc = 14326;
+               rType = 0;
+               vrLen = 821;
+               vrLoc = 11288;
+       };
+       6EE004970560B42800F8A5B1 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: sendClearSearch";
+               rLen = 23;
+               rLoc = 3347;
+               rType = 0;
+               vrLen = 1343;
+               vrLoc = 2267;
+       };
+       6EE004980560B42800F8A5B1 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 520";
+               rLen = 0;
+               rLoc = 14912;
+               rType = 0;
+               vrLen = 912;
+               vrLoc = 11653;
+       };
+       6EE004990560B42800F8A5B1 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: sendClearSearch";
+               rLen = 23;
+               rLoc = 3347;
+               rType = 0;
+               vrLen = 1369;
+               vrLoc = 2241;
+       };
+       6EE0049A0560B42800F8A5B1 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: handlePauseTarget";
+               rLen = 19;
+               rLoc = 42264;
+               rType = 0;
+               vrLen = 840;
+               vrLoc = 19457;
+       };
+       6EE0049B0560B42800F8A5B1 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: handleClearSearch";
+               rLen = 25;
+               rLoc = 2735;
+               rType = 0;
+               vrLen = 1370;
+               vrLoc = 1068;
+       };
+       6EE0049C0560B42800F8A5B1 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 192";
+               rLen = 0;
+               rLoc = 4463;
+               rType = 0;
+               vrLen = 815;
+               vrLoc = 3879;
+       };
+       6EE0049D0560B42800F8A5B1 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: handleClearSearch";
+               rLen = 25;
+               rLoc = 2735;
+               rType = 0;
+               vrLen = 1095;
+               vrLoc = 505;
+       };
+       6EE0049E0560B42800F8A5B1 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 791";
+               rLen = 0;
+               rLoc = 36328;
+               rType = 0;
+               vrLen = 725;
+               vrLoc = 15367;
+       };
+       6EE0049F0560B42800F8A5B1 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: handleClearSearch";
+               rLen = 25;
+               rLoc = 2735;
+               rType = 0;
+               vrLen = 1095;
+               vrLoc = 505;
+       };
+       6EE004A00560B42800F8A5B1 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 794";
+               rLen = 0;
+               rLoc = 36390;
+               rType = 0;
+               vrLen = 818;
+               vrLoc = 15367;
+       };
+       6EE004A10560B42800F8A5B1 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1044";
+               rLen = 0;
+               rLoc = 32398;
+               rType = 0;
+               vrLen = 554;
+               vrLoc = 22005;
+       };
+       6EE004A20560B42800F8A5B1 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: sendClearSearch";
+               rLen = 23;
+               rLoc = 3347;
+               rType = 0;
+               vrLen = 1046;
+               vrLoc = 403;
+       };
+       6EE004A30560B42800F8A5B1 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: respondsToSelector:";
+               rLen = 22;
+               rLoc = 32281;
+               rType = 0;
+               vrLen = 594;
+               vrLoc = 22001;
+       };
+       6EE004A40560B42800F8A5B1 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: sendClearSearch";
+               rLen = 23;
+               rLoc = 3347;
+               rType = 0;
+               vrLen = 1379;
+               vrLoc = 2267;
+       };
+       6EE004A50560B42800F8A5B1 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: respondsToSelector:";
+               rLen = 22;
+               rLoc = 32281;
+               rType = 0;
+               vrLen = 594;
+               vrLoc = 22001;
+       };
+       6EE004A60560B42800F8A5B1 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: destroyResults";
+               rLen = 0;
+               rLoc = 4948;
+               rType = 0;
+               vrLen = 1296;
+               vrLoc = 2540;
+       };
+       6EE004A70560B42800F8A5B1 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 965";
+               rLen = 0;
+               rLoc = 29171;
+               rType = 0;
+               vrLen = 846;
+               vrLoc = 20653;
+       };
+       6EE004A80560B42800F8A5B1 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 792";
+               rLen = 0;
+               rLoc = 36390;
+               rType = 0;
+               vrLen = 791;
+               vrLoc = 15367;
+       };
+       6EE004A90560B42800F8A5B1 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: receivedVariableList:";
+               rLen = 31;
+               rLoc = 19213;
+               rType = 0;
+               vrLen = 978;
+               vrLoc = 15523;
+       };
+       6EE004AA0560B42800F8A5B1 = {
+               fRef = 6E0D40AD05223CCE00A80003;
+               isa = PBXTextBookmark;
+               name = "NetTrafficController.m: 42";
+               rLen = 0;
+               rLoc = 822;
+               rType = 0;
+               vrLen = 987;
+               vrLoc = 1;
+       };
+       6EE004AB0560B42800F8A5B1 = {
+               fRef = 6E0D40AC05223CCE00A80003;
+               isa = PBXTextBookmark;
+               name = "NetTrafficController.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1017;
+               vrLoc = 0;
+       };
+       6EE004AC0560B42800F8A5B1 = {
+               fRef = 6E0D40AD05223CCE00A80003;
+               isa = PBXTextBookmark;
+               name = "NetTrafficController.m: 42";
+               rLen = 0;
+               rLoc = 822;
+               rType = 0;
+               vrLen = 758;
+               vrLoc = 607;
+       };
+       6EE004AD0560B42800F8A5B1 = {
+               fRef = 6EE004E10560B42800F8A5B1;
+               isa = PBXTextBookmark;
+               name = "(null): 463";
+               rLen = 67;
+               rLoc = 11649;
+               rType = 0;
+               vrLen = 1297;
+               vrLoc = 10996;
+       };
+       6EE004AE0560B42800F8A5B1 = {
+               fRef = 6E0D40AD05223CCE00A80003;
+               isa = PBXTextBookmark;
+               name = "NetTrafficController.m: 123";
+               rLen = 0;
+               rLoc = 2572;
+               rType = 0;
+               vrLen = 1205;
+               vrLoc = 1832;
+       };
+       6EE004AF0560B42800F8A5B1 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 726";
+               rLen = 0;
+               rLoc = 19660;
+               rType = 0;
+               vrLen = 911;
+               vrLoc = 16139;
+       };
+       6EE004B00560B42800F8A5B1 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: destroyResults";
+               rLen = 0;
+               rLoc = 4948;
+               rType = 0;
+               vrLen = 1255;
+               vrLoc = 805;
+       };
+       6EE004B10560B42800F8A5B1 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 1032";
+               rLen = 0;
+               rLoc = 30896;
+               rType = 0;
+               vrLen = 661;
+               vrLoc = 21842;
+       };
+       6EE004B20560B42800F8A5B1 = {
+               fRef = 6E0D40B4052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 921;
+               vrLoc = 0;
+       };
+       6EE004B30560B42800F8A5B1 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: updateSearchButton";
+               rLen = 26;
+               rLoc = 2515;
+               rType = 0;
+               vrLen = 1265;
+               vrLoc = 1575;
+       };
+       6EE004B40560B42800F8A5B1 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 99";
+               rLen = 0;
+               rLoc = 3949;
+               rType = 0;
+               vrLen = 954;
+               vrLoc = 1505;
+       };
+       6EE004B50560B42800F8A5B1 = {
+               fRef = 6E0D40AD05223CCE00A80003;
+               isa = PBXTextBookmark;
+               name = "NetTrafficController.m: 123";
+               rLen = 0;
+               rLoc = 2572;
+               rType = 0;
+               vrLen = 1345;
+               vrLoc = 2257;
+       };
+       6EE004B60560B42800F8A5B1 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 203";
+               rLen = 0;
+               rLoc = 6769;
+               rType = 0;
+               vrLen = 1303;
+               vrLoc = 3702;
+       };
+       6EE004B70560B42800F8A5B1 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 792";
+               rLen = 0;
+               rLoc = 36390;
+               rType = 0;
+               vrLen = 791;
+               vrLoc = 15367;
+       };
+       6EE004B80560B42800F8A5B1 = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: TCMaxSearchResults";
+               rLen = 18;
+               rLoc = 625;
+               rType = 0;
+               vrLen = 1035;
+               vrLoc = 0;
+       };
+       6EE004B90560B42800F8A5B1 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 210";
+               rLen = 0;
+               rLoc = 6866;
+               rType = 0;
+               vrLen = 1386;
+               vrLoc = 3702;
+       };
+       6EE004BA0560B42800F8A5B1 = {
+               fRef = 6E0BDF7D0511568D00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_types.h: 17";
+               rLen = 0;
+               rLoc = 388;
+               rType = 0;
+               vrLen = 947;
+               vrLoc = 0;
+       };
+       6EE004BB0560B42800F8A5B1 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 852";
+               rLen = 0;
+               rLoc = 37456;
+               rType = 0;
+               vrLen = 771;
+               vrLoc = 16554;
+       };
+       6EE004BC0560B42800F8A5B1 = {
+               fRef = 6E0BDF7D0511568D00A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_types.h: 18";
+               rLen = 0;
+               rLoc = 430;
+               rType = 0;
+               vrLen = 947;
+               vrLoc = 0;
+       };
+       6EE004BD0560B42800F8A5B1 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 189";
+               rLen = 0;
+               rLoc = 5814;
+               rType = 0;
+               vrLen = 1386;
+               vrLoc = 3702;
+       };
+       6EE004BE0560B42800F8A5B1 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 941";
+               rLen = 0;
+               rLoc = 38762;
+               rType = 0;
+               vrLen = 751;
+               vrLoc = 17856;
+       };
+       6EE004BF0560B42800F8A5B1 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 846";
+               rLen = 0;
+               rLoc = 28976;
+               rType = 0;
+               vrLen = 739;
+               vrLoc = 18041;
+       };
+       6EE004C00560B42800F8A5B1 = {
+               fRef = 6E0D40B4052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 921;
+               vrLoc = 0;
+       };
+       6EE004C10560B42800F8A5B1 = {
+               fRef = 6E0D40B5052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.m: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1062;
+               vrLoc = 0;
+       };
+       6EE004C20560B42800F8A5B1 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: handleClearSearch";
+               rLen = 25;
+               rLoc = 2735;
+               rType = 0;
+               vrLen = 1432;
+               vrLoc = 699;
+       };
+       6EE004C30560B42800F8A5B1 = {
+               fRef = 6E146B11051FA42C00A80003;
+               isa = PBXTextBookmark;
+               name = "CheatClient.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 738;
+               vrLoc = 0;
+       };
+       6EE004C40560B42800F8A5B1 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: decimalSizeMenu";
+               rLen = 15;
+               rLoc = 2177;
+               rType = 0;
+               vrLen = 1278;
+               vrLoc = 867;
+       };
+       6EE004C50560B42800F8A5B1 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 841";
+               rLen = 0;
+               rLoc = 28906;
+               rType = 0;
+               vrLen = 869;
+               vrLoc = 17913;
+       };
+       6EE004C60560B42800F8A5B1 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: firstSearchString8bit:size:";
+               rLen = 574;
+               rLoc = 1097;
+               rType = 0;
+               vrLen = 1433;
+               vrLoc = 653;
+       };
+       6EE004C70560B42800F8A5B1 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 370";
+               rLen = 0;
+               rLoc = 21033;
+               rType = 0;
+               vrLen = 1234;
+               vrLoc = 7374;
+       };
+       6EE004C80560B42800F8A5B1 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: firstSearchString8bit:size:";
+               rLen = 574;
+               rLoc = 1097;
+               rType = 0;
+               vrLen = 1034;
+               vrLoc = 439;
+       };
+       6EE004C90560B42800F8A5B1 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 379";
+               rLen = 0;
+               rLoc = 21224;
+               rType = 0;
+               vrLen = 728;
+               vrLoc = 7246;
+       };
+       6EE004CA0560B42800F8A5B1 = {
+               fRef = 6EFB422D052F601400A80003;
+               isa = PBXTextBookmark;
+               name = "SearchResults.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 736;
+               vrLoc = 0;
+       };
+       6EE004CB0560B42800F8A5B1 = {
+               fRef = 6EFB422E052F601400A80003;
+               isa = PBXTextBookmark;
+               name = "SearchResults.m: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 869;
+               vrLoc = 0;
+       };
+       6EE004CC0560B42800F8A5B1 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 841";
+               rLen = 0;
+               rLoc = 28906;
+               rType = 0;
+               vrLen = 868;
+               vrLoc = 17913;
+       };
+       6EE004CD0560B42800F8A5B1 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 381";
+               rLen = 0;
+               rLoc = 21340;
+               rType = 0;
+               vrLen = 910;
+               vrLoc = 7375;
+       };
+       6EE004CE0560B42800F8A5B1 = {
+               fRef = 6EFB422D052F601400A80003;
+               isa = PBXTextBookmark;
+               name = "SearchResults.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 736;
+               vrLoc = 0;
+       };
+       6EE004CF0560B42800F8A5B1 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 408";
+               rLen = 0;
+               rLoc = 22242;
+               rType = 0;
+               vrLen = 1251;
+               vrLoc = 7589;
+       };
+       6EE004D00560B42800F8A5B1 = {
+               fRef = 6EE0044305609C0600F8A5B1;
+               isa = PBXTextBookmark;
+               name = "stdlib.h: exit";
+               rLen = 19;
+               rLoc = 3986;
+               rType = 0;
+               vrLen = 1220;
+               vrLoc = 3476;
+       };
+       6EE004D10560B42800F8A5B1 = {
+               fRef = 6EE0044405609C0C00F8A5B1;
+               isa = PBXTextBookmark;
+               name = "NSObjCRuntime.h: NSLog";
+               rLen = 53;
+               rLoc = 1627;
+               rType = 0;
+               vrLen = 1191;
+               vrLoc = 899;
+       };
+       6EE004D20560B42800F8A5B1 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 415";
+               rLen = 51;
+               rLoc = 22424;
+               rType = 0;
+               vrLen = 1251;
+               vrLoc = 7589;
+       };
+       6EE004D30560B42800F8A5B1 = {
+               fRef = 6EE0044305609C0600F8A5B1;
+               isa = PBXTextBookmark;
+               name = "stdlib.h: exit";
+               rLen = 19;
+               rLoc = 3986;
+               rType = 0;
+               vrLen = 1220;
+               vrLoc = 3476;
+       };
+       6EE004D40560B42800F8A5B1 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 300";
+               rLen = 0;
+               rLoc = 12922;
+               rType = 0;
+               vrLen = 1270;
+               vrLoc = 5296;
+       };
+       6EE004D50560B42800F8A5B1 = {
+               fRef = 6EE004E00560B42800F8A5B1;
+               isa = PBXTextBookmark;
+               name = "(null): 178";
+               rLen = 32;
+               rLoc = 3105;
+               rType = 0;
+               vrLen = 677;
+               vrLoc = 2778;
+       };
+       6EE004D60560B42800F8A5B1 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 392";
+               rLen = 0;
+               rLoc = 21739;
+               rType = 0;
+               vrLen = 647;
+               vrLoc = 6893;
+       };
+       6EE004D70560B42800F8A5B1 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: firstSearchString8bit:size:";
+               rLen = 574;
+               rLoc = 1097;
+               rType = 0;
+               vrLen = 1034;
+               vrLoc = 439;
+       };
+       6EE004D80560B42800F8A5B1 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: firstSearchIntegerLong:";
+               rLen = 0;
+               rLoc = 12968;
+               rType = 0;
+               vrLen = 668;
+               vrLoc = 6893;
+       };
+       6EE004D90560B42800F8A5B1 = {
+               fRef = 6EE004E20560B42800F8A5B1;
+               isa = PBXTextBookmark;
+               name = "(null): 112";
+               rLen = 0;
+               rLoc = 3149;
+               rType = 0;
+               vrLen = 1845;
+               vrLoc = 6447;
+       };
+       6EE004DA0560B42800F8A5B1 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 402";
+               rLen = 0;
+               rLoc = 21947;
+               rType = 0;
+               vrLen = 1230;
+               vrLoc = 7747;
+       };
+       6EE004DB0560B42800F8A5B1 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: tableView:objectValueForTableColumn:row:";
+               rLen = 0;
+               rLoc = 38759;
+               rType = 0;
+               vrLen = 1376;
+               vrLoc = 27214;
+       };
+       6EE004DD0560B42800F8A5B1 = {
+               expectedFileType = sourcecode.c.objc;
+               isa = PBXFileReference;
+               name = AppController.m;
+               path = "/Users/chaz/Projects/The Cheat 1.0b1/AppController.m";
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6EE004DE0560B42800F8A5B1 = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = vm_map.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_map.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6EE004DF0560B42800F8A5B1 = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = vm_region.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_region.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6EE004E00560B42800F8A5B1 = {
+               isa = PBXFileReference;
+               name = vm_map.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_map.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6EE004E10560B42800F8A5B1 = {
+               isa = PBXFileReference;
+               name = AppController.m;
+               path = "/Users/chaz/Projects/The Cheat 1.0b1/AppController.m";
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6EE004E20560B42800F8A5B1 = {
+               isa = PBXFileReference;
+               name = vm_region.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_region.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6EE070E0055CA8E200598538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: addressSelected";
+               rLen = 0;
+               rLoc = 1401;
+               rType = 0;
+               vrLen = 1191;
+               vrLoc = 537;
+       };
+       6EE070E2055CA8E200598538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: updateChangeButton";
+               rLen = 26;
+               rLoc = 2597;
+               rType = 0;
+               vrLen = 1333;
+               vrLoc = 983;
+       };
+       6EE070E4055CA8E200598538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: updateChangePulldown";
+               rLen = 0;
+               rLoc = 2623;
+               rType = 0;
+               vrLen = 1335;
+               vrLoc = 983;
+       };
+       6EE070E6055CA8E200598538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: updateChangePulldown";
+               rLen = 0;
+               rLoc = 2623;
+               rType = 0;
+               vrLen = 1335;
+               vrLoc = 983;
+       };
+       6EE070E8055CA8E200598538 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: handlePauseTarget";
+               rLen = 19;
+               rLoc = 42264;
+               rType = 0;
+               vrLen = 840;
+               vrLoc = 19457;
+       };
+       6EE070EA055CA8E200598538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: setStatusConnected";
+               rLen = 18;
+               rLoc = 2665;
+               rType = 0;
+               vrLen = 1256;
+               vrLoc = 1614;
+       };
+       6EE070EC055CA8E200598538 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: clearSearch";
+               rLen = 0;
+               rLoc = 3289;
+               rType = 0;
+               vrLen = 1359;
+               vrLoc = 2060;
+       };
+       6EF0870C0575382B00B81D60 = {
+               fileReference = 6E4E098E050BB21400A80003;
+               isa = PBXFileBreakpoint;
+               lineNumber = 348;
+               state = 1;
+       };
+       6EF08713057544F900B81D60 = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 57";
+               rLen = 0;
+               rLoc = 1431;
+               rType = 0;
+               vrLen = 1087;
+               vrLoc = 1243;
+       };
+       6EF8EB660559F823008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: statusTextTimer:";
+               rLen = 0;
+               rLoc = 3150;
+               rType = 0;
+               vrLen = 907;
+               vrLoc = 1551;
+       };
+       6EF8EB680559F823008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: updatePauseButton";
+               rLen = 53;
+               rLoc = 2543;
+               rType = 0;
+               vrLen = 914;
+               vrLoc = 1467;
+       };
+       6EF8EB6A0559F823008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: updatePauseButton";
+               rLen = 53;
+               rLoc = 2543;
+               rType = 0;
+               vrLen = 730;
+               vrLoc = 535;
+       };
+       6EF8EB6C0559F823008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: updatePauseButton";
+               rLen = 53;
+               rLoc = 2543;
+               rType = 0;
+               vrLen = 642;
+               vrLoc = 429;
+       };
+       6EF8EB6E0559F823008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: updatePauseButton";
+               rLen = 53;
+               rLoc = 2543;
+               rType = 0;
+               vrLen = 1161;
+               vrLoc = 306;
+       };
+       6EF8EB700559F823008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: updatePauseButton";
+               rLen = 53;
+               rLoc = 2543;
+               rType = 0;
+               vrLen = 1161;
+               vrLoc = 306;
+       };
+       6EF8EBD9055A1730008BBE46 = {
+               activeExec = 0;
+               executables = (
+                       6EF8EC0A055A1730008BBE46,
+               );
+       };
+       6EF8EC08055A1730008BBE46 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
+                       sepNavSelRange = "{0, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       6EF8EC0A055A1730008BBE46 = {
+               activeArgIndex = 2147483647;
+               activeArgIndices = (
+               );
+               argumentStrings = (
+               );
+               configStateDict = {
+               };
+               debuggerPlugin = GDBDebugging;
+               dylibVariantSuffix = "";
+               enableDebugStr = 1;
+               environmentEntries = (
+               );
+               isa = PBXExecutable;
+               name = "The Cheat (Upgraded)";
+               shlibInfoDictList = (
+               );
+               sourceDirectories = (
+               );
+       };
+       6EF8EC0B055A17A1008BBE46 = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = wctype.h;
+               path = /usr/include/wctype.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6EF8EC23055A1C39008BBE46 = {
+               fRef = 6E0D40CE0522820D00A80003;
+               isa = PBXTextBookmark;
+               name = "ClientDelegate.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 530;
+               vrLoc = 0;
+       };
+       6EF8EC26055A1C39008BBE46 = {
+               fRef = 6EF8EC0B055A17A1008BBE46;
+               isa = PBXTextBookmark;
+               name = "wctype.h: 130";
+               rLen = 27;
+               rLoc = 4078;
+               rType = 0;
+               vrLen = 1372;
+               vrLoc = 3581;
+       };
+       6EF8EC27055A1C39008BBE46 = {
+               fRef = 6EF8EC7C055A1C39008BBE46;
+               isa = PBXTextBookmark;
+               name = "(null): 9";
+               rLen = 0;
+               rLoc = 186;
+               rType = 0;
+               vrLen = 186;
+               vrLoc = 0;
+       };
+       6EF8EC28055A1C39008BBE46 = {
+               fRef = 32DBCF750370BD2300C91783;
+               isa = PBXTextBookmark;
+               name = "The_Cheat_Prefix.pch: 14";
+               rLen = 0;
+               rLoc = 238;
+               rType = 0;
+               vrLen = 238;
+               vrLoc = 0;
+       };
+       6EF8EC29055A1C39008BBE46 = {
+               fRef = 6EF8EC08055A1730008BBE46;
+               isa = PBXTextBookmark;
+               name = "Info-The_Cheat__Upgraded_.plist: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1223;
+               vrLoc = 0;
+       };
+       6EF8EC2D055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: updatePauseButton";
+               rLen = 53;
+               rLoc = 2543;
+               rType = 0;
+               vrLen = 1161;
+               vrLoc = 306;
+       };
+       6EF8EC2F055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: status";
+               rLen = 0;
+               rLoc = 596;
+               rType = 0;
+               vrLen = 1173;
+               vrLoc = 306;
+       };
+       6EF8EC31055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: status";
+               rLen = 0;
+               rLoc = 596;
+               rType = 0;
+               vrLen = 1019;
+               vrLoc = 1400;
+       };
+       6EF8EC33055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: setStatusText:duration:";
+               rLen = 0;
+               rLoc = 2958;
+               rType = 0;
+               vrLen = 1017;
+               vrLoc = 1400;
+       };
+       6EF8EC35055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: initialInterfaceSetup";
+               rLen = 0;
+               rLoc = 2513;
+               rType = 0;
+               vrLen = 1037;
+               vrLoc = 1437;
+       };
+       6EF8EC37055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: initialInterfaceSetup";
+               rLen = 0;
+               rLoc = 2513;
+               rType = 0;
+               vrLen = 1020;
+               vrLoc = 1860;
+       };
+       6EF8EC39055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: receivedPauseFinished:";
+               rLen = 0;
+               rLoc = 4298;
+               rType = 0;
+               vrLen = 992;
+               vrLoc = 2614;
+       };
+       6EF8EC3B055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: setStatusToLast";
+               rLen = 23;
+               rLoc = 2890;
+               rType = 0;
+               vrLen = 1006;
+               vrLoc = 1899;
+       };
+       6EF8EC3D055A1C39008BBE46 = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 37";
+               rLen = 0;
+               rLoc = 1872;
+               rType = 0;
+               vrLen = 1279;
+               vrLoc = 455;
+       };
+       6EF8EC3F055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: setStatusToLast";
+               rLen = 23;
+               rLoc = 2890;
+               rType = 0;
+               vrLen = 798;
+               vrLoc = 479;
+       };
+       6EF8EC40055A1C39008BBE46 = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 37";
+               rLen = 0;
+               rLoc = 1872;
+               rType = 0;
+               vrLen = 1278;
+               vrLoc = 455;
+       };
+       6EF8EC42055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: setStatusToLast";
+               rLen = 23;
+               rLoc = 2890;
+               rType = 0;
+               vrLen = 1072;
+               vrLoc = 914;
+       };
+       6EF8EC44055A1C39008BBE46 = {
+               fRef = 6ED3E46305192E2B00A80003;
+               isa = PBXTextBookmark;
+               name = "MenuExtras.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 579;
+               vrLoc = 0;
+       };
+       6EF8EC45055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: setStatusToLast";
+               rLen = 23;
+               rLoc = 2890;
+               rType = 0;
+               vrLen = 1072;
+               vrLoc = 914;
+       };
+       6EF8EC47055A1C39008BBE46 = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: TCGlobalBroadcastName";
+               rLen = 21;
+               rLoc = 931;
+               rType = 0;
+               vrLen = 1035;
+               vrLoc = 0;
+       };
+       6EF8EC49055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: serverMenuDisconnect:";
+               rLen = 43;
+               rLoc = 4518;
+               rType = 0;
+               vrLen = 1095;
+               vrLoc = 2391;
+       };
+       6EF8EC4B055A1C39008BBE46 = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: TCGlobalBroadcastName";
+               rLen = 21;
+               rLoc = 931;
+               rType = 0;
+               vrLen = 1035;
+               vrLoc = 0;
+       };
+       6EF8EC4D055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: redoMenu:";
+               rLen = 0;
+               rLoc = 4714;
+               rType = 0;
+               vrLen = 1008;
+               vrLoc = 2664;
+       };
+       6EF8EC4F055A1C39008BBE46 = {
+               fRef = 6E146B12051FA42C00A80003;
+               isa = PBXTextBookmark;
+               name = "CheatClient.m: 181";
+               rLen = 0;
+               rLoc = 4063;
+               rType = 0;
+               vrLen = 609;
+               vrLoc = 3767;
+       };
+       6EF8EC51055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: redoMenu:";
+               rLen = 0;
+               rLoc = 4714;
+               rType = 0;
+               vrLen = 1008;
+               vrLoc = 2664;
+       };
+       6EF8EC53055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: targetPaused";
+               rLen = 0;
+               rLoc = 901;
+               rType = 0;
+               vrLen = 874;
+               vrLoc = 479;
+       };
+       6EF8EC55055A1C39008BBE46 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: sendUndoRedoStatus";
+               rLen = 26;
+               rLoc = 2545;
+               rType = 0;
+               vrLen = 1369;
+               vrLoc = 1069;
+       };
+       6EF8EC56055A1C39008BBE46 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 607";
+               rLen = 0;
+               rLoc = 33504;
+               rType = 0;
+               vrLen = 823;
+               vrLoc = 10572;
+       };
+       6EF8EC58055A1C39008BBE46 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 576";
+               rLen = 0;
+               rLoc = 32077;
+               rType = 0;
+               vrLen = 907;
+               vrLoc = 11276;
+       };
+       6EF8EC59055A1C39008BBE46 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: sendUndoRedoStatus";
+               rLen = 26;
+               rLoc = 2545;
+               rType = 0;
+               vrLen = 923;
+               vrLoc = 360;
+       };
+       6EF8EC5A055A1C39008BBE46 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 577";
+               rLen = 0;
+               rLoc = 32077;
+               rType = 0;
+               vrLen = 984;
+               vrLoc = 11275;
+       };
+       6EF8EC5B055A1C39008BBE46 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: sendUndoRedoStatus";
+               rLen = 26;
+               rLoc = 2545;
+               rType = 0;
+               vrLen = 923;
+               vrLoc = 360;
+       };
+       6EF8EC5C055A1C39008BBE46 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 638";
+               rLen = 0;
+               rLoc = 33504;
+               rType = 0;
+               vrLen = 1031;
+               vrLoc = 11912;
+       };
+       6EF8EC5D055A1C39008BBE46 = {
+               fRef = 6E146B12051FA42C00A80003;
+               isa = PBXTextBookmark;
+               name = "CheatClient.m: 181";
+               rLen = 0;
+               rLoc = 4063;
+               rType = 0;
+               vrLen = 725;
+               vrLoc = 3706;
+       };
+       6EF8EC5E055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: receivedUndoRedoStatus:";
+               rLen = 45;
+               rLoc = 3904;
+               rType = 0;
+               vrLen = 1322;
+               vrLoc = 1884;
+       };
+       6EF8EC60055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: undoCount";
+               rLen = 0;
+               rLoc = 1401;
+               rType = 0;
+               vrLen = 840;
+               vrLoc = 306;
+       };
+       6EF8EC62055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: undoCount";
+               rLen = 0;
+               rLoc = 1401;
+               rType = 0;
+               vrLen = 840;
+               vrLoc = 306;
+       };
+       6EF8EC64055A1C39008BBE46 = {
+               fRef = 6E146B12051FA42C00A80003;
+               isa = PBXTextBookmark;
+               name = "CheatClient.m: 191";
+               rLen = 0;
+               rLoc = 4379;
+               rType = 0;
+               vrLen = 730;
+               vrLoc = 3706;
+       };
+       6EF8EC65055A1C39008BBE46 = {
+               fRef = 6E146B11051FA42C00A80003;
+               isa = PBXTextBookmark;
+               name = "CheatClient.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 738;
+               vrLoc = 0;
+       };
+       6EF8EC67055A1C39008BBE46 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 969";
+               rLen = 0;
+               rLoc = 39337;
+               rType = 0;
+               vrLen = 866;
+               vrLoc = 18313;
+       };
+       6EF8EC69055A1C39008BBE46 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 1044";
+               rLen = 0;
+               rLoc = 42679;
+               rType = 0;
+               vrLen = 820;
+               vrLoc = 19368;
+       };
+       6EF8EC6A055A1C39008BBE46 = {
+               fRef = 6E146B12051FA42C00A80003;
+               isa = PBXTextBookmark;
+               name = "CheatClient.m: 191";
+               rLen = 0;
+               rLoc = 4379;
+               rType = 0;
+               vrLen = 747;
+               vrLoc = 3746;
+       };
+       6EF8EC6B055A1C39008BBE46 = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: receivedUndoFinished";
+               rLen = 59;
+               rLoc = 3844;
+               rType = 0;
+               vrLen = 1419;
+               vrLoc = 2087;
+       };
+       6EF8EC6D055A1C39008BBE46 = {
+               fRef = 6E146B12051FA42C00A80003;
+               isa = PBXTextBookmark;
+               name = "CheatClient.m: 194";
+               rLen = 0;
+               rLoc = 4293;
+               rType = 0;
+               vrLen = 751;
+               vrLoc = 3746;
+       };
+       6EF8EC6E055A1C39008BBE46 = {
+               fRef = 6E0D40CE0522820D00A80003;
+               isa = PBXTextBookmark;
+               name = "ClientDelegate.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 530;
+               vrLoc = 0;
+       };
+       6EF8EC6F055A1C39008BBE46 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.h: sendUndoRedoStatus";
+               rLen = 26;
+               rLoc = 2545;
+               rType = 0;
+               vrLen = 923;
+               vrLoc = 360;
+       };
+       6EF8EC70055A1C39008BBE46 = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 1067";
+               rLen = 0;
+               rLoc = 43104;
+               rType = 0;
+               vrLen = 770;
+               vrLoc = 20315;
+       };
+       6EF8EC72055A1C39008BBE46 = {
+               fRef = 6EF8EC08055A1730008BBE46;
+               isa = PBXTextBookmark;
+               name = "Info-The_Cheat__Upgraded_.plist: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1223;
+               vrLoc = 0;
+       };
+       6EF8EC73055A1C39008BBE46 = {
+               fRef = 32DBCF750370BD2300C91783;
+               isa = PBXTextBookmark;
+               name = "The_Cheat_Prefix.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 150;
+               vrLoc = 0;
+       };
+       6EF8EC74055A1C39008BBE46 = {
+               fRef = 6EF8EC0B055A17A1008BBE46;
+               isa = PBXTextBookmark;
+               name = "wctype.h: 130";
+               rLen = 27;
+               rLoc = 4078;
+               rType = 0;
+               vrLen = 1372;
+               vrLoc = 3581;
+       };
+       6EF8EC75055A1C39008BBE46 = {
+               fRef = 32DBCF750370BD2300C91783;
+               isa = PBXTextBookmark;
+               name = "The_Cheat_Prefix.pch: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 150;
+               vrLoc = 0;
+       };
+       6EF8EC76055A1C39008BBE46 = {
+               fRef = 6EF8EC7B055A1C39008BBE46;
+               isa = PBXTextBookmark;
+               name = "(null): 9";
+               rLen = 0;
+               rLoc = 186;
+               rType = 0;
+               vrLen = 186;
+               vrLoc = 0;
+       };
+       6EF8EC77055A1C39008BBE46 = {
+               fRef = 32DBCF750370BD2300C91783;
+               isa = PBXTextBookmark;
+               name = "The_Cheat_Prefix.pch: 14";
+               rLen = 0;
+               rLoc = 238;
+               rType = 0;
+               vrLen = 238;
+               vrLoc = 0;
+       };
+       6EF8EC78055A1C39008BBE46 = {
+               fRef = 6EF8EC08055A1730008BBE46;
+               isa = PBXTextBookmark;
+               name = "Info-The_Cheat__Upgraded_.plist: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1223;
+               vrLoc = 0;
+       };
+       6EF8EC7B055A1C39008BBE46 = {
+               isa = PBXFileReference;
+               name = Niobium_Prefix.pch;
+               path = /Users/chaz/Projects/Niobium/Niobium_Prefix.pch;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6EF8EC7C055A1C39008BBE46 = {
+               expectedFileType = sourcecode.c.h;
+               isa = PBXFileReference;
+               name = Niobium_Prefix.pch;
+               path = /Users/chaz/Projects/Niobium/Niobium_Prefix.pch;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6EFB422D052F601400A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
+                       sepNavSelRange = "{726, 0}";
+                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+               };
+       };
+       6EFB422E052F601400A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1034, 1088}}";
+                       sepNavSelRange = "{896, 0}";
+                       sepNavVisRect = "{{0, 330}, {1034, 710}}";
+               };
        };
 }
index bd26a923eeaa33daedc84945ad4933279bab86e1..a2ade71cf1d261fe5e6e831258d7b4188bc1cc69 100644 (file)
@@ -5,42 +5,44 @@
        };
        objectVersion = 39;
        objects = {
-               080E96DCFE201CFB7F000001 = {
-                       fileRef = 29B97318FDCFA39411CA2CEA;
+               080E96D9FE201CDB7F000001 = {
+                       fileRef = 2A37F4B9FDCFA73011CA2CEA;
                        isa = PBXBuildFile;
                        settings = {
                        };
                };
-               080E96DDFE201D6D7F000001 = {
-                       children = (
-                               6E31BC0E04EB1BEF00A80003,
-                               6E31BC0F04EB1BEF00A80003,
-                       );
-                       isa = PBXGroup;
-                       name = Classes;
-                       refType = 4;
-                       sourceTree = "<group>";
+               080E96DAFE201CDB7F000001 = {
+                       fileRef = 2A37F4B6FDCFA73011CA2CEA;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
                };
-               089C165CFE840E0CC02AAC07 = {
+               080E96DBFE201CDB7F000001 = {
+                       fileRef = 2A37F4B4FDCFA73011CA2CEA;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               089C165FFE840EACC02AAC07 = {
                        children = (
-                               089C165DFE840E0CC02AAC07,
+                               089C1660FE840EACC02AAC07,
                        );
                        isa = PBXVariantGroup;
                        name = InfoPlist.strings;
                        refType = 4;
                        sourceTree = "<group>";
                };
-               089C165DFE840E0CC02AAC07 = {
+               089C1660FE840EACC02AAC07 = {
+                       expectedFileType = text.plist.strings;
                        fileEncoding = 10;
                        isa = PBXFileReference;
-                       lastKnownFileType = text.plist.strings;
                        name = English;
                        path = English.lproj/InfoPlist.strings;
                        refType = 4;
                        sourceTree = "<group>";
                };
-               089C165EFE840E0CC02AAC07 = {
-                       fileRef = 089C165CFE840E0CC02AAC07;
+               089C1661FE840EACC02AAC07 = {
+                       fileRef = 089C165FFE840EACC02AAC07;
                        isa = PBXBuildFile;
                        settings = {
                        };
 //102
 //103
 //104
-               1058C7A0FEA54F0111CA2CBB = {
+               1058C7A6FEA54F5311CA2CBB = {
                        children = (
-                               1058C7A1FEA54F0111CA2CBB,
+                               1058C7A7FEA54F5311CA2CBB,
                        );
                        isa = PBXGroup;
                        name = "Linked Frameworks";
                        refType = 4;
                        sourceTree = "<group>";
                };
-               1058C7A1FEA54F0111CA2CBB = {
+               1058C7A7FEA54F5311CA2CBB = {
+                       expectedFileType = wrapper.framework;
                        fallbackIsa = PBXFileReference;
                        isa = PBXFrameworkReference;
-                       lastKnownFileType = wrapper.framework;
                        name = Cocoa.framework;
                        path = /System/Library/Frameworks/Cocoa.framework;
                        refType = 0;
                        sourceTree = "<absolute>";
                };
-               1058C7A2FEA54F0111CA2CBB = {
+               1058C7A8FEA54F5311CA2CBB = {
                        children = (
-                               29B97325FDCFA39411CA2CEA,
-                               29B97324FDCFA39411CA2CEA,
+                               2A37F4C5FDCFA73011CA2CEA,
+                               2A37F4C4FDCFA73011CA2CEA,
                        );
                        isa = PBXGroup;
                        name = "Other Frameworks";
                        refType = 4;
                        sourceTree = "<group>";
                };
-               1058C7A3FEA54F0111CA2CBB = {
-                       fileRef = 1058C7A1FEA54F0111CA2CBB;
+               1058C7A9FEA54F5311CA2CBB = {
+                       fileRef = 1058C7A7FEA54F5311CA2CBB;
                        isa = PBXBuildFile;
                        settings = {
                        };
 //172
 //173
 //174
-               17587328FF379C6511CA2CBB = {
-                       explicitFileType = wrapper.application;
+               1758732AFF379DA111CA2CBB = {
+                       expectedFileType = wrapper.application;
                        fallbackIsa = PBXFileReference;
                        isa = PBXApplicationReference;
                        path = "The Cheat.app";
 //192
 //193
 //194
-               19C28FACFE9D520D11CA2CBB = {
+               19C28FB0FE9D524F11CA2CBB = {
                        children = (
-                               17587328FF379C6511CA2CBB,
+                               1758732AFF379DA111CA2CBB,
+                               6EF8EC09055A1730008BBE46,
                        );
                        isa = PBXGroup;
                        name = Products;
 //192
 //193
 //194
-//290
-//291
-//292
-//293
-//294
-               29B97313FDCFA39411CA2CEA = {
+//2A0
+//2A1
+//2A2
+//2A3
+//2A4
+               2A37F4A9FDCFA73011CA2CEA = {
                        buildSettings = {
+                               MACOSX_DEPLOYMENT_TARGET = 10.2;
+                               SDKROOT = /Developer/SDKs/MacOSX10.2.7.sdk;
                        };
                        buildStyles = (
-                               4A9504CCFFE6A4B311CA0CBA,
-                               4A9504CDFFE6A4B311CA0CBA,
+                               4A9504D0FFE6A4CB11CA0CBA,
+                               4A9504D1FFE6A4CB11CA0CBA,
                        );
                        hasScannedForEncodings = 1;
                        isa = PBXProject;
-                       mainGroup = 29B97314FDCFA39411CA2CEA;
+                       mainGroup = 2A37F4AAFDCFA73011CA2CEA;
                        projectDirPath = "";
                        targets = (
-                               29B97326FDCFA39411CA2CEA,
+                               2A37F4C6FDCFA73011CA2CEA,
+                               6EF8EBD9055A1730008BBE46,
                        );
                };
-               29B97314FDCFA39411CA2CEA = {
+               2A37F4AAFDCFA73011CA2CEA = {
                        children = (
-                               080E96DDFE201D6D7F000001,
-                               29B97315FDCFA39411CA2CEA,
-                               29B97317FDCFA39411CA2CEA,
-                               29B97323FDCFA39411CA2CEA,
-                               19C28FACFE9D520D11CA2CBB,
+                               6E0D40B3052243B800A80003,
+                               2A37F4ABFDCFA73011CA2CEA,
+                               6EAF23070527D7DB00A80003,
+                               6E0D40BF05224F4B00A80003,
+                               6ED3E46705192F0C00A80003,
+                               2A37F4AFFDCFA73011CA2CEA,
+                               2A37F4B8FDCFA73011CA2CEA,
+                               2A37F4C3FDCFA73011CA2CEA,
+                               19C28FB0FE9D524F11CA2CBB,
+                               6EF8EC08055A1730008BBE46,
                        );
                        isa = PBXGroup;
                        name = "The Cheat";
                        refType = 4;
                        sourceTree = "<group>";
                };
-               29B97315FDCFA39411CA2CEA = {
+               2A37F4ABFDCFA73011CA2CEA = {
+                       children = (
+                               6E0D40B80522449500A80003,
+                               6E0D40B90522449500A80003,
+                               6E4E098F050BB21400A80003,
+                               6E4E098E050BB21400A80003,
+                               6E146B11051FA42C00A80003,
+                               6E146B12051FA42C00A80003,
+                       );
+                       isa = PBXGroup;
+                       name = "Network Classes";
+                       path = "";
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               2A37F4ACFDCFA73011CA2CEA = {
+                       expectedFileType = sourcecode.c.objc;
+                       fileEncoding = 30;
+                       isa = PBXFileReference;
+                       path = MyDocument.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               2A37F4AEFDCFA73011CA2CEA = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 30;
+                       isa = PBXFileReference;
+                       path = MyDocument.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               2A37F4AFFDCFA73011CA2CEA = {
                        children = (
-                               32CA4F630368D1EE00C91783,
-                               29B97316FDCFA39411CA2CEA,
+                               32DBCF750370BD2300C91783,
+                               2A37F4B0FDCFA73011CA2CEA,
+                               6E51A986057330B900506538,
+                               6E51A987057330B900506538,
+                               6E3F0D01050D4ACC00A80003,
+                               6E3F0D02050D4ACC00A80003,
+                               6E71F41B051BCCC600A80003,
+                               6E71F41C051BCCC600A80003,
+                               6E0BDF7D0511568D00A80003,
                        );
                        isa = PBXGroup;
                        name = "Other Sources";
                        refType = 4;
                        sourceTree = "<group>";
                };
-               29B97316FDCFA39411CA2CEA = {
+               2A37F4B0FDCFA73011CA2CEA = {
+                       expectedFileType = sourcecode.c.objc;
                        fileEncoding = 30;
                        isa = PBXFileReference;
-                       lastKnownFileType = sourcecode.c.objc;
                        path = main.m;
                        refType = 4;
                        sourceTree = "<group>";
                };
-               29B97317FDCFA39411CA2CEA = {
+               2A37F4B4FDCFA73011CA2CEA = {
                        children = (
-                               29B97318FDCFA39411CA2CEA,
-                               089C165CFE840E0CC02AAC07,
+                               2A37F4B5FDCFA73011CA2CEA,
                        );
-                       isa = PBXGroup;
-                       name = Resources;
+                       isa = PBXVariantGroup;
+                       name = MyDocument.nib;
                        path = "";
                        refType = 4;
                        sourceTree = "<group>";
                };
-               29B97318FDCFA39411CA2CEA = {
+               2A37F4B5FDCFA73011CA2CEA = {
+                       expectedFileType = wrapper.nib;
+                       isa = PBXFileReference;
+                       name = English;
+                       path = English.lproj/MyDocument.nib;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               2A37F4B6FDCFA73011CA2CEA = {
                        children = (
-                               29B97319FDCFA39411CA2CEA,
+                               2A37F4B7FDCFA73011CA2CEA,
                        );
                        isa = PBXVariantGroup;
                        name = MainMenu.nib;
                        refType = 4;
                        sourceTree = "<group>";
                };
-               29B97319FDCFA39411CA2CEA = {
+               2A37F4B7FDCFA73011CA2CEA = {
+                       expectedFileType = wrapper.nib;
                        isa = PBXFileReference;
-                       lastKnownFileType = wrapper.nib;
                        name = English;
                        path = English.lproj/MainMenu.nib;
                        refType = 4;
                        sourceTree = "<group>";
                };
-               29B97323FDCFA39411CA2CEA = {
+               2A37F4B8FDCFA73011CA2CEA = {
+                       children = (
+                               6ED02FE7055758FF007B5502,
+                               2A37F4B9FDCFA73011CA2CEA,
+                               2A37F4B6FDCFA73011CA2CEA,
+                               6E51A97605732B9000506538,
+                               6E0D40BC052245E700A80003,
+                               6E0D40B005223D4E00A80003,
+                               2A37F4B4FDCFA73011CA2CEA,
+                               089C165FFE840EACC02AAC07,
+                               6E3309E10575BA9D0093550E,
+                       );
+                       isa = PBXGroup;
+                       name = Resources;
+                       path = "";
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               2A37F4B9FDCFA73011CA2CEA = {
+                       children = (
+                               2A37F4BAFDCFA73011CA2CEA,
+                       );
+                       isa = PBXVariantGroup;
+                       name = Credits.rtf;
+                       path = "";
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               2A37F4BAFDCFA73011CA2CEA = {
+                       expectedFileType = text.rtf;
+                       isa = PBXFileReference;
+                       name = English;
+                       path = English.lproj/Credits.rtf;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               2A37F4C3FDCFA73011CA2CEA = {
                        children = (
-                               1058C7A0FEA54F0111CA2CBB,
-                               1058C7A2FEA54F0111CA2CBB,
+                               1058C7A6FEA54F5311CA2CBB,
+                               1058C7A8FEA54F5311CA2CBB,
                        );
                        isa = PBXGroup;
                        name = Frameworks;
                        refType = 4;
                        sourceTree = "<group>";
                };
-               29B97324FDCFA39411CA2CEA = {
+               2A37F4C4FDCFA73011CA2CEA = {
+                       expectedFileType = wrapper.framework;
                        fallbackIsa = PBXFileReference;
                        isa = PBXFrameworkReference;
-                       lastKnownFileType = wrapper.framework;
                        name = AppKit.framework;
                        path = /System/Library/Frameworks/AppKit.framework;
                        refType = 0;
                        sourceTree = "<absolute>";
                };
-               29B97325FDCFA39411CA2CEA = {
+               2A37F4C5FDCFA73011CA2CEA = {
+                       expectedFileType = wrapper.framework;
                        fallbackIsa = PBXFileReference;
                        isa = PBXFrameworkReference;
-                       lastKnownFileType = wrapper.framework;
                        name = Foundation.framework;
                        path = /System/Library/Frameworks/Foundation.framework;
                        refType = 0;
                        sourceTree = "<absolute>";
                };
-               29B97326FDCFA39411CA2CEA = {
+               2A37F4C6FDCFA73011CA2CEA = {
                        buildPhases = (
-                               29B97327FDCFA39411CA2CEA,
-                               29B97328FDCFA39411CA2CEA,
-                               29B9732BFDCFA39411CA2CEA,
-                               29B9732DFDCFA39411CA2CEA,
+                               2A37F4C7FDCFA73011CA2CEA,
+                               2A37F4C9FDCFA73011CA2CEA,
+                               2A37F4CEFDCFA73011CA2CEA,
+                               2A37F4D1FDCFA73011CA2CEA,
                        );
                        buildSettings = {
+                               CC = "/usr/bin/gcc-3.3";
+                               CPLUSPLUS = "/usr/bin/g++-3.3";
                                FRAMEWORK_SEARCH_PATHS = "";
                                HEADER_SEARCH_PATHS = "";
                                INSTALL_PATH = "$(HOME)/Applications";
                                LIBRARY_SEARCH_PATHS = "";
+                               OPTIMIZATION_CFLAGS = "-O3";
                                OTHER_CFLAGS = "-std=c99";
                                OTHER_LDFLAGS = "";
                                PRECOMPILE_PREFIX_HEADER = YES;
                        name = "The Cheat";
                        productInstallPath = "$(HOME)/Applications";
                        productName = "The Cheat";
-                       productReference = 17587328FF379C6511CA2CBB;
+                       productReference = 1758732AFF379DA111CA2CBB;
                        productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
 <!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
 <plist version=\"1.0\">
 <dict>
        <key>CFBundleDevelopmentRegion</key>
        <string>English</string>
+       <key>CFBundleDocumentTypes</key>
+       <array>
+               <dict>
+                       <key>CFBundleTypeName</key>
+                       <string>The Cheat</string>
+                       <key>CFBundleTypeRole</key>
+                       <string>Editor</string>
+                       <key>NSDocumentClass</key>
+                       <string>MyDocument</string>
+               </dict>
+       </array>
        <key>CFBundleExecutable</key>
        <string>The Cheat</string>
        <key>CFBundleGetInfoString</key>
-       <string>The Cheat 1.0b1</string>
+       <string>The Cheat 1.0</string>
        <key>CFBundleIconFile</key>
-       <string>icon.icns</string>
+       <string>icon_b.icns</string>
        <key>CFBundleIdentifier</key>
        <string>com.brokenzipper.TheCheat</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.0b1</string>
+       <string>1.0</string>
        <key>CFBundleSignature</key>
        <string>ThCh</string>
        <key>CFBundleVersion</key>
-       <string>1.0b1</string>
+       <string>1B02</string>
        <key>NSMainNibFile</key>
        <string>MainMenu</string>
        <key>NSPrincipalClass</key>
 </plist>
 ";
                };
-               29B97327FDCFA39411CA2CEA = {
+               2A37F4C7FDCFA73011CA2CEA = {
                        buildActionMask = 2147483647;
                        files = (
-                               32CA4F650368D2AA00C91783,
-                               6E31BC1004EB1BEF00A80003,
+                               32DBCF760370BD2300C91783,
+                               2A37F4C8FDCFA73011CA2CEA,
+                               6E4E0992050BB21400A80003,
+                               6E4E0995050BB21400A80003,
+                               6E3F0D03050D4ACC00A80003,
+                               6E0BDF7E0511568D00A80003,
+                               6ED3E46505192E2B00A80003,
+                               6E71F41D051BCCC600A80003,
+                               6E146B13051FA42C00A80003,
+                               6E0D40AE05223CCE00A80003,
+                               6E0D40B6052243D500A80003,
+                               6E0D40BA0522449500A80003,
+                               6E0D40C205224FD000A80003,
+                               6E0D40C605225DA100A80003,
+                               6E0D40CC0522815100A80003,
+                               6E0D40D00522820D00A80003,
+                               6EBCEEE80523E23700A80003,
+                               6EAF230A0527D7FE00A80003,
+                               6EFB422F052F601400A80003,
+                               6E51A97E0573304C00506538,
+                               6E51A988057330B900506538,
                        );
                        isa = PBXHeadersBuildPhase;
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               29B97328FDCFA39411CA2CEA = {
+               2A37F4C8FDCFA73011CA2CEA = {
+                       fileRef = 2A37F4AEFDCFA73011CA2CEA;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               2A37F4C9FDCFA73011CA2CEA = {
                        buildActionMask = 2147483647;
                        files = (
-                               080E96DCFE201CFB7F000001,
-                               089C165EFE840E0CC02AAC07,
+                               080E96D9FE201CDB7F000001,
+                               080E96DAFE201CDB7F000001,
+                               080E96DBFE201CDB7F000001,
+                               089C1661FE840EACC02AAC07,
+                               6E0D40B205223D4E00A80003,
+                               6E0D40BE052245E700A80003,
+                               6ED02FE8055758FF007B5502,
+                               6E51A97805732B9000506538,
+                               6E3309E20575BA9D0093550E,
                        );
                        isa = PBXResourcesBuildPhase;
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               29B9732BFDCFA39411CA2CEA = {
+               2A37F4CEFDCFA73011CA2CEA = {
                        buildActionMask = 2147483647;
                        files = (
-                               29B9732CFDCFA39411CA2CEA,
-                               6E31BC1104EB1BEF00A80003,
+                               2A37F4CFFDCFA73011CA2CEA,
+                               2A37F4D0FDCFA73011CA2CEA,
+                               6E4E0993050BB21400A80003,
+                               6E4E0994050BB21400A80003,
+                               6E3F0D04050D4ACC00A80003,
+                               6ED3E46605192E2B00A80003,
+                               6E71F41E051BCCC600A80003,
+                               6E146B14051FA42C00A80003,
+                               6E0D40AF05223CCE00A80003,
+                               6E0D40B7052243D500A80003,
+                               6E0D40BB0522449500A80003,
+                               6EAF230B0527D7FE00A80003,
+                               6EFB4230052F601400A80003,
+                               6E51A97F0573304C00506538,
+                               6E51A989057330B900506538,
                        );
                        isa = PBXSourcesBuildPhase;
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               29B9732CFDCFA39411CA2CEA = {
-                       fileRef = 29B97316FDCFA39411CA2CEA;
+               2A37F4CFFDCFA73011CA2CEA = {
+                       fileRef = 2A37F4ACFDCFA73011CA2CEA;
+                       isa = PBXBuildFile;
+                       settings = {
+                               ATTRIBUTES = (
+                               );
+                       };
+               };
+               2A37F4D0FDCFA73011CA2CEA = {
+                       fileRef = 2A37F4B0FDCFA73011CA2CEA;
                        isa = PBXBuildFile;
                        settings = {
                                ATTRIBUTES = (
                                );
                        };
                };
-               29B9732DFDCFA39411CA2CEA = {
+               2A37F4D1FDCFA73011CA2CEA = {
                        buildActionMask = 2147483647;
                        files = (
-                               1058C7A3FEA54F0111CA2CBB,
+                               1058C7A9FEA54F5311CA2CBB,
                        );
                        isa = PBXFrameworksBuildPhase;
                        runOnlyForDeploymentPostprocessing = 0;
                };
-//290
-//291
-//292
-//293
-//294
+//2A0
+//2A1
+//2A2
+//2A3
+//2A4
 //320
 //321
 //322
 //323
 //324
-               32CA4F630368D1EE00C91783 = {
+               32DBCF750370BD2300C91783 = {
+                       expectedFileType = sourcecode.c.h;
                        fileEncoding = 4;
                        isa = PBXFileReference;
-                       lastKnownFileType = sourcecode.c.h;
-                       path = The_Cheat_Prefix.h;
+                       path = The_Cheat_Prefix.pch;
                        refType = 4;
                        sourceTree = "<group>";
                };
-               32CA4F650368D2AA00C91783 = {
-                       fileRef = 32CA4F630368D1EE00C91783;
+               32DBCF760370BD2300C91783 = {
+                       fileRef = 32DBCF750370BD2300C91783;
                        isa = PBXBuildFile;
                        settings = {
                        };
 //4A2
 //4A3
 //4A4
-               4A9504CCFFE6A4B311CA0CBA = {
+               4A9504D0FFE6A4CB11CA0CBA = {
                        buildRules = (
                        );
                        buildSettings = {
                                GCC_ENABLE_FIX_AND_CONTINUE = YES;
                                GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
+                               GCC_PRECOMPILE_PREFIX_HEADER = YES;
                                OPTIMIZATION_CFLAGS = "-O0";
                                ZERO_LINK = YES;
                        };
                        isa = PBXBuildStyle;
                        name = Development;
                };
-               4A9504CDFFE6A4B311CA0CBA = {
+               4A9504D1FFE6A4CB11CA0CBA = {
                        buildRules = (
                        );
                        buildSettings = {
 //6E2
 //6E3
 //6E4
-               6E31BC0E04EB1BEF00A80003 = {
+               6E0BDF7D0511568D00A80003 = {
+                       expectedFileType = sourcecode.c.h;
                        fileEncoding = 4;
                        isa = PBXFileReference;
-                       lastKnownFileType = sourcecode.c.h;
-                       path = AppController.h;
+                       path = cheat_types.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E0BDF7E0511568D00A80003 = {
+                       fileRef = 6E0BDF7D0511568D00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E0D40AC05223CCE00A80003 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = NetTrafficController.h;
                        refType = 4;
                        sourceTree = "<group>";
                };
-               6E31BC0F04EB1BEF00A80003 = {
+               6E0D40AD05223CCE00A80003 = {
+                       expectedFileType = sourcecode.c.objc;
                        fileEncoding = 4;
                        isa = PBXFileReference;
-                       lastKnownFileType = sourcecode.c.objc;
-                       path = AppController.m;
+                       path = NetTrafficController.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E0D40AE05223CCE00A80003 = {
+                       fileRef = 6E0D40AC05223CCE00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E0D40AF05223CCE00A80003 = {
+                       fileRef = 6E0D40AD05223CCE00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E0D40B005223D4E00A80003 = {
+                       children = (
+                               6E0D40B105223D4E00A80003,
+                       );
+                       isa = PBXVariantGroup;
+                       name = NetTraffic.nib;
+                       path = "";
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E0D40B105223D4E00A80003 = {
+                       expectedFileType = wrapper.nib;
+                       isa = PBXFileReference;
+                       name = English;
+                       path = English.lproj/NetTraffic.nib;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E0D40B205223D4E00A80003 = {
+                       fileRef = 6E0D40B005223D4E00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E0D40B3052243B800A80003 = {
+                       children = (
+                               6E4E098C050BB21400A80003,
+                               6E4E098D050BB21400A80003,
+                               6E51A97C0573304C00506538,
+                               6E51A97D0573304C00506538,
+                               6E0D40B4052243D500A80003,
+                               6E0D40B5052243D500A80003,
+                               6E0D40AC05223CCE00A80003,
+                               6E0D40AD05223CCE00A80003,
+                               2A37F4AEFDCFA73011CA2CEA,
+                               2A37F4ACFDCFA73011CA2CEA,
+                       );
+                       isa = PBXGroup;
+                       name = Controllers;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E0D40B4052243D500A80003 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = PreferenceController.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E0D40B5052243D500A80003 = {
+                       expectedFileType = sourcecode.c.objc;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = PreferenceController.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E0D40B6052243D500A80003 = {
+                       fileRef = 6E0D40B4052243D500A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E0D40B7052243D500A80003 = {
+                       fileRef = 6E0D40B5052243D500A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E0D40B80522449500A80003 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = CheatListener.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E0D40B90522449500A80003 = {
+                       expectedFileType = sourcecode.c.objc;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = CheatListener.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E0D40BA0522449500A80003 = {
+                       fileRef = 6E0D40B80522449500A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E0D40BB0522449500A80003 = {
+                       fileRef = 6E0D40B90522449500A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E0D40BC052245E700A80003 = {
+                       children = (
+                               6E0D40BD052245E700A80003,
+                       );
+                       isa = PBXVariantGroup;
+                       name = Preferences.nib;
+                       path = "";
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E0D40BD052245E700A80003 = {
+                       expectedFileType = wrapper.nib;
+                       isa = PBXFileReference;
+                       name = English;
+                       path = English.lproj/Preferences.nib;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E0D40BE052245E700A80003 = {
+                       fileRef = 6E0D40BC052245E700A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E0D40BF05224F4B00A80003 = {
+                       children = (
+                               6E0D40C405225DA100A80003,
+                               6E0D40C005224FD000A80003,
+                               6E0D40CA0522815100A80003,
+                               6EBCEEE60523E23700A80003,
+                               6E0D40CE0522820D00A80003,
+                       );
+                       isa = PBXGroup;
+                       name = Protocols;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E0D40C005224FD000A80003 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = NetTrafficControlling.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E0D40C205224FD000A80003 = {
+                       fileRef = 6E0D40C005224FD000A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E0D40C405225DA100A80003 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = PreferenceControlling.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E0D40C605225DA100A80003 = {
+                       fileRef = 6E0D40C405225DA100A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E0D40CA0522815100A80003 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = ListenerDelegate.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E0D40CC0522815100A80003 = {
+                       fileRef = 6E0D40CA0522815100A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E0D40CE0522820D00A80003 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = ClientDelegate.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E0D40D00522820D00A80003 = {
+                       fileRef = 6E0D40CE0522820D00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E146B11051FA42C00A80003 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = CheatClient.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E146B12051FA42C00A80003 = {
+                       expectedFileType = sourcecode.c.objc;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = CheatClient.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E146B13051FA42C00A80003 = {
+                       fileRef = 6E146B11051FA42C00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E146B14051FA42C00A80003 = {
+                       fileRef = 6E146B12051FA42C00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E3309E10575BA9D0093550E = {
+                       expectedFileType = image.pdf;
+                       isa = PBXFileReference;
+                       path = "Read Me.pdf";
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E3309E20575BA9D0093550E = {
+                       fileRef = 6E3309E10575BA9D0093550E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E3309E30575BA9D0093550E = {
+                       fileRef = 6E3309E10575BA9D0093550E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E3F0D01050D4ACC00A80003 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = cheat_net.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E3F0D02050D4ACC00A80003 = {
+                       expectedFileType = sourcecode.c.objc;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = cheat_net.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E3F0D03050D4ACC00A80003 = {
+                       fileRef = 6E3F0D01050D4ACC00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E3F0D04050D4ACC00A80003 = {
+                       fileRef = 6E3F0D02050D4ACC00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E4E098C050BB21400A80003 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 30;
+                       isa = PBXFileReference;
+                       path = AppController.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E4E098D050BB21400A80003 = {
+                       expectedFileType = sourcecode.c.objc;
+                       fileEncoding = 30;
+                       isa = PBXFileReference;
+                       path = AppController.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E4E098E050BB21400A80003 = {
+                       expectedFileType = sourcecode.c.objc;
+                       fileEncoding = 30;
+                       isa = PBXFileReference;
+                       path = CheatServer.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E4E098F050BB21400A80003 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 30;
+                       isa = PBXFileReference;
+                       path = CheatServer.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E4E0992050BB21400A80003 = {
+                       fileRef = 6E4E098C050BB21400A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E4E0993050BB21400A80003 = {
+                       fileRef = 6E4E098D050BB21400A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E4E0994050BB21400A80003 = {
+                       fileRef = 6E4E098E050BB21400A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E4E0995050BB21400A80003 = {
+                       fileRef = 6E4E098F050BB21400A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E51A97605732B9000506538 = {
+                       children = (
+                               6E51A97705732B9000506538,
+                       );
+                       isa = PBXVariantGroup;
+                       name = AboutBox.nib;
+                       path = "";
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E51A97705732B9000506538 = {
+                       expectedFileType = wrapper.nib;
+                       isa = PBXFileReference;
+                       name = English;
+                       path = English.lproj/AboutBox.nib;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E51A97805732B9000506538 = {
+                       fileRef = 6E51A97605732B9000506538;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E51A97905732B9000506538 = {
+                       fileRef = 6E51A97605732B9000506538;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E51A97C0573304C00506538 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = AboutBoxController.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E51A97D0573304C00506538 = {
+                       expectedFileType = sourcecode.c.objc;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = AboutBoxController.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E51A97E0573304C00506538 = {
+                       fileRef = 6E51A97C0573304C00506538;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E51A97F0573304C00506538 = {
+                       fileRef = 6E51A97D0573304C00506538;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E51A9800573304C00506538 = {
+                       fileRef = 6E51A97C0573304C00506538;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E51A9810573304C00506538 = {
+                       fileRef = 6E51A97D0573304C00506538;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E51A986057330B900506538 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = cheat_shared.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E51A987057330B900506538 = {
+                       expectedFileType = sourcecode.c.objc;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = cheat_shared.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E51A988057330B900506538 = {
+                       fileRef = 6E51A986057330B900506538;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E51A989057330B900506538 = {
+                       fileRef = 6E51A987057330B900506538;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E51A98A057330B900506538 = {
+                       fileRef = 6E51A986057330B900506538;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E51A98B057330B900506538 = {
+                       fileRef = 6E51A987057330B900506538;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E71F41B051BCCC600A80003 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = cheat_globals.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E71F41C051BCCC600A80003 = {
+                       expectedFileType = sourcecode.c.objc;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = cheat_globals.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E71F41D051BCCC600A80003 = {
+                       fileRef = 6E71F41B051BCCC600A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E71F41E051BCCC600A80003 = {
+                       fileRef = 6E71F41C051BCCC600A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EAF23070527D7DB00A80003 = {
+                       children = (
+                               6EAF23080527D7FE00A80003,
+                               6EAF23090527D7FE00A80003,
+                               6EFB422D052F601400A80003,
+                               6EFB422E052F601400A80003,
+                       );
+                       isa = PBXGroup;
+                       name = "Miscellaneous Classes";
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6EAF23080527D7FE00A80003 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = ServerHolder.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6EAF23090527D7FE00A80003 = {
+                       expectedFileType = sourcecode.c.objc;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = ServerHolder.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6EAF230A0527D7FE00A80003 = {
+                       fileRef = 6EAF23080527D7FE00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EAF230B0527D7FE00A80003 = {
+                       fileRef = 6EAF23090527D7FE00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EBCEEE60523E23700A80003 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = ServerDelegate.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6EBCEEE80523E23700A80003 = {
+                       fileRef = 6EBCEEE60523E23700A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6ED02FE7055758FF007B5502 = {
+                       expectedFileType = image.icns;
+                       isa = PBXFileReference;
+                       path = icon_b.icns;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6ED02FE8055758FF007B5502 = {
+                       fileRef = 6ED02FE7055758FF007B5502;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6ED3E46305192E2B00A80003 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = MenuExtras.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6ED3E46405192E2B00A80003 = {
+                       expectedFileType = sourcecode.c.objc;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = MenuExtras.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6ED3E46505192E2B00A80003 = {
+                       fileRef = 6ED3E46305192E2B00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6ED3E46605192E2B00A80003 = {
+                       fileRef = 6ED3E46405192E2B00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6ED3E46705192F0C00A80003 = {
+                       children = (
+                               6ED3E46305192E2B00A80003,
+                               6ED3E46405192E2B00A80003,
+                       );
+                       isa = PBXGroup;
+                       name = Categories;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6EF8EBD9055A1730008BBE46 = {
+                       buildPhases = (
+                               6EF8EBDA055A1730008BBE46,
+                               6EF8EBEE055A1730008BBE46,
+                               6EF8EBF7055A1730008BBE46,
+                               6EF8EC05055A1730008BBE46,
+                       );
+                       buildRules = (
+                       );
+                       buildSettings = {
+                               CC = "/usr/bin/gcc-3.3";
+                               CPLUSPLUS = "/usr/bin/g++-3.3";
+                               FRAMEWORK_SEARCH_PATHS = "";
+                               GCC_C_LANGUAGE_STANDARD = "compiler-default";
+                               GCC_ENABLE_ASM_KEYWORD = YES;
+                               GCC_ENABLE_CPP_EXCEPTIONS = NO;
+                               GCC_OPTIMIZATION_LEVEL = 3;
+                               GCC_PRECOMPILE_PREFIX_HEADER = YES;
+                               GCC_PREFIX_HEADER = The_Cheat_Prefix.pch;
+                               GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
+                               GCC_WARN_UNKNOWN_PRAGMAS = NO;
+                               HEADER_SEARCH_PATHS = "";
+                               INFOPLIST_FILE = "Info-The_Cheat__Upgraded_.plist";
+                               INSTALL_PATH = "$(HOME)/Applications";
+                               LIBRARY_SEARCH_PATHS = "";
+                               MACOSX_DEPLOYMENT_TARGET = 10.2;
+                               OTHER_CFLAGS = "-fasm-blocks";
+                               OTHER_LDFLAGS = "";
+                               PRODUCT_NAME = "The Cheat";
+                               SECTORDER_FLAGS = "";
+                               WARNING_CFLAGS = "-Wmost";
+                               WRAPPER_EXTENSION = app;
+                       };
+                       dependencies = (
+                       );
+                       isa = PBXNativeTarget;
+                       name = "The Cheat (Upgraded)";
+                       productInstallPath = "$(HOME)/Applications";
+                       productName = "The Cheat";
+                       productReference = 6EF8EC09055A1730008BBE46;
+                       productType = "com.apple.product-type.application";
+               };
+               6EF8EBDA055A1730008BBE46 = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               6EF8EBDB055A1730008BBE46,
+                               6EF8EBDC055A1730008BBE46,
+                               6EF8EBDD055A1730008BBE46,
+                               6EF8EBDE055A1730008BBE46,
+                               6EF8EBDF055A1730008BBE46,
+                               6EF8EBE0055A1730008BBE46,
+                               6EF8EBE1055A1730008BBE46,
+                               6EF8EBE2055A1730008BBE46,
+                               6EF8EBE3055A1730008BBE46,
+                               6EF8EBE4055A1730008BBE46,
+                               6EF8EBE5055A1730008BBE46,
+                               6EF8EBE6055A1730008BBE46,
+                               6EF8EBE7055A1730008BBE46,
+                               6EF8EBE8055A1730008BBE46,
+                               6EF8EBE9055A1730008BBE46,
+                               6EF8EBEA055A1730008BBE46,
+                               6EF8EBEB055A1730008BBE46,
+                               6EF8EBEC055A1730008BBE46,
+                               6EF8EBED055A1730008BBE46,
+                               6E51A9800573304C00506538,
+                               6E51A98A057330B900506538,
+                       );
+                       isa = PBXHeadersBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               6EF8EBDB055A1730008BBE46 = {
+                       fileRef = 32DBCF750370BD2300C91783;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBDC055A1730008BBE46 = {
+                       fileRef = 2A37F4AEFDCFA73011CA2CEA;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBDD055A1730008BBE46 = {
+                       fileRef = 6E4E098C050BB21400A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBDE055A1730008BBE46 = {
+                       fileRef = 6E4E098F050BB21400A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBDF055A1730008BBE46 = {
+                       fileRef = 6E3F0D01050D4ACC00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBE0055A1730008BBE46 = {
+                       fileRef = 6E0BDF7D0511568D00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBE1055A1730008BBE46 = {
+                       fileRef = 6ED3E46305192E2B00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBE2055A1730008BBE46 = {
+                       fileRef = 6E71F41B051BCCC600A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBE3055A1730008BBE46 = {
+                       fileRef = 6E146B11051FA42C00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBE4055A1730008BBE46 = {
+                       fileRef = 6E0D40AC05223CCE00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBE5055A1730008BBE46 = {
+                       fileRef = 6E0D40B4052243D500A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBE6055A1730008BBE46 = {
+                       fileRef = 6E0D40B80522449500A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBE7055A1730008BBE46 = {
+                       fileRef = 6E0D40C005224FD000A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBE8055A1730008BBE46 = {
+                       fileRef = 6E0D40C405225DA100A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBE9055A1730008BBE46 = {
+                       fileRef = 6E0D40CA0522815100A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBEA055A1730008BBE46 = {
+                       fileRef = 6E0D40CE0522820D00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBEB055A1730008BBE46 = {
+                       fileRef = 6EBCEEE60523E23700A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBEC055A1730008BBE46 = {
+                       fileRef = 6EAF23080527D7FE00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBED055A1730008BBE46 = {
+                       fileRef = 6EFB422D052F601400A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBEE055A1730008BBE46 = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               6EF8EBEF055A1730008BBE46,
+                               6EF8EBF0055A1730008BBE46,
+                               6EF8EBF1055A1730008BBE46,
+                               6EF8EBF2055A1730008BBE46,
+                               6EF8EBF3055A1730008BBE46,
+                               6EF8EBF4055A1730008BBE46,
+                               6EF8EBF6055A1730008BBE46,
+                               6E51A97905732B9000506538,
+                               6E3309E30575BA9D0093550E,
+                       );
+                       isa = PBXResourcesBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               6EF8EBEF055A1730008BBE46 = {
+                       fileRef = 2A37F4B9FDCFA73011CA2CEA;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBF0055A1730008BBE46 = {
+                       fileRef = 2A37F4B6FDCFA73011CA2CEA;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBF1055A1730008BBE46 = {
+                       fileRef = 2A37F4B4FDCFA73011CA2CEA;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBF2055A1730008BBE46 = {
+                       fileRef = 089C165FFE840EACC02AAC07;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBF3055A1730008BBE46 = {
+                       fileRef = 6E0D40B005223D4E00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBF4055A1730008BBE46 = {
+                       fileRef = 6E0D40BC052245E700A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBF6055A1730008BBE46 = {
+                       fileRef = 6ED02FE7055758FF007B5502;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBF7055A1730008BBE46 = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               6EF8EBF8055A1730008BBE46,
+                               6EF8EBF9055A1730008BBE46,
+                               6EF8EBFA055A1730008BBE46,
+                               6EF8EBFB055A1730008BBE46,
+                               6EF8EBFC055A1730008BBE46,
+                               6EF8EBFD055A1730008BBE46,
+                               6EF8EBFE055A1730008BBE46,
+                               6EF8EBFF055A1730008BBE46,
+                               6EF8EC00055A1730008BBE46,
+                               6EF8EC01055A1730008BBE46,
+                               6EF8EC02055A1730008BBE46,
+                               6EF8EC03055A1730008BBE46,
+                               6EF8EC04055A1730008BBE46,
+                               6E51A9810573304C00506538,
+                               6E51A98B057330B900506538,
+                       );
+                       isa = PBXSourcesBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               6EF8EBF8055A1730008BBE46 = {
+                       fileRef = 2A37F4ACFDCFA73011CA2CEA;
+                       isa = PBXBuildFile;
+                       settings = {
+                               ATTRIBUTES = (
+                               );
+                       };
+               };
+               6EF8EBF9055A1730008BBE46 = {
+                       fileRef = 2A37F4B0FDCFA73011CA2CEA;
+                       isa = PBXBuildFile;
+                       settings = {
+                               ATTRIBUTES = (
+                               );
+                       };
+               };
+               6EF8EBFA055A1730008BBE46 = {
+                       fileRef = 6E4E098D050BB21400A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBFB055A1730008BBE46 = {
+                       fileRef = 6E4E098E050BB21400A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBFC055A1730008BBE46 = {
+                       fileRef = 6E3F0D02050D4ACC00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBFD055A1730008BBE46 = {
+                       fileRef = 6ED3E46405192E2B00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBFE055A1730008BBE46 = {
+                       fileRef = 6E71F41C051BCCC600A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EBFF055A1730008BBE46 = {
+                       fileRef = 6E146B12051FA42C00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EC00055A1730008BBE46 = {
+                       fileRef = 6E0D40AD05223CCE00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EC01055A1730008BBE46 = {
+                       fileRef = 6E0D40B5052243D500A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EC02055A1730008BBE46 = {
+                       fileRef = 6E0D40B90522449500A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EC03055A1730008BBE46 = {
+                       fileRef = 6EAF23090527D7FE00A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EC04055A1730008BBE46 = {
+                       fileRef = 6EFB422E052F601400A80003;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EC05055A1730008BBE46 = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               6EF8EC06055A1730008BBE46,
+                       );
+                       isa = PBXFrameworksBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               6EF8EC06055A1730008BBE46 = {
+                       fileRef = 1058C7A7FEA54F5311CA2CBB;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6EF8EC08055A1730008BBE46 = {
+                       expectedFileType = text.plist;
+                       isa = PBXFileReference;
+                       path = "Info-The_Cheat__Upgraded_.plist";
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6EF8EC09055A1730008BBE46 = {
+                       expectedFileType = wrapper.application;
+                       includeInIndex = 0;
+                       isa = PBXFileReference;
+                       path = "The Cheat.app";
+                       refType = 3;
+                       sourceTree = BUILT_PRODUCTS_DIR;
+               };
+               6EFB422D052F601400A80003 = {
+                       expectedFileType = sourcecode.c.h;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = SearchResults.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6EFB422E052F601400A80003 = {
+                       expectedFileType = sourcecode.c.objc;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = SearchResults.m;
                        refType = 4;
                        sourceTree = "<group>";
                };
-               6E31BC1004EB1BEF00A80003 = {
-                       fileRef = 6E31BC0E04EB1BEF00A80003;
+               6EFB422F052F601400A80003 = {
+                       fileRef = 6EFB422D052F601400A80003;
                        isa = PBXBuildFile;
                        settings = {
                        };
                };
-               6E31BC1104EB1BEF00A80003 = {
-                       fileRef = 6E31BC0F04EB1BEF00A80003;
+               6EFB4230052F601400A80003 = {
+                       fileRef = 6EFB422E052F601400A80003;
                        isa = PBXBuildFile;
                        settings = {
                        };
                };
        };
-       rootObject = 29B97313FDCFA39411CA2CEA;
+       rootObject = 2A37F4A9FDCFA73011CA2CEA;
 }
similarity index 62%
rename from The_Cheat_Prefix.h
rename to The_Cheat_Prefix.pch
index 0d0c539bac4c992ed60ebd6f6f00d24c784e955b..92e9b973ad4550fccef660b814d8633275ed0ebb 100644 (file)
@@ -1,7 +1,13 @@
+
 //
 // Prefix header for all source files of the 'The Cheat' target in the 'The Cheat' project
 //
-
+/*
 #ifdef __OBJC__
     #import <Cocoa/Cocoa.h>
 #endif
+*/
+#ifdef __OBJC__
+#import <Foundation/Foundation.h>
+#import <AppKit/AppKit.h>
+#endif
diff --git a/cheat_globals.h b/cheat_globals.h
new file mode 100644 (file)
index 0000000..03bad61
--- /dev/null
@@ -0,0 +1,40 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      cheat_globals.h
+// Created:   Fri Sep 19 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#ifndef _cheat_globals_H
+#define _cheat_globals_H
+
+#import <Cocoa/Cocoa.h>
+
+#define                                        TCDefaultListenPort (5007)
+//#define                                      TCDefaultListenPath "/tmp/com.brokenzipper.TheCheat"
+// this path alone would work, but it *should* go in the user's home directory
+char extern                            TCDefaultListenPath[104];
+
+#define                                        TCMaxSearchResults (100000)
+
+int extern                             TCGlobalDocumentCount;
+int extern                             TCGlobalAlternateBroadcastNameCount;
+char extern                            TCGlobalListening;
+
+char extern                            TCGlobalPlaySounds;
+char extern                            TCGlobalWindowsOnTop;
+char extern                            TCGlobalAllowRemote;
+int extern                             TCGlobalListenPort;
+#define                                        TCGlobalBroadcastName ([[NSUserDefaults standardUserDefaults] objectForKey:TCBroadcastNamePref])
+
+NSString extern                        *TCPlaySoundsPref;
+NSString extern                        *TCWindowsOnTopPref;
+NSString extern                        *TCAllowRemotePref;
+NSString extern                        *TCListenPortPref;
+NSString extern                        *TCBroadcastNamePref;
+
+#endif
+
diff --git a/cheat_globals.m b/cheat_globals.m
new file mode 100644 (file)
index 0000000..7c04b96
--- /dev/null
@@ -0,0 +1,28 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      cheat_globals.m
+// Created:   Fri Sep 19 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#include "cheat_globals.h"
+
+char                                   TCDefaultListenPath[104] = "/.thecheat_socket";
+
+int                                            TCGlobalDocumentCount = 1;
+int                                            TCGlobalAlternateBroadcastNameCount = 2;
+char                                   TCGlobalListening = NO;
+
+char                                   TCGlobalPlaySounds = YES;
+char                                   TCGlobalWindowsOnTop = NO;
+char                                   TCGlobalAllowRemote = NO;
+int                                            TCGlobalListenPort = TCDefaultListenPort;
+
+NSString                               *TCPlaySoundsPref = @"TCPlaySoundsPref";
+NSString                               *TCWindowsOnTopPref = @"TCWindowsOnTopPref";
+NSString                               *TCAllowRemotePref = @"TCAllowRemotePref";
+NSString                               *TCListenPortPref = @"TCListenPortPref";
+NSString                               *TCBroadcastNamePref = @"TCBroadcastNamePref";
\ No newline at end of file
diff --git a/cheat_net.h b/cheat_net.h
new file mode 100644 (file)
index 0000000..1f82d2e
--- /dev/null
@@ -0,0 +1,49 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      cheat_net.h
+// Created:   Mon Sep 08 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#ifndef _cheat_net_H
+#define _cheat_net_H
+
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+
+// macros
+
+#define COPY_TO_BUFFER( to, from, size )       memcpy( to, from, size ), to += size;
+#define COPY_FROM_BUFFER( to, from, size )     memcpy( to, from, size ), from += size;
+
+
+struct tagPacketHeader
+{
+       u_int32_t               checksum;
+       u_int32_t               function;
+       u_int32_t               size;
+};
+
+typedef struct tagPacketHeader PacketHeader;
+
+
+u_int32_t RandomChecksum();
+char VerifyChecksum( u_int32_t checksum );
+int CountBits( u_int8_t byte );
+
+int SendBuffer( int socket, char const *buffer, int *length );
+int ReadBuffer( int socket, char *buffer, int length );
+
+
+#endif
+
diff --git a/cheat_net.m b/cheat_net.m
new file mode 100644 (file)
index 0000000..be27b7c
--- /dev/null
@@ -0,0 +1,113 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      cheat_net.m
+// Created:   Mon Sep 08 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#include "cheat_net.h"
+
+
+u_int32_t RandomChecksum()
+{
+       u_int8_t                byte1, byte2, byte3, byte4;
+       char                    *ptr;
+       
+       u_int32_t               checksum;
+       long                    randomValue = random();
+
+       byte1 = randomValue & 0xFF;
+       byte2 = (randomValue >> 8) & 0xFF;
+       byte3 = (randomValue >> 16) & 0xFF;
+       byte4 = CountBits( byte1 ) + CountBits( byte2 ) + CountBits( byte3 );
+       
+       ptr = (char *)(&checksum);
+
+       COPY_TO_BUFFER( ptr, &byte1, sizeof(byte1) );
+       COPY_TO_BUFFER( ptr, &byte2, sizeof(byte2) );
+       COPY_TO_BUFFER( ptr, &byte3, sizeof(byte3) );
+       COPY_TO_BUFFER( ptr, &byte4, sizeof(byte4) );
+
+       return checksum;
+}
+
+char VerifyChecksum( u_int32_t checksum )
+{
+       u_int8_t                byte1, byte2, byte3, byte4;
+       char                    *ptr = (char *)(&checksum);
+
+       COPY_FROM_BUFFER( &byte1, ptr, sizeof(byte1) );
+       COPY_FROM_BUFFER( &byte2, ptr, sizeof(byte2) );
+       COPY_FROM_BUFFER( &byte3, ptr, sizeof(byte3) );
+       COPY_FROM_BUFFER( &byte4, ptr, sizeof(byte4) );
+
+       if ( (CountBits( byte1 ) + CountBits( byte2 ) + CountBits( byte3 )) == byte4 )
+       {
+               return 1;
+       }
+
+       NSLog( @"checksum failed" );
+
+       return 0;
+}
+
+int CountBits( u_int8_t byte )
+{
+       int                             count = 0;
+       int                             i;
+
+       for ( i = 0; i < 8; i++ )
+       {
+               count += byte & 1;
+
+               byte >>= 1;
+       }
+
+       return count;
+}
+
+
+int SendBuffer( int sockfd, char const *buffer, int *length )
+{
+       int                             bytesSent = 0;
+       int                             bytesLeft = *length;
+       int                             n = 0;
+
+       while( bytesSent < *length )
+       {
+               if ( (n = send( sockfd, buffer+bytesSent, bytesLeft, 0 )) == -1 )
+               {
+                       break;
+               }
+
+               bytesSent += n;
+               bytesLeft -= n;
+       }
+
+       *length = bytesSent;
+
+       return (n == -1)? -1:0;
+}
+
+int ReadBuffer( int sockfd, char *buffer, int length )
+{
+       int                             bytesRead = 0;
+       int                             bytesLeft = length;
+       int                             n;
+
+       while( bytesRead < length )
+       {
+               if ( (n = recv( sockfd, buffer+bytesRead, bytesLeft, 0 )) == -1 || n == 0 )
+               {
+                       return (bytesRead > 0)? bytesRead:n;
+               }
+
+               bytesRead += n;
+               bytesLeft -= n;
+       }
+
+       return bytesRead;
+}
\ No newline at end of file
diff --git a/cheat_shared.h b/cheat_shared.h
new file mode 100644 (file)
index 0000000..43f9dd7
--- /dev/null
@@ -0,0 +1,19 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      cheat_shared.h
+// Created:   Mon Nov 24 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#ifndef _cheat_shared_H
+#define _cheat_shared_H
+
+
+void LaunchWebsite();
+void LaunchEmail();
+
+
+#endif
\ No newline at end of file
diff --git a/cheat_shared.m b/cheat_shared.m
new file mode 100644 (file)
index 0000000..1a7b7a5
--- /dev/null
@@ -0,0 +1,22 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      cheat_shared.m
+// Created:   Mon Nov 24 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#import "cheat_shared.h"
+
+
+void LaunchWebsite()
+{
+       [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://www.brokenzipper.com/"]];
+}
+
+void LaunchEmail()
+{
+       [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"mailto:chaz@brokenzipper.com?subject=The%20Cheat%20Feedback"]];
+}
\ No newline at end of file
diff --git a/cheat_types.h b/cheat_types.h
new file mode 100644 (file)
index 0000000..92a5622
--- /dev/null
@@ -0,0 +1,40 @@
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Project:   The Cheat
+//
+// File:      cheat_types.h
+// Created:   Thu Sep 11 2003
+//
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#ifndef _cheat_types_H
+#define _cheat_types_H
+
+
+enum tagTCtype
+{
+       TYPE_INTEGER, TYPE_STRING, TYPE_DECIMAL, TYPE_UNKNOWN
+};
+typedef int                    TCtype;
+
+enum tagTCsize
+{
+       SIZE_8_BIT, SIZE_16_BIT, SIZE_32_BIT, SIZE_64_BIT
+};
+typedef int                    TCsize;
+
+enum tagTCstatus
+{
+       STATUS_DISCONNECTED, STATUS_CONNECTED, STATUS_CHEATING, STATUS_SEARCHING, STATUS_CHANGING, STATUS_CHANGING_LATER, STATUS_CHANGING_CONTINUOUSLY, STATUS_UNDOING, STATUS_REDOING
+};
+typedef int                    TCstatus;
+// NOTE: STATUS_CHANGING_LATER should not be used, as this future is not implemented.
+
+
+typedef long unsigned          TCaddress;
+#define                                                TCAddressSize sizeof(TCaddress)
+
+
+#endif
+
diff --git a/icon_b.icns b/icon_b.icns
new file mode 100644 (file)
index 0000000..ad21b66
Binary files /dev/null and b/icon_b.icns differ
diff --git a/main.m b/main.m
index 0fcbed4cbc2c6fc5784de57da1aab08ba1261565..c990b8c8382529e5ae69a8fe4dabf2a871da30e7 100644 (file)
--- a/main.m
+++ b/main.m
@@ -1,17 +1,22 @@
 
 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Project:   «PROJECTNAME»
+// Project:   The Cheat
 //
-// File:      «FILENAME»
-// Created:   «DATE»
+// File:      main.m
+// Created:   Sun Sep 07 2003
 //
-// Copyright: «YEAR» «FULLUSERNAME».  All rights reserved.
+// Copyright: 2003 Chaz McGarvey.  All rights reserved.
 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 #import <Cocoa/Cocoa.h>
 
+#include <stdlib.h>
+#include <time.h>
+
 
 int main( int argc, const char *argv[] )
 {
-       return NSApplicationMain(argc, argv);
+       srandom( time(0) );
+       
+    return NSApplicationMain( argc, argv );
 }
\ No newline at end of file
This page took 0.497707 seconds and 4 git commands to generate.