diff --git a/ApplicationController.h b/ApplicationController.h index 33f981a..fa316ca 100644 --- a/ApplicationController.h +++ b/ApplicationController.h @@ -11,12 +11,11 @@ @interface ApplicationController : NSObject { - IBOutlet NSWindow *window; - IBOutlet PBGitRepository* repository; + IBOutlet NSWindow *window; IBOutlet id firstResponder; - NSPersistentStoreCoordinator *persistentStoreCoordinator; - NSManagedObjectModel *managedObjectModel; - NSManagedObjectContext *managedObjectContext; + NSPersistentStoreCoordinator *persistentStoreCoordinator; + NSManagedObjectModel *managedObjectModel; + NSManagedObjectContext *managedObjectContext; } - (NSPersistentStoreCoordinator *)persistentStoreCoordinator; diff --git a/ApplicationController.m b/ApplicationController.m index 4f15879..3441103 100644 --- a/ApplicationController.m +++ b/ApplicationController.m @@ -9,41 +9,41 @@ #import "ApplicationController.h" #import "PBGitRevisionCell.h" #import "PBDetailController.h" +#import "PBRepositoryDocumentController.h" @implementation ApplicationController -@synthesize repository; - -- (ApplicationController*) init +- (ApplicationController*)init { #ifndef NDEBUG [NSApp activateIgnoringOtherApps:YES]; #endif - if([[NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/QuickLookUI.framework"] load]) - NSLog(@"Quick Look loaded!"); - - // Find the current repository - char* a = getenv("PWD"); - NSString* path; - if (a != nil) - path = [NSString stringWithCString:a]; - else { - // Show an open dialog - NSOpenPanel* openDlg = [NSOpenPanel openPanel]; - [openDlg setCanChooseFiles:NO]; - [openDlg setCanChooseDirectories:YES]; - if ( [openDlg runModalForDirectory:nil file:nil] == NSOKButton ) - path = [openDlg filename]; - else - exit(1); + if(self = [super init]) { + if([[NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/QuickLookUI.framework"] load]) + NSLog(@"Quick Look loaded!"); } - - self.repository = [PBGitRepository repositoryWithPath:path]; - [[PBDetailController alloc] initWithRepository:self.repository]; + return self; } +- (void)applicationDidFinishLaunching:(NSNotification*)notification +{ + // Only try to open a default document if there are no documents open already. + // For example, the application might have been launched by double-clicking a .git repository, + // or by dragging a folder to the app icon + if ([[[PBRepositoryDocumentController sharedDocumentController] documents] count] == 0) { + // Try to open the current directory as a git repository + NSURL *url = [NSURL fileURLWithPath:[[NSFileManager defaultManager] currentDirectoryPath]]; + NSError *error = nil; + if (!url || [[PBRepositoryDocumentController sharedDocumentController] openDocumentWithContentsOfURL:url display:YES error:&error] == NO) { + // The current directory could not be opened (most likely it’s not a git repository) + // so show an open panel for the user to select a repository to view + [[PBRepositoryDocumentController sharedDocumentController] openDocument:self]; + } + } +} + - (void) windowWillClose: sender { [firstResponder terminate: sender]; diff --git a/English.lproj/MainMenu.xib b/English.lproj/MainMenu.xib index 54c255a..099b19a 100644 --- a/English.lproj/MainMenu.xib +++ b/English.lproj/MainMenu.xib @@ -8,7 +8,7 @@ 352.00 YES - + YES @@ -34,15 +34,15 @@ GitX - + 1048576 2147483647 - - NSImage + + NSImage NSMenuCheckmark - - + + NSMenuMixedState submenuAction: @@ -53,21 +53,21 @@ About GitX - + 2147483647 - - + + YES YES - - + + 1048576 2147483647 - - + + @@ -75,28 +75,28 @@ , 1048576 2147483647 - - + + YES YES - - + + 1048576 2147483647 - - + + Services - + 1048576 2147483647 - - + + submenuAction: @@ -112,12 +112,12 @@ YES YES - - + + 1048576 2147483647 - - + + @@ -125,8 +125,8 @@ h 1048576 2147483647 - - + + @@ -134,28 +134,28 @@ 1572864 2147483647 - - + + Show All - + 1048576 2147483647 - - + + YES YES - - + + 1048576 2147483647 - - + + @@ -163,8 +163,8 @@ q 1048576 2147483647 - - + + _NSAppleMenu @@ -173,11 +173,11 @@ File - + 1048576 2147483647 - - + + submenuAction: @@ -191,8 +191,8 @@ n 1048576 2147483647 - - + + @@ -200,17 +200,17 @@ o 1048576 2147483647 - - + + Open Recent - + 1048576 2147483647 - - + + submenuAction: @@ -221,11 +221,11 @@ Clear Menu - + 1048576 2147483647 - - + + _NSRecentDocumentsMenu @@ -235,12 +235,12 @@ YES YES - - + + 1048576 2147483647 - - + + @@ -248,8 +248,8 @@ w 1048576 2147483647 - - + + @@ -257,8 +257,8 @@ s 1048576 2147483647 - - + + @@ -266,27 +266,27 @@ S 1048576 2147483647 - - + + Revert to Saved - + 2147483647 - - + + YES YES - - + + 1048576 2147483647 - - + + @@ -294,8 +294,8 @@ P 1048576 2147483647 - - + + @@ -303,8 +303,8 @@ p 1048576 2147483647 - - + + @@ -312,11 +312,11 @@ Edit - + 1048576 2147483647 - - + + submenuAction: @@ -330,8 +330,8 @@ z 1048576 2147483647 - - + + @@ -339,19 +339,19 @@ Z 1048576 2147483647 - - + + YES YES - - + + 1048576 2147483647 - - + + @@ -359,8 +359,8 @@ x 1048576 2147483647 - - + + @@ -368,8 +368,8 @@ c 1048576 2147483647 - - + + @@ -377,17 +377,17 @@ v 1048576 2147483647 - - + + Delete - + 1048576 2147483647 - - + + @@ -395,28 +395,28 @@ a 1048576 2147483647 - - + + YES YES - - + + 1048576 2147483647 - - + + Find - + 1048576 2147483647 - - + + submenuAction: @@ -430,8 +430,8 @@ f 1048576 2147483647 - - + + 1 @@ -440,8 +440,8 @@ g 1048576 2147483647 - - + + 2 @@ -450,8 +450,8 @@ G 1048576 2147483647 - - + + 3 @@ -460,8 +460,8 @@ e 1048576 2147483647 - - + + 7 @@ -470,8 +470,8 @@ j 1048576 2147483647 - - + + @@ -479,11 +479,11 @@ Spelling and Grammar - + 1048576 2147483647 - - + + submenuAction: @@ -495,8 +495,8 @@ : 1048576 2147483647 - - + + @@ -504,26 +504,26 @@ ; 1048576 2147483647 - - + + Check Spelling While Typing - + 1048576 2147483647 - - + + Check Grammar With Spelling - + 1048576 2147483647 - - + + @@ -531,11 +531,11 @@ Substitutions - + 1048576 2147483647 - - + + submenuAction: @@ -547,8 +547,8 @@ 1048576 2147483647 - - + + @@ -556,8 +556,8 @@ 1048576 2147483647 - - + + @@ -565,8 +565,8 @@ 1048576 2147483647 - - + + @@ -574,11 +574,11 @@ Speech - + 1048576 2147483647 - - + + submenuAction: @@ -587,18 +587,18 @@ Start Speaking - + 2147483647 - - + + Stop Speaking - + 2147483647 - - + + @@ -609,11 +609,11 @@ View - + 1048576 2147483647 - - + + submenuAction: @@ -625,28 +625,28 @@ t 1572864 2147483647 - - + + Q3VzdG9taXplIFRvb2xiYXLigKY - + 1048576 2147483647 - - + + YES YES - - + + 1048576 2147483647 - - + + @@ -654,8 +654,8 @@ 1 1048576 2147483647 - - + + @@ -663,8 +663,8 @@ 2 1048576 2147483647 - - + + @@ -672,8 +672,8 @@ 3 1048576 2147483647 - - + + @@ -681,11 +681,11 @@ Window - + 1048576 2147483647 - - + + submenuAction: @@ -699,37 +699,37 @@ m 1048576 2147483647 - - + + Zoom - + 1048576 2147483647 - - + + YES YES - - + + 1048576 2147483647 - - + + Bring All to Front - + 1048576 2147483647 - - + + _NSWindowsMenu @@ -738,11 +738,11 @@ Help - + 1048576 2147483647 - - + + submenuAction: @@ -754,8 +754,8 @@ ? 1048576 2147483647 - - + + @@ -764,7 +764,10 @@ _NSMainMenu - ApplicationController + ApplicationController + + + PBRepositoryDocumentController @@ -1074,6 +1077,14 @@ 906 + + + openDocument: + + + + 907 + @@ -1640,7 +1651,7 @@ 205 - + 847 @@ -1662,6 +1673,11 @@ + + 908 + + + @@ -1835,6 +1851,7 @@ 848.IBPluginDependency 851.IBPluginDependency 852.IBPluginDependency + 908.IBPluginDependency YES @@ -1996,7 +2013,7 @@ - {{478, 761}, {199, 203}} + {{413, 533}, {199, 203}} @@ -2005,6 +2022,7 @@ + com.apple.InterfaceBuilder.CocoaPlugin @@ -2027,11 +2045,99 @@ - 906 + 908 YES + + ApplicationController + NSObject + + YES + + YES + saveAction: + switchBranch: + + + YES + id + + + + + YES + + YES + firstResponder + repository + window + + + YES + + PBGitRepository + NSWindow + + + + IBProjectSource + ApplicationController.h + + + + + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + IBUserSource + + + + + PBGitRepository + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + + + PBGitRepository NSDocument @@ -2054,13 +2160,45 @@ - IBProjectSource + PBGitRepository.h - PBGitRepository - NSObject + + + + YES + + YES + + + + + + YES + id + + + + + + YES + + YES + + + YES + + + + + + + + + PBRepositoryDocumentController + NSDocumentController YES @@ -2080,26 +2218,20 @@ - IBUserSource - + + PBRepositoryDocumentController.h - - + PBRepositoryDocumentController + NSDocumentController YES - + YES - - - YES - id - - @@ -2116,68 +2248,6 @@ - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - - - - - ApplicationController - - - YES - - YES - saveAction: - switchBranch: - - - YES - id - - - - - YES - - YES - firstResponder - repository - window - - - YES - - PBGitRepository - NSWindow - - - - - ApplicationController.h - - 0 @@ -2185,300 +2255,304 @@ 3 YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA -AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxECBQALAAwAMQA1ADkAQABD -AEQASABMAHUAewCLAJAAkQCSAJcAmACZAJwAoAChAKQApQCpAK0AtAC4ALkAugC+AMUAywDMAM0AzgDS -ANkA2gDbAN8A6ADsAO0A7gDvAPMA+gD7APwA/QEBAQkBCgELAQ8BFgEaARsBHAEdASEBKAEpASoBKwEv -ATYBOgE7ATwBQgFJAU4BTwFQAVEBVgFZAVoBWwFeAWIBaQFqAWsBbAFwAXcBeAF5AXoBfgGFAYYBhwGI -AYwBkwGUAZUBmQGgAaEBogGjAacBrwGwAbEBtQG8Ab0BvgHDAcQByAHQAdEB0gHTAdcB3gHjAeQB5QHq -AfEB8gHzAfcB/gH/AgACAQIGAg0CDgIPAhQCGwIcAh0CIQIoAiwCLQIuAi8CMwI6AjsCPAI9AkECSAJJ -AkoCSwJPAlYCVwJYAlkCXQJkAmUCZgJqAnICcwJ0AngCfwKAAoECggKHAo4CjwKQApEClQKcAqACoQKi -AqMCpwKuAq8CsAKxArYCvQK+Ar8CwALEAssCzALNAs4C0gMnAy4DLwMwAzEDNQM3A0IDQwNEA0kDSwNO -A08DWgNdA2UDbgN3A3wDQwN9A38DjwOYA6EDXANDA6oDswNDA7QDuwPCA8MDzANDA80D0QPXA94D3wPm -A+cD7gPvA/gDQwP5A/4EBwNDBAgEFgQfBCYEJwQoBDEEOgQ7A0MERARNA0METgRXADgEWgRjA0MEZARm -BGoEawR0A0MEdQR3BH4EhwSIBI8EkASRBJQEogSpBKoEqwS0BLsEvATFBMYEzwSTA0ME2ATZBNsFMAWG -BdwF3QXeBd8F4AXhBeIF4wXkBeUF5gXnBegF6QXqBesF7AXtBe4F7wXwBfEF8gXzBfQF9QX2BfcF+AX5 -BfoF+wX8Bf0F/gX/BgAGAQYCBgMGBAYFBgYGBwYIBgkGCgYLBgwGDQYOBg8GEAYRBhIGEwYUBhUGFgYX -BhgGGQYaBhsGHAYdBh4GHwYgBiEGIgYjBiQGJQYmBicGKAYpBioGKwYsBi0GMAYzBq8HKwcsBy0HLgcv -BzAHMQcyBzMHNAc1BzYHNwc4BzkHOgc7BzwHPQc+Bz8HQAdBB0IHQwdEB0UHRgdHB0gHSQdKB0sHTAdN -B04HTwdQB1EHUgdTB1QHVQdWB1cHWAdZB1oHWwdcB10HXgdfB2AHYQdiB2MHZAdlB2YHZwdoB2kHagdr -B2wHbQduB28HcAdxB3IHcwd0B3UHdgd3B3gHeQd6B3sHfAd9B34HfweAB4EHggeDB4QHhQeGB4cHiAeJ -B4oHiweMB40HjgePB5AHkQeSB5MHlAeVB5YHlweYB5kHmgebB5wHnQeeB58HoAehB6IHowekB6cHqget -VSRudWxs3xASAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUA -JgAnACgAKQAqACsALAAtAC4ALwAwVk5TUm9vdFYkY2xhc3NdTlNPYmplY3RzS2V5c18QD05TQ2xhc3Nl -c1ZhbHVlc18QGU5TQWNjZXNzaWJpbGl0eU9pZHNWYWx1ZXNdTlNDb25uZWN0aW9uc1tOU05hbWVzS2V5 -c1tOU0ZyYW1ld29ya11OU0NsYXNzZXNLZXlzWk5TT2lkc0tleXNdTlNOYW1lc1ZhbHVlc18QGU5TQWNj -ZXNzaWJpbGl0eUNvbm5lY3RvcnNdTlNGb250TWFuYWdlcl8QEE5TVmlzaWJsZVdpbmRvd3NfEA9OU09i -amVjdHNWYWx1ZXNfEBdOU0FjY2Vzc2liaWxpdHlPaWRzS2V5c1lOU05leHRPaWRcTlNPaWRzVmFsdWVz -gAKBAgSAy4EBhYECA4AJgQExgAaBAYSBAYaBATKBAgGAAIAHgQEwgQICEQOMgQGH0gAOADIAMwA0W05T -Q2xhc3NOYW1lgAWAA9IADgA2ADcAOFlOUy5zdHJpbmeABF1OU0FwcGxpY2F0aW9u0gA6ADsAPAA9WCRj -bGFzc2VzWiRjbGFzc25hbWWjAD0APgA/XxAPTlNNdXRhYmxlU3RyaW5nWE5TU3RyaW5nWE5TT2JqZWN0 -0gA6ADsAQQBCogBCAD9eTlNDdXN0b21PYmplY3RfEBBJQkNvY29hRnJhbWV3b3Jr0gAOAEUARgBHWk5T -Lm9iamVjdHOACKDSADoAOwBJAEqjAEoASwA/XE5TTXV0YWJsZVNldFVOU1NldNIADgBFAE0AToDKrxAm -AE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBs -AG0AbgBvAHAAcQByAHMAdIAKgBiAHYAjgCeALYAygDaAPIBBgEaATIBRgFaAW4BggGSAaYBtgHGAc4B4 -gH2AgYCGgIqAjoCUgJmAnoCjgKeAq4CwgLWAu4DAgMXTAA4AdgB3AHgAeQB6WE5TU291cmNlV05TTGFi -ZWyAF4ALgBbYAA4AfAB9AH4AfwCAAIEAggCDAIQAhQCGAIcAiACJAIpXTlNUaXRsZV8QEU5TS2V5RXF1 -aXZNb2RNYXNrWk5TS2V5RXF1aXZdTlNNbmVtb25pY0xvY1lOU09uSW1hZ2VcTlNNaXhlZEltYWdlVk5T -TWVudYAVgA0SABAAAIAOEn////+AD4ATgAzTAA4AfACMAI0AjgCPW05TTWVudUl0ZW1zgNGA4YDiVkRl -bGV0ZVDTAA4AMgCTAJQAlQCWXk5TUmVzb3VyY2VOYW1lgBKAEIARV05TSW1hZ2VfEA9OU01lbnVDaGVj -a21hcmvSADoAOwCaAJuiAJsAP18QEE5TQ3VzdG9tUmVzb3VyY2XTAA4AMgCTAJQAlQCfgBKAEIAUXxAQ -TlNNZW51TWl4ZWRTdGF0ZdIAOgA7AKIAo6IAowA/Wk5TTWVudUl0ZW1XZGVsZXRlOtIAOgA7AKYAp6MA -pwCoAD9fEBVOU05pYkNvbnRyb2xDb25uZWN0b3JeTlNOaWJDb25uZWN0b3LTAA4AdgB3AHgAqwCsgBeA -GYAc2AAOAHwAfQB+AH8AgACBAIIAgwCvAIUAhgCHAIgAiQCzgBWAG4AOgA+AE4Aa0wAOAHwAjACNALYA -t4DRgOmA618QG0NoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZ18QHnRvZ2dsZUNvbnRpbnVvdXNTcGVs -bENoZWNraW5nOtMADgB2AHcAeAC8AL2AF4AegCLYAA4AfAB9AH4AfwCAAIEAggCDAMAAhQDBAIcAiACJ -AMSAFYAggCGAD4ATgB/UAA4AfADGAIwAjQDIAMkAylZOU05hbWWA0YEBGYEBHIEBGlhNaW5pbWl6ZVFt -XxATcGVyZm9ybU1pbmlhdHVyaXplOtMADgB2AHcAeADQANGAF4AkgCbYAA4AfAB9AH4AfwCAAIEAggCD -ANQAhQCGAIcAiACJAMSAFYAlgA6AD4ATgB9UWm9vbVxwZXJmb3JtWm9vbTrTAA4AdgB3AHgA3QDegBeA -KIAs2QAOAHwAfQB+AH8AgACBAIIA4ACDAOIAhQDjAIcAiACJAOYA51VOU1RhZ4AVgCqAK4APgBOAKRAC -0wAOAHwAjACNAOoA64DRgNqA21lGaW5kIE5leHRRZ18QF3BlcmZvcm1GaW5kUGFuZWxBY3Rpb2460wAO -AHYAdwB4APEA8oAXgC6AMdgADgB8AH0AfgB/AIAAgQCCAIMA9QCFAPYAhwCIAIkAioAVgC+AMIAPgBOA -DFRDb3B5UWNVY29weTrTAA4AdgB3AHgA/wDegBeAM4As2QAOAHwAfQB+AH8AgACBAIIA4ACDAQMAhQEE -AIcAiACJAOYBCIAVgDSANYAPgBOAKRADXUZpbmQgUHJldmlvdXNRR9MADgB2AHcAeAENAQ6AF4A3gDvY -AA4AfAB9AH4AfwCAAIEAggCDAREAhQESAIcAiACJARWAFYA5gDqAD4ATgDjTAA4AfACMAI0BGAEZgNGB -AQuBAQ1ZVHJlZSBWaWV3UTNcc2V0VHJlZVZpZXc60wAOAHYAdwB4AR8BIIAXgD2AQNgADgB8AH0AfgB/ -AIAAgQCCAIMBIwCFASQAhwCIAIkAioAVgD6AP4APgBOADFVQYXN0ZVF2VnBhc3RlOtMADgB2AHcAeAEt -AS6AF4BCgEXXAA4AfAB+AH8AgACBAIIAgwExAIYAhwCIAIkBNYAVgESADoAPgBOAQ9MADgB8AIwAjQE4 -ATmA0YD6gPxdU3RvcCBTcGVha2luZ11zdG9wU3BlYWtpbmc61AAOAT0AdgB3AHgAHwFAAUFdTlNEZXN0 -aW5hdGlvboAXgAKAR4BL2AAOAHwAfQB+AH8AgACBAIIAgwFEAIUBRQCHAIgAiQFIgBWASYBKgA+AE4BI -1AAOAHwAxgCMAI0BSwFMAU2A0YD+gQEHgQEAXEhpZGUgR2l0VGVzdFFoVWhpZGU61AAOAT0AdgB3AVIA -HwFUAVWAUIACgE2AT9IADgAyADMBWIAFgE5fEBVBcHBsaWNhdGlvbkNvbnRyb2xsZXJeZmlyc3RSZXNw -b25kZXLSADoAOwFcAV2jAV0AqAA/XxAUTlNOaWJPdXRsZXRDb25uZWN0b3LTAA4AdgB3AHgBYAFhgBeA -UoBV2AAOAHwAfQB+AH8AgACBAIIAgwFkAIUBZQCHAIgAiQCKgBWAU4BUgA+AE4AMVFVuZG9RelV1bmRv -OtMADgB2AHcAeAFuAW+AF4BXgFrYAA4AfAB9AH4AfwCAAIEAggCDAXIAhQFzAIcAiACJAIqAFYBYgFmA -D4ATgAxaU2VsZWN0IEFsbFFhWnNlbGVjdEFsbDrTAA4AdgB3AHgBfAF9gBeAXIBf2AAOAHwAfQB+AH8A -gACBAIIAgwGAAIUBgQCHAIgAiQDmgBWAXYBegA+AE4ApXxARSnVtcCB0byBTZWxlY3Rpb25Ral8QHWNl -bnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWE60wAOAHYAdwB4AYoBi4AXgGGAY9gADgB8AH0AfgB/AIAA -gQCCAIMBjgCFAIYAhwCIAIkAxIAVgGKADoAPgBOAH18QEkJyaW5nIEFsbCB0byBGcm9udF8QD2FycmFu -Z2VJbkZyb250OtMADgB2AHcAeAGXAZiAF4BlgGjYAA4AfAB9AH4AfwCAAIEAggCDAZsAhQGcAIcAiACJ -ARWAFYBmgGeAD4ATgDhdRGV0YWlsZWQgVmlld1ExXxAQc2V0RGV0YWlsZWRWaWV3OtMADgB2AHcAeAGl -AN6AF4BqgCzZAA4AfAB9AH4AfwCAAIEAggDgAIMBqQCFAaoAhwCIAIkA5gGugBWAa4BsgA+AE4ApEAdf -EBZVc2UgU2VsZWN0aW9uIGZvciBGaW5kUWXTAA4AdgB3AHgBswG0gBeAboBw1wAOAHwAfgB/AIAAgQCC -AIMBtwCGAIcAiACJATWAFYBvgA6AD4ATgENeU3RhcnQgU3BlYWtpbmdec3RhcnRTcGVha2luZzrUAA4B -PQB2AHcBUgFUAB8BwoBQgE2AAoByWGRlbGVnYXRl0wAOAHYAdwB4AcYBx4AXgHSAd9gADgB8AH0AfgB/ -AIAAgQCCAIMBygHLAcwAhwCIAIkBFYAVgHUSABgAAIB2gA+AE4A4XFNob3cgVG9vbGJhclF0XxATdG9n -Z2xlVG9vbGJhclNob3duOtMADgB2AHcAeAHVAdaAF4B5gHzYAA4AfAB9AH4AfwCAAIEAggCDAdkAhQCG -AIcAiACJAd2AFYB7gA6AD4ATgHrUAA4AfADGAIwAjQHgAeEB4oDRgQETgQEVgQEUWkNsZWFyIE1lbnVf -EBVjbGVhclJlY2VudERvY3VtZW50czrUAA4BPQB2AHcAeAAfAegB6YAXgAKAfoCA1wAOAHwAfgB/AIAA -gQCCAIMB7ACGAIcAiACJAUiAFYB/gA6AD4ATgEhaQWJvdXQgR2l0WF8QHW9yZGVyRnJvbnRTdGFuZGFy -ZEFib3V0UGFuZWw60wAOAHYAdwB4AfUB9oAXgIKAhdgADgB8AH0AfgB/AIAAgQCCAIMB+QCFAfoAhwCI -AIkBFYAVgIOAhIAPgBOAOFhSYXcgVmlld1EyW3NldFJhd1ZpZXc61AAOAT0AdgB3AHgAHwIEAgWAF4AC -gIeAidgADgB8AH0AfgB/AIAAgQCCAIMCCAHLAUUAhwCIAIkBSIAVgIiASoAPgBOASFtIaWRlIE90aGVy -c18QFmhpZGVPdGhlckFwcGxpY2F0aW9uczrUAA4BPQB2AHcAeAAfAhICE4AXgAKAi4CN2AAOAHwAfQB+ -AH8AgACBAIIAgwIWAIUAhgCHAIgAiQFIgBWAjIAOgA+AE4BIWFNob3cgQWxsXxAWdW5oaWRlQWxsQXBw -bGljYXRpb25zOtMADgB2AHcAeAIfAiCAF4CPgJPYAA4AfAB9AH4AfwCAAIEAggCDAiMAhQIkAIcAiACJ -AieAFYCRgJKAD4ATgJDTAA4AfACMAI0CKgIrgNGBASCBASFVQ2xvc2VRd11wZXJmb3JtQ2xvc2U60wAO -AHYAdwB4AjECMoAXgJWAmNgADgB8AH0AfgB/AIAAgQCCAIMCNQCFAjYAhwCIAIkCJ4AVgJaAl4APgBOA -kGYAUAByAGkAbgB0ICZRcFZwcmludDrTAA4AdgB3AHgCPwJAgBeAmoCd2AAOAHwAfQB+AH8AgACBAIIA -gwJDAIUCRACHAIgAiQCzgBWAm4CcgA+AE4AabgBTAGgAbwB3ACAAUwBwAGUAbABsAGkAbgBnICZROl8Q -D3Nob3dHdWVzc1BhbmVsOtMADgB2AHcAeAJNAk6AF4CfgKLYAA4AfAB9AH4AfwCAAIEAggCDAlEAhQJS -AIcAiACJAIqAFYCggKGAD4ATgAxUUmVkb1FaVXJlZG860wAOAHYAdwB4AlsCXIAXgKSAptgADgB8AH0A -fgB/AIAAgQCCAIMCXwCFAIYAhwCIAIkBFYAVgKWADoAPgBOAOG8QEgBDAHUAcwB0AG8AbQBpAHoAZQAg -AFQAbwBvAGwAYgBhAHIgJl8QH3J1blRvb2xiYXJDdXN0b21pemF0aW9uUGFsZXR0ZTrTAA4AdgB3AHgC -aADegBeAqIAs2QAOAHwAfQB+AH8AgACBAIIA4ACDAmwAhQJtAIcAiACJAOYCcYAVgKmAqoAPgBOAKRAB -ZQBGAGkAbgBkICZRZtMADgB2AHcAeAJ2AneAF4CsgK/YAA4AfAB9AH4AfwCAAIEAggCDAnoAhQJ7AIcA -iACJAIqAFYCtgK6AD4ATgAxTQ3V0UXhUY3V0OtQADgE9AHYAdwB4AVQChQKGgBeATYCxgLTYAA4AfAB9 -AH4AfwCAAIEAggCDAokAhQKKAIcAiACJAieAFYCygLOAD4ATgJBUU2F2ZVFzW3NhdmVBY3Rpb2460wAO -AHYAdwB4ApMClIAXgLaAutgADgB8AH0AfgB/AIAAgQCCAIMClwCFApgAhwCIAIkCm4AVgLiAuYAPgBOA -t9MADgB8AIwAjQKeAp+A0YDPgNBcR2l0VGVzdCBIZWxwUT9Zc2hvd0hlbHA60wAOAHYAdwB4AqUCpoAX -gLyAv9gADgB8AH0AfgB/AIAAgQCCAIMCqQCFAqoAhwCIAIkAs4AVgL2AvoAPgBOAGl5DaGVjayBTcGVs -bGluZ1E7XmNoZWNrU3BlbGxpbmc61AAOAT0AdgB3AHgAHwK0ArWAF4ACgMGAxNgADgB8AH0AfgB/AIAA -gQCCAIMCuACFArkAhwCIAIkBSIAVgMKAw4APgBOASFlRdWl0IEdpdFhRcVp0ZXJtaW5hdGU60wAOAHYA -dwB4AsICw4AXgMaAydgADgB8AH0AfgB/AIAAgQCCAIMCxgCFAscAhwCIAIkCJ4AVgMeAyIAPgBOAkGsA -UABhAGcAZQAgAFMAZQB0AHUAcCAmUVBecnVuUGFnZUxheW91dDrSADoAOwLPAtCjAtAC0QA/Xk5TTXV0 -YWJsZUFycmF5V05TQXJyYXnSAA4ARQLTAtSBAS+vEFIC1QKbAsIC2AFAAdUBigLcAOYC3gDdAuAC4QDx -AW4ChQLlAuYBNQLoAIoC6gLrAegC7QLuAu8C8ALxAvIC8wKlAh8C9gB5AXwA0AC8AfUCtAGlAmgBVAHd -AwECMQMDAwQCTQEtAicCdgI/AcYDCwMMAw0AqwMPAlsBHwMSAxMDFAMVAxYCkwIEAZcBswD/AMQBYAMe -AhIDIAFIAyIAswENARUDJoDMgLeAxoDSgEeAeYBhgNmAKYDcgCiA3YD9gC6AV4CxgQEIgOyAQ4EBCoAM -gPWA84B+gQEFgOOBAQ6BARCA7oD5gQEWgLyAj4EBHYALgFyAJIAegIKAwYBqgKiATYB6gOWAlYDVgOiA -n4BCgJCArICagHSBASaBAQaA3oAZgQEbgKSAPYDxgQErgQElgOSBAQGAtoCHgGWAboAzgB+AUoEBAoCL -gQEigEiBASiAGoA3gDiA99gADgB8AH0AfgB/AIAAgQCCAIMDKQCFAyoAhwCIAIkCJ4AVgM2AzoAPgBOA -kGgAUwBhAHYAZQAgAEEAcyAmUVNUSGVscNIADgBFAE0DM4DKoQKTgLbSADoAOwM2AIKiAIIAP9oADgM4 -AHwAfQB+AH8AgACBAIIDOQCDAwMDPACFAIYAhwCIAIkBSANBWU5TU3VibWVudVhOU0FjdGlvboAVgNWA -04AOgA+AE4BIgNRYU2VydmljZXNec3VibWVudUFjdGlvbjrUAA4AfADGAIwAjQNGA0cDSIDRgNaA2IDX -0gAOADYANwNCgATSAA4ARQBNA02AyqBfEA9fTlNTZXJ2aWNlc01lbnXaAA4AfAB9A1AAfgNRAH8AgACB -AIIAgwCGAIUDVACGA1QAhwCIAIkBSF1OU0lzU2VwYXJhdG9yXE5TSXNEaXNhYmxlZIAVgA4JgA4JgA+A -E4BI0gAOADYANwNcgARURmluZNIADgBFAE0DX4DKpQJoAN0A/wGlAXyAqIAogDOAaoBc2gAOAHwAfQNQ -AH4DUQB/AIAAgQCCAIMAhgCFA1QAhgNUAIcAiACJARWAFYAOCYAOCYAPgBOAONoADgM4AHwAfQB+AH8A -gACBAIIDOQCDAIoDcQCFAIYAhwCIAIkDDQN2gBWADIDfgA6AD4ATgN6A4NQADgB8AMYAjACNA3kDegN7 -gNGBASmBAS6BASpURWRpdNIADgA2ADcDfIAE0gAOAEUATQOBgMqtAWACTQLuAnYA8QEfAHkBbgMVAwED -BALxAvKAUoCfgOOArIAugD2AC4BXgOSA5YDogO6A+doADgB8AH0DUAB+A1EAfwCAAIEAggCDAIYAhQNU -AIYDVACHAIgAiQCKgBWADgmADgmAD4ATgAzaAA4AfAB9A1AAfgNRAH8AgACBAIIAgwCGAIUDVACGA1QA -hwCIAIkAioAVgA4JgA4JgA+AE4AM2gAOAzgAfAB9AH4AfwCAAIEAggM5AIMA5gOkAIUAhgCHAIgAiQCK -A6mAFYApgOaADoAPgBOADIDn2gAOAzgAfAB9AH4AfwCAAIEAggM5AIMAswC2AIUAhgCHAIgAiQCKA7KA -FYAagOmADoAPgBOADIDqXxAUU3BlbGxpbmcgYW5kIEdyYW1tYXLSAA4ARQBNA7aAyqQCPwKlAKsC5oCa -gLyAGYDs2AAOAHwAfQB+AH8AgACBAIIAgwO9AIUAhgCHAIgAiQCzgBWA7YAOgA+AE4AaXxAbQ2hlY2sg -R3JhbW1hciBXaXRoIFNwZWxsaW5n2gAOAzgAfAB9AH4AfwCAAIEAggM5AIMDEgPGAIUAhgCHAIgAiQCK -A8uAFYDxgO+ADoAPgBOADIDwXVN1YnN0aXR1dGlvbnPTAA4AfACMAI0DxgPQgNGA74Dy0gAOAEUATQPT -gMqjAusC6gMmgPOA9YD32AAOAHwAfQB+AH8AgACBAIIAgwPZAIUCbQCHAIgAiQMSgBWA9ICqgA+AE4Dx -XxAQU21hcnQgQ29weS9QYXN0ZdgADgB8AH0AfgB/AIAAgQCCAIMD4QCFAOMAhwCIAIkDEoAVgPaAK4AP -gBOA8VxTbWFydCBRdW90ZXPYAA4AfAB9AH4AfwCAAIEAggCDA+kAhQEEAIcAiACJAxKAFYD4gDWAD4AT -gPFbU21hcnQgTGlua3PaAA4DOAB8AH0AfgB/AIAAgQCCAzkAgwE1ATgAhQCGAIcAiACJAIoD94AVgEOA -+oAOgA+AE4AMgPtWU3BlZWNo0gAOAEUATQP7gMqiAbMBLYBugELaAA4DOAB8AH0AfgB/AIAAgQCCAzkA -gwFIAUsAhQCGAIcAiACJAw0EBoAVgEiA/oAOgA+AE4DegP9UR2l0WNIADgBFAE0ECoDKqwHoAxYDHgLt -AtgDDAFAAgQCEgLcArSAfoEBAYEBAoEBBYDSgQEGgEeAh4CLgNmAwdoADgB8AH0DUAB+A1EAfwCAAIEA -ggCDAIYAhQNUAIYDVACHAIgAiQFIgBWADgmADgmAD4ATgEjYAA4AfAB9AH4AfwCAAIEAggCDBCEAhQQi -AIcAiACJAUiAFYEBA4EBBIAPgBOASGwAUAByAGUAZgBlAHIAZQBuAGMAZQBzICZRLNoADgB8AH0DUAB+ -A1EAfwCAAIEAggCDAIYAhQNUAIYDVACHAIgAiQFIgBWADgmADgmAD4ATgEjaAA4AfAB9A1AAfgNRAH8A -gACBAIIAgwCGAIUDVACGA1QAhwCIAIkBSIAVgA4JgA4JgA+AE4BIXF9OU0FwcGxlTWVuddoADgM4AHwA -fQB+AH8AgACBAIIDOQCDApsCngCFAIYAhwCIAIkDDQRDgBWAt4DPgA6AD4ATgN6BAQnaAA4DOAB8AH0A -fgB/AIAAgQCCAzkAgwEVARgAhQCGAIcAiACJAw0ETIAVgDiBAQuADoAPgBOA3oEBDFRWaWV30gAOAEUA -TQRQgMqmAcYCWwLeAZcB9QENgHSApIDcgGWAgoA30gAOADIAMwRZgAWBAQ/aAA4DOAB8AH0AfgB/AIAA -gQCCAzkAgwHdBF0AhQCGAIcAiACJAicEYoAVgHqBARGADoAPgBOAkIEBEltPcGVuIFJlY2VudNIADgA2 -ADcEY4AE0gAOAEUATQRogMqhAdWAeV8QFl9OU1JlY2VudERvY3VtZW50c01lbnXaAA4DOAB8AH0AfgB/ -AIAAgQCCAzkAgwDEBG4AhQCGAIcAiACJAw0Ec4AVgB+BAReADoAPgBOA3oEBGFZXaW5kb3fSAA4ANgA3 -BHSABNIADgBFAE0EeYDKpAC8ANADDwGKgB6AJIEBG4Bh2gAOAHwAfQNQAH4DUQB/AIAAgQCCAIMAhgCF -A1QAhgNUAIcAiACJAMSAFYAOCYAOCYAPgBOAH15fTlNXaW5kb3dzTWVuddgADgB8AH0AfgB/AIAAgQCC -AIMEigCFBIsAhwCIAIkCJ4AVgQEegQEfgA+AE4CQU05ld1Fu0gAOADYANwSTgARURmlsZdIADgBFAE0E -loDKqwL2AyAC8AMUAh8ChQLVAwsDIgLCAjGBAR2BASKBARCBASWAj4CxgMyBASaBASiAxoCV2AAOAHwA -fQB+AH8AgACBAIIAgwSkAIUEpQCHAIgAiQIngBWBASOBASSAD4ATgJBXT3Blbi4uLlFv2gAOAHwAfQNQ -AH4DUQB/AIAAgQCCAIMAhgCFA1QAhgNUAIcAiACJAieAFYAOCYAOCYAPgBOAkNcADgB8AH4AfwCAAIEA -ggCDBLYAhgCHAIgAiQIngBWBASeADoAPgBOAkF8QD1JldmVydCB0byBTYXZlZNoADgB8AH0DUAB+A1EA -fwCAAIEAggCDAIYAhQNUAIYDVACHAIgAiQIngBWADgmADgmAD4ATgJBYTWFpbk1lbnXSAA4ARQBNBMiA -yqYC4QMTAuAC6ALzAuWA/YEBK4DdgQEKgQEWgQEI2gAOAzgAfAB9AH4AfwCAAIEAggM5AIMCJwTSAIUA -hgCHAIgAiQMNBNeAFYCQgQEsgA6AD4ATgN6BAS1bX05TTWFpbk1lbnXSADoAOwTaAtGiAtEAP9IADgBF -AtME3YEBL68QUgInAuUCJwFIAUgB3QDEAUgDAQEVAOYDDQMNAIoAigInAw0AswLyAw0C4AMSAxIBSAFI -AIoAHwInAIoAigMNALMCJwInAIoA5gDEAMQBFQFIAOYA5gAfAvAAigInAtgAigCKATUDEwCKALMBFQIn -AUgAHwCzAMQBFQCKAvEDDQInAIoBSAKbAUgBFQE1AOYC8wCKAUgBSAInAuECJwMEARUC6AMSgJCBAQiA -kIBIgEiAeoAfgEiA5YA4gCmA3oDegAyADICQgN6AGoD5gN6A3YDxgPGASIBIgAyAAoCQgAyADIDegBqA -kICQgAyAKYAfgB+AOIBIgCmAKYACgQEQgAyAkIDSgAyADIBDgQErgAyAGoA4gJCASIACgBqAH4A4gAyA -7oDegJCADIBIgLeASIA4gEOAKYEBFoAMgEiASICQgP2AkIDogDiBAQqA8dIADgBFAtMFMoEBL68QUwKb -AtUCwgLYAUAB1QGKAtwA5gLeAN0C4ALhAPEBbgKFAuUC6AE1AuYAigLqAusC7gLyAB8C7wFUAvMC8QHo -Au0A0AC8AHkC8AIfAfUC9gK0AXwBpQJoAqUDAQHdAcYCMQMEAk0DAwInAnYBLQI/AwsDDAMNAKsDDwJb -AR8DEgMTAxUDFAMWApMCBAGXAbMA/wDEAWADHgISAyABSAMiALMBDQEVAyaAt4DMgMaA0oBHgHmAYYDZ -gCmA3IAogN2A/YAugFeAsYEBCIEBCoBDgOyADID1gPOA44D5gAKBAQ6ATYEBFoDugH6BAQWAJIAegAuB -ARCAj4CCgQEdgMGAXIBqgKiAvIDlgHqAdICVgOiAn4DVgJCArIBCgJqBASaBAQaA3oAZgQEbgKSAPYDx -gQErgOSBASWBAQGAtoCHgGWAboAzgB+AUoEBAoCLgQEigEiBASiAGoA3gDiA99IADgBFAtMFiIEBL68Q -UwWJBYoFiwWMBY0FjgWPBZAFkQWSBZMFlAWVBZYFlwWYBZkFmgWbBZwFnQWeBZ8FoAWhBaIFowFYBaUF -pgWnBagFqQWqBasFrAWtBa4FrwWwBbEFsgWzBbQFtQW2BbcFuAW5BboFuwW8Bb0FvgW/BcAFwQN5BcMF -xAXFBcYFxwXIBckFygXLBcwFzQXOBc8F0AXRBdIF0wXUBdUF1gXXBdgF2QXaBduBATOBATSBATWBATaB -ATeBATiBATmBATqBATuBATyBAT2BAT6BAT+BAUCBAUGBAUKBAUOBAUSBAUWBAUaBAUeBAUiBAUmBAUqB -AUuBAUyBAU2AToEBToEBT4EBUIEBUYEBUoEBU4EBVIEBVYEBVoEBV4EBWIEBWYEBWoEBW4EBXIEBXYEB -XoEBX4EBYIEBYYEBYoEBY4EBZIEBZYEBZoEBZ4EBaIEBaYEBaoEBKYEBa4EBbIEBbYEBboEBb4EBcIEB -cYEBcoEBc4EBdIEBdYEBdoEBd4EBeIEBeYEBeoEBe4EBfIEBfYEBfoEBf4EBgIEBgYEBgoEBg1tNZW51 -IChIZWxwKW8QFABNAGUAbgB1ACAASQB0AGUAbQAgACgAUwBhAHYAZQAgAEEAcyAmAClvEBcATQBlAG4A -dQAgAEkAdABlAG0AIAAoAFAAYQBnAGUAIABTAGUAdAB1AHAgJgApXxAUTWVudSBJdGVtIChTZXJ2aWNl -cylfEBhNZW51IEl0ZW0gKEhpZGUgR2l0VGVzdClfEBZNZW51IEl0ZW0gKENsZWFyIE1lbnUpXxAeTWVu -dSBJdGVtIChCcmluZyBBbGwgdG8gRnJvbnQpW1NlcGFyYXRvci0yW01lbnUgKEZpbmQpW1NlcGFyYXRv -ci02XxAVTWVudSBJdGVtIChGaW5kIE5leHQpXxAQTWVudSBJdGVtIChFZGl0KV8QEE1lbnUgSXRlbSAo -R2l0WClfEBBNZW51IEl0ZW0gKENvcHkpXxAWTWVudSBJdGVtIChTZWxlY3QgQWxsKV8QEE1lbnUgSXRl -bSAoU2F2ZSlfEBBNZW51IEl0ZW0gKEhlbHApXxAQTWVudSBJdGVtIChWaWV3KV1NZW51IChTcGVlY2gp -XxAnTWVudSBJdGVtIChDaGVjayBHcmFtbWFyIFdpdGggU3BlbGxpbmcpW01lbnUgKEVkaXQpXxAYTWVu -dSBJdGVtIChTbWFydCBRdW90ZXMpXxAcTWVudSBJdGVtIChTbWFydCBDb3B5L1Bhc3RlKVlTZXBhcmF0 -b3JfEBJNZW51IEl0ZW0gKFNwZWVjaClcRmlsZSdzIE93bmVyW0FwcGxpY2F0aW9uXxASTWVudSBJdGVt -IChXaW5kb3cpXxAZTWVudSBJdGVtIChTdWJzdGl0dXRpb25zKV8QFk1lbnUgSXRlbSAoQWJvdXQgR2l0 -WClbU2VwYXJhdG9yLTNfEBBNZW51IEl0ZW0gKFpvb20pXxAUTWVudSBJdGVtIChNaW5pbWl6ZSlfEBJN -ZW51IEl0ZW0gKERlbGV0ZSlfEBdNZW51IEl0ZW0gKE9wZW4gUmVjZW50KV8QEU1lbnUgSXRlbSAoQ2xv -c2UpXxAUTWVudSBJdGVtIChSYXcgVmlldylfEA9NZW51IEl0ZW0gKE5ldylfEBVNZW51IEl0ZW0gKFF1 -aXQgR2l0WClfEB1NZW51IEl0ZW0gKEp1bXAgdG8gU2VsZWN0aW9uKV8QIk1lbnUgSXRlbSAoVXNlIFNl -bGVjdGlvbiBmb3IgRmluZClvEBEATQBlAG4AdQAgAEkAdABlAG0AIAAoAEYAaQBuAGQgJgApXxAaTWVu -dSBJdGVtIChDaGVjayBTcGVsbGluZylfEBBNZW51IEl0ZW0gKEZpbmQpXxASTWVudSAoT3BlbiBSZWNl -bnQpXxAYTWVudSBJdGVtIChTaG93IFRvb2xiYXIpbxASAE0AZQBuAHUAIABJAHQAZQBtACAAKABQAHIA -aQBuAHQgJgApXxAgTWVudSBJdGVtIChTcGVsbGluZyBhbmQgR3JhbW1hcilfEBBNZW51IEl0ZW0gKFJl -ZG8pXxAPTWVudSAoU2VydmljZXMpW01lbnUgKEZpbGUpXxAPTWVudSBJdGVtIChDdXQpXxAZTWVudSBJ -dGVtIChTdG9wIFNwZWFraW5nKW8QGgBNAGUAbgB1ACAASQB0AGUAbQAgACgAUwBoAG8AdwAgAFMAcABl -AGwAbABpAG4AZyAmAClfEBtNZW51IEl0ZW0gKFJldmVydCB0byBTYXZlZClbU2VwYXJhdG9yLTRfECdN -ZW51IEl0ZW0gKENoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZylbU2VwYXJhdG9yLTdvEB4ATQBlAG4A -dQAgAEkAdABlAG0AIAAoAEMAdQBzAHQAbwBtAGkAegBlACAAVABvAG8AbABiAGEAciAmAClfEBFNZW51 -IEl0ZW0gKFBhc3RlKV8QFE1lbnUgKFN1YnN0aXR1dGlvbnMpXxAQTWVudSBJdGVtIChGaWxlKVtTZXBh -cmF0b3ItMVtTZXBhcmF0b3ItOFtTZXBhcmF0b3ItNV8QGE1lbnUgSXRlbSAoR2l0VGVzdCBIZWxwKV8Q -F01lbnUgSXRlbSAoSGlkZSBPdGhlcnMpXxAZTWVudSBJdGVtIChEZXRhaWxlZCBWaWV3KV8QGk1lbnUg -SXRlbSAoU3RhcnQgU3BlYWtpbmcpXxAZTWVudSBJdGVtIChGaW5kIFByZXZpb3VzKV1NZW51IChXaW5k -b3cpXxAQTWVudSBJdGVtIChVbmRvKW8QGABNAGUAbgB1ACAASQB0AGUAbQAgACgAUAByAGUAZgBlAHIA -ZQBuAGMAZQBzICYAKV8QFE1lbnUgSXRlbSAoU2hvdyBBbGwpXxATTWVudSBJdGVtIChPcGVuLi4uKVtN -ZW51IChHaXRYKVtTZXBhcmF0b3ItOV8QG01lbnUgKFNwZWxsaW5nIGFuZCBHcmFtbWFyKV8QFU1lbnUg -SXRlbSAoVHJlZSBWaWV3KVtNZW51IChWaWV3KV8QF01lbnUgSXRlbSAoU21hcnQgTGlua3Mp0gAOAEUC -0wYvgQEvoNIADgBFAtMGMoEBL6DSAA4ARQLTBjWBAS+vEHkC1QBSAGQC2AFAAGIC3gDdAGYA8QBaAuUC -5gLoAFYC6gHoAu0BVALvAvMAagC8AqUCHwF8AHkCtABhAHMAbAIxAwMBxgBcAFUCJwBwAwsAYABtAKsA -WwBdAw8CWwMTAxQDFQBrAbMAbwFgAx4CEgCzAQ0BFQBXApsCwgBYAdUBigLcAOYAZwLgAuEBbgBTAoUA -XgE1AF8AigBlAusC7gLyAB8C8QLwANAC9gBUAfUAYwBxAaUCaABPAHIB3QMBAHQDBAJNAS0CdgI/AwwA -aQMNAG4AUQEfAxIDFgKTAgQBlwBQAP8AxAMgAUgDIgBZAGgDJoDMgCOAeIDSgEeAcYDcgCiAgYAugEyB -AQiA7IEBCoA2gPWAfoEBBYBNgQEOgQEWgJSAHoC8gI+AXIALgMGAbYDAgJ6AlYDVgHSAVoAygJCAsIEB -JoBpgKOAGYBRgFuBARuApIEBK4EBJYDkgJmAboCrgFKBAQKAi4AagDeAOIA8gLeAxoBBgHmAYYDZgCmA -hoDdgP2AV4AngLGAYIBDgGSADIB9gPOA44D5gAKA7oEBEIAkgQEdgC2AgoBzgLWAaoCogAqAu4B6gOWA -xYDogJ+AQoCsgJqBAQaAjoDegKeAHYA9gPGBAQGAtoCHgGWAGIAzgB+BASKASIEBKIBGgIqA99IADgBF -AtMGsYEBL68QeQayBrMGtAa1BrYGtwa4BrkGuga7BrwGvQa+Br8GwAbBBsIGwwbEBsUGxgbHBsgGyQbK -BssGzAbNBs4GzwbQBtEG0gbTBtQG1QbWBtcG2AbZBtoG2wbcBt0G3gbfBuAG4QbiBuMG5AblBuYG5wbo -BukG6gbrBuwG7QbuBu8G8AbxBvIG8wb0BvUG9gb3BvgG+Qb6BvsG/Ab9Bv4G/wcABwEHAgcDBwQHBQcG -BwcHCAcJBwoHCwcMBw0HDgcPBxAHEQcSBxMHFAcVBxYHFwcYBxkHGgcbBxwHHQceBx8HIAchByIHIwck -ByUHJgcnBygHKQcqgQGIgQGJgQGKgQGLgQGMgQGNgQGOgQGPgQGQgQGRgQGSgQGTgQGUgQGVgQGWgQGX -gQGYgQGZgQGagQGbgQGcgQGdgQGegQGfgQGggQGhgQGigQGjgQGkgQGlgQGmgQGngQGogQGpgQGqgQGr -gQGsgQGtgQGugQGvgQGwgQGxgQGygQGzgQG0gQG1gQG2gQG3gQG4gQG5gQG6gQG7gQG8gQG9gQG+gQG/ -gQHAgQHBgQHCgQHDgQHEgQHFgQHGgQHHgQHIgQHJgQHKgQHLgQHMgQHNgQHOgQHPgQHQgQHRgQHSgQHT -gQHUgQHVgQHWgQHXgQHYgQHZgQHagQHbgQHcgQHdgQHegQHfgQHggQHhgQHigQHjgQHkgQHlgQHmgQHn -gQHogQHpgQHqgQHrgQHsgQHtgQHugQHvgQHwgQHxgQHygQHzgQH0gQH1gQH2gQH3gQH4gQH5gQH6gQH7 -gQH8gQH9gQH+gQH/gQIAEFAQ+BB/EIMQhhDOEQNPEKcRA4kQnREDZBBnENQRAVIRA4oQ2xA6EI8QzRP/ -/////////RDxEFYQ9hC9EEkQmxCkEIgRAQEQixCyEE4QghEBVRCzEMkQURDTEHAQyhEBVxC/ELQQyxDz -EQFUEFMQTxCuELwQ4xCvEJ4QgRCWELkRA1QRAVMQsBBqEE0RAQIQfhD1EJUQnxCSEKMQOBCsEMgQSxD5 -EOERA4gQqRCOENoQnBDgEQOLENYQfBD0EFIQtREDUxEBVhB6EKEQmhDDEL4QfRCoEFcQuBCtEOQQoBC7 -EJAQwRAdEMcQ9xCrENcQxBBvEJERA1AQwBCiEPIQSBA5EEoQmBCZENjSAA4ARQBNB6aAyqDSAA4ARQLT -B6mBAS+g0gAOAEUC0wesgQEvoNIAOgA7B64Hr6IHrwA/Xk5TSUJPYmplY3REYXRhAAgAGQAiACcAMQA6 -AD8ARABSAFQAZgR0BHoExQTMBNME4QTzBQ8FHQUpBTUFQwVOBVwFeAWGBZkFqwXFBc8F3AXeBeEF4wXm -BekF6wXuBfAF8wX2BfkF/AX+BgAGAwYGBgkGDAYVBiEGIwYlBi4GOAY6BkgGUQZaBmUGbAZ+BocGkAaZ -Bp4GrQbABskG1AbWBtcG4AbnBvQG+gcDBwUHVAdWB1gHWgdcB14HYAdiB2QHZgdoB2oHbAduB3AHcgd0 -B3YHeAd6B3wHfgeAB4IHhAeGB4gHigeMB44HkAeSB5QHlgeYB5oHnAeeB6AHrQe2B74HwAfCB8QH5Qft -CAEIDAgaCCQIMQg4CDoIPAhBCEMISAhKCEwITghbCGcIaQhrCG0IdAh1CIIIkQiTCJUIlwifCLEIugi/ -CNII3wjhCOMI5Qj4CQEJBgkRCRkJIgkpCUEJUAldCV8JYQljCYQJhgmICYoJjAmOCZAJnQmfCaEJownB -CeIJ7wnxCfMJ9QoWChgKGgocCh4KIAoiCjMKOgo8Cj8KQgpFCk4KUApmCnMKdQp3CnkKmgqcCp4KoAqi -CqQKpgqrCrgKxQrHCskKywrwCvYK+Ar6CvwK/gsACwILBAsRCxMLFQsXCyELIws9C0oLTAtOC1ALcQtz -C3ULdwt5C3sLfQuCC4QLiguXC5kLmwudC8ILxAvGC8gLygvMC84L0AveC+AL7QvvC/EL8wwUDBYMGAwa -DBwMHgwgDC0MLwwyDDUMPwxBDE4MWwxdDF8MYQyCDIQMhgyIDIoMjAyODJQMlgydDKoMrAyuDLAMzQzP -DNEM0wzVDNcM2QzmDOgM6gzsDPoNCA0ZDScNKQ0rDS0NLw1QDVINVA1WDVgNWg1cDW0Nbw1xDXQNdw2E -DYYNjA2dDZ8NoQ2jDaUNrg2wDbINyg3ZDeIN6Q4ADg0ODw4RDhMONA42DjgOOg48Dj4OQA5FDkcOTQ5a -DlwOXg5gDoEOgw6FDocOiQ6LDo0OmA6aDqUOsg60DrYOuA7ZDtsO3Q7fDuEO4w7lDvkO+w8bDygPKg8s -Dy4PTw9RD1MPVQ9XD1kPWw9wD4IPjw+RD5MPlQ+2D7gPug+8D74PwA/CD9AP0g/lD/IP9A/2D/gQHRAf -ECEQIxAlECcQKRArEEQQRhBTEFUQVxBZEHYQeBB6EHwQfhCAEIIQkRCgELEQsxC1ELcQuRDCEM8Q0RDT -ENUQ9hD4EPoQ/xEBEQMRBREHERQRFhEsETkROxE9ET8RYBFiEWQRZhFoEWoRbBF9EX8RghGFEYgRkxGr -EbwRvhHAEcIRxBHhEeMR5RHnEekR6xHtEfgSGBIlEicSKRIrEkwSThJQElISVBJWElgSYRJjEm8SgBKC -EoQShhKIEqkSqxKtEq8SsRKzErUSwRLaEusS7RLvEvES8xMUExYTGBMaExwTHhMgEykTQhNPE1ETUxNV -E3YTeBN6E3wTfhOAE4ITjxORE5QTlxOdE58TrRO6E7wTvhPAE+ET4xPlE+cT6RPrE+0T+hP8FAMUEBQS -FBQUFhQ3FDkUOxQ9FD8UQRRDFGAUYhR0FIEUgxSFFIcUqBSqFKwUrhSwFLIUtBS5FLsUwRTOFNAU0hTU -FPUU9xT5FPsU/RT/FQEVKBVKFVcVWRVbFV0VghWEFYYViBWKFYwVjhWQFZsVnRWqFawVrhWwFdEV0xXV -FdcV2RXbFd0V4RXjFegV+RX7Ff0V/xYBFiIWJBYmFigWKhYsFi4WMxY1FkEWThZQFlIWVBZ1FncWeRZ7 -Fn0WfxaBFo4WkBaSFpQWoRajFq0Wuha8Fr4WwBbhFuMW5RbnFukW6xbtFvwW/hcNFx4XIBciFyQXJhdH -F0kXSxdNF08XURdTF10XXxdqF3cXeRd7F30XnhegF6IXpBemF6gXqhfBF8MX0hfbF+IX8Rf5GAIYBRis -GK4YsBiyGLQYthi4GLoYvBi+GMAYwhjEGMYYyBjKGMwYzxjRGNMY1hjYGNoY3BjeGOEY4xjmGOkY6xjt -GPAY8hj0GPcY+Rj7GP0Y/xkBGQMZBRkHGQkZCxkNGQ8ZERkTGRUZFxkZGRsZHRkfGSIZJRknGSkZLBku -GTAZMhk1GTgZOhk9GT8ZQRlDGUUZRxlJGUsZThlQGVMZVRlYGVoZXBleGWAZgRmDGYUZhxmJGYsZjRme -GaAZpRmuGbAZsxm1Gb4ZwxnsGfYZ/xoBGgMaBRoHGgkaCxoNGg8aGBonGjgaOho8Gj4aQBpJGksaVBpW -GlcaaRqSGqAarRqvGrEashq0GrUatxq5GrsaxBrGGssa1BrWGuEa4xrlGuca6RrrGxQbFhsYGxkbGxsc -Gx4bIBsiG0sbTRtPG1EbUxtVG1cbWRtbG2wbbhtxG3Qbdxt8G4UbhxuQG5IbrRuvG7Ebsxu1G7cbuRu7 -G70bvxvBG8MbxRvHG/Ab8hv0G/Ub9xv4G/ob/Bv+HCccKRwrHCwcLhwvHDEcMxw1HF4cYBxiHGQcZhxo -HGocbBxuHJccmRybHJ0cnxyhHKMcpRynHL4cxxzJHNIc1BzWHNgc2hz7HP0c/x0BHQMdBR0HHSUdTh1Q -HVIdVB1WHVgdWh1cHV4dbB15HXsdfR1/HYgdih2RHZMdlR2XHbgduh28Hb4dwB3CHcQd1x34Hfod/B3+ -HgAeAh4EHhEeMh40HjYeOB46HjwePh5KHnMedR53Hnkeex59Hn8egR6DHooekx6VHpoenB6eHsceyR7L -Hs0ezx7RHtMe1R7XHtwe5R7nHv4fAB8DHwYfCR8LHw4fEB8SHxQfFh8YH0EfQx9FH0YfSB9JH0sfTR9P -H3Afch91H3gfeh98H34flx+ZH8IfxB/GH8cfyR/KH8wfzh/QH/kf+x/9H/4gACABIAMgBSAHIBQgPSA/ -IEEgQyBFIEcgSSBLIE4gdyB5IHsgfiCAIIIghCCGIIkgjiCXIJkgpiCoIKogrCCuILAgsiC7IL0gwCDp -IOsg7SDwIPIg9CD2IPgg+yEHIRAhEiEbIR0hICEiITshZCFmIWghayFtIW8hcSFzIXYhfSGGIYghkSGT -IZwhniGgIaMhpSHOIdAh0iHTIdUh1iHYIdoh3CHrIgwiDiIRIhQiFiIYIhoiHiIgIikiKyIwIjkiOyJS -IlUiWCJbIl4iYCJiImQiZyJqImwibiKPIpEilCKXIpkimyKdIqUipyLQItIi1CLVItci2CLaItwi3iL7 -Iv0jACMCIwQjBiMIIxojQyNFI0cjSCNKI0sjTSNPI1EjWiNjI2UjciN0I3cjeSN8I38jgiOrI60jryOy -I7QjtiO4I7ojvSPJI9Ij1yPgI+MkiiSMJI8kkSSTJJUklySZJJsknSSfJKEkoySlJKckqSSrJK0krySx -JLMktSS3JLkkuyS9JL8kwSTDJMUkxyTJJMskzSTPJNEk0yTVJNck2STbJN0k3yThJOQk5iToJOok7CTu -JPAk8yT1JPck+ST7JP0k/yUBJQMlBSUHJQklCyUNJQ8lESUTJRUlFyUZJRslHiUgJSIlJCUmJSglKiUs -JS4lMSUzJTwlPyXoJeol7CXuJfAl8iX0JfYl+CX6Jfwl/iYAJgImBCYGJggmCyYOJhAmEiYUJhYmGCYa -JhwmHiYhJiMmJiYoJiomLSYvJjEmMyY2JjgmOiY9Jj8mQSZDJkUmRyZJJksmTSZPJlEmUyZVJlcmWSZb -Jl0mYCZjJmUmZyZqJmwmbiZwJnMmdSZ4JnsmfSZ/JoEmgyaFJocmiSaMJo4mkSaTJpYmmCaaJpwmnian -JqonUydWJ1knXCdfJ2InZSdoJ2snbidxJ3Qndyd6J30ngCeDJ4YniSeMJ48nkieVJ5gnmyeeJ6EnpCem -J6knrCevJ7IntSe4J7snvifBJ8QnxyfKJ80n0CfTJ9Yn2SfcJ98n4iflJ+gn6yfuJ/En9Cf3J/on/SgA -KAMoBigJKAwoDygSKBUoGCgbKB4oISgkKCcoKigtKDAoMyg2KDkoPCg/KEIoRShIKEsoVyiCKLMoyijl -KP4pHykrKTcpQylbKW4pgSmUKa0pwCnTKeYp9CoeKioqRSpkKm4qgyqQKpwqsSrNKuYq8isFKxwrMStL -K18rdiuIK6ArwCvlLAosJyw6LE8saiyRLLQsxyzZLOUs9y0TLUotaC10LZ4tqi3pLf0uFC4nLjMuPy5L -LmYugC6cLrku1S7jLvYvKS9AL1YvYi9uL4wvpC+wL8ov0y/WL9cv4C/jL+Qv7S/wMOUw5zDpMOsw7TDv -MPEw8zD1MPcw+TD7MP4xADEDMQUxBzEJMQwxDjERMRQxFjEYMRoxHDEeMSAxIjEkMSYxKDEqMSwxLjEw -MTIxNDE2MTkxOzE9MT8xQTFDMUYxSDFLMU4xUDFSMVQxVjFYMVsxXTFfMWExYzFlMWcxaTFrMW0xbzFx -MXMxdTF3MXkxezF9MX8xgTGDMYUxhzGJMYsxjTGPMZExkzGWMZgxmzGdMZ8xoTGjMaUxpzGpMasxrTGv -MbExszG1MbcxuTG7Mb4xwDHCMcQxxjHIMcoxzTHPMdEx0zHVMdcx2THcMd4x4THjMeUx5zHwMfMy6DLr -Mu4y8TL0Mvcy+jL9MwAzAzMGMwkzDDMPMxIzFTMYMxszHjMhMyQzJzMqMy0zMDMzMzYzOTM8Mz8zQjNF -M0gzSzNOM1EzVDNXM1ozXTNgM2MzZjNpM2wzbzNyM3UzeDN7M34zgTOEM4czijONM5AzkzOWM5kznDOf -M6IzpTOoM6szrjOxM7QztzO6M70zwDPDM8YzyTPMM88z0jPVM9gz2zPeM+Ez5DPnM+oz7TPwM/Mz9jP5 -M/wz/zQCNAU0CDQLNA40ETQUNBc0GjQdNCA0IzQmNCk0LDQvNDI0NTQ4NDs0PjRBNEQ0RzRKNE00UDRT -NFU0VzRZNFs0XTRfNGI0ZDRnNGk0bDRuNHA0czR2NHg0ejR8NH40hzSJNIs0jTSPNJE0kzSVNJc0mjSc -NJ40oDSiNKU0pzSpNKs0rTSvNLE0tDS2NLg0ujS8NL80wTTDNMU0xzTJNMs0zTTPNNE00zTWNNk02zTd -NN804jTkNOY06DTqNOw07jTwNPI09DT2NPg0+jT9NP81ATUDNQU1BzUKNQw1DjUQNRI1FDUXNRo1HDUe -NSA1IjUkNSY1KDUqNSw1LjUwNTI1NDU2NTg1OjU8NT41QDVCNUQ1RjVINUs1TTVPNVE1UzVVNVc1WTVb -NV01ZjVoNWk1cjV1NXY1fzWCNYM1jDWRAAAAAAAAAgIAAAAAAAAHsAAAAAAAAAAAAAAAAAAANaA +AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxECDAALAAwAMQA1ADkAQABD +AEQASABMAHYAfACMAJEAkgCTAJgAmQCaAJ0AoQCiAKUApgCqAK4AtQC5ALoAuwC8AMAAxwDNAM4AzwDQ +ANYA3gDjAOQA5QDmAOoA8wD3APgA+QD6AP4BBQEJAQoBCwEMARABFwEYARkBHQEkASgBKQEqASsBLwE2 +ATcBOAE5AT0BRAFJAUoBSwFMAVABWAFZAVoBXgFlAWYBZwFoAW0BdAF1AXYBegGBAYIBgwGEAYgBjwGQ +AZEBkgGWAZ0BngGfAaABpQGsAa0BrgGxAbIBswG3Ab4BvwHAAcEBxQHMAc0BzgHPAdMB2gHeAd8B4AHk +AesB7AHtAfEB+QH6AfsB/wIHAggCCQINAhQCFQIWAhcCHAIjAiQCJQImAisCLAIvAjQCNQI6AkECQgJD +AkcCTgJSAlMCVAJVAlkCYAJhAmICYwJnAm4CbwJwAnUCfAJ9An4CggKJAooCiwKPApYClwKYApkCnQKk +AqUCpgKqArECsgKzArcCvgK/AsACwQLFAswCzQLOAs8C0wLaAtsC3ALdAuEDNwM+Az8DQANHA0gDTwNT +A1QDVQNaA1wDZwNsA20DbgNwA3cDggODA4wDlQOcA50DngOnA20DqAOqA7oDwwPMA20DzQPPA9cD4ANt +A+ED6APvA/AD+QNtA/oEAAQHBAgEDwQQA20EGQQgBCEEIgQrA20ELAQuBDwERQNtBEYESARMBE0EVgRf +BGgDbQRpBG0AOARwBHEEegSDA20EhASSBJsEpANtBKUEqgSsBK8EsAS5BMIEwwTMA20EzQTWBN8E4ATj +BOQE5gU8BZMF6gXrBewF7QXuBe8F8AXxBfIF8wX0BfUF9gX3BfgF+QX6BfsF/AX9Bf4F/wYABgEGAgYD +BgQGBQYGBgcGCAYJBgoGCwYMBg0GDgYPBhAGEQYSBhMGFAYVBhYGFwYYBhkGGgYbBhwGHQYeBh8GIAYh +BiIGIwYkBiUGJgYnBigGKQYqBisGLAYtBi4GLwYwBjEGMgYzBjQGNQY2BjcGOAY5BjoGOwY8Bj8GQgbA +Bz4HPwdAB0EHQgdDB0QHRQdGB0cHSAdJB0oHSwdMB00HTgdPB1AHUQdSB1MHVAdVB1YHVwdYB1kHWgdb +B1wHXQdeB18HYAdhB2IHYwdkB2UHZgdnB2gHaQdqB2sHbAdtB24HbwdwB3EHcgdzB3QHdQd2B3cHeAd5 +B3oHewd8B30Hfgd/B4AHgQeCB4MHhAeFB4YHhweIB4kHigeLB4wHjQeOB48HkAeRB5IHkweUB5UHlgeX +B5gHmQeaB5sHnAedB54HnwegB6EHogejB6QHpQemB6cHqAepB6oHqwesB60HrgevB7AHsQeyB7MHtAe1 +B7YHtwe4B7kHvAe/B8JVJG51bGzfEBIADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4A +HwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADBWTlNSb290ViRjbGFzc11OU09iamVjdHNL +ZXlzXxAPTlNDbGFzc2VzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5T2lkc1ZhbHVlc11OU0Nvbm5lY3Rp +b25zW05TTmFtZXNLZXlzW05TRnJhbWV3b3JrXU5TQ2xhc3Nlc0tleXNaTlNPaWRzS2V5c11OU05hbWVz +VmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5Q29ubmVjdG9yc11OU0ZvbnRNYW5hZ2VyXxAQTlNWaXNpYmxl +V2luZG93c18QD05TT2JqZWN0c1ZhbHVlc18QF05TQWNjZXNzaWJpbGl0eU9pZHNLZXlzWU5TTmV4dE9p +ZFxOU09pZHNWYWx1ZXOAAoECC4DQgQGKgQIKgAmBATWABoEBiYEBi4EBNoECCIAAgAeBATSBAgkRA46B +AYzSAA4AMgAzADRbTlNDbGFzc05hbWWABYAD0gAOADYANwA4WU5TLnN0cmluZ4AEXU5TQXBwbGljYXRp +b27SADoAOwA8AD1YJGNsYXNzZXNaJGNsYXNzbmFtZaMAPQA+AD9fEA9OU011dGFibGVTdHJpbmdYTlNT +dHJpbmdYTlNPYmplY3TSADoAOwBBAEKiAEIAP15OU0N1c3RvbU9iamVjdF8QEElCQ29jb2FGcmFtZXdv +cmvSAA4ARQBGAEdaTlMub2JqZWN0c4AIoNIAOgA7AEkASqMASgBLAD9cTlNNdXRhYmxlU2V0VU5TU2V0 +0gAOAEUATQBOgM+vECcATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZABl +AGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAHIAcwB0AHWACoAYgB6AJIAqgDCANoA6gECARYBLgE+AVIBY +gF2AYoBngG6Ac4B4gH2AgYCFgImAjoCTgJaAmICcgKKAp4CrgK+As4C4gLyAwIDFgMrTAA4AdwB4AHkA +egB7WE5TU291cmNlV05TTGFiZWyAF4ALgBbYAA4AfQB+AH8AgACBAIIAgwCEAIUAhgCHAIgAiQCKAItX +TlNUaXRsZV8QEU5TS2V5RXF1aXZNb2RNYXNrWk5TS2V5RXF1aXZdTlNNbmVtb25pY0xvY1lOU09uSW1h +Z2VcTlNNaXhlZEltYWdlVk5TTWVudYAVgA0SABAAAIAOEn////+AD4ATgAzTAA4AfQCNAI4AjwCQW05T +TWVudUl0ZW1zgNuA9YD3XkNoZWNrIFNwZWxsaW5nUTvTAA4AMgCUAJUAlgCXXk5TUmVzb3VyY2VOYW1l +gBKAEIARV05TSW1hZ2VfEA9OU01lbnVDaGVja21hcmvSADoAOwCbAJyiAJwAP18QEE5TQ3VzdG9tUmVz +b3VyY2XTAA4AMgCUAJUAlgCggBKAEIAUXxAQTlNNZW51TWl4ZWRTdGF0ZdIAOgA7AKMApKIApAA/Wk5T +TWVudUl0ZW1eY2hlY2tTcGVsbGluZzrSADoAOwCnAKijAKgAqQA/XxAVTlNOaWJDb250cm9sQ29ubmVj +dG9yXk5TTmliQ29ubmVjdG9y0wAOAHcAeAB5AKwArYAXgBmAHdgADgB9AH4AfwCAAIEAggCDAIQAsACG +ALEAiACJAIoAtIAVgBuAHIAPgBOAGtMADgB9AI0AjgC3ALiA24DsgO1TQ3V0UXhUY3V0OtMADgB3AHgA +eQC+AL+AF4AfgCPYAA4AfQB+AH8AgACBAIIAgwCEAMIAhgDDAIgAiQCKAMaAFYAhgCKAD4ATgCDUAA4A +fQDIAI0AjgDKAMsAzFZOU05hbWWA24EBD4EBEYEBEFpDbGVhciBNZW51UF8QFWNsZWFyUmVjZW50RG9j +dW1lbnRzOtQADgDRAHcAeAB5AB8A1ADVXU5TRGVzdGluYXRpb26AF4ACgCWAKdgADgB9AH4AfwCAAIEA +ggCDAIQA2ADZANoAiACJAIoA3YAVgCcSABgAAIAogA+AE4Am1AAOAH0AyACNAI4A4ADhAOKA24EBHYEB +KoEBH1tIaWRlIE90aGVyc1FoXxAWaGlkZU90aGVyQXBwbGljYXRpb25zOtMADgB3AHgAeQDoAOmAF4Ar +gC/ZAA4AfQB+AH8AgACBAIIAgwDrAIQA7QCGAO4AiACJAIoA8QDyVU5TVGFngBWALYAugA+AE4AsEAPT +AA4AfQCNAI4A9QD2gNuA8oDzXUZpbmQgUHJldmlvdXNRR18QF3BlcmZvcm1GaW5kUGFuZWxBY3Rpb246 +0wAOAHcAeAB5APwA/YAXgDGANdgADgB9AH4AfwCAAIEAggCDAIQBAACGAQEAiACJAIoBBIAVgDOANIAP +gBOAMtMADgB9AI0AjgEHAQiA24EBLIEBLl1EZXRhaWxlZCBWaWV3UTFfEBBzZXREZXRhaWxlZFZpZXc6 +0wAOAHcAeAB5AQ4BD4AXgDeAOdgADgB9AH4AfwCAAIEAggCDAIQBEgCGAMMAiACJAIoAi4AVgDiAIoAP +gBOADF8QG0NoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZ18QHnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENo +ZWNraW5nOtMADgB3AHgAeQEbARyAF4A7gD/YAA4AfQB+AH8AgACBAIIAgwCEAR8AhgEgAIgAiQCKASOA +FYA9gD6AD4ATgDzTAA4AfQCNAI4BJgEngNuBAQqBAQtXT3Blbi4uLlFvXW9wZW5Eb2N1bWVudDrTAA4A +dwB4AHkBLQEugBeAQYBE2AAOAH0AfgB/AIAAgQCCAIMAhAExANkBMgCIAIkAigEEgBWAQoBDgA+AE4Ay +XFNob3cgVG9vbGJhclF0XxATdG9nZ2xlVG9vbGJhclNob3duOtMADgB3AHgAeQE7ATyAF4BGgErYAA4A +fQB+AH8AgACBAIIAgwCEAT8AhgFAAIgAiQCKAUOAFYBIgEmAD4ATgEfUAA4AfQDIAI0AjgFGAUcBSIDb +gOCA44DhWE1pbmltaXplUW1fEBNwZXJmb3JtTWluaWF0dXJpemU60wAOAHcAeAB5AU4A6YAXgEyAL9kA +DgB9AH4AfwCAAIEAggCDAOsAhAFSAIYBUwCIAIkAigDxAVeAFYBNgE6AD4ATgCwQAWUARgBpAG4AZCAm +UWbTAA4AdwB4AHkBXAFdgBeAUIBT2AAOAH0AfgB/AIAAgQCCAIMAhAFgAIYBYQCIAIkAigEjgBWAUYBS +gA+AE4A8ZgBQAHIAaQBuAHQgJlFwVnByaW50OtQADgDRAHcAeAB5AB8BawFsgBeAAoBVgFfYAA4AfQB+ +AH8AgACBAIIAgwCEAW8AhgDDAIgAiQCKAN2AFYBWgCKAD4ATgCZYU2hvdyBBbGxfEBZ1bmhpZGVBbGxB +cHBsaWNhdGlvbnM60wAOAHcAeAB5AXgBeYAXgFmAXNgADgB9AH4AfwCAAIEAggCDAIQBfACGAX0AiACJ +AIoBBIAVgFqAW4APgBOAMlhSYXcgVmlld1EyW3NldFJhd1ZpZXc60wAOAHcAeAB5AYYBh4AXgF6AYdgA +DgB9AH4AfwCAAIEAggCDAIQBigCGAYsAiACJAIoAtIAVgF+AYIAPgBOAGlVQYXN0ZVF2VnBhc3RlOtMA +DgB3AHgAeQGUAZWAF4BjgGbYAA4AfQB+AH8AgACBAIIAgwCEAZgAhgGZAIgAiQCKALSAFYBkgGWAD4AT +gBpUVW5kb1F6VXVuZG861AAOANEAdwB4AHkBogGjAaSAF4BrgGiAbdgADgB9AH4AfwCAAIEAggCDAIQB +pwCGAagAiACJAIoBI4AVgGmAaoAPgBOAPFRTYXZlUXPSAA4AMgAzAbCABYBsXxAVQXBwbGljYXRpb25D +b250cm9sbGVyW3NhdmVBY3Rpb2460wAOAHcAeAB5AbUBtoAXgG+ActgADgB9AH4AfwCAAIEAggCDAIQB +uQCGAboAiACJAIoBI4AVgHCAcYAPgBOAPFVDbG9zZVF3XXBlcmZvcm1DbG9zZTrTAA4AdwB4AHkBwwHE +gBeAdIB32AAOAH0AfgB/AIAAgQCCAIMAhAHHAIYByACIAIkAigEEgBWAdYB2gA+AE4AyWVRyZWUgVmll +d1EzXHNldFRyZWVWaWV3OtMADgB3AHgAeQHRAdKAF4B5gHzXAA4AfQB/AIAAgQCCAIMAhAHVAMMAiACJ +AIoB2YAVgHuAIoAPgBOAetMADgB9AI0AjgHcAd2A24DZgNpeU3RhcnQgU3BlYWtpbmdec3RhcnRTcGVh +a2luZzrTAA4AdwB4AHkB4gHjgBeAfoCA2AAOAH0AfgB/AIAAgQCCAIMAhAHmAIYAwwCIAIkAigC0gBWA +f4AigA+AE4AaVkRlbGV0ZVdkZWxldGU60wAOAHcAeAB5Ae8A6YAXgIKAL9kADgB9AH4AfwCAAIEAggCD +AOsAhAHzAIYB9ACIAIkAigDxAfiAFYCDgISAD4ATgCwQAllGaW5kIE5leHRRZ9MADgB3AHgAeQH9AOmA +F4CGgC/ZAA4AfQB+AH8AgACBAIIAgwDrAIQCAQCGAgIAiACJAIoA8QIGgBWAh4CIgA+AE4AsEAdfEBZV +c2UgU2VsZWN0aW9uIGZvciBGaW5kUWXTAA4AdwB4AHkCCwIMgBeAioCN2AAOAH0AfgB/AIAAgQCCAIMA +hAIPAIYCEACIAIkAigC0gBWAi4CMgA+AE4AaVFJlZG9RWlVyZWRvOtQADgDRAHcAeAB5AB8CGgIbgBeA +AoCPgJLYAA4AfQB+AH8AgACBAIIAgwCEAh4AhgIfAIgAiQCKAN2AFYCQgJGAD4ATgCZZUXVpdCBHaXRY +UXFadGVybWluYXRlOtQADgDRAHcAeAInAaIAHwIqgJWAa4ACgJRYZGVsZWdhdGXSADoAOwItAi6jAi4A +qQA/XxAUTlNOaWJPdXRsZXRDb25uZWN0b3LUAA4A0QB3AHgCJwAfAaICM4CVgAKAa4CXXmZpcnN0UmVz +cG9uZGVy1AAOANEAdwB4AHkAHwI4AjmAF4ACgJmAm9cADgB9AH8AgACBAIIAgwCEAjwAwwCIAIkAigDd +gBWAmoAigA+AE4AmWkFib3V0IEdpdFhfEB1vcmRlckZyb250U3RhbmRhcmRBYm91dFBhbmVsOtMADgB3 +AHgAeQJFAkaAF4CdgKHYAA4AfQB+AH8AgACBAIIAgwCEAkkAhgJKAIgAiQCKAk2AFYCfgKCAD4ATgJ7T +AA4AfQCNAI4CUAJRgNuBARWBARdcR2l0VGVzdCBIZWxwUT9Zc2hvd0hlbHA60wAOAHcAeAB5AlcCWIAX +gKOAptgADgB9AH4AfwCAAIEAggCDAIQCWwCGAlwAiACJAIoA8YAVgKSApYAPgBOALF8QEUp1bXAgdG8g +U2VsZWN0aW9uUWpfEB1jZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhOtMADgB3AHgAeQJlAmaAF4Co +gKrYAA4AfQB+AH8AgACBAIIAgwCEAmkAhgDDAIgAiQCKAQSAFYCpgCKAD4ATgDJvEBIAQwB1AHMAdABv +AG0AaQB6AGUAIABUAG8AbwBsAGIAYQByICZfEB9ydW5Ub29sYmFyQ3VzdG9taXphdGlvblBhbGV0dGU6 +1AAOANEAdwB4AHkAHwJzAnSAF4ACgKyArtgADgB9AH4AfwCAAIEAggCDAIQCdwCGANoAiACJAIoA3YAV +gK2AKIAPgBOAJlxIaWRlIEdpdFRlc3RVaGlkZTrTAA4AdwB4AHkCgAKBgBeAsICy1wAOAH0AfwCAAIEA +ggCDAIQChADDAIgAiQCKAdmAFYCxgCKAD4ATgHpdU3RvcCBTcGVha2luZ11zdG9wU3BlYWtpbmc60wAO +AHcAeAB5Ao0CjoAXgLSAt9gADgB9AH4AfwCAAIEAggCDAIQCkQCGApIAiACJAIoAi4AVgLWAtoAPgBOA +DG4AUwBoAG8AdwAgAFMAcABlAGwAbABpAG4AZyAmUTpfEA9zaG93R3Vlc3NQYW5lbDrTAA4AdwB4AHkC +mwKcgBeAuYC72AAOAH0AfgB/AIAAgQCCAIMAhAKfAIYAwwCIAIkAigFDgBWAuoAigA+AE4BHXxASQnJp +bmcgQWxsIHRvIEZyb250XxAPYXJyYW5nZUluRnJvbnQ60wAOAHcAeAB5AqgCqYAXgL2Av9gADgB9AH4A +fwCAAIEAggCDAIQCrACGAMMAiACJAIoBQ4AVgL6AIoAPgBOAR1Rab29tXHBlcmZvcm1ab29tOtMADgB3 +AHgAeQK1AraAF4DBgMTYAA4AfQB+AH8AgACBAIIAgwCEArkAhgK6AIgAiQCKALSAFYDCgMOAD4ATgBpa +U2VsZWN0IEFsbFFhWnNlbGVjdEFsbDrTAA4AdwB4AHkCwwLEgBeAxoDJ2AAOAH0AfgB/AIAAgQCCAIMA +hALHAIYCyACIAIkAigC0gBWAx4DIgA+AE4AaVENvcHlRY1Vjb3B5OtMADgB3AHgAeQLRAtKAF4DLgM7Y +AA4AfQB+AH8AgACBAIIAgwCEAtUAhgLWAIgAiQCKASOAFYDMgM2AD4ATgDxrAFAAYQBnAGUAIABTAGUA +dAB1AHAgJlFQXnJ1blBhZ2VMYXlvdXQ60gA6ADsC3gLfowLfAuAAP15OU011dGFibGVBcnJheVdOU0Fy +cmF50gAOAEUC4gLjgQEzrxBTAaMCtQLmAucC6AHZAdEC6wKbAu0BwwGGAtEC8QLyAvMAvgL1AWsC9wL4 +AmUCRQJzAvwCwwIaAv8DAACsAwIAxgMEAwUAiwILAHoBQwKAAU4BBAMNAS0B/QMQAPwDEgDxALQBeAKo +AxcCjQGiAxoDGwEjAQ4DHgMfAlcDIQFcAe8CTQMlAOgDJwMoATsDKgI4AywA1AMuAy8DMAHiAZQDMwDd +ARsBtYBogMGA0YDUgNaAeoB5gNyAuYDkgHSAXoDLgOWA5oDigB+A6YBVgQEEgQEHgKiAnYCsgQESgMaA +j4EBE4EBFIAZgQEYgCCA3YEBK4AMgIqAC4BHgLCATIAygQEggEGAhoEBL4AxgQEcgCyAGoBZgL2BAQyA +tIBrgQEhgQEkgDyAN4DXgPiAo4D0gFCAgoCegP6AK4DugQExgEaBASiAmYEBAoAlgQEAgQEpgPqAfoBj +gO+AJoA7gG/YAA4AfQB+AH8AgACBAIIAgwCEAzkAhgM6AIgAiQCKAN2AFYDSgNOAD4ATgCZsAFAAcgBl +AGYAZQByAGUAbgBjAGUAcyAmUSzXAA4AfQB/AIAAgQCCAIMAhANCAMMAiACJAIoBI4AVgNWAIoAPgBOA +PF8QD1JldmVydCB0byBTYXZlZNgADgB9AH4AfwCAAIEAggCDAIQDSgCGAVMAiACJAIoDHoAVgNiAToAP +gBOA19MADgB9AI0AjgNRA1KA24D7gP1fEBBTbWFydCBDb3B5L1Bhc3RlVlNwZWVjaNIADgBFAE0DV4DP +ogHRAoCAeYCw0gA6ADsDWwCDogCDAD/aAA4DXQB9AH4AfwCAAIEAggCDA14AhAFDA2EAhgDDAIgAiQCK +AwQDZllOU1N1Ym1lbnVYTlNBY3Rpb26AFYBHgN6AIoAPgBOA3YDf1AAOAH0AyACNAI4DaQNqA2uA24EB +GoEBMIEBG1ZXaW5kb3dec3VibWVudUFjdGlvbjrSAA4ANgA3A2yABNIADgBFAE0DcoDPpAE7AqgC8wKb +gEaAvYDigLnaAA4AfQB+A3gAfwN5AIAAgQCCAIMAhADDAIYDfADDA3wAiACJAIoBQ11OU0lzU2VwYXJh +dG9yXE5TSXNEaXNhYmxlZIAVgCIJgCIJgA+AE4BHXl9OU1dpbmRvd3NNZW512gAOAH0AfgN4AH8DeQCA +AIEAggCDAIQAwwCGA3wAwwN8AIgAiQCKALSAFYAiCYAiCYAPgBOAGtoADgB9AH4DeAB/A3kAgACBAIIA +gwCEAMMAhgN8AMMDfACIAIkAigDdgBWAIgmAIgmAD4ATgCbYAA4AfQB+AH8AgACBAIIAgwCEA5cAhgOY +AIgAiQCKASOAFYDngOiAD4ATgDxTTmV3UW7aAA4DXQB9AH4AfwCAAIEAggCDA14AhAC0A6EAhgDDAIgA +iQCKAwQDpoAVgBqA6oAigA+AE4DdgOtURWRpdNIADgA2ADcDp4AE0gAOAEUATQOsgM+tAZQCCwLtAKwC +wwGGAeICtQMnAzMDIQMwAyyAY4CKgOSAGYDGgF6AfoDBgO6A74D0gPqBAQLaAA4AfQB+A3gAfwN5AIAA +gQCCAIMAhADDAIYDfADDA3wAiACJAIoAtIAVgCIJgCIJgA+AE4Aa2gAOA10AfQB+AH8AgACBAIIAgwNe +AIQA8QPGAIYAwwCIAIkAigC0A8uAFYAsgPCAIoAPgBOAGoDxVEZpbmTSAA4ANgA3A8yABNIADgBFAE0D +0YDPpQFOAe8A6AH9AleATICCgCuAhoCj2gAOA10AfQB+AH8AgACBAIIAgwNeAIQAiwCPAIYAwwCIAIkA +igC0A9+AFYAMgPWAIoAPgBOAGoD2XxAUU3BlbGxpbmcgYW5kIEdyYW1tYXLSAA4ARQBNA+OAz6QCjQB6 +AQ4DH4C0gAuAN4D42AAOAH0AfgB/AIAAgQCCAIMAhAPqAIYAwwCIAIkAigCLgBWA+YAigA+AE4AMXxAb +Q2hlY2sgR3JhbW1hciBXaXRoIFNwZWxsaW5n2gAOA10AfQB+AH8AgACBAIIAgwNeAIQDHgNRAIYAwwCI +AIkAigC0A/iAFYDXgPuAIoAPgBOAGoD8XVN1YnN0aXR1dGlvbnPSAA4ARQBNA/yAz6MC6AMlAy6A1oD+ +gQEA2AAOAH0AfgB/AIAAgQCCAIMAhAQCAIYB9ACIAIkAigMegBWA/4CEgA+AE4DXXFNtYXJ0IFF1b3Rl +c9gADgB9AH4AfwCAAIEAggCDAIQECgCGAO4AiACJAIoDHoAVgQEBgC6AD4ATgNdbU21hcnQgTGlua3Pa +AA4DXQB9AH4AfwCAAIEAggCDA14AhAHZAdwAhgDDAIgAiQCKALQEGIAVgHqA2YAigA+AE4AagQED2AAO +AH0AfgB/AIAAgQCCAIMAhAQbAIYEHACIAIkAigEjgBWBAQWBAQaAD4ATgDxoAFMAYQB2AGUAIABBAHMg +JlFT2gAOA10AfQB+AH8AgACBAIIAgwNeAIQBIwQlAIYAwwCIAIkAigMEBCqAFYA8gQEIgCKAD4ATgN2B +AQlURmlsZdIADgA2ADcEK4AE0gAOAEUATQQwgM+rAvIBGwMXAvwBtQGjAvcC5wL/AtEBXIDmgDuBAQyB +ARKAb4BogQEEgNSBAROAy4BQ2gAOA10AfQB+AH8AgACBAIIAgwNeAIQAxgQ/AIYAwwCIAIkAigEjBESA +FYAggQENgCKAD4ATgDyBAQ5bT3BlbiBSZWNlbnTSAA4ANgA3BEWABNIADgBFAE0ESoDPoQC+gB9fEBZf +TlNSZWNlbnREb2N1bWVudHNNZW512gAOAH0AfgN4AH8DeQCAAIEAggCDAIQAwwCGA3wAwwN8AIgAiQCK +ASOAFYAiCYAiCYAPgBOAPNoADgB9AH4DeAB/A3kAgACBAIIAgwCEAMMAhgN8AMMDfACIAIkAigEjgBWA +IgmAIgmAD4ATgDzaAA4DXQB9AH4AfwCAAIEAggCDA14AhAJNAlAAhgDDAIgAiQCKAwQEZ4AVgJ6BARWA +IoAPgBOA3YEBFlRIZWxw0gAOAEUATQRrgM+hAkWAndIADgAyADMEb4AFgQEZWE1haW5NZW510gAOAEUA +TQRzgM+mAxIC+AL1AwUC6wMAgQEcgQEHgOmBASuA3IEBFNoADgNdAH0AfgB/AIAAgQCCAIMDXgCEAN0A +4ACGAMMAiACJAIoDBASCgBWAJoEBHYAigA+AE4DdgQEeVEdpdFjSAA4ARQBNBIaAz6sCOAMNAuYC8QMa +AyoCcwDUAWsDLwIagJmBASCA0YDlgQEhgQEogKyAJYBVgQEpgI/aAA4AfQB+A3gAfwN5AIAAgQCCAIMA +hADDAIYDfADDA3wAiACJAIoA3YAVgCIJgCIJgA+AE4Am2gAOA10AfQB+AH8AgACBAIIAgwNeAIQDGwSe +AIYAwwCIAIkAigDdBKOAFYEBJIEBIoAigA+AE4AmgQEjWFNlcnZpY2Vz1AAOAH0AyACNAI4EpwSoBKmA +24EBJYEBJ4EBJtIADgA2ADcEpIAE0gAOAEUATQSugM+gXxAPX05TU2VydmljZXNNZW512gAOAH0AfgN4 +AH8DeQCAAIEAggCDAIQAwwCGA3wAwwN8AIgAiQCKAN2AFYAiCYAiCYAPgBOAJtoADgB9AH4DeAB/A3kA +gACBAIIAgwCEAMMAhgN8AMMDfACIAIkAigDdgBWAIgmAIgmAD4ATgCZcX05TQXBwbGVNZW512gAOA10A +fQB+AH8AgACBAIIAgwNeAIQBBAEHAIYAwwCIAIkAigMEBMuAFYAygQEsgCKAD4ATgN2BAS1UVmlld9IA +DgBFAE0Ez4DPpgEtAmUDEAD8AXgBw4BBgKiBAS+AMYBZgHTaAA4AfQB+A3gAfwN5AIAAgQCCAIMAhADD +AIYDfADDA3wAiACJAIoBBIAVgCIJgCIJgA+AE4AyW19OU01haW5NZW510gAOADIAMwTigAWBATJfEB5Q +QlJlcG9zaXRvcnlEb2N1bWVudENvbnRyb2xsZXLSADoAOwTlAuCiAuAAP9IADgBFAuIE6IEBM68QUwEj +ALQA3QEjAx4DLAHZAwQBQwC0AQQAtAEjAN0BIwFDAMYDBADdASMDBAEEAk0A3QEjALQA3QEjAwQAtAAf +AxcAHwMEAyEAtACLAusB2QDxAwUA3QEEAPEBBAEEAwQDMwL1AQQBQwEjAIsAHwDdAxoC+ACLAzAAiwDx +ALQBIwDxAwADHgDxALQAHwFDAN0A3QC0AN0DHgDdALQAtAC0ALQDEgEjASOAPIAagCaAPIDXgQECgHqA +3YBHgBqAMoAagDyAJoA8gEeAIIDdgCaAPIDdgDKAnoAmgDyAGoAmgDyA3YAagAKBAQyAAoDdgPSAGoAM +gNyAeoAsgQErgCaAMoAsgDKAMoDdgO+A6YAygEeAPIAMgAKAJoEBIYEBB4AMgPqADIAsgBqAPIAsgQEU +gNeALIAagAKAR4AmgCaAGoAmgNeAJoAagBqAGoAagQEcgDyAPNIADgBFAuIFPoEBM68QVAMzAaMC5gLn +Ay8B2QHRAusC6ALtAy4BhgLRAvEC8wLyAvUAvgL3AWsC+AJlAsMCRQL8AnMCGgMAAKwC/wMFAwIDBADG +AIsCCwFDAHoBBAKAAU4BLQMNAf0DEAD8AxIA8QC0AXgCqAGiAxcCjQEjAxoDHgMbAQ4DHwJXAyEBXAHv +Ak0DJQAfAOgDJwMoATsDKgI4AywCmwDUAzABwwHiARsBtQDdArUBlIDvgGiA0YDUgQEpgHqAeYDcgNaA +5IEBAIBegMuA5YDigOaA6YAfgQEEgFWBAQeAqIDGgJ2BARKArICPgQEUgBmBAROBASuBARiA3YAggAyA +ioBHgAuAMoCwgEyAQYEBIICGgQEvgDGBARyALIAagFmAvYBrgQEMgLSAPIEBIYDXgQEkgDeA+ICjgPSA +UICCgJ6A/oACgCuA7oEBMYBGgQEogJmBAQKAuYAlgPqAdIB+gDuAb4AmgMGAY9IADgBFAuIFlYEBM68Q +VAWWBZcFmAWZBZoFmwWcBZ0FngWfBaAFoQWiBaMFpAWlBaYFpwWoBakFqgWrBawFrQWuBa8FsAWxBbIF +swW0BbUDaQW3BbgFuQW6BbsFvAW9Bb4FvwXABcEFwgXDBcQFxQXGBccFyAGwBcoFywXMBc0FzgXPBdAF +0QXSBdMF1AXVBdYF1wXYBdkF2gXbBdwF3QXeBd8F4AXhBeIF4wXkBeUF5gXnBegF6YEBN4EBOIEBOYEB +OoEBO4EBPIEBPYEBPoEBP4EBQIEBQYEBQoEBQ4EBRIEBRYEBRoEBR4EBSIEBSYEBSoEBS4EBTIEBTYEB +ToEBT4EBUIEBUYEBUoEBU4EBVIEBVYEBVoEBGoEBV4EBWIEBWYEBWoEBW4EBXIEBXYEBXoEBX4EBYIEB +YYEBYoEBY4EBZIEBZYEBZoEBZ4EBaIBsgQFpgQFqgQFrgQFsgQFtgQFugQFvgQFwgQFxgQFygQFzgQF0 +gQF1gQF2gQF3gQF4gQF5gQF6gQF7gQF8gQF9gQF+gQF/gQGAgQGBgQGCgQGDgQGEgQGFgQGGgQGHgQGI +XxAQTWVudSBJdGVtIChGaW5kKV8QEE1lbnUgSXRlbSAoU2F2ZSlvEBgATQBlAG4AdQAgAEkAdABlAG0A +IAAoAFAAcgBlAGYAZQByAGUAbgBjAGUAcyAmAClfEBtNZW51IEl0ZW0gKFJldmVydCB0byBTYXZlZClb +U2VwYXJhdG9yLTldTWVudSAoU3BlZWNoKV8QGk1lbnUgSXRlbSAoU3RhcnQgU3BlYWtpbmcpXxASTWVu +dSBJdGVtIChXaW5kb3cpXxAcTWVudSBJdGVtIChTbWFydCBDb3B5L1Bhc3RlKVtTZXBhcmF0b3ItMV8Q +F01lbnUgSXRlbSAoU21hcnQgTGlua3MpXxARTWVudSBJdGVtIChQYXN0ZSlvEBcATQBlAG4AdQAgAEkA +dABlAG0AIAAoAFAAYQBnAGUAIABTAGUAdAB1AHAgJgApW1NlcGFyYXRvci02WVNlcGFyYXRvcl8QD01l +bnUgSXRlbSAoTmV3KV8QEE1lbnUgSXRlbSAoRWRpdClfEBZNZW51IEl0ZW0gKENsZWFyIE1lbnUpbxAU +AE0AZQBuAHUAIABJAHQAZQBtACAAKABTAGEAdgBlACAAQQBzICYAKV8QFE1lbnUgSXRlbSAoU2hvdyBB +bGwpXxAQTWVudSBJdGVtIChGaWxlKW8QHgBNAGUAbgB1ACAASQB0AGUAbQAgACgAQwB1AHMAdABvAG0A +aQB6AGUAIABUAG8AbwBsAGIAYQByICYAKV8QEE1lbnUgSXRlbSAoQ29weSlfEBhNZW51IEl0ZW0gKEdp +dFRlc3QgSGVscClbU2VwYXJhdG9yLTNfEBhNZW51IEl0ZW0gKEhpZGUgR2l0VGVzdClfEBVNZW51IEl0 +ZW0gKFF1aXQgR2l0WClfEBBNZW51IEl0ZW0gKEhlbHApXxAPTWVudSBJdGVtIChDdXQpW1NlcGFyYXRv +ci00XxAQTWVudSBJdGVtIChWaWV3KVtBcHBsaWNhdGlvbl8QEk1lbnUgKE9wZW4gUmVjZW50KV8QG01l +bnUgKFNwZWxsaW5nIGFuZCBHcmFtbWFyKV8QEE1lbnUgSXRlbSAoUmVkbyldTWVudSAoV2luZG93KV8Q +Gk1lbnUgSXRlbSAoQ2hlY2sgU3BlbGxpbmcpW01lbnUgKFZpZXcpXxAZTWVudSBJdGVtIChTdG9wIFNw +ZWFraW5nKW8QEQBNAGUAbgB1ACAASQB0AGUAbQAgACgARgBpAG4AZCAmAClfEBhNZW51IEl0ZW0gKFNo +b3cgVG9vbGJhcilbU2VwYXJhdG9yLTdfECJNZW51IEl0ZW0gKFVzZSBTZWxlY3Rpb24gZm9yIEZpbmQp +W1NlcGFyYXRvci01XxAZTWVudSBJdGVtIChEZXRhaWxlZCBWaWV3KV8QEE1lbnUgSXRlbSAoR2l0WClb +TWVudSAoRmluZClbTWVudSAoRWRpdClfEBRNZW51IEl0ZW0gKFJhdyBWaWV3KV8QEE1lbnUgSXRlbSAo +Wm9vbSlfEBdNZW51IEl0ZW0gKE9wZW4gUmVjZW50KW8QGgBNAGUAbgB1ACAASQB0AGUAbQAgACgAUwBo +AG8AdwAgAFMAcABlAGwAbABpAG4AZyAmAClbTWVudSAoRmlsZSlfEBRNZW51IEl0ZW0gKFNlcnZpY2Vz +KV8QFE1lbnUgKFN1YnN0aXR1dGlvbnMpXxAPTWVudSAoU2VydmljZXMpXxAnTWVudSBJdGVtIChDaGVj +ayBTcGVsbGluZyBXaGlsZSBUeXBpbmcpXxAnTWVudSBJdGVtIChDaGVjayBHcmFtbWFyIFdpdGggU3Bl +bGxpbmcpXxAdTWVudSBJdGVtIChKdW1wIHRvIFNlbGVjdGlvbilfECBNZW51IEl0ZW0gKFNwZWxsaW5n +IGFuZCBHcmFtbWFyKW8QEgBNAGUAbgB1ACAASQB0AGUAbQAgACgAUAByAGkAbgB0ICYAKV8QFU1lbnUg +SXRlbSAoRmluZCBOZXh0KVtNZW51IChIZWxwKV8QGE1lbnUgSXRlbSAoU21hcnQgUXVvdGVzKVxGaWxl +J3MgT3duZXJfEBlNZW51IEl0ZW0gKEZpbmQgUHJldmlvdXMpW1NlcGFyYXRvci0yXxAeUmVwb3NpdG9y +eSBEb2N1bWVudCBDb250cm9sbGVyXxAUTWVudSBJdGVtIChNaW5pbWl6ZSlbU2VwYXJhdG9yLThfEBZN +ZW51IEl0ZW0gKEFib3V0IEdpdFgpXxASTWVudSBJdGVtIChTcGVlY2gpXxAeTWVudSBJdGVtIChCcmlu +ZyBBbGwgdG8gRnJvbnQpXxAXTWVudSBJdGVtIChIaWRlIE90aGVycylfEBlNZW51IEl0ZW0gKFN1YnN0 +aXR1dGlvbnMpXxAVTWVudSBJdGVtIChUcmVlIFZpZXcpXxASTWVudSBJdGVtIChEZWxldGUpXxATTWVu +dSBJdGVtIChPcGVuLi4uKV8QEU1lbnUgSXRlbSAoQ2xvc2UpW01lbnUgKEdpdFgpXxAWTWVudSBJdGVt +IChTZWxlY3QgQWxsKV8QEE1lbnUgSXRlbSAoVW5kbynSAA4ARQLiBj6BATOg0gAOAEUC4gZBgQEzoNIA +DgBFAuIGRIEBM68QewLmAugC6wLtAFgC0QBpAGYBawLDAG4C/wMAAKwAawBeAMYDBQBzAHoBTgB0AS0B +/QBZAG0DEgC0AFsDGgEjAQ4DHgMhAFoB7wJNAGcAagBiAB8AYQE7AjgAcQMsAy4B2QHDAy8DMAHiAZQD +MwGjAN0BtQBcAucAYwBlAFEAXwGGAvEAUALyAvMAvgL1AFIAZAL3AvgCZQJFAnMC/ABPAhoAVwBvAwID +BABwAIsCCwBsAUMAXQKAAQQAdQMNAxAA/ADxAXgCqAMXAo0BogMbAFQAVgBgAx8CVwBoAFMBXAMlAOgD +JwMoAHIDKgKbANQCtQEbAdEAVYDRgNaA3IDkgEWAy4CWgImAVYDGgKuBAROBARSAGYCcgGKAIIEBK4DA +gAuATIDFgEGAhoBLgKeBARyAGoBUgQEhgDyAN4DXgPSAT4CCgJ6AjoCYgHiAAoBzgEaAmYC4gQECgQEA +gHqAdIEBKYD6gH6AY4DvgGiAJoBvgFiA1IB9gIWAHoBngF6A5YAYgOaA4oAfgOmAJICBgQEEgQEHgKiA +nYCsgQESgAqAj4BAgK+BARiA3YCzgAyAioCigEeAXYCwgDKAyoEBIIEBL4AxgCyAWYC9gQEMgLSAa4EB +JIAwgDqAboD4gKOAk4AqgFCA/oArgO6BATGAvIEBKIC5gCWAwYA7gHmANtIADgBFAuIGwoEBM68QewbD +BsQGxQbGBscGyAbJBsoGywbMBs0GzgbPBtAG0QbSBtMG1AbVBtYG1wbYBtkG2gbbBtwG3QbeBt8G4Abh +BuIG4wbkBuUG5gbnBugG6QbqBusG7AbtBu4G7wbwBvEG8gbzBvQG9Qb2BvcG+Ab5BvoG+wb8Bv0G/gb/ +BwAHAQcCBwMHBAcFBwYHBwcIBwkHCgcLBwwHDQcOBw8HEAcRBxIHEwcUBxUHFgcXBxgHGQcaBxsHHAcd +Bx4HHwcgByEHIgcjByQHJQcmBycHKAcpByoHKwcsBy0HLgcvBzAHMQcyBzMHNAc1BzYHNwc4BzkHOgc7 +BzwHPYEBjYEBjoEBj4EBkIEBkYEBkoEBk4EBlIEBlYEBloEBl4EBmIEBmYEBmoEBm4EBnIEBnYEBnoEB +n4EBoIEBoYEBooEBo4EBpIEBpYEBpoEBp4EBqIEBqYEBqoEBq4EBrIEBrYEBroEBr4EBsIEBsYEBsoEB +s4EBtIEBtYEBtoEBt4EBuIEBuYEBuoEBu4EBvIEBvYEBvoEBv4EBwIEBwYEBwoEBw4EBxIEBxYEBxoEB +x4EByIEByYEByoEBy4EBzIEBzYEBzoEBz4EB0IEB0YEB0oEB04EB1IEB1YEB1oEB14EB2IEB2YEB2oEB +24EB3IEB3YEB3oEB34EB4IEB4YEB4oEB44EB5IEB5YEB5oEB54EB6IEB6YEB6oEB64EB7IEB7YEB7oEB +74EB8IEB8YEB8oEB84EB9IEB9YEB9oEB94EB+IEB+YEB+oEB+4EB/IEB/YEB/oEB/4ECAIECAYECAoEC +A4ECBIECBYECBoECBxCBENoQ8RCcEPcQTREDZBCyEJYQnRCYEEoQZxCgEHoQtBB9EQFSELMQvRCaELUR +AVUQoRDHEQFXEDgQqRCZEIMQURC/ENcQuBBWEKcQahCLEI4RAQERA40RA4oQ9hA6EPkQ4BDYEOERA1QQ +lRDWEKQQnhCoEEsQORBJEQOJEHAQwxDKEH8Q0xCrEI8QrxBSEPMQfhCjEJIQyBBQEFMRAVQQbxCGEE8Q +vhCIEQFWEQECE//////////9EB0QvBC5EK0QyxDyELAQ5BEBUxBXEMQRA08RA1AQnxEDUxD0EHwQuxDN +EIIRA4gRA4sQwRDUEJsQzhDJEE4Q2xCiEK4RA4wQ+BCQEPUQkRCsEEgQ4xDA0gAOAEUATQe7gM+g0gAO +AEUC4ge+gQEzoNIADgBFAuIHwYEBM6DSADoAOwfDB8SiB8QAP15OU0lCT2JqZWN0RGF0YQAIABkAIgAn +ADEAOgA/AEQAUgBUAGYEggSIBNME2gThBO8FAQUdBSsFNwVDBVEFXAVqBYYFlAWnBbkF0wXdBeoF7AXv +BfEF9AX3BfkF/AX+BgEGBAYHBgoGDAYOBhEGFAYXBhoGIwYvBjEGMwY8BkYGSAZWBl8GaAZzBnoGjAaV +Bp4GpwasBrsGzgbXBuIG5AblBu4G9QcCBwgHEQcTB2QHZgdoB2oHbAduB3AHcgd0B3YHeAd6B3wHfgeA +B4IHhAeGB4gHigeMB44HkAeSB5QHlgeYB5oHnAeeB6AHogekB6YHqAeqB6wHrgewB7IHvwfIB9AH0gfU +B9YH9wf/CBMIHggsCDYIQwhKCEwITghTCFUIWghcCF4IYAhtCHkIewh9CH8IjgiQCJ0IrAiuCLAIsgi6 +CMwI1QjaCO0I+gj8CP4JAAkTCRwJIQksCTsJRAlLCWMJcgl/CYEJgwmFCaYJqAmqCawJrgmwCbIJvwnB +CcMJxQnJCcsJ0AndCd8J4QnjCgQKBgoICgoKDAoOChAKIQooCioKLQowCjMKPgo/ClcKaAp2CngKegp8 +Cn4KnwqhCqMKqAqqCqwKrgqwCsEKwwrGCskKzArYCtoK8wsACwILBAsGCysLMQszCzULNws5CzsLPQs/ +C0wLTgtQC1ILYAtiC3wLiQuLC40LjwuwC7ILtAu2C7gLugu8C8kLywvOC9EL3wvhC/QMAQwDDAUMBwwo +DCoMLAwuDDAMMgw0DFIMcwyADIIMhAyGDKcMqQyrDK0MrwyxDLMMwAzCDMUMyAzQDNIM4AztDO8M8Qzz +DRQNFg0YDRoNHA0eDSANLQ0vDUUNUg1UDVYNWA15DXsNfQ1/DYENgw2FDZYNmA2aDZwNng2nDakNvw3M +Dc4N0A3SDfcN+Q37Df0N/w4BDgMOBQ4QDhIOHw4hDiMOJQ5GDkgOSg5MDk4OUA5SDl8OYQ5oDnkOew59 +Dn8OgQ6iDqQOpg6oDqoOrA6uDrcO0A7dDt8O4Q7jDwQPBg8IDwoPDA8ODxAPGQ8bDycPNA82DzgPOg9b +D10PXw9hD2MPZQ9nD20Pbw92D4MPhQ+HD4kPqg+sD64PsA+yD7QPtg+7D70Pww/UD9YP2A/aD9wP/Q// +EAEQAxAFEAcQCRAOEBAQGRAbEB0QNRBBEE4QUBBSEFQQdRB3EHkQexB9EH8QgRCHEIkQlxCkEKYQqBCq +EMsQzRDPENEQ0xDVENcQ4RDjEPAQ/RD/EQERAxEgESIRJBEmESgRKhEsETkROxE9ET8RThFdEWoRbBFu +EXARkRGTEZURlxGZEZsRnRGkEawRuRG7Eb0RvxHkEeYR6BHqEewR7hHwEfIR/BH+EgsSDRIPEhESNhI4 +EjoSPBI+EkASQhJEEl0SXxJsEm4ScBJyEpMSlRKXEpkSmxKdEp8SpBKmEqwSvRK/EsESwxLFEuYS6BLq +EuwS7hLwEvIS/BL+EwkTGhMcEx4TIBMiEysTNBM7E1ITYxNlE2cTaRNrE3oTixONE48TkROTE7ATshO0 +E7YTuBO6E7wTxxPnE/QT9hP4E/oUGxQdFB8UIRQjFCUUJxQ0FDYUORQ8FEkUSxRVFGIUZBRmFGgUiRSL +FI0UjxSRFJMUlRSpFKsUyxTYFNoU3BTeFP8VARUDFQUVBxUJFQsVMhVUFWUVZxVpFWsVbRWOFZAVkhWU +FZYVmBWaFacVrRW6FbwVvhXAFd0V3xXhFeMV5RXnFekV9xYFFhIWFBYWFhgWORY7Fj0WPxZBFkMWRRZi +FmQWdhaDFoUWhxaJFqoWrBauFrAWsha0FrYWyxbdFuoW7BbuFvAXERcTFxUXFxcZFxsXHRciFy8XPBc+ +F0AXQhdjF2UXZxdpF2sXbRdvF3oXfBeHF5QXlheYF5oXuxe9F78XwRfDF8UXxxfMF84X1BfhF+MX5Rfn +GAgYChgMGA4YEBgSGBQYKxgtGDwYRRhMGFsYYxhsGG8ZGBkaGRwZHhkgGSIZJBkmGSgZKhksGS4ZMBky +GTQZNhk4GToZPBk+GUEZRBlGGUgZShlNGU8ZURlUGVcZWRlcGV4ZYBljGWUZZxlpGWsZbRlvGXEZdBl2 +GXgZexl9GYAZghmEGYYZiBmLGY0ZjxmSGZUZlxmZGZsZnRmfGaEZoxmlGacZqRmrGa0ZsBmyGbUZtxm6 +GbwZvxnCGcQZxhnIGcoZzBnOGdAZ8RnzGfUZ9xn5GfsZ/RoWGhgaNRo3GjkaOxo9Gj8aQRpTGnQadhp4 +GnoafBp+GoAajRqPGpEakxqmGq0athq4Gr0avxrBGsoazxr4GwIbCxsNGw8bERsTGxUbFxsZGxsbLBsu +GzEbNBs3Gz4bTRtWG1gbYRtjG2wbbhtwG3IbdBudG6sbuBu6G7wbvRu/G8AbwhvEG8Yb1Rv+HAAcAhwD +HAUcBhwIHAocDBw1HDccORw6HDwcPRw/HEEcQxxkHGYcaBxqHGwcbhxwHHQcdhyfHKEcoxylHKccqRyr +HK0crxy0HL0cvxzIHMoc5RznHOkc6xztHO8c8RzzHPUc9xz5HPsc/R0AHSkdKx0tHS4dMB0xHTMdNR03 +HWAdYh1kHWYdaB1qHWwdbh1wHXUdfh2AHYkdix2WHZgdmh2cHZ4doB3JHcsdzR3PHdEd0x3VHdcd2R3w +Hfkd+x4EHgYeCB4KHgweLR4vHjEeMx41HjceOR5XHoAegh6EHoYeiB6KHowejh6QHp4epx6pHrAesh60 +Hrce2B7aHtwe3h7gHuIe5B7xHxIfFB8XHxkfGx8dHx8fKx9UH1YfWB9aH1wfXh9gH2IfZR+GH4gfix+O +H5Afkh+UH6Ufpx/QH9If1B/XH9kf2x/dH98f4h/nH/Af8h/7H/0gFCAWIBggGyAeICAgIiAlICcgKiAs +IC4gVyBZIFsgXiBgIGIgZCBmIGkgdSB+IIAgiSCLII4gkCCpINIg1CDWINcg2SDaINwg3iDgIQkhCyEN +IQ4hECERIRMhFSEXIUAhQiFEIUchSSFLIU0hTyFSIVchYCFiIWUhZyFwIXIhdSF+IYchiSGWIZkhnCGe +IaEhoyGmIc8h0SHTIdYh2CHaIdwh3iHhIeYh7yHxIggiCiINIg8iESIUIhciGSIbIh0iICIiIksiTSJP +IlAiUiJTIlUiVyJZIoIihCKHIooijCKOIpAikiKVIp4iryKxIrQityK6IsMixSLOItAi0SLjIwwjDiMQ +IxEjEyMUIxYjGCMaI0MjRSNHI0gjSiNLI00jTyNRI14jhyOJI4sjjiOQI5IjlCOWI5kjniOnI6kjtiO4 +I7ojvSO/I8EjwyPsI+4j8CPxI/Mj9CP2I/gj+iQGJA8kESQUJDUkPiRDJEwkTyT4JPok/CT+JQAlAiUF +JQclCSULJQ0lDyURJRMlFSUXJRklGyUdJR8lISUjJSUlJyUpJSslLSUvJTElMyU1JTclOiU8JT4lQCVC +JUQlRiVIJUolTSVPJVElUyVVJVclWSVbJV0lXyVhJWMlZSVnJWklbCVvJXElcyV1JXcleSV7JX0lgCWC +JYQlhiWIJYoljCWOJZAlkiWUJZYlmCWaJZwlniWhJaMlpSWuJbEmXCZeJmAmYiZkJmcmaSZrJm0mbyZx +JnQmdiZ4JnomfCZ+JoAmgiaFJocmiiaMJo4mkCaTJpUmlyaaJpwmnyaiJqUmpyapJqsmrSavJrEmsya1 +JrcmuSa8Jr4mwSbDJsYmyCbKJswmzibQJtMm1SbXJtom3CbfJuEm4yblJucm6SbrJu0m7ybxJvMm9Sb4 +Jvom/Sb/JwInBCcGJwgnCicMJw4nECcSJxQnFicfJyInzSfQJ9Mn1ifZJ9wn3yfiJ+Un6CfrJ+4n8Sf0 +J/cn+if9KAAoAygGKAkoDCgPKBIoFSgYKBsoHighKCQoJygqKC0oMCgzKDYoOSg8KD8oQihFKEgoSyhO +KFEoVChXKFooXShgKGMoZihoKGsobihxKHQodyh6KH0ogCiDKIYoiSiMKI8okiiVKJgomyieKKEopCin +KKoorSiwKLMotii5KLwovyjCKMUoyCjbKO4pISk/KUspWSl2KYspqim2KdAp5CoVKiEqKyo9KlAqaSqU +Kqsqvir9KxArKys3K1Irait9K48rmyuuK7orzyvtLAAsDiwrLDcsUyx4LJMsnyzELNAs7Cz/LQstFy0u +LUEtWy2SLZ4ttS3MLd4uCC4yLlIudS6cLrQuwC7bLugvBC8QLzEvSC9UL20vgi+jL70v2S/xMAYwHDAw +MDwwVTBoMHEwdDB1MH4wgTCCMIswjjGHMYkxizGNMY8xkTGTMZUxlzGZMZsxnTGgMaMxpTGnMakxqzGu +MbAxsjG0MbYxuDG6MbwxvjHBMcMxxTHIMcoxzDHOMdAx0jHUMdYx2DHaMdwx3jHgMeIx5DHmMekx7DHu +MfAx8zH1Mfcx+TH7Mf0x/zIBMgMyBTIHMgkyCzINMg8yETITMhUyFzIZMhsyHTIfMiIyJTInMikyKzIu +MjAyMjI0MjYyOTI7Mj0yPzJBMkMyRTJHMkkySzJNMlAyUzJVMlcyWTJbMl4yYDJiMmUyZzJpMmsybTJv +MnEyczJ1MncyeTJ7Mn4ygDKDMoUyhzKJMosyjTKPMpgymzOUM5czmjOdM6AzozOmM6kzrDOvM7IztTO4 +M7szvjPBM8QzxzPKM80z0DPTM9Yz2TPcM98z4jPlM+gz6zPuM/Ez9DP3M/oz/TQANAM0BjQJNAw0DzQS +NBU0GDQbNB40ITQkNCc0KjQtNDA0MzQ2NDk0PDQ/NEI0RTRINEs0TjRRNFQ0VzRaNF00YDRjNGY0aTRs +NG80cjR1NHg0ezR+NIE0hDSHNIo0jTSQNJM0ljSZNJw0nzSiNKU0qDSrNK40sTS0NLc0ujS9NMA0wzTG +NMk0zDTPNNI01TTYNNs03jThNOQ05zTqNO008DTzNPY0+TT8NP81AjUFNQc1CTULNQ01DzURNRQ1FjUY +NRo1HDUeNSA1IjUkNSY1KDUrNS01LzUxNTM1NjU4NTo1PTU/NUE1QzVFNUc1STVLNU01TzVRNVM1VTVX +NVo1XTVgNWI1ZDVmNWg1ajVsNW81cTVzNXU1dzV5NXs1fTV/NYI1hDWGNYg1ijWMNY41kDWSNZQ1ljWY +NZo1nDWeNaA1ojWlNac1qTWrNa01rzWyNbU1vjXANcI1xDXGNcg1yjXMNc410TXTNdU12DXbNd014DXi +NeQ15jXoNeo17TXwNfI19DX2Nfg1+jX8Nf42ADYCNgU2BzYJNgs2DTYPNhE2EzYVNh42IDYhNio2LTYu +Njc2OjY7NkQ2SQAAAAAAAAICAAAAAAAAB8UAAAAAAAAAAAAAAAAAADZYA diff --git a/GitX.xcodeproj/project.pbxproj b/GitX.xcodeproj/project.pbxproj index 7dc275b..64affbb 100644 --- a/GitX.xcodeproj/project.pbxproj +++ b/GitX.xcodeproj/project.pbxproj @@ -13,6 +13,7 @@ 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; 911111E20E58BD5A00BF76B4 /* RepositoryWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 911111E00E58BD5A00BF76B4 /* RepositoryWindow.xib */; }; + 911111F80E594F3F00BF76B4 /* PBRepositoryDocumentController.m in Sources */ = {isa = PBXBuildFile; fileRef = 911111F70E594F3F00BF76B4 /* PBRepositoryDocumentController.m */; }; F50FE0E30E07BE9600854FCD /* PBGitRevisionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F50FE0E20E07BE9600854FCD /* PBGitRevisionCell.m */; }; F513085B0E0740F2000C8BCD /* PBQLOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = F513085A0E0740F2000C8BCD /* PBQLOutlineView.m */; }; F561727F0E056A11001DCD79 /* diff_style.css in Resources */ = {isa = PBXBuildFile; fileRef = F561727C0E056A11001DCD79 /* diff_style.css */; }; @@ -49,6 +50,8 @@ 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 8D1107320486CEB800E47090 /* GitX.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GitX.app; sourceTree = BUILT_PRODUCTS_DIR; }; 911111E10E58BD5A00BF76B4 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/RepositoryWindow.xib; sourceTree = ""; }; + 911111F60E594F3F00BF76B4 /* PBRepositoryDocumentController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBRepositoryDocumentController.h; sourceTree = ""; }; + 911111F70E594F3F00BF76B4 /* PBRepositoryDocumentController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBRepositoryDocumentController.m; sourceTree = ""; }; F50FE0E10E07BE9600854FCD /* PBGitRevisionCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBGitRevisionCell.h; sourceTree = ""; }; F50FE0E20E07BE9600854FCD /* PBGitRevisionCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBGitRevisionCell.m; sourceTree = ""; }; F51308590E0740F2000C8BCD /* PBQLOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBQLOutlineView.h; sourceTree = ""; }; @@ -209,6 +212,8 @@ 77C8280C06725ACE000B614F /* ApplicationController.m */, F57CC43F0E05E496000472E2 /* PBDetailController.h */, F57CC4400E05E496000472E2 /* PBDetailController.m */, + 911111F60E594F3F00BF76B4 /* PBRepositoryDocumentController.h */, + 911111F70E594F3F00BF76B4 /* PBRepositoryDocumentController.m */, ); name = Controllers; sourceTree = ""; @@ -321,6 +326,7 @@ F5DFFA6C0E075D8800617813 /* PBEasyFS.m in Sources */, F50FE0E30E07BE9600854FCD /* PBGitRevisionCell.m in Sources */, F5FF4E180E0829C20006317A /* PBGitRevList.m in Sources */, + 911111F80E594F3F00BF76B4 /* PBRepositoryDocumentController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/PBGitRepository.h b/PBGitRepository.h index 2011e17..0bf884c 100644 --- a/PBGitRepository.h +++ b/PBGitRepository.h @@ -9,6 +9,8 @@ #import #import "PBGitRevList.h" +extern NSString* PBGitRepositoryErrorDomain; + @interface PBGitRepository : NSDocument { NSString* path; PBGitRevList* revisionList; diff --git a/PBGitRepository.m b/PBGitRepository.m index d59c8bb..f1939e3 100644 --- a/PBGitRepository.m +++ b/PBGitRepository.m @@ -8,10 +8,13 @@ #import "PBGitRepository.h" #import "PBGitCommit.h" +#import "PBDetailController.h" #import "NSFileHandleExt.h" #import "PBEasyPipe.h" +NSString* PBGitRepositoryErrorDomain = @"GitXErrorDomain"; + @implementation PBGitRepository @synthesize path, revisionList; @@ -43,9 +46,63 @@ static NSString* gitPath; NSLog(@"Could not find a git binary!"); } +- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError +{ + if (outError) { + *outError = [NSError errorWithDomain:PBGitRepositoryErrorDomain + code:0 + userInfo:[NSDictionary dictionaryWithObject:@"Reading files is not supported." forKey:NSLocalizedFailureReasonErrorKey]]; + } + return NO; +} + +- (BOOL)readFromFileWrapper:(NSFileWrapper *)fileWrapper ofType:(NSString *)typeName error:(NSError **)outError +{ + self.path = nil; + + if (![fileWrapper isDirectory]) { + if (outError) { + NSDictionary* userInfo = [NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"Reading files is not supported.", [fileWrapper filename]] + forKey:NSLocalizedRecoverySuggestionErrorKey]; + *outError = [NSError errorWithDomain:PBGitRepositoryErrorDomain code:0 userInfo:userInfo]; + } + } else { + NSString* repositoryPath = [[self fileURL] path]; + + if ([repositoryPath hasSuffix:@".git"]) { + self.path = repositoryPath; + } else { + // Use rev-parse to find the .git dir for the repository being opened + NSString* newPath = [PBEasyPipe outputForCommand:gitPath withArgs:[NSArray arrayWithObjects:@"rev-parse", @"--git-dir", nil] inDir:repositoryPath]; + if ([newPath isEqualToString:@".git"]) { + self.path = [repositoryPath stringByAppendingPathComponent:@".git"]; + } else if ([newPath length] > 0) { + self.path = newPath; + } else if (outError) { + NSDictionary* userInfo = [NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"%@ does not appear to be a git repository.", [fileWrapper filename]] + forKey:NSLocalizedRecoverySuggestionErrorKey]; + *outError = [NSError errorWithDomain:PBGitRepositoryErrorDomain code:0 userInfo:userInfo]; + } + } + + if (self.path) { + revisionList = [[PBGitRevList alloc] initWithRepository:self andRevListParameters:[NSArray array]]; + } + } + + return self.path != nil; +} + +// Overridden to create our custom window controller +- (void)makeWindowControllers +{ + PBDetailController* controller = [[PBDetailController alloc] initWithRepository:self]; + [self addWindowController:controller]; + [controller release]; +} + + (PBGitRepository*) repositoryWithPath:(NSString*) path { - PBGitRepository* repo = [[PBGitRepository alloc] initWithPath: path]; return repo; } diff --git a/PBRepositoryDocumentController.h b/PBRepositoryDocumentController.h new file mode 100644 index 0000000..8c9c040 --- /dev/null +++ b/PBRepositoryDocumentController.h @@ -0,0 +1,17 @@ +// +// PBRepositoryDocumentController.h +// GitX +// +// Created by Ciarán Walsh on 15/08/2008. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#import + + +@interface PBRepositoryDocumentController : NSDocumentController +{ + +} + +@end diff --git a/PBRepositoryDocumentController.m b/PBRepositoryDocumentController.m new file mode 100644 index 0000000..9f13c57 --- /dev/null +++ b/PBRepositoryDocumentController.m @@ -0,0 +1,21 @@ +// +// PBRepositoryDocumentController.mm +// GitX +// +// Created by Ciarán Walsh on 15/08/2008. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#import "PBRepositoryDocumentController.h" + + +@implementation PBRepositoryDocumentController +// This method is overridden to configure the open panel to only allow +// selection of directories +- (NSInteger)runModalOpenPanel:(NSOpenPanel *)openPanel forTypes:(NSArray *)extensions +{ + [openPanel setCanChooseFiles:NO]; + [openPanel setCanChooseDirectories:YES]; + return [openPanel runModalForDirectory:nil file:nil types:nil]; +} +@end