commit 9661b06959343149fc4773224264d4c293eb43e6 Author: Hendrik Holtmann Date: Mon Aug 20 21:34:54 2012 +0200 2.4 Beta Initial Commit diff --git a/Classes/FanControl.h b/Classes/FanControl.h new file mode 100644 index 0000000..8906684 --- /dev/null +++ b/Classes/FanControl.h @@ -0,0 +1,144 @@ +/* + * FanControl + * + * Copyright (c) 2006 Hendrik Holtmann +* + * FanControl.h - MacBook(Pro) FanControl application + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#import +#import "NSFileManager+DirectoryLocations.h" +#import +#import +#import + +#import +#include +#include +#include + +#include +#include + + +#define kMenuBarHeight 22 + + +@interface FanControl : NSObject + +{ + IBOutlet id currentSpeed; + IBOutlet id currentSpeed1; + + IBOutlet id slider1; + IBOutlet id slider2; + + IBOutlet id field1; + IBOutlet id field2; + + IBOutlet id mainwindow; + + IBOutlet id tabview; + + IBOutlet id applybutton; + + IBOutlet id programinfo; + + IBOutlet id copyright; + + IBOutlet id syncslider; + + IBOutlet id TemperatureController; + + IBOutlet id levelIndicator; + + IBOutlet id newfavoritewindow; + + IBOutlet id newfavorite_title; + + IBOutlet id autochange; + + + IBOutlet NSMenu *theMenu; + + IBOutlet id faqWindow; + + IBOutlet id faqText; + + IBOutlet id sliderCell; + + IBOutlet id sync; + + IBOutlet id colorSelector; + + NSStatusItem *statusItem; + + NSMutableArray* s_menus; + + NSTimer *_readTimer; + + Power *pw; + + IBOutlet id FavoritesController; + IBOutlet id FanController; + IBOutlet id DefaultsController; + + MachineDefaults *mdefaults; + NSDictionary *s_sed; + + NSDictionary *undo_dic; + + NSImage *menu_image; + NSImage *menu_image_alt; + + + +} + +-(void)terminate:(id)sender; + +- (IBAction)paypal:(id)sender; +- (IBAction)visitHomepage:(id)sender; + +- (IBAction)closePreferences:(id)sender; +- (IBAction)savePreferences:(id)sender; +- (IBAction)updateCheck:(id)sender; + +- (void)init_statusitem; + +//new ones, check old later +- (IBAction)loginItem:(id)sender; +- (IBAction)add_favorite:(id)sender; +- (IBAction)close_favorite:(id)sender; +- (IBAction)save_favorite:(id)sender; +- (IBAction)delete_favorite:(id)sender; +- (IBAction)syncSliders:(id)sender; +- (void)apply_quickselect:(id)sender; +- (void)apply_settings:(id)sender controllerindex:(int)cIndex; ++ (void)setRights; +- (void) syncBinder:(Boolean)bind; +- (IBAction) changeMenu:(id)sender; +- (IBAction)menuSelect:(id)sender; +@end + + +@interface NSNumber (NumberAdditions) +- (NSString *) tohex; +- (NSNumber*) celsius_fahrenheit; + +@end + diff --git a/Classes/FanControl.m b/Classes/FanControl.m new file mode 100644 index 0000000..fb8dcd4 --- /dev/null +++ b/Classes/FanControl.m @@ -0,0 +1,721 @@ +/* + * FanControl + * + * Copyright (c) 2006 Hendrik Holtmann +* + * FanControl.m - MacBook(Pro) FanControl application + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#import "FanControl.h" +#import "MachineDefaults.h" +#import +#import +#import +#import +#import "SystemVersion.h" + +@implementation FanControl + +io_connect_t conn; +kern_return_t result; +SMCVal_t val; +NSUserDefaults *defaults; +Boolean supported=false; +extern char *optarg; +SMCVal_t val; +OSStatus status; +NSDictionary* machine_defaults; +NSString *authpw; + + + +#pragma mark **Init-Methods** + ++(void) initialize { + + //avoid Zombies when starting external app + signal(SIGCHLD, SIG_IGN); + + [FanControl copyMachinesIfNecessary]; + //check owner and suid rights + [FanControl setRights]; + + //talk to smc + [smcWrapper init]; + + //app in foreground for update notifications + [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; + +} + ++(void)copyMachinesIfNecessary +{ + NSString *path = [[[NSFileManager defaultManager] applicationSupportDirectory] stringByAppendingPathComponent:@"Machines.plist"]; + if (![[NSFileManager defaultManager] fileExistsAtPath:path]) { + [[NSFileManager defaultManager] copyItemAtPath:[[NSBundle mainBundle] pathForResource:@"Machines" ofType:@"plist"] toPath:path error:nil]; + } +} + +-(void)upgradeFavorites +{ + //upgrade favorites + NSArray *rfavorites = [FavoritesController arrangedObjects]; + int j; + int i; + for (i=0;i<[rfavorites count];i++) + { + BOOL selected = NO; + NSArray *fans = [[rfavorites objectAtIndex:i] objectForKey:@"FanData"]; + for (j=0;j<[fans count];j++) { + if ([[[fans objectAtIndex:j] objectForKey:@"menu"] boolValue] == YES ) { + selected = YES; + } + } + if (selected==NO) { + [[[[rfavorites objectAtIndex:i] objectForKey:@"FanData"] objectAtIndex:0] setObject:[NSNumber numberWithBool:YES] forKey:@"menu"]; + } + } + +} + +-(void) awakeFromNib { + + s_sed = nil; + pw=[[Power alloc] init]; + [pw setDelegate:self]; + [pw registerForSleepWakeNotification]; + [pw registerForPowerChange]; + + //load defaults + + [DefaultsController setAppliesImmediately:NO]; + + mdefaults=[[MachineDefaults alloc] init:nil]; + + s_sed=[mdefaults get_machine_defaults]; + + + NSMutableArray *favorites=[NSMutableArray arrayWithObjects: + [NSMutableDictionary dictionaryWithObjectsAndKeys: + @"Default", @"Title", + [s_sed objectForKey:@"Fans"], @"FanData",nil],nil]; + NSRange range=[[MachineDefaults computerModel] rangeOfString:@"MacBook"]; + if (range.length>0) { + //for macbooks add a second default + MachineDefaults *msdefaults=[[MachineDefaults alloc] init:nil]; + NSMutableDictionary *sec_fav=[NSMutableDictionary dictionaryWithObjectsAndKeys:@"Higher RPM", @"Title", + [[msdefaults get_machine_defaults] objectForKey:@"Fans"], @"FanData",nil]; + [favorites addObject:sec_fav]; + int i; + for (i=0;i<[[s_sed objectForKey:@"Fans"] count];i++) { + int min_value=([[[[s_sed objectForKey:@"Fans"] objectAtIndex:i] valueForKey:@"Minspeed"] intValue])*2; + [[[[favorites objectAtIndex:1] objectForKey:@"FanData"] objectAtIndex:i] setObject:[NSNumber numberWithInt:min_value] forKey:@"selspeed"]; + + } + [msdefaults release]; + } + + //sync option for Macbook Pro's + NSRange range_mbp=[[MachineDefaults computerModel] rangeOfString:@"MacBookPro"]; + if (range_mbp.length>0) { + [sync setHidden:NO]; + } + + + NSString *feedURL = nil; + if ([SystemVersion isTiger]) { + feedURL = @"http://www.eidac.de/smcfancontrol/smcfancontrol_tiger.xml"; + } else { + feedURL = @"http://www.eidac.de/smcfancontrol/smcfancontrol.xml"; + } + + //load user defaults + defaults = [NSUserDefaults standardUserDefaults]; + [defaults registerDefaults: + [NSMutableDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt:0], @"Unit", + [NSNumber numberWithInt:0], @"SelDefault", + [NSNumber numberWithBool:NO], @"AutoStart", + [NSNumber numberWithBool:NO],@"AutomaticChange", + [NSNumber numberWithInt:0],@"selbatt", + [NSNumber numberWithInt:0],@"selac", + [NSNumber numberWithInt:0],@"selload", + [NSNumber numberWithInt:0],@"MenuBar", + feedURL,@"SUFeedURL", + [NSArchiver archivedDataWithRootObject:[NSColor blackColor]],@"MenuColor", + favorites,@"Favorites", + nil]]; + + + + + s_menus=[[NSMutableArray alloc] init]; + [s_menus autorelease]; + int i; + for(i=0;i<[smcWrapper get_fan_num];i++){ + NSMenuItem *mitem=[[NSMenuItem alloc] initWithTitle:[NSString stringWithFormat:@"Fan: %d",i] action:NULL keyEquivalent:@""]; + [mitem setTag:(i+1)*10]; + [s_menus insertObject:mitem atIndex:i]; + [mitem release]; + } + + [FavoritesController bind:@"content" + toObject:[NSUserDefaultsController sharedUserDefaultsController] + withKeyPath:@"values.Favorites" + options:nil]; + [FavoritesController setEditable:YES]; + + // set slider sync - only for MBP + for (i=0;i<[[FavoritesController arrangedObjects] count];i++) { + if([[[[FavoritesController arrangedObjects] objectAtIndex:i] objectForKey:@"sync"] boolValue]==YES) { + [FavoritesController setSelectionIndex:i]; + [self syncBinder:[[[[FavoritesController arrangedObjects] objectAtIndex:i] objectForKey:@"sync"] boolValue]]; + } + } + + //init statusitem + [self init_statusitem]; + + + [programinfo setStringValue: [NSString stringWithFormat:@"%@ %@",[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"] + ,[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"] ]]; + // + [copyright setStringValue:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSHumanReadableCopyright"]]; + + + //power controls only available on portables + if (range.length>0) { + [autochange setEnabled:true]; + } else { + [autochange setEnabled:false]; + } + [faqText replaceCharactersInRange:NSMakeRange(0,0) withRTF: [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"F.A.Q" ofType:@"rtf"]]]; + [self apply_settings:nil controllerindex:[[defaults objectForKey:@"SelDefault"] intValue]]; + [[[[theMenu itemWithTag:1] submenu] itemAtIndex:[[defaults objectForKey:@"SelDefault"] intValue]] setState:NSOnState]; + [[sliderCell dataCell] setControlSize:NSSmallControlSize]; + [self changeMenu:nil]; + + //seting toolbar image + menu_image=[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"smc" ofType:@"png"]]; + menu_image_alt=[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"smcover" ofType:@"png"]]; + + //release MachineDefaults class first call + //add timer for reading to RunLoop + _readTimer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(readFanData:) userInfo:nil repeats:YES]; + [_readTimer fire]; + //autoapply settings if valid + [self upgradeFavorites]; + + //autostart + [[NSUserDefaults standardUserDefaults] setValue:[NSNumber numberWithBool:[self isInAutoStart]] forKey:@"AutoStart"]; + +} + + +-(void)init_statusitem{ + statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength: NSVariableStatusItemLength] retain]; + [statusItem setMenu: theMenu]; + [statusItem setEnabled: YES]; + [statusItem setHighlightMode:YES]; + [statusItem setTitle:@"smc..."]; + int i; + for(i=0;i<[s_menus count];i++) { + [theMenu insertItem:[s_menus objectAtIndex:i] atIndex:i]; + }; +} + + +#pragma mark **Action-Methods** +- (IBAction)loginItem:(id)sender{ + if ([sender state]==NSOnState) { + [self setStartAtLogin:YES]; + } else { + [self setStartAtLogin:NO]; + } +} + +- (IBAction)add_favorite:(id)sender{ + [[NSApplication sharedApplication] beginSheet:newfavoritewindow + modalForWindow: mainwindow + modalDelegate: nil + didEndSelector: nil + contextInfo: nil]; +} + +- (IBAction)close_favorite:(id)sender{ + [newfavoritewindow close]; + [[NSApplication sharedApplication] endSheet:newfavoritewindow]; +} + +- (IBAction)save_favorite:(id)sender{ + MachineDefaults *msdefaults=[[MachineDefaults alloc] init:nil]; + if ([[newfavorite_title stringValue] length]>0) { + NSMutableDictionary *toinsert=[[NSMutableDictionary alloc] initWithObjectsAndKeys:[newfavorite_title stringValue],@"Title",[[msdefaults get_machine_defaults] objectForKey:@"Fans"],@"FanData",nil]; //default as template + [toinsert setValue:[NSNumber numberWithInt:0] forKey:@"Standard"]; + [FavoritesController addObject:toinsert]; + [toinsert release]; + [newfavoritewindow close]; + [[NSApplication sharedApplication] endSheet:newfavoritewindow]; + } + [msdefaults release]; + [self upgradeFavorites]; +} + + +-(void) check_deletion:(id)combo{ + if ([FavoritesController selectionIndex]==[[defaults objectForKey:combo] intValue]) { + [defaults setObject:[NSNumber numberWithInt:0] forKey:combo]; + } +} + +- (IBAction)delete_favorite:(id)sender{ + int pressesButton=NSRunCriticalAlertPanelRelativeToWindow( + NSLocalizedString(@"Delete favorite",nil), + [NSString stringWithFormat:NSLocalizedString(@"Do you really want to delete the favorite %@?",nil), [ [ [FavoritesController arrangedObjects] objectAtIndex:[FavoritesController selectionIndex]] objectForKey:@"Title"] ], + NSLocalizedString(@"No",nil), + NSLocalizedString(@"Yes",nil),nil,mainwindow); + if (pressesButton==0) { + //delete favorite, but resets presets before + [self check_deletion:@"selbatt"]; + [self check_deletion:@"selac"]; + [self check_deletion:@"selload"]; + [FavoritesController removeObjects:[FavoritesController selectedObjects]]; + } +} + + + +//reads fan data and updates the gui +-(void) readFanData:(NSTimer*)timer{ + + NSString *temp; + NSString *fan; + + + //on init handling + if (s_sed==nil) { + return; + } + + //populate Menu Items with recent Data + int i; + for(i=0;i<[smcWrapper get_fan_num];i++){ + NSString *fandesc=[[[s_sed objectForKey:@"Fans"] objectAtIndex:i] objectForKey:@"Description"]; + [[theMenu itemWithTag:(i+1)*10] setTitle:[NSString stringWithFormat:@"%@: %@ rpm",fandesc,[[NSNumber numberWithInt:[smcWrapper get_fan_rpm:i]] stringValue]]]; + } + + + float c_temp=[smcWrapper get_maintemp]; + if ([[defaults objectForKey:@"Unit"] intValue]==0) { + temp=[NSString stringWithFormat:@"%@%CC",[NSNumber numberWithFloat:c_temp],(unsigned short)0xb0]; + } else { + NSNumberFormatter *ncf=[[[NSNumberFormatter alloc] init] autorelease]; + [ncf setFormat:@"00;00;-00"]; + temp=[NSString stringWithFormat:@"%@%CF",[ncf stringForObjectValue:[[NSNumber numberWithFloat:c_temp] celsius_fahrenheit]],(unsigned short)0xb0]; + } + NSNumberFormatter *nc=[[[NSNumberFormatter alloc] init] autorelease]; + //avoid jumping in menu bar + [nc setFormat:@"000;000;-000"]; + + int selected = 0; + NSArray *fans = [[[FavoritesController arrangedObjects] objectAtIndex:[FavoritesController selectionIndex]] objectForKey:@"FanData"]; + for (i=0;i<[fans count];i++) + { + if ([[[fans objectAtIndex:i] objectForKey:@"menu"] boolValue]==YES) { + selected = i; + } + } + + fan=[NSString stringWithFormat:@"%@rpm",[nc stringForObjectValue:[NSNumber numberWithFloat:[smcWrapper get_fan_rpm:selected]]]]; + + if ([[defaults objectForKey:@"MenuBar"] intValue]<=1) { + NSString *add; + int fsize; + if ([[defaults objectForKey:@"MenuBar"] intValue]==0) { + add=@"\n"; + fsize=9; + [statusItem setLength:53]; + } else { + add=@" "; + fsize=11; + [statusItem setLength:96]; + } + NSMutableAttributedString *s_status=[[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@%@%@",temp,add,fan]]; + NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; + [paragraphStyle setAlignment:NSLeftTextAlignment]; + [s_status addAttribute:NSFontAttributeName value:[NSFont fontWithName:@"Lucida Grande" size:fsize] range:NSMakeRange(0,[s_status length])]; + [s_status addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0,[s_status length])]; + [s_status addAttribute:NSForegroundColorAttributeName value:(NSColor*)[NSUnarchiver unarchiveObjectWithData:[defaults objectForKey:@"MenuColor"]] range:NSMakeRange(0,[s_status length])]; + [statusItem setAttributedTitle:s_status]; + [statusItem setImage:nil]; + [statusItem setAlternateImage:nil]; + [paragraphStyle release]; + [s_status release]; + } + + + if ([[defaults objectForKey:@"MenuBar"] intValue]==2) { + [statusItem setLength:26]; + [statusItem setTitle:nil]; + [statusItem setToolTip:[NSString stringWithFormat:@"%@\n%@",temp,fan]]; + [statusItem setImage:menu_image]; + [statusItem setAlternateImage:menu_image_alt]; + + } + + if ([[defaults objectForKey:@"MenuBar"] intValue]==3) { + [statusItem setLength:46]; + NSMutableAttributedString *s_status=[[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@",temp]]; + [s_status addAttribute:NSFontAttributeName value:[NSFont fontWithName:@"Lucida Grande" size:12] range:NSMakeRange(0,[s_status length])]; + [s_status addAttribute:NSForegroundColorAttributeName value:(NSColor*)[NSUnarchiver unarchiveObjectWithData:[defaults objectForKey:@"MenuColor"]] range:NSMakeRange(0,[s_status length])]; + [statusItem setAttributedTitle:s_status]; + [statusItem setImage:nil]; + [statusItem setAlternateImage:nil]; + [s_status release]; + + } + if ([[defaults objectForKey:@"MenuBar"] intValue]==4) { + [statusItem setLength:65]; + NSMutableAttributedString *s_status=[[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@",fan]]; + [s_status addAttribute:NSFontAttributeName value:[NSFont fontWithName:@"Lucida Grande" size:12] range:NSMakeRange(0,[s_status length])]; + [s_status addAttribute:NSForegroundColorAttributeName value:(NSColor*)[NSUnarchiver unarchiveObjectWithData:[defaults objectForKey:@"MenuColor"]] range:NSMakeRange(0,[s_status length])]; + [statusItem setAttributedTitle:s_status]; + [statusItem setImage:nil]; + [statusItem setAlternateImage:nil]; + [s_status release]; + + } +} + + +- (IBAction)savePreferences:(id)sender{ + [(NSUserDefaultsController *)DefaultsController save:sender]; + [defaults setValue:[FavoritesController content] forKey:@"Favorites"]; + [defaults synchronize]; + [mainwindow close]; + [self apply_settings:sender controllerindex:[FavoritesController selectionIndex]]; + undo_dic=[NSDictionary dictionaryWithDictionary:[defaults dictionaryRepresentation]]; +} + + + +- (IBAction)closePreferences:(id)sender{ + [mainwindow close]; + [DefaultsController revert:sender]; +} + + +//set the new fan settings + +-(void)apply_settings:(id)sender controllerindex:(int)cIndex{ + int i; + [FanControl setRights]; + [FavoritesController setSelectionIndex:cIndex]; + for (i=0;i<[[[[FavoritesController arrangedObjects] objectAtIndex:cIndex] objectForKey:@"FanData"] count];i++) { + [smcWrapper setKey_external:[NSString stringWithFormat:@"F%dMn",i] value:[[[[FanController arrangedObjects] objectAtIndex:i] objectForKey:@"selspeed"] tohex]]; + } + NSMenu *submenu = [[[NSMenu alloc] init] autorelease]; + + for(i=0;i<[[FavoritesController arrangedObjects] count];i++){ + NSMenuItem *submenuItem = [[[NSMenuItem alloc] initWithTitle:[[[FavoritesController arrangedObjects] objectAtIndex:i] objectForKey:@"Title"] action:@selector(apply_quickselect:) keyEquivalent:@""] autorelease]; + [submenuItem setTag:i*100]; //for later manipulation + [submenuItem setEnabled:YES]; + [submenuItem setTarget:self]; + [submenuItem setRepresentedObject:[[FavoritesController arrangedObjects] objectAtIndex:i]]; + [submenu addItem:submenuItem]; + } + + [[theMenu itemWithTag:1] setSubmenu:submenu]; + for (i=0;i<[[[theMenu itemWithTag:1] submenu] numberOfItems];i++) { + [[[[theMenu itemWithTag:1] submenu] itemAtIndex:i] setState:NSOffState]; + } + [[[[theMenu itemWithTag:1] submenu] itemAtIndex:cIndex] setState:NSOnState]; + [defaults setObject:[NSNumber numberWithInt:cIndex] forKey:@"SelDefault"]; + //change active setting display + [[theMenu itemWithTag:1] setTitle:[NSString stringWithFormat:@"%@: %@",NSLocalizedString(@"Active Setting",nil),[ [ [FavoritesController arrangedObjects] objectAtIndex:[FavoritesController selectionIndex]] objectForKey:@"Title"] ]]; +} + + + +-(void)apply_quickselect:(id)sender{ + int i; + [FanControl setRights]; + //set all others items to off + for (i=0;i<[[[theMenu itemWithTag:1] submenu] numberOfItems];i++) { + [[[[theMenu itemWithTag:1] submenu] itemAtIndex:i] setState:NSOffState]; + } + [sender setState:NSOnState]; + [[theMenu itemWithTag:1] setTitle:[NSString stringWithFormat:@"%@: %@",NSLocalizedString(@"Active Setting",nil),[sender title]]]; + [self apply_settings:sender controllerindex:[[[theMenu itemWithTag:1] submenu] indexOfItem:sender]]; +} + + +-(void)terminate:(id)sender{ + //get last active selection + [defaults synchronize]; + SMCClose(conn); + [_readTimer invalidate]; + [pw deregisterForSleepWakeNotification]; + [pw deregisterForPowerChange]; + [pw release]; + [menu_image release]; + [menu_image_alt release]; + //[mdefaults release]; + //[statusItem release]; + //[s_menus release]; + //[theMenu release]; + [[NSApplication sharedApplication] terminate:self]; +} + + + +- (IBAction)syncSliders:(id)sender{ + if ([sender state]) { + [self syncBinder:YES]; + } else { + [self syncBinder:NO]; + } +} + + +- (IBAction) changeMenu:(id)sender{ + if ([[[[NSUserDefaultsController sharedUserDefaultsController] values] valueForKey:@"MenuBar"] intValue]==2) { + [colorSelector setEnabled:NO]; + } else { + [colorSelector setEnabled:YES]; + } + +} + +- (IBAction)menuSelect:(id)sender{ + //deactivate all other radio buttons + int i; + for (i=0;i<[[FanController arrangedObjects] count];i++) { + if (i!=[sender selectedRow]) { + [[[FanController arrangedObjects] objectAtIndex:i] setValue:[NSNumber numberWithBool:NO] forKey:@"menu"]; + } + } +} + + + +#pragma mark **Helper-Methods** + +//just a helper to bringt update-info-window to the front +- (IBAction)updateCheck:(id)sender{ + [[[SUUpdater alloc] init] checkForUpdates:sender]; + [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; +} + +- (IBAction)visitHomepage:(id)sender{ + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://www.eidac.de/products"]]; +} + + +- (IBAction)paypal:(id)sender{ + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=holtmann%40campus%2dvirtuell%2ede&no_shipping=0&no_note=1&tax=0¤cy_code=EUR&bn=PP%2dDonationsBF&charset=UTF%2d8&country=US"]]; +} + +-(void) syncBinder:(Boolean)bind{ + //in case plist is corrupt, don't bind + if ([[FanController arrangedObjects] count]>1 ) { + if (bind==YES) { + [[[FanController arrangedObjects] objectAtIndex:1] bind:@"selspeed" toObject:[[FanController arrangedObjects] objectAtIndex:0] withKeyPath:@"selspeed" options:nil]; + [[[FanController arrangedObjects] objectAtIndex:0] bind:@"selspeed" toObject:[[FanController arrangedObjects] objectAtIndex:1] withKeyPath:@"selspeed" options:nil]; + } else { + [[[FanController arrangedObjects] objectAtIndex:1] unbind:@"selspeed"]; + [[[FanController arrangedObjects] objectAtIndex:0] unbind:@"selspeed"]; + } + } +} + + +#pragma mark **Power Watchdog-Methods** + +- (void)systemDidWakeFromSleep:(id)sender{ + [self apply_settings:nil controllerindex:[[defaults objectForKey:@"SelDefault"] intValue]]; +} + + +- (void)powerChangeToBattery:(id)sender{ + + if ([[defaults objectForKey:@"AutomaticChange"] boolValue]==YES) { + [self apply_settings:nil controllerindex:[[defaults objectForKey:@"selbatt"] intValue]]; + } +} + +- (void)powerChangeToAC:(id)sender{ + if ([[defaults objectForKey:@"AutomaticChange"] boolValue]==YES) { + [self apply_settings:nil controllerindex:[[defaults objectForKey:@"selac"] intValue]]; + + } +} + +- (void)powerChangeToACLoading:(id)sender{ + if ([[defaults objectForKey:@"AutomaticChange"] boolValue]==YES) { + [self apply_settings:nil controllerindex:[[defaults objectForKey:@"selload"] intValue]]; + + } +} + + +#pragma mark - +#pragma mark Start-at-login control + +- (BOOL)isInAutoStart +{ + BOOL found = NO; + LSSharedFileListRef loginItems = LSSharedFileListCreate(kCFAllocatorDefault, kLSSharedFileListSessionLoginItems, /*options*/ NULL); + NSString *path = [[NSBundle mainBundle] bundlePath]; + CFURLRef URLToToggle = (CFURLRef)[NSURL fileURLWithPath:path]; + LSSharedFileListItemRef existingItem = NULL; + + UInt32 seed = 0U; + NSArray *currentLoginItems = [NSMakeCollectable(LSSharedFileListCopySnapshot(loginItems, &seed)) autorelease]; + + for (id itemObject in currentLoginItems) { + LSSharedFileListItemRef item = (LSSharedFileListItemRef)itemObject; + + UInt32 resolutionFlags = kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes; + CFURLRef URL = NULL; + OSStatus err = LSSharedFileListItemResolve(item, resolutionFlags, &URL, /*outRef*/ NULL); + if (err == noErr) { + Boolean foundIt = CFEqual(URL, URLToToggle); + CFRelease(URL); + + if (foundIt) { + existingItem = item; + found = YES; + break; + } + } + } + return found; +} + +- (void) setStartAtLogin:(BOOL)enabled { + + LSSharedFileListRef loginItems = LSSharedFileListCreate(kCFAllocatorDefault, kLSSharedFileListSessionLoginItems, /*options*/ NULL); + + + NSString *path = [[NSBundle mainBundle] bundlePath]; + + OSStatus status; + CFURLRef URLToToggle = (CFURLRef)[NSURL fileURLWithPath:path]; + LSSharedFileListItemRef existingItem = NULL; + + UInt32 seed = 0U; + NSArray *currentLoginItems = [NSMakeCollectable(LSSharedFileListCopySnapshot(loginItems, &seed)) autorelease]; + + for (id itemObject in currentLoginItems) { + LSSharedFileListItemRef item = (LSSharedFileListItemRef)itemObject; + + UInt32 resolutionFlags = kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes; + CFURLRef URL = NULL; + OSStatus err = LSSharedFileListItemResolve(item, resolutionFlags, &URL, /*outRef*/ NULL); + if (err == noErr) { + Boolean foundIt = CFEqual(URL, URLToToggle); + CFRelease(URL); + + if (foundIt) { + existingItem = item; + break; + } + } + } + + if (enabled && (existingItem == NULL)) { + NSString *displayName = [[NSFileManager defaultManager] displayNameAtPath:path]; + IconRef icon = NULL; + FSRef ref; + Boolean gotRef = CFURLGetFSRef(URLToToggle, &ref); + if (gotRef) { + status = GetIconRefFromFileInfo(&ref, + /*fileNameLength*/ 0, /*fileName*/ NULL, + kFSCatInfoNone, /*catalogInfo*/ NULL, + kIconServicesNormalUsageFlag, + &icon, + /*outLabel*/ NULL); + if (status != noErr) + icon = NULL; + } + + LSSharedFileListInsertItemURL(loginItems, kLSSharedFileListItemBeforeFirst, (CFStringRef)displayName, icon, URLToToggle, /*propertiesToSet*/ NULL, /*propertiesToClear*/ NULL); + } else if (!enabled && (existingItem != NULL)) + LSSharedFileListItemRemove(loginItems, existingItem); +} + + + +#pragma mark **SMC-Binary Owner/Right Check** +//call smc binary with sudo rights and apply ++(void)setRights{ + NSString *smcpath = [[NSBundle mainBundle] pathForResource:@"smc" ofType:@""]; + NSFileManager *fmanage=[NSFileManager defaultManager]; + NSDictionary *fdic = [fmanage attributesOfItemAtPath:smcpath error:nil]; + if ([[fdic valueForKey:@"NSFileOwnerAccountName"] isEqualToString:@"root"] && [[fdic valueForKey:@"NSFileGroupOwnerAccountName"] isEqualToString:@"admin"] && ([[fdic valueForKey:@"NSFilePosixPermissions"] intValue]==3437)) { + return; + } + FILE *commPipe; + AuthorizationRef authorizationRef; + AuthorizationItem gencitem = { "system.privilege.admin", 0, NULL, 0 }; + AuthorizationRights gencright = { 1, &gencitem }; + int flags = kAuthorizationFlagExtendRights | kAuthorizationFlagInteractionAllowed; + status = AuthorizationCreate(&gencright, kAuthorizationEmptyEnvironment, flags, &authorizationRef); + NSString *tool=@"/usr/sbin/chown"; + NSArray *argsArray = [NSArray arrayWithObjects: @"root:admin",smcpath,nil]; + int i; + char *args[255]; + for(i = 0;i < [argsArray count];i++){ + args[i] = (char *)[[argsArray objectAtIndex:i]cString]; + } + args[i] = NULL; + status=AuthorizationExecuteWithPrivileges(authorizationRef,[tool UTF8String],0,args,&commPipe); + //second call for suid-bit + tool=@"/bin/chmod"; + argsArray = [NSArray arrayWithObjects: @"6555",smcpath,nil]; + for(i = 0;i < [argsArray count];i++){ + args[i] = (char *)[[argsArray objectAtIndex:i]cString]; + } + args[i] = NULL; + status=AuthorizationExecuteWithPrivileges(authorizationRef,[tool UTF8String],0,args,&commPipe); +} + + +@end + + + + +@implementation NSNumber (NumberAdditions) + +- (NSString*) tohex{ + return [NSString stringWithFormat:@"%0.4x",[self intValue]<<2]; +} + + +- (NSNumber*) celsius_fahrenheit{ + float celsius=[self floatValue]; + float fahrenheit=(celsius*9)/5+32; + return [NSNumber numberWithFloat:fahrenheit]; +} + +@end + + + diff --git a/Classes/MachineDefaults.h b/Classes/MachineDefaults.h new file mode 100644 index 0000000..2b80b3b --- /dev/null +++ b/Classes/MachineDefaults.h @@ -0,0 +1,37 @@ +/* + * FanControl + * + * Copyright (c) 2006 Hendrik Holtmann +* + * MachineDefaults.m - MacBook(Pro) FanControl application + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#import +#import + + +@interface MachineDefaults : NSObject { + NSString *machine; + NSArray *supported_machines; + Boolean supported; + int machine_num; +} + + + (NSString *)computerModel; + - (id)init:(NSString*)p_machine; + -(NSDictionary*)get_machine_defaults; + - (void)dealloc; +@end diff --git a/Classes/MachineDefaults.m b/Classes/MachineDefaults.m new file mode 100644 index 0000000..fabc1a4 --- /dev/null +++ b/Classes/MachineDefaults.m @@ -0,0 +1,139 @@ +/* + * FanControl + * + * Copyright (c) 2006 Hendrik Holtmann +* + * MachineDefaults.m - MacBook(Pro) FanControl application + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#import "MachineDefaults.h" +#import "NSFileManager+DirectoryLocations.h" + +@implementation MachineDefaults + + +- (id)init:(NSString*)p_machine{ + machine=[MachineDefaults computerModel]; + supported_machines=[[NSArray alloc] initWithContentsOfFile:[[[NSFileManager defaultManager] applicationSupportDirectory] stringByAppendingPathComponent:@"Machines.plist"]]; + return self; +} + + +-(Boolean)is_supported{ + int i; + supported=NO; + for(i=0;i<[supported_machines count];i++) { + if ([machine isEqualToString:[[supported_machines objectAtIndex:i] objectForKey:@"Machine"]]) { + supported=YES; + machine_num=i; + } + } + return supported; +} + + + +-(NSDictionary*) readfrom_plist{ + if (!supported) {return nil;} + return [supported_machines objectAtIndex:machine_num]; +} + + + +-(NSDictionary*) readfrom_smc{ + if (supported) {return nil;} + int num_fans,i; + [smcWrapper init]; + num_fans=[smcWrapper get_fan_num]; + NSString *desc; + NSNumber *min,*max; + NSData *xmldata; + NSString *error; + NSMutableArray *fans=[[NSMutableArray alloc] init]; + for (i = 0; i < num_fans; i++) { + min=[NSNumber numberWithInt:[smcWrapper get_min_speed:i]]; + max=[NSNumber numberWithInt:[smcWrapper get_max_speed:i]]; + desc=[smcWrapper get_fan_descr:i]; + [fans addObject:[NSDictionary dictionaryWithObjectsAndKeys:desc,@"Description",min,@"Minspeed",max,@"Maxspeed",min,@"selspeed",nil]]; + } + //save to plist for future + NSMutableArray *supported_m=[[NSMutableArray alloc] initWithContentsOfFile:[[[NSFileManager defaultManager] applicationSupportDirectory] stringByAppendingPathComponent:@"Machines.plist"]]; + NSDictionary *new_machine= [NSDictionary dictionaryWithObjectsAndKeys:fans,@"Fans",[NSNumber numberWithInt:num_fans],@"NumFans",machine,@"Machine",@"Autogenerated",@"Comment",nil]; + [fans release]; + [supported_m addObject:new_machine]; + + //save to plist + xmldata = [NSPropertyListSerialization dataFromPropertyList:supported_m + format:NSPropertyListXMLFormat_v1_0 + errorDescription:&error]; + [xmldata writeToFile:[[[NSFileManager defaultManager] applicationSupportDirectory] stringByAppendingPathComponent:@"Machines.plist"] atomically:YES]; + [supported_m release]; + //return new machine-live-data + return [new_machine retain]; +} + + + + +-(NSDictionary*)get_machine_defaults{ + NSDictionary *m_defaults=nil; + if ([self is_supported]) { + m_defaults=[self readfrom_plist]; + int i; + //localize fan-descriptions + for (i=0;i<[[m_defaults objectForKey:@"Fans"] count];i++) { + NSString *newvalue=NSLocalizedString([[[m_defaults objectForKey:@"Fans"] objectAtIndex:i] objectForKey:@"Description"],nil); + [[[m_defaults objectForKey:@"Fans"] objectAtIndex:i] setValue:newvalue forKey:@"Description"]; + } + } else { + NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"Alert!",nil) + defaultButton:NSLocalizedString(@"Continue",nil) alternateButton:NSLocalizedString(@"Quit",nil) otherButton:nil + informativeTextWithFormat:NSLocalizedString(@"smcFanControl has not been tested on this machine yet, but it should run if you follow the instructions. \n\nIf you choose to continue, please make you have no other FanControl-software running. Otherwise please quit, deinstall the other software, restart your machine and rerun smcFanControl!",nil)]; + int code=[alert runModal]; + if (code==NSAlertDefaultReturn) { + m_defaults=[self readfrom_smc]; + } else { + [[NSApplication sharedApplication] terminate:nil]; + } + + } + return m_defaults; +} + ++ (NSString *)computerModel +{ + static NSString *computerModel = nil; + if (!computerModel) { + io_service_t pexpdev; + if ((pexpdev = IOServiceGetMatchingService (kIOMasterPortDefault, IOServiceMatching("IOPlatformExpertDevice")))) + { + NSData *data; + if ((data = (id)IORegistryEntryCreateCFProperty(pexpdev, CFSTR("model"), kCFAllocatorDefault, 0))) { + computerModel = [[NSString allocWithZone:NULL] initWithCString:[data bytes] encoding:NSASCIIStringEncoding]; + [data release]; + } + } + } + return computerModel; +} + +- (void)dealloc{ + [super dealloc]; + //[supported_machines release]; +} + +@end diff --git a/Classes/NSFileManager+DirectoryLocations.h b/Classes/NSFileManager+DirectoryLocations.h new file mode 100644 index 0000000..2ffd42a --- /dev/null +++ b/Classes/NSFileManager+DirectoryLocations.h @@ -0,0 +1,36 @@ +// +// NSFileManager+DirectoryLocations.h +// +// Created by Matt Gallagher on 06 May 2010 +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. Permission is granted to anyone to +// use this software for any purpose, including commercial applications, and to +// alter it and redistribute it freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source +// distribution. +// + +#import + +// +// DirectoryLocations is a set of global methods for finding the fixed location +// directoriess. +// +@interface NSFileManager (DirectoryLocations) + +- (NSString *)findOrCreateDirectory:(NSSearchPathDirectory)searchPathDirectory + inDomain:(NSSearchPathDomainMask)domainMask + appendPathComponent:(NSString *)appendComponent + error:(NSError **)errorOut; +- (NSString *)applicationSupportDirectory; + +@end diff --git a/Classes/NSFileManager+DirectoryLocations.m b/Classes/NSFileManager+DirectoryLocations.m new file mode 100644 index 0000000..4de2c36 --- /dev/null +++ b/Classes/NSFileManager+DirectoryLocations.m @@ -0,0 +1,155 @@ +// +// NSFileManager+DirectoryLocations.m +// +// Created by Matt Gallagher on 06 May 2010 +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. Permission is granted to anyone to +// use this software for any purpose, including commercial applications, and to +// alter it and redistribute it freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source +// distribution. +// + +#import "NSFileManager+DirectoryLocations.h" + +enum +{ + DirectoryLocationErrorNoPathFound, + DirectoryLocationErrorFileExistsAtLocation +}; + +NSString * const DirectoryLocationDomain = @"DirectoryLocationDomain"; + +@implementation NSFileManager (DirectoryLocations) + +// +// findOrCreateDirectory:inDomain:appendPathComponent:error: +// +// Method to tie together the steps of: +// 1) Locate a standard directory by search path and domain mask +// 2) Select the first path in the results +// 3) Append a subdirectory to that path +// 4) Create the directory and intermediate directories if needed +// 5) Handle errors by emitting a proper NSError object +// +// Parameters: +// searchPathDirectory - the search path passed to NSSearchPathForDirectoriesInDomains +// domainMask - the domain mask passed to NSSearchPathForDirectoriesInDomains +// appendComponent - the subdirectory appended +// errorOut - any error from file operations +// +// returns the path to the directory (if path found and exists), nil otherwise +// +- (NSString *)findOrCreateDirectory:(NSSearchPathDirectory)searchPathDirectory + inDomain:(NSSearchPathDomainMask)domainMask + appendPathComponent:(NSString *)appendComponent + error:(NSError **)errorOut +{ + // + // Search for the path + // + NSArray* paths = NSSearchPathForDirectoriesInDomains( + searchPathDirectory, + domainMask, + YES); + if ([paths count] == 0) + { + if (errorOut) + { + NSDictionary *userInfo = + [NSDictionary dictionaryWithObjectsAndKeys: + NSLocalizedStringFromTable( + @"No path found for directory in domain.", + @"Errors", + nil), + NSLocalizedDescriptionKey, + [NSNumber numberWithInteger:searchPathDirectory], + @"NSSearchPathDirectory", + [NSNumber numberWithInteger:domainMask], + @"NSSearchPathDomainMask", + nil]; + *errorOut = + [NSError + errorWithDomain:DirectoryLocationDomain + code:DirectoryLocationErrorNoPathFound + userInfo:userInfo]; + } + return nil; + } + + // + // Normally only need the first path returned + // + NSString *resolvedPath = [paths objectAtIndex:0]; + + // + // Append the extra path component + // + if (appendComponent) + { + resolvedPath = [resolvedPath + stringByAppendingPathComponent:appendComponent]; + } + + // + // Create the path if it doesn't exist + // + NSError *error = nil; + BOOL success = [self + createDirectoryAtPath:resolvedPath + withIntermediateDirectories:YES + attributes:nil + error:&error]; + if (!success) + { + if (errorOut) + { + *errorOut = error; + } + return nil; + } + + // + // If we've made it this far, we have a success + // + if (errorOut) + { + *errorOut = nil; + } + return resolvedPath; +} + +// +// applicationSupportDirectory +// +// Returns the path to the applicationSupportDirectory (creating it if it doesn't +// exist). +// +- (NSString *)applicationSupportDirectory +{ + NSString *executableName = + [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleExecutable"]; + NSError *error; + NSString *result = + [self + findOrCreateDirectory:NSApplicationSupportDirectory + inDomain:NSUserDomainMask + appendPathComponent:executableName + error:&error]; + if (!result) + { + NSLog(@"Unable to find or create application support directory:\n%@", error); + } + return result; +} + +@end diff --git a/Classes/Power.h b/Classes/Power.h new file mode 100644 index 0000000..4d027ca --- /dev/null +++ b/Classes/Power.h @@ -0,0 +1,70 @@ +/* + * FanControl + * + * Copyright (c) 2006 Hendrik Holtmann +* + * Power.h - MacBook(Pro) FanControl application + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#import +#include +#include +#include +#include +#include + + +@interface Power : NSObject { + + io_connect_t root_port; + io_object_t notifier; + IONotificationPortRef notificationPort; + id _delegate; + +} + +- (id)init; + +- (id)delegate; +- (void)setDelegate:(id)new_delegate; + +- (void)registerForSleepWakeNotification; +- (void)deregisterForSleepWakeNotification; + +- (void)registerForPowerChange; +- (void)deregisterForPowerChange; + +//internal +- (void)powerMessageReceived:(natural_t)messageType withArgument:(void *) messageArgument; +- (void)powerSourceMesssageReceived:(NSDictionary *)n_description; + + +@end + + +//delegate Prototypes +@interface NSObject (PowerDelegate) + +- (void)systemDidWakeFromSleep:(id)sender; + +- (void)powerChangeToBattery:(id)sender; + +- (void)powerChangeToAC:(id)sender; + +- (void)powerChangeToACLoading:(id)sender; + +@end diff --git a/Classes/Power.m b/Classes/Power.m new file mode 100644 index 0000000..08eb2af --- /dev/null +++ b/Classes/Power.m @@ -0,0 +1,177 @@ +/* + * FanControl + * + * Copyright (c) 2006 Hendrik Holtmann +* + * Power.m - MacBook(Pro) FanControl application + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#import "Power.h" + + +static CFRunLoopSourceRef powerNotifierRunLoopSource = NULL; + +static int lastsource=0; + +@implementation Power + + +void SleepWatcher( void * refCon, io_service_t service, natural_t messageType, void * messageArgument ){ + [(Power *)refCon powerMessageReceived: messageType withArgument: messageArgument]; +} + + + +static void powerSourceChanged(void * refCon) +{ + CFTypeRef powerBlob = IOPSCopyPowerSourcesInfo(); + CFArrayRef powerSourcesList = IOPSCopyPowerSourcesList(powerBlob); + unsigned count = CFArrayGetCount(powerSourcesList); + unsigned int i; + for (i = 0U; i < count; ++i) { //in case we have several powersources + CFTypeRef powerSource; + CFDictionaryRef description; + powerSource = CFArrayGetValueAtIndex(powerSourcesList, i); + description = IOPSGetPowerSourceDescription(powerBlob, powerSource); + //work with NSArray from here + NSDictionary *n_description = (NSDictionary *)description; + [(Power *)refCon powerSourceMesssageReceived:n_description]; + } + CFRelease(powerBlob); + CFRelease(powerSourcesList); +} + +- (id)init{ + [super init]; + return self; +} + + +- (void)registerForSleepWakeNotification +{ + root_port = IORegisterForSystemPower(self, ¬ificationPort, SleepWatcher, ¬ifier); + CFRunLoopAddSource(CFRunLoopGetCurrent(), IONotificationPortGetRunLoopSource(notificationPort), kCFRunLoopDefaultMode); +} + + +- (void)registerForPowerChange +{ + powerNotifierRunLoopSource = IOPSNotificationCreateRunLoopSource(powerSourceChanged,self); + if (powerNotifierRunLoopSource) { + CFRunLoopAddSource(CFRunLoopGetCurrent(), powerNotifierRunLoopSource, kCFRunLoopDefaultMode); + } +} + + +- (void)deregisterForSleepWakeNotification +{ + CFRunLoopRemoveSource( CFRunLoopGetCurrent(), + IONotificationPortGetRunLoopSource(notificationPort), + kCFRunLoopCommonModes ); + IODeregisterForSystemPower(¬ifier); + IOServiceClose(root_port); + IONotificationPortDestroy(notificationPort); +} + +- (void)deregisterForPowerChange{ + CFRunLoopRemoveSource(CFRunLoopGetCurrent(), powerNotifierRunLoopSource, kCFRunLoopDefaultMode); + CFRelease(powerNotifierRunLoopSource); +} + + + +- (void)powerMessageReceived:(natural_t)messageType withArgument:(void *) messageArgument +{ + switch (messageType) + { + case kIOMessageSystemWillSleep: + IOAllowPowerChange(root_port, (long)messageArgument); + break; + case kIOMessageCanSystemSleep: + IOAllowPowerChange(root_port, (long)messageArgument); + break; + case kIOMessageSystemHasPoweredOn: + if ([_delegate respondsToSelector:@selector(systemDidWakeFromSleep:)]) + [_delegate systemDidWakeFromSleep:self]; + else + { + [NSException raise:NSInternalInconsistencyException format:@"Delegate doesn't respond to ourDelegate"]; + } + break; + } +} + +- (void)powerSourceMesssageReceived:(NSDictionary *)n_description{ + if (([[n_description objectForKey:@"Power Source State"] isEqualToString:@"AC Power"] && [[n_description objectForKey:@"Is Charging"] intValue]==1) && lastsource!=1) { + lastsource=1; + if ([_delegate respondsToSelector:@selector(powerChangeToACLoading:)]) + [_delegate powerChangeToACLoading:self]; + else + { + [NSException raise:NSInternalInconsistencyException format:@"Delegate doesn't respond to ourDelegate"]; + } + } + + + if (([[n_description objectForKey:@"Power Source State"] isEqualToString:@"AC Power"] && [[n_description objectForKey:@"Is Charging"] intValue]==0) && lastsource!=2) { + lastsource=2; + if ([_delegate respondsToSelector:@selector(powerChangeToAC:)]) + [_delegate powerChangeToAC:self]; + else + { + [NSException raise:NSInternalInconsistencyException format:@"Delegate doesn't respond to ourDelegate"]; + } + } + + if (([[n_description objectForKey:@"Power Source State"] isEqualToString:@"Battery Power"]) && lastsource!=3) { + lastsource=3; + if ([_delegate respondsToSelector:@selector(powerChangeToBattery:)]) + [_delegate powerChangeToBattery:self]; + else + { + [NSException raise:NSInternalInconsistencyException format:@"Delegate doesn't respond to ourDelegate"]; + } + } + +} + + + +- (id)delegate +{ + return _delegate; +} + +- (void)setDelegate:(id)new_delegate +{ + + _delegate = new_delegate; +} + +- (void)dealloc +{ + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + + if (_delegate) + [nc removeObserver:_delegate name:nil object:self]; + + [super dealloc]; +} + + + +@end diff --git a/Classes/StatusItemWindow.h b/Classes/StatusItemWindow.h new file mode 100644 index 0000000..6f95843 --- /dev/null +++ b/Classes/StatusItemWindow.h @@ -0,0 +1,31 @@ +/* + * FanControl + * + * Copyright (c) 2006 Hendrik Holtmann +* + * StatusItemWindow.h - MacBook(Pro) FanControl application + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#import + + +@interface StatusItemWindow : NSWindow { +} + +- (void)makeKeyAndOrderFront:(id)sender; + +@end diff --git a/Classes/StatusItemWindow.m b/Classes/StatusItemWindow.m new file mode 100644 index 0000000..048a17c --- /dev/null +++ b/Classes/StatusItemWindow.m @@ -0,0 +1,32 @@ +/* + * FanControl + * + * Copyright (c) 2006 Hendrik Holtmann +* + * StatusItemWindow.m - MacBook(Pro) FanControl application + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#import "StatusItemWindow.h" + + +@implementation StatusItemWindow + +- (void)makeKeyAndOrderFront:(id)sender { + [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; + [super makeKeyAndOrderFront:sender]; +} + +@end diff --git a/Classes/SystemVersion.h b/Classes/SystemVersion.h new file mode 100644 index 0000000..247910d --- /dev/null +++ b/Classes/SystemVersion.h @@ -0,0 +1,70 @@ +// +// GTMSystemVersion.h +// +// Copyright 2007-2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +#import + +// A class for getting information about what system we are running on +@interface SystemVersion : NSObject + +// Returns the current system version major.minor.bugFix ++ (void)getMajor:(SInt32*)major minor:(SInt32*)minor bugFix:(SInt32*)bugFix; + +// Returns the build number of the OS. Useful when looking for bug fixes +// in new OSes which all have a set system version. +// eg 10.5.5's build number is 9F33. Easy way to check the build number +// is to choose "About this Mac" from the Apple menu and click on the version +// number. ++ (NSString*)build; + ++ (BOOL)isBuildLessThan:(NSString*)build; ++ (BOOL)isBuildLessThanOrEqualTo:(NSString*)build; ++ (BOOL)isBuildGreaterThan:(NSString*)build; ++ (BOOL)isBuildGreaterThanOrEqualTo:(NSString*)build; ++ (BOOL)isBuildEqualTo:(NSString *)build; + +// Returns YES if running on 10.3, NO otherwise. ++ (BOOL)isPanther; + +// Returns YES if running on 10.4, NO otherwise. ++ (BOOL)isTiger; + +// Returns YES if running on 10.5, NO otherwise. ++ (BOOL)isLeopard; + +// Returns YES if running on 10.6, NO otherwise. ++ (BOOL)isSnowLeopard; + +// Returns a YES/NO if the system is 10.3 or better ++ (BOOL)isPantherOrGreater; + +// Returns a YES/NO if the system is 10.4 or better ++ (BOOL)isTigerOrGreater; + +// Returns a YES/NO if the system is 10.5 or better ++ (BOOL)isLeopardOrGreater; + +// Returns a YES/NO if the system is 10.6 or better ++ (BOOL)isSnowLeopardOrGreater; + // GTM_MACOS_SDK + +// Returns one of the achitecture strings below. Note that this is the +// architecture that we are currently running as, not the hardware architecture. ++ (NSString *)runtimeArchitecture; +@end + + diff --git a/Classes/SystemVersion.m b/Classes/SystemVersion.m new file mode 100644 index 0000000..30213d6 --- /dev/null +++ b/Classes/SystemVersion.m @@ -0,0 +1,217 @@ +// +// GTMSystemVersion.m +// +// Copyright 2007-2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +#import "SystemVersion.h" +#if GTM_MACOS_SDK +#import +#endif + +static SInt32 sGTMSystemVersionMajor = 0; +static SInt32 sGTMSystemVersionMinor = 0; +static SInt32 sGTMSystemVersionBugFix = 0; +static NSString *sBuild = nil; + +NSString *const kGTMArch_iPhone = @"iPhone"; +NSString *const kGTMArch_ppc = @"ppc"; +NSString *const kGTMArch_ppc64 = @"ppc64"; +NSString *const kGTMArch_x86_64 = @"x86_64"; +NSString *const kGTMArch_i386 = @"i386"; + +static NSString *const kSystemVersionPlistPath = @"/System/Library/CoreServices/SystemVersion.plist"; + +@implementation SystemVersion ++ (void)initialize { + if (self == [SystemVersion class]) { + // Gestalt is the recommended way of getting the OS version (despite a + // comment to the contrary in the 10.4 headers and docs; see + // ). + // The iPhone doesn't have Gestalt though, so use the plist there. +#if GTM_MACOS_SDK + require_noerr(Gestalt(gestaltSystemVersionMajor, &sGTMSystemVersionMajor), failedGestalt); + require_noerr(Gestalt(gestaltSystemVersionMinor, &sGTMSystemVersionMinor), failedGestalt); + require_noerr(Gestalt(gestaltSystemVersionBugFix, &sGTMSystemVersionBugFix), failedGestalt); + + return; + + failedGestalt: + ; +#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_3 + // gestaltSystemVersionMajor et al are only on 10.4 and above, so they + // could fail when running on 10.3. + SInt32 binaryCodedDec; + OSStatus err = err = Gestalt(gestaltSystemVersion, &binaryCodedDec); + + // Note that this code will return x.9.9 for any system rev parts that are + // greater than 9 (i.e., 10.10.10 will be 10.9.9). This shouldn't ever be a + // problem as the code above takes care of 10.4+. + SInt32 msb = (binaryCodedDec & 0x0000F000L) >> 12; + msb *= 10; + SInt32 lsb = (binaryCodedDec & 0x00000F00L) >> 8; + sGTMSystemVersionMajor = msb + lsb; + sGTMSystemVersionMinor = (binaryCodedDec & 0x000000F0L) >> 4; + sGTMSystemVersionBugFix = (binaryCodedDec & 0x0000000FL); +#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_3 + +#else // GTM_MACOS_SDK + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSDictionary *systemVersionPlist + = [NSDictionary dictionaryWithContentsOfFile:kSystemVersionPlistPath]; + NSString *version = [systemVersionPlist objectForKey:@"ProductVersion"]; + NSArray *versionInfo = [version componentsSeparatedByString:@"."]; + int length = [versionInfo count]; + sGTMSystemVersionMajor = [[versionInfo objectAtIndex:0] intValue]; + sGTMSystemVersionMinor = [[versionInfo objectAtIndex:1] intValue]; + if (length == 3) { + sGTMSystemVersionBugFix = [[versionInfo objectAtIndex:2] intValue]; + } + [pool release]; +#endif // GTM_MACOS_SDK + } +} + ++ (void)getMajor:(SInt32*)major minor:(SInt32*)minor bugFix:(SInt32*)bugFix { + if (major) { + *major = sGTMSystemVersionMajor; + } + if (minor) { + *minor = sGTMSystemVersionMinor; + } + if (bugFix) { + *bugFix = sGTMSystemVersionBugFix; + } +} + ++ (NSString*)build { + @synchronized(self) { + // Not cached at initialization time because we don't expect "real" + // software to want this, and it costs a bit to get at startup. + // This will mainly be for unit test cases. + if (!sBuild) { + NSDictionary *systemVersionPlist + = [NSDictionary dictionaryWithContentsOfFile:kSystemVersionPlistPath]; + sBuild = [[systemVersionPlist objectForKey:@"ProductBuildVersion"] retain]; + } + } + return sBuild; +} + ++ (BOOL)isBuildLessThan:(NSString*)build { + NSComparisonResult result + = [[self build] compare:build + options:NSNumericSearch | NSCaseInsensitiveSearch]; + return result == NSOrderedAscending; +} + ++ (BOOL)isBuildLessThanOrEqualTo:(NSString*)build { + NSComparisonResult result + = [[self build] compare:build + options:NSNumericSearch | NSCaseInsensitiveSearch]; + return result != NSOrderedDescending; +} + ++ (BOOL)isBuildGreaterThan:(NSString*)build { + NSComparisonResult result + = [[self build] compare:build + options:NSNumericSearch | NSCaseInsensitiveSearch]; + return result == NSOrderedDescending; +} + ++ (BOOL)isBuildGreaterThanOrEqualTo:(NSString*)build { + NSComparisonResult result + = [[self build] compare:build + options:NSNumericSearch | NSCaseInsensitiveSearch]; + return result != NSOrderedAscending; +} + ++ (BOOL)isBuildEqualTo:(NSString *)build { + NSComparisonResult result + = [[self build] compare:build + options:NSNumericSearch | NSCaseInsensitiveSearch]; + return result == NSOrderedSame; +} + ++ (BOOL)isPanther { + return sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor == 3; +} + ++ (BOOL)isTiger { + return sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor == 4; +} + ++ (BOOL)isLeopard { + return sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor == 5; +} + ++ (BOOL)isSnowLeopard { + return sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor == 6; +} + ++ (BOOL)isPantherOrGreater { + return (sGTMSystemVersionMajor > 10) || + (sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor >= 3); +} + ++ (BOOL)isTigerOrGreater { + return (sGTMSystemVersionMajor > 10) || + (sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor >= 4); +} + ++ (BOOL)isLeopardOrGreater { + return (sGTMSystemVersionMajor > 10) || + (sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor >= 5); +} + ++ (BOOL)isSnowLeopardOrGreater { + return (sGTMSystemVersionMajor > 10) || + (sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor >= 6); +} + + ++ (NSString *)runtimeArchitecture { + NSString *architecture = nil; +#if GTM_IPHONE_SDK + architecture = kGTMArch_iPhone; +#else // !GTM_IPHONE_SDK + // In reading arch(3) you'd thing this would work: + // + // const NXArchInfo *localInfo = NXGetLocalArchInfo(); + // _GTMDevAssert(localInfo && localInfo->name, @"Couldn't get NXArchInfo"); + // const NXArchInfo *genericInfo = NXGetArchInfoFromCpuType(localInfo->cputype, 0); + // _GTMDevAssert(genericInfo && genericInfo->name, @"Couldn't get generic NXArchInfo"); + // extensions[0] = [NSString stringWithFormat:@".%s", genericInfo->name]; + // + // but on 64bit it returns the same things as on 32bit, so... +#if __POWERPC__ +#if __LP64__ + architecture = kGTMArch_ppc64; +#else // !__LP64__ + architecture = kGTMArch_ppc; +#endif // __LP64__ +#else // !__POWERPC__ +#if __LP64__ + architecture = kGTMArch_x86_64; +#else // !__LP64__ + architecture = kGTMArch_i386; +#endif // __LP64__ +#endif // !__POWERPC__ + +#endif // GTM_IPHONE_SDK + return architecture; +} + +@end \ No newline at end of file diff --git a/Classes/smcWrapper.h b/Classes/smcWrapper.h new file mode 100644 index 0000000..ee1b716 --- /dev/null +++ b/Classes/smcWrapper.h @@ -0,0 +1,40 @@ +/* + * FanControl + * + * Copyright (c) 2006 Hendrik Holtmann +* + * smcWrapper.m - MacBook(Pro) FanControl application + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#import +#import +#import + +@interface smcWrapper : NSObject { +} + ++(int) get_fan_rpm:(int)fan_number; ++(float) get_maintemp; ++(float) get_mptemp; ++(int) get_fan_num; ++(int) get_min_speed:(int)fan_number; ++(int) get_max_speed:(int)fan_number; ++(void)setKey_external:(NSString *)key value:(NSString *)value; ++(NSString*) get_fan_descr:(int)fan_number; + +@end diff --git a/Classes/smcWrapper.m b/Classes/smcWrapper.m new file mode 100644 index 0000000..b46ae45 --- /dev/null +++ b/Classes/smcWrapper.m @@ -0,0 +1,187 @@ +/* + * FanControl + * + * Copyright (c) 2006 Hendrik Holtmann +* + * smcWrapper.m - MacBook(Pro) FanControl application + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#import "smcWrapper.h" +#import + +NSString * const smc_checksum=@"0becdb25cdf64eb74b001c8a77c5e6b7"; +static NSDictionary *tsensors = nil; + +@implementation smcWrapper + io_connect_t conn; + ++(void)init{ + SMCOpen(&conn); + tsensors = [[NSDictionary alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"tsensors" ofType:@"plist"]]; +} + ++(float) get_maintemp{ + float c_temp; + + NSRange range_pro=[[MachineDefaults computerModel] rangeOfString:@"MacPro"]; + if (range_pro.length > 0) { + //special readout for MacPro + c_temp=[smcWrapper get_mptemp]; + } else { + SMCVal_t val; + NSMutableArray *allTSensors = [[tsensors allKeys] mutableCopy]; + NSString *foundKey = [tsensors objectForKey:[MachineDefaults computerModel]]; + if (foundKey !=nil) { + foundKey = [MachineDefaults computerModel]; + } else { + foundKey = @"standard"; + } + [allTSensors removeObject:foundKey]; + SMCReadKey2((char*)[[tsensors objectForKey:foundKey] UTF8String], &val,conn); + c_temp= ((val.bytes[0] * 256 + val.bytes[1]) >> 2)/64; + + if (c_temp<=0) { + for (NSString *key in allTSensors) { + SMCReadKey2((char*)[[tsensors objectForKey:key] UTF8String], &val,conn); + c_temp= ((val.bytes[0] * 256 + val.bytes[1]) >> 2)/64; + if (c_temp>0) break; + } + } + } + + return c_temp; +} + + +//temperature-readout for MacPro contributed by Victor Boyer ++(float) get_mptemp{ + UInt32Char_t keyA; + UInt32Char_t keyB; + SMCVal_t valA; + SMCVal_t valB; + // kern_return_t resultA; + // kern_return_t resultB; + sprintf(keyA, "TCAH"); + SMCReadKey2(keyA, &valA,conn); + sprintf(keyB, "TCBH"); + SMCReadKey2(keyB, &valB,conn); + float c_tempA= ((valA.bytes[0] * 256 + valA.bytes[1]) >> 2)/64.0; + float c_tempB= ((valB.bytes[0] * 256 + valB.bytes[1]) >> 2)/64.0; + int i_tempA, i_tempB; + if (c_tempA < c_tempB) + { + i_tempB = round(c_tempB); + return i_tempB; + } + else + { + i_tempA = round(c_tempA); + return i_tempA; + } +} + ++(int) get_fan_rpm:(int)fan_number{ + UInt32Char_t key; + SMCVal_t val; + //kern_return_t result; + sprintf(key, "F%dAc", fan_number); + SMCReadKey2(key, &val,conn); + int running= _strtof(val.bytes, val.dataSize, 2); + return running; +} + ++(int) get_fan_num{ +// kern_return_t result; + SMCVal_t val; + int totalFans; + SMCReadKey2("FNum", &val,conn); + totalFans = _strtoul(val.bytes, val.dataSize, 10); + return totalFans; +} + ++(NSString*) get_fan_descr:(int)fan_number{ + UInt32Char_t key; + char temp; + SMCVal_t val; + //kern_return_t result; + NSMutableString *desc; +// desc=[[NSMutableString alloc] initWithFormat:@"Fan #%d: ",fan_number+1]; + desc=[[[NSMutableString alloc]init] autorelease]; + sprintf(key, "F%dID", fan_number); + SMCReadKey2(key, &val,conn); + int i; + for (i = 0; i < val.dataSize; i++) { + if ((int)val.bytes[i]>32) { + temp=(unsigned char)val.bytes[i]; + [desc appendFormat:@"%c",temp]; + } + } + return desc; +} + + ++(int) get_min_speed:(int)fan_number{ + UInt32Char_t key; + SMCVal_t val; + //kern_return_t result; + sprintf(key, "F%dMn", fan_number); + SMCReadKey2(key, &val,conn); + int min= _strtof(val.bytes, val.dataSize, 2); + return min; +} + ++(int) get_max_speed:(int)fan_number{ + UInt32Char_t key; + SMCVal_t val; + //kern_return_t result; + sprintf(key, "F%dMx", fan_number); + SMCReadKey2(key, &val,conn); + int max= _strtof(val.bytes, val.dataSize, 2); + return max; +} + + ++ (NSString*)createCheckSum:(NSString*)path { + NSData *d=[NSData dataWithContentsOfMappedFile:path]; + unsigned char result[CC_MD5_DIGEST_LENGTH]; + CC_MD5((void *)[d bytes], [d length], result); + NSMutableString *ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH*2]; + for(int i = 0; i + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + smcFanControl + CFBundleGetInfoString + smcFanControl 2.4, Hendrik Holtmann (GPL) + CFBundleIconFile + smcfancontrol_v2 + CFBundleIdentifier + com.eidac.smcFanControl2 + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + smcFanControl + CFBundlePackageType + APPL + CFBundleShortVersionString + 2.4 + CFBundleSignature + ???? + CFBundleVersion + 2.4 + LSUIElement + 1 + NSHumanReadableCopyright + Hendrik Holtmann(GPL) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/Ressources/Dutch.lproj/F.A.Q.rtf b/Ressources/Dutch.lproj/F.A.Q.rtf new file mode 100644 index 0000000..2aa5a57 --- /dev/null +++ b/Ressources/Dutch.lproj/F.A.Q.rtf @@ -0,0 +1,107 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1187 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural + +\f0\fs62 \cf0 F.A.Q for smcFanControl 2.4\ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural + +\fs24 \cf0 \ + +\b How do install and uninstall smcFanControl?\ + +\b0 smcFanControl is just an application. So after downloading, and unzipping it, drag it to wherever you want (e.g. the Application Folder). To uninstall it, just drag it into the trash. smcFanControl installs no permanent background processes or daemons. \ +All changes smcFanControl does to the fan controlling get lost after you shutdown your computer (power off, not restart) or enter standby mode (as far as you don't have smcFanControl running) . Minimum fan speed then falls back to the system defaults values.\ +\ + +\b When I run smcFanControl and set a new minimum speed, will my fan speed still increase if the CPU load gets higher?\ + +\b0 Yes, fan speed will increase as defined by Apple. smcFanControl lets the fans stay in automatic mode and just sets the minimum fan speed. However, the higher you set the minimum fan speed, the longer it will take for the fan speed to increase.\ +\ + +\b Why does smcFanControl asks for a login and password and which login/password do I have to enter?\ + +\b0 smcFanControl needs the credentials of an admin-user to set the appropriate rights to be able to change fanspeed. You only have to enter it one time. The entered login and password are not saved by smcFanControl. They are just used for setting the appropriate rights.\ +\ + +\b I get a "smcFanControl has not been tested on this machine" warning. What does that mean?\ + +\b0 Technically smcFanControl supports every intel mac, but it does not come with defaults for every machine. If you get the warning, smcFanControl tries to read out the fan-details directly from the System Management Controller. If you follow the instructions (no other fan control software is running etc.) you should have no problem running smcFanControl on a machine it has not been tested on.\ +\ + +\b How can I restore the Apple defaults for fanspeed?\ + +\b0 Move the sliders to the left and hit apply. The lowest settings smcFanControl allows are the Apple defaults. The minimum default speed after Apple's latest SMC firmware update is 1000rpm for the MBP 15,4", 1500rpm for the MB 13,3". 2000rpm for the Core2Duo MBP and 1800rpm for the Core2Duo MB.\ + +\b \ +Why can't I set my minimum fan speed to 0 rpm?\ + +\b0 smcFanControl only lets you set the fan speed in the range of Apple's min and max values. Setting it to zero is possible from the technical perspective but could probably damage your machine.\ +\ + +\b When will the new settings for minimum fan speed get lost?\ + +\b0 The settings you chose for minimum fan speed will get lost in two cases and the machine will fall back to default values:\ +a) You enter standby mode and smcFanControl is not running (If its running it watches for standby and reapplies your settings when you wake up the machine).\ +b) You power off the machine.\ +\ + +\b Which sensor is read out for the temperature?\ + +\b0 It's not the sensor on the CoreDuo CPU's. The advantage is, that there is no Kernel Extension loaded for temperature readout and temperature should always be reported (some CoreDuo's stop temperature reporting after some minutes unfortunately). The sensor readout is very close to what CoreDuoTemp reports, but its not exactly the same cause of different sensors. +\b \ + +\b0 \ + +\b What about fan-control when I am in Windows XP running Bootcamp?\ + +\b0 At the moment you can not set minimum fan speed when you are in Windows XP (cause smcFanControl is a native OS X application). However if you set up a new minimum fan speed in OS X using smcFanControl and then restart into Windows XP, your settings don't get lost and that new minimum fan speed is used on Windows XP for that session. Some people have reported usage of this to make their MBP cooler and not crashing when running games under Windows XP.\ + +\b \ +Will there be a version of smcFanControl for Powerbooks or other PPC based Macs?\ + +\b0 No, PPC based macs don't have an SMC controller. So the approach of smcFanControl does not work. It's possible that there are solutions to control fan speed on PPC based macs, but I am not aware of any.\ +\ + +\b Will there be a dashboard widget for smcFanControl?\ + +\b0 Well, I think this is a nice idea. I am currently working on improving smcFanControl as an application. But maybe someone else is a good dashboard developer. The GPL sources of smcFanControl should be a good starting point.\ +\ + +\b Wouldn't it be even better to read out the temperature and set the fan speeds depending on the readout than just set the minimum fan speed and let automatic fan control as defined by apple do the rest?\ + +\b0 Yes, that approach is even better and could make your machine running cooler, when you are at higher loads. BUT: I did not take this route for smcFanControl, cause it has some risks. Adjusting the fan speed to CPU temperature requires you have a program running in the background (e.g. a daemon) that adjust fan speed continuously . If that program ever crashes or becomes incompatible cause of a System Update (or the readouts of the temperature sensor get inappropriate) , the fans could get set to a wrong (too low) speed and this could probably damage the machine. In addition to that the fan-control-logic is quite complicate. An intel mac has about 10 temperature sensors, that are continuously read out and are used for monitoring and setting the right fan speeds. So it would be "not so great" to read out just the CPU temperature as a foundation for the fan-controlling.\ +\ + +\b I have got a MBP and smcFanControl is reporting 0rpm for one of my fans?\ + +\b0 In that case the fan did not report any data to smcFanControl. +\b +\b0 It is possible that one of your fan's is dead. +\b +\b0 Please check your computer with the Apple Hardware Test (it's on the DVD that comes with your computer) and see if it reports a failure with one of your fans. \ +\ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural + +\b \cf0 What are the main-differences between Version 1.2x and Version 2.x of smcFanControl?\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural +\ls1\ilvl0 +\b0 \cf0 {\listtext \'95 }Version 2.x is a completely rewritten application.\ +{\listtext \'95 }Version 1.x was a "regular" application located in the dock. Version 2.x sits in the menubar for quicker access to the fan settings, easier monitoring and a better overall user-experience\ +{\listtext \'95 }Version 2.x supports every intel mac\ +{\listtext \'95 }In Version 2.x you can save different fan-settings as favorites and active them with just one mouse-click\ +{\listtext \'95 }On portables you can autoapply different fan-settings, when the powersource changes. So you can cool down your macbook automatically when its loading the battery (and is typically running hotter).\ +{\listtext \'95 }Version 2.x has got an "add to login-items option" now\ +{\listtext \'95 }Version 2.x uses standard OS X authentication now\ +{\listtext \'95 }Version 2.x uses the Sparkle-Framework to automatically check for updates +\b \ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural + +\b0 \cf0 \ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural +\ls2\ilvl0\cf0 \ +} \ No newline at end of file diff --git a/Ressources/Dutch.lproj/InfoPlist.strings b/Ressources/Dutch.lproj/InfoPlist.strings new file mode 100644 index 0000000..5832ff9 Binary files /dev/null and b/Ressources/Dutch.lproj/InfoPlist.strings differ diff --git a/Ressources/Dutch.lproj/Localizable.strings b/Ressources/Dutch.lproj/Localizable.strings new file mode 100644 index 0000000..38e1576 --- /dev/null +++ b/Ressources/Dutch.lproj/Localizable.strings @@ -0,0 +1,23 @@ +"Do you really want to delete the favorite %@?" = "Weet je zeker dat je de favoriet %@ wilt wissen?"; + +"Yes" = "Ja"; + +"No" = "Nee"; + +"Delete favorite" = "Verwijder Favoriet"; + +"MainFan" = "Hoofd Fan"; + +"Left Fan" = "Linker Fan"; + +"Right Fan" = "Rechter Fan"; + +"smcFanControl has not been tested on this machine yet, but it should run if you follow the instructions. \n\nIf you choose to continue, please make you have no other FanControl-software running. Otherwise please quit, deinstall the other software, restart your machine and rerun smcFanControl!" = "smcFanControl is nog niet getest op deze machine, maar het zou moeten werken als je de instructies volgt. \n\nAls je doorgaat, zorg dan dat er geen andere FanControl-software draait. Als dat wel zo is, de-installeer deze software dan, stop smcFanControl en restart je computer voor je smcFanControl installeert!"; + +"Continue" = "Doorgaan"; + +"Quit" = "Stop"; + +"Alert!" = "Let op!"; + +"Active Setting" = "Actieve Instelling"; diff --git a/Ressources/Dutch.lproj/MainMenu.nib/designable.nib b/Ressources/Dutch.lproj/MainMenu.nib/designable.nib new file mode 100644 index 0000000..2019dc0 --- /dev/null +++ b/Ressources/Dutch.lproj/MainMenu.nib/designable.nib @@ -0,0 +1,4783 @@ + + + + 1050 + 12A269 + 2549 + 1187 + 624.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2549 + + + NSArrayController + NSBox + NSButton + NSButtonCell + NSColorWell + NSCustomObject + NSImageCell + NSImageView + NSMatrix + NSMenu + NSMenuItem + NSNumberFormatter + NSPopUpButton + NSPopUpButtonCell + NSScrollView + NSScroller + NSSliderCell + NSTableColumn + NSTableHeaderView + NSTableView + NSTextField + NSTextFieldCell + NSTextView + NSUserDefaultsController + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + + NSApplication + + + + FirstResponder + + + NSApplication + + + 7 + 2 + {{519, 155}, {337, 436}} + 1886912512 + smcFanControl + StatusItemWindow + + View + + + {213, 107} + + + 256 + + + + 256 + + + + 2304 + + + + 4352 + {295, 81} + + + YES + NO + YES + + + 256 + {295, 17} + + + + + + + 256 + {{285, 0}, {12, 17}} + + + + menu + 45 + 30 + 1000 + + 75497536 + 2048 + Menu + + LucidaGrande + 10 + 2843 + + + 3 + MC4zMzMzMzI5OQA + + + 6 + System + headerTextColor + + 3 + MAA + + + + + 67108864 + 134348800 + + + LucidaGrande + 11 + 3100 + + + 1215582464 + 130 + + NSImage + NSRadioButton + + + NSRadioButton + + + + 200 + 25 + + 3 + YES + YES + + + + fannr + 87 + 72 + 1000 + + 75497536 + 2048 + Fan + + + 3 + MC4zMzMzMzI5OQA + + + + + 337641536 + 2048 + + LucidaGrande + 11 + 16 + + + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + 3 + YES + + + + speedslider + 95 + 40 + 1000 + + 75497536 + 2048 + min. Speed + + + + + + 0 + 131072 + + 100 + 0.0 + 0.0 + 0.0 + 0 + 0 + NO + NO + + YES + + + + speed + 45 + 45 + 1000 + + 75497536 + 2048 + RPM + + + 6 + System + headerColor + + 3 + MQA + + + + + + 337641472 + 67108864 + + + + + + 0 + + + , + + . + -0 + 0 + + + 0 + -0 + + + + + + + + NaN + + + + 0 + 0 + YES + NO + 1 + AAAAAAAAAAAAAAAAAAAAAA + + + + , + . + NO + YES + YES + + + + 6 + System + textBackgroundColor + + + + + 3 + YES + YES + + + + 3 + 2 + + + 6 + System + gridColor + + 3 + MC41AA + + + 14 + 304087040 + + + 0 + 15 + 0 + YES + 0 + 1 + + + {{1, 17}, {295, 81}} + + + + + + 4 + + + + 256 + {{282, 17}, {14, 81}} + + + NO + 256 + + _doScroller: + 0.4375 + + + + 256 + {{1, 84}, {295, 14}} + + + NO + 257 + + _doScroller: + 0.98269897699356079 + + + + 2304 + + + + {{1, 0}, {295, 17}} + + + + + + 4 + + + {{20, 292}, {297, 99}} + + + + 133170 + + + + + AAAAAAAAAABBgAAAQYAAAA + 0.25 + 4 + 1 + + + + 264 + {{73, 395}, {177, 22}} + + + YES + + -2076180416 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Item1 + + 1048576 + 2147483647 + 1 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + _popUpItemAction: + + + YES + + + OtherViews + + + + + + Item2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 3 + YES + YES + 1 + + NO + + + + 264 + {{17, 397}, {54, 17}} + + + + YES + + 67108864 + 272629760 + Favoriet: + + + + 6 + System + controlColor + + + + + NO + + + + 264 + {{285, 392}, {37, 28}} + + + YES + + 67108864 + 134348800 + + + + + -2038284288 + 1 + + + + + + 200 + 25 + + NO + + + + 264 + {{250, 392}, {37, 28}} + + + + YES + + 67108864 + 134348800 + - + + + -2038284288 + 1 + + + + + + 200 + 25 + + NO + + + + 256 + + + + 274 + + + + 256 + {{13, 85}, {278, 29}} + + + YES + + 603979776 + 131072 + Verander favoriet bij stroombron veranderingen + + + 1211912448 + 2 + + NSSwitch + + + + 200 + 25 + + NO + + + + 264 + {{107, 58}, {168, 22}} + + + YES + + -2076180416 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Item1 + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + + OtherViews + + + + + + Item2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 3 + YES + YES + 1 + + NO + + + + 264 + {{107, 33}, {168, 22}} + + + YES + + -2076180416 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Item1 + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + + OtherViews + + + + + + Item2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 3 + YES + YES + 1 + + NO + + + + 264 + {{107, 8}, {168, 22}} + + + YES + + -2076180416 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Item1 + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + + OtherViews + + + + + + Item2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 3 + YES + YES + 1 + + NO + + + + 256 + {{42, 60}, {63, 17}} + + + YES + + 67108864 + 71303168 + Batterij: + + + + + + NO + + + + 256 + {{25, 24}, {80, 28}} + + + YES + + 67108864 + 71303168 + Net-spanning + + + + + + NO + + + + 256 + {{28, 10}, {77, 17}} + + + YES + + 67108864 + 71303168 + Opladen: + + + + + + NO + + + + 256 + {{13, 116}, {261, 23}} + + + YES + + 67108864 + 131072 + Start smcFanControl na het inloggen + + + 1211912448 + 2 + + + + 200 + 25 + + NO + + + + 256 + {{13, 155}, {137, 28}} + + + YES + + 67108864 + 272629760 + Temperatuur formaat: + + + + + + NO + + + + 256 + {{192, 166}, {80, 18}} + + + YES + NO + 1 + 2 + + + -2080374784 + 131072 + °C + + + 1211912448 + 0 + + + + + + 200 + 25 + + + 67108864 + 131072 + °F + + + 1 + 1211912448 + 0 + + + + 400 + 75 + + + {35, 18} + {10, 0} + 1143472128 + NSActionCell + + 67108864 + 0 + Radio + + LucidaGrande + 13 + 1044 + + 1211912448 + 0 + + 400 + 75 + + + + + + + + + 256 + {{13, 193}, {111, 14}} + + + YES + + 67108864 + 272629760 + Menubar: + + + + + + NO + + + + 264 + {{74, 188}, {154, 22}} + + + YES + + 71303232 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Temperatuur + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + 1 + + + YES + + + OtherViews + + + + + Temperatuur & Fanspeed (multiline) + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Temperatuur & Fanspeed (singleline) + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + smcFanControl Icoon + + 1048576 + 2147483647 + + + _popUpItemAction: + 1 + + + + + + Fanspeed + + 1048576 + 2147483647 + + + _popUpItemAction: + 2 + + + + + 3 + 3 + YES + YES + 1 + + NO + + + + 256 + {{13, 141}, {261, 23}} + + + YES + + 67108864 + 131072 + Zoek voor updates tijdens het opstarten + + + 1211912448 + 2 + + + + 200 + 25 + + NO + + + + 256 + + + NSColor pasteboard type + + + {{233, 192}, {39, 17}} + + + YES + NO + YES + + + + {{2, 2}, {299, 226}} + + + + + {{17, 41}, {303, 243}} + + + {0, 0} + + 67108864 + 0 + Opties + + + + 3 + MCAwLjgwMDAwMDAxAA + + + + 3 + 0 + 2 + NO + + + + 256 + {{242, 13}, {80, 28}} + + + YES + + 67108864 + 134348800 + Bewaar + + + -2038284288 + 1 + + + + + + 200 + 25 + + NO + + + + 256 + {{159, 13}, {85, 28}} + + + YES + + 67108864 + 134348800 + Annuleer + + + -2038284288 + 268435457 + + + w + 200 + 25 + + NO + + + + 256 + {{100, 375}, {141, 16}} + + + YES + + 603979776 + 134479872 + Button + + LucidaGrande + 9 + 3614 + + + -2038251520 + 1 + + LucidaGrande + 9 + 16 + + + + + + 200 + 25 + + NO + + + + 256 + {{19, 375}, {81, 16}} + + + YES + + 603979776 + 134479872 + Button + + + -2038251520 + 1 + + + + + + 200 + 25 + + NO + + + + 256 + {{240, 375}, {76, 16}} + + + YES + + 603979776 + 134479872 + Button + + + -2038251520 + 1 + + + + + + 200 + 25 + + NO + + + + -2147483392 + {{97, 289}, {142, 22}} + + + YES + + 67108864 + 262144 + Synchroniseer schuifbalken + + + 1211912448 + 2 + + NSImage + NSSwitch + + + + + 200 + 25 + + NO + + + {337, 436} + + + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + MainWindow + YES + + + FanControl + + + + currentTemp + minValue + maxValue + warning + critical + unit + FanData + + YES + YES + + YES + YES + YES + YES + YES + + + 15 + 2 + {{394, 138}, {575, 603}} + 1886912512 + GPL Lizenz + StatusItemWindow + + View + + + {213, 107} + + + 256 + + + + 274 + + + + 2304 + + + + 2322 + {573, 3934} + + + + + + + + CQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5 +OTEKCiBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu +LAogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT +QQogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29w +aWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dl +ZC4KCgkJCSAgICBQcmVhbWJsZQoKICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRl +c2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCmZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5 +IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCkxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3Vh +cmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKc29mdHdhcmUtLXRvIG1h +a2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKR2VuZXJh +bCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRh +dGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1p +dCB0bwp1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2Fy +ZSBpcyBjb3ZlcmVkIGJ5CnRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVh +ZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCnlvdXIgcHJvZ3JhbXMsIHRvby4KCiAgV2hlbiB3ZSBzcGVh +ayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdApwcmljZS4g +IE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQg +eW91CmhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAo +YW5kIGNoYXJnZSBmb3IKdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBz +b3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CmlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdl +IHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CmluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQg +dGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KCiAgVG8gcHJvdGVjdCB5b3VyIHJp +Z2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAphbnlvbmUgdG8gZGVu +eSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuClRo +ZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5 +b3UgaWYgeW91CmRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlm +eSBpdC4KCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJv +Z3JhbSwgd2hldGhlcgpncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGll +bnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKeW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0 +aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qg +c2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgpyaWdodHMuCgogIFdlIHByb3Rl +Y3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBh +bmQKKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Np +b24gdG8gY29weSwKZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KCiAgQWxzbywg +Zm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRh +aW4KdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0 +aGlzIGZyZWUKc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBl +bHNlIGFuZCBwYXNzZWQgb24sIHdlCndhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQg +dGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCnRoYXQgYW55IHByb2JsZW1zIGludHJvZHVj +ZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCmF1dGhvcnMnIHJlcHV0 +YXRpb25zLgoKICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRs +eSBieSBzb2Z0d2FyZQpwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVk +aXN0cmlidXRvcnMgb2YgYSBmcmVlCnByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVu +dCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHBy +ZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CnBhdGVudCBtdXN0IGJlIGxp +Y2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCgogIFRo +ZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5k +Cm1vZGlmaWNhdGlvbiBmb2xsb3cuCgoJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICBU +RVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJ +T04KCiAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3 +aGljaCBjb250YWlucwphIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5n +IGl0IG1heSBiZSBkaXN0cmlidXRlZAp1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1Ymxp +YyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCnJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFt +IG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgptZWFucyBlaXRoZXIgdGhl +IFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3Ogp0aGF0IGlz +IHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LApl +aXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8g +YW5vdGhlcgpsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0 +aG91dCBsaW1pdGF0aW9uIGluCnRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUg +aXMgYWRkcmVzc2VkIGFzICJ5b3UiLgoKQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3Ry +aWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRo +ZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgpydW5uaW5nIHRoZSBQcm9ncmFtIGlz +IG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCmlzIGNvdmVyZWQg +b25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlClByb2dyYW0g +KGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCldo +ZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgoKICAxLiBZ +b3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MK +c291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQg +eW91CmNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4g +YXBwcm9wcmlhdGUKY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2Vl +cCBpbnRhY3QgYWxsIHRoZQpub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0 +aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CmFuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9m +IHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4K +CllvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBh +IGNvcHksIGFuZAp5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24g +aW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgoKICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29w +aWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCm9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3Jr +IGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNh +dGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCmFib3ZlLCBwcm92aWRlZCB0 +aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgWW91IG11c3Qg +Y2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCiAgICBzdGF0 +aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgoK +ICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlz +aCwgdGhhdCBpbgogICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20g +dGhlIFByb2dyYW0gb3IgYW55CiAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hv +bGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAogICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2Yg +dGhpcyBMaWNlbnNlLgoKICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRz +IGNvbW1hbmRzIGludGVyYWN0aXZlbHkKICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hl +biBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBv +cmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KICAgIGFubm91bmNlbWVudCBpbmNsdWRp +bmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQogICAgbm90aWNlIHRoYXQgdGhl +cmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCiAgICBhIHdh +cnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCiAg +ICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkg +b2YgdGhpcwogICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBp +bnRlcmFjdGl2ZSBidXQKICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2Vt +ZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBw +cmludCBhbiBhbm5vdW5jZW1lbnQuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2Rp +ZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3Jr +IGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29u +c2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0 +aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3 +aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlz +dHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3Jr +IGJhc2VkCm9uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJl +IG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBs +aWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2 +ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGlu +dGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMg +dG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4 +ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBv +cgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgoKSW4gYWRkaXRpb24sIG1lcmUg +YWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQp3aXRoIHRo +ZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUg +b2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVy +IHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBjb3B5IGFu +ZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCnVuZGVyIFNlY3Rp +b24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgpT +ZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBm +b2xsb3dpbmc6CgogICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRp +bmcgbWFjaGluZS1yZWFkYWJsZQogICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0 +ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCiAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVt +IGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKCiAgICBiKSBBY2Nv +bXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQogICAg +eWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlv +dXIKICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEg +Y29tcGxldGUKICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3Vy +Y2UgY29kZSwgdG8gYmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAx +IGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCiAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBp +bnRlcmNoYW5nZTsgb3IsCgogICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlv +dSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBz +b3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCiAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNv +bW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQogICAgcmVjZWl2ZWQgdGhlIHByb2dy +YW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAogICAgYW4gb2ZmZXIs +IGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCgpUaGUgc291cmNlIGNvZGUgZm9yIGEg +d29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmlj +YXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCmNvZGUg +bWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMg +YW55CmFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMg +dXNlZCB0bwpjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFi +bGUuICBIb3dldmVyLCBhcyBhCnNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJp +YnV0ZWQgbmVlZCBub3QgaW5jbHVkZQphbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVk +IChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQpmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRz +IChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQpvcGVyYXRpbmcgc3lzdGVtIG9uIHdo +aWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAppdHNlbGYgYWNjb21w +YW5pZXMgdGhlIGV4ZWN1dGFibGUuCgpJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmpl +Y3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCmFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVk +IHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBj +b2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCmRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNl +IGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdApjb21wZWxsZWQgdG8gY29weSB0 +aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgoKICA0LiBZb3UgbWF5IG5vdCBjb3B5 +LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KZXhjZXB0IGFzIGV4 +cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdApvdGhlcndpc2Ug +dG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKdm9p +ZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBM +aWNlbnNlLgpIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRz +LCBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0 +ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaApwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Uu +CgogIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlv +dSBoYXZlIG5vdApzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJt +aXNzaW9uIHRvIG1vZGlmeSBvcgpkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZl +IHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBh +Y2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQptb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5n +IHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKUHJvZ3JhbSksIHlvdSBpbmRpY2F0 +ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKYWxsIGl0cyB0ZXJt +cyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwp0aGUg +UHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KCiAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1 +dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpQcm9ncmFtKSwgdGhlIHJlY2lw +aWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNl +bnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCnRo +ZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCnJl +c3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVk +IGhlcmVpbi4KWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5 +IHRoaXJkIHBhcnRpZXMgdG8KdGhpcyBMaWNlbnNlLgoKICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBv +ZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBm +b3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlv +bnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IK +b3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0 +aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAg +SWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91 +ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2Js +aWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQ +cm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBw +ZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CmFsbCB0aG9z +ZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhl +bgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdv +dWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0u +CgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3Jj +ZWFibGUgdW5kZXIKYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUg +c2VjdGlvbiBpcyBpbnRlbmRlZCB0bwphcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBp +bnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgpjaXJjdW1zdGFuY2VzLgoKSXQgaXMgbm90IHRoZSBwdXJw +b3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQpwYXRlbnRzIG9y +IG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQpz +dWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3Rpbmcg +dGhlCmludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGlj +aCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBo +YXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2Fy +ZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQg +YXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8g +ZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3Vn +aCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2Uu +CgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMg +YmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgog +IDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmlj +dGVkIGluCmNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVk +IGludGVyZmFjZXMsIHRoZQpvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFBy +b2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCm1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRp +c3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwp0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlz +dHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCmNvdW50cmllcyBub3QgdGh1cyBl +eGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwp0aGUgbGltaXRh +dGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KCiAgOS4gVGhlIEZy +ZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lv +bnMKb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5l +dyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24s +IGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJu +cy4KCkVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAg +SWYgdGhlIFByb2dyYW0Kc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdo +aWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRp +b24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwplaXRoZXIgb2YgdGhhdCB2ZXJz +aW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQpTb2Z0d2FyZSBG +b3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVy +IG9mCnRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQg +YnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4KCiAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29y +cG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQpwcm9ncmFtcyB3aG9zZSBk +aXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCnRv +IGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0 +aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu +ZGF0aW9uOyB3ZSBzb21ldGltZXMKbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9u +IHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0 +dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZApvZiBwcm9tb3Rpbmcg +dGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCgkJCSAgICBOTyBXQVJS +QU5UWQoKICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwg +VEhFUkUgSVMgTk8gV0FSUkFOVFkKRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRF +RCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCk9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElO +RyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKUFJPVklERSBUSEUgUFJP +R1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQK +T1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB +TlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T +RS4gIFRIRSBFTlRJUkUgUklTSyBBUwpUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhF +IFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFClBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZ +T1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLApSRVBBSVIgT1IgQ09S +UkVDVElPTi4KCiAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExB +VyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkg +T1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SClJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBB +UyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCklOQ0xVRElORyBB +TlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJ +U0lORwpPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJ +TkcgQlVUIE5PVCBMSU1JVEVEClRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElO +QUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQpZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZB +SUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgpQUk9HUkFNUyksIEVW +RU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKUE9T +U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgoKCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9O +Uwo + + + + Helvetica + 12 + 16 + + + 4 + + + + + + + + + 38 + + + + 573 + 1 + + + 11109 + 0 + + + + + 6 + System + selectedTextBackgroundColor + + + + 6 + System + selectedTextColor + + + + + + + 1 + MCAwIDEAA + + + + + + 1 + + 6 + {573, 10000000} + {573, 601} + + + + {{1, 1}, {573, 601}} + + + + + + + {4, 5} + + 12582912 + + + + + + TU0AKgAAEAj///8A////qwAAAP8AAAD/AwMD/BYWFtIFBQVuAAAABv///wD///8E6+vrTGhoaLYtLS3p +BAQE/QAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+rAAAA/wAAAP8AAAD/AAAA/wAAAP8EBATSX19fK9HR0ZciIiLv +AAAA/wAAAP8AAAD/AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////CsPDw0CRkZG1FxcX9AAAAP8bGxvr +ICAg8AAAAP8ICAjlFRUVVQAAAA////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wrm5uab +FxcX9AAAAP8AAAD/AQEB3wAAAA////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///zaXl5fGAAAA/wAAAP8AAABR////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////CO7u7q8AAAD/AAAA/wAAAAz///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/ +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+r +AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///6sAAAD/AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/AAAA/wAAAP8AAAD/ +AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+rAAAA/wAAAP8AAAD/ +AAAA/wAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/ +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+r +AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////CO7u7q8AAAD/AAAA/wAAAAz///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///80mpqaxQAAAP8AAAD/AAAATv///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////CuXl5ZYeHh7xAAAA/wAAAP8CAgLXAAAAD////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////EKurq0mOjo63FxcX9AAAAP8bGxvrICAg8AAAAP8ICAjlHh4eXAAAABj///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qwAAAP8AAAD/AAAA/wAAAP8AAAD/BAQE1V9fXyvS0tKZICAg8AAAAP8AAAD/ +AAAA/wAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+rAAAA/wAAAP8AAAD/FBQU1AUFBXEAAAAG////AP///wTr6+tO +ZWVluC4uLuoAAAD/AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8AABABAAADAAAAAQAgAAABAQADAAAAAQAgAAABAgADAAAABAAA +EM4BAwADAAAAAQABAAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAE +AAABFgADAAAAAQAgAAABFwAEAAAAAQAAEAABGgAFAAAAAQAAENYBGwAFAAAAAQAAEN4BHAADAAAAAQAB +AAABKAADAAAAAQACAAABUgADAAAAAQACAAABUwADAAAABAAAEOYAAAAAAAgACAAIAAgSAAAAACAAABIA +AAAAIAAAAAEAAQABAAE + + + + + + + + TU0AKgAABAj///9VQ0ND/wAAAP////8A////AP///6pDQ0P/AAAA/////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+qAAAA/////6oAAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///6oAAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///+qAAAA/////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////qgAAAP////8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///6oAAAD/////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+qAAAA/////wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qgAAAP////8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qgAAAP8AAAD/ +AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+q +AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////qgAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///6oAAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///+qAAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qgAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qgAAAP////+qAAAA/////wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///9VQ0ND/wAAAP////8A////AP///6pDQ0P/AAAA/////wD///8A////AP///wD///8A +////AP///wD///8AAA4BAAADAAAAAQAQAAABAQADAAAAAQAQAAABAgADAAAABAAABLYBAwADAAAAAQAB +AAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAEAAABFgADAAAAAQAQ +AAABFwAEAAAAAQAABAABHAADAAAAAQABAAABUgADAAAAAQACAAABUwADAAAABAAABL6HcwAHAAAHqAAA +BMYAAAAAAAgACAAIAAgAAQABAAEAAQAAB6hhcHBsAiAAAG1udHJSR0IgWFlaIAfZAAIAGQALABoAC2Fj +c3BBUFBMAAAAAGFwcGwAAAAAAAAAAAAAAAAAAAAAAAD21gABAAAAANMtYXBwbAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2Rlc2MAAAEIAAAAb2RzY20AAAF4AAAFbGNw +cnQAAAbkAAAAOHd0cHQAAAccAAAAFHJYWVoAAAcwAAAAFGdYWVoAAAdEAAAAFGJYWVoAAAdYAAAAFHJU +UkMAAAdsAAAADmNoYWQAAAd8AAAALGJUUkMAAAdsAAAADmdUUkMAAAdsAAAADmRlc2MAAAAAAAAAFEdl +bmVyaWMgUkdCIFByb2ZpbGUAAAAAAAAAAAAAABRHZW5lcmljIFJHQiBQcm9maWxlAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAB4AAAAMc2tTSwAA +ACgAAAF4aHJIUgAAACgAAAGgY2FFUwAAACQAAAHIcHRCUgAAACYAAAHsdWtVQQAAACoAAAISZnJGVQAA +ACgAAAI8emhUVwAAABYAAAJkaXRJVAAAACgAAAJ6bmJOTwAAACYAAAKia29LUgAAABYAAALIY3NDWgAA +ACIAAALeaGVJTAAAAB4AAAMAZGVERQAAACwAAAMeaHVIVQAAACgAAANKc3ZTRQAAACYAAAKiemhDTgAA +ABYAAANyamFKUAAAABoAAAOIcm9STwAAACQAAAOiZWxHUgAAACIAAAPGcHRQTwAAACYAAAPobmxOTAAA +ACgAAAQOZXNFUwAAACYAAAPodGhUSAAAACQAAAQ2dHJUUgAAACIAAARaZmlGSQAAACgAAAR8cGxQTAAA +ACwAAASkcnVSVQAAACIAAATQYXJFRwAAACYAAATyZW5VUwAAACYAAAUYZGFESwAAAC4AAAU+AFYBYQBl +AG8AYgBlAGMAbgD9ACAAUgBHAEIAIABwAHIAbwBmAGkAbABHAGUAbgBlAHIAaQENAGsAaQAgAFIARwBC +ACAAcAByAG8AZgBpAGwAUABlAHIAZgBpAGwAIABSAEcAQgAgAGcAZQBuAOgAcgBpAGMAUABlAHIAZgBp +AGwAIABSAEcAQgAgAEcAZQBuAOkAcgBpAGMAbwQXBDAEMwQwBDsETAQ9BDgEOQAgBD8EQAQ+BEQEMAQ5 +BDsAIABSAEcAQgBQAHIAbwBmAGkAbAAgAGcA6QBuAOkAcgBpAHEAdQBlACAAUgBWAEKQGnUoACAAUgBH +AEIAIIJyX2ljz4/wAFAAcgBvAGYAaQBsAG8AIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMAbwBHAGUAbgBl +AHIAaQBzAGsAIABSAEcAQgAtAHAAcgBvAGYAaQBsx3y8GAAgAFIARwBCACDVBLhc0wzHfABPAGIAZQBj +AG4A/QAgAFIARwBCACAAcAByAG8AZgBpAGwF5AXoBdUF5AXZBdwAIABSAEcAQgAgBdsF3AXcBdkAQQBs +AGwAZwBlAG0AZQBpAG4AZQBzACAAUgBHAEIALQBQAHIAbwBmAGkAbADBAGwAdABhAGwA4QBuAG8AcwAg +AFIARwBCACAAcAByAG8AZgBpAGxmbpAaACAAUgBHAEIAIGPPj/Blh072TgCCLAAgAFIARwBCACAw1zDt +MNUwoTCkMOsAUAByAG8AZgBpAGwAIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMDkwO1A70DuQO6A8wAIAPA +A8EDvwPGA68DuwAgAFIARwBCAFAAZQByAGYAaQBsACAAUgBHAEIAIABnAGUAbgDpAHIAaQBjAG8AQQBs +AGcAZQBtAGUAZQBuACAAUgBHAEIALQBwAHIAbwBmAGkAZQBsDkIOGw4jDkQOHw4lDkwAIABSAEcAQgAg +DhcOMQ5IDicORA4bAEcAZQBuAGUAbAAgAFIARwBCACAAUAByAG8AZgBpAGwAaQBZAGwAZQBpAG4AZQBu +ACAAUgBHAEIALQBwAHIAbwBmAGkAaQBsAGkAVQBuAGkAdwBlAHIAcwBhAGwAbgB5ACAAcAByAG8AZgBp +AGwAIABSAEcAQgQeBDEESQQ4BDkAIAQ/BEAEPgREBDgEOwRMACAAUgBHAEIGRQZEBkEAIAYqBjkGMQZK +BkEAIABSAEcAQgAgBicGRAY5BicGRQBHAGUAbgBlAHIAaQBjACAAUgBHAEIAIABQAHIAbwBmAGkAbABl +AEcAZQBuAGUAcgBlAGwAIABSAEcAQgAtAGIAZQBzAGsAcgBpAHYAZQBsAHMAZXRleHQAAAAAQ29weXJp +Z2h0IDIwMDcgQXBwbGUgSW5jLiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4AWFlaIAAAAAAAAPNSAAEAAAAB +Fs9YWVogAAAAAAAAdE0AAD3uAAAD0FhZWiAAAAAAAABadQAArHMAABc0WFlaIAAAAAAAACgaAAAVnwAA +uDZjdXJ2AAAAAAAAAAEBzQAAc2YzMgAAAAAAAQxCAAAF3v//8yYAAAeSAAD9kf//+6L///2jAAAD3AAA +wGw + + + + + + 3 + MCAwAA + + + + 4 + + + + 256 + {{558, 1}, {16, 601}} + + + YES + NO + + _doScroller: + 0.15277071682765633 + + + + -2147483392 + {{-100, -100}, {87, 18}} + + + + NO + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {575, 603} + + + + 133714 + + + + AAAAAAAAAAAAAAAAAAAAAA + 0.25 + 4 + 1 + + + {575, 603} + + + + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + YES + + + 3 + 2 + {{495, 251}, {299, 327}} + 1886912512 + Informatie smcFanControl + StatusItemWindow + + View + + + {213, 107} + + + 256 + + + + 256 + {{97, 280}, {262, 19}} + + + YES + + 67108864 + 4194304 + Programversion + + LucidaGrande-Bold + 16 + 16 + + + + + + NO + + + + 256 + {{99, 235}, {143, 37}} + + + YES + + 67108864 + 272629760 + Small System Font Text + + LucidaGrande-Bold + 11 + 3357 + + + + + + NO + + + + 256 + {{121, 23}, {66, 37}} + + + YES + + 67108864 + 134217728 + + + + -2037628928 + 2 + + NSImage + paypal + + + 400 + 75 + + NO + + + + 256 + {{17, 119}, {265, 29}} + + + YES + + 67108864 + 272629760 + Sujay Thomas + + + + + + NO + + + + 256 + {{17, 150}, {114, 17}} + + + YES + + 67108864 + 272629760 + Icon-Design: + + + + + + NO + + + + 256 + {{17, 59}, {265, 52}} + + + YES + + 67108864 + 272629760 + Als je dit een goed programma vind, overweeg dan een donatie te geven via PayPal. + + + + + + NO + + + + 256 + {{17, 180}, {265, 51}} + + + YES + + 67108864 + 272629760 + Gebaseerd op "Apple System Management Control (SMC) tool" door devnull + + + + + + NO + + + + 256 + + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + {{20, 235}, {64, 64}} + + + YES + + 134217728 + 33554432 + + NSImage + smcfancontrol_v2 + + 0 + 0 + 0 + NO + + NO + YES + + + {299, 327} + + + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + YES + + + Menu + + + + Actieve Instelling + + 1048576 + 2147483647 + + + 1 + + + + Voorkeuren... + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Doneer + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Info + + 1048576 + 2147483647 + + + submenuAction: + + Info + + + + Informatie + + 1048576 + 2147483647 + + + + + + Controleer op updates + + 1048576 + 2147483647 + + + + + + FAQ + + 1048576 + 2147483647 + + + + + + Website + + 1048576 + 2147483647 + + + + + + Licentie + + 1048576 + 2147483647 + + + + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Stop smcFanControl + + 1048576 + 2147483647 + + + + + + + + + Title + selBatt + selbatt + sync + + YES + YES + + YES + YES + YES + YES + YES + + + + Fan + FanData + Description + Minspeed + Maxspeed + selspeed + sync + menu + + YES + + YES + YES + YES + YES + YES + + + 3 + 2 + {{150, 535}, {221, 145}} + 1886912512 + Window + NSWindow + + View + + + {213, 107} + + + 256 + + + + 256 + {{17, 118}, {230, 17}} + + YES + + 67108864 + 272629760 + Titel voor nieuwe favoriet: + + + + + + NO + + + + 256 + {{20, 94}, {181, 19}} + + YES + + -1804599231 + 272761856 + + + + YES + + + 6 + System + textColor + + + + NO + + + + 256 + {{122, 13}, {84, 28}} + + YES + + 67108864 + 134348800 + Bewaar + + + -2038284288 + 1 + + + DQ + 200 + 25 + + NO + + + + 256 + {{40, 13}, {84, 28}} + + YES + + 67108864 + 134348800 + Annuleer + + + -2038284288 + 1 + + + Gw + 200 + 25 + + NO + + + + 256 + {{17, 45}, {187, 41}} + + YES + + 67108864 + 4194304 + Als je een nieuwe favoriet aanmaakt, krijgt deze automatisch de instellingen van de 'default' favoriet. + + + + + + NO + + + {221, 145} + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + YES + + + YES + + + 15 + 2 + {{376, 69}, {575, 665}} + 1886912512 + FAQ + StatusItemWindow + + View + + + {213, 107} + + + 256 + + + + 274 + + + + 2304 + + + + 2322 + {573, 663} + + + + + + + + + + + + + 38 + + + + 573 + 1 + + + 67119973 + 0 + + + + + + + + + + + + + + 1 + + 6 + {573, 10000000} + + + + {{1, 1}, {573, 663}} + + + + + + 4 + + + + -2147483392 + {{-30, 1}, {15, 587}} + + NO + + _doScroller: + 0.15277071297168732 + + + + 256 + {{-100, -100}, {87, 18}} + + NO + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {575, 665} + + + 133650 + + + + AAAAAAAAAAAAAAAAAAAAAA + 0.25 + 4 + 1 + + + {{1, 9}, {575, 665}} + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + YES + + + SUUpdater + + + + + + + makeKeyAndOrderFront: + + + + 406 + + + + mainwindow + + + + 304 + + + + TemperatureController + + + + 349 + + + + paypal: + + + + 389 + + + + theMenu + + + + 398 + + + + terminate: + + + + 400 + + + + paypal: + + + + 414 + + + + visitHomepage: + + + + 428 + + + + loginItem: + + + + 484 + + + + closePreferences: + + + + 485 + + + + FavoritesController + + + + 498 + + + + newfavoritewindow + + + + 531 + + + + add_favorite: + + + + 532 + + + + close_favorite: + + + + 533 + + + + save_favorite: + + + + 534 + + + + newfavorite_title + + + + 535 + + + + delete_favorite: + + + + 536 + + + + savePreferences: + + + + 550 + + + + autochange + + + + 581 + + + + FanController + + + + 582 + + + + programinfo + + + + 599 + + + + copyright + + + + 600 + + + + faqWindow + + + + 625 + + + + faqText + + + + 630 + + + + DefaultsController + + + + 632 + + + + sliderCell + + + + 640 + + + + syncSliders: + + + + 700 + + + + sync + + + + 703 + + + + updateCheck: + + + + 722 + + + + colorSelector + + + + 725 + + + + changeMenu: + + + + 726 + + + + menuSelect: + + + + 784 + + + + makeKeyAndOrderFront: + + + + 429 + + + + makeKeyAndOrderFront: + + + + 425 + + + + delegate + + + + 702 + + + + value: arrangedObjects.Description + + + + + + value: arrangedObjects.Description + value + arrangedObjects.Description + 2 + + + 508 + + + + maxValue: arrangedObjects.Maxspeed + + + + + + maxValue: arrangedObjects.Maxspeed + maxValue + arrangedObjects.Maxspeed + 2 + + + 513 + + + + minValue: arrangedObjects.Minspeed + + + + + + minValue: arrangedObjects.Minspeed + minValue + arrangedObjects.Minspeed + + 2 + + + 514 + + + + value: arrangedObjects.selspeed + + + + + + value: arrangedObjects.selspeed + value + arrangedObjects.selspeed + + 2 + + + 516 + + + + maxValue: arrangedObjects.Maxspeed + + + + + + maxValue: arrangedObjects.Maxspeed + maxValue + arrangedObjects.Maxspeed + 2 + + + 521 + + + + minValue: arrangedObjects.Minspeed + + + + + + minValue: arrangedObjects.Minspeed + minValue + arrangedObjects.Minspeed + + 2 + + + 522 + + + + value: arrangedObjects.selspeed + + + + + + value: arrangedObjects.selspeed + value + arrangedObjects.selspeed + + NSContinuouslyUpdatesValue + + + + 2 + + + 701 + + + + content: arrangedObjects.Title + + + + + + content: arrangedObjects.Title + content + arrangedObjects.Title + 2 + + + 502 + + + + selectedIndex: selectionIndex + + + + + + selectedIndex: selectionIndex + selectedIndex + selectionIndex + + 2 + + + 503 + + + + enabled: selectionIndex + + + + + + enabled: selectionIndex + enabled + selectionIndex + 2 + + + 549 + + + + value: values.AutomaticChange + + + + + + value: values.AutomaticChange + value + values.AutomaticChange + 2 + + + 559 + + + + content: arrangedObjects.Title + + + + + + content: arrangedObjects.Title + content + arrangedObjects.Title + 2 + + + 569 + + + + enabled: values.AutomaticChange + + + + + + enabled: values.AutomaticChange + enabled + values.AutomaticChange + 2 + + + 577 + + + + selectedIndex: values.selbatt + + + + + + selectedIndex: values.selbatt + selectedIndex + values.selbatt + + 2 + + + 598 + + + + enabled: values.AutomaticChange + + + + + + enabled: values.AutomaticChange + enabled + values.AutomaticChange + 2 + + + 563 + + + + content: arrangedObjects.Title + + + + + + content: arrangedObjects.Title + content + arrangedObjects.Title + 2 + + + 573 + + + + selectedIndex: values.selac + + + + + + selectedIndex: values.selac + selectedIndex + values.selac + + 2 + + + 594 + + + + enabled: values.AutomaticChange + + + + + + enabled: values.AutomaticChange + enabled + values.AutomaticChange + 2 + + + 565 + + + + content: arrangedObjects.Title + + + + + + content: arrangedObjects.Title + content + arrangedObjects.Title + 2 + + + 575 + + + + selectedIndex: values.selload + + + + + + selectedIndex: values.selload + selectedIndex + values.selload + + 2 + + + 596 + + + + value: values.AutoStart + + + + + + value: values.AutoStart + value + values.AutoStart + 2 + + + 567 + + + + contentArray: selection.FanData + + + + + + contentArray: selection.FanData + contentArray + selection.FanData + 2 + + + 507 + + + + selectedTag: values.Unit + + + + + + selectedTag: values.Unit + selectedTag + values.Unit + 2 + + + 587 + + + + selectedIndex: values.MenuBar + + + + + + selectedIndex: values.MenuBar + selectedIndex + values.MenuBar + 2 + + + 615 + + + + makeKeyAndOrderFront: + + + + 626 + + + + value: selection.sync + + + + + + value: selection.sync + value + selection.sync + 2 + + + 715 + + + + value: values.SUCheckAtStartup + + + + + + value: values.SUCheckAtStartup + value + values.SUCheckAtStartup + 2 + + + 709 + + + + value: values.MenuColor + + + + + + value: values.MenuColor + value + values.MenuColor + + NSValueTransformerName + NSUnarchiveFromData + + 2 + + + 719 + + + + value: arrangedObjects.menu + + + + + + value: arrangedObjects.menu + value + arrangedObjects.menu + 2 + + + 833 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 21 + + + + + + Window + + + 2 + + + + + + + + + + + + + + + + + + + 439 + + + + + + + + + + + 440 + + + + + + + + + + + 441 + + + + + + + + 442 + + + + + + + + 639 + + + + + 443 + + + + + + + + 778 + + + + + + + + 780 + + + + + 447 + + + + + + + + 452 + + + + + + + + 453 + + + + + + + + 454 + + + + + + + + 479 + + + + + + + + + + + + + + + + + + + + + 482 + + + + + + + + 483 + + + + + + + + 695 + + + + + + + + 697 + + + + + + + + 698 + + + + + + + + 699 + + + + + + + + 212 + + + FanControl + + + 348 + + + Temperatures + + + 373 + + + + + + GPL License + + + 374 + + + + + + + + 375 + + + + + + + + + + 376 + + + + + 377 + + + + + + About + + + 378 + + + + + + + + + + + + + + + 379 + + + + + + + + 380 + + + + + + + + 381 + + + + + + + + 382 + + + + + + + + 383 + + + + + + + + 384 + + + + + + + + 385 + + + + + + + + 607 + + + + + + + + 394 + + + + + + + + + + + + + Menu (Menu) + + + 396 + + + + + 399 + + + + + 401 + + + + + 405 + + + + + 411 + + + + + 413 + + + + + 418 + + + + + + + + 419 + + + + + + + + + + + + 420 + + + + + 421 + + + + + 422 + + + + + 423 + + + + + 424 + + + + + 436 + + + + + 486 + + + Favorites + + + 492 + + + Fans + + + 524 + + + + + + NewFavorite + + + 525 + + + + + + + + + + + + 526 + + + + + + + + 527 + + + + + + + + 528 + + + + + + + + 529 + + + + + + + + 530 + + + + + + + + 551 + + + Shared Defaults + + + 619 + + + + + + FAQ + + + 620 + + + + + + + + 621 + + + + + + + + + + 622 + + + + + 635 + + + SUUpdater + + + 835 + + + + + + + + 836 + + + + + 837 + + + + + 838 + + + + + 851 + + + + + 852 + + + + + 853 + + + + + 854 + + + + + 855 + + + + + 856 + + + + + 857 + + + + + 858 + + + + + 859 + + + + + 860 + + + + + 861 + + + + + 862 + + + + + 863 + + + + + 864 + + + + + 865 + + + + + 866 + + + + + 867 + + + + + 868 + + + + + 869 + + + + + 871 + + + + + 872 + + + + + + + + 518 + + + + + 448 + + + + + + + + + + 451 + + + + + 450 + + + + + 449 + + + + + 873 + + + + + 874 + + + + + 875 + + + + + 876 + + + + + 877 + + + + + 878 + + + + + 879 + + + + + 455 + + + + + + + + 839 + + + + + 456 + + + + + + + + 840 + + + + + + + + 457 + + + + + + + + + + 458 + + + + + 459 + + + + + 460 + + + + + 461 + + + + + + + + 841 + + + + + + + + 462 + + + + + + + + + + 463 + + + + + 464 + + + + + 465 + + + + + 466 + + + + + + + + 842 + + + + + + + + 467 + + + + + + + + + + 468 + + + + + 469 + + + + + 470 + + + + + 476 + + + + + + + + 843 + + + + + 477 + + + + + + + + 844 + + + + + 478 + + + + + + + + 845 + + + + + 481 + + + + + + + + 846 + + + + + 537 + + + + + + + + 847 + + + + + 538 + + + + + + + + + + 870 + + + + + 543 + + + + + 542 + + + + + 608 + + + + + + + + 848 + + + + + 609 + + + + + + + + 849 + + + + + + + + 610 + + + + + + + + + + + + 611 + + + + + 612 + + + + + 613 + + + + + 616 + + + + + 631 + + + + + 707 + + + + + + + + 850 + + + + + 716 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{841, 659}, {337, 436}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{690, 816}, {299, 327}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{1216, 765}, {221, 145}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + 879 + + + + + FanControl + NSObject + + id + id + id + id + id + id + id + id + id + id + id + id + id + + + + add_favorite: + id + + + changeMenu: + id + + + closePreferences: + id + + + close_favorite: + id + + + delete_favorite: + id + + + loginItem: + id + + + menuSelect: + id + + + paypal: + id + + + savePreferences: + id + + + save_favorite: + id + + + syncSliders: + id + + + updateCheck: + id + + + visitHomepage: + id + + + + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + NSMenu + + + + DefaultsController + id + + + FanController + id + + + FavoritesController + id + + + TemperatureController + id + + + applybutton + id + + + autochange + id + + + colorSelector + id + + + copyright + id + + + currentSpeed + id + + + currentSpeed1 + id + + + faqText + id + + + faqWindow + id + + + field1 + id + + + field2 + id + + + levelIndicator + id + + + mainwindow + id + + + newfavorite_title + id + + + newfavoritewindow + id + + + programinfo + id + + + slider1 + id + + + slider2 + id + + + sliderCell + id + + + sync + id + + + syncslider + id + + + tabview + id + + + theMenu + NSMenu + + + + IBProjectSource + ./Classes/FanControl.h + + + + SUUpdater + NSObject + + checkForUpdates: + id + + + checkForUpdates: + + checkForUpdates: + id + + + + IBProjectSource + ./Classes/SUUpdater.h + + + + StatusItemWindow + NSWindow + + IBProjectSource + ./Classes/StatusItemWindow.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + YES + 3 + + {11, 11} + {10, 3} + {16, 15} + {15, 15} + {62, 31} + {128, 128} + + + diff --git a/Ressources/Dutch.lproj/MainMenu.nib/keyedobjects.nib b/Ressources/Dutch.lproj/MainMenu.nib/keyedobjects.nib new file mode 100644 index 0000000..549e5a3 Binary files /dev/null and b/Ressources/Dutch.lproj/MainMenu.nib/keyedobjects.nib differ diff --git a/Ressources/English.lproj/F.A.Q.rtf b/Ressources/English.lproj/F.A.Q.rtf new file mode 100644 index 0000000..5582b6c --- /dev/null +++ b/Ressources/English.lproj/F.A.Q.rtf @@ -0,0 +1,102 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1187 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} +\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural + +\f0\fs62 \cf0 F.A.Q for smcFanControl 2.4\ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural + +\fs24 \cf0 \ + +\b How do install and uninstall smcFanControl?\ + +\b0 smcFanControl is just an application. So after downloading, and unzipping it, drag it to wherever you want (e.g. the Application Folder). To uninstall it, just drag it into the trash. smcFanControl installs no permanent background processes or daemons. \ +All changes smcFanControl does to the fan controlling get lost after you shutdown your computer (power off, not restart) or enter standby mode (as far as you don't have smcFanControl running) . Minimum fan speed then falls back to the system defaults values.\ +\ + +\b When I run smcFanControl and set a new minimum speed, will my fan speed still increase if the CPU load gets higher?\ + +\b0 Yes, fan speed will increase as defined by Apple. smcFanControl lets the fans stay in automatic mode and just sets the minimum fan speed. However, the higher you set the minimum fan speed, the longer it will take for the fan speed to increase.\ +\ + +\b Why does smcFanControl asks for a login and password and which login/password do I have to enter?\ + +\b0 smcFanControl needs the credentials of an admin-user to set the appropriate rights to be able to change fanspeed. You only have to enter it one time. The entered login and password are not saved by smcFanControl. They are just used for setting the appropriate rights.\ +\ + +\b I get a "smcFanControl has not been tested on this machine" warning. What does that mean?\ + +\b0 Technically smcFanControl supports every intel mac, but it does not come with defaults for every machine. If you get the warning, smcFanControl tries to read out the fan-details directly from the System Management Controller. If you follow the instructions (no other fan control software is running etc.) you should have no problem running smcFanControl on a machine it has not been tested on.\ +\ + +\b How can I restore the Apple defaults for fanspeed?\ + +\b0 Move the sliders to the left and hit apply. The lowest settings smcFanControl allows are the Apple defaults. The minimum default speed after Apple's latest SMC firmware update is 1000rpm for the MBP 15,4", 1500rpm for the MB 13,3". 2000rpm for the Core2Duo MBP and 1800rpm for the Core2Duo MB.\ + +\b \ +Why can't I set my minimum fan speed to 0 rpm?\ + +\b0 smcFanControl only lets you set the fan speed in the range of Apple's min and max values. Setting it to zero is possible from the technical perspective but could probably damage your machine.\ +\ + +\b When will the new settings for minimum fan speed get lost?\ + +\b0 The settings you chose for minimum fan speed will get lost in two cases and the machine will fall back to default values:\ +a) You enter standby mode and smcFanControl is not running (If its running it watches for standby and reapplies your settings when you wake up the machine).\ +b) You power off the machine.\ +\ + +\b Which sensor is read out for the temperature?\ + +\b0 It's not the sensor on the CoreDuo CPU's. The advantage is, that there is no Kernel Extension loaded for temperature readout and temperature should always be reported (some CoreDuo's stop temperature reporting after some minutes unfortunately). The sensor readout is very close to what CoreDuoTemp reports, but its not exactly the same cause of different sensors. +\b \ + +\b0 \ + +\b What about fan-control when I am in Windows runnig Bootcamp?\ + +\b0 At the moment you can not set minimum fan speed when you are in Windows (cause smcFanControl is a native OS X application). However if you set up a new minimum fan speed in OS X using smcFanControl and then restart into Windows, your settings don't get lost and that new minimum fan speed is used on Windows for that session. Some people have reported usage of this to make their MBP cooler and not crashing when running games under Windows.\ + +\b \ +Will there be a version of smcFanControl for Powerbooks or other PPC based Macs?\ + +\b0 No, PPC based macs don't have an SMC controller. So the approach of smcFanControl does not work. It's possible that there are solutions to control fan speed on PPC based macs, but I am not aware of any.\ +\ + +\b Will there be a dashboard widget for smcFanControl?\ + +\b0 Well, I think this is a nice idea. I am currently working on improving smcFanControl as an application. But maybe someone else is a good dashboard developer. The GPL sources of smcFanControl should be a good starting point.\ +\ + +\b Wouldn't it be even better to read out the temperature and set the fan speeds depending on the readout than just set the minimum fan speed and let automatic fan control as defined by apple do the rest?\ + +\b0 Yes, that approach is even better and could make your machine running cooler, when you are at higher loads. BUT: I did not take this route for smcFanControl, cause it has some risks. Adjusting the fan speed to CPU temperature requires you have a program running in the background (e.g. a daemon) that adjust fan speed continuously . If that program ever crashes or becomes incompatible cause of a System Update (or the readouts of the temperature sensor get inappropriate) , the fans could get set to a wrong (too low) speed and this could probably damage the machine. In addition to that the fan-control-logic is quite complicate. An intel mac has about 10 temperature sensors, that are continuously read out and are used for monitoring and setting the right fan speeds. So it would be "not so great" to read out just the CPU temperature as a foundation for the fan-controlling.\ +\ + +\b I have got a MBP and smcFanControl is reporting 0rpm for one of my fans?\ + +\b0 In that case the fan did not report any data to smcFanControl. +\b +\b0 It is possible that one of your fan's is dead. +\b +\b0 Please check your computer with the Apple Hardware Test (it's on the DVD that comes with your computer) and see if it reports a failure with one of your fans. +\b \ + +\b0 \ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\ls1\ilvl0 +\b \cf0 What are the main-differences between Version 1.2x and Version 2.x of smcFanControl?\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural +\ls1\ilvl0 +\b0 \cf0 {\listtext \'95 }Version 2.x is a completely rewritten application.\ +{\listtext \'95 }Version 1.x was a "regular" application located in the dock. Version 2.x sits in the menubar for quicker access to the fan settings, easier monitoring and a better overall user-experience\ +{\listtext \'95 }Version 2.x supports every intel mac\ +{\listtext \'95 }In Version 2.x you can save different fan-settings as favorites and active them with just one mouse-click\ +{\listtext \'95 }On portables you can autoapply different fan-settings, when the powersource changes. So you can cool down your macbook automatically when its loading the battery (and is typically running hotter).\ +{\listtext \'95 }Version 2.x has got an "add to login-items option" now\ +{\listtext \'95 }Version 2.x uses standard OS X authentication now\ +{\listtext \'95 }Version 2.x uses the Sparkle-Framework to automatically check for updates\ +} \ No newline at end of file diff --git a/Ressources/English.lproj/InfoPlist.strings b/Ressources/English.lproj/InfoPlist.strings new file mode 100644 index 0000000..53821f9 Binary files /dev/null and b/Ressources/English.lproj/InfoPlist.strings differ diff --git a/Ressources/English.lproj/Localizable.strings b/Ressources/English.lproj/Localizable.strings new file mode 100644 index 0000000..e69de29 diff --git a/Ressources/English.lproj/MainMenu.nib/designable.nib b/Ressources/English.lproj/MainMenu.nib/designable.nib new file mode 100644 index 0000000..2383b66 --- /dev/null +++ b/Ressources/English.lproj/MainMenu.nib/designable.nib @@ -0,0 +1,4652 @@ + + + + 1050 + 12A269 + 2549 + 1187 + 624.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2549 + + + NSArrayController + NSBox + NSButton + NSButtonCell + NSColorWell + NSCustomObject + NSImageCell + NSImageView + NSMatrix + NSMenu + NSMenuItem + NSNumberFormatter + NSPopUpButton + NSPopUpButtonCell + NSScrollView + NSScroller + NSSliderCell + NSTableColumn + NSTableHeaderView + NSTableView + NSTextField + NSTextFieldCell + NSTextView + NSUserDefaultsController + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + + NSApplication + + + + FirstResponder + + + NSApplication + + + 7 + 2 + {{519, 155}, {337, 436}} + 1886912512 + smcFanControl + StatusItemWindow + + View + + + {213, 107} + + + 256 + + + + 256 + + + + 2304 + + + + 4352 + {295, 81} + + + YES + NO + YES + + + 256 + {295, 17} + + + + + + + 256 + {{285, 0}, {12, 17}} + + + + + menu + 45 + 30 + 1000 + + 75497536 + 2048 + Menu + + LucidaGrande + 10 + 2843 + + + 3 + MC4zMzMzMzI5OQA + + + 6 + System + headerTextColor + + 3 + MAA + + + + + 67108864 + 134348800 + + + LucidaGrande + 11 + 3100 + + + 1215582464 + 130 + + NSImage + NSRadioButton + + + NSRadioButton + + + + 200 + 25 + + 3 + YES + YES + + + + fannr + 87 + 72 + 1000 + + 75497536 + 2048 + Fan + + + 3 + MC4zMzMzMzI5OQA + + + + + 337641536 + 2048 + + LucidaGrande + 11 + 16 + + + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + 3 + YES + + + + speedslider + 95 + 40 + 1000 + + 75497536 + 2048 + min. Speed + + + + + + 0 + 131072 + + 100 + 0.0 + 0.0 + 0.0 + 0 + 0 + NO + NO + + YES + + + + speed + 45 + 45 + 1000 + + 75497536 + 2048 + RPM + + + 6 + System + headerColor + + 3 + MQA + + + + + + 337641472 + 67108864 + + + + + + 0 + + + , + + . + -0 + 0 + + + 0 + -0 + + + + + + + + NaN + + + + 0 + 0 + YES + NO + 1 + AAAAAAAAAAAAAAAAAAAAAA + + + + , + . + NO + YES + YES + + + + 6 + System + textBackgroundColor + + + + + 3 + YES + YES + + + + 3 + 2 + + + 6 + System + gridColor + + 3 + MC41AA + + + 14 + 304087040 + + + 0 + 15 + 0 + YES + 0 + 1 + + + {{1, 17}, {295, 81}} + + + + + 4 + + + + 256 + {{282, 17}, {14, 81}} + + + NO + 256 + + _doScroller: + 0.4375 + + + + 256 + {{1, 84}, {295, 14}} + + + NO + 257 + + _doScroller: + 0.98269897699356079 + + + + 2304 + + + + {{1, 0}, {295, 17}} + + + + + 4 + + + {{20, 292}, {297, 99}} + + + 133170 + + + + + AAAAAAAAAABBgAAAQYAAAA + 0.25 + 4 + 1 + + + + 264 + {{73, 395}, {177, 22}} + + + YES + + -2076180416 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Item1 + + 1048576 + 2147483647 + 1 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + _popUpItemAction: + + + YES + + + OtherViews + + + + + + Item2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 3 + YES + YES + 1 + + NO + + + + 264 + {{17, 399}, {54, 15}} + + + YES + + 67108864 + 272629760 + Favorite: + + + + 6 + System + controlColor + + + + + NO + + + + 264 + {{285, 392}, {37, 28}} + + + YES + + 67108864 + 134348800 + + + + + -2038284288 + 1 + + + + + + 200 + 25 + + NO + + + + 264 + {{250, 392}, {37, 28}} + + + YES + + 67108864 + 134348800 + - + + + -2038284288 + 1 + + + + + + 200 + 25 + + NO + + + + 256 + + + + 274 + + + + 256 + {{13, 84}, {272, 29}} + + + YES + + 603979776 + 131072 + Autoapply favorite when powersource changes + + + 1211912448 + 2 + + NSSwitch + + + + 200 + 25 + + NO + + + + 264 + {{107, 58}, {168, 22}} + + + YES + + -2076180416 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Item1 + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + + OtherViews + + + + + + Item2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 3 + YES + YES + 1 + + NO + + + + 264 + {{107, 33}, {168, 22}} + + + YES + + -2076180416 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Item1 + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + + OtherViews + + + + + + Item2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 3 + YES + YES + 1 + + NO + + + + 264 + {{107, 8}, {168, 22}} + + + YES + + -2076180416 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Item1 + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + + OtherViews + + + + + + Item2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 3 + YES + YES + 1 + + NO + + + + 256 + {{42, 63}, {63, 14}} + + + YES + + 67108864 + 71303168 + Battery: + + + + + + NO + + + + 256 + {{42, 38}, {63, 14}} + + + YES + + 67108864 + 71303168 + AC-Power: + + + + + + NO + + + + 256 + {{28, 13}, {77, 14}} + + + YES + + 67108864 + 71303168 + Charging: + + + + + + NO + + + + 256 + {{13, 116}, {261, 23}} + + + YES + + 67108864 + 131072 + Autostart smcFanControl after login + + + 1211912448 + 2 + + + + 200 + 25 + + NO + + + + 256 + {{13, 169}, {106, 14}} + + + YES + + 67108864 + 272629760 + Temperature unit: + + + + + + NO + + + + 256 + {{122, 166}, {80, 18}} + + + YES + NO + 1 + 2 + + + -2080374784 + 131072 + °C + + + 1211912448 + 0 + + + + + + 200 + 25 + + + 67108864 + 131072 + °F + + + 1 + 1211912448 + 0 + + + + 400 + 75 + + + {35, 18} + {10, 0} + 1143472128 + NSActionCell + + 67108864 + 0 + Radio + + LucidaGrande + 13 + 1044 + + 1211912448 + 0 + + 400 + 75 + + + + + + + + + 256 + {{13, 193}, {111, 14}} + + + YES + + 67108864 + 272629760 + Menubar: + + + + + + NO + + + + 264 + {{74, 188}, {154, 22}} + + + YES + + 71303232 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Icon only + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + 1 + + + YES + + + OtherViews + + + + + Temperature & Fanspeed (multiline) + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Temperature & Fanspeed (singleline) + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + Temperature only + + 1048576 + 2147483647 + + + _popUpItemAction: + 1 + + + + + Fanspeed only + + 1048576 + 2147483647 + + + _popUpItemAction: + 2 + + + + + 2 + 3 + YES + YES + 1 + + NO + + + + 256 + {{13, 141}, {261, 23}} + + + YES + + 67108864 + 131072 + Check for updates on startup + + + 1211912448 + 2 + + + + 200 + 25 + + NO + + + + 256 + + + NSColor pasteboard type + + + {{233, 192}, {39, 17}} + + + YES + NO + YES + + + + {{2, 2}, {299, 226}} + + + + + {{17, 41}, {303, 243}} + + + {0, 0} + + 67108864 + 0 + Options + + + + 3 + MCAwLjgwMDAwMDAxAA + + + + 3 + 0 + 2 + NO + + + + 256 + {{242, 13}, {80, 28}} + + + YES + + 67108864 + 134348800 + Save + + + -2038284288 + 1 + + + + + + 200 + 25 + + NO + + + + 256 + {{159, 13}, {85, 28}} + + + YES + + 67108864 + 134348800 + Cancel + + + -2038284288 + 268435457 + + + w + 200 + 25 + + NO + + + + 256 + {{100, 375}, {141, 16}} + + + YES + + 603979776 + 134479872 + Button + + LucidaGrande + 9 + 3614 + + + -2038251520 + 1 + + LucidaGrande + 9 + 16 + + + + + + 200 + 25 + + NO + + + + 256 + {{19, 375}, {81, 16}} + + + YES + + 603979776 + 134479872 + Button + + + -2038251520 + 1 + + + + + + 200 + 25 + + NO + + + + 256 + {{240, 375}, {76, 16}} + + + YES + + 603979776 + 134479872 + Button + + + -2038251520 + 1 + + + + + + 200 + 25 + + NO + + + + -2147483392 + {{97, 289}, {74, 22}} + + + YES + + 67108864 + 262144 + Sync sliders + + + 1211912448 + 2 + + NSImage + NSSwitch + + + + + 200 + 25 + + NO + + + {337, 436} + + + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + MainWindow + YES + + + FanControl + + + + currentTemp + minValue + maxValue + warning + critical + unit + FanData + + YES + YES + + YES + YES + YES + YES + YES + + + 15 + 2 + {{394, 138}, {575, 603}} + 1886912512 + GPL Lizenz + StatusItemWindow + + View + + + {213, 107} + + + 256 + + + + 274 + + + + 2304 + + + + 2322 + {573, 3934} + + + + + + + + CQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5 +OTEKCiBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu +LAogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT +QQogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29w +aWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dl +ZC4KCgkJCSAgICBQcmVhbWJsZQoKICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRl +c2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCmZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5 +IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCkxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3Vh +cmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKc29mdHdhcmUtLXRvIG1h +a2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKR2VuZXJh +bCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRh +dGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1p +dCB0bwp1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2Fy +ZSBpcyBjb3ZlcmVkIGJ5CnRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVh +ZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCnlvdXIgcHJvZ3JhbXMsIHRvby4KCiAgV2hlbiB3ZSBzcGVh +ayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdApwcmljZS4g +IE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQg +eW91CmhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAo +YW5kIGNoYXJnZSBmb3IKdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBz +b3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CmlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdl +IHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CmluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQg +dGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KCiAgVG8gcHJvdGVjdCB5b3VyIHJp +Z2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAphbnlvbmUgdG8gZGVu +eSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuClRo +ZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5 +b3UgaWYgeW91CmRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlm +eSBpdC4KCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJv +Z3JhbSwgd2hldGhlcgpncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGll +bnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKeW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0 +aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qg +c2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgpyaWdodHMuCgogIFdlIHByb3Rl +Y3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBh +bmQKKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Np +b24gdG8gY29weSwKZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KCiAgQWxzbywg +Zm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRh +aW4KdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0 +aGlzIGZyZWUKc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBl +bHNlIGFuZCBwYXNzZWQgb24sIHdlCndhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQg +dGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCnRoYXQgYW55IHByb2JsZW1zIGludHJvZHVj +ZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCmF1dGhvcnMnIHJlcHV0 +YXRpb25zLgoKICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRs +eSBieSBzb2Z0d2FyZQpwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVk +aXN0cmlidXRvcnMgb2YgYSBmcmVlCnByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVu +dCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHBy +ZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CnBhdGVudCBtdXN0IGJlIGxp +Y2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCgogIFRo +ZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5k +Cm1vZGlmaWNhdGlvbiBmb2xsb3cuCgoJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICBU +RVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJ +T04KCiAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3 +aGljaCBjb250YWlucwphIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5n +IGl0IG1heSBiZSBkaXN0cmlidXRlZAp1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1Ymxp +YyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCnJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFt +IG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgptZWFucyBlaXRoZXIgdGhl +IFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3Ogp0aGF0IGlz +IHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LApl +aXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8g +YW5vdGhlcgpsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0 +aG91dCBsaW1pdGF0aW9uIGluCnRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUg +aXMgYWRkcmVzc2VkIGFzICJ5b3UiLgoKQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3Ry +aWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRo +ZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgpydW5uaW5nIHRoZSBQcm9ncmFtIGlz +IG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCmlzIGNvdmVyZWQg +b25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlClByb2dyYW0g +KGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCldo +ZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgoKICAxLiBZ +b3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MK +c291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQg +eW91CmNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4g +YXBwcm9wcmlhdGUKY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2Vl +cCBpbnRhY3QgYWxsIHRoZQpub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0 +aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CmFuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9m +IHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4K +CllvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBh +IGNvcHksIGFuZAp5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24g +aW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgoKICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29w +aWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCm9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3Jr +IGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNh +dGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCmFib3ZlLCBwcm92aWRlZCB0 +aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgWW91IG11c3Qg +Y2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCiAgICBzdGF0 +aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgoK +ICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlz +aCwgdGhhdCBpbgogICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20g +dGhlIFByb2dyYW0gb3IgYW55CiAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hv +bGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAogICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2Yg +dGhpcyBMaWNlbnNlLgoKICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRz +IGNvbW1hbmRzIGludGVyYWN0aXZlbHkKICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hl +biBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBv +cmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KICAgIGFubm91bmNlbWVudCBpbmNsdWRp +bmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQogICAgbm90aWNlIHRoYXQgdGhl +cmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCiAgICBhIHdh +cnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCiAg +ICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkg +b2YgdGhpcwogICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBp +bnRlcmFjdGl2ZSBidXQKICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2Vt +ZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBw +cmludCBhbiBhbm5vdW5jZW1lbnQuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2Rp +ZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3Jr +IGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29u +c2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0 +aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3 +aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlz +dHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3Jr +IGJhc2VkCm9uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJl +IG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBs +aWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2 +ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGlu +dGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMg +dG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4 +ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBv +cgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgoKSW4gYWRkaXRpb24sIG1lcmUg +YWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQp3aXRoIHRo +ZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUg +b2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVy +IHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBjb3B5IGFu +ZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCnVuZGVyIFNlY3Rp +b24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgpT +ZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBm +b2xsb3dpbmc6CgogICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRp +bmcgbWFjaGluZS1yZWFkYWJsZQogICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0 +ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCiAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVt +IGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKCiAgICBiKSBBY2Nv +bXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQogICAg +eWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlv +dXIKICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEg +Y29tcGxldGUKICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3Vy +Y2UgY29kZSwgdG8gYmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAx +IGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCiAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBp +bnRlcmNoYW5nZTsgb3IsCgogICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlv +dSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBz +b3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCiAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNv +bW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQogICAgcmVjZWl2ZWQgdGhlIHByb2dy +YW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAogICAgYW4gb2ZmZXIs +IGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCgpUaGUgc291cmNlIGNvZGUgZm9yIGEg +d29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmlj +YXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCmNvZGUg +bWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMg +YW55CmFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMg +dXNlZCB0bwpjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFi +bGUuICBIb3dldmVyLCBhcyBhCnNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJp +YnV0ZWQgbmVlZCBub3QgaW5jbHVkZQphbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVk +IChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQpmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRz +IChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQpvcGVyYXRpbmcgc3lzdGVtIG9uIHdo +aWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAppdHNlbGYgYWNjb21w +YW5pZXMgdGhlIGV4ZWN1dGFibGUuCgpJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmpl +Y3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCmFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVk +IHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBj +b2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCmRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNl +IGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdApjb21wZWxsZWQgdG8gY29weSB0 +aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgoKICA0LiBZb3UgbWF5IG5vdCBjb3B5 +LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KZXhjZXB0IGFzIGV4 +cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdApvdGhlcndpc2Ug +dG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKdm9p +ZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBM +aWNlbnNlLgpIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRz +LCBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0 +ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaApwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Uu +CgogIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlv +dSBoYXZlIG5vdApzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJt +aXNzaW9uIHRvIG1vZGlmeSBvcgpkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZl +IHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBh +Y2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQptb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5n +IHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKUHJvZ3JhbSksIHlvdSBpbmRpY2F0 +ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKYWxsIGl0cyB0ZXJt +cyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwp0aGUg +UHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KCiAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1 +dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpQcm9ncmFtKSwgdGhlIHJlY2lw +aWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNl +bnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCnRo +ZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCnJl +c3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVk +IGhlcmVpbi4KWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5 +IHRoaXJkIHBhcnRpZXMgdG8KdGhpcyBMaWNlbnNlLgoKICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBv +ZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBm +b3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlv +bnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IK +b3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0 +aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAg +SWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91 +ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2Js +aWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQ +cm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBw +ZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CmFsbCB0aG9z +ZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhl +bgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdv +dWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0u +CgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3Jj +ZWFibGUgdW5kZXIKYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUg +c2VjdGlvbiBpcyBpbnRlbmRlZCB0bwphcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBp +bnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgpjaXJjdW1zdGFuY2VzLgoKSXQgaXMgbm90IHRoZSBwdXJw +b3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQpwYXRlbnRzIG9y +IG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQpz +dWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3Rpbmcg +dGhlCmludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGlj +aCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBo +YXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2Fy +ZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQg +YXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8g +ZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3Vn +aCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2Uu +CgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMg +YmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgog +IDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmlj +dGVkIGluCmNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVk +IGludGVyZmFjZXMsIHRoZQpvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFBy +b2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCm1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRp +c3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwp0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlz +dHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCmNvdW50cmllcyBub3QgdGh1cyBl +eGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwp0aGUgbGltaXRh +dGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KCiAgOS4gVGhlIEZy +ZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lv +bnMKb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5l +dyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24s +IGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJu +cy4KCkVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAg +SWYgdGhlIFByb2dyYW0Kc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdo +aWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRp +b24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwplaXRoZXIgb2YgdGhhdCB2ZXJz +aW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQpTb2Z0d2FyZSBG +b3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVy +IG9mCnRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQg +YnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4KCiAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29y +cG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQpwcm9ncmFtcyB3aG9zZSBk +aXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCnRv +IGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0 +aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu +ZGF0aW9uOyB3ZSBzb21ldGltZXMKbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9u +IHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0 +dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZApvZiBwcm9tb3Rpbmcg +dGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCgkJCSAgICBOTyBXQVJS +QU5UWQoKICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwg +VEhFUkUgSVMgTk8gV0FSUkFOVFkKRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRF +RCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCk9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElO +RyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKUFJPVklERSBUSEUgUFJP +R1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQK +T1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB +TlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T +RS4gIFRIRSBFTlRJUkUgUklTSyBBUwpUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhF +IFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFClBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZ +T1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLApSRVBBSVIgT1IgQ09S +UkVDVElPTi4KCiAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExB +VyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkg +T1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SClJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBB +UyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCklOQ0xVRElORyBB +TlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJ +U0lORwpPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJ +TkcgQlVUIE5PVCBMSU1JVEVEClRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElO +QUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQpZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZB +SUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgpQUk9HUkFNUyksIEVW +RU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKUE9T +U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgoKCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9O +Uwo + + + + Helvetica + 12 + 16 + + + 4 + + + + + + + + + 38 + + + + 573 + 1 + + + 11109 + 0 + + + + + 6 + System + selectedTextBackgroundColor + + + + 6 + System + selectedTextColor + + + + + + + 1 + MCAwIDEAA + + + + + + 1 + + 6 + {573, 10000000} + {573, 601} + + + + {{1, 1}, {573, 601}} + + + + + + + {4, 5} + + 12582912 + + + + + + TU0AKgAAAHCAFUqgBVKsAAAAwdVQUqwaEQeIRGJRGFlYqwWLQ+JxuOQpVRmEx2RROKwOQyOUQSPyaUym +SxqWyKXyeYxyZzWbSuJTScRCbz2Nz+gRKhUOfTqeUai0OSxiWTiBQSHSGFquGwekxyAgAAAOAQAAAwAA +AAEAEAAAAQEAAwAAAAEAEAAAAQIAAwAAAAIACAAIAQMAAwAAAAEABQAAAQYAAwAAAAEAAQAAAREABAAA +AAEAAAAIARIAAwAAAAEAAQAAARUAAwAAAAEAAgAAARYAAwAAAAEAEAAAARcABAAAAAEAAABnARwAAwAA +AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA + + + + + + 3 + MCAwAA + + + + 4 + + + + 256 + {{558, 1}, {16, 601}} + + + + YES + NO + + _doScroller: + 0.15277071682765633 + + + + -2147483392 + {{-100, -100}, {87, 18}} + + + + NO + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {575, 603} + + + + 133714 + + + + AAAAAAAAAAAAAAAAAAAAAA + 0.25 + 4 + 1 + + + {575, 603} + + + + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + YES + + + 3 + 2 + {{495, 251}, {299, 327}} + 1886912512 + About smcFanControl + StatusItemWindow + + View + + + {213, 107} + + + 256 + + + + 256 + {{97, 280}, {262, 19}} + + + YES + + 67108864 + 4194304 + Programversion + + LucidaGrande-Bold + 16 + 16 + + + + + + NO + + + + 256 + {{99, 235}, {143, 37}} + + + YES + + 67108864 + 272629760 + Small System Font Text + + LucidaGrande-Bold + 11 + 3357 + + + + + + NO + + + + 256 + {{121, 23}, {66, 37}} + + + YES + + 67108864 + 134217728 + + + + -2037628928 + 2 + + NSImage + paypal + + + 400 + 75 + + NO + + + + 256 + {{17, 119}, {265, 29}} + + + YES + + 67108864 + 272629760 + Sujay Thomas + + + + + + NO + + + + 256 + {{17, 150}, {114, 17}} + + + YES + + 67108864 + 272629760 + Icon-Design: + + + + + + NO + + + + 256 + {{17, 59}, {265, 52}} + + + YES + + 67108864 + 272629760 + If you like this program, please consider a donation by clicking on the paypal image. + + + + + + NO + + + + 256 + {{17, 175}, {265, 40}} + + + YES + + 67108864 + 272629760 + based on "Apple System Management Control (SMC) tool" by devnull + + + + + + NO + + + + 256 + + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + {{20, 235}, {64, 64}} + + + YES + + 134217728 + 33554432 + + NSImage + smcfancontrol_v2 + + 0 + 0 + 0 + NO + + NO + YES + + + {299, 327} + + + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + YES + + + Menu + + + + Active Setting + + 1048576 + 2147483647 + + + 1 + + + + Preferences... + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Donate + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Info + + 1048576 + 2147483647 + + + submenuAction: + + Info + + + + About + + 1048576 + 2147483647 + + + + + + Check for updates + + 1048576 + 2147483647 + + + + + + FAQ + + 1048576 + 2147483647 + + + + + + Homepage + + 1048576 + 2147483647 + + + + + + License + + 1048576 + 2147483647 + + + + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit smcFanControl + + 1048576 + 2147483647 + + + + + + + + + Title + selBatt + selbatt + sync + + YES + YES + + YES + YES + YES + YES + YES + + + + Fan + FanData + Description + Minspeed + Maxspeed + selspeed + sync + menu + + YES + + YES + YES + YES + YES + YES + + + 3 + 2 + {{150, 535}, {221, 145}} + 1886912512 + Window + NSWindow + + View + + + {213, 107} + + + 256 + + + + 256 + {{17, 121}, {230, 14}} + + + YES + + 67108864 + 272629760 + Title for new favorite: + + + + + + NO + + + + 256 + {{20, 94}, {181, 19}} + + + YES + + -1804599231 + 272761856 + + + + YES + + + 6 + System + textColor + + + + NO + + + + 256 + {{122, 13}, {84, 28}} + + + YES + + 67108864 + 134348800 + Save + + + -2038284288 + 1 + + + DQ + 200 + 25 + + NO + + + + 256 + {{40, 13}, {84, 28}} + + + YES + + 67108864 + 134348800 + Cancel + + + -2038284288 + 1 + + + Gw + 200 + 25 + + NO + + + + 256 + {{17, 45}, {266, 41}} + + + YES + + 67108864 + 4194304 + QXMgcHJlLXNldHMgZm9yIHRoZSBuZXcgY3JlYXRlZCBmYXZvcml0ZQp0aGUgc2V0dGluZ3Mgb2YgdGhl +IGZhdm9yaXRlICJkZWZhdWx0IiB3aWxsCmJlIHVzZWQuA + + + + + + NO + + + {221, 145} + + + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + YES + + + YES + + + 15 + 2 + {{376, 69}, {575, 665}} + 1886912512 + FAQ + StatusItemWindow + + View + + + {213, 107} + + + 256 + + + + 274 + + + + 2304 + + + + 2322 + {573, 663} + + + + + + + + + + + + + + 38 + + + + 573 + 1 + + + 67119973 + 0 + + + + + + + + + + + + + + 1 + + 6 + {573, 10000000} + + + + {{1, 1}, {573, 663}} + + + + + + 4 + + + + -2147483392 + {{-30, 1}, {15, 587}} + + + NO + + _doScroller: + 0.15277071297168732 + + + + -2147483392 + {{-100, -100}, {87, 18}} + + + NO + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {575, 665} + + + 133650 + + + + AAAAAAAAAAAAAAAAAAAAAA + 0.25 + 4 + 1 + + + {575, 665} + + + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + YES + + + SUUpdater + + + + + + + makeKeyAndOrderFront: + + + + 406 + + + + mainwindow + + + + 304 + + + + TemperatureController + + + + 349 + + + + paypal: + + + + 389 + + + + theMenu + + + + 398 + + + + terminate: + + + + 400 + + + + paypal: + + + + 414 + + + + visitHomepage: + + + + 428 + + + + loginItem: + + + + 484 + + + + closePreferences: + + + + 485 + + + + FavoritesController + + + + 498 + + + + newfavoritewindow + + + + 531 + + + + add_favorite: + + + + 532 + + + + close_favorite: + + + + 533 + + + + save_favorite: + + + + 534 + + + + newfavorite_title + + + + 535 + + + + delete_favorite: + + + + 536 + + + + savePreferences: + + + + 550 + + + + autochange + + + + 581 + + + + FanController + + + + 582 + + + + programinfo + + + + 599 + + + + copyright + + + + 600 + + + + faqWindow + + + + 625 + + + + faqText + + + + 630 + + + + DefaultsController + + + + 632 + + + + sliderCell + + + + 640 + + + + syncSliders: + + + + 700 + + + + sync + + + + 703 + + + + updateCheck: + + + + 722 + + + + colorSelector + + + + 725 + + + + changeMenu: + + + + 726 + + + + menuSelect: + + + + 784 + + + + makeKeyAndOrderFront: + + + + 429 + + + + makeKeyAndOrderFront: + + + + 425 + + + + delegate + + + + 702 + + + + value: arrangedObjects.Description + + + + + + value: arrangedObjects.Description + value + arrangedObjects.Description + 2 + + + 508 + + + + maxValue: arrangedObjects.Maxspeed + + + + + + maxValue: arrangedObjects.Maxspeed + maxValue + arrangedObjects.Maxspeed + 2 + + + 513 + + + + minValue: arrangedObjects.Minspeed + + + + + + minValue: arrangedObjects.Minspeed + minValue + arrangedObjects.Minspeed + + 2 + + + 514 + + + + value: arrangedObjects.selspeed + + + + + + value: arrangedObjects.selspeed + value + arrangedObjects.selspeed + + 2 + + + 516 + + + + maxValue: arrangedObjects.Maxspeed + + + + + + maxValue: arrangedObjects.Maxspeed + maxValue + arrangedObjects.Maxspeed + 2 + + + 521 + + + + minValue: arrangedObjects.Minspeed + + + + + + minValue: arrangedObjects.Minspeed + minValue + arrangedObjects.Minspeed + + 2 + + + 522 + + + + value: arrangedObjects.selspeed + + + + + + value: arrangedObjects.selspeed + value + arrangedObjects.selspeed + + NSContinuouslyUpdatesValue + + + + 2 + + + 701 + + + + content: arrangedObjects.Title + + + + + + content: arrangedObjects.Title + content + arrangedObjects.Title + 2 + + + 502 + + + + selectedIndex: selectionIndex + + + + + + selectedIndex: selectionIndex + selectedIndex + selectionIndex + + 2 + + + 503 + + + + enabled: selectionIndex + + + + + + enabled: selectionIndex + enabled + selectionIndex + 2 + + + 549 + + + + value: values.AutomaticChange + + + + + + value: values.AutomaticChange + value + values.AutomaticChange + 2 + + + 559 + + + + content: arrangedObjects.Title + + + + + + content: arrangedObjects.Title + content + arrangedObjects.Title + 2 + + + 569 + + + + enabled: values.AutomaticChange + + + + + + enabled: values.AutomaticChange + enabled + values.AutomaticChange + 2 + + + 577 + + + + selectedIndex: values.selbatt + + + + + + selectedIndex: values.selbatt + selectedIndex + values.selbatt + + 2 + + + 598 + + + + enabled: values.AutomaticChange + + + + + + enabled: values.AutomaticChange + enabled + values.AutomaticChange + 2 + + + 563 + + + + content: arrangedObjects.Title + + + + + + content: arrangedObjects.Title + content + arrangedObjects.Title + 2 + + + 573 + + + + selectedIndex: values.selac + + + + + + selectedIndex: values.selac + selectedIndex + values.selac + + 2 + + + 594 + + + + enabled: values.AutomaticChange + + + + + + enabled: values.AutomaticChange + enabled + values.AutomaticChange + 2 + + + 565 + + + + content: arrangedObjects.Title + + + + + + content: arrangedObjects.Title + content + arrangedObjects.Title + 2 + + + 575 + + + + selectedIndex: values.selload + + + + + + selectedIndex: values.selload + selectedIndex + values.selload + + 2 + + + 596 + + + + value: values.AutoStart + + + + + + value: values.AutoStart + value + values.AutoStart + 2 + + + 567 + + + + contentArray: selection.FanData + + + + + + contentArray: selection.FanData + contentArray + selection.FanData + 2 + + + 507 + + + + selectedTag: values.Unit + + + + + + selectedTag: values.Unit + selectedTag + values.Unit + 2 + + + 587 + + + + selectedIndex: values.MenuBar + + + + + + selectedIndex: values.MenuBar + selectedIndex + values.MenuBar + 2 + + + 615 + + + + makeKeyAndOrderFront: + + + + 626 + + + + value: selection.sync + + + + + + value: selection.sync + value + selection.sync + 2 + + + 715 + + + + value: values.SUCheckAtStartup + + + + + + value: values.SUCheckAtStartup + value + values.SUCheckAtStartup + 2 + + + 709 + + + + value: values.MenuColor + + + + + + value: values.MenuColor + value + values.MenuColor + + NSValueTransformerName + NSUnarchiveFromData + + 2 + + + 719 + + + + value: arrangedObjects.menu + + + + + + value: arrangedObjects.menu + value + arrangedObjects.menu + 2 + + + 833 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 21 + + + + + + Window + + + 2 + + + + + + + + + + + + + + + + + + + 439 + + + + + + + + + + + 440 + + + + + + + + + + + 441 + + + + + + + + 442 + + + + + + + + 639 + + + + + 443 + + + + + + + + 778 + + + + + + + + 780 + + + + + 447 + + + + + + + + 452 + + + + + + + + 453 + + + + + + + + 454 + + + + + + + + 479 + + + + + + + + + + + + + + + + + + + + + 482 + + + + + + + + 483 + + + + + + + + 695 + + + + + + + + 697 + + + + + + + + 698 + + + + + + + + 699 + + + + + + + + 212 + + + FanControl + + + 348 + + + Temperatures + + + 373 + + + + + + GPL License + + + 374 + + + + + + + + 375 + + + + + + + + + + 376 + + + + + 377 + + + + + + About + + + 378 + + + + + + + + + + + + + + + 379 + + + + + + + + 380 + + + + + + + + 381 + + + + + + + + 382 + + + + + + + + 383 + + + + + + + + 384 + + + + + + + + 385 + + + + + + + + 607 + + + + + + + + 394 + + + + + + + + + + + + + Menu (Menu) + + + 396 + + + + + 399 + + + + + 401 + + + + + 405 + + + + + 411 + + + + + 413 + + + + + 418 + + + + + + + + 419 + + + + + + + + + + + + 420 + + + + + 421 + + + + + 422 + + + + + 423 + + + + + 424 + + + + + 436 + + + + + 486 + + + Favorites + + + 492 + + + Fans + + + 524 + + + + + + NewFavorite + + + 525 + + + + + + + + + + + + 526 + + + + + + + + 527 + + + + + + + + 528 + + + + + + + + 529 + + + + + + + + 530 + + + + + + + + 551 + + + Shared Defaults + + + 619 + + + + + + FAQ + + + 620 + + + + + + + + 621 + + + + + + + + + + 622 + + + + + 635 + + + SUUpdater + + + 835 + + + + + + + + 836 + + + + + 837 + + + + + 838 + + + + + 851 + + + + + 852 + + + + + 853 + + + + + 854 + + + + + 855 + + + + + 856 + + + + + 857 + + + + + 858 + + + + + 859 + + + + + 860 + + + + + 861 + + + + + 862 + + + + + 863 + + + + + 864 + + + + + 865 + + + + + 866 + + + + + 867 + + + + + 868 + + + + + 869 + + + + + 871 + + + + + 872 + + + + + + + + 518 + + + + + 448 + + + + + + + + + + 451 + + + + + 450 + + + + + 449 + + + + + 873 + + + + + 874 + + + + + 875 + + + + + 876 + + + + + 877 + + + + + 878 + + + + + 879 + + + + + 455 + + + + + + + + 839 + + + + + 456 + + + + + + + + 840 + + + + + + + + 457 + + + + + + + + + + 458 + + + + + 459 + + + + + 460 + + + + + 461 + + + + + + + + 841 + + + + + + + + 462 + + + + + + + + + + 463 + + + + + 464 + + + + + 465 + + + + + 466 + + + + + + + + 842 + + + + + + + + 467 + + + + + + + + + + 468 + + + + + 469 + + + + + 470 + + + + + 476 + + + + + + + + 843 + + + + + 477 + + + + + + + + 844 + + + + + 478 + + + + + + + + 845 + + + + + 481 + + + + + + + + 846 + + + + + 537 + + + + + + + + 847 + + + + + 538 + + + + + + + + + + 870 + + + + + 543 + + + + + 542 + + + + + 608 + + + + + + + + 848 + + + + + 609 + + + + + + + + 849 + + + + + + + + 610 + + + + + + + + + + + + 611 + + + + + 612 + + + + + 613 + + + + + 616 + + + + + 631 + + + + + 707 + + + + + + + + 850 + + + + + 716 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 879 + + + + + FanControl + NSObject + + id + id + id + id + id + id + id + id + id + id + id + id + id + + + + add_favorite: + id + + + changeMenu: + id + + + closePreferences: + id + + + close_favorite: + id + + + delete_favorite: + id + + + loginItem: + id + + + menuSelect: + id + + + paypal: + id + + + savePreferences: + id + + + save_favorite: + id + + + syncSliders: + id + + + updateCheck: + id + + + visitHomepage: + id + + + + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + NSMenu + + + + DefaultsController + id + + + FanController + id + + + FavoritesController + id + + + TemperatureController + id + + + applybutton + id + + + autochange + id + + + colorSelector + id + + + copyright + id + + + currentSpeed + id + + + currentSpeed1 + id + + + faqText + id + + + faqWindow + id + + + field1 + id + + + field2 + id + + + levelIndicator + id + + + mainwindow + id + + + newfavorite_title + id + + + newfavoritewindow + id + + + programinfo + id + + + slider1 + id + + + slider2 + id + + + sliderCell + id + + + sync + id + + + syncslider + id + + + tabview + id + + + theMenu + NSMenu + + + + IBProjectSource + ./Classes/FanControl.h + + + + SUUpdater + NSObject + + checkForUpdates: + id + + + checkForUpdates: + + checkForUpdates: + id + + + + IBProjectSource + ./Classes/SUUpdater.h + + + + StatusItemWindow + NSWindow + + IBProjectSource + ./Classes/StatusItemWindow.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + YES + 3 + + {11, 11} + {10, 3} + {16, 15} + {15, 15} + {62, 31} + {128, 128} + + + diff --git a/Ressources/English.lproj/MainMenu.nib/keyedobjects.nib b/Ressources/English.lproj/MainMenu.nib/keyedobjects.nib new file mode 100644 index 0000000..9f57f2f Binary files /dev/null and b/Ressources/English.lproj/MainMenu.nib/keyedobjects.nib differ diff --git a/Ressources/German.lproj/F.A.Q.rtf b/Ressources/German.lproj/F.A.Q.rtf new file mode 100644 index 0000000..8b02cd1 --- /dev/null +++ b/Ressources/German.lproj/F.A.Q.rtf @@ -0,0 +1,104 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1187 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural + +\f0\fs62 \cf0 F.A.Q for smcFanControl 2.4\ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural + +\fs24 \cf0 \ + +\b How do install and uninstall smcFanControl?\ + +\b0 smcFanControl is just an application. So after downloading, and unzipping it, drag it to wherever you want (e.g. the Application Folder). To uninstall it, just drag it into the trash. smcFanControl installs no permanent background processes or daemons. \ +All changes smcFanControl does to the fan controlling get lost after you shutdown your computer (power off, not restart) or enter standby mode (as far as you don't have smcFanControl running) . Minimum fan speed then falls back to the system defaults values.\ +\ + +\b When I run smcFanControl and set a new minimum speed, will my fan speed still increase if the CPU load gets higher?\ + +\b0 Yes, fan speed will increase as defined by Apple. smcFanControl lets the fans stay in automatic mode and just sets the minimum fan speed. However, the higher you set the minimum fan speed, the longer it will take for the fan speed to increase.\ +\ + +\b Why does smcFanControl asks for a login and password and which login/password do I have to enter?\ + +\b0 smcFanControl needs the credentials of an admin-user to set the appropriate rights to be able to change fanspeed. You only have to enter it one time. The entered login and password are not saved by smcFanControl. They are just used for setting the appropriate rights.\ +\ + +\b I get a "smcFanControl has not been tested on this machine" warning. What does that mean?\ + +\b0 Technically smcFanControl supports every intel mac, but it does not come with defaults for every machine. If you get the warning, smcFanControl tries to read out the fan-details directly from the System Management Controller. If you follow the instructions (no other fan control software is running etc.) you should have no problem running smcFanControl on a machine it has not been tested on.\ +\ + +\b How can I restore the Apple defaults for fanspeed?\ + +\b0 Move the sliders to the left and hit apply. The lowest settings smcFanControl allows are the Apple defaults. The minimum default speed after Apple's latest SMC firmware update is 1000rpm for the MBP 15,4", 1500rpm for the MB 13,3". 2000rpm for the Core2Duo MBP and 1800rpm for the Core2Duo MB.\ + +\b \ +Why can't I set my minimum fan speed to 0 rpm?\ + +\b0 smcFanControl only lets you set the fan speed in the range of Apple's min and max values. Setting it to zero is possible from the technical perspective but could probably damage your machine.\ +\ + +\b When will the new settings for minimum fan speed get lost?\ + +\b0 The settings you chose for minimum fan speed will get lost in two cases and the machine will fall back to default values:\ +a) You enter standby mode and smcFanControl is not running (If its running it watches for standby and reapplies your settings when you wake up the machine).\ +b) You power off the machine.\ +\ + +\b Which sensor is read out for the temperature?\ + +\b0 It's not the sensor on the CoreDuo CPU's. The advantage is, that there is no Kernel Extension loaded for temperature readout and temperature should always be reported (some CoreDuo's stop temperature reporting after some minutes unfortunately). The sensor readout is very close to what CoreDuoTemp reports, but its not exactly the same cause of different sensors. +\b \ + +\b0 \ + +\b What about fan-control when I am in Windows XP running Bootcamp?\ + +\b0 At the moment you can not set minimum fan speed when you are in Windows XP (cause smcFanControl is a native OS X application). However if you set up a new minimum fan speed in OS X using smcFanControl and then restart into Windows XP, your settings don't get lost and that new minimum fan speed is used on Windows XP for that session. Some people have reported usage of this to make their MBP cooler and not crashing when running games under Windows XP.\ + +\b \ +Will there be a version of smcFanControl for Powerbooks or other PPC based Macs?\ + +\b0 No, PPC based macs don't have an SMC controller. So the approach of smcFanControl does not work. It's possible that there are solutions to control fan speed on PPC based macs, but I am not aware of any.\ +\ + +\b Will there be a dashboard widget for smcFanControl?\ + +\b0 Well, I think this is a nice idea. I am currently working on improving smcFanControl as an application. But maybe someone else is a good dashboard developer. The GPL sources of smcFanControl should be a good starting point.\ +\ + +\b Wouldn't it be even better to read out the temperature and set the fan speeds depending on the readout than just set the minimum fan speed and let automatic fan control as defined by apple do the rest?\ + +\b0 Yes, that approach is even better and could make your machine running cooler, when you are at higher loads. BUT: I did not take this route for smcFanControl, cause it has some risks. Adjusting the fan speed to CPU temperature requires you have a program running in the background (e.g. a daemon) that adjust fan speed continuously . If that program ever crashes or becomes incompatible cause of a System Update (or the readouts of the temperature sensor get inappropriate) , the fans could get set to a wrong (too low) speed and this could probably damage the machine. In addition to that the fan-control-logic is quite complicate. An intel mac has about 10 temperature sensors, that are continuously read out and are used for monitoring and setting the right fan speeds. So it would be "not so great" to read out just the CPU temperature as a foundation for the fan-controlling.\ +\ + +\b I have got a MBP and smcFanControl is reporting 0rpm for one of my fans?\ + +\b0 In that case the fan did not report any data to smcFanControl. +\b +\b0 It is possible that one of your fan's is dead. +\b +\b0 Please check your computer with the Apple Hardware Test (it's on the DVD that comes with your computer) and see if it reports a failure with one of your fans. +\b \ + +\b0 \ + +\b What are the main-differences between Version 1.2x and Version 2.x of smcFanControl?\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural +\ls1\ilvl0 +\b0 \cf0 {\listtext \'95 }Version 2.x is a completely rewritten application.\ +{\listtext \'95 }Version 1.x was a "regular" application located in the dock. Version 2.x sits in the menubar for quicker access to the fan settings, easier monitoring and a better overall user-experience\ +{\listtext \'95 }Version 2.x supports every intel mac\ +{\listtext \'95 }In Version 2.x you can save different fan-settings as favorites and active them with just one mouse-click\ +{\listtext \'95 }On portables you can autoapply different fan-settings, when the powersource changes. So you can cool down your macbook automatically when its loading the battery (and is typically running hotter).\ +{\listtext \'95 }Version 2.x has got an "add to login-items option" now\ +{\listtext \'95 }Version 2.x uses standard OS X authentication now\ +{\listtext \'95 }Version 2.x uses the Sparkle-Framework to automatically check for updates\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural +\ls2\ilvl0\cf0 \ +} \ No newline at end of file diff --git a/Ressources/German.lproj/InfoPlist.strings b/Ressources/German.lproj/InfoPlist.strings new file mode 100644 index 0000000..a8e71d1 Binary files /dev/null and b/Ressources/German.lproj/InfoPlist.strings differ diff --git a/Ressources/German.lproj/Localizable.strings b/Ressources/German.lproj/Localizable.strings new file mode 100644 index 0000000..f5bc177 --- /dev/null +++ b/Ressources/German.lproj/Localizable.strings @@ -0,0 +1,23 @@ +"Do you really want to delete the favorite %@?" = "Wollen Sie den Favoriten %@ wirklich löschen?"; + +"Yes" = "Ja"; + +"No" = "Nein"; + +"Delete favorite" = "Favoriten löschen"; + +"MainFan" = "Hauptlüfter"; + +"Left Fan" = "Linker Lüfter"; + +"Right Fan" = "Rechter Lüfter"; + +"smcFanControl has not been tested on this machine yet, but it should run if you follow the instructions. \n\nIf you choose to continue, please make you have no other FanControl-software running. Otherwise please quit, deinstall the other software, restart your machine and rerun smcFanControl!" = "smcFanControl wurde auf Ihrem Computermodel noch nicht getestet! Es sollte jedoch problemlos funktionieren, wenn Sie die Hinweise beachten.\n\nBevor Sie auf Weiter klicken, stellen Sie sicher das keine andere FanControl-Software läuft. Sollte dies noch der Fall sein, wählen Sie Abbrechen, deinstallieren Sie die andere Software, starten Sie Ihren Rechner neu und rufen Sie smcFanControl erneut auf!"; + +"Continue" = "Weiter"; + +"Quit" = "Abbrechen"; + +"Alert!" = "Achtung!"; + +"Active Setting" = "Aktive Einstellung"; diff --git a/Ressources/German.lproj/MainMenu.nib/designable.nib b/Ressources/German.lproj/MainMenu.nib/designable.nib new file mode 100644 index 0000000..7997c35 --- /dev/null +++ b/Ressources/German.lproj/MainMenu.nib/designable.nib @@ -0,0 +1,4511 @@ + + + + 1050 + 12A269 + 2549 + 1187 + 624.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2549 + + + NSArrayController + NSBox + NSButton + NSButtonCell + NSColorWell + NSCustomObject + NSImageCell + NSImageView + NSMatrix + NSMenu + NSMenuItem + NSNumberFormatter + NSPopUpButton + NSPopUpButtonCell + NSScrollView + NSScroller + NSSliderCell + NSTableColumn + NSTableHeaderView + NSTableView + NSTextField + NSTextFieldCell + NSTextView + NSUserDefaultsController + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + + NSApplication + + + + FirstResponder + + + NSApplication + + + 7 + 2 + {{502, 143}, {337, 436}} + 1886912512 + smcFanControl + StatusItemWindow + + View + + + {213, 107} + + + 256 + + + + 256 + + + + 2304 + + + + 4352 + {295, 81} + + + YES + NO + YES + + + 256 + {295, 17} + + + + + + + 256 + {{285, 0}, {12, 17}} + + + + menu + 45 + 35 + 1000 + + 75497536 + 2048 + Menü + + LucidaGrande + 10 + 2843 + + + 3 + MC4zMzMzMzI5OQA + + + 6 + System + headerTextColor + + 3 + MAA + + + + + 67108864 + 134348800 + + + LucidaGrande + 11 + 3100 + + + 1215582464 + 130 + + NSImage + NSRadioButton + + + NSRadioButton + + + + 200 + 25 + + 3 + YES + YES + + + + fannr + 87 + 40 + 1000 + + 75497536 + 2048 + Lüfter + + + 3 + MC4zMzMzMzI5OQA + + + + + 337641536 + 2048 + + LucidaGrande + 11 + 16 + + + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + 3 + YES + + + + speedslider + 95 + 40 + 1000 + + 75497536 + 2048 + min. Speed + + + + + + 0 + 131072 + + 100 + 0.0 + 0.0 + 0.0 + 0 + 0 + NO + NO + + YES + + + + speed + 45 + 26.51025390625 + 1000 + + 75497536 + 2048 + RPM + + + 6 + System + headerColor + + 3 + MQA + + + + + + 337641472 + 67108864 + + + + + + 0 + + + , + + . + -0 + 0 + + + 0 + -0 + + + + + + + + NaN + + + + 0 + 0 + YES + NO + 1 + AAAAAAAAAAAAAAAAAAAAAA + + + + , + . + NO + YES + YES + + + + 6 + System + textBackgroundColor + + + + + 3 + YES + YES + + + + 3 + 2 + + + 6 + System + gridColor + + 3 + MC41AA + + + 14 + 304087040 + + + 0 + 15 + 0 + YES + 0 + 1 + + + {{1, 17}, {295, 81}} + + + + + 4 + + + + 256 + {{282, 17}, {14, 81}} + + + NO + 256 + + _doScroller: + 0.4375 + + + + 256 + {{1, 84}, {295, 14}} + + + NO + 257 + + _doScroller: + 0.98269897699356079 + + + + 2304 + + + + {{1, 0}, {295, 17}} + + + + + 4 + + + {{20, 292}, {297, 99}} + + + 133170 + + + + + AAAAAAAAAABBgAAAQYAAAA + 0.25 + 4 + 1 + + + + 264 + {{73, 395}, {177, 22}} + + + YES + + -2076180416 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Item1 + + 1048576 + 2147483647 + 1 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + _popUpItemAction: + + + YES + + + OtherViews + + + + + + Item2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 3 + YES + YES + 1 + + NO + + + + 264 + {{17, 399}, {54, 15}} + + + YES + + 67108864 + 272629760 + Favorit: + + + + 6 + System + controlColor + + + + + NO + + + + 264 + {{285, 392}, {37, 28}} + + + YES + + 67108864 + 134348800 + + + + + -2038284288 + 1 + + + + + + 200 + 25 + + NO + + + + 264 + {{250, 392}, {37, 28}} + + + YES + + 67108864 + 134348800 + - + + + -2038284288 + 1 + + + + + + 200 + 25 + + NO + + + + 256 + + + + 274 + + + + 256 + {{13, 85}, {272, 29}} + + + YES + + 603979776 + 131072 + Automatik bei Wechsel der Stromversorgung + + + 1211912448 + 2 + + NSSwitch + + + + 200 + 25 + + NO + + + + 264 + {{107, 58}, {168, 22}} + + + YES + + -2076180416 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Item1 + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + + OtherViews + + + + + + Item2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 3 + YES + YES + 1 + + NO + + + + 264 + {{107, 33}, {168, 22}} + + + YES + + -2076180416 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Item1 + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + + OtherViews + + + + + + Item2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 3 + YES + YES + 1 + + NO + + + + 264 + {{107, 8}, {168, 22}} + + + YES + + -2076180416 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Item1 + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + + OtherViews + + + + + + Item2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 3 + YES + YES + 1 + + NO + + + + 256 + {{42, 63}, {63, 14}} + + + YES + + 67108864 + 71303168 + Batterie: + + + + + + NO + + + + 256 + {{42, 38}, {63, 14}} + + + YES + + 67108864 + 71303168 + Netzteil: + + + + + + NO + + + + 256 + {{28, 13}, {77, 14}} + + + YES + + 67108864 + 71303168 + Ladevorgang: + + + + + + NO + + + + 256 + {{13, 116}, {261, 23}} + + + YES + + 67108864 + 131072 + Nach dem Login automatisch starten + + + 1211912448 + 2 + + + + 200 + 25 + + NO + + + + 256 + {{13, 169}, {132, 14}} + + + YES + + 67108864 + 272629760 + Temperaturanzeige in: + + + + + + NO + + + + 256 + {{146, 166}, {80, 18}} + + + YES + NO + 1 + 2 + + + -2080374784 + 131072 + °C + + + 1211912448 + 0 + + + + + + 200 + 25 + + + 67108864 + 131072 + °F + + + 1 + 1211912448 + 0 + + + + 400 + 75 + + + {35, 18} + {10, 0} + 1143472128 + NSActionCell + + 67108864 + 0 + Radio + + LucidaGrande + 13 + 1044 + + 1211912448 + 0 + + 400 + 75 + + + + + + + + + 256 + {{13, 193}, {111, 14}} + + + YES + + 67108864 + 272629760 + Menübar: + + + + + + NO + + + + 264 + {{74, 188}, {154, 22}} + + + YES + + 71303232 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Icon + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + 1 + + + YES + + + OtherViews + + + + + Temperatur & Lüfter (mehrzeilig) + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Temperatur & Lüfter (einzeilig) + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + Nur Temperatur + + 1048576 + 2147483647 + + + _popUpItemAction: + 1 + + + + + Nur Lüfter + + 1048576 + 2147483647 + + + _popUpItemAction: + 2 + + + + + 2 + 3 + YES + YES + 1 + + NO + + + + 256 + {{13, 141}, {261, 23}} + + + YES + + 67108864 + 131072 + Nach dem Start auf Updates prüfen + + + 1211912448 + 2 + + + + 200 + 25 + + NO + + + + 256 + + + NSColor pasteboard type + + + {{233, 192}, {39, 17}} + + + YES + NO + YES + + + + {{2, 2}, {299, 226}} + + + + + {{17, 41}, {303, 243}} + + + {0, 0} + + 67108864 + 0 + Optionen + + + + 3 + MCAwLjgwMDAwMDAxAA + + + + 3 + 0 + 2 + NO + + + + 256 + {{240, 13}, {82, 28}} + + YES + + 67108864 + 134348800 + Sichern + + + -2038284288 + 1 + + + + + + 200 + 25 + + NO + + + + 256 + {{157, 13}, {85, 28}} + + + YES + + 67108864 + 134348800 + Abbrechen + + + -2038284288 + 268435457 + + + w + 200 + 25 + + NO + + + + -2147483392 + {{97, 289}, {80, 22}} + + + YES + + 67108864 + 262144 + Slider syncen + + LucidaGrande + 9 + 16 + + + 1211912448 + 2 + + NSImage + NSSwitch + + + + + 200 + 25 + + NO + + + {337, 436} + + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + MainWindow + YES + + + FanControl + + + + currentTemp + minValue + maxValue + warning + critical + unit + FanData + + YES + YES + + YES + YES + YES + YES + YES + + + 15 + 2 + {{394, 138}, {575, 603}} + 1886912512 + GPL Lizenz + StatusItemWindow + + View + + + {213, 107} + + + 256 + + + + 274 + + + + 2304 + + + + 2322 + {573, 3934} + + + + + + + CQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5 +OTEKCiBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu +LAogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT +QQogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29w +aWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dl +ZC4KCgkJCSAgICBQcmVhbWJsZQoKICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRl +c2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCmZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5 +IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCkxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3Vh +cmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKc29mdHdhcmUtLXRvIG1h +a2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKR2VuZXJh +bCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRh +dGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1p +dCB0bwp1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2Fy +ZSBpcyBjb3ZlcmVkIGJ5CnRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVh +ZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCnlvdXIgcHJvZ3JhbXMsIHRvby4KCiAgV2hlbiB3ZSBzcGVh +ayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdApwcmljZS4g +IE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQg +eW91CmhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAo +YW5kIGNoYXJnZSBmb3IKdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBz +b3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CmlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdl +IHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CmluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQg +dGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KCiAgVG8gcHJvdGVjdCB5b3VyIHJp +Z2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAphbnlvbmUgdG8gZGVu +eSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuClRo +ZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5 +b3UgaWYgeW91CmRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlm +eSBpdC4KCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJv +Z3JhbSwgd2hldGhlcgpncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGll +bnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKeW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0 +aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qg +c2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgpyaWdodHMuCgogIFdlIHByb3Rl +Y3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBh +bmQKKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Np +b24gdG8gY29weSwKZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KCiAgQWxzbywg +Zm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRh +aW4KdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0 +aGlzIGZyZWUKc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBl +bHNlIGFuZCBwYXNzZWQgb24sIHdlCndhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQg +dGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCnRoYXQgYW55IHByb2JsZW1zIGludHJvZHVj +ZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCmF1dGhvcnMnIHJlcHV0 +YXRpb25zLgoKICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRs +eSBieSBzb2Z0d2FyZQpwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVk +aXN0cmlidXRvcnMgb2YgYSBmcmVlCnByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVu +dCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHBy +ZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CnBhdGVudCBtdXN0IGJlIGxp +Y2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCgogIFRo +ZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5k +Cm1vZGlmaWNhdGlvbiBmb2xsb3cuCgoJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICBU +RVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJ +T04KCiAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3 +aGljaCBjb250YWlucwphIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5n +IGl0IG1heSBiZSBkaXN0cmlidXRlZAp1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1Ymxp +YyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCnJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFt +IG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgptZWFucyBlaXRoZXIgdGhl +IFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3Ogp0aGF0IGlz +IHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LApl +aXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8g +YW5vdGhlcgpsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0 +aG91dCBsaW1pdGF0aW9uIGluCnRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUg +aXMgYWRkcmVzc2VkIGFzICJ5b3UiLgoKQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3Ry +aWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRo +ZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgpydW5uaW5nIHRoZSBQcm9ncmFtIGlz +IG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCmlzIGNvdmVyZWQg +b25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlClByb2dyYW0g +KGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCldo +ZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgoKICAxLiBZ +b3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MK +c291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQg +eW91CmNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4g +YXBwcm9wcmlhdGUKY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2Vl +cCBpbnRhY3QgYWxsIHRoZQpub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0 +aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CmFuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9m +IHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4K +CllvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBh +IGNvcHksIGFuZAp5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24g +aW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgoKICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29w +aWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCm9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3Jr +IGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNh +dGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCmFib3ZlLCBwcm92aWRlZCB0 +aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgWW91IG11c3Qg +Y2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCiAgICBzdGF0 +aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgoK +ICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlz +aCwgdGhhdCBpbgogICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20g +dGhlIFByb2dyYW0gb3IgYW55CiAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hv +bGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAogICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2Yg +dGhpcyBMaWNlbnNlLgoKICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRz +IGNvbW1hbmRzIGludGVyYWN0aXZlbHkKICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hl +biBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBv +cmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KICAgIGFubm91bmNlbWVudCBpbmNsdWRp +bmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQogICAgbm90aWNlIHRoYXQgdGhl +cmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCiAgICBhIHdh +cnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCiAg +ICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkg +b2YgdGhpcwogICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBp +bnRlcmFjdGl2ZSBidXQKICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2Vt +ZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBw +cmludCBhbiBhbm5vdW5jZW1lbnQuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2Rp +ZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3Jr +IGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29u +c2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0 +aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3 +aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlz +dHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3Jr +IGJhc2VkCm9uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJl +IG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBs +aWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2 +ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGlu +dGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMg +dG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4 +ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBv +cgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgoKSW4gYWRkaXRpb24sIG1lcmUg +YWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQp3aXRoIHRo +ZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUg +b2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVy +IHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBjb3B5IGFu +ZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCnVuZGVyIFNlY3Rp +b24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgpT +ZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBm +b2xsb3dpbmc6CgogICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRp +bmcgbWFjaGluZS1yZWFkYWJsZQogICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0 +ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCiAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVt +IGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKCiAgICBiKSBBY2Nv +bXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQogICAg +eWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlv +dXIKICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEg +Y29tcGxldGUKICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3Vy +Y2UgY29kZSwgdG8gYmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAx +IGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCiAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBp +bnRlcmNoYW5nZTsgb3IsCgogICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlv +dSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBz +b3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCiAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNv +bW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQogICAgcmVjZWl2ZWQgdGhlIHByb2dy +YW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAogICAgYW4gb2ZmZXIs +IGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCgpUaGUgc291cmNlIGNvZGUgZm9yIGEg +d29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmlj +YXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCmNvZGUg +bWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMg +YW55CmFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMg +dXNlZCB0bwpjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFi +bGUuICBIb3dldmVyLCBhcyBhCnNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJp +YnV0ZWQgbmVlZCBub3QgaW5jbHVkZQphbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVk +IChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQpmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRz +IChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQpvcGVyYXRpbmcgc3lzdGVtIG9uIHdo +aWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAppdHNlbGYgYWNjb21w +YW5pZXMgdGhlIGV4ZWN1dGFibGUuCgpJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmpl +Y3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCmFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVk +IHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBj +b2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCmRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNl +IGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdApjb21wZWxsZWQgdG8gY29weSB0 +aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgoKICA0LiBZb3UgbWF5IG5vdCBjb3B5 +LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KZXhjZXB0IGFzIGV4 +cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdApvdGhlcndpc2Ug +dG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKdm9p +ZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBM +aWNlbnNlLgpIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRz +LCBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0 +ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaApwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Uu +CgogIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlv +dSBoYXZlIG5vdApzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJt +aXNzaW9uIHRvIG1vZGlmeSBvcgpkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZl +IHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBh +Y2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQptb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5n +IHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKUHJvZ3JhbSksIHlvdSBpbmRpY2F0 +ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKYWxsIGl0cyB0ZXJt +cyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwp0aGUg +UHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KCiAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1 +dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpQcm9ncmFtKSwgdGhlIHJlY2lw +aWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNl +bnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCnRo +ZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCnJl +c3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVk +IGhlcmVpbi4KWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5 +IHRoaXJkIHBhcnRpZXMgdG8KdGhpcyBMaWNlbnNlLgoKICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBv +ZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBm +b3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlv +bnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IK +b3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0 +aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAg +SWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91 +ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2Js +aWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQ +cm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBw +ZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CmFsbCB0aG9z +ZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhl +bgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdv +dWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0u +CgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3Jj +ZWFibGUgdW5kZXIKYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUg +c2VjdGlvbiBpcyBpbnRlbmRlZCB0bwphcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBp +bnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgpjaXJjdW1zdGFuY2VzLgoKSXQgaXMgbm90IHRoZSBwdXJw +b3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQpwYXRlbnRzIG9y +IG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQpz +dWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3Rpbmcg +dGhlCmludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGlj +aCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBo +YXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2Fy +ZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQg +YXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8g +ZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3Vn +aCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2Uu +CgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMg +YmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgog +IDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmlj +dGVkIGluCmNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVk +IGludGVyZmFjZXMsIHRoZQpvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFBy +b2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCm1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRp +c3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwp0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlz +dHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCmNvdW50cmllcyBub3QgdGh1cyBl +eGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwp0aGUgbGltaXRh +dGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KCiAgOS4gVGhlIEZy +ZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lv +bnMKb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5l +dyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24s +IGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJu +cy4KCkVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAg +SWYgdGhlIFByb2dyYW0Kc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdo +aWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRp +b24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwplaXRoZXIgb2YgdGhhdCB2ZXJz +aW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQpTb2Z0d2FyZSBG +b3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVy +IG9mCnRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQg +YnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4KCiAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29y +cG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQpwcm9ncmFtcyB3aG9zZSBk +aXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCnRv +IGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0 +aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu +ZGF0aW9uOyB3ZSBzb21ldGltZXMKbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9u +IHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0 +dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZApvZiBwcm9tb3Rpbmcg +dGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCgkJCSAgICBOTyBXQVJS +QU5UWQoKICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwg +VEhFUkUgSVMgTk8gV0FSUkFOVFkKRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRF +RCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCk9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElO +RyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKUFJPVklERSBUSEUgUFJP +R1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQK +T1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB +TlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T +RS4gIFRIRSBFTlRJUkUgUklTSyBBUwpUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhF +IFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFClBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZ +T1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLApSRVBBSVIgT1IgQ09S +UkVDVElPTi4KCiAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExB +VyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkg +T1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SClJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBB +UyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCklOQ0xVRElORyBB +TlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJ +U0lORwpPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJ +TkcgQlVUIE5PVCBMSU1JVEVEClRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElO +QUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQpZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZB +SUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgpQUk9HUkFNUyksIEVW +RU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKUE9T +U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgoKCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9O +Uwo + + + + Helvetica + 12 + 16 + + + 4 + + + + + + + + + 38 + + + + 573 + 1 + + + 11109 + 0 + + + + + 6 + System + selectedTextBackgroundColor + + + + 6 + System + selectedTextColor + + + + + + + 1 + MCAwIDEAA + + + + + + 1 + + 6 + {573, 10000000} + {573, 601} + + + + {{1, 1}, {573, 601}} + + + + + + {4, 5} + + 12582912 + + + + + + TU0AKgAAAHCAFUqgBVKsAAAAwdVQUqwaEQeIRGJRGFlYqwWLQ+JxuOQpVRmEx2RROKwOQyOUQSPyaUym +SxqWyKXyeYxyZzWbSuJTScRCbz2Nz+gRKhUOfTqeUai0OSxiWTiBQSHSGFquGwekxyAgAAAOAQAAAwAA +AAEAEAAAAQEAAwAAAAEAEAAAAQIAAwAAAAIACAAIAQMAAwAAAAEABQAAAQYAAwAAAAEAAQAAAREABAAA +AAEAAAAIARIAAwAAAAEAAQAAARUAAwAAAAEAAgAAARYAAwAAAAEAEAAAARcABAAAAAEAAABnARwAAwAA +AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA + + + + + + 3 + MCAwAA + + + + 4 + + + + 256 + {{558, 1}, {16, 601}} + + YES + NO + + _doScroller: + 0.15277071682765633 + + + + -2147483392 + {{-100, -100}, {87, 18}} + + + NO + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {575, 603} + + + 133714 + + + + AAAAAAAAAAAAAAAAAAAAAA + 0.25 + 4 + 1 + + + {575, 603} + + + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + YES + + + 3 + 2 + {{495, 251}, {299, 327}} + 1886912512 + About smcFanControl + StatusItemWindow + + View + + + {213, 107} + + + 256 + + + + 256 + {{97, 280}, {262, 19}} + + + YES + + 67108864 + 4194304 + Programversion + + LucidaGrande-Bold + 16 + 16 + + + + + + NO + + + + 256 + {{99, 235}, {143, 37}} + + + YES + + 67108864 + 272629760 + Small System Font Text + + LucidaGrande-Bold + 11 + 3357 + + + + + + NO + + + + 256 + {{121, 23}, {66, 37}} + + + YES + + 67108864 + 134217728 + + + + -2037628928 + 2 + + NSImage + paypal + + + 400 + 75 + + NO + + + + 256 + {{17, 119}, {265, 29}} + + + YES + + 67108864 + 272629760 + Sujay Thomas + + + + + + NO + + + + 256 + {{17, 150}, {114, 17}} + + + YES + + 67108864 + 272629760 + Icon-Design: + + + + + + NO + + + + 256 + {{17, 59}, {265, 52}} + + + YES + + 67108864 + 272629760 + Wenn Ihnen dieses Programm gefällt, würde ich mich über eine kleine Spende freuen. + + + + + + NO + + + + 256 + {{17, 178}, {265, 49}} + + + YES + + 67108864 + 272629760 + basierend auf "Apple System Management Control (SMC) tool" von devnull + + + + + + NO + + + + 256 + + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + {{20, 235}, {64, 64}} + + + YES + + 134217728 + 33554432 + + NSImage + smcfancontrol_v2 + + 0 + 0 + 0 + NO + + NO + YES + + + {299, 327} + + + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + YES + + + Menu + + + + Aktive Einstellung + + 1048576 + 2147483647 + + + 1 + + + + Einstellungen... + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Spenden + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Info + + 1048576 + 2147483647 + + + submenuAction: + + Info + + + + Über + + 1048576 + 2147483647 + + + + + + Nach Updates suchen + + 1048576 + 2147483647 + + + + + + FAQ + + 1048576 + 2147483647 + + + + + + Homepage + + 1048576 + 2147483647 + + + + + + Lizenz + + 1048576 + 2147483647 + + + + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + smcFanControl beenden + + 1048576 + 2147483647 + + + + + + + + + Title + selBatt + selbatt + sync + + YES + YES + + YES + YES + YES + YES + YES + + + + Fan + FanData + Description + Minspeed + Maxspeed + selspeed + sync + menu + + YES + + YES + YES + YES + YES + YES + + + 3 + 2 + {{150, 535}, {221, 145}} + 1886912512 + Window + NSWindow + + View + + + {213, 107} + + + 256 + + + + 256 + {{17, 121}, {230, 14}} + + YES + + 67108864 + 272629760 + Bezeichnung des neuen Favoriten: + + + + + + NO + + + + 256 + {{20, 94}, {181, 19}} + + YES + + -1804599231 + 272761856 + + + + YES + + + 6 + System + textColor + + + + NO + + + + 256 + {{122, 13}, {84, 28}} + + YES + + 67108864 + 134348800 + Sichern + + + -2038284288 + 1 + + + DQ + 200 + 25 + + NO + + + + 256 + {{40, 13}, {84, 28}} + + YES + + 67108864 + 134348800 + Abbrechen + + + -2038284288 + 1 + + + Gw + 200 + 25 + + NO + + + + 256 + {{17, 45}, {266, 41}} + + YES + + 67108864 + 4194304 + QWxzIFZvcmdhYmVuIGRlcyBuZXVlbiBGYXZvcml0ZW4Kd2VyZGVuIGRpZSBFaW5zdGVsbHVuZ2VuIGRl +cyBGYXZvcml0ZW4KIkRlZmF1bHQiIHZlcndlbmRldC4 + + LucidaGrande + 9 + 3614 + + + + + + NO + + + {221, 145} + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + YES + + + YES + + + 15 + 2 + {{376, 69}, {575, 665}} + 1886912512 + FAQ + StatusItemWindow + + View + + + {213, 107} + + + 256 + + + + 274 + + + + 2304 + + + + 2322 + {573, 663} + + + + + + + + + + + + + 38 + + + + 573 + 1 + + + 67119973 + 0 + + + + + + + + + + + + + + 1 + + 6 + {573, 10000000} + + + + {{1, 1}, {573, 663}} + + + + + + 4 + + + + -2147483392 + {{-30, 1}, {15, 587}} + + NO + + _doScroller: + 0.15277071297168732 + + + + -2147483392 + {{-100, -100}, {87, 18}} + + NO + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {575, 665} + + + 133650 + + + + AAAAAAAAAAAAAAAAAAAAAA + 0.25 + 4 + 1 + + + {575, 665} + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + YES + + + SUUpdater + + + + + + + makeKeyAndOrderFront: + + + + 406 + + + + mainwindow + + + + 304 + + + + TemperatureController + + + + 349 + + + + paypal: + + + + 389 + + + + theMenu + + + + 398 + + + + terminate: + + + + 400 + + + + paypal: + + + + 414 + + + + visitHomepage: + + + + 428 + + + + loginItem: + + + + 484 + + + + closePreferences: + + + + 485 + + + + FavoritesController + + + + 498 + + + + newfavoritewindow + + + + 531 + + + + add_favorite: + + + + 532 + + + + close_favorite: + + + + 533 + + + + save_favorite: + + + + 534 + + + + newfavorite_title + + + + 535 + + + + delete_favorite: + + + + 536 + + + + savePreferences: + + + + 550 + + + + autochange + + + + 581 + + + + FanController + + + + 582 + + + + programinfo + + + + 599 + + + + copyright + + + + 600 + + + + faqWindow + + + + 625 + + + + faqText + + + + 630 + + + + DefaultsController + + + + 632 + + + + sliderCell + + + + 640 + + + + syncSliders: + + + + 700 + + + + sync + + + + 703 + + + + updateCheck: + + + + 722 + + + + colorSelector + + + + 725 + + + + changeMenu: + + + + 726 + + + + menuSelect: + + + + 774 + + + + makeKeyAndOrderFront: + + + + 429 + + + + makeKeyAndOrderFront: + + + + 425 + + + + delegate + + + + 702 + + + + value: arrangedObjects.Description + + + + + + value: arrangedObjects.Description + value + arrangedObjects.Description + 2 + + + 508 + + + + maxValue: arrangedObjects.Maxspeed + + + + + + maxValue: arrangedObjects.Maxspeed + maxValue + arrangedObjects.Maxspeed + 2 + + + 513 + + + + minValue: arrangedObjects.Minspeed + + + + + + minValue: arrangedObjects.Minspeed + minValue + arrangedObjects.Minspeed + + 2 + + + 514 + + + + value: arrangedObjects.selspeed + + + + + + value: arrangedObjects.selspeed + value + arrangedObjects.selspeed + + 2 + + + 516 + + + + maxValue: arrangedObjects.Maxspeed + + + + + + maxValue: arrangedObjects.Maxspeed + maxValue + arrangedObjects.Maxspeed + 2 + + + 521 + + + + minValue: arrangedObjects.Minspeed + + + + + + minValue: arrangedObjects.Minspeed + minValue + arrangedObjects.Minspeed + + 2 + + + 522 + + + + value: arrangedObjects.selspeed + + + + + + value: arrangedObjects.selspeed + value + arrangedObjects.selspeed + + NSContinuouslyUpdatesValue + + + + 2 + + + 701 + + + + content: arrangedObjects.Title + + + + + + content: arrangedObjects.Title + content + arrangedObjects.Title + 2 + + + 502 + + + + selectedIndex: selectionIndex + + + + + + selectedIndex: selectionIndex + selectedIndex + selectionIndex + + 2 + + + 503 + + + + enabled: selectionIndex + + + + + + enabled: selectionIndex + enabled + selectionIndex + 2 + + + 549 + + + + value: values.AutomaticChange + + + + + + value: values.AutomaticChange + value + values.AutomaticChange + 2 + + + 559 + + + + content: arrangedObjects.Title + + + + + + content: arrangedObjects.Title + content + arrangedObjects.Title + 2 + + + 569 + + + + enabled: values.AutomaticChange + + + + + + enabled: values.AutomaticChange + enabled + values.AutomaticChange + 2 + + + 577 + + + + selectedIndex: values.selbatt + + + + + + selectedIndex: values.selbatt + selectedIndex + values.selbatt + + 2 + + + 598 + + + + enabled: values.AutomaticChange + + + + + + enabled: values.AutomaticChange + enabled + values.AutomaticChange + 2 + + + 563 + + + + content: arrangedObjects.Title + + + + + + content: arrangedObjects.Title + content + arrangedObjects.Title + 2 + + + 573 + + + + selectedIndex: values.selac + + + + + + selectedIndex: values.selac + selectedIndex + values.selac + + 2 + + + 594 + + + + enabled: values.AutomaticChange + + + + + + enabled: values.AutomaticChange + enabled + values.AutomaticChange + 2 + + + 565 + + + + content: arrangedObjects.Title + + + + + + content: arrangedObjects.Title + content + arrangedObjects.Title + 2 + + + 575 + + + + selectedIndex: values.selload + + + + + + selectedIndex: values.selload + selectedIndex + values.selload + + 2 + + + 596 + + + + value: values.AutoStart + + + + + + value: values.AutoStart + value + values.AutoStart + 2 + + + 567 + + + + contentArray: selection.FanData + + + + + + contentArray: selection.FanData + contentArray + selection.FanData + 2 + + + 507 + + + + selectedTag: values.Unit + + + + + + selectedTag: values.Unit + selectedTag + values.Unit + 2 + + + 587 + + + + selectedIndex: values.MenuBar + + + + + + selectedIndex: values.MenuBar + selectedIndex + values.MenuBar + 2 + + + 615 + + + + makeKeyAndOrderFront: + + + + 626 + + + + value: selection.sync + + + + + + value: selection.sync + value + selection.sync + 2 + + + 715 + + + + value: values.SUCheckAtStartup + + + + + + value: values.SUCheckAtStartup + value + values.SUCheckAtStartup + 2 + + + 709 + + + + value: values.MenuColor + + + + + + value: values.MenuColor + value + values.MenuColor + + NSValueTransformerName + NSUnarchiveFromData + + 2 + + + 719 + + + + value: arrangedObjects.menu + + + + + + value: arrangedObjects.menu + value + arrangedObjects.menu + + NSNullPlaceholder + + + 2 + + + 825 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 21 + + + + + + Window + + + 2 + + + + + + + + + + + + + + + + 439 + + + + + + + + + + + 440 + + + + + + + + + + + 441 + + + + + + + + 442 + + + + + + + + 639 + + + + + 443 + + + + + + + + 770 + + + + + + + + 771 + + + + + 447 + + + + + + + + 452 + + + + + + + + 453 + + + + + + + + 454 + + + + + + + + 479 + + + + + + + + + + + + + + + + + + + + + 482 + + + + + + + + 483 + + + + + + + + 695 + + + + + + + + 212 + + + FanControl + + + 348 + + + Temperatures + + + 373 + + + + + + GPL License + + + 374 + + + + + + + + 375 + + + + + + + + + + 376 + + + + + 377 + + + + + + About + + + 378 + + + + + + + + + + + + + + + 379 + + + + + + + + 380 + + + + + + + + 381 + + + + + + + + 382 + + + + + + + + 383 + + + + + + + + 384 + + + + + + + + 385 + + + + + + + + 607 + + + + + + + + 394 + + + + + + + + + + + + + Menu (Menu) + + + 396 + + + + + 399 + + + + + 401 + + + + + 405 + + + + + 411 + + + + + 413 + + + + + 418 + + + + + + + + 419 + + + + + + + + + + + + 420 + + + + + 421 + + + + + 422 + + + + + 423 + + + + + 424 + + + + + 436 + + + + + 486 + + + Favorites + + + 492 + + + Fans + + + 524 + + + + + + NewFavorite + + + 525 + + + + + + + + + + + + 526 + + + + + + + + 527 + + + + + + + + 528 + + + + + + + + 529 + + + + + + + + 530 + + + + + + + + 551 + + + Shared Defaults + + + 619 + + + + + + FAQ + + + 620 + + + + + + + + 621 + + + + + + + + + + 622 + + + + + 635 + + + SUUpdater + + + 829 + + + + + + + + 830 + + + + + 831 + + + + + 832 + + + + + 845 + + + + + 846 + + + + + 847 + + + + + 848 + + + + + 849 + + + + + 850 + + + + + 851 + + + + + 852 + + + + + 853 + + + + + 854 + + + + + 855 + + + + + 856 + + + + + 857 + + + + + 858 + + + + + 859 + + + + + 860 + + + + + 862 + + + + + 863 + + + + + + + + 518 + + + + + 448 + + + + + + + + + + 451 + + + + + 450 + + + + + 449 + + + + + 864 + + + + + 865 + + + + + 866 + + + + + 867 + + + + + 868 + + + + + 869 + + + + + 870 + + + + + 455 + + + + + + + + 833 + + + + + 456 + + + + + + + + 834 + + + + + + + + 457 + + + + + + + + + + 458 + + + + + 459 + + + + + 460 + + + + + 461 + + + + + + + + 835 + + + + + + + + 462 + + + + + + + + + + 463 + + + + + 464 + + + + + 465 + + + + + 466 + + + + + + + + 836 + + + + + + + + 467 + + + + + + + + + + 468 + + + + + 469 + + + + + 470 + + + + + 476 + + + + + + + + 837 + + + + + 477 + + + + + + + + 838 + + + + + 478 + + + + + + + + 839 + + + + + 481 + + + + + + + + 840 + + + + + 537 + + + + + + + + 841 + + + + + 538 + + + + + + + + + + 861 + + + + + 543 + + + + + 542 + + + + + 608 + + + + + + + + 842 + + + + + 609 + + + + + + + + 843 + + + + + + + + 610 + + + + + + + + + + + + 611 + + + + + 612 + + + + + 613 + + + + + 616 + + + + + 631 + + + + + 707 + + + + + + + + 844 + + + + + 716 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 870 + + + + + FanControl + NSObject + + id + id + id + id + id + id + id + id + id + id + id + id + id + + + + add_favorite: + id + + + changeMenu: + id + + + closePreferences: + id + + + close_favorite: + id + + + delete_favorite: + id + + + loginItem: + id + + + menuSelect: + id + + + paypal: + id + + + savePreferences: + id + + + save_favorite: + id + + + syncSliders: + id + + + updateCheck: + id + + + visitHomepage: + id + + + + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + NSMenu + + + + DefaultsController + id + + + FanController + id + + + FavoritesController + id + + + TemperatureController + id + + + applybutton + id + + + autochange + id + + + colorSelector + id + + + copyright + id + + + currentSpeed + id + + + currentSpeed1 + id + + + faqText + id + + + faqWindow + id + + + field1 + id + + + field2 + id + + + levelIndicator + id + + + mainwindow + id + + + newfavorite_title + id + + + newfavoritewindow + id + + + programinfo + id + + + slider1 + id + + + slider2 + id + + + sliderCell + id + + + sync + id + + + syncslider + id + + + tabview + id + + + theMenu + NSMenu + + + + IBProjectSource + ./Classes/FanControl.h + + + + SUUpdater + NSObject + + checkForUpdates: + id + + + checkForUpdates: + + checkForUpdates: + id + + + + IBProjectSource + ./Classes/SUUpdater.h + + + + StatusItemWindow + NSWindow + + IBProjectSource + ./Classes/StatusItemWindow.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + YES + 3 + + {11, 11} + {10, 3} + {16, 15} + {15, 15} + {62, 31} + {128, 128} + + + diff --git a/Ressources/German.lproj/MainMenu.nib/keyedobjects.nib b/Ressources/German.lproj/MainMenu.nib/keyedobjects.nib new file mode 100644 index 0000000..caf1ced Binary files /dev/null and b/Ressources/German.lproj/MainMenu.nib/keyedobjects.nib differ diff --git a/Ressources/Machines.plist b/Ressources/Machines.plist new file mode 100644 index 0000000..2fde844 --- /dev/null +++ b/Ressources/Machines.plist @@ -0,0 +1,576 @@ + + + + + + Fans + + + Description + Left Fan + Maxspeed + 6000 + Minspeed + 1000 + selspeed + 1000 + + + Description + Right Fan + Maxspeed + 6000 + Minspeed + 1000 + selspeed + 1000 + + + Machine + MacBookPro1,1 + Maxspeed + 6000 + Minspeed + 1000 + NumFans + 2 + + + Fans + + + Description + Left Fan + Maxspeed + 6000 + Minspeed + 1000 + selspeed + 1000 + + + Description + Right Fan + Maxspeed + 6000 + Minspeed + 1000 + selspeed + 1000 + + + Machine + MacBookPro1,2 + Maxspeed + 6000 + Minspeed + 1000 + NumFans + 2 + + + Fans + + + Description + Left Fan + Maxspeed + 6000 + Minspeed + 2000 + selspeed + 2000 + + + Description + Right Fan + Maxspeed + 6000 + Minspeed + 2000 + selspeed + 2000 + + + Machine + MacBookPro2,2 + Maxspeed + 6000 + Minspeed + 2000 + NumFans + 2 + + + Fans + + + Description + Left Fan + Maxspeed + 6000 + Minspeed + 2000 + selspeed + 2000 + + + Description + Right Fan + Maxspeed + 6000 + Minspeed + 2000 + selspeed + 2000 + + + Machine + MacBookPro2,1 + Maxspeed + 6000 + Minspeed + 2000 + NumFans + 2 + + + Fans + + + Description + Left Fan + Maxspeed + 6000 + Minspeed + 2000 + selspeed + 2000 + + + Description + Right Fan + Maxspeed + 6000 + Minspeed + 2000 + selspeed + 2000 + + + Machine + MacBookPro3,1 + Maxspeed + 6000 + Minspeed + 2000 + NumFans + 2 + + + Fans + + + Description + Left Fan + Maxspeed + 6000 + Minspeed + 2000 + selspeed + 2000 + + + Description + Right Fan + Maxspeed + 6000 + Minspeed + 2000 + selspeed + 2000 + + + Machine + MacBookPro4,1 + Maxspeed + 6000 + Minspeed + 2000 + NumFans + 2 + + + Fans + + + Description + Left Fan + Maxspeed + 6000 + Minspeed + 2000 + selspeed + 2000 + + + Description + Right Fan + Maxspeed + 6000 + Minspeed + 2000 + selspeed + 2000 + + + Machine + MacBookPro5,1 + Maxspeed + 6000 + Minspeed + 2000 + NumFans + 2 + + + Fans + + + Description + Left Fan + Maxspeed + 6000 + Minspeed + 2000 + selspeed + 2000 + + + Description + Right Fan + Maxspeed + 6000 + Minspeed + 2000 + selspeed + 2000 + + + Machine + MacBookPro5,2 + Maxspeed + 6000 + Minspeed + 2000 + NumFans + 2 + + + Fans + + + Description + MainFan + Maxspeed + 6200 + Minspeed + 1500 + selspeed + 1500 + + + Machine + MacBook1,1 + Maxspeed + 6200 + Minspeed + 1500 + NumFans + 1 + + + Fans + + + Description + MainFan + Maxspeed + 6200 + Minspeed + 1800 + selspeed + 1800 + + + Machine + MacBook2,1 + Maxspeed + 6200 + Minspeed + 1800 + NumFans + 1 + + + Fans + + + Description + MainFan + Maxspeed + 6200 + Minspeed + 1800 + selspeed + 1800 + + + Machine + MacBook3,1 + Maxspeed + 6200 + Minspeed + 1800 + NumFans + 1 + + + Fans + + + Description + MainFan + Maxspeed + 6200 + Minspeed + 1800 + selspeed + 1800 + + + Machine + MacBook4,1 + Maxspeed + 6200 + Minspeed + 1800 + NumFans + 1 + + + Fans + + + Description + MainFan + Maxspeed + 6200 + Minspeed + 1800 + selspeed + 1800 + + + Machine + MacBook5,1 + Maxspeed + 6000 + Minspeed + 2000 + NumFans + 1 + + + Fans + + + Description + MainFan + Maxspeed + 6200 + Minspeed + 1800 + selspeed + 1800 + + + Machine + MacBook5,2 + Maxspeed + 6200 + Minspeed + 1800 + NumFans + 1 + + + Fans + + + Description + MainFan + Maxspeed + 6200 + Minspeed + 1800 + selspeed + 1800 + + + Machine + MacBookAir1,1 + Maxspeed + 6200 + Minspeed + 2000 + NumFans + 1 + + + Fans + + + Description + MainFan + Maxspeed + 6200 + Minspeed + 1800 + selspeed + 1800 + + + Machine + MacBookAir2,1 + Maxspeed + 6200 + Minspeed + 2000 + NumFans + 1 + + + Fans + + + Description + MainFan + Maxspeed + 5500 + Minspeed + 1500 + selspeed + 1500 + + + Machine + MacMini1,1 + Maxspeed + 5500 + Minspeed + 1500 + NumFans + 1 + + + Fans + + + Description + MainFan + Maxspeed + 5500 + Minspeed + 1500 + selspeed + 1500 + + + Machine + MacMini2,1 + Maxspeed + 5500 + Minspeed + 1500 + NumFans + 1 + + + Fans + + + Description + MainFan + Maxspeed + 5500 + Minspeed + 1500 + selspeed + 1500 + + + Machine + MacMini3,1 + Maxspeed + 5500 + Minspeed + 1500 + NumFans + 1 + + + Fans + + + Description + CPU Fan + Maxspeed + 2900 + Minspeed + 500 + selspeed + 500 + + + Description + PCIe/HDD Fan + Maxspeed + 2900 + Minspeed + 500 + selspeed + 500 + + + Description + Rear Fan + Maxspeed + 2900 + Minspeed + 500 + selspeed + 500 + + + Description + Power Supply Fan + Maxspeed + 2800 + Minspeed + 600 + selspeed + 600 + + + Machine + MacPro1,1 + Maxspeed + 2900 + Minspeed + 500 + NumFans + 4 + + + diff --git a/Ressources/Spanish.lproj/F.A.Q.rtf b/Ressources/Spanish.lproj/F.A.Q.rtf new file mode 100644 index 0000000..1933df8 --- /dev/null +++ b/Ressources/Spanish.lproj/F.A.Q.rtf @@ -0,0 +1,97 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1187 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} +\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural + +\f0\fs62 \cf0 F.A.Q para smcFanControl 2.4\ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural + +\fs24 \cf0 \ + +\b \'bfC\'f3mo instalar y desinstalar smcFanControl?\ + +\b0 smcFanControl es uns aplicaci\'f3n simple, tras bajarla descompr\'edmala en donde prefiera (por ejemplo la carpeta de aplicaciones) Para desinstalarlo, arr\'e1strelo a la papelera. smcFanControl no instala procesos en segundo plano o daemons. \ +Todos los cambios realizados por smcFanControl se pierden al apagar el ordenador (apagar equipo, no reiniciar) o al entrar en standby (mientras smcFanControl no est\'e9 funcionando) Las velocidades m\'ednimas de ventilador volver\'e1n a los valores por defecto del sistema.\ +\ + +\b \'bfPorqu\'e9 la velocidad del ventilador aumenta cuando aumento la carga de la CPU si he cambiado la velocidad m\'ednima en smcFanControl?\ + +\b0 La velocidad del ventilador aumentar\'e1 seg\'fan lo establecido por Apple. smcFanControl deja los ventiladores en modo autom\'e1tico y se limita a cambiar la velocidad m\'ednima. Eso si, cuanto m\'e1s alta ponga la velocidad m\'ednima m\'e1s tardar\'e1 en acelerarse.\ +\ + +\b \'bfPorqu\'e9 smcFanControl pide una contrase\'f1a? \'bfQu\'e9 usuario/contrase\'f1a debo usar?\ + +\b0 smcFanControl necesita funcionar como administrador para tener los suicientes permisos para cambiar la velocidad de losventiladores. Basta con introducirlo una vez para que adquiera los permisos adecuados (smcFanControl no guarda el usario/contrase\'f1a introducidos)\ +\ + +\b Me sale el aviso "smcFanControl no ha sido probado en esta m\'e1quina". \'bfQu\'e9 significa?\ + +\b0 T\'e9cnicamente smcFanControl funciona en todos los mac Intel, pero no trae los valores por defecto para todos los modelos. Si sale este aviso smcFanControl tratar\'e1 de leer los valores por defecto del SMC (System Management Controller) Si sigue las instrucciones (no hay otro controlador de ventiladoes, etc) no deber\'eda de tener ning\'fan problema en usarlo en un modelo en el que no haya sido probado a\'fan.\ +\ + +\b \'bfComo puedo recobrar los valores por defecto de Apple para la velocidad de los ventiladores?\ + +\b0 Desplace todas las barras hacia la izquierda y pulse Aplicar. Los valores m\'e1s bajos que smcFanControl amite son los valores por defecto de Apple. Los valores m\'ednimos tras la \'faltima actualizaci\'f3n del firmware de SMC de Apple son 1000rpm para el MBP 15,4", 1500rpm para el MB 13,3". 2000rpm para el Core2Duo MBP y 1800rpm para Core2Duo MB.\ + +\b \ +\'bfPorqu\'e9 no puedo poner la velocidad m\'ednima a 0 0 rpm?\ + +\b0 smcFanControl s\'f3lo permite fijar la velocidad m\'ednima entre los valores establecidos por Apple de velocidad m\'ednima y m\'e1xima. Ponerla a 0 puede que tenga sentido, pero lo m\'e1s seguro es que da\'f1ase la m\'e1quina.\ +\ + +\b \'bfCu\'e1ndo se puierden las nuevas configuraciones de velocidad?\ + +\b0 La configuraci\'f3n fijada de velocidad m\'ednima se pierde en 2 casos, en los que la m\'e1quina volver\'e1 a las opciones por defecto:\ +a) Se entra en standby y smcFanControl no est\'e1 iniciado (Si est\'e1 corriendo establecer\'e1 su configuraci\'f3n cuando la m\'e1quina despierte)\ +b) La m\'e1quina se apaga.\ +\ + +\b \'bfQu\'e9 sensor de temperatura es le\'eddo?\ + +\b0 Las CoreDuo CPUs no tienen sensor de temperatura. La ventaja es que no es necesario una extensi\'f3n del kernel cargada para obtener la temperatura y \'e9sta es siempre le\'edda (desgraciadamente algunos CoreDuos dejan de proporcionar la tempreratura tras unos minutos) La temperatura es muy pr\'f3xima a la que devuelve CoreDuoTemp, la diferencia es causada por los diferentes sensores usados. +\b \ + +\b0 \ + +\b \'bfSe puede controlar los ventiladores desde Windows XP usando Bootcamp?\ + +\b0 Por el momento no es posible controlar la velocidad m\'ednima desde Windows XP (smcFanControl es una aplicaci\'f3n nativa de OS X). Puede establecer una velocidad con smcFanControl desde OS X y luego reiniciar en Windows XP ya que el ajuste no se perder\'e1 para esa sesi\'f3n. Alguna gente dice usar esto para enfriar su MBP y que no se cuelge cuando usan juegos en Windows XP.\ + +\b \ +\'bfHabr\'e1 una versi\'f3n de smcFanControl para Powerbooks o otros Macs PPC?\ + +\b0 No, los macs basados en PPC no tienen SMC. La t\'e9cnica empleada por smcFanControl no funciona. Es posible que haya formas de controlar la velocidad de los ventiladores para Macs PPC, pero no conozco ninguna.\ +\ + +\b \'bfHay un dashboard widget para smcFanControl?\ + +\b0 Pienso que es una buena idea. Ahora mismo estoy trabajando en mejorar smcFanControl como aplicaci\'f3n, pero puede que otros sean buenos desarrolladores de dashboard. La licencia GPL de smcFanControl es un buen comienzo.\ +\ + +\b \'bfNo ser\'eda mejor leer los valores de temperaura y ajustar la velocidad que limitarse a cambiar el valor m\'ednimo y dejar que el control autom\'e1tico de ventiladores de Apple haga el resto?\ + +\b0 Si, ese camino es mejor y puede que haga que la m\'e1quina funcione m\'e1s fresca cuando la carga es alta... PERO: No eleg\'ed este camino por los los riesgos que tiene. Requiere un programa en segundo plano (un daemon) ajustando constantemente la velocidad. Si este programa es incompatible con una fuura actualiaci\'f3n del sistema o se cuelga puede fijar la velocidad a un valor demasiado bajo y estropear la m\'e1quina. Adem\'e1s la l\'f3gica que hay que a\'f1adir es muy complicada, un mac intel tiene en torno a 10 sensores de temperatura, con lo que simplemente "leer la temperatura de la CPU y ajustar el ventilador" no es tan buena idea.\ +\ + +\b \'bfTengo un MBP y smcFanControl dice que un ventilador gira a 0rpm?\ + +\b0 El ventilador no es\'e1 informando a smcFanControl, puede ser que uno de los ventiladores est\'e9 roto. Comprebe su ordenador con el +\b +\b0 Apple Hardware Test (est\'e1 en el DVDque ven\'eda con el mac) y compruebe si informa de un fallo en uno de sus ventiladores.\ +\ + +\b \'bfCuales son las principales diferencias entre las versiones 1.2.x y 2.x de smcFanControl?\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural +\ls1\ilvl0 +\b0 \cf0 {\listtext \'95 }La versi\'f3n 2.x est\'e1 completamente rescrita.\ +{\listtext \'95 }La versi\'f3n 1.x era una aplicaci\'f3n "regular" en el dock. La versi\'f3n 2.x se coloca en la barra de menu, por lo que se accede r\'e1pidamente a los ajustes de los ventiladores, al control de temperatura y en general un uso m\'e1s agradable\ +{\listtext \'95 }La versi\'f3n 2.x funciona en todos los Mac Intel\ +{\listtext \'95 }En la versi\'f3n 2.x se pueden guardar diferentes configuraciones como favoritos y acivarlos con un click\ +{\listtext \'95 }En un port\'e1til se pueden ejecutar autom\'e1ticamente diferentes configuraciones cuando la fuente de alimentaci\'f3n cambia. As\'ed se puede enfriar autom\'e1ticamente el macbook cuando est\'e9 cargando la bater\'eda.\ +{\listtext \'95 }La versi\'f3n 2.x tiene la opci\'f3n de "a\'f1adir a los elementos de inicio"\ +{\listtext \'95 }La versi\'f3n 2.x usa la autenticaci\'f3n est\'e1ndard de OS X\ +{\listtext \'95 }La versi\'f3n 2.x usa el "Sparkle-Framework" para busca autom\'e1ticamente actualizaciones\ +} \ No newline at end of file diff --git a/Ressources/Spanish.lproj/InfoPlist.strings b/Ressources/Spanish.lproj/InfoPlist.strings new file mode 100644 index 0000000..a63c17c --- /dev/null +++ b/Ressources/Spanish.lproj/InfoPlist.strings @@ -0,0 +1,3 @@ +/* Localized versions of Info.plist keys */ + +NSHumanReadableCopyright = "by Hendrik Holtmann, 2009 (GPL License)"; \ No newline at end of file diff --git a/Ressources/Spanish.lproj/Localizable.strings b/Ressources/Spanish.lproj/Localizable.strings new file mode 100644 index 0000000..5795924 --- /dev/null +++ b/Ressources/Spanish.lproj/Localizable.strings @@ -0,0 +1,23 @@ +"Do you really want to delete the favorite %@?" = "¿Seguro qu desea eliminar el favorito: %@?"; + +"Yes" = "Si"; + +"No" = "No"; + +"Delete favorite" = "Favorito eliminado"; + +"MainFan" = "Ventilador principal"; + +"Left Fan" = "Ventilador izquierdo"; + +"Right Fan" = "Ventilador derecho"; + +"smcFanControl has not been tested on this machine yet, but it should run if you follow the instructions. \n\nIf you choose to continue, please make you have no other FanControl-software running. Otherwise please quit, deinstall the other software, restart your machine and rerun smcFanControl!" = "smcFanControl no ha sido probado en esta máquina, pero debería de funcionar si sigue esta insrucciones. \n\nSi decide continuar aseguresé de que no hay otro programa de control de ventiladores; si no salga, desinstale los otros programas, reinicie y lance otra vez smcFanControl"; + +"Continue" = "Continuar"; + +"Quit" = "Salir"; + +"Alert!" = "¡Atención!"; + +"Active Setting" = "Configuración activa"; \ No newline at end of file diff --git a/Ressources/Spanish.lproj/MainMenu.nib/designable.nib b/Ressources/Spanish.lproj/MainMenu.nib/designable.nib new file mode 100644 index 0000000..c242663 --- /dev/null +++ b/Ressources/Spanish.lproj/MainMenu.nib/designable.nib @@ -0,0 +1,4594 @@ + + + + 1050 + 12A269 + 2549 + 1187 + 624.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2549 + + + NSArrayController + NSBox + NSButton + NSButtonCell + NSColorWell + NSCustomObject + NSImageCell + NSImageView + NSMatrix + NSMenu + NSMenuItem + NSNumberFormatter + NSPopUpButton + NSPopUpButtonCell + NSScrollView + NSScroller + NSSliderCell + NSTableColumn + NSTableHeaderView + NSTableView + NSTextField + NSTextFieldCell + NSTextView + NSUserDefaultsController + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + + NSApplication + + + + FirstResponder + + + NSApplication + + + 7 + 2 + {{519, 155}, {337, 436}} + 1886912512 + smcFanControl + StatusItemWindow + + View + + + {213, 107} + + + 256 + + + + 256 + + + + 2304 + + + + 4352 + {295, 81} + + YES + NO + YES + + + 256 + {295, 17} + + + + + + 256 + {{285, 0}, {12, 17}} + + + + menu + 45 + 35 + 1000 + + 75497536 + 2048 + Menú + + LucidaGrande + 10 + 2843 + + + 3 + MC4zMzMzMzI5OQA + + + 6 + System + headerTextColor + + 3 + MAA + + + + + 67108864 + 134348800 + + + LucidaGrande + 11 + 3100 + + + 1215582464 + 130 + + NSImage + NSRadioButton + + + NSRadioButton + + + + 200 + 25 + + 3 + YES + YES + + + + fannr + 87 + 40 + 1000 + + 75497536 + 2048 + Ventilador + + + 3 + MC4zMzMzMzI5OQA + + + + + 337641536 + 2048 + + LucidaGrande + 11 + 16 + + + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + 3 + YES + + + + speedslider + 95 + 40 + 1000 + + 75497536 + 2048 + min. Velocidad + + + + + + 0 + 131072 + + 100 + 0.0 + 0.0 + 0.0 + 0 + 0 + NO + NO + + YES + + + + speed + 45 + 26.51025390625 + 1000 + + 75497536 + 2048 + RPM + + + 6 + System + headerColor + + 3 + MQA + + + + + + 337641472 + 67108864 + + + + + + 0 + + + , + + . + -0 + 0 + + + 0 + -0 + + + + + + + + NaN + + + + 0 + 0 + YES + NO + 1 + AAAAAAAAAAAAAAAAAAAAAA + + + + , + . + NO + YES + YES + + + + 6 + System + textBackgroundColor + + + + + 3 + YES + YES + + + + 3 + 2 + + + 6 + System + gridColor + + 3 + MC41AA + + + 14 + 304087040 + + + 0 + 15 + 0 + YES + 0 + 1 + + + {{1, 17}, {295, 81}} + + + + + 4 + + + + 256 + {{285, 17}, {11, 75}} + + NO + 256 + + _doScroller: + 0.4375 + + + + 256 + {{1, 87}, {289, 11}} + + NO + 257 + + _doScroller: + 0.98269897699356079 + + + + 2304 + + + + {{1, 0}, {295, 17}} + + + + + 4 + + + {{20, 292}, {297, 99}} + + + 133170 + + + + + AAAAAAAAAABBgAAAQYAAAA + 0.25 + 4 + 1 + + + + 264 + {{73, 395}, {177, 22}} + + YES + + -2076180416 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Item1 + + 1048576 + 2147483647 + 1 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + _popUpItemAction: + + + YES + + + OtherViews + + + + + + Item2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 3 + YES + YES + 1 + + NO + + + + 264 + {{17, 397}, {54, 17}} + + + YES + + 67108864 + 272629760 + Favorito: + + + + 6 + System + controlColor + + + + + NO + + + + 264 + {{285, 392}, {37, 28}} + + YES + + 67108864 + 134348800 + + + + + -2038284288 + 1 + + + + + + 200 + 25 + + NO + + + + 264 + {{250, 392}, {37, 28}} + + + YES + + 67108864 + 134348800 + - + + + -2038284288 + 1 + + + + + + 200 + 25 + + NO + + + + 256 + + + + 274 + + + + 256 + {{13, 92}, {239, 18}} + + YES + + 603979776 + 131072 + Aplicar favorito cuando el fuente cambie + + + 1211912448 + 2 + + NSSwitch + + + + 200 + 25 + + NO + + + + 264 + {{107, 58}, {168, 22}} + + YES + + -2076180416 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Item1 + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + + OtherViews + + + + + + Item2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 3 + YES + YES + 1 + + NO + + + + 264 + {{107, 33}, {168, 22}} + + YES + + -2076180416 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Item1 + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + + OtherViews + + + + + + Item2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 3 + YES + YES + 1 + + NO + + + + 264 + {{107, 8}, {168, 22}} + + YES + + -2076180416 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Item1 + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + + OtherViews + + + + + + Item2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 3 + YES + YES + 1 + + NO + + + + 256 + {{42, 60}, {63, 17}} + + YES + + 67108864 + 71303168 + Batería: + + + + + + NO + + + + 256 + {{42, 35}, {63, 17}} + + YES + + 67108864 + 71303168 + Enchufe: + + + + + + NO + + + + 256 + {{28, 10}, {77, 17}} + + YES + + 67108864 + 71303168 + Cargando: + + + + + + NO + + + + 256 + {{13, 117}, {183, 18}} + + YES + + 67108864 + 131072 + Iniciar smcFanControl al inicio + + + 1211912448 + 2 + + + + 200 + 25 + + NO + + + + 256 + {{13, 155}, {138, 28}} + + YES + + 67108864 + 272629760 + Unidad de temperatura: + + + + + + NO + + + + 256 + {{151, 166}, {80, 18}} + + YES + NO + 1 + 2 + + + -2080374784 + 131072 + °C + + + 1211912448 + 0 + + + + + + 200 + 25 + + + 67108864 + 131072 + °F + + + 1 + 1211912448 + 0 + + + + 400 + 75 + + + {35, 18} + {10, 0} + 1143472128 + NSActionCell + + 67108864 + 0 + Radio + + LucidaGrande + 13 + 1044 + + 1211912448 + 0 + + 400 + 75 + + + + + + + + + 256 + {{13, 190}, {111, 17}} + + YES + + 67108864 + 272629760 + Menú: + + + + + + NO + + + + 264 + {{54, 188}, {174, 22}} + + YES + + 71303232 + 133120 + + + 109199360 + 1 + + + + + + 400 + 75 + + + Sólo icono + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + 1 + + + YES + + + OtherViews + + + + + Temperatura & Velocidad (múltiples líneas) + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Temperatura & Velocidad (una línea) + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + Sólo temperatura + + 1048576 + 2147483647 + + + _popUpItemAction: + 1 + + + + + Sólo Velocidad del ventilador + + 1048576 + 2147483647 + + + _popUpItemAction: + 2 + + + + + 2 + 3 + YES + YES + 1 + + NO + + + + 256 + {{13, 142}, {222, 18}} + + YES + + 67108864 + 131072 + Comprobar nuevas versiones al inicio + + + 1211912448 + 2 + + + + 200 + 25 + + NO + + + + 256 + + + NSColor pasteboard type + + + {{233, 192}, {39, 17}} + + YES + NO + YES + + + + {{2, 2}, {299, 226}} + + + + {{17, 41}, {303, 243}} + + {0, 0} + + 67108864 + 0 + Opciones + + + + 3 + MCAwLjgwMDAwMDAxAA + + + + 3 + 0 + 2 + NO + + + + 256 + {{242, 13}, {80, 28}} + + YES + + 67108864 + 134348800 + Guardar + + + -2038284288 + 1 + + + + + + 200 + 25 + + NO + + + + 256 + {{159, 13}, {85, 28}} + + YES + + 67108864 + 134348800 + Cancelar + + + -2038284288 + 268435457 + + + w + 200 + 25 + + NO + + + + 256 + {{100, 375}, {141, 16}} + + YES + + 603979776 + 134479872 + Button + + LucidaGrande + 9 + 3614 + + + -2038251520 + 1 + + LucidaGrande + 9 + 16 + + + + + + 200 + 25 + + NO + + + + 256 + {{19, 375}, {81, 16}} + + YES + + 603979776 + 134479872 + Button + + + -2038251520 + 1 + + + + + + 200 + 25 + + NO + + + + 256 + {{240, 375}, {76, 16}} + + YES + + 603979776 + 134479872 + Button + + + -2038251520 + 1 + + + + + + 200 + 25 + + NO + + + + -2147483392 + {{97, 289}, {74, 22}} + + YES + + 67108864 + 262144 + Sincronizar selectores + + + 1211912448 + 2 + + NSImage + NSSwitch + + + + + 200 + 25 + + NO + + + {337, 436} + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + MainWindow + YES + + + FanControl + + + + currentTemp + minValue + maxValue + warning + critical + unit + FanData + + YES + YES + + YES + YES + YES + YES + YES + + + 15 + 2 + {{394, 138}, {575, 603}} + 1886912512 + Licencia GPL + StatusItemWindow + + View + + + {213, 107} + + + 256 + + + + 274 + + + + 2304 + + + + 2322 + {573, 3934} + + + + + + + CQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5 +OTEKCiBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu +LAogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT +QQogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29w +aWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dl +ZC4KCgkJCSAgICBQcmVhbWJsZQoKICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRl +c2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCmZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5 +IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCkxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3Vh +cmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKc29mdHdhcmUtLXRvIG1h +a2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKR2VuZXJh +bCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRh +dGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1p +dCB0bwp1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2Fy +ZSBpcyBjb3ZlcmVkIGJ5CnRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVh +ZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCnlvdXIgcHJvZ3JhbXMsIHRvby4KCiAgV2hlbiB3ZSBzcGVh +ayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdApwcmljZS4g +IE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQg +eW91CmhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAo +YW5kIGNoYXJnZSBmb3IKdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBz +b3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CmlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdl +IHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CmluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQg +dGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KCiAgVG8gcHJvdGVjdCB5b3VyIHJp +Z2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAphbnlvbmUgdG8gZGVu +eSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuClRo +ZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5 +b3UgaWYgeW91CmRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlm +eSBpdC4KCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJv +Z3JhbSwgd2hldGhlcgpncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGll +bnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKeW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0 +aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qg +c2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgpyaWdodHMuCgogIFdlIHByb3Rl +Y3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBh +bmQKKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Np +b24gdG8gY29weSwKZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KCiAgQWxzbywg +Zm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRh +aW4KdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0 +aGlzIGZyZWUKc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBl +bHNlIGFuZCBwYXNzZWQgb24sIHdlCndhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQg +dGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCnRoYXQgYW55IHByb2JsZW1zIGludHJvZHVj +ZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCmF1dGhvcnMnIHJlcHV0 +YXRpb25zLgoKICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRs +eSBieSBzb2Z0d2FyZQpwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVk +aXN0cmlidXRvcnMgb2YgYSBmcmVlCnByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVu +dCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHBy +ZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CnBhdGVudCBtdXN0IGJlIGxp +Y2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCgogIFRo +ZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5k +Cm1vZGlmaWNhdGlvbiBmb2xsb3cuCgoJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICBU +RVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJ +T04KCiAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3 +aGljaCBjb250YWlucwphIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5n +IGl0IG1heSBiZSBkaXN0cmlidXRlZAp1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1Ymxp +YyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCnJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFt +IG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgptZWFucyBlaXRoZXIgdGhl +IFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3Ogp0aGF0IGlz +IHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LApl +aXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8g +YW5vdGhlcgpsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0 +aG91dCBsaW1pdGF0aW9uIGluCnRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUg +aXMgYWRkcmVzc2VkIGFzICJ5b3UiLgoKQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3Ry +aWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRo +ZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgpydW5uaW5nIHRoZSBQcm9ncmFtIGlz +IG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCmlzIGNvdmVyZWQg +b25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlClByb2dyYW0g +KGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCldo +ZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgoKICAxLiBZ +b3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MK +c291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQg +eW91CmNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4g +YXBwcm9wcmlhdGUKY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2Vl +cCBpbnRhY3QgYWxsIHRoZQpub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0 +aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CmFuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9m +IHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4K +CllvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBh +IGNvcHksIGFuZAp5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24g +aW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgoKICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29w +aWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCm9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3Jr +IGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNh +dGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCmFib3ZlLCBwcm92aWRlZCB0 +aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgWW91IG11c3Qg +Y2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCiAgICBzdGF0 +aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgoK +ICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlz +aCwgdGhhdCBpbgogICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20g +dGhlIFByb2dyYW0gb3IgYW55CiAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hv +bGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAogICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2Yg +dGhpcyBMaWNlbnNlLgoKICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRz +IGNvbW1hbmRzIGludGVyYWN0aXZlbHkKICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hl +biBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBv +cmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KICAgIGFubm91bmNlbWVudCBpbmNsdWRp +bmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQogICAgbm90aWNlIHRoYXQgdGhl +cmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCiAgICBhIHdh +cnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCiAg +ICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkg +b2YgdGhpcwogICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBp +bnRlcmFjdGl2ZSBidXQKICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2Vt +ZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBw +cmludCBhbiBhbm5vdW5jZW1lbnQuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2Rp +ZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3Jr +IGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29u +c2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0 +aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3 +aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlz +dHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3Jr +IGJhc2VkCm9uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJl +IG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBs +aWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2 +ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGlu +dGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMg +dG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4 +ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBv +cgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgoKSW4gYWRkaXRpb24sIG1lcmUg +YWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQp3aXRoIHRo +ZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUg +b2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVy +IHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBjb3B5IGFu +ZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCnVuZGVyIFNlY3Rp +b24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgpT +ZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBm +b2xsb3dpbmc6CgogICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRp +bmcgbWFjaGluZS1yZWFkYWJsZQogICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0 +ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCiAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVt +IGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKCiAgICBiKSBBY2Nv +bXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQogICAg +eWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlv +dXIKICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEg +Y29tcGxldGUKICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3Vy +Y2UgY29kZSwgdG8gYmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAx +IGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCiAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBp +bnRlcmNoYW5nZTsgb3IsCgogICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlv +dSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBz +b3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCiAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNv +bW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQogICAgcmVjZWl2ZWQgdGhlIHByb2dy +YW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAogICAgYW4gb2ZmZXIs +IGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCgpUaGUgc291cmNlIGNvZGUgZm9yIGEg +d29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmlj +YXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCmNvZGUg +bWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMg +YW55CmFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMg +dXNlZCB0bwpjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFi +bGUuICBIb3dldmVyLCBhcyBhCnNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJp +YnV0ZWQgbmVlZCBub3QgaW5jbHVkZQphbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVk +IChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQpmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRz +IChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQpvcGVyYXRpbmcgc3lzdGVtIG9uIHdo +aWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAppdHNlbGYgYWNjb21w +YW5pZXMgdGhlIGV4ZWN1dGFibGUuCgpJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmpl +Y3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCmFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVk +IHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBj +b2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCmRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNl +IGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdApjb21wZWxsZWQgdG8gY29weSB0 +aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgoKICA0LiBZb3UgbWF5IG5vdCBjb3B5 +LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KZXhjZXB0IGFzIGV4 +cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdApvdGhlcndpc2Ug +dG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKdm9p +ZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBM +aWNlbnNlLgpIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRz +LCBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0 +ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaApwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Uu +CgogIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlv +dSBoYXZlIG5vdApzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJt +aXNzaW9uIHRvIG1vZGlmeSBvcgpkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZl +IHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBh +Y2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQptb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5n +IHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKUHJvZ3JhbSksIHlvdSBpbmRpY2F0 +ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKYWxsIGl0cyB0ZXJt +cyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwp0aGUg +UHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KCiAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1 +dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpQcm9ncmFtKSwgdGhlIHJlY2lw +aWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNl +bnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCnRo +ZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCnJl +c3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVk +IGhlcmVpbi4KWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5 +IHRoaXJkIHBhcnRpZXMgdG8KdGhpcyBMaWNlbnNlLgoKICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBv +ZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBm +b3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlv +bnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IK +b3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0 +aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAg +SWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91 +ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2Js +aWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQ +cm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBw +ZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CmFsbCB0aG9z +ZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhl +bgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdv +dWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0u +CgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3Jj +ZWFibGUgdW5kZXIKYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUg +c2VjdGlvbiBpcyBpbnRlbmRlZCB0bwphcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBp +bnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgpjaXJjdW1zdGFuY2VzLgoKSXQgaXMgbm90IHRoZSBwdXJw +b3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQpwYXRlbnRzIG9y +IG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQpz +dWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3Rpbmcg +dGhlCmludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGlj +aCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBo +YXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2Fy +ZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQg +YXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8g +ZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3Vn +aCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2Uu +CgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMg +YmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgog +IDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmlj +dGVkIGluCmNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVk +IGludGVyZmFjZXMsIHRoZQpvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFBy +b2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCm1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRp +c3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwp0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlz +dHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCmNvdW50cmllcyBub3QgdGh1cyBl +eGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwp0aGUgbGltaXRh +dGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KCiAgOS4gVGhlIEZy +ZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lv +bnMKb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5l +dyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24s +IGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJu +cy4KCkVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAg +SWYgdGhlIFByb2dyYW0Kc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdo +aWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRp +b24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwplaXRoZXIgb2YgdGhhdCB2ZXJz +aW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQpTb2Z0d2FyZSBG +b3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVy +IG9mCnRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQg +YnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4KCiAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29y +cG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQpwcm9ncmFtcyB3aG9zZSBk +aXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCnRv +IGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0 +aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu +ZGF0aW9uOyB3ZSBzb21ldGltZXMKbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9u +IHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0 +dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZApvZiBwcm9tb3Rpbmcg +dGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCgkJCSAgICBOTyBXQVJS +QU5UWQoKICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwg +VEhFUkUgSVMgTk8gV0FSUkFOVFkKRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRF +RCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCk9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElO +RyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKUFJPVklERSBUSEUgUFJP +R1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQK +T1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB +TlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T +RS4gIFRIRSBFTlRJUkUgUklTSyBBUwpUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhF +IFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFClBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZ +T1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLApSRVBBSVIgT1IgQ09S +UkVDVElPTi4KCiAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExB +VyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkg +T1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SClJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBB +UyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCklOQ0xVRElORyBB +TlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJ +U0lORwpPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJ +TkcgQlVUIE5PVCBMSU1JVEVEClRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElO +QUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQpZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZB +SUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgpQUk9HUkFNUyksIEVW +RU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKUE9T +U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgoKCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9O +Uwo + + + + Helvetica + 12 + 16 + + + 4 + + + + + + + + + 38 + + + + 573 + 1 + + + 11109 + 0 + + + + + 6 + System + selectedTextBackgroundColor + + + + 6 + System + selectedTextColor + + + + + + + 1 + MCAwIDEAA + + + + + + 1 + + 6 + {573, 10000000} + {573, 601} + + + + {{1, 1}, {573, 601}} + + + + + + + {4, 5} + + 12582912 + + + + + + TU0AKgAAAHCAFUqgBVKsAAAAwdVQUqwaEQeIRGJRGFlYqwWLQ+JxuOQpVRmEx2RROKwOQyOUQSPyaUym +SxqWyKXyeYxyZzWbSuJTScRCbz2Nz+gRKhUOfTqeUai0OSxiWTiBQSHSGFquGwekxyAgAAAOAQAAAwAA +AAEAEAAAAQEAAwAAAAEAEAAAAQIAAwAAAAIACAAIAQMAAwAAAAEABQAAAQYAAwAAAAEAAQAAAREABAAA +AAEAAAAIARIAAwAAAAEAAQAAARUAAwAAAAEAAgAAARYAAwAAAAEAEAAAARcABAAAAAEAAABnARwAAwAA +AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA + + + + + + 3 + MCAwAA + + + + 4 + + + + 256 + {{558, 1}, {16, 601}} + + + YES + NO + + _doScroller: + 0.15277071682765633 + + + + -2147483392 + {{-100, -100}, {87, 18}} + + + NO + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {575, 603} + + + + 133714 + + + + AAAAAAAAAAAAAAAAAAAAAA + 0.25 + 4 + 1 + + + {575, 603} + + + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + YES + + + 3 + 2 + {{495, 251}, {299, 327}} + 1886912512 + Acerca de smcFanControl + StatusItemWindow + + View + + + {213, 107} + + + 256 + + + + 256 + {{97, 280}, {262, 19}} + + YES + + 67108864 + 4194304 + Programversion + + LucidaGrande-Bold + 16 + 16 + + + + + + NO + + + + 256 + {{99, 235}, {143, 37}} + + YES + + 67108864 + 272629760 + Small System Font Text + + LucidaGrande-Bold + 11 + 3357 + + + + + + NO + + + + 256 + {{121, 23}, {66, 37}} + + YES + + 67108864 + 134217728 + + + + -2037628928 + 2 + + NSImage + paypal + + + 400 + 75 + + NO + + + + 256 + {{17, 119}, {265, 29}} + + YES + + 67108864 + 272629760 + Sujay Thomas + + + + + + NO + + + + 256 + {{17, 150}, {114, 17}} + + YES + + 67108864 + 272629760 + Diseño del icono: + + + + + + NO + + + + 256 + {{17, 59}, {265, 52}} + + YES + + 67108864 + 272629760 + Si le gusta este programa, por favor, considere hacer una donación. Puede usar el botón de Paypal. + + + + + + NO + + + + 256 + {{17, 175}, {265, 40}} + + YES + + 67108864 + 272629760 + basado en "Apple System Management Control (SMC) tool" por devnull + + + + + + NO + + + + 256 + + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + {{20, 235}, {64, 64}} + + YES + + 134217728 + 33554432 + + NSImage + smcfancontrol_v2 + + 0 + 0 + 0 + NO + + NO + YES + + + {299, 327} + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + YES + + + Menú + + + + Configuración activa + + 1048576 + 2147483647 + + + 1 + + + + Preferencias... + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Donar + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Información + + 1048576 + 2147483647 + + + submenuAction: + + Información + + + + Acerca de smcFanControl + + 1048576 + 2147483647 + + + + + + Comprobar actualizaciones + + 1048576 + 2147483647 + + + + + + FAQ + + 1048576 + 2147483647 + + + + + + Página web + + 1048576 + 2147483647 + + + + + + Licencia + + 1048576 + 2147483647 + + + + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Salir de smcFanControl + + 1048576 + 2147483647 + + + + + + + + + Title + selBatt + selbatt + sync + + YES + YES + + YES + YES + YES + YES + YES + + + + Fan + FanData + Description + Minspeed + Maxspeed + selspeed + sync + menu + + YES + + YES + YES + YES + YES + YES + + + 3 + 2 + {{150, 535}, {221, 145}} + 1886912512 + Window + NSWindow + + View + + + {213, 107} + + + 256 + + + + 256 + {{17, 118}, {230, 17}} + + YES + + 67108864 + 272629760 + Nombre del nuevo favorito: + + + + + + NO + + + + 256 + {{20, 94}, {181, 19}} + + YES + + -1804599231 + 272761856 + + + + YES + + + 6 + System + textColor + + + + NO + + + + 256 + {{122, 13}, {84, 28}} + + YES + + 67108864 + 134348800 + Guardar + + + -2038284288 + 1 + + + DQ + 200 + 25 + + NO + + + + 256 + {{40, 13}, {84, 28}} + + YES + + 67108864 + 134348800 + Cancelar + + + -2038284288 + 1 + + + Gw + 200 + 25 + + NO + + + + 256 + {{17, 45}, {187, 41}} + + YES + + 67108864 + 4194304 + El favorito usará como valores iniciales los mismos que el favorito "default" + + + + + + NO + + + {221, 145} + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + YES + + + YES + + + 15 + 2 + {{376, 69}, {575, 665}} + 1886912512 + FAQ + StatusItemWindow + + View + + + {213, 107} + + + 256 + + + + 274 + + + + 2304 + + + + 2322 + {573, 663} + + + + + + + + + + + + + 38 + + + + 573 + 1 + + + 67119973 + 0 + + + + + + + + + + + + + + 1 + + 6 + {573, 10000000} + + + + {{1, 1}, {573, 663}} + + + + + + 4 + + + + -2147483392 + {{-30, 1}, {15, 587}} + + NO + + _doScroller: + 0.15277071297168732 + + + + 256 + {{-100, -100}, {87, 18}} + + NO + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {575, 665} + + + 133650 + + + + AAAAAAAAAAAAAAAAAAAAAA + 0.25 + 4 + 1 + + + {575, 665} + + {{0, 0}, {1440, 878}} + {213, 129} + {10000000000000, 10000000000000} + YES + + + SUUpdater + + + + + + + makeKeyAndOrderFront: + + + + 406 + + + + mainwindow + + + + 304 + + + + TemperatureController + + + + 349 + + + + paypal: + + + + 389 + + + + theMenu + + + + 398 + + + + terminate: + + + + 400 + + + + paypal: + + + + 414 + + + + visitHomepage: + + + + 428 + + + + loginItem: + + + + 484 + + + + closePreferences: + + + + 485 + + + + FavoritesController + + + + 498 + + + + newfavoritewindow + + + + 531 + + + + add_favorite: + + + + 532 + + + + close_favorite: + + + + 533 + + + + save_favorite: + + + + 534 + + + + newfavorite_title + + + + 535 + + + + delete_favorite: + + + + 536 + + + + savePreferences: + + + + 550 + + + + autochange + + + + 581 + + + + FanController + + + + 582 + + + + programinfo + + + + 599 + + + + copyright + + + + 600 + + + + faqWindow + + + + 625 + + + + faqText + + + + 630 + + + + DefaultsController + + + + 632 + + + + sliderCell + + + + 640 + + + + syncSliders: + + + + 700 + + + + sync + + + + 703 + + + + updateCheck: + + + + 722 + + + + colorSelector + + + + 725 + + + + changeMenu: + + + + 726 + + + + menuSelect: + + + + 777 + + + + makeKeyAndOrderFront: + + + + 429 + + + + makeKeyAndOrderFront: + + + + 425 + + + + delegate + + + + 702 + + + + value: arrangedObjects.Description + + + + + + value: arrangedObjects.Description + value + arrangedObjects.Description + 2 + + + 508 + + + + maxValue: arrangedObjects.Maxspeed + + + + + + maxValue: arrangedObjects.Maxspeed + maxValue + arrangedObjects.Maxspeed + 2 + + + 513 + + + + minValue: arrangedObjects.Minspeed + + + + + + minValue: arrangedObjects.Minspeed + minValue + arrangedObjects.Minspeed + + 2 + + + 514 + + + + value: arrangedObjects.selspeed + + + + + + value: arrangedObjects.selspeed + value + arrangedObjects.selspeed + + 2 + + + 516 + + + + maxValue: arrangedObjects.Maxspeed + + + + + + maxValue: arrangedObjects.Maxspeed + maxValue + arrangedObjects.Maxspeed + 2 + + + 521 + + + + minValue: arrangedObjects.Minspeed + + + + + + minValue: arrangedObjects.Minspeed + minValue + arrangedObjects.Minspeed + + 2 + + + 522 + + + + value: arrangedObjects.selspeed + + + + + + value: arrangedObjects.selspeed + value + arrangedObjects.selspeed + + NSContinuouslyUpdatesValue + + + + 2 + + + 701 + + + + content: arrangedObjects.Title + + + + + + content: arrangedObjects.Title + content + arrangedObjects.Title + 2 + + + 502 + + + + selectedIndex: selectionIndex + + + + + + selectedIndex: selectionIndex + selectedIndex + selectionIndex + + 2 + + + 503 + + + + enabled: selectionIndex + + + + + + enabled: selectionIndex + enabled + selectionIndex + 2 + + + 549 + + + + value: values.AutomaticChange + + + + + + value: values.AutomaticChange + value + values.AutomaticChange + 2 + + + 559 + + + + content: arrangedObjects.Title + + + + + + content: arrangedObjects.Title + content + arrangedObjects.Title + 2 + + + 569 + + + + enabled: values.AutomaticChange + + + + + + enabled: values.AutomaticChange + enabled + values.AutomaticChange + 2 + + + 577 + + + + selectedIndex: values.selbatt + + + + + + selectedIndex: values.selbatt + selectedIndex + values.selbatt + + 2 + + + 598 + + + + enabled: values.AutomaticChange + + + + + + enabled: values.AutomaticChange + enabled + values.AutomaticChange + 2 + + + 563 + + + + content: arrangedObjects.Title + + + + + + content: arrangedObjects.Title + content + arrangedObjects.Title + 2 + + + 573 + + + + selectedIndex: values.selac + + + + + + selectedIndex: values.selac + selectedIndex + values.selac + + 2 + + + 594 + + + + enabled: values.AutomaticChange + + + + + + enabled: values.AutomaticChange + enabled + values.AutomaticChange + 2 + + + 565 + + + + content: arrangedObjects.Title + + + + + + content: arrangedObjects.Title + content + arrangedObjects.Title + 2 + + + 575 + + + + selectedIndex: values.selload + + + + + + selectedIndex: values.selload + selectedIndex + values.selload + + 2 + + + 596 + + + + value: values.AutoStart + + + + + + value: values.AutoStart + value + values.AutoStart + 2 + + + 567 + + + + contentArray: selection.FanData + + + + + + contentArray: selection.FanData + contentArray + selection.FanData + 2 + + + 507 + + + + selectedTag: values.Unit + + + + + + selectedTag: values.Unit + selectedTag + values.Unit + 2 + + + 587 + + + + selectedIndex: values.MenuBar + + + + + + selectedIndex: values.MenuBar + selectedIndex + values.MenuBar + 2 + + + 615 + + + + makeKeyAndOrderFront: + + + + 626 + + + + value: selection.sync + + + + + + value: selection.sync + value + selection.sync + 2 + + + 715 + + + + value: values.SUCheckAtStartup + + + + + + value: values.SUCheckAtStartup + value + values.SUCheckAtStartup + 2 + + + 709 + + + + value: values.MenuColor + + + + + + value: values.MenuColor + value + values.MenuColor + + NSValueTransformerName + NSUnarchiveFromData + + 2 + + + 719 + + + + value: arrangedObjects.menu + + + + + + value: arrangedObjects.menu + value + arrangedObjects.menu + 2 + + + 776 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 21 + + + + + + Window + + + 2 + + + + + + + + + + + + + + + + + + + 439 + + + + + + + + + + + 440 + + + + + + + + + + + 441 + + + + + + + + 442 + + + + + + + + 639 + + + + + 443 + + + + + + + + 773 + + + + + + + + 774 + + + + + 447 + + + + + + + + 452 + + + + + + + + 453 + + + + + + + + 454 + + + + + + + + 479 + + + + + + + + + + + + + + + + + + + + + 482 + + + + + + + + 483 + + + + + + + + 695 + + + + + + + + 697 + + + + + + + + 698 + + + + + + + + 699 + + + + + + + + 212 + + + FanControl + + + 348 + + + Temperatures + + + 373 + + + + + + GPL License + + + 374 + + + + + + + + 375 + + + + + + + + + + 376 + + + + + 377 + + + + + + About + + + 378 + + + + + + + + + + + + + + + 379 + + + + + + + + 380 + + + + + + + + 381 + + + + + + + + 382 + + + + + + + + 383 + + + + + + + + 384 + + + + + + + + 385 + + + + + + + + 607 + + + + + + + + 394 + + + + + + + + + + + + + Menu (Menu) + + + 396 + + + + + 399 + + + + + 401 + + + + + 405 + + + + + 411 + + + + + 413 + + + + + 418 + + + + + + + + 419 + + + + + + + + + + + + 420 + + + + + 421 + + + + + 422 + + + + + 423 + + + + + 424 + + + + + 436 + + + + + 486 + + + Favorites + + + 492 + + + Fans + + + 524 + + + + + + NewFavorite + + + 525 + + + + + + + + + + + + 526 + + + + + + + + 527 + + + + + + + + 528 + + + + + + + + 529 + + + + + + + + 530 + + + + + + + + 551 + + + Shared Defaults + + + 619 + + + + + + FAQ + + + 620 + + + + + + + + 621 + + + + + + + + + + 622 + + + + + 635 + + + SUUpdater + + + 781 + + + + + + + + 782 + + + + + 783 + + + + + 784 + + + + + 797 + + + + + 798 + + + + + 799 + + + + + 800 + + + + + 801 + + + + + 802 + + + + + 803 + + + + + 804 + + + + + 805 + + + + + 806 + + + + + 807 + + + + + 808 + + + + + 809 + + + + + 810 + + + + + 811 + + + + + 812 + + + + + 813 + + + + + 814 + + + + + 815 + + + + + 817 + + + + + 818 + + + + + + + + 518 + + + + + 448 + + + + + + + + + + 451 + + + + + 450 + + + + + 449 + + + + + 819 + + + + + 820 + + + + + 821 + + + + + 822 + + + + + 823 + + + + + 824 + + + + + 825 + + + + + 455 + + + + + + + + 785 + + + + + 456 + + + + + + + + 786 + + + + + + + + 457 + + + + + + + + + + 458 + + + + + 459 + + + + + 460 + + + + + 461 + + + + + + + + 787 + + + + + + + + 462 + + + + + + + + + + 463 + + + + + 464 + + + + + 465 + + + + + 466 + + + + + + + + 788 + + + + + + + + 467 + + + + + + + + + + 468 + + + + + 469 + + + + + 470 + + + + + 476 + + + + + + + + 789 + + + + + 477 + + + + + + + + 790 + + + + + 478 + + + + + + + + 791 + + + + + 481 + + + + + + + + 792 + + + + + 537 + + + + + + + + 793 + + + + + 538 + + + + + + + + + + 816 + + + + + 543 + + + + + 542 + + + + + 608 + + + + + + + + 794 + + + + + 609 + + + + + + + + 795 + + + + + + + + 610 + + + + + + + + + + + + 611 + + + + + 612 + + + + + 613 + + + + + 616 + + + + + 631 + + + + + 707 + + + + + + + + 796 + + + + + 716 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 825 + + + + + FanControl + NSObject + + id + id + id + id + id + id + id + id + id + id + id + id + id + + + + add_favorite: + id + + + changeMenu: + id + + + closePreferences: + id + + + close_favorite: + id + + + delete_favorite: + id + + + loginItem: + id + + + menuSelect: + id + + + paypal: + id + + + savePreferences: + id + + + save_favorite: + id + + + syncSliders: + id + + + updateCheck: + id + + + visitHomepage: + id + + + + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + NSMenu + + + + DefaultsController + id + + + FanController + id + + + FavoritesController + id + + + TemperatureController + id + + + applybutton + id + + + autochange + id + + + colorSelector + id + + + copyright + id + + + currentSpeed + id + + + currentSpeed1 + id + + + faqText + id + + + faqWindow + id + + + field1 + id + + + field2 + id + + + levelIndicator + id + + + mainwindow + id + + + newfavorite_title + id + + + newfavoritewindow + id + + + programinfo + id + + + slider1 + id + + + slider2 + id + + + sliderCell + id + + + sync + id + + + syncslider + id + + + tabview + id + + + theMenu + NSMenu + + + + IBProjectSource + ./Classes/FanControl.h + + + + SUUpdater + NSObject + + checkForUpdates: + id + + + checkForUpdates: + + checkForUpdates: + id + + + + IBProjectSource + ./Classes/SUUpdater.h + + + + StatusItemWindow + NSWindow + + IBProjectSource + ./Classes/StatusItemWindow.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + YES + 3 + + {11, 11} + {10, 3} + {16, 15} + {15, 15} + {62, 31} + {128, 128} + + + diff --git a/Ressources/Spanish.lproj/MainMenu.nib/keyedobjects.nib b/Ressources/Spanish.lproj/MainMenu.nib/keyedobjects.nib new file mode 100644 index 0000000..db7e8d5 Binary files /dev/null and b/Ressources/Spanish.lproj/MainMenu.nib/keyedobjects.nib differ diff --git a/Ressources/paypal.gif b/Ressources/paypal.gif new file mode 100644 index 0000000..2ca03ea Binary files /dev/null and b/Ressources/paypal.gif differ diff --git a/Ressources/smc.png b/Ressources/smc.png new file mode 100644 index 0000000..85f957e Binary files /dev/null and b/Ressources/smc.png differ diff --git a/Ressources/smcfancontrol_v2.icns b/Ressources/smcfancontrol_v2.icns new file mode 100644 index 0000000..0266c41 Binary files /dev/null and b/Ressources/smcfancontrol_v2.icns differ diff --git a/Ressources/smcover.png b/Ressources/smcover.png new file mode 100644 index 0000000..f6df454 Binary files /dev/null and b/Ressources/smcover.png differ diff --git a/Ressources/tsensors.plist b/Ressources/tsensors.plist new file mode 100644 index 0000000..f9348d4 --- /dev/null +++ b/Ressources/tsensors.plist @@ -0,0 +1,16 @@ + + + + + standard + TC0D + lastAlternative + TCAH + MacBookPro10,1 + TC0F + iMac12,2 + TC0H + iMac12,1 + TC0H + + diff --git a/Sparkle.framework/Headers b/Sparkle.framework/Headers new file mode 120000 index 0000000..a177d2a --- /dev/null +++ b/Sparkle.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/Sparkle.framework/Resources b/Sparkle.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/Sparkle.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/Sparkle.framework/Sparkle b/Sparkle.framework/Sparkle new file mode 120000 index 0000000..b2c5273 --- /dev/null +++ b/Sparkle.framework/Sparkle @@ -0,0 +1 @@ +Versions/Current/Sparkle \ No newline at end of file diff --git a/Sparkle.framework/Versions/A/Headers/NSApplication+AppCopies.h b/Sparkle.framework/Versions/A/Headers/NSApplication+AppCopies.h new file mode 100644 index 0000000..ee901e6 --- /dev/null +++ b/Sparkle.framework/Versions/A/Headers/NSApplication+AppCopies.h @@ -0,0 +1,13 @@ +// +// NSApplication+AppCopies.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +@interface NSApplication (SUAppCopies) +- (int)copiesRunning; +@end diff --git a/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h b/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h new file mode 100644 index 0000000..c995911 --- /dev/null +++ b/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h @@ -0,0 +1,11 @@ +// +// NSFileManager+Authentication.m +// Sparkle +// +// Created by Andy Matuschak on 3/9/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +@interface NSFileManager (SUAuthenticationAdditions) +- (BOOL)movePathWithAuthentication:(NSString *)src toPath:(NSString *)dst; +@end diff --git a/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h b/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h new file mode 100644 index 0000000..f0ce7c2 --- /dev/null +++ b/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h @@ -0,0 +1,15 @@ +// +// NSFileManager+Verification.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +// For the paranoid folks! +@interface NSFileManager (SUVerification) +- (BOOL)validatePath:(NSString *)path withMD5Hash:(NSString *)hash; +- (BOOL)validatePath:(NSString *)path withEncodedDSASignature:(NSString *)encodedSignature; +@end diff --git a/Sparkle.framework/Versions/A/Headers/NSString+extras.h b/Sparkle.framework/Versions/A/Headers/NSString+extras.h new file mode 100755 index 0000000..498e4d0 --- /dev/null +++ b/Sparkle.framework/Versions/A/Headers/NSString+extras.h @@ -0,0 +1,61 @@ +/* + +BSD License + +Copyright (c) 2002, Brent Simmons +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of ranchero.com or Brent Simmons nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +*/ + + +/* + NSString+extras.h + NetNewsWire + + Created by Brent Simmons on Fri Jun 14 2002. + Copyright (c) 2002 Brent Simmons. All rights reserved. +*/ + + +#import +#import + + +@interface NSString (extras) + +- (NSString *)stringWithSubstitute:(NSString *)subs forCharactersFromSet:(NSCharacterSet *)set; + +- (NSString *) trimWhiteSpace; + +- (NSString *) stripHTML; + +- (NSString *) ellipsizeAfterNWords: (int) n; + ++ (BOOL) stringIsEmpty: (NSString *) s; + + +@end diff --git a/Sparkle.framework/Versions/A/Headers/RSS.h b/Sparkle.framework/Versions/A/Headers/RSS.h new file mode 100755 index 0000000..82da04a --- /dev/null +++ b/Sparkle.framework/Versions/A/Headers/RSS.h @@ -0,0 +1,98 @@ +/* + +BSD License + +Copyright (c) 2002, Brent Simmons +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of ranchero.com or Brent Simmons nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +*/ + +/* + RSS.h + A class for reading RSS feeds. + + Created by Brent Simmons on Wed Apr 17 2002. + Copyright (c) 2002 Brent Simmons. All rights reserved. +*/ + + +#import +#import +#import "NSString+extras.h" + + +@interface RSS : NSObject { + + NSDictionary *headerItems; + NSMutableArray *newsItems; + NSString *version; + + BOOL flRdf; + BOOL normalize; + } + + +/*Public*/ + +- (RSS *) initWithTitle: (NSString *) title andDescription: (NSString *) description; + +- (RSS *) initWithData: (NSData *) rssData normalize: (BOOL) fl; + +- (RSS *) initWithURL: (NSURL *) url normalize: (BOOL) fl; +- (RSS *) initWithURL: (NSURL *) url normalize: (BOOL) fl userAgent:(NSString *)userAgent; + +- (NSDictionary *) headerItems; + +- (NSMutableArray *) newsItems; + +- (NSString *) version; + +// AMM's extensions for Sparkle +- (NSDictionary *)newestItem; + + +/*Private*/ + +- (void) createheaderdictionary: (CFXMLTreeRef) tree; + +- (void) createitemsarray: (CFXMLTreeRef) tree; + +- (void) setversionstring: (CFXMLTreeRef) tree; + +- (void) flattenimagechildren: (CFXMLTreeRef) tree into: (NSMutableDictionary *) dictionary; + +- (void) flattensourceattributes: (CFXMLNodeRef) node into: (NSMutableDictionary *) dictionary; + +- (CFXMLTreeRef) getchanneltree: (CFXMLTreeRef) tree; + +- (CFXMLTreeRef) getnamedtree: (CFXMLTreeRef) currentTree name: (NSString *) name; + +- (void) normalizeRSSItem: (NSMutableDictionary *) rssItem; + +- (NSString *) getelementvalue: (CFXMLTreeRef) tree; + +@end diff --git a/Sparkle.framework/Versions/A/Headers/SUAppcast.h b/Sparkle.framework/Versions/A/Headers/SUAppcast.h new file mode 100644 index 0000000..209fe20 --- /dev/null +++ b/Sparkle.framework/Versions/A/Headers/SUAppcast.h @@ -0,0 +1,27 @@ +// +// SUAppcast.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +@class RSS, SUAppcastItem; +@interface SUAppcast : NSObject { + NSArray *items; + id delegate; +} + +- (void)fetchAppcastFromURL:(NSURL *)url; +- (void)setDelegate:delegate; + +- (SUAppcastItem *)newestItem; +- (NSArray *)items; + +@end + +@interface NSObject (SUAppcastDelegate) +- appcastDidFinishLoading:(SUAppcast *)appcast; +@end \ No newline at end of file diff --git a/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h b/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h new file mode 100644 index 0000000..c0202e3 --- /dev/null +++ b/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h @@ -0,0 +1,57 @@ +// +// SUAppcastItem.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + + +@interface SUAppcastItem : NSObject { + NSString *title; + NSDate *date; + NSString *description; + + NSURL *releaseNotesURL; + + NSString *DSASignature; + NSString *MD5Sum; + + NSURL *fileURL; + NSString *fileVersion; + NSString *versionString; +} + +// Initializes with data from a dictionary provided by the RSS class. +- initWithDictionary:(NSDictionary *)dict; + +- (NSString *)title; +- (void)setTitle:(NSString *)aTitle; + +- (NSDate *)date; +- (void)setDate:(NSDate *)aDate; + +- (NSString *)description; +- (void)setDescription:(NSString *)aDescription; + +- (NSURL *)releaseNotesURL; +- (void)setReleaseNotesURL:(NSURL *)aReleaseNotesURL; + +- (NSString *)DSASignature; +- (void)setDSASignature:(NSString *)aDSASignature; + +- (NSString *)MD5Sum; +- (void)setMD5Sum:(NSString *)aMd5Sum; + +- (NSURL *)fileURL; +- (void)setFileURL:(NSURL *)aFileURL; + +- (NSString *)fileVersion; +- (void)setFileVersion:(NSString *)aFileVersion; + +- (NSString *)versionString; +- (void)setVersionString:(NSString *)versionString; + +@end diff --git a/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h b/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h new file mode 100644 index 0000000..fc0ac9f --- /dev/null +++ b/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h @@ -0,0 +1,21 @@ +// +// SUAutomaticUpdateAlert.h +// Sparkle +// +// Created by Andy Matuschak on 3/18/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +@class SUAppcastItem; +@interface SUAutomaticUpdateAlert : NSWindowController { + SUAppcastItem *updateItem; +} + +- initWithAppcastItem:(SUAppcastItem *)item; + +- (IBAction)relaunchNow:sender; +- (IBAction)relaunchLater:sender; + +@end diff --git a/Sparkle.framework/Versions/A/Headers/SUConstants.h b/Sparkle.framework/Versions/A/Headers/SUConstants.h new file mode 100644 index 0000000..bfbe625 --- /dev/null +++ b/Sparkle.framework/Versions/A/Headers/SUConstants.h @@ -0,0 +1,20 @@ +// +// SUConstants.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +extern NSString *SUUpdaterWillRestartNotification; + +extern NSString *SUCheckAtStartupKey; +extern NSString *SUFeedURLKey; +extern NSString *SUShowReleaseNotesKey; +extern NSString *SUSkippedVersionKey; +extern NSString *SUScheduledCheckIntervalKey; +extern NSString *SULastCheckTimeKey; +extern NSString *SUExpectsDSASignatureKey; +extern NSString *SUPublicDSAKeyKey; +extern NSString *SUAutomaticallyUpdateKey; +extern NSString *SUAllowsAutomaticUpdatesKey; \ No newline at end of file diff --git a/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h b/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h new file mode 100644 index 0000000..e83d152 --- /dev/null +++ b/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h @@ -0,0 +1,26 @@ +// +// SUStatusChecker.h +// Sparkle +// +// Created by Evan Schoenberg on 7/6/06. +// + +#import +#import + +@class SUStatusChecker; + +@protocol SUStatusCheckerDelegate +//versionString will be nil and isNewVersion will be NO if version checking fails. +- (void)statusChecker:(SUStatusChecker *)statusChecker foundVersion:(NSString *)versionString isNewVersion:(BOOL)isNewVersion; +@end + +@interface SUStatusChecker : SUUpdater { + id scDelegate; +} + +// Create a status checker which will notifiy delegate once the appcast version is determined. +// Notification occurs via the method defined in the SUStatusCheckerDelegate informal protocol. ++ (SUStatusChecker *)statusCheckerForDelegate:(id)delegate; + +@end diff --git a/Sparkle.framework/Versions/A/Headers/SUStatusController.h b/Sparkle.framework/Versions/A/Headers/SUStatusController.h new file mode 100644 index 0000000..19a3f89 --- /dev/null +++ b/Sparkle.framework/Versions/A/Headers/SUStatusController.h @@ -0,0 +1,33 @@ +// +// SUStatusController.h +// Sparkle +// +// Created by Andy Matuschak on 3/14/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + + +@interface SUStatusController : NSWindowController { + double progressValue, maxProgressValue; + NSString *title, *statusText, *buttonTitle; + IBOutlet NSButton *actionButton; +} + +// Pass 0 for the max progress value to get an indeterminate progress bar. +// Pass nil for the status text to not show it. +- (void)beginActionWithTitle:(NSString *)title maxProgressValue:(double)maxProgressValue statusText:(NSString *)statusText; + +// If isDefault is YES, the button's key equivalent will be \r. +- (void)setButtonTitle:(NSString *)buttonTitle target:target action:(SEL)action isDefault:(BOOL)isDefault; +- (void)setButtonEnabled:(BOOL)enabled; + +- (double)progressValue; +- (void)setProgressValue:(double)value; +- (double)maxProgressValue; +- (void)setMaxProgressValue:(double)value; + +- (void)setStatusText:(NSString *)statusText; + +@end diff --git a/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h b/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h new file mode 100644 index 0000000..da111c1 --- /dev/null +++ b/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h @@ -0,0 +1,25 @@ +// +// SUUnarchiver.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + + +@interface SUUnarchiver : NSObject { + id delegate; +} + +- (void)unarchivePath:(NSString *)path; +- (void)setDelegate:delegate; + +@end + +@interface NSObject (SUUnarchiverDelegate) +- (void)unarchiver:(SUUnarchiver *)unarchiver extractedLength:(long)length; +- (void)unarchiverDidFinish:(SUUnarchiver *)unarchiver; +- (void)unarchiverDidFail:(SUUnarchiver *)unarchiver; +@end \ No newline at end of file diff --git a/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h b/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h new file mode 100644 index 0000000..69c2817 --- /dev/null +++ b/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h @@ -0,0 +1,40 @@ +// +// SUUpdateAlert.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +typedef enum +{ + SUInstallUpdateChoice, + SURemindMeLaterChoice, + SUSkipThisVersionChoice +} SUUpdateAlertChoice; + +@class WebView, SUAppcastItem; +@interface SUUpdateAlert : NSWindowController { + SUAppcastItem *updateItem; + id delegate; + + IBOutlet WebView *releaseNotesView; + IBOutlet NSTextField *description; + NSProgressIndicator *releaseNotesSpinner; + BOOL webViewFinishedLoading; +} + +- initWithAppcastItem:(SUAppcastItem *)item; +- (void)setDelegate:delegate; + +- (IBAction)installUpdate:sender; +- (IBAction)skipThisVersion:sender; +- (IBAction)remindMeLater:sender; + +@end + +@interface NSObject (SUUpdateAlertDelegate) +- (void)updateAlert:(SUUpdateAlert *)updateAlert finishedWithChoice:(SUUpdateAlertChoice)updateChoice; +@end diff --git a/Sparkle.framework/Versions/A/Headers/SUUpdater.h b/Sparkle.framework/Versions/A/Headers/SUUpdater.h new file mode 100644 index 0000000..5f82914 --- /dev/null +++ b/Sparkle.framework/Versions/A/Headers/SUUpdater.h @@ -0,0 +1,55 @@ +// +// SUUpdater.h +// Sparkle +// +// Created by Andy Matuschak on 1/4/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +// Before you use Sparkle in your app, you must set SUFeedURL in Info.plist to the +// address of the appcast on your webserver. If you don't already have an +// appcast, please see the Sparkle documentation to learn about how to set one up. + +// .zip, .dmg, .tar, .tbz, .tgz archives are supported at this time. + +// By default, Sparkle offers to show the user the release notes of the build they'll be +// getting, which it assumes are in the description (or body) field of the relevant RSS item. +// Set SUShowReleaseNotes to in Info.plist to hide the button. + +@class SUAppcastItem, SUUpdateAlert, SUStatusController; +@interface SUUpdater : NSObject { + SUAppcastItem *updateItem; + + SUStatusController *statusController; + SUUpdateAlert *updateAlert; + + NSURLDownload *downloader; + NSString *downloadPath; + + NSTimer *checkTimer; + NSTimeInterval checkInterval; + + BOOL verbose; + BOOL updateInProgress; +} + +// This IBAction is meant for a main menu item. Hook up any menu item to this action, +// and Sparkle will check for updates and report back its findings verbosely. +- (IBAction)checkForUpdates:sender; + +// This method is similar to the above, but it's intended for updates initiated by +// the computer instead of by the user. It does not alert the user when he is up to date, +// and it remains silent about network errors in fetching the feed. This is what you +// want to call to update programmatically; only use checkForUpdates: with buttons and menu items. +- (void)checkForUpdatesInBackground; + +// This method allows you to schedule a check to run every time interval. You can +// pass 0 to this method to cancel a previously scheduled timer. You probably don't want +// to call this directly: if you set a SUScheduledCheckInterval key in Info.plist or +// the user defaults, Sparkle will set this up for you automatically on startup. You might +// just want to call this every time the user changes the setting in the preferences. +- (void)scheduleCheckWithInterval:(NSTimeInterval)interval; + +@end \ No newline at end of file diff --git a/Sparkle.framework/Versions/A/Headers/SUUtilities.h b/Sparkle.framework/Versions/A/Headers/SUUtilities.h new file mode 100644 index 0000000..5af3550 --- /dev/null +++ b/Sparkle.framework/Versions/A/Headers/SUUtilities.h @@ -0,0 +1,20 @@ +// +// SUUtilities.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +id SUInfoValueForKey(NSString *key); +NSString *SUHostAppName(); +NSString *SUHostAppDisplayName(); +NSString *SUHostAppVersion(); +NSString *SUHostAppVersionString(); + +NSComparisonResult SUStandardVersionComparison(NSString * versionA, NSString * versionB); + +// If running make localizable-strings for genstrings, ignore the error on this line. +NSString *SULocalizedString(NSString *key, NSString *comment); diff --git a/Sparkle.framework/Versions/A/Headers/Sparkle.h b/Sparkle.framework/Versions/A/Headers/Sparkle.h new file mode 100644 index 0000000..13e9b21 --- /dev/null +++ b/Sparkle.framework/Versions/A/Headers/Sparkle.h @@ -0,0 +1,22 @@ +// +// Sparkle.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import "SUUpdater.h" +#import "SUUtilities.h" +#import "SUConstants.h" +#import "SUAppcast.h" +#import "SUAppcastItem.h" +#import "SUUpdateAlert.h" +#import "SUAutomaticUpdateAlert.h" +#import "SUStatusController.h" +#import "SUUnarchiver.h" +#import "SUStatusChecker.h" + +#import "NSApplication+AppCopies.h" +#import "NSFileManager+Authentication.h" +#import "NSFileManager+Verification.h" \ No newline at end of file diff --git a/Sparkle.framework/Versions/A/Resources/Info.plist b/Sparkle.framework/Versions/A/Resources/Info.plist new file mode 100644 index 0000000..82cd009 --- /dev/null +++ b/Sparkle.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,38 @@ + + + + + BuildMachineOSBuild + 12A269 + CFBundleDevelopmentRegion + English + CFBundleExecutable + Sparkle + CFBundleIdentifier + org.andymatuschak.Sparkle + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Sparkle + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + 1.1 + DTCompiler + com.apple.compilers.llvmgcc42 + DTPlatformBuild + 4F1003 + DTPlatformVersion + GM + DTSDKBuild + 9L31a + DTSDKName + macosx10.5 + DTXcode + 0441 + DTXcodeBuild + 4F1003 + + diff --git a/Sparkle.framework/Versions/A/Resources/SUStatus.nib b/Sparkle.framework/Versions/A/Resources/SUStatus.nib new file mode 100644 index 0000000..378b22f Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/SUStatus.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..15daf30 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..17f2f3d Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings new file mode 100644 index 0000000..0d2ad7b Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..ac43a0c Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..2084963 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings new file mode 100644 index 0000000..2246bc4 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b619eb4 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..81c59b7 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/cy.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/cy.lproj/Sparkle.strings new file mode 100644 index 0000000..a4bc70c Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/cy.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..d371ff2 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..d51f9ad Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings new file mode 100644 index 0000000..0142767 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..0808fc6 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..aeec008 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings new file mode 100644 index 0000000..9c95065 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..c4201cf Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..be3dbd9 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings new file mode 100644 index 0000000..e03fad7 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b619eb4 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..236c082 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings new file mode 100644 index 0000000..a4bc70c Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..e7f6143 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..ac21bcb Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings new file mode 100644 index 0000000..a343002 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..552a5bd Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..0cd65e6 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings new file mode 100644 index 0000000..311ed9a Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..e4c7ba0 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..af7bfbb Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings new file mode 100644 index 0000000..d557afb Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b619eb4 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..4fbd2d6 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/hu.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/hu.lproj/Sparkle.strings new file mode 100644 index 0000000..a4bc70c Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/hu.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b619eb4 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..c815112 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/id.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/id.lproj/Sparkle.strings new file mode 100644 index 0000000..a4bc70c Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/id.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b619eb4 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..44b9da5 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings new file mode 100644 index 0000000..360cc86 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..53fa5b3 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..0e8d6a6 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings new file mode 100644 index 0000000..17897a4 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..d317046 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..00b088d Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings new file mode 100644 index 0000000..b06220b Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b619eb4 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..aeb4628 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings new file mode 100644 index 0000000..a4bc70c Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b619eb4 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..26b2e8a Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings new file mode 100644 index 0000000..a4bc70c Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b619eb4 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..36947a7 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/no.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/no.lproj/Sparkle.strings new file mode 100644 index 0000000..91b1892 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/no.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..6da4ab1 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..dc2fbf3 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings new file mode 100644 index 0000000..4dc80fd Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b619eb4 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..b2f8b50 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings new file mode 100644 index 0000000..557cbdd Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..7a79f4d Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..13cdb31 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings new file mode 100644 index 0000000..acf1c4c Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b619eb4 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..c4116cc Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings new file mode 100644 index 0000000..57e9233 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b619eb4 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..2b1c6e3 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings new file mode 100644 index 0000000..a4bc70c Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..6e20460 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..4f31fd7 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings new file mode 100644 index 0000000..d55194e Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..f165c1a Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..0d56dd1 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings new file mode 100644 index 0000000..0923051 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b619eb4 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib b/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..9be9428 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib differ diff --git a/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings b/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings new file mode 100644 index 0000000..a548680 Binary files /dev/null and b/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings differ diff --git a/Sparkle.framework/Versions/A/Sparkle b/Sparkle.framework/Versions/A/Sparkle new file mode 100755 index 0000000..c37ca00 Binary files /dev/null and b/Sparkle.framework/Versions/A/Sparkle differ diff --git a/Sparkle.framework/Versions/A/_CodeSignature/CodeResources b/Sparkle.framework/Versions/A/_CodeSignature/CodeResources new file mode 100644 index 0000000..bef0ba5 --- /dev/null +++ b/Sparkle.framework/Versions/A/_CodeSignature/CodeResources @@ -0,0 +1,740 @@ + + + + + files + + Resources/Info.plist + + rXjTVsZpOl98U+gMINZ2ovIlBOA= + + Resources/SUStatus.nib + + PMQ+F2t+VY+WWds3qmITXHCHZmQ= + + Resources/ca.lproj/SUAutomaticUpdateAlert.nib + + hash + + bng7kzd985AXrjeNNbHgMp3bJcA= + + optional + + + Resources/ca.lproj/SUUpdateAlert.nib + + hash + + yaKR1u/XIxrIlKnf3gbXa5WEdqU= + + optional + + + Resources/ca.lproj/Sparkle.strings + + hash + + Zt1kgAjDoAyvHZrhbl/9gBncHdo= + + optional + + + Resources/cs.lproj/SUAutomaticUpdateAlert.nib + + hash + + O54u6UTAf7OK9CeqIDr+bNCfTC0= + + optional + + + Resources/cs.lproj/SUUpdateAlert.nib + + hash + + OnlWIGM/M9U3rQ3ojiwUjK59o3c= + + optional + + + Resources/cs.lproj/Sparkle.strings + + hash + + u+0SN9FQMDgI0l2HErDv75HaijU= + + optional + + + Resources/cy.lproj/SUAutomaticUpdateAlert.nib + + hash + + aZeuSlOBvhgBP88jMCvqBMrBx1c= + + optional + + + Resources/cy.lproj/SUUpdateAlert.nib + + hash + + m8k+PTiWeufJFK45/xxsSvp8GKU= + + optional + + + Resources/cy.lproj/Sparkle.strings + + hash + + Z2C52pKivAcv7TODPbszIEWk4bE= + + optional + + + Resources/da.lproj/SUAutomaticUpdateAlert.nib + + hash + + 7vHWzBtmLfirqepvUUKTC7NFWe8= + + optional + + + Resources/da.lproj/SUUpdateAlert.nib + + hash + + DHfrjNStmSTwKB9gBlEtWN7BdQQ= + + optional + + + Resources/da.lproj/Sparkle.strings + + hash + + rnBzgseeGaayGYxQfiohw5WiA9g= + + optional + + + Resources/de.lproj/SUAutomaticUpdateAlert.nib + + hash + + stKrxHTKemn9IhiNLhf9OUe496s= + + optional + + + Resources/de.lproj/SUUpdateAlert.nib + + hash + + 6wG85SPcSfnvBZkgkrLJifjHF2k= + + optional + + + Resources/de.lproj/Sparkle.strings + + hash + + IBkV6dwh7AlVseo2f2UCQnaskQI= + + optional + + + Resources/en.lproj/SUAutomaticUpdateAlert.nib + + hash + + KJcUzIpBfFLXj474CqG1plEfRa0= + + optional + + + Resources/en.lproj/SUUpdateAlert.nib + + hash + + TFT+gcPw29AqPeiwUwO422ruvss= + + optional + + + Resources/en.lproj/Sparkle.strings + + hash + + sjxHQgF4p53nQeTuUGNF24VltA8= + + optional + + + Resources/es.lproj/SUAutomaticUpdateAlert.nib + + hash + + aZeuSlOBvhgBP88jMCvqBMrBx1c= + + optional + + + Resources/es.lproj/SUUpdateAlert.nib + + hash + + nigT7+0TXQC6EmzwPx+EY2PFqZ8= + + optional + + + Resources/es.lproj/Sparkle.strings + + hash + + Z2C52pKivAcv7TODPbszIEWk4bE= + + optional + + + Resources/fi.lproj/SUAutomaticUpdateAlert.nib + + hash + + ynw5nxdaaijE0JTYbN3D2nGMdeU= + + optional + + + Resources/fi.lproj/SUUpdateAlert.nib + + hash + + MGg5zHGYHawh5vy5ApMa+ky+S7E= + + optional + + + Resources/fi.lproj/Sparkle.strings + + hash + + eknfYMQ3+PNfTcHgHHw4YQNCxkg= + + optional + + + Resources/fr.lproj/SUAutomaticUpdateAlert.nib + + hash + + 0d54VXPJZ3bTE0fPDf3HSBC8vxA= + + optional + + + Resources/fr.lproj/SUUpdateAlert.nib + + hash + + 8u70la7PgihhXeIiklBloXxxOKQ= + + optional + + + Resources/fr.lproj/Sparkle.strings + + hash + + ddZGUwbZ4M5HzHckPlfuT3X4jUs= + + optional + + + Resources/he.lproj/SUAutomaticUpdateAlert.nib + + hash + + X5IxNLmD8LRDQvGXYyFTSkaqlUI= + + optional + + + Resources/he.lproj/SUUpdateAlert.nib + + hash + + +gLuyfbVEEiSJtmeIufWRBVeLRQ= + + optional + + + Resources/he.lproj/Sparkle.strings + + hash + + QhsUgpSK0LmE1p5Egt7rEEDFzBs= + + optional + + + Resources/hu.lproj/SUAutomaticUpdateAlert.nib + + hash + + aZeuSlOBvhgBP88jMCvqBMrBx1c= + + optional + + + Resources/hu.lproj/SUUpdateAlert.nib + + hash + + niLSNOpZDKYjgQhRSQrgACpRpwg= + + optional + + + Resources/hu.lproj/Sparkle.strings + + hash + + Z2C52pKivAcv7TODPbszIEWk4bE= + + optional + + + Resources/id.lproj/SUAutomaticUpdateAlert.nib + + hash + + aZeuSlOBvhgBP88jMCvqBMrBx1c= + + optional + + + Resources/id.lproj/SUUpdateAlert.nib + + hash + + Qu0+CwIAwPo+WykyWBI6ykNtX6c= + + optional + + + Resources/id.lproj/Sparkle.strings + + hash + + Z2C52pKivAcv7TODPbszIEWk4bE= + + optional + + + Resources/is.lproj/SUAutomaticUpdateAlert.nib + + hash + + aZeuSlOBvhgBP88jMCvqBMrBx1c= + + optional + + + Resources/is.lproj/SUUpdateAlert.nib + + hash + + Kk7gn4Uexj6dATTCIVldElbbxAI= + + optional + + + Resources/is.lproj/Sparkle.strings + + hash + + x2u0qBgmjpl4f6JxARVOcxCbjMs= + + optional + + + Resources/it.lproj/SUAutomaticUpdateAlert.nib + + hash + + 7cx7KzQRJS1weZFMJpW4+6UxBT0= + + optional + + + Resources/it.lproj/SUUpdateAlert.nib + + hash + + 9BdiachxoYbIXvYI6eIdYR+YSrw= + + optional + + + Resources/it.lproj/Sparkle.strings + + hash + + oIilNd5r5lsB9AyFrhIzwGKIOVE= + + optional + + + Resources/ja.lproj/SUAutomaticUpdateAlert.nib + + hash + + mPNqghcUUlQtsQyzp4PZL8tppnU= + + optional + + + Resources/ja.lproj/SUUpdateAlert.nib + + hash + + C9B1IOasDum/hcjn5Ivt++0Tj/Q= + + optional + + + Resources/ja.lproj/Sparkle.strings + + hash + + XFo3M2UlsXVrnqbgQUu5XTUnu5w= + + optional + + + Resources/ko.lproj/SUAutomaticUpdateAlert.nib + + hash + + aZeuSlOBvhgBP88jMCvqBMrBx1c= + + optional + + + Resources/ko.lproj/SUUpdateAlert.nib + + hash + + +MYtI+1TsO8iSo5MvxXSFz+Wn9U= + + optional + + + Resources/ko.lproj/Sparkle.strings + + hash + + Z2C52pKivAcv7TODPbszIEWk4bE= + + optional + + + Resources/nl.lproj/SUAutomaticUpdateAlert.nib + + hash + + aZeuSlOBvhgBP88jMCvqBMrBx1c= + + optional + + + Resources/nl.lproj/SUUpdateAlert.nib + + hash + + uV8BfH45MCWCPx2Nd6yHxkmPNBs= + + optional + + + Resources/nl.lproj/Sparkle.strings + + hash + + Z2C52pKivAcv7TODPbszIEWk4bE= + + optional + + + Resources/no.lproj/SUAutomaticUpdateAlert.nib + + hash + + aZeuSlOBvhgBP88jMCvqBMrBx1c= + + optional + + + Resources/no.lproj/SUUpdateAlert.nib + + hash + + YuRm0tXJAbzFDiD5TY8FYO59p7w= + + optional + + + Resources/no.lproj/Sparkle.strings + + hash + + 7biydCAYrIS5nucSFDDRRwkFWyI= + + optional + + + Resources/pl.lproj/SUAutomaticUpdateAlert.nib + + hash + + /F1jK/PTzQmkkBtusg6tVoQU8lQ= + + optional + + + Resources/pl.lproj/SUUpdateAlert.nib + + hash + + l/7saxW4s7EtcxAmU/kUdTl+r8g= + + optional + + + Resources/pl.lproj/Sparkle.strings + + hash + + LdPLgc98aKLgaYEq4CVLcoU2quQ= + + optional + + + Resources/ru.lproj/SUAutomaticUpdateAlert.nib + + hash + + aZeuSlOBvhgBP88jMCvqBMrBx1c= + + optional + + + Resources/ru.lproj/SUUpdateAlert.nib + + hash + + quQSeGScwlB5LAKhxu3HiDgFOCY= + + optional + + + Resources/ru.lproj/Sparkle.strings + + hash + + eAG8eJRow5dvx38YhCJewgx3brM= + + optional + + + Resources/sk.lproj/SUAutomaticUpdateAlert.nib + + hash + + 0k+kTyoLVAeJH7gYjMFFhW7M2/c= + + optional + + + Resources/sk.lproj/SUUpdateAlert.nib + + hash + + iWM3lj++kzYK9A09cdrHgqczHbU= + + optional + + + Resources/sk.lproj/Sparkle.strings + + hash + + 0xnHfE5ETDfVMV/xZAXplz+f03M= + + optional + + + Resources/sv.lproj/SUAutomaticUpdateAlert.nib + + hash + + aZeuSlOBvhgBP88jMCvqBMrBx1c= + + optional + + + Resources/sv.lproj/SUUpdateAlert.nib + + hash + + 0vCZj0sdHqp+OJEf1FoIEXnveC8= + + optional + + + Resources/sv.lproj/Sparkle.strings + + hash + + CEsV4Nj2kH5iAYcugwXhR6iHtrI= + + optional + + + Resources/th.lproj/SUAutomaticUpdateAlert.nib + + hash + + aZeuSlOBvhgBP88jMCvqBMrBx1c= + + optional + + + Resources/th.lproj/SUUpdateAlert.nib + + hash + + XwzSXmuSLYok5duqBS0IxppKwx0= + + optional + + + Resources/th.lproj/Sparkle.strings + + hash + + Z2C52pKivAcv7TODPbszIEWk4bE= + + optional + + + Resources/tr.lproj/SUAutomaticUpdateAlert.nib + + hash + + o8EEoDtAp6jXh7mXqLx0FJZYU14= + + optional + + + Resources/tr.lproj/SUUpdateAlert.nib + + hash + + TuQsW4TxTBUt6eda0aDQsjI4b6A= + + optional + + + Resources/tr.lproj/Sparkle.strings + + hash + + 78jmMLiNoBU4BQI8C4xQ4iP7klM= + + optional + + + Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib + + hash + + s1hQkcSWvNA1WJkb/JkN1Vq58yk= + + optional + + + Resources/zh_CN.lproj/SUUpdateAlert.nib + + hash + + pi+VzfSyAJFfv7Y9lbCYDGek5jM= + + optional + + + Resources/zh_CN.lproj/Sparkle.strings + + hash + + MALIO9OslZfUEe5OoQSygmvkjz8= + + optional + + + Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib + + hash + + aZeuSlOBvhgBP88jMCvqBMrBx1c= + + optional + + + Resources/zh_TW.lproj/SUUpdateAlert.nib + + hash + + gujgpWRdQaNR8AK4ZoXDG2J6OgA= + + optional + + + Resources/zh_TW.lproj/Sparkle.strings + + hash + + NkxQSvfv8Jd0iOSfFRsmuAVwzeo= + + optional + + + + rules + + ^Resources/ + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^version.plist$ + + + + diff --git a/Sparkle.framework/Versions/Current b/Sparkle.framework/Versions/Current new file mode 120000 index 0000000..8c7e5a6 --- /dev/null +++ b/Sparkle.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/main.m b/main.m new file mode 100644 index 0000000..f7899c8 --- /dev/null +++ b/main.m @@ -0,0 +1,31 @@ +/* + * FanControl + * + * Copyright (c) 2006 Hendrik Holtmann +* + * main.m - MacBook(Pro) FanControl application + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#import +#include "smc.h" + + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **) argv); + +} diff --git a/smc-command/LICENSE b/smc-command/LICENSE new file mode 100644 index 0000000..d511905 --- /dev/null +++ b/smc-command/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/smc-command/Makefile b/smc-command/Makefile new file mode 100644 index 0000000..c78db24 --- /dev/null +++ b/smc-command/Makefile @@ -0,0 +1,13 @@ +CC = gcc +CFLAGS = -mmacosx-version-min=10.4 -Wall -g -framework IOKit + +all: smc + +smc: smc.o + $(CC) $(CFLAGS) -o smc smc.o + +smc.o: smc.h smc.c + $(CC) -c smc.c + +clean: + -rm -f smc smc.o diff --git a/smc-command/README b/smc-command/README new file mode 100644 index 0000000..dd5a830 --- /dev/null +++ b/smc-command/README @@ -0,0 +1,95 @@ +Warning +------- +This tool will allow you to write values to the SMC which could irreversably damage your +computer. Manipulating the fans could cause overheating and permanent damange. USE THIS +PROGRAM AT YOUR OWN RISK! + +Background +---------- +I created this program because I was unhappy with my MacBook Pro running so hot and it +annoyed me that Apple didn't make any way for end users to set fan preferences. + +This program will allow you to read and write values to the SMC using the AppleSMC kernel +extension. The purpose of this is to show how to talk to the controller. I've made no +effort to make it user friendly, however I'm releasing this in hopes that someone will +take the next logical step and make a nice *free* GUI. I think it's absurd that some +people are trying to charge for simple programs to manipulate this type of data. + +In my testing I've been able to lower the average system temperature by 15C just +by running the fans at a low speed like 3500 RPM, which you can barely hear. + +Usage +------ +# smc -h + +Apple System Management Control (SMC) tool 0.01 +Usage: +./smc [options] + -f : fan info decoded + -h : help + -k : key to manipulate + -l : list all keys and values + -r : read the value of a key + -w : write the specified value to a key + -v : version + +Fan control +----------- +To decode: +# smc -f + +To manually query and control: +FNum - tells you how many fans are in the system + +To read data from each fan: +F0Ac - Fan actual speed +F0Mn - Fan minimum speed +F0Mx - Fan maximum speed +F0Sf - Fan safe speed +F0Tg - Fan target speed +FS! - See if fans are in automatic or forced mode + +[Replace 0 with fan #. In the MacBook Pro there two fans so this applies for 0 (left) + and 1 (right).] + +To set a fan to a specific speed: +FS! - Sets "force mode" to fan. Bit 0 (right to left) is fan 0, bit 1 + is fan 1, etc +F0Tg - Sets target speed, make sure you fp78 encode it (left shift by 2) + +For example, to force both fans to 3500 RPM: +# python -c "print hex(3500 << 2)" +0x36b0 +# smc -k "FS! " -w 0003 +# smc -k F0Tg -w 36b0 +# smc -k F1Tg -w 36b0 + +..to force fan 0 to 4000 RPM and leave fan 1 in automatic mode: +# smc -k "FS! " -w 0001 +# smc -k F0Tg -w 3e80 + +..to return both fans to automatic mode: +# smc -k "FS! " -w 0000 + +Temperature sensors +------------------- +TB0T +TC0D +TC0P +TM0P +TN0P +Th0H +Ts0P +TN1P +Th1H + +Light sensors +------------- +ALV0 - Left +ALV1 - Right + +Motion sensors +-------------- +MO_X +MO_Y +MO_Z diff --git a/smc-command/smc.c b/smc-command/smc.c new file mode 100644 index 0000000..ff1e48b --- /dev/null +++ b/smc-command/smc.c @@ -0,0 +1,555 @@ +/* + * Apple System Management Control (SMC) Tool + * Copyright (C) 2006 devnull + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include + +#include "smc.h" + +io_connect_t conn; + +UInt32 _strtoul(char *str, int size, int base) +{ + UInt32 total = 0; + int i; + + for (i = 0; i < size; i++) + { + if (base == 16) + total += str[i] << (size - 1 - i) * 8; + else + total += (unsigned char) (str[i] << (size - 1 - i) * 8); + } + return total; +} + +void _ultostr(char *str, UInt32 val) +{ + str[0] = '\0'; + sprintf(str, "%c%c%c%c", + (unsigned int) val >> 24, + (unsigned int) val >> 16, + (unsigned int) val >> 8, + (unsigned int) val); +} + +float _strtof(char *str, int size, int e) +{ + float total = 0; + int i; + + for (i = 0; i < size; i++) + { + if (i == (size - 1)) + total += (str[i] & 0xff) >> e; + else + total += str[i] << (size - 1 - i) * (8 - e); + } + + return total; +} + +void smc_init(){ + SMCOpen(&conn); +} + +void smc_close(){ + SMCClose(conn); +} +void printFPE2(SMCVal_t val) +{ + /* FIXME: This decode is incomplete, last 2 bits are dropped */ + + printf("%.0f ", _strtof(val.bytes, val.dataSize, 2)); +} + +void printUInt(SMCVal_t val) +{ + printf("%u ", (unsigned int) _strtoul(val.bytes, val.dataSize, 10)); +} + +void printBytesHex(SMCVal_t val) +{ + int i; + + printf("(bytes"); + for (i = 0; i < val.dataSize; i++) + printf(" %02x", (unsigned char) val.bytes[i]); + printf(")\n"); +} + +void printVal(SMCVal_t val) +{ + printf(" %-4s [%-4s] ", val.key, val.dataType); + if (val.dataSize > 0) + { + if ((strcmp(val.dataType, DATATYPE_UINT8) == 0) || + (strcmp(val.dataType, DATATYPE_UINT16) == 0) || + (strcmp(val.dataType, DATATYPE_UINT32) == 0)) + printUInt(val); + else if (strcmp(val.dataType, DATATYPE_FPE2) == 0) + printFPE2(val); + + printBytesHex(val); + } + else + { + printf("no data\n"); + } +} + +kern_return_t SMCOpen(io_connect_t *conn) +{ + kern_return_t result; + mach_port_t masterPort; + io_iterator_t iterator; + io_object_t device; + + IOMasterPort(MACH_PORT_NULL, &masterPort); + + CFMutableDictionaryRef matchingDictionary = IOServiceMatching("AppleSMC"); + result = IOServiceGetMatchingServices(masterPort, matchingDictionary, &iterator); + if (result != kIOReturnSuccess) + { + printf("Error: IOServiceGetMatchingServices() = %08x\n", result); + return 1; + } + + device = IOIteratorNext(iterator); + IOObjectRelease(iterator); + if (device == 0) + { + printf("Error: no SMC found\n"); + return 1; + } + + result = IOServiceOpen(device, mach_task_self(), 0, conn); + IOObjectRelease(device); + if (result != kIOReturnSuccess) + { + printf("Error: IOServiceOpen() = %08x\n", result); + return 1; + } + + return kIOReturnSuccess; +} + +kern_return_t SMCClose(io_connect_t conn) +{ + return IOServiceClose(conn); +} + + +kern_return_t SMCCall(int index, SMCKeyData_t *inputStructure, SMCKeyData_t *outputStructure) +{ + size_t structureInputSize; + size_t structureOutputSize; + + structureInputSize = sizeof(SMCKeyData_t); + structureOutputSize = sizeof(SMCKeyData_t); +/* + return IOConnectMethodStructureIStructureO( + conn, + index, + structureInputSize, + &structureOutputSize, + inputStructure, + outputStructure + ); +*/ + return IOConnectCallStructMethod(conn, index, inputStructure, structureInputSize, outputStructure, &structureOutputSize); +} + +kern_return_t SMCCall2(int index, SMCKeyData_t *inputStructure, SMCKeyData_t *outputStructure,io_connect_t conn) +{ + size_t structureInputSize; + size_t structureOutputSize; + structureInputSize = sizeof(SMCKeyData_t); + structureOutputSize = sizeof(SMCKeyData_t); + + /* return IOConnectMethodStructureIStructureO( + conn, + index, + structureInputSize, + &structureOutputSize, + inputStructure, + outputStructure + ); + */ + return IOConnectCallStructMethod(conn, index, inputStructure, structureInputSize, outputStructure, &structureOutputSize); + +} + +kern_return_t SMCReadKey2(UInt32Char_t key, SMCVal_t *val,io_connect_t conn) +{ + kern_return_t result; + SMCKeyData_t inputStructure; + SMCKeyData_t outputStructure; + + memset(&inputStructure, 0, sizeof(SMCKeyData_t)); + memset(&outputStructure, 0, sizeof(SMCKeyData_t)); + memset(val, 0, sizeof(SMCVal_t)); + + inputStructure.key = _strtoul(key, 4, 16); + sprintf(val->key, key); + inputStructure.data8 = SMC_CMD_READ_KEYINFO; + + result = SMCCall2(KERNEL_INDEX_SMC, &inputStructure, &outputStructure,conn); + if (result != kIOReturnSuccess) + return result; + + val->dataSize = outputStructure.keyInfo.dataSize; + _ultostr(val->dataType, outputStructure.keyInfo.dataType); + inputStructure.keyInfo.dataSize = val->dataSize; + inputStructure.data8 = SMC_CMD_READ_BYTES; + + result = SMCCall2(KERNEL_INDEX_SMC, &inputStructure, &outputStructure,conn); + if (result != kIOReturnSuccess) + return result; + + memcpy(val->bytes, outputStructure.bytes, sizeof(outputStructure.bytes)); + + return kIOReturnSuccess; +} +kern_return_t SMCReadKey(UInt32Char_t key, SMCVal_t *val) +{ + kern_return_t result; + SMCKeyData_t inputStructure; + SMCKeyData_t outputStructure; + + memset(&inputStructure, 0, sizeof(SMCKeyData_t)); + memset(&outputStructure, 0, sizeof(SMCKeyData_t)); + memset(val, 0, sizeof(SMCVal_t)); + + inputStructure.key = _strtoul(key, 4, 16); + sprintf(val->key, key); + inputStructure.data8 = SMC_CMD_READ_KEYINFO; + + result = SMCCall(KERNEL_INDEX_SMC, &inputStructure, &outputStructure); + if (result != kIOReturnSuccess) + return result; + + val->dataSize = outputStructure.keyInfo.dataSize; + _ultostr(val->dataType, outputStructure.keyInfo.dataType); + inputStructure.keyInfo.dataSize = val->dataSize; + inputStructure.data8 = SMC_CMD_READ_BYTES; + + result = SMCCall(KERNEL_INDEX_SMC, &inputStructure, &outputStructure); + if (result != kIOReturnSuccess) + return result; + + memcpy(val->bytes, outputStructure.bytes, sizeof(outputStructure.bytes)); + + return kIOReturnSuccess; +} + + +kern_return_t SMCWriteKey(SMCVal_t writeVal) +{ + kern_return_t result; + SMCKeyData_t inputStructure; + SMCKeyData_t outputStructure; + + SMCVal_t readVal; + + result = SMCReadKey(writeVal.key, &readVal); + if (result != kIOReturnSuccess) + return result; + + if (readVal.dataSize != writeVal.dataSize) + return kIOReturnError; + + memset(&inputStructure, 0, sizeof(SMCKeyData_t)); + memset(&outputStructure, 0, sizeof(SMCKeyData_t)); + + inputStructure.key = _strtoul(writeVal.key, 4, 16); + inputStructure.data8 = SMC_CMD_WRITE_BYTES; + inputStructure.keyInfo.dataSize = writeVal.dataSize; + memcpy(inputStructure.bytes, writeVal.bytes, sizeof(writeVal.bytes)); + + result = SMCCall2(KERNEL_INDEX_SMC, &inputStructure, &outputStructure,conn); + if (result != kIOReturnSuccess) + return result; + + return kIOReturnSuccess; +} + +kern_return_t SMCWriteKey2(SMCVal_t writeVal,io_connect_t conn) +{ + kern_return_t result; + SMCKeyData_t inputStructure; + SMCKeyData_t outputStructure; + + SMCVal_t readVal; + + result = SMCReadKey2(writeVal.key, &readVal,conn); + if (result != kIOReturnSuccess) + return result; + + if (readVal.dataSize != writeVal.dataSize) + return kIOReturnError; + + memset(&inputStructure, 0, sizeof(SMCKeyData_t)); + memset(&outputStructure, 0, sizeof(SMCKeyData_t)); + + inputStructure.key = _strtoul(writeVal.key, 4, 16); + inputStructure.data8 = SMC_CMD_WRITE_BYTES; + inputStructure.keyInfo.dataSize = writeVal.dataSize; + memcpy(inputStructure.bytes, writeVal.bytes, sizeof(writeVal.bytes)); + result = SMCCall2(KERNEL_INDEX_SMC, &inputStructure, &outputStructure,conn); + + if (result != kIOReturnSuccess) + return result; + return kIOReturnSuccess; +} + + +UInt32 SMCReadIndexCount(void) +{ + SMCVal_t val; + + SMCReadKey("#KEY", &val); + return _strtoul(val.bytes, val.dataSize, 10); +} + +kern_return_t SMCPrintAll(void) +{ + kern_return_t result; + SMCKeyData_t inputStructure; + SMCKeyData_t outputStructure; + + int totalKeys, i; + UInt32Char_t key; + SMCVal_t val; + + totalKeys = SMCReadIndexCount(); + for (i = 0; i < totalKeys; i++) + { + memset(&inputStructure, 0, sizeof(SMCKeyData_t)); + memset(&outputStructure, 0, sizeof(SMCKeyData_t)); + memset(&val, 0, sizeof(SMCVal_t)); + + inputStructure.data8 = SMC_CMD_READ_INDEX; + inputStructure.data32 = i; + + result = SMCCall(KERNEL_INDEX_SMC, &inputStructure, &outputStructure); + if (result != kIOReturnSuccess) + continue; + + _ultostr(key, outputStructure.key); + + SMCReadKey(key, &val); + printVal(val); + } + + return kIOReturnSuccess; +} + +kern_return_t SMCPrintFans(void) +{ + kern_return_t result; + SMCVal_t val; + UInt32Char_t key; + int totalFans, i; + + result = SMCReadKey("FNum", &val); + if (result != kIOReturnSuccess) + return kIOReturnError; + + totalFans = _strtoul(val.bytes, val.dataSize, 10); + printf("Total fans in system: %d\n", totalFans); + + for (i = 0; i < totalFans; i++) + { + printf("\nFan #%d:\n", i); + sprintf(key, "F%dAc", i); + SMCReadKey(key, &val); + printf(" Actual speed : %.0f\n", _strtof(val.bytes, val.dataSize, 2)); + sprintf(key, "F%dMn", i); + SMCReadKey(key, &val); + printf(" Minimum speed: %.0f\n", _strtof(val.bytes, val.dataSize, 2)); + sprintf(key, "F%dMx", i); + SMCReadKey(key, &val); + printf(" Maximum speed: %.0f\n", _strtof(val.bytes, val.dataSize, 2)); + sprintf(key, "F%dSf", i); + SMCReadKey(key, &val); + printf(" Safe speed : %.0f\n", _strtof(val.bytes, val.dataSize, 2)); + sprintf(key, "F%dTg", i); + SMCReadKey(key, &val); + printf(" Target speed : %.0f\n", _strtof(val.bytes, val.dataSize, 2)); + SMCReadKey("FS! ", &val); + if ((_strtoul(val.bytes, 2, 16) & (1 << i)) == 0) + printf(" Mode : auto\n"); + else + printf(" Mode : forced\n"); + } + + return kIOReturnSuccess; +} + +void usage(char* prog) +{ + printf("Apple System Management Control (SMC) tool %s\n", VERSION); + printf("Usage:\n"); + printf("%s [options]\n", prog); + printf(" -f : fan info decoded\n"); + printf(" -h : help\n"); + printf(" -k : key to manipulate\n"); + printf(" -l : list all keys and values\n"); + printf(" -r : read the value of a key\n"); + printf(" -w : write the specified value to a key\n"); + printf(" -v : version\n"); + printf("\n"); +} + +kern_return_t SMCWriteSimple(UInt32Char_t key,char *wvalue,io_connect_t conn) +{ + kern_return_t result; + SMCVal_t val; + int i; + char c[3]; + for (i = 0; i < strlen(wvalue); i++) + { + sprintf(c, "%c%c", wvalue[i * 2], wvalue[(i * 2) + 1]); + val.bytes[i] = (int) strtol(c, NULL, 16); + } + val.dataSize = i / 2; + sprintf(val.key, key); + result = SMCWriteKey2(val,conn); + if (result != kIOReturnSuccess) + printf("Error: SMCWriteKey() = %08x\n", result); + + + return result; +} + + +#ifdef CMD_TOOL +int main(int argc, char *argv[]) +{ + int c; + extern char *optarg; + + kern_return_t result; + int op = OP_NONE; + UInt32Char_t key = "\0"; + SMCVal_t val; + + while ((c = getopt(argc, argv, "fhk:lrw:v")) != -1) + { + switch(c) + { + case 'f': + op = OP_READ_FAN; + break; + case 'k': + strncpy(key, optarg, sizeof(key)); //fix for buffer overflow + break; + case 'l': + op = OP_LIST; + break; + case 'r': + op = OP_READ; + break; + case 'v': + printf("%s\n", VERSION); + return 0; + break; + case 'w': + op = OP_WRITE; + { + int i; + char c[3]; + for (i = 0; i < strlen(optarg); i++) + { + sprintf(c, "%c%c", optarg[i * 2], optarg[(i * 2) + 1]); + val.bytes[i] = (int) strtol(c, NULL, 16); + } + val.dataSize = i / 2; + if ((val.dataSize * 2) != strlen(optarg)) + { + printf("Error: value is not valid\n"); + return 1; + } + } + break; + case 'h': + case '?': + op = OP_NONE; + break; + } + } + + if (op == OP_NONE) + { + usage(argv[0]); + return 1; + } + + SMCOpen(&conn); + + switch(op) + { + case OP_LIST: + result = SMCPrintAll(); + if (result != kIOReturnSuccess) + printf("Error: SMCPrintAll() = %08x\n", result); + break; + case OP_READ: + if (strlen(key) > 0) + { + result = SMCReadKey(key, &val); + if (result != kIOReturnSuccess) + printf("Error: SMCReadKey() = %08x\n", result); + else + printVal(val); + } + else + { + printf("Error: specify a key to read\n"); + } + break; + case OP_READ_FAN: + result = SMCPrintFans(); + if (result != kIOReturnSuccess) + printf("Error: SMCPrintFans() = %08x\n", result); + break; + case OP_WRITE: + if (strlen(key) > 0) + { + sprintf(val.key, key); + result = SMCWriteKey(val); + if (result != kIOReturnSuccess) + printf("Error: SMCWriteKey() = %08x\n", result); + } + else + { + printf("Error: specify a key to write\n"); + } + break; + } + + SMCClose(conn); + return 0;; +} +#endif + diff --git a/smc-command/smc.h b/smc-command/smc.h new file mode 100644 index 0000000..f001abf --- /dev/null +++ b/smc-command/smc.h @@ -0,0 +1,101 @@ +/* + * Apple System Management Control (SMC) Tool + * Copyright (C) 2006 devnull + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __SMC_H__ +#define __SMC_H__ +#endif + +#define VERSION "0.01" + +#define OP_NONE 0 +#define OP_LIST 1 +#define OP_READ 2 +#define OP_READ_FAN 3 +#define OP_WRITE 4 + +#define KERNEL_INDEX_SMC 2 + +#define SMC_CMD_READ_BYTES 5 +#define SMC_CMD_WRITE_BYTES 6 +#define SMC_CMD_READ_INDEX 8 +#define SMC_CMD_READ_KEYINFO 9 +#define SMC_CMD_READ_PLIMIT 11 +#define SMC_CMD_READ_VERS 12 + +#define DATATYPE_FPE2 "fpe2" +#define DATATYPE_UINT8 "ui8 " +#define DATATYPE_UINT16 "ui16" +#define DATATYPE_UINT32 "ui32" + +typedef struct { + char major; + char minor; + char build; + char reserved[1]; + UInt16 release; +} SMCKeyData_vers_t; + +typedef struct { + UInt16 version; + UInt16 length; + UInt32 cpuPLimit; + UInt32 gpuPLimit; + UInt32 memPLimit; +} SMCKeyData_pLimitData_t; + +typedef struct { + UInt32 dataSize; + UInt32 dataType; + char dataAttributes; +} SMCKeyData_keyInfo_t; + +typedef char SMCBytes_t[32]; + +typedef struct { + UInt32 key; + SMCKeyData_vers_t vers; + SMCKeyData_pLimitData_t pLimitData; + SMCKeyData_keyInfo_t keyInfo; + char result; + char status; + char data8; + UInt32 data32; + SMCBytes_t bytes; +} SMCKeyData_t; + +typedef char UInt32Char_t[5]; + +typedef struct { + UInt32Char_t key; + UInt32 dataSize; + UInt32Char_t dataType; + SMCBytes_t bytes; +} SMCVal_t; + +UInt32 _strtoul(char *str, int size, int base); +kern_return_t SMCOpen(io_connect_t *conn); +kern_return_t SMCReadKey(UInt32Char_t key, SMCVal_t *val); +kern_return_t SMCReadKey2(UInt32Char_t key, SMCVal_t *val,io_connect_t conn); +kern_return_t SMCWriteSimple(UInt32Char_t key,char *wvalue,io_connect_t conn); +kern_return_t SMCClose(io_connect_t conn); +void smc_init(); +void smc_close(); + +float _strtof(char *str, int size, int e); + diff --git a/smcFanControl.xcodeproj/hendrikh.mode1 b/smcFanControl.xcodeproj/hendrikh.mode1 new file mode 100644 index 0000000..4bfb38d --- /dev/null +++ b/smcFanControl.xcodeproj/hendrikh.mode1 @@ -0,0 +1,1526 @@ + + + + + ActivePerspectiveName + Project + AllowedModules + + + BundleLoadPath + + MaxInstances + n + Module + PBXSmartGroupTreeModule + Name + Groups and Files Outline View + + + BundleLoadPath + + MaxInstances + n + Module + PBXNavigatorGroup + Name + Editor + + + BundleLoadPath + + MaxInstances + n + Module + XCTaskListModule + Name + Task List + + + BundleLoadPath + + MaxInstances + n + Module + XCDetailModule + Name + File and Smart Group Detail Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXBuildResultsModule + Name + Detailed Build Results Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXProjectFindModule + Name + Project Batch Find Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXRunSessionModule + Name + Run Log + + + BundleLoadPath + + MaxInstances + n + Module + PBXBookmarksModule + Name + Bookmarks Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXClassBrowserModule + Name + Class Browser + + + BundleLoadPath + + MaxInstances + n + Module + PBXCVSModule + Name + Source Code Control Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXDebugBreakpointsModule + Name + Debug Breakpoints Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCDockableInspector + Name + Inspector + + + BundleLoadPath + + MaxInstances + n + Module + PBXOpenQuicklyModule + Name + Open Quickly Tool + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugSessionModule + Name + Debugger + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugCLIModule + Name + Debug Console + + + Description + DefaultDescriptionKey + DockingSystemVisible + + Extension + mode1 + FavBarConfig + + PBXProjectModuleGUID + 89C053F10ADAB8DD0037CA16 + XCBarModuleItemNames + + XCBarModuleItems + + + FirstTimeWindowDisplayed + + Identifier + com.apple.perspectives.project.mode1 + MajorVersion + 31 + MinorVersion + 1 + Name + Default + Notifications + + OpenEditors + + + Content + + PBXProjectModuleGUID + 89562AD50B93498B0004F96A + PBXProjectModuleLabel + Machines.plist + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 89562AD60B93498B0004F96A + PBXProjectModuleLabel + Machines.plist + _historyCapacity + 0 + bookmark + 89647CCA0BAF44F3005595BE + history + + 89647CA90BAF44DE005595BE + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {1157, 361}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 175 376 1157 402 0 0 1280 778 + + + + PerspectiveWidths + + -1 + -1 + + Perspectives + + + ChosenToolbarItems + + active-target-popup + action + NSToolbarFlexibleSpaceItem + buildOrClean + build-and-runOrDebug + com.apple.ide.PBXToolbarStopButton + get-info + toggle-editor + NSToolbarFlexibleSpaceItem + com.apple.pbx.toolbar.searchfield + + ControllerClassBaseName + + IconName + WindowOfProjectWithEditor + Identifier + perspective.project + IsVertical + + Layout + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 264 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 080E96DDFE201D6D7F000001 + 29B97315FDCFA39411CA2CEA + 29B97317FDCFA39411CA2CEA + 89033CA60B80E1EB00FDAF43 + 89FE24210B7F4CD300D2713C + 89FE24280B7F4CE900D2713C + 089C165CFE840E0CC02AAC07 + 893506170B440255001BFBA5 + 29B97323FDCFA39411CA2CEA + 1058C7A0FEA54F0111CA2CBB + 895BDA390B8F8F42003CD894 + 1058C7A2FEA54F0111CA2CBB + 19C28FACFE9D520D11CA2CBB + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 25 + 23 + 17 + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {264, 630}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {281, 648}} + GroupTreeTableConfiguration + + MainColumn + 264 + + RubberWindowFrame + -1 89 1280 689 0 0 1280 778 + + Module + PBXSmartGroupTreeModule + Proportion + 281pt + + + Dock + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20306471E060097A5F4 + PBXProjectModuleLabel + FanControl.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CE0B20406471E060097A5F4 + PBXProjectModuleLabel + FanControl.h + _historyCapacity + 0 + bookmark + 89647CC70BAF44F3005595BE + history + + 89D651E20B90972E0004157F + 89D651E40B90972E0004157F + 89D651E60B90972E0004157F + 89D651E80B90972E0004157F + 89D651EA0B90972E0004157F + 89D651EC0B90972E0004157F + 89D651EE0B90972E0004157F + 89D651F20B90972E0004157F + 89D651F40B90972E0004157F + 89D651F60B90972E0004157F + 89D651F80B90972E0004157F + 89D651FA0B90972E0004157F + 89D651FE0B90972E0004157F + 89D652000B90972E0004157F + 89D652020B90972E0004157F + 89D652050B90972E0004157F + 89B156950BA411D3002A258A + 89B156990BA411D3002A258A + 897009320BAB30070066EC74 + 897009330BAB30070066EC74 + 897009C40BAB62580066EC74 + 897009C50BAB62580066EC74 + 897009C60BAB62580066EC74 + 897009C80BAB62580066EC74 + 895598C90BABD13200DBA37E + 895599480BABD93500DBA37E + 895599490BABD93500DBA37E + 89559A4F0BABE1A200DBA37E + 89559A8A0BAC33A500DBA37E + 89559A8B0BAC33A500DBA37E + 894E32AE0BAED2EB00A9CA90 + 894E32AF0BAED2EB00A9CA90 + 894E32B20BAED2EB00A9CA90 + 894E330C0BAF0A8E00A9CA90 + 894E330D0BAF0A8E00A9CA90 + 894E330E0BAF0A8E00A9CA90 + 894E330F0BAF0A8E00A9CA90 + 89647CC50BAF44F3005595BE + 894E32920BAEA41800A9CA90 + + prevStack + + 895BDA6E0B8F926E003CD894 + 895BDA6F0B8F926E003CD894 + 895BDAA30B8FC8F4003CD894 + 895BDAA40B8FC8F4003CD894 + 895BDAA50B8FC8F4003CD894 + 89D652070B90972E0004157F + 89D652090B90972E0004157F + 89D6520B0B90972E0004157F + 89D6520D0B90972E0004157F + 89D6520F0B90972E0004157F + 89D6521B0B90972E0004157F + 89D6521D0B90972E0004157F + 89D6521F0B90972E0004157F + 89D652210B90972E0004157F + 89D652230B90972E0004157F + 89D652250B90972E0004157F + 89D652270B90972E0004157F + 89D652290B90972E0004157F + 89D6522B0B90972E0004157F + 89D6522D0B90972E0004157F + 89D6522F0B90972E0004157F + 89D652310B90972E0004157F + 89D652320B90972E0004157F + 89D652330B90972E0004157F + 89D652340B90972E0004157F + 89562AD30B93498B0004F96A + 89B1555C0BA38657002A258A + 89B1555D0BA38657002A258A + 89B1564F0BA39F70002A258A + 89B1569F0BA411D3002A258A + 89B156A10BA411D3002A258A + 897009460BAB30290066EC74 + 897009470BAB30290066EC74 + 897009D10BAB62580066EC74 + 897009D90BAB62580066EC74 + 895599550BABD93500DBA37E + 895599560BABD93500DBA37E + 895599570BABD93500DBA37E + 89559A8E0BAC33A500DBA37E + 89647CC60BAF44F3005595BE + + + SplitCount + 1 + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {994, 453}} + RubberWindowFrame + -1 89 1280 689 0 0 1280 778 + + Module + PBXNavigatorGroup + Proportion + 453pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20506471E060097A5F4 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{0, 458}, {994, 190}} + RubberWindowFrame + -1 89 1280 689 0 0 1280 778 + + Module + XCDetailModule + Proportion + 190pt + + + Proportion + 994pt + + + Name + Project + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + XCModuleDock + PBXNavigatorGroup + XCDetailModule + + TableOfContents + + 89647CC80BAF44F3005595BE + 1CE0B1FE06471DED0097A5F4 + 89647CC90BAF44F3005595BE + 1CE0B20306471E060097A5F4 + 1CE0B20506471E060097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default + + + ControllerClassBaseName + + IconName + WindowOfProject + Identifier + perspective.morph + IsVertical + 0 + Layout + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 11E0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 337}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 1 + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 355}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 373 269 690 397 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 100% + + + Name + Morph + PreferredWidth + 300 + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + + TableOfContents + + 11E0B1FE06471DED0097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default.short + + + PerspectivesBarVisible + + ShelfIsVisible + + SourceDescription + file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec' + StatusbarIsVisible + + TimeStamp + 0.0 + ToolbarDisplayMode + 1 + ToolbarIsVisible + + ToolbarSizeMode + 1 + Type + Perspectives + UpdateMessage + The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? + WindowJustification + 5 + WindowOrderList + + 89647CD10BAF44F3005595BE + 89562AD50B93498B0004F96A + 1CD10A99069EF8BA00B06720 + 1C0AD2B3069F1EA900FABCE6 + /Users/hendrikh/Development/FanControl_1_1/FanControl.xcodeproj + + WindowString + -1 89 1280 689 0 0 1280 778 + WindowTools + + + FirstTimeWindowDisplayed + + Identifier + windowTool.build + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528F0623707200166675 + PBXProjectModuleLabel + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {1280, 323}} + RubberWindowFrame + 5 91 1280 686 0 0 1280 778 + + Module + PBXNavigatorGroup + Proportion + 323pt + + + ContentConfiguration + + PBXBuildLogShowsTranscriptDefaultKey + {{0, 5}, {1280, 312}} + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build + XCBuildResultsTrigger_Collapse + 1021 + XCBuildResultsTrigger_Open + 1011 + + GeometryConfiguration + + Frame + {{0, 328}, {1280, 317}} + RubberWindowFrame + 5 91 1280 686 0 0 1280 778 + + Module + PBXBuildResultsModule + Proportion + 317pt + + + Proportion + 645pt + + + Name + Build Results + ServiceClasses + + PBXBuildResultsModule + + StatusbarIsVisible + + TableOfContents + + 89C053F20ADAB8DD0037CA16 + 89647C9F0BAF44AF005595BE + 1CD0528F0623707200166675 + XCMainBuildResultsModuleGUID + + ToolbarConfiguration + xcode.toolbar.config.build + WindowString + 5 91 1280 686 0 0 1280 778 + WindowToolGUID + 89C053F20ADAB8DD0037CA16 + WindowToolIsVisible + + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debugger + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {369, 190}} + {{369, 0}, {656, 190}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {1025, 190}} + {{0, 190}, {1025, 171}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1C162984064C10D400B95A72 + PBXProjectModuleLabel + Debug - GLUTExamples (Underwater) + + GeometryConfiguration + + DebugConsoleDrawerSize + {100, 120} + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 0}, {1025, 361}} + RubberWindowFrame + 501 376 1025 402 0 0 1280 778 + + Module + PBXDebugSessionModule + Proportion + 361pt + + + Proportion + 361pt + + + Name + Debugger + ServiceClasses + + PBXDebugSessionModule + + StatusbarIsVisible + + TableOfContents + + 1CD10A99069EF8BA00B06720 + 89647CCB0BAF44F3005595BE + 1C162984064C10D400B95A72 + 89647CCC0BAF44F3005595BE + 89647CCD0BAF44F3005595BE + 89647CCE0BAF44F3005595BE + 89647CCF0BAF44F3005595BE + 89647CD00BAF44F3005595BE + 89647CD10BAF44F3005595BE + + ToolbarConfiguration + xcode.toolbar.config.debug + WindowString + 501 376 1025 402 0 0 1280 778 + WindowToolGUID + 1CD10A99069EF8BA00B06720 + WindowToolIsVisible + + + + Identifier + windowTool.find + Layout + + + Dock + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CDD528C0622207200134675 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CD0528D0623707200166675 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {781, 167}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXNavigatorGroup + Proportion + 781pt + + + Proportion + 50% + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528E0623707200166675 + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{8, 0}, {773, 254}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXProjectFindModule + Proportion + 50% + + + Proportion + 428pt + + + Name + Project Find + ServiceClasses + + PBXProjectFindModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C530D57069F1CE1000CFCEE + 1C530D58069F1CE1000CFCEE + 1C530D59069F1CE1000CFCEE + 1CDD528C0622207200134675 + 1C530D5A069F1CE1000CFCEE + 1CE0B1FE06471DED0097A5F4 + 1CD0528E0623707200166675 + + WindowString + 62 385 781 470 0 0 1440 878 + WindowToolGUID + 1C530D57069F1CE1000CFCEE + WindowToolIsVisible + 0 + + + Identifier + MENUSEPARATOR + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debuggerConsole + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAAC065D492600B07095 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {440, 358}} + RubberWindowFrame + 191 138 440 400 0 0 1280 778 + + Module + PBXDebugCLIModule + Proportion + 358pt + + + Proportion + 359pt + + + Name + Debugger Console + ServiceClasses + + PBXDebugCLIModule + + StatusbarIsVisible + + TableOfContents + + 89E06ED80ADC5AF5005C1879 + 895598EC0BABD1D900DBA37E + 1C78EAAC065D492600B07095 + + WindowString + 191 138 440 400 0 0 1280 778 + WindowToolGUID + 89E06ED80ADC5AF5005C1879 + WindowToolIsVisible + + + + FirstTimeWindowDisplayed + + Identifier + windowTool.run + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + LauncherConfigVersion + 3 + PBXProjectModuleGUID + 1CD0528B0623707200166675 + PBXProjectModuleLabel + Run + Runner + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {493, 167}} + {{0, 176}, {493, 267}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {405, 443}} + {{414, 0}, {514, 443}} + + + + + GeometryConfiguration + + Frame + {{0, 0}, {790, 422}} + RubberWindowFrame + 330 159 790 379 0 0 1280 778 + + Module + PBXRunSessionModule + Proportion + 422pt + + + Proportion + 338pt + + + Name + Run Log + ServiceClasses + + PBXRunSessionModule + + StatusbarIsVisible + + TableOfContents + + 1C0AD2B3069F1EA900FABCE6 + 89647CD20BAF44F3005595BE + 1CD0528B0623707200166675 + 89647CD30BAF44F3005595BE + + ToolbarConfiguration + xcode.toolbar.config.run + WindowString + 330 159 790 379 0 0 1280 778 + WindowToolGUID + 1C0AD2B3069F1EA900FABCE6 + WindowToolIsVisible + + + + Identifier + windowTool.scm + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAB2065D492600B07095 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1C78EAB3065D492600B07095 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {452, 0}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD052920623707200166675 + PBXProjectModuleLabel + SCM + + GeometryConfiguration + + ConsoleFrame + {{0, 259}, {452, 0}} + Frame + {{0, 7}, {452, 259}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + TableConfiguration + + Status + 30 + FileName + 199 + Path + 197.09500122070312 + + TableFrame + {{0, 0}, {452, 250}} + + Module + PBXCVSModule + Proportion + 262pt + + + Proportion + 266pt + + + Name + SCM + ServiceClasses + + PBXCVSModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAB4065D492600B07095 + 1C78EAB5065D492600B07095 + 1C78EAB2065D492600B07095 + 1CD052920623707200166675 + + ToolbarConfiguration + xcode.toolbar.config.scm + WindowString + 743 379 452 308 0 0 1280 1002 + + + FirstTimeWindowDisplayed + + Identifier + windowTool.breakpoints + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + no + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 168 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 1C77FABC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {168, 350}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + + GeometryConfiguration + + Frame + {{0, 0}, {185, 368}} + GroupTreeTableConfiguration + + MainColumn + 168 + + RubberWindowFrame + 170 234 744 409 0 0 1280 778 + + Module + PBXSmartGroupTreeModule + Proportion + 185pt + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CA1AED706398EBD00589147 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{190, 0}, {554, 368}} + RubberWindowFrame + 170 234 744 409 0 0 1280 778 + + Module + XCDetailModule + Proportion + 554pt + + + Proportion + 368pt + + + MajorVersion + 2 + MinorVersion + 0 + Name + Breakpoints + ServiceClasses + + PBXSmartGroupTreeModule + XCDetailModule + + StatusbarIsVisible + + TableOfContents + + 894A477F0ADBDCFC008785F3 + 894A47800ADBDCFC008785F3 + 1CE0B1FE06471DED0097A5F4 + 1CA1AED706398EBD00589147 + + ToolbarConfiguration + xcode.toolbar.config.breakpoints + WindowString + 170 234 744 409 0 0 1280 778 + WindowToolGUID + 894A477F0ADBDCFC008785F3 + WindowToolIsVisible + + + + Identifier + windowTool.debugAnimator + Layout + + + Dock + + + Module + PBXNavigatorGroup + Proportion + 100% + + + Proportion + 100% + + + Name + Debug Visualizer + ServiceClasses + + PBXNavigatorGroup + + StatusbarIsVisible + 1 + ToolbarConfiguration + xcode.toolbar.config.debugAnimator + WindowString + 100 100 700 500 0 0 1280 1002 + + + FirstTimeWindowDisplayed + + Identifier + windowTool.bookmarks + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 892A80530B10BF750041B493 + PBXProjectModuleLabel + Bookmarks + + GeometryConfiguration + + Frame + {{0, 0}, {401, 180}} + RubberWindowFrame + 31 540 401 200 0 0 1280 778 + + Module + PBXBookmarksModule + Proportion + 180pt + + + Proportion + 180pt + + + Name + Bookmarks + ServiceClasses + + PBXBookmarksModule + + StatusbarIsVisible + + TableOfContents + + 892A80540B10BF750041B493 + 892A80550B10BF750041B493 + 892A80530B10BF750041B493 + + WindowString + 31 540 401 200 0 0 1280 778 + WindowToolGUID + 892A80540B10BF750041B493 + WindowToolIsVisible + + + + Identifier + windowTool.classBrowser + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + OptionsSetName + Hierarchy, all classes + PBXProjectModuleGUID + 1CA6456E063B45B4001379D8 + PBXProjectModuleLabel + Class Browser - NSObject + + GeometryConfiguration + + ClassesFrame + {{0, 0}, {374, 96}} + ClassesTreeTableConfiguration + + PBXClassNameColumnIdentifier + 208 + PBXClassBookColumnIdentifier + 22 + + Frame + {{0, 0}, {630, 331}} + MembersFrame + {{0, 105}, {374, 395}} + MembersTreeTableConfiguration + + PBXMemberTypeIconColumnIdentifier + 22 + PBXMemberNameColumnIdentifier + 216 + PBXMemberTypeColumnIdentifier + 97 + PBXMemberBookColumnIdentifier + 22 + + PBXModuleWindowStatusBarHidden2 + 1 + RubberWindowFrame + 385 179 630 352 0 0 1440 878 + + Module + PBXClassBrowserModule + Proportion + 332pt + + + Proportion + 332pt + + + Name + Class Browser + ServiceClasses + + PBXClassBrowserModule + + StatusbarIsVisible + 0 + TableOfContents + + 1C0AD2AF069F1E9B00FABCE6 + 1C0AD2B0069F1E9B00FABCE6 + 1CA6456E063B45B4001379D8 + + ToolbarConfiguration + xcode.toolbar.config.classbrowser + WindowString + 385 179 630 352 0 0 1440 878 + WindowToolGUID + 1C0AD2AF069F1E9B00FABCE6 + WindowToolIsVisible + 0 + + + + diff --git a/smcFanControl.xcodeproj/hendrikh.mode1v3 b/smcFanControl.xcodeproj/hendrikh.mode1v3 new file mode 100644 index 0000000..ac4a156 --- /dev/null +++ b/smcFanControl.xcodeproj/hendrikh.mode1v3 @@ -0,0 +1,1437 @@ + + + + + ActivePerspectiveName + Project + AllowedModules + + + BundleLoadPath + + MaxInstances + n + Module + PBXSmartGroupTreeModule + Name + Groups and Files Outline View + + + BundleLoadPath + + MaxInstances + n + Module + PBXNavigatorGroup + Name + Editor + + + BundleLoadPath + + MaxInstances + n + Module + XCTaskListModule + Name + Task List + + + BundleLoadPath + + MaxInstances + n + Module + XCDetailModule + Name + File and Smart Group Detail Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXBuildResultsModule + Name + Detailed Build Results Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXProjectFindModule + Name + Project Batch Find Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCProjectFormatConflictsModule + Name + Project Format Conflicts List + + + BundleLoadPath + + MaxInstances + n + Module + PBXBookmarksModule + Name + Bookmarks Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXClassBrowserModule + Name + Class Browser + + + BundleLoadPath + + MaxInstances + n + Module + PBXCVSModule + Name + Source Code Control Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXDebugBreakpointsModule + Name + Debug Breakpoints Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCDockableInspector + Name + Inspector + + + BundleLoadPath + + MaxInstances + n + Module + PBXOpenQuicklyModule + Name + Open Quickly Tool + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugSessionModule + Name + Debugger + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugCLIModule + Name + Debug Console + + + BundleLoadPath + + MaxInstances + n + Module + XCSnapshotModule + Name + Snapshots Tool + + + BundlePath + /Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources + Description + DefaultDescriptionKey + DockingSystemVisible + + Extension + mode1v3 + FavBarConfig + + PBXProjectModuleGUID + 89C41FCF0EC9C91C007B038C + XCBarModuleItemNames + + XCBarModuleItems + + + FirstTimeWindowDisplayed + + Identifier + com.apple.perspectives.project.mode1v3 + MajorVersion + 33 + MinorVersion + 0 + Name + Default + Notifications + + OpenEditors + + PerspectiveWidths + + -1 + -1 + + Perspectives + + + ChosenToolbarItems + + active-combo-popup + action + NSToolbarFlexibleSpaceItem + servicesModuledebug + debugger-enable-breakpoints + build-and-go + com.apple.ide.PBXToolbarStopButton + get-info + toggle-editor + NSToolbarFlexibleSpaceItem + com.apple.pbx.toolbar.searchfield + + ControllerClassBaseName + + IconName + WindowOfProjectWithEditor + Identifier + perspective.project + IsVertical + + Layout + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 320 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 080E96DDFE201D6D7F000001 + 29B97315FDCFA39411CA2CEA + 29B97317FDCFA39411CA2CEA + 89033CA60B80E1EB00FDAF43 + 29B97323FDCFA39411CA2CEA + 19C28FACFE9D520D11CA2CBB + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 8 + 2 + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {320, 838}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {337, 856}} + GroupTreeTableConfiguration + + MainColumn + 320 + + RubberWindowFrame + 0 131 1680 897 0 0 1680 1028 + + Module + PBXSmartGroupTreeModule + Proportion + 337pt + + + Dock + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20306471E060097A5F4 + PBXProjectModuleLabel + FanControl.m + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CE0B20406471E060097A5F4 + PBXProjectModuleLabel + FanControl.m + _historyCapacity + 0 + bookmark + 8932D00E13D08EDC008BC447 + history + + 89C598A70F8CE99600E51414 + 89C599970F8D080200E51414 + 89308DB60F8E766900CAD26A + 89725C181040B53F0022B471 + 89A8F55D10AF25D100EC1E00 + 890A17C912F85F730035AB6E + 8958CFD713CCBB4B00CD36E8 + 89895DB713CF4C58001946EC + 89895DD713CF4CCC001946EC + 8932CF4613D08686008BC447 + 8932CF4713D08686008BC447 + 8932CF4813D08686008BC447 + 8932CF4913D08686008BC447 + 8932CF4A13D08686008BC447 + 8932CF4B13D08686008BC447 + 8932CF5F13D08723008BC447 + 8932CF6013D08723008BC447 + 8932CF8413D08872008BC447 + 8932CF8B13D08872008BC447 + 8932CF9613D089FC008BC447 + 8932CF9813D089FC008BC447 + 8932CF9A13D089FC008BC447 + 8932CF9B13D089FC008BC447 + 8932CF9D13D089FC008BC447 + 8932CF9F13D089FC008BC447 + 8932CFA113D089FC008BC447 + 8932CFA313D089FC008BC447 + 8932CFA513D089FC008BC447 + 8932CFA713D089FC008BC447 + 8932CFA913D089FC008BC447 + 8932CFAB13D089FC008BC447 + 8932CFAC13D089FC008BC447 + 8932CFC213D08A6F008BC447 + 8932CFC313D08A6F008BC447 + 8932CFC413D08A6F008BC447 + 8932CFEC13D08B41008BC447 + 8932D00113D08E1C008BC447 + 8932D00D13D08EDC008BC447 + 8932CFC113D08A6F008BC447 + + + SplitCount + 1 + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {1338, 851}} + RubberWindowFrame + 0 131 1680 897 0 0 1680 1028 + + Module + PBXNavigatorGroup + Proportion + 851pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20506471E060097A5F4 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{0, 856}, {1338, 0}} + RubberWindowFrame + 0 131 1680 897 0 0 1680 1028 + + Module + XCDetailModule + Proportion + 0pt + + + Proportion + 1338pt + + + Name + Project + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + XCModuleDock + PBXNavigatorGroup + XCDetailModule + + TableOfContents + + 8932CF0413D08301008BC447 + 1CE0B1FE06471DED0097A5F4 + 8932CF0513D08301008BC447 + 1CE0B20306471E060097A5F4 + 1CE0B20506471E060097A5F4 + + ToolbarConfigUserDefaultsMinorVersion + 2 + ToolbarConfiguration + xcode.toolbar.config.defaultV3 + + + ControllerClassBaseName + + IconName + WindowOfProject + Identifier + perspective.morph + IsVertical + 0 + Layout + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 11E0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 337}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 1 + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 355}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 373 269 690 397 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 100% + + + Name + Morph + PreferredWidth + 300 + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + + TableOfContents + + 11E0B1FE06471DED0097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default.shortV3 + + + PerspectivesBarVisible + + ShelfIsVisible + + SourceDescription + file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec' + StatusbarIsVisible + + TimeStamp + 0.0 + ToolbarDisplayMode + 1 + ToolbarIsVisible + + ToolbarSizeMode + 1 + Type + Perspectives + UpdateMessage + The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? + WindowJustification + 5 + WindowOrderList + + 8932CF0F13D08301008BC447 + 8932CF1013D08301008BC447 + 1CD10A99069EF8BA00B06720 + 89C41FD00EC9C91C007B038C + 1C78EAAD065D492600B07095 + /Users/hendrikh/Development/iPhoneDev/smcFanControl/FanControl.xcodeproj + + WindowString + 0 131 1680 897 0 0 1680 1028 + WindowToolsV3 + + + FirstTimeWindowDisplayed + + Identifier + windowTool.build + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528F0623707200166675 + PBXProjectModuleLabel + SystemVersion.m + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {1680, 466}} + RubberWindowFrame + 0 131 1680 897 0 0 1680 1028 + + Module + PBXNavigatorGroup + Proportion + 466pt + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build Results + XCBuildResultsTrigger_Collapse + 1021 + XCBuildResultsTrigger_Open + 1011 + + GeometryConfiguration + + Frame + {{0, 471}, {1680, 385}} + RubberWindowFrame + 0 131 1680 897 0 0 1680 1028 + + Module + PBXBuildResultsModule + Proportion + 385pt + + + Proportion + 856pt + + + Name + Build Results + ServiceClasses + + PBXBuildResultsModule + + StatusbarIsVisible + + TableOfContents + + 89C41FD00EC9C91C007B038C + 8932CF0613D08301008BC447 + 1CD0528F0623707200166675 + XCMainBuildResultsModuleGUID + + ToolbarConfiguration + xcode.toolbar.config.buildV3 + WindowString + 0 131 1680 897 0 0 1680 1028 + WindowToolGUID + 89C41FD00EC9C91C007B038C + WindowToolIsVisible + + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debugger + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {492, 304}} + {{492, 0}, {586, 304}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {1078, 304}} + {{0, 304}, {1078, 266}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1C162984064C10D400B95A72 + PBXProjectModuleLabel + Debug - GLUTExamples (Underwater) + + GeometryConfiguration + + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 0}, {1078, 570}} + PBXDebugSessionStackFrameViewKey + + DebugVariablesTableConfiguration + + Name + 150 + Value + 115 + Summary + 296 + + Frame + {{492, 0}, {586, 304}} + RubberWindowFrame + 151 190 1078 611 0 0 1680 1028 + + RubberWindowFrame + 151 190 1078 611 0 0 1680 1028 + + Module + PBXDebugSessionModule + Proportion + 570pt + + + Proportion + 570pt + + + Name + Debugger + ServiceClasses + + PBXDebugSessionModule + + StatusbarIsVisible + + TableOfContents + + 1CD10A99069EF8BA00B06720 + 8932CF0713D08301008BC447 + 1C162984064C10D400B95A72 + 8932CF0813D08301008BC447 + 8932CF0913D08301008BC447 + 8932CF0A13D08301008BC447 + 8932CF0B13D08301008BC447 + 8932CF0C13D08301008BC447 + + ToolbarConfiguration + xcode.toolbar.config.debugV3 + WindowString + 151 190 1078 611 0 0 1680 1028 + WindowToolGUID + 1CD10A99069EF8BA00B06720 + WindowToolIsVisible + + + + FirstTimeWindowDisplayed + + Identifier + windowTool.find + IsVertical + + Layout + + + Dock + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CDD528C0622207200134675 + PBXProjectModuleLabel + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {1185, 357}} + RubberWindowFrame + 38 371 1185 615 0 0 1680 1028 + + Module + PBXNavigatorGroup + Proportion + 1185pt + + + Proportion + 357pt + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528E0623707200166675 + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{0, 362}, {1185, 212}} + RubberWindowFrame + 38 371 1185 615 0 0 1680 1028 + + Module + PBXProjectFindModule + Proportion + 212pt + + + Proportion + 574pt + + + Name + Project Find + ServiceClasses + + PBXProjectFindModule + + StatusbarIsVisible + + TableOfContents + + 1C530D57069F1CE1000CFCEE + 89895DCC13CF4CAD001946EC + 89895DCD13CF4CAD001946EC + 1CDD528C0622207200134675 + 1CD0528E0623707200166675 + + WindowString + 38 371 1185 615 0 0 1680 1028 + WindowToolGUID + 1C530D57069F1CE1000CFCEE + WindowToolIsVisible + + + + Identifier + MENUSEPARATOR + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debuggerConsole + IsVertical + + Layout + + + Dock + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAAC065D492600B07095 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {1109, 669}} + RubberWindowFrame + 46 136 1109 710 0 0 1680 1028 + + Module + PBXDebugCLIModule + Proportion + 669pt + + + Proportion + 669pt + + + Name + Debugger Console + ServiceClasses + + PBXDebugCLIModule + + StatusbarIsVisible + + TableOfContents + + 1C78EAAD065D492600B07095 + 8932CF0D13D08301008BC447 + 1C78EAAC065D492600B07095 + + ToolbarConfiguration + xcode.toolbar.config.consoleV3 + WindowString + 46 136 1109 710 0 0 1680 1028 + WindowToolGUID + 1C78EAAD065D492600B07095 + WindowToolIsVisible + + + + Identifier + windowTool.snapshots + Layout + + + Dock + + + Module + XCSnapshotModule + Proportion + 100% + + + Proportion + 100% + + + Name + Snapshots + ServiceClasses + + XCSnapshotModule + + StatusbarIsVisible + Yes + ToolbarConfiguration + xcode.toolbar.config.snapshots + WindowString + 315 824 300 550 0 0 1440 878 + WindowToolIsVisible + Yes + + + Identifier + windowTool.scm + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAB2065D492600B07095 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1C78EAB3065D492600B07095 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {452, 0}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD052920623707200166675 + PBXProjectModuleLabel + SCM + + GeometryConfiguration + + ConsoleFrame + {{0, 259}, {452, 0}} + Frame + {{0, 7}, {452, 259}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + TableConfiguration + + Status + 30 + FileName + 199 + Path + 197.0950012207031 + + TableFrame + {{0, 0}, {452, 250}} + + Module + PBXCVSModule + Proportion + 262pt + + + Proportion + 266pt + + + Name + SCM + ServiceClasses + + PBXCVSModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAB4065D492600B07095 + 1C78EAB5065D492600B07095 + 1C78EAB2065D492600B07095 + 1CD052920623707200166675 + + ToolbarConfiguration + xcode.toolbar.config.scm + WindowString + 743 379 452 308 0 0 1280 1002 + + + FirstTimeWindowDisplayed + + Identifier + windowTool.breakpoints + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + no + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 183 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 1C77FABC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {183, 350}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + + GeometryConfiguration + + Frame + {{0, 0}, {185, 368}} + GroupTreeTableConfiguration + + MainColumn + 183 + + RubberWindowFrame + 21 346 744 409 0 0 1280 778 + + Module + PBXSmartGroupTreeModule + Proportion + 185pt + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CA1AED706398EBD00589147 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{190, 0}, {554, 368}} + RubberWindowFrame + 21 346 744 409 0 0 1280 778 + + Module + XCDetailModule + Proportion + 554pt + + + Proportion + 368pt + + + MajorVersion + 3 + MinorVersion + 0 + Name + Breakpoints + ServiceClasses + + PBXSmartGroupTreeModule + XCDetailModule + + StatusbarIsVisible + + TableOfContents + + 89C456B513CD08B0003CCEF0 + 89C456B613CD08B0003CCEF0 + 1CE0B1FE06471DED0097A5F4 + 1CA1AED706398EBD00589147 + + ToolbarConfiguration + xcode.toolbar.config.breakpointsV3 + WindowString + 21 346 744 409 0 0 1280 778 + WindowToolGUID + 89C456B513CD08B0003CCEF0 + WindowToolIsVisible + + + + Identifier + windowTool.debugAnimator + Layout + + + Dock + + + Module + PBXNavigatorGroup + Proportion + 100% + + + Proportion + 100% + + + Name + Debug Visualizer + ServiceClasses + + PBXNavigatorGroup + + StatusbarIsVisible + 1 + ToolbarConfiguration + xcode.toolbar.config.debugAnimatorV3 + WindowString + 100 100 700 500 0 0 1280 1002 + + + Identifier + windowTool.bookmarks + Layout + + + Dock + + + Module + PBXBookmarksModule + Proportion + 100% + + + Proportion + 100% + + + Name + Bookmarks + ServiceClasses + + PBXBookmarksModule + + StatusbarIsVisible + 0 + WindowString + 538 42 401 187 0 0 1280 1002 + + + Identifier + windowTool.projectFormatConflicts + Layout + + + Dock + + + Module + XCProjectFormatConflictsModule + Proportion + 100% + + + Proportion + 100% + + + Name + Project Format Conflicts + ServiceClasses + + XCProjectFormatConflictsModule + + StatusbarIsVisible + 0 + WindowContentMinSize + 450 300 + WindowString + 50 850 472 307 0 0 1440 877 + + + Identifier + windowTool.classBrowser + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + OptionsSetName + Hierarchy, all classes + PBXProjectModuleGUID + 1CA6456E063B45B4001379D8 + PBXProjectModuleLabel + Class Browser - NSObject + + GeometryConfiguration + + ClassesFrame + {{0, 0}, {374, 96}} + ClassesTreeTableConfiguration + + PBXClassNameColumnIdentifier + 208 + PBXClassBookColumnIdentifier + 22 + + Frame + {{0, 0}, {630, 331}} + MembersFrame + {{0, 105}, {374, 395}} + MembersTreeTableConfiguration + + PBXMemberTypeIconColumnIdentifier + 22 + PBXMemberNameColumnIdentifier + 216 + PBXMemberTypeColumnIdentifier + 97 + PBXMemberBookColumnIdentifier + 22 + + PBXModuleWindowStatusBarHidden2 + 1 + RubberWindowFrame + 385 179 630 352 0 0 1440 878 + + Module + PBXClassBrowserModule + Proportion + 332pt + + + Proportion + 332pt + + + Name + Class Browser + ServiceClasses + + PBXClassBrowserModule + + StatusbarIsVisible + 0 + TableOfContents + + 1C0AD2AF069F1E9B00FABCE6 + 1C0AD2B0069F1E9B00FABCE6 + 1CA6456E063B45B4001379D8 + + ToolbarConfiguration + xcode.toolbar.config.classbrowser + WindowString + 385 179 630 352 0 0 1440 878 + WindowToolGUID + 1C0AD2AF069F1E9B00FABCE6 + WindowToolIsVisible + 0 + + + Identifier + windowTool.refactoring + IncludeInToolsMenu + 0 + Layout + + + Dock + + + BecomeActive + 1 + GeometryConfiguration + + Frame + {0, 0}, {500, 335} + RubberWindowFrame + {0, 0}, {500, 335} + + Module + XCRefactoringModule + Proportion + 100% + + + Proportion + 100% + + + Name + Refactoring + ServiceClasses + + XCRefactoringModule + + WindowString + 200 200 500 356 0 0 1920 1200 + + + + diff --git a/smcFanControl.xcodeproj/hendrikh.pbxuser b/smcFanControl.xcodeproj/hendrikh.pbxuser new file mode 100644 index 0000000..a2a8b5e --- /dev/null +++ b/smcFanControl.xcodeproj/hendrikh.pbxuser @@ -0,0 +1,1680 @@ +// !$*UTF8*$! +{ + 089C165DFE840E0CC02AAC07 /* English */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1408, 571}}"; + sepNavSelRange = "{98, 0}"; + sepNavVisRange = "{0, 114}"; + sepNavVisRect = "{{0, 0}, {1009, 419}}"; + sepNavWindowFrame = "{{15, 65}, {981, 708}}"; + }; + }; + 29B97313FDCFA39411CA2CEA /* Project object */ = { + activeArchitecturePreference = x86_64; + activeBuildConfigurationName = Release; + activeExecutable = 89C053AD0ADAB7360037CA16 /* smcFanControl */; + activeSDKPreference = macosx10.4; + activeTarget = 8D1107260486CEB800E47090 /* smcFanControl */; + addToTargets = ( + 8D1107260486CEB800E47090 /* smcFanControl */, + ); + breakpoints = ( + 89C456A613CD089D003CCEF0 /* CGErrorBreakpoint() */, + ); + codeSenseManager = 89C053BB0ADAB7550037CA16 /* Code sense */; + executables = ( + 89C053AD0ADAB7360037CA16 /* smcFanControl */, + ); + perUserDictionary = { + "PBXConfiguration.PBXBreakpointsDataSource.v1:1CA1AED706398EBD00589147" = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 20, + 215, + 20, + 115, + 114, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXBreakpointsDataSource_ActionID, + PBXBreakpointsDataSource_TypeID, + PBXBreakpointsDataSource_BreakpointID, + PBXBreakpointsDataSource_UseID, + PBXBreakpointsDataSource_LocationID, + PBXBreakpointsDataSource_ConditionID, + PBXBreakpointsDataSource_ContinueID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID; + PBXFileTableDataSourceColumnWidthsKey = ( + 22, + 300, + 1133, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXExecutablesDataSource_ActiveFlagID, + PBXExecutablesDataSource_NameID, + PBXExecutablesDataSource_CommentsID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = 1; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 1114, + 20, + 48, + 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.PBXTargetDataSource.PBXTargetDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 1205, + 60, + 20, + 48, + 43, + 43, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXTargetDataSource_PrimaryAttribute, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + ); + }; + PBXPerProjectTemplateStateSaveDate = 332432106; + PBXWorkspaceStateSaveDate = 332432106; + }; + perUserProjectItems = { + 890A17C912F85F730035AB6E = 890A17C912F85F730035AB6E /* PBXTextBookmark */; + 89308DB40F8E766900CAD26A = 89308DB40F8E766900CAD26A /* PBXTextBookmark */; + 89308DB60F8E766900CAD26A = 89308DB60F8E766900CAD26A /* PBXBookmark */; + 8932CF0013D08301008BC447 /* PBXTextBookmark */ = 8932CF0013D08301008BC447 /* PBXTextBookmark */; + 8932CF0113D08301008BC447 /* PBXTextBookmark */ = 8932CF0113D08301008BC447 /* PBXTextBookmark */; + 8932CF0213D08301008BC447 /* PBXTextBookmark */ = 8932CF0213D08301008BC447 /* PBXTextBookmark */; + 8932CF0313D08301008BC447 /* PlistBookmark */ = 8932CF0313D08301008BC447 /* PlistBookmark */; + 8932CF3813D08624008BC447 /* PBXTextBookmark */ = 8932CF3813D08624008BC447 /* PBXTextBookmark */; + 8932CF3913D08624008BC447 /* XCBuildMessageTextBookmark */ = 8932CF3913D08624008BC447 /* XCBuildMessageTextBookmark */; + 8932CF3A13D08624008BC447 /* PBXTextBookmark */ = 8932CF3A13D08624008BC447 /* PBXTextBookmark */; + 8932CF3F13D0866F008BC447 /* PBXTextBookmark */ = 8932CF3F13D0866F008BC447 /* PBXTextBookmark */; + 8932CF4413D08686008BC447 /* PlistBookmark */ = 8932CF4413D08686008BC447 /* PlistBookmark */; + 8932CF4513D08686008BC447 /* PBXTextBookmark */ = 8932CF4513D08686008BC447 /* PBXTextBookmark */; + 8932CF4613D08686008BC447 /* PBXTextBookmark */ = 8932CF4613D08686008BC447 /* PBXTextBookmark */; + 8932CF4713D08686008BC447 /* PBXTextBookmark */ = 8932CF4713D08686008BC447 /* PBXTextBookmark */; + 8932CF4813D08686008BC447 /* PlistBookmark */ = 8932CF4813D08686008BC447 /* PlistBookmark */; + 8932CF4913D08686008BC447 /* PBXTextBookmark */ = 8932CF4913D08686008BC447 /* PBXTextBookmark */; + 8932CF4A13D08686008BC447 /* PBXTextBookmark */ = 8932CF4A13D08686008BC447 /* PBXTextBookmark */; + 8932CF4B13D08686008BC447 /* PBXTextBookmark */ = 8932CF4B13D08686008BC447 /* PBXTextBookmark */; + 8932CF4C13D08686008BC447 /* PBXTextBookmark */ = 8932CF4C13D08686008BC447 /* PBXTextBookmark */; + 8932CF4D13D08686008BC447 /* PBXTextBookmark */ = 8932CF4D13D08686008BC447 /* PBXTextBookmark */; + 8932CF4E13D08686008BC447 /* PBXTextBookmark */ = 8932CF4E13D08686008BC447 /* PBXTextBookmark */; + 8932CF4F13D08686008BC447 /* PBXTextBookmark */ = 8932CF4F13D08686008BC447 /* PBXTextBookmark */; + 8932CF5313D086C6008BC447 /* PBXTextBookmark */ = 8932CF5313D086C6008BC447 /* PBXTextBookmark */; + 8932CF5413D086C6008BC447 /* PBXTextBookmark */ = 8932CF5413D086C6008BC447 /* PBXTextBookmark */; + 8932CF5513D086C6008BC447 /* PBXTextBookmark */ = 8932CF5513D086C6008BC447 /* PBXTextBookmark */; + 8932CF5613D086C6008BC447 /* PBXTextBookmark */ = 8932CF5613D086C6008BC447 /* PBXTextBookmark */; + 8932CF5713D086C6008BC447 /* PBXTextBookmark */ = 8932CF5713D086C6008BC447 /* PBXTextBookmark */; + 8932CF5E13D08723008BC447 /* PBXTextBookmark */ = 8932CF5E13D08723008BC447 /* PBXTextBookmark */; + 8932CF5F13D08723008BC447 /* PBXTextBookmark */ = 8932CF5F13D08723008BC447 /* PBXTextBookmark */; + 8932CF6013D08723008BC447 /* PBXTextBookmark */ = 8932CF6013D08723008BC447 /* PBXTextBookmark */; + 8932CF6113D08723008BC447 /* PBXTextBookmark */ = 8932CF6113D08723008BC447 /* PBXTextBookmark */; + 8932CF6213D08723008BC447 /* PBXTextBookmark */ = 8932CF6213D08723008BC447 /* PBXTextBookmark */; + 8932CF6813D0872F008BC447 /* PBXTextBookmark */ = 8932CF6813D0872F008BC447 /* PBXTextBookmark */; + 8932CF6913D0872F008BC447 /* PBXTextBookmark */ = 8932CF6913D0872F008BC447 /* PBXTextBookmark */; + 8932CF6A13D0872F008BC447 /* PBXTextBookmark */ = 8932CF6A13D0872F008BC447 /* PBXTextBookmark */; + 8932CF6E13D08738008BC447 /* PBXTextBookmark */ = 8932CF6E13D08738008BC447 /* PBXTextBookmark */; + 8932CF8413D08872008BC447 /* PBXTextBookmark */ = 8932CF8413D08872008BC447 /* PBXTextBookmark */; + 8932CF8513D08872008BC447 /* PBXTextBookmark */ = 8932CF8513D08872008BC447 /* PBXTextBookmark */; + 8932CF8713D08872008BC447 /* PBXTextBookmark */ = 8932CF8713D08872008BC447 /* PBXTextBookmark */; + 8932CF8913D08872008BC447 /* PlistBookmark */ = 8932CF8913D08872008BC447 /* PlistBookmark */; + 8932CF8A13D08872008BC447 /* PBXTextBookmark */ = 8932CF8A13D08872008BC447 /* PBXTextBookmark */; + 8932CF8B13D08872008BC447 /* PBXTextBookmark */ = 8932CF8B13D08872008BC447 /* PBXTextBookmark */; + 8932CF8C13D08872008BC447 /* PBXTextBookmark */ = 8932CF8C13D08872008BC447 /* PBXTextBookmark */; + 8932CF8D13D08872008BC447 /* PBXTextBookmark */ = 8932CF8D13D08872008BC447 /* PBXTextBookmark */; + 8932CF9613D089FC008BC447 /* PBXTextBookmark */ = 8932CF9613D089FC008BC447 /* PBXTextBookmark */; + 8932CF9813D089FC008BC447 /* PBXTextBookmark */ = 8932CF9813D089FC008BC447 /* PBXTextBookmark */; + 8932CF9A13D089FC008BC447 /* PBXTextBookmark */ = 8932CF9A13D089FC008BC447 /* PBXTextBookmark */; + 8932CF9B13D089FC008BC447 /* PBXTextBookmark */ = 8932CF9B13D089FC008BC447 /* PBXTextBookmark */; + 8932CF9D13D089FC008BC447 /* PBXTextBookmark */ = 8932CF9D13D089FC008BC447 /* PBXTextBookmark */; + 8932CF9F13D089FC008BC447 /* PBXTextBookmark */ = 8932CF9F13D089FC008BC447 /* PBXTextBookmark */; + 8932CFA113D089FC008BC447 /* PBXTextBookmark */ = 8932CFA113D089FC008BC447 /* PBXTextBookmark */; + 8932CFA313D089FC008BC447 /* PBXTextBookmark */ = 8932CFA313D089FC008BC447 /* PBXTextBookmark */; + 8932CFA513D089FC008BC447 /* PBXTextBookmark */ = 8932CFA513D089FC008BC447 /* PBXTextBookmark */; + 8932CFA713D089FC008BC447 /* PBXTextBookmark */ = 8932CFA713D089FC008BC447 /* PBXTextBookmark */; + 8932CFA913D089FC008BC447 /* PBXTextBookmark */ = 8932CFA913D089FC008BC447 /* PBXTextBookmark */; + 8932CFAB13D089FC008BC447 /* PBXTextBookmark */ = 8932CFAB13D089FC008BC447 /* PBXTextBookmark */; + 8932CFAC13D089FC008BC447 /* PlistBookmark */ = 8932CFAC13D089FC008BC447 /* PlistBookmark */; + 8932CFAD13D089FC008BC447 /* PBXTextBookmark */ = 8932CFAD13D089FC008BC447 /* PBXTextBookmark */; + 8932CFAE13D089FC008BC447 /* PBXTextBookmark */ = 8932CFAE13D089FC008BC447 /* PBXTextBookmark */; + 8932CFB013D08A0E008BC447 /* PBXTextBookmark */ = 8932CFB013D08A0E008BC447 /* PBXTextBookmark */; + 8932CFB313D08A1C008BC447 /* PBXTextBookmark */ = 8932CFB313D08A1C008BC447 /* PBXTextBookmark */; + 8932CFB713D08A2E008BC447 /* PBXTextBookmark */ = 8932CFB713D08A2E008BC447 /* PBXTextBookmark */; + 8932CFBB13D08A47008BC447 /* PBXTextBookmark */ = 8932CFBB13D08A47008BC447 /* PBXTextBookmark */; + 8932CFC113D08A6F008BC447 /* PBXTextBookmark */ = 8932CFC113D08A6F008BC447 /* PBXTextBookmark */; + 8932CFC213D08A6F008BC447 /* PBXTextBookmark */ = 8932CFC213D08A6F008BC447 /* PBXTextBookmark */; + 8932CFC313D08A6F008BC447 /* PBXTextBookmark */ = 8932CFC313D08A6F008BC447 /* PBXTextBookmark */; + 8932CFC413D08A6F008BC447 /* PBXTextBookmark */ = 8932CFC413D08A6F008BC447 /* PBXTextBookmark */; + 8932CFC513D08A6F008BC447 /* PBXTextBookmark */ = 8932CFC513D08A6F008BC447 /* PBXTextBookmark */; + 8932CFC913D08A79008BC447 /* PBXTextBookmark */ = 8932CFC913D08A79008BC447 /* PBXTextBookmark */; + 8932CFD313D08A89008BC447 /* PBXTextBookmark */ = 8932CFD313D08A89008BC447 /* PBXTextBookmark */; + 8932CFE013D08AAF008BC447 /* PBXTextBookmark */ = 8932CFE013D08AAF008BC447 /* PBXTextBookmark */; + 8932CFE113D08AAF008BC447 /* PBXTextBookmark */ = 8932CFE113D08AAF008BC447 /* PBXTextBookmark */; + 8932CFEC13D08B41008BC447 /* PBXTextBookmark */ = 8932CFEC13D08B41008BC447 /* PBXTextBookmark */; + 8932CFED13D08B41008BC447 /* PBXTextBookmark */ = 8932CFED13D08B41008BC447 /* PBXTextBookmark */; + 8932CFF413D08D3F008BC447 /* PBXTextBookmark */ = 8932CFF413D08D3F008BC447 /* PBXTextBookmark */; + 8932D00113D08E1C008BC447 /* PBXTextBookmark */ = 8932D00113D08E1C008BC447 /* PBXTextBookmark */; + 8932D00213D08E1C008BC447 /* PBXTextBookmark */ = 8932D00213D08E1C008BC447 /* PBXTextBookmark */; + 8932D00313D08E1C008BC447 /* PBXTextBookmark */ = 8932D00313D08E1C008BC447 /* PBXTextBookmark */; + 8932D00A13D08EA6008BC447 /* PBXTextBookmark */ = 8932D00A13D08EA6008BC447 /* PBXTextBookmark */; + 8932D00D13D08EDC008BC447 /* PBXTextBookmark */ = 8932D00D13D08EDC008BC447 /* PBXTextBookmark */; + 8932D00E13D08EDC008BC447 /* PBXTextBookmark */ = 8932D00E13D08EDC008BC447 /* PBXTextBookmark */; + 894FF4C50F8E2D15001D216F = 894FF4C50F8E2D15001D216F /* PBXTextBookmark */; + 894FF4C60F8E2D15001D216F = 894FF4C60F8E2D15001D216F /* PBXTextBookmark */; + 8958CFD713CCBB4B00CD36E8 = 8958CFD713CCBB4B00CD36E8 /* PBXTextBookmark */; + 8958CFD813CCBB4B00CD36E8 = 8958CFD813CCBB4B00CD36E8 /* PBXTextBookmark */; + 8958CFDB13CCBB4B00CD36E8 = 8958CFDB13CCBB4B00CD36E8 /* PBXTextBookmark */; + 89725C181040B53F0022B471 = 89725C181040B53F0022B471 /* PBXTextBookmark */; + 8983474913CE6B080004A046 = 8983474913CE6B080004A046 /* PlistBookmark */; + 89895DB713CF4C58001946EC = 89895DB713CF4C58001946EC /* PBXTextBookmark */; + 89895DD013CF4CB2001946EC = 89895DD013CF4CB2001946EC /* PBXTextBookmark */; + 89895DD513CF4CCC001946EC = 89895DD513CF4CCC001946EC /* PBXTextBookmark */; + 89895DD613CF4CCC001946EC = 89895DD613CF4CCC001946EC /* PBXTextBookmark */; + 89895DD713CF4CCC001946EC = 89895DD713CF4CCC001946EC /* PBXTextBookmark */; + 89895DE713CF4D5B001946EC = 89895DE713CF4D5B001946EC /* PBXTextBookmark */; + 89895DE813CF4D5B001946EC = 89895DE813CF4D5B001946EC /* PBXTextBookmark */; + 89895DEA13CF5578001946EC = 89895DEA13CF5578001946EC /* PBXTextBookmark */; + 89A8F55D10AF25D100EC1E00 = 89A8F55D10AF25D100EC1E00 /* PBXTextBookmark */; + 89C456A913CD08B0003CCEF0 = 89C456A913CD08B0003CCEF0 /* PBXTextBookmark */; + 89C598A70F8CE99600E51414 = 89C598A70F8CE99600E51414 /* PBXTextBookmark */; + 89C599950F8D080200E51414 = 89C599950F8D080200E51414 /* PBXTextBookmark */; + 89C599970F8D080200E51414 = 89C599970F8D080200E51414 /* PBXTextBookmark */; + }; + sourceControlManager = 89C053BA0ADAB7550037CA16 /* Source Control */; + userBookmarkGroup = 892A7F310B10B7550041B493 /* PBXBookmarkGroup */; + userBuildSettings = { + }; + }; + 29B97316FDCFA39411CA2CEA /* main.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {922, 580}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 971}"; + sepNavVisRect = "{{0, 0}, {949, 421}}"; + sepNavWindowFrame = "{{15, 71}, {981, 708}}"; + }; + }; + 32CA4F630368D1EE00C91783 /* FanControl_Prefix.pch */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1011, 590}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 151}"; + sepNavVisRect = "{{0, 0}, {927, 255}}"; + }; + }; + 89033CA10B80E1DF00FDAF43 /* English */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1291, 1003}}"; + sepNavSelRange = "{27, 0}"; + sepNavVisRect = "{{0, 23}, {1291, 809}}"; + sepNavWindowFrame = "{{38, 41}, {1215, 711}}"; + }; + }; + 89033D900B80F61E00FDAF43 /* German */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1422, 947}}"; + sepNavSelRange = "{27, 0}"; + sepNavVisRect = "{{0, 0}, {1422, 609}}"; + sepNavWindowFrame = "{{15, 62}, {1215, 711}}"; + }; + }; + 890A17C912F85F730035AB6E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 892A7F430B10B7700041B493 /* MachineDefaults.h */; + name = "MachineDefaults.h: 28"; + rLen = 0; + rLoc = 978; + rType = 0; + vrLen = 879; + vrLoc = 267; + }; + 891682780AEBB14F00888535 /* StatusItemWindow.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1408, 599}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 959}"; + sepNavVisRect = "{{0, 14}, {949, 421}}"; + }; + }; + 891682790AEBB14F00888535 /* StatusItemWindow.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1344, 569}}"; + sepNavSelRange = "{872, 0}"; + sepNavVisRange = "{0, 1071}"; + sepNavVisRect = "{{0, 28}, {949, 421}}"; + }; + }; + 891683E70AEBD95B00888535 /* smcWrapper.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1277, 794}}"; + sepNavSelRange = "{517, 0}"; + sepNavVisRange = "{0, 1258}"; + sepNavVisRect = "{{0, 139}, {949, 421}}"; + sepNavWindowFrame = "{{15, 70}, {1280, 703}}"; + }; + }; + 891683E80AEBD95B00888535 /* smcWrapper.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1277, 2483}}"; + sepNavSelRange = "{889, 0}"; + sepNavVisRange = "{0, 1792}"; + sepNavVisRect = "{{0, 279}, {947, 421}}"; + sepNavWindowFrame = "{{38, 88}, {1215, 690}}"; + }; + }; + 8917FB850ADEECAD00443DA1 /* paypal.gif */ = { + uiCtxt = { + sepNavWindowFrame = "{{15, 75}, {1157, 698}}"; + }; + }; + 892A7F310B10B7550041B493 /* PBXBookmarkGroup */ = { + isa = PBXBookmarkGroup; + children = ( + 892A7F560B10B7B10041B493 /* PBXTextBookmark */, + ); + name = Root; + }; + 892A7F430B10B7700041B493 /* MachineDefaults.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1011, 494}}"; + sepNavSelRange = "{978, 0}"; + sepNavVisRange = "{267, 879}"; + sepNavVisRect = "{{0, 0}, {1011, 421}}"; + sepNavWindowFrame = "{{15, 62}, {1215, 711}}"; + }; + }; + 892A7F440B10B7700041B493 /* MachineDefaults.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {2609, 1872}}"; + sepNavSelRange = "{3254, 0}"; + sepNavVisRange = "{1752, 1872}"; + sepNavVisRect = "{{0, 13}, {949, 421}}"; + sepNavWindowFrame = "{{15, 62}, {1215, 711}}"; + }; + }; + 892A7F560B10B7B10041B493 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = System; + rLen = 0; + rLoc = 1636; + rType = 0; + vrLen = 950; + vrLoc = 1600; + }; + 89308DB40F8E766900CAD26A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894DC9E30F8AA36F006A046F /* Spanish */; + name = "Spanish: 41"; + rLen = 0; + rLoc = 4253; + rType = 0; + vrLen = 3484; + vrLoc = 0; + }; + 89308DB60F8E766900CAD26A /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 89B2431F0B7E351000CAD103 /* smcfancontrol_v2.icns */; + }; + 8932CF0013D08301008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 891683E80AEBD95B00888535 /* smcWrapper.m */; + name = "smcWrapper.m: 27"; + rLen = 0; + rLoc = 961; + rType = 0; + vrLen = 1373; + vrLoc = 0; + }; + 8932CF0113D08301008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 893506130B440249001BFBA5 /* English */; + name = "Localizable.strings: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 0; + vrLoc = 0; + }; + 8932CF0213D08301008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C165DFE840E0CC02AAC07 /* English */; + name = "InfoPlist.strings: 3"; + rLen = 0; + rLoc = 98; + rType = 0; + vrLen = 114; + vrLoc = 0; + }; + 8932CF0313D08301008BC447 /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 8D1107310486CEB800E47090 /* Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + ); + name = /Users/hendrikh/Development/iPhoneDev/smcFanControl/Info.plist; + rLen = 0; + rLoc = 9223372036854775807; + }; + 8932CF2213D0850F008BC447 /* SystemVersion.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1408, 923}}"; + sepNavSelRange = "{2059, 0}"; + sepNavVisRange = "{1111, 1161}"; + }; + }; + 8932CF2313D08551008BC447 /* SystemVersion.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1277, 2821}}"; + sepNavSelRange = "{6107, 0}"; + sepNavVisRange = "{5079, 1829}"; + }; + }; + 8932CF3813D08624008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF2213D0850F008BC447 /* SystemVersion.h */; + name = "SystemVersion.h: 71"; + rLen = 0; + rLoc = 2271; + rType = 0; + vrLen = 823; + vrLoc = 1477; + }; + 8932CF3913D08624008BC447 /* XCBuildMessageTextBookmark */ = { + isa = PBXTextBookmark; + comments = "'NSUInteger' undeclared (first use in this function)"; + fRef = 8932CF2313D08551008BC447 /* SystemVersion.m */; + fallbackIsa = XCBuildMessageTextBookmark; + rLen = 1; + rLoc = 75; + rType = 1; + }; + 8932CF3A13D08624008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF2313D08551008BC447 /* SystemVersion.m */; + name = "SystemVersion.m: 195"; + rLen = 6; + rLoc = 6372; + rType = 0; + vrLen = 1033; + vrLoc = 5923; + }; + 8932CF3F13D0866F008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF2313D08551008BC447 /* SystemVersion.m */; + name = "SystemVersion.m: 195"; + rLen = 6; + rLoc = 6372; + rType = 0; + vrLen = 1079; + vrLoc = 5923; + }; + 8932CF4413D08686008BC447 /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 8D1107310486CEB800E47090 /* Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + ); + name = /Users/hendrikh/Development/iPhoneDev/smcFanControl/Info.plist; + rLen = 0; + rLoc = 9223372036854775807; + }; + 8932CF4513D08686008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 89033CA10B80E1DF00FDAF43 /* English */; + name = "English: 1"; + rLen = 0; + rLoc = 27; + rType = 0; + vrLen = 3919; + vrLoc = 0; + }; + 8932CF4613D08686008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 89033D900B80F61E00FDAF43 /* German */; + name = "German: 1"; + rLen = 0; + rLoc = 27; + rType = 0; + vrLen = 3919; + vrLoc = 0; + }; + 8932CF4713D08686008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894DC9E30F8AA36F006A046F /* Spanish */; + name = "Spanish: 1"; + rLen = 0; + rLoc = 28; + rType = 0; + vrLen = 4393; + vrLoc = 557; + }; + 8932CF4813D08686008BC447 /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 89E7D3640ADE819B000F67AB /* Machines.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + ); + name = /Users/hendrikh/Development/iPhoneDev/smcFanControl/Machines.plist; + rLen = 0; + rLoc = 9223372036854775807; + }; + 8932CF4913D08686008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 893506130B440249001BFBA5 /* English */; + name = "Localizable.strings: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 0; + vrLoc = 0; + }; + 8932CF4A13D08686008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C165DFE840E0CC02AAC07 /* English */; + name = "InfoPlist.strings: 3"; + rLen = 0; + rLoc = 98; + rType = 0; + vrLen = 114; + vrLoc = 0; + }; + 8932CF4B13D08686008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894DC9E40F8AA37C006A046F /* Spanish */; + name = "InfoPlist.strings: 3"; + rLen = 0; + rLoc = 114; + rType = 0; + vrLen = 114; + vrLoc = 0; + }; + 8932CF4C13D08686008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 88"; + rLen = 0; + rLoc = 2230; + rType = 0; + vrLen = 1514; + vrLoc = 2038; + }; + 8932CF4D13D08686008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF2213D0850F008BC447 /* SystemVersion.h */; + name = "SystemVersion.h: 22"; + rLen = 0; + rLoc = 766; + rType = 0; + vrLen = 1592; + vrLoc = 0; + }; + 8932CF4E13D08686008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF2313D08551008BC447 /* SystemVersion.m */; + name = "SystemVersion.m: 19"; + rLen = 0; + rLoc = 643; + rType = 0; + vrLen = 1753; + vrLoc = 26; + }; + 8932CF4F13D08686008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF2313D08551008BC447 /* SystemVersion.m */; + name = "SystemVersion.m: 39"; + rLen = 0; + rLoc = 1278; + rType = 0; + vrLen = 1163; + vrLoc = 5981; + }; + 8932CF5313D086C6008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 891683E70AEBD95B00888535 /* smcWrapper.h */; + name = "smcWrapper.h: 15"; + rLen = 0; + rLoc = 517; + rType = 0; + vrLen = 1258; + vrLoc = 0; + }; + 8932CF5413D086C6008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF2313D08551008BC447 /* SystemVersion.m */; + name = "SystemVersion.m: 39"; + rLen = 0; + rLoc = 1278; + rType = 0; + vrLen = 1141; + vrLoc = 5205; + }; + 8932CF5513D086C6008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF2213D0850F008BC447 /* SystemVersion.h */; + name = "SystemVersion.h: 22"; + rLen = 0; + rLoc = 766; + rType = 0; + vrLen = 1396; + vrLoc = 778; + }; + 8932CF5613D086C6008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 89"; + rLen = 0; + rLoc = 2230; + rType = 0; + vrLen = 1509; + vrLoc = 2038; + }; + 8932CF5713D086C6008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 89"; + rLen = 0; + rLoc = 2230; + rType = 0; + vrLen = 1494; + vrLoc = 2060; + }; + 8932CF5E13D08723008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 89"; + rLen = 0; + rLoc = 2230; + rType = 0; + vrLen = 1494; + vrLoc = 2060; + }; + 8932CF5F13D08723008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 892A7F440B10B7700041B493 /* MachineDefaults.m */; + name = "MachineDefaults.m: 92"; + rLen = 0; + rLoc = 3254; + rType = 0; + vrLen = 1872; + vrLoc = 1752; + }; + 8932CF6013D08723008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF2213D0850F008BC447 /* SystemVersion.h */; + name = "SystemVersion.h: 63"; + rLen = 0; + rLoc = 2059; + rType = 0; + vrLen = 1161; + vrLoc = 1111; + }; + 8932CF6113D08723008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF2313D08551008BC447 /* SystemVersion.m */; + name = "SystemVersion.m: 24"; + rLen = 42; + rLoc = 724; + rType = 0; + vrLen = 1800; + vrLoc = 68; + }; + 8932CF6213D08723008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF2313D08551008BC447 /* SystemVersion.m */; + name = "SystemVersion.m: 184"; + rLen = 0; + rLoc = 6107; + rType = 0; + vrLen = 1388; + vrLoc = 5369; + }; + 8932CF6813D0872F008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF2313D08551008BC447 /* SystemVersion.m */; + name = "SystemVersion.m: 184"; + rLen = 0; + rLoc = 6107; + rType = 0; + vrLen = 1417; + vrLoc = 5369; + }; + 8932CF6913D0872F008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 89"; + rLen = 0; + rLoc = 2230; + rType = 0; + vrLen = 1526; + vrLoc = 2038; + }; + 8932CF6A13D0872F008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 89"; + rLen = 0; + rLoc = 2230; + rType = 0; + vrLen = 1376; + vrLoc = 2194; + }; + 8932CF6E13D08738008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 95"; + rLen = 0; + rLoc = 2366; + rType = 0; + vrLen = 1412; + vrLoc = 2201; + }; + 8932CF8413D08872008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A465F0ADBD6CF008785F3 /* FanControl.h */; + name = "FanControl.h: 98"; + rLen = 0; + rLoc = 2007; + rType = 0; + vrLen = 1228; + vrLoc = 0; + }; + 8932CF8513D08872008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF8613D08872008BC447 /* Sparkle.h */; + name = "Sparkle.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 513; + vrLoc = 0; + }; + 8932CF8613D08872008BC447 /* Sparkle.h */ = { + isa = PBXFileReference; + name = Sparkle.h; + path = /Users/hendrikh/Development/iPhoneDev/smcFanControl/Sparkle.framework/Headers/Sparkle.h; + sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1277, 569}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 513}"; + }; + }; + 8932CF8713D08872008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF8813D08872008BC447 /* SUUpdater.h */; + name = "SUUpdater.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1925; + vrLoc = 243; + }; + 8932CF8813D08872008BC447 /* SUUpdater.h */ = { + isa = PBXFileReference; + name = SUUpdater.h; + path = /Users/hendrikh/Development/iPhoneDev/smcFanControl/Sparkle.framework/Headers/SUUpdater.h; + sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1277, 715}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{243, 1925}"; + }; + }; + 8932CF8913D08872008BC447 /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 8D1107310486CEB800E47090 /* Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + SUFeedURL, + ); + name = /Users/hendrikh/Development/iPhoneDev/smcFanControl/Info.plist; + rLen = 0; + rLoc = 9223372036854775807; + }; + 8932CF8A13D08872008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF2313D08551008BC447 /* SystemVersion.m */; + name = "SystemVersion.m: 184"; + rLen = 0; + rLoc = 6107; + rType = 0; + vrLen = 1397; + vrLoc = 5389; + }; + 8932CF8B13D08872008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 891682790AEBB14F00888535 /* StatusItemWindow.m */; + name = "StatusItemWindow.m: 24"; + rLen = 0; + rLoc = 872; + rType = 0; + vrLen = 1071; + vrLoc = 0; + }; + 8932CF8C13D08872008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 29"; + rLen = 9; + rLoc = 1017; + rType = 0; + vrLen = 1221; + vrLoc = 262; + }; + 8932CF8D13D08872008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 510"; + rLen = 0; + rLoc = 18028; + rType = 0; + vrLen = 1663; + vrLoc = 17199; + }; + 8932CF9613D089FC008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF9713D089FC008BC447 /* SUUpdateAlert.h */; + name = "SUUpdateAlert.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 888; + vrLoc = 0; + }; + 8932CF9713D089FC008BC447 /* SUUpdateAlert.h */ = { + isa = PBXFileReference; + name = SUUpdateAlert.h; + path = /Users/hendrikh/Development/iPhoneDev/smcFanControl/Sparkle.framework/Headers/SUUpdateAlert.h; + sourceTree = ""; + }; + 8932CF9813D089FC008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF9913D089FC008BC447 /* SUUtilities.h */; + name = "SUUtilities.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 568; + vrLoc = 0; + }; + 8932CF9913D089FC008BC447 /* SUUtilities.h */ = { + isa = PBXFileReference; + name = SUUtilities.h; + path = /Users/hendrikh/Development/iPhoneDev/smcFanControl/Sparkle.framework/Headers/SUUtilities.h; + sourceTree = ""; + }; + 8932CF9A13D089FC008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF8613D08872008BC447 /* Sparkle.h */; + name = "Sparkle.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 513; + vrLoc = 0; + }; + 8932CF9B13D089FC008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF9C13D089FC008BC447 /* SUUnarchiver.h */; + name = "SUUnarchiver.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 529; + vrLoc = 0; + }; + 8932CF9C13D089FC008BC447 /* SUUnarchiver.h */ = { + isa = PBXFileReference; + name = SUUnarchiver.h; + path = /Users/hendrikh/Development/iPhoneDev/smcFanControl/Sparkle.framework/Headers/SUUnarchiver.h; + sourceTree = ""; + }; + 8932CF9D13D089FC008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF9E13D089FC008BC447 /* SUConstants.h */; + name = "SUConstants.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 587; + vrLoc = 0; + }; + 8932CF9E13D089FC008BC447 /* SUConstants.h */ = { + isa = PBXFileReference; + name = SUConstants.h; + path = /Users/hendrikh/Development/iPhoneDev/smcFanControl/Sparkle.framework/Headers/SUConstants.h; + sourceTree = ""; + }; + 8932CF9F13D089FC008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CFA013D089FC008BC447 /* SUAppcastItem.h */; + name = "SUAppcastItem.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 871; + vrLoc = 0; + }; + 8932CFA013D089FC008BC447 /* SUAppcastItem.h */ = { + isa = PBXFileReference; + name = SUAppcastItem.h; + path = /Users/hendrikh/Development/iPhoneDev/smcFanControl/Sparkle.framework/Headers/SUAppcastItem.h; + sourceTree = ""; + }; + 8932CFA113D089FC008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CFA213D089FC008BC447 /* SUAppcast.h */; + name = "SUAppcast.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 479; + vrLoc = 0; + }; + 8932CFA213D089FC008BC447 /* SUAppcast.h */ = { + isa = PBXFileReference; + name = SUAppcast.h; + path = /Users/hendrikh/Development/iPhoneDev/smcFanControl/Sparkle.framework/Headers/SUAppcast.h; + sourceTree = ""; + }; + 8932CFA313D089FC008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CFA413D089FC008BC447 /* RSS.h */; + name = "RSS.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1731; + vrLoc = 0; + }; + 8932CFA413D089FC008BC447 /* RSS.h */ = { + isa = PBXFileReference; + name = RSS.h; + path = /Users/hendrikh/Development/iPhoneDev/smcFanControl/Sparkle.framework/Headers/RSS.h; + sourceTree = ""; + }; + 8932CFA513D089FC008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CFA613D089FC008BC447 /* NSFileManager+Verification.h */; + name = "NSFileManager+Verification.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 412; + vrLoc = 0; + }; + 8932CFA613D089FC008BC447 /* NSFileManager+Verification.h */ = { + isa = PBXFileReference; + name = "NSFileManager+Verification.h"; + path = "/Users/hendrikh/Development/iPhoneDev/smcFanControl/Sparkle.framework/Headers/NSFileManager+Verification.h"; + sourceTree = ""; + }; + 8932CFA713D089FC008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CFA813D089FC008BC447 /* NSFileManager+Authentication.h */; + name = "NSFileManager+Authentication.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 287; + vrLoc = 0; + }; + 8932CFA813D089FC008BC447 /* NSFileManager+Authentication.h */ = { + isa = PBXFileReference; + name = "NSFileManager+Authentication.h"; + path = "/Users/hendrikh/Development/iPhoneDev/smcFanControl/Sparkle.framework/Headers/NSFileManager+Authentication.h"; + sourceTree = ""; + }; + 8932CFA913D089FC008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CFAA13D089FC008BC447 /* NSApplication+AppCopies.h */; + name = "NSApplication+AppCopies.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 241; + vrLoc = 0; + }; + 8932CFAA13D089FC008BC447 /* NSApplication+AppCopies.h */ = { + isa = PBXFileReference; + name = "NSApplication+AppCopies.h"; + path = "/Users/hendrikh/Development/iPhoneDev/smcFanControl/Sparkle.framework/Headers/NSApplication+AppCopies.h"; + sourceTree = ""; + }; + 8932CFAB13D089FC008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF8813D08872008BC447 /* SUUpdater.h */; + name = "SUUpdater.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1925; + vrLoc = 243; + }; + 8932CFAC13D089FC008BC447 /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 8D1107310486CEB800E47090 /* Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + NSPrincipalClass, + ); + name = /Users/hendrikh/Development/iPhoneDev/smcFanControl/Info.plist; + rLen = 0; + rLoc = 9223372036854775807; + }; + 8932CFAD13D089FC008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 510"; + rLen = 0; + rLoc = 18028; + rType = 0; + vrLen = 2082; + vrLoc = 17006; + }; + 8932CFAE13D089FC008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 136"; + rLen = 0; + rLoc = 3893; + rType = 0; + vrLen = 2171; + vrLoc = 2388; + }; + 8932CFB013D08A0E008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 151"; + rLen = 0; + rLoc = 4458; + rType = 0; + vrLen = 2252; + vrLoc = 2388; + }; + 8932CFB313D08A1C008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 151"; + rLen = 0; + rLoc = 4449; + rType = 0; + vrLen = 2187; + vrLoc = 2437; + }; + 8932CFB713D08A2E008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 133"; + rLen = 0; + rLoc = 3743; + rType = 0; + vrLen = 2186; + vrLoc = 2485; + }; + 8932CFBB13D08A47008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 133"; + rLen = 0; + rLoc = 3743; + rType = 0; + vrLen = 2171; + vrLoc = 2485; + }; + 8932CFC113D08A6F008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 133"; + rLen = 0; + rLoc = 3743; + rType = 0; + vrLen = 2354; + vrLoc = 2526; + }; + 8932CFC213D08A6F008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 89C053BC0ADAB7630037CA16 /* smc.c */; + name = "smc.c: 190"; + rLen = 0; + rLoc = 4720; + rType = 0; + vrLen = 1965; + vrLoc = 3934; + }; + 8932CFC313D08A6F008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8932CF2313D08551008BC447 /* SystemVersion.m */; + name = "SystemVersion.m: 184"; + rLen = 0; + rLoc = 6107; + rType = 0; + vrLen = 1829; + vrLoc = 5079; + }; + 8932CFC413D08A6F008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 891683E70AEBD95B00888535 /* smcWrapper.h */; + name = "smcWrapper.h: 15"; + rLen = 0; + rLoc = 517; + rType = 0; + vrLen = 1258; + vrLoc = 0; + }; + 8932CFC513D08A6F008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 891683E80AEBD95B00888535 /* smcWrapper.m */; + name = "smcWrapper.m: 175"; + rLen = 0; + rLoc = 4769; + rType = 0; + vrLen = 1704; + vrLoc = 3479; + }; + 8932CFC913D08A79008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 891683E80AEBD95B00888535 /* smcWrapper.m */; + name = "smcWrapper.m: 175"; + rLen = 0; + rLoc = 4769; + rType = 0; + vrLen = 1785; + vrLoc = 0; + }; + 8932CFD313D08A89008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 891683E80AEBD95B00888535 /* smcWrapper.m */; + name = "smcWrapper.m: 30"; + rLen = 0; + rLoc = 995; + rType = 0; + vrLen = 1789; + vrLoc = 3; + }; + 8932CFE013D08AAF008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 891683E80AEBD95B00888535 /* smcWrapper.m */; + name = "smcWrapper.m: 30"; + rLen = 0; + rLoc = 995; + rType = 0; + vrLen = 1822; + vrLoc = 3; + }; + 8932CFE113D08AAF008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 891683E80AEBD95B00888535 /* smcWrapper.m */; + name = "smcWrapper.m: 25"; + rLen = 0; + rLoc = 889; + rType = 0; + vrLen = 1792; + vrLoc = 0; + }; + 8932CFEC13D08B41008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 891683E80AEBD95B00888535 /* smcWrapper.m */; + name = "smcWrapper.m: 25"; + rLen = 0; + rLoc = 889; + rType = 0; + vrLen = 1792; + vrLoc = 0; + }; + 8932CFED13D08B41008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 89C053BD0ADAB7630037CA16 /* smc.h */; + name = "smc.h: 24"; + rLen = 0; + rLoc = 883; + rType = 0; + vrLen = 1912; + vrLoc = 3; + }; + 8932CFF413D08D3F008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 89C053BD0ADAB7630037CA16 /* smc.h */; + name = "smc.h: 24"; + rLen = 0; + rLoc = 883; + rType = 0; + vrLen = 1912; + vrLoc = 3; + }; + 8932D00113D08E1C008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 89C053BD0ADAB7630037CA16 /* smc.h */; + name = "smc.h: 24"; + rLen = 0; + rLoc = 883; + rType = 0; + vrLen = 1912; + vrLoc = 3; + }; + 8932D00213D08E1C008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 89033CA10B80E1DF00FDAF43 /* English */; + name = "English: 1"; + rLen = 0; + rLoc = 27; + rType = 0; + vrLen = 5117; + vrLoc = 0; + }; + 8932D00313D08E1C008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 89033CA10B80E1DF00FDAF43 /* English */; + name = "English: 1"; + rLen = 0; + rLoc = 27; + rType = 0; + vrLen = 5118; + vrLoc = 0; + }; + 8932D00A13D08EA6008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 89033CA10B80E1DF00FDAF43 /* English */; + name = "English: 1"; + rLen = 0; + rLoc = 27; + rType = 0; + vrLen = 5118; + vrLoc = 0; + }; + 8932D00D13D08EDC008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 89033CA10B80E1DF00FDAF43 /* English */; + name = "English: 1"; + rLen = 0; + rLoc = 27; + rType = 0; + vrLen = 5118; + vrLoc = 0; + }; + 8932D00E13D08EDC008BC447 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 137"; + rLen = 0; + rLoc = 3902; + rType = 0; + vrLen = 2354; + vrLoc = 2526; + }; + 893506130B440249001BFBA5 /* English */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1408, 594}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 0}"; + sepNavVisRect = "{{0, 0}, {947, 421}}"; + sepNavWindowFrame = "{{15, 43}, {1215, 711}}"; + }; + }; + 8935061B0B440264001BFBA5 /* German */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {4220, 421}}"; + sepNavSelRange = "{95, 0}"; + sepNavVisRect = "{{0, 0}, {947, 421}}"; + sepNavWindowFrame = "{{15, 62}, {1215, 711}}"; + }; + }; + 894A465F0ADBD6CF008785F3 /* FanControl.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1408, 1898}}"; + sepNavSelRange = "{2007, 0}"; + sepNavVisRange = "{0, 1228}"; + sepNavVisRect = "{{0, 1175}, {947, 421}}"; + sepNavWindowFrame = "{{38, 44}, {981, 708}}"; + }; + }; + 894A46600ADBD6CF008785F3 /* FanControl.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1277, 9373}}"; + sepNavSelRange = "{3902, 0}"; + sepNavVisRange = "{2526, 2354}"; + sepNavVisRect = "{{0, 5422}, {947, 421}}"; + sepNavWindowFrame = "{{15, 65}, {981, 708}}"; + }; + }; + 894DC9E30F8AA36F006A046F /* Spanish */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1031, 1087}}"; + sepNavSelRange = "{28, 0}"; + sepNavVisRect = "{{0, 443}, {1031, 620}}"; + }; + }; + 894DC9E40F8AA37C006A046F /* Spanish */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1408, 571}}"; + sepNavSelRange = "{114, 0}"; + sepNavVisRange = "{0, 114}"; + sepNavWindowFrame = "{{15, 70}, {1280, 703}}"; + }; + }; + 894FF4C50F8E2D15001D216F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 89033CA10B80E1DF00FDAF43 /* English */; + name = "English: 1"; + rLen = 0; + rLoc = 27; + rType = 0; + vrLen = 3314; + vrLoc = 0; + }; + 894FF4C60F8E2D15001D216F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 89033D900B80F61E00FDAF43 /* German */; + name = "German: 1"; + rLen = 0; + rLoc = 27; + rType = 0; + vrLen = 3314; + vrLoc = 0; + }; + 8958CFD713CCBB4B00CD36E8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 29B97316FDCFA39411CA2CEA /* main.m */; + name = "main.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 971; + vrLoc = 0; + }; + 8958CFD813CCBB4B00CD36E8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 891683E70AEBD95B00888535 /* smcWrapper.h */; + name = "smcWrapper.h: 15"; + rLen = 0; + rLoc = 517; + rType = 0; + vrLen = 1258; + vrLoc = 0; + }; + 8958CFDB13CCBB4B00CD36E8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 891682790AEBB14F00888535 /* StatusItemWindow.m */; + name = "StatusItemWindow.m: 24"; + rLen = 0; + rLoc = 872; + rType = 0; + vrLen = 1071; + vrLoc = 0; + }; + 89725C181040B53F0022B471 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 32CA4F630368D1EE00C91783 /* FanControl_Prefix.pch */; + name = "FanControl_Prefix.pch: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 151; + vrLoc = 0; + }; + 89725C721040B7740022B471 /* IOKitLib.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = IOKitLib.h; + path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/IOKitLib.h; + sourceTree = ""; + }; + 8983474913CE6B080004A046 /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 8D1107310486CEB800E47090 /* Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + SUFeedURL, + ); + name = /Users/hendrikh/Development/iPhoneDev/smcFanControl/Info.plist; + rLen = 0; + rLoc = 9223372036854775808; + }; + 8983497713CEFC110004A046 /* objc.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = objc.h; + path = /Developer/SDKs/MacOSX10.4u.sdk/usr/include/objc/objc.h; + sourceTree = ""; + }; + 8987FBD00B878B3900A5ED8E /* smc.png */ = { + uiCtxt = { + sepNavWindowFrame = "{{15, 62}, {1215, 711}}"; + }; + }; + 89895DB713CF4C58001946EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8983497713CEFC110004A046 /* objc.h */; + name = "objc.h: 20"; + rLen = 0; + rLoc = 934; + rType = 0; + vrLen = 1449; + vrLoc = 0; + }; + 89895DD013CF4CB2001946EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 89C053BC0ADAB7630037CA16 /* smc.c */; + name = "smc.c: 190"; + rLen = 0; + rLoc = 4720; + rType = 0; + vrLen = 1496; + vrLoc = 4161; + }; + 89895DD513CF4CCC001946EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 89C053BD0ADAB7630037CA16 /* smc.h */; + name = "smc.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1474; + vrLoc = 0; + }; + 89895DD613CF4CCC001946EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A465F0ADBD6CF008785F3 /* FanControl.h */; + name = "FanControl.h: 98"; + rLen = 0; + rLoc = 2007; + rType = 0; + vrLen = 896; + vrLoc = 1736; + }; + 89895DD713CF4CCC001946EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 891682780AEBB14F00888535 /* StatusItemWindow.h */; + name = "StatusItemWindow.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 959; + vrLoc = 0; + }; + 89895DE713CF4D5B001946EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; + name = "FanControl.m: 424"; + rLen = 5; + rLoc = 15551; + rType = 0; + vrLen = 2091; + vrLoc = 13829; + }; + 89895DE813CF4D5B001946EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 891683E80AEBD95B00888535 /* smcWrapper.m */; + name = "smcWrapper.m: 57"; + rLen = 0; + rLoc = 1659; + rType = 0; + vrLen = 1423; + vrLoc = 115; + }; + 89895DEA13CF5578001946EC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 891683E80AEBD95B00888535 /* smcWrapper.m */; + name = "smcWrapper.m: 27"; + rLen = 0; + rLoc = 961; + rType = 0; + vrLen = 1339; + vrLoc = 3; + }; + 89949E8B0AEEA37700077E93 /* Power.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1011, 938}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 1226}"; + sepNavVisRect = "{{0, 0}, {1009, 419}}"; + }; + }; + 89949E8C0AEEA37700077E93 /* Power.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1237, 2171}}"; + sepNavSelRange = "{3000, 0}"; + sepNavVisRange = "{2689, 888}"; + sepNavVisRect = "{{5, 2057}, {949, 421}}"; + sepNavWindowFrame = "{{38, 86}, {1157, 692}}"; + }; + }; + 89A8F55D10AF25D100EC1E00 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 89725C721040B7740022B471 /* IOKitLib.h */; + name = "IOKitLib.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1886; + vrLoc = 1397; + }; + 89B2431F0B7E351000CAD103 /* smcfancontrol_v2.icns */ = { + uiCtxt = { + sepNavWindowFrame = "{{15, 70}, {1280, 703}}"; + }; + }; + 89C053AD0ADAB7360037CA16 /* smcFanControl */ = { + isa = PBXExecutable; + activeArgIndices = ( + ); + argumentStrings = ( + ); + autoAttachOnCrash = 1; + breakpointsEnabled = 0; + configStateDict = { + }; + customDataFormattersEnabled = 1; + dataTipCustomDataFormattersEnabled = 1; + dataTipShowTypeColumn = 1; + dataTipSortType = 0; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = ""; + enableDebugStr = 1; + environmentEntries = ( + ); + executableSystemSymbolLevel = 0; + executableUserSymbolLevel = 0; + libgmallocEnabled = 0; + name = smcFanControl; + savedGlobals = { + }; + showTypeColumn = 0; + sourceDirectories = ( + ); + variableFormatDictionary = { + $cs = 1; + $ds = 1; + $eax = 1; + $ebp = 1; + $ebx = 1; + $ecx = 1; + $edi = 1; + $edx = 1; + $eflags = 1; + $eip = 1; + $es = 1; + $esi = 1; + $esp = 1; + $gs = 1; + $mm0 = 1; + $mm1 = 1; + $mm2 = 1; + $mm3 = 1; + $mm4 = 1; + $mm5 = 1; + $mm6 = 1; + $mm7 = 1; + $mxcsr = 1; + $ss = 1; + $xmm0 = 1; + $xmm1 = 1; + $xmm2 = 1; + $xmm3 = 1; + $xmm4 = 1; + $xmm5 = 1; + $xmm6 = 1; + $xmm7 = 1; + }; + }; + 89C053BA0ADAB7550037CA16 /* Source Control */ = { + isa = PBXSourceControlManager; + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + scmConfiguration = { + repositoryNamesForRoots = { + "" = ""; + }; + }; + scmType = ""; + }; + 89C053BB0ADAB7550037CA16 /* Code sense */ = { + isa = PBXCodeSenseManager; + indexTemplatePath = ""; + }; + 89C053BC0ADAB7630037CA16 /* smc.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1277, 7332}}"; + sepNavSelRange = "{4720, 0}"; + sepNavVisRange = "{3934, 1965}"; + sepNavVisRect = "{{0, 7271}, {949, 421}}"; + sepNavWindowFrame = "{{95, 106}, {981, 708}}"; + }; + }; + 89C053BD0ADAB7630037CA16 /* smc.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1277, 1287}}"; + sepNavSelRange = "{883, 0}"; + sepNavVisRange = "{3, 1912}"; + sepNavVisRect = "{{0, 0}, {1011, 421}}"; + sepNavWindowFrame = "{{205, 70}, {981, 708}}"; + }; + }; + 89C456A613CD089D003CCEF0 /* CGErrorBreakpoint() */ = { + isa = PBXSymbolicBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + hitCount = 0; + ignoreCount = 0; + location = ""; + modificationTime = 332204307.539048; + originalNumberOfMultipleMatches = 1; + state = 0; + symbolName = "CGErrorBreakpoint()"; + }; + 89C456A913CD08B0003CCEF0 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 892A7F440B10B7700041B493 /* MachineDefaults.m */; + name = "MachineDefaults.m: 92"; + rLen = 0; + rLoc = 3254; + rType = 0; + vrLen = 1382; + vrLoc = 1949; + }; + 89C598A70F8CE99600E51414 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 89C598A80F8CE99600E51414 /* SUUpdater.h */; + name = "SUUpdater.h: 22"; + rLen = 34; + rLoc = 785; + rType = 0; + vrLen = 943; + vrLoc = 131; + }; + 89C598A80F8CE99600E51414 /* SUUpdater.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = SUUpdater.h; + path = /Users/hendrikh/Dropbox/Development/Prodcuts/smcfancontrol_2_2/Sparkle.framework/Versions/A/Headers/SUUpdater.h; + sourceTree = ""; + }; + 89C599950F8D080200E51414 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 894DC9E40F8AA37C006A046F /* Spanish */; + name = "InfoPlist.strings: 3"; + rLen = 0; + rLoc = 98; + rType = 0; + vrLen = 114; + vrLoc = 0; + }; + 89C599970F8D080200E51414 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 89949E8B0AEEA37700077E93 /* Power.h */; + name = "Power.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1226; + vrLoc = 0; + }; + 89E7D3640ADE819B000F67AB /* Machines.plist */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1112, 3654}}"; + sepNavSelRange = "{5693, 0}"; + sepNavVisRect = "{{0, 7}, {1112, 329}}"; + sepNavWindowFrame = "{{175, 320}, {1157, 458}}"; + }; + }; + 8D1107260486CEB800E47090 /* smcFanControl */ = { + activeExec = 0; + executables = ( + 89C053AD0ADAB7360037CA16 /* smcFanControl */, + ); + }; + 8D1107310486CEB800E47090 /* Info.plist */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {933, 546}}"; + sepNavSelRange = "{875, 0}"; + sepNavVisRange = "{0, 1032}"; + sepNavVisRect = "{{0, 0}, {947, 421}}"; + sepNavWindowFrame = "{{15, 62}, {1157, 711}}"; + }; + }; +} diff --git a/smcFanControl.xcodeproj/project.pbxproj b/smcFanControl.xcodeproj/project.pbxproj new file mode 100644 index 0000000..093735a --- /dev/null +++ b/smcFanControl.xcodeproj/project.pbxproj @@ -0,0 +1,610 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 89033CA70B80E1EB00FDAF43 /* F.A.Q.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 89033CA60B80E1EB00FDAF43 /* F.A.Q.rtf */; }; + 89148EA315E2543D00A073EE /* NSFileManager+DirectoryLocations.m in Sources */ = {isa = PBXBuildFile; fileRef = 89148EA115E2543D00A073EE /* NSFileManager+DirectoryLocations.m */; }; + 8916827A0AEBB14F00888535 /* StatusItemWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 891682790AEBB14F00888535 /* StatusItemWindow.m */; }; + 891683E90AEBD95B00888535 /* smcWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 891683E80AEBD95B00888535 /* smcWrapper.m */; }; + 8917FB860ADEECAD00443DA1 /* paypal.gif in Resources */ = {isa = PBXBuildFile; fileRef = 8917FB850ADEECAD00443DA1 /* paypal.gif */; }; + 891DEF110B40736D001A7C32 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 891DEF100B40736D001A7C32 /* WebKit.framework */; }; + 8924ECFD15AC98380031730C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8924ECFC15AC98380031730C /* IOKit.framework */; }; + 8924ECFE15AC98880031730C /* smc.c in Sources */ = {isa = PBXBuildFile; fileRef = 89C053BC0ADAB7630037CA16 /* smc.c */; }; + 892A7F450B10B7700041B493 /* MachineDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 892A7F440B10B7700041B493 /* MachineDefaults.m */; }; + 8932CF2413D08551008BC447 /* SystemVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 8932CF2313D08551008BC447 /* SystemVersion.m */; }; + 893506180B440255001BFBA5 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 893506170B440255001BFBA5 /* Localizable.strings */; }; + 894A46610ADBD6CF008785F3 /* FanControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 894A46600ADBD6CF008785F3 /* FanControl.m */; }; + 894A494B0ADBEEF4008785F3 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 894A494A0ADBEEF4008785F3 /* IOKit.framework */; }; + 89559A840BAC338500DBA37E /* smcover.png in Resources */ = {isa = PBXBuildFile; fileRef = 89559A830BAC338400DBA37E /* smcover.png */; }; + 895BDA3A0B8F8F42003CD894 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 895BDA390B8F8F42003CD894 /* Sparkle.framework */; }; + 8985F1590ADD0B5500F9EC46 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8985F1580ADD0B5500F9EC46 /* Security.framework */; }; + 8987FBD20B878B3900A5ED8E /* smc.png in Resources */ = {isa = PBXBuildFile; fileRef = 8987FBD00B878B3900A5ED8E /* smc.png */; }; + 89949E8D0AEEA37700077E93 /* Power.m in Sources */ = {isa = PBXBuildFile; fileRef = 89949E8C0AEEA37700077E93 /* Power.m */; }; + 899D59DC15E1CF60003E322D /* smc in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8924ECEE15AC96E70031730C /* smc */; }; + 899D59DD15E1CFFF003E322D /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 895BDA390B8F8F42003CD894 /* Sparkle.framework */; }; + 899D59E315E228DF003E322D /* tsensors.plist in Resources */ = {isa = PBXBuildFile; fileRef = 899D59E215E228DF003E322D /* tsensors.plist */; }; + 89B243200B7E351000CAD103 /* smcfancontrol_v2.icns in Resources */ = {isa = PBXBuildFile; fileRef = 89B2431F0B7E351000CAD103 /* smcfancontrol_v2.icns */; }; + 89C053BE0ADAB7630037CA16 /* smc.c in Sources */ = {isa = PBXBuildFile; fileRef = 89C053BC0ADAB7630037CA16 /* smc.c */; }; + 89E7D3650ADE819B000F67AB /* Machines.plist in Resources */ = {isa = PBXBuildFile; fileRef = 89E7D3640ADE819B000F67AB /* Machines.plist */; }; + 89FE24230B7F4CD300D2713C /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 89FE24210B7F4CD300D2713C /* MainMenu.nib */; }; + 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; + 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; + 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 8924ECEC15AC96E70031730C /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; + 895BDA550B8F90D3003CD894 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 7; + files = ( + 899D59DC15E1CF60003E322D /* smc in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 89B156840BA411BF002A258A /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 899D59DD15E1CFFF003E322D /* Sparkle.framework in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; + 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 89033CA10B80E1DF00FDAF43 /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/F.A.Q.rtf; sourceTree = ""; }; + 89033D900B80F61E00FDAF43 /* German */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = German; path = German.lproj/F.A.Q.rtf; sourceTree = ""; }; + 89148EA115E2543D00A073EE /* NSFileManager+DirectoryLocations.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSFileManager+DirectoryLocations.m"; sourceTree = ""; }; + 89148EA215E2543D00A073EE /* NSFileManager+DirectoryLocations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSFileManager+DirectoryLocations.h"; sourceTree = ""; }; + 891682780AEBB14F00888535 /* StatusItemWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StatusItemWindow.h; sourceTree = ""; }; + 891682790AEBB14F00888535 /* StatusItemWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StatusItemWindow.m; sourceTree = ""; }; + 891683E70AEBD95B00888535 /* smcWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smcWrapper.h; sourceTree = ""; }; + 891683E80AEBD95B00888535 /* smcWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = smcWrapper.m; sourceTree = ""; }; + 8917FB850ADEECAD00443DA1 /* paypal.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = paypal.gif; sourceTree = ""; }; + 891DEF100B40736D001A7C32 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = ""; }; + 8924ECEE15AC96E70031730C /* smc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = smc; sourceTree = BUILT_PRODUCTS_DIR; }; + 8924ECFC15AC98380031730C /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/IOKit.framework; sourceTree = DEVELOPER_DIR; }; + 892A7F430B10B7700041B493 /* MachineDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MachineDefaults.h; sourceTree = ""; }; + 892A7F440B10B7700041B493 /* MachineDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MachineDefaults.m; sourceTree = ""; }; + 8932CF2213D0850F008BC447 /* SystemVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SystemVersion.h; sourceTree = ""; }; + 8932CF2313D08551008BC447 /* SystemVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SystemVersion.m; sourceTree = ""; }; + 8932CFF813D08DC4008BC447 /* Dutch */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = Dutch; path = Dutch.lproj/F.A.Q.rtf; sourceTree = ""; }; + 8932CFF913D08DD7008BC447 /* Dutch */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Dutch; path = Dutch.lproj/Localizable.strings; sourceTree = ""; }; + 8932CFFA13D08DDF008BC447 /* Dutch */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Dutch; path = Dutch.lproj/MainMenu.nib; sourceTree = ""; }; + 893506130B440249001BFBA5 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/Localizable.strings; sourceTree = ""; }; + 8935061B0B440264001BFBA5 /* German */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = German; path = German.lproj/Localizable.strings; sourceTree = ""; }; + 894A465F0ADBD6CF008785F3 /* FanControl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FanControl.h; sourceTree = ""; }; + 894A46600ADBD6CF008785F3 /* FanControl.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = FanControl.m; sourceTree = ""; }; + 894A494A0ADBEEF4008785F3 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; + 894DC9E20F8AA367006A046F /* Spanish */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Spanish; path = Spanish.lproj/MainMenu.nib; sourceTree = ""; }; + 894DC9E30F8AA36F006A046F /* Spanish */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = Spanish; path = Spanish.lproj/F.A.Q.rtf; sourceTree = ""; }; + 894DC9E40F8AA37C006A046F /* Spanish */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = Spanish; path = Spanish.lproj/InfoPlist.strings; sourceTree = ""; }; + 894DC9E60F8AA399006A046F /* Spanish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Spanish; path = Spanish.lproj/Localizable.strings; sourceTree = ""; }; + 89559A830BAC338400DBA37E /* smcover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = smcover.png; sourceTree = ""; }; + 895BDA390B8F8F42003CD894 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = ""; }; + 8985F1580ADD0B5500F9EC46 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = ""; }; + 8987FBD00B878B3900A5ED8E /* smc.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = smc.png; sourceTree = ""; }; + 89949E8B0AEEA37700077E93 /* Power.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Power.h; sourceTree = ""; }; + 89949E8C0AEEA37700077E93 /* Power.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Power.m; sourceTree = ""; }; + 899D59E215E228DF003E322D /* tsensors.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = tsensors.plist; sourceTree = ""; }; + 89B2431F0B7E351000CAD103 /* smcfancontrol_v2.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = smcfancontrol_v2.icns; sourceTree = ""; }; + 89C053BC0ADAB7630037CA16 /* smc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = smc.c; sourceTree = ""; }; + 89C053BD0ADAB7630037CA16 /* smc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = smc.h; sourceTree = ""; }; + 89E7D3640ADE819B000F67AB /* Machines.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = Machines.plist; sourceTree = ""; }; + 89FE24050B7F4C2B00D2713C /* paypal.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = paypal.gif; sourceTree = ""; }; + 89FE24220B7F4CD300D2713C /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = ""; }; + 89FE24280B7F4CE900D2713C /* German */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = German; path = German.lproj/MainMenu.nib; sourceTree = ""; }; + 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8D1107320486CEB800E47090 /* smcFanControl.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = smcFanControl.app; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8924ECEB15AC96E70031730C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8924ECFD15AC98380031730C /* IOKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8D11072E0486CEB800E47090 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, + 894A494B0ADBEEF4008785F3 /* IOKit.framework in Frameworks */, + 8985F1590ADD0B5500F9EC46 /* Security.framework in Frameworks */, + 891DEF110B40736D001A7C32 /* WebKit.framework in Frameworks */, + 895BDA3A0B8F8F42003CD894 /* Sparkle.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 080E96DDFE201D6D7F000001 /* Classes */ = { + isa = PBXGroup; + children = ( + 89148EA115E2543D00A073EE /* NSFileManager+DirectoryLocations.m */, + 89148EA215E2543D00A073EE /* NSFileManager+DirectoryLocations.h */, + 894A465F0ADBD6CF008785F3 /* FanControl.h */, + 894A46600ADBD6CF008785F3 /* FanControl.m */, + 891682780AEBB14F00888535 /* StatusItemWindow.h */, + 891682790AEBB14F00888535 /* StatusItemWindow.m */, + 891683E70AEBD95B00888535 /* smcWrapper.h */, + 891683E80AEBD95B00888535 /* smcWrapper.m */, + 89949E8B0AEEA37700077E93 /* Power.h */, + 89949E8C0AEEA37700077E93 /* Power.m */, + 892A7F430B10B7700041B493 /* MachineDefaults.h */, + 892A7F440B10B7700041B493 /* MachineDefaults.m */, + 8932CF2213D0850F008BC447 /* SystemVersion.h */, + 8932CF2313D08551008BC447 /* SystemVersion.m */, + ); + path = Classes; + sourceTree = ""; + }; + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 895BDA390B8F8F42003CD894 /* Sparkle.framework */, + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 8924ECFC15AC98380031730C /* IOKit.framework */, + 891DEF100B40736D001A7C32 /* WebKit.framework */, + 8985F1580ADD0B5500F9EC46 /* Security.framework */, + 894A494A0ADBEEF4008785F3 /* IOKit.framework */, + 29B97324FDCFA39411CA2CEA /* AppKit.framework */, + 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */, + 29B97325FDCFA39411CA2CEA /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FACFE9D520D11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D1107320486CEB800E47090 /* smcFanControl.app */, + 8924ECEE15AC96E70031730C /* smc */, + ); + name = Products; + sourceTree = ""; + }; + 29B97314FDCFA39411CA2CEA /* FanControl */ = { + isa = PBXGroup; + children = ( + 898C281A15E2B6E30044EEC3 /* smc-command */, + 080E96DDFE201D6D7F000001 /* Classes */, + 29B97315FDCFA39411CA2CEA /* Other Sources */, + 29B97317FDCFA39411CA2CEA /* Resources */, + 8D1107310486CEB800E47090 /* Info.plist */, + 29B97323FDCFA39411CA2CEA /* Frameworks */, + 19C28FACFE9D520D11CA2CBB /* Products */, + ); + name = FanControl; + sourceTree = ""; + }; + 29B97315FDCFA39411CA2CEA /* Other Sources */ = { + isa = PBXGroup; + children = ( + 29B97316FDCFA39411CA2CEA /* main.m */, + ); + name = "Other Sources"; + sourceTree = ""; + }; + 29B97317FDCFA39411CA2CEA /* Resources */ = { + isa = PBXGroup; + children = ( + 89559A830BAC338400DBA37E /* smcover.png */, + 8987FBD00B878B3900A5ED8E /* smc.png */, + 89033CA60B80E1EB00FDAF43 /* F.A.Q.rtf */, + 89FE24210B7F4CD300D2713C /* MainMenu.nib */, + 89B2431F0B7E351000CAD103 /* smcfancontrol_v2.icns */, + 8917FB850ADEECAD00443DA1 /* paypal.gif */, + 89E7D3640ADE819B000F67AB /* Machines.plist */, + 899D59E215E228DF003E322D /* tsensors.plist */, + 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, + 893506170B440255001BFBA5 /* Localizable.strings */, + 89FE24050B7F4C2B00D2713C /* paypal.gif */, + ); + name = Resources; + path = Ressources; + sourceTree = ""; + }; + 29B97323FDCFA39411CA2CEA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + 898C281A15E2B6E30044EEC3 /* smc-command */ = { + isa = PBXGroup; + children = ( + 89C053BC0ADAB7630037CA16 /* smc.c */, + 89C053BD0ADAB7630037CA16 /* smc.h */, + ); + path = "smc-command"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8924ECED15AC96E70031730C /* smc */ = { + isa = PBXNativeTarget; + buildConfigurationList = 8924ECF515AC96E70031730C /* Build configuration list for PBXNativeTarget "smc" */; + buildPhases = ( + 8924ECEA15AC96E70031730C /* Sources */, + 8924ECEB15AC96E70031730C /* Frameworks */, + 8924ECEC15AC96E70031730C /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = smc; + productName = "smc-command"; + productReference = 8924ECEE15AC96E70031730C /* smc */; + productType = "com.apple.product-type.tool"; + }; + 8D1107260486CEB800E47090 /* smcFanControl */ = { + isa = PBXNativeTarget; + buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "smcFanControl" */; + buildPhases = ( + 8D1107290486CEB800E47090 /* Resources */, + 8D11072C0486CEB800E47090 /* Sources */, + 8D11072E0486CEB800E47090 /* Frameworks */, + 895BDA550B8F90D3003CD894 /* CopyFiles */, + 89B156840BA411BF002A258A /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = smcFanControl; + productInstallPath = "$(HOME)/Applications"; + productName = FanControl; + productReference = 8D1107320486CEB800E47090 /* smcFanControl.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 29B97313FDCFA39411CA2CEA /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0440; + }; + buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "smcFanControl" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + Italian, + zh_TW, + Spanish, + Dutch, + ); + mainGroup = 29B97314FDCFA39411CA2CEA /* FanControl */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8D1107260486CEB800E47090 /* smcFanControl */, + 8924ECED15AC96E70031730C /* smc */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D1107290486CEB800E47090 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, + 89E7D3650ADE819B000F67AB /* Machines.plist in Resources */, + 8917FB860ADEECAD00443DA1 /* paypal.gif in Resources */, + 893506180B440255001BFBA5 /* Localizable.strings in Resources */, + 89B243200B7E351000CAD103 /* smcfancontrol_v2.icns in Resources */, + 89FE24230B7F4CD300D2713C /* MainMenu.nib in Resources */, + 89033CA70B80E1EB00FDAF43 /* F.A.Q.rtf in Resources */, + 8987FBD20B878B3900A5ED8E /* smc.png in Resources */, + 89559A840BAC338500DBA37E /* smcover.png in Resources */, + 899D59E315E228DF003E322D /* tsensors.plist in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8924ECEA15AC96E70031730C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8924ECFE15AC98880031730C /* smc.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8D11072C0486CEB800E47090 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D11072D0486CEB800E47090 /* main.m in Sources */, + 89C053BE0ADAB7630037CA16 /* smc.c in Sources */, + 894A46610ADBD6CF008785F3 /* FanControl.m in Sources */, + 8916827A0AEBB14F00888535 /* StatusItemWindow.m in Sources */, + 891683E90AEBD95B00888535 /* smcWrapper.m in Sources */, + 89949E8D0AEEA37700077E93 /* Power.m in Sources */, + 892A7F450B10B7700041B493 /* MachineDefaults.m in Sources */, + 8932CF2413D08551008BC447 /* SystemVersion.m in Sources */, + 89148EA315E2543D00A073EE /* NSFileManager+DirectoryLocations.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C165DFE840E0CC02AAC07 /* English */, + 894DC9E40F8AA37C006A046F /* Spanish */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 89033CA60B80E1EB00FDAF43 /* F.A.Q.rtf */ = { + isa = PBXVariantGroup; + children = ( + 89033CA10B80E1DF00FDAF43 /* English */, + 89033D900B80F61E00FDAF43 /* German */, + 894DC9E30F8AA36F006A046F /* Spanish */, + 8932CFF813D08DC4008BC447 /* Dutch */, + ); + name = F.A.Q.rtf; + sourceTree = ""; + }; + 893506170B440255001BFBA5 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + 893506130B440249001BFBA5 /* English */, + 8935061B0B440264001BFBA5 /* German */, + 894DC9E60F8AA399006A046F /* Spanish */, + 8932CFF913D08DD7008BC447 /* Dutch */, + ); + name = Localizable.strings; + sourceTree = ""; + }; + 89FE24210B7F4CD300D2713C /* MainMenu.nib */ = { + isa = PBXVariantGroup; + children = ( + 89FE24220B7F4CD300D2713C /* English */, + 89FE24280B7F4CE900D2713C /* German */, + 894DC9E20F8AA367006A046F /* Spanish */, + 8932CFFA13D08DDF008BC447 /* Dutch */, + ); + name = MainMenu.nib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 8924ECF615AC96E70031730C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "Developer ID Application: Hendrik Holtmann"; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = CMD_TOOL; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + SDKROOT = macosx10.7; + }; + name = Debug; + }; + 8924ECF715AC96E70031730C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "Developer ID Application: Hendrik Holtmann"; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_PREPROCESSOR_DEFINITIONS = CMD_TOOL; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.5; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + SDKROOT = macosx10.7; + }; + name = Release; + }; + C01FCF4B08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CODE_SIGN_IDENTITY = "Developer ID Application: Hendrik Holtmann"; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + ".//**", + "$(inherited)", + ); + GCC_DYNAMIC_NO_PIC = NO; + GCC_MODEL_PPC64 = NO; + GCC_MODEL_TUNING = ""; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = ""; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SDKROOT)/usr/lib/system\"", + ); + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = NO; + PRODUCT_NAME = smcFanControl; + PROVISIONING_PROFILE = ""; + SDKROOT = macosx10.7; + WRAPPER_EXTENSION = app; + ZERO_LINK = YES; + }; + name = Debug; + }; + C01FCF4C08A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CODE_SIGN_IDENTITY = "Developer ID Application: Hendrik Holtmann"; + COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)\""; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = ""; + GCC_VERSION = ""; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SDKROOT)/usr/lib/system\"", + ); + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = NO; + PRODUCT_NAME = smcFanControl; + PROVISIONING_PROFILE = ""; + SDKROOT = macosx10.7; + VALID_ARCHS = "i386 x86_64"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; + C01FCF4F08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + GCC_VERSION = ""; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = NO; + OTHER_CFLAGS = "-fnested-functions"; + OTHER_LDFLAGS = ""; + SDKROOT = macosx10.7; + VALID_ARCHS = "i386 x86_64"; + }; + name = Debug; + }; + C01FCF5008A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + GCC_VERSION = ""; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = NO; + OTHER_CFLAGS = "-fnested-functions"; + OTHER_LDFLAGS = ""; + SDKROOT = macosx10.7; + SYMROOT = "~/builds"; + VALID_ARCHS = "i386 x86_64"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 8924ECF515AC96E70031730C /* Build configuration list for PBXNativeTarget "smc" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8924ECF615AC96E70031730C /* Debug */, + 8924ECF715AC96E70031730C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "smcFanControl" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4B08A954540054247B /* Debug */, + C01FCF4C08A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C01FCF4E08A954540054247B /* Build configuration list for PBXProject "smcFanControl" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4F08A954540054247B /* Debug */, + C01FCF5008A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; +} diff --git a/smcFanControl.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/smcFanControl.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..9ee80ee --- /dev/null +++ b/smcFanControl.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/smcFanControl.xcodeproj/project.xcworkspace/xcuserdata/hendrikh.xcuserdatad/UserInterfaceState.xcuserstate b/smcFanControl.xcodeproj/project.xcworkspace/xcuserdata/hendrikh.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..3de4a3b Binary files /dev/null and b/smcFanControl.xcodeproj/project.xcworkspace/xcuserdata/hendrikh.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/smcFanControl.xcodeproj/project.xcworkspace/xcuserdata/hendrikh.xcuserdatad/WorkspaceSettings.xcsettings b/smcFanControl.xcodeproj/project.xcworkspace/xcuserdata/hendrikh.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..c9f6a3d --- /dev/null +++ b/smcFanControl.xcodeproj/project.xcworkspace/xcuserdata/hendrikh.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,12 @@ + + + + + IDEWorkspaceUserSettings_BuildLocationStyle + 2 + IDEWorkspaceUserSettings_HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges + + IDEWorkspaceUserSettings_SnapshotAutomaticallyBeforeSignificantChanges + + + diff --git a/smcFanControl.xcodeproj/xcuserdata/hendrikh.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/smcFanControl.xcodeproj/xcuserdata/hendrikh.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist new file mode 100644 index 0000000..ac62168 --- /dev/null +++ b/smcFanControl.xcodeproj/xcuserdata/hendrikh.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -0,0 +1,14 @@ + + + + + + + diff --git a/smcFanControl.xcodeproj/xcuserdata/hendrikh.xcuserdatad/xcschemes/xcschememanagement.plist b/smcFanControl.xcodeproj/xcuserdata/hendrikh.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..916524e --- /dev/null +++ b/smcFanControl.xcodeproj/xcuserdata/hendrikh.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,32 @@ + + + + + SchemeUserState + + smc-command.xcscheme + + orderHint + 1 + + smcFanControl.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 8924ECED15AC96E70031730C + + primary + + + 8D1107260486CEB800E47090 + + primary + + + + +