From: Charles McGarvey Date: Wed, 12 Nov 2003 19:00:00 +0000 (-0700) Subject: The Cheat 1.0b3 X-Git-Tag: v1.0~2 X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fthecheat;a=commitdiff_plain;h=42cf7bbe564d70233a0d73baee613f209eb00eb6 The Cheat 1.0b3 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. --- diff --git a/AboutBoxController.h b/AboutBoxController.h new file mode 100644 index 0000000..2b9901d --- /dev/null +++ b/AboutBoxController.h @@ -0,0 +1,22 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: AboutBoxController.h +// Created: Mon Nov 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + + +@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 index 0000000..68e2c6d --- /dev/null +++ b/AboutBoxController.m @@ -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 diff --git a/AppController.h b/AppController.h index 7917887..fb222b3 100644 --- a/AppController.h +++ b/AppController.h @@ -10,60 +10,47 @@ #import +#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 diff --git a/AppController.m b/AppController.m index d5de59e..c8750c0 100644 --- a/AppController.m +++ b/AppController.m @@ -10,902 +10,389 @@ #import "AppController.h" -#include -#include +#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 index 0000000..553e238 --- /dev/null +++ b/CheatClient.h @@ -0,0 +1,32 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: CheatClient.h +// Created: Mon Sep 22 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + +#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 index 0000000..a7df9fa --- /dev/null +++ b/CheatClient.m @@ -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 index 0000000..78b4bed --- /dev/null +++ b/CheatListener.h @@ -0,0 +1,40 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: CheatListener.h +// Created: Wed Sep 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + +#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 index 0000000..40c4eb0 --- /dev/null +++ b/CheatListener.m @@ -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 + + +@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 index 0000000..e313dbf --- /dev/null +++ b/CheatServer.h @@ -0,0 +1,104 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: CheatServer.h +// Created: Sun Sep 07 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + +#import "ServerDelegate.h" + +#include +#include + +#include + +#include +#include +#include +#include + +#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 index 0000000..2a8ed8c --- /dev/null +++ b/CheatServer.m @@ -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 +#include + + +// 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 index 0000000..6c5dc79 --- /dev/null +++ b/ClientDelegate.h @@ -0,0 +1,20 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: ClientDelegate.h +// Created: Wed Sep 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + + +@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 index 0000000..c9c6005 --- /dev/null +++ b/English.lproj/AboutBox.nib/classes.nib @@ -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 index 0000000..f0d37b7 --- /dev/null +++ b/English.lproj/AboutBox.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 85 112 356 241 0 0 1280 1002 + IBFramework Version + 349.0 + IBOpenObjects + + 5 + + IBSystem Version + 7C107 + + diff --git a/English.lproj/AboutBox.nib/keyedobjects.nib b/English.lproj/AboutBox.nib/keyedobjects.nib new file mode 100644 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 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 index 0000000..c9c6005 --- /dev/null +++ b/English.lproj/AboutBox~.nib/classes.nib @@ -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 index 0000000..f0d37b7 --- /dev/null +++ b/English.lproj/AboutBox~.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 85 112 356 241 0 0 1280 1002 + IBFramework Version + 349.0 + IBOpenObjects + + 5 + + IBSystem Version + 7C107 + + diff --git a/English.lproj/AboutBox~.nib/keyedobjects.nib b/English.lproj/AboutBox~.nib/keyedobjects.nib new file mode 100644 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 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 index 0000000..ff10d54 --- /dev/null +++ b/English.lproj/Credits.rtf @@ -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 diff --git a/English.lproj/InfoPlist.strings b/English.lproj/InfoPlist.strings index 623ed62..613f8a5 100644 Binary files a/English.lproj/InfoPlist.strings and b/English.lproj/InfoPlist.strings differ diff --git a/English.lproj/MainMenu.nib/classes.nib b/English.lproj/MainMenu.nib/classes.nib index e08ceca..ad916b0 100644 --- a/English.lproj/MainMenu.nib/classes.nib +++ b/English.lproj/MainMenu.nib/classes.nib @@ -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 diff --git a/English.lproj/MainMenu.nib/info.nib b/English.lproj/MainMenu.nib/info.nib index 6ea9806..6ea4596 100644 --- a/English.lproj/MainMenu.nib/info.nib +++ b/English.lproj/MainMenu.nib/info.nib @@ -3,21 +3,19 @@ IBDocumentLocation - 88 78 356 240 0 0 1280 1002 + 485 133 356 240 0 0 1280 1002 IBEditorPositions 29 - 122 595 201 44 0 0 1280 1002 + 87 519 377 44 0 0 1280 1002 IBFramework Version - 291.0 + 349.0 IBOpenObjects 29 - 348 - 410 IBSystem Version - 6L60 + 7C107 diff --git a/English.lproj/MainMenu.nib/keyedobjects.nib b/English.lproj/MainMenu.nib/keyedobjects.nib index 3d050c8..9dba46f 100644 Binary files a/English.lproj/MainMenu.nib/keyedobjects.nib and b/English.lproj/MainMenu.nib/keyedobjects.nib differ diff --git a/English.lproj/MainMenu.nib/objects.nib b/English.lproj/MainMenu.nib/objects.nib index 27f331f..f524ff7 100644 Binary files a/English.lproj/MainMenu.nib/objects.nib and b/English.lproj/MainMenu.nib/objects.nib differ diff --git a/English.lproj/MainMenu~.nib/classes.nib b/English.lproj/MainMenu~.nib/classes.nib index e08ceca..bfbeb7d 100644 --- a/English.lproj/MainMenu~.nib/classes.nib +++ b/English.lproj/MainMenu~.nib/classes.nib @@ -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 diff --git a/English.lproj/MainMenu~.nib/info.nib b/English.lproj/MainMenu~.nib/info.nib index 6ea9806..6ea4596 100644 --- a/English.lproj/MainMenu~.nib/info.nib +++ b/English.lproj/MainMenu~.nib/info.nib @@ -3,21 +3,19 @@ IBDocumentLocation - 88 78 356 240 0 0 1280 1002 + 485 133 356 240 0 0 1280 1002 IBEditorPositions 29 - 122 595 201 44 0 0 1280 1002 + 87 519 377 44 0 0 1280 1002 IBFramework Version - 291.0 + 349.0 IBOpenObjects 29 - 348 - 410 IBSystem Version - 6L60 + 7C107 diff --git a/English.lproj/MainMenu~.nib/keyedobjects.nib b/English.lproj/MainMenu~.nib/keyedobjects.nib index 026ec00..9dba46f 100644 Binary files a/English.lproj/MainMenu~.nib/keyedobjects.nib and b/English.lproj/MainMenu~.nib/keyedobjects.nib differ diff --git a/English.lproj/MainMenu~.nib/objects.nib b/English.lproj/MainMenu~.nib/objects.nib index 5b9086e..f524ff7 100644 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 index 0000000..20e9ef1 --- /dev/null +++ b/English.lproj/MyDocument.nib/classes.nib @@ -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 index 0000000..defb22a --- /dev/null +++ b/English.lproj/MyDocument.nib/info.nib @@ -0,0 +1,37 @@ + + + + + IBDocumentLocation + 555 97 356 406 0 0 1280 1002 + IBEditorPositions + + 143 + 402 411 134 106 0 0 1280 1002 + 192 + 272 343 101 49 0 0 1280 1002 + 207 + 376 382 134 48 0 0 1280 1002 + 400 + 612 529 69 87 0 0 1280 1002 + 405 + 509 334 77 68 0 0 1280 1002 + 410 + 509 326 77 49 0 0 1280 1002 + + IBFramework Version + 349.0 + IBOldestOS + 2 + IBOpenObjects + + 610 + 285 + 192 + 143 + 400 + + IBSystem Version + 7C107 + + diff --git a/English.lproj/MyDocument.nib/keyedobjects.nib b/English.lproj/MyDocument.nib/keyedobjects.nib new file mode 100644 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 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 index 0000000..9b031d9 --- /dev/null +++ b/English.lproj/MyDocument~.nib/classes.nib @@ -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 index 0000000..288842a --- /dev/null +++ b/English.lproj/MyDocument~.nib/info.nib @@ -0,0 +1,37 @@ + + + + + IBDocumentLocation + 555 97 356 406 0 0 1280 1002 + IBEditorPositions + + 143 + 402 411 134 106 0 0 1280 1002 + 192 + 272 343 101 49 0 0 1280 1002 + 207 + 376 382 134 48 0 0 1280 1002 + 400 + 612 529 69 87 0 0 1280 1002 + 405 + 509 334 77 68 0 0 1280 1002 + 410 + 509 326 77 49 0 0 1280 1002 + + IBFramework Version + 349.0 + IBOldestOS + 2 + IBOpenObjects + + 143 + 610 + 192 + 400 + 285 + + IBSystem Version + 7C107 + + diff --git a/English.lproj/MyDocument~.nib/keyedobjects.nib b/English.lproj/MyDocument~.nib/keyedobjects.nib new file mode 100644 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 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 index 0000000..35f6f8c --- /dev/null +++ b/English.lproj/NetTraffic.nib/classes.nib @@ -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 index 0000000..95a67e7 --- /dev/null +++ b/English.lproj/NetTraffic.nib/info.nib @@ -0,0 +1,18 @@ + + + + + IBDocumentLocation + 512 126 356 240 0 0 1280 1002 + IBFramework Version + 349.0 + IBOldestOS + 1 + IBOpenObjects + + 26 + + IBSystem Version + 7C107 + + diff --git a/English.lproj/NetTraffic.nib/keyedobjects.nib b/English.lproj/NetTraffic.nib/keyedobjects.nib new file mode 100644 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 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 index 0000000..35f6f8c --- /dev/null +++ b/English.lproj/NetTraffic~.nib/classes.nib @@ -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 index 0000000..95a67e7 --- /dev/null +++ b/English.lproj/NetTraffic~.nib/info.nib @@ -0,0 +1,18 @@ + + + + + IBDocumentLocation + 512 126 356 240 0 0 1280 1002 + IBFramework Version + 349.0 + IBOldestOS + 1 + IBOpenObjects + + 26 + + IBSystem Version + 7C107 + + diff --git a/English.lproj/NetTraffic~.nib/keyedobjects.nib b/English.lproj/NetTraffic~.nib/keyedobjects.nib new file mode 100644 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 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 index 0000000..d0ff1c9 --- /dev/null +++ b/English.lproj/Preferences.nib/classes.nib @@ -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 index 0000000..e8caea5 --- /dev/null +++ b/English.lproj/Preferences.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 531 250 356 240 0 0 1280 1002 + IBFramework Version + 349.0 + IBOpenObjects + + 9 + + IBSystem Version + 7C107 + + diff --git a/English.lproj/Preferences.nib/keyedobjects.nib b/English.lproj/Preferences.nib/keyedobjects.nib new file mode 100644 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 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 index 0000000..d0ff1c9 --- /dev/null +++ b/English.lproj/Preferences~.nib/classes.nib @@ -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 index 0000000..e8caea5 --- /dev/null +++ b/English.lproj/Preferences~.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 531 250 356 240 0 0 1280 1002 + IBFramework Version + 349.0 + IBOpenObjects + + 9 + + IBSystem Version + 7C107 + + diff --git a/English.lproj/Preferences~.nib/keyedobjects.nib b/English.lproj/Preferences~.nib/keyedobjects.nib new file mode 100644 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 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 index 0000000..0d9ad20 --- /dev/null +++ b/Info-The_Cheat__Upgraded_.plist @@ -0,0 +1,43 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleDocumentTypes + + + CFBundleTypeName + The Cheat + CFBundleTypeRole + Editor + NSDocumentClass + MyDocument + + + CFBundleExecutable + The Cheat + CFBundleGetInfoString + The Cheat 1.0 + CFBundleIconFile + icon_b.icns + CFBundleIdentifier + com.brokenzipper.TheCheat + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + The Cheat + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ThCh + CFBundleVersion + 1B03 + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/ListenerDelegate.h b/ListenerDelegate.h new file mode 100644 index 0000000..2253e66 --- /dev/null +++ b/ListenerDelegate.h @@ -0,0 +1,22 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: ListenerDelegate.h +// Created: Wed Sep 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + + +@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 index 0000000..4f9f3a1 --- /dev/null +++ b/MenuExtras.h @@ -0,0 +1,25 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: MenuExtras.h +// Created: Wed Sep 17 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + + +@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 index 0000000..d8af851 --- /dev/null +++ b/MenuExtras.m @@ -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 index 0000000..1e928e0 --- /dev/null +++ b/MyDocument.h @@ -0,0 +1,198 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: MyDocument.h +// Created: Sun Sep 07 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + +#include + +#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 index 0000000..a4733cc --- /dev/null +++ b/MyDocument.m @@ -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 index 0000000..092ffaf --- /dev/null +++ b/NetTrafficController.h @@ -0,0 +1,45 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: NetTrafficController.h +// Created: Wed Sep 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + +#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 index 0000000..5649110 --- /dev/null +++ b/NetTrafficController.m @@ -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 index 0000000..2cd3d9c --- /dev/null +++ b/NetTrafficControlling.h @@ -0,0 +1,21 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: NetTrafficControlling.h +// Created: Wed Sep 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + + +@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 index 0000000..681c5c8 --- /dev/null +++ b/PreferenceController.h @@ -0,0 +1,41 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: PreferenceController.h +// Created: Wed Sep 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + +#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 index 0000000..fe178fb --- /dev/null +++ b/PreferenceController.m @@ -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 index 0000000..1565412 --- /dev/null +++ b/PreferenceControlling.h @@ -0,0 +1,20 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: PreferenceControlling.h +// Created: Wed Sep 24 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + + +@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 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 index 0000000..b92a086 --- /dev/null +++ b/Read Me.rtf @@ -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 index 98588ea..0000000 --- a/Read Me.txt +++ /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 index 0000000..364470a --- /dev/null +++ b/SearchResults.h @@ -0,0 +1,33 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: SearchResults.h +// Created: Sat Oct 04 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + +#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 index 0000000..8e15180 --- /dev/null +++ b/SearchResults.m @@ -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 index 0000000..f9ee572 --- /dev/null +++ b/ServerDelegate.h @@ -0,0 +1,29 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: ServerDelegate.h +// Created: Thu Sep 25 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + +#include + +@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 index 0000000..94e7b2d --- /dev/null +++ b/ServerDelegate.m @@ -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 index 0000000..e0342ad --- /dev/null +++ b/ServerHolder.h @@ -0,0 +1,42 @@ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Project: The Cheat +// +// File: ServerHolder.h +// Created: Sun Sep 28 2003 +// +// Copyright: 2003 Chaz McGarvey. All rights reserved. +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#import + + +@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 index 0000000..d6f7290 --- /dev/null +++ b/ServerHolder.m @@ -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 diff --git a/The Cheat.pbproj/chaz.pbxuser b/The Cheat.pbproj/chaz.pbxuser index 60ee588..3aaa283 100644 --- a/The Cheat.pbproj/chaz.pbxuser +++ b/The Cheat.pbproj/chaz.pbxuser @@ -1,235 +1,784 @@ // !$*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 = ""; - }; - }, - { - 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 = ""; - }; - }, - { - 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 = ""; - }; - }, - { - 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 = ""; - }; - }, - { - 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 = ""; - }; - }, - ); - "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, @@ -239,76 +788,545 @@ 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, @@ -318,55 +1336,50 @@ 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, @@ -377,104 +1390,8042 @@ 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 = ""; + }; + 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 = ""; + }; + 6E51A96C0573258500506538 = { + isa = PBXFileReference; + name = math.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/architecture/ppc/math.h; + refType = 0; + sourceTree = ""; + }; + 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 = ""; + 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 = ""; + }; + 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 = ""; + }; + 6E5EC3C005633214001E3A3E = { + isa = PBXFileReference; + name = un.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/sys/un.h; + refType = 0; + sourceTree = ""; + }; + 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 = ""; + }; + 6E612717056B3091006177EC = { + isa = PBXFileReference; + name = cpu.h; + path = /usr/include/ppc/cpu.h; + refType = 0; + sourceTree = ""; + }; + 6E612718056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = fat.h; + path = "/usr/include/mach-o/fat.h"; + refType = 0; + sourceTree = ""; + }; + 6E612719056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = task.h; + path = /usr/include/mach/ppc/task.h; + refType = 0; + sourceTree = ""; + }; + 6E61271A056B3091006177EC = { + isa = PBXFileReference; + name = malloc.h; + path = /usr/include/malloc/malloc.h; + refType = 0; + sourceTree = ""; + }; + 6E61271B056B3091006177EC = { + isa = PBXFileReference; + name = vm_info.h; + path = /usr/include/mach_debug/vm_info.h; + refType = 0; + sourceTree = ""; + }; + 6E61271C056B3091006177EC = { + isa = PBXFileReference; + name = bootstrap.h; + path = /usr/include/mach/bootstrap.h; + refType = 0; + sourceTree = ""; + }; + 6E61271D056B3091006177EC = { + isa = PBXFileReference; + name = cpu.h; + path = /usr/include/machine/cpu.h; + refType = 0; + sourceTree = ""; + }; + 6E61271E056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = mach_host.h; + path = /usr/include/mach/mach_host.h; + refType = 0; + sourceTree = ""; + }; + 6E61271F056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = malloc.h; + path = /usr/include/malloc/malloc.h; + refType = 0; + sourceTree = ""; + }; + 6E612720056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = clock_reply.h; + path = /usr/include/mach/clock_reply.h; + refType = 0; + sourceTree = ""; + }; + 6E612721056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = vm_info.h; + path = /usr/include/mach_debug/vm_info.h; + refType = 0; + sourceTree = ""; + }; + 6E612722056B3091006177EC = { + isa = PBXFileReference; + name = reloc.h; + path = "/usr/include/mach-o/reloc.h"; + refType = 0; + sourceTree = ""; + }; + 6E612723056B3091006177EC = { + isa = PBXFileReference; + name = asm_help.h; + path = /usr/include/architecture/ppc/asm_help.h; + refType = 0; + sourceTree = ""; + }; + 6E612724056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = "objc-runtime.h"; + path = "/usr/include/objc/objc-runtime.h"; + refType = 0; + sourceTree = ""; + }; + 6E612725056B3091006177EC = { + isa = PBXFileReference; + name = vm_map.h; + path = /usr/include/mach/vm_map.h; + refType = 0; + sourceTree = ""; + }; + 6E612726056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = libc.h; + path = /usr/include/libc.h; + refType = 0; + sourceTree = ""; + }; + 6E612727056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = vm_map.h; + path = /usr/include/mach/vm_map.h; + refType = 0; + sourceTree = ""; + }; + 6E612728056B3091006177EC = { + isa = PBXFileReference; + name = ipc_info.h; + path = /usr/include/mach_debug/ipc_info.h; + refType = 0; + sourceTree = ""; + }; + 6E612729056B3091006177EC = { + isa = PBXFileReference; + name = http_request.h; + path = /usr/include/httpd/http_request.h; + refType = 0; + sourceTree = ""; + }; + 6E61272A056B3091006177EC = { + isa = PBXFileReference; + name = time_value.h; + path = /usr/include/mach/time_value.h; + refType = 0; + sourceTree = ""; + }; + 6E61272B056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = cpu.h; + path = /usr/include/ppc/cpu.h; + refType = 0; + sourceTree = ""; + }; + 6E61272C056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = asm_help.h; + path = /usr/include/architecture/ppc/asm_help.h; + refType = 0; + sourceTree = ""; + }; + 6E61272D056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = time_value.h; + path = /usr/include/mach/time_value.h; + refType = 0; + sourceTree = ""; + }; + 6E61272E056B3091006177EC = { + isa = PBXFileReference; + name = mach_debug.h; + path = /usr/include/mach_debug/mach_debug.h; + refType = 0; + sourceTree = ""; + }; + 6E61272F056B3091006177EC = { + isa = PBXFileReference; + name = task.h; + path = /usr/include/mach/ppc/task.h; + refType = 0; + sourceTree = ""; + }; + 6E612730056B3091006177EC = { + isa = PBXFileReference; + name = pthread.h; + path = /usr/include/pthread.h; + refType = 0; + sourceTree = ""; + }; + 6E612731056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = OSTypes.h; + path = /usr/include/libkern/OSTypes.h; + refType = 0; + sourceTree = ""; + }; + 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 = ""; + }; + 6E612733056B3091006177EC = { + isa = PBXFileReference; + name = mach_debug.h; + path = /usr/include/mach_debug/mach_debug.h; + refType = 0; + sourceTree = ""; + }; + 6E612734056B3091006177EC = { + isa = PBXFileReference; + name = clock_reply.h; + path = /usr/include/mach/clock_reply.h; + refType = 0; + sourceTree = ""; + }; + 6E612735056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = mach_debug.h; + path = /usr/include/mach_debug/mach_debug.h; + refType = 0; + sourceTree = ""; + }; + 6E612736056B3091006177EC = { + isa = PBXFileReference; + name = vm_types.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_types.h; + refType = 0; + sourceTree = ""; + }; + 6E612737056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = reloc.h; + path = "/usr/include/mach-o/reloc.h"; + refType = 0; + sourceTree = ""; + }; + 6E612738056B3091006177EC = { + isa = PBXFileReference; + name = page_info.h; + path = /usr/include/mach_debug/page_info.h; + refType = 0; + sourceTree = ""; + }; + 6E612739056B3091006177EC = { + isa = PBXFileReference; + name = fat.h; + path = "/usr/include/mach-o/fat.h"; + refType = 0; + sourceTree = ""; + }; + 6E61273A056B3091006177EC = { + isa = PBXFileReference; + name = libc.h; + path = /usr/include/libc.h; + refType = 0; + sourceTree = ""; + }; + 6E61273B056B3091006177EC = { + isa = PBXFileReference; + name = vm_types.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_types.h; + refType = 0; + sourceTree = ""; + }; + 6E61273C056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = ipc_info.h; + path = /usr/include/mach_debug/ipc_info.h; + refType = 0; + sourceTree = ""; + }; + 6E61273D056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = bootstrap.h; + path = /usr/include/mach/bootstrap.h; + refType = 0; + sourceTree = ""; + }; + 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 = ""; + }; + 6E61273F056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = page_info.h; + path = /usr/include/mach_debug/page_info.h; + refType = 0; + sourceTree = ""; + }; + 6E612740056B3091006177EC = { + isa = PBXFileReference; + name = vm_task.h; + path = /usr/include/mach/vm_task.h; + refType = 0; + sourceTree = ""; + }; + 6E612741056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = pthread.h; + path = /usr/include/pthread.h; + refType = 0; + sourceTree = ""; + }; + 6E612742056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = vm_task.h; + path = /usr/include/mach/vm_task.h; + refType = 0; + sourceTree = ""; + }; + 6E612743056B3091006177EC = { + isa = PBXFileReference; + name = mach_debug_types.h; + path = /usr/include/mach_debug/mach_debug_types.h; + refType = 0; + sourceTree = ""; + }; + 6E612744056B3091006177EC = { + isa = PBXFileReference; + name = OSTypes.h; + path = /usr/include/libkern/OSTypes.h; + refType = 0; + sourceTree = ""; + }; + 6E612745056B3091006177EC = { + isa = PBXFileReference; + name = mach_types.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/mach_types.h; + refType = 0; + sourceTree = ""; + }; + 6E612746056B3091006177EC = { + isa = PBXFileReference; + name = "objc-runtime.h"; + path = "/usr/include/objc/objc-runtime.h"; + refType = 0; + sourceTree = ""; + }; + 6E612747056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = cpu.h; + path = /usr/include/machine/cpu.h; + refType = 0; + sourceTree = ""; + }; + 6E612748056B3091006177EC = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = http_request.h; + path = /usr/include/httpd/http_request.h; + refType = 0; + sourceTree = ""; + }; + 6E612749056B3091006177EC = { + isa = PBXFileReference; + name = mach_host.h; + path = /usr/include/mach/mach_host.h; + refType = 0; + sourceTree = ""; + }; + 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 = ""; + }; + 6E81664C0559E7C000377CF7 = { + isa = PBXFileReference; + name = math.h; + path = /usr/include/architecture/ppc/math.h; + refType = 0; + sourceTree = ""; + }; + 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 = ""; + }; + 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 = ""; + }; + 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 = ""; + }; + 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 = ""; + }; + 6E84B92B0558B3480001B5EB = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = NSObject.h; + path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSObject.h; + refType = 0; + sourceTree = ""; + }; + 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 = ""; + }; + 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 = ""; + }; + 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 = ""; + }; + 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 = ""; + }; + 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 = ""; + }; + 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 = ""; + }; + 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 = ""; + }; + 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 = ""; + }; + 6EE004E00560B42800F8A5B1 = { + isa = PBXFileReference; + name = vm_map.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_map.h; + refType = 0; + sourceTree = ""; + }; + 6EE004E10560B42800F8A5B1 = { + isa = PBXFileReference; + name = AppController.m; + path = "/Users/chaz/Projects/The Cheat 1.0b1/AppController.m"; + refType = 0; + sourceTree = ""; + }; + 6EE004E20560B42800F8A5B1 = { + isa = PBXFileReference; + name = vm_region.h; + path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_region.h; + refType = 0; + sourceTree = ""; + }; + 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 = ""; + }; + 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 = ""; + }; + 6EF8EC7C055A1C39008BBE46 = { + expectedFileType = sourcecode.c.h; + isa = PBXFileReference; + name = Niobium_Prefix.pch; + path = /Users/chaz/Projects/Niobium/Niobium_Prefix.pch; + refType = 0; + sourceTree = ""; + }; + 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}}"; + }; }; } diff --git a/The Cheat.pbproj/project.pbxproj b/The Cheat.pbproj/project.pbxproj index bd26a92..a2ade71 100644 --- a/The Cheat.pbproj/project.pbxproj +++ b/The Cheat.pbproj/project.pbxproj @@ -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 = ""; + 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 = ""; }; - 089C165DFE840E0CC02AAC07 = { + 089C1660FE840EACC02AAC07 = { + expectedFileType = text.plist.strings; fileEncoding = 10; isa = PBXFileReference; - lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; refType = 4; sourceTree = ""; }; - 089C165EFE840E0CC02AAC07 = { - fileRef = 089C165CFE840E0CC02AAC07; + 089C1661FE840EACC02AAC07 = { + fileRef = 089C165FFE840EACC02AAC07; isa = PBXBuildFile; settings = { }; @@ -55,36 +57,36 @@ //102 //103 //104 - 1058C7A0FEA54F0111CA2CBB = { + 1058C7A6FEA54F5311CA2CBB = { children = ( - 1058C7A1FEA54F0111CA2CBB, + 1058C7A7FEA54F5311CA2CBB, ); isa = PBXGroup; name = "Linked Frameworks"; refType = 4; sourceTree = ""; }; - 1058C7A1FEA54F0111CA2CBB = { + 1058C7A7FEA54F5311CA2CBB = { + expectedFileType = wrapper.framework; fallbackIsa = PBXFileReference; isa = PBXFrameworkReference; - lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; refType = 0; sourceTree = ""; }; - 1058C7A2FEA54F0111CA2CBB = { + 1058C7A8FEA54F5311CA2CBB = { children = ( - 29B97325FDCFA39411CA2CEA, - 29B97324FDCFA39411CA2CEA, + 2A37F4C5FDCFA73011CA2CEA, + 2A37F4C4FDCFA73011CA2CEA, ); isa = PBXGroup; name = "Other Frameworks"; refType = 4; sourceTree = ""; }; - 1058C7A3FEA54F0111CA2CBB = { - fileRef = 1058C7A1FEA54F0111CA2CBB; + 1058C7A9FEA54F5311CA2CBB = { + fileRef = 1058C7A7FEA54F5311CA2CBB; isa = PBXBuildFile; settings = { }; @@ -99,8 +101,8 @@ //172 //173 //174 - 17587328FF379C6511CA2CBB = { - explicitFileType = wrapper.application; + 1758732AFF379DA111CA2CBB = { + expectedFileType = wrapper.application; fallbackIsa = PBXFileReference; isa = PBXApplicationReference; path = "The Cheat.app"; @@ -117,9 +119,10 @@ //192 //193 //194 - 19C28FACFE9D520D11CA2CBB = { + 19C28FB0FE9D524F11CA2CBB = { children = ( - 17587328FF379C6511CA2CBB, + 1758732AFF379DA111CA2CBB, + 6EF8EC09055A1730008BBE46, ); isa = PBXGroup; name = Products; @@ -131,33 +134,41 @@ //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"; @@ -165,10 +176,48 @@ refType = 4; sourceTree = ""; }; - 29B97315FDCFA39411CA2CEA = { + 2A37F4ABFDCFA73011CA2CEA = { + children = ( + 6E0D40B80522449500A80003, + 6E0D40B90522449500A80003, + 6E4E098F050BB21400A80003, + 6E4E098E050BB21400A80003, + 6E146B11051FA42C00A80003, + 6E146B12051FA42C00A80003, + ); + isa = PBXGroup; + name = "Network Classes"; + path = ""; + refType = 4; + sourceTree = ""; + }; + 2A37F4ACFDCFA73011CA2CEA = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 30; + isa = PBXFileReference; + path = MyDocument.m; + refType = 4; + sourceTree = ""; + }; + 2A37F4AEFDCFA73011CA2CEA = { + expectedFileType = sourcecode.c.h; + fileEncoding = 30; + isa = PBXFileReference; + path = MyDocument.h; + refType = 4; + sourceTree = ""; + }; + 2A37F4AFFDCFA73011CA2CEA = { children = ( - 32CA4F630368D1EE00C91783, - 29B97316FDCFA39411CA2CEA, + 32DBCF750370BD2300C91783, + 2A37F4B0FDCFA73011CA2CEA, + 6E51A986057330B900506538, + 6E51A987057330B900506538, + 6E3F0D01050D4ACC00A80003, + 6E3F0D02050D4ACC00A80003, + 6E71F41B051BCCC600A80003, + 6E71F41C051BCCC600A80003, + 6E0BDF7D0511568D00A80003, ); isa = PBXGroup; name = "Other Sources"; @@ -176,28 +225,35 @@ refType = 4; sourceTree = ""; }; - 29B97316FDCFA39411CA2CEA = { + 2A37F4B0FDCFA73011CA2CEA = { + expectedFileType = sourcecode.c.objc; fileEncoding = 30; isa = PBXFileReference; - lastKnownFileType = sourcecode.c.objc; path = main.m; refType = 4; sourceTree = ""; }; - 29B97317FDCFA39411CA2CEA = { + 2A37F4B4FDCFA73011CA2CEA = { children = ( - 29B97318FDCFA39411CA2CEA, - 089C165CFE840E0CC02AAC07, + 2A37F4B5FDCFA73011CA2CEA, ); - isa = PBXGroup; - name = Resources; + isa = PBXVariantGroup; + name = MyDocument.nib; path = ""; refType = 4; sourceTree = ""; }; - 29B97318FDCFA39411CA2CEA = { + 2A37F4B5FDCFA73011CA2CEA = { + expectedFileType = wrapper.nib; + isa = PBXFileReference; + name = English; + path = English.lproj/MyDocument.nib; + refType = 4; + sourceTree = ""; + }; + 2A37F4B6FDCFA73011CA2CEA = { children = ( - 29B97319FDCFA39411CA2CEA, + 2A37F4B7FDCFA73011CA2CEA, ); isa = PBXVariantGroup; name = MainMenu.nib; @@ -205,18 +261,54 @@ refType = 4; sourceTree = ""; }; - 29B97319FDCFA39411CA2CEA = { + 2A37F4B7FDCFA73011CA2CEA = { + expectedFileType = wrapper.nib; isa = PBXFileReference; - lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; refType = 4; sourceTree = ""; }; - 29B97323FDCFA39411CA2CEA = { + 2A37F4B8FDCFA73011CA2CEA = { + children = ( + 6ED02FE7055758FF007B5502, + 2A37F4B9FDCFA73011CA2CEA, + 2A37F4B6FDCFA73011CA2CEA, + 6E51A97605732B9000506538, + 6E0D40BC052245E700A80003, + 6E0D40B005223D4E00A80003, + 2A37F4B4FDCFA73011CA2CEA, + 089C165FFE840EACC02AAC07, + 6E3309E10575BA9D0093550E, + ); + isa = PBXGroup; + name = Resources; + path = ""; + refType = 4; + sourceTree = ""; + }; + 2A37F4B9FDCFA73011CA2CEA = { + children = ( + 2A37F4BAFDCFA73011CA2CEA, + ); + isa = PBXVariantGroup; + name = Credits.rtf; + path = ""; + refType = 4; + sourceTree = ""; + }; + 2A37F4BAFDCFA73011CA2CEA = { + expectedFileType = text.rtf; + isa = PBXFileReference; + name = English; + path = English.lproj/Credits.rtf; + refType = 4; + sourceTree = ""; + }; + 2A37F4C3FDCFA73011CA2CEA = { children = ( - 1058C7A0FEA54F0111CA2CBB, - 1058C7A2FEA54F0111CA2CBB, + 1058C7A6FEA54F5311CA2CBB, + 1058C7A8FEA54F5311CA2CBB, ); isa = PBXGroup; name = Frameworks; @@ -224,36 +316,39 @@ refType = 4; sourceTree = ""; }; - 29B97324FDCFA39411CA2CEA = { + 2A37F4C4FDCFA73011CA2CEA = { + expectedFileType = wrapper.framework; fallbackIsa = PBXFileReference; isa = PBXFrameworkReference; - lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; refType = 0; sourceTree = ""; }; - 29B97325FDCFA39411CA2CEA = { + 2A37F4C5FDCFA73011CA2CEA = { + expectedFileType = wrapper.framework; fallbackIsa = PBXFileReference; isa = PBXFrameworkReference; - lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; refType = 0; sourceTree = ""; }; - 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; @@ -269,19 +364,30 @@ name = "The Cheat"; productInstallPath = "$(HOME)/Applications"; productName = "The Cheat"; - productReference = 17587328FF379C6511CA2CBB; + productReference = 1758732AFF379DA111CA2CBB; productSettingsXML = " CFBundleDevelopmentRegion English + CFBundleDocumentTypes + + + CFBundleTypeName + The Cheat + CFBundleTypeRole + Editor + NSDocumentClass + MyDocument + + CFBundleExecutable The Cheat CFBundleGetInfoString - The Cheat 1.0b1 + The Cheat 1.0 CFBundleIconFile - icon.icns + icon_b.icns CFBundleIdentifier com.brokenzipper.TheCheat CFBundleInfoDictionaryVersion @@ -291,11 +397,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0b1 + 1.0 CFBundleSignature ThCh CFBundleVersion - 1.0b1 + 1B02 NSMainNibFile MainMenu NSPrincipalClass @@ -304,69 +410,122 @@ "; }; - 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 = ""; }; - 32CA4F650368D2AA00C91783 = { - fileRef = 32CA4F630368D1EE00C91783; + 32DBCF760370BD2300C91783 = { + fileRef = 32DBCF750370BD2300C91783; isa = PBXBuildFile; settings = { }; @@ -381,7 +540,7 @@ //4A2 //4A3 //4A4 - 4A9504CCFFE6A4B311CA0CBA = { + 4A9504D0FFE6A4CB11CA0CBA = { buildRules = ( ); buildSettings = { @@ -390,13 +549,14 @@ 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 = { @@ -417,34 +577,1016 @@ //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 = ""; + }; + 6E0BDF7E0511568D00A80003 = { + fileRef = 6E0BDF7D0511568D00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40AC05223CCE00A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = NetTrafficController.h; refType = 4; sourceTree = ""; }; - 6E31BC0F04EB1BEF00A80003 = { + 6E0D40AD05223CCE00A80003 = { + expectedFileType = sourcecode.c.objc; fileEncoding = 4; isa = PBXFileReference; - lastKnownFileType = sourcecode.c.objc; - path = AppController.m; + path = NetTrafficController.m; + refType = 4; + sourceTree = ""; + }; + 6E0D40AE05223CCE00A80003 = { + fileRef = 6E0D40AC05223CCE00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40AF05223CCE00A80003 = { + fileRef = 6E0D40AD05223CCE00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40B005223D4E00A80003 = { + children = ( + 6E0D40B105223D4E00A80003, + ); + isa = PBXVariantGroup; + name = NetTraffic.nib; + path = ""; + refType = 4; + sourceTree = ""; + }; + 6E0D40B105223D4E00A80003 = { + expectedFileType = wrapper.nib; + isa = PBXFileReference; + name = English; + path = English.lproj/NetTraffic.nib; + refType = 4; + sourceTree = ""; + }; + 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 = ""; + }; + 6E0D40B4052243D500A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = PreferenceController.h; + refType = 4; + sourceTree = ""; + }; + 6E0D40B5052243D500A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = PreferenceController.m; + refType = 4; + sourceTree = ""; + }; + 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 = ""; + }; + 6E0D40B90522449500A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = CheatListener.m; + refType = 4; + sourceTree = ""; + }; + 6E0D40BA0522449500A80003 = { + fileRef = 6E0D40B80522449500A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40BB0522449500A80003 = { + fileRef = 6E0D40B90522449500A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40BC052245E700A80003 = { + children = ( + 6E0D40BD052245E700A80003, + ); + isa = PBXVariantGroup; + name = Preferences.nib; + path = ""; + refType = 4; + sourceTree = ""; + }; + 6E0D40BD052245E700A80003 = { + expectedFileType = wrapper.nib; + isa = PBXFileReference; + name = English; + path = English.lproj/Preferences.nib; + refType = 4; + sourceTree = ""; + }; + 6E0D40BE052245E700A80003 = { + fileRef = 6E0D40BC052245E700A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40BF05224F4B00A80003 = { + children = ( + 6E0D40C405225DA100A80003, + 6E0D40C005224FD000A80003, + 6E0D40CA0522815100A80003, + 6EBCEEE60523E23700A80003, + 6E0D40CE0522820D00A80003, + ); + isa = PBXGroup; + name = Protocols; + refType = 4; + sourceTree = ""; + }; + 6E0D40C005224FD000A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = NetTrafficControlling.h; + refType = 4; + sourceTree = ""; + }; + 6E0D40C205224FD000A80003 = { + fileRef = 6E0D40C005224FD000A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40C405225DA100A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = PreferenceControlling.h; + refType = 4; + sourceTree = ""; + }; + 6E0D40C605225DA100A80003 = { + fileRef = 6E0D40C405225DA100A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40CA0522815100A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = ListenerDelegate.h; + refType = 4; + sourceTree = ""; + }; + 6E0D40CC0522815100A80003 = { + fileRef = 6E0D40CA0522815100A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E0D40CE0522820D00A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = ClientDelegate.h; + refType = 4; + sourceTree = ""; + }; + 6E0D40D00522820D00A80003 = { + fileRef = 6E0D40CE0522820D00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6E146B11051FA42C00A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = CheatClient.h; + refType = 4; + sourceTree = ""; + }; + 6E146B12051FA42C00A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = CheatClient.m; + refType = 4; + sourceTree = ""; + }; + 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 = ""; + }; + 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 = ""; + }; + 6E3F0D02050D4ACC00A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = cheat_net.m; + refType = 4; + sourceTree = ""; + }; + 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 = ""; + }; + 6E4E098D050BB21400A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 30; + isa = PBXFileReference; + path = AppController.m; + refType = 4; + sourceTree = ""; + }; + 6E4E098E050BB21400A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 30; + isa = PBXFileReference; + path = CheatServer.m; + refType = 4; + sourceTree = ""; + }; + 6E4E098F050BB21400A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 30; + isa = PBXFileReference; + path = CheatServer.h; + refType = 4; + sourceTree = ""; + }; + 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 = ""; + }; + 6E51A97705732B9000506538 = { + expectedFileType = wrapper.nib; + isa = PBXFileReference; + name = English; + path = English.lproj/AboutBox.nib; + refType = 4; + sourceTree = ""; + }; + 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 = ""; + }; + 6E51A97D0573304C00506538 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = AboutBoxController.m; + refType = 4; + sourceTree = ""; + }; + 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 = ""; + }; + 6E51A987057330B900506538 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = cheat_shared.m; + refType = 4; + sourceTree = ""; + }; + 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 = ""; + }; + 6E71F41C051BCCC600A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = cheat_globals.m; + refType = 4; + sourceTree = ""; + }; + 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 = ""; + }; + 6EAF23080527D7FE00A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = ServerHolder.h; + refType = 4; + sourceTree = ""; + }; + 6EAF23090527D7FE00A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = ServerHolder.m; + refType = 4; + sourceTree = ""; + }; + 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 = ""; + }; + 6EBCEEE80523E23700A80003 = { + fileRef = 6EBCEEE60523E23700A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6ED02FE7055758FF007B5502 = { + expectedFileType = image.icns; + isa = PBXFileReference; + path = icon_b.icns; + refType = 4; + sourceTree = ""; + }; + 6ED02FE8055758FF007B5502 = { + fileRef = 6ED02FE7055758FF007B5502; + isa = PBXBuildFile; + settings = { + }; + }; + 6ED3E46305192E2B00A80003 = { + expectedFileType = sourcecode.c.h; + fileEncoding = 4; + isa = PBXFileReference; + path = MenuExtras.h; + refType = 4; + sourceTree = ""; + }; + 6ED3E46405192E2B00A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = MenuExtras.m; + refType = 4; + sourceTree = ""; + }; + 6ED3E46505192E2B00A80003 = { + fileRef = 6ED3E46305192E2B00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6ED3E46605192E2B00A80003 = { + fileRef = 6ED3E46405192E2B00A80003; + isa = PBXBuildFile; + settings = { + }; + }; + 6ED3E46705192F0C00A80003 = { + children = ( + 6ED3E46305192E2B00A80003, + 6ED3E46405192E2B00A80003, + ); + isa = PBXGroup; + name = Categories; + refType = 4; + sourceTree = ""; + }; + 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 = ""; + }; + 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 = ""; + }; + 6EFB422E052F601400A80003 = { + expectedFileType = sourcecode.c.objc; + fileEncoding = 4; + isa = PBXFileReference; + path = SearchResults.m; refType = 4; sourceTree = ""; }; - 6E31BC1004EB1BEF00A80003 = { - fileRef = 6E31BC0E04EB1BEF00A80003; + 6EFB422F052F601400A80003 = { + fileRef = 6EFB422D052F601400A80003; isa = PBXBuildFile; settings = { }; }; - 6E31BC1104EB1BEF00A80003 = { - fileRef = 6E31BC0F04EB1BEF00A80003; + 6EFB4230052F601400A80003 = { + fileRef = 6EFB422E052F601400A80003; isa = PBXBuildFile; settings = { }; }; }; - rootObject = 29B97313FDCFA39411CA2CEA; + rootObject = 2A37F4A9FDCFA73011CA2CEA; } diff --git a/The_Cheat_Prefix.h b/The_Cheat_Prefix.pch similarity index 62% rename from The_Cheat_Prefix.h rename to The_Cheat_Prefix.pch index 0d0c539..92e9b97 100644 --- a/The_Cheat_Prefix.h +++ b/The_Cheat_Prefix.pch @@ -1,7 +1,13 @@ + // // Prefix header for all source files of the 'The Cheat' target in the 'The Cheat' project // - +/* #ifdef __OBJC__ #import #endif +*/ +#ifdef __OBJC__ +#import +#import +#endif diff --git a/cheat_globals.h b/cheat_globals.h new file mode 100644 index 0000000..03bad61 --- /dev/null +++ b/cheat_globals.h @@ -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 + +#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 index 0000000..7c04b96 --- /dev/null +++ b/cheat_globals.m @@ -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 index 0000000..1f82d2e --- /dev/null +++ b/cheat_net.h @@ -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 +#include +#include +#include +#include +#include +#include +#include + + +// 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 index 0000000..be27b7c --- /dev/null +++ b/cheat_net.m @@ -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 index 0000000..43f9dd7 --- /dev/null +++ b/cheat_shared.h @@ -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 index 0000000..1a7b7a5 --- /dev/null +++ b/cheat_shared.m @@ -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 index 0000000..92a5622 --- /dev/null +++ b/cheat_types.h @@ -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 index 0000000..ad21b66 Binary files /dev/null and b/icon_b.icns differ diff --git a/main.m b/main.m index 0fcbed4..c990b8c 100644 --- 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 +#include +#include + int main( int argc, const char *argv[] ) { - return NSApplicationMain(argc, argv); + srandom( time(0) ); + + return NSApplicationMain( argc, argv ); } \ No newline at end of file